De cada uno de los siguientes ejercicios, determinar cómo estará la
subpoblación en 50 generaciones. Además, deben realizar un gráfico para
visualizar el comportamiento de la población de cada organismo.
Ejercicio 1
En un parche de bosque húmedo de Sarapiquí crece una población de 300
plantas de Heliconia latispatha. Las brácteas son hojas
modificadas de color vistoso que rodean las pequeñas flores verdaderas
de la inflorescencia. En esta población, el 75 % de las plantas tiene
brácteas rojas, con genotipos RR o Rr, por lo que el alelo R es
dominante. El 25 % restante tiene brácteas amarillas, con genotipo rr, y
el alelo r es recesivo.
La reproducción de estas plantas depende de la polinización. Los
colibríes visitan las inflorescencias para alimentarse del néctar, y el
color de las brácteas es la principal señal que los atrae. Cuando un
colibrí se posa y luego vuela a otra planta, transporta polen de una
inflorescencia a otra, lo que permite la formación de frutos. Una
inflorescencia visitada con frecuencia produce más frutos y, por lo
tanto, más semillas que pueden dar origen a nuevas plantas.
Durante una temporada de floración se contó el número de frutos por
inflorescencia. Las plantas de brácteas rojas produjeron en promedio 14
frutos, mientras que las de brácteas amarillas produjeron 11.
Supuesto de tiempo: una generación equivale a 4
años.
Ejercicio 2
En una finca de Upala se estudian 200 árboles de cacao criollo. El
color de la mazorca está controlado por un gen con dos alelos: R, que
produce mazorca roja y es dominante, y r, que produce mazorca verde y es
recesivo. El 60 % de los árboles tiene mazorca roja, con genotipos RR o
Rr, y el 40 % tiene mazorca verde, con genotipo rr.
El cacao se reproduce mediante flores que aparecen directamente sobre
el tronco y las ramas gruesas. Estas flores son polinizadas
principalmente por pequeños insectos, como los mosquitos del
género Forcipomyia, que se desplazan entre flores buscando
alimento. Para que una flor se convierta en mazorca, el polen debe
llegar a su estigma y la planta debe ser compatible con ese polen, ya
que el cacao tiene un sistema de autoincompatibilidad que favorece el
cruce entre árboles distintos. Una flor bien polinizada se transforma en
una mazorca que contiene semillas, y las semillas son el producto que el
agricultor cosecha. El color de la mazorca depende del genotipo de la
planta que la produce, así que la cantidad de mazorcas sanas que produce
cada árbol se relaciona directamente con su éxito reproductivo.
Durante tres años se registró el promedio anual de mazorcas sanas por
árbol. Los árboles de mazorca roja produjeron 22 mazorcas por año, y los
de mazorca verde produjeron 18.
Supuesto de tiempo: una generación equivale a 10
años.
Ejercicio 3
En un embalse de la vertiente del Pacífico vive una población de 500
individuos de guapote. Esta especie de cíclido presenta dos morfos de
coloración que dependen de un gen con dos alelos. El morfo dominante
tiene coloración oscura con franjas laterales, con genotipos AA o Aa. El
morfo recesivo tiene coloración clara y uniforme, con genotipo aa. En la
población, el 84 % pertenece al morfo dominante y el 16 % al morfo
recesivo.
El guapote tiene cuidado parental biparental. Después de la
reproducción, la pareja construye un nido, defiende los huevos y luego
protege a las crías durante sus primeras semanas. Esta defensa reduce la
depredación, pero las crías siguen enfrentando riesgos como la
competencia por alimento, los depredadores de mayor tamaño y los cambios
en la calidad del agua. La supervivencia de las crías hasta los 6 meses
de edad determina cuántos individuos llegan a reproducirse. En este
caso, sobrevivió el 92 % de las crías del morfo dominante y el 78 % de
las del morfo recesivo.
Supuesto de tiempo: una generación equivale a 3
años.
library(deSolve)
library(ggplot2)
resolver <- function(prop_rec, w_dom, w_rec, N, anios_gen, generaciones = 50) {
q0 <- sqrt(prop_rec)
w_rel <- w_rec / w_dom # fitness relativo del recesivo (dominante = 1)
modelo <- function(time, state, parameters) {
with(as.list(c(state, parameters)), {
w_prom <- (1 - a^2) * 1 + a^2 * w_rel
dA <- (A * a^2 * (1 - w_rel)) / w_prom
list(c(dA, -dA))
})
}
sol <- ode(y = c(A = 1 - q0, a = q0),
times = seq(0, generaciones, by = 0.5),
func = modelo, parms = c(w_rel = w_rel))
df <- as.data.frame(sol)
df$dominante <- (1 - df$a^2) * N
df$recesivo <- df$a^2 * N
df$anios <- df$time * anios_gen
df
}
grafico <- function(df) {
ggplot(df, aes(x = time)) +
geom_line(aes(y = A, color = "Alelo dominante"), linewidth = 1.2) +
geom_line(aes(y = a, color = "Alelo recesivo"), linewidth = 1.2) +
labs(x = "Generaciones", y = "Frecuencia alélica", color = "Alelos") +
theme_minimal(base_size = 14)
}
install.packages(c("deSolve", "ggplot2"))
install.packages("deSolve")
# Ejercicio 1: Heliconia (14 vs 11 frutos, generación = 4 años)
e1 <- resolver(prop_rec = 0.25, w_dom = 14, w_rec = 11, N = 300, anios_gen = 4)
tail(e1, 1)
grafico(e1)

