Packages

pacman::p_load(tidyverse, ggsignif)

Dataset

df <- read_csv("https://docs.google.com/spreadsheets/d/e/2PACX-1vSciIQTEh-E-He--1Om0C0EPf8jVT-DFwMsjYv-VeE9nLd8j0EQp6YT1Wybczpa7Y6dQP1YQzz5ymfp/pub?gid=460790857&single=true&output=csv")
Parsed with column specification:
cols(
  `Marca temporal` = col_character(),
  seYeson = col_character(),
  nombre = col_character(),
  grupo = col_character(),
  Alta = col_character(),
  Clasificacion_tto = col_double(),
  `Edad (en años)` = col_double(),
  Sexo = col_character(),
  n_sesiones = col_double(),
  minuto_sesiones = col_double(),
  Ansiedad_padre = col_double(),
  Ansiedad_nino = col_double(),
  Ansiedad_dentista_nino = col_double(),
  cortisol = col_character(),
  cortisol2 = col_character(),
  cortisol3 = col_character()
)
df <- janitor::clean_names(df)
names(df)
 [1] "marca_temporal"         "se_yeson"               "nombre"                
 [4] "grupo"                  "alta"                   "clasificacion_tto"     
 [7] "edad_en_anos"           "sexo"                   "n_sesiones"            
[10] "minuto_sesiones"        "ansiedad_padre"         "ansiedad_nino"         
[13] "ansiedad_dentista_nino" "cortisol"               "cortisol2"             
[16] "cortisol3"             
df <- rename(df, sesion = se_yeson) 
table(df$grupo, df$sesion)
              
               Baseline Final
  Non-sedation       24    24
  Sedation           25    25
df$cortisol <- scan(text=df$cortisol2, dec=",", sep=".")
Read 98 items

Corregir un valor de cortisol que aparece elevado

df <- df %>% 
  mutate(cortisol = case_when(
    cortisol > 0.1 ~ (cortisol/10), 
    TRUE ~ as.numeric(as.character(.$cortisol)
  )))
  
  
df$clasificacion_tto <- as.factor(df$clasificacion_tto)
df$ansiedad_nino <- as.factor(df$ansiedad_nino)
df$ansiedad_dentista_nino <- as.factor(df$ansiedad_dentista_nino)

EDA

head(df)
glimpse(df)
Rows: 98
Columns: 16
$ marca_temporal         <chr> "25/08/2019 13:39:20", "25/08/2019 13:40:10",…
$ sesion                 <chr> "Baseline", "Final", "Baseline", "Final", "Ba…
$ nombre                 <chr> "Acevedo, Sebastian", "Acevedo, Sebastian", "…
$ grupo                  <chr> "Non-sedation", "Non-sedation", "Non-sedation…
$ alta                   <chr> "No", "No", "Yes", "Yes", "Yes", "Yes", "No",…
$ clasificacion_tto      <fct> 2, 2, 3, 3, 2, 2, 1, 1, 3, 3, 2, 2, 2, 2, 2, …
$ edad_en_anos           <dbl> 7, 7, 5, 5, 8, 8, 8, 8, 6, 6, 6, 6, 5, 5, 8, …
$ sexo                   <chr> "Male", "Male", "Female", "Female", "Male", "…
$ n_sesiones             <dbl> 5, 5, 9, 9, 5, 5, 3, 3, 11, 11, 6, 6, 10, 10,…
$ minuto_sesiones        <dbl> 81, 81, 350, 350, 171, 171, 49, 49, 407, 407,…
$ ansiedad_padre         <dbl> 4, 4, 12, 4, 12, 4, 11, 11, 4, 8, 9, 6, 20, 1…
$ ansiedad_nino          <fct> 2, 1, 4, 1, 1, 1, 2, 4, 2, 1, 4, 2, 5, 1, 2, …
$ ansiedad_dentista_nino <fct> 3, 3, 1, 4, 3, 3, 2, 1, 3, 4, 3, 3, 1, 4, 4, …
$ cortisol               <dbl> 0.0510, 0.0450, 0.0560, 0.0440, 0.0510, 0.050…
$ cortisol2              <chr> "0,051", "0,045", "0,056", "0,044", "0,051", …
$ cortisol3              <chr> "0,051", "0,045", "0,056", "0,044", "0,051", …
skimr::skim(df)
Registered S3 methods overwritten by 'htmltools':
  method               from         
  print.html           tools:rstudio
  print.shiny.tag      tools:rstudio
  print.shiny.tag.list tools:rstudio
