Pregunta 1

a) Análisis exploratorio

Anáisis Univariado

require(ggplot2)
summary(Pregunta_1)
 concentracion   molusco             consumo      
 Min.   : 50   Length:48          Min.   : 1.800  
 1st Qu.: 50   Class :character   1st Qu.: 6.312  
 Median : 75   Mode  :character   Median : 9.700  
 Mean   : 75                      Mean   : 9.289  
 3rd Qu.:100                      3rd Qu.:11.232  
 Max.   :100                      Max.   :18.800  
ggplot(Pregunta_1, aes(x=consumo))+geom_histogram()+theme_bw()+ylab("Frecuencia")+xlab("Consumo Oxígeno")+ggtitle("Gráfico 1")

Para el histograma del consumo de oxígeno obtenido se observa una amplia variabilidad en los datos obtenidos, desde 1.8 hasta 18.8. El mayor consumo de oxígeno obtenida oscila entre 9 y 11. Adicionalmente la mediana tiene un valor similar a la media, demostrando la simetría de la distribución.

Análisi Bivariado

tapply(Pregunta_1$consumo, Pregunta_1$molusco, mean,na.rm=TRUE)
       A        B 
9.968750 8.609167 
tapply(Pregunta_1$consumo, Pregunta_1$concentracion, mean,na.rm=TRUE)
      50       75      100 
12.25062  6.97625  8.64000 
Pregunta_1$concentracion=as.factor(Pregunta_1$concentracion)
ggplot(Pregunta_1, aes(x=concentracion, y=consumo, fill=molusco))+geom_boxplot()+ylab("Consumo oxígeno")+xlab("Concentración de agua")+ggtitle("Gráfico 2")+scale_fill_discrete(name = "Tipo de molusco")

En el gráfico 2 se logra observar que el mayor consumo de oxígeno se dio en los molucos que se expusieron a una concentración de agua del 50%, así como los moluscos de tipo B fueron los que presentaron mayor consumo que los moluscos A. Mientras que en concentraciones de agua del 75% y 100% que presentaron menos consumo de oxígeno frente a una concentración del 50% fueron los moluscos de tipo A los que presentaron mayor consumo de oxígeno frente a los de tipo B.

b)Estimación del modelo y ANOVA

Se realizó un diseño balanceado debido a que se utilizaron las mismas cantidades de moluscos de ambos tipos, adicionalmente los datos son independientes y tienen una distribución normal.

model_1=lm(consumo~molusco+concentracion, data = Pregunta_1)
anova(model_1)
Analysis of Variance Table

Response: consumo
              Df Sum Sq Mean Sq F value    Pr(>F)    
molusco        1  22.18  22.182  2.5504    0.1174    
concentracion  2 232.66 116.330 13.3754 2.896e-05 ***
Residuals     44 382.68   8.697                      
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
summary(model_1)

Call:
lm(formula = consumo ~ molusco + concentracion, data = Pregunta_1)

Residuals:
    Min      1Q  Median      3Q     Max 
-5.1908 -1.9956 -0.8731  2.1398  6.1292 

Coefficients:
                 Estimate Std. Error t value Pr(>|t|)    
(Intercept)       12.9304     0.8513  15.188  < 2e-16 ***
moluscoB          -1.3596     0.8513  -1.597   0.1174    
concentracion75   -5.2744     1.0427  -5.059 7.95e-06 ***
concentracion100  -3.6106     1.0427  -3.463   0.0012 ** 
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 2.949 on 44 degrees of freedom
Multiple R-squared:  0.3997,    Adjusted R-squared:  0.3588 
F-statistic: 9.767 on 3 and 44 DF,  p-value: 4.666e-05

Con los datos obtenidos de la ANOVA se onserva que la concentración de agua es significativa sobre el consumo de oxígeno. Mientras que el tipo de molusco no presenta significancia notable frente al consumo de oxígeno.

require(agricolae)
Loading required package: agricolae
postanova_1=LSD.test(model_1,"concentracion")
postanova_1
$statistics
  MSerror Df     Mean       CV  t.value      LSD
  8.69727 44 9.288958 31.74859 2.015368 2.101361

$parameters
        test p.ajusted        name.t ntr alpha
  Fisher-LSD      none concentracion   3  0.05

$means
     consumo      std  r       LCL       UCL  Min  Max    Q25    Q50     Q75
100  8.64000 3.000669 16  7.154113 10.125887 3.68 14.0  6.140  8.345 10.5750
50  12.25062 3.199643 16 10.764738 13.736512 6.38 18.8 10.085 11.455 14.5000
75   6.97625 2.783709 16  5.490363  8.462137 1.80 13.2  5.200  6.430  8.7675

$comparison
NULL

$groups
     consumo groups
50  12.25062      a
100  8.64000      b
75   6.97625      b

attr(,"class")
[1] "group"

Los resultados obtenidos en la postanova se observa que la concentración de agua al 50% tiene una mayor relación con el consumo de oxígeno sin importar el tipo de molusco. Mientras que las concentraciones al 75% y 100% tienen una menor relación con el consumo de oxígeno y no son signicativamente diferentes entre si.

Pregunta 2

Pregunta_2
Pregunta_2$temporada=as.factor(Pregunta_2$temporada)
Pregunta_2$tamaño=as.factor(Pregunta_2$tamaño)

Planteamiento de hipótesis

Hipotesis 1: A mayor tamaño de canto intermareal, mayor riqueza de especies. Hipotesis 2: Existe variación en la riqueza de especies en las diferentes épocas del año. Hipotesis 3: Existe interacción entre el tamaño del canto y la época del año y su influecia en la riqueza de especies.

