R Markdown

This is an R Markdown document. Markdown is a simple formatting syntax for authoring HTML, PDF, and MS Word documents. For more details on using R Markdown see http://rmarkdown.rstudio.com.

When you click the Knit button a document will be generated that includes both content as well as the output of any embedded R code chunks within the document. You can embed an R code chunk like this:

summary(cars)
##      speed           dist       
##  Min.   : 4.0   Min.   :  2.00  
##  1st Qu.:12.0   1st Qu.: 26.00  
##  Median :15.0   Median : 36.00  
##  Mean   :15.4   Mean   : 42.98  
##  3rd Qu.:19.0   3rd Qu.: 56.00  
##  Max.   :25.0   Max.   :120.00

Including Plots

You can also embed plots, for example:

Note that the echo = FALSE parameter was added to the code chunk to prevent printing of the R code that generated the plot.

#DISTRIBUCON NOMINAL

La Distribución nominal de probabilidad continua pueden tomar varias formas, pero un gran número de variables observadas en la naturaleza poseen una distribución de frecuencia que es como se diría en estadística es una distribución normal de probabilidad. La formula que genera esta distribución es:

#AREA El área bajo la curva es igual a 1 Para variables aleatorias continuas, área = probabilidad El área a la izquierda de la media es igual a .5 El área a la derecha de la media es igual a .5

#GASOLINA Un estudio demostro que el uso de gasonlina para autos compactos vendidos en Estados Unidos esta distribuido normalmente, con una media de 25.5 millas per gallon (mpg) y una desviación estándar de 45 mpg. ¿Que porcentaje de autos recorre 30 mpg o más?

(30-25.5)/4.5
## [1] 1
1-0.8413
## [1] 0.1587
  • ¿Si un fabricante desea desarollar un auto que supere el 95% de las compactos actuales.
  • ¿Cual debe ser el rendimiento mpg?
25.5+1.645*4.5
## [1] 32.9025

#GIRASOLES

Suponga qUe los diamentros de tallos no soportados en la base, de una especie particular de girasol, tienen una distribución normal con un diametro de 35 mm y una desviación estandar de 3 mm.

  • ¿Cual es la probabilidad de que una planta de girasol tenga un diametro de base de más de 40 mm?
z41 <- (40-35)/3
z41
## [1] 1.666667
p41 <- 1-pnorm(40,35,3)
p41
## [1] 0.04779035

#DENSIDAD PROBABILIDAD NORMAL

x <- 40

prom <- 35

desviacion_e <- 3

x_densidad <- seq(prom -3*desviacion_e, prom+3*desviacion_e, length=1000)

y_densidad <- dnorm(x_densidad,prom,desviacion_e)

plot(x_densidad, y_densidad,type="l", lty=1, xlab="x", ylab= "f(x)",main="Función de Densidad de Probabilidad (Normal)", col="magenta")

#DISTRIBUCION DE PROBABILIDAD

x_distribucion <- seq(prom-3*desviacion_e, prom+3*desviacion_e, length=1000)
y_distribucion <- pnorm(x_distribucion,prom,desviacion_e)
plot(x_distribucion, y_distribucion,type="l", lty=1, xlab="x", ylab= "f(x)",main="Función de Distribución de Probabilidad (Normal)", col="orange")

  • Si 2 plantas de girasol se seleccionan al azar, ¿cual es la posibilidad de que ambas plantas tengan un diámetro de base se más de 40 mm?
p42 <- p41*p41
p42
## [1] 0.002283918
  • ¿Dentro de que limites esperaria usted que se encuentren los diametros de base, con probabilidad de 0.95?
p43<- 35-(1.96*3)

p43<- 35+(1.96*3)
  • ¿Que diametro representa el 90% de la distribucion de diametros?
p44<- qnorm(.90,35,3)
p44
## [1] 38.84465

#SHINYAPP