Respuesta ejercicio 1
En 50 generaciones (200 años), la frecuencia del alelo dominante R
sube de 0.50 a 0.905 y la del alelo recesivo r baja de 0.50 a 0.095. Las
plantas de brácteas rojas tienen mayor fitness (14 frutos contra 11),
por lo que la selección favorece al alelo R. De las 300 plantas de la
población, 297 tienen brácteas rojas y 3 tienen brácteas amarillas. El
alelo recesivo no desaparece porque se conserva en los heterocigotos
(Rr), donde el alelo dominante lo oculta.
# Ejercicio 2: cacao (22 vs 18 mazorcas, generación = 10 años)
e2 <- resolver(prop_rec = 0.40, w_dom = 22, w_rec = 18, N = 200, anios_gen = 10)
tail(e2, 1)
grafico(e2)

Respuesta ejercicio 2
En 50 generaciones (500 años), la frecuencia del alelo dominante R
sube de 0.37 a 0.880 y la del alelo recesivo r baja de 0.63 a 0.120. Al
inicio el alelo recesivo es el más frecuente, pero los árboles de
mazorca roja producen más mazorcas sanas (22 contra 18 por año), así que
la selección favorece al alelo R y las frecuencias se cruzan hacia la
generación 5. De los 200 árboles de la finca, 197 tienen mazorca roja y
3 tienen mazorca verde. El alelo recesivo no desaparece porque se
conserva en los heterocigotos (Rr), donde el alelo dominante lo
oculta.
# Ejercicio 3: guapote (92 % vs 78 % supervivencia, generación = 3 años)
e3 <- resolver(prop_rec = 0.16, w_dom = 0.92, w_rec = 0.78, N = 500, anios_gen = 3)
tail(e3, 1)
grafico(e3)