── Data Summary ────────────────────────
                           Values
Name                       df    
Number of rows             98    
Number of columns          16    
_______________________          
Column type frequency:           
  character                8     
  factor                   3     
  numeric                  5     
________________________         
Group variables                  

── Variable type: character ───────────────────────────────────────────────────
  skim_variable  n_missing complete_rate   min   max empty n_unique whitespace
1 marca_temporal         0         1        19    19     0       98          0
2 sesion                 0         1         5     8     0        2          0
3 nombre                 0         1        10    20     0       54          0
4 grupo                  0         1         8    12     0        2          0
5 alta                   0         1         2     3     0        2          0
6 sexo                   0         1         4     6     0        2          0
7 cortisol2             10         0.898     5     5     0       19          0
8 cortisol3             10         0.898     5     5     0       19          0

── Variable type: factor ──────────────────────────────────────────────────────
  skim_variable          n_missing complete_rate ordered n_unique
1 clasificacion_tto              0             1 FALSE          3
2 ansiedad_nino                  0             1 FALSE          5
3 ansiedad_dentista_nino         0             1 FALSE          4
  top_counts                
1 3: 48, 2: 44, 1: 6        
2 1: 56, 2: 15, 3: 11, 5: 10
3 3: 38, 4: 35, 2: 19, 1: 6 

── Variable type: numeric ─────────────────────────────────────────────────────
  skim_variable   n_missing complete_rate     mean       sd     p0   p25
1 edad_en_anos            0         1       6.56    1.75     4      5   
2 n_sesiones              0         1       4.63    2.57     2      3   
3 minuto_sesiones         0         1     142.     81.5     42     69   
4 ansiedad_padre          0         1       7.13    3.69     4      4   
5 cortisol               10         0.898   0.0510  0.00415  0.041  0.05
      p50     p75    p100 hist 
1   6       8      12     ▇▇▃▃▁
2   4       6      11     ▇▅▂▂▁
3 122     187     407     ▇▆▃▁▁
4   6      10      20     ▇▂▂▁▁
5   0.052   0.053   0.061 ▂▁▇▃▁

El propósito del ECA fue evaluar la efectividad de la sedación vs no sedación (terapia conductiva conductual) en relación al número de altas logradas, número de sessiones y tiempo de sessiones requeridas para el logro del alta, disminución de la ansiedad de padres, niños (escala FIS), niño_dentista( escala FRANKL) y los niveles de cortisol salival. V. Independiente: grupo (sedacion, no sedacion) V. Dependiente: - Alta (si/no) - numero sessiones (promedio) - minuto_sessiones (promedio) - Ansiedad padre (promedio /escala CORAH rango: 4 -menos ansioso- hasta 20 - más ansioso-) - Ansiedad Niño (categorica /escala FIS: 1-muy feliz; 2-feliz; 3-triste; 4-muy triste) - Ansiedad Niño by Dentista (categorica /Escala FRANKL: 1-definitivamente negativo; 2-negativo; 3-positivo; 4-definitivamente positivo) - Cortisol (promedio en microgramos/decilitro)

Puede hacerse un analisis de covariable según: -Clasificacion_tto: (Categorica: tipo 1-Higiene/educacion; tipo 2-restaurador; tipo 3-endodontico/quirúrgico) - sexo (masculino/femenino) - datos basales (session = inicio)

NOTA: casillas D50 debe decir “no sedacion” Columna N (cortisol) son todas con 3 decimales (ej casilla N2 = 51; debe decir 0.051)

La idea es presentar una tabla con datos basales y en gráficos destacando la diferencia entre grupo sobre 1. el número de altas, 2. número de sessiones, 3. tiempo de sessiones y 4. nivel de cortisol. (barra con margen de error?). Otros gráficos según el cambio de niveles de ansiedad padre, niño y niño_dentista.

names(df)
 [1] "marca_temporal"         "sesion"                 "nombre"                
 [4] "grupo"                  "alta"                   "clasificacion_tto"     
 [7] "edad_en_anos"           "sexo"                   "n_sesiones"            
[10] "minuto_sesiones"        "ansiedad_padre"         "ansiedad_nino"         
[13] "ansiedad_dentista_nino" "cortisol"               "cortisol2"             
[16] "cortisol3"             
head(df)
table(df$grupo)

