# Create a clipboard button on the rendered HTML page
source(here::here("clipboard.R")); clipboard
# Set seed for reproducibility
set.seed(1982) 
# Set global options for all code chunks
knitr::opts_chunk$set(
  # Disable messages printed by R code chunks
  message = FALSE,    
  # Disable warnings printed by R code chunks
  warning = FALSE,    
  # Show R code within code chunks in output
  echo = TRUE,        
  # Include both R code and its results in output
  include = TRUE,     
  # Evaluate R code chunks
  eval = TRUE,       
  # Enable caching of R code chunks for faster rendering
  cache = FALSE,      
  # Align figures in the center of the output
  fig.align = "center",
  # Enable retina display for high-resolution figures
  retina = 2,
  # Show errors in the output instead of stopping rendering
  error = TRUE,
  # Do not collapse code and output into a single block
  collapse = FALSE
)
# Start the figure counter
fig_count <- 0
# Define the captioner function
captioner <- function(caption) {
  fig_count <<- fig_count + 1
  paste0("Figure ", fig_count, ": ", caption)
}
library(sf)
library(tmap)
library(mapview)
library(dplyr)
# set mapview options
mapviewOptions(basemaps = c("CartoDB.Positron",
                            "OpenStreetMap",
                            "Esri.WorldImagery",
                            "OpenTopoMap"))

1 Introduction

In this section, we will explore the amenities available in the Geodatabase Nacional of Ecuador. The data was obtained from this website. On the page, go to the bottom section (called Cartografia Historica) of the page and click on 2022 and then on the Descarga de Marco Geoestadístico 2021 button. This will download a file named GEODATABASE_NACIONAL_2021.zip. Unzip the file and you will find a folder named GEODATABASE_NACIONAL_2021. Inside this folder, there is a file named GEODATABASE_NACIONAL_2021.gpkg, which is a geopackage file containing several (9) layers. Using the manabi_area_simple.RDS file, I filtered the contents of each layer.


By the way, the number of the layers are:

LAYERS_name <- c("viv_p", "ejes_l", "zon_a", "sec_a", "loc_p", "ingresos_l", "ca04_a", "aream_a", "man_a")

Most of the layers do not contain useful information for our purposes. Here are some details about the layers:

  • aream_a: This layer seems to contain the head of the administrative areas as polygons, such as provinces, cantons, and parishes.
  • loc_p: This layer contains the locations of small towns and villages, apparently.
  • ca04_a: This layer contains the locations of amenities, such as schools, hospitals, and other public buildings.
area_of_interest <- readRDS("clean_data/manabi_area_simple.RDS")
p <- mapview(
  area_of_interest,
  zcol = "geometry",        # attribute used for fill
  alpha.regions = 0,    # fill transparency
  color = "black",        # border color
  alpha = 0.4,            # border transparency
  legend = FALSE           # remove legend
)

2 layer aream_a

aream_a <- readRDS("clean_data/aream_a_cropped_to_manabi.RDS")
mapview(
  aream_a,
  zcol = "tipo_aream",        # attribute used for fill
  alpha.regions = 0.4,    # fill transparency
  color = "black",        # border color
  alpha = 1,            # border transparency
  legend = TRUE           # remove legend
) + p

3 layer loc_p

loc_p <- readRDS("clean_data/loc_p_cropped_to_manabi.RDS")
mapview(
  loc_p,
  zcol = "n_loc",        # attribute used for fill
  alpha.regions = 0.4,    # fill transparency
  color = "black",        # border color
  alpha = 0.2,            # border transparency
  cex = 1.5, #           points size
  
  legend = FALSE           # remove legend
) + p

4 layer ca04_a

