Antecedentes de la empresa

Visión: “En 2033 seremos una de las cinco mejores compañías de México que generan valor dentro de la cadena de suministro de las industrias que más valoran la forma en la que se protegen y trasladan las cosas.” (Form, 2023).

Misión: “Transformar nuestro entorno y resolver retos industriales de nuestros clientes a través de la colaboración, provocando nuevas oportunidades que potencian nuestro modelo de negocio, para alcanzar nuestros ideales.” (Form, 2023).

Contexto de la industria:

Socio Formador Form

Introducción de la Empresa

FORM es una empresa con sede principal en Nuevo León, ésta se dedica al empaque y embalaje de autopartes específicamente de partes interiores y eléctricas de los vehículos, las cuales es de suma importancia que no reciban ningún tipo de daño estético en su proceso de transportación para su ensamblaje.

FORM se centra en abastecer las necesidades de los proveedores Tier 1 (planta automotriz) y Tier 2 (proveen partes a las plantas) de la industria automotriz, por lo que estos son sus principales clientes.

Productos o Servicios - Propuesta de Valor

La empresa no ofrece un portafolio de productos fijos o estandarizados para la industria automotriz. FORM busca generar soluciones a las necesidades y problemas de sus clientes dentro de la cadena de suministro, por medio de la innovación ingenieril en el empaque de las autopartes.

Además, FORM ofrece un servicio de acompañamiento el cual funciona como un soporte de comunicación en el que empleados de FORM, pueden asistir directamente en la planta de los clientes para la entrega de los empaques y ensamblaje hasta tener comunicación continua con la empresa en caso de cualquier situación.

Las cosas antes mencionadas forman parte de la propuesta de valor de la empresa, apalancando de la innovación y el servicio al cliente se busca asegurar la calidad la cual los clientes de FORM están buscando debido a la importancia y delicadeza que toman las autopartes interiores y eléctricas dentro de la industria automotriz.

Aunque los productos que ofrece FORM dentro de la industria automotriz fungen parecido a un commodity, el empaque se llega a producir en grandes cantidades, estos no entran como tal en la definición de commodity ya que en el caso de FORM entra una parte clave la cual es la personalización.

Perspectivas Futuras

Actualmente FORM busca equipar con tecnología para automatizar y desarrollar todo un ambiente de datos el cual les pueda ayudar a agilizar procesos y dar certeza a la toma de decisiones en base a datos. Con esto buscan poder realizar pronósticos para anticipar la demanda de sus clientes y diversificar dentro de EUA, esto por mencionar alguno de los ejemplos. En cuanto a temas de cultura organizacional se busca medir sistemáticamente diferentes KPI´s.

Además de esto, se busca crear un sentido de pertenencia y lealtad de los empleados hacia la empresa. Buscando continuar con la cultura organizacional actual, la cual está enfocada en la horizontalidad, la construcción de equipos y divisiones autónomas a niveles inferiores dentro de la empresa. Esto, con el fin de permitir una comunicación más efectiva y fluida entre departamentos.

Expansión

Actualmente FORM busca un crecimiento, desea continuar con la industria de autopartes, por lo que su principal enfoque se encuentra en crecer a lo largo de la línea de la industria automotriz que se encuentra ubicada en el territorio mexicano y estadounidense. Específicamente, busca crecer en el bajío mexicano y en San Antonio Texas en el extranjero. Por otra parte, busca explorar otras industrias las cuales se alineen a su misión, como lo puede ser la aeroespacial y de equipos médicos.

Además busca expandir sus inversiones en el extranjero tomando como opción principal a Estados Unidos. Buscando crecer a cualquier parte de Texas debido a el costo de oportunidad que se tiene, si se busca crecer más allá de Texas aumenta los costos de fletes y el negocio no sale con buen margen. FORM no busca ser la empresa mas grande, se concentra en negocios de PYME con grandes margenes de ganancia

Cultura organizacional y Recursos Humanos

Hoy en día cuentan con 130 colaboradores dentro de la empresa, sin embargo existe un tema de rotación de personal por diversas razones, uno de sus enfoques es crear una cultura organizacional la cual retenga al capital humano.

Actualmente ofrecen diversas compensaciones y beneficios para incitar la activa participación de sus colaboradores. Se cuentan con bases de datos enfocadas al tema de capital humano con las cuales se buscan identificar las razones de la rotación, sin embargo aún no han logrado ver un decremento en los porcentajes anuales de rotación.

FORM cuenta con 6 pilares principales, dentro de la empresa se vive una actitud de honestidad y transparencia dentro de todos los procesos, se busca cuidar detalladamente los espacios de trabajo con planes para implementar nuevos baños en el piso.

Análisis de las áreas de la empresa

Cargar librerias

library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.1.2     ✔ readr     2.1.4
## ✔ forcats   1.0.0     ✔ stringr   1.5.0
## ✔ ggplot2   3.4.3     ✔ tibble    3.2.1
## ✔ lubridate 1.9.2     ✔ tidyr     1.3.0
## ✔ 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(ggplot2)
library(stringr)
library(readr)
library(dplyr)
library(tidyr)
library(grid)
library(psych)
## 
## Attaching package: 'psych'
## 
## The following objects are masked from 'package:ggplot2':
## 
##     %+%, alpha

Cargar bases de datos