Non-sedation     Sedation 
          48           50 
df <- df %>% 
  mutate(grupo = fct_recode(grupo, "CBT" = "Non-sedation"))
Overall
(n=0)
edad_en_anos NA
sexo NA
clasificacion_tto NA
ansiedad_padre NA
ansiedad_nino NA
ansiedad_dentista_nino NA
cortisol NA

EDA 2

El propósito del ECA fue evaluar la efectividad de la sedación vs no sedación (terapia conductiva conductual) en relación al número de altas logradas, número de sessiones y tiempo de sessiones requeridas para el logro del alta, disminución de la ansiedad de padres, niños (escala FIS), niño_dentista( escala FRANKL) y los niveles de cortisol salival.

sessiones por alta y por grupo

Cuántos niños tuvieron el alta por grupo?

df %>%
  filter(sesion == "Final") %>%
  group_by(grupo) %>%
  summarise(sessiones = mean(n_sesiones),
            sd = sd(n_sesiones))

Sesiones

df %>% 
  filter(sesion == "Final") %>% 
  ggplot(aes(x = grupo, y = n_sesiones, fill = grupo)) +
  geom_boxplot() + 
  geom_jitter(alpha = 0.3) + 
  ggpubr::theme_pubr() + 
  labs(title = "Boxplot of number of sessions by group", 
       x = "Group", 
       y = "Number of sessions", 
       fill = "Group") + 
  ggsignif::geom_signif(comparisons=list(c("CBT", "Sedation")),
              y_position = 12, tip_length = 0.05, vjust=0) + 
  ylim(0,13) + 
  annotate("text", x = 1.31, y = 12.4, label = "T-test p =")

NA
NA

Tiempo

df %>% 
  mutate(tpoPromedio = minuto_sesiones / n_sesiones) %>% 
  filter(sesion == "Final") %>% 
  ggplot(aes(x = grupo, y = tpoPromedio, fill = grupo)) +
  geom_boxplot() + 
  geom_jitter(alpha = 0.3) + 
  ggpubr::theme_pubr() + 
  labs(title = "Boxplot of time per session required  by group", 
       x = "Group", 
       y = "Time (minutes)", 
       fill = "Group") + 
  ggsignif::geom_signif(comparisons=list(c("CBT", "Sedation")),
              y_position = 56, tip_length = 0.05, vjust=0) + 
  ylim(0,58) + 
  annotate("text", x = 1.31, y = 57.9, label = "T-test p =")

Cortisol

df %>%
  ggplot(aes(x = sesion, y = cortisol, fill = grupo)) +
  geom_boxplot() +
  geom_jitter(alpha = 0.3) +
  ggpubr::theme_pubr() +
  labs(title = "Cortisol levels comparison by session and group",
  x = "Session",
  y = "Cortisol μg/dl",
  fill = "Group") +
  ylim(0, 0.075) +
  ggsignif::geom_signif(
  comparisons = list(c("Baseline", "Final")),
  y_position = 0.070,
  tip_length = 0.1,
  vjust = 0
  ) +
  annotate("text",
  x = 1.25,
  y = 0.0725,
  label = "ANOVA p =") + 
  ggpubr::stat_compare_means(method = "anova", label.y = 0.065 )

