Packages

library(dplyr)
Warning: package ‘dplyr’ was built under R version 4.3.3
Attaching package: ‘dplyr’

The following objects are masked from ‘package:raster’:

    intersect, select, union

The following objects are masked from ‘package:stats’:

    filter, lag

The following objects are masked from ‘package:base’:

    intersect, setdiff, setequal, union
library(ggplot2)
library(ggh4x)#grafico

Attaching package: ‘ggh4x’

The following object is masked from ‘package:ggplot2’:

    guide_axis_logticks
library(geobr) #pacote do ibge para polignos do BR
Registered S3 method overwritten by 'data.table':
  method           from
  print.data.table     
library(elevatr) #Haster de relevo br
elevatr v0.99.0 NOTE: Version 0.99.0 of 'elevatr' uses 'sf' and 'terra'.  Use 
of the 'sp', 'raster', and underlying 'rgdal' packages by 'elevatr' is being 
deprecated; however, get_elev_raster continues to return a RasterLayer.  This 
will be dropped in future versions, so please plan accordingly.
library(sp) #Polignos de Sao Paulo
library(sf) #vinculado ao ggplot2
Warning: package ‘sf’ was built under R version 4.3.3Linking to GEOS 3.11.2, GDAL 3.8.2, PROJ 9.3.1; sf_use_s2() is TRUE
library(cowplot)#combinar varios graficos
library(ggspatial) #colocar rosa dos ventos
Warning: package ‘ggspatial’ was built under R version 4.3.3

Experimental site

Data

BRA2 = read_country()
Using year 2010

Downloading: 1.7 kB     
Downloading: 1.7 kB     
Downloading: 1.7 kB     
Downloading: 1.7 kB     
Downloading: 58 kB     
Downloading: 58 kB     
Downloading: 58 kB     
Downloading: 58 kB     
Downloading: 67 kB     
Downloading: 67 kB     
Downloading: 67 kB     
Downloading: 67 kB     
Downloading: 120 kB     
Downloading: 120 kB     
Downloading: 130 kB     
Downloading: 130 kB     
Downloading: 130 kB     
Downloading: 130 kB     
Downloading: 190 kB     
Downloading: 190 kB     
Downloading: 200 kB     
Downloading: 200 kB     
Downloading: 200 kB     
Downloading: 200 kB     
Downloading: 220 kB     
Downloading: 220 kB     
Downloading: 250 kB     
Downloading: 250 kB     
Downloading: 260 kB     
Downloading: 260 kB     
Downloading: 260 kB     
Downloading: 260 kB     
Downloading: 280 kB     
Downloading: 280 kB     
Downloading: 310 kB     
Downloading: 310 kB     
Downloading: 330 kB     
Downloading: 330 kB     
Downloading: 330 kB     
Downloading: 330 kB     
Downloading: 340 kB     
Downloading: 340 kB     
Downloading: 370 kB     
Downloading: 370 kB     
Downloading: 390 kB     
Downloading: 390 kB     
Downloading: 390 kB     
Downloading: 390 kB     
Downloading: 410 kB     
Downloading: 410 kB     
Downloading: 430 kB     
Downloading: 430 kB     
Downloading: 440 kB     
Downloading: 440 kB     
Downloading: 440 kB     
Downloading: 440 kB     
states = read_state()
Using year 2010

  |                                                                                                         
  |                                                                                                   |   0%
  |                                                                                                         
  |====                                                                                               |   4%
  |                                                                                                         
  |=======                                                                                            |   7%
  |                                                                                                         
  |===========                                                                                        |  11%
  |                                                                                                         
  |===============                                                                                    |  15%
  |                                                                                                         
  |==================                                                                                 |  19%
  |                                                                                                         
  |======================                                                                             |  22%
  |                                                                                                         
  |==========================                                                                         |  26%
  |                                                                                                         
  |=============================                                                                      |  30%
  |                                                                                                         
  |=================================                                                                  |  33%
  |                                                                                                         
  |=====================================                                                              |  37%
  |                                                                                                         
  |========================================                                                           |  41%
  |                                                                                                         
  |============================================                                                       |  44%
  |                                                                                                         
  |================================================                                                   |  48%
  |                                                                                                         
  |===================================================                                                |  52%
  |                                                                                                         
  |=======================================================                                            |  56%
  |                                                                                                         
  |===========================================================                                        |  59%
  |                                                                                                         
  |==============================================================                                     |  63%
  |                                                                                                         
  |==================================================================                                 |  67%
  |                                                                                                         
  |======================================================================                             |  70%
  |                                                                                                         
  |=========================================================================                          |  74%
  |                                                                                                         
  |=============================================================================                      |  78%
  |                                                                                                         
  |=================================================================================                  |  81%
  |                                                                                                         
  |====================================================================================               |  85%
  |                                                                                                         
  |========================================================================================           |  89%
  |                                                                                                         
  |============================================================================================       |  93%
  |                                                                                                         
  |===============================================================================================    |  96%
  |                                                                                                         
  |===================================================================================================| 100%