Análisi exploratorio

ggplot(Pregunta_2, aes(x=tamaño, y=riqueza, fill=tamaño))+geom_boxplot()+ylab("Riqueza de especies")+xlab("Tamaño de canto intermareal")+ggtitle("Gráfico 3")+scale_fill_discrete(name = "Tamaño")

En el gráfico 3 se onserva que existe una mayor riqueza de especies en el tamaño del canto intermareal 1 (T1). Adicionalmente se observa que a mayor tamaño de canto intermareal, menor riqueza de especies.

ggplot(Pregunta_2, aes(x=temporada, y=riqueza, fill=temporada))+geom_boxplot()+ylab("Riqueza de especies")+xlab("Época del año (Temporada)")+ggtitle("Gráfico 4")+scale_fill_discrete(name = "Temporada")

En el gráfico 4 se observa que hay una alta variación en la variable temporada. Pero sin presentar mayor diferencia entre cada tenporada que permitan determinar con certeza cual temporada favorece más la riqueza de especies.

Estimación del modelo y ANOVA

model_2=lm(riqueza~temporada+tamaño, data=Pregunta_2)
anova(model_2)
Analysis of Variance Table

Response: riqueza
          Df  Sum Sq Mean Sq F value    Pr(>F)    
temporada  3   4.313   1.438  0.2825    0.8378    
tamaño     3 250.562  83.521 16.4126 8.323e-08 ***
Residuals 57 290.062   5.089                      
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Con los datos obtenidos de la anova se observa que el tamaño del canto intermareal es significativo sobre la riqueza de especies . Sin embargo, las temporadas no presentan significancia alguna frente a la riqueza de especies.

postanova_2=LSD.test(model_2,"tamaño")
postanova_2
$statistics
   MSerror Df    Mean       CV  t.value      LSD
  5.088816 57 4.71875 47.80589 2.002465 1.597086

$parameters
        test p.ajusted name.t ntr alpha
  Fisher-LSD      none tamaño   4  0.05

$means
  riqueza      std  r      LCL      UCL Min Max  Q25 Q50  Q75
1  7.3125 1.922455 16 6.183189 8.441811   4  11 6.75   7 8.00
2  5.8750 2.963669 16 4.745689 7.004311   0  11 3.75   6 8.00
3  3.3750 2.276694 16 2.245689 4.504311   0   9 2.00   3 4.25
4  2.3125 1.400893 16 1.183189 3.441811   0   5 1.00   2 3.25

$comparison
NULL

$groups
  riqueza groups
1  7.3125      a
2  5.8750      a
3  3.3750      b
4  2.3125      b

attr(,"class")
[1] "group"

Con los datos obtenidos de la postanova se observa que los cantos intermareales de tamaño 1 y 2 presentan mayor relación con la riqueza de especies y no presentan diferencias entre si. Mientras que los tamaños 3 y 4 tienen una menor relación frente a la riqueza de especies y tampoco presentan diferencias entre si.

Tamaño del canto donde se encuentra mayor número de especies para cada época del año.

postanova_3=LSD.test(model_2, list("tamaño","temporada"))
postanova_3
$statistics
   MSerror Df    Mean       CV  t.value      LSD
  5.088816 57 4.71875 47.80589 2.002465 3.194173

$parameters
        test p.ajusted           name.t ntr alpha
  Fisher-LSD      none tamaño:temporada  16  0.05

$means
    riqueza       std r          LCL       UCL Min Max  Q25 Q50  Q75
1:1    6.50 1.0000000 4  4.241378785  8.758621   5   7 6.50 7.0 7.00
1:2    6.75 2.2173558 4  4.491378785  9.008621   4   9 5.50 7.0 8.25
1:3    8.25 1.8929694 4  5.991378785 10.508621   7  11 7.00 7.5 8.75
1:4    7.75 2.5000000 4  5.491378785 10.008621   5  11 6.50 7.5 8.75
2:1    7.25 3.3040379 4  4.991378785  9.508621   3  11 6.00 7.5 8.75
2:2    6.00 2.9439203 4  3.741378785  8.258621   3   9 3.75 6.0 8.25
2:3    5.75 4.1932485 4  3.491378785  8.008621   0  10 4.50 6.5 7.75
2:4    4.50 1.2909944 4  2.241378785  6.758621   3   6 3.75 4.5 5.25
3:1    2.25 0.9574271 4 -0.008621215  4.508621   1   3 1.75 2.5 3.00
3:2    4.00 1.8257419 4  1.741378785  6.258621   2   6 2.75 4.0 5.25
3:3    4.00 4.2426407 4  1.741378785  6.258621   0   9 0.75 3.5 6.75
3:4    3.25 0.9574271 4  0.991378785  5.508621   2   4 2.75 3.5 4.00
4:1    2.25 0.5000000 4 -0.008621215  4.508621   2   3 2.00 2.0 2.25
4:2    3.25 1.7078251 4  0.991378785  5.508621   1   5 2.50 3.5 4.25
4:3    1.75 1.7078251 4 -0.508621215  4.008621   0   4 0.75 1.5 2.50
4:4    2.00 1.4142136 4 -0.258621215  4.258621   1   4 1.00 1.5 2.50

$comparison
NULL

$groups
    riqueza groups
1:3    8.25      a
1:4    7.75      a
2:1    7.25     ab
1:2    6.75    abc
1:1    6.50    abc
2:2    6.00   abcd
2:3    5.75   abcd
2:4    4.50   bcde
3:2    4.00    cde
3:3    4.00    cde
3:4    3.25     de
4:2    3.25     de
3:1    2.25      e
4:1    2.25      e
4:4    2.00      e
4:3    1.75      e

