• A01368516 - Nayeli Peña Martínez
  • A00833113 - Avril Lobato
  • A01771127 - Lesly Darian Romero Vazquez
  • A00831105 - Jazmin del Carmen Cortez Mendoza
  • A01198184 - Karla Sánchez del Ángel
  • A01198186 - Luis Angel Elizondo Gallegos

Problemática A

Suponga que desea invertir $ 10,000 (DLSA) en el mercado de valores comprando acciones en una de dos empresas: A y B. Las acciones de la empresa A, aunque son riesgosas, podrían generar un rendimiento del 50% durante el próximo año, si las condiciones del mercado de valores no son favorables. (“mercado bajista o bear”), la acción puede perder el 20% de su valor. La empresa B proporciona inversiones seguras con un rendimiento del 15 % en un mercado “alcista o bull” , y solo del 5 % en un mercado “bajista”. Todas las publicaciones que se han predicen un 60% de posibilidades de un mercado “alcista”. Dibuje un árbol de decisión y determine la mejor estrategia.

Librerías

library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.1.4     ✔ readr     2.1.5
## ✔ forcats   1.0.0     ✔ stringr   1.5.1
## ✔ ggplot2   3.5.0     ✔ tibble    3.2.1
## ✔ lubridate 1.9.3     ✔ tidyr     1.3.1
## ✔ purrr     1.0.2     
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(rpart)
library(rpart.plot)

Modelo de Árbol de decisión

# Fijar semilla para reproducibilidad
set.seed(411)

# Simulación de datos
data <- tibble(
  Mercado = sample(c("Bull", "Bear"), 200, replace = TRUE, prob = c(0.6, 0.4)),
  Empresa = sample(c("A", "B"), 200, replace = TRUE),
  Retorno = case_when(
    Empresa == "A" & Mercado == "Bull" ~ 0.5,
    Empresa == "A" & Mercado == "Bear" ~ -0.2,
    Empresa == "B" & Mercado == "Bull" ~ 0.15,
    Empresa == "B" & Mercado == "Bear" ~ 0.05
  )
)

# Convertir a factor
data <- data %>% mutate(across(c(Mercado, Empresa), as.factor))

# Crear modelo de árbol de decisión
modelo <- rpart(Retorno ~ Mercado + Empresa, data = data, method = "anova")

# Calcular valor esperado
# Definir valores de inversión
inversion <- 10000
valor_A <- inversion * c(0.5, -0.2)
valor_B <- inversion * c(0.15, 0.05)

# Calcular expectativas
prob_bull <- 0.6
prob_bear <- 0.4
expected_return_A <- (prob_bull * valor_A[1]) + (prob_bear * valor_A[2])
expected_return_B <- (prob_bull * valor_B[1]) + (prob_bear * valor_B[2])

best_investment <- ifelse(expected_return_A > expected_return_B, "Empresa A", "Empresa B")

cat("La mejor estrategia de inversión es invertir en", best_investment, "\n")
## La mejor estrategia de inversión es invertir en Empresa A

Visualización de árbol

ggplot2::theme_set(theme_minimal())
rpart.plot(modelo, 
           type = 2,
           extra = 101, 
           under = TRUE, 
           faclen = 0, 
           main = "Árbol de Decisión para la Inversión")

Predicción para un nuevo mercado

nuevo_escenario <- tibble(
  Mercado = factor("Bull", levels = c("Bull", "Bear")),
  Empresa = factor("A", levels = c("A", "B"))
)

prediccion <- predict(modelo, nuevo_escenario)

cat("Retorno esperado para la Empresa A en mercado Bull:", round(prediccion, 2), "\n")
## Retorno esperado para la Empresa A en mercado Bull: 0.5

¿Cómo debe invertir su dinero?

Según el análisis del árbol de decisión y los valores esperados, la mejor estrategia de inversión es invertir en la empresa A ya que, al calcular los rendimientos esperados considerando la probabilidad de un mercado alcista (60%) y bajista (40%), la empresa A tiene un mayor retorno esperado en comparación con la empresa B. Aunque A es más riesgosa, su ganancia potencial supera la de B en el largo plazo.

No obstante, si se prefiere una inversión más segura con menor riesgo, la empresa B sería la mejor opción, pero tiene menor rentabilidad.

Problemática B