MT = read_state(code_state = 51)
Using year 2010
municipios=read_municipality()
Using year 2010

  |                                                                                                         
  |                                                                                                   |   0%
  |                                                                                                         
  |====                                                                                               |   4%
  |                                                                                                         
  |=======                                                                                            |   7%
  |                                                                                                         
  |===========                                                                                        |  11%
  |                                                                                                         
  |===============                                                                                    |  15%
  |                                                                                                         
  |==================                                                                                 |  19%
  |                                                                                                         
  |======================                                                                             |  22%
  |                                                                                                         
  |==========================                                                                         |  26%
  |                                                                                                         
  |=============================                                                                      |  30%
  |                                                                                                         
  |=================================                                                                  |  33%
  |                                                                                                         
  |=====================================                                                              |  37%
  |                                                                                                         
  |========================================                                                           |  41%
  |                                                                                                         
  |============================================                                                       |  44%
  |                                                                                                         
  |================================================                                                   |  48%
  |                                                                                                         
  |===================================================                                                |  52%
  |                                                                                                         
  |=======================================================                                            |  56%
  |                                                                                                         
  |===========================================================                                        |  59%
  |                                                                                                         
  |==============================================================                                     |  63%
  |                                                                                                         
  |==================================================================                                 |  67%
  |                                                                                                         
  |======================================================================                             |  70%
  |                                                                                                         
  |=========================================================================                          |  74%
  |                                                                                                         
  |=============================================================================                      |  78%
  |                                                                                                         
  |=================================================================================                  |  81%
  |                                                                                                         
  |====================================================================================               |  85%
  |                                                                                                         
  |========================================================================================           |  89%
  |                                                                                                         
  |============================================================================================       |  93%
  |                                                                                                         
  |===============================================================================================    |  96%
  |                                                                                                         
  |===================================================================================================| 100%
sinop = read_municipality(code_muni = 5107909)
Using year 2010
topo = get_elev_raster(sinop, z=8, clip='location') 

 Accessing raster elevation [-------------------------]   0%
                                                            

 Accessing raster elevation [-------------------------]   0%
 Accessing raster elevation [=========================] 100%
Mosaicing & Projecting
Clipping DEM to locations
Note: Elevation units are in meters.
topo_df <- as.data.frame(raster::rasterToPoints(topo))
names(topo_df) = c("x", "y", "elevation")

#Ponto unico da area experimental ()
site= c("Experimental site")
lat=c(-11.860912)
lon=c(-55.622340)
ponto=data.frame(site,lat,lon)

# Coordenadas para poligono da área experimental
points = c("1", "2", "3", "4")
lat1 = c(-11.859849,-11.855377,-11.861069,-11.865607)
lon1 = c(-55.628855,-55.616294,-55.615740,-55.628003)
area = data.frame(points, lat1, lon1)

# Criar um objeto SpatialPolygons
polygon = Polygon(cbind(area$lon1, area$lat1))
polygons = Polygons(list(polygon), "area")
area_sp = SpatialPolygons(list(polygons), proj4string = CRS("+proj=longlat +datum=WGS84"))

# Converter para um objeto sf e mudar o datum para o mesmo do poligono de Pira
area_sf = st_as_sf(area_sp, coords = c("x", "y"), crs = st_crs(sinop))
area_sf = st_transform(area_sf, crs = st_crs(sinop))
area_sf
Simple feature collection with 1 feature and 0 fields
Geometry type: POLYGON
Dimension:     XY
Bounding box:  xmin: -55.62886 ymin: -11.86561 xmax: -55.61574 ymax: -11.85538
Geodetic CRS:  SIRGAS 2000
                        geometry