attr(,"class")
[1] "group"
bar.group(postanova_3$groups,xlim=c(0,10),horiz = T,las=2)

Utilizando el modelo postanova y con ayuda de un gráfico de barras se logra observar que el tamaño de canto intermareal 1 y la temporada 3 del año es la mejor combinación asociadad a una mayor riqueza de especies. Adicionalmente el tamaño de canto intermareal 1 y la temporada 4 del año también tienen alta relación con la riqueza de especies sin presentar mayor diferencia con la primera opción. Para finalizar, el tamaño de canto intermareal 4 es el que presenta una menor riqueza de especies.

Pregunta 3

Pregunta_3
Pregunta_3$dieta=as.factor(Pregunta_3$dieta)
ggplot(Pregunta_3, aes(x=dieta, y=peso, fill=dieta))+geom_boxplot()+ylab("Peso (Kg)")+xlab("Dieta")+ggtitle("Gráfico 5")+scale_fill_discrete(name = "Dieta")

En el gráfico 5 se observa que las dietas A y D presentan un menor peso en los cerdos. Mientras que las dietas B y C presentan mayor peso.

Estimación del modelo y ANOVA

model_4=lm(peso~dieta,data=Pregunta_3)
summary(model_4)

Call:
lm(formula = peso ~ dieta, data = Pregunta_3)

Residuals:
   Min     1Q Median     3Q    Max 
-4.180 -2.680  0.440  2.095  3.980 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)   64.620      1.341  48.180  < 2e-16 ***
dietaB         6.680      1.897   3.522 0.002830 ** 
dietaC         8.860      1.897   4.671 0.000256 ***
dietaD        -1.380      1.897  -0.728 0.477398    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 2.999 on 16 degrees of freedom
Multiple R-squared:  0.7224,    Adjusted R-squared:  0.6704 
F-statistic: 13.88 on 3 and 16 DF,  p-value: 0.0001022
anova(model_4)
Analysis of Variance Table

Response: peso
          Df Sum Sq Mean Sq F value    Pr(>F)    
dieta      3 374.50 124.833  13.879 0.0001022 ***
Residuals 16 143.91   8.994                      
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Con base a los resultados obtenidos en el modelo 4 se observa que las dietas A, B y C son significativas en relación al peso de los cerdos. Mientras que la dieta D no tiene significancia alguna con los pesos de los cerdos.

postanova_4=LSD.test(model_4, "dieta")
postanova_4
$statistics
  MSerror Df  Mean       CV  t.value      LSD
  8.99425 16 68.16 4.400002 2.119905 4.020952

$parameters
        test p.ajusted name.t ntr alpha
  Fisher-LSD      none  dieta   4  0.05

$means
   peso      std r      LCL      UCL  Min  Max  Q25  Q50  Q75
A 64.62 3.345445 5 61.77676 67.46324 60.8 68.6 61.7 65.0 67.0
B 71.30 3.068387 5 68.45676 74.14324 67.7 75.0 68.7 71.8 73.3
C 73.48 3.087394 5 70.63676 76.32324 69.3 77.1 71.5 74.3 75.2
D 63.24 2.416195 5 60.39676 66.08324 60.3 66.7 61.9 63.1 64.2

$comparison
NULL

$groups
   peso groups
C 73.48      a
B 71.30      a
A 64.62      b
D 63.24      b

attr(,"class")
[1] "group"

Con los resultados obtenidos en la postanova se observa que las dietas C y B efectivamente se relacionan más con el peso de los cerdos y no presentan diferencias significativas entre si. Mientras que las dietas A y D tienen menor relación frente al peso de los cerdos y tampoco presentan diferencias significativas entre si.

Pregunta 4

Análisis exploratorio

Pregunta_4$sexo=as.factor(Pregunta_4$sexo)
Pregunta_4$temperatura=as.factor(Pregunta_4$temperatura)
ggplot(Pregunta_4,aes(x=temperatura,y=consumo_O2, fill=temperatura))+geom_boxplot()+ylab("Consumo de oxígeno (mgO2)")+xlab("Temperatura")+ggtitle("Gráfico 6")+scale_fill_discrete(name = "Temperatura")+facet_grid(~sexo)

En el gráfico 6 se logra observar que el consumo de oxígeno no presenta mucha diferencia en ambos sexos, en el cual, hay mayor consumo de oxígeno a altas temperaturas, mientras que a bajas temperaturas el consumo de oxígeno es menor.

Estimación del modelo y ANOVA

model_5=lm(consumo_O2~sexo+temperatura, data = Pregunta_4)
summary(model_5)

Call:
lm(formula = consumo_O2 ~ sexo + temperatura, data = Pregunta_4)

Residuals:
    Min      1Q  Median      3Q     Max 
-0.3750 -0.1625 -0.0125  0.1812  0.4000 

Coefficients:
                 Estimate Std. Error t value Pr(>|t|)    
(Intercept)       3.02500    0.09276  32.612  < 2e-16 ***
sexoMacho        -0.02500    0.09276  -0.270     0.79    
temperaturaBaja  -1.37500    0.11361 -12.103 1.17e-10 ***
temperaturaMedia -0.62500    0.11361  -5.501 2.19e-05 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.2272 on 20 degrees of freedom
Multiple R-squared:  0.8802,    Adjusted R-squared:  0.8622 
F-statistic: 48.99 on 3 and 20 DF,  p-value: 2.124e-09
anova(model_5)
Analysis of Variance Table

Response: consumo_O2
            Df Sum Sq Mean Sq F value    Pr(>F)    