La empresa Farmer McCoy puede sembrar maíz o soya, cuenta con todo el ecosistema para sembrar ambos insumos agroalimentarios. Las probabilidades de que los precios de la siguiente cosecha suban, no cambien o bajen, son 25%, 30% y 45% respectivamente. Si los precios suben, la cosecha de maíz redituará un ingreso neto de $30,000 DLSA y la de soya redituará un ingreso neto de $10,000. Si los precios no cambian, la empresa McCoy apenas saldrá tablas. Pero si los precios bajan, las cosechas de maíz y soya sufrirán pérdidas por $35,000 y $5,000 respectivamente. Dibuje un árbol de decisión y determine la mejor estrategia.

Librerías

library(tidyverse)
library(rpart)
library(rpart.plot)

Modelo de Árbol de decisión

# Fijar semilla para reproducibilidad
set.seed(411)

# Simulación de datos
data <- tibble(
  Precio = sample(c("Sube", "No Cambia", "Baja"), 200, replace = TRUE, prob = c(0.25, 0.30, 0.45)),
  Cultivo = sample(c("Maíz", "Soya"), 200, replace = TRUE),
  Ingreso = case_when(
    Cultivo == "Maíz" & Precio == "Sube" ~ 30000,
    Cultivo == "Maíz" & Precio == "No Cambia" ~ 0,
    Cultivo == "Maíz" & Precio == "Baja" ~ -35000,
    Cultivo == "Soya" & Precio == "Sube" ~ 10000,
    Cultivo == "Soya" & Precio == "No Cambia" ~ 0,
    Cultivo == "Soya" & Precio == "Baja" ~ -5000
  )
)

# Convertir a factor
data <- data %>% mutate(across(c(Precio, Cultivo), as.factor))

# Crear modelo de árbol de decisión
modelo <- rpart(Ingreso ~ Precio + Cultivo, data = data, method = "anova")

# Calcular valor esperado
prob_sube <- 0.25
prob_no_cambia <- 0.30
prob_baja <- 0.45

# Valores esperados para cada cultivo
expected_return_maiz <- (prob_sube * 30000) + (prob_no_cambia * 0) + (prob_baja * -35000)
expected_return_soya <- (prob_sube * 10000) + (prob_no_cambia * 0) + (prob_baja * -5000)

best_investment <- ifelse(expected_return_maiz > expected_return_soya, "Maíz", "Soya")

cat("La mejor estrategia de inversión es sembrar", best_investment, "\n")
## La mejor estrategia de inversión es sembrar Soya

Visualizar el árbol

ggplot2::theme_set(theme_minimal())
rpart.plot(modelo, 
           type = 2,
           extra = 101, 
           under = TRUE, 
           faclen = 0, 
           main = "Árbol de Decisión para la Siembra")

Predicción para un nuevo escenario

nuevo_escenario <- tibble(
  Precio = factor("Sube", levels = c("Sube", "No Cambia", "Baja")),
  Cultivo = factor("Maíz", levels = c("Maíz", "Soya"))
)

prediccion <- predict(modelo, nuevo_escenario)

cat("Ingreso esperado para Maíz si el precio sube:", round(prediccion, 2), "\n")
## Ingreso esperado para Maíz si el precio sube: 30000

¿Cuál es la cosecha que debe sembrar la empresa McCoy?

Con base en el análisis hecho del árbol de decisión y el cálculo del valor esperado, la mejor estrategia para la empresa McCoy es sembrar soya. Esto se debe a que el valor esperado de la siembra de soya es mayor que el de maíz, ya que las pérdidas en un escenario de baja de precios son menores en comparación con el maíz, que tiene una mayor volatilidad y riesgo.

Si McCoy busca maximizar su estabilidad financiera y minimizar riesgos, la mejor opción es optar por la soya.