library(shiny) library(shinythemes) shinyApp(

ui <- fluidPage(theme = shinytheme(“cerulean”), navbarPage(“Aplicaciones”, tabPanel(“Distribución Normal”, sidebarPanel( tags$h3(“Ingresa los siguientes datos:”), numericInput(“x_funcion”,“x:”, 1), numericInput(“promedio1”,“promedio:”, 0), numericInput(“des_est”,“Desviación Estandar:”, 1)

                              ),
                               mainPanel(
                                 h1("Función de Distribución y Densidad Normal"),
                                 plotOutput("densidad"),
                                 plotOutput("distribucion1")
                               )
                                ),
                       tabPanel("Tab 2"),
                       tabPanel("Tab 3")
            )

),

server <- function(input, output) { output\(densidad <- renderPlot({ x_densidad1 <- seq(input\)promedio1-3input\(des_est, input\)promedio1+3input\(des_est, length=1000) y_densidad1 <- dnorm(x_densidad1,input\)promedio1,input$des_est) densidad<- plot(x_densidad1, y_densidad1,type=“l”, lty=1, xlab=“x”, ylab= “f(x)”,main=“Función de Densidad de Probabilidad (Normal)”, col=“yellow”) })

output\(distribucion1 <- renderPlot({ x_distribucion1 <- seq(input\)promedio1-3input\(des_est, input\)promedio1+3input\(des_est, length=1000) y_distribucion1 <- pnorm(x_distribucion1,input\)promedio1,input$des_est) distribucion1 <-plot(x_distribucion1, y_distribucion1,type=“l”, lty=1, xlab=“x”, ylab= “f(x)”,main=“Función de Distribución de Probabilidad (Normal)”, col=“green”)

}) })

#EJERCICIO 6

peso_diamantes <- c(.46,.61,.52,.48,.57, .54)
peso_diamantes
## [1] 0.46 0.61 0.52 0.48 0.57 0.54
promedio <- mean (peso_diamantes)
promedio
## [1] 0.53
desviacion_estandar_muestral <- sqrt (var (peso_diamantes))
desviacion_estandar_muestral
## [1] 0.05585696
n <- 6
miu_o <- 0.5
t <- (promedio-miu_o)/(desviacion_estandar_muestral/sqrt(n))

#DENSIDAD DE PROBABILIDAD

x_densidad <- seq(-4,4, length=1000)

y_densidad <- dt(x_densidad, df=5)

plot(x_densidad,y_densidad,type = "l", lty = 1, xlab = "t",ylab = "f(t)", main="Función de Densidad de Probabilidad (t destudent)")

#DISTRIBUCION DE PROBABILIDAD

x_distribucion <- seq(-4,4, length=1000)

y_distribucion <- pt(x_densidad, df=5)

plot(x_densidad,y_densidad,type = "l", lty = 1, xlab = "t",ylab = "f(t)", main="Función de distribucion de Probabilidad")

#EJERCICIO 6.1

oxigeno <- c(4.9,5.1,4.9,5.0,5,0,4.7)
oxigeno
## [1] 4.9 5.1 4.9 5.0 5.0 0.0 4.7
promedio_oxigeno <- mean(oxigeno)

desviacion_estandar_oxigeno <- sqrt(var(oxigeno))
desviacion_estandar_oxigeno
## [1] 1.868791
n_oxigeno=6 
miu_o=5 
t_oxigeno=(promedio-miu_o/desviacion_estandar_oxigeno/sqrt(n_oxigeno))
t_oxigeno
## [1] -0.562279

#WINSORIZING VS TRIMMING

peso_diamantes_con_error <- c(.46,.61,.52,.48,.57, 54)
boxplot(peso_diamantes_con_error,horizontal = TRUE)

#install.packages("DescTools")
library(DescTools)

#WINSORIZED

peso_diamantes_winsorizado <- Winsorize(peso_diamantes_con_error,0.10)
peso_diamantes_winsorizado
## [1]  0.4600  0.6100  0.5200  0.4800  0.5700 40.6525

#TRIM