sexo         1 0.0037  0.0037  0.0726    0.7903    
temperatura  2 7.5833  3.7917 73.4463 6.108e-10 ***
Residuals   20 1.0325  0.0516                      
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Con los datos obtenidos en la anova se observa que la temperatura es significativa sobre el consumo de oxígeno. Mientras que el sexo no presenta significancia alguna frente al consumo de oxígeno.

postanova_5=LSD.test(model_5,list("sexo","temperatura"))
postanova_5
$statistics
   MSerror Df     Mean       CV  t.value       LSD
  0.051625 20 2.345833 9.685742 2.085963 0.3351365

$parameters
        test p.ajusted           name.t ntr alpha
  Fisher-LSD      none sexo:temperatura   6  0.05

$means
             consumo_O2       std r      LCL      UCL Min Max   Q25  Q50   Q75
Hembra:Alta       2.950 0.1732051 4 2.713023 3.186977 2.7 3.1 2.925 3.00 3.025
Hembra:Baja       1.600 0.1825742 4 1.363023 1.836977 1.4 1.8 1.475 1.60 1.725
Hembra:Media      2.525 0.1500000 4 2.288023 2.761977 2.4 2.7 2.400 2.50 2.625
Macho:Alta        3.075 0.2753785 4 2.838023 3.311977 2.8 3.4 2.875 3.05 3.250
Macho:Baja        1.675 0.2217356 4 1.438023 1.911977 1.4 1.9 1.550 1.70 1.825
Macho:Media       2.250 0.2645751 4 2.013023 2.486977 2.0 2.6 2.075 2.20 2.375

$comparison
NULL

$groups
             consumo_O2 groups
Macho:Alta        3.075      a
Hembra:Alta       2.950      a
Hembra:Media      2.525      b
Macho:Media       2.250      b
Macho:Baja        1.675      c
Hembra:Baja       1.600      c

attr(,"class")
[1] "group"

Con los resultados obtenidos en la postanova se observa que la mejor combinación para un mayor consumo de oxígeno es a altas temperaturas, puesto que para ambos sexos no hay diferencia significativa. Minetras que para un consumo bajo de oxígeno es favorecido a temperaturas bajas en ambos sexos que tampoco tienen diferencias significativas.

