diff --git a/404.html b/404.html index e36390a9..dbe4d564 100644 --- a/404.html +++ b/404.html @@ -4,124 +4,82 @@ - + Page not found (404) • pRoloc - - - - - - - + + + + + - - - -
-
-
- Content not found. Please use links in the navbar. -
- - - +
- -
- diff --git a/CONDUCT.html b/CONDUCT.html index 6ae19548..c745b716 100644 --- a/CONDUCT.html +++ b/CONDUCT.html @@ -1,71 +1,43 @@ -Contributor Code of Conduct • pRoloc - - -
-
+
+
+
-
-
@@ -78,26 +50,18 @@

Contributor Code of Conduct

This Code of Conduct is adapted from the Contributor Covenant, version 1.0.0, available from http://contributor-covenant.org/version/1/0/0/

-
+
- +
- + diff --git a/articles/index.html b/articles/index.html index 7c39ffe7..b996e68b 100644 --- a/articles/index.html +++ b/articles/index.html @@ -1,76 +1,47 @@ -Articles • pRoloc - - -
-
+
+
+
-
- -
-
+
- diff --git a/articles/v01-pRoloc-tutorial.html b/articles/v01-pRoloc-tutorial.html index 4f0d59e2..db22a88d 100644 --- a/articles/v01-pRoloc-tutorial.html +++ b/articles/v01-pRoloc-tutorial.html @@ -4,93 +4,63 @@ - + Using pRoloc for spatial proteomics data analysis • pRoloc - - - - - - - + + + + + - + + Skip to contents -
-
-
- @@ -555,7 +526,7 @@

The MSnSet classMSnSet class is available by typing ?MSnSet in the R console.

-Dimension requirements for the respective expression, feature and sample meta-data slots.
Dimension requirements for the respective +Dimension requirements for the respective expression, feature and sample meta-data slots.
Dimension requirements for the respective expression, feature and sample meta-data slots.

The individual parts of this data object can be accessed with their @@ -637,21 +608,35 @@

using the pRolocmarkers function:

-
## 7 marker lists available:
+
## 14 marker lists (version 2) available:
 ## Arabidopsis thaliana [atha]:
 ##  Ids: TAIR, 543 markers
 ## Drosophila melanogaster [dmel]:
 ##  Ids: Uniprot, 179 markers
 ## Gallus gallus [ggal]:
 ##  Ids: IPI, 102 markers
+## Homo sapiens [hsap_christopher]:
+##  Ids: Uniprot, 1509 markers
+## Homo sapiens [hsap_geladaki]:
+##  Ids: Uniprot, 579 markers
+## Homo sapiens [hsap_itzhak]:
+##  Ids: Uniprot, 1076 markers
+## Homo sapiens [hsap_villaneuva]:
+##  Ids: Uniprot, 682 markers
 ## Homo sapiens [hsap]:
 ##  Ids: Uniprot, 872 markers
+## Mus musculus [mmus_christoforou]:
+##  Ids: Uniprot, 922 markers
 ## Mus musculus [mmus]:
 ##  Ids: Uniprot, 937 markers
 ## Saccharomyces cerevisiae [scer_sgd]:
 ##  Ids: SGD, 259 markers
 ## Saccharomyces cerevisiae [scer_uniprot]:
-##  Ids: Uniprot Accession, 259 markers
+## Ids: Uniprot, 259 markers +## Toxoplasma gondii [toxo_barylyuk]: +## Ids: ToxoDB gene identifier, 718 markers +## Trypanosoma brucei [tryp_moloney]: +## Ids: TriTrypDB gene identifier, 891 markers
##       Q7JZN0       Q7KLV9       Q9VIU7       P15348       Q7KMP8       O01367 
@@ -659,12 +644,12 @@ 

## 
-##  Cytoskeleton            ER         Golgi      Lysosome mitochondrion 
-##             7            24             7             8            15 
-##       Nucleus    Peroxisome            PM    Proteasome  Ribosome 40S 
-##            21             4            25            14            22 
-##  Ribosome 60S 
-##            32
+## 40S Ribosome 60S Ribosome Cytoskeleton ER Golgi +## 22 32 7 24 7 +## Lysosome Mitochondrion Nucleus Peroxisome PM +## 8 15 21 4 25 +## Proteasome +## 14

These markers can then be added to a new MSnSet using the addMarkers function by matching the marker names (protein identifiers) and the feature names of the MSnSet. See @@ -692,7 +677,9 @@

Data processingscale method.

In the code chunk below, we first create a test MSnSet -instance2 +instance2 and illustrate the effect of normalise(..., method = "sum").

-Snapshot of the 3-dimensional PCA plot. The tan2009r1 data is represented along the first 3 principal components.
Snapshot of the 3-dimensional PCA plot. The +Snapshot of the 3-dimensional PCA plot. The tan2009r1 data is represented along the first 3 principal components.
Snapshot of the 3-dimensional PCA plot. The tan2009r1 data is represented along the first 3 principal components.
@@ -930,7 +917,7 @@

Dimensionality reduction3 (Maaten and Hinton 2008) is widely applied in +

The t-Distributed Stochastic Neighbour Embedding (t-SNE)3 (Maaten and Hinton 2008) is widely applied in many areas in computational biology and more generally field that need to visualise high-dimensional data. The t-SNE method is non-linear, and will emphasise separation of different features while grouping features @@ -938,7 +925,7 @@

Dimensionality reduction4 for a useful +original data. See How to Use t-SNE Effectively4 for a useful non-technical introduction.

The results of the algorithm crucially depend on the values of its input parameters, in particular the perplexity, which balances @@ -960,7 +947,7 @@

Dimensionality reductiontitle(main = paste("t-SNE, perplexity", perp)) })

-Effect of t-SNE’s perplexity parameter on the human HEK293T2011 data.
Effect of t-SNE’s perplexity parameter on the +Effect of t-SNE’s perplexity parameter on the human HEK293T2011 data.
Effect of t-SNE’s perplexity parameter on the human HEK293T2011 data.

Other parameters that can effect the results are the number of @@ -1035,7 +1022,7 @@

Interactive visualisationlibrary("pRolocGUI") pRolocVis(tan2009r1)

-Screenshot of the pRolocGUI interface. The GUI is also available as an online app for the hyperLOPIT experiment from (Christoforou et al. 2016) at https://lgatto.shinyapps.io/christoforou2015/.
Screenshot of the pRolocGUI +Screenshot of the pRolocGUI interface. The GUI is also available as an online app for the hyperLOPIT experiment from (Christoforou et al. 2016) at https://lgatto.shinyapps.io/christoforou2015/.
Screenshot of the pRolocGUI interface. The GUI is also available as an online app for the hyperLOPIT experiment from (Christoforou et al. 2016) at https://lgatto.shinyapps.io/christoforou2015/.
@@ -1349,7 +1336,7 @@

ClassificationprocessingData(svmres)

## - - - Processing information - - -
 ## Added markers from  'mrk' marker vector. Thu Jul 16 22:53:44 2015 
-## Performed svm prediction (sigma=0.1 cost=0.5) Sun Jun 16 10:14:15 2024 
+## Performed svm prediction (sigma=0.1 cost=0.5) Fri Oct 18 17:21:32 2024 
 ##  MSnbase version: 1.17.12
 tail(fvarLabels(svmres), 4)
@@ -1465,8 +1452,8 @@

Classification## Annotation: ## - - - Processing information - - - ## Added markers from 'mrk' marker vector. Thu Jul 16 22:53:44 2015 -## Performed svm prediction (sigma=0.1 cost=0.5) Sun Jun 16 10:14:15 2024 -## Added svm predictions according to thresholds: ER = 0.84, Golgi = 0.63, mitochondrion = 0.75, PM = 0.77 Sun Jun 16 10:14:15 2024 +## Performed svm prediction (sigma=0.1 cost=0.5) Fri Oct 18 17:21:32 2024 +## Added svm predictions according to thresholds: ER = 0.84, Golgi = 0.63, mitochondrion = 0.75, PM = 0.77 Fri Oct 18 17:21:32 2024 ## MSnbase version: 1.17.12

We can now visualise these results using the plotting functions presented in section @ref(sec:usml), as shown on figure @@ -1653,9 +1640,9 @@

Session information## R version 4.4.0 (2024-04-24) +
## R version 4.4.1 (2024-06-14)
 ## Platform: x86_64-pc-linux-gnu
-## Running under: Ubuntu 22.04.4 LTS
+## Running under: Ubuntu 22.04.5 LTS
 ## 
 ## Matrix products: default
 ## BLAS:   /usr/lib/x86_64-linux-gnu/openblas-pthread/libblas.so.3 
@@ -1677,96 +1664,96 @@ 

Session information## [8] base ## ## other attached packages: -## [1] class_7.3-22 pRolocdata_1.43.0 pRoloc_1.45.1 +## [1] class_7.3-22 pRolocdata_1.43.3 pRoloc_1.45.2 ## [4] BiocParallel_1.39.0 MLInterfaces_1.85.0 cluster_2.1.6 -## [7] annotate_1.83.0 XML_3.99-0.16.1 AnnotationDbi_1.67.0 -## [10] IRanges_2.39.0 MSnbase_2.31.1 ProtGenerics_1.37.0 -## [13] S4Vectors_0.43.0 mzR_2.39.0 Rcpp_1.0.12 -## [16] Biobase_2.65.0 BiocGenerics_0.51.0 knitr_1.47 +## [7] annotate_1.83.0 XML_3.99-0.17 AnnotationDbi_1.67.0 +## [10] IRanges_2.39.2 MSnbase_2.31.1 ProtGenerics_1.37.1 +## [13] S4Vectors_0.43.2 mzR_2.39.2 Rcpp_1.0.13 +## [16] Biobase_2.65.1 BiocGenerics_0.51.3 knitr_1.48 ## [19] BiocStyle_2.33.1 ## ## loaded via a namespace (and not attached): -## [1] splines_4.4.0 filelock_1.0.3 +## [1] splines_4.4.1 filelock_1.0.3 ## [3] tibble_3.2.1 hardhat_1.4.0 -## [5] preprocessCore_1.67.0 pROC_1.18.5 +## [5] preprocessCore_1.67.1 pROC_1.18.5 ## [7] rpart_4.1.23 lifecycle_1.0.4 -## [9] httr2_1.0.1 doParallel_1.0.17 +## [9] httr2_1.0.5 doParallel_1.0.17 ## [11] globals_0.16.3 lattice_0.22-6 -## [13] MASS_7.3-60.2 MultiAssayExperiment_1.31.3 -## [15] dendextend_1.17.1 magrittr_2.0.3 -## [17] limma_3.61.2 plotly_4.10.4 -## [19] sass_0.4.9 rmarkdown_2.27 -## [21] jquerylib_0.1.4 yaml_2.3.8 -## [23] MsCoreUtils_1.17.0 DBI_1.2.3 +## [13] MASS_7.3-61 MultiAssayExperiment_1.31.5 +## [15] dendextend_1.18.1 magrittr_2.0.3 +## [17] limma_3.61.12 plotly_4.10.4 +## [19] sass_0.4.9 rmarkdown_2.28 +## [21] jquerylib_0.1.4 yaml_2.3.10 +## [23] MsCoreUtils_1.17.2 DBI_1.2.3 ## [25] RColorBrewer_1.1-3 lubridate_1.9.3 -## [27] abind_1.4-5 zlibbioc_1.51.1 -## [29] GenomicRanges_1.57.1 purrr_1.0.2 +## [27] abind_1.4-8 zlibbioc_1.51.1 +## [29] GenomicRanges_1.57.2 purrr_1.0.2 ## [31] mixtools_2.0.0 AnnotationFilter_1.29.0 ## [33] nnet_7.3-19 rappdirs_0.3.3 -## [35] ipred_0.9-14 lava_1.8.0 -## [37] GenomeInfoDbData_1.2.12 listenv_0.9.1 -## [39] gdata_3.0.0 parallelly_1.37.1 -## [41] pkgdown_2.0.9.9000 ncdf4_1.22 -## [43] codetools_0.2-20 DelayedArray_0.31.1 +## [35] ipred_0.9-15 lava_1.8.0 +## [37] GenomeInfoDbData_1.2.13 listenv_0.9.1 +## [39] gdata_3.0.0 parallelly_1.38.0 +## [41] pkgdown_2.1.1.9000 ncdf4_1.23 +## [43] codetools_0.2-20 DelayedArray_0.31.14 ## [45] xml2_1.3.6 tidyselect_1.2.1 ## [47] farver_2.1.2 UCSC.utils_1.1.0 -## [49] viridis_0.6.5 matrixStats_1.3.0 -## [51] BiocFileCache_2.13.0 jsonlite_1.8.8 -## [53] caret_6.0-94 e1071_1.7-14 +## [49] viridis_0.6.5 matrixStats_1.4.1 +## [51] BiocFileCache_2.13.2 jsonlite_1.8.9 +## [53] caret_6.0-94 e1071_1.7-16 ## [55] survival_3.7-0 iterators_1.0.14 ## [57] systemfonts_1.1.0 foreach_1.5.2 -## [59] segmented_2.1-0 tools_4.4.0 -## [61] progress_1.2.3 ragg_1.3.2 -## [63] glue_1.7.0 prodlim_2023.08.28 -## [65] gridExtra_2.3 SparseArray_1.5.8 -## [67] xfun_0.44 MatrixGenerics_1.17.0 -## [69] GenomeInfoDb_1.41.1 dplyr_1.1.4 -## [71] withr_3.0.0 BiocManager_1.30.23 +## [59] segmented_2.1-2 tools_4.4.1 +## [61] progress_1.2.3 ragg_1.3.3 +## [63] glue_1.8.0 prodlim_2024.06.25 +## [65] gridExtra_2.3 SparseArray_1.5.45 +## [67] xfun_0.48 MatrixGenerics_1.17.0 +## [69] GenomeInfoDb_1.41.2 dplyr_1.1.4 +## [71] withr_3.0.1 BiocManager_1.30.25 ## [73] fastmap_1.2.0 fansi_1.0.6 -## [75] digest_0.6.35 timechange_0.3.0 +## [75] digest_0.6.37 timechange_0.3.0 ## [77] R6_2.5.1 textshaping_0.4.0 -## [79] colorspace_2.1-0 gtools_3.9.5 -## [81] lpSolve_5.6.20 biomaRt_2.61.1 +## [79] colorspace_2.1-1 gtools_3.9.5 +## [81] lpSolve_5.6.21 biomaRt_2.61.3 ## [83] RSQLite_2.3.7 utf8_1.2.4 ## [85] tidyr_1.3.1 generics_0.1.3 -## [87] hexbin_1.28.3 data.table_1.15.4 -## [89] recipes_1.0.10 FNN_1.1.4 +## [87] hexbin_1.28.4 data.table_1.16.2 +## [89] recipes_1.1.0 FNN_1.1.4.1 ## [91] prettyunits_1.2.0 PSMatch_1.9.0 ## [93] httr_1.4.7 htmlwidgets_1.6.4 -## [95] S4Arrays_1.5.1 ModelMetrics_1.2.2.2 +## [95] S4Arrays_1.5.11 ModelMetrics_1.2.2.2 ## [97] pkgconfig_2.0.3 gtable_0.3.5 -## [99] timeDate_4032.109 blob_1.2.4 +## [99] timeDate_4041.110 blob_1.2.4 ## [101] impute_1.79.0 XVector_0.45.0 -## [103] htmltools_0.5.8.1 bookdown_0.39 -## [105] MALDIquant_1.22.2 clue_0.3-65 +## [103] htmltools_0.5.8.1 bookdown_0.41 +## [105] MALDIquant_1.22.3 clue_0.3-65 ## [107] scales_1.3.0 png_0.1-8 ## [109] gower_1.0.1 reshape2_1.4.4 -## [111] coda_0.19-4.1 nlme_3.1-165 -## [113] curl_5.2.1 proxy_0.4-27 +## [111] coda_0.19-4.1 nlme_3.1-166 +## [113] curl_5.2.3 proxy_0.4-27 ## [115] cachem_1.1.0 stringr_1.5.1 -## [117] parallel_4.4.0 mzID_1.43.0 +## [117] parallel_4.4.1 mzID_1.43.0 ## [119] vsn_3.73.0 desc_1.4.3 -## [121] pillar_1.9.0 grid_4.4.0 +## [121] pillar_1.9.0 grid_4.4.1 ## [123] vctrs_0.6.5 pcaMethods_1.97.0 -## [125] randomForest_4.7-1.1 dbplyr_2.5.0 -## [127] xtable_1.8-4 evaluate_0.24.0 -## [129] mvtnorm_1.2-5 cli_3.6.2 -## [131] compiler_4.4.0 rlang_1.1.4 -## [133] crayon_1.5.2 future.apply_1.11.2 +## [125] randomForest_4.7-1.2 dbplyr_2.5.0 +## [127] xtable_1.8-4 evaluate_1.0.1 +## [129] mvtnorm_1.3-1 cli_3.6.3 +## [131] compiler_4.4.1 rlang_1.1.4 +## [133] crayon_1.5.3 future.apply_1.11.2 ## [135] labeling_0.4.3 LaplacesDemon_16.1.6 -## [137] mclust_6.1.1 QFeatures_1.15.1 -## [139] affy_1.83.0 plyr_1.8.9 +## [137] mclust_6.1.1 QFeatures_1.15.3 +## [139] affy_1.83.1 plyr_1.8.9 ## [141] fs_1.6.4 stringi_1.8.4 ## [143] viridisLite_0.4.2 munsell_0.5.1 -## [145] Biostrings_2.73.1 lazyeval_0.2.2 +## [145] Biostrings_2.73.2 lazyeval_0.2.2 ## [147] Matrix_1.7-0 hms_1.1.3 -## [149] bit64_4.0.5 future_1.33.2 -## [151] ggplot2_3.5.1 KEGGREST_1.45.0 +## [149] bit64_4.5.2 future_1.34.0 +## [151] ggplot2_3.5.1 KEGGREST_1.45.1 ## [153] statmod_1.5.0 highr_0.11 -## [155] SummarizedExperiment_1.35.0 kernlab_0.9-32 +## [155] SummarizedExperiment_1.35.4 kernlab_0.9-33 ## [157] igraph_2.0.3 memoise_2.0.1 -## [159] affyio_1.75.0 bslib_0.7.0 -## [161] sampling_2.10 bit_4.0.5

+## [159] affyio_1.75.1 bslib_0.8.0 +## [161] sampling_2.10 bit_4.5.0

References @@ -1851,46 +1838,27 @@

References -
-
    -
  1. The content of this document is compiled (the code is -executed and its output, text and figures, is displayed dynamically) to -generate the pdf file.↩︎

  2. -
  3. Briefly, the itraqdata raw iTRAQ4-plex data -is quantified by trapezoidation using MSnbase -functionality. See the MSnbase-demo vignette for details.↩︎

  4. -
  5. https://lvdmaaten.github.io/tsne/↩︎

  6. -
  7. http://distill.pub/2016/misread-tsne/↩︎

  8. -
-

-

- - +

-
- diff --git a/articles/v02-pRoloc-ml.html b/articles/v02-pRoloc-ml.html index a474467b..ecbc5e9e 100644 --- a/articles/v02-pRoloc-ml.html +++ b/articles/v02-pRoloc-ml.html @@ -4,99 +4,68 @@ - + Machine learning techniques available in pRoloc • pRoloc - - - - - - - + + + + + - + + Skip to contents -
-
-
- - diff --git a/articles/v03-pRoloc-bayesian.html b/articles/v03-pRoloc-bayesian.html index 83896b24..ba6a335d 100644 --- a/articles/v03-pRoloc-bayesian.html +++ b/articles/v03-pRoloc-bayesian.html @@ -4,93 +4,63 @@ - + Bayesian Analysis of Spatial Proteomics data using pRoloc • pRoloc - - - - - - - + + + + + - - - -
-
-
- -
- diff --git a/articles/v04-pRoloc-goannotations.html b/articles/v04-pRoloc-goannotations.html index 417217e3..cb1646c1 100644 --- a/articles/v04-pRoloc-goannotations.html +++ b/articles/v04-pRoloc-goannotations.html @@ -4,92 +4,63 @@ - + Annotating spatial proteomics data • pRoloc - - - - - - - + + + + + - + + Skip to contents -
-
-
- @@ -323,13 +293,13 @@

Examining distancesdd[[1]]

## Object of class "ClustDist"
 ## fcol =  GOAnnotations 
-##  term =  cytoskeleton 
+##  term =  GO:0005856 
 ##  id =  cytoskeleton 
 ##  nrow =  32 
 ## k's tested: 1 2 3 
 ##   Size:  32 
 ##   Size:  24 
-##   Size:  15, 11 
+##   Size:  11, 15 
 ## Clusters info:
 ##       ks.mean    mean ks.norm     norm
 ## k = 1       1  0.4208       1  0.13253
@@ -369,33 +339,26 @@ 

Examining distancespRolocVis(cc, fcol = "GOAnnotations")

-
- - - +
-
- diff --git a/articles/v04-pRoloc-goannotations_files/figure-html/visualiseRes-1.png b/articles/v04-pRoloc-goannotations_files/figure-html/visualiseRes-1.png index 355e86c6..c26883fe 100644 Binary files a/articles/v04-pRoloc-goannotations_files/figure-html/visualiseRes-1.png and b/articles/v04-pRoloc-goannotations_files/figure-html/visualiseRes-1.png differ diff --git a/articles/v04-pRoloc-goannotations_files/figure-html/visualiseRes-2.png b/articles/v04-pRoloc-goannotations_files/figure-html/visualiseRes-2.png index 8e21ee2d..f8afa679 100644 Binary files a/articles/v04-pRoloc-goannotations_files/figure-html/visualiseRes-2.png and b/articles/v04-pRoloc-goannotations_files/figure-html/visualiseRes-2.png differ diff --git a/articles/v05-pRoloc-transfer-learning.html b/articles/v05-pRoloc-transfer-learning.html index 1be05374..646cf6ab 100644 --- a/articles/v05-pRoloc-transfer-learning.html +++ b/articles/v05-pRoloc-transfer-learning.html @@ -4,93 +4,63 @@ - + A transfer learning algorithm for spatial proteomics • pRoloc - - - - - - - + + + + + - + + Skip to contents -
-
-
-
@@ -538,7 +507,9 @@

Optimal weights1 and the 10 annotated +andy2011 and andygoset objects1 and the 10 annotated sub-cellular localisations (Golgi, Mitochondrion, PM, Lysosome, Cytosol, Cytosol/Nucleus, Nucleus, Ribosome 60S, Ribosome 40S and ER), we want to know how to optimally combine primary and auxiliary data. If we look at @@ -659,7 +630,9 @@

Optimal weightsBiocParallel package; an appropriate backend will be defined automatically according to the underlying architecture and user-defined backends can be defined -through the BPPARAM argument2. Also, in the interest +through the BPPARAM argument2. Also, in the interest of time, the weights optimisation is repeated only 5 times below.

 set.seed(1)
@@ -669,7 +642,7 @@ 

Optimal weights= c(3, 3), fcol = "markers.tl", times = 5)

-
## Removing 497 columns with only 0s.
+
## Removing 501 columns with only 0s.
## Note: vector will be ordered according to classes: Cytosol Cytosol/Nucleus ER Golgi Lysosome Mitochondrion Nucleus PM Ribosome 40S Ribosome 60S (as names are not explicitly defined)
 topt
@@ -685,17 +658,17 @@

Optimal weights## Results ## macro F1: ## Min. 1st Qu. Median Mean 3rd Qu. Max. -## 0.8096 0.8396 0.8740 0.8630 0.8871 0.9046 +## 0.8096 0.8401 0.8812 0.8661 0.8869 0.9127 ## best theta: ## Cytosol Cytosol.Nucleus ER Golgi Lysosome Mitochondrion Nucleus PM -## weight:0 0 0 4 4 0 1 0 1 -## weight:0.33 1 4 0 0 0 0 0 4 -## weight:0.67 0 1 0 1 1 0 1 0 -## weight:1 4 0 1 0 4 4 4 0 +## weight:0 0 0 5 4 0 0 1 0 +## weight:0.33 0 4 0 0 0 1 0 4 +## weight:0.67 1 1 0 1 0 0 0 0 +## weight:1 4 0 0 0 5 4 4 1 ## Ribosome.40S Ribosome.60S -## weight:0 5 1 +## weight:0 5 0 ## weight:0.33 0 4 -## weight:0.67 0 0 +## weight:0.67 0 1 ## weight:1 0 0

The optimisation is performed on the labelled marker examples only. When removing unlabelled non-marker proteins (the @@ -713,7 +686,7 @@

Optimal weights -Results obtained from an extensive optimisation on the primary andy2011 and auxiliary andygoset data sets, as produced by plot(topt). This figure is not the result for the previous code chunk, where only a random subset of 10 candidate weights have been tested.
Results obtained from an extensive optimisation +Results obtained from an extensive optimisation on the primary andy2011 and auxiliary andygoset data sets, as produced by plot(topt). This figure is not the result for the previous code chunk, where only a random subset of 10 candidate weights have been tested.
Results obtained from an extensive optimisation on the primary andy2011 and auxiliary andygoset data sets, as produced by plot(topt). This figure is not the result for the previous @@ -728,7 +701,8 @@

Choosing weightsunknown). These can be defined manually, based on the pattern observed in the weights bubble plot, -or automatically extracted with the getParams method3. See +or automatically extracted with the getParams method3. See ?getParams for details and the favourPrimary function, if it is desirable to systematically favour the primary data (i.e. high weights) when different weight combinations perform equally well.

@@ -773,13 +747,13 @@

Applying best theta weightsandy2011 <- getPredictions(andy2011, fcol = "knntl")

## ans
 ## Chromatin associated              Cytosol      Cytosol/Nucleus 
-##                   11                  299                   43 
+##                   11                  293                   43 
 ##             Endosome                   ER                Golgi 
-##                   12                  196                   72 
+##                   12                  194                   76 
 ##             Lysosome        Mitochondrion              Nucleus 
-##                   60                  254                  108 
+##                   64                  260                  110 
 ##                   PM         Ribosome 40S         Ribosome 60S 
-##                  245                   19                   52
+## 234 19 55
 setStockcol(paste0(getStockcol(), "80"))
 ptsze <- exp(fData(andy2011)$knntl.scores) - 1
@@ -819,9 +793,9 @@ 

Session information## R version 4.4.0 (2024-04-24) +
## R version 4.4.1 (2024-06-14)
 ## Platform: x86_64-pc-linux-gnu
-## Running under: Ubuntu 22.04.4 LTS
+## Running under: Ubuntu 22.04.5 LTS
 ## 
 ## Matrix products: default
 ## BLAS:   /usr/lib/x86_64-linux-gnu/openblas-pthread/libblas.so.3 
@@ -843,96 +817,96 @@ 

Session information## [8] base ## ## other attached packages: -## [1] hpar_1.47.0 biomaRt_2.61.1 class_7.3-22 -## [4] pRolocdata_1.43.0 pRoloc_1.45.1 BiocParallel_1.39.0 +## [1] hpar_1.47.0 biomaRt_2.61.3 class_7.3-22 +## [4] pRolocdata_1.43.3 pRoloc_1.45.2 BiocParallel_1.39.0 ## [7] MLInterfaces_1.85.0 cluster_2.1.6 annotate_1.83.0 -## [10] XML_3.99-0.16.1 AnnotationDbi_1.67.0 IRanges_2.39.0 -## [13] MSnbase_2.31.1 ProtGenerics_1.37.0 S4Vectors_0.43.0 -## [16] mzR_2.39.0 Rcpp_1.0.12 Biobase_2.65.0 -## [19] BiocGenerics_0.51.0 knitr_1.47 BiocStyle_2.33.1 +## [10] XML_3.99-0.17 AnnotationDbi_1.67.0 IRanges_2.39.2 +## [13] MSnbase_2.31.1 ProtGenerics_1.37.1 S4Vectors_0.43.2 +## [16] mzR_2.39.2 Rcpp_1.0.13 Biobase_2.65.1 +## [19] BiocGenerics_0.51.3 knitr_1.48 BiocStyle_2.33.1 ## ## loaded via a namespace (and not attached): -## [1] splines_4.4.0 filelock_1.0.3 +## [1] splines_4.4.1 filelock_1.0.3 ## [3] tibble_3.2.1 hardhat_1.4.0 -## [5] preprocessCore_1.67.0 pROC_1.18.5 +## [5] preprocessCore_1.67.1 pROC_1.18.5 ## [7] rpart_4.1.23 lifecycle_1.0.4 -## [9] httr2_1.0.1 doParallel_1.0.17 +## [9] httr2_1.0.5 doParallel_1.0.17 ## [11] globals_0.16.3 lattice_0.22-6 -## [13] MASS_7.3-60.2 MultiAssayExperiment_1.31.3 -## [15] dendextend_1.17.1 magrittr_2.0.3 -## [17] limma_3.61.2 plotly_4.10.4 -## [19] sass_0.4.9 rmarkdown_2.27 -## [21] jquerylib_0.1.4 yaml_2.3.8 -## [23] MsCoreUtils_1.17.0 DBI_1.2.3 +## [13] MASS_7.3-61 MultiAssayExperiment_1.31.5 +## [15] dendextend_1.18.1 magrittr_2.0.3 +## [17] limma_3.61.12 plotly_4.10.4 +## [19] sass_0.4.9 rmarkdown_2.28 +## [21] jquerylib_0.1.4 yaml_2.3.10 +## [23] MsCoreUtils_1.17.2 DBI_1.2.3 ## [25] RColorBrewer_1.1-3 lubridate_1.9.3 -## [27] abind_1.4-5 zlibbioc_1.51.1 -## [29] GenomicRanges_1.57.1 purrr_1.0.2 +## [27] abind_1.4-8 zlibbioc_1.51.1 +## [29] GenomicRanges_1.57.2 purrr_1.0.2 ## [31] mixtools_2.0.0 AnnotationFilter_1.29.0 ## [33] nnet_7.3-19 rappdirs_0.3.3 -## [35] ipred_0.9-14 lava_1.8.0 -## [37] GenomeInfoDbData_1.2.12 listenv_0.9.1 -## [39] parallelly_1.37.1 pkgdown_2.0.9.9000 -## [41] ncdf4_1.22 codetools_0.2-20 -## [43] DelayedArray_0.31.1 xml2_1.3.6 +## [35] ipred_0.9-15 lava_1.8.0 +## [37] GenomeInfoDbData_1.2.13 listenv_0.9.1 +## [39] parallelly_1.38.0 pkgdown_2.1.1.9000 +## [41] ncdf4_1.23 codetools_0.2-20 +## [43] DelayedArray_0.31.14 xml2_1.3.6 ## [45] tidyselect_1.2.1 UCSC.utils_1.1.0 -## [47] viridis_0.6.5 matrixStats_1.3.0 -## [49] BiocFileCache_2.13.0 jsonlite_1.8.8 -## [51] caret_6.0-94 e1071_1.7-14 +## [47] viridis_0.6.5 matrixStats_1.4.1 +## [49] BiocFileCache_2.13.2 jsonlite_1.8.9 +## [51] caret_6.0-94 e1071_1.7-16 ## [53] survival_3.7-0 iterators_1.0.14 ## [55] systemfonts_1.1.0 foreach_1.5.2 -## [57] segmented_2.1-0 tools_4.4.0 -## [59] progress_1.2.3 ragg_1.3.2 -## [61] glue_1.7.0 prodlim_2023.08.28 -## [63] gridExtra_2.3 SparseArray_1.5.8 -## [65] xfun_0.44 MatrixGenerics_1.17.0 -## [67] GenomeInfoDb_1.41.1 dplyr_1.1.4 -## [69] withr_3.0.0 BiocManager_1.30.23 +## [57] segmented_2.1-2 tools_4.4.1 +## [59] progress_1.2.3 ragg_1.3.3 +## [61] glue_1.8.0 prodlim_2024.06.25 +## [63] gridExtra_2.3 SparseArray_1.5.45 +## [65] xfun_0.48 MatrixGenerics_1.17.0 +## [67] GenomeInfoDb_1.41.2 dplyr_1.1.4 +## [69] withr_3.0.1 BiocManager_1.30.25 ## [71] fastmap_1.2.0 fansi_1.0.6 -## [73] digest_0.6.35 mime_0.12 +## [73] digest_0.6.37 mime_0.12 ## [75] timechange_0.3.0 R6_2.5.1 -## [77] textshaping_0.4.0 colorspace_2.1-0 -## [79] gtools_3.9.5 lpSolve_5.6.20 +## [77] textshaping_0.4.0 colorspace_2.1-1 +## [79] gtools_3.9.5 lpSolve_5.6.21 ## [81] RSQLite_2.3.7 utf8_1.2.4 ## [83] tidyr_1.3.1 generics_0.1.3 -## [85] hexbin_1.28.3 data.table_1.15.4 -## [87] recipes_1.0.10 FNN_1.1.4 +## [85] hexbin_1.28.4 data.table_1.16.2 +## [87] recipes_1.1.0 FNN_1.1.4.1 ## [89] prettyunits_1.2.0 PSMatch_1.9.0 ## [91] httr_1.4.7 htmlwidgets_1.6.4 -## [93] S4Arrays_1.5.1 ModelMetrics_1.2.2.2 +## [93] S4Arrays_1.5.11 ModelMetrics_1.2.2.2 ## [95] pkgconfig_2.0.3 gtable_0.3.5 -## [97] timeDate_4032.109 blob_1.2.4 +## [97] timeDate_4041.110 blob_1.2.4 ## [99] impute_1.79.0 XVector_0.45.0 -## [101] htmltools_0.5.8.1 bookdown_0.39 -## [103] MALDIquant_1.22.2 clue_0.3-65 +## [101] htmltools_0.5.8.1 bookdown_0.41 +## [103] MALDIquant_1.22.3 clue_0.3-65 ## [105] scales_1.3.0 png_0.1-8 ## [107] gower_1.0.1 reshape2_1.4.4 -## [109] coda_0.19-4.1 nlme_3.1-165 -## [111] curl_5.2.1 proxy_0.4-27 +## [109] coda_0.19-4.1 nlme_3.1-166 +## [111] curl_5.2.3 proxy_0.4-27 ## [113] cachem_1.1.0 stringr_1.5.1 -## [115] BiocVersion_3.20.0 parallel_4.4.0 +## [115] BiocVersion_3.20.0 parallel_4.4.1 ## [117] mzID_1.43.0 vsn_3.73.0 ## [119] desc_1.4.3 pillar_1.9.0 -## [121] grid_4.4.0 vctrs_0.6.5 -## [123] pcaMethods_1.97.0 randomForest_4.7-1.1 +## [121] grid_4.4.1 vctrs_0.6.5 +## [123] pcaMethods_1.97.0 randomForest_4.7-1.2 ## [125] dbplyr_2.5.0 xtable_1.8-4 -## [127] evaluate_0.24.0 mvtnorm_1.2-5 -## [129] cli_3.6.2 compiler_4.4.0 -## [131] rlang_1.1.4 crayon_1.5.2 +## [127] evaluate_1.0.1 mvtnorm_1.3-1 +## [129] cli_3.6.3 compiler_4.4.1 +## [131] rlang_1.1.4 crayon_1.5.3 ## [133] future.apply_1.11.2 LaplacesDemon_16.1.6 -## [135] mclust_6.1.1 QFeatures_1.15.1 -## [137] affy_1.83.0 plyr_1.8.9 +## [135] mclust_6.1.1 QFeatures_1.15.3 +## [137] affy_1.83.1 plyr_1.8.9 ## [139] fs_1.6.4 stringi_1.8.4 ## [141] viridisLite_0.4.2 munsell_0.5.1 -## [143] Biostrings_2.73.1 lazyeval_0.2.2 -## [145] Matrix_1.7-0 ExperimentHub_2.13.0 -## [147] hms_1.1.3 bit64_4.0.5 -## [149] future_1.33.2 ggplot2_3.5.1 -## [151] KEGGREST_1.45.0 statmod_1.5.0 -## [153] highr_0.11 AnnotationHub_3.13.0 -## [155] SummarizedExperiment_1.35.0 kernlab_0.9-32 +## [143] Biostrings_2.73.2 lazyeval_0.2.2 +## [145] Matrix_1.7-0 ExperimentHub_2.13.1 +## [147] hms_1.1.3 bit64_4.5.2 +## [149] future_1.34.0 ggplot2_3.5.1 +## [151] KEGGREST_1.45.1 statmod_1.5.0 +## [153] highr_0.11 AnnotationHub_3.13.3 +## [155] SummarizedExperiment_1.35.4 kernlab_0.9-33 ## [157] igraph_2.0.3 memoise_2.0.1 -## [159] affyio_1.75.0 bslib_0.7.0 -## [161] sampling_2.10 bit_4.0.5

+## [159] affyio_1.75.1 bslib_0.8.0 +## [161] sampling_2.10 bit_4.5.0

References @@ -975,46 +949,27 @@

References -
-
    -
  1. We will use the sub-cellular markers defined in the -markers.tl feature variable, instead of the default -markers.↩︎

  2. -
  3. Large scale applications of this algorithms were run on -a cluster using an MPI backend defined with -SnowParams(256, type="MPI").↩︎

  4. -
  5. Note that the scores extracted here are based on the -random subsest of weights.↩︎

  6. -
-

-
- - +

-
- diff --git a/articles/v05-pRoloc-transfer-learning_files/figure-html/andypca2-1.png b/articles/v05-pRoloc-transfer-learning_files/figure-html/andypca2-1.png index 94eab327..055cafd0 100644 Binary files a/articles/v05-pRoloc-transfer-learning_files/figure-html/andypca2-1.png and b/articles/v05-pRoloc-transfer-learning_files/figure-html/andypca2-1.png differ diff --git a/authors.html b/authors.html index 66fdd010..9ee81552 100644 --- a/authors.html +++ b/authors.html @@ -1,74 +1,46 @@ -Authors and Citation • pRoloc - - -
-
+
-
- +
+
+
+
+

Authors

  • Laurent Gatto. Author, maintainer. @@ -86,78 +58,77 @@

    Authors and Citation

    Samuel Wieczorek. Contributor.

  • +
  • +

    Charlotte Hutchings. Contributor. +

    +
  • Oliver Crook. Author.

-
-
-

Citation

- Source: inst/CITATION -
-
+
+

Citation

+

Source: inst/CITATION

-

Gatto L, Breckels LM, Wieczorek S, Burger T, Lilley KS. Mass-spectrometry-based spatial proteomics data analysis using pRoloc and pRolocdata. Bioinformatics. 2014 May 1;30(9):1322-4. doi:10.1093/bioinformatics/btu013. Epub 2014 Jan 11. PubMed PMID: 24413670; PubMed Central PMCID: PMC3998135.

-
@Article{,
+      

Gatto L, Breckels LM, Wieczorek S, Burger T, Lilley KS. Mass-spectrometry-based spatial proteomics data analysis using pRoloc and pRolocdata. Bioinformatics. 2014 May 1;30(9):1322-4. doi:10.1093/bioinformatics/btu013. Epub 2014 Jan 11. PubMed PMID: 24413670; PubMed Central PMCID: PMC3998135.

+
@Article{,
   title = {Mass-spectrometry based spatial proteomics data analysis using pRoloc and pRolocdata},
   author = {Laurent Gatto and Lisa M. Breckels and Samuel Wieczorek and Thomas Burger and Kathryn S. Lilley},
   journal = {Bioinformatics},
   year = {2014},
 }
-

Breckels LM, Gatto L, Christoforou A, Groen AJ, Lilley KS, Trotter MW. The effect of organelle discovery upon sub-cellular protein localisation. J Proteomics. 2013 Mar 21. doi:pii: S1874-3919(13)00094-8. 10.1016/j.jprot.2013.02.019. PubMed PMID: 23523639.

-
@Article{,
+      

Breckels LM, Gatto L, Christoforou A, Groen AJ, Lilley KS, Trotter MW. The effect of organelle discovery upon sub-cellular protein localisation. J Proteomics. 2013 Mar 21. doi:pii: S1874-3919(13)00094-8. 10.1016/j.jprot.2013.02.019. PubMed PMID: 23523639.

+
@Article{,
   title = {The effect of organelle discovery upon sub-cellular protein localisation},
   author = {Lisa M. Breckels and Laurent Gatto and Andy Christoforou and Arnoud J. Groen and Kathryn S. Lilley and Matthew W. Trotter},
   journal = {J Proteomics},
   year = {2013},
 }
-

Gatto L., Breckels L.M., Burger T, Nightingale D.J.H., Groen A.J., Campbell C., Mulvey C.M., Christoforou A., Ferro M., Lilley K.S. 'A foundation for reliable spatial proteomics data analysis' Mol Cell Proteomics. 2014 May 20.

-
@Article{,
+      

Gatto L., Breckels L.M., Burger T, Nightingale D.J.H., Groen A.J., Campbell C., Mulvey C.M., Christoforou A., Ferro M., Lilley K.S. 'A foundation for reliable spatial proteomics data analysis' Mol Cell Proteomics. 2014 May 20.

+
@Article{,
   title = {A foundation for reliable spatial proteomics data analysis},
   author = {Laurent Gatto and Lisa M. Breckels and Thomas Burger and Daniel J. Nightingale and Arnoud J. Groen and Callum Campbell and Claire M. Mulvey and Andy Christroforou and Myriam Ferro and Kathryn S. Lilley},
   journal = {Mol Cell Proteomics},
   year = {2014},
 }
-

Breckels LM, Holden SB, Wojnar D, Mulvey CM, Christoforou A, Groen A, Trotter MW Kohlbacher O, Lilley KS, Gatto L. Learning from Heterogeneous Data Sources: An Application in Spatial Proteomics. PLoS Comput Biol. 2016 May 13;12(5):e1004920. doi: 10.1371/journal.pcbi.1004920.

-
@Article{,
+      

Breckels LM, Holden SB, Wojnar D, Mulvey CM, Christoforou A, Groen A, Trotter MW Kohlbacher O, Lilley KS, Gatto L. Learning from Heterogeneous Data Sources: An Application in Spatial Proteomics. PLoS Comput Biol. 2016 May 13;12(5):e1004920. doi: 10.1371/journal.pcbi.1004920.

+
@Article{,
   title = {Learning from heterogeneous data sources: an application in spatial proteomics},
   author = {Lisa M. Breckels and Sean Holden and David Wonjar and Claire M. Mulvey and Andy Christoforou and Arnoud Groen and Matthew W.B. Trotter and Oliver Kohlbacker and Kathryn S. Lilley and Laurent Gatto},
   journal = {PLoS Comput Biol},
   year = {2016},
 }
-

Breckels LM, Mulvey CM, Lilley KS and Gatto L. A Bioconductor workflow for processing and analysing spatial proteomics data. [version 2; peer review: 2 approved]. F1000Research 2018, 5:2926 (https://doi.org/10.12688/f1000research.10411.2)

-
@Article{,
+      

Breckels LM, Mulvey CM, Lilley KS and Gatto L. A Bioconductor workflow for processing and analysing spatial proteomics data. [version 2; peer review: 2 approved]. F1000Research 2018, 5:2926 (https://doi.org/10.12688/f1000research.10411.2)

+
@Article{,
   title = {A Bioconductor workflow for processing and analysing spatial proteomics data},
   author = {Lisa M. Breckels and Claire M. Mulvey and Kathryn S. Lilley and Laurent Gatto},
   journal = {F1000Research},
   year = {2016},
 }
-

Crook OM, Breckels LM, Lilley KS, Kirk PWD, Gatto L. A Bioconductor workflow for the Bayesian analysis of spatial proteomics [version 1; peer review: awaiting peer review]. F1000Research 2019, 8:446 (https://doi.org/10.12688/f1000research.18636.1)

-
@Article{,
+      

Crook OM, Breckels LM, Lilley KS, Kirk PWD, Gatto L. A Bioconductor workflow for the Bayesian analysis of spatial proteomics [version 1; peer review: awaiting peer review]. F1000Research 2019, 8:446 (https://doi.org/10.12688/f1000research.18636.1)

+
@Article{,
   title = {A Bioconductor workflow for the Bayesian analysis of spatial proteomics},
   author = {Oliver M. Crook and Lisa M. Breckels and Kathryn S. Lilley and Paul D.W. Kirk and Laurent Gatto},
   journal = {F1000Research},
   year = {2019},
 }
+
-
- -
- +
-
- +
diff --git a/bootstrap-toc.css b/bootstrap-toc.css deleted file mode 100644 index 5a859415..00000000 --- a/bootstrap-toc.css +++ /dev/null @@ -1,60 +0,0 @@ -/*! - * Bootstrap Table of Contents v0.4.1 (http://afeld.github.io/bootstrap-toc/) - * Copyright 2015 Aidan Feldman - * Licensed under MIT (https://github.com/afeld/bootstrap-toc/blob/gh-pages/LICENSE.md) */ - -/* modified from https://github.com/twbs/bootstrap/blob/94b4076dd2efba9af71f0b18d4ee4b163aa9e0dd/docs/assets/css/src/docs.css#L548-L601 */ - -/* All levels of nav */ -nav[data-toggle='toc'] .nav > li > a { - display: block; - padding: 4px 20px; - font-size: 13px; - font-weight: 500; - color: #767676; -} -nav[data-toggle='toc'] .nav > li > a:hover, -nav[data-toggle='toc'] .nav > li > a:focus { - padding-left: 19px; - color: #563d7c; - text-decoration: none; - background-color: transparent; - border-left: 1px solid #563d7c; -} -nav[data-toggle='toc'] .nav > .active > a, -nav[data-toggle='toc'] .nav > .active:hover > a, -nav[data-toggle='toc'] .nav > .active:focus > a { - padding-left: 18px; - font-weight: bold; - color: #563d7c; - background-color: transparent; - border-left: 2px solid #563d7c; -} - -/* Nav: second level (shown on .active) */ -nav[data-toggle='toc'] .nav .nav { - display: none; /* Hide by default, but at >768px, show it */ - padding-bottom: 10px; -} -nav[data-toggle='toc'] .nav .nav > li > a { - padding-top: 1px; - padding-bottom: 1px; - padding-left: 30px; - font-size: 12px; - font-weight: normal; -} -nav[data-toggle='toc'] .nav .nav > li > a:hover, -nav[data-toggle='toc'] .nav .nav > li > a:focus { - padding-left: 29px; -} -nav[data-toggle='toc'] .nav .nav > .active > a, -nav[data-toggle='toc'] .nav .nav > .active:hover > a, -nav[data-toggle='toc'] .nav .nav > .active:focus > a { - padding-left: 28px; - font-weight: 500; -} - -/* from https://github.com/twbs/bootstrap/blob/e38f066d8c203c3e032da0ff23cd2d6098ee2dd6/docs/assets/css/src/docs.css#L631-L634 */ -nav[data-toggle='toc'] .nav > .active > ul { - display: block; -} diff --git a/bootstrap-toc.js b/bootstrap-toc.js deleted file mode 100644 index 1cdd573b..00000000 --- a/bootstrap-toc.js +++ /dev/null @@ -1,159 +0,0 @@ -/*! - * Bootstrap Table of Contents v0.4.1 (http://afeld.github.io/bootstrap-toc/) - * Copyright 2015 Aidan Feldman - * Licensed under MIT (https://github.com/afeld/bootstrap-toc/blob/gh-pages/LICENSE.md) */ -(function() { - 'use strict'; - - window.Toc = { - helpers: { - // return all matching elements in the set, or their descendants - findOrFilter: function($el, selector) { - // http://danielnouri.org/notes/2011/03/14/a-jquery-find-that-also-finds-the-root-element/ - // http://stackoverflow.com/a/12731439/358804 - var $descendants = $el.find(selector); - return $el.filter(selector).add($descendants).filter(':not([data-toc-skip])'); - }, - - generateUniqueIdBase: function(el) { - var text = $(el).text(); - var anchor = text.trim().toLowerCase().replace(/[^A-Za-z0-9]+/g, '-'); - return anchor || el.tagName.toLowerCase(); - }, - - generateUniqueId: function(el) { - var anchorBase = this.generateUniqueIdBase(el); - for (var i = 0; ; i++) { - var anchor = anchorBase; - if (i > 0) { - // add suffix - anchor += '-' + i; - } - // check if ID already exists - if (!document.getElementById(anchor)) { - return anchor; - } - } - }, - - generateAnchor: function(el) { - if (el.id) { - return el.id; - } else { - var anchor = this.generateUniqueId(el); - el.id = anchor; - return anchor; - } - }, - - createNavList: function() { - return $(''); - }, - - createChildNavList: function($parent) { - var $childList = this.createNavList(); - $parent.append($childList); - return $childList; - }, - - generateNavEl: function(anchor, text) { - var $a = $(''); - $a.attr('href', '#' + anchor); - $a.text(text); - var $li = $('
  • '); - $li.append($a); - return $li; - }, - - generateNavItem: function(headingEl) { - var anchor = this.generateAnchor(headingEl); - var $heading = $(headingEl); - var text = $heading.data('toc-text') || $heading.text(); - return this.generateNavEl(anchor, text); - }, - - // Find the first heading level (`

    `, then `

    `, etc.) that has more than one element. Defaults to 1 (for `

    `). - getTopLevel: function($scope) { - for (var i = 1; i <= 6; i++) { - var $headings = this.findOrFilter($scope, 'h' + i); - if ($headings.length > 1) { - return i; - } - } - - return 1; - }, - - // returns the elements for the top level, and the next below it - getHeadings: function($scope, topLevel) { - var topSelector = 'h' + topLevel; - - var secondaryLevel = topLevel + 1; - var secondarySelector = 'h' + secondaryLevel; - - return this.findOrFilter($scope, topSelector + ',' + secondarySelector); - }, - - getNavLevel: function(el) { - return parseInt(el.tagName.charAt(1), 10); - }, - - populateNav: function($topContext, topLevel, $headings) { - var $context = $topContext; - var $prevNav; - - var helpers = this; - $headings.each(function(i, el) { - var $newNav = helpers.generateNavItem(el); - var navLevel = helpers.getNavLevel(el); - - // determine the proper $context - if (navLevel === topLevel) { - // use top level - $context = $topContext; - } else if ($prevNav && $context === $topContext) { - // create a new level of the tree and switch to it - $context = helpers.createChildNavList($prevNav); - } // else use the current $context - - $context.append($newNav); - - $prevNav = $newNav; - }); - }, - - parseOps: function(arg) { - var opts; - if (arg.jquery) { - opts = { - $nav: arg - }; - } else { - opts = arg; - } - opts.$scope = opts.$scope || $(document.body); - return opts; - } - }, - - // accepts a jQuery object, or an options object - init: function(opts) { - opts = this.helpers.parseOps(opts); - - // ensure that the data attribute is in place for styling - opts.$nav.attr('data-toggle', 'toc'); - - var $topContext = this.helpers.createChildNavList(opts.$nav); - var topLevel = this.helpers.getTopLevel(opts.$scope); - var $headings = this.helpers.getHeadings(opts.$scope, topLevel); - this.helpers.populateNav($topContext, topLevel, $headings); - } - }; - - $(function() { - $('nav[data-toggle="toc"]').each(function(i, el) { - var $nav = $(el); - Toc.init($nav); - }); - }); -})(); diff --git a/deps/bootstrap-5.3.1/bootstrap.bundle.min.js b/deps/bootstrap-5.3.1/bootstrap.bundle.min.js new file mode 100644 index 00000000..e8f21f70 --- /dev/null +++ b/deps/bootstrap-5.3.1/bootstrap.bundle.min.js @@ -0,0 +1,7 @@ +/*! + * Bootstrap v5.3.1 (https://getbootstrap.com/) + * Copyright 2011-2023 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) + */ +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).bootstrap=e()}(this,(function(){"use strict";const t=new Map,e={set(e,i,n){t.has(e)||t.set(e,new Map);const s=t.get(e);s.has(i)||0===s.size?s.set(i,n):console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(s.keys())[0]}.`)},get:(e,i)=>t.has(e)&&t.get(e).get(i)||null,remove(e,i){if(!t.has(e))return;const n=t.get(e);n.delete(i),0===n.size&&t.delete(e)}},i="transitionend",n=t=>(t&&window.CSS&&window.CSS.escape&&(t=t.replace(/#([^\s"#']+)/g,((t,e)=>`#${CSS.escape(e)}`))),t),s=t=>{t.dispatchEvent(new Event(i))},o=t=>!(!t||"object"!=typeof t)&&(void 0!==t.jquery&&(t=t[0]),void 0!==t.nodeType),r=t=>o(t)?t.jquery?t[0]:t:"string"==typeof t&&t.length>0?document.querySelector(n(t)):null,a=t=>{if(!o(t)||0===t.getClientRects().length)return!1;const e="visible"===getComputedStyle(t).getPropertyValue("visibility"),i=t.closest("details:not([open])");if(!i)return e;if(i!==t){const e=t.closest("summary");if(e&&e.parentNode!==i)return!1;if(null===e)return!1}return e},l=t=>!t||t.nodeType!==Node.ELEMENT_NODE||!!t.classList.contains("disabled")||(void 0!==t.disabled?t.disabled:t.hasAttribute("disabled")&&"false"!==t.getAttribute("disabled")),c=t=>{if(!document.documentElement.attachShadow)return null;if("function"==typeof t.getRootNode){const e=t.getRootNode();return e instanceof ShadowRoot?e:null}return t instanceof ShadowRoot?t:t.parentNode?c(t.parentNode):null},h=()=>{},d=t=>{t.offsetHeight},u=()=>window.jQuery&&!document.body.hasAttribute("data-bs-no-jquery")?window.jQuery:null,f=[],p=()=>"rtl"===document.documentElement.dir,m=t=>{var e;e=()=>{const e=u();if(e){const i=t.NAME,n=e.fn[i];e.fn[i]=t.jQueryInterface,e.fn[i].Constructor=t,e.fn[i].noConflict=()=>(e.fn[i]=n,t.jQueryInterface)}},"loading"===document.readyState?(f.length||document.addEventListener("DOMContentLoaded",(()=>{for(const t of f)t()})),f.push(e)):e()},g=(t,e=[],i=t)=>"function"==typeof t?t(...e):i,_=(t,e,n=!0)=>{if(!n)return void g(t);const o=(t=>{if(!t)return 0;let{transitionDuration:e,transitionDelay:i}=window.getComputedStyle(t);const n=Number.parseFloat(e),s=Number.parseFloat(i);return n||s?(e=e.split(",")[0],i=i.split(",")[0],1e3*(Number.parseFloat(e)+Number.parseFloat(i))):0})(e)+5;let r=!1;const a=({target:n})=>{n===e&&(r=!0,e.removeEventListener(i,a),g(t))};e.addEventListener(i,a),setTimeout((()=>{r||s(e)}),o)},b=(t,e,i,n)=>{const s=t.length;let o=t.indexOf(e);return-1===o?!i&&n?t[s-1]:t[0]:(o+=i?1:-1,n&&(o=(o+s)%s),t[Math.max(0,Math.min(o,s-1))])},v=/[^.]*(?=\..*)\.|.*/,y=/\..*/,w=/::\d+$/,A={};let E=1;const T={mouseenter:"mouseover",mouseleave:"mouseout"},C=new Set(["click","dblclick","mouseup","mousedown","contextmenu","mousewheel","DOMMouseScroll","mouseover","mouseout","mousemove","selectstart","selectend","keydown","keypress","keyup","orientationchange","touchstart","touchmove","touchend","touchcancel","pointerdown","pointermove","pointerup","pointerleave","pointercancel","gesturestart","gesturechange","gestureend","focus","blur","change","reset","select","submit","focusin","focusout","load","unload","beforeunload","resize","move","DOMContentLoaded","readystatechange","error","abort","scroll"]);function O(t,e){return e&&`${e}::${E++}`||t.uidEvent||E++}function x(t){const e=O(t);return t.uidEvent=e,A[e]=A[e]||{},A[e]}function k(t,e,i=null){return Object.values(t).find((t=>t.callable===e&&t.delegationSelector===i))}function L(t,e,i){const n="string"==typeof e,s=n?i:e||i;let o=I(t);return C.has(o)||(o=t),[n,s,o]}function S(t,e,i,n,s){if("string"!=typeof e||!t)return;let[o,r,a]=L(e,i,n);if(e in T){const t=t=>function(e){if(!e.relatedTarget||e.relatedTarget!==e.delegateTarget&&!e.delegateTarget.contains(e.relatedTarget))return t.call(this,e)};r=t(r)}const l=x(t),c=l[a]||(l[a]={}),h=k(c,r,o?i:null);if(h)return void(h.oneOff=h.oneOff&&s);const d=O(r,e.replace(v,"")),u=o?function(t,e,i){return function n(s){const o=t.querySelectorAll(e);for(let{target:r}=s;r&&r!==this;r=r.parentNode)for(const a of o)if(a===r)return P(s,{delegateTarget:r}),n.oneOff&&N.off(t,s.type,e,i),i.apply(r,[s])}}(t,i,r):function(t,e){return function i(n){return P(n,{delegateTarget:t}),i.oneOff&&N.off(t,n.type,e),e.apply(t,[n])}}(t,r);u.delegationSelector=o?i:null,u.callable=r,u.oneOff=s,u.uidEvent=d,c[d]=u,t.addEventListener(a,u,o)}function D(t,e,i,n,s){const o=k(e[i],n,s);o&&(t.removeEventListener(i,o,Boolean(s)),delete e[i][o.uidEvent])}function $(t,e,i,n){const s=e[i]||{};for(const[o,r]of Object.entries(s))o.includes(n)&&D(t,e,i,r.callable,r.delegationSelector)}function I(t){return t=t.replace(y,""),T[t]||t}const N={on(t,e,i,n){S(t,e,i,n,!1)},one(t,e,i,n){S(t,e,i,n,!0)},off(t,e,i,n){if("string"!=typeof e||!t)return;const[s,o,r]=L(e,i,n),a=r!==e,l=x(t),c=l[r]||{},h=e.startsWith(".");if(void 0===o){if(h)for(const i of Object.keys(l))$(t,l,i,e.slice(1));for(const[i,n]of Object.entries(c)){const s=i.replace(w,"");a&&!e.includes(s)||D(t,l,r,n.callable,n.delegationSelector)}}else{if(!Object.keys(c).length)return;D(t,l,r,o,s?i:null)}},trigger(t,e,i){if("string"!=typeof e||!t)return null;const n=u();let s=null,o=!0,r=!0,a=!1;e!==I(e)&&n&&(s=n.Event(e,i),n(t).trigger(s),o=!s.isPropagationStopped(),r=!s.isImmediatePropagationStopped(),a=s.isDefaultPrevented());const l=P(new Event(e,{bubbles:o,cancelable:!0}),i);return a&&l.preventDefault(),r&&t.dispatchEvent(l),l.defaultPrevented&&s&&s.preventDefault(),l}};function P(t,e={}){for(const[i,n]of Object.entries(e))try{t[i]=n}catch(e){Object.defineProperty(t,i,{configurable:!0,get:()=>n})}return t}function M(t){if("true"===t)return!0;if("false"===t)return!1;if(t===Number(t).toString())return Number(t);if(""===t||"null"===t)return null;if("string"!=typeof t)return t;try{return JSON.parse(decodeURIComponent(t))}catch(e){return t}}function j(t){return t.replace(/[A-Z]/g,(t=>`-${t.toLowerCase()}`))}const F={setDataAttribute(t,e,i){t.setAttribute(`data-bs-${j(e)}`,i)},removeDataAttribute(t,e){t.removeAttribute(`data-bs-${j(e)}`)},getDataAttributes(t){if(!t)return{};const e={},i=Object.keys(t.dataset).filter((t=>t.startsWith("bs")&&!t.startsWith("bsConfig")));for(const n of i){let i=n.replace(/^bs/,"");i=i.charAt(0).toLowerCase()+i.slice(1,i.length),e[i]=M(t.dataset[n])}return e},getDataAttribute:(t,e)=>M(t.getAttribute(`data-bs-${j(e)}`))};class H{static get Default(){return{}}static get DefaultType(){return{}}static get NAME(){throw new Error('You have to implement the static method "NAME", for each component!')}_getConfig(t){return t=this._mergeConfigObj(t),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}_configAfterMerge(t){return t}_mergeConfigObj(t,e){const i=o(e)?F.getDataAttribute(e,"config"):{};return{...this.constructor.Default,..."object"==typeof i?i:{},...o(e)?F.getDataAttributes(e):{},..."object"==typeof t?t:{}}}_typeCheckConfig(t,e=this.constructor.DefaultType){for(const[n,s]of Object.entries(e)){const e=t[n],r=o(e)?"element":null==(i=e)?`${i}`:Object.prototype.toString.call(i).match(/\s([a-z]+)/i)[1].toLowerCase();if(!new RegExp(s).test(r))throw new TypeError(`${this.constructor.NAME.toUpperCase()}: Option "${n}" provided type "${r}" but expected type "${s}".`)}var i}}class W extends H{constructor(t,i){super(),(t=r(t))&&(this._element=t,this._config=this._getConfig(i),e.set(this._element,this.constructor.DATA_KEY,this))}dispose(){e.remove(this._element,this.constructor.DATA_KEY),N.off(this._element,this.constructor.EVENT_KEY);for(const t of Object.getOwnPropertyNames(this))this[t]=null}_queueCallback(t,e,i=!0){_(t,e,i)}_getConfig(t){return t=this._mergeConfigObj(t,this._element),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}static getInstance(t){return e.get(r(t),this.DATA_KEY)}static getOrCreateInstance(t,e={}){return this.getInstance(t)||new this(t,"object"==typeof e?e:null)}static get VERSION(){return"5.3.1"}static get DATA_KEY(){return`bs.${this.NAME}`}static get EVENT_KEY(){return`.${this.DATA_KEY}`}static eventName(t){return`${t}${this.EVENT_KEY}`}}const B=t=>{let e=t.getAttribute("data-bs-target");if(!e||"#"===e){let i=t.getAttribute("href");if(!i||!i.includes("#")&&!i.startsWith("."))return null;i.includes("#")&&!i.startsWith("#")&&(i=`#${i.split("#")[1]}`),e=i&&"#"!==i?i.trim():null}return n(e)},z={find:(t,e=document.documentElement)=>[].concat(...Element.prototype.querySelectorAll.call(e,t)),findOne:(t,e=document.documentElement)=>Element.prototype.querySelector.call(e,t),children:(t,e)=>[].concat(...t.children).filter((t=>t.matches(e))),parents(t,e){const i=[];let n=t.parentNode.closest(e);for(;n;)i.push(n),n=n.parentNode.closest(e);return i},prev(t,e){let i=t.previousElementSibling;for(;i;){if(i.matches(e))return[i];i=i.previousElementSibling}return[]},next(t,e){let i=t.nextElementSibling;for(;i;){if(i.matches(e))return[i];i=i.nextElementSibling}return[]},focusableChildren(t){const e=["a","button","input","textarea","select","details","[tabindex]",'[contenteditable="true"]'].map((t=>`${t}:not([tabindex^="-"])`)).join(",");return this.find(e,t).filter((t=>!l(t)&&a(t)))},getSelectorFromElement(t){const e=B(t);return e&&z.findOne(e)?e:null},getElementFromSelector(t){const e=B(t);return e?z.findOne(e):null},getMultipleElementsFromSelector(t){const e=B(t);return e?z.find(e):[]}},R=(t,e="hide")=>{const i=`click.dismiss${t.EVENT_KEY}`,n=t.NAME;N.on(document,i,`[data-bs-dismiss="${n}"]`,(function(i){if(["A","AREA"].includes(this.tagName)&&i.preventDefault(),l(this))return;const s=z.getElementFromSelector(this)||this.closest(`.${n}`);t.getOrCreateInstance(s)[e]()}))},q=".bs.alert",V=`close${q}`,K=`closed${q}`;class Q extends W{static get NAME(){return"alert"}close(){if(N.trigger(this._element,V).defaultPrevented)return;this._element.classList.remove("show");const t=this._element.classList.contains("fade");this._queueCallback((()=>this._destroyElement()),this._element,t)}_destroyElement(){this._element.remove(),N.trigger(this._element,K),this.dispose()}static jQueryInterface(t){return this.each((function(){const e=Q.getOrCreateInstance(this);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t](this)}}))}}R(Q,"close"),m(Q);const X='[data-bs-toggle="button"]';class Y extends W{static get NAME(){return"button"}toggle(){this._element.setAttribute("aria-pressed",this._element.classList.toggle("active"))}static jQueryInterface(t){return this.each((function(){const e=Y.getOrCreateInstance(this);"toggle"===t&&e[t]()}))}}N.on(document,"click.bs.button.data-api",X,(t=>{t.preventDefault();const e=t.target.closest(X);Y.getOrCreateInstance(e).toggle()})),m(Y);const U=".bs.swipe",G=`touchstart${U}`,J=`touchmove${U}`,Z=`touchend${U}`,tt=`pointerdown${U}`,et=`pointerup${U}`,it={endCallback:null,leftCallback:null,rightCallback:null},nt={endCallback:"(function|null)",leftCallback:"(function|null)",rightCallback:"(function|null)"};class st extends H{constructor(t,e){super(),this._element=t,t&&st.isSupported()&&(this._config=this._getConfig(e),this._deltaX=0,this._supportPointerEvents=Boolean(window.PointerEvent),this._initEvents())}static get Default(){return it}static get DefaultType(){return nt}static get NAME(){return"swipe"}dispose(){N.off(this._element,U)}_start(t){this._supportPointerEvents?this._eventIsPointerPenTouch(t)&&(this._deltaX=t.clientX):this._deltaX=t.touches[0].clientX}_end(t){this._eventIsPointerPenTouch(t)&&(this._deltaX=t.clientX-this._deltaX),this._handleSwipe(),g(this._config.endCallback)}_move(t){this._deltaX=t.touches&&t.touches.length>1?0:t.touches[0].clientX-this._deltaX}_handleSwipe(){const t=Math.abs(this._deltaX);if(t<=40)return;const e=t/this._deltaX;this._deltaX=0,e&&g(e>0?this._config.rightCallback:this._config.leftCallback)}_initEvents(){this._supportPointerEvents?(N.on(this._element,tt,(t=>this._start(t))),N.on(this._element,et,(t=>this._end(t))),this._element.classList.add("pointer-event")):(N.on(this._element,G,(t=>this._start(t))),N.on(this._element,J,(t=>this._move(t))),N.on(this._element,Z,(t=>this._end(t))))}_eventIsPointerPenTouch(t){return this._supportPointerEvents&&("pen"===t.pointerType||"touch"===t.pointerType)}static isSupported(){return"ontouchstart"in document.documentElement||navigator.maxTouchPoints>0}}const ot=".bs.carousel",rt=".data-api",at="next",lt="prev",ct="left",ht="right",dt=`slide${ot}`,ut=`slid${ot}`,ft=`keydown${ot}`,pt=`mouseenter${ot}`,mt=`mouseleave${ot}`,gt=`dragstart${ot}`,_t=`load${ot}${rt}`,bt=`click${ot}${rt}`,vt="carousel",yt="active",wt=".active",At=".carousel-item",Et=wt+At,Tt={ArrowLeft:ht,ArrowRight:ct},Ct={interval:5e3,keyboard:!0,pause:"hover",ride:!1,touch:!0,wrap:!0},Ot={interval:"(number|boolean)",keyboard:"boolean",pause:"(string|boolean)",ride:"(boolean|string)",touch:"boolean",wrap:"boolean"};class xt extends W{constructor(t,e){super(t,e),this._interval=null,this._activeElement=null,this._isSliding=!1,this.touchTimeout=null,this._swipeHelper=null,this._indicatorsElement=z.findOne(".carousel-indicators",this._element),this._addEventListeners(),this._config.ride===vt&&this.cycle()}static get Default(){return Ct}static get DefaultType(){return Ot}static get NAME(){return"carousel"}next(){this._slide(at)}nextWhenVisible(){!document.hidden&&a(this._element)&&this.next()}prev(){this._slide(lt)}pause(){this._isSliding&&s(this._element),this._clearInterval()}cycle(){this._clearInterval(),this._updateInterval(),this._interval=setInterval((()=>this.nextWhenVisible()),this._config.interval)}_maybeEnableCycle(){this._config.ride&&(this._isSliding?N.one(this._element,ut,(()=>this.cycle())):this.cycle())}to(t){const e=this._getItems();if(t>e.length-1||t<0)return;if(this._isSliding)return void N.one(this._element,ut,(()=>this.to(t)));const i=this._getItemIndex(this._getActive());if(i===t)return;const n=t>i?at:lt;this._slide(n,e[t])}dispose(){this._swipeHelper&&this._swipeHelper.dispose(),super.dispose()}_configAfterMerge(t){return t.defaultInterval=t.interval,t}_addEventListeners(){this._config.keyboard&&N.on(this._element,ft,(t=>this._keydown(t))),"hover"===this._config.pause&&(N.on(this._element,pt,(()=>this.pause())),N.on(this._element,mt,(()=>this._maybeEnableCycle()))),this._config.touch&&st.isSupported()&&this._addTouchEventListeners()}_addTouchEventListeners(){for(const t of z.find(".carousel-item img",this._element))N.on(t,gt,(t=>t.preventDefault()));const t={leftCallback:()=>this._slide(this._directionToOrder(ct)),rightCallback:()=>this._slide(this._directionToOrder(ht)),endCallback:()=>{"hover"===this._config.pause&&(this.pause(),this.touchTimeout&&clearTimeout(this.touchTimeout),this.touchTimeout=setTimeout((()=>this._maybeEnableCycle()),500+this._config.interval))}};this._swipeHelper=new st(this._element,t)}_keydown(t){if(/input|textarea/i.test(t.target.tagName))return;const e=Tt[t.key];e&&(t.preventDefault(),this._slide(this._directionToOrder(e)))}_getItemIndex(t){return this._getItems().indexOf(t)}_setActiveIndicatorElement(t){if(!this._indicatorsElement)return;const e=z.findOne(wt,this._indicatorsElement);e.classList.remove(yt),e.removeAttribute("aria-current");const i=z.findOne(`[data-bs-slide-to="${t}"]`,this._indicatorsElement);i&&(i.classList.add(yt),i.setAttribute("aria-current","true"))}_updateInterval(){const t=this._activeElement||this._getActive();if(!t)return;const e=Number.parseInt(t.getAttribute("data-bs-interval"),10);this._config.interval=e||this._config.defaultInterval}_slide(t,e=null){if(this._isSliding)return;const i=this._getActive(),n=t===at,s=e||b(this._getItems(),i,n,this._config.wrap);if(s===i)return;const o=this._getItemIndex(s),r=e=>N.trigger(this._element,e,{relatedTarget:s,direction:this._orderToDirection(t),from:this._getItemIndex(i),to:o});if(r(dt).defaultPrevented)return;if(!i||!s)return;const a=Boolean(this._interval);this.pause(),this._isSliding=!0,this._setActiveIndicatorElement(o),this._activeElement=s;const l=n?"carousel-item-start":"carousel-item-end",c=n?"carousel-item-next":"carousel-item-prev";s.classList.add(c),d(s),i.classList.add(l),s.classList.add(l),this._queueCallback((()=>{s.classList.remove(l,c),s.classList.add(yt),i.classList.remove(yt,c,l),this._isSliding=!1,r(ut)}),i,this._isAnimated()),a&&this.cycle()}_isAnimated(){return this._element.classList.contains("slide")}_getActive(){return z.findOne(Et,this._element)}_getItems(){return z.find(At,this._element)}_clearInterval(){this._interval&&(clearInterval(this._interval),this._interval=null)}_directionToOrder(t){return p()?t===ct?lt:at:t===ct?at:lt}_orderToDirection(t){return p()?t===lt?ct:ht:t===lt?ht:ct}static jQueryInterface(t){return this.each((function(){const e=xt.getOrCreateInstance(this,t);if("number"!=typeof t){if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t]()}}else e.to(t)}))}}N.on(document,bt,"[data-bs-slide], [data-bs-slide-to]",(function(t){const e=z.getElementFromSelector(this);if(!e||!e.classList.contains(vt))return;t.preventDefault();const i=xt.getOrCreateInstance(e),n=this.getAttribute("data-bs-slide-to");return n?(i.to(n),void i._maybeEnableCycle()):"next"===F.getDataAttribute(this,"slide")?(i.next(),void i._maybeEnableCycle()):(i.prev(),void i._maybeEnableCycle())})),N.on(window,_t,(()=>{const t=z.find('[data-bs-ride="carousel"]');for(const e of t)xt.getOrCreateInstance(e)})),m(xt);const kt=".bs.collapse",Lt=`show${kt}`,St=`shown${kt}`,Dt=`hide${kt}`,$t=`hidden${kt}`,It=`click${kt}.data-api`,Nt="show",Pt="collapse",Mt="collapsing",jt=`:scope .${Pt} .${Pt}`,Ft='[data-bs-toggle="collapse"]',Ht={parent:null,toggle:!0},Wt={parent:"(null|element)",toggle:"boolean"};class Bt extends W{constructor(t,e){super(t,e),this._isTransitioning=!1,this._triggerArray=[];const i=z.find(Ft);for(const t of i){const e=z.getSelectorFromElement(t),i=z.find(e).filter((t=>t===this._element));null!==e&&i.length&&this._triggerArray.push(t)}this._initializeChildren(),this._config.parent||this._addAriaAndCollapsedClass(this._triggerArray,this._isShown()),this._config.toggle&&this.toggle()}static get Default(){return Ht}static get DefaultType(){return Wt}static get NAME(){return"collapse"}toggle(){this._isShown()?this.hide():this.show()}show(){if(this._isTransitioning||this._isShown())return;let t=[];if(this._config.parent&&(t=this._getFirstLevelChildren(".collapse.show, .collapse.collapsing").filter((t=>t!==this._element)).map((t=>Bt.getOrCreateInstance(t,{toggle:!1})))),t.length&&t[0]._isTransitioning)return;if(N.trigger(this._element,Lt).defaultPrevented)return;for(const e of t)e.hide();const e=this._getDimension();this._element.classList.remove(Pt),this._element.classList.add(Mt),this._element.style[e]=0,this._addAriaAndCollapsedClass(this._triggerArray,!0),this._isTransitioning=!0;const i=`scroll${e[0].toUpperCase()+e.slice(1)}`;this._queueCallback((()=>{this._isTransitioning=!1,this._element.classList.remove(Mt),this._element.classList.add(Pt,Nt),this._element.style[e]="",N.trigger(this._element,St)}),this._element,!0),this._element.style[e]=`${this._element[i]}px`}hide(){if(this._isTransitioning||!this._isShown())return;if(N.trigger(this._element,Dt).defaultPrevented)return;const t=this._getDimension();this._element.style[t]=`${this._element.getBoundingClientRect()[t]}px`,d(this._element),this._element.classList.add(Mt),this._element.classList.remove(Pt,Nt);for(const t of this._triggerArray){const e=z.getElementFromSelector(t);e&&!this._isShown(e)&&this._addAriaAndCollapsedClass([t],!1)}this._isTransitioning=!0,this._element.style[t]="",this._queueCallback((()=>{this._isTransitioning=!1,this._element.classList.remove(Mt),this._element.classList.add(Pt),N.trigger(this._element,$t)}),this._element,!0)}_isShown(t=this._element){return t.classList.contains(Nt)}_configAfterMerge(t){return t.toggle=Boolean(t.toggle),t.parent=r(t.parent),t}_getDimension(){return this._element.classList.contains("collapse-horizontal")?"width":"height"}_initializeChildren(){if(!this._config.parent)return;const t=this._getFirstLevelChildren(Ft);for(const e of t){const t=z.getElementFromSelector(e);t&&this._addAriaAndCollapsedClass([e],this._isShown(t))}}_getFirstLevelChildren(t){const e=z.find(jt,this._config.parent);return z.find(t,this._config.parent).filter((t=>!e.includes(t)))}_addAriaAndCollapsedClass(t,e){if(t.length)for(const i of t)i.classList.toggle("collapsed",!e),i.setAttribute("aria-expanded",e)}static jQueryInterface(t){const e={};return"string"==typeof t&&/show|hide/.test(t)&&(e.toggle=!1),this.each((function(){const i=Bt.getOrCreateInstance(this,e);if("string"==typeof t){if(void 0===i[t])throw new TypeError(`No method named "${t}"`);i[t]()}}))}}N.on(document,It,Ft,(function(t){("A"===t.target.tagName||t.delegateTarget&&"A"===t.delegateTarget.tagName)&&t.preventDefault();for(const t of z.getMultipleElementsFromSelector(this))Bt.getOrCreateInstance(t,{toggle:!1}).toggle()})),m(Bt);var zt="top",Rt="bottom",qt="right",Vt="left",Kt="auto",Qt=[zt,Rt,qt,Vt],Xt="start",Yt="end",Ut="clippingParents",Gt="viewport",Jt="popper",Zt="reference",te=Qt.reduce((function(t,e){return t.concat([e+"-"+Xt,e+"-"+Yt])}),[]),ee=[].concat(Qt,[Kt]).reduce((function(t,e){return t.concat([e,e+"-"+Xt,e+"-"+Yt])}),[]),ie="beforeRead",ne="read",se="afterRead",oe="beforeMain",re="main",ae="afterMain",le="beforeWrite",ce="write",he="afterWrite",de=[ie,ne,se,oe,re,ae,le,ce,he];function ue(t){return t?(t.nodeName||"").toLowerCase():null}function fe(t){if(null==t)return window;if("[object Window]"!==t.toString()){var e=t.ownerDocument;return e&&e.defaultView||window}return t}function pe(t){return t instanceof fe(t).Element||t instanceof Element}function me(t){return t instanceof fe(t).HTMLElement||t instanceof HTMLElement}function ge(t){return"undefined"!=typeof ShadowRoot&&(t instanceof fe(t).ShadowRoot||t instanceof ShadowRoot)}const _e={name:"applyStyles",enabled:!0,phase:"write",fn:function(t){var e=t.state;Object.keys(e.elements).forEach((function(t){var i=e.styles[t]||{},n=e.attributes[t]||{},s=e.elements[t];me(s)&&ue(s)&&(Object.assign(s.style,i),Object.keys(n).forEach((function(t){var e=n[t];!1===e?s.removeAttribute(t):s.setAttribute(t,!0===e?"":e)})))}))},effect:function(t){var e=t.state,i={popper:{position:e.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(e.elements.popper.style,i.popper),e.styles=i,e.elements.arrow&&Object.assign(e.elements.arrow.style,i.arrow),function(){Object.keys(e.elements).forEach((function(t){var n=e.elements[t],s=e.attributes[t]||{},o=Object.keys(e.styles.hasOwnProperty(t)?e.styles[t]:i[t]).reduce((function(t,e){return t[e]="",t}),{});me(n)&&ue(n)&&(Object.assign(n.style,o),Object.keys(s).forEach((function(t){n.removeAttribute(t)})))}))}},requires:["computeStyles"]};function be(t){return t.split("-")[0]}var ve=Math.max,ye=Math.min,we=Math.round;function Ae(){var t=navigator.userAgentData;return null!=t&&t.brands&&Array.isArray(t.brands)?t.brands.map((function(t){return t.brand+"/"+t.version})).join(" "):navigator.userAgent}function Ee(){return!/^((?!chrome|android).)*safari/i.test(Ae())}function Te(t,e,i){void 0===e&&(e=!1),void 0===i&&(i=!1);var n=t.getBoundingClientRect(),s=1,o=1;e&&me(t)&&(s=t.offsetWidth>0&&we(n.width)/t.offsetWidth||1,o=t.offsetHeight>0&&we(n.height)/t.offsetHeight||1);var r=(pe(t)?fe(t):window).visualViewport,a=!Ee()&&i,l=(n.left+(a&&r?r.offsetLeft:0))/s,c=(n.top+(a&&r?r.offsetTop:0))/o,h=n.width/s,d=n.height/o;return{width:h,height:d,top:c,right:l+h,bottom:c+d,left:l,x:l,y:c}}function Ce(t){var e=Te(t),i=t.offsetWidth,n=t.offsetHeight;return Math.abs(e.width-i)<=1&&(i=e.width),Math.abs(e.height-n)<=1&&(n=e.height),{x:t.offsetLeft,y:t.offsetTop,width:i,height:n}}function Oe(t,e){var i=e.getRootNode&&e.getRootNode();if(t.contains(e))return!0;if(i&&ge(i)){var n=e;do{if(n&&t.isSameNode(n))return!0;n=n.parentNode||n.host}while(n)}return!1}function xe(t){return fe(t).getComputedStyle(t)}function ke(t){return["table","td","th"].indexOf(ue(t))>=0}function Le(t){return((pe(t)?t.ownerDocument:t.document)||window.document).documentElement}function Se(t){return"html"===ue(t)?t:t.assignedSlot||t.parentNode||(ge(t)?t.host:null)||Le(t)}function De(t){return me(t)&&"fixed"!==xe(t).position?t.offsetParent:null}function $e(t){for(var e=fe(t),i=De(t);i&&ke(i)&&"static"===xe(i).position;)i=De(i);return i&&("html"===ue(i)||"body"===ue(i)&&"static"===xe(i).position)?e:i||function(t){var e=/firefox/i.test(Ae());if(/Trident/i.test(Ae())&&me(t)&&"fixed"===xe(t).position)return null;var i=Se(t);for(ge(i)&&(i=i.host);me(i)&&["html","body"].indexOf(ue(i))<0;){var n=xe(i);if("none"!==n.transform||"none"!==n.perspective||"paint"===n.contain||-1!==["transform","perspective"].indexOf(n.willChange)||e&&"filter"===n.willChange||e&&n.filter&&"none"!==n.filter)return i;i=i.parentNode}return null}(t)||e}function Ie(t){return["top","bottom"].indexOf(t)>=0?"x":"y"}function Ne(t,e,i){return ve(t,ye(e,i))}function Pe(t){return Object.assign({},{top:0,right:0,bottom:0,left:0},t)}function Me(t,e){return e.reduce((function(e,i){return e[i]=t,e}),{})}const je={name:"arrow",enabled:!0,phase:"main",fn:function(t){var e,i=t.state,n=t.name,s=t.options,o=i.elements.arrow,r=i.modifiersData.popperOffsets,a=be(i.placement),l=Ie(a),c=[Vt,qt].indexOf(a)>=0?"height":"width";if(o&&r){var h=function(t,e){return Pe("number"!=typeof(t="function"==typeof t?t(Object.assign({},e.rects,{placement:e.placement})):t)?t:Me(t,Qt))}(s.padding,i),d=Ce(o),u="y"===l?zt:Vt,f="y"===l?Rt:qt,p=i.rects.reference[c]+i.rects.reference[l]-r[l]-i.rects.popper[c],m=r[l]-i.rects.reference[l],g=$e(o),_=g?"y"===l?g.clientHeight||0:g.clientWidth||0:0,b=p/2-m/2,v=h[u],y=_-d[c]-h[f],w=_/2-d[c]/2+b,A=Ne(v,w,y),E=l;i.modifiersData[n]=((e={})[E]=A,e.centerOffset=A-w,e)}},effect:function(t){var e=t.state,i=t.options.element,n=void 0===i?"[data-popper-arrow]":i;null!=n&&("string"!=typeof n||(n=e.elements.popper.querySelector(n)))&&Oe(e.elements.popper,n)&&(e.elements.arrow=n)},requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function Fe(t){return t.split("-")[1]}var He={top:"auto",right:"auto",bottom:"auto",left:"auto"};function We(t){var e,i=t.popper,n=t.popperRect,s=t.placement,o=t.variation,r=t.offsets,a=t.position,l=t.gpuAcceleration,c=t.adaptive,h=t.roundOffsets,d=t.isFixed,u=r.x,f=void 0===u?0:u,p=r.y,m=void 0===p?0:p,g="function"==typeof h?h({x:f,y:m}):{x:f,y:m};f=g.x,m=g.y;var _=r.hasOwnProperty("x"),b=r.hasOwnProperty("y"),v=Vt,y=zt,w=window;if(c){var A=$e(i),E="clientHeight",T="clientWidth";A===fe(i)&&"static"!==xe(A=Le(i)).position&&"absolute"===a&&(E="scrollHeight",T="scrollWidth"),(s===zt||(s===Vt||s===qt)&&o===Yt)&&(y=Rt,m-=(d&&A===w&&w.visualViewport?w.visualViewport.height:A[E])-n.height,m*=l?1:-1),s!==Vt&&(s!==zt&&s!==Rt||o!==Yt)||(v=qt,f-=(d&&A===w&&w.visualViewport?w.visualViewport.width:A[T])-n.width,f*=l?1:-1)}var C,O=Object.assign({position:a},c&&He),x=!0===h?function(t,e){var i=t.x,n=t.y,s=e.devicePixelRatio||1;return{x:we(i*s)/s||0,y:we(n*s)/s||0}}({x:f,y:m},fe(i)):{x:f,y:m};return f=x.x,m=x.y,l?Object.assign({},O,((C={})[y]=b?"0":"",C[v]=_?"0":"",C.transform=(w.devicePixelRatio||1)<=1?"translate("+f+"px, "+m+"px)":"translate3d("+f+"px, "+m+"px, 0)",C)):Object.assign({},O,((e={})[y]=b?m+"px":"",e[v]=_?f+"px":"",e.transform="",e))}const Be={name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:function(t){var e=t.state,i=t.options,n=i.gpuAcceleration,s=void 0===n||n,o=i.adaptive,r=void 0===o||o,a=i.roundOffsets,l=void 0===a||a,c={placement:be(e.placement),variation:Fe(e.placement),popper:e.elements.popper,popperRect:e.rects.popper,gpuAcceleration:s,isFixed:"fixed"===e.options.strategy};null!=e.modifiersData.popperOffsets&&(e.styles.popper=Object.assign({},e.styles.popper,We(Object.assign({},c,{offsets:e.modifiersData.popperOffsets,position:e.options.strategy,adaptive:r,roundOffsets:l})))),null!=e.modifiersData.arrow&&(e.styles.arrow=Object.assign({},e.styles.arrow,We(Object.assign({},c,{offsets:e.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:l})))),e.attributes.popper=Object.assign({},e.attributes.popper,{"data-popper-placement":e.placement})},data:{}};var ze={passive:!0};const Re={name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect:function(t){var e=t.state,i=t.instance,n=t.options,s=n.scroll,o=void 0===s||s,r=n.resize,a=void 0===r||r,l=fe(e.elements.popper),c=[].concat(e.scrollParents.reference,e.scrollParents.popper);return o&&c.forEach((function(t){t.addEventListener("scroll",i.update,ze)})),a&&l.addEventListener("resize",i.update,ze),function(){o&&c.forEach((function(t){t.removeEventListener("scroll",i.update,ze)})),a&&l.removeEventListener("resize",i.update,ze)}},data:{}};var qe={left:"right",right:"left",bottom:"top",top:"bottom"};function Ve(t){return t.replace(/left|right|bottom|top/g,(function(t){return qe[t]}))}var Ke={start:"end",end:"start"};function Qe(t){return t.replace(/start|end/g,(function(t){return Ke[t]}))}function Xe(t){var e=fe(t);return{scrollLeft:e.pageXOffset,scrollTop:e.pageYOffset}}function Ye(t){return Te(Le(t)).left+Xe(t).scrollLeft}function Ue(t){var e=xe(t),i=e.overflow,n=e.overflowX,s=e.overflowY;return/auto|scroll|overlay|hidden/.test(i+s+n)}function Ge(t){return["html","body","#document"].indexOf(ue(t))>=0?t.ownerDocument.body:me(t)&&Ue(t)?t:Ge(Se(t))}function Je(t,e){var i;void 0===e&&(e=[]);var n=Ge(t),s=n===(null==(i=t.ownerDocument)?void 0:i.body),o=fe(n),r=s?[o].concat(o.visualViewport||[],Ue(n)?n:[]):n,a=e.concat(r);return s?a:a.concat(Je(Se(r)))}function Ze(t){return Object.assign({},t,{left:t.x,top:t.y,right:t.x+t.width,bottom:t.y+t.height})}function ti(t,e,i){return e===Gt?Ze(function(t,e){var i=fe(t),n=Le(t),s=i.visualViewport,o=n.clientWidth,r=n.clientHeight,a=0,l=0;if(s){o=s.width,r=s.height;var c=Ee();(c||!c&&"fixed"===e)&&(a=s.offsetLeft,l=s.offsetTop)}return{width:o,height:r,x:a+Ye(t),y:l}}(t,i)):pe(e)?function(t,e){var i=Te(t,!1,"fixed"===e);return i.top=i.top+t.clientTop,i.left=i.left+t.clientLeft,i.bottom=i.top+t.clientHeight,i.right=i.left+t.clientWidth,i.width=t.clientWidth,i.height=t.clientHeight,i.x=i.left,i.y=i.top,i}(e,i):Ze(function(t){var e,i=Le(t),n=Xe(t),s=null==(e=t.ownerDocument)?void 0:e.body,o=ve(i.scrollWidth,i.clientWidth,s?s.scrollWidth:0,s?s.clientWidth:0),r=ve(i.scrollHeight,i.clientHeight,s?s.scrollHeight:0,s?s.clientHeight:0),a=-n.scrollLeft+Ye(t),l=-n.scrollTop;return"rtl"===xe(s||i).direction&&(a+=ve(i.clientWidth,s?s.clientWidth:0)-o),{width:o,height:r,x:a,y:l}}(Le(t)))}function ei(t){var e,i=t.reference,n=t.element,s=t.placement,o=s?be(s):null,r=s?Fe(s):null,a=i.x+i.width/2-n.width/2,l=i.y+i.height/2-n.height/2;switch(o){case zt:e={x:a,y:i.y-n.height};break;case Rt:e={x:a,y:i.y+i.height};break;case qt:e={x:i.x+i.width,y:l};break;case Vt:e={x:i.x-n.width,y:l};break;default:e={x:i.x,y:i.y}}var c=o?Ie(o):null;if(null!=c){var h="y"===c?"height":"width";switch(r){case Xt:e[c]=e[c]-(i[h]/2-n[h]/2);break;case Yt:e[c]=e[c]+(i[h]/2-n[h]/2)}}return e}function ii(t,e){void 0===e&&(e={});var i=e,n=i.placement,s=void 0===n?t.placement:n,o=i.strategy,r=void 0===o?t.strategy:o,a=i.boundary,l=void 0===a?Ut:a,c=i.rootBoundary,h=void 0===c?Gt:c,d=i.elementContext,u=void 0===d?Jt:d,f=i.altBoundary,p=void 0!==f&&f,m=i.padding,g=void 0===m?0:m,_=Pe("number"!=typeof g?g:Me(g,Qt)),b=u===Jt?Zt:Jt,v=t.rects.popper,y=t.elements[p?b:u],w=function(t,e,i,n){var s="clippingParents"===e?function(t){var e=Je(Se(t)),i=["absolute","fixed"].indexOf(xe(t).position)>=0&&me(t)?$e(t):t;return pe(i)?e.filter((function(t){return pe(t)&&Oe(t,i)&&"body"!==ue(t)})):[]}(t):[].concat(e),o=[].concat(s,[i]),r=o[0],a=o.reduce((function(e,i){var s=ti(t,i,n);return e.top=ve(s.top,e.top),e.right=ye(s.right,e.right),e.bottom=ye(s.bottom,e.bottom),e.left=ve(s.left,e.left),e}),ti(t,r,n));return a.width=a.right-a.left,a.height=a.bottom-a.top,a.x=a.left,a.y=a.top,a}(pe(y)?y:y.contextElement||Le(t.elements.popper),l,h,r),A=Te(t.elements.reference),E=ei({reference:A,element:v,strategy:"absolute",placement:s}),T=Ze(Object.assign({},v,E)),C=u===Jt?T:A,O={top:w.top-C.top+_.top,bottom:C.bottom-w.bottom+_.bottom,left:w.left-C.left+_.left,right:C.right-w.right+_.right},x=t.modifiersData.offset;if(u===Jt&&x){var k=x[s];Object.keys(O).forEach((function(t){var e=[qt,Rt].indexOf(t)>=0?1:-1,i=[zt,Rt].indexOf(t)>=0?"y":"x";O[t]+=k[i]*e}))}return O}function ni(t,e){void 0===e&&(e={});var i=e,n=i.placement,s=i.boundary,o=i.rootBoundary,r=i.padding,a=i.flipVariations,l=i.allowedAutoPlacements,c=void 0===l?ee:l,h=Fe(n),d=h?a?te:te.filter((function(t){return Fe(t)===h})):Qt,u=d.filter((function(t){return c.indexOf(t)>=0}));0===u.length&&(u=d);var f=u.reduce((function(e,i){return e[i]=ii(t,{placement:i,boundary:s,rootBoundary:o,padding:r})[be(i)],e}),{});return Object.keys(f).sort((function(t,e){return f[t]-f[e]}))}const si={name:"flip",enabled:!0,phase:"main",fn:function(t){var e=t.state,i=t.options,n=t.name;if(!e.modifiersData[n]._skip){for(var s=i.mainAxis,o=void 0===s||s,r=i.altAxis,a=void 0===r||r,l=i.fallbackPlacements,c=i.padding,h=i.boundary,d=i.rootBoundary,u=i.altBoundary,f=i.flipVariations,p=void 0===f||f,m=i.allowedAutoPlacements,g=e.options.placement,_=be(g),b=l||(_!==g&&p?function(t){if(be(t)===Kt)return[];var e=Ve(t);return[Qe(t),e,Qe(e)]}(g):[Ve(g)]),v=[g].concat(b).reduce((function(t,i){return t.concat(be(i)===Kt?ni(e,{placement:i,boundary:h,rootBoundary:d,padding:c,flipVariations:p,allowedAutoPlacements:m}):i)}),[]),y=e.rects.reference,w=e.rects.popper,A=new Map,E=!0,T=v[0],C=0;C=0,S=L?"width":"height",D=ii(e,{placement:O,boundary:h,rootBoundary:d,altBoundary:u,padding:c}),$=L?k?qt:Vt:k?Rt:zt;y[S]>w[S]&&($=Ve($));var I=Ve($),N=[];if(o&&N.push(D[x]<=0),a&&N.push(D[$]<=0,D[I]<=0),N.every((function(t){return t}))){T=O,E=!1;break}A.set(O,N)}if(E)for(var P=function(t){var e=v.find((function(e){var i=A.get(e);if(i)return i.slice(0,t).every((function(t){return t}))}));if(e)return T=e,"break"},M=p?3:1;M>0&&"break"!==P(M);M--);e.placement!==T&&(e.modifiersData[n]._skip=!0,e.placement=T,e.reset=!0)}},requiresIfExists:["offset"],data:{_skip:!1}};function oi(t,e,i){return void 0===i&&(i={x:0,y:0}),{top:t.top-e.height-i.y,right:t.right-e.width+i.x,bottom:t.bottom-e.height+i.y,left:t.left-e.width-i.x}}function ri(t){return[zt,qt,Rt,Vt].some((function(e){return t[e]>=0}))}const ai={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:function(t){var e=t.state,i=t.name,n=e.rects.reference,s=e.rects.popper,o=e.modifiersData.preventOverflow,r=ii(e,{elementContext:"reference"}),a=ii(e,{altBoundary:!0}),l=oi(r,n),c=oi(a,s,o),h=ri(l),d=ri(c);e.modifiersData[i]={referenceClippingOffsets:l,popperEscapeOffsets:c,isReferenceHidden:h,hasPopperEscaped:d},e.attributes.popper=Object.assign({},e.attributes.popper,{"data-popper-reference-hidden":h,"data-popper-escaped":d})}},li={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:function(t){var e=t.state,i=t.options,n=t.name,s=i.offset,o=void 0===s?[0,0]:s,r=ee.reduce((function(t,i){return t[i]=function(t,e,i){var n=be(t),s=[Vt,zt].indexOf(n)>=0?-1:1,o="function"==typeof i?i(Object.assign({},e,{placement:t})):i,r=o[0],a=o[1];return r=r||0,a=(a||0)*s,[Vt,qt].indexOf(n)>=0?{x:a,y:r}:{x:r,y:a}}(i,e.rects,o),t}),{}),a=r[e.placement],l=a.x,c=a.y;null!=e.modifiersData.popperOffsets&&(e.modifiersData.popperOffsets.x+=l,e.modifiersData.popperOffsets.y+=c),e.modifiersData[n]=r}},ci={name:"popperOffsets",enabled:!0,phase:"read",fn:function(t){var e=t.state,i=t.name;e.modifiersData[i]=ei({reference:e.rects.reference,element:e.rects.popper,strategy:"absolute",placement:e.placement})},data:{}},hi={name:"preventOverflow",enabled:!0,phase:"main",fn:function(t){var e=t.state,i=t.options,n=t.name,s=i.mainAxis,o=void 0===s||s,r=i.altAxis,a=void 0!==r&&r,l=i.boundary,c=i.rootBoundary,h=i.altBoundary,d=i.padding,u=i.tether,f=void 0===u||u,p=i.tetherOffset,m=void 0===p?0:p,g=ii(e,{boundary:l,rootBoundary:c,padding:d,altBoundary:h}),_=be(e.placement),b=Fe(e.placement),v=!b,y=Ie(_),w="x"===y?"y":"x",A=e.modifiersData.popperOffsets,E=e.rects.reference,T=e.rects.popper,C="function"==typeof m?m(Object.assign({},e.rects,{placement:e.placement})):m,O="number"==typeof C?{mainAxis:C,altAxis:C}:Object.assign({mainAxis:0,altAxis:0},C),x=e.modifiersData.offset?e.modifiersData.offset[e.placement]:null,k={x:0,y:0};if(A){if(o){var L,S="y"===y?zt:Vt,D="y"===y?Rt:qt,$="y"===y?"height":"width",I=A[y],N=I+g[S],P=I-g[D],M=f?-T[$]/2:0,j=b===Xt?E[$]:T[$],F=b===Xt?-T[$]:-E[$],H=e.elements.arrow,W=f&&H?Ce(H):{width:0,height:0},B=e.modifiersData["arrow#persistent"]?e.modifiersData["arrow#persistent"].padding:{top:0,right:0,bottom:0,left:0},z=B[S],R=B[D],q=Ne(0,E[$],W[$]),V=v?E[$]/2-M-q-z-O.mainAxis:j-q-z-O.mainAxis,K=v?-E[$]/2+M+q+R+O.mainAxis:F+q+R+O.mainAxis,Q=e.elements.arrow&&$e(e.elements.arrow),X=Q?"y"===y?Q.clientTop||0:Q.clientLeft||0:0,Y=null!=(L=null==x?void 0:x[y])?L:0,U=I+K-Y,G=Ne(f?ye(N,I+V-Y-X):N,I,f?ve(P,U):P);A[y]=G,k[y]=G-I}if(a){var J,Z="x"===y?zt:Vt,tt="x"===y?Rt:qt,et=A[w],it="y"===w?"height":"width",nt=et+g[Z],st=et-g[tt],ot=-1!==[zt,Vt].indexOf(_),rt=null!=(J=null==x?void 0:x[w])?J:0,at=ot?nt:et-E[it]-T[it]-rt+O.altAxis,lt=ot?et+E[it]+T[it]-rt-O.altAxis:st,ct=f&&ot?function(t,e,i){var n=Ne(t,e,i);return n>i?i:n}(at,et,lt):Ne(f?at:nt,et,f?lt:st);A[w]=ct,k[w]=ct-et}e.modifiersData[n]=k}},requiresIfExists:["offset"]};function di(t,e,i){void 0===i&&(i=!1);var n,s,o=me(e),r=me(e)&&function(t){var e=t.getBoundingClientRect(),i=we(e.width)/t.offsetWidth||1,n=we(e.height)/t.offsetHeight||1;return 1!==i||1!==n}(e),a=Le(e),l=Te(t,r,i),c={scrollLeft:0,scrollTop:0},h={x:0,y:0};return(o||!o&&!i)&&(("body"!==ue(e)||Ue(a))&&(c=(n=e)!==fe(n)&&me(n)?{scrollLeft:(s=n).scrollLeft,scrollTop:s.scrollTop}:Xe(n)),me(e)?((h=Te(e,!0)).x+=e.clientLeft,h.y+=e.clientTop):a&&(h.x=Ye(a))),{x:l.left+c.scrollLeft-h.x,y:l.top+c.scrollTop-h.y,width:l.width,height:l.height}}function ui(t){var e=new Map,i=new Set,n=[];function s(t){i.add(t.name),[].concat(t.requires||[],t.requiresIfExists||[]).forEach((function(t){if(!i.has(t)){var n=e.get(t);n&&s(n)}})),n.push(t)}return t.forEach((function(t){e.set(t.name,t)})),t.forEach((function(t){i.has(t.name)||s(t)})),n}var fi={placement:"bottom",modifiers:[],strategy:"absolute"};function pi(){for(var t=arguments.length,e=new Array(t),i=0;iNumber.parseInt(t,10))):"function"==typeof t?e=>t(e,this._element):t}_getPopperConfig(){const t={placement:this._getPlacement(),modifiers:[{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"offset",options:{offset:this._getOffset()}}]};return(this._inNavbar||"static"===this._config.display)&&(F.setDataAttribute(this._menu,"popper","static"),t.modifiers=[{name:"applyStyles",enabled:!1}]),{...t,...g(this._config.popperConfig,[t])}}_selectMenuItem({key:t,target:e}){const i=z.find(".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)",this._menu).filter((t=>a(t)));i.length&&b(i,e,t===Ti,!i.includes(e)).focus()}static jQueryInterface(t){return this.each((function(){const e=qi.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}static clearMenus(t){if(2===t.button||"keyup"===t.type&&"Tab"!==t.key)return;const e=z.find(Ni);for(const i of e){const e=qi.getInstance(i);if(!e||!1===e._config.autoClose)continue;const n=t.composedPath(),s=n.includes(e._menu);if(n.includes(e._element)||"inside"===e._config.autoClose&&!s||"outside"===e._config.autoClose&&s)continue;if(e._menu.contains(t.target)&&("keyup"===t.type&&"Tab"===t.key||/input|select|option|textarea|form/i.test(t.target.tagName)))continue;const o={relatedTarget:e._element};"click"===t.type&&(o.clickEvent=t),e._completeHide(o)}}static dataApiKeydownHandler(t){const e=/input|textarea/i.test(t.target.tagName),i="Escape"===t.key,n=[Ei,Ti].includes(t.key);if(!n&&!i)return;if(e&&!i)return;t.preventDefault();const s=this.matches(Ii)?this:z.prev(this,Ii)[0]||z.next(this,Ii)[0]||z.findOne(Ii,t.delegateTarget.parentNode),o=qi.getOrCreateInstance(s);if(n)return t.stopPropagation(),o.show(),void o._selectMenuItem(t);o._isShown()&&(t.stopPropagation(),o.hide(),s.focus())}}N.on(document,Si,Ii,qi.dataApiKeydownHandler),N.on(document,Si,Pi,qi.dataApiKeydownHandler),N.on(document,Li,qi.clearMenus),N.on(document,Di,qi.clearMenus),N.on(document,Li,Ii,(function(t){t.preventDefault(),qi.getOrCreateInstance(this).toggle()})),m(qi);const Vi="backdrop",Ki="show",Qi=`mousedown.bs.${Vi}`,Xi={className:"modal-backdrop",clickCallback:null,isAnimated:!1,isVisible:!0,rootElement:"body"},Yi={className:"string",clickCallback:"(function|null)",isAnimated:"boolean",isVisible:"boolean",rootElement:"(element|string)"};class Ui extends H{constructor(t){super(),this._config=this._getConfig(t),this._isAppended=!1,this._element=null}static get Default(){return Xi}static get DefaultType(){return Yi}static get NAME(){return Vi}show(t){if(!this._config.isVisible)return void g(t);this._append();const e=this._getElement();this._config.isAnimated&&d(e),e.classList.add(Ki),this._emulateAnimation((()=>{g(t)}))}hide(t){this._config.isVisible?(this._getElement().classList.remove(Ki),this._emulateAnimation((()=>{this.dispose(),g(t)}))):g(t)}dispose(){this._isAppended&&(N.off(this._element,Qi),this._element.remove(),this._isAppended=!1)}_getElement(){if(!this._element){const t=document.createElement("div");t.className=this._config.className,this._config.isAnimated&&t.classList.add("fade"),this._element=t}return this._element}_configAfterMerge(t){return t.rootElement=r(t.rootElement),t}_append(){if(this._isAppended)return;const t=this._getElement();this._config.rootElement.append(t),N.on(t,Qi,(()=>{g(this._config.clickCallback)})),this._isAppended=!0}_emulateAnimation(t){_(t,this._getElement(),this._config.isAnimated)}}const Gi=".bs.focustrap",Ji=`focusin${Gi}`,Zi=`keydown.tab${Gi}`,tn="backward",en={autofocus:!0,trapElement:null},nn={autofocus:"boolean",trapElement:"element"};class sn extends H{constructor(t){super(),this._config=this._getConfig(t),this._isActive=!1,this._lastTabNavDirection=null}static get Default(){return en}static get DefaultType(){return nn}static get NAME(){return"focustrap"}activate(){this._isActive||(this._config.autofocus&&this._config.trapElement.focus(),N.off(document,Gi),N.on(document,Ji,(t=>this._handleFocusin(t))),N.on(document,Zi,(t=>this._handleKeydown(t))),this._isActive=!0)}deactivate(){this._isActive&&(this._isActive=!1,N.off(document,Gi))}_handleFocusin(t){const{trapElement:e}=this._config;if(t.target===document||t.target===e||e.contains(t.target))return;const i=z.focusableChildren(e);0===i.length?e.focus():this._lastTabNavDirection===tn?i[i.length-1].focus():i[0].focus()}_handleKeydown(t){"Tab"===t.key&&(this._lastTabNavDirection=t.shiftKey?tn:"forward")}}const on=".fixed-top, .fixed-bottom, .is-fixed, .sticky-top",rn=".sticky-top",an="padding-right",ln="margin-right";class cn{constructor(){this._element=document.body}getWidth(){const t=document.documentElement.clientWidth;return Math.abs(window.innerWidth-t)}hide(){const t=this.getWidth();this._disableOverFlow(),this._setElementAttributes(this._element,an,(e=>e+t)),this._setElementAttributes(on,an,(e=>e+t)),this._setElementAttributes(rn,ln,(e=>e-t))}reset(){this._resetElementAttributes(this._element,"overflow"),this._resetElementAttributes(this._element,an),this._resetElementAttributes(on,an),this._resetElementAttributes(rn,ln)}isOverflowing(){return this.getWidth()>0}_disableOverFlow(){this._saveInitialAttribute(this._element,"overflow"),this._element.style.overflow="hidden"}_setElementAttributes(t,e,i){const n=this.getWidth();this._applyManipulationCallback(t,(t=>{if(t!==this._element&&window.innerWidth>t.clientWidth+n)return;this._saveInitialAttribute(t,e);const s=window.getComputedStyle(t).getPropertyValue(e);t.style.setProperty(e,`${i(Number.parseFloat(s))}px`)}))}_saveInitialAttribute(t,e){const i=t.style.getPropertyValue(e);i&&F.setDataAttribute(t,e,i)}_resetElementAttributes(t,e){this._applyManipulationCallback(t,(t=>{const i=F.getDataAttribute(t,e);null!==i?(F.removeDataAttribute(t,e),t.style.setProperty(e,i)):t.style.removeProperty(e)}))}_applyManipulationCallback(t,e){if(o(t))e(t);else for(const i of z.find(t,this._element))e(i)}}const hn=".bs.modal",dn=`hide${hn}`,un=`hidePrevented${hn}`,fn=`hidden${hn}`,pn=`show${hn}`,mn=`shown${hn}`,gn=`resize${hn}`,_n=`click.dismiss${hn}`,bn=`mousedown.dismiss${hn}`,vn=`keydown.dismiss${hn}`,yn=`click${hn}.data-api`,wn="modal-open",An="show",En="modal-static",Tn={backdrop:!0,focus:!0,keyboard:!0},Cn={backdrop:"(boolean|string)",focus:"boolean",keyboard:"boolean"};class On extends W{constructor(t,e){super(t,e),this._dialog=z.findOne(".modal-dialog",this._element),this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._isShown=!1,this._isTransitioning=!1,this._scrollBar=new cn,this._addEventListeners()}static get Default(){return Tn}static get DefaultType(){return Cn}static get NAME(){return"modal"}toggle(t){return this._isShown?this.hide():this.show(t)}show(t){this._isShown||this._isTransitioning||N.trigger(this._element,pn,{relatedTarget:t}).defaultPrevented||(this._isShown=!0,this._isTransitioning=!0,this._scrollBar.hide(),document.body.classList.add(wn),this._adjustDialog(),this._backdrop.show((()=>this._showElement(t))))}hide(){this._isShown&&!this._isTransitioning&&(N.trigger(this._element,dn).defaultPrevented||(this._isShown=!1,this._isTransitioning=!0,this._focustrap.deactivate(),this._element.classList.remove(An),this._queueCallback((()=>this._hideModal()),this._element,this._isAnimated())))}dispose(){N.off(window,hn),N.off(this._dialog,hn),this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}handleUpdate(){this._adjustDialog()}_initializeBackDrop(){return new Ui({isVisible:Boolean(this._config.backdrop),isAnimated:this._isAnimated()})}_initializeFocusTrap(){return new sn({trapElement:this._element})}_showElement(t){document.body.contains(this._element)||document.body.append(this._element),this._element.style.display="block",this._element.removeAttribute("aria-hidden"),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.scrollTop=0;const e=z.findOne(".modal-body",this._dialog);e&&(e.scrollTop=0),d(this._element),this._element.classList.add(An),this._queueCallback((()=>{this._config.focus&&this._focustrap.activate(),this._isTransitioning=!1,N.trigger(this._element,mn,{relatedTarget:t})}),this._dialog,this._isAnimated())}_addEventListeners(){N.on(this._element,vn,(t=>{"Escape"===t.key&&(this._config.keyboard?this.hide():this._triggerBackdropTransition())})),N.on(window,gn,(()=>{this._isShown&&!this._isTransitioning&&this._adjustDialog()})),N.on(this._element,bn,(t=>{N.one(this._element,_n,(e=>{this._element===t.target&&this._element===e.target&&("static"!==this._config.backdrop?this._config.backdrop&&this.hide():this._triggerBackdropTransition())}))}))}_hideModal(){this._element.style.display="none",this._element.setAttribute("aria-hidden",!0),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._isTransitioning=!1,this._backdrop.hide((()=>{document.body.classList.remove(wn),this._resetAdjustments(),this._scrollBar.reset(),N.trigger(this._element,fn)}))}_isAnimated(){return this._element.classList.contains("fade")}_triggerBackdropTransition(){if(N.trigger(this._element,un).defaultPrevented)return;const t=this._element.scrollHeight>document.documentElement.clientHeight,e=this._element.style.overflowY;"hidden"===e||this._element.classList.contains(En)||(t||(this._element.style.overflowY="hidden"),this._element.classList.add(En),this._queueCallback((()=>{this._element.classList.remove(En),this._queueCallback((()=>{this._element.style.overflowY=e}),this._dialog)}),this._dialog),this._element.focus())}_adjustDialog(){const t=this._element.scrollHeight>document.documentElement.clientHeight,e=this._scrollBar.getWidth(),i=e>0;if(i&&!t){const t=p()?"paddingLeft":"paddingRight";this._element.style[t]=`${e}px`}if(!i&&t){const t=p()?"paddingRight":"paddingLeft";this._element.style[t]=`${e}px`}}_resetAdjustments(){this._element.style.paddingLeft="",this._element.style.paddingRight=""}static jQueryInterface(t,e){return this.each((function(){const i=On.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===i[t])throw new TypeError(`No method named "${t}"`);i[t](e)}}))}}N.on(document,yn,'[data-bs-toggle="modal"]',(function(t){const e=z.getElementFromSelector(this);["A","AREA"].includes(this.tagName)&&t.preventDefault(),N.one(e,pn,(t=>{t.defaultPrevented||N.one(e,fn,(()=>{a(this)&&this.focus()}))}));const i=z.findOne(".modal.show");i&&On.getInstance(i).hide(),On.getOrCreateInstance(e).toggle(this)})),R(On),m(On);const xn=".bs.offcanvas",kn=".data-api",Ln=`load${xn}${kn}`,Sn="show",Dn="showing",$n="hiding",In=".offcanvas.show",Nn=`show${xn}`,Pn=`shown${xn}`,Mn=`hide${xn}`,jn=`hidePrevented${xn}`,Fn=`hidden${xn}`,Hn=`resize${xn}`,Wn=`click${xn}${kn}`,Bn=`keydown.dismiss${xn}`,zn={backdrop:!0,keyboard:!0,scroll:!1},Rn={backdrop:"(boolean|string)",keyboard:"boolean",scroll:"boolean"};class qn extends W{constructor(t,e){super(t,e),this._isShown=!1,this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._addEventListeners()}static get Default(){return zn}static get DefaultType(){return Rn}static get NAME(){return"offcanvas"}toggle(t){return this._isShown?this.hide():this.show(t)}show(t){this._isShown||N.trigger(this._element,Nn,{relatedTarget:t}).defaultPrevented||(this._isShown=!0,this._backdrop.show(),this._config.scroll||(new cn).hide(),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.classList.add(Dn),this._queueCallback((()=>{this._config.scroll&&!this._config.backdrop||this._focustrap.activate(),this._element.classList.add(Sn),this._element.classList.remove(Dn),N.trigger(this._element,Pn,{relatedTarget:t})}),this._element,!0))}hide(){this._isShown&&(N.trigger(this._element,Mn).defaultPrevented||(this._focustrap.deactivate(),this._element.blur(),this._isShown=!1,this._element.classList.add($n),this._backdrop.hide(),this._queueCallback((()=>{this._element.classList.remove(Sn,$n),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._config.scroll||(new cn).reset(),N.trigger(this._element,Fn)}),this._element,!0)))}dispose(){this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}_initializeBackDrop(){const t=Boolean(this._config.backdrop);return new Ui({className:"offcanvas-backdrop",isVisible:t,isAnimated:!0,rootElement:this._element.parentNode,clickCallback:t?()=>{"static"!==this._config.backdrop?this.hide():N.trigger(this._element,jn)}:null})}_initializeFocusTrap(){return new sn({trapElement:this._element})}_addEventListeners(){N.on(this._element,Bn,(t=>{"Escape"===t.key&&(this._config.keyboard?this.hide():N.trigger(this._element,jn))}))}static jQueryInterface(t){return this.each((function(){const e=qn.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t](this)}}))}}N.on(document,Wn,'[data-bs-toggle="offcanvas"]',(function(t){const e=z.getElementFromSelector(this);if(["A","AREA"].includes(this.tagName)&&t.preventDefault(),l(this))return;N.one(e,Fn,(()=>{a(this)&&this.focus()}));const i=z.findOne(In);i&&i!==e&&qn.getInstance(i).hide(),qn.getOrCreateInstance(e).toggle(this)})),N.on(window,Ln,(()=>{for(const t of z.find(In))qn.getOrCreateInstance(t).show()})),N.on(window,Hn,(()=>{for(const t of z.find("[aria-modal][class*=show][class*=offcanvas-]"))"fixed"!==getComputedStyle(t).position&&qn.getOrCreateInstance(t).hide()})),R(qn),m(qn);const Vn={"*":["class","dir","id","lang","role",/^aria-[\w-]*$/i],a:["target","href","title","rel"],area:[],b:[],br:[],col:[],code:[],div:[],em:[],hr:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],i:[],img:["src","srcset","alt","title","width","height"],li:[],ol:[],p:[],pre:[],s:[],small:[],span:[],sub:[],sup:[],strong:[],u:[],ul:[]},Kn=new Set(["background","cite","href","itemtype","longdesc","poster","src","xlink:href"]),Qn=/^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:/?#]*(?:[/?#]|$))/i,Xn=(t,e)=>{const i=t.nodeName.toLowerCase();return e.includes(i)?!Kn.has(i)||Boolean(Qn.test(t.nodeValue)):e.filter((t=>t instanceof RegExp)).some((t=>t.test(i)))},Yn={allowList:Vn,content:{},extraClass:"",html:!1,sanitize:!0,sanitizeFn:null,template:"
    "},Un={allowList:"object",content:"object",extraClass:"(string|function)",html:"boolean",sanitize:"boolean",sanitizeFn:"(null|function)",template:"string"},Gn={entry:"(string|element|function|null)",selector:"(string|element)"};class Jn extends H{constructor(t){super(),this._config=this._getConfig(t)}static get Default(){return Yn}static get DefaultType(){return Un}static get NAME(){return"TemplateFactory"}getContent(){return Object.values(this._config.content).map((t=>this._resolvePossibleFunction(t))).filter(Boolean)}hasContent(){return this.getContent().length>0}changeContent(t){return this._checkContent(t),this._config.content={...this._config.content,...t},this}toHtml(){const t=document.createElement("div");t.innerHTML=this._maybeSanitize(this._config.template);for(const[e,i]of Object.entries(this._config.content))this._setContent(t,i,e);const e=t.children[0],i=this._resolvePossibleFunction(this._config.extraClass);return i&&e.classList.add(...i.split(" ")),e}_typeCheckConfig(t){super._typeCheckConfig(t),this._checkContent(t.content)}_checkContent(t){for(const[e,i]of Object.entries(t))super._typeCheckConfig({selector:e,entry:i},Gn)}_setContent(t,e,i){const n=z.findOne(i,t);n&&((e=this._resolvePossibleFunction(e))?o(e)?this._putElementInTemplate(r(e),n):this._config.html?n.innerHTML=this._maybeSanitize(e):n.textContent=e:n.remove())}_maybeSanitize(t){return this._config.sanitize?function(t,e,i){if(!t.length)return t;if(i&&"function"==typeof i)return i(t);const n=(new window.DOMParser).parseFromString(t,"text/html"),s=[].concat(...n.body.querySelectorAll("*"));for(const t of s){const i=t.nodeName.toLowerCase();if(!Object.keys(e).includes(i)){t.remove();continue}const n=[].concat(...t.attributes),s=[].concat(e["*"]||[],e[i]||[]);for(const e of n)Xn(e,s)||t.removeAttribute(e.nodeName)}return n.body.innerHTML}(t,this._config.allowList,this._config.sanitizeFn):t}_resolvePossibleFunction(t){return g(t,[this])}_putElementInTemplate(t,e){if(this._config.html)return e.innerHTML="",void e.append(t);e.textContent=t.textContent}}const Zn=new Set(["sanitize","allowList","sanitizeFn"]),ts="fade",es="show",is=".modal",ns="hide.bs.modal",ss="hover",os="focus",rs={AUTO:"auto",TOP:"top",RIGHT:p()?"left":"right",BOTTOM:"bottom",LEFT:p()?"right":"left"},as={allowList:Vn,animation:!0,boundary:"clippingParents",container:!1,customClass:"",delay:0,fallbackPlacements:["top","right","bottom","left"],html:!1,offset:[0,6],placement:"top",popperConfig:null,sanitize:!0,sanitizeFn:null,selector:!1,template:'',title:"",trigger:"hover focus"},ls={allowList:"object",animation:"boolean",boundary:"(string|element)",container:"(string|element|boolean)",customClass:"(string|function)",delay:"(number|object)",fallbackPlacements:"array",html:"boolean",offset:"(array|string|function)",placement:"(string|function)",popperConfig:"(null|object|function)",sanitize:"boolean",sanitizeFn:"(null|function)",selector:"(string|boolean)",template:"string",title:"(string|element|function)",trigger:"string"};class cs extends W{constructor(t,e){if(void 0===vi)throw new TypeError("Bootstrap's tooltips require Popper (https://popper.js.org)");super(t,e),this._isEnabled=!0,this._timeout=0,this._isHovered=null,this._activeTrigger={},this._popper=null,this._templateFactory=null,this._newContent=null,this.tip=null,this._setListeners(),this._config.selector||this._fixTitle()}static get Default(){return as}static get DefaultType(){return ls}static get NAME(){return"tooltip"}enable(){this._isEnabled=!0}disable(){this._isEnabled=!1}toggleEnabled(){this._isEnabled=!this._isEnabled}toggle(){this._isEnabled&&(this._activeTrigger.click=!this._activeTrigger.click,this._isShown()?this._leave():this._enter())}dispose(){clearTimeout(this._timeout),N.off(this._element.closest(is),ns,this._hideModalHandler),this._element.getAttribute("data-bs-original-title")&&this._element.setAttribute("title",this._element.getAttribute("data-bs-original-title")),this._disposePopper(),super.dispose()}show(){if("none"===this._element.style.display)throw new Error("Please use show on visible elements");if(!this._isWithContent()||!this._isEnabled)return;const t=N.trigger(this._element,this.constructor.eventName("show")),e=(c(this._element)||this._element.ownerDocument.documentElement).contains(this._element);if(t.defaultPrevented||!e)return;this._disposePopper();const i=this._getTipElement();this._element.setAttribute("aria-describedby",i.getAttribute("id"));const{container:n}=this._config;if(this._element.ownerDocument.documentElement.contains(this.tip)||(n.append(i),N.trigger(this._element,this.constructor.eventName("inserted"))),this._popper=this._createPopper(i),i.classList.add(es),"ontouchstart"in document.documentElement)for(const t of[].concat(...document.body.children))N.on(t,"mouseover",h);this._queueCallback((()=>{N.trigger(this._element,this.constructor.eventName("shown")),!1===this._isHovered&&this._leave(),this._isHovered=!1}),this.tip,this._isAnimated())}hide(){if(this._isShown()&&!N.trigger(this._element,this.constructor.eventName("hide")).defaultPrevented){if(this._getTipElement().classList.remove(es),"ontouchstart"in document.documentElement)for(const t of[].concat(...document.body.children))N.off(t,"mouseover",h);this._activeTrigger.click=!1,this._activeTrigger[os]=!1,this._activeTrigger[ss]=!1,this._isHovered=null,this._queueCallback((()=>{this._isWithActiveTrigger()||(this._isHovered||this._disposePopper(),this._element.removeAttribute("aria-describedby"),N.trigger(this._element,this.constructor.eventName("hidden")))}),this.tip,this._isAnimated())}}update(){this._popper&&this._popper.update()}_isWithContent(){return Boolean(this._getTitle())}_getTipElement(){return this.tip||(this.tip=this._createTipElement(this._newContent||this._getContentForTemplate())),this.tip}_createTipElement(t){const e=this._getTemplateFactory(t).toHtml();if(!e)return null;e.classList.remove(ts,es),e.classList.add(`bs-${this.constructor.NAME}-auto`);const i=(t=>{do{t+=Math.floor(1e6*Math.random())}while(document.getElementById(t));return t})(this.constructor.NAME).toString();return e.setAttribute("id",i),this._isAnimated()&&e.classList.add(ts),e}setContent(t){this._newContent=t,this._isShown()&&(this._disposePopper(),this.show())}_getTemplateFactory(t){return this._templateFactory?this._templateFactory.changeContent(t):this._templateFactory=new Jn({...this._config,content:t,extraClass:this._resolvePossibleFunction(this._config.customClass)}),this._templateFactory}_getContentForTemplate(){return{".tooltip-inner":this._getTitle()}}_getTitle(){return this._resolvePossibleFunction(this._config.title)||this._element.getAttribute("data-bs-original-title")}_initializeOnDelegatedTarget(t){return this.constructor.getOrCreateInstance(t.delegateTarget,this._getDelegateConfig())}_isAnimated(){return this._config.animation||this.tip&&this.tip.classList.contains(ts)}_isShown(){return this.tip&&this.tip.classList.contains(es)}_createPopper(t){const e=g(this._config.placement,[this,t,this._element]),i=rs[e.toUpperCase()];return bi(this._element,t,this._getPopperConfig(i))}_getOffset(){const{offset:t}=this._config;return"string"==typeof t?t.split(",").map((t=>Number.parseInt(t,10))):"function"==typeof t?e=>t(e,this._element):t}_resolvePossibleFunction(t){return g(t,[this._element])}_getPopperConfig(t){const e={placement:t,modifiers:[{name:"flip",options:{fallbackPlacements:this._config.fallbackPlacements}},{name:"offset",options:{offset:this._getOffset()}},{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"arrow",options:{element:`.${this.constructor.NAME}-arrow`}},{name:"preSetPlacement",enabled:!0,phase:"beforeMain",fn:t=>{this._getTipElement().setAttribute("data-popper-placement",t.state.placement)}}]};return{...e,...g(this._config.popperConfig,[e])}}_setListeners(){const t=this._config.trigger.split(" ");for(const e of t)if("click"===e)N.on(this._element,this.constructor.eventName("click"),this._config.selector,(t=>{this._initializeOnDelegatedTarget(t).toggle()}));else if("manual"!==e){const t=e===ss?this.constructor.eventName("mouseenter"):this.constructor.eventName("focusin"),i=e===ss?this.constructor.eventName("mouseleave"):this.constructor.eventName("focusout");N.on(this._element,t,this._config.selector,(t=>{const e=this._initializeOnDelegatedTarget(t);e._activeTrigger["focusin"===t.type?os:ss]=!0,e._enter()})),N.on(this._element,i,this._config.selector,(t=>{const e=this._initializeOnDelegatedTarget(t);e._activeTrigger["focusout"===t.type?os:ss]=e._element.contains(t.relatedTarget),e._leave()}))}this._hideModalHandler=()=>{this._element&&this.hide()},N.on(this._element.closest(is),ns,this._hideModalHandler)}_fixTitle(){const t=this._element.getAttribute("title");t&&(this._element.getAttribute("aria-label")||this._element.textContent.trim()||this._element.setAttribute("aria-label",t),this._element.setAttribute("data-bs-original-title",t),this._element.removeAttribute("title"))}_enter(){this._isShown()||this._isHovered?this._isHovered=!0:(this._isHovered=!0,this._setTimeout((()=>{this._isHovered&&this.show()}),this._config.delay.show))}_leave(){this._isWithActiveTrigger()||(this._isHovered=!1,this._setTimeout((()=>{this._isHovered||this.hide()}),this._config.delay.hide))}_setTimeout(t,e){clearTimeout(this._timeout),this._timeout=setTimeout(t,e)}_isWithActiveTrigger(){return Object.values(this._activeTrigger).includes(!0)}_getConfig(t){const e=F.getDataAttributes(this._element);for(const t of Object.keys(e))Zn.has(t)&&delete e[t];return t={...e,..."object"==typeof t&&t?t:{}},t=this._mergeConfigObj(t),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}_configAfterMerge(t){return t.container=!1===t.container?document.body:r(t.container),"number"==typeof t.delay&&(t.delay={show:t.delay,hide:t.delay}),"number"==typeof t.title&&(t.title=t.title.toString()),"number"==typeof t.content&&(t.content=t.content.toString()),t}_getDelegateConfig(){const t={};for(const[e,i]of Object.entries(this._config))this.constructor.Default[e]!==i&&(t[e]=i);return t.selector=!1,t.trigger="manual",t}_disposePopper(){this._popper&&(this._popper.destroy(),this._popper=null),this.tip&&(this.tip.remove(),this.tip=null)}static jQueryInterface(t){return this.each((function(){const e=cs.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}}m(cs);const hs={...cs.Default,content:"",offset:[0,8],placement:"right",template:'',trigger:"click"},ds={...cs.DefaultType,content:"(null|string|element|function)"};class us extends cs{static get Default(){return hs}static get DefaultType(){return ds}static get NAME(){return"popover"}_isWithContent(){return this._getTitle()||this._getContent()}_getContentForTemplate(){return{".popover-header":this._getTitle(),".popover-body":this._getContent()}}_getContent(){return this._resolvePossibleFunction(this._config.content)}static jQueryInterface(t){return this.each((function(){const e=us.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}}m(us);const fs=".bs.scrollspy",ps=`activate${fs}`,ms=`click${fs}`,gs=`load${fs}.data-api`,_s="active",bs="[href]",vs=".nav-link",ys=`${vs}, .nav-item > ${vs}, .list-group-item`,ws={offset:null,rootMargin:"0px 0px -25%",smoothScroll:!1,target:null,threshold:[.1,.5,1]},As={offset:"(number|null)",rootMargin:"string",smoothScroll:"boolean",target:"element",threshold:"array"};class Es extends W{constructor(t,e){super(t,e),this._targetLinks=new Map,this._observableSections=new Map,this._rootElement="visible"===getComputedStyle(this._element).overflowY?null:this._element,this._activeTarget=null,this._observer=null,this._previousScrollData={visibleEntryTop:0,parentScrollTop:0},this.refresh()}static get Default(){return ws}static get DefaultType(){return As}static get NAME(){return"scrollspy"}refresh(){this._initializeTargetsAndObservables(),this._maybeEnableSmoothScroll(),this._observer?this._observer.disconnect():this._observer=this._getNewObserver();for(const t of this._observableSections.values())this._observer.observe(t)}dispose(){this._observer.disconnect(),super.dispose()}_configAfterMerge(t){return t.target=r(t.target)||document.body,t.rootMargin=t.offset?`${t.offset}px 0px -30%`:t.rootMargin,"string"==typeof t.threshold&&(t.threshold=t.threshold.split(",").map((t=>Number.parseFloat(t)))),t}_maybeEnableSmoothScroll(){this._config.smoothScroll&&(N.off(this._config.target,ms),N.on(this._config.target,ms,bs,(t=>{const e=this._observableSections.get(t.target.hash);if(e){t.preventDefault();const i=this._rootElement||window,n=e.offsetTop-this._element.offsetTop;if(i.scrollTo)return void i.scrollTo({top:n,behavior:"smooth"});i.scrollTop=n}})))}_getNewObserver(){const t={root:this._rootElement,threshold:this._config.threshold,rootMargin:this._config.rootMargin};return new IntersectionObserver((t=>this._observerCallback(t)),t)}_observerCallback(t){const e=t=>this._targetLinks.get(`#${t.target.id}`),i=t=>{this._previousScrollData.visibleEntryTop=t.target.offsetTop,this._process(e(t))},n=(this._rootElement||document.documentElement).scrollTop,s=n>=this._previousScrollData.parentScrollTop;this._previousScrollData.parentScrollTop=n;for(const o of t){if(!o.isIntersecting){this._activeTarget=null,this._clearActiveClass(e(o));continue}const t=o.target.offsetTop>=this._previousScrollData.visibleEntryTop;if(s&&t){if(i(o),!n)return}else s||t||i(o)}}_initializeTargetsAndObservables(){this._targetLinks=new Map,this._observableSections=new Map;const t=z.find(bs,this._config.target);for(const e of t){if(!e.hash||l(e))continue;const t=z.findOne(decodeURI(e.hash),this._element);a(t)&&(this._targetLinks.set(decodeURI(e.hash),e),this._observableSections.set(e.hash,t))}}_process(t){this._activeTarget!==t&&(this._clearActiveClass(this._config.target),this._activeTarget=t,t.classList.add(_s),this._activateParents(t),N.trigger(this._element,ps,{relatedTarget:t}))}_activateParents(t){if(t.classList.contains("dropdown-item"))z.findOne(".dropdown-toggle",t.closest(".dropdown")).classList.add(_s);else for(const e of z.parents(t,".nav, .list-group"))for(const t of z.prev(e,ys))t.classList.add(_s)}_clearActiveClass(t){t.classList.remove(_s);const e=z.find(`${bs}.${_s}`,t);for(const t of e)t.classList.remove(_s)}static jQueryInterface(t){return this.each((function(){const e=Es.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t]()}}))}}N.on(window,gs,(()=>{for(const t of z.find('[data-bs-spy="scroll"]'))Es.getOrCreateInstance(t)})),m(Es);const Ts=".bs.tab",Cs=`hide${Ts}`,Os=`hidden${Ts}`,xs=`show${Ts}`,ks=`shown${Ts}`,Ls=`click${Ts}`,Ss=`keydown${Ts}`,Ds=`load${Ts}`,$s="ArrowLeft",Is="ArrowRight",Ns="ArrowUp",Ps="ArrowDown",Ms="Home",js="End",Fs="active",Hs="fade",Ws="show",Bs=":not(.dropdown-toggle)",zs='[data-bs-toggle="tab"], [data-bs-toggle="pill"], [data-bs-toggle="list"]',Rs=`.nav-link${Bs}, .list-group-item${Bs}, [role="tab"]${Bs}, ${zs}`,qs=`.${Fs}[data-bs-toggle="tab"], .${Fs}[data-bs-toggle="pill"], .${Fs}[data-bs-toggle="list"]`;class Vs extends W{constructor(t){super(t),this._parent=this._element.closest('.list-group, .nav, [role="tablist"]'),this._parent&&(this._setInitialAttributes(this._parent,this._getChildren()),N.on(this._element,Ss,(t=>this._keydown(t))))}static get NAME(){return"tab"}show(){const t=this._element;if(this._elemIsActive(t))return;const e=this._getActiveElem(),i=e?N.trigger(e,Cs,{relatedTarget:t}):null;N.trigger(t,xs,{relatedTarget:e}).defaultPrevented||i&&i.defaultPrevented||(this._deactivate(e,t),this._activate(t,e))}_activate(t,e){t&&(t.classList.add(Fs),this._activate(z.getElementFromSelector(t)),this._queueCallback((()=>{"tab"===t.getAttribute("role")?(t.removeAttribute("tabindex"),t.setAttribute("aria-selected",!0),this._toggleDropDown(t,!0),N.trigger(t,ks,{relatedTarget:e})):t.classList.add(Ws)}),t,t.classList.contains(Hs)))}_deactivate(t,e){t&&(t.classList.remove(Fs),t.blur(),this._deactivate(z.getElementFromSelector(t)),this._queueCallback((()=>{"tab"===t.getAttribute("role")?(t.setAttribute("aria-selected",!1),t.setAttribute("tabindex","-1"),this._toggleDropDown(t,!1),N.trigger(t,Os,{relatedTarget:e})):t.classList.remove(Ws)}),t,t.classList.contains(Hs)))}_keydown(t){if(![$s,Is,Ns,Ps,Ms,js].includes(t.key))return;t.stopPropagation(),t.preventDefault();const e=this._getChildren().filter((t=>!l(t)));let i;if([Ms,js].includes(t.key))i=e[t.key===Ms?0:e.length-1];else{const n=[Is,Ps].includes(t.key);i=b(e,t.target,n,!0)}i&&(i.focus({preventScroll:!0}),Vs.getOrCreateInstance(i).show())}_getChildren(){return z.find(Rs,this._parent)}_getActiveElem(){return this._getChildren().find((t=>this._elemIsActive(t)))||null}_setInitialAttributes(t,e){this._setAttributeIfNotExists(t,"role","tablist");for(const t of e)this._setInitialAttributesOnChild(t)}_setInitialAttributesOnChild(t){t=this._getInnerElement(t);const e=this._elemIsActive(t),i=this._getOuterElement(t);t.setAttribute("aria-selected",e),i!==t&&this._setAttributeIfNotExists(i,"role","presentation"),e||t.setAttribute("tabindex","-1"),this._setAttributeIfNotExists(t,"role","tab"),this._setInitialAttributesOnTargetPanel(t)}_setInitialAttributesOnTargetPanel(t){const e=z.getElementFromSelector(t);e&&(this._setAttributeIfNotExists(e,"role","tabpanel"),t.id&&this._setAttributeIfNotExists(e,"aria-labelledby",`${t.id}`))}_toggleDropDown(t,e){const i=this._getOuterElement(t);if(!i.classList.contains("dropdown"))return;const n=(t,n)=>{const s=z.findOne(t,i);s&&s.classList.toggle(n,e)};n(".dropdown-toggle",Fs),n(".dropdown-menu",Ws),i.setAttribute("aria-expanded",e)}_setAttributeIfNotExists(t,e,i){t.hasAttribute(e)||t.setAttribute(e,i)}_elemIsActive(t){return t.classList.contains(Fs)}_getInnerElement(t){return t.matches(Rs)?t:z.findOne(Rs,t)}_getOuterElement(t){return t.closest(".nav-item, .list-group-item")||t}static jQueryInterface(t){return this.each((function(){const e=Vs.getOrCreateInstance(this);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t]()}}))}}N.on(document,Ls,zs,(function(t){["A","AREA"].includes(this.tagName)&&t.preventDefault(),l(this)||Vs.getOrCreateInstance(this).show()})),N.on(window,Ds,(()=>{for(const t of z.find(qs))Vs.getOrCreateInstance(t)})),m(Vs);const Ks=".bs.toast",Qs=`mouseover${Ks}`,Xs=`mouseout${Ks}`,Ys=`focusin${Ks}`,Us=`focusout${Ks}`,Gs=`hide${Ks}`,Js=`hidden${Ks}`,Zs=`show${Ks}`,to=`shown${Ks}`,eo="hide",io="show",no="showing",so={animation:"boolean",autohide:"boolean",delay:"number"},oo={animation:!0,autohide:!0,delay:5e3};class ro extends W{constructor(t,e){super(t,e),this._timeout=null,this._hasMouseInteraction=!1,this._hasKeyboardInteraction=!1,this._setListeners()}static get Default(){return oo}static get DefaultType(){return so}static get NAME(){return"toast"}show(){N.trigger(this._element,Zs).defaultPrevented||(this._clearTimeout(),this._config.animation&&this._element.classList.add("fade"),this._element.classList.remove(eo),d(this._element),this._element.classList.add(io,no),this._queueCallback((()=>{this._element.classList.remove(no),N.trigger(this._element,to),this._maybeScheduleHide()}),this._element,this._config.animation))}hide(){this.isShown()&&(N.trigger(this._element,Gs).defaultPrevented||(this._element.classList.add(no),this._queueCallback((()=>{this._element.classList.add(eo),this._element.classList.remove(no,io),N.trigger(this._element,Js)}),this._element,this._config.animation)))}dispose(){this._clearTimeout(),this.isShown()&&this._element.classList.remove(io),super.dispose()}isShown(){return this._element.classList.contains(io)}_maybeScheduleHide(){this._config.autohide&&(this._hasMouseInteraction||this._hasKeyboardInteraction||(this._timeout=setTimeout((()=>{this.hide()}),this._config.delay)))}_onInteraction(t,e){switch(t.type){case"mouseover":case"mouseout":this._hasMouseInteraction=e;break;case"focusin":case"focusout":this._hasKeyboardInteraction=e}if(e)return void this._clearTimeout();const i=t.relatedTarget;this._element===i||this._element.contains(i)||this._maybeScheduleHide()}_setListeners(){N.on(this._element,Qs,(t=>this._onInteraction(t,!0))),N.on(this._element,Xs,(t=>this._onInteraction(t,!1))),N.on(this._element,Ys,(t=>this._onInteraction(t,!0))),N.on(this._element,Us,(t=>this._onInteraction(t,!1)))}_clearTimeout(){clearTimeout(this._timeout),this._timeout=null}static jQueryInterface(t){return this.each((function(){const e=ro.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t](this)}}))}}return R(ro),m(ro),{Alert:Q,Button:Y,Carousel:xt,Collapse:Bt,Dropdown:qi,Modal:On,Offcanvas:qn,Popover:us,ScrollSpy:Es,Tab:Vs,Toast:ro,Tooltip:cs}})); +//# sourceMappingURL=bootstrap.bundle.min.js.map \ No newline at end of file diff --git a/deps/bootstrap-5.3.1/bootstrap.bundle.min.js.map b/deps/bootstrap-5.3.1/bootstrap.bundle.min.js.map new file mode 100644 index 00000000..3863da8b --- /dev/null +++ b/deps/bootstrap-5.3.1/bootstrap.bundle.min.js.map @@ -0,0 +1 @@ +{"version":3,"names":["elementMap","Map","Data","set","element","key","instance","has","instanceMap","get","size","console","error","Array","from","keys","remove","delete","TRANSITION_END","parseSelector","selector","window","CSS","escape","replace","match","id","triggerTransitionEnd","dispatchEvent","Event","isElement","object","jquery","nodeType","getElement","length","document","querySelector","isVisible","getClientRects","elementIsVisible","getComputedStyle","getPropertyValue","closedDetails","closest","summary","parentNode","isDisabled","Node","ELEMENT_NODE","classList","contains","disabled","hasAttribute","getAttribute","findShadowRoot","documentElement","attachShadow","getRootNode","root","ShadowRoot","noop","reflow","offsetHeight","getjQuery","jQuery","body","DOMContentLoadedCallbacks","isRTL","dir","defineJQueryPlugin","plugin","callback","$","name","NAME","JQUERY_NO_CONFLICT","fn","jQueryInterface","Constructor","noConflict","readyState","addEventListener","push","execute","possibleCallback","args","defaultValue","executeAfterTransition","transitionElement","waitForTransition","emulatedDuration","transitionDuration","transitionDelay","floatTransitionDuration","Number","parseFloat","floatTransitionDelay","split","getTransitionDurationFromElement","called","handler","target","removeEventListener","setTimeout","getNextActiveElement","list","activeElement","shouldGetNext","isCycleAllowed","listLength","index","indexOf","Math","max","min","namespaceRegex","stripNameRegex","stripUidRegex","eventRegistry","uidEvent","customEvents","mouseenter","mouseleave","nativeEvents","Set","makeEventUid","uid","getElementEvents","findHandler","events","callable","delegationSelector","Object","values","find","event","normalizeParameters","originalTypeEvent","delegationFunction","isDelegated","typeEvent","getTypeEvent","addHandler","oneOff","wrapFunction","relatedTarget","delegateTarget","call","this","handlers","previousFunction","domElements","querySelectorAll","domElement","hydrateObj","EventHandler","off","type","apply","bootstrapDelegationHandler","bootstrapHandler","removeHandler","Boolean","removeNamespacedHandlers","namespace","storeElementEvent","handlerKey","entries","includes","on","one","inNamespace","isNamespace","startsWith","elementEvent","slice","keyHandlers","trigger","jQueryEvent","bubbles","nativeDispatch","defaultPrevented","isPropagationStopped","isImmediatePropagationStopped","isDefaultPrevented","evt","cancelable","preventDefault","obj","meta","value","_unused","defineProperty","configurable","normalizeData","toString","JSON","parse","decodeURIComponent","normalizeDataKey","chr","toLowerCase","Manipulator","setDataAttribute","setAttribute","removeDataAttribute","removeAttribute","getDataAttributes","attributes","bsKeys","dataset","filter","pureKey","charAt","getDataAttribute","Config","Default","DefaultType","Error","_getConfig","config","_mergeConfigObj","_configAfterMerge","_typeCheckConfig","jsonConfig","constructor","configTypes","property","expectedTypes","valueType","prototype","RegExp","test","TypeError","toUpperCase","BaseComponent","super","_element","_config","DATA_KEY","dispose","EVENT_KEY","propertyName","getOwnPropertyNames","_queueCallback","isAnimated","getInstance","getOrCreateInstance","VERSION","eventName","getSelector","hrefAttribute","trim","SelectorEngine","concat","Element","findOne","children","child","matches","parents","ancestor","prev","previous","previousElementSibling","next","nextElementSibling","focusableChildren","focusables","map","join","el","getSelectorFromElement","getElementFromSelector","getMultipleElementsFromSelector","enableDismissTrigger","component","method","clickEvent","tagName","EVENT_CLOSE","EVENT_CLOSED","Alert","close","_destroyElement","each","data","undefined","SELECTOR_DATA_TOGGLE","Button","toggle","button","EVENT_TOUCHSTART","EVENT_TOUCHMOVE","EVENT_TOUCHEND","EVENT_POINTERDOWN","EVENT_POINTERUP","endCallback","leftCallback","rightCallback","Swipe","isSupported","_deltaX","_supportPointerEvents","PointerEvent","_initEvents","_start","_eventIsPointerPenTouch","clientX","touches","_end","_handleSwipe","_move","absDeltaX","abs","direction","add","pointerType","navigator","maxTouchPoints","DATA_API_KEY","ORDER_NEXT","ORDER_PREV","DIRECTION_LEFT","DIRECTION_RIGHT","EVENT_SLIDE","EVENT_SLID","EVENT_KEYDOWN","EVENT_MOUSEENTER","EVENT_MOUSELEAVE","EVENT_DRAG_START","EVENT_LOAD_DATA_API","EVENT_CLICK_DATA_API","CLASS_NAME_CAROUSEL","CLASS_NAME_ACTIVE","SELECTOR_ACTIVE","SELECTOR_ITEM","SELECTOR_ACTIVE_ITEM","KEY_TO_DIRECTION","ArrowLeft","ArrowRight","interval","keyboard","pause","ride","touch","wrap","Carousel","_interval","_activeElement","_isSliding","touchTimeout","_swipeHelper","_indicatorsElement","_addEventListeners","cycle","_slide","nextWhenVisible","hidden","_clearInterval","_updateInterval","setInterval","_maybeEnableCycle","to","items","_getItems","activeIndex","_getItemIndex","_getActive","order","defaultInterval","_keydown","_addTouchEventListeners","img","swipeConfig","_directionToOrder","endCallBack","clearTimeout","_setActiveIndicatorElement","activeIndicator","newActiveIndicator","elementInterval","parseInt","isNext","nextElement","nextElementIndex","triggerEvent","_orderToDirection","isCycling","directionalClassName","orderClassName","completeCallBack","_isAnimated","clearInterval","carousel","slideIndex","carousels","EVENT_SHOW","EVENT_SHOWN","EVENT_HIDE","EVENT_HIDDEN","CLASS_NAME_SHOW","CLASS_NAME_COLLAPSE","CLASS_NAME_COLLAPSING","CLASS_NAME_DEEPER_CHILDREN","parent","Collapse","_isTransitioning","_triggerArray","toggleList","elem","filterElement","foundElement","_initializeChildren","_addAriaAndCollapsedClass","_isShown","hide","show","activeChildren","_getFirstLevelChildren","activeInstance","dimension","_getDimension","style","scrollSize","complete","getBoundingClientRect","selected","triggerArray","isOpen","top","bottom","right","left","auto","basePlacements","start","end","clippingParents","viewport","popper","reference","variationPlacements","reduce","acc","placement","placements","beforeRead","read","afterRead","beforeMain","main","afterMain","beforeWrite","write","afterWrite","modifierPhases","getNodeName","nodeName","getWindow","node","ownerDocument","defaultView","isHTMLElement","HTMLElement","isShadowRoot","applyStyles$1","enabled","phase","_ref","state","elements","forEach","styles","assign","effect","_ref2","initialStyles","position","options","strategy","margin","arrow","hasOwnProperty","attribute","requires","getBasePlacement","round","getUAString","uaData","userAgentData","brands","isArray","item","brand","version","userAgent","isLayoutViewport","includeScale","isFixedStrategy","clientRect","scaleX","scaleY","offsetWidth","width","height","visualViewport","addVisualOffsets","x","offsetLeft","y","offsetTop","getLayoutRect","rootNode","isSameNode","host","isTableElement","getDocumentElement","getParentNode","assignedSlot","getTrueOffsetParent","offsetParent","getOffsetParent","isFirefox","currentNode","css","transform","perspective","contain","willChange","getContainingBlock","getMainAxisFromPlacement","within","mathMax","mathMin","mergePaddingObject","paddingObject","expandToHashMap","hashMap","arrow$1","_state$modifiersData$","arrowElement","popperOffsets","modifiersData","basePlacement","axis","len","padding","rects","toPaddingObject","arrowRect","minProp","maxProp","endDiff","startDiff","arrowOffsetParent","clientSize","clientHeight","clientWidth","centerToReference","center","offset","axisProp","centerOffset","_options$element","requiresIfExists","getVariation","unsetSides","mapToStyles","_Object$assign2","popperRect","variation","offsets","gpuAcceleration","adaptive","roundOffsets","isFixed","_offsets$x","_offsets$y","_ref3","hasX","hasY","sideX","sideY","win","heightProp","widthProp","_Object$assign","commonStyles","_ref4","dpr","devicePixelRatio","roundOffsetsByDPR","computeStyles$1","_ref5","_options$gpuAccelerat","_options$adaptive","_options$roundOffsets","passive","eventListeners","_options$scroll","scroll","_options$resize","resize","scrollParents","scrollParent","update","hash","getOppositePlacement","matched","getOppositeVariationPlacement","getWindowScroll","scrollLeft","pageXOffset","scrollTop","pageYOffset","getWindowScrollBarX","isScrollParent","_getComputedStyle","overflow","overflowX","overflowY","getScrollParent","listScrollParents","_element$ownerDocumen","isBody","updatedList","rectToClientRect","rect","getClientRectFromMixedType","clippingParent","html","layoutViewport","getViewportRect","clientTop","clientLeft","getInnerBoundingClientRect","winScroll","scrollWidth","scrollHeight","getDocumentRect","computeOffsets","commonX","commonY","mainAxis","detectOverflow","_options","_options$placement","_options$strategy","_options$boundary","boundary","_options$rootBoundary","rootBoundary","_options$elementConte","elementContext","_options$altBoundary","altBoundary","_options$padding","altContext","clippingClientRect","mainClippingParents","clipperElement","getClippingParents","firstClippingParent","clippingRect","accRect","getClippingRect","contextElement","referenceClientRect","popperClientRect","elementClientRect","overflowOffsets","offsetData","multiply","computeAutoPlacement","flipVariations","_options$allowedAutoP","allowedAutoPlacements","allPlacements","allowedPlacements","overflows","sort","a","b","flip$1","_skip","_options$mainAxis","checkMainAxis","_options$altAxis","altAxis","checkAltAxis","specifiedFallbackPlacements","fallbackPlacements","_options$flipVariatio","preferredPlacement","oppositePlacement","getExpandedFallbackPlacements","referenceRect","checksMap","makeFallbackChecks","firstFittingPlacement","i","_basePlacement","isStartVariation","isVertical","mainVariationSide","altVariationSide","checks","every","check","_loop","_i","fittingPlacement","reset","getSideOffsets","preventedOffsets","isAnySideFullyClipped","some","side","hide$1","preventOverflow","referenceOverflow","popperAltOverflow","referenceClippingOffsets","popperEscapeOffsets","isReferenceHidden","hasPopperEscaped","offset$1","_options$offset","invertDistance","skidding","distance","distanceAndSkiddingToXY","_data$state$placement","popperOffsets$1","preventOverflow$1","_options$tether","tether","_options$tetherOffset","tetherOffset","isBasePlacement","tetherOffsetValue","normalizedTetherOffsetValue","offsetModifierState","_offsetModifierState$","mainSide","altSide","additive","minLen","maxLen","arrowPaddingObject","arrowPaddingMin","arrowPaddingMax","arrowLen","minOffset","maxOffset","clientOffset","offsetModifierValue","tetherMax","preventedOffset","_offsetModifierState$2","_mainSide","_altSide","_offset","_len","_min","_max","isOriginSide","_offsetModifierValue","_tetherMin","_tetherMax","_preventedOffset","v","withinMaxClamp","getCompositeRect","elementOrVirtualElement","isOffsetParentAnElement","offsetParentIsScaled","isElementScaled","modifiers","visited","result","modifier","dep","depModifier","DEFAULT_OPTIONS","areValidElements","arguments","_key","popperGenerator","generatorOptions","_generatorOptions","_generatorOptions$def","defaultModifiers","_generatorOptions$def2","defaultOptions","pending","orderedModifiers","effectCleanupFns","isDestroyed","setOptions","setOptionsAction","cleanupModifierEffects","merged","orderModifiers","current","existing","m","_ref$options","cleanupFn","forceUpdate","_state$elements","_state$orderedModifie","_state$orderedModifie2","Promise","resolve","then","destroy","onFirstUpdate","createPopper","computeStyles","applyStyles","flip","ARROW_UP_KEY","ARROW_DOWN_KEY","EVENT_KEYDOWN_DATA_API","EVENT_KEYUP_DATA_API","SELECTOR_DATA_TOGGLE_SHOWN","SELECTOR_MENU","PLACEMENT_TOP","PLACEMENT_TOPEND","PLACEMENT_BOTTOM","PLACEMENT_BOTTOMEND","PLACEMENT_RIGHT","PLACEMENT_LEFT","autoClose","display","popperConfig","Dropdown","_popper","_parent","_menu","_inNavbar","_detectNavbar","_createPopper","focus","_completeHide","Popper","referenceElement","_getPopperConfig","_getPlacement","parentDropdown","isEnd","_getOffset","popperData","defaultBsPopperConfig","_selectMenuItem","clearMenus","openToggles","context","composedPath","isMenuTarget","dataApiKeydownHandler","isInput","isEscapeEvent","isUpOrDownEvent","getToggleButton","stopPropagation","EVENT_MOUSEDOWN","className","clickCallback","rootElement","Backdrop","_isAppended","_append","_getElement","_emulateAnimation","backdrop","createElement","append","EVENT_FOCUSIN","EVENT_KEYDOWN_TAB","TAB_NAV_BACKWARD","autofocus","trapElement","FocusTrap","_isActive","_lastTabNavDirection","activate","_handleFocusin","_handleKeydown","deactivate","shiftKey","SELECTOR_FIXED_CONTENT","SELECTOR_STICKY_CONTENT","PROPERTY_PADDING","PROPERTY_MARGIN","ScrollBarHelper","getWidth","documentWidth","innerWidth","_disableOverFlow","_setElementAttributes","calculatedValue","_resetElementAttributes","isOverflowing","_saveInitialAttribute","styleProperty","scrollbarWidth","_applyManipulationCallback","setProperty","actualValue","removeProperty","callBack","sel","EVENT_HIDE_PREVENTED","EVENT_RESIZE","EVENT_CLICK_DISMISS","EVENT_MOUSEDOWN_DISMISS","EVENT_KEYDOWN_DISMISS","CLASS_NAME_OPEN","CLASS_NAME_STATIC","Modal","_dialog","_backdrop","_initializeBackDrop","_focustrap","_initializeFocusTrap","_scrollBar","_adjustDialog","_showElement","_hideModal","handleUpdate","modalBody","transitionComplete","_triggerBackdropTransition","event2","_resetAdjustments","isModalOverflowing","initialOverflowY","isBodyOverflowing","paddingLeft","paddingRight","showEvent","alreadyOpen","CLASS_NAME_SHOWING","CLASS_NAME_HIDING","OPEN_SELECTOR","Offcanvas","blur","completeCallback","DefaultAllowlist","area","br","col","code","div","em","hr","h1","h2","h3","h4","h5","h6","li","ol","p","pre","s","small","span","sub","sup","strong","u","ul","uriAttributes","SAFE_URL_PATTERN","allowedAttribute","allowedAttributeList","attributeName","nodeValue","attributeRegex","regex","allowList","content","extraClass","sanitize","sanitizeFn","template","DefaultContentType","entry","TemplateFactory","getContent","_resolvePossibleFunction","hasContent","changeContent","_checkContent","toHtml","templateWrapper","innerHTML","_maybeSanitize","text","_setContent","arg","templateElement","_putElementInTemplate","textContent","unsafeHtml","sanitizeFunction","createdDocument","DOMParser","parseFromString","elementName","attributeList","allowedAttributes","sanitizeHtml","DISALLOWED_ATTRIBUTES","CLASS_NAME_FADE","SELECTOR_MODAL","EVENT_MODAL_HIDE","TRIGGER_HOVER","TRIGGER_FOCUS","AttachmentMap","AUTO","TOP","RIGHT","BOTTOM","LEFT","animation","container","customClass","delay","title","Tooltip","_isEnabled","_timeout","_isHovered","_activeTrigger","_templateFactory","_newContent","tip","_setListeners","_fixTitle","enable","disable","toggleEnabled","click","_leave","_enter","_hideModalHandler","_disposePopper","_isWithContent","isInTheDom","_getTipElement","_isWithActiveTrigger","_getTitle","_createTipElement","_getContentForTemplate","_getTemplateFactory","tipId","prefix","floor","random","getElementById","getUID","setContent","_initializeOnDelegatedTarget","_getDelegateConfig","attachment","triggers","eventIn","eventOut","_setTimeout","timeout","dataAttributes","dataAttribute","Popover","_getContent","EVENT_ACTIVATE","EVENT_CLICK","SELECTOR_TARGET_LINKS","SELECTOR_NAV_LINKS","SELECTOR_LINK_ITEMS","rootMargin","smoothScroll","threshold","ScrollSpy","_targetLinks","_observableSections","_rootElement","_activeTarget","_observer","_previousScrollData","visibleEntryTop","parentScrollTop","refresh","_initializeTargetsAndObservables","_maybeEnableSmoothScroll","disconnect","_getNewObserver","section","observe","observableSection","scrollTo","behavior","IntersectionObserver","_observerCallback","targetElement","_process","userScrollsDown","isIntersecting","_clearActiveClass","entryIsLowerThanPrevious","targetLinks","anchor","decodeURI","_activateParents","listGroup","activeNodes","spy","ARROW_LEFT_KEY","ARROW_RIGHT_KEY","HOME_KEY","END_KEY","NOT_SELECTOR_DROPDOWN_TOGGLE","SELECTOR_INNER_ELEM","SELECTOR_DATA_TOGGLE_ACTIVE","Tab","_setInitialAttributes","_getChildren","innerElem","_elemIsActive","active","_getActiveElem","hideEvent","_deactivate","_activate","relatedElem","_toggleDropDown","nextActiveElement","preventScroll","_setAttributeIfNotExists","_setInitialAttributesOnChild","_getInnerElement","isActive","outerElem","_getOuterElement","_setInitialAttributesOnTargetPanel","open","EVENT_MOUSEOVER","EVENT_MOUSEOUT","EVENT_FOCUSOUT","CLASS_NAME_HIDE","autohide","Toast","_hasMouseInteraction","_hasKeyboardInteraction","_clearTimeout","_maybeScheduleHide","isShown","_onInteraction","isInteracting"],"sources":["../../js/src/dom/data.js","../../js/src/util/index.js","../../js/src/dom/event-handler.js","../../js/src/dom/manipulator.js","../../js/src/util/config.js","../../js/src/base-component.js","../../js/src/dom/selector-engine.js","../../js/src/util/component-functions.js","../../js/src/alert.js","../../js/src/button.js","../../js/src/util/swipe.js","../../js/src/carousel.js","../../js/src/collapse.js","../../node_modules/@popperjs/core/lib/enums.js","../../node_modules/@popperjs/core/lib/dom-utils/getNodeName.js","../../node_modules/@popperjs/core/lib/dom-utils/getWindow.js","../../node_modules/@popperjs/core/lib/dom-utils/instanceOf.js","../../node_modules/@popperjs/core/lib/modifiers/applyStyles.js","../../node_modules/@popperjs/core/lib/utils/getBasePlacement.js","../../node_modules/@popperjs/core/lib/utils/math.js","../../node_modules/@popperjs/core/lib/utils/userAgent.js","../../node_modules/@popperjs/core/lib/dom-utils/isLayoutViewport.js","../../node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js","../../node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js","../../node_modules/@popperjs/core/lib/dom-utils/contains.js","../../node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js","../../node_modules/@popperjs/core/lib/dom-utils/isTableElement.js","../../node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js","../../node_modules/@popperjs/core/lib/dom-utils/getParentNode.js","../../node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js","../../node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js","../../node_modules/@popperjs/core/lib/utils/within.js","../../node_modules/@popperjs/core/lib/utils/mergePaddingObject.js","../../node_modules/@popperjs/core/lib/utils/getFreshSideObject.js","../../node_modules/@popperjs/core/lib/utils/expandToHashMap.js","../../node_modules/@popperjs/core/lib/modifiers/arrow.js","../../node_modules/@popperjs/core/lib/utils/getVariation.js","../../node_modules/@popperjs/core/lib/modifiers/computeStyles.js","../../node_modules/@popperjs/core/lib/modifiers/eventListeners.js","../../node_modules/@popperjs/core/lib/utils/getOppositePlacement.js","../../node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js","../../node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js","../../node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js","../../node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js","../../node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js","../../node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js","../../node_modules/@popperjs/core/lib/utils/rectToClientRect.js","../../node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js","../../node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js","../../node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js","../../node_modules/@popperjs/core/lib/utils/computeOffsets.js","../../node_modules/@popperjs/core/lib/utils/detectOverflow.js","../../node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js","../../node_modules/@popperjs/core/lib/modifiers/flip.js","../../node_modules/@popperjs/core/lib/modifiers/hide.js","../../node_modules/@popperjs/core/lib/modifiers/offset.js","../../node_modules/@popperjs/core/lib/modifiers/popperOffsets.js","../../node_modules/@popperjs/core/lib/modifiers/preventOverflow.js","../../node_modules/@popperjs/core/lib/utils/getAltAxis.js","../../node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js","../../node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js","../../node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js","../../node_modules/@popperjs/core/lib/utils/orderModifiers.js","../../node_modules/@popperjs/core/lib/createPopper.js","../../node_modules/@popperjs/core/lib/utils/debounce.js","../../node_modules/@popperjs/core/lib/utils/mergeByName.js","../../node_modules/@popperjs/core/lib/popper-lite.js","../../node_modules/@popperjs/core/lib/popper.js","../../js/src/dropdown.js","../../js/src/util/backdrop.js","../../js/src/util/focustrap.js","../../js/src/util/scrollbar.js","../../js/src/modal.js","../../js/src/offcanvas.js","../../js/src/util/sanitizer.js","../../js/src/util/template-factory.js","../../js/src/tooltip.js","../../js/src/popover.js","../../js/src/scrollspy.js","../../js/src/tab.js","../../js/src/toast.js","../../js/index.umd.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap dom/data.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * Constants\n */\n\nconst elementMap = new Map()\n\nexport default {\n set(element, key, instance) {\n if (!elementMap.has(element)) {\n elementMap.set(element, new Map())\n }\n\n const instanceMap = elementMap.get(element)\n\n // make it clear we only want one instance per element\n // can be removed later when multiple key/instances are fine to be used\n if (!instanceMap.has(key) && instanceMap.size !== 0) {\n // eslint-disable-next-line no-console\n console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`)\n return\n }\n\n instanceMap.set(key, instance)\n },\n\n get(element, key) {\n if (elementMap.has(element)) {\n return elementMap.get(element).get(key) || null\n }\n\n return null\n },\n\n remove(element, key) {\n if (!elementMap.has(element)) {\n return\n }\n\n const instanceMap = elementMap.get(element)\n\n instanceMap.delete(key)\n\n // free up element references if there are no instances left for an element\n if (instanceMap.size === 0) {\n elementMap.delete(element)\n }\n }\n}\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap util/index.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst MAX_UID = 1_000_000\nconst MILLISECONDS_MULTIPLIER = 1000\nconst TRANSITION_END = 'transitionend'\n\n/**\n * Properly escape IDs selectors to handle weird IDs\n * @param {string} selector\n * @returns {string}\n */\nconst parseSelector = selector => {\n if (selector && window.CSS && window.CSS.escape) {\n // document.querySelector needs escaping to handle IDs (html5+) containing for instance /\n selector = selector.replace(/#([^\\s\"#']+)/g, (match, id) => `#${CSS.escape(id)}`)\n }\n\n return selector\n}\n\n// Shout-out Angus Croll (https://goo.gl/pxwQGp)\nconst toType = object => {\n if (object === null || object === undefined) {\n return `${object}`\n }\n\n return Object.prototype.toString.call(object).match(/\\s([a-z]+)/i)[1].toLowerCase()\n}\n\n/**\n * Public Util API\n */\n\nconst getUID = prefix => {\n do {\n prefix += Math.floor(Math.random() * MAX_UID)\n } while (document.getElementById(prefix))\n\n return prefix\n}\n\nconst getTransitionDurationFromElement = element => {\n if (!element) {\n return 0\n }\n\n // Get transition-duration of the element\n let { transitionDuration, transitionDelay } = window.getComputedStyle(element)\n\n const floatTransitionDuration = Number.parseFloat(transitionDuration)\n const floatTransitionDelay = Number.parseFloat(transitionDelay)\n\n // Return 0 if element or transition duration is not found\n if (!floatTransitionDuration && !floatTransitionDelay) {\n return 0\n }\n\n // If multiple durations are defined, take the first\n transitionDuration = transitionDuration.split(',')[0]\n transitionDelay = transitionDelay.split(',')[0]\n\n return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER\n}\n\nconst triggerTransitionEnd = element => {\n element.dispatchEvent(new Event(TRANSITION_END))\n}\n\nconst isElement = object => {\n if (!object || typeof object !== 'object') {\n return false\n }\n\n if (typeof object.jquery !== 'undefined') {\n object = object[0]\n }\n\n return typeof object.nodeType !== 'undefined'\n}\n\nconst getElement = object => {\n // it's a jQuery object or a node element\n if (isElement(object)) {\n return object.jquery ? object[0] : object\n }\n\n if (typeof object === 'string' && object.length > 0) {\n return document.querySelector(parseSelector(object))\n }\n\n return null\n}\n\nconst isVisible = element => {\n if (!isElement(element) || element.getClientRects().length === 0) {\n return false\n }\n\n const elementIsVisible = getComputedStyle(element).getPropertyValue('visibility') === 'visible'\n // Handle `details` element as its content may falsie appear visible when it is closed\n const closedDetails = element.closest('details:not([open])')\n\n if (!closedDetails) {\n return elementIsVisible\n }\n\n if (closedDetails !== element) {\n const summary = element.closest('summary')\n if (summary && summary.parentNode !== closedDetails) {\n return false\n }\n\n if (summary === null) {\n return false\n }\n }\n\n return elementIsVisible\n}\n\nconst isDisabled = element => {\n if (!element || element.nodeType !== Node.ELEMENT_NODE) {\n return true\n }\n\n if (element.classList.contains('disabled')) {\n return true\n }\n\n if (typeof element.disabled !== 'undefined') {\n return element.disabled\n }\n\n return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false'\n}\n\nconst findShadowRoot = element => {\n if (!document.documentElement.attachShadow) {\n return null\n }\n\n // Can find the shadow root otherwise it'll return the document\n if (typeof element.getRootNode === 'function') {\n const root = element.getRootNode()\n return root instanceof ShadowRoot ? root : null\n }\n\n if (element instanceof ShadowRoot) {\n return element\n }\n\n // when we don't find a shadow root\n if (!element.parentNode) {\n return null\n }\n\n return findShadowRoot(element.parentNode)\n}\n\nconst noop = () => {}\n\n/**\n * Trick to restart an element's animation\n *\n * @param {HTMLElement} element\n * @return void\n *\n * @see https://www.charistheo.io/blog/2021/02/restart-a-css-animation-with-javascript/#restarting-a-css-animation\n */\nconst reflow = element => {\n element.offsetHeight // eslint-disable-line no-unused-expressions\n}\n\nconst getjQuery = () => {\n if (window.jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {\n return window.jQuery\n }\n\n return null\n}\n\nconst DOMContentLoadedCallbacks = []\n\nconst onDOMContentLoaded = callback => {\n if (document.readyState === 'loading') {\n // add listener on the first call when the document is in loading state\n if (!DOMContentLoadedCallbacks.length) {\n document.addEventListener('DOMContentLoaded', () => {\n for (const callback of DOMContentLoadedCallbacks) {\n callback()\n }\n })\n }\n\n DOMContentLoadedCallbacks.push(callback)\n } else {\n callback()\n }\n}\n\nconst isRTL = () => document.documentElement.dir === 'rtl'\n\nconst defineJQueryPlugin = plugin => {\n onDOMContentLoaded(() => {\n const $ = getjQuery()\n /* istanbul ignore if */\n if ($) {\n const name = plugin.NAME\n const JQUERY_NO_CONFLICT = $.fn[name]\n $.fn[name] = plugin.jQueryInterface\n $.fn[name].Constructor = plugin\n $.fn[name].noConflict = () => {\n $.fn[name] = JQUERY_NO_CONFLICT\n return plugin.jQueryInterface\n }\n }\n })\n}\n\nconst execute = (possibleCallback, args = [], defaultValue = possibleCallback) => {\n return typeof possibleCallback === 'function' ? possibleCallback(...args) : defaultValue\n}\n\nconst executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {\n if (!waitForTransition) {\n execute(callback)\n return\n }\n\n const durationPadding = 5\n const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding\n\n let called = false\n\n const handler = ({ target }) => {\n if (target !== transitionElement) {\n return\n }\n\n called = true\n transitionElement.removeEventListener(TRANSITION_END, handler)\n execute(callback)\n }\n\n transitionElement.addEventListener(TRANSITION_END, handler)\n setTimeout(() => {\n if (!called) {\n triggerTransitionEnd(transitionElement)\n }\n }, emulatedDuration)\n}\n\n/**\n * Return the previous/next element of a list.\n *\n * @param {array} list The list of elements\n * @param activeElement The active element\n * @param shouldGetNext Choose to get next or previous element\n * @param isCycleAllowed\n * @return {Element|elem} The proper element\n */\nconst getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => {\n const listLength = list.length\n let index = list.indexOf(activeElement)\n\n // if the element does not exist in the list return an element\n // depending on the direction and if cycle is allowed\n if (index === -1) {\n return !shouldGetNext && isCycleAllowed ? list[listLength - 1] : list[0]\n }\n\n index += shouldGetNext ? 1 : -1\n\n if (isCycleAllowed) {\n index = (index + listLength) % listLength\n }\n\n return list[Math.max(0, Math.min(index, listLength - 1))]\n}\n\nexport {\n defineJQueryPlugin,\n execute,\n executeAfterTransition,\n findShadowRoot,\n getElement,\n getjQuery,\n getNextActiveElement,\n getTransitionDurationFromElement,\n getUID,\n isDisabled,\n isElement,\n isRTL,\n isVisible,\n noop,\n onDOMContentLoaded,\n parseSelector,\n reflow,\n triggerTransitionEnd,\n toType\n}\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap dom/event-handler.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { getjQuery } from '../util/index.js'\n\n/**\n * Constants\n */\n\nconst namespaceRegex = /[^.]*(?=\\..*)\\.|.*/\nconst stripNameRegex = /\\..*/\nconst stripUidRegex = /::\\d+$/\nconst eventRegistry = {} // Events storage\nlet uidEvent = 1\nconst customEvents = {\n mouseenter: 'mouseover',\n mouseleave: 'mouseout'\n}\n\nconst nativeEvents = new Set([\n 'click',\n 'dblclick',\n 'mouseup',\n 'mousedown',\n 'contextmenu',\n 'mousewheel',\n 'DOMMouseScroll',\n 'mouseover',\n 'mouseout',\n 'mousemove',\n 'selectstart',\n 'selectend',\n 'keydown',\n 'keypress',\n 'keyup',\n 'orientationchange',\n 'touchstart',\n 'touchmove',\n 'touchend',\n 'touchcancel',\n 'pointerdown',\n 'pointermove',\n 'pointerup',\n 'pointerleave',\n 'pointercancel',\n 'gesturestart',\n 'gesturechange',\n 'gestureend',\n 'focus',\n 'blur',\n 'change',\n 'reset',\n 'select',\n 'submit',\n 'focusin',\n 'focusout',\n 'load',\n 'unload',\n 'beforeunload',\n 'resize',\n 'move',\n 'DOMContentLoaded',\n 'readystatechange',\n 'error',\n 'abort',\n 'scroll'\n])\n\n/**\n * Private methods\n */\n\nfunction makeEventUid(element, uid) {\n return (uid && `${uid}::${uidEvent++}`) || element.uidEvent || uidEvent++\n}\n\nfunction getElementEvents(element) {\n const uid = makeEventUid(element)\n\n element.uidEvent = uid\n eventRegistry[uid] = eventRegistry[uid] || {}\n\n return eventRegistry[uid]\n}\n\nfunction bootstrapHandler(element, fn) {\n return function handler(event) {\n hydrateObj(event, { delegateTarget: element })\n\n if (handler.oneOff) {\n EventHandler.off(element, event.type, fn)\n }\n\n return fn.apply(element, [event])\n }\n}\n\nfunction bootstrapDelegationHandler(element, selector, fn) {\n return function handler(event) {\n const domElements = element.querySelectorAll(selector)\n\n for (let { target } = event; target && target !== this; target = target.parentNode) {\n for (const domElement of domElements) {\n if (domElement !== target) {\n continue\n }\n\n hydrateObj(event, { delegateTarget: target })\n\n if (handler.oneOff) {\n EventHandler.off(element, event.type, selector, fn)\n }\n\n return fn.apply(target, [event])\n }\n }\n }\n}\n\nfunction findHandler(events, callable, delegationSelector = null) {\n return Object.values(events)\n .find(event => event.callable === callable && event.delegationSelector === delegationSelector)\n}\n\nfunction normalizeParameters(originalTypeEvent, handler, delegationFunction) {\n const isDelegated = typeof handler === 'string'\n // TODO: tooltip passes `false` instead of selector, so we need to check\n const callable = isDelegated ? delegationFunction : (handler || delegationFunction)\n let typeEvent = getTypeEvent(originalTypeEvent)\n\n if (!nativeEvents.has(typeEvent)) {\n typeEvent = originalTypeEvent\n }\n\n return [isDelegated, callable, typeEvent]\n}\n\nfunction addHandler(element, originalTypeEvent, handler, delegationFunction, oneOff) {\n if (typeof originalTypeEvent !== 'string' || !element) {\n return\n }\n\n let [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction)\n\n // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position\n // this prevents the handler from being dispatched the same way as mouseover or mouseout does\n if (originalTypeEvent in customEvents) {\n const wrapFunction = fn => {\n return function (event) {\n if (!event.relatedTarget || (event.relatedTarget !== event.delegateTarget && !event.delegateTarget.contains(event.relatedTarget))) {\n return fn.call(this, event)\n }\n }\n }\n\n callable = wrapFunction(callable)\n }\n\n const events = getElementEvents(element)\n const handlers = events[typeEvent] || (events[typeEvent] = {})\n const previousFunction = findHandler(handlers, callable, isDelegated ? handler : null)\n\n if (previousFunction) {\n previousFunction.oneOff = previousFunction.oneOff && oneOff\n\n return\n }\n\n const uid = makeEventUid(callable, originalTypeEvent.replace(namespaceRegex, ''))\n const fn = isDelegated ?\n bootstrapDelegationHandler(element, handler, callable) :\n bootstrapHandler(element, callable)\n\n fn.delegationSelector = isDelegated ? handler : null\n fn.callable = callable\n fn.oneOff = oneOff\n fn.uidEvent = uid\n handlers[uid] = fn\n\n element.addEventListener(typeEvent, fn, isDelegated)\n}\n\nfunction removeHandler(element, events, typeEvent, handler, delegationSelector) {\n const fn = findHandler(events[typeEvent], handler, delegationSelector)\n\n if (!fn) {\n return\n }\n\n element.removeEventListener(typeEvent, fn, Boolean(delegationSelector))\n delete events[typeEvent][fn.uidEvent]\n}\n\nfunction removeNamespacedHandlers(element, events, typeEvent, namespace) {\n const storeElementEvent = events[typeEvent] || {}\n\n for (const [handlerKey, event] of Object.entries(storeElementEvent)) {\n if (handlerKey.includes(namespace)) {\n removeHandler(element, events, typeEvent, event.callable, event.delegationSelector)\n }\n }\n}\n\nfunction getTypeEvent(event) {\n // allow to get the native events from namespaced events ('click.bs.button' --> 'click')\n event = event.replace(stripNameRegex, '')\n return customEvents[event] || event\n}\n\nconst EventHandler = {\n on(element, event, handler, delegationFunction) {\n addHandler(element, event, handler, delegationFunction, false)\n },\n\n one(element, event, handler, delegationFunction) {\n addHandler(element, event, handler, delegationFunction, true)\n },\n\n off(element, originalTypeEvent, handler, delegationFunction) {\n if (typeof originalTypeEvent !== 'string' || !element) {\n return\n }\n\n const [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction)\n const inNamespace = typeEvent !== originalTypeEvent\n const events = getElementEvents(element)\n const storeElementEvent = events[typeEvent] || {}\n const isNamespace = originalTypeEvent.startsWith('.')\n\n if (typeof callable !== 'undefined') {\n // Simplest case: handler is passed, remove that listener ONLY.\n if (!Object.keys(storeElementEvent).length) {\n return\n }\n\n removeHandler(element, events, typeEvent, callable, isDelegated ? handler : null)\n return\n }\n\n if (isNamespace) {\n for (const elementEvent of Object.keys(events)) {\n removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1))\n }\n }\n\n for (const [keyHandlers, event] of Object.entries(storeElementEvent)) {\n const handlerKey = keyHandlers.replace(stripUidRegex, '')\n\n if (!inNamespace || originalTypeEvent.includes(handlerKey)) {\n removeHandler(element, events, typeEvent, event.callable, event.delegationSelector)\n }\n }\n },\n\n trigger(element, event, args) {\n if (typeof event !== 'string' || !element) {\n return null\n }\n\n const $ = getjQuery()\n const typeEvent = getTypeEvent(event)\n const inNamespace = event !== typeEvent\n\n let jQueryEvent = null\n let bubbles = true\n let nativeDispatch = true\n let defaultPrevented = false\n\n if (inNamespace && $) {\n jQueryEvent = $.Event(event, args)\n\n $(element).trigger(jQueryEvent)\n bubbles = !jQueryEvent.isPropagationStopped()\n nativeDispatch = !jQueryEvent.isImmediatePropagationStopped()\n defaultPrevented = jQueryEvent.isDefaultPrevented()\n }\n\n const evt = hydrateObj(new Event(event, { bubbles, cancelable: true }), args)\n\n if (defaultPrevented) {\n evt.preventDefault()\n }\n\n if (nativeDispatch) {\n element.dispatchEvent(evt)\n }\n\n if (evt.defaultPrevented && jQueryEvent) {\n jQueryEvent.preventDefault()\n }\n\n return evt\n }\n}\n\nfunction hydrateObj(obj, meta = {}) {\n for (const [key, value] of Object.entries(meta)) {\n try {\n obj[key] = value\n } catch {\n Object.defineProperty(obj, key, {\n configurable: true,\n get() {\n return value\n }\n })\n }\n }\n\n return obj\n}\n\nexport default EventHandler\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap dom/manipulator.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nfunction normalizeData(value) {\n if (value === 'true') {\n return true\n }\n\n if (value === 'false') {\n return false\n }\n\n if (value === Number(value).toString()) {\n return Number(value)\n }\n\n if (value === '' || value === 'null') {\n return null\n }\n\n if (typeof value !== 'string') {\n return value\n }\n\n try {\n return JSON.parse(decodeURIComponent(value))\n } catch {\n return value\n }\n}\n\nfunction normalizeDataKey(key) {\n return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`)\n}\n\nconst Manipulator = {\n setDataAttribute(element, key, value) {\n element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value)\n },\n\n removeDataAttribute(element, key) {\n element.removeAttribute(`data-bs-${normalizeDataKey(key)}`)\n },\n\n getDataAttributes(element) {\n if (!element) {\n return {}\n }\n\n const attributes = {}\n const bsKeys = Object.keys(element.dataset).filter(key => key.startsWith('bs') && !key.startsWith('bsConfig'))\n\n for (const key of bsKeys) {\n let pureKey = key.replace(/^bs/, '')\n pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length)\n attributes[pureKey] = normalizeData(element.dataset[key])\n }\n\n return attributes\n },\n\n getDataAttribute(element, key) {\n return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`))\n }\n}\n\nexport default Manipulator\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap util/config.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport Manipulator from '../dom/manipulator.js'\nimport { isElement, toType } from './index.js'\n\n/**\n * Class definition\n */\n\nclass Config {\n // Getters\n static get Default() {\n return {}\n }\n\n static get DefaultType() {\n return {}\n }\n\n static get NAME() {\n throw new Error('You have to implement the static method \"NAME\", for each component!')\n }\n\n _getConfig(config) {\n config = this._mergeConfigObj(config)\n config = this._configAfterMerge(config)\n this._typeCheckConfig(config)\n return config\n }\n\n _configAfterMerge(config) {\n return config\n }\n\n _mergeConfigObj(config, element) {\n const jsonConfig = isElement(element) ? Manipulator.getDataAttribute(element, 'config') : {} // try to parse\n\n return {\n ...this.constructor.Default,\n ...(typeof jsonConfig === 'object' ? jsonConfig : {}),\n ...(isElement(element) ? Manipulator.getDataAttributes(element) : {}),\n ...(typeof config === 'object' ? config : {})\n }\n }\n\n _typeCheckConfig(config, configTypes = this.constructor.DefaultType) {\n for (const [property, expectedTypes] of Object.entries(configTypes)) {\n const value = config[property]\n const valueType = isElement(value) ? 'element' : toType(value)\n\n if (!new RegExp(expectedTypes).test(valueType)) {\n throw new TypeError(\n `${this.constructor.NAME.toUpperCase()}: Option \"${property}\" provided type \"${valueType}\" but expected type \"${expectedTypes}\".`\n )\n }\n }\n }\n}\n\nexport default Config\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap base-component.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport Data from './dom/data.js'\nimport EventHandler from './dom/event-handler.js'\nimport Config from './util/config.js'\nimport { executeAfterTransition, getElement } from './util/index.js'\n\n/**\n * Constants\n */\n\nconst VERSION = '5.3.1'\n\n/**\n * Class definition\n */\n\nclass BaseComponent extends Config {\n constructor(element, config) {\n super()\n\n element = getElement(element)\n if (!element) {\n return\n }\n\n this._element = element\n this._config = this._getConfig(config)\n\n Data.set(this._element, this.constructor.DATA_KEY, this)\n }\n\n // Public\n dispose() {\n Data.remove(this._element, this.constructor.DATA_KEY)\n EventHandler.off(this._element, this.constructor.EVENT_KEY)\n\n for (const propertyName of Object.getOwnPropertyNames(this)) {\n this[propertyName] = null\n }\n }\n\n _queueCallback(callback, element, isAnimated = true) {\n executeAfterTransition(callback, element, isAnimated)\n }\n\n _getConfig(config) {\n config = this._mergeConfigObj(config, this._element)\n config = this._configAfterMerge(config)\n this._typeCheckConfig(config)\n return config\n }\n\n // Static\n static getInstance(element) {\n return Data.get(getElement(element), this.DATA_KEY)\n }\n\n static getOrCreateInstance(element, config = {}) {\n return this.getInstance(element) || new this(element, typeof config === 'object' ? config : null)\n }\n\n static get VERSION() {\n return VERSION\n }\n\n static get DATA_KEY() {\n return `bs.${this.NAME}`\n }\n\n static get EVENT_KEY() {\n return `.${this.DATA_KEY}`\n }\n\n static eventName(name) {\n return `${name}${this.EVENT_KEY}`\n }\n}\n\nexport default BaseComponent\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap dom/selector-engine.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { isDisabled, isVisible, parseSelector } from '../util/index.js'\n\nconst getSelector = element => {\n let selector = element.getAttribute('data-bs-target')\n\n if (!selector || selector === '#') {\n let hrefAttribute = element.getAttribute('href')\n\n // The only valid content that could double as a selector are IDs or classes,\n // so everything starting with `#` or `.`. If a \"real\" URL is used as the selector,\n // `document.querySelector` will rightfully complain it is invalid.\n // See https://github.com/twbs/bootstrap/issues/32273\n if (!hrefAttribute || (!hrefAttribute.includes('#') && !hrefAttribute.startsWith('.'))) {\n return null\n }\n\n // Just in case some CMS puts out a full URL with the anchor appended\n if (hrefAttribute.includes('#') && !hrefAttribute.startsWith('#')) {\n hrefAttribute = `#${hrefAttribute.split('#')[1]}`\n }\n\n selector = hrefAttribute && hrefAttribute !== '#' ? hrefAttribute.trim() : null\n }\n\n return parseSelector(selector)\n}\n\nconst SelectorEngine = {\n find(selector, element = document.documentElement) {\n return [].concat(...Element.prototype.querySelectorAll.call(element, selector))\n },\n\n findOne(selector, element = document.documentElement) {\n return Element.prototype.querySelector.call(element, selector)\n },\n\n children(element, selector) {\n return [].concat(...element.children).filter(child => child.matches(selector))\n },\n\n parents(element, selector) {\n const parents = []\n let ancestor = element.parentNode.closest(selector)\n\n while (ancestor) {\n parents.push(ancestor)\n ancestor = ancestor.parentNode.closest(selector)\n }\n\n return parents\n },\n\n prev(element, selector) {\n let previous = element.previousElementSibling\n\n while (previous) {\n if (previous.matches(selector)) {\n return [previous]\n }\n\n previous = previous.previousElementSibling\n }\n\n return []\n },\n // TODO: this is now unused; remove later along with prev()\n next(element, selector) {\n let next = element.nextElementSibling\n\n while (next) {\n if (next.matches(selector)) {\n return [next]\n }\n\n next = next.nextElementSibling\n }\n\n return []\n },\n\n focusableChildren(element) {\n const focusables = [\n 'a',\n 'button',\n 'input',\n 'textarea',\n 'select',\n 'details',\n '[tabindex]',\n '[contenteditable=\"true\"]'\n ].map(selector => `${selector}:not([tabindex^=\"-\"])`).join(',')\n\n return this.find(focusables, element).filter(el => !isDisabled(el) && isVisible(el))\n },\n\n getSelectorFromElement(element) {\n const selector = getSelector(element)\n\n if (selector) {\n return SelectorEngine.findOne(selector) ? selector : null\n }\n\n return null\n },\n\n getElementFromSelector(element) {\n const selector = getSelector(element)\n\n return selector ? SelectorEngine.findOne(selector) : null\n },\n\n getMultipleElementsFromSelector(element) {\n const selector = getSelector(element)\n\n return selector ? SelectorEngine.find(selector) : []\n }\n}\n\nexport default SelectorEngine\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap util/component-functions.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport EventHandler from '../dom/event-handler.js'\nimport SelectorEngine from '../dom/selector-engine.js'\nimport { isDisabled } from './index.js'\n\nconst enableDismissTrigger = (component, method = 'hide') => {\n const clickEvent = `click.dismiss${component.EVENT_KEY}`\n const name = component.NAME\n\n EventHandler.on(document, clickEvent, `[data-bs-dismiss=\"${name}\"]`, function (event) {\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault()\n }\n\n if (isDisabled(this)) {\n return\n }\n\n const target = SelectorEngine.getElementFromSelector(this) || this.closest(`.${name}`)\n const instance = component.getOrCreateInstance(target)\n\n // Method argument is left, for Alert and only, as it doesn't implement the 'hide' method\n instance[method]()\n })\n}\n\nexport {\n enableDismissTrigger\n}\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap alert.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport { enableDismissTrigger } from './util/component-functions.js'\nimport { defineJQueryPlugin } from './util/index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'alert'\nconst DATA_KEY = 'bs.alert'\nconst EVENT_KEY = `.${DATA_KEY}`\n\nconst EVENT_CLOSE = `close${EVENT_KEY}`\nconst EVENT_CLOSED = `closed${EVENT_KEY}`\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\n\n/**\n * Class definition\n */\n\nclass Alert extends BaseComponent {\n // Getters\n static get NAME() {\n return NAME\n }\n\n // Public\n close() {\n const closeEvent = EventHandler.trigger(this._element, EVENT_CLOSE)\n\n if (closeEvent.defaultPrevented) {\n return\n }\n\n this._element.classList.remove(CLASS_NAME_SHOW)\n\n const isAnimated = this._element.classList.contains(CLASS_NAME_FADE)\n this._queueCallback(() => this._destroyElement(), this._element, isAnimated)\n }\n\n // Private\n _destroyElement() {\n this._element.remove()\n EventHandler.trigger(this._element, EVENT_CLOSED)\n this.dispose()\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Alert.getOrCreateInstance(this)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config](this)\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nenableDismissTrigger(Alert, 'close')\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Alert)\n\nexport default Alert\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap button.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport { defineJQueryPlugin } from './util/index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'button'\nconst DATA_KEY = 'bs.button'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst CLASS_NAME_ACTIVE = 'active'\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"button\"]'\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\n/**\n * Class definition\n */\n\nclass Button extends BaseComponent {\n // Getters\n static get NAME() {\n return NAME\n }\n\n // Public\n toggle() {\n // Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method\n this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE))\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Button.getOrCreateInstance(this)\n\n if (config === 'toggle') {\n data[config]()\n }\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, event => {\n event.preventDefault()\n\n const button = event.target.closest(SELECTOR_DATA_TOGGLE)\n const data = Button.getOrCreateInstance(button)\n\n data.toggle()\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Button)\n\nexport default Button\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap util/swipe.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport EventHandler from '../dom/event-handler.js'\nimport Config from './config.js'\nimport { execute } from './index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'swipe'\nconst EVENT_KEY = '.bs.swipe'\nconst EVENT_TOUCHSTART = `touchstart${EVENT_KEY}`\nconst EVENT_TOUCHMOVE = `touchmove${EVENT_KEY}`\nconst EVENT_TOUCHEND = `touchend${EVENT_KEY}`\nconst EVENT_POINTERDOWN = `pointerdown${EVENT_KEY}`\nconst EVENT_POINTERUP = `pointerup${EVENT_KEY}`\nconst POINTER_TYPE_TOUCH = 'touch'\nconst POINTER_TYPE_PEN = 'pen'\nconst CLASS_NAME_POINTER_EVENT = 'pointer-event'\nconst SWIPE_THRESHOLD = 40\n\nconst Default = {\n endCallback: null,\n leftCallback: null,\n rightCallback: null\n}\n\nconst DefaultType = {\n endCallback: '(function|null)',\n leftCallback: '(function|null)',\n rightCallback: '(function|null)'\n}\n\n/**\n * Class definition\n */\n\nclass Swipe extends Config {\n constructor(element, config) {\n super()\n this._element = element\n\n if (!element || !Swipe.isSupported()) {\n return\n }\n\n this._config = this._getConfig(config)\n this._deltaX = 0\n this._supportPointerEvents = Boolean(window.PointerEvent)\n this._initEvents()\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n dispose() {\n EventHandler.off(this._element, EVENT_KEY)\n }\n\n // Private\n _start(event) {\n if (!this._supportPointerEvents) {\n this._deltaX = event.touches[0].clientX\n\n return\n }\n\n if (this._eventIsPointerPenTouch(event)) {\n this._deltaX = event.clientX\n }\n }\n\n _end(event) {\n if (this._eventIsPointerPenTouch(event)) {\n this._deltaX = event.clientX - this._deltaX\n }\n\n this._handleSwipe()\n execute(this._config.endCallback)\n }\n\n _move(event) {\n this._deltaX = event.touches && event.touches.length > 1 ?\n 0 :\n event.touches[0].clientX - this._deltaX\n }\n\n _handleSwipe() {\n const absDeltaX = Math.abs(this._deltaX)\n\n if (absDeltaX <= SWIPE_THRESHOLD) {\n return\n }\n\n const direction = absDeltaX / this._deltaX\n\n this._deltaX = 0\n\n if (!direction) {\n return\n }\n\n execute(direction > 0 ? this._config.rightCallback : this._config.leftCallback)\n }\n\n _initEvents() {\n if (this._supportPointerEvents) {\n EventHandler.on(this._element, EVENT_POINTERDOWN, event => this._start(event))\n EventHandler.on(this._element, EVENT_POINTERUP, event => this._end(event))\n\n this._element.classList.add(CLASS_NAME_POINTER_EVENT)\n } else {\n EventHandler.on(this._element, EVENT_TOUCHSTART, event => this._start(event))\n EventHandler.on(this._element, EVENT_TOUCHMOVE, event => this._move(event))\n EventHandler.on(this._element, EVENT_TOUCHEND, event => this._end(event))\n }\n }\n\n _eventIsPointerPenTouch(event) {\n return this._supportPointerEvents && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)\n }\n\n // Static\n static isSupported() {\n return 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0\n }\n}\n\nexport default Swipe\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap carousel.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport Manipulator from './dom/manipulator.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport {\n defineJQueryPlugin,\n getNextActiveElement,\n isRTL,\n isVisible,\n reflow,\n triggerTransitionEnd\n} from './util/index.js'\nimport Swipe from './util/swipe.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'carousel'\nconst DATA_KEY = 'bs.carousel'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst ARROW_LEFT_KEY = 'ArrowLeft'\nconst ARROW_RIGHT_KEY = 'ArrowRight'\nconst TOUCHEVENT_COMPAT_WAIT = 500 // Time for mouse compat events to fire after touch\n\nconst ORDER_NEXT = 'next'\nconst ORDER_PREV = 'prev'\nconst DIRECTION_LEFT = 'left'\nconst DIRECTION_RIGHT = 'right'\n\nconst EVENT_SLIDE = `slide${EVENT_KEY}`\nconst EVENT_SLID = `slid${EVENT_KEY}`\nconst EVENT_KEYDOWN = `keydown${EVENT_KEY}`\nconst EVENT_MOUSEENTER = `mouseenter${EVENT_KEY}`\nconst EVENT_MOUSELEAVE = `mouseleave${EVENT_KEY}`\nconst EVENT_DRAG_START = `dragstart${EVENT_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_CAROUSEL = 'carousel'\nconst CLASS_NAME_ACTIVE = 'active'\nconst CLASS_NAME_SLIDE = 'slide'\nconst CLASS_NAME_END = 'carousel-item-end'\nconst CLASS_NAME_START = 'carousel-item-start'\nconst CLASS_NAME_NEXT = 'carousel-item-next'\nconst CLASS_NAME_PREV = 'carousel-item-prev'\n\nconst SELECTOR_ACTIVE = '.active'\nconst SELECTOR_ITEM = '.carousel-item'\nconst SELECTOR_ACTIVE_ITEM = SELECTOR_ACTIVE + SELECTOR_ITEM\nconst SELECTOR_ITEM_IMG = '.carousel-item img'\nconst SELECTOR_INDICATORS = '.carousel-indicators'\nconst SELECTOR_DATA_SLIDE = '[data-bs-slide], [data-bs-slide-to]'\nconst SELECTOR_DATA_RIDE = '[data-bs-ride=\"carousel\"]'\n\nconst KEY_TO_DIRECTION = {\n [ARROW_LEFT_KEY]: DIRECTION_RIGHT,\n [ARROW_RIGHT_KEY]: DIRECTION_LEFT\n}\n\nconst Default = {\n interval: 5000,\n keyboard: true,\n pause: 'hover',\n ride: false,\n touch: true,\n wrap: true\n}\n\nconst DefaultType = {\n interval: '(number|boolean)', // TODO:v6 remove boolean support\n keyboard: 'boolean',\n pause: '(string|boolean)',\n ride: '(boolean|string)',\n touch: 'boolean',\n wrap: 'boolean'\n}\n\n/**\n * Class definition\n */\n\nclass Carousel extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n this._interval = null\n this._activeElement = null\n this._isSliding = false\n this.touchTimeout = null\n this._swipeHelper = null\n\n this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element)\n this._addEventListeners()\n\n if (this._config.ride === CLASS_NAME_CAROUSEL) {\n this.cycle()\n }\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n next() {\n this._slide(ORDER_NEXT)\n }\n\n nextWhenVisible() {\n // FIXME TODO use `document.visibilityState`\n // Don't call next when the page isn't visible\n // or the carousel or its parent isn't visible\n if (!document.hidden && isVisible(this._element)) {\n this.next()\n }\n }\n\n prev() {\n this._slide(ORDER_PREV)\n }\n\n pause() {\n if (this._isSliding) {\n triggerTransitionEnd(this._element)\n }\n\n this._clearInterval()\n }\n\n cycle() {\n this._clearInterval()\n this._updateInterval()\n\n this._interval = setInterval(() => this.nextWhenVisible(), this._config.interval)\n }\n\n _maybeEnableCycle() {\n if (!this._config.ride) {\n return\n }\n\n if (this._isSliding) {\n EventHandler.one(this._element, EVENT_SLID, () => this.cycle())\n return\n }\n\n this.cycle()\n }\n\n to(index) {\n const items = this._getItems()\n if (index > items.length - 1 || index < 0) {\n return\n }\n\n if (this._isSliding) {\n EventHandler.one(this._element, EVENT_SLID, () => this.to(index))\n return\n }\n\n const activeIndex = this._getItemIndex(this._getActive())\n if (activeIndex === index) {\n return\n }\n\n const order = index > activeIndex ? ORDER_NEXT : ORDER_PREV\n\n this._slide(order, items[index])\n }\n\n dispose() {\n if (this._swipeHelper) {\n this._swipeHelper.dispose()\n }\n\n super.dispose()\n }\n\n // Private\n _configAfterMerge(config) {\n config.defaultInterval = config.interval\n return config\n }\n\n _addEventListeners() {\n if (this._config.keyboard) {\n EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event))\n }\n\n if (this._config.pause === 'hover') {\n EventHandler.on(this._element, EVENT_MOUSEENTER, () => this.pause())\n EventHandler.on(this._element, EVENT_MOUSELEAVE, () => this._maybeEnableCycle())\n }\n\n if (this._config.touch && Swipe.isSupported()) {\n this._addTouchEventListeners()\n }\n }\n\n _addTouchEventListeners() {\n for (const img of SelectorEngine.find(SELECTOR_ITEM_IMG, this._element)) {\n EventHandler.on(img, EVENT_DRAG_START, event => event.preventDefault())\n }\n\n const endCallBack = () => {\n if (this._config.pause !== 'hover') {\n return\n }\n\n // If it's a touch-enabled device, mouseenter/leave are fired as\n // part of the mouse compatibility events on first tap - the carousel\n // would stop cycling until user tapped out of it;\n // here, we listen for touchend, explicitly pause the carousel\n // (as if it's the second time we tap on it, mouseenter compat event\n // is NOT fired) and after a timeout (to allow for mouse compatibility\n // events to fire) we explicitly restart cycling\n\n this.pause()\n if (this.touchTimeout) {\n clearTimeout(this.touchTimeout)\n }\n\n this.touchTimeout = setTimeout(() => this._maybeEnableCycle(), TOUCHEVENT_COMPAT_WAIT + this._config.interval)\n }\n\n const swipeConfig = {\n leftCallback: () => this._slide(this._directionToOrder(DIRECTION_LEFT)),\n rightCallback: () => this._slide(this._directionToOrder(DIRECTION_RIGHT)),\n endCallback: endCallBack\n }\n\n this._swipeHelper = new Swipe(this._element, swipeConfig)\n }\n\n _keydown(event) {\n if (/input|textarea/i.test(event.target.tagName)) {\n return\n }\n\n const direction = KEY_TO_DIRECTION[event.key]\n if (direction) {\n event.preventDefault()\n this._slide(this._directionToOrder(direction))\n }\n }\n\n _getItemIndex(element) {\n return this._getItems().indexOf(element)\n }\n\n _setActiveIndicatorElement(index) {\n if (!this._indicatorsElement) {\n return\n }\n\n const activeIndicator = SelectorEngine.findOne(SELECTOR_ACTIVE, this._indicatorsElement)\n\n activeIndicator.classList.remove(CLASS_NAME_ACTIVE)\n activeIndicator.removeAttribute('aria-current')\n\n const newActiveIndicator = SelectorEngine.findOne(`[data-bs-slide-to=\"${index}\"]`, this._indicatorsElement)\n\n if (newActiveIndicator) {\n newActiveIndicator.classList.add(CLASS_NAME_ACTIVE)\n newActiveIndicator.setAttribute('aria-current', 'true')\n }\n }\n\n _updateInterval() {\n const element = this._activeElement || this._getActive()\n\n if (!element) {\n return\n }\n\n const elementInterval = Number.parseInt(element.getAttribute('data-bs-interval'), 10)\n\n this._config.interval = elementInterval || this._config.defaultInterval\n }\n\n _slide(order, element = null) {\n if (this._isSliding) {\n return\n }\n\n const activeElement = this._getActive()\n const isNext = order === ORDER_NEXT\n const nextElement = element || getNextActiveElement(this._getItems(), activeElement, isNext, this._config.wrap)\n\n if (nextElement === activeElement) {\n return\n }\n\n const nextElementIndex = this._getItemIndex(nextElement)\n\n const triggerEvent = eventName => {\n return EventHandler.trigger(this._element, eventName, {\n relatedTarget: nextElement,\n direction: this._orderToDirection(order),\n from: this._getItemIndex(activeElement),\n to: nextElementIndex\n })\n }\n\n const slideEvent = triggerEvent(EVENT_SLIDE)\n\n if (slideEvent.defaultPrevented) {\n return\n }\n\n if (!activeElement || !nextElement) {\n // Some weirdness is happening, so we bail\n // TODO: change tests that use empty divs to avoid this check\n return\n }\n\n const isCycling = Boolean(this._interval)\n this.pause()\n\n this._isSliding = true\n\n this._setActiveIndicatorElement(nextElementIndex)\n this._activeElement = nextElement\n\n const directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END\n const orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV\n\n nextElement.classList.add(orderClassName)\n\n reflow(nextElement)\n\n activeElement.classList.add(directionalClassName)\n nextElement.classList.add(directionalClassName)\n\n const completeCallBack = () => {\n nextElement.classList.remove(directionalClassName, orderClassName)\n nextElement.classList.add(CLASS_NAME_ACTIVE)\n\n activeElement.classList.remove(CLASS_NAME_ACTIVE, orderClassName, directionalClassName)\n\n this._isSliding = false\n\n triggerEvent(EVENT_SLID)\n }\n\n this._queueCallback(completeCallBack, activeElement, this._isAnimated())\n\n if (isCycling) {\n this.cycle()\n }\n }\n\n _isAnimated() {\n return this._element.classList.contains(CLASS_NAME_SLIDE)\n }\n\n _getActive() {\n return SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element)\n }\n\n _getItems() {\n return SelectorEngine.find(SELECTOR_ITEM, this._element)\n }\n\n _clearInterval() {\n if (this._interval) {\n clearInterval(this._interval)\n this._interval = null\n }\n }\n\n _directionToOrder(direction) {\n if (isRTL()) {\n return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT\n }\n\n return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV\n }\n\n _orderToDirection(order) {\n if (isRTL()) {\n return order === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT\n }\n\n return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Carousel.getOrCreateInstance(this, config)\n\n if (typeof config === 'number') {\n data.to(config)\n return\n }\n\n if (typeof config === 'string') {\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n }\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_SLIDE, function (event) {\n const target = SelectorEngine.getElementFromSelector(this)\n\n if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) {\n return\n }\n\n event.preventDefault()\n\n const carousel = Carousel.getOrCreateInstance(target)\n const slideIndex = this.getAttribute('data-bs-slide-to')\n\n if (slideIndex) {\n carousel.to(slideIndex)\n carousel._maybeEnableCycle()\n return\n }\n\n if (Manipulator.getDataAttribute(this, 'slide') === 'next') {\n carousel.next()\n carousel._maybeEnableCycle()\n return\n }\n\n carousel.prev()\n carousel._maybeEnableCycle()\n})\n\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE)\n\n for (const carousel of carousels) {\n Carousel.getOrCreateInstance(carousel)\n }\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Carousel)\n\nexport default Carousel\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap collapse.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport {\n defineJQueryPlugin,\n getElement,\n reflow\n} from './util/index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'collapse'\nconst DATA_KEY = 'bs.collapse'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_COLLAPSE = 'collapse'\nconst CLASS_NAME_COLLAPSING = 'collapsing'\nconst CLASS_NAME_COLLAPSED = 'collapsed'\nconst CLASS_NAME_DEEPER_CHILDREN = `:scope .${CLASS_NAME_COLLAPSE} .${CLASS_NAME_COLLAPSE}`\nconst CLASS_NAME_HORIZONTAL = 'collapse-horizontal'\n\nconst WIDTH = 'width'\nconst HEIGHT = 'height'\n\nconst SELECTOR_ACTIVES = '.collapse.show, .collapse.collapsing'\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"collapse\"]'\n\nconst Default = {\n parent: null,\n toggle: true\n}\n\nconst DefaultType = {\n parent: '(null|element)',\n toggle: 'boolean'\n}\n\n/**\n * Class definition\n */\n\nclass Collapse extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n this._isTransitioning = false\n this._triggerArray = []\n\n const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE)\n\n for (const elem of toggleList) {\n const selector = SelectorEngine.getSelectorFromElement(elem)\n const filterElement = SelectorEngine.find(selector)\n .filter(foundElement => foundElement === this._element)\n\n if (selector !== null && filterElement.length) {\n this._triggerArray.push(elem)\n }\n }\n\n this._initializeChildren()\n\n if (!this._config.parent) {\n this._addAriaAndCollapsedClass(this._triggerArray, this._isShown())\n }\n\n if (this._config.toggle) {\n this.toggle()\n }\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n toggle() {\n if (this._isShown()) {\n this.hide()\n } else {\n this.show()\n }\n }\n\n show() {\n if (this._isTransitioning || this._isShown()) {\n return\n }\n\n let activeChildren = []\n\n // find active children\n if (this._config.parent) {\n activeChildren = this._getFirstLevelChildren(SELECTOR_ACTIVES)\n .filter(element => element !== this._element)\n .map(element => Collapse.getOrCreateInstance(element, { toggle: false }))\n }\n\n if (activeChildren.length && activeChildren[0]._isTransitioning) {\n return\n }\n\n const startEvent = EventHandler.trigger(this._element, EVENT_SHOW)\n if (startEvent.defaultPrevented) {\n return\n }\n\n for (const activeInstance of activeChildren) {\n activeInstance.hide()\n }\n\n const dimension = this._getDimension()\n\n this._element.classList.remove(CLASS_NAME_COLLAPSE)\n this._element.classList.add(CLASS_NAME_COLLAPSING)\n\n this._element.style[dimension] = 0\n\n this._addAriaAndCollapsedClass(this._triggerArray, true)\n this._isTransitioning = true\n\n const complete = () => {\n this._isTransitioning = false\n\n this._element.classList.remove(CLASS_NAME_COLLAPSING)\n this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW)\n\n this._element.style[dimension] = ''\n\n EventHandler.trigger(this._element, EVENT_SHOWN)\n }\n\n const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1)\n const scrollSize = `scroll${capitalizedDimension}`\n\n this._queueCallback(complete, this._element, true)\n this._element.style[dimension] = `${this._element[scrollSize]}px`\n }\n\n hide() {\n if (this._isTransitioning || !this._isShown()) {\n return\n }\n\n const startEvent = EventHandler.trigger(this._element, EVENT_HIDE)\n if (startEvent.defaultPrevented) {\n return\n }\n\n const dimension = this._getDimension()\n\n this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`\n\n reflow(this._element)\n\n this._element.classList.add(CLASS_NAME_COLLAPSING)\n this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW)\n\n for (const trigger of this._triggerArray) {\n const element = SelectorEngine.getElementFromSelector(trigger)\n\n if (element && !this._isShown(element)) {\n this._addAriaAndCollapsedClass([trigger], false)\n }\n }\n\n this._isTransitioning = true\n\n const complete = () => {\n this._isTransitioning = false\n this._element.classList.remove(CLASS_NAME_COLLAPSING)\n this._element.classList.add(CLASS_NAME_COLLAPSE)\n EventHandler.trigger(this._element, EVENT_HIDDEN)\n }\n\n this._element.style[dimension] = ''\n\n this._queueCallback(complete, this._element, true)\n }\n\n _isShown(element = this._element) {\n return element.classList.contains(CLASS_NAME_SHOW)\n }\n\n // Private\n _configAfterMerge(config) {\n config.toggle = Boolean(config.toggle) // Coerce string values\n config.parent = getElement(config.parent)\n return config\n }\n\n _getDimension() {\n return this._element.classList.contains(CLASS_NAME_HORIZONTAL) ? WIDTH : HEIGHT\n }\n\n _initializeChildren() {\n if (!this._config.parent) {\n return\n }\n\n const children = this._getFirstLevelChildren(SELECTOR_DATA_TOGGLE)\n\n for (const element of children) {\n const selected = SelectorEngine.getElementFromSelector(element)\n\n if (selected) {\n this._addAriaAndCollapsedClass([element], this._isShown(selected))\n }\n }\n }\n\n _getFirstLevelChildren(selector) {\n const children = SelectorEngine.find(CLASS_NAME_DEEPER_CHILDREN, this._config.parent)\n // remove children if greater depth\n return SelectorEngine.find(selector, this._config.parent).filter(element => !children.includes(element))\n }\n\n _addAriaAndCollapsedClass(triggerArray, isOpen) {\n if (!triggerArray.length) {\n return\n }\n\n for (const element of triggerArray) {\n element.classList.toggle(CLASS_NAME_COLLAPSED, !isOpen)\n element.setAttribute('aria-expanded', isOpen)\n }\n }\n\n // Static\n static jQueryInterface(config) {\n const _config = {}\n if (typeof config === 'string' && /show|hide/.test(config)) {\n _config.toggle = false\n }\n\n return this.each(function () {\n const data = Collapse.getOrCreateInstance(this, _config)\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n }\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n // preventDefault only for elements (which change the URL) not inside the collapsible element\n if (event.target.tagName === 'A' || (event.delegateTarget && event.delegateTarget.tagName === 'A')) {\n event.preventDefault()\n }\n\n for (const element of SelectorEngine.getMultipleElementsFromSelector(this)) {\n Collapse.getOrCreateInstance(element, { toggle: false }).toggle()\n }\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Collapse)\n\nexport default Collapse\n","export var top = 'top';\nexport var bottom = 'bottom';\nexport var right = 'right';\nexport var left = 'left';\nexport var auto = 'auto';\nexport var basePlacements = [top, bottom, right, left];\nexport var start = 'start';\nexport var end = 'end';\nexport var clippingParents = 'clippingParents';\nexport var viewport = 'viewport';\nexport var popper = 'popper';\nexport var reference = 'reference';\nexport var variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) {\n return acc.concat([placement + \"-\" + start, placement + \"-\" + end]);\n}, []);\nexport var placements = /*#__PURE__*/[].concat(basePlacements, [auto]).reduce(function (acc, placement) {\n return acc.concat([placement, placement + \"-\" + start, placement + \"-\" + end]);\n}, []); // modifiers that need to read the DOM\n\nexport var beforeRead = 'beforeRead';\nexport var read = 'read';\nexport var afterRead = 'afterRead'; // pure-logic modifiers\n\nexport var beforeMain = 'beforeMain';\nexport var main = 'main';\nexport var afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state)\n\nexport var beforeWrite = 'beforeWrite';\nexport var write = 'write';\nexport var afterWrite = 'afterWrite';\nexport var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite];","export default function getNodeName(element) {\n return element ? (element.nodeName || '').toLowerCase() : null;\n}","export default function getWindow(node) {\n if (node == null) {\n return window;\n }\n\n if (node.toString() !== '[object Window]') {\n var ownerDocument = node.ownerDocument;\n return ownerDocument ? ownerDocument.defaultView || window : window;\n }\n\n return node;\n}","import getWindow from \"./getWindow.js\";\n\nfunction isElement(node) {\n var OwnElement = getWindow(node).Element;\n return node instanceof OwnElement || node instanceof Element;\n}\n\nfunction isHTMLElement(node) {\n var OwnElement = getWindow(node).HTMLElement;\n return node instanceof OwnElement || node instanceof HTMLElement;\n}\n\nfunction isShadowRoot(node) {\n // IE 11 has no ShadowRoot\n if (typeof ShadowRoot === 'undefined') {\n return false;\n }\n\n var OwnElement = getWindow(node).ShadowRoot;\n return node instanceof OwnElement || node instanceof ShadowRoot;\n}\n\nexport { isElement, isHTMLElement, isShadowRoot };","import getNodeName from \"../dom-utils/getNodeName.js\";\nimport { isHTMLElement } from \"../dom-utils/instanceOf.js\"; // This modifier takes the styles prepared by the `computeStyles` modifier\n// and applies them to the HTMLElements such as popper and arrow\n\nfunction applyStyles(_ref) {\n var state = _ref.state;\n Object.keys(state.elements).forEach(function (name) {\n var style = state.styles[name] || {};\n var attributes = state.attributes[name] || {};\n var element = state.elements[name]; // arrow is optional + virtual elements\n\n if (!isHTMLElement(element) || !getNodeName(element)) {\n return;\n } // Flow doesn't support to extend this property, but it's the most\n // effective way to apply styles to an HTMLElement\n // $FlowFixMe[cannot-write]\n\n\n Object.assign(element.style, style);\n Object.keys(attributes).forEach(function (name) {\n var value = attributes[name];\n\n if (value === false) {\n element.removeAttribute(name);\n } else {\n element.setAttribute(name, value === true ? '' : value);\n }\n });\n });\n}\n\nfunction effect(_ref2) {\n var state = _ref2.state;\n var initialStyles = {\n popper: {\n position: state.options.strategy,\n left: '0',\n top: '0',\n margin: '0'\n },\n arrow: {\n position: 'absolute'\n },\n reference: {}\n };\n Object.assign(state.elements.popper.style, initialStyles.popper);\n state.styles = initialStyles;\n\n if (state.elements.arrow) {\n Object.assign(state.elements.arrow.style, initialStyles.arrow);\n }\n\n return function () {\n Object.keys(state.elements).forEach(function (name) {\n var element = state.elements[name];\n var attributes = state.attributes[name] || {};\n var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); // Set all values to an empty string to unset them\n\n var style = styleProperties.reduce(function (style, property) {\n style[property] = '';\n return style;\n }, {}); // arrow is optional + virtual elements\n\n if (!isHTMLElement(element) || !getNodeName(element)) {\n return;\n }\n\n Object.assign(element.style, style);\n Object.keys(attributes).forEach(function (attribute) {\n element.removeAttribute(attribute);\n });\n });\n };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'applyStyles',\n enabled: true,\n phase: 'write',\n fn: applyStyles,\n effect: effect,\n requires: ['computeStyles']\n};","import { auto } from \"../enums.js\";\nexport default function getBasePlacement(placement) {\n return placement.split('-')[0];\n}","export var max = Math.max;\nexport var min = Math.min;\nexport var round = Math.round;","export default function getUAString() {\n var uaData = navigator.userAgentData;\n\n if (uaData != null && uaData.brands && Array.isArray(uaData.brands)) {\n return uaData.brands.map(function (item) {\n return item.brand + \"/\" + item.version;\n }).join(' ');\n }\n\n return navigator.userAgent;\n}","import getUAString from \"../utils/userAgent.js\";\nexport default function isLayoutViewport() {\n return !/^((?!chrome|android).)*safari/i.test(getUAString());\n}","import { isElement, isHTMLElement } from \"./instanceOf.js\";\nimport { round } from \"../utils/math.js\";\nimport getWindow from \"./getWindow.js\";\nimport isLayoutViewport from \"./isLayoutViewport.js\";\nexport default function getBoundingClientRect(element, includeScale, isFixedStrategy) {\n if (includeScale === void 0) {\n includeScale = false;\n }\n\n if (isFixedStrategy === void 0) {\n isFixedStrategy = false;\n }\n\n var clientRect = element.getBoundingClientRect();\n var scaleX = 1;\n var scaleY = 1;\n\n if (includeScale && isHTMLElement(element)) {\n scaleX = element.offsetWidth > 0 ? round(clientRect.width) / element.offsetWidth || 1 : 1;\n scaleY = element.offsetHeight > 0 ? round(clientRect.height) / element.offsetHeight || 1 : 1;\n }\n\n var _ref = isElement(element) ? getWindow(element) : window,\n visualViewport = _ref.visualViewport;\n\n var addVisualOffsets = !isLayoutViewport() && isFixedStrategy;\n var x = (clientRect.left + (addVisualOffsets && visualViewport ? visualViewport.offsetLeft : 0)) / scaleX;\n var y = (clientRect.top + (addVisualOffsets && visualViewport ? visualViewport.offsetTop : 0)) / scaleY;\n var width = clientRect.width / scaleX;\n var height = clientRect.height / scaleY;\n return {\n width: width,\n height: height,\n top: y,\n right: x + width,\n bottom: y + height,\n left: x,\n x: x,\n y: y\n };\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\"; // Returns the layout rect of an element relative to its offsetParent. Layout\n// means it doesn't take into account transforms.\n\nexport default function getLayoutRect(element) {\n var clientRect = getBoundingClientRect(element); // Use the clientRect sizes if it's not been transformed.\n // Fixes https://github.com/popperjs/popper-core/issues/1223\n\n var width = element.offsetWidth;\n var height = element.offsetHeight;\n\n if (Math.abs(clientRect.width - width) <= 1) {\n width = clientRect.width;\n }\n\n if (Math.abs(clientRect.height - height) <= 1) {\n height = clientRect.height;\n }\n\n return {\n x: element.offsetLeft,\n y: element.offsetTop,\n width: width,\n height: height\n };\n}","import { isShadowRoot } from \"./instanceOf.js\";\nexport default function contains(parent, child) {\n var rootNode = child.getRootNode && child.getRootNode(); // First, attempt with faster native method\n\n if (parent.contains(child)) {\n return true;\n } // then fallback to custom implementation with Shadow DOM support\n else if (rootNode && isShadowRoot(rootNode)) {\n var next = child;\n\n do {\n if (next && parent.isSameNode(next)) {\n return true;\n } // $FlowFixMe[prop-missing]: need a better way to handle this...\n\n\n next = next.parentNode || next.host;\n } while (next);\n } // Give up, the result is false\n\n\n return false;\n}","import getWindow from \"./getWindow.js\";\nexport default function getComputedStyle(element) {\n return getWindow(element).getComputedStyle(element);\n}","import getNodeName from \"./getNodeName.js\";\nexport default function isTableElement(element) {\n return ['table', 'td', 'th'].indexOf(getNodeName(element)) >= 0;\n}","import { isElement } from \"./instanceOf.js\";\nexport default function getDocumentElement(element) {\n // $FlowFixMe[incompatible-return]: assume body is always available\n return ((isElement(element) ? element.ownerDocument : // $FlowFixMe[prop-missing]\n element.document) || window.document).documentElement;\n}","import getNodeName from \"./getNodeName.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport { isShadowRoot } from \"./instanceOf.js\";\nexport default function getParentNode(element) {\n if (getNodeName(element) === 'html') {\n return element;\n }\n\n return (// this is a quicker (but less type safe) way to save quite some bytes from the bundle\n // $FlowFixMe[incompatible-return]\n // $FlowFixMe[prop-missing]\n element.assignedSlot || // step into the shadow DOM of the parent of a slotted node\n element.parentNode || ( // DOM Element detected\n isShadowRoot(element) ? element.host : null) || // ShadowRoot detected\n // $FlowFixMe[incompatible-call]: HTMLElement is a Node\n getDocumentElement(element) // fallback\n\n );\n}","import getWindow from \"./getWindow.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport { isHTMLElement, isShadowRoot } from \"./instanceOf.js\";\nimport isTableElement from \"./isTableElement.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport getUAString from \"../utils/userAgent.js\";\n\nfunction getTrueOffsetParent(element) {\n if (!isHTMLElement(element) || // https://github.com/popperjs/popper-core/issues/837\n getComputedStyle(element).position === 'fixed') {\n return null;\n }\n\n return element.offsetParent;\n} // `.offsetParent` reports `null` for fixed elements, while absolute elements\n// return the containing block\n\n\nfunction getContainingBlock(element) {\n var isFirefox = /firefox/i.test(getUAString());\n var isIE = /Trident/i.test(getUAString());\n\n if (isIE && isHTMLElement(element)) {\n // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport\n var elementCss = getComputedStyle(element);\n\n if (elementCss.position === 'fixed') {\n return null;\n }\n }\n\n var currentNode = getParentNode(element);\n\n if (isShadowRoot(currentNode)) {\n currentNode = currentNode.host;\n }\n\n while (isHTMLElement(currentNode) && ['html', 'body'].indexOf(getNodeName(currentNode)) < 0) {\n var css = getComputedStyle(currentNode); // This is non-exhaustive but covers the most common CSS properties that\n // create a containing block.\n // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n\n if (css.transform !== 'none' || css.perspective !== 'none' || css.contain === 'paint' || ['transform', 'perspective'].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === 'filter' || isFirefox && css.filter && css.filter !== 'none') {\n return currentNode;\n } else {\n currentNode = currentNode.parentNode;\n }\n }\n\n return null;\n} // Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\n\n\nexport default function getOffsetParent(element) {\n var window = getWindow(element);\n var offsetParent = getTrueOffsetParent(element);\n\n while (offsetParent && isTableElement(offsetParent) && getComputedStyle(offsetParent).position === 'static') {\n offsetParent = getTrueOffsetParent(offsetParent);\n }\n\n if (offsetParent && (getNodeName(offsetParent) === 'html' || getNodeName(offsetParent) === 'body' && getComputedStyle(offsetParent).position === 'static')) {\n return window;\n }\n\n return offsetParent || getContainingBlock(element) || window;\n}","export default function getMainAxisFromPlacement(placement) {\n return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y';\n}","import { max as mathMax, min as mathMin } from \"./math.js\";\nexport function within(min, value, max) {\n return mathMax(min, mathMin(value, max));\n}\nexport function withinMaxClamp(min, value, max) {\n var v = within(min, value, max);\n return v > max ? max : v;\n}","import getFreshSideObject from \"./getFreshSideObject.js\";\nexport default function mergePaddingObject(paddingObject) {\n return Object.assign({}, getFreshSideObject(), paddingObject);\n}","export default function getFreshSideObject() {\n return {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0\n };\n}","export default function expandToHashMap(value, keys) {\n return keys.reduce(function (hashMap, key) {\n hashMap[key] = value;\n return hashMap;\n }, {});\n}","import getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getLayoutRect from \"../dom-utils/getLayoutRect.js\";\nimport contains from \"../dom-utils/contains.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport getMainAxisFromPlacement from \"../utils/getMainAxisFromPlacement.js\";\nimport { within } from \"../utils/within.js\";\nimport mergePaddingObject from \"../utils/mergePaddingObject.js\";\nimport expandToHashMap from \"../utils/expandToHashMap.js\";\nimport { left, right, basePlacements, top, bottom } from \"../enums.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar toPaddingObject = function toPaddingObject(padding, state) {\n padding = typeof padding === 'function' ? padding(Object.assign({}, state.rects, {\n placement: state.placement\n })) : padding;\n return mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n};\n\nfunction arrow(_ref) {\n var _state$modifiersData$;\n\n var state = _ref.state,\n name = _ref.name,\n options = _ref.options;\n var arrowElement = state.elements.arrow;\n var popperOffsets = state.modifiersData.popperOffsets;\n var basePlacement = getBasePlacement(state.placement);\n var axis = getMainAxisFromPlacement(basePlacement);\n var isVertical = [left, right].indexOf(basePlacement) >= 0;\n var len = isVertical ? 'height' : 'width';\n\n if (!arrowElement || !popperOffsets) {\n return;\n }\n\n var paddingObject = toPaddingObject(options.padding, state);\n var arrowRect = getLayoutRect(arrowElement);\n var minProp = axis === 'y' ? top : left;\n var maxProp = axis === 'y' ? bottom : right;\n var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets[axis] - state.rects.popper[len];\n var startDiff = popperOffsets[axis] - state.rects.reference[axis];\n var arrowOffsetParent = getOffsetParent(arrowElement);\n var clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0;\n var centerToReference = endDiff / 2 - startDiff / 2; // Make sure the arrow doesn't overflow the popper if the center point is\n // outside of the popper bounds\n\n var min = paddingObject[minProp];\n var max = clientSize - arrowRect[len] - paddingObject[maxProp];\n var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference;\n var offset = within(min, center, max); // Prevents breaking syntax highlighting...\n\n var axisProp = axis;\n state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset, _state$modifiersData$.centerOffset = offset - center, _state$modifiersData$);\n}\n\nfunction effect(_ref2) {\n var state = _ref2.state,\n options = _ref2.options;\n var _options$element = options.element,\n arrowElement = _options$element === void 0 ? '[data-popper-arrow]' : _options$element;\n\n if (arrowElement == null) {\n return;\n } // CSS selector\n\n\n if (typeof arrowElement === 'string') {\n arrowElement = state.elements.popper.querySelector(arrowElement);\n\n if (!arrowElement) {\n return;\n }\n }\n\n if (!contains(state.elements.popper, arrowElement)) {\n return;\n }\n\n state.elements.arrow = arrowElement;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'arrow',\n enabled: true,\n phase: 'main',\n fn: arrow,\n effect: effect,\n requires: ['popperOffsets'],\n requiresIfExists: ['preventOverflow']\n};","export default function getVariation(placement) {\n return placement.split('-')[1];\n}","import { top, left, right, bottom, end } from \"../enums.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport getWindow from \"../dom-utils/getWindow.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.js\";\nimport getComputedStyle from \"../dom-utils/getComputedStyle.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getVariation from \"../utils/getVariation.js\";\nimport { round } from \"../utils/math.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar unsetSides = {\n top: 'auto',\n right: 'auto',\n bottom: 'auto',\n left: 'auto'\n}; // Round the offsets to the nearest suitable subpixel based on the DPR.\n// Zooming can change the DPR, but it seems to report a value that will\n// cleanly divide the values into the appropriate subpixels.\n\nfunction roundOffsetsByDPR(_ref, win) {\n var x = _ref.x,\n y = _ref.y;\n var dpr = win.devicePixelRatio || 1;\n return {\n x: round(x * dpr) / dpr || 0,\n y: round(y * dpr) / dpr || 0\n };\n}\n\nexport function mapToStyles(_ref2) {\n var _Object$assign2;\n\n var popper = _ref2.popper,\n popperRect = _ref2.popperRect,\n placement = _ref2.placement,\n variation = _ref2.variation,\n offsets = _ref2.offsets,\n position = _ref2.position,\n gpuAcceleration = _ref2.gpuAcceleration,\n adaptive = _ref2.adaptive,\n roundOffsets = _ref2.roundOffsets,\n isFixed = _ref2.isFixed;\n var _offsets$x = offsets.x,\n x = _offsets$x === void 0 ? 0 : _offsets$x,\n _offsets$y = offsets.y,\n y = _offsets$y === void 0 ? 0 : _offsets$y;\n\n var _ref3 = typeof roundOffsets === 'function' ? roundOffsets({\n x: x,\n y: y\n }) : {\n x: x,\n y: y\n };\n\n x = _ref3.x;\n y = _ref3.y;\n var hasX = offsets.hasOwnProperty('x');\n var hasY = offsets.hasOwnProperty('y');\n var sideX = left;\n var sideY = top;\n var win = window;\n\n if (adaptive) {\n var offsetParent = getOffsetParent(popper);\n var heightProp = 'clientHeight';\n var widthProp = 'clientWidth';\n\n if (offsetParent === getWindow(popper)) {\n offsetParent = getDocumentElement(popper);\n\n if (getComputedStyle(offsetParent).position !== 'static' && position === 'absolute') {\n heightProp = 'scrollHeight';\n widthProp = 'scrollWidth';\n }\n } // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it\n\n\n offsetParent = offsetParent;\n\n if (placement === top || (placement === left || placement === right) && variation === end) {\n sideY = bottom;\n var offsetY = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.height : // $FlowFixMe[prop-missing]\n offsetParent[heightProp];\n y -= offsetY - popperRect.height;\n y *= gpuAcceleration ? 1 : -1;\n }\n\n if (placement === left || (placement === top || placement === bottom) && variation === end) {\n sideX = right;\n var offsetX = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.width : // $FlowFixMe[prop-missing]\n offsetParent[widthProp];\n x -= offsetX - popperRect.width;\n x *= gpuAcceleration ? 1 : -1;\n }\n }\n\n var commonStyles = Object.assign({\n position: position\n }, adaptive && unsetSides);\n\n var _ref4 = roundOffsets === true ? roundOffsetsByDPR({\n x: x,\n y: y\n }, getWindow(popper)) : {\n x: x,\n y: y\n };\n\n x = _ref4.x;\n y = _ref4.y;\n\n if (gpuAcceleration) {\n var _Object$assign;\n\n return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? '0' : '', _Object$assign[sideX] = hasX ? '0' : '', _Object$assign.transform = (win.devicePixelRatio || 1) <= 1 ? \"translate(\" + x + \"px, \" + y + \"px)\" : \"translate3d(\" + x + \"px, \" + y + \"px, 0)\", _Object$assign));\n }\n\n return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + \"px\" : '', _Object$assign2[sideX] = hasX ? x + \"px\" : '', _Object$assign2.transform = '', _Object$assign2));\n}\n\nfunction computeStyles(_ref5) {\n var state = _ref5.state,\n options = _ref5.options;\n var _options$gpuAccelerat = options.gpuAcceleration,\n gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat,\n _options$adaptive = options.adaptive,\n adaptive = _options$adaptive === void 0 ? true : _options$adaptive,\n _options$roundOffsets = options.roundOffsets,\n roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets;\n var commonStyles = {\n placement: getBasePlacement(state.placement),\n variation: getVariation(state.placement),\n popper: state.elements.popper,\n popperRect: state.rects.popper,\n gpuAcceleration: gpuAcceleration,\n isFixed: state.options.strategy === 'fixed'\n };\n\n if (state.modifiersData.popperOffsets != null) {\n state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, {\n offsets: state.modifiersData.popperOffsets,\n position: state.options.strategy,\n adaptive: adaptive,\n roundOffsets: roundOffsets\n })));\n }\n\n if (state.modifiersData.arrow != null) {\n state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, {\n offsets: state.modifiersData.arrow,\n position: 'absolute',\n adaptive: false,\n roundOffsets: roundOffsets\n })));\n }\n\n state.attributes.popper = Object.assign({}, state.attributes.popper, {\n 'data-popper-placement': state.placement\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'computeStyles',\n enabled: true,\n phase: 'beforeWrite',\n fn: computeStyles,\n data: {}\n};","import getWindow from \"../dom-utils/getWindow.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar passive = {\n passive: true\n};\n\nfunction effect(_ref) {\n var state = _ref.state,\n instance = _ref.instance,\n options = _ref.options;\n var _options$scroll = options.scroll,\n scroll = _options$scroll === void 0 ? true : _options$scroll,\n _options$resize = options.resize,\n resize = _options$resize === void 0 ? true : _options$resize;\n var window = getWindow(state.elements.popper);\n var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper);\n\n if (scroll) {\n scrollParents.forEach(function (scrollParent) {\n scrollParent.addEventListener('scroll', instance.update, passive);\n });\n }\n\n if (resize) {\n window.addEventListener('resize', instance.update, passive);\n }\n\n return function () {\n if (scroll) {\n scrollParents.forEach(function (scrollParent) {\n scrollParent.removeEventListener('scroll', instance.update, passive);\n });\n }\n\n if (resize) {\n window.removeEventListener('resize', instance.update, passive);\n }\n };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'eventListeners',\n enabled: true,\n phase: 'write',\n fn: function fn() {},\n effect: effect,\n data: {}\n};","var hash = {\n left: 'right',\n right: 'left',\n bottom: 'top',\n top: 'bottom'\n};\nexport default function getOppositePlacement(placement) {\n return placement.replace(/left|right|bottom|top/g, function (matched) {\n return hash[matched];\n });\n}","var hash = {\n start: 'end',\n end: 'start'\n};\nexport default function getOppositeVariationPlacement(placement) {\n return placement.replace(/start|end/g, function (matched) {\n return hash[matched];\n });\n}","import getWindow from \"./getWindow.js\";\nexport default function getWindowScroll(node) {\n var win = getWindow(node);\n var scrollLeft = win.pageXOffset;\n var scrollTop = win.pageYOffset;\n return {\n scrollLeft: scrollLeft,\n scrollTop: scrollTop\n };\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScroll from \"./getWindowScroll.js\";\nexport default function getWindowScrollBarX(element) {\n // If has a CSS width greater than the viewport, then this will be\n // incorrect for RTL.\n // Popper 1 is broken in this case and never had a bug report so let's assume\n // it's not an issue. I don't think anyone ever specifies width on \n // anyway.\n // Browsers where the left scrollbar doesn't cause an issue report `0` for\n // this (e.g. Edge 2019, IE11, Safari)\n return getBoundingClientRect(getDocumentElement(element)).left + getWindowScroll(element).scrollLeft;\n}","import getComputedStyle from \"./getComputedStyle.js\";\nexport default function isScrollParent(element) {\n // Firefox wants us to check `-x` and `-y` variations as well\n var _getComputedStyle = getComputedStyle(element),\n overflow = _getComputedStyle.overflow,\n overflowX = _getComputedStyle.overflowX,\n overflowY = _getComputedStyle.overflowY;\n\n return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);\n}","import getParentNode from \"./getParentNode.js\";\nimport isScrollParent from \"./isScrollParent.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nexport default function getScrollParent(node) {\n if (['html', 'body', '#document'].indexOf(getNodeName(node)) >= 0) {\n // $FlowFixMe[incompatible-return]: assume body is always available\n return node.ownerDocument.body;\n }\n\n if (isHTMLElement(node) && isScrollParent(node)) {\n return node;\n }\n\n return getScrollParent(getParentNode(node));\n}","import getScrollParent from \"./getScrollParent.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport getWindow from \"./getWindow.js\";\nimport isScrollParent from \"./isScrollParent.js\";\n/*\ngiven a DOM element, return the list of all scroll parents, up the list of ancesors\nuntil we get to the top window object. This list is what we attach scroll listeners\nto, because if any of these parent elements scroll, we'll need to re-calculate the\nreference element's position.\n*/\n\nexport default function listScrollParents(element, list) {\n var _element$ownerDocumen;\n\n if (list === void 0) {\n list = [];\n }\n\n var scrollParent = getScrollParent(element);\n var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body);\n var win = getWindow(scrollParent);\n var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent;\n var updatedList = list.concat(target);\n return isBody ? updatedList : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here\n updatedList.concat(listScrollParents(getParentNode(target)));\n}","export default function rectToClientRect(rect) {\n return Object.assign({}, rect, {\n left: rect.x,\n top: rect.y,\n right: rect.x + rect.width,\n bottom: rect.y + rect.height\n });\n}","import { viewport } from \"../enums.js\";\nimport getViewportRect from \"./getViewportRect.js\";\nimport getDocumentRect from \"./getDocumentRect.js\";\nimport listScrollParents from \"./listScrollParents.js\";\nimport getOffsetParent from \"./getOffsetParent.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport { isElement, isHTMLElement } from \"./instanceOf.js\";\nimport getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport contains from \"./contains.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport rectToClientRect from \"../utils/rectToClientRect.js\";\nimport { max, min } from \"../utils/math.js\";\n\nfunction getInnerBoundingClientRect(element, strategy) {\n var rect = getBoundingClientRect(element, false, strategy === 'fixed');\n rect.top = rect.top + element.clientTop;\n rect.left = rect.left + element.clientLeft;\n rect.bottom = rect.top + element.clientHeight;\n rect.right = rect.left + element.clientWidth;\n rect.width = element.clientWidth;\n rect.height = element.clientHeight;\n rect.x = rect.left;\n rect.y = rect.top;\n return rect;\n}\n\nfunction getClientRectFromMixedType(element, clippingParent, strategy) {\n return clippingParent === viewport ? rectToClientRect(getViewportRect(element, strategy)) : isElement(clippingParent) ? getInnerBoundingClientRect(clippingParent, strategy) : rectToClientRect(getDocumentRect(getDocumentElement(element)));\n} // A \"clipping parent\" is an overflowable container with the characteristic of\n// clipping (or hiding) overflowing elements with a position different from\n// `initial`\n\n\nfunction getClippingParents(element) {\n var clippingParents = listScrollParents(getParentNode(element));\n var canEscapeClipping = ['absolute', 'fixed'].indexOf(getComputedStyle(element).position) >= 0;\n var clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element;\n\n if (!isElement(clipperElement)) {\n return [];\n } // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414\n\n\n return clippingParents.filter(function (clippingParent) {\n return isElement(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== 'body';\n });\n} // Gets the maximum area that the element is visible in due to any number of\n// clipping parents\n\n\nexport default function getClippingRect(element, boundary, rootBoundary, strategy) {\n var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary);\n var clippingParents = [].concat(mainClippingParents, [rootBoundary]);\n var firstClippingParent = clippingParents[0];\n var clippingRect = clippingParents.reduce(function (accRect, clippingParent) {\n var rect = getClientRectFromMixedType(element, clippingParent, strategy);\n accRect.top = max(rect.top, accRect.top);\n accRect.right = min(rect.right, accRect.right);\n accRect.bottom = min(rect.bottom, accRect.bottom);\n accRect.left = max(rect.left, accRect.left);\n return accRect;\n }, getClientRectFromMixedType(element, firstClippingParent, strategy));\n clippingRect.width = clippingRect.right - clippingRect.left;\n clippingRect.height = clippingRect.bottom - clippingRect.top;\n clippingRect.x = clippingRect.left;\n clippingRect.y = clippingRect.top;\n return clippingRect;\n}","import getWindow from \"./getWindow.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport isLayoutViewport from \"./isLayoutViewport.js\";\nexport default function getViewportRect(element, strategy) {\n var win = getWindow(element);\n var html = getDocumentElement(element);\n var visualViewport = win.visualViewport;\n var width = html.clientWidth;\n var height = html.clientHeight;\n var x = 0;\n var y = 0;\n\n if (visualViewport) {\n width = visualViewport.width;\n height = visualViewport.height;\n var layoutViewport = isLayoutViewport();\n\n if (layoutViewport || !layoutViewport && strategy === 'fixed') {\n x = visualViewport.offsetLeft;\n y = visualViewport.offsetTop;\n }\n }\n\n return {\n width: width,\n height: height,\n x: x + getWindowScrollBarX(element),\n y: y\n };\n}","import getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport getWindowScroll from \"./getWindowScroll.js\";\nimport { max } from \"../utils/math.js\"; // Gets the entire size of the scrollable document area, even extending outside\n// of the `` and `` rect bounds if horizontally scrollable\n\nexport default function getDocumentRect(element) {\n var _element$ownerDocumen;\n\n var html = getDocumentElement(element);\n var winScroll = getWindowScroll(element);\n var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body;\n var width = max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0);\n var height = max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0);\n var x = -winScroll.scrollLeft + getWindowScrollBarX(element);\n var y = -winScroll.scrollTop;\n\n if (getComputedStyle(body || html).direction === 'rtl') {\n x += max(html.clientWidth, body ? body.clientWidth : 0) - width;\n }\n\n return {\n width: width,\n height: height,\n x: x,\n y: y\n };\n}","import getBasePlacement from \"./getBasePlacement.js\";\nimport getVariation from \"./getVariation.js\";\nimport getMainAxisFromPlacement from \"./getMainAxisFromPlacement.js\";\nimport { top, right, bottom, left, start, end } from \"../enums.js\";\nexport default function computeOffsets(_ref) {\n var reference = _ref.reference,\n element = _ref.element,\n placement = _ref.placement;\n var basePlacement = placement ? getBasePlacement(placement) : null;\n var variation = placement ? getVariation(placement) : null;\n var commonX = reference.x + reference.width / 2 - element.width / 2;\n var commonY = reference.y + reference.height / 2 - element.height / 2;\n var offsets;\n\n switch (basePlacement) {\n case top:\n offsets = {\n x: commonX,\n y: reference.y - element.height\n };\n break;\n\n case bottom:\n offsets = {\n x: commonX,\n y: reference.y + reference.height\n };\n break;\n\n case right:\n offsets = {\n x: reference.x + reference.width,\n y: commonY\n };\n break;\n\n case left:\n offsets = {\n x: reference.x - element.width,\n y: commonY\n };\n break;\n\n default:\n offsets = {\n x: reference.x,\n y: reference.y\n };\n }\n\n var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null;\n\n if (mainAxis != null) {\n var len = mainAxis === 'y' ? 'height' : 'width';\n\n switch (variation) {\n case start:\n offsets[mainAxis] = offsets[mainAxis] - (reference[len] / 2 - element[len] / 2);\n break;\n\n case end:\n offsets[mainAxis] = offsets[mainAxis] + (reference[len] / 2 - element[len] / 2);\n break;\n\n default:\n }\n }\n\n return offsets;\n}","import getClippingRect from \"../dom-utils/getClippingRect.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.js\";\nimport getBoundingClientRect from \"../dom-utils/getBoundingClientRect.js\";\nimport computeOffsets from \"./computeOffsets.js\";\nimport rectToClientRect from \"./rectToClientRect.js\";\nimport { clippingParents, reference, popper, bottom, top, right, basePlacements, viewport } from \"../enums.js\";\nimport { isElement } from \"../dom-utils/instanceOf.js\";\nimport mergePaddingObject from \"./mergePaddingObject.js\";\nimport expandToHashMap from \"./expandToHashMap.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport default function detectOverflow(state, options) {\n if (options === void 0) {\n options = {};\n }\n\n var _options = options,\n _options$placement = _options.placement,\n placement = _options$placement === void 0 ? state.placement : _options$placement,\n _options$strategy = _options.strategy,\n strategy = _options$strategy === void 0 ? state.strategy : _options$strategy,\n _options$boundary = _options.boundary,\n boundary = _options$boundary === void 0 ? clippingParents : _options$boundary,\n _options$rootBoundary = _options.rootBoundary,\n rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary,\n _options$elementConte = _options.elementContext,\n elementContext = _options$elementConte === void 0 ? popper : _options$elementConte,\n _options$altBoundary = _options.altBoundary,\n altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary,\n _options$padding = _options.padding,\n padding = _options$padding === void 0 ? 0 : _options$padding;\n var paddingObject = mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n var altContext = elementContext === popper ? reference : popper;\n var popperRect = state.rects.popper;\n var element = state.elements[altBoundary ? altContext : elementContext];\n var clippingClientRect = getClippingRect(isElement(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary, strategy);\n var referenceClientRect = getBoundingClientRect(state.elements.reference);\n var popperOffsets = computeOffsets({\n reference: referenceClientRect,\n element: popperRect,\n strategy: 'absolute',\n placement: placement\n });\n var popperClientRect = rectToClientRect(Object.assign({}, popperRect, popperOffsets));\n var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect\n // 0 or negative = within the clipping rect\n\n var overflowOffsets = {\n top: clippingClientRect.top - elementClientRect.top + paddingObject.top,\n bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom,\n left: clippingClientRect.left - elementClientRect.left + paddingObject.left,\n right: elementClientRect.right - clippingClientRect.right + paddingObject.right\n };\n var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element\n\n if (elementContext === popper && offsetData) {\n var offset = offsetData[placement];\n Object.keys(overflowOffsets).forEach(function (key) {\n var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1;\n var axis = [top, bottom].indexOf(key) >= 0 ? 'y' : 'x';\n overflowOffsets[key] += offset[axis] * multiply;\n });\n }\n\n return overflowOffsets;\n}","import getVariation from \"./getVariation.js\";\nimport { variationPlacements, basePlacements, placements as allPlacements } from \"../enums.js\";\nimport detectOverflow from \"./detectOverflow.js\";\nimport getBasePlacement from \"./getBasePlacement.js\";\nexport default function computeAutoPlacement(state, options) {\n if (options === void 0) {\n options = {};\n }\n\n var _options = options,\n placement = _options.placement,\n boundary = _options.boundary,\n rootBoundary = _options.rootBoundary,\n padding = _options.padding,\n flipVariations = _options.flipVariations,\n _options$allowedAutoP = _options.allowedAutoPlacements,\n allowedAutoPlacements = _options$allowedAutoP === void 0 ? allPlacements : _options$allowedAutoP;\n var variation = getVariation(placement);\n var placements = variation ? flipVariations ? variationPlacements : variationPlacements.filter(function (placement) {\n return getVariation(placement) === variation;\n }) : basePlacements;\n var allowedPlacements = placements.filter(function (placement) {\n return allowedAutoPlacements.indexOf(placement) >= 0;\n });\n\n if (allowedPlacements.length === 0) {\n allowedPlacements = placements;\n } // $FlowFixMe[incompatible-type]: Flow seems to have problems with two array unions...\n\n\n var overflows = allowedPlacements.reduce(function (acc, placement) {\n acc[placement] = detectOverflow(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding\n })[getBasePlacement(placement)];\n return acc;\n }, {});\n return Object.keys(overflows).sort(function (a, b) {\n return overflows[a] - overflows[b];\n });\n}","import getOppositePlacement from \"../utils/getOppositePlacement.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getOppositeVariationPlacement from \"../utils/getOppositeVariationPlacement.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\nimport computeAutoPlacement from \"../utils/computeAutoPlacement.js\";\nimport { bottom, top, start, right, left, auto } from \"../enums.js\";\nimport getVariation from \"../utils/getVariation.js\"; // eslint-disable-next-line import/no-unused-modules\n\nfunction getExpandedFallbackPlacements(placement) {\n if (getBasePlacement(placement) === auto) {\n return [];\n }\n\n var oppositePlacement = getOppositePlacement(placement);\n return [getOppositeVariationPlacement(placement), oppositePlacement, getOppositeVariationPlacement(oppositePlacement)];\n}\n\nfunction flip(_ref) {\n var state = _ref.state,\n options = _ref.options,\n name = _ref.name;\n\n if (state.modifiersData[name]._skip) {\n return;\n }\n\n var _options$mainAxis = options.mainAxis,\n checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n _options$altAxis = options.altAxis,\n checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis,\n specifiedFallbackPlacements = options.fallbackPlacements,\n padding = options.padding,\n boundary = options.boundary,\n rootBoundary = options.rootBoundary,\n altBoundary = options.altBoundary,\n _options$flipVariatio = options.flipVariations,\n flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio,\n allowedAutoPlacements = options.allowedAutoPlacements;\n var preferredPlacement = state.options.placement;\n var basePlacement = getBasePlacement(preferredPlacement);\n var isBasePlacement = basePlacement === preferredPlacement;\n var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [getOppositePlacement(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement));\n var placements = [preferredPlacement].concat(fallbackPlacements).reduce(function (acc, placement) {\n return acc.concat(getBasePlacement(placement) === auto ? computeAutoPlacement(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding,\n flipVariations: flipVariations,\n allowedAutoPlacements: allowedAutoPlacements\n }) : placement);\n }, []);\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var checksMap = new Map();\n var makeFallbackChecks = true;\n var firstFittingPlacement = placements[0];\n\n for (var i = 0; i < placements.length; i++) {\n var placement = placements[i];\n\n var _basePlacement = getBasePlacement(placement);\n\n var isStartVariation = getVariation(placement) === start;\n var isVertical = [top, bottom].indexOf(_basePlacement) >= 0;\n var len = isVertical ? 'width' : 'height';\n var overflow = detectOverflow(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n altBoundary: altBoundary,\n padding: padding\n });\n var mainVariationSide = isVertical ? isStartVariation ? right : left : isStartVariation ? bottom : top;\n\n if (referenceRect[len] > popperRect[len]) {\n mainVariationSide = getOppositePlacement(mainVariationSide);\n }\n\n var altVariationSide = getOppositePlacement(mainVariationSide);\n var checks = [];\n\n if (checkMainAxis) {\n checks.push(overflow[_basePlacement] <= 0);\n }\n\n if (checkAltAxis) {\n checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0);\n }\n\n if (checks.every(function (check) {\n return check;\n })) {\n firstFittingPlacement = placement;\n makeFallbackChecks = false;\n break;\n }\n\n checksMap.set(placement, checks);\n }\n\n if (makeFallbackChecks) {\n // `2` may be desired in some cases – research later\n var numberOfChecks = flipVariations ? 3 : 1;\n\n var _loop = function _loop(_i) {\n var fittingPlacement = placements.find(function (placement) {\n var checks = checksMap.get(placement);\n\n if (checks) {\n return checks.slice(0, _i).every(function (check) {\n return check;\n });\n }\n });\n\n if (fittingPlacement) {\n firstFittingPlacement = fittingPlacement;\n return \"break\";\n }\n };\n\n for (var _i = numberOfChecks; _i > 0; _i--) {\n var _ret = _loop(_i);\n\n if (_ret === \"break\") break;\n }\n }\n\n if (state.placement !== firstFittingPlacement) {\n state.modifiersData[name]._skip = true;\n state.placement = firstFittingPlacement;\n state.reset = true;\n }\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'flip',\n enabled: true,\n phase: 'main',\n fn: flip,\n requiresIfExists: ['offset'],\n data: {\n _skip: false\n }\n};","import { top, bottom, left, right } from \"../enums.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\n\nfunction getSideOffsets(overflow, rect, preventedOffsets) {\n if (preventedOffsets === void 0) {\n preventedOffsets = {\n x: 0,\n y: 0\n };\n }\n\n return {\n top: overflow.top - rect.height - preventedOffsets.y,\n right: overflow.right - rect.width + preventedOffsets.x,\n bottom: overflow.bottom - rect.height + preventedOffsets.y,\n left: overflow.left - rect.width - preventedOffsets.x\n };\n}\n\nfunction isAnySideFullyClipped(overflow) {\n return [top, right, bottom, left].some(function (side) {\n return overflow[side] >= 0;\n });\n}\n\nfunction hide(_ref) {\n var state = _ref.state,\n name = _ref.name;\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var preventedOffsets = state.modifiersData.preventOverflow;\n var referenceOverflow = detectOverflow(state, {\n elementContext: 'reference'\n });\n var popperAltOverflow = detectOverflow(state, {\n altBoundary: true\n });\n var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect);\n var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets);\n var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets);\n var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets);\n state.modifiersData[name] = {\n referenceClippingOffsets: referenceClippingOffsets,\n popperEscapeOffsets: popperEscapeOffsets,\n isReferenceHidden: isReferenceHidden,\n hasPopperEscaped: hasPopperEscaped\n };\n state.attributes.popper = Object.assign({}, state.attributes.popper, {\n 'data-popper-reference-hidden': isReferenceHidden,\n 'data-popper-escaped': hasPopperEscaped\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'hide',\n enabled: true,\n phase: 'main',\n requiresIfExists: ['preventOverflow'],\n fn: hide\n};","import getBasePlacement from \"../utils/getBasePlacement.js\";\nimport { top, left, right, placements } from \"../enums.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport function distanceAndSkiddingToXY(placement, rects, offset) {\n var basePlacement = getBasePlacement(placement);\n var invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1;\n\n var _ref = typeof offset === 'function' ? offset(Object.assign({}, rects, {\n placement: placement\n })) : offset,\n skidding = _ref[0],\n distance = _ref[1];\n\n skidding = skidding || 0;\n distance = (distance || 0) * invertDistance;\n return [left, right].indexOf(basePlacement) >= 0 ? {\n x: distance,\n y: skidding\n } : {\n x: skidding,\n y: distance\n };\n}\n\nfunction offset(_ref2) {\n var state = _ref2.state,\n options = _ref2.options,\n name = _ref2.name;\n var _options$offset = options.offset,\n offset = _options$offset === void 0 ? [0, 0] : _options$offset;\n var data = placements.reduce(function (acc, placement) {\n acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset);\n return acc;\n }, {});\n var _data$state$placement = data[state.placement],\n x = _data$state$placement.x,\n y = _data$state$placement.y;\n\n if (state.modifiersData.popperOffsets != null) {\n state.modifiersData.popperOffsets.x += x;\n state.modifiersData.popperOffsets.y += y;\n }\n\n state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'offset',\n enabled: true,\n phase: 'main',\n requires: ['popperOffsets'],\n fn: offset\n};","import computeOffsets from \"../utils/computeOffsets.js\";\n\nfunction popperOffsets(_ref) {\n var state = _ref.state,\n name = _ref.name;\n // Offsets are the actual position the popper needs to have to be\n // properly positioned near its reference element\n // This is the most basic placement, and will be adjusted by\n // the modifiers in the next step\n state.modifiersData[name] = computeOffsets({\n reference: state.rects.reference,\n element: state.rects.popper,\n strategy: 'absolute',\n placement: state.placement\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'popperOffsets',\n enabled: true,\n phase: 'read',\n fn: popperOffsets,\n data: {}\n};","import { top, left, right, bottom, start } from \"../enums.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getMainAxisFromPlacement from \"../utils/getMainAxisFromPlacement.js\";\nimport getAltAxis from \"../utils/getAltAxis.js\";\nimport { within, withinMaxClamp } from \"../utils/within.js\";\nimport getLayoutRect from \"../dom-utils/getLayoutRect.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\nimport getVariation from \"../utils/getVariation.js\";\nimport getFreshSideObject from \"../utils/getFreshSideObject.js\";\nimport { min as mathMin, max as mathMax } from \"../utils/math.js\";\n\nfunction preventOverflow(_ref) {\n var state = _ref.state,\n options = _ref.options,\n name = _ref.name;\n var _options$mainAxis = options.mainAxis,\n checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n _options$altAxis = options.altAxis,\n checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis,\n boundary = options.boundary,\n rootBoundary = options.rootBoundary,\n altBoundary = options.altBoundary,\n padding = options.padding,\n _options$tether = options.tether,\n tether = _options$tether === void 0 ? true : _options$tether,\n _options$tetherOffset = options.tetherOffset,\n tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset;\n var overflow = detectOverflow(state, {\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding,\n altBoundary: altBoundary\n });\n var basePlacement = getBasePlacement(state.placement);\n var variation = getVariation(state.placement);\n var isBasePlacement = !variation;\n var mainAxis = getMainAxisFromPlacement(basePlacement);\n var altAxis = getAltAxis(mainAxis);\n var popperOffsets = state.modifiersData.popperOffsets;\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var tetherOffsetValue = typeof tetherOffset === 'function' ? tetherOffset(Object.assign({}, state.rects, {\n placement: state.placement\n })) : tetherOffset;\n var normalizedTetherOffsetValue = typeof tetherOffsetValue === 'number' ? {\n mainAxis: tetherOffsetValue,\n altAxis: tetherOffsetValue\n } : Object.assign({\n mainAxis: 0,\n altAxis: 0\n }, tetherOffsetValue);\n var offsetModifierState = state.modifiersData.offset ? state.modifiersData.offset[state.placement] : null;\n var data = {\n x: 0,\n y: 0\n };\n\n if (!popperOffsets) {\n return;\n }\n\n if (checkMainAxis) {\n var _offsetModifierState$;\n\n var mainSide = mainAxis === 'y' ? top : left;\n var altSide = mainAxis === 'y' ? bottom : right;\n var len = mainAxis === 'y' ? 'height' : 'width';\n var offset = popperOffsets[mainAxis];\n var min = offset + overflow[mainSide];\n var max = offset - overflow[altSide];\n var additive = tether ? -popperRect[len] / 2 : 0;\n var minLen = variation === start ? referenceRect[len] : popperRect[len];\n var maxLen = variation === start ? -popperRect[len] : -referenceRect[len]; // We need to include the arrow in the calculation so the arrow doesn't go\n // outside the reference bounds\n\n var arrowElement = state.elements.arrow;\n var arrowRect = tether && arrowElement ? getLayoutRect(arrowElement) : {\n width: 0,\n height: 0\n };\n var arrowPaddingObject = state.modifiersData['arrow#persistent'] ? state.modifiersData['arrow#persistent'].padding : getFreshSideObject();\n var arrowPaddingMin = arrowPaddingObject[mainSide];\n var arrowPaddingMax = arrowPaddingObject[altSide]; // If the reference length is smaller than the arrow length, we don't want\n // to include its full size in the calculation. If the reference is small\n // and near the edge of a boundary, the popper can overflow even if the\n // reference is not overflowing as well (e.g. virtual elements with no\n // width or height)\n\n var arrowLen = within(0, referenceRect[len], arrowRect[len]);\n var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis : minLen - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis;\n var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis : maxLen + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis;\n var arrowOffsetParent = state.elements.arrow && getOffsetParent(state.elements.arrow);\n var clientOffset = arrowOffsetParent ? mainAxis === 'y' ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0;\n var offsetModifierValue = (_offsetModifierState$ = offsetModifierState == null ? void 0 : offsetModifierState[mainAxis]) != null ? _offsetModifierState$ : 0;\n var tetherMin = offset + minOffset - offsetModifierValue - clientOffset;\n var tetherMax = offset + maxOffset - offsetModifierValue;\n var preventedOffset = within(tether ? mathMin(min, tetherMin) : min, offset, tether ? mathMax(max, tetherMax) : max);\n popperOffsets[mainAxis] = preventedOffset;\n data[mainAxis] = preventedOffset - offset;\n }\n\n if (checkAltAxis) {\n var _offsetModifierState$2;\n\n var _mainSide = mainAxis === 'x' ? top : left;\n\n var _altSide = mainAxis === 'x' ? bottom : right;\n\n var _offset = popperOffsets[altAxis];\n\n var _len = altAxis === 'y' ? 'height' : 'width';\n\n var _min = _offset + overflow[_mainSide];\n\n var _max = _offset - overflow[_altSide];\n\n var isOriginSide = [top, left].indexOf(basePlacement) !== -1;\n\n var _offsetModifierValue = (_offsetModifierState$2 = offsetModifierState == null ? void 0 : offsetModifierState[altAxis]) != null ? _offsetModifierState$2 : 0;\n\n var _tetherMin = isOriginSide ? _min : _offset - referenceRect[_len] - popperRect[_len] - _offsetModifierValue + normalizedTetherOffsetValue.altAxis;\n\n var _tetherMax = isOriginSide ? _offset + referenceRect[_len] + popperRect[_len] - _offsetModifierValue - normalizedTetherOffsetValue.altAxis : _max;\n\n var _preventedOffset = tether && isOriginSide ? withinMaxClamp(_tetherMin, _offset, _tetherMax) : within(tether ? _tetherMin : _min, _offset, tether ? _tetherMax : _max);\n\n popperOffsets[altAxis] = _preventedOffset;\n data[altAxis] = _preventedOffset - _offset;\n }\n\n state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'preventOverflow',\n enabled: true,\n phase: 'main',\n fn: preventOverflow,\n requiresIfExists: ['offset']\n};","export default function getAltAxis(axis) {\n return axis === 'x' ? 'y' : 'x';\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getNodeScroll from \"./getNodeScroll.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport isScrollParent from \"./isScrollParent.js\";\nimport { round } from \"../utils/math.js\";\n\nfunction isElementScaled(element) {\n var rect = element.getBoundingClientRect();\n var scaleX = round(rect.width) / element.offsetWidth || 1;\n var scaleY = round(rect.height) / element.offsetHeight || 1;\n return scaleX !== 1 || scaleY !== 1;\n} // Returns the composite rect of an element relative to its offsetParent.\n// Composite means it takes into account transforms as well as layout.\n\n\nexport default function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) {\n if (isFixed === void 0) {\n isFixed = false;\n }\n\n var isOffsetParentAnElement = isHTMLElement(offsetParent);\n var offsetParentIsScaled = isHTMLElement(offsetParent) && isElementScaled(offsetParent);\n var documentElement = getDocumentElement(offsetParent);\n var rect = getBoundingClientRect(elementOrVirtualElement, offsetParentIsScaled, isFixed);\n var scroll = {\n scrollLeft: 0,\n scrollTop: 0\n };\n var offsets = {\n x: 0,\n y: 0\n };\n\n if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n if (getNodeName(offsetParent) !== 'body' || // https://github.com/popperjs/popper-core/issues/1078\n isScrollParent(documentElement)) {\n scroll = getNodeScroll(offsetParent);\n }\n\n if (isHTMLElement(offsetParent)) {\n offsets = getBoundingClientRect(offsetParent, true);\n offsets.x += offsetParent.clientLeft;\n offsets.y += offsetParent.clientTop;\n } else if (documentElement) {\n offsets.x = getWindowScrollBarX(documentElement);\n }\n }\n\n return {\n x: rect.left + scroll.scrollLeft - offsets.x,\n y: rect.top + scroll.scrollTop - offsets.y,\n width: rect.width,\n height: rect.height\n };\n}","import getWindowScroll from \"./getWindowScroll.js\";\nimport getWindow from \"./getWindow.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport getHTMLElementScroll from \"./getHTMLElementScroll.js\";\nexport default function getNodeScroll(node) {\n if (node === getWindow(node) || !isHTMLElement(node)) {\n return getWindowScroll(node);\n } else {\n return getHTMLElementScroll(node);\n }\n}","export default function getHTMLElementScroll(element) {\n return {\n scrollLeft: element.scrollLeft,\n scrollTop: element.scrollTop\n };\n}","import { modifierPhases } from \"../enums.js\"; // source: https://stackoverflow.com/questions/49875255\n\nfunction order(modifiers) {\n var map = new Map();\n var visited = new Set();\n var result = [];\n modifiers.forEach(function (modifier) {\n map.set(modifier.name, modifier);\n }); // On visiting object, check for its dependencies and visit them recursively\n\n function sort(modifier) {\n visited.add(modifier.name);\n var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []);\n requires.forEach(function (dep) {\n if (!visited.has(dep)) {\n var depModifier = map.get(dep);\n\n if (depModifier) {\n sort(depModifier);\n }\n }\n });\n result.push(modifier);\n }\n\n modifiers.forEach(function (modifier) {\n if (!visited.has(modifier.name)) {\n // check for visited object\n sort(modifier);\n }\n });\n return result;\n}\n\nexport default function orderModifiers(modifiers) {\n // order based on dependencies\n var orderedModifiers = order(modifiers); // order based on phase\n\n return modifierPhases.reduce(function (acc, phase) {\n return acc.concat(orderedModifiers.filter(function (modifier) {\n return modifier.phase === phase;\n }));\n }, []);\n}","import getCompositeRect from \"./dom-utils/getCompositeRect.js\";\nimport getLayoutRect from \"./dom-utils/getLayoutRect.js\";\nimport listScrollParents from \"./dom-utils/listScrollParents.js\";\nimport getOffsetParent from \"./dom-utils/getOffsetParent.js\";\nimport orderModifiers from \"./utils/orderModifiers.js\";\nimport debounce from \"./utils/debounce.js\";\nimport mergeByName from \"./utils/mergeByName.js\";\nimport detectOverflow from \"./utils/detectOverflow.js\";\nimport { isElement } from \"./dom-utils/instanceOf.js\";\nvar DEFAULT_OPTIONS = {\n placement: 'bottom',\n modifiers: [],\n strategy: 'absolute'\n};\n\nfunction areValidElements() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return !args.some(function (element) {\n return !(element && typeof element.getBoundingClientRect === 'function');\n });\n}\n\nexport function popperGenerator(generatorOptions) {\n if (generatorOptions === void 0) {\n generatorOptions = {};\n }\n\n var _generatorOptions = generatorOptions,\n _generatorOptions$def = _generatorOptions.defaultModifiers,\n defaultModifiers = _generatorOptions$def === void 0 ? [] : _generatorOptions$def,\n _generatorOptions$def2 = _generatorOptions.defaultOptions,\n defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2;\n return function createPopper(reference, popper, options) {\n if (options === void 0) {\n options = defaultOptions;\n }\n\n var state = {\n placement: 'bottom',\n orderedModifiers: [],\n options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions),\n modifiersData: {},\n elements: {\n reference: reference,\n popper: popper\n },\n attributes: {},\n styles: {}\n };\n var effectCleanupFns = [];\n var isDestroyed = false;\n var instance = {\n state: state,\n setOptions: function setOptions(setOptionsAction) {\n var options = typeof setOptionsAction === 'function' ? setOptionsAction(state.options) : setOptionsAction;\n cleanupModifierEffects();\n state.options = Object.assign({}, defaultOptions, state.options, options);\n state.scrollParents = {\n reference: isElement(reference) ? listScrollParents(reference) : reference.contextElement ? listScrollParents(reference.contextElement) : [],\n popper: listScrollParents(popper)\n }; // Orders the modifiers based on their dependencies and `phase`\n // properties\n\n var orderedModifiers = orderModifiers(mergeByName([].concat(defaultModifiers, state.options.modifiers))); // Strip out disabled modifiers\n\n state.orderedModifiers = orderedModifiers.filter(function (m) {\n return m.enabled;\n });\n runModifierEffects();\n return instance.update();\n },\n // Sync update – it will always be executed, even if not necessary. This\n // is useful for low frequency updates where sync behavior simplifies the\n // logic.\n // For high frequency updates (e.g. `resize` and `scroll` events), always\n // prefer the async Popper#update method\n forceUpdate: function forceUpdate() {\n if (isDestroyed) {\n return;\n }\n\n var _state$elements = state.elements,\n reference = _state$elements.reference,\n popper = _state$elements.popper; // Don't proceed if `reference` or `popper` are not valid elements\n // anymore\n\n if (!areValidElements(reference, popper)) {\n return;\n } // Store the reference and popper rects to be read by modifiers\n\n\n state.rects = {\n reference: getCompositeRect(reference, getOffsetParent(popper), state.options.strategy === 'fixed'),\n popper: getLayoutRect(popper)\n }; // Modifiers have the ability to reset the current update cycle. The\n // most common use case for this is the `flip` modifier changing the\n // placement, which then needs to re-run all the modifiers, because the\n // logic was previously ran for the previous placement and is therefore\n // stale/incorrect\n\n state.reset = false;\n state.placement = state.options.placement; // On each update cycle, the `modifiersData` property for each modifier\n // is filled with the initial data specified by the modifier. This means\n // it doesn't persist and is fresh on each update.\n // To ensure persistent data, use `${name}#persistent`\n\n state.orderedModifiers.forEach(function (modifier) {\n return state.modifiersData[modifier.name] = Object.assign({}, modifier.data);\n });\n\n for (var index = 0; index < state.orderedModifiers.length; index++) {\n if (state.reset === true) {\n state.reset = false;\n index = -1;\n continue;\n }\n\n var _state$orderedModifie = state.orderedModifiers[index],\n fn = _state$orderedModifie.fn,\n _state$orderedModifie2 = _state$orderedModifie.options,\n _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2,\n name = _state$orderedModifie.name;\n\n if (typeof fn === 'function') {\n state = fn({\n state: state,\n options: _options,\n name: name,\n instance: instance\n }) || state;\n }\n }\n },\n // Async and optimistically optimized update – it will not be executed if\n // not necessary (debounced to run at most once-per-tick)\n update: debounce(function () {\n return new Promise(function (resolve) {\n instance.forceUpdate();\n resolve(state);\n });\n }),\n destroy: function destroy() {\n cleanupModifierEffects();\n isDestroyed = true;\n }\n };\n\n if (!areValidElements(reference, popper)) {\n return instance;\n }\n\n instance.setOptions(options).then(function (state) {\n if (!isDestroyed && options.onFirstUpdate) {\n options.onFirstUpdate(state);\n }\n }); // Modifiers have the ability to execute arbitrary code before the first\n // update cycle runs. They will be executed in the same order as the update\n // cycle. This is useful when a modifier adds some persistent data that\n // other modifiers need to use, but the modifier is run after the dependent\n // one.\n\n function runModifierEffects() {\n state.orderedModifiers.forEach(function (_ref) {\n var name = _ref.name,\n _ref$options = _ref.options,\n options = _ref$options === void 0 ? {} : _ref$options,\n effect = _ref.effect;\n\n if (typeof effect === 'function') {\n var cleanupFn = effect({\n state: state,\n name: name,\n instance: instance,\n options: options\n });\n\n var noopFn = function noopFn() {};\n\n effectCleanupFns.push(cleanupFn || noopFn);\n }\n });\n }\n\n function cleanupModifierEffects() {\n effectCleanupFns.forEach(function (fn) {\n return fn();\n });\n effectCleanupFns = [];\n }\n\n return instance;\n };\n}\nexport var createPopper = /*#__PURE__*/popperGenerator(); // eslint-disable-next-line import/no-unused-modules\n\nexport { detectOverflow };","export default function debounce(fn) {\n var pending;\n return function () {\n if (!pending) {\n pending = new Promise(function (resolve) {\n Promise.resolve().then(function () {\n pending = undefined;\n resolve(fn());\n });\n });\n }\n\n return pending;\n };\n}","export default function mergeByName(modifiers) {\n var merged = modifiers.reduce(function (merged, current) {\n var existing = merged[current.name];\n merged[current.name] = existing ? Object.assign({}, existing, current, {\n options: Object.assign({}, existing.options, current.options),\n data: Object.assign({}, existing.data, current.data)\n }) : current;\n return merged;\n }, {}); // IE11 does not support Object.values\n\n return Object.keys(merged).map(function (key) {\n return merged[key];\n });\n}","import { popperGenerator, detectOverflow } from \"./createPopper.js\";\nimport eventListeners from \"./modifiers/eventListeners.js\";\nimport popperOffsets from \"./modifiers/popperOffsets.js\";\nimport computeStyles from \"./modifiers/computeStyles.js\";\nimport applyStyles from \"./modifiers/applyStyles.js\";\nvar defaultModifiers = [eventListeners, popperOffsets, computeStyles, applyStyles];\nvar createPopper = /*#__PURE__*/popperGenerator({\n defaultModifiers: defaultModifiers\n}); // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper, popperGenerator, defaultModifiers, detectOverflow };","import { popperGenerator, detectOverflow } from \"./createPopper.js\";\nimport eventListeners from \"./modifiers/eventListeners.js\";\nimport popperOffsets from \"./modifiers/popperOffsets.js\";\nimport computeStyles from \"./modifiers/computeStyles.js\";\nimport applyStyles from \"./modifiers/applyStyles.js\";\nimport offset from \"./modifiers/offset.js\";\nimport flip from \"./modifiers/flip.js\";\nimport preventOverflow from \"./modifiers/preventOverflow.js\";\nimport arrow from \"./modifiers/arrow.js\";\nimport hide from \"./modifiers/hide.js\";\nvar defaultModifiers = [eventListeners, popperOffsets, computeStyles, applyStyles, offset, flip, preventOverflow, arrow, hide];\nvar createPopper = /*#__PURE__*/popperGenerator({\n defaultModifiers: defaultModifiers\n}); // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper, popperGenerator, defaultModifiers, detectOverflow }; // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper as createPopperLite } from \"./popper-lite.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport * from \"./modifiers/index.js\";","/**\n * --------------------------------------------------------------------------\n * Bootstrap dropdown.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport * as Popper from '@popperjs/core'\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport Manipulator from './dom/manipulator.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport {\n defineJQueryPlugin,\n execute,\n getElement,\n getNextActiveElement,\n isDisabled,\n isElement,\n isRTL,\n isVisible,\n noop\n} from './util/index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'dropdown'\nconst DATA_KEY = 'bs.dropdown'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst ESCAPE_KEY = 'Escape'\nconst TAB_KEY = 'Tab'\nconst ARROW_UP_KEY = 'ArrowUp'\nconst ARROW_DOWN_KEY = 'ArrowDown'\nconst RIGHT_MOUSE_BUTTON = 2 // MouseEvent.button value for the secondary button, usually the right button\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_DROPUP = 'dropup'\nconst CLASS_NAME_DROPEND = 'dropend'\nconst CLASS_NAME_DROPSTART = 'dropstart'\nconst CLASS_NAME_DROPUP_CENTER = 'dropup-center'\nconst CLASS_NAME_DROPDOWN_CENTER = 'dropdown-center'\n\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"dropdown\"]:not(.disabled):not(:disabled)'\nconst SELECTOR_DATA_TOGGLE_SHOWN = `${SELECTOR_DATA_TOGGLE}.${CLASS_NAME_SHOW}`\nconst SELECTOR_MENU = '.dropdown-menu'\nconst SELECTOR_NAVBAR = '.navbar'\nconst SELECTOR_NAVBAR_NAV = '.navbar-nav'\nconst SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)'\n\nconst PLACEMENT_TOP = isRTL() ? 'top-end' : 'top-start'\nconst PLACEMENT_TOPEND = isRTL() ? 'top-start' : 'top-end'\nconst PLACEMENT_BOTTOM = isRTL() ? 'bottom-end' : 'bottom-start'\nconst PLACEMENT_BOTTOMEND = isRTL() ? 'bottom-start' : 'bottom-end'\nconst PLACEMENT_RIGHT = isRTL() ? 'left-start' : 'right-start'\nconst PLACEMENT_LEFT = isRTL() ? 'right-start' : 'left-start'\nconst PLACEMENT_TOPCENTER = 'top'\nconst PLACEMENT_BOTTOMCENTER = 'bottom'\n\nconst Default = {\n autoClose: true,\n boundary: 'clippingParents',\n display: 'dynamic',\n offset: [0, 2],\n popperConfig: null,\n reference: 'toggle'\n}\n\nconst DefaultType = {\n autoClose: '(boolean|string)',\n boundary: '(string|element)',\n display: 'string',\n offset: '(array|string|function)',\n popperConfig: '(null|object|function)',\n reference: '(string|element|object)'\n}\n\n/**\n * Class definition\n */\n\nclass Dropdown extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n this._popper = null\n this._parent = this._element.parentNode // dropdown wrapper\n // TODO: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.3/forms/input-group/\n this._menu = SelectorEngine.next(this._element, SELECTOR_MENU)[0] ||\n SelectorEngine.prev(this._element, SELECTOR_MENU)[0] ||\n SelectorEngine.findOne(SELECTOR_MENU, this._parent)\n this._inNavbar = this._detectNavbar()\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n toggle() {\n return this._isShown() ? this.hide() : this.show()\n }\n\n show() {\n if (isDisabled(this._element) || this._isShown()) {\n return\n }\n\n const relatedTarget = {\n relatedTarget: this._element\n }\n\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW, relatedTarget)\n\n if (showEvent.defaultPrevented) {\n return\n }\n\n this._createPopper()\n\n // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n if ('ontouchstart' in document.documentElement && !this._parent.closest(SELECTOR_NAVBAR_NAV)) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.on(element, 'mouseover', noop)\n }\n }\n\n this._element.focus()\n this._element.setAttribute('aria-expanded', true)\n\n this._menu.classList.add(CLASS_NAME_SHOW)\n this._element.classList.add(CLASS_NAME_SHOW)\n EventHandler.trigger(this._element, EVENT_SHOWN, relatedTarget)\n }\n\n hide() {\n if (isDisabled(this._element) || !this._isShown()) {\n return\n }\n\n const relatedTarget = {\n relatedTarget: this._element\n }\n\n this._completeHide(relatedTarget)\n }\n\n dispose() {\n if (this._popper) {\n this._popper.destroy()\n }\n\n super.dispose()\n }\n\n update() {\n this._inNavbar = this._detectNavbar()\n if (this._popper) {\n this._popper.update()\n }\n }\n\n // Private\n _completeHide(relatedTarget) {\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE, relatedTarget)\n if (hideEvent.defaultPrevented) {\n return\n }\n\n // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n if ('ontouchstart' in document.documentElement) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.off(element, 'mouseover', noop)\n }\n }\n\n if (this._popper) {\n this._popper.destroy()\n }\n\n this._menu.classList.remove(CLASS_NAME_SHOW)\n this._element.classList.remove(CLASS_NAME_SHOW)\n this._element.setAttribute('aria-expanded', 'false')\n Manipulator.removeDataAttribute(this._menu, 'popper')\n EventHandler.trigger(this._element, EVENT_HIDDEN, relatedTarget)\n }\n\n _getConfig(config) {\n config = super._getConfig(config)\n\n if (typeof config.reference === 'object' && !isElement(config.reference) &&\n typeof config.reference.getBoundingClientRect !== 'function'\n ) {\n // Popper virtual elements require a getBoundingClientRect method\n throw new TypeError(`${NAME.toUpperCase()}: Option \"reference\" provided type \"object\" without a required \"getBoundingClientRect\" method.`)\n }\n\n return config\n }\n\n _createPopper() {\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap\\'s dropdowns require Popper (https://popper.js.org)')\n }\n\n let referenceElement = this._element\n\n if (this._config.reference === 'parent') {\n referenceElement = this._parent\n } else if (isElement(this._config.reference)) {\n referenceElement = getElement(this._config.reference)\n } else if (typeof this._config.reference === 'object') {\n referenceElement = this._config.reference\n }\n\n const popperConfig = this._getPopperConfig()\n this._popper = Popper.createPopper(referenceElement, this._menu, popperConfig)\n }\n\n _isShown() {\n return this._menu.classList.contains(CLASS_NAME_SHOW)\n }\n\n _getPlacement() {\n const parentDropdown = this._parent\n\n if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) {\n return PLACEMENT_RIGHT\n }\n\n if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) {\n return PLACEMENT_LEFT\n }\n\n if (parentDropdown.classList.contains(CLASS_NAME_DROPUP_CENTER)) {\n return PLACEMENT_TOPCENTER\n }\n\n if (parentDropdown.classList.contains(CLASS_NAME_DROPDOWN_CENTER)) {\n return PLACEMENT_BOTTOMCENTER\n }\n\n // We need to trim the value because custom properties can also include spaces\n const isEnd = getComputedStyle(this._menu).getPropertyValue('--bs-position').trim() === 'end'\n\n if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {\n return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP\n }\n\n return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM\n }\n\n _detectNavbar() {\n return this._element.closest(SELECTOR_NAVBAR) !== null\n }\n\n _getOffset() {\n const { offset } = this._config\n\n if (typeof offset === 'string') {\n return offset.split(',').map(value => Number.parseInt(value, 10))\n }\n\n if (typeof offset === 'function') {\n return popperData => offset(popperData, this._element)\n }\n\n return offset\n }\n\n _getPopperConfig() {\n const defaultBsPopperConfig = {\n placement: this._getPlacement(),\n modifiers: [{\n name: 'preventOverflow',\n options: {\n boundary: this._config.boundary\n }\n },\n {\n name: 'offset',\n options: {\n offset: this._getOffset()\n }\n }]\n }\n\n // Disable Popper if we have a static display or Dropdown is in Navbar\n if (this._inNavbar || this._config.display === 'static') {\n Manipulator.setDataAttribute(this._menu, 'popper', 'static') // TODO: v6 remove\n defaultBsPopperConfig.modifiers = [{\n name: 'applyStyles',\n enabled: false\n }]\n }\n\n return {\n ...defaultBsPopperConfig,\n ...execute(this._config.popperConfig, [defaultBsPopperConfig])\n }\n }\n\n _selectMenuItem({ key, target }) {\n const items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(element => isVisible(element))\n\n if (!items.length) {\n return\n }\n\n // if target isn't included in items (e.g. when expanding the dropdown)\n // allow cycling to get the last item in case key equals ARROW_UP_KEY\n getNextActiveElement(items, target, key === ARROW_DOWN_KEY, !items.includes(target)).focus()\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Dropdown.getOrCreateInstance(this, config)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n })\n }\n\n static clearMenus(event) {\n if (event.button === RIGHT_MOUSE_BUTTON || (event.type === 'keyup' && event.key !== TAB_KEY)) {\n return\n }\n\n const openToggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE_SHOWN)\n\n for (const toggle of openToggles) {\n const context = Dropdown.getInstance(toggle)\n if (!context || context._config.autoClose === false) {\n continue\n }\n\n const composedPath = event.composedPath()\n const isMenuTarget = composedPath.includes(context._menu)\n if (\n composedPath.includes(context._element) ||\n (context._config.autoClose === 'inside' && !isMenuTarget) ||\n (context._config.autoClose === 'outside' && isMenuTarget)\n ) {\n continue\n }\n\n // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu\n if (context._menu.contains(event.target) && ((event.type === 'keyup' && event.key === TAB_KEY) || /input|select|option|textarea|form/i.test(event.target.tagName))) {\n continue\n }\n\n const relatedTarget = { relatedTarget: context._element }\n\n if (event.type === 'click') {\n relatedTarget.clickEvent = event\n }\n\n context._completeHide(relatedTarget)\n }\n }\n\n static dataApiKeydownHandler(event) {\n // If not an UP | DOWN | ESCAPE key => not a dropdown command\n // If input/textarea && if key is other than ESCAPE => not a dropdown command\n\n const isInput = /input|textarea/i.test(event.target.tagName)\n const isEscapeEvent = event.key === ESCAPE_KEY\n const isUpOrDownEvent = [ARROW_UP_KEY, ARROW_DOWN_KEY].includes(event.key)\n\n if (!isUpOrDownEvent && !isEscapeEvent) {\n return\n }\n\n if (isInput && !isEscapeEvent) {\n return\n }\n\n event.preventDefault()\n\n // TODO: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.3/forms/input-group/\n const getToggleButton = this.matches(SELECTOR_DATA_TOGGLE) ?\n this :\n (SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE)[0] ||\n SelectorEngine.next(this, SELECTOR_DATA_TOGGLE)[0] ||\n SelectorEngine.findOne(SELECTOR_DATA_TOGGLE, event.delegateTarget.parentNode))\n\n const instance = Dropdown.getOrCreateInstance(getToggleButton)\n\n if (isUpOrDownEvent) {\n event.stopPropagation()\n instance.show()\n instance._selectMenuItem(event)\n return\n }\n\n if (instance._isShown()) { // else is escape and we check if it is shown\n event.stopPropagation()\n instance.hide()\n getToggleButton.focus()\n }\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE, Dropdown.dataApiKeydownHandler)\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler)\nEventHandler.on(document, EVENT_CLICK_DATA_API, Dropdown.clearMenus)\nEventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus)\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n event.preventDefault()\n Dropdown.getOrCreateInstance(this).toggle()\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Dropdown)\n\nexport default Dropdown\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap util/backdrop.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport EventHandler from '../dom/event-handler.js'\nimport Config from './config.js'\nimport { execute, executeAfterTransition, getElement, reflow } from './index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'backdrop'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\nconst EVENT_MOUSEDOWN = `mousedown.bs.${NAME}`\n\nconst Default = {\n className: 'modal-backdrop',\n clickCallback: null,\n isAnimated: false,\n isVisible: true, // if false, we use the backdrop helper without adding any element to the dom\n rootElement: 'body' // give the choice to place backdrop under different elements\n}\n\nconst DefaultType = {\n className: 'string',\n clickCallback: '(function|null)',\n isAnimated: 'boolean',\n isVisible: 'boolean',\n rootElement: '(element|string)'\n}\n\n/**\n * Class definition\n */\n\nclass Backdrop extends Config {\n constructor(config) {\n super()\n this._config = this._getConfig(config)\n this._isAppended = false\n this._element = null\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n show(callback) {\n if (!this._config.isVisible) {\n execute(callback)\n return\n }\n\n this._append()\n\n const element = this._getElement()\n if (this._config.isAnimated) {\n reflow(element)\n }\n\n element.classList.add(CLASS_NAME_SHOW)\n\n this._emulateAnimation(() => {\n execute(callback)\n })\n }\n\n hide(callback) {\n if (!this._config.isVisible) {\n execute(callback)\n return\n }\n\n this._getElement().classList.remove(CLASS_NAME_SHOW)\n\n this._emulateAnimation(() => {\n this.dispose()\n execute(callback)\n })\n }\n\n dispose() {\n if (!this._isAppended) {\n return\n }\n\n EventHandler.off(this._element, EVENT_MOUSEDOWN)\n\n this._element.remove()\n this._isAppended = false\n }\n\n // Private\n _getElement() {\n if (!this._element) {\n const backdrop = document.createElement('div')\n backdrop.className = this._config.className\n if (this._config.isAnimated) {\n backdrop.classList.add(CLASS_NAME_FADE)\n }\n\n this._element = backdrop\n }\n\n return this._element\n }\n\n _configAfterMerge(config) {\n // use getElement() with the default \"body\" to get a fresh Element on each instantiation\n config.rootElement = getElement(config.rootElement)\n return config\n }\n\n _append() {\n if (this._isAppended) {\n return\n }\n\n const element = this._getElement()\n this._config.rootElement.append(element)\n\n EventHandler.on(element, EVENT_MOUSEDOWN, () => {\n execute(this._config.clickCallback)\n })\n\n this._isAppended = true\n }\n\n _emulateAnimation(callback) {\n executeAfterTransition(callback, this._getElement(), this._config.isAnimated)\n }\n}\n\nexport default Backdrop\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap util/focustrap.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport EventHandler from '../dom/event-handler.js'\nimport SelectorEngine from '../dom/selector-engine.js'\nimport Config from './config.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'focustrap'\nconst DATA_KEY = 'bs.focustrap'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst EVENT_FOCUSIN = `focusin${EVENT_KEY}`\nconst EVENT_KEYDOWN_TAB = `keydown.tab${EVENT_KEY}`\n\nconst TAB_KEY = 'Tab'\nconst TAB_NAV_FORWARD = 'forward'\nconst TAB_NAV_BACKWARD = 'backward'\n\nconst Default = {\n autofocus: true,\n trapElement: null // The element to trap focus inside of\n}\n\nconst DefaultType = {\n autofocus: 'boolean',\n trapElement: 'element'\n}\n\n/**\n * Class definition\n */\n\nclass FocusTrap extends Config {\n constructor(config) {\n super()\n this._config = this._getConfig(config)\n this._isActive = false\n this._lastTabNavDirection = null\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n activate() {\n if (this._isActive) {\n return\n }\n\n if (this._config.autofocus) {\n this._config.trapElement.focus()\n }\n\n EventHandler.off(document, EVENT_KEY) // guard against infinite focus loop\n EventHandler.on(document, EVENT_FOCUSIN, event => this._handleFocusin(event))\n EventHandler.on(document, EVENT_KEYDOWN_TAB, event => this._handleKeydown(event))\n\n this._isActive = true\n }\n\n deactivate() {\n if (!this._isActive) {\n return\n }\n\n this._isActive = false\n EventHandler.off(document, EVENT_KEY)\n }\n\n // Private\n _handleFocusin(event) {\n const { trapElement } = this._config\n\n if (event.target === document || event.target === trapElement || trapElement.contains(event.target)) {\n return\n }\n\n const elements = SelectorEngine.focusableChildren(trapElement)\n\n if (elements.length === 0) {\n trapElement.focus()\n } else if (this._lastTabNavDirection === TAB_NAV_BACKWARD) {\n elements[elements.length - 1].focus()\n } else {\n elements[0].focus()\n }\n }\n\n _handleKeydown(event) {\n if (event.key !== TAB_KEY) {\n return\n }\n\n this._lastTabNavDirection = event.shiftKey ? TAB_NAV_BACKWARD : TAB_NAV_FORWARD\n }\n}\n\nexport default FocusTrap\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap util/scrollBar.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport Manipulator from '../dom/manipulator.js'\nimport SelectorEngine from '../dom/selector-engine.js'\nimport { isElement } from './index.js'\n\n/**\n * Constants\n */\n\nconst SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top'\nconst SELECTOR_STICKY_CONTENT = '.sticky-top'\nconst PROPERTY_PADDING = 'padding-right'\nconst PROPERTY_MARGIN = 'margin-right'\n\n/**\n * Class definition\n */\n\nclass ScrollBarHelper {\n constructor() {\n this._element = document.body\n }\n\n // Public\n getWidth() {\n // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes\n const documentWidth = document.documentElement.clientWidth\n return Math.abs(window.innerWidth - documentWidth)\n }\n\n hide() {\n const width = this.getWidth()\n this._disableOverFlow()\n // give padding to element to balance the hidden scrollbar width\n this._setElementAttributes(this._element, PROPERTY_PADDING, calculatedValue => calculatedValue + width)\n // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth\n this._setElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING, calculatedValue => calculatedValue + width)\n this._setElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN, calculatedValue => calculatedValue - width)\n }\n\n reset() {\n this._resetElementAttributes(this._element, 'overflow')\n this._resetElementAttributes(this._element, PROPERTY_PADDING)\n this._resetElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING)\n this._resetElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN)\n }\n\n isOverflowing() {\n return this.getWidth() > 0\n }\n\n // Private\n _disableOverFlow() {\n this._saveInitialAttribute(this._element, 'overflow')\n this._element.style.overflow = 'hidden'\n }\n\n _setElementAttributes(selector, styleProperty, callback) {\n const scrollbarWidth = this.getWidth()\n const manipulationCallBack = element => {\n if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) {\n return\n }\n\n this._saveInitialAttribute(element, styleProperty)\n const calculatedValue = window.getComputedStyle(element).getPropertyValue(styleProperty)\n element.style.setProperty(styleProperty, `${callback(Number.parseFloat(calculatedValue))}px`)\n }\n\n this._applyManipulationCallback(selector, manipulationCallBack)\n }\n\n _saveInitialAttribute(element, styleProperty) {\n const actualValue = element.style.getPropertyValue(styleProperty)\n if (actualValue) {\n Manipulator.setDataAttribute(element, styleProperty, actualValue)\n }\n }\n\n _resetElementAttributes(selector, styleProperty) {\n const manipulationCallBack = element => {\n const value = Manipulator.getDataAttribute(element, styleProperty)\n // We only want to remove the property if the value is `null`; the value can also be zero\n if (value === null) {\n element.style.removeProperty(styleProperty)\n return\n }\n\n Manipulator.removeDataAttribute(element, styleProperty)\n element.style.setProperty(styleProperty, value)\n }\n\n this._applyManipulationCallback(selector, manipulationCallBack)\n }\n\n _applyManipulationCallback(selector, callBack) {\n if (isElement(selector)) {\n callBack(selector)\n return\n }\n\n for (const sel of SelectorEngine.find(selector, this._element)) {\n callBack(sel)\n }\n }\n}\n\nexport default ScrollBarHelper\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap modal.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport Backdrop from './util/backdrop.js'\nimport { enableDismissTrigger } from './util/component-functions.js'\nimport FocusTrap from './util/focustrap.js'\nimport { defineJQueryPlugin, isRTL, isVisible, reflow } from './util/index.js'\nimport ScrollBarHelper from './util/scrollbar.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'modal'\nconst DATA_KEY = 'bs.modal'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst ESCAPE_KEY = 'Escape'\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_RESIZE = `resize${EVENT_KEY}`\nconst EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`\nconst EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY}`\nconst EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_OPEN = 'modal-open'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_STATIC = 'modal-static'\n\nconst OPEN_SELECTOR = '.modal.show'\nconst SELECTOR_DIALOG = '.modal-dialog'\nconst SELECTOR_MODAL_BODY = '.modal-body'\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"modal\"]'\n\nconst Default = {\n backdrop: true,\n focus: true,\n keyboard: true\n}\n\nconst DefaultType = {\n backdrop: '(boolean|string)',\n focus: 'boolean',\n keyboard: 'boolean'\n}\n\n/**\n * Class definition\n */\n\nclass Modal extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element)\n this._backdrop = this._initializeBackDrop()\n this._focustrap = this._initializeFocusTrap()\n this._isShown = false\n this._isTransitioning = false\n this._scrollBar = new ScrollBarHelper()\n\n this._addEventListeners()\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n toggle(relatedTarget) {\n return this._isShown ? this.hide() : this.show(relatedTarget)\n }\n\n show(relatedTarget) {\n if (this._isShown || this._isTransitioning) {\n return\n }\n\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW, {\n relatedTarget\n })\n\n if (showEvent.defaultPrevented) {\n return\n }\n\n this._isShown = true\n this._isTransitioning = true\n\n this._scrollBar.hide()\n\n document.body.classList.add(CLASS_NAME_OPEN)\n\n this._adjustDialog()\n\n this._backdrop.show(() => this._showElement(relatedTarget))\n }\n\n hide() {\n if (!this._isShown || this._isTransitioning) {\n return\n }\n\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE)\n\n if (hideEvent.defaultPrevented) {\n return\n }\n\n this._isShown = false\n this._isTransitioning = true\n this._focustrap.deactivate()\n\n this._element.classList.remove(CLASS_NAME_SHOW)\n\n this._queueCallback(() => this._hideModal(), this._element, this._isAnimated())\n }\n\n dispose() {\n EventHandler.off(window, EVENT_KEY)\n EventHandler.off(this._dialog, EVENT_KEY)\n\n this._backdrop.dispose()\n this._focustrap.deactivate()\n\n super.dispose()\n }\n\n handleUpdate() {\n this._adjustDialog()\n }\n\n // Private\n _initializeBackDrop() {\n return new Backdrop({\n isVisible: Boolean(this._config.backdrop), // 'static' option will be translated to true, and booleans will keep their value,\n isAnimated: this._isAnimated()\n })\n }\n\n _initializeFocusTrap() {\n return new FocusTrap({\n trapElement: this._element\n })\n }\n\n _showElement(relatedTarget) {\n // try to append dynamic modal\n if (!document.body.contains(this._element)) {\n document.body.append(this._element)\n }\n\n this._element.style.display = 'block'\n this._element.removeAttribute('aria-hidden')\n this._element.setAttribute('aria-modal', true)\n this._element.setAttribute('role', 'dialog')\n this._element.scrollTop = 0\n\n const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog)\n if (modalBody) {\n modalBody.scrollTop = 0\n }\n\n reflow(this._element)\n\n this._element.classList.add(CLASS_NAME_SHOW)\n\n const transitionComplete = () => {\n if (this._config.focus) {\n this._focustrap.activate()\n }\n\n this._isTransitioning = false\n EventHandler.trigger(this._element, EVENT_SHOWN, {\n relatedTarget\n })\n }\n\n this._queueCallback(transitionComplete, this._dialog, this._isAnimated())\n }\n\n _addEventListeners() {\n EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {\n if (event.key !== ESCAPE_KEY) {\n return\n }\n\n if (this._config.keyboard) {\n this.hide()\n return\n }\n\n this._triggerBackdropTransition()\n })\n\n EventHandler.on(window, EVENT_RESIZE, () => {\n if (this._isShown && !this._isTransitioning) {\n this._adjustDialog()\n }\n })\n\n EventHandler.on(this._element, EVENT_MOUSEDOWN_DISMISS, event => {\n // a bad trick to segregate clicks that may start inside dialog but end outside, and avoid listen to scrollbar clicks\n EventHandler.one(this._element, EVENT_CLICK_DISMISS, event2 => {\n if (this._element !== event.target || this._element !== event2.target) {\n return\n }\n\n if (this._config.backdrop === 'static') {\n this._triggerBackdropTransition()\n return\n }\n\n if (this._config.backdrop) {\n this.hide()\n }\n })\n })\n }\n\n _hideModal() {\n this._element.style.display = 'none'\n this._element.setAttribute('aria-hidden', true)\n this._element.removeAttribute('aria-modal')\n this._element.removeAttribute('role')\n this._isTransitioning = false\n\n this._backdrop.hide(() => {\n document.body.classList.remove(CLASS_NAME_OPEN)\n this._resetAdjustments()\n this._scrollBar.reset()\n EventHandler.trigger(this._element, EVENT_HIDDEN)\n })\n }\n\n _isAnimated() {\n return this._element.classList.contains(CLASS_NAME_FADE)\n }\n\n _triggerBackdropTransition() {\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED)\n if (hideEvent.defaultPrevented) {\n return\n }\n\n const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight\n const initialOverflowY = this._element.style.overflowY\n // return if the following background transition hasn't yet completed\n if (initialOverflowY === 'hidden' || this._element.classList.contains(CLASS_NAME_STATIC)) {\n return\n }\n\n if (!isModalOverflowing) {\n this._element.style.overflowY = 'hidden'\n }\n\n this._element.classList.add(CLASS_NAME_STATIC)\n this._queueCallback(() => {\n this._element.classList.remove(CLASS_NAME_STATIC)\n this._queueCallback(() => {\n this._element.style.overflowY = initialOverflowY\n }, this._dialog)\n }, this._dialog)\n\n this._element.focus()\n }\n\n /**\n * The following methods are used to handle overflowing modals\n */\n\n _adjustDialog() {\n const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight\n const scrollbarWidth = this._scrollBar.getWidth()\n const isBodyOverflowing = scrollbarWidth > 0\n\n if (isBodyOverflowing && !isModalOverflowing) {\n const property = isRTL() ? 'paddingLeft' : 'paddingRight'\n this._element.style[property] = `${scrollbarWidth}px`\n }\n\n if (!isBodyOverflowing && isModalOverflowing) {\n const property = isRTL() ? 'paddingRight' : 'paddingLeft'\n this._element.style[property] = `${scrollbarWidth}px`\n }\n }\n\n _resetAdjustments() {\n this._element.style.paddingLeft = ''\n this._element.style.paddingRight = ''\n }\n\n // Static\n static jQueryInterface(config, relatedTarget) {\n return this.each(function () {\n const data = Modal.getOrCreateInstance(this, config)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config](relatedTarget)\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n const target = SelectorEngine.getElementFromSelector(this)\n\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault()\n }\n\n EventHandler.one(target, EVENT_SHOW, showEvent => {\n if (showEvent.defaultPrevented) {\n // only register focus restorer if modal will actually get shown\n return\n }\n\n EventHandler.one(target, EVENT_HIDDEN, () => {\n if (isVisible(this)) {\n this.focus()\n }\n })\n })\n\n // avoid conflict when clicking modal toggler while another one is open\n const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR)\n if (alreadyOpen) {\n Modal.getInstance(alreadyOpen).hide()\n }\n\n const data = Modal.getOrCreateInstance(target)\n\n data.toggle(this)\n})\n\nenableDismissTrigger(Modal)\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Modal)\n\nexport default Modal\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap offcanvas.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport Backdrop from './util/backdrop.js'\nimport { enableDismissTrigger } from './util/component-functions.js'\nimport FocusTrap from './util/focustrap.js'\nimport {\n defineJQueryPlugin,\n isDisabled,\n isVisible\n} from './util/index.js'\nimport ScrollBarHelper from './util/scrollbar.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'offcanvas'\nconst DATA_KEY = 'bs.offcanvas'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\nconst ESCAPE_KEY = 'Escape'\n\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_SHOWING = 'showing'\nconst CLASS_NAME_HIDING = 'hiding'\nconst CLASS_NAME_BACKDROP = 'offcanvas-backdrop'\nconst OPEN_SELECTOR = '.offcanvas.show'\n\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_RESIZE = `resize${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY}`\n\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"offcanvas\"]'\n\nconst Default = {\n backdrop: true,\n keyboard: true,\n scroll: false\n}\n\nconst DefaultType = {\n backdrop: '(boolean|string)',\n keyboard: 'boolean',\n scroll: 'boolean'\n}\n\n/**\n * Class definition\n */\n\nclass Offcanvas extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n this._isShown = false\n this._backdrop = this._initializeBackDrop()\n this._focustrap = this._initializeFocusTrap()\n this._addEventListeners()\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n toggle(relatedTarget) {\n return this._isShown ? this.hide() : this.show(relatedTarget)\n }\n\n show(relatedTarget) {\n if (this._isShown) {\n return\n }\n\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW, { relatedTarget })\n\n if (showEvent.defaultPrevented) {\n return\n }\n\n this._isShown = true\n this._backdrop.show()\n\n if (!this._config.scroll) {\n new ScrollBarHelper().hide()\n }\n\n this._element.setAttribute('aria-modal', true)\n this._element.setAttribute('role', 'dialog')\n this._element.classList.add(CLASS_NAME_SHOWING)\n\n const completeCallBack = () => {\n if (!this._config.scroll || this._config.backdrop) {\n this._focustrap.activate()\n }\n\n this._element.classList.add(CLASS_NAME_SHOW)\n this._element.classList.remove(CLASS_NAME_SHOWING)\n EventHandler.trigger(this._element, EVENT_SHOWN, { relatedTarget })\n }\n\n this._queueCallback(completeCallBack, this._element, true)\n }\n\n hide() {\n if (!this._isShown) {\n return\n }\n\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE)\n\n if (hideEvent.defaultPrevented) {\n return\n }\n\n this._focustrap.deactivate()\n this._element.blur()\n this._isShown = false\n this._element.classList.add(CLASS_NAME_HIDING)\n this._backdrop.hide()\n\n const completeCallback = () => {\n this._element.classList.remove(CLASS_NAME_SHOW, CLASS_NAME_HIDING)\n this._element.removeAttribute('aria-modal')\n this._element.removeAttribute('role')\n\n if (!this._config.scroll) {\n new ScrollBarHelper().reset()\n }\n\n EventHandler.trigger(this._element, EVENT_HIDDEN)\n }\n\n this._queueCallback(completeCallback, this._element, true)\n }\n\n dispose() {\n this._backdrop.dispose()\n this._focustrap.deactivate()\n super.dispose()\n }\n\n // Private\n _initializeBackDrop() {\n const clickCallback = () => {\n if (this._config.backdrop === 'static') {\n EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED)\n return\n }\n\n this.hide()\n }\n\n // 'static' option will be translated to true, and booleans will keep their value\n const isVisible = Boolean(this._config.backdrop)\n\n return new Backdrop({\n className: CLASS_NAME_BACKDROP,\n isVisible,\n isAnimated: true,\n rootElement: this._element.parentNode,\n clickCallback: isVisible ? clickCallback : null\n })\n }\n\n _initializeFocusTrap() {\n return new FocusTrap({\n trapElement: this._element\n })\n }\n\n _addEventListeners() {\n EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {\n if (event.key !== ESCAPE_KEY) {\n return\n }\n\n if (this._config.keyboard) {\n this.hide()\n return\n }\n\n EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED)\n })\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Offcanvas.getOrCreateInstance(this, config)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config](this)\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n const target = SelectorEngine.getElementFromSelector(this)\n\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault()\n }\n\n if (isDisabled(this)) {\n return\n }\n\n EventHandler.one(target, EVENT_HIDDEN, () => {\n // focus on trigger when it is closed\n if (isVisible(this)) {\n this.focus()\n }\n })\n\n // avoid conflict when clicking a toggler of an offcanvas, while another is open\n const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR)\n if (alreadyOpen && alreadyOpen !== target) {\n Offcanvas.getInstance(alreadyOpen).hide()\n }\n\n const data = Offcanvas.getOrCreateInstance(target)\n data.toggle(this)\n})\n\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n for (const selector of SelectorEngine.find(OPEN_SELECTOR)) {\n Offcanvas.getOrCreateInstance(selector).show()\n }\n})\n\nEventHandler.on(window, EVENT_RESIZE, () => {\n for (const element of SelectorEngine.find('[aria-modal][class*=show][class*=offcanvas-]')) {\n if (getComputedStyle(element).position !== 'fixed') {\n Offcanvas.getOrCreateInstance(element).hide()\n }\n }\n})\n\nenableDismissTrigger(Offcanvas)\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Offcanvas)\n\nexport default Offcanvas\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap util/sanitizer.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n// js-docs-start allow-list\nconst ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i\n\nexport const DefaultAllowlist = {\n // Global attributes allowed on any supplied element below.\n '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n a: ['target', 'href', 'title', 'rel'],\n area: [],\n b: [],\n br: [],\n col: [],\n code: [],\n div: [],\n em: [],\n hr: [],\n h1: [],\n h2: [],\n h3: [],\n h4: [],\n h5: [],\n h6: [],\n i: [],\n img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],\n li: [],\n ol: [],\n p: [],\n pre: [],\n s: [],\n small: [],\n span: [],\n sub: [],\n sup: [],\n strong: [],\n u: [],\n ul: []\n}\n// js-docs-end allow-list\n\nconst uriAttributes = new Set([\n 'background',\n 'cite',\n 'href',\n 'itemtype',\n 'longdesc',\n 'poster',\n 'src',\n 'xlink:href'\n])\n\n/**\n * A pattern that recognizes URLs that are safe wrt. XSS in URL navigation\n * contexts.\n *\n * Shout-out to Angular https://github.com/angular/angular/blob/15.2.8/packages/core/src/sanitization/url_sanitizer.ts#L38\n */\n// eslint-disable-next-line unicorn/better-regex\nconst SAFE_URL_PATTERN = /^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:/?#]*(?:[/?#]|$))/i\n\nconst allowedAttribute = (attribute, allowedAttributeList) => {\n const attributeName = attribute.nodeName.toLowerCase()\n\n if (allowedAttributeList.includes(attributeName)) {\n if (uriAttributes.has(attributeName)) {\n return Boolean(SAFE_URL_PATTERN.test(attribute.nodeValue))\n }\n\n return true\n }\n\n // Check if a regular expression validates the attribute.\n return allowedAttributeList.filter(attributeRegex => attributeRegex instanceof RegExp)\n .some(regex => regex.test(attributeName))\n}\n\nexport function sanitizeHtml(unsafeHtml, allowList, sanitizeFunction) {\n if (!unsafeHtml.length) {\n return unsafeHtml\n }\n\n if (sanitizeFunction && typeof sanitizeFunction === 'function') {\n return sanitizeFunction(unsafeHtml)\n }\n\n const domParser = new window.DOMParser()\n const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html')\n const elements = [].concat(...createdDocument.body.querySelectorAll('*'))\n\n for (const element of elements) {\n const elementName = element.nodeName.toLowerCase()\n\n if (!Object.keys(allowList).includes(elementName)) {\n element.remove()\n continue\n }\n\n const attributeList = [].concat(...element.attributes)\n const allowedAttributes = [].concat(allowList['*'] || [], allowList[elementName] || [])\n\n for (const attribute of attributeList) {\n if (!allowedAttribute(attribute, allowedAttributes)) {\n element.removeAttribute(attribute.nodeName)\n }\n }\n }\n\n return createdDocument.body.innerHTML\n}\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap util/template-factory.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport SelectorEngine from '../dom/selector-engine.js'\nimport Config from './config.js'\nimport { DefaultAllowlist, sanitizeHtml } from './sanitizer.js'\nimport { execute, getElement, isElement } from './index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'TemplateFactory'\n\nconst Default = {\n allowList: DefaultAllowlist,\n content: {}, // { selector : text , selector2 : text2 , }\n extraClass: '',\n html: false,\n sanitize: true,\n sanitizeFn: null,\n template: '
    '\n}\n\nconst DefaultType = {\n allowList: 'object',\n content: 'object',\n extraClass: '(string|function)',\n html: 'boolean',\n sanitize: 'boolean',\n sanitizeFn: '(null|function)',\n template: 'string'\n}\n\nconst DefaultContentType = {\n entry: '(string|element|function|null)',\n selector: '(string|element)'\n}\n\n/**\n * Class definition\n */\n\nclass TemplateFactory extends Config {\n constructor(config) {\n super()\n this._config = this._getConfig(config)\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n getContent() {\n return Object.values(this._config.content)\n .map(config => this._resolvePossibleFunction(config))\n .filter(Boolean)\n }\n\n hasContent() {\n return this.getContent().length > 0\n }\n\n changeContent(content) {\n this._checkContent(content)\n this._config.content = { ...this._config.content, ...content }\n return this\n }\n\n toHtml() {\n const templateWrapper = document.createElement('div')\n templateWrapper.innerHTML = this._maybeSanitize(this._config.template)\n\n for (const [selector, text] of Object.entries(this._config.content)) {\n this._setContent(templateWrapper, text, selector)\n }\n\n const template = templateWrapper.children[0]\n const extraClass = this._resolvePossibleFunction(this._config.extraClass)\n\n if (extraClass) {\n template.classList.add(...extraClass.split(' '))\n }\n\n return template\n }\n\n // Private\n _typeCheckConfig(config) {\n super._typeCheckConfig(config)\n this._checkContent(config.content)\n }\n\n _checkContent(arg) {\n for (const [selector, content] of Object.entries(arg)) {\n super._typeCheckConfig({ selector, entry: content }, DefaultContentType)\n }\n }\n\n _setContent(template, content, selector) {\n const templateElement = SelectorEngine.findOne(selector, template)\n\n if (!templateElement) {\n return\n }\n\n content = this._resolvePossibleFunction(content)\n\n if (!content) {\n templateElement.remove()\n return\n }\n\n if (isElement(content)) {\n this._putElementInTemplate(getElement(content), templateElement)\n return\n }\n\n if (this._config.html) {\n templateElement.innerHTML = this._maybeSanitize(content)\n return\n }\n\n templateElement.textContent = content\n }\n\n _maybeSanitize(arg) {\n return this._config.sanitize ? sanitizeHtml(arg, this._config.allowList, this._config.sanitizeFn) : arg\n }\n\n _resolvePossibleFunction(arg) {\n return execute(arg, [this])\n }\n\n _putElementInTemplate(element, templateElement) {\n if (this._config.html) {\n templateElement.innerHTML = ''\n templateElement.append(element)\n return\n }\n\n templateElement.textContent = element.textContent\n }\n}\n\nexport default TemplateFactory\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap tooltip.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport * as Popper from '@popperjs/core'\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport Manipulator from './dom/manipulator.js'\nimport { defineJQueryPlugin, execute, findShadowRoot, getElement, getUID, isRTL, noop } from './util/index.js'\nimport { DefaultAllowlist } from './util/sanitizer.js'\nimport TemplateFactory from './util/template-factory.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'tooltip'\nconst DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn'])\n\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_MODAL = 'modal'\nconst CLASS_NAME_SHOW = 'show'\n\nconst SELECTOR_TOOLTIP_INNER = '.tooltip-inner'\nconst SELECTOR_MODAL = `.${CLASS_NAME_MODAL}`\n\nconst EVENT_MODAL_HIDE = 'hide.bs.modal'\n\nconst TRIGGER_HOVER = 'hover'\nconst TRIGGER_FOCUS = 'focus'\nconst TRIGGER_CLICK = 'click'\nconst TRIGGER_MANUAL = 'manual'\n\nconst EVENT_HIDE = 'hide'\nconst EVENT_HIDDEN = 'hidden'\nconst EVENT_SHOW = 'show'\nconst EVENT_SHOWN = 'shown'\nconst EVENT_INSERTED = 'inserted'\nconst EVENT_CLICK = 'click'\nconst EVENT_FOCUSIN = 'focusin'\nconst EVENT_FOCUSOUT = 'focusout'\nconst EVENT_MOUSEENTER = 'mouseenter'\nconst EVENT_MOUSELEAVE = 'mouseleave'\n\nconst AttachmentMap = {\n AUTO: 'auto',\n TOP: 'top',\n RIGHT: isRTL() ? 'left' : 'right',\n BOTTOM: 'bottom',\n LEFT: isRTL() ? 'right' : 'left'\n}\n\nconst Default = {\n allowList: DefaultAllowlist,\n animation: true,\n boundary: 'clippingParents',\n container: false,\n customClass: '',\n delay: 0,\n fallbackPlacements: ['top', 'right', 'bottom', 'left'],\n html: false,\n offset: [0, 6],\n placement: 'top',\n popperConfig: null,\n sanitize: true,\n sanitizeFn: null,\n selector: false,\n template: '
    ' +\n '
    ' +\n '
    ' +\n '
    ',\n title: '',\n trigger: 'hover focus'\n}\n\nconst DefaultType = {\n allowList: 'object',\n animation: 'boolean',\n boundary: '(string|element)',\n container: '(string|element|boolean)',\n customClass: '(string|function)',\n delay: '(number|object)',\n fallbackPlacements: 'array',\n html: 'boolean',\n offset: '(array|string|function)',\n placement: '(string|function)',\n popperConfig: '(null|object|function)',\n sanitize: 'boolean',\n sanitizeFn: '(null|function)',\n selector: '(string|boolean)',\n template: 'string',\n title: '(string|element|function)',\n trigger: 'string'\n}\n\n/**\n * Class definition\n */\n\nclass Tooltip extends BaseComponent {\n constructor(element, config) {\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap\\'s tooltips require Popper (https://popper.js.org)')\n }\n\n super(element, config)\n\n // Private\n this._isEnabled = true\n this._timeout = 0\n this._isHovered = null\n this._activeTrigger = {}\n this._popper = null\n this._templateFactory = null\n this._newContent = null\n\n // Protected\n this.tip = null\n\n this._setListeners()\n\n if (!this._config.selector) {\n this._fixTitle()\n }\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n enable() {\n this._isEnabled = true\n }\n\n disable() {\n this._isEnabled = false\n }\n\n toggleEnabled() {\n this._isEnabled = !this._isEnabled\n }\n\n toggle() {\n if (!this._isEnabled) {\n return\n }\n\n this._activeTrigger.click = !this._activeTrigger.click\n if (this._isShown()) {\n this._leave()\n return\n }\n\n this._enter()\n }\n\n dispose() {\n clearTimeout(this._timeout)\n\n EventHandler.off(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler)\n\n if (this._element.getAttribute('data-bs-original-title')) {\n this._element.setAttribute('title', this._element.getAttribute('data-bs-original-title'))\n }\n\n this._disposePopper()\n super.dispose()\n }\n\n show() {\n if (this._element.style.display === 'none') {\n throw new Error('Please use show on visible elements')\n }\n\n if (!(this._isWithContent() && this._isEnabled)) {\n return\n }\n\n const showEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOW))\n const shadowRoot = findShadowRoot(this._element)\n const isInTheDom = (shadowRoot || this._element.ownerDocument.documentElement).contains(this._element)\n\n if (showEvent.defaultPrevented || !isInTheDom) {\n return\n }\n\n // TODO: v6 remove this or make it optional\n this._disposePopper()\n\n const tip = this._getTipElement()\n\n this._element.setAttribute('aria-describedby', tip.getAttribute('id'))\n\n const { container } = this._config\n\n if (!this._element.ownerDocument.documentElement.contains(this.tip)) {\n container.append(tip)\n EventHandler.trigger(this._element, this.constructor.eventName(EVENT_INSERTED))\n }\n\n this._popper = this._createPopper(tip)\n\n tip.classList.add(CLASS_NAME_SHOW)\n\n // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n if ('ontouchstart' in document.documentElement) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.on(element, 'mouseover', noop)\n }\n }\n\n const complete = () => {\n EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOWN))\n\n if (this._isHovered === false) {\n this._leave()\n }\n\n this._isHovered = false\n }\n\n this._queueCallback(complete, this.tip, this._isAnimated())\n }\n\n hide() {\n if (!this._isShown()) {\n return\n }\n\n const hideEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDE))\n if (hideEvent.defaultPrevented) {\n return\n }\n\n const tip = this._getTipElement()\n tip.classList.remove(CLASS_NAME_SHOW)\n\n // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n if ('ontouchstart' in document.documentElement) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.off(element, 'mouseover', noop)\n }\n }\n\n this._activeTrigger[TRIGGER_CLICK] = false\n this._activeTrigger[TRIGGER_FOCUS] = false\n this._activeTrigger[TRIGGER_HOVER] = false\n this._isHovered = null // it is a trick to support manual triggering\n\n const complete = () => {\n if (this._isWithActiveTrigger()) {\n return\n }\n\n if (!this._isHovered) {\n this._disposePopper()\n }\n\n this._element.removeAttribute('aria-describedby')\n EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDDEN))\n }\n\n this._queueCallback(complete, this.tip, this._isAnimated())\n }\n\n update() {\n if (this._popper) {\n this._popper.update()\n }\n }\n\n // Protected\n _isWithContent() {\n return Boolean(this._getTitle())\n }\n\n _getTipElement() {\n if (!this.tip) {\n this.tip = this._createTipElement(this._newContent || this._getContentForTemplate())\n }\n\n return this.tip\n }\n\n _createTipElement(content) {\n const tip = this._getTemplateFactory(content).toHtml()\n\n // TODO: remove this check in v6\n if (!tip) {\n return null\n }\n\n tip.classList.remove(CLASS_NAME_FADE, CLASS_NAME_SHOW)\n // TODO: v6 the following can be achieved with CSS only\n tip.classList.add(`bs-${this.constructor.NAME}-auto`)\n\n const tipId = getUID(this.constructor.NAME).toString()\n\n tip.setAttribute('id', tipId)\n\n if (this._isAnimated()) {\n tip.classList.add(CLASS_NAME_FADE)\n }\n\n return tip\n }\n\n setContent(content) {\n this._newContent = content\n if (this._isShown()) {\n this._disposePopper()\n this.show()\n }\n }\n\n _getTemplateFactory(content) {\n if (this._templateFactory) {\n this._templateFactory.changeContent(content)\n } else {\n this._templateFactory = new TemplateFactory({\n ...this._config,\n // the `content` var has to be after `this._config`\n // to override config.content in case of popover\n content,\n extraClass: this._resolvePossibleFunction(this._config.customClass)\n })\n }\n\n return this._templateFactory\n }\n\n _getContentForTemplate() {\n return {\n [SELECTOR_TOOLTIP_INNER]: this._getTitle()\n }\n }\n\n _getTitle() {\n return this._resolvePossibleFunction(this._config.title) || this._element.getAttribute('data-bs-original-title')\n }\n\n // Private\n _initializeOnDelegatedTarget(event) {\n return this.constructor.getOrCreateInstance(event.delegateTarget, this._getDelegateConfig())\n }\n\n _isAnimated() {\n return this._config.animation || (this.tip && this.tip.classList.contains(CLASS_NAME_FADE))\n }\n\n _isShown() {\n return this.tip && this.tip.classList.contains(CLASS_NAME_SHOW)\n }\n\n _createPopper(tip) {\n const placement = execute(this._config.placement, [this, tip, this._element])\n const attachment = AttachmentMap[placement.toUpperCase()]\n return Popper.createPopper(this._element, tip, this._getPopperConfig(attachment))\n }\n\n _getOffset() {\n const { offset } = this._config\n\n if (typeof offset === 'string') {\n return offset.split(',').map(value => Number.parseInt(value, 10))\n }\n\n if (typeof offset === 'function') {\n return popperData => offset(popperData, this._element)\n }\n\n return offset\n }\n\n _resolvePossibleFunction(arg) {\n return execute(arg, [this._element])\n }\n\n _getPopperConfig(attachment) {\n const defaultBsPopperConfig = {\n placement: attachment,\n modifiers: [\n {\n name: 'flip',\n options: {\n fallbackPlacements: this._config.fallbackPlacements\n }\n },\n {\n name: 'offset',\n options: {\n offset: this._getOffset()\n }\n },\n {\n name: 'preventOverflow',\n options: {\n boundary: this._config.boundary\n }\n },\n {\n name: 'arrow',\n options: {\n element: `.${this.constructor.NAME}-arrow`\n }\n },\n {\n name: 'preSetPlacement',\n enabled: true,\n phase: 'beforeMain',\n fn: data => {\n // Pre-set Popper's placement attribute in order to read the arrow sizes properly.\n // Otherwise, Popper mixes up the width and height dimensions since the initial arrow style is for top placement\n this._getTipElement().setAttribute('data-popper-placement', data.state.placement)\n }\n }\n ]\n }\n\n return {\n ...defaultBsPopperConfig,\n ...execute(this._config.popperConfig, [defaultBsPopperConfig])\n }\n }\n\n _setListeners() {\n const triggers = this._config.trigger.split(' ')\n\n for (const trigger of triggers) {\n if (trigger === 'click') {\n EventHandler.on(this._element, this.constructor.eventName(EVENT_CLICK), this._config.selector, event => {\n const context = this._initializeOnDelegatedTarget(event)\n context.toggle()\n })\n } else if (trigger !== TRIGGER_MANUAL) {\n const eventIn = trigger === TRIGGER_HOVER ?\n this.constructor.eventName(EVENT_MOUSEENTER) :\n this.constructor.eventName(EVENT_FOCUSIN)\n const eventOut = trigger === TRIGGER_HOVER ?\n this.constructor.eventName(EVENT_MOUSELEAVE) :\n this.constructor.eventName(EVENT_FOCUSOUT)\n\n EventHandler.on(this._element, eventIn, this._config.selector, event => {\n const context = this._initializeOnDelegatedTarget(event)\n context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true\n context._enter()\n })\n EventHandler.on(this._element, eventOut, this._config.selector, event => {\n const context = this._initializeOnDelegatedTarget(event)\n context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] =\n context._element.contains(event.relatedTarget)\n\n context._leave()\n })\n }\n }\n\n this._hideModalHandler = () => {\n if (this._element) {\n this.hide()\n }\n }\n\n EventHandler.on(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler)\n }\n\n _fixTitle() {\n const title = this._element.getAttribute('title')\n\n if (!title) {\n return\n }\n\n if (!this._element.getAttribute('aria-label') && !this._element.textContent.trim()) {\n this._element.setAttribute('aria-label', title)\n }\n\n this._element.setAttribute('data-bs-original-title', title) // DO NOT USE IT. Is only for backwards compatibility\n this._element.removeAttribute('title')\n }\n\n _enter() {\n if (this._isShown() || this._isHovered) {\n this._isHovered = true\n return\n }\n\n this._isHovered = true\n\n this._setTimeout(() => {\n if (this._isHovered) {\n this.show()\n }\n }, this._config.delay.show)\n }\n\n _leave() {\n if (this._isWithActiveTrigger()) {\n return\n }\n\n this._isHovered = false\n\n this._setTimeout(() => {\n if (!this._isHovered) {\n this.hide()\n }\n }, this._config.delay.hide)\n }\n\n _setTimeout(handler, timeout) {\n clearTimeout(this._timeout)\n this._timeout = setTimeout(handler, timeout)\n }\n\n _isWithActiveTrigger() {\n return Object.values(this._activeTrigger).includes(true)\n }\n\n _getConfig(config) {\n const dataAttributes = Manipulator.getDataAttributes(this._element)\n\n for (const dataAttribute of Object.keys(dataAttributes)) {\n if (DISALLOWED_ATTRIBUTES.has(dataAttribute)) {\n delete dataAttributes[dataAttribute]\n }\n }\n\n config = {\n ...dataAttributes,\n ...(typeof config === 'object' && config ? config : {})\n }\n config = this._mergeConfigObj(config)\n config = this._configAfterMerge(config)\n this._typeCheckConfig(config)\n return config\n }\n\n _configAfterMerge(config) {\n config.container = config.container === false ? document.body : getElement(config.container)\n\n if (typeof config.delay === 'number') {\n config.delay = {\n show: config.delay,\n hide: config.delay\n }\n }\n\n if (typeof config.title === 'number') {\n config.title = config.title.toString()\n }\n\n if (typeof config.content === 'number') {\n config.content = config.content.toString()\n }\n\n return config\n }\n\n _getDelegateConfig() {\n const config = {}\n\n for (const [key, value] of Object.entries(this._config)) {\n if (this.constructor.Default[key] !== value) {\n config[key] = value\n }\n }\n\n config.selector = false\n config.trigger = 'manual'\n\n // In the future can be replaced with:\n // const keysWithDifferentValues = Object.entries(this._config).filter(entry => this.constructor.Default[entry[0]] !== this._config[entry[0]])\n // `Object.fromEntries(keysWithDifferentValues)`\n return config\n }\n\n _disposePopper() {\n if (this._popper) {\n this._popper.destroy()\n this._popper = null\n }\n\n if (this.tip) {\n this.tip.remove()\n this.tip = null\n }\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Tooltip.getOrCreateInstance(this, config)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n })\n }\n}\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Tooltip)\n\nexport default Tooltip\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap popover.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport Tooltip from './tooltip.js'\nimport { defineJQueryPlugin } from './util/index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'popover'\n\nconst SELECTOR_TITLE = '.popover-header'\nconst SELECTOR_CONTENT = '.popover-body'\n\nconst Default = {\n ...Tooltip.Default,\n content: '',\n offset: [0, 8],\n placement: 'right',\n template: '
    ' +\n '
    ' +\n '

    ' +\n '
    ' +\n '
    ',\n trigger: 'click'\n}\n\nconst DefaultType = {\n ...Tooltip.DefaultType,\n content: '(null|string|element|function)'\n}\n\n/**\n * Class definition\n */\n\nclass Popover extends Tooltip {\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Overrides\n _isWithContent() {\n return this._getTitle() || this._getContent()\n }\n\n // Private\n _getContentForTemplate() {\n return {\n [SELECTOR_TITLE]: this._getTitle(),\n [SELECTOR_CONTENT]: this._getContent()\n }\n }\n\n _getContent() {\n return this._resolvePossibleFunction(this._config.content)\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Popover.getOrCreateInstance(this, config)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n })\n }\n}\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Popover)\n\nexport default Popover\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap scrollspy.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport { defineJQueryPlugin, getElement, isDisabled, isVisible } from './util/index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'scrollspy'\nconst DATA_KEY = 'bs.scrollspy'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst EVENT_ACTIVATE = `activate${EVENT_KEY}`\nconst EVENT_CLICK = `click${EVENT_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item'\nconst CLASS_NAME_ACTIVE = 'active'\n\nconst SELECTOR_DATA_SPY = '[data-bs-spy=\"scroll\"]'\nconst SELECTOR_TARGET_LINKS = '[href]'\nconst SELECTOR_NAV_LIST_GROUP = '.nav, .list-group'\nconst SELECTOR_NAV_LINKS = '.nav-link'\nconst SELECTOR_NAV_ITEMS = '.nav-item'\nconst SELECTOR_LIST_ITEMS = '.list-group-item'\nconst SELECTOR_LINK_ITEMS = `${SELECTOR_NAV_LINKS}, ${SELECTOR_NAV_ITEMS} > ${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`\nconst SELECTOR_DROPDOWN = '.dropdown'\nconst SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle'\n\nconst Default = {\n offset: null, // TODO: v6 @deprecated, keep it for backwards compatibility reasons\n rootMargin: '0px 0px -25%',\n smoothScroll: false,\n target: null,\n threshold: [0.1, 0.5, 1]\n}\n\nconst DefaultType = {\n offset: '(number|null)', // TODO v6 @deprecated, keep it for backwards compatibility reasons\n rootMargin: 'string',\n smoothScroll: 'boolean',\n target: 'element',\n threshold: 'array'\n}\n\n/**\n * Class definition\n */\n\nclass ScrollSpy extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n // this._element is the observablesContainer and config.target the menu links wrapper\n this._targetLinks = new Map()\n this._observableSections = new Map()\n this._rootElement = getComputedStyle(this._element).overflowY === 'visible' ? null : this._element\n this._activeTarget = null\n this._observer = null\n this._previousScrollData = {\n visibleEntryTop: 0,\n parentScrollTop: 0\n }\n this.refresh() // initialize\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n refresh() {\n this._initializeTargetsAndObservables()\n this._maybeEnableSmoothScroll()\n\n if (this._observer) {\n this._observer.disconnect()\n } else {\n this._observer = this._getNewObserver()\n }\n\n for (const section of this._observableSections.values()) {\n this._observer.observe(section)\n }\n }\n\n dispose() {\n this._observer.disconnect()\n super.dispose()\n }\n\n // Private\n _configAfterMerge(config) {\n // TODO: on v6 target should be given explicitly & remove the {target: 'ss-target'} case\n config.target = getElement(config.target) || document.body\n\n // TODO: v6 Only for backwards compatibility reasons. Use rootMargin only\n config.rootMargin = config.offset ? `${config.offset}px 0px -30%` : config.rootMargin\n\n if (typeof config.threshold === 'string') {\n config.threshold = config.threshold.split(',').map(value => Number.parseFloat(value))\n }\n\n return config\n }\n\n _maybeEnableSmoothScroll() {\n if (!this._config.smoothScroll) {\n return\n }\n\n // unregister any previous listeners\n EventHandler.off(this._config.target, EVENT_CLICK)\n\n EventHandler.on(this._config.target, EVENT_CLICK, SELECTOR_TARGET_LINKS, event => {\n const observableSection = this._observableSections.get(event.target.hash)\n if (observableSection) {\n event.preventDefault()\n const root = this._rootElement || window\n const height = observableSection.offsetTop - this._element.offsetTop\n if (root.scrollTo) {\n root.scrollTo({ top: height, behavior: 'smooth' })\n return\n }\n\n // Chrome 60 doesn't support `scrollTo`\n root.scrollTop = height\n }\n })\n }\n\n _getNewObserver() {\n const options = {\n root: this._rootElement,\n threshold: this._config.threshold,\n rootMargin: this._config.rootMargin\n }\n\n return new IntersectionObserver(entries => this._observerCallback(entries), options)\n }\n\n // The logic of selection\n _observerCallback(entries) {\n const targetElement = entry => this._targetLinks.get(`#${entry.target.id}`)\n const activate = entry => {\n this._previousScrollData.visibleEntryTop = entry.target.offsetTop\n this._process(targetElement(entry))\n }\n\n const parentScrollTop = (this._rootElement || document.documentElement).scrollTop\n const userScrollsDown = parentScrollTop >= this._previousScrollData.parentScrollTop\n this._previousScrollData.parentScrollTop = parentScrollTop\n\n for (const entry of entries) {\n if (!entry.isIntersecting) {\n this._activeTarget = null\n this._clearActiveClass(targetElement(entry))\n\n continue\n }\n\n const entryIsLowerThanPrevious = entry.target.offsetTop >= this._previousScrollData.visibleEntryTop\n // if we are scrolling down, pick the bigger offsetTop\n if (userScrollsDown && entryIsLowerThanPrevious) {\n activate(entry)\n // if parent isn't scrolled, let's keep the first visible item, breaking the iteration\n if (!parentScrollTop) {\n return\n }\n\n continue\n }\n\n // if we are scrolling up, pick the smallest offsetTop\n if (!userScrollsDown && !entryIsLowerThanPrevious) {\n activate(entry)\n }\n }\n }\n\n _initializeTargetsAndObservables() {\n this._targetLinks = new Map()\n this._observableSections = new Map()\n\n const targetLinks = SelectorEngine.find(SELECTOR_TARGET_LINKS, this._config.target)\n\n for (const anchor of targetLinks) {\n // ensure that the anchor has an id and is not disabled\n if (!anchor.hash || isDisabled(anchor)) {\n continue\n }\n\n const observableSection = SelectorEngine.findOne(decodeURI(anchor.hash), this._element)\n\n // ensure that the observableSection exists & is visible\n if (isVisible(observableSection)) {\n this._targetLinks.set(decodeURI(anchor.hash), anchor)\n this._observableSections.set(anchor.hash, observableSection)\n }\n }\n }\n\n _process(target) {\n if (this._activeTarget === target) {\n return\n }\n\n this._clearActiveClass(this._config.target)\n this._activeTarget = target\n target.classList.add(CLASS_NAME_ACTIVE)\n this._activateParents(target)\n\n EventHandler.trigger(this._element, EVENT_ACTIVATE, { relatedTarget: target })\n }\n\n _activateParents(target) {\n // Activate dropdown parents\n if (target.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {\n SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE, target.closest(SELECTOR_DROPDOWN))\n .classList.add(CLASS_NAME_ACTIVE)\n return\n }\n\n for (const listGroup of SelectorEngine.parents(target, SELECTOR_NAV_LIST_GROUP)) {\n // Set triggered links parents as active\n // With both
      and
    ')},createChildNavList:function(e){var t=this.createNavList();return e.append(t),t},generateNavEl:function(e,t){var n=a('
    ');n.attr("href","#"+e),n.text(t);var r=a("
  • ");return r.append(n),r},generateNavItem:function(e){var t=this.generateAnchor(e),n=a(e),r=n.data("toc-text")||n.text();return this.generateNavEl(t,r)},getTopLevel:function(e){for(var t=1;t<=6;t++){if(1 + + + + + + + + + + + + diff --git a/deps/font-awesome-6.4.2/css/all.css b/deps/font-awesome-6.4.2/css/all.css new file mode 100644 index 00000000..bdb6e3ae --- /dev/null +++ b/deps/font-awesome-6.4.2/css/all.css @@ -0,0 +1,7968 @@ +/*! + * Font Awesome Free 6.4.2 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + * Copyright 2023 Fonticons, Inc. + */ +.fa { + font-family: var(--fa-style-family, "Font Awesome 6 Free"); + font-weight: var(--fa-style, 900); } + +.fa, +.fa-classic, +.fa-sharp, +.fas, +.fa-solid, +.far, +.fa-regular, +.fab, +.fa-brands { + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + display: var(--fa-display, inline-block); + font-style: normal; + font-variant: normal; + line-height: 1; + text-rendering: auto; } + +.fas, +.fa-classic, +.fa-solid, +.far, +.fa-regular { + font-family: 'Font Awesome 6 Free'; } + +.fab, +.fa-brands { + font-family: 'Font Awesome 6 Brands'; } + +.fa-1x { + font-size: 1em; } + +.fa-2x { + font-size: 2em; } + +.fa-3x { + font-size: 3em; } + +.fa-4x { + font-size: 4em; } + +.fa-5x { + font-size: 5em; } + +.fa-6x { + font-size: 6em; } + +.fa-7x { + font-size: 7em; } + +.fa-8x { + font-size: 8em; } + +.fa-9x { + font-size: 9em; } + +.fa-10x { + font-size: 10em; } + +.fa-2xs { + font-size: 0.625em; + line-height: 0.1em; + vertical-align: 0.225em; } + +.fa-xs { + font-size: 0.75em; + line-height: 0.08333em; + vertical-align: 0.125em; } + +.fa-sm { + font-size: 0.875em; + line-height: 0.07143em; + vertical-align: 0.05357em; } + +.fa-lg { + font-size: 1.25em; + line-height: 0.05em; + vertical-align: -0.075em; } + +.fa-xl { + font-size: 1.5em; + line-height: 0.04167em; + vertical-align: -0.125em; } + +.fa-2xl { + font-size: 2em; + line-height: 0.03125em; + vertical-align: -0.1875em; } + +.fa-fw { + text-align: center; + width: 1.25em; } + +.fa-ul { + list-style-type: none; + margin-left: var(--fa-li-margin, 2.5em); + padding-left: 0; } + .fa-ul > li { + position: relative; } + +.fa-li { + left: calc(var(--fa-li-width, 2em) * -1); + position: absolute; + text-align: center; + width: var(--fa-li-width, 2em); + line-height: inherit; } + +.fa-border { + border-color: var(--fa-border-color, #eee); + border-radius: var(--fa-border-radius, 0.1em); + border-style: var(--fa-border-style, solid); + border-width: var(--fa-border-width, 0.08em); + padding: var(--fa-border-padding, 0.2em 0.25em 0.15em); } + +.fa-pull-left { + float: left; + margin-right: var(--fa-pull-margin, 0.3em); } + +.fa-pull-right { + float: right; + margin-left: var(--fa-pull-margin, 0.3em); } + +.fa-beat { + -webkit-animation-name: fa-beat; + animation-name: fa-beat; + -webkit-animation-delay: var(--fa-animation-delay, 0s); + animation-delay: var(--fa-animation-delay, 0s); + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 1s); + animation-duration: var(--fa-animation-duration, 1s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, ease-in-out); + animation-timing-function: var(--fa-animation-timing, ease-in-out); } + +.fa-bounce { + -webkit-animation-name: fa-bounce; + animation-name: fa-bounce; + -webkit-animation-delay: var(--fa-animation-delay, 0s); + animation-delay: var(--fa-animation-delay, 0s); + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 1s); + animation-duration: var(--fa-animation-duration, 1s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.28, 0.84, 0.42, 1)); + animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.28, 0.84, 0.42, 1)); } + +.fa-fade { + -webkit-animation-name: fa-fade; + animation-name: fa-fade; + -webkit-animation-delay: var(--fa-animation-delay, 0s); + animation-delay: var(--fa-animation-delay, 0s); + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 1s); + animation-duration: var(--fa-animation-duration, 1s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1)); + animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1)); } + +.fa-beat-fade { + -webkit-animation-name: fa-beat-fade; + animation-name: fa-beat-fade; + -webkit-animation-delay: var(--fa-animation-delay, 0s); + animation-delay: var(--fa-animation-delay, 0s); + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 1s); + animation-duration: var(--fa-animation-duration, 1s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1)); + animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1)); } + +.fa-flip { + -webkit-animation-name: fa-flip; + animation-name: fa-flip; + -webkit-animation-delay: var(--fa-animation-delay, 0s); + animation-delay: var(--fa-animation-delay, 0s); + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 1s); + animation-duration: var(--fa-animation-duration, 1s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, ease-in-out); + animation-timing-function: var(--fa-animation-timing, ease-in-out); } + +.fa-shake { + -webkit-animation-name: fa-shake; + animation-name: fa-shake; + -webkit-animation-delay: var(--fa-animation-delay, 0s); + animation-delay: var(--fa-animation-delay, 0s); + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 1s); + animation-duration: var(--fa-animation-duration, 1s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, linear); + animation-timing-function: var(--fa-animation-timing, linear); } + +.fa-spin { + -webkit-animation-name: fa-spin; + animation-name: fa-spin; + -webkit-animation-delay: var(--fa-animation-delay, 0s); + animation-delay: var(--fa-animation-delay, 0s); + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 2s); + animation-duration: var(--fa-animation-duration, 2s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, linear); + animation-timing-function: var(--fa-animation-timing, linear); } + +.fa-spin-reverse { + --fa-animation-direction: reverse; } + +.fa-pulse, +.fa-spin-pulse { + -webkit-animation-name: fa-spin; + animation-name: fa-spin; + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 1s); + animation-duration: var(--fa-animation-duration, 1s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, steps(8)); + animation-timing-function: var(--fa-animation-timing, steps(8)); } + +@media (prefers-reduced-motion: reduce) { + .fa-beat, + .fa-bounce, + .fa-fade, + .fa-beat-fade, + .fa-flip, + .fa-pulse, + .fa-shake, + .fa-spin, + .fa-spin-pulse { + -webkit-animation-delay: -1ms; + animation-delay: -1ms; + -webkit-animation-duration: 1ms; + animation-duration: 1ms; + -webkit-animation-iteration-count: 1; + animation-iteration-count: 1; + -webkit-transition-delay: 0s; + transition-delay: 0s; + -webkit-transition-duration: 0s; + transition-duration: 0s; } } + +@-webkit-keyframes fa-beat { + 0%, 90% { + -webkit-transform: scale(1); + transform: scale(1); } + 45% { + -webkit-transform: scale(var(--fa-beat-scale, 1.25)); + transform: scale(var(--fa-beat-scale, 1.25)); } } + +@keyframes fa-beat { + 0%, 90% { + -webkit-transform: scale(1); + transform: scale(1); } + 45% { + -webkit-transform: scale(var(--fa-beat-scale, 1.25)); + transform: scale(var(--fa-beat-scale, 1.25)); } } + +@-webkit-keyframes fa-bounce { + 0% { + -webkit-transform: scale(1, 1) translateY(0); + transform: scale(1, 1) translateY(0); } + 10% { + -webkit-transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0); + transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0); } + 30% { + -webkit-transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em)); + transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em)); } + 50% { + -webkit-transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0); + transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0); } + 57% { + -webkit-transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em)); + transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em)); } + 64% { + -webkit-transform: scale(1, 1) translateY(0); + transform: scale(1, 1) translateY(0); } + 100% { + -webkit-transform: scale(1, 1) translateY(0); + transform: scale(1, 1) translateY(0); } } + +@keyframes fa-bounce { + 0% { + -webkit-transform: scale(1, 1) translateY(0); + transform: scale(1, 1) translateY(0); } + 10% { + -webkit-transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0); + transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0); } + 30% { + -webkit-transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em)); + transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em)); } + 50% { + -webkit-transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0); + transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0); } + 57% { + -webkit-transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em)); + transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em)); } + 64% { + -webkit-transform: scale(1, 1) translateY(0); + transform: scale(1, 1) translateY(0); } + 100% { + -webkit-transform: scale(1, 1) translateY(0); + transform: scale(1, 1) translateY(0); } } + +@-webkit-keyframes fa-fade { + 50% { + opacity: var(--fa-fade-opacity, 0.4); } } + +@keyframes fa-fade { + 50% { + opacity: var(--fa-fade-opacity, 0.4); } } + +@-webkit-keyframes fa-beat-fade { + 0%, 100% { + opacity: var(--fa-beat-fade-opacity, 0.4); + -webkit-transform: scale(1); + transform: scale(1); } + 50% { + opacity: 1; + -webkit-transform: scale(var(--fa-beat-fade-scale, 1.125)); + transform: scale(var(--fa-beat-fade-scale, 1.125)); } } + +@keyframes fa-beat-fade { + 0%, 100% { + opacity: var(--fa-beat-fade-opacity, 0.4); + -webkit-transform: scale(1); + transform: scale(1); } + 50% { + opacity: 1; + -webkit-transform: scale(var(--fa-beat-fade-scale, 1.125)); + transform: scale(var(--fa-beat-fade-scale, 1.125)); } } + +@-webkit-keyframes fa-flip { + 50% { + -webkit-transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg)); + transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg)); } } + +@keyframes fa-flip { + 50% { + -webkit-transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg)); + transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg)); } } + +@-webkit-keyframes fa-shake { + 0% { + -webkit-transform: rotate(-15deg); + transform: rotate(-15deg); } + 4% { + -webkit-transform: rotate(15deg); + transform: rotate(15deg); } + 8%, 24% { + -webkit-transform: rotate(-18deg); + transform: rotate(-18deg); } + 12%, 28% { + -webkit-transform: rotate(18deg); + transform: rotate(18deg); } + 16% { + -webkit-transform: rotate(-22deg); + transform: rotate(-22deg); } + 20% { + -webkit-transform: rotate(22deg); + transform: rotate(22deg); } + 32% { + -webkit-transform: rotate(-12deg); + transform: rotate(-12deg); } + 36% { + -webkit-transform: rotate(12deg); + transform: rotate(12deg); } + 40%, 100% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); } } + +@keyframes fa-shake { + 0% { + -webkit-transform: rotate(-15deg); + transform: rotate(-15deg); } + 4% { + -webkit-transform: rotate(15deg); + transform: rotate(15deg); } + 8%, 24% { + -webkit-transform: rotate(-18deg); + transform: rotate(-18deg); } + 12%, 28% { + -webkit-transform: rotate(18deg); + transform: rotate(18deg); } + 16% { + -webkit-transform: rotate(-22deg); + transform: rotate(-22deg); } + 20% { + -webkit-transform: rotate(22deg); + transform: rotate(22deg); } + 32% { + -webkit-transform: rotate(-12deg); + transform: rotate(-12deg); } + 36% { + -webkit-transform: rotate(12deg); + transform: rotate(12deg); } + 40%, 100% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); } } + +@-webkit-keyframes fa-spin { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); } + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); } } + +@keyframes fa-spin { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); } + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); } } + +.fa-rotate-90 { + -webkit-transform: rotate(90deg); + transform: rotate(90deg); } + +.fa-rotate-180 { + -webkit-transform: rotate(180deg); + transform: rotate(180deg); } + +.fa-rotate-270 { + -webkit-transform: rotate(270deg); + transform: rotate(270deg); } + +.fa-flip-horizontal { + -webkit-transform: scale(-1, 1); + transform: scale(-1, 1); } + +.fa-flip-vertical { + -webkit-transform: scale(1, -1); + transform: scale(1, -1); } + +.fa-flip-both, +.fa-flip-horizontal.fa-flip-vertical { + -webkit-transform: scale(-1, -1); + transform: scale(-1, -1); } + +.fa-rotate-by { + -webkit-transform: rotate(var(--fa-rotate-angle, none)); + transform: rotate(var(--fa-rotate-angle, none)); } + +.fa-stack { + display: inline-block; + height: 2em; + line-height: 2em; + position: relative; + vertical-align: middle; + width: 2.5em; } + +.fa-stack-1x, +.fa-stack-2x { + left: 0; + position: absolute; + text-align: center; + width: 100%; + z-index: var(--fa-stack-z-index, auto); } + +.fa-stack-1x { + line-height: inherit; } + +.fa-stack-2x { + font-size: 2em; } + +.fa-inverse { + color: var(--fa-inverse, #fff); } + +/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen +readers do not read off random characters that represent icons */ + +.fa-0::before { + content: "\30"; } + +.fa-1::before { + content: "\31"; } + +.fa-2::before { + content: "\32"; } + +.fa-3::before { + content: "\33"; } + +.fa-4::before { + content: "\34"; } + +.fa-5::before { + content: "\35"; } + +.fa-6::before { + content: "\36"; } + +.fa-7::before { + content: "\37"; } + +.fa-8::before { + content: "\38"; } + +.fa-9::before { + content: "\39"; } + +.fa-fill-drip::before { + content: "\f576"; } + +.fa-arrows-to-circle::before { + content: "\e4bd"; } + +.fa-circle-chevron-right::before { + content: "\f138"; } + +.fa-chevron-circle-right::before { + content: "\f138"; } + +.fa-at::before { + content: "\40"; } + +.fa-trash-can::before { + content: "\f2ed"; } + +.fa-trash-alt::before { + content: "\f2ed"; } + +.fa-text-height::before { + content: "\f034"; } + +.fa-user-xmark::before { + content: "\f235"; } + +.fa-user-times::before { + content: "\f235"; } + +.fa-stethoscope::before { + content: "\f0f1"; } + +.fa-message::before { + content: "\f27a"; } + +.fa-comment-alt::before { + content: "\f27a"; } + +.fa-info::before { + content: "\f129"; } + +.fa-down-left-and-up-right-to-center::before { + content: "\f422"; } + +.fa-compress-alt::before { + content: "\f422"; } + +.fa-explosion::before { + content: "\e4e9"; } + +.fa-file-lines::before { + content: "\f15c"; } + +.fa-file-alt::before { + content: "\f15c"; } + +.fa-file-text::before { + content: "\f15c"; } + +.fa-wave-square::before { + content: "\f83e"; } + +.fa-ring::before { + content: "\f70b"; } + +.fa-building-un::before { + content: "\e4d9"; } + +.fa-dice-three::before { + content: "\f527"; } + +.fa-calendar-days::before { + content: "\f073"; } + +.fa-calendar-alt::before { + content: "\f073"; } + +.fa-anchor-circle-check::before { + content: "\e4aa"; } + +.fa-building-circle-arrow-right::before { + content: "\e4d1"; } + +.fa-volleyball::before { + content: "\f45f"; } + +.fa-volleyball-ball::before { + content: "\f45f"; } + +.fa-arrows-up-to-line::before { + content: "\e4c2"; } + +.fa-sort-down::before { + content: "\f0dd"; } + +.fa-sort-desc::before { + content: "\f0dd"; } + +.fa-circle-minus::before { + content: "\f056"; } + +.fa-minus-circle::before { + content: "\f056"; } + +.fa-door-open::before { + content: "\f52b"; } + +.fa-right-from-bracket::before { + content: "\f2f5"; } + +.fa-sign-out-alt::before { + content: "\f2f5"; } + +.fa-atom::before { + content: "\f5d2"; } + +.fa-soap::before { + content: "\e06e"; } + +.fa-icons::before { + content: "\f86d"; } + +.fa-heart-music-camera-bolt::before { + content: "\f86d"; } + +.fa-microphone-lines-slash::before { + content: "\f539"; } + +.fa-microphone-alt-slash::before { + content: "\f539"; } + +.fa-bridge-circle-check::before { + content: "\e4c9"; } + +.fa-pump-medical::before { + content: "\e06a"; } + +.fa-fingerprint::before { + content: "\f577"; } + +.fa-hand-point-right::before { + content: "\f0a4"; } + +.fa-magnifying-glass-location::before { + content: "\f689"; } + +.fa-search-location::before { + content: "\f689"; } + +.fa-forward-step::before { + content: "\f051"; } + +.fa-step-forward::before { + content: "\f051"; } + +.fa-face-smile-beam::before { + content: "\f5b8"; } + +.fa-smile-beam::before { + content: "\f5b8"; } + +.fa-flag-checkered::before { + content: "\f11e"; } + +.fa-football::before { + content: "\f44e"; } + +.fa-football-ball::before { + content: "\f44e"; } + +.fa-school-circle-exclamation::before { + content: "\e56c"; } + +.fa-crop::before { + content: "\f125"; } + +.fa-angles-down::before { + content: "\f103"; } + +.fa-angle-double-down::before { + content: "\f103"; } + +.fa-users-rectangle::before { + content: "\e594"; } + +.fa-people-roof::before { + content: "\e537"; } + +.fa-people-line::before { + content: "\e534"; } + +.fa-beer-mug-empty::before { + content: "\f0fc"; } + +.fa-beer::before { + content: "\f0fc"; } + +.fa-diagram-predecessor::before { + content: "\e477"; } + +.fa-arrow-up-long::before { + content: "\f176"; } + +.fa-long-arrow-up::before { + content: "\f176"; } + +.fa-fire-flame-simple::before { + content: "\f46a"; } + +.fa-burn::before { + content: "\f46a"; } + +.fa-person::before { + content: "\f183"; } + +.fa-male::before { + content: "\f183"; } + +.fa-laptop::before { + content: "\f109"; } + +.fa-file-csv::before { + content: "\f6dd"; } + +.fa-menorah::before { + content: "\f676"; } + +.fa-truck-plane::before { + content: "\e58f"; } + +.fa-record-vinyl::before { + content: "\f8d9"; } + +.fa-face-grin-stars::before { + content: "\f587"; } + +.fa-grin-stars::before { + content: "\f587"; } + +.fa-bong::before { + content: "\f55c"; } + +.fa-spaghetti-monster-flying::before { + content: "\f67b"; } + +.fa-pastafarianism::before { + content: "\f67b"; } + +.fa-arrow-down-up-across-line::before { + content: "\e4af"; } + +.fa-spoon::before { + content: "\f2e5"; } + +.fa-utensil-spoon::before { + content: "\f2e5"; } + +.fa-jar-wheat::before { + content: "\e517"; } + +.fa-envelopes-bulk::before { + content: "\f674"; } + +.fa-mail-bulk::before { + content: "\f674"; } + +.fa-file-circle-exclamation::before { + content: "\e4eb"; } + +.fa-circle-h::before { + content: "\f47e"; } + +.fa-hospital-symbol::before { + content: "\f47e"; } + +.fa-pager::before { + content: "\f815"; } + +.fa-address-book::before { + content: "\f2b9"; } + +.fa-contact-book::before { + content: "\f2b9"; } + +.fa-strikethrough::before { + content: "\f0cc"; } + +.fa-k::before { + content: "\4b"; } + +.fa-landmark-flag::before { + content: "\e51c"; } + +.fa-pencil::before { + content: "\f303"; } + +.fa-pencil-alt::before { + content: "\f303"; } + +.fa-backward::before { + content: "\f04a"; } + +.fa-caret-right::before { + content: "\f0da"; } + +.fa-comments::before { + content: "\f086"; } + +.fa-paste::before { + content: "\f0ea"; } + +.fa-file-clipboard::before { + content: "\f0ea"; } + +.fa-code-pull-request::before { + content: "\e13c"; } + +.fa-clipboard-list::before { + content: "\f46d"; } + +.fa-truck-ramp-box::before { + content: "\f4de"; } + +.fa-truck-loading::before { + content: "\f4de"; } + +.fa-user-check::before { + content: "\f4fc"; } + +.fa-vial-virus::before { + content: "\e597"; } + +.fa-sheet-plastic::before { + content: "\e571"; } + +.fa-blog::before { + content: "\f781"; } + +.fa-user-ninja::before { + content: "\f504"; } + +.fa-person-arrow-up-from-line::before { + content: "\e539"; } + +.fa-scroll-torah::before { + content: "\f6a0"; } + +.fa-torah::before { + content: "\f6a0"; } + +.fa-broom-ball::before { + content: "\f458"; } + +.fa-quidditch::before { + content: "\f458"; } + +.fa-quidditch-broom-ball::before { + content: "\f458"; } + +.fa-toggle-off::before { + content: "\f204"; } + +.fa-box-archive::before { + content: "\f187"; } + +.fa-archive::before { + content: "\f187"; } + +.fa-person-drowning::before { + content: "\e545"; } + +.fa-arrow-down-9-1::before { + content: "\f886"; } + +.fa-sort-numeric-desc::before { + content: "\f886"; } + +.fa-sort-numeric-down-alt::before { + content: "\f886"; } + +.fa-face-grin-tongue-squint::before { + content: "\f58a"; } + +.fa-grin-tongue-squint::before { + content: "\f58a"; } + +.fa-spray-can::before { + content: "\f5bd"; } + +.fa-truck-monster::before { + content: "\f63b"; } + +.fa-w::before { + content: "\57"; } + +.fa-earth-africa::before { + content: "\f57c"; } + +.fa-globe-africa::before { + content: "\f57c"; } + +.fa-rainbow::before { + content: "\f75b"; } + +.fa-circle-notch::before { + content: "\f1ce"; } + +.fa-tablet-screen-button::before { + content: "\f3fa"; } + +.fa-tablet-alt::before { + content: "\f3fa"; } + +.fa-paw::before { + content: "\f1b0"; } + +.fa-cloud::before { + content: "\f0c2"; } + +.fa-trowel-bricks::before { + content: "\e58a"; } + +.fa-face-flushed::before { + content: "\f579"; } + +.fa-flushed::before { + content: "\f579"; } + +.fa-hospital-user::before { + content: "\f80d"; } + +.fa-tent-arrow-left-right::before { + content: "\e57f"; } + +.fa-gavel::before { + content: "\f0e3"; } + +.fa-legal::before { + content: "\f0e3"; } + +.fa-binoculars::before { + content: "\f1e5"; } + +.fa-microphone-slash::before { + content: "\f131"; } + +.fa-box-tissue::before { + content: "\e05b"; } + +.fa-motorcycle::before { + content: "\f21c"; } + +.fa-bell-concierge::before { + content: "\f562"; } + +.fa-concierge-bell::before { + content: "\f562"; } + +.fa-pen-ruler::before { + content: "\f5ae"; } + +.fa-pencil-ruler::before { + content: "\f5ae"; } + +.fa-people-arrows::before { + content: "\e068"; } + +.fa-people-arrows-left-right::before { + content: "\e068"; } + +.fa-mars-and-venus-burst::before { + content: "\e523"; } + +.fa-square-caret-right::before { + content: "\f152"; } + +.fa-caret-square-right::before { + content: "\f152"; } + +.fa-scissors::before { + content: "\f0c4"; } + +.fa-cut::before { + content: "\f0c4"; } + +.fa-sun-plant-wilt::before { + content: "\e57a"; } + +.fa-toilets-portable::before { + content: "\e584"; } + +.fa-hockey-puck::before { + content: "\f453"; } + +.fa-table::before { + content: "\f0ce"; } + +.fa-magnifying-glass-arrow-right::before { + content: "\e521"; } + +.fa-tachograph-digital::before { + content: "\f566"; } + +.fa-digital-tachograph::before { + content: "\f566"; } + +.fa-users-slash::before { + content: "\e073"; } + +.fa-clover::before { + content: "\e139"; } + +.fa-reply::before { + content: "\f3e5"; } + +.fa-mail-reply::before { + content: "\f3e5"; } + +.fa-star-and-crescent::before { + content: "\f699"; } + +.fa-house-fire::before { + content: "\e50c"; } + +.fa-square-minus::before { + content: "\f146"; } + +.fa-minus-square::before { + content: "\f146"; } + +.fa-helicopter::before { + content: "\f533"; } + +.fa-compass::before { + content: "\f14e"; } + +.fa-square-caret-down::before { + content: "\f150"; } + +.fa-caret-square-down::before { + content: "\f150"; } + +.fa-file-circle-question::before { + content: "\e4ef"; } + +.fa-laptop-code::before { + content: "\f5fc"; } + +.fa-swatchbook::before { + content: "\f5c3"; } + +.fa-prescription-bottle::before { + content: "\f485"; } + +.fa-bars::before { + content: "\f0c9"; } + +.fa-navicon::before { + content: "\f0c9"; } + +.fa-people-group::before { + content: "\e533"; } + +.fa-hourglass-end::before { + content: "\f253"; } + +.fa-hourglass-3::before { + content: "\f253"; } + +.fa-heart-crack::before { + content: "\f7a9"; } + +.fa-heart-broken::before { + content: "\f7a9"; } + +.fa-square-up-right::before { + content: "\f360"; } + +.fa-external-link-square-alt::before { + content: "\f360"; } + +.fa-face-kiss-beam::before { + content: "\f597"; } + +.fa-kiss-beam::before { + content: "\f597"; } + +.fa-film::before { + content: "\f008"; } + +.fa-ruler-horizontal::before { + content: "\f547"; } + +.fa-people-robbery::before { + content: "\e536"; } + +.fa-lightbulb::before { + content: "\f0eb"; } + +.fa-caret-left::before { + content: "\f0d9"; } + +.fa-circle-exclamation::before { + content: "\f06a"; } + +.fa-exclamation-circle::before { + content: "\f06a"; } + +.fa-school-circle-xmark::before { + content: "\e56d"; } + +.fa-arrow-right-from-bracket::before { + content: "\f08b"; } + +.fa-sign-out::before { + content: "\f08b"; } + +.fa-circle-chevron-down::before { + content: "\f13a"; } + +.fa-chevron-circle-down::before { + content: "\f13a"; } + +.fa-unlock-keyhole::before { + content: "\f13e"; } + +.fa-unlock-alt::before { + content: "\f13e"; } + +.fa-cloud-showers-heavy::before { + content: "\f740"; } + +.fa-headphones-simple::before { + content: "\f58f"; } + +.fa-headphones-alt::before { + content: "\f58f"; } + +.fa-sitemap::before { + content: "\f0e8"; } + +.fa-circle-dollar-to-slot::before { + content: "\f4b9"; } + +.fa-donate::before { + content: "\f4b9"; } + +.fa-memory::before { + content: "\f538"; } + +.fa-road-spikes::before { + content: "\e568"; } + +.fa-fire-burner::before { + content: "\e4f1"; } + +.fa-flag::before { + content: "\f024"; } + +.fa-hanukiah::before { + content: "\f6e6"; } + +.fa-feather::before { + content: "\f52d"; } + +.fa-volume-low::before { + content: "\f027"; } + +.fa-volume-down::before { + content: "\f027"; } + +.fa-comment-slash::before { + content: "\f4b3"; } + +.fa-cloud-sun-rain::before { + content: "\f743"; } + +.fa-compress::before { + content: "\f066"; } + +.fa-wheat-awn::before { + content: "\e2cd"; } + +.fa-wheat-alt::before { + content: "\e2cd"; } + +.fa-ankh::before { + content: "\f644"; } + +.fa-hands-holding-child::before { + content: "\e4fa"; } + +.fa-asterisk::before { + content: "\2a"; } + +.fa-square-check::before { + content: "\f14a"; } + +.fa-check-square::before { + content: "\f14a"; } + +.fa-peseta-sign::before { + content: "\e221"; } + +.fa-heading::before { + content: "\f1dc"; } + +.fa-header::before { + content: "\f1dc"; } + +.fa-ghost::before { + content: "\f6e2"; } + +.fa-list::before { + content: "\f03a"; } + +.fa-list-squares::before { + content: "\f03a"; } + +.fa-square-phone-flip::before { + content: "\f87b"; } + +.fa-phone-square-alt::before { + content: "\f87b"; } + +.fa-cart-plus::before { + content: "\f217"; } + +.fa-gamepad::before { + content: "\f11b"; } + +.fa-circle-dot::before { + content: "\f192"; } + +.fa-dot-circle::before { + content: "\f192"; } + +.fa-face-dizzy::before { + content: "\f567"; } + +.fa-dizzy::before { + content: "\f567"; } + +.fa-egg::before { + content: "\f7fb"; } + +.fa-house-medical-circle-xmark::before { + content: "\e513"; } + +.fa-campground::before { + content: "\f6bb"; } + +.fa-folder-plus::before { + content: "\f65e"; } + +.fa-futbol::before { + content: "\f1e3"; } + +.fa-futbol-ball::before { + content: "\f1e3"; } + +.fa-soccer-ball::before { + content: "\f1e3"; } + +.fa-paintbrush::before { + content: "\f1fc"; } + +.fa-paint-brush::before { + content: "\f1fc"; } + +.fa-lock::before { + content: "\f023"; } + +.fa-gas-pump::before { + content: "\f52f"; } + +.fa-hot-tub-person::before { + content: "\f593"; } + +.fa-hot-tub::before { + content: "\f593"; } + +.fa-map-location::before { + content: "\f59f"; } + +.fa-map-marked::before { + content: "\f59f"; } + +.fa-house-flood-water::before { + content: "\e50e"; } + +.fa-tree::before { + content: "\f1bb"; } + +.fa-bridge-lock::before { + content: "\e4cc"; } + +.fa-sack-dollar::before { + content: "\f81d"; } + +.fa-pen-to-square::before { + content: "\f044"; } + +.fa-edit::before { + content: "\f044"; } + +.fa-car-side::before { + content: "\f5e4"; } + +.fa-share-nodes::before { + content: "\f1e0"; } + +.fa-share-alt::before { + content: "\f1e0"; } + +.fa-heart-circle-minus::before { + content: "\e4ff"; } + +.fa-hourglass-half::before { + content: "\f252"; } + +.fa-hourglass-2::before { + content: "\f252"; } + +.fa-microscope::before { + content: "\f610"; } + +.fa-sink::before { + content: "\e06d"; } + +.fa-bag-shopping::before { + content: "\f290"; } + +.fa-shopping-bag::before { + content: "\f290"; } + +.fa-arrow-down-z-a::before { + content: "\f881"; } + +.fa-sort-alpha-desc::before { + content: "\f881"; } + +.fa-sort-alpha-down-alt::before { + content: "\f881"; } + +.fa-mitten::before { + content: "\f7b5"; } + +.fa-person-rays::before { + content: "\e54d"; } + +.fa-users::before { + content: "\f0c0"; } + +.fa-eye-slash::before { + content: "\f070"; } + +.fa-flask-vial::before { + content: "\e4f3"; } + +.fa-hand::before { + content: "\f256"; } + +.fa-hand-paper::before { + content: "\f256"; } + +.fa-om::before { + content: "\f679"; } + +.fa-worm::before { + content: "\e599"; } + +.fa-house-circle-xmark::before { + content: "\e50b"; } + +.fa-plug::before { + content: "\f1e6"; } + +.fa-chevron-up::before { + content: "\f077"; } + +.fa-hand-spock::before { + content: "\f259"; } + +.fa-stopwatch::before { + content: "\f2f2"; } + +.fa-face-kiss::before { + content: "\f596"; } + +.fa-kiss::before { + content: "\f596"; } + +.fa-bridge-circle-xmark::before { + content: "\e4cb"; } + +.fa-face-grin-tongue::before { + content: "\f589"; } + +.fa-grin-tongue::before { + content: "\f589"; } + +.fa-chess-bishop::before { + content: "\f43a"; } + +.fa-face-grin-wink::before { + content: "\f58c"; } + +.fa-grin-wink::before { + content: "\f58c"; } + +.fa-ear-deaf::before { + content: "\f2a4"; } + +.fa-deaf::before { + content: "\f2a4"; } + +.fa-deafness::before { + content: "\f2a4"; } + +.fa-hard-of-hearing::before { + content: "\f2a4"; } + +.fa-road-circle-check::before { + content: "\e564"; } + +.fa-dice-five::before { + content: "\f523"; } + +.fa-square-rss::before { + content: "\f143"; } + +.fa-rss-square::before { + content: "\f143"; } + +.fa-land-mine-on::before { + content: "\e51b"; } + +.fa-i-cursor::before { + content: "\f246"; } + +.fa-stamp::before { + content: "\f5bf"; } + +.fa-stairs::before { + content: "\e289"; } + +.fa-i::before { + content: "\49"; } + +.fa-hryvnia-sign::before { + content: "\f6f2"; } + +.fa-hryvnia::before { + content: "\f6f2"; } + +.fa-pills::before { + content: "\f484"; } + +.fa-face-grin-wide::before { + content: "\f581"; } + +.fa-grin-alt::before { + content: "\f581"; } + +.fa-tooth::before { + content: "\f5c9"; } + +.fa-v::before { + content: "\56"; } + +.fa-bangladeshi-taka-sign::before { + content: "\e2e6"; } + +.fa-bicycle::before { + content: "\f206"; } + +.fa-staff-snake::before { + content: "\e579"; } + +.fa-rod-asclepius::before { + content: "\e579"; } + +.fa-rod-snake::before { + content: "\e579"; } + +.fa-staff-aesculapius::before { + content: "\e579"; } + +.fa-head-side-cough-slash::before { + content: "\e062"; } + +.fa-truck-medical::before { + content: "\f0f9"; } + +.fa-ambulance::before { + content: "\f0f9"; } + +.fa-wheat-awn-circle-exclamation::before { + content: "\e598"; } + +.fa-snowman::before { + content: "\f7d0"; } + +.fa-mortar-pestle::before { + content: "\f5a7"; } + +.fa-road-barrier::before { + content: "\e562"; } + +.fa-school::before { + content: "\f549"; } + +.fa-igloo::before { + content: "\f7ae"; } + +.fa-joint::before { + content: "\f595"; } + +.fa-angle-right::before { + content: "\f105"; } + +.fa-horse::before { + content: "\f6f0"; } + +.fa-q::before { + content: "\51"; } + +.fa-g::before { + content: "\47"; } + +.fa-notes-medical::before { + content: "\f481"; } + +.fa-temperature-half::before { + content: "\f2c9"; } + +.fa-temperature-2::before { + content: "\f2c9"; } + +.fa-thermometer-2::before { + content: "\f2c9"; } + +.fa-thermometer-half::before { + content: "\f2c9"; } + +.fa-dong-sign::before { + content: "\e169"; } + +.fa-capsules::before { + content: "\f46b"; } + +.fa-poo-storm::before { + content: "\f75a"; } + +.fa-poo-bolt::before { + content: "\f75a"; } + +.fa-face-frown-open::before { + content: "\f57a"; } + +.fa-frown-open::before { + content: "\f57a"; } + +.fa-hand-point-up::before { + content: "\f0a6"; } + +.fa-money-bill::before { + content: "\f0d6"; } + +.fa-bookmark::before { + content: "\f02e"; } + +.fa-align-justify::before { + content: "\f039"; } + +.fa-umbrella-beach::before { + content: "\f5ca"; } + +.fa-helmet-un::before { + content: "\e503"; } + +.fa-bullseye::before { + content: "\f140"; } + +.fa-bacon::before { + content: "\f7e5"; } + +.fa-hand-point-down::before { + content: "\f0a7"; } + +.fa-arrow-up-from-bracket::before { + content: "\e09a"; } + +.fa-folder::before { + content: "\f07b"; } + +.fa-folder-blank::before { + content: "\f07b"; } + +.fa-file-waveform::before { + content: "\f478"; } + +.fa-file-medical-alt::before { + content: "\f478"; } + +.fa-radiation::before { + content: "\f7b9"; } + +.fa-chart-simple::before { + content: "\e473"; } + +.fa-mars-stroke::before { + content: "\f229"; } + +.fa-vial::before { + content: "\f492"; } + +.fa-gauge::before { + content: "\f624"; } + +.fa-dashboard::before { + content: "\f624"; } + +.fa-gauge-med::before { + content: "\f624"; } + +.fa-tachometer-alt-average::before { + content: "\f624"; } + +.fa-wand-magic-sparkles::before { + content: "\e2ca"; } + +.fa-magic-wand-sparkles::before { + content: "\e2ca"; } + +.fa-e::before { + content: "\45"; } + +.fa-pen-clip::before { + content: "\f305"; } + +.fa-pen-alt::before { + content: "\f305"; } + +.fa-bridge-circle-exclamation::before { + content: "\e4ca"; } + +.fa-user::before { + content: "\f007"; } + +.fa-school-circle-check::before { + content: "\e56b"; } + +.fa-dumpster::before { + content: "\f793"; } + +.fa-van-shuttle::before { + content: "\f5b6"; } + +.fa-shuttle-van::before { + content: "\f5b6"; } + +.fa-building-user::before { + content: "\e4da"; } + +.fa-square-caret-left::before { + content: "\f191"; } + +.fa-caret-square-left::before { + content: "\f191"; } + +.fa-highlighter::before { + content: "\f591"; } + +.fa-key::before { + content: "\f084"; } + +.fa-bullhorn::before { + content: "\f0a1"; } + +.fa-globe::before { + content: "\f0ac"; } + +.fa-synagogue::before { + content: "\f69b"; } + +.fa-person-half-dress::before { + content: "\e548"; } + +.fa-road-bridge::before { + content: "\e563"; } + +.fa-location-arrow::before { + content: "\f124"; } + +.fa-c::before { + content: "\43"; } + +.fa-tablet-button::before { + content: "\f10a"; } + +.fa-building-lock::before { + content: "\e4d6"; } + +.fa-pizza-slice::before { + content: "\f818"; } + +.fa-money-bill-wave::before { + content: "\f53a"; } + +.fa-chart-area::before { + content: "\f1fe"; } + +.fa-area-chart::before { + content: "\f1fe"; } + +.fa-house-flag::before { + content: "\e50d"; } + +.fa-person-circle-minus::before { + content: "\e540"; } + +.fa-ban::before { + content: "\f05e"; } + +.fa-cancel::before { + content: "\f05e"; } + +.fa-camera-rotate::before { + content: "\e0d8"; } + +.fa-spray-can-sparkles::before { + content: "\f5d0"; } + +.fa-air-freshener::before { + content: "\f5d0"; } + +.fa-star::before { + content: "\f005"; } + +.fa-repeat::before { + content: "\f363"; } + +.fa-cross::before { + content: "\f654"; } + +.fa-box::before { + content: "\f466"; } + +.fa-venus-mars::before { + content: "\f228"; } + +.fa-arrow-pointer::before { + content: "\f245"; } + +.fa-mouse-pointer::before { + content: "\f245"; } + +.fa-maximize::before { + content: "\f31e"; } + +.fa-expand-arrows-alt::before { + content: "\f31e"; } + +.fa-charging-station::before { + content: "\f5e7"; } + +.fa-shapes::before { + content: "\f61f"; } + +.fa-triangle-circle-square::before { + content: "\f61f"; } + +.fa-shuffle::before { + content: "\f074"; } + +.fa-random::before { + content: "\f074"; } + +.fa-person-running::before { + content: "\f70c"; } + +.fa-running::before { + content: "\f70c"; } + +.fa-mobile-retro::before { + content: "\e527"; } + +.fa-grip-lines-vertical::before { + content: "\f7a5"; } + +.fa-spider::before { + content: "\f717"; } + +.fa-hands-bound::before { + content: "\e4f9"; } + +.fa-file-invoice-dollar::before { + content: "\f571"; } + +.fa-plane-circle-exclamation::before { + content: "\e556"; } + +.fa-x-ray::before { + content: "\f497"; } + +.fa-spell-check::before { + content: "\f891"; } + +.fa-slash::before { + content: "\f715"; } + +.fa-computer-mouse::before { + content: "\f8cc"; } + +.fa-mouse::before { + content: "\f8cc"; } + +.fa-arrow-right-to-bracket::before { + content: "\f090"; } + +.fa-sign-in::before { + content: "\f090"; } + +.fa-shop-slash::before { + content: "\e070"; } + +.fa-store-alt-slash::before { + content: "\e070"; } + +.fa-server::before { + content: "\f233"; } + +.fa-virus-covid-slash::before { + content: "\e4a9"; } + +.fa-shop-lock::before { + content: "\e4a5"; } + +.fa-hourglass-start::before { + content: "\f251"; } + +.fa-hourglass-1::before { + content: "\f251"; } + +.fa-blender-phone::before { + content: "\f6b6"; } + +.fa-building-wheat::before { + content: "\e4db"; } + +.fa-person-breastfeeding::before { + content: "\e53a"; } + +.fa-right-to-bracket::before { + content: "\f2f6"; } + +.fa-sign-in-alt::before { + content: "\f2f6"; } + +.fa-venus::before { + content: "\f221"; } + +.fa-passport::before { + content: "\f5ab"; } + +.fa-heart-pulse::before { + content: "\f21e"; } + +.fa-heartbeat::before { + content: "\f21e"; } + +.fa-people-carry-box::before { + content: "\f4ce"; } + +.fa-people-carry::before { + content: "\f4ce"; } + +.fa-temperature-high::before { + content: "\f769"; } + +.fa-microchip::before { + content: "\f2db"; } + +.fa-crown::before { + content: "\f521"; } + +.fa-weight-hanging::before { + content: "\f5cd"; } + +.fa-xmarks-lines::before { + content: "\e59a"; } + +.fa-file-prescription::before { + content: "\f572"; } + +.fa-weight-scale::before { + content: "\f496"; } + +.fa-weight::before { + content: "\f496"; } + +.fa-user-group::before { + content: "\f500"; } + +.fa-user-friends::before { + content: "\f500"; } + +.fa-arrow-up-a-z::before { + content: "\f15e"; } + +.fa-sort-alpha-up::before { + content: "\f15e"; } + +.fa-chess-knight::before { + content: "\f441"; } + +.fa-face-laugh-squint::before { + content: "\f59b"; } + +.fa-laugh-squint::before { + content: "\f59b"; } + +.fa-wheelchair::before { + content: "\f193"; } + +.fa-circle-arrow-up::before { + content: "\f0aa"; } + +.fa-arrow-circle-up::before { + content: "\f0aa"; } + +.fa-toggle-on::before { + content: "\f205"; } + +.fa-person-walking::before { + content: "\f554"; } + +.fa-walking::before { + content: "\f554"; } + +.fa-l::before { + content: "\4c"; } + +.fa-fire::before { + content: "\f06d"; } + +.fa-bed-pulse::before { + content: "\f487"; } + +.fa-procedures::before { + content: "\f487"; } + +.fa-shuttle-space::before { + content: "\f197"; } + +.fa-space-shuttle::before { + content: "\f197"; } + +.fa-face-laugh::before { + content: "\f599"; } + +.fa-laugh::before { + content: "\f599"; } + +.fa-folder-open::before { + content: "\f07c"; } + +.fa-heart-circle-plus::before { + content: "\e500"; } + +.fa-code-fork::before { + content: "\e13b"; } + +.fa-city::before { + content: "\f64f"; } + +.fa-microphone-lines::before { + content: "\f3c9"; } + +.fa-microphone-alt::before { + content: "\f3c9"; } + +.fa-pepper-hot::before { + content: "\f816"; } + +.fa-unlock::before { + content: "\f09c"; } + +.fa-colon-sign::before { + content: "\e140"; } + +.fa-headset::before { + content: "\f590"; } + +.fa-store-slash::before { + content: "\e071"; } + +.fa-road-circle-xmark::before { + content: "\e566"; } + +.fa-user-minus::before { + content: "\f503"; } + +.fa-mars-stroke-up::before { + content: "\f22a"; } + +.fa-mars-stroke-v::before { + content: "\f22a"; } + +.fa-champagne-glasses::before { + content: "\f79f"; } + +.fa-glass-cheers::before { + content: "\f79f"; } + +.fa-clipboard::before { + content: "\f328"; } + +.fa-house-circle-exclamation::before { + content: "\e50a"; } + +.fa-file-arrow-up::before { + content: "\f574"; } + +.fa-file-upload::before { + content: "\f574"; } + +.fa-wifi::before { + content: "\f1eb"; } + +.fa-wifi-3::before { + content: "\f1eb"; } + +.fa-wifi-strong::before { + content: "\f1eb"; } + +.fa-bath::before { + content: "\f2cd"; } + +.fa-bathtub::before { + content: "\f2cd"; } + +.fa-underline::before { + content: "\f0cd"; } + +.fa-user-pen::before { + content: "\f4ff"; } + +.fa-user-edit::before { + content: "\f4ff"; } + +.fa-signature::before { + content: "\f5b7"; } + +.fa-stroopwafel::before { + content: "\f551"; } + +.fa-bold::before { + content: "\f032"; } + +.fa-anchor-lock::before { + content: "\e4ad"; } + +.fa-building-ngo::before { + content: "\e4d7"; } + +.fa-manat-sign::before { + content: "\e1d5"; } + +.fa-not-equal::before { + content: "\f53e"; } + +.fa-border-top-left::before { + content: "\f853"; } + +.fa-border-style::before { + content: "\f853"; } + +.fa-map-location-dot::before { + content: "\f5a0"; } + +.fa-map-marked-alt::before { + content: "\f5a0"; } + +.fa-jedi::before { + content: "\f669"; } + +.fa-square-poll-vertical::before { + content: "\f681"; } + +.fa-poll::before { + content: "\f681"; } + +.fa-mug-hot::before { + content: "\f7b6"; } + +.fa-car-battery::before { + content: "\f5df"; } + +.fa-battery-car::before { + content: "\f5df"; } + +.fa-gift::before { + content: "\f06b"; } + +.fa-dice-two::before { + content: "\f528"; } + +.fa-chess-queen::before { + content: "\f445"; } + +.fa-glasses::before { + content: "\f530"; } + +.fa-chess-board::before { + content: "\f43c"; } + +.fa-building-circle-check::before { + content: "\e4d2"; } + +.fa-person-chalkboard::before { + content: "\e53d"; } + +.fa-mars-stroke-right::before { + content: "\f22b"; } + +.fa-mars-stroke-h::before { + content: "\f22b"; } + +.fa-hand-back-fist::before { + content: "\f255"; } + +.fa-hand-rock::before { + content: "\f255"; } + +.fa-square-caret-up::before { + content: "\f151"; } + +.fa-caret-square-up::before { + content: "\f151"; } + +.fa-cloud-showers-water::before { + content: "\e4e4"; } + +.fa-chart-bar::before { + content: "\f080"; } + +.fa-bar-chart::before { + content: "\f080"; } + +.fa-hands-bubbles::before { + content: "\e05e"; } + +.fa-hands-wash::before { + content: "\e05e"; } + +.fa-less-than-equal::before { + content: "\f537"; } + +.fa-train::before { + content: "\f238"; } + +.fa-eye-low-vision::before { + content: "\f2a8"; } + +.fa-low-vision::before { + content: "\f2a8"; } + +.fa-crow::before { + content: "\f520"; } + +.fa-sailboat::before { + content: "\e445"; } + +.fa-window-restore::before { + content: "\f2d2"; } + +.fa-square-plus::before { + content: "\f0fe"; } + +.fa-plus-square::before { + content: "\f0fe"; } + +.fa-torii-gate::before { + content: "\f6a1"; } + +.fa-frog::before { + content: "\f52e"; } + +.fa-bucket::before { + content: "\e4cf"; } + +.fa-image::before { + content: "\f03e"; } + +.fa-microphone::before { + content: "\f130"; } + +.fa-cow::before { + content: "\f6c8"; } + +.fa-caret-up::before { + content: "\f0d8"; } + +.fa-screwdriver::before { + content: "\f54a"; } + +.fa-folder-closed::before { + content: "\e185"; } + +.fa-house-tsunami::before { + content: "\e515"; } + +.fa-square-nfi::before { + content: "\e576"; } + +.fa-arrow-up-from-ground-water::before { + content: "\e4b5"; } + +.fa-martini-glass::before { + content: "\f57b"; } + +.fa-glass-martini-alt::before { + content: "\f57b"; } + +.fa-rotate-left::before { + content: "\f2ea"; } + +.fa-rotate-back::before { + content: "\f2ea"; } + +.fa-rotate-backward::before { + content: "\f2ea"; } + +.fa-undo-alt::before { + content: "\f2ea"; } + +.fa-table-columns::before { + content: "\f0db"; } + +.fa-columns::before { + content: "\f0db"; } + +.fa-lemon::before { + content: "\f094"; } + +.fa-head-side-mask::before { + content: "\e063"; } + +.fa-handshake::before { + content: "\f2b5"; } + +.fa-gem::before { + content: "\f3a5"; } + +.fa-dolly::before { + content: "\f472"; } + +.fa-dolly-box::before { + content: "\f472"; } + +.fa-smoking::before { + content: "\f48d"; } + +.fa-minimize::before { + content: "\f78c"; } + +.fa-compress-arrows-alt::before { + content: "\f78c"; } + +.fa-monument::before { + content: "\f5a6"; } + +.fa-snowplow::before { + content: "\f7d2"; } + +.fa-angles-right::before { + content: "\f101"; } + +.fa-angle-double-right::before { + content: "\f101"; } + +.fa-cannabis::before { + content: "\f55f"; } + +.fa-circle-play::before { + content: "\f144"; } + +.fa-play-circle::before { + content: "\f144"; } + +.fa-tablets::before { + content: "\f490"; } + +.fa-ethernet::before { + content: "\f796"; } + +.fa-euro-sign::before { + content: "\f153"; } + +.fa-eur::before { + content: "\f153"; } + +.fa-euro::before { + content: "\f153"; } + +.fa-chair::before { + content: "\f6c0"; } + +.fa-circle-check::before { + content: "\f058"; } + +.fa-check-circle::before { + content: "\f058"; } + +.fa-circle-stop::before { + content: "\f28d"; } + +.fa-stop-circle::before { + content: "\f28d"; } + +.fa-compass-drafting::before { + content: "\f568"; } + +.fa-drafting-compass::before { + content: "\f568"; } + +.fa-plate-wheat::before { + content: "\e55a"; } + +.fa-icicles::before { + content: "\f7ad"; } + +.fa-person-shelter::before { + content: "\e54f"; } + +.fa-neuter::before { + content: "\f22c"; } + +.fa-id-badge::before { + content: "\f2c1"; } + +.fa-marker::before { + content: "\f5a1"; } + +.fa-face-laugh-beam::before { + content: "\f59a"; } + +.fa-laugh-beam::before { + content: "\f59a"; } + +.fa-helicopter-symbol::before { + content: "\e502"; } + +.fa-universal-access::before { + content: "\f29a"; } + +.fa-circle-chevron-up::before { + content: "\f139"; } + +.fa-chevron-circle-up::before { + content: "\f139"; } + +.fa-lari-sign::before { + content: "\e1c8"; } + +.fa-volcano::before { + content: "\f770"; } + +.fa-person-walking-dashed-line-arrow-right::before { + content: "\e553"; } + +.fa-sterling-sign::before { + content: "\f154"; } + +.fa-gbp::before { + content: "\f154"; } + +.fa-pound-sign::before { + content: "\f154"; } + +.fa-viruses::before { + content: "\e076"; } + +.fa-square-person-confined::before { + content: "\e577"; } + +.fa-user-tie::before { + content: "\f508"; } + +.fa-arrow-down-long::before { + content: "\f175"; } + +.fa-long-arrow-down::before { + content: "\f175"; } + +.fa-tent-arrow-down-to-line::before { + content: "\e57e"; } + +.fa-certificate::before { + content: "\f0a3"; } + +.fa-reply-all::before { + content: "\f122"; } + +.fa-mail-reply-all::before { + content: "\f122"; } + +.fa-suitcase::before { + content: "\f0f2"; } + +.fa-person-skating::before { + content: "\f7c5"; } + +.fa-skating::before { + content: "\f7c5"; } + +.fa-filter-circle-dollar::before { + content: "\f662"; } + +.fa-funnel-dollar::before { + content: "\f662"; } + +.fa-camera-retro::before { + content: "\f083"; } + +.fa-circle-arrow-down::before { + content: "\f0ab"; } + +.fa-arrow-circle-down::before { + content: "\f0ab"; } + +.fa-file-import::before { + content: "\f56f"; } + +.fa-arrow-right-to-file::before { + content: "\f56f"; } + +.fa-square-arrow-up-right::before { + content: "\f14c"; } + +.fa-external-link-square::before { + content: "\f14c"; } + +.fa-box-open::before { + content: "\f49e"; } + +.fa-scroll::before { + content: "\f70e"; } + +.fa-spa::before { + content: "\f5bb"; } + +.fa-location-pin-lock::before { + content: "\e51f"; } + +.fa-pause::before { + content: "\f04c"; } + +.fa-hill-avalanche::before { + content: "\e507"; } + +.fa-temperature-empty::before { + content: "\f2cb"; } + +.fa-temperature-0::before { + content: "\f2cb"; } + +.fa-thermometer-0::before { + content: "\f2cb"; } + +.fa-thermometer-empty::before { + content: "\f2cb"; } + +.fa-bomb::before { + content: "\f1e2"; } + +.fa-registered::before { + content: "\f25d"; } + +.fa-address-card::before { + content: "\f2bb"; } + +.fa-contact-card::before { + content: "\f2bb"; } + +.fa-vcard::before { + content: "\f2bb"; } + +.fa-scale-unbalanced-flip::before { + content: "\f516"; } + +.fa-balance-scale-right::before { + content: "\f516"; } + +.fa-subscript::before { + content: "\f12c"; } + +.fa-diamond-turn-right::before { + content: "\f5eb"; } + +.fa-directions::before { + content: "\f5eb"; } + +.fa-burst::before { + content: "\e4dc"; } + +.fa-house-laptop::before { + content: "\e066"; } + +.fa-laptop-house::before { + content: "\e066"; } + +.fa-face-tired::before { + content: "\f5c8"; } + +.fa-tired::before { + content: "\f5c8"; } + +.fa-money-bills::before { + content: "\e1f3"; } + +.fa-smog::before { + content: "\f75f"; } + +.fa-crutch::before { + content: "\f7f7"; } + +.fa-cloud-arrow-up::before { + content: "\f0ee"; } + +.fa-cloud-upload::before { + content: "\f0ee"; } + +.fa-cloud-upload-alt::before { + content: "\f0ee"; } + +.fa-palette::before { + content: "\f53f"; } + +.fa-arrows-turn-right::before { + content: "\e4c0"; } + +.fa-vest::before { + content: "\e085"; } + +.fa-ferry::before { + content: "\e4ea"; } + +.fa-arrows-down-to-people::before { + content: "\e4b9"; } + +.fa-seedling::before { + content: "\f4d8"; } + +.fa-sprout::before { + content: "\f4d8"; } + +.fa-left-right::before { + content: "\f337"; } + +.fa-arrows-alt-h::before { + content: "\f337"; } + +.fa-boxes-packing::before { + content: "\e4c7"; } + +.fa-circle-arrow-left::before { + content: "\f0a8"; } + +.fa-arrow-circle-left::before { + content: "\f0a8"; } + +.fa-group-arrows-rotate::before { + content: "\e4f6"; } + +.fa-bowl-food::before { + content: "\e4c6"; } + +.fa-candy-cane::before { + content: "\f786"; } + +.fa-arrow-down-wide-short::before { + content: "\f160"; } + +.fa-sort-amount-asc::before { + content: "\f160"; } + +.fa-sort-amount-down::before { + content: "\f160"; } + +.fa-cloud-bolt::before { + content: "\f76c"; } + +.fa-thunderstorm::before { + content: "\f76c"; } + +.fa-text-slash::before { + content: "\f87d"; } + +.fa-remove-format::before { + content: "\f87d"; } + +.fa-face-smile-wink::before { + content: "\f4da"; } + +.fa-smile-wink::before { + content: "\f4da"; } + +.fa-file-word::before { + content: "\f1c2"; } + +.fa-file-powerpoint::before { + content: "\f1c4"; } + +.fa-arrows-left-right::before { + content: "\f07e"; } + +.fa-arrows-h::before { + content: "\f07e"; } + +.fa-house-lock::before { + content: "\e510"; } + +.fa-cloud-arrow-down::before { + content: "\f0ed"; } + +.fa-cloud-download::before { + content: "\f0ed"; } + +.fa-cloud-download-alt::before { + content: "\f0ed"; } + +.fa-children::before { + content: "\e4e1"; } + +.fa-chalkboard::before { + content: "\f51b"; } + +.fa-blackboard::before { + content: "\f51b"; } + +.fa-user-large-slash::before { + content: "\f4fa"; } + +.fa-user-alt-slash::before { + content: "\f4fa"; } + +.fa-envelope-open::before { + content: "\f2b6"; } + +.fa-handshake-simple-slash::before { + content: "\e05f"; } + +.fa-handshake-alt-slash::before { + content: "\e05f"; } + +.fa-mattress-pillow::before { + content: "\e525"; } + +.fa-guarani-sign::before { + content: "\e19a"; } + +.fa-arrows-rotate::before { + content: "\f021"; } + +.fa-refresh::before { + content: "\f021"; } + +.fa-sync::before { + content: "\f021"; } + +.fa-fire-extinguisher::before { + content: "\f134"; } + +.fa-cruzeiro-sign::before { + content: "\e152"; } + +.fa-greater-than-equal::before { + content: "\f532"; } + +.fa-shield-halved::before { + content: "\f3ed"; } + +.fa-shield-alt::before { + content: "\f3ed"; } + +.fa-book-atlas::before { + content: "\f558"; } + +.fa-atlas::before { + content: "\f558"; } + +.fa-virus::before { + content: "\e074"; } + +.fa-envelope-circle-check::before { + content: "\e4e8"; } + +.fa-layer-group::before { + content: "\f5fd"; } + +.fa-arrows-to-dot::before { + content: "\e4be"; } + +.fa-archway::before { + content: "\f557"; } + +.fa-heart-circle-check::before { + content: "\e4fd"; } + +.fa-house-chimney-crack::before { + content: "\f6f1"; } + +.fa-house-damage::before { + content: "\f6f1"; } + +.fa-file-zipper::before { + content: "\f1c6"; } + +.fa-file-archive::before { + content: "\f1c6"; } + +.fa-square::before { + content: "\f0c8"; } + +.fa-martini-glass-empty::before { + content: "\f000"; } + +.fa-glass-martini::before { + content: "\f000"; } + +.fa-couch::before { + content: "\f4b8"; } + +.fa-cedi-sign::before { + content: "\e0df"; } + +.fa-italic::before { + content: "\f033"; } + +.fa-church::before { + content: "\f51d"; } + +.fa-comments-dollar::before { + content: "\f653"; } + +.fa-democrat::before { + content: "\f747"; } + +.fa-z::before { + content: "\5a"; } + +.fa-person-skiing::before { + content: "\f7c9"; } + +.fa-skiing::before { + content: "\f7c9"; } + +.fa-road-lock::before { + content: "\e567"; } + +.fa-a::before { + content: "\41"; } + +.fa-temperature-arrow-down::before { + content: "\e03f"; } + +.fa-temperature-down::before { + content: "\e03f"; } + +.fa-feather-pointed::before { + content: "\f56b"; } + +.fa-feather-alt::before { + content: "\f56b"; } + +.fa-p::before { + content: "\50"; } + +.fa-snowflake::before { + content: "\f2dc"; } + +.fa-newspaper::before { + content: "\f1ea"; } + +.fa-rectangle-ad::before { + content: "\f641"; } + +.fa-ad::before { + content: "\f641"; } + +.fa-circle-arrow-right::before { + content: "\f0a9"; } + +.fa-arrow-circle-right::before { + content: "\f0a9"; } + +.fa-filter-circle-xmark::before { + content: "\e17b"; } + +.fa-locust::before { + content: "\e520"; } + +.fa-sort::before { + content: "\f0dc"; } + +.fa-unsorted::before { + content: "\f0dc"; } + +.fa-list-ol::before { + content: "\f0cb"; } + +.fa-list-1-2::before { + content: "\f0cb"; } + +.fa-list-numeric::before { + content: "\f0cb"; } + +.fa-person-dress-burst::before { + content: "\e544"; } + +.fa-money-check-dollar::before { + content: "\f53d"; } + +.fa-money-check-alt::before { + content: "\f53d"; } + +.fa-vector-square::before { + content: "\f5cb"; } + +.fa-bread-slice::before { + content: "\f7ec"; } + +.fa-language::before { + content: "\f1ab"; } + +.fa-face-kiss-wink-heart::before { + content: "\f598"; } + +.fa-kiss-wink-heart::before { + content: "\f598"; } + +.fa-filter::before { + content: "\f0b0"; } + +.fa-question::before { + content: "\3f"; } + +.fa-file-signature::before { + content: "\f573"; } + +.fa-up-down-left-right::before { + content: "\f0b2"; } + +.fa-arrows-alt::before { + content: "\f0b2"; } + +.fa-house-chimney-user::before { + content: "\e065"; } + +.fa-hand-holding-heart::before { + content: "\f4be"; } + +.fa-puzzle-piece::before { + content: "\f12e"; } + +.fa-money-check::before { + content: "\f53c"; } + +.fa-star-half-stroke::before { + content: "\f5c0"; } + +.fa-star-half-alt::before { + content: "\f5c0"; } + +.fa-code::before { + content: "\f121"; } + +.fa-whiskey-glass::before { + content: "\f7a0"; } + +.fa-glass-whiskey::before { + content: "\f7a0"; } + +.fa-building-circle-exclamation::before { + content: "\e4d3"; } + +.fa-magnifying-glass-chart::before { + content: "\e522"; } + +.fa-arrow-up-right-from-square::before { + content: "\f08e"; } + +.fa-external-link::before { + content: "\f08e"; } + +.fa-cubes-stacked::before { + content: "\e4e6"; } + +.fa-won-sign::before { + content: "\f159"; } + +.fa-krw::before { + content: "\f159"; } + +.fa-won::before { + content: "\f159"; } + +.fa-virus-covid::before { + content: "\e4a8"; } + +.fa-austral-sign::before { + content: "\e0a9"; } + +.fa-f::before { + content: "\46"; } + +.fa-leaf::before { + content: "\f06c"; } + +.fa-road::before { + content: "\f018"; } + +.fa-taxi::before { + content: "\f1ba"; } + +.fa-cab::before { + content: "\f1ba"; } + +.fa-person-circle-plus::before { + content: "\e541"; } + +.fa-chart-pie::before { + content: "\f200"; } + +.fa-pie-chart::before { + content: "\f200"; } + +.fa-bolt-lightning::before { + content: "\e0b7"; } + +.fa-sack-xmark::before { + content: "\e56a"; } + +.fa-file-excel::before { + content: "\f1c3"; } + +.fa-file-contract::before { + content: "\f56c"; } + +.fa-fish-fins::before { + content: "\e4f2"; } + +.fa-building-flag::before { + content: "\e4d5"; } + +.fa-face-grin-beam::before { + content: "\f582"; } + +.fa-grin-beam::before { + content: "\f582"; } + +.fa-object-ungroup::before { + content: "\f248"; } + +.fa-poop::before { + content: "\f619"; } + +.fa-location-pin::before { + content: "\f041"; } + +.fa-map-marker::before { + content: "\f041"; } + +.fa-kaaba::before { + content: "\f66b"; } + +.fa-toilet-paper::before { + content: "\f71e"; } + +.fa-helmet-safety::before { + content: "\f807"; } + +.fa-hard-hat::before { + content: "\f807"; } + +.fa-hat-hard::before { + content: "\f807"; } + +.fa-eject::before { + content: "\f052"; } + +.fa-circle-right::before { + content: "\f35a"; } + +.fa-arrow-alt-circle-right::before { + content: "\f35a"; } + +.fa-plane-circle-check::before { + content: "\e555"; } + +.fa-face-rolling-eyes::before { + content: "\f5a5"; } + +.fa-meh-rolling-eyes::before { + content: "\f5a5"; } + +.fa-object-group::before { + content: "\f247"; } + +.fa-chart-line::before { + content: "\f201"; } + +.fa-line-chart::before { + content: "\f201"; } + +.fa-mask-ventilator::before { + content: "\e524"; } + +.fa-arrow-right::before { + content: "\f061"; } + +.fa-signs-post::before { + content: "\f277"; } + +.fa-map-signs::before { + content: "\f277"; } + +.fa-cash-register::before { + content: "\f788"; } + +.fa-person-circle-question::before { + content: "\e542"; } + +.fa-h::before { + content: "\48"; } + +.fa-tarp::before { + content: "\e57b"; } + +.fa-screwdriver-wrench::before { + content: "\f7d9"; } + +.fa-tools::before { + content: "\f7d9"; } + +.fa-arrows-to-eye::before { + content: "\e4bf"; } + +.fa-plug-circle-bolt::before { + content: "\e55b"; } + +.fa-heart::before { + content: "\f004"; } + +.fa-mars-and-venus::before { + content: "\f224"; } + +.fa-house-user::before { + content: "\e1b0"; } + +.fa-home-user::before { + content: "\e1b0"; } + +.fa-dumpster-fire::before { + content: "\f794"; } + +.fa-house-crack::before { + content: "\e3b1"; } + +.fa-martini-glass-citrus::before { + content: "\f561"; } + +.fa-cocktail::before { + content: "\f561"; } + +.fa-face-surprise::before { + content: "\f5c2"; } + +.fa-surprise::before { + content: "\f5c2"; } + +.fa-bottle-water::before { + content: "\e4c5"; } + +.fa-circle-pause::before { + content: "\f28b"; } + +.fa-pause-circle::before { + content: "\f28b"; } + +.fa-toilet-paper-slash::before { + content: "\e072"; } + +.fa-apple-whole::before { + content: "\f5d1"; } + +.fa-apple-alt::before { + content: "\f5d1"; } + +.fa-kitchen-set::before { + content: "\e51a"; } + +.fa-r::before { + content: "\52"; } + +.fa-temperature-quarter::before { + content: "\f2ca"; } + +.fa-temperature-1::before { + content: "\f2ca"; } + +.fa-thermometer-1::before { + content: "\f2ca"; } + +.fa-thermometer-quarter::before { + content: "\f2ca"; } + +.fa-cube::before { + content: "\f1b2"; } + +.fa-bitcoin-sign::before { + content: "\e0b4"; } + +.fa-shield-dog::before { + content: "\e573"; } + +.fa-solar-panel::before { + content: "\f5ba"; } + +.fa-lock-open::before { + content: "\f3c1"; } + +.fa-elevator::before { + content: "\e16d"; } + +.fa-money-bill-transfer::before { + content: "\e528"; } + +.fa-money-bill-trend-up::before { + content: "\e529"; } + +.fa-house-flood-water-circle-arrow-right::before { + content: "\e50f"; } + +.fa-square-poll-horizontal::before { + content: "\f682"; } + +.fa-poll-h::before { + content: "\f682"; } + +.fa-circle::before { + content: "\f111"; } + +.fa-backward-fast::before { + content: "\f049"; } + +.fa-fast-backward::before { + content: "\f049"; } + +.fa-recycle::before { + content: "\f1b8"; } + +.fa-user-astronaut::before { + content: "\f4fb"; } + +.fa-plane-slash::before { + content: "\e069"; } + +.fa-trademark::before { + content: "\f25c"; } + +.fa-basketball::before { + content: "\f434"; } + +.fa-basketball-ball::before { + content: "\f434"; } + +.fa-satellite-dish::before { + content: "\f7c0"; } + +.fa-circle-up::before { + content: "\f35b"; } + +.fa-arrow-alt-circle-up::before { + content: "\f35b"; } + +.fa-mobile-screen-button::before { + content: "\f3cd"; } + +.fa-mobile-alt::before { + content: "\f3cd"; } + +.fa-volume-high::before { + content: "\f028"; } + +.fa-volume-up::before { + content: "\f028"; } + +.fa-users-rays::before { + content: "\e593"; } + +.fa-wallet::before { + content: "\f555"; } + +.fa-clipboard-check::before { + content: "\f46c"; } + +.fa-file-audio::before { + content: "\f1c7"; } + +.fa-burger::before { + content: "\f805"; } + +.fa-hamburger::before { + content: "\f805"; } + +.fa-wrench::before { + content: "\f0ad"; } + +.fa-bugs::before { + content: "\e4d0"; } + +.fa-rupee-sign::before { + content: "\f156"; } + +.fa-rupee::before { + content: "\f156"; } + +.fa-file-image::before { + content: "\f1c5"; } + +.fa-circle-question::before { + content: "\f059"; } + +.fa-question-circle::before { + content: "\f059"; } + +.fa-plane-departure::before { + content: "\f5b0"; } + +.fa-handshake-slash::before { + content: "\e060"; } + +.fa-book-bookmark::before { + content: "\e0bb"; } + +.fa-code-branch::before { + content: "\f126"; } + +.fa-hat-cowboy::before { + content: "\f8c0"; } + +.fa-bridge::before { + content: "\e4c8"; } + +.fa-phone-flip::before { + content: "\f879"; } + +.fa-phone-alt::before { + content: "\f879"; } + +.fa-truck-front::before { + content: "\e2b7"; } + +.fa-cat::before { + content: "\f6be"; } + +.fa-anchor-circle-exclamation::before { + content: "\e4ab"; } + +.fa-truck-field::before { + content: "\e58d"; } + +.fa-route::before { + content: "\f4d7"; } + +.fa-clipboard-question::before { + content: "\e4e3"; } + +.fa-panorama::before { + content: "\e209"; } + +.fa-comment-medical::before { + content: "\f7f5"; } + +.fa-teeth-open::before { + content: "\f62f"; } + +.fa-file-circle-minus::before { + content: "\e4ed"; } + +.fa-tags::before { + content: "\f02c"; } + +.fa-wine-glass::before { + content: "\f4e3"; } + +.fa-forward-fast::before { + content: "\f050"; } + +.fa-fast-forward::before { + content: "\f050"; } + +.fa-face-meh-blank::before { + content: "\f5a4"; } + +.fa-meh-blank::before { + content: "\f5a4"; } + +.fa-square-parking::before { + content: "\f540"; } + +.fa-parking::before { + content: "\f540"; } + +.fa-house-signal::before { + content: "\e012"; } + +.fa-bars-progress::before { + content: "\f828"; } + +.fa-tasks-alt::before { + content: "\f828"; } + +.fa-faucet-drip::before { + content: "\e006"; } + +.fa-cart-flatbed::before { + content: "\f474"; } + +.fa-dolly-flatbed::before { + content: "\f474"; } + +.fa-ban-smoking::before { + content: "\f54d"; } + +.fa-smoking-ban::before { + content: "\f54d"; } + +.fa-terminal::before { + content: "\f120"; } + +.fa-mobile-button::before { + content: "\f10b"; } + +.fa-house-medical-flag::before { + content: "\e514"; } + +.fa-basket-shopping::before { + content: "\f291"; } + +.fa-shopping-basket::before { + content: "\f291"; } + +.fa-tape::before { + content: "\f4db"; } + +.fa-bus-simple::before { + content: "\f55e"; } + +.fa-bus-alt::before { + content: "\f55e"; } + +.fa-eye::before { + content: "\f06e"; } + +.fa-face-sad-cry::before { + content: "\f5b3"; } + +.fa-sad-cry::before { + content: "\f5b3"; } + +.fa-audio-description::before { + content: "\f29e"; } + +.fa-person-military-to-person::before { + content: "\e54c"; } + +.fa-file-shield::before { + content: "\e4f0"; } + +.fa-user-slash::before { + content: "\f506"; } + +.fa-pen::before { + content: "\f304"; } + +.fa-tower-observation::before { + content: "\e586"; } + +.fa-file-code::before { + content: "\f1c9"; } + +.fa-signal::before { + content: "\f012"; } + +.fa-signal-5::before { + content: "\f012"; } + +.fa-signal-perfect::before { + content: "\f012"; } + +.fa-bus::before { + content: "\f207"; } + +.fa-heart-circle-xmark::before { + content: "\e501"; } + +.fa-house-chimney::before { + content: "\e3af"; } + +.fa-home-lg::before { + content: "\e3af"; } + +.fa-window-maximize::before { + content: "\f2d0"; } + +.fa-face-frown::before { + content: "\f119"; } + +.fa-frown::before { + content: "\f119"; } + +.fa-prescription::before { + content: "\f5b1"; } + +.fa-shop::before { + content: "\f54f"; } + +.fa-store-alt::before { + content: "\f54f"; } + +.fa-floppy-disk::before { + content: "\f0c7"; } + +.fa-save::before { + content: "\f0c7"; } + +.fa-vihara::before { + content: "\f6a7"; } + +.fa-scale-unbalanced::before { + content: "\f515"; } + +.fa-balance-scale-left::before { + content: "\f515"; } + +.fa-sort-up::before { + content: "\f0de"; } + +.fa-sort-asc::before { + content: "\f0de"; } + +.fa-comment-dots::before { + content: "\f4ad"; } + +.fa-commenting::before { + content: "\f4ad"; } + +.fa-plant-wilt::before { + content: "\e5aa"; } + +.fa-diamond::before { + content: "\f219"; } + +.fa-face-grin-squint::before { + content: "\f585"; } + +.fa-grin-squint::before { + content: "\f585"; } + +.fa-hand-holding-dollar::before { + content: "\f4c0"; } + +.fa-hand-holding-usd::before { + content: "\f4c0"; } + +.fa-bacterium::before { + content: "\e05a"; } + +.fa-hand-pointer::before { + content: "\f25a"; } + +.fa-drum-steelpan::before { + content: "\f56a"; } + +.fa-hand-scissors::before { + content: "\f257"; } + +.fa-hands-praying::before { + content: "\f684"; } + +.fa-praying-hands::before { + content: "\f684"; } + +.fa-arrow-rotate-right::before { + content: "\f01e"; } + +.fa-arrow-right-rotate::before { + content: "\f01e"; } + +.fa-arrow-rotate-forward::before { + content: "\f01e"; } + +.fa-redo::before { + content: "\f01e"; } + +.fa-biohazard::before { + content: "\f780"; } + +.fa-location-crosshairs::before { + content: "\f601"; } + +.fa-location::before { + content: "\f601"; } + +.fa-mars-double::before { + content: "\f227"; } + +.fa-child-dress::before { + content: "\e59c"; } + +.fa-users-between-lines::before { + content: "\e591"; } + +.fa-lungs-virus::before { + content: "\e067"; } + +.fa-face-grin-tears::before { + content: "\f588"; } + +.fa-grin-tears::before { + content: "\f588"; } + +.fa-phone::before { + content: "\f095"; } + +.fa-calendar-xmark::before { + content: "\f273"; } + +.fa-calendar-times::before { + content: "\f273"; } + +.fa-child-reaching::before { + content: "\e59d"; } + +.fa-head-side-virus::before { + content: "\e064"; } + +.fa-user-gear::before { + content: "\f4fe"; } + +.fa-user-cog::before { + content: "\f4fe"; } + +.fa-arrow-up-1-9::before { + content: "\f163"; } + +.fa-sort-numeric-up::before { + content: "\f163"; } + +.fa-door-closed::before { + content: "\f52a"; } + +.fa-shield-virus::before { + content: "\e06c"; } + +.fa-dice-six::before { + content: "\f526"; } + +.fa-mosquito-net::before { + content: "\e52c"; } + +.fa-bridge-water::before { + content: "\e4ce"; } + +.fa-person-booth::before { + content: "\f756"; } + +.fa-text-width::before { + content: "\f035"; } + +.fa-hat-wizard::before { + content: "\f6e8"; } + +.fa-pen-fancy::before { + content: "\f5ac"; } + +.fa-person-digging::before { + content: "\f85e"; } + +.fa-digging::before { + content: "\f85e"; } + +.fa-trash::before { + content: "\f1f8"; } + +.fa-gauge-simple::before { + content: "\f629"; } + +.fa-gauge-simple-med::before { + content: "\f629"; } + +.fa-tachometer-average::before { + content: "\f629"; } + +.fa-book-medical::before { + content: "\f7e6"; } + +.fa-poo::before { + content: "\f2fe"; } + +.fa-quote-right::before { + content: "\f10e"; } + +.fa-quote-right-alt::before { + content: "\f10e"; } + +.fa-shirt::before { + content: "\f553"; } + +.fa-t-shirt::before { + content: "\f553"; } + +.fa-tshirt::before { + content: "\f553"; } + +.fa-cubes::before { + content: "\f1b3"; } + +.fa-divide::before { + content: "\f529"; } + +.fa-tenge-sign::before { + content: "\f7d7"; } + +.fa-tenge::before { + content: "\f7d7"; } + +.fa-headphones::before { + content: "\f025"; } + +.fa-hands-holding::before { + content: "\f4c2"; } + +.fa-hands-clapping::before { + content: "\e1a8"; } + +.fa-republican::before { + content: "\f75e"; } + +.fa-arrow-left::before { + content: "\f060"; } + +.fa-person-circle-xmark::before { + content: "\e543"; } + +.fa-ruler::before { + content: "\f545"; } + +.fa-align-left::before { + content: "\f036"; } + +.fa-dice-d6::before { + content: "\f6d1"; } + +.fa-restroom::before { + content: "\f7bd"; } + +.fa-j::before { + content: "\4a"; } + +.fa-users-viewfinder::before { + content: "\e595"; } + +.fa-file-video::before { + content: "\f1c8"; } + +.fa-up-right-from-square::before { + content: "\f35d"; } + +.fa-external-link-alt::before { + content: "\f35d"; } + +.fa-table-cells::before { + content: "\f00a"; } + +.fa-th::before { + content: "\f00a"; } + +.fa-file-pdf::before { + content: "\f1c1"; } + +.fa-book-bible::before { + content: "\f647"; } + +.fa-bible::before { + content: "\f647"; } + +.fa-o::before { + content: "\4f"; } + +.fa-suitcase-medical::before { + content: "\f0fa"; } + +.fa-medkit::before { + content: "\f0fa"; } + +.fa-user-secret::before { + content: "\f21b"; } + +.fa-otter::before { + content: "\f700"; } + +.fa-person-dress::before { + content: "\f182"; } + +.fa-female::before { + content: "\f182"; } + +.fa-comment-dollar::before { + content: "\f651"; } + +.fa-business-time::before { + content: "\f64a"; } + +.fa-briefcase-clock::before { + content: "\f64a"; } + +.fa-table-cells-large::before { + content: "\f009"; } + +.fa-th-large::before { + content: "\f009"; } + +.fa-book-tanakh::before { + content: "\f827"; } + +.fa-tanakh::before { + content: "\f827"; } + +.fa-phone-volume::before { + content: "\f2a0"; } + +.fa-volume-control-phone::before { + content: "\f2a0"; } + +.fa-hat-cowboy-side::before { + content: "\f8c1"; } + +.fa-clipboard-user::before { + content: "\f7f3"; } + +.fa-child::before { + content: "\f1ae"; } + +.fa-lira-sign::before { + content: "\f195"; } + +.fa-satellite::before { + content: "\f7bf"; } + +.fa-plane-lock::before { + content: "\e558"; } + +.fa-tag::before { + content: "\f02b"; } + +.fa-comment::before { + content: "\f075"; } + +.fa-cake-candles::before { + content: "\f1fd"; } + +.fa-birthday-cake::before { + content: "\f1fd"; } + +.fa-cake::before { + content: "\f1fd"; } + +.fa-envelope::before { + content: "\f0e0"; } + +.fa-angles-up::before { + content: "\f102"; } + +.fa-angle-double-up::before { + content: "\f102"; } + +.fa-paperclip::before { + content: "\f0c6"; } + +.fa-arrow-right-to-city::before { + content: "\e4b3"; } + +.fa-ribbon::before { + content: "\f4d6"; } + +.fa-lungs::before { + content: "\f604"; } + +.fa-arrow-up-9-1::before { + content: "\f887"; } + +.fa-sort-numeric-up-alt::before { + content: "\f887"; } + +.fa-litecoin-sign::before { + content: "\e1d3"; } + +.fa-border-none::before { + content: "\f850"; } + +.fa-circle-nodes::before { + content: "\e4e2"; } + +.fa-parachute-box::before { + content: "\f4cd"; } + +.fa-indent::before { + content: "\f03c"; } + +.fa-truck-field-un::before { + content: "\e58e"; } + +.fa-hourglass::before { + content: "\f254"; } + +.fa-hourglass-empty::before { + content: "\f254"; } + +.fa-mountain::before { + content: "\f6fc"; } + +.fa-user-doctor::before { + content: "\f0f0"; } + +.fa-user-md::before { + content: "\f0f0"; } + +.fa-circle-info::before { + content: "\f05a"; } + +.fa-info-circle::before { + content: "\f05a"; } + +.fa-cloud-meatball::before { + content: "\f73b"; } + +.fa-camera::before { + content: "\f030"; } + +.fa-camera-alt::before { + content: "\f030"; } + +.fa-square-virus::before { + content: "\e578"; } + +.fa-meteor::before { + content: "\f753"; } + +.fa-car-on::before { + content: "\e4dd"; } + +.fa-sleigh::before { + content: "\f7cc"; } + +.fa-arrow-down-1-9::before { + content: "\f162"; } + +.fa-sort-numeric-asc::before { + content: "\f162"; } + +.fa-sort-numeric-down::before { + content: "\f162"; } + +.fa-hand-holding-droplet::before { + content: "\f4c1"; } + +.fa-hand-holding-water::before { + content: "\f4c1"; } + +.fa-water::before { + content: "\f773"; } + +.fa-calendar-check::before { + content: "\f274"; } + +.fa-braille::before { + content: "\f2a1"; } + +.fa-prescription-bottle-medical::before { + content: "\f486"; } + +.fa-prescription-bottle-alt::before { + content: "\f486"; } + +.fa-landmark::before { + content: "\f66f"; } + +.fa-truck::before { + content: "\f0d1"; } + +.fa-crosshairs::before { + content: "\f05b"; } + +.fa-person-cane::before { + content: "\e53c"; } + +.fa-tent::before { + content: "\e57d"; } + +.fa-vest-patches::before { + content: "\e086"; } + +.fa-check-double::before { + content: "\f560"; } + +.fa-arrow-down-a-z::before { + content: "\f15d"; } + +.fa-sort-alpha-asc::before { + content: "\f15d"; } + +.fa-sort-alpha-down::before { + content: "\f15d"; } + +.fa-money-bill-wheat::before { + content: "\e52a"; } + +.fa-cookie::before { + content: "\f563"; } + +.fa-arrow-rotate-left::before { + content: "\f0e2"; } + +.fa-arrow-left-rotate::before { + content: "\f0e2"; } + +.fa-arrow-rotate-back::before { + content: "\f0e2"; } + +.fa-arrow-rotate-backward::before { + content: "\f0e2"; } + +.fa-undo::before { + content: "\f0e2"; } + +.fa-hard-drive::before { + content: "\f0a0"; } + +.fa-hdd::before { + content: "\f0a0"; } + +.fa-face-grin-squint-tears::before { + content: "\f586"; } + +.fa-grin-squint-tears::before { + content: "\f586"; } + +.fa-dumbbell::before { + content: "\f44b"; } + +.fa-rectangle-list::before { + content: "\f022"; } + +.fa-list-alt::before { + content: "\f022"; } + +.fa-tarp-droplet::before { + content: "\e57c"; } + +.fa-house-medical-circle-check::before { + content: "\e511"; } + +.fa-person-skiing-nordic::before { + content: "\f7ca"; } + +.fa-skiing-nordic::before { + content: "\f7ca"; } + +.fa-calendar-plus::before { + content: "\f271"; } + +.fa-plane-arrival::before { + content: "\f5af"; } + +.fa-circle-left::before { + content: "\f359"; } + +.fa-arrow-alt-circle-left::before { + content: "\f359"; } + +.fa-train-subway::before { + content: "\f239"; } + +.fa-subway::before { + content: "\f239"; } + +.fa-chart-gantt::before { + content: "\e0e4"; } + +.fa-indian-rupee-sign::before { + content: "\e1bc"; } + +.fa-indian-rupee::before { + content: "\e1bc"; } + +.fa-inr::before { + content: "\e1bc"; } + +.fa-crop-simple::before { + content: "\f565"; } + +.fa-crop-alt::before { + content: "\f565"; } + +.fa-money-bill-1::before { + content: "\f3d1"; } + +.fa-money-bill-alt::before { + content: "\f3d1"; } + +.fa-left-long::before { + content: "\f30a"; } + +.fa-long-arrow-alt-left::before { + content: "\f30a"; } + +.fa-dna::before { + content: "\f471"; } + +.fa-virus-slash::before { + content: "\e075"; } + +.fa-minus::before { + content: "\f068"; } + +.fa-subtract::before { + content: "\f068"; } + +.fa-chess::before { + content: "\f439"; } + +.fa-arrow-left-long::before { + content: "\f177"; } + +.fa-long-arrow-left::before { + content: "\f177"; } + +.fa-plug-circle-check::before { + content: "\e55c"; } + +.fa-street-view::before { + content: "\f21d"; } + +.fa-franc-sign::before { + content: "\e18f"; } + +.fa-volume-off::before { + content: "\f026"; } + +.fa-hands-asl-interpreting::before { + content: "\f2a3"; } + +.fa-american-sign-language-interpreting::before { + content: "\f2a3"; } + +.fa-asl-interpreting::before { + content: "\f2a3"; } + +.fa-hands-american-sign-language-interpreting::before { + content: "\f2a3"; } + +.fa-gear::before { + content: "\f013"; } + +.fa-cog::before { + content: "\f013"; } + +.fa-droplet-slash::before { + content: "\f5c7"; } + +.fa-tint-slash::before { + content: "\f5c7"; } + +.fa-mosque::before { + content: "\f678"; } + +.fa-mosquito::before { + content: "\e52b"; } + +.fa-star-of-david::before { + content: "\f69a"; } + +.fa-person-military-rifle::before { + content: "\e54b"; } + +.fa-cart-shopping::before { + content: "\f07a"; } + +.fa-shopping-cart::before { + content: "\f07a"; } + +.fa-vials::before { + content: "\f493"; } + +.fa-plug-circle-plus::before { + content: "\e55f"; } + +.fa-place-of-worship::before { + content: "\f67f"; } + +.fa-grip-vertical::before { + content: "\f58e"; } + +.fa-arrow-turn-up::before { + content: "\f148"; } + +.fa-level-up::before { + content: "\f148"; } + +.fa-u::before { + content: "\55"; } + +.fa-square-root-variable::before { + content: "\f698"; } + +.fa-square-root-alt::before { + content: "\f698"; } + +.fa-clock::before { + content: "\f017"; } + +.fa-clock-four::before { + content: "\f017"; } + +.fa-backward-step::before { + content: "\f048"; } + +.fa-step-backward::before { + content: "\f048"; } + +.fa-pallet::before { + content: "\f482"; } + +.fa-faucet::before { + content: "\e005"; } + +.fa-baseball-bat-ball::before { + content: "\f432"; } + +.fa-s::before { + content: "\53"; } + +.fa-timeline::before { + content: "\e29c"; } + +.fa-keyboard::before { + content: "\f11c"; } + +.fa-caret-down::before { + content: "\f0d7"; } + +.fa-house-chimney-medical::before { + content: "\f7f2"; } + +.fa-clinic-medical::before { + content: "\f7f2"; } + +.fa-temperature-three-quarters::before { + content: "\f2c8"; } + +.fa-temperature-3::before { + content: "\f2c8"; } + +.fa-thermometer-3::before { + content: "\f2c8"; } + +.fa-thermometer-three-quarters::before { + content: "\f2c8"; } + +.fa-mobile-screen::before { + content: "\f3cf"; } + +.fa-mobile-android-alt::before { + content: "\f3cf"; } + +.fa-plane-up::before { + content: "\e22d"; } + +.fa-piggy-bank::before { + content: "\f4d3"; } + +.fa-battery-half::before { + content: "\f242"; } + +.fa-battery-3::before { + content: "\f242"; } + +.fa-mountain-city::before { + content: "\e52e"; } + +.fa-coins::before { + content: "\f51e"; } + +.fa-khanda::before { + content: "\f66d"; } + +.fa-sliders::before { + content: "\f1de"; } + +.fa-sliders-h::before { + content: "\f1de"; } + +.fa-folder-tree::before { + content: "\f802"; } + +.fa-network-wired::before { + content: "\f6ff"; } + +.fa-map-pin::before { + content: "\f276"; } + +.fa-hamsa::before { + content: "\f665"; } + +.fa-cent-sign::before { + content: "\e3f5"; } + +.fa-flask::before { + content: "\f0c3"; } + +.fa-person-pregnant::before { + content: "\e31e"; } + +.fa-wand-sparkles::before { + content: "\f72b"; } + +.fa-ellipsis-vertical::before { + content: "\f142"; } + +.fa-ellipsis-v::before { + content: "\f142"; } + +.fa-ticket::before { + content: "\f145"; } + +.fa-power-off::before { + content: "\f011"; } + +.fa-right-long::before { + content: "\f30b"; } + +.fa-long-arrow-alt-right::before { + content: "\f30b"; } + +.fa-flag-usa::before { + content: "\f74d"; } + +.fa-laptop-file::before { + content: "\e51d"; } + +.fa-tty::before { + content: "\f1e4"; } + +.fa-teletype::before { + content: "\f1e4"; } + +.fa-diagram-next::before { + content: "\e476"; } + +.fa-person-rifle::before { + content: "\e54e"; } + +.fa-house-medical-circle-exclamation::before { + content: "\e512"; } + +.fa-closed-captioning::before { + content: "\f20a"; } + +.fa-person-hiking::before { + content: "\f6ec"; } + +.fa-hiking::before { + content: "\f6ec"; } + +.fa-venus-double::before { + content: "\f226"; } + +.fa-images::before { + content: "\f302"; } + +.fa-calculator::before { + content: "\f1ec"; } + +.fa-people-pulling::before { + content: "\e535"; } + +.fa-n::before { + content: "\4e"; } + +.fa-cable-car::before { + content: "\f7da"; } + +.fa-tram::before { + content: "\f7da"; } + +.fa-cloud-rain::before { + content: "\f73d"; } + +.fa-building-circle-xmark::before { + content: "\e4d4"; } + +.fa-ship::before { + content: "\f21a"; } + +.fa-arrows-down-to-line::before { + content: "\e4b8"; } + +.fa-download::before { + content: "\f019"; } + +.fa-face-grin::before { + content: "\f580"; } + +.fa-grin::before { + content: "\f580"; } + +.fa-delete-left::before { + content: "\f55a"; } + +.fa-backspace::before { + content: "\f55a"; } + +.fa-eye-dropper::before { + content: "\f1fb"; } + +.fa-eye-dropper-empty::before { + content: "\f1fb"; } + +.fa-eyedropper::before { + content: "\f1fb"; } + +.fa-file-circle-check::before { + content: "\e5a0"; } + +.fa-forward::before { + content: "\f04e"; } + +.fa-mobile::before { + content: "\f3ce"; } + +.fa-mobile-android::before { + content: "\f3ce"; } + +.fa-mobile-phone::before { + content: "\f3ce"; } + +.fa-face-meh::before { + content: "\f11a"; } + +.fa-meh::before { + content: "\f11a"; } + +.fa-align-center::before { + content: "\f037"; } + +.fa-book-skull::before { + content: "\f6b7"; } + +.fa-book-dead::before { + content: "\f6b7"; } + +.fa-id-card::before { + content: "\f2c2"; } + +.fa-drivers-license::before { + content: "\f2c2"; } + +.fa-outdent::before { + content: "\f03b"; } + +.fa-dedent::before { + content: "\f03b"; } + +.fa-heart-circle-exclamation::before { + content: "\e4fe"; } + +.fa-house::before { + content: "\f015"; } + +.fa-home::before { + content: "\f015"; } + +.fa-home-alt::before { + content: "\f015"; } + +.fa-home-lg-alt::before { + content: "\f015"; } + +.fa-calendar-week::before { + content: "\f784"; } + +.fa-laptop-medical::before { + content: "\f812"; } + +.fa-b::before { + content: "\42"; } + +.fa-file-medical::before { + content: "\f477"; } + +.fa-dice-one::before { + content: "\f525"; } + +.fa-kiwi-bird::before { + content: "\f535"; } + +.fa-arrow-right-arrow-left::before { + content: "\f0ec"; } + +.fa-exchange::before { + content: "\f0ec"; } + +.fa-rotate-right::before { + content: "\f2f9"; } + +.fa-redo-alt::before { + content: "\f2f9"; } + +.fa-rotate-forward::before { + content: "\f2f9"; } + +.fa-utensils::before { + content: "\f2e7"; } + +.fa-cutlery::before { + content: "\f2e7"; } + +.fa-arrow-up-wide-short::before { + content: "\f161"; } + +.fa-sort-amount-up::before { + content: "\f161"; } + +.fa-mill-sign::before { + content: "\e1ed"; } + +.fa-bowl-rice::before { + content: "\e2eb"; } + +.fa-skull::before { + content: "\f54c"; } + +.fa-tower-broadcast::before { + content: "\f519"; } + +.fa-broadcast-tower::before { + content: "\f519"; } + +.fa-truck-pickup::before { + content: "\f63c"; } + +.fa-up-long::before { + content: "\f30c"; } + +.fa-long-arrow-alt-up::before { + content: "\f30c"; } + +.fa-stop::before { + content: "\f04d"; } + +.fa-code-merge::before { + content: "\f387"; } + +.fa-upload::before { + content: "\f093"; } + +.fa-hurricane::before { + content: "\f751"; } + +.fa-mound::before { + content: "\e52d"; } + +.fa-toilet-portable::before { + content: "\e583"; } + +.fa-compact-disc::before { + content: "\f51f"; } + +.fa-file-arrow-down::before { + content: "\f56d"; } + +.fa-file-download::before { + content: "\f56d"; } + +.fa-caravan::before { + content: "\f8ff"; } + +.fa-shield-cat::before { + content: "\e572"; } + +.fa-bolt::before { + content: "\f0e7"; } + +.fa-zap::before { + content: "\f0e7"; } + +.fa-glass-water::before { + content: "\e4f4"; } + +.fa-oil-well::before { + content: "\e532"; } + +.fa-vault::before { + content: "\e2c5"; } + +.fa-mars::before { + content: "\f222"; } + +.fa-toilet::before { + content: "\f7d8"; } + +.fa-plane-circle-xmark::before { + content: "\e557"; } + +.fa-yen-sign::before { + content: "\f157"; } + +.fa-cny::before { + content: "\f157"; } + +.fa-jpy::before { + content: "\f157"; } + +.fa-rmb::before { + content: "\f157"; } + +.fa-yen::before { + content: "\f157"; } + +.fa-ruble-sign::before { + content: "\f158"; } + +.fa-rouble::before { + content: "\f158"; } + +.fa-rub::before { + content: "\f158"; } + +.fa-ruble::before { + content: "\f158"; } + +.fa-sun::before { + content: "\f185"; } + +.fa-guitar::before { + content: "\f7a6"; } + +.fa-face-laugh-wink::before { + content: "\f59c"; } + +.fa-laugh-wink::before { + content: "\f59c"; } + +.fa-horse-head::before { + content: "\f7ab"; } + +.fa-bore-hole::before { + content: "\e4c3"; } + +.fa-industry::before { + content: "\f275"; } + +.fa-circle-down::before { + content: "\f358"; } + +.fa-arrow-alt-circle-down::before { + content: "\f358"; } + +.fa-arrows-turn-to-dots::before { + content: "\e4c1"; } + +.fa-florin-sign::before { + content: "\e184"; } + +.fa-arrow-down-short-wide::before { + content: "\f884"; } + +.fa-sort-amount-desc::before { + content: "\f884"; } + +.fa-sort-amount-down-alt::before { + content: "\f884"; } + +.fa-less-than::before { + content: "\3c"; } + +.fa-angle-down::before { + content: "\f107"; } + +.fa-car-tunnel::before { + content: "\e4de"; } + +.fa-head-side-cough::before { + content: "\e061"; } + +.fa-grip-lines::before { + content: "\f7a4"; } + +.fa-thumbs-down::before { + content: "\f165"; } + +.fa-user-lock::before { + content: "\f502"; } + +.fa-arrow-right-long::before { + content: "\f178"; } + +.fa-long-arrow-right::before { + content: "\f178"; } + +.fa-anchor-circle-xmark::before { + content: "\e4ac"; } + +.fa-ellipsis::before { + content: "\f141"; } + +.fa-ellipsis-h::before { + content: "\f141"; } + +.fa-chess-pawn::before { + content: "\f443"; } + +.fa-kit-medical::before { + content: "\f479"; } + +.fa-first-aid::before { + content: "\f479"; } + +.fa-person-through-window::before { + content: "\e5a9"; } + +.fa-toolbox::before { + content: "\f552"; } + +.fa-hands-holding-circle::before { + content: "\e4fb"; } + +.fa-bug::before { + content: "\f188"; } + +.fa-credit-card::before { + content: "\f09d"; } + +.fa-credit-card-alt::before { + content: "\f09d"; } + +.fa-car::before { + content: "\f1b9"; } + +.fa-automobile::before { + content: "\f1b9"; } + +.fa-hand-holding-hand::before { + content: "\e4f7"; } + +.fa-book-open-reader::before { + content: "\f5da"; } + +.fa-book-reader::before { + content: "\f5da"; } + +.fa-mountain-sun::before { + content: "\e52f"; } + +.fa-arrows-left-right-to-line::before { + content: "\e4ba"; } + +.fa-dice-d20::before { + content: "\f6cf"; } + +.fa-truck-droplet::before { + content: "\e58c"; } + +.fa-file-circle-xmark::before { + content: "\e5a1"; } + +.fa-temperature-arrow-up::before { + content: "\e040"; } + +.fa-temperature-up::before { + content: "\e040"; } + +.fa-medal::before { + content: "\f5a2"; } + +.fa-bed::before { + content: "\f236"; } + +.fa-square-h::before { + content: "\f0fd"; } + +.fa-h-square::before { + content: "\f0fd"; } + +.fa-podcast::before { + content: "\f2ce"; } + +.fa-temperature-full::before { + content: "\f2c7"; } + +.fa-temperature-4::before { + content: "\f2c7"; } + +.fa-thermometer-4::before { + content: "\f2c7"; } + +.fa-thermometer-full::before { + content: "\f2c7"; } + +.fa-bell::before { + content: "\f0f3"; } + +.fa-superscript::before { + content: "\f12b"; } + +.fa-plug-circle-xmark::before { + content: "\e560"; } + +.fa-star-of-life::before { + content: "\f621"; } + +.fa-phone-slash::before { + content: "\f3dd"; } + +.fa-paint-roller::before { + content: "\f5aa"; } + +.fa-handshake-angle::before { + content: "\f4c4"; } + +.fa-hands-helping::before { + content: "\f4c4"; } + +.fa-location-dot::before { + content: "\f3c5"; } + +.fa-map-marker-alt::before { + content: "\f3c5"; } + +.fa-file::before { + content: "\f15b"; } + +.fa-greater-than::before { + content: "\3e"; } + +.fa-person-swimming::before { + content: "\f5c4"; } + +.fa-swimmer::before { + content: "\f5c4"; } + +.fa-arrow-down::before { + content: "\f063"; } + +.fa-droplet::before { + content: "\f043"; } + +.fa-tint::before { + content: "\f043"; } + +.fa-eraser::before { + content: "\f12d"; } + +.fa-earth-americas::before { + content: "\f57d"; } + +.fa-earth::before { + content: "\f57d"; } + +.fa-earth-america::before { + content: "\f57d"; } + +.fa-globe-americas::before { + content: "\f57d"; } + +.fa-person-burst::before { + content: "\e53b"; } + +.fa-dove::before { + content: "\f4ba"; } + +.fa-battery-empty::before { + content: "\f244"; } + +.fa-battery-0::before { + content: "\f244"; } + +.fa-socks::before { + content: "\f696"; } + +.fa-inbox::before { + content: "\f01c"; } + +.fa-section::before { + content: "\e447"; } + +.fa-gauge-high::before { + content: "\f625"; } + +.fa-tachometer-alt::before { + content: "\f625"; } + +.fa-tachometer-alt-fast::before { + content: "\f625"; } + +.fa-envelope-open-text::before { + content: "\f658"; } + +.fa-hospital::before { + content: "\f0f8"; } + +.fa-hospital-alt::before { + content: "\f0f8"; } + +.fa-hospital-wide::before { + content: "\f0f8"; } + +.fa-wine-bottle::before { + content: "\f72f"; } + +.fa-chess-rook::before { + content: "\f447"; } + +.fa-bars-staggered::before { + content: "\f550"; } + +.fa-reorder::before { + content: "\f550"; } + +.fa-stream::before { + content: "\f550"; } + +.fa-dharmachakra::before { + content: "\f655"; } + +.fa-hotdog::before { + content: "\f80f"; } + +.fa-person-walking-with-cane::before { + content: "\f29d"; } + +.fa-blind::before { + content: "\f29d"; } + +.fa-drum::before { + content: "\f569"; } + +.fa-ice-cream::before { + content: "\f810"; } + +.fa-heart-circle-bolt::before { + content: "\e4fc"; } + +.fa-fax::before { + content: "\f1ac"; } + +.fa-paragraph::before { + content: "\f1dd"; } + +.fa-check-to-slot::before { + content: "\f772"; } + +.fa-vote-yea::before { + content: "\f772"; } + +.fa-star-half::before { + content: "\f089"; } + +.fa-boxes-stacked::before { + content: "\f468"; } + +.fa-boxes::before { + content: "\f468"; } + +.fa-boxes-alt::before { + content: "\f468"; } + +.fa-link::before { + content: "\f0c1"; } + +.fa-chain::before { + content: "\f0c1"; } + +.fa-ear-listen::before { + content: "\f2a2"; } + +.fa-assistive-listening-systems::before { + content: "\f2a2"; } + +.fa-tree-city::before { + content: "\e587"; } + +.fa-play::before { + content: "\f04b"; } + +.fa-font::before { + content: "\f031"; } + +.fa-rupiah-sign::before { + content: "\e23d"; } + +.fa-magnifying-glass::before { + content: "\f002"; } + +.fa-search::before { + content: "\f002"; } + +.fa-table-tennis-paddle-ball::before { + content: "\f45d"; } + +.fa-ping-pong-paddle-ball::before { + content: "\f45d"; } + +.fa-table-tennis::before { + content: "\f45d"; } + +.fa-person-dots-from-line::before { + content: "\f470"; } + +.fa-diagnoses::before { + content: "\f470"; } + +.fa-trash-can-arrow-up::before { + content: "\f82a"; } + +.fa-trash-restore-alt::before { + content: "\f82a"; } + +.fa-naira-sign::before { + content: "\e1f6"; } + +.fa-cart-arrow-down::before { + content: "\f218"; } + +.fa-walkie-talkie::before { + content: "\f8ef"; } + +.fa-file-pen::before { + content: "\f31c"; } + +.fa-file-edit::before { + content: "\f31c"; } + +.fa-receipt::before { + content: "\f543"; } + +.fa-square-pen::before { + content: "\f14b"; } + +.fa-pen-square::before { + content: "\f14b"; } + +.fa-pencil-square::before { + content: "\f14b"; } + +.fa-suitcase-rolling::before { + content: "\f5c1"; } + +.fa-person-circle-exclamation::before { + content: "\e53f"; } + +.fa-chevron-down::before { + content: "\f078"; } + +.fa-battery-full::before { + content: "\f240"; } + +.fa-battery::before { + content: "\f240"; } + +.fa-battery-5::before { + content: "\f240"; } + +.fa-skull-crossbones::before { + content: "\f714"; } + +.fa-code-compare::before { + content: "\e13a"; } + +.fa-list-ul::before { + content: "\f0ca"; } + +.fa-list-dots::before { + content: "\f0ca"; } + +.fa-school-lock::before { + content: "\e56f"; } + +.fa-tower-cell::before { + content: "\e585"; } + +.fa-down-long::before { + content: "\f309"; } + +.fa-long-arrow-alt-down::before { + content: "\f309"; } + +.fa-ranking-star::before { + content: "\e561"; } + +.fa-chess-king::before { + content: "\f43f"; } + +.fa-person-harassing::before { + content: "\e549"; } + +.fa-brazilian-real-sign::before { + content: "\e46c"; } + +.fa-landmark-dome::before { + content: "\f752"; } + +.fa-landmark-alt::before { + content: "\f752"; } + +.fa-arrow-up::before { + content: "\f062"; } + +.fa-tv::before { + content: "\f26c"; } + +.fa-television::before { + content: "\f26c"; } + +.fa-tv-alt::before { + content: "\f26c"; } + +.fa-shrimp::before { + content: "\e448"; } + +.fa-list-check::before { + content: "\f0ae"; } + +.fa-tasks::before { + content: "\f0ae"; } + +.fa-jug-detergent::before { + content: "\e519"; } + +.fa-circle-user::before { + content: "\f2bd"; } + +.fa-user-circle::before { + content: "\f2bd"; } + +.fa-user-shield::before { + content: "\f505"; } + +.fa-wind::before { + content: "\f72e"; } + +.fa-car-burst::before { + content: "\f5e1"; } + +.fa-car-crash::before { + content: "\f5e1"; } + +.fa-y::before { + content: "\59"; } + +.fa-person-snowboarding::before { + content: "\f7ce"; } + +.fa-snowboarding::before { + content: "\f7ce"; } + +.fa-truck-fast::before { + content: "\f48b"; } + +.fa-shipping-fast::before { + content: "\f48b"; } + +.fa-fish::before { + content: "\f578"; } + +.fa-user-graduate::before { + content: "\f501"; } + +.fa-circle-half-stroke::before { + content: "\f042"; } + +.fa-adjust::before { + content: "\f042"; } + +.fa-clapperboard::before { + content: "\e131"; } + +.fa-circle-radiation::before { + content: "\f7ba"; } + +.fa-radiation-alt::before { + content: "\f7ba"; } + +.fa-baseball::before { + content: "\f433"; } + +.fa-baseball-ball::before { + content: "\f433"; } + +.fa-jet-fighter-up::before { + content: "\e518"; } + +.fa-diagram-project::before { + content: "\f542"; } + +.fa-project-diagram::before { + content: "\f542"; } + +.fa-copy::before { + content: "\f0c5"; } + +.fa-volume-xmark::before { + content: "\f6a9"; } + +.fa-volume-mute::before { + content: "\f6a9"; } + +.fa-volume-times::before { + content: "\f6a9"; } + +.fa-hand-sparkles::before { + content: "\e05d"; } + +.fa-grip::before { + content: "\f58d"; } + +.fa-grip-horizontal::before { + content: "\f58d"; } + +.fa-share-from-square::before { + content: "\f14d"; } + +.fa-share-square::before { + content: "\f14d"; } + +.fa-child-combatant::before { + content: "\e4e0"; } + +.fa-child-rifle::before { + content: "\e4e0"; } + +.fa-gun::before { + content: "\e19b"; } + +.fa-square-phone::before { + content: "\f098"; } + +.fa-phone-square::before { + content: "\f098"; } + +.fa-plus::before { + content: "\2b"; } + +.fa-add::before { + content: "\2b"; } + +.fa-expand::before { + content: "\f065"; } + +.fa-computer::before { + content: "\e4e5"; } + +.fa-xmark::before { + content: "\f00d"; } + +.fa-close::before { + content: "\f00d"; } + +.fa-multiply::before { + content: "\f00d"; } + +.fa-remove::before { + content: "\f00d"; } + +.fa-times::before { + content: "\f00d"; } + +.fa-arrows-up-down-left-right::before { + content: "\f047"; } + +.fa-arrows::before { + content: "\f047"; } + +.fa-chalkboard-user::before { + content: "\f51c"; } + +.fa-chalkboard-teacher::before { + content: "\f51c"; } + +.fa-peso-sign::before { + content: "\e222"; } + +.fa-building-shield::before { + content: "\e4d8"; } + +.fa-baby::before { + content: "\f77c"; } + +.fa-users-line::before { + content: "\e592"; } + +.fa-quote-left::before { + content: "\f10d"; } + +.fa-quote-left-alt::before { + content: "\f10d"; } + +.fa-tractor::before { + content: "\f722"; } + +.fa-trash-arrow-up::before { + content: "\f829"; } + +.fa-trash-restore::before { + content: "\f829"; } + +.fa-arrow-down-up-lock::before { + content: "\e4b0"; } + +.fa-lines-leaning::before { + content: "\e51e"; } + +.fa-ruler-combined::before { + content: "\f546"; } + +.fa-copyright::before { + content: "\f1f9"; } + +.fa-equals::before { + content: "\3d"; } + +.fa-blender::before { + content: "\f517"; } + +.fa-teeth::before { + content: "\f62e"; } + +.fa-shekel-sign::before { + content: "\f20b"; } + +.fa-ils::before { + content: "\f20b"; } + +.fa-shekel::before { + content: "\f20b"; } + +.fa-sheqel::before { + content: "\f20b"; } + +.fa-sheqel-sign::before { + content: "\f20b"; } + +.fa-map::before { + content: "\f279"; } + +.fa-rocket::before { + content: "\f135"; } + +.fa-photo-film::before { + content: "\f87c"; } + +.fa-photo-video::before { + content: "\f87c"; } + +.fa-folder-minus::before { + content: "\f65d"; } + +.fa-store::before { + content: "\f54e"; } + +.fa-arrow-trend-up::before { + content: "\e098"; } + +.fa-plug-circle-minus::before { + content: "\e55e"; } + +.fa-sign-hanging::before { + content: "\f4d9"; } + +.fa-sign::before { + content: "\f4d9"; } + +.fa-bezier-curve::before { + content: "\f55b"; } + +.fa-bell-slash::before { + content: "\f1f6"; } + +.fa-tablet::before { + content: "\f3fb"; } + +.fa-tablet-android::before { + content: "\f3fb"; } + +.fa-school-flag::before { + content: "\e56e"; } + +.fa-fill::before { + content: "\f575"; } + +.fa-angle-up::before { + content: "\f106"; } + +.fa-drumstick-bite::before { + content: "\f6d7"; } + +.fa-holly-berry::before { + content: "\f7aa"; } + +.fa-chevron-left::before { + content: "\f053"; } + +.fa-bacteria::before { + content: "\e059"; } + +.fa-hand-lizard::before { + content: "\f258"; } + +.fa-notdef::before { + content: "\e1fe"; } + +.fa-disease::before { + content: "\f7fa"; } + +.fa-briefcase-medical::before { + content: "\f469"; } + +.fa-genderless::before { + content: "\f22d"; } + +.fa-chevron-right::before { + content: "\f054"; } + +.fa-retweet::before { + content: "\f079"; } + +.fa-car-rear::before { + content: "\f5de"; } + +.fa-car-alt::before { + content: "\f5de"; } + +.fa-pump-soap::before { + content: "\e06b"; } + +.fa-video-slash::before { + content: "\f4e2"; } + +.fa-battery-quarter::before { + content: "\f243"; } + +.fa-battery-2::before { + content: "\f243"; } + +.fa-radio::before { + content: "\f8d7"; } + +.fa-baby-carriage::before { + content: "\f77d"; } + +.fa-carriage-baby::before { + content: "\f77d"; } + +.fa-traffic-light::before { + content: "\f637"; } + +.fa-thermometer::before { + content: "\f491"; } + +.fa-vr-cardboard::before { + content: "\f729"; } + +.fa-hand-middle-finger::before { + content: "\f806"; } + +.fa-percent::before { + content: "\25"; } + +.fa-percentage::before { + content: "\25"; } + +.fa-truck-moving::before { + content: "\f4df"; } + +.fa-glass-water-droplet::before { + content: "\e4f5"; } + +.fa-display::before { + content: "\e163"; } + +.fa-face-smile::before { + content: "\f118"; } + +.fa-smile::before { + content: "\f118"; } + +.fa-thumbtack::before { + content: "\f08d"; } + +.fa-thumb-tack::before { + content: "\f08d"; } + +.fa-trophy::before { + content: "\f091"; } + +.fa-person-praying::before { + content: "\f683"; } + +.fa-pray::before { + content: "\f683"; } + +.fa-hammer::before { + content: "\f6e3"; } + +.fa-hand-peace::before { + content: "\f25b"; } + +.fa-rotate::before { + content: "\f2f1"; } + +.fa-sync-alt::before { + content: "\f2f1"; } + +.fa-spinner::before { + content: "\f110"; } + +.fa-robot::before { + content: "\f544"; } + +.fa-peace::before { + content: "\f67c"; } + +.fa-gears::before { + content: "\f085"; } + +.fa-cogs::before { + content: "\f085"; } + +.fa-warehouse::before { + content: "\f494"; } + +.fa-arrow-up-right-dots::before { + content: "\e4b7"; } + +.fa-splotch::before { + content: "\f5bc"; } + +.fa-face-grin-hearts::before { + content: "\f584"; } + +.fa-grin-hearts::before { + content: "\f584"; } + +.fa-dice-four::before { + content: "\f524"; } + +.fa-sim-card::before { + content: "\f7c4"; } + +.fa-transgender::before { + content: "\f225"; } + +.fa-transgender-alt::before { + content: "\f225"; } + +.fa-mercury::before { + content: "\f223"; } + +.fa-arrow-turn-down::before { + content: "\f149"; } + +.fa-level-down::before { + content: "\f149"; } + +.fa-person-falling-burst::before { + content: "\e547"; } + +.fa-award::before { + content: "\f559"; } + +.fa-ticket-simple::before { + content: "\f3ff"; } + +.fa-ticket-alt::before { + content: "\f3ff"; } + +.fa-building::before { + content: "\f1ad"; } + +.fa-angles-left::before { + content: "\f100"; } + +.fa-angle-double-left::before { + content: "\f100"; } + +.fa-qrcode::before { + content: "\f029"; } + +.fa-clock-rotate-left::before { + content: "\f1da"; } + +.fa-history::before { + content: "\f1da"; } + +.fa-face-grin-beam-sweat::before { + content: "\f583"; } + +.fa-grin-beam-sweat::before { + content: "\f583"; } + +.fa-file-export::before { + content: "\f56e"; } + +.fa-arrow-right-from-file::before { + content: "\f56e"; } + +.fa-shield::before { + content: "\f132"; } + +.fa-shield-blank::before { + content: "\f132"; } + +.fa-arrow-up-short-wide::before { + content: "\f885"; } + +.fa-sort-amount-up-alt::before { + content: "\f885"; } + +.fa-house-medical::before { + content: "\e3b2"; } + +.fa-golf-ball-tee::before { + content: "\f450"; } + +.fa-golf-ball::before { + content: "\f450"; } + +.fa-circle-chevron-left::before { + content: "\f137"; } + +.fa-chevron-circle-left::before { + content: "\f137"; } + +.fa-house-chimney-window::before { + content: "\e00d"; } + +.fa-pen-nib::before { + content: "\f5ad"; } + +.fa-tent-arrow-turn-left::before { + content: "\e580"; } + +.fa-tents::before { + content: "\e582"; } + +.fa-wand-magic::before { + content: "\f0d0"; } + +.fa-magic::before { + content: "\f0d0"; } + +.fa-dog::before { + content: "\f6d3"; } + +.fa-carrot::before { + content: "\f787"; } + +.fa-moon::before { + content: "\f186"; } + +.fa-wine-glass-empty::before { + content: "\f5ce"; } + +.fa-wine-glass-alt::before { + content: "\f5ce"; } + +.fa-cheese::before { + content: "\f7ef"; } + +.fa-yin-yang::before { + content: "\f6ad"; } + +.fa-music::before { + content: "\f001"; } + +.fa-code-commit::before { + content: "\f386"; } + +.fa-temperature-low::before { + content: "\f76b"; } + +.fa-person-biking::before { + content: "\f84a"; } + +.fa-biking::before { + content: "\f84a"; } + +.fa-broom::before { + content: "\f51a"; } + +.fa-shield-heart::before { + content: "\e574"; } + +.fa-gopuram::before { + content: "\f664"; } + +.fa-earth-oceania::before { + content: "\e47b"; } + +.fa-globe-oceania::before { + content: "\e47b"; } + +.fa-square-xmark::before { + content: "\f2d3"; } + +.fa-times-square::before { + content: "\f2d3"; } + +.fa-xmark-square::before { + content: "\f2d3"; } + +.fa-hashtag::before { + content: "\23"; } + +.fa-up-right-and-down-left-from-center::before { + content: "\f424"; } + +.fa-expand-alt::before { + content: "\f424"; } + +.fa-oil-can::before { + content: "\f613"; } + +.fa-t::before { + content: "\54"; } + +.fa-hippo::before { + content: "\f6ed"; } + +.fa-chart-column::before { + content: "\e0e3"; } + +.fa-infinity::before { + content: "\f534"; } + +.fa-vial-circle-check::before { + content: "\e596"; } + +.fa-person-arrow-down-to-line::before { + content: "\e538"; } + +.fa-voicemail::before { + content: "\f897"; } + +.fa-fan::before { + content: "\f863"; } + +.fa-person-walking-luggage::before { + content: "\e554"; } + +.fa-up-down::before { + content: "\f338"; } + +.fa-arrows-alt-v::before { + content: "\f338"; } + +.fa-cloud-moon-rain::before { + content: "\f73c"; } + +.fa-calendar::before { + content: "\f133"; } + +.fa-trailer::before { + content: "\e041"; } + +.fa-bahai::before { + content: "\f666"; } + +.fa-haykal::before { + content: "\f666"; } + +.fa-sd-card::before { + content: "\f7c2"; } + +.fa-dragon::before { + content: "\f6d5"; } + +.fa-shoe-prints::before { + content: "\f54b"; } + +.fa-circle-plus::before { + content: "\f055"; } + +.fa-plus-circle::before { + content: "\f055"; } + +.fa-face-grin-tongue-wink::before { + content: "\f58b"; } + +.fa-grin-tongue-wink::before { + content: "\f58b"; } + +.fa-hand-holding::before { + content: "\f4bd"; } + +.fa-plug-circle-exclamation::before { + content: "\e55d"; } + +.fa-link-slash::before { + content: "\f127"; } + +.fa-chain-broken::before { + content: "\f127"; } + +.fa-chain-slash::before { + content: "\f127"; } + +.fa-unlink::before { + content: "\f127"; } + +.fa-clone::before { + content: "\f24d"; } + +.fa-person-walking-arrow-loop-left::before { + content: "\e551"; } + +.fa-arrow-up-z-a::before { + content: "\f882"; } + +.fa-sort-alpha-up-alt::before { + content: "\f882"; } + +.fa-fire-flame-curved::before { + content: "\f7e4"; } + +.fa-fire-alt::before { + content: "\f7e4"; } + +.fa-tornado::before { + content: "\f76f"; } + +.fa-file-circle-plus::before { + content: "\e494"; } + +.fa-book-quran::before { + content: "\f687"; } + +.fa-quran::before { + content: "\f687"; } + +.fa-anchor::before { + content: "\f13d"; } + +.fa-border-all::before { + content: "\f84c"; } + +.fa-face-angry::before { + content: "\f556"; } + +.fa-angry::before { + content: "\f556"; } + +.fa-cookie-bite::before { + content: "\f564"; } + +.fa-arrow-trend-down::before { + content: "\e097"; } + +.fa-rss::before { + content: "\f09e"; } + +.fa-feed::before { + content: "\f09e"; } + +.fa-draw-polygon::before { + content: "\f5ee"; } + +.fa-scale-balanced::before { + content: "\f24e"; } + +.fa-balance-scale::before { + content: "\f24e"; } + +.fa-gauge-simple-high::before { + content: "\f62a"; } + +.fa-tachometer::before { + content: "\f62a"; } + +.fa-tachometer-fast::before { + content: "\f62a"; } + +.fa-shower::before { + content: "\f2cc"; } + +.fa-desktop::before { + content: "\f390"; } + +.fa-desktop-alt::before { + content: "\f390"; } + +.fa-m::before { + content: "\4d"; } + +.fa-table-list::before { + content: "\f00b"; } + +.fa-th-list::before { + content: "\f00b"; } + +.fa-comment-sms::before { + content: "\f7cd"; } + +.fa-sms::before { + content: "\f7cd"; } + +.fa-book::before { + content: "\f02d"; } + +.fa-user-plus::before { + content: "\f234"; } + +.fa-check::before { + content: "\f00c"; } + +.fa-battery-three-quarters::before { + content: "\f241"; } + +.fa-battery-4::before { + content: "\f241"; } + +.fa-house-circle-check::before { + content: "\e509"; } + +.fa-angle-left::before { + content: "\f104"; } + +.fa-diagram-successor::before { + content: "\e47a"; } + +.fa-truck-arrow-right::before { + content: "\e58b"; } + +.fa-arrows-split-up-and-left::before { + content: "\e4bc"; } + +.fa-hand-fist::before { + content: "\f6de"; } + +.fa-fist-raised::before { + content: "\f6de"; } + +.fa-cloud-moon::before { + content: "\f6c3"; } + +.fa-briefcase::before { + content: "\f0b1"; } + +.fa-person-falling::before { + content: "\e546"; } + +.fa-image-portrait::before { + content: "\f3e0"; } + +.fa-portrait::before { + content: "\f3e0"; } + +.fa-user-tag::before { + content: "\f507"; } + +.fa-rug::before { + content: "\e569"; } + +.fa-earth-europe::before { + content: "\f7a2"; } + +.fa-globe-europe::before { + content: "\f7a2"; } + +.fa-cart-flatbed-suitcase::before { + content: "\f59d"; } + +.fa-luggage-cart::before { + content: "\f59d"; } + +.fa-rectangle-xmark::before { + content: "\f410"; } + +.fa-rectangle-times::before { + content: "\f410"; } + +.fa-times-rectangle::before { + content: "\f410"; } + +.fa-window-close::before { + content: "\f410"; } + +.fa-baht-sign::before { + content: "\e0ac"; } + +.fa-book-open::before { + content: "\f518"; } + +.fa-book-journal-whills::before { + content: "\f66a"; } + +.fa-journal-whills::before { + content: "\f66a"; } + +.fa-handcuffs::before { + content: "\e4f8"; } + +.fa-triangle-exclamation::before { + content: "\f071"; } + +.fa-exclamation-triangle::before { + content: "\f071"; } + +.fa-warning::before { + content: "\f071"; } + +.fa-database::before { + content: "\f1c0"; } + +.fa-share::before { + content: "\f064"; } + +.fa-arrow-turn-right::before { + content: "\f064"; } + +.fa-mail-forward::before { + content: "\f064"; } + +.fa-bottle-droplet::before { + content: "\e4c4"; } + +.fa-mask-face::before { + content: "\e1d7"; } + +.fa-hill-rockslide::before { + content: "\e508"; } + +.fa-right-left::before { + content: "\f362"; } + +.fa-exchange-alt::before { + content: "\f362"; } + +.fa-paper-plane::before { + content: "\f1d8"; } + +.fa-road-circle-exclamation::before { + content: "\e565"; } + +.fa-dungeon::before { + content: "\f6d9"; } + +.fa-align-right::before { + content: "\f038"; } + +.fa-money-bill-1-wave::before { + content: "\f53b"; } + +.fa-money-bill-wave-alt::before { + content: "\f53b"; } + +.fa-life-ring::before { + content: "\f1cd"; } + +.fa-hands::before { + content: "\f2a7"; } + +.fa-sign-language::before { + content: "\f2a7"; } + +.fa-signing::before { + content: "\f2a7"; } + +.fa-calendar-day::before { + content: "\f783"; } + +.fa-water-ladder::before { + content: "\f5c5"; } + +.fa-ladder-water::before { + content: "\f5c5"; } + +.fa-swimming-pool::before { + content: "\f5c5"; } + +.fa-arrows-up-down::before { + content: "\f07d"; } + +.fa-arrows-v::before { + content: "\f07d"; } + +.fa-face-grimace::before { + content: "\f57f"; } + +.fa-grimace::before { + content: "\f57f"; } + +.fa-wheelchair-move::before { + content: "\e2ce"; } + +.fa-wheelchair-alt::before { + content: "\e2ce"; } + +.fa-turn-down::before { + content: "\f3be"; } + +.fa-level-down-alt::before { + content: "\f3be"; } + +.fa-person-walking-arrow-right::before { + content: "\e552"; } + +.fa-square-envelope::before { + content: "\f199"; } + +.fa-envelope-square::before { + content: "\f199"; } + +.fa-dice::before { + content: "\f522"; } + +.fa-bowling-ball::before { + content: "\f436"; } + +.fa-brain::before { + content: "\f5dc"; } + +.fa-bandage::before { + content: "\f462"; } + +.fa-band-aid::before { + content: "\f462"; } + +.fa-calendar-minus::before { + content: "\f272"; } + +.fa-circle-xmark::before { + content: "\f057"; } + +.fa-times-circle::before { + content: "\f057"; } + +.fa-xmark-circle::before { + content: "\f057"; } + +.fa-gifts::before { + content: "\f79c"; } + +.fa-hotel::before { + content: "\f594"; } + +.fa-earth-asia::before { + content: "\f57e"; } + +.fa-globe-asia::before { + content: "\f57e"; } + +.fa-id-card-clip::before { + content: "\f47f"; } + +.fa-id-card-alt::before { + content: "\f47f"; } + +.fa-magnifying-glass-plus::before { + content: "\f00e"; } + +.fa-search-plus::before { + content: "\f00e"; } + +.fa-thumbs-up::before { + content: "\f164"; } + +.fa-user-clock::before { + content: "\f4fd"; } + +.fa-hand-dots::before { + content: "\f461"; } + +.fa-allergies::before { + content: "\f461"; } + +.fa-file-invoice::before { + content: "\f570"; } + +.fa-window-minimize::before { + content: "\f2d1"; } + +.fa-mug-saucer::before { + content: "\f0f4"; } + +.fa-coffee::before { + content: "\f0f4"; } + +.fa-brush::before { + content: "\f55d"; } + +.fa-mask::before { + content: "\f6fa"; } + +.fa-magnifying-glass-minus::before { + content: "\f010"; } + +.fa-search-minus::before { + content: "\f010"; } + +.fa-ruler-vertical::before { + content: "\f548"; } + +.fa-user-large::before { + content: "\f406"; } + +.fa-user-alt::before { + content: "\f406"; } + +.fa-train-tram::before { + content: "\e5b4"; } + +.fa-user-nurse::before { + content: "\f82f"; } + +.fa-syringe::before { + content: "\f48e"; } + +.fa-cloud-sun::before { + content: "\f6c4"; } + +.fa-stopwatch-20::before { + content: "\e06f"; } + +.fa-square-full::before { + content: "\f45c"; } + +.fa-magnet::before { + content: "\f076"; } + +.fa-jar::before { + content: "\e516"; } + +.fa-note-sticky::before { + content: "\f249"; } + +.fa-sticky-note::before { + content: "\f249"; } + +.fa-bug-slash::before { + content: "\e490"; } + +.fa-arrow-up-from-water-pump::before { + content: "\e4b6"; } + +.fa-bone::before { + content: "\f5d7"; } + +.fa-user-injured::before { + content: "\f728"; } + +.fa-face-sad-tear::before { + content: "\f5b4"; } + +.fa-sad-tear::before { + content: "\f5b4"; } + +.fa-plane::before { + content: "\f072"; } + +.fa-tent-arrows-down::before { + content: "\e581"; } + +.fa-exclamation::before { + content: "\21"; } + +.fa-arrows-spin::before { + content: "\e4bb"; } + +.fa-print::before { + content: "\f02f"; } + +.fa-turkish-lira-sign::before { + content: "\e2bb"; } + +.fa-try::before { + content: "\e2bb"; } + +.fa-turkish-lira::before { + content: "\e2bb"; } + +.fa-dollar-sign::before { + content: "\24"; } + +.fa-dollar::before { + content: "\24"; } + +.fa-usd::before { + content: "\24"; } + +.fa-x::before { + content: "\58"; } + +.fa-magnifying-glass-dollar::before { + content: "\f688"; } + +.fa-search-dollar::before { + content: "\f688"; } + +.fa-users-gear::before { + content: "\f509"; } + +.fa-users-cog::before { + content: "\f509"; } + +.fa-person-military-pointing::before { + content: "\e54a"; } + +.fa-building-columns::before { + content: "\f19c"; } + +.fa-bank::before { + content: "\f19c"; } + +.fa-institution::before { + content: "\f19c"; } + +.fa-museum::before { + content: "\f19c"; } + +.fa-university::before { + content: "\f19c"; } + +.fa-umbrella::before { + content: "\f0e9"; } + +.fa-trowel::before { + content: "\e589"; } + +.fa-d::before { + content: "\44"; } + +.fa-stapler::before { + content: "\e5af"; } + +.fa-masks-theater::before { + content: "\f630"; } + +.fa-theater-masks::before { + content: "\f630"; } + +.fa-kip-sign::before { + content: "\e1c4"; } + +.fa-hand-point-left::before { + content: "\f0a5"; } + +.fa-handshake-simple::before { + content: "\f4c6"; } + +.fa-handshake-alt::before { + content: "\f4c6"; } + +.fa-jet-fighter::before { + content: "\f0fb"; } + +.fa-fighter-jet::before { + content: "\f0fb"; } + +.fa-square-share-nodes::before { + content: "\f1e1"; } + +.fa-share-alt-square::before { + content: "\f1e1"; } + +.fa-barcode::before { + content: "\f02a"; } + +.fa-plus-minus::before { + content: "\e43c"; } + +.fa-video::before { + content: "\f03d"; } + +.fa-video-camera::before { + content: "\f03d"; } + +.fa-graduation-cap::before { + content: "\f19d"; } + +.fa-mortar-board::before { + content: "\f19d"; } + +.fa-hand-holding-medical::before { + content: "\e05c"; } + +.fa-person-circle-check::before { + content: "\e53e"; } + +.fa-turn-up::before { + content: "\f3bf"; } + +.fa-level-up-alt::before { + content: "\f3bf"; } + +.sr-only, +.fa-sr-only { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + white-space: nowrap; + border-width: 0; } + +.sr-only-focusable:not(:focus), +.fa-sr-only-focusable:not(:focus) { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + white-space: nowrap; + border-width: 0; } +:root, :host { + --fa-style-family-brands: 'Font Awesome 6 Brands'; + --fa-font-brands: normal 400 1em/1 'Font Awesome 6 Brands'; } + +@font-face { + font-family: 'Font Awesome 6 Brands'; + font-style: normal; + font-weight: 400; + font-display: block; + src: url("../webfonts/fa-brands-400.woff2") format("woff2"), url("../webfonts/fa-brands-400.ttf") format("truetype"); } + +.fab, +.fa-brands { + font-weight: 400; } + +.fa-monero:before { + content: "\f3d0"; } + +.fa-hooli:before { + content: "\f427"; } + +.fa-yelp:before { + content: "\f1e9"; } + +.fa-cc-visa:before { + content: "\f1f0"; } + +.fa-lastfm:before { + content: "\f202"; } + +.fa-shopware:before { + content: "\f5b5"; } + +.fa-creative-commons-nc:before { + content: "\f4e8"; } + +.fa-aws:before { + content: "\f375"; } + +.fa-redhat:before { + content: "\f7bc"; } + +.fa-yoast:before { + content: "\f2b1"; } + +.fa-cloudflare:before { + content: "\e07d"; } + +.fa-ups:before { + content: "\f7e0"; } + +.fa-wpexplorer:before { + content: "\f2de"; } + +.fa-dyalog:before { + content: "\f399"; } + +.fa-bity:before { + content: "\f37a"; } + +.fa-stackpath:before { + content: "\f842"; } + +.fa-buysellads:before { + content: "\f20d"; } + +.fa-first-order:before { + content: "\f2b0"; } + +.fa-modx:before { + content: "\f285"; } + +.fa-guilded:before { + content: "\e07e"; } + +.fa-vnv:before { + content: "\f40b"; } + +.fa-square-js:before { + content: "\f3b9"; } + +.fa-js-square:before { + content: "\f3b9"; } + +.fa-microsoft:before { + content: "\f3ca"; } + +.fa-qq:before { + content: "\f1d6"; } + +.fa-orcid:before { + content: "\f8d2"; } + +.fa-java:before { + content: "\f4e4"; } + +.fa-invision:before { + content: "\f7b0"; } + +.fa-creative-commons-pd-alt:before { + content: "\f4ed"; } + +.fa-centercode:before { + content: "\f380"; } + +.fa-glide-g:before { + content: "\f2a6"; } + +.fa-drupal:before { + content: "\f1a9"; } + +.fa-hire-a-helper:before { + content: "\f3b0"; } + +.fa-creative-commons-by:before { + content: "\f4e7"; } + +.fa-unity:before { + content: "\e049"; } + +.fa-whmcs:before { + content: "\f40d"; } + +.fa-rocketchat:before { + content: "\f3e8"; } + +.fa-vk:before { + content: "\f189"; } + +.fa-untappd:before { + content: "\f405"; } + +.fa-mailchimp:before { + content: "\f59e"; } + +.fa-css3-alt:before { + content: "\f38b"; } + +.fa-square-reddit:before { + content: "\f1a2"; } + +.fa-reddit-square:before { + content: "\f1a2"; } + +.fa-vimeo-v:before { + content: "\f27d"; } + +.fa-contao:before { + content: "\f26d"; } + +.fa-square-font-awesome:before { + content: "\e5ad"; } + +.fa-deskpro:before { + content: "\f38f"; } + +.fa-sistrix:before { + content: "\f3ee"; } + +.fa-square-instagram:before { + content: "\e055"; } + +.fa-instagram-square:before { + content: "\e055"; } + +.fa-battle-net:before { + content: "\f835"; } + +.fa-the-red-yeti:before { + content: "\f69d"; } + +.fa-square-hacker-news:before { + content: "\f3af"; } + +.fa-hacker-news-square:before { + content: "\f3af"; } + +.fa-edge:before { + content: "\f282"; } + +.fa-threads:before { + content: "\e618"; } + +.fa-napster:before { + content: "\f3d2"; } + +.fa-square-snapchat:before { + content: "\f2ad"; } + +.fa-snapchat-square:before { + content: "\f2ad"; } + +.fa-google-plus-g:before { + content: "\f0d5"; } + +.fa-artstation:before { + content: "\f77a"; } + +.fa-markdown:before { + content: "\f60f"; } + +.fa-sourcetree:before { + content: "\f7d3"; } + +.fa-google-plus:before { + content: "\f2b3"; } + +.fa-diaspora:before { + content: "\f791"; } + +.fa-foursquare:before { + content: "\f180"; } + +.fa-stack-overflow:before { + content: "\f16c"; } + +.fa-github-alt:before { + content: "\f113"; } + +.fa-phoenix-squadron:before { + content: "\f511"; } + +.fa-pagelines:before { + content: "\f18c"; } + +.fa-algolia:before { + content: "\f36c"; } + +.fa-red-river:before { + content: "\f3e3"; } + +.fa-creative-commons-sa:before { + content: "\f4ef"; } + +.fa-safari:before { + content: "\f267"; } + +.fa-google:before { + content: "\f1a0"; } + +.fa-square-font-awesome-stroke:before { + content: "\f35c"; } + +.fa-font-awesome-alt:before { + content: "\f35c"; } + +.fa-atlassian:before { + content: "\f77b"; } + +.fa-linkedin-in:before { + content: "\f0e1"; } + +.fa-digital-ocean:before { + content: "\f391"; } + +.fa-nimblr:before { + content: "\f5a8"; } + +.fa-chromecast:before { + content: "\f838"; } + +.fa-evernote:before { + content: "\f839"; } + +.fa-hacker-news:before { + content: "\f1d4"; } + +.fa-creative-commons-sampling:before { + content: "\f4f0"; } + +.fa-adversal:before { + content: "\f36a"; } + +.fa-creative-commons:before { + content: "\f25e"; } + +.fa-watchman-monitoring:before { + content: "\e087"; } + +.fa-fonticons:before { + content: "\f280"; } + +.fa-weixin:before { + content: "\f1d7"; } + +.fa-shirtsinbulk:before { + content: "\f214"; } + +.fa-codepen:before { + content: "\f1cb"; } + +.fa-git-alt:before { + content: "\f841"; } + +.fa-lyft:before { + content: "\f3c3"; } + +.fa-rev:before { + content: "\f5b2"; } + +.fa-windows:before { + content: "\f17a"; } + +.fa-wizards-of-the-coast:before { + content: "\f730"; } + +.fa-square-viadeo:before { + content: "\f2aa"; } + +.fa-viadeo-square:before { + content: "\f2aa"; } + +.fa-meetup:before { + content: "\f2e0"; } + +.fa-centos:before { + content: "\f789"; } + +.fa-adn:before { + content: "\f170"; } + +.fa-cloudsmith:before { + content: "\f384"; } + +.fa-pied-piper-alt:before { + content: "\f1a8"; } + +.fa-square-dribbble:before { + content: "\f397"; } + +.fa-dribbble-square:before { + content: "\f397"; } + +.fa-codiepie:before { + content: "\f284"; } + +.fa-node:before { + content: "\f419"; } + +.fa-mix:before { + content: "\f3cb"; } + +.fa-steam:before { + content: "\f1b6"; } + +.fa-cc-apple-pay:before { + content: "\f416"; } + +.fa-scribd:before { + content: "\f28a"; } + +.fa-debian:before { + content: "\e60b"; } + +.fa-openid:before { + content: "\f19b"; } + +.fa-instalod:before { + content: "\e081"; } + +.fa-expeditedssl:before { + content: "\f23e"; } + +.fa-sellcast:before { + content: "\f2da"; } + +.fa-square-twitter:before { + content: "\f081"; } + +.fa-twitter-square:before { + content: "\f081"; } + +.fa-r-project:before { + content: "\f4f7"; } + +.fa-delicious:before { + content: "\f1a5"; } + +.fa-freebsd:before { + content: "\f3a4"; } + +.fa-vuejs:before { + content: "\f41f"; } + +.fa-accusoft:before { + content: "\f369"; } + +.fa-ioxhost:before { + content: "\f208"; } + +.fa-fonticons-fi:before { + content: "\f3a2"; } + +.fa-app-store:before { + content: "\f36f"; } + +.fa-cc-mastercard:before { + content: "\f1f1"; } + +.fa-itunes-note:before { + content: "\f3b5"; } + +.fa-golang:before { + content: "\e40f"; } + +.fa-kickstarter:before { + content: "\f3bb"; } + +.fa-grav:before { + content: "\f2d6"; } + +.fa-weibo:before { + content: "\f18a"; } + +.fa-uncharted:before { + content: "\e084"; } + +.fa-firstdraft:before { + content: "\f3a1"; } + +.fa-square-youtube:before { + content: "\f431"; } + +.fa-youtube-square:before { + content: "\f431"; } + +.fa-wikipedia-w:before { + content: "\f266"; } + +.fa-wpressr:before { + content: "\f3e4"; } + +.fa-rendact:before { + content: "\f3e4"; } + +.fa-angellist:before { + content: "\f209"; } + +.fa-galactic-republic:before { + content: "\f50c"; } + +.fa-nfc-directional:before { + content: "\e530"; } + +.fa-skype:before { + content: "\f17e"; } + +.fa-joget:before { + content: "\f3b7"; } + +.fa-fedora:before { + content: "\f798"; } + +.fa-stripe-s:before { + content: "\f42a"; } + +.fa-meta:before { + content: "\e49b"; } + +.fa-laravel:before { + content: "\f3bd"; } + +.fa-hotjar:before { + content: "\f3b1"; } + +.fa-bluetooth-b:before { + content: "\f294"; } + +.fa-sticker-mule:before { + content: "\f3f7"; } + +.fa-creative-commons-zero:before { + content: "\f4f3"; } + +.fa-hips:before { + content: "\f452"; } + +.fa-behance:before { + content: "\f1b4"; } + +.fa-reddit:before { + content: "\f1a1"; } + +.fa-discord:before { + content: "\f392"; } + +.fa-chrome:before { + content: "\f268"; } + +.fa-app-store-ios:before { + content: "\f370"; } + +.fa-cc-discover:before { + content: "\f1f2"; } + +.fa-wpbeginner:before { + content: "\f297"; } + +.fa-confluence:before { + content: "\f78d"; } + +.fa-mdb:before { + content: "\f8ca"; } + +.fa-dochub:before { + content: "\f394"; } + +.fa-accessible-icon:before { + content: "\f368"; } + +.fa-ebay:before { + content: "\f4f4"; } + +.fa-amazon:before { + content: "\f270"; } + +.fa-unsplash:before { + content: "\e07c"; } + +.fa-yarn:before { + content: "\f7e3"; } + +.fa-square-steam:before { + content: "\f1b7"; } + +.fa-steam-square:before { + content: "\f1b7"; } + +.fa-500px:before { + content: "\f26e"; } + +.fa-square-vimeo:before { + content: "\f194"; } + +.fa-vimeo-square:before { + content: "\f194"; } + +.fa-asymmetrik:before { + content: "\f372"; } + +.fa-font-awesome:before { + content: "\f2b4"; } + +.fa-font-awesome-flag:before { + content: "\f2b4"; } + +.fa-font-awesome-logo-full:before { + content: "\f2b4"; } + +.fa-gratipay:before { + content: "\f184"; } + +.fa-apple:before { + content: "\f179"; } + +.fa-hive:before { + content: "\e07f"; } + +.fa-gitkraken:before { + content: "\f3a6"; } + +.fa-keybase:before { + content: "\f4f5"; } + +.fa-apple-pay:before { + content: "\f415"; } + +.fa-padlet:before { + content: "\e4a0"; } + +.fa-amazon-pay:before { + content: "\f42c"; } + +.fa-square-github:before { + content: "\f092"; } + +.fa-github-square:before { + content: "\f092"; } + +.fa-stumbleupon:before { + content: "\f1a4"; } + +.fa-fedex:before { + content: "\f797"; } + +.fa-phoenix-framework:before { + content: "\f3dc"; } + +.fa-shopify:before { + content: "\e057"; } + +.fa-neos:before { + content: "\f612"; } + +.fa-square-threads:before { + content: "\e619"; } + +.fa-hackerrank:before { + content: "\f5f7"; } + +.fa-researchgate:before { + content: "\f4f8"; } + +.fa-swift:before { + content: "\f8e1"; } + +.fa-angular:before { + content: "\f420"; } + +.fa-speakap:before { + content: "\f3f3"; } + +.fa-angrycreative:before { + content: "\f36e"; } + +.fa-y-combinator:before { + content: "\f23b"; } + +.fa-empire:before { + content: "\f1d1"; } + +.fa-envira:before { + content: "\f299"; } + +.fa-square-gitlab:before { + content: "\e5ae"; } + +.fa-gitlab-square:before { + content: "\e5ae"; } + +.fa-studiovinari:before { + content: "\f3f8"; } + +.fa-pied-piper:before { + content: "\f2ae"; } + +.fa-wordpress:before { + content: "\f19a"; } + +.fa-product-hunt:before { + content: "\f288"; } + +.fa-firefox:before { + content: "\f269"; } + +.fa-linode:before { + content: "\f2b8"; } + +.fa-goodreads:before { + content: "\f3a8"; } + +.fa-square-odnoklassniki:before { + content: "\f264"; } + +.fa-odnoklassniki-square:before { + content: "\f264"; } + +.fa-jsfiddle:before { + content: "\f1cc"; } + +.fa-sith:before { + content: "\f512"; } + +.fa-themeisle:before { + content: "\f2b2"; } + +.fa-page4:before { + content: "\f3d7"; } + +.fa-hashnode:before { + content: "\e499"; } + +.fa-react:before { + content: "\f41b"; } + +.fa-cc-paypal:before { + content: "\f1f4"; } + +.fa-squarespace:before { + content: "\f5be"; } + +.fa-cc-stripe:before { + content: "\f1f5"; } + +.fa-creative-commons-share:before { + content: "\f4f2"; } + +.fa-bitcoin:before { + content: "\f379"; } + +.fa-keycdn:before { + content: "\f3ba"; } + +.fa-opera:before { + content: "\f26a"; } + +.fa-itch-io:before { + content: "\f83a"; } + +.fa-umbraco:before { + content: "\f8e8"; } + +.fa-galactic-senate:before { + content: "\f50d"; } + +.fa-ubuntu:before { + content: "\f7df"; } + +.fa-draft2digital:before { + content: "\f396"; } + +.fa-stripe:before { + content: "\f429"; } + +.fa-houzz:before { + content: "\f27c"; } + +.fa-gg:before { + content: "\f260"; } + +.fa-dhl:before { + content: "\f790"; } + +.fa-square-pinterest:before { + content: "\f0d3"; } + +.fa-pinterest-square:before { + content: "\f0d3"; } + +.fa-xing:before { + content: "\f168"; } + +.fa-blackberry:before { + content: "\f37b"; } + +.fa-creative-commons-pd:before { + content: "\f4ec"; } + +.fa-playstation:before { + content: "\f3df"; } + +.fa-quinscape:before { + content: "\f459"; } + +.fa-less:before { + content: "\f41d"; } + +.fa-blogger-b:before { + content: "\f37d"; } + +.fa-opencart:before { + content: "\f23d"; } + +.fa-vine:before { + content: "\f1ca"; } + +.fa-paypal:before { + content: "\f1ed"; } + +.fa-gitlab:before { + content: "\f296"; } + +.fa-typo3:before { + content: "\f42b"; } + +.fa-reddit-alien:before { + content: "\f281"; } + +.fa-yahoo:before { + content: "\f19e"; } + +.fa-dailymotion:before { + content: "\e052"; } + +.fa-affiliatetheme:before { + content: "\f36b"; } + +.fa-pied-piper-pp:before { + content: "\f1a7"; } + +.fa-bootstrap:before { + content: "\f836"; } + +.fa-odnoklassniki:before { + content: "\f263"; } + +.fa-nfc-symbol:before { + content: "\e531"; } + +.fa-ethereum:before { + content: "\f42e"; } + +.fa-speaker-deck:before { + content: "\f83c"; } + +.fa-creative-commons-nc-eu:before { + content: "\f4e9"; } + +.fa-patreon:before { + content: "\f3d9"; } + +.fa-avianex:before { + content: "\f374"; } + +.fa-ello:before { + content: "\f5f1"; } + +.fa-gofore:before { + content: "\f3a7"; } + +.fa-bimobject:before { + content: "\f378"; } + +.fa-facebook-f:before { + content: "\f39e"; } + +.fa-square-google-plus:before { + content: "\f0d4"; } + +.fa-google-plus-square:before { + content: "\f0d4"; } + +.fa-mandalorian:before { + content: "\f50f"; } + +.fa-first-order-alt:before { + content: "\f50a"; } + +.fa-osi:before { + content: "\f41a"; } + +.fa-google-wallet:before { + content: "\f1ee"; } + +.fa-d-and-d-beyond:before { + content: "\f6ca"; } + +.fa-periscope:before { + content: "\f3da"; } + +.fa-fulcrum:before { + content: "\f50b"; } + +.fa-cloudscale:before { + content: "\f383"; } + +.fa-forumbee:before { + content: "\f211"; } + +.fa-mizuni:before { + content: "\f3cc"; } + +.fa-schlix:before { + content: "\f3ea"; } + +.fa-square-xing:before { + content: "\f169"; } + +.fa-xing-square:before { + content: "\f169"; } + +.fa-bandcamp:before { + content: "\f2d5"; } + +.fa-wpforms:before { + content: "\f298"; } + +.fa-cloudversify:before { + content: "\f385"; } + +.fa-usps:before { + content: "\f7e1"; } + +.fa-megaport:before { + content: "\f5a3"; } + +.fa-magento:before { + content: "\f3c4"; } + +.fa-spotify:before { + content: "\f1bc"; } + +.fa-optin-monster:before { + content: "\f23c"; } + +.fa-fly:before { + content: "\f417"; } + +.fa-aviato:before { + content: "\f421"; } + +.fa-itunes:before { + content: "\f3b4"; } + +.fa-cuttlefish:before { + content: "\f38c"; } + +.fa-blogger:before { + content: "\f37c"; } + +.fa-flickr:before { + content: "\f16e"; } + +.fa-viber:before { + content: "\f409"; } + +.fa-soundcloud:before { + content: "\f1be"; } + +.fa-digg:before { + content: "\f1a6"; } + +.fa-tencent-weibo:before { + content: "\f1d5"; } + +.fa-symfony:before { + content: "\f83d"; } + +.fa-maxcdn:before { + content: "\f136"; } + +.fa-etsy:before { + content: "\f2d7"; } + +.fa-facebook-messenger:before { + content: "\f39f"; } + +.fa-audible:before { + content: "\f373"; } + +.fa-think-peaks:before { + content: "\f731"; } + +.fa-bilibili:before { + content: "\e3d9"; } + +.fa-erlang:before { + content: "\f39d"; } + +.fa-x-twitter:before { + content: "\e61b"; } + +.fa-cotton-bureau:before { + content: "\f89e"; } + +.fa-dashcube:before { + content: "\f210"; } + +.fa-42-group:before { + content: "\e080"; } + +.fa-innosoft:before { + content: "\e080"; } + +.fa-stack-exchange:before { + content: "\f18d"; } + +.fa-elementor:before { + content: "\f430"; } + +.fa-square-pied-piper:before { + content: "\e01e"; } + +.fa-pied-piper-square:before { + content: "\e01e"; } + +.fa-creative-commons-nd:before { + content: "\f4eb"; } + +.fa-palfed:before { + content: "\f3d8"; } + +.fa-superpowers:before { + content: "\f2dd"; } + +.fa-resolving:before { + content: "\f3e7"; } + +.fa-xbox:before { + content: "\f412"; } + +.fa-searchengin:before { + content: "\f3eb"; } + +.fa-tiktok:before { + content: "\e07b"; } + +.fa-square-facebook:before { + content: "\f082"; } + +.fa-facebook-square:before { + content: "\f082"; } + +.fa-renren:before { + content: "\f18b"; } + +.fa-linux:before { + content: "\f17c"; } + +.fa-glide:before { + content: "\f2a5"; } + +.fa-linkedin:before { + content: "\f08c"; } + +.fa-hubspot:before { + content: "\f3b2"; } + +.fa-deploydog:before { + content: "\f38e"; } + +.fa-twitch:before { + content: "\f1e8"; } + +.fa-ravelry:before { + content: "\f2d9"; } + +.fa-mixer:before { + content: "\e056"; } + +.fa-square-lastfm:before { + content: "\f203"; } + +.fa-lastfm-square:before { + content: "\f203"; } + +.fa-vimeo:before { + content: "\f40a"; } + +.fa-mendeley:before { + content: "\f7b3"; } + +.fa-uniregistry:before { + content: "\f404"; } + +.fa-figma:before { + content: "\f799"; } + +.fa-creative-commons-remix:before { + content: "\f4ee"; } + +.fa-cc-amazon-pay:before { + content: "\f42d"; } + +.fa-dropbox:before { + content: "\f16b"; } + +.fa-instagram:before { + content: "\f16d"; } + +.fa-cmplid:before { + content: "\e360"; } + +.fa-facebook:before { + content: "\f09a"; } + +.fa-gripfire:before { + content: "\f3ac"; } + +.fa-jedi-order:before { + content: "\f50e"; } + +.fa-uikit:before { + content: "\f403"; } + +.fa-fort-awesome-alt:before { + content: "\f3a3"; } + +.fa-phabricator:before { + content: "\f3db"; } + +.fa-ussunnah:before { + content: "\f407"; } + +.fa-earlybirds:before { + content: "\f39a"; } + +.fa-trade-federation:before { + content: "\f513"; } + +.fa-autoprefixer:before { + content: "\f41c"; } + +.fa-whatsapp:before { + content: "\f232"; } + +.fa-slideshare:before { + content: "\f1e7"; } + +.fa-google-play:before { + content: "\f3ab"; } + +.fa-viadeo:before { + content: "\f2a9"; } + +.fa-line:before { + content: "\f3c0"; } + +.fa-google-drive:before { + content: "\f3aa"; } + +.fa-servicestack:before { + content: "\f3ec"; } + +.fa-simplybuilt:before { + content: "\f215"; } + +.fa-bitbucket:before { + content: "\f171"; } + +.fa-imdb:before { + content: "\f2d8"; } + +.fa-deezer:before { + content: "\e077"; } + +.fa-raspberry-pi:before { + content: "\f7bb"; } + +.fa-jira:before { + content: "\f7b1"; } + +.fa-docker:before { + content: "\f395"; } + +.fa-screenpal:before { + content: "\e570"; } + +.fa-bluetooth:before { + content: "\f293"; } + +.fa-gitter:before { + content: "\f426"; } + +.fa-d-and-d:before { + content: "\f38d"; } + +.fa-microblog:before { + content: "\e01a"; } + +.fa-cc-diners-club:before { + content: "\f24c"; } + +.fa-gg-circle:before { + content: "\f261"; } + +.fa-pied-piper-hat:before { + content: "\f4e5"; } + +.fa-kickstarter-k:before { + content: "\f3bc"; } + +.fa-yandex:before { + content: "\f413"; } + +.fa-readme:before { + content: "\f4d5"; } + +.fa-html5:before { + content: "\f13b"; } + +.fa-sellsy:before { + content: "\f213"; } + +.fa-sass:before { + content: "\f41e"; } + +.fa-wirsindhandwerk:before { + content: "\e2d0"; } + +.fa-wsh:before { + content: "\e2d0"; } + +.fa-buromobelexperte:before { + content: "\f37f"; } + +.fa-salesforce:before { + content: "\f83b"; } + +.fa-octopus-deploy:before { + content: "\e082"; } + +.fa-medapps:before { + content: "\f3c6"; } + +.fa-ns8:before { + content: "\f3d5"; } + +.fa-pinterest-p:before { + content: "\f231"; } + +.fa-apper:before { + content: "\f371"; } + +.fa-fort-awesome:before { + content: "\f286"; } + +.fa-waze:before { + content: "\f83f"; } + +.fa-cc-jcb:before { + content: "\f24b"; } + +.fa-snapchat:before { + content: "\f2ab"; } + +.fa-snapchat-ghost:before { + content: "\f2ab"; } + +.fa-fantasy-flight-games:before { + content: "\f6dc"; } + +.fa-rust:before { + content: "\e07a"; } + +.fa-wix:before { + content: "\f5cf"; } + +.fa-square-behance:before { + content: "\f1b5"; } + +.fa-behance-square:before { + content: "\f1b5"; } + +.fa-supple:before { + content: "\f3f9"; } + +.fa-rebel:before { + content: "\f1d0"; } + +.fa-css3:before { + content: "\f13c"; } + +.fa-staylinked:before { + content: "\f3f5"; } + +.fa-kaggle:before { + content: "\f5fa"; } + +.fa-space-awesome:before { + content: "\e5ac"; } + +.fa-deviantart:before { + content: "\f1bd"; } + +.fa-cpanel:before { + content: "\f388"; } + +.fa-goodreads-g:before { + content: "\f3a9"; } + +.fa-square-git:before { + content: "\f1d2"; } + +.fa-git-square:before { + content: "\f1d2"; } + +.fa-square-tumblr:before { + content: "\f174"; } + +.fa-tumblr-square:before { + content: "\f174"; } + +.fa-trello:before { + content: "\f181"; } + +.fa-creative-commons-nc-jp:before { + content: "\f4ea"; } + +.fa-get-pocket:before { + content: "\f265"; } + +.fa-perbyte:before { + content: "\e083"; } + +.fa-grunt:before { + content: "\f3ad"; } + +.fa-weebly:before { + content: "\f5cc"; } + +.fa-connectdevelop:before { + content: "\f20e"; } + +.fa-leanpub:before { + content: "\f212"; } + +.fa-black-tie:before { + content: "\f27e"; } + +.fa-themeco:before { + content: "\f5c6"; } + +.fa-python:before { + content: "\f3e2"; } + +.fa-android:before { + content: "\f17b"; } + +.fa-bots:before { + content: "\e340"; } + +.fa-free-code-camp:before { + content: "\f2c5"; } + +.fa-hornbill:before { + content: "\f592"; } + +.fa-js:before { + content: "\f3b8"; } + +.fa-ideal:before { + content: "\e013"; } + +.fa-git:before { + content: "\f1d3"; } + +.fa-dev:before { + content: "\f6cc"; } + +.fa-sketch:before { + content: "\f7c6"; } + +.fa-yandex-international:before { + content: "\f414"; } + +.fa-cc-amex:before { + content: "\f1f3"; } + +.fa-uber:before { + content: "\f402"; } + +.fa-github:before { + content: "\f09b"; } + +.fa-php:before { + content: "\f457"; } + +.fa-alipay:before { + content: "\f642"; } + +.fa-youtube:before { + content: "\f167"; } + +.fa-skyatlas:before { + content: "\f216"; } + +.fa-firefox-browser:before { + content: "\e007"; } + +.fa-replyd:before { + content: "\f3e6"; } + +.fa-suse:before { + content: "\f7d6"; } + +.fa-jenkins:before { + content: "\f3b6"; } + +.fa-twitter:before { + content: "\f099"; } + +.fa-rockrms:before { + content: "\f3e9"; } + +.fa-pinterest:before { + content: "\f0d2"; } + +.fa-buffer:before { + content: "\f837"; } + +.fa-npm:before { + content: "\f3d4"; } + +.fa-yammer:before { + content: "\f840"; } + +.fa-btc:before { + content: "\f15a"; } + +.fa-dribbble:before { + content: "\f17d"; } + +.fa-stumbleupon-circle:before { + content: "\f1a3"; } + +.fa-internet-explorer:before { + content: "\f26b"; } + +.fa-stubber:before { + content: "\e5c7"; } + +.fa-telegram:before { + content: "\f2c6"; } + +.fa-telegram-plane:before { + content: "\f2c6"; } + +.fa-old-republic:before { + content: "\f510"; } + +.fa-odysee:before { + content: "\e5c6"; } + +.fa-square-whatsapp:before { + content: "\f40c"; } + +.fa-whatsapp-square:before { + content: "\f40c"; } + +.fa-node-js:before { + content: "\f3d3"; } + +.fa-edge-legacy:before { + content: "\e078"; } + +.fa-slack:before { + content: "\f198"; } + +.fa-slack-hash:before { + content: "\f198"; } + +.fa-medrt:before { + content: "\f3c8"; } + +.fa-usb:before { + content: "\f287"; } + +.fa-tumblr:before { + content: "\f173"; } + +.fa-vaadin:before { + content: "\f408"; } + +.fa-quora:before { + content: "\f2c4"; } + +.fa-square-x-twitter:before { + content: "\e61a"; } + +.fa-reacteurope:before { + content: "\f75d"; } + +.fa-medium:before { + content: "\f23a"; } + +.fa-medium-m:before { + content: "\f23a"; } + +.fa-amilia:before { + content: "\f36d"; } + +.fa-mixcloud:before { + content: "\f289"; } + +.fa-flipboard:before { + content: "\f44d"; } + +.fa-viacoin:before { + content: "\f237"; } + +.fa-critical-role:before { + content: "\f6c9"; } + +.fa-sitrox:before { + content: "\e44a"; } + +.fa-discourse:before { + content: "\f393"; } + +.fa-joomla:before { + content: "\f1aa"; } + +.fa-mastodon:before { + content: "\f4f6"; } + +.fa-airbnb:before { + content: "\f834"; } + +.fa-wolf-pack-battalion:before { + content: "\f514"; } + +.fa-buy-n-large:before { + content: "\f8a6"; } + +.fa-gulp:before { + content: "\f3ae"; } + +.fa-creative-commons-sampling-plus:before { + content: "\f4f1"; } + +.fa-strava:before { + content: "\f428"; } + +.fa-ember:before { + content: "\f423"; } + +.fa-canadian-maple-leaf:before { + content: "\f785"; } + +.fa-teamspeak:before { + content: "\f4f9"; } + +.fa-pushed:before { + content: "\f3e1"; } + +.fa-wordpress-simple:before { + content: "\f411"; } + +.fa-nutritionix:before { + content: "\f3d6"; } + +.fa-wodu:before { + content: "\e088"; } + +.fa-google-pay:before { + content: "\e079"; } + +.fa-intercom:before { + content: "\f7af"; } + +.fa-zhihu:before { + content: "\f63f"; } + +.fa-korvue:before { + content: "\f42f"; } + +.fa-pix:before { + content: "\e43a"; } + +.fa-steam-symbol:before { + content: "\f3f6"; } +:root, :host { + --fa-style-family-classic: 'Font Awesome 6 Free'; + --fa-font-regular: normal 400 1em/1 'Font Awesome 6 Free'; } + +@font-face { + font-family: 'Font Awesome 6 Free'; + font-style: normal; + font-weight: 400; + font-display: block; + src: url("../webfonts/fa-regular-400.woff2") format("woff2"), url("../webfonts/fa-regular-400.ttf") format("truetype"); } + +.far, +.fa-regular { + font-weight: 400; } +:root, :host { + --fa-style-family-classic: 'Font Awesome 6 Free'; + --fa-font-solid: normal 900 1em/1 'Font Awesome 6 Free'; } + +@font-face { + font-family: 'Font Awesome 6 Free'; + font-style: normal; + font-weight: 900; + font-display: block; + src: url("../webfonts/fa-solid-900.woff2") format("woff2"), url("../webfonts/fa-solid-900.ttf") format("truetype"); } + +.fas, +.fa-solid { + font-weight: 900; } +@font-face { + font-family: 'Font Awesome 5 Brands'; + font-display: block; + font-weight: 400; + src: url("../webfonts/fa-brands-400.woff2") format("woff2"), url("../webfonts/fa-brands-400.ttf") format("truetype"); } + +@font-face { + font-family: 'Font Awesome 5 Free'; + font-display: block; + font-weight: 900; + src: url("../webfonts/fa-solid-900.woff2") format("woff2"), url("../webfonts/fa-solid-900.ttf") format("truetype"); } + +@font-face { + font-family: 'Font Awesome 5 Free'; + font-display: block; + font-weight: 400; + src: url("../webfonts/fa-regular-400.woff2") format("woff2"), url("../webfonts/fa-regular-400.ttf") format("truetype"); } +@font-face { + font-family: 'FontAwesome'; + font-display: block; + src: url("../webfonts/fa-solid-900.woff2") format("woff2"), url("../webfonts/fa-solid-900.ttf") format("truetype"); } + +@font-face { + font-family: 'FontAwesome'; + font-display: block; + src: url("../webfonts/fa-brands-400.woff2") format("woff2"), url("../webfonts/fa-brands-400.ttf") format("truetype"); } + +@font-face { + font-family: 'FontAwesome'; + font-display: block; + src: url("../webfonts/fa-regular-400.woff2") format("woff2"), url("../webfonts/fa-regular-400.ttf") format("truetype"); } + +@font-face { + font-family: 'FontAwesome'; + font-display: block; + src: url("../webfonts/fa-v4compatibility.woff2") format("woff2"), url("../webfonts/fa-v4compatibility.ttf") format("truetype"); } diff --git a/deps/font-awesome-6.4.2/css/all.min.css b/deps/font-awesome-6.4.2/css/all.min.css new file mode 100644 index 00000000..6604a067 --- /dev/null +++ b/deps/font-awesome-6.4.2/css/all.min.css @@ -0,0 +1,9 @@ +/*! + * Font Awesome Free 6.4.2 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + * Copyright 2023 Fonticons, Inc. + */ +.fa{font-family:var(--fa-style-family,"Font Awesome 6 Free");font-weight:var(--fa-style,900)}.fa,.fa-brands,.fa-classic,.fa-regular,.fa-sharp,.fa-solid,.fab,.far,.fas{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:var(--fa-display,inline-block);font-style:normal;font-variant:normal;line-height:1;text-rendering:auto}.fa-classic,.fa-regular,.fa-solid,.far,.fas{font-family:"Font Awesome 6 Free"}.fa-brands,.fab{font-family:"Font Awesome 6 Brands"}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-2xs{font-size:.625em;line-height:.1em;vertical-align:.225em}.fa-xs{font-size:.75em;line-height:.08333em;vertical-align:.125em}.fa-sm{font-size:.875em;line-height:.07143em;vertical-align:.05357em}.fa-lg{font-size:1.25em;line-height:.05em;vertical-align:-.075em}.fa-xl{font-size:1.5em;line-height:.04167em;vertical-align:-.125em}.fa-2xl{font-size:2em;line-height:.03125em;vertical-align:-.1875em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:var(--fa-li-margin,2.5em);padding-left:0}.fa-ul>li{position:relative}.fa-li{left:calc(var(--fa-li-width, 2em)*-1);position:absolute;text-align:center;width:var(--fa-li-width,2em);line-height:inherit}.fa-border{border-radius:var(--fa-border-radius,.1em);border:var(--fa-border-width,.08em) var(--fa-border-style,solid) var(--fa-border-color,#eee);padding:var(--fa-border-padding,.2em .25em .15em)}.fa-pull-left{float:left;margin-right:var(--fa-pull-margin,.3em)}.fa-pull-right{float:right;margin-left:var(--fa-pull-margin,.3em)}.fa-beat{-webkit-animation-name:fa-beat;animation-name:fa-beat;-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,ease-in-out);animation-timing-function:var(--fa-animation-timing,ease-in-out)}.fa-bounce{-webkit-animation-name:fa-bounce;animation-name:fa-bounce;-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,cubic-bezier(.28,.84,.42,1));animation-timing-function:var(--fa-animation-timing,cubic-bezier(.28,.84,.42,1))}.fa-fade{-webkit-animation-name:fa-fade;animation-name:fa-fade;-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1));animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1))}.fa-beat-fade,.fa-fade{-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s)}.fa-beat-fade{-webkit-animation-name:fa-beat-fade;animation-name:fa-beat-fade;-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1));animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1))}.fa-flip{-webkit-animation-name:fa-flip;animation-name:fa-flip;-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,ease-in-out);animation-timing-function:var(--fa-animation-timing,ease-in-out)}.fa-shake{-webkit-animation-name:fa-shake;animation-name:fa-shake;-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,linear);animation-timing-function:var(--fa-animation-timing,linear)}.fa-shake,.fa-spin{-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal)}.fa-spin{-webkit-animation-name:fa-spin;animation-name:fa-spin;-webkit-animation-duration:var(--fa-animation-duration,2s);animation-duration:var(--fa-animation-duration,2s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,linear);animation-timing-function:var(--fa-animation-timing,linear)}.fa-spin-reverse{--fa-animation-direction:reverse}.fa-pulse,.fa-spin-pulse{-webkit-animation-name:fa-spin;animation-name:fa-spin;-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,steps(8));animation-timing-function:var(--fa-animation-timing,steps(8))}@media (prefers-reduced-motion:reduce){.fa-beat,.fa-beat-fade,.fa-bounce,.fa-fade,.fa-flip,.fa-pulse,.fa-shake,.fa-spin,.fa-spin-pulse{-webkit-animation-delay:-1ms;animation-delay:-1ms;-webkit-animation-duration:1ms;animation-duration:1ms;-webkit-animation-iteration-count:1;animation-iteration-count:1;-webkit-transition-delay:0s;transition-delay:0s;-webkit-transition-duration:0s;transition-duration:0s}}@-webkit-keyframes fa-beat{0%,90%{-webkit-transform:scale(1);transform:scale(1)}45%{-webkit-transform:scale(var(--fa-beat-scale,1.25));transform:scale(var(--fa-beat-scale,1.25))}}@keyframes fa-beat{0%,90%{-webkit-transform:scale(1);transform:scale(1)}45%{-webkit-transform:scale(var(--fa-beat-scale,1.25));transform:scale(var(--fa-beat-scale,1.25))}}@-webkit-keyframes fa-bounce{0%{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}10%{-webkit-transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0);transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0)}30%{-webkit-transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em));transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em))}50%{-webkit-transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0);transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0)}57%{-webkit-transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em));transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em))}64%{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}to{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}}@keyframes fa-bounce{0%{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}10%{-webkit-transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0);transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0)}30%{-webkit-transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em));transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em))}50%{-webkit-transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0);transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0)}57%{-webkit-transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em));transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em))}64%{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}to{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}}@-webkit-keyframes fa-fade{50%{opacity:var(--fa-fade-opacity,.4)}}@keyframes fa-fade{50%{opacity:var(--fa-fade-opacity,.4)}}@-webkit-keyframes fa-beat-fade{0%,to{opacity:var(--fa-beat-fade-opacity,.4);-webkit-transform:scale(1);transform:scale(1)}50%{opacity:1;-webkit-transform:scale(var(--fa-beat-fade-scale,1.125));transform:scale(var(--fa-beat-fade-scale,1.125))}}@keyframes fa-beat-fade{0%,to{opacity:var(--fa-beat-fade-opacity,.4);-webkit-transform:scale(1);transform:scale(1)}50%{opacity:1;-webkit-transform:scale(var(--fa-beat-fade-scale,1.125));transform:scale(var(--fa-beat-fade-scale,1.125))}}@-webkit-keyframes fa-flip{50%{-webkit-transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg));transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg))}}@keyframes fa-flip{50%{-webkit-transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg));transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg))}}@-webkit-keyframes fa-shake{0%{-webkit-transform:rotate(-15deg);transform:rotate(-15deg)}4%{-webkit-transform:rotate(15deg);transform:rotate(15deg)}8%,24%{-webkit-transform:rotate(-18deg);transform:rotate(-18deg)}12%,28%{-webkit-transform:rotate(18deg);transform:rotate(18deg)}16%{-webkit-transform:rotate(-22deg);transform:rotate(-22deg)}20%{-webkit-transform:rotate(22deg);transform:rotate(22deg)}32%{-webkit-transform:rotate(-12deg);transform:rotate(-12deg)}36%{-webkit-transform:rotate(12deg);transform:rotate(12deg)}40%,to{-webkit-transform:rotate(0deg);transform:rotate(0deg)}}@keyframes fa-shake{0%{-webkit-transform:rotate(-15deg);transform:rotate(-15deg)}4%{-webkit-transform:rotate(15deg);transform:rotate(15deg)}8%,24%{-webkit-transform:rotate(-18deg);transform:rotate(-18deg)}12%,28%{-webkit-transform:rotate(18deg);transform:rotate(18deg)}16%{-webkit-transform:rotate(-22deg);transform:rotate(-22deg)}20%{-webkit-transform:rotate(22deg);transform:rotate(22deg)}32%{-webkit-transform:rotate(-12deg);transform:rotate(-12deg)}36%{-webkit-transform:rotate(12deg);transform:rotate(12deg)}40%,to{-webkit-transform:rotate(0deg);transform:rotate(0deg)}}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.fa-rotate-90{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-webkit-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-webkit-transform:scaleX(-1);transform:scaleX(-1)}.fa-flip-vertical{-webkit-transform:scaleY(-1);transform:scaleY(-1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{-webkit-transform:scale(-1);transform:scale(-1)}.fa-rotate-by{-webkit-transform:rotate(var(--fa-rotate-angle,none));transform:rotate(var(--fa-rotate-angle,none))}.fa-stack{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2.5em}.fa-stack-1x,.fa-stack-2x{left:0;position:absolute;text-align:center;width:100%;z-index:var(--fa-stack-z-index,auto)}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:var(--fa-inverse,#fff)} + +.fa-0:before{content:"\30"}.fa-1:before{content:"\31"}.fa-2:before{content:"\32"}.fa-3:before{content:"\33"}.fa-4:before{content:"\34"}.fa-5:before{content:"\35"}.fa-6:before{content:"\36"}.fa-7:before{content:"\37"}.fa-8:before{content:"\38"}.fa-9:before{content:"\39"}.fa-fill-drip:before{content:"\f576"}.fa-arrows-to-circle:before{content:"\e4bd"}.fa-chevron-circle-right:before,.fa-circle-chevron-right:before{content:"\f138"}.fa-at:before{content:"\40"}.fa-trash-alt:before,.fa-trash-can:before{content:"\f2ed"}.fa-text-height:before{content:"\f034"}.fa-user-times:before,.fa-user-xmark:before{content:"\f235"}.fa-stethoscope:before{content:"\f0f1"}.fa-comment-alt:before,.fa-message:before{content:"\f27a"}.fa-info:before{content:"\f129"}.fa-compress-alt:before,.fa-down-left-and-up-right-to-center:before{content:"\f422"}.fa-explosion:before{content:"\e4e9"}.fa-file-alt:before,.fa-file-lines:before,.fa-file-text:before{content:"\f15c"}.fa-wave-square:before{content:"\f83e"}.fa-ring:before{content:"\f70b"}.fa-building-un:before{content:"\e4d9"}.fa-dice-three:before{content:"\f527"}.fa-calendar-alt:before,.fa-calendar-days:before{content:"\f073"}.fa-anchor-circle-check:before{content:"\e4aa"}.fa-building-circle-arrow-right:before{content:"\e4d1"}.fa-volleyball-ball:before,.fa-volleyball:before{content:"\f45f"}.fa-arrows-up-to-line:before{content:"\e4c2"}.fa-sort-desc:before,.fa-sort-down:before{content:"\f0dd"}.fa-circle-minus:before,.fa-minus-circle:before{content:"\f056"}.fa-door-open:before{content:"\f52b"}.fa-right-from-bracket:before,.fa-sign-out-alt:before{content:"\f2f5"}.fa-atom:before{content:"\f5d2"}.fa-soap:before{content:"\e06e"}.fa-heart-music-camera-bolt:before,.fa-icons:before{content:"\f86d"}.fa-microphone-alt-slash:before,.fa-microphone-lines-slash:before{content:"\f539"}.fa-bridge-circle-check:before{content:"\e4c9"}.fa-pump-medical:before{content:"\e06a"}.fa-fingerprint:before{content:"\f577"}.fa-hand-point-right:before{content:"\f0a4"}.fa-magnifying-glass-location:before,.fa-search-location:before{content:"\f689"}.fa-forward-step:before,.fa-step-forward:before{content:"\f051"}.fa-face-smile-beam:before,.fa-smile-beam:before{content:"\f5b8"}.fa-flag-checkered:before{content:"\f11e"}.fa-football-ball:before,.fa-football:before{content:"\f44e"}.fa-school-circle-exclamation:before{content:"\e56c"}.fa-crop:before{content:"\f125"}.fa-angle-double-down:before,.fa-angles-down:before{content:"\f103"}.fa-users-rectangle:before{content:"\e594"}.fa-people-roof:before{content:"\e537"}.fa-people-line:before{content:"\e534"}.fa-beer-mug-empty:before,.fa-beer:before{content:"\f0fc"}.fa-diagram-predecessor:before{content:"\e477"}.fa-arrow-up-long:before,.fa-long-arrow-up:before{content:"\f176"}.fa-burn:before,.fa-fire-flame-simple:before{content:"\f46a"}.fa-male:before,.fa-person:before{content:"\f183"}.fa-laptop:before{content:"\f109"}.fa-file-csv:before{content:"\f6dd"}.fa-menorah:before{content:"\f676"}.fa-truck-plane:before{content:"\e58f"}.fa-record-vinyl:before{content:"\f8d9"}.fa-face-grin-stars:before,.fa-grin-stars:before{content:"\f587"}.fa-bong:before{content:"\f55c"}.fa-pastafarianism:before,.fa-spaghetti-monster-flying:before{content:"\f67b"}.fa-arrow-down-up-across-line:before{content:"\e4af"}.fa-spoon:before,.fa-utensil-spoon:before{content:"\f2e5"}.fa-jar-wheat:before{content:"\e517"}.fa-envelopes-bulk:before,.fa-mail-bulk:before{content:"\f674"}.fa-file-circle-exclamation:before{content:"\e4eb"}.fa-circle-h:before,.fa-hospital-symbol:before{content:"\f47e"}.fa-pager:before{content:"\f815"}.fa-address-book:before,.fa-contact-book:before{content:"\f2b9"}.fa-strikethrough:before{content:"\f0cc"}.fa-k:before{content:"\4b"}.fa-landmark-flag:before{content:"\e51c"}.fa-pencil-alt:before,.fa-pencil:before{content:"\f303"}.fa-backward:before{content:"\f04a"}.fa-caret-right:before{content:"\f0da"}.fa-comments:before{content:"\f086"}.fa-file-clipboard:before,.fa-paste:before{content:"\f0ea"}.fa-code-pull-request:before{content:"\e13c"}.fa-clipboard-list:before{content:"\f46d"}.fa-truck-loading:before,.fa-truck-ramp-box:before{content:"\f4de"}.fa-user-check:before{content:"\f4fc"}.fa-vial-virus:before{content:"\e597"}.fa-sheet-plastic:before{content:"\e571"}.fa-blog:before{content:"\f781"}.fa-user-ninja:before{content:"\f504"}.fa-person-arrow-up-from-line:before{content:"\e539"}.fa-scroll-torah:before,.fa-torah:before{content:"\f6a0"}.fa-broom-ball:before,.fa-quidditch-broom-ball:before,.fa-quidditch:before{content:"\f458"}.fa-toggle-off:before{content:"\f204"}.fa-archive:before,.fa-box-archive:before{content:"\f187"}.fa-person-drowning:before{content:"\e545"}.fa-arrow-down-9-1:before,.fa-sort-numeric-desc:before,.fa-sort-numeric-down-alt:before{content:"\f886"}.fa-face-grin-tongue-squint:before,.fa-grin-tongue-squint:before{content:"\f58a"}.fa-spray-can:before{content:"\f5bd"}.fa-truck-monster:before{content:"\f63b"}.fa-w:before{content:"\57"}.fa-earth-africa:before,.fa-globe-africa:before{content:"\f57c"}.fa-rainbow:before{content:"\f75b"}.fa-circle-notch:before{content:"\f1ce"}.fa-tablet-alt:before,.fa-tablet-screen-button:before{content:"\f3fa"}.fa-paw:before{content:"\f1b0"}.fa-cloud:before{content:"\f0c2"}.fa-trowel-bricks:before{content:"\e58a"}.fa-face-flushed:before,.fa-flushed:before{content:"\f579"}.fa-hospital-user:before{content:"\f80d"}.fa-tent-arrow-left-right:before{content:"\e57f"}.fa-gavel:before,.fa-legal:before{content:"\f0e3"}.fa-binoculars:before{content:"\f1e5"}.fa-microphone-slash:before{content:"\f131"}.fa-box-tissue:before{content:"\e05b"}.fa-motorcycle:before{content:"\f21c"}.fa-bell-concierge:before,.fa-concierge-bell:before{content:"\f562"}.fa-pen-ruler:before,.fa-pencil-ruler:before{content:"\f5ae"}.fa-people-arrows-left-right:before,.fa-people-arrows:before{content:"\e068"}.fa-mars-and-venus-burst:before{content:"\e523"}.fa-caret-square-right:before,.fa-square-caret-right:before{content:"\f152"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-sun-plant-wilt:before{content:"\e57a"}.fa-toilets-portable:before{content:"\e584"}.fa-hockey-puck:before{content:"\f453"}.fa-table:before{content:"\f0ce"}.fa-magnifying-glass-arrow-right:before{content:"\e521"}.fa-digital-tachograph:before,.fa-tachograph-digital:before{content:"\f566"}.fa-users-slash:before{content:"\e073"}.fa-clover:before{content:"\e139"}.fa-mail-reply:before,.fa-reply:before{content:"\f3e5"}.fa-star-and-crescent:before{content:"\f699"}.fa-house-fire:before{content:"\e50c"}.fa-minus-square:before,.fa-square-minus:before{content:"\f146"}.fa-helicopter:before{content:"\f533"}.fa-compass:before{content:"\f14e"}.fa-caret-square-down:before,.fa-square-caret-down:before{content:"\f150"}.fa-file-circle-question:before{content:"\e4ef"}.fa-laptop-code:before{content:"\f5fc"}.fa-swatchbook:before{content:"\f5c3"}.fa-prescription-bottle:before{content:"\f485"}.fa-bars:before,.fa-navicon:before{content:"\f0c9"}.fa-people-group:before{content:"\e533"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-heart-broken:before,.fa-heart-crack:before{content:"\f7a9"}.fa-external-link-square-alt:before,.fa-square-up-right:before{content:"\f360"}.fa-face-kiss-beam:before,.fa-kiss-beam:before{content:"\f597"}.fa-film:before{content:"\f008"}.fa-ruler-horizontal:before{content:"\f547"}.fa-people-robbery:before{content:"\e536"}.fa-lightbulb:before{content:"\f0eb"}.fa-caret-left:before{content:"\f0d9"}.fa-circle-exclamation:before,.fa-exclamation-circle:before{content:"\f06a"}.fa-school-circle-xmark:before{content:"\e56d"}.fa-arrow-right-from-bracket:before,.fa-sign-out:before{content:"\f08b"}.fa-chevron-circle-down:before,.fa-circle-chevron-down:before{content:"\f13a"}.fa-unlock-alt:before,.fa-unlock-keyhole:before{content:"\f13e"}.fa-cloud-showers-heavy:before{content:"\f740"}.fa-headphones-alt:before,.fa-headphones-simple:before{content:"\f58f"}.fa-sitemap:before{content:"\f0e8"}.fa-circle-dollar-to-slot:before,.fa-donate:before{content:"\f4b9"}.fa-memory:before{content:"\f538"}.fa-road-spikes:before{content:"\e568"}.fa-fire-burner:before{content:"\e4f1"}.fa-flag:before{content:"\f024"}.fa-hanukiah:before{content:"\f6e6"}.fa-feather:before{content:"\f52d"}.fa-volume-down:before,.fa-volume-low:before{content:"\f027"}.fa-comment-slash:before{content:"\f4b3"}.fa-cloud-sun-rain:before{content:"\f743"}.fa-compress:before{content:"\f066"}.fa-wheat-alt:before,.fa-wheat-awn:before{content:"\e2cd"}.fa-ankh:before{content:"\f644"}.fa-hands-holding-child:before{content:"\e4fa"}.fa-asterisk:before{content:"\2a"}.fa-check-square:before,.fa-square-check:before{content:"\f14a"}.fa-peseta-sign:before{content:"\e221"}.fa-header:before,.fa-heading:before{content:"\f1dc"}.fa-ghost:before{content:"\f6e2"}.fa-list-squares:before,.fa-list:before{content:"\f03a"}.fa-phone-square-alt:before,.fa-square-phone-flip:before{content:"\f87b"}.fa-cart-plus:before{content:"\f217"}.fa-gamepad:before{content:"\f11b"}.fa-circle-dot:before,.fa-dot-circle:before{content:"\f192"}.fa-dizzy:before,.fa-face-dizzy:before{content:"\f567"}.fa-egg:before{content:"\f7fb"}.fa-house-medical-circle-xmark:before{content:"\e513"}.fa-campground:before{content:"\f6bb"}.fa-folder-plus:before{content:"\f65e"}.fa-futbol-ball:before,.fa-futbol:before,.fa-soccer-ball:before{content:"\f1e3"}.fa-paint-brush:before,.fa-paintbrush:before{content:"\f1fc"}.fa-lock:before{content:"\f023"}.fa-gas-pump:before{content:"\f52f"}.fa-hot-tub-person:before,.fa-hot-tub:before{content:"\f593"}.fa-map-location:before,.fa-map-marked:before{content:"\f59f"}.fa-house-flood-water:before{content:"\e50e"}.fa-tree:before{content:"\f1bb"}.fa-bridge-lock:before{content:"\e4cc"}.fa-sack-dollar:before{content:"\f81d"}.fa-edit:before,.fa-pen-to-square:before{content:"\f044"}.fa-car-side:before{content:"\f5e4"}.fa-share-alt:before,.fa-share-nodes:before{content:"\f1e0"}.fa-heart-circle-minus:before{content:"\e4ff"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-microscope:before{content:"\f610"}.fa-sink:before{content:"\e06d"}.fa-bag-shopping:before,.fa-shopping-bag:before{content:"\f290"}.fa-arrow-down-z-a:before,.fa-sort-alpha-desc:before,.fa-sort-alpha-down-alt:before{content:"\f881"}.fa-mitten:before{content:"\f7b5"}.fa-person-rays:before{content:"\e54d"}.fa-users:before{content:"\f0c0"}.fa-eye-slash:before{content:"\f070"}.fa-flask-vial:before{content:"\e4f3"}.fa-hand-paper:before,.fa-hand:before{content:"\f256"}.fa-om:before{content:"\f679"}.fa-worm:before{content:"\e599"}.fa-house-circle-xmark:before{content:"\e50b"}.fa-plug:before{content:"\f1e6"}.fa-chevron-up:before{content:"\f077"}.fa-hand-spock:before{content:"\f259"}.fa-stopwatch:before{content:"\f2f2"}.fa-face-kiss:before,.fa-kiss:before{content:"\f596"}.fa-bridge-circle-xmark:before{content:"\e4cb"}.fa-face-grin-tongue:before,.fa-grin-tongue:before{content:"\f589"}.fa-chess-bishop:before{content:"\f43a"}.fa-face-grin-wink:before,.fa-grin-wink:before{content:"\f58c"}.fa-deaf:before,.fa-deafness:before,.fa-ear-deaf:before,.fa-hard-of-hearing:before{content:"\f2a4"}.fa-road-circle-check:before{content:"\e564"}.fa-dice-five:before{content:"\f523"}.fa-rss-square:before,.fa-square-rss:before{content:"\f143"}.fa-land-mine-on:before{content:"\e51b"}.fa-i-cursor:before{content:"\f246"}.fa-stamp:before{content:"\f5bf"}.fa-stairs:before{content:"\e289"}.fa-i:before{content:"\49"}.fa-hryvnia-sign:before,.fa-hryvnia:before{content:"\f6f2"}.fa-pills:before{content:"\f484"}.fa-face-grin-wide:before,.fa-grin-alt:before{content:"\f581"}.fa-tooth:before{content:"\f5c9"}.fa-v:before{content:"\56"}.fa-bangladeshi-taka-sign:before{content:"\e2e6"}.fa-bicycle:before{content:"\f206"}.fa-rod-asclepius:before,.fa-rod-snake:before,.fa-staff-aesculapius:before,.fa-staff-snake:before{content:"\e579"}.fa-head-side-cough-slash:before{content:"\e062"}.fa-ambulance:before,.fa-truck-medical:before{content:"\f0f9"}.fa-wheat-awn-circle-exclamation:before{content:"\e598"}.fa-snowman:before{content:"\f7d0"}.fa-mortar-pestle:before{content:"\f5a7"}.fa-road-barrier:before{content:"\e562"}.fa-school:before{content:"\f549"}.fa-igloo:before{content:"\f7ae"}.fa-joint:before{content:"\f595"}.fa-angle-right:before{content:"\f105"}.fa-horse:before{content:"\f6f0"}.fa-q:before{content:"\51"}.fa-g:before{content:"\47"}.fa-notes-medical:before{content:"\f481"}.fa-temperature-2:before,.fa-temperature-half:before,.fa-thermometer-2:before,.fa-thermometer-half:before{content:"\f2c9"}.fa-dong-sign:before{content:"\e169"}.fa-capsules:before{content:"\f46b"}.fa-poo-bolt:before,.fa-poo-storm:before{content:"\f75a"}.fa-face-frown-open:before,.fa-frown-open:before{content:"\f57a"}.fa-hand-point-up:before{content:"\f0a6"}.fa-money-bill:before{content:"\f0d6"}.fa-bookmark:before{content:"\f02e"}.fa-align-justify:before{content:"\f039"}.fa-umbrella-beach:before{content:"\f5ca"}.fa-helmet-un:before{content:"\e503"}.fa-bullseye:before{content:"\f140"}.fa-bacon:before{content:"\f7e5"}.fa-hand-point-down:before{content:"\f0a7"}.fa-arrow-up-from-bracket:before{content:"\e09a"}.fa-folder-blank:before,.fa-folder:before{content:"\f07b"}.fa-file-medical-alt:before,.fa-file-waveform:before{content:"\f478"}.fa-radiation:before{content:"\f7b9"}.fa-chart-simple:before{content:"\e473"}.fa-mars-stroke:before{content:"\f229"}.fa-vial:before{content:"\f492"}.fa-dashboard:before,.fa-gauge-med:before,.fa-gauge:before,.fa-tachometer-alt-average:before{content:"\f624"}.fa-magic-wand-sparkles:before,.fa-wand-magic-sparkles:before{content:"\e2ca"}.fa-e:before{content:"\45"}.fa-pen-alt:before,.fa-pen-clip:before{content:"\f305"}.fa-bridge-circle-exclamation:before{content:"\e4ca"}.fa-user:before{content:"\f007"}.fa-school-circle-check:before{content:"\e56b"}.fa-dumpster:before{content:"\f793"}.fa-shuttle-van:before,.fa-van-shuttle:before{content:"\f5b6"}.fa-building-user:before{content:"\e4da"}.fa-caret-square-left:before,.fa-square-caret-left:before{content:"\f191"}.fa-highlighter:before{content:"\f591"}.fa-key:before{content:"\f084"}.fa-bullhorn:before{content:"\f0a1"}.fa-globe:before{content:"\f0ac"}.fa-synagogue:before{content:"\f69b"}.fa-person-half-dress:before{content:"\e548"}.fa-road-bridge:before{content:"\e563"}.fa-location-arrow:before{content:"\f124"}.fa-c:before{content:"\43"}.fa-tablet-button:before{content:"\f10a"}.fa-building-lock:before{content:"\e4d6"}.fa-pizza-slice:before{content:"\f818"}.fa-money-bill-wave:before{content:"\f53a"}.fa-area-chart:before,.fa-chart-area:before{content:"\f1fe"}.fa-house-flag:before{content:"\e50d"}.fa-person-circle-minus:before{content:"\e540"}.fa-ban:before,.fa-cancel:before{content:"\f05e"}.fa-camera-rotate:before{content:"\e0d8"}.fa-air-freshener:before,.fa-spray-can-sparkles:before{content:"\f5d0"}.fa-star:before{content:"\f005"}.fa-repeat:before{content:"\f363"}.fa-cross:before{content:"\f654"}.fa-box:before{content:"\f466"}.fa-venus-mars:before{content:"\f228"}.fa-arrow-pointer:before,.fa-mouse-pointer:before{content:"\f245"}.fa-expand-arrows-alt:before,.fa-maximize:before{content:"\f31e"}.fa-charging-station:before{content:"\f5e7"}.fa-shapes:before,.fa-triangle-circle-square:before{content:"\f61f"}.fa-random:before,.fa-shuffle:before{content:"\f074"}.fa-person-running:before,.fa-running:before{content:"\f70c"}.fa-mobile-retro:before{content:"\e527"}.fa-grip-lines-vertical:before{content:"\f7a5"}.fa-spider:before{content:"\f717"}.fa-hands-bound:before{content:"\e4f9"}.fa-file-invoice-dollar:before{content:"\f571"}.fa-plane-circle-exclamation:before{content:"\e556"}.fa-x-ray:before{content:"\f497"}.fa-spell-check:before{content:"\f891"}.fa-slash:before{content:"\f715"}.fa-computer-mouse:before,.fa-mouse:before{content:"\f8cc"}.fa-arrow-right-to-bracket:before,.fa-sign-in:before{content:"\f090"}.fa-shop-slash:before,.fa-store-alt-slash:before{content:"\e070"}.fa-server:before{content:"\f233"}.fa-virus-covid-slash:before{content:"\e4a9"}.fa-shop-lock:before{content:"\e4a5"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-blender-phone:before{content:"\f6b6"}.fa-building-wheat:before{content:"\e4db"}.fa-person-breastfeeding:before{content:"\e53a"}.fa-right-to-bracket:before,.fa-sign-in-alt:before{content:"\f2f6"}.fa-venus:before{content:"\f221"}.fa-passport:before{content:"\f5ab"}.fa-heart-pulse:before,.fa-heartbeat:before{content:"\f21e"}.fa-people-carry-box:before,.fa-people-carry:before{content:"\f4ce"}.fa-temperature-high:before{content:"\f769"}.fa-microchip:before{content:"\f2db"}.fa-crown:before{content:"\f521"}.fa-weight-hanging:before{content:"\f5cd"}.fa-xmarks-lines:before{content:"\e59a"}.fa-file-prescription:before{content:"\f572"}.fa-weight-scale:before,.fa-weight:before{content:"\f496"}.fa-user-friends:before,.fa-user-group:before{content:"\f500"}.fa-arrow-up-a-z:before,.fa-sort-alpha-up:before{content:"\f15e"}.fa-chess-knight:before{content:"\f441"}.fa-face-laugh-squint:before,.fa-laugh-squint:before{content:"\f59b"}.fa-wheelchair:before{content:"\f193"}.fa-arrow-circle-up:before,.fa-circle-arrow-up:before{content:"\f0aa"}.fa-toggle-on:before{content:"\f205"}.fa-person-walking:before,.fa-walking:before{content:"\f554"}.fa-l:before{content:"\4c"}.fa-fire:before{content:"\f06d"}.fa-bed-pulse:before,.fa-procedures:before{content:"\f487"}.fa-shuttle-space:before,.fa-space-shuttle:before{content:"\f197"}.fa-face-laugh:before,.fa-laugh:before{content:"\f599"}.fa-folder-open:before{content:"\f07c"}.fa-heart-circle-plus:before{content:"\e500"}.fa-code-fork:before{content:"\e13b"}.fa-city:before{content:"\f64f"}.fa-microphone-alt:before,.fa-microphone-lines:before{content:"\f3c9"}.fa-pepper-hot:before{content:"\f816"}.fa-unlock:before{content:"\f09c"}.fa-colon-sign:before{content:"\e140"}.fa-headset:before{content:"\f590"}.fa-store-slash:before{content:"\e071"}.fa-road-circle-xmark:before{content:"\e566"}.fa-user-minus:before{content:"\f503"}.fa-mars-stroke-up:before,.fa-mars-stroke-v:before{content:"\f22a"}.fa-champagne-glasses:before,.fa-glass-cheers:before{content:"\f79f"}.fa-clipboard:before{content:"\f328"}.fa-house-circle-exclamation:before{content:"\e50a"}.fa-file-arrow-up:before,.fa-file-upload:before{content:"\f574"}.fa-wifi-3:before,.fa-wifi-strong:before,.fa-wifi:before{content:"\f1eb"}.fa-bath:before,.fa-bathtub:before{content:"\f2cd"}.fa-underline:before{content:"\f0cd"}.fa-user-edit:before,.fa-user-pen:before{content:"\f4ff"}.fa-signature:before{content:"\f5b7"}.fa-stroopwafel:before{content:"\f551"}.fa-bold:before{content:"\f032"}.fa-anchor-lock:before{content:"\e4ad"}.fa-building-ngo:before{content:"\e4d7"}.fa-manat-sign:before{content:"\e1d5"}.fa-not-equal:before{content:"\f53e"}.fa-border-style:before,.fa-border-top-left:before{content:"\f853"}.fa-map-location-dot:before,.fa-map-marked-alt:before{content:"\f5a0"}.fa-jedi:before{content:"\f669"}.fa-poll:before,.fa-square-poll-vertical:before{content:"\f681"}.fa-mug-hot:before{content:"\f7b6"}.fa-battery-car:before,.fa-car-battery:before{content:"\f5df"}.fa-gift:before{content:"\f06b"}.fa-dice-two:before{content:"\f528"}.fa-chess-queen:before{content:"\f445"}.fa-glasses:before{content:"\f530"}.fa-chess-board:before{content:"\f43c"}.fa-building-circle-check:before{content:"\e4d2"}.fa-person-chalkboard:before{content:"\e53d"}.fa-mars-stroke-h:before,.fa-mars-stroke-right:before{content:"\f22b"}.fa-hand-back-fist:before,.fa-hand-rock:before{content:"\f255"}.fa-caret-square-up:before,.fa-square-caret-up:before{content:"\f151"}.fa-cloud-showers-water:before{content:"\e4e4"}.fa-bar-chart:before,.fa-chart-bar:before{content:"\f080"}.fa-hands-bubbles:before,.fa-hands-wash:before{content:"\e05e"}.fa-less-than-equal:before{content:"\f537"}.fa-train:before{content:"\f238"}.fa-eye-low-vision:before,.fa-low-vision:before{content:"\f2a8"}.fa-crow:before{content:"\f520"}.fa-sailboat:before{content:"\e445"}.fa-window-restore:before{content:"\f2d2"}.fa-plus-square:before,.fa-square-plus:before{content:"\f0fe"}.fa-torii-gate:before{content:"\f6a1"}.fa-frog:before{content:"\f52e"}.fa-bucket:before{content:"\e4cf"}.fa-image:before{content:"\f03e"}.fa-microphone:before{content:"\f130"}.fa-cow:before{content:"\f6c8"}.fa-caret-up:before{content:"\f0d8"}.fa-screwdriver:before{content:"\f54a"}.fa-folder-closed:before{content:"\e185"}.fa-house-tsunami:before{content:"\e515"}.fa-square-nfi:before{content:"\e576"}.fa-arrow-up-from-ground-water:before{content:"\e4b5"}.fa-glass-martini-alt:before,.fa-martini-glass:before{content:"\f57b"}.fa-rotate-back:before,.fa-rotate-backward:before,.fa-rotate-left:before,.fa-undo-alt:before{content:"\f2ea"}.fa-columns:before,.fa-table-columns:before{content:"\f0db"}.fa-lemon:before{content:"\f094"}.fa-head-side-mask:before{content:"\e063"}.fa-handshake:before{content:"\f2b5"}.fa-gem:before{content:"\f3a5"}.fa-dolly-box:before,.fa-dolly:before{content:"\f472"}.fa-smoking:before{content:"\f48d"}.fa-compress-arrows-alt:before,.fa-minimize:before{content:"\f78c"}.fa-monument:before{content:"\f5a6"}.fa-snowplow:before{content:"\f7d2"}.fa-angle-double-right:before,.fa-angles-right:before{content:"\f101"}.fa-cannabis:before{content:"\f55f"}.fa-circle-play:before,.fa-play-circle:before{content:"\f144"}.fa-tablets:before{content:"\f490"}.fa-ethernet:before{content:"\f796"}.fa-eur:before,.fa-euro-sign:before,.fa-euro:before{content:"\f153"}.fa-chair:before{content:"\f6c0"}.fa-check-circle:before,.fa-circle-check:before{content:"\f058"}.fa-circle-stop:before,.fa-stop-circle:before{content:"\f28d"}.fa-compass-drafting:before,.fa-drafting-compass:before{content:"\f568"}.fa-plate-wheat:before{content:"\e55a"}.fa-icicles:before{content:"\f7ad"}.fa-person-shelter:before{content:"\e54f"}.fa-neuter:before{content:"\f22c"}.fa-id-badge:before{content:"\f2c1"}.fa-marker:before{content:"\f5a1"}.fa-face-laugh-beam:before,.fa-laugh-beam:before{content:"\f59a"}.fa-helicopter-symbol:before{content:"\e502"}.fa-universal-access:before{content:"\f29a"}.fa-chevron-circle-up:before,.fa-circle-chevron-up:before{content:"\f139"}.fa-lari-sign:before{content:"\e1c8"}.fa-volcano:before{content:"\f770"}.fa-person-walking-dashed-line-arrow-right:before{content:"\e553"}.fa-gbp:before,.fa-pound-sign:before,.fa-sterling-sign:before{content:"\f154"}.fa-viruses:before{content:"\e076"}.fa-square-person-confined:before{content:"\e577"}.fa-user-tie:before{content:"\f508"}.fa-arrow-down-long:before,.fa-long-arrow-down:before{content:"\f175"}.fa-tent-arrow-down-to-line:before{content:"\e57e"}.fa-certificate:before{content:"\f0a3"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-suitcase:before{content:"\f0f2"}.fa-person-skating:before,.fa-skating:before{content:"\f7c5"}.fa-filter-circle-dollar:before,.fa-funnel-dollar:before{content:"\f662"}.fa-camera-retro:before{content:"\f083"}.fa-arrow-circle-down:before,.fa-circle-arrow-down:before{content:"\f0ab"}.fa-arrow-right-to-file:before,.fa-file-import:before{content:"\f56f"}.fa-external-link-square:before,.fa-square-arrow-up-right:before{content:"\f14c"}.fa-box-open:before{content:"\f49e"}.fa-scroll:before{content:"\f70e"}.fa-spa:before{content:"\f5bb"}.fa-location-pin-lock:before{content:"\e51f"}.fa-pause:before{content:"\f04c"}.fa-hill-avalanche:before{content:"\e507"}.fa-temperature-0:before,.fa-temperature-empty:before,.fa-thermometer-0:before,.fa-thermometer-empty:before{content:"\f2cb"}.fa-bomb:before{content:"\f1e2"}.fa-registered:before{content:"\f25d"}.fa-address-card:before,.fa-contact-card:before,.fa-vcard:before{content:"\f2bb"}.fa-balance-scale-right:before,.fa-scale-unbalanced-flip:before{content:"\f516"}.fa-subscript:before{content:"\f12c"}.fa-diamond-turn-right:before,.fa-directions:before{content:"\f5eb"}.fa-burst:before{content:"\e4dc"}.fa-house-laptop:before,.fa-laptop-house:before{content:"\e066"}.fa-face-tired:before,.fa-tired:before{content:"\f5c8"}.fa-money-bills:before{content:"\e1f3"}.fa-smog:before{content:"\f75f"}.fa-crutch:before{content:"\f7f7"}.fa-cloud-arrow-up:before,.fa-cloud-upload-alt:before,.fa-cloud-upload:before{content:"\f0ee"}.fa-palette:before{content:"\f53f"}.fa-arrows-turn-right:before{content:"\e4c0"}.fa-vest:before{content:"\e085"}.fa-ferry:before{content:"\e4ea"}.fa-arrows-down-to-people:before{content:"\e4b9"}.fa-seedling:before,.fa-sprout:before{content:"\f4d8"}.fa-arrows-alt-h:before,.fa-left-right:before{content:"\f337"}.fa-boxes-packing:before{content:"\e4c7"}.fa-arrow-circle-left:before,.fa-circle-arrow-left:before{content:"\f0a8"}.fa-group-arrows-rotate:before{content:"\e4f6"}.fa-bowl-food:before{content:"\e4c6"}.fa-candy-cane:before{content:"\f786"}.fa-arrow-down-wide-short:before,.fa-sort-amount-asc:before,.fa-sort-amount-down:before{content:"\f160"}.fa-cloud-bolt:before,.fa-thunderstorm:before{content:"\f76c"}.fa-remove-format:before,.fa-text-slash:before{content:"\f87d"}.fa-face-smile-wink:before,.fa-smile-wink:before{content:"\f4da"}.fa-file-word:before{content:"\f1c2"}.fa-file-powerpoint:before{content:"\f1c4"}.fa-arrows-h:before,.fa-arrows-left-right:before{content:"\f07e"}.fa-house-lock:before{content:"\e510"}.fa-cloud-arrow-down:before,.fa-cloud-download-alt:before,.fa-cloud-download:before{content:"\f0ed"}.fa-children:before{content:"\e4e1"}.fa-blackboard:before,.fa-chalkboard:before{content:"\f51b"}.fa-user-alt-slash:before,.fa-user-large-slash:before{content:"\f4fa"}.fa-envelope-open:before{content:"\f2b6"}.fa-handshake-alt-slash:before,.fa-handshake-simple-slash:before{content:"\e05f"}.fa-mattress-pillow:before{content:"\e525"}.fa-guarani-sign:before{content:"\e19a"}.fa-arrows-rotate:before,.fa-refresh:before,.fa-sync:before{content:"\f021"}.fa-fire-extinguisher:before{content:"\f134"}.fa-cruzeiro-sign:before{content:"\e152"}.fa-greater-than-equal:before{content:"\f532"}.fa-shield-alt:before,.fa-shield-halved:before{content:"\f3ed"}.fa-atlas:before,.fa-book-atlas:before{content:"\f558"}.fa-virus:before{content:"\e074"}.fa-envelope-circle-check:before{content:"\e4e8"}.fa-layer-group:before{content:"\f5fd"}.fa-arrows-to-dot:before{content:"\e4be"}.fa-archway:before{content:"\f557"}.fa-heart-circle-check:before{content:"\e4fd"}.fa-house-chimney-crack:before,.fa-house-damage:before{content:"\f6f1"}.fa-file-archive:before,.fa-file-zipper:before{content:"\f1c6"}.fa-square:before{content:"\f0c8"}.fa-glass-martini:before,.fa-martini-glass-empty:before{content:"\f000"}.fa-couch:before{content:"\f4b8"}.fa-cedi-sign:before{content:"\e0df"}.fa-italic:before{content:"\f033"}.fa-church:before{content:"\f51d"}.fa-comments-dollar:before{content:"\f653"}.fa-democrat:before{content:"\f747"}.fa-z:before{content:"\5a"}.fa-person-skiing:before,.fa-skiing:before{content:"\f7c9"}.fa-road-lock:before{content:"\e567"}.fa-a:before{content:"\41"}.fa-temperature-arrow-down:before,.fa-temperature-down:before{content:"\e03f"}.fa-feather-alt:before,.fa-feather-pointed:before{content:"\f56b"}.fa-p:before{content:"\50"}.fa-snowflake:before{content:"\f2dc"}.fa-newspaper:before{content:"\f1ea"}.fa-ad:before,.fa-rectangle-ad:before{content:"\f641"}.fa-arrow-circle-right:before,.fa-circle-arrow-right:before{content:"\f0a9"}.fa-filter-circle-xmark:before{content:"\e17b"}.fa-locust:before{content:"\e520"}.fa-sort:before,.fa-unsorted:before{content:"\f0dc"}.fa-list-1-2:before,.fa-list-numeric:before,.fa-list-ol:before{content:"\f0cb"}.fa-person-dress-burst:before{content:"\e544"}.fa-money-check-alt:before,.fa-money-check-dollar:before{content:"\f53d"}.fa-vector-square:before{content:"\f5cb"}.fa-bread-slice:before{content:"\f7ec"}.fa-language:before{content:"\f1ab"}.fa-face-kiss-wink-heart:before,.fa-kiss-wink-heart:before{content:"\f598"}.fa-filter:before{content:"\f0b0"}.fa-question:before{content:"\3f"}.fa-file-signature:before{content:"\f573"}.fa-arrows-alt:before,.fa-up-down-left-right:before{content:"\f0b2"}.fa-house-chimney-user:before{content:"\e065"}.fa-hand-holding-heart:before{content:"\f4be"}.fa-puzzle-piece:before{content:"\f12e"}.fa-money-check:before{content:"\f53c"}.fa-star-half-alt:before,.fa-star-half-stroke:before{content:"\f5c0"}.fa-code:before{content:"\f121"}.fa-glass-whiskey:before,.fa-whiskey-glass:before{content:"\f7a0"}.fa-building-circle-exclamation:before{content:"\e4d3"}.fa-magnifying-glass-chart:before{content:"\e522"}.fa-arrow-up-right-from-square:before,.fa-external-link:before{content:"\f08e"}.fa-cubes-stacked:before{content:"\e4e6"}.fa-krw:before,.fa-won-sign:before,.fa-won:before{content:"\f159"}.fa-virus-covid:before{content:"\e4a8"}.fa-austral-sign:before{content:"\e0a9"}.fa-f:before{content:"\46"}.fa-leaf:before{content:"\f06c"}.fa-road:before{content:"\f018"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-person-circle-plus:before{content:"\e541"}.fa-chart-pie:before,.fa-pie-chart:before{content:"\f200"}.fa-bolt-lightning:before{content:"\e0b7"}.fa-sack-xmark:before{content:"\e56a"}.fa-file-excel:before{content:"\f1c3"}.fa-file-contract:before{content:"\f56c"}.fa-fish-fins:before{content:"\e4f2"}.fa-building-flag:before{content:"\e4d5"}.fa-face-grin-beam:before,.fa-grin-beam:before{content:"\f582"}.fa-object-ungroup:before{content:"\f248"}.fa-poop:before{content:"\f619"}.fa-location-pin:before,.fa-map-marker:before{content:"\f041"}.fa-kaaba:before{content:"\f66b"}.fa-toilet-paper:before{content:"\f71e"}.fa-hard-hat:before,.fa-hat-hard:before,.fa-helmet-safety:before{content:"\f807"}.fa-eject:before{content:"\f052"}.fa-arrow-alt-circle-right:before,.fa-circle-right:before{content:"\f35a"}.fa-plane-circle-check:before{content:"\e555"}.fa-face-rolling-eyes:before,.fa-meh-rolling-eyes:before{content:"\f5a5"}.fa-object-group:before{content:"\f247"}.fa-chart-line:before,.fa-line-chart:before{content:"\f201"}.fa-mask-ventilator:before{content:"\e524"}.fa-arrow-right:before{content:"\f061"}.fa-map-signs:before,.fa-signs-post:before{content:"\f277"}.fa-cash-register:before{content:"\f788"}.fa-person-circle-question:before{content:"\e542"}.fa-h:before{content:"\48"}.fa-tarp:before{content:"\e57b"}.fa-screwdriver-wrench:before,.fa-tools:before{content:"\f7d9"}.fa-arrows-to-eye:before{content:"\e4bf"}.fa-plug-circle-bolt:before{content:"\e55b"}.fa-heart:before{content:"\f004"}.fa-mars-and-venus:before{content:"\f224"}.fa-home-user:before,.fa-house-user:before{content:"\e1b0"}.fa-dumpster-fire:before{content:"\f794"}.fa-house-crack:before{content:"\e3b1"}.fa-cocktail:before,.fa-martini-glass-citrus:before{content:"\f561"}.fa-face-surprise:before,.fa-surprise:before{content:"\f5c2"}.fa-bottle-water:before{content:"\e4c5"}.fa-circle-pause:before,.fa-pause-circle:before{content:"\f28b"}.fa-toilet-paper-slash:before{content:"\e072"}.fa-apple-alt:before,.fa-apple-whole:before{content:"\f5d1"}.fa-kitchen-set:before{content:"\e51a"}.fa-r:before{content:"\52"}.fa-temperature-1:before,.fa-temperature-quarter:before,.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:"\f2ca"}.fa-cube:before{content:"\f1b2"}.fa-bitcoin-sign:before{content:"\e0b4"}.fa-shield-dog:before{content:"\e573"}.fa-solar-panel:before{content:"\f5ba"}.fa-lock-open:before{content:"\f3c1"}.fa-elevator:before{content:"\e16d"}.fa-money-bill-transfer:before{content:"\e528"}.fa-money-bill-trend-up:before{content:"\e529"}.fa-house-flood-water-circle-arrow-right:before{content:"\e50f"}.fa-poll-h:before,.fa-square-poll-horizontal:before{content:"\f682"}.fa-circle:before{content:"\f111"}.fa-backward-fast:before,.fa-fast-backward:before{content:"\f049"}.fa-recycle:before{content:"\f1b8"}.fa-user-astronaut:before{content:"\f4fb"}.fa-plane-slash:before{content:"\e069"}.fa-trademark:before{content:"\f25c"}.fa-basketball-ball:before,.fa-basketball:before{content:"\f434"}.fa-satellite-dish:before{content:"\f7c0"}.fa-arrow-alt-circle-up:before,.fa-circle-up:before{content:"\f35b"}.fa-mobile-alt:before,.fa-mobile-screen-button:before{content:"\f3cd"}.fa-volume-high:before,.fa-volume-up:before{content:"\f028"}.fa-users-rays:before{content:"\e593"}.fa-wallet:before{content:"\f555"}.fa-clipboard-check:before{content:"\f46c"}.fa-file-audio:before{content:"\f1c7"}.fa-burger:before,.fa-hamburger:before{content:"\f805"}.fa-wrench:before{content:"\f0ad"}.fa-bugs:before{content:"\e4d0"}.fa-rupee-sign:before,.fa-rupee:before{content:"\f156"}.fa-file-image:before{content:"\f1c5"}.fa-circle-question:before,.fa-question-circle:before{content:"\f059"}.fa-plane-departure:before{content:"\f5b0"}.fa-handshake-slash:before{content:"\e060"}.fa-book-bookmark:before{content:"\e0bb"}.fa-code-branch:before{content:"\f126"}.fa-hat-cowboy:before{content:"\f8c0"}.fa-bridge:before{content:"\e4c8"}.fa-phone-alt:before,.fa-phone-flip:before{content:"\f879"}.fa-truck-front:before{content:"\e2b7"}.fa-cat:before{content:"\f6be"}.fa-anchor-circle-exclamation:before{content:"\e4ab"}.fa-truck-field:before{content:"\e58d"}.fa-route:before{content:"\f4d7"}.fa-clipboard-question:before{content:"\e4e3"}.fa-panorama:before{content:"\e209"}.fa-comment-medical:before{content:"\f7f5"}.fa-teeth-open:before{content:"\f62f"}.fa-file-circle-minus:before{content:"\e4ed"}.fa-tags:before{content:"\f02c"}.fa-wine-glass:before{content:"\f4e3"}.fa-fast-forward:before,.fa-forward-fast:before{content:"\f050"}.fa-face-meh-blank:before,.fa-meh-blank:before{content:"\f5a4"}.fa-parking:before,.fa-square-parking:before{content:"\f540"}.fa-house-signal:before{content:"\e012"}.fa-bars-progress:before,.fa-tasks-alt:before{content:"\f828"}.fa-faucet-drip:before{content:"\e006"}.fa-cart-flatbed:before,.fa-dolly-flatbed:before{content:"\f474"}.fa-ban-smoking:before,.fa-smoking-ban:before{content:"\f54d"}.fa-terminal:before{content:"\f120"}.fa-mobile-button:before{content:"\f10b"}.fa-house-medical-flag:before{content:"\e514"}.fa-basket-shopping:before,.fa-shopping-basket:before{content:"\f291"}.fa-tape:before{content:"\f4db"}.fa-bus-alt:before,.fa-bus-simple:before{content:"\f55e"}.fa-eye:before{content:"\f06e"}.fa-face-sad-cry:before,.fa-sad-cry:before{content:"\f5b3"}.fa-audio-description:before{content:"\f29e"}.fa-person-military-to-person:before{content:"\e54c"}.fa-file-shield:before{content:"\e4f0"}.fa-user-slash:before{content:"\f506"}.fa-pen:before{content:"\f304"}.fa-tower-observation:before{content:"\e586"}.fa-file-code:before{content:"\f1c9"}.fa-signal-5:before,.fa-signal-perfect:before,.fa-signal:before{content:"\f012"}.fa-bus:before{content:"\f207"}.fa-heart-circle-xmark:before{content:"\e501"}.fa-home-lg:before,.fa-house-chimney:before{content:"\e3af"}.fa-window-maximize:before{content:"\f2d0"}.fa-face-frown:before,.fa-frown:before{content:"\f119"}.fa-prescription:before{content:"\f5b1"}.fa-shop:before,.fa-store-alt:before{content:"\f54f"}.fa-floppy-disk:before,.fa-save:before{content:"\f0c7"}.fa-vihara:before{content:"\f6a7"}.fa-balance-scale-left:before,.fa-scale-unbalanced:before{content:"\f515"}.fa-sort-asc:before,.fa-sort-up:before{content:"\f0de"}.fa-comment-dots:before,.fa-commenting:before{content:"\f4ad"}.fa-plant-wilt:before{content:"\e5aa"}.fa-diamond:before{content:"\f219"}.fa-face-grin-squint:before,.fa-grin-squint:before{content:"\f585"}.fa-hand-holding-dollar:before,.fa-hand-holding-usd:before{content:"\f4c0"}.fa-bacterium:before{content:"\e05a"}.fa-hand-pointer:before{content:"\f25a"}.fa-drum-steelpan:before{content:"\f56a"}.fa-hand-scissors:before{content:"\f257"}.fa-hands-praying:before,.fa-praying-hands:before{content:"\f684"}.fa-arrow-right-rotate:before,.fa-arrow-rotate-forward:before,.fa-arrow-rotate-right:before,.fa-redo:before{content:"\f01e"}.fa-biohazard:before{content:"\f780"}.fa-location-crosshairs:before,.fa-location:before{content:"\f601"}.fa-mars-double:before{content:"\f227"}.fa-child-dress:before{content:"\e59c"}.fa-users-between-lines:before{content:"\e591"}.fa-lungs-virus:before{content:"\e067"}.fa-face-grin-tears:before,.fa-grin-tears:before{content:"\f588"}.fa-phone:before{content:"\f095"}.fa-calendar-times:before,.fa-calendar-xmark:before{content:"\f273"}.fa-child-reaching:before{content:"\e59d"}.fa-head-side-virus:before{content:"\e064"}.fa-user-cog:before,.fa-user-gear:before{content:"\f4fe"}.fa-arrow-up-1-9:before,.fa-sort-numeric-up:before{content:"\f163"}.fa-door-closed:before{content:"\f52a"}.fa-shield-virus:before{content:"\e06c"}.fa-dice-six:before{content:"\f526"}.fa-mosquito-net:before{content:"\e52c"}.fa-bridge-water:before{content:"\e4ce"}.fa-person-booth:before{content:"\f756"}.fa-text-width:before{content:"\f035"}.fa-hat-wizard:before{content:"\f6e8"}.fa-pen-fancy:before{content:"\f5ac"}.fa-digging:before,.fa-person-digging:before{content:"\f85e"}.fa-trash:before{content:"\f1f8"}.fa-gauge-simple-med:before,.fa-gauge-simple:before,.fa-tachometer-average:before{content:"\f629"}.fa-book-medical:before{content:"\f7e6"}.fa-poo:before{content:"\f2fe"}.fa-quote-right-alt:before,.fa-quote-right:before{content:"\f10e"}.fa-shirt:before,.fa-t-shirt:before,.fa-tshirt:before{content:"\f553"}.fa-cubes:before{content:"\f1b3"}.fa-divide:before{content:"\f529"}.fa-tenge-sign:before,.fa-tenge:before{content:"\f7d7"}.fa-headphones:before{content:"\f025"}.fa-hands-holding:before{content:"\f4c2"}.fa-hands-clapping:before{content:"\e1a8"}.fa-republican:before{content:"\f75e"}.fa-arrow-left:before{content:"\f060"}.fa-person-circle-xmark:before{content:"\e543"}.fa-ruler:before{content:"\f545"}.fa-align-left:before{content:"\f036"}.fa-dice-d6:before{content:"\f6d1"}.fa-restroom:before{content:"\f7bd"}.fa-j:before{content:"\4a"}.fa-users-viewfinder:before{content:"\e595"}.fa-file-video:before{content:"\f1c8"}.fa-external-link-alt:before,.fa-up-right-from-square:before{content:"\f35d"}.fa-table-cells:before,.fa-th:before{content:"\f00a"}.fa-file-pdf:before{content:"\f1c1"}.fa-bible:before,.fa-book-bible:before{content:"\f647"}.fa-o:before{content:"\4f"}.fa-medkit:before,.fa-suitcase-medical:before{content:"\f0fa"}.fa-user-secret:before{content:"\f21b"}.fa-otter:before{content:"\f700"}.fa-female:before,.fa-person-dress:before{content:"\f182"}.fa-comment-dollar:before{content:"\f651"}.fa-briefcase-clock:before,.fa-business-time:before{content:"\f64a"}.fa-table-cells-large:before,.fa-th-large:before{content:"\f009"}.fa-book-tanakh:before,.fa-tanakh:before{content:"\f827"}.fa-phone-volume:before,.fa-volume-control-phone:before{content:"\f2a0"}.fa-hat-cowboy-side:before{content:"\f8c1"}.fa-clipboard-user:before{content:"\f7f3"}.fa-child:before{content:"\f1ae"}.fa-lira-sign:before{content:"\f195"}.fa-satellite:before{content:"\f7bf"}.fa-plane-lock:before{content:"\e558"}.fa-tag:before{content:"\f02b"}.fa-comment:before{content:"\f075"}.fa-birthday-cake:before,.fa-cake-candles:before,.fa-cake:before{content:"\f1fd"}.fa-envelope:before{content:"\f0e0"}.fa-angle-double-up:before,.fa-angles-up:before{content:"\f102"}.fa-paperclip:before{content:"\f0c6"}.fa-arrow-right-to-city:before{content:"\e4b3"}.fa-ribbon:before{content:"\f4d6"}.fa-lungs:before{content:"\f604"}.fa-arrow-up-9-1:before,.fa-sort-numeric-up-alt:before{content:"\f887"}.fa-litecoin-sign:before{content:"\e1d3"}.fa-border-none:before{content:"\f850"}.fa-circle-nodes:before{content:"\e4e2"}.fa-parachute-box:before{content:"\f4cd"}.fa-indent:before{content:"\f03c"}.fa-truck-field-un:before{content:"\e58e"}.fa-hourglass-empty:before,.fa-hourglass:before{content:"\f254"}.fa-mountain:before{content:"\f6fc"}.fa-user-doctor:before,.fa-user-md:before{content:"\f0f0"}.fa-circle-info:before,.fa-info-circle:before{content:"\f05a"}.fa-cloud-meatball:before{content:"\f73b"}.fa-camera-alt:before,.fa-camera:before{content:"\f030"}.fa-square-virus:before{content:"\e578"}.fa-meteor:before{content:"\f753"}.fa-car-on:before{content:"\e4dd"}.fa-sleigh:before{content:"\f7cc"}.fa-arrow-down-1-9:before,.fa-sort-numeric-asc:before,.fa-sort-numeric-down:before{content:"\f162"}.fa-hand-holding-droplet:before,.fa-hand-holding-water:before{content:"\f4c1"}.fa-water:before{content:"\f773"}.fa-calendar-check:before{content:"\f274"}.fa-braille:before{content:"\f2a1"}.fa-prescription-bottle-alt:before,.fa-prescription-bottle-medical:before{content:"\f486"}.fa-landmark:before{content:"\f66f"}.fa-truck:before{content:"\f0d1"}.fa-crosshairs:before{content:"\f05b"}.fa-person-cane:before{content:"\e53c"}.fa-tent:before{content:"\e57d"}.fa-vest-patches:before{content:"\e086"}.fa-check-double:before{content:"\f560"}.fa-arrow-down-a-z:before,.fa-sort-alpha-asc:before,.fa-sort-alpha-down:before{content:"\f15d"}.fa-money-bill-wheat:before{content:"\e52a"}.fa-cookie:before{content:"\f563"}.fa-arrow-left-rotate:before,.fa-arrow-rotate-back:before,.fa-arrow-rotate-backward:before,.fa-arrow-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-hard-drive:before,.fa-hdd:before{content:"\f0a0"}.fa-face-grin-squint-tears:before,.fa-grin-squint-tears:before{content:"\f586"}.fa-dumbbell:before{content:"\f44b"}.fa-list-alt:before,.fa-rectangle-list:before{content:"\f022"}.fa-tarp-droplet:before{content:"\e57c"}.fa-house-medical-circle-check:before{content:"\e511"}.fa-person-skiing-nordic:before,.fa-skiing-nordic:before{content:"\f7ca"}.fa-calendar-plus:before{content:"\f271"}.fa-plane-arrival:before{content:"\f5af"}.fa-arrow-alt-circle-left:before,.fa-circle-left:before{content:"\f359"}.fa-subway:before,.fa-train-subway:before{content:"\f239"}.fa-chart-gantt:before{content:"\e0e4"}.fa-indian-rupee-sign:before,.fa-indian-rupee:before,.fa-inr:before{content:"\e1bc"}.fa-crop-alt:before,.fa-crop-simple:before{content:"\f565"}.fa-money-bill-1:before,.fa-money-bill-alt:before{content:"\f3d1"}.fa-left-long:before,.fa-long-arrow-alt-left:before{content:"\f30a"}.fa-dna:before{content:"\f471"}.fa-virus-slash:before{content:"\e075"}.fa-minus:before,.fa-subtract:before{content:"\f068"}.fa-chess:before{content:"\f439"}.fa-arrow-left-long:before,.fa-long-arrow-left:before{content:"\f177"}.fa-plug-circle-check:before{content:"\e55c"}.fa-street-view:before{content:"\f21d"}.fa-franc-sign:before{content:"\e18f"}.fa-volume-off:before{content:"\f026"}.fa-american-sign-language-interpreting:before,.fa-asl-interpreting:before,.fa-hands-american-sign-language-interpreting:before,.fa-hands-asl-interpreting:before{content:"\f2a3"}.fa-cog:before,.fa-gear:before{content:"\f013"}.fa-droplet-slash:before,.fa-tint-slash:before{content:"\f5c7"}.fa-mosque:before{content:"\f678"}.fa-mosquito:before{content:"\e52b"}.fa-star-of-david:before{content:"\f69a"}.fa-person-military-rifle:before{content:"\e54b"}.fa-cart-shopping:before,.fa-shopping-cart:before{content:"\f07a"}.fa-vials:before{content:"\f493"}.fa-plug-circle-plus:before{content:"\e55f"}.fa-place-of-worship:before{content:"\f67f"}.fa-grip-vertical:before{content:"\f58e"}.fa-arrow-turn-up:before,.fa-level-up:before{content:"\f148"}.fa-u:before{content:"\55"}.fa-square-root-alt:before,.fa-square-root-variable:before{content:"\f698"}.fa-clock-four:before,.fa-clock:before{content:"\f017"}.fa-backward-step:before,.fa-step-backward:before{content:"\f048"}.fa-pallet:before{content:"\f482"}.fa-faucet:before{content:"\e005"}.fa-baseball-bat-ball:before{content:"\f432"}.fa-s:before{content:"\53"}.fa-timeline:before{content:"\e29c"}.fa-keyboard:before{content:"\f11c"}.fa-caret-down:before{content:"\f0d7"}.fa-clinic-medical:before,.fa-house-chimney-medical:before{content:"\f7f2"}.fa-temperature-3:before,.fa-temperature-three-quarters:before,.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-mobile-android-alt:before,.fa-mobile-screen:before{content:"\f3cf"}.fa-plane-up:before{content:"\e22d"}.fa-piggy-bank:before{content:"\f4d3"}.fa-battery-3:before,.fa-battery-half:before{content:"\f242"}.fa-mountain-city:before{content:"\e52e"}.fa-coins:before{content:"\f51e"}.fa-khanda:before{content:"\f66d"}.fa-sliders-h:before,.fa-sliders:before{content:"\f1de"}.fa-folder-tree:before{content:"\f802"}.fa-network-wired:before{content:"\f6ff"}.fa-map-pin:before{content:"\f276"}.fa-hamsa:before{content:"\f665"}.fa-cent-sign:before{content:"\e3f5"}.fa-flask:before{content:"\f0c3"}.fa-person-pregnant:before{content:"\e31e"}.fa-wand-sparkles:before{content:"\f72b"}.fa-ellipsis-v:before,.fa-ellipsis-vertical:before{content:"\f142"}.fa-ticket:before{content:"\f145"}.fa-power-off:before{content:"\f011"}.fa-long-arrow-alt-right:before,.fa-right-long:before{content:"\f30b"}.fa-flag-usa:before{content:"\f74d"}.fa-laptop-file:before{content:"\e51d"}.fa-teletype:before,.fa-tty:before{content:"\f1e4"}.fa-diagram-next:before{content:"\e476"}.fa-person-rifle:before{content:"\e54e"}.fa-house-medical-circle-exclamation:before{content:"\e512"}.fa-closed-captioning:before{content:"\f20a"}.fa-hiking:before,.fa-person-hiking:before{content:"\f6ec"}.fa-venus-double:before{content:"\f226"}.fa-images:before{content:"\f302"}.fa-calculator:before{content:"\f1ec"}.fa-people-pulling:before{content:"\e535"}.fa-n:before{content:"\4e"}.fa-cable-car:before,.fa-tram:before{content:"\f7da"}.fa-cloud-rain:before{content:"\f73d"}.fa-building-circle-xmark:before{content:"\e4d4"}.fa-ship:before{content:"\f21a"}.fa-arrows-down-to-line:before{content:"\e4b8"}.fa-download:before{content:"\f019"}.fa-face-grin:before,.fa-grin:before{content:"\f580"}.fa-backspace:before,.fa-delete-left:before{content:"\f55a"}.fa-eye-dropper-empty:before,.fa-eye-dropper:before,.fa-eyedropper:before{content:"\f1fb"}.fa-file-circle-check:before{content:"\e5a0"}.fa-forward:before{content:"\f04e"}.fa-mobile-android:before,.fa-mobile-phone:before,.fa-mobile:before{content:"\f3ce"}.fa-face-meh:before,.fa-meh:before{content:"\f11a"}.fa-align-center:before{content:"\f037"}.fa-book-dead:before,.fa-book-skull:before{content:"\f6b7"}.fa-drivers-license:before,.fa-id-card:before{content:"\f2c2"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-heart-circle-exclamation:before{content:"\e4fe"}.fa-home-alt:before,.fa-home-lg-alt:before,.fa-home:before,.fa-house:before{content:"\f015"}.fa-calendar-week:before{content:"\f784"}.fa-laptop-medical:before{content:"\f812"}.fa-b:before{content:"\42"}.fa-file-medical:before{content:"\f477"}.fa-dice-one:before{content:"\f525"}.fa-kiwi-bird:before{content:"\f535"}.fa-arrow-right-arrow-left:before,.fa-exchange:before{content:"\f0ec"}.fa-redo-alt:before,.fa-rotate-forward:before,.fa-rotate-right:before{content:"\f2f9"}.fa-cutlery:before,.fa-utensils:before{content:"\f2e7"}.fa-arrow-up-wide-short:before,.fa-sort-amount-up:before{content:"\f161"}.fa-mill-sign:before{content:"\e1ed"}.fa-bowl-rice:before{content:"\e2eb"}.fa-skull:before{content:"\f54c"}.fa-broadcast-tower:before,.fa-tower-broadcast:before{content:"\f519"}.fa-truck-pickup:before{content:"\f63c"}.fa-long-arrow-alt-up:before,.fa-up-long:before{content:"\f30c"}.fa-stop:before{content:"\f04d"}.fa-code-merge:before{content:"\f387"}.fa-upload:before{content:"\f093"}.fa-hurricane:before{content:"\f751"}.fa-mound:before{content:"\e52d"}.fa-toilet-portable:before{content:"\e583"}.fa-compact-disc:before{content:"\f51f"}.fa-file-arrow-down:before,.fa-file-download:before{content:"\f56d"}.fa-caravan:before{content:"\f8ff"}.fa-shield-cat:before{content:"\e572"}.fa-bolt:before,.fa-zap:before{content:"\f0e7"}.fa-glass-water:before{content:"\e4f4"}.fa-oil-well:before{content:"\e532"}.fa-vault:before{content:"\e2c5"}.fa-mars:before{content:"\f222"}.fa-toilet:before{content:"\f7d8"}.fa-plane-circle-xmark:before{content:"\e557"}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen-sign:before,.fa-yen:before{content:"\f157"}.fa-rouble:before,.fa-rub:before,.fa-ruble-sign:before,.fa-ruble:before{content:"\f158"}.fa-sun:before{content:"\f185"}.fa-guitar:before{content:"\f7a6"}.fa-face-laugh-wink:before,.fa-laugh-wink:before{content:"\f59c"}.fa-horse-head:before{content:"\f7ab"}.fa-bore-hole:before{content:"\e4c3"}.fa-industry:before{content:"\f275"}.fa-arrow-alt-circle-down:before,.fa-circle-down:before{content:"\f358"}.fa-arrows-turn-to-dots:before{content:"\e4c1"}.fa-florin-sign:before{content:"\e184"}.fa-arrow-down-short-wide:before,.fa-sort-amount-desc:before,.fa-sort-amount-down-alt:before{content:"\f884"}.fa-less-than:before{content:"\3c"}.fa-angle-down:before{content:"\f107"}.fa-car-tunnel:before{content:"\e4de"}.fa-head-side-cough:before{content:"\e061"}.fa-grip-lines:before{content:"\f7a4"}.fa-thumbs-down:before{content:"\f165"}.fa-user-lock:before{content:"\f502"}.fa-arrow-right-long:before,.fa-long-arrow-right:before{content:"\f178"}.fa-anchor-circle-xmark:before{content:"\e4ac"}.fa-ellipsis-h:before,.fa-ellipsis:before{content:"\f141"}.fa-chess-pawn:before{content:"\f443"}.fa-first-aid:before,.fa-kit-medical:before{content:"\f479"}.fa-person-through-window:before{content:"\e5a9"}.fa-toolbox:before{content:"\f552"}.fa-hands-holding-circle:before{content:"\e4fb"}.fa-bug:before{content:"\f188"}.fa-credit-card-alt:before,.fa-credit-card:before{content:"\f09d"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-hand-holding-hand:before{content:"\e4f7"}.fa-book-open-reader:before,.fa-book-reader:before{content:"\f5da"}.fa-mountain-sun:before{content:"\e52f"}.fa-arrows-left-right-to-line:before{content:"\e4ba"}.fa-dice-d20:before{content:"\f6cf"}.fa-truck-droplet:before{content:"\e58c"}.fa-file-circle-xmark:before{content:"\e5a1"}.fa-temperature-arrow-up:before,.fa-temperature-up:before{content:"\e040"}.fa-medal:before{content:"\f5a2"}.fa-bed:before{content:"\f236"}.fa-h-square:before,.fa-square-h:before{content:"\f0fd"}.fa-podcast:before{content:"\f2ce"}.fa-temperature-4:before,.fa-temperature-full:before,.fa-thermometer-4:before,.fa-thermometer-full:before{content:"\f2c7"}.fa-bell:before{content:"\f0f3"}.fa-superscript:before{content:"\f12b"}.fa-plug-circle-xmark:before{content:"\e560"}.fa-star-of-life:before{content:"\f621"}.fa-phone-slash:before{content:"\f3dd"}.fa-paint-roller:before{content:"\f5aa"}.fa-hands-helping:before,.fa-handshake-angle:before{content:"\f4c4"}.fa-location-dot:before,.fa-map-marker-alt:before{content:"\f3c5"}.fa-file:before{content:"\f15b"}.fa-greater-than:before{content:"\3e"}.fa-person-swimming:before,.fa-swimmer:before{content:"\f5c4"}.fa-arrow-down:before{content:"\f063"}.fa-droplet:before,.fa-tint:before{content:"\f043"}.fa-eraser:before{content:"\f12d"}.fa-earth-america:before,.fa-earth-americas:before,.fa-earth:before,.fa-globe-americas:before{content:"\f57d"}.fa-person-burst:before{content:"\e53b"}.fa-dove:before{content:"\f4ba"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-socks:before{content:"\f696"}.fa-inbox:before{content:"\f01c"}.fa-section:before{content:"\e447"}.fa-gauge-high:before,.fa-tachometer-alt-fast:before,.fa-tachometer-alt:before{content:"\f625"}.fa-envelope-open-text:before{content:"\f658"}.fa-hospital-alt:before,.fa-hospital-wide:before,.fa-hospital:before{content:"\f0f8"}.fa-wine-bottle:before{content:"\f72f"}.fa-chess-rook:before{content:"\f447"}.fa-bars-staggered:before,.fa-reorder:before,.fa-stream:before{content:"\f550"}.fa-dharmachakra:before{content:"\f655"}.fa-hotdog:before{content:"\f80f"}.fa-blind:before,.fa-person-walking-with-cane:before{content:"\f29d"}.fa-drum:before{content:"\f569"}.fa-ice-cream:before{content:"\f810"}.fa-heart-circle-bolt:before{content:"\e4fc"}.fa-fax:before{content:"\f1ac"}.fa-paragraph:before{content:"\f1dd"}.fa-check-to-slot:before,.fa-vote-yea:before{content:"\f772"}.fa-star-half:before{content:"\f089"}.fa-boxes-alt:before,.fa-boxes-stacked:before,.fa-boxes:before{content:"\f468"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-assistive-listening-systems:before,.fa-ear-listen:before{content:"\f2a2"}.fa-tree-city:before{content:"\e587"}.fa-play:before{content:"\f04b"}.fa-font:before{content:"\f031"}.fa-rupiah-sign:before{content:"\e23d"}.fa-magnifying-glass:before,.fa-search:before{content:"\f002"}.fa-ping-pong-paddle-ball:before,.fa-table-tennis-paddle-ball:before,.fa-table-tennis:before{content:"\f45d"}.fa-diagnoses:before,.fa-person-dots-from-line:before{content:"\f470"}.fa-trash-can-arrow-up:before,.fa-trash-restore-alt:before{content:"\f82a"}.fa-naira-sign:before{content:"\e1f6"}.fa-cart-arrow-down:before{content:"\f218"}.fa-walkie-talkie:before{content:"\f8ef"}.fa-file-edit:before,.fa-file-pen:before{content:"\f31c"}.fa-receipt:before{content:"\f543"}.fa-pen-square:before,.fa-pencil-square:before,.fa-square-pen:before{content:"\f14b"}.fa-suitcase-rolling:before{content:"\f5c1"}.fa-person-circle-exclamation:before{content:"\e53f"}.fa-chevron-down:before{content:"\f078"}.fa-battery-5:before,.fa-battery-full:before,.fa-battery:before{content:"\f240"}.fa-skull-crossbones:before{content:"\f714"}.fa-code-compare:before{content:"\e13a"}.fa-list-dots:before,.fa-list-ul:before{content:"\f0ca"}.fa-school-lock:before{content:"\e56f"}.fa-tower-cell:before{content:"\e585"}.fa-down-long:before,.fa-long-arrow-alt-down:before{content:"\f309"}.fa-ranking-star:before{content:"\e561"}.fa-chess-king:before{content:"\f43f"}.fa-person-harassing:before{content:"\e549"}.fa-brazilian-real-sign:before{content:"\e46c"}.fa-landmark-alt:before,.fa-landmark-dome:before{content:"\f752"}.fa-arrow-up:before{content:"\f062"}.fa-television:before,.fa-tv-alt:before,.fa-tv:before{content:"\f26c"}.fa-shrimp:before{content:"\e448"}.fa-list-check:before,.fa-tasks:before{content:"\f0ae"}.fa-jug-detergent:before{content:"\e519"}.fa-circle-user:before,.fa-user-circle:before{content:"\f2bd"}.fa-user-shield:before{content:"\f505"}.fa-wind:before{content:"\f72e"}.fa-car-burst:before,.fa-car-crash:before{content:"\f5e1"}.fa-y:before{content:"\59"}.fa-person-snowboarding:before,.fa-snowboarding:before{content:"\f7ce"}.fa-shipping-fast:before,.fa-truck-fast:before{content:"\f48b"}.fa-fish:before{content:"\f578"}.fa-user-graduate:before{content:"\f501"}.fa-adjust:before,.fa-circle-half-stroke:before{content:"\f042"}.fa-clapperboard:before{content:"\e131"}.fa-circle-radiation:before,.fa-radiation-alt:before{content:"\f7ba"}.fa-baseball-ball:before,.fa-baseball:before{content:"\f433"}.fa-jet-fighter-up:before{content:"\e518"}.fa-diagram-project:before,.fa-project-diagram:before{content:"\f542"}.fa-copy:before{content:"\f0c5"}.fa-volume-mute:before,.fa-volume-times:before,.fa-volume-xmark:before{content:"\f6a9"}.fa-hand-sparkles:before{content:"\e05d"}.fa-grip-horizontal:before,.fa-grip:before{content:"\f58d"}.fa-share-from-square:before,.fa-share-square:before{content:"\f14d"}.fa-child-combatant:before,.fa-child-rifle:before{content:"\e4e0"}.fa-gun:before{content:"\e19b"}.fa-phone-square:before,.fa-square-phone:before{content:"\f098"}.fa-add:before,.fa-plus:before{content:"\2b"}.fa-expand:before{content:"\f065"}.fa-computer:before{content:"\e4e5"}.fa-close:before,.fa-multiply:before,.fa-remove:before,.fa-times:before,.fa-xmark:before{content:"\f00d"}.fa-arrows-up-down-left-right:before,.fa-arrows:before{content:"\f047"}.fa-chalkboard-teacher:before,.fa-chalkboard-user:before{content:"\f51c"}.fa-peso-sign:before{content:"\e222"}.fa-building-shield:before{content:"\e4d8"}.fa-baby:before{content:"\f77c"}.fa-users-line:before{content:"\e592"}.fa-quote-left-alt:before,.fa-quote-left:before{content:"\f10d"}.fa-tractor:before{content:"\f722"}.fa-trash-arrow-up:before,.fa-trash-restore:before{content:"\f829"}.fa-arrow-down-up-lock:before{content:"\e4b0"}.fa-lines-leaning:before{content:"\e51e"}.fa-ruler-combined:before{content:"\f546"}.fa-copyright:before{content:"\f1f9"}.fa-equals:before{content:"\3d"}.fa-blender:before{content:"\f517"}.fa-teeth:before{content:"\f62e"}.fa-ils:before,.fa-shekel-sign:before,.fa-shekel:before,.fa-sheqel-sign:before,.fa-sheqel:before{content:"\f20b"}.fa-map:before{content:"\f279"}.fa-rocket:before{content:"\f135"}.fa-photo-film:before,.fa-photo-video:before{content:"\f87c"}.fa-folder-minus:before{content:"\f65d"}.fa-store:before{content:"\f54e"}.fa-arrow-trend-up:before{content:"\e098"}.fa-plug-circle-minus:before{content:"\e55e"}.fa-sign-hanging:before,.fa-sign:before{content:"\f4d9"}.fa-bezier-curve:before{content:"\f55b"}.fa-bell-slash:before{content:"\f1f6"}.fa-tablet-android:before,.fa-tablet:before{content:"\f3fb"}.fa-school-flag:before{content:"\e56e"}.fa-fill:before{content:"\f575"}.fa-angle-up:before{content:"\f106"}.fa-drumstick-bite:before{content:"\f6d7"}.fa-holly-berry:before{content:"\f7aa"}.fa-chevron-left:before{content:"\f053"}.fa-bacteria:before{content:"\e059"}.fa-hand-lizard:before{content:"\f258"}.fa-notdef:before{content:"\e1fe"}.fa-disease:before{content:"\f7fa"}.fa-briefcase-medical:before{content:"\f469"}.fa-genderless:before{content:"\f22d"}.fa-chevron-right:before{content:"\f054"}.fa-retweet:before{content:"\f079"}.fa-car-alt:before,.fa-car-rear:before{content:"\f5de"}.fa-pump-soap:before{content:"\e06b"}.fa-video-slash:before{content:"\f4e2"}.fa-battery-2:before,.fa-battery-quarter:before{content:"\f243"}.fa-radio:before{content:"\f8d7"}.fa-baby-carriage:before,.fa-carriage-baby:before{content:"\f77d"}.fa-traffic-light:before{content:"\f637"}.fa-thermometer:before{content:"\f491"}.fa-vr-cardboard:before{content:"\f729"}.fa-hand-middle-finger:before{content:"\f806"}.fa-percent:before,.fa-percentage:before{content:"\25"}.fa-truck-moving:before{content:"\f4df"}.fa-glass-water-droplet:before{content:"\e4f5"}.fa-display:before{content:"\e163"}.fa-face-smile:before,.fa-smile:before{content:"\f118"}.fa-thumb-tack:before,.fa-thumbtack:before{content:"\f08d"}.fa-trophy:before{content:"\f091"}.fa-person-praying:before,.fa-pray:before{content:"\f683"}.fa-hammer:before{content:"\f6e3"}.fa-hand-peace:before{content:"\f25b"}.fa-rotate:before,.fa-sync-alt:before{content:"\f2f1"}.fa-spinner:before{content:"\f110"}.fa-robot:before{content:"\f544"}.fa-peace:before{content:"\f67c"}.fa-cogs:before,.fa-gears:before{content:"\f085"}.fa-warehouse:before{content:"\f494"}.fa-arrow-up-right-dots:before{content:"\e4b7"}.fa-splotch:before{content:"\f5bc"}.fa-face-grin-hearts:before,.fa-grin-hearts:before{content:"\f584"}.fa-dice-four:before{content:"\f524"}.fa-sim-card:before{content:"\f7c4"}.fa-transgender-alt:before,.fa-transgender:before{content:"\f225"}.fa-mercury:before{content:"\f223"}.fa-arrow-turn-down:before,.fa-level-down:before{content:"\f149"}.fa-person-falling-burst:before{content:"\e547"}.fa-award:before{content:"\f559"}.fa-ticket-alt:before,.fa-ticket-simple:before{content:"\f3ff"}.fa-building:before{content:"\f1ad"}.fa-angle-double-left:before,.fa-angles-left:before{content:"\f100"}.fa-qrcode:before{content:"\f029"}.fa-clock-rotate-left:before,.fa-history:before{content:"\f1da"}.fa-face-grin-beam-sweat:before,.fa-grin-beam-sweat:before{content:"\f583"}.fa-arrow-right-from-file:before,.fa-file-export:before{content:"\f56e"}.fa-shield-blank:before,.fa-shield:before{content:"\f132"}.fa-arrow-up-short-wide:before,.fa-sort-amount-up-alt:before{content:"\f885"}.fa-house-medical:before{content:"\e3b2"}.fa-golf-ball-tee:before,.fa-golf-ball:before{content:"\f450"}.fa-chevron-circle-left:before,.fa-circle-chevron-left:before{content:"\f137"}.fa-house-chimney-window:before{content:"\e00d"}.fa-pen-nib:before{content:"\f5ad"}.fa-tent-arrow-turn-left:before{content:"\e580"}.fa-tents:before{content:"\e582"}.fa-magic:before,.fa-wand-magic:before{content:"\f0d0"}.fa-dog:before{content:"\f6d3"}.fa-carrot:before{content:"\f787"}.fa-moon:before{content:"\f186"}.fa-wine-glass-alt:before,.fa-wine-glass-empty:before{content:"\f5ce"}.fa-cheese:before{content:"\f7ef"}.fa-yin-yang:before{content:"\f6ad"}.fa-music:before{content:"\f001"}.fa-code-commit:before{content:"\f386"}.fa-temperature-low:before{content:"\f76b"}.fa-biking:before,.fa-person-biking:before{content:"\f84a"}.fa-broom:before{content:"\f51a"}.fa-shield-heart:before{content:"\e574"}.fa-gopuram:before{content:"\f664"}.fa-earth-oceania:before,.fa-globe-oceania:before{content:"\e47b"}.fa-square-xmark:before,.fa-times-square:before,.fa-xmark-square:before{content:"\f2d3"}.fa-hashtag:before{content:"\23"}.fa-expand-alt:before,.fa-up-right-and-down-left-from-center:before{content:"\f424"}.fa-oil-can:before{content:"\f613"}.fa-t:before{content:"\54"}.fa-hippo:before{content:"\f6ed"}.fa-chart-column:before{content:"\e0e3"}.fa-infinity:before{content:"\f534"}.fa-vial-circle-check:before{content:"\e596"}.fa-person-arrow-down-to-line:before{content:"\e538"}.fa-voicemail:before{content:"\f897"}.fa-fan:before{content:"\f863"}.fa-person-walking-luggage:before{content:"\e554"}.fa-arrows-alt-v:before,.fa-up-down:before{content:"\f338"}.fa-cloud-moon-rain:before{content:"\f73c"}.fa-calendar:before{content:"\f133"}.fa-trailer:before{content:"\e041"}.fa-bahai:before,.fa-haykal:before{content:"\f666"}.fa-sd-card:before{content:"\f7c2"}.fa-dragon:before{content:"\f6d5"}.fa-shoe-prints:before{content:"\f54b"}.fa-circle-plus:before,.fa-plus-circle:before{content:"\f055"}.fa-face-grin-tongue-wink:before,.fa-grin-tongue-wink:before{content:"\f58b"}.fa-hand-holding:before{content:"\f4bd"}.fa-plug-circle-exclamation:before{content:"\e55d"}.fa-chain-broken:before,.fa-chain-slash:before,.fa-link-slash:before,.fa-unlink:before{content:"\f127"}.fa-clone:before{content:"\f24d"}.fa-person-walking-arrow-loop-left:before{content:"\e551"}.fa-arrow-up-z-a:before,.fa-sort-alpha-up-alt:before{content:"\f882"}.fa-fire-alt:before,.fa-fire-flame-curved:before{content:"\f7e4"}.fa-tornado:before{content:"\f76f"}.fa-file-circle-plus:before{content:"\e494"}.fa-book-quran:before,.fa-quran:before{content:"\f687"}.fa-anchor:before{content:"\f13d"}.fa-border-all:before{content:"\f84c"}.fa-angry:before,.fa-face-angry:before{content:"\f556"}.fa-cookie-bite:before{content:"\f564"}.fa-arrow-trend-down:before{content:"\e097"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-draw-polygon:before{content:"\f5ee"}.fa-balance-scale:before,.fa-scale-balanced:before{content:"\f24e"}.fa-gauge-simple-high:before,.fa-tachometer-fast:before,.fa-tachometer:before{content:"\f62a"}.fa-shower:before{content:"\f2cc"}.fa-desktop-alt:before,.fa-desktop:before{content:"\f390"}.fa-m:before{content:"\4d"}.fa-table-list:before,.fa-th-list:before{content:"\f00b"}.fa-comment-sms:before,.fa-sms:before{content:"\f7cd"}.fa-book:before{content:"\f02d"}.fa-user-plus:before{content:"\f234"}.fa-check:before{content:"\f00c"}.fa-battery-4:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-house-circle-check:before{content:"\e509"}.fa-angle-left:before{content:"\f104"}.fa-diagram-successor:before{content:"\e47a"}.fa-truck-arrow-right:before{content:"\e58b"}.fa-arrows-split-up-and-left:before{content:"\e4bc"}.fa-fist-raised:before,.fa-hand-fist:before{content:"\f6de"}.fa-cloud-moon:before{content:"\f6c3"}.fa-briefcase:before{content:"\f0b1"}.fa-person-falling:before{content:"\e546"}.fa-image-portrait:before,.fa-portrait:before{content:"\f3e0"}.fa-user-tag:before{content:"\f507"}.fa-rug:before{content:"\e569"}.fa-earth-europe:before,.fa-globe-europe:before{content:"\f7a2"}.fa-cart-flatbed-suitcase:before,.fa-luggage-cart:before{content:"\f59d"}.fa-rectangle-times:before,.fa-rectangle-xmark:before,.fa-times-rectangle:before,.fa-window-close:before{content:"\f410"}.fa-baht-sign:before{content:"\e0ac"}.fa-book-open:before{content:"\f518"}.fa-book-journal-whills:before,.fa-journal-whills:before{content:"\f66a"}.fa-handcuffs:before{content:"\e4f8"}.fa-exclamation-triangle:before,.fa-triangle-exclamation:before,.fa-warning:before{content:"\f071"}.fa-database:before{content:"\f1c0"}.fa-arrow-turn-right:before,.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-bottle-droplet:before{content:"\e4c4"}.fa-mask-face:before{content:"\e1d7"}.fa-hill-rockslide:before{content:"\e508"}.fa-exchange-alt:before,.fa-right-left:before{content:"\f362"}.fa-paper-plane:before{content:"\f1d8"}.fa-road-circle-exclamation:before{content:"\e565"}.fa-dungeon:before{content:"\f6d9"}.fa-align-right:before{content:"\f038"}.fa-money-bill-1-wave:before,.fa-money-bill-wave-alt:before{content:"\f53b"}.fa-life-ring:before{content:"\f1cd"}.fa-hands:before,.fa-sign-language:before,.fa-signing:before{content:"\f2a7"}.fa-calendar-day:before{content:"\f783"}.fa-ladder-water:before,.fa-swimming-pool:before,.fa-water-ladder:before{content:"\f5c5"}.fa-arrows-up-down:before,.fa-arrows-v:before{content:"\f07d"}.fa-face-grimace:before,.fa-grimace:before{content:"\f57f"}.fa-wheelchair-alt:before,.fa-wheelchair-move:before{content:"\e2ce"}.fa-level-down-alt:before,.fa-turn-down:before{content:"\f3be"}.fa-person-walking-arrow-right:before{content:"\e552"}.fa-envelope-square:before,.fa-square-envelope:before{content:"\f199"}.fa-dice:before{content:"\f522"}.fa-bowling-ball:before{content:"\f436"}.fa-brain:before{content:"\f5dc"}.fa-band-aid:before,.fa-bandage:before{content:"\f462"}.fa-calendar-minus:before{content:"\f272"}.fa-circle-xmark:before,.fa-times-circle:before,.fa-xmark-circle:before{content:"\f057"}.fa-gifts:before{content:"\f79c"}.fa-hotel:before{content:"\f594"}.fa-earth-asia:before,.fa-globe-asia:before{content:"\f57e"}.fa-id-card-alt:before,.fa-id-card-clip:before{content:"\f47f"}.fa-magnifying-glass-plus:before,.fa-search-plus:before{content:"\f00e"}.fa-thumbs-up:before{content:"\f164"}.fa-user-clock:before{content:"\f4fd"}.fa-allergies:before,.fa-hand-dots:before{content:"\f461"}.fa-file-invoice:before{content:"\f570"}.fa-window-minimize:before{content:"\f2d1"}.fa-coffee:before,.fa-mug-saucer:before{content:"\f0f4"}.fa-brush:before{content:"\f55d"}.fa-mask:before{content:"\f6fa"}.fa-magnifying-glass-minus:before,.fa-search-minus:before{content:"\f010"}.fa-ruler-vertical:before{content:"\f548"}.fa-user-alt:before,.fa-user-large:before{content:"\f406"}.fa-train-tram:before{content:"\e5b4"}.fa-user-nurse:before{content:"\f82f"}.fa-syringe:before{content:"\f48e"}.fa-cloud-sun:before{content:"\f6c4"}.fa-stopwatch-20:before{content:"\e06f"}.fa-square-full:before{content:"\f45c"}.fa-magnet:before{content:"\f076"}.fa-jar:before{content:"\e516"}.fa-note-sticky:before,.fa-sticky-note:before{content:"\f249"}.fa-bug-slash:before{content:"\e490"}.fa-arrow-up-from-water-pump:before{content:"\e4b6"}.fa-bone:before{content:"\f5d7"}.fa-user-injured:before{content:"\f728"}.fa-face-sad-tear:before,.fa-sad-tear:before{content:"\f5b4"}.fa-plane:before{content:"\f072"}.fa-tent-arrows-down:before{content:"\e581"}.fa-exclamation:before{content:"\21"}.fa-arrows-spin:before{content:"\e4bb"}.fa-print:before{content:"\f02f"}.fa-try:before,.fa-turkish-lira-sign:before,.fa-turkish-lira:before{content:"\e2bb"}.fa-dollar-sign:before,.fa-dollar:before,.fa-usd:before{content:"\24"}.fa-x:before{content:"\58"}.fa-magnifying-glass-dollar:before,.fa-search-dollar:before{content:"\f688"}.fa-users-cog:before,.fa-users-gear:before{content:"\f509"}.fa-person-military-pointing:before{content:"\e54a"}.fa-bank:before,.fa-building-columns:before,.fa-institution:before,.fa-museum:before,.fa-university:before{content:"\f19c"}.fa-umbrella:before{content:"\f0e9"}.fa-trowel:before{content:"\e589"}.fa-d:before{content:"\44"}.fa-stapler:before{content:"\e5af"}.fa-masks-theater:before,.fa-theater-masks:before{content:"\f630"}.fa-kip-sign:before{content:"\e1c4"}.fa-hand-point-left:before{content:"\f0a5"}.fa-handshake-alt:before,.fa-handshake-simple:before{content:"\f4c6"}.fa-fighter-jet:before,.fa-jet-fighter:before{content:"\f0fb"}.fa-share-alt-square:before,.fa-square-share-nodes:before{content:"\f1e1"}.fa-barcode:before{content:"\f02a"}.fa-plus-minus:before{content:"\e43c"}.fa-video-camera:before,.fa-video:before{content:"\f03d"}.fa-graduation-cap:before,.fa-mortar-board:before{content:"\f19d"}.fa-hand-holding-medical:before{content:"\e05c"}.fa-person-circle-check:before{content:"\e53e"}.fa-level-up-alt:before,.fa-turn-up:before{content:"\f3bf"} +.fa-sr-only,.fa-sr-only-focusable:not(:focus),.sr-only,.sr-only-focusable:not(:focus){position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}:host,:root{--fa-style-family-brands:"Font Awesome 6 Brands";--fa-font-brands:normal 400 1em/1 "Font Awesome 6 Brands"}@font-face{font-family:"Font Awesome 6 Brands";font-style:normal;font-weight:400;font-display:block;src: url("../webfonts/fa-brands-400.woff2") format("woff2"), url("../webfonts/fa-brands-400.ttf") format("truetype"); }.fa-brands,.fab{font-weight:400}.fa-monero:before{content:"\f3d0"}.fa-hooli:before{content:"\f427"}.fa-yelp:before{content:"\f1e9"}.fa-cc-visa:before{content:"\f1f0"}.fa-lastfm:before{content:"\f202"}.fa-shopware:before{content:"\f5b5"}.fa-creative-commons-nc:before{content:"\f4e8"}.fa-aws:before{content:"\f375"}.fa-redhat:before{content:"\f7bc"}.fa-yoast:before{content:"\f2b1"}.fa-cloudflare:before{content:"\e07d"}.fa-ups:before{content:"\f7e0"}.fa-wpexplorer:before{content:"\f2de"}.fa-dyalog:before{content:"\f399"}.fa-bity:before{content:"\f37a"}.fa-stackpath:before{content:"\f842"}.fa-buysellads:before{content:"\f20d"}.fa-first-order:before{content:"\f2b0"}.fa-modx:before{content:"\f285"}.fa-guilded:before{content:"\e07e"}.fa-vnv:before{content:"\f40b"}.fa-js-square:before,.fa-square-js:before{content:"\f3b9"}.fa-microsoft:before{content:"\f3ca"}.fa-qq:before{content:"\f1d6"}.fa-orcid:before{content:"\f8d2"}.fa-java:before{content:"\f4e4"}.fa-invision:before{content:"\f7b0"}.fa-creative-commons-pd-alt:before{content:"\f4ed"}.fa-centercode:before{content:"\f380"}.fa-glide-g:before{content:"\f2a6"}.fa-drupal:before{content:"\f1a9"}.fa-hire-a-helper:before{content:"\f3b0"}.fa-creative-commons-by:before{content:"\f4e7"}.fa-unity:before{content:"\e049"}.fa-whmcs:before{content:"\f40d"}.fa-rocketchat:before{content:"\f3e8"}.fa-vk:before{content:"\f189"}.fa-untappd:before{content:"\f405"}.fa-mailchimp:before{content:"\f59e"}.fa-css3-alt:before{content:"\f38b"}.fa-reddit-square:before,.fa-square-reddit:before{content:"\f1a2"}.fa-vimeo-v:before{content:"\f27d"}.fa-contao:before{content:"\f26d"}.fa-square-font-awesome:before{content:"\e5ad"}.fa-deskpro:before{content:"\f38f"}.fa-sistrix:before{content:"\f3ee"}.fa-instagram-square:before,.fa-square-instagram:before{content:"\e055"}.fa-battle-net:before{content:"\f835"}.fa-the-red-yeti:before{content:"\f69d"}.fa-hacker-news-square:before,.fa-square-hacker-news:before{content:"\f3af"}.fa-edge:before{content:"\f282"}.fa-threads:before{content:"\e618"}.fa-napster:before{content:"\f3d2"}.fa-snapchat-square:before,.fa-square-snapchat:before{content:"\f2ad"}.fa-google-plus-g:before{content:"\f0d5"}.fa-artstation:before{content:"\f77a"}.fa-markdown:before{content:"\f60f"}.fa-sourcetree:before{content:"\f7d3"}.fa-google-plus:before{content:"\f2b3"}.fa-diaspora:before{content:"\f791"}.fa-foursquare:before{content:"\f180"}.fa-stack-overflow:before{content:"\f16c"}.fa-github-alt:before{content:"\f113"}.fa-phoenix-squadron:before{content:"\f511"}.fa-pagelines:before{content:"\f18c"}.fa-algolia:before{content:"\f36c"}.fa-red-river:before{content:"\f3e3"}.fa-creative-commons-sa:before{content:"\f4ef"}.fa-safari:before{content:"\f267"}.fa-google:before{content:"\f1a0"}.fa-font-awesome-alt:before,.fa-square-font-awesome-stroke:before{content:"\f35c"}.fa-atlassian:before{content:"\f77b"}.fa-linkedin-in:before{content:"\f0e1"}.fa-digital-ocean:before{content:"\f391"}.fa-nimblr:before{content:"\f5a8"}.fa-chromecast:before{content:"\f838"}.fa-evernote:before{content:"\f839"}.fa-hacker-news:before{content:"\f1d4"}.fa-creative-commons-sampling:before{content:"\f4f0"}.fa-adversal:before{content:"\f36a"}.fa-creative-commons:before{content:"\f25e"}.fa-watchman-monitoring:before{content:"\e087"}.fa-fonticons:before{content:"\f280"}.fa-weixin:before{content:"\f1d7"}.fa-shirtsinbulk:before{content:"\f214"}.fa-codepen:before{content:"\f1cb"}.fa-git-alt:before{content:"\f841"}.fa-lyft:before{content:"\f3c3"}.fa-rev:before{content:"\f5b2"}.fa-windows:before{content:"\f17a"}.fa-wizards-of-the-coast:before{content:"\f730"}.fa-square-viadeo:before,.fa-viadeo-square:before{content:"\f2aa"}.fa-meetup:before{content:"\f2e0"}.fa-centos:before{content:"\f789"}.fa-adn:before{content:"\f170"}.fa-cloudsmith:before{content:"\f384"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-dribbble-square:before,.fa-square-dribbble:before{content:"\f397"}.fa-codiepie:before{content:"\f284"}.fa-node:before{content:"\f419"}.fa-mix:before{content:"\f3cb"}.fa-steam:before{content:"\f1b6"}.fa-cc-apple-pay:before{content:"\f416"}.fa-scribd:before{content:"\f28a"}.fa-debian:before{content:"\e60b"}.fa-openid:before{content:"\f19b"}.fa-instalod:before{content:"\e081"}.fa-expeditedssl:before{content:"\f23e"}.fa-sellcast:before{content:"\f2da"}.fa-square-twitter:before,.fa-twitter-square:before{content:"\f081"}.fa-r-project:before{content:"\f4f7"}.fa-delicious:before{content:"\f1a5"}.fa-freebsd:before{content:"\f3a4"}.fa-vuejs:before{content:"\f41f"}.fa-accusoft:before{content:"\f369"}.fa-ioxhost:before{content:"\f208"}.fa-fonticons-fi:before{content:"\f3a2"}.fa-app-store:before{content:"\f36f"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-itunes-note:before{content:"\f3b5"}.fa-golang:before{content:"\e40f"}.fa-kickstarter:before{content:"\f3bb"}.fa-grav:before{content:"\f2d6"}.fa-weibo:before{content:"\f18a"}.fa-uncharted:before{content:"\e084"}.fa-firstdraft:before{content:"\f3a1"}.fa-square-youtube:before,.fa-youtube-square:before{content:"\f431"}.fa-wikipedia-w:before{content:"\f266"}.fa-rendact:before,.fa-wpressr:before{content:"\f3e4"}.fa-angellist:before{content:"\f209"}.fa-galactic-republic:before{content:"\f50c"}.fa-nfc-directional:before{content:"\e530"}.fa-skype:before{content:"\f17e"}.fa-joget:before{content:"\f3b7"}.fa-fedora:before{content:"\f798"}.fa-stripe-s:before{content:"\f42a"}.fa-meta:before{content:"\e49b"}.fa-laravel:before{content:"\f3bd"}.fa-hotjar:before{content:"\f3b1"}.fa-bluetooth-b:before{content:"\f294"}.fa-sticker-mule:before{content:"\f3f7"}.fa-creative-commons-zero:before{content:"\f4f3"}.fa-hips:before{content:"\f452"}.fa-behance:before{content:"\f1b4"}.fa-reddit:before{content:"\f1a1"}.fa-discord:before{content:"\f392"}.fa-chrome:before{content:"\f268"}.fa-app-store-ios:before{content:"\f370"}.fa-cc-discover:before{content:"\f1f2"}.fa-wpbeginner:before{content:"\f297"}.fa-confluence:before{content:"\f78d"}.fa-mdb:before{content:"\f8ca"}.fa-dochub:before{content:"\f394"}.fa-accessible-icon:before{content:"\f368"}.fa-ebay:before{content:"\f4f4"}.fa-amazon:before{content:"\f270"}.fa-unsplash:before{content:"\e07c"}.fa-yarn:before{content:"\f7e3"}.fa-square-steam:before,.fa-steam-square:before{content:"\f1b7"}.fa-500px:before{content:"\f26e"}.fa-square-vimeo:before,.fa-vimeo-square:before{content:"\f194"}.fa-asymmetrik:before{content:"\f372"}.fa-font-awesome-flag:before,.fa-font-awesome-logo-full:before,.fa-font-awesome:before{content:"\f2b4"}.fa-gratipay:before{content:"\f184"}.fa-apple:before{content:"\f179"}.fa-hive:before{content:"\e07f"}.fa-gitkraken:before{content:"\f3a6"}.fa-keybase:before{content:"\f4f5"}.fa-apple-pay:before{content:"\f415"}.fa-padlet:before{content:"\e4a0"}.fa-amazon-pay:before{content:"\f42c"}.fa-github-square:before,.fa-square-github:before{content:"\f092"}.fa-stumbleupon:before{content:"\f1a4"}.fa-fedex:before{content:"\f797"}.fa-phoenix-framework:before{content:"\f3dc"}.fa-shopify:before{content:"\e057"}.fa-neos:before{content:"\f612"}.fa-square-threads:before{content:"\e619"}.fa-hackerrank:before{content:"\f5f7"}.fa-researchgate:before{content:"\f4f8"}.fa-swift:before{content:"\f8e1"}.fa-angular:before{content:"\f420"}.fa-speakap:before{content:"\f3f3"}.fa-angrycreative:before{content:"\f36e"}.fa-y-combinator:before{content:"\f23b"}.fa-empire:before{content:"\f1d1"}.fa-envira:before{content:"\f299"}.fa-gitlab-square:before,.fa-square-gitlab:before{content:"\e5ae"}.fa-studiovinari:before{content:"\f3f8"}.fa-pied-piper:before{content:"\f2ae"}.fa-wordpress:before{content:"\f19a"}.fa-product-hunt:before{content:"\f288"}.fa-firefox:before{content:"\f269"}.fa-linode:before{content:"\f2b8"}.fa-goodreads:before{content:"\f3a8"}.fa-odnoklassniki-square:before,.fa-square-odnoklassniki:before{content:"\f264"}.fa-jsfiddle:before{content:"\f1cc"}.fa-sith:before{content:"\f512"}.fa-themeisle:before{content:"\f2b2"}.fa-page4:before{content:"\f3d7"}.fa-hashnode:before{content:"\e499"}.fa-react:before{content:"\f41b"}.fa-cc-paypal:before{content:"\f1f4"}.fa-squarespace:before{content:"\f5be"}.fa-cc-stripe:before{content:"\f1f5"}.fa-creative-commons-share:before{content:"\f4f2"}.fa-bitcoin:before{content:"\f379"}.fa-keycdn:before{content:"\f3ba"}.fa-opera:before{content:"\f26a"}.fa-itch-io:before{content:"\f83a"}.fa-umbraco:before{content:"\f8e8"}.fa-galactic-senate:before{content:"\f50d"}.fa-ubuntu:before{content:"\f7df"}.fa-draft2digital:before{content:"\f396"}.fa-stripe:before{content:"\f429"}.fa-houzz:before{content:"\f27c"}.fa-gg:before{content:"\f260"}.fa-dhl:before{content:"\f790"}.fa-pinterest-square:before,.fa-square-pinterest:before{content:"\f0d3"}.fa-xing:before{content:"\f168"}.fa-blackberry:before{content:"\f37b"}.fa-creative-commons-pd:before{content:"\f4ec"}.fa-playstation:before{content:"\f3df"}.fa-quinscape:before{content:"\f459"}.fa-less:before{content:"\f41d"}.fa-blogger-b:before{content:"\f37d"}.fa-opencart:before{content:"\f23d"}.fa-vine:before{content:"\f1ca"}.fa-paypal:before{content:"\f1ed"}.fa-gitlab:before{content:"\f296"}.fa-typo3:before{content:"\f42b"}.fa-reddit-alien:before{content:"\f281"}.fa-yahoo:before{content:"\f19e"}.fa-dailymotion:before{content:"\e052"}.fa-affiliatetheme:before{content:"\f36b"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-bootstrap:before{content:"\f836"}.fa-odnoklassniki:before{content:"\f263"}.fa-nfc-symbol:before{content:"\e531"}.fa-ethereum:before{content:"\f42e"}.fa-speaker-deck:before{content:"\f83c"}.fa-creative-commons-nc-eu:before{content:"\f4e9"}.fa-patreon:before{content:"\f3d9"}.fa-avianex:before{content:"\f374"}.fa-ello:before{content:"\f5f1"}.fa-gofore:before{content:"\f3a7"}.fa-bimobject:before{content:"\f378"}.fa-facebook-f:before{content:"\f39e"}.fa-google-plus-square:before,.fa-square-google-plus:before{content:"\f0d4"}.fa-mandalorian:before{content:"\f50f"}.fa-first-order-alt:before{content:"\f50a"}.fa-osi:before{content:"\f41a"}.fa-google-wallet:before{content:"\f1ee"}.fa-d-and-d-beyond:before{content:"\f6ca"}.fa-periscope:before{content:"\f3da"}.fa-fulcrum:before{content:"\f50b"}.fa-cloudscale:before{content:"\f383"}.fa-forumbee:before{content:"\f211"}.fa-mizuni:before{content:"\f3cc"}.fa-schlix:before{content:"\f3ea"}.fa-square-xing:before,.fa-xing-square:before{content:"\f169"}.fa-bandcamp:before{content:"\f2d5"}.fa-wpforms:before{content:"\f298"}.fa-cloudversify:before{content:"\f385"}.fa-usps:before{content:"\f7e1"}.fa-megaport:before{content:"\f5a3"}.fa-magento:before{content:"\f3c4"}.fa-spotify:before{content:"\f1bc"}.fa-optin-monster:before{content:"\f23c"}.fa-fly:before{content:"\f417"}.fa-aviato:before{content:"\f421"}.fa-itunes:before{content:"\f3b4"}.fa-cuttlefish:before{content:"\f38c"}.fa-blogger:before{content:"\f37c"}.fa-flickr:before{content:"\f16e"}.fa-viber:before{content:"\f409"}.fa-soundcloud:before{content:"\f1be"}.fa-digg:before{content:"\f1a6"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-symfony:before{content:"\f83d"}.fa-maxcdn:before{content:"\f136"}.fa-etsy:before{content:"\f2d7"}.fa-facebook-messenger:before{content:"\f39f"}.fa-audible:before{content:"\f373"}.fa-think-peaks:before{content:"\f731"}.fa-bilibili:before{content:"\e3d9"}.fa-erlang:before{content:"\f39d"}.fa-x-twitter:before{content:"\e61b"}.fa-cotton-bureau:before{content:"\f89e"}.fa-dashcube:before{content:"\f210"}.fa-42-group:before,.fa-innosoft:before{content:"\e080"}.fa-stack-exchange:before{content:"\f18d"}.fa-elementor:before{content:"\f430"}.fa-pied-piper-square:before,.fa-square-pied-piper:before{content:"\e01e"}.fa-creative-commons-nd:before{content:"\f4eb"}.fa-palfed:before{content:"\f3d8"}.fa-superpowers:before{content:"\f2dd"}.fa-resolving:before{content:"\f3e7"}.fa-xbox:before{content:"\f412"}.fa-searchengin:before{content:"\f3eb"}.fa-tiktok:before{content:"\e07b"}.fa-facebook-square:before,.fa-square-facebook:before{content:"\f082"}.fa-renren:before{content:"\f18b"}.fa-linux:before{content:"\f17c"}.fa-glide:before{content:"\f2a5"}.fa-linkedin:before{content:"\f08c"}.fa-hubspot:before{content:"\f3b2"}.fa-deploydog:before{content:"\f38e"}.fa-twitch:before{content:"\f1e8"}.fa-ravelry:before{content:"\f2d9"}.fa-mixer:before{content:"\e056"}.fa-lastfm-square:before,.fa-square-lastfm:before{content:"\f203"}.fa-vimeo:before{content:"\f40a"}.fa-mendeley:before{content:"\f7b3"}.fa-uniregistry:before{content:"\f404"}.fa-figma:before{content:"\f799"}.fa-creative-commons-remix:before{content:"\f4ee"}.fa-cc-amazon-pay:before{content:"\f42d"}.fa-dropbox:before{content:"\f16b"}.fa-instagram:before{content:"\f16d"}.fa-cmplid:before{content:"\e360"}.fa-facebook:before{content:"\f09a"}.fa-gripfire:before{content:"\f3ac"}.fa-jedi-order:before{content:"\f50e"}.fa-uikit:before{content:"\f403"}.fa-fort-awesome-alt:before{content:"\f3a3"}.fa-phabricator:before{content:"\f3db"}.fa-ussunnah:before{content:"\f407"}.fa-earlybirds:before{content:"\f39a"}.fa-trade-federation:before{content:"\f513"}.fa-autoprefixer:before{content:"\f41c"}.fa-whatsapp:before{content:"\f232"}.fa-slideshare:before{content:"\f1e7"}.fa-google-play:before{content:"\f3ab"}.fa-viadeo:before{content:"\f2a9"}.fa-line:before{content:"\f3c0"}.fa-google-drive:before{content:"\f3aa"}.fa-servicestack:before{content:"\f3ec"}.fa-simplybuilt:before{content:"\f215"}.fa-bitbucket:before{content:"\f171"}.fa-imdb:before{content:"\f2d8"}.fa-deezer:before{content:"\e077"}.fa-raspberry-pi:before{content:"\f7bb"}.fa-jira:before{content:"\f7b1"}.fa-docker:before{content:"\f395"}.fa-screenpal:before{content:"\e570"}.fa-bluetooth:before{content:"\f293"}.fa-gitter:before{content:"\f426"}.fa-d-and-d:before{content:"\f38d"}.fa-microblog:before{content:"\e01a"}.fa-cc-diners-club:before{content:"\f24c"}.fa-gg-circle:before{content:"\f261"}.fa-pied-piper-hat:before{content:"\f4e5"}.fa-kickstarter-k:before{content:"\f3bc"}.fa-yandex:before{content:"\f413"}.fa-readme:before{content:"\f4d5"}.fa-html5:before{content:"\f13b"}.fa-sellsy:before{content:"\f213"}.fa-sass:before{content:"\f41e"}.fa-wirsindhandwerk:before,.fa-wsh:before{content:"\e2d0"}.fa-buromobelexperte:before{content:"\f37f"}.fa-salesforce:before{content:"\f83b"}.fa-octopus-deploy:before{content:"\e082"}.fa-medapps:before{content:"\f3c6"}.fa-ns8:before{content:"\f3d5"}.fa-pinterest-p:before{content:"\f231"}.fa-apper:before{content:"\f371"}.fa-fort-awesome:before{content:"\f286"}.fa-waze:before{content:"\f83f"}.fa-cc-jcb:before{content:"\f24b"}.fa-snapchat-ghost:before,.fa-snapchat:before{content:"\f2ab"}.fa-fantasy-flight-games:before{content:"\f6dc"}.fa-rust:before{content:"\e07a"}.fa-wix:before{content:"\f5cf"}.fa-behance-square:before,.fa-square-behance:before{content:"\f1b5"}.fa-supple:before{content:"\f3f9"}.fa-rebel:before{content:"\f1d0"}.fa-css3:before{content:"\f13c"}.fa-staylinked:before{content:"\f3f5"}.fa-kaggle:before{content:"\f5fa"}.fa-space-awesome:before{content:"\e5ac"}.fa-deviantart:before{content:"\f1bd"}.fa-cpanel:before{content:"\f388"}.fa-goodreads-g:before{content:"\f3a9"}.fa-git-square:before,.fa-square-git:before{content:"\f1d2"}.fa-square-tumblr:before,.fa-tumblr-square:before{content:"\f174"}.fa-trello:before{content:"\f181"}.fa-creative-commons-nc-jp:before{content:"\f4ea"}.fa-get-pocket:before{content:"\f265"}.fa-perbyte:before{content:"\e083"}.fa-grunt:before{content:"\f3ad"}.fa-weebly:before{content:"\f5cc"}.fa-connectdevelop:before{content:"\f20e"}.fa-leanpub:before{content:"\f212"}.fa-black-tie:before{content:"\f27e"}.fa-themeco:before{content:"\f5c6"}.fa-python:before{content:"\f3e2"}.fa-android:before{content:"\f17b"}.fa-bots:before{content:"\e340"}.fa-free-code-camp:before{content:"\f2c5"}.fa-hornbill:before{content:"\f592"}.fa-js:before{content:"\f3b8"}.fa-ideal:before{content:"\e013"}.fa-git:before{content:"\f1d3"}.fa-dev:before{content:"\f6cc"}.fa-sketch:before{content:"\f7c6"}.fa-yandex-international:before{content:"\f414"}.fa-cc-amex:before{content:"\f1f3"}.fa-uber:before{content:"\f402"}.fa-github:before{content:"\f09b"}.fa-php:before{content:"\f457"}.fa-alipay:before{content:"\f642"}.fa-youtube:before{content:"\f167"}.fa-skyatlas:before{content:"\f216"}.fa-firefox-browser:before{content:"\e007"}.fa-replyd:before{content:"\f3e6"}.fa-suse:before{content:"\f7d6"}.fa-jenkins:before{content:"\f3b6"}.fa-twitter:before{content:"\f099"}.fa-rockrms:before{content:"\f3e9"}.fa-pinterest:before{content:"\f0d2"}.fa-buffer:before{content:"\f837"}.fa-npm:before{content:"\f3d4"}.fa-yammer:before{content:"\f840"}.fa-btc:before{content:"\f15a"}.fa-dribbble:before{content:"\f17d"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-internet-explorer:before{content:"\f26b"}.fa-stubber:before{content:"\e5c7"}.fa-telegram-plane:before,.fa-telegram:before{content:"\f2c6"}.fa-old-republic:before{content:"\f510"}.fa-odysee:before{content:"\e5c6"}.fa-square-whatsapp:before,.fa-whatsapp-square:before{content:"\f40c"}.fa-node-js:before{content:"\f3d3"}.fa-edge-legacy:before{content:"\e078"}.fa-slack-hash:before,.fa-slack:before{content:"\f198"}.fa-medrt:before{content:"\f3c8"}.fa-usb:before{content:"\f287"}.fa-tumblr:before{content:"\f173"}.fa-vaadin:before{content:"\f408"}.fa-quora:before{content:"\f2c4"}.fa-square-x-twitter:before{content:"\e61a"}.fa-reacteurope:before{content:"\f75d"}.fa-medium-m:before,.fa-medium:before{content:"\f23a"}.fa-amilia:before{content:"\f36d"}.fa-mixcloud:before{content:"\f289"}.fa-flipboard:before{content:"\f44d"}.fa-viacoin:before{content:"\f237"}.fa-critical-role:before{content:"\f6c9"}.fa-sitrox:before{content:"\e44a"}.fa-discourse:before{content:"\f393"}.fa-joomla:before{content:"\f1aa"}.fa-mastodon:before{content:"\f4f6"}.fa-airbnb:before{content:"\f834"}.fa-wolf-pack-battalion:before{content:"\f514"}.fa-buy-n-large:before{content:"\f8a6"}.fa-gulp:before{content:"\f3ae"}.fa-creative-commons-sampling-plus:before{content:"\f4f1"}.fa-strava:before{content:"\f428"}.fa-ember:before{content:"\f423"}.fa-canadian-maple-leaf:before{content:"\f785"}.fa-teamspeak:before{content:"\f4f9"}.fa-pushed:before{content:"\f3e1"}.fa-wordpress-simple:before{content:"\f411"}.fa-nutritionix:before{content:"\f3d6"}.fa-wodu:before{content:"\e088"}.fa-google-pay:before{content:"\e079"}.fa-intercom:before{content:"\f7af"}.fa-zhihu:before{content:"\f63f"}.fa-korvue:before{content:"\f42f"}.fa-pix:before{content:"\e43a"}.fa-steam-symbol:before{content:"\f3f6"}:host,:root{--fa-font-regular:normal 400 1em/1 "Font Awesome 6 Free"}@font-face{font-family:"Font Awesome 6 Free";font-style:normal;font-weight:400;font-display:block;src: url("../webfonts/fa-regular-400.woff2") format("woff2"), url("../webfonts/fa-regular-400.ttf") format("truetype"); }.fa-regular,.far{font-weight:400}:host,:root{--fa-style-family-classic:"Font Awesome 6 Free";--fa-font-solid:normal 900 1em/1 "Font Awesome 6 Free"}@font-face{font-family:"Font Awesome 6 Free";font-style:normal;font-weight:900;font-display:block;src: url("../webfonts/fa-solid-900.woff2") format("woff2"), url("../webfonts/fa-solid-900.ttf") format("truetype"); }.fa-solid,.fas{font-weight:900}@font-face{font-family:"Font Awesome 5 Brands";font-display:block;font-weight:400;src: url("../webfonts/fa-brands-400.woff2") format("woff2"), url("../webfonts/fa-brands-400.ttf") format("truetype"); }@font-face{font-family:"Font Awesome 5 Free";font-display:block;font-weight:900;src: url("../webfonts/fa-solid-900.woff2") format("woff2"), url("../webfonts/fa-solid-900.ttf") format("truetype"); }@font-face{font-family:"Font Awesome 5 Free";font-display:block;font-weight:400;src: url("../webfonts/fa-regular-400.woff2") format("woff2"), url("../webfonts/fa-regular-400.ttf") format("truetype"); }@font-face{font-family:"FontAwesome";font-display:block;src: url("../webfonts/fa-solid-900.woff2") format("woff2"), url("../webfonts/fa-solid-900.ttf") format("truetype"); }@font-face{font-family:"FontAwesome";font-display:block;src: url("../webfonts/fa-brands-400.woff2") format("woff2"), url("../webfonts/fa-brands-400.ttf") format("truetype"); }@font-face{font-family:"FontAwesome";font-display:block;src: url("../webfonts/fa-regular-400.woff2") format("woff2"), url("../webfonts/fa-regular-400.ttf") format("truetype"); }@font-face{font-family:"FontAwesome";font-display:block;src: url("../webfonts/fa-v4compatibility.woff2") format("woff2"), url("../webfonts/fa-v4compatibility.ttf") format("truetype"); } \ No newline at end of file diff --git a/deps/font-awesome-6.4.2/css/v4-shims.css b/deps/font-awesome-6.4.2/css/v4-shims.css new file mode 100644 index 00000000..a85953d1 --- /dev/null +++ b/deps/font-awesome-6.4.2/css/v4-shims.css @@ -0,0 +1,2194 @@ +/*! + * Font Awesome Free 6.4.2 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + * Copyright 2023 Fonticons, Inc. + */ +.fa.fa-glass:before { + content: "\f000"; } + +.fa.fa-envelope-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-envelope-o:before { + content: "\f0e0"; } + +.fa.fa-star-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-star-o:before { + content: "\f005"; } + +.fa.fa-remove:before { + content: "\f00d"; } + +.fa.fa-close:before { + content: "\f00d"; } + +.fa.fa-gear:before { + content: "\f013"; } + +.fa.fa-trash-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-trash-o:before { + content: "\f2ed"; } + +.fa.fa-home:before { + content: "\f015"; } + +.fa.fa-file-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-file-o:before { + content: "\f15b"; } + +.fa.fa-clock-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-clock-o:before { + content: "\f017"; } + +.fa.fa-arrow-circle-o-down { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-arrow-circle-o-down:before { + content: "\f358"; } + +.fa.fa-arrow-circle-o-up { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-arrow-circle-o-up:before { + content: "\f35b"; } + +.fa.fa-play-circle-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-play-circle-o:before { + content: "\f144"; } + +.fa.fa-repeat:before { + content: "\f01e"; } + +.fa.fa-rotate-right:before { + content: "\f01e"; } + +.fa.fa-refresh:before { + content: "\f021"; } + +.fa.fa-list-alt { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-list-alt:before { + content: "\f022"; } + +.fa.fa-dedent:before { + content: "\f03b"; } + +.fa.fa-video-camera:before { + content: "\f03d"; } + +.fa.fa-picture-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-picture-o:before { + content: "\f03e"; } + +.fa.fa-photo { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-photo:before { + content: "\f03e"; } + +.fa.fa-image { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-image:before { + content: "\f03e"; } + +.fa.fa-map-marker:before { + content: "\f3c5"; } + +.fa.fa-pencil-square-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-pencil-square-o:before { + content: "\f044"; } + +.fa.fa-edit { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-edit:before { + content: "\f044"; } + +.fa.fa-share-square-o:before { + content: "\f14d"; } + +.fa.fa-check-square-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-check-square-o:before { + content: "\f14a"; } + +.fa.fa-arrows:before { + content: "\f0b2"; } + +.fa.fa-times-circle-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-times-circle-o:before { + content: "\f057"; } + +.fa.fa-check-circle-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-check-circle-o:before { + content: "\f058"; } + +.fa.fa-mail-forward:before { + content: "\f064"; } + +.fa.fa-expand:before { + content: "\f424"; } + +.fa.fa-compress:before { + content: "\f422"; } + +.fa.fa-eye { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-eye-slash { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-warning:before { + content: "\f071"; } + +.fa.fa-calendar:before { + content: "\f073"; } + +.fa.fa-arrows-v:before { + content: "\f338"; } + +.fa.fa-arrows-h:before { + content: "\f337"; } + +.fa.fa-bar-chart:before { + content: "\e0e3"; } + +.fa.fa-bar-chart-o:before { + content: "\e0e3"; } + +.fa.fa-twitter-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-twitter-square:before { + content: "\f081"; } + +.fa.fa-facebook-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-facebook-square:before { + content: "\f082"; } + +.fa.fa-gears:before { + content: "\f085"; } + +.fa.fa-thumbs-o-up { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-thumbs-o-up:before { + content: "\f164"; } + +.fa.fa-thumbs-o-down { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-thumbs-o-down:before { + content: "\f165"; } + +.fa.fa-heart-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-heart-o:before { + content: "\f004"; } + +.fa.fa-sign-out:before { + content: "\f2f5"; } + +.fa.fa-linkedin-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-linkedin-square:before { + content: "\f08c"; } + +.fa.fa-thumb-tack:before { + content: "\f08d"; } + +.fa.fa-external-link:before { + content: "\f35d"; } + +.fa.fa-sign-in:before { + content: "\f2f6"; } + +.fa.fa-github-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-github-square:before { + content: "\f092"; } + +.fa.fa-lemon-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-lemon-o:before { + content: "\f094"; } + +.fa.fa-square-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-square-o:before { + content: "\f0c8"; } + +.fa.fa-bookmark-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-bookmark-o:before { + content: "\f02e"; } + +.fa.fa-twitter { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-facebook { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-facebook:before { + content: "\f39e"; } + +.fa.fa-facebook-f { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-facebook-f:before { + content: "\f39e"; } + +.fa.fa-github { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-credit-card { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-feed:before { + content: "\f09e"; } + +.fa.fa-hdd-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-hdd-o:before { + content: "\f0a0"; } + +.fa.fa-hand-o-right { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-hand-o-right:before { + content: "\f0a4"; } + +.fa.fa-hand-o-left { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-hand-o-left:before { + content: "\f0a5"; } + +.fa.fa-hand-o-up { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-hand-o-up:before { + content: "\f0a6"; } + +.fa.fa-hand-o-down { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-hand-o-down:before { + content: "\f0a7"; } + +.fa.fa-globe:before { + content: "\f57d"; } + +.fa.fa-tasks:before { + content: "\f828"; } + +.fa.fa-arrows-alt:before { + content: "\f31e"; } + +.fa.fa-group:before { + content: "\f0c0"; } + +.fa.fa-chain:before { + content: "\f0c1"; } + +.fa.fa-cut:before { + content: "\f0c4"; } + +.fa.fa-files-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-files-o:before { + content: "\f0c5"; } + +.fa.fa-floppy-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-floppy-o:before { + content: "\f0c7"; } + +.fa.fa-save { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-save:before { + content: "\f0c7"; } + +.fa.fa-navicon:before { + content: "\f0c9"; } + +.fa.fa-reorder:before { + content: "\f0c9"; } + +.fa.fa-magic:before { + content: "\e2ca"; } + +.fa.fa-pinterest { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-pinterest-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-pinterest-square:before { + content: "\f0d3"; } + +.fa.fa-google-plus-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-google-plus-square:before { + content: "\f0d4"; } + +.fa.fa-google-plus { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-google-plus:before { + content: "\f0d5"; } + +.fa.fa-money:before { + content: "\f3d1"; } + +.fa.fa-unsorted:before { + content: "\f0dc"; } + +.fa.fa-sort-desc:before { + content: "\f0dd"; } + +.fa.fa-sort-asc:before { + content: "\f0de"; } + +.fa.fa-linkedin { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-linkedin:before { + content: "\f0e1"; } + +.fa.fa-rotate-left:before { + content: "\f0e2"; } + +.fa.fa-legal:before { + content: "\f0e3"; } + +.fa.fa-tachometer:before { + content: "\f625"; } + +.fa.fa-dashboard:before { + content: "\f625"; } + +.fa.fa-comment-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-comment-o:before { + content: "\f075"; } + +.fa.fa-comments-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-comments-o:before { + content: "\f086"; } + +.fa.fa-flash:before { + content: "\f0e7"; } + +.fa.fa-clipboard:before { + content: "\f0ea"; } + +.fa.fa-lightbulb-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-lightbulb-o:before { + content: "\f0eb"; } + +.fa.fa-exchange:before { + content: "\f362"; } + +.fa.fa-cloud-download:before { + content: "\f0ed"; } + +.fa.fa-cloud-upload:before { + content: "\f0ee"; } + +.fa.fa-bell-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-bell-o:before { + content: "\f0f3"; } + +.fa.fa-cutlery:before { + content: "\f2e7"; } + +.fa.fa-file-text-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-file-text-o:before { + content: "\f15c"; } + +.fa.fa-building-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-building-o:before { + content: "\f1ad"; } + +.fa.fa-hospital-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-hospital-o:before { + content: "\f0f8"; } + +.fa.fa-tablet:before { + content: "\f3fa"; } + +.fa.fa-mobile:before { + content: "\f3cd"; } + +.fa.fa-mobile-phone:before { + content: "\f3cd"; } + +.fa.fa-circle-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-circle-o:before { + content: "\f111"; } + +.fa.fa-mail-reply:before { + content: "\f3e5"; } + +.fa.fa-github-alt { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-folder-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-folder-o:before { + content: "\f07b"; } + +.fa.fa-folder-open-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-folder-open-o:before { + content: "\f07c"; } + +.fa.fa-smile-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-smile-o:before { + content: "\f118"; } + +.fa.fa-frown-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-frown-o:before { + content: "\f119"; } + +.fa.fa-meh-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-meh-o:before { + content: "\f11a"; } + +.fa.fa-keyboard-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-keyboard-o:before { + content: "\f11c"; } + +.fa.fa-flag-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-flag-o:before { + content: "\f024"; } + +.fa.fa-mail-reply-all:before { + content: "\f122"; } + +.fa.fa-star-half-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-star-half-o:before { + content: "\f5c0"; } + +.fa.fa-star-half-empty { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-star-half-empty:before { + content: "\f5c0"; } + +.fa.fa-star-half-full { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-star-half-full:before { + content: "\f5c0"; } + +.fa.fa-code-fork:before { + content: "\f126"; } + +.fa.fa-chain-broken:before { + content: "\f127"; } + +.fa.fa-unlink:before { + content: "\f127"; } + +.fa.fa-calendar-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-calendar-o:before { + content: "\f133"; } + +.fa.fa-maxcdn { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-html5 { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-css3 { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-unlock-alt:before { + content: "\f09c"; } + +.fa.fa-minus-square-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-minus-square-o:before { + content: "\f146"; } + +.fa.fa-level-up:before { + content: "\f3bf"; } + +.fa.fa-level-down:before { + content: "\f3be"; } + +.fa.fa-pencil-square:before { + content: "\f14b"; } + +.fa.fa-external-link-square:before { + content: "\f360"; } + +.fa.fa-compass { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-caret-square-o-down { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-caret-square-o-down:before { + content: "\f150"; } + +.fa.fa-toggle-down { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-toggle-down:before { + content: "\f150"; } + +.fa.fa-caret-square-o-up { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-caret-square-o-up:before { + content: "\f151"; } + +.fa.fa-toggle-up { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-toggle-up:before { + content: "\f151"; } + +.fa.fa-caret-square-o-right { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-caret-square-o-right:before { + content: "\f152"; } + +.fa.fa-toggle-right { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-toggle-right:before { + content: "\f152"; } + +.fa.fa-eur:before { + content: "\f153"; } + +.fa.fa-euro:before { + content: "\f153"; } + +.fa.fa-gbp:before { + content: "\f154"; } + +.fa.fa-usd:before { + content: "\24"; } + +.fa.fa-dollar:before { + content: "\24"; } + +.fa.fa-inr:before { + content: "\e1bc"; } + +.fa.fa-rupee:before { + content: "\e1bc"; } + +.fa.fa-jpy:before { + content: "\f157"; } + +.fa.fa-cny:before { + content: "\f157"; } + +.fa.fa-rmb:before { + content: "\f157"; } + +.fa.fa-yen:before { + content: "\f157"; } + +.fa.fa-rub:before { + content: "\f158"; } + +.fa.fa-ruble:before { + content: "\f158"; } + +.fa.fa-rouble:before { + content: "\f158"; } + +.fa.fa-krw:before { + content: "\f159"; } + +.fa.fa-won:before { + content: "\f159"; } + +.fa.fa-btc { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-bitcoin { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-bitcoin:before { + content: "\f15a"; } + +.fa.fa-file-text:before { + content: "\f15c"; } + +.fa.fa-sort-alpha-asc:before { + content: "\f15d"; } + +.fa.fa-sort-alpha-desc:before { + content: "\f881"; } + +.fa.fa-sort-amount-asc:before { + content: "\f884"; } + +.fa.fa-sort-amount-desc:before { + content: "\f160"; } + +.fa.fa-sort-numeric-asc:before { + content: "\f162"; } + +.fa.fa-sort-numeric-desc:before { + content: "\f886"; } + +.fa.fa-youtube-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-youtube-square:before { + content: "\f431"; } + +.fa.fa-youtube { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-xing { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-xing-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-xing-square:before { + content: "\f169"; } + +.fa.fa-youtube-play { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-youtube-play:before { + content: "\f167"; } + +.fa.fa-dropbox { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-stack-overflow { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-instagram { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-flickr { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-adn { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-bitbucket { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-bitbucket-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-bitbucket-square:before { + content: "\f171"; } + +.fa.fa-tumblr { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-tumblr-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-tumblr-square:before { + content: "\f174"; } + +.fa.fa-long-arrow-down:before { + content: "\f309"; } + +.fa.fa-long-arrow-up:before { + content: "\f30c"; } + +.fa.fa-long-arrow-left:before { + content: "\f30a"; } + +.fa.fa-long-arrow-right:before { + content: "\f30b"; } + +.fa.fa-apple { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-windows { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-android { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-linux { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-dribbble { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-skype { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-foursquare { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-trello { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-gratipay { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-gittip { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-gittip:before { + content: "\f184"; } + +.fa.fa-sun-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-sun-o:before { + content: "\f185"; } + +.fa.fa-moon-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-moon-o:before { + content: "\f186"; } + +.fa.fa-vk { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-weibo { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-renren { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-pagelines { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-stack-exchange { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-arrow-circle-o-right { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-arrow-circle-o-right:before { + content: "\f35a"; } + +.fa.fa-arrow-circle-o-left { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-arrow-circle-o-left:before { + content: "\f359"; } + +.fa.fa-caret-square-o-left { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-caret-square-o-left:before { + content: "\f191"; } + +.fa.fa-toggle-left { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-toggle-left:before { + content: "\f191"; } + +.fa.fa-dot-circle-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-dot-circle-o:before { + content: "\f192"; } + +.fa.fa-vimeo-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-vimeo-square:before { + content: "\f194"; } + +.fa.fa-try:before { + content: "\e2bb"; } + +.fa.fa-turkish-lira:before { + content: "\e2bb"; } + +.fa.fa-plus-square-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-plus-square-o:before { + content: "\f0fe"; } + +.fa.fa-slack { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-wordpress { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-openid { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-institution:before { + content: "\f19c"; } + +.fa.fa-bank:before { + content: "\f19c"; } + +.fa.fa-mortar-board:before { + content: "\f19d"; } + +.fa.fa-yahoo { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-google { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-reddit { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-reddit-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-reddit-square:before { + content: "\f1a2"; } + +.fa.fa-stumbleupon-circle { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-stumbleupon { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-delicious { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-digg { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-pied-piper-pp { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-pied-piper-alt { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-drupal { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-joomla { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-behance { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-behance-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-behance-square:before { + content: "\f1b5"; } + +.fa.fa-steam { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-steam-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-steam-square:before { + content: "\f1b7"; } + +.fa.fa-automobile:before { + content: "\f1b9"; } + +.fa.fa-cab:before { + content: "\f1ba"; } + +.fa.fa-spotify { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-deviantart { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-soundcloud { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-file-pdf-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-file-pdf-o:before { + content: "\f1c1"; } + +.fa.fa-file-word-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-file-word-o:before { + content: "\f1c2"; } + +.fa.fa-file-excel-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-file-excel-o:before { + content: "\f1c3"; } + +.fa.fa-file-powerpoint-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-file-powerpoint-o:before { + content: "\f1c4"; } + +.fa.fa-file-image-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-file-image-o:before { + content: "\f1c5"; } + +.fa.fa-file-photo-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-file-photo-o:before { + content: "\f1c5"; } + +.fa.fa-file-picture-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-file-picture-o:before { + content: "\f1c5"; } + +.fa.fa-file-archive-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-file-archive-o:before { + content: "\f1c6"; } + +.fa.fa-file-zip-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-file-zip-o:before { + content: "\f1c6"; } + +.fa.fa-file-audio-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-file-audio-o:before { + content: "\f1c7"; } + +.fa.fa-file-sound-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-file-sound-o:before { + content: "\f1c7"; } + +.fa.fa-file-video-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-file-video-o:before { + content: "\f1c8"; } + +.fa.fa-file-movie-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-file-movie-o:before { + content: "\f1c8"; } + +.fa.fa-file-code-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-file-code-o:before { + content: "\f1c9"; } + +.fa.fa-vine { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-codepen { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-jsfiddle { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-life-bouy:before { + content: "\f1cd"; } + +.fa.fa-life-buoy:before { + content: "\f1cd"; } + +.fa.fa-life-saver:before { + content: "\f1cd"; } + +.fa.fa-support:before { + content: "\f1cd"; } + +.fa.fa-circle-o-notch:before { + content: "\f1ce"; } + +.fa.fa-rebel { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-ra { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-ra:before { + content: "\f1d0"; } + +.fa.fa-resistance { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-resistance:before { + content: "\f1d0"; } + +.fa.fa-empire { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-ge { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-ge:before { + content: "\f1d1"; } + +.fa.fa-git-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-git-square:before { + content: "\f1d2"; } + +.fa.fa-git { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-hacker-news { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-y-combinator-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-y-combinator-square:before { + content: "\f1d4"; } + +.fa.fa-yc-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-yc-square:before { + content: "\f1d4"; } + +.fa.fa-tencent-weibo { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-qq { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-weixin { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-wechat { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-wechat:before { + content: "\f1d7"; } + +.fa.fa-send:before { + content: "\f1d8"; } + +.fa.fa-paper-plane-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-paper-plane-o:before { + content: "\f1d8"; } + +.fa.fa-send-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-send-o:before { + content: "\f1d8"; } + +.fa.fa-circle-thin { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-circle-thin:before { + content: "\f111"; } + +.fa.fa-header:before { + content: "\f1dc"; } + +.fa.fa-futbol-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-futbol-o:before { + content: "\f1e3"; } + +.fa.fa-soccer-ball-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-soccer-ball-o:before { + content: "\f1e3"; } + +.fa.fa-slideshare { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-twitch { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-yelp { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-newspaper-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-newspaper-o:before { + content: "\f1ea"; } + +.fa.fa-paypal { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-google-wallet { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-cc-visa { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-cc-mastercard { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-cc-discover { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-cc-amex { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-cc-paypal { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-cc-stripe { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-bell-slash-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-bell-slash-o:before { + content: "\f1f6"; } + +.fa.fa-trash:before { + content: "\f2ed"; } + +.fa.fa-copyright { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-eyedropper:before { + content: "\f1fb"; } + +.fa.fa-area-chart:before { + content: "\f1fe"; } + +.fa.fa-pie-chart:before { + content: "\f200"; } + +.fa.fa-line-chart:before { + content: "\f201"; } + +.fa.fa-lastfm { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-lastfm-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-lastfm-square:before { + content: "\f203"; } + +.fa.fa-ioxhost { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-angellist { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-cc { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-cc:before { + content: "\f20a"; } + +.fa.fa-ils:before { + content: "\f20b"; } + +.fa.fa-shekel:before { + content: "\f20b"; } + +.fa.fa-sheqel:before { + content: "\f20b"; } + +.fa.fa-buysellads { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-connectdevelop { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-dashcube { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-forumbee { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-leanpub { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-sellsy { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-shirtsinbulk { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-simplybuilt { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-skyatlas { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-diamond { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-diamond:before { + content: "\f3a5"; } + +.fa.fa-transgender:before { + content: "\f224"; } + +.fa.fa-intersex:before { + content: "\f224"; } + +.fa.fa-transgender-alt:before { + content: "\f225"; } + +.fa.fa-facebook-official { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-facebook-official:before { + content: "\f09a"; } + +.fa.fa-pinterest-p { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-whatsapp { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-hotel:before { + content: "\f236"; } + +.fa.fa-viacoin { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-medium { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-y-combinator { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-yc { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-yc:before { + content: "\f23b"; } + +.fa.fa-optin-monster { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-opencart { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-expeditedssl { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-battery-4:before { + content: "\f240"; } + +.fa.fa-battery:before { + content: "\f240"; } + +.fa.fa-battery-3:before { + content: "\f241"; } + +.fa.fa-battery-2:before { + content: "\f242"; } + +.fa.fa-battery-1:before { + content: "\f243"; } + +.fa.fa-battery-0:before { + content: "\f244"; } + +.fa.fa-object-group { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-object-ungroup { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-sticky-note-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-sticky-note-o:before { + content: "\f249"; } + +.fa.fa-cc-jcb { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-cc-diners-club { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-clone { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-hourglass-o:before { + content: "\f254"; } + +.fa.fa-hourglass-1:before { + content: "\f251"; } + +.fa.fa-hourglass-2:before { + content: "\f252"; } + +.fa.fa-hourglass-3:before { + content: "\f253"; } + +.fa.fa-hand-rock-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-hand-rock-o:before { + content: "\f255"; } + +.fa.fa-hand-grab-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-hand-grab-o:before { + content: "\f255"; } + +.fa.fa-hand-paper-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-hand-paper-o:before { + content: "\f256"; } + +.fa.fa-hand-stop-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-hand-stop-o:before { + content: "\f256"; } + +.fa.fa-hand-scissors-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-hand-scissors-o:before { + content: "\f257"; } + +.fa.fa-hand-lizard-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-hand-lizard-o:before { + content: "\f258"; } + +.fa.fa-hand-spock-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-hand-spock-o:before { + content: "\f259"; } + +.fa.fa-hand-pointer-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-hand-pointer-o:before { + content: "\f25a"; } + +.fa.fa-hand-peace-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-hand-peace-o:before { + content: "\f25b"; } + +.fa.fa-registered { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-creative-commons { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-gg { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-gg-circle { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-odnoklassniki { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-odnoklassniki-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-odnoklassniki-square:before { + content: "\f264"; } + +.fa.fa-get-pocket { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-wikipedia-w { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-safari { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-chrome { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-firefox { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-opera { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-internet-explorer { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-television:before { + content: "\f26c"; } + +.fa.fa-contao { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-500px { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-amazon { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-calendar-plus-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-calendar-plus-o:before { + content: "\f271"; } + +.fa.fa-calendar-minus-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-calendar-minus-o:before { + content: "\f272"; } + +.fa.fa-calendar-times-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-calendar-times-o:before { + content: "\f273"; } + +.fa.fa-calendar-check-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-calendar-check-o:before { + content: "\f274"; } + +.fa.fa-map-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-map-o:before { + content: "\f279"; } + +.fa.fa-commenting:before { + content: "\f4ad"; } + +.fa.fa-commenting-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-commenting-o:before { + content: "\f4ad"; } + +.fa.fa-houzz { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-vimeo { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-vimeo:before { + content: "\f27d"; } + +.fa.fa-black-tie { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-fonticons { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-reddit-alien { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-edge { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-credit-card-alt:before { + content: "\f09d"; } + +.fa.fa-codiepie { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-modx { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-fort-awesome { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-usb { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-product-hunt { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-mixcloud { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-scribd { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-pause-circle-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-pause-circle-o:before { + content: "\f28b"; } + +.fa.fa-stop-circle-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-stop-circle-o:before { + content: "\f28d"; } + +.fa.fa-bluetooth { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-bluetooth-b { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-gitlab { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-wpbeginner { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-wpforms { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-envira { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-wheelchair-alt { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-wheelchair-alt:before { + content: "\f368"; } + +.fa.fa-question-circle-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-question-circle-o:before { + content: "\f059"; } + +.fa.fa-volume-control-phone:before { + content: "\f2a0"; } + +.fa.fa-asl-interpreting:before { + content: "\f2a3"; } + +.fa.fa-deafness:before { + content: "\f2a4"; } + +.fa.fa-hard-of-hearing:before { + content: "\f2a4"; } + +.fa.fa-glide { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-glide-g { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-signing:before { + content: "\f2a7"; } + +.fa.fa-viadeo { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-viadeo-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-viadeo-square:before { + content: "\f2aa"; } + +.fa.fa-snapchat { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-snapchat-ghost { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-snapchat-ghost:before { + content: "\f2ab"; } + +.fa.fa-snapchat-square { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-snapchat-square:before { + content: "\f2ad"; } + +.fa.fa-pied-piper { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-first-order { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-yoast { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-themeisle { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-google-plus-official { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-google-plus-official:before { + content: "\f2b3"; } + +.fa.fa-google-plus-circle { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-google-plus-circle:before { + content: "\f2b3"; } + +.fa.fa-font-awesome { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-fa { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-fa:before { + content: "\f2b4"; } + +.fa.fa-handshake-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-handshake-o:before { + content: "\f2b5"; } + +.fa.fa-envelope-open-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-envelope-open-o:before { + content: "\f2b6"; } + +.fa.fa-linode { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-address-book-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-address-book-o:before { + content: "\f2b9"; } + +.fa.fa-vcard:before { + content: "\f2bb"; } + +.fa.fa-address-card-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-address-card-o:before { + content: "\f2bb"; } + +.fa.fa-vcard-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-vcard-o:before { + content: "\f2bb"; } + +.fa.fa-user-circle-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-user-circle-o:before { + content: "\f2bd"; } + +.fa.fa-user-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-user-o:before { + content: "\f007"; } + +.fa.fa-id-badge { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-drivers-license:before { + content: "\f2c2"; } + +.fa.fa-id-card-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-id-card-o:before { + content: "\f2c2"; } + +.fa.fa-drivers-license-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-drivers-license-o:before { + content: "\f2c2"; } + +.fa.fa-quora { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-free-code-camp { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-telegram { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-thermometer-4:before { + content: "\f2c7"; } + +.fa.fa-thermometer:before { + content: "\f2c7"; } + +.fa.fa-thermometer-3:before { + content: "\f2c8"; } + +.fa.fa-thermometer-2:before { + content: "\f2c9"; } + +.fa.fa-thermometer-1:before { + content: "\f2ca"; } + +.fa.fa-thermometer-0:before { + content: "\f2cb"; } + +.fa.fa-bathtub:before { + content: "\f2cd"; } + +.fa.fa-s15:before { + content: "\f2cd"; } + +.fa.fa-window-maximize { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-window-restore { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-times-rectangle:before { + content: "\f410"; } + +.fa.fa-window-close-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-window-close-o:before { + content: "\f410"; } + +.fa.fa-times-rectangle-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-times-rectangle-o:before { + content: "\f410"; } + +.fa.fa-bandcamp { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-grav { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-etsy { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-imdb { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-ravelry { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-eercast { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-eercast:before { + content: "\f2da"; } + +.fa.fa-snowflake-o { + font-family: 'Font Awesome 6 Free'; + font-weight: 400; } + +.fa.fa-snowflake-o:before { + content: "\f2dc"; } + +.fa.fa-superpowers { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-wpexplorer { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } + +.fa.fa-meetup { + font-family: 'Font Awesome 6 Brands'; + font-weight: 400; } diff --git a/deps/font-awesome-6.4.2/css/v4-shims.min.css b/deps/font-awesome-6.4.2/css/v4-shims.min.css new file mode 100644 index 00000000..64e4e8d8 --- /dev/null +++ b/deps/font-awesome-6.4.2/css/v4-shims.min.css @@ -0,0 +1,6 @@ +/*! + * Font Awesome Free 6.4.2 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + * Copyright 2023 Fonticons, Inc. + */ +.fa.fa-glass:before{content:"\f000"}.fa.fa-envelope-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-envelope-o:before{content:"\f0e0"}.fa.fa-star-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-star-o:before{content:"\f005"}.fa.fa-close:before,.fa.fa-remove:before{content:"\f00d"}.fa.fa-gear:before{content:"\f013"}.fa.fa-trash-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-trash-o:before{content:"\f2ed"}.fa.fa-home:before{content:"\f015"}.fa.fa-file-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-o:before{content:"\f15b"}.fa.fa-clock-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-clock-o:before{content:"\f017"}.fa.fa-arrow-circle-o-down{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-arrow-circle-o-down:before{content:"\f358"}.fa.fa-arrow-circle-o-up{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-arrow-circle-o-up:before{content:"\f35b"}.fa.fa-play-circle-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-play-circle-o:before{content:"\f144"}.fa.fa-repeat:before,.fa.fa-rotate-right:before{content:"\f01e"}.fa.fa-refresh:before{content:"\f021"}.fa.fa-list-alt{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-list-alt:before{content:"\f022"}.fa.fa-dedent:before{content:"\f03b"}.fa.fa-video-camera:before{content:"\f03d"}.fa.fa-picture-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-picture-o:before{content:"\f03e"}.fa.fa-photo{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-photo:before{content:"\f03e"}.fa.fa-image{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-image:before{content:"\f03e"}.fa.fa-map-marker:before{content:"\f3c5"}.fa.fa-pencil-square-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-pencil-square-o:before{content:"\f044"}.fa.fa-edit{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-edit:before{content:"\f044"}.fa.fa-share-square-o:before{content:"\f14d"}.fa.fa-check-square-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-check-square-o:before{content:"\f14a"}.fa.fa-arrows:before{content:"\f0b2"}.fa.fa-times-circle-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-times-circle-o:before{content:"\f057"}.fa.fa-check-circle-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-check-circle-o:before{content:"\f058"}.fa.fa-mail-forward:before{content:"\f064"}.fa.fa-expand:before{content:"\f424"}.fa.fa-compress:before{content:"\f422"}.fa.fa-eye,.fa.fa-eye-slash{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-warning:before{content:"\f071"}.fa.fa-calendar:before{content:"\f073"}.fa.fa-arrows-v:before{content:"\f338"}.fa.fa-arrows-h:before{content:"\f337"}.fa.fa-bar-chart-o:before,.fa.fa-bar-chart:before{content:"\e0e3"}.fa.fa-twitter-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-twitter-square:before{content:"\f081"}.fa.fa-facebook-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-facebook-square:before{content:"\f082"}.fa.fa-gears:before{content:"\f085"}.fa.fa-thumbs-o-up{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-thumbs-o-up:before{content:"\f164"}.fa.fa-thumbs-o-down{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-thumbs-o-down:before{content:"\f165"}.fa.fa-heart-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-heart-o:before{content:"\f004"}.fa.fa-sign-out:before{content:"\f2f5"}.fa.fa-linkedin-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-linkedin-square:before{content:"\f08c"}.fa.fa-thumb-tack:before{content:"\f08d"}.fa.fa-external-link:before{content:"\f35d"}.fa.fa-sign-in:before{content:"\f2f6"}.fa.fa-github-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-github-square:before{content:"\f092"}.fa.fa-lemon-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-lemon-o:before{content:"\f094"}.fa.fa-square-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-square-o:before{content:"\f0c8"}.fa.fa-bookmark-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-bookmark-o:before{content:"\f02e"}.fa.fa-facebook,.fa.fa-twitter{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-facebook:before{content:"\f39e"}.fa.fa-facebook-f{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-facebook-f:before{content:"\f39e"}.fa.fa-github{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-credit-card{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-feed:before{content:"\f09e"}.fa.fa-hdd-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hdd-o:before{content:"\f0a0"}.fa.fa-hand-o-right{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-o-right:before{content:"\f0a4"}.fa.fa-hand-o-left{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-o-left:before{content:"\f0a5"}.fa.fa-hand-o-up{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-o-up:before{content:"\f0a6"}.fa.fa-hand-o-down{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-o-down:before{content:"\f0a7"}.fa.fa-globe:before{content:"\f57d"}.fa.fa-tasks:before{content:"\f828"}.fa.fa-arrows-alt:before{content:"\f31e"}.fa.fa-group:before{content:"\f0c0"}.fa.fa-chain:before{content:"\f0c1"}.fa.fa-cut:before{content:"\f0c4"}.fa.fa-files-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-files-o:before{content:"\f0c5"}.fa.fa-floppy-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-floppy-o:before{content:"\f0c7"}.fa.fa-save{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-save:before{content:"\f0c7"}.fa.fa-navicon:before,.fa.fa-reorder:before{content:"\f0c9"}.fa.fa-magic:before{content:"\e2ca"}.fa.fa-pinterest,.fa.fa-pinterest-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-pinterest-square:before{content:"\f0d3"}.fa.fa-google-plus-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-google-plus-square:before{content:"\f0d4"}.fa.fa-google-plus{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-google-plus:before{content:"\f0d5"}.fa.fa-money:before{content:"\f3d1"}.fa.fa-unsorted:before{content:"\f0dc"}.fa.fa-sort-desc:before{content:"\f0dd"}.fa.fa-sort-asc:before{content:"\f0de"}.fa.fa-linkedin{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-linkedin:before{content:"\f0e1"}.fa.fa-rotate-left:before{content:"\f0e2"}.fa.fa-legal:before{content:"\f0e3"}.fa.fa-dashboard:before,.fa.fa-tachometer:before{content:"\f625"}.fa.fa-comment-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-comment-o:before{content:"\f075"}.fa.fa-comments-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-comments-o:before{content:"\f086"}.fa.fa-flash:before{content:"\f0e7"}.fa.fa-clipboard:before{content:"\f0ea"}.fa.fa-lightbulb-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-lightbulb-o:before{content:"\f0eb"}.fa.fa-exchange:before{content:"\f362"}.fa.fa-cloud-download:before{content:"\f0ed"}.fa.fa-cloud-upload:before{content:"\f0ee"}.fa.fa-bell-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-bell-o:before{content:"\f0f3"}.fa.fa-cutlery:before{content:"\f2e7"}.fa.fa-file-text-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-text-o:before{content:"\f15c"}.fa.fa-building-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-building-o:before{content:"\f1ad"}.fa.fa-hospital-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hospital-o:before{content:"\f0f8"}.fa.fa-tablet:before{content:"\f3fa"}.fa.fa-mobile-phone:before,.fa.fa-mobile:before{content:"\f3cd"}.fa.fa-circle-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-circle-o:before{content:"\f111"}.fa.fa-mail-reply:before{content:"\f3e5"}.fa.fa-github-alt{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-folder-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-folder-o:before{content:"\f07b"}.fa.fa-folder-open-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-folder-open-o:before{content:"\f07c"}.fa.fa-smile-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-smile-o:before{content:"\f118"}.fa.fa-frown-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-frown-o:before{content:"\f119"}.fa.fa-meh-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-meh-o:before{content:"\f11a"}.fa.fa-keyboard-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-keyboard-o:before{content:"\f11c"}.fa.fa-flag-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-flag-o:before{content:"\f024"}.fa.fa-mail-reply-all:before{content:"\f122"}.fa.fa-star-half-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-star-half-o:before{content:"\f5c0"}.fa.fa-star-half-empty{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-star-half-empty:before{content:"\f5c0"}.fa.fa-star-half-full{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-star-half-full:before{content:"\f5c0"}.fa.fa-code-fork:before{content:"\f126"}.fa.fa-chain-broken:before,.fa.fa-unlink:before{content:"\f127"}.fa.fa-calendar-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-calendar-o:before{content:"\f133"}.fa.fa-css3,.fa.fa-html5,.fa.fa-maxcdn{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-unlock-alt:before{content:"\f09c"}.fa.fa-minus-square-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-minus-square-o:before{content:"\f146"}.fa.fa-level-up:before{content:"\f3bf"}.fa.fa-level-down:before{content:"\f3be"}.fa.fa-pencil-square:before{content:"\f14b"}.fa.fa-external-link-square:before{content:"\f360"}.fa.fa-compass{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-caret-square-o-down{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-caret-square-o-down:before{content:"\f150"}.fa.fa-toggle-down{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-toggle-down:before{content:"\f150"}.fa.fa-caret-square-o-up{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-caret-square-o-up:before{content:"\f151"}.fa.fa-toggle-up{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-toggle-up:before{content:"\f151"}.fa.fa-caret-square-o-right{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-caret-square-o-right:before{content:"\f152"}.fa.fa-toggle-right{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-toggle-right:before{content:"\f152"}.fa.fa-eur:before,.fa.fa-euro:before{content:"\f153"}.fa.fa-gbp:before{content:"\f154"}.fa.fa-dollar:before,.fa.fa-usd:before{content:"\24"}.fa.fa-inr:before,.fa.fa-rupee:before{content:"\e1bc"}.fa.fa-cny:before,.fa.fa-jpy:before,.fa.fa-rmb:before,.fa.fa-yen:before{content:"\f157"}.fa.fa-rouble:before,.fa.fa-rub:before,.fa.fa-ruble:before{content:"\f158"}.fa.fa-krw:before,.fa.fa-won:before{content:"\f159"}.fa.fa-bitcoin,.fa.fa-btc{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-bitcoin:before{content:"\f15a"}.fa.fa-file-text:before{content:"\f15c"}.fa.fa-sort-alpha-asc:before{content:"\f15d"}.fa.fa-sort-alpha-desc:before{content:"\f881"}.fa.fa-sort-amount-asc:before{content:"\f884"}.fa.fa-sort-amount-desc:before{content:"\f160"}.fa.fa-sort-numeric-asc:before{content:"\f162"}.fa.fa-sort-numeric-desc:before{content:"\f886"}.fa.fa-youtube-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-youtube-square:before{content:"\f431"}.fa.fa-xing,.fa.fa-xing-square,.fa.fa-youtube{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-xing-square:before{content:"\f169"}.fa.fa-youtube-play{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-youtube-play:before{content:"\f167"}.fa.fa-adn,.fa.fa-bitbucket,.fa.fa-bitbucket-square,.fa.fa-dropbox,.fa.fa-flickr,.fa.fa-instagram,.fa.fa-stack-overflow{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-bitbucket-square:before{content:"\f171"}.fa.fa-tumblr,.fa.fa-tumblr-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-tumblr-square:before{content:"\f174"}.fa.fa-long-arrow-down:before{content:"\f309"}.fa.fa-long-arrow-up:before{content:"\f30c"}.fa.fa-long-arrow-left:before{content:"\f30a"}.fa.fa-long-arrow-right:before{content:"\f30b"}.fa.fa-android,.fa.fa-apple,.fa.fa-dribbble,.fa.fa-foursquare,.fa.fa-gittip,.fa.fa-gratipay,.fa.fa-linux,.fa.fa-skype,.fa.fa-trello,.fa.fa-windows{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-gittip:before{content:"\f184"}.fa.fa-sun-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-sun-o:before{content:"\f185"}.fa.fa-moon-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-moon-o:before{content:"\f186"}.fa.fa-pagelines,.fa.fa-renren,.fa.fa-stack-exchange,.fa.fa-vk,.fa.fa-weibo{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-arrow-circle-o-right{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-arrow-circle-o-right:before{content:"\f35a"}.fa.fa-arrow-circle-o-left{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-arrow-circle-o-left:before{content:"\f359"}.fa.fa-caret-square-o-left{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-caret-square-o-left:before{content:"\f191"}.fa.fa-toggle-left{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-toggle-left:before{content:"\f191"}.fa.fa-dot-circle-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-dot-circle-o:before{content:"\f192"}.fa.fa-vimeo-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-vimeo-square:before{content:"\f194"}.fa.fa-try:before,.fa.fa-turkish-lira:before{content:"\e2bb"}.fa.fa-plus-square-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-plus-square-o:before{content:"\f0fe"}.fa.fa-openid,.fa.fa-slack,.fa.fa-wordpress{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-bank:before,.fa.fa-institution:before{content:"\f19c"}.fa.fa-mortar-board:before{content:"\f19d"}.fa.fa-google,.fa.fa-reddit,.fa.fa-reddit-square,.fa.fa-yahoo{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-reddit-square:before{content:"\f1a2"}.fa.fa-behance,.fa.fa-behance-square,.fa.fa-delicious,.fa.fa-digg,.fa.fa-drupal,.fa.fa-joomla,.fa.fa-pied-piper-alt,.fa.fa-pied-piper-pp,.fa.fa-stumbleupon,.fa.fa-stumbleupon-circle{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-behance-square:before{content:"\f1b5"}.fa.fa-steam,.fa.fa-steam-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-steam-square:before{content:"\f1b7"}.fa.fa-automobile:before{content:"\f1b9"}.fa.fa-cab:before{content:"\f1ba"}.fa.fa-deviantart,.fa.fa-soundcloud,.fa.fa-spotify{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-file-pdf-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-pdf-o:before{content:"\f1c1"}.fa.fa-file-word-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-word-o:before{content:"\f1c2"}.fa.fa-file-excel-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-excel-o:before{content:"\f1c3"}.fa.fa-file-powerpoint-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-powerpoint-o:before{content:"\f1c4"}.fa.fa-file-image-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-image-o:before{content:"\f1c5"}.fa.fa-file-photo-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-photo-o:before{content:"\f1c5"}.fa.fa-file-picture-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-picture-o:before{content:"\f1c5"}.fa.fa-file-archive-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-archive-o:before{content:"\f1c6"}.fa.fa-file-zip-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-zip-o:before{content:"\f1c6"}.fa.fa-file-audio-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-audio-o:before{content:"\f1c7"}.fa.fa-file-sound-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-sound-o:before{content:"\f1c7"}.fa.fa-file-video-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-video-o:before{content:"\f1c8"}.fa.fa-file-movie-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-movie-o:before{content:"\f1c8"}.fa.fa-file-code-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-code-o:before{content:"\f1c9"}.fa.fa-codepen,.fa.fa-jsfiddle,.fa.fa-vine{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-life-bouy:before,.fa.fa-life-buoy:before,.fa.fa-life-saver:before,.fa.fa-support:before{content:"\f1cd"}.fa.fa-circle-o-notch:before{content:"\f1ce"}.fa.fa-ra,.fa.fa-rebel{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-ra:before{content:"\f1d0"}.fa.fa-resistance{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-resistance:before{content:"\f1d0"}.fa.fa-empire,.fa.fa-ge{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-ge:before{content:"\f1d1"}.fa.fa-git-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-git-square:before{content:"\f1d2"}.fa.fa-git,.fa.fa-hacker-news,.fa.fa-y-combinator-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-y-combinator-square:before{content:"\f1d4"}.fa.fa-yc-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-yc-square:before{content:"\f1d4"}.fa.fa-qq,.fa.fa-tencent-weibo,.fa.fa-wechat,.fa.fa-weixin{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-wechat:before{content:"\f1d7"}.fa.fa-send:before{content:"\f1d8"}.fa.fa-paper-plane-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-paper-plane-o:before{content:"\f1d8"}.fa.fa-send-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-send-o:before{content:"\f1d8"}.fa.fa-circle-thin{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-circle-thin:before{content:"\f111"}.fa.fa-header:before{content:"\f1dc"}.fa.fa-futbol-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-futbol-o:before{content:"\f1e3"}.fa.fa-soccer-ball-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-soccer-ball-o:before{content:"\f1e3"}.fa.fa-slideshare,.fa.fa-twitch,.fa.fa-yelp{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-newspaper-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-newspaper-o:before{content:"\f1ea"}.fa.fa-cc-amex,.fa.fa-cc-discover,.fa.fa-cc-mastercard,.fa.fa-cc-paypal,.fa.fa-cc-stripe,.fa.fa-cc-visa,.fa.fa-google-wallet,.fa.fa-paypal{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-bell-slash-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-bell-slash-o:before{content:"\f1f6"}.fa.fa-trash:before{content:"\f2ed"}.fa.fa-copyright{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-eyedropper:before{content:"\f1fb"}.fa.fa-area-chart:before{content:"\f1fe"}.fa.fa-pie-chart:before{content:"\f200"}.fa.fa-line-chart:before{content:"\f201"}.fa.fa-lastfm,.fa.fa-lastfm-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-lastfm-square:before{content:"\f203"}.fa.fa-angellist,.fa.fa-ioxhost{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-cc{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-cc:before{content:"\f20a"}.fa.fa-ils:before,.fa.fa-shekel:before,.fa.fa-sheqel:before{content:"\f20b"}.fa.fa-buysellads,.fa.fa-connectdevelop,.fa.fa-dashcube,.fa.fa-forumbee,.fa.fa-leanpub,.fa.fa-sellsy,.fa.fa-shirtsinbulk,.fa.fa-simplybuilt,.fa.fa-skyatlas{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-diamond{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-diamond:before{content:"\f3a5"}.fa.fa-intersex:before,.fa.fa-transgender:before{content:"\f224"}.fa.fa-transgender-alt:before{content:"\f225"}.fa.fa-facebook-official{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-facebook-official:before{content:"\f09a"}.fa.fa-pinterest-p,.fa.fa-whatsapp{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-hotel:before{content:"\f236"}.fa.fa-medium,.fa.fa-viacoin,.fa.fa-y-combinator,.fa.fa-yc{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-yc:before{content:"\f23b"}.fa.fa-expeditedssl,.fa.fa-opencart,.fa.fa-optin-monster{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-battery-4:before,.fa.fa-battery:before{content:"\f240"}.fa.fa-battery-3:before{content:"\f241"}.fa.fa-battery-2:before{content:"\f242"}.fa.fa-battery-1:before{content:"\f243"}.fa.fa-battery-0:before{content:"\f244"}.fa.fa-object-group,.fa.fa-object-ungroup,.fa.fa-sticky-note-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-sticky-note-o:before{content:"\f249"}.fa.fa-cc-diners-club,.fa.fa-cc-jcb{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-clone{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hourglass-o:before{content:"\f254"}.fa.fa-hourglass-1:before{content:"\f251"}.fa.fa-hourglass-2:before{content:"\f252"}.fa.fa-hourglass-3:before{content:"\f253"}.fa.fa-hand-rock-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-rock-o:before{content:"\f255"}.fa.fa-hand-grab-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-grab-o:before{content:"\f255"}.fa.fa-hand-paper-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-paper-o:before{content:"\f256"}.fa.fa-hand-stop-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-stop-o:before{content:"\f256"}.fa.fa-hand-scissors-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-scissors-o:before{content:"\f257"}.fa.fa-hand-lizard-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-lizard-o:before{content:"\f258"}.fa.fa-hand-spock-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-spock-o:before{content:"\f259"}.fa.fa-hand-pointer-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-pointer-o:before{content:"\f25a"}.fa.fa-hand-peace-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-peace-o:before{content:"\f25b"}.fa.fa-registered{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-creative-commons,.fa.fa-gg,.fa.fa-gg-circle,.fa.fa-odnoklassniki,.fa.fa-odnoklassniki-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-odnoklassniki-square:before{content:"\f264"}.fa.fa-chrome,.fa.fa-firefox,.fa.fa-get-pocket,.fa.fa-internet-explorer,.fa.fa-opera,.fa.fa-safari,.fa.fa-wikipedia-w{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-television:before{content:"\f26c"}.fa.fa-500px,.fa.fa-amazon,.fa.fa-contao{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-calendar-plus-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-calendar-plus-o:before{content:"\f271"}.fa.fa-calendar-minus-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-calendar-minus-o:before{content:"\f272"}.fa.fa-calendar-times-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-calendar-times-o:before{content:"\f273"}.fa.fa-calendar-check-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-calendar-check-o:before{content:"\f274"}.fa.fa-map-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-map-o:before{content:"\f279"}.fa.fa-commenting:before{content:"\f4ad"}.fa.fa-commenting-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-commenting-o:before{content:"\f4ad"}.fa.fa-houzz,.fa.fa-vimeo{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-vimeo:before{content:"\f27d"}.fa.fa-black-tie,.fa.fa-edge,.fa.fa-fonticons,.fa.fa-reddit-alien{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-credit-card-alt:before{content:"\f09d"}.fa.fa-codiepie,.fa.fa-fort-awesome,.fa.fa-mixcloud,.fa.fa-modx,.fa.fa-product-hunt,.fa.fa-scribd,.fa.fa-usb{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-pause-circle-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-pause-circle-o:before{content:"\f28b"}.fa.fa-stop-circle-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-stop-circle-o:before{content:"\f28d"}.fa.fa-bluetooth,.fa.fa-bluetooth-b,.fa.fa-envira,.fa.fa-gitlab,.fa.fa-wheelchair-alt,.fa.fa-wpbeginner,.fa.fa-wpforms{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-wheelchair-alt:before{content:"\f368"}.fa.fa-question-circle-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-question-circle-o:before{content:"\f059"}.fa.fa-volume-control-phone:before{content:"\f2a0"}.fa.fa-asl-interpreting:before{content:"\f2a3"}.fa.fa-deafness:before,.fa.fa-hard-of-hearing:before{content:"\f2a4"}.fa.fa-glide,.fa.fa-glide-g{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-signing:before{content:"\f2a7"}.fa.fa-viadeo,.fa.fa-viadeo-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-viadeo-square:before{content:"\f2aa"}.fa.fa-snapchat,.fa.fa-snapchat-ghost{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-snapchat-ghost:before{content:"\f2ab"}.fa.fa-snapchat-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-snapchat-square:before{content:"\f2ad"}.fa.fa-first-order,.fa.fa-google-plus-official,.fa.fa-pied-piper,.fa.fa-themeisle,.fa.fa-yoast{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-google-plus-official:before{content:"\f2b3"}.fa.fa-google-plus-circle{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-google-plus-circle:before{content:"\f2b3"}.fa.fa-fa,.fa.fa-font-awesome{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-fa:before{content:"\f2b4"}.fa.fa-handshake-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-handshake-o:before{content:"\f2b5"}.fa.fa-envelope-open-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-envelope-open-o:before{content:"\f2b6"}.fa.fa-linode{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-address-book-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-address-book-o:before{content:"\f2b9"}.fa.fa-vcard:before{content:"\f2bb"}.fa.fa-address-card-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-address-card-o:before{content:"\f2bb"}.fa.fa-vcard-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-vcard-o:before{content:"\f2bb"}.fa.fa-user-circle-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-user-circle-o:before{content:"\f2bd"}.fa.fa-user-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-user-o:before{content:"\f007"}.fa.fa-id-badge{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-drivers-license:before{content:"\f2c2"}.fa.fa-id-card-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-id-card-o:before{content:"\f2c2"}.fa.fa-drivers-license-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-drivers-license-o:before{content:"\f2c2"}.fa.fa-free-code-camp,.fa.fa-quora,.fa.fa-telegram{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-thermometer-4:before,.fa.fa-thermometer:before{content:"\f2c7"}.fa.fa-thermometer-3:before{content:"\f2c8"}.fa.fa-thermometer-2:before{content:"\f2c9"}.fa.fa-thermometer-1:before{content:"\f2ca"}.fa.fa-thermometer-0:before{content:"\f2cb"}.fa.fa-bathtub:before,.fa.fa-s15:before{content:"\f2cd"}.fa.fa-window-maximize,.fa.fa-window-restore{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-times-rectangle:before{content:"\f410"}.fa.fa-window-close-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-window-close-o:before{content:"\f410"}.fa.fa-times-rectangle-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-times-rectangle-o:before{content:"\f410"}.fa.fa-bandcamp,.fa.fa-eercast,.fa.fa-etsy,.fa.fa-grav,.fa.fa-imdb,.fa.fa-ravelry{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-eercast:before{content:"\f2da"}.fa.fa-snowflake-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-snowflake-o:before{content:"\f2dc"}.fa.fa-meetup,.fa.fa-superpowers,.fa.fa-wpexplorer{font-family:"Font Awesome 6 Brands";font-weight:400} \ No newline at end of file diff --git a/deps/font-awesome-6.4.2/webfonts/fa-brands-400.ttf b/deps/font-awesome-6.4.2/webfonts/fa-brands-400.ttf new file mode 100644 index 00000000..30f55b74 Binary files /dev/null and b/deps/font-awesome-6.4.2/webfonts/fa-brands-400.ttf differ diff --git a/deps/font-awesome-6.4.2/webfonts/fa-brands-400.woff2 b/deps/font-awesome-6.4.2/webfonts/fa-brands-400.woff2 new file mode 100644 index 00000000..8a480d9b Binary files /dev/null and b/deps/font-awesome-6.4.2/webfonts/fa-brands-400.woff2 differ diff --git a/deps/font-awesome-6.4.2/webfonts/fa-regular-400.ttf b/deps/font-awesome-6.4.2/webfonts/fa-regular-400.ttf new file mode 100644 index 00000000..c79589d8 Binary files /dev/null and b/deps/font-awesome-6.4.2/webfonts/fa-regular-400.ttf differ diff --git a/deps/font-awesome-6.4.2/webfonts/fa-regular-400.woff2 b/deps/font-awesome-6.4.2/webfonts/fa-regular-400.woff2 new file mode 100644 index 00000000..059a94e2 Binary files /dev/null and b/deps/font-awesome-6.4.2/webfonts/fa-regular-400.woff2 differ diff --git a/deps/font-awesome-6.4.2/webfonts/fa-solid-900.ttf b/deps/font-awesome-6.4.2/webfonts/fa-solid-900.ttf new file mode 100644 index 00000000..e479fb29 Binary files /dev/null and b/deps/font-awesome-6.4.2/webfonts/fa-solid-900.ttf differ diff --git a/deps/font-awesome-6.4.2/webfonts/fa-solid-900.woff2 b/deps/font-awesome-6.4.2/webfonts/fa-solid-900.woff2 new file mode 100644 index 00000000..88b0367a Binary files /dev/null and b/deps/font-awesome-6.4.2/webfonts/fa-solid-900.woff2 differ diff --git a/deps/font-awesome-6.4.2/webfonts/fa-v4compatibility.ttf b/deps/font-awesome-6.4.2/webfonts/fa-v4compatibility.ttf new file mode 100644 index 00000000..ba6cb258 Binary files /dev/null and b/deps/font-awesome-6.4.2/webfonts/fa-v4compatibility.ttf differ diff --git a/deps/font-awesome-6.4.2/webfonts/fa-v4compatibility.woff2 b/deps/font-awesome-6.4.2/webfonts/fa-v4compatibility.woff2 new file mode 100644 index 00000000..23b1c47b Binary files /dev/null and b/deps/font-awesome-6.4.2/webfonts/fa-v4compatibility.woff2 differ diff --git a/deps/headroom-0.11.0/headroom.min.js b/deps/headroom-0.11.0/headroom.min.js new file mode 100644 index 00000000..433069fd --- /dev/null +++ b/deps/headroom-0.11.0/headroom.min.js @@ -0,0 +1,7 @@ +/*! + * headroom.js v0.11.0 - Give your page some headroom. Hide your header until you need it + * Copyright (c) 2020 Nick Williams - http://wicky.nillia.ms/headroom.js + * License: MIT + */ + +!function(t,n){"object"==typeof exports&&"undefined"!=typeof module?module.exports=n():"function"==typeof define&&define.amd?define(n):(t=t||self).Headroom=n()}(this,function(){"use strict";function t(){return"undefined"!=typeof window}function d(t){return function(t){return t&&t.document&&function(t){return 9===t.nodeType}(t.document)}(t)?function(t){var n=t.document,o=n.body,s=n.documentElement;return{scrollHeight:function(){return Math.max(o.scrollHeight,s.scrollHeight,o.offsetHeight,s.offsetHeight,o.clientHeight,s.clientHeight)},height:function(){return t.innerHeight||s.clientHeight||o.clientHeight},scrollY:function(){return void 0!==t.pageYOffset?t.pageYOffset:(s||o.parentNode||o).scrollTop}}}(t):function(t){return{scrollHeight:function(){return Math.max(t.scrollHeight,t.offsetHeight,t.clientHeight)},height:function(){return Math.max(t.offsetHeight,t.clientHeight)},scrollY:function(){return t.scrollTop}}}(t)}function n(t,s,e){var n,o=function(){var n=!1;try{var t={get passive(){n=!0}};window.addEventListener("test",t,t),window.removeEventListener("test",t,t)}catch(t){n=!1}return n}(),i=!1,r=d(t),l=r.scrollY(),a={};function c(){var t=Math.round(r.scrollY()),n=r.height(),o=r.scrollHeight();a.scrollY=t,a.lastScrollY=l,a.direction=ls.tolerance[a.direction],e(a),l=t,i=!1}function h(){i||(i=!0,n=requestAnimationFrame(c))}var u=!!o&&{passive:!0,capture:!1};return t.addEventListener("scroll",h,u),c(),{destroy:function(){cancelAnimationFrame(n),t.removeEventListener("scroll",h,u)}}}function o(t,n){n=n||{},Object.assign(this,o.options,n),this.classes=Object.assign({},o.options.classes,n.classes),this.elem=t,this.tolerance=function(t){return t===Object(t)?t:{down:t,up:t}}(this.tolerance),this.initialised=!1,this.frozen=!1}return o.prototype={constructor:o,init:function(){return o.cutsTheMustard&&!this.initialised&&(this.addClass("initial"),this.initialised=!0,setTimeout(function(t){t.scrollTracker=n(t.scroller,{offset:t.offset,tolerance:t.tolerance},t.update.bind(t))},100,this)),this},destroy:function(){this.initialised=!1,Object.keys(this.classes).forEach(this.removeClass,this),this.scrollTracker.destroy()},unpin:function(){!this.hasClass("pinned")&&this.hasClass("unpinned")||(this.addClass("unpinned"),this.removeClass("pinned"),this.onUnpin&&this.onUnpin.call(this))},pin:function(){this.hasClass("unpinned")&&(this.addClass("pinned"),this.removeClass("unpinned"),this.onPin&&this.onPin.call(this))},freeze:function(){this.frozen=!0,this.addClass("frozen")},unfreeze:function(){this.frozen=!1,this.removeClass("frozen")},top:function(){this.hasClass("top")||(this.addClass("top"),this.removeClass("notTop"),this.onTop&&this.onTop.call(this))},notTop:function(){this.hasClass("notTop")||(this.addClass("notTop"),this.removeClass("top"),this.onNotTop&&this.onNotTop.call(this))},bottom:function(){this.hasClass("bottom")||(this.addClass("bottom"),this.removeClass("notBottom"),this.onBottom&&this.onBottom.call(this))},notBottom:function(){this.hasClass("notBottom")||(this.addClass("notBottom"),this.removeClass("bottom"),this.onNotBottom&&this.onNotBottom.call(this))},shouldUnpin:function(t){return"down"===t.direction&&!t.top&&t.toleranceExceeded},shouldPin:function(t){return"up"===t.direction&&t.toleranceExceeded||t.top},addClass:function(t){this.elem.classList.add.apply(this.elem.classList,this.classes[t].split(" "))},removeClass:function(t){this.elem.classList.remove.apply(this.elem.classList,this.classes[t].split(" "))},hasClass:function(t){return this.classes[t].split(" ").every(function(t){return this.classList.contains(t)},this.elem)},update:function(t){t.isOutOfBounds||!0!==this.frozen&&(t.top?this.top():this.notTop(),t.bottom?this.bottom():this.notBottom(),this.shouldUnpin(t)?this.unpin():this.shouldPin(t)&&this.pin())}},o.options={tolerance:{up:0,down:0},offset:0,scroller:t()?window:null,classes:{frozen:"headroom--frozen",pinned:"headroom--pinned",unpinned:"headroom--unpinned",top:"headroom--top",notTop:"headroom--not-top",bottom:"headroom--bottom",notBottom:"headroom--not-bottom",initial:"headroom"}},o.cutsTheMustard=!!(t()&&function(){}.bind&&"classList"in document.documentElement&&Object.assign&&Object.keys&&requestAnimationFrame),o}); \ No newline at end of file diff --git a/deps/headroom-0.11.0/jQuery.headroom.min.js b/deps/headroom-0.11.0/jQuery.headroom.min.js new file mode 100644 index 00000000..17f70c9e --- /dev/null +++ b/deps/headroom-0.11.0/jQuery.headroom.min.js @@ -0,0 +1,7 @@ +/*! + * headroom.js v0.9.4 - Give your page some headroom. Hide your header until you need it + * Copyright (c) 2017 Nick Williams - http://wicky.nillia.ms/headroom.js + * License: MIT + */ + +!function(a){a&&(a.fn.headroom=function(b){return this.each(function(){var c=a(this),d=c.data("headroom"),e="object"==typeof b&&b;e=a.extend(!0,{},Headroom.options,e),d||(d=new Headroom(this,e),d.init(),c.data("headroom",d)),"string"==typeof b&&(d[b](),"destroy"===b&&c.removeData("headroom"))})},a("[data-headroom]").each(function(){var b=a(this);b.headroom(b.data())}))}(window.Zepto||window.jQuery); \ No newline at end of file diff --git a/deps/jquery-3.6.0/jquery-3.6.0.js b/deps/jquery-3.6.0/jquery-3.6.0.js new file mode 100644 index 00000000..fc6c299b --- /dev/null +++ b/deps/jquery-3.6.0/jquery-3.6.0.js @@ -0,0 +1,10881 @@ +/*! + * 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( " - - - - - + + + + + + - - - - -
    -
    -
    +
    +
    +
    +

    -

    The pRoloc suite set of software offers a complete software pipeline to analyse, visualise and interpret mass spectrometry-based spatial proteomics data such, for example, as LOPIT (Localization of Organelle Proteins by Isotope Tagging), PCP (Protein Correlation Profiling) or hyperLOPIT (hyperplexed LOPIT). The suite includes pRoloc, the mail software that focuses on data analysis using state-of-the-art machine learning, pRolocdata, that distributes numerous datasets, and pRolocGUI, that offers interactive visualisations dedicated to spatial proteomics. The software are distributed as part of the R/Bioconductor project.

    +

    The pRoloc suite set of software offers a complete software pipeline to analyse, visualise and interpret mass spectrometry-based spatial proteomics data such, for example, as LOPIT (Localization of Organelle Proteins by Isotope Tagging), PCP (Protein Correlation Profiling) or hyperLOPIT (hyperplexed LOPIT). The suite includes pRoloc, the mail software that focuses on data analysis using state-of-the-art machine learning, pRolocdata, that distributes numerous datasets, and pRolocGUI, that offers interactive visualisations dedicated to spatial proteomics. The software are distributed as part of the R/Bioconductor project.

    Getting started

    -

    The pRoloc software comes with ample documentation. The main tutorial provides a broad overview of the package and its functionality. See the Articles tab for additional manuals.

    +

    The pRoloc software comes with ample documentation. The main tutorial provides a broad overview of the package and its functionality. See the Articles tab for additional manuals.

    pRolocGUI also offer several documentation files.

    Here are a set of video tutorial that illustrate the pRoloc framework.

    @@ -163,10 +129,7 @@

    Contributing -

    +
    -
    - diff --git a/katex-auto.js b/katex-auto.js new file mode 100644 index 00000000..20651d9f --- /dev/null +++ b/katex-auto.js @@ -0,0 +1,14 @@ +// https://github.com/jgm/pandoc/blob/29fa97ab96b8e2d62d48326e1b949a71dc41f47a/src/Text/Pandoc/Writers/HTML.hs#L332-L345 +document.addEventListener("DOMContentLoaded", function () { + var mathElements = document.getElementsByClassName("math"); + var macros = []; + for (var i = 0; i < mathElements.length; i++) { + var texText = mathElements[i].firstChild; + if (mathElements[i].tagName == "SPAN") { + katex.render(texText.data, mathElements[i], { + displayMode: mathElements[i].classList.contains("display"), + throwOnError: false, + macros: macros, + fleqn: false + }); + }}}); diff --git a/lightswitch.js b/lightswitch.js new file mode 100644 index 00000000..9467125a --- /dev/null +++ b/lightswitch.js @@ -0,0 +1,85 @@ + +/*! + * Color mode toggler for Bootstrap's docs (https://getbootstrap.com/) + * Copyright 2011-2023 The Bootstrap Authors + * Licensed under the Creative Commons Attribution 3.0 Unported License. + * Updates for {pkgdown} by the {bslib} authors, also licensed under CC-BY-3.0. + */ + +const getStoredTheme = () => localStorage.getItem('theme') +const setStoredTheme = theme => localStorage.setItem('theme', theme) + +const getPreferredTheme = () => { + const storedTheme = getStoredTheme() + if (storedTheme) { + return storedTheme + } + + return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light' +} + +const setTheme = theme => { + if (theme === 'auto') { + document.documentElement.setAttribute('data-bs-theme', (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light')) + } else { + document.documentElement.setAttribute('data-bs-theme', theme) + } +} + +function bsSetupThemeToggle () { + 'use strict' + + const showActiveTheme = (theme, focus = false) => { + var activeLabel, activeIcon; + + document.querySelectorAll('[data-bs-theme-value]').forEach(element => { + const buttonTheme = element.getAttribute('data-bs-theme-value') + const isActive = buttonTheme == theme + + element.classList.toggle('active', isActive) + element.setAttribute('aria-pressed', isActive) + + if (isActive) { + activeLabel = element.textContent; + activeIcon = element.querySelector('span').classList.value; + } + }) + + const themeSwitcher = document.querySelector('#dropdown-lightswitch') + if (!themeSwitcher) { + return + } + + themeSwitcher.setAttribute('aria-label', activeLabel) + themeSwitcher.querySelector('span').classList.value = activeIcon; + + if (focus) { + themeSwitcher.focus() + } + } + + window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', () => { + const storedTheme = getStoredTheme() + if (storedTheme !== 'light' && storedTheme !== 'dark') { + setTheme(getPreferredTheme()) + } + }) + + window.addEventListener('DOMContentLoaded', () => { + showActiveTheme(getPreferredTheme()) + + document + .querySelectorAll('[data-bs-theme-value]') + .forEach(toggle => { + toggle.addEventListener('click', () => { + const theme = toggle.getAttribute('data-bs-theme-value') + setTheme(theme) + setStoredTheme(theme) + showActiveTheme(theme, true) + }) + }) + }) +} + +setTheme(getPreferredTheme()); +bsSetupThemeToggle(); diff --git a/news/index.html b/news/index.html index 38f6dc74..39a27c10 100644 --- a/news/index.html +++ b/news/index.html @@ -1,87 +1,65 @@ -Changelog • pRoloc +Changelog • pRoloc + Skip to contents -
    -
    -
    - +
    +
    +
    - +

    pRoloc 1.45

    +
    +

    Changes in version 1.45.2

    +
    • +pRolocmarkers() has a new version argument, to allow for new markers versions to be added.
    • +
    • 14 new marker sets have been added to pRolocmarkers() under version = 2 (new default).
    • +
    • Documentation for pRolocmarkers() has been updated to include a description of version = 2 markers.
    • +
    -

    Changes in version 1.45.1

    +

    Changes in version 1.45.1

    • Import ’mclust::estep*()’.
    -

    Changes in version 1.45.0

    +

    Changes in version 1.45.0

    • New devel version
    - +

    pRoloc 1.43

    Changes in version 1.43.2

    • Fix/update dunkley2006param object.
    • @@ -96,7 +74,7 @@

      Changes in version 1.43.0

    - +

    pRoloc 1.39

    Changes in version 1.39.1

    • Update transfer learning vignette to use hpar 1.41.
    • @@ -107,17 +85,17 @@

      Changes in version 1.39.0

    - +

    pRoloc 1.37

    Changes in version 1.37.1

    • Fix bug in PerTubro classifiction function (see #146 and #147), contributed by mgerault.
    - +

    pRoloc 1.33

    - +

    pRoloc 1.31

    Changes in version 1.31.1

    • Fix failing unit test, by setting RNGseed in SerialParam() (fix by ococrook, see #142).
    • @@ -144,7 +122,7 @@

      Changes in version 1.31.0

    - +

    pRoloc 1.29

    Changes in version 1.29.0

    • New devel version (Bioc 3.12)
    • @@ -155,14 +133,14 @@

      Changes in version 1.29.1

    - +

    pRoloc 1.28

    Changes in version 1.28.0

    • New release version (Bioc 3.11)
    - +

    pRoloc 1.27

    Changes in version 1.27.6

    • Depend on MLInterfaces 1.67.10
    • @@ -194,7 +172,7 @@

      Changes in version 1.27.0

    - +

    pRoloc 1.25

    Changes in version 1.25.3

    • New spatial2D function <2019-09-24 Tue>
    • @@ -214,14 +192,14 @@

      Changes in version 1.25.0

    - +

    pRoloc 1.24

    Changes in version 1.24.0

    • Version bump for Bioc 3.9 (release)
    - +

    pRoloc 1.23

    Changes in version 1.23.4

    • Remove plain NEWS now that R supports NEWS.md
    • @@ -254,14 +232,14 @@

      Changes in version 1.23.0

    - +

    pRoloc 1.22

    Changes in version 1.22.0

    • New version for Bioc 3.8 release
    - +

    pRoloc 1.21

    Changes in version 1.21.9

    • Fix type in vignette header <2018-09-18 Tue>
    • @@ -305,14 +283,14 @@

      Changes in version 1.21.1

    - +

    pRoloc 1.20

    Changes in version 1.20.0

    • New Bioconductor release 3.7
    - +

    pRoloc 1.19

    Changes in version 1.19.4

    • Fix regression bug in knntl function <2018-04-12 Thu>
    • @@ -337,14 +315,14 @@

      Changes in version 1.19.0

    - +

    pRoloc 1.18

    Changes in version 1.18.0

    • Bioconductor release 3.6
    - +

    pRoloc 1.17

    Changes in version 1.17.5

    • Filtering for unique features when running plot2D with t-SNE method <2017-10-15 Sun>
    • @@ -373,25 +351,19 @@

      Changes in version 1.17.0
    • Version bump for Bioc devel 3.6
    -
    - - - -
    +
    -
    diff --git a/pkgdown.css b/pkgdown.css deleted file mode 100644 index 80ea5b83..00000000 --- a/pkgdown.css +++ /dev/null @@ -1,384 +0,0 @@ -/* Sticky footer */ - -/** - * Basic idea: https://philipwalton.github.io/solved-by-flexbox/demos/sticky-footer/ - * Details: https://github.com/philipwalton/solved-by-flexbox/blob/master/assets/css/components/site.css - * - * .Site -> body > .container - * .Site-content -> body > .container .row - * .footer -> footer - * - * Key idea seems to be to ensure that .container and __all its parents__ - * have height set to 100% - * - */ - -html, body { - height: 100%; -} - -body { - position: relative; -} - -body > .container { - display: flex; - height: 100%; - flex-direction: column; -} - -body > .container .row { - flex: 1 0 auto; -} - -footer { - margin-top: 45px; - padding: 35px 0 36px; - border-top: 1px solid #e5e5e5; - color: #666; - display: flex; - flex-shrink: 0; -} -footer p { - margin-bottom: 0; -} -footer div { - flex: 1; -} -footer .pkgdown { - text-align: right; -} -footer p { - margin-bottom: 0; -} - -img.icon { - float: right; -} - -/* Ensure in-page images don't run outside their container */ -.contents img { - max-width: 100%; - height: auto; -} - -/* Fix bug in bootstrap (only seen in firefox) */ -summary { - display: list-item; -} - -/* Typographic tweaking ---------------------------------*/ - -.contents .page-header { - margin-top: calc(-60px + 1em); -} - -dd { - margin-left: 3em; -} - -/* Section anchors ---------------------------------*/ - -a.anchor { - display: none; - margin-left: 5px; - width: 20px; - height: 20px; - - background-image: url(./link.svg); - background-repeat: no-repeat; - background-size: 20px 20px; - background-position: center center; -} - -h1:hover .anchor, -h2:hover .anchor, -h3:hover .anchor, -h4:hover .anchor, -h5:hover .anchor, -h6:hover .anchor { - display: inline-block; -} - -/* Fixes for fixed navbar --------------------------*/ - -.contents h1, .contents h2, .contents h3, .contents h4 { - padding-top: 60px; - margin-top: -40px; -} - -/* Navbar submenu --------------------------*/ - -.dropdown-submenu { - position: relative; -} - -.dropdown-submenu>.dropdown-menu { - top: 0; - left: 100%; - margin-top: -6px; - margin-left: -1px; - border-radius: 0 6px 6px 6px; -} - -.dropdown-submenu:hover>.dropdown-menu { - display: block; -} - -.dropdown-submenu>a:after { - display: block; - content: " "; - float: right; - width: 0; - height: 0; - border-color: transparent; - border-style: solid; - border-width: 5px 0 5px 5px; - border-left-color: #cccccc; - margin-top: 5px; - margin-right: -10px; -} - -.dropdown-submenu:hover>a:after { - border-left-color: #ffffff; -} - -.dropdown-submenu.pull-left { - float: none; -} - -.dropdown-submenu.pull-left>.dropdown-menu { - left: -100%; - margin-left: 10px; - border-radius: 6px 0 6px 6px; -} - -/* Sidebar --------------------------*/ - -#pkgdown-sidebar { - margin-top: 30px; - position: -webkit-sticky; - position: sticky; - top: 70px; -} - -#pkgdown-sidebar h2 { - font-size: 1.5em; - margin-top: 1em; -} - -#pkgdown-sidebar h2:first-child { - margin-top: 0; -} - -#pkgdown-sidebar .list-unstyled li { - margin-bottom: 0.5em; -} - -/* bootstrap-toc tweaks ------------------------------------------------------*/ - -/* All levels of nav */ - -nav[data-toggle='toc'] .nav > li > a { - padding: 4px 20px 4px 6px; - font-size: 1.5rem; - font-weight: 400; - color: inherit; -} - -nav[data-toggle='toc'] .nav > li > a:hover, -nav[data-toggle='toc'] .nav > li > a:focus { - padding-left: 5px; - color: inherit; - border-left: 1px solid #878787; -} - -nav[data-toggle='toc'] .nav > .active > a, -nav[data-toggle='toc'] .nav > .active:hover > a, -nav[data-toggle='toc'] .nav > .active:focus > a { - padding-left: 5px; - font-size: 1.5rem; - font-weight: 400; - color: inherit; - border-left: 2px solid #878787; -} - -/* Nav: second level (shown on .active) */ - -nav[data-toggle='toc'] .nav .nav { - display: none; /* Hide by default, but at >768px, show it */ - padding-bottom: 10px; -} - -nav[data-toggle='toc'] .nav .nav > li > a { - padding-left: 16px; - font-size: 1.35rem; -} - -nav[data-toggle='toc'] .nav .nav > li > a:hover, -nav[data-toggle='toc'] .nav .nav > li > a:focus { - padding-left: 15px; -} - -nav[data-toggle='toc'] .nav .nav > .active > a, -nav[data-toggle='toc'] .nav .nav > .active:hover > a, -nav[data-toggle='toc'] .nav .nav > .active:focus > a { - padding-left: 15px; - font-weight: 500; - font-size: 1.35rem; -} - -/* orcid ------------------------------------------------------------------- */ - -.orcid { - font-size: 16px; - color: #A6CE39; - /* margins are required by official ORCID trademark and display guidelines */ - margin-left:4px; - margin-right:4px; - vertical-align: middle; -} - -/* Reference index & topics ----------------------------------------------- */ - -.ref-index th {font-weight: normal;} - -.ref-index td {vertical-align: top; min-width: 100px} -.ref-index .icon {width: 40px;} -.ref-index .alias {width: 40%;} -.ref-index-icons .alias {width: calc(40% - 40px);} -.ref-index .title {width: 60%;} - -.ref-arguments th {text-align: right; padding-right: 10px;} -.ref-arguments th, .ref-arguments td {vertical-align: top; min-width: 100px} -.ref-arguments .name {width: 20%;} -.ref-arguments .desc {width: 80%;} - -/* Nice scrolling for wide elements --------------------------------------- */ - -table { - display: block; - overflow: auto; -} - -/* Syntax highlighting ---------------------------------------------------- */ - -pre, code, pre code { - background-color: #f8f8f8; - color: #333; -} -pre, pre code { - white-space: pre-wrap; - word-break: break-all; - overflow-wrap: break-word; -} - -pre { - border: 1px solid #eee; -} - -pre .img, pre .r-plt { - margin: 5px 0; -} - -pre .img img, pre .r-plt img { - background-color: #fff; -} - -code a, pre a { - color: #375f84; -} - -a.sourceLine:hover { - text-decoration: none; -} - -.fl {color: #1514b5;} -.fu {color: #000000;} /* function */ -.ch,.st {color: #036a07;} /* string */ -.kw {color: #264D66;} /* keyword */ -.co {color: #888888;} /* comment */ - -.error {font-weight: bolder;} -.warning {font-weight: bolder;} - -/* Clipboard --------------------------*/ - -.hasCopyButton { - position: relative; -} - -.btn-copy-ex { - position: absolute; - right: 0; - top: 0; - visibility: hidden; -} - -.hasCopyButton:hover button.btn-copy-ex { - visibility: visible; -} - -/* headroom.js ------------------------ */ - -.headroom { - will-change: transform; - transition: transform 200ms linear; -} -.headroom--pinned { - transform: translateY(0%); -} -.headroom--unpinned { - transform: translateY(-100%); -} - -/* mark.js ----------------------------*/ - -mark { - background-color: rgba(255, 255, 51, 0.5); - border-bottom: 2px solid rgba(255, 153, 51, 0.3); - padding: 1px; -} - -/* vertical spacing after htmlwidgets */ -.html-widget { - margin-bottom: 10px; -} - -/* fontawesome ------------------------ */ - -.fab { - font-family: "Font Awesome 5 Brands" !important; -} - -/* don't display links in code chunks when printing */ -/* source: https://stackoverflow.com/a/10781533 */ -@media print { - code a:link:after, code a:visited:after { - content: ""; - } -} - -/* Section anchors --------------------------------- - Added in pandoc 2.11: https://github.com/jgm/pandoc-templates/commit/9904bf71 -*/ - -div.csl-bib-body { } -div.csl-entry { - clear: both; -} -.hanging-indent div.csl-entry { - margin-left:2em; - text-indent:-2em; -} -div.csl-left-margin { - min-width:2em; - float:left; -} -div.csl-right-inline { - margin-left:2em; - padding-left:1em; -} -div.csl-indent { - margin-left: 2em; -} diff --git a/pkgdown.js b/pkgdown.js index 6f0eee40..1a99c65f 100644 --- a/pkgdown.js +++ b/pkgdown.js @@ -2,83 +2,43 @@ (function($) { $(function() { - $('.navbar-fixed-top').headroom(); + $('nav.navbar').headroom(); - $('body').css('padding-top', $('.navbar').height() + 10); - $(window).resize(function(){ - $('body').css('padding-top', $('.navbar').height() + 10); + Toc.init({ + $nav: $("#toc"), + $scope: $("main h2, main h3, main h4, main h5, main h6") }); - $('[data-toggle="tooltip"]').tooltip(); - - var cur_path = paths(location.pathname); - var links = $("#navbar ul li a"); - var max_length = -1; - var pos = -1; - for (var i = 0; i < links.length; i++) { - if (links[i].getAttribute("href") === "#") - continue; - // Ignore external links - if (links[i].host !== location.host) - continue; - - var nav_path = paths(links[i].pathname); - - var length = prefix_length(nav_path, cur_path); - if (length > max_length) { - max_length = length; - pos = i; - } - } - - // Add class to parent
  • , and enclosing
  • if in dropdown - if (pos >= 0) { - var menu_anchor = $(links[pos]); - menu_anchor.parent().addClass("active"); - menu_anchor.closest("li.dropdown").addClass("active"); - } - }); - - function paths(pathname) { - var pieces = pathname.split("/"); - pieces.shift(); // always starts with / - - var end = pieces[pieces.length - 1]; - if (end === "index.html" || end === "") - pieces.pop(); - return(pieces); - } - - // Returns -1 if not found - function prefix_length(needle, haystack) { - if (needle.length > haystack.length) - return(-1); - - // Special case for length-0 haystack, since for loop won't run - if (haystack.length === 0) { - return(needle.length === 0 ? 0 : -1); + if ($('#toc').length) { + $('body').scrollspy({ + target: '#toc', + offset: $("nav.navbar").outerHeight() + 1 + }); } - for (var i = 0; i < haystack.length; i++) { - if (needle[i] != haystack[i]) - return(i); - } + // Activate popovers + $('[data-bs-toggle="popover"]').popover({ + container: 'body', + html: true, + trigger: 'focus', + placement: "top", + sanitize: false, + }); - return(haystack.length); - } + $('[data-bs-toggle="tooltip"]').tooltip(); /* Clipboard --------------------------*/ function changeTooltipMessage(element, msg) { - var tooltipOriginalTitle=element.getAttribute('data-original-title'); - element.setAttribute('data-original-title', msg); + var tooltipOriginalTitle=element.getAttribute('data-bs-original-title'); + element.setAttribute('data-bs-original-title', msg); $(element).tooltip('show'); - element.setAttribute('data-original-title', tooltipOriginalTitle); + element.setAttribute('data-bs-original-title', tooltipOriginalTitle); } if(ClipboardJS.isSupported()) { $(document).ready(function() { - var copyButton = ""; + var copyButton = ""; $("div.sourceCode").addClass("hasCopyButton"); @@ -89,20 +49,114 @@ $('.btn-copy-ex').tooltip({container: 'body'}); // Initialize clipboard: - var clipboardBtnCopies = new ClipboardJS('[data-clipboard-copy]', { + var clipboard = new ClipboardJS('[data-clipboard-copy]', { text: function(trigger) { return trigger.parentNode.textContent.replace(/\n#>[^\n]*/g, ""); } }); - clipboardBtnCopies.on('success', function(e) { + clipboard.on('success', function(e) { changeTooltipMessage(e.trigger, 'Copied!'); e.clearSelection(); }); - clipboardBtnCopies.on('error', function() { + clipboard.on('error', function(e) { changeTooltipMessage(e.trigger,'Press Ctrl+C or Command+C to copy'); }); + }); } + + /* Search marking --------------------------*/ + var url = new URL(window.location.href); + var toMark = url.searchParams.get("q"); + var mark = new Mark("main#main"); + if (toMark) { + mark.mark(toMark, { + accuracy: { + value: "complementary", + limiters: [",", ".", ":", "/"], + } + }); + } + + /* Search --------------------------*/ + /* Adapted from https://github.com/rstudio/bookdown/blob/2d692ba4b61f1e466c92e78fd712b0ab08c11d31/inst/resources/bs4_book/bs4_book.js#L25 */ + // Initialise search index on focus + var fuse; + $("#search-input").focus(async function(e) { + if (fuse) { + return; + } + + $(e.target).addClass("loading"); + var response = await fetch($("#search-input").data("search-index")); + var data = await response.json(); + + var options = { + keys: ["what", "text", "code"], + ignoreLocation: true, + threshold: 0.1, + includeMatches: true, + includeScore: true, + }; + fuse = new Fuse(data, options); + + $(e.target).removeClass("loading"); + }); + + // Use algolia autocomplete + var options = { + autoselect: true, + debug: true, + hint: false, + minLength: 2, + }; + var q; +async function searchFuse(query, callback) { + await fuse; + + var items; + if (!fuse) { + items = []; + } else { + q = query; + var results = fuse.search(query, { limit: 20 }); + items = results + .filter((x) => x.score <= 0.75) + .map((x) => x.item); + if (items.length === 0) { + items = [{dir:"Sorry 😿",previous_headings:"",title:"No results found.",what:"No results found.",path:window.location.href}]; + } + } + callback(items); +} + $("#search-input").autocomplete(options, [ + { + name: "content", + source: searchFuse, + templates: { + suggestion: (s) => { + if (s.title == s.what) { + return `${s.dir} >
    ${s.title}
    `; + } else if (s.previous_headings == "") { + return `${s.dir} >
    ${s.title}
    > ${s.what}`; + } else { + return `${s.dir} >
    ${s.title}
    > ${s.previous_headings} > ${s.what}`; + } + }, + }, + }, + ]).on('autocomplete:selected', function(event, s) { + window.location.href = s.path + "?q=" + q + "#" + s.id; + }); + }); })(window.jQuery || window.$) + +document.addEventListener('keydown', function(event) { + // Check if the pressed key is '/' + if (event.key === '/') { + event.preventDefault(); // Prevent any default action associated with the '/' key + document.getElementById('search-input').focus(); // Set focus to the search input + } +}); diff --git a/pkgdown.yml b/pkgdown.yml index a50f031e..ef7cdaeb 100644 --- a/pkgdown.yml +++ b/pkgdown.yml @@ -1,10 +1,13 @@ -pandoc: '3.2' -pkgdown: 2.0.9.9000 -pkgdown_sha: ad3ffd6c11182b49d256858fa08449a08ad36cd9 +pandoc: '3.4' +pkgdown: 2.1.1.9000 +pkgdown_sha: 8d9cba19fe597bba170f8d4c99f351491ab4f4d1 articles: v01-pRoloc-tutorial: v01-pRoloc-tutorial.html v02-pRoloc-ml: v02-pRoloc-ml.html v03-pRoloc-bayesian: v03-pRoloc-bayesian.html v04-pRoloc-goannotations: v04-pRoloc-goannotations.html v05-pRoloc-transfer-learning: v05-pRoloc-transfer-learning.html -last_built: 2024-06-16T10:11Z +last_built: 2024-10-18T17:19Z +urls: + reference: https://lgatto.github.io/pRoloc/reference + article: https://lgatto.github.io/pRoloc/articles diff --git a/reference/.MCMCChain.html b/reference/.MCMCChain.html new file mode 100644 index 00000000..15d64af8 --- /dev/null +++ b/reference/.MCMCChain.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/.MCMCChains.html b/reference/.MCMCChains.html new file mode 100644 index 00000000..15d64af8 --- /dev/null +++ b/reference/.MCMCChains.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/.MCMCParams.html b/reference/.MCMCParams.html new file mode 100644 index 00000000..15d64af8 --- /dev/null +++ b/reference/.MCMCParams.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/.MCMCSummary.html b/reference/.MCMCSummary.html new file mode 100644 index 00000000..15d64af8 --- /dev/null +++ b/reference/.MCMCSummary.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/AnnotationParams-class.html b/reference/AnnotationParams-class.html index 8d7d46c9..1c465db1 100644 --- a/reference/AnnotationParams-class.html +++ b/reference/AnnotationParams-class.html @@ -1,79 +1,53 @@ -Class "AnnotationParams" — AnnotationParams-class • pRolocClass "AnnotationParams" — AnnotationParams-class • pRoloc - - -
    -
    +
    +
    +
    -
    - -
    +

    Class to store annotation parameters to automatically query a Biomart server, retrieve relevant annotation for a set of features of interest using, for example getGOFromFeatures and @@ -81,8 +55,8 @@

    Class "AnnotationParams"

    -
    -

    Objects from the Class

    +
    +

    Objects from the Class

    Objects can be created and set with the setAnnotationParams @@ -114,8 +88,8 @@

    Objects from the Class

    getAnnotationParams function.

    See the pRoloc-theta vignette for details.

    -
    -

    Slots

    +
    +

    Slots

    mart:

    Object of class "Mart" from the biomaRt package.

    @@ -155,28 +129,28 @@

    Slots

    -
    -

    Methods

    +
    +

    Methods

    show

    signature(object = "AnnotationParams"): to display objects.

    -
    -

    Author

    +
    +

    Author

    Laurent Gatto <lg390@cam.ac.uk>

    -
    -

    See also

    +
    +

    See also

    getGOFromFeatures, makeGoSet and the pRoloc-theta vignette.

    -
    -

    Examples

    +
    +

    Examples

    data(andy2011params)
     andy2011params
     #> Object of class "AnnotationParams"
    @@ -209,26 +183,22 @@ 

    Examples

    #> Using the 'ENSEMBL_MART_ENSEMBL' BioMart database #> Using the 'hsapiens_gene_ensembl' dataset #> Using 'uniprotswissprot' as filter -#> Created on Sun Jun 16 10:12:12 2024 +#> Created on Fri Oct 18 17:19:34 2024
    -
    - -
    +
    -
    - +
    diff --git a/reference/AnnotationParams.html b/reference/AnnotationParams.html new file mode 100644 index 00000000..84f163a9 --- /dev/null +++ b/reference/AnnotationParams.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/ClustDist-class-1.png b/reference/ClustDist-class-1.png index 46750a13..21e53eac 100644 Binary files a/reference/ClustDist-class-1.png and b/reference/ClustDist-class-1.png differ diff --git a/reference/ClustDist-class-2.png b/reference/ClustDist-class-2.png index 9affb0a1..3eabd664 100644 Binary files a/reference/ClustDist-class-2.png and b/reference/ClustDist-class-2.png differ diff --git a/reference/ClustDist-class.html b/reference/ClustDist-class.html index c4010d74..a37b7577 100644 --- a/reference/ClustDist-class.html +++ b/reference/ClustDist-class.html @@ -1,80 +1,55 @@ -Class "ClustDist" — ClustDist-class • pRolocClass "ClustDist" — ClustDist-class • pRoloc - - -
    -
    +
    -
    - +
    +
    +
    -
    +

    The ClustDist summaries algorithm information, from running the clustDist function, such as the number of k's tested for the kmeans, and mean and normalised @@ -83,13 +58,13 @@

    Class "ClustDist"

    -
    -

    Objects from the Class

    +
    +

    Objects from the Class

    Object of this class are created with the clustDist function.

    -
    -

    Slots

    +
    +

    Slots

    k:

    Object of class "numeric" storing the number of k clusters tested.

    @@ -125,8 +100,8 @@

    Slots

    -
    -

    Methods

    +
    +

    Methods

    plot

    Plots the kmeans clustering results.

    @@ -135,13 +110,13 @@

    Methods

    -
    -

    Author

    +
    +

    Author

    Lisa M Breckels <lms79@cam.ac.uk>

    -
    -

    Examples

    +
    +

    Examples

      showClass("ClustDist")
     #> Class "ClustDist" [package "pRoloc"]
     #> 
    @@ -155,7 +130,7 @@ 

    Examples

    library('pRolocdata') #> -#> This is pRolocdata version 1.43.0. +#> This is pRolocdata version 1.43.3. #> Use 'pRolocdata()' to list available data sets. data(dunkley2006) par <- setAnnotationParams(inputs = @@ -176,13 +151,13 @@

    Examples

    ## filter xx <- filterMinMarkers(xx, n = 50) -#> Retaining 18 out of 166 in GOAnnotations +#> Retaining 3 out of 79 in GOAnnotations xx <- filterMaxMarkers(xx, p = .25) -#> Retaining 14 out of 18 in GOAnnotations +#> Retaining 2 out of 3 in GOAnnotations ## get distances for protein sets dd <- clustDist(xx) -#> | | | 0% | |===== | 7% | |========== | 14% | |=============== | 21% | |==================== | 29% | |========================= | 36% | |============================== | 43% | |=================================== | 50% | |======================================== | 57% | |============================================= | 64% | |================================================== | 71% | |======================================================= | 79% | |============================================================ | 86% | |================================================================= | 93% | |======================================================================| 100% +#> | | | 0% | |=================================== | 50% | |======================================================================| 100% ## plot clusters for first 'ClustDist' object ## in the 'ClustDistList' @@ -194,23 +169,19 @@

    Examples

    -
    - -
    +
    -
    - +
    diff --git a/reference/ClustDist.html b/reference/ClustDist.html new file mode 100644 index 00000000..5ea7ccbd --- /dev/null +++ b/reference/ClustDist.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/ClustDistList-class-1.png b/reference/ClustDistList-class-1.png index 23c98f32..7187bc4c 100644 Binary files a/reference/ClustDistList-class-1.png and b/reference/ClustDistList-class-1.png differ diff --git a/reference/ClustDistList-class.html b/reference/ClustDistList-class.html index b9608d70..4af1fb78 100644 --- a/reference/ClustDistList-class.html +++ b/reference/ClustDistList-class.html @@ -1,89 +1,61 @@ -Storing multiple ClustDist instances — ClustDistList-class • pRoloc - - -
    -
    +
    +
    +
    -
    - -
    +

    A class for storing lists of ClustDist instances.

    -
    -

    Objects from the Class

    +
    +

    Objects from the Class

    Object of this class are created with the clustDist function.

    -
    -

    Slots

    +
    +

    Slots

    x:

    Object of class list containing valid ClustDist instances.

    @@ -101,8 +73,8 @@

    Slots

    -
    -

    Methods

    +
    +

    Methods

    "[["

    Extracts a single ClustDist at position.

    @@ -133,13 +105,13 @@

    Methods

    -
    -

    Author

    +
    +

    Author

    Lisa M Breckels <lms79@cam.ac.uk>

    -
    -

    Examples

    +
    +

    Examples

      library('pRolocdata')
       data(dunkley2006)
       par <- setAnnotationParams(inputs =
    @@ -152,76 +124,66 @@ 

    Examples

    #> Connecting to Biomart... #> Warning: Ensembl will soon enforce the use of https. #> Ensure the 'host' argument includes "https://" - - ## add protein set/annotation information + + ## add protein set/annotation information xx <- addGoAnnotations(dunkley2006, par) - + ## filter xx <- filterMinMarkers(xx, n = 50) -#> Retaining 18 out of 166 in GOAnnotations +#> Retaining 3 out of 79 in GOAnnotations xx <- filterMaxMarkers(xx, p = .25) -#> Retaining 14 out of 18 in GOAnnotations - +#> Retaining 2 out of 3 in GOAnnotations + ## get distances for protein sets dd <- clustDist(xx) -#> | | | 0% | |===== | 7% | |========== | 14% | |=============== | 21% | |==================== | 29% | |========================= | 36% | |============================== | 43% | |=================================== | 50% | |======================================== | 57% | |============================================= | 64% | |================================================== | 71% | |======================================================= | 79% | |============================================================ | 86% | |================================================================= | 93% | |======================================================================| 100% - - ## plot distances for all protein sets +#> | | | 0% | |=================================== | 50% | |======================================================================| 100% + + ## plot distances for all protein sets plot(dd) - + names(dd) -#> [1] "mitochondrion" "plant-type vacuole" -#> [3] "nucleus" "vacuole" -#> [5] "plasmodesma" "cytosol" -#> [7] "chloroplast" "plastid" -#> [9] "endoplasmic reticulum membrane" "cytoplasm" -#> [11] "Golgi membrane" "endosome" -#> [13] "chloroplast envelope" "trans-Golgi network" - - ## Extract first 4 ClustDist objects of the ClustDistList - dd[1:4] -#> Instance of class 'ClustDistList' containig 4 objects. - +#> [1] "endoplasmic reticulum" "Golgi apparatus" + + ## Extract a sub-list of ClustDist objects + dd[1] +#> Instance of class 'ClustDistList' containig 1 objects. + ## Extract 1st ClustDist object dd[[1]] #> Object of class "ClustDist" #> fcol = GOAnnotations -#> term = GO:0005739 -#> id = mitochondrion -#> nrow = 160 +#> term = GO:0005783 +#> id = endoplasmic reticulum +#> nrow = 91 #> k's tested: 1 2 3 4 5 -#> Size: 160 -#> Size: 106 -#> Size: 106 +#> Size: 91 +#> Size: 88 #> Size: 80 -#> Size: 74 +#> Size: NA +#> Size: NA #> Clusters info: #> ks.mean mean ks.norm norm -#> k = 1 1 0.4410 1 0.08123 -#> k = 2 1 0.1844 1 0.03896 -#> k = 3 1 0.1844 1 0.03896 -#> k = 4 1 0.1515 1 0.03517 -#> k = 5 1 *0.1270 1 *0.03026 +#> k = 1 1 0.1916 1 0.04260 +#> k = 2 1 0.1595 1 0.03585 +#> k = 3 1 *0.1385 1 *0.03215 +#> k = 4 NA NA NA NA +#> k = 5 NA NA NA NA
    -
    - -
    +
    -
    - +
    diff --git a/reference/ClustDistList.html b/reference/ClustDistList.html new file mode 100644 index 00000000..76fb34d9 --- /dev/null +++ b/reference/ClustDistList.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/GenRegRes-class.html b/reference/GenRegRes-class.html index 6955c95c..0f34e6e9 100644 --- a/reference/GenRegRes-class.html +++ b/reference/GenRegRes-class.html @@ -1,89 +1,60 @@ -Class "GenRegRes" and "ThetaRegRes" — GenRegRes-class • pRoloc - - -
    -
    +
    +
    +
    -
    - -
    +

    Regularisation framework containers.

    -
    -

    Objects from the Class

    +
    +

    Objects from the Class

    Object of this class are created with the respective regularisation function: knnOptimisation, svmOptimisation, plsdaOptimisation, knntlOptimisation, ...

    -
    -

    Slots

    +
    +

    Slots

    algorithm:

    Object of class "character" storing the machine learning algorithm name.

    @@ -140,8 +111,8 @@

    Slots

    -
    -

    Methods

    +
    +

    Methods

    getF1Scores

    Returns a matrix of F1 scores for the optimisation parameters.

    @@ -193,8 +164,8 @@

    Methods

    -
    -

    Other functions

    +
    +

    Other functions

    Only for ThetaRegRes:

    @@ -216,13 +187,13 @@

    Other functions

    -
    -

    Author

    +
    +

    Author

    Laurent Gatto <lg390@cam.ac.uk>

    -
    -

    Examples

    +
    +

    Examples

    showClass("GenRegRes")
     #> Class "GenRegRes" [package "pRoloc"]
     #> 
    @@ -255,23 +226,19 @@ 

    Examples

    #> Extends: "GenRegRes"
    -
    - -
    +
    -
    - +
    diff --git a/reference/GenRegRes.html b/reference/GenRegRes.html new file mode 100644 index 00000000..7959a075 --- /dev/null +++ b/reference/GenRegRes.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/MAPParams.html b/reference/MAPParams.html new file mode 100644 index 00000000..b5288b4a --- /dev/null +++ b/reference/MAPParams.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/MCMCChain-class.html b/reference/MCMCChain-class.html new file mode 100644 index 00000000..15d64af8 --- /dev/null +++ b/reference/MCMCChain-class.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/MCMCChain.html b/reference/MCMCChain.html new file mode 100644 index 00000000..15d64af8 --- /dev/null +++ b/reference/MCMCChain.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/MCMCChains.html b/reference/MCMCChains.html new file mode 100644 index 00000000..15d64af8 --- /dev/null +++ b/reference/MCMCChains.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/MCMCParams-class.html b/reference/MCMCParams-class.html new file mode 100644 index 00000000..15d64af8 --- /dev/null +++ b/reference/MCMCParams-class.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/MCMCParams.html b/reference/MCMCParams.html index 77f13268..77b853a7 100644 --- a/reference/MCMCParams.html +++ b/reference/MCMCParams.html @@ -1,84 +1,58 @@ -Instrastructure to store and process MCMC results — MCMCChains-class • pRolocInstrastructure to store and process MCMC results — MCMCChains-class • pRoloc - - -
  • +
    + + +
    +
    +
    +
    -
    +

    The MCMCParams infrastructure is used to store and process Marchov chain Monte Carlo results for the T-Augmented Gaussian Mixture model (TAGM) from Crook et al. (2018).

    -
    +
    +

    Usage

    chains(object)
     
     # S4 method for class 'MCMCParams'
    @@ -112,8 +86,8 @@ 

    Instrastructure to store and process MCMC results

    show(object)
    -
    -

    Arguments

    +
    +

    Arguments

    object
    @@ -136,8 +110,8 @@

    Arguments

    Missing.

    -
    -

    Details

    +
    +

    Details

    Objects of the MCMCParams class are created with the tagmMcmcTrain() function. These objects store the priors of the generative TAGM model and the results of the MCMC chains, @@ -147,8 +121,8 @@

    Details

    the tagmMcmcProcess() function.

    See the pRoloc-bayesian vignette for examples.

    -
    -

    Slots

    +
    +

    Slots

    chains
    @@ -229,29 +203,25 @@

    Slots

    -
    -

    See also

    +
    +

    See also

    The function tagmMcmcTrain() to construct object of this class.

    -
    - -
    +
    -
    - +
    diff --git a/reference/MCMCSummary-class..html b/reference/MCMCSummary-class..html new file mode 100644 index 00000000..15d64af8 --- /dev/null +++ b/reference/MCMCSummary-class..html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/MCMCSummary-class.html b/reference/MCMCSummary-class.html new file mode 100644 index 00000000..15d64af8 --- /dev/null +++ b/reference/MCMCSummary-class.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/MCMCSummary.html b/reference/MCMCSummary.html new file mode 100644 index 00000000..15d64af8 --- /dev/null +++ b/reference/MCMCSummary.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/MLearn,formula,MSnSet,clusteringSchema,missing-method.html b/reference/MLearn,formula,MSnSet,clusteringSchema,missing-method.html new file mode 100644 index 00000000..635f5aa5 --- /dev/null +++ b/reference/MLearn,formula,MSnSet,clusteringSchema,missing-method.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/MLearn,formula,MSnSet,learnerSchema,numeric-method.html b/reference/MLearn,formula,MSnSet,learnerSchema,numeric-method.html new file mode 100644 index 00000000..635f5aa5 --- /dev/null +++ b/reference/MLearn,formula,MSnSet,learnerSchema,numeric-method.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/MLearn,formula,MSnSet,learnerSchema,xvalSpec-method.html b/reference/MLearn,formula,MSnSet,learnerSchema,xvalSpec-method.html new file mode 100644 index 00000000..635f5aa5 --- /dev/null +++ b/reference/MLearn,formula,MSnSet,learnerSchema,xvalSpec-method.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/MLearn-methods.html b/reference/MLearn-methods.html index 3fe437f7..65c26f6f 100644 --- a/reference/MLearn-methods.html +++ b/reference/MLearn-methods.html @@ -1,86 +1,59 @@ -The MLearn interface for machine learning — MLearn-methods • pRolocThe MLearn interface for machine learning — MLearn-methods • pRoloc - - -
    -
    +
    -
    - +
    +
    +
    -
    +

    This method implements MLInterfaces' MLean method for instances of the class "MSnSet".

    -
    -

    Methods

    +
    +

    Methods

    signature(formula = "formula", data = "MSnSet", .method = "learnerSchema", trainInd = "numeric")

    The learning problem is stated with the formula and applies @@ -103,28 +76,24 @@

    Methods

    -
    -

    See also

    +
    +

    See also

    The MLInterfaces package documentation, in particular MLearn.

    -
    - -
    +
    -
    - +
    diff --git a/reference/MLearnMSnSet.html b/reference/MLearnMSnSet.html new file mode 100644 index 00000000..635f5aa5 --- /dev/null +++ b/reference/MLearnMSnSet.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/MSnSetMLean.html b/reference/MSnSetMLean.html new file mode 100644 index 00000000..635f5aa5 --- /dev/null +++ b/reference/MSnSetMLean.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/MartInstance-class.html b/reference/MartInstance-class.html index cfae4144..47279b29 100644 --- a/reference/MartInstance-class.html +++ b/reference/MartInstance-class.html @@ -1,79 +1,53 @@ -Class "MartInstance" — MartInstance-class • pRolocClass "MartInstance" — MartInstance-class • pRoloc - - - + + + + +
    +
    +
    +
    -
    - +
    diff --git a/reference/MartInstance.html b/reference/MartInstance.html new file mode 100644 index 00000000..1e4ee092 --- /dev/null +++ b/reference/MartInstance.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/MartInstanceList-class.html b/reference/MartInstanceList-class.html new file mode 100644 index 00000000..1e4ee092 --- /dev/null +++ b/reference/MartInstanceList-class.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/MartInstanceList.html b/reference/MartInstanceList.html new file mode 100644 index 00000000..1e4ee092 --- /dev/null +++ b/reference/MartInstanceList.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/QSep-class-2.png b/reference/QSep-class-2.png index 88ebca7d..e9f8e784 100644 Binary files a/reference/QSep-class-2.png and b/reference/QSep-class-2.png differ diff --git a/reference/QSep-class.html b/reference/QSep-class.html index 14551395..e9642875 100644 --- a/reference/QSep-class.html +++ b/reference/QSep-class.html @@ -1,5 +1,5 @@ -Quantify resolution of a spatial proteomics experiment — QSep-class • pRolocQuantify resolution of a spatial proteomics experiment — QSep-class • pRoloc - - - +Note that the normalised distance matrix is not symmetric anymore + and the normalised distance ratios are proportional to the tightness + of the reference cluster (along the columns). +Missing values only affect the fractions containing the NA when + the distance is computed (see the example below) and further used when + calculating mean distances. Few missing values are expected to have + negligible effect, but data with a high proportion of missing data + will will produce skewed distances. In QSep, we take a + conservative approach, using the data as provided by the user, and + expect that the data missingness is handled before proceeding with this + or any other analysis."> + Skip to contents + + +
    +
    +
    -
    +

    The QSep infrastructure provide a way to quantify the @@ -135,15 +143,15 @@

    Quantify resolution of a spatial proteomics experiment

    -
    -

    Objects from the Class

    +
    +

    Objects from the Class

    Objects can be created by calls using the constructor QSep (see below).

    -
    -

    Slots

    +
    +

    Slots

    x:

    Object of class "matrix" containing the pairwise distance matrix, accessible with qseq(., norm = @@ -169,12 +177,12 @@

    Slots

    -
    -

    Extends

    +
    +

    Extends

    Class "Versioned", directly.

    -
    -

    Methods and functions

    +
    +

    Methods and functions

    QSeq

    signature(object = "MSnSet", fcol = "character"): constructor for QSep objects. The fcol argument @@ -224,19 +232,19 @@

    Methods and functions

    -
    -

    References

    +
    +

    References

    Assessing sub-cellular resolution in spatial proteomics experiments Laurent Gatto, Lisa M Breckels, Kathryn S Lilley bioRxiv 377630; doi: https://doi.org/10.1101/377630

    -
    -

    Author

    +
    +

    Author

    Laurent Gatto <lg390@cam.ac.uk>

    -
    -

    Examples

    +
    +

    Examples

    ## Test data from Christoforou et al. 2016
     library("pRolocdata")
     data(hyperLOPIT2015)
    @@ -523,23 +531,19 @@ 

    Examples

    -
    - -
    +
    -
    - +
    diff --git a/reference/QSep.html b/reference/QSep.html new file mode 100644 index 00000000..8e0a04c4 --- /dev/null +++ b/reference/QSep.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/Rplot001.png b/reference/Rplot001.png deleted file mode 100644 index 7082ba92..00000000 Binary files a/reference/Rplot001.png and /dev/null differ diff --git a/reference/Rplot002.png b/reference/Rplot002.png deleted file mode 100644 index 9f72c53d..00000000 Binary files a/reference/Rplot002.png and /dev/null differ diff --git a/reference/Rplot003.png b/reference/Rplot003.png deleted file mode 100644 index 4dcad56c..00000000 Binary files a/reference/Rplot003.png and /dev/null differ diff --git a/reference/Rplot004.png b/reference/Rplot004.png deleted file mode 100644 index 43b72275..00000000 Binary files a/reference/Rplot004.png and /dev/null differ diff --git a/reference/Rplot005.png b/reference/Rplot005.png deleted file mode 100644 index 7c6bc289..00000000 Binary files a/reference/Rplot005.png and /dev/null differ diff --git a/reference/Rplot006.png b/reference/Rplot006.png deleted file mode 100644 index 9d88109a..00000000 Binary files a/reference/Rplot006.png and /dev/null differ diff --git a/reference/Rplot007.png b/reference/Rplot007.png deleted file mode 100644 index 17980d87..00000000 Binary files a/reference/Rplot007.png and /dev/null differ diff --git a/reference/Rplot008.png b/reference/Rplot008.png deleted file mode 100644 index 81ed6da4..00000000 Binary files a/reference/Rplot008.png and /dev/null differ diff --git a/reference/Rplot009.png b/reference/Rplot009.png deleted file mode 100644 index a0b85213..00000000 Binary files a/reference/Rplot009.png and /dev/null differ diff --git a/reference/Rplot010.png b/reference/Rplot010.png deleted file mode 100644 index 9763e8fa..00000000 Binary files a/reference/Rplot010.png and /dev/null differ diff --git a/reference/Rplot011.png b/reference/Rplot011.png deleted file mode 100644 index 3254dfa0..00000000 Binary files a/reference/Rplot011.png and /dev/null differ diff --git a/reference/Rplot012.png b/reference/Rplot012.png deleted file mode 100644 index b1f5d648..00000000 Binary files a/reference/Rplot012.png and /dev/null differ diff --git a/reference/Rplot013.png b/reference/Rplot013.png deleted file mode 100644 index 19df4faf..00000000 Binary files a/reference/Rplot013.png and /dev/null differ diff --git a/reference/Rplot014.png b/reference/Rplot014.png deleted file mode 100644 index 2db2d88c..00000000 Binary files a/reference/Rplot014.png and /dev/null differ diff --git a/reference/Rplot015.png b/reference/Rplot015.png deleted file mode 100644 index af2c93fa..00000000 Binary files a/reference/Rplot015.png and /dev/null differ diff --git a/reference/Rplot016.png b/reference/Rplot016.png deleted file mode 100644 index 3bb5bf08..00000000 Binary files a/reference/Rplot016.png and /dev/null differ diff --git a/reference/Rplot017.png b/reference/Rplot017.png deleted file mode 100644 index 9aaa476a..00000000 Binary files a/reference/Rplot017.png and /dev/null differ diff --git a/reference/Rplot018.png b/reference/Rplot018.png deleted file mode 100644 index bca3eac4..00000000 Binary files a/reference/Rplot018.png and /dev/null differ diff --git a/reference/Rplot019.png b/reference/Rplot019.png deleted file mode 100644 index 361bc5c8..00000000 Binary files a/reference/Rplot019.png and /dev/null differ diff --git a/reference/Rplot020.png b/reference/Rplot020.png deleted file mode 100644 index 268c1f36..00000000 Binary files a/reference/Rplot020.png and /dev/null differ diff --git a/reference/Rplot021.png b/reference/Rplot021.png deleted file mode 100644 index 98418c1f..00000000 Binary files a/reference/Rplot021.png and /dev/null differ diff --git a/reference/Rplot022.png b/reference/Rplot022.png deleted file mode 100644 index 3117f2e8..00000000 Binary files a/reference/Rplot022.png and /dev/null differ diff --git a/reference/Rplot023.png b/reference/Rplot023.png deleted file mode 100644 index 694ba008..00000000 Binary files a/reference/Rplot023.png and /dev/null differ diff --git a/reference/Rplot024.png b/reference/Rplot024.png deleted file mode 100644 index 20e53144..00000000 Binary files a/reference/Rplot024.png and /dev/null differ diff --git a/reference/Rplot025.png b/reference/Rplot025.png deleted file mode 100644 index b77359c3..00000000 Binary files a/reference/Rplot025.png and /dev/null differ diff --git a/reference/Rplot026.png b/reference/Rplot026.png deleted file mode 100644 index b96faa95..00000000 Binary files a/reference/Rplot026.png and /dev/null differ diff --git a/reference/Rplot027.png b/reference/Rplot027.png deleted file mode 100644 index 77fd2bb7..00000000 Binary files a/reference/Rplot027.png and /dev/null differ diff --git a/reference/Rplot028.png b/reference/Rplot028.png deleted file mode 100644 index 5a033789..00000000 Binary files a/reference/Rplot028.png and /dev/null differ diff --git a/reference/Rplot029.png b/reference/Rplot029.png deleted file mode 100644 index 7903f248..00000000 Binary files a/reference/Rplot029.png and /dev/null differ diff --git a/reference/Rplot030.png b/reference/Rplot030.png deleted file mode 100644 index 66cd2c50..00000000 Binary files a/reference/Rplot030.png and /dev/null differ diff --git a/reference/Rplot031.png b/reference/Rplot031.png deleted file mode 100644 index f05b945f..00000000 Binary files a/reference/Rplot031.png and /dev/null differ diff --git a/reference/Rplot032.png b/reference/Rplot032.png deleted file mode 100644 index a7c1825c..00000000 Binary files a/reference/Rplot032.png and /dev/null differ diff --git a/reference/Rplot033.png b/reference/Rplot033.png deleted file mode 100644 index af59edde..00000000 Binary files a/reference/Rplot033.png and /dev/null differ diff --git a/reference/Rplot034.png b/reference/Rplot034.png deleted file mode 100644 index de1239b9..00000000 Binary files a/reference/Rplot034.png and /dev/null differ diff --git a/reference/Rplot035.png b/reference/Rplot035.png deleted file mode 100644 index 52ff923f..00000000 Binary files a/reference/Rplot035.png and /dev/null differ diff --git a/reference/Rplot036.png b/reference/Rplot036.png deleted file mode 100644 index 96deda6e..00000000 Binary files a/reference/Rplot036.png and /dev/null differ diff --git a/reference/Rplot037.png b/reference/Rplot037.png deleted file mode 100644 index c1a001c5..00000000 Binary files a/reference/Rplot037.png and /dev/null differ diff --git a/reference/Rplot038.png b/reference/Rplot038.png deleted file mode 100644 index 30ac1334..00000000 Binary files a/reference/Rplot038.png and /dev/null differ diff --git a/reference/Rplot039.png b/reference/Rplot039.png deleted file mode 100644 index ce67e9df..00000000 Binary files a/reference/Rplot039.png and /dev/null differ diff --git a/reference/Rplot040.png b/reference/Rplot040.png deleted file mode 100644 index 2cb3be7b..00000000 Binary files a/reference/Rplot040.png and /dev/null differ diff --git a/reference/Rplot041.png b/reference/Rplot041.png deleted file mode 100644 index 9aad0697..00000000 Binary files a/reference/Rplot041.png and /dev/null differ diff --git a/reference/Rplot042.png b/reference/Rplot042.png deleted file mode 100644 index da2b0f2e..00000000 Binary files a/reference/Rplot042.png and /dev/null differ diff --git a/reference/Rplot043.png b/reference/Rplot043.png deleted file mode 100644 index 2644222d..00000000 Binary files a/reference/Rplot043.png and /dev/null differ diff --git a/reference/Rplot044.png b/reference/Rplot044.png deleted file mode 100644 index 4899940a..00000000 Binary files a/reference/Rplot044.png and /dev/null differ diff --git a/reference/Rplot045.png b/reference/Rplot045.png deleted file mode 100644 index 208fa2ab..00000000 Binary files a/reference/Rplot045.png and /dev/null differ diff --git a/reference/Rplot046.png b/reference/Rplot046.png deleted file mode 100644 index 45b4ab7d..00000000 Binary files a/reference/Rplot046.png and /dev/null differ diff --git a/reference/Rplot047.png b/reference/Rplot047.png deleted file mode 100644 index 01265766..00000000 Binary files a/reference/Rplot047.png and /dev/null differ diff --git a/reference/Rplot048.png b/reference/Rplot048.png deleted file mode 100644 index 6f19c052..00000000 Binary files a/reference/Rplot048.png and /dev/null differ diff --git a/reference/Rplot049.png b/reference/Rplot049.png deleted file mode 100644 index ca6f6f0c..00000000 Binary files a/reference/Rplot049.png and /dev/null differ diff --git a/reference/Rplot050.png b/reference/Rplot050.png deleted file mode 100644 index 71dc434b..00000000 Binary files a/reference/Rplot050.png and /dev/null differ diff --git a/reference/Rplot051.png b/reference/Rplot051.png deleted file mode 100644 index cbb4d38a..00000000 Binary files a/reference/Rplot051.png and /dev/null differ diff --git a/reference/Rplot052.png b/reference/Rplot052.png deleted file mode 100644 index cffd08cd..00000000 Binary files a/reference/Rplot052.png and /dev/null differ diff --git a/reference/SpatProtVis-class-4.png b/reference/SpatProtVis-class-4.png index 315affaa..b4497b4d 100644 Binary files a/reference/SpatProtVis-class-4.png and b/reference/SpatProtVis-class-4.png differ diff --git a/reference/SpatProtVis-class-5.png b/reference/SpatProtVis-class-5.png index 2790bd5c..991384cb 100644 Binary files a/reference/SpatProtVis-class-5.png and b/reference/SpatProtVis-class-5.png differ diff --git a/reference/SpatProtVis-class-6.png b/reference/SpatProtVis-class-6.png index 698527dd..efdd0b1b 100644 Binary files a/reference/SpatProtVis-class-6.png and b/reference/SpatProtVis-class-6.png differ diff --git a/reference/SpatProtVis-class.html b/reference/SpatProtVis-class.html index dc663404..7fd3ee17 100644 --- a/reference/SpatProtVis-class.html +++ b/reference/SpatProtVis-class.html @@ -1,5 +1,5 @@ -Class SpatProtVis — SpatProtVis-class • pRolocClass SpatProtVis — SpatProtVis-class • pRoloc - - - + pRoloc + 1.45.2 -
    -
    - +
    +
    +
    -
    +

    A class for spatial proteomics visualisation, that upon instantiation, @@ -90,12 +69,13 @@

    Class SpatProtVis

    outputs, and is likely to be updated in the future.

    -
    +
    +

    Usage

    SpatProtVis(x, methods, dims, methargs, ...)
    -
    -

    Arguments

    +
    +

    Arguments

    @@ -125,8 +105,8 @@

    Arguments

    Additional arguments. Currently ignored.

    -
    -

    Slots

    +
    +

    Slots

    vismats:

    A "list" of matrices containing the feature projections in 2 dimensions.

    @@ -150,8 +130,8 @@

    Slots

    -
    -

    Methods

    +
    +

    Methods

    plot:

    Generates the figures for the respective methods and additional arguments defined in the @@ -165,18 +145,18 @@

    Methods

    -
    -

    Author

    +
    +

    Author

    Laurent Gatto <lg390@cam.ac.uk>

    -
    -

    See also

    +
    +

    See also

    The data for the individual visualisations is created by plot2D.

    -
    -

    Examples

    +
    +

    Examples

    library("pRolocdata")
     data(dunkley2006)
     ## Default parameters for a set of methods
    @@ -228,23 +208,19 @@ 

    Examples

    -
    - -
    +
    -
    - +
    diff --git a/reference/SpatProtVis.html b/reference/SpatProtVis.html new file mode 100644 index 00000000..0d166cc8 --- /dev/null +++ b/reference/SpatProtVis.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/ThetaRegRes-class.html b/reference/ThetaRegRes-class.html new file mode 100644 index 00000000..7959a075 --- /dev/null +++ b/reference/ThetaRegRes-class.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/ThetaRegRes.html b/reference/ThetaRegRes.html new file mode 100644 index 00000000..7959a075 --- /dev/null +++ b/reference/ThetaRegRes.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/[,ClustDistList,ANY,ANY,ANY-method.html b/reference/[,ClustDistList,ANY,ANY,ANY-method.html new file mode 100644 index 00000000..76fb34d9 --- /dev/null +++ b/reference/[,ClustDistList,ANY,ANY,ANY-method.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/[,ClustDistList,ANY,missing,missing-method.html b/reference/[,ClustDistList,ANY,missing,missing-method.html new file mode 100644 index 00000000..76fb34d9 --- /dev/null +++ b/reference/[,ClustDistList,ANY,missing,missing-method.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/[,MCMCChains,ANY,ANY,ANY-method.html b/reference/[,MCMCChains,ANY,ANY,ANY-method.html new file mode 100644 index 00000000..15d64af8 --- /dev/null +++ b/reference/[,MCMCChains,ANY,ANY,ANY-method.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/[,MCMCParams,ANY,ANY,ANY-method.html b/reference/[,MCMCParams,ANY,ANY,ANY-method.html new file mode 100644 index 00000000..15d64af8 --- /dev/null +++ b/reference/[,MCMCParams,ANY,ANY,ANY-method.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/[,MartInstanceList,ANY,ANY,ANY-method.html b/reference/[,MartInstanceList,ANY,ANY,ANY-method.html new file mode 100644 index 00000000..1e4ee092 --- /dev/null +++ b/reference/[,MartInstanceList,ANY,ANY,ANY-method.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/[,MartInstanceList,ANY,ANY-method.html b/reference/[,MartInstanceList,ANY,ANY-method.html new file mode 100644 index 00000000..1e4ee092 --- /dev/null +++ b/reference/[,MartInstanceList,ANY,ANY-method.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/[,MartInstanceList-method.html b/reference/[,MartInstanceList-method.html new file mode 100644 index 00000000..1e4ee092 --- /dev/null +++ b/reference/[,MartInstanceList-method.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/[[,ClustDistList,ANY,ANY-method.html b/reference/[[,ClustDistList,ANY,ANY-method.html new file mode 100644 index 00000000..76fb34d9 --- /dev/null +++ b/reference/[[,ClustDistList,ANY,ANY-method.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/[[,ClustDistList,ANY,missing-method.html b/reference/[[,ClustDistList,ANY,missing-method.html new file mode 100644 index 00000000..76fb34d9 --- /dev/null +++ b/reference/[[,ClustDistList,ANY,missing-method.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/[[,MCMCChains,ANY,ANY-method.html b/reference/[[,MCMCChains,ANY,ANY-method.html new file mode 100644 index 00000000..15d64af8 --- /dev/null +++ b/reference/[[,MCMCChains,ANY,ANY-method.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/[[,MCMCParams,ANY,ANY-method.html b/reference/[[,MCMCParams,ANY,ANY-method.html new file mode 100644 index 00000000..15d64af8 --- /dev/null +++ b/reference/[[,MCMCParams,ANY,ANY-method.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/[[,MartInstanceList,ANY,ANY-method.html b/reference/[[,MartInstanceList,ANY,ANY-method.html new file mode 100644 index 00000000..1e4ee092 --- /dev/null +++ b/reference/[[,MartInstanceList,ANY,ANY-method.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/[[,MartInstanceList-method.html b/reference/[[,MartInstanceList-method.html new file mode 100644 index 00000000..1e4ee092 --- /dev/null +++ b/reference/[[,MartInstanceList-method.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/addGoAnnotations.html b/reference/addGoAnnotations.html index d5d34589..1060e4e3 100644 --- a/reference/addGoAnnotations.html +++ b/reference/addGoAnnotations.html @@ -1,80 +1,52 @@ -Add GO annotations — addGoAnnotations • pRoloc - - -
    -
    -
    - + + +
    +
    +
    +
    -
    +

    Adds GO annotations to the feature data

    -
    +
    +

    Usage

    addGoAnnotations(
       object,
       params,
    @@ -85,8 +57,8 @@ 

    Add GO annotations

    )
    -
    -

    Arguments

    +
    +

    Arguments

    object
    @@ -117,19 +89,19 @@

    Arguments

    Other arguments passed to makeGoSet

    -
    -

    Value

    +
    +

    Value

    An updated MSnSet with new feature data column called GOAnnotations containing a matrix of GO annotations

    -
    -

    Author

    +
    +

    Author

    Lisa M Breckels

    -
    -

    Examples

    +
    +

    Examples

    library(pRolocdata)
     data(dunkley2006)
     par <- setAnnotationParams(inputs =
    @@ -145,20 +117,21 @@ 

    Examples

    ## add protein sets/annotation information xx <- addGoAnnotations(dunkley2006, par) dim(fData(xx)$GOAnnotations) -#> [1] 689 166 +#> [1] 689 79 ## filter sets xx <- filterMinMarkers(xx, n = 50) -#> Retaining 18 out of 166 in GOAnnotations +#> Retaining 3 out of 79 in GOAnnotations dim(fData(xx)$GOAnnotations) -#> [1] 689 18 +#> [1] 689 3 xx <- filterMaxMarkers(xx, p = .25) -#> Retaining 14 out of 18 in GOAnnotations +#> Retaining 2 out of 3 in GOAnnotations dim(fData(xx)$GOAnnotations) -#> [1] 689 14 +#> [1] 689 2 ## Subset for specific protein sets sub <- subsetMarkers(xx, keep = c("vacuole")) +#> Warning: GO markers vacuole not found ## Order protein sets res <- orderGoAnnotations(xx, k = 1:3, p = 1/3, verbose = FALSE) @@ -168,23 +141,19 @@

    Examples

    }
    -
    - -
    +
    -
    - +
    diff --git a/reference/addLegend.html b/reference/addLegend.html index 166aaf27..61251beb 100644 --- a/reference/addLegend.html +++ b/reference/addLegend.html @@ -1,80 +1,52 @@ -Adds a legend — addLegend • pRoloc - - -
    -
    -
    - + + +
    +
    +
    +
    -
    +

    Adds a legend to a plot2D figure.

    -
    +
    +

    Usage

    addLegend(
       object,
       fcol = "markers",
    @@ -86,8 +58,8 @@ 

    Adds a legend

    )
    -
    -

    Arguments

    +
    +

    Arguments

    object
    @@ -121,38 +93,34 @@

    Arguments

    Additional parameters passed to legend.

    -
    -

    Value

    +
    +

    Value

    Invisibly returns NULL

    -
    -

    Details

    +
    +

    Details

    The function has been updated in version 1.3.6 to recycle the default colours when more organelle classes are provided. See plot2D for details.

    -
    -

    Author

    +
    +

    Author

    Laurent Gatto

    -
    - -
    +
    -
    - +
    diff --git a/reference/addMarkers-1.png b/reference/addMarkers-1.png index dd4e391f..c7152329 100644 Binary files a/reference/addMarkers-1.png and b/reference/addMarkers-1.png differ diff --git a/reference/addMarkers.html b/reference/addMarkers.html index c1e05df9..7268eba2 100644 --- a/reference/addMarkers.html +++ b/reference/addMarkers.html @@ -1,81 +1,57 @@ -Adds markers to the data — addMarkers • pRolocAdds markers to the data — addMarkers • pRoloc - - -
    -
    -
    - + + +
    +
    +
    +
    -
    +

    The function adds a 'markers' feature variable. These markers are read from a comma separated values (csv) spreadsheet file. This markers file is expected to have 2 columns (others are ignored) @@ -84,12 +60,13 @@

    Adds markers to the data

    by the pRolocmarkers function can also be used.

    -
    +
    +

    Usage

    addMarkers(object, markers, mcol = "markers", fcol, verbose = TRUE)
    -
    -

    Arguments

    +
    +

    Arguments

    object
    @@ -118,30 +95,30 @@

    Arguments

    and marker table should be printed to the console.

    -
    -

    Value

    +
    +

    Value

    A new instance of class MSnSet with an additional markers feature variable.

    -
    -

    Details

    +
    +

    Details

    It is essential to assure that featureNames(object) (or fcol, see below) and marker names (first column) match, i.e. the same feature identifiers and case fold are used.

    -
    -

    See also

    +
    +

    See also

    See pRolocmarkers for a list of spatial markers and markers for details about markers encoding.

    -
    -

    Author

    +
    +

    Author

    Laurent Gatto

    -
    -

    Examples

    +
    +

    Examples

    library("pRolocdata")
     data(dunkley2006)
     atha <- pRolocmarkers("atha")
    @@ -153,8 +130,8 @@ 

    Examples

    marked <- addMarkers(dunkley2006, atha) #> Markers in data: 255 out of 689 #> organelleMarkers -#> ENV ER ER lumen ER membrane Golgi -#> 3 21 9 42 27 +#> ER ER Lumen ER Membrane Envelope Golgi +#> 21 9 42 3 27 #> Mitochondrion PM Plastid Ribosome STR #> 50 42 22 8 2 #> TGN Vacuole unknown @@ -166,8 +143,8 @@

    Examples

    marked <- addMarkers(marked, atha, mcol = "markers2") #> Markers in data: 255 out of 689 #> organelleMarkers -#> ENV ER ER lumen ER membrane Golgi -#> 3 21 9 42 27 +#> ER ER Lumen ER Membrane Envelope Golgi +#> 21 9 42 3 27 #> Mitochondrion PM Plastid Ribosome STR #> 50 42 22 8 2 #> TGN Vacuole unknown @@ -181,23 +158,19 @@

    Examples

    -
    - -
    +
    -
    - +
    diff --git a/reference/andy2011params.html b/reference/andy2011params.html new file mode 100644 index 00000000..84f163a9 --- /dev/null +++ b/reference/andy2011params.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/as.data.frame.MartInstance.html b/reference/as.data.frame.MartInstance.html new file mode 100644 index 00000000..1e4ee092 --- /dev/null +++ b/reference/as.data.frame.MartInstance.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/as.data.frame.MartInstanceList.html b/reference/as.data.frame.MartInstanceList.html new file mode 100644 index 00000000..1e4ee092 --- /dev/null +++ b/reference/as.data.frame.MartInstanceList.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/chains.html b/reference/chains.html new file mode 100644 index 00000000..15d64af8 --- /dev/null +++ b/reference/chains.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/checkFeatureNamesOverlap.html b/reference/checkFeatureNamesOverlap.html index 51a7f020..6e9fb2a3 100644 --- a/reference/checkFeatureNamesOverlap.html +++ b/reference/checkFeatureNamesOverlap.html @@ -1,87 +1,60 @@ -Check feature names overlap — checkFeatureNamesOverlap • pRoloc - - -
    -
    -
    - + + +
    +
    +
    +
    -
    +

    Checks the marker and unknown feature overlap of two MSnSet instances.

    -
    +
    +

    Usage

    checkFeatureNamesOverlap(x, y, fcolx = "markers", fcoly, verbose = TRUE)
    -
    -

    Arguments

    +
    +

    Arguments

    x
    @@ -108,19 +81,19 @@

    Arguments

    out on the console.

    -
    -

    Value

    +
    +

    Value

    Invisibly returns a named list of common markers, unique x markers, unique y markers in, common unknowns, unique x unknowns and unique y unknowns.

    -
    -

    Author

    +
    +

    Author

    Laurent Gatto

    -
    -

    Examples

    +
    +

    Examples

    library("pRolocdata")
     data(andy2011)
     data(andy2011goCC)
    @@ -145,23 +118,19 @@ 

    Examples

    #> [1] "ABC"
    -
    - -
    +
    -
    - +
    diff --git a/reference/checkFvarOverlap.html b/reference/checkFvarOverlap.html index 6315f759..3aec7854 100644 --- a/reference/checkFvarOverlap.html +++ b/reference/checkFvarOverlap.html @@ -1,87 +1,60 @@ -Compare a feature variable overlap — checkFvarOverlap • pRoloc - - -
    -
    -
    - + + +
    +
    +
    +
    -
    +

    Extracts qualitative feature variables from two MSnSet instances and compares with a contingency table.

    -
    +
    +

    Usage

    checkFvarOverlap(x, y, fcolx = "markers", fcoly, verbose = TRUE)
    -
    -

    Arguments

    +
    +

    Arguments

    x
    @@ -108,18 +81,18 @@

    Arguments

    the the feature variables is printed out.

    -
    -

    Value

    +
    +

    Value

    Invisibly returns a named list with the values of the diagonal, upper and lower triangles of the contingency table.

    -
    -

    Author

    +
    +

    Author

    Laurent Gatto

    -
    -

    Examples

    +
    +

    Examples

    library("pRolocdata")
     data(dunkley2006)
     res <- checkFvarOverlap(dunkley2006, dunkley2006,
    @@ -143,23 +116,19 @@ 

    Examples

    #> $ upper.mismatches: int [1:39] 21 0 0 0 0 0 0 17 0 27 ...
    -
    - -
    +
    -
    - +
    diff --git a/reference/chi2,matrix,matrix-method.html b/reference/chi2,matrix,matrix-method.html new file mode 100644 index 00000000..72f119b7 --- /dev/null +++ b/reference/chi2,matrix,matrix-method.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/chi2,matrix,numeric-method.html b/reference/chi2,matrix,numeric-method.html new file mode 100644 index 00000000..72f119b7 --- /dev/null +++ b/reference/chi2,matrix,numeric-method.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/chi2,numeric,matrix-method.html b/reference/chi2,numeric,matrix-method.html new file mode 100644 index 00000000..72f119b7 --- /dev/null +++ b/reference/chi2,numeric,matrix-method.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/chi2,numeric,numeric-method.html b/reference/chi2,numeric,numeric-method.html new file mode 100644 index 00000000..72f119b7 --- /dev/null +++ b/reference/chi2,numeric,numeric-method.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/chi2-methods.html b/reference/chi2-methods.html index 6332e400..0c1f148f 100644 --- a/reference/chi2-methods.html +++ b/reference/chi2-methods.html @@ -1,5 +1,5 @@ -The PCP 'chi square' method — chi2-methods • pRolocThe PCP 'chi square' method — chi2-methods • pRoloc - - -
    -
    +
    -
    - +
    +
    +
    -
    +

    In the original protein correlation profiling (PCP), Andersen et al. use the peptide normalised profiles along gradient fractions and compared them with the reference profiles (or set of profiles) by @@ -97,8 +79,8 @@

    The PCP 'chi square' method

    -
    -

    Methods

    +
    +

    Methods

    signature(x = "matrix", y = "matrix", method = "character", fun = "NULL", na.rm = "logical")

    Compute nrow(x) times nrow(y) \(Chi^2\) values, @@ -131,8 +113,8 @@

    Methods

    -
    -

    References

    +
    +

    References

    Andersen, J. S., Wilkinson, C. J., Mayor, T., Mortensen, P. et al., Proteomic characterization of the human centrosome by protein correlation profiling. Nature 2003, 426, 570 - 574.

    @@ -141,62 +123,58 @@

    References

    spectrometry and protein correlation profiling. Mol. Cell. Proteomics 2007, 6, 2045 - 2057.

    -
    -

    See also

    +
    +

    See also

    -
    -

    Author

    +
    +

    Author

    Laurent Gatto <lg390@cam.ac.uk>

    -
    -

    Examples

    +
    +

    Examples

    mrk <- rnorm(6)
     prot <- matrix(rnorm(60), ncol = 6)
     chi2(mrk, prot, method = "Andersen2003")
    -#>  [1] 0.6350206 1.2372019 0.6256963 1.2917212 1.6689025 0.4509966 2.9380140
    -#>  [8] 2.6580586 1.9303589 1.2332261
    +#>  [1] 1.889892 4.245629 3.462126 3.920920 1.775587 4.896485 3.378966 3.712108
    +#>  [9] 3.825797 2.702991
     chi2(mrk, prot, method = "Wiese2007")
    -#>  [1]  8.303798 19.636347  7.704880  1.770659  7.995207  7.455503 10.919410
    -#>  [8] 22.276266 14.361729  2.902475
    +#>  [1]  -3.159876  11.164487 -11.367923   2.059008  -2.893832   2.777984
    +#>  [7] -10.243224   4.752001   5.091183  -1.412432
     
     pepmark <- matrix(rnorm(18), ncol = 6)
     pepprot <- matrix(rnorm(60), ncol = 6)
     chi2(pepmark, pepprot)
    -#>           [,1]     [,2]     [,3]
    -#>  [1,] 2.359914 1.055094 1.454468
    -#>  [2,] 5.359839 3.192047 2.977774
    -#>  [3,] 2.225215 2.016703 3.105763
    -#>  [4,] 4.491698 3.618997 3.749134
    -#>  [5,] 2.902012 1.682787 1.601635
    -#>  [6,] 3.080319 1.533254 1.728296
    -#>  [7,] 1.423951 1.201455 2.078399
    -#>  [8,] 5.528471 3.571142 3.462414
    -#>  [9,] 3.511921 3.247617 3.412119
    -#> [10,] 4.036010 2.393212 2.255992
    +#>            [,1]      [,2]      [,3]
    +#>  [1,] 1.1599707 0.8097051 2.1489121
    +#>  [2,] 1.1419376 1.5022289 1.6690684
    +#>  [3,] 0.9912393 2.6529197 0.9081877
    +#>  [4,] 1.0178592 1.5370036 1.0208939
    +#>  [5,] 2.0740377 5.3225284 2.2989775
    +#>  [6,] 1.7693526 0.5850152 1.7361577
    +#>  [7,] 1.7893898 1.9202860 1.4503931
    +#>  [8,] 0.5207063 1.7531744 0.3803269
    +#>  [9,] 0.5394268 1.1915734 0.8901226
    +#> [10,] 0.7455153 0.7556420 1.2791638
     chi2(pepmark, pepprot, fun = sum)
    -#>  [1]  4.869476 11.529660  7.347681 11.859828  6.186434  6.341870  4.703806
    -#>  [8] 12.562027 10.171657  8.685214
    +#>  [1] 4.118588 4.313235 4.552347 3.575757 9.695544 4.090525 5.160069 2.654208
    +#>  [9] 2.621123 2.780321
     
    -
    - -
    +
    -
    - +
    diff --git a/reference/chi2.html b/reference/chi2.html new file mode 100644 index 00000000..72f119b7 --- /dev/null +++ b/reference/chi2.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/classWeights.html b/reference/classWeights.html index 2758f736..9fc99656 100644 --- a/reference/classWeights.html +++ b/reference/classWeights.html @@ -1,81 +1,57 @@ -Calculate class weights — classWeights • pRolocCalculate class weights — classWeights • pRoloc - - -
    -
    -
    - + + +
    +
    +
    +
    -
    +

    Calculates class weights to be used for parameter optimisation and classification such as svmOptimisation or svmClassification - see the pRoloc tutorial @@ -84,12 +60,13 @@

    Calculate class weights

    observations.

    -
    +
    +

    Usage

    classWeights(object, fcol = "markers")
    -
    -

    Arguments

    +
    +

    Arguments

    object
    @@ -100,17 +77,17 @@

    Arguments

    The name of the features to be weighted

    -
    -

    Value

    +
    +

    Value

    A table of class weights

    -
    -

    Author

    +
    +

    Author

    Laurent Gatto

    -
    -

    Examples

    +
    +

    Examples

    library("pRolocdata")
     data(hyperLOPIT2015)
     classWeights(hyperLOPIT2015)
    @@ -138,23 +115,19 @@ 

    Examples

    #> 0.05000000 0.05263158 0.07692308 0.04761905
    -
    - -
    +
    -
    - +
    diff --git a/reference/clustDist-1.png b/reference/clustDist-1.png index 0c31ef0e..040c4d24 100644 Binary files a/reference/clustDist-1.png and b/reference/clustDist-1.png differ diff --git a/reference/clustDist-2.png b/reference/clustDist-2.png index 61bf5f01..3eabd664 100644 Binary files a/reference/clustDist-2.png and b/reference/clustDist-2.png differ diff --git a/reference/clustDist.html b/reference/clustDist.html index 6ed06ed7..5a348af8 100644 --- a/reference/clustDist.html +++ b/reference/clustDist.html @@ -1,87 +1,60 @@ -Pairwise Distance Computation for Protein Information Sets — clustDist • pRoloc - - -
    -
    -
    - + + +
    +
    +
    +
    -
    +

    This function computes the mean (normalised) pairwise distances for pre-defined sets of proteins.

    -
    +
    +

    Usage

    clustDist(object, k = 1:5, fcol = "GOAnnotations", n = 5, verbose = TRUE, seed)
    -
    -

    Arguments

    +
    +

    Arguments

    object
    @@ -112,16 +85,16 @@

    Arguments

    An optional seed for the random number generator.

    -
    -

    Value

    +
    +

    Value

    An instance of "ClustDistList" containing a "ClustDist" instance for every protein set, which summarises the algorithm information such as the number of k's tested for the kmeans, and mean and normalised pairwise Euclidean distances per numer of component clusters tested.

    -
    -

    Details

    +
    +

    Details

    The input to the function is a MSnSet dataset containing a matrix appended to the feature data slot identifying the membership of protein instances to @@ -140,18 +113,18 @@

    Details

    distances per numer of component clusters tested. See ?ClustDist for more details.

    -
    -

    See also

    +
    +

    See also

    For class definitions see "ClustDistList" and "ClustDist".

    -
    -

    Author

    +
    +

    Author

    Lisa Breckels

    -
    -

    Examples

    +
    +

    Examples

    library(pRolocdata)
     data(dunkley2006)
     par <- setAnnotationParams(inputs =
    @@ -168,12 +141,12 @@ 

    Examples

    xx <- addGoAnnotations(dunkley2006, par) ## filter xx <- filterMinMarkers(xx, n = 50) -#> Retaining 18 out of 166 in GOAnnotations +#> Retaining 3 out of 79 in GOAnnotations xx <- filterMaxMarkers(xx, p = .25) -#> Retaining 14 out of 18 in GOAnnotations +#> Retaining 2 out of 3 in GOAnnotations ## get distances for protein sets dd <- clustDist(xx) -#> | | | 0% | |===== | 7% | |========== | 14% | |=============== | 21% | |==================== | 29% | |========================= | 36% | |============================== | 43% | |=================================== | 50% | |======================================== | 57% | |============================================= | 64% | |================================================== | 71% | |======================================================= | 79% | |============================================================ | 86% | |================================================================= | 93% | |======================================================================| 100% +#> | | | 0% | |=================================== | 50% | |======================================================================| 100% ## plot clusters for first 'ClustDist' object ## in the 'ClustDistList' plot(dd[[1]], xx) @@ -193,23 +166,19 @@

    Examples

    }
    -
    - -
    +
    -
    - +
    diff --git a/reference/col1.html b/reference/col1.html new file mode 100644 index 00000000..38b91539 --- /dev/null +++ b/reference/col1.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/col2.html b/reference/col2.html new file mode 100644 index 00000000..38b91539 --- /dev/null +++ b/reference/col2.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/combineThetaRegRes.html b/reference/combineThetaRegRes.html new file mode 100644 index 00000000..7959a075 --- /dev/null +++ b/reference/combineThetaRegRes.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/data1.html b/reference/data1.html new file mode 100644 index 00000000..38b91539 --- /dev/null +++ b/reference/data1.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/data2.html b/reference/data2.html new file mode 100644 index 00000000..38b91539 --- /dev/null +++ b/reference/data2.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/defunct.html b/reference/defunct.html index 9edf3efd..0fc78643 100644 --- a/reference/defunct.html +++ b/reference/defunct.html @@ -1,81 +1,57 @@ -pRoloc Deprecated and Defunct — Deprecated • pRolocpRoloc Deprecated and Defunct — Deprecated • pRoloc - - -
    -
    +
    -
    - +
    +
    +
    -
    +

    The function, class, or data object you have asked for has been deprecated or made defunct.

    Deprecated: minClassScore; use the replacement getPredictions

    @@ -86,23 +62,18 @@

    pRoloc Deprecated and Defunct

    -
    - -
    +
    -
    - +
    diff --git a/reference/dunkley2006params.html b/reference/dunkley2006params.html new file mode 100644 index 00000000..84f163a9 --- /dev/null +++ b/reference/dunkley2006params.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/empPvalues.html b/reference/empPvalues.html index 21dbf098..db458ae2 100644 --- a/reference/empPvalues.html +++ b/reference/empPvalues.html @@ -1,91 +1,66 @@ -Estimate empirical p-values for \(Chi^2\) protein correlations. — empPvalues • pRolocEstimate empirical p-values for \(Chi^2\) protein correlations. — empPvalues • pRoloc - - -
    -
    +
    +
    +
    -
    - -
    +

    Andersen et al. (2003) used a fixed \(Chi^2\) threshold of 0.05 to identify organelle-specific candidates. This function computes empirical p-values by permutation the markers relative intensities and computed null \(Chi^2\) values.

    -
    +
    +

    Usage

    empPvalues(marker, corMatrix, n = 100, ...)
    -
    -

    Arguments

    +
    +

    Arguments

    marker

    A numerics with markers relative intensities.

    @@ -101,27 +76,27 @@

    Arguments

    Additional parameters to be passed to chi2.

    -
    -

    Value

    +
    +

    Value

    A numeric of length nrow(corMatrix).

    -
    -

    Author

    +
    +

    Author

    Laurent Gatto <lg390@cam.ac.uk>

    -
    -

    See also

    +
    +

    See also

    chi2 for \(Chi^2\) calculation.

    -
    -

    References

    +
    +

    References

    Andersen, J. S., Wilkinson, C. J., Mayor, T., Mortensen, P. et al., Proteomic characterization of the human centrosome by protein correlation profiling. Nature 2003, 426, 570 - 574.

    -
    -

    Examples

    +
    +

    Examples

    set.seed(1)
     mrk <- rnorm(6, 5, 1)
     prot <- rbind(matrix(rnorm(120, 5, 1), ncol = 6),
    @@ -133,23 +108,19 @@ 

    Examples

    #> [16] 0.90 0.34 0.62 0.18 0.32 0.00
    -
    - -
    +
    -
    - +
    diff --git a/reference/f1Count,GenRegRes-method.html b/reference/f1Count,GenRegRes-method.html new file mode 100644 index 00000000..7959a075 --- /dev/null +++ b/reference/f1Count,GenRegRes-method.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/f1Count,ThetaRegRes-method.html b/reference/f1Count,ThetaRegRes-method.html new file mode 100644 index 00000000..7959a075 --- /dev/null +++ b/reference/f1Count,ThetaRegRes-method.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/f1Count.html b/reference/f1Count.html new file mode 100644 index 00000000..7959a075 --- /dev/null +++ b/reference/f1Count.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/fDataToUnknown.html b/reference/fDataToUnknown.html index e9b68b66..23c539f8 100644 --- a/reference/fDataToUnknown.html +++ b/reference/fDataToUnknown.html @@ -1,87 +1,60 @@ -Update a feature variable — fDataToUnknown • pRoloc - - -
    -
    -
    - + + +
    +
    +
    +
    -
    +

    This function replaces a string or regular expression in a feature variable using the sub function.

    -
    +
    +

    Usage

    fDataToUnknown(object, fcol = "markers", from = "^$", to = "unknown", ...)
    -
    -

    Arguments

    +
    +

    Arguments

    object
    @@ -111,17 +84,17 @@

    Arguments

    Additional arguments passed to sub.

    -
    -

    Value

    +
    +

    Value

    An updated MSnSet.

    -
    -

    Author

    +
    +

    Author

    Laurent Gatto

    -
    -

    Examples

    +
    +

    Examples

    library("pRolocdata")
     data(dunkley2006)
     getMarkers(dunkley2006, "markers")
    @@ -140,23 +113,19 @@ 

    Examples

    #> 20 19 13 428 21
    -
    - -
    +
    -
    - +
    diff --git a/reference/favourPrimary.html b/reference/favourPrimary.html new file mode 100644 index 00000000..7959a075 --- /dev/null +++ b/reference/favourPrimary.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/filterAttrs.html b/reference/filterAttrs.html new file mode 100644 index 00000000..1e4ee092 --- /dev/null +++ b/reference/filterAttrs.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/filterBinMSnSet.html b/reference/filterBinMSnSet.html index ee545678..b359447f 100644 --- a/reference/filterBinMSnSet.html +++ b/reference/filterBinMSnSet.html @@ -1,87 +1,60 @@ -Filter a binary MSnSet — filterBinMSnSet • pRoloc - - -
    -
    -
    - + + +
    +
    +
    +
    -
    +

    Removes columns or rows that have a certain proportion or absolute number of 0 values.

    -
    +
    +

    Usage

    filterBinMSnSet(object, MARGIN = 2, t, q, verbose = TRUE)
    -
    -

    Arguments

    +
    +

    Arguments

    object
    @@ -108,22 +81,22 @@

    Arguments

    printed. Default is TRUE.

    -
    -

    Value

    +
    +

    Value

    A filtered MSnSet.

    -
    -

    See also

    + -
    -

    Author

    +
    +

    Author

    Laurent Gatto

    -
    -

    Examples

    +
    +

    Examples

    set.seed(1)
     m <- matrix(sample(0:1, 25, replace=TRUE), 5)
     m[1, ] <- 0
    @@ -185,23 +158,19 @@ 

    Examples

    #> e 1 0
    -
    - -
    +
    -
    - +
    diff --git a/reference/filterMaxMarkers.html b/reference/filterMaxMarkers.html index 97ec7bc7..70356d25 100644 --- a/reference/filterMaxMarkers.html +++ b/reference/filterMaxMarkers.html @@ -1,87 +1,60 @@ -Removes class/annotation information from a matrix of candidate markers that appear in the fData. — filterMaxMarkers • pRoloc - - -
    -
    -
    - + + +
    +
    +
    +
    -
    +

    Removes annotation information that contain more that a certain number/percentage of proteins

    -
    +
    +

    Usage

    filterMaxMarkers(object, n, p = 0.2, fcol = "GOAnnotations", verbose = TRUE)
    -
    -

    Arguments

    +
    +

    Arguments

    object
    @@ -110,32 +83,28 @@

    Arguments

    Number of marker candidates retained after filtering.

    -
    -

    Value

    +
    +

    Value

    An updated MSnSet

    -
    -

    See also

    +
    +

    See also

    addGoAnnotations and example therein.

    -
    - -
    +
    -
    - +
    diff --git a/reference/filterMinMarkers.html b/reference/filterMinMarkers.html index 24d7bab4..300f56c2 100644 --- a/reference/filterMinMarkers.html +++ b/reference/filterMinMarkers.html @@ -1,87 +1,60 @@ -Removes class/annotation information from a matrix of candidate markers that appear in the fData. — filterMinMarkers • pRoloc - - -
    -
    -
    - + + +
    +
    +
    +
    -
    +

    Removes annotation information that contain less that a certain number/percentage of proteins

    -
    +
    +

    Usage

    filterMinMarkers(object, n = 10, p, fcol = "GOAnnotations", verbose = TRUE)
    -
    -

    Arguments

    +
    +

    Arguments

    object
    @@ -105,36 +78,32 @@

    Arguments

    Number of marker candidates retained after filtering.

    -
    -

    Value

    +
    +

    Value

    An updated MSnSet.

    -
    -

    See also

    +
    +

    See also

    addGoAnnotations and example therein.

    -
    -

    Author

    +
    +

    Author

    Lisa M Breckels

    -
    - -
    +
    -
    - +
    diff --git a/reference/filterZeroCols.html b/reference/filterZeroCols.html index e2100656..500769fb 100644 --- a/reference/filterZeroCols.html +++ b/reference/filterZeroCols.html @@ -1,89 +1,62 @@ -Remove 0 columns/rows — filterZeroCols • pRoloc - - -
    -
    -
    - + + +
    +
    +
    +
    -
    +

    Removes all assay data columns/rows that are composed of only 0, i.e. have a colSum/rowSum of 0.

    -
    +
    +

    Usage

    filterZeroCols(object, verbose = TRUE)
     
     filterZeroRows(object, verbose = TRUE)
    -
    -

    Arguments

    +
    +

    Arguments

    object
    @@ -95,17 +68,17 @@

    Arguments

    columns/row (if any).

    -
    -

    Value

    +
    +

    Value

    An MSnSet.

    -
    -

    Author

    +
    +

    Author

    Laurent Gatto

    -
    -

    Examples

    +
    +

    Examples

    library("pRolocdata")
     data(andy2011goCC)
     any(colSums(exprs(andy2011goCC)) == 0)
    @@ -118,23 +91,19 @@ 

    Examples

    #> [1] 564
    -
    - -
    +
    -
    - +
    diff --git a/reference/filterZeroRows.html b/reference/filterZeroRows.html new file mode 100644 index 00000000..90bc6fc0 --- /dev/null +++ b/reference/filterZeroRows.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/flipGoTermId.html b/reference/flipGoTermId.html new file mode 100644 index 00000000..0ecfee75 --- /dev/null +++ b/reference/flipGoTermId.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/getAnnotationParams.html b/reference/getAnnotationParams.html new file mode 100644 index 00000000..84f163a9 --- /dev/null +++ b/reference/getAnnotationParams.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/getF1Scores,GenRegRes-method.html b/reference/getF1Scores,GenRegRes-method.html new file mode 100644 index 00000000..7959a075 --- /dev/null +++ b/reference/getF1Scores,GenRegRes-method.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/getF1Scores,ThetaRegRes-method.html b/reference/getF1Scores,ThetaRegRes-method.html new file mode 100644 index 00000000..7959a075 --- /dev/null +++ b/reference/getF1Scores,ThetaRegRes-method.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/getF1Scores.html b/reference/getF1Scores.html new file mode 100644 index 00000000..7959a075 --- /dev/null +++ b/reference/getF1Scores.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/getFilterList.html b/reference/getFilterList.html new file mode 100644 index 00000000..1e4ee092 --- /dev/null +++ b/reference/getFilterList.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/getGOEvidenceCodes.html b/reference/getGOEvidenceCodes.html new file mode 100644 index 00000000..e51639bc --- /dev/null +++ b/reference/getGOEvidenceCodes.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/getGOFromFeatures.html b/reference/getGOFromFeatures.html index 331847d4..d8e0718e 100644 --- a/reference/getGOFromFeatures.html +++ b/reference/getGOFromFeatures.html @@ -1,82 +1,55 @@ -Retrieve GO terms for feature names — getGOFromFeatures • pRoloc - - -
    -
    -
    - + + +
    +
    +
    +
    -
    +

    The function pulls the gene ontology (GO) terms for a set of feature names.

    -
    +
    +

    Usage

    getGOFromFeatures(
       id,
       namespace = "cellular_component",
    @@ -87,8 +60,8 @@ 

    Retrieve GO terms for feature names

    )
    -
    -

    Arguments

    +
    +

    Arguments

    id
    @@ -128,17 +101,17 @@

    Arguments

    500). If set to NULL, the query is performed in full.

    -
    -

    Value

    +
    +

    Value

    A data.frame with relevant GO terms.

    -
    -

    Author

    +
    +

    Author

    Laurent Gatto

    -
    -

    Examples

    +
    +

    Examples

    library(pRolocdata)
     data(dunkley2006)
     data(dunkley2006params)
    @@ -150,95 +123,31 @@ 

    Examples

    #> Created on Tue Mar 12 07:25:12 2024 fn <- featureNames(dunkley2006)[1:5] getGOFromFeatures(fn, params = dunkley2006params) -#> tair_locus go_id namespace_1003 -#> 3 AT1G09210 GO:0005783 cellular_component -#> 7 AT1G09210 GO:0005788 cellular_component -#> 9 AT1G09210 GO:0005783 cellular_component -#> 10 AT1G09210 GO:0005576 cellular_component -#> 11 AT1G09210 GO:0005739 cellular_component -#> 12 AT1G09210 GO:0099503 cellular_component -#> 14 AT1G09210 GO:0000325 cellular_component -#> 16 AT1G21750 GO:0005783 cellular_component -#> 17 AT1G21750 GO:0005634 cellular_component -#> 20 AT1G21750 GO:0005773 cellular_component -#> 21 AT1G21750 GO:0005788 cellular_component -#> 22 AT1G21750 GO:0005783 cellular_component -#> 26 AT1G21750 GO:0099503 cellular_component -#> 27 AT1G21750 GO:0009579 cellular_component -#> 29 AT1G21750 GO:0000325 cellular_component -#> 32 AT1G21750 GO:0000326 cellular_component -#> 33 AT1G21750 GO:0000327 cellular_component -#> 36 AT1G51760 GO:0005783 cellular_component -#> 37 AT1G51760 GO:0005634 cellular_component -#> 38 AT1G51760 GO:0005788 cellular_component -#> 40 AT1G51760 GO:0005783 cellular_component -#> 45 AT1G56340 GO:0005783 cellular_component -#> 49 AT1G56340 GO:0005788 cellular_component -#> 51 AT1G56340 GO:0005634 cellular_component -#> 52 AT1G56340 GO:0009506 cellular_component -#> 53 AT1G56340 GO:0005783 cellular_component -#> 54 AT1G56340 GO:0005739 cellular_component -#> 55 AT1G56340 GO:0099503 cellular_component -#> 57 AT1G56340 GO:0000325 cellular_component -#> 59 AT2G32920 GO:0005783 cellular_component -#> 61 AT2G32920 GO:0005788 cellular_component -#> 62 AT2G32920 GO:0005783 cellular_component -#> 64 AT2G32920 GO:0005794 cellular_component -#> 66 AT2G32920 GO:0000325 cellular_component -#> name_1006 go_linkage_type -#> 3 endoplasmic reticulum IEA -#> 7 endoplasmic reticulum lumen IEA -#> 9 endoplasmic reticulum HDA -#> 10 extracellular region HDA -#> 11 mitochondrion HDA -#> 12 secretory vesicle HDA -#> 14 plant-type vacuole HDA -#> 16 endoplasmic reticulum IEA -#> 17 nucleus HDA -#> 20 vacuole IEA -#> 21 endoplasmic reticulum lumen IEA -#> 22 endoplasmic reticulum HDA -#> 26 secretory vesicle HDA -#> 27 thylakoid HDA -#> 29 plant-type vacuole HDA -#> 32 protein storage vacuole IDA -#> 33 lytic vacuole within protein storage vacuole IDA -#> 36 endoplasmic reticulum IEA -#> 37 nucleus HDA -#> 38 endoplasmic reticulum lumen IEA -#> 40 endoplasmic reticulum HDA -#> 45 endoplasmic reticulum IEA -#> 49 endoplasmic reticulum lumen IEA -#> 51 nucleus HDA -#> 52 plasmodesma HDA -#> 53 endoplasmic reticulum HDA -#> 54 mitochondrion HDA -#> 55 secretory vesicle HDA -#> 57 plant-type vacuole HDA -#> 59 endoplasmic reticulum IEA -#> 61 endoplasmic reticulum lumen IEA -#> 62 endoplasmic reticulum HDA -#> 64 Golgi apparatus HDA -#> 66 plant-type vacuole HDA +#> tair_locus go_id namespace_1003 name_1006 +#> 3 AT1G21750 GO:0005783 cellular_component endoplasmic reticulum +#> 5 AT1G21750 GO:0005788 cellular_component endoplasmic reticulum lumen +#> 10 AT1G56340 GO:0005783 cellular_component endoplasmic reticulum +#> 13 AT1G56340 GO:0005788 cellular_component endoplasmic reticulum lumen +#> go_linkage_type +#> 3 IEA +#> 5 IEA +#> 10 IEA +#> 13 IEA
    -
    - -
    +
    -
    - +
    diff --git a/reference/getLisacol.html b/reference/getLisacol.html new file mode 100644 index 00000000..8a0d5007 --- /dev/null +++ b/reference/getLisacol.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/getMarkerClasses.html b/reference/getMarkerClasses.html index c71a2c3e..0bf7f90d 100644 --- a/reference/getMarkerClasses.html +++ b/reference/getMarkerClasses.html @@ -1,89 +1,63 @@ -Returns the organelle classes in an 'MSnSet' — getMarkerClasses • pRolocReturns the organelle classes in an 'MSnSet' — getMarkerClasses • pRoloc - - -
    -
    -
    - + + +
    +
    +
    +
    -
    +

    Convenience accessor to the organelle classes in an 'MSnSet'. This function returns the organelle classes of an MSnSet instance. As a side effect, it prints out the classes.

    -
    +
    +

    Usage

    getMarkerClasses(object, fcol = "markers", ...)
    -
    -

    Arguments

    +
    +

    Arguments

    object
    @@ -99,23 +73,23 @@

    Arguments

    Additional parameters passed to sort from the base package.

    -
    -

    Value

    +
    +

    Value

    A character vector of the organelle classes in the data.

    -
    -

    See also

    +
    +

    See also

    getMarkers to extract the marker proteins. See markers for details about spatial markers storage and encoding.

    -
    -

    Author

    +
    +

    Author

    Lisa Breckels and Laurent Gatto

    -
    -

    Examples

    +
    +

    Examples

    library("pRolocdata")
     data(dunkley2006)
     organelles <- getMarkerClasses(dunkley2006)
    @@ -125,23 +99,19 @@ 

    Examples

    stopifnot(all.equal(organelles, organelles2))
    -
    - -
    +
    -
    - +
    diff --git a/reference/getMarkers.html b/reference/getMarkers.html index 0fd8054f..bba74a2f 100644 --- a/reference/getMarkers.html +++ b/reference/getMarkers.html @@ -1,89 +1,63 @@ -Get the organelle markers in an MSnSet — getMarkers • pRolocGet the organelle markers in an MSnSet — getMarkers • pRoloc - - -
    -
    -
    - + + +
    +
    +
    +
    -
    +

    Convenience accessor to the organelle markers in an MSnSet. This function returns the organelle markers of an MSnSet instance. As a side effect, it print out a marker table.

    -
    +
    +

    Usage

    getMarkers(object, fcol = "markers", names = TRUE, verbose = TRUE)
    -
    -

    Arguments

    +
    +

    Arguments

    object
    @@ -105,25 +79,25 @@

    Arguments

    are returned invisibly. If FALSE, the markers are returned.

    -
    -

    Value

    +
    +

    Value

    A character (matrix) of length (ncol) ncol(object), depending on the vector or matrix encoding of the markers.

    -
    -

    See also

    +
    +

    See also

    See getMarkerClasses to get the classes only. See markers for details about spatial markers storage and encoding.

    -
    -

    Author

    +
    +

    Author

    Laurent Gatto

    -
    -

    Examples

    +
    +

    Examples

    library("pRolocdata")
     data(dunkley2006)
     ## marker vectors
    @@ -166,23 +140,19 @@ 

    Examples

    #> AT2G47470 0
    -
    - -
    +
    -
    - +
    diff --git a/reference/getMartInstanceList.html b/reference/getMartInstanceList.html new file mode 100644 index 00000000..1e4ee092 --- /dev/null +++ b/reference/getMartInstanceList.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/getMartTab.html b/reference/getMartTab.html new file mode 100644 index 00000000..1e4ee092 --- /dev/null +++ b/reference/getMartTab.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/getNormDist.html b/reference/getNormDist.html index 178692d1..f1248033 100644 --- a/reference/getNormDist.html +++ b/reference/getNormDist.html @@ -1,87 +1,60 @@ -Extract Distances from a "ClustDistList" object — getNormDist • pRoloc - - -
    -
    -
    - + + +
    +
    +
    +
    -
    +

    This function computes and outputs normalised distances from a "ClustDistList" object.

    -
    +
    +

    Usage

    getNormDist(object, p = 1/3)
    -
    -

    Arguments

    +
    +

    Arguments

    object
    @@ -92,38 +65,34 @@

    Arguments

    The normalisation factor. Default is 1/3.

    -
    -

    Value

    +
    +

    Value

    An numeric of normalised distances, one per protein set in the ClustDistList.

    -
    -

    See also

    +
    +

    See also

    "ClustDistList", "ClustDist", and examples in clustDist.

    -
    -

    Author

    +
    +

    Author

    Lisa Breckels

    -
    - -
    +
    -
    - +
    diff --git a/reference/getOldcol.html b/reference/getOldcol.html new file mode 100644 index 00000000..8a0d5007 --- /dev/null +++ b/reference/getOldcol.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/getParams,ClustRegRes-method.html b/reference/getParams,ClustRegRes-method.html new file mode 100644 index 00000000..79ccf251 --- /dev/null +++ b/reference/getParams,ClustRegRes-method.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/getParams,GenRegRes-method.html b/reference/getParams,GenRegRes-method.html new file mode 100644 index 00000000..7959a075 --- /dev/null +++ b/reference/getParams,GenRegRes-method.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/getParams,ThetaRegRes-method.html b/reference/getParams,ThetaRegRes-method.html new file mode 100644 index 00000000..7959a075 --- /dev/null +++ b/reference/getParams,ThetaRegRes-method.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/getParams.html b/reference/getParams.html new file mode 100644 index 00000000..7959a075 --- /dev/null +++ b/reference/getParams.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/getPredictions.html b/reference/getPredictions.html index a32b787b..cffb2e24 100644 --- a/reference/getPredictions.html +++ b/reference/getPredictions.html @@ -1,89 +1,63 @@ -Returns the predictions in an 'MSnSet' — getPredictions • pRolocReturns the predictions in an 'MSnSet' — getPredictions • pRoloc - - -
    -
    -
    - + + +
    +
    +
    +
    -
    +

    Convenience accessor to the predicted feature localisation in an 'MSnSet'. This function returns the predictions of an MSnSet instance. As a side effect, it prints out a prediction table.

    -
    +
    +

    Usage

    getPredictions(object, fcol, scol, mcol = "markers", t = 0, verbose = TRUE)
    -
    -

    Arguments

    +
    +

    Arguments

    object
    @@ -120,23 +94,23 @@

    Arguments

    are returned.

    -
    -

    Value

    +
    +

    Value

    An instance of class "MSnSet" with fcol.pred feature variable storing the prediction results according to the chosen threshold.

    -
    -

    See also

    +
    +

    See also

    orgQuants for calculating organelle-specific thresholds.

    -
    -

    Author

    +
    +

    Author

    Laurent Gatto and Lisa Breckels

    -
    -

    Examples

    +
    +

    Examples

    library("pRolocdata")
     data(dunkley2006)
     res <- svmClassification(dunkley2006, fcol = "pd.markers",
    @@ -174,8 +148,8 @@ 

    Examples

    #> Loaded on Thu Jul 16 22:53:08 2015. #> Normalised to sum of intensities. #> Added markers from 'mrk' marker vector. Thu Jul 16 22:53:08 2015 -#> Performed svm prediction (cost=0.5 sigma=0.1) Sun Jun 16 10:12:43 2024 -#> Added svm predictions according to global threshold = 0 Sun Jun 16 10:12:43 2024 +#> Performed svm prediction (cost=0.5 sigma=0.1) Fri Oct 18 17:20:01 2024 +#> Added svm predictions according to global threshold = 0 Fri Oct 18 17:20:01 2024 #> MSnbase version: 1.17.12 getPredictions(res, fcol = "svm", t = .9) ## single threshold #> ans @@ -202,8 +176,8 @@

    Examples

    #> Loaded on Thu Jul 16 22:53:08 2015. #> Normalised to sum of intensities. #> Added markers from 'mrk' marker vector. Thu Jul 16 22:53:08 2015 -#> Performed svm prediction (cost=0.5 sigma=0.1) Sun Jun 16 10:12:43 2024 -#> Added svm predictions according to global threshold = 0.9 Sun Jun 16 10:12:43 2024 +#> Performed svm prediction (cost=0.5 sigma=0.1) Fri Oct 18 17:20:01 2024 +#> Added svm predictions according to global threshold = 0.9 Fri Oct 18 17:20:01 2024 #> MSnbase version: 1.17.12 ## 50% top predictions per class ts <- orgQuants(res, fcol = "svm", t = .5) @@ -236,28 +210,24 @@

    Examples

    #> Loaded on Thu Jul 16 22:53:08 2015. #> Normalised to sum of intensities. #> Added markers from 'mrk' marker vector. Thu Jul 16 22:53:08 2015 -#> Performed svm prediction (cost=0.5 sigma=0.1) Sun Jun 16 10:12:43 2024 -#> Added svm predictions according to thresholds: ER lumen = 0.30, ER membrane = 0.84, Golgi = 0.78, Mitochondrion = 0.75, PM = 0.73, Plastid = 0.77, Ribosome = 0.54, TGN = 0.53, vacuole = 0.57 Sun Jun 16 10:12:43 2024 +#> Performed svm prediction (cost=0.5 sigma=0.1) Fri Oct 18 17:20:01 2024 +#> Added svm predictions according to thresholds: ER lumen = 0.30, ER membrane = 0.84, Golgi = 0.78, Mitochondrion = 0.75, PM = 0.73, Plastid = 0.77, Ribosome = 0.54, TGN = 0.53, vacuole = 0.57 Fri Oct 18 17:20:01 2024 #> MSnbase version: 1.17.12
    -
    - -
    +
    -
    - +
    diff --git a/reference/getRegularisedParams,GenRegRes-method.html b/reference/getRegularisedParams,GenRegRes-method.html new file mode 100644 index 00000000..7959a075 --- /dev/null +++ b/reference/getRegularisedParams,GenRegRes-method.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/getRegularisedParams.html b/reference/getRegularisedParams.html new file mode 100644 index 00000000..7959a075 --- /dev/null +++ b/reference/getRegularisedParams.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/getRegularizedParams,GenRegRes-method.html b/reference/getRegularizedParams,GenRegRes-method.html new file mode 100644 index 00000000..7959a075 --- /dev/null +++ b/reference/getRegularizedParams,GenRegRes-method.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/getRegularizedParams.html b/reference/getRegularizedParams.html new file mode 100644 index 00000000..7959a075 --- /dev/null +++ b/reference/getRegularizedParams.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/getSeed,GenRegRes-method.html b/reference/getSeed,GenRegRes-method.html new file mode 100644 index 00000000..7959a075 --- /dev/null +++ b/reference/getSeed,GenRegRes-method.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/getSeed.html b/reference/getSeed.html new file mode 100644 index 00000000..7959a075 --- /dev/null +++ b/reference/getSeed.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/getStockcol.html b/reference/getStockcol.html index 3f5319ff..e4f0ea77 100644 --- a/reference/getStockcol.html +++ b/reference/getStockcol.html @@ -1,81 +1,57 @@ -Manage default colours and point characters — setLisacol • pRolocManage default colours and point characters — setLisacol • pRoloc - - -
    -
    -
    - + + +
    +
    +
    +
    -
    +

    These functions allow to get/set the colours and point character that are used when plotting organelle clusters and unknown features. These values are parametrised at the session level. Two @@ -84,7 +60,8 @@

    Manage default colours and point characters

    (original) palette, containing 13 colours.

    -
    +
    +

    Usage

    setLisacol()
     
     getLisacol()
    @@ -110,8 +87,8 @@ 

    Manage default colours and point characters

    setUnknownpch(pch)
    -
    -

    Arguments

    +
    +

    Arguments

    cols
    @@ -135,20 +112,20 @@

    Arguments

    which sets the point character to 21, the default.

    -
    -

    Value

    +
    +

    Value

    The set functions set (and invisibly returns) colours. The get functions returns a character vector of colours. For the pch functions, numerics rather than characters.

    -
    -

    Author

    +
    +

    Author

    Laurent Gatto

    -
    -

    Examples

    +
    +

    Examples

    ## defaults for clusters
     getStockcol()
     #>  [1] "#E41A1C" "#377EB8" "#309C17" "#FF7F00" "#FFD700" "#00CED1" "#A65628"
    @@ -187,23 +164,19 @@ 

    Examples

    #> [8] "#F781BF" "#999999" "#333333" "#A021EF" "#008A45" "#00008A"
    -
    - -
    +
    -
    - +
    diff --git a/reference/getStockpch.html b/reference/getStockpch.html new file mode 100644 index 00000000..8a0d5007 --- /dev/null +++ b/reference/getStockpch.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/getUnknowncol.html b/reference/getUnknowncol.html new file mode 100644 index 00000000..8a0d5007 --- /dev/null +++ b/reference/getUnknowncol.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/getUnknownpch.html b/reference/getUnknownpch.html new file mode 100644 index 00000000..8a0d5007 --- /dev/null +++ b/reference/getUnknownpch.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/getWarnings,GenRegRes-method.html b/reference/getWarnings,GenRegRes-method.html new file mode 100644 index 00000000..7959a075 --- /dev/null +++ b/reference/getWarnings,GenRegRes-method.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/getWarnings.html b/reference/getWarnings.html new file mode 100644 index 00000000..7959a075 --- /dev/null +++ b/reference/getWarnings.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/geweke_test.html b/reference/geweke_test.html new file mode 100644 index 00000000..3db6b06b --- /dev/null +++ b/reference/geweke_test.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/goIdToTerm.html b/reference/goIdToTerm.html index e3056e3a..d59a33dc 100644 --- a/reference/goIdToTerm.html +++ b/reference/goIdToTerm.html @@ -1,82 +1,55 @@ -Convert GO ids to/from terms — goIdToTerm • pRoloc - - -
    -
    -
    - + + +
    +
    +
    +
    -
    +

    Converts GO identifiers to/from GO terms, either explicitly or by checking if (any items in) the input contains "GO:".

    -
    +
    +

    Usage

    goIdToTerm(x, names = TRUE, keepNA = TRUE)
     
     goTermToId(x, names = TRUE, keepNA = TRUE)
    @@ -86,8 +59,8 @@ 

    Convert GO ids to/from terms

    prettyGoTermId(x)
    -
    -

    Arguments

    +
    +

    Arguments

    x
    @@ -105,18 +78,18 @@

    Arguments

    FALSE then the GO term/id names is kept.

    -
    -

    Value

    +
    +

    Value

    A character of GO terms (ids) if x were ids (terms).

    -
    -

    Author

    +
    +

    Author

    Laurent Gatto

    -
    -

    Examples

    +
    +

    Examples

    goIdToTerm("GO:0000001")
     #>                  GO:0000001 
     #> "mitochondrion inheritance" 
    @@ -152,23 +125,19 @@ 

    Examples

    #> [1] "mitochondrion inheritance"
    -
    - -
    +
    -
    - +
    diff --git a/reference/goTermToId.html b/reference/goTermToId.html new file mode 100644 index 00000000..0ecfee75 --- /dev/null +++ b/reference/goTermToId.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/highlightOnPlot.html b/reference/highlightOnPlot.html index 35d67ee2..80c243e9 100644 --- a/reference/highlightOnPlot.html +++ b/reference/highlightOnPlot.html @@ -1,80 +1,55 @@ -Highlight features of interest on a spatial proteomics plot — highlightOnPlot • pRolocHighlight features of interest on a spatial proteomics plot — highlightOnPlot • pRoloc - - -
    -
    -
    - + + +
    +
    +
    +
    -
    +

    Highlights a set of features of interest given as a FeaturesOfInterest instance on a PCA plot produced by plot2D or plot3D. If none of the features of interest @@ -82,14 +57,15 @@

    Highlight features of interest on a spatial proteomics plot

    is thrown.

    -
    +
    +

    Usage

    highlightOnPlot(object, foi, labels, args = list(), ...)
     
     highlightOnPlot3D(object, foi, labels, args = list(), radius = 0.1 * 3, ...)
    -
    -

    Arguments

    +
    +

    Arguments

    object
    @@ -135,17 +111,17 @@

    Arguments

    (radius1 * 2) features.

    -
    -

    Value

    +
    +

    Value

    NULL; used for its side effects.

    -
    -

    Author

    +
    +

    Author

    Laurent Gatto

    -
    -

    Examples

    +
    +

    Examples

    library("pRolocdata")
     data("tan2009r1")
     x <- FeaturesOfInterest(description = "A test set of features of interest",
    @@ -199,23 +175,19 @@ 

    Examples

    }
    -
    - -
    +
    -
    - +
    diff --git a/reference/highlightOnPlot3D.html b/reference/highlightOnPlot3D.html new file mode 100644 index 00000000..5a54b870 --- /dev/null +++ b/reference/highlightOnPlot3D.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/index.html b/reference/index.html index 2de29c93..aafcb759 100644 --- a/reference/index.html +++ b/reference/index.html @@ -1,415 +1,548 @@ -Package index • pRoloc - - -
    -
    +
    +
    +
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -

    All functions

    -

    -
    -

    class:AnnotationParams AnnotationParams AnnotationParams-class show,AnnotationParams-method AnnotationParams setAnnotationParams getAnnotationParams dunkley2006params andy2011params

    -

    Class "AnnotationParams"

    -

    ClustDist class:ClustDist ClustDist-class plot,ClustDist,MSnSet-method show,ClustDist-method

    -

    Class "ClustDist"

    -

    ClustDistList class:ClustDistList ClustDistList-class plot,ClustDistList,missing-method show,ClustDistList-method [,ClustDistList,ANY,ANY,ANY-method [,ClustDistList,ANY,missing,missing-method [[,ClustDistList,ANY,ANY-method [[,ClustDistList,ANY,missing-method length,ClustDistList-method names,ClustDistList-method names lapply,ClustDistList-method sapply,ClustDistList-method

    -

    Storing multiple ClustDist instances

    -

    GenRegRes ThetaRegRes class:GenRegRes class:ThetaRegRes GenRegRes-class ThetaRegRes-class getF1Scores getF1Scores,GenRegRes-method getF1Scores,ThetaRegRes-method f1Count f1Count,GenRegRes-method f1Count,ThetaRegRes-method getParams getParams,GenRegRes-method getParams,ThetaRegRes-method getRegularisedParams getRegularisedParams,GenRegRes-method getRegularizedParams getRegularizedParams,GenRegRes-method getSeed getSeed,GenRegRes-method getWarnings getWarnings,GenRegRes-method levelPlot levelPlot,GenRegRes-method plot,GenRegRes,missing-method plot,ThetaRegRes,missing-method show,GenRegRes-method show,ThetaRegRes-method combineThetaRegRes favourPrimary

    -

    Class "GenRegRes" and "ThetaRegRes"

    -

    chains() show(<MCMCParams>) show(<ComponentParam>) show(<MCMCChain>) length(<MCMCChains>) length(<MCMCParams>) `[[`(<MCMCChains>,<ANY>,<ANY>) `[[`(<MCMCParams>,<ANY>,<ANY>) `[`(<MCMCChains>,<ANY>,<ANY>,<ANY>) `[`(<MCMCParams>,<ANY>,<ANY>,<ANY>) show(<MCMCChains>)

    -

    Instrastructure to store and process MCMC results

    -

    MLearn,formula,MSnSet,learnerSchema,numeric-method MLearn,formula,MSnSet,learnerSchema,xvalSpec-method MLearn,formula,MSnSet,clusteringSchema,missing-method MSnSetMLean MLearnMSnSet

    -

    The MLearn interface for machine learning

    -

    MartInstance-class MartInstance show,MartInstance-method MartInstanceList-class MartInstanceList as.data.frame.MartInstanceList as.data.frame.MartInstance [,MartInstanceList-method [,MartInstanceList,ANY,ANY-method [,MartInstanceList,ANY,ANY,ANY-method [[,MartInstanceList-method [[,MartInstanceList,ANY,ANY-method sapply,MartInstanceList-method sapply,MartInstanceList,ANY-method lapply,MartInstanceList-method lapply,MartInstanceList,ANY-method nDatasets filterAttrs getMartInstanceList getMartTab getFilterList

    -

    Class "MartInstance"

    -

    QSep-class class::QSep QSep show,QSep-method summary,QSep-method names,QSep-method names plot,QSep-method plot,QSep,missing-method levelPlot,QSep-method qsep

    -

    Quantify resolution of a spatial proteomics experiment

    -

    SpatProtVis()

    -

    Class SpatProtVis

    -

    addGoAnnotations()

    -

    Add GO annotations

    -

    addLegend()

    -

    Adds a legend

    -

    addMarkers()

    -

    Adds markers to the data

    -

    checkFeatureNamesOverlap()

    -

    Check feature names overlap

    -

    checkFvarOverlap()

    -

    Compare a feature variable overlap

    -

    chi2 chi2-methods chi2,matrix,matrix-method chi2,matrix,numeric-method chi2,numeric,matrix-method chi2,numeric,numeric-method

    -

    The PCP 'chi square' method

    -

    classWeights()

    -

    Calculate class weights

    -

    clustDist()

    -

    Pairwise Distance Computation for Protein Information Sets

    -

    empPvalues()

    -

    Estimate empirical p-values for \(Chi^2\) protein correlations.

    -

    fDataToUnknown()

    -

    Update a feature variable

    -

    filterBinMSnSet()

    -

    Filter a binary MSnSet

    -

    filterMaxMarkers()

    -

    Removes class/annotation information from a matrix of candidate markers that appear in the fData.

    -

    filterMinMarkers()

    -

    Removes class/annotation information from a matrix of candidate markers that appear in the fData.

    -

    filterZeroCols() filterZeroRows()

    -

    Remove 0 columns/rows

    -

    getGOFromFeatures()

    -

    Retrieve GO terms for feature names

    -

    getMarkerClasses()

    -

    Returns the organelle classes in an 'MSnSet'

    -

    getMarkers()

    -

    Get the organelle markers in an MSnSet

    -

    getNormDist()

    -

    Extract Distances from a "ClustDistList" object

    -

    getPredictions()

    -

    Returns the predictions in an 'MSnSet'

    -

    setLisacol() getLisacol() getOldcol() setOldcol() getStockcol() setStockcol() getStockpch() setStockpch() getUnknowncol() setUnknowncol() getUnknownpch() setUnknownpch()

    -

    Manage default colours and point characters

    -

    goIdToTerm() goTermToId() flipGoTermId() prettyGoTermId()

    -

    Convert GO ids to/from terms

    -

    highlightOnPlot() highlightOnPlot3D()

    -

    Highlight features of interest on a spatial proteomics plot

    -

    knnClassification()

    -

    knn classification

    -

    knnOptimisation()

    -

    knn parameter optimisation

    -

    knntlClassification()

    -

    knn transfer learning classification

    -

    knntlOptimisation()

    -

    theta parameter optimisation

    -

    ksvmClassification()

    -

    ksvm classification

    -

    ksvmOptimisation()

    -

    ksvm parameter optimisation

    -

    makeGoSet()

    -

    Creates a GO feature MSnSet

    -

    markerMSnSet() unknownMSnSet()

    -

    Extract marker/unknown subsets

    -

    mrkVecToMat() mrkMatToVec() mrkMatAndVec() showMrkMat() isMrkMat() isMrkVec() mrkEncoding()

    -

    Create a marker vector or matrix.

    -

    mcmc_get_outliers() mcmc_get_meanComponent() mcmc_get_meanoutliersProb() geweke_test() mcmc_pool_chains() mcmc_burn_chains() mcmc_thin_chains() plot(<MCMCParams>,<character>)

    -

    Number of outlier at each iteration of MCMC

    -

    minMarkers()

    -

    Creates a reduced marker variable

    -

    mixing_posterior_check()

    -

    Model calibration plots

    -

    move2Ds()

    -

    Displays a spatial proteomics animation

    -

    mrkConsProfiles()

    -

    Marker consensus profiles

    -

    mrkHClust()

    -

    Draw a dendrogram of subcellular clusters

    -

    nbClassification()

    -

    nb classification

    -

    nbOptimisation()

    -

    nb paramter optimisation

    -

    nicheMeans2D()

    -

    Uncertainty plot organelle means

    -

    nndist-methods nndist,matrix,matrix-method nndist,matrix,missing-method nndist,MSnSet,missing-method nndist

    -

    Nearest neighbour distances

    -

    nnetClassification()

    -

    nnet classification

    -

    nnetOptimisation()

    -

    nnet parameter optimisation

    -

    orderGoAnnotations()

    -

    Orders annotation information

    -

    orgQuants()

    -

    Returns organelle-specific quantile scores

    -

    pRolocmarkers()

    -

    Organelle markers

    -

    perTurboClassification()

    -

    perTurbo classification

    -

    perTurboOptimisation()

    -

    PerTurbo parameter optimisation

    -

    phenoDisco()

    -

    Runs the phenoDisco algorithm.

    -

    plot2D() plot3D(<MSnSet>)

    -

    Plot organelle assignment data and results.

    -

    plot2Ds()

    -

    Draw 2 data sets on one PCA plot

    -

    plotConsProfiles()

    -

    Plot marker consenses profiles.

    -

    plotDist()

    -

    Plots the distribution of features across fractions

    -

    plotEllipse()

    -

    A function to plot probabiltiy ellipses on marker PCA plots to visualise and assess TAGM models.

    -

    plsdaClassification()

    -

    plsda classification

    -

    plsdaOptimisation()

    -

    plsda parameter optimisation

    -

    rfClassification()

    -

    rf classification

    -

    rfOptimisation()

    -

    svm parameter optimisation

    -

    sampleMSnSet()

    -

    Extract a stratified sample of an MSnSet

    -

    showGOEvidenceCodes() getGOEvidenceCodes()

    -

    GO Evidence Codes

    -

    spatial2D()

    -

    Uncertainty plot in localisation probabilities

    -

    subsetMarkers()

    -

    Subsets markers

    -

    svmClassification()

    -

    svm classification

    -

    svmOptimisation()

    -

    svm parameter optimisation

    -

    show(<MAPParams>) logPosteriors() tagmMapTrain() tagmMapPredict()

    -

    The `logPosteriors` function can be used to extract the log-posteriors at each iteration of the EM algorithm to check for convergence.

    -

    tagmMcmcTrain() tagmMcmcPredict() tagmPredict() tagmMcmcProcess()

    -

    Localisation of proteins using the TAGM MCMC method

    -

    testMSnSet()

    -

    Create a stratified 'test' MSnSet

    -

    testMarkers()

    -

    Tests marker class sizes

    -

    thetas()

    -

    Draw matrix of thetas to test

    -

    undocumented getParams,ClustRegRes-method levelPlot,ClustRegRes-method plot,ClustRegRes,missing-method show,ClustRegRes-method

    -

    Undocumented/unexported entries

    -

    zerosInBinMSnSet()

    -

    Compute the number of non-zero values in each marker classes

    - - -
    +
    +

    All functions

    -
    + + +
    -
    + +
    diff --git a/reference/isMrkMat.html b/reference/isMrkMat.html new file mode 100644 index 00000000..367b570d --- /dev/null +++ b/reference/isMrkMat.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/isMrkVec.html b/reference/isMrkVec.html new file mode 100644 index 00000000..367b570d --- /dev/null +++ b/reference/isMrkVec.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/knnClassification.html b/reference/knnClassification.html index a938e0a0..840d6166 100644 --- a/reference/knnClassification.html +++ b/reference/knnClassification.html @@ -1,80 +1,52 @@ -knn classification — knnClassification • pRoloc - - -
    -
    -
    - + + +
    +
    +
    +
    -
    +

    Classification using for the k-nearest neighbours algorithm.

    -
    +
    +

    Usage

    knnClassification(
       object,
       assessRes,
    @@ -85,8 +57,8 @@ 

    knn classification

    )
    -
    -

    Arguments

    +
    +

    Arguments

    object
    @@ -120,19 +92,19 @@

    Arguments

    package class.

    -
    -

    Value

    +
    +

    Value

    An instance of class "MSnSet" with knn and knn.scores feature variables storing the classification results and scores respectively.

    -
    -

    Author

    +
    +

    Author

    Laurent Gatto

    -
    -

    Examples

    +
    +

    Examples

    library(pRolocdata)
     data(dunkley2006)
     ## reducing parameter search space and iterations 
    @@ -189,8 +161,8 @@ 

    Examples

    #> Loaded on Thu Jul 16 22:53:08 2015. #> Normalised to sum of intensities. #> Added markers from 'mrk' marker vector. Thu Jul 16 22:53:08 2015 -#> Performed knn prediction (k=3) Sun Jun 16 10:12:47 2024 -#> Added knn predictions according to global threshold = 0 Sun Jun 16 10:12:47 2024 +#> Performed knn prediction (k=3) Fri Oct 18 17:20:04 2024 +#> Added knn predictions according to global threshold = 0 Fri Oct 18 17:20:04 2024 #> MSnbase version: 1.17.12 getPredictions(res, fcol = "knn", t = 0.75) #> ans @@ -217,30 +189,26 @@

    Examples

    #> Loaded on Thu Jul 16 22:53:08 2015. #> Normalised to sum of intensities. #> Added markers from 'mrk' marker vector. Thu Jul 16 22:53:08 2015 -#> Performed knn prediction (k=3) Sun Jun 16 10:12:47 2024 -#> Added knn predictions according to global threshold = 0.75 Sun Jun 16 10:12:47 2024 +#> Performed knn prediction (k=3) Fri Oct 18 17:20:04 2024 +#> Added knn predictions according to global threshold = 0.75 Fri Oct 18 17:20:04 2024 #> MSnbase version: 1.17.12 plot2D(res, fcol = "knn")
    -
    - -
    +
    -
    - +
    diff --git a/reference/knnOptimisation.html b/reference/knnOptimisation.html index ac4ea923..675c0bc7 100644 --- a/reference/knnOptimisation.html +++ b/reference/knnOptimisation.html @@ -1,82 +1,55 @@ -knn parameter optimisation — knnOptimisation • pRoloc - - -
    -
    -
    - + + +
    +
    +
    +
    -
    +

    Classification parameter optimisation for the k-nearest neighbours algorithm.

    -
    +
    +

    Usage

    knnOptimisation(
       object,
       fcol = "markers",
    @@ -91,8 +64,8 @@ 

    knn parameter optimisation

    )
    -
    -

    Arguments

    +
    +

    Arguments

    object
    @@ -137,12 +110,12 @@

    Arguments

    Additional parameters passed to knn from package class.

    -
    -

    Value

    +
    +

    Value

    An instance of class "GenRegRes".

    -
    -

    Details

    +
    +

    Details

    Note that when performance scores precision, recall and (macro) F1 are calculated, any NA values are replaced by 0. This decision is motivated by the fact that any class that would have either a NA @@ -151,32 +124,28 @@

    Details

    leads to F1 values of 0 and a reduced yet defined final macro F1 score.

    -
    -

    See also

    +
    +

    See also

    knnClassification and example therein.

    -
    -

    Author

    +
    +

    Author

    Laurent Gatto

    -
    - -
    +
    -
    - +
    diff --git a/reference/knnOptimization.html b/reference/knnOptimization.html new file mode 100644 index 00000000..55d5a1a8 --- /dev/null +++ b/reference/knnOptimization.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/knnPrediction.html b/reference/knnPrediction.html new file mode 100644 index 00000000..9b3524c9 --- /dev/null +++ b/reference/knnPrediction.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/knnRegularisation.html b/reference/knnRegularisation.html new file mode 100644 index 00000000..55d5a1a8 --- /dev/null +++ b/reference/knnRegularisation.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/knntlClassification-1.png b/reference/knntlClassification-1.png index dc2648f3..b476fa0a 100644 Binary files a/reference/knntlClassification-1.png and b/reference/knntlClassification-1.png differ diff --git a/reference/knntlClassification.html b/reference/knntlClassification.html index c2158bba..78345561 100644 --- a/reference/knntlClassification.html +++ b/reference/knntlClassification.html @@ -1,82 +1,55 @@ -knn transfer learning classification — knntlClassification • pRoloc - - -
    -
    -
    - + + +
    +
    +
    +
    -
    +

    Classification using a variation of the KNN implementation of Wu and Dietterich's transfer learning schema

    -
    +
    +

    Usage

    knntlClassification(
       primary,
       auxiliary,
    @@ -88,8 +61,8 @@ 

    knn transfer learning classification

    )
    -
    -

    Arguments

    +
    +

    Arguments

    primary
    @@ -128,21 +101,21 @@

    Arguments

    The optional random number generator seed.

    -
    -

    Value

    +
    +

    Value

    A character vector of the classifications for the unknowns

    -
    -

    See also

    +
    +

    See also

    -
    -

    Author

    +
    +

    Author

    Lisa Breckels

    -
    -

    Examples

    +
    +

    Examples

    # \donttest{
     library(pRolocdata)
     data(andy2011)
    @@ -179,11 +152,11 @@ 

    Examples

    #> Results #> macro F1: #> Min. 1st Qu. Median Mean 3rd Qu. Max. -#> 0.8638 0.8692 0.8746 0.8746 0.8800 0.8854 +#> 0.8601 0.8757 0.8913 0.8913 0.9069 0.9225 #> best theta: #> ER Golgi Mitochondrion PM -#> weight:0 2 2 0 2 -#> weight:1 0 0 2 0 +#> weight:0 2 1 0 1 +#> weight:1 0 1 2 1 th <- getParams(opt) plot(opt) @@ -212,23 +185,19 @@

    Examples

    # }
    -
    - -
    +
    -
    - +
    diff --git a/reference/knntlOptimisation.html b/reference/knntlOptimisation.html index 45975d28..52d85020 100644 --- a/reference/knntlOptimisation.html +++ b/reference/knntlOptimisation.html @@ -1,82 +1,55 @@ -theta parameter optimisation — knntlOptimisation • pRoloc - - -
    -
    -
    - + + +
    +
    +
    +
    -
    +

    Classification parameter optimisation for the KNN implementation of Wu and Dietterich's transfer learning schema

    -
    +
    +

    Usage

    knntlOptimisation(
       primary,
       auxiliary,
    @@ -96,8 +69,8 @@ 

    theta parameter optimisation

    )
    -
    -

    Arguments

    +
    +

    Arguments

    primary
    @@ -184,14 +157,14 @@

    Arguments

    The optional random number generator seed.

    -
    -

    Value

    +
    +

    Value

    A list of containing the theta combinations tested, associated macro F1 score and accuracy for each combination over each round (specified by times).

    -
    -

    Details

    +
    +

    Details

    knntlOptimisation implements a variation of Wu and Dietterich's transfer learning schema: P. Wu and T. G. Dietterich. Improving SVM accuracy by training on auxiliary @@ -199,8 +172,8 @@

    Details

    Conference on Machine Learning, pages 871 - 878. Morgan Kaufmann, 2004. A grid search for the best theta is performed.

    -
    -

    References

    +
    +

    References

    Breckels LM, Holden S, Wonjar D, Mulvey CM, Christoforou A, Groen AJ, Kohlbacher O, Lilley KS, Gatto L. Learning from heterogeneous data sources: an application in @@ -210,32 +183,28 @@

    References

    Data Sources. Proceedings of the 21st International Conference on Machine Learning (ICML); 2004.

    -
    -

    See also

    +
    +

    See also

    knntlClassification and example therein.

    -
    -

    Author

    +
    +

    Author

    Lisa Breckels

    -
    - -
    +
    -
    - +
    diff --git a/reference/ksvmClassification-1.png b/reference/ksvmClassification-1.png index 06d56035..83483d92 100644 Binary files a/reference/ksvmClassification-1.png and b/reference/ksvmClassification-1.png differ diff --git a/reference/ksvmClassification-2.png b/reference/ksvmClassification-2.png index caef4484..48f6a008 100644 Binary files a/reference/ksvmClassification-2.png and b/reference/ksvmClassification-2.png differ diff --git a/reference/ksvmClassification-3.png b/reference/ksvmClassification-3.png index d8d750fa..2d721c28 100644 Binary files a/reference/ksvmClassification-3.png and b/reference/ksvmClassification-3.png differ diff --git a/reference/ksvmClassification.html b/reference/ksvmClassification.html index 50345d42..0c974700 100644 --- a/reference/ksvmClassification.html +++ b/reference/ksvmClassification.html @@ -1,82 +1,55 @@ -ksvm classification — ksvmClassification • pRoloc - - -
    -
    -
    - + + +
    +
    +
    +
    -
    +

    Classification using the support vector machine algorithm.

    -
    +
    +

    Usage

    ksvmClassification(
       object,
       assessRes,
    @@ -87,8 +60,8 @@ 

    ksvm classification

    )
    -
    -

    Arguments

    +
    +

    Arguments

    object
    @@ -122,19 +95,19 @@

    Arguments

    package kernlab.

    -
    -

    Value

    +
    +

    Value

    An instance of class "MSnSet" with ksvm and ksvm.scores feature variables storing the classification results and scores respectively.

    -
    -

    Author

    +
    +

    Author

    Laurent Gatto

    -
    -

    Examples

    +
    +

    Examples

    library(pRolocdata)
     data(dunkley2006)
     ## reducing parameter search space and iterations 
    @@ -151,8 +124,8 @@ 

    Examples

    #> Results #> macro F1: #> Min. 1st Qu. Median Mean 3rd Qu. Max. -#> 0.8804 0.9123 0.9443 0.9255 0.9480 0.9518 -#> best cost: 0.5 +#> 0.9783 0.9786 0.9788 0.9857 0.9894 1.0000 +#> best cost: 0.5 16 plot(params) f1Count(params) @@ -169,9 +142,9 @@

    Examples

    getPredictions(res, fcol = "ksvm") #> ans #> ER lumen ER membrane Golgi Mitochondrion PM -#> 19 187 132 130 58 +#> 24 192 128 138 47 #> Plastid Ribosome TGN vacuole -#> 55 19 68 21 +#> 54 19 66 21 #> MSnSet (storageMode: lockedEnvironment) #> assayData: 689 features, 16 samples #> element names: exprs @@ -191,15 +164,15 @@

    Examples

    #> Loaded on Thu Jul 16 22:53:08 2015. #> Normalised to sum of intensities. #> Added markers from 'mrk' marker vector. Thu Jul 16 22:53:08 2015 -#> Performed ksvm prediction (cost=0.5) Sun Jun 16 10:13:02 2024 -#> Added ksvm predictions according to global threshold = 0 Sun Jun 16 10:13:02 2024 +#> Performed ksvm prediction (cost=0.5) Fri Oct 18 17:20:18 2024 +#> Added ksvm predictions according to global threshold = 0 Fri Oct 18 17:20:18 2024 #> MSnbase version: 1.17.12 getPredictions(res, fcol = "ksvm", t = 0.75) #> ans #> ER lumen ER membrane Golgi Mitochondrion PM -#> 14 157 64 55 46 +#> 14 159 69 55 46 #> Plastid Ribosome TGN unknown vacuole -#> 20 19 13 280 21 +#> 20 19 13 273 21 #> MSnSet (storageMode: lockedEnvironment) #> assayData: 689 features, 16 samples #> element names: exprs @@ -219,30 +192,26 @@

    Examples

    #> Loaded on Thu Jul 16 22:53:08 2015. #> Normalised to sum of intensities. #> Added markers from 'mrk' marker vector. Thu Jul 16 22:53:08 2015 -#> Performed ksvm prediction (cost=0.5) Sun Jun 16 10:13:02 2024 -#> Added ksvm predictions according to global threshold = 0.75 Sun Jun 16 10:13:02 2024 +#> Performed ksvm prediction (cost=0.5) Fri Oct 18 17:20:18 2024 +#> Added ksvm predictions according to global threshold = 0.75 Fri Oct 18 17:20:18 2024 #> MSnbase version: 1.17.12 plot2D(res, fcol = "ksvm")
    -
    - -
    +
    -
    - +
    diff --git a/reference/ksvmOptimisation.html b/reference/ksvmOptimisation.html index c18c81a5..dee894a7 100644 --- a/reference/ksvmOptimisation.html +++ b/reference/ksvmOptimisation.html @@ -1,82 +1,55 @@ -ksvm parameter optimisation — ksvmOptimisation • pRoloc - - -
    -
    -
    - + + +
    +
    +
    +
    -
    +

    Classification parameter optimisation for the support vector machine algorithm.

    -
    +
    +

    Usage

    ksvmOptimisation(
       object,
       fcol = "markers",
    @@ -91,8 +64,8 @@ 

    ksvm parameter optimisation

    )
    -
    -

    Arguments

    +
    +

    Arguments

    object
    @@ -137,12 +110,12 @@

    Arguments

    Additional parameters passed to ksvm from package kernlab.

    -
    -

    Value

    +
    +

    Value

    An instance of class "GenRegRes".

    -
    -

    Details

    +
    +

    Details

    Note that when performance scores precision, recall and (macro) F1 are calculated, any NA values are replaced by 0. This decision is motivated by the fact that any class that would have either a NA @@ -151,32 +124,28 @@

    Details

    leads to F1 values of 0 and a reduced yet defined final macro F1 score.

    -
    -

    See also

    +
    +

    See also

    ksvmClassification and example therein.

    -
    -

    Author

    +
    +

    Author

    Laurent Gatto

    -
    - -
    +
    -
    - +
    diff --git a/reference/ksvmOptimization.html b/reference/ksvmOptimization.html new file mode 100644 index 00000000..ae39bd0c --- /dev/null +++ b/reference/ksvmOptimization.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/ksvmPrediction.html b/reference/ksvmPrediction.html new file mode 100644 index 00000000..506ef0f3 --- /dev/null +++ b/reference/ksvmPrediction.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/ksvmRegularisation.html b/reference/ksvmRegularisation.html new file mode 100644 index 00000000..ae39bd0c --- /dev/null +++ b/reference/ksvmRegularisation.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/lapply,ClustDistList-method.html b/reference/lapply,ClustDistList-method.html new file mode 100644 index 00000000..76fb34d9 --- /dev/null +++ b/reference/lapply,ClustDistList-method.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/lapply,MartInstanceList,ANY-method.html b/reference/lapply,MartInstanceList,ANY-method.html new file mode 100644 index 00000000..1e4ee092 --- /dev/null +++ b/reference/lapply,MartInstanceList,ANY-method.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/lapply,MartInstanceList-method.html b/reference/lapply,MartInstanceList-method.html new file mode 100644 index 00000000..1e4ee092 --- /dev/null +++ b/reference/lapply,MartInstanceList-method.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/length,ClustDistList-method.html b/reference/length,ClustDistList-method.html new file mode 100644 index 00000000..76fb34d9 --- /dev/null +++ b/reference/length,ClustDistList-method.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/length,MCMCChains-method.html b/reference/length,MCMCChains-method.html new file mode 100644 index 00000000..15d64af8 --- /dev/null +++ b/reference/length,MCMCChains-method.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/length,MCMCParams-method.html b/reference/length,MCMCParams-method.html new file mode 100644 index 00000000..15d64af8 --- /dev/null +++ b/reference/length,MCMCParams-method.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/levelPlot,ClustRegRes-method.html b/reference/levelPlot,ClustRegRes-method.html new file mode 100644 index 00000000..79ccf251 --- /dev/null +++ b/reference/levelPlot,ClustRegRes-method.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/levelPlot,GenRegRes-method.html b/reference/levelPlot,GenRegRes-method.html new file mode 100644 index 00000000..7959a075 --- /dev/null +++ b/reference/levelPlot,GenRegRes-method.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/levelPlot,QSep-method.html b/reference/levelPlot,QSep-method.html new file mode 100644 index 00000000..8e0a04c4 --- /dev/null +++ b/reference/levelPlot,QSep-method.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/levelPlot.html b/reference/levelPlot.html new file mode 100644 index 00000000..7959a075 --- /dev/null +++ b/reference/levelPlot.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/logPosteriors.html b/reference/logPosteriors.html new file mode 100644 index 00000000..b5288b4a --- /dev/null +++ b/reference/logPosteriors.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/makeGoSet-1.png b/reference/makeGoSet-1.png index b42b6324..903bf9dc 100644 Binary files a/reference/makeGoSet-1.png and b/reference/makeGoSet-1.png differ diff --git a/reference/makeGoSet.html b/reference/makeGoSet.html index cd48e661..08e068ed 100644 --- a/reference/makeGoSet.html +++ b/reference/makeGoSet.html @@ -1,87 +1,60 @@ -Creates a GO feature MSnSet — makeGoSet • pRoloc - - -
    -
    -
    - + + +
    +
    +
    +
    -
    +

    Creates a new "MSnSet" instance populated with a GO term binary matrix based on an original object.

    -
    +
    +

    Usage

    makeGoSet(object, params, namespace = "cellular_component", evidence = NULL)
    -
    -

    Arguments

    +
    +

    Arguments

    object
    @@ -104,18 +77,18 @@

    Arguments

    GO evidence filtering.

    -
    -

    Value

    +
    +

    Value

    A new "MSnSet" with the GO terms for the respective features in the original object.

    -
    -

    Author

    +
    +

    Author

    Laurent Gatto

    -
    -

    Examples

    +
    +

    Examples

    library("pRolocdata")
     data(dunkley2006)
     data(dunkley2006params)
    @@ -123,7 +96,7 @@ 

    Examples

    dunkley2006params) goset #> MSnSet (storageMode: lockedEnvironment) -#> assayData: 10 features, 20 samples +#> assayData: 10 features, 2 samples #> element names: exprs #> protocolData: none #> phenoData: none @@ -134,41 +107,37 @@

    Examples

    #> experimentData: use 'experimentData(object)' #> Annotation: #> - - - Processing information - - - -#> Constructed GO set using cellular_component namespace [Sun Jun 16 10:13:03 2024] +#> Constructed GO set using cellular_component namespace [Fri Oct 18 17:20:19 2024] #> MSnbase version: 2.31.1 -exprs(goset)[1:10, 1:5] -#> GO:0005783 GO:0005788 GO:0005576 GO:0005739 GO:0099503 -#> AT1G09210 1 1 1 1 1 -#> AT1G21750 1 1 0 0 1 -#> AT1G51760 1 1 0 0 0 -#> AT1G56340 1 1 0 1 1 -#> AT2G32920 1 1 0 0 0 -#> AT2G47470 1 0 0 0 1 -#> AT3G54960 1 1 0 0 1 -#> AT4G24190 1 1 0 1 1 -#> AT5G60640 1 1 1 1 1 -#> AT1G07810 1 0 1 0 0 +exprs(goset) +#> GO:0005783 GO:0005788 +#> AT1G09210 0 0 +#> AT1G21750 1 1 +#> AT1G51760 0 0 +#> AT1G56340 1 1 +#> AT2G32920 0 0 +#> AT2G47470 1 0 +#> AT3G54960 0 0 +#> AT4G24190 0 1 +#> AT5G60640 1 1 +#> AT1G07810 0 0 image(goset)
    -
    - -
    +
    -
    - +
    diff --git a/reference/markerMSnSet.html b/reference/markerMSnSet.html index 04785b9d..6ae5195f 100644 --- a/reference/markerMSnSet.html +++ b/reference/markerMSnSet.html @@ -1,89 +1,62 @@ -Extract marker/unknown subsets — markerMSnSet • pRoloc - - -
    -
    -
    - + + +
    +
    +
    +
    -
    +

    These function extract the marker or unknown proteins into a new MSnSet.

    -
    +
    +

    Usage

    markerMSnSet(object, fcol = "markers")
     
     unknownMSnSet(object, fcol = "markers")
    -
    -

    Arguments

    +
    +

    Arguments

    object
    @@ -100,22 +73,22 @@

    Arguments

    "markers".

    -
    -

    Value

    +
    +

    Value

    An new MSnSet with marker/unknown proteins only.

    -
    -

    See also

    +
    +

    See also

    sampleMSnSet testMSnSet and markers for markers encoding.

    -
    -

    Author

    +
    +

    Author

    Laurent Gatto

    -
    -

    Examples

    +
    +

    Examples

    library("pRolocdata")
     data(dunkley2006)
     mrk <- markerMSnSet(dunkley2006)
    @@ -154,23 +127,19 @@ 

    Examples

    featureNames(unknownMSnSet(dunkley2006, "markers"))))
    -
    - -
    +
    -
    - +
    diff --git a/reference/markers.html b/reference/markers.html index 2150f07f..c0e07d37 100644 --- a/reference/markers.html +++ b/reference/markers.html @@ -1,82 +1,55 @@ -Create a marker vector or matrix. — mrkVecToMat • pRoloc - - -
    -
    -
    - + + +
    +
    +
    +
    -
    +

    Functions producing a new vector (matrix) marker vector set from an existing matrix (vector) marker set.

    -
    +
    +

    Usage

    mrkVecToMat(object, vfcol = "markers", mfcol = "Markers")
     
     mrkMatToVec(object, mfcol = "Markers", vfcol = "markers")
    @@ -92,8 +65,8 @@ 

    Create a marker vector or matrix.

    mrkEncoding(object, fcol = "markers")
    -
    -

    Arguments

    +
    +

    Arguments

    object
    @@ -114,13 +87,13 @@

    Arguments

    A marker feature variable name.

    -
    -

    Value

    +
    +

    Value

    An updated MSnSet with a new vector (matrix) marker set.

    -
    -

    Details

    +
    +

    Details

    Sub-cellular markers can be encoded in two different ways. Sets of spatial markers can be represented as character vectors (character or factor, to be accurate), stored as @@ -154,21 +127,21 @@

    Details

    returns either "vector" or "matrix" depending on the nature of the markers.

    -
    -

    See also

    +
    +

    See also

    Other functions that operate on markers are getMarkers, getMarkerClasses and markerMSnSet. To add markers to an existing MSnSet, see the addMarkers function and pRolocmarkers, for a list of suggested markers.

    -
    -

    Author

    +
    +

    Author

    Laurent Gatto and Lisa Breckels

    -
    -

    Examples

    +
    +

    Examples

    library("pRolocdata")
     data(dunkley2006)
     dunk <- mrkVecToMat(dunkley2006)
    @@ -193,23 +166,19 @@ 

    Examples

    fData(dunk)$markers))
    -
    - -
    +
    -
    - +
    diff --git a/reference/mcmc-helpers.html b/reference/mcmc-helpers.html index 9097eccf..c1222c17 100644 --- a/reference/mcmc-helpers.html +++ b/reference/mcmc-helpers.html @@ -1,5 +1,5 @@ -Number of outlier at each iteration of MCMC — mcmc_get_outliers • pRolocNumber of outlier at each iteration of MCMC — mcmc_get_outliers • pRoloc - - -
    -
    -
    - + + +
    +
    +
    +
    -
    +

    Helper function to get the number of outlier at each MCMC iteration.

    Helper function to get mean component allocation at each MCMC @@ -98,7 +81,8 @@

    Number of outlier at each iteration of MCMC

    distributions for all organelles.

    -
    +
    +

    Usage

    mcmc_get_outliers(x)
     
     mcmc_get_meanComponent(x)
    @@ -117,8 +101,8 @@ 

    Number of outlier at each iteration of MCMC

    plot(x, y, ...)
    -
    -

    Arguments

    +
    +

    Arguments

    x
    @@ -153,8 +137,8 @@

    Arguments

    Currently ignored.

    -
    -

    Value

    +
    +

    Value

    A list of length length(x).

    A list of length length(x).

    A list of length length(x).

    @@ -164,28 +148,24 @@

    Value

    A thinned `MCMCParams` object.

    A ggplot2 object.

    -
    -

    Author

    +
    +

    Author

    Laurent Gatto

    -
    - -
    +
    -
    - +
    diff --git a/reference/mcmc_burn_chains.html b/reference/mcmc_burn_chains.html new file mode 100644 index 00000000..3db6b06b --- /dev/null +++ b/reference/mcmc_burn_chains.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/mcmc_get_meanComponent.html b/reference/mcmc_get_meanComponent.html new file mode 100644 index 00000000..3db6b06b --- /dev/null +++ b/reference/mcmc_get_meanComponent.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/mcmc_get_meanoutliersProb.html b/reference/mcmc_get_meanoutliersProb.html new file mode 100644 index 00000000..3db6b06b --- /dev/null +++ b/reference/mcmc_get_meanoutliersProb.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/mcmc_pool_chains.html b/reference/mcmc_pool_chains.html new file mode 100644 index 00000000..3db6b06b --- /dev/null +++ b/reference/mcmc_pool_chains.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/mcmc_thin_chains.html b/reference/mcmc_thin_chains.html new file mode 100644 index 00000000..3db6b06b --- /dev/null +++ b/reference/mcmc_thin_chains.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/minClassScore.html b/reference/minClassScore.html new file mode 100644 index 00000000..4d2bd736 --- /dev/null +++ b/reference/minClassScore.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/minMarkers.html b/reference/minMarkers.html index 429da4b5..2ae83be2 100644 --- a/reference/minMarkers.html +++ b/reference/minMarkers.html @@ -1,89 +1,63 @@ -Creates a reduced marker variable — minMarkers • pRolocCreates a reduced marker variable — minMarkers • pRoloc - - -
    -
    -
    - + + +
    +
    +
    +
    -
    +

    This function updates an MSnSet instances and sets markers class to unknown if there are less than n instances.

    -
    +
    +

    Usage

    minMarkers(object, n = 10, fcol = "markers")
    -
    -

    Arguments

    +
    +

    Arguments

    object
    @@ -99,24 +73,24 @@

    Arguments

    slot. Default is markers.

    -
    -

    Value

    +
    +

    Value

    An instance of class "MSnSet" with a new feature variables, named after the original fcol variable and the n value.

    -
    -

    See also

    +
    +

    See also

    getPredictions to filter based on classification scores.

    -
    -

    Author

    +
    +

    Author

    Laurent Gatto

    -
    -

    Examples

    +
    +

    Examples

    library(pRolocdata)
     data(dunkley2006)
     d2 <- minMarkers(dunkley2006, 20)
    @@ -134,23 +108,19 @@ 

    Examples

    #> 474 21
    -
    - -
    +
    -
    - +
    diff --git a/reference/mixing_posterior_check.html b/reference/mixing_posterior_check.html index 2c325f41..c6334492 100644 --- a/reference/mixing_posterior_check.html +++ b/reference/mixing_posterior_check.html @@ -1,85 +1,57 @@ -Model calibration plots — mixing_posterior_check • pRoloc - - -
    -
    -
    - + + +
    +
    +
    +
    -
    +

    Model calibration model with posterior z-scores and posterior shrinkage

    -
    +
    +

    Usage

    mixing_posterior_check(object, params, priors, fcol = "markers")
    -
    -

    Arguments

    +
    +

    Arguments

    object
    @@ -99,18 +71,18 @@

    Arguments

    The columns of the feature data which contain the marker data.

    -
    -

    Value

    +
    +

    Value

    Used for side effect of producing plot. Invisibily returns an ggplot object that can be further manipulated

    -
    -

    Author

    +
    +

    Author

    Oliver M. Crook <omc25@cam.ac.uk>

    -
    -

    Examples

    +
    +

    Examples

    if (FALSE) { # \dontrun{
     library("pRoloc")
     data("tan2009r1")
    @@ -125,23 +97,19 @@ 

    Examples

    } # }
    -
    - -
    +
    -
    - +
    diff --git a/reference/move2Ds.html b/reference/move2Ds.html index ae6c2de3..919ce844 100644 --- a/reference/move2Ds.html +++ b/reference/move2Ds.html @@ -1,89 +1,63 @@ -Displays a spatial proteomics animation — move2Ds • pRolocDisplays a spatial proteomics animation — move2Ds • pRoloc - - -
    -
    -
    - + + +
    +
    +
    +
    -
    +

    Given two MSnSet instances of one MSnSetList with at least two items, this function produces an animation that shows the transition from the first data to the second.

    -
    +
    +

    Usage

    move2Ds(object, pcol, fcol = "markers", n = 25, hl)
    -
    -

    Arguments

    +
    +

    Arguments

    object
    @@ -117,22 +91,22 @@

    Arguments

    interest.

    -
    -

    Value

    +
    +

    Value

    Used for its side effect of producing a short animation.

    -
    -

    See also

    +
    +

    See also

    plot2Ds to a single figure with the two datasets.

    -
    -

    Author

    +
    +

    Author

    Laurent Gatto

    -
    -

    Examples

    +
    +

    Examples

    library("pRolocdata")
     data(dunkley2006)
     
    @@ -219,23 +193,19 @@ 

    Examples

    -
    - -
    +
    -
    - +
    diff --git a/reference/mrkConsProfiles-1.png b/reference/mrkConsProfiles-1.png index 834bbba7..b8fd1666 100644 Binary files a/reference/mrkConsProfiles-1.png and b/reference/mrkConsProfiles-1.png differ diff --git a/reference/mrkConsProfiles.html b/reference/mrkConsProfiles.html index aacc1ecf..833aadab 100644 --- a/reference/mrkConsProfiles.html +++ b/reference/mrkConsProfiles.html @@ -1,85 +1,57 @@ -Marker consensus profiles — mrkConsProfiles • pRoloc - - -
    -
    -
    - + + +
    +
    +
    +
    -
    +

    A function to calculate average marker profiles.

    -
    +
    +

    Usage

    mrkConsProfiles(object, fcol = "markers", method = mean)
    -
    -

    Arguments

    +
    +

    Arguments

    object
    @@ -97,23 +69,23 @@

    Arguments

    profiles. Default is mean.

    -
    -

    Value

    +
    +

    Value

    A matrix of dimensions number of clusters (exluding unknowns) by number of fractions.

    -
    -

    See also

    +
    +

    See also

    The mrkHClust function to produce a hierarchical cluster.

    -
    -

    Author

    +
    +

    Author

    Laurent Gatto and Lisa M. Breckels

    -
    -

    Examples

    +
    +

    Examples

    library("pRolocdata")
     data(dunkley2006)
     mrkConsProfiles(dunkley2006)
    @@ -192,23 +164,19 @@ 

    Examples

    -
    - -
    +
    -
    - +
    diff --git a/reference/mrkEncoding.html b/reference/mrkEncoding.html new file mode 100644 index 00000000..367b570d --- /dev/null +++ b/reference/mrkEncoding.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/mrkHClust-1.png b/reference/mrkHClust-1.png index b4b13f37..fe33dccb 100644 Binary files a/reference/mrkHClust-1.png and b/reference/mrkHClust-1.png differ diff --git a/reference/mrkHClust.html b/reference/mrkHClust.html index f10bcf10..b24bba35 100644 --- a/reference/mrkHClust.html +++ b/reference/mrkHClust.html @@ -1,82 +1,59 @@ -Draw a dendrogram of subcellular clusters — mrkHClust • pRolocDraw a dendrogram of subcellular clusters — mrkHClust • pRoloc - - -
    -
    -
    - + + +
    +
    +
    +
    -
    +

    This functions calculates an average protein profile for each marker class (proteins of unknown localisation are ignored) and then generates a dendrogram representing the relation between @@ -86,7 +63,8 @@

    Draw a dendrogram of subcellular clusters

    visualisations such as plot2D.

    -
    +
    +

    Usage

    mrkHClust(
       object,
       fcol = "markers",
    @@ -98,8 +76,8 @@ 

    Draw a dendrogram of subcellular clusters

    )
    -
    -

    Arguments

    +
    +

    Arguments

    object
    @@ -137,41 +115,37 @@

    Arguments

    dendrogram.

    -
    -

    Value

    +
    +

    Value

    Invisibly returns a dendrogram object, containing the hierarchical cluster as computed by hclust.

    -
    -

    Author

    +
    +

    Author

    Laurent Gatto

    -
    -

    Examples

    +
    +

    Examples

    library("pRolocdata")
     data(dunkley2006)
     mrkHClust(dunkley2006)
     
     
    -
    - -
    +
    -
    - +
    diff --git a/reference/mrkMatAndVec.html b/reference/mrkMatAndVec.html new file mode 100644 index 00000000..367b570d --- /dev/null +++ b/reference/mrkMatAndVec.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/mrkMatToVec.html b/reference/mrkMatToVec.html new file mode 100644 index 00000000..367b570d --- /dev/null +++ b/reference/mrkMatToVec.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/nDatasets.html b/reference/nDatasets.html new file mode 100644 index 00000000..1e4ee092 --- /dev/null +++ b/reference/nDatasets.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/names,ClustDistList-method.html b/reference/names,ClustDistList-method.html new file mode 100644 index 00000000..76fb34d9 --- /dev/null +++ b/reference/names,ClustDistList-method.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/names,QSep-method.html b/reference/names,QSep-method.html new file mode 100644 index 00000000..8e0a04c4 --- /dev/null +++ b/reference/names,QSep-method.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/nbClassification-1.png b/reference/nbClassification-1.png index 307fa60b..1b7ea49e 100644 Binary files a/reference/nbClassification-1.png and b/reference/nbClassification-1.png differ diff --git a/reference/nbClassification-2.png b/reference/nbClassification-2.png index 13ed4c74..a149b746 100644 Binary files a/reference/nbClassification-2.png and b/reference/nbClassification-2.png differ diff --git a/reference/nbClassification.html b/reference/nbClassification.html index 1a603d3c..ebbed56c 100644 --- a/reference/nbClassification.html +++ b/reference/nbClassification.html @@ -1,80 +1,52 @@ -nb classification — nbClassification • pRoloc - - -
    -
    -
    - + + +
    +
    +
    +
    -
    +

    Classification using the naive Bayes algorithm.

    -
    +
    +

    Usage

    nbClassification(
       object,
       assessRes,
    @@ -85,8 +57,8 @@ 

    nb classification

    )
    -
    -

    Arguments

    +
    +

    Arguments

    object
    @@ -120,19 +92,19 @@

    Arguments

    naiveBayes from package e1071.

    -
    -

    Value

    +
    +

    Value

    An instance of class "MSnSet" with nb and nb.scores feature variables storing the classification results and scores respectively.

    -
    -

    Author

    +
    +

    Author

    Laurent Gatto

    -
    -

    Examples

    +
    +

    Examples

    library(pRolocdata)
     data(dunkley2006)
     ## reducing parameter search space and iterations 
    @@ -149,8 +121,8 @@ 

    Examples

    #> Results #> macro F1: #> Min. 1st Qu. Median Mean 3rd Qu. Max. -#> 0.9654 0.9686 0.9718 0.9791 0.9859 1.0000 -#> best laplace: 5 0 +#> 0.9055 0.9437 0.9818 0.9624 0.9909 1.0000 +#> best laplace: 0 5 plot(params) f1Count(params) @@ -189,8 +161,8 @@

    Examples

    #> Loaded on Thu Jul 16 22:53:08 2015. #> Normalised to sum of intensities. #> Added markers from 'mrk' marker vector. Thu Jul 16 22:53:08 2015 -#> Performed naiveBayes prediction (laplace=5) Sun Jun 16 10:13:14 2024 -#> Added naiveBayes predictions according to global threshold = 0 Sun Jun 16 10:13:14 2024 +#> Performed naiveBayes prediction (laplace=5) Fri Oct 18 17:20:30 2024 +#> Added naiveBayes predictions according to global threshold = 0 Fri Oct 18 17:20:30 2024 #> MSnbase version: 1.17.12 getPredictions(res, fcol = "naiveBayes", t = 1) #> ans @@ -217,30 +189,26 @@

    Examples

    #> Loaded on Thu Jul 16 22:53:08 2015. #> Normalised to sum of intensities. #> Added markers from 'mrk' marker vector. Thu Jul 16 22:53:08 2015 -#> Performed naiveBayes prediction (laplace=5) Sun Jun 16 10:13:14 2024 -#> Added naiveBayes predictions according to global threshold = 1 Sun Jun 16 10:13:14 2024 +#> Performed naiveBayes prediction (laplace=5) Fri Oct 18 17:20:30 2024 +#> Added naiveBayes predictions according to global threshold = 1 Fri Oct 18 17:20:30 2024 #> MSnbase version: 1.17.12 plot2D(res, fcol = "naiveBayes")
    -
    - -
    +
    -
    - +
    diff --git a/reference/nbOptimisation.html b/reference/nbOptimisation.html index c7aec1be..9ed161b9 100644 --- a/reference/nbOptimisation.html +++ b/reference/nbOptimisation.html @@ -1,80 +1,52 @@ -nb paramter optimisation — nbOptimisation • pRoloc - - -
    -
    -
    - + + +
    +
    +
    +
    -
    +

    Classification algorithm parameter for the naive Bayes algorithm.

    -
    +
    +

    Usage

    nbOptimisation(
       object,
       fcol = "markers",
    @@ -89,8 +61,8 @@ 

    nb paramter optimisation

    )
    -
    -

    Arguments

    +
    +

    Arguments

    object
    @@ -135,12 +107,12 @@

    Arguments

    Additional parameters passed to naiveBayes from package e1071.

    -
    -

    Value

    +
    +

    Value

    An instance of class "GenRegRes".

    -
    -

    Details

    +
    +

    Details

    Note that when performance scores precision, recall and (macro) F1 are calculated, any NA values are replaced by 0. This decision is motivated by the fact that any class that would have either a NA @@ -149,32 +121,28 @@

    Details

    leads to F1 values of 0 and a reduced yet defined final macro F1 score.

    -
    -

    See also

    +
    +

    See also

    nbClassification and example therein.

    -
    -

    Author

    +
    +

    Author

    Laurent Gatto

    -
    - -
    +
    -
    - +
    diff --git a/reference/nbOptimization.html b/reference/nbOptimization.html new file mode 100644 index 00000000..bc2f8f22 --- /dev/null +++ b/reference/nbOptimization.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/nbPrediction.html b/reference/nbPrediction.html new file mode 100644 index 00000000..6f6019c1 --- /dev/null +++ b/reference/nbPrediction.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/nbRegularisation.html b/reference/nbRegularisation.html new file mode 100644 index 00000000..bc2f8f22 --- /dev/null +++ b/reference/nbRegularisation.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/nicheMeans2D.html b/reference/nicheMeans2D.html index b0ea9ac6..0fa1b1c6 100644 --- a/reference/nicheMeans2D.html +++ b/reference/nicheMeans2D.html @@ -1,82 +1,55 @@ -Uncertainty plot organelle means — nicheMeans2D • pRoloc - - -
    -
    -
    - + + +
    +
    +
    +
    -
    +

    Produces a pca plot with uncertainty in organelle means projected onto the PCA plot with contours.

    -
    +
    +

    Usage

    nicheMeans2D(
       object,
       params,
    @@ -87,8 +60,8 @@ 

    Uncertainty plot organelle means

    )
    -
    -

    Arguments

    +
    +

    Arguments

    object
    @@ -117,18 +90,18 @@

    Arguments

    A argument to change the plotting aspect of the PCA

    -
    -

    Value

    +
    +

    Value

    Used for side effect of producing plot. Invisibily returns an ggplot object that can be further manipulated

    -
    -

    Author

    +
    +

    Author

    Oliver M. Crook <omc25@cam.ac.uk>

    -
    -

    Examples

    +
    +

    Examples

    if (FALSE) { # \dontrun{
     library("pRolocdata")
     data("tan2009r1")
    @@ -143,23 +116,19 @@ 

    Examples

    } # }
    -
    - -
    +
    -
    - +
    diff --git a/reference/nndist,MSnSet,missing-method.html b/reference/nndist,MSnSet,missing-method.html new file mode 100644 index 00000000..8d5361ff --- /dev/null +++ b/reference/nndist,MSnSet,missing-method.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/nndist,matrix,matrix-method.html b/reference/nndist,matrix,matrix-method.html new file mode 100644 index 00000000..8d5361ff --- /dev/null +++ b/reference/nndist,matrix,matrix-method.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/nndist,matrix,missing-method.html b/reference/nndist,matrix,missing-method.html new file mode 100644 index 00000000..8d5361ff --- /dev/null +++ b/reference/nndist,matrix,missing-method.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/nndist-methods.html b/reference/nndist-methods.html index ef2d9697..0bb0c3a0 100644 --- a/reference/nndist-methods.html +++ b/reference/nndist-methods.html @@ -1,84 +1,56 @@ -Nearest neighbour distances — nndist-methods • pRoloc - - -
    -
    +
    +
    +
    -
    - -
    +

    Methods computing the nearest neighbour indices and distances for matrix and MSnSet instances.

    -
    -

    Methods

    +
    +

    Methods

    signature(object = "matrix", k = "numeric", dist = @@ -112,8 +84,8 @@

    Methods

    -
    -

    Examples

    +
    +

    Examples

    library("pRolocdata")
     data(dunkley2006)
     
    @@ -206,23 +178,19 @@ 

    Examples

    #> AT4G00175 75 0.07679760 92 0.07719277
    -
    - -
    +
    -
    - +
    diff --git a/reference/nndist.html b/reference/nndist.html new file mode 100644 index 00000000..8d5361ff --- /dev/null +++ b/reference/nndist.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/nnetClassification-1.png b/reference/nnetClassification-1.png index 8c81dab0..9bc3f542 100644 Binary files a/reference/nnetClassification-1.png and b/reference/nnetClassification-1.png differ diff --git a/reference/nnetClassification-2.png b/reference/nnetClassification-2.png index 2e29f7bc..ed1b9045 100644 Binary files a/reference/nnetClassification-2.png and b/reference/nnetClassification-2.png differ diff --git a/reference/nnetClassification-3.png b/reference/nnetClassification-3.png index c0330901..b8380e4e 100644 Binary files a/reference/nnetClassification-3.png and b/reference/nnetClassification-3.png differ diff --git a/reference/nnetClassification.html b/reference/nnetClassification.html index c8d70a99..1f3120d0 100644 --- a/reference/nnetClassification.html +++ b/reference/nnetClassification.html @@ -1,82 +1,55 @@ -nnet classification — nnetClassification • pRoloc - - -
    -
    -
    - + + +
    +
    +
    +
    -
    +

    Classification using the artificial neural network algorithm.

    -
    +
    +

    Usage

    nnetClassification(
       object,
       assessRes,
    @@ -88,8 +61,8 @@ 

    nnet classification

    )
    -
    -

    Arguments

    +
    +

    Arguments

    object
    @@ -128,19 +101,19 @@

    Arguments

    package nnet.

    -
    -

    Value

    +
    +

    Value

    An instance of class "MSnSet" with nnet and nnet.scores feature variables storing the classification results and scores respectively.

    -
    -

    Author

    +
    +

    Author

    Laurent Gatto

    -
    -

    Examples

    +
    +

    Examples

    library(pRolocdata)
     data(dunkley2006)
     ## reducing parameter search space and iterations 
    @@ -158,7 +131,7 @@ 

    Examples

    #> Results #> macro F1: #> Min. 1st Qu. Median Mean 3rd Qu. Max. -#> 0.9500 0.9681 0.9862 0.9787 0.9931 1.0000 +#> 0.9315 0.9497 0.9680 0.9562 0.9686 0.9692 #> best decay: 1e-05 #> best size: 10 plot(params) @@ -174,25 +147,25 @@

    Examples

    res <- nnetClassification(dunkley2006, params) #> [1] "markers" #> # weights: 269 -#> initial value 717.879821 -#> iter 10 value 304.725847 -#> iter 20 value 111.542780 -#> iter 30 value 14.757886 -#> iter 40 value 4.279708 -#> iter 50 value 2.339038 -#> iter 60 value 1.240553 -#> iter 70 value 0.892605 -#> iter 80 value 0.810195 -#> iter 90 value 0.729111 -#> iter 100 value 0.697179 -#> final value 0.697179 +#> initial value 697.695219 +#> iter 10 value 330.822942 +#> iter 20 value 62.982498 +#> iter 30 value 6.342970 +#> iter 40 value 2.218304 +#> iter 50 value 1.029739 +#> iter 60 value 0.812753 +#> iter 70 value 0.663665 +#> iter 80 value 0.487229 +#> iter 90 value 0.413383 +#> iter 100 value 0.372197 +#> final value 0.372197 #> stopped after 100 iterations getPredictions(res, fcol = "nnet") #> ans #> ER lumen ER membrane Golgi Mitochondrion PM -#> 19 176 103 104 123 +#> 17 173 94 104 134 #> Plastid Ribosome TGN vacuole -#> 54 59 20 31 +#> 51 61 22 33 #> MSnSet (storageMode: lockedEnvironment) #> assayData: 689 features, 16 samples #> element names: exprs @@ -212,15 +185,15 @@

    Examples

    #> Loaded on Thu Jul 16 22:53:08 2015. #> Normalised to sum of intensities. #> Added markers from 'mrk' marker vector. Thu Jul 16 22:53:08 2015 -#> Performed nnet prediction (decay=1e-05 size=10) Sun Jun 16 10:13:19 2024 -#> Added nnet predictions according to global threshold = 0 Sun Jun 16 10:13:19 2024 +#> Performed nnet prediction (decay=1e-05 size=10) Fri Oct 18 17:20:34 2024 +#> Added nnet predictions according to global threshold = 0 Fri Oct 18 17:20:34 2024 #> MSnbase version: 1.17.12 getPredictions(res, fcol = "nnet", t = 0.75) #> ans #> ER lumen ER membrane Golgi Mitochondrion PM -#> 19 176 102 104 118 +#> 17 170 92 102 128 #> Plastid Ribosome TGN unknown vacuole -#> 52 56 18 13 31 +#> 51 58 20 19 32 #> MSnSet (storageMode: lockedEnvironment) #> assayData: 689 features, 16 samples #> element names: exprs @@ -240,30 +213,26 @@

    Examples

    #> Loaded on Thu Jul 16 22:53:08 2015. #> Normalised to sum of intensities. #> Added markers from 'mrk' marker vector. Thu Jul 16 22:53:08 2015 -#> Performed nnet prediction (decay=1e-05 size=10) Sun Jun 16 10:13:19 2024 -#> Added nnet predictions according to global threshold = 0.75 Sun Jun 16 10:13:19 2024 +#> Performed nnet prediction (decay=1e-05 size=10) Fri Oct 18 17:20:34 2024 +#> Added nnet predictions according to global threshold = 0.75 Fri Oct 18 17:20:34 2024 #> MSnbase version: 1.17.12 plot2D(res, fcol = "nnet")
    -
    - -
    +
    -
    - +
    diff --git a/reference/nnetOptimisation.html b/reference/nnetOptimisation.html index 9959ba4e..d02839da 100644 --- a/reference/nnetOptimisation.html +++ b/reference/nnetOptimisation.html @@ -1,82 +1,55 @@ -nnet parameter optimisation — nnetOptimisation • pRoloc - - -
    -
    -
    - + + +
    +
    +
    +
    -
    +

    Classification parameter optimisation for artificial neural network algorithm.

    -
    +
    +

    Usage

    nnetOptimisation(
       object,
       fcol = "markers",
    @@ -92,8 +65,8 @@ 

    nnet parameter optimisation

    )
    -
    -

    Arguments

    +
    +

    Arguments

    object
    @@ -142,12 +115,12 @@

    Arguments

    Additional parameters passed to nnet from package nnet.

    -
    -

    Value

    +
    +

    Value

    An instance of class "GenRegRes".

    -
    -

    Details

    +
    +

    Details

    Note that when performance scores precision, recall and (macro) F1 are calculated, any NA values are replaced by 0. This decision is motivated by the fact that any class that would have either a NA @@ -156,32 +129,28 @@

    Details

    leads to F1 values of 0 and a reduced yet defined final macro F1 score.

    -
    -

    See also

    +
    +

    See also

    nnetClassification and example therein.

    -
    -

    Author

    +
    +

    Author

    Laurent Gatto

    -
    - -
    +
    -
    - +
    diff --git a/reference/nnetOptimization.html b/reference/nnetOptimization.html new file mode 100644 index 00000000..23de9a00 --- /dev/null +++ b/reference/nnetOptimization.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/nnetPrediction.html b/reference/nnetPrediction.html new file mode 100644 index 00000000..17898155 --- /dev/null +++ b/reference/nnetPrediction.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/nnetRegularisation.html b/reference/nnetRegularisation.html new file mode 100644 index 00000000..23de9a00 --- /dev/null +++ b/reference/nnetRegularisation.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/orderGoAnnotations.html b/reference/orderGoAnnotations.html index 865d129a..33c81332 100644 --- a/reference/orderGoAnnotations.html +++ b/reference/orderGoAnnotations.html @@ -1,84 +1,58 @@ -Orders annotation information — orderGoAnnotations • pRolocOrders annotation information — orderGoAnnotations • pRoloc - - -
    -
    -
    - + + +
    +
    +
    +
    -
    +

    For a given matrix of annotation information, this function returns the information ordered according to the best fit with the data.

    -
    +
    +

    Usage

    orderGoAnnotations(
       object,
       fcol = "GOAnnotations",
    @@ -90,8 +64,8 @@ 

    Orders annotation information

    )
    -
    -

    Arguments

    +
    +

    Arguments

    object
    @@ -124,13 +98,13 @@

    Arguments

    An optional random number generation seed.

    -
    -

    Value

    +
    +

    Value

    An updated MSnSet containing the newly ordered fcol matrix.

    -
    -

    Details

    +
    +

    Details

    As there are typically many protein/annotation sets that may fit the data we order protein sets by best fit i.e. cluster tightness, by computing the mean normalised Euclidean distance for all instances @@ -156,32 +130,28 @@

    Details

    getNormDist, see the "Annotating spatial proteomics data" vignette for more details.

    -
    -

    See also

    +
    +

    See also

    addGoAnnotations and example therein.

    -
    -

    Author

    +
    +

    Author

    Lisa M Breckels

    -
    - -
    +
    -
    - +
    diff --git a/reference/orgQuants.html b/reference/orgQuants.html index b765528f..22afbb4a 100644 --- a/reference/orgQuants.html +++ b/reference/orgQuants.html @@ -1,87 +1,60 @@ -Returns organelle-specific quantile scores — orgQuants • pRoloc - - -
    -
    -
    - + + +
    +
    +
    +
    -
    +

    This function produces organelle-specific quantiles corresponding to the given classification scores.

    -
    +
    +

    Usage

    orgQuants(object, fcol, scol, mcol = "markers", t, verbose = TRUE)
    -
    -

    Arguments

    +
    +

    Arguments

    object
    @@ -112,22 +85,22 @@

    Arguments

    If TRUE, the calculated threholds are printed.

    -
    -

    Value

    +
    +

    Value

    A named vector of organelle thresholds.

    -
    -

    See also

    +
    +

    See also

    getPredictions to get organelle predictions based on calculated thresholds.

    -
    -

    Author

    +
    +

    Author

    Lisa Breckels

    -
    -

    Examples

    +
    +

    Examples

    library("pRolocdata")
     data(dunkley2006)
     res <- svmClassification(dunkley2006, fcol = "pd.markers",
    @@ -136,15 +109,15 @@ 

    Examples

    ## 50% top predictions per class ts <- orgQuants(res, fcol = "svm", t = .5) #> ER lumen ER membrane Golgi Mitochondrion PM -#> 0.3061708 0.8405322 0.7772791 0.7522059 0.7316163 +#> 0.3317333 0.8408778 0.7704946 0.7454902 0.7358157 #> Plastid Ribosome TGN vacuole -#> 0.7736651 0.5292914 0.5527200 0.5632360 +#> 0.7733089 0.5635351 0.5184457 0.5735586 getPredictions(res, fcol = "svm", t = ts) #> ans #> ER lumen ER membrane Golgi Mitochondrion PM -#> 15 117 65 78 86 +#> 15 117 65 78 85 #> Plastid Ribosome TGN unknown vacuole -#> 36 39 15 212 26 +#> 36 39 15 213 26 #> MSnSet (storageMode: lockedEnvironment) #> assayData: 689 features, 16 samples #> element names: exprs @@ -164,28 +137,24 @@

    Examples

    #> Loaded on Thu Jul 16 22:53:08 2015. #> Normalised to sum of intensities. #> Added markers from 'mrk' marker vector. Thu Jul 16 22:53:08 2015 -#> Performed svm prediction (cost=0.5 sigma=0.1) Sun Jun 16 10:13:20 2024 -#> Added svm predictions according to thresholds: ER lumen = 0.31, ER membrane = 0.84, Golgi = 0.78, Mitochondrion = 0.75, PM = 0.73, Plastid = 0.77, Ribosome = 0.53, TGN = 0.55, vacuole = 0.56 Sun Jun 16 10:13:20 2024 +#> Performed svm prediction (cost=0.5 sigma=0.1) Fri Oct 18 17:20:35 2024 +#> Added svm predictions according to thresholds: ER lumen = 0.33, ER membrane = 0.84, Golgi = 0.77, Mitochondrion = 0.75, PM = 0.74, Plastid = 0.77, Ribosome = 0.56, TGN = 0.52, vacuole = 0.57 Fri Oct 18 17:20:35 2024 #> MSnbase version: 1.17.12
    -
    - -
    +
    -
    - +
    diff --git a/reference/pRoloc-defunct.html b/reference/pRoloc-defunct.html new file mode 100644 index 00000000..4d2bd736 --- /dev/null +++ b/reference/pRoloc-defunct.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/pRoloc-deprecated.html b/reference/pRoloc-deprecated.html new file mode 100644 index 00000000..4d2bd736 --- /dev/null +++ b/reference/pRoloc-deprecated.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/pRolocmarkers.html b/reference/pRolocmarkers.html index afba2fc9..dc5893ed 100644 --- a/reference/pRolocmarkers.html +++ b/reference/pRolocmarkers.html @@ -1,135 +1,154 @@ -Organelle markers — pRolocmarkers • pRoloc - - -
    -
    -
    - + + +
    +
    +
    +
    -
    -

    This function retrieves a list of organelle markers or, if no -species is provided, prints a description of available -marker sets. The markers can be added to and MSnSet using -the addMarkers function.

    +
    +

    This function retrieves a list of organelle markers or, if no species +is provided, prints a description of available marker sets. The markers can +be added to and MSnSet using the addMarkers +function. Several marker version are provided (see Details for additional +information).

    -
    -
    pRolocmarkers(species)
    +
    +

    Usage

    +
    pRolocmarkers(species, version = "2")
    -
    -

    Arguments

    +
    +

    Arguments

    species
    -

    The species of interest.

    +

    character(1) defining the species of interest. For +reference species markers, this is just the species +e.g. "hsap". For published marker sets this is the species and +author name e.g. "hsap_geladaki".

    + + +
    version
    +

    character(1) defining the marker version. Default is +"2".

    -
    -

    Value

    -

    Prints a description of the available marker lists if -species is missing or a named character with organelle -markers.

    +
    +

    Value

    +

    Prints a description of the available marker lists if species + is missing or a named character with organelle markers.

    -
    -

    Details

    -

    The markers have been contributed by various members of the -Cambridge Centre for Proteomics, in particular Dr Dan Nightingale -for yeast, Dr Andy Christoforou and Dr Claire Mulvey for human, Dr -Arnoud Groen for Arabodopsis and Dr Claire Mulvey for mouse. In -addition, original (curated) markers from the pRolocdata -datasets have been extracted (see pRolocdata for details -and references). Curation involved verification of publicly -available subcellular localisation annotation based on the -curators knowledge of the organelles/proteins considered and -tracing the original statement in the literature.

    -

    These markers are provided as a starting point to generate -reliable sets of organelle markers but still need to be verified -against any new data in the light of the quantitative data and the -study conditions.

    +
    +

    Details

    +

    Version 1 of the markers have been contributed by various members of the +Cambridge Centre for Proteomics, in particular Dr Dan Nightingale for yeast, +Dr Andy Christoforou and Dr Claire Mulvey for human, Dr Arnoud Groen for +Arabodopsis and Dr Claire Mulvey for mouse. In addition, original (curated) +markers from the pRolocdata datasets have been extracted (see +pRolocdata for details and references). Curation involved +verification of publicly available subcellular localisation annotation based +on the curators knowledge of the organelles/proteins considered and tracing +the original statement in the literature.

    +

    Version 2 of the markers (current default) have been updated by Charlotte +Hutchings from the Cambridge Centre for Proteomics. Reference species marker +sets are the same as those in version 1 with minor corrections and an +updated naming system. Version 2 also contains additional marker sets from +spatial proteomics publications. References for the source publications are +provided below:

    +
    • Geladaki, A., Britovsek, N.K., Breckels, L.M., Smith, T.S., Vennard, + O.L., Mulvey, C.M., Crook, O.M., Gatto, L. and Lilley, K.S. (2019) + Combining LOPIT with differential ultracentrifugation for high-resolution + spatial proteomics. Nature Communications. 10 + (1). doi:10.1038/s41467-018-08191-w

    • +
    • Christopher, J.A., Breckels, L.M., Crook, O.M., Vazquez–Chantada, M., + Barratt, D. and Lilley, K.S. (2024) Global proteomics indicates + subcellular-specific anti-ferroptotic responses to ionizing + radiation.p.2024.09.12.611851. doi:10.1101/2024.09.12.611851

    • +
    • Itzhak, D.N., Tyanova, S., Cox, J. and Borner, G.H. (2016) Global, + quantitative and dynamic mapping of protein subcellular localization. + eLife. 5. doi:10.7554/elife.16950

    • +
    • Villanueva, E., Smith, T., Pizzinga, M., Elzek, M., Queiroz, R.M.L., + Harvey, R.F., Breckels, L.M., Crook, O.M., Monti, M., Dezi, V., Willis, + A.E. and Lilley, K.S. (2023) System-wide analysis of RNA and protein + subcellular localization dynamics. Nature Methods. 1-12. + doi:10.1038/s41592-023-02101-9

    • +
    • Christoforou, A., Mulvey, C.M., Breckels, L.M., Geladaki, A., Hurrell, + T., Hayward, P.C., Naake, T., Gatto, L., Viner, R., Arias, A.M. and Lilley, + K.S. (2016) A draft map of the mouse pluripotent stem cell spatial + proteome. Nature Communications. 7 (1). doi:10.1038/ncomms9992

    • +
    • Barylyuk, K., Koreny, L., Ke, H., Butterworth, S., Crook, O.M., + Lassadi, I., Gupta, V., Tromer, E., Mourier, T., Stevens, T.J., Breckels, + L.M., Pain, A., Lilley, K.S. and Waller, R.F. (2020) A Comprehensive + Subcellular Atlas of the Toxoplasma Proteome via hyperLOPIT Provides + Spatial Context for Protein Functions. Cell Host and Microbe. 28 (5), + 752-766.e9. doi:10.1016/j.chom.2020.09.011

    • +
    • Moloney, N.M., Barylyuk, K., Tromer, E., Crook, O.M., Breckels, L.M., + Lilley, K.S., Waller, R.F. and MacGregor, P. (2023) Mapping diversity in + African trypanosomes using high resolution spatial proteomics. Nature + Communications. 14 (1), 4401. doi:10.1038/s41467-023-40125-z

    • +

    Note: These markers are provided as a starting point to generate reliable +sets of organelle markers but still need to be verified against any new data +in the light of the quantitative data and the study conditions.

    -
    -

    See also

    -

    addMarkers to add markers to an -MSnSet and markers for more information about -marker encoding.

    +
    +

    See also

    +

    addMarkers to add markers to an MSnSet and + markers for more information about marker encoding.

    -
    -

    Author

    +
    +

    Author

    Laurent Gatto

    -
    -

    Examples

    +
    +

    Examples

    pRolocmarkers()
    -#> 7 marker lists available:
    +#> 14 marker lists (version 2) available:
     #> Arabidopsis thaliana [atha]:
     #>  Ids: TAIR, 543 markers
     #> Drosophila melanogaster [dmel]:
    @@ -138,49 +157,640 @@ 

    Examples

    #> Ids: IPI, 102 markers #> Homo sapiens [hsap]: #> Ids: Uniprot, 872 markers +#> Homo sapiens [hsap_christopher]: +#> Ids: Uniprot, 1509 markers +#> Homo sapiens [hsap_geladaki]: +#> Ids: Uniprot, 579 markers +#> Homo sapiens [hsap_itzhak]: +#> Ids: Uniprot, 1076 markers +#> Homo sapiens [hsap_villaneuva]: +#> Ids: Uniprot, 682 markers #> Mus musculus [mmus]: #> Ids: Uniprot, 937 markers +#> Mus musculus [mmus_christoforou]: +#> Ids: Uniprot, 922 markers #> Saccharomyces cerevisiae [scer_sgd]: #> Ids: SGD, 259 markers #> Saccharomyces cerevisiae [scer_uniprot]: -#> Ids: Uniprot Accession, 259 markers -table(pRolocmarkers("atha")) -#> -#> ENV ER ER lumen ER membrane Golgi -#> 46 30 9 42 27 -#> Mitochondrion PM Plastid Ribosome STR -#> 103 60 48 8 83 -#> TGN THY Vacuole -#> 13 56 18 +#> Ids: Uniprot, 259 markers +#> Toxoplasma gondii [toxo_barylyuk]: +#> Ids: ToxoDB gene identifier, 718 markers +#> Trypanosoma brucei [tryp_moloney]: +#> Ids: TriTrypDB gene identifier, 891 markers +pRolocmarkers("hsap") +#> P08865 P0CW22 P15880 +#> "40S Ribosome" "40S Ribosome" "40S Ribosome" +#> P22090 P23396 P25398 +#> "40S Ribosome" "40S Ribosome" "40S Ribosome" +#> P39019 P42677 P46781 +#> "40S Ribosome" "40S Ribosome" "40S Ribosome" +#> P46782 P46783 P60866 +#> "40S Ribosome" "40S Ribosome" "40S Ribosome" +#> P61247 P62081 P62241 +#> "40S Ribosome" "40S Ribosome" "40S Ribosome" +#> P62244 P62249 P62263 +#> "40S Ribosome" "40S Ribosome" "40S Ribosome" +#> P62266 P62269 P62273 +#> "40S Ribosome" "40S Ribosome" "40S Ribosome" +#> P62277 P62280 P62701 +#> "40S Ribosome" "40S Ribosome" "40S Ribosome" +#> P62753 P62841 P62847-2 +#> "40S Ribosome" "40S Ribosome" "40S Ribosome" +#> P62851 P62854 P62857 +#> "40S Ribosome" "40S Ribosome" "40S Ribosome" +#> P62861 P62979 P63220 +#> "40S Ribosome" "40S Ribosome" "40S Ribosome" +#> P05386 P05387 P05388 +#> "60S Ribosome" "60S Ribosome" "60S Ribosome" +#> P18077 P18124 P18621 +#> "60S Ribosome" "60S Ribosome" "60S Ribosome" +#> P26373 P27635 P30050 +#> "60S Ribosome" "60S Ribosome" "60S Ribosome" +#> P32969 P35268 P36578 +#> "60S Ribosome" "60S Ribosome" "60S Ribosome" +#> P39023 P40429 P42766 +#> "60S Ribosome" "60S Ribosome" "60S Ribosome" +#> P46776 P46777 P46778 +#> "60S Ribosome" "60S Ribosome" "60S Ribosome" +#> P46779 P47914 P49207 +#> "60S Ribosome" "60S Ribosome" "60S Ribosome" +#> P50914 P61254 P61313 +#> "60S Ribosome" "60S Ribosome" "60S Ribosome" +#> P61353 P61513 P61927 +#> "60S Ribosome" "60S Ribosome" "60S Ribosome" +#> P62424 P62750 P62829 +#> "60S Ribosome" "60S Ribosome" "60S Ribosome" +#> P62888 P62899 P62906 +#> "60S Ribosome" "60S Ribosome" "60S Ribosome" +#> P62910 P62913-2 P62917 +#> "60S Ribosome" "60S Ribosome" "60S Ribosome" +#> P62987 P63173 P83731 +#> "60S Ribosome" "60S Ribosome" "60S Ribosome" +#> P83881 P84098 Q02543 +#> "60S Ribosome" "60S Ribosome" "60S Ribosome" +#> Q02878 Q07020 Q969Q0 +#> "60S Ribosome" "60S Ribosome" "60S Ribosome" +#> Q9Y3U8 Q01518 P13796 +#> "60S Ribosome" "Actin Cytoskeleton" "Actin Cytoskeleton" +#> P63261 P28289 O15143 +#> "Actin Cytoskeleton" "Actin Cytoskeleton" "Actin Cytoskeleton" +#> O15144 O15145 O15511 +#> "Actin Cytoskeleton" "Actin Cytoskeleton" "Actin Cytoskeleton" +#> O75369 O75369-8 P06753 +#> "Actin Cytoskeleton" "Actin Cytoskeleton" "Actin Cytoskeleton" +#> P06753-2 P06753-3 P06753-5 +#> "Actin Cytoskeleton" "Actin Cytoskeleton" "Actin Cytoskeleton" +#> P09493 P09493-10 P09493-5 +#> "Actin Cytoskeleton" "Actin Cytoskeleton" "Actin Cytoskeleton" +#> P12814 P23528 P47755 +#> "Actin Cytoskeleton" "Actin Cytoskeleton" "Actin Cytoskeleton" +#> P47756 P47756-2 P52907 +#> "Actin Cytoskeleton" "Actin Cytoskeleton" "Actin Cytoskeleton" +#> P59998 P60709 P60981-2 +#> "Actin Cytoskeleton" "Actin Cytoskeleton" "Actin Cytoskeleton" +#> P61158 P61160 P67936 +#> "Actin Cytoskeleton" "Actin Cytoskeleton" "Actin Cytoskeleton" +#> P68032 Q16658 Q562R1 +#> "Actin Cytoskeleton" "Actin Cytoskeleton" "Actin Cytoskeleton" +#> Q92747 Q9BPX5 Q9BR76 +#> "Actin Cytoskeleton" "Actin Cytoskeleton" "Actin Cytoskeleton" +#> Q9NYL9 Q9NZ32 Q9NZR1 +#> "Actin Cytoskeleton" "Actin Cytoskeleton" "Actin Cytoskeleton" +#> Q9P1U1-3 Q9Y281 Q9Y4G6 +#> "Actin Cytoskeleton" "Actin Cytoskeleton" "Actin Cytoskeleton" +#> P06753-6 Q14847 P07737 +#> "Actin Cytoskeleton" "Actin Cytoskeleton" "Actin Cytoskeleton" +#> Q9UJW0 P34932 P22102 +#> "Actin Cytoskeleton" "Cytosol" "Cytosol" +#> Q8TCU6 O60841 Q12882 +#> "Cytosol" "Cytosol" "Cytosol" +#> P49915-2 Q04446 Q6XQN6 +#> "Cytosol" "Cytosol" "Cytosol" +#> O43847 Q06210-2 Q3KQV9 +#> "Cytosol" "Cytosol" "Cytosol" +#> O14841 P19971 Q16543 +#> "Cytosol" "Cytosol" "Cytosol" +#> P36871 Q9Y617 P60891 +#> "Cytosol" "Cytosol" "Cytosol" +#> P16152 Q9HAB8 Q96KP4 +#> "Cytosol" "Cytosol" "Cytosol" +#> P32119 Q9NR45 P19623 +#> "Cytosol" "Cytosol" "Cytosol" +#> P53602 O43765 P29218 +#> "Cytosol" "Cytosol" "Cytosol" +#> O95336 P16930 P08243-2 +#> "Cytosol" "Cytosol" "Cytosol" +#> P34949 Q9HA64 P49593 +#> "Cytosol" "Cytosol" "Cytosol" +#> P61081 P00492 Q9P2T1 +#> "Cytosol" "Cytosol" "Cytosol" +#> Q15274 O95394 Q9H773 +#> "Cytosol" "Cytosol" "Cytosol" +#> P29762 Q6IA69 Q14376 +#> "Cytosol" "Cytosol" "Cytosol" +#> P09467 Q96AT9 Q13630 +#> "Cytosol" "Cytosol" "Cytosol" +#> Q9H8S9 Q96BN8 P37837 +#> "Cytosol" "Cytosol" "Cytosol" +#> P48637 Q9NR50 O75822 +#> "Cytosol" "Cytosol" "Cytosol" +#> A0AVT1 P15170-2 P31153 +#> "Cytosol" "Cytosol" "Cytosol" +#> Q04760 P50225 P18440 +#> "Cytosol" "Cytosol" "Cytosol" +#> P51570 Q9BRA2 P50452 +#> "Cytosol" "Cytosol" "Cytosol" +#> A6NDG6 Q9NRX4 Q9BQC3 +#> "Cytosol" "Cytosol" "Cytosol" +#> O14732 Q9H2P9 O43175 +#> "Cytosol" "Cytosol" "Cytosol" +#> Q9NT62 P52788 P07741 +#> "Cytosol" "Cytosol" "Cytosol" +#> P49588 P09488 P49591 +#> "Cytosol" "Cytosol" "Cytosol" +#> P49589 Q96C23 P49902 +#> "Cytosol" "Cytosol" "Cytosol" +#> Q7L5D6 P30711 Q9UPN7 +#> "Cytosol" "Cytosol" "Cytosol" +#> Q9NYU2-2 Q5JRA6 P13667 +#> "ER" "ER" "ER" +#> P30101 P07237 P16615 +#> "ER" "ER" "ER" +#> P04843 P16435 P08240 +#> "ER" "ER" "ER" +#> O60568 P27824 Q12797 +#> "ER" "ER" "ER" +#> Q8NBJ5 Q15084-3 Q9UGP8 +#> "ER" "ER" "ER" +#> P48449 Q13438-4 Q02809 +#> "ER" "ER" "ER" +#> O95479 Q9H0X9-2 Q13724 +#> "ER" "ER" "ER" +#> O15320-8 Q14571 O75477 +#> "ER" "ER" "ER" +#> Q9BS26 Q7Z2K6 P14314-2 +#> "ER" "ER" "ER" +#> P30040 P50454 Q8NBS9 +#> "ER" "ER" "ER" +#> Q9Y4P3 Q9BPW9 Q9BZQ6-2 +#> "ER" "ER" "ER" +#> P07099 O15269 Q16850 +#> "ER" "ER" "ER" +#> O15270 Q14554 Q969N2-5 +#> "ER" "ER" "ER" +#> Q96JJ7 Q969V3-2 Q92611 +#> "ER" "ER" "ER" +#> Q6UWW8 Q6P1M0 P39656 +#> "ER" "ER" "ER" +#> Q9BT09 Q96S52 O00469 +#> "ER" "ER" "ER" +#> Q86UL3 Q15293 O95302 +#> "ER" "ER" "ER" +#> Q96DZ1 Q15005 Q643R3 +#> "ER" "ER" "ER" +#> Q9H3N1 Q8NBM4 O43292 +#> "ER" "ER" "ER" +#> Q9H488 O95881 Q9BU23-2 +#> "ER" "ER" "ER" +#> Q6IAN0 Q8TC12 Q9UBM7 +#> "ER" "ER" "ER" +#> P61619 Q9NZ01 P26885 +#> "ER" "ER" "ER" +#> Q9H6R6-2 Q99442 P60468 +#> "ER" "ER" "ER" +#> Q92604 O00400 Q86TM6-2 +#> "ER" "ER" "ER" +#> P61009 Q9P0I2 Q15011-3 +#> "ER" "ER" "ER" +#> Q9BV94-2 Q9UNW1 P43307 +#> "ER" "ER" "ER" +#> O75298-3 Q8N5M9 Q96HR9 +#> "ER" "ER" "ER" +#> Q96E22 O75845 Q9P2X0 +#> "ER" "ER" "ER" +#> Q6Y288 Q9BQB6 Q8IYK4 +#> "ER" "ER" "ER" +#> Q7Z4H8 O15460 O95470 +#> "ER" "ER" "ER" +#> Q2TAA5 Q8TCJ2 O60476 +#> "ER" "ER" "Golgi" +#> O75063 P26572 Q10469 +#> "Golgi" "Golgi" "Golgi" +#> Q10472 Q14789 Q14789-2 +#> "Golgi" "Golgi" "Golgi" +#> Q14789-4 Q16706 Q5SRI9 +#> "Golgi" "Golgi" "Golgi" +#> Q7LGA3 Q8TBA6 Q8TBA6-2 +#> "Golgi" "Golgi" "Golgi" +#> Q9NX62 Q9NXS2 Q9NY97 +#> "Golgi" "Golgi" "Golgi" +#> Q9NY97-2 Q9P2E5 Q495W5-2 +#> "Golgi" "Golgi" "Golgi" +#> A6NKF9 Q9BYC5 O94766 +#> "Golgi" "Golgi" "Golgi" +#> P49641 Q8NBZ7 Q8NEW0 +#> "Golgi" "Golgi" "Golgi" +#> O14653 O14653-3 P22083 +#> "Golgi" "Golgi" "Golgi" +#> Q13948 Q86SF2 P33908 +#> "Golgi" "Golgi" "Golgi" +#> Q8NCL4 O00461 Q8N4A0 +#> "Golgi" "Golgi" "Golgi" +#> O00115 O00115-2 O00462 +#> "Lysosome" "Lysosome" "Lysosome" +#> O00754 P04062-4 P04066 +#> "Lysosome" "Lysosome" "Lysosome" +#> P06865 P07339 P07602 +#> "Lysosome" "Lysosome" "Lysosome" +#> P07686 P07858 P09668 +#> "Lysosome" "Lysosome" "Lysosome" +#> P10253 P10619 P10619-2 +#> "Lysosome" "Lysosome" "Lysosome" +#> P15586 P17050 P34059 +#> "Lysosome" "Lysosome" "Lysosome" +#> P38571 P38571-2 P43234 +#> "Lysosome" "Lysosome" "Lysosome" +#> Q13571 Q14108 Q6ZP29 +#> "Lysosome" "Lysosome" "Lysosome" +#> Q6ZP29-2 Q8NBJ9 Q9NUN5 +#> "Lysosome" "Lysosome" "Lysosome" +#> Q9NUN5-3 Q9UBX1 Q9UHL4 +#> "Lysosome" "Lysosome" "Lysosome" +#> Q8WWB7-2 O14773 Q9Y646 +#> "Lysosome" "Lysosome" "Lysosome" +#> P35475 Q8NCC3 Q9HAT2-2 +#> "Lysosome" "Lysosome" "Lysosome" +#> Q02083-2 Q01459 Q96RQ9 +#> "Lysosome" "Lysosome" "Lysosome" +#> Q68CP4-2 P15289 P54802 +#> "Lysosome" "Lysosome" "Lysosome" +#> P40939 Q13423 P43304 +#> "Mitochondrion" "Mitochondrion" "Mitochondrion" +#> O60313-2 Q99798 Q3SY69 +#> "Mitochondrion" "Mitochondrion" "Mitochondrion" +#> Q12931-2 Q02218 Q5JTZ9 +#> "Mitochondrion" "Mitochondrion" "Mitochondrion" +#> P28331-4 Q5JRX3 Q9Y6N5 +#> "Mitochondrion" "Mitochondrion" "Mitochondrion" +#> P49411 P00367 O94826 +#> "Mitochondrion" "Mitochondrion" "Mitochondrion" +#> O95202 P09622 Q16822 +#> "Mitochondrion" "Mitochondrion" "Mitochondrion" +#> P31930 P23786 P31040 +#> "Mitochondrion" "Mitochondrion" "Mitochondrion" +#> P23368 P24752 P49448 +#> "Mitochondrion" "Mitochondrion" "Mitochondrion" +#> P05091 P56181-2 P22695 +#> "Mitochondrion" "Mitochondrion" "Mitochondrion" +#> Q10713 O43615 P22033 +#> "Mitochondrion" "Mitochondrion" "Mitochondrion" +#> Q6NUK1 P49821-2 Q02252-2 +#> "Mitochondrion" "Mitochondrion" "Mitochondrion" +#> P30837 P13804 P42765 +#> "Mitochondrion" "Mitochondrion" "Mitochondrion" +#> O75390 P10515 P22570 +#> "Mitochondrion" "Mitochondrion" "Mitochondrion" +#> Q96CM8-3 P12694 P30084 +#> "Mitochondrion" "Mitochondrion" "Mitochondrion" +#> O75306 P55809 O00411 +#> "Mitochondrion" "Mitochondrion" "Mitochondrion" +#> P50213 Q00325-2 O75439 +#> "Mitochondrion" "Mitochondrion" "Mitochondrion" +#> O00330 P04181 P30405 +#> "Mitochondrion" "Mitochondrion" "Mitochondrion" +#> P26440 Q9Y305-2 P11182 +#> "Mitochondrion" "Mitochondrion" "Mitochondrion" +#> Q53H12 O75947 O95299 +#> "Mitochondrion" "Mitochondrion" "Mitochondrion" +#> P53007 P22830 P16219 +#> "Mitochondrion" "Mitochondrion" "Mitochondrion" +#> Q4G0N4 P13995 Q16134 +#> "Mitochondrion" "Mitochondrion" "Mitochondrion" +#> P30038 P36542 O96008 +#> "Mitochondrion" "Mitochondrion" "Mitochondrion" +#> P30042 P53597 Q02127 +#> "Mitochondrion" "Mitochondrion" "Mitochondrion" +#> Q3ZCQ8 Q15118 P19404 +#> "Mitochondrion" "Mitochondrion" "Mitochondrion" +#> P47985 O75027 O43837 +#> "Mitochondrion" "Mitochondrion" "Mitochondrion" +#> Q8N0X4 Q6NVY1 P46199 +#> "Mitochondrion" "Mitochondrion" "Mitochondrion" +#> P43897 P13073 P45954 +#> "Mitochondrion" "Mitochondrion" "Mitochondrion" +#> O15382 P51649 P27144 +#> "Mitochondrion" "Mitochondrion" "Mitochondrion" +#> O00217 P32322 P51553 +#> "Mitochondrion" "Mitochondrion" "Mitochondrion" +#> P42126 P08574 O43181 +#> "Mitochondrion" "Mitochondrion" "Mitochondrion" +#> Q15070-2 O75208 P62072 +#> "Mitochondrion" "Mitochondrion" "Mitochondrion" +#> P18859 O43716 O60830 +#> "Mitochondrion" "Mitochondrion" "Mitochondrion" +#> O75251 P10606 O75964 +#> "Mitochondrion" "Mitochondrion" "Mitochondrion" +#> O43678 O14925 P00403 +#> "Mitochondrion" "Mitochondrion" "Mitochondrion" +#> O75380 Q9Y5L4 O95169-3 +#> "Mitochondrion" "Mitochondrion" "Mitochondrion" +#> Q9Y5J9 P30049 P09669 +#> "Mitochondrion" "Mitochondrion" "Mitochondrion" +#> Q9Y5J7 Q99766 P15954 +#> "Mitochondrion" "Mitochondrion" "Mitochondrion" +#> P10109 O95563 P23434 +#> "Mitochondrion" "Mitochondrion" "Mitochondrion" +#> O95167 O43676 Q8IUX1-4 +#> "Mitochondrion" "Mitochondrion" "Mitochondrion" +#> P0DJ07 O14521-2 O00142-2 +#> "Mitochondrion" "Mitochondrion" "Mitochondrion" +#> Q9UKU7 Q8NI60 Q15031 +#> "Mitochondrion" "Mitochondrion" "Mitochondrion" +#> Q9P0J1 Q9NUB1 O75127 +#> "Mitochondrion" "Mitochondrion" "Mitochondrion" +#> O43819 P07919 O75879 +#> "Mitochondrion" "Mitochondrion" "Mitochondrion" +#> O14874 Q16740 Q5HYK3 +#> "Mitochondrion" "Mitochondrion" "Mitochondrion" +#> Q15120 Q5T160 P46013 +#> "Mitochondrion" "Mitochondrion" "Nucleus" +#> P02545 Q14683 P20700 +#> "Nucleus" "Nucleus" "Nucleus" +#> P11388 A6NHR9 Q9UQE7 +#> "Nucleus" "Nucleus" "Nucleus" +#> O95347 Q9NTJ3 Q03252 +#> "Nucleus" "Nucleus" "Nucleus" +#> O60264 Q9NRL2 Q9NTI5 +#> "Nucleus" "Nucleus" "Nucleus" +#> Q5UIP0 Q29RF7 Q9Y5B9 +#> "Nucleus" "Nucleus" "Nucleus" +#> Q9NR30 Q9GZR7 P24928 +#> "Nucleus" "Nucleus" "Nucleus" +#> Q8N1F7 Q8NI27 P52948-5 +#> "Nucleus" "Nucleus" "Nucleus" +#> O94776 Q92922 P11387 +#> "Nucleus" "Nucleus" "Nucleus" +#> Q7LBC6 P16401 P42167 +#> "Nucleus" "Nucleus" "Nucleus" +#> O95239 Q5SSJ5 Q9Y2U8 +#> "Nucleus" "Nucleus" "Nucleus" +#> O60934 Q9H0A0 P10412 +#> "Nucleus" "Nucleus" "Nucleus" +#> P43246 P16402 Q15424-4 +#> "Nucleus" "Nucleus" "Nucleus" +#> Q08945 Q9NXV6 Q01826 +#> "Nucleus" "Nucleus" "Nucleus" +#> P51532-5 P16403 Q8NFC6 +#> "Nucleus" "Nucleus" "Nucleus" +#> P23193 O60341 P42167-2 +#> "Nucleus" "Nucleus" "Nucleus" +#> Q86YP4 P42695 Q96ST3 +#> "Nucleus" "Nucleus" "Nucleus" +#> O14981 O00567 P35251-2 +#> "Nucleus" "Nucleus" "Nucleus" +#> Q92522 Q8WXF1 Q8WXI9 +#> "Nucleus" "Nucleus" "Nucleus" +#> Q15059 Q5QJE6 P49711 +#> "Nucleus" "Nucleus" "Nucleus" +#> O75694 Q96FV9 O60216 +#> "Nucleus" "Nucleus" "Nucleus" +#> P35249 P35269 P62805 +#> "Nucleus" "Nucleus" "Nucleus" +#> Q9NX58 Q15554 Q14807 +#> "Nucleus" "Nucleus" "Nucleus" +#> Q969G3-2 O43684-2 Q13573 +#> "Nucleus" "Nucleus" "Nucleus" +#> P85037 Q96SB8 P07305 +#> "Nucleus" "Nucleus" "Nucleus" +#> O14647 P84243 P68431 +#> "Nucleus" "Nucleus" "Nucleus" +#> P25490 Q03164-2 P35250 +#> "Nucleus" "Nucleus" "Nucleus" +#> Q13769 Q9Y3T9 Q92925-3 +#> "Nucleus" "Nucleus" "Nucleus" +#> P20585 Q9H8H0 P40937 +#> "Nucleus" "Nucleus" "Nucleus" +#> Q13111 P40938 P18887 +#> "Nucleus" "Nucleus" "Nucleus" +#> Q12824-2 P13984 Q9H9Y6 +#> "Nucleus" "Nucleus" "Nucleus" +#> O43818 O15525 Q9Y3Y2-4 +#> "Nucleus" "Nucleus" "Nucleus" +#> Q76FK4-4 O15047 Q13415 +#> "Nucleus" "Nucleus" "Nucleus" +#> P0C0S5 Q8IXM2 Q13416 +#> "Nucleus" "Nucleus" "Nucleus" +#> Q9UBD5 Q9P0W2-3 P52701 +#> "Nucleus" "Nucleus" "Nucleus" +#> O75475 O60885 P26583 +#> "Nucleus" "Nucleus" "Nucleus" +#> O15347 Q9H7Z6 Q9NVP1 +#> "Nucleus" "Nucleus" "Nucleus" +#> Q9BVJ6 Q9BQ39 O15381 +#> "Nucleus" "Nucleus" "Nucleus" +#> Q969X6 P55769 Q9NV31 +#> "Nucleus" "Nucleus" "Nucleus" +#> Q9NPE3 O00116 O14832 +#> "Nucleus" "Peroxisome" "Peroxisome" +#> O15254 O43808 O43933 +#> "Peroxisome" "Peroxisome" "Peroxisome" +#> O75381 O75381-2 O96011 +#> "Peroxisome" "Peroxisome" "Peroxisome" +#> P09110 P0C024 P28328 +#> "Peroxisome" "Peroxisome" "Peroxisome" +#> P51659 Q08426 Q13608 +#> "Peroxisome" "Peroxisome" "Peroxisome" +#> Q15067 Q15067-2 Q7Z412 +#> "Peroxisome" "Peroxisome" "Peroxisome" +#> Q7Z412-2 Q86WA8 Q8WVX9 +#> "Peroxisome" "Peroxisome" "Peroxisome" +#> Q9BY49 Q9NR77 Q9NUI1 +#> "Peroxisome" "Peroxisome" "Peroxisome" +#> Q9P0Z9 Q9UKG9 Q9Y6I8 +#> "Peroxisome" "Peroxisome" "Peroxisome" +#> O14734 O00161 O14786 +#> "Peroxisome" "PM" "PM" +#> O14786-3 O14828-2 O14910 +#> "PM" "PM" "PM" +#> O15031 O15394 O43760 +#> "PM" "PM" "PM" +#> O60241-4 O60449 O60449-3 +#> "PM" "PM" "PM" +#> O60462-4 O60637-3 O75019-2 +#> "PM" "PM" "PM" +#> O75955 O75976 O94856 +#> "PM" "PM" "PM" +#> O94910-2 O95297-2 O95502 +#> "PM" "PM" "PM" +#> P01892 P04216 P05023 +#> "PM" "PM" "PM" +#> P05026 P05106 P05362 +#> "PM" "PM" "PM" +#> P05556 P06213-2 P06756-3 +#> "PM" "PM" "PM" +#> P07204 P07949 P08195-2 +#> "PM" "PM" "PM" +#> P08571 P08575-2 P08582 +#> "PM" "PM" "PM" +#> P08648 P08754 P09543 +#> "PM" "PM" "PM" +#> P10586-2 P11166 P11215 +#> "PM" "PM" "PM" +#> P12318-2 P13164 P13591 +#> "PM" "PM" "PM" +#> P13591-1 P13598 P13612 +#> "PM" "PM" "PM" +#> P14209-3 P14415 P16070-18 +#> "PM" "PM" "PM" +#> P16150 P16284-3 P17301 +#> "PM" "PM" "PM" +#> P17677 P17813-2 P18084 +#> "PM" "PM" "PM" +#> P19022 P19022-2 P19397 +#> "PM" "PM" "PM" +#> P20020 P20020-6 P20138 +#> "PM" "PM" "PM" +#> P20701 P20702 P21589 +#> "PM" "PM" "PM" +#> P22794 P23229 P23634-4 +#> "PM" "PM" "PM" +#> P26010 P26992 P27105 +#> "PM" "PM" "PM" +#> P27701-2 P29323-2 P32004 +#> "PM" "PM" "PM" +#> P32249 P32942 P32970 +#> "PM" "PM" "PM" +#> P33527-4 P35222 P35408 +#> "PM" "PM" "PM" +#> P35613-2 P36383 P38570 +#> "PM" "PM" "PM" +#> P41597-2 P41732 P42857-2 +#> "PM" "PM" "PM" +#> P43250-2 P46939 P48509 +#> "PM" "PM" "PM" +#> P48960-2 P50895 P51674 +#> "PM" "PM" "PM" +#> P54762 P55196-3 P63092 +#> "PM" "PM" "PM" +#> P78552-2 P84095 P98155-2 +#> "PM" "PM" "PM" +#> P98172 Q01650 Q01814 +#> "PM" "PM" "PM" +#> Q03405 Q04941 Q08722 +#> "PM" "PM" "PM" +#> Q12846 Q13449 Q13491 +#> "PM" "PM" "PM" +#> Q13740-2 Q14254 Q14699 +#> "PM" "PM" "PM" +#> Q14982-2 Q15262 Q15722 +#> "PM" "PM" "PM" +#> Q16720 Q6GTX8-3 Q6IA17 +#> "PM" "PM" "PM" +#> Q6UXK5 Q6X4W1 Q7Z2K8 +#> "PM" "PM" "PM" +#> Q7Z3B1 Q7Z403-2 Q7Z6M3 +#> "PM" "PM" "PM" +#> Q8IWK6-3 Q8IX19 Q8IYJ0 +#> "PM" "PM" "PM" +#> Q8N0W4 Q8N2Q7 Q8N8Q9-2 +#> "PM" "PM" "PM" +#> Q8N9M5 Q8NC67-3 Q8NFZ4 +#> "PM" "PM" "PM" +#> Q8NHJ6-2 Q8NHJ6-3 Q8NHL6 +#> "PM" "PM" "PM" +#> Q8TBP5 Q8TCZ2-6 Q92692 +#> "PM" "PM" "PM" +#> Q92823-3 Q92854 Q92859-2 +#> "PM" "PM" "PM" +#> Q96D96-4 Q96F46-2 Q96PE1 +#> "PM" "PM" "PM" +#> Q96S97 Q99569 Q99569-2 +#> "PM" "PM" "PM" +#> Q99571 Q99572-8 Q99795 +#> "PM" "PM" "PM" +#> Q9BY67-5 Q9GZY6 Q9H2W1 +#> "PM" "PM" "PM" +#> Q9H6B4 Q9H6X2-5 Q9H7M9 +#> "PM" "PM" "PM" +#> Q9H813 Q9HAR2 Q9NPR9 +#> "PM" "PM" "PM" +#> Q9NQS5 Q9NT68-2 Q9NW97 +#> "PM" "PM" "PM" +#> Q9NZ94 Q9P121 Q9UBG0 +#> "PM" "PM" "PM" +#> Q9UHW9-3 Q9UIW2 Q9Y219-2 +#> "PM" "PM" "PM" +#> Q9Y287-2 Q9Y2J2-2 Q9Y624 +#> "PM" "PM" "PM" +#> Q9Y639 Q9UIQ6 P78536 +#> "PM" "PM" "PM" +#> P08311 Q9NWQ8 P04839 +#> "PM" "PM" "PM" +#> P14384 P11234 P07333 +#> "PM" "PM" "PM" +#> Q02487 P63218 P30825 +#> "PM" "PM" "PM" +#> Q9NRM0 P41231 P32246 +#> "PM" "PM" "PM" +#> Q9NPG4 Q13433 P98153 +#> "PM" "PM" "PM" +#> P51511 P31641 Q99460 +#> "PM" "PM" "Proteasome" +#> Q13200 O43242 P25786 +#> "Proteasome" "Proteasome" "Proteasome" +#> O00232 Q15008 O00231 +#> "Proteasome" "Proteasome" "Proteasome" +#> Q06323 O14818 Q9UNM6 +#> "Proteasome" "Proteasome" "Proteasome" +#> P60900 P55036 P25789 +#> "Proteasome" "Proteasome" "Proteasome" +#> Q9UL46 P20618 P25788-2 +#> "Proteasome" "Proteasome" "Proteasome" +#> P28062 P61289 P25787 +#> "Proteasome" "Proteasome" "Proteasome" +#> P28066 P49720 P49721 +#> "Proteasome" "Proteasome" "Proteasome" +#> P51665 P40306 O75832 +#> "Proteasome" "Proteasome" "Proteasome" +#> P28070 P28072 P48556 +#> "Proteasome" "Proteasome" "Proteasome" +#> P28065 O00487 O95456-2 +#> "Proteasome" "Proteasome" "Proteasome" +#> Q99436 P62195-2 P62191 +#> "Proteasome" "Proteasome" "Proteasome" +#> P43686 P35998 +#> "Proteasome" "Proteasome" table(pRolocmarkers("hsap")) #> -#> 40S Ribosome 60S Ribosome Cytosol -#> 33 46 77 -#> Endoplasmic Reticulum Golgi Apparatus Lysosome -#> 92 34 42 -#> Mitochondria Nucleus PEROXISOME -#> 134 116 27 -#> Proteasome actin cytoskeleton plasma mem -#> 36 45 190 +#> 40S Ribosome 60S Ribosome Actin Cytoskeleton Cytosol +#> 33 46 45 77 +#> ER Golgi Lysosome Mitochondrion +#> 92 34 42 134 +#> Nucleus PM Peroxisome Proteasome +#> 116 190 27 36 + +## Old markers +pRolocmarkers("hsap", version = "2")["Q9BPW9"] +#> Q9BPW9 +#> "ER" +pRolocmarkers("hsap", version = "1")["Q9BPW9"] +#> Q9BPW9 +#> "Endoplasmic Reticulum"
    -
    - -
    +
    -
    - +
    diff --git a/reference/perTurboClassification-1.png b/reference/perTurboClassification-1.png index 2cd4f95e..aefdc561 100644 Binary files a/reference/perTurboClassification-1.png and b/reference/perTurboClassification-1.png differ diff --git a/reference/perTurboClassification-2.png b/reference/perTurboClassification-2.png index 854f1806..be9862bb 100644 Binary files a/reference/perTurboClassification-2.png and b/reference/perTurboClassification-2.png differ diff --git a/reference/perTurboClassification-3.png b/reference/perTurboClassification-3.png index 526b6c60..7467265a 100644 Binary files a/reference/perTurboClassification-3.png and b/reference/perTurboClassification-3.png differ diff --git a/reference/perTurboClassification.html b/reference/perTurboClassification.html index f5e22efe..0b740fa9 100644 --- a/reference/perTurboClassification.html +++ b/reference/perTurboClassification.html @@ -1,80 +1,52 @@ -perTurbo classification — perTurboClassification • pRoloc - - -
    -
    -
    - + + +
    +
    +
    +
    -
    +

    Classification using the PerTurbo algorithm.

    -
    +
    +

    Usage

    perTurboClassification(
       object,
       assessRes,
    @@ -87,8 +59,8 @@ 

    perTurbo classification

    )
    -
    -

    Arguments

    +
    +

    Arguments

    object
    @@ -138,14 +110,14 @@

    Arguments

    Default is markers.

    -
    -

    Value

    +
    +

    Value

    An instance of class "MSnSet" with perTurbo and perTurbo.scores feature variables storing the classification results and scores respectively.

    -
    -

    References

    +
    +

    References

    N. Courty, T. Burger, J. Laurent. "PerTurbo: a new classification algorithm based on the spectrum perturbations of the Laplace-Beltrami operator", The European Conference on Machine Learning and Principles and @@ -153,13 +125,13 @@

    References

    D. Gunopulos et al. (Eds.): ECML PKDD 2011, Part I, LNAI 6911, pp. 359 - 374, Athens, Greece, September 2011.

    -
    -

    Author

    +
    +

    Author

    Thomas Burger and Samuel Wieczorek

    -
    -

    Examples

    +
    +

    Examples

    library(pRolocdata)
     data(dunkley2006)
     ## reducing parameter search space 
    @@ -184,26 +156,25 @@ 

    Examples

    #> macro F1: #> Min. 1st Qu. Median Mean 3rd Qu. Max. #> 1 1 1 1 1 1 -#> best sigma: 1 0.1 -#> best pRegul: 0.25 1 +#> best sigma: 0.1 +#> best pRegul: 4 1 0.25 plot(params) f1Count(params) -#> 0.25 1 -#> 0.1 NA 1 -#> 1 2 NA +#> 0.25 1 4 +#> 0.1 1 1 1 levelPlot(params) getParams(params) #> sigma pRegul -#> 1.00 0.25 +#> 0.1 4.0 res <- perTurboClassification(dunkley2006, params) getPredictions(res, fcol = "perTurbo") #> ans #> ER lumen ER membrane Golgi Mitochondrion PM -#> 17 184 96 106 133 +#> 20 181 96 107 134 #> Plastid Ribosome TGN vacuole -#> 49 51 19 34 +#> 49 50 20 32 #> MSnSet (storageMode: lockedEnvironment) #> assayData: 689 features, 16 samples #> element names: exprs @@ -223,15 +194,15 @@

    Examples

    #> Loaded on Thu Jul 16 22:53:08 2015. #> Normalised to sum of intensities. #> Added markers from 'mrk' marker vector. Thu Jul 16 22:53:08 2015 -#> Performed perTurbo prediction (sigma=1 pRegul=0.25) Sun Jun 16 10:13:30 2024 -#> Added perTurbo predictions according to global threshold = 0 Sun Jun 16 10:13:30 2024 +#> Performed perTurbo prediction (sigma=0.1 pRegul=4) Fri Oct 18 17:20:46 2024 +#> Added perTurbo predictions according to global threshold = 0 Fri Oct 18 17:20:46 2024 #> MSnbase version: 1.17.12 getPredictions(res, fcol = "perTurbo", t = 0.75) #> ans #> ER lumen ER membrane Golgi Mitochondrion PM -#> 17 184 96 106 133 -#> Plastid Ribosome TGN vacuole -#> 49 51 19 34 +#> 14 45 28 55 46 +#> Plastid Ribosome TGN unknown vacuole +#> 20 19 13 428 21 #> MSnSet (storageMode: lockedEnvironment) #> assayData: 689 features, 16 samples #> element names: exprs @@ -251,30 +222,26 @@

    Examples

    #> Loaded on Thu Jul 16 22:53:08 2015. #> Normalised to sum of intensities. #> Added markers from 'mrk' marker vector. Thu Jul 16 22:53:08 2015 -#> Performed perTurbo prediction (sigma=1 pRegul=0.25) Sun Jun 16 10:13:30 2024 -#> Added perTurbo predictions according to global threshold = 0.75 Sun Jun 16 10:13:30 2024 +#> Performed perTurbo prediction (sigma=0.1 pRegul=4) Fri Oct 18 17:20:46 2024 +#> Added perTurbo predictions according to global threshold = 0.75 Fri Oct 18 17:20:46 2024 #> MSnbase version: 1.17.12 plot2D(res, fcol = "perTurbo")
    -
    - -
    +
    -
    - +
    diff --git a/reference/perTurboOptimisation.html b/reference/perTurboOptimisation.html index 425fd918..fccd6903 100644 --- a/reference/perTurboOptimisation.html +++ b/reference/perTurboOptimisation.html @@ -1,80 +1,52 @@ -PerTurbo parameter optimisation — perTurboOptimisation • pRoloc - - -
    -
    -
    - + + +
    +
    +
    +
    -
    +

    Classification parameter optimisation for the PerTurbo algorithm

    -
    +
    +

    Usage

    perTurboOptimisation(
       object,
       fcol = "markers",
    @@ -91,8 +63,8 @@ 

    PerTurbo parameter optimisation

    )
    -
    -

    Arguments

    +
    +

    Arguments

    object
    @@ -160,12 +132,12 @@

    Arguments

    A logical defining whether a progress bar is displayed.

    -
    -

    Value

    +
    +

    Value

    An instance of class "GenRegRes".

    -
    -

    Details

    +
    +

    Details

    Note that when performance scores precision, recall and (macro) F1 are calculated, any NA values are replaced by 0. This decision is motivated by the fact that any class that would have either a NA @@ -174,32 +146,28 @@

    Details

    leads to F1 values of 0 and a reduced yet defined final macro F1 score.

    -
    -

    See also

    +
    +

    See also

    perTurboClassification and example therein.

    -
    -

    Author

    +
    +

    Author

    Thomas Burger and Samuel Wieczorek

    -
    - -
    +
    -
    - +
    diff --git a/reference/perTurboOptimization.html b/reference/perTurboOptimization.html new file mode 100644 index 00000000..db9227fb --- /dev/null +++ b/reference/perTurboOptimization.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/phenoDisco.html b/reference/phenoDisco.html index 1fbb9038..31f2ad08 100644 --- a/reference/phenoDisco.html +++ b/reference/phenoDisco.html @@ -1,82 +1,55 @@ -Runs the phenoDisco algorithm. — phenoDisco • pRoloc - - -
    -
    -
    - + + +
    +
    +
    +
    -
    +

    phenoDisco is a semi-supervised iterative approach to detect new protein clusters.

    -
    +
    +

    Usage

    phenoDisco(
       object,
       fcol = "markers",
    @@ -96,8 +69,8 @@ 

    Runs the phenoDisco algorithm.

    )
    -
    -

    Arguments

    +
    +

    Arguments

    object
    @@ -202,13 +175,13 @@

    Arguments

    section in the pRoloc vignette for details.

    -
    -

    Value

    +
    +

    Value

    An instance of class MSnSet containing the phenoDisco predictions.

    -
    -

    Details

    +
    +

    Details

    The algorithm performs a phenotype discovery analysis as described in Breckels et al. Using this approach one can identify putative subcellular groupings in organelle proteomics experiments for more @@ -228,8 +201,8 @@

    Details

    different from the row order in the input. This has now been fixed and row ordering is now the same in both input and output objects.

    -
    -

    References

    +
    +

    References

    Yin Z, Zhou X, Bakal C, Li F, Sun Y, Perrimon N, Wong ST. Using iterative cluster merging with improved gap statistics to perform online phenotype discovery in the @@ -241,13 +214,13 @@

    References

    10.1016/j.jprot.2013.02.019. Epub 2013 Mar 21. PubMed PMID: 23523639.

    -
    -

    Author

    +
    +

    Author

    Lisa M. Breckels <lms79@cam.ac.uk>

    -
    -

    Examples

    +
    +

    Examples

    if (FALSE) { # \dontrun{
     library(pRolocdata)
     data(tan2009r1)
    @@ -260,23 +233,19 @@ 

    Examples

    } # }
    -
    - -
    +
    -
    - +
    diff --git a/reference/plot,ClustDist,MSnSet-method.html b/reference/plot,ClustDist,MSnSet-method.html new file mode 100644 index 00000000..5ea7ccbd --- /dev/null +++ b/reference/plot,ClustDist,MSnSet-method.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/plot,ClustDistList,missing-method.html b/reference/plot,ClustDistList,missing-method.html new file mode 100644 index 00000000..76fb34d9 --- /dev/null +++ b/reference/plot,ClustDistList,missing-method.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/plot,ClustRegRes,missing-method.html b/reference/plot,ClustRegRes,missing-method.html new file mode 100644 index 00000000..79ccf251 --- /dev/null +++ b/reference/plot,ClustRegRes,missing-method.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/plot,GenRegRes,missing-method.html b/reference/plot,GenRegRes,missing-method.html new file mode 100644 index 00000000..7959a075 --- /dev/null +++ b/reference/plot,GenRegRes,missing-method.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/plot,MCMCParams,character-method.html b/reference/plot,MCMCParams,character-method.html new file mode 100644 index 00000000..3db6b06b --- /dev/null +++ b/reference/plot,MCMCParams,character-method.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/plot,QSep,missing-method.html b/reference/plot,QSep,missing-method.html new file mode 100644 index 00000000..8e0a04c4 --- /dev/null +++ b/reference/plot,QSep,missing-method.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/plot,QSep-method.html b/reference/plot,QSep-method.html new file mode 100644 index 00000000..8e0a04c4 --- /dev/null +++ b/reference/plot,QSep-method.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/plot,SpatProtVis,missing-method.html b/reference/plot,SpatProtVis,missing-method.html new file mode 100644 index 00000000..0d166cc8 --- /dev/null +++ b/reference/plot,SpatProtVis,missing-method.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/plot,ThetaRegRes,missing-method.html b/reference/plot,ThetaRegRes,missing-method.html new file mode 100644 index 00000000..7959a075 --- /dev/null +++ b/reference/plot,ThetaRegRes,missing-method.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/plot2D-3.png b/reference/plot2D-3.png index b361306d..4406b276 100644 Binary files a/reference/plot2D-3.png and b/reference/plot2D-3.png differ diff --git a/reference/plot2D-7.png b/reference/plot2D-7.png index f4ab97d7..aac99046 100644 Binary files a/reference/plot2D-7.png and b/reference/plot2D-7.png differ diff --git a/reference/plot2D.html b/reference/plot2D.html index a95befe8..829bbc86 100644 --- a/reference/plot2D.html +++ b/reference/plot2D.html @@ -1,81 +1,57 @@ -Plot organelle assignment data and results. — plot2D • pRoloc - - -
    -
    -
    - + + +
    +
    +
    +
    -
    +

    Generate 2 or 3 dimensional feature distribution plots to illustrate localistation clusters. Rows/features containing NA values are removed prior to dimension reduction except @@ -84,7 +60,8 @@

    Plot organelle assignment data and results.

    avoid computing all components when analysing large datasets.

    -
    +
    +

    Usage

    plot2D(
       object,
       fcol = "markers",
    @@ -121,8 +98,8 @@ 

    Plot organelle assignment data and results.

    )
    -
    -

    Arguments

    +
    +

    Arguments

    object
    @@ -286,13 +263,13 @@

    Arguments

    feature. Default is radius * 2.

    -
    -

    Value

    +
    +

    Value

    Used for its side effects of generating a plot. Invisibly returns the 2 or 3 dimensions that are plotted.

    -
    -

    Details

    +
    +

    Details

    plot3D relies on the ##' rgl package, that will be loaded automatically.

    • Note that plot2D has been update in version 1.3.6 to @@ -312,8 +289,8 @@

      Details

      coordinates, then a matching MSnSet must be passed to methargs.

    -
    -

    See also

    +
    +

    See also

    addLegend to add a legend to plot2D figures (the legend is added by default on plot3D) and plotDist for alternative graphical @@ -322,13 +299,13 @@

    See also

    PCA plot. The plotEllipse function can be used to visualise TAGM models on PCA plots with ellipses.

    -
    -

    Author

    +
    +

    Author

    Laurent Gatto <lg390@cam.ac.uk>

    -
    -

    Examples

    +
    +

    Examples

    library("pRolocdata")
     data(dunkley2006)
     plot2D(dunkley2006, fcol = NULL)
    @@ -400,23 +377,19 @@ 

    Examples

    plot3D(dunkley2006, dims = c(2, 4, 6))
    -
    - -
    +
    -
    - +
    diff --git a/reference/plot2Dmethods.html b/reference/plot2Dmethods.html new file mode 100644 index 00000000..3e7213d5 --- /dev/null +++ b/reference/plot2Dmethods.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/plot2Ds.html b/reference/plot2Ds.html index 77886aa8..7442234d 100644 --- a/reference/plot2Ds.html +++ b/reference/plot2Ds.html @@ -1,86 +1,61 @@ -Draw 2 data sets on one PCA plot — plot2Ds • pRolocDraw 2 data sets on one PCA plot — plot2Ds • pRoloc +data set."> + Skip to contents -
    -
    -
    - +
    +
    +
    -
    +

    Takes 2 linkS4class{MSnSet} instances as input to plot the two data sets on the same PCA plot. The second data points are projected on the PC1 and PC2 dimensions calculated for the first data set.

    -
    +
    +

    Usage

    plot2Ds(
       object,
       pcol,
    @@ -97,8 +72,8 @@ 

    Draw 2 data sets on one PCA plot

    )
    -
    -

    Arguments

    +
    +

    Arguments

    object
    @@ -168,8 +143,8 @@

    Arguments

    points.

    -
    -

    Value

    +
    +

    Value

    Used for its side effects of producing a plot. Invisibly returns an object of class plot2Ds, which is a list with the PCA analyses results (see prcomp) of @@ -179,18 +154,18 @@

    Value

    data1, data2, col1 and code2 respectively.

    -
    -

    See also

    +
    +

    See also

    See plot2D to plot a single data set and move2Ds for a animation.

    -
    -

    Author

    +
    +

    Author

    Laurent Gatto

    -
    -

    Examples

    +
    +

    Examples

    library("pRolocdata")
     data(tan2009r1)
     data(tan2009r2)
    @@ -1864,23 +1839,19 @@ 

    Examples

    #> [1] "#E0E0E030" "#E0E0E030" "#E0E0E030" "#E0E0E030" "#FF7F00" "#9ACD32"
    -
    - -
    +
    -
    - +
    diff --git a/reference/plot3D,MSnSet-method.html b/reference/plot3D,MSnSet-method.html new file mode 100644 index 00000000..3e7213d5 --- /dev/null +++ b/reference/plot3D,MSnSet-method.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/plotConsProfiles-1.png b/reference/plotConsProfiles-1.png index ff1bd01a..9fd51f4b 100644 Binary files a/reference/plotConsProfiles-1.png and b/reference/plotConsProfiles-1.png differ diff --git a/reference/plotConsProfiles.html b/reference/plotConsProfiles.html index 944b2b6b..4507896e 100644 --- a/reference/plotConsProfiles.html +++ b/reference/plotConsProfiles.html @@ -1,85 +1,57 @@ -Plot marker consenses profiles. — plotConsProfiles • pRoloc - - -
    -
    -
    - + + +
    +
    +
    +
    -
    +

    The function plots marker consensus profiles obtained from mrkConsProfile

    -
    +
    +

    Usage

    plotConsProfiles(object, order = NULL, plot = TRUE)
    -
    -

    Arguments

    +
    +

    Arguments

    object
    @@ -96,17 +68,17 @@

    Arguments

    Default is TRUE.

    -
    -

    Value

    +
    +

    Value

    Invisibly returns ggplot2 object.

    -
    -

    Author

    +
    +

    Author

    Tom Smith

    -
    -

    Examples

    +
    +

    Examples

    library("pRolocdata")
     data(E14TG2aS1)
     hc <- mrkHClust(E14TG2aS1, plot = FALSE)
    @@ -117,23 +89,19 @@ 

    Examples

    -
    - -
    +
    -
    - +
    diff --git a/reference/plotDist.html b/reference/plotDist.html index 6c7ab765..80f0ee50 100644 --- a/reference/plotDist.html +++ b/reference/plotDist.html @@ -1,82 +1,55 @@ -Plots the distribution of features across fractions — plotDist • pRoloc - - -
    -
    -
    - + + +
    +
    +
    +
    -
    +

    Produces a line plot showing the feature abundances across the fractions.

    -
    +
    +

    Usage

    plotDist(
       object,
       markers,
    @@ -94,8 +67,8 @@ 

    Plots the distribution of features across fractions

    )
    -
    -

    Arguments

    +
    +

    Arguments

    object
    @@ -167,18 +140,18 @@

    Arguments

    Additional parameters passed to plot.

    -
    -

    Value

    +
    +

    Value

    Used for its side effect of producing a feature distribution plot. Invisibly returns the data matrix.

    -
    -

    Author

    +
    +

    Author

    Laurent Gatto

    -
    -

    Examples

    +
    +

    Examples

    library("pRolocdata")
     data(tan2009r1)
     j <- which(fData(tan2009r1)$markers == "mitochondrion")
    @@ -194,23 +167,19 @@ 

    Examples

    -
    - -
    +
    -
    - +
    diff --git a/reference/plotEllipse.html b/reference/plotEllipse.html index a8c99adb..bdc8efc2 100644 --- a/reference/plotEllipse.html +++ b/reference/plotEllipse.html @@ -1,91 +1,66 @@ -A function to plot probabiltiy ellipses on marker PCA plots to visualise and assess TAGM models. — plotEllipse • pRolocA function to plot probabiltiy ellipses on marker PCA plots to visualise and assess TAGM models. — plotEllipse • pRoloc - - -
    -
    -
    - + + +
    +
    +
    +
    -
    +

    Note that when running PCA, this function does not scale the data (centring is performed), as opposed to [plot2D()]. Only marker proteins are displayed; the protein of unknown location, that are not used to estimate the MAP parameters, are filtered out.

    -
    +
    +

    Usage

    plotEllipse(object, params, dims = c(1, 2), method = "MAP", ...)
    -
    -

    Arguments

    +
    +

    Arguments

    object
    @@ -111,39 +86,35 @@

    Arguments

    Additional parameters passed to [plot2D()].

    -
    -

    Value

    +
    +

    Value

    A PCA plot of the marker data with probability ellipises. The outer ellipse contains 99 probability whilst the middle and inner ellipses contain 95 and 90 clusters are represented by black circumpunct (circled dot).

    -
    -

    See also

    +
    +

    See also

    [plot2D()] to visualise spatial proteomics data using various dimensionality reduction methods. For details about TAGM models, see [tagmPredict()] and the *pRoloc-bayesian* vignette.

    -
    - -
    +
    -
    - +
    diff --git a/reference/plsdaClassification.html b/reference/plsdaClassification.html index 77e5b107..cf25bdbd 100644 --- a/reference/plsdaClassification.html +++ b/reference/plsdaClassification.html @@ -1,82 +1,55 @@ -plsda classification — plsdaClassification • pRoloc - - -
    -
    -
    - + + +
    +
    +
    +
    -
    +

    Classification using the partial least square distcriminant analysis algorithm.

    -
    +
    +

    Usage

    plsdaClassification(
       object,
       assessRes,
    @@ -87,8 +60,8 @@ 

    plsda classification

    )
    -
    -

    Arguments

    +
    +

    Arguments

    object
    @@ -122,19 +95,19 @@

    Arguments

    from package caret.

    -
    -

    Value

    +
    +

    Value

    An instance of class "MSnSet" with plsda and plsda.scores feature variables storing the classification results and scores respectively.

    -
    -

    Author

    +
    +

    Author

    Laurent Gatto

    -
    -

    Examples

    +
    +

    Examples

    # \donttest{
     ## not running this one for time considerations
     library(pRolocdata)
    @@ -150,8 +123,8 @@ 

    Examples

    #> default = NULL, skeleton = (function (x, ...) #> stop(gettextf("invalid call in method dispatch to '%s' (no default method)", #> "params"), domain = NA))(x, ...)) -#> <bytecode: 0x559a3c333ba0> -#> <environment: 0x559a3c32f650> +#> <bytecode: 0x563405122ff8> +#> <environment: 0x5634051bfa10> #> attr(,"generic") #> [1] "params" #> attr(,"generic")attr(,"package") @@ -189,27 +162,23 @@

    Examples

    getPredictions(res, fcol = "plsda", t = 0.9) #> Error in h(simpleError(msg, call)): error in evaluating the argument 'object' in selecting a method for function 'fData': object 'res' not found plot2D(res, fcol = "plsda") -#> Error in eval(expr, envir, enclos): object 'res' not found +#> Error: object 'res' not found # }
    -
    - -
    +
    -
    - +
    diff --git a/reference/plsdaOptimisation.html b/reference/plsdaOptimisation.html index 137ea31e..64a84b92 100644 --- a/reference/plsdaOptimisation.html +++ b/reference/plsdaOptimisation.html @@ -1,82 +1,55 @@ -plsda parameter optimisation — plsdaOptimisation • pRoloc - - -
    -
    -
    - + + +
    +
    +
    +
    -
    +

    Classification parameter optimisation for the partial least square distcriminant analysis algorithm.

    -
    +
    +

    Usage

    plsdaOptimisation(
       object,
       fcol = "markers",
    @@ -91,8 +64,8 @@ 

    plsda parameter optimisation

    )
    -
    -

    Arguments

    +
    +

    Arguments

    object
    @@ -137,12 +110,12 @@

    Arguments

    Additional parameters passed to plsda from package caret.

    -
    -

    Value

    +
    +

    Value

    An instance of class "GenRegRes".

    -
    -

    Details

    +
    +

    Details

    Note that when performance scores precision, recall and (macro) F1 are calculated, any NA values are replaced by 0. This decision is motivated by the fact that any class that would have either a NA @@ -151,32 +124,28 @@

    Details

    leads to F1 values of 0 and a reduced yet defined final macro F1 score.

    -
    -

    See also

    +
    +

    See also

    plsdaClassification and example therein.

    -
    -

    Author

    +
    +

    Author

    Laurent Gatto

    -
    - -
    +
    -
    - +
    diff --git a/reference/plsdaOptimization.html b/reference/plsdaOptimization.html new file mode 100644 index 00000000..2b83146d --- /dev/null +++ b/reference/plsdaOptimization.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/plsdaPrediction.html b/reference/plsdaPrediction.html new file mode 100644 index 00000000..ab3e6ed7 --- /dev/null +++ b/reference/plsdaPrediction.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/plsdaRegularisation.html b/reference/plsdaRegularisation.html new file mode 100644 index 00000000..2b83146d --- /dev/null +++ b/reference/plsdaRegularisation.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/prettyGoTermId.html b/reference/prettyGoTermId.html new file mode 100644 index 00000000..0ecfee75 --- /dev/null +++ b/reference/prettyGoTermId.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/qsep.html b/reference/qsep.html new file mode 100644 index 00000000..8e0a04c4 --- /dev/null +++ b/reference/qsep.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/rfClassification-1.png b/reference/rfClassification-1.png index 13a51304..1d0d942c 100644 Binary files a/reference/rfClassification-1.png and b/reference/rfClassification-1.png differ diff --git a/reference/rfClassification-2.png b/reference/rfClassification-2.png index 83c76a01..4690de4f 100644 Binary files a/reference/rfClassification-2.png and b/reference/rfClassification-2.png differ diff --git a/reference/rfClassification-3.png b/reference/rfClassification-3.png index b86784bf..7a6d938d 100644 Binary files a/reference/rfClassification-3.png and b/reference/rfClassification-3.png differ diff --git a/reference/rfClassification.html b/reference/rfClassification.html index 0e6261b9..05179aec 100644 --- a/reference/rfClassification.html +++ b/reference/rfClassification.html @@ -1,80 +1,52 @@ -rf classification — rfClassification • pRoloc - - -
    -
    -
    - + + +
    +
    +
    +
    -
    +

    Classification using the random forest algorithm.

    -
    +
    +

    Usage

    rfClassification(
       object,
       assessRes,
    @@ -85,8 +57,8 @@ 

    rf classification

    )
    -
    -

    Arguments

    +
    +

    Arguments

    object
    @@ -120,19 +92,19 @@

    Arguments

    randomForest from package randomForest.

    -
    -

    Value

    +
    +

    Value

    An instance of class "MSnSet" with rf and rf.scores feature variables storing the classification results and scores respectively.

    -
    -

    Author

    +
    +

    Author

    Laurent Gatto

    -
    -

    Examples

    +
    +

    Examples

    library(pRolocdata)
     data(dunkley2006)
     ## reducing parameter search space and iterations 
    @@ -149,27 +121,27 @@ 

    Examples

    #> Results #> macro F1: #> Min. 1st Qu. Median Mean 3rd Qu. Max. -#> 0.9288 0.9553 0.9818 0.9702 0.9909 1.0000 +#> 0.9639 0.9690 0.9740 0.9724 0.9767 0.9793 #> best mtry: 2 5 plot(params) f1Count(params) #> -#> 5 +#> 2 #> 1 levelPlot(params) getParams(params) #> mtry -#> 5 +#> 2 res <- rfClassification(dunkley2006, params) #> [1] "markers" getPredictions(res, fcol = "rf") #> ans #> ER lumen ER membrane Golgi Mitochondrion PM -#> 19 177 96 101 135 +#> 19 179 95 104 134 #> Plastid Ribosome TGN vacuole -#> 54 51 21 34 +#> 51 53 21 33 #> MSnSet (storageMode: lockedEnvironment) #> assayData: 689 features, 16 samples #> element names: exprs @@ -189,15 +161,15 @@

    Examples

    #> Loaded on Thu Jul 16 22:53:08 2015. #> Normalised to sum of intensities. #> Added markers from 'mrk' marker vector. Thu Jul 16 22:53:08 2015 -#> Performed random forest prediction (mtry=5) Sun Jun 16 10:13:44 2024 -#> Added rf predictions according to global threshold = 0 Sun Jun 16 10:13:44 2024 +#> Performed random forest prediction (mtry=2) Fri Oct 18 17:20:59 2024 +#> Added rf predictions according to global threshold = 0 Fri Oct 18 17:20:59 2024 #> MSnbase version: 1.17.12 getPredictions(res, fcol = "rf", t = 0.75) #> ans #> ER lumen ER membrane Golgi Mitochondrion PM -#> 14 148 78 90 94 +#> 14 139 77 89 94 #> Plastid Ribosome TGN unknown vacuole -#> 46 22 13 157 27 +#> 45 20 13 171 27 #> MSnSet (storageMode: lockedEnvironment) #> assayData: 689 features, 16 samples #> element names: exprs @@ -217,30 +189,26 @@

    Examples

    #> Loaded on Thu Jul 16 22:53:08 2015. #> Normalised to sum of intensities. #> Added markers from 'mrk' marker vector. Thu Jul 16 22:53:08 2015 -#> Performed random forest prediction (mtry=5) Sun Jun 16 10:13:44 2024 -#> Added rf predictions according to global threshold = 0.75 Sun Jun 16 10:13:44 2024 +#> Performed random forest prediction (mtry=2) Fri Oct 18 17:20:59 2024 +#> Added rf predictions according to global threshold = 0.75 Fri Oct 18 17:20:59 2024 #> MSnbase version: 1.17.12 plot2D(res, fcol = "rf")
    -
    - -
    +
    -
    - +
    diff --git a/reference/rfOptimisation.html b/reference/rfOptimisation.html index b7617c36..cb192bc1 100644 --- a/reference/rfOptimisation.html +++ b/reference/rfOptimisation.html @@ -1,80 +1,52 @@ -svm parameter optimisation — rfOptimisation • pRoloc - - -
    -
    -
    - + + +
    +
    +
    +
    -
    +

    Classification parameter optimisation for the random forest algorithm.

    -
    +
    +

    Usage

    rfOptimisation(
       object,
       fcol = "markers",
    @@ -89,8 +61,8 @@ 

    svm parameter optimisation

    )
    -
    -

    Arguments

    +
    +

    Arguments

    object
    @@ -135,12 +107,12 @@

    Arguments

    Additional parameters passed to randomForest from package randomForest.

    -
    -

    Value

    +
    +

    Value

    An instance of class "GenRegRes".

    -
    -

    Details

    +
    +

    Details

    Note that when performance scores precision, recall and (macro) F1 are calculated, any NA values are replaced by 0. This decision is motivated by the fact that any class that would have either a NA @@ -149,32 +121,28 @@

    Details

    leads to F1 values of 0 and a reduced yet defined final macro F1 score.

    -
    -

    See also

    +
    +

    See also

    rfClassification and example therein.

    -
    -

    Author

    +
    +

    Author

    Laurent Gatto

    -
    - -
    +
    -
    - +
    diff --git a/reference/rfOptimization.html b/reference/rfOptimization.html new file mode 100644 index 00000000..593d56d7 --- /dev/null +++ b/reference/rfOptimization.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/rfPrediction.html b/reference/rfPrediction.html new file mode 100644 index 00000000..6d715556 --- /dev/null +++ b/reference/rfPrediction.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/rfRegularisation.html b/reference/rfRegularisation.html new file mode 100644 index 00000000..593d56d7 --- /dev/null +++ b/reference/rfRegularisation.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/sampleMSnSet.html b/reference/sampleMSnSet.html index ece7ce2b..16e992fe 100644 --- a/reference/sampleMSnSet.html +++ b/reference/sampleMSnSet.html @@ -1,85 +1,57 @@ -Extract a stratified sample of an MSnSet — sampleMSnSet • pRoloc - - -
    -
    -
    - + + +
    +
    +
    +
    -
    +

    This function extracts a stratified sample of an MSnSet.

    -
    +
    +

    Usage

    sampleMSnSet(object, fcol = "markers", size = 0.2, seed)
    -
    -

    Arguments

    +
    +

    Arguments

    object
    @@ -101,24 +73,24 @@

    Arguments

    The optional random number generator seed.

    -
    -

    Value

    +
    +

    Value

    A stratified sample (according to the defined fcol) which is an instance of class "MSnSet".

    -
    -

    See also

    +
    +

    See also

    testMSnSet unknownMSnSet markerMSnSet. See markers for details about markers encoding.

    -
    -

    Author

    +
    +

    Author

    Lisa Breckels

    -
    -

    Examples

    +
    +

    Examples

    library(pRolocdata)
     data(tan2009r1)
     dim(tan2009r1)
    @@ -145,23 +117,19 @@ 

    Examples

    #> 6 136
    -
    - -
    +
    -
    - +
    diff --git a/reference/sapply,ClustDistList-method.html b/reference/sapply,ClustDistList-method.html new file mode 100644 index 00000000..76fb34d9 --- /dev/null +++ b/reference/sapply,ClustDistList-method.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/sapply,MartInstanceList,ANY-method.html b/reference/sapply,MartInstanceList,ANY-method.html new file mode 100644 index 00000000..1e4ee092 --- /dev/null +++ b/reference/sapply,MartInstanceList,ANY-method.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/sapply,MartInstanceList-method.html b/reference/sapply,MartInstanceList-method.html new file mode 100644 index 00000000..1e4ee092 --- /dev/null +++ b/reference/sapply,MartInstanceList-method.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/setAnnotationParams.html b/reference/setAnnotationParams.html new file mode 100644 index 00000000..84f163a9 --- /dev/null +++ b/reference/setAnnotationParams.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/setOldcol.html b/reference/setOldcol.html new file mode 100644 index 00000000..8a0d5007 --- /dev/null +++ b/reference/setOldcol.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/setStockcol.html b/reference/setStockcol.html new file mode 100644 index 00000000..8a0d5007 --- /dev/null +++ b/reference/setStockcol.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/setStockpch.html b/reference/setStockpch.html new file mode 100644 index 00000000..8a0d5007 --- /dev/null +++ b/reference/setStockpch.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/setUnknowncol.html b/reference/setUnknowncol.html new file mode 100644 index 00000000..8a0d5007 --- /dev/null +++ b/reference/setUnknowncol.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/setUnknownpch.html b/reference/setUnknownpch.html new file mode 100644 index 00000000..8a0d5007 --- /dev/null +++ b/reference/setUnknownpch.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/show,AnnotationParams-method.html b/reference/show,AnnotationParams-method.html new file mode 100644 index 00000000..84f163a9 --- /dev/null +++ b/reference/show,AnnotationParams-method.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/show,ClustDist-method.html b/reference/show,ClustDist-method.html new file mode 100644 index 00000000..5ea7ccbd --- /dev/null +++ b/reference/show,ClustDist-method.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/show,ClustDistList-method.html b/reference/show,ClustDistList-method.html new file mode 100644 index 00000000..76fb34d9 --- /dev/null +++ b/reference/show,ClustDistList-method.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/show,ClustRegRes-method.html b/reference/show,ClustRegRes-method.html new file mode 100644 index 00000000..79ccf251 --- /dev/null +++ b/reference/show,ClustRegRes-method.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/show,ComponentParam-method.html b/reference/show,ComponentParam-method.html new file mode 100644 index 00000000..15d64af8 --- /dev/null +++ b/reference/show,ComponentParam-method.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/show,GenRegRes-method.html b/reference/show,GenRegRes-method.html new file mode 100644 index 00000000..7959a075 --- /dev/null +++ b/reference/show,GenRegRes-method.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/show,MAPParams-method.html b/reference/show,MAPParams-method.html new file mode 100644 index 00000000..b5288b4a --- /dev/null +++ b/reference/show,MAPParams-method.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/show,MCMCChain-method.html b/reference/show,MCMCChain-method.html new file mode 100644 index 00000000..15d64af8 --- /dev/null +++ b/reference/show,MCMCChain-method.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/show,MCMCChains-method.html b/reference/show,MCMCChains-method.html new file mode 100644 index 00000000..15d64af8 --- /dev/null +++ b/reference/show,MCMCChains-method.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/show,MCMCParams-method.html b/reference/show,MCMCParams-method.html new file mode 100644 index 00000000..15d64af8 --- /dev/null +++ b/reference/show,MCMCParams-method.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/show,MartInstance-method.html b/reference/show,MartInstance-method.html new file mode 100644 index 00000000..1e4ee092 --- /dev/null +++ b/reference/show,MartInstance-method.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/show,QSep-method.html b/reference/show,QSep-method.html new file mode 100644 index 00000000..8e0a04c4 --- /dev/null +++ b/reference/show,QSep-method.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/show,SpatProtVis-method.html b/reference/show,SpatProtVis-method.html new file mode 100644 index 00000000..0d166cc8 --- /dev/null +++ b/reference/show,SpatProtVis-method.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/show,ThetaRegRes-method.html b/reference/show,ThetaRegRes-method.html new file mode 100644 index 00000000..7959a075 --- /dev/null +++ b/reference/show,ThetaRegRes-method.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/showGOEvidenceCodes.html b/reference/showGOEvidenceCodes.html index 2be57937..5523206b 100644 --- a/reference/showGOEvidenceCodes.html +++ b/reference/showGOEvidenceCodes.html @@ -1,99 +1,72 @@ -GO Evidence Codes — showGOEvidenceCodes • pRoloc - - -
    -
    -
    - + + +
    +
    +
    +
    -
    +

    This function prints a textual description of the Gene Ontology evidence codes.

    -
    +
    +

    Usage

    showGOEvidenceCodes()
     
     getGOEvidenceCodes()
    -
    -

    Value

    +
    +

    Value

    These functions are used for their side effects of printing evidence codes and their description.

    -
    -

    Author

    +
    +

    Author

    Laurent Gatto

    -
    -

    Examples

    +
    +

    Examples

    showGOEvidenceCodes()
     #> GO Term Evidence Code
     #>  Experimental Evidence Codes
    @@ -129,23 +102,19 @@ 

    Examples

    #> [13] "IBD" "IKR" "IRD" "RCA" "TAS" "NAS" "IC" "ND" "IEA" "NR"
    -
    - -
    +
    -
    - +
    diff --git a/reference/showMrkMat.html b/reference/showMrkMat.html new file mode 100644 index 00000000..367b570d --- /dev/null +++ b/reference/showMrkMat.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/spatial2D.html b/reference/spatial2D.html index 2b811ec1..706fa53c 100644 --- a/reference/spatial2D.html +++ b/reference/spatial2D.html @@ -1,80 +1,52 @@ -Uncertainty plot in localisation probabilities — spatial2D • pRoloc - - -
    -
    -
    - + + +
    +
    +
    +
    -
    +

    Produces a pca plot with spatial variation in localisation probabilities

    -
    +
    +

    Usage

    spatial2D(
       object,
       dims = c(1, 2),
    @@ -87,8 +59,8 @@ 

    Uncertainty plot in localisation probabilities

    )
    -
    -

    Arguments

    +
    +

    Arguments

    object
    @@ -130,18 +102,18 @@

    Arguments

    A argument to change the plotting aspect of the PCA

    -
    -

    Value

    +
    +

    Value

    Used for side effect of producing plot. Invisibily returns an ggplot object that can be further manipulated

    -
    -

    Author

    +
    +

    Author

    Oliver M. Crook <omc25@cam.ac.uk>

    -
    -

    Examples

    +
    +

    Examples

    if (FALSE) { # \dontrun{
     library("pRolocdata")
     data("tan2009r1")
    @@ -153,23 +125,19 @@ 

    Examples

    } # }
    -
    - -
    +
    -
    - +
    diff --git a/reference/subsetMarkers.html b/reference/subsetMarkers.html index c0f7b33f..026c1437 100644 --- a/reference/subsetMarkers.html +++ b/reference/subsetMarkers.html @@ -1,85 +1,57 @@ -Subsets markers — subsetMarkers • pRoloc - - -
    -
    -
    - + + +
    +
    +
    +
    -
    +

    Subsets a matrix of markers by specific terms

    -
    +
    +

    Usage

    subsetMarkers(object, fcol = "GOAnnotations", keep)
    -
    -

    Arguments

    +
    +

    Arguments

    object
    @@ -96,36 +68,32 @@

    Arguments

    in the markers matrix, as defined by fcol.

    -
    -

    Value

    +
    +

    Value

    An updated MSnSet

    -
    -

    See also

    +
    +

    See also

    addGoAnnotations and example therein.

    -
    -

    Author

    +
    +

    Author

    Lisa M Breckels

    -
    - -
    +
    -
    - +
    diff --git a/reference/summary,QSep-method.html b/reference/summary,QSep-method.html new file mode 100644 index 00000000..8e0a04c4 --- /dev/null +++ b/reference/summary,QSep-method.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/svmClassification-1.png b/reference/svmClassification-1.png index 41a65699..69aad127 100644 Binary files a/reference/svmClassification-1.png and b/reference/svmClassification-1.png differ diff --git a/reference/svmClassification-2.png b/reference/svmClassification-2.png index d624852a..eb1c82c3 100644 Binary files a/reference/svmClassification-2.png and b/reference/svmClassification-2.png differ diff --git a/reference/svmClassification-3.png b/reference/svmClassification-3.png index 5af7d620..6b38da88 100644 Binary files a/reference/svmClassification-3.png and b/reference/svmClassification-3.png differ diff --git a/reference/svmClassification.html b/reference/svmClassification.html index 659c08e3..fb63c15a 100644 --- a/reference/svmClassification.html +++ b/reference/svmClassification.html @@ -1,80 +1,52 @@ -svm classification — svmClassification • pRoloc - - -
    -
    -
    - + + +
    +
    +
    +
    -
    +

    Classification using the support vector machine algorithm.

    -
    +
    +

    Usage

    svmClassification(
       object,
       assessRes,
    @@ -86,8 +58,8 @@ 

    svm classification

    )
    -
    -

    Arguments

    +
    +

    Arguments

    object
    @@ -126,19 +98,19 @@

    Arguments

    package e1071.

    -
    -

    Value

    +
    +

    Value

    An instance of class "MSnSet" with svm and svm.scores feature variables storing the classification results and scores respectively.

    -
    -

    Author

    +
    +

    Author

    Laurent Gatto

    -
    -

    Examples

    +
    +

    Examples

    library(pRolocdata)
     data(dunkley2006)
     ## reducing parameter search space and iterations 
    @@ -156,27 +128,27 @@ 

    Examples

    #> Results #> macro F1: #> Min. 1st Qu. Median Mean 3rd Qu. Max. -#> 0.9650 0.9716 0.9783 0.9811 0.9891 1.0000 +#> 0.9633 0.9817 1.0000 0.9878 1.0000 1.0000 #> best sigma: 0.1 #> best cost: 4 1 plot(params) f1Count(params) #> 1 4 -#> 0.1 0 1 +#> 0.1 1 1 levelPlot(params) getParams(params) #> sigma cost -#> 0.1 4.0 +#> 0.1 1.0 res <- svmClassification(dunkley2006, params) #> [1] "markers" getPredictions(res, fcol = "svm") #> ans #> ER lumen ER membrane Golgi Mitochondrion PM -#> 20 179 100 103 134 +#> 17 178 99 102 135 #> Plastid Ribosome TGN vacuole -#> 52 52 16 33 +#> 52 54 18 34 #> MSnSet (storageMode: lockedEnvironment) #> assayData: 689 features, 16 samples #> element names: exprs @@ -196,15 +168,15 @@

    Examples

    #> Loaded on Thu Jul 16 22:53:08 2015. #> Normalised to sum of intensities. #> Added markers from 'mrk' marker vector. Thu Jul 16 22:53:08 2015 -#> Performed svm prediction (sigma=0.1 cost=4) Sun Jun 16 10:13:49 2024 -#> Added svm predictions according to global threshold = 0 Sun Jun 16 10:13:49 2024 +#> Performed svm prediction (sigma=0.1 cost=1) Fri Oct 18 17:21:04 2024 +#> Added svm predictions according to global threshold = 0 Fri Oct 18 17:21:04 2024 #> MSnbase version: 1.17.12 getPredictions(res, fcol = "svm", t = 0.75) #> ans #> ER lumen ER membrane Golgi Mitochondrion PM -#> 14 144 75 94 109 +#> 14 145 71 93 109 #> Plastid Ribosome TGN unknown vacuole -#> 42 26 13 145 27 +#> 42 27 13 147 28 #> MSnSet (storageMode: lockedEnvironment) #> assayData: 689 features, 16 samples #> element names: exprs @@ -224,30 +196,26 @@

    Examples

    #> Loaded on Thu Jul 16 22:53:08 2015. #> Normalised to sum of intensities. #> Added markers from 'mrk' marker vector. Thu Jul 16 22:53:08 2015 -#> Performed svm prediction (sigma=0.1 cost=4) Sun Jun 16 10:13:49 2024 -#> Added svm predictions according to global threshold = 0.75 Sun Jun 16 10:13:49 2024 +#> Performed svm prediction (sigma=0.1 cost=1) Fri Oct 18 17:21:04 2024 +#> Added svm predictions according to global threshold = 0.75 Fri Oct 18 17:21:04 2024 #> MSnbase version: 1.17.12 plot2D(res, fcol = "svm")
    -
    - -
    +
    -
    - +
    diff --git a/reference/svmOptimisation.html b/reference/svmOptimisation.html index 1ec185e6..315d8668 100644 --- a/reference/svmOptimisation.html +++ b/reference/svmOptimisation.html @@ -1,82 +1,55 @@ -svm parameter optimisation — svmOptimisation • pRoloc - - -
    -
    -
    - + + +
    +
    +
    +
    -
    +

    Classification parameter optimisation for the support vector machine algorithm.

    -
    +
    +

    Usage

    svmOptimisation(
       object,
       fcol = "markers",
    @@ -92,8 +65,8 @@ 

    svm parameter optimisation

    )
    -
    -

    Arguments

    +
    +

    Arguments

    object
    @@ -142,12 +115,12 @@

    Arguments

    Additional parameters passed to svm from package e1071.

    -
    -

    Value

    +
    +

    Value

    An instance of class "GenRegRes".

    -
    -

    Details

    +
    +

    Details

    Note that when performance scores precision, recall and (macro) F1 are calculated, any NA values are replaced by 0. This decision is motivated by the fact that any class that would have either a NA @@ -156,32 +129,28 @@

    Details

    leads to F1 values of 0 and a reduced yet defined final macro F1 score.

    -
    -

    See also

    +
    +

    See also

    svmClassification and example therein.

    -
    -

    Author

    +
    +

    Author

    Laurent Gatto

    -
    - -
    +
    -
    - +
    diff --git a/reference/svmOptimization.html b/reference/svmOptimization.html new file mode 100644 index 00000000..b36df26c --- /dev/null +++ b/reference/svmOptimization.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/svmPrediction.html b/reference/svmPrediction.html new file mode 100644 index 00000000..f21d9359 --- /dev/null +++ b/reference/svmPrediction.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/svmRegularisation.html b/reference/svmRegularisation.html new file mode 100644 index 00000000..b36df26c --- /dev/null +++ b/reference/svmRegularisation.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/tagm-map.html b/reference/tagm-map.html index 48118ef4..394bab21 100644 --- a/reference/tagm-map.html +++ b/reference/tagm-map.html @@ -1,84 +1,58 @@ -The `logPosteriors` function can be used to extract the log-posteriors at each iteration of the EM algorithm to check for convergence. — MAPParams-class • pRolocThe `logPosteriors` function can be used to extract the log-posteriors at each iteration of the EM algorithm to check for convergence. — MAPParams-class • pRoloc - - -
    -
    -
    - + + +
    +
    +
    +
    -
    +

    These functions implement the T augmented Gaussian mixture (TAGM) model for mass spectrometry-based spatial proteomics datasets using the maximum a posteriori (MAP) optimisation routine.

    -
    +
    +

    Usage

    # S4 method for class 'MAPParams'
     show(object)
     
    @@ -108,8 +82,8 @@ 

    The `logPosteriors` function can be used to extract the log-posteriors at ea )

    -
    -

    Arguments

    +
    +

    Arguments

    object
    @@ -192,15 +166,15 @@

    Arguments

    considered an outlier).

    -
    -

    Value

    +
    +

    Value

    tagmMapTrain returns an instance of class MAPParams().

    tagmPredict returns an instance of class MSnbase::MSnSet containing the localisation predictions as a new tagm.map.allocation feature variable.

    -
    -

    Details

    +
    +

    Details

    The tagmMapTrain function generates the MAP parameters (object or class MAPParams) based on an annotated quantitative spatial proteomics dataset (object of class MSnbase::MSnSet). Both are then passed to the @@ -210,8 +184,8 @@

    Details

    the covariance matrix of the data a small multiple of the identity is added. A message is printed if this conditioning step is performed.

    -
    -

    Slots

    +
    +

    Slots

    method
    @@ -236,42 +210,38 @@

    Slots

    -
    -

    References

    +
    +

    References

    A Bayesian Mixture Modelling Approach For Spatial Proteomics Oliver M Crook, Claire M Mulvey, Paul D. W. Kirk, Kathryn S Lilley, Laurent Gatto bioRxiv 282269; doi: https://doi.org/10.1101/282269

    -
    -

    See also

    +
    +

    See also

    The plotEllipse() function can be used to visualise TAGM models on PCA plots with ellipses. The tagmMapTrain() function to use the TAGM MAP method.

    -
    -

    Author

    +
    +

    Author

    Laurent Gatto

    Oliver M. Crook

    -
    - -
    +
    -
    - +
    diff --git a/reference/tagm-mcmc.html b/reference/tagm-mcmc.html index 740e697e..f99f6ac3 100644 --- a/reference/tagm-mcmc.html +++ b/reference/tagm-mcmc.html @@ -1,84 +1,58 @@ -Localisation of proteins using the TAGM MCMC method — tagmMcmcTrain • pRolocLocalisation of proteins using the TAGM MCMC method — tagmMcmcTrain • pRoloc - - -
    -
    -
    - + + +
    +
    +
    +
    -
    +

    These functions implement the T augmented Gaussian mixture (TAGM) model for mass spectrometry-based spatial proteomics datasets using Markov-chain Monte-Carlo (MCMC) for inference.

    -
    +
    +

    Usage

    tagmMcmcTrain(
       object,
       fcol = "markers",
    @@ -116,8 +90,8 @@ 

    Localisation of proteins using the TAGM MCMC method

    tagmMcmcProcess(params)
    -
    -

    Arguments

    +
    +

    Arguments

    object
    @@ -217,8 +191,8 @@

    Arguments

    considered an outlier).

    -
    -

    Value

    +
    +

    Value

    tagmMcmcTrain returns an instance of class MCMCParams.

    tagmMcmcPredict returns an instance of class @@ -237,8 +211,8 @@

    Value

    tagmMcmcProcess returns an instance of class MCMCParams with its summary slot populated.

    -
    -

    Details

    +
    +

    Details

    The tagmMcmcTrain function generates the samples from the posterior distributions (object or class MCMCParams) based on an annotated quantitative spatial proteomics dataset (object of class @@ -250,36 +224,32 @@

    Details

    the identity is added. A message is printed if this conditioning step is performed.

    -
    -

    References

    +
    +

    References

    A Bayesian Mixture Modelling Approach For Spatial Proteomics Oliver M Crook, Claire M Mulvey, Paul D. W. Kirk, Kathryn S Lilley, Laurent Gatto bioRxiv 282269; doi: https://doi.org/10.1101/282269

    -
    -

    See also

    +
    +

    See also

    The plotEllipse() function can be used to visualise TAGM models on PCA plots with ellipses.

    -
    - -
    +
    -
    - +
    diff --git a/reference/tagmMapPredict.html b/reference/tagmMapPredict.html new file mode 100644 index 00000000..b5288b4a --- /dev/null +++ b/reference/tagmMapPredict.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/tagmMapTrain.html b/reference/tagmMapTrain.html new file mode 100644 index 00000000..b5288b4a --- /dev/null +++ b/reference/tagmMapTrain.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/tagmMcmcPredict.html b/reference/tagmMcmcPredict.html new file mode 100644 index 00000000..3fb66b6f --- /dev/null +++ b/reference/tagmMcmcPredict.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/tagmMcmcProcess.html b/reference/tagmMcmcProcess.html new file mode 100644 index 00000000..3fb66b6f --- /dev/null +++ b/reference/tagmMcmcProcess.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/tagmPredict.html b/reference/tagmPredict.html new file mode 100644 index 00000000..3fb66b6f --- /dev/null +++ b/reference/tagmPredict.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/testMSnSet.html b/reference/testMSnSet.html index 93c60d0e..b56961a3 100644 --- a/reference/testMSnSet.html +++ b/reference/testMSnSet.html @@ -1,80 +1,55 @@ -Create a stratified 'test' MSnSet — testMSnSet • pRolocCreate a stratified 'test' MSnSet — testMSnSet • pRoloc - - -
    -
    -
    - + + +
    +
    +
    +
    -
    +

    This function creates a stratified 'test' MSnSet which can be used for algorihtmic development. A "MSnSet" containing only the marker proteins, as defined in fcol, is returned with a new @@ -82,12 +57,13 @@

    Create a stratified 'test' MSnSet

    of these markers has been relabelled as 'unknowns'.

    -
    +
    +

    Usage

    testMSnSet(object, fcol = "markers", size = 0.2, seed)
    -
    -

    Arguments

    +
    +

    Arguments

    object
    @@ -109,8 +85,8 @@

    Arguments

    The optional random number generator seed.

    -
    -

    Value

    +
    +

    Value

    An instance of class "MSnSet" which contains only the proteins that have a labelled localisation i.e. the marker proteins, as defined in fcol and a new @@ -118,18 +94,18 @@

    Value

    of the labels relabelled as "unknown" class (the number of proteins renamed as "unknown" is according to the parameter size).

    -
    -

    See also

    + -
    -

    Author

    +
    +

    Author

    Lisa Breckels

    -
    -

    Examples

    +
    +

    Examples

    library(pRolocdata)
     data(tan2009r1)
     sample <- testMSnSet(tan2009r1)
    @@ -145,23 +121,19 @@ 

    Examples

    #> [1] TRUE
    -
    - -
    +
    -
    - +
    diff --git a/reference/testMarkers.html b/reference/testMarkers.html index 74512d8e..7848483a 100644 --- a/reference/testMarkers.html +++ b/reference/testMarkers.html @@ -1,91 +1,66 @@ -Tests marker class sizes — testMarkers • pRolocTests marker class sizes — testMarkers • pRoloc - - -
    -
    -
    - + + +
    +
    +
    +
    -
    +

    Tests if the marker class sizes are large enough for the parameter optimisation scheme, i.e. the size is greater that xval + n, where the default xval is 5 and n is 2. If the test is unsuccessful, a warning is thrown.

    -
    +
    +

    Usage

    testMarkers(object, xval = 5, n = 2, fcol = "markers", error = FALSE)
    -
    -

    Arguments

    +
    +

    Arguments

    object
    @@ -112,30 +87,30 @@

    Arguments

    thown, instead of a warning.

    -
    -

    Value

    +
    +

    Value

    If successfull, the test invisibly returns NULL. Else, it invisibly returns the names of the classes that have too few examples.

    -
    -

    Details

    +
    +

    Details

    In case the test indicates that a class contains too few examples, it is advised to either add some or, if not possible, to remove the class altogether (see minMarkers) as the parameter optimisation is likely to fail or, at least, produce unreliable results for that class.

    -
    -

    See also

    +
    +

    See also

    -
    -

    Author

    +
    +

    Author

    Laurent Gatto

    -
    -

    Examples

    +
    +

    Examples

    library("pRolocdata")
     data(dunkley2006)
     getMarkers(dunkley2006)
    @@ -154,23 +129,19 @@ 

    Examples

    #> ER lumen, TGN have/has less than 17 markers.
    -
    - -
    +
    -
    - +
    diff --git a/reference/thetas.html b/reference/thetas.html index 57dbd465..9e2c2647 100644 --- a/reference/thetas.html +++ b/reference/thetas.html @@ -1,81 +1,57 @@ -Draw matrix of thetas to test — thetas • pRolocDraw matrix of thetas to test — thetas • pRoloc - - -
    -
    -
    - + + +
    +
    +
    +
    -
    +

    The possible weights to be considered is a sequence from 0 (favour auxiliary data) to 1 (favour primary data). Each possible combination of weights for nclass classes must be @@ -84,12 +60,13 @@

    Draw matrix of thetas to test

    weight combinations (number of rows).

    -
    +
    +

    Usage

    thetas(nclass, by = 0.5, length.out, verbose = TRUE)
    -
    -

    Arguments

    +
    +

    Arguments

    nclass
    @@ -110,17 +87,17 @@

    Arguments

    should be printed out. Default is TRUE.

    -
    -

    Value

    +
    +

    Value

    A matrix with all possible theta weight combinations.

    -
    -

    Author

    +
    +

    Author

    Lisa Breckels

    -
    -

    Examples

    +
    +

    Examples

    dim(thetas(4, by = 0.5))
     #> Weigths:
     #>   (0, 0.5, 1)
    @@ -143,23 +120,19 @@ 

    Examples

    #> [1] 46656 6
    -
    - -
    +
    -
    - +
    diff --git a/reference/undocumented.html b/reference/undocumented.html index cb56d289..9a6f2d1b 100644 --- a/reference/undocumented.html +++ b/reference/undocumented.html @@ -1,104 +1,71 @@ -Undocumented/unexported entries — undocumented • pRoloc - - -
    -
    +
    +
    +
    -
    - -
    +

    This is just a dummy entry for methods from unexported classes that generate warnings during package checking.

    -
    -

    Author

    +
    +

    Author

    Laurent Gatto <lg390@cam.ac.uk>

    -
    - -
    +
    -
    - +
    diff --git a/reference/unknownMSnSet.html b/reference/unknownMSnSet.html new file mode 100644 index 00000000..3b079068 --- /dev/null +++ b/reference/unknownMSnSet.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/reference/zerosInBinMSnSet.html b/reference/zerosInBinMSnSet.html index 53d53451..1f36365f 100644 --- a/reference/zerosInBinMSnSet.html +++ b/reference/zerosInBinMSnSet.html @@ -1,83 +1,61 @@ -Compute the number of non-zero values in each marker classes — zerosInBinMSnSet • pRolocCompute the number of non-zero values in each marker classes — zerosInBinMSnSet • pRoloc - - -
    -
    -
    - + + +
    +
    +
    +
    -
    +

    The function assumes that its input is a binary MSnSet and computes, for each marker class, the number of non-zero expression profiles. The function is meant to be used to produce heatmaps @@ -88,12 +66,13 @@

    Compute the number of non-zero values in each marker classes

    annotations (GO terms) are likely not be be informative either.

    -
    +
    +

    Usage

    zerosInBinMSnSet(object, fcol = "markers", as.matrix = TRUE, percent = TRUE)
    -
    -

    Arguments

    +
    +

    Arguments

    object
    @@ -116,22 +95,22 @@

    Arguments

    returned. Otherwise, absolute values.

    -
    -

    Value

    +
    +

    Value

    A matrix or a list indicating the number of non-zero value per marker class.

    -
    -

    See also

    +
    +

    See also

    -
    -

    Author

    +
    +

    Author

    Laurent Gatto

    -
    -

    Examples

    +
    +

    Examples

    library(pRolocdata)
     data(hyperLOPIT2015goCC)
     zerosInBinMSnSet(hyperLOPIT2015goCC)
    @@ -337,23 +316,19 @@ 

    Examples

    -
    - -
    +
    -
    - +
    diff --git a/search.json b/search.json new file mode 100644 index 00000000..2c5483a1 --- /dev/null +++ b/search.json @@ -0,0 +1 @@ +[{"path":"https://lgatto.github.io/pRoloc/CONDUCT.html","id":null,"dir":"","previous_headings":"","what":"Contributor Code of Conduct","title":"Contributor Code of Conduct","text":"contributors maintainers project, pledge respect people contribute reporting issues, posting feature requests, updating documentation, submitting pull requests patches, activities. committed making participation project harassment-free experience everyone, regardless level experience, gender, gender identity expression, sexual orientation, disability, personal appearance, body size, race, ethnicity, age, religion. Examples unacceptable behavior participants include use sexual language imagery, derogatory comments personal attacks, trolling, public private harassment, insults, unprofessional conduct. Project maintainers right responsibility remove, edit, reject comments, commits, code, wiki edits, issues, contributions aligned Code Conduct. Project maintainers follow Code Conduct may removed project team. Instances abusive, harassing, otherwise unacceptable behavior may reported opening issue contacting one project maintainers. Code Conduct adapted Contributor Covenant, version 1.0.0, available http://contributor-covenant.org/version/1/0/0/","code":""},{"path":"https://lgatto.github.io/pRoloc/articles/v01-pRoloc-tutorial.html","id":"foreword","dir":"Articles","previous_headings":"","what":"Foreword","title":"Using pRoloc for spatial proteomics data analysis","text":"MSnbase pRoloc active developed; current functionality evolving new features added regular basis. software free open-source software. use , please support project citing publications: Gatto L. Lilley K.S. MSnbase - R/Bioconductor package isobaric tagged mass spectrometry data visualization, processing quantitation. Bioinformatics 28, 288-289 (2011). Gatto L, Breckels LM, Wieczorek S, Burger T, Lilley KS. Mass-spectrometry-based spatial proteomics data analysis using pRoloc pRolocdata. Bioinformatics. 2014 May 1;30(9):1322-4.. Breckels LM, Mulvey CM, Lilley KS Gatto L. Bioconductor workflow processing analysing spatial proteomics data. F1000Research 2016, 5:2926 doi: 10.12688/f1000research.10411.1. using phenoDisco function, please also cite Breckels L.M., Gatto L., Christoforou ., Groen .J., Kathryn Lilley K.S. Trotter M.W. effect organelle discovery upon sub-cellular protein localisation. J Proteomics, S1874-3919(13)00094-8 (2013). using transfer learning functions, please also cite Breckels LM, Holden S, Wonjar D, Mulvey CM, Christoforou , Groen , Trotter MW, Kohlbacker O, Lilley KS Gatto L (2016). Learning heterogeneous data sources: application spatial proteomics. PLoS Comput Biol 13;12(5):e1004920. doi: 10.1371/journal.pcbi.1004920. using Bayesian generative models, please also cite Bayesian Mixture Modelling Approach Spatial Proteomics Oliver M Crook, Claire M Mulvey, Paul D. W. Kirk, Kathryn S Lilley, Laurent Gatto bioRxiv 282269; doi: https://doi.org/10.1101/282269 introduction spatial proteomics data analysis: Gatto L, Breckels LM, Burger T, Nightingale DJ, Groen AJ, Campbell C, Nikolovski N, Mulvey CM, Christoforou , Ferro M, Lilley KS. foundation reliable spatial proteomics data analysis. Mol Cell Proteomics. 2014 Aug;13(8):1937-52. doi: 10.1074/mcp.M113.036350. pRoloc package contains additional vignettes reference material: pRoloc-tutorial: pRoloc tutorial (vignette). pRoloc-ml: Machine learning techniques available pRoloc. pRoloc-transfer-learning: transfer learning algorithm spatial proteomics. pRoloc-goannotations: Annotating spatial proteomics data. pRoloc-bayesian: Bayesian spatial proteomics pRoloc.","code":""},{"path":"https://lgatto.github.io/pRoloc/articles/v01-pRoloc-tutorial.html","id":"questions-and-bugs","dir":"Articles","previous_headings":"","what":"Questions and bugs","title":"Using pRoloc for spatial proteomics data analysis","text":"welcome contact directly pRoloc. bugs, typos, suggestions questions, please file issue issue tracking system (https://github.com/lgatto/pRoloc/issues) providing much information possible, reproducible example output sessionInfo(). wish reach broader audience general questions proteomics analysis using R, may want use Bioconductor support site: https://support.bioconductor.org/.","code":""},{"path":[]},{"path":"https://lgatto.github.io/pRoloc/articles/v01-pRoloc-tutorial.html","id":"spatial-proteomics","dir":"Articles","previous_headings":"Introduction","what":"Spatial proteomics","title":"Using pRoloc for spatial proteomics data analysis","text":"Spatial (organelle) proteomics study localisation proteins inside cells. sub-cellular compartment can organelles, .e. structures defined lipid bi-layers,macro-molecular assemblies proteins nucleic acids large protein complexes. document, focus mass-spectrometry based approaches assay population cells, opposed microscopy based techniques monitor single cells, former primary concern pRoloc, although techniques described infrastructure place also applied processed image data. typical experimental use-case using pRoloc set fractions, originating total cell lysate. fractions can originate continuous gradient, like LOPIT (Dunkley et al. 2006) PCP (Foster et al. 2006) approaches, can discrete fractions. content fractions identified quantified (using labelled un-labelled quantitation techniques). Using relative quantitation known organelle residents, termed organelle markers, organelle-specific profiles along gradient determined new residents identified based matching distribution profiles. See example (Gatto et al. 2010) references therein detailed review organelle proteomics. noted large protein complexes, necessarily separately enclosed within lipid bi-layer, can detected techniques, long distinct profile can defined across fractions.","code":""},{"path":"https://lgatto.github.io/pRoloc/articles/v01-pRoloc-tutorial.html","id":"about-r-and-proloc","dir":"Articles","previous_headings":"Introduction","what":"About R and pRoloc","title":"Using pRoloc for spatial proteomics data analysis","text":"R (R Development Core Team 2011) statistical programming language interactive working environment. can expanded -called packages confer new functionality users. Many packages developed analysis high-throughput biology, notably Bioconductor project (Gentleman et al. 2004). Two packages particular interest , namely MSnbase (Gatto Lilley 2012) pRoloc. former provides flexible infrastructure store manipulate quantitative proteomics data associated meta-data latter implements specific algorithmic technologies analyse organelle proteomics data. Among advantages R robust statistical procedures, good visualisation capabilities, excellent documentation, reproducible research1, power flexibility R language environment rich environment specialised functionality many domains bioinformatics: tools many omics technologies, including proteomics, bio-statistics, gene ontology biological pathway analysis, … Although exists specific graphical user interfaces (GUI), interaction R executed command line interface. mode interaction might look alien new users, experience proven first steep learning curve, great results can achieved non-programmers. Furthermore, specific general documentation plenty beginners advanced course material also widely available. R started, first step enable functionality specific packages load using library function, shown code chunk : MSnbase implements data containers used pRoloc. pRolocdata data package supplies several published organelle proteomics data sets. final setup step, set default colour palette custom plotting functionality use semi-transparent colours code chunk (see ?setStockcol details). facilitates visualisation overlapping points.","code":"library(\"MSnbase\") library(\"pRoloc\") library(\"pRolocdata\") setStockcol(NULL) ## reset first setStockcol(paste0(getStockcol(), 70))"},{"path":[]},{"path":"https://lgatto.github.io/pRoloc/articles/v01-pRoloc-tutorial.html","id":"example-data","dir":"Articles","previous_headings":"Data structures","what":"Example data","title":"Using pRoloc for spatial proteomics data analysis","text":"data used tutorial published (Tan et al. 2009). LOPIT technique (Dunkley et al. 2006) used localise integral associated membrane proteins Drosophila melanogaster embryos. Briefly, embryos collected 0 – 16 hours, homogenised centrifuged collect supernatant, removing cell debris nuclei. Membrane fractionation performed iodixanol gradient fractions quantified using iTRAQ isobaric tags (Ross et al. 2004) follows: fractions 4/5, 114; fractions 12/13, 115; fraction 19, 116 fraction 21, 117. Labelled peptides separated using cation exchange chromatography analysed LS-MS/MS QSTAR XL quadrupole-time--flight mass spectrometer (Applied Biosystems). original localisation analysis performed using partial least square discriminant analysis (PLS-DA). Relative quantitation data retrieved supplementary file pr800866n_si_004.xls (http://pubs.acs.org/doi/suppl/10.1021/pr800866n/suppl_file/pr800866n_si_004.xls) imported R described . concentrate first replicate.","code":""},{"path":"https://lgatto.github.io/pRoloc/articles/v01-pRoloc-tutorial.html","id":"importing-and-loading-data","dir":"Articles","previous_headings":"Data structures","what":"Importing and loading data","title":"Using pRoloc for spatial proteomics data analysis","text":"section illustrates import data comma-separated value (csv) format appropriate R data structure. first section shows original csv (comma separated values) spreadsheet, published authors, one can read file using read.csv function. spreadsheet file similar output many quantitation software. next section, show 2 csv files containing subset columns original pr800866n_si_004-rep1.csv file another short file, created manually, used create appropriate R data.","code":""},{"path":"https://lgatto.github.io/pRoloc/articles/v01-pRoloc-tutorial.html","id":"sec:orgcsv","dir":"Articles","previous_headings":"Data structures > Importing and loading data","what":"The original data file","title":"Using pRoloc for spatial proteomics data analysis","text":"three first lines original spreadsheet, containing data replicate one, illustrated (using function head). contains 888 rows (proteins) 16 columns, including protein identifiers, database accession numbers, gene symbols, reporter ion quantitation values, information related protein identification, …","code":"## The original data for replicate 1, available ## from the pRolocdata package f0 <- dir(system.file(\"extdata\", package = \"pRolocdata\"), full.names = TRUE, pattern = \"pr800866n_si_004-rep1.csv\") csv <- read.csv(f0) head(csv, n=3) ## Protein.ID FBgn Flybase.Symbol No..peptide.IDs Mascot.score ## 1 CG10060 FBgn0001104 G-ialpha65A 3 179.86 ## 2 CG10067 FBgn0000044 Act57B 5 222.40 ## 3 CG10077 FBgn0035720 CG10077 5 219.65 ## No..peptides.quantified area.114 area.115 area.116 area.117 ## 1 1 0.379000 0.281000 0.225000 0.114000 ## 2 9 0.420000 0.209667 0.206111 0.163889 ## 3 3 0.187333 0.167333 0.169667 0.476000 ## PLS.DA.classification Peptide.sequence Precursor.ion.mass ## 1 PM ## 2 PM ## 3 ## Precursor.ion.charge pd.2013 pd.markers ## 1 PM unknown ## 2 PM unknown ## 3 unknown unknown"},{"path":"https://lgatto.github.io/pRoloc/articles/v01-pRoloc-tutorial.html","id":"sec:csv","dir":"Articles","previous_headings":"Data structures > Importing and loading data","what":"From csv files to R data","title":"Using pRoloc for spatial proteomics data analysis","text":"several ways create desired R data object, termed MSnSet, used perform actual sub-cellular localisation prediction. , illustrate method uses separate spreadsheet files quantitation data, feature meta-data sample (fraction) meta-data readMSnSet constructor function, hopefully straightforward new users. exprsFile.csv containing quantitation (expression) data 888 proteins 4 reporter tags. fdataFile.csv containing meta-data 888 features (proteins). pdataFile.csv containing samples (fractions) meta-data. simple file created manually. self-contained data structure, called MSnSet (defined MSnbase package) can now easily generated using readMSnSet constructor, providing respective csv file names shown specifying data comma-separated (sep = \",\"). , call object tan2009r1 display content.","code":"## The quantitation data, from the original data f1 <- dir(system.file(\"extdata\", package = \"pRolocdata\"), full.names = TRUE, pattern = \"exprsFile.csv\") exprsCsv <- read.csv(f1) ## Feature meta-data, from the original data f2 <- dir(system.file(\"extdata\", package = \"pRolocdata\"), full.names = TRUE, pattern = \"fdataFile.csv\") fdataCsv <- read.csv(f2) ## Sample meta-data, a new file f3 <- dir(system.file(\"extdata\", package = \"pRolocdata\"), full.names = TRUE, pattern = \"pdataFile.csv\") pdataCsv <- read.csv(f3) head(exprsCsv, n=3) ## FBgn X114 X115 X116 X117 ## 1 FBgn0001104 0.379000 0.281000 0.225000 0.114000 ## 2 FBgn0000044 0.420000 0.209667 0.206111 0.163889 ## 3 FBgn0035720 0.187333 0.167333 0.169667 0.476000 head(fdataCsv, n=3) ## FBgn ProteinID FlybaseSymbol NoPeptideIDs MascotScore ## 1 FBgn0001104 CG10060 G-ialpha65A 3 179.86 ## 2 FBgn0000044 CG10067 Act57B 5 222.40 ## 3 FBgn0035720 CG10077 CG10077 5 219.65 ## NoPeptidesQuantified PLSDA ## 1 1 PM ## 2 9 PM ## 3 3 pdataCsv ## sampleNames Fractions ## 1 X114 4/5 ## 2 X115 12/13 ## 3 X116 19 ## 4 X117 21 tan2009r1 <- readMSnSet(exprsFile = f1, featureDataFile = f2, phenoDataFile = f3, sep = \",\") tan2009r1 ## MSnSet (storageMode: lockedEnvironment) ## assayData: 888 features, 4 samples ## element names: exprs ## protocolData: none ## phenoData ## sampleNames: X114 X115 X116 X117 ## varLabels: Fractions ## varMetadata: labelDescription ## featureData ## featureNames: FBgn0001104 FBgn0000044 ... FBgn0001215 (888 total) ## fvarLabels: ProteinID FlybaseSymbol ... PLSDA (6 total) ## fvarMetadata: labelDescription ## experimentData: use 'experimentData(object)' ## Annotation: ## - - - Processing information - - - ## Quantitation data loaded: Fri Oct 18 17:21:22 2024 using readMSnSet. ## MSnbase version: 2.31.1"},{"path":"https://lgatto.github.io/pRoloc/articles/v01-pRoloc-tutorial.html","id":"a-shorter-input-work-flow","dir":"Articles","previous_headings":"Data structures","what":"A shorter input work flow","title":"Using pRoloc for spatial proteomics data analysis","text":"readMSnSet2 function provides simplified import pipeline. takes single spreadsheet input (default csv) extract columns identified ecol create expression data, others used feature meta-data. ecol can character respective column labels numeric indices. former case, important make sure names match exactly. Special characters like '-' '(' transformed R '.' csv file read . Optionally, one can also specify column used feature names. Note must unique guarantee final object validity. ecol columns can also queried interactively R using getEcols grepEcols function. former return character column names, given splitting character, .e. separation value spreadsheet (typically \",\" csv, \"\\t\" tsv, …). latter can used grep pattern interest obtain relevant column indices. phenoData slot can now updated accordingly using replacement functions phenoData<- pData<- (see ?MSnSet details).","code":"ecol <- paste(\"area\", 114:117, sep = \".\") fname <- \"Protein.ID\" eset <- readMSnSet2(f0, ecol, fname) eset ## MSnSet (storageMode: lockedEnvironment) ## assayData: 888 features, 4 samples ## element names: exprs ## protocolData: none ## phenoData: none ## featureData ## featureNames: CG10060 CG10067 ... CG9983 (888 total) ## fvarLabels: Protein.ID FBgn ... pd.markers (12 total) ## fvarMetadata: labelDescription ## experimentData: use 'experimentData(object)' ## Annotation: ## - - - Processing information - - - ## MSnbase version: 2.31.1 getEcols(f0, \",\") ## [1] \"\\\"Protein ID\\\"\" \"\\\"FBgn\\\"\" ## [3] \"\\\"Flybase Symbol\\\"\" \"\\\"No. peptide IDs\\\"\" ## [5] \"\\\"Mascot score\\\"\" \"\\\"No. peptides quantified\\\"\" ## [7] \"\\\"area 114\\\"\" \"\\\"area 115\\\"\" ## [9] \"\\\"area 116\\\"\" \"\\\"area 117\\\"\" ## [11] \"\\\"PLS-DA classification\\\"\" \"\\\"Peptide sequence\\\"\" ## [13] \"\\\"Precursor ion mass\\\"\" \"\\\"Precursor ion charge\\\"\" ## [15] \"\\\"pd.2013\\\"\" \"\\\"pd.markers\\\"\" grepEcols(f0, \"area\", \",\") ## [1] 7 8 9 10 e <- grepEcols(f0, \"area\", \",\") readMSnSet2(f0, e) ## MSnSet (storageMode: lockedEnvironment) ## assayData: 888 features, 4 samples ## element names: exprs ## protocolData: none ## phenoData: none ## featureData ## featureNames: 1 2 ... 888 (888 total) ## fvarLabels: Protein.ID FBgn ... pd.markers (12 total) ## fvarMetadata: labelDescription ## experimentData: use 'experimentData(object)' ## Annotation: ## - - - Processing information - - - ## MSnbase version: 2.31.1"},{"path":"https://lgatto.github.io/pRoloc/articles/v01-pRoloc-tutorial.html","id":"the-msnset-class","dir":"Articles","previous_headings":"Data structures > A shorter input work flow","what":"The MSnSet class","title":"Using pRoloc for spatial proteomics data analysis","text":"Although additional specific sub-containers additional meta-data (instance make object MIAPE compliant), feature (sub-container, slot featureData) sample (phenoData slot) important ones. need meet following validity requirements (see figure ): number row expression/quantitation data feature data must equal row names must match exactly, number columns expression/quantitation data number row sample meta-data must equal column/row names must match exactly. common, context pRoloc update feature meta-data (described section @ref(sec:analysis)) adding new columns, without breaking objects validity. Similarly, sample meta-data can also updated adding new sample variables. detailed description MSnSet class available typing ?MSnSet R console. individual parts data object can accessed respective accessor methods: quantitation data can retrieved exprs(tan2009r1), feature meta-data fData(tan2009r1) sample meta-data pData(tan2009r1). advantage structure can manipulated whole respective parts data object remain compatible. code chunk , example, shows extract first 5 proteins 2 first samples: Several data sets, including 3 replicates (Tan et al. 2009), distributed MSnSet instances pRolocdata package. Others include, among others, Arabidopsis thaliana LOPIT data (Dunkley et al. 2006) (dunkley2006) mouse PCP data (Foster et al. 2006) (foster2006). data set can loaded data function, show first replicate (Tan et al. 2009). original marker proteins available feature meta-data variables called markers.orig output partial least square discriminant analysis, applied original publication, PLSDA feature variable. --date marker list experiment can found markers. feature meta-data column can added simple csv markers files using addMarkers function - see ?addMarkers details. organelle markers illustrated using convenience function getMarkers, also done manually accessing feature variables directly using fData(). Important can seen , proteins labelled \"unknown\", defining non marker proteins. convention many pRoloc functions. Missing annotations (empty string) considered unknown localisation; prefer avoid empty strings make absence known localisation explicit using \"unknown\" tag. information used separate marker non-marker (unlabelled) proteins proceeding data visualisation clustering (sections @ref(sec:viz) @ref(sec:usml)) classification analysis (section @ref(sec:sml)).","code":"smallTan <- tan2009r1[1:5, 1:2] dim(smallTan) ## [1] 5 2 exprs(smallTan) ## X114 X115 ## FBgn0001104 0.379000 0.281000 ## FBgn0000044 0.420000 0.209667 ## FBgn0035720 0.187333 0.167333 ## FBgn0003731 0.247500 0.253000 ## FBgn0029506 0.216000 0.183000 data(tan2009r1) getMarkers(tan2009r1, fcol = \"markers.orig\") ## organelleMarkers ## ER Golgi mitochondrion PM unknown ## 20 6 14 15 833 getMarkers(tan2009r1, fcol = \"PLSDA\") ## organelleMarkers ## ER/Golgi mitochondrion PM unknown ## 235 74 180 399"},{"path":"https://lgatto.github.io/pRoloc/articles/v01-pRoloc-tutorial.html","id":"prolocs-organelle-markers","dir":"Articles","previous_headings":"Data structures","what":"pRoloc’s organelle markers","title":"Using pRoloc for spatial proteomics data analysis","text":"pRoloc package distributes set markers obtained mining pRolocdata datasets curation various members Cambridge Centre Proteomics. available marker sets can obtained loaded using pRolocmarkers function: markers can added new MSnSet using addMarkers function matching marker names (protein identifiers) feature names MSnSet. See ?addMarkers examples.","code":"pRolocmarkers() ## 14 marker lists (version 2) available: ## Arabidopsis thaliana [atha]: ## Ids: TAIR, 543 markers ## Drosophila melanogaster [dmel]: ## Ids: Uniprot, 179 markers ## Gallus gallus [ggal]: ## Ids: IPI, 102 markers ## Homo sapiens [hsap_christopher]: ## Ids: Uniprot, 1509 markers ## Homo sapiens [hsap_geladaki]: ## Ids: Uniprot, 579 markers ## Homo sapiens [hsap_itzhak]: ## Ids: Uniprot, 1076 markers ## Homo sapiens [hsap_villaneuva]: ## Ids: Uniprot, 682 markers ## Homo sapiens [hsap]: ## Ids: Uniprot, 872 markers ## Mus musculus [mmus_christoforou]: ## Ids: Uniprot, 922 markers ## Mus musculus [mmus]: ## Ids: Uniprot, 937 markers ## Saccharomyces cerevisiae [scer_sgd]: ## Ids: SGD, 259 markers ## Saccharomyces cerevisiae [scer_uniprot]: ## Ids: Uniprot, 259 markers ## Toxoplasma gondii [toxo_barylyuk]: ## Ids: ToxoDB gene identifier, 718 markers ## Trypanosoma brucei [tryp_moloney]: ## Ids: TriTrypDB gene identifier, 891 markers head(pRolocmarkers(\"dmel\")) ## Q7JZN0 Q7KLV9 Q9VIU7 P15348 Q7KMP8 O01367 ## \"ER\" \"Proteasome\" \"ER\" \"Nucleus\" \"Proteasome\" \"Nucleus\" table(pRolocmarkers(\"dmel\")) ## ## 40S Ribosome 60S Ribosome Cytoskeleton ER Golgi ## 22 32 7 24 7 ## Lysosome Mitochondrion Nucleus Peroxisome PM ## 8 15 21 4 25 ## Proteasome ## 14"},{"path":"https://lgatto.github.io/pRoloc/articles/v01-pRoloc-tutorial.html","id":"data-processing","dir":"Articles","previous_headings":"Data structures","what":"Data processing","title":"Using pRoloc for spatial proteomics data analysis","text":"quantitation data obtained supplementary file normalised sum intensities protein; sum fraction quantitation protein equals 1 (considering rounding errors). can quickly verified computing row sums expression data. normalise method (also available normalize) MSnbase package can used obtain relative quantitation data, illustrated another iTRAQ test data set, available MSnbase. Several normalisation methods available described ?normalise. many algorithms, including classifiers general support vector machines particular, important properly per-process data. Centering scaling data also available scale method. code chunk , first create test MSnSet instance2 illustrate effect normalise(..., method = \"sum\"). Note processing undergone MSnSet instances itraqdata itraqnorm stored another specific sub-container, processingData slot. different features (proteins tan2009r1 data , also represent peptides MS2^2 spectra) characterised unique names. can retrieved featureNames function. look back section @ref(sec:csv), see automatically assigned using first columns exprsFile.csv fdataFile.csv files. thus crucial respective first columns identical. Similarly, sample names can retrieved sampleNames(tan2009r1).","code":"summary(rowSums(exprs(tan2009r1))) ## Min. 1st Qu. Median Mean 3rd Qu. Max. ## 0.9990 0.9999 1.0000 1.0000 1.0001 1.0010 ## create a small illustrative test data data(itraqdata) itraqdata <- quantify(itraqdata, method = \"trap\", reporters = iTRAQ4) ## the quantification data head(exprs(itraqdata), n = 3) ## iTRAQ4.114 iTRAQ4.115 iTRAQ4.116 iTRAQ4.117 ## X1 1347.6158 2247.3097 3927.6931 7661.1463 ## X10 739.9861 799.3501 712.5983 940.6793 ## X11 27638.3582 33394.0252 32104.2879 26628.7278 summary(rowSums(exprs(itraqdata))) ## Min. 1st Qu. Median Mean 3rd Qu. Max. NA's ## 59.06 5638.09 15344.43 38010.87 42256.61 305739.04 1 ## normalising to the sum of feature intensitites itraqnorm <- normalise(itraqdata, method = \"sum\") processingData(itraqnorm) ## - - - Processing information - - - ## Data loaded: Wed May 11 18:54:39 2011 ## Updated from version 0.3.0 to 0.3.1 [Fri Jul 8 20:23:25 2016] ## iTRAQ4 quantification by trapezoidation: Fri Oct 18 17:21:26 2024 ## Normalised (sum): Fri Oct 18 17:21:26 2024 ## MSnbase version: 1.1.22 head(exprs(itraqnorm), n = 3) ## iTRAQ4.114 iTRAQ4.115 iTRAQ4.116 iTRAQ4.117 ## X1 0.08875373 0.1480074 0.2586772 0.5045617 ## X10 0.23178064 0.2503748 0.2232022 0.2946424 ## X11 0.23077081 0.2788287 0.2680598 0.2223407 summary(rowSums(exprs(itraqnorm))) ## Min. 1st Qu. Median Mean 3rd Qu. Max. NA's ## 1 1 1 1 1 1 1 head(featureNames(tan2009r1)) ## [1] \"P20353\" \"P53501\" \"Q7KU78\" \"P04412\" \"Q7KJ73\" \"Q7JZN0\""},{"path":"https://lgatto.github.io/pRoloc/articles/v01-pRoloc-tutorial.html","id":"sec:viz","dir":"Articles","previous_headings":"","what":"Data visualisation","title":"Using pRoloc for spatial proteomics data analysis","text":"following sections focus two closely related aspects, data visualisation data analysis (.e. organelle assignments). Data visualisation used context quality control, convince data displays expected properties output processing can trusted. Visualising results localisation prediction also essential, control validity results, proceeding orthogonal (often expensive) dry wet validation.","code":""},{"path":"https://lgatto.github.io/pRoloc/articles/v01-pRoloc-tutorial.html","id":"sec:profplot","dir":"Articles","previous_headings":"Data visualisation","what":"Profile plots","title":"Using pRoloc for spatial proteomics data analysis","text":"underlying principle gradient approaches separated organelles along gradient , generated organelle-specific protein distributions along gradient fractions. natural visualisation shown figure @ref(fig:plotdist1), obtained using sub-setting functionality MSnSet instances plotDist function, illustrated . Distribution protein intensities along fractions separation gradient 4 organelles: mitochondrion (red), ER/Golgi (blue, ER markers green, Golgi markers) plasma membrane (purple).","code":"## indices of the mito markers j <- which(fData(tan2009r1)$markers.orig == \"mitochondrion\") ## indices of all proteins assigned to the mito i <- which(fData(tan2009r1)$PLSDA == \"mitochondrion\") plotDist(tan2009r1[i, ], markers = featureNames(tan2009r1)[j])"},{"path":"https://lgatto.github.io/pRoloc/articles/v01-pRoloc-tutorial.html","id":"sec:dendro","dir":"Articles","previous_headings":"Data visualisation","what":"Sub-cellular cluster dendrogram","title":"Using pRoloc for spatial proteomics data analysis","text":"gain quick overview distance/similarity sub-cellular clusters, can useful compare average marker profiles, rather profiles, presented profile plots . mrkHClust calculates average class profiles generates resulting dendrogram. Hierarchical clustering. Average distance organelle classes. figure @ref(fig:dendro), see lysosome ribosome 60S separated smallest distance. advantage representation provides quick snapshot average similarity organelles using complete profiles (opposed PCA plot, discussed next section). main drawback ignores variability individual markers (cluster thighness). however good guide thorough exploration data, described next sections. Note colours labels dendrogram (figure @ref(fig:dendro)), match colours used annotate PCA plots, described next section (figure @ref(fig:plot2d). colours defined session level (see getStockcol setStockcol) re-used throughout pRoloc consistent annotation.","code":"mrkHClust(tan2009r1)"},{"path":"https://lgatto.github.io/pRoloc/articles/v01-pRoloc-tutorial.html","id":"sec:avrprofplot","dir":"Articles","previous_headings":"Data visualisation","what":"Average organelle class profile plot","title":"Using pRoloc for spatial proteomics data analysis","text":"can also visualise average organelle class profiles generated mrkConsProfiles using plotConsProfiles. can optionally order organelle classes y-axis according heirachical clustering mrkHClust. See ?mrkHClust details Average organelle class profiles. Protein intensity indicated colour. Organelle classes ordered hierarchical clustering","code":"## histogram hc <- mrkHClust(tan2009r1, plot=FALSE) ## order of markers according to histogram mm <- getMarkerClasses(tan2009r1) m_order <- levels(factor(mm))[order.dendrogram(hc)] ## average marker profile fmat <- mrkConsProfiles(tan2009r1) plotConsProfiles(fmat, order=m_order)"},{"path":"https://lgatto.github.io/pRoloc/articles/v01-pRoloc-tutorial.html","id":"sec:pcalot","dir":"Articles","previous_headings":"Data visualisation","what":"Dimensionality reduction","title":"Using pRoloc for spatial proteomics data analysis","text":"Alternatively, can combine organelle groups one single 2 dimensional figure applying dimensionality reduction technique Principal Component Analysis (PCA) using plot2D function (see figure @ref(fig:plot2d)). protein profile vectors summarised 2 values can visualised two dimensions, variability data maximised along first principal component (PC1). second principal component (PC2) chosen orthogonal PC1 explaining much variance data possible, PC3, PC4, etc. Using PCA representation visualise spatial proteomics experiment, can easily plot proteins figure well many sub-cellular clusters. clusters defined feature meta-data column (slot featureData, accessed data.frame fData function) declared fcol argument (default \"markers\" contains current known markers experiment, original markers published data can found slot \"markers.orig\"). PCA plot. Representation proteins tan2009r1 reduction 4 reporter quantitation data 2 principal components. default value fcol argument \"markers\", necessary specify . however mandatory specify annotation feature variables, visualise set markers described original publication. PCA plot. Reduced set markers tan2009r1 data projected onto 2 principal components. also possible visualise data along 3 dimensions using plot3D function, works like 2 dimension version (figure ). resulting figure can rotated user. can seen figures @ref(fig:plot2d), @ref(fig:plot2dorg) 3D plot , indicate axis labels percentage total variance explained individual PCs. unusual reach 75% along first two PCs, even experiments several tens fractions. One can calculate information PCs setting method = \"scree\" plot2D. figure @ref(fig:scree), see four PCs tan2009r1 data account 58.53, 29.96, 11.52 0 percent total variance. Percentage variance explained. variety dimensionality reduction methods available plot2D: PCA, MDS, kpca, lda, t-SNE, nipals, hexbin, none, scree. Except scree (see ) none (data transformation, can useful data already transformed needs plotted), can used produce visualisation data two dimensions. Two worth discussion ; readers redirected manual page details. Linear discriminant analysis (LDA) project protein occupancy profiles new set dimensions using criterion separation marker classes maximising class variance within class variance ratio. opposed unsupervised PCA, supervised LDA used explore data quality control, can useful assess one organelles preferentially separated. t-Distributed Stochastic Neighbour Embedding (t-SNE)3 (Maaten Hinton 2008) widely applied many areas computational biology generally field need visualise high-dimensional data. t-SNE method non-linear, emphasise separation different features grouping features similar profiles. addition, different transformations applied different regions leading plots can substantially differ PCA plot. result, proximity two dimensions tightness clusters can’t related quantities original data. See Use t-SNE Effectively4 useful non-technical introduction. results algorithm crucially depend values input parameters, particular perplexity, balances global local aspects data. suggested range value ranges 5 50, greater number data points (can assume case modern spatial proteomics experiments). , test effect parameter along suggested range, including default value 30, algorithm converges. parameters can effect results number iterations learning rate epsilon. t-SNE algorithm takes much time complete available methods. cases, saving results re-plotting method none can useful (see ?plot2D). case document, figure , pre-generated rather computed upon compilation.","code":"plot2D(tan2009r1, fcol = \"markers\") addLegend(tan2009r1, fcol = \"markers\", cex = .7, where = \"bottomright\", ncol = 2) plot2D(tan2009r1, fcol = \"markers.orig\") addLegend(tan2009r1, fcol = \"markers.orig\", where = \"bottomright\") plot3D(tan2009r1) plot2D(tan2009r1, method = \"scree\") perps <- sort(c(30, seq(5, 50, 15))) data(HEK293T2011) par(mfrow = c(2, 3)) plot2D(HEK293T2011, main = \"PCA\") sapply(perps, function(perp) { plot2D(HEK293T2011, method = \"t-SNE\", methargs = list(perplexity = perp)) title(main = paste(\"t-SNE, perplexity\", perp)) })"},{"path":"https://lgatto.github.io/pRoloc/articles/v01-pRoloc-tutorial.html","id":"features-of-interest","dir":"Articles","previous_headings":"Data visualisation","what":"Features of interest","title":"Using pRoloc for spatial proteomics data analysis","text":"addition highlighting sub-cellular niches coloured clusters PCA plot, also possible define arbitrary features interest represent, example, proteins particular pathway set interaction partners. sets proteins recorded FeaturesOfInterest instances, illstrated (using ten first features experiment): Several features interest can combined collections: FeaturesOfInterest instances can now overlaid PCA plot highlightOnPlot function. highlightOnPlot3D can used overlay data onto 3 dimensional figure produced plot3D. Adding features interest PCA plot. See ?FeaturesOfInterest ?highlightOnPlot details.","code":"foi1 <- FeaturesOfInterest(description = \"Feats of interest 1\", fnames = featureNames(tan2009r1[1:10])) description(foi1) ## [1] \"Feats of interest 1\" foi(foi1) ## [1] \"P20353\" \"P53501\" \"Q7KU78\" \"P04412\" \"Q7KJ73\" \"Q7JZN0\" \"Q7KLV9\" \"Q9VM65\" ## [9] \"Q9VCK0\" \"Q9VIU7\" foi2 <- FeaturesOfInterest(description = \"Feats of interest 2\", fnames = featureNames(tan2009r1[880:888])) foic <- FoICollection(list(foi1, foi2)) foic ## A collection of 2 features of interest. plot2D(tan2009r1, fcol = \"PLSDA\") addLegend(tan2009r1, fcol = \"PLSDA\", where = \"bottomright\", cex = .7) highlightOnPlot(tan2009r1, foi1, col = \"black\", lwd = 2) highlightOnPlot(tan2009r1, foi2, col = \"purple\", lwd = 2) legend(\"topright\", c(\"FoI 1\", \"FoI 2\"), bty = \"n\", col = c(\"black\", \"purple\"), pch = 1)"},{"path":"https://lgatto.github.io/pRoloc/articles/v01-pRoloc-tutorial.html","id":"sec:gui","dir":"Articles","previous_headings":"Data visualisation","what":"Interactive visualisation","title":"Using pRoloc for spatial proteomics data analysis","text":"pRolocGUI application allows one explore spatial proteomics data using interactive, web-based interface (RStudio Inc. 2014). package available Bioconductor can installed started follows: details available vignette can started application clicking question marks, starting vignette R vignette(\"pRolocGUI\") can accessed online (http://bioconductor.org/packages/devel/bioc/vignettes/pRolocGUI/inst/doc/pRolocGUI.html).","code":"library(\"BiocManager\") BiocManager::install(\"pRolocGUI\") library(\"pRolocGUI\") pRolocVis(tan2009r1)"},{"path":"https://lgatto.github.io/pRoloc/articles/v01-pRoloc-tutorial.html","id":"sec:qsep","dir":"Articles","previous_headings":"","what":"Assessing sub-cellular resolution","title":"Using pRoloc for spatial proteomics data analysis","text":"sub-cellular resolution spatial proteomics experiment, .e. quantitation well respective sub-cellular niches separated, can computed QSep function. Briefly, function compares, pairs sub-cellular niches, ratio average Euclidean distance niche j average within distance cluster j. large ratio indicates j well separated respect thighness cluster j. larger distances, better spatial proteomics experiment. , calulate visualise QSep distances hyperLOPIT2015 data: See Assessing sub-cellular resolution spatial proteomics experiments (Gatto, Breckels, Lilley 2018) details, including large meta-analysis 29 different spatial proteomics experiments.","code":"library(\"pRolocdata\") data(hyperLOPIT2015) ## Create the object and get a summary hlq <- QSep(hyperLOPIT2015) hlq ## Object of class 'QSep'. ## Data: hyperLOPIT2015 ## With 14 sub-cellular clusters. levelPlot(hlq) plot(hlq)"},{"path":"https://lgatto.github.io/pRoloc/articles/v01-pRoloc-tutorial.html","id":"sec:analysis","dir":"Articles","previous_headings":"","what":"Data analysis","title":"Using pRoloc for spatial proteomics data analysis","text":"Classification proteins, .e. assigning sub-cellular localisation proteins, main aspect present data analysis. principle following , basic form, 2 step process. First, algorithm learns known markers shown models data space accordingly. phase also called training phase. second phase, un-labelled proteins, .e. labelled resident organelle, matched model assigned group (organelle). 2 step process called machine learning (ML), computer (machine) learns recognise instances possess certain characteristics classifies without human intervention. however mean results can trusted blindly. paragraph, defined called supervised ML, algorithm presented know instances learns (see section @ref(sec:sml)). Alternatively, un-supervised ML make assumptions group memberships, uses structure data defined sub-groups (see section @ref(sec:usml)). course possible classify data based labelled unlabelled data. extension supervised classification problem described called semi-supervised learning. case, training data consists labelled unlabelled instances obvious goal generating better classifier possible labelled data . phenoDisco algorithm, illustrated context (section @ref(sec:ssml)).","code":""},{"path":"https://lgatto.github.io/pRoloc/articles/v01-pRoloc-tutorial.html","id":"sec:usml","dir":"Articles","previous_headings":"Data analysis","what":"Unsupervised ML","title":"Using pRoloc for spatial proteomics data analysis","text":"plot2D can also used visualise data PCA plot omitting marker definitions, shown figure @ref(fig:plot2dnull). approach avoids bias towards marker definitions concentrate data underlying structure . Plain PCA representation tan2009r1 data. Alternatively, pRoloc also gives access MLInterfaces’s MLean unified interface , among others, unsupervised approaches using k-means (figure @ref(fig:plotKmeans)), hierarchical (figure @ref(fig:plotHclust)) partitioning around medoids (figure @ref(fig:plotPam)), clustering. k-means clustering tan2009r1 data. Hierarchical clustering tan2009r1 data. Partitioning around medoids tan2009r1 data.","code":"plot2D(tan2009r1, fcol = NULL) kcl <- MLearn( ~ ., tan2009r1, kmeansI, centers=5) plot(kcl, exprs(tan2009r1)) hcl <- MLearn( ~ ., tan2009r1, hclustI(distFun = dist, cutParm = list(k = 5))) plot(hcl, labels = FALSE) pcl <- MLearn( ~ ., tan2009r1, pamI(dist), k = 5) plot(pcl, data = exprs(tan2009r1))"},{"path":"https://lgatto.github.io/pRoloc/articles/v01-pRoloc-tutorial.html","id":"sec:sml","dir":"Articles","previous_headings":"Data analysis","what":"Supervised ML","title":"Using pRoloc for spatial proteomics data analysis","text":"section, show use pRoloc run typical supervised ML analysis. Several ML methods available, including k-nearest neighbour (knn), partial least square discriminant analysis (plsda), random forest (rf), support vector machines (svm), detailed description method outside scope document. use support vector machines illustrate typical pipeline important points paid attention . points equally valid work, pRoloc user perspective, exactly approaches.","code":""},{"path":"https://lgatto.github.io/pRoloc/articles/v01-pRoloc-tutorial.html","id":"classification-algorithm-parameters-optimisation","dir":"Articles","previous_headings":"Data analysis > Supervised ML","what":"Classification algorithm parameters optimisation","title":"Using pRoloc for spatial proteomics data analysis","text":"actually generating model new markers classifying unknown residents, one take care properly setting model parameters. Wrongly set parameters can negative impact classification performance. , create testing (model) training (predict) subsets using known residents, .e. marker proteins. comparing observed expected classification prediction, can assess well given model works using macro F1 score (see ). procedure repeated range possible model parameter values (called grid search), best performing set parameters used construct model markers predict un-labelled proteins. parameter optimisation procedure perform well produce useful results, essential run reasonable amount markers. experience, 15 marker proteins necessary. Model accuracy evaluated using F1 score, F1=2precision×recallprecision+recallF1 = 2 ~ \\frac{precision \\times recall}{precision + recall}, calculated harmonic mean precision (precision=tptp+fpprecision = \\frac{tp}{tp+fp}, measure exactness – returned output relevant result) recall (recall=tptp+fnrecall=\\frac{tp}{tp+fn}, measure completeness – indicating much missed output). aiming high generalisation accuracy, .e high F1F1, indicating marker proteins test data set consistently correctly assigned algorithms. order evaluate well classifier performs profiles exposed creation, implemented following schema. set marker protein profiles, .e. labelled known organelle association, separated training test/validation partitions sampling 80% profile corresponding organelle (.e. stratified) without replacement form training partition StrS_{tr} remainder becoming test/validation partition StsS_{ts}. svm regularisation parameter CC Gaussian kernel width sigmasigma selected using round stratified five-fold cross-validation training partition. pairs parameters (Ci,sigmaj)(C_i, sigma_j) consideration assessed using macro F1 score pair produces best performance subsequently employed training classifier training profiles StrS_{tr} prior assessment test/validation profiles StsS_{ts}. procedure repeated NN times (example 10) order produce NN macro F1 estimated generalisation performance values (figures @ref(fig:params1) @ref(fig:params2)). procedure implemented svmOptimisation. See ?svmOptimisation details, particular range CC sigmasigma parameters relevant feature variable defined fcol parameters, defaults \"markers\". interest time, optimisation executed loaded Assessing parameter optimisation. , see respective distributions 10 macro F1 scores best cost/sigma parameter pairs. See also output f1Count relation plot. Assessing parameter optimisation. Visualisation averaged macro F1 scores, full range parameter values. addition plots figures @ref(fig:params1) @ref(fig:params2), f1Count(params) returns, combination parameters, number best (highest) F1 observations. One can use getParams see default set parameters chosen based executed optimisation. Currently, first best set automatically extracted, users advised critically assess whether wise choice. Important essential emphasise accuracy scores obtained parameter optimisation reflection classification performance set distinct ideally separated spatial clusters. , assume data characterised good separation various spatial niches reflected sub-cellular markers. Quality control data markers using visualisation described section @ref(sec:viz) essential subsequent analyses doomed fail absence separation. classification scores representative reliability final classification (described section @ref(sec:sml)), particular along boundaries separating different sub-cellular niches. High scores optimisation stage requirement proceed analysis, means indicative false positive rate final sub-cellular assignment non-marker proteins.","code":"params <- svmOptimisation(tan2009r1, fcol = \"markers.orig\", times = 100, xval = 5, verbose = FALSE) fn <- dir(system.file(\"extdata\", package = \"pRoloc\"), full.names = TRUE, pattern = \"params.rda\") load(fn) params ## Object of class \"GenRegRes\" ## Algorithm: svm ## Hyper-parameters: ## cost: 0.0625 0.125 0.25 0.5 1 2 4 8 16 ## sigma: 0.01 0.1 1 10 100 1000 ## Design: ## Replication: 10 x 5-fold X-validation ## Partitioning: 0.2/0.8 (test/train) ## Results ## macro F1: ## Min. 1st Qu. Median Mean 3rd Qu. Max. ## 0.8889 0.8889 1.0000 0.9556 1.0000 1.0000 ## best sigma: 0.1 1 ## best cost: 0.5 1 plot(params) levelPlot(params) f1Count(params) ## 0.5 1 ## 0.1 1 0 ## 1 NA 5 getParams(params) ## sigma cost ## 0.1 0.5"},{"path":"https://lgatto.github.io/pRoloc/articles/v01-pRoloc-tutorial.html","id":"classification","dir":"Articles","previous_headings":"Data analysis > Supervised ML","what":"Classification","title":"Using pRoloc for spatial proteomics data analysis","text":"can now re-use result parameter optimisation (best cost/sigma pair going automatically extracted, using getParams method, although possible set manually), use build model marker proteins predict unknown residents using svmClassification function (see manual page details). default, organelle markers defined \"markers\" feature variables (can defined fcol parameter) e.g. use original markers \"markers.orig\" use case. New feature variables containing organelle assignments assignment probabilities, called scores hereafter, automatically added featureData slot; case, using svm svm.scores labels. Important calculation classification probabilities dependent classification algorithm. probabilities compared across algorithms; reflect biologically relevant sub-cellular localisation probability rather algorithm-specific classification confidence score.} original markers, classification results scores can accessed fData accessor method, e.g. fData(svmres)$svm fData(svmres)$svm.scores. Two helper functions, getMarkers getPredictions available add level automation functionality, assuming default feature labels used. (invisibly) return corresponding feature variable (markers assigned classification) print summary table. fcol parameter must specified getPredictions. also possible defined classification probability classifications set \"unknown\". graphically illustrate organelle-specific score distributions, can use boxplot plot scores respective predicted svm classes, shown figure @ref(fig:predscores). can seen, different organelles characterised different score distributions. Using unique threshold (minprob value 0.78 ) results accepting 72% initial ER predictions 47% mitochondrion predictions. getPredictions function also accepts organelle-specific score thresholds. , calculate organelle-specific median scores. Organelle-specific SVM score distributions. Using scores equates choosing 50% predictions highest scores organelle. can now visualise results using plotting functions presented section @ref(sec:usml), shown figure @ref(fig:svmres). clearly see besides organelle marker clusters assigned high confidence members, many proteins substantially lower prediction scores. Representation svm prediction tan2009r1 data set. svm scores used set point size (cex argument; scores transformed emphasise extremes). Different symbols (fpch) used differentiate markers new assignments.","code":"## manual setting of parameters svmres <- svmClassification(tan2009r1, fcol = \"markers.orig\", sigma = 1, cost = 1) ## using default best parameters svmres <- svmClassification(tan2009r1, fcol = \"markers.orig\", assessRes = params) ## [1] \"markers.orig\" processingData(svmres) ## - - - Processing information - - - ## Added markers from 'mrk' marker vector. Thu Jul 16 22:53:44 2015 ## Performed svm prediction (sigma=0.1 cost=0.5) Fri Oct 18 17:21:32 2024 ## MSnbase version: 1.17.12 tail(fvarLabels(svmres), 4) ## [1] \"markers\" \"markers.tl\" \"svm\" \"svm.scores\" p1 <- getPredictions(svmres, fcol = \"svm\") ## ans ## Cytoskeleton ER Golgi Lysosome mitochondrion ## 7 241 39 8 219 ## Nucleus Peroxisome PM Proteasome Ribosome 40S ## 21 4 282 15 20 ## Ribosome 60S ## 32 p1 <- fData(p1)$svm.pred minprob <- median(fData(svmres)$svm.scores) p2 <- getPredictions(svmres, fcol = \"svm\", t = minprob) ## ans ## Cytoskeleton ER Golgi Lysosome mitochondrion ## 7 174 21 8 102 ## Nucleus Peroxisome PM Proteasome Ribosome 40S ## 21 4 148 15 20 ## Ribosome 60S unknown ## 32 336 p2 <- fData(p2)$svm.pred table(p1, p2) ## p2 ## p1 Cytoskeleton ER Golgi Lysosome mitochondrion Nucleus ## Cytoskeleton 7 0 0 0 0 0 ## ER 0 174 0 0 0 0 ## Golgi 0 0 21 0 0 0 ## Lysosome 0 0 0 8 0 0 ## mitochondrion 0 0 0 0 102 0 ## Nucleus 0 0 0 0 0 21 ## Peroxisome 0 0 0 0 0 0 ## PM 0 0 0 0 0 0 ## Proteasome 0 0 0 0 0 0 ## Ribosome 40S 0 0 0 0 0 0 ## Ribosome 60S 0 0 0 0 0 0 ## p2 ## p1 Peroxisome PM Proteasome Ribosome 40S Ribosome 60S unknown ## Cytoskeleton 0 0 0 0 0 0 ## ER 0 0 0 0 0 67 ## Golgi 0 0 0 0 0 18 ## Lysosome 0 0 0 0 0 0 ## mitochondrion 0 0 0 0 0 117 ## Nucleus 0 0 0 0 0 0 ## Peroxisome 4 0 0 0 0 0 ## PM 0 148 0 0 0 134 ## Proteasome 0 0 15 0 0 0 ## Ribosome 40S 0 0 0 20 0 0 ## Ribosome 60S 0 0 0 0 32 0 boxplot(svm.scores ~ svm, data = fData(svmres), ylab = \"SVM scores\") abline(h = minprob, lwd = 2, lty = 2) ts <- orgQuants(svmres, fcol = \"svm\", t = .5) ## ER Golgi mitochondrion PM ## 0.8374491 0.6318175 0.7483629 0.7725315 getPredictions(svmres, fcol = \"svm\", t = ts) ## ans ## Cytoskeleton ER Golgi Lysosome mitochondrion ## 7 135 26 8 124 ## Nucleus Peroxisome PM Proteasome Ribosome 40S ## 21 4 158 15 20 ## Ribosome 60S unknown ## 32 338 ## MSnSet (storageMode: lockedEnvironment) ## assayData: 888 features, 4 samples ## element names: exprs ## protocolData: none ## phenoData ## sampleNames: X114 X115 X116 X117 ## varLabels: Fractions ## varMetadata: labelDescription ## featureData ## featureNames: P20353 P53501 ... P07909 (888 total) ## fvarLabels: FBgn Protein.ID ... svm.pred (19 total) ## fvarMetadata: labelDescription ## experimentData: use 'experimentData(object)' ## pubMedIds: 19317464 ## Annotation: ## - - - Processing information - - - ## Added markers from 'mrk' marker vector. Thu Jul 16 22:53:44 2015 ## Performed svm prediction (sigma=0.1 cost=0.5) Fri Oct 18 17:21:32 2024 ## Added svm predictions according to thresholds: ER = 0.84, Golgi = 0.63, mitochondrion = 0.75, PM = 0.77 Fri Oct 18 17:21:32 2024 ## MSnbase version: 1.17.12 ptsze <- exp(fData(svmres)$svm.scores) - 1 plot2D(svmres, fcol = \"svm\", fpch = \"markers.orig\", cex = ptsze) addLegend(svmres, fcol = \"svm\", where = \"bottomright\", cex = .5)"},{"path":"https://lgatto.github.io/pRoloc/articles/v01-pRoloc-tutorial.html","id":"sec:bayes","dir":"Articles","previous_headings":"Data analysis","what":"Bayesian generative models","title":"Using pRoloc for spatial proteomics data analysis","text":"also offer generative models , opposed descriptive classifier presented , explicitly model spatial proteomics data. pRoloc, probose two models using T-augmented Gaussian mixtures using repectively Expectration-Maximisation approach maximum posteriori estimation model parameters (TAGM-MAP), MCMC approach (TAGM-MCMC) enables proteome-wide uncertainty quantitation. methods described pRoloc-bayesian vignette. details description methods validation, please refer (Crook et al. 2018).","code":""},{"path":"https://lgatto.github.io/pRoloc/articles/v01-pRoloc-tutorial.html","id":"sec:ssml","dir":"Articles","previous_headings":"Data analysis","what":"Semi-supervised ML","title":"Using pRoloc for spatial proteomics data analysis","text":"obvious original set markers initially used (ER, Golgi, mitochondrion, PM) biologically realistic representation organelle diversity. Manually finding markers however time consuming, requires careful verification annotation, possibly critical subsequent analysis, markers directly used training phase supervised ML approach. can seen PCA plots , inherent structure data can made use automate detection new clusters. phenoDisco algorithm (Breckels et al. 2013) iterative method, combines classification proteins known groups detection new clusters. available pRoloc though phenoDisco function. , interest time, phenoDisco executed vignette dynamically built. data object can located extdata direcoty loaded : results also appended featureData slot. plot2D function, can, previously, utilised visualise results, shown figure @ref(fig:pdres). Representation phenoDisco prediction cluster discovery results.","code":"pdres <- phenoDisco(tan2009r1, GS = 10, times = 100, fcol = \"PLSDA\") fn <- dir(system.file(\"extdata\", package = \"pRoloc\"), full.names = TRUE, pattern = \"pdres.rda\") load(fn) processingData(pdres) ## - - - Processing information - - - ## Combined [888,4] and [1,4] MSnSets Wed Feb 13 17:28:54 2013 ## Run phenoDisco using 'PLSDA': Wed Feb 13 17:28:54 2013 ## with parameters times=100, GS=10, p=0.05, r=1. ## MSnbase version: 1.5.13 tail(fvarLabels(pdres), 3) ## [1] \"PLSDA\" \"markers\" \"pd\" plot2D(pdres, fcol = \"pd\") addLegend(pdres, fcol = \"pd\", ncol = 2, where = \"bottomright\", cex = .5)"},{"path":"https://lgatto.github.io/pRoloc/articles/v01-pRoloc-tutorial.html","id":"sec:followup","dir":"Articles","previous_headings":"Data analysis","what":"Following up on novelty discovery","title":"Using pRoloc for spatial proteomics data analysis","text":"newly discovered phenotypes need carefully validated prior analysis. Indeed, structure data made use discovery algorithm, might represent peculiar structure data match biologically relevant groups. tan2009r1 data submitted careful phenodisco analysis validation (Breckels et al. 2013). results new, augmented marker set available pd.markers feature data. markers represent combined set original markers validated proteins new phenotypes. augmented set markers now employed repeat classification using support vector machine classifier. apply slightly different analysis described section @ref(sec:sml). code chunks , use class specific weights creating svm model; weights set inversely proportional class frequencies. , results pre-computed available extdata package directory. data visualised described previously, use svm classification -posteriori probability set point size. Classification results. results second round classification, using augmented set markers obtained using phenoDisco detailed (Breckels et al. 2013) weighted svm classifier.","code":"getMarkers(tan2009r1, fcol = \"pd.markers\") ## organelleMarkers ## Cytoskeleton ER Golgi Lysosome mitochondrion ## 7 20 6 8 14 ## Nucleus Peroxisome PM Proteasome Ribosome 40S ## 20 4 15 11 14 ## Ribosome 60S unknown ## 25 744 w <- classWeights(tan2009r1, fcol = \"pd.markers\") w ## ## Cytoskeleton ER Golgi Lysosome mitochondrion ## 0.14285714 0.05000000 0.16666667 0.12500000 0.07142857 ## Nucleus Peroxisome PM Proteasome Ribosome 40S ## 0.05000000 0.25000000 0.06666667 0.09090909 0.07142857 ## Ribosome 60S ## 0.04000000 params2 <- svmOptimisation(tan2009r1, fcol = \"pd.markers\", times = 10, xval = 5, class.weights = w, verbose = FALSE) fn <- dir(system.file(\"extdata\", package = \"pRoloc\"), full.names = TRUE, pattern = \"params2.rda\") load(fn) tan2009r1 <- svmClassification(tan2009r1, params2, class.weights = w, fcol = \"pd.markers\") ## [1] \"pd.markers\" ptsze <- exp(fData(tan2009r1)$svm.scores) - 1 plot2D(tan2009r1, fcol = \"svm\", cex = ptsze) addLegend(tan2009r1, fcol = \"svm\", where = \"bottomright\", ncol = 2, cex = .5)"},{"path":"https://lgatto.github.io/pRoloc/articles/v01-pRoloc-tutorial.html","id":"sec:ccl","dir":"Articles","previous_headings":"","what":"Conclusions","title":"Using pRoloc for spatial proteomics data analysis","text":"tutorial focuses practical aspects organelles proteomics data analysis using pRoloc. Two important aspects illustrates: (1) data generation, manipulation visualisation (2) application contemporary novel machine learning techniques. crucial parts full analysis pipeline covered raw mass-spectrometry quality control, quantitation, post-analysis data validation. Data analysis trivial task, general, one can assume --shelf algorithm perform well. , one emphasis software presented document allowing users track data processing critically evaluate results.","code":""},{"path":"https://lgatto.github.io/pRoloc/articles/v01-pRoloc-tutorial.html","id":"acknowledgement","dir":"Articles","previous_headings":"","what":"Acknowledgement","title":"Using pRoloc for spatial proteomics data analysis","text":"like thank Dr Daniel J.H. Nightingale, Dr Arnoud J. Groen, Dr Claire M. Mulvey Dr Andy Christoforou organelle marker contributions.","code":""},{"path":"https://lgatto.github.io/pRoloc/articles/v01-pRoloc-tutorial.html","id":"session-information","dir":"Articles","previous_headings":"","what":"Session information","title":"Using pRoloc for spatial proteomics data analysis","text":"software respective versions used produce document listed .","code":"## R version 4.4.1 (2024-06-14) ## Platform: x86_64-pc-linux-gnu ## Running under: Ubuntu 22.04.5 LTS ## ## Matrix products: default ## BLAS: /usr/lib/x86_64-linux-gnu/openblas-pthread/libblas.so.3 ## LAPACK: /usr/lib/x86_64-linux-gnu/openblas-pthread/libopenblasp-r0.3.20.so; LAPACK version 3.10.0 ## ## locale: ## [1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C ## [3] LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8 ## [5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8 ## [7] LC_PAPER=en_US.UTF-8 LC_NAME=C ## [9] LC_ADDRESS=C LC_TELEPHONE=C ## [11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C ## ## time zone: UTC ## tzcode source: system (glibc) ## ## attached base packages: ## [1] stats4 stats graphics grDevices utils datasets methods ## [8] base ## ## other attached packages: ## [1] class_7.3-22 pRolocdata_1.43.3 pRoloc_1.45.2 ## [4] BiocParallel_1.39.0 MLInterfaces_1.85.0 cluster_2.1.6 ## [7] annotate_1.83.0 XML_3.99-0.17 AnnotationDbi_1.67.0 ## [10] IRanges_2.39.2 MSnbase_2.31.1 ProtGenerics_1.37.1 ## [13] S4Vectors_0.43.2 mzR_2.39.2 Rcpp_1.0.13 ## [16] Biobase_2.65.1 BiocGenerics_0.51.3 knitr_1.48 ## [19] BiocStyle_2.33.1 ## ## loaded via a namespace (and not attached): ## [1] splines_4.4.1 filelock_1.0.3 ## [3] tibble_3.2.1 hardhat_1.4.0 ## [5] preprocessCore_1.67.1 pROC_1.18.5 ## [7] rpart_4.1.23 lifecycle_1.0.4 ## [9] httr2_1.0.5 doParallel_1.0.17 ## [11] globals_0.16.3 lattice_0.22-6 ## [13] MASS_7.3-61 MultiAssayExperiment_1.31.5 ## [15] dendextend_1.18.1 magrittr_2.0.3 ## [17] limma_3.61.12 plotly_4.10.4 ## [19] sass_0.4.9 rmarkdown_2.28 ## [21] jquerylib_0.1.4 yaml_2.3.10 ## [23] MsCoreUtils_1.17.2 DBI_1.2.3 ## [25] RColorBrewer_1.1-3 lubridate_1.9.3 ## [27] abind_1.4-8 zlibbioc_1.51.1 ## [29] GenomicRanges_1.57.2 purrr_1.0.2 ## [31] mixtools_2.0.0 AnnotationFilter_1.29.0 ## [33] nnet_7.3-19 rappdirs_0.3.3 ## [35] ipred_0.9-15 lava_1.8.0 ## [37] GenomeInfoDbData_1.2.13 listenv_0.9.1 ## [39] gdata_3.0.0 parallelly_1.38.0 ## [41] pkgdown_2.1.1.9000 ncdf4_1.23 ## [43] codetools_0.2-20 DelayedArray_0.31.14 ## [45] xml2_1.3.6 tidyselect_1.2.1 ## [47] farver_2.1.2 UCSC.utils_1.1.0 ## [49] viridis_0.6.5 matrixStats_1.4.1 ## [51] BiocFileCache_2.13.2 jsonlite_1.8.9 ## [53] caret_6.0-94 e1071_1.7-16 ## [55] survival_3.7-0 iterators_1.0.14 ## [57] systemfonts_1.1.0 foreach_1.5.2 ## [59] segmented_2.1-2 tools_4.4.1 ## [61] progress_1.2.3 ragg_1.3.3 ## [63] glue_1.8.0 prodlim_2024.06.25 ## [65] gridExtra_2.3 SparseArray_1.5.45 ## [67] xfun_0.48 MatrixGenerics_1.17.0 ## [69] GenomeInfoDb_1.41.2 dplyr_1.1.4 ## [71] withr_3.0.1 BiocManager_1.30.25 ## [73] fastmap_1.2.0 fansi_1.0.6 ## [75] digest_0.6.37 timechange_0.3.0 ## [77] R6_2.5.1 textshaping_0.4.0 ## [79] colorspace_2.1-1 gtools_3.9.5 ## [81] lpSolve_5.6.21 biomaRt_2.61.3 ## [83] RSQLite_2.3.7 utf8_1.2.4 ## [85] tidyr_1.3.1 generics_0.1.3 ## [87] hexbin_1.28.4 data.table_1.16.2 ## [89] recipes_1.1.0 FNN_1.1.4.1 ## [91] prettyunits_1.2.0 PSMatch_1.9.0 ## [93] httr_1.4.7 htmlwidgets_1.6.4 ## [95] S4Arrays_1.5.11 ModelMetrics_1.2.2.2 ## [97] pkgconfig_2.0.3 gtable_0.3.5 ## [99] timeDate_4041.110 blob_1.2.4 ## [101] impute_1.79.0 XVector_0.45.0 ## [103] htmltools_0.5.8.1 bookdown_0.41 ## [105] MALDIquant_1.22.3 clue_0.3-65 ## [107] scales_1.3.0 png_0.1-8 ## [109] gower_1.0.1 reshape2_1.4.4 ## [111] coda_0.19-4.1 nlme_3.1-166 ## [113] curl_5.2.3 proxy_0.4-27 ## [115] cachem_1.1.0 stringr_1.5.1 ## [117] parallel_4.4.1 mzID_1.43.0 ## [119] vsn_3.73.0 desc_1.4.3 ## [121] pillar_1.9.0 grid_4.4.1 ## [123] vctrs_0.6.5 pcaMethods_1.97.0 ## [125] randomForest_4.7-1.2 dbplyr_2.5.0 ## [127] xtable_1.8-4 evaluate_1.0.1 ## [129] mvtnorm_1.3-1 cli_3.6.3 ## [131] compiler_4.4.1 rlang_1.1.4 ## [133] crayon_1.5.3 future.apply_1.11.2 ## [135] labeling_0.4.3 LaplacesDemon_16.1.6 ## [137] mclust_6.1.1 QFeatures_1.15.3 ## [139] affy_1.83.1 plyr_1.8.9 ## [141] fs_1.6.4 stringi_1.8.4 ## [143] viridisLite_0.4.2 munsell_0.5.1 ## [145] Biostrings_2.73.2 lazyeval_0.2.2 ## [147] Matrix_1.7-0 hms_1.1.3 ## [149] bit64_4.5.2 future_1.34.0 ## [151] ggplot2_3.5.1 KEGGREST_1.45.1 ## [153] statmod_1.5.0 highr_0.11 ## [155] SummarizedExperiment_1.35.4 kernlab_0.9-33 ## [157] igraph_2.0.3 memoise_2.0.1 ## [159] affyio_1.75.1 bslib_0.8.0 ## [161] sampling_2.10 bit_4.5.0"},{"path":[]},{"path":"https://lgatto.github.io/pRoloc/articles/v02-pRoloc-ml.html","id":"sec:intro","dir":"Articles","previous_headings":"","what":"Introduction","title":"Machine learning techniques available in pRoloc","text":"general practical introduction pRoloc, readers referred tutorial, available using vignette(\"pRoloc-tutorial\", package = \"pRoloc\"). following document provides overview algorithms available package. respective section describe unsupervised machine learning (USML), supervised machine learning (SML), semi-supervised machine learning (SSML) implemented novelty detection algorithm transfer learning.","code":""},{"path":"https://lgatto.github.io/pRoloc/articles/v02-pRoloc-ml.html","id":"data-sets","dir":"Articles","previous_headings":"","what":"Data sets","title":"Machine learning techniques available in pRoloc","text":"provide 144 test data sets pRolocdata package can readily used pRoloc. data set can listed pRolocdata loaded data function. data set, including origin, individually documented. data sets distributed MSnSet instances. Briefly, dedicated containers quantitation data well feature sample meta-data. details MSnSets available pRoloc tutorial MSnbase package, defined class.","code":"library(\"pRolocdata\") data(tan2009r1) tan2009r1 ## MSnSet (storageMode: lockedEnvironment) ## assayData: 888 features, 4 samples ## element names: exprs ## protocolData: none ## phenoData ## sampleNames: X114 X115 X116 X117 ## varLabels: Fractions ## varMetadata: labelDescription ## featureData ## featureNames: P20353 P53501 ... P07909 (888 total) ## fvarLabels: FBgn Protein.ID ... markers.tl (16 total) ## fvarMetadata: labelDescription ## experimentData: use 'experimentData(object)' ## pubMedIds: 19317464 ## Annotation: ## - - - Processing information - - - ## Added markers from 'mrk' marker vector. Thu Jul 16 22:53:44 2015 ## MSnbase version: 1.17.12"},{"path":"https://lgatto.github.io/pRoloc/articles/v02-pRoloc-ml.html","id":"other-omics-data","dir":"Articles","previous_headings":"Data sets","what":"Other omics data","title":"Machine learning techniques available in pRoloc","text":"primary biological domain quantitative proteomics, special emphasis spatial proteomics, underlying class infrastructure pRoloc implemented Bioconductor MSnbase package enables conversion /transcriptomics data, particular microarray data available ExpressionSet objects using coercion methods (see MSnSet section MSnbase-development vignette). result, straightforward apply methods summarised detailed pRoloc vignettes data structures.","code":""},{"path":"https://lgatto.github.io/pRoloc/articles/v02-pRoloc-ml.html","id":"sec:usml","dir":"Articles","previous_headings":"","what":"Unsupervised machine learning","title":"Machine learning techniques available in pRoloc","text":"Unsupervised machine learning refers clustering, .e. finding structure quantitative, generally multi-dimensional data set unlabelled data. Currently, unsupervised clustering facilities available plot2D function MLInterfaces package (Carey et al., n.d.). former takes MSnSet instance represents data scatter plot along first two principal components. Arbitrary feature meta-data can represented using different colours point characters. reader referred manual page available ?plot2D details examples. pRoloc also implements MLean method MSnSet instances, allowing use relevant infrastructure organelle proteomics framework. Although provides common interface unsupervised numerous supervised algorithms, refer pRoloc tutorial usage several clustering algorithms. Note Current development efforts terms clustering described Clustering infrastructure wiki page (https://github.com/lgatto/pRoloc/wiki/Clustering-infrastructure) incorporated future version package.","code":""},{"path":"https://lgatto.github.io/pRoloc/articles/v02-pRoloc-ml.html","id":"sec:sml","dir":"Articles","previous_headings":"","what":"Supervised machine learning","title":"Machine learning techniques available in pRoloc","text":"Supervised machine learning refers broad family classification algorithms. algorithms learns modest set labelled data points called training data. training data example consists pair inputs: actual data, generally represented vector numbers class label, representing membership exactly 1 multiple possible classes. two possible classes, refers binary classification. training data used construct model can used classifier new, unlabelled examples. model takes numeric vectors unlabelled data points return, inputs, corresponding mapped class.","code":""},{"path":"https://lgatto.github.io/pRoloc/articles/v02-pRoloc-ml.html","id":"sec:algo","dir":"Articles","previous_headings":"Supervised machine learning","what":"Algorithms used","title":"Machine learning techniques available in pRoloc","text":"k-nearest neighbour (KNN) Function knn package class. row test set, k nearest (Euclidean distance) training set vectors found, classification decided majority vote k classes, ties broken random. simple algorithm often used baseline classifier. ties kth nearest vector, candidates included vote. Partial least square DA (PLS-DA) Function plsda package . Partial least square discriminant analysis used fit standard PLS model classification. Support vector machine (SVM) support vector machine constructs hyperplane (set hyperplanes multiple-class problem), used classification. best separation defined hyperplane largest distance (margin) nearest data points class, also reduces classification generalisation error. assure liner separation classes, data transformed using kernel function high-dimensional space, permitting liner separation classes. pRoloc makes use functions svm package ksvm . Artificial neural network (ANN) Function nnet package . Fits single-hidden-layer neural network, possibly skip-layer connections. Naive Bayes (NB) Function naiveBayes package . Naive Bayes classifier computes conditional -posterior probabilities categorical class variable given independent predictor variables using Bayes rule. Assumes independence predictor variables, Gaussian distribution (given target class) metric predictors. Random Forest (RF) Function randomForest package . Chi-square (χ2\\chi^2) Assignment based squared differences labelled marker new feature classified. Canonical protein correlation profile method (PCP) uses squared differences labelled marker new features. (Andersen et al. 2003), χ2\\chi^2 defined , .e. χ2=∑=1n(xi−mi)2n\\chi^{2} = \\frac{\\sum_{=1}^{n} (x_i - m_i)^{2}}{n}, whereas (Wiese et al. 2007) divide value squared value value reference feature fraction, .e. χ2=∑=1n(xi−mi)2mi\\chi^{2} = \\sum_{=1}^{n}\\frac{(x_i - m_i)^{2}}{m_i}, xix_i normalised intensity feature x fraction , mim_i normalised intensity marker m fraction n number fractions available. use former definition. PerTurbo (Courty, Burger, Laurent 2011): PerTurbo, original, non-parametric efficient classification method presented . framework, manifold class characterised Laplace-Beltrami operator, evaluated classical methods involving graph Laplacian. classification criterion established thanks measure magnitude spectrum perturbation operator. first experiments show good performances classical algorithms state---art. Moreover, measure derived efficient policy design sampling queries context active learning. Performances collected toy examples real world datasets assess qualities strategy. PerTurbo implementation comes pRoloc packages.","code":""},{"path":"https://lgatto.github.io/pRoloc/articles/v02-pRoloc-ml.html","id":"estimating-algorithm-parameters","dir":"Articles","previous_headings":"Supervised machine learning","what":"Estimating algorithm parameters","title":"Machine learning techniques available in pRoloc","text":"essential applying classification algorithms, wisely set algorithm parameters, can important effect classification. parameters example width sigma Radial Basis Function (Gaussian kernel) exp(−σ∥x−x′∥2)exp(-\\sigma \\| x - x' \\|^2 ) cost (slack) parameter (controlling tolerance mis-classification) SVM classifier. number neighbours k KNN classifier equally important discussed sections. next figure illustrates effect different choices kk using organelle proteomics data (Dunkley et al. 2006) (dunkley2006 pRolocdata). highlighted squared region, can see using low kk (k = 1 left) result specific classification boundaries precisely follow contour marker set opposed higher number neighbours (k = 8 right). one tempted believe optimised classification boundaries preferable, essential remember boundaries specific marker set used construct , absolutely reason expect regions faithfully separate new data points, particular proteins wish classify organelle. words, highly specific k = 1 classification boundaries -fitted marker set , words, lack generalisation new instances. demonstrate using simulated data taken (James et al. 2013) show detrimental effect -fitting new data. figure uses 2 x 100 simulated data points belonging either orange blue classes. genuine classes points known (solid lines) KNN algorithm applied using k = 1 (left) k = 100 (right) respectively (purple dashed lines). organelle proteomics examples, observe k = 1, decision boundaries overly flexible identify patterns data reflect correct boundaries (cases, classifier said low bias high variance). large k used, classifier becomes inflexible produces approximate nearly linear separation boundaries (classifier said low variance high bias). simulated data set, neither k = 1 k = 100 give good predictions test error rates (.e. proportion wrongly classified points) 0.1695 0.1925, respectively. quantify effect flexibility lack thereof defining classification boundaries, (James et al. 2013) calculate classification error rates using training data (training error rate) testing data (testing error rate). latter completely new data used assess model error rate defining algorithm parameters; one often says model used classification seen data. model performs well new data, said generalise well. quality required cases, particular organelle proteomics experiments training data corresponds marker sets. Figure @ref{fig:ISL2} plots respective training testing error rates function 1/k reflection flexibility/complexity model; 1/k = 1, .e. k = 1 (far right), flexible model risk -fitting. Greater values k (towards left) characterise less flexible models. can seen, high values k produce poor performance training testing data. However, training error steadily decreases model complexity increases (smaller k), testing error rate displays typical U-shape: value around k = 10, testing error rate reaches minimum starts increase due -fitting training data lack generalisation model. results show adequate optimisation model parameters essential avoid either flexible models (generalise well new data) models describe decision boundaries adequately. parameter selection achieved cross validation, initial marker proteins separated training data used build classification models independent testing data used assess model new data. recommend book Introduction Statistical Learning (http://www-bcf.usc.edu/~gareth/ISL/) (James et al. 2013) detailed introduction machine learning.","code":""},{"path":"https://lgatto.github.io/pRoloc/articles/v02-pRoloc-ml.html","id":"default-analysis-scheme","dir":"Articles","previous_headings":"Supervised machine learning","what":"Default analysis scheme","title":"Machine learning techniques available in pRoloc","text":", present typical classification analysis using pRoloc. analysis typically consists two steps. first one optimise classifier parameters used training testing (see ). range parameters tested using labelled data, labels known. set parameters, hide labels subset labelled data use part train model apply testing data hidden labels. comparison estimated expected labels enables assess validity model hence adequacy parameters. adequate parameters identified, used infer model complete organelle marker set used infer sub-cellular location unlabelled examples.","code":""},{"path":"https://lgatto.github.io/pRoloc/articles/v02-pRoloc-ml.html","id":"parameter-optimisation","dir":"Articles","previous_headings":"Supervised machine learning","what":"Parameter optimisation","title":"Machine learning techniques available in pRoloc","text":"Algorithmic performance estimated using stratified 20/80 partitioning. 80% partitions subjected 5-fold cross-validation order optimise free parameters via grid search, parameters applied remaining 20%. procedure repeated n = 100 times sample n accuracy metrics (see ) values using n, possibly different, optimised parameters evaluation. Models accuracy evaluated using F1 score, F1=2precision×recallprecision+recallF1 = 2 ~ \\frac{precision \\times recall}{precision + recall}, calculated harmonic mean precision (precision=tptp+fpprecision = \\frac{tp}{tp+fp}, measure exactness – returned output relevant result) recall (recall=tptp+fnrecall=\\frac{tp}{tp+fn}, measure completeness – indicating much missed output). aiming high generalisation accuracy, .e high F1F1, indicating marker proteins test data set consistently correctly assigned algorithms. results optimisation procedure stored GenRegRes object can inspected, plotted best parameter pairs can extracted. given algorithm alg, corresponding parameter optimisation function names algOptimisation , equivalently, algOptimization. See table details. description respective model parameters provided optimisation function manuals, available ?algOptimisation.","code":"params <- svmOptimisation(tan2009r1, times = 10, xval = 5, verbose = FALSE) params ## Object of class \"GenRegRes\" ## Algorithm: svm ## Hyper-parameters: ## cost: 0.0625 0.125 0.25 0.5 1 2 4 8 16 ## sigma: 0.001 0.01 0.1 1 10 100 ## Design: ## Replication: 10 x 5-fold X-validation ## Partitioning: 0.2/0.8 (test/train) ## Results ## macro F1: ## Min. 1st Qu. Median Mean 3rd Qu. Max. ## 0.7804 0.8085 0.8211 0.8412 0.8842 0.9385 ## best sigma: 0.1 1 ## best cost: 8 16 2 1 ## Use getWarnings() to see warnings."},{"path":"https://lgatto.github.io/pRoloc/articles/v02-pRoloc-ml.html","id":"classification","dir":"Articles","previous_headings":"Supervised machine learning","what":"Classification","title":"Machine learning techniques available in pRoloc","text":"","code":"tan2009r1 <- svmClassification(tan2009r1, params) ## [1] \"markers\" tan2009r1 ## MSnSet (storageMode: lockedEnvironment) ## assayData: 888 features, 4 samples ## element names: exprs ## protocolData: none ## phenoData ## sampleNames: X114 X115 X116 X117 ## varLabels: Fractions ## varMetadata: labelDescription ## featureData ## featureNames: P20353 P53501 ... P07909 (888 total) ## fvarLabels: FBgn Protein.ID ... svm.scores (18 total) ## fvarMetadata: labelDescription ## experimentData: use 'experimentData(object)' ## pubMedIds: 19317464 ## Annotation: ## - - - Processing information - - - ## Added markers from 'mrk' marker vector. Thu Jul 16 22:53:44 2015 ## Performed svm prediction (sigma=1 cost=2) Fri Oct 18 17:22:49 2024 ## MSnbase version: 1.17.12"},{"path":"https://lgatto.github.io/pRoloc/articles/v02-pRoloc-ml.html","id":"customising-model-parameters","dir":"Articles","previous_headings":"Supervised machine learning","what":"Customising model parameters","title":"Machine learning techniques available in pRoloc","text":"illustrate weight different classes according number labelled instances, large sets weighted. strategy can help imbalanced designs.","code":"w <- table(fData(markerMSnSet(dunkley2006))$markers) wpar <- svmOptimisation(dunkley2006, class.weights = w) wres <- svmClassification(dunkley2006, wpar, class.weights = w)"},{"path":"https://lgatto.github.io/pRoloc/articles/v02-pRoloc-ml.html","id":"comparison-of-different-classifiers","dir":"Articles","previous_headings":"","what":"Comparison of different classifiers","title":"Machine learning techniques available in pRoloc","text":"Several supervised machine learning algorithms already applied organelle proteomics data classification: partial least square discriminant analysis (Dunkley et al. 2006, Tan2009), support vector machines (SVMs) (Trotter et al. 2010), random forest (Ohta et al. 2010), neural networks (Tardif et al. 2012), naive Bayes (Nikolovski et al. 2012). HUPO 2011 poster1, show different classification algorithms provide similar performance. extended comparison various datasets distributed pRolocdata package. figure @ref{fig:f1box}, illustrate different algorithms reach similar performances test datasets.","code":""},{"path":"https://lgatto.github.io/pRoloc/articles/v02-pRoloc-ml.html","id":"sec:bayes","dir":"Articles","previous_headings":"","what":"Bayesian generative models","title":"Machine learning techniques available in pRoloc","text":"also offer generative models , opposed descriptive classifier presented , explicitly model spatial proteomics data. pRoloc, probose two models using T-augmented Gaussian mixtures using repectively Expectration-Maximisation approach maximum posteriori estimation model parameters (TAGM-MAP), MCMC approach (TAGM-MCMC) enables proteome-wide uncertainty quantitation. methods described pRoloc-bayesian vignette. details description methods validation, please refer (Crook et al. 2018): Bayesian Mixture Modelling Approach Spatial Proteomics Oliver M Crook, Claire M Mulvey, Paul D. W. Kirk, Kathryn S Lilley, Laurent Gatto bioRxiv 282269; doi: https://doi.org/10.1101/282269","code":""},{"path":"https://lgatto.github.io/pRoloc/articles/v02-pRoloc-ml.html","id":"sec:ssml","dir":"Articles","previous_headings":"","what":"Semi-supervised machine learning","title":"Machine learning techniques available in pRoloc","text":"phenoDisco algorithm semi-supervised novelty detection method (Lisa M. Breckels et al. 2013) (figure ). uses labelled (.e. markers, noted DLD_L) unlabelled (.e. proteins unknown localisation, noted DUD_U) sets input data. algorithm repeated NN times (times argument phenoDisco function). iteration, organelle class DLiD_{L}^{} unlabelled complement clustered using Gaussian mixture modelling. unlabelled members systematically cluster DLiD_{L}^{} pass outlier detection labelled new putative members class ii, example DUD_U merged DLiD_{L}^{} consistently clustered together throughout NN iterations considered members new phenotype.","code":""},{"path":"https://lgatto.github.io/pRoloc/articles/v02-pRoloc-ml.html","id":"sec:tl","dir":"Articles","previous_headings":"","what":"Transfer learning","title":"Machine learning techniques available in pRoloc","text":"multiple sources data available, often beneficial take several account aim increasing information tackle problem interest. times possible combine different sources data, can lead substantially harm performance analysis different data sources variable signal--noise ratio data drawn different domains recorded different encoding (quantitative binary, example). defined following two data source primary data, high signal--noise ratio, general available limited amounts; auxiliary data, limited signal--noise, available large amounts; , transfer learning algorithm efficiently support/complement primary target domain auxiliary data features without compromising integrity primary data. developed transfer learning framework (L. M. Breckels et al. 2016) applied analysis spatial proteomics data, described pRoloc-transfer-learning vignette.","code":""},{"path":"https://lgatto.github.io/pRoloc/articles/v02-pRoloc-ml.html","id":"session-information","dir":"Articles","previous_headings":"","what":"Session information","title":"Machine learning techniques available in pRoloc","text":"software respective versions used produce document listed .","code":"## R version 4.4.1 (2024-06-14) ## Platform: x86_64-pc-linux-gnu ## Running under: Ubuntu 22.04.5 LTS ## ## Matrix products: default ## BLAS: /usr/lib/x86_64-linux-gnu/openblas-pthread/libblas.so.3 ## LAPACK: /usr/lib/x86_64-linux-gnu/openblas-pthread/libopenblasp-r0.3.20.so; LAPACK version 3.10.0 ## ## locale: ## [1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C ## [3] LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8 ## [5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8 ## [7] LC_PAPER=en_US.UTF-8 LC_NAME=C ## [9] LC_ADDRESS=C LC_TELEPHONE=C ## [11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C ## ## time zone: UTC ## tzcode source: system (glibc) ## ## attached base packages: ## [1] stats4 stats graphics grDevices utils datasets methods ## [8] base ## ## other attached packages: ## [1] pRolocdata_1.43.3 pRoloc_1.45.2 BiocParallel_1.39.0 ## [4] MLInterfaces_1.85.0 cluster_2.1.6 annotate_1.83.0 ## [7] XML_3.99-0.17 AnnotationDbi_1.67.0 IRanges_2.39.2 ## [10] MSnbase_2.31.1 ProtGenerics_1.37.1 S4Vectors_0.43.2 ## [13] mzR_2.39.2 Rcpp_1.0.13 Biobase_2.65.1 ## [16] BiocGenerics_0.51.3 knitr_1.48 BiocStyle_2.33.1 ## ## loaded via a namespace (and not attached): ## [1] splines_4.4.1 filelock_1.0.3 ## [3] tibble_3.2.1 hardhat_1.4.0 ## [5] preprocessCore_1.67.1 pROC_1.18.5 ## [7] rpart_4.1.23 lifecycle_1.0.4 ## [9] httr2_1.0.5 doParallel_1.0.17 ## [11] globals_0.16.3 lattice_0.22-6 ## [13] MASS_7.3-61 MultiAssayExperiment_1.31.5 ## [15] dendextend_1.18.1 magrittr_2.0.3 ## [17] limma_3.61.12 plotly_4.10.4 ## [19] sass_0.4.9 rmarkdown_2.28 ## [21] jquerylib_0.1.4 yaml_2.3.10 ## [23] MsCoreUtils_1.17.2 DBI_1.2.3 ## [25] RColorBrewer_1.1-3 lubridate_1.9.3 ## [27] abind_1.4-8 zlibbioc_1.51.1 ## [29] GenomicRanges_1.57.2 purrr_1.0.2 ## [31] mixtools_2.0.0 AnnotationFilter_1.29.0 ## [33] nnet_7.3-19 rappdirs_0.3.3 ## [35] ipred_0.9-15 lava_1.8.0 ## [37] GenomeInfoDbData_1.2.13 listenv_0.9.1 ## [39] gdata_3.0.0 parallelly_1.38.0 ## [41] pkgdown_2.1.1.9000 ncdf4_1.23 ## [43] codetools_0.2-20 DelayedArray_0.31.14 ## [45] xml2_1.3.6 tidyselect_1.2.1 ## [47] UCSC.utils_1.1.0 viridis_0.6.5 ## [49] matrixStats_1.4.1 BiocFileCache_2.13.2 ## [51] jsonlite_1.8.9 caret_6.0-94 ## [53] e1071_1.7-16 survival_3.7-0 ## [55] iterators_1.0.14 systemfonts_1.1.0 ## [57] foreach_1.5.2 segmented_2.1-2 ## [59] tools_4.4.1 progress_1.2.3 ## [61] ragg_1.3.3 glue_1.8.0 ## [63] prodlim_2024.06.25 gridExtra_2.3 ## [65] SparseArray_1.5.45 xfun_0.48 ## [67] MatrixGenerics_1.17.0 GenomeInfoDb_1.41.2 ## [69] dplyr_1.1.4 withr_3.0.1 ## [71] BiocManager_1.30.25 fastmap_1.2.0 ## [73] fansi_1.0.6 digest_0.6.37 ## [75] timechange_0.3.0 R6_2.5.1 ## [77] textshaping_0.4.0 colorspace_2.1-1 ## [79] gtools_3.9.5 lpSolve_5.6.21 ## [81] biomaRt_2.61.3 RSQLite_2.3.7 ## [83] utf8_1.2.4 tidyr_1.3.1 ## [85] generics_0.1.3 hexbin_1.28.4 ## [87] data.table_1.16.2 recipes_1.1.0 ## [89] FNN_1.1.4.1 class_7.3-22 ## [91] prettyunits_1.2.0 PSMatch_1.9.0 ## [93] httr_1.4.7 htmlwidgets_1.6.4 ## [95] S4Arrays_1.5.11 ModelMetrics_1.2.2.2 ## [97] pkgconfig_2.0.3 gtable_0.3.5 ## [99] timeDate_4041.110 blob_1.2.4 ## [101] impute_1.79.0 XVector_0.45.0 ## [103] htmltools_0.5.8.1 bookdown_0.41 ## [105] MALDIquant_1.22.3 clue_0.3-65 ## [107] scales_1.3.0 png_0.1-8 ## [109] gower_1.0.1 reshape2_1.4.4 ## [111] coda_0.19-4.1 nlme_3.1-166 ## [113] curl_5.2.3 proxy_0.4-27 ## [115] cachem_1.1.0 stringr_1.5.1 ## [117] parallel_4.4.1 mzID_1.43.0 ## [119] vsn_3.73.0 desc_1.4.3 ## [121] pillar_1.9.0 grid_4.4.1 ## [123] vctrs_0.6.5 pcaMethods_1.97.0 ## [125] randomForest_4.7-1.2 dbplyr_2.5.0 ## [127] xtable_1.8-4 evaluate_1.0.1 ## [129] mvtnorm_1.3-1 cli_3.6.3 ## [131] compiler_4.4.1 rlang_1.1.4 ## [133] crayon_1.5.3 future.apply_1.11.2 ## [135] LaplacesDemon_16.1.6 mclust_6.1.1 ## [137] QFeatures_1.15.3 affy_1.83.1 ## [139] plyr_1.8.9 fs_1.6.4 ## [141] stringi_1.8.4 viridisLite_0.4.2 ## [143] munsell_0.5.1 Biostrings_2.73.2 ## [145] lazyeval_0.2.2 Matrix_1.7-0 ## [147] hms_1.1.3 bit64_4.5.2 ## [149] future_1.34.0 ggplot2_3.5.1 ## [151] KEGGREST_1.45.1 statmod_1.5.0 ## [153] SummarizedExperiment_1.35.4 kernlab_0.9-33 ## [155] igraph_2.0.3 memoise_2.0.1 ## [157] affyio_1.75.1 bslib_0.8.0 ## [159] sampling_2.10 bit_4.5.0"},{"path":[]},{"path":"https://lgatto.github.io/pRoloc/articles/v04-pRoloc-goannotations.html","id":"foreword","dir":"Articles","previous_headings":"","what":"Foreword","title":"Annotating spatial proteomics data","text":"document walks users typical pipeline adding annotation information spatial proteomics data. general practical introduction pRoloc spatial proteomics data analysis, readers referred tutorial, available using vignette(\"pRoloc-tutorial\", package = \"pRoloc\").","code":""},{"path":"https://lgatto.github.io/pRoloc/articles/v04-pRoloc-goannotations.html","id":"introduction","dir":"Articles","previous_headings":"","what":"Introduction","title":"Annotating spatial proteomics data","text":"Exploring protein annotations defining sub-cellular localisation markers (.e. known residents specific sub-cellular niche species, condition interest) play important roles analysis spatial proteomics data. latter essential downstream supervised machine learning (ML) classification protein localisation prediction (see vignette(\"pRoloc-tutorial\", package = \"pRoloc\") vignette(\"pRoloc-ml\", package = \"pRoloc\") information available ML methods) former interesting initial biological interpretation matching annotations data structure. Robust protein-localisation prediction reliant markers reflect true sub-cellular diversity multivariate data. validity markers generally assured expert curation. can time consuming difficult owing limited number marker proteins exist databases elsewhere. Gene Ontology (GO) database, particular cellular compartment (CC) namespace provide good starting point protein annotation marker definition. Nevertheless, automatic extraction databases, particular GO CC, first step sub-cellular localisation analysis requires additional curation counter unreliable annotation based data inaccurate context biological question investigation. facilitate , developed annotation retrieval management system provides flexible framework exploration sub-cellular proteomics data. developed method correlate annotation information multivariate data space identify densely annotated regions assess cluster tightness. Given set proteins share property e.g. specified GO term, k-means clustering used fit data (testing k = 1:5) number k components tested, pairwise Euclidean distances calculated per component, normalised. minimum mean normalised distance extracted used measure cluster tightness. repeated protein/annotation sets. sets ranked according minimum mean normalised distance can displayed explored using pRolocGUI package. vignette present step--step guide showing users (1) add protein annotations, use GO database example, (2) rank order information (e.g. GO terms) according correlation data structure, extraction optimal data specific annotated clusters.","code":""},{"path":"https://lgatto.github.io/pRoloc/articles/v04-pRoloc-goannotations.html","id":"loading-the-data","dir":"Articles","previous_headings":"","what":"Loading the data","title":"Annotating spatial proteomics data","text":"demonstrate pipeline adding ranking annotation information using LOPIT experiment Pluripotent Mouse Embryonic stems (Christoforou et al 2016), available documented pRolocdata data package hyperlopit2015.","code":"library(\"pRoloc\") library(\"pRolocdata\") ## Subset data for markers for example data(\"hyperLOPIT2015\") hyperLOPIT2015 <- markerMSnSet(hyperLOPIT2015)"},{"path":"https://lgatto.github.io/pRoloc/articles/v04-pRoloc-goannotations.html","id":"adding-sub-cellular-localisation-information","dir":"Articles","previous_headings":"","what":"Adding sub-cellular localisation information","title":"Annotating spatial proteomics data","text":"GO terms associated proteins appear dataset retrieved used create binary matrix 1 (0) position (,j)(,j) indicates term jj () used annotate feature ii. matrix appended stored feature data slot MSnSet dataset using addGoAnnotations function. first however need prepare annotation parameters enable us query Biomart repository using package, able retrieve GO terms. specific Biomart repository query depend species study type features. can set using setAnnotationParams function. code chunk set annotation parameters hyperLOPIT2015 dataset. species used mouse featureNames hyperLOPIT2015 dataset Uniprot accession numbers input function defined inputs = c(\"Mus musculus\", \"UniProtKB/Swiss-Prot ID\"). See ?setAnnotationParams details. Now parameters search defined can use addGoAnnotations function add GO information matrix featureData slot dataset. addGoAnnotations function takes MSnSet instance input (featureNames extracted) downloads CC terms (default, biological process molecular function namespaces also supported) found protein dataset. output MSnSet CC term binary matrix appended fData, default called GOAnnotations (changed using fcol argument). addGoAnnotations function defualt filtering terms evidence codes unless specified evidence argument, see ?addGoAnnotations details. many well-annotated species datasets containing typically thousands proteins, often find many CC terms, many may particularly meaningful. terms can filtered using filerMinMarkers filterMaxMarkers functions.","code":"params <- setAnnotationParams(inputs = c(\"Mouse genes\", \"UniProtKB/Swiss-Prot ID\")) ## Using species Mouse genes (GRCm39) ## Warning: Ensembl will soon enforce the use of https. ## Ensure the 'host' argument includes \"https://\" ## Using feature type UniProtKB/Swiss-Prot ID(s) [e.g. A0A087WPF7] ## Connecting to Biomart... ## Warning: Ensembl will soon enforce the use of https. ## Ensure the 'host' argument includes \"https://\" cc <- addGoAnnotations(hyperLOPIT2015, params, namespace = \"cellular_component\") fvarLabels(cc) ## [1] \"entry.name\" \"protein.description\" ## [3] \"peptides.rep1\" \"peptides.rep2\" ## [5] \"psms.rep1\" \"psms.rep2\" ## [7] \"phenodisco.input\" \"phenodisco.output\" ## [9] \"curated.phenodisco.output\" \"markers\" ## [11] \"svm.classification\" \"svm.score\" ## [13] \"svm.top.quartile\" \"final.assignment\" ## [15] \"first.evidence\" \"curated.organelles\" ## [17] \"cytoskeletal.components\" \"trafficking.proteins\" ## [19] \"protein.complexes\" \"signalling.cascades\" ## [21] \"oct4.interactome\" \"nanog.interactome\" ## [23] \"sox2.interactome\" \"cell.surface.proteins\" ## [25] \"markers2015\" \"TAGM\" ## [27] \"GOAnnotations\" ## Next we filter the GO term matrix removing any terms that have ## have less than `n` proteins or greater than `p` % of total proteins ## in the dataset (this removes terms that only have very few proteins ## and very general terms) cc <- filterMinMarkers(cc) cc <- filterMaxMarkers(cc)"},{"path":"https://lgatto.github.io/pRoloc/articles/v04-pRoloc-goannotations.html","id":"correlating-and-ordering-annotation-information","dir":"Articles","previous_headings":"","what":"Correlating and ordering annotation information","title":"Annotating spatial proteomics data","text":"Now extracted filtered annotation information dataset re-order GOAnnotations matrix terms according correlation dataset structure. use orderGoAnnotations function. piece annotation information, e.g. GO CC term matrix, function: Extracts instances (proteins) specified term Fits k component clusters subset using kmeans algorithm (default test k = 1:5). Calculates pairwise Euclidean distances per component cluster Normalises component cubed root number instances per component (set heuristically individual tests can set using argument p) Orders annotation information GOAnnotations according minimum normalised Euclidean distance. find high density clusters low mean normalised Euclidean distances. chunk test try fitting k = 1:3 component clusters per term normalise p = 1/3. ordered terms can displayed using pRolocVis function pRolocGUI package.","code":"## Extract markers can use n to specify to select top n terms res <- orderGoAnnotations(cc, k = 1:3, p = 1/3, verbose = FALSE) ## Calculating GO cluster densities library(\"pRolocGUI\") pRolocVis(res, fcol = \"GOAnnotations\")"},{"path":"https://lgatto.github.io/pRoloc/articles/v04-pRoloc-goannotations.html","id":"examining-distances","dir":"Articles","previous_headings":"Correlating and ordering annotation information","what":"Examining distances","title":"Annotating spatial proteomics data","text":"Instead using orderGoAnnotations function wrapper steps 1 - 5 , possible calculate Euclidean distances manually using clustDist function. input MSnSet dataset matrix markers e.g. GOAnnotations appended fData slot. output \"ClustDistList\". \"ClustDist\" \"ClustDistList\" class summarises algorithm information number k’s tested kmeans, mean normalised pairwise Euclidean distances per numer component clusters tested. can use plotClustDist plotComponents visualise results. output plotClustDist boxplot normalised distances per term output plotComponents set principal components analysis (PCA) plots, one k tested, highlighting component clusters found according kmeans algorithm. getNormDist function can used extract vector normalised distances. can used rank order terms GOAnnotations matrix, per code chunk . Finally, can use pRolocVis function pRolocGUI visualise clusters.","code":"## Now calculate distances dd <- clustDist(cc, fcol = \"GOAnnotations\", k = 1:3, verbose = FALSE) dd[[1]] ## Object of class \"ClustDist\" ## fcol = GOAnnotations ## term = GO:0005856 ## id = cytoskeleton ## nrow = 32 ## k's tested: 1 2 3 ## Size: 32 ## Size: 24 ## Size: 11, 15 ## Clusters info: ## ks.mean mean ks.norm norm ## k = 1 1 0.4208 1 0.13253 ## k = 2 1 *0.2104 1 *0.07293 ## k = 3 2 0.2181 2 0.09381 ## Plot normalised distances plot(dd, p = 1/3) ## Examine kmeans clustering plot(dd[[1]], cc) ## Normalise by n^1/3 minDist <- getNormDist(dd, p = 1/3) ## Get new order according to lowest distance o <- order(minDist) ## Re-order `GOAnnotations` matrix in `fData` fData(cc)$GOAnnotations <- fData(cc)$GOAnnotations[, o] pRolocVis(cc, fcol = \"GOAnnotations\")"},{"path":"https://lgatto.github.io/pRoloc/articles/v05-pRoloc-transfer-learning.html","id":"sec:intro","dir":"Articles","previous_headings":"","what":"Introduction","title":"A transfer learning algorithm for spatial proteomics","text":"main data source study protein sub-cellular localisation high-throughput mass spectrometry-based experiments LOPIT, PCP similar designs (see (Gatto et al. 2010) general introduction). Recent optimised experiments result high quality data enabling identification 6000 proteins discriminate numerous sub-cellular sub-organellar niches (Christoforou et al. 2016). Supervised semi-supervised machine learning algorithms can applied assign thousands proteins annotated sub-cellular niches (Lisa M. Breckels et al. 2013, Gatto:2014) (see also pRoloc-tutorial vignette). data constitute main source protein localisation termed thereafter primary data. sources data sub-cellular localisation proteins, Gene Ontology (Ashburner et al. 2000) (particular cellular compartment name space), quantitative features derived protein sequences (pseudo amino acid composition) Human Protein Atlas (Uhlen et al. 2010) cite . data, optimised specific system hand , case annotation feature, reliable experimental data, constitute invaluable, often plentiful source auxiliary information. aim transfer learning algorithm combine different sources data improve overall classification. particular, goal support/complement primary target domain (experimental data) auxiliary data (annotation) features without compromising integrity primary data. vignette, describe application transfer learning algorithms localisation proteins pRoloc package, described Breckels LM, Holden S, Wonjar D, Mulvey CM, Christoforou , Groen , Trotter MW, Kohlbacker O, Lilley KS Gatto L (2016). Learning heterogeneous data sources: application spatial proteomics. PLoS Comput Biol 13;12(5):e1004920. doi: 10.1371/journal.pcbi.1004920. Two algorithms developed: transfer learning algorithm based kk-nearest neighbour classifier, coined kNN-TL hereafter, described section @ref(sec:knntl), one based support vector machine algorithm, termed SVM-TL, described section @ref(sec:svmtl).","code":"library(\"pRoloc\")"},{"path":[]},{"path":"https://lgatto.github.io/pRoloc/articles/v05-pRoloc-transfer-learning.html","id":"sec:goaux","dir":"Articles","previous_headings":"Preparing the auxiliary data","what":"The Gene Ontology","title":"A transfer learning algorithm for spatial proteomics","text":"auxiliary data prepared primary data’s features. GO terms associated features retrieved used create binary matrix one (zero) position (,j)(,j) indicates term jj () used annotate feature ii. GO terms retrieved appropriate repository using biomaRt package. specific Biomart repository query depend species study type features. first step prepare annotation parameters enable perform query. pRoloc package provides dedicated infrastructure set query annotation resource prepare GO data subsequent analyses. infrastructure composed : define annotation parameters based species feature types; query resource defined (1) retrieve relevant terms use terms prepare auxiliary data. demonstrate steps using LOPIT experiment Human Embryonic Kidney (HEK293T) fibroblast cells (Lisa M. Breckels et al. 2013), available documented pRolocdata experiment package andy2011.","code":"library(\"pRolocdata\") data(andy2011)"},{"path":"https://lgatto.github.io/pRoloc/articles/v05-pRoloc-transfer-learning.html","id":"sec:ap","dir":"Articles","previous_headings":"Preparing the auxiliary data > The Gene Ontology","what":"Preparing the query parameters","title":"A transfer learning algorithm for spatial proteomics","text":"query parameters stored AnnotationParams objects created setAnnotationParams function. function present first menu 486. species selected, set possible identifier types displayed. also possible pass patterns match species (\"Human genes\") feature type (\"UniProtKB/Swiss-prot ID\"). setAnnotationParams function automatically sets annotation parameters globally ap object need explicitly set later . default parameters can retrieved getAnnotationParams.","code":"ap <- setAnnotationParams(inputs = c(\"Human genes\", \"UniProtKB/Swiss-Prot ID\")) ## Using species Human genes (GRCh38.p13) ## Warning: Ensembl will soon enforce the use of https. ## Ensure the 'host' argument includes \"https://\" ## Using feature type UniProtKB/Swiss-Prot ID(s) [e.g. A0A024R1R8] ## Connecting to Biomart... ## Warning: Ensembl will soon enforce the use of https. ## Ensure the 'host' argument includes \"https://\" ap ## Object of class \"AnnotationParams\" ## Using the 'ENSEMBL_MART_ENSEMBL' BioMart database ## Using the 'hsapiens_gene_ensembl' dataset ## Using 'uniprotswissprot' as filter ## Created on Fri Oct 18 17:23:42 2024"},{"path":"https://lgatto.github.io/pRoloc/articles/v05-pRoloc-transfer-learning.html","id":"sec:auxgo","dir":"Articles","previous_headings":"Preparing the auxiliary data > The Gene Ontology","what":"Preparing the auxiliary data from the GO ontology","title":"A transfer learning algorithm for spatial proteomics","text":"feature names andy2011 data UniProt identifiers, defined ap accession parameters. makeGoSet function takes MSnSet class (feature names extracted) , directly vector characters containing feature names interest retrieve associated GO terms construct auxiliary MSnSet. default, downloads cellular component terms filtering terms evidence codes (see makeGoSet manual details). Unless passed argument, default, globally set AnnotationParams used define Biomart server query. now primary data set, composed 1371 protein quantitative profiles 8 fractions along density gradient auxiliary data set 918 cellular compartment GO terms 1371 features.","code":"data(andy2011) head(featureNames(andy2011)) ## [1] \"O00767\" \"P51648\" \"Q2TAA5\" \"Q9UKV5\" \"Q12797\" \"P16615\" andygoset <- makeGoSet(andy2011) andygoset ## MSnSet (storageMode: lockedEnvironment) ## assayData: 1371 features, 918 samples ## element names: exprs ## protocolData: none ## phenoData: none ## featureData ## featureNames: O00767 P51648 ... O75312 (1371 total) ## fvarLabels: Accession.No. Protein.Description ... ## UniProtKB.entry.name (10 total) ## fvarMetadata: labelDescription ## experimentData: use 'experimentData(object)' ## Annotation: ## - - - Processing information - - - ## Constructed GO set using cellular_component namespace [Fri Oct 18 17:23:45 2024] ## MSnbase version: 2.31.1 exprs(andygoset)[1:7, 1:4] ## GO:0016020 GO:0005783 GO:0005789 GO:0005730 ## O00767 1 1 1 1 ## P51648 1 1 1 0 ## Q2TAA5 1 1 1 0 ## Q9UKV5 1 1 1 0 ## Q12797 1 1 1 0 ## P16615 1 1 1 0 ## Q96SQ9 1 1 1 0"},{"path":"https://lgatto.github.io/pRoloc/articles/v05-pRoloc-transfer-learning.html","id":"sec:annotrepro","dir":"Articles","previous_headings":"Preparing the auxiliary data > The Gene Ontology","what":"A note on reproducibility","title":"A transfer learning algorithm for spatial proteomics","text":"generation auxiliary data relies specific Biomart server Mart instances AnnotationParams class actual query server obtain GO terms associated features. utilisation online servers, undergo regular updates, guarantee reproducibility feature/term association time. recommended save store AnnotationParams auxiliary MSnSet instances. Alternatively, possible use Bioconductor infrastructure, specific organism annotations GO.db package use specific versioned (thus traceable) annotations.","code":""},{"path":"https://lgatto.github.io/pRoloc/articles/v05-pRoloc-transfer-learning.html","id":"sec:hpaaux","dir":"Articles","previous_headings":"Preparing the auxiliary data","what":"The Human Protein Atlas","title":"A transfer learning algorithm for spatial proteomics","text":"feature names LOPIT experiment UniProt identifiers, Human Protein Atlas uses Ensembl gene identifiers. first code chunk matches identifier types using Ensembl Biomart server left_join dplyr package. section, copy experimental data andyhpa. , deparse multiple ‘;’-delimited locations contained Human Protein sub-cellular Atlas, create auxiliary binary data matrix (localisations reliability equal Supportive considered; Uncertain assignments ignored - see http://www.proteinatlas.org//antibody+validation details) filter proteins without localisation data.","code":"andyhpa <- andy2011 fvarLabels(andyhpa)[1] <- \"accession\" ## for left_join matching ## convert protein accession numbers to ensembl gene identifiers library(\"biomaRt\") mart <- useMart(\"ensembl\", dataset = \"hsapiens_gene_ensembl\") filter <- \"uniprotswissprot\" attrib <- c(\"uniprot_gn_symbol\", \"uniprotswissprot\", \"ensembl_gene_id\") bm <- getBM(attributes = attrib, filters = filter, values = fData(andyhpa)[, \"accession\"], mart = mart) head(bm) ## uniprot_gn_symbol uniprotswissprot ensembl_gene_id ## 1 ESYT2 A0FGR8 ENSG00000117868 ## 2 ILVBL A1L0T0 ENSG00000105135 ## 3 NBAS A2RRP1 ENSG00000151779 ## 4 MTMR11 A4FU01 ENSG00000014914 ## 5 C2orf72 A6NCS6 ENSG00000204128 ## 6 RTL1 A6NKG5 ENSG00000254656 ## HPA data library(\"hpar\") ## This is hpar version 1.47.0, ## based on the Human Protein Atlas ## Version: 21.1 ## Release data: 2022.05.31 ## Ensembl build: 103.38 ## See '?hpar' or 'vignette('hpar')' for details. ## using old version for traceability hpa <- hpar::hpaSubcellularLoc14() ## see ?hpar and browseVignettes('hpar') for documentation ## loading from cache hpa$Reliability <- droplevels(hpa$Reliability) colnames(hpa)[1] <- \"ensembl_gene_id\" hpa <- dplyr::left_join(hpa, bm) ## Joining with `by = join_by(ensembl_gene_id)` hpa <- hpa[!duplicated(hpa$uniprotswissprot), ] ## match HPA/LOPIT colnames(hpa)[7] <- \"accession\" fd <- dplyr::left_join(fData(andyhpa), hpa) ## Joining with `by = join_by(accession)` rownames(fd) <- featureNames(andyhpa) fData(andyhpa) <- fd stopifnot(validObject(andyhpa)) ## Let's get rid of features without any hpa data lopit <- andyhpa[!is.na(fData(andyhpa)$Main.location), ] ## HPA localisation hpalocs <- c(as.character(fData(lopit)$Main.location), as.character(fData(lopit)$Other.location)) hpalocs <- hpalocs[!is.na(hpalocs)] hpalocs <- unique(unlist(strsplit(hpalocs, \";\"))) makeHpaSet <- function(x, score2, locs = hpalocs) { hpamat <- matrix(0, ncol = length(locs), nrow = nrow(x)) colnames(hpamat) <- locs rownames(hpamat) <- featureNames(x) for (i in 1:nrow(hpamat)) { loc <- unlist(strsplit(as.character(fData(x)[i, \"Main.location\"]), \";\")) loc2 <- unlist(strsplit(as.character(fData(x)[i, \"Other.location\"]), \";\")) score <- score2[as.character(fData(x)[i, \"Reliability\"])] hpamat[i, loc] <- score hpamat[i, loc2] <- score } new(\"MSnSet\", exprs = hpamat, featureData = featureData(x)) } hpaset <- makeHpaSet(lopit, score2 = c(Supportive = 1, Uncertain = 0)) hpaset <- filterZeroRows(hpaset) ## Removing 318 columns with only 0s. dim(hpaset) ## [1] 669 18 exprs(hpaset)[c(1, 6, 200), 1:3] ## Endoplasmic reticulum Cytoplasm Vesicles ## O00767 1 0 0 ## O95302 0 0 1 ## P10809 0 0 0"},{"path":"https://lgatto.github.io/pRoloc/articles/v05-pRoloc-transfer-learning.html","id":"sec:ppi","dir":"Articles","previous_headings":"Preparing the auxiliary data","what":"Protein-protein interactions","title":"A transfer learning algorithm for spatial proteomics","text":"Protein-protein interaction data can also used auxiliary data input transfer learning algorithm. Several sources can used directly R: PSICQUIC package provides R interfaces HUPO Proteomics Standard Initiative (HUPO-PSI) project, standardises programmatic access molecular interaction databases. approach enables query great many resources one go , noted vignettes, bulk interactions, recommended directly download databases individual PSICQUIC providers. STRINGdb package provides direct interface STRING protein-protein interactions database. package can used generate table one used . exact procedure described STRINGdb vignette involves mapping protein identifiers map retrieve interaction partners get_neighbors method. Finally, possible use third-party PPI inference results adequately prepare results transfer learning. , described case PPI data tab-delimited format, retrieved directly STRING database. , access PPI spreadsheet file test data, distributed pRolocdata package. file contains 18623 pairwise interactions STRING combined interaction score. , create contingency matrix uses scores encode weight interactions. now contingency matrix reflecting total 19910 interactions 1287 proteins. , keep proteins also available spatial proteomics data (renamed andyppi), subset PPI LOPIT data, create appropriate MSnSet object, filter proteins without interaction scores. now two MSnSet objects containing respectively 520 primary experimental protein profiles along sub-cellular density gradient (andyppi) 520 auxiliary interaction profiles (ppi).","code":"ppif <- system.file(\"extdata/tabdelimited._gHentss2F9k.txt.gz\", package = \"pRolocdata\") ppidf <- read.delim(ppif, header = TRUE, stringsAsFactors = FALSE) head(ppidf) ## X.node1 node2 node1_string_id node2_string_id node1_external_id ## 1 NUDT5 IMPDH2 1861432 1850365 ENSP00000419628 ## 2 NOP2 RPL23 1858730 1858184 ENSP00000382392 ## 3 HSPA4 ENO1 1848476 1843405 ENSP00000302961 ## 4 RPS13 DKC1 1862013 1855055 ENSP00000435777 ## 5 RPL35A DDOST 1859718 1856225 ENSP00000393393 ## 6 RPL13A RPS6 1857955 1857216 ENSP00000375730 ## node2_external_id neighborhood fusion cooccurence homology coexpression ## 1 ENSP00000321584 0.000 0 0 0 0.112 ## 2 ENSP00000377865 0.000 0 0 0 0.064 ## 3 ENSP00000234590 0.000 0 0 0 0.109 ## 4 ENSP00000358563 0.462 0 0 0 0.202 ## 5 ENSP00000364188 0.000 0 0 0 0.000 ## 6 ENSP00000369757 0.000 0 0 0 0.931 ## experimental knowledge textmining combined_score ## 1 0.000 0.0 0.370 0.416 ## 2 0.868 0.0 0.000 0.871 ## 3 0.222 0.0 0.436 0.575 ## 4 0.000 0.0 0.354 0.698 ## 5 0.000 0.9 0.265 0.923 ## 6 0.419 0.9 0.240 0.996 uid <- unique(c(ppidf$X.node1, ppidf$node2)) ppim <- diag(length(uid)) colnames(ppim) <- rownames(ppim) <- uid for (k in 1:nrow(ppidf)) { i <- ppidf[[k, \"X.node1\"]] j <- ppidf[[k, \"node2\"]] ppim[i, j] <- ppidf[[k, \"combined_score\"]] } ppim[1:5, 1:8] ## NUDT5 NOP2 HSPA4 RPS13 RPL35A RPL13A CPS1 CTNNB1 ## NUDT5 1 0 0 0 0.000 0.000 0 0 ## NOP2 0 1 0 0 0.000 0.000 0 0 ## HSPA4 0 0 1 0 0.000 0.000 0 0 ## RPS13 0 0 0 1 0.997 0.998 0 0 ## RPL35A 0 0 0 0 1.000 0.999 0 0 andyppi <- andy2011 featureNames(andyppi) <- sub(\"_HUMAN\", \"\", fData(andyppi)$UniProtKB.entry.name) cmn <- intersect(featureNames(andyppi), rownames(ppim)) ppim <- ppim[cmn, ] andyppi <- andyppi[cmn, ] ppi <- MSnSet(ppim, fData = fData(andyppi), pData = data.frame(row.names = colnames(ppim))) ppi <- filterZeroCols(ppi) ## Removing 178 columns with only 0s."},{"path":"https://lgatto.github.io/pRoloc/articles/v05-pRoloc-transfer-learning.html","id":"sec:svmtl","dir":"Articles","previous_headings":"","what":"Support vector machine transfer learning","title":"A transfer learning algorithm for spatial proteomics","text":"SVM-TL method descibed (L. M. Breckels et al. 2016) yet incorporated pRoloc package. code implementing method currently available repository: https://github.com/ComputationalProteomicsUnit/lpsvm-tl-code","code":""},{"path":[]},{"path":"https://lgatto.github.io/pRoloc/articles/v05-pRoloc-transfer-learning.html","id":"sec:theopt","dir":"Articles","previous_headings":"Nearest neighbour transfer learning","what":"Optimal weights","title":"A transfer learning algorithm for spatial proteomics","text":"weighted nearest neighbours transfer learning algorithm estimates optimal weights different data sources spatial niches described data hand knntlOptimisation function. instance, human data modelled andy2011 andygoset objects1 10 annotated sub-cellular localisations (Golgi, Mitochondrion, PM, Lysosome, Cytosol, Cytosol/Nucleus, Nucleus, Ribosome 60S, Ribosome 40S ER), want know optimally combine primary auxiliary data. look figure @ref(fig:andypca), illustrates experimental separation 10 spatial classes principal component plot, see organelles mitochondrion cytosol cytosol/nucleus well resolved, others Golgi ER less . experiment, former classes expected benefit another data source, latter benefit additional information. PCA plot andy2011. multivariate protein profiles summarised along two first principal components. Proteins unknown localisation represented empty grey points. Protein markers, well-known residents specific sub-cellular niches colour-coded form clusters figure. Let’s define set three possible weights: 0, 0.5 1. weight 1 indicates final results rely exclusively experimental data ignore completely auxiliary data. weight 0 represents opposite situation, primary data ignored auxiliary data considered. weight 0.5 indicates data source contribute equally final results. algorithm’s optimisation step task identify optimal combination class-specific weights given primary auxiliary data pair. optimisation process can quite time consuming many weights many sub-cellular classes, combinations (numberofclassesnumberofweightsnumber~~classes^{number~~weights} possibilities; see ). One generally defined weights (example 0, 0.25, 0.5, 0.75, 1 0, 0.33, 0.67, 1) explore fine-grained integration opportunities. possible weight combinations can calculated thetas function: 3 classes, 3 weights 5 classes, 4 weights human andy2011 data, considering 4 weights, many combinations: actual combination weights tested can defined multiple ways: passing weights matrix explicitly (generated thetas ) th argument; defining increment weights using ; specifying number weights used length.argument. Considering sub-cellular resolution experiment, anticipate mitochondrion, cytosol cytosol/nucleus classes get high weights, ER Golgi assigned lower weights. use nearest neighbour classifier, also need know many neighbours consider classifying protein unknown localisation. knnOptimisation function (see pRoloc-tutorial vignette functions manual page) can run primary auxiliary data sources independently estimate best kPk_P kAk_A values. , based knnOptimisation, use 3 3, kPk_P kAk_A respectively. Finally, assess validity weight selection, repeated certain number times (default value 50). weight optimisation can become time consuming wide range weights many target classes, recommend start lower number iterations, pre-analyse results, proceed iterations eventually combine optimisation results data combineThetaRegRes function proceeding selection best weights. code chunk take much time executed frame vignette. , pass small subset theta matrix minimise computation time. knntlOptimisation function supports parallelised execution using various backends thanks BiocParallel package; appropriate backend defined automatically according underlying architecture user-defined backends can defined BPPARAM argument2. Also, interest time, weights optimisation repeated 5 times . optimisation performed labelled marker examples . removing unlabelled non-marker proteins (unknowns), auxiliary GO columns end containing 0 (GO-protein association observed non-marker proteins), temporarily removed. topt result stores result optimisation step, particular observed theta weights, can directly plotted shown bubble plot . bubble plots give proportion best weights marker class observed optimisation phase. see mitochondrion, cytosol cytosol/nucleus classes predominantly scored height weights (2/3 1), consistent high reliability primary data. Golgi ribosomal clusters (lesser extend ER) favour smaller scores, indicating substantial benefit auxiliary data.","code":"head(thetas(3, by = 0.5)) ## Weigths: ## (0, 0.5, 1) ## [,1] [,2] [,3] ## [1,] 0 0.0 0.0 ## [2,] 0 0.0 0.5 ## [3,] 0 0.0 1.0 ## [4,] 0 0.5 0.0 ## [5,] 0 0.5 0.5 ## [6,] 0 0.5 1.0 dim(thetas(3, by = 0.5)) ## Weigths: ## (0, 0.5, 1) ## [1] 27 3 dim(thetas(5, length.out = 4)) ## Weigths: ## (0, 0.333333333333333, 0.666666666666667, 1) ## [1] 1024 5 ## marker classes for andy2011 m <- unique(fData(andy2011)$markers.tl) m <- m[m != \"unknown\"] th <- thetas(length(m), length.out=4) ## Weigths: ## (0, 0.333333333333333, 0.666666666666667, 1) dim(th) ## [1] 1048576 10 topt <- knntlOptimisation(andy2011, andygoset, th = th, k = c(3, 3), fcol = \"markers.tl\", times = 50) set.seed(1) i <- sample(nrow(th), 12) topt <- knntlOptimisation(andy2011, andygoset, th = th[i, ], k = c(3, 3), fcol = \"markers.tl\", times = 5) ## Removing 501 columns with only 0s. ## Note: vector will be ordered according to classes: Cytosol Cytosol/Nucleus ER Golgi Lysosome Mitochondrion Nucleus PM Ribosome 40S Ribosome 60S (as names are not explicitly defined) topt ## Object of class \"ThetaRegRes\" ## Algorithm: theta ## Theta hyper-parameters: ## weights: 0 0.3333333 0.6666667 1 ## k: 3 3 ## nrow: 12 ## Design: ## Replication: 5 x 5-fold X-validation ## Partitioning: 0.2/0.8 (test/train) ## Results ## macro F1: ## Min. 1st Qu. Median Mean 3rd Qu. Max. ## 0.8096 0.8401 0.8812 0.8661 0.8869 0.9127 ## best theta: ## Cytosol Cytosol.Nucleus ER Golgi Lysosome Mitochondrion Nucleus PM ## weight:0 0 0 5 4 0 0 1 0 ## weight:0.33 0 4 0 0 0 1 0 4 ## weight:0.67 1 1 0 1 0 0 0 0 ## weight:1 4 0 0 0 5 4 4 1 ## Ribosome.40S Ribosome.60S ## weight:0 5 0 ## weight:0.33 0 4 ## weight:0.67 0 1 ## weight:1 0 0"},{"path":"https://lgatto.github.io/pRoloc/articles/v05-pRoloc-transfer-learning.html","id":"sec:choosep","dir":"Articles","previous_headings":"Nearest neighbour transfer learning","what":"Choosing weights","title":"A transfer learning algorithm for spatial proteomics","text":"set best weights must chosen applied classification unlabelled proteins (formally annotated unknown). can defined manually, based pattern observed weights bubble plot, automatically extracted getParams method3. See ?getParams details favourPrimary function, desirable systematically favour primary data (.e. high weights) different weight combinations perform equally well. provide best parameters extensive parameter optimisation search, provided getParams:","code":"getParams(topt) ## Cytosol Cytosol/Nucleus ER Golgi Lysosome ## 1.0000000 0.3333333 0.0000000 0.0000000 1.0000000 ## Mitochondrion Nucleus PM Ribosome 40S Ribosome 60S ## 1.0000000 1.0000000 0.3333333 0.0000000 0.3333333 (bw <- experimentData(andy2011)@other$knntl$thetas) ## Cytosol Cytosol/Nucleus ER Golgi Lysosome ## 0.6666667 0.6666667 0.3333333 0.3333333 0.6666667 ## Mitochondrion Nucleus PM Ribosome 40S Ribosome 60S ## 0.6666667 0.3333333 0.3333333 0.0000000 0.3333333"},{"path":"https://lgatto.github.io/pRoloc/articles/v05-pRoloc-transfer-learning.html","id":"sec:thclass","dir":"Articles","previous_headings":"Nearest neighbour transfer learning","what":"Applying best theta weights","title":"A transfer learning algorithm for spatial proteomics","text":"apply best weights learn auxiliary data accordingly classifying unlabelled proteins one sub-cellular niches considered markers.tl (displayed figure @ref(fig:andypca)), pass primary auxiliary data sets, best weights, best k’s (, case marker’s feature variable want use, default markers) knntlClassification function. generate new instance class MSnSet, identical primary data, including classification results classifications scores transfer learning classification algorithm (knntl knntl.scores feature variables respectively). , extract former getPrediction function plot results classification. PCA plot andy2011 transfer learning classification. size points proportional classification scores. Please read pRoloc-tutorial vignette, particular classification section, details proceed exploration classification results classification scores.","code":"andy2011 <- knntlClassification(andy2011, andygoset, bestTheta = bw, k = c(3, 3), fcol = \"markers.tl\") andy2011 <- getPredictions(andy2011, fcol = \"knntl\") ## ans ## Chromatin associated Cytosol Cytosol/Nucleus ## 11 293 43 ## Endosome ER Golgi ## 12 194 76 ## Lysosome Mitochondrion Nucleus ## 64 260 110 ## PM Ribosome 40S Ribosome 60S ## 234 19 55 setStockcol(paste0(getStockcol(), \"80\")) ptsze <- exp(fData(andy2011)$knntl.scores) - 1 plot2D(andy2011, fcol = \"knntl\", cex = ptsze) setStockcol(NULL) addLegend(andy2011, where = \"topright\", fcol = \"markers.tl\", bty = \"n\", cex = .7)"},{"path":"https://lgatto.github.io/pRoloc/articles/v05-pRoloc-transfer-learning.html","id":"sec:ccl","dir":"Articles","previous_headings":"","what":"Conclusions","title":"A transfer learning algorithm for spatial proteomics","text":"vignette describes application weighted kk-nearest neighbour transfer learning algorithm application sub-cellular localisation prediction proteins using quantitative proteomics data primary data Gene Ontology-derived binary data auxiliary data source. algorithm can used various data sources (show compile binary data Human Protein Atlas section @ref(sec:hpaaux)) successfully applied algorithm (L. M. Breckels et al. 2016) third-party quantitative auxiliary data.","code":""},{"path":"https://lgatto.github.io/pRoloc/articles/v05-pRoloc-transfer-learning.html","id":"session-information","dir":"Articles","previous_headings":"","what":"Session information","title":"A transfer learning algorithm for spatial proteomics","text":"software respective versions used produce document listed .","code":"## R version 4.4.1 (2024-06-14) ## Platform: x86_64-pc-linux-gnu ## Running under: Ubuntu 22.04.5 LTS ## ## Matrix products: default ## BLAS: /usr/lib/x86_64-linux-gnu/openblas-pthread/libblas.so.3 ## LAPACK: /usr/lib/x86_64-linux-gnu/openblas-pthread/libopenblasp-r0.3.20.so; LAPACK version 3.10.0 ## ## locale: ## [1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C ## [3] LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8 ## [5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8 ## [7] LC_PAPER=en_US.UTF-8 LC_NAME=C ## [9] LC_ADDRESS=C LC_TELEPHONE=C ## [11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C ## ## time zone: UTC ## tzcode source: system (glibc) ## ## attached base packages: ## [1] stats4 stats graphics grDevices utils datasets methods ## [8] base ## ## other attached packages: ## [1] hpar_1.47.0 biomaRt_2.61.3 class_7.3-22 ## [4] pRolocdata_1.43.3 pRoloc_1.45.2 BiocParallel_1.39.0 ## [7] MLInterfaces_1.85.0 cluster_2.1.6 annotate_1.83.0 ## [10] XML_3.99-0.17 AnnotationDbi_1.67.0 IRanges_2.39.2 ## [13] MSnbase_2.31.1 ProtGenerics_1.37.1 S4Vectors_0.43.2 ## [16] mzR_2.39.2 Rcpp_1.0.13 Biobase_2.65.1 ## [19] BiocGenerics_0.51.3 knitr_1.48 BiocStyle_2.33.1 ## ## loaded via a namespace (and not attached): ## [1] splines_4.4.1 filelock_1.0.3 ## [3] tibble_3.2.1 hardhat_1.4.0 ## [5] preprocessCore_1.67.1 pROC_1.18.5 ## [7] rpart_4.1.23 lifecycle_1.0.4 ## [9] httr2_1.0.5 doParallel_1.0.17 ## [11] globals_0.16.3 lattice_0.22-6 ## [13] MASS_7.3-61 MultiAssayExperiment_1.31.5 ## [15] dendextend_1.18.1 magrittr_2.0.3 ## [17] limma_3.61.12 plotly_4.10.4 ## [19] sass_0.4.9 rmarkdown_2.28 ## [21] jquerylib_0.1.4 yaml_2.3.10 ## [23] MsCoreUtils_1.17.2 DBI_1.2.3 ## [25] RColorBrewer_1.1-3 lubridate_1.9.3 ## [27] abind_1.4-8 zlibbioc_1.51.1 ## [29] GenomicRanges_1.57.2 purrr_1.0.2 ## [31] mixtools_2.0.0 AnnotationFilter_1.29.0 ## [33] nnet_7.3-19 rappdirs_0.3.3 ## [35] ipred_0.9-15 lava_1.8.0 ## [37] GenomeInfoDbData_1.2.13 listenv_0.9.1 ## [39] parallelly_1.38.0 pkgdown_2.1.1.9000 ## [41] ncdf4_1.23 codetools_0.2-20 ## [43] DelayedArray_0.31.14 xml2_1.3.6 ## [45] tidyselect_1.2.1 UCSC.utils_1.1.0 ## [47] viridis_0.6.5 matrixStats_1.4.1 ## [49] BiocFileCache_2.13.2 jsonlite_1.8.9 ## [51] caret_6.0-94 e1071_1.7-16 ## [53] survival_3.7-0 iterators_1.0.14 ## [55] systemfonts_1.1.0 foreach_1.5.2 ## [57] segmented_2.1-2 tools_4.4.1 ## [59] progress_1.2.3 ragg_1.3.3 ## [61] glue_1.8.0 prodlim_2024.06.25 ## [63] gridExtra_2.3 SparseArray_1.5.45 ## [65] xfun_0.48 MatrixGenerics_1.17.0 ## [67] GenomeInfoDb_1.41.2 dplyr_1.1.4 ## [69] withr_3.0.1 BiocManager_1.30.25 ## [71] fastmap_1.2.0 fansi_1.0.6 ## [73] digest_0.6.37 mime_0.12 ## [75] timechange_0.3.0 R6_2.5.1 ## [77] textshaping_0.4.0 colorspace_2.1-1 ## [79] gtools_3.9.5 lpSolve_5.6.21 ## [81] RSQLite_2.3.7 utf8_1.2.4 ## [83] tidyr_1.3.1 generics_0.1.3 ## [85] hexbin_1.28.4 data.table_1.16.2 ## [87] recipes_1.1.0 FNN_1.1.4.1 ## [89] prettyunits_1.2.0 PSMatch_1.9.0 ## [91] httr_1.4.7 htmlwidgets_1.6.4 ## [93] S4Arrays_1.5.11 ModelMetrics_1.2.2.2 ## [95] pkgconfig_2.0.3 gtable_0.3.5 ## [97] timeDate_4041.110 blob_1.2.4 ## [99] impute_1.79.0 XVector_0.45.0 ## [101] htmltools_0.5.8.1 bookdown_0.41 ## [103] MALDIquant_1.22.3 clue_0.3-65 ## [105] scales_1.3.0 png_0.1-8 ## [107] gower_1.0.1 reshape2_1.4.4 ## [109] coda_0.19-4.1 nlme_3.1-166 ## [111] curl_5.2.3 proxy_0.4-27 ## [113] cachem_1.1.0 stringr_1.5.1 ## [115] BiocVersion_3.20.0 parallel_4.4.1 ## [117] mzID_1.43.0 vsn_3.73.0 ## [119] desc_1.4.3 pillar_1.9.0 ## [121] grid_4.4.1 vctrs_0.6.5 ## [123] pcaMethods_1.97.0 randomForest_4.7-1.2 ## [125] dbplyr_2.5.0 xtable_1.8-4 ## [127] evaluate_1.0.1 mvtnorm_1.3-1 ## [129] cli_3.6.3 compiler_4.4.1 ## [131] rlang_1.1.4 crayon_1.5.3 ## [133] future.apply_1.11.2 LaplacesDemon_16.1.6 ## [135] mclust_6.1.1 QFeatures_1.15.3 ## [137] affy_1.83.1 plyr_1.8.9 ## [139] fs_1.6.4 stringi_1.8.4 ## [141] viridisLite_0.4.2 munsell_0.5.1 ## [143] Biostrings_2.73.2 lazyeval_0.2.2 ## [145] Matrix_1.7-0 ExperimentHub_2.13.1 ## [147] hms_1.1.3 bit64_4.5.2 ## [149] future_1.34.0 ggplot2_3.5.1 ## [151] KEGGREST_1.45.1 statmod_1.5.0 ## [153] highr_0.11 AnnotationHub_3.13.3 ## [155] SummarizedExperiment_1.35.4 kernlab_0.9-33 ## [157] igraph_2.0.3 memoise_2.0.1 ## [159] affyio_1.75.1 bslib_0.8.0 ## [161] sampling_2.10 bit_4.5.0"},{"path":[]},{"path":"https://lgatto.github.io/pRoloc/authors.html","id":null,"dir":"","previous_headings":"","what":"Authors","title":"Authors and Citation","text":"Laurent Gatto. Author, maintainer. Lisa Breckels. Author. Thomas Burger. Contributor. Samuel Wieczorek. Contributor. Charlotte Hutchings. Contributor. Oliver Crook. Author.","code":""},{"path":"https://lgatto.github.io/pRoloc/authors.html","id":"citation","dir":"","previous_headings":"","what":"Citation","title":"Authors and Citation","text":"Gatto L, Breckels LM, Wieczorek S, Burger T, Lilley KS. Mass-spectrometry-based spatial proteomics data analysis using pRoloc pRolocdata. Bioinformatics. 2014 May 1;30(9):1322-4. doi:10.1093/bioinformatics/btu013. Epub 2014 Jan 11. PubMed PMID: 24413670; PubMed Central PMCID: PMC3998135. Breckels LM, Gatto L, Christoforou , Groen AJ, Lilley KS, Trotter MW. effect organelle discovery upon sub-cellular protein localisation. J Proteomics. 2013 Mar 21. doi:pii: S1874-3919(13)00094-8. 10.1016/j.jprot.2013.02.019. PubMed PMID: 23523639. Gatto L., Breckels L.M., Burger T, Nightingale D.J.H., Groen .J., Campbell C., Mulvey C.M., Christoforou ., Ferro M., Lilley K.S. 'foundation reliable spatial proteomics data analysis' Mol Cell Proteomics. 2014 May 20. Breckels LM, Holden SB, Wojnar D, Mulvey CM, Christoforou , Groen , Trotter MW Kohlbacher O, Lilley KS, Gatto L. Learning Heterogeneous Data Sources: Application Spatial Proteomics. PLoS Comput Biol. 2016 May 13;12(5):e1004920. doi: 10.1371/journal.pcbi.1004920. Breckels LM, Mulvey CM, Lilley KS Gatto L. Bioconductor workflow processing analysing spatial proteomics data. [version 2; peer review: 2 approved]. F1000Research 2018, 5:2926 (https://doi.org/10.12688/f1000research.10411.2) Crook OM, Breckels LM, Lilley KS, Kirk PWD, Gatto L. Bioconductor workflow Bayesian analysis spatial proteomics [version 1; peer review: awaiting peer review]. F1000Research 2019, 8:446 (https://doi.org/10.12688/f1000research.18636.1)","code":"@Article{, title = {Mass-spectrometry based spatial proteomics data analysis using pRoloc and pRolocdata}, author = {Laurent Gatto and Lisa M. Breckels and Samuel Wieczorek and Thomas Burger and Kathryn S. Lilley}, journal = {Bioinformatics}, year = {2014}, } @Article{, title = {The effect of organelle discovery upon sub-cellular protein localisation}, author = {Lisa M. Breckels and Laurent Gatto and Andy Christoforou and Arnoud J. Groen and Kathryn S. Lilley and Matthew W. Trotter}, journal = {J Proteomics}, year = {2013}, } @Article{, title = {A foundation for reliable spatial proteomics data analysis}, author = {Laurent Gatto and Lisa M. Breckels and Thomas Burger and Daniel J. Nightingale and Arnoud J. Groen and Callum Campbell and Claire M. Mulvey and Andy Christroforou and Myriam Ferro and Kathryn S. Lilley}, journal = {Mol Cell Proteomics}, year = {2014}, } @Article{, title = {Learning from heterogeneous data sources: an application in spatial proteomics}, author = {Lisa M. Breckels and Sean Holden and David Wonjar and Claire M. Mulvey and Andy Christoforou and Arnoud Groen and Matthew W.B. Trotter and Oliver Kohlbacker and Kathryn S. Lilley and Laurent Gatto}, journal = {PLoS Comput Biol}, year = {2016}, } @Article{, title = {A Bioconductor workflow for processing and analysing spatial proteomics data}, author = {Lisa M. Breckels and Claire M. Mulvey and Kathryn S. Lilley and Laurent Gatto}, journal = {F1000Research}, year = {2016}, } @Article{, title = {A Bioconductor workflow for the Bayesian analysis of spatial proteomics}, author = {Oliver M. Crook and Lisa M. Breckels and Kathryn S. Lilley and Paul D.W. Kirk and Laurent Gatto}, journal = {F1000Research}, year = {2019}, }"},{"path":"https://lgatto.github.io/pRoloc/index.html","id":"a-unifying-bioinformatics-framework-for-spatial-proteomics","dir":"","previous_headings":"","what":"A unifying bioinformatics framework for spatial proteomics","title":"A unifying bioinformatics framework for spatial proteomics","text":"pRoloc suite set software offers complete software pipeline analyse, visualise interpret mass spectrometry-based spatial proteomics data , example, LOPIT (Localization Organelle Proteins Isotope Tagging), PCP (Protein Correlation Profiling) hyperLOPIT (hyperplexed LOPIT). suite includes pRoloc, mail software focuses data analysis using state---art machine learning, pRolocdata, distributes numerous datasets, pRolocGUI, offers interactive visualisations dedicated spatial proteomics. software distributed part R/Bioconductor project.","code":""},{"path":"https://lgatto.github.io/pRoloc/index.html","id":"getting-started","dir":"","previous_headings":"","what":"Getting started","title":"A unifying bioinformatics framework for spatial proteomics","text":"pRoloc software comes ample documentation. main tutorial provides broad overview package functionality. See Articles tab additional manuals. pRolocGUI also offer several documentation files. set video tutorial illustrate pRoloc framework.","code":""},{"path":"https://lgatto.github.io/pRoloc/index.html","id":"help","dir":"","previous_headings":"","what":"Help","title":"A unifying bioinformatics framework for spatial proteomics","text":"Post questions Bioconductor support site, tagging package name pRoloc (maintainer automatically notified email). identify bug feature request, please open issue github development page.","code":""},{"path":"https://lgatto.github.io/pRoloc/index.html","id":"installation","dir":"","previous_headings":"","what":"Installation","title":"A unifying bioinformatics framework for spatial proteomics","text":"preferred installation procedure uses Bioconductor infrastructure:","code":"## unless BiocManager is already installed install.packages(\"BiocManager\") ## then BiocManager::install(\"pRoloc\") BiocManager::install(\"pRolocdata\") BiocManager::install(\"pRolocGUI\")"},{"path":"https://lgatto.github.io/pRoloc/index.html","id":"pre-releasedevelopment-version","dir":"","previous_headings":"Installation","what":"Pre-release/development version","title":"A unifying bioinformatics framework for spatial proteomics","text":"pre-release/development code github can also installed using BiocManager::install, shown . Note requires working R build environment (.e Rtools Windows - see ). New pre-release features might documented thoroughly tested substantially change prior release. Use risks.","code":"## unless BiocManager is already installed install.packages(\"BiocManager\") ## then, install from github BiocManager::install(\"lgatto/pRoloc\") BiocManager::install(\"lgatto/pRolocdata\") BiocManager::install(\"lgatto/pRolocGUI\")"},{"path":"https://lgatto.github.io/pRoloc/index.html","id":"references","dir":"","previous_headings":"","what":"References:","title":"A unifying bioinformatics framework for spatial proteomics","text":"refences software, use spatial proteomics data analysis: Crook OM, Breckels LM, Lilley KS, Kirk PWD, Gatto L. Bioconductor workflow Bayesian analysis spatial proteomics [version 1; peer review: awaiting peer review]. F1000Research 2019, 8:446 (https://doi.org/10.12688/f1000research.18636.1) Breckels LM, Mulvey CM, Lilley KS Gatto L. Bioconductor workflow processing analysing spatial proteomics data [version 2; peer review: 2 approved]. F1000Research 2018, 5:2926 (https://doi.org/10.12688/f1000research.10411.2) Gatto L, Breckels LM, Burger T, Nightingale DJ, Groen AJ, Campbell C, Nikolovski N, Mulvey CM, Christoforou , Ferro M, Lilley KS. foundation reliable spatial proteomics data analysis Mol Cell Proteomics. 2014 Aug;13(8):1937-52. doi: 10.1074/mcp.M113.036350. Epub 2014 May 20. PubMed PMID: 24846987 Gatto L, Breckels LM, Wieczorek S, Burger T, Lilley KS. Mass-spectrometry-based spatial proteomics data analysis using pRoloc pRolocdata Bioinformatics. 2014 May 1;30(9):1322-4. doi: 10.1093/bioinformatics/btu013. Epub 2014 Jan 11. PubMed PMID: 24413670. Specific algorithms available software: Breckels LM, Gatto L, Christoforou , Groen AJ, Lilley KS, Trotter MW. effect organelle discovery upon sub-cellular protein localisation J Proteomics. 2013 Aug 2;88:129-40. doi: 10.1016/j.jprot.2013.02.019. Epub 2013 Mar 21. PubMed PMID: 23523639. Breckels LM, Holden S, Wojnar D, Mulvey CMM, Christoforou , Groen AJ, Kohlbacher O, Lilley KS Gatto L. Learning heterogeneous data sources: application spatial proteomics 2015 biorXiv, doi: http://dx.doi.org/10.1101/022152 Oliver M Crook, Claire M Mulvey, Paul D. W. Kirk, Kathryn S Lilley, Laurent Gatto Bayesian Mixture Modelling Approach Spatial Proteomics PLOS Computational Biology doi:[10.1371/journal.pcbi.1006516](https://doi.org/10.1371/journal.pcbi.1006516)","code":""},{"path":"https://lgatto.github.io/pRoloc/index.html","id":"more-resource","dir":"","previous_headings":"References:","what":"More resource","title":"A unifying bioinformatics framework for spatial proteomics","text":"R Bioconductor proteomics web page package Bioconductor proteomics workflow","code":""},{"path":"https://lgatto.github.io/pRoloc/index.html","id":"contributing","dir":"","previous_headings":"","what":"Contributing","title":"A unifying bioinformatics framework for spatial proteomics","text":"Contributions package welcome. want contribute package, follow conventions rest functions whenever makes sense . Feel free get touch (preferable opening github issue) discuss suggestions. Please note project released Contributor Code Conduct. participating project agree abide terms.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/AnnotationParams-class.html","id":null,"dir":"Reference","previous_headings":"","what":"Class ","title":"Class ","text":"Class store annotation parameters automatically query Biomart server, retrieve relevant annotation set features interest using, example getGOFromFeatures makeGoSet.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/AnnotationParams-class.html","id":"objects-from-the-class","dir":"Reference","previous_headings":"","what":"Objects from the Class","title":"Class ","text":"Objects can created set setAnnotationParams function. Object created calling without arguments setAnnotationParams(), open interactive interface. Depending value \"many.graphics\" option, graphical text-based menu open (text interface can forced setting graphics argument FALSE: setAnnotationParams(graphics = FALSE)). menu allow select species interest first type features (ENSEMBL gene identifier, Entrez id, ...) second. species available ENSEMBL data available Biomart set attributes interest available. compatible identifiers downstream queries automatically filtered displayed user selection. also possible pass parameter inputs, character vector length 2 containing pattern uniquely matching species interest (position 1) patterns uniquely matching feature types (position 2). matches unique, error thrown. new instance AnnotationParams created enable easy automatic query Mart instance. instance invisibly returned stored global variable pRoloc package's private environment automatic retrieval. variable containing AnnotationParams instance already available, can set globally passing argument setAnnotationParams function. Globally set AnnotationParams instances can accessed getAnnotationParams function. See pRoloc-theta vignette details.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/AnnotationParams-class.html","id":"slots","dir":"Reference","previous_headings":"","what":"Slots","title":"Class ","text":"mart: Object class \"Mart\" biomaRt package. martname: Object class \"character\" name mart instance. dataset: Object class \"character\" data set mart instance. filter: Object class \"character\" filter used querying mart instance. date: Object class \"character\" indicating current instance created. biomaRtVersion: Object class \"character\" biomaRt version used create AnnotationParams instance. .__classVersion__: Object class \"Versions\" version AnnotationParams class current instance.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/AnnotationParams-class.html","id":"methods","dir":"Reference","previous_headings":"","what":"Methods","title":"Class ","text":"show signature(object = \"AnnotationParams\"): display objects.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/AnnotationParams-class.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Class ","text":"Laurent Gatto ","code":""},{"path":[]},{"path":"https://lgatto.github.io/pRoloc/reference/AnnotationParams-class.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Class ","text":"","code":"data(andy2011params) andy2011params #> Object of class \"AnnotationParams\" #> Using the 'ENSEMBL_MART_ENSEMBL' BioMart database #> Using the 'hsapiens_gene_ensembl' dataset #> Using 'uniprotswissprot' as filter #> Created on Sat May 1 08:58:27 2021 data(dunkley2006params) dunkley2006params #> Object of class \"AnnotationParams\" #> Using the 'plants_mart' BioMart database #> Using the 'athaliana_eg_gene' dataset #> Using 'tair_locus' as filter #> Created on Tue Mar 12 07:25:12 2024 try(setAnnotationParams(inputs = c(\"nomatch1\", \"nomatch2\"))) #> Error in setAnnotationParams(inputs = c(\"nomatch1\", \"nomatch2\")) : #> Couldn't find a unique species match for 'nomatch1'. setAnnotationParams(inputs = c(\"Human genes\", \"UniProtKB/Swiss-Prot ID\")) #> Using species Human genes (GRCh38.p13) #> Warning: Ensembl will soon enforce the use of https. #> Ensure the 'host' argument includes \"https://\" #> Using feature type UniProtKB/Swiss-Prot ID(s) [e.g. A0A024R1R8] #> Connecting to Biomart... #> Warning: Ensembl will soon enforce the use of https. #> Ensure the 'host' argument includes \"https://\" getAnnotationParams() #> Object of class \"AnnotationParams\" #> Using the 'ENSEMBL_MART_ENSEMBL' BioMart database #> Using the 'hsapiens_gene_ensembl' dataset #> Using 'uniprotswissprot' as filter #> Created on Fri Oct 18 17:19:34 2024"},{"path":"https://lgatto.github.io/pRoloc/reference/ClustDist-class.html","id":null,"dir":"Reference","previous_headings":"","what":"Class ","title":"Class ","text":"ClustDist summaries algorithm information, running clustDist function, number k's tested kmeans, mean normalised pairwise (Euclidean) distances per numer component clusters tested.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/ClustDist-class.html","id":"objects-from-the-class","dir":"Reference","previous_headings":"","what":"Objects from the Class","title":"Class ","text":"Object class created clustDist function.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/ClustDist-class.html","id":"slots","dir":"Reference","previous_headings":"","what":"Slots","title":"Class ","text":"k: Object class \"numeric\" storing number k clusters tested. dist: Object class \"list\" storing list distance matrices. term: Object class \"character\" describing GO term name. id: Object class \"character\" describing GO term ID. nrow: Object class \"numeric\" showing number instances set clustsz: Object class \"list\" describing number instances cluster k tested components: Object class \"vector\" storing class membership protein k tested. fcol: Object class \"character\" showing feature column name corresponding MSnSet protein set information stored.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/ClustDist-class.html","id":"methods","dir":"Reference","previous_headings":"","what":"Methods","title":"Class ","text":"plot Plots kmeans clustering results. show Shows object.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/ClustDist-class.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Class ","text":"Lisa M Breckels ","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/ClustDist-class.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Class ","text":"","code":"showClass(\"ClustDist\") #> Class \"ClustDist\" [package \"pRoloc\"] #> #> Slots: #> #> Name: k dist term id nrow clustsz #> Class: numeric list character character numeric list #> #> Name: components fcol #> Class: vector character library('pRolocdata') #> #> This is pRolocdata version 1.43.3. #> Use 'pRolocdata()' to list available data sets. data(dunkley2006) par <- setAnnotationParams(inputs = c(\"Arabidopsis thaliana genes\", \"Gene stable ID\")) #> Using species Arabidopsis thaliana genes (TAIR10) #> Warning: Ensembl will soon enforce the use of https. #> Ensure the 'host' argument includes \"https://\" #> Using feature type Gene stable ID(s) [e.g. AT1G01010] #> Connecting to Biomart... #> Warning: Ensembl will soon enforce the use of https. #> Ensure the 'host' argument includes \"https://\" ## add protein set/annotation information xx <- addGoAnnotations(dunkley2006, par) #> Loading required namespace: GO.db #> ## filter xx <- filterMinMarkers(xx, n = 50) #> Retaining 3 out of 79 in GOAnnotations xx <- filterMaxMarkers(xx, p = .25) #> Retaining 2 out of 3 in GOAnnotations ## get distances for protein sets dd <- clustDist(xx) #> | | | 0% | |=================================== | 50% | |======================================================================| 100% ## plot clusters for first 'ClustDist' object ## in the 'ClustDistList' plot(dd[[1]], xx) ## plot distances for all protein sets plot(dd)"},{"path":"https://lgatto.github.io/pRoloc/reference/ClustDistList-class.html","id":null,"dir":"Reference","previous_headings":"","what":"Storing multiple ClustDist instances — ClustDistList-class","title":"Storing multiple ClustDist instances — ClustDistList-class","text":"class storing lists ClustDist instances.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/ClustDistList-class.html","id":"objects-from-the-class","dir":"Reference","previous_headings":"","what":"Objects from the Class","title":"Storing multiple ClustDist instances — ClustDistList-class","text":"Object class created clustDist function.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/ClustDistList-class.html","id":"slots","dir":"Reference","previous_headings":"","what":"Slots","title":"Storing multiple ClustDist instances — ClustDistList-class","text":"x: Object class list containing valid ClustDist instances. log: Object class list containing object creation log, containing among elements call generated object. .__classVersion__: version instance. development purposes .","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/ClustDistList-class.html","id":"methods","dir":"Reference","previous_headings":"","what":"Methods","title":"Storing multiple ClustDist instances — ClustDistList-class","text":"\"[[\" Extracts single ClustDist position. \"[\" Extracts one ClustDists ClustDistList. length Returns number ClustDists. names Returns names ClustDists, available. replacement method also available. show Display object printing short summary. lapply(x, FUN, ...) Apply function FUN element input x. application FUN returns ClustDist, return value ClustDistList, otherwise list plot Plots boxplot distance results per protein set.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/ClustDistList-class.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Storing multiple ClustDist instances — ClustDistList-class","text":"Lisa M Breckels ","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/ClustDistList-class.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Storing multiple ClustDist instances — ClustDistList-class","text":"","code":"library('pRolocdata') data(dunkley2006) par <- setAnnotationParams(inputs = c(\"Arabidopsis thaliana genes\", \"Gene stable ID\")) #> Using species Arabidopsis thaliana genes (TAIR10) #> Warning: Ensembl will soon enforce the use of https. #> Ensure the 'host' argument includes \"https://\" #> Using feature type Gene stable ID(s) [e.g. AT1G01010] #> Connecting to Biomart... #> Warning: Ensembl will soon enforce the use of https. #> Ensure the 'host' argument includes \"https://\" ## add protein set/annotation information xx <- addGoAnnotations(dunkley2006, par) ## filter xx <- filterMinMarkers(xx, n = 50) #> Retaining 3 out of 79 in GOAnnotations xx <- filterMaxMarkers(xx, p = .25) #> Retaining 2 out of 3 in GOAnnotations ## get distances for protein sets dd <- clustDist(xx) #> | | | 0% | |=================================== | 50% | |======================================================================| 100% ## plot distances for all protein sets plot(dd) names(dd) #> [1] \"endoplasmic reticulum\" \"Golgi apparatus\" ## Extract a sub-list of ClustDist objects dd[1] #> Instance of class 'ClustDistList' containig 1 objects. ## Extract 1st ClustDist object dd[[1]] #> Object of class \"ClustDist\" #> fcol = GOAnnotations #> term = GO:0005783 #> id = endoplasmic reticulum #> nrow = 91 #> k's tested: 1 2 3 4 5 #> Size: 91 #> Size: 88 #> Size: 80 #> Size: NA #> Size: NA #> Clusters info: #> ks.mean mean ks.norm norm #> k = 1 1 0.1916 1 0.04260 #> k = 2 1 0.1595 1 0.03585 #> k = 3 1 *0.1385 1 *0.03215 #> k = 4 NA NA NA NA #> k = 5 NA NA NA NA"},{"path":"https://lgatto.github.io/pRoloc/reference/GenRegRes-class.html","id":null,"dir":"Reference","previous_headings":"","what":"Class ","title":"Class ","text":"Regularisation framework containers.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/GenRegRes-class.html","id":"objects-from-the-class","dir":"Reference","previous_headings":"","what":"Objects from the Class","title":"Class ","text":"Object class created respective regularisation function: knnOptimisation, svmOptimisation, plsdaOptimisation, knntlOptimisation, ...","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/GenRegRes-class.html","id":"slots","dir":"Reference","previous_headings":"","what":"Slots","title":"Class ","text":"algorithm: Object class \"character\" storing machine learning algorithm name. hyperparameters: Object class \"list\" respective algorithm hyper-parameters tested. design: Object class \"numeric\" describing cross-validation design, test data size number replications. log: Object class \"list\" warnings thrown hyper-parameters regularisation. seed: Object class \"integer\" random number generation seed. results: Object class \"matrix\" dimenstions times (see design) number hyperparameters + 1 storing macro F1 values respective best hyper-parameters replication. f1Matrices: Object class \"list\" respective times cross-validation F1 matrices. cmMatrices: Object class \"list\" respective times contingency matrices. testPartitions: Object class \"list\" respective times test partitions. datasize: Object class \"list\" details respective inner outter training testing data sizes. ThetaRegRes: predictions: list predictions optimisation iterations. otherWeights: Alternative best theta weigts: vector per iterations, NULL best weights found.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/GenRegRes-class.html","id":"methods","dir":"Reference","previous_headings":"","what":"Methods","title":"Class ","text":"getF1Scores Returns matrix F1 scores optimisation parameters. f1Count signature(object = \"GenRegRes\", t = \t\"numeric\") signature(object = \"ThetaRegRes\", t = \t\"numeric\"): Constructs table possible parameter combination count many F1 scores greater equal t. t missing (default), best F1 score used. method useful conjunctin plot. getParams Returns best parameters. however strongly recommended inspect optimisation results. ThetaRegRes optimisation result, method chose best parameters can \"median\" (default) \"mean\" (median mean best weights chosen), \"max\" (first weights highest macro-F1 score, considering multiple max scoring combinations possible) \"count\" (observed weight get maximum number observations, see f1Count). favourP argument can used prioritise weights favour primary data (.e. heigh weights). See favourPrimary . getSeed Returns seed used optimisation run. getWarnings signature(object = \"GenRegRes\"): Returns vector recorded warnings. levelPlot signature(object = \"GenRegRes\"): Plots heatmap optimisation results. \"GenRegRes\" instances. plot Plots optisisation results. show Shows object.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/GenRegRes-class.html","id":"other-functions","dir":"Reference","previous_headings":"","what":"Other functions","title":"Class ","text":"ThetaRegRes: combineThetaRegRes(object) Takes list ThetaRegRes instances combined returnes new ThetaRegRes instance. favourPrimary(primary, auxiliary, object, verbose = \tTRUE) Takes primary auxiliary data \tsources (two MSnSet instances) \tThetaRegRes object returns updated \tThetaRegRes instance containing best parameters/weigths \t(see getParams function) favouring primary data \tmultiple best theta weights available.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/GenRegRes-class.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Class ","text":"Laurent Gatto ","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/GenRegRes-class.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Class ","text":"","code":"showClass(\"GenRegRes\") #> Class \"GenRegRes\" [package \"pRoloc\"] #> #> Slots: #> #> Name: algorithm hyperparameters design log #> Class: character list numeric list #> #> Name: seed results f1Matrices cmMatrices #> Class: integer matrix list list #> #> Name: testPartitions datasize #> Class: list list #> #> Known Subclasses: \"ThetaRegRes\" showClass(\"ThetaRegRes\") #> Class \"ThetaRegRes\" [package \"pRoloc\"] #> #> Slots: #> #> Name: predictions otherWeights algorithm hyperparameters #> Class: list list character list #> #> Name: design log seed results #> Class: numeric list integer matrix #> #> Name: f1Matrices cmMatrices testPartitions datasize #> Class: list list list list #> #> Extends: \"GenRegRes\""},{"path":"https://lgatto.github.io/pRoloc/reference/MCMCParams.html","id":null,"dir":"Reference","previous_headings":"","what":"Instrastructure to store and process MCMC results — MCMCChains-class","title":"Instrastructure to store and process MCMC results — MCMCChains-class","text":"MCMCParams infrastructure used store process Marchov chain Monte Carlo results T-Augmented Gaussian Mixture model (TAGM) Crook et al. (2018).","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/MCMCParams.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Instrastructure to store and process MCMC results — MCMCChains-class","text":"","code":"chains(object) # S4 method for class 'MCMCParams' show(object) # S4 method for class 'ComponentParam' show(object) # S4 method for class 'MCMCChain' show(object) # S4 method for class 'MCMCChains' length(x) # S4 method for class 'MCMCParams' length(x) # S4 method for class 'MCMCChains,ANY,ANY' x[[i, j = \"missing\", drop = \"missing\"]] # S4 method for class 'MCMCParams,ANY,ANY' x[[i, j = \"missing\", drop = \"missing\"]] # S4 method for class 'MCMCChains,ANY,ANY,ANY' x[i, j = \"missing\", drop = \"missing\"] # S4 method for class 'MCMCParams,ANY,ANY,ANY' x[i, j = \"missing\", drop = \"missing\"] # S4 method for class 'MCMCChains' show(object)"},{"path":"https://lgatto.github.io/pRoloc/reference/MCMCParams.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Instrastructure to store and process MCMC results — MCMCChains-class","text":"object instance appropriate class. x Object subset. integer(). length 1 [[. j Missing. drop Missing.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/MCMCParams.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Instrastructure to store and process MCMC results — MCMCChains-class","text":"Objects MCMCParams class created tagmMcmcTrain() function. objects store priors generative TAGM model results MCMC chains, stored instance class MCMCChains can accessed chains() function. summary MCMC chains (class MCMCSummary) can computed tagmMcmcProcess() function. See pRoloc-bayesian vignette examples.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/MCMCParams.html","id":"slots","dir":"Reference","previous_headings":"","what":"Slots","title":"Instrastructure to store and process MCMC results — MCMCChains-class","text":"chains list() containing individual full MCMC chain results MCMCChains instance. element must valid MCMCChain instance. posteriorEstimates data.frame documenting prosterior priors MCMCSummary instance. contains N rows columns tagm.allocation, tagm.probability, tagm.outlier, tagm.probability.lowerquantile, tagm.probability.upperquantile tagm.mean.shannon. diagnostics matrix dimensions 1 2 containing MCMCSummary diagnostics. tagm.joint matrix dimensions N K storing joint probability MCMCSummary instance. method character(1) describing method MCMCParams object. chains Object class MCMCChains containing full MCMC chain results stored MCMCParams object. priors list() summary Object class MCMCSummary summarised MCMC results available MCMCParams instance. n integer(1) indicating number MCMC interactions. Stored MCMCChain instance. K integer(1) indicating number components. Stored MCMCChain instance. N integer(1) indicating number proteins. Stored MCMCChain instance. Component matrix(N, n) component allocation results MCMCChain instance. ComponentProb matrix(N, n, K) component allocation probabilities MCMCChain instance. Outlier matrix(N, n) outlier allocation results. OutlierProb matrix(N, n, 2) outlier allocation probabilities MCMCChain instance.","code":""},{"path":[]},{"path":"https://lgatto.github.io/pRoloc/reference/MLearn-methods.html","id":null,"dir":"Reference","previous_headings":"","what":"The MLearn interface for machine learning — MLearn-methods","title":"The MLearn interface for machine learning — MLearn-methods","text":"method implements MLInterfaces' MLean method instances class \"MSnSet\".","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/MLearn-methods.html","id":"methods","dir":"Reference","previous_headings":"","what":"Methods","title":"The MLearn interface for machine learning — MLearn-methods","text":"signature(formula = \"formula\", data = \"MSnSet\", .method \t= \"learnerSchema\", trainInd = \"numeric\") learning problem stated formula applies .method schema MSnSet data input using trainInd numeric indices train data. signature(formula = \"formula\", data = \"MSnSet\", .method \t= \"learnerSchema\", trainInd = \"xvalSpec\") case, instance xvalSpec used cross-validation. signature(formula = \"formula\", data = \"MSnSet\", .method \t= \"clusteringSchema\", trainInd = \"missing\") Hierarchical (hclustI), k-means (kmeansI) partitioning around medoids (pamI) clustering algorithms using MLInterface's MLearn interface.","code":""},{"path":[]},{"path":"https://lgatto.github.io/pRoloc/reference/MartInstance-class.html","id":null,"dir":"Reference","previous_headings":"","what":"Class ","title":"Class ","text":"Internal infrastructure query/handle several individual mart instance. See MartInterface.R details.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/MartInstance-class.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Class ","text":"Laurent Gatto ","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/QSep-class.html","id":null,"dir":"Reference","previous_headings":"","what":"Quantify resolution of a spatial proteomics experiment — QSep-class","title":"Quantify resolution of a spatial proteomics experiment — QSep-class","text":"QSep infrastructure provide way quantify resolution spatial proteomics experiment, .e. quantify well annotated sub-cellular clusters separated . QSep function calculates within cluster average distances. distances divided column-wise respective within cluster average distance. example, dataset 2 spatial clusters, obtain Normalised distance represent ratio within average distances, .e. much bigger average distance cluster \\(c_i\\) \\(c_j\\) compared average distance within cluster \\(c_i\\). Note normalised distance matrix symmetric anymore normalised distance ratios proportional tightness reference cluster (along columns). Missing values affect fractions containing NA distance computed (see example ) used calculating mean distances. missing values expected negligible effect, data high proportion missing data produce skewed distances. QSep, take conservative approach, using data provided user, expect data missingness handled proceeding analysis.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/QSep-class.html","id":"objects-from-the-class","dir":"Reference","previous_headings":"","what":"Objects from the Class","title":"Quantify resolution of a spatial proteomics experiment — QSep-class","text":"Objects can created calls using constructor QSep (see ).","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/QSep-class.html","id":"slots","dir":"Reference","previous_headings":"","what":"Slots","title":"Quantify resolution of a spatial proteomics experiment — QSep-class","text":"x: Object class \"matrix\" containing pairwise distance matrix, accessible qseq(., norm = FALSE). xnorm: Object class \"matrix\" containing normalised pairwise distance matrix, accessible qsep(., \tnorm = TRUE) qsep(.). object: Object class \"character\" variable name MSnSet object used generate QSep object. .__classVersion__: Object class \"Versions\" storing class version object.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/QSep-class.html","id":"extends","dir":"Reference","previous_headings":"","what":"Extends","title":"Quantify resolution of a spatial proteomics experiment — QSep-class","text":"Class \"Versioned\", directly.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/QSep-class.html","id":"methods-and-functions","dir":"Reference","previous_headings":"","what":"Methods and functions","title":"Quantify resolution of a spatial proteomics experiment — QSep-class","text":"QSeq signature(object = \"MSnSet\", fcol = \"character\"): constructor QSep objects. fcol argument defines name feature variable annotates sub-cellular clusters. Non-marker proteins, marked \"unknown\" automatically removed prior distance calculation. qsep signature{object = \"QSep\", norm = \"logical\"}: accessor normalised (norm TRUE, default) raw (norm FALSE) pairwise distance matrices. names signature{object = \"QSep\"}: method retrieve names sub-celluar clusters originally defined QSep's fcol argument. replacement method names(.) <- also available. summary signature(object = \"QSep\", ..., verbose = \t\"logical\"): Invisible return cluster average distances prints (verbose TRUE, default) summary . levelPlot signature(object = \"QSep\", norm = \"logical\", \t...): plots annotated heatmap normalised pairwise \tdistances. norm (default TRUE) defines whether \tnormalised distances plotted. Additional arguments \t... passed levelplot. plot signature(object = \"QSep\", norm = \"logical\"...): produces boxplot normalised pairwise distances. red points represent within average distance black points average distances. norm (default TRUE) defines whether normalised distances plotted.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/QSep-class.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Quantify resolution of a spatial proteomics experiment — QSep-class","text":"Assessing sub-cellular resolution spatial proteomics experiments Laurent Gatto, Lisa M Breckels, Kathryn S Lilley bioRxiv 377630; doi: https://doi.org/10.1101/377630","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/QSep-class.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Quantify resolution of a spatial proteomics experiment — QSep-class","text":"Laurent Gatto ","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/QSep-class.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Quantify resolution of a spatial proteomics experiment — QSep-class","text":"","code":"## Test data from Christoforou et al. 2016 library(\"pRolocdata\") data(hyperLOPIT2015) ## Create the object and get a summary hlq <- QSep(hyperLOPIT2015) hlq #> Object of class 'QSep'. #> Data: hyperLOPIT2015 #> With 14 sub-cellular clusters. summary(hlq) #> Min. 1st Qu. Median Mean 3rd Qu. Max. #> 0.9458 3.6189 4.9075 5.1172 6.5779 11.4970 ## mean distance matrix qsep(hlq, norm = FALSE) #> Actin cytoskeleton #> Actin cytoskeleton 0.1372312 #> Endoplasmic reticulum/Golgi apparatus 0.4690770 #> Mitochondrion 0.7536736 #> Extracellular matrix 0.4030989 #> Nucleus - Chromatin 0.8050828 #> Cytosol 0.5661409 #> Plasma membrane 0.2164849 #> Nucleus - Non-chromatin 0.7485378 #> Endosome 0.3955070 #> 60S Ribosome 0.4991471 #> Lysosome 0.3924089 #> Peroxisome 0.6861757 #> 40S Ribosome 0.5657759 #> Proteasome 0.6686545 #> Endoplasmic reticulum/Golgi apparatus #> Actin cytoskeleton 0.4690770 #> Endoplasmic reticulum/Golgi apparatus 0.1315295 #> Mitochondrion 0.4961792 #> Extracellular matrix 0.1676919 #> Nucleus - Chromatin 0.6674186 #> Cytosol 0.8032906 #> Plasma membrane 0.4314796 #> Nucleus - Non-chromatin 0.7266946 #> Endosome 0.3298215 #> 60S Ribosome 0.4405743 #> Lysosome 0.3526493 #> Peroxisome 0.4138766 #> 40S Ribosome 0.6106558 #> Proteasome 0.8685051 #> Mitochondrion Extracellular matrix #> Actin cytoskeleton 0.7536736 0.4030989 #> Endoplasmic reticulum/Golgi apparatus 0.4961792 0.1676919 #> Mitochondrion 0.1373421 0.5455040 #> Extracellular matrix 0.5455040 0.1053434 #> Nucleus - Chromatin 0.5424170 0.6929457 #> Cytosol 0.9585277 0.7755911 #> Plasma membrane 0.7462545 0.3556568 #> Nucleus - Non-chromatin 0.7106804 0.7267853 #> Endosome 0.7198622 0.2420721 #> 60S Ribosome 0.5168101 0.4430401 #> Lysosome 0.7471831 0.2483814 #> Peroxisome 0.2418018 0.4724549 #> 40S Ribosome 0.6601247 0.6060881 #> Proteasome 0.9917128 0.8497961 #> Nucleus - Chromatin Cytosol #> Actin cytoskeleton 0.8050828 0.5661409 #> Endoplasmic reticulum/Golgi apparatus 0.6674186 0.8032906 #> Mitochondrion 0.5424170 0.9585277 #> Extracellular matrix 0.6929457 0.7755911 #> Nucleus - Chromatin 0.1463443 0.9484646 #> Cytosol 0.9484646 0.1414339 #> Plasma membrane 0.8341281 0.7443767 #> Nucleus - Non-chromatin 0.4154339 0.7974210 #> Endosome 0.8226749 0.7826439 #> 60S Ribosome 0.5602938 0.6438972 #> Lysosome 0.8451732 0.7995801 #> Peroxisome 0.5094584 0.9068309 #> 40S Ribosome 0.6518274 0.5331764 #> Proteasome 0.9718751 0.1600117 #> Plasma membrane Nucleus - Non-chromatin #> Actin cytoskeleton 0.2164849 0.7485378 #> Endoplasmic reticulum/Golgi apparatus 0.4314796 0.7266946 #> Mitochondrion 0.7462545 0.7106804 #> Extracellular matrix 0.3556568 0.7267853 #> Nucleus - Chromatin 0.8341281 0.4154339 #> Cytosol 0.7443767 0.7974210 #> Plasma membrane 0.1148277 0.8199944 #> Nucleus - Non-chromatin 0.8199944 0.1783578 #> Endosome 0.3425939 0.8135370 #> 60S Ribosome 0.5616175 0.4546378 #> Lysosome 0.3274954 0.8365127 #> Peroxisome 0.6788467 0.6518952 #> 40S Ribosome 0.6760487 0.4643483 #> Proteasome 0.8444952 0.8064265 #> Endosome 60S Ribosome Lysosome #> Actin cytoskeleton 0.3955070 0.49914711 0.3924089 #> Endoplasmic reticulum/Golgi apparatus 0.3298215 0.44057429 0.3526493 #> Mitochondrion 0.7198622 0.51681006 0.7471831 #> Extracellular matrix 0.2420721 0.44304012 0.2483814 #> Nucleus - Chromatin 0.8226749 0.56029383 0.8451732 #> Cytosol 0.7826439 0.64389721 0.7995801 #> Plasma membrane 0.3425939 0.56161748 0.3274954 #> Nucleus - Non-chromatin 0.8135370 0.45463783 0.8365127 #> Endosome 0.1804409 0.54561425 0.1706577 #> 60S Ribosome 0.5456143 0.08250087 0.5709784 #> Lysosome 0.1706577 0.57097838 0.1023701 #> Peroxisome 0.6442550 0.41710740 0.6716427 #> 40S Ribosome 0.6762709 0.22048766 0.7022256 #> Proteasome 0.8642925 0.67687443 0.8858795 #> Peroxisome 40S Ribosome Proteasome #> Actin cytoskeleton 0.6861757 0.56577585 0.66865454 #> Endoplasmic reticulum/Golgi apparatus 0.4138766 0.61065583 0.86850511 #> Mitochondrion 0.2418018 0.66012471 0.99171284 #> Extracellular matrix 0.4724549 0.60608808 0.84979611 #> Nucleus - Chromatin 0.5094584 0.65182738 0.97187508 #> Cytosol 0.9068309 0.53317641 0.16001172 #> Plasma membrane 0.6788467 0.67604868 0.84449520 #> Nucleus - Non-chromatin 0.6518952 0.46434826 0.80642652 #> Endosome 0.6442550 0.67627087 0.86429254 #> 60S Ribosome 0.4171074 0.22048766 0.67687443 #> Lysosome 0.6716427 0.70222557 0.88587953 #> Peroxisome 0.1378630 0.57564364 0.94187426 #> 40S Ribosome 0.5756436 0.08388726 0.53905744 #> Proteasome 0.9418743 0.53905744 0.08625819 ## normalised average distance matrix qsep(hlq) #> Actin cytoskeleton #> Actin cytoskeleton 1.000000 #> Endoplasmic reticulum/Golgi apparatus 3.566325 #> Mitochondrion 5.487565 #> Extracellular matrix 3.826523 #> Nucleus - Chromatin 5.501293 #> Cytosol 4.002866 #> Plasma membrane 1.885302 #> Nucleus - Non-chromatin 4.196833 #> Endosome 2.191892 #> 60S Ribosome 6.050204 #> Lysosome 3.833237 #> Peroxisome 4.977229 #> 40S Ribosome 6.744479 #> Proteasome 7.751780 #> Endoplasmic reticulum/Golgi apparatus #> Actin cytoskeleton 3.418152 #> Endoplasmic reticulum/Golgi apparatus 1.000000 #> Mitochondrion 3.612725 #> Extracellular matrix 1.591860 #> Nucleus - Chromatin 4.560606 #> Cytosol 5.679619 #> Plasma membrane 3.757626 #> Nucleus - Non-chromatin 4.074365 #> Endosome 1.827864 #> 60S Ribosome 5.340238 #> Lysosome 3.444845 #> Peroxisome 3.002086 #> 40S Ribosome 7.279483 #> Proteasome 10.068668 #> Mitochondrion Extracellular matrix #> Actin cytoskeleton 5.492000 2.937371 #> Endoplasmic reticulum/Golgi apparatus 3.772380 1.274937 #> Mitochondrion 1.000000 3.971864 #> Extracellular matrix 5.178342 1.000000 #> Nucleus - Chromatin 3.706445 4.735038 #> Cytosol 6.777214 5.483772 #> Plasma membrane 6.498905 3.097308 #> Nucleus - Non-chromatin 3.984578 4.074873 #> Endosome 3.989463 1.341559 #> 60S Ribosome 6.264298 5.370126 #> Lysosome 7.298839 2.426307 #> Peroxisome 1.753928 3.426989 #> 40S Ribosome 7.869189 7.225032 #> Proteasome 11.497028 9.851773 #> Nucleus - Chromatin Cytosol #> Actin cytoskeleton 5.866617 4.125454 #> Endoplasmic reticulum/Golgi apparatus 5.074288 6.107304 #> Mitochondrion 3.949387 6.979127 #> Extracellular matrix 6.577972 7.362505 #> Nucleus - Chromatin 1.000000 6.481050 #> Cytosol 6.706063 1.000000 #> Plasma membrane 7.264170 6.482553 #> Nucleus - Non-chromatin 2.329217 4.470907 #> Endosome 4.559249 4.337398 #> 60S Ribosome 6.791368 7.804732 #> Lysosome 8.256053 7.810677 #> Peroxisome 3.695397 6.577769 #> 40S Ribosome 7.770279 6.355869 #> Proteasome 11.267046 1.855032 #> Plasma membrane Nucleus - Non-chromatin #> Actin cytoskeleton 1.577520 5.454575 #> Endoplasmic reticulum/Golgi apparatus 3.280478 5.524955 #> Mitochondrion 5.433546 5.174528 #> Extracellular matrix 3.376167 6.899202 #> Nucleus - Chromatin 5.699765 2.838743 #> Cytosol 5.263072 5.638118 #> Plasma membrane 1.000000 7.141084 #> Nucleus - Non-chromatin 4.597470 1.000000 #> Endosome 1.898649 4.508607 #> 60S Ribosome 6.807412 5.510703 #> Lysosome 3.199131 8.171452 #> Peroxisome 4.924068 4.728573 #> 40S Ribosome 8.059015 5.535385 #> Proteasome 9.790319 9.348985 #> Endosome 60S Ribosome Lysosome #> Actin cytoskeleton 2.882049 3.637272 2.859474 #> Endoplasmic reticulum/Golgi apparatus 2.507586 3.349623 2.681142 #> Mitochondrion 5.241381 3.762940 5.440307 #> Extracellular matrix 2.297934 4.205676 2.357826 #> Nucleus - Chromatin 5.621503 3.828601 5.775239 #> Cytosol 5.533638 4.552637 5.653384 #> Plasma membrane 2.983548 4.890957 2.852059 #> Nucleus - Non-chromatin 4.561265 2.549022 4.690083 #> Endosome 1.000000 3.023784 0.945782 #> 60S Ribosome 6.613436 1.000000 6.920877 #> Lysosome 1.667066 5.577587 1.000000 #> Peroxisome 4.673155 3.025521 4.871813 #> 40S Ribosome 8.061664 2.628381 8.371064 #> Proteasome 10.019831 7.847074 10.270091 #> Peroxisome 40S Ribosome Proteasome #> Actin cytoskeleton 5.000144 4.122794 4.872468 #> Endoplasmic reticulum/Golgi apparatus 3.146645 4.642729 6.603120 #> Mitochondrion 1.760581 4.806427 7.220750 #> Extracellular matrix 4.484904 5.753452 8.066916 #> Nucleus - Chromatin 3.481232 4.454068 6.641018 #> Cytosol 6.411695 3.769793 1.131353 #> Plasma membrane 5.911872 5.887504 7.354454 #> Nucleus - Non-chromatin 3.654986 2.603465 4.521399 #> Endosome 3.570449 3.747880 4.789893 #> 60S Ribosome 5.055794 2.672549 8.204452 #> Lysosome 6.560924 6.859672 8.653691 #> Peroxisome 1.000000 4.175476 6.831959 #> 40S Ribosome 6.862111 1.000000 6.425975 #> Proteasome 10.919244 6.249348 1.000000 ## Update the organelle cluster names for better ## rendering on the plots names(hlq) <- sub(\"/\", \"\\n\", names(hlq)) names(hlq) <- sub(\" - \", \"\\n\", names(hlq)) names(hlq) #> [1] \"Actin cytoskeleton\" #> [2] \"Endoplasmic reticulum\\nGolgi apparatus\" #> [3] \"Mitochondrion\" #> [4] \"Extracellular matrix\" #> [5] \"Nucleus\\nChromatin\" #> [6] \"Cytosol\" #> [7] \"Plasma membrane\" #> [8] \"Nucleus\\nNon-chromatin\" #> [9] \"Endosome\" #> [10] \"60S Ribosome\" #> [11] \"Lysosome\" #> [12] \"Peroxisome\" #> [13] \"40S Ribosome\" #> [14] \"Proteasome\" ## Heatmap of the normalised intensities levelPlot(hlq) ## Boxplot of the normalised intensities par(mar = c(3, 10, 2, 1)) plot(hlq) ## Boxplot of all between cluster average distances x <- summary(hlq, verbose = FALSE) boxplot(x) ## Missing data example, for 4 proteins and 3 fractions x <- rbind(c(1.1, 1.2, 1.3), rep(1, 3), c(NA, 1, 1), c(1, 1, NA)) rownames(x) <- paste0(\"P\", 1:4) colnames(x) <- paste0(\"F\", 1:3) ## P1 is the reference, against which we will calculate distances. P2 ## has a complete profile, producing the *real* distance. P3 and P4 have ## missing values in the first and last fraction respectively. x #> F1 F2 F3 #> P1 1.1 1.2 1.3 #> P2 1.0 1.0 1.0 #> P3 NA 1.0 1.0 #> P4 1.0 1.0 NA ## If we drop F1 in P3, which represents a small difference of 0.1, the ## distance only considers F2 and F3, and increases. If we drop F3 in ## P4, which represents a large distance of 0.3, the distance only ## considers F1 and F2, and decreases. dist(x)"},{"path":"https://lgatto.github.io/pRoloc/reference/SpatProtVis-class.html","id":null,"dir":"Reference","previous_headings":"","what":"Class SpatProtVis — SpatProtVis-class","title":"Class SpatProtVis — SpatProtVis-class","text":"class spatial proteomics visualisation, upon instantiation, pre-computes defined visualisations. Objects can created SpatProtVis constructor visualised plot method. class essentially wrapper around several calls plot2D stores dimensionality reduction outputs, likely updated future.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/SpatProtVis-class.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Class SpatProtVis — SpatProtVis-class","text":"","code":"SpatProtVis(x, methods, dims, methargs, ...)"},{"path":"https://lgatto.github.io/pRoloc/reference/SpatProtVis-class.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Class SpatProtVis — SpatProtVis-class","text":"x instance class MSnSet visualise. methods Dimensionality reduction methods used visualise data. Must contained plot2Dmethods (except \"scree\"). See plot2D details. dims list numerics defining dimensions used plotting. Default 1 2. provided, length list must identical length methods. methargs list additional arguments passed visualisation method. provided, length list must identical length methods. ... Additional arguments. Currently ignored.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/SpatProtVis-class.html","id":"slots","dir":"Reference","previous_headings":"","what":"Slots","title":"Class SpatProtVis — SpatProtVis-class","text":"vismats: \"list\" matrices containing feature projections 2 dimensions. data: original spatial proteomics data stored \"MSnSet\". methargs: \"list\" additional plotting arguments. objname: \"character\" defining name dataset. default, set using variable name used object creation.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/SpatProtVis-class.html","id":"methods","dir":"Reference","previous_headings":"","what":"Methods","title":"Class SpatProtVis — SpatProtVis-class","text":"plot: Generates figures respective methods additional arguments defined constructor. used interactive session, user prompted press 'Return' new figures displayed. show: simple textual summary object.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/SpatProtVis-class.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Class SpatProtVis — SpatProtVis-class","text":"Laurent Gatto ","code":""},{"path":[]},{"path":"https://lgatto.github.io/pRoloc/reference/SpatProtVis-class.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Class SpatProtVis — SpatProtVis-class","text":"","code":"library(\"pRolocdata\") data(dunkley2006) ## Default parameters for a set of methods ## (in the interest of time, don't use t-SNE) m <- c(\"PCA\", \"MDS\", \"kpca\") vis <- SpatProtVis(dunkley2006, methods = m) #> Producting PCA visualisation... #> Producting MDS visualisation... #> Producting kpca visualisation... vis #> Object of class \"SpatProtVis\" #> Data: dunkley2006 #> Visualisation methods: PCA, MDS, kpca plot(vis) #> Done. plot(vis, legend = \"topleft\") #> Done. ## Setting method arguments margs <- c(list(kpar = list(sigma = 0.1)), list(kpar = list(sigma = 1.0)), list(kpar = list(sigma = 10)), list(kpar = list(sigma = 100))) vis <- SpatProtVis(dunkley2006, methods = rep(\"kpca\", 4), methargs = margs) #> Producting kpca visualisation... #> Producting kpca visualisation... #> Producting kpca visualisation... #> Producting kpca visualisation... par(mfrow = c(2, 2)) plot(vis) #> Done. ## Multiple PCA plots but different PCs dims <- list(c(1, 2), c(3, 4)) vis <- SpatProtVis(dunkley2006, methods = c(\"PCA\", \"PCA\"), dims = dims) #> Producting PCA visualisation... #> Producting PCA visualisation... plot(vis) #> Done."},{"path":"https://lgatto.github.io/pRoloc/reference/addGoAnnotations.html","id":null,"dir":"Reference","previous_headings":"","what":"Add GO annotations — addGoAnnotations","title":"Add GO annotations — addGoAnnotations","text":"Adds GO annotations feature data","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/addGoAnnotations.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Add GO annotations — addGoAnnotations","text":"","code":"addGoAnnotations( object, params, evidence, useID = FALSE, fcol = \"GOAnnotations\", ... )"},{"path":"https://lgatto.github.io/pRoloc/reference/addGoAnnotations.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Add GO annotations — addGoAnnotations","text":"object instance class MSnSet. params instance class AnnotationParams. missing, getAnnotationParams used. evidence GO evidence filtering. useID Logical. GO term names identifiers used? TRUE, identifiers used. FALSE GO term names used. fcol Character. Name matrix annotations added fData default GOAnnotations ... arguments passed makeGoSet","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/addGoAnnotations.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Add GO annotations — addGoAnnotations","text":"updated MSnSet new feature data column called GOAnnotations containing matrix GO annotations","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/addGoAnnotations.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Add GO annotations — addGoAnnotations","text":"Lisa M Breckels","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/addGoAnnotations.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Add GO annotations — addGoAnnotations","text":"","code":"library(pRolocdata) data(dunkley2006) par <- setAnnotationParams(inputs = c(\"Arabidopsis thaliana genes\", \"Gene stable ID\")) #> Using species Arabidopsis thaliana genes (TAIR10) #> Warning: Ensembl will soon enforce the use of https. #> Ensure the 'host' argument includes \"https://\" #> Using feature type Gene stable ID(s) [e.g. AT1G01010] #> Connecting to Biomart... #> Warning: Ensembl will soon enforce the use of https. #> Ensure the 'host' argument includes \"https://\" ## add protein sets/annotation information xx <- addGoAnnotations(dunkley2006, par) dim(fData(xx)$GOAnnotations) #> [1] 689 79 ## filter sets xx <- filterMinMarkers(xx, n = 50) #> Retaining 3 out of 79 in GOAnnotations dim(fData(xx)$GOAnnotations) #> [1] 689 3 xx <- filterMaxMarkers(xx, p = .25) #> Retaining 2 out of 3 in GOAnnotations dim(fData(xx)$GOAnnotations) #> [1] 689 2 ## Subset for specific protein sets sub <- subsetMarkers(xx, keep = c(\"vacuole\")) #> Warning: GO markers vacuole not found ## Order protein sets res <- orderGoAnnotations(xx, k = 1:3, p = 1/3, verbose = FALSE) #> Calculating GO cluster densities if (interactive()) { pRolocVis(res, fcol = \"GOAnnotations\") }"},{"path":"https://lgatto.github.io/pRoloc/reference/addLegend.html","id":null,"dir":"Reference","previous_headings":"","what":"Adds a legend — addLegend","title":"Adds a legend — addLegend","text":"Adds legend plot2D figure.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/addLegend.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Adds a legend — addLegend","text":"","code":"addLegend( object, fcol = \"markers\", where = c(\"bottomleft\", \"bottom\", \"bottomright\", \"left\", \"topleft\", \"top\", \"topright\", \"right\", \"center\", \"other\"), col, bty = \"n\", ... )"},{"path":"https://lgatto.github.io/pRoloc/reference/addLegend.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Adds a legend — addLegend","text":"object instance class MSnSet fcol Feature meta-data label (fData column name) defining groups differentiated using different colours. Default markers. One \"bottomleft\" (default), \"bottomright\", \"topleft\", \"topright\" \"\" defining location legend. \"\" opens new graphics device, locations passed legend. col character defining point colours. bty Box type, legend. Default set \"n\". ... Additional parameters passed legend.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/addLegend.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Adds a legend — addLegend","text":"Invisibly returns NULL","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/addLegend.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Adds a legend — addLegend","text":"function updated version 1.3.6 recycle default colours organelle classes provided. See plot2D details.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/addLegend.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Adds a legend — addLegend","text":"Laurent Gatto","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/addMarkers.html","id":null,"dir":"Reference","previous_headings":"","what":"Adds markers to the data — addMarkers","title":"Adds markers to the data — addMarkers","text":"function adds 'markers' feature variable. markers read comma separated values (csv) spreadsheet file. markers file expected 2 columns (others ignored) first name marker features second group label. Alternatively, markers named vector provided pRolocmarkers function can also used.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/addMarkers.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Adds markers to the data — addMarkers","text":"","code":"addMarkers(object, markers, mcol = \"markers\", fcol, verbose = TRUE)"},{"path":"https://lgatto.github.io/pRoloc/reference/addMarkers.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Adds markers to the data — addMarkers","text":"object instance class MSnSet. markers character name markers' csv file named character markers provided pRolocmarkers. mcol character length 1 defining feature variable label newly added markers. Default \"markers\". fcol optional feature variable used match markers. missing, feature names used. verbose logical indicating number markers marker table printed console.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/addMarkers.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Adds markers to the data — addMarkers","text":"new instance class MSnSet additional markers feature variable.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/addMarkers.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Adds markers to the data — addMarkers","text":"essential assure featureNames(object) (fcol, see ) marker names (first column) match, .e. feature identifiers case fold used.","code":""},{"path":[]},{"path":"https://lgatto.github.io/pRoloc/reference/addMarkers.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Adds markers to the data — addMarkers","text":"Laurent Gatto","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/addMarkers.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Adds markers to the data — addMarkers","text":"","code":"library(\"pRolocdata\") data(dunkley2006) atha <- pRolocmarkers(\"atha\") try(addMarkers(dunkley2006, atha)) ## markers already exists #> Error in addMarkers(dunkley2006, atha) : #> Detected an existing 'markers' feature column. fData(dunkley2006)$markers.org <- fData(dunkley2006)$markers fData(dunkley2006)$markers <- NULL marked <- addMarkers(dunkley2006, atha) #> Markers in data: 255 out of 689 #> organelleMarkers #> ER ER Lumen ER Membrane Envelope Golgi #> 21 9 42 3 27 #> Mitochondrion PM Plastid Ribosome STR #> 50 42 22 8 2 #> TGN Vacuole unknown #> 13 16 434 fvarLabels(marked) #> [1] \"assigned\" \"evidence\" \"method\" \"new\" \"pd.2013\" #> [6] \"pd.markers\" \"markers.orig\" \"markers.org\" \"markers\" ## if 'makers' already exists marked <- addMarkers(marked, atha, mcol = \"markers2\") #> Markers in data: 255 out of 689 #> organelleMarkers #> ER ER Lumen ER Membrane Envelope Golgi #> 21 9 42 3 27 #> Mitochondrion PM Plastid Ribosome STR #> 50 42 22 8 2 #> TGN Vacuole unknown #> 13 16 434 fvarLabels(marked) #> [1] \"assigned\" \"evidence\" \"method\" \"new\" \"pd.2013\" #> [6] \"pd.markers\" \"markers.orig\" \"markers.org\" \"markers\" \"markers2\" stopifnot(all.equal(fData(marked)$markers, fData(marked)$markers2)) plot2D(marked) addLegend(marked, where = \"topleft\", cex = .7)"},{"path":"https://lgatto.github.io/pRoloc/reference/checkFeatureNamesOverlap.html","id":null,"dir":"Reference","previous_headings":"","what":"Check feature names overlap — checkFeatureNamesOverlap","title":"Check feature names overlap — checkFeatureNamesOverlap","text":"Checks marker unknown feature overlap two MSnSet instances.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/checkFeatureNamesOverlap.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Check feature names overlap — checkFeatureNamesOverlap","text":"","code":"checkFeatureNamesOverlap(x, y, fcolx = \"markers\", fcoly, verbose = TRUE)"},{"path":"https://lgatto.github.io/pRoloc/reference/checkFeatureNamesOverlap.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Check feature names overlap — checkFeatureNamesOverlap","text":"x MSnSet instance. y MSnSet instance. fcolx feature variable separate unknown (fData(y)$coly == \"unknown\") marker features x object. fcoly fcolx, y object. missing, value fcolx used. verbose TRUE (default), overlap printed console.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/checkFeatureNamesOverlap.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Check feature names overlap — checkFeatureNamesOverlap","text":"Invisibly returns named list common markers, unique x markers, unique y markers , common unknowns, unique x unknowns unique y unknowns.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/checkFeatureNamesOverlap.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Check feature names overlap — checkFeatureNamesOverlap","text":"Laurent Gatto","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/checkFeatureNamesOverlap.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Check feature names overlap — checkFeatureNamesOverlap","text":"","code":"library(\"pRolocdata\") data(andy2011) data(andy2011goCC) checkFeatureNamesOverlap(andy2011, andy2011goCC) #> Common markers: 404 #> Unique x markers: 0 #> Unique y markers: 0 #> Common unkowns: 967 #> Unique x unknowns: 0 #> Unique y unknowns: 0 featureNames(andy2011goCC)[1] <- \"ABC\" res <- checkFeatureNamesOverlap(andy2011, andy2011goCC) #> Common markers: 403 #> Unique x markers: 1 #> Unique y markers: 1 #> Common unkowns: 967 #> Unique x unknowns: 0 #> Unique y unknowns: 0 res$markersX #> [1] \"O00767\" res$markersY #> [1] \"ABC\""},{"path":"https://lgatto.github.io/pRoloc/reference/checkFvarOverlap.html","id":null,"dir":"Reference","previous_headings":"","what":"Compare a feature variable overlap — checkFvarOverlap","title":"Compare a feature variable overlap — checkFvarOverlap","text":"Extracts qualitative feature variables two MSnSet instances compares contingency table.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/checkFvarOverlap.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Compare a feature variable overlap — checkFvarOverlap","text":"","code":"checkFvarOverlap(x, y, fcolx = \"markers\", fcoly, verbose = TRUE)"},{"path":"https://lgatto.github.io/pRoloc/reference/checkFvarOverlap.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Compare a feature variable overlap — checkFvarOverlap","text":"x MSnSet instance. y MSnSet instance. fcolx feature variable separate unknown (fData(y)$coly == \"unknown\") marker features x object. fcoly fcolx, y object. missing, value fcolx used. verbose TRUE (default), contingency table feature variables printed .","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/checkFvarOverlap.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Compare a feature variable overlap — checkFvarOverlap","text":"Invisibly returns named list values diagonal, upper lower triangles contingency table.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/checkFvarOverlap.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Compare a feature variable overlap — checkFvarOverlap","text":"Laurent Gatto","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/checkFvarOverlap.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Compare a feature variable overlap — checkFvarOverlap","text":"","code":"library(\"pRolocdata\") data(dunkley2006) res <- checkFvarOverlap(dunkley2006, dunkley2006, \"markers\", \"markers.orig\") #> my #> mx ER Golgi PM mit/plastid unknown vacuole #> ER lumen 11 0 0 0 3 0 #> ER membrane 21 0 0 0 24 0 #> Golgi 0 27 0 0 1 0 #> Mitochondrion 0 0 0 13 42 0 #> PM 0 0 28 0 18 0 #> Plastid 0 0 0 7 13 0 #> Ribosome 0 0 0 0 19 0 #> TGN 0 0 0 0 13 0 #> unknown 17 0 0 6 405 0 #> vacuole 0 0 0 0 9 12 str(res) #> List of 3 #> $ matches : int [1:6] 11 0 0 13 18 0 #> $ lower.mismatches: int [1:39] 21 0 0 0 0 0 0 17 0 27 ... #> $ upper.mismatches: int [1:39] 21 0 0 0 0 0 0 17 0 27 ..."},{"path":"https://lgatto.github.io/pRoloc/reference/chi2-methods.html","id":null,"dir":"Reference","previous_headings":"","what":"The PCP 'chi square' method — chi2-methods","title":"The PCP 'chi square' method — chi2-methods","text":"original protein correlation profiling (PCP), Andersen et al. use peptide normalised profiles along gradient fractions compared reference profiles (set profiles) computing \\(Chi^2\\) values, \\(\\frac{\\sum (x_i - x_p)^2}{x_p}\\), \\(x_i\\) normalised value peptide fraction \\(x_p\\) value marker (Wiese et al., 2007). protein \\(Chi^2\\) computed median peptide \\(Chi^2\\) values. Peptides proteins similar profiles markers small \\(Chi^2\\) values. chi2 methods implement idea compute Chi^2 values sets proteins.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/chi2-methods.html","id":"methods","dir":"Reference","previous_headings":"","what":"Methods","title":"The PCP 'chi square' method — chi2-methods","text":"signature(x = \"matrix\", y = \"matrix\", method = \t\"character\", fun = \"NULL\", na.rm = \"logical\") Compute nrow(x) times nrow(y) \\(Chi^2\\) values, x, y feature pair. Method one \"Andersen2003\" \"Wiese2007\"; former (default) computed \\(Chi^2\\) sum(y-x)^2/length(x), latter uses sum((y-x)^2/x). na.rm defines missing values (NA NaN) removed prior summation. fun defines summarise \\(Chi^2\\) values; default, NULL, combine \\(Chi^2\\) values. signature(x = \"matrix\", y = \"numeric\", method = \t\"character\", na.rm = \"logical\") Computes nrow(x) \\(Chi^2\\) values, \\((x_i, \ty)\\) pairs. See arguments. signature(x = \"numeric\", y = \"matrix\", method = \t\"character\", na.rm = \"logical\") Computes nrow(y) \\(Chi^2\\) values, \\((x, \ty_i)\\) pairs. See arguments. signature(x = \"numeric\", y = \"numeric\", method = \t\"character\", na.rm = \"logical\") Computes \\(Chi^2\\) value \\((x, y)\\) pairs. See arguments.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/chi2-methods.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"The PCP 'chi square' method — chi2-methods","text":"Andersen, J. S., Wilkinson, C. J., Mayor, T., Mortensen, P. et al., Proteomic characterization human centrosome protein correlation profiling. Nature 2003, 426, 570 - 574. Wiese, S., Gronemeyer, T., Ofman, R., Kunze, M. et al., Proteomics characterization mouse kidney peroxisomes tandem mass spectrometry protein correlation profiling. Mol. Cell. Proteomics 2007, 6, 2045 - 2057.","code":""},{"path":[]},{"path":"https://lgatto.github.io/pRoloc/reference/chi2-methods.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"The PCP 'chi square' method — chi2-methods","text":"Laurent Gatto ","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/chi2-methods.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"The PCP 'chi square' method — chi2-methods","text":"","code":"mrk <- rnorm(6) prot <- matrix(rnorm(60), ncol = 6) chi2(mrk, prot, method = \"Andersen2003\") #> [1] 1.889892 4.245629 3.462126 3.920920 1.775587 4.896485 3.378966 3.712108 #> [9] 3.825797 2.702991 chi2(mrk, prot, method = \"Wiese2007\") #> [1] -3.159876 11.164487 -11.367923 2.059008 -2.893832 2.777984 #> [7] -10.243224 4.752001 5.091183 -1.412432 pepmark <- matrix(rnorm(18), ncol = 6) pepprot <- matrix(rnorm(60), ncol = 6) chi2(pepmark, pepprot) #> [,1] [,2] [,3] #> [1,] 1.1599707 0.8097051 2.1489121 #> [2,] 1.1419376 1.5022289 1.6690684 #> [3,] 0.9912393 2.6529197 0.9081877 #> [4,] 1.0178592 1.5370036 1.0208939 #> [5,] 2.0740377 5.3225284 2.2989775 #> [6,] 1.7693526 0.5850152 1.7361577 #> [7,] 1.7893898 1.9202860 1.4503931 #> [8,] 0.5207063 1.7531744 0.3803269 #> [9,] 0.5394268 1.1915734 0.8901226 #> [10,] 0.7455153 0.7556420 1.2791638 chi2(pepmark, pepprot, fun = sum) #> [1] 4.118588 4.313235 4.552347 3.575757 9.695544 4.090525 5.160069 2.654208 #> [9] 2.621123 2.780321"},{"path":"https://lgatto.github.io/pRoloc/reference/classWeights.html","id":null,"dir":"Reference","previous_headings":"","what":"Calculate class weights — classWeights","title":"Calculate class weights — classWeights","text":"Calculates class weights used parameter optimisation classification svmOptimisation svmClassification - see pRoloc tutorial vignette example. weights calculated non-unknown classes inverse number observations.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/classWeights.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Calculate class weights — classWeights","text":"","code":"classWeights(object, fcol = \"markers\")"},{"path":"https://lgatto.github.io/pRoloc/reference/classWeights.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Calculate class weights — classWeights","text":"object instance class MSnSet fcol name features weighted","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/classWeights.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Calculate class weights — classWeights","text":"table class weights","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/classWeights.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Calculate class weights — classWeights","text":"Laurent Gatto","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/classWeights.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Calculate class weights — classWeights","text":"","code":"library(\"pRolocdata\") data(hyperLOPIT2015) classWeights(hyperLOPIT2015) #> #> 40S Ribosome 60S Ribosome #> 0.037037037 0.023255814 #> Actin cytoskeleton Cytosol #> 0.076923077 0.023255814 #> Endoplasmic reticulum/Golgi apparatus Endosome #> 0.009345794 0.076923077 #> Extracellular matrix Lysosome #> 0.076923077 0.030303030 #> Mitochondrion Nucleus - Chromatin #> 0.002610966 0.015625000 #> Nucleus - Non-chromatin Peroxisome #> 0.011764706 0.058823529 #> Plasma membrane Proteasome #> 0.019607843 0.029411765 data(dunkley2006) classWeights(dunkley2006) #> #> ER lumen ER membrane Golgi Mitochondrion PM #> 0.07142857 0.02222222 0.03571429 0.01818182 0.02173913 #> Plastid Ribosome TGN vacuole #> 0.05000000 0.05263158 0.07692308 0.04761905"},{"path":"https://lgatto.github.io/pRoloc/reference/clustDist.html","id":null,"dir":"Reference","previous_headings":"","what":"Pairwise Distance Computation for Protein Information Sets — clustDist","title":"Pairwise Distance Computation for Protein Information Sets — clustDist","text":"function computes mean (normalised) pairwise distances pre-defined sets proteins.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/clustDist.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Pairwise Distance Computation for Protein Information Sets — clustDist","text":"","code":"clustDist(object, k = 1:5, fcol = \"GOAnnotations\", n = 5, verbose = TRUE, seed)"},{"path":"https://lgatto.github.io/pRoloc/reference/clustDist.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Pairwise Distance Computation for Protein Information Sets — clustDist","text":"object instance class \"MSnSet\". k number clusters try fitting protein set. Default k = 1:5. fcol feature meta-data containing matrix protein sets/ marker definitions. Default GOAnnotations. n minimum number proteins per set. protein sets contain less n instances ignored. Defualt 5. verbose logical defining whether progress bar displayed. seed optional seed random number generator.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/clustDist.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Pairwise Distance Computation for Protein Information Sets — clustDist","text":"instance \"ClustDistList\" containing \"ClustDist\" instance every protein set, summarises algorithm information number k's tested kmeans, mean normalised pairwise Euclidean distances per numer component clusters tested.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/clustDist.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Pairwise Distance Computation for Protein Information Sets — clustDist","text":"input function MSnSet dataset containing matrix appended feature data slot identifying membership protein instances pre-defined set(s) e.g. specific Gene Ontology term etc. protein set, clustDist function () extracts instances belonging set, (ii) using kmeans algorithm fits tests k = c(1:5) (default) cluster components set, (iii) calculates mean pairwise distance k tested. Note: currently distances calcualted Euclidean space, distance metrics supported future). output list ClustDist objects, one per information cluster. ClustDist class summarises algorithm information number k's tested kmeans, mean normalised pairwise Euclidean distances per numer component clusters tested. See ?ClustDist details.","code":""},{"path":[]},{"path":"https://lgatto.github.io/pRoloc/reference/clustDist.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Pairwise Distance Computation for Protein Information Sets — clustDist","text":"Lisa Breckels","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/clustDist.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Pairwise Distance Computation for Protein Information Sets — clustDist","text":"","code":"library(pRolocdata) data(dunkley2006) par <- setAnnotationParams(inputs = c(\"Arabidopsis thaliana genes\", \"Gene stable ID\")) #> Using species Arabidopsis thaliana genes (TAIR10) #> Warning: Ensembl will soon enforce the use of https. #> Ensure the 'host' argument includes \"https://\" #> Using feature type Gene stable ID(s) [e.g. AT1G01010] #> Connecting to Biomart... #> Warning: Ensembl will soon enforce the use of https. #> Ensure the 'host' argument includes \"https://\" ## add protein sets/annotation information xx <- addGoAnnotations(dunkley2006, par) ## filter xx <- filterMinMarkers(xx, n = 50) #> Retaining 3 out of 79 in GOAnnotations xx <- filterMaxMarkers(xx, p = .25) #> Retaining 2 out of 3 in GOAnnotations ## get distances for protein sets dd <- clustDist(xx) #> | | | 0% | |=================================== | 50% | |======================================================================| 100% ## plot clusters for first 'ClustDist' object ## in the 'ClustDistList' plot(dd[[1]], xx) ## plot distances for all protein sets plot(dd) ## Extract normalised distances ## Normalise by n^1/3 minDist <- getNormDist(dd, p = 1/3) ## Get new order according to lowest distance o <- order(minDist) ## Re-order GOAnnotations fData(xx)$GOAnnotations <- fData(xx)$GOAnnotations[, o] if (interactive()) { pRolocVis(xx, fcol = \"GOAnnotations\") }"},{"path":"https://lgatto.github.io/pRoloc/reference/defunct.html","id":null,"dir":"Reference","previous_headings":"","what":"pRoloc Deprecated and Defunct — Deprecated","title":"pRoloc Deprecated and Defunct — Deprecated","text":"function, class, data object asked deprecated made defunct. Deprecated: minClassScore; use replacement getPredictions Defunct: Deprecated functions provided compatibility older versions pRoloc package , defunct next release.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/empPvalues.html","id":null,"dir":"Reference","previous_headings":"","what":"Estimate empirical p-values for \\(Chi^2\\) protein correlations. — empPvalues","title":"Estimate empirical p-values for \\(Chi^2\\) protein correlations. — empPvalues","text":"Andersen et al. (2003) used fixed \\(Chi^2\\) threshold 0.05 identify organelle-specific candidates. function computes empirical p-values permutation markers relative intensities computed null \\(Chi^2\\) values.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/empPvalues.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Estimate empirical p-values for \\(Chi^2\\) protein correlations. — empPvalues","text":"","code":"empPvalues(marker, corMatrix, n = 100, ...)"},{"path":"https://lgatto.github.io/pRoloc/reference/empPvalues.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Estimate empirical p-values for \\(Chi^2\\) protein correlations. — empPvalues","text":"marker numerics markers relative intensities. corMatrix matrix nrow(corMatrix) protein relative intensities compares marker. n number iterations. ... Additional parameters passed chi2.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/empPvalues.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Estimate empirical p-values for \\(Chi^2\\) protein correlations. — empPvalues","text":"numeric length nrow(corMatrix).","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/empPvalues.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Estimate empirical p-values for \\(Chi^2\\) protein correlations. — empPvalues","text":"Laurent Gatto ","code":""},{"path":[]},{"path":"https://lgatto.github.io/pRoloc/reference/empPvalues.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Estimate empirical p-values for \\(Chi^2\\) protein correlations. — empPvalues","text":"Andersen, J. S., Wilkinson, C. J., Mayor, T., Mortensen, P. et al., Proteomic characterization human centrosome protein correlation profiling. Nature 2003, 426, 570 - 574.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/empPvalues.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Estimate empirical p-values for \\(Chi^2\\) protein correlations. — empPvalues","text":"","code":"set.seed(1) mrk <- rnorm(6, 5, 1) prot <- rbind(matrix(rnorm(120, 5, 1), ncol = 6), mrk + rnorm(6)) mrk <- mrk/sum(mrk) prot <- prot/rowSums(prot) empPvalues(mrk, prot) #> [1] 0.92 0.43 0.62 0.23 0.49 0.49 0.42 0.19 0.85 0.59 0.83 0.44 0.78 0.83 0.92 #> [16] 0.90 0.34 0.62 0.18 0.32 0.00"},{"path":"https://lgatto.github.io/pRoloc/reference/fDataToUnknown.html","id":null,"dir":"Reference","previous_headings":"","what":"Update a feature variable — fDataToUnknown","title":"Update a feature variable — fDataToUnknown","text":"function replaces string regular expression feature variable using sub function.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/fDataToUnknown.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Update a feature variable — fDataToUnknown","text":"","code":"fDataToUnknown(object, fcol = \"markers\", from = \"^$\", to = \"unknown\", ...)"},{"path":"https://lgatto.github.io/pRoloc/reference/fDataToUnknown.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Update a feature variable — fDataToUnknown","text":"object instance class MSnSet. fcol Feature variable modified. Default \"markers\". NULL, feature variables updated. character defining string regular expression pattern replaced. Default empty string, .e. regular expression \"^$\". See sub details. NA, NA values replaced . replacement matched pattern. Default \"unknown\". See sub details. ... Additional arguments passed sub.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/fDataToUnknown.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Update a feature variable — fDataToUnknown","text":"updated MSnSet.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/fDataToUnknown.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Update a feature variable — fDataToUnknown","text":"Laurent Gatto","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/fDataToUnknown.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Update a feature variable — fDataToUnknown","text":"","code":"library(\"pRolocdata\") data(dunkley2006) getMarkers(dunkley2006, \"markers\") #> organelleMarkers #> ER lumen ER membrane Golgi Mitochondrion PM #> 14 45 28 55 46 #> Plastid Ribosome TGN unknown vacuole #> 20 19 13 428 21 dunkley2006 <- fDataToUnknown(dunkley2006, from = \"unknown\", to = \"unassigned\") getMarkers(dunkley2006, \"markers\") #> organelleMarkers #> ER lumen ER membrane Golgi Mitochondrion PM #> 14 45 28 55 46 #> Plastid Ribosome TGN unassigned vacuole #> 20 19 13 428 21"},{"path":"https://lgatto.github.io/pRoloc/reference/filterBinMSnSet.html","id":null,"dir":"Reference","previous_headings":"","what":"Filter a binary MSnSet — filterBinMSnSet","title":"Filter a binary MSnSet — filterBinMSnSet","text":"Removes columns rows certain proportion absolute number 0 values.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/filterBinMSnSet.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Filter a binary MSnSet — filterBinMSnSet","text":"","code":"filterBinMSnSet(object, MARGIN = 2, t, q, verbose = TRUE)"},{"path":"https://lgatto.github.io/pRoloc/reference/filterBinMSnSet.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Filter a binary MSnSet — filterBinMSnSet","text":"object MSnSet MARGIN 1 2. Default 2. t Rows/columns t less 1s, filtered . t q missing, default use t = 1. q row higher quantile defined q, filtered . verbose logical defining message printed. Default TRUE.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/filterBinMSnSet.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Filter a binary MSnSet — filterBinMSnSet","text":"filtered MSnSet.","code":""},{"path":[]},{"path":"https://lgatto.github.io/pRoloc/reference/filterBinMSnSet.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Filter a binary MSnSet — filterBinMSnSet","text":"Laurent Gatto","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/filterBinMSnSet.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Filter a binary MSnSet — filterBinMSnSet","text":"","code":"set.seed(1) m <- matrix(sample(0:1, 25, replace=TRUE), 5) m[1, ] <- 0 m[, 1] <- 0 rownames(m) <- colnames(m) <- letters[1:5] fd <- data.frame(row.names = letters[1:5]) x <- MSnSet(exprs = m, fData = fd, pData = fd) exprs(x) #> a b c d e #> a 0 0 0 0 0 #> b 0 0 0 1 0 #> c 0 0 0 1 0 #> d 0 1 0 1 0 #> e 0 1 0 0 0 ## Remove columns with no 1s exprs(filterBinMSnSet(x, MARGIN = 2, t = 0)) #> Removing 3 column(s) #> b d #> a 0 0 #> b 0 1 #> c 0 1 #> d 1 1 #> e 1 0 ## Remove columns with one 1 or less exprs(filterBinMSnSet(x, MARGIN = 2, t = 1)) #> Removing 3 column(s) #> b d #> a 0 0 #> b 0 1 #> c 0 1 #> d 1 1 #> e 1 0 ## Remove columns with two 1s or less exprs(filterBinMSnSet(x, MARGIN = 2, t = 2)) #> Removing 4 column(s) #> d #> a 0 #> b 1 #> c 1 #> d 1 #> e 0 ## Remove columns with three 1s exprs(filterBinMSnSet(x, MARGIN = 2, t = 3)) #> Removing 5 column(s) #> #> a #> b #> c #> d #> e ## Remove columns that have half or less of 1s exprs(filterBinMSnSet(x, MARGIN = 2, q = 0.5)) #> Removing 3 column(s) #> b d #> a 0 0 #> b 0 1 #> c 0 1 #> d 1 1 #> e 1 0"},{"path":"https://lgatto.github.io/pRoloc/reference/filterMaxMarkers.html","id":null,"dir":"Reference","previous_headings":"","what":"Removes class/annotation information from a matrix of candidate markers that appear in the fData. — filterMaxMarkers","title":"Removes class/annotation information from a matrix of candidate markers that appear in the fData. — filterMaxMarkers","text":"Removes annotation information contain certain number/percentage proteins","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/filterMaxMarkers.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Removes class/annotation information from a matrix of candidate markers that appear in the fData. — filterMaxMarkers","text":"","code":"filterMaxMarkers(object, n, p = 0.2, fcol = \"GOAnnotations\", verbose = TRUE)"},{"path":"https://lgatto.github.io/pRoloc/reference/filterMaxMarkers.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Removes class/annotation information from a matrix of candidate markers that appear in the fData. — filterMaxMarkers","text":"object instance class MSnSet. n Maximum number proteins allowed per class/information term. p Maximum percentage proteins per column. Default 0.2 .e. remove columns information greater 20 total number proteins dataset (note: useful example, information GO terms, removing general uninformative terms). fcol name matrix marker information. Default GOAnnotations. verbose Number marker candidates retained filtering.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/filterMaxMarkers.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Removes class/annotation information from a matrix of candidate markers that appear in the fData. — filterMaxMarkers","text":"updated MSnSet","code":""},{"path":[]},{"path":"https://lgatto.github.io/pRoloc/reference/filterMinMarkers.html","id":null,"dir":"Reference","previous_headings":"","what":"Removes class/annotation information from a matrix of candidate markers that appear in the fData. — filterMinMarkers","title":"Removes class/annotation information from a matrix of candidate markers that appear in the fData. — filterMinMarkers","text":"Removes annotation information contain less certain number/percentage proteins","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/filterMinMarkers.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Removes class/annotation information from a matrix of candidate markers that appear in the fData. — filterMinMarkers","text":"","code":"filterMinMarkers(object, n = 10, p, fcol = \"GOAnnotations\", verbose = TRUE)"},{"path":"https://lgatto.github.io/pRoloc/reference/filterMinMarkers.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Removes class/annotation information from a matrix of candidate markers that appear in the fData. — filterMinMarkers","text":"object instance class MSnSet. n Minimum number proteins allowed per column. Default 10. p Minimum percentage proteins per column. fcol name matrix marker information. Default GOAnnotations. verbose Number marker candidates retained filtering.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/filterMinMarkers.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Removes class/annotation information from a matrix of candidate markers that appear in the fData. — filterMinMarkers","text":"updated MSnSet.","code":""},{"path":[]},{"path":"https://lgatto.github.io/pRoloc/reference/filterMinMarkers.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Removes class/annotation information from a matrix of candidate markers that appear in the fData. — filterMinMarkers","text":"Lisa M Breckels","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/filterZeroCols.html","id":null,"dir":"Reference","previous_headings":"","what":"Remove 0 columns/rows — filterZeroCols","title":"Remove 0 columns/rows — filterZeroCols","text":"Removes assay data columns/rows composed 0, .e. colSum/rowSum 0.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/filterZeroCols.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Remove 0 columns/rows — filterZeroCols","text":"","code":"filterZeroCols(object, verbose = TRUE) filterZeroRows(object, verbose = TRUE)"},{"path":"https://lgatto.github.io/pRoloc/reference/filterZeroCols.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Remove 0 columns/rows — filterZeroCols","text":"object MSnSet object. verbose Print message number filtered columns/row ().","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/filterZeroCols.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Remove 0 columns/rows — filterZeroCols","text":"MSnSet.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/filterZeroCols.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Remove 0 columns/rows — filterZeroCols","text":"Laurent Gatto","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/filterZeroCols.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Remove 0 columns/rows — filterZeroCols","text":"","code":"library(\"pRolocdata\") data(andy2011goCC) any(colSums(exprs(andy2011goCC)) == 0) #> [1] FALSE exprs(andy2011goCC)[, 1:5] <- 0 ncol(andy2011goCC) #> [1] 569 ncol(filterZeroCols(andy2011goCC)) #> Removing 5 columns with only 0s. #> [1] 564"},{"path":"https://lgatto.github.io/pRoloc/reference/getGOFromFeatures.html","id":null,"dir":"Reference","previous_headings":"","what":"Retrieve GO terms for feature names — getGOFromFeatures","title":"Retrieve GO terms for feature names — getGOFromFeatures","text":"function pulls gene ontology (GO) terms set feature names.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/getGOFromFeatures.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Retrieve GO terms for feature names — getGOFromFeatures","text":"","code":"getGOFromFeatures( id, namespace = \"cellular_component\", evidence = NULL, params = NULL, verbose = FALSE, nmax = 500 )"},{"path":"https://lgatto.github.io/pRoloc/reference/getGOFromFeatures.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Retrieve GO terms for feature names — getGOFromFeatures","text":"id character feature names pulled biomart. MSnSet provided, featureNames(id) used. namespace GO namespace. One biological_process, cellular_component (default) molecular_function. evidence GO evidence code. See showGOEvidenceCodes details. NULL (default), filtering based evidence code performed. params instance class \"AnnotationParams\". verbose logical defining verbosity function. Default FALSE. nmax described https://support.bioconductor.org/p/86358/, Biomart result can unreliable large queries. argument splits input chunks length nmax (default 500). set NULL, query performed full.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/getGOFromFeatures.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Retrieve GO terms for feature names — getGOFromFeatures","text":"data.frame relevant GO terms.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/getGOFromFeatures.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Retrieve GO terms for feature names — getGOFromFeatures","text":"Laurent Gatto","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/getGOFromFeatures.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Retrieve GO terms for feature names — getGOFromFeatures","text":"","code":"library(pRolocdata) data(dunkley2006) data(dunkley2006params) dunkley2006params #> Object of class \"AnnotationParams\" #> Using the 'plants_mart' BioMart database #> Using the 'athaliana_eg_gene' dataset #> Using 'tair_locus' as filter #> Created on Tue Mar 12 07:25:12 2024 fn <- featureNames(dunkley2006)[1:5] getGOFromFeatures(fn, params = dunkley2006params) #> tair_locus go_id namespace_1003 name_1006 #> 3 AT1G21750 GO:0005783 cellular_component endoplasmic reticulum #> 5 AT1G21750 GO:0005788 cellular_component endoplasmic reticulum lumen #> 10 AT1G56340 GO:0005783 cellular_component endoplasmic reticulum #> 13 AT1G56340 GO:0005788 cellular_component endoplasmic reticulum lumen #> go_linkage_type #> 3 IEA #> 5 IEA #> 10 IEA #> 13 IEA"},{"path":"https://lgatto.github.io/pRoloc/reference/getMarkerClasses.html","id":null,"dir":"Reference","previous_headings":"","what":"Returns the organelle classes in an 'MSnSet' — getMarkerClasses","title":"Returns the organelle classes in an 'MSnSet' — getMarkerClasses","text":"Convenience accessor organelle classes 'MSnSet'. function returns organelle classes MSnSet instance. side effect, prints classes.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/getMarkerClasses.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Returns the organelle classes in an 'MSnSet' — getMarkerClasses","text":"","code":"getMarkerClasses(object, fcol = \"markers\", ...)"},{"path":"https://lgatto.github.io/pRoloc/reference/getMarkerClasses.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Returns the organelle classes in an 'MSnSet' — getMarkerClasses","text":"object instance class \"MSnSet\". fcol name markers column featureData slot. Default markers. ... Additional parameters passed sort base package.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/getMarkerClasses.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Returns the organelle classes in an 'MSnSet' — getMarkerClasses","text":"character vector organelle classes data.","code":""},{"path":[]},{"path":"https://lgatto.github.io/pRoloc/reference/getMarkerClasses.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Returns the organelle classes in an 'MSnSet' — getMarkerClasses","text":"Lisa Breckels Laurent Gatto","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/getMarkerClasses.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Returns the organelle classes in an 'MSnSet' — getMarkerClasses","text":"","code":"library(\"pRolocdata\") data(dunkley2006) organelles <- getMarkerClasses(dunkley2006) ## same if markers encoded as a matrix dunkley2006 <- mrkVecToMat(dunkley2006, mfcol = \"Markers\") organelles2 <- getMarkerClasses(dunkley2006, fcol = \"Markers\") stopifnot(all.equal(organelles, organelles2))"},{"path":"https://lgatto.github.io/pRoloc/reference/getMarkers.html","id":null,"dir":"Reference","previous_headings":"","what":"Get the organelle markers in an MSnSet — getMarkers","title":"Get the organelle markers in an MSnSet — getMarkers","text":"Convenience accessor organelle markers MSnSet. function returns organelle markers MSnSet instance. side effect, print marker table.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/getMarkers.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Get the organelle markers in an MSnSet — getMarkers","text":"","code":"getMarkers(object, fcol = \"markers\", names = TRUE, verbose = TRUE)"},{"path":"https://lgatto.github.io/pRoloc/reference/getMarkers.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Get the organelle markers in an MSnSet — getMarkers","text":"object instance class \"MSnSet\". fcol name markers column featureData slot. Default \"markers\". names logical indicating markers vector named. Ignored markers encoded matrix. verbose TRUE, marker table printed markers returned invisibly. FALSE, markers returned.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/getMarkers.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Get the organelle markers in an MSnSet — getMarkers","text":"character (matrix) length (ncol) ncol(object), depending vector matrix encoding markers.","code":""},{"path":[]},{"path":"https://lgatto.github.io/pRoloc/reference/getMarkers.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Get the organelle markers in an MSnSet — getMarkers","text":"Laurent Gatto","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/getMarkers.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Get the organelle markers in an MSnSet — getMarkers","text":"","code":"library(\"pRolocdata\") data(dunkley2006) ## marker vectors myVmarkers <- getMarkers(dunkley2006) #> organelleMarkers #> ER lumen ER membrane Golgi Mitochondrion PM #> 14 45 28 55 46 #> Plastid Ribosome TGN unknown vacuole #> 20 19 13 428 21 head(myVmarkers) #> AT1G09210 AT1G21750 AT1G51760 AT1G56340 AT2G32920 AT2G47470 #> \"ER lumen\" \"ER lumen\" \"ER lumen\" \"ER lumen\" \"ER lumen\" \"ER lumen\" ## marker matrix dunkley2006 <- mrkVecToMat(dunkley2006, mfcol = \"Markers\") myMmarkers <- getMarkers(dunkley2006, fcol = \"Markers\") #> Localisation count: #> 0 1 #> 428 261 #> Single localisations: #> ER lumen ER membrane Golgi Mitochondrion PM #> 14 45 28 55 46 #> Plastid Ribosome TGN vacuole #> 20 19 13 21 #> Multiple localisations: #> none head(myMmarkers) #> ER lumen ER membrane Golgi Mitochondrion PM Plastid Ribosome TGN #> AT1G09210 1 0 0 0 0 0 0 0 #> AT1G21750 1 0 0 0 0 0 0 0 #> AT1G51760 1 0 0 0 0 0 0 0 #> AT1G56340 1 0 0 0 0 0 0 0 #> AT2G32920 1 0 0 0 0 0 0 0 #> AT2G47470 1 0 0 0 0 0 0 0 #> vacuole #> AT1G09210 0 #> AT1G21750 0 #> AT1G51760 0 #> AT1G56340 0 #> AT2G32920 0 #> AT2G47470 0"},{"path":"https://lgatto.github.io/pRoloc/reference/getNormDist.html","id":null,"dir":"Reference","previous_headings":"","what":"Extract Distances from a ","title":"Extract Distances from a ","text":"function computes outputs normalised distances \"ClustDistList\" object.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/getNormDist.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Extract Distances from a ","text":"","code":"getNormDist(object, p = 1/3)"},{"path":"https://lgatto.github.io/pRoloc/reference/getNormDist.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Extract Distances from a ","text":"object instance class \"ClustDistList\". p normalisation factor. Default 1/3.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/getNormDist.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Extract Distances from a ","text":"numeric normalised distances, one per protein set ClustDistList.","code":""},{"path":[]},{"path":"https://lgatto.github.io/pRoloc/reference/getNormDist.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Extract Distances from a ","text":"Lisa Breckels","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/getPredictions.html","id":null,"dir":"Reference","previous_headings":"","what":"Returns the predictions in an 'MSnSet' — getPredictions","title":"Returns the predictions in an 'MSnSet' — getPredictions","text":"Convenience accessor predicted feature localisation 'MSnSet'. function returns predictions MSnSet instance. side effect, prints prediction table.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/getPredictions.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Returns the predictions in an 'MSnSet' — getPredictions","text":"","code":"getPredictions(object, fcol, scol, mcol = \"markers\", t = 0, verbose = TRUE)"},{"path":"https://lgatto.github.io/pRoloc/reference/getPredictions.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Returns the predictions in an 'MSnSet' — getPredictions","text":"object instance class \"MSnSet\". fcol name prediction column featureData slot. scol name prediction score column featureData slot. missing, created pasting '.scores' fcol. mcol feature meta data column containing labelled training data. t score threshold. Predictions score < t set 'unknown'. Default 0. also possible define thresholds prediction class, case, t named numeric names exactly matching unique prediction class names. verbose TRUE, prediction table printed predictions returned invisibly. FALSE, predictions returned.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/getPredictions.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Returns the predictions in an 'MSnSet' — getPredictions","text":"instance class \"MSnSet\" fcol.pred feature variable storing prediction results according chosen threshold.","code":""},{"path":[]},{"path":"https://lgatto.github.io/pRoloc/reference/getPredictions.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Returns the predictions in an 'MSnSet' — getPredictions","text":"Laurent Gatto Lisa Breckels","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/getPredictions.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Returns the predictions in an 'MSnSet' — getPredictions","text":"","code":"library(\"pRolocdata\") data(dunkley2006) res <- svmClassification(dunkley2006, fcol = \"pd.markers\", sigma = 0.1, cost = 0.5) #> [1] \"pd.markers\" fData(res)$svm[500:510] #> [1] Plastid Plastid ER membrane Ribosome Ribosome Ribosome #> [7] Ribosome Ribosome Ribosome Ribosome Ribosome #> 9 Levels: ER lumen ER membrane Golgi Mitochondrion PM Plastid Ribosome ... vacuole fData(res)$svm.scores[500:510] #> [1] 0.6593303 0.7701427 0.6752305 0.4882591 0.5751725 0.5766412 0.6376513 #> [8] 0.6215169 0.5313678 0.6123313 0.6602089 getPredictions(res, fcol = \"svm\", t = 0) ## all predictions #> ans #> ER lumen ER membrane Golgi Mitochondrion PM #> 16 188 101 101 125 #> Plastid Ribosome TGN vacuole #> 52 59 17 30 #> MSnSet (storageMode: lockedEnvironment) #> assayData: 689 features, 16 samples #> element names: exprs #> protocolData: none #> phenoData #> sampleNames: M1F1A M1F4A ... M2F11B (16 total) #> varLabels: membrane.prep fraction replicate #> varMetadata: labelDescription #> featureData #> featureNames: AT1G09210 AT1G21750 ... AT4G39080 (689 total) #> fvarLabels: assigned evidence ... svm.pred (11 total) #> fvarMetadata: labelDescription #> experimentData: use 'experimentData(object)' #> pubMedIds: 16618929 #> Annotation: #> - - - Processing information - - - #> Loaded on Thu Jul 16 22:53:08 2015. #> Normalised to sum of intensities. #> Added markers from 'mrk' marker vector. Thu Jul 16 22:53:08 2015 #> Performed svm prediction (cost=0.5 sigma=0.1) Fri Oct 18 17:20:01 2024 #> Added svm predictions according to global threshold = 0 Fri Oct 18 17:20:01 2024 #> MSnbase version: 1.17.12 getPredictions(res, fcol = \"svm\", t = .9) ## single threshold #> ans #> ER lumen ER membrane Golgi Mitochondrion PM #> 14 56 28 55 46 #> Plastid Ribosome TGN unknown vacuole #> 20 19 13 417 21 #> MSnSet (storageMode: lockedEnvironment) #> assayData: 689 features, 16 samples #> element names: exprs #> protocolData: none #> phenoData #> sampleNames: M1F1A M1F4A ... M2F11B (16 total) #> varLabels: membrane.prep fraction replicate #> varMetadata: labelDescription #> featureData #> featureNames: AT1G09210 AT1G21750 ... AT4G39080 (689 total) #> fvarLabels: assigned evidence ... svm.pred (11 total) #> fvarMetadata: labelDescription #> experimentData: use 'experimentData(object)' #> pubMedIds: 16618929 #> Annotation: #> - - - Processing information - - - #> Loaded on Thu Jul 16 22:53:08 2015. #> Normalised to sum of intensities. #> Added markers from 'mrk' marker vector. Thu Jul 16 22:53:08 2015 #> Performed svm prediction (cost=0.5 sigma=0.1) Fri Oct 18 17:20:01 2024 #> Added svm predictions according to global threshold = 0.9 Fri Oct 18 17:20:01 2024 #> MSnbase version: 1.17.12 ## 50% top predictions per class ts <- orgQuants(res, fcol = \"svm\", t = .5) #> ER lumen ER membrane Golgi Mitochondrion PM #> 0.2995766 0.8368847 0.7805362 0.7484314 0.7302249 #> Plastid Ribosome TGN vacuole #> 0.7746137 0.5428105 0.5276547 0.5704931 getPredictions(res, fcol = \"svm\", t = ts) #> ans #> ER lumen ER membrane Golgi Mitochondrion PM #> 15 117 65 78 86 #> Plastid Ribosome TGN unknown vacuole #> 36 39 15 212 26 #> MSnSet (storageMode: lockedEnvironment) #> assayData: 689 features, 16 samples #> element names: exprs #> protocolData: none #> phenoData #> sampleNames: M1F1A M1F4A ... M2F11B (16 total) #> varLabels: membrane.prep fraction replicate #> varMetadata: labelDescription #> featureData #> featureNames: AT1G09210 AT1G21750 ... AT4G39080 (689 total) #> fvarLabels: assigned evidence ... svm.pred (11 total) #> fvarMetadata: labelDescription #> experimentData: use 'experimentData(object)' #> pubMedIds: 16618929 #> Annotation: #> - - - Processing information - - - #> Loaded on Thu Jul 16 22:53:08 2015. #> Normalised to sum of intensities. #> Added markers from 'mrk' marker vector. Thu Jul 16 22:53:08 2015 #> Performed svm prediction (cost=0.5 sigma=0.1) Fri Oct 18 17:20:01 2024 #> Added svm predictions according to thresholds: ER lumen = 0.30, ER membrane = 0.84, Golgi = 0.78, Mitochondrion = 0.75, PM = 0.73, Plastid = 0.77, Ribosome = 0.54, TGN = 0.53, vacuole = 0.57 Fri Oct 18 17:20:01 2024 #> MSnbase version: 1.17.12"},{"path":"https://lgatto.github.io/pRoloc/reference/getStockcol.html","id":null,"dir":"Reference","previous_headings":"","what":"Manage default colours and point characters — setLisacol","title":"Manage default colours and point characters — setLisacol","text":"functions allow get/set colours point character used plotting organelle clusters unknown features. values parametrised session level. Two palettes available: default palette (previously Lisa's colours) containing 30 colours old (original) palette, containing 13 colours.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/getStockcol.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Manage default colours and point characters — setLisacol","text":"","code":"setLisacol() getLisacol() getOldcol() setOldcol() getStockcol() setStockcol(cols) getStockpch() setStockpch(pchs) getUnknowncol() setUnknowncol(col) getUnknownpch() setUnknownpch(pch)"},{"path":"https://lgatto.github.io/pRoloc/reference/getStockcol.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Manage default colours and point characters — setLisacol","text":"cols vector colour characters NULL, sets colours default values. pchs vector numeric NULL, sets point characters default values. col colour character NULL, sets colour #E7E7E7 (grey91), default colour unknown features. pch numeric vector length 1 NULL, sets point character 21, default.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/getStockcol.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Manage default colours and point characters — setLisacol","text":"set functions set (invisibly returns) colours. get functions returns character vector colours. pch functions, numerics rather characters.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/getStockcol.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Manage default colours and point characters — setLisacol","text":"Laurent Gatto","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/getStockcol.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Manage default colours and point characters — setLisacol","text":"","code":"## defaults for clusters getStockcol() #> [1] \"#E41A1C\" \"#377EB8\" \"#309C17\" \"#FF7F00\" \"#FFD700\" \"#00CED1\" \"#A65628\" #> [8] \"#F781BF\" \"#984EA3\" \"#9ACD32\" \"#B0C4DE\" \"#00008A\" \"#FDAE6B\" \"#EBB7BE\" #> [15] \"#3F8F8F\" \"#CF9802\" \"#6A51A3\" \"#21E8AC\" \"#0000FF\" \"#1D7A3E\" \"#BF2A6B\" #> [22] \"#CD5B45\" \"#808000\" \"#F21D56\" \"#67000D\" \"#7A0C79\" \"#93EDF5\" \"#A66A6A\" #> [29] \"#0E438A\" \"#DBBCF7\" getStockpch() #> [1] 19 1 15 0 17 2 18 5 7 9 13 3 4 8 ## unknown features getUnknownpch() #> [1] 21 getUnknowncol() #> [1] \"#E0E0E0\" ## an example library(pRolocdata) data(dunkley2006) par(mfrow = c(2, 1)) plot2D(dunkley2006, fcol = \"markers\", main = 'Default colours') setUnknowncol(\"black\") plot2D(dunkley2006, fcol = \"markers\", main = 'setUnknowncol(\"black\")') getUnknowncol() #> [1] \"black\" setUnknowncol(NULL) getUnknowncol() #> [1] \"#E0E0E0\" getStockcol() #> [1] \"#E41A1C\" \"#377EB8\" \"#309C17\" \"#FF7F00\" \"#FFD700\" \"#00CED1\" \"#A65628\" #> [8] \"#F781BF\" \"#984EA3\" \"#9ACD32\" \"#B0C4DE\" \"#00008A\" \"#FDAE6B\" \"#EBB7BE\" #> [15] \"#3F8F8F\" \"#CF9802\" \"#6A51A3\" \"#21E8AC\" \"#0000FF\" \"#1D7A3E\" \"#BF2A6B\" #> [22] \"#CD5B45\" \"#808000\" \"#F21D56\" \"#67000D\" \"#7A0C79\" \"#93EDF5\" \"#A66A6A\" #> [29] \"#0E438A\" \"#DBBCF7\" getOldcol() #> [1] \"#E41A1C\" \"#377EB8\" \"#4DAF4A\" \"#984EA3\" \"#FF7F00\" \"#FFFF33\" \"#A65628\" #> [8] \"#F781BF\" \"#999999\" \"#333333\" \"#A021EF\" \"#008A45\" \"#00008A\""},{"path":"https://lgatto.github.io/pRoloc/reference/goIdToTerm.html","id":null,"dir":"Reference","previous_headings":"","what":"Convert GO ids to/from terms — goIdToTerm","title":"Convert GO ids to/from terms — goIdToTerm","text":"Converts GO identifiers /GO terms, either explicitly checking (items ) input contains \"GO:\".","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/goIdToTerm.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Convert GO ids to/from terms — goIdToTerm","text":"","code":"goIdToTerm(x, names = TRUE, keepNA = TRUE) goTermToId(x, names = TRUE, keepNA = TRUE) flipGoTermId(x, names = TRUE, keepNA = TRUE) prettyGoTermId(x)"},{"path":"https://lgatto.github.io/pRoloc/reference/goIdToTerm.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Convert GO ids to/from terms — goIdToTerm","text":"x character GO ids terms. names named character returned? Default TRUE. keepNA GO term/id names missing obsolete replaced NA? Default TRUE. FALSE GO term/id names kept.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/goIdToTerm.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Convert GO ids to/from terms — goIdToTerm","text":"character GO terms (ids) x ids (terms).","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/goIdToTerm.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Convert GO ids to/from terms — goIdToTerm","text":"Laurent Gatto","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/goIdToTerm.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Convert GO ids to/from terms — goIdToTerm","text":"","code":"goIdToTerm(\"GO:0000001\") #> GO:0000001 #> \"mitochondrion inheritance\" goIdToTerm(\"GO:0000001\", names = FALSE) #> [1] \"mitochondrion inheritance\" goIdToTerm(c(\"GO:0000001\", \"novalid\")) #> GO:0000001 novalid #> \"mitochondrion inheritance\" NA goIdToTerm(c(\"GO:0000001\", \"GO:0000002\", \"notvalid\")) #> GO:0000001 GO:0000002 #> \"mitochondrion inheritance\" \"mitochondrial genome maintenance\" #> notvalid #> NA goTermToId(\"mitochondrion inheritance\") #> mitochondrion inheritance #> \"GO:0000001\" goTermToId(\"mitochondrion inheritance\", name = FALSE) #> [1] \"GO:0000001\" goTermToId(c(\"mitochondrion inheritance\", \"notvalid\")) #> mitochondrion inheritance notvalid #> \"GO:0000001\" NA prettyGoTermId(\"mitochondrion inheritance\") #> [1] \"mitochondrion inheritance (GO:0000001)\" prettyGoTermId(\"GO:0000001\") #> [1] \"mitochondrion inheritance (GO:0000001)\" flipGoTermId(\"mitochondrion inheritance\") #> mitochondrion inheritance #> \"GO:0000001\" flipGoTermId(\"GO:0000001\") #> GO:0000001 #> \"mitochondrion inheritance\" flipGoTermId(\"GO:0000001\", names = FALSE) #> [1] \"mitochondrion inheritance\""},{"path":"https://lgatto.github.io/pRoloc/reference/highlightOnPlot.html","id":null,"dir":"Reference","previous_headings":"","what":"Highlight features of interest on a spatial proteomics plot — highlightOnPlot","title":"Highlight features of interest on a spatial proteomics plot — highlightOnPlot","text":"Highlights set features interest given FeaturesOfInterest instance PCA plot produced plot2D plot3D. none features interest found MSnset's featureNames, warning thrown.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/highlightOnPlot.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Highlight features of interest on a spatial proteomics plot — highlightOnPlot","text":"","code":"highlightOnPlot(object, foi, labels, args = list(), ...) highlightOnPlot3D(object, foi, labels, args = list(), radius = 0.1 * 3, ...)"},{"path":"https://lgatto.github.io/pRoloc/reference/highlightOnPlot.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Highlight features of interest on a spatial proteomics plot — highlightOnPlot","text":"object main dataset described MSnSet matrix coordinates features PCA plot produced (invisibly returned) plot2D. foi instance FeaturesOfInterest, , alternatively, character feautre names. labels character length 1 feature variable name used label features interest. valid object MSnSet. Alternatively, TRUE, featureNames(object) (rownames(object), object matrix) used. Default missing, add label.s args named list arguments passed plot2D PCA coordinates calculated. Ignored PCA coordinates passed directly, .e. object matrix. ... Additional parameters passed points text (labels TRUE) adding plot2D, spheres3d text3d adding plot3D radius Radius spheres added visualisation produced plot3D. Default 0.3 (.e plot3D's radius1 * 3), emphasise features regard uknown (radius1 = 0.1) marker (radius1 * 2) features.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/highlightOnPlot.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Highlight features of interest on a spatial proteomics plot — highlightOnPlot","text":"NULL; used side effects.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/highlightOnPlot.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Highlight features of interest on a spatial proteomics plot — highlightOnPlot","text":"Laurent Gatto","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/highlightOnPlot.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Highlight features of interest on a spatial proteomics plot — highlightOnPlot","text":"","code":"library(\"pRolocdata\") data(\"tan2009r1\") x <- FeaturesOfInterest(description = \"A test set of features of interest\", fnames = featureNames(tan2009r1)[1:10], object = tan2009r1) ## using FeaturesOfInterest or feature names par(mfrow = c(2, 1)) plot2D(tan2009r1) highlightOnPlot(tan2009r1, x) plot2D(tan2009r1) highlightOnPlot(tan2009r1, featureNames(tan2009r1)[1:10]) .pca <- plot2D(tan2009r1) head(.pca) #> PC1 (58.53%) PC2 (29.96%) #> P20353 0.2103374 1.6959266 #> P53501 -0.4940607 1.6207386 #> Q7KU78 -1.1794311 -0.7242185 #> P04412 0.6128549 0.3944441 #> Q7KJ73 0.1866756 -0.3007028 #> Q7JZN0 2.0228016 -1.3087061 highlightOnPlot(.pca, x, col = \"red\") highlightOnPlot(tan2009r1, x, col = \"red\", cex = 1.5) highlightOnPlot(tan2009r1, x, labels = TRUE) .pca <- plot2D(tan2009r1, dims = c(1, 3)) highlightOnPlot(.pca, x, pch = \"+\", dims = c(1, 3)) #> Warning: \"dims\" is not a graphical parameter highlightOnPlot(tan2009r1, x, args = list(dims = c(1, 3))) .pca2 <- plot2D(tan2009r1, mirrorX = TRUE, dims = c(1, 3)) ## previous pca matrix, need to mirror X axis highlightOnPlot(.pca, x, pch = \"+\", args = list(mirrorX = TRUE)) ## new pca matrix, with X mirrors (and 1st and 3rd PCs) highlightOnPlot(.pca2, x, col = \"red\") plot2D(tan2009r1) highlightOnPlot(tan2009r1, x) highlightOnPlot(tan2009r1, x, labels = TRUE, pos = 3) highlightOnPlot(tan2009r1, x, labels = \"Flybase.Symbol\", pos = 1) ## in 3 dimensions if (interactive()) { plot3D(tan2009r1, radius1 = 0.05) highlightOnPlot3D(tan2009r1, x, labels = TRUE) highlightOnPlot3D(tan2009r1, x) }"},{"path":"https://lgatto.github.io/pRoloc/reference/knnClassification.html","id":null,"dir":"Reference","previous_headings":"","what":"knn classification — knnClassification","title":"knn classification — knnClassification","text":"Classification using k-nearest neighbours algorithm.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/knnClassification.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"knn classification — knnClassification","text":"","code":"knnClassification( object, assessRes, scores = c(\"prediction\", \"all\", \"none\"), k, fcol = \"markers\", ... )"},{"path":"https://lgatto.github.io/pRoloc/reference/knnClassification.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"knn classification — knnClassification","text":"object instance class \"MSnSet\". assessRes instance class \"GenRegRes\", generated knnOptimisation. scores One \"prediction\", \"\" \"none\" report score predicted class , classes none. k assessRes missing, k must provided. fcol feature meta-data containing marker definitions. Default markers. ... Additional parameters passed knn package class.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/knnClassification.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"knn classification — knnClassification","text":"instance class \"MSnSet\" knn knn.scores feature variables storing classification results scores respectively.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/knnClassification.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"knn classification — knnClassification","text":"Laurent Gatto","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/knnClassification.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"knn classification — knnClassification","text":"","code":"library(pRolocdata) data(dunkley2006) ## reducing parameter search space and iterations params <- knnOptimisation(dunkley2006, k = c(3, 10), times = 3) #> | | | 0% | |===== | 7% | |========= | 13% | |============== | 20% | |=================== | 27% | |======================= | 33% | |============================ | 40% | |================================= | 47% | |===================================== | 53% | |========================================== | 60% | |=============================================== | 67% | |=================================================== | 73% | |======================================================== | 80% | |============================================================= | 87% | |================================================================= | 93% | |======================================================================| 100% params #> Object of class \"GenRegRes\" #> Algorithm: knn #> Hyper-parameters: #> k: 3 10 #> Design: #> Replication: 3 x 5-fold X-validation #> Partitioning: 0.2/0.8 (test/train) #> Results #> macro F1: #> Min. 1st Qu. Median Mean 3rd Qu. Max. #> 0.9603 0.9690 0.9776 0.9747 0.9819 0.9862 #> best k: 3 plot(params) f1Count(params) #> #> 3 #> 1 levelPlot(params) getParams(params) #> k #> 3 res <- knnClassification(dunkley2006, params) #> [1] \"markers\" getPredictions(res, fcol = \"knn\") #> ans #> ER lumen ER membrane Golgi Mitochondrion PM #> 21 180 94 106 138 #> Plastid Ribosome TGN vacuole #> 49 50 21 30 #> MSnSet (storageMode: lockedEnvironment) #> assayData: 689 features, 16 samples #> element names: exprs #> protocolData: none #> phenoData #> sampleNames: M1F1A M1F4A ... M2F11B (16 total) #> varLabels: membrane.prep fraction replicate #> varMetadata: labelDescription #> featureData #> featureNames: AT1G09210 AT1G21750 ... AT4G39080 (689 total) #> fvarLabels: assigned evidence ... knn.pred (11 total) #> fvarMetadata: labelDescription #> experimentData: use 'experimentData(object)' #> pubMedIds: 16618929 #> Annotation: #> - - - Processing information - - - #> Loaded on Thu Jul 16 22:53:08 2015. #> Normalised to sum of intensities. #> Added markers from 'mrk' marker vector. Thu Jul 16 22:53:08 2015 #> Performed knn prediction (k=3) Fri Oct 18 17:20:04 2024 #> Added knn predictions according to global threshold = 0 Fri Oct 18 17:20:04 2024 #> MSnbase version: 1.17.12 getPredictions(res, fcol = \"knn\", t = 0.75) #> ans #> ER lumen ER membrane Golgi Mitochondrion PM #> 15 173 83 103 120 #> Plastid Ribosome TGN unknown vacuole #> 49 44 16 56 30 #> MSnSet (storageMode: lockedEnvironment) #> assayData: 689 features, 16 samples #> element names: exprs #> protocolData: none #> phenoData #> sampleNames: M1F1A M1F4A ... M2F11B (16 total) #> varLabels: membrane.prep fraction replicate #> varMetadata: labelDescription #> featureData #> featureNames: AT1G09210 AT1G21750 ... AT4G39080 (689 total) #> fvarLabels: assigned evidence ... knn.pred (11 total) #> fvarMetadata: labelDescription #> experimentData: use 'experimentData(object)' #> pubMedIds: 16618929 #> Annotation: #> - - - Processing information - - - #> Loaded on Thu Jul 16 22:53:08 2015. #> Normalised to sum of intensities. #> Added markers from 'mrk' marker vector. Thu Jul 16 22:53:08 2015 #> Performed knn prediction (k=3) Fri Oct 18 17:20:04 2024 #> Added knn predictions according to global threshold = 0.75 Fri Oct 18 17:20:04 2024 #> MSnbase version: 1.17.12 plot2D(res, fcol = \"knn\")"},{"path":"https://lgatto.github.io/pRoloc/reference/knnOptimisation.html","id":null,"dir":"Reference","previous_headings":"","what":"knn parameter optimisation — knnOptimisation","title":"knn parameter optimisation — knnOptimisation","text":"Classification parameter optimisation k-nearest neighbours algorithm.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/knnOptimisation.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"knn parameter optimisation — knnOptimisation","text":"","code":"knnOptimisation( object, fcol = \"markers\", k = seq(3, 15, 2), times = 100, test.size = 0.2, xval = 5, fun = mean, seed, verbose = TRUE, ... )"},{"path":"https://lgatto.github.io/pRoloc/reference/knnOptimisation.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"knn parameter optimisation — knnOptimisation","text":"object instance class \"MSnSet\". fcol feature meta-data containing marker definitions. Default markers. k hyper-parameter. Default values seq(3, 15, 2). times number times internal cross-validation performed. Default 100. test.size size test data. Default 0.2 (20 percent). xval n-cross validation. Default 5. fun function used summarise xval macro F1 matrices. seed optional random number generator seed. verbose logical defining whether progress bar displayed. ... Additional parameters passed knn package class.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/knnOptimisation.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"knn parameter optimisation — knnOptimisation","text":"instance class \"GenRegRes\".","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/knnOptimisation.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"knn parameter optimisation — knnOptimisation","text":"Note performance scores precision, recall (macro) F1 calculated, NA values replaced 0. decision motivated fact class either NA precision recall result NA F1 score , eventually, NA macro F1 (.e. mean(F1)). Replacing NAs 0s leads F1 values 0 reduced yet defined final macro F1 score.","code":""},{"path":[]},{"path":"https://lgatto.github.io/pRoloc/reference/knnOptimisation.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"knn parameter optimisation — knnOptimisation","text":"Laurent Gatto","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/knntlClassification.html","id":null,"dir":"Reference","previous_headings":"","what":"knn transfer learning classification — knntlClassification","title":"knn transfer learning classification — knntlClassification","text":"Classification using variation KNN implementation Wu Dietterich's transfer learning schema","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/knntlClassification.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"knn transfer learning classification — knntlClassification","text":"","code":"knntlClassification( primary, auxiliary, fcol = \"markers\", bestTheta, k, scores = c(\"prediction\", \"all\", \"none\"), seed )"},{"path":"https://lgatto.github.io/pRoloc/reference/knntlClassification.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"knn transfer learning classification — knntlClassification","text":"primary instance class \"MSnSet\". auxiliary instance class \"MSnSet\". fcol feature meta-data containing marker definitions. Default markers. bestTheta Best theta vector output knntlOptimisation, see knntlOptimisation details k Numeric vector length 2, containing best k parameters use primary auxiliary datasets. k k specified calculated internally. scores One \"prediction\", \"\" \"none\" report score predicted class , classes none. seed optional random number generator seed.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/knntlClassification.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"knn transfer learning classification — knntlClassification","text":"character vector classifications unknowns","code":""},{"path":[]},{"path":"https://lgatto.github.io/pRoloc/reference/knntlClassification.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"knn transfer learning classification — knntlClassification","text":"Lisa Breckels","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/knntlClassification.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"knn transfer learning classification — knntlClassification","text":"","code":"# \\donttest{ library(pRolocdata) data(andy2011) data(andy2011goCC) ## reducing calculation time of k by pre-running knnOptimisation x <- c(andy2011, andy2011goCC) k <- lapply(x, function(z) knnOptimisation(z, times=5, fcol = \"markers.orig\", verbose = FALSE)) k <- sapply(k, function(z) getParams(z)) k #> k k #> 7 3 ## reducing parameter search with theta = 1, ## weights of only 1 or 0 will be considered opt <- knntlOptimisation(andy2011, andy2011goCC, fcol = \"markers.orig\", times = 2, by = 1, k = k) #> Removing 389 columns with only 0s. #> Weigths: #> (0, 1) opt #> Object of class \"ThetaRegRes\" #> Algorithm: theta #> Theta hyper-parameters: #> weights: 0 1 #> k: 7 3 #> nrow: 16 #> Design: #> Replication: 2 x 5-fold X-validation #> Partitioning: 0.2/0.8 (test/train) #> Results #> macro F1: #> Min. 1st Qu. Median Mean 3rd Qu. Max. #> 0.8601 0.8757 0.8913 0.8913 0.9069 0.9225 #> best theta: #> ER Golgi Mitochondrion PM #> weight:0 2 1 0 1 #> weight:1 0 1 2 1 th <- getParams(opt) plot(opt) res <- knntlClassification(andy2011, andy2011goCC, fcol = \"markers.orig\", th, k) res #> MSnSet (storageMode: lockedEnvironment) #> assayData: 1371 features, 8 samples #> element names: exprs #> protocolData: none #> phenoData #> sampleNames: X113 X114 ... X121 (8 total) #> varLabels: Fraction.information #> varMetadata: labelDescription #> featureData #> featureNames: O00767 P51648 ... O75312 (1371 total) #> fvarLabels: Accession.No. Protein.Description ... knntl (12 total) #> fvarMetadata: labelDescription #> experimentData: use 'experimentData(object)' #> Annotation: #> - - - Processing information - - - #> Loaded on Fri Sep 23 15:43:47 2016. #> Normalised to sum of intensities. #> Added markers from 'mrk' marker vector. Fri Sep 23 15:43:47 2016 #> MSnbase version: 1.99.2 # }"},{"path":"https://lgatto.github.io/pRoloc/reference/knntlOptimisation.html","id":null,"dir":"Reference","previous_headings":"","what":"theta parameter optimisation — knntlOptimisation","title":"theta parameter optimisation — knntlOptimisation","text":"Classification parameter optimisation KNN implementation Wu Dietterich's transfer learning schema","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/knntlOptimisation.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"theta parameter optimisation — knntlOptimisation","text":"","code":"knntlOptimisation( primary, auxiliary, fcol = \"markers\", k, times = 50, test.size = 0.2, xval = 5, by = 0.5, length.out, th, xfolds, BPPARAM = BiocParallel::bpparam(), method = \"Breckels\", log = FALSE, seed )"},{"path":"https://lgatto.github.io/pRoloc/reference/knntlOptimisation.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"theta parameter optimisation — knntlOptimisation","text":"primary instance class \"MSnSet\". auxiliary instance class \"MSnSet\". fcol feature meta-data containing marker definitions. Default markers. k Numeric vector length 2, containing best k parameters use primary (k[1]) auxiliary (k[2]) datasets. See knnOptimisation generating best k. times number times cross-validation performed. Default 50. test.size size test (validation) data. Default 0.2 (20 percent). xval number rounds cross-validation perform. increment theta, must one c(1, 0.5, 0.25, 0.2, 0.15, 0.1, 0.05) length.Alternative using parameter. Specifies desired length sequence theta test. th matrix theta values test class generated function thetas, number columns equal number classes contained fcol. Note: columns ordered according getMarkerClasses(primary, fcol). argument valid default method 'Breckels' used. xfolds Option pass specific folds cross validation. BPPARAM Required parallelisation. specified selects default BiocParallelParam, global options , fails, recently registered() back-end. method k-NN transfer learning method use. default 'Breckels' described Breckels et al (2016). 'Wu' specificed original method implemented Wu Dietterich (2004) implemented. log logical defining whether logging enabled. Default FALSE. Note logging produes considerably bigger objects. seed optional random number generator seed.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/knntlOptimisation.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"theta parameter optimisation — knntlOptimisation","text":"list containing theta combinations tested, associated macro F1 score accuracy combination round (specified times).","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/knntlOptimisation.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"theta parameter optimisation — knntlOptimisation","text":"knntlOptimisation implements variation Wu Dietterich's transfer learning schema: P. Wu T. G. Dietterich. Improving SVM accuracy training auxiliary data sources. Proceedings Twenty-First International Conference Machine Learning, pages 871 - 878. Morgan Kaufmann, 2004. grid search best theta performed.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/knntlOptimisation.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"theta parameter optimisation — knntlOptimisation","text":"Breckels LM, Holden S, Wonjar D, Mulvey CM, Christoforou , Groen AJ, Kohlbacher O, Lilley KS, Gatto L. Learning heterogeneous data sources: application spatial proteomics. bioRxiv. doi: http://dx.doi.org/10.1101/022152 Wu P, Dietterich TG. Improving SVM Accuracy Training Auxiliary Data Sources. Proceedings 21st International Conference Machine Learning (ICML); 2004.","code":""},{"path":[]},{"path":"https://lgatto.github.io/pRoloc/reference/knntlOptimisation.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"theta parameter optimisation — knntlOptimisation","text":"Lisa Breckels","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/ksvmClassification.html","id":null,"dir":"Reference","previous_headings":"","what":"ksvm classification — ksvmClassification","title":"ksvm classification — ksvmClassification","text":"Classification using support vector machine algorithm.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/ksvmClassification.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"ksvm classification — ksvmClassification","text":"","code":"ksvmClassification( object, assessRes, scores = c(\"prediction\", \"all\", \"none\"), cost, fcol = \"markers\", ... )"},{"path":"https://lgatto.github.io/pRoloc/reference/ksvmClassification.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"ksvm classification — ksvmClassification","text":"object instance class \"MSnSet\". assessRes instance class \"GenRegRes\", generated ksvmOptimisation. scores One \"prediction\", \"\" \"none\" report score predicted class , classes none. cost assessRes missing, cost must provided. fcol feature meta-data containing marker definitions. Default markers. ... Additional parameters passed ksvm package kernlab.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/ksvmClassification.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"ksvm classification — ksvmClassification","text":"instance class \"MSnSet\" ksvm ksvm.scores feature variables storing classification results scores respectively.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/ksvmClassification.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"ksvm classification — ksvmClassification","text":"Laurent Gatto","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/ksvmClassification.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"ksvm classification — ksvmClassification","text":"","code":"library(pRolocdata) data(dunkley2006) ## reducing parameter search space and iterations params <- ksvmOptimisation(dunkley2006, cost = 2^seq(-1,4,5), times = 3) #> | | | 0% | |===== | 7% | |========= | 13% | |============== | 20% | |=================== | 27% | |======================= | 33% | |============================ | 40% | |================================= | 47% | |===================================== | 53% | |========================================== | 60% | |=============================================== | 67% | |=================================================== | 73% | |======================================================== | 80% | |============================================================= | 87% | |================================================================= | 93% | |======================================================================| 100% params #> Object of class \"GenRegRes\" #> Algorithm: ksvm #> Hyper-parameters: #> cost: 0.5 16 #> Design: #> Replication: 3 x 5-fold X-validation #> Partitioning: 0.2/0.8 (test/train) #> Results #> macro F1: #> Min. 1st Qu. Median Mean 3rd Qu. Max. #> 0.9783 0.9786 0.9788 0.9857 0.9894 1.0000 #> best cost: 0.5 16 plot(params) f1Count(params) #> #> 0.5 #> 1 levelPlot(params) getParams(params) #> cost #> 0.5 res <- ksvmClassification(dunkley2006, params) #> [1] \"markers\" getPredictions(res, fcol = \"ksvm\") #> ans #> ER lumen ER membrane Golgi Mitochondrion PM #> 24 192 128 138 47 #> Plastid Ribosome TGN vacuole #> 54 19 66 21 #> MSnSet (storageMode: lockedEnvironment) #> assayData: 689 features, 16 samples #> element names: exprs #> protocolData: none #> phenoData #> sampleNames: M1F1A M1F4A ... M2F11B (16 total) #> varLabels: membrane.prep fraction replicate #> varMetadata: labelDescription #> featureData #> featureNames: AT1G09210 AT1G21750 ... AT4G39080 (689 total) #> fvarLabels: assigned evidence ... ksvm.pred (11 total) #> fvarMetadata: labelDescription #> experimentData: use 'experimentData(object)' #> pubMedIds: 16618929 #> Annotation: #> - - - Processing information - - - #> Loaded on Thu Jul 16 22:53:08 2015. #> Normalised to sum of intensities. #> Added markers from 'mrk' marker vector. Thu Jul 16 22:53:08 2015 #> Performed ksvm prediction (cost=0.5) Fri Oct 18 17:20:18 2024 #> Added ksvm predictions according to global threshold = 0 Fri Oct 18 17:20:18 2024 #> MSnbase version: 1.17.12 getPredictions(res, fcol = \"ksvm\", t = 0.75) #> ans #> ER lumen ER membrane Golgi Mitochondrion PM #> 14 159 69 55 46 #> Plastid Ribosome TGN unknown vacuole #> 20 19 13 273 21 #> MSnSet (storageMode: lockedEnvironment) #> assayData: 689 features, 16 samples #> element names: exprs #> protocolData: none #> phenoData #> sampleNames: M1F1A M1F4A ... M2F11B (16 total) #> varLabels: membrane.prep fraction replicate #> varMetadata: labelDescription #> featureData #> featureNames: AT1G09210 AT1G21750 ... AT4G39080 (689 total) #> fvarLabels: assigned evidence ... ksvm.pred (11 total) #> fvarMetadata: labelDescription #> experimentData: use 'experimentData(object)' #> pubMedIds: 16618929 #> Annotation: #> - - - Processing information - - - #> Loaded on Thu Jul 16 22:53:08 2015. #> Normalised to sum of intensities. #> Added markers from 'mrk' marker vector. Thu Jul 16 22:53:08 2015 #> Performed ksvm prediction (cost=0.5) Fri Oct 18 17:20:18 2024 #> Added ksvm predictions according to global threshold = 0.75 Fri Oct 18 17:20:18 2024 #> MSnbase version: 1.17.12 plot2D(res, fcol = \"ksvm\")"},{"path":"https://lgatto.github.io/pRoloc/reference/ksvmOptimisation.html","id":null,"dir":"Reference","previous_headings":"","what":"ksvm parameter optimisation — ksvmOptimisation","title":"ksvm parameter optimisation — ksvmOptimisation","text":"Classification parameter optimisation support vector machine algorithm.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/ksvmOptimisation.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"ksvm parameter optimisation — ksvmOptimisation","text":"","code":"ksvmOptimisation( object, fcol = \"markers\", cost = 2^(-4:4), times = 100, test.size = 0.2, xval = 5, fun = mean, seed, verbose = TRUE, ... )"},{"path":"https://lgatto.github.io/pRoloc/reference/ksvmOptimisation.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"ksvm parameter optimisation — ksvmOptimisation","text":"object instance class \"MSnSet\". fcol feature meta-data containing marker definitions. Default markers. cost hyper-parameter. Default values 2^-4:4. times number times internal cross-validation performed. Default 100. test.size size test data. Default 0.2 (20 percent). xval n-cross validation. Default 5. fun function used summarise xval macro F1 matrices. seed optional random number generator seed. verbose logical defining whether progress bar displayed. ... Additional parameters passed ksvm package kernlab.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/ksvmOptimisation.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"ksvm parameter optimisation — ksvmOptimisation","text":"instance class \"GenRegRes\".","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/ksvmOptimisation.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"ksvm parameter optimisation — ksvmOptimisation","text":"Note performance scores precision, recall (macro) F1 calculated, NA values replaced 0. decision motivated fact class either NA precision recall result NA F1 score , eventually, NA macro F1 (.e. mean(F1)). Replacing NAs 0s leads F1 values 0 reduced yet defined final macro F1 score.","code":""},{"path":[]},{"path":"https://lgatto.github.io/pRoloc/reference/ksvmOptimisation.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"ksvm parameter optimisation — ksvmOptimisation","text":"Laurent Gatto","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/makeGoSet.html","id":null,"dir":"Reference","previous_headings":"","what":"Creates a GO feature MSnSet — makeGoSet","title":"Creates a GO feature MSnSet — makeGoSet","text":"Creates new \"MSnSet\" instance populated GO term binary matrix based original object.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/makeGoSet.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Creates a GO feature MSnSet — makeGoSet","text":"","code":"makeGoSet(object, params, namespace = \"cellular_component\", evidence = NULL)"},{"path":"https://lgatto.github.io/pRoloc/reference/makeGoSet.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Creates a GO feature MSnSet — makeGoSet","text":"object instance class \"MSnSet\" character feature names. params instance class \"AnnotationParams\", compatible featureNames(object)'s format. namespace ontology name space. One several \"biological_process\", \"cellular_component\" \"molecular_function\". evidence GO evidence filtering.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/makeGoSet.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Creates a GO feature MSnSet — makeGoSet","text":"new \"MSnSet\" GO terms respective features original object.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/makeGoSet.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Creates a GO feature MSnSet — makeGoSet","text":"Laurent Gatto","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/makeGoSet.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Creates a GO feature MSnSet — makeGoSet","text":"","code":"library(\"pRolocdata\") data(dunkley2006) data(dunkley2006params) goset <- makeGoSet(dunkley2006[1:10, ], dunkley2006params) goset #> MSnSet (storageMode: lockedEnvironment) #> assayData: 10 features, 2 samples #> element names: exprs #> protocolData: none #> phenoData: none #> featureData #> featureNames: AT1G09210 AT1G21750 ... AT1G07810 (10 total) #> fvarLabels: assigned evidence ... markers (8 total) #> fvarMetadata: labelDescription #> experimentData: use 'experimentData(object)' #> Annotation: #> - - - Processing information - - - #> Constructed GO set using cellular_component namespace [Fri Oct 18 17:20:19 2024] #> MSnbase version: 2.31.1 exprs(goset) #> GO:0005783 GO:0005788 #> AT1G09210 0 0 #> AT1G21750 1 1 #> AT1G51760 0 0 #> AT1G56340 1 1 #> AT2G32920 0 0 #> AT2G47470 1 0 #> AT3G54960 0 0 #> AT4G24190 0 1 #> AT5G60640 1 1 #> AT1G07810 0 0 image(goset)"},{"path":"https://lgatto.github.io/pRoloc/reference/markerMSnSet.html","id":null,"dir":"Reference","previous_headings":"","what":"Extract marker/unknown subsets — markerMSnSet","title":"Extract marker/unknown subsets — markerMSnSet","text":"function extract marker unknown proteins new MSnSet.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/markerMSnSet.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Extract marker/unknown subsets — markerMSnSet","text":"","code":"markerMSnSet(object, fcol = \"markers\") unknownMSnSet(object, fcol = \"markers\")"},{"path":"https://lgatto.github.io/pRoloc/reference/markerMSnSet.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Extract marker/unknown subsets — markerMSnSet","text":"object instance class MSnSet fcol name feature data column, used separate markers proteins unknown localisation. markers encoded vectors, features unknown localisation defined fData(object)[, fcol] == \"unknown\". matrix-encoded markers, unlabelled proteins defined rowSums(fData(object)[, fcol]) == 0. Default \"markers\".","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/markerMSnSet.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Extract marker/unknown subsets — markerMSnSet","text":"new MSnSet marker/unknown proteins .","code":""},{"path":[]},{"path":"https://lgatto.github.io/pRoloc/reference/markerMSnSet.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Extract marker/unknown subsets — markerMSnSet","text":"Laurent Gatto","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/markerMSnSet.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Extract marker/unknown subsets — markerMSnSet","text":"","code":"library(\"pRolocdata\") data(dunkley2006) mrk <- markerMSnSet(dunkley2006) unk <- unknownMSnSet(dunkley2006) dim(dunkley2006) #> [1] 689 16 dim(mrk) #> [1] 261 16 dim(unk) #> [1] 428 16 table(fData(dunkley2006)$markers) #> #> ER lumen ER membrane Golgi Mitochondrion PM #> 14 45 28 55 46 #> Plastid Ribosome TGN unknown vacuole #> 20 19 13 428 21 table(fData(mrk)$markers) #> #> ER lumen ER membrane Golgi Mitochondrion PM #> 14 45 28 55 46 #> Plastid Ribosome TGN vacuole #> 20 19 13 21 table(fData(unk)$markers) #> #> unknown #> 428 ## matrix-encoded markers dunkley2006 <- mrkVecToMat(dunkley2006) dim(markerMSnSet(dunkley2006, \"Markers\")) #> [1] 261 16 stopifnot(all.equal(featureNames(markerMSnSet(dunkley2006, \"Markers\")), featureNames(markerMSnSet(dunkley2006, \"markers\")))) dim(unknownMSnSet(dunkley2006, \"Markers\")) #> [1] 428 16 stopifnot(all.equal(featureNames(unknownMSnSet(dunkley2006, \"Markers\")), featureNames(unknownMSnSet(dunkley2006, \"markers\"))))"},{"path":"https://lgatto.github.io/pRoloc/reference/markers.html","id":null,"dir":"Reference","previous_headings":"","what":"Create a marker vector or matrix. — mrkVecToMat","title":"Create a marker vector or matrix. — mrkVecToMat","text":"Functions producing new vector (matrix) marker vector set existing matrix (vector) marker set.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/markers.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Create a marker vector or matrix. — mrkVecToMat","text":"","code":"mrkVecToMat(object, vfcol = \"markers\", mfcol = \"Markers\") mrkMatToVec(object, mfcol = \"Markers\", vfcol = \"markers\") mrkMatAndVec(object, vfcol = \"markers\", mfcol = \"Markers\") showMrkMat(object, mfcol = \"Markers\") isMrkMat(object, fcol = \"Markers\") isMrkVec(object, fcol = \"markers\") mrkEncoding(object, fcol = \"markers\")"},{"path":"https://lgatto.github.io/pRoloc/reference/markers.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Create a marker vector or matrix. — mrkVecToMat","text":"object MSnSet object vfcol name vector marker feature variable. Default \"markers\". mfcol name matrix marker feature variable. Default \"Markers\". fcol marker feature variable name.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/markers.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Create a marker vector or matrix. — mrkVecToMat","text":"updated MSnSet new vector (matrix) marker set.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/markers.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Create a marker vector or matrix. — mrkVecToMat","text":"Sub-cellular markers can encoded two different ways. Sets spatial markers can represented character vectors (character factor, accurate), stored feature metadata, proteins unknown uncertain localisation (unlabelled, classified) marked \"unknown\" character. handy, encoding suffers drawbacks, particular difficulty label proteins reside multiple (possible actual) localisations. markers vector feature data typically named markers. new matrix encoding also supported. spatial compartment defined column binary markers matrix resident proteins encoded 1s. markers matrix feature data typically named Markers. proteins assigned unique localisations (.e. multi-localisation) localisation unknown (unlabelled), encodings equivalent. markers encoded vectors, features unknown localisation defined fData(object)[, fcol] == \"unknown\". matrix-encoded markers, unlabelled proteins defined rowSums(fData(object)[, fcol]) == 0. mrkMatToVec mrkVecToMat functions enable conversion matrix (vector) vector (matrix). mrkMatAndVec function generates missing encoding existing one. destination encoding already exists, , accurately, feature variable destination encoding exists, error thrown. conversion matrix vector, multiple possible label exists, dropped, .e. converted \"unknown\". Function isMrkVec isMrkMat can used test marker set encoded vector matrix. mrkEncoding returns either \"vector\" \"matrix\" depending nature markers.","code":""},{"path":[]},{"path":"https://lgatto.github.io/pRoloc/reference/markers.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Create a marker vector or matrix. — mrkVecToMat","text":"Laurent Gatto Lisa Breckels","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/markers.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Create a marker vector or matrix. — mrkVecToMat","text":"","code":"library(\"pRolocdata\") data(dunkley2006) dunk <- mrkVecToMat(dunkley2006) head(fData(dunk)$Markers) #> ER lumen ER membrane Golgi Mitochondrion PM Plastid Ribosome TGN #> AT1G09210 1 0 0 0 0 0 0 0 #> AT1G21750 1 0 0 0 0 0 0 0 #> AT1G51760 1 0 0 0 0 0 0 0 #> AT1G56340 1 0 0 0 0 0 0 0 #> AT2G32920 1 0 0 0 0 0 0 0 #> AT2G47470 1 0 0 0 0 0 0 0 #> vacuole #> AT1G09210 0 #> AT1G21750 0 #> AT1G51760 0 #> AT1G56340 0 #> AT2G32920 0 #> AT2G47470 0 fData(dunk)$markers <- NULL dunk <- mrkMatToVec(dunk) stopifnot(all.equal(fData(dunkley2006)$markers, fData(dunk)$markers))"},{"path":"https://lgatto.github.io/pRoloc/reference/mcmc-helpers.html","id":null,"dir":"Reference","previous_headings":"","what":"Number of outlier at each iteration of MCMC — mcmc_get_outliers","title":"Number of outlier at each iteration of MCMC — mcmc_get_outliers","text":"Helper function get number outlier MCMC iteration. Helper function get mean component allocation MCMC iteration. Helper function get mean probability belonging outlier iteration. Wrapper geweke diagnostics coda package also return p-values. Helper function pool chains together processing Helper function burn n iterations front chains Helper function subsample chains, known informally thinning. Produces violin plot protein posterior probabilities distributions organelles.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/mcmc-helpers.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Number of outlier at each iteration of MCMC — mcmc_get_outliers","text":"","code":"mcmc_get_outliers(x) mcmc_get_meanComponent(x) mcmc_get_meanoutliersProb(x) geweke_test(k) mcmc_pool_chains(param) mcmc_burn_chains(x, n = 50) mcmc_thin_chains(x, freq = 5) # S4 method for class 'MCMCParams,character' plot(x, y, ...)"},{"path":"https://lgatto.github.io/pRoloc/reference/mcmc-helpers.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Number of outlier at each iteration of MCMC — mcmc_get_outliers","text":"x Object class MCMCParams k list coda::mcmc objects, returned mcmc_get_outliers, mcmc_get_meanComponent mcmc_get_meanoutliersProb. param object class MCMCParams. n integer(1) defining number iterations burn. default 50 freq Thinning frequency. function retains every `freq`th iteration `integer(1)`. default thinning frequency `5`. y `character(1)` protein name. ... Currently ignored.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/mcmc-helpers.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Number of outlier at each iteration of MCMC — mcmc_get_outliers","text":"list length length(x). list length length(x). list length length(x). matrix test z- p-values chain. pooled MCMCParams object. updated MCMCParams object. thinned `MCMCParams` object. ggplot2 object.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/mcmc-helpers.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Number of outlier at each iteration of MCMC — mcmc_get_outliers","text":"Laurent Gatto","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/minMarkers.html","id":null,"dir":"Reference","previous_headings":"","what":"Creates a reduced marker variable — minMarkers","title":"Creates a reduced marker variable — minMarkers","text":"function updates MSnSet instances sets markers class unknown less n instances.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/minMarkers.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Creates a reduced marker variable — minMarkers","text":"","code":"minMarkers(object, n = 10, fcol = \"markers\")"},{"path":"https://lgatto.github.io/pRoloc/reference/minMarkers.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Creates a reduced marker variable — minMarkers","text":"object instance class \"MSnSet\". n Minumum marker instances per class. fcol name markers column featureData slot. Default markers.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/minMarkers.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Creates a reduced marker variable — minMarkers","text":"instance class \"MSnSet\" new feature variables, named original fcol variable n value.","code":""},{"path":[]},{"path":"https://lgatto.github.io/pRoloc/reference/minMarkers.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Creates a reduced marker variable — minMarkers","text":"Laurent Gatto","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/minMarkers.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Creates a reduced marker variable — minMarkers","text":"","code":"library(pRolocdata) data(dunkley2006) d2 <- minMarkers(dunkley2006, 20) getMarkers(dunkley2006) #> organelleMarkers #> ER lumen ER membrane Golgi Mitochondrion PM #> 14 45 28 55 46 #> Plastid Ribosome TGN unknown vacuole #> 20 19 13 428 21 getMarkers(d2, fcol = \"markers20\") #> organelleMarkers #> ER membrane Golgi Mitochondrion PM Plastid #> 45 28 55 46 20 #> unknown vacuole #> 474 21"},{"path":"https://lgatto.github.io/pRoloc/reference/mixing_posterior_check.html","id":null,"dir":"Reference","previous_headings":"","what":"Model calibration plots — mixing_posterior_check","title":"Model calibration plots — mixing_posterior_check","text":"Model calibration model posterior z-scores posterior shrinkage","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/mixing_posterior_check.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Model calibration plots — mixing_posterior_check","text":"","code":"mixing_posterior_check(object, params, priors, fcol = \"markers\")"},{"path":"https://lgatto.github.io/pRoloc/reference/mixing_posterior_check.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Model calibration plots — mixing_posterior_check","text":"object valid object class MSnset params valid object class MCMCParams processed checked convergence priors prior used model fcol columns feature data contain marker data.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/mixing_posterior_check.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Model calibration plots — mixing_posterior_check","text":"Used side effect producing plot. Invisibily returns ggplot object can manipulated","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/mixing_posterior_check.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Model calibration plots — mixing_posterior_check","text":"Oliver M. Crook ","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/mixing_posterior_check.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Model calibration plots — mixing_posterior_check","text":"","code":"if (FALSE) { # \\dontrun{ library(\"pRoloc\") data(\"tan2009r1\") tanres <- tagmMcmcTrain(object = tan2009r1) tanres <- tagmMcmcProcess(tanres) tan2009r1 <- tagmMcmcPredict(object = tan2009r1, params = tanres, probJoint = TRUE) myparams <- chains(e14Tagm_converged_pooled)[[1]] myparams2 <- chains(mcmc_pool_chains(tanres))[[1]] priors <- tanres@priors pRoloc:::mixing_posterior_check(object = tan2009r1, params = myparams2, priors = priors) } # }"},{"path":"https://lgatto.github.io/pRoloc/reference/move2Ds.html","id":null,"dir":"Reference","previous_headings":"","what":"Displays a spatial proteomics animation — move2Ds","title":"Displays a spatial proteomics animation — move2Ds","text":"Given two MSnSet instances one MSnSetList least two items, function produces animation shows transition first data second.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/move2Ds.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Displays a spatial proteomics animation — move2Ds","text":"","code":"move2Ds(object, pcol, fcol = \"markers\", n = 25, hl)"},{"path":"https://lgatto.github.io/pRoloc/reference/move2Ds.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Displays a spatial proteomics animation — move2Ds","text":"object linkS4class{MSnSet} MSnSetList. latter case, two first elements list used plotting others silently ignored. pcol object MSnSet, factor name phenotype variable (phenoData slot) defining split single MSnSet two data sets. Ignored object MSnSetList. fcol Feature meta-data label (fData column name) defining groups differentiated using different colours. Default markers. Use NULL suppress colouring. n Number frames, Default 25. hl optional instance class linkS4class{FeaturesOfInterest} track features interest.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/move2Ds.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Displays a spatial proteomics animation — move2Ds","text":"Used side effect producing short animation.","code":""},{"path":[]},{"path":"https://lgatto.github.io/pRoloc/reference/move2Ds.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Displays a spatial proteomics animation — move2Ds","text":"Laurent Gatto","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/move2Ds.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Displays a spatial proteomics animation — move2Ds","text":"","code":"library(\"pRolocdata\") data(dunkley2006) ## Create a relevant MSnSetList using the dunkley2006 data xx <- split(dunkley2006, \"replicate\") xx1 <- xx[[1]] xx2 <- xx[[2]] fData(xx1)$markers[374] <- \"Golgi\" fData(xx2)$markers[412] <- \"unknown\" xx@x[[1]] <- xx1 xx@x[[2]] <- xx2 ## The features we want to track foi <- FeaturesOfInterest(description = \"test\", fnames = featureNames(xx[[1]])[c(374, 412)]) ## (1) visualise each experiment separately par(mfrow = c(2, 1)) plot2D(xx[[1]], main = \"condition A\") highlightOnPlot(xx[[1]], foi) plot2D(xx[[2]], mirrorY = TRUE, main = \"condition B\") highlightOnPlot(xx[[2]], foi, args = list(mirrorY = TRUE)) ## (2) plot both data on the same plot par(mfrow = c(1, 1)) tmp <- plot2Ds(xx) highlightOnPlot(data1(tmp), foi, lwd = 2) highlightOnPlot(data2(tmp), foi, pch = 5, lwd = 2) ## (3) create an animation move2Ds(xx, pcol = \"replicate\") move2Ds(xx, pcol = \"replicate\", hl = foi)"},{"path":"https://lgatto.github.io/pRoloc/reference/mrkConsProfiles.html","id":null,"dir":"Reference","previous_headings":"","what":"Marker consensus profiles — mrkConsProfiles","title":"Marker consensus profiles — mrkConsProfiles","text":"function calculate average marker profiles.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/mrkConsProfiles.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Marker consensus profiles — mrkConsProfiles","text":"","code":"mrkConsProfiles(object, fcol = \"markers\", method = mean)"},{"path":"https://lgatto.github.io/pRoloc/reference/mrkConsProfiles.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Marker consensus profiles — mrkConsProfiles","text":"object instance class MSnSet. fcol Feature meta-data label (fData column name) defining groups differentiated using different colours. Default markers. method function average marker profiles. Default mean.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/mrkConsProfiles.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Marker consensus profiles — mrkConsProfiles","text":"matrix dimensions number clusters (exluding unknowns) number fractions.","code":""},{"path":[]},{"path":"https://lgatto.github.io/pRoloc/reference/mrkConsProfiles.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Marker consensus profiles — mrkConsProfiles","text":"Laurent Gatto Lisa M. Breckels","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/mrkConsProfiles.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Marker consensus profiles — mrkConsProfiles","text":"","code":"library(\"pRolocdata\") data(dunkley2006) mrkConsProfiles(dunkley2006) #> M1F1A M1F4A M1F7A M1F11A M1F2B M1F5B #> ER lumen 0.34790193 0.2778745 0.2000145 0.1743091 0.49310871 0.2030229 #> ER membrane 0.26954542 0.3094276 0.2201106 0.2010234 0.37832533 0.2433542 #> Golgi 0.10673314 0.2228814 0.3508332 0.3196275 0.12041797 0.2295954 #> Mitochondrion 0.09008695 0.1864223 0.2975309 0.4259333 0.09515331 0.1942079 #> PM 0.18493326 0.2926176 0.2368301 0.2856681 0.28288228 0.2230173 #> Plastid 0.08200481 0.1499930 0.2870436 0.4809921 0.08937813 0.1255232 #> Ribosome 0.26117895 0.2692538 0.2147402 0.2549371 0.34736379 0.2021619 #> TGN 0.14267536 0.3307792 0.3116818 0.2148358 0.19059969 0.3458225 #> vacuole 0.49060776 0.1887146 0.1505610 0.1701423 0.53019938 0.1462491 #> M1F8B M1F11B M2F1A M2F4A M2F7A M2F11A #> ER lumen 0.1632424 0.1405430 0.38528500 0.30223829 0.1643254 0.1480823 #> ER membrane 0.1990741 0.1793234 0.24821447 0.34158018 0.2421851 0.1680087 #> Golgi 0.3546319 0.2952720 0.06979120 0.24087721 0.4075620 0.2818049 #> Mitochondrion 0.3043015 0.4063777 0.05297090 0.15590611 0.3271555 0.4639317 #> PM 0.2244869 0.2695825 0.14423628 0.25059815 0.2784118 0.3266328 #> Plastid 0.3327774 0.4523463 0.05931388 0.09338429 0.2421152 0.6051806 #> Ribosome 0.2143384 0.2361688 0.24835921 0.19839005 0.2084512 0.3447833 #> TGN 0.2799308 0.1836193 0.09905576 0.33923838 0.3503657 0.2112014 #> vacuole 0.1486659 0.1748985 0.52382333 0.16930881 0.1484392 0.1585148 #> M2F2B M2F5B M2F8B M2F11B #> ER lumen 0.41181264 0.28204521 0.1614619 0.1446546 #> ER membrane 0.29584151 0.30213218 0.2223314 0.1797237 #> Golgi 0.09211270 0.25888696 0.3764906 0.2726121 #> Mitochondrion 0.05592373 0.18116613 0.3156597 0.4472919 #> PM 0.17748167 0.22124237 0.2801925 0.3210563 #> Plastid 0.06704418 0.09906525 0.3149460 0.5190335 #> Ribosome 0.21993053 0.20215705 0.2179611 0.3598775 #> TGN 0.13232952 0.33208846 0.3140628 0.2215500 #> vacuole 0.48365443 0.14997229 0.1787520 0.1876555 mrkConsProfiles(dunkley2006, method = median) #> M1F1A M1F4A M1F7A M1F11A M1F2B M1F5B #> ER lumen 0.34319050 0.2788335 0.1992085 0.1686665 0.49232500 0.202000 #> ER membrane 0.26882600 0.3099780 0.2194130 0.2012500 0.37556200 0.242143 #> Golgi 0.10333350 0.2147500 0.3562500 0.3187180 0.11191650 0.229143 #> Mitochondrion 0.09033330 0.1876670 0.2993330 0.4210000 0.08831580 0.191571 #> PM 0.17800000 0.2930000 0.2347515 0.2852500 0.28287250 0.225200 #> Plastid 0.08338885 0.1541700 0.2874090 0.4760250 0.07488665 0.127725 #> Ribosome 0.26450000 0.2740000 0.2120000 0.2434000 0.36000000 0.203000 #> TGN 0.16450000 0.3310000 0.3055000 0.2100000 0.19585700 0.357333 #> vacuole 0.49900000 0.1898570 0.1440000 0.1641430 0.53900000 0.143250 #> M1F8B M1F11B M2F1A M2F4A M2F7A M2F11A #> ER lumen 0.1628330 0.1387500 0.37987800 0.302522 0.1634445 0.1510695 #> ER membrane 0.1982310 0.1800000 0.24625000 0.340711 0.2420000 0.1645710 #> Golgi 0.3605835 0.2973330 0.06733335 0.227000 0.4116250 0.2769165 #> Mitochondrion 0.3036470 0.4071870 0.04750000 0.153333 0.3285000 0.4670000 #> PM 0.2251835 0.2734000 0.13747500 0.248750 0.2732500 0.3357500 #> Plastid 0.3395450 0.4584865 0.05180950 0.086075 0.2419855 0.6028000 #> Ribosome 0.2115000 0.2312220 0.24800000 0.220000 0.2105000 0.2925000 #> TGN 0.2783330 0.1766670 0.10800000 0.314333 0.3480000 0.2112500 #> vacuole 0.1440000 0.1720000 0.53186700 0.167143 0.1488000 0.1587500 #> M2F2B M2F5B M2F8B M2F11B #> ER lumen 0.4166665 0.286537 0.1582335 0.1319000 #> ER membrane 0.2960000 0.302667 0.2225000 0.1693000 #> Golgi 0.0878500 0.255450 0.3808335 0.2707855 #> Mitochondrion 0.0555833 0.176105 0.3158570 0.4507370 #> PM 0.1698125 0.218000 0.2798335 0.3248750 #> Plastid 0.0602500 0.093250 0.3203335 0.5308750 #> Ribosome 0.2450000 0.215000 0.2196670 0.3135000 #> TGN 0.1370000 0.326750 0.2977000 0.2162000 #> vacuole 0.4816670 0.146000 0.1807500 0.1907500 mm <- mrkConsProfiles(dunkley2006) ## Reorder fractions o <- order(dunkley2006$fraction) ## Plot mean organelle profiles using the ## default pRoloc colour palette. matplot(t(mm[, o]), type = \"l\", xlab = \"Fractions\", ylab = \"Relative intensity\", main = \"Mean organelle profiles\", col = getStockcol(), lwd = 2, lty = 1) ## Add a legend addLegend(markerMSnSet(dunkley2006), where = \"topleft\")"},{"path":"https://lgatto.github.io/pRoloc/reference/mrkHClust.html","id":null,"dir":"Reference","previous_headings":"","what":"Draw a dendrogram of subcellular clusters — mrkHClust","title":"Draw a dendrogram of subcellular clusters — mrkHClust","text":"functions calculates average protein profile marker class (proteins unknown localisation ignored) generates dendrogram representing relation marker classes. colours used dendrogram labels taken default colours (see getStockcol) match colours spatial proteomics visualisations plot2D.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/mrkHClust.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Draw a dendrogram of subcellular clusters — mrkHClust","text":"","code":"mrkHClust( object, fcol = \"markers\", distargs, hclustargs, method = mean, plot = TRUE, ... )"},{"path":"https://lgatto.github.io/pRoloc/reference/mrkHClust.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Draw a dendrogram of subcellular clusters — mrkHClust","text":"object instance class MSnSet. fcol Feature meta-data label (fData column name) defining groups differentiated using different colours. Default markers. distargs list arguments passed dist function. hclustargs list arguments passed hclust function. method function average marker profiles. Default mean. plot logical defining whether dendrogram plotted. Default TRUE. ... Additional parameters passed plotting dendrogram.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/mrkHClust.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Draw a dendrogram of subcellular clusters — mrkHClust","text":"Invisibly returns dendrogram object, containing hierarchical cluster computed hclust.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/mrkHClust.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Draw a dendrogram of subcellular clusters — mrkHClust","text":"Laurent Gatto","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/mrkHClust.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Draw a dendrogram of subcellular clusters — mrkHClust","text":"","code":"library(\"pRolocdata\") data(dunkley2006) mrkHClust(dunkley2006)"},{"path":"https://lgatto.github.io/pRoloc/reference/nbClassification.html","id":null,"dir":"Reference","previous_headings":"","what":"nb classification — nbClassification","title":"nb classification — nbClassification","text":"Classification using naive Bayes algorithm.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/nbClassification.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"nb classification — nbClassification","text":"","code":"nbClassification( object, assessRes, scores = c(\"prediction\", \"all\", \"none\"), laplace, fcol = \"markers\", ... )"},{"path":"https://lgatto.github.io/pRoloc/reference/nbClassification.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"nb classification — nbClassification","text":"object instance class \"MSnSet\". assessRes instance class \"GenRegRes\", generated nbOptimisation. scores One \"prediction\", \"\" \"none\" report score predicted class , classes none. laplace assessRes missing, laplace must provided. fcol feature meta-data containing marker definitions. Default markers. ... Additional parameters passed naiveBayes package e1071.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/nbClassification.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"nb classification — nbClassification","text":"instance class \"MSnSet\" nb nb.scores feature variables storing classification results scores respectively.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/nbClassification.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"nb classification — nbClassification","text":"Laurent Gatto","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/nbClassification.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"nb classification — nbClassification","text":"","code":"library(pRolocdata) data(dunkley2006) ## reducing parameter search space and iterations params <- nbOptimisation(dunkley2006, laplace = c(0, 5), times = 3) #> | | | 0% | |===== | 7% | |========= | 13% | |============== | 20% | |=================== | 27% | |======================= | 33% | |============================ | 40% | |================================= | 47% | |===================================== | 53% | |========================================== | 60% | |=============================================== | 67% | |=================================================== | 73% | |======================================================== | 80% | |============================================================= | 87% | |================================================================= | 93% | |======================================================================| 100% params #> Object of class \"GenRegRes\" #> Algorithm: naiveBayes #> Hyper-parameters: #> laplace: 0 5 #> Design: #> Replication: 3 x 5-fold X-validation #> Partitioning: 0.2/0.8 (test/train) #> Results #> macro F1: #> Min. 1st Qu. Median Mean 3rd Qu. Max. #> 0.9055 0.9437 0.9818 0.9624 0.9909 1.0000 #> best laplace: 0 5 plot(params) f1Count(params) #> #> 5 #> 1 levelPlot(params) getParams(params) #> laplace #> 5 res <- nbClassification(dunkley2006, params) #> [1] \"markers\" getPredictions(res, fcol = \"naiveBayes\") #> ans #> ER lumen ER membrane Golgi Mitochondrion PM #> 18 175 98 98 123 #> Plastid Ribosome TGN vacuole #> 52 70 24 31 #> MSnSet (storageMode: lockedEnvironment) #> assayData: 689 features, 16 samples #> element names: exprs #> protocolData: none #> phenoData #> sampleNames: M1F1A M1F4A ... M2F11B (16 total) #> varLabels: membrane.prep fraction replicate #> varMetadata: labelDescription #> featureData #> featureNames: AT1G09210 AT1G21750 ... AT4G39080 (689 total) #> fvarLabels: assigned evidence ... naiveBayes.pred (11 total) #> fvarMetadata: labelDescription #> experimentData: use 'experimentData(object)' #> pubMedIds: 16618929 #> Annotation: #> - - - Processing information - - - #> Loaded on Thu Jul 16 22:53:08 2015. #> Normalised to sum of intensities. #> Added markers from 'mrk' marker vector. Thu Jul 16 22:53:08 2015 #> Performed naiveBayes prediction (laplace=5) Fri Oct 18 17:20:30 2024 #> Added naiveBayes predictions according to global threshold = 0 Fri Oct 18 17:20:30 2024 #> MSnbase version: 1.17.12 getPredictions(res, fcol = \"naiveBayes\", t = 1) #> ans #> ER lumen ER membrane Golgi Mitochondrion PM #> 14 45 69 61 46 #> Plastid Ribosome TGN unknown vacuole #> 43 35 13 336 27 #> MSnSet (storageMode: lockedEnvironment) #> assayData: 689 features, 16 samples #> element names: exprs #> protocolData: none #> phenoData #> sampleNames: M1F1A M1F4A ... M2F11B (16 total) #> varLabels: membrane.prep fraction replicate #> varMetadata: labelDescription #> featureData #> featureNames: AT1G09210 AT1G21750 ... AT4G39080 (689 total) #> fvarLabels: assigned evidence ... naiveBayes.pred (11 total) #> fvarMetadata: labelDescription #> experimentData: use 'experimentData(object)' #> pubMedIds: 16618929 #> Annotation: #> - - - Processing information - - - #> Loaded on Thu Jul 16 22:53:08 2015. #> Normalised to sum of intensities. #> Added markers from 'mrk' marker vector. Thu Jul 16 22:53:08 2015 #> Performed naiveBayes prediction (laplace=5) Fri Oct 18 17:20:30 2024 #> Added naiveBayes predictions according to global threshold = 1 Fri Oct 18 17:20:30 2024 #> MSnbase version: 1.17.12 plot2D(res, fcol = \"naiveBayes\")"},{"path":"https://lgatto.github.io/pRoloc/reference/nbOptimisation.html","id":null,"dir":"Reference","previous_headings":"","what":"nb paramter optimisation — nbOptimisation","title":"nb paramter optimisation — nbOptimisation","text":"Classification algorithm parameter naive Bayes algorithm.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/nbOptimisation.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"nb paramter optimisation — nbOptimisation","text":"","code":"nbOptimisation( object, fcol = \"markers\", laplace = seq(0, 5, 0.5), times = 100, test.size = 0.2, xval = 5, fun = mean, seed, verbose = TRUE, ... )"},{"path":"https://lgatto.github.io/pRoloc/reference/nbOptimisation.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"nb paramter optimisation — nbOptimisation","text":"object instance class \"MSnSet\". fcol feature meta-data containing marker definitions. Default markers. laplace hyper-parameter. Default values seq(0, 5, 0.5). times number times internal cross-validation performed. Default 100. test.size size test data. Default 0.2 (20 percent). xval n-cross validation. Default 5. fun function used summarise xval macro F1 matrices. seed optional random number generator seed. verbose logical defining whether progress bar displayed. ... Additional parameters passed naiveBayes package e1071.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/nbOptimisation.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"nb paramter optimisation — nbOptimisation","text":"instance class \"GenRegRes\".","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/nbOptimisation.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"nb paramter optimisation — nbOptimisation","text":"Note performance scores precision, recall (macro) F1 calculated, NA values replaced 0. decision motivated fact class either NA precision recall result NA F1 score , eventually, NA macro F1 (.e. mean(F1)). Replacing NAs 0s leads F1 values 0 reduced yet defined final macro F1 score.","code":""},{"path":[]},{"path":"https://lgatto.github.io/pRoloc/reference/nbOptimisation.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"nb paramter optimisation — nbOptimisation","text":"Laurent Gatto","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/nicheMeans2D.html","id":null,"dir":"Reference","previous_headings":"","what":"Uncertainty plot organelle means — nicheMeans2D","title":"Uncertainty plot organelle means — nicheMeans2D","text":"Produces pca plot uncertainty organelle means projected onto PCA plot contours.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/nicheMeans2D.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Uncertainty plot organelle means — nicheMeans2D","text":"","code":"nicheMeans2D( object, params, priors, dims = c(1, 2), fcol = \"markers\", aspect = 0.5 )"},{"path":"https://lgatto.github.io/pRoloc/reference/nicheMeans2D.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Uncertainty plot organelle means — nicheMeans2D","text":"object valid object class MSnset params valid object class MCMCParams processed checked convergence priors prior used model dims PCA dimension project data, default c(1,2) fcol columns feature data contain marker data. aspect argument change plotting aspect PCA","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/nicheMeans2D.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Uncertainty plot organelle means — nicheMeans2D","text":"Used side effect producing plot. Invisibily returns ggplot object can manipulated","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/nicheMeans2D.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Uncertainty plot organelle means — nicheMeans2D","text":"Oliver M. Crook ","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/nicheMeans2D.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Uncertainty plot organelle means — nicheMeans2D","text":"","code":"if (FALSE) { # \\dontrun{ library(\"pRolocdata\") data(\"tan2009r1\") tanres <- tagmMcmcTrain(object = tan2009r1) tanres <- tagmMcmcProcess(tanres) tan2009r1 <- tagmMcmcPredict(object = tan2009r1, params = tanres, probJoint = TRUE) myparams <- chains(e14Tagm_converged_pooled)[[1]] myparams2 <- chains(mcmc_pool_chains(tanres))[[1]] priors <- tanres@priors pRoloc:::nicheMeans2D(object = tan2009r1, params = myparams2, priors = priors) } # }"},{"path":"https://lgatto.github.io/pRoloc/reference/nndist-methods.html","id":null,"dir":"Reference","previous_headings":"","what":"Nearest neighbour distances — nndist-methods","title":"Nearest neighbour distances — nndist-methods","text":"Methods computing nearest neighbour indices distances matrix MSnSet instances.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/nndist-methods.html","id":"methods","dir":"Reference","previous_headings":"","what":"Methods","title":"Nearest neighbour distances — nndist-methods","text":"signature(object = \"matrix\", k = \"numeric\", dist = \t\"character\", ...) Calculates indices distances \tk (default 3) nearest neighbours feature (row) \tinput matrix object. distance dist can \teither \"euclidean\" \t\"mahalanobis\". Additional parameters can passed \tinternal function FNN::get.knn. Output matrix \t2 * k columns nrow(object) rows. signature(object = \"MSnSet\", k = \"numeric\", dist = \t\"character\", ...) , MSnSet \tinput. indices distances k nearest \tneighbours added object's feature metadata. signature(object = \"matrix\", query = \"matrix\", k = \"numeric\", ...) two matrix instances provided input, k (default 3) indices distances nearest neighbours query object returned matrix dimensions 2 * k nrow(query). Additional parameters passed FNN::get.knnx. euclidean distance available.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/nndist-methods.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Nearest neighbour distances — nndist-methods","text":"","code":"library(\"pRolocdata\") data(dunkley2006) ## Using a matrix as input m <- exprs(dunkley2006) m[1:4, 1:3] #> M1F1A M1F4A M1F7A #> AT1G09210 0.323250 0.275500 0.216000 #> AT1G21750 0.332000 0.279667 0.222000 #> AT1G51760 0.397250 0.246500 0.168250 #> AT1G56340 0.336733 0.303267 0.201133 head(nndist(m, k = 5)) #> index1euc dist1euc index2euc dist2euc index3euc dist3euc #> AT1G09210 4 0.07704563 151 0.07958198 2 0.08142734 #> AT1G21750 1 0.08142734 4 0.08262245 151 0.08645587 #> AT1G51760 150 0.09921614 156 0.10449514 151 0.10922063 #> AT1G56340 8 0.07268495 1 0.07704563 9 0.07958917 #> AT2G32920 9 0.08767137 4 0.10248944 155 0.10307756 #> AT2G47470 151 0.05067260 153 0.07809223 4 0.08231921 #> index4euc dist4euc index5euc dist5euc #> AT1G09210 6 0.08738381 150 0.11859295 #> AT1G21750 150 0.09657314 6 0.10902502 #> AT1G51760 155 0.11456182 2 0.11749637 #> AT1G56340 6 0.08231921 2 0.08262245 #> AT2G32920 8 0.10670010 6 0.10806363 #> AT2G47470 1 0.08738381 378 0.09215796 tail(nndist(m[1:100, ], k = 2, dist = \"mahalanobis\")) #> index1mah dist1mah index2mah dist2mah #> AT3G26830 37 26.26210 33 25.95250 #> AT3G28580 60 25.95250 35 21.88428 #> AT3G28720 70 31.50309 57 28.63844 #> AT3G44330 72 26.74359 64 26.74359 #> AT3G48890 17 33.69198 36 32.85008 #> AT3G51430 56 26.83278 75 22.23005 ## Same as above for MSnSet d <- nndist(dunkley2006, k = 5) head(fData(d)) #> assigned evidence method new pd.2013 pd.markers markers.orig #> AT1G09210 ER predicted PLSDA known ER ER lumen ER #> AT1G21750 ER predicted PLSDA known ER ER lumen ER #> AT1G51760 ER unknown PLSDA new ER ER lumen unknown #> AT1G56340 ER predicted PLSDA known ER ER lumen ER #> AT2G32920 ER predicted PLSDA known ER ER lumen ER #> AT2G47470 ER predicted PLSDA known ER ER lumen ER #> markers index1euc dist1euc index2euc dist2euc index3euc #> AT1G09210 ER lumen 4 0.07704563 151 0.07958198 2 #> AT1G21750 ER lumen 1 0.08142734 4 0.08262245 151 #> AT1G51760 ER lumen 150 0.09921614 156 0.10449514 151 #> AT1G56340 ER lumen 8 0.07268495 1 0.07704563 9 #> AT2G32920 ER lumen 9 0.08767137 4 0.10248944 155 #> AT2G47470 ER lumen 151 0.05067260 153 0.07809223 4 #> dist3euc index4euc dist4euc index5euc dist5euc #> AT1G09210 0.08142734 6 0.08738381 150 0.11859295 #> AT1G21750 0.08645587 150 0.09657314 6 0.10902502 #> AT1G51760 0.10922063 155 0.11456182 2 0.11749637 #> AT1G56340 0.07958917 6 0.08231921 2 0.08262245 #> AT2G32920 0.10307756 8 0.10670010 6 0.10806363 #> AT2G47470 0.08231921 1 0.08738381 378 0.09215796 d <- nndist(dunkley2006[1:100, ], k = 2, dist = \"mahalanobis\") tail(fData(d)) #> assigned evidence method new pd.2013 pd.markers markers.orig #> AT3G26830 ER unknown PLSDA new ER unknown unknown #> AT3G28580 ER unknown PLSDA new ER unknown unknown #> AT3G28720 unknown unknown PLSDA unknown ER unknown unknown #> AT3G44330 ER unknown PLSDA new ER unknown unknown #> AT3G48890 unknown unknown PLSDA unknown ER unknown unknown #> AT3G51430 ER unknown PLSDA new ER unknown unknown #> markers index1mah dist1mah index2mah dist2mah #> AT3G26830 unknown 37 26.26210 33 25.95250 #> AT3G28580 unknown 60 25.95250 35 21.88428 #> AT3G28720 unknown 70 31.50309 57 28.63844 #> AT3G44330 unknown 72 26.74359 64 26.74359 #> AT3G48890 unknown 17 33.69198 36 32.85008 #> AT3G51430 unknown 56 26.83278 75 22.23005 ## Using a query nndist(m[1:100, ], m[101:110, ], k = 2) #> index1euc dist1euc index2euc dist2euc #> AT3G51440 40 0.08584173 78 0.08761483 #> AT3G51460 59 0.07788915 86 0.07970032 #> AT3G57010 86 0.05580589 61 0.05615363 #> AT3G57030 34 0.07262401 14 0.07373216 #> AT3G57880 34 0.05350903 46 0.05471768 #> AT3G59500 91 0.10986265 24 0.11019115 #> AT3G60600 64 0.07059527 20 0.07176627 #> AT3G62360 48 0.04383448 17 0.05428251 #> AT3G66658 73 0.06079091 34 0.06115031 #> AT4G00175 75 0.07679760 92 0.07719277"},{"path":"https://lgatto.github.io/pRoloc/reference/nnetClassification.html","id":null,"dir":"Reference","previous_headings":"","what":"nnet classification — nnetClassification","title":"nnet classification — nnetClassification","text":"Classification using artificial neural network algorithm.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/nnetClassification.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"nnet classification — nnetClassification","text":"","code":"nnetClassification( object, assessRes, scores = c(\"prediction\", \"all\", \"none\"), decay, size, fcol = \"markers\", ... )"},{"path":"https://lgatto.github.io/pRoloc/reference/nnetClassification.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"nnet classification — nnetClassification","text":"object instance class \"MSnSet\". assessRes instance class \"GenRegRes\", generated nnetOptimisation. scores One \"prediction\", \"\" \"none\" report score predicted class , classes none. decay assessRes missing, decay must provided. size assessRes missing, size must provided. fcol feature meta-data containing marker definitions. Default markers. ... Additional parameters passed nnet package nnet.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/nnetClassification.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"nnet classification — nnetClassification","text":"instance class \"MSnSet\" nnet nnet.scores feature variables storing classification results scores respectively.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/nnetClassification.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"nnet classification — nnetClassification","text":"Laurent Gatto","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/nnetClassification.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"nnet classification — nnetClassification","text":"","code":"library(pRolocdata) data(dunkley2006) ## reducing parameter search space and iterations params <- nnetOptimisation(dunkley2006, decay = 10^(c(-1, -5)), size = c(5, 10), times = 3) #> | | | 0% | |===== | 7% | |========= | 13% | |============== | 20% | |=================== | 27% | |======================= | 33% | |============================ | 40% | |================================= | 47% | |===================================== | 53% | |========================================== | 60% | |=============================================== | 67% | |=================================================== | 73% | |======================================================== | 80% | |============================================================= | 87% | |================================================================= | 93% | |======================================================================| 100% params #> Object of class \"GenRegRes\" #> Algorithm: nnet #> Hyper-parameters: #> decay: 0.1 1e-05 #> size: 5 10 #> Design: #> Replication: 3 x 5-fold X-validation #> Partitioning: 0.2/0.8 (test/train) #> Results #> macro F1: #> Min. 1st Qu. Median Mean 3rd Qu. Max. #> 0.9315 0.9497 0.9680 0.9562 0.9686 0.9692 #> best decay: 1e-05 #> best size: 10 plot(params) f1Count(params) #> 10 #> 1e-05 1 levelPlot(params) getParams(params) #> decay size #> 1e-05 1e+01 res <- nnetClassification(dunkley2006, params) #> [1] \"markers\" #> # weights: 269 #> initial value 697.695219 #> iter 10 value 330.822942 #> iter 20 value 62.982498 #> iter 30 value 6.342970 #> iter 40 value 2.218304 #> iter 50 value 1.029739 #> iter 60 value 0.812753 #> iter 70 value 0.663665 #> iter 80 value 0.487229 #> iter 90 value 0.413383 #> iter 100 value 0.372197 #> final value 0.372197 #> stopped after 100 iterations getPredictions(res, fcol = \"nnet\") #> ans #> ER lumen ER membrane Golgi Mitochondrion PM #> 17 173 94 104 134 #> Plastid Ribosome TGN vacuole #> 51 61 22 33 #> MSnSet (storageMode: lockedEnvironment) #> assayData: 689 features, 16 samples #> element names: exprs #> protocolData: none #> phenoData #> sampleNames: M1F1A M1F4A ... M2F11B (16 total) #> varLabels: membrane.prep fraction replicate #> varMetadata: labelDescription #> featureData #> featureNames: AT1G09210 AT1G21750 ... AT4G39080 (689 total) #> fvarLabels: assigned evidence ... nnet.pred (11 total) #> fvarMetadata: labelDescription #> experimentData: use 'experimentData(object)' #> pubMedIds: 16618929 #> Annotation: #> - - - Processing information - - - #> Loaded on Thu Jul 16 22:53:08 2015. #> Normalised to sum of intensities. #> Added markers from 'mrk' marker vector. Thu Jul 16 22:53:08 2015 #> Performed nnet prediction (decay=1e-05 size=10) Fri Oct 18 17:20:34 2024 #> Added nnet predictions according to global threshold = 0 Fri Oct 18 17:20:34 2024 #> MSnbase version: 1.17.12 getPredictions(res, fcol = \"nnet\", t = 0.75) #> ans #> ER lumen ER membrane Golgi Mitochondrion PM #> 17 170 92 102 128 #> Plastid Ribosome TGN unknown vacuole #> 51 58 20 19 32 #> MSnSet (storageMode: lockedEnvironment) #> assayData: 689 features, 16 samples #> element names: exprs #> protocolData: none #> phenoData #> sampleNames: M1F1A M1F4A ... M2F11B (16 total) #> varLabels: membrane.prep fraction replicate #> varMetadata: labelDescription #> featureData #> featureNames: AT1G09210 AT1G21750 ... AT4G39080 (689 total) #> fvarLabels: assigned evidence ... nnet.pred (11 total) #> fvarMetadata: labelDescription #> experimentData: use 'experimentData(object)' #> pubMedIds: 16618929 #> Annotation: #> - - - Processing information - - - #> Loaded on Thu Jul 16 22:53:08 2015. #> Normalised to sum of intensities. #> Added markers from 'mrk' marker vector. Thu Jul 16 22:53:08 2015 #> Performed nnet prediction (decay=1e-05 size=10) Fri Oct 18 17:20:34 2024 #> Added nnet predictions according to global threshold = 0.75 Fri Oct 18 17:20:34 2024 #> MSnbase version: 1.17.12 plot2D(res, fcol = \"nnet\")"},{"path":"https://lgatto.github.io/pRoloc/reference/nnetOptimisation.html","id":null,"dir":"Reference","previous_headings":"","what":"nnet parameter optimisation — nnetOptimisation","title":"nnet parameter optimisation — nnetOptimisation","text":"Classification parameter optimisation artificial neural network algorithm.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/nnetOptimisation.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"nnet parameter optimisation — nnetOptimisation","text":"","code":"nnetOptimisation( object, fcol = \"markers\", decay = c(0, 10^(-1:-5)), size = seq(1, 10, 2), times = 100, test.size = 0.2, xval = 5, fun = mean, seed, verbose = TRUE, ... )"},{"path":"https://lgatto.github.io/pRoloc/reference/nnetOptimisation.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"nnet parameter optimisation — nnetOptimisation","text":"object instance class \"MSnSet\". fcol feature meta-data containing marker definitions. Default markers. decay hyper-parameter. Default values c(0, 10^(-1:-5)). size hyper-parameter. Default values seq(1, 10, 2). times number times internal cross-validation performed. Default 100. test.size size test data. Default 0.2 (20 percent). xval n-cross validation. Default 5. fun function used summarise xval macro F1 matrices. seed optional random number generator seed. verbose logical defining whether progress bar displayed. ... Additional parameters passed nnet package nnet.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/nnetOptimisation.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"nnet parameter optimisation — nnetOptimisation","text":"instance class \"GenRegRes\".","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/nnetOptimisation.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"nnet parameter optimisation — nnetOptimisation","text":"Note performance scores precision, recall (macro) F1 calculated, NA values replaced 0. decision motivated fact class either NA precision recall result NA F1 score , eventually, NA macro F1 (.e. mean(F1)). Replacing NAs 0s leads F1 values 0 reduced yet defined final macro F1 score.","code":""},{"path":[]},{"path":"https://lgatto.github.io/pRoloc/reference/nnetOptimisation.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"nnet parameter optimisation — nnetOptimisation","text":"Laurent Gatto","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/orderGoAnnotations.html","id":null,"dir":"Reference","previous_headings":"","what":"Orders annotation information — orderGoAnnotations","title":"Orders annotation information — orderGoAnnotations","text":"given matrix annotation information, function returns information ordered according best fit data.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/orderGoAnnotations.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Orders annotation information — orderGoAnnotations","text":"","code":"orderGoAnnotations( object, fcol = \"GOAnnotations\", k = 1:5, n = 5, p = 1/3, verbose = TRUE, seed )"},{"path":"https://lgatto.github.io/pRoloc/reference/orderGoAnnotations.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Orders annotation information — orderGoAnnotations","text":"object instance class MSnSet. fcol name annotations matrix. Default GOAnnotations. k number clusters test. Default k = 1:5 n minimum number proteins per component cluster. p normalisation factor, per k tested verbose logical indicating progress bar displayed. Default TRUE. seed optional random number generation seed.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/orderGoAnnotations.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Orders annotation information — orderGoAnnotations","text":"updated MSnSet containing newly ordered fcol matrix.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/orderGoAnnotations.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Orders annotation information — orderGoAnnotations","text":"typically many protein/annotation sets may fit data order protein sets best fit .e. cluster tightness, computing mean normalised Euclidean distance instances per protein set. protein set .e. proteins labelled specified term/information criteria, find best k cluster components set (default testk = 1:5) according minimum mean normalised pairwise Euclidean distance component clusters. (Note: testing k components found less n proteins components included k reduced 1). component cluster normalised N^p (N total number proteins per component, p power). Hueristally, p = 1/3 normalising N^1/3 found optimum normalisation factor. Candidates matrix ordered according lowest mean normalised pairwise Euclidean distance expect high density, tight clusters smallest mean normalised distance. function wrapper running clustDist, getNormDist, see \"Annotating spatial proteomics data\" vignette details.","code":""},{"path":[]},{"path":"https://lgatto.github.io/pRoloc/reference/orderGoAnnotations.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Orders annotation information — orderGoAnnotations","text":"Lisa M Breckels","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/orgQuants.html","id":null,"dir":"Reference","previous_headings":"","what":"Returns organelle-specific quantile scores — orgQuants","title":"Returns organelle-specific quantile scores — orgQuants","text":"function produces organelle-specific quantiles corresponding given classification scores.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/orgQuants.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Returns organelle-specific quantile scores — orgQuants","text":"","code":"orgQuants(object, fcol, scol, mcol = \"markers\", t, verbose = TRUE)"},{"path":"https://lgatto.github.io/pRoloc/reference/orgQuants.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Returns organelle-specific quantile scores — orgQuants","text":"object instance class \"MSnSet\". fcol name prediction column featureData slot. scol name prediction score column featureData slot. missing, created pasting '.scores' fcol. mcol name column containing training data featureData slot. Default markers. t quantile threshold. verbose TRUE, calculated threholds printed.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/orgQuants.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Returns organelle-specific quantile scores — orgQuants","text":"named vector organelle thresholds.","code":""},{"path":[]},{"path":"https://lgatto.github.io/pRoloc/reference/orgQuants.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Returns organelle-specific quantile scores — orgQuants","text":"Lisa Breckels","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/orgQuants.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Returns organelle-specific quantile scores — orgQuants","text":"","code":"library(\"pRolocdata\") data(dunkley2006) res <- svmClassification(dunkley2006, fcol = \"pd.markers\", sigma = 0.1, cost = 0.5) #> [1] \"pd.markers\" ## 50% top predictions per class ts <- orgQuants(res, fcol = \"svm\", t = .5) #> ER lumen ER membrane Golgi Mitochondrion PM #> 0.3317333 0.8408778 0.7704946 0.7454902 0.7358157 #> Plastid Ribosome TGN vacuole #> 0.7733089 0.5635351 0.5184457 0.5735586 getPredictions(res, fcol = \"svm\", t = ts) #> ans #> ER lumen ER membrane Golgi Mitochondrion PM #> 15 117 65 78 85 #> Plastid Ribosome TGN unknown vacuole #> 36 39 15 213 26 #> MSnSet (storageMode: lockedEnvironment) #> assayData: 689 features, 16 samples #> element names: exprs #> protocolData: none #> phenoData #> sampleNames: M1F1A M1F4A ... M2F11B (16 total) #> varLabels: membrane.prep fraction replicate #> varMetadata: labelDescription #> featureData #> featureNames: AT1G09210 AT1G21750 ... AT4G39080 (689 total) #> fvarLabels: assigned evidence ... svm.pred (11 total) #> fvarMetadata: labelDescription #> experimentData: use 'experimentData(object)' #> pubMedIds: 16618929 #> Annotation: #> - - - Processing information - - - #> Loaded on Thu Jul 16 22:53:08 2015. #> Normalised to sum of intensities. #> Added markers from 'mrk' marker vector. Thu Jul 16 22:53:08 2015 #> Performed svm prediction (cost=0.5 sigma=0.1) Fri Oct 18 17:20:35 2024 #> Added svm predictions according to thresholds: ER lumen = 0.33, ER membrane = 0.84, Golgi = 0.77, Mitochondrion = 0.75, PM = 0.74, Plastid = 0.77, Ribosome = 0.56, TGN = 0.52, vacuole = 0.57 Fri Oct 18 17:20:35 2024 #> MSnbase version: 1.17.12"},{"path":"https://lgatto.github.io/pRoloc/reference/pRolocmarkers.html","id":null,"dir":"Reference","previous_headings":"","what":"Organelle markers — pRolocmarkers","title":"Organelle markers — pRolocmarkers","text":"function retrieves list organelle markers , species provided, prints description available marker sets. markers can added MSnSet using addMarkers function. Several marker version provided (see Details additional information).","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/pRolocmarkers.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Organelle markers — pRolocmarkers","text":"","code":"pRolocmarkers(species, version = \"2\")"},{"path":"https://lgatto.github.io/pRoloc/reference/pRolocmarkers.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Organelle markers — pRolocmarkers","text":"species character(1) defining species interest. reference species markers, just species e.g. \"hsap\". published marker sets species author name e.g. \"hsap_geladaki\". version character(1) defining marker version. Default \"2\".","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/pRolocmarkers.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Organelle markers — pRolocmarkers","text":"Prints description available marker lists species missing named character organelle markers.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/pRolocmarkers.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Organelle markers — pRolocmarkers","text":"Version 1 markers contributed various members Cambridge Centre Proteomics, particular Dr Dan Nightingale yeast, Dr Andy Christoforou Dr Claire Mulvey human, Dr Arnoud Groen Arabodopsis Dr Claire Mulvey mouse. addition, original (curated) markers pRolocdata datasets extracted (see pRolocdata details references). Curation involved verification publicly available subcellular localisation annotation based curators knowledge organelles/proteins considered tracing original statement literature. Version 2 markers (current default) updated Charlotte Hutchings Cambridge Centre Proteomics. Reference species marker sets version 1 minor corrections updated naming system. Version 2 also contains additional marker sets spatial proteomics publications. References source publications provided : Geladaki, ., Britovsek, N.K., Breckels, L.M., Smith, T.S., Vennard, O.L., Mulvey, C.M., Crook, O.M., Gatto, L. Lilley, K.S. (2019) Combining LOPIT differential ultracentrifugation high-resolution spatial proteomics. Nature Communications. 10 (1). doi:10.1038/s41467-018-08191-w Christopher, J.., Breckels, L.M., Crook, O.M., Vazquez–Chantada, M., Barratt, D. Lilley, K.S. (2024) Global proteomics indicates subcellular-specific anti-ferroptotic responses ionizing radiation.p.2024.09.12.611851. doi:10.1101/2024.09.12.611851 Itzhak, D.N., Tyanova, S., Cox, J. Borner, G.H. (2016) Global, quantitative dynamic mapping protein subcellular localization. eLife. 5. doi:10.7554/elife.16950 Villanueva, E., Smith, T., Pizzinga, M., Elzek, M., Queiroz, R.M.L., Harvey, R.F., Breckels, L.M., Crook, O.M., Monti, M., Dezi, V., Willis, .E. Lilley, K.S. (2023) System-wide analysis RNA protein subcellular localization dynamics. Nature Methods. 1-12. doi:10.1038/s41592-023-02101-9 Christoforou, ., Mulvey, C.M., Breckels, L.M., Geladaki, ., Hurrell, T., Hayward, P.C., Naake, T., Gatto, L., Viner, R., Arias, .M. Lilley, K.S. (2016) draft map mouse pluripotent stem cell spatial proteome. Nature Communications. 7 (1). doi:10.1038/ncomms9992 Barylyuk, K., Koreny, L., Ke, H., Butterworth, S., Crook, O.M., Lassadi, ., Gupta, V., Tromer, E., Mourier, T., Stevens, T.J., Breckels, L.M., Pain, ., Lilley, K.S. Waller, R.F. (2020) Comprehensive Subcellular Atlas Toxoplasma Proteome via hyperLOPIT Provides Spatial Context Protein Functions. Cell Host Microbe. 28 (5), 752-766.e9. doi:10.1016/j.chom.2020.09.011 Moloney, N.M., Barylyuk, K., Tromer, E., Crook, O.M., Breckels, L.M., Lilley, K.S., Waller, R.F. MacGregor, P. (2023) Mapping diversity African trypanosomes using high resolution spatial proteomics. Nature Communications. 14 (1), 4401. doi:10.1038/s41467-023-40125-z Note: markers provided starting point generate reliable sets organelle markers still need verified new data light quantitative data study conditions.","code":""},{"path":[]},{"path":"https://lgatto.github.io/pRoloc/reference/pRolocmarkers.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Organelle markers — pRolocmarkers","text":"Laurent Gatto","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/pRolocmarkers.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Organelle markers — pRolocmarkers","text":"","code":"pRolocmarkers() #> 14 marker lists (version 2) available: #> Arabidopsis thaliana [atha]: #> Ids: TAIR, 543 markers #> Drosophila melanogaster [dmel]: #> Ids: Uniprot, 179 markers #> Gallus gallus [ggal]: #> Ids: IPI, 102 markers #> Homo sapiens [hsap]: #> Ids: Uniprot, 872 markers #> Homo sapiens [hsap_christopher]: #> Ids: Uniprot, 1509 markers #> Homo sapiens [hsap_geladaki]: #> Ids: Uniprot, 579 markers #> Homo sapiens [hsap_itzhak]: #> Ids: Uniprot, 1076 markers #> Homo sapiens [hsap_villaneuva]: #> Ids: Uniprot, 682 markers #> Mus musculus [mmus]: #> Ids: Uniprot, 937 markers #> Mus musculus [mmus_christoforou]: #> Ids: Uniprot, 922 markers #> Saccharomyces cerevisiae [scer_sgd]: #> Ids: SGD, 259 markers #> Saccharomyces cerevisiae [scer_uniprot]: #> Ids: Uniprot, 259 markers #> Toxoplasma gondii [toxo_barylyuk]: #> Ids: ToxoDB gene identifier, 718 markers #> Trypanosoma brucei [tryp_moloney]: #> Ids: TriTrypDB gene identifier, 891 markers pRolocmarkers(\"hsap\") #> P08865 P0CW22 P15880 #> \"40S Ribosome\" \"40S Ribosome\" \"40S Ribosome\" #> P22090 P23396 P25398 #> \"40S Ribosome\" \"40S Ribosome\" \"40S Ribosome\" #> P39019 P42677 P46781 #> \"40S Ribosome\" \"40S Ribosome\" \"40S Ribosome\" #> P46782 P46783 P60866 #> \"40S Ribosome\" \"40S Ribosome\" \"40S Ribosome\" #> P61247 P62081 P62241 #> \"40S Ribosome\" \"40S Ribosome\" \"40S Ribosome\" #> P62244 P62249 P62263 #> \"40S Ribosome\" \"40S Ribosome\" \"40S Ribosome\" #> P62266 P62269 P62273 #> \"40S Ribosome\" \"40S Ribosome\" \"40S Ribosome\" #> P62277 P62280 P62701 #> \"40S Ribosome\" \"40S Ribosome\" \"40S Ribosome\" #> P62753 P62841 P62847-2 #> \"40S Ribosome\" \"40S Ribosome\" \"40S Ribosome\" #> P62851 P62854 P62857 #> \"40S Ribosome\" \"40S Ribosome\" \"40S Ribosome\" #> P62861 P62979 P63220 #> \"40S Ribosome\" \"40S Ribosome\" \"40S Ribosome\" #> P05386 P05387 P05388 #> \"60S Ribosome\" \"60S Ribosome\" \"60S Ribosome\" #> P18077 P18124 P18621 #> \"60S Ribosome\" \"60S Ribosome\" \"60S Ribosome\" #> P26373 P27635 P30050 #> \"60S Ribosome\" \"60S Ribosome\" \"60S Ribosome\" #> P32969 P35268 P36578 #> \"60S Ribosome\" \"60S Ribosome\" \"60S Ribosome\" #> P39023 P40429 P42766 #> \"60S Ribosome\" \"60S Ribosome\" \"60S Ribosome\" #> P46776 P46777 P46778 #> \"60S Ribosome\" \"60S Ribosome\" \"60S Ribosome\" #> P46779 P47914 P49207 #> \"60S Ribosome\" \"60S Ribosome\" \"60S Ribosome\" #> P50914 P61254 P61313 #> \"60S Ribosome\" \"60S Ribosome\" \"60S Ribosome\" #> P61353 P61513 P61927 #> \"60S Ribosome\" \"60S Ribosome\" \"60S Ribosome\" #> P62424 P62750 P62829 #> \"60S Ribosome\" \"60S Ribosome\" \"60S Ribosome\" #> P62888 P62899 P62906 #> \"60S Ribosome\" \"60S Ribosome\" \"60S Ribosome\" #> P62910 P62913-2 P62917 #> \"60S Ribosome\" \"60S Ribosome\" \"60S Ribosome\" #> P62987 P63173 P83731 #> \"60S Ribosome\" \"60S Ribosome\" \"60S Ribosome\" #> P83881 P84098 Q02543 #> \"60S Ribosome\" \"60S Ribosome\" \"60S Ribosome\" #> Q02878 Q07020 Q969Q0 #> \"60S Ribosome\" \"60S Ribosome\" \"60S Ribosome\" #> Q9Y3U8 Q01518 P13796 #> \"60S Ribosome\" \"Actin Cytoskeleton\" \"Actin Cytoskeleton\" #> P63261 P28289 O15143 #> \"Actin Cytoskeleton\" \"Actin Cytoskeleton\" \"Actin Cytoskeleton\" #> O15144 O15145 O15511 #> \"Actin Cytoskeleton\" \"Actin Cytoskeleton\" \"Actin Cytoskeleton\" #> O75369 O75369-8 P06753 #> \"Actin Cytoskeleton\" \"Actin Cytoskeleton\" \"Actin Cytoskeleton\" #> P06753-2 P06753-3 P06753-5 #> \"Actin Cytoskeleton\" \"Actin Cytoskeleton\" \"Actin Cytoskeleton\" #> P09493 P09493-10 P09493-5 #> \"Actin Cytoskeleton\" \"Actin Cytoskeleton\" \"Actin Cytoskeleton\" #> P12814 P23528 P47755 #> \"Actin Cytoskeleton\" \"Actin Cytoskeleton\" \"Actin Cytoskeleton\" #> P47756 P47756-2 P52907 #> \"Actin Cytoskeleton\" \"Actin Cytoskeleton\" \"Actin Cytoskeleton\" #> P59998 P60709 P60981-2 #> \"Actin Cytoskeleton\" \"Actin Cytoskeleton\" \"Actin Cytoskeleton\" #> P61158 P61160 P67936 #> \"Actin Cytoskeleton\" \"Actin Cytoskeleton\" \"Actin Cytoskeleton\" #> P68032 Q16658 Q562R1 #> \"Actin Cytoskeleton\" \"Actin Cytoskeleton\" \"Actin Cytoskeleton\" #> Q92747 Q9BPX5 Q9BR76 #> \"Actin Cytoskeleton\" \"Actin Cytoskeleton\" \"Actin Cytoskeleton\" #> Q9NYL9 Q9NZ32 Q9NZR1 #> \"Actin Cytoskeleton\" \"Actin Cytoskeleton\" \"Actin Cytoskeleton\" #> Q9P1U1-3 Q9Y281 Q9Y4G6 #> \"Actin Cytoskeleton\" \"Actin Cytoskeleton\" \"Actin Cytoskeleton\" #> P06753-6 Q14847 P07737 #> \"Actin Cytoskeleton\" \"Actin Cytoskeleton\" \"Actin Cytoskeleton\" #> Q9UJW0 P34932 P22102 #> \"Actin Cytoskeleton\" \"Cytosol\" \"Cytosol\" #> Q8TCU6 O60841 Q12882 #> \"Cytosol\" \"Cytosol\" \"Cytosol\" #> P49915-2 Q04446 Q6XQN6 #> \"Cytosol\" \"Cytosol\" \"Cytosol\" #> O43847 Q06210-2 Q3KQV9 #> \"Cytosol\" \"Cytosol\" \"Cytosol\" #> O14841 P19971 Q16543 #> \"Cytosol\" \"Cytosol\" \"Cytosol\" #> P36871 Q9Y617 P60891 #> \"Cytosol\" \"Cytosol\" \"Cytosol\" #> P16152 Q9HAB8 Q96KP4 #> \"Cytosol\" \"Cytosol\" \"Cytosol\" #> P32119 Q9NR45 P19623 #> \"Cytosol\" \"Cytosol\" \"Cytosol\" #> P53602 O43765 P29218 #> \"Cytosol\" \"Cytosol\" \"Cytosol\" #> O95336 P16930 P08243-2 #> \"Cytosol\" \"Cytosol\" \"Cytosol\" #> P34949 Q9HA64 P49593 #> \"Cytosol\" \"Cytosol\" \"Cytosol\" #> P61081 P00492 Q9P2T1 #> \"Cytosol\" \"Cytosol\" \"Cytosol\" #> Q15274 O95394 Q9H773 #> \"Cytosol\" \"Cytosol\" \"Cytosol\" #> P29762 Q6IA69 Q14376 #> \"Cytosol\" \"Cytosol\" \"Cytosol\" #> P09467 Q96AT9 Q13630 #> \"Cytosol\" \"Cytosol\" \"Cytosol\" #> Q9H8S9 Q96BN8 P37837 #> \"Cytosol\" \"Cytosol\" \"Cytosol\" #> P48637 Q9NR50 O75822 #> \"Cytosol\" \"Cytosol\" \"Cytosol\" #> A0AVT1 P15170-2 P31153 #> \"Cytosol\" \"Cytosol\" \"Cytosol\" #> Q04760 P50225 P18440 #> \"Cytosol\" \"Cytosol\" \"Cytosol\" #> P51570 Q9BRA2 P50452 #> \"Cytosol\" \"Cytosol\" \"Cytosol\" #> A6NDG6 Q9NRX4 Q9BQC3 #> \"Cytosol\" \"Cytosol\" \"Cytosol\" #> O14732 Q9H2P9 O43175 #> \"Cytosol\" \"Cytosol\" \"Cytosol\" #> Q9NT62 P52788 P07741 #> \"Cytosol\" \"Cytosol\" \"Cytosol\" #> P49588 P09488 P49591 #> \"Cytosol\" \"Cytosol\" \"Cytosol\" #> P49589 Q96C23 P49902 #> \"Cytosol\" \"Cytosol\" \"Cytosol\" #> Q7L5D6 P30711 Q9UPN7 #> \"Cytosol\" \"Cytosol\" \"Cytosol\" #> Q9NYU2-2 Q5JRA6 P13667 #> \"ER\" \"ER\" \"ER\" #> P30101 P07237 P16615 #> \"ER\" \"ER\" \"ER\" #> P04843 P16435 P08240 #> \"ER\" \"ER\" \"ER\" #> O60568 P27824 Q12797 #> \"ER\" \"ER\" \"ER\" #> Q8NBJ5 Q15084-3 Q9UGP8 #> \"ER\" \"ER\" \"ER\" #> P48449 Q13438-4 Q02809 #> \"ER\" \"ER\" \"ER\" #> O95479 Q9H0X9-2 Q13724 #> \"ER\" \"ER\" \"ER\" #> O15320-8 Q14571 O75477 #> \"ER\" \"ER\" \"ER\" #> Q9BS26 Q7Z2K6 P14314-2 #> \"ER\" \"ER\" \"ER\" #> P30040 P50454 Q8NBS9 #> \"ER\" \"ER\" \"ER\" #> Q9Y4P3 Q9BPW9 Q9BZQ6-2 #> \"ER\" \"ER\" \"ER\" #> P07099 O15269 Q16850 #> \"ER\" \"ER\" \"ER\" #> O15270 Q14554 Q969N2-5 #> \"ER\" \"ER\" \"ER\" #> Q96JJ7 Q969V3-2 Q92611 #> \"ER\" \"ER\" \"ER\" #> Q6UWW8 Q6P1M0 P39656 #> \"ER\" \"ER\" \"ER\" #> Q9BT09 Q96S52 O00469 #> \"ER\" \"ER\" \"ER\" #> Q86UL3 Q15293 O95302 #> \"ER\" \"ER\" \"ER\" #> Q96DZ1 Q15005 Q643R3 #> \"ER\" \"ER\" \"ER\" #> Q9H3N1 Q8NBM4 O43292 #> \"ER\" \"ER\" \"ER\" #> Q9H488 O95881 Q9BU23-2 #> \"ER\" \"ER\" \"ER\" #> Q6IAN0 Q8TC12 Q9UBM7 #> \"ER\" \"ER\" \"ER\" #> P61619 Q9NZ01 P26885 #> \"ER\" \"ER\" \"ER\" #> Q9H6R6-2 Q99442 P60468 #> \"ER\" \"ER\" \"ER\" #> Q92604 O00400 Q86TM6-2 #> \"ER\" \"ER\" \"ER\" #> P61009 Q9P0I2 Q15011-3 #> \"ER\" \"ER\" \"ER\" #> Q9BV94-2 Q9UNW1 P43307 #> \"ER\" \"ER\" \"ER\" #> O75298-3 Q8N5M9 Q96HR9 #> \"ER\" \"ER\" \"ER\" #> Q96E22 O75845 Q9P2X0 #> \"ER\" \"ER\" \"ER\" #> Q6Y288 Q9BQB6 Q8IYK4 #> \"ER\" \"ER\" \"ER\" #> Q7Z4H8 O15460 O95470 #> \"ER\" \"ER\" \"ER\" #> Q2TAA5 Q8TCJ2 O60476 #> \"ER\" \"ER\" \"Golgi\" #> O75063 P26572 Q10469 #> \"Golgi\" \"Golgi\" \"Golgi\" #> Q10472 Q14789 Q14789-2 #> \"Golgi\" \"Golgi\" \"Golgi\" #> Q14789-4 Q16706 Q5SRI9 #> \"Golgi\" \"Golgi\" \"Golgi\" #> Q7LGA3 Q8TBA6 Q8TBA6-2 #> \"Golgi\" \"Golgi\" \"Golgi\" #> Q9NX62 Q9NXS2 Q9NY97 #> \"Golgi\" \"Golgi\" \"Golgi\" #> Q9NY97-2 Q9P2E5 Q495W5-2 #> \"Golgi\" \"Golgi\" \"Golgi\" #> A6NKF9 Q9BYC5 O94766 #> \"Golgi\" \"Golgi\" \"Golgi\" #> P49641 Q8NBZ7 Q8NEW0 #> \"Golgi\" \"Golgi\" \"Golgi\" #> O14653 O14653-3 P22083 #> \"Golgi\" \"Golgi\" \"Golgi\" #> Q13948 Q86SF2 P33908 #> \"Golgi\" \"Golgi\" \"Golgi\" #> Q8NCL4 O00461 Q8N4A0 #> \"Golgi\" \"Golgi\" \"Golgi\" #> O00115 O00115-2 O00462 #> \"Lysosome\" \"Lysosome\" \"Lysosome\" #> O00754 P04062-4 P04066 #> \"Lysosome\" \"Lysosome\" \"Lysosome\" #> P06865 P07339 P07602 #> \"Lysosome\" \"Lysosome\" \"Lysosome\" #> P07686 P07858 P09668 #> \"Lysosome\" \"Lysosome\" \"Lysosome\" #> P10253 P10619 P10619-2 #> \"Lysosome\" \"Lysosome\" \"Lysosome\" #> P15586 P17050 P34059 #> \"Lysosome\" \"Lysosome\" \"Lysosome\" #> P38571 P38571-2 P43234 #> \"Lysosome\" \"Lysosome\" \"Lysosome\" #> Q13571 Q14108 Q6ZP29 #> \"Lysosome\" \"Lysosome\" \"Lysosome\" #> Q6ZP29-2 Q8NBJ9 Q9NUN5 #> \"Lysosome\" \"Lysosome\" \"Lysosome\" #> Q9NUN5-3 Q9UBX1 Q9UHL4 #> \"Lysosome\" \"Lysosome\" \"Lysosome\" #> Q8WWB7-2 O14773 Q9Y646 #> \"Lysosome\" \"Lysosome\" \"Lysosome\" #> P35475 Q8NCC3 Q9HAT2-2 #> \"Lysosome\" \"Lysosome\" \"Lysosome\" #> Q02083-2 Q01459 Q96RQ9 #> \"Lysosome\" \"Lysosome\" \"Lysosome\" #> Q68CP4-2 P15289 P54802 #> \"Lysosome\" \"Lysosome\" \"Lysosome\" #> P40939 Q13423 P43304 #> \"Mitochondrion\" \"Mitochondrion\" \"Mitochondrion\" #> O60313-2 Q99798 Q3SY69 #> \"Mitochondrion\" \"Mitochondrion\" \"Mitochondrion\" #> Q12931-2 Q02218 Q5JTZ9 #> \"Mitochondrion\" \"Mitochondrion\" \"Mitochondrion\" #> P28331-4 Q5JRX3 Q9Y6N5 #> \"Mitochondrion\" \"Mitochondrion\" \"Mitochondrion\" #> P49411 P00367 O94826 #> \"Mitochondrion\" \"Mitochondrion\" \"Mitochondrion\" #> O95202 P09622 Q16822 #> \"Mitochondrion\" \"Mitochondrion\" \"Mitochondrion\" #> P31930 P23786 P31040 #> \"Mitochondrion\" \"Mitochondrion\" \"Mitochondrion\" #> P23368 P24752 P49448 #> \"Mitochondrion\" \"Mitochondrion\" \"Mitochondrion\" #> P05091 P56181-2 P22695 #> \"Mitochondrion\" \"Mitochondrion\" \"Mitochondrion\" #> Q10713 O43615 P22033 #> \"Mitochondrion\" \"Mitochondrion\" \"Mitochondrion\" #> Q6NUK1 P49821-2 Q02252-2 #> \"Mitochondrion\" \"Mitochondrion\" \"Mitochondrion\" #> P30837 P13804 P42765 #> \"Mitochondrion\" \"Mitochondrion\" \"Mitochondrion\" #> O75390 P10515 P22570 #> \"Mitochondrion\" \"Mitochondrion\" \"Mitochondrion\" #> Q96CM8-3 P12694 P30084 #> \"Mitochondrion\" \"Mitochondrion\" \"Mitochondrion\" #> O75306 P55809 O00411 #> \"Mitochondrion\" \"Mitochondrion\" \"Mitochondrion\" #> P50213 Q00325-2 O75439 #> \"Mitochondrion\" \"Mitochondrion\" \"Mitochondrion\" #> O00330 P04181 P30405 #> \"Mitochondrion\" \"Mitochondrion\" \"Mitochondrion\" #> P26440 Q9Y305-2 P11182 #> \"Mitochondrion\" \"Mitochondrion\" \"Mitochondrion\" #> Q53H12 O75947 O95299 #> \"Mitochondrion\" \"Mitochondrion\" \"Mitochondrion\" #> P53007 P22830 P16219 #> \"Mitochondrion\" \"Mitochondrion\" \"Mitochondrion\" #> Q4G0N4 P13995 Q16134 #> \"Mitochondrion\" \"Mitochondrion\" \"Mitochondrion\" #> P30038 P36542 O96008 #> \"Mitochondrion\" \"Mitochondrion\" \"Mitochondrion\" #> P30042 P53597 Q02127 #> \"Mitochondrion\" \"Mitochondrion\" \"Mitochondrion\" #> Q3ZCQ8 Q15118 P19404 #> \"Mitochondrion\" \"Mitochondrion\" \"Mitochondrion\" #> P47985 O75027 O43837 #> \"Mitochondrion\" \"Mitochondrion\" \"Mitochondrion\" #> Q8N0X4 Q6NVY1 P46199 #> \"Mitochondrion\" \"Mitochondrion\" \"Mitochondrion\" #> P43897 P13073 P45954 #> \"Mitochondrion\" \"Mitochondrion\" \"Mitochondrion\" #> O15382 P51649 P27144 #> \"Mitochondrion\" \"Mitochondrion\" \"Mitochondrion\" #> O00217 P32322 P51553 #> \"Mitochondrion\" \"Mitochondrion\" \"Mitochondrion\" #> P42126 P08574 O43181 #> \"Mitochondrion\" \"Mitochondrion\" \"Mitochondrion\" #> Q15070-2 O75208 P62072 #> \"Mitochondrion\" \"Mitochondrion\" \"Mitochondrion\" #> P18859 O43716 O60830 #> \"Mitochondrion\" \"Mitochondrion\" \"Mitochondrion\" #> O75251 P10606 O75964 #> \"Mitochondrion\" \"Mitochondrion\" \"Mitochondrion\" #> O43678 O14925 P00403 #> \"Mitochondrion\" \"Mitochondrion\" \"Mitochondrion\" #> O75380 Q9Y5L4 O95169-3 #> \"Mitochondrion\" \"Mitochondrion\" \"Mitochondrion\" #> Q9Y5J9 P30049 P09669 #> \"Mitochondrion\" \"Mitochondrion\" \"Mitochondrion\" #> Q9Y5J7 Q99766 P15954 #> \"Mitochondrion\" \"Mitochondrion\" \"Mitochondrion\" #> P10109 O95563 P23434 #> \"Mitochondrion\" \"Mitochondrion\" \"Mitochondrion\" #> O95167 O43676 Q8IUX1-4 #> \"Mitochondrion\" \"Mitochondrion\" \"Mitochondrion\" #> P0DJ07 O14521-2 O00142-2 #> \"Mitochondrion\" \"Mitochondrion\" \"Mitochondrion\" #> Q9UKU7 Q8NI60 Q15031 #> \"Mitochondrion\" \"Mitochondrion\" \"Mitochondrion\" #> Q9P0J1 Q9NUB1 O75127 #> \"Mitochondrion\" \"Mitochondrion\" \"Mitochondrion\" #> O43819 P07919 O75879 #> \"Mitochondrion\" \"Mitochondrion\" \"Mitochondrion\" #> O14874 Q16740 Q5HYK3 #> \"Mitochondrion\" \"Mitochondrion\" \"Mitochondrion\" #> Q15120 Q5T160 P46013 #> \"Mitochondrion\" \"Mitochondrion\" \"Nucleus\" #> P02545 Q14683 P20700 #> \"Nucleus\" \"Nucleus\" \"Nucleus\" #> P11388 A6NHR9 Q9UQE7 #> \"Nucleus\" \"Nucleus\" \"Nucleus\" #> O95347 Q9NTJ3 Q03252 #> \"Nucleus\" \"Nucleus\" \"Nucleus\" #> O60264 Q9NRL2 Q9NTI5 #> \"Nucleus\" \"Nucleus\" \"Nucleus\" #> Q5UIP0 Q29RF7 Q9Y5B9 #> \"Nucleus\" \"Nucleus\" \"Nucleus\" #> Q9NR30 Q9GZR7 P24928 #> \"Nucleus\" \"Nucleus\" \"Nucleus\" #> Q8N1F7 Q8NI27 P52948-5 #> \"Nucleus\" \"Nucleus\" \"Nucleus\" #> O94776 Q92922 P11387 #> \"Nucleus\" \"Nucleus\" \"Nucleus\" #> Q7LBC6 P16401 P42167 #> \"Nucleus\" \"Nucleus\" \"Nucleus\" #> O95239 Q5SSJ5 Q9Y2U8 #> \"Nucleus\" \"Nucleus\" \"Nucleus\" #> O60934 Q9H0A0 P10412 #> \"Nucleus\" \"Nucleus\" \"Nucleus\" #> P43246 P16402 Q15424-4 #> \"Nucleus\" \"Nucleus\" \"Nucleus\" #> Q08945 Q9NXV6 Q01826 #> \"Nucleus\" \"Nucleus\" \"Nucleus\" #> P51532-5 P16403 Q8NFC6 #> \"Nucleus\" \"Nucleus\" \"Nucleus\" #> P23193 O60341 P42167-2 #> \"Nucleus\" \"Nucleus\" \"Nucleus\" #> Q86YP4 P42695 Q96ST3 #> \"Nucleus\" \"Nucleus\" \"Nucleus\" #> O14981 O00567 P35251-2 #> \"Nucleus\" \"Nucleus\" \"Nucleus\" #> Q92522 Q8WXF1 Q8WXI9 #> \"Nucleus\" \"Nucleus\" \"Nucleus\" #> Q15059 Q5QJE6 P49711 #> \"Nucleus\" \"Nucleus\" \"Nucleus\" #> O75694 Q96FV9 O60216 #> \"Nucleus\" \"Nucleus\" \"Nucleus\" #> P35249 P35269 P62805 #> \"Nucleus\" \"Nucleus\" \"Nucleus\" #> Q9NX58 Q15554 Q14807 #> \"Nucleus\" \"Nucleus\" \"Nucleus\" #> Q969G3-2 O43684-2 Q13573 #> \"Nucleus\" \"Nucleus\" \"Nucleus\" #> P85037 Q96SB8 P07305 #> \"Nucleus\" \"Nucleus\" \"Nucleus\" #> O14647 P84243 P68431 #> \"Nucleus\" \"Nucleus\" \"Nucleus\" #> P25490 Q03164-2 P35250 #> \"Nucleus\" \"Nucleus\" \"Nucleus\" #> Q13769 Q9Y3T9 Q92925-3 #> \"Nucleus\" \"Nucleus\" \"Nucleus\" #> P20585 Q9H8H0 P40937 #> \"Nucleus\" \"Nucleus\" \"Nucleus\" #> Q13111 P40938 P18887 #> \"Nucleus\" \"Nucleus\" \"Nucleus\" #> Q12824-2 P13984 Q9H9Y6 #> \"Nucleus\" \"Nucleus\" \"Nucleus\" #> O43818 O15525 Q9Y3Y2-4 #> \"Nucleus\" \"Nucleus\" \"Nucleus\" #> Q76FK4-4 O15047 Q13415 #> \"Nucleus\" \"Nucleus\" \"Nucleus\" #> P0C0S5 Q8IXM2 Q13416 #> \"Nucleus\" \"Nucleus\" \"Nucleus\" #> Q9UBD5 Q9P0W2-3 P52701 #> \"Nucleus\" \"Nucleus\" \"Nucleus\" #> O75475 O60885 P26583 #> \"Nucleus\" \"Nucleus\" \"Nucleus\" #> O15347 Q9H7Z6 Q9NVP1 #> \"Nucleus\" \"Nucleus\" \"Nucleus\" #> Q9BVJ6 Q9BQ39 O15381 #> \"Nucleus\" \"Nucleus\" \"Nucleus\" #> Q969X6 P55769 Q9NV31 #> \"Nucleus\" \"Nucleus\" \"Nucleus\" #> Q9NPE3 O00116 O14832 #> \"Nucleus\" \"Peroxisome\" \"Peroxisome\" #> O15254 O43808 O43933 #> \"Peroxisome\" \"Peroxisome\" \"Peroxisome\" #> O75381 O75381-2 O96011 #> \"Peroxisome\" \"Peroxisome\" \"Peroxisome\" #> P09110 P0C024 P28328 #> \"Peroxisome\" \"Peroxisome\" \"Peroxisome\" #> P51659 Q08426 Q13608 #> \"Peroxisome\" \"Peroxisome\" \"Peroxisome\" #> Q15067 Q15067-2 Q7Z412 #> \"Peroxisome\" \"Peroxisome\" \"Peroxisome\" #> Q7Z412-2 Q86WA8 Q8WVX9 #> \"Peroxisome\" \"Peroxisome\" \"Peroxisome\" #> Q9BY49 Q9NR77 Q9NUI1 #> \"Peroxisome\" \"Peroxisome\" \"Peroxisome\" #> Q9P0Z9 Q9UKG9 Q9Y6I8 #> \"Peroxisome\" \"Peroxisome\" \"Peroxisome\" #> O14734 O00161 O14786 #> \"Peroxisome\" \"PM\" \"PM\" #> O14786-3 O14828-2 O14910 #> \"PM\" \"PM\" \"PM\" #> O15031 O15394 O43760 #> \"PM\" \"PM\" \"PM\" #> O60241-4 O60449 O60449-3 #> \"PM\" \"PM\" \"PM\" #> O60462-4 O60637-3 O75019-2 #> \"PM\" \"PM\" \"PM\" #> O75955 O75976 O94856 #> \"PM\" \"PM\" \"PM\" #> O94910-2 O95297-2 O95502 #> \"PM\" \"PM\" \"PM\" #> P01892 P04216 P05023 #> \"PM\" \"PM\" \"PM\" #> P05026 P05106 P05362 #> \"PM\" \"PM\" \"PM\" #> P05556 P06213-2 P06756-3 #> \"PM\" \"PM\" \"PM\" #> P07204 P07949 P08195-2 #> \"PM\" \"PM\" \"PM\" #> P08571 P08575-2 P08582 #> \"PM\" \"PM\" \"PM\" #> P08648 P08754 P09543 #> \"PM\" \"PM\" \"PM\" #> P10586-2 P11166 P11215 #> \"PM\" \"PM\" \"PM\" #> P12318-2 P13164 P13591 #> \"PM\" \"PM\" \"PM\" #> P13591-1 P13598 P13612 #> \"PM\" \"PM\" \"PM\" #> P14209-3 P14415 P16070-18 #> \"PM\" \"PM\" \"PM\" #> P16150 P16284-3 P17301 #> \"PM\" \"PM\" \"PM\" #> P17677 P17813-2 P18084 #> \"PM\" \"PM\" \"PM\" #> P19022 P19022-2 P19397 #> \"PM\" \"PM\" \"PM\" #> P20020 P20020-6 P20138 #> \"PM\" \"PM\" \"PM\" #> P20701 P20702 P21589 #> \"PM\" \"PM\" \"PM\" #> P22794 P23229 P23634-4 #> \"PM\" \"PM\" \"PM\" #> P26010 P26992 P27105 #> \"PM\" \"PM\" \"PM\" #> P27701-2 P29323-2 P32004 #> \"PM\" \"PM\" \"PM\" #> P32249 P32942 P32970 #> \"PM\" \"PM\" \"PM\" #> P33527-4 P35222 P35408 #> \"PM\" \"PM\" \"PM\" #> P35613-2 P36383 P38570 #> \"PM\" \"PM\" \"PM\" #> P41597-2 P41732 P42857-2 #> \"PM\" \"PM\" \"PM\" #> P43250-2 P46939 P48509 #> \"PM\" \"PM\" \"PM\" #> P48960-2 P50895 P51674 #> \"PM\" \"PM\" \"PM\" #> P54762 P55196-3 P63092 #> \"PM\" \"PM\" \"PM\" #> P78552-2 P84095 P98155-2 #> \"PM\" \"PM\" \"PM\" #> P98172 Q01650 Q01814 #> \"PM\" \"PM\" \"PM\" #> Q03405 Q04941 Q08722 #> \"PM\" \"PM\" \"PM\" #> Q12846 Q13449 Q13491 #> \"PM\" \"PM\" \"PM\" #> Q13740-2 Q14254 Q14699 #> \"PM\" \"PM\" \"PM\" #> Q14982-2 Q15262 Q15722 #> \"PM\" \"PM\" \"PM\" #> Q16720 Q6GTX8-3 Q6IA17 #> \"PM\" \"PM\" \"PM\" #> Q6UXK5 Q6X4W1 Q7Z2K8 #> \"PM\" \"PM\" \"PM\" #> Q7Z3B1 Q7Z403-2 Q7Z6M3 #> \"PM\" \"PM\" \"PM\" #> Q8IWK6-3 Q8IX19 Q8IYJ0 #> \"PM\" \"PM\" \"PM\" #> Q8N0W4 Q8N2Q7 Q8N8Q9-2 #> \"PM\" \"PM\" \"PM\" #> Q8N9M5 Q8NC67-3 Q8NFZ4 #> \"PM\" \"PM\" \"PM\" #> Q8NHJ6-2 Q8NHJ6-3 Q8NHL6 #> \"PM\" \"PM\" \"PM\" #> Q8TBP5 Q8TCZ2-6 Q92692 #> \"PM\" \"PM\" \"PM\" #> Q92823-3 Q92854 Q92859-2 #> \"PM\" \"PM\" \"PM\" #> Q96D96-4 Q96F46-2 Q96PE1 #> \"PM\" \"PM\" \"PM\" #> Q96S97 Q99569 Q99569-2 #> \"PM\" \"PM\" \"PM\" #> Q99571 Q99572-8 Q99795 #> \"PM\" \"PM\" \"PM\" #> Q9BY67-5 Q9GZY6 Q9H2W1 #> \"PM\" \"PM\" \"PM\" #> Q9H6B4 Q9H6X2-5 Q9H7M9 #> \"PM\" \"PM\" \"PM\" #> Q9H813 Q9HAR2 Q9NPR9 #> \"PM\" \"PM\" \"PM\" #> Q9NQS5 Q9NT68-2 Q9NW97 #> \"PM\" \"PM\" \"PM\" #> Q9NZ94 Q9P121 Q9UBG0 #> \"PM\" \"PM\" \"PM\" #> Q9UHW9-3 Q9UIW2 Q9Y219-2 #> \"PM\" \"PM\" \"PM\" #> Q9Y287-2 Q9Y2J2-2 Q9Y624 #> \"PM\" \"PM\" \"PM\" #> Q9Y639 Q9UIQ6 P78536 #> \"PM\" \"PM\" \"PM\" #> P08311 Q9NWQ8 P04839 #> \"PM\" \"PM\" \"PM\" #> P14384 P11234 P07333 #> \"PM\" \"PM\" \"PM\" #> Q02487 P63218 P30825 #> \"PM\" \"PM\" \"PM\" #> Q9NRM0 P41231 P32246 #> \"PM\" \"PM\" \"PM\" #> Q9NPG4 Q13433 P98153 #> \"PM\" \"PM\" \"PM\" #> P51511 P31641 Q99460 #> \"PM\" \"PM\" \"Proteasome\" #> Q13200 O43242 P25786 #> \"Proteasome\" \"Proteasome\" \"Proteasome\" #> O00232 Q15008 O00231 #> \"Proteasome\" \"Proteasome\" \"Proteasome\" #> Q06323 O14818 Q9UNM6 #> \"Proteasome\" \"Proteasome\" \"Proteasome\" #> P60900 P55036 P25789 #> \"Proteasome\" \"Proteasome\" \"Proteasome\" #> Q9UL46 P20618 P25788-2 #> \"Proteasome\" \"Proteasome\" \"Proteasome\" #> P28062 P61289 P25787 #> \"Proteasome\" \"Proteasome\" \"Proteasome\" #> P28066 P49720 P49721 #> \"Proteasome\" \"Proteasome\" \"Proteasome\" #> P51665 P40306 O75832 #> \"Proteasome\" \"Proteasome\" \"Proteasome\" #> P28070 P28072 P48556 #> \"Proteasome\" \"Proteasome\" \"Proteasome\" #> P28065 O00487 O95456-2 #> \"Proteasome\" \"Proteasome\" \"Proteasome\" #> Q99436 P62195-2 P62191 #> \"Proteasome\" \"Proteasome\" \"Proteasome\" #> P43686 P35998 #> \"Proteasome\" \"Proteasome\" table(pRolocmarkers(\"hsap\")) #> #> 40S Ribosome 60S Ribosome Actin Cytoskeleton Cytosol #> 33 46 45 77 #> ER Golgi Lysosome Mitochondrion #> 92 34 42 134 #> Nucleus PM Peroxisome Proteasome #> 116 190 27 36 ## Old markers pRolocmarkers(\"hsap\", version = \"2\")[\"Q9BPW9\"] #> Q9BPW9 #> \"ER\" pRolocmarkers(\"hsap\", version = \"1\")[\"Q9BPW9\"] #> Q9BPW9 #> \"Endoplasmic Reticulum\""},{"path":"https://lgatto.github.io/pRoloc/reference/perTurboClassification.html","id":null,"dir":"Reference","previous_headings":"","what":"perTurbo classification — perTurboClassification","title":"perTurbo classification — perTurboClassification","text":"Classification using PerTurbo algorithm.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/perTurboClassification.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"perTurbo classification — perTurboClassification","text":"","code":"perTurboClassification( object, assessRes, scores = c(\"prediction\", \"all\", \"none\"), pRegul, sigma, inv, reg, fcol = \"markers\" )"},{"path":"https://lgatto.github.io/pRoloc/reference/perTurboClassification.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"perTurbo classification — perTurboClassification","text":"object instance class \"MSnSet\". assessRes instance class \"GenRegRes\", generated svmRegularisation. scores One \"prediction\", \"\" \"none\" report score predicted class , classes none. pRegul assessRes missing, pRegul must provided. See perTurboOptimisation details. sigma assessRes missing, sigma must provided. See perTurboOptimisation details. inv type algorithm used invert matrix. Values : \"Inversion Cholesky\" (chol2inv), \"Moore Penrose\" (ginv), \"solve\" (solve), \"svd\" (svd). Default value \"Inversion Cholesky\". reg type regularisation matrix. Values \"none\", \"trunc\" \"tikhonov\". Default value \"tikhonov\". fcol feature meta-data containing marker definitions. Default markers.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/perTurboClassification.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"perTurbo classification — perTurboClassification","text":"instance class \"MSnSet\" perTurbo perTurbo.scores feature variables storing classification results scores respectively.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/perTurboClassification.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"perTurbo classification — perTurboClassification","text":"N. Courty, T. Burger, J. Laurent. \"PerTurbo: new classification algorithm based spectrum perturbations Laplace-Beltrami operator\", European Conference Machine Learning Principles Practice Knowledge Discovery Databases (ECML-PKDD 2011), D. Gunopulos et al. (Eds.): ECML PKDD 2011, Part , LNAI 6911, pp. 359 - 374, Athens, Greece, September 2011.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/perTurboClassification.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"perTurbo classification — perTurboClassification","text":"Thomas Burger Samuel Wieczorek","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/perTurboClassification.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"perTurbo classification — perTurboClassification","text":"","code":"library(pRolocdata) data(dunkley2006) ## reducing parameter search space params <- perTurboOptimisation(dunkley2006, pRegul = 2^seq(-2,2,2), sigma = 10^seq(-1, 1, 1), inv = \"Inversion Cholesky\", reg =\"tikhonov\", times = 3) #> | | | 0% | |===== | 7% | |========= | 13% | |============== | 20% | |=================== | 27% | |======================= | 33% | |============================ | 40% | |================================= | 47% | |===================================== | 53% | |========================================== | 60% | |=============================================== | 67% | |=================================================== | 73% | |======================================================== | 80% | |============================================================= | 87% | |================================================================= | 93% | |======================================================================| 100% params #> Object of class \"GenRegRes\" #> Algorithm: perTurbo #> Hyper-parameters: #> pRegul: 0.25 1 4 #> sigma: 0.1 1 10 #> other: Inversion Cholesky tikhonov #> Design: #> Replication: 3 x 5-fold X-validation #> Partitioning: 0.2/0.8 (test/train) #> Results #> macro F1: #> Min. 1st Qu. Median Mean 3rd Qu. Max. #> 1 1 1 1 1 1 #> best sigma: 0.1 #> best pRegul: 4 1 0.25 plot(params) f1Count(params) #> 0.25 1 4 #> 0.1 1 1 1 levelPlot(params) getParams(params) #> sigma pRegul #> 0.1 4.0 res <- perTurboClassification(dunkley2006, params) getPredictions(res, fcol = \"perTurbo\") #> ans #> ER lumen ER membrane Golgi Mitochondrion PM #> 20 181 96 107 134 #> Plastid Ribosome TGN vacuole #> 49 50 20 32 #> MSnSet (storageMode: lockedEnvironment) #> assayData: 689 features, 16 samples #> element names: exprs #> protocolData: none #> phenoData #> sampleNames: M1F1A M1F4A ... M2F11B (16 total) #> varLabels: membrane.prep fraction replicate #> varMetadata: labelDescription #> featureData #> featureNames: AT1G09210 AT1G21750 ... AT4G39080 (689 total) #> fvarLabels: assigned evidence ... perTurbo.pred (11 total) #> fvarMetadata: labelDescription #> experimentData: use 'experimentData(object)' #> pubMedIds: 16618929 #> Annotation: #> - - - Processing information - - - #> Loaded on Thu Jul 16 22:53:08 2015. #> Normalised to sum of intensities. #> Added markers from 'mrk' marker vector. Thu Jul 16 22:53:08 2015 #> Performed perTurbo prediction (sigma=0.1 pRegul=4) Fri Oct 18 17:20:46 2024 #> Added perTurbo predictions according to global threshold = 0 Fri Oct 18 17:20:46 2024 #> MSnbase version: 1.17.12 getPredictions(res, fcol = \"perTurbo\", t = 0.75) #> ans #> ER lumen ER membrane Golgi Mitochondrion PM #> 14 45 28 55 46 #> Plastid Ribosome TGN unknown vacuole #> 20 19 13 428 21 #> MSnSet (storageMode: lockedEnvironment) #> assayData: 689 features, 16 samples #> element names: exprs #> protocolData: none #> phenoData #> sampleNames: M1F1A M1F4A ... M2F11B (16 total) #> varLabels: membrane.prep fraction replicate #> varMetadata: labelDescription #> featureData #> featureNames: AT1G09210 AT1G21750 ... AT4G39080 (689 total) #> fvarLabels: assigned evidence ... perTurbo.pred (11 total) #> fvarMetadata: labelDescription #> experimentData: use 'experimentData(object)' #> pubMedIds: 16618929 #> Annotation: #> - - - Processing information - - - #> Loaded on Thu Jul 16 22:53:08 2015. #> Normalised to sum of intensities. #> Added markers from 'mrk' marker vector. Thu Jul 16 22:53:08 2015 #> Performed perTurbo prediction (sigma=0.1 pRegul=4) Fri Oct 18 17:20:46 2024 #> Added perTurbo predictions according to global threshold = 0.75 Fri Oct 18 17:20:46 2024 #> MSnbase version: 1.17.12 plot2D(res, fcol = \"perTurbo\")"},{"path":"https://lgatto.github.io/pRoloc/reference/perTurboOptimisation.html","id":null,"dir":"Reference","previous_headings":"","what":"PerTurbo parameter optimisation — perTurboOptimisation","title":"PerTurbo parameter optimisation — perTurboOptimisation","text":"Classification parameter optimisation PerTurbo algorithm","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/perTurboOptimisation.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"PerTurbo parameter optimisation — perTurboOptimisation","text":"","code":"perTurboOptimisation( object, fcol = \"markers\", pRegul = 10^(seq(from = -1, to = 0, by = 0.2)), sigma = 10^(seq(from = -1, to = 1, by = 0.5)), inv = c(\"Inversion Cholesky\", \"Moore Penrose\", \"solve\", \"svd\"), reg = c(\"tikhonov\", \"none\", \"trunc\"), times = 1, test.size = 0.2, xval = 5, fun = mean, seed, verbose = TRUE )"},{"path":"https://lgatto.github.io/pRoloc/reference/perTurboOptimisation.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"PerTurbo parameter optimisation — perTurboOptimisation","text":"object instance class \"MSnSet\". fcol feature meta-data containing marker definitions. Default markers. pRegul hyper-parameter regularisation (values ]0,1] ). reg ==\"trunc\", pRegul percentage eigen values matrix. reg ==\"tikhonov\", 'pRegul' parameter tikhonov regularisation. Available configurations : \"Inversion Cholesky\" - (\"tikhonov\" / \"none\"), \"Moore Penrose\" - (\"tikhonov\" / \"none\"), \"solve\" - (\"tikhonov\" / \"none\"), \"svd\" - (\"tikhonov\" / \"none\" / \"trunc\"). sigma hyper-parameter. inv type algorithm used invert matrix. Values : \"Inversion Cholesky\" (chol2inv), \"Moore Penrose\" (ginv), \"solve\" (solve), \"svd\" (svd). Default value \"Inversion Cholesky\". reg type regularisation matrix. Values \"none\", \"trunc\" \"tikhonov\". Default value \"tikhonov\". times number times internal cross-validation performed. Default 100. test.size size test data. Default 0.2 (20 percent). xval n-cross validation. Default 5. fun function used summarise times macro F1 matrices. seed optional random number generator seed. verbose logical defining whether progress bar displayed.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/perTurboOptimisation.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"PerTurbo parameter optimisation — perTurboOptimisation","text":"instance class \"GenRegRes\".","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/perTurboOptimisation.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"PerTurbo parameter optimisation — perTurboOptimisation","text":"Note performance scores precision, recall (macro) F1 calculated, NA values replaced 0. decision motivated fact class either NA precision recall result NA F1 score , eventually, NA macro F1 (.e. mean(F1)). Replacing NAs 0s leads F1 values 0 reduced yet defined final macro F1 score.","code":""},{"path":[]},{"path":"https://lgatto.github.io/pRoloc/reference/perTurboOptimisation.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"PerTurbo parameter optimisation — perTurboOptimisation","text":"Thomas Burger Samuel Wieczorek","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/phenoDisco.html","id":null,"dir":"Reference","previous_headings":"","what":"Runs the phenoDisco algorithm. — phenoDisco","title":"Runs the phenoDisco algorithm. — phenoDisco","text":"phenoDisco semi-supervised iterative approach detect new protein clusters.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/phenoDisco.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Runs the phenoDisco algorithm. — phenoDisco","text":"","code":"phenoDisco( object, fcol = \"markers\", times = 100, GS = 10, allIter = FALSE, p = 0.05, ndims = 2, modelNames = mclust.options(\"emModelNames\"), G = 1:9, BPPARAM, tmpfile, seed, verbose = TRUE, dimred = c(\"PCA\", \"t-SNE\"), ... )"},{"path":"https://lgatto.github.io/pRoloc/reference/phenoDisco.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Runs the phenoDisco algorithm. — phenoDisco","text":"object instance class MSnSet. fcol character indicating organellar markers column name feature meta-data. Default markers. times Number runs tracking. Default 100. GS Group size, .e many proteins make group. Default 10 (minimum group size 4). allIter logical, defining predictions iterations saved. Default FALSE. p Significance level outlier detection. Default 0.05. ndims Number principal components use input disocvery analysis. Default 2. Added version 1.3.9. modelNames vector characters indicating models fitted EM phase clustering using Mclust. help file mclust::mclustModelNames describes available models. Default model names c(\"EII\", \"VII\", \"EEI\", \"VEI\", \"EVI\", \"VVI\", \"EEE\", \"EEV\", \"VEV\", \"VVV\"), returned mclust.options(\"emModelNames\"). Note using possible models substantially increases running time. Legacy models c(\"EEE\",\"EEV\",\"VEV\",\"VVV\"), .e. ellipsoidal models. G integer vector specifying numbers mixture components (clusters) BIC calculated. default G=1:9 (Mclust). BPPARAM Support parallel processing using BiocParallel infrastructure. missing (default), default registered BiocParallelParam parameters used. Alternatively, one can pass valid BiocParallelParam parameter instance: SnowParam, MulticoreParam, DoparParam, ... see BiocParallel package details. revert origianl serial implementation, use NULL. tmpfile optional character save temporary MSnSet iteration. Ignored missing. useful long runs track phenotypes possibly kill run convergence observed. run completes, temporary file deleted returning final result. seed optional numeric length 1 specifing random number generator seed used. relevant executed serialised mode BPPARAM = NULL. See BPPARAM details. verbose Logical, indicating messages printed execution algorithm. dimred characater defining Principal Component Analysis (\"PCA\") t-Distributed Stochastic Neighbour Embedding (\"t-SNE\") use reduce dimensions prior running phenoDisco novelty detection. ... Additional arguments passed dimensionality reduction method. PCA t-SNE, data scaled centred default, parameters (scale centre PCA, pca_scale pca_center t-SNE set). using t-SNE however, important tune perplexity max iterations parameters. See Dimensionality reduction section pRoloc vignette details.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/phenoDisco.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Runs the phenoDisco algorithm. — phenoDisco","text":"instance class MSnSet containing phenoDisco predictions.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/phenoDisco.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Runs the phenoDisco algorithm. — phenoDisco","text":"algorithm performs phenotype discovery analysis described Breckels et al. Using approach one can identify putative subcellular groupings organelle proteomics experiments comprehensive validation unbiased fashion. method based work Yin et al. used iterated rounds Gaussian Mixture Modelling using Expectation Maximisation algorithm combined non-parametric outlier detection test identify new phenotype clusters. One requires 2 classes labelled data minimum 6 markers per class run algorithm. function check remove features missing values using filterNA method. parallel implementation, relying BiocParallel package, added version 1.3.9. See BPPARAM arguent details. Important: Prior version 1.1.2 row order output different row order input. now fixed row ordering now input output objects.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/phenoDisco.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Runs the phenoDisco algorithm. — phenoDisco","text":"Yin Z, Zhou X, Bakal C, Li F, Sun Y, Perrimon N, Wong ST. Using iterative cluster merging improved gap statistics perform online phenotype discovery context high-throughput RNAi screens. BMC Bioinformatics. 2008 Jun 5;9:264. PubMed PMID: 18534020. Breckels LM, Gatto L, Christoforou , Groen AJ, Lilley KS Trotter MWB. Effect Organelle Discovery upon Sub-Cellular Protein Localisation. J Proteomics. 2013 Aug 2;88:129-40. doi: 10.1016/j.jprot.2013.02.019. Epub 2013 Mar 21. PubMed PMID: 23523639.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/phenoDisco.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Runs the phenoDisco algorithm. — phenoDisco","text":"Lisa M. Breckels ","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/phenoDisco.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Runs the phenoDisco algorithm. — phenoDisco","text":"","code":"if (FALSE) { # \\dontrun{ library(pRolocdata) data(tan2009r1) pdres <- phenoDisco(tan2009r1, fcol = \"PLSDA\") getPredictions(pdres, fcol = \"pd\", scol = NULL) plot2D(pdres, fcol = \"pd\") ## to pre-process the data with t-SNE instead of PCA pdres <- phenoDisco(tan2009r1, fcol = \"PLSDA\", dimred = \"t-SNE\") } # }"},{"path":"https://lgatto.github.io/pRoloc/reference/plot2D.html","id":null,"dir":"Reference","previous_headings":"","what":"Plot organelle assignment data and results. — plot2D","title":"Plot organelle assignment data and results. — plot2D","text":"Generate 2 3 dimensional feature distribution plots illustrate localistation clusters. Rows/features containing NA values removed prior dimension reduction except \"nipals\" method. method, advised set method argument `ncomp` low number dimensions avoid computing components analysing large datasets.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/plot2D.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plot organelle assignment data and results. — plot2D","text":"","code":"plot2D( object, fcol = \"markers\", fpch, unknown = \"unknown\", dims = 1:2, score = 1, method = \"PCA\", methargs, axsSwitch = FALSE, mirrorX = FALSE, mirrorY = FALSE, col, pch, cex, index = FALSE, idx.cex = 0.75, addLegend, identify = FALSE, plot = TRUE, grid = TRUE, ... ) # S4 method for class 'MSnSet' plot3D( object, fcol = \"markers\", dims = c(1, 2, 3), radius1 = 0.1, radius2 = radius1 * 2, plot = TRUE, ... )"},{"path":"https://lgatto.github.io/pRoloc/reference/plot2D.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plot organelle assignment data and results. — plot2D","text":"object instance class MSnSet. fcol Feature meta-data label (fData column name) defining groups differentiated using different colours. Default markers. Use NULL suppress colouring. fpch Featre meta-data label (fData column name) desining groups differentiated using different point symbols. unknown character (default \"unknown\") defining proteins unknown/un-labelled localisation labelled. dims numeric length 2 (3 plot3D) defining dimensions plotted. Defaults c(1, 2) c(1, 2, 3). Always 1:2 MDS. score numeric specifying minimum organelle assignment score consider features assigned organelle. (yet implemented). method character describe transform data plot. One \"PCA\" (default), \"MDS\", \"kpca\", \"nipals\", \"t-SNE\" \"lda\", defining dimensionality reduction applied: principal component analysis (see prcomp), classical multidimensional scaling (see cmdscale), kernel PCA (see kpca), nipals (principal component analysis NIPALS, non-linear iterative partial least squares support missing values; see nipals) t-SNE (see Rtsne) linear discriminant analysis (see lda). last method uses fcol defined sub-cellular clusters ration within ad cluster variance maximised. methods unsupervised make use fcol annotate plot. Prior t-SNE, duplicated features removed message informs user filtering needed. \"scree\" can also used produce scree plot. \"hexbin\" applies PCA data uses bivariate binning hexagonal cells hexbin emphasise cluster density. none used, data plotted , .e. without transformation. case, object can either MSnSet matrix (invisibly returned plot2D). enables re-generate figure without computing dimensionality reduction , can time consuming certain methods. object matrix, MSnSet containing feature metadata must provided methargs (see details). Available methods listed plot2Dmethods. methargs list arguments passed method called. missing, data scaled centred prior PCA t-SNE (.e. Rtsne's arguments pca_center pca_scale set TRUE). method = \"none\" object matrix, first argument methargs must MSnSet matching features object. axsSwitch logical indicating whether axes switched. mirrorX logical indicating whether x axis mirrored? mirrorY logical indicating whether y axis mirrored? col character appropriate length defining colours. pch character appropriate length defining point character. cex Character expansion. index logical (default FALSE, indicating feature indices plotted top symbols. idx.cex numeric specifying character expansion (default 0.75) feature indices. relevant index TRUE. addLegend character indicating add legend. See addLegendfor details. missing (default), legend added. identify logical (default TRUE) defining user interaction expected identify individual data points plot. See also identify. plot logical defining figure plotted. Useful retrieving data . Default TRUE. grid logical indicating whether grid plotted. Default TRUE. ... Additional parameters passed plot points. radius1 numeric specifying radius feature unknown localisation. Default 0.1, specidied data scale. See plot3d details. radius2 numeric specifying radius marker feature. Default radius * 2.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/plot2D.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Plot organelle assignment data and results. — plot2D","text":"Used side effects generating plot. Invisibly returns 2 3 dimensions plotted.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/plot2D.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Plot organelle assignment data and results. — plot2D","text":"plot3D relies ##' rgl package, loaded automatically. Note plot2D update version 1.3.6 support organelle classes colours defined getStockcol. cases, default colours recycled using default plotting characters defined getStockpch. See example illustration. alpha argument also depreciated version 1.3.6. Use setStockcol set colours transparency instead. See example . Version 1.11.3: plot data , .e. without transformation, method can set \"none\" ( opposed passing pre-computed values method matrix, previous versions). object MSnSet, untransformed values assay data plotted. object matrix coordinates, matching MSnSet must passed methargs.","code":""},{"path":[]},{"path":"https://lgatto.github.io/pRoloc/reference/plot2D.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Plot organelle assignment data and results. — plot2D","text":"Laurent Gatto ","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/plot2D.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Plot organelle assignment data and results. — plot2D","text":"","code":"library(\"pRolocdata\") data(dunkley2006) plot2D(dunkley2006, fcol = NULL) plot2D(dunkley2006, fcol = NULL, col = \"black\") plot2D(dunkley2006, fcol = \"markers\") addLegend(dunkley2006, fcol = \"markers\", where = \"topright\", cex = 0.5, bty = \"n\", ncol = 3) title(main = \"plot2D example\") ## available methods plot2Dmethods #> [1] \"PCA\" \"MDS\" \"kpca\" \"lda\" \"t-SNE\" \"nipals\" \"hexbin\" \"none\" #> [9] \"scree\" plot2D(dunkley2006, fcol = NULL, method = \"kpca\", col = \"black\") plot2D(dunkley2006, fcol = NULL, method = \"kpca\", col = \"black\", methargs = list(kpar = list(sigma = 1))) plot2D(dunkley2006, method = \"lda\") plot2D(dunkley2006, method = \"hexbin\") ## Using transparent colours setStockcol(paste0(getStockcol(), \"80\")) plot2D(dunkley2006, fcol = \"markers\") ## New behavious in 1.3.6 when not enough colours setStockcol(c(\"blue\", \"red\", \"green\")) getStockcol() ## only 3 colours to be recycled #> [1] \"blue\" \"red\" \"green\" getMarkers(dunkley2006) #> organelleMarkers #> ER lumen ER membrane Golgi Mitochondrion PM #> 14 45 28 55 46 #> Plastid Ribosome TGN unknown vacuole #> 20 19 13 428 21 plot2D(dunkley2006) #> Not enough colours: using colours and pch. ## reset colours setStockcol(NULL) plot2D(dunkley2006, method = \"none\") ## plotting along 2 first fractions plot2D(dunkley2006, dims = c(3, 5), method = \"none\") ## plotting along fractions 3 and 5 ## pre-calculate PC1 and PC2 coordinates pca <- plot2D(dunkley2006, plot=FALSE) head(pca) #> PC1 (64.36%) PC2 (22.34%) #> AT1G09210 -4.734261 -0.8204175 #> AT1G21750 -4.615276 -1.1891468 #> AT1G51760 -4.770573 -1.6292717 #> AT1G56340 -5.318056 -0.9972462 #> AT2G32920 -5.135122 -1.5283630 #> AT2G47470 -4.899410 -0.8145343 plot2D(pca, method = \"none\", methargs = list(dunkley2006)) ## plotting in 3 dimenstions plot3D(dunkley2006) #> Loading required package: rgl #> Warning: RGL: unable to open X11 display #> Warning: 'rgl.init' failed, running with 'rgl.useNULL = TRUE'. plot3D(dunkley2006, radius2 = 0.3) plot3D(dunkley2006, dims = c(2, 4, 6))"},{"path":"https://lgatto.github.io/pRoloc/reference/plot2Ds.html","id":null,"dir":"Reference","previous_headings":"","what":"Draw 2 data sets on one PCA plot — plot2Ds","title":"Draw 2 data sets on one PCA plot — plot2Ds","text":"Takes 2 linkS4class{MSnSet} instances input plot two data sets PCA plot. second data points projected PC1 PC2 dimensions calculated first data set.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/plot2Ds.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Draw 2 data sets on one PCA plot — plot2Ds","text":"","code":"plot2Ds( object, pcol, fcol = \"markers\", cex.x = 1, cex.y = 1, pch.x = 21, pch.y = 23, col, mirrorX = FALSE, mirrorY = FALSE, plot = TRUE, ... )"},{"path":"https://lgatto.github.io/pRoloc/reference/plot2Ds.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Draw 2 data sets on one PCA plot — plot2Ds","text":"object MSnSet MSnSetList. latter case, two first elements list used plotting others silently ignored. pcol object MSnSet, factor name phenotype variable (phenoData slot) defining split single MSnSet two data sets. Ignored object MSnSetList. fcol Feature meta-data label (fData column name) defining groups differentiated using different colours. Default markers. Use NULL suppress colouring. cex.x Character expansion first data set. Default 1. cex.y Character expansion second data set. Default 1. pch.x Plotting character first data set. Default 21. pch.y Plotting character second data set. Default 23. col vector colours highlight different classes defined fcol. missing (default), default colours used (see getStockcol). mirrorX logical indicating whether x axis mirrored? mirrorY logical indicating whether y axis mirrored? plot TRUE (default), plot produced. ... Additinal parameters passed plot points.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/plot2Ds.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Draw 2 data sets on one PCA plot — plot2Ds","text":"Used side effects producing plot. Invisibly returns object class plot2Ds, list PCA analyses results (see prcomp) first data set new coordinates second data sets, used produce plot respective point colours. elements can accessed data1, data2, col1 code2 respectively.","code":""},{"path":[]},{"path":"https://lgatto.github.io/pRoloc/reference/plot2Ds.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Draw 2 data sets on one PCA plot — plot2Ds","text":"Laurent Gatto","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/plot2Ds.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Draw 2 data sets on one PCA plot — plot2Ds","text":"","code":"library(\"pRolocdata\") data(tan2009r1) data(tan2009r2) msnl <- MSnSetList(list(tan2009r1, tan2009r2)) plot2Ds(msnl) ## tweaking the parameters plot2Ds(list(tan2009r1, tan2009r2), fcol = NULL, cex.x = 1.5) ## input is 1 MSnSet containing 2 data sets data(dunkley2006) plot2Ds(dunkley2006, pcol = \"replicate\") ## no plot, just the data res <- plot2Ds(dunkley2006, pcol = \"replicate\", plot = FALSE) res #> $pca #> Standard deviations (1, .., p=8): #> [1] 2.262922407 1.371773556 0.746055402 0.487710756 0.355766910 0.276373741 #> [7] 0.002122164 0.001415174 #> #> Rotation (n x k) = (8 x 8): #> PC1 PC2 PC3 PC4 PC5 PC6 #> M1F1A -0.3962096 -0.2485627 -0.2797386 -0.2859203 -0.1062071 -0.4494687 #> M1F4A -0.3040624 0.4250988 0.4962665 -0.3052282 0.3844434 0.3348049 #> M1F7A 0.3504491 0.3425841 -0.3419524 0.4256061 0.5524150 -0.2123026 #> M1F11A 0.4114593 -0.1807571 0.1945606 0.2517424 -0.4273908 0.4013499 #> M2F1A -0.3831189 -0.2855956 -0.3170905 0.2579206 0.2095711 0.4791081 #> M2F4A -0.2929859 0.4953337 0.2077168 0.4245483 -0.4393174 -0.3114312 #> M2F7A 0.2890872 0.4455778 -0.4616572 -0.5370165 -0.2590656 0.1888524 #> M2F11A 0.3771715 -0.2863752 0.4047969 -0.2131187 0.2215026 -0.3428269 #> PC7 PC8 #> M1F1A -0.63833506 -0.02137118 #> M1F4A -0.35686742 -0.01212579 #> M1F7A -0.33375608 -0.01103564 #> M1F11A -0.59384097 -0.02020646 #> M2F1A 0.01947284 -0.57510162 #> M2F4A 0.01335776 -0.39401602 #> M2F7A 0.01131747 -0.33684803 #> M2F11A 0.02116750 -0.63198818 #> #> $pred #> PC1 PC2 PC3 PC4 PC5 #> AT1G01610 -1.050349635 0.316300182 -0.4354560378 -0.4717085911 -0.265654674 #> AT1G02120 -3.403593297 -0.841328606 -0.5742400859 -0.1597541054 -0.068631737 #> AT1G02520 -0.219741942 -0.730211475 -0.2558058906 -0.5749253925 -0.333262006 #> AT1G03220 -0.313618262 -0.308383387 -0.2462845913 -0.3580387071 -0.537079635 #> AT1G03860 2.421714161 -0.066325248 0.1014359716 0.1978134133 -0.485270224 #> AT1G04120 -3.630468152 -3.794900335 -2.2513650132 -0.7889184116 -0.778115944 #> AT1G04430 1.560910470 1.598369097 -1.0121456555 0.7187892369 0.428565082 #> AT1G04910 1.904968699 1.565199963 -1.2611818211 0.1963304538 0.461726589 #> AT1G05070 1.589096897 0.259500399 -0.9213903633 -0.1477529214 0.315814440 #> AT1G05500 -2.055550554 -1.010860763 -0.4972174629 -0.3827558599 -0.670882521 #> AT1G06530 3.053085096 -0.341114950 -0.0522545901 0.3329020470 0.103202465 #> AT1G06840 -0.500202917 -0.348585919 -0.3193957195 -0.5459456690 -0.450088823 #> AT1G06890 2.173668191 1.533680863 -0.7538317230 0.5043572172 0.041135699 #> AT1G06940 3.512570367 -1.116677696 -0.6551231123 0.3589191934 0.128775891 #> AT1G07510 2.745021562 0.420022724 -0.3224788151 0.0696033128 -0.404859556 #> AT1G07670 -2.218394952 0.075086073 -0.1644250052 -0.1045097206 0.095826895 #> AT1G07810 -2.040102879 -0.730555703 -0.5485869785 -0.0857529924 -0.436199165 #> AT1G08470 -2.201584108 -0.780282069 -0.7976458236 -0.0398830294 -0.522027377 #> AT1G08480 2.630510812 0.201866094 0.2127947188 0.1490507258 -0.135489018 #> AT1G08660 1.676225886 1.696618827 -0.8167454495 1.0567522822 0.607103751 #> AT1G09210 -3.675564827 -1.591375486 -0.9372003753 0.6718798418 -0.833207256 #> AT1G09330 -0.541332464 1.947396453 -0.3602530260 -0.6072151258 -0.059843421 #> AT1G09630 -0.864071458 -0.423062778 -0.7419661996 -0.5243746477 -0.190649902 #> AT1G09870 -3.581036245 -1.381170275 -1.4657215563 0.0262289787 -0.573884809 #> AT1G10130 2.878989177 1.011291009 -1.8447943460 -0.0613129830 -0.263920170 #> AT1G10290 -1.169988331 -0.320420949 -0.0848526722 -0.3933787178 0.117907391 #> AT1G10510 2.591271421 -0.044117868 -0.7679967070 0.4750715899 -0.009809013 #> AT1G10950 1.639577358 1.006411643 -1.4368189109 -0.4471998851 0.205168893 #> AT1G11320 4.680664560 -1.466863352 -0.9447548187 0.4350601929 0.323937220 #> AT1G11330 -0.203010440 -0.972907968 -0.3415612516 -0.5330785559 -0.213963590 #> AT1G11580 -1.820402548 -1.178173366 -1.5167753131 -0.0221541986 -0.292920737 #> AT1G11680 -3.077217826 -1.107015699 -0.7265420018 -0.0326267865 -0.253654965 #> AT1G12840 -3.293944043 -3.713439100 -1.8957152520 -0.0791611735 -0.323539540 #> AT1G13280 0.190482366 -0.297159301 -0.1464249829 -0.0614714173 -0.176323708 #> AT1G13900 -0.983837075 1.916452139 -0.1788916917 -0.4995034238 0.447627688 #> AT1G14010 -2.898532527 -1.158526111 -0.9334585639 -0.4670193318 -0.139552844 #> AT1G14320 -1.896493562 -1.621614479 -0.7025623313 -0.3090875764 0.088360343 #> AT1G14670 3.097754436 2.535414807 -1.9774144461 0.4521018662 1.134454222 #> AT1G14830 -0.840162096 -0.537522374 -0.1554331351 -0.5949426219 -0.026800023 #> AT1G14850 -0.177334316 0.332923904 -0.1190156726 -0.1846605267 -0.064597614 #> AT1G14870 0.130929950 -0.723004199 -0.0514447225 -0.6107554353 0.125923018 #> AT1G15210 -0.320968027 -0.527441419 0.2245467346 -0.5851154393 0.036986051 #> AT1G15500 3.889884506 -1.012700513 -0.6202125964 0.4775710563 0.282531741 #> AT1G15690 -3.418733039 -4.100140342 -2.0305015377 -0.3841391148 -0.410240428 #> AT1G16920 0.157178241 -0.286659483 -1.1741644683 -0.1784881647 -0.489103835 #> AT1G17290 -0.451408248 -1.488569995 -0.4739133518 0.6306826920 -0.134587877 #> AT1G17500 -1.004467001 -0.568956993 -0.3757369869 -0.3336340648 -0.204482573 #> AT1G18260 -2.937642738 -0.639818597 -0.6638617128 -0.1653558868 -0.383507262 #> AT1G18540 -2.871427990 -0.312558627 -0.3150961069 0.7046802273 -0.280923680 #> AT1G18700 -2.481485649 -0.727999395 -0.7375613330 -0.0784999772 -0.348557206 #> AT1G19360 3.162320598 1.896723217 -1.9895174132 0.3684003076 0.274269248 #> AT1G19370 -2.727361709 -1.190107768 -0.8361814603 -0.4673857352 -0.594147521 #> AT1G19430 0.708404955 1.762094079 -0.0208681213 0.6054237209 0.639573891 #> AT1G19710 1.382874597 0.178190396 -1.5729631061 0.0307360549 0.128865602 #> AT1G20330 -2.537959531 -0.506463650 -0.4598469608 0.0197327604 -0.383165974 #> AT1G21480 1.089366197 1.665476483 -0.5255217783 -0.4755943596 0.114996026 #> AT1G21750 -3.569333293 -2.017986181 -1.0695684278 0.6688106135 -0.456449500 #> AT1G22200 -2.773048261 -1.032075283 -0.9055604928 0.3345720432 -0.481516058 #> AT1G22280 -0.208575653 -0.280588958 0.1587840585 -0.4734486149 -0.255915314 #> AT1G22530 -0.089646121 -0.025015534 0.3325992472 -0.4676254066 -1.153040622 #> AT1G24510 -1.167118530 -1.585268220 -0.6024646470 -1.0532840515 -0.121543164 #> AT1G26850 0.619796282 2.201475157 -0.1490331473 0.6442730697 0.412519269 #> AT1G27190 -0.303695671 -0.641172147 -0.2068433240 -0.7724642295 -0.329610806 #> AT1G27390 2.732416868 0.111156545 -0.0334024752 -0.0867567712 0.008163107 #> AT1G27770 -2.384575694 -0.482919527 -0.3077582070 -0.1202191573 -0.455842679 #> AT1G27930 0.555707593 1.854113803 0.0303548961 0.7354022821 0.475313445 #> AT1G27950 -0.099443154 -0.732219892 -0.4918447942 -0.8758408620 -0.065648583 #> AT1G27980 -3.405069514 -1.396735251 -1.0702607602 0.0534324320 -0.306665367 #> AT1G28340 -0.970276403 1.844799861 0.2514203209 -0.8945965232 0.738278808 #> AT1G29020 -2.276444921 -3.082465971 -1.6976887395 -0.4273107107 -0.265857238 #> AT1G29470 0.641126284 1.960892191 -0.1295967666 0.6600896432 0.461083667 #> AT1G29790 1.813132869 1.336125715 -1.3187005310 0.0323250576 0.222040290 #> AT1G29980 -0.818182096 0.262933355 -0.1537593809 -0.4933512513 -0.251217224 #> AT1G30000 1.330073240 0.716567815 -1.4514788360 -0.0676541138 0.526385153 #> AT1G30360 -0.109440282 -1.215086695 -0.1656273415 -0.4008509158 -0.056011989 #> AT1G30400 -2.649532157 -3.362806548 -2.1256388465 -0.1341056076 -0.167229249 #> AT1G31130 -1.525107437 2.219914566 0.9708907853 -0.1763575897 0.316377890 #> AT1G31850 0.985352860 1.550902283 0.0479050257 0.3028892237 0.690301187 #> AT1G32090 0.462704626 -0.218824720 -0.6714969882 -0.7813746327 -0.064172478 #> AT1G32210 -1.776455700 -0.428947559 -0.2978503410 -0.1781018942 0.153092266 #> AT1G34130 -2.970115600 -0.781584175 -0.5831495769 0.2468932755 -0.635296320 #> AT1G35620 -2.822242231 -1.064050804 -0.5329637747 -0.3826852842 -0.339701197 #> AT1G42960 4.399374946 -2.174295573 0.4157874127 0.5492124852 0.010759672 #> AT1G43170 -1.372765372 -1.446863049 -0.4090795080 -0.3061163634 -0.002978293 #> AT1G43890 -1.072795777 -1.282762928 -0.5016716858 -0.7262797965 -0.575395717 #> AT1G43910 -2.171309856 0.091942945 -0.3165136883 0.3307599776 -0.338361139 #> AT1G44170 -2.556087757 -1.116734431 -0.9128156065 -0.3769079123 -0.434174346 #> AT1G47260 2.400469983 -0.387779382 0.3888808866 0.1894731319 -0.085068204 #> AT1G48920 1.780084205 0.265115459 0.0582180111 -0.8824300057 0.281127277 #> AT1G49710 2.049884419 1.571619533 -1.3447655837 0.3312191042 -0.365965487 #> AT1G50460 2.565030755 -0.295431754 -0.0208296478 -0.2544185164 0.016118796 #> AT1G51540 1.846652456 2.195425138 -0.9627236977 0.5468194194 0.290515301 #> AT1G51570 -2.177224055 -0.838783568 -0.7002957875 -0.4043321272 -0.338792927 #> AT1G51590 3.341014419 1.574157881 -2.0468145885 0.1946406989 0.342116603 #> AT1G51630 0.557671236 1.853196037 -0.0009943414 0.7428387144 -0.058600552 #> AT1G51760 -3.441717861 -1.929071268 -1.1509684192 0.1687074302 -0.084216991 #> AT1G51980 1.817333266 -0.373491345 0.1489412534 -0.3152620800 -0.154837378 #> AT1G52260 -3.533889703 -1.029664074 -0.3977573190 0.4630514117 -0.879980172 #> AT1G52600 -2.510970665 -0.435384410 -0.7668336548 -0.1342126497 -0.570960244 #> AT1G52780 -1.242722369 2.372955524 0.3851476729 0.1253520442 0.671094495 #> AT1G53000 3.058072655 -0.187218185 0.2950901199 0.5767021805 -0.281965353 #> AT1G53210 -3.349186136 -4.159832390 -2.2080480593 -0.2327281336 -0.236064036 #> AT1G53760 2.609271443 -0.061558992 -0.0698744032 0.3829010718 -0.019496714 #> AT1G53840 -1.604524634 1.736071056 0.5554811074 -0.5606661212 0.526166793 #> AT1G54000 -1.167365755 -2.215925067 -1.6194384463 -0.1680980570 -0.193621875 #> AT1G54990 -2.843982779 -0.604818969 -0.4167085357 0.0899534299 -0.282916018 #> AT1G55130 1.957525390 1.767673120 -1.5988432761 0.9735944211 -0.071344612 #> AT1G55160 3.342148817 -1.018553827 0.3365791871 0.1742687118 -0.487147750 #> AT1G55850 -2.862875808 -0.853384873 -0.8330345060 0.0259107207 -0.402123735 #> AT1G56070 0.013503508 -1.337522602 -0.8901508352 -0.1050857886 0.523734328 #> AT1G56140 -0.118935103 -0.903081230 -0.4794500288 -0.2061577764 -0.659004160 #> AT1G56340 -3.947838755 -1.998443740 -1.0134595875 0.5338110039 -0.599502225 #> AT1G59820 -0.050422123 0.921763366 -0.4034128277 -0.6716382893 0.311385526 #> AT1G59870 -0.002916187 -0.185540103 -0.3407414196 -0.5531454125 -0.004729137 #> AT1G61770 -2.533236270 -0.572479891 -0.2989016869 0.1177400279 -0.616743451 #> AT1G61790 -2.449507676 -0.515866070 -0.6462261726 0.4573943930 -0.867315996 #> AT1G63010 -2.726801073 -3.295300742 -1.8392131411 -0.7341663597 -0.612135629 #> AT1G63050 -1.790953440 -0.519168216 0.1675397056 -0.7344515054 0.096218308 #> AT1G64090 -3.348839836 -0.866008175 -0.5085578375 -0.4415540130 -0.238349511 #> AT1G64880 1.257810428 0.782616847 0.0894969122 0.7560944505 -0.257470523 #> AT1G64950 -2.042639647 -0.555782016 -0.3656029434 -0.1034051422 -0.324332699 #> AT1G65020 -2.129074237 -0.147389833 -0.3212590183 -0.0566584380 -0.515722893 #> AT1G65270 -2.730076891 -1.101719178 -1.1415522506 -0.4622097668 -0.191751810 #> AT1G65540 2.917565430 -0.675726945 0.1890622173 0.2662041588 -0.430837760 #> AT1G65820 -2.890479431 -0.859602885 -0.3479732691 0.0863275915 -0.463786013 #> AT1G66270 -1.935597537 -1.222082153 -0.2844098448 -0.6888350807 -0.594319968 #> AT1G66280 -3.139455088 -1.305666349 -0.0977118514 -0.5623479991 -0.039583943 #> AT1G67490 -1.936106770 -0.532219227 -0.4227913397 -0.1100357157 -0.652773344 #> AT1G67730 -1.937162892 -0.360891925 -0.3950341127 -0.3155537968 -0.340531674 #> AT1G69460 -3.016289824 -1.661093046 -1.3778192225 -0.5756812789 -0.826561625 #> AT1G69840 -0.651042427 -1.700053183 -0.8447189042 -0.6205360196 -0.247143617 #> AT1G70770 -2.303129231 -0.396270447 -0.5256039772 0.4352114247 -0.659907767 #> AT1G71220 -3.532307241 -1.649790431 -0.8831647349 0.1247527838 -0.455173500 #> AT1G71780 -3.172098769 -0.840074994 -0.8216044252 -0.1714623768 -0.261427541 #> AT1G72090 -3.094755697 -0.286449132 0.0421828417 0.3702790628 -0.347740797 #> AT1G72370 0.811253884 -1.708966447 -0.3546196151 -0.6887447690 -0.027781273 #> AT1G72480 -0.395145435 2.237370095 0.3786338856 1.3643327788 0.547020053 #> AT1G73990 1.747119605 -0.042242247 -0.0267713440 1.4839602463 -0.845795283 #> AT1G74380 1.959593419 1.038618934 -1.6477298789 0.3634086375 0.088490920 #> AT1G74790 -0.044549229 -0.831714913 -0.3426193068 -0.4143070798 -0.340258297 #> AT1G75140 -2.646622248 -0.821075647 -0.6955186460 0.1238370109 -0.286314043 #> AT1G76040 -1.015661505 -0.550876752 0.2668267084 -0.0970972202 -0.594415638 #> AT1G76270 2.376377283 1.210830736 -1.9966321810 0.1608861586 0.207279152 #> AT1G76400 -2.652661046 -0.385331503 -0.6528702470 -0.1262422680 -0.528844667 #> AT1G77120 -0.865558674 -1.724565213 -0.9445777296 -0.3503444409 -0.402048400 #> AT1G77510 -3.345691767 -2.353425962 -1.3774742244 -0.5998185948 -0.443472983 #> AT1G77590 2.785925579 -0.924715097 -0.5499487572 0.3543375737 0.534852606 #> AT1G78240 2.867656897 1.717058334 -1.6121315934 0.0527157454 -0.152385810 #> AT1G78850 -1.126281565 -0.901736117 -1.0026832527 -0.1922861377 -0.572308423 #> AT1G78900 -3.727552070 -4.228692884 -2.2790581747 -0.3018209089 -0.486011672 #> AT1G78920 -0.051394249 0.427008192 -0.7446134923 0.1125174342 0.033488178 #> AT1G79560 3.992998257 -1.640125382 -0.2919140450 0.6432985524 -0.067830712 #> AT1G79940 -2.264933842 -0.596104742 -0.5504665307 -0.3438640161 -0.423541245 #> AT1G80300 4.040508994 -0.988418139 -0.6464001282 0.1030862055 0.379811018 #> AT1G80950 -2.028155649 -1.236659015 -0.3705576957 -0.5881846083 -0.414008567 #> AT2G01250 -1.797553823 -0.402329069 0.3022125586 -0.4212559578 0.157079845 #> AT2G01270 1.031014791 1.399167074 -0.6831840199 0.9245578250 0.503942202 #> AT2G01470 -2.938563281 -0.949485697 -0.6717782641 -0.2370403115 -0.558905093 #> AT2G01630 0.028051706 -0.885319018 -0.2043644512 -0.9504370081 -0.496835921 #> AT2G01720 -2.519490434 -0.708146776 -0.5274720328 -0.0135713259 -0.742024761 #> AT2G01970 2.431722172 1.431992311 -1.0565241488 0.5241283178 0.040224501 #> AT2G02040 -3.415903569 -3.853169342 -1.9296240418 -0.2524021317 -0.544098594 #> AT2G03120 -2.710372517 -0.749891155 -0.5182412868 -0.3474867787 -0.493396482 #> AT2G03510 -3.046160203 -0.799299573 -0.6557183465 -0.2666277552 -0.315668298 #> AT2G04280 0.628120358 2.517985834 -0.1219012993 0.7774809831 0.624961000 #> AT2G04350 -2.480823466 -0.891534243 -0.6832934960 -0.3405245791 -0.606036803 #> AT2G04780 0.092954674 -1.077889689 -0.9450472463 -0.8506079882 -0.557061115 #> AT2G04940 2.496437790 -0.203785496 -0.4283900497 0.2744856229 -0.682409323 #> AT2G09990 -2.117844575 -2.153609884 -0.7178757695 -0.5956437763 0.101776231 #> AT2G14720 -1.498700968 1.890520999 0.5768697279 -0.5195123539 0.784780809 #> AT2G14740 -1.301380788 2.230542770 0.0154000947 -0.8188257064 0.630546319 #> AT2G16060 -0.482734506 -1.769759030 -0.7604791082 -0.3618286148 -0.630461104 #> AT2G16460 2.518025935 -0.345286347 0.1078082475 0.5062197539 -0.213492943 #> AT2G16530 -2.564459876 -0.775168874 -0.7122673177 0.9802863490 -0.463406401 #> AT2G16640 4.551437041 -1.056066432 -1.0194990757 0.0431358058 0.326273681 #> AT2G16660 -3.824100655 -3.989380342 -2.2973338496 -0.6132885002 -0.976374277 #> AT2G16760 -2.219470833 -0.431950263 -0.5451964947 -0.2997132177 -0.140575267 #> AT2G17440 0.222178070 -0.243598483 -0.5312176641 -0.8887006606 -0.615529962 #> AT2G17720 -1.206012903 0.163490019 -0.9712275447 -0.1623768837 -0.319831190 #> AT2G18193 -1.031350595 1.185568746 0.1633239370 0.6962016418 -0.697411495 #> AT2G18330 2.934875132 -0.143763164 -0.3951704391 0.9782636327 -0.180501947 #> AT2G18690 -0.836866810 -2.988281703 -0.8138407498 1.1549548245 -1.490572175 #> AT2G18960 -0.366736712 -0.933425621 0.0575176930 -0.7589436185 -0.337092502 #> AT2G19080 3.039399974 0.192255721 -0.1847199573 0.3590825443 0.762562671 #> AT2G19860 2.752872508 -0.412217144 -0.2773523751 0.1460899277 0.539716772 #> AT2G20360 1.536536150 0.234357285 -0.2196418742 0.2018459167 0.239757099 #> AT2G20370 1.461429479 1.914528440 -0.7558185981 0.7221127533 0.464888429 #> AT2G20450 -1.793569352 -0.770469869 -0.4065960902 -0.6890586156 -0.092834919 #> AT2G20800 2.599365451 0.377436754 0.0536123265 0.6428539877 0.395213135 #> AT2G20807 0.517264175 0.219817438 -1.0988644460 -0.2218312509 -0.164984750 #> AT2G20940 2.732746404 -0.354291740 0.4182247874 -0.1289611381 -0.388585145 #> AT2G20990 -2.037247656 -1.049009786 -0.5190165107 -0.2623938879 -0.522246747 #> AT2G21160 -2.260209345 -0.318760743 -0.6354261014 -0.1105258234 -0.758689407 #> AT2G21410 -3.173524229 -3.911091714 -2.1561470977 -0.4958876660 -0.787497981 #> AT2G21600 -2.982005543 -1.148005813 -1.4463534295 -0.3760197912 -0.509184698 #> AT2G21870 2.538766369 -0.076957702 0.0860654597 0.0356387955 0.003843476 #> AT2G22900 0.351089331 2.078517697 -0.2715268867 0.6925437332 0.431248467 #> AT2G23810 0.290111604 -0.170133056 -0.8307972082 -0.7853676762 0.082332959 #> AT2G24180 -2.311750239 -0.700007614 -0.8429677200 -0.0765588629 -0.703235443 #> AT2G24420 -3.131004112 -0.938950703 -0.6139077961 -0.2185262119 -0.388934064 #> AT2G25110 -2.549486712 -0.252343074 -0.4177474814 -0.4893766966 -0.137903423 #> AT2G26140 2.456660592 -0.300163252 0.4401777895 0.2013946824 0.411238606 #> AT2G26250 -1.735168935 -0.111434865 -0.5692017393 0.1500267657 -0.763030947 #> AT2G26300 -0.238481473 -0.752884845 0.4155621504 -0.6959863897 -0.039707261 #> AT2G27490 -0.708804148 -1.142828267 -0.4630282872 -0.5701588290 -0.409481515 #> AT2G27730 2.277149904 -0.746314234 0.3885575414 -0.3244319132 -0.572141700 #> AT2G28520 -0.561578289 1.698060468 -0.0106583732 -0.6164357102 0.556875748 #> AT2G29080 2.683151881 -0.082227120 0.0996991539 -0.0077261013 -0.229783857 #> AT2G29960 -2.926472101 -1.824770038 -1.3903906948 -0.3730838523 -0.608135438 #> AT2G29990 2.953287516 -0.181024579 0.1292332159 0.0465517563 -0.065654422 #> AT2G30490 -3.227232133 -1.531168141 -0.9867639722 -0.1698153489 -0.522063728 #> AT2G30860 0.340036035 -1.501014306 -0.3301644575 -0.3319859902 0.306476363 #> AT2G30930 -2.183513050 -2.407232033 -1.2583663182 0.1514079916 0.033449988 #> AT2G31190 3.550096030 -0.675670659 -0.6315818111 0.9930833828 -0.250636113 #> AT2G31390 -0.595409088 -2.039689795 -0.9173995433 -0.3257312633 -0.038534958 #> AT2G32240 -1.715941728 -1.597700483 -1.2507168771 0.3579706536 -0.079240427 #> AT2G32440 -3.768278915 -1.477785601 -0.8314153544 0.0418108626 -0.133897946 #> AT2G32920 -4.114377491 -2.601146991 -1.5603087210 0.0982890850 -0.590814608 #> AT2G33040 2.220232550 -0.013406746 -0.1850427569 0.3020577540 -0.059930645 #> AT2G33220 2.713264136 -0.023111963 0.6282865436 -0.2250387069 0.310364033 #> AT2G33630 -2.460596190 -0.563686261 -0.6086983790 0.6103400240 -0.655373106 #> AT2G34300 -0.291924357 1.815273546 0.3815606616 0.5172340085 0.637714963 #> AT2G34660 -2.869584564 -3.324844936 -1.8500478645 -0.4659011573 0.026363164 #> AT2G35610 0.534454763 1.979968609 0.0662757214 0.6132528244 0.060495545 #> AT2G35720 2.640858242 -0.592739159 0.1535122896 0.2543941134 -0.537001258 #> AT2G36160 -1.423096908 -1.242113662 -0.8699818433 -0.0771558194 -0.036673576 #> AT2G36290 -3.204928773 -1.358741763 -1.3275468254 0.4619545253 -0.683778548 #> AT2G36380 -0.150161575 -0.938803866 -0.2804053961 -0.4018131834 -0.358853694 #> AT2G36910 -0.439723430 -0.850136936 -0.0388654092 -1.0016215980 -0.276525172 #> AT2G37050 -0.184652637 -0.391751384 0.3335889664 -0.2392990542 0.117020031 #> AT2G37170 -1.272772526 -0.625021514 -0.2911421023 -0.0665052051 -0.600345592 #> AT2G37400 3.234862174 -1.820379384 -0.3792251195 0.7014205729 -0.527823188 #> AT2G37860 4.389578322 -1.301317128 -0.4529280890 0.3824955533 -0.108496688 #> AT2G38530 0.157280263 -0.474983988 -0.5737768245 -0.1653677588 -0.298024820 #> AT2G38550 3.564236098 -0.831766339 -0.2911025695 0.0449396357 0.488845549 #> AT2G38650 2.505467379 2.178670845 -1.3780779235 0.5646786691 0.579376325 #> AT2G38960 -2.841361018 -1.036491864 -1.1296642513 -0.1953923245 -0.356321304 #> AT2G39480 -0.440792678 -0.560784770 -0.4816299333 -0.7297297589 -0.203180841 #> AT2G39630 -1.492002910 -0.755014655 -0.4711016534 -0.3893415275 -0.112235074 #> AT2G39960 -2.414856814 -0.811027899 -0.8975365837 -0.2758048410 -0.706459234 #> AT2G40280 0.449138527 1.623261142 0.4133738466 0.4522521317 0.735228928 #> AT2G40890 -3.321730680 -1.083179712 -0.6326828948 -0.1903887731 -0.562644064 #> AT2G41560 -3.198187101 -3.726545247 -2.0396282841 -0.5724101942 -0.291268470 #> AT2G42210 3.048563290 -0.295577304 0.1975878574 0.0669571059 -0.109609583 #> AT2G43350 -0.890108562 0.017919798 -1.0265026374 -0.5227862990 -0.297825422 #> AT2G43610 -0.281288161 -0.292083387 -0.2096443715 0.3863256375 0.039656775 #> AT2G43950 3.788802508 -0.851672503 -0.7453187454 0.6070624227 0.352454012 #> AT2G44640 4.513159459 -1.094335545 -0.7345274559 0.4590387378 0.207242098 #> AT2G45060 2.387264555 -0.147392225 0.1803483020 0.3776676003 -0.345359343 #> AT2G45140 -2.399309842 -0.601818950 -0.3836265258 0.3422021641 -0.205345279 #> AT2G45470 -0.065795006 -1.245317744 -0.5840274213 -0.3181216192 -0.372112829 #> AT2G45510 -2.534591711 -0.599126434 -0.5257851008 0.0437466346 -0.403866128 #> AT2G45820 -0.396108912 -0.891017514 0.4291174083 -0.3531002079 -0.745700738 #> AT2G46170 -2.197029982 -1.444165544 -0.8360849622 0.0570792547 -0.769817310 #> AT2G47000 0.035341027 -0.874673654 -0.4095474961 -0.5424178064 -0.292017615 #> AT2G47470 -3.749502086 -1.825131166 -1.0342235210 0.0003809747 -0.661442065 #> AT2G47650 2.271394200 1.678560589 -1.3183235250 0.3825852359 -0.213188613 #> AT2G47800 -2.525163551 -3.394479461 -1.9556965326 -0.0979737004 -0.366142395 #> AT2G47840 4.169532217 -1.072794265 -0.3682741798 0.1923736269 0.724978975 #> AT3G01280 3.054117009 -0.642801462 -0.0298499943 0.5305551711 -0.242350225 #> AT3G01290 -0.361251897 -1.229948661 -0.8099869009 -0.5003710915 -0.290979064 #> AT3G01380 -2.634650351 -0.957544203 -0.6684656437 0.0872804807 -0.522951740 #> AT3G01930 -2.678613532 -2.077819622 -1.4376400947 -0.5621272140 -0.497294015 #> AT3G02090 2.801112466 -0.509881165 0.0127222889 0.3675540734 -0.827259884 #> AT3G02350 2.407019733 1.690037842 -1.7999657148 0.4007588122 0.324033167 #> AT3G02875 -3.625407244 -1.374899300 -1.0739648278 0.1010656757 -0.361854725 #> AT3G02880 0.281949165 -0.386234566 -0.2751667847 -0.1575531684 -0.013905508 #> AT3G03050 0.038001518 1.800238799 0.5603678301 -0.0011140981 0.267860852 #> AT3G03060 2.228198900 -0.395717861 0.0531467454 0.7869176846 -0.168506391 #> AT3G03330 -2.847464417 -0.817494521 -0.5952358605 -0.5177571115 -0.525793873 #> AT3G03520 -2.713221979 -3.010574162 -1.4841509559 -0.6653338538 -0.585947876 #> AT3G04920 0.665405230 -2.244180531 0.1318743973 -0.7622537206 0.250902574 #> AT3G05230 -2.679072340 -0.364747867 -0.4501701641 -0.2076801515 -0.461251670 #> AT3G05710 -0.568005854 2.303060228 0.4305965739 -1.0730161692 0.535409587 #> AT3G06300 0.120852178 -0.115810948 -1.1148144474 0.0893553237 -0.214381066 #> AT3G06510 4.404905539 -0.923147383 -0.9227042684 0.6299468925 0.463045457 #> AT3G06960 4.007910814 -0.915331466 -0.7304563315 0.5187649456 0.621975972 #> AT3G07110 -1.622447991 -2.144220297 -0.4436390663 0.2910305457 -0.050787147 #> AT3G07140 -2.338153636 -0.406662228 -0.2536986410 -0.0913139147 -0.520379370 #> AT3G07160 -0.105844966 -0.319693813 -0.2795738125 -0.3509846549 0.067696996 #> AT3G07180 -3.015809425 -0.692252759 -0.4418481232 -0.1192021798 -0.255910198 #> AT3G07330 2.216208750 1.609461374 -1.0210694513 -0.2676679700 0.550286262 #> AT3G07390 0.253343237 -1.096183045 -0.6781497514 -0.9225382932 -0.704469203 #> AT3G08510 -0.573049004 -1.376375123 -0.3337530382 -1.0341990854 -0.962133666 #> AT3G08580 2.177054285 -0.407636934 0.4949719528 -0.3447839585 -0.105607784 #> AT3G08630 4.277278175 -0.923571693 -0.9978588832 0.7110587271 0.245546604 #> AT3G08640 4.023356210 -1.306252239 -0.8252223962 -0.5193466994 0.331101982 #> AT3G08950 2.855408420 -0.189947307 0.0362889927 -0.1344211672 -0.250772695 #> AT3G09630 -1.450403437 -2.096601784 -0.6212354832 -0.4505907783 -0.236475806 #> AT3G09740 -0.227759915 -0.959245886 -0.3641324959 -0.6630573770 -0.378886965 #> AT3G10370 1.943610384 0.165324784 0.2976852339 0.2489547760 0.094202429 #> AT3G10730 -0.897947789 0.493319989 -0.4727952509 -0.1948990943 -0.404525854 #> AT3G11070 3.291001894 -0.463059018 0.0311495982 0.5892119755 -0.042784751 #> AT3G11730 -1.077404335 -0.078795622 -0.3110748634 -1.0158175996 -0.107553024 #> AT3G11820 -0.479232000 -0.203409421 -0.4429082868 -0.6549522892 0.142558277 #> AT3G13080 -3.184446828 -3.484424227 -1.8419532077 -0.1484748463 -0.150426611 #> AT3G13410 -2.499677214 -1.299288586 -0.8259640437 0.4206244564 -0.662143314 #> AT3G13560 0.149571448 -0.956561094 -0.0786555589 -0.7495139486 -0.293537646 #> AT3G13772 1.970440916 1.865058677 -1.6701296371 0.8697723787 0.187175557 #> AT3G13870 -3.015527739 -1.305651703 -0.9209726196 -0.1861761697 -0.648115093 #> AT3G14610 -2.641312256 -1.047074797 -1.0887395516 0.1519442580 -0.343311805 #> AT3G14840 0.041766828 -0.305507796 -0.1499911370 -0.4782942966 -0.088528455 #> AT3G15710 -2.173295890 -0.427345879 -0.3552476984 0.1169164655 -0.525385810 #> AT3G15950 -0.462748275 -1.813133992 -0.7927183788 0.0861116990 -0.453148159 #> AT3G16110 -3.679495034 -2.174917477 -1.6202244038 -0.1178474908 -0.318719628 #> AT3G16200 2.088508898 1.188987066 -1.0451806315 0.3925271962 -0.183078901 #> AT3G16460 -0.173473318 -1.782225473 -0.5704456299 -0.3086957133 -0.246036820 #> AT3G16480 3.022037259 -0.778894319 0.1420735241 0.6382342458 -0.690718116 #> AT3G17840 0.039781862 -0.652794935 -0.2640356360 -0.7046423665 -0.081665066 #> AT3G18370 -2.360847216 -1.298389820 -0.5036363677 -0.2058231619 -0.288230386 #> AT3G18480 2.871638152 0.941183620 -1.7730776782 0.4006619252 -0.123044019 #> AT3G18820 -1.363663823 -1.469675948 -0.6866626395 -0.2134008486 -0.455960342 #> AT3G19340 -3.106662967 -1.613856752 -1.0360775700 -0.2314348450 -0.991824372 #> AT3G19820 -3.053988427 -2.483986009 -1.3670186969 -0.4065813833 -0.348825790 #> AT3G20000 2.967769474 -0.214170551 -0.4386569622 0.0684534561 0.142441078 #> AT3G20390 3.500481676 -1.014570901 -0.4410000231 -0.2079586632 -0.022744535 #> AT3G21160 2.971057656 0.977962220 -1.5341888999 0.0676030361 0.452997452 #> AT3G21190 0.414282669 1.653968089 -0.1108171344 0.5984036231 0.405218579 #> AT3G21250 -2.449634092 -2.661913252 -2.1121178022 -0.5437381835 -1.272024614 #> AT3G22370 1.785015682 0.651467778 0.7491302482 0.3101898896 0.247218434 #> AT3G23175 -2.138382602 -1.236855762 -1.2332844589 -0.3932207086 -1.233398956 #> AT3G23190 -2.360052129 -0.626708960 -0.6973796021 -0.3099760434 -0.355216338 #> AT3G23300 2.010010922 1.521806384 -0.8117049300 0.7134929021 0.231504528 #> AT3G23400 0.556392438 -0.058141779 -0.4196923287 -0.7982375899 -0.633469881 #> AT3G23450 1.073439159 -0.143109249 0.0843766461 -0.1821505351 -0.360199228 #> AT3G23710 3.697990742 -1.288454107 -0.5630344316 0.6119703808 -1.158224953 #> AT3G23750 -0.170298910 -0.535082180 -0.3226630700 -0.6712525770 -0.459645042 #> AT3G24160 -2.831251627 -1.589480453 -1.3841152858 -0.3160069083 -0.406952381 #> AT3G24550 0.239930334 -0.817474615 -0.0588480400 -0.9068790724 -0.099310887 #> AT3G24660 -0.190958899 -0.522812544 -0.2661073720 -0.1991548796 -0.404469858 #> AT3G25140 2.918092123 1.661143705 -1.5579600420 0.2419201718 0.190650062 #> AT3G25290 0.006625691 -0.104816888 0.4815166753 -0.1675529495 0.214496952 #> AT3G25610 -0.308275282 -1.019317746 -1.2422018442 -0.6732665101 -0.903703715 #> AT3G25780 0.597741625 -0.243115144 -0.4930115568 -1.1774226357 0.179535659 #> AT3G26370 1.709198637 1.831344316 -0.6630858533 0.8970060210 0.461661970 #> AT3G26830 -3.006841579 -0.543443731 -0.5320580504 0.6086626404 -0.053802915 #> AT3G27220 1.452032514 1.679051688 -0.5448885493 0.7320720476 0.083626830 #> AT3G27230 2.630481484 1.875314428 -1.8768728236 0.8038739066 0.750391826 #> AT3G27325 -1.838532052 -0.368935427 -0.8051471715 -0.3091819059 -0.651372009 #> AT3G28450 -0.162900089 -0.908402652 -0.2441664544 -0.8001606962 -0.305449342 #> AT3G28480 2.162204395 1.146856258 -1.3244133521 0.2735770636 0.028745928 #> AT3G28510 -3.712163751 -1.060737171 -0.8833143452 0.1570243720 -0.589246312 #> AT3G28580 -2.900304127 -0.916355005 -0.5303551197 -0.0179910946 -0.258750847 #> AT3G28710 -3.861113664 -4.119538366 -2.1696864626 -0.2019041796 0.002529741 #> AT3G28720 -1.785730143 -1.001850904 -1.0310773681 -0.4268603059 -0.208619192 #> AT3G28860 -0.068803240 -1.232889903 -0.2682212711 -0.5990095531 -0.294295818 #> AT3G42050 -3.495126371 -4.054399671 -2.1571224196 -0.2098593948 -0.353917054 #> AT3G43190 -1.611435805 -2.457672817 -1.0604819960 0.2516823127 0.084387313 #> AT3G44330 -2.327134039 -0.362312308 -0.5181370508 0.1941802408 -0.586454072 #> AT3G45890 3.816432766 -1.032476646 -0.6090270166 0.3438841781 0.165499284 #> AT3G46290 -0.031804850 0.206523256 -0.0742131466 0.4125964507 1.446731920 #> AT3G46740 4.178095031 -1.296601178 -0.6258328225 0.2754184069 0.252591011 #> AT3G46830 -0.463810154 -0.620899980 -0.7622673946 -1.0131011973 -0.654929604 #> AT3G47200 -1.381007691 -0.915501593 -0.2280699461 -0.0218700132 -0.471765935 #> AT3G47930 2.761163198 -0.959723283 0.2350621724 0.2365753039 -0.480775510 #> AT3G47950 -0.280196575 -1.027734262 0.1230057290 -0.0228223606 -0.409805254 #> AT3G48820 1.727535369 1.562842282 -1.1622255878 0.2783374018 0.327289786 #> AT3G48890 -2.518389888 -0.395451357 -0.8368000397 -0.1475682333 -0.296854963 #> AT3G49360 -1.559314511 -1.600156247 -0.9039640656 -0.4979852838 -0.188287758 #> AT3G49560 3.584427085 -0.581696310 -1.0974471765 0.6922377686 -0.930957747 #> AT3G49720 2.030892227 2.018242401 -1.4532583373 0.4856906866 0.030442938 #> AT3G49870 -1.428446124 -1.402819008 -0.7063134208 -0.0575366896 0.404103996 #> AT3G49910 -1.735069441 -1.087370407 -0.5184764093 -0.3631808585 -0.288534496 #> AT3G50930 2.541458559 -0.815839422 0.1851206281 -0.3890746698 -0.338489884 #> AT3G51010 3.318489329 -0.479219872 0.1794047158 0.3653191347 0.156407457 #> AT3G51050 -1.697514947 -0.554313094 -1.5571923606 -0.5277910572 -0.449022272 #> AT3G51430 -2.762257973 -1.450647200 -1.0258636544 0.1766550294 -0.610126017 #> AT3G51440 -2.222287002 -0.688164643 -0.9736170434 -0.4824801840 -0.872279655 #> AT3G51460 -2.107373577 -0.836462408 -0.4274699036 0.2363933554 -0.325445029 #> AT3G51550 -0.529040913 -0.732404931 -0.4593930877 -0.1744658193 -0.461305305 #> AT3G51580 1.051912350 1.062029235 0.0804713617 0.1465684350 0.833581684 #> AT3G51740 0.168695414 -0.812687912 0.0722269908 -0.7747178450 -0.422389657 #> AT3G52190 -2.264737999 -0.506307772 -0.3943184716 -0.2526217062 -0.153224527 #> AT3G52300 2.844464702 -0.230990039 0.2847611095 0.1440792472 -0.014728499 #> AT3G52850 -2.451004751 0.317018982 -0.2754667491 -0.5962796589 -0.026314902 #> AT3G52930 -0.677657924 -1.812225262 -0.9514119988 0.0590846862 -0.018693899 #> AT3G53480 -0.068420055 -0.514708313 -0.1597821829 -0.1843524275 0.080439114 #> AT3G53520 2.130569223 1.811242006 -1.4140508687 0.4152448613 -0.051219640 #> AT3G54110 2.663937663 -0.394134405 0.0250551636 0.1081821640 -0.086118938 #> AT3G54840 -1.202031887 -1.676133833 -1.4037969260 -0.7547534258 -0.824857166 #> AT3G54960 -4.489127762 -2.148864509 -0.9423425671 1.0073605583 -0.619262045 #> AT3G55360 -2.542916293 -0.559114662 -0.4351146776 -0.0000196616 -0.566026136 #> AT3G55830 1.127684018 2.215811632 -1.1541485112 -0.1074329845 0.080513750 #> AT3G56430 2.344806770 -0.303742021 -0.0397124014 0.2678529915 -0.610080384 #> AT3G56750 1.618813810 2.321461787 -0.9974139361 1.0910713946 0.684240235 #> AT3G57010 -2.191988368 -0.793146773 -0.7936978068 0.0117876234 -0.294863177 #> AT3G57020 -1.431536585 -0.173812212 -0.5137578211 -0.5188725403 -0.795450694 #> AT3G57030 -2.251635907 -0.891681120 -0.6697976171 0.5181724577 -0.830439467 #> AT3G57220 -2.921240936 -0.754431109 -0.4153888532 0.6978532312 -0.807379772 #> AT3G57650 -2.958169625 -0.516086925 -0.5272350284 0.2120920995 -0.273625116 #> AT3G57880 -2.714398443 -0.884073419 -0.7272142465 0.0949862709 -0.455962455 #> AT3G58730 -2.644915415 -2.926014573 -1.4352860865 0.7501643716 0.495601216 #> AT3G58840 2.661996387 -0.167869934 0.0533928814 0.4319218642 0.144227628 #> AT3G59280 2.168963440 -0.072618621 -0.0889382143 -0.2035028395 -0.685075906 #> AT3G59500 -2.285269099 -0.965740428 -1.7660793926 -0.4851892208 -0.754410723 #> AT3G59820 2.228429796 -0.087565458 0.4357573924 0.3859757394 -0.022544693 #> AT3G60190 -0.902319106 -0.781325233 -0.3516297003 -0.3102473946 -0.055852077 #> AT3G60600 -2.558797573 -1.125282851 -1.2056018701 -0.3583331928 -0.626257146 #> AT3G60900 0.447933118 -1.203129050 -0.9042078701 -0.9577358230 -0.514922850 #> AT3G61050 -1.524684711 -0.771125318 -0.2073607715 -0.1529596339 -0.159254365 #> AT3G61130 1.265442895 1.428991724 -1.0268656786 0.3236559275 0.361006045 #> AT3G61440 1.203439722 -0.083976840 -0.3867632450 0.7012644837 0.551549360 #> AT3G62360 -2.623653298 -0.430384202 -0.6478113631 0.2055933218 -0.715632691 #> AT3G62700 -3.308969314 -3.624208421 -2.0154902099 -0.4533105725 -0.603353562 #> AT3G63170 3.886017482 -1.763085249 -0.8487262111 0.1844307446 -1.208074496 #> AT3G66654 1.978318602 1.400182571 -0.7688239111 -0.7222479489 0.666186154 #> AT3G66658 -3.141543575 -0.988939841 -0.6415616690 -0.0111834404 -0.451248426 #> AT4G00090 -1.785681813 -0.889045455 -0.5986537049 0.3062224807 -0.869451603 #> AT4G00175 -2.377153659 -0.670203412 -0.4432978979 0.0059534139 -0.062223193 #> AT4G00740 1.617043193 1.518205005 -1.1666827507 -0.0430112191 0.242528507 #> AT4G00750 0.418882598 1.812352101 -0.2398923701 1.2897629778 0.514776555 #> AT4G00860 3.546917409 -1.070403307 0.2222815237 0.6961916220 -0.901286475 #> AT4G01100 3.068374138 -0.151114783 0.0056987279 0.3352048357 0.358038640 #> AT4G01320 -2.850381577 -0.874808605 -0.4822379500 0.1358489068 -0.471400870 #> AT4G02510 3.678943909 -1.274802117 -0.6693563931 0.9924098156 0.054201578 #> AT4G02930 1.297779474 0.201581547 -0.1784118264 0.3176702357 0.582230318 #> AT4G03550 -0.082691457 -0.410440016 -0.3916301776 -0.6479279298 -0.407517412 #> AT4G04910 -0.314071020 -0.875742394 -0.4287004027 -0.0968506297 -0.643962495 #> AT4G05020 2.738276339 -0.150027713 -0.0837854192 0.3858911600 -0.044124149 #> AT4G08850 0.267969083 -0.441271142 -0.6070439516 -0.3114041819 -0.429915210 #> AT4G09320 1.394821113 -2.027930930 -0.7799402537 0.1010901537 0.072429734 #> AT4G09580 -2.064677521 -0.306539464 -0.2019995576 0.2114060053 -0.010813026 #> AT4G11010 1.392042388 -2.177625772 0.0243104640 -1.4113966399 0.023195287 #> AT4G11150 -3.668533348 -4.237327632 -2.2179810064 -0.2072763898 -0.593462711 #> AT4G11800 -2.657828367 -0.974222158 -1.0599189777 -0.1946099165 -0.719133069 #> AT4G11850 -0.738167803 -0.897275156 -0.2013220182 -0.3730857926 -0.342339704 #> AT4G12420 -0.119066527 -0.935559070 -0.4497175694 -0.4490726781 -0.629025574 #> AT4G12590 -2.898557615 0.298830344 -0.0218457168 0.3155628903 -0.684407089 #> AT4G12650 -1.041542294 1.648737839 0.2853419978 0.3467838990 -0.197334506 #> AT4G12730 -0.255445694 -0.876499985 -0.4147271602 -0.9205527794 -0.444966830 #> AT4G13940 -1.142941277 -1.492058661 -0.4760886049 -0.1756835244 -0.144055281 #> AT4G14360 2.223039126 2.085961208 -1.3711254662 0.9069134378 0.969913739 #> AT4G14420 -3.377518580 -1.261227512 -1.1829006269 -0.2450685745 -0.637342884 #> AT4G14950 -2.334639079 -0.383342298 -0.5507385142 -0.1970747942 -0.152690434 #> AT4G15000 -1.900440976 -1.492312257 -0.3343989322 -0.2000980248 -0.043648727 #> AT4G15240 0.926814462 1.338905325 -0.8055931517 -0.4106403649 -0.005130188 #> AT4G15760 -2.675039819 -1.134669291 -0.5968144745 -0.4450533431 -0.167129760 #> AT4G16120 -0.037959839 1.477240085 -0.0503997254 0.2585274882 0.188446156 #> AT4G16170 -2.238696148 -1.183189266 -1.0133887866 -0.2751294209 -0.564776159 #> AT4G16500 -0.643094575 -1.129834184 -0.7788217432 -0.6038308541 -0.636274098 #> AT4G16650 1.514282798 0.867203396 -1.3011624566 -0.1326975016 0.208405991 #> AT4G17120 -0.661341739 -2.260350177 -1.2441524759 -0.4892111767 0.336494600 #> AT4G17140 -0.505039423 -2.286466705 -2.0996667975 0.3261148309 0.301624865 #> AT4G17170 -0.354466630 -0.719740280 -0.7096678746 -0.4345340993 -0.162368350 #> AT4G17430 0.938455265 1.796971516 -0.7781571369 0.6870514230 0.321214774 #> AT4G18030 1.226017032 1.754175687 -0.5547466742 0.6411770270 0.217096520 #> AT4G18100 -1.993859828 -1.392246221 0.1384518069 -0.3093188686 -0.077373821 #> AT4G18430 -0.982755098 -0.090694116 -0.6054392486 -0.8184013086 -0.093569707 #> AT4G19640 -0.797603292 -1.330195049 -1.2042300155 -0.3028815532 -0.494949796 #> AT4G20110 -0.466929695 1.024465996 -0.1370113204 -0.5133929348 0.711238849 #> AT4G20830 0.092925688 -0.846007185 -0.3959761180 -0.4487275825 -0.421617863 #> AT4G21150 -2.807011303 -0.456340018 -0.4668505712 0.0208718778 -0.459117187 #> AT4G21180 -1.927251908 -0.780179486 -0.5783900958 -0.1748498858 -0.613030827 #> AT4G21700 -0.280856953 0.854992936 -0.1535402916 0.1355050449 0.340770935 #> AT4G21960 -0.826227306 -0.043553371 -1.2841963477 -0.6677014901 -0.057474679 #> AT4G23630 -3.415012870 -0.476876621 -0.1887632418 0.0385144934 -0.189259627 #> AT4G23650 -1.017948001 -0.708157571 0.1796018965 -0.1857258741 -0.698657050 #> AT4G23850 -0.677601136 -2.325035956 -0.5056343851 -0.8330490043 -0.502243038 #> AT4G23940 3.054408671 -1.188334089 -0.6033659867 0.8132567391 -0.039125690 #> AT4G24190 -4.258781968 -2.256006416 -1.0736547340 0.1639671598 -0.659236701 #> AT4G24330 -2.378659770 -0.685046235 -0.5257828766 0.1975486045 -0.648999792 #> AT4G25240 -0.168770346 -0.832422828 -0.1357831188 -0.5446979595 -0.253371493 #> AT4G25720 -0.638126681 0.606044307 -1.0744823570 0.3627405686 -0.351088753 #> AT4G25900 0.410198202 -0.914710970 -0.2868265228 -0.1023303702 -0.302147360 #> AT4G26410 3.016600507 -0.390309722 0.1708807861 0.0776666274 -0.215350565 #> AT4G26690 -0.070141634 -1.066718289 -0.5535011830 -0.5991764473 -0.408658149 #> AT4G27090 -2.279198447 -0.855345271 -0.1125251886 -0.5231284181 0.307133146 #> AT4G27500 -1.494133084 -0.204666728 -0.5248645782 0.4481698062 -0.628534147 #> AT4G27520 -0.026874086 -1.223473178 -0.1087069432 -0.5433240984 -0.434991977 #> AT4G27585 2.479446181 -0.201817349 0.1768302667 0.1885018400 -0.205294149 #> AT4G28220 1.968780766 -0.188250649 0.2297336432 -0.4384877756 0.045121038 #> AT4G28390 2.871402534 -0.623595366 0.1428760131 0.2806241223 -0.509925045 #> AT4G28510 2.526000267 -0.405433819 0.4426065887 0.2138984189 -0.210665406 #> AT4G28570 -2.477948907 -0.205661626 -0.2232270311 -0.5274436463 -0.752332184 #> AT4G29130 2.834215538 -0.271980922 -0.1362237947 0.0378140036 -0.001719823 #> AT4G29480 3.556637503 -0.307832454 -0.0255722788 0.6145280254 0.282006120 #> AT4G29520 -2.599884671 -0.276039962 -0.1605922466 -0.4233395907 0.081979776 #> AT4G29900 -0.054819070 -0.851875215 -0.6296008818 -0.5529271322 -0.771059597 #> AT4G30010 3.245206698 -0.277511735 0.1872107594 0.1962426242 0.039026453 #> AT4G30090 -1.640153126 -0.522680667 -0.0343116610 -0.2079248282 -0.266128367 #> AT4G30190 0.099237815 -0.511884637 -0.2185931453 -0.4059439014 -0.395004432 #> AT4G30210 -2.259274926 -0.576189103 -0.8985044180 -0.0681514214 -0.521524579 #> AT4G30260 -0.582987021 2.178089599 0.5775238095 -0.6347758022 0.510280806 #> AT4G30600 -3.013430368 -0.971683663 -0.7481123406 -0.0670060471 -0.428613952 #> AT4G30990 1.624978906 0.985755333 -1.0977781111 0.5247182220 -0.168353318 #> AT4G31140 -0.863396273 -1.007608918 -0.0934145415 -1.0439067817 -0.113512171 #> AT4G31340 -2.241314525 -0.475487827 -0.7613987174 0.2582691548 -0.384552125 #> AT4G31430 0.189373280 0.407773377 -0.1916808459 -1.5248462476 -0.112994014 #> AT4G31500 -3.270540252 -1.434108691 -1.0225012332 -0.1217344701 -0.325123403 #> AT4G31700 0.057702552 -2.376115708 0.4834035301 0.2774719655 -0.218237702 #> AT4G32130 -2.793237309 -0.632480511 -0.4179525475 0.1208838902 -0.164668529 #> AT4G32250 3.981578922 -1.118024094 -0.7846400079 0.2023405285 0.249615508 #> AT4G32400 4.546244153 -1.495794048 -0.3255392231 -0.1775303589 0.379373032 #> AT4G32410 0.179069617 1.141268238 0.0257589748 1.0430829094 0.650745565 #> AT4G32470 2.498528743 -0.415334877 0.1070443333 0.2486424574 -0.397895817 #> AT4G33350 3.965937702 -1.796970322 -0.2687072065 -0.5777316963 -0.145705861 #> AT4G33360 -2.008839831 -1.073315025 -0.9408221405 0.2783324251 -0.405220454 #> AT4G34200 1.266581612 -0.950296663 -0.0730786033 -0.6368904397 -0.729991959 #> AT4G34640 -2.306318580 -0.020049091 -0.2317814020 0.2581931219 -0.487129481 #> AT4G34960 1.140003408 2.247385210 -0.6951846764 0.2728867601 0.202779758 #> AT4G35000 2.959017408 -1.780718907 -0.0147757176 1.0075510154 -0.983081448 #> AT4G35100 -0.166462715 -1.022710180 0.2078509535 -0.6414861198 -0.512722381 #> AT4G35230 -0.707394620 -1.003539341 -0.1862952341 -0.5543525769 -0.521682259 #> AT4G35790 -0.492902308 -0.925872106 -0.7470978437 -0.7747786504 -0.764663269 #> AT4G36220 -2.548541397 -0.851760369 -1.0242911676 0.5727119159 -0.150786647 #> AT4G36250 -1.716024376 -0.268800449 -0.4681798205 -0.1478027805 -0.614570611 #> AT4G36480 -2.877967921 -0.996794927 -0.4696108245 0.2337458325 -0.445459705 #> AT4G36750 -1.034982985 -0.973752451 -0.2115590913 -0.6949619752 -0.181289029 #> AT4G37330 -2.358374968 -1.119722040 -1.0653785263 0.1227804987 -0.581806484 #> AT4G37370 -2.663875285 -0.392768576 -0.3781302140 0.0271535395 -0.460222802 #> AT4G37410 -1.831478115 -0.419039531 -0.7907318457 -0.0850383767 -0.884984371 #> AT4G37430 -1.748710055 -0.171297063 -0.6418268566 -0.0330731219 -0.445691855 #> AT4G37640 -2.455425002 -0.901494008 -0.4088993290 0.0360419788 -0.139526333 #> AT4G37690 0.377290603 2.268855780 0.0493943352 0.7315718019 0.454814133 #> AT4G37820 2.971728920 2.141344804 -1.9771715979 0.4595285261 0.032681209 #> AT4G38215 -3.830025912 -1.899844996 -0.5117855986 0.0048531712 -0.528796548 #> AT4G38240 1.951470874 0.850259922 -1.6863486345 0.7601854368 0.452381507 #> AT4G38270 1.055079337 0.725655308 -0.9423997918 -0.4067768147 0.434924816 #> AT4G38350 -3.059760925 -3.436550317 -1.6810671634 -0.6632755873 -0.348031687 #> AT4G38500 1.708334590 1.658220816 -1.0800315123 0.5545782534 0.064330552 #> AT4G39030 3.877852703 -0.588280605 -0.6931176157 0.5659976843 0.410516219 #> AT4G39080 -3.295861918 -3.805165894 -2.1095092758 -0.7353636018 -0.376663988 #> AT4G39400 -0.513015572 -0.790996209 -0.6380991946 -0.5282460515 -0.199361932 #> AT4G39460 3.961775805 -0.810319433 -0.7948668357 0.7038965132 0.309510198 #> AT4G39690 2.908032444 -0.859104963 0.0380910456 0.2561581803 -0.616590097 #> AT4G39840 2.819238941 1.825786798 -1.6412410501 1.0834459668 0.288704518 #> AT4G39990 0.292256813 -0.397937171 -0.6363923372 -0.5588249497 -0.331720996 #> AT5G01500 3.714638370 -1.162554358 -0.4872895268 0.0932922698 0.282612698 #> AT5G01590 4.574120094 -1.472686215 -0.7098217262 0.0420278351 0.123194351 #> AT5G02450 -1.178069053 -1.858970503 -0.6522756546 -0.2481705034 -0.278554255 #> AT5G02870 -0.435920174 -1.508611234 -0.7938271642 -0.8927614780 -0.430122600 #> AT5G03160 -2.799383971 -0.730009097 -0.6868993186 0.5904596459 -0.169580826 #> AT5G03895 3.816533839 -1.182819743 -0.4855517927 0.3788787242 0.566162531 #> AT5G04060 0.057329224 1.595323918 0.2867929543 0.0728987447 0.569458133 #> AT5G04480 0.904050256 0.007255774 -0.8701802297 -0.5010060495 -0.150664007 #> AT5G04885 -0.038026460 -1.088161323 0.0175094733 -0.9181021515 -0.585248641 #> AT5G04930 -0.493084584 -0.202956811 -0.3623790173 -0.4556731450 0.193133523 #> AT5G04990 -1.315981548 0.296412210 -0.5794764144 -0.6016131948 0.042391044 #> AT5G05000 4.093651555 -1.729017362 -0.5114751664 0.3377327288 0.065452078 #> AT5G05170 0.811121007 1.580734551 -0.2147972513 0.8396273400 0.645517450 #> AT5G05520 3.379175131 -0.441495004 -0.2156377512 0.3450859465 0.291683347 #> AT5G05670 -2.146650123 -0.532926750 -0.2238248755 0.8177193320 -0.275112937 #> AT5G06320 0.064980426 -0.165471844 -0.6137844726 -0.3024778813 -0.237143401 #> AT5G07340 -2.823368489 -0.637187931 -0.5560874364 -0.3556010173 -0.611422817 #> AT5G07910 -0.558956505 -0.754674271 -0.1556808941 -0.7163175082 -0.094634798 #> AT5G08040 2.885194955 -0.233976437 -0.1472179078 0.2218800832 0.145546034 #> AT5G08080 -0.699355279 -0.204593975 0.2948213312 -1.3657080141 -0.199594285 #> AT5G08545 4.403145287 -1.173343397 -0.7322016893 0.0413477443 0.482377756 #> AT5G09400 -3.637517093 -3.804991795 -1.8726361933 -0.3468408539 -0.072343190 #> AT5G09420 2.830657513 -0.791454529 0.3384232924 0.3965737382 -0.144513689 #> AT5G09810 -0.800394828 -1.848131601 -1.0987987390 -0.3656059302 -0.657372603 #> AT5G10360 0.057702552 -2.376115708 0.4834035301 0.2774719655 -0.218237702 #> AT5G10840 1.064691502 1.549128693 0.7980510907 0.4395174108 0.725625689 #> AT5G11560 -2.695692306 -0.952617267 -0.8914635796 0.1166231469 -0.537165532 #> AT5G11730 0.386709033 2.181776581 0.4412107248 0.1280256099 0.407690822 #> AT5G12290 2.925440552 -0.188703170 -0.0623747898 0.7627809199 0.115093616 #> AT5G12470 4.000367766 -1.407308251 -0.2687300650 -0.1033518560 0.094472731 #> AT5G12860 4.278721511 -1.353229604 -0.6111204078 -0.0266130604 -0.130461399 #> AT5G13450 2.262499367 0.203659072 -0.3318570598 0.0539235114 -0.050264177 #> AT5G13490 2.847029856 -0.527796505 0.3698438131 0.0408291637 -0.483029964 #> AT5G13610 2.854266160 -0.239673014 -0.2172810742 0.4453631352 -0.885340651 #> AT5G13640 -2.507900855 -0.744467058 -0.7164950556 0.1561176918 -0.409049094 #> AT5G14040 2.973144126 -0.497362877 0.1883939550 0.2394533439 -0.165738583 #> AT5G14220 2.503252558 -1.193581099 -0.4800114197 1.3340111067 -0.284832796 #> AT5G14430 2.236607720 1.511046883 -1.5043258852 0.0414426472 0.194233565 #> AT5G14950 1.655463298 1.120683393 -1.5814748216 0.0264901157 -0.045803637 #> AT5G15090 3.074271627 -0.574545592 -0.0256239884 0.3685792296 -0.017828866 #> AT5G15910 1.298197519 -1.300196216 0.4649883393 -0.5398929821 -0.158298473 #> AT5G16910 0.627209249 1.580852008 -0.0867591117 0.3372242953 -0.092434224 #> AT5G16930 2.926734510 -0.235754093 -0.0258086739 0.3899513968 -0.321047503 #> AT5G17760 -0.705129851 -1.045447081 -0.2404915460 -0.0367002274 0.002393442 #> AT5G17770 -1.814814898 -0.801400885 -0.5277252736 -0.2869285919 -0.163126840 #> AT5G17920 -1.138068387 -1.738947826 -0.8510552481 -0.4707598827 -0.126031262 #> AT5G17980 -2.908915942 -1.122736545 -0.7213198441 -0.1060488077 -0.283296870 #> AT5G18280 0.766928423 1.115347068 -0.8395593576 0.2248516069 0.083019364 #> AT5G18485 2.410101829 2.066731518 -1.2478922171 0.0698802842 0.579252970 #> AT5G18800 3.578521777 -0.083855258 -0.1881780000 0.2211549304 0.793319941 #> AT5G18900 -1.036083998 -0.166265380 -0.9783130893 -0.6023413975 -0.208459867 #> AT5G19130 -2.601482161 -1.115131802 -0.7058172898 -0.4489278345 -0.329433233 #> AT5G19320 -2.510122776 0.099628983 -0.2599773510 0.1517115378 -0.902611591 #> AT5G19550 -0.720900612 -1.558874563 -0.8928933975 -0.2317062028 -0.330210664 #> AT5G19620 4.544312708 -1.452357524 -0.5645496657 0.2462715192 0.440269002 #> AT5G19690 -2.233467049 -0.594332215 -0.7340778080 -0.2843714867 -0.652592600 #> AT5G19760 2.775362126 -0.141912782 0.1538719305 0.1441485404 -0.103286897 #> AT5G20090 1.974243928 -0.316658383 0.1008299606 0.0118536194 -0.349894872 #> AT5G20290 1.145363371 -2.645145413 0.0218752225 -0.5243919177 -0.265720009 #> AT5G20350 0.079109969 1.749285904 0.0182159970 0.5986676587 -0.241194202 #> AT5G20520 -2.063599983 -0.974561942 -0.3177452309 -0.3036193974 -0.335499405 #> AT5G20655 -2.154902031 -0.610687374 -0.7094572917 -0.3599419016 -0.503598384 #> AT5G22640 3.653034547 -2.210415906 -0.1362766540 0.2046177586 -0.111556622 #> AT5G22790 4.334783114 -1.023288202 -0.5169597744 0.2773367295 0.344444539 #> AT5G23300 2.443373161 -0.241363460 -0.0326608700 0.4265106730 -0.519976366 #> AT5G23575 -2.625197520 -0.810258386 -0.5549801386 0.0822315267 -0.380363245 #> AT5G23630 -2.293686367 -0.577453623 -0.2626979441 -0.2004859092 -0.426191579 #> AT5G23850 0.281146866 2.112016464 0.1599374498 0.2534565641 0.404842745 #> AT5G23890 3.699959167 -1.595420786 -0.2320592941 0.3153435734 0.120688911 #> AT5G24290 -0.842054098 -1.821254294 -0.8514385331 -0.9041010353 -0.493310565 #> AT5G24690 3.903865188 -0.854706856 -0.7852568077 0.1152802885 0.829156030 #> AT5G24810 -2.037642082 -0.552835913 0.0157271730 0.0479909322 -0.230163890 #> AT5G25100 1.022539089 2.534664543 0.0293536594 0.7215465602 0.270727850 #> AT5G25900 -2.807472994 -1.122830416 -0.5935937636 -0.0943361439 -0.583827417 #> AT5G26030 2.792892758 -0.535007532 -0.4862373088 -0.4569935973 0.260486757 #> AT5G26260 -0.434094561 -1.468318598 -0.7668307411 -0.0617834615 -0.335581211 #> AT5G26280 0.080219838 -1.563447072 -1.5073407701 0.1792943448 -0.174705839 #> AT5G27330 -2.270150035 -0.118094343 -0.2953361783 0.5472545703 -0.616815162 #> AT5G27540 2.758260469 -0.254321534 0.0255871295 0.1426676872 0.089597934 #> AT5G27850 -0.255733881 -2.313289746 0.0376856209 -0.7701822880 0.551396218 #> AT5G28060 0.658206872 -0.624267523 0.2703813121 -0.3001251837 0.615619469 #> AT5G33320 2.596556305 -1.162327456 -0.9083777789 1.7040960554 0.111219932 #> AT5G35160 0.777430121 1.914365347 -0.3074388989 0.4954762741 0.333058276 #> AT5G37310 2.214671562 1.420005847 -1.2886733189 0.5272528282 0.549807584 #> AT5G39040 -2.700898488 -3.117027775 -1.9479345761 -0.6174053152 -0.318387829 #> AT5G39410 -0.547063015 -1.210015543 -0.8261808540 -0.1378816982 -0.268153498 #> AT5G39510 -4.218832914 -4.313476074 -2.5392708637 -0.4782678245 -0.660209988 #> AT5G40480 -1.210772144 0.405381130 -0.2089802165 -0.5781709381 -0.138606413 #> AT5G42020 -3.161120001 -1.002731985 -0.9482200079 0.4398545259 -0.784051359 #> AT5G42080 -0.719723236 -0.770469409 -0.3933273222 -0.3869214736 -0.087283363 #> AT5G42570 -3.229809653 -0.972333101 -0.5318855865 -0.3494754047 -0.599906898 #> AT5G42960 4.534538115 -0.822829580 -1.1811413495 0.2611948446 0.712273196 #> AT5G42980 -1.461598508 -1.616756890 -1.2518951440 -0.1800344202 -0.072198240 #> AT5G43100 -0.729563679 1.449183546 0.3741096621 -0.8956748367 0.542542476 #> AT5G43460 -1.811439560 -0.397208321 -0.6350423122 -0.2987758603 0.363995690 #> AT5G43970 3.254319817 -0.463864010 -0.0066529678 0.2323235415 0.095593738 #> AT5G44240 0.910130450 0.208842657 -1.4127107848 0.5301425159 0.298864260 #> AT5G44790 -0.289190159 1.596423606 0.2589178286 -0.4568742636 0.334464607 #> AT5G44920 -2.815442462 -1.353173107 -0.9434927506 -0.0220473742 -0.730864730 #> AT5G45130 -0.681018351 -0.396782983 -1.0209639795 -1.0469929157 -0.518623200 #> AT5G45160 -3.216707087 -1.335267564 -0.8099444026 0.0457957508 -0.167240382 #> AT5G45420 -2.373327080 -0.777261177 -0.3405428216 1.2042593181 -0.306550186 #> AT5G45470 -1.004309666 -0.973514971 -0.5358811371 -1.0345984088 -0.761670402 #> AT5G45480 -0.488831146 -0.625881137 -0.0872107155 -0.2336270240 -0.151805292 #> AT5G45750 -1.462758335 -0.312114224 -0.4916299214 -1.3103976953 -0.052961420 #> AT5G46800 3.213596673 -0.560415882 0.1787791699 0.5140773129 -0.382411434 #> AT5G47420 -2.623722802 -1.219147515 -0.9516461205 0.3060981425 -0.725069750 #> AT5G47910 -0.687421015 -0.573292711 -0.4839732829 -0.4787061228 -0.272495782 #> AT5G47990 -1.170967794 -0.354407604 -0.8995507408 -0.1827572204 -0.642816002 #> AT5G48000 -1.361406221 -0.428793977 -0.3187635536 -0.2012430483 -0.574311338 #> AT5G48030 -0.214906702 0.311203849 0.2471342746 -0.4051906935 -0.768167699 #> AT5G48810 -2.172976821 -0.350474159 -0.5537206471 0.1766981284 -0.527148250 #> AT5G49760 -0.336610567 -0.612779274 -0.2581347513 -0.2350340591 -0.321369284 #> AT5G49945 -2.700346328 -1.161449636 -0.9273865885 0.4150045368 -0.458213592 #> AT5G50000 -0.244851945 -0.332431765 0.3376298726 -0.8263318109 -0.320513296 #> AT5G50370 2.774887063 -0.469743224 -0.0358509298 0.7505355966 -0.748509987 #> AT5G51570 -3.023796457 -3.548653520 -1.5904115796 -0.2982639260 -0.346618927 #> AT5G52240 -2.921089463 -0.838619011 -0.4766646010 0.2635983194 -0.739936904 #> AT5G52420 -3.498518786 -1.038492277 -0.5047857779 -0.4971940084 -0.555941262 #> AT5G53170 3.029658490 -0.641696762 -1.3036265906 0.9833017478 0.474851756 #> AT5G53560 -3.233599183 -1.023815352 -0.8606045847 -0.0890333433 -0.530747341 #> AT5G54100 2.905893917 -0.020899760 -0.0981977357 0.4859212531 0.199098239 #> AT5G55070 2.571495462 -0.080216066 -0.1150056682 -0.0880633015 0.019243501 #> AT5G55480 -0.107088681 -0.911126422 0.0062976688 -0.8694843361 -0.334184274 #> AT5G55610 3.353707272 -0.652033923 -0.1352023491 0.7055919998 0.214497978 #> AT5G55730 0.337546004 -1.313053375 -0.4201254169 -0.4308239011 -0.543240515 #> AT5G55940 -2.722918039 -0.410113078 -0.6182977394 0.1841412985 -0.867226532 #> AT5G56730 3.159361416 -0.824361047 -0.6153093354 0.0891985635 0.111645091 #> AT5G57110 -0.149651407 -1.211964521 -0.1909366171 -0.7157906399 -0.404245506 #> AT5G57490 2.101569008 -0.645815974 -0.3954507479 -0.3759123276 0.276652033 #> AT5G57655 -3.547253756 -2.231202303 -1.1208464141 0.2324142869 -0.221395912 #> AT5G57800 -0.314664417 0.327453656 -0.4834761781 0.2442770457 -0.554586027 #> AT5G58070 -1.657451642 0.118461223 -0.0462209346 -0.0908523870 -0.313756701 #> AT5G58090 -0.589692545 -0.905440802 -0.2192164675 -0.5866203730 -0.135751808 #> AT5G58100 -1.190919810 -0.342926803 -0.9788701952 -0.0389322283 0.025431972 #> AT5G58270 3.243397885 -0.554928639 -0.2370362828 0.1614786950 -0.075915998 #> AT5G58640 -2.724531562 -0.967979373 -0.7964241225 0.0997053355 -0.825953933 #> AT5G60640 -4.217001447 -2.426661414 -1.2950788220 0.1842999650 -0.659906132 #> AT5G61240 2.176551658 1.939007259 -1.2565815945 -0.1352342169 -0.070857119 #> AT5G61790 -2.859885100 -0.906224853 -0.5785156443 0.0355166833 -0.450125826 #> AT5G61840 2.636485776 1.565164053 -1.6944773881 0.0399183528 -0.320076719 #> AT5G62390 -1.741651863 -0.267811044 -0.2930855098 -0.2292225091 -0.027203552 #> AT5G62670 0.417065272 -0.404904331 -0.0399903499 -1.4499934579 0.218480533 #> AT5G62740 -1.604920456 -1.913064304 -1.0890706633 -1.1650070227 -0.454962495 #> AT5G63030 -0.509719425 -1.367774200 0.2109431357 0.2200602030 -0.546095993 #> AT5G63400 3.283299292 -1.044099736 0.2624687775 0.3249158287 -0.810509416 #> AT5G63840 -2.463750872 -1.285040262 -1.2990470990 0.0357448288 -0.274190800 #> AT5G64030 -0.444090863 2.097434478 0.3053544081 0.5508174766 0.742304257 #> AT5G64100 0.938954990 -0.672058795 -0.1124684396 -0.3424980130 -0.355172891 #> AT5G64290 3.667962960 -0.982918499 -0.7408347016 1.2328915685 0.490994338 #> AT5G64440 -2.603286565 -1.981715736 -1.2331233739 -0.3907269196 -0.562754054 #> AT5G64970 3.928408695 -0.680738801 -1.3040430163 0.0967480077 0.333025473 #> AT5G65250 3.973978272 -2.186618142 0.6412292811 0.1305956891 0.592073428 #> AT5G65270 -0.741507570 -0.722134586 0.0287354222 -0.4521297526 -0.248452736 #> AT5G66680 -2.684691335 -0.479777825 -0.5077424400 0.3479196728 -0.675121732 #> AT5G67500 2.872519960 -0.724949467 0.0030269830 0.2378448111 -0.118246687 #> COB 2.673853169 0.470245412 0.7224879955 0.0395714473 0.460352969 #> COX2 2.246443163 -0.193077758 -0.2727983030 -1.1531692248 0.301714226 #> NAD5 2.390194151 -0.303860926 0.1432386301 -0.2803754729 0.065966927 #> ORF25 2.437697831 -0.504028804 -0.2821572231 0.0159060291 -0.059944908 #> ORFB 2.547352019 -0.257310313 0.5071637981 -0.0495762042 0.027591294 #> RPS7-01 4.492790291 -1.909199038 -0.3546145922 0.3580445156 -0.188156072 #> PC6 PC7 PC8 #> AT1G01610 -0.494509915 -6.287342e-04 1.517268e-03 #> AT1G02120 -0.749899899 2.341049e-05 1.608980e-04 #> AT1G02520 -0.376088809 1.083705e-03 4.727368e-04 #> AT1G03220 0.108759918 9.884710e-05 6.557080e-04 #> AT1G03860 -0.291052245 2.539481e-04 -2.494125e-03 #> AT1G04120 -0.847509829 3.322061e-03 -1.339738e-03 #> AT1G04430 -0.393512028 -5.558835e-04 1.862521e-03 #> AT1G04910 0.005985248 -1.467695e-03 1.046365e-03 #> AT1G05070 -1.005107493 -4.545905e-05 2.586308e-04 #> AT1G05500 -0.657513424 1.714170e-04 -1.902161e-03 #> AT1G06530 -0.231306539 -7.345551e-04 6.355952e-04 #> AT1G06840 -0.330276147 1.517507e-03 -8.539287e-05 #> AT1G06890 -0.393311749 -1.533050e-03 4.709468e-03 #> AT1G06940 -0.200452023 -1.462136e-03 1.656668e-03 #> AT1G07510 0.108284526 -2.783817e-03 -3.741911e-04 #> AT1G07670 -0.225839923 -1.237900e-05 -3.867270e-05 #> AT1G07810 -0.425394020 1.323002e-04 -2.302327e-05 #> AT1G08470 -0.451327397 3.145847e-03 8.340161e-05 #> AT1G08480 0.283992344 4.363856e-04 2.582199e-03 #> AT1G08660 -0.420666444 1.419237e-04 -7.837044e-04 #> AT1G09210 -1.031347102 4.361834e-04 -2.121431e-03 #> AT1G09330 -0.634073137 -3.105529e-03 -1.727461e-03 #> AT1G09630 -0.354944309 -2.605782e-05 1.516101e-03 #> AT1G09870 -1.447986900 1.754558e-04 3.875520e-04 #> AT1G10130 -0.056735152 2.085083e-04 -1.983071e-04 #> AT1G10290 -0.359706793 -5.992392e-03 -2.107826e-04 #> AT1G10510 -0.203060583 3.008974e-04 -2.404111e-03 #> AT1G10950 -0.425526560 -7.506142e-04 -6.406285e-04 #> AT1G11320 -0.529722602 2.848754e-04 -1.405494e-03 #> AT1G11330 -0.602417203 -8.410022e-04 -2.793326e-06 #> AT1G11580 -0.592699199 -9.900821e-04 5.915916e-04 #> AT1G11680 -0.465304529 1.444740e-03 5.719828e-04 #> AT1G12840 -0.085371762 -2.553195e-03 -9.455682e-05 #> AT1G13280 -0.349886500 2.050957e-03 2.608715e-05 #> AT1G13900 -0.397963388 -2.912238e-04 9.235141e-04 #> AT1G14010 -0.887066207 1.722290e-04 -4.570469e-03 #> AT1G14320 -0.875576971 1.265896e-03 -1.502233e-03 #> AT1G14670 -0.419321900 5.893884e-03 3.748923e-04 #> AT1G14830 -0.311821513 -1.119553e-04 1.715239e-03 #> AT1G14850 0.129438168 3.661767e-05 -2.288975e-04 #> AT1G14870 -0.804540478 -1.211030e-04 1.346373e-04 #> AT1G15210 -0.438245233 9.497963e-04 -1.769915e-03 #> AT1G15500 -0.179003364 2.187765e-04 3.502471e-05 #> AT1G15690 -0.651153046 6.867254e-04 9.891389e-04 #> AT1G16920 -0.531284666 1.657226e-04 -2.366050e-05 #> AT1G17290 -0.006013855 -1.164510e-03 -8.736983e-05 #> AT1G17500 -0.565546275 -1.593611e-03 -2.407830e-03 #> AT1G18260 -0.804926161 -3.521111e-05 3.289357e-03 #> AT1G18540 -0.862157217 -7.576982e-04 -1.383453e-03 #> AT1G18700 -0.749768543 1.288941e-03 1.578723e-04 #> AT1G19360 -0.141742292 -6.051133e-04 5.915145e-04 #> AT1G19370 -0.618046972 2.087529e-03 6.824942e-05 #> AT1G19430 -0.133555946 -2.046930e-03 1.135581e-03 #> AT1G19710 -0.202858557 6.243049e-03 -4.589941e-03 #> AT1G20330 -0.469803131 2.327439e-03 6.154812e-04 #> AT1G21480 0.155820507 -1.709089e-04 2.567532e-03 #> AT1G21750 -0.598833112 -1.081362e-03 -8.226618e-04 #> AT1G22200 -1.080283161 9.355491e-05 3.445696e-03 #> AT1G22280 -0.387566416 -1.512469e-03 -1.355591e-04 #> AT1G22530 0.231379596 1.615071e-04 -4.783824e-04 #> AT1G24510 -0.588288898 -6.431043e-05 1.495032e-05 #> AT1G26850 -0.108653780 -3.940287e-04 -5.660713e-05 #> AT1G27190 -0.161701928 1.424158e-03 1.445332e-03 #> AT1G27390 -0.134739049 4.162191e-05 -1.231711e-04 #> AT1G27770 -0.297146475 2.515994e-03 -9.577297e-04 #> AT1G27930 -0.106076115 1.386003e-05 -1.453867e-05 #> AT1G27950 -0.541550609 2.885915e-03 8.702725e-05 #> AT1G27980 -0.793888947 2.146147e-03 2.562677e-04 #> AT1G28340 -0.103895401 -3.760245e-04 -1.301444e-04 #> AT1G29020 -0.493825115 2.266433e-03 -1.025495e-03 #> AT1G29470 -0.283444683 8.396704e-04 6.707391e-05 #> AT1G29790 -0.398840531 -1.304395e-03 7.567337e-04 #> AT1G29980 -0.525372704 4.245307e-04 4.468149e-04 #> AT1G30000 -0.276781463 -2.133500e-05 1.219937e-03 #> AT1G30360 -0.254853690 -8.134941e-04 -8.468107e-05 #> AT1G30400 -0.402009800 3.479793e-04 1.295798e-04 #> AT1G31130 -0.282877195 -2.705152e-04 -8.376105e-05 #> AT1G31850 -0.075444886 -1.216501e-04 1.026466e-03 #> AT1G32090 -0.448405185 -5.297971e-05 -5.546313e-05 #> AT1G32210 -0.344382063 -7.009747e-06 2.315656e-05 #> AT1G34130 -0.642007373 2.180090e-03 5.269644e-04 #> AT1G35620 -0.852246133 5.237708e-05 -5.437920e-04 #> AT1G42960 -0.371224809 -3.470531e-03 4.722473e-03 #> AT1G43170 -0.857060439 -4.277476e-04 -2.102124e-04 #> AT1G43890 -0.464989683 1.069016e-04 -1.276067e-03 #> AT1G43910 -0.566198037 -4.307315e-04 5.149999e-04 #> AT1G44170 -0.402542549 2.103405e-03 2.845115e-05 #> AT1G47260 -0.267957262 -2.764967e-03 -3.319004e-03 #> AT1G48920 -0.202459780 -4.115626e-03 -1.219051e-03 #> AT1G49710 -0.198381135 2.105632e-04 -1.461607e-04 #> AT1G50460 -0.130072251 1.272313e-03 -1.672166e-03 #> AT1G51540 0.010227917 9.498815e-05 -1.119025e-04 #> AT1G51570 -0.579639856 2.040896e-03 9.142644e-05 #> AT1G51590 -0.131740151 -1.291322e-03 -1.697728e-03 #> AT1G51630 -0.066721011 -9.407114e-04 1.749277e-03 #> AT1G51760 -0.654174258 1.687063e-03 2.584287e-04 #> AT1G51980 -0.547758693 1.164065e-03 4.334147e-04 #> AT1G52260 -1.301643898 1.059171e-03 5.085773e-03 #> AT1G52600 -0.773003055 4.109817e-03 -9.824955e-04 #> AT1G52780 -0.140520691 4.746190e-04 -9.704720e-04 #> AT1G53000 -0.122545242 3.008444e-04 -2.485570e-03 #> AT1G53210 -0.404330593 6.366360e-03 -1.241771e-03 #> AT1G53760 0.068320952 2.828892e-04 -3.318159e-03 #> AT1G53840 0.054551081 -1.029358e-03 -1.640238e-03 #> AT1G54000 -0.573692773 -3.534368e-04 1.063998e-04 #> AT1G54990 -0.464091062 -2.232412e-04 -2.356674e-03 #> AT1G55130 -0.797812336 3.199453e-03 2.881897e-04 #> AT1G55160 -0.028440373 -3.327967e-03 -3.133198e-04 #> AT1G55850 -0.926019033 1.694493e-04 -1.105666e-03 #> AT1G56070 -0.348137909 2.694749e-06 1.707020e-03 #> AT1G56140 -0.699920199 2.200903e-03 -2.298114e-03 #> AT1G56340 -0.933330540 2.358180e-03 -1.253362e-03 #> AT1G59820 -0.437592487 -1.879743e-04 -2.322793e-05 #> AT1G59870 -0.384841806 4.520216e-04 -3.503136e-04 #> AT1G61770 -0.471925116 1.445836e-04 7.676683e-04 #> AT1G61790 -0.749969171 -3.676656e-03 -5.822914e-05 #> AT1G63010 -0.657167794 1.735741e-03 1.281651e-04 #> AT1G63050 -0.183165842 -1.232255e-04 -1.073281e-04 #> AT1G64090 -0.560848618 -1.309466e-03 -4.767806e-03 #> AT1G64880 -0.314369202 7.445373e-05 3.135423e-03 #> AT1G64950 -0.418971355 -2.899645e-03 6.728681e-04 #> AT1G65020 -0.350539585 6.044866e-03 1.159428e-04 #> AT1G65270 -0.864807415 -9.506362e-04 1.351603e-04 #> AT1G65540 -0.013136234 -9.881299e-04 7.249883e-04 #> AT1G65820 -0.497125397 1.922632e-04 -1.165110e-03 #> AT1G66270 -1.194644397 -7.877573e-05 1.764760e-03 #> AT1G66280 -0.497596206 -4.684523e-05 4.303086e-05 #> AT1G67490 -0.944756363 7.963567e-04 -1.048672e-03 #> AT1G67730 -0.305309084 -7.784601e-04 -2.231832e-03 #> AT1G69460 -1.341032614 4.446450e-05 2.624634e-03 #> AT1G69840 -0.664803489 3.826729e-05 8.594592e-04 #> AT1G70770 -0.791885925 4.440757e-04 -3.803916e-04 #> AT1G71220 -0.743206702 1.541728e-04 1.909520e-03 #> AT1G71780 -0.545185506 -1.883536e-03 -8.135548e-06 #> AT1G72090 -0.445431426 -1.193261e-03 -4.775690e-03 #> AT1G72370 -0.775715429 -2.375453e-05 1.232182e-04 #> AT1G72480 -0.112751324 3.031754e-03 1.531476e-04 #> AT1G73990 0.172403137 3.497120e-03 -1.097301e-04 #> AT1G74380 -0.604153982 1.335804e-03 1.476070e-04 #> AT1G74790 -0.706589379 2.173907e-03 7.156306e-04 #> AT1G75140 -0.972126524 1.034114e-04 2.343889e-04 #> AT1G76040 -0.206065619 1.543789e-04 -1.218661e-03 #> AT1G76270 -0.259368038 1.477979e-04 -2.228744e-05 #> AT1G76400 -0.660988003 -8.008718e-04 -3.309596e-04 #> AT1G77120 -0.188907063 1.230651e-03 -1.254479e-03 #> AT1G77510 -1.049763557 1.173803e-04 2.297134e-04 #> AT1G77590 -0.437904042 7.831342e-04 2.226293e-03 #> AT1G78240 0.182280109 2.114615e-04 -1.235139e-03 #> AT1G78850 -0.489567744 -1.501576e-03 -7.935416e-05 #> AT1G78900 -0.555581732 -3.461900e-04 3.662769e-04 #> AT1G78920 -0.444013527 1.070112e-04 -1.154321e-03 #> AT1G79560 -0.082868172 3.346026e-04 -2.637305e-05 #> AT1G79940 -0.573026631 -3.805903e-04 -4.442633e-04 #> AT1G80300 -0.267713016 9.090426e-04 -1.118116e-03 #> AT1G80950 -1.226132405 -2.917813e-03 -2.240918e-03 #> AT2G01250 -0.101165575 -3.006178e-03 -1.389450e-03 #> AT2G01270 -0.429663867 2.120533e-03 -9.701725e-04 #> AT2G01470 -0.631493176 -2.318485e-03 -1.002521e-03 #> AT2G01630 -0.343621821 1.428765e-03 1.071255e-03 #> AT2G01720 -0.826664263 -9.601471e-04 1.167188e-03 #> AT2G01970 -0.115891295 3.059212e-03 2.388386e-03 #> AT2G02040 -0.521672546 2.361157e-03 1.821882e-04 #> AT2G03120 -0.748568078 3.021267e-03 1.683354e-04 #> AT2G03510 -0.855093089 1.103999e-03 8.645241e-04 #> AT2G04280 -0.056124070 -1.447952e-03 -1.661666e-03 #> AT2G04350 -1.074908526 5.651905e-04 1.871240e-04 #> AT2G04780 -0.459414489 7.573171e-05 -1.071811e-04 #> AT2G04940 -0.198946259 4.375976e-04 -4.919088e-03 #> AT2G09990 -0.720913167 -1.556406e-04 4.932672e-03 #> AT2G14720 -0.169381371 3.592547e-03 7.036802e-05 #> AT2G14740 -0.417940545 -3.847238e-04 -3.305908e-05 #> AT2G16060 -0.319035238 2.149112e-04 -9.602115e-05 #> AT2G16460 -0.118701219 2.143448e-04 -9.242958e-05 #> AT2G16530 -0.525875758 3.526398e-04 1.271324e-04 #> AT2G16640 -0.473280013 1.328974e-03 1.502276e-04 #> AT2G16660 -1.248417411 2.371860e-03 -1.233551e-03 #> AT2G16760 -0.629912012 -1.473301e-04 4.827548e-03 #> AT2G17440 0.000595965 -3.077125e-03 4.329868e-03 #> AT2G17720 -0.658349454 3.039078e-03 1.447558e-04 #> AT2G18193 -0.476802443 1.685778e-03 -6.825821e-04 #> AT2G18330 -0.125665214 2.544924e-04 2.340393e-03 #> AT2G18690 1.165625557 -5.093349e-03 4.028503e-04 #> AT2G18960 -0.420827453 -1.783285e-06 -1.042865e-03 #> AT2G19080 0.035707059 3.078594e-03 -2.291399e-03 #> AT2G19860 -0.005937408 6.293729e-05 -3.586335e-05 #> AT2G20360 -0.369673388 -1.444161e-03 -1.128590e-05 #> AT2G20370 -0.139769602 1.410640e-04 -1.903531e-03 #> AT2G20450 -0.596199000 -2.038304e-03 -3.263366e-05 #> AT2G20800 -0.172426129 3.122759e-03 -1.780733e-03 #> AT2G20807 -0.533621593 -7.498681e-04 2.360140e-03 #> AT2G20940 -0.108633644 6.081359e-03 -1.580323e-03 #> AT2G20990 -0.545396866 8.203242e-04 2.679770e-05 #> AT2G21160 -0.826619543 -5.832478e-04 -7.641645e-04 #> AT2G21410 -0.881690688 -1.532767e-03 -2.260076e-03 #> AT2G21600 -1.421560267 1.597288e-04 -2.042772e-03 #> AT2G21870 -0.044323543 8.001368e-05 -1.397331e-04 #> AT2G22900 -0.327822676 1.970556e-04 5.992666e-05 #> AT2G23810 -0.713095399 -1.029010e-04 6.819867e-05 #> AT2G24180 -0.772629811 -1.804102e-03 -1.555390e-06 #> AT2G24420 -0.680638320 9.386178e-04 1.098906e-04 #> AT2G25110 -0.440445683 5.815535e-03 2.555154e-03 #> AT2G26140 -0.079753931 3.046065e-03 -1.839488e-03 #> AT2G26250 -0.870429202 1.349018e-04 1.036267e-03 #> AT2G26300 -0.514981620 4.041061e-05 -4.767935e-03 #> AT2G27490 -0.901723269 1.728656e-05 1.093056e-04 #> AT2G27730 0.019181354 -1.359118e-03 -3.293023e-04 #> AT2G28520 -0.218619658 -2.216797e-04 -1.668158e-03 #> AT2G29080 -0.055451800 1.686165e-04 -1.768161e-03 #> AT2G29960 -1.080580567 -5.766276e-03 1.538929e-05 #> AT2G29990 -0.042289911 -8.540587e-04 -1.135761e-03 #> AT2G30490 -0.661203036 6.364096e-04 -2.443691e-04 #> AT2G30860 0.086420241 -1.857553e-03 -2.071123e-03 #> AT2G30930 0.453812963 -2.625966e-03 -2.696481e-04 #> AT2G31190 -0.071593563 -1.963720e-03 -1.333812e-04 #> AT2G31390 0.385365898 -2.747062e-03 -3.356792e-04 #> AT2G32240 -0.179983244 2.773970e-03 -3.058894e-03 #> AT2G32440 -0.642576736 1.363869e-04 1.644119e-04 #> AT2G32920 -0.966336940 -1.226714e-03 1.796352e-03 #> AT2G33040 0.087331426 1.276714e-03 -9.262242e-04 #> AT2G33220 -0.066643707 -1.248985e-04 1.466029e-03 #> AT2G33630 -1.107086011 1.552261e-04 2.636835e-03 #> AT2G34300 0.037082383 6.647189e-04 -3.473709e-05 #> AT2G34660 -0.422843309 -9.248851e-04 -1.096647e-03 #> AT2G35610 -0.193343757 1.581549e-05 7.214495e-04 #> AT2G35720 0.126193282 3.220987e-03 -1.570076e-04 #> AT2G36160 -0.861776247 8.593747e-05 2.247647e-04 #> AT2G36290 -1.170054227 -5.711208e-03 2.484024e-03 #> AT2G36380 -0.392151037 2.047342e-03 1.387758e-06 #> AT2G36910 -0.329408095 -7.973833e-05 -1.406073e-04 #> AT2G37050 -0.464205183 2.900930e-03 1.314520e-04 #> AT2G37170 -0.912178431 3.226314e-03 -4.539695e-03 #> AT2G37400 0.017438696 4.851247e-04 -1.312079e-03 #> AT2G37860 -0.059810741 2.321548e-04 1.505679e-03 #> AT2G38530 -0.106781697 -1.468778e-05 4.607528e-03 #> AT2G38550 -0.222336741 5.009982e-04 1.640672e-03 #> AT2G38650 -0.046465999 1.069075e-04 -7.218734e-04 #> AT2G38960 -0.685334142 1.271090e-04 1.001886e-04 #> AT2G39480 -0.423952267 2.560154e-05 -1.656386e-03 #> AT2G39630 -0.501134196 -5.908786e-03 -1.746017e-04 #> AT2G39960 -1.198433287 -1.437748e-03 1.743557e-03 #> AT2G40280 -0.129871836 3.882055e-04 2.885419e-03 #> AT2G40890 -0.675104977 -2.190560e-03 -1.604762e-03 #> AT2G41560 -0.453926896 -2.652794e-03 -7.969966e-04 #> AT2G42210 -0.033866418 2.625775e-03 8.789175e-04 #> AT2G43350 -0.596511297 -5.907463e-05 2.370148e-03 #> AT2G43610 -0.085981221 -5.864136e-06 4.705950e-03 #> AT2G43950 -0.320540349 1.136278e-03 1.461104e-04 #> AT2G44640 -0.328720759 -9.479396e-04 3.676966e-05 #> AT2G45060 -0.264137654 9.931006e-05 2.295611e-03 #> AT2G45140 -0.564889397 -7.260167e-04 7.543362e-04 #> AT2G45470 -0.783292936 3.674192e-03 -4.562412e-04 #> AT2G45510 -0.596999726 1.671995e-04 -1.302613e-03 #> AT2G45820 -0.049653665 1.207947e-04 -2.633737e-04 #> AT2G46170 -0.518069322 2.420669e-04 9.496353e-04 #> AT2G47000 -0.583311323 8.054322e-04 -3.160118e-04 #> AT2G47470 -1.102634955 8.314807e-04 1.464026e-03 #> AT2G47650 0.284676776 -1.738871e-03 -3.637011e-04 #> AT2G47800 -0.562131244 3.619211e-04 1.551443e-04 #> AT2G47840 -0.299746640 1.405926e-05 1.707178e-03 #> AT3G01280 -0.158298570 4.891477e-04 -6.389761e-05 #> AT3G01290 -0.677494269 1.584008e-03 -8.402900e-04 #> AT3G01380 -1.147300594 -2.754700e-03 -2.219235e-03 #> AT3G01930 -0.740912384 1.616815e-04 9.800230e-05 #> AT3G02090 -0.237914579 -1.276778e-04 7.122939e-04 #> AT3G02350 -0.264850054 1.596642e-04 -7.879390e-04 #> AT3G02875 -0.017689129 4.264660e-04 -4.853557e-03 #> AT3G02880 -0.456349047 1.188092e-03 8.549495e-04 #> AT3G03050 -0.088302426 -1.380736e-04 -1.370623e-04 #> AT3G03060 0.156148799 3.741735e-04 -2.529400e-03 #> AT3G03330 -0.732256033 7.895730e-05 -1.149730e-03 #> AT3G03520 -0.556843058 3.786445e-03 1.574199e-04 #> AT3G04920 -1.023344658 2.841234e-03 3.656281e-04 #> AT3G05230 -0.241967606 1.632921e-04 -1.699674e-03 #> AT3G05710 -0.017104871 1.566106e-03 -1.703306e-04 #> AT3G06300 -0.365199154 4.075601e-03 1.700704e-03 #> AT3G06510 -0.227374819 2.473281e-04 9.936977e-05 #> AT3G06960 -0.612289164 1.352864e-04 2.555461e-04 #> AT3G07110 -0.738017964 2.239254e-03 -2.070849e-03 #> AT3G07140 -0.891445770 -1.125705e-03 7.914064e-05 #> AT3G07160 -0.331120870 -5.262637e-05 1.025395e-03 #> AT3G07180 -0.364571037 1.031627e-03 1.208526e-03 #> AT3G07330 -0.100625006 -4.082271e-03 1.358250e-03 #> AT3G07390 -0.654850340 1.942347e-03 2.370998e-03 #> AT3G08510 -0.722639187 7.830263e-05 -1.154752e-03 #> AT3G08580 -0.087726094 1.379948e-03 2.994007e-04 #> AT3G08630 -0.183590915 -9.121474e-04 9.674130e-04 #> AT3G08640 -0.276045054 1.988673e-04 -4.765505e-03 #> AT3G08950 -0.007929183 1.072205e-04 -2.167872e-04 #> AT3G09630 -1.065024843 -1.431203e-03 2.017070e-04 #> AT3G09740 -0.696197224 2.373225e-03 9.832177e-05 #> AT3G10370 -0.364047868 3.829755e-05 7.485548e-06 #> AT3G10730 -0.916943336 -1.185431e-03 6.014127e-05 #> AT3G11070 -0.014180400 -1.701461e-03 -1.348422e-03 #> AT3G11730 -0.375631964 -1.408038e-04 -1.134017e-04 #> AT3G11820 -0.476470376 2.917860e-03 -1.477853e-03 #> AT3G13080 -0.432160432 1.267949e-03 1.367693e-03 #> AT3G13410 -1.255817384 2.406737e-04 3.217435e-04 #> AT3G13560 -0.421396365 -2.987514e-03 -1.837411e-04 #> AT3G13772 -0.827982589 -1.269381e-03 -1.177238e-03 #> AT3G13870 -0.858685215 4.714415e-04 1.320662e-04 #> AT3G14610 -0.956481522 1.628371e-03 1.013491e-03 #> AT3G14840 -0.244520495 -3.430890e-05 4.269445e-04 #> AT3G15710 -0.070036784 1.429262e-04 1.423672e-03 #> AT3G15950 -0.225867497 3.171725e-03 2.426019e-03 #> AT3G16110 -0.535489828 3.214954e-03 2.127015e-04 #> AT3G16200 0.587008860 -5.662853e-03 -5.877543e-04 #> AT3G16460 -0.863319153 -6.196396e-04 1.731393e-03 #> AT3G16480 -0.287045368 3.294993e-03 9.766687e-06 #> AT3G17840 -0.558176675 -2.596933e-05 -1.188131e-03 #> AT3G18370 -0.708022575 -1.922564e-03 9.992699e-04 #> AT3G18480 -0.195222127 -1.223700e-03 -1.305749e-04 #> AT3G18820 -0.531792666 9.035601e-04 5.186526e-05 #> AT3G19340 -1.411489141 1.420223e-04 1.462155e-03 #> AT3G19820 -0.537249333 7.071933e-04 5.260249e-04 #> AT3G20000 -0.006730865 7.768007e-04 -8.844072e-04 #> AT3G20390 -0.199859678 -1.858046e-03 -1.456535e-04 #> AT3G21160 -0.502263150 -9.476697e-04 6.214072e-05 #> AT3G21190 -0.028348867 1.180198e-05 4.164903e-04 #> AT3G21250 -1.101046958 3.314995e-03 2.274867e-04 #> AT3G22370 -0.242753674 -5.804725e-05 9.241415e-04 #> AT3G23175 -1.063946555 1.417990e-03 1.110775e-04 #> AT3G23190 -0.833749764 4.261719e-05 1.186724e-04 #> AT3G23300 -0.021294086 -5.550552e-04 -8.897579e-04 #> AT3G23400 -0.526258945 1.974159e-03 -7.055130e-05 #> AT3G23450 -0.234973974 2.311246e-04 -4.897582e-03 #> AT3G23710 0.170368325 5.423147e-04 -3.154490e-04 #> AT3G23750 -0.435267377 6.040409e-05 -1.467480e-03 #> AT3G24160 -0.876861385 2.152264e-03 -4.362759e-04 #> AT3G24550 -0.312839707 -3.038273e-05 -1.700430e-03 #> AT3G24660 -0.532603214 -3.813579e-03 -1.736177e-03 #> AT3G25140 -0.012592771 1.635304e-04 -9.276582e-04 #> AT3G25290 0.494586273 3.050137e-03 -2.586693e-03 #> AT3G25610 -0.639537294 3.198360e-03 -1.879190e-03 #> AT3G25780 -0.544410847 -3.165067e-03 -1.270762e-04 #> AT3G26370 -0.448621739 -2.856882e-03 -7.666667e-04 #> AT3G26830 -0.175660733 -3.735431e-03 -1.095919e-04 #> AT3G27220 -0.145335990 1.675217e-04 -8.499636e-04 #> AT3G27230 -0.485836953 7.433465e-04 -8.437047e-04 #> AT3G27325 -1.085580509 2.784547e-05 1.338024e-03 #> AT3G28450 -0.205349013 7.515393e-04 2.714888e-03 #> AT3G28480 -0.315248900 1.273992e-03 1.600233e-03 #> AT3G28510 -0.961180864 1.357416e-03 7.162815e-04 #> AT3G28580 -0.772478174 3.104891e-03 -1.334386e-03 #> AT3G28710 -0.052000993 3.740792e-04 5.419092e-05 #> AT3G28720 -0.345660488 1.366931e-03 1.200189e-03 #> AT3G28860 -0.673880041 -8.644444e-04 9.607583e-04 #> AT3G42050 0.025929297 1.896258e-03 8.025353e-04 #> AT3G43190 0.012621555 2.271538e-03 7.180314e-05 #> AT3G44330 -0.798513887 7.493727e-04 1.257821e-04 #> AT3G45890 -0.383589768 9.385116e-04 1.036338e-04 #> AT3G46290 -0.292811428 5.865598e-03 -1.928060e-03 #> AT3G46740 -0.250326145 9.260853e-04 -3.291100e-04 #> AT3G46830 -0.944697257 -1.258884e-03 1.171282e-03 #> AT3G47200 -0.646622666 2.041392e-04 -2.322692e-03 #> AT3G47930 -0.448490264 -1.252063e-03 -1.029344e-03 #> AT3G47950 -0.030560256 1.689764e-04 -1.695536e-04 #> AT3G48820 -0.537373287 2.929688e-05 9.147956e-05 #> AT3G48890 -0.383493799 -3.927619e-03 2.220565e-03 #> AT3G49360 -0.839069793 -1.078324e-04 4.916161e-03 #> AT3G49560 0.116804236 5.185721e-04 -2.631426e-04 #> AT3G49720 -0.432289084 2.545970e-03 -1.098686e-03 #> AT3G49870 0.294819668 -3.356397e-05 4.637488e-03 #> AT3G49910 -1.356370584 -1.831293e-03 -4.497628e-03 #> AT3G50930 -0.359403110 9.485403e-05 -1.292320e-03 #> AT3G51010 -0.139288359 -3.061972e-05 4.717296e-03 #> AT3G51050 -0.904602393 -1.401351e-03 6.267385e-05 #> AT3G51430 -0.833834001 -7.683148e-04 9.221229e-04 #> AT3G51440 -0.880151083 -2.845011e-03 -6.543201e-05 #> AT3G51460 -0.379500912 -9.904037e-04 -4.246224e-04 #> AT3G51550 -0.385306489 1.036759e-04 8.878267e-04 #> AT3G51580 0.675287684 -9.477681e-05 1.311284e-03 #> AT3G51740 -0.146396821 -1.971856e-03 -2.833135e-04 #> AT3G52190 -0.581465616 -3.934722e-03 -8.051950e-05 #> AT3G52300 -0.116044951 7.579171e-04 -3.141078e-04 #> AT3G52850 -0.624138247 -1.044345e-03 -2.380425e-03 #> AT3G52930 0.192499841 2.202652e-04 1.060147e-03 #> AT3G53480 -0.151822603 1.927625e-04 -4.827561e-03 #> AT3G53520 -0.324523515 2.413271e-03 5.554903e-04 #> AT3G54110 -0.194351346 8.339544e-04 -5.566959e-04 #> AT3G54840 -0.896485970 -2.864858e-03 1.542236e-03 #> AT3G54960 -0.738341653 1.463311e-03 5.040782e-03 #> AT3G55360 -0.602080651 1.366392e-04 1.956171e-05 #> AT3G55830 -0.166119694 3.118220e-03 -4.800300e-03 #> AT3G56430 0.372715674 6.223956e-03 -1.631719e-04 #> AT3G56750 -0.155564833 5.977221e-03 2.171088e-03 #> AT3G57010 -0.360106165 2.314242e-03 6.735488e-05 #> AT3G57020 -0.733662277 8.342629e-05 -8.297889e-04 #> AT3G57030 -0.664039355 1.821908e-03 -5.573725e-04 #> AT3G57220 -0.384351463 4.490664e-04 -3.187776e-03 #> AT3G57650 -0.385867552 1.512428e-04 2.035415e-05 #> AT3G57880 -0.713324809 1.642842e-04 1.155743e-04 #> AT3G58730 0.701084425 3.865875e-04 1.488412e-03 #> AT3G58840 0.005797904 -1.831576e-03 -1.570027e-04 #> AT3G59280 0.083026456 -5.786897e-03 4.270903e-04 #> AT3G59500 -0.565898042 -2.755033e-03 -1.377817e-04 #> AT3G59820 -0.191352197 -5.070058e-04 -3.551423e-04 #> AT3G60190 -0.443155813 -7.214098e-05 2.869579e-03 #> AT3G60600 -0.737728309 9.289300e-04 -8.675757e-04 #> AT3G60900 -0.667181503 1.515430e-03 1.609187e-05 #> AT3G61050 -0.121772031 4.722748e-05 1.087756e-03 #> AT3G61130 -0.413899914 8.558062e-04 7.756226e-04 #> AT3G61440 -0.504779356 2.566880e-04 -4.546202e-03 #> AT3G62360 -0.921295840 -6.246830e-05 8.088966e-04 #> AT3G62700 -0.835128257 -1.167200e-03 1.421686e-04 #> AT3G63170 0.513342037 5.880521e-04 -1.663225e-03 #> AT3G66654 0.104428845 -3.226132e-03 2.085458e-03 #> AT3G66658 -0.673820928 2.169761e-03 -1.430280e-03 #> AT4G00090 -0.323888634 -1.705884e-03 1.203773e-03 #> AT4G00175 -0.360039654 1.905929e-04 -3.146139e-03 #> AT4G00740 -0.074348273 -9.606755e-04 -1.567295e-04 #> AT4G00750 -0.441257203 -2.267274e-03 9.897738e-05 #> AT4G00860 -0.028910514 3.621541e-04 1.378224e-03 #> AT4G01100 -0.177122650 -6.081818e-04 -1.609239e-03 #> AT4G01320 -0.663197288 -1.517472e-03 -5.608276e-04 #> AT4G02510 -0.052051197 3.937341e-04 1.521777e-05 #> AT4G02930 -0.300020656 -1.148473e-03 -9.048340e-04 #> AT4G03550 -0.639492244 5.622271e-04 5.893516e-04 #> AT4G04910 -0.097850521 -1.676017e-03 -2.633333e-03 #> AT4G05020 -0.223671410 8.287795e-04 -3.150059e-04 #> AT4G08850 -0.312464631 1.146663e-04 -1.119596e-04 #> AT4G09320 -0.018577069 1.810287e-03 -2.369565e-03 #> AT4G09580 -0.757502592 3.861072e-05 1.827212e-04 #> AT4G11010 -1.422895481 -6.170664e-03 1.003492e-04 #> AT4G11150 -0.246999063 -3.805740e-04 2.069694e-06 #> AT4G11800 -1.039193127 3.117264e-03 2.629112e-04 #> AT4G11850 0.117257172 1.131980e-04 -2.442882e-04 #> AT4G12420 -0.491268262 7.879200e-04 -5.311853e-04 #> AT4G12590 -0.723078655 -8.605300e-04 1.424247e-05 #> AT4G12650 -0.270709981 -8.090277e-04 -9.183556e-04 #> AT4G12730 -0.348880380 -1.937785e-03 -1.403863e-03 #> AT4G13940 -0.128631794 1.432154e-04 -7.213724e-05 #> AT4G14360 -0.496256875 1.225984e-03 2.736945e-04 #> AT4G14420 -1.413356969 1.358438e-04 -4.682950e-04 #> AT4G14950 -0.614273071 2.756640e-05 7.395091e-05 #> AT4G15000 -0.948748170 5.953357e-05 -9.427697e-04 #> AT4G15240 -0.454455642 -1.118844e-05 -1.646314e-03 #> AT4G15760 -0.714808060 -1.475327e-05 9.009577e-04 #> AT4G16120 -0.234123395 9.414818e-04 7.797940e-04 #> AT4G16170 -0.765665402 2.129167e-04 -1.817684e-03 #> AT4G16500 -1.015097302 2.044440e-03 1.792182e-04 #> AT4G16650 -0.552893533 1.396100e-05 6.185453e-05 #> AT4G17120 -0.053511515 1.146769e-04 -1.414817e-05 #> AT4G17140 -0.375601709 3.203808e-04 1.953830e-04 #> AT4G17170 -0.523636911 2.965606e-03 1.303106e-03 #> AT4G17430 -0.415182497 -8.163723e-06 2.457066e-03 #> AT4G18030 -0.257793261 4.199634e-04 2.275772e-04 #> AT4G18100 -0.614891490 -1.290237e-05 9.622848e-05 #> AT4G18430 -0.294915830 -7.080445e-05 -1.157287e-04 #> AT4G19640 -0.408608755 2.040811e-04 -3.940498e-05 #> AT4G20110 -0.482406525 5.067044e-04 2.479792e-03 #> AT4G20830 -0.488570850 -5.218595e-04 -6.851346e-05 #> AT4G21150 -0.594662773 -5.464692e-04 -1.574630e-04 #> AT4G21180 -0.714569709 1.546281e-04 -7.493599e-04 #> AT4G21700 -0.164007907 5.415244e-05 -2.412928e-03 #> AT4G21960 -0.368381835 -6.563045e-06 -5.908200e-05 #> AT4G23630 -0.434771593 5.974606e-04 5.412450e-05 #> AT4G23650 -0.623279215 3.110471e-03 -1.504641e-03 #> AT4G23850 -1.093306034 -2.468061e-05 1.765510e-03 #> AT4G23940 0.049184427 -8.166966e-04 -9.583436e-05 #> AT4G24190 -0.919473717 1.499803e-03 1.172439e-03 #> AT4G24330 -0.904823043 -1.879299e-04 -7.328521e-04 #> AT4G25240 -0.495662540 -1.621617e-06 -2.964857e-05 #> AT4G25720 -0.756722204 3.127430e-03 2.119851e-04 #> AT4G25900 -0.415267245 3.195439e-03 -3.092793e-03 #> AT4G26410 -0.224956143 1.751864e-04 -1.690849e-03 #> AT4G26690 -0.688134149 4.226567e-05 2.250113e-05 #> AT4G27090 -0.684577992 -5.982577e-03 -2.423650e-03 #> AT4G27500 -0.308092083 -2.275143e-03 -1.516078e-04 #> AT4G27520 -0.632845972 -1.912800e-03 -1.016461e-03 #> AT4G27585 0.028165279 -2.186563e-04 -1.957612e-04 #> AT4G28220 -0.108582055 -3.055910e-03 1.332713e-03 #> AT4G28390 -0.107714814 -9.843113e-04 8.528386e-04 #> AT4G28510 -0.562886608 1.675027e-04 -2.340567e-03 #> AT4G28570 -0.803338914 9.183934e-06 -4.376441e-06 #> AT4G29130 -0.182303709 1.284401e-03 -3.713116e-05 #> AT4G29480 -0.349635655 1.452647e-04 8.191717e-05 #> AT4G29520 -0.638744475 -1.451928e-04 1.447228e-03 #> AT4G29900 -0.499956034 1.476732e-04 -7.046336e-04 #> AT4G30010 -0.145333921 7.016509e-05 8.709964e-04 #> AT4G30090 -0.534529010 2.458056e-05 1.552872e-05 #> AT4G30190 -0.398548957 9.964146e-04 1.306603e-03 #> AT4G30210 -0.582840304 2.213677e-03 -2.292033e-03 #> AT4G30260 -0.110344339 -3.333225e-04 -1.598614e-04 #> AT4G30600 -0.830443950 1.072094e-03 1.131443e-03 #> AT4G30990 -0.629434943 1.778944e-04 8.469620e-05 #> AT4G31140 -0.311565481 -1.052388e-04 -1.141335e-04 #> AT4G31340 -0.556651527 1.854452e-04 6.576480e-05 #> AT4G31430 -0.204773252 -4.066444e-04 4.498375e-03 #> AT4G31500 -0.782094247 -4.156595e-04 6.448611e-04 #> AT4G31700 -1.686499558 -9.409213e-05 5.293652e-03 #> AT4G32130 -0.262070965 -1.747948e-03 -3.248450e-03 #> AT4G32250 -0.214002319 1.526031e-04 1.209868e-03 #> AT4G32400 -0.305615133 7.431939e-05 3.913172e-05 #> AT4G32410 0.046380213 1.151866e-04 -7.756819e-04 #> AT4G32470 -0.057400356 -6.907031e-04 -8.863625e-04 #> AT4G33350 -0.276729085 -8.951562e-04 -1.228613e-04 #> AT4G33360 -0.368243309 -1.215991e-03 -3.283373e-05 #> AT4G34200 0.056853083 1.324581e-04 -3.308168e-04 #> AT4G34640 -0.398112215 -1.331355e-03 -8.349752e-05 #> AT4G34960 -0.198320428 1.984876e-03 -1.456371e-05 #> AT4G35000 0.200392298 -2.504321e-03 2.829760e-03 #> AT4G35100 -0.455544967 1.320694e-03 1.531504e-03 #> AT4G35230 -0.812574004 -1.995999e-03 1.172093e-03 #> AT4G35790 -0.625567972 1.348904e-03 1.549710e-03 #> AT4G36220 -0.458874160 2.731344e-04 -4.011900e-04 #> AT4G36250 -1.074470622 7.771218e-04 9.774627e-04 #> AT4G36480 -0.402664699 1.544094e-03 -6.168529e-04 #> AT4G36750 -0.238044677 -8.273889e-04 -1.094407e-03 #> AT4G37330 -0.802648723 3.244301e-03 -1.352767e-03 #> AT4G37370 -0.600321859 2.495642e-03 -3.091172e-04 #> AT4G37410 -0.726702996 6.093394e-03 9.912908e-04 #> AT4G37430 -0.868248294 8.573036e-05 1.234243e-04 #> AT4G37640 -0.464489627 3.699824e-05 1.963852e-03 #> AT4G37690 -0.210896512 -1.922472e-05 6.743439e-06 #> AT4G37820 0.319805661 6.179518e-03 -7.018698e-05 #> AT4G38215 -1.366227477 2.571407e-03 -1.930505e-03 #> AT4G38240 -0.284652875 -1.271760e-03 4.660165e-05 #> AT4G38270 -0.528679391 -1.021329e-04 6.607804e-05 #> AT4G38350 -0.608065776 3.808378e-03 -7.135434e-04 #> AT4G38500 -0.218330435 3.087382e-03 8.460786e-04 #> AT4G39030 -0.098944549 -2.593383e-03 -4.830067e-03 #> AT4G39080 -0.748171809 -1.251221e-03 6.034021e-04 #> AT4G39400 -0.690567482 1.437352e-03 1.695376e-03 #> AT4G39460 -0.313316689 2.550016e-04 1.058610e-04 #> AT4G39690 -0.117404075 1.052559e-03 -1.336088e-03 #> AT4G39840 -0.097475446 -2.611497e-03 -2.479967e-03 #> AT4G39990 -0.325858161 4.824659e-05 -1.168473e-04 #> AT5G01500 -0.089895143 1.479259e-04 -3.011035e-05 #> AT5G01590 -0.242396205 -1.067930e-03 2.337501e-03 #> AT5G02450 -0.890144891 -1.374167e-03 1.417278e-04 #> AT5G02870 -0.976621423 -1.483609e-03 6.581831e-05 #> AT5G03160 -0.571365871 -3.660690e-03 -2.357063e-03 #> AT5G03895 -0.050446652 3.132029e-03 1.322713e-04 #> AT5G04060 0.171382892 3.839643e-03 -2.666671e-05 #> AT5G04480 0.024599623 1.881621e-03 4.599433e-03 #> AT5G04885 -0.273727330 -8.718882e-04 8.641855e-04 #> AT5G04930 0.032882845 -7.862625e-05 1.435672e-03 #> AT5G04990 -0.371181932 2.879879e-03 4.660694e-05 #> AT5G05000 -0.327407900 2.622413e-03 1.436811e-04 #> AT5G05170 -0.036803742 -2.956137e-03 1.100534e-03 #> AT5G05520 -0.224844311 -7.258943e-04 -9.624604e-06 #> AT5G05670 -0.397964554 2.624465e-03 1.566945e-04 #> AT5G06320 -0.765647638 5.336128e-05 -8.708697e-04 #> AT5G07340 -0.556887909 8.472488e-05 -3.025627e-05 #> AT5G07910 -0.980031824 -1.177709e-04 1.578007e-04 #> AT5G08040 -0.104371907 1.631131e-03 -9.686885e-04 #> AT5G08080 -0.262491631 1.301143e-03 -1.353851e-03 #> AT5G08545 -0.462668587 2.362130e-03 -9.804330e-04 #> AT5G09400 -0.301768924 -2.670772e-03 7.810850e-07 #> AT5G09420 0.002164032 1.208933e-04 2.250851e-03 #> AT5G09810 -0.558377900 1.967895e-04 7.864139e-04 #> AT5G10360 -1.686499558 -9.409213e-05 5.293652e-03 #> AT5G10840 -0.096894885 -1.690655e-03 2.316795e-03 #> AT5G11560 -0.827024886 -1.075405e-04 1.173450e-03 #> AT5G11730 0.045358437 1.783155e-03 1.888923e-03 #> AT5G12290 -0.048246693 -7.639564e-04 -7.408297e-05 #> AT5G12470 -0.145458690 6.610427e-04 4.327690e-04 #> AT5G12860 -0.041831246 7.700511e-04 -1.098068e-04 #> AT5G13450 -0.261093523 1.516521e-04 -1.970810e-03 #> AT5G13490 -0.057876687 5.468533e-04 1.432943e-04 #> AT5G13610 0.294071286 -2.581264e-03 -4.661233e-04 #> AT5G13640 -0.697012228 1.488565e-04 5.502909e-04 #> AT5G14040 -0.088952920 -8.372055e-05 5.076538e-04 #> AT5G14220 0.031971297 -3.526905e-04 -6.462661e-05 #> AT5G14430 -0.197741252 3.040501e-03 2.330959e-05 #> AT5G14950 -0.403475251 -4.648916e-04 -4.433444e-04 #> AT5G15090 -0.191287146 7.704847e-04 7.713872e-04 #> AT5G15910 -0.641803725 1.931946e-03 1.029211e-04 #> AT5G16910 -0.119060936 5.954751e-03 1.013039e-03 #> AT5G16930 -0.290814587 -1.321221e-03 1.074466e-03 #> AT5G17760 -0.264783738 -5.917655e-03 2.172967e-03 #> AT5G17770 -0.781744740 -1.758598e-03 -1.353813e-03 #> AT5G17920 -0.041186921 1.349235e-04 -1.170353e-04 #> AT5G17980 -0.375284845 -1.781039e-03 -1.649345e-03 #> AT5G18280 -0.265213119 -5.852821e-03 -2.384820e-04 #> AT5G18485 -0.081865144 1.277271e-03 6.504013e-04 #> AT5G18800 -0.375623374 -1.008861e-04 2.511397e-03 #> AT5G18900 -0.373203585 1.911886e-03 2.368657e-03 #> AT5G19130 -0.814081937 -1.444932e-03 6.543310e-05 #> AT5G19320 -0.941475712 1.166495e-03 1.700678e-03 #> AT5G19550 -0.162648752 9.544731e-05 3.075576e-03 #> AT5G19620 -0.199380761 1.360799e-03 9.959922e-05 #> AT5G19690 -0.879233296 -5.884511e-04 8.573467e-04 #> AT5G19760 -0.049995249 2.513995e-03 -7.427505e-04 #> AT5G20090 -0.442976973 3.120545e-03 -1.532070e-03 #> AT5G20290 -1.004396691 -9.539868e-04 7.011023e-04 #> AT5G20350 0.062112068 1.295126e-04 -2.062883e-04 #> AT5G20520 -0.553438646 5.913664e-05 2.370162e-05 #> AT5G20655 -0.764041287 -2.879833e-03 -5.671121e-04 #> AT5G22640 0.037513539 2.027848e-04 2.273931e-03 #> AT5G22790 -0.169602955 3.136895e-03 1.185943e-04 #> AT5G23300 -0.078104989 2.121662e-04 1.414727e-03 #> AT5G23575 -0.556318444 2.042319e-03 2.503331e-03 #> AT5G23630 -0.757005477 -1.286863e-03 5.402045e-04 #> AT5G23850 -0.141156542 -9.882538e-05 -7.241240e-05 #> AT5G23890 -0.096426424 2.267327e-04 -2.600512e-05 #> AT5G24290 -0.699946772 5.327321e-05 1.695798e-05 #> AT5G24690 -0.676894307 -1.468159e-03 2.228752e-04 #> AT5G24810 -0.787760826 1.222770e-03 1.838659e-04 #> AT5G25100 0.063615872 -1.122291e-03 -1.130927e-03 #> AT5G25900 -0.816125431 -2.061035e-03 -6.413403e-04 #> AT5G26030 -0.214272292 2.907042e-03 1.623765e-03 #> AT5G26260 -0.237833216 -9.430105e-04 -8.887291e-04 #> AT5G26280 -0.730505694 2.559429e-04 1.897681e-04 #> AT5G27330 -0.629381017 -1.078449e-03 8.141186e-04 #> AT5G27540 -0.127096380 1.395872e-03 3.346222e-04 #> AT5G27850 -1.193593226 -2.713342e-04 2.767207e-03 #> AT5G28060 -0.363082794 -1.262654e-04 7.692730e-05 #> AT5G33320 0.177030761 5.504351e-04 2.235946e-05 #> AT5G35160 -0.290060382 -9.676574e-04 -5.551439e-04 #> AT5G37310 -0.456469555 7.038413e-05 1.292026e-04 #> AT5G39040 -0.567609623 -9.195859e-04 -8.875484e-04 #> AT5G39410 -0.577067115 1.453730e-04 6.630147e-05 #> AT5G39510 -0.797405795 3.951540e-04 2.044897e-04 #> AT5G40480 -0.455940465 -1.533944e-03 -1.147350e-04 #> AT5G42020 -0.773000188 -3.692714e-03 1.178207e-03 #> AT5G42080 -0.508907324 -8.085768e-04 9.505786e-04 #> AT5G42570 -0.561896800 2.393428e-03 2.446004e-03 #> AT5G42960 -0.444578658 -1.143168e-03 2.521189e-03 #> AT5G42980 0.081331229 1.620787e-03 2.309632e-03 #> AT5G43100 -0.166006956 -1.755420e-03 -2.221636e-03 #> AT5G43460 -0.117773290 1.882141e-03 2.413087e-03 #> AT5G43970 -0.229351926 -6.226409e-04 -5.136828e-05 #> AT5G44240 -0.266861349 3.193068e-03 -7.815323e-04 #> AT5G44790 0.044562137 -8.885283e-04 -1.585895e-03 #> AT5G44920 -0.653229698 3.261598e-03 -1.633720e-03 #> AT5G45130 -0.567449263 5.992772e-03 -2.275621e-03 #> AT5G45160 -0.624424255 -1.342099e-03 9.329767e-05 #> AT5G45420 -0.938667338 1.389600e-04 5.076475e-03 #> AT5G45470 -0.682892805 4.332032e-05 -1.270623e-03 #> AT5G45480 -0.287523886 3.050262e-03 -1.150794e-03 #> AT5G45750 -0.402001007 -1.810269e-04 -1.108637e-04 #> AT5G46800 0.127412088 2.480219e-04 7.414038e-04 #> AT5G47420 -0.852641885 2.748601e-04 1.516827e-04 #> AT5G47910 -0.345685215 -7.549829e-04 1.482810e-03 #> AT5G47990 -0.545262258 1.590562e-04 -3.795081e-05 #> AT5G48000 -0.748544983 7.785405e-05 4.091100e-05 #> AT5G48030 -0.832579009 -1.247863e-05 -2.536804e-05 #> AT5G48810 -0.681272424 -4.880213e-04 1.633917e-03 #> AT5G49760 -0.434962707 2.998671e-03 1.252788e-03 #> AT5G49945 -0.657179653 2.185808e-03 1.785544e-03 #> AT5G50000 -0.415890804 -3.068084e-03 -2.234805e-04 #> AT5G50370 -0.234706096 3.689783e-04 -1.119259e-04 #> AT5G51570 -0.406289304 2.698800e-03 -3.641653e-04 #> AT5G52240 -0.985891052 -2.771128e-03 7.514193e-05 #> AT5G52420 -1.049178062 1.440256e-05 1.628824e-04 #> AT5G53170 -0.132833151 3.811954e-04 -1.473872e-03 #> AT5G53560 -1.037784990 -5.273606e-04 9.768687e-04 #> AT5G54100 -0.201458993 1.341410e-04 -3.779113e-06 #> AT5G55070 -0.053019997 -1.333284e-03 -2.571196e-03 #> AT5G55480 -0.376788340 -4.882082e-04 -5.687371e-04 #> AT5G55610 -0.241438420 -3.695013e-03 -1.661897e-03 #> AT5G55730 -0.821619033 3.722067e-05 1.657196e-03 #> AT5G55940 -1.336293203 1.016540e-04 1.847770e-03 #> AT5G56730 -0.156788455 2.097776e-03 1.213231e-03 #> AT5G57110 -0.562721137 5.478526e-05 -1.223649e-03 #> AT5G57490 -0.603960005 -5.968817e-03 -9.976475e-05 #> AT5G57655 -0.812543642 -2.727827e-03 1.601264e-04 #> AT5G57800 -0.440691806 2.025311e-04 -8.473554e-04 #> AT5G58070 -0.468015691 8.848792e-05 -1.609874e-03 #> AT5G58090 -0.594138056 -3.950518e-03 -1.054939e-03 #> AT5G58100 -0.312595745 -1.855341e-03 -5.819148e-04 #> AT5G58270 -0.092729294 7.937878e-04 -9.523172e-04 #> AT5G58640 -0.606324506 2.461624e-03 4.847859e-03 #> AT5G60640 -1.001152065 1.255766e-03 -8.951159e-04 #> AT5G61240 0.168956176 7.848794e-05 -2.962236e-04 #> AT5G61790 -0.564815752 -6.014047e-04 -2.413465e-04 #> AT5G61840 0.021282602 2.661599e-04 -2.149272e-03 #> AT5G62390 -0.599968141 -3.929981e-03 -1.247302e-03 #> AT5G62670 -0.148859122 -2.501674e-04 -1.891249e-04 #> AT5G62740 -0.808680509 -2.472738e-05 8.383480e-04 #> AT5G63030 0.001809582 2.461819e-04 -1.681715e-04 #> AT5G63400 -0.010441420 2.695841e-03 -1.577472e-04 #> AT5G63840 -0.516341286 -2.406309e-03 2.377169e-03 #> AT5G64030 0.038094707 -7.550599e-04 1.836270e-03 #> AT5G64100 -0.189055713 2.060936e-03 -8.590368e-05 #> AT5G64290 -0.033046869 3.579646e-04 9.948149e-05 #> AT5G64440 -0.945718255 1.018533e-03 2.010404e-04 #> AT5G64970 -0.191233966 2.161002e-03 7.676111e-05 #> AT5G65250 -0.330782557 1.265880e-04 -2.248935e-03 #> AT5G65270 -0.052960701 -2.848729e-03 -2.661229e-03 #> AT5G66680 -0.919838308 4.460947e-04 5.323991e-04 #> AT5G67500 -0.216066132 -6.212557e-04 -8.301994e-05 #> COB 0.094299350 -1.434789e-04 2.236276e-03 #> COX2 -0.371347486 -1.244907e-04 -2.457154e-03 #> NAD5 -0.258469390 6.587212e-05 -2.453235e-03 #> ORF25 -0.345160716 -1.639239e-03 1.278030e-03 #> ORFB 0.331575501 -2.972403e-03 1.995071e-03 #> RPS7-01 -0.275221103 1.314683e-03 -6.481212e-04 #> #> $pca.col #> [1] \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#FF7F00\" \"#9ACD32\" #> [7] \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#FF7F00\" \"#E0E0E030\" #> [13] \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#377EB8\" \"#E0E0E030\" #> [19] \"#E0E0E030\" \"#309C17\" \"#E41A1C\" \"#F781BF\" \"#E0E0E030\" \"#E0E0E030\" #> [25] \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" #> [31] \"#E0E0E030\" \"#E0E0E030\" \"#9ACD32\" \"#FFD700\" \"#F781BF\" \"#E0E0E030\" #> [37] \"#A65628\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" #> [43] \"#00CED1\" \"#9ACD32\" \"#E0E0E030\" \"#E0E0E030\" \"#FFD700\" \"#E0E0E030\" #> [49] \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#309C17\" #> [55] \"#E0E0E030\" \"#309C17\" \"#E41A1C\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" #> [61] \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#FF7F00\" \"#E0E0E030\" \"#E0E0E030\" #> [67] \"#FFD700\" \"#377EB8\" \"#F781BF\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" #> [73] \"#FFD700\" \"#E0E0E030\" \"#E0E0E030\" \"#9ACD32\" \"#F781BF\" \"#E0E0E030\" #> [79] \"#E0E0E030\" \"#377EB8\" \"#377EB8\" \"#E0E0E030\" \"#E0E0E030\" \"#A65628\" #> [85] \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#FF7F00\" \"#FF7F00\" \"#309C17\" #> [91] \"#FF7F00\" \"#E0E0E030\" \"#E0E0E030\" \"#309C17\" \"#E0E0E030\" \"#E41A1C\" #> [97] \"#FF7F00\" \"#E0E0E030\" \"#E0E0E030\" \"#F781BF\" \"#FF7F00\" \"#9ACD32\" #> [103] \"#E0E0E030\" \"#F781BF\" \"#E0E0E030\" \"#377EB8\" \"#E0E0E030\" \"#E0E0E030\" #> [109] \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#E41A1C\" \"#E0E0E030\" \"#E0E0E030\" #> [115] \"#E0E0E030\" \"#377EB8\" \"#9ACD32\" \"#377EB8\" \"#E0E0E030\" \"#E0E0E030\" #> [121] \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#FF7F00\" \"#E0E0E030\" \"#E0E0E030\" #> [127] \"#E0E0E030\" \"#377EB8\" \"#377EB8\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" #> [133] \"#E41A1C\" \"#E0E0E030\" \"#E0E0E030\" \"#A65628\" \"#309C17\" \"#E0E0E030\" #> [139] \"#309C17\" \"#FFD700\" \"#377EB8\" \"#E0E0E030\" \"#E0E0E030\" \"#377EB8\" #> [145] \"#E0E0E030\" \"#E41A1C\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#9ACD32\" #> [151] \"#309C17\" \"#00CED1\" \"#E0E0E030\" \"#00CED1\" \"#E0E0E030\" \"#E0E0E030\" #> [157] \"#E0E0E030\" \"#377EB8\" \"#FFD700\" \"#377EB8\" \"#E0E0E030\" \"#E0E0E030\" #> [163] \"#377EB8\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#FFD700\" \"#E0E0E030\" #> [169] \"#A65628\" \"#F781BF\" \"#F781BF\" \"#E0E0E030\" \"#FF7F00\" \"#377EB8\" #> [175] \"#00CED1\" \"#E0E0E030\" \"#E0E0E030\" \"#FFD700\" \"#E0E0E030\" \"#E0E0E030\" #> [181] \"#FF7F00\" \"#E0E0E030\" \"#FFD700\" \"#FF7F00\" \"#E0E0E030\" \"#E0E0E030\" #> [187] \"#309C17\" \"#A65628\" \"#FF7F00\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" #> [193] \"#377EB8\" \"#9ACD32\" \"#E0E0E030\" \"#FF7F00\" \"#309C17\" \"#E0E0E030\" #> [199] \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#FF7F00\" \"#E0E0E030\" \"#E0E0E030\" #> [205] \"#E0E0E030\" \"#FF7F00\" \"#E0E0E030\" \"#FF7F00\" \"#E0E0E030\" \"#FF7F00\" #> [211] \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" #> [217] \"#377EB8\" \"#E41A1C\" \"#FF7F00\" \"#FF7F00\" \"#E0E0E030\" \"#F781BF\" #> [223] \"#9ACD32\" \"#E0E0E030\" \"#E0E0E030\" \"#A65628\" \"#E0E0E030\" \"#FFD700\" #> [229] \"#E0E0E030\" \"#E0E0E030\" \"#FFD700\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" #> [235] \"#E0E0E030\" \"#309C17\" \"#377EB8\" \"#E0E0E030\" \"#E0E0E030\" \"#377EB8\" #> [241] \"#E0E0E030\" \"#E0E0E030\" \"#9ACD32\" \"#FF7F00\" \"#E0E0E030\" \"#FFD700\" #> [247] \"#E0E0E030\" \"#E0E0E030\" \"#FF7F00\" \"#377EB8\" \"#FFD700\" \"#E0E0E030\" #> [253] \"#FFD700\" \"#377EB8\" \"#E0E0E030\" \"#E41A1C\" \"#309C17\" \"#9ACD32\" #> [259] \"#00CED1\" \"#FF7F00\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" #> [265] \"#309C17\" \"#E0E0E030\" \"#E0E0E030\" \"#309C17\" \"#E0E0E030\" \"#E0E0E030\" #> [271] \"#E0E0E030\" \"#A65628\" \"#377EB8\" \"#F781BF\" \"#E0E0E030\" \"#00CED1\" #> [277] \"#E0E0E030\" \"#A65628\" \"#E0E0E030\" \"#FFD700\" \"#377EB8\" \"#309C17\" #> [283] \"#FFD700\" \"#E0E0E030\" \"#FF7F00\" \"#00CED1\" \"#00CED1\" \"#FF7F00\" #> [289] \"#A65628\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" #> [295] \"#E0E0E030\" \"#9ACD32\" \"#E0E0E030\" \"#FFD700\" \"#E0E0E030\" \"#E0E0E030\" #> [301] \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#E41A1C\" \"#E0E0E030\" #> [307] \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" #> [313] \"#E0E0E030\" \"#E0E0E030\" \"#FF7F00\" \"#E0E0E030\" \"#309C17\" \"#E0E0E030\" #> [319] \"#9ACD32\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" #> [325] \"#E0E0E030\" \"#00CED1\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" #> [331] \"#309C17\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" #> [337] \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" #> [343] \"#E0E0E030\" \"#9ACD32\" \"#E0E0E030\" \"#E0E0E030\" \"#9ACD32\" \"#E0E0E030\" #> [349] \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#00CED1\" \"#E0E0E030\" \"#FFD700\" #> [355] \"#E0E0E030\" \"#FFD700\" \"#309C17\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" #> [361] \"#E0E0E030\" \"#E0E0E030\" \"#A65628\" \"#FF7F00\" \"#E0E0E030\" \"#E0E0E030\" #> [367] \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" #> [373] \"#377EB8\" \"#FF7F00\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#309C17\" #> [379] \"#FF7F00\" \"#E0E0E030\" \"#E41A1C\" \"#377EB8\" \"#309C17\" \"#E0E0E030\" #> [385] \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#377EB8\" \"#377EB8\" #> [391] \"#E0E0E030\" \"#9ACD32\" \"#E0E0E030\" \"#FF7F00\" \"#E0E0E030\" \"#FF7F00\" #> [397] \"#E0E0E030\" \"#E0E0E030\" \"#FFD700\" \"#E0E0E030\" \"#309C17\" \"#E0E0E030\" #> [403] \"#E0E0E030\" \"#9ACD32\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" #> [409] \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#FF7F00\" \"#377EB8\" #> [415] \"#00CED1\" \"#FF7F00\" \"#FFD700\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" #> [421] \"#E0E0E030\" \"#377EB8\" \"#00CED1\" \"#9ACD32\" \"#E0E0E030\" \"#FFD700\" #> [427] \"#FFD700\" \"#E0E0E030\" \"#F781BF\" \"#FFD700\" \"#E0E0E030\" \"#E0E0E030\" #> [433] \"#E0E0E030\" \"#E0E0E030\" \"#A65628\" \"#309C17\" \"#E0E0E030\" \"#E0E0E030\" #> [439] \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" #> [445] \"#E0E0E030\" \"#E0E0E030\" \"#A65628\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" #> [451] \"#E0E0E030\" \"#377EB8\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" #> [457] \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#E41A1C\" \"#E0E0E030\" \"#FFD700\" #> [463] \"#FFD700\" \"#E0E0E030\" \"#FF7F00\" \"#FFD700\" \"#E0E0E030\" \"#E0E0E030\" #> [469] \"#FFD700\" \"#FF7F00\" \"#FF7F00\" \"#E0E0E030\" \"#FF7F00\" \"#E0E0E030\" #> [475] \"#E0E0E030\" \"#FF7F00\" \"#E0E0E030\" \"#FFD700\" \"#E0E0E030\" \"#E0E0E030\" #> [481] \"#FFD700\" \"#E0E0E030\" \"#F781BF\" \"#E0E0E030\" \"#E0E0E030\" \"#FFD700\" #> [487] \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#A65628\" \"#377EB8\" \"#E0E0E030\" #> [493] \"#00CED1\" \"#E0E0E030\" \"#FF7F00\" \"#00CED1\" \"#E0E0E030\" \"#E0E0E030\" #> [499] \"#377EB8\" \"#E0E0E030\" \"#E0E0E030\" \"#FFD700\" \"#E0E0E030\" \"#E0E0E030\" #> [505] \"#377EB8\" \"#E0E0E030\" \"#377EB8\" \"#FFD700\" \"#E0E0E030\" \"#E0E0E030\" #> [511] \"#E0E0E030\" \"#377EB8\" \"#377EB8\" \"#309C17\" \"#E0E0E030\" \"#E41A1C\" #> [517] \"#309C17\" \"#309C17\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#9ACD32\" #> [523] \"#FFD700\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" #> [529] \"#E0E0E030\" \"#A65628\" \"#A65628\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" #> [535] \"#E0E0E030\" \"#FFD700\" \"#FFD700\" \"#E0E0E030\" \"#00CED1\" \"#E0E0E030\" #> [541] \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#377EB8\" \"#FFD700\" \"#FF7F00\" #> [547] \"#E0E0E030\" \"#E0E0E030\" \"#9ACD32\" \"#FF7F00\" \"#E0E0E030\" \"#A65628\" #> [553] \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" #> [559] \"#E0E0E030\" \"#FF7F00\" \"#FF7F00\" \"#E0E0E030\" \"#FF7F00\" \"#00CED1\" #> [565] \"#E0E0E030\" \"#E0E0E030\" \"#FF7F00\" \"#FF7F00\" \"#309C17\" \"#FF7F00\" #> [571] \"#FFD700\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#309C17\" #> [577] \"#FF7F00\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" #> [583] \"#377EB8\" \"#FF7F00\" \"#E0E0E030\" \"#A65628\" \"#E0E0E030\" \"#E0E0E030\" #> [589] \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" #> [595] \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" #> [601] \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" #> [607] \"#A65628\" \"#A65628\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#9ACD32\" #> [613] \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" #> [619] \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" #> [625] \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#377EB8\" \"#E0E0E030\" \"#FFD700\" #> [631] \"#FFD700\" \"#E0E0E030\" \"#FF7F00\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" #> [637] \"#E0E0E030\" \"#E0E0E030\" \"#377EB8\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" #> [643] \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#00CED1\" \"#377EB8\" #> [649] \"#FF7F00\" \"#E0E0E030\" \"#FFD700\" \"#E0E0E030\" \"#FFD700\" \"#377EB8\" #> [655] \"#E0E0E030\" \"#FFD700\" \"#FF7F00\" \"#E41A1C\" \"#FFD700\" \"#E0E0E030\" #> [661] \"#FFD700\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#E41A1C\" \"#E0E0E030\" #> [667] \"#377EB8\" \"#309C17\" \"#377EB8\" \"#FFD700\" \"#E0E0E030\" \"#E0E0E030\" #> [673] \"#E0E0E030\" \"#E0E0E030\" \"#F781BF\" \"#E0E0E030\" \"#00CED1\" \"#E0E0E030\" #> [679] \"#E0E0E030\" \"#00CED1\" \"#E0E0E030\" \"#377EB8\" \"#FF7F00\" \"#E0E0E030\" #> [685] \"#E0E0E030\" \"#FF7F00\" \"#E0E0E030\" \"#FF7F00\" \"#00CED1\" #> #> $pred.col #> [1] \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#FF7F00\" \"#9ACD32\" #> [7] \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#FF7F00\" \"#E0E0E030\" #> [13] \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#377EB8\" \"#E0E0E030\" #> [19] \"#E0E0E030\" \"#309C17\" \"#E41A1C\" \"#F781BF\" \"#E0E0E030\" \"#E0E0E030\" #> [25] \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" #> [31] \"#E0E0E030\" \"#E0E0E030\" \"#9ACD32\" \"#FFD700\" \"#F781BF\" \"#E0E0E030\" #> [37] \"#A65628\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" #> [43] \"#00CED1\" \"#9ACD32\" \"#E0E0E030\" \"#E0E0E030\" \"#FFD700\" \"#E0E0E030\" #> [49] \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#309C17\" #> [55] \"#E0E0E030\" \"#309C17\" \"#E41A1C\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" #> [61] \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#FF7F00\" \"#E0E0E030\" \"#E0E0E030\" #> [67] \"#FFD700\" \"#377EB8\" \"#F781BF\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" #> [73] \"#FFD700\" \"#E0E0E030\" \"#E0E0E030\" \"#9ACD32\" \"#F781BF\" \"#E0E0E030\" #> [79] \"#E0E0E030\" \"#377EB8\" \"#377EB8\" \"#E0E0E030\" \"#E0E0E030\" \"#A65628\" #> [85] \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#FF7F00\" \"#FF7F00\" \"#309C17\" #> [91] \"#FF7F00\" \"#E0E0E030\" \"#E0E0E030\" \"#309C17\" \"#E0E0E030\" \"#E41A1C\" #> [97] \"#FF7F00\" \"#E0E0E030\" \"#E0E0E030\" \"#F781BF\" \"#FF7F00\" \"#9ACD32\" #> [103] \"#E0E0E030\" \"#F781BF\" \"#E0E0E030\" \"#377EB8\" \"#E0E0E030\" \"#E0E0E030\" #> [109] \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#E41A1C\" \"#E0E0E030\" \"#E0E0E030\" #> [115] \"#E0E0E030\" \"#377EB8\" \"#9ACD32\" \"#377EB8\" \"#E0E0E030\" \"#E0E0E030\" #> [121] \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#FF7F00\" \"#E0E0E030\" \"#E0E0E030\" #> [127] \"#E0E0E030\" \"#377EB8\" \"#377EB8\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" #> [133] \"#E41A1C\" \"#E0E0E030\" \"#E0E0E030\" \"#A65628\" \"#309C17\" \"#E0E0E030\" #> [139] \"#309C17\" \"#FFD700\" \"#377EB8\" \"#E0E0E030\" \"#E0E0E030\" \"#377EB8\" #> [145] \"#E0E0E030\" \"#E41A1C\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#9ACD32\" #> [151] \"#309C17\" \"#00CED1\" \"#E0E0E030\" \"#00CED1\" \"#E0E0E030\" \"#E0E0E030\" #> [157] \"#E0E0E030\" \"#377EB8\" \"#FFD700\" \"#377EB8\" \"#E0E0E030\" \"#E0E0E030\" #> [163] \"#377EB8\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#FFD700\" \"#E0E0E030\" #> [169] \"#A65628\" \"#F781BF\" \"#F781BF\" \"#E0E0E030\" \"#FF7F00\" \"#377EB8\" #> [175] \"#00CED1\" \"#E0E0E030\" \"#E0E0E030\" \"#FFD700\" \"#E0E0E030\" \"#E0E0E030\" #> [181] \"#FF7F00\" \"#E0E0E030\" \"#FFD700\" \"#FF7F00\" \"#E0E0E030\" \"#E0E0E030\" #> [187] \"#309C17\" \"#A65628\" \"#FF7F00\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" #> [193] \"#377EB8\" \"#9ACD32\" \"#E0E0E030\" \"#FF7F00\" \"#309C17\" \"#E0E0E030\" #> [199] \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#FF7F00\" \"#E0E0E030\" \"#E0E0E030\" #> [205] \"#E0E0E030\" \"#FF7F00\" \"#E0E0E030\" \"#FF7F00\" \"#E0E0E030\" \"#FF7F00\" #> [211] \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" #> [217] \"#377EB8\" \"#E41A1C\" \"#FF7F00\" \"#FF7F00\" \"#E0E0E030\" \"#F781BF\" #> [223] \"#9ACD32\" \"#E0E0E030\" \"#E0E0E030\" \"#A65628\" \"#E0E0E030\" \"#FFD700\" #> [229] \"#E0E0E030\" \"#E0E0E030\" \"#FFD700\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" #> [235] \"#E0E0E030\" \"#309C17\" \"#377EB8\" \"#E0E0E030\" \"#E0E0E030\" \"#377EB8\" #> [241] \"#E0E0E030\" \"#E0E0E030\" \"#9ACD32\" \"#FF7F00\" \"#E0E0E030\" \"#FFD700\" #> [247] \"#E0E0E030\" \"#E0E0E030\" \"#FF7F00\" \"#377EB8\" \"#FFD700\" \"#E0E0E030\" #> [253] \"#FFD700\" \"#377EB8\" \"#E0E0E030\" \"#E41A1C\" \"#309C17\" \"#9ACD32\" #> [259] \"#00CED1\" \"#FF7F00\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" #> [265] \"#309C17\" \"#E0E0E030\" \"#E0E0E030\" \"#309C17\" \"#E0E0E030\" \"#E0E0E030\" #> [271] \"#E0E0E030\" \"#A65628\" \"#377EB8\" \"#F781BF\" \"#E0E0E030\" \"#00CED1\" #> [277] \"#E0E0E030\" \"#A65628\" \"#E0E0E030\" \"#FFD700\" \"#377EB8\" \"#309C17\" #> [283] \"#FFD700\" \"#E0E0E030\" \"#FF7F00\" \"#00CED1\" \"#00CED1\" \"#FF7F00\" #> [289] \"#A65628\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" #> [295] \"#E0E0E030\" \"#9ACD32\" \"#E0E0E030\" \"#FFD700\" \"#E0E0E030\" \"#E0E0E030\" #> [301] \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#E41A1C\" \"#E0E0E030\" #> [307] \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" #> [313] \"#E0E0E030\" \"#E0E0E030\" \"#FF7F00\" \"#E0E0E030\" \"#309C17\" \"#E0E0E030\" #> [319] \"#9ACD32\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" #> [325] \"#E0E0E030\" \"#00CED1\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" #> [331] \"#309C17\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" #> [337] \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" #> [343] \"#E0E0E030\" \"#9ACD32\" \"#E0E0E030\" \"#E0E0E030\" \"#9ACD32\" \"#E0E0E030\" #> [349] \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#00CED1\" \"#E0E0E030\" \"#FFD700\" #> [355] \"#E0E0E030\" \"#FFD700\" \"#309C17\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" #> [361] \"#E0E0E030\" \"#E0E0E030\" \"#A65628\" \"#FF7F00\" \"#E0E0E030\" \"#E0E0E030\" #> [367] \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" #> [373] \"#377EB8\" \"#FF7F00\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#309C17\" #> [379] \"#FF7F00\" \"#E0E0E030\" \"#E41A1C\" \"#377EB8\" \"#309C17\" \"#E0E0E030\" #> [385] \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#377EB8\" \"#377EB8\" #> [391] \"#E0E0E030\" \"#9ACD32\" \"#E0E0E030\" \"#FF7F00\" \"#E0E0E030\" \"#FF7F00\" #> [397] \"#E0E0E030\" \"#E0E0E030\" \"#FFD700\" \"#E0E0E030\" \"#309C17\" \"#E0E0E030\" #> [403] \"#E0E0E030\" \"#9ACD32\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" #> [409] \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#FF7F00\" \"#377EB8\" #> [415] \"#00CED1\" \"#FF7F00\" \"#FFD700\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" #> [421] \"#E0E0E030\" \"#377EB8\" \"#00CED1\" \"#9ACD32\" \"#E0E0E030\" \"#FFD700\" #> [427] \"#FFD700\" \"#E0E0E030\" \"#F781BF\" \"#FFD700\" \"#E0E0E030\" \"#E0E0E030\" #> [433] \"#E0E0E030\" \"#E0E0E030\" \"#A65628\" \"#309C17\" \"#E0E0E030\" \"#E0E0E030\" #> [439] \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" #> [445] \"#E0E0E030\" \"#E0E0E030\" \"#A65628\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" #> [451] \"#E0E0E030\" \"#377EB8\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" #> [457] \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#E41A1C\" \"#E0E0E030\" \"#FFD700\" #> [463] \"#FFD700\" \"#E0E0E030\" \"#FF7F00\" \"#FFD700\" \"#E0E0E030\" \"#E0E0E030\" #> [469] \"#FFD700\" \"#FF7F00\" \"#FF7F00\" \"#E0E0E030\" \"#FF7F00\" \"#E0E0E030\" #> [475] \"#E0E0E030\" \"#FF7F00\" \"#E0E0E030\" \"#FFD700\" \"#E0E0E030\" \"#E0E0E030\" #> [481] \"#FFD700\" \"#E0E0E030\" \"#F781BF\" \"#E0E0E030\" \"#E0E0E030\" \"#FFD700\" #> [487] \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#A65628\" \"#377EB8\" \"#E0E0E030\" #> [493] \"#00CED1\" \"#E0E0E030\" \"#FF7F00\" \"#00CED1\" \"#E0E0E030\" \"#E0E0E030\" #> [499] \"#377EB8\" \"#E0E0E030\" \"#E0E0E030\" \"#FFD700\" \"#E0E0E030\" \"#E0E0E030\" #> [505] \"#377EB8\" \"#E0E0E030\" \"#377EB8\" \"#FFD700\" \"#E0E0E030\" \"#E0E0E030\" #> [511] \"#E0E0E030\" \"#377EB8\" \"#377EB8\" \"#309C17\" \"#E0E0E030\" \"#E41A1C\" #> [517] \"#309C17\" \"#309C17\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#9ACD32\" #> [523] \"#FFD700\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" #> [529] \"#E0E0E030\" \"#A65628\" \"#A65628\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" #> [535] \"#E0E0E030\" \"#FFD700\" \"#FFD700\" \"#E0E0E030\" \"#00CED1\" \"#E0E0E030\" #> [541] \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#377EB8\" \"#FFD700\" \"#FF7F00\" #> [547] \"#E0E0E030\" \"#E0E0E030\" \"#9ACD32\" \"#FF7F00\" \"#E0E0E030\" \"#A65628\" #> [553] \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" #> [559] \"#E0E0E030\" \"#FF7F00\" \"#FF7F00\" \"#E0E0E030\" \"#FF7F00\" \"#00CED1\" #> [565] \"#E0E0E030\" \"#E0E0E030\" \"#FF7F00\" \"#FF7F00\" \"#309C17\" \"#FF7F00\" #> [571] \"#FFD700\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#309C17\" #> [577] \"#FF7F00\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" #> [583] \"#377EB8\" \"#FF7F00\" \"#E0E0E030\" \"#A65628\" \"#E0E0E030\" \"#E0E0E030\" #> [589] \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" #> [595] \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" #> [601] \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" #> [607] \"#A65628\" \"#A65628\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#9ACD32\" #> [613] \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" #> [619] \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" #> [625] \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#377EB8\" \"#E0E0E030\" \"#FFD700\" #> [631] \"#FFD700\" \"#E0E0E030\" \"#FF7F00\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" #> [637] \"#E0E0E030\" \"#E0E0E030\" \"#377EB8\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" #> [643] \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#00CED1\" \"#377EB8\" #> [649] \"#FF7F00\" \"#E0E0E030\" \"#FFD700\" \"#E0E0E030\" \"#FFD700\" \"#377EB8\" #> [655] \"#E0E0E030\" \"#FFD700\" \"#FF7F00\" \"#E41A1C\" \"#FFD700\" \"#E0E0E030\" #> [661] \"#FFD700\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#E41A1C\" \"#E0E0E030\" #> [667] \"#377EB8\" \"#309C17\" \"#377EB8\" \"#FFD700\" \"#E0E0E030\" \"#E0E0E030\" #> [673] \"#E0E0E030\" \"#E0E0E030\" \"#F781BF\" \"#E0E0E030\" \"#00CED1\" \"#E0E0E030\" #> [679] \"#E0E0E030\" \"#00CED1\" \"#E0E0E030\" \"#377EB8\" \"#FF7F00\" \"#E0E0E030\" #> [685] \"#E0E0E030\" \"#FF7F00\" \"#E0E0E030\" \"#FF7F00\" \"#00CED1\" #> #> attr(,\"class\") #> [1] \"plot2Ds\" \"list\" head(data1(res)) #> PC1 PC2 #> AT1G01610 -0.3535953 1.1842015 #> AT1G02120 -2.9535572 0.7418581 #> AT1G02520 -0.1197655 0.3958698 #> AT1G03220 0.2601386 0.7441646 #> AT1G03860 2.8893018 -0.4735220 #> AT1G04120 -4.1688044 -3.5954428 head(col1(res)) #> [1] \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#E0E0E030\" \"#FF7F00\" \"#9ACD32\""},{"path":"https://lgatto.github.io/pRoloc/reference/plotConsProfiles.html","id":null,"dir":"Reference","previous_headings":"","what":"Plot marker consenses profiles. — plotConsProfiles","title":"Plot marker consenses profiles. — plotConsProfiles","text":"function plots marker consensus profiles obtained mrkConsProfile","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/plotConsProfiles.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plot marker consenses profiles. — plotConsProfiles","text":"","code":"plotConsProfiles(object, order = NULL, plot = TRUE)"},{"path":"https://lgatto.github.io/pRoloc/reference/plotConsProfiles.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plot marker consenses profiles. — plotConsProfiles","text":"object matrix containing marker consensus profiles output mrkConsProfiles(). order Order markers (optional). plot logical(1) defining whether heatmap plotted. Default TRUE.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/plotConsProfiles.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Plot marker consenses profiles. — plotConsProfiles","text":"Invisibly returns ggplot2 object.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/plotConsProfiles.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Plot marker consenses profiles. — plotConsProfiles","text":"Tom Smith","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/plotConsProfiles.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Plot marker consenses profiles. — plotConsProfiles","text":"","code":"library(\"pRolocdata\") data(E14TG2aS1) hc <- mrkHClust(E14TG2aS1, plot = FALSE) mm <- getMarkerClasses(E14TG2aS1) ord <- levels(factor(mm))[order.dendrogram(hc)] fmat <- mrkConsProfiles(E14TG2aS1) plotConsProfiles(fmat, order = ord)"},{"path":"https://lgatto.github.io/pRoloc/reference/plotDist.html","id":null,"dir":"Reference","previous_headings":"","what":"Plots the distribution of features across fractions — plotDist","title":"Plots the distribution of features across fractions — plotDist","text":"Produces line plot showing feature abundances across fractions.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/plotDist.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plots the distribution of features across fractions — plotDist","text":"","code":"plotDist( object, markers, fcol = NULL, mcol = \"steelblue\", pcol = getUnknowncol(), alpha = 0.3, type = \"b\", lty = 1, fractions = sampleNames(object), ylab = \"Intensity\", xlab = \"Fractions\", ylim, ... )"},{"path":"https://lgatto.github.io/pRoloc/reference/plotDist.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plots the distribution of features across fractions — plotDist","text":"object instance class MSnSet. markers character, numeric logical appropriate length content used subset object define organelle markers. fcol Feature meta-data label (fData column name) defining groups differentiated using different colours. NULL (default) ignored mcol pcol used. mcol character define colour marker features. Default \"steelblue\". pcol character define colour non-markers features. Default colour used features unknown localisation, returned getUnknowncol. alpha numeric defining alpha channel (transparency) points, 0 <= alpha <= 1, 0 1 completely transparent opaque. type Character string defining type lines. example \"p\" points, \"l\" lines, \"b\" . See plot possible types. lty Vector line types marker profiles. Default 1 (solid). See par details. fractions character defining phenoData variable used label fraction along x axis. Default use sampleNames(object). ylab y-axis label. Default \"Intensity\". xlab x-axis label. Default \"Fractions\". ylim numeric vector length 2, giving y coordinates range. ... Additional parameters passed plot.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/plotDist.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Plots the distribution of features across fractions — plotDist","text":"Used side effect producing feature distribution plot. Invisibly returns data matrix.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/plotDist.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Plots the distribution of features across fractions — plotDist","text":"Laurent Gatto","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/plotDist.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Plots the distribution of features across fractions — plotDist","text":"","code":"library(\"pRolocdata\") data(tan2009r1) j <- which(fData(tan2009r1)$markers == \"mitochondrion\") i <- which(fData(tan2009r1)$PLSDA == \"mitochondrion\") plotDist(tan2009r1[i, ], markers = featureNames(tan2009r1)[j]) plotDist(tan2009r1[i, ], markers = featureNames(tan2009r1)[j], fractions = \"Fractions\") ## plot and colour all marker profiles tanmrk <- markerMSnSet(tan2009r1) plotDist(tanmrk, fcol = \"markers\")"},{"path":"https://lgatto.github.io/pRoloc/reference/plotEllipse.html","id":null,"dir":"Reference","previous_headings":"","what":"A function to plot probabiltiy ellipses on marker PCA plots to visualise and assess TAGM models. — plotEllipse","title":"A function to plot probabiltiy ellipses on marker PCA plots to visualise and assess TAGM models. — plotEllipse","text":"Note running PCA, function scale data (centring performed), opposed [plot2D()]. marker proteins displayed; protein unknown location, used estimate MAP parameters, filtered .","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/plotEllipse.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"A function to plot probabiltiy ellipses on marker PCA plots to visualise and assess TAGM models. — plotEllipse","text":"","code":"plotEllipse(object, params, dims = c(1, 2), method = \"MAP\", ...)"},{"path":"https://lgatto.github.io/pRoloc/reference/plotEllipse.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"A function to plot probabiltiy ellipses on marker PCA plots to visualise and assess TAGM models. — plotEllipse","text":"object [`MSnbase::MSnset`] containing quantitative spatial proteomics data. params [`MAPParams`] TAGM-MAP parameters, generated `tagmMapTrain`. dims `numeric(2)` principal components along project data. Default `c(1, 2)`. method method used. Currently `\"MAP\"` . ... Additional parameters passed [plot2D()].","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/plotEllipse.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"A function to plot probabiltiy ellipses on marker PCA plots to visualise and assess TAGM models. — plotEllipse","text":"PCA plot marker data probability ellipises. outer ellipse contains 99 probability whilst middle inner ellipses contain 95 90 clusters represented black circumpunct (circled dot).","code":""},{"path":[]},{"path":"https://lgatto.github.io/pRoloc/reference/plsdaClassification.html","id":null,"dir":"Reference","previous_headings":"","what":"plsda classification — plsdaClassification","title":"plsda classification — plsdaClassification","text":"Classification using partial least square distcriminant analysis algorithm.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/plsdaClassification.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"plsda classification — plsdaClassification","text":"","code":"plsdaClassification( object, assessRes, scores = c(\"prediction\", \"all\", \"none\"), ncomp, fcol = \"markers\", ... )"},{"path":"https://lgatto.github.io/pRoloc/reference/plsdaClassification.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"plsda classification — plsdaClassification","text":"object instance class \"MSnSet\". assessRes instance class \"GenRegRes\", generated plsdaOptimisation. scores One \"prediction\", \"\" \"none\" report score predicted class , classes none. ncomp assessRes missing, ncomp must provided. fcol feature meta-data containing marker definitions. Default markers. ... Additional parameters passed plsda package caret.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/plsdaClassification.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"plsda classification — plsdaClassification","text":"instance class \"MSnSet\" plsda plsda.scores feature variables storing classification results scores respectively.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/plsdaClassification.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"plsda classification — plsdaClassification","text":"Laurent Gatto","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/plsdaClassification.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"plsda classification — plsdaClassification","text":"","code":"# \\donttest{ ## not running this one for time considerations library(pRolocdata) data(dunkley2006) ## reducing parameter search space and iterations params <- plsdaOptimisation(dunkley2006, ncomp = c(3, 10), times = 2) #> | | | 0% #> Error: package klaR is required params #> new(\"standardGeneric\", .Data = function (x, ...) #> standardGeneric(\"params\"), generic = \"params\", package = \"S4Vectors\", #> group = list(), valueClass = character(0), signature = \"x\", #> default = NULL, skeleton = (function (x, ...) #> stop(gettextf(\"invalid call in method dispatch to '%s' (no default method)\", #> \"params\"), domain = NA))(x, ...)) #> #> #> attr(,\"generic\") #> [1] \"params\" #> attr(,\"generic\")attr(,\"package\") #> [1] \"S4Vectors\" #> attr(,\"package\") #> [1] \"S4Vectors\" #> attr(,\"group\") #> list() #> attr(,\"valueClass\") #> character(0) #> attr(,\"signature\") #> [1] \"x\" #> attr(,\"default\") #> `\\001NULL\\001` #> attr(,\"skeleton\") #> (function (x, ...) #> stop(gettextf(\"invalid call in method dispatch to '%s' (no default method)\", #> \"params\"), domain = NA))(x, ...) #> attr(,\"class\") #> [1] \"standardGeneric\" #> attr(,\"class\")attr(,\"package\") #> [1] \"methods\" plot(params) #> Error: unable to find an inherited method for function ‘params’ for signature ‘x = \"numeric\"’ f1Count(params) #> Error: unable to find an inherited method for function ‘f1Count’ for signature ‘object = \"standardGeneric\"’ levelPlot(params) #> Error: unable to find an inherited method for function ‘levelPlot’ for signature ‘object = \"standardGeneric\"’ getParams(params) #> Error: unable to find an inherited method for function ‘getParams’ for signature ‘object = \"standardGeneric\"’ res <- plsdaClassification(dunkley2006, params) #> Error: unable to find an inherited method for function ‘getParams’ for signature ‘object = \"standardGeneric\"’ getPredictions(res, fcol = \"plsda\") #> Error in h(simpleError(msg, call)): error in evaluating the argument 'object' in selecting a method for function 'fData': object 'res' not found getPredictions(res, fcol = \"plsda\", t = 0.9) #> Error in h(simpleError(msg, call)): error in evaluating the argument 'object' in selecting a method for function 'fData': object 'res' not found plot2D(res, fcol = \"plsda\") #> Error: object 'res' not found # }"},{"path":"https://lgatto.github.io/pRoloc/reference/plsdaOptimisation.html","id":null,"dir":"Reference","previous_headings":"","what":"plsda parameter optimisation — plsdaOptimisation","title":"plsda parameter optimisation — plsdaOptimisation","text":"Classification parameter optimisation partial least square distcriminant analysis algorithm.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/plsdaOptimisation.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"plsda parameter optimisation — plsdaOptimisation","text":"","code":"plsdaOptimisation( object, fcol = \"markers\", ncomp = 2:6, times = 100, test.size = 0.2, xval = 5, fun = mean, seed, verbose = TRUE, ... )"},{"path":"https://lgatto.github.io/pRoloc/reference/plsdaOptimisation.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"plsda parameter optimisation — plsdaOptimisation","text":"object instance class \"MSnSet\". fcol feature meta-data containing marker definitions. Default markers. ncomp hyper-parameter. Default values 2:6. times number times internal cross-validation performed. Default 100. test.size size test data. Default 0.2 (20 percent). xval n-cross validation. Default 5. fun function used summarise xval macro F1 matrices. seed optional random number generator seed. verbose logical defining whether progress bar displayed. ... Additional parameters passed plsda package caret.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/plsdaOptimisation.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"plsda parameter optimisation — plsdaOptimisation","text":"instance class \"GenRegRes\".","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/plsdaOptimisation.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"plsda parameter optimisation — plsdaOptimisation","text":"Note performance scores precision, recall (macro) F1 calculated, NA values replaced 0. decision motivated fact class either NA precision recall result NA F1 score , eventually, NA macro F1 (.e. mean(F1)). Replacing NAs 0s leads F1 values 0 reduced yet defined final macro F1 score.","code":""},{"path":[]},{"path":"https://lgatto.github.io/pRoloc/reference/plsdaOptimisation.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"plsda parameter optimisation — plsdaOptimisation","text":"Laurent Gatto","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/rfClassification.html","id":null,"dir":"Reference","previous_headings":"","what":"rf classification — rfClassification","title":"rf classification — rfClassification","text":"Classification using random forest algorithm.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/rfClassification.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"rf classification — rfClassification","text":"","code":"rfClassification( object, assessRes, scores = c(\"prediction\", \"all\", \"none\"), mtry, fcol = \"markers\", ... )"},{"path":"https://lgatto.github.io/pRoloc/reference/rfClassification.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"rf classification — rfClassification","text":"object instance class \"MSnSet\". assessRes instance class \"GenRegRes\", generated rfOptimisation. scores One \"prediction\", \"\" \"none\" report score predicted class , classes none. mtry assessRes missing, mtry must provided. fcol feature meta-data containing marker definitions. Default markers. ... Additional parameters passed randomForest package randomForest.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/rfClassification.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"rf classification — rfClassification","text":"instance class \"MSnSet\" rf rf.scores feature variables storing classification results scores respectively.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/rfClassification.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"rf classification — rfClassification","text":"Laurent Gatto","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/rfClassification.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"rf classification — rfClassification","text":"","code":"library(pRolocdata) data(dunkley2006) ## reducing parameter search space and iterations params <- rfOptimisation(dunkley2006, mtry = c(2, 5, 10), times = 3) #> | | | 0% | |===== | 7% | |========= | 13% | |============== | 20% | |=================== | 27% | |======================= | 33% | |============================ | 40% | |================================= | 47% | |===================================== | 53% | |========================================== | 60% | |=============================================== | 67% | |=================================================== | 73% | |======================================================== | 80% | |============================================================= | 87% | |================================================================= | 93% | |======================================================================| 100% params #> Object of class \"GenRegRes\" #> Algorithm: randomForest #> Hyper-parameters: #> mtry: 2 5 10 #> Design: #> Replication: 3 x 5-fold X-validation #> Partitioning: 0.2/0.8 (test/train) #> Results #> macro F1: #> Min. 1st Qu. Median Mean 3rd Qu. Max. #> 0.9639 0.9690 0.9740 0.9724 0.9767 0.9793 #> best mtry: 2 5 plot(params) f1Count(params) #> #> 2 #> 1 levelPlot(params) getParams(params) #> mtry #> 2 res <- rfClassification(dunkley2006, params) #> [1] \"markers\" getPredictions(res, fcol = \"rf\") #> ans #> ER lumen ER membrane Golgi Mitochondrion PM #> 19 179 95 104 134 #> Plastid Ribosome TGN vacuole #> 51 53 21 33 #> MSnSet (storageMode: lockedEnvironment) #> assayData: 689 features, 16 samples #> element names: exprs #> protocolData: none #> phenoData #> sampleNames: M1F1A M1F4A ... M2F11B (16 total) #> varLabels: membrane.prep fraction replicate #> varMetadata: labelDescription #> featureData #> featureNames: AT1G09210 AT1G21750 ... AT4G39080 (689 total) #> fvarLabels: assigned evidence ... rf.pred (11 total) #> fvarMetadata: labelDescription #> experimentData: use 'experimentData(object)' #> pubMedIds: 16618929 #> Annotation: #> - - - Processing information - - - #> Loaded on Thu Jul 16 22:53:08 2015. #> Normalised to sum of intensities. #> Added markers from 'mrk' marker vector. Thu Jul 16 22:53:08 2015 #> Performed random forest prediction (mtry=2) Fri Oct 18 17:20:59 2024 #> Added rf predictions according to global threshold = 0 Fri Oct 18 17:20:59 2024 #> MSnbase version: 1.17.12 getPredictions(res, fcol = \"rf\", t = 0.75) #> ans #> ER lumen ER membrane Golgi Mitochondrion PM #> 14 139 77 89 94 #> Plastid Ribosome TGN unknown vacuole #> 45 20 13 171 27 #> MSnSet (storageMode: lockedEnvironment) #> assayData: 689 features, 16 samples #> element names: exprs #> protocolData: none #> phenoData #> sampleNames: M1F1A M1F4A ... M2F11B (16 total) #> varLabels: membrane.prep fraction replicate #> varMetadata: labelDescription #> featureData #> featureNames: AT1G09210 AT1G21750 ... AT4G39080 (689 total) #> fvarLabels: assigned evidence ... rf.pred (11 total) #> fvarMetadata: labelDescription #> experimentData: use 'experimentData(object)' #> pubMedIds: 16618929 #> Annotation: #> - - - Processing information - - - #> Loaded on Thu Jul 16 22:53:08 2015. #> Normalised to sum of intensities. #> Added markers from 'mrk' marker vector. Thu Jul 16 22:53:08 2015 #> Performed random forest prediction (mtry=2) Fri Oct 18 17:20:59 2024 #> Added rf predictions according to global threshold = 0.75 Fri Oct 18 17:20:59 2024 #> MSnbase version: 1.17.12 plot2D(res, fcol = \"rf\")"},{"path":"https://lgatto.github.io/pRoloc/reference/rfOptimisation.html","id":null,"dir":"Reference","previous_headings":"","what":"svm parameter optimisation — rfOptimisation","title":"svm parameter optimisation — rfOptimisation","text":"Classification parameter optimisation random forest algorithm.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/rfOptimisation.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"svm parameter optimisation — rfOptimisation","text":"","code":"rfOptimisation( object, fcol = \"markers\", mtry = NULL, times = 100, test.size = 0.2, xval = 5, fun = mean, seed, verbose = TRUE, ... )"},{"path":"https://lgatto.github.io/pRoloc/reference/rfOptimisation.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"svm parameter optimisation — rfOptimisation","text":"object instance class \"MSnSet\". fcol feature meta-data containing marker definitions. Default markers. mtry hyper-parameter. Default value NULL. times number times internal cross-validation performed. Default 100. test.size size test data. Default 0.2 (20 percent). xval n-cross validation. Default 5. fun function used summarise xval macro F1 matrices. seed optional random number generator seed. verbose logical defining whether progress bar displayed. ... Additional parameters passed randomForest package randomForest.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/rfOptimisation.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"svm parameter optimisation — rfOptimisation","text":"instance class \"GenRegRes\".","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/rfOptimisation.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"svm parameter optimisation — rfOptimisation","text":"Note performance scores precision, recall (macro) F1 calculated, NA values replaced 0. decision motivated fact class either NA precision recall result NA F1 score , eventually, NA macro F1 (.e. mean(F1)). Replacing NAs 0s leads F1 values 0 reduced yet defined final macro F1 score.","code":""},{"path":[]},{"path":"https://lgatto.github.io/pRoloc/reference/rfOptimisation.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"svm parameter optimisation — rfOptimisation","text":"Laurent Gatto","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/sampleMSnSet.html","id":null,"dir":"Reference","previous_headings":"","what":"Extract a stratified sample of an MSnSet — sampleMSnSet","title":"Extract a stratified sample of an MSnSet — sampleMSnSet","text":"function extracts stratified sample MSnSet.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/sampleMSnSet.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Extract a stratified sample of an MSnSet — sampleMSnSet","text":"","code":"sampleMSnSet(object, fcol = \"markers\", size = 0.2, seed)"},{"path":"https://lgatto.github.io/pRoloc/reference/sampleMSnSet.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Extract a stratified sample of an MSnSet — sampleMSnSet","text":"object instance class MSnSet fcol feature meta-data column name containing marker (vector matrix) definitions MSnSet stratified. Default markers. size size stratified sample extracted. Default 0.2 (20 percent). seed optional random number generator seed.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/sampleMSnSet.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Extract a stratified sample of an MSnSet — sampleMSnSet","text":"stratified sample (according defined fcol) instance class \"MSnSet\".","code":""},{"path":[]},{"path":"https://lgatto.github.io/pRoloc/reference/sampleMSnSet.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Extract a stratified sample of an MSnSet — sampleMSnSet","text":"Lisa Breckels","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/sampleMSnSet.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Extract a stratified sample of an MSnSet — sampleMSnSet","text":"","code":"library(pRolocdata) data(tan2009r1) dim(tan2009r1) #> [1] 888 4 smp <- sampleMSnSet(tan2009r1, fcol = \"markers\") #> Warning: New sample contains classes with < 6 markers dim(smp) #> [1] 182 4 getMarkers(tan2009r1) #> organelleMarkers #> Cytoskeleton ER Golgi Lysosome Nucleus #> 7 28 13 8 21 #> PM Peroxisome Proteasome Ribosome 40S Ribosome 60S #> 34 4 15 20 32 #> mitochondrion unknown #> 29 677 getMarkers(smp) #> organelleMarkers #> Cytoskeleton ER Golgi Lysosome Nucleus #> 2 6 3 2 5 #> PM Peroxisome Proteasome Ribosome 40S Ribosome 60S #> 7 1 3 4 7 #> mitochondrion unknown #> 6 136"},{"path":"https://lgatto.github.io/pRoloc/reference/showGOEvidenceCodes.html","id":null,"dir":"Reference","previous_headings":"","what":"GO Evidence Codes — showGOEvidenceCodes","title":"GO Evidence Codes — showGOEvidenceCodes","text":"function prints textual description Gene Ontology evidence codes.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/showGOEvidenceCodes.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"GO Evidence Codes — showGOEvidenceCodes","text":"","code":"showGOEvidenceCodes() getGOEvidenceCodes()"},{"path":"https://lgatto.github.io/pRoloc/reference/showGOEvidenceCodes.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"GO Evidence Codes — showGOEvidenceCodes","text":"functions used side effects printing evidence codes description.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/showGOEvidenceCodes.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"GO Evidence Codes — showGOEvidenceCodes","text":"Laurent Gatto","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/showGOEvidenceCodes.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"GO Evidence Codes — showGOEvidenceCodes","text":"","code":"showGOEvidenceCodes() #> GO Term Evidence Code #> Experimental Evidence Codes #> EXP: Inferred from Experiment #> IDA: Inferred from Direct Assay #> IPI: Inferred from Physical Interaction #> IMP: Inferred from Mutant Phenotype #> IGI: Inferred from Genetic Interaction #> IEP: Inferred from Expression Pattern #> Computational Analysis Evidence Codes #> ISS: Inferred from Sequence or Structural Similarity #> ISO: Inferred from Sequence Orthology #> ISA: Inferred from Sequence Alignment #> ISM: Inferred from Sequence Model #> IGC: Inferred from Genomic Context #> IBA: Inferred from Biological aspect of Ancestor #> IBD: Inferred from Biological aspect of Descendant #> IKR: Inferred from Key Residues #> IRD: Inferred from Rapid Divergence #> RCA: inferred from Reviewed Computational Analysis #> Author Statement Evidence Codes #> TAS: Traceable Author Statement #> NAS: Non-traceable Author Statement #> Curator Statement Evidence Codes #> IC: Inferred by Curator #> ND: No biological Data available #> Automatically-assigned Evidence Codes #> IEA: Inferred from Electronic Annotation #> Obsolete Evidence Codes #> NR: Not Recorded getGOEvidenceCodes() #> [1] \"EXP\" \"IDA\" \"IPI\" \"IMP\" \"IGI\" \"IEP\" \"ISS\" \"ISO\" \"ISA\" \"ISM\" \"IGC\" \"IBA\" #> [13] \"IBD\" \"IKR\" \"IRD\" \"RCA\" \"TAS\" \"NAS\" \"IC\" \"ND\" \"IEA\" \"NR\""},{"path":"https://lgatto.github.io/pRoloc/reference/spatial2D.html","id":null,"dir":"Reference","previous_headings":"","what":"Uncertainty plot in localisation probabilities — spatial2D","title":"Uncertainty plot in localisation probabilities — spatial2D","text":"Produces pca plot spatial variation localisation probabilities","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/spatial2D.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Uncertainty plot in localisation probabilities — spatial2D","text":"","code":"spatial2D( object, dims = c(1, 2), cov.function = fields::wendland.cov, theta = 1, derivative = 2, k = 1, breaks = c(0.99, 0.95, 0.9, 0.85, 0.8, 0.75, 0.7), aspect = 0.5 )"},{"path":"https://lgatto.github.io/pRoloc/reference/spatial2D.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Uncertainty plot in localisation probabilities — spatial2D","text":"object valid object class MSnset mcmc prediction results tagmMCMCpredict dims PCA dimension project data, default c(1,2) cov.function covariance function used default wendland.cov. See fields package. theta hyperparameter covariance function. See fields package. Default 1. derivative number derivative wendland kernel. See fields package. Default 2. k hyperparamter covariance function. See fields package. Default 1. breaks Probability values draw contour bands. Default c(0.99, 0.95, 0.9, 0.85, 0.8, 0.75, 0.7) aspect argument change plotting aspect PCA","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/spatial2D.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Uncertainty plot in localisation probabilities — spatial2D","text":"Used side effect producing plot. Invisibily returns ggplot object can manipulated","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/spatial2D.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Uncertainty plot in localisation probabilities — spatial2D","text":"Oliver M. Crook ","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/spatial2D.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Uncertainty plot in localisation probabilities — spatial2D","text":"","code":"if (FALSE) { # \\dontrun{ library(\"pRolocdata\") data(\"tan2009r1\") tanres <- tagmMcmcTrain(object = tan2009r1) tanres <- tagmMcmcProcess(tanres) tan2009r1 <- tagmMcmcPredict(object = tan2009r1, params = tanres, probJoint = TRUE) spatial2D(object = tan2009r1) } # }"},{"path":"https://lgatto.github.io/pRoloc/reference/subsetMarkers.html","id":null,"dir":"Reference","previous_headings":"","what":"Subsets markers — subsetMarkers","title":"Subsets markers — subsetMarkers","text":"Subsets matrix markers specific terms","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/subsetMarkers.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Subsets markers — subsetMarkers","text":"","code":"subsetMarkers(object, fcol = \"GOAnnotations\", keep)"},{"path":"https://lgatto.github.io/pRoloc/reference/subsetMarkers.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Subsets markers — subsetMarkers","text":"object instance class MSnSet. fcol name markers matrix. Default GOAnnotations. keep Integer character vector specifying columns keep markers matrix, defined fcol.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/subsetMarkers.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Subsets markers — subsetMarkers","text":"updated MSnSet","code":""},{"path":[]},{"path":"https://lgatto.github.io/pRoloc/reference/subsetMarkers.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Subsets markers — subsetMarkers","text":"Lisa M Breckels","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/svmClassification.html","id":null,"dir":"Reference","previous_headings":"","what":"svm classification — svmClassification","title":"svm classification — svmClassification","text":"Classification using support vector machine algorithm.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/svmClassification.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"svm classification — svmClassification","text":"","code":"svmClassification( object, assessRes, scores = c(\"prediction\", \"all\", \"none\"), cost, sigma, fcol = \"markers\", ... )"},{"path":"https://lgatto.github.io/pRoloc/reference/svmClassification.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"svm classification — svmClassification","text":"object instance class \"MSnSet\". assessRes instance class \"GenRegRes\", generated svmOptimisation. scores One \"prediction\", \"\" \"none\" report score predicted class , classes none. cost assessRes missing, cost must provided. sigma assessRes missing, sigma must provided. fcol feature meta-data containing marker definitions. Default markers. ... Additional parameters passed svm package e1071.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/svmClassification.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"svm classification — svmClassification","text":"instance class \"MSnSet\" svm svm.scores feature variables storing classification results scores respectively.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/svmClassification.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"svm classification — svmClassification","text":"Laurent Gatto","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/svmClassification.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"svm classification — svmClassification","text":"","code":"library(pRolocdata) data(dunkley2006) ## reducing parameter search space and iterations params <- svmOptimisation(dunkley2006, cost = 2^seq(-2,2,2), sigma = 10^seq(-1, 1, 1), times = 3) #> | | | 0% | |===== | 7% | |========= | 13% | |============== | 20% | |=================== | 27% | |======================= | 33% | |============================ | 40% | |================================= | 47% | |===================================== | 53% | |========================================== | 60% | |=============================================== | 67% | |=================================================== | 73% | |======================================================== | 80% | |============================================================= | 87% | |================================================================= | 93% | |======================================================================| 100% params #> Object of class \"GenRegRes\" #> Algorithm: svm #> Hyper-parameters: #> cost: 0.25 1 4 #> sigma: 0.1 1 10 #> Design: #> Replication: 3 x 5-fold X-validation #> Partitioning: 0.2/0.8 (test/train) #> Results #> macro F1: #> Min. 1st Qu. Median Mean 3rd Qu. Max. #> 0.9633 0.9817 1.0000 0.9878 1.0000 1.0000 #> best sigma: 0.1 #> best cost: 4 1 plot(params) f1Count(params) #> 1 4 #> 0.1 1 1 levelPlot(params) getParams(params) #> sigma cost #> 0.1 1.0 res <- svmClassification(dunkley2006, params) #> [1] \"markers\" getPredictions(res, fcol = \"svm\") #> ans #> ER lumen ER membrane Golgi Mitochondrion PM #> 17 178 99 102 135 #> Plastid Ribosome TGN vacuole #> 52 54 18 34 #> MSnSet (storageMode: lockedEnvironment) #> assayData: 689 features, 16 samples #> element names: exprs #> protocolData: none #> phenoData #> sampleNames: M1F1A M1F4A ... M2F11B (16 total) #> varLabels: membrane.prep fraction replicate #> varMetadata: labelDescription #> featureData #> featureNames: AT1G09210 AT1G21750 ... AT4G39080 (689 total) #> fvarLabels: assigned evidence ... svm.pred (11 total) #> fvarMetadata: labelDescription #> experimentData: use 'experimentData(object)' #> pubMedIds: 16618929 #> Annotation: #> - - - Processing information - - - #> Loaded on Thu Jul 16 22:53:08 2015. #> Normalised to sum of intensities. #> Added markers from 'mrk' marker vector. Thu Jul 16 22:53:08 2015 #> Performed svm prediction (sigma=0.1 cost=1) Fri Oct 18 17:21:04 2024 #> Added svm predictions according to global threshold = 0 Fri Oct 18 17:21:04 2024 #> MSnbase version: 1.17.12 getPredictions(res, fcol = \"svm\", t = 0.75) #> ans #> ER lumen ER membrane Golgi Mitochondrion PM #> 14 145 71 93 109 #> Plastid Ribosome TGN unknown vacuole #> 42 27 13 147 28 #> MSnSet (storageMode: lockedEnvironment) #> assayData: 689 features, 16 samples #> element names: exprs #> protocolData: none #> phenoData #> sampleNames: M1F1A M1F4A ... M2F11B (16 total) #> varLabels: membrane.prep fraction replicate #> varMetadata: labelDescription #> featureData #> featureNames: AT1G09210 AT1G21750 ... AT4G39080 (689 total) #> fvarLabels: assigned evidence ... svm.pred (11 total) #> fvarMetadata: labelDescription #> experimentData: use 'experimentData(object)' #> pubMedIds: 16618929 #> Annotation: #> - - - Processing information - - - #> Loaded on Thu Jul 16 22:53:08 2015. #> Normalised to sum of intensities. #> Added markers from 'mrk' marker vector. Thu Jul 16 22:53:08 2015 #> Performed svm prediction (sigma=0.1 cost=1) Fri Oct 18 17:21:04 2024 #> Added svm predictions according to global threshold = 0.75 Fri Oct 18 17:21:04 2024 #> MSnbase version: 1.17.12 plot2D(res, fcol = \"svm\")"},{"path":"https://lgatto.github.io/pRoloc/reference/svmOptimisation.html","id":null,"dir":"Reference","previous_headings":"","what":"svm parameter optimisation — svmOptimisation","title":"svm parameter optimisation — svmOptimisation","text":"Classification parameter optimisation support vector machine algorithm.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/svmOptimisation.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"svm parameter optimisation — svmOptimisation","text":"","code":"svmOptimisation( object, fcol = \"markers\", cost = 2^(-4:4), sigma = 10^(-3:2), times = 100, test.size = 0.2, xval = 5, fun = mean, seed, verbose = TRUE, ... )"},{"path":"https://lgatto.github.io/pRoloc/reference/svmOptimisation.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"svm parameter optimisation — svmOptimisation","text":"object instance class \"MSnSet\". fcol feature meta-data containing marker definitions. Default markers. cost hyper-parameter. Default values 2^-4:4. sigma hyper-parameter. Default values 10^(-2:3). times number times internal cross-validation performed. Default 100. test.size size test data. Default 0.2 (20 percent). xval n-cross validation. Default 5. fun function used summarise xval macro F1 matrices. seed optional random number generator seed. verbose logical defining whether progress bar displayed. ... Additional parameters passed svm package e1071.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/svmOptimisation.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"svm parameter optimisation — svmOptimisation","text":"instance class \"GenRegRes\".","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/svmOptimisation.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"svm parameter optimisation — svmOptimisation","text":"Note performance scores precision, recall (macro) F1 calculated, NA values replaced 0. decision motivated fact class either NA precision recall result NA F1 score , eventually, NA macro F1 (.e. mean(F1)). Replacing NAs 0s leads F1 values 0 reduced yet defined final macro F1 score.","code":""},{"path":[]},{"path":"https://lgatto.github.io/pRoloc/reference/svmOptimisation.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"svm parameter optimisation — svmOptimisation","text":"Laurent Gatto","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/tagm-map.html","id":null,"dir":"Reference","previous_headings":"","what":"The `logPosteriors` function can be used to extract the log-posteriors at each iteration of the EM algorithm to check for convergence. — MAPParams-class","title":"The `logPosteriors` function can be used to extract the log-posteriors at each iteration of the EM algorithm to check for convergence. — MAPParams-class","text":"functions implement T augmented Gaussian mixture (TAGM) model mass spectrometry-based spatial proteomics datasets using maximum posteriori (MAP) optimisation routine.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/tagm-map.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"The `logPosteriors` function can be used to extract the log-posteriors at each iteration of the EM algorithm to check for convergence. — MAPParams-class","text":"","code":"# S4 method for class 'MAPParams' show(object) logPosteriors(x) tagmMapTrain( object, fcol = \"markers\", method = \"MAP\", numIter = 100, mu0 = NULL, lambda0 = 0.01, nu0 = NULL, S0 = NULL, beta0 = NULL, u = 2, v = 10, seed = NULL ) tagmMapPredict( object, params, fcol = \"markers\", probJoint = FALSE, probOutlier = TRUE )"},{"path":"https://lgatto.github.io/pRoloc/reference/tagm-map.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"The `logPosteriors` function can be used to extract the log-posteriors at each iteration of the EM algorithm to check for convergence. — MAPParams-class","text":"object MSnbase::MSnSet containing spatial proteomics data passed tagmMapTrain tagmPredict. x object class `MAPParams`. fcol feature meta-data containing marker definitions. Default markers. method charachter() describing inference method TAGM algorithm. Default \"MAP\". numIter number iterations expectation-maximisation algorithm. Default 100. mu0 prior mean. Default colMeans expression data. lambda0 prior shrinkage. Default 0.01. nu0 prior degreed freedom. Default ncol(exprs(object)) + 2 S0 prior inverse-wishary scale matrix. Empirical prior used default. beta0 prior Dirichlet distribution concentration. Default 1 class. u prior shape parameter Beta(u, v). Default 2 v prior shape parameter Beta(u, v). Default 10. seed optional random number generator seed. params instance class MAPParams, generated tagmMapTrain(). probJoint logical(1) indicating whether return joint probability matrix, .e. probability classes new tagm.map.joint feature variable. probOutlier logical(1) indicating whether return probability outlier new tagm.map.outlier feature variable. high value indicates protein unlikely belong annotated class (hence considered outlier).","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/tagm-map.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"The `logPosteriors` function can be used to extract the log-posteriors at each iteration of the EM algorithm to check for convergence. — MAPParams-class","text":"tagmMapTrain returns instance class MAPParams(). tagmPredict returns instance class MSnbase::MSnSet containing localisation predictions new tagm.map.allocation feature variable.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/tagm-map.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"The `logPosteriors` function can be used to extract the log-posteriors at each iteration of the EM algorithm to check for convergence. — MAPParams-class","text":"tagmMapTrain function generates MAP parameters (object class MAPParams) based annotated quantitative spatial proteomics dataset (object class MSnbase::MSnSet). passed tagmPredict function predict sub-cellular localisation protein unknown localisation. See pRoloc-bayesian vignette details examples. implementation, numerical instability detected covariance matrix data small multiple identity added. message printed conditioning step performed.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/tagm-map.html","id":"slots","dir":"Reference","previous_headings":"","what":"Slots","title":"The `logPosteriors` function can be used to extract the log-posteriors at each iteration of the EM algorithm to check for convergence. — MAPParams-class","text":"method character() storing TAGM method name. priors list() priors parameters seed integer() random number generation seed. posteriors list() updated posterior parameters log-posterior model. datasize list() details size data","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/tagm-map.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"The `logPosteriors` function can be used to extract the log-posteriors at each iteration of the EM algorithm to check for convergence. — MAPParams-class","text":"Bayesian Mixture Modelling Approach Spatial Proteomics Oliver M Crook, Claire M Mulvey, Paul D. W. Kirk, Kathryn S Lilley, Laurent Gatto bioRxiv 282269; doi: https://doi.org/10.1101/282269","code":""},{"path":[]},{"path":"https://lgatto.github.io/pRoloc/reference/tagm-map.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"The `logPosteriors` function can be used to extract the log-posteriors at each iteration of the EM algorithm to check for convergence. — MAPParams-class","text":"Laurent Gatto Oliver M. Crook","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/tagm-mcmc.html","id":null,"dir":"Reference","previous_headings":"","what":"Localisation of proteins using the TAGM MCMC method — tagmMcmcTrain","title":"Localisation of proteins using the TAGM MCMC method — tagmMcmcTrain","text":"functions implement T augmented Gaussian mixture (TAGM) model mass spectrometry-based spatial proteomics datasets using Markov-chain Monte-Carlo (MCMC) inference.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/tagm-mcmc.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Localisation of proteins using the TAGM MCMC method — tagmMcmcTrain","text":"","code":"tagmMcmcTrain( object, fcol = \"markers\", method = \"MCMC\", numIter = 1000L, burnin = 100L, thin = 5L, mu0 = NULL, lambda0 = 0.01, nu0 = NULL, S0 = NULL, beta0 = NULL, u = 2, v = 10, numChains = 4L, BPPARAM = BiocParallel::bpparam() ) tagmMcmcPredict( object, params, fcol = \"markers\", probJoint = FALSE, probOutlier = TRUE ) tagmPredict( object, params, fcol = \"markers\", probJoint = FALSE, probOutlier = TRUE ) tagmMcmcProcess(params)"},{"path":"https://lgatto.github.io/pRoloc/reference/tagm-mcmc.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Localisation of proteins using the TAGM MCMC method — tagmMcmcTrain","text":"object MSnbase::MSnSet containing spatial proteomics data passed tagmMcmcTrain tagmPredict. fcol feature meta-data containing marker definitions. Default markers. method charachter() describing inference method TAGM algorithm. Default \"MCMC\". numIter number iterations MCMC algorithm. Default 1000. burnin number samples discarded begining chain. Default 100. thin thinning frequency applied MCMC chain. Default 5. mu0 prior mean. Default colMeans expression data. lambda0 prior shrinkage. Default 0.01. nu0 prior degreed freedom. Default ncol(exprs(object)) + 2 S0 prior inverse-wishart scale matrix. Empirical prior used default. beta0 prior Dirichlet distribution concentration. Default 1 class. u prior shape parameter Beta(u, v). Default 2 v prior shape parameter Beta(u, v). Default 10. numChains number parrallel chains run. Default 4. BPPARAM Support parallel processing using BiocParallel infrastructure. missing (default), default registered BiocParallelParam parameters used. Alternatively, one can pass valid BiocParallelParam parameter instance: SnowParam, MulticoreParam, DoparParam, ... see BiocParallel package details. params instance class MCMCParams, generated tagmMcmcTrain(). probJoint logical(1) indicating whether return joint probability matrix, .e. probability classes new tagm.mcmc.joint feature variable. probOutlier logical(1) indicating whether return probability outlier new tagm.mcmc.outlier feature variable. high value indicates protein unlikely belong annotated class (hence considered outlier).","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/tagm-mcmc.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Localisation of proteins using the TAGM MCMC method — tagmMcmcTrain","text":"tagmMcmcTrain returns instance class MCMCParams. tagmMcmcPredict returns instance class MSnbase::MSnSet containing localisation predictions new tagm.mcmc.allocation feature variable. allocation probability encoded tagm.mcmc.probability (corresponding mean distribution probability). additionm upper lower quantiles allocation probability distribution available tagm.mcmc.probability.lowerquantile tagm.mcmc.probability.upperquantile feature variables. Shannon entropy available tagm.mcmc.mean.shannon feature variable, measuring uncertainty allocations (high value representing high uncertainty; highest value natural logarithm number classes). tagmMcmcProcess returns instance class MCMCParams summary slot populated.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/tagm-mcmc.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Localisation of proteins using the TAGM MCMC method — tagmMcmcTrain","text":"tagmMcmcTrain function generates samples posterior distributions (object class MCMCParams) based annotated quantitative spatial proteomics dataset (object class MSnbase::MSnSet). passed tagmPredict function predict sub-cellular localisation protein unknown localisation. See pRoloc-bayesian vignette details examples. implementation, numerical instability detected covariance matrix data small multiple identity added. message printed conditioning step performed.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/tagm-mcmc.html","id":"references","dir":"Reference","previous_headings":"","what":"References","title":"Localisation of proteins using the TAGM MCMC method — tagmMcmcTrain","text":"Bayesian Mixture Modelling Approach Spatial Proteomics Oliver M Crook, Claire M Mulvey, Paul D. W. Kirk, Kathryn S Lilley, Laurent Gatto bioRxiv 282269; doi: https://doi.org/10.1101/282269","code":""},{"path":[]},{"path":"https://lgatto.github.io/pRoloc/reference/testMSnSet.html","id":null,"dir":"Reference","previous_headings":"","what":"Create a stratified 'test' MSnSet — testMSnSet","title":"Create a stratified 'test' MSnSet — testMSnSet","text":"function creates stratified 'test' MSnSet can used algorihtmic development. \"MSnSet\" containing marker proteins, defined fcol, returned new feature data column appended called test stratified subset markers relabelled 'unknowns'.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/testMSnSet.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Create a stratified 'test' MSnSet — testMSnSet","text":"","code":"testMSnSet(object, fcol = \"markers\", size = 0.2, seed)"},{"path":"https://lgatto.github.io/pRoloc/reference/testMSnSet.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Create a stratified 'test' MSnSet — testMSnSet","text":"object instance class \"MSnSet\" fcol feature meta-data column name containing marker definitions data stratified. Default markers. size size data set extracted. Default 0.2 (20 percent). seed optional random number generator seed.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/testMSnSet.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Create a stratified 'test' MSnSet — testMSnSet","text":"instance class \"MSnSet\" contains proteins labelled localisation .e. marker proteins, defined fcol new column feature data slot called test part labels relabelled \"unknown\" class (number proteins renamed \"unknown\" according parameter size).","code":""},{"path":[]},{"path":"https://lgatto.github.io/pRoloc/reference/testMSnSet.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Create a stratified 'test' MSnSet — testMSnSet","text":"Lisa Breckels","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/testMSnSet.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Create a stratified 'test' MSnSet — testMSnSet","text":"","code":"library(pRolocdata) data(tan2009r1) sample <- testMSnSet(tan2009r1) getMarkers(sample, \"test\") #> organelleMarkers #> Cytoskeleton ER Golgi Lysosome Nucleus #> 5 22 10 6 16 #> PM Peroxisome Proteasome Ribosome 40S Ribosome 60S #> 27 3 12 16 25 #> mitochondrion unknown #> 23 46 all(dim(sample) == dim(markerMSnSet(tan2009r1))) #> [1] TRUE"},{"path":"https://lgatto.github.io/pRoloc/reference/testMarkers.html","id":null,"dir":"Reference","previous_headings":"","what":"Tests marker class sizes — testMarkers","title":"Tests marker class sizes — testMarkers","text":"Tests marker class sizes large enough parameter optimisation scheme, .e. size greater xval + n, default xval 5 n 2. test unsuccessful, warning thrown.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/testMarkers.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Tests marker class sizes — testMarkers","text":"","code":"testMarkers(object, xval = 5, n = 2, fcol = \"markers\", error = FALSE)"},{"path":"https://lgatto.github.io/pRoloc/reference/testMarkers.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Tests marker class sizes — testMarkers","text":"object instance class \"MSnSet\". xval number cross-validation partitions. See xval argument parameter optimisation function(s). Default 5. n Number additional examples. fcol name prediction column featureData slot. Default \"markers\". error logical specifying error thown, instead warning.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/testMarkers.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Tests marker class sizes — testMarkers","text":"successfull, test invisibly returns NULL. Else, invisibly returns names classes examples.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/testMarkers.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Tests marker class sizes — testMarkers","text":"case test indicates class contains examples, advised either add , possible, remove class altogether (see minMarkers) parameter optimisation likely fail , least, produce unreliable results class.","code":""},{"path":[]},{"path":"https://lgatto.github.io/pRoloc/reference/testMarkers.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Tests marker class sizes — testMarkers","text":"Laurent Gatto","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/testMarkers.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Tests marker class sizes — testMarkers","text":"","code":"library(\"pRolocdata\") data(dunkley2006) getMarkers(dunkley2006) #> organelleMarkers #> ER lumen ER membrane Golgi Mitochondrion PM #> 14 45 28 55 46 #> Plastid Ribosome TGN unknown vacuole #> 20 19 13 428 21 testMarkers(dunkley2006) toosmall <- testMarkers(dunkley2006, xval = 15) #> Warning: ER lumen, TGN have/has less than 17 markers. toosmall #> [1] \"ER lumen\" \"TGN\" try(testMarkers(dunkley2006, xval = 15, error = TRUE)) #> Error in testMarkers(dunkley2006, xval = 15, error = TRUE) : #> ER lumen, TGN have/has less than 17 markers."},{"path":"https://lgatto.github.io/pRoloc/reference/thetas.html","id":null,"dir":"Reference","previous_headings":"","what":"Draw matrix of thetas to test — thetas","title":"Draw matrix of thetas to test — thetas","text":"possible weights considered sequence 0 (favour auxiliary data) 1 (favour primary data). possible combination weights nclass classes must tested. thetas function produces weight matrix nclass columns (one class) possible weight combinations (number rows).","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/thetas.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Draw matrix of thetas to test — thetas","text":"","code":"thetas(nclass, by = 0.5, length.out, verbose = TRUE)"},{"path":"https://lgatto.github.io/pRoloc/reference/thetas.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Draw matrix of thetas to test — thetas","text":"nclass Number marker classes increment weights. One 1, 0.5, 0.25, 2, 0.1 0.05. length.desired length weight sequence. verbose logical indicating weight sequences printed . Default TRUE.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/thetas.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Draw matrix of thetas to test — thetas","text":"matrix possible theta weight combinations.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/thetas.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Draw matrix of thetas to test — thetas","text":"Lisa Breckels","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/thetas.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Draw matrix of thetas to test — thetas","text":"","code":"dim(thetas(4, by = 0.5)) #> Weigths: #> (0, 0.5, 1) #> [1] 81 4 dim(thetas(4, by = 0.2)) #> Weigths: #> (0, 0.2, 0.4, 0.6, 0.8, 1) #> [1] 1296 4 dim(thetas(5, by = 0.2)) #> Weigths: #> (0, 0.2, 0.4, 0.6, 0.8, 1) #> [1] 7776 5 dim(thetas(5, length.out = 5)) #> Weigths: #> (0, 0.25, 0.5, 0.75, 1) #> [1] 3125 5 dim(thetas(6, by = 0.2)) #> Weigths: #> (0, 0.2, 0.4, 0.6, 0.8, 1) #> [1] 46656 6"},{"path":"https://lgatto.github.io/pRoloc/reference/undocumented.html","id":null,"dir":"Reference","previous_headings":"","what":"Undocumented/unexported entries — undocumented","title":"Undocumented/unexported entries — undocumented","text":"just dummy entry methods unexported classes generate warnings package checking.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/undocumented.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Undocumented/unexported entries — undocumented","text":"Laurent Gatto ","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/zerosInBinMSnSet.html","id":null,"dir":"Reference","previous_headings":"","what":"Compute the number of non-zero values in each marker classes — zerosInBinMSnSet","title":"Compute the number of non-zero values in each marker classes — zerosInBinMSnSet","text":"function assumes input binary MSnSet computes, marker class, number non-zero expression profiles. function meant used produce heatmaps (see example) visualise binary (GO) MSnSet objects assess utility: zero features/classes informative (can filtered filterBinMSnSet) features/classes many annotations (GO terms) likely informative either.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/zerosInBinMSnSet.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Compute the number of non-zero values in each marker classes — zerosInBinMSnSet","text":"","code":"zerosInBinMSnSet(object, fcol = \"markers\", as.matrix = TRUE, percent = TRUE)"},{"path":"https://lgatto.github.io/pRoloc/reference/zerosInBinMSnSet.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Compute the number of non-zero values in each marker classes — zerosInBinMSnSet","text":"object instance class MSnSet binary data. fcol character defining feature data variable used markers. Default \"markers\". .matrix TRUE (default) data formatted returned matrix. Otherwise, list returned. percent TRUE, percentages returned. Otherwise, absolute values.","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/zerosInBinMSnSet.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Compute the number of non-zero values in each marker classes — zerosInBinMSnSet","text":"matrix list indicating number non-zero value per marker class.","code":""},{"path":[]},{"path":"https://lgatto.github.io/pRoloc/reference/zerosInBinMSnSet.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Compute the number of non-zero values in each marker classes — zerosInBinMSnSet","text":"Laurent Gatto","code":""},{"path":"https://lgatto.github.io/pRoloc/reference/zerosInBinMSnSet.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Compute the number of non-zero values in each marker classes — zerosInBinMSnSet","text":"","code":"library(pRolocdata) data(hyperLOPIT2015goCC) zerosInBinMSnSet(hyperLOPIT2015goCC) #> 40S Ribosome 60S Ribosome Actin cytoskeleton Cytosol #> 0 0.005089059 0.005089059 0.001272265 0.005089059 #> 1 0.002544529 0.001272265 0.001272265 0.002544529 #> 2 0.005089059 0.005089059 0.001272265 0.011450382 #> 3 0.002544529 0.007633588 0.001272265 0.008905852 #> 4 0.007633588 0.006361323 0.001272265 0.010178117 #> 5 0.005089059 0.008905852 0.003816794 0.003816794 #> 6 0.001272265 0.002544529 0.001272265 0.002544529 #> 7 0.002544529 0.006361323 0.001272265 0.005089059 #> 8 0.001272265 0.005089059 0.002544529 0.001272265 #> 9 0.001272265 0.003816794 0.001272265 0.001272265 #> 10 0.000000000 0.001272265 0.000000000 0.001272265 #> 11 0.000000000 0.001272265 0.000000000 0.001272265 #> 12 0.000000000 0.000000000 0.000000000 0.000000000 #> 13 0.000000000 0.000000000 0.000000000 0.000000000 #> 14 0.000000000 0.000000000 0.000000000 0.000000000 #> 15 0.000000000 0.000000000 0.000000000 0.000000000 #> 16 0.000000000 0.000000000 0.000000000 0.000000000 #> 17 0.000000000 0.000000000 0.000000000 0.000000000 #> 18 0.000000000 0.000000000 0.000000000 0.000000000 #> 19 0.000000000 0.000000000 0.000000000 0.000000000 #> 20 0.000000000 0.000000000 0.000000000 0.000000000 #> 21 0.000000000 0.000000000 0.000000000 0.000000000 #> 22 0.000000000 0.000000000 0.000000000 0.000000000 #> Endoplasmic reticulum/Golgi apparatus Endosome Extracellular matrix #> 0 0.016539440 0.001272265 0.003816794 #> 1 0.005089059 0.001272265 0.005089059 #> 2 0.017811705 0.001272265 0.002544529 #> 3 0.024173028 0.003816794 0.002544529 #> 4 0.020356234 0.001272265 0.002544529 #> 5 0.005089059 0.002544529 0.000000000 #> 6 0.013994911 0.001272265 0.000000000 #> 7 0.008905852 0.001272265 0.000000000 #> 8 0.011450382 0.001272265 0.000000000 #> 9 0.003816794 0.001272265 0.000000000 #> 10 0.001272265 0.000000000 0.000000000 #> 11 0.001272265 0.000000000 0.000000000 #> 12 0.001272265 0.000000000 0.000000000 #> 13 0.001272265 0.000000000 0.000000000 #> 14 0.002544529 0.000000000 0.000000000 #> 15 0.001272265 0.000000000 0.000000000 #> 16 0.000000000 0.000000000 0.000000000 #> 17 0.000000000 0.000000000 0.000000000 #> 18 0.000000000 0.000000000 0.000000000 #> 19 0.000000000 0.000000000 0.000000000 #> 20 0.000000000 0.000000000 0.000000000 #> 21 0.000000000 0.000000000 0.000000000 #> 22 0.000000000 0.000000000 0.000000000 #> Lysosome Mitochondrion Nucleus - Chromatin Nucleus - Non-chromatin #> 0 0.001272265 0.043256997 0.013994911 0.016539440 #> 1 0.005089059 0.043256997 0.003816794 0.003816794 #> 2 0.012722646 0.110687023 0.002544529 0.021628499 #> 3 0.007633588 0.110687023 0.010178117 0.017811705 #> 4 0.002544529 0.068702290 0.006361323 0.015267176 #> 5 0.003816794 0.043256997 0.005089059 0.008905852 #> 6 0.003816794 0.025445293 0.008905852 0.006361323 #> 7 0.001272265 0.019083969 0.011450382 0.011450382 #> 8 0.001272265 0.007633588 0.007633588 0.002544529 #> 9 0.001272265 0.007633588 0.006361323 0.002544529 #> 10 0.001272265 0.001272265 0.001272265 0.001272265 #> 11 0.000000000 0.001272265 0.001272265 0.000000000 #> 12 0.000000000 0.002544529 0.002544529 0.000000000 #> 13 0.000000000 0.001272265 0.000000000 0.000000000 #> 14 0.000000000 0.001272265 0.000000000 0.000000000 #> 15 0.000000000 0.000000000 0.000000000 0.000000000 #> 16 0.000000000 0.000000000 0.000000000 0.000000000 #> 17 0.000000000 0.000000000 0.000000000 0.000000000 #> 18 0.000000000 0.000000000 0.000000000 0.000000000 #> 19 0.000000000 0.000000000 0.000000000 0.000000000 #> 20 0.000000000 0.000000000 0.000000000 0.000000000 #> 21 0.000000000 0.000000000 0.000000000 0.000000000 #> 22 0.000000000 0.000000000 0.000000000 0.000000000 #> Peroxisome Plasma membrane Proteasome #> 0 0.003816794 0.012722646 0.001272265 #> 1 0.002544529 0.001272265 0.001272265 #> 2 0.003816794 0.002544529 0.001272265 #> 3 0.001272265 0.003816794 0.002544529 #> 4 0.003816794 0.003816794 0.002544529 #> 5 0.002544529 0.001272265 0.006361323 #> 6 0.001272265 0.005089059 0.008905852 #> 7 0.001272265 0.003816794 0.007633588 #> 8 0.001272265 0.002544529 0.005089059 #> 9 0.000000000 0.003816794 0.003816794 #> 10 0.000000000 0.001272265 0.001272265 #> 11 0.000000000 0.003816794 0.001272265 #> 12 0.000000000 0.001272265 0.000000000 #> 13 0.000000000 0.001272265 0.000000000 #> 14 0.000000000 0.001272265 0.000000000 #> 15 0.000000000 0.002544529 0.000000000 #> 16 0.000000000 0.001272265 0.000000000 #> 17 0.000000000 0.002544529 0.000000000 #> 18 0.000000000 0.003816794 0.000000000 #> 19 0.000000000 0.001272265 0.000000000 #> 20 0.000000000 0.001272265 0.000000000 #> 21 0.000000000 0.001272265 0.000000000 #> 22 0.000000000 0.001272265 0.000000000 zerosInBinMSnSet(hyperLOPIT2015goCC, percent = FALSE) #> 40S Ribosome 60S Ribosome Actin cytoskeleton Cytosol #> 0 4 4 1 4 #> 1 2 1 1 2 #> 2 4 4 1 9 #> 3 2 6 1 7 #> 4 6 5 1 8 #> 5 4 7 3 3 #> 6 1 2 1 2 #> 7 2 5 1 4 #> 8 1 4 2 1 #> 9 1 3 1 1 #> 10 0 1 0 1 #> 11 0 1 0 1 #> 12 0 0 0 0 #> 13 0 0 0 0 #> 14 0 0 0 0 #> 15 0 0 0 0 #> 16 0 0 0 0 #> 17 0 0 0 0 #> 18 0 0 0 0 #> 19 0 0 0 0 #> 20 0 0 0 0 #> 21 0 0 0 0 #> 22 0 0 0 0 #> Endoplasmic reticulum/Golgi apparatus Endosome Extracellular matrix Lysosome #> 0 13 1 3 1 #> 1 4 1 4 4 #> 2 14 1 2 10 #> 3 19 3 2 6 #> 4 16 1 2 2 #> 5 4 2 0 3 #> 6 11 1 0 3 #> 7 7 1 0 1 #> 8 9 1 0 1 #> 9 3 1 0 1 #> 10 1 0 0 1 #> 11 1 0 0 0 #> 12 1 0 0 0 #> 13 1 0 0 0 #> 14 2 0 0 0 #> 15 1 0 0 0 #> 16 0 0 0 0 #> 17 0 0 0 0 #> 18 0 0 0 0 #> 19 0 0 0 0 #> 20 0 0 0 0 #> 21 0 0 0 0 #> 22 0 0 0 0 #> Mitochondrion Nucleus - Chromatin Nucleus - Non-chromatin Peroxisome #> 0 34 11 13 3 #> 1 34 3 3 2 #> 2 87 2 17 3 #> 3 87 8 14 1 #> 4 54 5 12 3 #> 5 34 4 7 2 #> 6 20 7 5 1 #> 7 15 9 9 1 #> 8 6 6 2 1 #> 9 6 5 2 0 #> 10 1 1 1 0 #> 11 1 1 0 0 #> 12 2 2 0 0 #> 13 1 0 0 0 #> 14 1 0 0 0 #> 15 0 0 0 0 #> 16 0 0 0 0 #> 17 0 0 0 0 #> 18 0 0 0 0 #> 19 0 0 0 0 #> 20 0 0 0 0 #> 21 0 0 0 0 #> 22 0 0 0 0 #> Plasma membrane Proteasome #> 0 10 1 #> 1 1 1 #> 2 2 1 #> 3 3 2 #> 4 3 2 #> 5 1 5 #> 6 4 7 #> 7 3 6 #> 8 2 4 #> 9 3 3 #> 10 1 1 #> 11 3 1 #> 12 1 0 #> 13 1 0 #> 14 1 0 #> 15 2 0 #> 16 1 0 #> 17 2 0 #> 18 3 0 #> 19 1 0 #> 20 1 0 #> 21 1 0 #> 22 1 0 pal <- colorRampPalette(c(\"white\", \"blue\")) library(lattice) levelplot(zerosInBinMSnSet(hyperLOPIT2015goCC), xlab = \"Number of non-0s\", ylab = \"Marker class\", col.regions = pal(140))"},{"path":[]},{"path":"https://lgatto.github.io/pRoloc/news/index.html","id":"changes-in-version-1-45","dir":"Changelog","previous_headings":"","what":"Changes in version 1.45.2","title":"pRoloc 1.45","text":"pRolocmarkers() new version argument, allow new markers versions added. 14 new marker sets added pRolocmarkers() version = 2 (new default). Documentation pRolocmarkers() updated include description version = 2 markers.","code":""},{"path":"https://lgatto.github.io/pRoloc/news/index.html","id":"changes-in-version-1-45-1","dir":"Changelog","previous_headings":"","what":"Changes in version 1.45.1","title":"pRoloc 1.45","text":"Import ’mclust::estep*()’.","code":""},{"path":"https://lgatto.github.io/pRoloc/news/index.html","id":"changes-in-version-1-45-2","dir":"Changelog","previous_headings":"","what":"Changes in version 1.45.0","title":"pRoloc 1.45","text":"New devel version","code":""},{"path":[]},{"path":"https://lgatto.github.io/pRoloc/news/index.html","id":"changes-in-version-1-43","dir":"Changelog","previous_headings":"","what":"Changes in version 1.43.2","title":"pRoloc 1.43","text":"Fix/update dunkley2006param object.","code":""},{"path":"https://lgatto.github.io/pRoloc/news/index.html","id":"changes-in-version-1-43-1","dir":"Changelog","previous_headings":"","what":"Changes in version 1.43.1","title":"pRoloc 1.43","text":"Fix syntax man pages.","code":""},{"path":"https://lgatto.github.io/pRoloc/news/index.html","id":"changes-in-version-1-43-2","dir":"Changelog","previous_headings":"","what":"Changes in version 1.43.0","title":"pRoloc 1.43","text":"New devel version","code":""},{"path":[]},{"path":"https://lgatto.github.io/pRoloc/news/index.html","id":"changes-in-version-1-39","dir":"Changelog","previous_headings":"","what":"Changes in version 1.39.1","title":"pRoloc 1.39","text":"Update transfer learning vignette use hpar 1.41.","code":""},{"path":"https://lgatto.github.io/pRoloc/news/index.html","id":"changes-in-version-1-39-1","dir":"Changelog","previous_headings":"","what":"Changes in version 1.39.0","title":"pRoloc 1.39","text":"New devel version (Bioc 3.17)","code":""},{"path":[]},{"path":"https://lgatto.github.io/pRoloc/news/index.html","id":"changes-in-version-1-37","dir":"Changelog","previous_headings":"","what":"Changes in version 1.37.1","title":"pRoloc 1.37","text":"Fix bug PerTubro classifiction function (see #146 #147), contributed mgerault.","code":""},{"path":[]},{"path":[]},{"path":"https://lgatto.github.io/pRoloc/news/index.html","id":"changes-in-version-1-31","dir":"Changelog","previous_headings":"","what":"Changes in version 1.31.1","title":"pRoloc 1.31","text":"Fix failing unit test, setting RNGseed SerialParam() (fix ococrook, see #142).","code":""},{"path":"https://lgatto.github.io/pRoloc/news/index.html","id":"changes-in-version-1-31-1","dir":"Changelog","previous_headings":"","what":"Changes in version 1.31.0","title":"pRoloc 1.31","text":"New devel version (Bioc 3.14)","code":""},{"path":"https://lgatto.github.io/pRoloc/news/index.html","id":"changes-in-version-1-31-2","dir":"Changelog","previous_headings":"","what":"Changes in version 1.31.3","title":"pRoloc 1.31","text":"lopims() function moved lgatto/lopims package GitHub","code":""},{"path":"https://lgatto.github.io/pRoloc/news/index.html","id":"changes-in-version-1-31-3","dir":"Changelog","previous_headings":"","what":"Changes in version 1.31.2","title":"pRoloc 1.31","text":"Update dunkley2006params, andy2011params MartInterfaces objects","code":""},{"path":"https://lgatto.github.io/pRoloc/news/index.html","id":"changes-in-version-1-31-4","dir":"Changelog","previous_headings":"","what":"Changes in version 1.31.1","title":"pRoloc 1.31","text":"Suggest magick (needed build vignette)","code":""},{"path":"https://lgatto.github.io/pRoloc/news/index.html","id":"changes-in-version-1-31-5","dir":"Changelog","previous_headings":"","what":"Changes in version 1.31.0","title":"pRoloc 1.31","text":"New devel version (Bioc 3.13)","code":""},{"path":[]},{"path":"https://lgatto.github.io/pRoloc/news/index.html","id":"changes-in-version-1-29","dir":"Changelog","previous_headings":"","what":"Changes in version 1.29.0","title":"pRoloc 1.29","text":"New devel version (Bioc 3.12)","code":""},{"path":"https://lgatto.github.io/pRoloc/news/index.html","id":"changes-in-version-1-29-1","dir":"Changelog","previous_headings":"","what":"Changes in version 1.29.1","title":"pRoloc 1.29","text":"Removed duplicate colour getStockCol updated colour palette ","code":""},{"path":[]},{"path":"https://lgatto.github.io/pRoloc/news/index.html","id":"changes-in-version-1-28","dir":"Changelog","previous_headings":"","what":"Changes in version 1.28.0","title":"pRoloc 1.28","text":"New release version (Bioc 3.11)","code":""},{"path":[]},{"path":"https://lgatto.github.io/pRoloc/news/index.html","id":"changes-in-version-1-27","dir":"Changelog","previous_headings":"","what":"Changes in version 1.27.6","title":"pRoloc 1.27","text":"Depend MLInterfaces 1.67.10","code":""},{"path":"https://lgatto.github.io/pRoloc/news/index.html","id":"changes-in-version-1-27-1","dir":"Changelog","previous_headings":"","what":"Changes in version 1.27.5","title":"pRoloc 1.27","text":"import stats4::plot <2020-03-26 Thu>","code":""},{"path":"https://lgatto.github.io/pRoloc/news/index.html","id":"changes-in-version-1-27-2","dir":"Changelog","previous_headings":"","what":"Changes in version 1.27.4","title":"pRoloc 1.27","text":"Import missing mclust::mclustBIC","code":""},{"path":"https://lgatto.github.io/pRoloc/news/index.html","id":"changes-in-version-1-27-3","dir":"Changelog","previous_headings":"","what":"Changes in version 1.27.3","title":"pRoloc 1.27","text":"Remove exprsToRatio man page (function MSnbase deprecated)","code":""},{"path":"https://lgatto.github.io/pRoloc/news/index.html","id":"changes-in-version-1-27-4","dir":"Changelog","previous_headings":"","what":"Changes in version 1.27.2","title":"pRoloc 1.27","text":"Fix errors related R-devel","code":""},{"path":"https://lgatto.github.io/pRoloc/news/index.html","id":"changes-in-version-1-27-5","dir":"Changelog","previous_headings":"","what":"Changes in version 1.27.1","title":"pRoloc 1.27","text":"Merged plotting payes PR","code":""},{"path":"https://lgatto.github.io/pRoloc/news/index.html","id":"changes-in-version-1-27-6","dir":"Changelog","previous_headings":"","what":"Changes in version 1.27.0","title":"pRoloc 1.27","text":"Version bump Bioc 3.11 (devel)","code":""},{"path":[]},{"path":"https://lgatto.github.io/pRoloc/news/index.html","id":"changes-in-version-1-25","dir":"Changelog","previous_headings":"","what":"Changes in version 1.25.3","title":"pRoloc 1.25","text":"New spatial2D function <2019-09-24 Tue>","code":""},{"path":"https://lgatto.github.io/pRoloc/news/index.html","id":"changes-in-version-1-25-1","dir":"Changelog","previous_headings":"","what":"Changes in version 1.25.2","title":"pRoloc 1.25","text":"Fix new biomart attribute <2019-08-09 Fri> Bug fix: pass fcol helper function (see https://support.bioconductor.org/p/123614/) <2019-08-09 Fri>","code":""},{"path":"https://lgatto.github.io/pRoloc/news/index.html","id":"changes-in-version-1-25-2","dir":"Changelog","previous_headings":"","what":"Changes in version 1.25.1","title":"pRoloc 1.25","text":"Always use mvtnorm::dmvnorm <2019-06-21 Fri>","code":""},{"path":"https://lgatto.github.io/pRoloc/news/index.html","id":"changes-in-version-1-25-3","dir":"Changelog","previous_headings":"","what":"Changes in version 1.25.0","title":"pRoloc 1.25","text":"Version bump Bioc 3.10 (devel)","code":""},{"path":[]},{"path":"https://lgatto.github.io/pRoloc/news/index.html","id":"changes-in-version-1-24","dir":"Changelog","previous_headings":"","what":"Changes in version 1.24.0","title":"pRoloc 1.24","text":"Version bump Bioc 3.9 (release)","code":""},{"path":[]},{"path":"https://lgatto.github.io/pRoloc/news/index.html","id":"changes-in-version-1-23","dir":"Changelog","previous_headings":"","what":"Changes in version 1.23.4","title":"pRoloc 1.23","text":"Remove plain NEWS now R supports NEWS.md","code":""},{"path":"https://lgatto.github.io/pRoloc/news/index.html","id":"changes-in-version-1-23-1","dir":"Changelog","previous_headings":"","what":"Changes in version 1.23.3","title":"pRoloc 1.23","text":"Link TAGM F1000 workflow <2019-04-11 Thu> Add ref TAGM F1000 CITATION README <2019-04-11 Thu> Update biomart interface data AnnotationParams-related code <2019-04-12 Fri>","code":""},{"path":"https://lgatto.github.io/pRoloc/news/index.html","id":"changes-in-version-1-23-2","dir":"Changelog","previous_headings":"","what":"Changes in version 1.23.2","title":"pRoloc 1.23","text":"Add mcmc helper functions. New logPosteriors accessor MAPParams object. New plotConsProfiles function, contributed Tom Smith (see PR #131). Update TAGM vignette, refering workflow <2019-03-14 Thu>","code":""},{"path":"https://lgatto.github.io/pRoloc/news/index.html","id":"changes-in-version-1-23-3","dir":"Changelog","previous_headings":"","what":"Changes in version 1.23.1","title":"pRoloc 1.23","text":"Add note missing data QSep man <2018-10-31 Wed> Add mcmc-helper documentation <2018-11-04 Sun> Fixing numerical instability Cholesky decomposition (see #124) <2018-11-30 Fri> Add option display display grid plot2D <2018-12-12 Wed> mrkHClust now uses mrkConsProfiles returns hclust object - see issue #130 details background <2018-12-19 Wed>","code":""},{"path":"https://lgatto.github.io/pRoloc/news/index.html","id":"changes-in-version-1-23-4","dir":"Changelog","previous_headings":"","what":"Changes in version 1.23.0","title":"pRoloc 1.23","text":"New version Bioc 3.9 devel","code":""},{"path":[]},{"path":"https://lgatto.github.io/pRoloc/news/index.html","id":"changes-in-version-1-22","dir":"Changelog","previous_headings":"","what":"Changes in version 1.22.0","title":"pRoloc 1.22","text":"New version Bioc 3.8 release","code":""},{"path":[]},{"path":"https://lgatto.github.io/pRoloc/news/index.html","id":"changes-in-version-1-21","dir":"Changelog","previous_headings":"","what":"Changes in version 1.21.9","title":"pRoloc 1.21","text":"Fix type vignette header <2018-09-18 Tue> Fix bug plot method ThetaRegRes object <2018-09-24 Mon>","code":""},{"path":"https://lgatto.github.io/pRoloc/news/index.html","id":"changes-in-version-1-21-1","dir":"Changelog","previous_headings":"","what":"Changes in version 1.21.8","title":"pRoloc 1.21","text":"Add fcol argument plotDist plot colour profiles <2018-08-09 Thu>","code":""},{"path":"https://lgatto.github.io/pRoloc/news/index.html","id":"changes-in-version-1-21-2","dir":"Changelog","previous_headings":"","what":"Changes in version 1.21.7","title":"pRoloc 1.21","text":"Use BiocManager vignette Fix bug plot2D: pass … hexbin <2018-08-02 Thu>","code":""},{"path":"https://lgatto.github.io/pRoloc/news/index.html","id":"changes-in-version-1-21-3","dir":"Changelog","previous_headings":"","what":"Changes in version 1.21.6","title":"pRoloc 1.21","text":"Use BiocManager installation instructions","code":""},{"path":"https://lgatto.github.io/pRoloc/news/index.html","id":"changes-in-version-1-21-4","dir":"Changelog","previous_headings":"","what":"Changes in version 1.21.5","title":"pRoloc 1.21","text":"Added new section Bayesian spatial proteomics vignette detailing mcmc output processing <2018-07-07 Sat>","code":""},{"path":"https://lgatto.github.io/pRoloc/news/index.html","id":"changes-in-version-1-21-5","dir":"Changelog","previous_headings":"","what":"Changes in version 1.21.4","title":"pRoloc 1.21","text":"Fix bugs tagmMcmcPredict, fcol ignored <2018-06-05 Tue> Order vignettes prefixing files numbers <2018-06-05 Tue>","code":""},{"path":"https://lgatto.github.io/pRoloc/news/index.html","id":"changes-in-version-1-21-6","dir":"Changelog","previous_headings":"","what":"Changes in version 1.21.3","title":"pRoloc 1.21","text":"New TAGM-MCMC generative model, contributed Oliver Crook <2018-05-18 Fri>","code":""},{"path":"https://lgatto.github.io/pRoloc/news/index.html","id":"changes-in-version-1-21-7","dir":"Changelog","previous_headings":"","what":"Changes in version 1.21.2","title":"pRoloc 1.21","text":"Version bump BiocStyle update: Vignette needed rebuilt bug fixed BiocStyle footnote rendering.","code":""},{"path":"https://lgatto.github.io/pRoloc/news/index.html","id":"changes-in-version-1-21-8","dir":"Changelog","previous_headings":"","what":"Changes in version 1.21.1","title":"pRoloc 1.21","text":"Fix bug higlightOnPlot missing fcol (see #105) <2018-05-03 Thu> New TAGM-MAP generative model, contributed Oliver Crook <2018-05-18 Fri> New plotEllipse function visualise assess TAGM models <2018-05-18 Fri>","code":""},{"path":[]},{"path":"https://lgatto.github.io/pRoloc/news/index.html","id":"changes-in-version-1-20","dir":"Changelog","previous_headings":"","what":"Changes in version 1.20.0","title":"pRoloc 1.20","text":"New Bioconductor release 3.7","code":""},{"path":[]},{"path":"https://lgatto.github.io/pRoloc/news/index.html","id":"changes-in-version-1-19","dir":"Changelog","previous_headings":"","what":"Changes in version 1.19.4","title":"pRoloc 1.19","text":"Fix regression bug knntl function <2018-04-12 Thu>","code":""},{"path":"https://lgatto.github.io/pRoloc/news/index.html","id":"changes-in-version-1-19-1","dir":"Changelog","previous_headings":"","what":"Changes in version 1.19.3","title":"pRoloc 1.19","text":"Use dplyr::left_join without attaching dplyr avoid collision Biobase::exprs dplyr::exprs <2018-04-04 Wed>. Typo warning install rgl <2018-03-27 Tue>","code":""},{"path":"https://lgatto.github.io/pRoloc/news/index.html","id":"changes-in-version-1-19-2","dir":"Changelog","previous_headings":"","what":"Changes in version 1.19.2","title":"pRoloc 1.19","text":"Fix bug QSep prevented set non-default fcol <2018-01-29 Mon>","code":""},{"path":"https://lgatto.github.io/pRoloc/news/index.html","id":"changes-in-version-1-19-3","dir":"Changelog","previous_headings":"","what":"Changes in version 1.19.1","title":"pRoloc 1.19","text":"Fix bug private dimred set appropriate number colnames <2017-11-07 Tue> New nipals method dimensionality reduction plot2D (closes issue #103) <2018-01-16 Tue>","code":""},{"path":"https://lgatto.github.io/pRoloc/news/index.html","id":"changes-in-version-1-19-4","dir":"Changelog","previous_headings":"","what":"Changes in version 1.19.0","title":"pRoloc 1.19","text":"Bioconductor devel 3.7","code":""},{"path":[]},{"path":"https://lgatto.github.io/pRoloc/news/index.html","id":"changes-in-version-1-18","dir":"Changelog","previous_headings":"","what":"Changes in version 1.18.0","title":"pRoloc 1.18","text":"Bioconductor release 3.6","code":""},{"path":[]},{"path":"https://lgatto.github.io/pRoloc/news/index.html","id":"changes-in-version-1-17","dir":"Changelog","previous_headings":"","what":"Changes in version 1.17.5","title":"pRoloc 1.17","text":"Filtering unique features running plot2D t-SNE method <2017-10-15 Sun>","code":""},{"path":"https://lgatto.github.io/pRoloc/news/index.html","id":"changes-in-version-1-17-1","dir":"Changelog","previous_headings":"","what":"Changes in version 1.17.4","title":"pRoloc 1.17","text":"Added new (private) dimred function computes dimensionality reduction <2017-06-05 Mon> Add F1000research workflow citations <2017-06-22 Thu> Classification functions now return classification score matrix classes single column fData, rather class fData column. <2017-09-01 Fri>","code":""},{"path":"https://lgatto.github.io/pRoloc/news/index.html","id":"changes-in-version-1-17-2","dir":"Changelog","previous_headings":"","what":"Changes in version 1.17.3","title":"pRoloc 1.17","text":"Convert vignettes Rmd html output <2017-05-25 Thu> Import, rather suggest Rtsne <2017-05-25 Thu>","code":""},{"path":"https://lgatto.github.io/pRoloc/news/index.html","id":"changes-in-version-1-17-3","dir":"Changelog","previous_headings":"","what":"Changes in version 1.17.2","title":"pRoloc 1.17","text":"phenoDisco speed improvements added support t-SNE <2017-05-19 Fri>","code":""},{"path":"https://lgatto.github.io/pRoloc/news/index.html","id":"changes-in-version-1-17-4","dir":"Changelog","previous_headings":"","what":"Changes in version 1.17.1","title":"pRoloc 1.17","text":"Support Rtsne’s new pca_center pca_scale arguments <2017-05-02 Tue>","code":""},{"path":"https://lgatto.github.io/pRoloc/news/index.html","id":"changes-in-version-1-17-5","dir":"Changelog","previous_headings":"","what":"Changes in version 1.17.0","title":"pRoloc 1.17","text":"Version bump Bioc devel 3.6","code":""}] diff --git a/sitemap.xml b/sitemap.xml index 2f1b7620..9e59417c 100644 --- a/sitemap.xml +++ b/sitemap.xml @@ -1,96 +1,96 @@ -/404.html -/CONDUCT.html -/articles/index.html -/articles/v01-pRoloc-tutorial.html -/articles/v02-pRoloc-ml.html -/articles/v03-pRoloc-bayesian.html -/articles/v04-pRoloc-goannotations.html -/articles/v05-pRoloc-transfer-learning.html -/authors.html -/index.html -/news/index.html -/reference/AnnotationParams-class.html -/reference/ClustDist-class.html -/reference/ClustDistList-class.html -/reference/GenRegRes-class.html -/reference/MCMCParams.html -/reference/MLearn-methods.html -/reference/MartInstance-class.html -/reference/QSep-class.html -/reference/SpatProtVis-class.html -/reference/addGoAnnotations.html -/reference/addLegend.html -/reference/addMarkers.html -/reference/checkFeatureNamesOverlap.html -/reference/checkFvarOverlap.html -/reference/chi2-methods.html -/reference/classWeights.html -/reference/clustDist.html -/reference/defunct.html -/reference/empPvalues.html -/reference/fDataToUnknown.html -/reference/filterBinMSnSet.html -/reference/filterMaxMarkers.html -/reference/filterMinMarkers.html -/reference/filterZeroCols.html -/reference/getGOFromFeatures.html -/reference/getMarkerClasses.html -/reference/getMarkers.html -/reference/getNormDist.html -/reference/getPredictions.html -/reference/getStockcol.html -/reference/goIdToTerm.html -/reference/highlightOnPlot.html -/reference/index.html -/reference/knnClassification.html -/reference/knnOptimisation.html -/reference/knntlClassification.html -/reference/knntlOptimisation.html -/reference/ksvmClassification.html -/reference/ksvmOptimisation.html -/reference/makeGoSet.html -/reference/markerMSnSet.html -/reference/markers.html -/reference/mcmc-helpers.html -/reference/minMarkers.html -/reference/mixing_posterior_check.html -/reference/move2Ds.html -/reference/mrkConsProfiles.html -/reference/mrkHClust.html -/reference/nbClassification.html -/reference/nbOptimisation.html -/reference/nicheMeans2D.html -/reference/nndist-methods.html -/reference/nnetClassification.html -/reference/nnetOptimisation.html -/reference/orderGoAnnotations.html -/reference/orgQuants.html -/reference/pRolocmarkers.html -/reference/perTurboClassification.html -/reference/perTurboOptimisation.html -/reference/phenoDisco.html -/reference/plot2D.html -/reference/plot2Ds.html -/reference/plotConsProfiles.html -/reference/plotDist.html -/reference/plotEllipse.html -/reference/plsdaClassification.html -/reference/plsdaOptimisation.html -/reference/rfClassification.html -/reference/rfOptimisation.html -/reference/sampleMSnSet.html -/reference/showGOEvidenceCodes.html -/reference/spatial2D.html -/reference/subsetMarkers.html -/reference/svmClassification.html -/reference/svmOptimisation.html -/reference/tagm-map.html -/reference/tagm-mcmc.html -/reference/testMSnSet.html -/reference/testMarkers.html -/reference/thetas.html -/reference/undocumented.html -/reference/zerosInBinMSnSet.html +https://lgatto.github.io/pRoloc/404.html +https://lgatto.github.io/pRoloc/CONDUCT.html +https://lgatto.github.io/pRoloc/articles/index.html +https://lgatto.github.io/pRoloc/articles/v01-pRoloc-tutorial.html +https://lgatto.github.io/pRoloc/articles/v02-pRoloc-ml.html +https://lgatto.github.io/pRoloc/articles/v03-pRoloc-bayesian.html +https://lgatto.github.io/pRoloc/articles/v04-pRoloc-goannotations.html +https://lgatto.github.io/pRoloc/articles/v05-pRoloc-transfer-learning.html +https://lgatto.github.io/pRoloc/authors.html +https://lgatto.github.io/pRoloc/index.html +https://lgatto.github.io/pRoloc/news/index.html +https://lgatto.github.io/pRoloc/reference/AnnotationParams-class.html +https://lgatto.github.io/pRoloc/reference/ClustDist-class.html +https://lgatto.github.io/pRoloc/reference/ClustDistList-class.html +https://lgatto.github.io/pRoloc/reference/GenRegRes-class.html +https://lgatto.github.io/pRoloc/reference/MCMCParams.html +https://lgatto.github.io/pRoloc/reference/MLearn-methods.html +https://lgatto.github.io/pRoloc/reference/MartInstance-class.html +https://lgatto.github.io/pRoloc/reference/QSep-class.html +https://lgatto.github.io/pRoloc/reference/SpatProtVis-class.html +https://lgatto.github.io/pRoloc/reference/addGoAnnotations.html +https://lgatto.github.io/pRoloc/reference/addLegend.html +https://lgatto.github.io/pRoloc/reference/addMarkers.html +https://lgatto.github.io/pRoloc/reference/checkFeatureNamesOverlap.html +https://lgatto.github.io/pRoloc/reference/checkFvarOverlap.html +https://lgatto.github.io/pRoloc/reference/chi2-methods.html +https://lgatto.github.io/pRoloc/reference/classWeights.html +https://lgatto.github.io/pRoloc/reference/clustDist.html +https://lgatto.github.io/pRoloc/reference/defunct.html +https://lgatto.github.io/pRoloc/reference/empPvalues.html +https://lgatto.github.io/pRoloc/reference/fDataToUnknown.html +https://lgatto.github.io/pRoloc/reference/filterBinMSnSet.html +https://lgatto.github.io/pRoloc/reference/filterMaxMarkers.html +https://lgatto.github.io/pRoloc/reference/filterMinMarkers.html +https://lgatto.github.io/pRoloc/reference/filterZeroCols.html +https://lgatto.github.io/pRoloc/reference/getGOFromFeatures.html +https://lgatto.github.io/pRoloc/reference/getMarkerClasses.html +https://lgatto.github.io/pRoloc/reference/getMarkers.html +https://lgatto.github.io/pRoloc/reference/getNormDist.html +https://lgatto.github.io/pRoloc/reference/getPredictions.html +https://lgatto.github.io/pRoloc/reference/getStockcol.html +https://lgatto.github.io/pRoloc/reference/goIdToTerm.html +https://lgatto.github.io/pRoloc/reference/highlightOnPlot.html +https://lgatto.github.io/pRoloc/reference/index.html +https://lgatto.github.io/pRoloc/reference/knnClassification.html +https://lgatto.github.io/pRoloc/reference/knnOptimisation.html +https://lgatto.github.io/pRoloc/reference/knntlClassification.html +https://lgatto.github.io/pRoloc/reference/knntlOptimisation.html +https://lgatto.github.io/pRoloc/reference/ksvmClassification.html +https://lgatto.github.io/pRoloc/reference/ksvmOptimisation.html +https://lgatto.github.io/pRoloc/reference/makeGoSet.html +https://lgatto.github.io/pRoloc/reference/markerMSnSet.html +https://lgatto.github.io/pRoloc/reference/markers.html +https://lgatto.github.io/pRoloc/reference/mcmc-helpers.html +https://lgatto.github.io/pRoloc/reference/minMarkers.html +https://lgatto.github.io/pRoloc/reference/mixing_posterior_check.html +https://lgatto.github.io/pRoloc/reference/move2Ds.html +https://lgatto.github.io/pRoloc/reference/mrkConsProfiles.html +https://lgatto.github.io/pRoloc/reference/mrkHClust.html +https://lgatto.github.io/pRoloc/reference/nbClassification.html +https://lgatto.github.io/pRoloc/reference/nbOptimisation.html +https://lgatto.github.io/pRoloc/reference/nicheMeans2D.html +https://lgatto.github.io/pRoloc/reference/nndist-methods.html +https://lgatto.github.io/pRoloc/reference/nnetClassification.html +https://lgatto.github.io/pRoloc/reference/nnetOptimisation.html +https://lgatto.github.io/pRoloc/reference/orderGoAnnotations.html +https://lgatto.github.io/pRoloc/reference/orgQuants.html +https://lgatto.github.io/pRoloc/reference/pRolocmarkers.html +https://lgatto.github.io/pRoloc/reference/perTurboClassification.html +https://lgatto.github.io/pRoloc/reference/perTurboOptimisation.html +https://lgatto.github.io/pRoloc/reference/phenoDisco.html +https://lgatto.github.io/pRoloc/reference/plot2D.html +https://lgatto.github.io/pRoloc/reference/plot2Ds.html +https://lgatto.github.io/pRoloc/reference/plotConsProfiles.html +https://lgatto.github.io/pRoloc/reference/plotDist.html +https://lgatto.github.io/pRoloc/reference/plotEllipse.html +https://lgatto.github.io/pRoloc/reference/plsdaClassification.html +https://lgatto.github.io/pRoloc/reference/plsdaOptimisation.html +https://lgatto.github.io/pRoloc/reference/rfClassification.html +https://lgatto.github.io/pRoloc/reference/rfOptimisation.html +https://lgatto.github.io/pRoloc/reference/sampleMSnSet.html +https://lgatto.github.io/pRoloc/reference/showGOEvidenceCodes.html +https://lgatto.github.io/pRoloc/reference/spatial2D.html +https://lgatto.github.io/pRoloc/reference/subsetMarkers.html +https://lgatto.github.io/pRoloc/reference/svmClassification.html +https://lgatto.github.io/pRoloc/reference/svmOptimisation.html +https://lgatto.github.io/pRoloc/reference/tagm-map.html +https://lgatto.github.io/pRoloc/reference/tagm-mcmc.html +https://lgatto.github.io/pRoloc/reference/testMSnSet.html +https://lgatto.github.io/pRoloc/reference/testMarkers.html +https://lgatto.github.io/pRoloc/reference/thetas.html +https://lgatto.github.io/pRoloc/reference/undocumented.html +https://lgatto.github.io/pRoloc/reference/zerosInBinMSnSet.html