#file.choose()
Ventas_1 <- read.csv("/Users/marianamagana/Desktop/Evidencia1/Ventas_1.csv")

#file.choose()
Bajas <-read.csv("/Users/marianamagana/Desktop/Evidencia1/Bajas.csv")

#file.choose()
FDI_df <- read.csv("/Users/marianamagana/Desktop/Evidencia1/FDI_Mexico.csv")

Bajas por Puesto y Genero (2021) - Gráfico 1

Los ayudantes generales son los que cuentan mayor baja por un margén altamente considerable, como se puede observar en la grafíca 1. Además de esto se puede observar que de igual forma la mayoría de personas de está posición a las que se les da de baja son mujeres.

Por lo que se podría plantear una primer hipótesis la cual es que esto se puede deber a que la gran parte de personas que se contratan son para el puesto de ayudante general y de sexo femenino, sin embargo todavía no se ha realizado el análisis para comprobar la hipótesis antes mencionada.

options(scipen = 999) 
Bajas$PUESTO <- as.factor(Bajas$PUESTO)

ggplot(Bajas, aes(PUESTO)) +
  geom_bar(aes(fill=GENERO)) +
  theme(axis.text.x = element_text(angle = 90)) +
  labs(x = "Puesto", y = "Cantidad", title = "Bajas por puesto ") +
  theme(panel.background = element_rect(fill = "gray98"))

Ventas por Línea de Negocio (2021) - Gráfico 2

Dentro de las ventas por linea de negocio, es decir retornable y cartón. Se puede observar como la linea de negocios que liderá es la del cartón, sin embargo se observa como las ventas de retornables y cartón en los primeros 2 quartiles del año son altamente superiores al resto del año.

as.Date(Ventas_1$Mes)
##  [1] "0028-01-21" "0028-01-21" "0028-02-21" "0028-02-21" "0028-03-21"
##  [6] "0028-03-21" "0028-04-21" "0028-04-21" "0028-05-21" "0028-05-21"
## [11] "0028-06-21" "0028-06-21" "0028-07-21" "0028-07-21" "0028-08-21"
## [16] "0028-08-21" "0028-09-21" "0028-09-21" "0028-10-21" "0028-10-21"
## [21] "0028-11-21" "0028-11-21" "0028-12-21" "0028-12-21"
col_per <- c("coral", "orange")

ggplot(Ventas_1, aes(x = Mes, y = Venta, fill = Producto)) +
  geom_bar(stat = "identity") +
  labs(x = "Mes", y = "Venta", title = "Ventas Mensuales por Producto") +
  scale_fill_manual(values = col_per) + 
  theme(panel.background = element_rect(fill = "gray98") )+
  theme(axis.text.x = element_text(angle = 90, hjust = 1))

Inversión Extranjera Directa a través de los Años - Grafíca 3

La Inversión Extranjera Directa en el mismo año (2021), tuvo fuertes afectaciones debido al COVID-19, por lo que podría ser una de las razones por las cuales en la Grafíca 2 las ventas de los ultímos 2 cuartiles del año hayan caído de manera considerable a comparación del inicio del año.

df_FDI = FDI_df

#Separar Columnas
df_FDI <- separate(df_FDI, Quartil, into = c("Quartil", "Año"), sep = " ")

#FDI sumado por Año
año_sum <- df_FDI %>% group_by(Año) %>% summarize(suma=sum(Mil.Millones.de.Dolares))

año_sum$Año <- as.numeric(año_sum$Año)

grafico_año = ggplot(año_sum, aes(x = Año, y = suma)) +
  geom_line( color = "#F46C22") +
  geom_point(color = "#F46C22") +
  geom_text(aes(label = suma), hjust = -0.2, vjust = 0.5, color = "#505050", size = 4) +  
  labs(title = "Inversión Extranjera Directa por Año",subtitle = "Mil Millones de Dólares", x = "Año", y = "Inversión", caption = "Fuente: INEGI") + 
  theme_minimal() + 
  theme(plot.title = element_text(hjust = 0.5, face = "bold", color = "#505050"), panel.grid.major =      element_blank(), plot.subtitle = element_text(hjust = .5, size = 7)) 

grafico_año + scale_x_continuous(breaks = año_sum$Año)

FODA Cruzado

El objetivo del análisis FODA para FORM es evaluar de manera integral sus Fortalezas, Oportunidades, Debilidades y Amenazas con el fin de obtener una comprensión estratégica de su posición en el mercado y proporcionar una base sólida para la toma de decisiones que potencien su competitividad y crecimiento en la industria de empaques y embalajes.

PESTLE

El objetivo del análisis PESTLE para FORM es examinar los factores que impactan su operación y entorno empresarial. Esto permitirá a la empresa comprender mejor el contexto en el que opera, anticipar posibles cambios y ajustar su estrategia para maximizar oportunidades y mitigar riesgos.

