1. Introducción al YAML.

En esta sección se presenta una breve introducción al lenguaje del YAML (Yet Another Markdown Language), con el que se configuran las características generales que se arrojarán en el documento de salida o output, una vez que el documento en formato Markdown haya sido renderizado (con el comando knitr()).
Es importante tener en cuenta que un documento en formato .Rmd (o de R Markdown) se integra por 3 partes:

  1. El texto o cuerpo del documento, que se redacta con la sintaxis de Markdown,
  2. Los trozos de código o chunks que contienen los códigos en lenguaje de R, y
  3. El YAML o los metadatos y características de formato del documento general.

En este documento se trabajarán varios elementos para configurar el YAML, los que se considera que son de interés para la elaboración de documentos y reportes de investigación especialmente dirigidos al ámbito de las Ciencias Sociales. Para ello se abordan:

  1. Características generales del YAML.
  2. Características del YAML para un documento de salida en formato .html.
  3. Características del YAML para un documento de salida en formato .pdf.
  4. Add-in de la paquetería ymlthis() para diseñar YAML.
  5. Insertar referencias bibliográficas en el texto e integración del listado bibliográfico.
  6. Uso de plantillas de artículos para la elaboración de artículos científicos con distill(), rticles() y papaja().

2. Características generales del YAML.

El YAML se usualmente se encuentra ubicado en la parte superior del documento de R Markdown, pues así lo posiciona por defecto el sistema. Este apartado es identificable ya que se encuentra separado por tres guiones en la parte superior y tres en la parte inferior.  Sin embargo, los documentos Markdown puede indentificar más características del YAML en el resto del documento si es que vuelven a encontrar una sección que se encuentre separada del resto mediante la misma instrucción de guiones superiores e inferiores. Al final, al renderizar el documento de salida, lo que ocurre es que el sistema lee como una sola sección a todas las partes enmarcadas por los guiones.
Las características generales o básicas del YAML contienen la información siguiente: título (“title”), autor (“author”), fecha (“date”) y formato de salida (“output”). La manera más común de configurar estas características es mediante la ventada de diálogo que se despliega al momento de selección la apertura de un nuevo documento de R Markdown.

Ventana de apertura de nueva hoja de R Markdown.

Ventana de apertura de nueva hoja de R Markdown.

Tras seleccionar y rellenar las opciones básicas con el texto deseado, se observará que el YAML se ubicará en la parte superior de la nueva hoja de R Markdown y, además, estará delimitada del resto del documento por los tres guiones intermedios en la parte superior e inferior. Y en su interior se encontrarán los elementos básicos de los metadatos. También es posible observar que el texto rellenado previamente aparecerá entrecomillado en el YAML.

---
title: "Diseño de YAML"
author: "Gustavo Martínez Valdes"
date: "3/3/2022"
output: html_document
---

Una vez renderizado el documento de salida se observará que, en un primer momento, el título del documento aparecerá en la parte superior del texto y se mostrarán en un tamaño de fuente mayor al resto del documento. En el caso de esta sección es posible, también, añadir un subtítulo mediante el comando subtitle: "texto del subtítulo".

---
title: "Diseño de YAML"
subtitle: "este es mi primer borrador"
---

Una vez renderizado, el texto del subtítulo aparecerá debajo del título general, pero en un tamaño de letra menor.

Por otro lado, el nombre del autor aparecerá debajo del título, y será renderizado en un tamaño de fuente menor. En dicho renglón es posible incluir a más de un autor a partir de separar los nombres mediante una coma, por ejemplo: author: "nombre apellido1, nombre apellido2".

---
author: "nombre apellido 1, nombre apellido 2"
---

En el caso del elemento de la fecha, por defecto este dato suele ser rellenado por el sistema y para ello recupera la información del sistema. En base a ello, el documento retoma la fecha en que el documento fue elaborado originalmente, pero esto puede ser modificado manualmente en la sección de YAML para ajustarlo a las necesidades del autor o, también se puede configurar para que se actualice a los momentos en que el documento de R Markdown es renderizado. En este último caso, se puede usar el comando r date: r Sys.Date().

---
date: "Sys.Date()"
---

La característica general final del YAML consiste en definir el formato de salida en que será renderizado el resto de los elementos del documento R Markdown. Los formatos básicos que se pueden seleccionar en la ventaja de diálogo (presentada arriba) son: .doc, .pdf o .html.
Esto se define en la opción output: html_document, por ejemplo para un documento en formato “.html”, output: pdf_document en el caso de uno en formato “.pdf” o output: word_document en caso de solicitar un documento de salida en formato “.doc”.
Además es posible solicitar la renderización de más de un formato de salida desde un mismo YAML, para ello es debe especificar en el argumento del output: los formatos de salida que se desean generar. Por ejemplo si se desean producir dos formatos de un mismo documento R Markdown, uno en “.html” y otro en “.pdf”, se realiza especifica lo siguiente:

---
output:
  html_document: default
  pdf_document: defaul
---

3. Características del YAML para distintos “outputs”.

Es importante tener en cuenta que las características básicas revisadas anteriormente aplican para todos los documentos R Markdown en general, independientemente del tipo de formato de salida. Sin embargo, también se debe considerar que existen características o elementos particulares según el output solicitado. Esto es, no necesariamente las características de un YAML para un formato .html aplican igualmente para un documento en formato .pdf.  Para distinguir estas diferencias es muy útil consultar la guía de referencia de R Markdown diseñada por R Studio.

3.1. Elementos básicos del YAML para el formato “.html”.