Respuesta ejercicio 3
En 50 generaciones (150 años), la frecuencia del alelo dominante A
sube de 0.60 a 0.883 y la del alelo recesivo a baja de 0.40 a 0.117. El
morfo oscuro tiene mayor supervivencia de crías (92 % contra 78 %), por
lo que la selección favorece al alelo A. De los 500 guapotes del
embalse, 493 pertenecen al morfo oscuro y 7 al morfo claro. El alelo
recesivo no desaparece porque se conserva en los heterocigotos (Aa),
donde el alelo dominante lo oculta.
LS0tDQp0aXRsZTogIkVqZXJjaWNpb3MgQ2FtYmlvcyBHZW7DqXRpY29zIFBvYmxhY2lvbmFsZXMiDQpvdXRwdXQ6IA0KICBodG1sX25vdGVib29rOiANCiAgICB0b2M6IHRydWUNCiAgICB0aGVtZTogZmxhdGx5DQotLS0NCg0KRGUgY2FkYSB1bm8gZGUgbG9zIHNpZ3VpZW50ZXMgZWplcmNpY2lvcywgZGV0ZXJtaW5hciBjw7NtbyBlc3RhcsOhIGxhIHN1YnBvYmxhY2nDs24gZW4gNTAgZ2VuZXJhY2lvbmVzLiBBZGVtw6FzLCBkZWJlbiByZWFsaXphciB1biBncsOhZmljbyBwYXJhIHZpc3VhbGl6YXIgZWwgY29tcG9ydGFtaWVudG8gZGUgbGEgcG9ibGFjacOzbiBkZSBjYWRhIG9yZ2FuaXNtby4NCg0KIyBFamVyY2ljaW8gMQ0KDQpFbiB1biBwYXJjaGUgZGUgYm9zcXVlIGjDum1lZG8gZGUgU2FyYXBpcXXDrSBjcmVjZSB1bmEgcG9ibGFjacOzbiBkZSAzMDAgcGxhbnRhcyBkZcKgKkhlbGljb25pYSBsYXRpc3BhdGhhKi4gTGFzIGJyw6FjdGVhcyBzb24gaG9qYXMgbW9kaWZpY2FkYXMgZGUgY29sb3IgdmlzdG9zbyBxdWUgcm9kZWFuIGxhcyBwZXF1ZcOxYXMgZmxvcmVzIHZlcmRhZGVyYXMgZGUgbGEgaW5mbG9yZXNjZW5jaWEuIEVuIGVzdGEgcG9ibGFjacOzbiwgZWwgNzUgJSBkZSBsYXMgcGxhbnRhcyB0aWVuZSBicsOhY3RlYXMgcm9qYXMsIGNvbiBnZW5vdGlwb3MgUlIgbyBSciwgcG9yIGxvIHF1ZSBlbCBhbGVsbyBSIGVzIGRvbWluYW50ZS4gRWwgMjUgJSByZXN0YW50ZSB0aWVuZSBicsOhY3RlYXMgYW1hcmlsbGFzLCBjb24gZ2Vub3RpcG8gcnIsIHkgZWwgYWxlbG8gciBlcyByZWNlc2l2by4NCg0KTGEgcmVwcm9kdWNjacOzbiBkZSBlc3RhcyBwbGFudGFzIGRlcGVuZGUgZGUgbGEgcG9saW5pemFjacOzbi4gTG9zIGNvbGlicsOtZXMgdmlzaXRhbiBsYXMgaW5mbG9yZXNjZW5jaWFzIHBhcmEgYWxpbWVudGFyc2UgZGVsIG7DqWN0YXIsIHkgZWwgY29sb3IgZGUgbGFzIGJyw6FjdGVhcyBlcyBsYSBwcmluY2lwYWwgc2XDsWFsIHF1ZSBsb3MgYXRyYWUuIEN1YW5kbyB1biBjb2xpYnLDrSBzZSBwb3NhIHkgbHVlZ28gdnVlbGEgYSBvdHJhIHBsYW50YSwgdHJhbnNwb3J0YSBwb2xlbiBkZSB1bmEgaW5mbG9yZXNjZW5jaWEgYSBvdHJhLCBsbyBxdWUgcGVybWl0ZSBsYSBmb3JtYWNpw7NuIGRlIGZydXRvcy4gVW5hIGluZmxvcmVzY2VuY2lhIHZpc2l0YWRhIGNvbiBmcmVjdWVuY2lhIHByb2R1Y2UgbcOhcyBmcnV0b3MgeSwgcG9yIGxvIHRhbnRvLCBtw6FzIHNlbWlsbGFzIHF1ZSBwdWVkZW4gZGFyIG9yaWdlbiBhIG51ZXZhcyBwbGFudGFzLg0KDQpEdXJhbnRlIHVuYSB0ZW1wb3JhZGEgZGUgZmxvcmFjacOzbiBzZSBjb250w7MgZWwgbsO6bWVybyBkZSBmcnV0b3MgcG9yIGluZmxvcmVzY2VuY2lhLiBMYXMgcGxhbnRhcyBkZSBicsOhY3RlYXMgcm9qYXMgcHJvZHVqZXJvbiBlbiBwcm9tZWRpbyAxNCBmcnV0b3MsIG1pZW50cmFzIHF1ZSBsYXMgZGUgYnLDoWN0ZWFzIGFtYXJpbGxhcyBwcm9kdWplcm9uIDExLg0KDQoqKlN1cHVlc3RvIGRlIHRpZW1wbzoqKsKgdW5hIGdlbmVyYWNpw7NuIGVxdWl2YWxlIGEgNCBhw7Fvcy4NCg0KIyBFamVyY2ljaW8gMg0KDQpFbiB1bmEgZmluY2EgZGUgVXBhbGEgc2UgZXN0dWRpYW4gMjAwIMOhcmJvbGVzIGRlIGNhY2FvIGNyaW9sbG8uIEVsIGNvbG9yIGRlIGxhIG1hem9yY2EgZXN0w6EgY29udHJvbGFkbyBwb3IgdW4gZ2VuIGNvbiBkb3MgYWxlbG9zOiBSLCBxdWUgcHJvZHVjZSBtYXpvcmNhIHJvamEgeSBlcyBkb21pbmFudGUsIHkgciwgcXVlIHByb2R1Y2UgbWF6b3JjYSB2ZXJkZSB5IGVzIHJlY2VzaXZvLiBFbCA2MCAlIGRlIGxvcyDDoXJib2xlcyB0aWVuZSBtYXpvcmNhIHJvamEsIGNvbiBnZW5vdGlwb3MgUlIgbyBSciwgeSBlbCA0MCAlIHRpZW5lIG1hem9yY2EgdmVyZGUsIGNvbiBnZW5vdGlwbyByci4NCg0KRWwgY2FjYW8gc2UgcmVwcm9kdWNlIG1lZGlhbnRlIGZsb3JlcyBxdWUgYXBhcmVjZW4gZGlyZWN0YW1lbnRlIHNvYnJlIGVsIHRyb25jbyB5IGxhcyByYW1hcyBncnVlc2FzLiBFc3RhcyBmbG9yZXMgc29uIHBvbGluaXphZGFzIHByaW5jaXBhbG1lbnRlIHBvciBwZXF1ZcOxb3MgaW5zZWN0b3MsIGNvbW8gbG9zIG1vc3F1aXRvcyBkZWwgZ8OpbmVyb8KgKkZvcmNpcG9teWlhKiwgcXVlIHNlIGRlc3BsYXphbiBlbnRyZSBmbG9yZXMgYnVzY2FuZG8gYWxpbWVudG8uIFBhcmEgcXVlIHVuYSBmbG9yIHNlIGNvbnZpZXJ0YSBlbiBtYXpvcmNhLCBlbCBwb2xlbiBkZWJlIGxsZWdhciBhIHN1IGVzdGlnbWEgeSBsYSBwbGFudGEgZGViZSBzZXIgY29tcGF0aWJsZSBjb24gZXNlIHBvbGVuLCB5YSBxdWUgZWwgY2FjYW8gdGllbmUgdW4gc2lzdGVtYSBkZSBhdXRvaW5jb21wYXRpYmlsaWRhZCBxdWUgZmF2b3JlY2UgZWwgY3J1Y2UgZW50cmUgw6FyYm9sZXMgZGlzdGludG9zLiBVbmEgZmxvciBiaWVuIHBvbGluaXphZGEgc2UgdHJhbnNmb3JtYSBlbiB1bmEgbWF6b3JjYSBxdWUgY29udGllbmUgc2VtaWxsYXMsIHkgbGFzIHNlbWlsbGFzIHNvbiBlbCBwcm9kdWN0byBxdWUgZWwgYWdyaWN1bHRvciBjb3NlY2hhLiBFbCBjb2xvciBkZSBsYSBtYXpvcmNhIGRlcGVuZGUgZGVsIGdlbm90aXBvIGRlIGxhIHBsYW50YSBxdWUgbGEgcHJvZHVjZSwgYXPDrSBxdWUgbGEgY2FudGlkYWQgZGUgbWF6b3JjYXMgc2FuYXMgcXVlIHByb2R1Y2UgY2FkYSDDoXJib2wgc2UgcmVsYWNpb25hIGRpcmVjdGFtZW50ZSBjb24gc3Ugw6l4aXRvIHJlcHJvZHVjdGl2by4NCg0KRHVyYW50ZSB0cmVzIGHDsW9zIHNlIHJlZ2lzdHLDsyBlbCBwcm9tZWRpbyBhbnVhbCBkZSBtYXpvcmNhcyBzYW5hcyBwb3Igw6FyYm9sLiBMb3Mgw6FyYm9sZXMgZGUgbWF6b3JjYSByb2phIHByb2R1amVyb24gMjIgbWF6b3JjYXMgcG9yIGHDsW8sIHkgbG9zIGRlIG1hem9yY2EgdmVyZGUgcHJvZHVqZXJvbiAxOC4NCg0KKipTdXB1ZXN0byBkZSB0aWVtcG86KirCoHVuYSBnZW5lcmFjacOzbiBlcXVpdmFsZSBhIDEwIGHDsW9zLg0KDQojIEVqZXJjaWNpbyAzDQoNCkVuIHVuIGVtYmFsc2UgZGUgbGEgdmVydGllbnRlIGRlbCBQYWPDrWZpY28gdml2ZSB1bmEgcG9ibGFjacOzbiBkZSA1MDAgaW5kaXZpZHVvcyBkZSBndWFwb3RlLiBFc3RhIGVzcGVjaWUgZGUgY8OtY2xpZG8gcHJlc2VudGEgZG9zIG1vcmZvcyBkZSBjb2xvcmFjacOzbiBxdWUgZGVwZW5kZW4gZGUgdW4gZ2VuIGNvbiBkb3MgYWxlbG9zLiBFbCBtb3JmbyBkb21pbmFudGUgdGllbmUgY29sb3JhY2nDs24gb3NjdXJhIGNvbiBmcmFuamFzIGxhdGVyYWxlcywgY29uIGdlbm90aXBvcyBBQSBvIEFhLiBFbCBtb3JmbyByZWNlc2l2byB0aWVuZSBjb2xvcmFjacOzbiBjbGFyYSB5IHVuaWZvcm1lLCBjb24gZ2Vub3RpcG8gYWEuIEVuIGxhIHBvYmxhY2nDs24sIGVsIDg0ICUgcGVydGVuZWNlIGFsIG1vcmZvIGRvbWluYW50ZSB5IGVsIDE2ICUgYWwgbW9yZm8gcmVjZXNpdm8uDQoNCkVsIGd1YXBvdGUgdGllbmUgY3VpZGFkbyBwYXJlbnRhbCBiaXBhcmVudGFsLiBEZXNwdcOpcyBkZSBsYSByZXByb2R1Y2Npw7NuLCBsYSBwYXJlamEgY29uc3RydXllIHVuIG5pZG8sIGRlZmllbmRlIGxvcyBodWV2b3MgeSBsdWVnbyBwcm90ZWdlIGEgbGFzIGNyw61hcyBkdXJhbnRlIHN1cyBwcmltZXJhcyBzZW1hbmFzLiBFc3RhIGRlZmVuc2EgcmVkdWNlIGxhIGRlcHJlZGFjacOzbiwgcGVybyBsYXMgY3LDrWFzIHNpZ3VlbiBlbmZyZW50YW5kbyByaWVzZ29zIGNvbW8gbGEgY29tcGV0ZW5jaWEgcG9yIGFsaW1lbnRvLCBsb3MgZGVwcmVkYWRvcmVzIGRlIG1heW9yIHRhbWHDsW8geSBsb3MgY2FtYmlvcyBlbiBsYSBjYWxpZGFkIGRlbCBhZ3VhLiBMYSBzdXBlcnZpdmVuY2lhIGRlIGxhcyBjcsOtYXMgaGFzdGEgbG9zIDYgbWVzZXMgZGUgZWRhZCBkZXRlcm1pbmEgY3XDoW50b3MgaW5kaXZpZHVvcyBsbGVnYW4gYSByZXByb2R1Y2lyc2UuIEVuIGVzdGUgY2Fzbywgc29icmV2aXZpw7MgZWwgOTIgJSBkZSBsYXMgY3LDrWFzIGRlbCBtb3JmbyBkb21pbmFudGUgeSBlbCA3OCAlIGRlIGxhcyBkZWwgbW9yZm8gcmVjZXNpdm8uDQoNCioqU3VwdWVzdG8gZGUgdGllbXBvOioqwqB1bmEgZ2VuZXJhY2nDs24gZXF1aXZhbGUgYSAzIGHDsW9zLg0KDQpgYGB7cn0NCmxpYnJhcnkoZGVTb2x2ZSkNCmxpYnJhcnkoZ2dwbG90MikNCg0KcmVzb2x2ZXIgPC0gZnVuY3Rpb24ocHJvcF9yZWMsIHdfZG9tLCB3X3JlYywgTiwgYW5pb3NfZ2VuLCBnZW5lcmFjaW9uZXMgPSA1MCkgew0KICBxMCA8LSBzcXJ0KHByb3BfcmVjKQ0KICB3X3JlbCA8LSB3X3JlYyAvIHdfZG9tICAgICAgICAgICMgZml0bmVzcyByZWxhdGl2byBkZWwgcmVjZXNpdm8gKGRvbWluYW50ZSA9IDEpDQoNCiAgbW9kZWxvIDwtIGZ1bmN0aW9uKHRpbWUsIHN0YXRlLCBwYXJhbWV0ZXJzKSB7DQogICAgd2l0aChhcy5saXN0KGMoc3RhdGUsIHBhcmFtZXRlcnMpKSwgew0KICAgICAgd19wcm9tIDwtICgxIC0gYV4yKSAqIDEgKyBhXjIgKiB3X3JlbA0KICAgICAgZEEgPC0gKEEgKiBhXjIgKiAoMSAtIHdfcmVsKSkgLyB3X3Byb20NCiAgICAgIGxpc3QoYyhkQSwgLWRBKSkNCiAgICB9KQ0KICB9DQoNCiAgc29sIDwtIG9kZSh5ID0gYyhBID0gMSAtIHEwLCBhID0gcTApLA0KICAgICAgICAgICAgIHRpbWVzID0gc2VxKDAsIGdlbmVyYWNpb25lcywgYnkgPSAwLjUpLA0KICAgICAgICAgICAgIGZ1bmMgPSBtb2RlbG8sIHBhcm1zID0gYyh3X3JlbCA9IHdfcmVsKSkNCiAgZGYgPC0gYXMuZGF0YS5mcmFtZShzb2wpDQogIGRmJGRvbWluYW50ZSA8LSAoMSAtIGRmJGFeMikgKiBODQogIGRmJHJlY2VzaXZvICA8LSBkZiRhXjIgKiBODQogIGRmJGFuaW9zIDwtIGRmJHRpbWUgKiBhbmlvc19nZW4NCiAgZGYNCn0NCg0KZ3JhZmljbyA8LSBmdW5jdGlvbihkZikgew0KICBnZ3Bsb3QoZGYsIGFlcyh4ID0gdGltZSkpICsNCiAgICBnZW9tX2xpbmUoYWVzKHkgPSBBLCBjb2xvciA9ICJBbGVsbyBkb21pbmFudGUiKSwgbGluZXdpZHRoID0gMS4yKSArDQogICAgZ2VvbV9saW5lKGFlcyh5ID0gYSwgY29sb3IgPSAiQWxlbG8gcmVjZXNpdm8iKSwgbGluZXdpZHRoID0gMS4yKSArDQogICAgbGFicyh4ID0gIkdlbmVyYWNpb25lcyIsIHkgPSAiRnJlY3VlbmNpYSBhbMOpbGljYSIsIGNvbG9yID0gIkFsZWxvcyIpICsNCiAgICB0aGVtZV9taW5pbWFsKGJhc2Vfc2l6ZSA9IDE0KQ0KfQ0KYGBgDQoNCmBgYHtyfQ0KaW5zdGFsbC5wYWNrYWdlcyhjKCJkZVNvbHZlIiwgImdncGxvdDIiKSkNCiAgaW5zdGFsbC5wYWNrYWdlcygiZGVTb2x2ZSIpDQogIA0KYGBgDQoNCmBgYHtyfQ0KIyBFamVyY2ljaW8gMTogSGVsaWNvbmlhICgxNCB2cyAxMSBmcnV0b3MsIGdlbmVyYWNpw7NuID0gNCBhw7FvcykNCmUxIDwtIHJlc29sdmVyKHByb3BfcmVjID0gMC4yNSwgd19kb20gPSAxNCwgd19yZWMgPSAxMSwgTiA9IDMwMCwgYW5pb3NfZ2VuID0gNCkNCnRhaWwoZTEsIDEpDQpncmFmaWNvKGUxKQ0KYGBgDQojIyBSZXNwdWVzdGEgZWplcmNpY2lvIDENCg0KRW4gNTAgZ2VuZXJhY2lvbmVzICgyMDAgYcOxb3MpLCBsYSBmcmVjdWVuY2lhIGRlbCBhbGVsbyBkb21pbmFudGUgUiBzdWJlIGRlIDAuNTAgYSAwLjkwNSB5IGxhIGRlbCBhbGVsbyByZWNlc2l2byByIGJhamEgZGUgMC41MCBhIDAuMDk1LiBMYXMgcGxhbnRhcyBkZSBicsOhY3RlYXMgcm9qYXMgdGllbmVuIG1heW9yIGZpdG5lc3MgKDE0IGZydXRvcyBjb250cmEgMTEpLCBwb3IgbG8gcXVlIGxhIHNlbGVjY2nDs24gZmF2b3JlY2UgYWwgYWxlbG8gUi4gRGUgbGFzIDMwMCBwbGFudGFzIGRlIGxhIHBvYmxhY2nDs24sIDI5NyB0aWVuZW4gYnLDoWN0ZWFzIHJvamFzIHkgMyB0aWVuZW4gYnLDoWN0ZWFzIGFtYXJpbGxhcy4gRWwgYWxlbG8gcmVjZXNpdm8gbm8gZGVzYXBhcmVjZSBwb3JxdWUgc2UgY29uc2VydmEgZW4gbG9zIGhldGVyb2NpZ290b3MgKFJyKSwgZG9uZGUgZWwgYWxlbG8gZG9taW5hbnRlIGxvIG9jdWx0YS4NCg0KYGBge3J9DQojIEVqZXJjaWNpbyAyOiBjYWNhbyAoMjIgdnMgMTggbWF6b3JjYXMsIGdlbmVyYWNpw7NuID0gMTAgYcOxb3MpDQplMiA8LSByZXNvbHZlcihwcm9wX3JlYyA9IDAuNDAsIHdfZG9tID0gMjIsIHdfcmVjID0gMTgsIE4gPSAyMDAsIGFuaW9zX2dlbiA9IDEwKQ0KdGFpbChlMiwgMSkNCmdyYWZpY28oZTIpDQpgYGANCiMjIFJlc3B1ZXN0YSBlamVyY2ljaW8gMg0KDQpFbiA1MCBnZW5lcmFjaW9uZXMgKDUwMCBhw7FvcyksIGxhIGZyZWN1ZW5jaWEgZGVsIGFsZWxvIGRvbWluYW50ZSBSIHN1YmUgZGUgMC4zNyBhIDAuODgwIHkgbGEgZGVsIGFsZWxvIHJlY2VzaXZvIHIgYmFqYSBkZSAwLjYzIGEgMC4xMjAuIEFsIGluaWNpbyBlbCBhbGVsbyByZWNlc2l2byBlcyBlbCBtw6FzIGZyZWN1ZW50ZSwgcGVybyBsb3Mgw6FyYm9sZXMgZGUgbWF6b3JjYSByb2phIHByb2R1Y2VuIG3DoXMgbWF6b3JjYXMgc2FuYXMgKDIyIGNvbnRyYSAxOCBwb3IgYcOxbyksIGFzw60gcXVlIGxhIHNlbGVjY2nDs24gZmF2b3JlY2UgYWwgYWxlbG8gUiB5IGxhcyBmcmVjdWVuY2lhcyBzZSBjcnV6YW4gaGFjaWEgbGEgZ2VuZXJhY2nDs24gNS4gRGUgbG9zIDIwMCDDoXJib2xlcyBkZSBsYSBmaW5jYSwgMTk3IHRpZW5lbiBtYXpvcmNhIHJvamEgeSAzIHRpZW5lbiBtYXpvcmNhIHZlcmRlLiBFbCBhbGVsbyByZWNlc2l2byBubyBkZXNhcGFyZWNlIHBvcnF1ZSBzZSBjb25zZXJ2YSBlbiBsb3MgaGV0ZXJvY2lnb3RvcyAoUnIpLCBkb25kZSBlbCBhbGVsbyBkb21pbmFudGUgbG8gb2N1bHRhLg0KDQpgYGB7cn0NCiMgRWplcmNpY2lvIDM6IGd1YXBvdGUgKDkyICUgdnMgNzggJSBzdXBlcnZpdmVuY2lhLCBnZW5lcmFjacOzbiA9IDMgYcOxb3MpDQplMyA8LSByZXNvbHZlcihwcm9wX3JlYyA9IDAuMTYsIHdfZG9tID0gMC45Miwgd19yZWMgPSAwLjc4LCBOID0gNTAwLCBhbmlvc19nZW4gPSAzKQ0KdGFpbChlMywgMSkNCmdyYWZpY28oZTMpDQpgYGANCiMjIFJlc3B1ZXN0YSBlamVyY2ljaW8gMw0KDQpFbiA1MCBnZW5lcmFjaW9uZXMgKDE1MCBhw7FvcyksIGxhIGZyZWN1ZW5jaWEgZGVsIGFsZWxvIGRvbWluYW50ZSBBIHN1YmUgZGUgMC42MCBhIDAuODgzIHkgbGEgZGVsIGFsZWxvIHJlY2VzaXZvIGEgYmFqYSBkZSAwLjQwIGEgMC4xMTcuIEVsIG1vcmZvIG9zY3VybyB0aWVuZSBtYXlvciBzdXBlcnZpdmVuY2lhIGRlIGNyw61hcyAoOTIgJSBjb250cmEgNzggJSksIHBvciBsbyBxdWUgbGEgc2VsZWNjacOzbiBmYXZvcmVjZSBhbCBhbGVsbyBBLiBEZSBsb3MgNTAwIGd1YXBvdGVzIGRlbCBlbWJhbHNlLCA0OTMgcGVydGVuZWNlbiBhbCBtb3JmbyBvc2N1cm8geSA3IGFsIG1vcmZvIGNsYXJvLiBFbCBhbGVsbyByZWNlc2l2byBubyBkZXNhcGFyZWNlIHBvcnF1ZSBzZSBjb25zZXJ2YSBlbiBsb3MgaGV0ZXJvY2lnb3RvcyAoQWEpLCBkb25kZSBlbCBhbGVsbyBkb21pbmFudGUgbG8gb2N1bHRhLg0KDQoNCg0KDQoNCg0K