peso_diamantes_recortado <- Trim(peso_diamantes_con_error,1)
peso_diamantes_recortado
## [1] 0.61 0.52 0.48 0.57
## attr(,"trim")
## [1] 1 6
LS0tDQp0aXRsZTogIkFDVCAzLjIgTFlORVRURSINCmF1dGhvcjogIkx5bmV0dGUgU29saXMgQTAxNTYyMzg5Ig0KZGF0ZTogIjIwMjMtMDktMDMiDQpvdXRwdXQ6DQogIGh0bWxfZG9jdW1lbnQ6DQogICAgdG9jOiBUUlVFDQogICAgdG9jX2Zsb2F0OiBUUlVFDQogICAgY29kZV9kb3dubG9hZDogVFJVRQ0KICAgIHRoZW1lOiAieWV0aSINCi0tLQ0KDQpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRX0NCmtuaXRyOjpvcHRzX2NodW5rJHNldChlY2hvID0gVFJVRSkNCmBgYA0KDQojIyBSIE1hcmtkb3duDQoNClRoaXMgaXMgYW4gUiBNYXJrZG93biBkb2N1bWVudC4gTWFya2Rvd24gaXMgYSBzaW1wbGUgZm9ybWF0dGluZyBzeW50YXggZm9yIGF1dGhvcmluZyBIVE1MLCBQREYsIGFuZCBNUyBXb3JkIGRvY3VtZW50cy4gRm9yIG1vcmUgZGV0YWlscyBvbiB1c2luZyBSIE1hcmtkb3duIHNlZSA8aHR0cDovL3JtYXJrZG93bi5yc3R1ZGlvLmNvbT4uDQoNCldoZW4geW91IGNsaWNrIHRoZSAqKktuaXQqKiBidXR0b24gYSBkb2N1bWVudCB3aWxsIGJlIGdlbmVyYXRlZCB0aGF0IGluY2x1ZGVzIGJvdGggY29udGVudCBhcyB3ZWxsIGFzIHRoZSBvdXRwdXQgb2YgYW55IGVtYmVkZGVkIFIgY29kZSBjaHVua3Mgd2l0aGluIHRoZSBkb2N1bWVudC4gWW91IGNhbiBlbWJlZCBhbiBSIGNvZGUgY2h1bmsgbGlrZSB0aGlzOg0KDQpgYGB7ciBjYXJzfQ0Kc3VtbWFyeShjYXJzKQ0KYGBgDQoNCiMjIEluY2x1ZGluZyBQbG90cw0KDQpZb3UgY2FuIGFsc28gZW1iZWQgcGxvdHMsIGZvciBleGFtcGxlOg0KDQpgYGB7ciBwcmVzc3VyZSwgZWNobz1GQUxTRX0NCnBsb3QocHJlc3N1cmUpDQpgYGANCg0KTm90ZSB0aGF0IHRoZSBgZWNobyA9IEZBTFNFYCBwYXJhbWV0ZXIgd2FzIGFkZGVkIHRvIHRoZSBjb2RlIGNodW5rIHRvIHByZXZlbnQgcHJpbnRpbmcgb2YgdGhlIFIgY29kZSB0aGF0IGdlbmVyYXRlZCB0aGUgcGxvdC4NCg0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQoNCiNESVNUUklCVUNPTiBOT01JTkFMDQoNCkxhIERpc3RyaWJ1Y2nDs24gbm9taW5hbCBkZSBwcm9iYWJpbGlkYWQgY29udGludWEgcHVlZGVuIHRvbWFyIHZhcmlhcyBmb3JtYXMsIHBlcm8gdW4gZ3JhbiBuw7ptZXJvIGRlIHZhcmlhYmxlcyBvYnNlcnZhZGFzIGVuIGxhIG5hdHVyYWxlemEgcG9zZWVuIHVuYSBkaXN0cmlidWNpw7NuIGRlIGZyZWN1ZW5jaWEgcXVlIGVzIGNvbW8gc2UgZGlyw61hIGVuIGVzdGFkw61zdGljYSBlcyB1bmEgZGlzdHJpYnVjacOzbiBub3JtYWwgZGUgcHJvYmFiaWxpZGFkLiBMYSBmb3JtdWxhIHF1ZSBnZW5lcmEgZXN0YSBkaXN0cmlidWNpw7NuIGVzOg0KDQoNCiNBUkVBDQpFbCDDoXJlYSBiYWpvIGxhIGN1cnZhIGVzIGlndWFsIGEgMQ0KUGFyYSB2YXJpYWJsZXMgYWxlYXRvcmlhcyBjb250aW51YXMsIMOhcmVhID0gcHJvYmFiaWxpZGFkDQpFbCDDoXJlYSBhIGxhIGl6cXVpZXJkYSBkZSBsYSBtZWRpYSBlcyBpZ3VhbCBhIC41DQpFbCDDoXJlYSBhIGxhIGRlcmVjaGEgZGUgbGEgbWVkaWEgZXMgaWd1YWwgYSAuNQ0KDQojR0FTT0xJTkENClVuIGVzdHVkaW8gZGVtb3N0cm8gcXVlIGVsIHVzbyBkZSBnYXNvbmxpbmEgcGFyYSBhdXRvcyBjb21wYWN0b3MgdmVuZGlkb3MgZW4gRXN0YWRvcyBVbmlkb3MgZXN0YSBkaXN0cmlidWlkbyBub3JtYWxtZW50ZSwgY29uIHVuYSBtZWRpYSBkZSAyNS41IG1pbGxhcyBwZXIgZ2FsbG9uIChtcGcpIHkgdW5hIGRlc3ZpYWNpw7NuIGVzdMOhbmRhciBkZSA0NSBtcGcuIMK/UXVlIHBvcmNlbnRhamUgZGUgYXV0b3MgcmVjb3JyZSAzMCBtcGcgbyBtw6FzPw0KDQoNCmBgYHtyfQ0KKDMwLTI1LjUpLzQuNQ0KMS0wLjg0MTMNCmBgYA0KDQotIMK/U2kgdW4gZmFicmljYW50ZSBkZXNlYSBkZXNhcm9sbGFyIHVuIGF1dG8gcXVlIHN1cGVyZSBlbCA5NSUgZGUgbGFzIGNvbXBhY3RvcyBhY3R1YWxlcy4gDQotIMK/Q3VhbCBkZWJlIHNlciBlbCByZW5kaW1pZW50byBtcGc/DQoNCmBgYHtyfQ0KMjUuNSsxLjY0NSo0LjUNCmBgYA0KDQoNCiNHSVJBU09MRVMNCg0KDQpTdXBvbmdhIHFVZSBsb3MgZGlhbWVudHJvcyBkZSB0YWxsb3Mgbm8gc29wb3J0YWRvcyBlbiBsYSBiYXNlLCBkZSB1bmEgZXNwZWNpZSBwYXJ0aWN1bGFyIGRlIGdpcmFzb2wsIHRpZW5lbiB1bmEgZGlzdHJpYnVjacOzbiBub3JtYWwgY29uIHVuIGRpYW1ldHJvIGRlIDM1IG1tIHkgdW5hIGRlc3ZpYWNpw7NuIGVzdGFuZGFyIGRlIDMgbW0uDQoNCi0gwr9DdWFsIGVzIGxhIHByb2JhYmlsaWRhZCBkZSBxdWUgdW5hIHBsYW50YSBkZSBnaXJhc29sIHRlbmdhIHVuIGRpYW1ldHJvIGRlIGJhc2UgZGUgbcOhcyBkZSA0MCBtbT8NCg0KYGBge3J9DQp6NDEgPC0gKDQwLTM1KS8zDQp6NDENCg0KDQpwNDEgPC0gMS1wbm9ybSg0MCwzNSwzKQ0KcDQxDQpgYGANCg0KDQojREVOU0lEQUQgUFJPQkFCSUxJREFEIE5PUk1BTA0KDQoNCmBgYHtyfQ0KeCA8LSA0MA0KDQpwcm9tIDwtIDM1DQoNCmRlc3ZpYWNpb25fZSA8LSAzDQoNCnhfZGVuc2lkYWQgPC0gc2VxKHByb20gLTMqZGVzdmlhY2lvbl9lLCBwcm9tKzMqZGVzdmlhY2lvbl9lLCBsZW5ndGg9MTAwMCkNCg0KeV9kZW5zaWRhZCA8LSBkbm9ybSh4X2RlbnNpZGFkLHByb20sZGVzdmlhY2lvbl9lKQ0KDQpwbG90KHhfZGVuc2lkYWQsIHlfZGVuc2lkYWQsdHlwZT0ibCIsIGx0eT0xLCB4bGFiPSJ4IiwgeWxhYj0gImYoeCkiLG1haW49IkZ1bmNpw7NuIGRlIERlbnNpZGFkIGRlIFByb2JhYmlsaWRhZCAoTm9ybWFsKSIsIGNvbD0ibWFnZW50YSIpDQpgYGANCg0KI0RJU1RSSUJVQ0lPTiBERSBQUk9CQUJJTElEQUQNCg0KDQpgYGB7cn0NCnhfZGlzdHJpYnVjaW9uIDwtIHNlcShwcm9tLTMqZGVzdmlhY2lvbl9lLCBwcm9tKzMqZGVzdmlhY2lvbl9lLCBsZW5ndGg9MTAwMCkNCnlfZGlzdHJpYnVjaW9uIDwtIHBub3JtKHhfZGlzdHJpYnVjaW9uLHByb20sZGVzdmlhY2lvbl9lKQ0KcGxvdCh4X2Rpc3RyaWJ1Y2lvbiwgeV9kaXN0cmlidWNpb24sdHlwZT0ibCIsIGx0eT0xLCB4bGFiPSJ4IiwgeWxhYj0gImYoeCkiLG1haW49IkZ1bmNpw7NuIGRlIERpc3RyaWJ1Y2nDs24gZGUgUHJvYmFiaWxpZGFkIChOb3JtYWwpIiwgY29sPSJvcmFuZ2UiKQ0KYGBgDQoNCi0gU2kgMiBwbGFudGFzIGRlIGdpcmFzb2wgc2Ugc2VsZWNjaW9uYW4gYWwgYXphciwgwr9jdWFsIGVzIGxhIHBvc2liaWxpZGFkIGRlIHF1ZSBhbWJhcyBwbGFudGFzIHRlbmdhbiB1biBkacOhbWV0cm8gZGUgYmFzZSBzZSBtw6FzIGRlIDQwIG1tPw0KDQpgYGB7cn0NCnA0MiA8LSBwNDEqcDQxDQpwNDINCmBgYA0KDQotIMK/RGVudHJvIGRlIHF1ZSBsaW1pdGVzIGVzcGVyYXJpYSB1c3RlZCBxdWUgc2UgZW5jdWVudHJlbiBsb3MgZGlhbWV0cm9zIGRlIGJhc2UsIGNvbiBwcm9iYWJpbGlkYWQgZGUgMC45NT8NCg0KYGBge3J9DQpwNDM8LSAzNS0oMS45NiozKQ0KDQpwNDM8LSAzNSsoMS45NiozKQ0KYGBgDQoNCi0gwr9RdWUgZGlhbWV0cm8gcmVwcmVzZW50YSBlbCA5MCUgZGUgbGEgZGlzdHJpYnVjaW9uIGRlIGRpYW1ldHJvcz8NCg0KYGBge3J9DQpwNDQ8LSBxbm9ybSguOTAsMzUsMykNCnA0NA0KYGBgDQoNCg0KI1NISU5ZQVBQDQoNCg0KDQpsaWJyYXJ5KHNoaW55KQ0KbGlicmFyeShzaGlueXRoZW1lcykNCnNoaW55QXBwKA0KDQp1aSA8LSBmbHVpZFBhZ2UodGhlbWUgPSBzaGlueXRoZW1lKCJjZXJ1bGVhbiIpLA0KICAgICAgICAgICAgICAgIG5hdmJhclBhZ2UoIkFwbGljYWNpb25lcyIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJQYW5lbCgiRGlzdHJpYnVjacOzbiBOb3JtYWwiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWRlYmFyUGFuZWwoDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFncyRoMygiSW5ncmVzYSBsb3Mgc2lndWllbnRlcyBkYXRvczoiKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1lcmljSW5wdXQoInhfZnVuY2lvbiIsIng6IiwgMSksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtZXJpY0lucHV0KCJwcm9tZWRpbzEiLCJwcm9tZWRpbzoiLCAwKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1lcmljSW5wdXQoImRlc19lc3QiLCJEZXN2aWFjacOzbiBFc3RhbmRhcjoiLCAxKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1haW5QYW5lbCgNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoMSgiRnVuY2nDs24gZGUgRGlzdHJpYnVjacOzbiB5IERlbnNpZGFkIE5vcm1hbCIpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsb3RPdXRwdXQoImRlbnNpZGFkIiksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxvdE91dHB1dCgiZGlzdHJpYnVjaW9uMSIpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksDQogICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJQYW5lbCgiVGFiIDIiKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYlBhbmVsKCJUYWIgMyIpDQogICAgICAgICAgICAgICAgKQ0KKSwgIA0KDQpzZXJ2ZXIgPC0gZnVuY3Rpb24oaW5wdXQsIG91dHB1dCkgew0KICBvdXRwdXQkZGVuc2lkYWQgPC0gcmVuZGVyUGxvdCh7DQogICAgeF9kZW5zaWRhZDEgPC0gc2VxKGlucHV0JHByb21lZGlvMS0zKmlucHV0JGRlc19lc3QsIGlucHV0JHByb21lZGlvMSszKmlucHV0JGRlc19lc3QsIGxlbmd0aD0xMDAwKQ0KICAgIHlfZGVuc2lkYWQxIDwtIGRub3JtKHhfZGVuc2lkYWQxLGlucHV0JHByb21lZGlvMSxpbnB1dCRkZXNfZXN0KQ0KICAgIGRlbnNpZGFkPC0gcGxvdCh4X2RlbnNpZGFkMSwgeV9kZW5zaWRhZDEsdHlwZT0ibCIsIGx0eT0xLCB4bGFiPSJ4IiwgeWxhYj0gImYoeCkiLG1haW49IkZ1bmNpw7NuIGRlIERlbnNpZGFkIGRlIFByb2JhYmlsaWRhZCAoTm9ybWFsKSIsIGNvbD0ieWVsbG93IikNCiAgICB9KQ0KDQogb3V0cHV0JGRpc3RyaWJ1Y2lvbjEgPC0gcmVuZGVyUGxvdCh7DQogICAgeF9kaXN0cmlidWNpb24xIDwtIHNlcShpbnB1dCRwcm9tZWRpbzEtMyppbnB1dCRkZXNfZXN0LCBpbnB1dCRwcm9tZWRpbzErMyppbnB1dCRkZXNfZXN0LCBsZW5ndGg9MTAwMCkNCiAgICB5X2Rpc3RyaWJ1Y2lvbjEgPC0gcG5vcm0oeF9kaXN0cmlidWNpb24xLGlucHV0JHByb21lZGlvMSxpbnB1dCRkZXNfZXN0KQ0KICAgIGRpc3RyaWJ1Y2lvbjEgPC1wbG90KHhfZGlzdHJpYnVjaW9uMSwgeV9kaXN0cmlidWNpb24xLHR5cGU9ImwiLCBsdHk9MSwgeGxhYj0ieCIsIHlsYWI9ICJmKHgpIixtYWluPSJGdW5jacOzbiBkZSBEaXN0cmlidWNpw7NuIGRlIFByb2JhYmlsaWRhZCAoTm9ybWFsKSIsIGNvbD0iZ3JlZW4iKQ0KICAgIA0KICB9KQ0KfSkNCg0KDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQoNCiNFSkVSQ0lDSU8gNg0KDQoNCmBgYHtyfQ0KcGVzb19kaWFtYW50ZXMgPC0gYyguNDYsLjYxLC41MiwuNDgsLjU3LCAuNTQpDQpwZXNvX2RpYW1hbnRlcw0KcHJvbWVkaW8gPC0gbWVhbiAocGVzb19kaWFtYW50ZXMpDQpwcm9tZWRpbw0KZGVzdmlhY2lvbl9lc3RhbmRhcl9tdWVzdHJhbCA8LSBzcXJ0ICh2YXIgKHBlc29fZGlhbWFudGVzKSkNCmRlc3ZpYWNpb25fZXN0YW5kYXJfbXVlc3RyYWwNCm4gPC0gNg0KbWl1X28gPC0gMC41DQp0IDwtIChwcm9tZWRpby1taXVfbykvKGRlc3ZpYWNpb25fZXN0YW5kYXJfbXVlc3RyYWwvc3FydChuKSkNCg0KYGBgDQoNCg0KI0RFTlNJREFEIERFIFBST0JBQklMSURBRA0KDQoNCmBgYHtyfQ0KeF9kZW5zaWRhZCA8LSBzZXEoLTQsNCwgbGVuZ3RoPTEwMDApDQoNCnlfZGVuc2lkYWQgPC0gZHQoeF9kZW5zaWRhZCwgZGY9NSkNCg0KcGxvdCh4X2RlbnNpZGFkLHlfZGVuc2lkYWQsdHlwZSA9ICJsIiwgbHR5ID0gMSwgeGxhYiA9ICJ0Iix5bGFiID0gImYodCkiLCBtYWluPSJGdW5jacOzbiBkZSBEZW5zaWRhZCBkZSBQcm9iYWJpbGlkYWQgKHQgZGVzdHVkZW50KSIpDQpgYGANCg0KDQojRElTVFJJQlVDSU9OIERFIFBST0JBQklMSURBRA0KDQoNCmBgYHtyfQ0KeF9kaXN0cmlidWNpb24gPC0gc2VxKC00LDQsIGxlbmd0aD0xMDAwKQ0KDQp5X2Rpc3RyaWJ1Y2lvbiA8LSBwdCh4X2RlbnNpZGFkLCBkZj01KQ0KDQpwbG90KHhfZGVuc2lkYWQseV9kZW5zaWRhZCx0eXBlID0gImwiLCBsdHkgPSAxLCB4bGFiID0gInQiLHlsYWIgPSAiZih0KSIsIG1haW49IkZ1bmNpw7NuIGRlIGRpc3RyaWJ1Y2lvbiBkZSBQcm9iYWJpbGlkYWQiKQ0KYGBgDQoNCg0KI0VKRVJDSUNJTyA2LjENCg0KDQpgYGB7cn0NCm94aWdlbm8gPC0gYyg0LjksNS4xLDQuOSw1LjAsNSwwLDQuNykNCm94aWdlbm8NCg0KcHJvbWVkaW9fb3hpZ2VubyA8LSBtZWFuKG94aWdlbm8pDQoNCmRlc3ZpYWNpb25fZXN0YW5kYXJfb3hpZ2VubyA8LSBzcXJ0KHZhcihveGlnZW5vKSkNCmRlc3ZpYWNpb25fZXN0YW5kYXJfb3hpZ2Vubw0Kbl9veGlnZW5vPTYgDQptaXVfbz01IA0KdF9veGlnZW5vPShwcm9tZWRpby1taXVfby9kZXN2aWFjaW9uX2VzdGFuZGFyX294aWdlbm8vc3FydChuX294aWdlbm8pKQ0KdF9veGlnZW5vDQpgYGANCg0KDQojV0lOU09SSVpJTkcgVlMgVFJJTU1JTkcNCg0KYGBge3J9DQpwZXNvX2RpYW1hbnRlc19jb25fZXJyb3IgPC0gYyguNDYsLjYxLC41MiwuNDgsLjU3LCA1NCkNCmJveHBsb3QocGVzb19kaWFtYW50ZXNfY29uX2Vycm9yLGhvcml6b250YWwgPSBUUlVFKQ0KYGBgDQoNCg0KYGBge3J9DQojaW5zdGFsbC5wYWNrYWdlcygiRGVzY1Rvb2xzIikNCmxpYnJhcnkoRGVzY1Rvb2xzKQ0KYGBgDQoNCiNXSU5TT1JJWkVEDQpgYGB7cn0NCnBlc29fZGlhbWFudGVzX3dpbnNvcml6YWRvIDwtIFdpbnNvcml6ZShwZXNvX2RpYW1hbnRlc19jb25fZXJyb3IsMC4xMCkNCnBlc29fZGlhbWFudGVzX3dpbnNvcml6YWRvDQpgYGANCg0KI1RSSU0NCmBgYHtyfQ0KcGVzb19kaWFtYW50ZXNfcmVjb3J0YWRvIDwtIFRyaW0ocGVzb19kaWFtYW50ZXNfY29uX2Vycm9yLDEpDQpwZXNvX2RpYW1hbnRlc19yZWNvcnRhZG8NCmBgYA0KDQoNCg0KDQoNCg==