LS0tDQp0aXRsZTogIlBhcmNpYWwgMyINCm91dHB1dDogaHRtbF9ub3RlYm9vaw0KYXV0aG9yOiAiSmVhbiBLYXJsbyBEZWxnYWRvIg0KLS0tDQoNCiMjIFByZWd1bnRhIDENCg0KIyMgYSkgQW7DoWxpc2lzIGV4cGxvcmF0b3Jpbw0KDQpgYGB7cn0NClByZWd1bnRhXzENCg0KYGBgDQoNCiMjIEFuw6Fpc2lzIFVuaXZhcmlhZG8NCg0KYGBge3J9DQpyZXF1aXJlKGdncGxvdDIpDQpzdW1tYXJ5KFByZWd1bnRhXzEpDQpnZ3Bsb3QoUHJlZ3VudGFfMSwgYWVzKHg9Y29uc3VtbykpK2dlb21faGlzdG9ncmFtKCkrdGhlbWVfYncoKSt5bGFiKCJGcmVjdWVuY2lhIikreGxhYigiQ29uc3VtbyBPeMOtZ2VubyIpK2dndGl0bGUoIkdyw6FmaWNvIDEiKQ0KDQpgYGANCg0KDQpQYXJhIGVsIGhpc3RvZ3JhbWEgZGVsIGNvbnN1bW8gZGUgb3jDrWdlbm8gb2J0ZW5pZG8gc2Ugb2JzZXJ2YSB1bmEgYW1wbGlhIHZhcmlhYmlsaWRhZCBlbiBsb3MgZGF0b3Mgb2J0ZW5pZG9zLCBkZXNkZSAxLjggaGFzdGEgMTguOC4gRWwgbWF5b3IgY29uc3VtbyBkZSBveMOtZ2VubyBvYnRlbmlkYSBvc2NpbGEgZW50cmUgOSB5IDExLiBBZGljaW9uYWxtZW50ZSBsYSBtZWRpYW5hIHRpZW5lIHVuIHZhbG9yIHNpbWlsYXIgYSBsYSBtZWRpYSwgZGVtb3N0cmFuZG8gbGEgc2ltZXRyw61hIGRlIGxhIGRpc3RyaWJ1Y2nDs24uDQoNCiMjIEFuw6FsaXNpIEJpdmFyaWFkbw0KDQpgYGB7cn0NCnRhcHBseShQcmVndW50YV8xJGNvbnN1bW8sIFByZWd1bnRhXzEkbW9sdXNjbywgbWVhbixuYS5ybT1UUlVFKQ0KdGFwcGx5KFByZWd1bnRhXzEkY29uc3VtbywgUHJlZ3VudGFfMSRjb25jZW50cmFjaW9uLCBtZWFuLG5hLnJtPVRSVUUpDQpQcmVndW50YV8xJGNvbmNlbnRyYWNpb249YXMuZmFjdG9yKFByZWd1bnRhXzEkY29uY2VudHJhY2lvbikNCmdncGxvdChQcmVndW50YV8xLCBhZXMoeD1jb25jZW50cmFjaW9uLCB5PWNvbnN1bW8sIGZpbGw9bW9sdXNjbykpK2dlb21fYm94cGxvdCgpK3lsYWIoIkNvbnN1bW8gb3jDrWdlbm8iKSt4bGFiKCJDb25jZW50cmFjacOzbiBkZSBhZ3VhIikrZ2d0aXRsZSgiR3LDoWZpY28gMiIpK3NjYWxlX2ZpbGxfZGlzY3JldGUobmFtZSA9ICJUaXBvIGRlIG1vbHVzY28iKQ0KYGBgDQpFbiBlbCBncsOhZmljbyAyIHNlIGxvZ3JhIG9ic2VydmFyIHF1ZSBlbCBtYXlvciBjb25zdW1vIGRlIG94w61nZW5vIHNlIGRpbyBlbiBsb3MgbW9sdWNvcyBxdWUgc2UgZXhwdXNpZXJvbiBhIHVuYSBjb25jZW50cmFjacOzbiBkZSBhZ3VhIGRlbCA1MCUsIGFzw60gY29tbyBsb3MgbW9sdXNjb3MgZGUgdGlwbyBCIGZ1ZXJvbiBsb3MgcXVlIHByZXNlbnRhcm9uIG1heW9yIGNvbnN1bW8gcXVlIGxvcyBtb2x1c2NvcyBBLiBNaWVudHJhcyBxdWUgZW4gY29uY2VudHJhY2lvbmVzIGRlIGFndWEgZGVsIDc1JSB5IDEwMCUgcXVlIHByZXNlbnRhcm9uIG1lbm9zIGNvbnN1bW8gZGUgb3jDrWdlbm8gZnJlbnRlIGEgdW5hIGNvbmNlbnRyYWNpw7NuIGRlbCA1MCUgZnVlcm9uIGxvcyBtb2x1c2NvcyBkZSB0aXBvIEEgbG9zIHF1ZSBwcmVzZW50YXJvbiBtYXlvciBjb25zdW1vIGRlIG94w61nZW5vIGZyZW50ZSBhIGxvcyBkZSB0aXBvIEIuDQoNCiMjIGIpRXN0aW1hY2nDs24gZGVsIG1vZGVsbyB5IEFOT1ZBDQoNClNlIHJlYWxpesOzIHVuIGRpc2XDsW8gYmFsYW5jZWFkbyBkZWJpZG8gYSBxdWUgc2UgdXRpbGl6YXJvbiBsYXMgbWlzbWFzIGNhbnRpZGFkZXMgZGUgbW9sdXNjb3MgZGUgYW1ib3MgdGlwb3MsIGFkaWNpb25hbG1lbnRlIGxvcyBkYXRvcyBzb24gaW5kZXBlbmRpZW50ZXMgeSB0aWVuZW4gdW5hIGRpc3RyaWJ1Y2nDs24gbm9ybWFsLg0KYGBge3J9DQptb2RlbF8xPWxtKGNvbnN1bW9+bW9sdXNjbytjb25jZW50cmFjaW9uLCBkYXRhID0gUHJlZ3VudGFfMSkNCmFub3ZhKG1vZGVsXzEpDQpzdW1tYXJ5KG1vZGVsXzEpDQpgYGANCg0KQ29uIGxvcyBkYXRvcyBvYnRlbmlkb3MgZGUgbGEgQU5PVkEgc2Ugb25zZXJ2YSBxdWUgbGEgY29uY2VudHJhY2nDs24gZGUgYWd1YSBlcyBzaWduaWZpY2F0aXZhIHNvYnJlIGVsIGNvbnN1bW8gZGUgb3jDrWdlbm8uIE1pZW50cmFzIHF1ZSBlbCB0aXBvIGRlIG1vbHVzY28gbm8gcHJlc2VudGEgc2lnbmlmaWNhbmNpYSBub3RhYmxlIGZyZW50ZSBhbCBjb25zdW1vIGRlIG94w61nZW5vLg0KDQpgYGB7cn0NCnJlcXVpcmUoYWdyaWNvbGFlKQ0KcG9zdGFub3ZhXzE9TFNELnRlc3QobW9kZWxfMSwiY29uY2VudHJhY2lvbiIpDQpwb3N0YW5vdmFfMQ0KYGBgDQoNCkxvcyByZXN1bHRhZG9zIG9idGVuaWRvcyBlbiBsYSBwb3N0YW5vdmEgc2Ugb2JzZXJ2YSBxdWUgbGEgY29uY2VudHJhY2nDs24gZGUgYWd1YSBhbCA1MCUgdGllbmUgdW5hIG1heW9yIHJlbGFjacOzbiBjb24gZWwgY29uc3VtbyBkZSBveMOtZ2VubyBzaW4gaW1wb3J0YXIgZWwgdGlwbyBkZSBtb2x1c2NvLiBNaWVudHJhcyBxdWUgbGFzIGNvbmNlbnRyYWNpb25lcyBhbCA3NSUgeSAxMDAlIHRpZW5lbiB1bmEgbWVub3IgcmVsYWNpw7NuIGNvbiBlbCBjb25zdW1vIGRlIG94w61nZW5vIHkgbm8gc29uIHNpZ25pY2F0aXZhbWVudGUgZGlmZXJlbnRlcyBlbnRyZSBzaS4NCg0KIyMgUHJlZ3VudGEgMg0KDQpgYGB7cn0NClByZWd1bnRhXzINClByZWd1bnRhXzIkdGVtcG9yYWRhPWFzLmZhY3RvcihQcmVndW50YV8yJHRlbXBvcmFkYSkNClByZWd1bnRhXzIkdGFtYcOxbz1hcy5mYWN0b3IoUHJlZ3VudGFfMiR0YW1hw7FvKQ0KDQpgYGANCg0KIyMgUGxhbnRlYW1pZW50byBkZSBoaXDDs3Rlc2lzDQoNCkhpcG90ZXNpcyAxOiBBIG1heW9yIHRhbWHDsW8gZGUgY2FudG8gaW50ZXJtYXJlYWwsIG1heW9yIHJpcXVlemEgZGUgZXNwZWNpZXMuDQpIaXBvdGVzaXMgMjogRXhpc3RlIHZhcmlhY2nDs24gZW4gbGEgcmlxdWV6YSBkZSBlc3BlY2llcyBlbiBsYXMgZGlmZXJlbnRlcyDDqXBvY2FzIGRlbCBhw7FvLg0KSGlwb3Rlc2lzIDM6IEV4aXN0ZSBpbnRlcmFjY2nDs24gZW50cmUgZWwgdGFtYcOxbyBkZWwgY2FudG8geSBsYSDDqXBvY2EgZGVsIGHDsW8geSBzdSBpbmZsdWVjaWEgZW4gbGEgcmlxdWV6YSBkZSBlc3BlY2llcy4NCg0KIyMgQW7DoWxpc2kgZXhwbG9yYXRvcmlvDQoNCmBgYHtyfQ0KZ2dwbG90KFByZWd1bnRhXzIsIGFlcyh4PXRhbWHDsW8sIHk9cmlxdWV6YSwgZmlsbD10YW1hw7FvKSkrZ2VvbV9ib3hwbG90KCkreWxhYigiUmlxdWV6YSBkZSBlc3BlY2llcyIpK3hsYWIoIlRhbWHDsW8gZGUgY2FudG8gaW50ZXJtYXJlYWwiKStnZ3RpdGxlKCJHcsOhZmljbyAzIikrc2NhbGVfZmlsbF9kaXNjcmV0ZShuYW1lID0gIlRhbWHDsW8iKQ0KYGBgDQpFbiBlbCBncsOhZmljbyAzIHNlIG9uc2VydmEgcXVlIGV4aXN0ZSB1bmEgbWF5b3IgcmlxdWV6YSBkZSBlc3BlY2llcyBlbiBlbCB0YW1hw7FvIGRlbCBjYW50byBpbnRlcm1hcmVhbCAxIChUMSkuIEFkaWNpb25hbG1lbnRlIHNlIG9ic2VydmEgcXVlIGEgbWF5b3IgdGFtYcOxbyBkZSBjYW50byBpbnRlcm1hcmVhbCwgbWVub3IgcmlxdWV6YSBkZSBlc3BlY2llcy4NCg0KYGBge3J9DQpnZ3Bsb3QoUHJlZ3VudGFfMiwgYWVzKHg9dGVtcG9yYWRhLCB5PXJpcXVlemEsIGZpbGw9dGVtcG9yYWRhKSkrZ2VvbV9ib3hwbG90KCkreWxhYigiUmlxdWV6YSBkZSBlc3BlY2llcyIpK3hsYWIoIsOJcG9jYSBkZWwgYcOxbyAoVGVtcG9yYWRhKSIpK2dndGl0bGUoIkdyw6FmaWNvIDQiKStzY2FsZV9maWxsX2Rpc2NyZXRlKG5hbWUgPSAiVGVtcG9yYWRhIikNCmBgYA0KRW4gZWwgZ3LDoWZpY28gNCBzZSBvYnNlcnZhIHF1ZSBoYXkgdW5hIGFsdGEgdmFyaWFjacOzbiBlbiBsYSB2YXJpYWJsZSB0ZW1wb3JhZGEuIFBlcm8gc2luIHByZXNlbnRhciBtYXlvciBkaWZlcmVuY2lhIGVudHJlIGNhZGEgdGVucG9yYWRhIHF1ZSBwZXJtaXRhbiBkZXRlcm1pbmFyIGNvbiBjZXJ0ZXphIGN1YWwgdGVtcG9yYWRhIGZhdm9yZWNlIG3DoXMgbGEgcmlxdWV6YSBkZSBlc3BlY2llcy4gDQoNCiMjIEVzdGltYWNpw7NuIGRlbCBtb2RlbG8geSBBTk9WQSANCg0KYGBge3J9DQptb2RlbF8yPWxtKHJpcXVlemF+dGVtcG9yYWRhK3RhbWHDsW8sIGRhdGE9UHJlZ3VudGFfMikNCmFub3ZhKG1vZGVsXzIpDQpgYGANCkNvbiBsb3MgZGF0b3Mgb2J0ZW5pZG9zIGRlIGxhIGFub3ZhIHNlIG9ic2VydmEgcXVlIGVsIHRhbWHDsW8gZGVsIGNhbnRvIGludGVybWFyZWFsIGVzIHNpZ25pZmljYXRpdm8gc29icmUgbGEgcmlxdWV6YSBkZSBlc3BlY2llcyAuIFNpbiBlbWJhcmdvLCBsYXMgdGVtcG9yYWRhcyBubyBwcmVzZW50YW4gc2lnbmlmaWNhbmNpYSBhbGd1bmEgZnJlbnRlIGEgbGEgcmlxdWV6YSBkZSBlc3BlY2llcy4NCg0KYGBge3J9DQpwb3N0YW5vdmFfMj1MU0QudGVzdChtb2RlbF8yLCJ0YW1hw7FvIikNCnBvc3Rhbm92YV8yDQpgYGANCkNvbiBsb3MgZGF0b3Mgb2J0ZW5pZG9zIGRlIGxhIHBvc3Rhbm92YSBzZSBvYnNlcnZhIHF1ZSBsb3MgY2FudG9zIGludGVybWFyZWFsZXMgZGUgdGFtYcOxbyAxIHkgMiBwcmVzZW50YW4gbWF5b3IgcmVsYWNpw7NuIGNvbiBsYSByaXF1ZXphIGRlIGVzcGVjaWVzIHkgbm8gcHJlc2VudGFuIGRpZmVyZW5jaWFzIGVudHJlIHNpLiBNaWVudHJhcyBxdWUgbG9zIHRhbWHDsW9zIDMgeSA0IHRpZW5lbiB1bmEgbWVub3IgcmVsYWNpw7NuIGZyZW50ZSBhIGxhIHJpcXVlemEgZGUgZXNwZWNpZXMgeSB0YW1wb2NvIHByZXNlbnRhbiBkaWZlcmVuY2lhcyBlbnRyZSBzaS4gDQoNCiMjICBUYW1hw7FvIGRlbCBjYW50byBkb25kZSBzZSBlbmN1ZW50cmEgbWF5b3IgbsO6bWVybyBkZSBlc3BlY2llcyBwYXJhIGNhZGEgw6lwb2NhIGRlbCBhw7FvLg0KDQpgYGB7cn0NCnBvc3Rhbm92YV8zPUxTRC50ZXN0KG1vZGVsXzIsIGxpc3QoInRhbWHDsW8iLCJ0ZW1wb3JhZGEiKSkNCnBvc3Rhbm92YV8zDQpiYXIuZ3JvdXAocG9zdGFub3ZhXzMkZ3JvdXBzLHhsaW09YygwLDEwKSxob3JpeiA9IFQsbGFzPTIpDQpgYGANClV0aWxpemFuZG8gZWwgbW9kZWxvIHBvc3Rhbm92YSB5IGNvbiBheXVkYSBkZSB1biBncsOhZmljbyBkZSBiYXJyYXMgc2UgbG9ncmEgb2JzZXJ2YXIgcXVlIGVsIHRhbWHDsW8gZGUgY2FudG8gaW50ZXJtYXJlYWwgMSB5IGxhIHRlbXBvcmFkYSAzIGRlbCBhw7FvIGVzIGxhIG1lam9yIGNvbWJpbmFjacOzbiBhc29jaWFkYWQgYSB1bmEgbWF5b3IgcmlxdWV6YSBkZSBlc3BlY2llcy4gQWRpY2lvbmFsbWVudGUgZWwgdGFtYcOxbyBkZSBjYW50byBpbnRlcm1hcmVhbCAxIHkgbGEgdGVtcG9yYWRhIDQgZGVsIGHDsW8gdGFtYmnDqW4gdGllbmVuIGFsdGEgcmVsYWNpw7NuIGNvbiBsYSByaXF1ZXphIGRlIGVzcGVjaWVzIHNpbiBwcmVzZW50YXIgbWF5b3IgZGlmZXJlbmNpYSBjb24gbGEgcHJpbWVyYSBvcGNpw7NuLiBQYXJhIGZpbmFsaXphciwgZWwgdGFtYcOxbyBkZSBjYW50byBpbnRlcm1hcmVhbCA0IGVzIGVsIHF1ZSBwcmVzZW50YSB1bmEgbWVub3IgcmlxdWV6YSBkZSBlc3BlY2llcy4gDQoNCiMjIFByZWd1bnRhIDMNCg0KYGBge3J9DQpQcmVndW50YV8zDQpQcmVndW50YV8zJGRpZXRhPWFzLmZhY3RvcihQcmVndW50YV8zJGRpZXRhKQ0KZ2dwbG90KFByZWd1bnRhXzMsIGFlcyh4PWRpZXRhLCB5PXBlc28sIGZpbGw9ZGlldGEpKStnZW9tX2JveHBsb3QoKSt5bGFiKCJQZXNvIChLZykiKSt4bGFiKCJEaWV0YSIpK2dndGl0bGUoIkdyw6FmaWNvIDUiKStzY2FsZV9maWxsX2Rpc2NyZXRlKG5hbWUgPSAiRGlldGEiKQ0KYGBgDQoNCkVuIGVsIGdyw6FmaWNvIDUgc2Ugb2JzZXJ2YSBxdWUgbGFzIGRpZXRhcyBBIHkgRCBwcmVzZW50YW4gdW4gbWVub3IgcGVzbyBlbiBsb3MgY2VyZG9zLiBNaWVudHJhcyBxdWUgbGFzIGRpZXRhcyBCIHkgQyBwcmVzZW50YW4gbWF5b3IgcGVzby4gDQoNCiMjIEVzdGltYWNpw7NuIGRlbCBtb2RlbG8geSBBTk9WQQ0KDQpgYGB7cn0NCm1vZGVsXzQ9bG0ocGVzb35kaWV0YSxkYXRhPVByZWd1bnRhXzMpDQpzdW1tYXJ5KG1vZGVsXzQpDQphbm92YShtb2RlbF80KQ0KYGBgDQpDb24gYmFzZSBhIGxvcyByZXN1bHRhZG9zIG9idGVuaWRvcyBlbiBlbCBtb2RlbG8gNCBzZSBvYnNlcnZhIHF1ZSBsYXMgZGlldGFzIEEsIEIgeSBDIHNvbiBzaWduaWZpY2F0aXZhcyBlbiByZWxhY2nDs24gYWwgcGVzbyBkZSBsb3MgY2VyZG9zLiBNaWVudHJhcyBxdWUgbGEgZGlldGEgRCBubyB0aWVuZSBzaWduaWZpY2FuY2lhIGFsZ3VuYSBjb24gbG9zIHBlc29zIGRlIGxvcyBjZXJkb3MuDQoNCmBgYHtyfQ0KcG9zdGFub3ZhXzQ9TFNELnRlc3QobW9kZWxfNCwgImRpZXRhIikNCnBvc3Rhbm92YV80DQpgYGANCkNvbiBsb3MgcmVzdWx0YWRvcyBvYnRlbmlkb3MgZW4gbGEgcG9zdGFub3ZhIHNlIG9ic2VydmEgcXVlIGxhcyBkaWV0YXMgQyB5IEIgZWZlY3RpdmFtZW50ZSBzZSByZWxhY2lvbmFuIG3DoXMgY29uIGVsIHBlc28gZGUgbG9zIGNlcmRvcyB5IG5vIHByZXNlbnRhbiBkaWZlcmVuY2lhcyBzaWduaWZpY2F0aXZhcyBlbnRyZSBzaS4gTWllbnRyYXMgcXVlIGxhcyBkaWV0YXMgQSB5IEQgdGllbmVuIG1lbm9yIHJlbGFjacOzbiBmcmVudGUgYWwgcGVzbyBkZSBsb3MgY2VyZG9zIHkgdGFtcG9jbyBwcmVzZW50YW4gZGlmZXJlbmNpYXMgc2lnbmlmaWNhdGl2YXMgZW50cmUgc2kuDQoNCiMjIFByZWd1bnRhIDQNCg0KYGBge3J9DQpQcmVndW50YV80DQpgYGANCg0KIyMgQW7DoWxpc2lzIGV4cGxvcmF0b3JpbyANCg0KYGBge3J9DQpQcmVndW50YV80JHNleG89YXMuZmFjdG9yKFByZWd1bnRhXzQkc2V4bykNClByZWd1bnRhXzQkdGVtcGVyYXR1cmE9YXMuZmFjdG9yKFByZWd1bnRhXzQkdGVtcGVyYXR1cmEpDQpnZ3Bsb3QoUHJlZ3VudGFfNCxhZXMoeD10ZW1wZXJhdHVyYSx5PWNvbnN1bW9fTzIsIGZpbGw9dGVtcGVyYXR1cmEpKStnZW9tX2JveHBsb3QoKSt5bGFiKCJDb25zdW1vIGRlIG94w61nZW5vIChtZ08yKSIpK3hsYWIoIlRlbXBlcmF0dXJhIikrZ2d0aXRsZSgiR3LDoWZpY28gNiIpK3NjYWxlX2ZpbGxfZGlzY3JldGUobmFtZSA9ICJUZW1wZXJhdHVyYSIpK2ZhY2V0X2dyaWQofnNleG8pDQpgYGANCkVuIGVsIGdyw6FmaWNvIDYgc2UgbG9ncmEgb2JzZXJ2YXIgcXVlIGVsIGNvbnN1bW8gZGUgb3jDrWdlbm8gbm8gcHJlc2VudGEgbXVjaGEgZGlmZXJlbmNpYSBlbiBhbWJvcyBzZXhvcywgZW4gZWwgY3VhbCwgaGF5IG1heW9yIGNvbnN1bW8gZGUgb3jDrWdlbm8gYSBhbHRhcyB0ZW1wZXJhdHVyYXMsIG1pZW50cmFzIHF1ZSBhIGJhamFzIHRlbXBlcmF0dXJhcyBlbCBjb25zdW1vIGRlIG94w61nZW5vIGVzIG1lbm9yLg0KDQojIyBFc3RpbWFjacOzbiBkZWwgbW9kZWxvIHkgQU5PVkENCg0KYGBge3J9DQptb2RlbF81PWxtKGNvbnN1bW9fTzJ+c2V4byt0ZW1wZXJhdHVyYSwgZGF0YSA9IFByZWd1bnRhXzQpDQpzdW1tYXJ5KG1vZGVsXzUpDQphbm92YShtb2RlbF81KQ0KYGBgDQpDb24gbG9zIGRhdG9zIG9idGVuaWRvcyBlbiBsYSBhbm92YSBzZSBvYnNlcnZhIHF1ZSBsYSB0ZW1wZXJhdHVyYSBlcyBzaWduaWZpY2F0aXZhIHNvYnJlIGVsIGNvbnN1bW8gZGUgb3jDrWdlbm8uIE1pZW50cmFzIHF1ZSBlbCBzZXhvIG5vIHByZXNlbnRhIHNpZ25pZmljYW5jaWEgYWxndW5hIGZyZW50ZSBhbCBjb25zdW1vIGRlIG94w61nZW5vLg0KDQpgYGB7cn0NCnBvc3Rhbm92YV81PUxTRC50ZXN0KG1vZGVsXzUsbGlzdCgic2V4byIsInRlbXBlcmF0dXJhIikpDQpwb3N0YW5vdmFfNQ0KYGBgDQpDb24gbG9zIHJlc3VsdGFkb3Mgb2J0ZW5pZG9zIGVuIGxhIHBvc3Rhbm92YSBzZSBvYnNlcnZhIHF1ZSBsYSBtZWpvciBjb21iaW5hY2nDs24gcGFyYSB1biBtYXlvciBjb25zdW1vIGRlIG94w61nZW5vIGVzIGEgYWx0YXMgdGVtcGVyYXR1cmFzLCBwdWVzdG8gcXVlIHBhcmEgYW1ib3Mgc2V4b3Mgbm8gaGF5IGRpZmVyZW5jaWEgc2lnbmlmaWNhdGl2YS4gTWluZXRyYXMgcXVlIHBhcmEgdW4gY29uc3VtbyBiYWpvIGRlIG94w61nZW5vIGVzIGZhdm9yZWNpZG8gYSB0ZW1wZXJhdHVyYXMgYmFqYXMgZW4gYW1ib3Mgc2V4b3MgcXVlIHRhbXBvY28gdGllbmVuIGRpZmVyZW5jaWFzIHNpZ25pZmljYXRpdmFzLg0KDQo=