# ca04_a <- readRDS("clean_data/ca04_a_cropped_to_manabi.RDS")
# amn <- unique(ca04_a$cod_otros) # check the unique values of the cod_otros column
# amn
#  [1] NA                         "EDIFICIO EDUCACIONAL"     "TEMPLO RELIGIOSO"        
#  [4] "CASA COMUNAL"             "EDIFICIO IMPORTANTE"      "EDIFICIO DE REFERENCIA"  
#  [7] "CAMPO DEPORTIVO"          "CEMENTERIO"               "GASOLINERA"              
# [10] "ESTABLECIMIENTO DE SALUD" "PARQUE"                   "PLAZA"                   
# [13] "TANQUE DE AGUA"           "EDIFICIO REFERENCIA" 
# for (i in 2:length(amn)) {
#   aux <- filter(ca04_a, cod_otros == amn[i])
#   saveRDS(aux, paste0("clean_data/amn_", gsub(" ", "_", amn[i]), ".RDS"))
# }

Here we can see the EDIFICIO EDUCACIONAL amenities.

amn_EDIFICIO_EDUCACIONAL <- readRDS("clean_data/amn_EDIFICIO_EDUCACIONAL.RDS")
mapview(
    amn_EDIFICIO_EDUCACIONAL,
    zcol = "nom_edif",        # attribute used for fill
    alpha.regions = 0.4,    # fill transparency
    color = "black",        # border color
    alpha = 1,            # border transparency
    legend = FALSE           # remove legend
  ) + p

5 References

grateful::cite_packages(output = "paragraph", out.dir = ".")

We used R version 4.5.0 (R Core Team 2025) and the following R packages: here v. 1.0.1 (Müller 2020), htmltools v. 0.5.8.1 (Cheng et al. 2024), knitr v. 1.50 (Xie 2014, 2015, 2025), mapview v. 2.11.2 (Appelhans et al. 2023), osmextract v. 0.5.3 (Gilardi and Lovelace 2025), plotly v. 4.11.0 (Sievert 2020), renv v. 1.1.5 (Ushey and Wickham 2025), rmarkdown v. 2.29 (Xie, Allaire, and Grolemund 2018; Xie, Dervieux, and Riederer 2020; Allaire et al. 2024), sf v. 1.0.21 (Pebesma 2018; Pebesma and Bivand 2023), tidyverse v. 2.0.0 (Wickham et al. 2019), tmap v. 4.1 (Tennekes 2018), xaringanExtra v. 0.8.0 (Aden-Buie and Warkentin 2024).