LS0tDQp0aXRsZTogIkFjdGl2aWRhZCA0LiBTaW11bGFjacOzbiBkZSBlc2NlbmFyaW9zIGRlIHJpZXNnbyAoYWN0aXZpZGFkIGluZGl2aWR1YWwpIg0KYXV0aG9yOiAiRXF1aXBvIDYiDQpkYXRlOiAiMjAyNS0wMi0xOSINCm91dHB1dDoNCiAgaHRtbF9kb2N1bWVudDoNCiAgICB0b2M6IHllcw0KICAgIHRvY19mbG9hdDogeWVzDQogICAgY29kZV9kb3dubG9hZDogeWVzDQogICAgdGhlbWU6IHVuaXRlZA0KICAgIGhpZ2hsaWdodDogcHlnbWVudHMNCi0tLQ0KDQoqIEEwMTM2ODUxNiAtIE5heWVsaSBQZcOxYSBNYXJ0w61uZXoNCiogQTAwODMzMTEzIC0gQXZyaWwgTG9iYXRvIA0KKiBBMDE3NzExMjcgLSBMZXNseSBEYXJpYW4gUm9tZXJvIFZhenF1ZXoNCiogQTAwODMxMTA1IC0gSmF6bWluIGRlbCBDYXJtZW4gQ29ydGV6IE1lbmRvemENCiogQTAxMTk4MTg0IC0gS2FybGEgU8OhbmNoZXogZGVsIMOBbmdlbCANCiogQTAxMTk4MTg2IC0gTHVpcyBBbmdlbCBFbGl6b25kbyBHYWxsZWdvcyANCg0KDQpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRX0NCmtuaXRyOjpvcHRzX2NodW5rJHNldChlY2hvID0gVFJVRSkNCmBgYA0KDQojICoqUHJvYmxlbcOhdGljYSBBKioNCg0KU3Vwb25nYSBxdWUgZGVzZWEgaW52ZXJ0aXIgJCAxMCwwMDAgIChETFNBKSBlbiBlbCBtZXJjYWRvIGRlIHZhbG9yZXMgY29tcHJhbmRvIGFjY2lvbmVzIGVuIHVuYSBkZSBkb3MgZW1wcmVzYXM6IEEgeSBCLiBMYXMgYWNjaW9uZXMgZGUgbGEgZW1wcmVzYSBBLCBhdW5xdWUgc29uIHJpZXNnb3NhcywgcG9kcsOtYW4gZ2VuZXJhciB1biByZW5kaW1pZW50byBkZWwgNTAlIGR1cmFudGUgZWwgcHLDs3hpbW8gYcOxbywgc2kgbGFzIGNvbmRpY2lvbmVzIGRlbCBtZXJjYWRvIGRlIHZhbG9yZXMgbm8gc29uIGZhdm9yYWJsZXMuICgibWVyY2FkbyBiYWppc3RhIG8gYmVhciIpLCBsYSBhY2Npw7NuIHB1ZWRlIHBlcmRlciBlbCAyMCUgZGUgc3UgdmFsb3IuIExhIGVtcHJlc2EgQiBwcm9wb3JjaW9uYSBpbnZlcnNpb25lcyBzZWd1cmFzIGNvbiB1biByZW5kaW1pZW50byBkZWwgMTUgJSBlbiB1biBtZXJjYWRvIOKAnGFsY2lzdGEgbyBidWxsIOKAnSAsIHkgc29sbyBkZWwgNSAlIGVuIHVuIG1lcmNhZG8g4oCcYmFqaXN0YeKAnS4gVG9kYXMgbGFzIHB1YmxpY2FjaW9uZXMgcXVlIHNlIGhhbiBwcmVkaWNlbiB1biA2MCUgZGUgcG9zaWJpbGlkYWRlcyBkZSB1biBtZXJjYWRvICJhbGNpc3RhIi4gRGlidWplIHVuIMOhcmJvbCBkZSBkZWNpc2nDs24geSBkZXRlcm1pbmUgbGEgbWVqb3IgZXN0cmF0ZWdpYS4NCg0KDQojIyBMaWJyZXLDrWFzDQpgYGB7ciB9DQpsaWJyYXJ5KHRpZHl2ZXJzZSkNCmxpYnJhcnkocnBhcnQpDQpsaWJyYXJ5KHJwYXJ0LnBsb3QpDQpgYGANCg0KIyMgTW9kZWxvIGRlIMOBcmJvbCBkZSBkZWNpc2nDs24NCmBgYHtyIH0NCiMgRmlqYXIgc2VtaWxsYSBwYXJhIHJlcHJvZHVjaWJpbGlkYWQNCnNldC5zZWVkKDQxMSkNCg0KIyBTaW11bGFjacOzbiBkZSBkYXRvcw0KZGF0YSA8LSB0aWJibGUoDQogIE1lcmNhZG8gPSBzYW1wbGUoYygiQnVsbCIsICJCZWFyIiksIDIwMCwgcmVwbGFjZSA9IFRSVUUsIHByb2IgPSBjKDAuNiwgMC40KSksDQogIEVtcHJlc2EgPSBzYW1wbGUoYygiQSIsICJCIiksIDIwMCwgcmVwbGFjZSA9IFRSVUUpLA0KICBSZXRvcm5vID0gY2FzZV93aGVuKA0KICAgIEVtcHJlc2EgPT0gIkEiICYgTWVyY2FkbyA9PSAiQnVsbCIgfiAwLjUsDQogICAgRW1wcmVzYSA9PSAiQSIgJiBNZXJjYWRvID09ICJCZWFyIiB+IC0wLjIsDQogICAgRW1wcmVzYSA9PSAiQiIgJiBNZXJjYWRvID09ICJCdWxsIiB+IDAuMTUsDQogICAgRW1wcmVzYSA9PSAiQiIgJiBNZXJjYWRvID09ICJCZWFyIiB+IDAuMDUNCiAgKQ0KKQ0KDQojIENvbnZlcnRpciBhIGZhY3Rvcg0KZGF0YSA8LSBkYXRhICU+JSBtdXRhdGUoYWNyb3NzKGMoTWVyY2FkbywgRW1wcmVzYSksIGFzLmZhY3RvcikpDQoNCiMgQ3JlYXIgbW9kZWxvIGRlIMOhcmJvbCBkZSBkZWNpc2nDs24NCm1vZGVsbyA8LSBycGFydChSZXRvcm5vIH4gTWVyY2FkbyArIEVtcHJlc2EsIGRhdGEgPSBkYXRhLCBtZXRob2QgPSAiYW5vdmEiKQ0KDQojIENhbGN1bGFyIHZhbG9yIGVzcGVyYWRvDQojIERlZmluaXIgdmFsb3JlcyBkZSBpbnZlcnNpw7NuDQppbnZlcnNpb24gPC0gMTAwMDANCnZhbG9yX0EgPC0gaW52ZXJzaW9uICogYygwLjUsIC0wLjIpDQp2YWxvcl9CIDwtIGludmVyc2lvbiAqIGMoMC4xNSwgMC4wNSkNCg0KIyBDYWxjdWxhciBleHBlY3RhdGl2YXMNCnByb2JfYnVsbCA8LSAwLjYNCnByb2JfYmVhciA8LSAwLjQNCmV4cGVjdGVkX3JldHVybl9BIDwtIChwcm9iX2J1bGwgKiB2YWxvcl9BWzFdKSArIChwcm9iX2JlYXIgKiB2YWxvcl9BWzJdKQ0KZXhwZWN0ZWRfcmV0dXJuX0IgPC0gKHByb2JfYnVsbCAqIHZhbG9yX0JbMV0pICsgKHByb2JfYmVhciAqIHZhbG9yX0JbMl0pDQoNCmJlc3RfaW52ZXN0bWVudCA8LSBpZmVsc2UoZXhwZWN0ZWRfcmV0dXJuX0EgPiBleHBlY3RlZF9yZXR1cm5fQiwgIkVtcHJlc2EgQSIsICJFbXByZXNhIEIiKQ0KDQpjYXQoIkxhIG1lam9yIGVzdHJhdGVnaWEgZGUgaW52ZXJzacOzbiBlcyBpbnZlcnRpciBlbiIsIGJlc3RfaW52ZXN0bWVudCwgIlxuIikNCmBgYA0KDQojIyBWaXN1YWxpemFjacOzbiBkZSDDoXJib2wNCmBgYHtyIH0NCmdncGxvdDI6OnRoZW1lX3NldCh0aGVtZV9taW5pbWFsKCkpDQpycGFydC5wbG90KG1vZGVsbywgDQogICAgICAgICAgIHR5cGUgPSAyLA0KICAgICAgICAgICBleHRyYSA9IDEwMSwgDQogICAgICAgICAgIHVuZGVyID0gVFJVRSwgDQogICAgICAgICAgIGZhY2xlbiA9IDAsIA0KICAgICAgICAgICBtYWluID0gIsOBcmJvbCBkZSBEZWNpc2nDs24gcGFyYSBsYSBJbnZlcnNpw7NuIikNCmBgYA0KDQojIyBQcmVkaWNjacOzbiBwYXJhIHVuIG51ZXZvIG1lcmNhZG8NCmBgYHtyfQ0KbnVldm9fZXNjZW5hcmlvIDwtIHRpYmJsZSgNCiAgTWVyY2FkbyA9IGZhY3RvcigiQnVsbCIsIGxldmVscyA9IGMoIkJ1bGwiLCAiQmVhciIpKSwNCiAgRW1wcmVzYSA9IGZhY3RvcigiQSIsIGxldmVscyA9IGMoIkEiLCAiQiIpKQ0KKQ0KDQpwcmVkaWNjaW9uIDwtIHByZWRpY3QobW9kZWxvLCBudWV2b19lc2NlbmFyaW8pDQoNCmNhdCgiUmV0b3JubyBlc3BlcmFkbyBwYXJhIGxhIEVtcHJlc2EgQSBlbiBtZXJjYWRvIEJ1bGw6Iiwgcm91bmQocHJlZGljY2lvbiwgMiksICJcbiIpDQpgYGANCg0KIyMgwr9Dw7NtbyBkZWJlIGludmVydGlyIHN1IGRpbmVybz8NClNlZ8O6biBlbCBhbsOhbGlzaXMgZGVsIMOhcmJvbCBkZSBkZWNpc2nDs24geSBsb3MgdmFsb3JlcyBlc3BlcmFkb3MsIGxhIG1lam9yIGVzdHJhdGVnaWEgZGUgaW52ZXJzacOzbiBlcyBpbnZlcnRpciBlbiBsYSBlbXByZXNhIEEgeWEgcXVlLCBhbCBjYWxjdWxhciBsb3MgcmVuZGltaWVudG9zIGVzcGVyYWRvcyBjb25zaWRlcmFuZG8gbGEgcHJvYmFiaWxpZGFkIGRlIHVuIG1lcmNhZG8gYWxjaXN0YSAoNjAlKSB5IGJhamlzdGEgKDQwJSksIGxhIGVtcHJlc2EgQSB0aWVuZSB1biBtYXlvciByZXRvcm5vIGVzcGVyYWRvIGVuIGNvbXBhcmFjacOzbiBjb24gbGEgZW1wcmVzYSBCLiBBdW5xdWUgQSBlcyBtw6FzIHJpZXNnb3NhLCBzdSBnYW5hbmNpYSBwb3RlbmNpYWwgc3VwZXJhIGxhIGRlIEIgZW4gZWwgbGFyZ28gcGxhem8uDQoNCk5vIG9ic3RhbnRlLCBzaSBzZSBwcmVmaWVyZSB1bmEgaW52ZXJzacOzbiBtw6FzIHNlZ3VyYSBjb24gbWVub3Igcmllc2dvLCBsYSBlbXByZXNhIEIgc2Vyw61hIGxhIG1lam9yIG9wY2nDs24sIHBlcm8gdGllbmUgbWVub3IgcmVudGFiaWxpZGFkLg0KDQoNCg0KIyAqKlByb2JsZW3DoXRpY2EgQioqDQoNCkxhIGVtcHJlc2EgRmFybWVyIE1jQ295IHB1ZWRlIHNlbWJyYXIgbWHDrXogbyBzb3lhLCBjdWVudGEgY29uIHRvZG8gZWwgZWNvc2lzdGVtYSBwYXJhIHNlbWJyYXIgYW1ib3MgaW5zdW1vcyBhZ3JvYWxpbWVudGFyaW9zLiBMYXMgcHJvYmFiaWxpZGFkZXMgZGUgcXVlIGxvcyBwcmVjaW9zIGRlIGxhIHNpZ3VpZW50ZSBjb3NlY2hhIHN1YmFuLCBubyBjYW1iaWVuIG8gYmFqZW4sIHNvbiAyNSUsIDMwJSB5IDQ1JSByZXNwZWN0aXZhbWVudGUuIFNpIGxvcyBwcmVjaW9zIHN1YmVuLCBsYSBjb3NlY2hhIGRlIG1hw616IHJlZGl0dWFyw6EgdW4gaW5ncmVzbyBuZXRvIGRlICQzMCwwMDAgRExTQSB5IGxhIGRlIHNveWEgcmVkaXR1YXLDoSB1biBpbmdyZXNvIG5ldG8gZGUgJDEwLDAwMC4gU2kgbG9zIHByZWNpb3Mgbm8gY2FtYmlhbiwgbGEgZW1wcmVzYSBNY0NveSBhcGVuYXMgc2FsZHLDoSB0YWJsYXMuIFBlcm8gc2kgbG9zIHByZWNpb3MgYmFqYW4sIGxhcyBjb3NlY2hhcyBkZSBtYcOteiB5IHNveWEgc3Vmcmlyw6FuIHDDqXJkaWRhcyBwb3IgJDM1LDAwMCB5ICQ1LDAwMCByZXNwZWN0aXZhbWVudGUuIERpYnVqZSB1biDDoXJib2wgZGUgZGVjaXNpw7NuIHkgZGV0ZXJtaW5lIGxhIG1lam9yIGVzdHJhdGVnaWEuDQoNCg0KIyMgTGlicmVyw61hcw0KYGBge3IgfQ0KbGlicmFyeSh0aWR5dmVyc2UpDQpsaWJyYXJ5KHJwYXJ0KQ0KbGlicmFyeShycGFydC5wbG90KQ0KYGBgDQoNCiMjIE1vZGVsbyBkZSDDgXJib2wgZGUgZGVjaXNpw7NuDQpgYGB7cn0NCiMgRmlqYXIgc2VtaWxsYSBwYXJhIHJlcHJvZHVjaWJpbGlkYWQNCnNldC5zZWVkKDQxMSkNCg0KIyBTaW11bGFjacOzbiBkZSBkYXRvcw0KZGF0YSA8LSB0aWJibGUoDQogIFByZWNpbyA9IHNhbXBsZShjKCJTdWJlIiwgIk5vIENhbWJpYSIsICJCYWphIiksIDIwMCwgcmVwbGFjZSA9IFRSVUUsIHByb2IgPSBjKDAuMjUsIDAuMzAsIDAuNDUpKSwNCiAgQ3VsdGl2byA9IHNhbXBsZShjKCJNYcOteiIsICJTb3lhIiksIDIwMCwgcmVwbGFjZSA9IFRSVUUpLA0KICBJbmdyZXNvID0gY2FzZV93aGVuKA0KICAgIEN1bHRpdm8gPT0gIk1hw616IiAmIFByZWNpbyA9PSAiU3ViZSIgfiAzMDAwMCwNCiAgICBDdWx0aXZvID09ICJNYcOteiIgJiBQcmVjaW8gPT0gIk5vIENhbWJpYSIgfiAwLA0KICAgIEN1bHRpdm8gPT0gIk1hw616IiAmIFByZWNpbyA9PSAiQmFqYSIgfiAtMzUwMDAsDQogICAgQ3VsdGl2byA9PSAiU295YSIgJiBQcmVjaW8gPT0gIlN1YmUiIH4gMTAwMDAsDQogICAgQ3VsdGl2byA9PSAiU295YSIgJiBQcmVjaW8gPT0gIk5vIENhbWJpYSIgfiAwLA0KICAgIEN1bHRpdm8gPT0gIlNveWEiICYgUHJlY2lvID09ICJCYWphIiB+IC01MDAwDQogICkNCikNCg0KIyBDb252ZXJ0aXIgYSBmYWN0b3INCmRhdGEgPC0gZGF0YSAlPiUgbXV0YXRlKGFjcm9zcyhjKFByZWNpbywgQ3VsdGl2byksIGFzLmZhY3RvcikpDQoNCiMgQ3JlYXIgbW9kZWxvIGRlIMOhcmJvbCBkZSBkZWNpc2nDs24NCm1vZGVsbyA8LSBycGFydChJbmdyZXNvIH4gUHJlY2lvICsgQ3VsdGl2bywgZGF0YSA9IGRhdGEsIG1ldGhvZCA9ICJhbm92YSIpDQoNCiMgQ2FsY3VsYXIgdmFsb3IgZXNwZXJhZG8NCnByb2Jfc3ViZSA8LSAwLjI1DQpwcm9iX25vX2NhbWJpYSA8LSAwLjMwDQpwcm9iX2JhamEgPC0gMC40NQ0KDQojIFZhbG9yZXMgZXNwZXJhZG9zIHBhcmEgY2FkYSBjdWx0aXZvDQpleHBlY3RlZF9yZXR1cm5fbWFpeiA8LSAocHJvYl9zdWJlICogMzAwMDApICsgKHByb2Jfbm9fY2FtYmlhICogMCkgKyAocHJvYl9iYWphICogLTM1MDAwKQ0KZXhwZWN0ZWRfcmV0dXJuX3NveWEgPC0gKHByb2Jfc3ViZSAqIDEwMDAwKSArIChwcm9iX25vX2NhbWJpYSAqIDApICsgKHByb2JfYmFqYSAqIC01MDAwKQ0KDQpiZXN0X2ludmVzdG1lbnQgPC0gaWZlbHNlKGV4cGVjdGVkX3JldHVybl9tYWl6ID4gZXhwZWN0ZWRfcmV0dXJuX3NveWEsICJNYcOteiIsICJTb3lhIikNCg0KY2F0KCJMYSBtZWpvciBlc3RyYXRlZ2lhIGRlIGludmVyc2nDs24gZXMgc2VtYnJhciIsIGJlc3RfaW52ZXN0bWVudCwgIlxuIikNCmBgYA0KDQojIyBWaXN1YWxpemFyIGVsIMOhcmJvbA0KYGBge3J9DQpnZ3Bsb3QyOjp0aGVtZV9zZXQodGhlbWVfbWluaW1hbCgpKQ0KcnBhcnQucGxvdChtb2RlbG8sIA0KICAgICAgICAgICB0eXBlID0gMiwNCiAgICAgICAgICAgZXh0cmEgPSAxMDEsIA0KICAgICAgICAgICB1bmRlciA9IFRSVUUsIA0KICAgICAgICAgICBmYWNsZW4gPSAwLCANCiAgICAgICAgICAgbWFpbiA9ICLDgXJib2wgZGUgRGVjaXNpw7NuIHBhcmEgbGEgU2llbWJyYSIpDQpgYGANCg0KIyMgUHJlZGljY2nDs24gcGFyYSB1biBudWV2byBlc2NlbmFyaW8NCmBgYHtyfQ0KbnVldm9fZXNjZW5hcmlvIDwtIHRpYmJsZSgNCiAgUHJlY2lvID0gZmFjdG9yKCJTdWJlIiwgbGV2ZWxzID0gYygiU3ViZSIsICJObyBDYW1iaWEiLCAiQmFqYSIpKSwNCiAgQ3VsdGl2byA9IGZhY3RvcigiTWHDrXoiLCBsZXZlbHMgPSBjKCJNYcOteiIsICJTb3lhIikpDQopDQoNCnByZWRpY2Npb24gPC0gcHJlZGljdChtb2RlbG8sIG51ZXZvX2VzY2VuYXJpbykNCg0KY2F0KCJJbmdyZXNvIGVzcGVyYWRvIHBhcmEgTWHDrXogc2kgZWwgcHJlY2lvIHN1YmU6Iiwgcm91bmQocHJlZGljY2lvbiwgMiksICJcbiIpDQpgYGANCiMjIMK/Q3XDoWwgZXMgbGEgIGNvc2VjaGEgcXVlIGRlYmUgc2VtYnJhciBsYSBlbXByZXNhIE1jQ295Pw0KQ29uIGJhc2UgZW4gZWwgYW7DoWxpc2lzIGhlY2hvIGRlbCDDoXJib2wgZGUgZGVjaXNpw7NuIHkgZWwgY8OhbGN1bG8gZGVsIHZhbG9yIGVzcGVyYWRvLCBsYSBtZWpvciBlc3RyYXRlZ2lhIHBhcmEgbGEgZW1wcmVzYSBNY0NveSBlcyBzZW1icmFyIHNveWEuIEVzdG8gc2UgZGViZSBhIHF1ZSBlbCB2YWxvciBlc3BlcmFkbyBkZSBsYSBzaWVtYnJhIGRlIHNveWEgZXMgbWF5b3IgcXVlIGVsIGRlIG1hw616LCB5YSBxdWUgbGFzIHDDqXJkaWRhcyBlbiB1biBlc2NlbmFyaW8gZGUgYmFqYSBkZSBwcmVjaW9zIHNvbiBtZW5vcmVzIGVuIGNvbXBhcmFjacOzbiBjb24gZWwgbWHDrXosIHF1ZSB0aWVuZSB1bmEgbWF5b3Igdm9sYXRpbGlkYWQgeSByaWVzZ28uDQoNClNpIE1jQ295IGJ1c2NhIG1heGltaXphciBzdSBlc3RhYmlsaWRhZCBmaW5hbmNpZXJhIHkgbWluaW1pemFyIHJpZXNnb3MsIGxhIG1lam9yIG9wY2nDs24gZXMgb3B0YXIgcG9yIGxhIHNveWEuDQo=