LS0tCnRpdGxlOiAiUiBOb3RlYm9vayIKb3V0cHV0OgogIGh0bWxfbm90ZWJvb2s6IGRlZmF1bHQKICB3b3JkX2RvY3VtZW50OiBkZWZhdWx0Ci0tLQoKIyBQYWNrYWdlcwpgYGB7cn0KcGFjbWFuOjpwX2xvYWQodGlkeXZlcnNlLCAKICAgICAgICAgICAgICAgZ2dzaWduaWYpCmBgYAoKCiMgRGF0YXNldApgYGB7cn0KZGYgPC0gcmVhZF9jc3YoImh0dHBzOi8vZG9jcy5nb29nbGUuY29tL3NwcmVhZHNoZWV0cy9kL2UvMlBBQ1gtMXZTY2lJUVRFaC1FLUhlLS0xT20wQzBFUGY4alZULURGd01zall2LVZlRTluTGQ4ajBFUXA2WVQxV3liY3pwYTdZNmRRUDFZUXp6NXltZnAvcHViP2dpZD00NjA3OTA4NTcmc2luZ2xlPXRydWUmb3V0cHV0PWNzdiIpCmBgYApgYGB7cn0KZGYgPC0gamFuaXRvcjo6Y2xlYW5fbmFtZXMoZGYpCmBgYApgYGB7cn0KbmFtZXMoZGYpCmBgYApgYGB7cn0KZGYgPC0gcmVuYW1lKGRmLCBzZXNpb24gPSBzZV95ZXNvbikgCmBgYAoKCmBgYHtyfQp0YWJsZShkZiRncnVwbywgZGYkc2VzaW9uKQpgYGAKCgpgYGB7cn0KZGYkY29ydGlzb2wgPC0gc2Nhbih0ZXh0PWRmJGNvcnRpc29sMiwgZGVjPSIsIiwgc2VwPSIuIikKYGBgCgpDb3JyZWdpciB1biB2YWxvciBkZSBjb3J0aXNvbCBxdWUgYXBhcmVjZSBlbGV2YWRvCmBgYHtyfQpkZiA8LSBkZiAlPiUgCiAgbXV0YXRlKGNvcnRpc29sID0gY2FzZV93aGVuKAogICAgY29ydGlzb2wgPiAwLjEgfiAoY29ydGlzb2wvMTApLCAKICAgIFRSVUUgfiBhcy5udW1lcmljKGFzLmNoYXJhY3RlciguJGNvcnRpc29sKQogICkpKQogIAogIAoKYGBgCgoKCmBgYHtyfQpkZiRjbGFzaWZpY2FjaW9uX3R0byA8LSBhcy5mYWN0b3IoZGYkY2xhc2lmaWNhY2lvbl90dG8pCmRmJGFuc2llZGFkX25pbm8gPC0gYXMuZmFjdG9yKGRmJGFuc2llZGFkX25pbm8pCmRmJGFuc2llZGFkX2RlbnRpc3RhX25pbm8gPC0gYXMuZmFjdG9yKGRmJGFuc2llZGFkX2RlbnRpc3RhX25pbm8pCmBgYAoKCiMgRURBCmBgYHtyIGhlYWR9CmhlYWQoZGYpCmBgYAoKYGBge3IgZ2xpbXBzZX0KZ2xpbXBzZShkZikKYGBgCgpgYGB7cn0Kc2tpbXI6OnNraW0oZGYpCmBgYAoKRWwgcHJvcMOzc2l0byBkZWwgRUNBIGZ1ZSBldmFsdWFyIGxhIGVmZWN0aXZpZGFkIGRlIGxhIHNlZGFjacOzbiB2cyBubyBzZWRhY2nDs24gKHRlcmFwaWEgY29uZHVjdGl2YSBjb25kdWN0dWFsKSBlbiByZWxhY2nDs24gYWwgbsO6bWVybyBkZSBhbHRhcyBsb2dyYWRhcywgbsO6bWVybyBkZSBzZXNzaW9uZXMgeSB0aWVtcG8gZGUgc2Vzc2lvbmVzIHJlcXVlcmlkYXMgcGFyYSBlbCBsb2dybyBkZWwgYWx0YSwgZGlzbWludWNpw7NuIGRlIGxhIGFuc2llZGFkIGRlIHBhZHJlcywgbmnDsW9zIChlc2NhbGEgRklTKSwgbmnDsW9fZGVudGlzdGEoIGVzY2FsYSBGUkFOS0wpIHkgbG9zIG5pdmVsZXMgZGUgY29ydGlzb2wgc2FsaXZhbC4KVi4gSW5kZXBlbmRpZW50ZTogZ3J1cG8gKHNlZGFjaW9uLCBubyBzZWRhY2lvbikKVi4gRGVwZW5kaWVudGU6Ci0gQWx0YSAoc2kvbm8pCi0gbnVtZXJvIHNlc3Npb25lcyAocHJvbWVkaW8pCi0gbWludXRvX3Nlc3Npb25lcyAocHJvbWVkaW8pCi0gQW5zaWVkYWQgcGFkcmUgKHByb21lZGlvIC9lc2NhbGEgQ09SQUggcmFuZ286IDQgLW1lbm9zIGFuc2lvc28tIGhhc3RhIDIwIC0gbcOhcyBhbnNpb3NvLSkKLSBBbnNpZWRhZCBOacOxbyAoY2F0ZWdvcmljYSAvZXNjYWxhIEZJUzogMS1tdXkgZmVsaXo7IDItZmVsaXo7IDMtdHJpc3RlOyA0LW11eSB0cmlzdGUpCi0gQW5zaWVkYWQgTmnDsW8gYnkgRGVudGlzdGEgKGNhdGVnb3JpY2EgL0VzY2FsYSBGUkFOS0w6IDEtZGVmaW5pdGl2YW1lbnRlIG5lZ2F0aXZvOyAyLW5lZ2F0aXZvOyAzLXBvc2l0aXZvOyA0LWRlZmluaXRpdmFtZW50ZSBwb3NpdGl2bykKLSBDb3J0aXNvbCAocHJvbWVkaW8gZW4gbWljcm9ncmFtb3MvZGVjaWxpdHJvKQoKUHVlZGUgaGFjZXJzZSB1biBhbmFsaXNpcyBkZSBjb3ZhcmlhYmxlIHNlZ8O6bjoKLUNsYXNpZmljYWNpb25fdHRvOiAoQ2F0ZWdvcmljYTogdGlwbyAxLUhpZ2llbmUvZWR1Y2FjaW9uOyB0aXBvIDItcmVzdGF1cmFkb3I7IHRpcG8gMy1lbmRvZG9udGljby9xdWlyw7pyZ2ljbykKLSBzZXhvIChtYXNjdWxpbm8vZmVtZW5pbm8pCi0gZGF0b3MgYmFzYWxlcyAoc2Vzc2lvbiA9IGluaWNpbykKCk5PVEE6IGNhc2lsbGFzIEQ1MCBkZWJlIGRlY2lyICJubyBzZWRhY2lvbiIKQ29sdW1uYSBOIChjb3J0aXNvbCkgc29uIHRvZGFzIGNvbiAzIGRlY2ltYWxlcyAoZWogY2FzaWxsYSBOMiA9IDUxOyBkZWJlIGRlY2lyIDAuMDUxKQoKTGEgaWRlYSBlcyBwcmVzZW50YXIgdW5hIHRhYmxhIGNvbiBkYXRvcyBiYXNhbGVzIHkgZW4gZ3LDoWZpY29zIGRlc3RhY2FuZG8gbGEgZGlmZXJlbmNpYSBlbnRyZSBncnVwbyBzb2JyZSAxLiBlbCBuw7ptZXJvIGRlIGFsdGFzLCAyLiBuw7ptZXJvIGRlIHNlc3Npb25lcywgMy4gdGllbXBvIGRlIHNlc3Npb25lcyB5IDQuIG5pdmVsIGRlIGNvcnRpc29sLiAoYmFycmEgY29uIG1hcmdlbiBkZSBlcnJvcj8pLgpPdHJvcyBncsOhZmljb3Mgc2Vnw7puIGVsIGNhbWJpbyBkZSBuaXZlbGVzIGRlIGFuc2llZGFkIHBhZHJlLCBuacOxbyB5IG5pw7FvX2RlbnRpc3RhLgoKYGBge3J9Cm5hbWVzKGRmKQpgYGAKCmBgYHtyfQpoZWFkKGRmKQpgYGAKCmBgYHtyfQp0YWJsZShkZiRncnVwbykKYGBgCgpgYGB7cn0KZGYgPC0gZGYgJT4lIAogIG11dGF0ZShncnVwbyA9IGZjdF9yZWNvZGUoZ3J1cG8sICJDQlQiID0gIk5vbi1zZWRhdGlvbiIpKQoKYGBgCgoKYGBge3J9CmRmICU+JSAKICBmaWx0ZXIoc2VzaW9uID09ICJpbmljaW8iKSAlPiUgCiAgdGFibGUxOjp0YWJsZTEofmVkYWRfZW5fYW5vcyArIHNleG8gKyBjbGFzaWZpY2FjaW9uX3R0byArIAogICAgICAgICAgICAgICAgICBhbnNpZWRhZF9wYWRyZSArIAogICAgICAgICAgICAgICAgICBhbnNpZWRhZF9uaW5vICsgCiAgICAgICAgICAgICAgICAgIGFuc2llZGFkX2RlbnRpc3RhX25pbm8gKyAKICAgICAgICAgICAgICAgICAgY29ydGlzb2wgfCBncnVwbywgZGF0YSA9IC4pCmBgYAoKCiMgRURBIDIKRWwgcHJvcMOzc2l0byBkZWwgRUNBIGZ1ZSBldmFsdWFyIGxhIGVmZWN0aXZpZGFkIGRlIGxhIHNlZGFjacOzbiB2cyBubyBzZWRhY2nDs24gKHRlcmFwaWEgY29uZHVjdGl2YSBjb25kdWN0dWFsKSBlbiByZWxhY2nDs24gYWwgbsO6bWVybyBkZSBhbHRhcyBsb2dyYWRhcywgbsO6bWVybyBkZSBzZXNzaW9uZXMgeSB0aWVtcG8gZGUgc2Vzc2lvbmVzIHJlcXVlcmlkYXMgcGFyYSBlbCBsb2dybyBkZWwgYWx0YSwgZGlzbWludWNpw7NuIGRlIGxhIGFuc2llZGFkIGRlIHBhZHJlcywgbmnDsW9zIChlc2NhbGEgRklTKSwgbmnDsW9fZGVudGlzdGEoIGVzY2FsYSBGUkFOS0wpIHkgbG9zIG5pdmVsZXMgZGUgY29ydGlzb2wgc2FsaXZhbC4KCgojIyBzZXNzaW9uZXMgcG9yIGFsdGEgeSBwb3IgZ3J1cG8KYGBge3J9CmEgPC0gZGYgJT4lCiAgZmlsdGVyKHNlc2lvbiA9PSAiRmluYWwiKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBuX3Nlc2lvbmVzLCBmaWxsID0gZ3J1cG8pKSArCiAgZ2VvbV9oaXN0b2dyYW0oYmlucyA9IDExKSArCiAgZmFjZXRfZ3JpZChncnVwbyB+IGFsdGEpICsKICBsYWJzKHRpdGxlID0gIlNlc3Npb25zIHJlcXVpcmVkIGZvciBkaXNjaGFyZ2UiICwKICAgICAgIHkgPSAiUGF0aWVudHMiLAogICAgICAgeCA9ICJTZXNzaW9ucyIsCiAgICAgICBmaWxsID0gIkdyb3VwIikgKwogIGdncHVicjo6dGhlbWVfcHVicigpIApgYGAKQ3XDoW50b3MgbmnDsW9zIHR1dmllcm9uIGVsIGFsdGEgcG9yIGdydXBvPwoKYGBge3J9CmRmICU+JQogIGZpbHRlcihzZXNpb24gPT0gIkZpbmFsIikgJT4lCiAgZ3JvdXBfYnkoZ3J1cG8pICU+JQogIHN1bW1hcmlzZShzZXNzaW9uZXMgPSBtZWFuKG5fc2VzaW9uZXMpLAogICAgICAgICAgICBzZCA9IHNkKG5fc2VzaW9uZXMpKQpgYGAKCiMjIFNlc2lvbmVzCgpgYGB7cn0KYiA8LSBkZiAlPiUgCiAgZmlsdGVyKHNlc2lvbiA9PSAiRmluYWwiKSAlPiUgCiAgZ2dwbG90KGFlcyh4ID0gZ3J1cG8sIHkgPSBuX3Nlc2lvbmVzLCBmaWxsID0gZ3J1cG8pKSArCiAgZ2VvbV9ib3hwbG90KCkgKyAKICBnZW9tX2ppdHRlcihhbHBoYSA9IDAuMykgKyAKICBnZ3B1YnI6OnRoZW1lX3B1YnIoKSArIAogIGxhYnModGl0bGUgPSAiQm94cGxvdCBvZiBudW1iZXIgb2Ygc2Vzc2lvbnMgYnkgZ3JvdXAiLCAKICAgICAgIHggPSAiR3JvdXAiLCAKICAgICAgIHkgPSAiTnVtYmVyIG9mIHNlc3Npb25zIiwgCiAgICAgICBmaWxsID0gIkdyb3VwIikgKyAKICBnZ3NpZ25pZjo6Z2VvbV9zaWduaWYoY29tcGFyaXNvbnM9bGlzdChjKCJDQlQiLCAiU2VkYXRpb24iKSksCiAgICAgICAgICAgICAgeV9wb3NpdGlvbiA9IDEyLCB0aXBfbGVuZ3RoID0gMC4wNSwgdmp1c3Q9MCkgKyAKICB5bGltKDAsMTMpICsgCiAgYW5ub3RhdGUoInRleHQiLCB4ID0gMS4zMSwgeSA9IDEyLjQsIGxhYmVsID0gIlQtdGVzdCBwID0iKQogIAogIApgYGAKIyMgVGllbXBvCmBgYHtyfQpjIDwtIGRmICU+JSAKICBtdXRhdGUodHBvUHJvbWVkaW8gPSBtaW51dG9fc2VzaW9uZXMgLyBuX3Nlc2lvbmVzKSAlPiUgCiAgZmlsdGVyKHNlc2lvbiA9PSAiRmluYWwiKSAlPiUgCiAgZ2dwbG90KGFlcyh4ID0gZ3J1cG8sIHkgPSB0cG9Qcm9tZWRpbywgZmlsbCA9IGdydXBvKSkgKwogIGdlb21fYm94cGxvdCgpICsgCiAgZ2VvbV9qaXR0ZXIoYWxwaGEgPSAwLjMpICsgCiAgZ2dwdWJyOjp0aGVtZV9wdWJyKCkgKyAKICBsYWJzKHRpdGxlID0gIkJveHBsb3Qgb2YgdGltZSBwZXIgc2Vzc2lvbiByZXF1aXJlZCAgYnkgZ3JvdXAiLCAKICAgICAgIHggPSAiR3JvdXAiLCAKICAgICAgIHkgPSAiVGltZSAobWludXRlcykiLCAKICAgICAgIGZpbGwgPSAiR3JvdXAiKSArIAogIGdnc2lnbmlmOjpnZW9tX3NpZ25pZihjb21wYXJpc29ucz1saXN0KGMoIkNCVCIsICJTZWRhdGlvbiIpKSwKICAgICAgICAgICAgICB5X3Bvc2l0aW9uID0gNTYsIHRpcF9sZW5ndGggPSAwLjA1LCB2anVzdD0wKSArIAogIHlsaW0oMCw1OCkgKyAKICBhbm5vdGF0ZSgidGV4dCIsIHggPSAxLjMxLCB5ID0gNTcuOSwgbGFiZWwgPSAiVC10ZXN0IHAgPSIpCmBgYAoKIyMgQ29ydGlzb2wKCgoKYGBge3J9CmQgPC0gZGYgJT4lCiAgZ2dwbG90KGFlcyh4ID0gc2VzaW9uLCB5ID0gY29ydGlzb2wsIGZpbGwgPSBncnVwbykpICsKICBnZW9tX2JveHBsb3QoKSArCiAgZ2VvbV9qaXR0ZXIoYWxwaGEgPSAwLjMpICsKICBnZ3B1YnI6OnRoZW1lX3B1YnIoKSArCiAgbGFicyh0aXRsZSA9ICJDb3J0aXNvbCBsZXZlbHMgY29tcGFyaXNvbiBieSBzZXNzaW9uIGFuZCBncm91cCIsCiAgeCA9ICJTZXNzaW9uIiwKICB5ID0gIkNvcnRpc29sIM68Zy9kbCIsCiAgZmlsbCA9ICJHcm91cCIpICsKICB5bGltKDAsIDAuMDc1KSArCiAgZ2dzaWduaWY6Omdlb21fc2lnbmlmKAogIGNvbXBhcmlzb25zID0gbGlzdChjKCJCYXNlbGluZSIsICJGaW5hbCIpKSwKICB5X3Bvc2l0aW9uID0gMC4wNzAsCiAgdGlwX2xlbmd0aCA9IDAuMSwKICB2anVzdCA9IDAKICApICsKICBhbm5vdGF0ZSgidGV4dCIsCiAgeCA9IDEuMjUsCiAgeSA9IDAuMDcyNSwKICBsYWJlbCA9ICJBTk9WQSBwID0iKSArIAogIGdncHVicjo6c3RhdF9jb21wYXJlX21lYW5zKG1ldGhvZCA9ICJhbm92YSIsIGxhYmVsLnkgPSAwLjA2NSApCgpgYGAKCgoKCjwhLS0gZ2dzYXZlKCAtLT4KPCEtLSAgIGZpbGVuYW1lID0gImQuZXBzIiwgLS0+CjwhLS0gICBkLCAtLT4KPCEtLSAgIHdpZHRoID0gNSwgLS0+CjwhLS0gICBoZWlnaHQgPSA0LCAtLT4KPCEtLSAgIGRwaSA9IDgwMCwgLS0+CjwhLS0gICB1bml0cyA9ICJpbiIsIC0tPgo8IS0tICAgZGV2aWNlID0gJ2VwcycgLS0+CjwhLS0gKSAtLT4KCg==