1 POLYGON ((-55.62886 -11.859...

País

p1.1 = ggplot()+
  geom_sf(data=BRA2, color="blacK", fill="white")+
  geom_sf(data=states, color="blacK", fill="#d4de31")+
  geom_sf(data=MT, color="blacK", fill="#42b258")+
  geom_sf(data=sinop, color="blacK", fill="#232a6d")+
  theme_light()+
  labs(x="Longitude", y="Latitude")+
  ylim(-33,+4)+xlim(-75,-35)
p1.1

p1.2 = p1.1+
  theme(panel.background = element_rect(fill = "white"),
  axis.text = element_text(angle = 10, hjust = 0.6),
  axis.line = element_line(colour = "gray", size = 0.3, linetype = "solid"),
  panel.grid.major = element_line(color = "transparent"), 
  panel.grid.minor = element_line(color = "transparent"),
  legend.position = "NONE")+  
  guides(fill = guide_colorbar(title.position = "top", title.hjust = 0.5,title.vjust = 1.5))+
  annotate(geom="text", y=+3, x=-41,label="Brazil", size=6, color="black")+
  annotate(geom="text", y=-20, x=-67,label="Mato Grosso (MT)", size=4.5, color="black")
Warning: The `size` argument of `element_line()` is deprecated as of ggplot2 3.4.0.
Please use the `linewidth` argument instead.
p1.2

Estado

p2.1 = ggplot()+
  geom_sf(data=MT, color="blacK", fill="#42b258")+
  geom_raster(data = topo_df, aes(x = x, y = y, fill = elevation))+
  scale_fill_gradient(low = "#d4de31", high = "#232a6d", name = "Topography (m)")+
  geom_sf(data=sinop, color="blacK", fill="transparent")+
  theme_light()+
  labs(x="Longitude", y="Latitude")
p2.1

p2.2 = p2.1+
  theme(panel.background = element_rect(fill = "white"),
  axis.text = element_text(angle = 10, hjust = 0.6),
  axis.line = element_line(colour = "gray", size = 0.3, linetype = "solid"),
  panel.grid.major = element_line(color = "transparent"), 
  panel.grid.minor = element_line(color = "transparent"),
  legend.position = "NONE")+  
  guides(fill = guide_colorbar(title.position = "top", title.hjust = 0.5,title.vjust = 1.5))+
  annotate(geom="text", y=-19.4, x=-56,label="MT, Brazil", size=6, color="black")
p2.2
save_plot("P2.2.pdf", p2.2, ncol = 1, nrow = 1)

Cidade

p3.1 = ggplot()+
  geom_raster(data = topo_df, aes(x = x, y = y, fill = elevation))+
  geom_sf(data=sinop, color="blacK", fill="transparent")+
  geom_point(data= ponto, aes(x=lon, y=lat, color=site),shape = 1, size = 7, color = "red", fill = "white")+
  scale_fill_gradient(low = "#d4de31", high = "#42b258", name = "Topography (m)")+
  labs(x="Longitude", y="Latitude")
  #ylim(-22.9,-22.48)+xlim(-48.09,-47.495)
p3.1

p3.2 = p3.1 + 
  theme(
    panel.background = element_rect(fill = "transparent", colour = "grey", size = 0.4),
    axis.line = element_line(colour = "grey", size = 0.4, linetype = "solid"),
    axis.text = element_text(angle = 10, hjust = 0.6),
    panel.grid.major = element_line(color = "transparent"), 
    panel.grid.minor = element_line(color = "transparent"),
    legend.position = c(0.83, 0.15),  
    legend.direction = "vertical",
    legend.background = element_rect(fill = "transparent", size = 0.2, linetype = "solid", colour = "grey"),
    legend.text = element_text(size = 6, hjust = 1), 
    legend.title = element_text(size = 7),                        
    legend.key.size = unit(0.3, "cm")) +  
  guides(fill = guide_colorbar(title.position = "top", title.hjust = 0.5, title.vjust = 1.5)) +
  annotate(geom = "text", y = -11.23, x = -55.7, label = "Sinop, MT", size = 5, color = "black") +
  annotation_north_arrow(location = "tr",  # canto superior direito
                         which_north = "true",
                         pad_x = unit(0.2, "cm"),
                         pad_y = unit(0.2, "cm"),
                         style = north_arrow_fancy_orienteering())
Warning: The `size` argument of `element_rect()` is deprecated as of ggplot2 3.4.0.
Please use the `linewidth` argument instead.Warning: A numeric `legend.position` argument in `theme()` was deprecated in ggplot2 3.5.0.
Please use the `legend.position.inside` argument of `theme()` instead.
p3.2

Experimental site

p4.1 = ggplot()+
  geom_sf(data=sinop, color="blacK", fill="transparent")+
  geom_raster(data = topo_df_clipped, aes(x = x, y = y, fill = elevation))+
  scale_fill_gradient(low = "#d4de31", high = "#42b258", name = "Topography (m)")+
  labs(x="Longitude", y="Latitude")+
   geom_sf(data = area_sf, color = "black", fill="transparent", size = 1.5)+
  ylim(-11.868,-11.855)+xlim(-55.635,-55.612)
p4.1


p4.2=p4.1+ theme(
  panel.background = element_rect(fill = "transparent", colour = "grey",size = 0.4),
  axis.line = element_line(colour = "grey", size = 0.4, linetype = "solid"),
  axis.text = element_text(angle = 10, hjust = 0.6),
  panel.grid.major = element_line(color = "transparent"), 
  panel.grid.minor = element_line(color = "transparent"),
  legend.position = c(0.85, 0.25),  
  legend.direction = "vertical",
  legend.background = element_rect(fill = "transparent",size=0.4, linetype="solid",colour ="grey"),
  legend.text = element_text(angle = 30, hjust = 0.5))+  
  guides(fill = guide_colorbar(title.position = "top", title.hjust = 0.5,title.vjust = 1.5))+
  annotate(geom="text", y=-11.856, x=-55.630,label="Experimental site", size=4.5, color="black")
p4.2

LS0tDQp0aXRsZTogIkdyYXBoaWNhbCBhYnN0cmFjdCAtIEFseWNlIg0KYXV0aG9yOiAiVmFnbmVyIE92YW5pIg0KZGF0ZTogIjIzLzA0LzIwMjUiDQpvdXRwdXQ6DQogIGh0bWxfbm90ZWJvb2s6DQogICAgdG9jOiBUUlVFDQogICAgdG9jX2RlcHRoOiAyDQogICAgdGhlbWU6IHVuaXRlZA0KLS0tDQoNCioqKg0KDQojIF8qKlBhY2thZ2VzKipfDQoNCmBgYHtyfQ0KbGlicmFyeShkcGx5cikNCmxpYnJhcnkoZ2dwbG90MikNCmxpYnJhcnkoZ2doNHgpI2dyYWZpY28NCmxpYnJhcnkoZ2VvYnIpICNwYWNvdGUgZG8gaWJnZSBwYXJhIHBvbGlnbm9zIGRvIEJSDQpsaWJyYXJ5KGVsZXZhdHIpICNIYXN0ZXIgZGUgcmVsZXZvIGJyDQpsaWJyYXJ5KHNwKSAjUG9saWdub3MgZGUgU2FvIFBhdWxvDQpsaWJyYXJ5KHNmKSAjdmluY3VsYWRvIGFvIGdncGxvdDINCmxpYnJhcnkoY293cGxvdCkjY29tYmluYXIgdmFyaW9zIGdyYWZpY29zDQpsaWJyYXJ5KGdnc3BhdGlhbCkgI2NvbG9jYXIgcm9zYSBkb3MgdmVudG9zDQpgYGANCg0KDQojIF8qKkV4cGVyaW1lbnRhbCBzaXRlKipfDQoNCiMjIF8qKkRhdGEqKl8NCg0KYGBge3J9DQpCUkEyID0gcmVhZF9jb3VudHJ5KCkNCg0Kc3RhdGVzID0gcmVhZF9zdGF0ZSgpDQoNCk1UID0gcmVhZF9zdGF0ZShjb2RlX3N0YXRlID0gNTEpDQoNCm11bmljaXBpb3M9cmVhZF9tdW5pY2lwYWxpdHkoKQ0KDQpzaW5vcCA9IHJlYWRfbXVuaWNpcGFsaXR5KGNvZGVfbXVuaSA9IDUxMDc5MDkpDQoNCnRvcG8gPSBnZXRfZWxldl9yYXN0ZXIoc2lub3AsIHo9OCwgY2xpcD0nbG9jYXRpb24nKSANCnRvcG9fZGYgPC0gYXMuZGF0YS5mcmFtZShyYXN0ZXI6OnJhc3RlclRvUG9pbnRzKHRvcG8pKQ0KbmFtZXModG9wb19kZikgPSBjKCJ4IiwgInkiLCAiZWxldmF0aW9uIikNCg0KI1BvbnRvIHVuaWNvIGRhIGFyZWEgZXhwZXJpbWVudGFsICgpDQpzaXRlPSBjKCJFeHBlcmltZW50YWwgc2l0ZSIpDQpsYXQ9YygtMTEuODYwOTEyKQ0KbG9uPWMoLTU1LjYyMjM0MCkNCnBvbnRvPWRhdGEuZnJhbWUoc2l0ZSxsYXQsbG9uKQ0KDQojIENvb3JkZW5hZGFzIHBhcmEgcG9saWdvbm8gZGEgw6FyZWEgZXhwZXJpbWVudGFsDQpwb2ludHMgPSBjKCIxIiwgIjIiLCAiMyIsICI0IikNCmxhdDEgPSBjKC0xMS44NTk4NDksLTExLjg1NTM3NywtMTEuODYxMDY5LC0xMS44NjU2MDcpDQpsb24xID0gYygtNTUuNjI4ODU1LC01NS42MTYyOTQsLTU1LjYxNTc0MCwtNTUuNjI4MDAzKQ0KYXJlYSA9IGRhdGEuZnJhbWUocG9pbnRzLCBsYXQxLCBsb24xKQ0KDQojIENyaWFyIHVtIG9iamV0byBTcGF0aWFsUG9seWdvbnMNCnBvbHlnb24gPSBQb2x5Z29uKGNiaW5kKGFyZWEkbG9uMSwgYXJlYSRsYXQxKSkNCnBvbHlnb25zID0gUG9seWdvbnMobGlzdChwb2x5Z29uKSwgImFyZWEiKQ0KYXJlYV9zcCA9IFNwYXRpYWxQb2x5Z29ucyhsaXN0KHBvbHlnb25zKSwgcHJvajRzdHJpbmcgPSBDUlMoIitwcm9qPWxvbmdsYXQgK2RhdHVtPVdHUzg0IikpDQoNCiMgQ29udmVydGVyIHBhcmEgdW0gb2JqZXRvIHNmIGUgbXVkYXIgbyBkYXR1bSBwYXJhIG8gbWVzbW8gZG8gcG9saWdvbm8gZGUgUGlyYQ0KYXJlYV9zZiA9IHN0X2FzX3NmKGFyZWFfc3AsIGNvb3JkcyA9IGMoIngiLCAieSIpLCBjcnMgPSBzdF9jcnMoc2lub3ApKQ0KYXJlYV9zZiA9IHN0X3RyYW5zZm9ybShhcmVhX3NmLCBjcnMgPSBzdF9jcnMoc2lub3ApKQ0KYXJlYV9zZg0KYGBgDQojIyBfKipQYcOtcyoqXw0KDQpgYGB7cn0NCnAxLjEgPSBnZ3Bsb3QoKSsNCiAgZ2VvbV9zZihkYXRhPUJSQTIsIGNvbG9yPSJibGFjSyIsIGZpbGw9IndoaXRlIikrDQogIGdlb21fc2YoZGF0YT1zdGF0ZXMsIGNvbG9yPSJibGFjSyIsIGZpbGw9IiNkNGRlMzEiKSsNCiAgZ2VvbV9zZihkYXRhPU1ULCBjb2xvcj0iYmxhY0siLCBmaWxsPSIjNDJiMjU4IikrDQogIGdlb21fc2YoZGF0YT1zaW5vcCwgY29sb3I9ImJsYWNLIiwgZmlsbD0iIzIzMmE2ZCIpKw0KICB0aGVtZV9saWdodCgpKw0KICBsYWJzKHg9IkxvbmdpdHVkZSIsIHk9IkxhdGl0dWRlIikrDQogIHlsaW0oLTMzLCs0KSt4bGltKC03NSwtMzUpDQpwMS4xDQpwMS4yID0gcDEuMSsNCiAgdGhlbWUocGFuZWwuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChmaWxsID0gIndoaXRlIiksDQogIGF4aXMudGV4dCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDEwLCBoanVzdCA9IDAuNiksDQogIGF4aXMubGluZSA9IGVsZW1lbnRfbGluZShjb2xvdXIgPSAiZ3JheSIsIHNpemUgPSAwLjMsIGxpbmV0eXBlID0gInNvbGlkIiksDQogIHBhbmVsLmdyaWQubWFqb3IgPSBlbGVtZW50X2xpbmUoY29sb3IgPSAidHJhbnNwYXJlbnQiKSwgDQogIHBhbmVsLmdyaWQubWlub3IgPSBlbGVtZW50X2xpbmUoY29sb3IgPSAidHJhbnNwYXJlbnQiKSwNCiAgbGVnZW5kLnBvc2l0aW9uID0gIk5PTkUiKSsgIA0KICBndWlkZXMoZmlsbCA9IGd1aWRlX2NvbG9yYmFyKHRpdGxlLnBvc2l0aW9uID0gInRvcCIsIHRpdGxlLmhqdXN0ID0gMC41LHRpdGxlLnZqdXN0ID0gMS41KSkrDQogIGFubm90YXRlKGdlb209InRleHQiLCB5PSszLCB4PS00MSxsYWJlbD0iQnJhemlsIiwgc2l6ZT02LCBjb2xvcj0iYmxhY2siKSsNCiAgYW5ub3RhdGUoZ2VvbT0idGV4dCIsIHk9LTIwLCB4PS02NyxsYWJlbD0iTWF0byBHcm9zc28gKE1UKSIsIHNpemU9NC41LCBjb2xvcj0iYmxhY2siKQ0KcDEuMg0KYGBgDQoNCiMjIF8qKkVzdGFkbyoqXw0KDQpgYGB7cn0NCnAyLjEgPSBnZ3Bsb3QoKSsNCiAgZ2VvbV9zZihkYXRhPU1ULCBjb2xvcj0iYmxhY0siLCBmaWxsPSIjNDJiMjU4IikrDQogIGdlb21fcmFzdGVyKGRhdGEgPSB0b3BvX2RmLCBhZXMoeCA9IHgsIHkgPSB5LCBmaWxsID0gZWxldmF0aW9uKSkrDQogIHNjYWxlX2ZpbGxfZ3JhZGllbnQobG93ID0gIiNkNGRlMzEiLCBoaWdoID0gIiMyMzJhNmQiLCBuYW1lID0gIlRvcG9ncmFwaHkgKG0pIikrDQogIGdlb21fc2YoZGF0YT1zaW5vcCwgY29sb3I9ImJsYWNLIiwgZmlsbD0idHJhbnNwYXJlbnQiKSsNCiAgdGhlbWVfbGlnaHQoKSsNCiAgbGFicyh4PSJMb25naXR1ZGUiLCB5PSJMYXRpdHVkZSIpDQpwMi4xDQpwMi4yID0gcDIuMSsNCiAgdGhlbWUocGFuZWwuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChmaWxsID0gIndoaXRlIiksDQogIGF4aXMudGV4dCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDEwLCBoanVzdCA9IDAuNiksDQogIGF4aXMubGluZSA9IGVsZW1lbnRfbGluZShjb2xvdXIgPSAiZ3JheSIsIHNpemUgPSAwLjMsIGxpbmV0eXBlID0gInNvbGlkIiksDQogIHBhbmVsLmdyaWQubWFqb3IgPSBlbGVtZW50X2xpbmUoY29sb3IgPSAidHJhbnNwYXJlbnQiKSwgDQogIHBhbmVsLmdyaWQubWlub3IgPSBlbGVtZW50X2xpbmUoY29sb3IgPSAidHJhbnNwYXJlbnQiKSwNCiAgbGVnZW5kLnBvc2l0aW9uID0gIk5PTkUiKSsgIA0KICBndWlkZXMoZmlsbCA9IGd1aWRlX2NvbG9yYmFyKHRpdGxlLnBvc2l0aW9uID0gInRvcCIsIHRpdGxlLmhqdXN0ID0gMC41LHRpdGxlLnZqdXN0ID0gMS41KSkrDQogIGFubm90YXRlKGdlb209InRleHQiLCB5PS0xOS40LCB4PS01NixsYWJlbD0iTVQsIEJyYXppbCIsIHNpemU9NiwgY29sb3I9ImJsYWNrIikNCnAyLjINCnNhdmVfcGxvdCgiUDIuMi5wZGYiLCBwMi4yLCBuY29sID0gMSwgbnJvdyA9IDEpDQpgYGANCg0KIyMgXyoqQ2lkYWRlKipfDQoNCmBgYHtyfQ0KcDMuMSA9IGdncGxvdCgpKw0KICBnZW9tX3Jhc3RlcihkYXRhID0gdG9wb19kZiwgYWVzKHggPSB4LCB5ID0geSwgZmlsbCA9IGVsZXZhdGlvbikpKw0KICBnZW9tX3NmKGRhdGE9c2lub3AsIGNvbG9yPSJibGFjSyIsIGZpbGw9InRyYW5zcGFyZW50IikrDQogIGdlb21fcG9pbnQoZGF0YT0gcG9udG8sIGFlcyh4PWxvbiwgeT1sYXQsIGNvbG9yPXNpdGUpLHNoYXBlID0gMSwgc2l6ZSA9IDcsIGNvbG9yID0gInJlZCIsIGZpbGwgPSAid2hpdGUiKSsNCiAgc2NhbGVfZmlsbF9ncmFkaWVudChsb3cgPSAiI2Q0ZGUzMSIsIGhpZ2ggPSAiIzQyYjI1OCIsIG5hbWUgPSAiVG9wb2dyYXBoeSAobSkiKSsNCiAgbGFicyh4PSJMb25naXR1ZGUiLCB5PSJMYXRpdHVkZSIpDQogICN5bGltKC0yMi45LC0yMi40OCkreGxpbSgtNDguMDksLTQ3LjQ5NSkNCnAzLjENCnAzLjIgPSBwMy4xICsgDQogIHRoZW1lKA0KICAgIHBhbmVsLmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoZmlsbCA9ICJ0cmFuc3BhcmVudCIsIGNvbG91ciA9ICJncmV5Iiwgc2l6ZSA9IDAuNCksDQogICAgYXhpcy5saW5lID0gZWxlbWVudF9saW5lKGNvbG91ciA9ICJncmV5Iiwgc2l6ZSA9IDAuNCwgbGluZXR5cGUgPSAic29saWQiKSwNCiAgICBheGlzLnRleHQgPSBlbGVtZW50X3RleHQoYW5nbGUgPSAxMCwgaGp1c3QgPSAwLjYpLA0KICAgIHBhbmVsLmdyaWQubWFqb3IgPSBlbGVtZW50X2xpbmUoY29sb3IgPSAidHJhbnNwYXJlbnQiKSwgDQogICAgcGFuZWwuZ3JpZC5taW5vciA9IGVsZW1lbnRfbGluZShjb2xvciA9ICJ0cmFuc3BhcmVudCIpLA0KICAgIGxlZ2VuZC5wb3NpdGlvbiA9IGMoMC44MywgMC4xNSksICANCiAgICBsZWdlbmQuZGlyZWN0aW9uID0gInZlcnRpY2FsIiwNCiAgICBsZWdlbmQuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChmaWxsID0gInRyYW5zcGFyZW50Iiwgc2l6ZSA9IDAuMiwgbGluZXR5cGUgPSAic29saWQiLCBjb2xvdXIgPSAiZ3JleSIpLA0KICAgIGxlZ2VuZC50ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSA2LCBoanVzdCA9IDEpLCANCiAgICBsZWdlbmQudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDcpLCAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgIGxlZ2VuZC5rZXkuc2l6ZSA9IHVuaXQoMC4zLCAiY20iKSkgKyAgDQogIGd1aWRlcyhmaWxsID0gZ3VpZGVfY29sb3JiYXIodGl0bGUucG9zaXRpb24gPSAidG9wIiwgdGl0bGUuaGp1c3QgPSAwLjUsIHRpdGxlLnZqdXN0ID0gMS41KSkgKw0KICBhbm5vdGF0ZShnZW9tID0gInRleHQiLCB5ID0gLTExLjIzLCB4ID0gLTU1LjcsIGxhYmVsID0gIlNpbm9wLCBNVCIsIHNpemUgPSA1LCBjb2xvciA9ICJibGFjayIpICsNCiAgYW5ub3RhdGlvbl9ub3J0aF9hcnJvdyhsb2NhdGlvbiA9ICJ0ciIsICAjIGNhbnRvIHN1cGVyaW9yIGRpcmVpdG8NCiAgICAgICAgICAgICAgICAgICAgICAgICB3aGljaF9ub3J0aCA9ICJ0cnVlIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICBwYWRfeCA9IHVuaXQoMC4yLCAiY20iKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICBwYWRfeSA9IHVuaXQoMC4yLCAiY20iKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZSA9IG5vcnRoX2Fycm93X2ZhbmN5X29yaWVudGVlcmluZygpKQ0KcDMuMg0KYGBgDQoNCiMjIF8qKkV4cGVyaW1lbnRhbCBzaXRlKipfDQoNCmBgYHtyfQ0KcDQuMSA9IGdncGxvdCgpKw0KICBnZW9tX3NmKGRhdGE9c2lub3AsIGNvbG9yPSJibGFjSyIsIGZpbGw9InRyYW5zcGFyZW50IikrDQogIGdlb21fcmFzdGVyKGRhdGEgPSB0b3BvX2RmX2NsaXBwZWQsIGFlcyh4ID0geCwgeSA9IHksIGZpbGwgPSBlbGV2YXRpb24pKSsNCiAgc2NhbGVfZmlsbF9ncmFkaWVudChsb3cgPSAiI2Q0ZGUzMSIsIGhpZ2ggPSAiIzQyYjI1OCIsIG5hbWUgPSAiVG9wb2dyYXBoeSAobSkiKSsNCiAgbGFicyh4PSJMb25naXR1ZGUiLCB5PSJMYXRpdHVkZSIpKw0KICAgZ2VvbV9zZihkYXRhID0gYXJlYV9zZiwgY29sb3IgPSAiYmxhY2siLCBmaWxsPSJ0cmFuc3BhcmVudCIsIHNpemUgPSAxLjUpKw0KICB5bGltKC0xMS44NjgsLTExLjg1NSkreGxpbSgtNTUuNjM1LC01NS42MTIpDQpwNC4xDQoNCnA0LjI9cDQuMSsgdGhlbWUoDQogIHBhbmVsLmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoZmlsbCA9ICJ0cmFuc3BhcmVudCIsIGNvbG91ciA9ICJncmV5IixzaXplID0gMC40KSwNCiAgYXhpcy5saW5lID0gZWxlbWVudF9saW5lKGNvbG91ciA9ICJncmV5Iiwgc2l6ZSA9IDAuNCwgbGluZXR5cGUgPSAic29saWQiKSwNCiAgYXhpcy50ZXh0ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gMTAsIGhqdXN0ID0gMC42KSwNCiAgcGFuZWwuZ3JpZC5tYWpvciA9IGVsZW1lbnRfbGluZShjb2xvciA9ICJ0cmFuc3BhcmVudCIpLCANCiAgcGFuZWwuZ3JpZC5taW5vciA9IGVsZW1lbnRfbGluZShjb2xvciA9ICJ0cmFuc3BhcmVudCIpLA0KICBsZWdlbmQucG9zaXRpb24gPSBjKDAuODUsIDAuMjUpLCAgDQogIGxlZ2VuZC5kaXJlY3Rpb24gPSAidmVydGljYWwiLA0KICBsZWdlbmQuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChmaWxsID0gInRyYW5zcGFyZW50IixzaXplPTAuNCwgbGluZXR5cGU9InNvbGlkIixjb2xvdXIgPSJncmV5IiksDQogIGxlZ2VuZC50ZXh0ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gMzAsIGhqdXN0ID0gMC41KSkrICANCiAgZ3VpZGVzKGZpbGwgPSBndWlkZV9jb2xvcmJhcih0aXRsZS5wb3NpdGlvbiA9ICJ0b3AiLCB0aXRsZS5oanVzdCA9IDAuNSx0aXRsZS52anVzdCA9IDEuNSkpKw0KICBhbm5vdGF0ZShnZW9tPSJ0ZXh0IiwgeT0tMTEuODU2LCB4PS01NS42MzAsbGFiZWw9IkV4cGVyaW1lbnRhbCBzaXRlIiwgc2l6ZT00LjUsIGNvbG9yPSJibGFjayIpDQpwNC4yDQpgYGANCg0K