Aden-Buie, Garrick, and Matthew T. Warkentin. 2024. xaringanExtra: Extras and Extensions for xaringan Slides. https://doi.org/10.32614/CRAN.package.xaringanExtra.
Allaire, JJ, Yihui Xie, Christophe Dervieux, Jonathan McPherson, Javier Luraschi, Kevin Ushey, Aron Atkins, et al. 2024. rmarkdown: Dynamic Documents for r. https://github.com/rstudio/rmarkdown.
Appelhans, Tim, Florian Detsch, Christoph Reudenbach, and Stefan Woellauer. 2023. mapview: Interactive Viewing of Spatial Data in r. https://github.com/r-spatial/mapview.
Cheng, Joe, Carson Sievert, Barret Schloerke, Winston Chang, Yihui Xie, and Jeff Allen. 2024. htmltools: Tools for HTML. https://github.com/rstudio/htmltools.
Gilardi, Andrea, and Robin Lovelace. 2025. osmextract: Download and Import Open Street Map Data Extracts. https://docs.ropensci.org/osmextract/.
Müller, Kirill. 2020. here: A Simpler Way to Find Your Files. https://doi.org/10.32614/CRAN.package.here.
Pebesma, Edzer. 2018. Simple Features for R: Standardized Support for Spatial Vector Data.” The R Journal 10 (1): 439–46. https://doi.org/10.32614/RJ-2018-009.
Pebesma, Edzer, and Roger Bivand. 2023. Spatial Data Science: With applications in R. Chapman and Hall/CRC. https://doi.org/10.1201/9780429459016.
R Core Team. 2025. R: A Language and Environment for Statistical Computing. Vienna, Austria: R Foundation for Statistical Computing. https://www.R-project.org/.
Sievert, Carson. 2020. Interactive Web-Based Data Visualization with r, Plotly, and Shiny. Chapman; Hall/CRC. https://plotly-r.com.
Tennekes, Martijn. 2018. tmap: Thematic Maps in R.” Journal of Statistical Software 84 (6): 1–39. https://doi.org/10.18637/jss.v084.i06.
Ushey, Kevin, and Hadley Wickham. 2025. renv: Project Environments. https://rstudio.github.io/renv/.
Wickham, Hadley, Mara Averick, Jennifer Bryan, Winston Chang, Lucy D’Agostino McGowan, Romain François, Garrett Grolemund, et al. 2019. “Welcome to the tidyverse.” Journal of Open Source Software 4 (43): 1686. https://doi.org/10.21105/joss.01686.
Xie, Yihui. 2014. knitr: A Comprehensive Tool for Reproducible Research in R.” In Implementing Reproducible Computational Research, edited by Victoria Stodden, Friedrich Leisch, and Roger D. Peng. Chapman; Hall/CRC.
———. 2015. Dynamic Documents with R and Knitr. 2nd ed. Boca Raton, Florida: Chapman; Hall/CRC. https://yihui.org/knitr/.
———. 2025. knitr: A General-Purpose Package for Dynamic Report Generation in R. https://yihui.org/knitr/.
Xie, Yihui, J. J. Allaire, and Garrett Grolemund. 2018. R Markdown: The Definitive Guide. Boca Raton, Florida: Chapman; Hall/CRC. https://bookdown.org/yihui/rmarkdown.
Xie, Yihui, Christophe Dervieux, and Emily Riederer. 2020. R Markdown Cookbook. Boca Raton, Florida: Chapman; Hall/CRC. https://bookdown.org/yihui/rmarkdown-cookbook.
LS0tCnRpdGxlOiAiQW1lbml0aWVzIGZyb20gR2VvZGF0YWJhc2UgTmFjaW9uYWwiCmRhdGU6ICJMYXN0IG1vZGlmaWVkOiBgciBmb3JtYXQoU3lzLnRpbWUoKSwgJyVkLSVtLSVZLicpYCIKb3V0cHV0OgogIGh0bWxfZG9jdW1lbnQ6CiAgICBtYXRoamF4OiAiaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L25wbS9tYXRoamF4QDMvZXM1L3RleC1tbWwtY2h0bWwuanMiCiAgICBoaWdobGlnaHQ6IHB5Z21lbnRzCiAgICB0aGVtZTogZmxhdGx5CiAgICBjb2RlX2ZvbGRpbmc6IHNob3cgIyBjbGFzcy5zb3VyY2UgPSAiZm9sZC1oaWRlIiB0byBoaWRlIGNvZGUgYW5kIGFkZCBhIGJ1dHRvbiB0byBzaG93IGl0CiAgICBkZl9wcmludDogcGFnZWQKICAgIHRvYzogdHJ1ZQogICAgdG9jX2Zsb2F0OgogICAgICBjb2xsYXBzZWQ6IHRydWUKICAgICAgc21vb3RoX3Njcm9sbDogdHJ1ZQogICAgbnVtYmVyX3NlY3Rpb25zOiB0cnVlCiAgICBmaWdfY2FwdGlvbjogdHJ1ZQogICAgY29kZV9kb3dubG9hZDogdHJ1ZQogICAgY3NzOiB2aXN1YWwuY3NzCmFsd2F5c19hbGxvd19odG1sOiB0cnVlCmJpYmxpb2dyYXBoeTogCiAgLSByZWZlcmVuY2VzLmJpYgogIC0gZ3JhdGVmdWwtcmVmcy5iaWIKLS0tCgpgYGB7cn0KIyBDcmVhdGUgYSBjbGlwYm9hcmQgYnV0dG9uIG9uIHRoZSByZW5kZXJlZCBIVE1MIHBhZ2UKc291cmNlKGhlcmU6OmhlcmUoImNsaXBib2FyZC5SIikpOyBjbGlwYm9hcmQKIyBTZXQgc2VlZCBmb3IgcmVwcm9kdWNpYmlsaXR5CnNldC5zZWVkKDE5ODIpIAojIFNldCBnbG9iYWwgb3B0aW9ucyBmb3IgYWxsIGNvZGUgY2h1bmtzCmtuaXRyOjpvcHRzX2NodW5rJHNldCgKICAjIERpc2FibGUgbWVzc2FnZXMgcHJpbnRlZCBieSBSIGNvZGUgY2h1bmtzCiAgbWVzc2FnZSA9IEZBTFNFLCAgICAKICAjIERpc2FibGUgd2FybmluZ3MgcHJpbnRlZCBieSBSIGNvZGUgY2h1bmtzCiAgd2FybmluZyA9IEZBTFNFLCAgICAKICAjIFNob3cgUiBjb2RlIHdpdGhpbiBjb2RlIGNodW5rcyBpbiBvdXRwdXQKICBlY2hvID0gVFJVRSwgICAgICAgIAogICMgSW5jbHVkZSBib3RoIFIgY29kZSBhbmQgaXRzIHJlc3VsdHMgaW4gb3V0cHV0CiAgaW5jbHVkZSA9IFRSVUUsICAgICAKICAjIEV2YWx1YXRlIFIgY29kZSBjaHVua3MKICBldmFsID0gVFJVRSwgICAgICAgCiAgIyBFbmFibGUgY2FjaGluZyBvZiBSIGNvZGUgY2h1bmtzIGZvciBmYXN0ZXIgcmVuZGVyaW5nCiAgY2FjaGUgPSBGQUxTRSwgICAgICAKICAjIEFsaWduIGZpZ3VyZXMgaW4gdGhlIGNlbnRlciBvZiB0aGUgb3V0cHV0CiAgZmlnLmFsaWduID0gImNlbnRlciIsCiAgIyBFbmFibGUgcmV0aW5hIGRpc3BsYXkgZm9yIGhpZ2gtcmVzb2x1dGlvbiBmaWd1cmVzCiAgcmV0aW5hID0gMiwKICAjIFNob3cgZXJyb3JzIGluIHRoZSBvdXRwdXQgaW5zdGVhZCBvZiBzdG9wcGluZyByZW5kZXJpbmcKICBlcnJvciA9IFRSVUUsCiAgIyBEbyBub3QgY29sbGFwc2UgY29kZSBhbmQgb3V0cHV0IGludG8gYSBzaW5nbGUgYmxvY2sKICBjb2xsYXBzZSA9IEZBTFNFCikKIyBTdGFydCB0aGUgZmlndXJlIGNvdW50ZXIKZmlnX2NvdW50IDwtIDAKIyBEZWZpbmUgdGhlIGNhcHRpb25lciBmdW5jdGlvbgpjYXB0aW9uZXIgPC0gZnVuY3Rpb24oY2FwdGlvbikgewogIGZpZ19jb3VudCA8PC0gZmlnX2NvdW50ICsgMQogIHBhc3RlMCgiRmlndXJlICIsIGZpZ19jb3VudCwgIjogIiwgY2FwdGlvbikKfQpgYGAKCgpgYGB7cn0KbGlicmFyeShzZikKbGlicmFyeSh0bWFwKQpsaWJyYXJ5KG1hcHZpZXcpCmxpYnJhcnkoZHBseXIpCiMgc2V0IG1hcHZpZXcgb3B0aW9ucwptYXB2aWV3T3B0aW9ucyhiYXNlbWFwcyA9IGMoIkNhcnRvREIuUG9zaXRyb24iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIk9wZW5TdHJlZXRNYXAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIkVzcmkuV29ybGRJbWFnZXJ5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJPcGVuVG9wb01hcCIpKQpgYGAKCiMgSW50cm9kdWN0aW9uCgpJbiB0aGlzIHNlY3Rpb24sIHdlIHdpbGwgZXhwbG9yZSB0aGUgYW1lbml0aWVzIGF2YWlsYWJsZSBpbiB0aGUgR2VvZGF0YWJhc2UgTmFjaW9uYWwgb2YgRWN1YWRvci4gVGhlIGRhdGEgd2FzIG9idGFpbmVkIGZyb20gdGhpcyBbd2Vic2l0ZV0oaHR0cHM6Ly93d3cuZWN1YWRvcmVuY2lmcmFzLmdvYi5lYy9kb2N1bWVudG9zL3dlYi1pbmVjL0dlb2dyYWZpYV9Fc3RhZGlzdGljYS9NaWNyb3NpdGlvX2dlb3BvcnRhbC9pbmRleC5odG1sKS4gT24gdGhlIHBhZ2UsIGdvIHRvIHRoZSBib3R0b20gc2VjdGlvbiAoY2FsbGVkIENhcnRvZ3JhZmlhIEhpc3RvcmljYSkgb2YgdGhlIHBhZ2UgYW5kIGNsaWNrIG9uIGAyMDIyYCBhbmQgdGhlbiBvbiB0aGUgYERlc2NhcmdhIGRlIE1hcmNvIEdlb2VzdGFkw61zdGljbyAyMDIxYCBidXR0b24uIFRoaXMgd2lsbCBkb3dubG9hZCBhIGZpbGUgbmFtZWQgYEdFT0RBVEFCQVNFX05BQ0lPTkFMXzIwMjEuemlwYC4gVW56aXAgdGhlIGZpbGUgYW5kIHlvdSB3aWxsIGZpbmQgYSBmb2xkZXIgbmFtZWQgYEdFT0RBVEFCQVNFX05BQ0lPTkFMXzIwMjFgLiBJbnNpZGUgdGhpcyBmb2xkZXIsIHRoZXJlIGlzIGEgZmlsZSBuYW1lZCBgR0VPREFUQUJBU0VfTkFDSU9OQUxfMjAyMS5ncGtnYCwgd2hpY2ggaXMgYSBnZW9wYWNrYWdlIGZpbGUgY29udGFpbmluZyBzZXZlcmFsICg5KSBsYXllcnMuIFVzaW5nIHRoZSBbYG1hbmFiaV9hcmVhX3NpbXBsZS5SRFNgXShodHRwczovL2dpdGh1Yi5jb20vbGVuaW5yYWZhZWxyaWVyYXNlZ3VyYS9tYW5hYmkvYmxvYi9tYWluL2NsZWFuX2RhdGEvbWFuYWJpX2FyZWFfc2ltcGxlLlJEUykgZmlsZSwgSSBmaWx0ZXJlZCB0aGUgY29udGVudHMgb2YgZWFjaCBsYXllci4KCi0tLQoKQnkgdGhlIHdheSwgdGhlIG51bWJlciBvZiB0aGUgbGF5ZXJzIGFyZToKCmBgYHtyfQpMQVlFUlNfbmFtZSA8LSBjKCJ2aXZfcCIsICJlamVzX2wiLCAiem9uX2EiLCAic2VjX2EiLCAibG9jX3AiLCAiaW5ncmVzb3NfbCIsICJjYTA0X2EiLCAiYXJlYW1fYSIsICJtYW5fYSIpCmBgYAoKLS0tCgpNb3N0IG9mIHRoZSBsYXllcnMgZG8gbm90IGNvbnRhaW4gdXNlZnVsIGluZm9ybWF0aW9uIGZvciBvdXIgcHVycG9zZXMuIEhlcmUgYXJlIHNvbWUgZGV0YWlscyBhYm91dCB0aGUgbGF5ZXJzOgoKLSBgYXJlYW1fYWA6IFRoaXMgbGF5ZXIgc2VlbXMgdG8gY29udGFpbiB0aGUgaGVhZCBvZiB0aGUgYWRtaW5pc3RyYXRpdmUgYXJlYXMgYXMgcG9seWdvbnMsIHN1Y2ggYXMgcHJvdmluY2VzLCBjYW50b25zLCBhbmQgcGFyaXNoZXMuCi0gYGxvY19wYDogVGhpcyBsYXllciBjb250YWlucyB0aGUgbG9jYXRpb25zIG9mIHNtYWxsIHRvd25zIGFuZCB2aWxsYWdlcywgYXBwYXJlbnRseS4KLSBgY2EwNF9hYDogVGhpcyBsYXllciBjb250YWlucyB0aGUgbG9jYXRpb25zIG9mIGFtZW5pdGllcywgc3VjaCBhcyBzY2hvb2xzLCBob3NwaXRhbHMsIGFuZCBvdGhlciBwdWJsaWMgYnVpbGRpbmdzLgoKCmBgYHtyfQphcmVhX29mX2ludGVyZXN0IDwtIHJlYWRSRFMoImNsZWFuX2RhdGEvbWFuYWJpX2FyZWFfc2ltcGxlLlJEUyIpCnAgPC0gbWFwdmlldygKICBhcmVhX29mX2ludGVyZXN0LAogIHpjb2wgPSAiZ2VvbWV0cnkiLCAgICAgICAgIyBhdHRyaWJ1dGUgdXNlZCBmb3IgZmlsbAogIGFscGhhLnJlZ2lvbnMgPSAwLCAgICAjIGZpbGwgdHJhbnNwYXJlbmN5CiAgY29sb3IgPSAiYmxhY2siLCAgICAgICAgIyBib3JkZXIgY29sb3IKICBhbHBoYSA9IDAuNCwgICAgICAgICAgICAjIGJvcmRlciB0cmFuc3BhcmVuY3kKICBsZWdlbmQgPSBGQUxTRSAgICAgICAgICAgIyByZW1vdmUgbGVnZW5kCikKYGBgCgojIGxheWVyIGBhcmVhbV9hYAoKCgpgYGB7ciwgb3V0LndpZHRoID0gIjEwMCUiLCBmaWcuY2FwID0gY2FwdGlvbmVyKCJBcmVhIG9mIHRoZSBoZWFkIG9mIHRoZSBhZG1pbmlzdHJhdGl2ZSB1bml0cy4iKX0KYXJlYW1fYSA8LSByZWFkUkRTKCJjbGVhbl9kYXRhL2FyZWFtX2FfY3JvcHBlZF90b19tYW5hYmkuUkRTIikKbWFwdmlldygKICBhcmVhbV9hLAogIHpjb2wgPSAidGlwb19hcmVhbSIsICAgICAgICAjIGF0dHJpYnV0ZSB1c2VkIGZvciBmaWxsCiAgYWxwaGEucmVnaW9ucyA9IDAuNCwgICAgIyBmaWxsIHRyYW5zcGFyZW5jeQogIGNvbG9yID0gImJsYWNrIiwgICAgICAgICMgYm9yZGVyIGNvbG9yCiAgYWxwaGEgPSAxLCAgICAgICAgICAgICMgYm9yZGVyIHRyYW5zcGFyZW5jeQogIGxlZ2VuZCA9IFRSVUUgICAgICAgICAgICMgcmVtb3ZlIGxlZ2VuZAopICsgcApgYGAKCiMgbGF5ZXIgYGxvY19wYAoKCmBgYHtyLCBvdXQud2lkdGggPSAiMTAwJSIsIGZpZy5jYXAgPSBjYXB0aW9uZXIoIlNtYWxsIHRvd25zIGFuZCB2aWxsYWdlcywgYXBwYXJlbnRseS4iKX0KbG9jX3AgPC0gcmVhZFJEUygiY2xlYW5fZGF0YS9sb2NfcF9jcm9wcGVkX3RvX21hbmFiaS5SRFMiKQptYXB2aWV3KAogIGxvY19wLAogIHpjb2wgPSAibl9sb2MiLCAgICAgICAgIyBhdHRyaWJ1dGUgdXNlZCBmb3IgZmlsbAogIGFscGhhLnJlZ2lvbnMgPSAwLjQsICAgICMgZmlsbCB0cmFuc3BhcmVuY3kKICBjb2xvciA9ICJibGFjayIsICAgICAgICAjIGJvcmRlciBjb2xvcgogIGFscGhhID0gMC4yLCAgICAgICAgICAgICMgYm9yZGVyIHRyYW5zcGFyZW5jeQogIGNleCA9IDEuNSwgIyAgICAgICAgICAgcG9pbnRzIHNpemUKICAKICBsZWdlbmQgPSBGQUxTRSAgICAgICAgICAgIyByZW1vdmUgbGVnZW5kCikgKyBwCmBgYAoKCiMgbGF5ZXIgYGNhMDRfYWAKCmBgYHtyfQojIGNhMDRfYSA8LSByZWFkUkRTKCJjbGVhbl9kYXRhL2NhMDRfYV9jcm9wcGVkX3RvX21hbmFiaS5SRFMiKQojIGFtbiA8LSB1bmlxdWUoY2EwNF9hJGNvZF9vdHJvcykgIyBjaGVjayB0aGUgdW5pcXVlIHZhbHVlcyBvZiB0aGUgY29kX290cm9zIGNvbHVtbgojIGFtbgojICBbMV0gTkEgICAgICAgICAgICAgICAgICAgICAgICAgIkVESUZJQ0lPIEVEVUNBQ0lPTkFMIiAgICAgIlRFTVBMTyBSRUxJR0lPU08iICAgICAgICAKIyAgWzRdICJDQVNBIENPTVVOQUwiICAgICAgICAgICAgICJFRElGSUNJTyBJTVBPUlRBTlRFIiAgICAgICJFRElGSUNJTyBERSBSRUZFUkVOQ0lBIiAgCiMgIFs3XSAiQ0FNUE8gREVQT1JUSVZPIiAgICAgICAgICAiQ0VNRU5URVJJTyIgICAgICAgICAgICAgICAiR0FTT0xJTkVSQSIgICAgICAgICAgICAgIAojIFsxMF0gIkVTVEFCTEVDSU1JRU5UTyBERSBTQUxVRCIgIlBBUlFVRSIgICAgICAgICAgICAgICAgICAgIlBMQVpBIiAgICAgICAgICAgICAgICAgICAKIyBbMTNdICJUQU5RVUUgREUgQUdVQSIgICAgICAgICAgICJFRElGSUNJTyBSRUZFUkVOQ0lBIiAKIyBmb3IgKGkgaW4gMjpsZW5ndGgoYW1uKSkgewojICAgYXV4IDwtIGZpbHRlcihjYTA0X2EsIGNvZF9vdHJvcyA9PSBhbW5baV0pCiMgICBzYXZlUkRTKGF1eCwgcGFzdGUwKCJjbGVhbl9kYXRhL2Ftbl8iLCBnc3ViKCIgIiwgIl8iLCBhbW5baV0pLCAiLlJEUyIpKQojIH0KYGBgCgpIZXJlIHdlIGNhbiBzZWUgdGhlIGBFRElGSUNJTyBFRFVDQUNJT05BTGAgYW1lbml0aWVzLgoKYGBge3IsIG91dC53aWR0aCA9ICIxMDAlIiwgZmlnLmNhcCA9IGNhcHRpb25lcigiRWR1Y2F0aW9uYWwgYnVpbGRpbmdzLiIpfQphbW5fRURJRklDSU9fRURVQ0FDSU9OQUwgPC0gcmVhZFJEUygiY2xlYW5fZGF0YS9hbW5fRURJRklDSU9fRURVQ0FDSU9OQUwuUkRTIikKbWFwdmlldygKICAgIGFtbl9FRElGSUNJT19FRFVDQUNJT05BTCwKICAgIHpjb2wgPSAibm9tX2VkaWYiLCAgICAgICAgIyBhdHRyaWJ1dGUgdXNlZCBmb3IgZmlsbAogICAgYWxwaGEucmVnaW9ucyA9IDAuNCwgICAgIyBmaWxsIHRyYW5zcGFyZW5jeQogICAgY29sb3IgPSAiYmxhY2siLCAgICAgICAgIyBib3JkZXIgY29sb3IKICAgIGFscGhhID0gMSwgICAgICAgICAgICAjIGJvcmRlciB0cmFuc3BhcmVuY3kKICAgIGxlZ2VuZCA9IEZBTFNFICAgICAgICAgICAjIHJlbW92ZSBsZWdlbmQKICApICsgcApgYGAKCgoKCiMgUmVmZXJlbmNlcyAKCmBgYHtyfQpncmF0ZWZ1bDo6Y2l0ZV9wYWNrYWdlcyhvdXRwdXQgPSAicGFyYWdyYXBoIiwgb3V0LmRpciA9ICIuIikKYGBgCgoKCgo=