LS0tCnRpdGxlOiAiRW50cmVnYWJsZSAxLSBFdmlkZW5jaWEgMSIKYXV0aG9yOiAiVGVjIENvbnN1bHRpbmcgR3JvdXAiCmRhdGU6ICIyMDIzLTA4LTI1IgpvdXRwdXQ6IAogaHRtbF9kb2N1bWVudDoKICAgIHRvYzogVFJVRQogICAgdG9jX2Zsb2F0OiBUUlVFCiAgICBjb2RlX2Rvd25sb2FkOiBUUlVFCiAgICB0aGVtZTogInlldGkiCi0tLQoKIVsgXSgvVXNlcnMvbWFyaWFuYW1hZ2FuYS9EZXNrdG9wL0V2aWRlbmNpYTEvbG9nb19GT1JNLnBuZykKCiMjIyA8c3BhbiBzdHlsZSA9ImNvbG9yOmRhcmtvcmFuZ2UiPiAqKkFudGVjZWRlbnRlcyBkZSBsYSBlbXByZXNhKioKCioqVmlzacOzbjoqKiAg4oCcRW4gMjAzMyBzZXJlbW9zIHVuYSBkZSBsYXMgY2luY28gbWVqb3JlcyBjb21wYcOxw61hcyBkZSBNw6l4aWNvIHF1ZSBnZW5lcmFuIHZhbG9yIGRlbnRybyBkZSBsYSBjYWRlbmEgZGUgc3VtaW5pc3RybyBkZSBsYXMgaW5kdXN0cmlhcyBxdWUgbcOhcyB2YWxvcmFuIGxhIGZvcm1hIGVuIGxhIHF1ZSBzZSBwcm90ZWdlbiB5IHRyYXNsYWRhbiBsYXMgY29zYXMu4oCdIChGb3JtLCAyMDIzKS4KCioqTWlzacOzbjoqKiDigJxUcmFuc2Zvcm1hciBudWVzdHJvIGVudG9ybm8geSByZXNvbHZlciByZXRvcyBpbmR1c3RyaWFsZXMgZGUgbnVlc3Ryb3MgY2xpZW50ZXMgYSB0cmF2w6lzIGRlIGxhIGNvbGFib3JhY2nDs24sIHByb3ZvY2FuZG8gbnVldmFzIG9wb3J0dW5pZGFkZXMgcXVlIHBvdGVuY2lhbiBudWVzdHJvIG1vZGVsbyBkZSBuZWdvY2lvLCBwYXJhIGFsY2FuemFyIG51ZXN0cm9zIGlkZWFsZXMu4oCdIChGb3JtLCAyMDIzKS4gCgojIyMgPHNwYW4gc3R5bGUgPSJjb2xvcjpkYXJrb3JhbmdlIj4gKipDb250ZXh0byBkZSBsYSBpbmR1c3RyaWEqKjoKCiMjIyA8c3BhbiBzdHlsZSA9ImNvbG9yOmRhcmtvcmFuZ2UiPiAqU29jaW8gRm9ybWFkb3IgRm9ybSoKCiMjIyA8c3BhbiBzdHlsZSA9ImNvbG9yOmRhcmtvcmFuZ2UiPiBJbnRyb2R1Y2Npw7NuIGRlIGxhIEVtcHJlc2EKCkZPUk0gZXMgdW5hIGVtcHJlc2EgY29uIHNlZGUgcHJpbmNpcGFsIGVuIE51ZXZvIExlw7NuLCDDqXN0YSBzZSBkZWRpY2EgYWwgZW1wYXF1ZSB5IGVtYmFsYWplIGRlIGF1dG9wYXJ0ZXMgZXNwZWPDrWZpY2FtZW50ZSBkZSBwYXJ0ZXMgaW50ZXJpb3JlcyB5IGVsw6ljdHJpY2FzIGRlIGxvcyB2ZWjDrWN1bG9zLCBsYXMgY3VhbGVzIGVzIGRlIHN1bWEgaW1wb3J0YW5jaWEgcXVlIG5vIHJlY2liYW4gbmluZ8O6biB0aXBvIGRlIGRhw7FvIGVzdMOpdGljbyBlbiBzdSBwcm9jZXNvIGRlIHRyYW5zcG9ydGFjacOzbiBwYXJhIHN1IGVuc2FtYmxhamUuIAoKRk9STSBzZSBjZW50cmEgZW4gYWJhc3RlY2VyIGxhcyBuZWNlc2lkYWRlcyBkZSBsb3MgcHJvdmVlZG9yZXMgVGllciAxIChwbGFudGEgYXV0b21vdHJpeikgeSBUaWVyIDIgKHByb3ZlZW4gcGFydGVzIGEgbGFzIHBsYW50YXMpIGRlIGxhIGluZHVzdHJpYSBhdXRvbW90cml6LCBwb3IgbG8gcXVlIGVzdG9zIHNvbiBzdXMgcHJpbmNpcGFsZXMgY2xpZW50ZXMuCgojIyMgPHNwYW4gc3R5bGUgPSJjb2xvcjpkYXJrb3JhbmdlIj4gKlByb2R1Y3RvcyBvIFNlcnZpY2lvcyAtIFByb3B1ZXN0YSBkZSBWYWxvcioKCkxhIGVtcHJlc2Egbm8gb2ZyZWNlIHVuIHBvcnRhZm9saW8gZGUgcHJvZHVjdG9zIGZpam9zIG8gZXN0YW5kYXJpemFkb3MgcGFyYSBsYSBpbmR1c3RyaWEgYXV0b21vdHJpei4gRk9STSBidXNjYSBnZW5lcmFyIHNvbHVjaW9uZXMgYSBsYXMgbmVjZXNpZGFkZXMgeSBwcm9ibGVtYXMgZGUgc3VzIGNsaWVudGVzIGRlbnRybyBkZSBsYSBjYWRlbmEgZGUgc3VtaW5pc3RybywgcG9yIG1lZGlvIGRlIGxhIGlubm92YWNpw7NuIGluZ2VuaWVyaWwgIGVuIGVsIGVtcGFxdWUgZGUgbGFzIGF1dG9wYXJ0ZXMuIAoKQWRlbcOhcywgRk9STSBvZnJlY2UgdW4gc2VydmljaW8gZGUgYWNvbXBhw7FhbWllbnRvIGVsIGN1YWwgZnVuY2lvbmEgY29tbyB1biBzb3BvcnRlIGRlIGNvbXVuaWNhY2nDs24gZW4gZWwgcXVlIGVtcGxlYWRvcyBkZSBGT1JNLCAgcHVlZGVuIGFzaXN0aXIgZGlyZWN0YW1lbnRlIGVuIGxhIHBsYW50YSBkZSBsb3MgY2xpZW50ZXMgcGFyYSBsYSBlbnRyZWdhIGRlIGxvcyBlbXBhcXVlcyB5IGVuc2FtYmxhamUgaGFzdGEgdGVuZXIgY29tdW5pY2FjacOzbiBjb250aW51YSBjb24gbGEgZW1wcmVzYSBlbiBjYXNvIGRlIGN1YWxxdWllciBzaXR1YWNpw7NuLiAKCkxhcyBjb3NhcyBhbnRlcyBtZW5jaW9uYWRhcyBmb3JtYW4gcGFydGUgZGUgbGEgcHJvcHVlc3RhIGRlIHZhbG9yIGRlIGxhIGVtcHJlc2EsIGFwYWxhbmNhbmRvIGRlIGxhIGlubm92YWNpw7NuIHkgZWwgc2VydmljaW8gYWwgY2xpZW50ZSBzZSBidXNjYSBhc2VndXJhciBsYSBjYWxpZGFkIGxhIGN1YWwgbG9zIGNsaWVudGVzIGRlIEZPUk0gZXN0w6FuIGJ1c2NhbmRvIGRlYmlkbyBhIGxhIGltcG9ydGFuY2lhIHkgZGVsaWNhZGV6YSBxdWUgdG9tYW4gbGFzIGF1dG9wYXJ0ZXMgaW50ZXJpb3JlcyB5IGVsw6ljdHJpY2FzIGRlbnRybyBkZSBsYSBpbmR1c3RyaWEgYXV0b21vdHJpei4KCkF1bnF1ZSBsb3MgcHJvZHVjdG9zIHF1ZSBvZnJlY2UgRk9STSBkZW50cm8gZGUgbGEgaW5kdXN0cmlhIGF1dG9tb3RyaXogZnVuZ2VuIHBhcmVjaWRvIGEgdW4gY29tbW9kaXR5LCBlbCBlbXBhcXVlIHNlIGxsZWdhIGEgcHJvZHVjaXIgZW4gZ3JhbmRlcyBjYW50aWRhZGVzLCBlc3RvcyBubyBlbnRyYW4gY29tbyB0YWwgZW4gbGEgZGVmaW5pY2nDs24gZGUgY29tbW9kaXR5IHlhIHF1ZSBlbiBlbCBjYXNvIGRlIEZPUk0gZW50cmEgdW5hIHBhcnRlIGNsYXZlIGxhIGN1YWwgZXMgbGEgcGVyc29uYWxpemFjacOzbi4KCiMjIyA8c3BhbiBzdHlsZSA9ImNvbG9yOmRhcmtvcmFuZ2UiPiAqUGVyc3BlY3RpdmFzIEZ1dHVyYXMqCgpBY3R1YWxtZW50ZSBGT1JNIGJ1c2NhIGVxdWlwYXIgY29uIHRlY25vbG9nw61hIHBhcmEgYXV0b21hdGl6YXIgeSBkZXNhcnJvbGxhciB0b2RvIHVuIGFtYmllbnRlIGRlIGRhdG9zIGVsIGN1YWwgbGVzIHB1ZWRhIGF5dWRhciBhIGFnaWxpemFyIHByb2Nlc29zIHkgZGFyIGNlcnRlemEgYSBsYSB0b21hIGRlIGRlY2lzaW9uZXMgZW4gYmFzZSBhIGRhdG9zLiBDb24gZXN0byBidXNjYW4gcG9kZXIgcmVhbGl6YXIgcHJvbsOzc3RpY29zIHBhcmEgYW50aWNpcGFyIGxhIGRlbWFuZGEgZGUgc3VzIGNsaWVudGVzIHkgZGl2ZXJzaWZpY2FyIGRlbnRybyBkZSBFVUEsIGVzdG8gcG9yIG1lbmNpb25hciBhbGd1bm8gZGUgbG9zIGVqZW1wbG9zLiAgRW4gY3VhbnRvIGEgdGVtYXMgZGUgY3VsdHVyYSBvcmdhbml6YWNpb25hbCBzZSBidXNjYSBtZWRpciBzaXN0ZW3DoXRpY2FtZW50ZSBkaWZlcmVudGVzIEtQScK0cy4gCgoKQWRlbcOhcyBkZSBlc3RvLCBzZSBidXNjYSBjcmVhciB1biBzZW50aWRvIGRlIHBlcnRlbmVuY2lhIHkgbGVhbHRhZCBkZSBsb3MgZW1wbGVhZG9zIGhhY2lhIGxhIGVtcHJlc2EuIEJ1c2NhbmRvIGNvbnRpbnVhciBjb24gbGEgY3VsdHVyYSBvcmdhbml6YWNpb25hbCBhY3R1YWwsIGxhIGN1YWwgZXN0w6EgZW5mb2NhZGEgZW4gbGEgaG9yaXpvbnRhbGlkYWQsIGxhIGNvbnN0cnVjY2nDs24gZGUgZXF1aXBvcyB5IGRpdmlzaW9uZXMgYXV0w7Nub21hcyBhIG5pdmVsZXMgaW5mZXJpb3JlcyBkZW50cm8gZGUgbGEgZW1wcmVzYS4gRXN0bywgY29uIGVsIGZpbiBkZSBwZXJtaXRpciB1bmEgY29tdW5pY2FjacOzbiBtw6FzIGVmZWN0aXZhIHkgZmx1aWRhIGVudHJlIGRlcGFydGFtZW50b3MuCiAKIyMjIDxzcGFuIHN0eWxlID0iY29sb3I6ZGFya29yYW5nZSI+ICpFeHBhbnNpw7NuKgoKQWN0dWFsbWVudGUgRk9STSBidXNjYSB1biBjcmVjaW1pZW50bywgZGVzZWEgY29udGludWFyIGNvbiBsYSBpbmR1c3RyaWEgZGUgYXV0b3BhcnRlcywgcG9yIGxvIHF1ZSBzdSBwcmluY2lwYWwgZW5mb3F1ZSBzZSBlbmN1ZW50cmEgZW4gY3JlY2VyIGEgbG8gbGFyZ28gZGUgbGEgbMOtbmVhIGRlIGxhIGluZHVzdHJpYSBhdXRvbW90cml6IHF1ZSBzZSBlbmN1ZW50cmEgdWJpY2FkYSBlbiBlbCB0ZXJyaXRvcmlvIG1leGljYW5vIHkgZXN0YWRvdW5pZGVuc2UuIEVzcGVjw61maWNhbWVudGUsIGJ1c2NhIGNyZWNlciBlbiBlbCBiYWrDrW8gbWV4aWNhbm8geSBlbiBTYW4gQW50b25pbyBUZXhhcyBlbiBlbCBleHRyYW5qZXJvLiBQb3Igb3RyYSBwYXJ0ZSwgYnVzY2EgZXhwbG9yYXIgb3RyYXMgaW5kdXN0cmlhcyBsYXMgY3VhbGVzIHNlIGFsaW5lZW4gYSBzdSBtaXNpw7NuLCBjb21vIGxvIHB1ZWRlIHNlciAgbGEgYWVyb2VzcGFjaWFsIHkgZGUgZXF1aXBvcyBtw6lkaWNvcy4gCgpBZGVtw6FzIGJ1c2NhIGV4cGFuZGlyIHN1cyBpbnZlcnNpb25lcyBlbiBlbCBleHRyYW5qZXJvIHRvbWFuZG8gY29tbyBvcGNpw7NuIHByaW5jaXBhbCBhIEVzdGFkb3MgVW5pZG9zLiBCdXNjYW5kbyBjcmVjZXIgYSBjdWFscXVpZXIgcGFydGUgZGUgVGV4YXMgZGViaWRvIGEgZWwgY29zdG8gZGUgb3BvcnR1bmlkYWQgcXVlIHNlIHRpZW5lLCBzaSBzZSBidXNjYSBjcmVjZXIgbcOhcyBhbGzDoSBkZSBUZXhhcyBhdW1lbnRhIGxvcyBjb3N0b3MgZGUgZmxldGVzIHkgZWwgbmVnb2NpbyBubyBzYWxlIGNvbiBidWVuIG1hcmdlbi4gRk9STSBubyBidXNjYSBzZXIgbGEgZW1wcmVzYSBtYXMgZ3JhbmRlLCBzZSBjb25jZW50cmEgZW4gbmVnb2Npb3MgZGUgUFlNRSBjb24gZ3JhbmRlcyBtYXJnZW5lcyBkZSBnYW5hbmNpYQoKIyMjIDxzcGFuIHN0eWxlID0iY29sb3I6ZGFya29yYW5nZSI+ICpDdWx0dXJhIG9yZ2FuaXphY2lvbmFsIHkgUmVjdXJzb3MgSHVtYW5vcyoKCkhveSBlbiBkw61hIGN1ZW50YW4gY29uIDEzMCBjb2xhYm9yYWRvcmVzIGRlbnRybyBkZSBsYSBlbXByZXNhLCBzaW4gZW1iYXJnbyBleGlzdGUgdW4gdGVtYSBkZSByb3RhY2nDs24gZGUgcGVyc29uYWwgcG9yIGRpdmVyc2FzIHJhem9uZXMsIHVubyBkZSBzdXMgZW5mb3F1ZXMgZXMgY3JlYXIgdW5hIGN1bHR1cmEgb3JnYW5pemFjaW9uYWwgbGEgY3VhbCByZXRlbmdhIGFsIGNhcGl0YWwgaHVtYW5vLiAKCkFjdHVhbG1lbnRlIG9mcmVjZW4gZGl2ZXJzYXMgY29tcGVuc2FjaW9uZXMgeSBiZW5lZmljaW9zIHBhcmEgaW5jaXRhciBsYSBhY3RpdmEgcGFydGljaXBhY2nDs24gZGUgc3VzIGNvbGFib3JhZG9yZXMuIFNlIGN1ZW50YW4gY29uIGJhc2VzIGRlIGRhdG9zIGVuZm9jYWRhcyBhbCB0ZW1hIGRlIGNhcGl0YWwgaHVtYW5vIGNvbiBsYXMgY3VhbGVzIHNlIGJ1c2NhbiBpZGVudGlmaWNhciBsYXMgcmF6b25lcyBkZSBsYSByb3RhY2nDs24sIHNpbiBlbWJhcmdvIGHDum4gbm8gaGFuIGxvZ3JhZG8gdmVyIHVuIGRlY3JlbWVudG8gZW4gbG9zIHBvcmNlbnRhamVzIGFudWFsZXMgZGUgcm90YWNpw7NuLgoKRk9STSBjdWVudGEgY29uIDYgcGlsYXJlcyBwcmluY2lwYWxlcywgZGVudHJvIGRlIGxhIGVtcHJlc2Egc2Ugdml2ZSB1bmEgYWN0aXR1ZCBkZSBob25lc3RpZGFkIHkgdHJhbnNwYXJlbmNpYSBkZW50cm8gZGUgdG9kb3MgbG9zIHByb2Nlc29zLCBzZSBidXNjYSBjdWlkYXIgZGV0YWxsYWRhbWVudGUgbG9zIGVzcGFjaW9zIGRlIHRyYWJham8gY29uIHBsYW5lcyBwYXJhIGltcGxlbWVudGFyIG51ZXZvcyBiYcOxb3MgZW4gZWwgcGlzby4KCiMjIyA8c3BhbiBzdHlsZSA9ImNvbG9yOmRhcmtvcmFuZ2UiPiAqKkFuw6FsaXNpcyBkZSBsYXMgw6FyZWFzIGRlIGxhIGVtcHJlc2EqKgoKCiMjIyA8c3BhbiBzdHlsZSA9ImNvbG9yOmRhcmtvcmFuZ2UiPiAqQ2FyZ2FyIGxpYnJlcmlhcyoKYGBge3J9CmxpYnJhcnkodGlkeXZlcnNlKQpsaWJyYXJ5KGdncGxvdDIpCmxpYnJhcnkoc3RyaW5ncikKbGlicmFyeShyZWFkcikKbGlicmFyeShkcGx5cikKbGlicmFyeSh0aWR5cikKbGlicmFyeShncmlkKQpsaWJyYXJ5KHBzeWNoKQpgYGAKCiMjIyA8c3BhbiBzdHlsZSA9ImNvbG9yOmRhcmtvcmFuZ2UiPiAqQ2FyZ2FyIGJhc2VzIGRlIGRhdG9zKgpgYGB7cn0KCiNmaWxlLmNob29zZSgpClZlbnRhc18xIDwtIHJlYWQuY3N2KCIvVXNlcnMvbWFyaWFuYW1hZ2FuYS9EZXNrdG9wL0V2aWRlbmNpYTEvVmVudGFzXzEuY3N2IikKCiNmaWxlLmNob29zZSgpCkJhamFzIDwtcmVhZC5jc3YoIi9Vc2Vycy9tYXJpYW5hbWFnYW5hL0Rlc2t0b3AvRXZpZGVuY2lhMS9CYWphcy5jc3YiKQoKI2ZpbGUuY2hvb3NlKCkKRkRJX2RmIDwtIHJlYWQuY3N2KCIvVXNlcnMvbWFyaWFuYW1hZ2FuYS9EZXNrdG9wL0V2aWRlbmNpYTEvRkRJX01leGljby5jc3YiKQoKCmBgYAoKCgojIyMgPHNwYW4gc3R5bGUgPSJjb2xvcjpkYXJrb3JhbmdlIj4gKkJhamFzIHBvciBQdWVzdG8geSBHZW5lcm8gKDIwMjEpIC0gR3LDoWZpY28gMSoKTG9zIGF5dWRhbnRlcyBnZW5lcmFsZXMgc29uIGxvcyBxdWUgY3VlbnRhbiBtYXlvciBiYWphIHBvciB1biBtYXJnw6luIGFsdGFtZW50ZSBjb25zaWRlcmFibGUsIGNvbW8gc2UgcHVlZGUgb2JzZXJ2YXIgZW4gbGEgZ3JhZsOtY2EgMS4gQWRlbcOhcyBkZSBlc3RvIHNlIHB1ZWRlIG9ic2VydmFyIHF1ZSBkZSBpZ3VhbCBmb3JtYSBsYSBtYXlvcsOtYSBkZSBwZXJzb25hcyBkZSBlc3TDoSBwb3NpY2nDs24gYSBsYXMgcXVlIHNlIGxlcyBkYSBkZSBiYWphIHNvbiBtdWplcmVzLiAKClBvciBsbyBxdWUgc2UgcG9kcsOtYSBwbGFudGVhciB1bmEgcHJpbWVyIGhpcMOzdGVzaXMgbGEgY3VhbCBlcyBxdWUgZXN0byBzZSBwdWVkZSBkZWJlciBhIHF1ZSBsYSBncmFuIHBhcnRlIGRlIHBlcnNvbmFzIHF1ZSBzZSBjb250cmF0YW4gc29uIHBhcmEgZWwgcHVlc3RvIGRlIGF5dWRhbnRlIGdlbmVyYWwgeSBkZSBzZXhvIGZlbWVuaW5vLCBzaW4gZW1iYXJnbyB0b2RhdsOtYSBubyBzZSBoYSByZWFsaXphZG8gZWwgYW7DoWxpc2lzIHBhcmEgY29tcHJvYmFyIGxhIGhpcMOzdGVzaXMgYW50ZXMgbWVuY2lvbmFkYS4gCgpgYGB7cn0Kb3B0aW9ucyhzY2lwZW4gPSA5OTkpIApCYWphcyRQVUVTVE8gPC0gYXMuZmFjdG9yKEJhamFzJFBVRVNUTykKCmdncGxvdChCYWphcywgYWVzKFBVRVNUTykpICsKICBnZW9tX2JhcihhZXMoZmlsbD1HRU5FUk8pKSArCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA5MCkpICsKICBsYWJzKHggPSAiUHVlc3RvIiwgeSA9ICJDYW50aWRhZCIsIHRpdGxlID0gIkJhamFzIHBvciBwdWVzdG8gIikgKwogIHRoZW1lKHBhbmVsLmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoZmlsbCA9ICJncmF5OTgiKSkKYGBgCgojIyMgPHNwYW4gc3R5bGUgPSJjb2xvcjpkYXJrb3JhbmdlIj4gKlZlbnRhcyBwb3IgTMOtbmVhIGRlIE5lZ29jaW8gKDIwMjEpIC0gR3LDoWZpY28gMioKRGVudHJvIGRlIGxhcyB2ZW50YXMgcG9yIGxpbmVhIGRlIG5lZ29jaW8sIGVzIGRlY2lyIHJldG9ybmFibGUgeSBjYXJ0w7NuLiBTZSBwdWVkZSBvYnNlcnZhciBjb21vIGxhIGxpbmVhIGRlIG5lZ29jaW9zIHF1ZSBsaWRlcsOhIGVzIGxhIGRlbCBjYXJ0w7NuLCBzaW4gZW1iYXJnbyBzZSBvYnNlcnZhIGNvbW8gbGFzIHZlbnRhcyBkZSByZXRvcm5hYmxlcyB5IGNhcnTDs24gZW4gbG9zIHByaW1lcm9zIDIgcXVhcnRpbGVzIGRlbCBhw7FvIHNvbiBhbHRhbWVudGUgc3VwZXJpb3JlcyBhbCByZXN0byBkZWwgYcOxby4gCgpgYGB7cn0KYXMuRGF0ZShWZW50YXNfMSRNZXMpCgpjb2xfcGVyIDwtIGMoImNvcmFsIiwgIm9yYW5nZSIpCgpnZ3Bsb3QoVmVudGFzXzEsIGFlcyh4ID0gTWVzLCB5ID0gVmVudGEsIGZpbGwgPSBQcm9kdWN0bykpICsKICBnZW9tX2JhcihzdGF0ID0gImlkZW50aXR5IikgKwogIGxhYnMoeCA9ICJNZXMiLCB5ID0gIlZlbnRhIiwgdGl0bGUgPSAiVmVudGFzIE1lbnN1YWxlcyBwb3IgUHJvZHVjdG8iKSArCiAgc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzID0gY29sX3BlcikgKyAKICB0aGVtZShwYW5lbC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGZpbGwgPSAiZ3JheTk4IikgKSsKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDkwLCBoanVzdCA9IDEpKQpgYGAKCiMjIyA8c3BhbiBzdHlsZSA9ImNvbG9yOmRhcmtvcmFuZ2UiPiAqSW52ZXJzacOzbiBFeHRyYW5qZXJhIERpcmVjdGEgYSB0cmF2w6lzIGRlIGxvcyBBw7FvcyAtIEdyYWbDrWNhIDMqCkxhIEludmVyc2nDs24gRXh0cmFuamVyYSAgRGlyZWN0YSBlbiBlbCBtaXNtbyBhw7FvICgyMDIxKSwgdHV2byBmdWVydGVzIGFmZWN0YWNpb25lcyBkZWJpZG8gYWwgQ09WSUQtMTksIHBvciBsbyBxdWUgcG9kcsOtYSBzZXIgdW5hIGRlIGxhcyByYXpvbmVzIHBvciBsYXMgY3VhbGVzIGVuIGxhIEdyYWbDrWNhIDIgbGFzIHZlbnRhcyBkZSBsb3MgdWx0w61tb3MgMiBjdWFydGlsZXMgZGVsIGHDsW8gaGF5YW4gY2HDrWRvIGRlIG1hbmVyYSBjb25zaWRlcmFibGUgYSBjb21wYXJhY2nDs24gZGVsIGluaWNpbyBkZWwgYcOxby4gCgpgYGB7cn0KZGZfRkRJID0gRkRJX2RmCgojU2VwYXJhciBDb2x1bW5hcwpkZl9GREkgPC0gc2VwYXJhdGUoZGZfRkRJLCBRdWFydGlsLCBpbnRvID0gYygiUXVhcnRpbCIsICJBw7FvIiksIHNlcCA9ICIgIikKCiNGREkgc3VtYWRvIHBvciBBw7FvCmHDsW9fc3VtIDwtIGRmX0ZESSAlPiUgZ3JvdXBfYnkoQcOxbykgJT4lIHN1bW1hcml6ZShzdW1hPXN1bShNaWwuTWlsbG9uZXMuZGUuRG9sYXJlcykpCgphw7FvX3N1bSRBw7FvIDwtIGFzLm51bWVyaWMoYcOxb19zdW0kQcOxbykKCmdyYWZpY29fYcOxbyA9IGdncGxvdChhw7FvX3N1bSwgYWVzKHggPSBBw7FvLCB5ID0gc3VtYSkpICsKICBnZW9tX2xpbmUoIGNvbG9yID0gIiNGNDZDMjIiKSArCiAgZ2VvbV9wb2ludChjb2xvciA9ICIjRjQ2QzIyIikgKwogIGdlb21fdGV4dChhZXMobGFiZWwgPSBzdW1hKSwgaGp1c3QgPSAtMC4yLCB2anVzdCA9IDAuNSwgY29sb3IgPSAiIzUwNTA1MCIsIHNpemUgPSA0KSArICAKICBsYWJzKHRpdGxlID0gIkludmVyc2nDs24gRXh0cmFuamVyYSBEaXJlY3RhIHBvciBBw7FvIixzdWJ0aXRsZSA9ICJNaWwgTWlsbG9uZXMgZGUgRMOzbGFyZXMiLCB4ID0gIkHDsW8iLCB5ID0gIkludmVyc2nDs24iLCBjYXB0aW9uID0gIkZ1ZW50ZTogSU5FR0kiKSArIAogIHRoZW1lX21pbmltYWwoKSArIAogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUsIGZhY2UgPSAiYm9sZCIsIGNvbG9yID0gIiM1MDUwNTAiKSwgcGFuZWwuZ3JpZC5tYWpvciA9ICAgICAgZWxlbWVudF9ibGFuaygpLCBwbG90LnN1YnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gLjUsIHNpemUgPSA3KSkgCgpncmFmaWNvX2HDsW8gKyBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gYcOxb19zdW0kQcOxbykKYGBgCgoKIyMjIDxzcGFuIHN0eWxlID0iY29sb3I6ZGFya29yYW5nZSI+ICoqRk9EQSBDcnV6YWRvKioKRWwgb2JqZXRpdm8gZGVsIGFuw6FsaXNpcyBGT0RBIHBhcmEgRk9STSBlcyBldmFsdWFyIGRlIG1hbmVyYSBpbnRlZ3JhbCBzdXMgRm9ydGFsZXphcywgT3BvcnR1bmlkYWRlcywgRGViaWxpZGFkZXMgeSBBbWVuYXphcyBjb24gZWwgZmluIGRlIG9idGVuZXIgdW5hIGNvbXByZW5zacOzbiBlc3RyYXTDqWdpY2EgZGUgc3UgcG9zaWNpw7NuIGVuIGVsIG1lcmNhZG8geSBwcm9wb3JjaW9uYXIgdW5hIGJhc2Ugc8OzbGlkYSBwYXJhIGxhIHRvbWEgZGUgZGVjaXNpb25lcyBxdWUgcG90ZW5jaWVuIHN1IGNvbXBldGl0aXZpZGFkIHkgY3JlY2ltaWVudG8gZW4gbGEgaW5kdXN0cmlhIGRlIGVtcGFxdWVzIHkgZW1iYWxhamVzLgoKIVtdKC9Vc2Vycy9tYXJpYW5hbWFnYW5hL0Rlc2t0b3AvRXZpZGVuY2lhMS8xLnBuZykKCiMjIyA8c3BhbiBzdHlsZSA9ImNvbG9yOmRhcmtvcmFuZ2UiPiAqKlBFU1RMRSoqCkVsIG9iamV0aXZvIGRlbCBhbsOhbGlzaXMgUEVTVExFIHBhcmEgRk9STSBlcyBleGFtaW5hciBsb3MgZmFjdG9yZXMgcXVlIGltcGFjdGFuIHN1IG9wZXJhY2nDs24geSBlbnRvcm5vIGVtcHJlc2FyaWFsLiBFc3RvIHBlcm1pdGlyw6EgYSBsYSBlbXByZXNhIGNvbXByZW5kZXIgbWVqb3IgZWwgY29udGV4dG8gZW4gZWwgcXVlIG9wZXJhLCBhbnRpY2lwYXIgcG9zaWJsZXMgY2FtYmlvcyB5IGFqdXN0YXIgc3UgZXN0cmF0ZWdpYSBwYXJhIG1heGltaXphciBvcG9ydHVuaWRhZGVzIHkgbWl0aWdhciByaWVzZ29zLgoKIVsgXSgvVXNlcnMvbWFyaWFuYW1hZ2FuYS9EZXNrdG9wL0V2aWRlbmNpYTEvUEVTVExFMS5wbmcpCiFbIF0oL1VzZXJzL21hcmlhbmFtYWdhbmEvRGVza3RvcC9FdmlkZW5jaWExL1BFU1RMRTIucG5nKQoK