Al definir el formato de salida en formato .html, es importante tener en cuenta que este tipo de documentos no necesariamente se ajustan a la “lógica” que impone una página u hoja de impresión física. En cambio, el contenido de estos documentos es auto ajustable a la página en que se visualiza digitalmente.
Algunas de las características particulares en el diseño de un documento de salida en formato “.html” son consisten en:

  1. Incluir una tabla de contenidos (table of contents [toc]): para ello se utiliza el argumento toc: TRUE después de especificar que el documento de salida será en formato .html. Además, si se desea que el sistema asigne una numeración automática a cada una de las secciones (que fueron definidas mediante el símbolo # de la sintaxis de Markdown), se utiliza el argumento: number_sections: TRUE, de la siguiente manera:
---
title: "Diseño de YAML"
author: "Gustavo Martínez Valdes"
date: "3/3/2022"
output: 
  html_document:
    toc: TRUE
    number_sections: TRUE
---
  1. También se puede indicar si de desea que el índice elaborado previamente se ubique en un recuadro “flotante” dentro de la página .html y, así, se encuentre siempre a la vista. Para ello se utiliza el comando toc_float: TRUE:
---
title: "Diseño de YAML"
author: "Gustavo Martínez Valdes"
date: "3/3/2022"
output: 
  html_document:
    toc: TRUE
    number_sections: TRUE
    toc_float: TRUE
--- 
  1. Otra característica que puede ser modificada consiste en el tema o tipo de plantilla visual en que se muestra el contenido. Entre las opciones disponibles de “temas”, se encuentran los siguientes valores: cerulean, journal, flatly, readable, spacelab, united y cosmo.  Por ejemplo, el texto que actualmente se está visualizando utiliza la opción cosmo en el tema. Para cambiar de tema se utiliza el comando theme: journal, por ejemplo. En la página de Andrew Zieffler se puede echar un vistazo a la apariencia de los temas.
---
title: "Diseño de YAML"
author: "Gustavo Martínez Valdes"
date: "3/3/2022"
output: 
  html_document:
    toc: TRUE
    number_sections: TRUE
    toc_float: TRUE
    theme: journal
--- 
  1. También es posible definir desde un inicio el ocultamiento de los resultados de los trozos de códigos o chunks, para ello se utiliza el comando code_folding: y sus opciones de respuesta posible son: show o hide.  En el caso de usar la opción code_folding: hide, automáticamente todos los códigos se ocultarán a la vista del lector pero podrán ser desplegados si se da “click” en un pequeño botón triangular que se inserta en las página .html. Esto es útil cuando los resultados de los códigos son demasiado grandes y, entonces, dificultan la lectura de un texto.
---
title: "Diseño de YAML"
author: "Gustavo Martínez Valdes"
date: "3/3/2022"
output: 
  html_document:
    toc: TRUE
    number_sections: TRUE
    toc_float: TRUE
    theme: journal
    code_folding: hide
--- 
  1. Descargar el código fuente de .Rmd. Si se desea permitir que el código fuente de Rmd sea descargado, esto se especifica desde el YAML con el script: code_download: TRUE de la siguiente manera:
---
output:
  html_document:
    code_download: true
--- 

3.2. Elementos básicos del YAML para el formato “.pdf”.

En el caso de un documento de salida en formato .pdf, otros son los parámetros que se pueden modificar. En este caso es importante recordar que el formato de salida se asemejará a un documento escrito en páginas blancas ya sea de tamaño “carta” o “A4” u otro, según así se defina.
Aquí se debe tener en cuenta que al renderizar un documento “.Rmd” en un formato de salida en formato .pdf, este es transformado en un proceso intermedio bajo el leguanje “LaTex”, y para ello se utiliza un programa denominado Pandoc. En la página web de Pandoc se pueden revisar de manera completa las variables a incluir en este tipo de documentos.  Sin embargo, aquí solo se revisarán algunas de las características más usuales a incluir en el YAML consisten en:

  1. Tipo de documento: Aquí se puede definir, inicialmente, el tipo de documento que se elaborará, para lo que se usa el comando: documentclass:, y las opciones de respuesta disponibles son: book, article o report. Por ejemplo:
---
title: "Diseño de YAML"
author: "Gustavo Martínez Valdes"
date: "3/3/2022"
output: pdf_document
documentclass: article #aquí se define que el documento a elaborar es un "artículo".
---
  1. Organización del texto. Con esta opción se puede especificar la manera en que se presentará el texto visualmente. Para ello se utiliza el comando: classoption:, y las opciones de respuesta posibles son: twocolumn, landscape o portrait. Esta última es la opción por defecto. Por ejemplo:
---
title: "Diseño de YAML"
author: "Gustavo Martínez Valdes"
date: "3/3/2022"
output: pdf_document
documentclass: article
classoption: 
- twocolumns #aquí se define que el texto en cada cuartilla se distribuya en dos columnas.
---
  1. Tamaño de la hoja de impresión. A partir del comando papersize:, entre cuyas opciones de respuesta se encuentran a4 o letter, se define el tamaño de la hoja de impresión. Por ejemplo:
---
title: "Diseño de YAML"
author: "Gustavo Martínez Valdes"
date: "3/3/2022"
output: pdf_document
documentclass: article
classoption: 
- twocolumns
papersize: letter  #aquí se define el tamaño de la hoja de impresión sea de tamaño "carta".
---
  1. Interlineado. Mediante el comando linestretch:, y cuyos valores son un vector numérico, se define el tamaño del salto de renglón dentro del documento. Por ejemplo:
---
title: "Diseño de YAML"
author: "Gustavo Martínez Valdes"
date: "3/3/2022"
output: pdf_document
documentclass: article
classoption: 
- twocolumns
papersize: letter
linestretch: 1.5  #Aquí se define que el interlineado o el salto entre renglones sea de 1.5.
---
  1. Tamaño de fuente. El tamaño de la fuente del texto en general puede ser modificada utilizando el comando fontsize:, y cuyos valores se definen en unidades de “puntos”, por ejemplo: 10pt, 11pt o 12pt.
---
title: "Diseño de YAML"
author: "Gustavo Martínez Valdes"
date: "3/3/2022"
output: pdf_document
documentclass: article
classoption: 
- twocolumns
papersize: letter
linestretch: 1.5
fontsize: 12pt  #Aquí se define el tamaño de la fuente a uno de 12 puntos.
---
  1. Márgenes o geometría del texto dentro del documento. Mediante el comando geometry: se pueden definir el tamaño de los márgenes del texto dentro del documento.  Los valores de respuesta de este comando consisten en un vector numérico, a la vez que se puede definir manualmente la unidad métrica en que se desea especificar su tamaño, como pueden ser in (pulgadas), cm(centímetros) o mm (milímetros).  Asimismo se pueden utilizar los argumentos top=, bottom=, left= y right= para especificar los márgenes deseados. Por ejemplo:
---
title: "Diseño de YAML"
author: "Gustavo Martínez Valdes"
date: "3/3/2022"
output: pdf_document
documentclass: article
classoption: 
- twocolumns
papersize: letter
linestretch: 1.5
fontsize: 12pt
geometry:
- top=3cm  #Se define un márgen de 3cm en la parte superior del documento.
- left=2.5cm #Se define un márgen de 2.5cm en la parte izquierda del documento.
---
  1. Índice o tabla de contenido. En un documento en formato .pdf también es posible incluir un listado o tabla de contenido así como la opción para solicitar que las secciones reconocidas en la tabla de contenido sean numeradas automáticamente.  Para ello se utiliza el comando toc: TRUE así como number_sections: TRUE, por ejemplo:
---
title: "Diseño de YAML"
author: "Gustavo Martínez Valdes"
date: "3/3/2022"
output: pdf_document
documentclass: article
classoption: 
- twocolumns
papersize: letter
linestretch: 1.5
fontsize: 12pt
geometry:
- top=3cm
- left=2.5cm
toc: TRUE
number_sections: TRUE
---
  1. Tipo de fuente. También es posible modificar el tipo de fuente tipográfica de los documentos de salida. Para ello se utiliza el comando mainfont:, y como respuesta se debe especificar el nombre a alguna de las tipografías pre cargadas en la computadora en el listado tipográfico del disco duro.  Se debe tener en cuenta que para que este comando aplique la solicitud de un tipo de fuente deseado, se debe acompañar de un comando adicional que consiste en definir el motor para transformar el documento “.Rmd” a formato “LaTex” y, posteriormente, a uno de tipo “.pdf”. Este comando es latex_engine:, y el motor de transformación debe ser la opción xelatex.  De manera que la solicitud para configurar este cambio de fuente es de la siguiente forma:
---
title: "Diseño de YAML"
author: "Gustavo Martínez Valdes"
date: "3/3/2022"
output: 
  pdf_document:
    latex_engine: xelatex  #Aquí se define el motor de renderización a LaTex
documentclass: article
classoption: 
- twocolumns
papersize: letter
linestretch: 1.5
fontsize: 12pt
geometry:
- top=3cm
- left=2.5cm
toc: TRUE
number_sections: TRUE
mainfont: Arial  #Aquí se solicita el cambio del tipo de fuente, que previamente está cargada dentro del listado tipográfico de la computadora de trabajo.
---

4. Paquetería ymlthis() para diseñar YAML y su add-in.

La utilidad del YAML, además de definir los metadados del documento elaborado, así como configurar desde un inicio las características generales del documento, consiste en que una vez que se cuenta con una estructura preferida por el autor, esta puede ser copiada para diseñar otros documentos posteriores. Sin embargo también puede ser engorroso recordar la mayoría de los comandos dentro de un YAML, especialmente al comenzar a conocer y trabajar con el formato “.Rmd”.
Pero existe, adicionalmente, la paquetería ymlthis() que permite manipular de manera más “sencilla” las características del YAML, tomando en consideración el tipo de documento de salida deseado.
Primero se debe instalar dicha paquetería:

install.packages("ymlthis")

Tras activar dicha paquetería con library(ymlthis), el comando básico es yml(). Una vez que se “corre” dicho código, este arroja como resultado el contenido básico de un YAML.

library(ymlthis)
yml()
## ---
## author: Gustavo
## date: '`r format(Sys.Date())`'
## ---

Asimismo, el resultado del YAML a generar se puede adicionar con otros argumentos, como: yml_author(), yml_date(), o yml_output(), además de vincularlos mediante el uso de pipes (%>%), por ejemplo.

yml() %>% 
  yml_author(c("autor1", "autor2"), affiliation = "institución") %>% 
  yml_date(lubridate::today()) %>% 
  yml_output(
    word_document(keep_md = TRUE), 
    bookdown::html_document2()
  ) 
## ---
## author:
## - name: autor1
##   affiliation: institución
## - name: autor2
##   affiliation: institución
## date: '2022-03-08'
## output:
##   word_document:
##     keep_md: true
##   bookdown::html_document2: default
## ---

4.1. Add-in de ymlthis().

Adicionalmente la paquetería de ymlthis() cuenta con una “add-in”, que se traduce en una ventana emergente que permite, a su vez, apoyar al usuario en la generación del YAML sin la necesidad de escribir código en un “chunk”.
Para activar dicho “add-in” se debe seguir la ruta “Tools” > “addins” > “browse addins” > “ymlthis”. En caso de no usar el mouse para seguir dicha ruta, el comando para activar el “add-in” es ymlthis:::launch_yaml_addin().

ymlthis:::launch_yaml_addin()

Una vez activado el “add-in”, después aparecerá una ventana emergente parecida a la siguiente:

Ventana del 'add-in' de 'ymlthis()'.

Ventana del ‘add-in’ de ‘ymlthis()’.

En dicha ventana emergente, el autor tendrá la oportunidad de rellenar diversas opciones, tanto referentes al tipo de documento de salida (.pdf, .html, .doc u otro), así como las características particulares. Y el resultado generado se traduce en una esquela del YAML configurado a partir de las necesidades del autor.

5. Referencias y listado bibliográfico basado en Zotero.

Aquí se revisará el proceso de inserción de citaciones apoyándose en el gestor de referencias bibliográficas de Zotero, que es un software de código abierto.

5.1. Preparación de la base de datos de referencias bibliográficas (“.bib”).

Inicialmente se requiere contar con un archivo con extensión .bib en el que se encuentren enlistadas todas las referencias bibliográficas que se utilizarán en el documento.
Este tipo de archivos consiste en un listado de las referencias bibliográficas que se utilizarán como recursos de un documento, donde cada una de dichas referencias son archivadas bajo un formato especial denominado BibTex, con la siguiente estructura por ejemplo:

@Key{R-base,
  title = {R: A Language and Environment for Statistical
           Computing},
  author = {{R Core Team}},
  organization = {R Foundation for Statistical Computing},
  address = {Vienna, Austria},
  year = {2019},
  url = {https://www.R-project.org},
}

Manualmente se puede crear un listado de todas las obras a referenciar en un archivo de texto plano, el que, finalmente, deberá ser guardado con la extensión .bib, y que será necesario para el proceso de insertar citaciones en R Markdown, así como para generar el listado bibliográfico a incluir en el documento de salida.
Crear dicho archivo con extensión .bib es un proceso engorroso, actualmente el gestor bibliográfico de Zotero también permite generar dicho archivo de manera más sencilla.
Desde Zotero se pueden seleccionar las referencias que deberán ser exportadas en formato .bib (apoyado en el plug-in de Better Bib Tex). Esto se traduce en un nuevo archivo con extensión .bib.

Para ello, primero se debe seleccionar la colección de obras seleccionadas en Zotero.

Expotar la colección deseada en Zotero.

Expotar la colección deseada en Zotero.

Posteriormente se debe seleccionar el formato de BetterBibTex para su exportación, así como también se recomienda seleccionar la casilla que permite mantener actualizada dicha colección exportada.

Selección del formato BetterBibTex actualizado.

Selección del formato BetterBibTex actualizado.

Al crear el archivo, es importante seleccionar la opción de Zotero que permite actualizar constantemente al archivo .bib. Esto permitirá incluir en éste último las referencias que sean guardadas en Zotero posteriormente a la creación del archivo .bib.
Una vez creado el archivo de las referencias bibliográficas, debe guardarse en la misma carpeta en la que se encuentra el documento .Rmd.

Selección de la carpeta para guardar el archivo con extensión '.bib'.

Selección de la carpeta para guardar el archivo con extensión ‘.bib’.

Posteriormente, el archivo .bib debe ser llamado desde el YAML de R Markdown para que esté disponible y se puedan utilizar las referencias contenidas. El script dentro del YAML para llamar al listado de referencias es bibliography: nombre.bib. Por ejemplo:

---
output: html_document
bibliography: metodologia.bib  
---

5.2. Definición del estilo de citación (archivo “.csl”).

Para darle formato a las referencias insertadas en el documento requiere utilizar un archivo con extensión .csl, que contiene la información necesaria para cada uno de los estilos de citación.
Estos archvios .csl pueden ser creados por el autor o también pueden ser importados. Ésta última opción es la más “fácil” de llevar a cabo.
Zotero cuenta con un repositorio de archivos .csl que se pueden importar. Este se encuentra en https://www.zotero.org/styles.
Por ejemplo, en el caso de desear trabajar con el estilo de la American Psychology Association (APA), se debe importar el archivo apa.csl.
Es importante que el archivo se encuentre ubicado en la misma carpeta donde se encuentra guardado el documento .Rmd, Posteriormente, el archivo apa.csl se manda a llamar desde el YAML con el script csl: apa.csl.

---
output: html_document
bibliography: references.bib
csl: apa.csl
---

Una vez que se cuenta con el archivo en formato .bib con el listado de las obras a referencias, así como con el archivo en formato .csl, que contiene la estructura del estilo de citación a utilizar, ya se está listo para comenzar la inserción de referencias bibliográficas así como para integrar el listado bibliográficos en el output.

5.3. Inserción de referencias en el texto.

Para insertar una referencia se utiliza el símbolo @key y se escribe el nombre que el sistema le asignó a cada referencia. El @key se refiere al nombre que le asigna automáticamente el listado de BibTex.
Existen varias maneras de insertar una referencia bibliográfica en el texto:

  1. Insertar una sola obra en una referencia. En caso de insertar una referencia con un solo autor, entre paréntesis: [@key]

  2. Insertar más de una obra en una referencia. En caso de insertar una referencia con más de un autor, entre paréntesis: [@key1; @key2]

  3. Insertar nombre de autor en texto y año entre paréntesis. En caso de insertar el apellido del autor en el texto, el año de la obra aparecerá entre paréntesis: @key

  4. Insertar año entre paréntesis y excluir nombre de autor. En caso de insertar el año de la obra en la referencia entre paréntesis y excluir el nombre del autor: [-@key]

  5. Insertar una obra y definir las páginas consultadas. [@key, pág. 123]

5.4. Incluir sección del listado bibliográfico

Tras insertar las referencias, R Markdown construye el listado bibliográfico ordenado alfabéticamente. Sin embargo se requiere crear una sección específica para ello pues el programa no distingue por sí solo el espacio en el documento para incluirlo.
Para ello es necesario incluir un subapartado (mediante el uso de ##) al final del documento, partir de añadir los signos de numerales pertinentes así como el título “bibliográfía” o correspondiente. Y dicha sección debe estar vacía. De esta manera R Markdown identificará que ese es el espacio donde incluirá la información del listado bibliográfico de la obra.

Final del texto.

## Bibliografía
(espacio vacío)

6. Plantillas de artículos científicos con distill(), rticles() y papaja().

Con el fortalecimiento del criterio de “ciencia abierta” y el aumento de recursos tecnológicos para compartir los elementos de la investigación científica, hoy en día se cuenta con la posibilidad de hacer públicos ya no solo los resultados de un análisis, sino también los datos utilizados así como los códigos de R elaborados y, además, el contenido de los textos. En este sentido, el formato de .Rmd se ha vuelto muy útil para permitir que todos estos elementos de un documento de análisis de datos se pueda compartir de manera abierta al público.
Para ello se cuenta, además, con varias librerías que permiten sistematizar las estructuras de los documentos de .Rmd, en donde un autor solo debe ajustar su contenido a dichas plantillas y, de esa manera, su preocupación se centre en la redacción del texto y en la elaboración de códigos y resultados del análisis de los datos.
Entre las librerías que se revisarán a continuación se encuentran las de ’distill(),rticlesypapaja()`. Las primeras dos librerías se pueden instalar desde el CRAN de R y R Studio:

install.packages("distill")
install.packages("rticles")

En el caso de la librería de papaja(), su instalación se debe realizar directamente desde el repositorio del diseñador. Este proceso requiere apoyarse en otra paquetería denominada devtools().
En caso de no contar previamente con devtools(), una manera para instalarlo es:

if(!"devtools" %in% rownames(installed.packages())) install.packages("devtools")

Posteriormente se puede instalar papaja() desde GitHub de la siguiente manera:

devtools::install_github("crsh/papaja")

6.1. Documentos en formato APA con papaja().

La librería papaja() fue diseñada para facilitar el diseño de documentos de salida bajo el formato establecido por la American Psychology Association (APA), y actualmente la paquetería toma en consideración las guías establecidas en la 6a edición.
En la página web de papaja() se encuentra, además, un conjunto de comando que, a su vez, permiten ajustar la manera de insertar tablas y gráficos, así como la presentación de los resultados de los análisis de datos.
Para comenzar a utilizar la plantilla de texto en formato APA 6a edición en base a papaja(), esto se define al momento de abrir un nuevo documento en formato .Rmd. En la ventana emergente para definir al nuevo archivo de .Rmd se selecciona la opción de plantillas o From Template, y se localiza el nombre de la plantilla APA article (6th edition) {papaja}.

Selección de la plantilla de un documento en formato APA 6a. edición con `papaja()`.

Selección de la plantilla de un documento en formato APA 6a. edición con papaja().

El resultado que arroja esta selección consiste en la apertura de un documento nuevo de .Rmd con una estructura particular en el YAML así como en torno a la estructuración del contenido del texto así como de los “chunks”.
Por ejemplo, la estructura del YAML es la siguiente:

---
title             : "The title"
shorttitle        : "Title"

author: 
  - name          : "First Author"
    affiliation   : "1"
    corresponding : yes    # Define only one corresponding author
    address       : "Postal address"
    email         : "my@email.com"
    role:         # Contributorship roles (e.g., CRediT, https://casrai.org/credit/)
      - Conceptualization
      - Writing - Original Draft Preparation
      - Writing - Review & Editing
  - name          : "Ernst-August Doelle"
    affiliation   : "1,2"
    role:
      - Writing - Review & Editing

affiliation:
  - id            : "1"
    institution   : "Wilhelm-Wundt-University"
  - id            : "2"
    institution   : "Konstanz Business School"

authornote: |
  Add complete departmental affiliations for each author here. Each new line herein must be indented, like this line.

  Enter author note here.

abstract: |
  One or two sentences providing a **basic introduction** to the field,  comprehensible to a scientist in any discipline.
  
  Two to three sentences of **more detailed background**, comprehensible  to scientists in related disciplines.
  
  One sentence clearly stating the **general problem** being addressed by  this particular study.
  
  One sentence summarizing the main result (with the words "**here we show**" or their equivalent).
  
  Two or three sentences explaining what the **main result** reveals in direct comparison to what was thought to be the case previously, or how the  main result adds to previous knowledge.
  
  One or two sentences to put the results into a more **general context**.
  
  Two or three sentences to provide a **broader perspective**, readily comprehensible to a scientist in any discipline.
  
  <!-- https://tinyurl.com/ybremelq -->
  
keywords          : "keywords"
wordcount         : "X"

bibliography      : ["r-references.bib"]

floatsintext      : no
figurelist        : no
tablelist         : no
footnotelist      : no
linenumbers       : yes
mask              : no
draft             : no

documentclass     : "apa6"
classoption       : "man"
output            : papaja::apa6_pdf
---

6.2. Artículos científicos con distill().

La paquetería distill() consiste en una plantilla básica para la construcción de un artículo científico. Este formato permite integrar tanto texto, signos matemáticos desde “LaTex”, citaciones y pies de página, gráficos y tablas de contenido, entre otros elementos que les son característicos. En la página web de distill() se pueden revisar con detalles todos los elementos que se pueden configurar.
La manera de abrir una plantilla desde distill() consiste en seleccionar este tipo de documento desde la ventana emergente donde se abren los nuevos documentos .Rmd, de la siguiente manera:

Selección de la plantilla de un artículo científico desde `distill()`.

Selección de la plantilla de un artículo científico desde distill().

A partir de esta platilla de artículo científico, se abre una nueva ventana de un archivo en formato .Rmd que estructura tanto el contenido del texto, así como de los “chunks”. Mientras que la estructura del YAML será la siguiente:

---
title: "Distill for R Markdown"
description: | 
  Scientific and technical writing, native to the web
date: May 4, 2018
author:
  - first_name: "Yihui"
    last_name: "Xie"
    url: https://github.com/yihui
    affiliation: RStudio
    affiliation_url: https://www.rstudio.com
    orcid_id: 0000-0003-0645-5666
  - name: "JJ Allaire"
    url: https://github.com/jjallaire
    affiliation: RStudio
    affiliation_url: https://www.rstudio.com
  - name: "Rich Iannone"
    url: https://github.com/rich-iannone
    affiliation: RStudio
    affiliation_url: https://www.rstudio.com
bibliography: biblio.bib
output: distill::distill_article
---

6.3. Artículos científicos para diversas editoriales desde rticles().

Finalmente, la paquetería rticles() se ha vuelto muy útil para la producción de artículos que se ajusten directamente a las necesidades de diversas editoriales, como por ejemplo: Elsevier, Oxford University Press, PLOS, SAGE, Taylos & Francis, entre otras publicaciones específicas. De manera más detallada se puede revisar este listado en la página de la librería.
La manera para revisar y seleccionar la plantilla del artículo a construir es mediante la apertura de la ventana emergente para solicitar un nuevo archivo en formato .Rmd desde R Studio. Tras seleccionar la apertura de una plantilla (“From Template”), se puede observar el listado de todos los formatos de artículos incluidos en la librería rticles(), de la siguiente forma:

Selección de la plantilla de un artículo científico desde `rticles()`.

Selección de la plantilla de un artículo científico desde rticles().

El resultado de la selección de la plantilla será variado según el tipo de artículo solicitado, y de esa manera variará, por ejemplo, la estructura del YAML. (por ello ahora no se presenta un resultado particular)

LS0tCnRpdGxlOiAiRGlzZcOxbyBkZSBZQU1MIgphdXRob3I6ICJHdXN0YXZvIE1hcnTDrW5leiBWYWxkZXMiCmRhdGU6ICIzLzMvMjAyMiIKb3V0cHV0OiAKICBodG1sX2RvY3VtZW50OgogICAgdG9jOiBUUlVFCiAgICB0b2NfZmxvYXQ6IFRSVUUKICAgIHRoZW1lOiBjb3NtbwogICAgY29kZV9mb2xkaW5nOiBzaG93CiAgICBjb2RlX2Rvd25sb2FkOiBUUlVFCi0tLQoKYGBge3Igc2V0dXAsIGluY2x1ZGU9RkFMU0V9CmtuaXRyOjpvcHRzX2NodW5rJHNldChlY2hvID0gVFJVRSkKYGBgCgojIyAxLiBJbnRyb2R1Y2Npw7NuIGFsIFlBTUwuCgpFbiBlc3RhIHNlY2Npw7NuIHNlIHByZXNlbnRhIHVuYSBicmV2ZSBpbnRyb2R1Y2Npw7NuIGFsIGxlbmd1YWplIGRlbCAqKllBTUwqKiAoWWV0IEFub3RoZXIgTWFya2Rvd24gTGFuZ3VhZ2UpLCBjb24gZWwgcXVlIHNlIGNvbmZpZ3VyYW4gbGFzIGNhcmFjdGVyw61zdGljYXMgZ2VuZXJhbGVzIHF1ZSBzZSBhcnJvamFyw6FuIGVuIGVsIGRvY3VtZW50byBkZSBzYWxpZGEgbyAqKm91dHB1dCoqLCB1bmEgdmV6IHF1ZSBlbCBkb2N1bWVudG8gZW4gZm9ybWF0byAqKk1hcmtkb3duKiogaGF5YSBzaWRvICpyZW5kZXJpemFkbyogKGNvbiBlbCBjb21hbmRvIGBrbml0cigpYCkuXApFcyBpbXBvcnRhbnRlIHRlbmVyIGVuIGN1ZW50YSBxdWUgdW4gZG9jdW1lbnRvIGVuIGZvcm1hdG8gKiouUm1kKiogKG8gZGUgKipSIE1hcmtkb3duKiopIHNlIGludGVncmEgcG9yIDMgcGFydGVzOgoKMS4gRWwgdGV4dG8gbyBjdWVycG8gZGVsIGRvY3VtZW50bywgcXVlIHNlIHJlZGFjdGEgY29uIGxhIHNpbnRheGlzIGRlICoqTWFya2Rvd24qKiwKMi4gTG9zIHRyb3pvcyBkZSBjw7NkaWdvIG8gKipjaHVua3MqKiBxdWUgY29udGllbmVuIGxvcyBjw7NkaWdvcyBlbiBsZW5ndWFqZSBkZSBSLCB5CjMuIEVsICoqWUFNTCoqIG8gbG9zIG1ldGFkYXRvcyB5IGNhcmFjdGVyw61zdGljYXMgZGUgZm9ybWF0byBkZWwgZG9jdW1lbnRvIGdlbmVyYWwuCgpFbiBlc3RlIGRvY3VtZW50byBzZSB0cmFiYWphcsOhbiB2YXJpb3MgZWxlbWVudG9zIHBhcmEgY29uZmlndXJhciBlbCAqKllBTUwqKiwgbG9zIHF1ZSBzZSBjb25zaWRlcmEgcXVlIHNvbiBkZSBpbnRlcsOpcyBwYXJhIGxhIGVsYWJvcmFjacOzbiBkZSBkb2N1bWVudG9zIHkgcmVwb3J0ZXMgZGUgaW52ZXN0aWdhY2nDs24gZXNwZWNpYWxtZW50ZSBkaXJpZ2lkb3MgYWwgw6FtYml0byBkZSBsYXMgKipDaWVuY2lhcyBTb2NpYWxlcyoqLiBQYXJhIGVsbG8gc2UgYWJvcmRhbjoKCjEuIENhcmFjdGVyw61zdGljYXMgZ2VuZXJhbGVzIGRlbCBZQU1MLgoyLiBDYXJhY3RlcsOtc3RpY2FzIGRlbCBZQU1MIHBhcmEgdW4gZG9jdW1lbnRvIGRlIHNhbGlkYSBlbiBmb3JtYXRvICoqLmh0bWwqKi4KMy4gQ2FyYWN0ZXLDrXN0aWNhcyBkZWwgWUFNTCBwYXJhIHVuIGRvY3VtZW50byBkZSBzYWxpZGEgZW4gZm9ybWF0byAqKi5wZGYqKi4KNC4gQWRkLWluIGRlIGxhIHBhcXVldGVyw61hIGB5bWx0aGlzKClgIHBhcmEgZGlzZcOxYXIgKllBTUwqLgo1LiBJbnNlcnRhciByZWZlcmVuY2lhcyBiaWJsaW9ncsOhZmljYXMgZW4gZWwgdGV4dG8gZSBpbnRlZ3JhY2nDs24gZGVsIGxpc3RhZG8gYmlibGlvZ3LDoWZpY28uCjYuIFVzbyBkZSAqcGxhbnRpbGxhcyogZGUgYXJ0w61jdWxvcyBwYXJhIGxhIGVsYWJvcmFjacOzbiBkZSBhcnTDrWN1bG9zIGNpZW50w61maWNvcyBjb24gYGRpc3RpbGwoKWAsIGBydGljbGVzKClgIHkgYHBhcGFqYSgpYC4KCgojIyAyLiBDYXJhY3RlcsOtc3RpY2FzIGdlbmVyYWxlcyBkZWwgKipZQU1MKiouCgpFbCBZQU1MIHNlIHVzdWFsbWVudGUgc2UgZW5jdWVudHJhIHViaWNhZG8gZW4gbGEgcGFydGUgc3VwZXJpb3IgZGVsIGRvY3VtZW50byBkZSBSIE1hcmtkb3duLCBwdWVzIGFzw60gbG8gcG9zaWNpb25hIHBvciBkZWZlY3RvIGVsIHNpc3RlbWEuIEVzdGUgYXBhcnRhZG8gZXMgaWRlbnRpZmljYWJsZSB5YSBxdWUgc2UgZW5jdWVudHJhIHNlcGFyYWRvIHBvciB0cmVzIGd1aW9uZXMgZW4gbGEgcGFydGUgc3VwZXJpb3IgeSB0cmVzIGVuIGxhIHBhcnRlIGluZmVyaW9yLlwgClNpbiBlbWJhcmdvLCBsb3MgZG9jdW1lbnRvcyBNYXJrZG93biBwdWVkZSBpbmRlbnRpZmljYXIgbcOhcyBjYXJhY3RlcsOtc3RpY2FzIGRlbCBZQU1MIGVuIGVsIHJlc3RvIGRlbCBkb2N1bWVudG8gc2kgZXMgcXVlIHZ1ZWx2ZW4gYSBlbmNvbnRyYXIgdW5hIHNlY2Npw7NuIHF1ZSBzZSBlbmN1ZW50cmUgc2VwYXJhZGEgZGVsIHJlc3RvIG1lZGlhbnRlIGxhIG1pc21hIGluc3RydWNjacOzbiBkZSBndWlvbmVzIHN1cGVyaW9yZXMgZSBpbmZlcmlvcmVzLiBBbCBmaW5hbCwgYWwgcmVuZGVyaXphciBlbCBkb2N1bWVudG8gZGUgc2FsaWRhLCBsbyBxdWUgb2N1cnJlIGVzIHF1ZSBlbCBzaXN0ZW1hIGxlZSBjb21vIHVuYSBzb2xhIHNlY2Npw7NuIGEgdG9kYXMgbGFzIHBhcnRlcyBlbm1hcmNhZGFzIHBvciBsb3MgZ3Vpb25lcy5cCkxhcyBjYXJhY3RlcsOtc3RpY2FzIGdlbmVyYWxlcyBvIGLDoXNpY2FzIGRlbCBZQU1MIGNvbnRpZW5lbiBsYSBpbmZvcm1hY2nDs24gc2lndWllbnRlOiB0w610dWxvICjigJx0aXRsZeKAnSksIGF1dG9yICjigJxhdXRob3LigJ0pLCBmZWNoYSAoImRhdGUiKSB5IGZvcm1hdG8gZGUgc2FsaWRhICjigJxvdXRwdXTigJ0pLiBMYSBtYW5lcmEgbcOhcyBjb23Dum4gZGUgY29uZmlndXJhciBlc3RhcyBjYXJhY3RlcsOtc3RpY2FzIGVzIG1lZGlhbnRlIGxhIHZlbnRhZGEgZGUgZGnDoWxvZ28gcXVlIHNlIGRlc3BsaWVnYSBhbCBtb21lbnRvIGRlIHNlbGVjY2nDs24gbGEgYXBlcnR1cmEgZGUgdW4gbnVldm8gZG9jdW1lbnRvIGRlIFIgTWFya2Rvd24uXAoKYGBge3IsIGVjaG89RkFMU0UsIG91dC53aWR0aD0iOTAlIiwgZmlnLmNhcD0iVmVudGFuYSBkZSBhcGVydHVyYSBkZSBudWV2YSBob2phIGRlIFIgTWFya2Rvd24uIn0Ka25pdHI6OmluY2x1ZGVfZ3JhcGhpY3MoInZlbnRhbmFfY29uZmlnX2Jhc2ljYV95YW1sLnBuZyIpCmBgYAoKVHJhcyBzZWxlY2Npb25hciB5IHJlbGxlbmFyIGxhcyBvcGNpb25lcyBiw6FzaWNhcyBjb24gZWwgdGV4dG8gZGVzZWFkbywgc2Ugb2JzZXJ2YXLDoSBxdWUgZWwgWUFNTCBzZSB1YmljYXLDoSBlbiBsYSBwYXJ0ZSBzdXBlcmlvciBkZSBsYSBudWV2YSBob2phIGRlIFIgTWFya2Rvd24geSwgYWRlbcOhcywgZXN0YXLDoSBkZWxpbWl0YWRhIGRlbCByZXN0byBkZWwgZG9jdW1lbnRvIHBvciBsb3MgdHJlcyBndWlvbmVzIGludGVybWVkaW9zIGVuIGxhIHBhcnRlIHN1cGVyaW9yIGUgaW5mZXJpb3IuIFkgZW4gc3UgaW50ZXJpb3Igc2UgZW5jb250cmFyw6FuIGxvcyBlbGVtZW50b3MgYsOhc2ljb3MgZGUgbG9zIG1ldGFkYXRvcy4gVGFtYmnDqW4gZXMgcG9zaWJsZSBvYnNlcnZhciBxdWUgZWwgdGV4dG8gcmVsbGVuYWRvIHByZXZpYW1lbnRlIGFwYXJlY2Vyw6EgZW50cmVjb21pbGxhZG8gZW4gZWwgWUFNTC5cCmBgYAotLS0KdGl0bGU6ICJEaXNlw7FvIGRlIFlBTUwiCmF1dGhvcjogIkd1c3Rhdm8gTWFydMOtbmV6IFZhbGRlcyIKZGF0ZTogIjMvMy8yMDIyIgpvdXRwdXQ6IGh0bWxfZG9jdW1lbnQKLS0tCmBgYAoKVW5hIHZleiAqcmVuZGVyaXphZG8qIGVsIGRvY3VtZW50byBkZSBzYWxpZGEgc2Ugb2JzZXJ2YXLDoSBxdWUsIGVuIHVuIHByaW1lciBtb21lbnRvLCBlbCAqKnTDrXR1bG8qKiBkZWwgZG9jdW1lbnRvIGFwYXJlY2Vyw6EgZW4gbGEgcGFydGUgc3VwZXJpb3IgZGVsIHRleHRvIHkgc2UgbW9zdHJhcsOhbiBlbiB1biB0YW1hw7FvIGRlIGZ1ZW50ZSBtYXlvciBhbCByZXN0byBkZWwgZG9jdW1lbnRvLiBFbiBlbCBjYXNvIGRlIGVzdGEgc2VjY2nDs24gZXMgcG9zaWJsZSwgdGFtYmnDqW4sIGHDsWFkaXIgdW4gKipzdWJ0w610dWxvKiogbWVkaWFudGUgZWwgY29tYW5kbyBgc3VidGl0bGU6ICJ0ZXh0byBkZWwgc3VidMOtdHVsbyJgLiAKCmBgYAotLS0KdGl0bGU6ICJEaXNlw7FvIGRlIFlBTUwiCnN1YnRpdGxlOiAiZXN0ZSBlcyBtaSBwcmltZXIgYm9ycmFkb3IiCi0tLQpgYGAKClVuYSB2ZXogcmVuZGVyaXphZG8sIGVsIHRleHRvIGRlbCBzdWJ0w610dWxvIGFwYXJlY2Vyw6EgZGViYWpvIGRlbCB0w610dWxvIGdlbmVyYWwsIHBlcm8gZW4gdW4gdGFtYcOxbyBkZSBsZXRyYSBtZW5vci5cCgpQb3Igb3RybyBsYWRvLCBlbCBub21icmUgZGVsICoqYXV0b3IqKiBhcGFyZWNlcsOhIGRlYmFqbyBkZWwgKnTDrXR1bG8qLCB5IHNlcsOhIHJlbmRlcml6YWRvIGVuIHVuIHRhbWHDsW8gZGUgZnVlbnRlIG1lbm9yLiBFbiBkaWNobyByZW5nbMOzbiBlcyBwb3NpYmxlIGluY2x1aXIgYSBtw6FzIGRlIHVuIGF1dG9yIGEgcGFydGlyIGRlIHNlcGFyYXIgbG9zIG5vbWJyZXMgbWVkaWFudGUgdW5hIGNvbWEsIHBvciBlamVtcGxvOiBgYXV0aG9yOiAibm9tYnJlIGFwZWxsaWRvMSwgbm9tYnJlIGFwZWxsaWRvMiJgLlwKCmBgYAotLS0KYXV0aG9yOiAibm9tYnJlIGFwZWxsaWRvIDEsIG5vbWJyZSBhcGVsbGlkbyAyIgotLS0KYGBgCgpFbiBlbCBjYXNvIGRlbCBlbGVtZW50byBkZSBsYSAqKmZlY2hhKiosIHBvciBkZWZlY3RvIGVzdGUgZGF0byBzdWVsZSBzZXIgcmVsbGVuYWRvIHBvciBlbCBzaXN0ZW1hIHkgcGFyYSBlbGxvIHJlY3VwZXJhIGxhIGluZm9ybWFjacOzbiBkZWwgc2lzdGVtYS4gRW4gYmFzZSBhIGVsbG8sIGVsIGRvY3VtZW50byByZXRvbWEgbGEgZmVjaGEgZW4gcXVlIGVsIGRvY3VtZW50byBmdWUgZWxhYm9yYWRvIG9yaWdpbmFsbWVudGUsIHBlcm8gZXN0byBwdWVkZSBzZXIgbW9kaWZpY2FkbyBtYW51YWxtZW50ZSBlbiBsYSBzZWNjacOzbiBkZSBZQU1MIHBhcmEgYWp1c3RhcmxvIGEgbGFzIG5lY2VzaWRhZGVzIGRlbCBhdXRvciBvLCB0YW1iacOpbiBzZSBwdWVkZSBjb25maWd1cmFyIHBhcmEgcXVlIHNlIGFjdHVhbGljZSBhIGxvcyBtb21lbnRvcyBlbiBxdWUgZWwgZG9jdW1lbnRvIGRlIFIgTWFya2Rvd24gZXMgcmVuZGVyaXphZG8uIEVuIGVzdGUgw7psdGltbyBjYXNvLCBzZSBwdWVkZSB1c2FyIGVsIGNvbWFuZG8gYHIga25pdHI6OmlubGluZV9leHByKCJkYXRlOiByIFN5cy5EYXRlKCkiKWAuXAoKYGBgCi0tLQpkYXRlOiAiU3lzLkRhdGUoKSIKLS0tCmBgYAoKTGEgY2FyYWN0ZXLDrXN0aWNhIGdlbmVyYWwgZmluYWwgZGVsIFlBTUwgY29uc2lzdGUgZW4gZGVmaW5pciBlbCBmb3JtYXRvIGRlIHNhbGlkYSBlbiBxdWUgc2Vyw6EgcmVuZGVyaXphZG8gZWwgcmVzdG8gZGUgbG9zIGVsZW1lbnRvcyBkZWwgZG9jdW1lbnRvIFIgTWFya2Rvd24uIExvcyBmb3JtYXRvcyBiw6FzaWNvcyBxdWUgc2UgcHVlZGVuIHNlbGVjY2lvbmFyIGVuIGxhIHZlbnRhamEgZGUgZGnDoWxvZ28gKHByZXNlbnRhZGEgYXJyaWJhKSBzb246IC5kb2MsIC5wZGYgbyAuaHRtbC5cCkVzdG8gc2UgZGVmaW5lIGVuIGxhIG9wY2nDs24gYG91dHB1dDogaHRtbF9kb2N1bWVudGAsIHBvciBlamVtcGxvIHBhcmEgdW4gZG9jdW1lbnRvIGVuIGZvcm1hdG8gIi5odG1sIiwgYG91dHB1dDogcGRmX2RvY3VtZW50YCBlbiBlbCBjYXNvIGRlIHVubyBlbiBmb3JtYXRvICIucGRmIiBvIGBvdXRwdXQ6IHdvcmRfZG9jdW1lbnRgIGVuIGNhc28gZGUgc29saWNpdGFyIHVuIGRvY3VtZW50byBkZSBzYWxpZGEgZW4gZm9ybWF0byAiLmRvYyIuXApBZGVtw6FzIGVzIHBvc2libGUgc29saWNpdGFyIGxhIHJlbmRlcml6YWNpw7NuIGRlIG3DoXMgZGUgdW4gZm9ybWF0byBkZSBzYWxpZGEgZGVzZGUgdW4gbWlzbW8gWUFNTCwgcGFyYSBlbGxvIGVzIGRlYmUgZXNwZWNpZmljYXIgZW4gZWwgYXJndW1lbnRvIGRlbCBgb3V0cHV0OiBgIGxvcyBmb3JtYXRvcyBkZSBzYWxpZGEgcXVlIHNlIGRlc2VhbiBnZW5lcmFyLiBQb3IgZWplbXBsbyBzaSBzZSBkZXNlYW4gcHJvZHVjaXIgZG9zIGZvcm1hdG9zIGRlIHVuIG1pc21vIGRvY3VtZW50byBSIE1hcmtkb3duLCB1bm8gZW4gIi5odG1sIiB5IG90cm8gZW4gIi5wZGYiLCBzZSByZWFsaXphIGVzcGVjaWZpY2EgbG8gc2lndWllbnRlOgoKYGBgCi0tLQpvdXRwdXQ6CiAgaHRtbF9kb2N1bWVudDogZGVmYXVsdAogIHBkZl9kb2N1bWVudDogZGVmYXVsCi0tLQpgYGAKCgojIyAzLiBDYXJhY3RlcsOtc3RpY2FzIGRlbCBZQU1MIHBhcmEgZGlzdGludG9zICJvdXRwdXRzIi4KRXMgaW1wb3J0YW50ZSB0ZW5lciBlbiBjdWVudGEgcXVlIGxhcyBjYXJhY3RlcsOtc3RpY2FzIGLDoXNpY2FzIHJldmlzYWRhcyBhbnRlcmlvcm1lbnRlIGFwbGljYW4gcGFyYSB0b2RvcyBsb3MgZG9jdW1lbnRvcyBSIE1hcmtkb3duIGVuIGdlbmVyYWwsIGluZGVwZW5kaWVudGVtZW50ZSBkZWwgdGlwbyBkZSAqZm9ybWF0byBkZSBzYWxpZGEqLiBTaW4gZW1iYXJnbywgdGFtYmnDqW4gc2UgZGViZSBjb25zaWRlcmFyIHF1ZSBleGlzdGVuIGNhcmFjdGVyw61zdGljYXMgbyBlbGVtZW50b3MgcGFydGljdWxhcmVzIHNlZ8O6biBlbCAqKm91dHB1dCoqIHNvbGljaXRhZG8uIEVzdG8gZXMsIG5vIG5lY2VzYXJpYW1lbnRlIGxhcyBjYXJhY3RlcsOtc3RpY2FzIGRlIHVuIFlBTUwgcGFyYSB1biBmb3JtYXRvIGAuaHRtbGAgYXBsaWNhbiBpZ3VhbG1lbnRlIHBhcmEgdW4gZG9jdW1lbnRvIGVuIGZvcm1hdG8gYC5wZGZgLlwgClBhcmEgZGlzdGluZ3VpciBlc3RhcyBkaWZlcmVuY2lhcyBlcyBtdXkgw7p0aWwgY29uc3VsdGFyIGxhIFtndcOtYSBkZSByZWZlcmVuY2lhIGRlIFIgTWFya2Rvd25dKGh0dHBzOi8vd3d3LnJzdHVkaW8uY29tL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDE1LzAzL3JtYXJrZG93bi1yZWZlcmVuY2UucGRmKSBkaXNlw7FhZGEgcG9yIFIgU3R1ZGlvLlwKCgojIyMgMy4xLiBFbGVtZW50b3MgYsOhc2ljb3MgZGVsIFlBTUwgcGFyYSBlbCBmb3JtYXRvICIuaHRtbCIuCkFsIGRlZmluaXIgZWwgZm9ybWF0byBkZSBzYWxpZGEgZW4gZm9ybWF0byBgLmh0bWxgLCBlcyBpbXBvcnRhbnRlIHRlbmVyIGVuIGN1ZW50YSBxdWUgZXN0ZSB0aXBvIGRlIGRvY3VtZW50b3Mgbm8gbmVjZXNhcmlhbWVudGUgc2UgYWp1c3RhbiBhIGxhICJsw7NnaWNhIiBxdWUgaW1wb25lIHVuYSBww6FnaW5hIHUgaG9qYSBkZSBpbXByZXNpw7NuIGbDrXNpY2EuIEVuIGNhbWJpbywgZWwgY29udGVuaWRvIGRlIGVzdG9zIGRvY3VtZW50b3MgZXMgYXV0byBhanVzdGFibGUgYSBsYSBww6FnaW5hIGVuIHF1ZSBzZSB2aXN1YWxpemEgZGlnaXRhbG1lbnRlLlwKQWxndW5hcyBkZSBsYXMgY2FyYWN0ZXLDrXN0aWNhcyBwYXJ0aWN1bGFyZXMgZW4gZWwgZGlzZcOxbyBkZSB1biBkb2N1bWVudG8gZGUgc2FsaWRhIGVuIGZvcm1hdG8gIi5odG1sIiBzb24gY29uc2lzdGVuIGVuOgoKMS4gSW5jbHVpciB1bmEgKip0YWJsYSBkZSBjb250ZW5pZG9zKiogKHRhYmxlIG9mIGNvbnRlbnRzIFt0b2NdKTogcGFyYSBlbGxvIHNlIHV0aWxpemEgZWwgYXJndW1lbnRvIGB0b2M6IFRSVUVgIGRlc3B1w6lzIGRlIGVzcGVjaWZpY2FyIHF1ZSBlbCBkb2N1bWVudG8gZGUgc2FsaWRhIHNlcsOhIGVuIGZvcm1hdG8gYC5odG1sYC4gQWRlbcOhcywgc2kgc2UgZGVzZWEgcXVlIGVsIHNpc3RlbWEgYXNpZ25lIHVuYSBudW1lcmFjacOzbiBhdXRvbcOhdGljYSBhIGNhZGEgdW5hIGRlIGxhcyBzZWNjaW9uZXMgKHF1ZSBmdWVyb24gZGVmaW5pZGFzIG1lZGlhbnRlIGVsIHPDrW1ib2xvIGAjYCBkZSBsYSBzaW50YXhpcyBkZSBNYXJrZG93biksIHNlIHV0aWxpemEgZWwgYXJndW1lbnRvOiBgbnVtYmVyX3NlY3Rpb25zOiBUUlVFYCwgZGUgbGEgc2lndWllbnRlIG1hbmVyYToKCmBgYAotLS0KdGl0bGU6ICJEaXNlw7FvIGRlIFlBTUwiCmF1dGhvcjogIkd1c3Rhdm8gTWFydMOtbmV6IFZhbGRlcyIKZGF0ZTogIjMvMy8yMDIyIgpvdXRwdXQ6IAogIGh0bWxfZG9jdW1lbnQ6CiAgICB0b2M6IFRSVUUKICAgIG51bWJlcl9zZWN0aW9uczogVFJVRQotLS0KYGBgCgoyLiBUYW1iacOpbiBzZSBwdWVkZSBpbmRpY2FyIHNpIGRlIGRlc2VhIHF1ZSBlbCDDrW5kaWNlIGVsYWJvcmFkbyBwcmV2aWFtZW50ZSBzZSB1YmlxdWUgZW4gdW4gKipyZWN1YWRybyAiZmxvdGFudGUiKiogZGVudHJvIGRlIGxhIHDDoWdpbmEgYC5odG1sYCB5LCBhc8OtLCBzZSBlbmN1ZW50cmUgc2llbXByZSBhIGxhIHZpc3RhLiBQYXJhIGVsbG8gc2UgdXRpbGl6YSBlbCBjb21hbmRvIGB0b2NfZmxvYXQ6IFRSVUVgOgoKYGBgCi0tLQp0aXRsZTogIkRpc2XDsW8gZGUgWUFNTCIKYXV0aG9yOiAiR3VzdGF2byBNYXJ0w61uZXogVmFsZGVzIgpkYXRlOiAiMy8zLzIwMjIiCm91dHB1dDogCiAgaHRtbF9kb2N1bWVudDoKICAgIHRvYzogVFJVRQogICAgbnVtYmVyX3NlY3Rpb25zOiBUUlVFCiAgICB0b2NfZmxvYXQ6IFRSVUUKLS0tIApgYGAKCjMuIE90cmEgY2FyYWN0ZXLDrXN0aWNhIHF1ZSBwdWVkZSBzZXIgbW9kaWZpY2FkYSBjb25zaXN0ZSBlbiBlbCAqKnRlbWEqKiBvIHRpcG8gZGUgcGxhbnRpbGxhIHZpc3VhbCBlbiBxdWUgc2UgbXVlc3RyYSBlbCBjb250ZW5pZG8uIEVudHJlIGxhcyBvcGNpb25lcyBkaXNwb25pYmxlcyBkZSAidGVtYXMiLCBzZSBlbmN1ZW50cmFuIGxvcyBzaWd1aWVudGVzIHZhbG9yZXM6IGBjZXJ1bGVhbmAsIGBqb3VybmFsYCwgYGZsYXRseWAsIGByZWFkYWJsZWAsIGBzcGFjZWxhYmAsIGB1bml0ZWRgIHkgYGNvc21vYC5cIApQb3IgZWplbXBsbywgZWwgdGV4dG8gcXVlIGFjdHVhbG1lbnRlIHNlIGVzdMOhIHZpc3VhbGl6YW5kbyB1dGlsaXphIGxhIG9wY2nDs24gYGNvc21vYCBlbiBlbCB0ZW1hLiBQYXJhIGNhbWJpYXIgZGUgdGVtYSBzZSB1dGlsaXphIGVsIGNvbWFuZG8gYHRoZW1lOiBqb3VybmFsYCwgcG9yIGVqZW1wbG8uIEVuIGxhIHDDoWdpbmEgZGUgW0FuZHJldyBaaWVmZmxlcl0oaHR0cHM6Ly93d3cuZGF0YWRyZWFtaW5nLm9yZy9wb3N0L3ItbWFya2Rvd24tdGhlbWUtZ2FsbGVyeS8pIHNlIHB1ZWRlIGVjaGFyIHVuIHZpc3Rhem8gYSBsYSBhcGFyaWVuY2lhIGRlIGxvcyB0ZW1hcy4KCmBgYAotLS0KdGl0bGU6ICJEaXNlw7FvIGRlIFlBTUwiCmF1dGhvcjogIkd1c3Rhdm8gTWFydMOtbmV6IFZhbGRlcyIKZGF0ZTogIjMvMy8yMDIyIgpvdXRwdXQ6IAogIGh0bWxfZG9jdW1lbnQ6CiAgICB0b2M6IFRSVUUKICAgIG51bWJlcl9zZWN0aW9uczogVFJVRQogICAgdG9jX2Zsb2F0OiBUUlVFCiAgICB0aGVtZTogam91cm5hbAotLS0gCmBgYAoKNC4gVGFtYmnDqW4gZXMgcG9zaWJsZSBkZWZpbmlyIGRlc2RlIHVuIGluaWNpbyBlbCAqKm9jdWx0YW1pZW50byoqIGRlIGxvcyByZXN1bHRhZG9zIGRlIGxvcyB0cm96b3MgZGUgY8OzZGlnb3MgbyAqY2h1bmtzKiwgcGFyYSBlbGxvIHNlIHV0aWxpemEgZWwgY29tYW5kbyBgY29kZV9mb2xkaW5nOiBgIHkgc3VzIG9wY2lvbmVzIGRlIHJlc3B1ZXN0YSBwb3NpYmxlIHNvbjogYHNob3dgIG8gYGhpZGVgLlwgCkVuIGVsIGNhc28gZGUgdXNhciBsYSBvcGNpw7NuIGBjb2RlX2ZvbGRpbmc6IGhpZGVgLCBhdXRvbcOhdGljYW1lbnRlIHRvZG9zIGxvcyBjw7NkaWdvcyBzZSBvY3VsdGFyw6FuIGEgbGEgdmlzdGEgZGVsIGxlY3RvciBwZXJvIHBvZHLDoW4gc2VyIGRlc3BsZWdhZG9zIHNpIHNlIGRhICJjbGljayIgZW4gdW4gcGVxdWXDsW8gYm90w7NuIHRyaWFuZ3VsYXIgcXVlIHNlIGluc2VydGEgZW4gbGFzIHDDoWdpbmEgYC5odG1sYC4gRXN0byBlcyDDunRpbCBjdWFuZG8gbG9zIHJlc3VsdGFkb3MgZGUgbG9zIGPDs2RpZ29zIHNvbiBkZW1hc2lhZG8gZ3JhbmRlcyB5LCBlbnRvbmNlcywgZGlmaWN1bHRhbiBsYSBsZWN0dXJhIGRlIHVuIHRleHRvLgoKYGBgCi0tLQp0aXRsZTogIkRpc2XDsW8gZGUgWUFNTCIKYXV0aG9yOiAiR3VzdGF2byBNYXJ0w61uZXogVmFsZGVzIgpkYXRlOiAiMy8zLzIwMjIiCm91dHB1dDogCiAgaHRtbF9kb2N1bWVudDoKICAgIHRvYzogVFJVRQogICAgbnVtYmVyX3NlY3Rpb25zOiBUUlVFCiAgICB0b2NfZmxvYXQ6IFRSVUUKICAgIHRoZW1lOiBqb3VybmFsCiAgICBjb2RlX2ZvbGRpbmc6IGhpZGUKLS0tIApgYGAKCjUuICoqRGVzY2FyZ2FyIGVsIGPDs2RpZ28gZnVlbnRlKiogZGUgLlJtZC4gU2kgc2UgZGVzZWEgcGVybWl0aXIgcXVlIGVsIGPDs2RpZ28gZnVlbnRlIGRlIFJtZCBzZWEgZGVzY2FyZ2FkbywgZXN0byBzZSBlc3BlY2lmaWNhIGRlc2RlIGVsIFlBTUwgY29uIGVsIHNjcmlwdDogYGNvZGVfZG93bmxvYWQ6IFRSVUVgIGRlIGxhIHNpZ3VpZW50ZSBtYW5lcmE6CgpgYGAKLS0tCm91dHB1dDoKICBodG1sX2RvY3VtZW50OgogICAgY29kZV9kb3dubG9hZDogdHJ1ZQotLS0gCmBgYAoKIyMjIDMuMi4gRWxlbWVudG9zIGLDoXNpY29zIGRlbCBZQU1MIHBhcmEgZWwgZm9ybWF0byAiLnBkZiIuCkVuIGVsIGNhc28gZGUgdW4gZG9jdW1lbnRvIGRlIHNhbGlkYSBlbiBmb3JtYXRvIGAucGRmYCwgb3Ryb3Mgc29uIGxvcyBwYXLDoW1ldHJvcyBxdWUgc2UgcHVlZGVuIG1vZGlmaWNhci4gRW4gZXN0ZSBjYXNvIGVzIGltcG9ydGFudGUgcmVjb3JkYXIgcXVlIGVsIGZvcm1hdG8gZGUgc2FsaWRhIHNlIGFzZW1lamFyw6EgYSB1biBkb2N1bWVudG8gZXNjcml0byBlbiBww6FnaW5hcyBibGFuY2FzIHlhIHNlYSBkZSB0YW1hw7FvICJjYXJ0YSIgbyAiQTQiIHUgb3Rybywgc2Vnw7puIGFzw60gc2UgZGVmaW5hLlwKQXF1w60gc2UgZGViZSB0ZW5lciBlbiBjdWVudGEgcXVlIGFsIHJlbmRlcml6YXIgdW4gZG9jdW1lbnRvICIuUm1kIiBlbiB1biBmb3JtYXRvIGRlIHNhbGlkYSBlbiBmb3JtYXRvIGAucGRmYCwgZXN0ZSBlcyB0cmFuc2Zvcm1hZG8gZW4gdW4gcHJvY2VzbyBpbnRlcm1lZGlvIGJham8gZWwgbGVndWFuamUgIkxhVGV4IiwgeSBwYXJhIGVsbG8gc2UgdXRpbGl6YSB1biBwcm9ncmFtYSBkZW5vbWluYWRvIGBQYW5kb2NgLiBFbiBsYSBbcMOhZ2luYSB3ZWIgZGUgUGFuZG9jXShodHRwczovL3BhbmRvYy5vcmcvTUFOVUFMLmh0bWwjdmFyaWFibGVzLWZvci1sYXRleCkgc2UgcHVlZGVuIHJldmlzYXIgZGUgbWFuZXJhIGNvbXBsZXRhIGxhcyB2YXJpYWJsZXMgYSBpbmNsdWlyIGVuIGVzdGUgdGlwbyBkZSBkb2N1bWVudG9zLlwgClNpbiBlbWJhcmdvLCBhcXXDrSBzb2xvIHNlIHJldmlzYXLDoW4gYWxndW5hcyBkZSBsYXMgY2FyYWN0ZXLDrXN0aWNhcyBtw6FzIHVzdWFsZXMgYSBpbmNsdWlyIGVuIGVsIFlBTUwgY29uc2lzdGVuIGVuOgoKMS4gKipUaXBvIGRlIGRvY3VtZW50byoqOiBBcXXDrSBzZSBwdWVkZSBkZWZpbmlyLCBpbmljaWFsbWVudGUsIGVsIHRpcG8gZGUgZG9jdW1lbnRvIHF1ZSBzZSBlbGFib3JhcsOhLCBwYXJhIGxvIHF1ZSBzZSB1c2EgZWwgY29tYW5kbzogYGRvY3VtZW50Y2xhc3M6IGAsIHkgbGFzIG9wY2lvbmVzIGRlIHJlc3B1ZXN0YSBkaXNwb25pYmxlcyBzb246IGBib29rYCwgYGFydGljbGVgIG8gYHJlcG9ydGAuIFBvciBlamVtcGxvOgoKYGBgCi0tLQp0aXRsZTogIkRpc2XDsW8gZGUgWUFNTCIKYXV0aG9yOiAiR3VzdGF2byBNYXJ0w61uZXogVmFsZGVzIgpkYXRlOiAiMy8zLzIwMjIiCm91dHB1dDogcGRmX2RvY3VtZW50CmRvY3VtZW50Y2xhc3M6IGFydGljbGUgI2FxdcOtIHNlIGRlZmluZSBxdWUgZWwgZG9jdW1lbnRvIGEgZWxhYm9yYXIgZXMgdW4gImFydMOtY3VsbyIuCi0tLQpgYGAKCjIuICoqT3JnYW5pemFjacOzbiBkZWwgdGV4dG8qKi4gQ29uIGVzdGEgb3BjacOzbiBzZSBwdWVkZSBlc3BlY2lmaWNhciBsYSBtYW5lcmEgZW4gcXVlIHNlIHByZXNlbnRhcsOhIGVsIHRleHRvIHZpc3VhbG1lbnRlLiBQYXJhIGVsbG8gc2UgdXRpbGl6YSBlbCBjb21hbmRvOiBgY2xhc3NvcHRpb246IGAsIHkgbGFzIG9wY2lvbmVzIGRlIHJlc3B1ZXN0YSBwb3NpYmxlcyBzb246IGB0d29jb2x1bW5gLCBgbGFuZHNjYXBlYCBvIGBwb3J0cmFpdGAuIEVzdGEgw7psdGltYSBlcyBsYSBvcGNpw7NuIHBvciBkZWZlY3RvLiBQb3IgZWplbXBsbzoKCmBgYAotLS0KdGl0bGU6ICJEaXNlw7FvIGRlIFlBTUwiCmF1dGhvcjogIkd1c3Rhdm8gTWFydMOtbmV6IFZhbGRlcyIKZGF0ZTogIjMvMy8yMDIyIgpvdXRwdXQ6IHBkZl9kb2N1bWVudApkb2N1bWVudGNsYXNzOiBhcnRpY2xlCmNsYXNzb3B0aW9uOiAKLSB0d29jb2x1bW5zICNhcXXDrSBzZSBkZWZpbmUgcXVlIGVsIHRleHRvIGVuIGNhZGEgY3VhcnRpbGxhIHNlIGRpc3RyaWJ1eWEgZW4gZG9zIGNvbHVtbmFzLgotLS0KYGBgCgozLiAqKlRhbWHDsW8gZGUgbGEgaG9qYSBkZSBpbXByZXNpw7NuKiouIEEgcGFydGlyIGRlbCBjb21hbmRvIGBwYXBlcnNpemU6IGAsIGVudHJlIGN1eWFzIG9wY2lvbmVzIGRlIHJlc3B1ZXN0YSBzZSBlbmN1ZW50cmFuIGBhNGAgbyBgbGV0dGVyYCwgc2UgZGVmaW5lIGVsIHRhbWHDsW8gZGUgbGEgaG9qYSBkZSBpbXByZXNpw7NuLiBQb3IgZWplbXBsbzoKCmBgYAotLS0KdGl0bGU6ICJEaXNlw7FvIGRlIFlBTUwiCmF1dGhvcjogIkd1c3Rhdm8gTWFydMOtbmV6IFZhbGRlcyIKZGF0ZTogIjMvMy8yMDIyIgpvdXRwdXQ6IHBkZl9kb2N1bWVudApkb2N1bWVudGNsYXNzOiBhcnRpY2xlCmNsYXNzb3B0aW9uOiAKLSB0d29jb2x1bW5zCnBhcGVyc2l6ZTogbGV0dGVyICAjYXF1w60gc2UgZGVmaW5lIGVsIHRhbWHDsW8gZGUgbGEgaG9qYSBkZSBpbXByZXNpw7NuIHNlYSBkZSB0YW1hw7FvICJjYXJ0YSIuCi0tLQpgYGAKCjQuICoqSW50ZXJsaW5lYWRvKiouIE1lZGlhbnRlIGVsIGNvbWFuZG8gYGxpbmVzdHJldGNoOiBgLCB5IGN1eW9zIHZhbG9yZXMgc29uIHVuIHZlY3RvciBudW3DqXJpY28sIHNlIGRlZmluZSBlbCB0YW1hw7FvIGRlbCBzYWx0byBkZSByZW5nbMOzbiBkZW50cm8gZGVsIGRvY3VtZW50by4gUG9yIGVqZW1wbG86CgpgYGAKLS0tCnRpdGxlOiAiRGlzZcOxbyBkZSBZQU1MIgphdXRob3I6ICJHdXN0YXZvIE1hcnTDrW5leiBWYWxkZXMiCmRhdGU6ICIzLzMvMjAyMiIKb3V0cHV0OiBwZGZfZG9jdW1lbnQKZG9jdW1lbnRjbGFzczogYXJ0aWNsZQpjbGFzc29wdGlvbjogCi0gdHdvY29sdW1ucwpwYXBlcnNpemU6IGxldHRlcgpsaW5lc3RyZXRjaDogMS41ICAjQXF1w60gc2UgZGVmaW5lIHF1ZSBlbCBpbnRlcmxpbmVhZG8gbyBlbCBzYWx0byBlbnRyZSByZW5nbG9uZXMgc2VhIGRlIDEuNS4KLS0tCmBgYAoKNS4gKipUYW1hw7FvIGRlIGZ1ZW50ZSoqLiBFbCB0YW1hw7FvIGRlIGxhIGZ1ZW50ZSBkZWwgdGV4dG8gZW4gZ2VuZXJhbCBwdWVkZSBzZXIgbW9kaWZpY2FkYSB1dGlsaXphbmRvIGVsIGNvbWFuZG8gYGZvbnRzaXplOiBgLCB5IGN1eW9zIHZhbG9yZXMgc2UgZGVmaW5lbiBlbiB1bmlkYWRlcyBkZSAicHVudG9zIiwgcG9yIGVqZW1wbG86IDEwcHQsIDExcHQgbyAxMnB0LgoKYGBgCi0tLQp0aXRsZTogIkRpc2XDsW8gZGUgWUFNTCIKYXV0aG9yOiAiR3VzdGF2byBNYXJ0w61uZXogVmFsZGVzIgpkYXRlOiAiMy8zLzIwMjIiCm91dHB1dDogcGRmX2RvY3VtZW50CmRvY3VtZW50Y2xhc3M6IGFydGljbGUKY2xhc3NvcHRpb246IAotIHR3b2NvbHVtbnMKcGFwZXJzaXplOiBsZXR0ZXIKbGluZXN0cmV0Y2g6IDEuNQpmb250c2l6ZTogMTJwdCAgI0FxdcOtIHNlIGRlZmluZSBlbCB0YW1hw7FvIGRlIGxhIGZ1ZW50ZSBhIHVubyBkZSAxMiBwdW50b3MuCi0tLQpgYGAKCjYuICoqTcOhcmdlbmVzKiogbyAqZ2VvbWV0csOtYSogZGVsIHRleHRvIGRlbnRybyBkZWwgZG9jdW1lbnRvLiBNZWRpYW50ZSBlbCBjb21hbmRvIGBnZW9tZXRyeTogYCBzZSBwdWVkZW4gZGVmaW5pciBlbCB0YW1hw7FvIGRlIGxvcyBtw6FyZ2VuZXMgZGVsIHRleHRvIGRlbnRybyBkZWwgZG9jdW1lbnRvLlwgCkxvcyB2YWxvcmVzIGRlIHJlc3B1ZXN0YSBkZSBlc3RlIGNvbWFuZG8gY29uc2lzdGVuIGVuIHVuIHZlY3RvciBudW3DqXJpY28sIGEgbGEgdmV6IHF1ZSBzZSBwdWVkZSBkZWZpbmlyIG1hbnVhbG1lbnRlIGxhIHVuaWRhZCBtw6l0cmljYSBlbiBxdWUgc2UgZGVzZWEgZXNwZWNpZmljYXIgc3UgdGFtYcOxbywgY29tbyBwdWVkZW4gc2VyIGBpbmAgKHB1bGdhZGFzKSwgYGNtYChjZW50w61tZXRyb3MpIG8gYG1tYCAobWlsw61tZXRyb3MpLlwgCkFzaW1pc21vIHNlIHB1ZWRlbiB1dGlsaXphciBsb3MgYXJndW1lbnRvcyBgdG9wPSBgLCBgYm90dG9tPSBgLCBgbGVmdD0gYCB5IGByaWdodD0gYCBwYXJhIGVzcGVjaWZpY2FyIGxvcyBtw6FyZ2VuZXMgZGVzZWFkb3MuIFBvciBlamVtcGxvOgoKYGBgCi0tLQp0aXRsZTogIkRpc2XDsW8gZGUgWUFNTCIKYXV0aG9yOiAiR3VzdGF2byBNYXJ0w61uZXogVmFsZGVzIgpkYXRlOiAiMy8zLzIwMjIiCm91dHB1dDogcGRmX2RvY3VtZW50CmRvY3VtZW50Y2xhc3M6IGFydGljbGUKY2xhc3NvcHRpb246IAotIHR3b2NvbHVtbnMKcGFwZXJzaXplOiBsZXR0ZXIKbGluZXN0cmV0Y2g6IDEuNQpmb250c2l6ZTogMTJwdApnZW9tZXRyeToKLSB0b3A9M2NtICAjU2UgZGVmaW5lIHVuIG3DoXJnZW4gZGUgM2NtIGVuIGxhIHBhcnRlIHN1cGVyaW9yIGRlbCBkb2N1bWVudG8uCi0gbGVmdD0yLjVjbSAjU2UgZGVmaW5lIHVuIG3DoXJnZW4gZGUgMi41Y20gZW4gbGEgcGFydGUgaXpxdWllcmRhIGRlbCBkb2N1bWVudG8uCi0tLQpgYGAKCjcuICoqw41uZGljZSoqIG8gKnRhYmxhIGRlIGNvbnRlbmlkbyouIEVuIHVuIGRvY3VtZW50byBlbiBmb3JtYXRvIGAucGRmYCB0YW1iacOpbiBlcyBwb3NpYmxlIGluY2x1aXIgdW4gbGlzdGFkbyBvIHRhYmxhIGRlIGNvbnRlbmlkbyBhc8OtIGNvbW8gbGEgb3BjacOzbiBwYXJhIHNvbGljaXRhciBxdWUgbGFzIHNlY2Npb25lcyByZWNvbm9jaWRhcyBlbiBsYSB0YWJsYSBkZSBjb250ZW5pZG8gc2VhbiBudW1lcmFkYXMgYXV0b23DoXRpY2FtZW50ZS5cIApQYXJhIGVsbG8gc2UgdXRpbGl6YSBlbCBjb21hbmRvIGB0b2M6IFRSVUVgIGFzw60gY29tbyBgbnVtYmVyX3NlY3Rpb25zOiBUUlVFYCwgcG9yIGVqZW1wbG86CgpgYGAKLS0tCnRpdGxlOiAiRGlzZcOxbyBkZSBZQU1MIgphdXRob3I6ICJHdXN0YXZvIE1hcnTDrW5leiBWYWxkZXMiCmRhdGU6ICIzLzMvMjAyMiIKb3V0cHV0OiBwZGZfZG9jdW1lbnQKZG9jdW1lbnRjbGFzczogYXJ0aWNsZQpjbGFzc29wdGlvbjogCi0gdHdvY29sdW1ucwpwYXBlcnNpemU6IGxldHRlcgpsaW5lc3RyZXRjaDogMS41CmZvbnRzaXplOiAxMnB0Cmdlb21ldHJ5OgotIHRvcD0zY20KLSBsZWZ0PTIuNWNtCnRvYzogVFJVRQpudW1iZXJfc2VjdGlvbnM6IFRSVUUKLS0tCmBgYAoKOC4gKipUaXBvIGRlIGZ1ZW50ZSoqLiBUYW1iacOpbiBlcyBwb3NpYmxlIG1vZGlmaWNhciBlbCB0aXBvIGRlIGZ1ZW50ZSB0aXBvZ3LDoWZpY2EgZGUgbG9zIGRvY3VtZW50b3MgZGUgc2FsaWRhLiBQYXJhIGVsbG8gc2UgdXRpbGl6YSBlbCBjb21hbmRvIGBtYWluZm9udDogYCwgeSBjb21vIHJlc3B1ZXN0YSBzZSBkZWJlIGVzcGVjaWZpY2FyIGVsIG5vbWJyZSBhIGFsZ3VuYSBkZSBsYXMgdGlwb2dyYWbDrWFzIHByZSBjYXJnYWRhcyBlbiBsYSBjb21wdXRhZG9yYSBlbiBlbCBsaXN0YWRvIHRpcG9ncsOhZmljbyBkZWwgZGlzY28gZHVyby5cIApTZSBkZWJlIHRlbmVyIGVuIGN1ZW50YSBxdWUgcGFyYSBxdWUgZXN0ZSBjb21hbmRvIGFwbGlxdWUgbGEgc29saWNpdHVkIGRlIHVuIHRpcG8gZGUgZnVlbnRlIGRlc2VhZG8sIHNlIGRlYmUgYWNvbXBhw7FhciBkZSB1biBjb21hbmRvIGFkaWNpb25hbCBxdWUgY29uc2lzdGUgZW4gZGVmaW5pciBlbCBtb3RvciBwYXJhIHRyYW5zZm9ybWFyIGVsIGRvY3VtZW50byAiLlJtZCIgYSBmb3JtYXRvICJMYVRleCIgeSwgcG9zdGVyaW9ybWVudGUsIGEgdW5vIGRlIHRpcG8gIi5wZGYiLiBFc3RlIGNvbWFuZG8gZXMgYGxhdGV4X2VuZ2luZTogYCwgeSBlbCBtb3RvciBkZSB0cmFuc2Zvcm1hY2nDs24gZGViZSBzZXIgbGEgb3BjacOzbiBgeGVsYXRleGAuXCAKRGUgbWFuZXJhIHF1ZSBsYSBzb2xpY2l0dWQgcGFyYSBjb25maWd1cmFyIGVzdGUgY2FtYmlvIGRlIGZ1ZW50ZSBlcyBkZSBsYSBzaWd1aWVudGUgZm9ybWE6CgpgYGAKLS0tCnRpdGxlOiAiRGlzZcOxbyBkZSBZQU1MIgphdXRob3I6ICJHdXN0YXZvIE1hcnTDrW5leiBWYWxkZXMiCmRhdGU6ICIzLzMvMjAyMiIKb3V0cHV0OiAKICBwZGZfZG9jdW1lbnQ6CiAgICBsYXRleF9lbmdpbmU6IHhlbGF0ZXggICNBcXXDrSBzZSBkZWZpbmUgZWwgbW90b3IgZGUgcmVuZGVyaXphY2nDs24gYSBMYVRleApkb2N1bWVudGNsYXNzOiBhcnRpY2xlCmNsYXNzb3B0aW9uOiAKLSB0d29jb2x1bW5zCnBhcGVyc2l6ZTogbGV0dGVyCmxpbmVzdHJldGNoOiAxLjUKZm9udHNpemU6IDEycHQKZ2VvbWV0cnk6Ci0gdG9wPTNjbQotIGxlZnQ9Mi41Y20KdG9jOiBUUlVFCm51bWJlcl9zZWN0aW9uczogVFJVRQptYWluZm9udDogQXJpYWwgICNBcXXDrSBzZSBzb2xpY2l0YSBlbCBjYW1iaW8gZGVsIHRpcG8gZGUgZnVlbnRlLCBxdWUgcHJldmlhbWVudGUgZXN0w6EgY2FyZ2FkYSBkZW50cm8gZGVsIGxpc3RhZG8gdGlwb2dyw6FmaWNvIGRlIGxhIGNvbXB1dGFkb3JhIGRlIHRyYWJham8uCi0tLQpgYGAKCiMjIDQuIFBhcXVldGVyw61hIGB5bWx0aGlzKClgIHBhcmEgZGlzZcOxYXIgWUFNTCB5IHN1ICphZGQtaW4qLgoKTGEgdXRpbGlkYWQgZGVsICoqWUFNTCoqLCBhZGVtw6FzIGRlIGRlZmluaXIgbG9zIG1ldGFkYWRvcyBkZWwgZG9jdW1lbnRvIGVsYWJvcmFkbywgYXPDrSBjb21vIGNvbmZpZ3VyYXIgZGVzZGUgdW4gaW5pY2lvIGxhcyBjYXJhY3RlcsOtc3RpY2FzIGdlbmVyYWxlcyBkZWwgZG9jdW1lbnRvLCBjb25zaXN0ZSBlbiBxdWUgdW5hIHZleiBxdWUgc2UgY3VlbnRhIGNvbiB1bmEgZXN0cnVjdHVyYSBwcmVmZXJpZGEgcG9yIGVsIGF1dG9yLCBlc3RhIHB1ZWRlIHNlciBjb3BpYWRhIHBhcmEgZGlzZcOxYXIgb3Ryb3MgZG9jdW1lbnRvcyBwb3N0ZXJpb3Jlcy4gU2luIGVtYmFyZ28gdGFtYmnDqW4gcHVlZGUgc2VyIGVuZ29ycm9zbyByZWNvcmRhciBsYSBtYXlvcsOtYSBkZSBsb3MgY29tYW5kb3MgZGVudHJvIGRlIHVuIFlBTUwsIGVzcGVjaWFsbWVudGUgYWwgY29tZW56YXIgYSBjb25vY2VyIHkgdHJhYmFqYXIgY29uIGVsIGZvcm1hdG8gIi5SbWQiLlwKUGVybyBleGlzdGUsIGFkaWNpb25hbG1lbnRlLCBsYSBbcGFxdWV0ZXLDrWFdKGh0dHBzOi8veW1sdGhpcy5yLWxpYi5vcmcvKSBgeW1sdGhpcygpYCBxdWUgcGVybWl0ZSBtYW5pcHVsYXIgZGUgbWFuZXJhIG3DoXMgInNlbmNpbGxhIiBsYXMgY2FyYWN0ZXLDrXN0aWNhcyBkZWwgWUFNTCwgdG9tYW5kbyBlbiBjb25zaWRlcmFjacOzbiBlbCB0aXBvIGRlIGRvY3VtZW50byBkZSBzYWxpZGEgZGVzZWFkby5cClByaW1lcm8gc2UgZGViZSBpbnN0YWxhciBkaWNoYSBwYXF1ZXRlcsOtYToKCmBgYAppbnN0YWxsLnBhY2thZ2VzKCJ5bWx0aGlzIikKYGBgCgpUcmFzIGFjdGl2YXIgZGljaGEgcGFxdWV0ZXLDrWEgY29uIGBsaWJyYXJ5KHltbHRoaXMpYCwgZWwgY29tYW5kbyBiw6FzaWNvIGVzIGB5bWwoKWAuIFVuYSB2ZXogcXVlIHNlICJjb3JyZSIgZGljaG8gY8OzZGlnbywgZXN0ZSBhcnJvamEgY29tbyByZXN1bHRhZG8gZWwgY29udGVuaWRvIGLDoXNpY28gZGUgdW4gWUFNTC5cCgpgYGAge3J9CmxpYnJhcnkoeW1sdGhpcykKeW1sKCkKYGBgCgpBc2ltaXNtbywgZWwgcmVzdWx0YWRvIGRlbCBZQU1MIGEgZ2VuZXJhciBzZSBwdWVkZSBhZGljaW9uYXIgY29uIG90cm9zIGFyZ3VtZW50b3MsIGNvbW86IGB5bWxfYXV0aG9yKClgLCBgeW1sX2RhdGUoKWAsIG8gYHltbF9vdXRwdXQoKWAsIGFkZW3DoXMgZGUgdmluY3VsYXJsb3MgbWVkaWFudGUgZWwgdXNvIGRlIHBpcGVzIChgJT4lYCksIHBvciBlamVtcGxvLgoKYGBge3J9CnltbCgpICU+JSAKICB5bWxfYXV0aG9yKGMoImF1dG9yMSIsICJhdXRvcjIiKSwgYWZmaWxpYXRpb24gPSAiaW5zdGl0dWNpw7NuIikgJT4lIAogIHltbF9kYXRlKGx1YnJpZGF0ZTo6dG9kYXkoKSkgJT4lIAogIHltbF9vdXRwdXQoCiAgICB3b3JkX2RvY3VtZW50KGtlZXBfbWQgPSBUUlVFKSwgCiAgICBib29rZG93bjo6aHRtbF9kb2N1bWVudDIoKQogICkgCmBgYAoKCiMjIyA0LjEuIEFkZC1pbiBkZSBgeW1sdGhpcygpYC4KCkFkaWNpb25hbG1lbnRlIGxhIHBhcXVldGVyw61hIGRlIGB5bWx0aGlzKClgIGN1ZW50YSBjb24gdW5hICJhZGQtaW4iLCBxdWUgc2UgdHJhZHVjZSBlbiB1bmEgdmVudGFuYSBlbWVyZ2VudGUgcXVlIHBlcm1pdGUsIGEgc3UgdmV6LCBhcG95YXIgYWwgdXN1YXJpbyBlbiBsYSBnZW5lcmFjacOzbiBkZWwgWUFNTCBzaW4gbGEgbmVjZXNpZGFkIGRlIGVzY3JpYmlyIGPDs2RpZ28gZW4gdW4gImNodW5rIi5cClBhcmEgYWN0aXZhciBkaWNobyAiYWRkLWluIiBzZSBkZWJlIHNlZ3VpciBsYSBydXRhICJUb29scyIgPiAiYWRkaW5zIiA+ICJicm93c2UgYWRkaW5zIiA+ICJ5bWx0aGlzIi4gRW4gY2FzbyBkZSBubyB1c2FyIGVsIG1vdXNlIHBhcmEgc2VndWlyIGRpY2hhIHJ1dGEsIGVsIGNvbWFuZG8gcGFyYSBhY3RpdmFyIGVsICJhZGQtaW4iIGVzIGB5bWx0aGlzOjo6bGF1bmNoX3lhbWxfYWRkaW4oKWAuXAoKYGBgCnltbHRoaXM6OjpsYXVuY2hfeWFtbF9hZGRpbigpCmBgYAoKVW5hIHZleiBhY3RpdmFkbyBlbCAiYWRkLWluIiwgZGVzcHXDqXMgYXBhcmVjZXLDoSB1bmEgdmVudGFuYSBlbWVyZ2VudGUgcGFyZWNpZGEgYSBsYSBzaWd1aWVudGU6CgpgYGB7ciwgZWNobz1GQUxTRSwgb3V0LndpZHRoPSI5MCUiLCBmaWcuY2FwPSJWZW50YW5hIGRlbCAnYWRkLWluJyBkZSAneW1sdGhpcygpJy4ifQprbml0cjo6aW5jbHVkZV9ncmFwaGljcygiYWRkIGluIHltbHRoaXMucG5nIikKYGBgCgpFbiBkaWNoYSB2ZW50YW5hIGVtZXJnZW50ZSwgZWwgYXV0b3IgdGVuZHLDoSBsYSBvcG9ydHVuaWRhZCBkZSByZWxsZW5hciBkaXZlcnNhcyBvcGNpb25lcywgdGFudG8gcmVmZXJlbnRlcyBhbCB0aXBvIGRlIGRvY3VtZW50byBkZSBzYWxpZGEgKGAucGRmYCwgYC5odG1sYCwgYC5kb2NgIHUgb3RybyksIGFzw60gY29tbyBsYXMgY2FyYWN0ZXLDrXN0aWNhcyBwYXJ0aWN1bGFyZXMuIFkgZWwgcmVzdWx0YWRvIGdlbmVyYWRvIHNlIHRyYWR1Y2UgZW4gdW5hIGVzcXVlbGEgZGVsIFlBTUwgY29uZmlndXJhZG8gYSBwYXJ0aXIgZGUgbGFzIG5lY2VzaWRhZGVzIGRlbCBhdXRvci4KCgojIyA1LiBSZWZlcmVuY2lhcyB5IGxpc3RhZG8gYmlibGlvZ3LDoWZpY28gYmFzYWRvIGVuICoqWm90ZXJvKiouCgpBcXXDrSBzZSByZXZpc2Fyw6EgZWwgcHJvY2VzbyBkZSBpbnNlcmNpw7NuIGRlIGNpdGFjaW9uZXMgYXBvecOhbmRvc2UgZW4gZWwgZ2VzdG9yIGRlIHJlZmVyZW5jaWFzIGJpYmxpb2dyw6FmaWNhcyBkZSBbKipab3Rlcm8qKl0oaHR0cHM6Ly93d3cuem90ZXJvLm9yZy8pLCBxdWUgZXMgdW4gc29mdHdhcmUgZGUgY8OzZGlnbyBhYmllcnRvLgoKCiMjIyA1LjEuIFByZXBhcmFjacOzbiBkZSBsYSBiYXNlIGRlIGRhdG9zIGRlIHJlZmVyZW5jaWFzIGJpYmxpb2dyw6FmaWNhcyAoIi5iaWIiKS4KCkluaWNpYWxtZW50ZSBzZSByZXF1aWVyZSBjb250YXIgY29uIHVuIGFyY2hpdm8gY29uIGV4dGVuc2nDs24gKipgLmJpYmAqKiBlbiBlbCBxdWUgc2UgZW5jdWVudHJlbiBlbmxpc3RhZGFzIHRvZGFzIGxhcyByZWZlcmVuY2lhcyBiaWJsaW9ncsOhZmljYXMgcXVlIHNlIHV0aWxpemFyw6FuIGVuIGVsIGRvY3VtZW50by5cCkVzdGUgdGlwbyBkZSBhcmNoaXZvcyBjb25zaXN0ZSBlbiB1biBsaXN0YWRvIGRlIGxhcyByZWZlcmVuY2lhcyBiaWJsaW9ncsOhZmljYXMgcXVlIHNlIHV0aWxpemFyw6FuIGNvbW8gcmVjdXJzb3MgZGUgdW4gZG9jdW1lbnRvLCBkb25kZSBjYWRhIHVuYSBkZSBkaWNoYXMgcmVmZXJlbmNpYXMgc29uIGFyY2hpdmFkYXMgYmFqbyB1biBmb3JtYXRvIGVzcGVjaWFsIGRlbm9taW5hZG8gYEJpYlRleGAsIGNvbiBsYSBzaWd1aWVudGUgZXN0cnVjdHVyYSBwb3IgZWplbXBsbzoKCmBgYApAS2V5e1ItYmFzZSwKICB0aXRsZSA9IHtSOiBBIExhbmd1YWdlIGFuZCBFbnZpcm9ubWVudCBmb3IgU3RhdGlzdGljYWwKICAgICAgICAgICBDb21wdXRpbmd9LAogIGF1dGhvciA9IHt7UiBDb3JlIFRlYW19fSwKICBvcmdhbml6YXRpb24gPSB7UiBGb3VuZGF0aW9uIGZvciBTdGF0aXN0aWNhbCBDb21wdXRpbmd9LAogIGFkZHJlc3MgPSB7Vmllbm5hLCBBdXN0cmlhfSwKICB5ZWFyID0gezIwMTl9LAogIHVybCA9IHtodHRwczovL3d3dy5SLXByb2plY3Qub3JnfSwKfQpgYGAKTWFudWFsbWVudGUgc2UgcHVlZGUgY3JlYXIgdW4gbGlzdGFkbyBkZSB0b2RhcyBsYXMgb2JyYXMgYSByZWZlcmVuY2lhciBlbiB1biBhcmNoaXZvIGRlIHRleHRvIHBsYW5vLCBlbCBxdWUsIGZpbmFsbWVudGUsIGRlYmVyw6Egc2VyIGd1YXJkYWRvIGNvbiBsYSBleHRlbnNpw7NuIGAuYmliYCwgeSBxdWUgc2Vyw6EgbmVjZXNhcmlvIHBhcmEgZWwgcHJvY2VzbyBkZSBpbnNlcnRhciBjaXRhY2lvbmVzIGVuIFIgTWFya2Rvd24sIGFzw60gY29tbyBwYXJhIGdlbmVyYXIgZWwgbGlzdGFkbyBiaWJsaW9ncsOhZmljbyBhIGluY2x1aXIgZW4gZWwgZG9jdW1lbnRvIGRlIHNhbGlkYS5cCkNyZWFyIGRpY2hvIGFyY2hpdm8gY29uIGV4dGVuc2nDs24gYC5iaWJgIGVzIHVuIHByb2Nlc28gZW5nb3Jyb3NvLCBhY3R1YWxtZW50ZSBlbCBnZXN0b3IgYmlibGlvZ3LDoWZpY28gZGUgKipab3Rlcm8qKiB0YW1iacOpbiBwZXJtaXRlIGdlbmVyYXIgZGljaG8gYXJjaGl2byBkZSBtYW5lcmEgbcOhcyBzZW5jaWxsYS5cCkRlc2RlICoqWm90ZXJvKiogc2UgcHVlZGVuIHNlbGVjY2lvbmFyIGxhcyByZWZlcmVuY2lhcyBxdWUgZGViZXLDoW4gc2VyICpleHBvcnRhZGFzKiBlbiBmb3JtYXRvICoqYC5iaWJgKiogKGFwb3lhZG8gZW4gZWwgcGx1Zy1pbiBkZSAqKkJldHRlciBCaWIgVGV4KiopLiBFc3RvIHNlIHRyYWR1Y2UgZW4gdW4gbnVldm8gYXJjaGl2byBjb24gZXh0ZW5zacOzbiBgLmJpYmAuXAoKUGFyYSBlbGxvLCBwcmltZXJvIHNlIGRlYmUgc2VsZWNjaW9uYXIgbGEgY29sZWNjacOzbiBkZSBvYnJhcyBzZWxlY2Npb25hZGFzIGVuIFpvdGVyby4KCmBgYHtyLCBlY2hvPUZBTFNFLCBvdXQud2lkdGg9IjkwJSIsIGZpZy5jYXA9IkV4cG90YXIgbGEgY29sZWNjacOzbiBkZXNlYWRhIGVuIFpvdGVyby4ifQprbml0cjo6aW5jbHVkZV9ncmFwaGljcygiem90ZXJvMS5wbmciKQpgYGAKClBvc3Rlcmlvcm1lbnRlIHNlIGRlYmUgc2VsZWNjaW9uYXIgZWwgZm9ybWF0byBkZSBgQmV0dGVyQmliVGV4YCBwYXJhIHN1IGV4cG9ydGFjacOzbiwgYXPDrSBjb21vIHRhbWJpw6luIHNlIHJlY29taWVuZGEgc2VsZWNjaW9uYXIgbGEgY2FzaWxsYSBxdWUgcGVybWl0ZSBtYW50ZW5lciBhY3R1YWxpemFkYSBkaWNoYSBjb2xlY2Npw7NuIGV4cG9ydGFkYS4KCmBgYHtyLCBlY2hvPUZBTFNFLCBvdXQud2lkdGg9IjkwJSIsIGZpZy5jYXA9IlNlbGVjY2nDs24gZGVsIGZvcm1hdG8gQmV0dGVyQmliVGV4IGFjdHVhbGl6YWRvLiJ9CmtuaXRyOjppbmNsdWRlX2dyYXBoaWNzKCJ6b3Rlcm8yLnBuZyIpCmBgYAoKCkFsIGNyZWFyIGVsIGFyY2hpdm8sIGVzIGltcG9ydGFudGUgc2VsZWNjaW9uYXIgbGEgb3BjacOzbiBkZSBab3Rlcm8gcXVlIHBlcm1pdGUgYWN0dWFsaXphciBjb25zdGFudGVtZW50ZSBhbCBhcmNoaXZvIGAuYmliYC4gRXN0byBwZXJtaXRpcsOhIGluY2x1aXIgZW4gw6lzdGUgw7psdGltbyBsYXMgcmVmZXJlbmNpYXMgcXVlIHNlYW4gZ3VhcmRhZGFzIGVuIFpvdGVybyBwb3N0ZXJpb3JtZW50ZSBhIGxhIGNyZWFjacOzbiBkZWwgYXJjaGl2byBgLmJpYmAuXApVbmEgdmV6IGNyZWFkbyBlbCBhcmNoaXZvIGRlIGxhcyByZWZlcmVuY2lhcyBiaWJsaW9ncsOhZmljYXMsIGRlYmUgZ3VhcmRhcnNlIGVuIGxhIG1pc21hIGNhcnBldGEgZW4gbGEgcXVlIHNlIGVuY3VlbnRyYSBlbCBkb2N1bWVudG8gKiouUm1kKiouXAoKYGBge3IsIGVjaG89RkFMU0UsIG91dC53aWR0aD0iOTAlIiwgZmlnLmNhcD0iU2VsZWNjacOzbiBkZSBsYSBjYXJwZXRhIHBhcmEgZ3VhcmRhciBlbCBhcmNoaXZvIGNvbiBleHRlbnNpw7NuICcuYmliJy4ifQprbml0cjo6aW5jbHVkZV9ncmFwaGljcygiem90ZXJvMy5wbmciKQpgYGAKClBvc3Rlcmlvcm1lbnRlLCBlbCBhcmNoaXZvICoqLmJpYioqIGRlYmUgc2VyICpsbGFtYWRvKiBkZXNkZSBlbCAqKllBTUwqKiBkZSBSIE1hcmtkb3duIHBhcmEgcXVlIGVzdMOpIGRpc3BvbmlibGUgeSBzZSBwdWVkYW4gdXRpbGl6YXIgbGFzIHJlZmVyZW5jaWFzIGNvbnRlbmlkYXMuIEVsIHNjcmlwdCBkZW50cm8gZGVsIFlBTUwgcGFyYSBsbGFtYXIgYWwgbGlzdGFkbyBkZSByZWZlcmVuY2lhcyBlcyBgYmlibGlvZ3JhcGh5OiBub21icmUuYmliYC4gUG9yIGVqZW1wbG86CgpgYGAKLS0tCm91dHB1dDogaHRtbF9kb2N1bWVudApiaWJsaW9ncmFwaHk6IG1ldG9kb2xvZ2lhLmJpYiAgCi0tLQpgYGAKCgojIyMgNS4yLiBEZWZpbmljacOzbiBkZWwgZXN0aWxvIGRlIGNpdGFjacOzbiAoYXJjaGl2byAiLmNzbCIpLgoKUGFyYSBkYXJsZSBmb3JtYXRvIGEgbGFzIHJlZmVyZW5jaWFzIGluc2VydGFkYXMgZW4gZWwgZG9jdW1lbnRvIHJlcXVpZXJlIHV0aWxpemFyIHVuIGFyY2hpdm8gY29uIGV4dGVuc2nDs24gYC5jc2xgLCBxdWUgY29udGllbmUgbGEgaW5mb3JtYWNpw7NuIG5lY2VzYXJpYSBwYXJhIGNhZGEgdW5vIGRlIGxvcyBlc3RpbG9zIGRlIGNpdGFjacOzbi5cCkVzdG9zIGFyY2h2aW9zIGAuY3NsYCBwdWVkZW4gc2VyIGNyZWFkb3MgcG9yIGVsIGF1dG9yIG8gdGFtYmnDqW4gcHVlZGVuIHNlciBpbXBvcnRhZG9zLiDDiXN0YSDDumx0aW1hIG9wY2nDs24gZXMgbGEgbcOhcyAiZsOhY2lsIiBkZSBsbGV2YXIgYSBjYWJvLlwKWm90ZXJvIGN1ZW50YSBjb24gdW4gcmVwb3NpdG9yaW8gZGUgYXJjaGl2b3MgYC5jc2xgIHF1ZSBzZSBwdWVkZW4gaW1wb3J0YXIuIEVzdGUgc2UgZW5jdWVudHJhIGVuIDxodHRwczovL3d3dy56b3Rlcm8ub3JnL3N0eWxlcz4uXApQb3IgZWplbXBsbywgZW4gZWwgY2FzbyBkZSBkZXNlYXIgdHJhYmFqYXIgY29uIGVsIGVzdGlsbyBkZSBsYSBBbWVyaWNhbiBQc3ljaG9sb2d5IEFzc29jaWF0aW9uIChBUEEpLCBzZSBkZWJlIGltcG9ydGFyIGVsIGFyY2hpdm8gYGFwYS5jc2xgLlwKRXMgaW1wb3J0YW50ZSBxdWUgZWwgYXJjaGl2byBzZSBlbmN1ZW50cmUgdWJpY2FkbyBlbiBsYSBtaXNtYSBjYXJwZXRhIGRvbmRlIHNlIGVuY3VlbnRyYSBndWFyZGFkbyBlbCBkb2N1bWVudG8gKiouUm1kKiosIFBvc3Rlcmlvcm1lbnRlLCBlbCBhcmNoaXZvIGBhcGEuY3NsYCBzZSBtYW5kYSBhICpsbGFtYXIqIGRlc2RlIGVsICoqWUFNTCoqIGNvbiBlbCBzY3JpcHQgYGNzbDogYXBhLmNzbGAuCgpgYGAKLS0tCm91dHB1dDogaHRtbF9kb2N1bWVudApiaWJsaW9ncmFwaHk6IHJlZmVyZW5jZXMuYmliCmNzbDogYXBhLmNzbAotLS0KYGBgCgpVbmEgdmV6IHF1ZSBzZSBjdWVudGEgY29uIGVsIGFyY2hpdm8gZW4gZm9ybWF0byBgLmJpYmAgY29uIGVsIGxpc3RhZG8gZGUgbGFzIG9icmFzIGEgcmVmZXJlbmNpYXMsIGFzw60gY29tbyBjb24gZWwgYXJjaGl2byBlbiBmb3JtYXRvIGAuY3NsYCwgcXVlIGNvbnRpZW5lIGxhIGVzdHJ1Y3R1cmEgZGVsIGVzdGlsbyBkZSBjaXRhY2nDs24gYSB1dGlsaXphciwgeWEgc2UgZXN0w6EgbGlzdG8gcGFyYSBjb21lbnphciBsYSBpbnNlcmNpw7NuIGRlIHJlZmVyZW5jaWFzIGJpYmxpb2dyw6FmaWNhcyBhc8OtIGNvbW8gcGFyYSBpbnRlZ3JhciBlbCBsaXN0YWRvIGJpYmxpb2dyw6FmaWNvcyBlbiBlbCAqKm91dHB1dCoqLgoKCiMjIyA1LjMuIEluc2VyY2nDs24gZGUgcmVmZXJlbmNpYXMgZW4gZWwgdGV4dG8uCgpQYXJhIGluc2VydGFyIHVuYSByZWZlcmVuY2lhIHNlIHV0aWxpemEgZWwgc8OtbWJvbG8gYEBrZXlgIHkgc2UgZXNjcmliZSBlbCBub21icmUgcXVlIGVsIHNpc3RlbWEgbGUgYXNpZ27DsyBhIGNhZGEgcmVmZXJlbmNpYS4gRWwgYEBrZXlgIHNlIHJlZmllcmUgYWwgbm9tYnJlIHF1ZSBsZSBhc2lnbmEgYXV0b23DoXRpY2FtZW50ZSBlbCBsaXN0YWRvIGRlIEJpYlRleC5cCkV4aXN0ZW4gdmFyaWFzIG1hbmVyYXMgZGUgaW5zZXJ0YXIgdW5hIHJlZmVyZW5jaWEgYmlibGlvZ3LDoWZpY2EgZW4gZWwgdGV4dG86CgoxLiAgSW5zZXJ0YXIgdW5hIHNvbGEgb2JyYSBlbiB1bmEgcmVmZXJlbmNpYS4KRW4gY2FzbyBkZSBpbnNlcnRhciB1bmEgcmVmZXJlbmNpYSBjb24gdW4gc29sbyBhdXRvciwgZW50cmUgcGFyw6ludGVzaXM6CmBbQGtleV1gCgoyLiAgSW5zZXJ0YXIgbcOhcyBkZSB1bmEgb2JyYSBlbiB1bmEgcmVmZXJlbmNpYS4KRW4gY2FzbyBkZSBpbnNlcnRhciB1bmEgcmVmZXJlbmNpYSBjb24gbcOhcyBkZSB1biBhdXRvciwgZW50cmUgcGFyw6ludGVzaXM6CmBbQGtleTE7IEBrZXkyXWAKCjMuICBJbnNlcnRhciBub21icmUgZGUgYXV0b3IgZW4gdGV4dG8geSBhw7FvIGVudHJlIHBhcsOpbnRlc2lzLgpFbiBjYXNvIGRlIGluc2VydGFyIGVsIGFwZWxsaWRvIGRlbCBhdXRvciBlbiBlbCB0ZXh0bywgZWwgYcOxbyBkZSBsYSBvYnJhIGFwYXJlY2Vyw6EgZW50cmUgcGFyw6ludGVzaXM6CmBAa2V5YAoKNC4gIEluc2VydGFyIGHDsW8gZW50cmUgcGFyw6ludGVzaXMgeSBleGNsdWlyIG5vbWJyZSBkZSBhdXRvci4KRW4gY2FzbyBkZSBpbnNlcnRhciBlbCBhw7FvIGRlIGxhIG9icmEgZW4gbGEgcmVmZXJlbmNpYSBlbnRyZSBwYXLDqW50ZXNpcyB5IGV4Y2x1aXIgZWwgbm9tYnJlIGRlbCBhdXRvcjoKYFstQGtleV1gCgo1LiAgSW5zZXJ0YXIgdW5hIG9icmEgeSBkZWZpbmlyIGxhcyBww6FnaW5hcyBjb25zdWx0YWRhcy4KYFtAa2V5LCBww6FnLiAxMjNdYAoKIyMjIDUuNC4gSW5jbHVpciBzZWNjacOzbiBkZWwgbGlzdGFkbyBiaWJsaW9ncsOhZmljbwoKVHJhcyBpbnNlcnRhciBsYXMgcmVmZXJlbmNpYXMsIFIgTWFya2Rvd24gY29uc3RydXllIGVsIGxpc3RhZG8gYmlibGlvZ3LDoWZpY28gb3JkZW5hZG8gYWxmYWLDqXRpY2FtZW50ZS4gU2luIGVtYmFyZ28gc2UgcmVxdWllcmUgY3JlYXIgdW5hIHNlY2Npw7NuIGVzcGVjw61maWNhIHBhcmEgZWxsbyBwdWVzIGVsIHByb2dyYW1hIG5vIGRpc3Rpbmd1ZSBwb3Igc8OtCnNvbG8gZWwgZXNwYWNpbyBlbiBlbCBkb2N1bWVudG8gcGFyYSBpbmNsdWlybG8uXApQYXJhIGVsbG8gZXMgbmVjZXNhcmlvIGluY2x1aXIgdW4gKipzdWJhcGFydGFkbyoqIChtZWRpYW50ZSBlbCB1c28gZGUgYCMjYCkgYWwgZmluYWwgZGVsIGRvY3VtZW50bywgcGFydGlyIGRlIGHDsWFkaXIgbG9zIHNpZ25vcyBkZSBudW1lcmFsZXMgcGVydGluZW50ZXMgYXPDrSBjb21vIGVsIHTDrXR1bG8gImJpYmxpb2dyw6Fmw61hIiBvIGNvcnJlc3BvbmRpZW50ZS4gWSBkaWNoYSBzZWNjacOzbiBkZWJlIGVzdGFyIHZhY8OtYS4gRGUgZXN0YSBtYW5lcmEgUiBNYXJrZG93biBpZGVudGlmaWNhcsOhIHF1ZSBlc2UgZXMgZWwgZXNwYWNpbyBkb25kZSBpbmNsdWlyw6EgbGEgaW5mb3JtYWNpw7NuIGRlbCBsaXN0YWRvIGJpYmxpb2dyw6FmaWNvIGRlIGxhIG9icmEuCgpgYGAKRmluYWwgZGVsIHRleHRvLgoKIyMgQmlibGlvZ3JhZsOtYQooZXNwYWNpbyB2YWPDrW8pCgpgYGAKCiMjIDYuIFBsYW50aWxsYXMgZGUgYXJ0w61jdWxvcyBjaWVudMOtZmljb3MgY29uIGBkaXN0aWxsKClgLCBgcnRpY2xlcygpYCB5IGBwYXBhamEoKWAuCgpDb24gZWwgZm9ydGFsZWNpbWllbnRvIGRlbCBjcml0ZXJpbyBkZSAiY2llbmNpYSBhYmllcnRhIiB5IGVsIGF1bWVudG8gZGUgcmVjdXJzb3MgdGVjbm9sw7NnaWNvcyBwYXJhIGNvbXBhcnRpciBsb3MgZWxlbWVudG9zIGRlIGxhIGludmVzdGlnYWNpw7NuIGNpZW50w61maWNhLCBob3kgZW4gZMOtYSBzZSBjdWVudGEgY29uIGxhIHBvc2liaWxpZGFkIGRlIGhhY2VyIHDDumJsaWNvcyB5YSBubyBzb2xvIGxvcyByZXN1bHRhZG9zIGRlIHVuIGFuw6FsaXNpcywgc2lubyB0YW1iacOpbiBsb3MgZGF0b3MgdXRpbGl6YWRvcyBhc8OtIGNvbW8gbG9zIGPDs2RpZ29zIGRlIFIgZWxhYm9yYWRvcyB5LCBhZGVtw6FzLCBlbCBjb250ZW5pZG8gZGUgbG9zIHRleHRvcy4gRW4gZXN0ZSBzZW50aWRvLCBlbCBmb3JtYXRvIGRlIGAuUm1kYCBzZSBoYSB2dWVsdG8gbXV5IMO6dGlsIHBhcmEgcGVybWl0aXIgcXVlIHRvZG9zIGVzdG9zIGVsZW1lbnRvcyBkZSB1biBkb2N1bWVudG8gZGUgYW7DoWxpc2lzIGRlIGRhdG9zIHNlIHB1ZWRhIGNvbXBhcnRpciBkZSBtYW5lcmEgYWJpZXJ0YSBhbCBww7pibGljby5cClBhcmEgZWxsbyBzZSBjdWVudGEsIGFkZW3DoXMsIGNvbiB2YXJpYXMgbGlicmVyw61hcyBxdWUgcGVybWl0ZW4gc2lzdGVtYXRpemFyIGxhcyBlc3RydWN0dXJhcyBkZSBsb3MgZG9jdW1lbnRvcyBkZSBgLlJtZGAsIGVuIGRvbmRlIHVuIGF1dG9yIHNvbG8gZGViZSBhanVzdGFyIHN1IGNvbnRlbmlkbyBhIGRpY2hhcyBwbGFudGlsbGFzIHksIGRlIGVzYSBtYW5lcmEsIHN1IHByZW9jdXBhY2nDs24gc2UgY2VudHJlIGVuIGxhIHJlZGFjY2nDs24gZGVsIHRleHRvIHkgZW4gbGEgZWxhYm9yYWNpw7NuIGRlIGPDs2RpZ29zIHkgcmVzdWx0YWRvcyBkZWwgYW7DoWxpc2lzIGRlIGxvcyBkYXRvcy5cCkVudHJlIGxhcyBsaWJyZXLDrWFzIHF1ZSBzZSByZXZpc2Fyw6FuIGEgY29udGludWFjacOzbiBzZSBlbmN1ZW50cmFuIGxhcyBkZSAnZGlzdGlsbCgpYCwgYHJ0aWNsZXNgIHkgYHBhcGFqYSgpYC4gTGFzIHByaW1lcmFzIGRvcyBsaWJyZXLDrWFzIHNlIHB1ZWRlbiBpbnN0YWxhciBkZXNkZSBlbCBDUkFOIGRlIFIgeSBSIFN0dWRpbzoKCmBgYAppbnN0YWxsLnBhY2thZ2VzKCJkaXN0aWxsIikKaW5zdGFsbC5wYWNrYWdlcygicnRpY2xlcyIpCmBgYApFbiBlbCBjYXNvIGRlIGxhIGxpYnJlcsOtYSBkZSBgcGFwYWphKClgLCBzdSBpbnN0YWxhY2nDs24gc2UgZGViZSByZWFsaXphciBkaXJlY3RhbWVudGUgZGVzZGUgZWwgcmVwb3NpdG9yaW8gZGVsIGRpc2XDsWFkb3IuIEVzdGUgcHJvY2VzbyByZXF1aWVyZSBhcG95YXJzZSBlbiBvdHJhIHBhcXVldGVyw61hIGRlbm9taW5hZGEgYGRldnRvb2xzKClgLlwKRW4gY2FzbyBkZSBubyBjb250YXIgcHJldmlhbWVudGUgY29uIGBkZXZ0b29scygpYCwgdW5hIG1hbmVyYSBwYXJhIGluc3RhbGFybG8gZXM6CgpgYGAKaWYoISJkZXZ0b29scyIgJWluJSByb3duYW1lcyhpbnN0YWxsZWQucGFja2FnZXMoKSkpIGluc3RhbGwucGFja2FnZXMoImRldnRvb2xzIikKYGBgCgpQb3N0ZXJpb3JtZW50ZSBzZSBwdWVkZSBpbnN0YWxhciBgcGFwYWphKClgIGRlc2RlIEdpdEh1YiBkZSBsYSBzaWd1aWVudGUgbWFuZXJhOgoKYGBgCmRldnRvb2xzOjppbnN0YWxsX2dpdGh1YigiY3JzaC9wYXBhamEiKQpgYGAKCiMjIyA2LjEuIERvY3VtZW50b3MgZW4gZm9ybWF0byAqKkFQQSoqIGNvbiBgcGFwYWphKClgLgoKTGEgbGlicmVyw61hIGBwYXBhamEoKWAgZnVlIGRpc2XDsWFkYSBwYXJhIGZhY2lsaXRhciBlbCBkaXNlw7FvIGRlIGRvY3VtZW50b3MgZGUgc2FsaWRhIGJham8gZWwgZm9ybWF0byBlc3RhYmxlY2lkbyBwb3IgbGEgQW1lcmljYW4gUHN5Y2hvbG9neSBBc3NvY2lhdGlvbiAoQVBBKSwgeSBhY3R1YWxtZW50ZSBsYSBwYXF1ZXRlcsOtYSB0b21hIGVuIGNvbnNpZGVyYWNpw7NuIGxhcyBndcOtYXMgZXN0YWJsZWNpZGFzIGVuIGxhIDZhIGVkaWNpw7NuLlwKRW4gbGEgW3DDoWdpbmEgd2ViIGRlIGBwYXBhamEoKWBdKGh0dHBzOi8vd3d3LnJkb2N1bWVudGF0aW9uLm9yZy9wYWNrYWdlcy9wYXBhamEvdmVyc2lvbnMvMC4xLjAuOTk5Nykgc2UgZW5jdWVudHJhLCBhZGVtw6FzLCB1biBjb25qdW50byBkZSBjb21hbmRvIHF1ZSwgYSBzdSB2ZXosIHBlcm1pdGVuIGFqdXN0YXIgbGEgbWFuZXJhIGRlIGluc2VydGFyIHRhYmxhcyB5IGdyw6FmaWNvcywgYXPDrSBjb21vIGxhIHByZXNlbnRhY2nDs24gZGUgbG9zIHJlc3VsdGFkb3MgZGUgbG9zIGFuw6FsaXNpcyBkZSBkYXRvcy5cClBhcmEgY29tZW56YXIgYSB1dGlsaXphciBsYSBwbGFudGlsbGEgZGUgdGV4dG8gZW4gZm9ybWF0byBBUEEgNmEgZWRpY2nDs24gZW4gYmFzZSBhIGBwYXBhamEoKWAsIGVzdG8gc2UgZGVmaW5lIGFsIG1vbWVudG8gZGUgYWJyaXIgdW4gbnVldm8gZG9jdW1lbnRvIGVuIGZvcm1hdG8gYC5SbWRgLiBFbiBsYSB2ZW50YW5hIGVtZXJnZW50ZSBwYXJhIGRlZmluaXIgYWwgbnVldm8gYXJjaGl2byBkZSBgLlJtZGAgc2Ugc2VsZWNjaW9uYSBsYSBvcGNpw7NuIGRlICpwbGFudGlsbGFzKiBvICpGcm9tIFRlbXBsYXRlKiwgeSBzZSBsb2NhbGl6YSBlbCBub21icmUgZGUgbGEgcGxhbnRpbGxhICoqQVBBIGFydGljbGUgKDZ0aCBlZGl0aW9uKSB7cGFwYWphfSoqLgoKYGBge3IsIGVjaG89RkFMU0UsIG91dC53aWR0aD0iOTAlIiwgZmlnLmNhcD0iU2VsZWNjacOzbiBkZSBsYSBwbGFudGlsbGEgZGUgdW4gZG9jdW1lbnRvIGVuIGZvcm1hdG8gQVBBIDZhLiBlZGljacOzbiBjb24gYHBhcGFqYSgpYC4ifQprbml0cjo6aW5jbHVkZV9ncmFwaGljcygicGFwYWphLnBuZyIpCmBgYAoKRWwgcmVzdWx0YWRvIHF1ZSBhcnJvamEgZXN0YSBzZWxlY2Npw7NuIGNvbnNpc3RlIGVuIGxhIGFwZXJ0dXJhIGRlIHVuIGRvY3VtZW50byBudWV2byBkZSBgLlJtZGAgY29uIHVuYSBlc3RydWN0dXJhIHBhcnRpY3VsYXIgZW4gZWwgKipZQU1MKiogYXPDrSBjb21vIGVuIHRvcm5vIGEgbGEgZXN0cnVjdHVyYWNpw7NuIGRlbCBjb250ZW5pZG8gZGVsIHRleHRvIGFzw60gY29tbyBkZSBsb3MgImNodW5rcyIuXApQb3IgZWplbXBsbywgbGEgZXN0cnVjdHVyYSBkZWwgKipZQU1MKiogZXMgbGEgc2lndWllbnRlOgoKYGBgCi0tLQp0aXRsZSAgICAgICAgICAgICA6ICJUaGUgdGl0bGUiCnNob3J0dGl0bGUgICAgICAgIDogIlRpdGxlIgoKYXV0aG9yOiAKICAtIG5hbWUgICAgICAgICAgOiAiRmlyc3QgQXV0aG9yIgogICAgYWZmaWxpYXRpb24gICA6ICIxIgogICAgY29ycmVzcG9uZGluZyA6IHllcyAgICAjIERlZmluZSBvbmx5IG9uZSBjb3JyZXNwb25kaW5nIGF1dGhvcgogICAgYWRkcmVzcyAgICAgICA6ICJQb3N0YWwgYWRkcmVzcyIKICAgIGVtYWlsICAgICAgICAgOiAibXlAZW1haWwuY29tIgogICAgcm9sZTogICAgICAgICAjIENvbnRyaWJ1dG9yc2hpcCByb2xlcyAoZS5nLiwgQ1JlZGlULCBodHRwczovL2Nhc3JhaS5vcmcvY3JlZGl0LykKICAgICAgLSBDb25jZXB0dWFsaXphdGlvbgogICAgICAtIFdyaXRpbmcgLSBPcmlnaW5hbCBEcmFmdCBQcmVwYXJhdGlvbgogICAgICAtIFdyaXRpbmcgLSBSZXZpZXcgJiBFZGl0aW5nCiAgLSBuYW1lICAgICAgICAgIDogIkVybnN0LUF1Z3VzdCBEb2VsbGUiCiAgICBhZmZpbGlhdGlvbiAgIDogIjEsMiIKICAgIHJvbGU6CiAgICAgIC0gV3JpdGluZyAtIFJldmlldyAmIEVkaXRpbmcKCmFmZmlsaWF0aW9uOgogIC0gaWQgICAgICAgICAgICA6ICIxIgogICAgaW5zdGl0dXRpb24gICA6ICJXaWxoZWxtLVd1bmR0LVVuaXZlcnNpdHkiCiAgLSBpZCAgICAgICAgICAgIDogIjIiCiAgICBpbnN0aXR1dGlvbiAgIDogIktvbnN0YW56IEJ1c2luZXNzIFNjaG9vbCIKCmF1dGhvcm5vdGU6IHwKICBBZGQgY29tcGxldGUgZGVwYXJ0bWVudGFsIGFmZmlsaWF0aW9ucyBmb3IgZWFjaCBhdXRob3IgaGVyZS4gRWFjaCBuZXcgbGluZSBoZXJlaW4gbXVzdCBiZSBpbmRlbnRlZCwgbGlrZSB0aGlzIGxpbmUuCgogIEVudGVyIGF1dGhvciBub3RlIGhlcmUuCgphYnN0cmFjdDogfAogIE9uZSBvciB0d28gc2VudGVuY2VzIHByb3ZpZGluZyBhICoqYmFzaWMgaW50cm9kdWN0aW9uKiogdG8gdGhlIGZpZWxkLCAgY29tcHJlaGVuc2libGUgdG8gYSBzY2llbnRpc3QgaW4gYW55IGRpc2NpcGxpbmUuCiAgCiAgVHdvIHRvIHRocmVlIHNlbnRlbmNlcyBvZiAqKm1vcmUgZGV0YWlsZWQgYmFja2dyb3VuZCoqLCBjb21wcmVoZW5zaWJsZSAgdG8gc2NpZW50aXN0cyBpbiByZWxhdGVkIGRpc2NpcGxpbmVzLgogIAogIE9uZSBzZW50ZW5jZSBjbGVhcmx5IHN0YXRpbmcgdGhlICoqZ2VuZXJhbCBwcm9ibGVtKiogYmVpbmcgYWRkcmVzc2VkIGJ5ICB0aGlzIHBhcnRpY3VsYXIgc3R1ZHkuCiAgCiAgT25lIHNlbnRlbmNlIHN1bW1hcml6aW5nIHRoZSBtYWluIHJlc3VsdCAod2l0aCB0aGUgd29yZHMgIioqaGVyZSB3ZSBzaG93KioiIG9yIHRoZWlyIGVxdWl2YWxlbnQpLgogIAogIFR3byBvciB0aHJlZSBzZW50ZW5jZXMgZXhwbGFpbmluZyB3aGF0IHRoZSAqKm1haW4gcmVzdWx0KiogcmV2ZWFscyBpbiBkaXJlY3QgY29tcGFyaXNvbiB0byB3aGF0IHdhcyB0aG91Z2h0IHRvIGJlIHRoZSBjYXNlIHByZXZpb3VzbHksIG9yIGhvdyB0aGUgIG1haW4gcmVzdWx0IGFkZHMgdG8gcHJldmlvdXMga25vd2xlZGdlLgogIAogIE9uZSBvciB0d28gc2VudGVuY2VzIHRvIHB1dCB0aGUgcmVzdWx0cyBpbnRvIGEgbW9yZSAqKmdlbmVyYWwgY29udGV4dCoqLgogIAogIFR3byBvciB0aHJlZSBzZW50ZW5jZXMgdG8gcHJvdmlkZSBhICoqYnJvYWRlciBwZXJzcGVjdGl2ZSoqLCByZWFkaWx5IGNvbXByZWhlbnNpYmxlIHRvIGEgc2NpZW50aXN0IGluIGFueSBkaXNjaXBsaW5lLgogIAogIDwhLS0gaHR0cHM6Ly90aW55dXJsLmNvbS95YnJlbWVscSAtLT4KICAKa2V5d29yZHMgICAgICAgICAgOiAia2V5d29yZHMiCndvcmRjb3VudCAgICAgICAgIDogIlgiCgpiaWJsaW9ncmFwaHkgICAgICA6IFsici1yZWZlcmVuY2VzLmJpYiJdCgpmbG9hdHNpbnRleHQgICAgICA6IG5vCmZpZ3VyZWxpc3QgICAgICAgIDogbm8KdGFibGVsaXN0ICAgICAgICAgOiBubwpmb290bm90ZWxpc3QgICAgICA6IG5vCmxpbmVudW1iZXJzICAgICAgIDogeWVzCm1hc2sgICAgICAgICAgICAgIDogbm8KZHJhZnQgICAgICAgICAgICAgOiBubwoKZG9jdW1lbnRjbGFzcyAgICAgOiAiYXBhNiIKY2xhc3NvcHRpb24gICAgICAgOiAibWFuIgpvdXRwdXQgICAgICAgICAgICA6IHBhcGFqYTo6YXBhNl9wZGYKLS0tCmBgYAoKIyMjIDYuMi4gQXJ0w61jdWxvcyBjaWVudMOtZmljb3MgY29uIGBkaXN0aWxsKClgLgoKTGEgcGFxdWV0ZXLDrWEgYGRpc3RpbGwoKWAgY29uc2lzdGUgZW4gdW5hIHBsYW50aWxsYSBiw6FzaWNhIHBhcmEgbGEgY29uc3RydWNjacOzbiBkZSB1biBhcnTDrWN1bG8gY2llbnTDrWZpY28uIEVzdGUgZm9ybWF0byBwZXJtaXRlIGludGVncmFyIHRhbnRvIHRleHRvLCBzaWdub3MgbWF0ZW3DoXRpY29zIGRlc2RlICJMYVRleCIsIGNpdGFjaW9uZXMgeSBwaWVzIGRlIHDDoWdpbmEsIGdyw6FmaWNvcyB5IHRhYmxhcyBkZSBjb250ZW5pZG8sIGVudHJlIG90cm9zIGVsZW1lbnRvcyBxdWUgbGVzIHNvbiBjYXJhY3RlcsOtc3RpY29zLiBFbiBsYSBbcMOhZ2luYSB3ZWIgZGUgYGRpc3RpbGwoKWBdKGh0dHBzOi8vcnN0dWRpby5naXRodWIuaW8vZGlzdGlsbC8pIHNlIHB1ZWRlbiByZXZpc2FyIGNvbiBkZXRhbGxlcyB0b2RvcyBsb3MgZWxlbWVudG9zIHF1ZSBzZSBwdWVkZW4gY29uZmlndXJhci5cCkxhIG1hbmVyYSBkZSBhYnJpciB1bmEgcGxhbnRpbGxhIGRlc2RlIGBkaXN0aWxsKClgIGNvbnNpc3RlIGVuIHNlbGVjY2lvbmFyIGVzdGUgdGlwbyBkZSBkb2N1bWVudG8gZGVzZGUgbGEgdmVudGFuYSBlbWVyZ2VudGUgZG9uZGUgc2UgYWJyZW4gbG9zIG51ZXZvcyBkb2N1bWVudG9zIGAuUm1kYCwgZGUgbGEgc2lndWllbnRlIG1hbmVyYToKCmBgYHtyLCBlY2hvPUZBTFNFLCBvdXQud2lkdGg9IjkwJSIsIGZpZy5jYXA9IlNlbGVjY2nDs24gZGUgbGEgcGxhbnRpbGxhIGRlIHVuIGFydMOtY3VsbyBjaWVudMOtZmljbyBkZXNkZSBgZGlzdGlsbCgpYC4ifQprbml0cjo6aW5jbHVkZV9ncmFwaGljcygiZGlzdGlsbC5wbmciKQpgYGAKCkEgcGFydGlyIGRlIGVzdGEgcGxhdGlsbGEgZGUgYXJ0w61jdWxvIGNpZW50w61maWNvLCBzZSBhYnJlIHVuYSBudWV2YSB2ZW50YW5hIGRlIHVuIGFyY2hpdm8gZW4gZm9ybWF0byBgLlJtZGAgcXVlIGVzdHJ1Y3R1cmEgdGFudG8gZWwgY29udGVuaWRvIGRlbCB0ZXh0bywgYXPDrSBjb21vIGRlIGxvcyAiY2h1bmtzIi4gTWllbnRyYXMgcXVlIGxhIGVzdHJ1Y3R1cmEgZGVsICoqWUFNTCoqIHNlcsOhIGxhIHNpZ3VpZW50ZToKCmBgYAotLS0KdGl0bGU6ICJEaXN0aWxsIGZvciBSIE1hcmtkb3duIgpkZXNjcmlwdGlvbjogfCAKICBTY2llbnRpZmljIGFuZCB0ZWNobmljYWwgd3JpdGluZywgbmF0aXZlIHRvIHRoZSB3ZWIKZGF0ZTogTWF5IDQsIDIwMTgKYXV0aG9yOgogIC0gZmlyc3RfbmFtZTogIllpaHVpIgogICAgbGFzdF9uYW1lOiAiWGllIgogICAgdXJsOiBodHRwczovL2dpdGh1Yi5jb20veWlodWkKICAgIGFmZmlsaWF0aW9uOiBSU3R1ZGlvCiAgICBhZmZpbGlhdGlvbl91cmw6IGh0dHBzOi8vd3d3LnJzdHVkaW8uY29tCiAgICBvcmNpZF9pZDogMDAwMC0wMDAzLTA2NDUtNTY2NgogIC0gbmFtZTogIkpKIEFsbGFpcmUiCiAgICB1cmw6IGh0dHBzOi8vZ2l0aHViLmNvbS9qamFsbGFpcmUKICAgIGFmZmlsaWF0aW9uOiBSU3R1ZGlvCiAgICBhZmZpbGlhdGlvbl91cmw6IGh0dHBzOi8vd3d3LnJzdHVkaW8uY29tCiAgLSBuYW1lOiAiUmljaCBJYW5ub25lIgogICAgdXJsOiBodHRwczovL2dpdGh1Yi5jb20vcmljaC1pYW5ub25lCiAgICBhZmZpbGlhdGlvbjogUlN0dWRpbwogICAgYWZmaWxpYXRpb25fdXJsOiBodHRwczovL3d3dy5yc3R1ZGlvLmNvbQpiaWJsaW9ncmFwaHk6IGJpYmxpby5iaWIKb3V0cHV0OiBkaXN0aWxsOjpkaXN0aWxsX2FydGljbGUKLS0tCmBgYAoKIyMjIDYuMy4gQXJ0w61jdWxvcyBjaWVudMOtZmljb3MgcGFyYSBkaXZlcnNhcyBlZGl0b3JpYWxlcyBkZXNkZSBgcnRpY2xlcygpYC4KCkZpbmFsbWVudGUsIGxhIHBhcXVldGVyw61hIGBydGljbGVzKClgIHNlIGhhIHZ1ZWx0byBtdXkgw7p0aWwgcGFyYSBsYSBwcm9kdWNjacOzbiBkZSBhcnTDrWN1bG9zIHF1ZSBzZSBhanVzdGVuIGRpcmVjdGFtZW50ZSBhIGxhcyBuZWNlc2lkYWRlcyBkZSBkaXZlcnNhcyBlZGl0b3JpYWxlcywgY29tbyBwb3IgZWplbXBsbzogRWxzZXZpZXIsIE94Zm9yZCBVbml2ZXJzaXR5IFByZXNzLCBQTE9TLCBTQUdFLCBUYXlsb3MgJiBGcmFuY2lzLCBlbnRyZSBvdHJhcyBwdWJsaWNhY2lvbmVzIGVzcGVjw61maWNhcy4gRGUgbWFuZXJhIG3DoXMgZGV0YWxsYWRhIHNlIHB1ZWRlIHJldmlzYXIgZXN0ZSBsaXN0YWRvIGVuIGxhIFtww6FnaW5hIGRlIGxhIGxpYnJlcsOtYV0oaHR0cHM6Ly9naXRodWIuY29tL3JzdHVkaW8vcnRpY2xlcykuXApMYSBtYW5lcmEgcGFyYSByZXZpc2FyIHkgc2VsZWNjaW9uYXIgbGEgcGxhbnRpbGxhIGRlbCBhcnTDrWN1bG8gYSBjb25zdHJ1aXIgZXMgbWVkaWFudGUgbGEgYXBlcnR1cmEgZGUgbGEgdmVudGFuYSBlbWVyZ2VudGUgcGFyYSBzb2xpY2l0YXIgdW4gbnVldm8gYXJjaGl2byBlbiBmb3JtYXRvIGAuUm1kYCBkZXNkZSBSIFN0dWRpby4gVHJhcyBzZWxlY2Npb25hciBsYSBhcGVydHVyYSBkZSB1bmEgcGxhbnRpbGxhICgiRnJvbSBUZW1wbGF0ZSIpLCBzZSBwdWVkZSBvYnNlcnZhciBlbCBsaXN0YWRvIGRlIHRvZG9zIGxvcyBmb3JtYXRvcyBkZSBhcnTDrWN1bG9zIGluY2x1aWRvcyBlbiBsYSBsaWJyZXLDrWEgYHJ0aWNsZXMoKWAsIGRlIGxhIHNpZ3VpZW50ZSBmb3JtYToKCmBgYHtyLCBlY2hvPUZBTFNFLCBvdXQud2lkdGg9IjkwJSIsIGZpZy5jYXA9IlNlbGVjY2nDs24gZGUgbGEgcGxhbnRpbGxhIGRlIHVuIGFydMOtY3VsbyBjaWVudMOtZmljbyBkZXNkZSBgcnRpY2xlcygpYC4ifQprbml0cjo6aW5jbHVkZV9ncmFwaGljcygicnRpY2xlcy5wbmciKQpgYGAKCkVsIHJlc3VsdGFkbyBkZSBsYSBzZWxlY2Npw7NuIGRlIGxhIHBsYW50aWxsYSBzZXLDoSB2YXJpYWRvIHNlZ8O6biBlbCB0aXBvIGRlIGFydMOtY3VsbyBzb2xpY2l0YWRvLCB5IGRlIGVzYSBtYW5lcmEgdmFyaWFyw6EsIHBvciBlamVtcGxvLCBsYSBlc3RydWN0dXJhIGRlbCAqKllBTUwqKi4gKHBvciBlbGxvIGFob3JhIG5vIHNlIHByZXNlbnRhIHVuIHJlc3VsdGFkbyBwYXJ0aWN1bGFyKQo=