{
  "cells": [
    {
      "cell_type": "markdown",
      "id": "2f9a33e4",
      "metadata": {
        "id": "2f9a33e4"
      },
      "source": [
        "# EKG-Python: Grafo de conocimiento educativo de programación en Python\n",
        "\n",
        "**Asignatura:** Trabajo de Fin de Máster. Máster Universitario en Investigación en Inteligencia Artificial (UNED)\n",
        "\n",
        "**Autor:** Adrián Bueno Junquero. **Director:** José Luis Fernández Vindel\n",
        "\n",
        "---\n",
        "\n",
        "Este cuaderno documenta en profundidad el sistema EKG-Python, un grafo de conocimiento educativo del\n",
        "dominio de la programación en Python y la arquitectura que lo integra con un modelo de lenguaje masivo mediante\n",
        "generación aumentada por recuperación sobre grafos (GraphRAG) para producir retroalimentación formativa.\n",
        "\n",
        "El proyecto cumple un doble papel, puesto que es a la vez un entregable autónomo de Web Semántica\n",
        "(modelado RDFS/OWL, inferencia, SPARQL, SHACL y enlazado a Wikidata) y el componente de grafo de un\n",
        "Trabajo de Fin de Máster sobre evaluación personalizada en la enseñanza de la programación.\n",
        "\n",
        "A lo largo del documento se alternan celdas de explicación en Markdown con celdas de código funcionales que se ejecutan\n",
        "sobre los artefactos reales del proyecto (`ekg-python-150.ttl`, `shapes-ekg.ttl`, las consultas `*.rq`) y dejan\n",
        "su salida embebida. Las partes que requieren GPU o modelos servidos localmente (el *fine tuning* QLoRA y la generación\n",
        "con LLM) se presentan como explicación, acompañadas de las cifras reales medidas, sin reejecutarse aquí."
      ]
    },
    {
      "cell_type": "markdown",
      "id": "27193a86",
      "metadata": {
        "id": "27193a86"
      },
      "source": [
        "## 1. Resumen del proyecto, pregunta de investigación y objetivos\n",
        "\n",
        "### Pregunta de investigación\n",
        "\n",
        "El proyecto se pregunta si la integración de un grafo de conocimiento educativo (EKG) con un modelo de lenguaje\n",
        "masivo, mediante una arquitectura RAG, puede producir retroalimentación formativa sobre código de programación que\n",
        "sea a la vez fundamentada (anclada en conocimiento curricular verificable y no solo en la fluidez generativa del\n",
        "modelo), explicable (que exponga qué conceptos y relaciones del currículo se han movilizado para cada diagnóstico) y\n",
        "adaptada al nivel del estudiante (sensible a los prerrequisitos que domina o aún no domina).\n",
        "\n",
        "### Objetivos específicos\n",
        "\n",
        "- **O1.** Construir el grafo de conocimiento educativo. Modelar el dominio de la programación introductoria\n",
        "  (conceptos, prerrequisitos, contrastes, temas, ejercicios, errores conceptuales, recursos y perfiles de estudiante)\n",
        "  con los estándares de la Web Semántica (RDF, RDFS, OWL 2, SKOS, SHACL). Umbral declarado en el anteproyecto:\n",
        "  ≥ 150 conceptos y ≥ 400 relaciones, conformidad SHACL e inferencia OWL con valor efectivo.\n",
        "- **O2.** Diseñar e implementar la arquitectura RAG sobre el grafo. Cinco componentes encadenados: analizador de\n",
        "  código por AST, indexador de *embeddings*, motor de recuperación de subgrafos, generador de *prompts* e integración\n",
        "  con un LLM local. Requisito: operar de extremo a extremo en despliegue local, por soberanía y privacidad de los datos.\n",
        "- **O3.** Validar experimentalmente la calidad pedagógica. Comparación de sistemas (con y sin grafo, con y sin\n",
        "  *fine tuning*) mediante una rúbrica de varias dimensiones, con separación estricta entrenamiento / prueba (*held-out*).\n",
        "- **O4.** Desarrollar un módulo de explicabilidad y trazabilidad. Visualización del subgrafo recuperado y marcadores\n",
        "  de procedencia que vinculan cada afirmación con su soporte en el grafo.\n",
        "\n",
        "> **Nota de integridad científica.** Los umbrales del anteproyecto (precisión ≈ 85 %, alucinaciones < 5 %, utilidad\n",
        "> formativa ≥ 4,0/5, trazabilidad ≈ 100 %) son metas declaradas a contrastar, no resultados conseguidos. Las cifras\n",
        "> que se reportan aquí son las realmente medidas, y resultan más modestas."
      ]
    },
    {
      "cell_type": "markdown",
      "id": "2fde1b7d",
      "metadata": {
        "id": "2fde1b7d"
      },
      "source": [
        "### Arquitectura general\n",
        "\n",
        "El sistema se articula en cuatro grandes piezas, que ordenan también la exposición que sigue:\n",
        "\n",
        "1. Grafo educativo (EKG): ontología RDFS/OWL 2 RL en Turtle (`ekg-python-150.ttl`) con TBox, el esquema, y ABox,\n",
        "   los 157 conceptos del dominio. Incluye razonamiento OWL 2 RL, validación SHACL y enlazado a Wikidata por `skos:exactMatch`.\n",
        "2. GraphRAG: enlazador de conceptos por árbol de sintaxis abstracta (AST) del código del estudiante,\n",
        "   recuperación de subgrafos (vectorial más expansión SPARQL) y generación condicionada al subgrafo.\n",
        "3. Afinado QLoRA: especialización de un modelo de código de 7 000 M de parámetros mediante adaptadores de\n",
        "   bajo rango cuantizados a 4 bits, sobre un dataset sintético anclado al grafo.\n",
        "4. Validación con juez: evaluación comparada de cuatro sistemas (A/B/C/D) con juez LLM, contrastada después con\n",
        "   un panel humano de diez anotadores que mide la validez de criterio del juez automático.\n",
        "\n",
        "```\n",
        "  Código Python del estudiante\n",
        "            │\n",
        "            ▼\n",
        "  [1] Analizador AST  ──►  conceptos detectados (IRIs del EKG)\n",
        "            │\n",
        "            ▼\n",
        "  [2] Recuperación de subgrafo  ──►  embeddings (nomic-embed-text) + expansión SPARQL\n",
        "            │                          (prerrequisitos, contrastes, errores, skos:broader)\n",
        "            ▼\n",
        "  [3] Generador de prompt estructurado  ──►  subgrafo serializado + encuadre formativo\n",
        "            │\n",
        "            ▼\n",
        "  [4] LLM local (Ollama)  ──►  retroalimentación + subgrafo de procedencia (explicabilidad)\n",
        "```"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "601440c2",
      "metadata": {
        "id": "601440c2"
      },
      "source": [
        "## 2. El grafo (EKG): carga y estadísticas reales\n",
        "\n",
        "El artefacto principal es `ontologia/ekg-python-150.ttl`, un fichero Turtle que reúne en un mismo documento la TBox\n",
        "(esquema: clases y propiedades con sus `rdfs:domain`/`rdfs:range`) y la ABox (los individuos del dominio).\n",
        "\n",
        "Cargamos el grafo con `rdflib` y calculamos sus estadísticas estructurales: número de enunciados afirmados,\n",
        "clases OWL, propiedades de objeto y de datos, alineamientos a Wikidata y jerarquía SKOS. La salida queda embebida."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 18,
      "id": "307823b2",
      "metadata": {
        "execution": {
          "iopub.execute_input": "2026-06-23T17:17:47.925565Z",
          "iopub.status.busy": "2026-06-23T17:17:47.925565Z",
          "iopub.status.idle": "2026-06-23T17:17:49.076020Z",
          "shell.execute_reply": "2026-06-23T17:17:49.076020Z"
        },
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "307823b2",
        "outputId": "0387f7a1-01db-46b7-e71b-3e48aec03910"
      },
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "escrito: ontologia/ekg-python-150.ttl 71085 bytes\n",
            "escrito: ontologia/shapes-ekg.ttl 6433 bytes\n",
            "escrito: ontologia/ejemplo-invalido.ttl 804 bytes\n",
            "escrito: consultas/01_conceptos_por_tema.rq 388 bytes\n",
            "escrito: consultas/02_inferencia_conceptos.rq 272 bytes\n",
            "escrito: consultas/03_prerrequisitos_transitivos.rq 375 bytes\n",
            "escrito: consultas/05_errores_por_concepto.rq 665 bytes\n",
            "escrito: consultas/06_construct_prereq_directos.rq 205 bytes\n",
            "escrito: consultas/07_diagnostico_envio.rq 761 bytes\n",
            "escrito: consultas/10_jerarquia_skos_estrella.rq 386 bytes\n",
            "\n",
            "Setup Colab completo: datos del proyecto escritos en /content\n"
          ]
        }
      ],
      "source": [
        "# Setup para Google Colab: instala las dependencias del grafo y escribe en el cwd\n",
        "# (./ontologia y ./consultas) los ficheros reales del proyecto, embebidos en base64.\n",
        "# Tras ejecutarla, el notebook funciona de forma autocontenida.\n",
        "!pip install rdflib owlrl pyshacl networkx matplotlib -q\n",
        "\n",
        "import base64, pathlib\n",
        "\n",
        "FICHEROS = {\n",
        "    'ontologia/ekg-python-150.ttl': (\n",
        "        \"QHByZWZpeCBkY3Rlcm1zOiA8aHR0cDovL3B1cmwub3JnL2RjL3Rlcm1zLz4gLg0KQHByZWZpeCBmb2FmOiA8aHR0cDovL3htbG5z\"\n",
        "        \"LmNvbS9mb2FmLzAuMS8+IC4NCkBwcmVmaXggb3dsOiA8aHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjPiAuDQpAcHJlZml4\"\n",
        "        \"IHB5ZWR1OiA8aHR0cHM6Ly93M2lkLm9yZy9la2ctcHl0aG9uL3NjaGVtYSM+IC4NCkBwcmVmaXggcHlyOiA8aHR0cHM6Ly93M2lk\"\n",
        "        \"Lm9yZy9la2ctcHl0aG9uL2lkLz4gLg0KQHByZWZpeCByZGY6IDxodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50\"\n",
        "        \"YXgtbnMjPiAuDQpAcHJlZml4IHJkZnM6IDxodHRwOi8vd3d3LnczLm9yZy8yMDAwLzAxL3JkZi1zY2hlbWEjPiAuDQpAcHJlZml4\"\n",
        "        \"IHNjaGVtYTogPGh0dHA6Ly9zY2hlbWEub3JnLz4gLg0KQHByZWZpeCBza29zOiA8aHR0cDovL3d3dy53My5vcmcvMjAwNC8wMi9z\"\n",
        "        \"a29zL2NvcmUjPiAuDQpAcHJlZml4IHdkOiA8aHR0cDovL3d3dy53aWtpZGF0YS5vcmcvZW50aXR5Lz4gLg0KQHByZWZpeCB4c2Q6\"\n",
        "        \"IDxodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSM+IC4NCg0KcHlyOmFic3RyYWN0X2NsYXNzIGEgcHllZHU6UGFyYWRp\"\n",
        "        \"Z21hIDsNCiAgICByZGZzOmxhYmVsICJBYnN0cmFjdCBiYXNlIGNsYXNzIkBlbiwNCiAgICAgICAgIkNsYXNlIGFic3RyYWN0YSAo\"\n",
        "        \"QUJDKSJAZXMgOw0KICAgIHB5ZWR1OmFOaXZlbERvbWluaW8gcHlyOmF2YW56YWRvIDsNCiAgICBweWVkdTpwZXJ0ZW5lY2VBVGVt\"\n",
        "        \"YSBweXI6VF9wb28gOw0KICAgIHB5ZWR1OnJlcXVpZXJlUHJlcnJlcXVpc2l0byBweXI6aGVyZW5jaWEgOw0KICAgIHB5ZWR1OnRp\"\n",
        "        \"ZW5lRGlmaWN1bHRhZCA1IC4NCg0KcHlyOmFyYm9sX2VzdHIgYSBweWVkdTpFc3RydWN0dXJhRGVEYXRvcyA7DQogICAgcmRmczps\"\n",
        "        \"YWJlbCAiVHJlZSJAZW4sDQogICAgICAgICLDgXJib2wiQGVzIDsNCiAgICBza29zOmV4YWN0TWF0Y2ggd2Q6UTIyMzY1NSA7DQog\"\n",
        "        \"ICAgcHllZHU6YU5pdmVsRG9taW5pbyBweXI6YXZhbnphZG8gOw0KICAgIHB5ZWR1OnBlcnRlbmVjZUFUZW1hIHB5cjpUX2FsZ29y\"\n",
        "        \"aXRtb3MgOw0KICAgIHB5ZWR1OnJlcXVpZXJlUHJlcnJlcXVpc2l0byBweXI6cmVjdXJzaW9uIDsNCiAgICBweWVkdTp0aWVuZURp\"\n",
        "        \"ZmljdWx0YWQgNCAuDQoNCnB5cjphcmdzX2t3YXJncyBhIHB5ZWR1OlByaW5jaXBpb1RyYW5zdmVyc2FsIDsNCiAgICByZGZzOmxh\"\n",
        "        \"YmVsICJhcmdzIGFuZCBrd2FyZ3MiQGVuLA0KICAgICAgICAiKmFyZ3MgeSAqKmt3YXJncyJAZXMgOw0KICAgIHB5ZWR1OmFOaXZl\"\n",
        "        \"bERvbWluaW8gcHlyOmludGVybWVkaW8gOw0KICAgIHB5ZWR1OnBlcnRlbmVjZUFUZW1hIHB5cjpUX2Z1bmNpb25lcyA7DQogICAg\"\n",
        "        \"cHllZHU6cmVxdWllcmVQcmVycmVxdWlzaXRvIHB5cjpvcGVyYWRvcl9lc3RyZWxsYSwNCiAgICAgICAgcHlyOnBhcmFtZXRyb3Mg\"\n",
        "        \"Ow0KICAgIHB5ZWR1OnRpZW5lRGlmaWN1bHRhZCAzIC4NCg0KcHlyOmFyZ3VtZW50b3Nfbm9tYnJhZG9zIGEgcHllZHU6UHJpbmNp\"\n",
        "        \"cGlvVHJhbnN2ZXJzYWwgOw0KICAgIHJkZnM6bGFiZWwgIktleXdvcmQgYXJndW1lbnRzIkBlbiwNCiAgICAgICAgIkFyZ3VtZW50\"\n",
        "        \"b3MgcG9yIG5vbWJyZSJAZXMgOw0KICAgIHB5ZWR1OmFOaXZlbERvbWluaW8gcHlyOmJhc2ljbyA7DQogICAgcHllZHU6cGVydGVu\"\n",
        "        \"ZWNlQVRlbWEgcHlyOlRfZnVuY2lvbmVzIDsNCiAgICBweWVkdTpyZXF1aWVyZVByZXJyZXF1aXNpdG8gcHlyOnBhcmFtZXRyb3Mg\"\n",
        "        \"Ow0KICAgIHB5ZWR1OnRpZW5lRGlmaWN1bHRhZCAyIC4NCg0KcHlyOmFzaWduYWNpb24gYSBweWVkdTpQcmluY2lwaW9UcmFuc3Zl\"\n",
        "        \"cnNhbCA7DQogICAgcmRmczpsYWJlbCAiQXNzaWdubWVudCJAZW4sDQogICAgICAgICJBc2lnbmFjacOzbiJAZXMgOw0KICAgIHB5\"\n",
        "        \"ZWR1OmVzUHJlcnJlcXVpc2l0b0RlIHB5cjpidWNsZV9mb3IgOw0KICAgIHB5ZWR1OnBlcnRlbmVjZUFUZW1hIHB5cjpUX2Z1bmRh\"\n",
        "        \"bWVudG9zIDsNCiAgICBweWVkdTp0aWVuZURpZmljdWx0YWQgMSAuDQoNCnB5cjphc3NlcnRfc3RtdCBhIHB5ZWR1OkVzdHJ1Y3R1\"\n",
        "        \"cmFEZUNvbnRyb2wgOw0KICAgIHJkZnM6bGFiZWwgImFzc2VydCJAZW4sDQogICAgICAgICJhc3NlcnQiQGVzIDsNCiAgICBweWVk\"\n",
        "        \"dTphTml2ZWxEb21pbmlvIHB5cjppbnRlcm1lZGlvIDsNCiAgICBweWVkdTpwZXJ0ZW5lY2VBVGVtYSBweXI6VF90ZXN0aW5nIDsN\"\n",
        "        \"CiAgICBweWVkdTpyZXF1aWVyZVByZXJyZXF1aXNpdG8gcHlyOmNvbmRpY2lvbmFsIDsNCiAgICBweWVkdTp0aWVuZURpZmljdWx0\"\n",
        "        \"YWQgMyAuDQoNCnB5cjphc3luY2lvX21vZCBhIHB5ZWR1Ok1vZHVsb0xpYnJlcmlhIDsNCiAgICByZGZzOmxhYmVsICJhc3luY2lv\"\n",
        "        \"IkBlbiwNCiAgICAgICAgImFzeW5jaW8iQGVzIDsNCiAgICBweWVkdTphTml2ZWxEb21pbmlvIHB5cjphdmFuemFkbyA7DQogICAg\"\n",
        "        \"cHllZHU6cGVydGVuZWNlQVRlbWEgcHlyOlRfY29uY3VycmVuY2lhIDsNCiAgICBweWVkdTpyZXF1aWVyZVByZXJyZXF1aXNpdG8g\"\n",
        "        \"cHlyOmFzeW5jX2F3YWl0IDsNCiAgICBweWVkdTp0aWVuZURpZmljdWx0YWQgNSAuDQoNCnB5cjpiYWNrdHJhY2tpbmcgYSBweWVk\"\n",
        "        \"dTpQcmluY2lwaW9UcmFuc3ZlcnNhbCA7DQogICAgcmRmczpsYWJlbCAiQmFja3RyYWNraW5nIkBlbiwNCiAgICAgICAgIkJhY2t0\"\n",
        "        \"cmFja2luZyJAZXMgOw0KICAgIHB5ZWR1OmFOaXZlbERvbWluaW8gcHlyOmF2YW56YWRvIDsNCiAgICBweWVkdTpwZXJ0ZW5lY2VB\"\n",
        "        \"VGVtYSBweXI6VF9hbGdvcml0bW9zIDsNCiAgICBweWVkdTpyZXF1aWVyZVByZXJyZXF1aXNpdG8gcHlyOnJlY3Vyc2lvbiA7DQog\"\n",
        "        \"ICAgcHllZHU6dGllbmVEaWZpY3VsdGFkIDUgLg0KDQpweXI6YnJlYWtfY29udGludWUgYSBweWVkdTpFc3RydWN0dXJhRGVDb250\"\n",
        "        \"cm9sIDsNCiAgICByZGZzOmxhYmVsICJicmVhayBhbmQgY29udGludWUiQGVuLA0KICAgICAgICAiYnJlYWsgeSBjb250aW51ZSJA\"\n",
        "        \"ZXMgOw0KICAgIHB5ZWR1OmFOaXZlbERvbWluaW8gcHlyOmJhc2ljbyA7DQogICAgcHllZHU6cGVydGVuZWNlQVRlbWEgcHlyOlRf\"\n",
        "        \"Y29udHJvbCA7DQogICAgcHllZHU6cmVxdWllcmVQcmVycmVxdWlzaXRvIHB5cjpidWNsZV9mb3IgOw0KICAgIHB5ZWR1OnRpZW5l\"\n",
        "        \"RGlmaWN1bHRhZCAyIC4NCg0KcHlyOmNvbGxlY3Rpb25zX21vZCBhIHB5ZWR1Ok1vZHVsb0xpYnJlcmlhIDsNCiAgICByZGZzOmxh\"\n",
        "        \"YmVsICJjb2xsZWN0aW9ucyJAZW4sDQogICAgICAgICJjb2xsZWN0aW9ucyJAZXMgOw0KICAgIHB5ZWR1OmFOaXZlbERvbWluaW8g\"\n",
        "        \"cHlyOmludGVybWVkaW8gOw0KICAgIHB5ZWR1OnBlcnRlbmVjZUFUZW1hIHB5cjpUX21vZHVsb3MgOw0KICAgIHB5ZWR1OnJlcXVp\"\n",
        "        \"ZXJlUHJlcnJlcXVpc2l0byBweXI6aW1wb3J0X21vZCA7DQogICAgcHllZHU6dGllbmVEaWZpY3VsdGFkIDMgLg0KDQpweXI6Y29u\"\n",
        "        \"dGV4dF9tYW5hZ2VyIGEgcHllZHU6UGFyYWRpZ21hIDsNCiAgICByZGZzOmxhYmVsICJDb250ZXh0IG1hbmFnZXIiQGVuLA0KICAg\"\n",
        "        \"ICAgICAiR2VzdG9yIGRlIGNvbnRleHRvIkBlcyA7DQogICAgcHllZHU6YU5pdmVsRG9taW5pbyBweXI6YXZhbnphZG8gOw0KICAg\"\n",
        "        \"IHB5ZWR1OnBlcnRlbmVjZUFUZW1hIHB5cjpUX2NvbnRyb2wgOw0KICAgIHB5ZWR1OnJlcXVpZXJlUHJlcnJlcXVpc2l0byBweXI6\"\n",
        "        \"Y2xhc2UsDQogICAgICAgIHB5cjp3aXRoX2NvbnRleHQgOw0KICAgIHB5ZWR1OnRpZW5lRGlmaWN1bHRhZCA1IC4NCg0KcHlyOmNv\"\n",
        "        \"cGlhX3Byb2Z1bmRhIGEgcHllZHU6UHJpbmNpcGlvVHJhbnN2ZXJzYWwgOw0KICAgIHJkZnM6bGFiZWwgIkRlZXAgY29weSJAZW4s\"\n",
        "        \"DQogICAgICAgICJDb3BpYSBwcm9mdW5kYSJAZXMgOw0KICAgIHB5ZWR1OmFOaXZlbERvbWluaW8gcHlyOmF2YW56YWRvIDsNCiAg\"\n",
        "        \"ICBweWVkdTpjb250cmFzdGFDb24gcHlyOmNvcGlhX3N1cGVyZmljaWFsIDsNCiAgICBweWVkdTpwZXJ0ZW5lY2VBVGVtYSBweXI6\"\n",
        "        \"VF90aXBvcyA7DQogICAgcHllZHU6cmVxdWllcmVQcmVycmVxdWlzaXRvIHB5cjpjb3BpYV9zdXBlcmZpY2lhbCA7DQogICAgcHll\"\n",
        "        \"ZHU6dGllbmVEaWZpY3VsdGFkIDQgLg0KDQpweXI6Y29ycnV0aW5hIGEgcHllZHU6UHJpbmNpcGlvVHJhbnN2ZXJzYWwgOw0KICAg\"\n",
        "        \"IHJkZnM6bGFiZWwgIkNvcm91dGluZSJAZW4sDQogICAgICAgICJDb3JydXRpbmEiQGVzIDsNCiAgICBweWVkdTphTml2ZWxEb21p\"\n",
        "        \"bmlvIHB5cjphdmFuemFkbyA7DQogICAgcHllZHU6cGVydGVuZWNlQVRlbWEgcHlyOlRfY29uY3VycmVuY2lhIDsNCiAgICBweWVk\"\n",
        "        \"dTpyZXF1aWVyZVByZXJyZXF1aXNpdG8gcHlyOmFzeW5jX2F3YWl0LA0KICAgICAgICBweXI6Z2VuZXJhZG9yIDsNCiAgICBweWVk\"\n",
        "        \"dTp0aWVuZURpZmljdWx0YWQgNSAuDQoNCnB5cjpjb3VudGVyIGEgcHllZHU6RXN0cnVjdHVyYURlRGF0b3MgOw0KICAgIHJkZnM6\"\n",
        "        \"bGFiZWwgIkNvdW50ZXIiQGVuLA0KICAgICAgICAiY29sbGVjdGlvbnMuQ291bnRlciJAZXMgOw0KICAgIHB5ZWR1OmFOaXZlbERv\"\n",
        "        \"bWluaW8gcHlyOmludGVybWVkaW8gOw0KICAgIHB5ZWR1OnBlcnRlbmVjZUFUZW1hIHB5cjpUX2VzdHJ1Y3R1cmFzIDsNCiAgICBw\"\n",
        "        \"eWVkdTpyZXF1aWVyZVByZXJyZXF1aXNpdG8gcHlyOmRpY2Npb25hcmlvIDsNCiAgICBweWVkdTp0aWVuZURpZmljdWx0YWQgMyAu\"\n",
        "        \"DQoNCnB5cjpjc3ZfbW9kIGEgcHllZHU6TW9kdWxvTGlicmVyaWEgOw0KICAgIHJkZnM6bGFiZWwgImNzdiBtb2R1bGUiQGVuLA0K\"\n",
        "        \"ICAgICAgICAiTcOzZHVsbyBjc3YiQGVzIDsNCiAgICBweWVkdTphTml2ZWxEb21pbmlvIHB5cjppbnRlcm1lZGlvIDsNCiAgICBw\"\n",
        "        \"eWVkdTpwZXJ0ZW5lY2VBVGVtYSBweXI6VF9maWNoZXJvcyA7DQogICAgcHllZHU6cmVxdWllcmVQcmVycmVxdWlzaXRvIHB5cjps\"\n",
        "        \"aXN0YSA7DQogICAgcHllZHU6dGllbmVEaWZpY3VsdGFkIDMgLg0KDQpweXI6ZGF0YWNsYXNzIGEgcHllZHU6UGFyYWRpZ21hIDsN\"\n",
        "        \"CiAgICByZGZzOmxhYmVsICJEYXRhY2xhc3MiQGVuLA0KICAgICAgICAiRGF0YWNsYXNzIkBlcyA7DQogICAgcHllZHU6YU5pdmVs\"\n",
        "        \"RG9taW5pbyBweXI6aW50ZXJtZWRpbyA7DQogICAgcHllZHU6cGVydGVuZWNlQVRlbWEgcHlyOlRfdGlwb3MgOw0KICAgIHB5ZWR1\"\n",
        "        \"OnJlcXVpZXJlUHJlcnJlcXVpc2l0byBweXI6YW5vdGFjaW9uZXNfdGlwbywNCiAgICAgICAgcHlyOmNsYXNlIDsNCiAgICBweWVk\"\n",
        "        \"dTp0aWVuZURpZmljdWx0YWQgMyAuDQoNCnB5cjpkZWZhdWx0ZGljdCBhIHB5ZWR1OkVzdHJ1Y3R1cmFEZURhdG9zIDsNCiAgICBy\"\n",
        "        \"ZGZzOmxhYmVsICJkZWZhdWx0ZGljdCJAZW4sDQogICAgICAgICJjb2xsZWN0aW9ucy5kZWZhdWx0ZGljdCJAZXMgOw0KICAgIHB5\"\n",
        "        \"ZWR1OmFOaXZlbERvbWluaW8gcHlyOmludGVybWVkaW8gOw0KICAgIHB5ZWR1OnBlcnRlbmVjZUFUZW1hIHB5cjpUX2VzdHJ1Y3R1\"\n",
        "        \"cmFzIDsNCiAgICBweWVkdTpyZXF1aWVyZVByZXJyZXF1aXNpdG8gcHlyOmRpY2Npb25hcmlvIDsNCiAgICBweWVkdTp0aWVuZURp\"\n",
        "        \"ZmljdWx0YWQgMyAuDQoNCnB5cjpkZXF1ZSBhIHB5ZWR1OkVzdHJ1Y3R1cmFEZURhdG9zIDsNCiAgICByZGZzOmxhYmVsICJkZXF1\"\n",
        "        \"ZSJAZW4sDQogICAgICAgICJjb2xsZWN0aW9ucy5kZXF1ZSJAZXMgOw0KICAgIHB5ZWR1OmFOaXZlbERvbWluaW8gcHlyOmludGVy\"\n",
        "        \"bWVkaW8gOw0KICAgIHB5ZWR1OnBlcnRlbmVjZUFUZW1hIHB5cjpUX2VzdHJ1Y3R1cmFzIDsNCiAgICBweWVkdTpyZXF1aWVyZVBy\"\n",
        "        \"ZXJyZXF1aXNpdG8gcHlyOmxpc3RhIDsNCiAgICBweWVkdTp0aWVuZURpZmljdWx0YWQgMyAuDQoNCnB5cjpkb2NzdHJpbmcgYSBw\"\n",
        "        \"eWVkdTpQcmluY2lwaW9UcmFuc3ZlcnNhbCA7DQogICAgcmRmczpsYWJlbCAiRG9jc3RyaW5nIkBlbiwNCiAgICAgICAgIkRvY3N0\"\n",
        "        \"cmluZyJAZXMgOw0KICAgIHB5ZWR1OmFOaXZlbERvbWluaW8gcHlyOmJhc2ljbyA7DQogICAgcHllZHU6cGVydGVuZWNlQVRlbWEg\"\n",
        "        \"cHlyOlRfdGVzdGluZyA7DQogICAgcHllZHU6cmVxdWllcmVQcmVycmVxdWlzaXRvIHB5cjpmdW5jaW9uIDsNCiAgICBweWVkdTp0\"\n",
        "        \"aWVuZURpZmljdWx0YWQgMiAuDQoNCnB5cjplbHNlX2J1Y2xlIGEgcHllZHU6RXN0cnVjdHVyYURlQ29udHJvbCA7DQogICAgcmRm\"\n",
        "        \"czpsYWJlbCAibG9vcCBlbHNlIkBlbiwNCiAgICAgICAgImVsc2UgZW4gYnVjbGVzIkBlcyA7DQogICAgcHllZHU6YU5pdmVsRG9t\"\n",
        "        \"aW5pbyBweXI6aW50ZXJtZWRpbyA7DQogICAgcHllZHU6cGVydGVuZWNlQVRlbWEgcHlyOlRfY29udHJvbCA7DQogICAgcHllZHU6\"\n",
        "        \"cmVxdWllcmVQcmVycmVxdWlzaXRvIHB5cjpidWNsZV9mb3IgOw0KICAgIHB5ZWR1OnRpZW5lRGlmaWN1bHRhZCAzIC4NCg0KcHly\"\n",
        "        \"OmVuY2FkZW5hcl9leGNlcGNpb25lcyBhIHB5ZWR1OkVzdHJ1Y3R1cmFEZUNvbnRyb2wgOw0KICAgIHJkZnM6bGFiZWwgIkV4Y2Vw\"\n",
        "        \"dGlvbiBjaGFpbmluZyJAZW4sDQogICAgICAgICJFbmNhZGVuYXIgZXhjZXBjaW9uZXMiQGVzIDsNCiAgICBweWVkdTphTml2ZWxE\"\n",
        "        \"b21pbmlvIHB5cjphdmFuemFkbyA7DQogICAgcHllZHU6cGVydGVuZWNlQVRlbWEgcHlyOlRfZXhjZXBjaW9uZXMgOw0KICAgIHB5\"\n",
        "        \"ZWR1OnJlcXVpZXJlUHJlcnJlcXVpc2l0byBweXI6cmFpc2VfZXhjZXBjaW9uIDsNCiAgICBweWVkdTp0aWVuZURpZmljdWx0YWQg\"\n",
        "        \"NCAuDQoNCnB5cjplbmNvZGluZyBhIHB5ZWR1OlByaW5jaXBpb1RyYW5zdmVyc2FsIDsNCiAgICByZGZzOmxhYmVsICJUZXh0IGVu\"\n",
        "        \"Y29kaW5nIkBlbiwNCiAgICAgICAgIkNvZGlmaWNhY2nDs24gZGUgdGV4dG8iQGVzIDsNCiAgICBweWVkdTphTml2ZWxEb21pbmlv\"\n",
        "        \"IHB5cjphdmFuemFkbyA7DQogICAgcHllZHU6cGVydGVuZWNlQVRlbWEgcHlyOlRfc3RyaW5ncyA7DQogICAgcHllZHU6cmVxdWll\"\n",
        "        \"cmVQcmVycmVxdWlzaXRvIHB5cjp0aXBvX2J5dGVzLA0KICAgICAgICBweXI6dGlwb19zdHIgOw0KICAgIHB5ZWR1OnRpZW5lRGlm\"\n",
        "        \"aWN1bHRhZCA0IC4NCg0KcHlyOmVudG9ybm9fdmlydHVhbCBhIHB5ZWR1OlByaW5jaXBpb1RyYW5zdmVyc2FsIDsNCiAgICByZGZz\"\n",
        "        \"OmxhYmVsICJWaXJ0dWFsIGVudmlyb25tZW50cyJAZW4sDQogICAgICAgICJFbnRvcm5vcyB2aXJ0dWFsZXMgKHZlbnYpIkBlcyA7\"\n",
        "        \"DQogICAgcHllZHU6YU5pdmVsRG9taW5pbyBweXI6aW50ZXJtZWRpbyA7DQogICAgcHllZHU6cGVydGVuZWNlQVRlbWEgcHlyOlRf\"\n",
        "        \"bW9kdWxvcyA7DQogICAgcHllZHU6cmVxdWllcmVQcmVycmVxdWlzaXRvIHB5cjpwYXF1ZXRlIDsNCiAgICBweWVkdTp0aWVuZURp\"\n",
        "        \"ZmljdWx0YWQgMyAuDQoNCnB5cjplbnVtX3RpcG8gYSBweWVkdTpQYXJhZGlnbWEgOw0KICAgIHJkZnM6bGFiZWwgIkVudW0iQGVu\"\n",
        "        \"LA0KICAgICAgICAiRW51bWVyYWNpw7NuIChFbnVtKSJAZXMgOw0KICAgIHB5ZWR1OmFOaXZlbERvbWluaW8gcHlyOmludGVybWVk\"\n",
        "        \"aW8gOw0KICAgIHB5ZWR1OnBlcnRlbmVjZUFUZW1hIHB5cjpUX3RpcG9zIDsNCiAgICBweWVkdTpyZXF1aWVyZVByZXJyZXF1aXNp\"\n",
        "        \"dG8gcHlyOmNsYXNlIDsNCiAgICBweWVkdTp0aWVuZURpZmljdWx0YWQgMyAuDQoNCnB5cjplbnVtZXJhdGVfZiBhIHB5ZWR1OkZ1\"\n",
        "        \"bmNpb25JbnRlZ3JhZGEgOw0KICAgIHJkZnM6bGFiZWwgImVudW1lcmF0ZSJAZW4sDQogICAgICAgICJlbnVtZXJhdGUoKSJAZXMg\"\n",
        "        \"Ow0KICAgIHB5ZWR1OmFOaXZlbERvbWluaW8gcHlyOmJhc2ljbyA7DQogICAgcHllZHU6cGVydGVuZWNlQVRlbWEgcHlyOlRfY29u\"\n",
        "        \"dHJvbCA7DQogICAgcHllZHU6cmVxdWllcmVQcmVycmVxdWlzaXRvIHB5cjpidWNsZV9mb3IsDQogICAgICAgIHB5cjppbmRleGFj\"\n",
        "        \"aW9uIDsNCiAgICBweWVkdTp0aWVuZURpZmljdWx0YWQgMiAuDQoNCnB5cjplbnZpb18wMDEgYSBweWVkdTpFbnZpb0VzdHVkaWFu\"\n",
        "        \"dGUgOw0KICAgIHJkZnM6bGFiZWwgIlN1Ym1pc3Npb24gMDAxIkBlbiwNCiAgICAgICAgIkVudsOtbyAwMDEiQGVzIDsNCiAgICBk\"\n",
        "        \"Y3Rlcm1zOmNyZWF0ZWQgIjIwMjYtMDUtMTIiXl54c2Q6ZGF0ZSA7DQogICAgcHllZHU6ZW52aWFkb1BvciBweXI6ZXN0X2FsaWNp\"\n",
        "        \"YSA7DQogICAgcHllZHU6bWFuaWZpZXN0YUVycm9yIHB5cjplcnJfb2ZmX2J5X29uZSA7DQogICAgcHllZHU6bnVtZXJvRGVMaW5l\"\n",
        "        \"YXMgMTggOw0KICAgIHB5ZWR1OnJlc3VlbHZlRWplcmNpY2lvIHB5cjplal9idXNxdWVkYSAuDQoNCnB5cjplbnZpb18wMDIgYSBw\"\n",
        "        \"eWVkdTpFbnZpb0VzdHVkaWFudGUgOw0KICAgIHJkZnM6bGFiZWwgIlN1Ym1pc3Npb24gMDAyIkBlbiwNCiAgICAgICAgIkVudsOt\"\n",
        "        \"byAwMDIiQGVzIDsNCiAgICBkY3Rlcm1zOmNyZWF0ZWQgIjIwMjYtMDUtMTQiXl54c2Q6ZGF0ZSA7DQogICAgcHllZHU6ZW52aWFk\"\n",
        "        \"b1BvciBweXI6ZXN0X2JvcmphIDsNCiAgICBweWVkdTptYW5pZmllc3RhRXJyb3IgcHlyOmVycl9pdGVyYWNpb25fcmVjdXJzaW9u\"\n",
        "        \"IDsNCiAgICBweWVkdTpudW1lcm9EZUxpbmVhcyAxMSA7DQogICAgcHllZHU6cmVzdWVsdmVFamVyY2ljaW8gcHlyOmVqX2ZhY3Rv\"\n",
        "        \"cmlhbCAuDQoNCnB5cjplcnJfY29uY2F0ZW5hcl90aXBvcyBhIHB5ZWR1OkVycm9yQ29uY2VwdHVhbCA7DQogICAgcmRmczpsYWJl\"\n",
        "        \"bCAiQ29uY2F0ZW5hdGluZyBzdHIgYW5kIGludCJAZW4sDQogICAgICAgICJDb25jYXRlbmFyIGNhZGVuYSB5IG7Dum1lcm8gKFR5\"\n",
        "        \"cGVFcnJvcikiQGVzIDsNCiAgICBweWVkdTplcnJvclNvYnJlQ29uY2VwdG8gcHlyOmNvbnZlcnNpb25fdGlwb3MgLg0KDQpweXI6\"\n",
        "        \"ZXJyX2RlY29yYWRvcl93cmFwcyBhIHB5ZWR1OkVycm9yQ29uY2VwdHVhbCA7DQogICAgcmRmczpsYWJlbCAiRGVjb3JhdG9yIHdp\"\n",
        "        \"dGhvdXQgd3JhcHMiQGVuLA0KICAgICAgICAiRGVjb3JhZG9yIHNpbiBmdW5jdG9vbHMud3JhcHMiQGVzIDsNCiAgICBweWVkdTpl\"\n",
        "        \"cnJvclNvYnJlQ29uY2VwdG8gcHlyOmRlY29yYWRvciAuDQoNCnB5cjplcnJfZXhjZXB0X2dlbmVyaWNvIGEgcHllZHU6RXJyb3JD\"\n",
        "        \"b25jZXB0dWFsIDsNCiAgICByZGZzOmxhYmVsICJPdmVybHkgYnJvYWQgZXhjZXB0IkBlbiwNCiAgICAgICAgIkNhcHR1cmFyIEV4\"\n",
        "        \"Y2VwdGlvbiBkZSBmb3JtYSBkZW1hc2lhZG8gYW1wbGlhIkBlcyA7DQogICAgcHllZHU6ZXJyb3JTb2JyZUNvbmNlcHRvIHB5cjpq\"\n",
        "        \"ZXJhcnF1aWFfZXhjZXBjaW9uZXMgLg0KDQpweXI6ZXJyX2Zsb2F0X2lndWFsZGFkIGEgcHllZHU6RXJyb3JDb25jZXB0dWFsIDsN\"\n",
        "        \"CiAgICByZGZzOmxhYmVsICJGbG9hdCBlcXVhbGl0eSBjb21wYXJpc29uIkBlbiwNCiAgICAgICAgIkNvbXBhcmFyIGZsb3RhbnRl\"\n",
        "        \"cyBjb24gPT0iQGVzIDsNCiAgICBweWVkdTplcnJvclNvYnJlQ29uY2VwdG8gcHlyOnRpcG9fZmxvYXQgLg0KDQpweXI6ZXJyX2dl\"\n",
        "        \"bmVyYWRvcl9hZ290YWRvIGEgcHllZHU6RXJyb3JDb25jZXB0dWFsIDsNCiAgICByZGZzOmxhYmVsICJFeGhhdXN0ZWQgZ2VuZXJh\"\n",
        "        \"dG9yIHJldXNlIkBlbiwNCiAgICAgICAgIlJldXRpbGl6YXIgdW4gZ2VuZXJhZG9yIGFnb3RhZG8iQGVzIDsNCiAgICBweWVkdTpl\"\n",
        "        \"cnJvclNvYnJlQ29uY2VwdG8gcHlyOmdlbmVyYWRvciAuDQoNCnB5cjplcnJfZ2lsX3BhcmFsZWxpc21vIGEgcHllZHU6RXJyb3JD\"\n",
        "        \"b25jZXB0dWFsIDsNCiAgICByZGZzOmxhYmVsICJFeHBlY3RpbmcgdGhyZWFkcyB0byBwYXJhbGxlbGl6ZSJAZW4sDQogICAgICAg\"\n",
        "        \"ICJFc3BlcmFyIHBhcmFsZWxpc21vIHJlYWwgY29uIGhpbG9zIChHSUwpIkBlcyA7DQogICAgcHllZHU6ZXJyb3JTb2JyZUNvbmNl\"\n",
        "        \"cHRvIHB5cjpnaWwgLg0KDQpweXI6ZXJyX2dsb2JhbF9sb2NhbCBhIHB5ZWR1OkVycm9yQ29uY2VwdHVhbCA7DQogICAgcmRmczps\"\n",
        "        \"YWJlbCAiR2xvYmFsIHZzIGxvY2FsIGNvbmZ1c2lvbiJAZW4sDQogICAgICAgICJDb25mdW5kaXIgdmFyaWFibGUgZ2xvYmFsIHkg\"\n",
        "        \"bG9jYWwiQGVzIDsNCiAgICBweWVkdTplcnJvclNvYnJlQ29uY2VwdG8gcHlyOmFtYml0byAuDQoNCnB5cjplcnJfaWRlbnRpZGFk\"\n",
        "        \"X2lndWFsZGFkIGEgcHllZHU6RXJyb3JDb25jZXB0dWFsIDsNCiAgICByZGZzOmxhYmVsICJFcXVhbGl0eSB2cyBpZGVudGl0eSBj\"\n",
        "        \"b25mdXNpb24iQGVuLA0KICAgICAgICAiQ29uZnVzacOzbiA9PSBmcmVudGUgYSBpcyJAZXMgOw0KICAgIHB5ZWR1OmVycm9yU29i\"\n",
        "        \"cmVDb25jZXB0byBweXI6dGlwb19ib29sIC4NCg0KcHlyOmVycl9sYXRlX2JpbmRpbmcgYSBweWVkdTpFcnJvckNvbmNlcHR1YWwg\"\n",
        "        \"Ow0KICAgIHJkZnM6bGFiZWwgIkxvb3AgY2xvc3VyZSBsYXRlIGJpbmRpbmciQGVuLA0KICAgICAgICAiTGF0ZSBiaW5kaW5nIGVu\"\n",
        "        \"IGNsYXVzdXJhcyBkZSBidWNsZSJAZXMgOw0KICAgIHB5ZWR1OmVycm9yU29icmVDb25jZXB0byBweXI6Y2xvc3VyZSAuDQoNCnB5\"\n",
        "        \"cjplcnJfbW9kX2R1cmFudGVfaXRlcmFjaW9uIGEgcHllZHU6RXJyb3JDb25jZXB0dWFsIDsNCiAgICByZGZzOmxhYmVsICJNdXRh\"\n",
        "        \"dGluZyBsaXN0IHdoaWxlIGl0ZXJhdGluZyJAZW4sDQogICAgICAgICJNb2RpZmljYXIgdW5hIGxpc3RhIG1pZW50cmFzIHNlIGl0\"\n",
        "        \"ZXJhIkBlcyA7DQogICAgcHllZHU6ZXJyb3JTb2JyZUNvbmNlcHRvIHB5cjpidWNsZV9mb3IgLg0KDQpweXI6ZXJyX3Bhc29fcmVm\"\n",
        "        \"ZXJlbmNpYSBhIHB5ZWR1OkVycm9yQ29uY2VwdHVhbCA7DQogICAgcmRmczpsYWJlbCAiVmFsdWUgdnMgcmVmZXJlbmNlIGNvbmZ1\"\n",
        "        \"c2lvbiJAZW4sDQogICAgICAgICJDb25mdXNpw7NuIHBhc28gcG9yIHZhbG9yIC8gcG9yIHJlZmVyZW5jaWEiQGVzIDsNCiAgICBw\"\n",
        "        \"eWVkdTplcnJvclNvYnJlQ29uY2VwdG8gcHlyOm11dGFiaWxpZGFkIC4NCg0KcHlyOmVycl9zZWxmX29sdmlkYWRvIGEgcHllZHU6\"\n",
        "        \"RXJyb3JDb25jZXB0dWFsIDsNCiAgICByZGZzOmxhYmVsICJNaXNzaW5nIHNlbGYgcGFyYW1ldGVyIkBlbiwNCiAgICAgICAgIk9s\"\n",
        "        \"dmlkYXIgc2VsZiBlbiB1biBtw6l0b2RvIkBlcyA7DQogICAgcHllZHU6ZXJyb3JTb2JyZUNvbmNlcHRvIHB5cjptZXRvZG8gLg0K\"\n",
        "        \"DQpweXI6ZXJyX3NoYWxsb3dfY29weSBhIHB5ZWR1OkVycm9yQ29uY2VwdHVhbCA7DQogICAgcmRmczpsYWJlbCAiU2hhbGxvdyB3\"\n",
        "        \"aGVuIGRlZXAgbmVlZGVkIkBlbiwNCiAgICAgICAgIkNvcGlhIHN1cGVyZmljaWFsIGN1YW5kbyBzZSBuZWNlc2l0YSBwcm9mdW5k\"\n",
        "        \"YSJAZXMgOw0KICAgIHB5ZWR1OmVycm9yU29icmVDb25jZXB0byBweXI6Y29waWFfc3VwZXJmaWNpYWwgLg0KDQpweXI6ZXJyX3N1\"\n",
        "        \"cGVyX29sdmlkYWRvIGEgcHllZHU6RXJyb3JDb25jZXB0dWFsIDsNCiAgICByZGZzOmxhYmVsICJNaXNzaW5nIHN1cGVyKCkgY2Fs\"\n",
        "        \"bCJAZW4sDQogICAgICAgICJObyBsbGFtYXIgYSBzdXBlcigpIGVuIGxhIHN1YmNsYXNlIkBlcyA7DQogICAgcHllZHU6ZXJyb3JT\"\n",
        "        \"b2JyZUNvbmNlcHRvIHB5cjpoZXJlbmNpYSAuDQoNCnB5cjplc2NyaWJpcl9maWNoZXJvIGEgcHllZHU6RnVuY2lvbkludGVncmFk\"\n",
        "        \"YSA7DQogICAgcmRmczpsYWJlbCAiRmlsZSB3cml0aW5nIkBlbiwNCiAgICAgICAgIkVzY3JpdHVyYSBkZSBmaWNoZXJvcyJAZXMg\"\n",
        "        \"Ow0KICAgIHB5ZWR1OmFOaXZlbERvbWluaW8gcHlyOmludGVybWVkaW8gOw0KICAgIHB5ZWR1OnBlcnRlbmVjZUFUZW1hIHB5cjpU\"\n",
        "        \"X2ZpY2hlcm9zIDsNCiAgICBweWVkdTpyZXF1aWVyZVByZXJyZXF1aXNpdG8gcHlyOmFicmlyX2ZpY2hlcm8gOw0KICAgIHB5ZWR1\"\n",
        "        \"OnRpZW5lRGlmaWN1bHRhZCAzIC4NCg0KcHlyOmV2YWxfYnVzcXVlZGFfYmIgYSBweWVkdTpFdmFsdWFjaW9uRGVDb25jZXB0byA7\"\n",
        "        \"DQogICAgcmRmczpsYWJlbCAiQmluYXJ5LXNlYXJjaCBhc3Nlc3NtZW50IGluIGVqX2J1c3F1ZWRhIkBlbiwNCiAgICAgICAgIkV2\"\n",
        "        \"YWx1YWNpw7NuIGRlIGLDunNxdWVkYSBiaW5hcmlhIGVuIGVqX2J1c3F1ZWRhIkBlcyA7DQogICAgcHllZHU6YU5pdmVsRG9taW5p\"\n",
        "        \"byBweXI6YXZhbnphZG8gOw0KICAgIHB5ZWR1OmNvblBlc28gMC42IDsNCiAgICBweWVkdTplbkVqZXJjaWNpbyBweXI6ZWpfYnVz\"\n",
        "        \"cXVlZGEgOw0KICAgIHB5ZWR1OnNvYnJlQ29uY2VwdG8gcHlyOmJ1c3F1ZWRhX2JpbmFyaWEgLg0KDQpweXI6ZXZhbGFjdF8wMSBh\"\n",
        "        \"IHB5ZWR1OkV2YWx1YWNpb25BY3RpdmlkYWQgOw0KICAgIHJkZnM6bGFiZWwgIkFjdGl2aXR5IGFzc2Vzc21lbnQgMDEiQGVuLA0K\"\n",
        "        \"ICAgICAgICAiRXZhbHVhY2nDs24gZGUgYWN0aXZpZGFkIDAxIkBlcyA7DQogICAgcHllZHU6ZW5GZWNoYSAiMjAyNi0wMy0wMiJe\"\n",
        "        \"XnhzZDpkYXRlIDsNCiAgICBweWVkdTpldmFsdWFBIHB5cjplal9zdW1hX2xpc3RhIDsNCiAgICBweWVkdTpvYnR1dm9Ob3RhIDgu\"\n",
        "        \"NSA7DQogICAgcHllZHU6cG9yRXN0dWRpYW50ZSBweXI6ZXN0X2FsaWNpYSAuDQoNCnB5cjpldmFsYWN0XzAyIGEgcHllZHU6RXZh\"\n",
        "        \"bHVhY2lvbkFjdGl2aWRhZCA7DQogICAgcmRmczpsYWJlbCAiQWN0aXZpdHkgYXNzZXNzbWVudCAwMiJAZW4sDQogICAgICAgICJF\"\n",
        "        \"dmFsdWFjacOzbiBkZSBhY3RpdmlkYWQgMDIiQGVzIDsNCiAgICBweWVkdTplbkZlY2hhICIyMDI2LTAzLTA5Il5eeHNkOmRhdGUg\"\n",
        "        \"Ow0KICAgIHB5ZWR1OmV2YWx1YUEgcHlyOmVqX2ZhY3RvcmlhbCA7DQogICAgcHllZHU6b2J0dXZvTm90YSA2LjAgOw0KICAgIHB5\"\n",
        "        \"ZWR1OnBvckVzdHVkaWFudGUgcHlyOmVzdF9ib3JqYSAuDQoNCnB5cjpldmFsYWN0XzAzIGEgcHllZHU6RXZhbHVhY2lvbkFjdGl2\"\n",
        "        \"aWRhZCA7DQogICAgcmRmczpsYWJlbCAiQWN0aXZpdHkgYXNzZXNzbWVudCAwMyJAZW4sDQogICAgICAgICJFdmFsdWFjacOzbiBk\"\n",
        "        \"ZSBhY3RpdmlkYWQgMDMiQGVzIDsNCiAgICBweWVkdTplbkZlY2hhICIyMDI2LTAzLTE2Il5eeHNkOmRhdGUgOw0KICAgIHB5ZWR1\"\n",
        "        \"OmV2YWx1YUEgcHlyOmVqX2J1c3F1ZWRhIDsNCiAgICBweWVkdTpvYnR1dm9Ob3RhIDkuMCA7DQogICAgcHllZHU6cG9yRXN0dWRp\"\n",
        "        \"YW50ZSBweXI6ZXN0X2FsaWNpYSAuDQoNCnB5cjpldmFsYWN0XzA0IGEgcHllZHU6RXZhbHVhY2lvbkFjdGl2aWRhZCA7DQogICAg\"\n",
        "        \"cmRmczpsYWJlbCAiQWN0aXZpdHkgYXNzZXNzbWVudCAwNCJAZW4sDQogICAgICAgICJFdmFsdWFjacOzbiBkZSBhY3RpdmlkYWQg\"\n",
        "        \"MDQiQGVzIDsNCiAgICBweWVkdTplbkZlY2hhICIyMDI2LTAzLTIzIl5eeHNkOmRhdGUgOw0KICAgIHB5ZWR1OmV2YWx1YUEgcHly\"\n",
        "        \"OmVqX3N1bWFfbGlzdGEgOw0KICAgIHB5ZWR1Om9idHV2b05vdGEgNy41IDsNCiAgICBweWVkdTpwb3JFc3R1ZGlhbnRlIHB5cjpl\"\n",
        "        \"c3RfYm9yamEgLg0KDQpweXI6ZXZhbGFjdF8wNSBhIHB5ZWR1OkV2YWx1YWNpb25BY3RpdmlkYWQgOw0KICAgIHJkZnM6bGFiZWwg\"\n",
        "        \"IkFjdGl2aXR5IGFzc2Vzc21lbnQgMDUiQGVuLA0KICAgICAgICAiRXZhbHVhY2nDs24gZGUgYWN0aXZpZGFkIDA1IkBlcyA7DQog\"\n",
        "        \"ICAgcHllZHU6ZW5GZWNoYSAiMjAyNi0wMy0zMCJeXnhzZDpkYXRlIDsNCiAgICBweWVkdTpldmFsdWFBIHB5cjplal9mYWN0b3Jp\"\n",
        "        \"YWwgOw0KICAgIHB5ZWR1Om9idHV2b05vdGEgNS41IDsNCiAgICBweWVkdTpwb3JFc3R1ZGlhbnRlIHB5cjplc3RfYWxpY2lhIC4N\"\n",
        "        \"Cg0KcHlyOmV2YWxhY3RfMDYgYSBweWVkdTpFdmFsdWFjaW9uQWN0aXZpZGFkIDsNCiAgICByZGZzOmxhYmVsICJBY3Rpdml0eSBh\"\n",
        "        \"c3Nlc3NtZW50IDA2IkBlbiwNCiAgICAgICAgIkV2YWx1YWNpw7NuIGRlIGFjdGl2aWRhZCAwNiJAZXMgOw0KICAgIHB5ZWR1OmVu\"\n",
        "        \"RmVjaGEgIjIwMjYtMDQtMDYiXl54c2Q6ZGF0ZSA7DQogICAgcHllZHU6ZXZhbHVhQSBweXI6ZWpfYnVzcXVlZGEgOw0KICAgIHB5\"\n",
        "        \"ZWR1Om9idHV2b05vdGEgMTAuMCA7DQogICAgcHllZHU6cG9yRXN0dWRpYW50ZSBweXI6ZXN0X2JvcmphIC4NCg0KcHlyOmV2YWxh\"\n",
        "        \"Y3RfMDcgYSBweWVkdTpFdmFsdWFjaW9uQWN0aXZpZGFkIDsNCiAgICByZGZzOmxhYmVsICJBY3Rpdml0eSBhc3Nlc3NtZW50IDA3\"\n",
        "        \"IkBlbiwNCiAgICAgICAgIkV2YWx1YWNpw7NuIGRlIGFjdGl2aWRhZCAwNyJAZXMgOw0KICAgIHB5ZWR1OmVuRmVjaGEgIjIwMjYt\"\n",
        "        \"MDQtMTMiXl54c2Q6ZGF0ZSA7DQogICAgcHllZHU6ZXZhbHVhQSBweXI6ZWpfc3VtYV9saXN0YSA7DQogICAgcHllZHU6b2J0dXZv\"\n",
        "        \"Tm90YSA2LjUgOw0KICAgIHB5ZWR1OnBvckVzdHVkaWFudGUgcHlyOmVzdF9hbGljaWEgLg0KDQpweXI6ZXZhbGFjdF8wOCBhIHB5\"\n",
        "        \"ZWR1OkV2YWx1YWNpb25BY3RpdmlkYWQgOw0KICAgIHJkZnM6bGFiZWwgIkFjdGl2aXR5IGFzc2Vzc21lbnQgMDgiQGVuLA0KICAg\"\n",
        "        \"ICAgICAiRXZhbHVhY2nDs24gZGUgYWN0aXZpZGFkIDA4IkBlcyA7DQogICAgcHllZHU6ZW5GZWNoYSAiMjAyNi0wNC0yMCJeXnhz\"\n",
        "        \"ZDpkYXRlIDsNCiAgICBweWVkdTpldmFsdWFBIHB5cjplal9mYWN0b3JpYWwgOw0KICAgIHB5ZWR1Om9idHV2b05vdGEgOC4wIDsN\"\n",
        "        \"CiAgICBweWVkdTpwb3JFc3R1ZGlhbnRlIHB5cjplc3RfYm9yamEgLg0KDQpweXI6ZXZhbGFjdF8wOSBhIHB5ZWR1OkV2YWx1YWNp\"\n",
        "        \"b25BY3RpdmlkYWQgOw0KICAgIHJkZnM6bGFiZWwgIkFjdGl2aXR5IGFzc2Vzc21lbnQgMDkiQGVuLA0KICAgICAgICAiRXZhbHVh\"\n",
        "        \"Y2nDs24gZGUgYWN0aXZpZGFkIDA5IkBlcyA7DQogICAgcHllZHU6ZW5GZWNoYSAiMjAyNi0wNC0yNyJeXnhzZDpkYXRlIDsNCiAg\"\n",
        "        \"ICBweWVkdTpldmFsdWFBIHB5cjplal9idXNxdWVkYSA7DQogICAgcHllZHU6b2J0dXZvTm90YSA3LjAgOw0KICAgIHB5ZWR1OnBv\"\n",
        "        \"ckVzdHVkaWFudGUgcHlyOmVzdF9hbGljaWEgLg0KDQpweXI6ZXZhbGFjdF8xMCBhIHB5ZWR1OkV2YWx1YWNpb25BY3RpdmlkYWQg\"\n",
        "        \"Ow0KICAgIHJkZnM6bGFiZWwgIkFjdGl2aXR5IGFzc2Vzc21lbnQgMTAiQGVuLA0KICAgICAgICAiRXZhbHVhY2nDs24gZGUgYWN0\"\n",
        "        \"aXZpZGFkIDEwIkBlcyA7DQogICAgcHllZHU6ZW5GZWNoYSAiMjAyNi0wNS0wNCJeXnhzZDpkYXRlIDsNCiAgICBweWVkdTpldmFs\"\n",
        "        \"dWFBIHB5cjplal9zdW1hX2xpc3RhIDsNCiAgICBweWVkdTpvYnR1dm9Ob3RhIDkuNSA7DQogICAgcHllZHU6cG9yRXN0dWRpYW50\"\n",
        "        \"ZSBweXI6ZXN0X2JvcmphIC4NCg0KcHlyOmV4Y2VwY2lvbl9wZXJzb25hbGl6YWRhIGEgcHllZHU6UGFyYWRpZ21hIDsNCiAgICBy\"\n",
        "        \"ZGZzOmxhYmVsICJDdXN0b20gZXhjZXB0aW9uIkBlbiwNCiAgICAgICAgIkV4Y2VwY2nDs24gcGVyc29uYWxpemFkYSJAZXMgOw0K\"\n",
        "        \"ICAgIHB5ZWR1OmFOaXZlbERvbWluaW8gcHlyOmF2YW56YWRvIDsNCiAgICBweWVkdTpwZXJ0ZW5lY2VBVGVtYSBweXI6VF9leGNl\"\n",
        "        \"cGNpb25lcyA7DQogICAgcHllZHU6cmVxdWllcmVQcmVycmVxdWlzaXRvIHB5cjpleGNlcGNpb24sDQogICAgICAgIHB5cjpoZXJl\"\n",
        "        \"bmNpYSA7DQogICAgcHllZHU6dGllbmVEaWZpY3VsdGFkIDQgLg0KDQpweXI6ZmlsdGVyX2Z1bmMgYSBweWVkdTpGdW5jaW9uSW50\"\n",
        "        \"ZWdyYWRhIDsNCiAgICByZGZzOmxhYmVsICJmaWx0ZXIiQGVuLA0KICAgICAgICAiZmlsdGVyKCkiQGVzIDsNCiAgICBweWVkdTph\"\n",
        "        \"Tml2ZWxEb21pbmlvIHB5cjppbnRlcm1lZGlvIDsNCiAgICBweWVkdTpwZXJ0ZW5lY2VBVGVtYSBweXI6VF9mdW5jaW9uYWwgOw0K\"\n",
        "        \"ICAgIHB5ZWR1OnJlcXVpZXJlUHJlcnJlcXVpc2l0byBweXI6ZnVuY2lvbl9vcmRlbl9zdXBlcmlvciwNCiAgICAgICAgcHlyOml0\"\n",
        "        \"ZXJhYmxlcyA7DQogICAgcHllZHU6dGllbmVEaWZpY3VsdGFkIDMgLg0KDQpweXI6Zm9ybWF0b19zdHIgYSBweWVkdTpQcmluY2lw\"\n",
        "        \"aW9UcmFuc3ZlcnNhbCA7DQogICAgcmRmczpsYWJlbCAiU3RyaW5nIGZvcm1hdHRpbmciQGVuLA0KICAgICAgICAiRm9ybWF0ZW8g\"\n",
        "        \"ZGUgY2FkZW5hcyJAZXMgOw0KICAgIHB5ZWR1OmFOaXZlbERvbWluaW8gcHlyOmJhc2ljbyA7DQogICAgcHllZHU6cGVydGVuZWNl\"\n",
        "        \"QVRlbWEgcHlyOlRfc3RyaW5ncyA7DQogICAgcHllZHU6cmVxdWllcmVQcmVycmVxdWlzaXRvIHB5cjp0aXBvX3N0ciA7DQogICAg\"\n",
        "        \"cHllZHU6dGllbmVEaWZpY3VsdGFkIDIgLg0KDQpweXI6ZnJvbV9pbXBvcnQgYSBweWVkdTpQcmluY2lwaW9UcmFuc3ZlcnNhbCA7\"\n",
        "        \"DQogICAgcmRmczpsYWJlbCAiZnJvbSBpbXBvcnQiQGVuLA0KICAgICAgICAiZnJvbSAuLi4gaW1wb3J0IkBlcyA7DQogICAgcHll\"\n",
        "        \"ZHU6YU5pdmVsRG9taW5pbyBweXI6YmFzaWNvIDsNCiAgICBweWVkdTpwZXJ0ZW5lY2VBVGVtYSBweXI6VF9tb2R1bG9zIDsNCiAg\"\n",
        "        \"ICBweWVkdTpyZXF1aWVyZVByZXJyZXF1aXNpdG8gcHlyOmltcG9ydF9tb2QgOw0KICAgIHB5ZWR1OnRpZW5lRGlmaWN1bHRhZCAy\"\n",
        "        \"IC4NCg0KcHlyOmZzdHJpbmcgYSBweWVkdTpQcmluY2lwaW9UcmFuc3ZlcnNhbCA7DQogICAgcmRmczpsYWJlbCAiZi1zdHJpbmdz\"\n",
        "        \"IkBlbiwNCiAgICAgICAgImYtc3RyaW5ncyJAZXMgOw0KICAgIHB5ZWR1OmFOaXZlbERvbWluaW8gcHlyOmJhc2ljbyA7DQogICAg\"\n",
        "        \"cHllZHU6cGVydGVuZWNlQVRlbWEgcHlyOlRfc3RyaW5ncyA7DQogICAgcHllZHU6cmVxdWllcmVQcmVycmVxdWlzaXRvIHB5cjp0\"\n",
        "        \"aXBvX3N0ciA7DQogICAgcHllZHU6dGllbmVEaWZpY3VsdGFkIDIgLg0KDQpweXI6ZnVuY2lvbl9sYW1iZGEgYSBweWVkdTpQcmlu\"\n",
        "        \"Y2lwaW9UcmFuc3ZlcnNhbCA7DQogICAgcmRmczpsYWJlbCAiTGFtYmRhIkBlbiwNCiAgICAgICAgIkZ1bmNpw7NuIGxhbWJkYSJA\"\n",
        "        \"ZXMgOw0KICAgIHNrb3M6ZXhhY3RNYXRjaCB3ZDpRNTY3NjEyIDsNCiAgICBweWVkdTphTml2ZWxEb21pbmlvIHB5cjppbnRlcm1l\"\n",
        "        \"ZGlvIDsNCiAgICBweWVkdTpwZXJ0ZW5lY2VBVGVtYSBweXI6VF9mdW5jaW9uYWwgOw0KICAgIHB5ZWR1OnJlcXVpZXJlUHJlcnJl\"\n",
        "        \"cXVpc2l0byBweXI6ZnVuY2lvbiA7DQogICAgcHllZHU6dGllbmVEaWZpY3VsdGFkIDMgLg0KDQpweXI6ZnVuY3Rvb2xzX3dyYXBz\"\n",
        "        \"IGEgcHllZHU6TW9kdWxvTGlicmVyaWEgOw0KICAgIHJkZnM6bGFiZWwgImZ1bmN0b29scy53cmFwcyJAZW4sDQogICAgICAgICJm\"\n",
        "        \"dW5jdG9vbHMud3JhcHMiQGVzIDsNCiAgICBweWVkdTphTml2ZWxEb21pbmlvIHB5cjphdmFuemFkbyA7DQogICAgcHllZHU6cGVy\"\n",
        "        \"dGVuZWNlQVRlbWEgcHlyOlRfZnVuY2lvbmFsIDsNCiAgICBweWVkdTpyZXF1aWVyZVByZXJyZXF1aXNpdG8gcHlyOmRlY29yYWRv\"\n",
        "        \"ciA7DQogICAgcHllZHU6dGllbmVEaWZpY3VsdGFkIDQgLg0KDQpweXI6aGVhcCBhIHB5ZWR1OkVzdHJ1Y3R1cmFEZURhdG9zIDsN\"\n",
        "        \"CiAgICByZGZzOmxhYmVsICJIZWFwIkBlbiwNCiAgICAgICAgIk1vbnTDrWN1bG8gKGhlYXBxKSJAZXMgOw0KICAgIHB5ZWR1OmFO\"\n",
        "        \"aXZlbERvbWluaW8gcHlyOmF2YW56YWRvIDsNCiAgICBweWVkdTpwZXJ0ZW5lY2VBVGVtYSBweXI6VF9lc3RydWN0dXJhcyA7DQog\"\n",
        "        \"ICAgcHllZHU6cmVxdWllcmVQcmVycmVxdWlzaXRvIHB5cjpjb21wbGVqaWRhZCwNCiAgICAgICAgcHlyOmxpc3RhIDsNCiAgICBw\"\n",
        "        \"eWVkdTp0aWVuZURpZmljdWx0YWQgNCAuDQoNCnB5cjppZGVudGlkYWRfb2JqZXRvcyBhIHB5ZWR1OlByaW5jaXBpb1RyYW5zdmVy\"\n",
        "        \"c2FsIDsNCiAgICByZGZzOmxhYmVsICJPYmplY3QgaWRlbnRpdHkiQGVuLA0KICAgICAgICAiSWRlbnRpZGFkIGRlIG9iamV0b3Mg\"\n",
        "        \"KGlzKSJAZXMgOw0KICAgIHB5ZWR1OmFOaXZlbERvbWluaW8gcHlyOmludGVybWVkaW8gOw0KICAgIHB5ZWR1OnBlcnRlbmVjZUFU\"\n",
        "        \"ZW1hIHB5cjpUX3RpcG9zIDsNCiAgICBweWVkdTpyZXF1aWVyZVByZXJyZXF1aXNpdG8gcHlyOm11dGFibGVfaW5tdXRhYmxlIDsN\"\n",
        "        \"CiAgICBweWVkdTp0aWVuZURpZmljdWx0YWQgMyAuDQoNCnB5cjppdGVydG9vbHNfbW9kIGEgcHllZHU6TW9kdWxvTGlicmVyaWEg\"\n",
        "        \"Ow0KICAgIHJkZnM6bGFiZWwgIml0ZXJ0b29scyJAZW4sDQogICAgICAgICJpdGVydG9vbHMiQGVzIDsNCiAgICBweWVkdTphTml2\"\n",
        "        \"ZWxEb21pbmlvIHB5cjphdmFuemFkbyA7DQogICAgcHllZHU6cGVydGVuZWNlQVRlbWEgcHlyOlRfZnVuY2lvbmFsIDsNCiAgICBw\"\n",
        "        \"eWVkdTpyZXF1aWVyZVByZXJyZXF1aXNpdG8gcHlyOml0ZXJhYmxlcyA7DQogICAgcHllZHU6dGllbmVEaWZpY3VsdGFkIDQgLg0K\"\n",
        "        \"DQpweXI6anNvbl9tb2QgYSBweWVkdTpNb2R1bG9MaWJyZXJpYSA7DQogICAgcmRmczpsYWJlbCAianNvbiBtb2R1bGUiQGVuLA0K\"\n",
        "        \"ICAgICAgICAiTcOzZHVsbyBqc29uIkBlcyA7DQogICAgcHllZHU6YU5pdmVsRG9taW5pbyBweXI6aW50ZXJtZWRpbyA7DQogICAg\"\n",
        "        \"cHllZHU6cGVydGVuZWNlQVRlbWEgcHlyOlRfZmljaGVyb3MgOw0KICAgIHB5ZWR1OnJlcXVpZXJlUHJlcnJlcXVpc2l0byBweXI6\"\n",
        "        \"ZGljY2lvbmFyaW8gOw0KICAgIHB5ZWR1OnRpZW5lRGlmaWN1bHRhZCAzIC4NCg0KcHlyOmxlZXJfZmljaGVybyBhIHB5ZWR1OkZ1\"\n",
        "        \"bmNpb25JbnRlZ3JhZGEgOw0KICAgIHJkZnM6bGFiZWwgIkZpbGUgcmVhZGluZyJAZW4sDQogICAgICAgICJMZWN0dXJhIGRlIGZp\"\n",
        "        \"Y2hlcm9zIkBlcyA7DQogICAgcHllZHU6YU5pdmVsRG9taW5pbyBweXI6aW50ZXJtZWRpbyA7DQogICAgcHllZHU6cGVydGVuZWNl\"\n",
        "        \"QVRlbWEgcHlyOlRfZmljaGVyb3MgOw0KICAgIHB5ZWR1OnJlcXVpZXJlUHJlcnJlcXVpc2l0byBweXI6YWJyaXJfZmljaGVybyA7\"\n",
        "        \"DQogICAgcHllZHU6dGllbmVEaWZpY3VsdGFkIDMgLg0KDQpweXI6bWFwX2Z1bmMgYSBweWVkdTpGdW5jaW9uSW50ZWdyYWRhIDsN\"\n",
        "        \"CiAgICByZGZzOmxhYmVsICJtYXAiQGVuLA0KICAgICAgICAibWFwKCkiQGVzIDsNCiAgICBweWVkdTphTml2ZWxEb21pbmlvIHB5\"\n",
        "        \"cjppbnRlcm1lZGlvIDsNCiAgICBweWVkdTpwZXJ0ZW5lY2VBVGVtYSBweXI6VF9mdW5jaW9uYWwgOw0KICAgIHB5ZWR1OnJlcXVp\"\n",
        "        \"ZXJlUHJlcnJlcXVpc2l0byBweXI6ZnVuY2lvbl9vcmRlbl9zdXBlcmlvciwNCiAgICAgICAgcHlyOml0ZXJhYmxlcyA7DQogICAg\"\n",
        "        \"cHllZHU6dGllbmVEaWZpY3VsdGFkIDMgLg0KDQpweXI6bWF0Y2hfY2FzZSBhIHB5ZWR1OkVzdHJ1Y3R1cmFEZUNvbnRyb2wgOw0K\"\n",
        "        \"ICAgIHJkZnM6bGFiZWwgIlN0cnVjdHVyYWwgcGF0dGVybiBtYXRjaGluZyJAZW4sDQogICAgICAgICJtYXRjaC1jYXNlIkBlcyA7\"\n",
        "        \"DQogICAgcHllZHU6YU5pdmVsRG9taW5pbyBweXI6YXZhbnphZG8gOw0KICAgIHB5ZWR1OnBlcnRlbmVjZUFUZW1hIHB5cjpUX2Nv\"\n",
        "        \"bnRyb2wgOw0KICAgIHB5ZWR1OnJlcXVpZXJlUHJlcnJlcXVpc2l0byBweXI6Y29uZGljaW9uYWwgOw0KICAgIHB5ZWR1OnRpZW5l\"\n",
        "        \"RGlmaWN1bHRhZCA0IC4NCg0KcHlyOm1ldG9kb3Nfc3RyIGEgcHllZHU6RnVuY2lvbkludGVncmFkYSA7DQogICAgcmRmczpsYWJl\"\n",
        "        \"bCAiU3RyaW5nIG1ldGhvZHMiQGVuLA0KICAgICAgICAiTcOpdG9kb3MgZGUgY2FkZW5hIkBlcyA7DQogICAgcHllZHU6YU5pdmVs\"\n",
        "        \"RG9taW5pbyBweXI6YmFzaWNvIDsNCiAgICBweWVkdTpwZXJ0ZW5lY2VBVGVtYSBweXI6VF9zdHJpbmdzIDsNCiAgICBweWVkdTpy\"\n",
        "        \"ZXF1aWVyZVByZXJyZXF1aXNpdG8gcHlyOnRpcG9fc3RyIDsNCiAgICBweWVkdTp0aWVuZURpZmljdWx0YWQgMiAuDQoNCnB5cjpt\"\n",
        "        \"aXhpbiBhIHB5ZWR1OlBhcmFkaWdtYSA7DQogICAgcmRmczpsYWJlbCAiTWl4aW4iQGVuLA0KICAgICAgICAiTWl4aW4iQGVzIDsN\"\n",
        "        \"CiAgICBweWVkdTphTml2ZWxEb21pbmlvIHB5cjphdmFuemFkbyA7DQogICAgcHllZHU6cGVydGVuZWNlQVRlbWEgcHlyOlRfcG9v\"\n",
        "        \"IDsNCiAgICBweWVkdTpyZXF1aWVyZVByZXJyZXF1aXNpdG8gcHlyOmhlcmVuY2lhX211bHRpcGxlIDsNCiAgICBweWVkdTp0aWVu\"\n",
        "        \"ZURpZmljdWx0YWQgNSAuDQoNCnB5cjptb2R1bG9fZGF0ZXRpbWUgYSBweWVkdTpNb2R1bG9MaWJyZXJpYSA7DQogICAgcmRmczps\"\n",
        "        \"YWJlbCAiZGF0ZXRpbWUgbW9kdWxlIkBlbiwNCiAgICAgICAgIk3Ds2R1bG8gZGF0ZXRpbWUiQGVzIDsNCiAgICBweWVkdTphTml2\"\n",
        "        \"ZWxEb21pbmlvIHB5cjppbnRlcm1lZGlvIDsNCiAgICBweWVkdTpwZXJ0ZW5lY2VBVGVtYSBweXI6VF9tb2R1bG9zIDsNCiAgICBw\"\n",
        "        \"eWVkdTpyZXF1aWVyZVByZXJyZXF1aXNpdG8gcHlyOmltcG9ydF9tb2QgOw0KICAgIHB5ZWR1OnRpZW5lRGlmaWN1bHRhZCAzIC4N\"\n",
        "        \"Cg0KcHlyOm1vZHVsb19tYXRoIGEgcHllZHU6TW9kdWxvTGlicmVyaWEgOw0KICAgIHJkZnM6bGFiZWwgIm1hdGggbW9kdWxlIkBl\"\n",
        "        \"biwNCiAgICAgICAgIk3Ds2R1bG8gbWF0aCJAZXMgOw0KICAgIHB5ZWR1OmFOaXZlbERvbWluaW8gcHlyOmJhc2ljbyA7DQogICAg\"\n",
        "        \"cHllZHU6cGVydGVuZWNlQVRlbWEgcHlyOlRfbW9kdWxvcyA7DQogICAgcHllZHU6cmVxdWllcmVQcmVycmVxdWlzaXRvIHB5cjpp\"\n",
        "        \"bXBvcnRfbW9kIDsNCiAgICBweWVkdTp0aWVuZURpZmljdWx0YWQgMiAuDQoNCnB5cjptb2R1bG9fb3MgYSBweWVkdTpNb2R1bG9M\"\n",
        "        \"aWJyZXJpYSA7DQogICAgcmRmczpsYWJlbCAib3MgbW9kdWxlIkBlbiwNCiAgICAgICAgIk3Ds2R1bG8gb3MiQGVzIDsNCiAgICBw\"\n",
        "        \"eWVkdTphTml2ZWxEb21pbmlvIHB5cjppbnRlcm1lZGlvIDsNCiAgICBweWVkdTpwZXJ0ZW5lY2VBVGVtYSBweXI6VF9tb2R1bG9z\"\n",
        "        \"IDsNCiAgICBweWVkdTpyZXF1aWVyZVByZXJyZXF1aXNpdG8gcHlyOmltcG9ydF9tb2QgOw0KICAgIHB5ZWR1OnRpZW5lRGlmaWN1\"\n",
        "        \"bHRhZCAzIC4NCg0KcHlyOm1vZHVsb19yYW5kb20gYSBweWVkdTpNb2R1bG9MaWJyZXJpYSA7DQogICAgcmRmczpsYWJlbCAicmFu\"\n",
        "        \"ZG9tIG1vZHVsZSJAZW4sDQogICAgICAgICJNw7NkdWxvIHJhbmRvbSJAZXMgOw0KICAgIHB5ZWR1OmFOaXZlbERvbWluaW8gcHly\"\n",
        "        \"OmJhc2ljbyA7DQogICAgcHllZHU6cGVydGVuZWNlQVRlbWEgcHlyOlRfbW9kdWxvcyA7DQogICAgcHllZHU6cmVxdWllcmVQcmVy\"\n",
        "        \"cmVxdWlzaXRvIHB5cjppbXBvcnRfbW9kIDsNCiAgICBweWVkdTp0aWVuZURpZmljdWx0YWQgMiAuDQoNCnB5cjptb2R1bG9fc3lz\"\n",
        "        \"IGEgcHllZHU6TW9kdWxvTGlicmVyaWEgOw0KICAgIHJkZnM6bGFiZWwgInN5cyBtb2R1bGUiQGVuLA0KICAgICAgICAiTcOzZHVs\"\n",
        "        \"byBzeXMiQGVzIDsNCiAgICBweWVkdTphTml2ZWxEb21pbmlvIHB5cjppbnRlcm1lZGlvIDsNCiAgICBweWVkdTpwZXJ0ZW5lY2VB\"\n",
        "        \"VGVtYSBweXI6VF9tb2R1bG9zIDsNCiAgICBweWVkdTpyZXF1aWVyZVByZXJyZXF1aXNpdG8gcHlyOmltcG9ydF9tb2QgOw0KICAg\"\n",
        "        \"IHB5ZWR1OnRpZW5lRGlmaWN1bHRhZCAzIC4NCg0KcHlyOm1ybyBhIHB5ZWR1OlBhcmFkaWdtYSA7DQogICAgcmRmczpsYWJlbCAi\"\n",
        "        \"TWV0aG9kIHJlc29sdXRpb24gb3JkZXIiQGVuLA0KICAgICAgICAiT3JkZW4gZGUgcmVzb2x1Y2nDs24gKE1STykiQGVzIDsNCiAg\"\n",
        "        \"ICBweWVkdTphTml2ZWxEb21pbmlvIHB5cjphdmFuemFkbyA7DQogICAgcHllZHU6cGVydGVuZWNlQVRlbWEgcHlyOlRfcG9vIDsN\"\n",
        "        \"CiAgICBweWVkdTpyZXF1aWVyZVByZXJyZXF1aXNpdG8gcHlyOmhlcmVuY2lhX211bHRpcGxlIDsNCiAgICBweWVkdTp0aWVuZURp\"\n",
        "        \"ZmljdWx0YWQgNSAuDQoNCnB5cjpuYW1lZHR1cGxlIGEgcHllZHU6RXN0cnVjdHVyYURlRGF0b3MgOw0KICAgIHJkZnM6bGFiZWwg\"\n",
        "        \"Ik5hbWVkIHR1cGxlIkBlbiwNCiAgICAgICAgIm5hbWVkdHVwbGUiQGVzIDsNCiAgICBweWVkdTphTml2ZWxEb21pbmlvIHB5cjpp\"\n",
        "        \"bnRlcm1lZGlvIDsNCiAgICBweWVkdTpwZXJ0ZW5lY2VBVGVtYSBweXI6VF90aXBvcyA7DQogICAgcHllZHU6cmVxdWllcmVQcmVy\"\n",
        "        \"cmVxdWlzaXRvIHB5cjp0dXBsYSA7DQogICAgcHllZHU6dGllbmVEaWZpY3VsdGFkIDMgLg0KDQpweXI6cGFydGlhbCBhIHB5ZWR1\"\n",
        "        \"Ok1vZHVsb0xpYnJlcmlhIDsNCiAgICByZGZzOmxhYmVsICJwYXJ0aWFsIkBlbiwNCiAgICAgICAgImZ1bmN0b29scy5wYXJ0aWFs\"\n",
        "        \"IkBlcyA7DQogICAgcHllZHU6YU5pdmVsRG9taW5pbyBweXI6YXZhbnphZG8gOw0KICAgIHB5ZWR1OnBlcnRlbmVjZUFUZW1hIHB5\"\n",
        "        \"cjpUX2Z1bmNpb25hbCA7DQogICAgcHllZHU6cmVxdWllcmVQcmVycmVxdWlzaXRvIHB5cjpmdW5jaW9uX29yZGVuX3N1cGVyaW9y\"\n",
        "        \"IDsNCiAgICBweWVkdTp0aWVuZURpZmljdWx0YWQgNCAuDQoNCnB5cjpwYXRobGliIGEgcHllZHU6TW9kdWxvTGlicmVyaWEgOw0K\"\n",
        "        \"ICAgIHJkZnM6bGFiZWwgInBhdGhsaWIiQGVuLA0KICAgICAgICAicGF0aGxpYiJAZXMgOw0KICAgIHB5ZWR1OmFOaXZlbERvbWlu\"\n",
        "        \"aW8gcHlyOmludGVybWVkaW8gOw0KICAgIHB5ZWR1OnBlcnRlbmVjZUFUZW1hIHB5cjpUX2ZpY2hlcm9zIDsNCiAgICBweWVkdTpy\"\n",
        "        \"ZXF1aWVyZVByZXJyZXF1aXNpdG8gcHlyOmFicmlyX2ZpY2hlcm8gOw0KICAgIHB5ZWR1OnRpZW5lRGlmaWN1bHRhZCAzIC4NCg0K\"\n",
        "        \"cHlyOnBlcDggYSBweWVkdTpQcmluY2lwaW9UcmFuc3ZlcnNhbCA7DQogICAgcmRmczpsYWJlbCAiUEVQIDgiQGVuLA0KICAgICAg\"\n",
        "        \"ICAiUEVQIDggKGVzdGlsbykiQGVzIDsNCiAgICBweWVkdTphTml2ZWxEb21pbmlvIHB5cjpiYXNpY28gOw0KICAgIHB5ZWR1OnBl\"\n",
        "        \"cnRlbmVjZUFUZW1hIHB5cjpUX3Rlc3RpbmcgOw0KICAgIHB5ZWR1OnRpZW5lRGlmaWN1bHRhZCAyIC4NCg0KcHlyOnBpcF9tb2Qg\"\n",
        "        \"YSBweWVkdTpQcmluY2lwaW9UcmFuc3ZlcnNhbCA7DQogICAgcmRmczpsYWJlbCAicGlwIkBlbiwNCiAgICAgICAgIkdlc3RvciBk\"\n",
        "        \"ZSBwYXF1ZXRlcyAocGlwKSJAZXMgOw0KICAgIHB5ZWR1OmFOaXZlbERvbWluaW8gcHlyOmJhc2ljbyA7DQogICAgcHllZHU6cGVy\"\n",
        "        \"dGVuZWNlQVRlbWEgcHlyOlRfbW9kdWxvcyA7DQogICAgcHllZHU6cmVxdWllcmVQcmVycmVxdWlzaXRvIHB5cjpwYXF1ZXRlIDsN\"\n",
        "        \"CiAgICBweWVkdTp0aWVuZURpZmljdWx0YWQgMiAuDQoNCnB5cjpwb2xpbW9yZmlzbW8gYSBweWVkdTpQYXJhZGlnbWEgOw0KICAg\"\n",
        "        \"IHJkZnM6bGFiZWwgIlBvbHltb3JwaGlzbSJAZW4sDQogICAgICAgICJQb2xpbW9yZmlzbW8iQGVzIDsNCiAgICBza29zOmV4YWN0\"\n",
        "        \"TWF0Y2ggd2Q6UTMyNDAyNTIgOw0KICAgIHB5ZWR1OmFOaXZlbERvbWluaW8gcHlyOmF2YW56YWRvIDsNCiAgICBweWVkdTpwZXJ0\"\n",
        "        \"ZW5lY2VBVGVtYSBweXI6VF9wb28gOw0KICAgIHB5ZWR1OnJlcXVpZXJlUHJlcnJlcXVpc2l0byBweXI6aGVyZW5jaWEgOw0KICAg\"\n",
        "        \"IHB5ZWR1OnRpZW5lRGlmaWN1bHRhZCA0IC4NCg0KcHlyOnByb2dfZGluYW1pY2EgYSBweWVkdTpQcmluY2lwaW9UcmFuc3ZlcnNh\"\n",
        "        \"bCA7DQogICAgcmRmczpsYWJlbCAiRHluYW1pYyBwcm9ncmFtbWluZyJAZW4sDQogICAgICAgICJQcm9ncmFtYWNpw7NuIGRpbsOh\"\n",
        "        \"bWljYSJAZXMgOw0KICAgIHB5ZWR1OmFOaXZlbERvbWluaW8gcHlyOmF2YW56YWRvIDsNCiAgICBweWVkdTpwZXJ0ZW5lY2VBVGVt\"\n",
        "        \"YSBweXI6VF9hbGdvcml0bW9zIDsNCiAgICBweWVkdTpyZXF1aWVyZVByZXJyZXF1aXNpdG8gcHlyOm1lbW9pemFjaW9uLA0KICAg\"\n",
        "        \"ICAgICBweXI6cmVjdXJzaW9uIDsNCiAgICBweWVkdTp0aWVuZURpZmljdWx0YWQgNSAuDQoNCnB5cjpwcm9waWVkYWQgYSBweWVk\"\n",
        "        \"dTpQYXJhZGlnbWEgOw0KICAgIHJkZnM6bGFiZWwgIlByb3BlcnR5IkBlbiwNCiAgICAgICAgIlByb3BpZWRhZCAoQHByb3BlcnR5\"\n",
        "        \"KSJAZXMgOw0KICAgIHB5ZWR1OmFOaXZlbERvbWluaW8gcHlyOmF2YW56YWRvIDsNCiAgICBweWVkdTpwZXJ0ZW5lY2VBVGVtYSBw\"\n",
        "        \"eXI6VF9wb28gOw0KICAgIHB5ZWR1OnJlcXVpZXJlUHJlcnJlcXVpc2l0byBweXI6ZGVjb3JhZG9yLA0KICAgICAgICBweXI6ZW5j\"\n",
        "        \"YXBzdWxhY2lvbiA7DQogICAgcHllZHU6dGllbmVEaWZpY3VsdGFkIDQgLg0KDQpweXI6cHl0ZXN0X21vZCBhIHB5ZWR1Ok1vZHVs\"\n",
        "        \"b0xpYnJlcmlhIDsNCiAgICByZGZzOmxhYmVsICJweXRlc3QiQGVuLA0KICAgICAgICAicHl0ZXN0IkBlcyA7DQogICAgcHllZHU6\"\n",
        "        \"YU5pdmVsRG9taW5pbyBweXI6YXZhbnphZG8gOw0KICAgIHB5ZWR1OnBlcnRlbmVjZUFUZW1hIHB5cjpUX3Rlc3RpbmcgOw0KICAg\"\n",
        "        \"IHB5ZWR1OnJlcXVpZXJlUHJlcnJlcXVpc2l0byBweXI6ZnVuY2lvbiA7DQogICAgcHllZHU6dGllbmVEaWZpY3VsdGFkIDQgLg0K\"\n",
        "        \"DQpweXI6cHl0aG9uIGEgcHllZHU6UHJpbmNpcGlvVHJhbnN2ZXJzYWwgOw0KICAgIHJkZnM6bGFiZWwgIlB5dGhvbiJAZW4sDQog\"\n",
        "        \"ICAgICAgICJQeXRob24iQGVzIDsNCiAgICBza29zOmV4YWN0TWF0Y2ggd2Q6UTI4ODY1IDsNCiAgICBza29zOnByZWZMYWJlbCAi\"\n",
        "        \"UHl0aG9uIkBlcyA7DQogICAgcHllZHU6cGVydGVuZWNlQVRlbWEgcHlyOlRfZnVuZGFtZW50b3MgLg0KDQpweXI6cmFuZ2VfZiBh\"\n",
        "        \"IHB5ZWR1OkZ1bmNpb25JbnRlZ3JhZGEgOw0KICAgIHJkZnM6bGFiZWwgInJhbmdlIkBlbiwNCiAgICAgICAgInJhbmdlKCkiQGVz\"\n",
        "        \"IDsNCiAgICBweWVkdTphTml2ZWxEb21pbmlvIHB5cjpiYXNpY28gOw0KICAgIHB5ZWR1OnBlcnRlbmVjZUFUZW1hIHB5cjpUX2Nv\"\n",
        "        \"bnRyb2wgOw0KICAgIHB5ZWR1OnJlcXVpZXJlUHJlcnJlcXVpc2l0byBweXI6YnVjbGVfZm9yIDsNCiAgICBweWVkdTp0aWVuZURp\"\n",
        "        \"ZmljdWx0YWQgMSAuDQoNCnB5cjpyZWNfZG9jX2xpc3RhcyBhIHNjaGVtYTpMZWFybmluZ1Jlc291cmNlLA0KICAgICAgICBweWVk\"\n",
        "        \"dTpSZWN1cnNvIDsNCiAgICByZGZzOmxhYmVsICJPZmZpY2lhbCBkb2N1bWVudGF0aW9uOiBkYXRhIHN0cnVjdHVyZXMiQGVuLA0K\"\n",
        "        \"ICAgICAgICAiRG9jdW1lbnRhY2nDs24gb2ZpY2lhbDogZXN0cnVjdHVyYXMgZGUgZGF0b3MiQGVzIDsNCiAgICBkY3Rlcm1zOmNy\"\n",
        "        \"ZWF0b3IgIlB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uIiA7DQogICAgZGN0ZXJtczp0aXRsZSAiRGF0YSBTdHJ1Y3R1cmVzIOKA\"\n",
        "        \"lCBUaGUgUHl0aG9uIFR1dG9yaWFsIkBlbiA7DQogICAgc2NoZW1hOnVybCAiaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy90dXRv\"\n",
        "        \"cmlhbC9kYXRhc3RydWN0dXJlcy5odG1sIiA7DQogICAgcHllZHU6aWx1c3RyYUNvbmNlcHRvIHB5cjpkaWNjaW9uYXJpbywNCiAg\"\n",
        "        \"ICAgICAgcHlyOmxpc3RhIC4NCg0KcHlyOnJlZHVjZV9mdW5jIGEgcHllZHU6RnVuY2lvbkludGVncmFkYSA7DQogICAgcmRmczps\"\n",
        "        \"YWJlbCAicmVkdWNlIkBlbiwNCiAgICAgICAgImZ1bmN0b29scy5yZWR1Y2UoKSJAZXMgOw0KICAgIHB5ZWR1OmFOaXZlbERvbWlu\"\n",
        "        \"aW8gcHlyOmF2YW56YWRvIDsNCiAgICBweWVkdTpwZXJ0ZW5lY2VBVGVtYSBweXI6VF9mdW5jaW9uYWwgOw0KICAgIHB5ZWR1OnJl\"\n",
        "        \"cXVpZXJlUHJlcnJlcXVpc2l0byBweXI6ZnVuY2lvbl9vcmRlbl9zdXBlcmlvciA7DQogICAgcHllZHU6dGllbmVEaWZpY3VsdGFk\"\n",
        "        \"IDQgLg0KDQpweXI6cmVnZXggYSBweWVkdTpNb2R1bG9MaWJyZXJpYSA7DQogICAgcmRmczpsYWJlbCAiUmVndWxhciBleHByZXNz\"\n",
        "        \"aW9ucyJAZW4sDQogICAgICAgICJFeHByZXNpb25lcyByZWd1bGFyZXMgKHJlKSJAZXMgOw0KICAgIHNrb3M6ZXhhY3RNYXRjaCB3\"\n",
        "        \"ZDpRMTg1NjEyIDsNCiAgICBweWVkdTphTml2ZWxEb21pbmlvIHB5cjphdmFuemFkbyA7DQogICAgcHllZHU6cGVydGVuZWNlQVRl\"\n",
        "        \"bWEgcHlyOlRfc3RyaW5ncyA7DQogICAgcHllZHU6cmVxdWllcmVQcmVycmVxdWlzaXRvIHB5cjp0aXBvX3N0ciA7DQogICAgcHll\"\n",
        "        \"ZHU6dGllbmVEaWZpY3VsdGFkIDUgLg0KDQpweXI6cmV0b3Jub19tdWx0aXBsZSBhIHB5ZWR1OlByaW5jaXBpb1RyYW5zdmVyc2Fs\"\n",
        "        \"IDsNCiAgICByZGZzOmxhYmVsICJNdWx0aXBsZSByZXR1cm4iQGVuLA0KICAgICAgICAiUmV0b3JubyBtw7psdGlwbGUiQGVzIDsN\"\n",
        "        \"CiAgICBweWVkdTphTml2ZWxEb21pbmlvIHB5cjpiYXNpY28gOw0KICAgIHB5ZWR1OnBlcnRlbmVjZUFUZW1hIHB5cjpUX2Z1bmNp\"\n",
        "        \"b25lcyA7DQogICAgcHllZHU6cmVxdWllcmVQcmVycmVxdWlzaXRvIHB5cjpmdW5jaW9uLA0KICAgICAgICBweXI6dHVwbGEgOw0K\"\n",
        "        \"ICAgIHB5ZWR1OnRpZW5lRGlmaWN1bHRhZCAyIC4NCg0KcHlyOnNlbGZfcGFyYW0gYSBweWVkdTpQYXJhZGlnbWEgOw0KICAgIHJk\"\n",
        "        \"ZnM6bGFiZWwgInNlbGYiQGVuLA0KICAgICAgICAiUGFyw6FtZXRybyBzZWxmIkBlcyA7DQogICAgcHllZHU6YU5pdmVsRG9taW5p\"\n",
        "        \"byBweXI6aW50ZXJtZWRpbyA7DQogICAgcHllZHU6cGVydGVuZWNlQVRlbWEgcHlyOlRfcG9vIDsNCiAgICBweWVkdTpyZXF1aWVy\"\n",
        "        \"ZVByZXJyZXF1aXNpdG8gcHlyOm1ldG9kbyA7DQogICAgcHllZHU6dGllbmVEaWZpY3VsdGFkIDMgLg0KDQpweXI6c29icmVjYXJn\"\n",
        "        \"YV9vcGVyYWRvcmVzIGEgcHllZHU6UGFyYWRpZ21hIDsNCiAgICByZGZzOmxhYmVsICJPcGVyYXRvciBvdmVybG9hZGluZyJAZW4s\"\n",
        "        \"DQogICAgICAgICJTb2JyZWNhcmdhIGRlIG9wZXJhZG9yZXMiQGVzIDsNCiAgICBweWVkdTphTml2ZWxEb21pbmlvIHB5cjphdmFu\"\n",
        "        \"emFkbyA7DQogICAgcHllZHU6cGVydGVuZWNlQVRlbWEgcHlyOlRfcG9vIDsNCiAgICBweWVkdTpyZXF1aWVyZVByZXJyZXF1aXNp\"\n",
        "        \"dG8gcHlyOmR1bmRlciA7DQogICAgcHllZHU6dGllbmVEaWZpY3VsdGFkIDUgLg0KDQpweXI6c29ydGVkX2YgYSBweWVkdTpGdW5j\"\n",
        "        \"aW9uSW50ZWdyYWRhIDsNCiAgICByZGZzOmxhYmVsICJzb3J0ZWQvc29ydCJAZW4sDQogICAgICAgICJzb3J0ZWQoKSB5IHNvcnQo\"\n",
        "        \"KSJAZXMgOw0KICAgIHB5ZWR1OmFOaXZlbERvbWluaW8gcHlyOmJhc2ljbyA7DQogICAgcHllZHU6cGVydGVuZWNlQVRlbWEgcHly\"\n",
        "        \"OlRfYWxnb3JpdG1vcyA7DQogICAgcHllZHU6cmVxdWllcmVQcmVycmVxdWlzaXRvIHB5cjpsaXN0YSA7DQogICAgcHllZHU6dGll\"\n",
        "        \"bmVEaWZpY3VsdGFkIDIgLg0KDQpweXI6c3RtdF9vZmZieW9uZSBhIHJkZjpTdGF0ZW1lbnQgOw0KICAgIHJkZnM6bGFiZWwgIlBy\"\n",
        "        \"b3ZlbmFuY2UgKHJlaWZpY2F0aW9uKTogb2ZmLWJ5LW9uZSBvbiBpbmRleGluZyBwZXIgS2V1bmluZyBldCBhbC4iQGVuLA0KICAg\"\n",
        "        \"ICAgICAiUHJvY2VkZW5jaWEgKHJlaWZpY2FjacOzbik6IG9mZi1ieS1vbmUgc29icmUgaW5kZXhhY2nDs24gc2Vnw7puIEtldW5p\"\n",
        "        \"bmcgZXQgYWwuIkBlcyA7DQogICAgZGN0ZXJtczpzb3VyY2UgcHlyOnJlZl9rZXVuaW5nMjAxOSA7DQogICAgcmRmOm9iamVjdCBw\"\n",
        "        \"eXI6aW5kZXhhY2lvbiA7DQogICAgcmRmOnByZWRpY2F0ZSBweWVkdTplcnJvclNvYnJlQ29uY2VwdG8gOw0KICAgIHJkZjpzdWJq\"\n",
        "        \"ZWN0IHB5cjplcnJfb2ZmX2J5X29uZSA7DQogICAgcmRmczpjb21tZW50ICJQcm9jZWRlbmNpYSBkZWwgZW51bmNpYWRvIChwYXRy\"\n",
        "        \"w7NuIGRlIHJlaWZpY2FjacOzbiBkZWwgbWF0ZXJpYWwgZG9jZW50ZSkuIkBlcyAuDQoNCnB5cjpzdHJfcmVwciBhIHB5ZWR1OlBh\"\n",
        "        \"cmFkaWdtYSA7DQogICAgcmRmczpsYWJlbCAic3RyIGFuZCByZXByIkBlbiwNCiAgICAgICAgIl9fc3RyX18geSBfX3JlcHJfXyJA\"\n",
        "        \"ZXMgOw0KICAgIHB5ZWR1OmFOaXZlbERvbWluaW8gcHlyOmF2YW56YWRvIDsNCiAgICBweWVkdTpwZXJ0ZW5lY2VBVGVtYSBweXI6\"\n",
        "        \"VF9wb28gOw0KICAgIHB5ZWR1OnJlcXVpZXJlUHJlcnJlcXVpc2l0byBweXI6ZHVuZGVyIDsNCiAgICBweWVkdTp0aWVuZURpZmlj\"\n",
        "        \"dWx0YWQgNCAuDQoNCnB5cjpzdXBlcl9jYWxsIGEgcHllZHU6UGFyYWRpZ21hIDsNCiAgICByZGZzOmxhYmVsICJzdXBlciJAZW4s\"\n",
        "        \"DQogICAgICAgICJzdXBlcigpIkBlcyA7DQogICAgcHllZHU6YU5pdmVsRG9taW5pbyBweXI6YXZhbnphZG8gOw0KICAgIHB5ZWR1\"\n",
        "        \"OnBlcnRlbmVjZUFUZW1hIHB5cjpUX3BvbyA7DQogICAgcHllZHU6cmVxdWllcmVQcmVycmVxdWlzaXRvIHB5cjpoZXJlbmNpYSA7\"\n",
        "        \"DQogICAgcHllZHU6dGllbmVEaWZpY3VsdGFkIDQgLg0KDQpweXI6dGFibGFfaGFzaCBhIHB5ZWR1OkVzdHJ1Y3R1cmFEZURhdG9z\"\n",
        "        \"IDsNCiAgICByZGZzOmxhYmVsICJIYXNoIHRhYmxlIkBlbiwNCiAgICAgICAgIlRhYmxhIGhhc2giQGVzIDsNCiAgICBza29zOmV4\"\n",
        "        \"YWN0TWF0Y2ggd2Q6UTIwNzQ0MCA7DQogICAgcHllZHU6YU5pdmVsRG9taW5pbyBweXI6YXZhbnphZG8gOw0KICAgIHB5ZWR1OnBl\"\n",
        "        \"cnRlbmVjZUFUZW1hIHB5cjpUX2FsZ29yaXRtb3MgOw0KICAgIHB5ZWR1OnJlcXVpZXJlUHJlcnJlcXVpc2l0byBweXI6ZGljY2lv\"\n",
        "        \"bmFyaW8gOw0KICAgIHB5ZWR1OnRpZW5lRGlmaWN1bHRhZCA0IC4NCg0KcHlyOnRlcm5hcmlvIGEgcHllZHU6RXN0cnVjdHVyYURl\"\n",
        "        \"Q29udHJvbCA7DQogICAgcmRmczpsYWJlbCAiVGVybmFyeSBvcGVyYXRvciJAZW4sDQogICAgICAgICJPcGVyYWRvciB0ZXJuYXJp\"\n",
        "        \"byJAZXMgOw0KICAgIHB5ZWR1OmFOaXZlbERvbWluaW8gcHlyOmJhc2ljbyA7DQogICAgcHllZHU6cGVydGVuZWNlQVRlbWEgcHly\"\n",
        "        \"OlRfY29udHJvbCA7DQogICAgcHllZHU6cmVxdWllcmVQcmVycmVxdWlzaXRvIHB5cjpjb25kaWNpb25hbCA7DQogICAgcHllZHU6\"\n",
        "        \"dGllbmVEaWZpY3VsdGFkIDIgLg0KDQpweXI6dGlwb19jb21wbGV4IGEgcHllZHU6VGlwb0RlRGF0byA7DQogICAgcmRmczpsYWJl\"\n",
        "        \"bCAiQ29tcGxleCJAZW4sDQogICAgICAgICJDb21wbGVqbyAoY29tcGxleCkiQGVzIDsNCiAgICBweWVkdTphTml2ZWxEb21pbmlv\"\n",
        "        \"IHB5cjppbnRlcm1lZGlvIDsNCiAgICBweWVkdTpwZXJ0ZW5lY2VBVGVtYSBweXI6VF90aXBvcyA7DQogICAgcHllZHU6cmVxdWll\"\n",
        "        \"cmVQcmVycmVxdWlzaXRvIHB5cjp0aXBvX2Zsb2F0IDsNCiAgICBweWVkdTp0aWVuZURpZmljdWx0YWQgMyAuDQoNCnB5cjp0cnV0\"\n",
        "        \"aGluZXNzIGEgcHllZHU6UHJpbmNpcGlvVHJhbnN2ZXJzYWwgOw0KICAgIHJkZnM6bGFiZWwgIlRydXRoaW5lc3MiQGVuLA0KICAg\"\n",
        "        \"ICAgICAiVmFsb3JlcyBkZSB2ZXJkYWQiQGVzIDsNCiAgICBweWVkdTphTml2ZWxEb21pbmlvIHB5cjpiYXNpY28gOw0KICAgIHB5\"\n",
        "        \"ZWR1OnBlcnRlbmVjZUFUZW1hIHB5cjpUX3RpcG9zIDsNCiAgICBweWVkdTpyZXF1aWVyZVByZXJyZXF1aXNpdG8gcHlyOnRpcG9f\"\n",
        "        \"Ym9vbCA7DQogICAgcHllZHU6dGllbmVEaWZpY3VsdGFkIDIgLg0KDQpweXI6dHJ5X2V4Y2VwdF9lbHNlIGEgcHllZHU6RXN0cnVj\"\n",
        "        \"dHVyYURlQ29udHJvbCA7DQogICAgcmRmczpsYWJlbCAidHJ5L2V4Y2VwdC9lbHNlL2ZpbmFsbHkiQGVuLA0KICAgICAgICAidHJ5\"\n",
        "        \"L2V4Y2VwdC9lbHNlL2ZpbmFsbHkiQGVzIDsNCiAgICBweWVkdTphTml2ZWxEb21pbmlvIHB5cjppbnRlcm1lZGlvIDsNCiAgICBw\"\n",
        "        \"eWVkdTpwZXJ0ZW5lY2VBVGVtYSBweXI6VF9leGNlcGNpb25lcyA7DQogICAgcHllZHU6cmVxdWllcmVQcmVycmVxdWlzaXRvIHB5\"\n",
        "        \"cjpleGNlcGNpb24gOw0KICAgIHB5ZWR1OnRpZW5lRGlmaWN1bHRhZCAzIC4NCg0KcHlyOnR5cGVfY2hlY2tpbmcgYSBweWVkdTpQ\"\n",
        "        \"cmluY2lwaW9UcmFuc3ZlcnNhbCA7DQogICAgcmRmczpsYWJlbCAiVHlwZSBjaGVja2luZyJAZW4sDQogICAgICAgICJDb21wcm9i\"\n",
        "        \"YWNpw7NuIGRlIHRpcG9zIChteXB5KSJAZXMgOw0KICAgIHB5ZWR1OmFOaXZlbERvbWluaW8gcHlyOmF2YW56YWRvIDsNCiAgICBw\"\n",
        "        \"eWVkdTpwZXJ0ZW5lY2VBVGVtYSBweXI6VF90ZXN0aW5nIDsNCiAgICBweWVkdTpyZXF1aWVyZVByZXJyZXF1aXNpdG8gcHlyOmFu\"\n",
        "        \"b3RhY2lvbmVzX3RpcG8gOw0KICAgIHB5ZWR1OnRpZW5lRGlmaWN1bHRhZCA0IC4NCg0KcHlyOnR5cGluZ19nZW5lcmljcyBhIHB5\"\n",
        "        \"ZWR1OlBhcmFkaWdtYSA7DQogICAgcmRmczpsYWJlbCAiR2VuZXJpY3MiQGVuLA0KICAgICAgICAiR2Vuw6lyaWNvcyAoVHlwZVZh\"\n",
        "        \"cikiQGVzIDsNCiAgICBweWVkdTphTml2ZWxEb21pbmlvIHB5cjphdmFuemFkbyA7DQogICAgcHllZHU6cGVydGVuZWNlQVRlbWEg\"\n",
        "        \"cHlyOlRfdGlwb3MgOw0KICAgIHB5ZWR1OnJlcXVpZXJlUHJlcnJlcXVpc2l0byBweXI6YW5vdGFjaW9uZXNfdGlwbywNCiAgICAg\"\n",
        "        \"ICAgcHlyOmNsYXNlIDsNCiAgICBweWVkdTp0aWVuZURpZmljdWx0YWQgNCAuDQoNCnB5cjp0eXBpbmdfb3B0aW9uYWwgYSBweWVk\"\n",
        "        \"dTpQcmluY2lwaW9UcmFuc3ZlcnNhbCA7DQogICAgcmRmczpsYWJlbCAiT3B0aW9uYWwiQGVuLA0KICAgICAgICAidHlwaW5nLk9w\"\n",
        "        \"dGlvbmFsIkBlcyA7DQogICAgcHllZHU6YU5pdmVsRG9taW5pbyBweXI6aW50ZXJtZWRpbyA7DQogICAgcHllZHU6cGVydGVuZWNl\"\n",
        "        \"QVRlbWEgcHlyOlRfdGlwb3MgOw0KICAgIHB5ZWR1OnJlcXVpZXJlUHJlcnJlcXVpc2l0byBweXI6YW5vdGFjaW9uZXNfdGlwbywN\"\n",
        "        \"CiAgICAgICAgcHlyOnRpcG9fbm9uZSA7DQogICAgcHllZHU6dGllbmVEaWZpY3VsdGFkIDMgLg0KDQpweXI6dHlwaW5nX3VuaW9u\"\n",
        "        \"IGEgcHllZHU6UHJpbmNpcGlvVHJhbnN2ZXJzYWwgOw0KICAgIHJkZnM6bGFiZWwgIlVuaW9uIkBlbiwNCiAgICAgICAgInR5cGlu\"\n",
        "        \"Zy5VbmlvbiJAZXMgOw0KICAgIHB5ZWR1OmFOaXZlbERvbWluaW8gcHlyOmludGVybWVkaW8gOw0KICAgIHB5ZWR1OnBlcnRlbmVj\"\n",
        "        \"ZUFUZW1hIHB5cjpUX3RpcG9zIDsNCiAgICBweWVkdTpyZXF1aWVyZVByZXJyZXF1aXNpdG8gcHlyOmFub3RhY2lvbmVzX3RpcG8g\"\n",
        "        \"Ow0KICAgIHB5ZWR1OnRpZW5lRGlmaWN1bHRhZCAzIC4NCg0KcHlyOnVuaXR0ZXN0X21vZCBhIHB5ZWR1Ok1vZHVsb0xpYnJlcmlh\"\n",
        "        \"IDsNCiAgICByZGZzOmxhYmVsICJ1bml0dGVzdCJAZW4sDQogICAgICAgICJ1bml0dGVzdCJAZXMgOw0KICAgIHB5ZWR1OmFOaXZl\"\n",
        "        \"bERvbWluaW8gcHlyOmF2YW56YWRvIDsNCiAgICBweWVkdTpwZXJ0ZW5lY2VBVGVtYSBweXI6VF90ZXN0aW5nIDsNCiAgICBweWVk\"\n",
        "        \"dTpyZXF1aWVyZVByZXJyZXF1aXNpdG8gcHlyOmNsYXNlLA0KICAgICAgICBweXI6ZnVuY2lvbiA7DQogICAgcHllZHU6dGllbmVE\"\n",
        "        \"aWZpY3VsdGFkIDQgLg0KDQpweXI6dmFsb3JfcG9yX2RlZmVjdG8gYSBweWVkdTpQcmluY2lwaW9UcmFuc3ZlcnNhbCA7DQogICAg\"\n",
        "        \"cmRmczpsYWJlbCAiRGVmYXVsdCBhcmd1bWVudHMiQGVuLA0KICAgICAgICAiQXJndW1lbnRvcyBwb3IgZGVmZWN0byJAZXMgOw0K\"\n",
        "        \"ICAgIHB5ZWR1OmFOaXZlbERvbWluaW8gcHlyOmJhc2ljbyA7DQogICAgcHllZHU6cGVydGVuZWNlQVRlbWEgcHlyOlRfZnVuY2lv\"\n",
        "        \"bmVzIDsNCiAgICBweWVkdTpyZXF1aWVyZVByZXJyZXF1aXNpdG8gcHlyOnBhcmFtZXRyb3MgOw0KICAgIHB5ZWR1OnRpZW5lRGlm\"\n",
        "        \"aWN1bHRhZCAyIC4NCg0KcHlyOndhbHJ1cyBhIHB5ZWR1OlByaW5jaXBpb1RyYW5zdmVyc2FsIDsNCiAgICByZGZzOmxhYmVsICJX\"\n",
        "        \"YWxydXMgb3BlcmF0b3IiQGVuLA0KICAgICAgICAiT3BlcmFkb3IgbW9yc2EgKDo9KSJAZXMgOw0KICAgIHB5ZWR1OmFOaXZlbERv\"\n",
        "        \"bWluaW8gcHlyOmludGVybWVkaW8gOw0KICAgIHB5ZWR1OnBlcnRlbmVjZUFUZW1hIHB5cjpUX2NvbnRyb2wgOw0KICAgIHB5ZWR1\"\n",
        "        \"OnJlcXVpZXJlUHJlcnJlcXVpc2l0byBweXI6Y29uZGljaW9uYWwgOw0KICAgIHB5ZWR1OnRpZW5lRGlmaWN1bHRhZCAzIC4NCg0K\"\n",
        "        \"cHlyOnlpZWxkX2Zyb20gYSBweWVkdTpFc3RydWN0dXJhRGVDb250cm9sIDsNCiAgICByZGZzOmxhYmVsICJ5aWVsZCBmcm9tIkBl\"\n",
        "        \"biwNCiAgICAgICAgInlpZWxkIGZyb20iQGVzIDsNCiAgICBweWVkdTphTml2ZWxEb21pbmlvIHB5cjphdmFuemFkbyA7DQogICAg\"\n",
        "        \"cHllZHU6cGVydGVuZWNlQVRlbWEgcHlyOlRfZnVuY2lvbmFsIDsNCiAgICBweWVkdTpyZXF1aWVyZVByZXJyZXF1aXNpdG8gcHly\"\n",
        "        \"OmdlbmVyYWRvciA7DQogICAgcHllZHU6dGllbmVEaWZpY3VsdGFkIDUgLg0KDQpweXI6emlwX2YgYSBweWVkdTpGdW5jaW9uSW50\"\n",
        "        \"ZWdyYWRhIDsNCiAgICByZGZzOmxhYmVsICJ6aXAiQGVuLA0KICAgICAgICAiemlwKCkiQGVzIDsNCiAgICBweWVkdTphTml2ZWxE\"\n",
        "        \"b21pbmlvIHB5cjppbnRlcm1lZGlvIDsNCiAgICBweWVkdTpwZXJ0ZW5lY2VBVGVtYSBweXI6VF9jb250cm9sIDsNCiAgICBweWVk\"\n",
        "        \"dTpyZXF1aWVyZVByZXJyZXF1aXNpdG8gcHlyOmJ1Y2xlX2ZvciwNCiAgICAgICAgcHlyOml0ZXJhYmxlcyA7DQogICAgcHllZHU6\"\n",
        "        \"dGllbmVEaWZpY3VsdGFkIDMgLg0KDQpweWVkdTogYSBvd2w6T250b2xvZ3kgOw0KICAgIGRjdGVybXM6Y29udHJpYnV0b3IgIkpv\"\n",
        "        \"c8OpIEx1aXMgRmVybsOhbmRleiBWaW5kZWwiIDsNCiAgICBkY3Rlcm1zOmNyZWF0ZWQgIjIwMjYtMDYtMTgiXl54c2Q6ZGF0ZSA7\"\n",
        "        \"DQogICAgZGN0ZXJtczpjcmVhdG9yICJBZHJpw6FuIEJ1ZW5vIEp1bnF1ZXJvIiA7DQogICAgZGN0ZXJtczpkZXNjcmlwdGlvbiAi\"\n",
        "        \"T250b2xvZ8OtYSB5IGdyYWZvIGRlIGNvbm9jaW1pZW50byBkZWwgZG9taW5pbyBkZSBsYSBwcm9ncmFtYWNpw7NuIGVuIFB5dGhv\"\n",
        "        \"biwgZGlzZcOxYWRvIHBhcmEgYW5jbGFyIGxhIGdlbmVyYWNpw7NuIGRlIHJldHJvYWxpbWVudGFjacOzbiBmb3JtYXRpdmEgYXV0\"\n",
        "        \"b23DoXRpY2EgKGFycXVpdGVjdHVyYSBFS0cgKyBSQUcgKyBMTE0pLiBNb2RlbGEgY29uY2VwdG9zLCBzdXMgcHJlcnJlcXVpc2l0\"\n",
        "        \"b3MgeSBjb250cmFzdGVzLCB0ZW1hcywgZWplcmNpY2lvcywgZXJyb3JlcyBjb25jZXB0dWFsZXMgKG1pc2NvbmNlcHRpb25zKSwg\"\n",
        "        \"cmVjdXJzb3MgeSBwZXJmaWxlcyBkZSBlc3R1ZGlhbnRlLiJAZXMgOw0KICAgIGRjdGVybXM6bGljZW5zZSA8aHR0cHM6Ly9jcmVh\"\n",
        "        \"dGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2VzL2J5LzQuMC8+IDsNCiAgICBkY3Rlcm1zOnRpdGxlICJFZHVjYXRpb25hbCBLbm93bGVk\"\n",
        "        \"Z2UgR3JhcGggZm9yIFB5dGhvbiBQcm9ncmFtbWluZyAoRUtHLVB5dGhvbikiQGVuLA0KICAgICAgICAiR3JhZm8gZGUgQ29ub2Np\"\n",
        "        \"bWllbnRvIEVkdWNhdGl2byBkZSBQcm9ncmFtYWNpw7NuIGVuIFB5dGhvbiAoRUtHLVB5dGhvbikiQGVzIDsNCiAgICBvd2w6dmVy\"\n",
        "        \"c2lvbkluZm8gIjAuMS4wIiAuDQoNCnB5ZWR1OmFOaXZlbERvbWluaW8gYSBvd2w6T2JqZWN0UHJvcGVydHkgOw0KICAgIHJkZnM6\"\n",
        "        \"bGFiZWwgImF0IG1hc3RlcnkgbGV2ZWwiQGVuLA0KICAgICAgICAiYSBuaXZlbCBkZSBkb21pbmlvIkBlcyA7DQogICAgcmRmczpy\"\n",
        "        \"YW5nZSBweWVkdTpOaXZlbERvbWluaW8gLg0KDQpweWVkdTpjb25QZXNvIGEgb3dsOkRhdGF0eXBlUHJvcGVydHkgOw0KICAgIHJk\"\n",
        "        \"ZnM6bGFiZWwgIndpdGggd2VpZ2h0IkBlbiwNCiAgICAgICAgImNvbiBwZXNvIkBlcyA7DQogICAgcmRmczpkb21haW4gcHllZHU6\"\n",
        "        \"RXZhbHVhY2lvbkRlQ29uY2VwdG8gOw0KICAgIHJkZnM6cmFuZ2UgeHNkOmRlY2ltYWwgLg0KDQpweWVkdTpjb250cmFzdGFDb24g\"\n",
        "        \"YSBvd2w6T2JqZWN0UHJvcGVydHksDQogICAgICAgIG93bDpTeW1tZXRyaWNQcm9wZXJ0eSA7DQogICAgcmRmczpsYWJlbCAiY29u\"\n",
        "        \"dHJhc3RzIHdpdGgiQGVuLA0KICAgICAgICAiY29udHJhc3RhIGNvbiJAZXMgOw0KICAgIHJkZnM6Y29tbWVudCAiQ29uY2VwdG9z\"\n",
        "        \"IGZyZWN1ZW50ZW1lbnRlIGNvbmZ1bmRpZG9zIHF1ZSBjb252aWVuZSBleHBsaWNhciBwb3Igb3Bvc2ljacOzbiAocC4gZWouIGl0\"\n",
        "        \"ZXJhY2nDs24gLyByZWN1cnNpw7NuKS4gU2ltw6l0cmljYS4iQGVzIDsNCiAgICByZGZzOmRvbWFpbiBweWVkdTpDb25jZXB0byA7\"\n",
        "        \"DQogICAgcmRmczpyYW5nZSBweWVkdTpDb25jZXB0byA7DQogICAgcmRmczpzdWJQcm9wZXJ0eU9mIHB5ZWR1OnJlbGFjaW9uYWRv\"\n",
        "        \"Q29uY2VwdHVhbG1lbnRlQ29uIC4NCg0KcHllZHU6Y3VicmVDb25jZXB0byBhIG93bDpPYmplY3RQcm9wZXJ0eSA7DQogICAgcmRm\"\n",
        "        \"czpsYWJlbCAiY292ZXJzIGNvbmNlcHQiQGVuLA0KICAgICAgICAiY3VicmUgZWwgY29uY2VwdG8iQGVzIDsNCiAgICByZGZzOmRv\"\n",
        "        \"bWFpbiBweWVkdTpFamVyY2ljaW8gOw0KICAgIHJkZnM6cmFuZ2UgcHllZHU6Q29uY2VwdG8gLg0KDQpweWVkdTpkb21pbmFDb25j\"\n",
        "        \"ZXB0byBhIG93bDpPYmplY3RQcm9wZXJ0eSA7DQogICAgcmRmczpsYWJlbCAiaGFzIG1hc3RlcmVkIGNvbmNlcHQiQGVuLA0KICAg\"\n",
        "        \"ICAgICAiZG9taW5hIGVsIGNvbmNlcHRvIkBlcyA7DQogICAgcmRmczpkb21haW4gcHllZHU6RXN0dWRpYW50ZSA7DQogICAgcmRm\"\n",
        "        \"czpyYW5nZSBweWVkdTpDb25jZXB0byAuDQoNCnB5ZWR1OmVuRWplcmNpY2lvIGEgb3dsOk9iamVjdFByb3BlcnR5IDsNCiAgICBy\"\n",
        "        \"ZGZzOmxhYmVsICJpbiBleGVyY2lzZSJAZW4sDQogICAgICAgICJlbiBlbCBlamVyY2ljaW8iQGVzIDsNCiAgICByZGZzOmRvbWFp\"\n",
        "        \"biBweWVkdTpFdmFsdWFjaW9uRGVDb25jZXB0byA7DQogICAgcmRmczpyYW5nZSBweWVkdTpFamVyY2ljaW8gLg0KDQpweWVkdTpl\"\n",
        "        \"bkZlY2hhIGEgb3dsOkRhdGF0eXBlUHJvcGVydHkgOw0KICAgIHJkZnM6bGFiZWwgIm9uIGRhdGUiQGVuLA0KICAgICAgICAiZW4g\"\n",
        "        \"bGEgZmVjaGEiQGVzIDsNCiAgICByZGZzOmRvbWFpbiBweWVkdTpFdmFsdWFjaW9uQWN0aXZpZGFkIDsNCiAgICByZGZzOnJhbmdl\"\n",
        "        \"IHhzZDpkYXRlIC4NCg0KcHllZHU6ZW52aWFkb1BvciBhIG93bDpPYmplY3RQcm9wZXJ0eSA7DQogICAgcmRmczpsYWJlbCAic3Vi\"\n",
        "        \"bWl0dGVkIGJ5IkBlbiwNCiAgICAgICAgImVudmlhZG8gcG9yIkBlcyA7DQogICAgcmRmczpkb21haW4gcHllZHU6RW52aW9Fc3R1\"\n",
        "        \"ZGlhbnRlIDsNCiAgICByZGZzOnJhbmdlIHB5ZWR1OkVzdHVkaWFudGUgLg0KDQpweWVkdTplc1ByZXJyZXF1aXNpdG9EZSBhIG93\"\n",
        "        \"bDpPYmplY3RQcm9wZXJ0eSwNCiAgICAgICAgb3dsOlRyYW5zaXRpdmVQcm9wZXJ0eSA7DQogICAgcmRmczpsYWJlbCAiaXMgcHJl\"\n",
        "        \"cmVxdWlzaXRlIG9mIkBlbiwNCiAgICAgICAgImVzIHByZXJyZXF1aXNpdG8gZGUiQGVzIDsNCiAgICByZGZzOmNvbW1lbnQgIkEg\"\n",
        "        \"ZXNQcmVycmVxdWlzaXRvRGUgQiBzaWduaWZpY2EgcXVlIGRvbWluYXIgQSBlcyBjb25kaWNpw7NuIHByZXZpYSBwYXJhIGFwcmVu\"\n",
        "        \"ZGVyIEIuIFRyYW5zaXRpdmE6IGhhYmlsaXRhIGVsIGPDoWxjdWxvIGRlIHByZXJyZXF1aXNpdG9zIGluZGlyZWN0b3MgcG9yIGlu\"\n",
        "        \"ZmVyZW5jaWEuIkBlcyA7DQogICAgcmRmczpkb21haW4gcHllZHU6Q29uY2VwdG8gOw0KICAgIHJkZnM6cmFuZ2UgcHllZHU6Q29u\"\n",
        "        \"Y2VwdG8gOw0KICAgIHJkZnM6c3ViUHJvcGVydHlPZiBweWVkdTpyZWxhY2lvbmFkb0NvbmNlcHR1YWxtZW50ZUNvbiA7DQogICAg\"\n",
        "        \"b3dsOmludmVyc2VPZiBweWVkdTpyZXF1aWVyZVByZXJyZXF1aXNpdG8gLg0KDQpweWVkdTpldmFsdWFBIGEgb3dsOk9iamVjdFBy\"\n",
        "        \"b3BlcnR5IDsNCiAgICByZGZzOmxhYmVsICJhc3Nlc3NlcyBhY3Rpdml0eSJAZW4sDQogICAgICAgICJldmFsw7phIGxhIGFjdGl2\"\n",
        "        \"aWRhZCJAZXMgOw0KICAgIHJkZnM6ZG9tYWluIHB5ZWR1OkV2YWx1YWNpb25BY3RpdmlkYWQgOw0KICAgIHJkZnM6cmFuZ2UgcHll\"\n",
        "        \"ZHU6RWplcmNpY2lvIC4NCg0KcHllZHU6ZXZhbHVhQ29tcGV0ZW5jaWEgYSBvd2w6T2JqZWN0UHJvcGVydHkgOw0KICAgIHJkZnM6\"\n",
        "        \"bGFiZWwgImFzc2Vzc2VzIGNvbXBldGVuY3kiQGVuLA0KICAgICAgICAiZXZhbMO6YSBsYSBjb21wZXRlbmNpYSJAZXMgOw0KICAg\"\n",
        "        \"IHJkZnM6ZG9tYWluIHB5ZWR1OkVqZXJjaWNpbyA7DQogICAgcmRmczpyYW5nZSBweWVkdTpDb21wZXRlbmNpYSAuDQoNCnB5ZWR1\"\n",
        "        \"OmdlbmVyYWxpemEgYSBvd2w6T2JqZWN0UHJvcGVydHkgOw0KICAgIHJkZnM6bGFiZWwgImdlbmVyYWxpc2VzIkBlbiwNCiAgICAg\"\n",
        "        \"ICAgImdlbmVyYWxpemEgYSJAZXMgOw0KICAgIHJkZnM6ZG9tYWluIHB5ZWR1OkNvbmNlcHRvIDsNCiAgICByZGZzOnJhbmdlIHB5\"\n",
        "        \"ZWR1OkNvbmNlcHRvIDsNCiAgICByZGZzOnN1YlByb3BlcnR5T2YgcHllZHU6cmVsYWNpb25hZG9Db25jZXB0dWFsbWVudGVDb24g\"\n",
        "        \"Ow0KICAgIG93bDppbnZlcnNlT2YgcHllZHU6ZXNwZWNpYWxpemEgLg0KDQpweWVkdTppbHVzdHJhQ29uY2VwdG8gYSBvd2w6T2Jq\"\n",
        "        \"ZWN0UHJvcGVydHkgOw0KICAgIHJkZnM6bGFiZWwgImlsbHVzdHJhdGVzIGNvbmNlcHQiQGVuLA0KICAgICAgICAiaWx1c3RyYSBl\"\n",
        "        \"bCBjb25jZXB0byJAZXMgOw0KICAgIHJkZnM6ZG9tYWluIHB5ZWR1OlJlY3Vyc28gOw0KICAgIHJkZnM6cmFuZ2UgcHllZHU6Q29u\"\n",
        "        \"Y2VwdG8gLg0KDQpweWVkdTptYW5pZmllc3RhRXJyb3IgYSBvd2w6T2JqZWN0UHJvcGVydHkgOw0KICAgIHJkZnM6bGFiZWwgImV4\"\n",
        "        \"aGliaXRzIG1pc2NvbmNlcHRpb24iQGVuLA0KICAgICAgICAibWFuaWZpZXN0YSBlbCBlcnJvciJAZXMgOw0KICAgIHJkZnM6ZG9t\"\n",
        "        \"YWluIHB5ZWR1OkVudmlvRXN0dWRpYW50ZSA7DQogICAgcmRmczpyYW5nZSBweWVkdTpFcnJvckNvbmNlcHR1YWwgLg0KDQpweWVk\"\n",
        "        \"dTpudW1lcm9EZUxpbmVhcyBhIG93bDpEYXRhdHlwZVByb3BlcnR5IDsNCiAgICByZGZzOmxhYmVsICJudW1iZXIgb2YgbGluZXMi\"\n",
        "        \"QGVuLA0KICAgICAgICAibsO6bWVybyBkZSBsw61uZWFzIkBlcyA7DQogICAgcmRmczpkb21haW4gcHllZHU6RW52aW9Fc3R1ZGlh\"\n",
        "        \"bnRlIDsNCiAgICByZGZzOnJhbmdlIHhzZDppbnRlZ2VyIC4NCg0KcHllZHU6b2J0dXZvTm90YSBhIG93bDpEYXRhdHlwZVByb3Bl\"\n",
        "        \"cnR5IDsNCiAgICByZGZzOmxhYmVsICJvYnRhaW5lZCBncmFkZSJAZW4sDQogICAgICAgICJvYnR1dm8gbm90YSJAZXMgOw0KICAg\"\n",
        "        \"IHJkZnM6ZG9tYWluIHB5ZWR1OkV2YWx1YWNpb25BY3RpdmlkYWQgOw0KICAgIHJkZnM6cmFuZ2UgeHNkOmRlY2ltYWwgLg0KDQpw\"\n",
        "        \"eWVkdTpwZXJ0ZW5lY2VBVGVtYSBhIG93bDpPYmplY3RQcm9wZXJ0eSA7DQogICAgcmRmczpsYWJlbCAiYmVsb25ncyB0byB0b3Bp\"\n",
        "        \"YyJAZW4sDQogICAgICAgICJwZXJ0ZW5lY2UgYWwgdGVtYSJAZXMgOw0KICAgIHJkZnM6ZG9tYWluIHB5ZWR1OkNvbmNlcHRvIDsN\"\n",
        "        \"CiAgICByZGZzOnJhbmdlIHB5ZWR1OlRlbWEgLg0KDQpweWVkdTpwb3JFc3R1ZGlhbnRlIGEgb3dsOk9iamVjdFByb3BlcnR5IDsN\"\n",
        "        \"CiAgICByZGZzOmxhYmVsICJjYXJyaWVkIG91dCBieSJAZW4sDQogICAgICAgICJyZWFsaXphZGEgcG9yIkBlcyA7DQogICAgcmRm\"\n",
        "        \"czpkb21haW4gcHllZHU6RXZhbHVhY2lvbkFjdGl2aWRhZCA7DQogICAgcmRmczpyYW5nZSBweWVkdTpFc3R1ZGlhbnRlIC4NCg0K\"\n",
        "        \"cHllZHU6cmVzdWVsdmVFamVyY2ljaW8gYSBvd2w6T2JqZWN0UHJvcGVydHkgOw0KICAgIHJkZnM6bGFiZWwgInNvbHZlcyBleGVy\"\n",
        "        \"Y2lzZSJAZW4sDQogICAgICAgICJyZXN1ZWx2ZSBlbCBlamVyY2ljaW8iQGVzIDsNCiAgICByZGZzOmRvbWFpbiBweWVkdTpFbnZp\"\n",
        "        \"b0VzdHVkaWFudGUgOw0KICAgIHJkZnM6cmFuZ2UgcHllZHU6RWplcmNpY2lvIC4NCg0KcHllZHU6c2VBcGxpY2FBIGEgb3dsOk9i\"\n",
        "        \"amVjdFByb3BlcnR5IDsNCiAgICByZGZzOmxhYmVsICJhcHBsaWVzIHRvIkBlbiwNCiAgICAgICAgInNlIGFwbGljYSBhIkBlcyA7\"\n",
        "        \"DQogICAgcmRmczpkb21haW4gcHllZHU6Q29uY2VwdG8gOw0KICAgIHJkZnM6cmFuZ2UgcHllZHU6Q29uY2VwdG8gOw0KICAgIHJk\"\n",
        "        \"ZnM6c3ViUHJvcGVydHlPZiBweWVkdTpyZWxhY2lvbmFkb0NvbmNlcHR1YWxtZW50ZUNvbiAuDQoNCnB5ZWR1OnNvYnJlQ29uY2Vw\"\n",
        "        \"dG8gYSBvd2w6T2JqZWN0UHJvcGVydHkgOw0KICAgIHJkZnM6bGFiZWwgImFib3V0IGNvbmNlcHQiQGVuLA0KICAgICAgICAic29i\"\n",
        "        \"cmUgZWwgY29uY2VwdG8iQGVzIDsNCiAgICByZGZzOmRvbWFpbiBweWVkdTpFdmFsdWFjaW9uRGVDb25jZXB0byA7DQogICAgcmRm\"\n",
        "        \"czpyYW5nZSBweWVkdTpDb25jZXB0byAuDQoNCnB5ZWR1OnRpZW5lRGlmaWN1bHRhZCBhIG93bDpEYXRhdHlwZVByb3BlcnR5LA0K\"\n",
        "        \"ICAgICAgICBvd2w6RnVuY3Rpb25hbFByb3BlcnR5IDsNCiAgICByZGZzOmxhYmVsICJoYXMgZGlmZmljdWx0eSJAZW4sDQogICAg\"\n",
        "        \"ICAgICJ0aWVuZSBkaWZpY3VsdGFkIkBlcyA7DQogICAgcmRmczpjb21tZW50ICJEaWZpY3VsdGFkIGVzdGltYWRhIGVuIHVuYSBl\"\n",
        "        \"c2NhbGEgZW50ZXJhIDHigJM1LiJAZXMgOw0KICAgIHJkZnM6ZG9tYWluIHB5ZWR1OkVudGlkYWRFZHVjYXRpdmEgOw0KICAgIHJk\"\n",
        "        \"ZnM6cmFuZ2UgeHNkOmludGVnZXIgLg0KDQpweWVkdTp0aWVuZUVqZW1wbG9Db2RpZ28gYSBvd2w6RGF0YXR5cGVQcm9wZXJ0eSA7\"\n",
        "        \"DQogICAgcmRmczpsYWJlbCAiaGFzIGNvZGUgZXhhbXBsZSJAZW4sDQogICAgICAgICJ0aWVuZSBlamVtcGxvIGRlIGPDs2RpZ28i\"\n",
        "        \"QGVzIDsNCiAgICByZGZzOnJhbmdlIHhzZDpzdHJpbmcgLg0KDQpweWVkdTp0aWVuZUVudW5jaWFkbyBhIG93bDpEYXRhdHlwZVBy\"\n",
        "        \"b3BlcnR5IDsNCiAgICByZGZzOmxhYmVsICJoYXMgc3RhdGVtZW50IkBlbiwNCiAgICAgICAgInRpZW5lIGVudW5jaWFkbyJAZXMg\"\n",
        "        \"Ow0KICAgIHJkZnM6ZG9tYWluIHB5ZWR1OkVqZXJjaWNpbyA7DQogICAgcmRmczpyYW5nZSByZGY6bGFuZ1N0cmluZyAuDQoNCnB5\"\n",
        "        \"cjphdHJpYnV0byBhIHB5ZWR1OlBhcmFkaWdtYSA7DQogICAgcmRmczpsYWJlbCAiQXR0cmlidXRlIkBlbiwNCiAgICAgICAgIkF0\"\n",
        "        \"cmlidXRvIGRlIGluc3RhbmNpYSJAZXMgOw0KICAgIHB5ZWR1OmFOaXZlbERvbWluaW8gcHlyOmludGVybWVkaW8gOw0KICAgIHB5\"\n",
        "        \"ZWR1OnBlcnRlbmVjZUFUZW1hIHB5cjpUX3BvbyA7DQogICAgcHllZHU6cmVxdWllcmVQcmVycmVxdWlzaXRvIHB5cjpvYmpldG8g\"\n",
        "        \"Ow0KICAgIHB5ZWR1OnRpZW5lRGlmaWN1bHRhZCAzIC4NCg0KcHlyOmJ1c3F1ZWRhX2xpbmVhbCBhIHB5ZWR1OlByaW5jaXBpb1Ry\"\n",
        "        \"YW5zdmVyc2FsIDsNCiAgICByZGZzOmxhYmVsICJMaW5lYXIgc2VhcmNoIkBlbiwNCiAgICAgICAgIkLDunNxdWVkYSBsaW5lYWwi\"\n",
        "        \"QGVzIDsNCiAgICBza29zOmV4YWN0TWF0Y2ggd2Q6UTc4NzkwMyA7DQogICAgc2tvczpyZWxhdGVkIHB5cjpidXNxdWVkYV9iaW5h\"\n",
        "        \"cmlhIDsNCiAgICBweWVkdTphTml2ZWxEb21pbmlvIHB5cjpiYXNpY28gOw0KICAgIHB5ZWR1OmNvbnRyYXN0YUNvbiBweXI6YnVz\"\n",
        "        \"cXVlZGFfYmluYXJpYSA7DQogICAgcHllZHU6cGVydGVuZWNlQVRlbWEgcHlyOlRfYWxnb3JpdG1vcyA7DQogICAgcHllZHU6cmVx\"\n",
        "        \"dWllcmVQcmVycmVxdWlzaXRvIHB5cjpidWNsZV9mb3IgOw0KICAgIHB5ZWR1OnRpZW5lRGlmaWN1bHRhZCAyIC4NCg0KcHlyOmNv\"\n",
        "        \"bXBvc2ljaW9uIGEgcHllZHU6UGFyYWRpZ21hIDsNCiAgICByZGZzOmxhYmVsICJDb21wb3NpdGlvbiJAZW4sDQogICAgICAgICJD\"\n",
        "        \"b21wb3NpY2nDs24iQGVzIDsNCiAgICBza29zOnJlbGF0ZWQgcHlyOmhlcmVuY2lhIDsNCiAgICBweWVkdTphTml2ZWxEb21pbmlv\"\n",
        "        \"IHB5cjphdmFuemFkbyA7DQogICAgcHllZHU6Y29udHJhc3RhQ29uIHB5cjpoZXJlbmNpYSA7DQogICAgcHllZHU6cGVydGVuZWNl\"\n",
        "        \"QVRlbWEgcHlyOlRfcG9vIDsNCiAgICBweWVkdTpyZXF1aWVyZVByZXJyZXF1aXNpdG8gcHlyOm9iamV0byA7DQogICAgcHllZHU6\"\n",
        "        \"dGllbmVEaWZpY3VsdGFkIDQgLg0KDQpweXI6Y29tcHJlbnNpb25fZGljdHMgYSBweWVkdTpFc3RydWN0dXJhRGVDb250cm9sIDsN\"\n",
        "        \"CiAgICByZGZzOmxhYmVsICJEaWN0IGNvbXByZWhlbnNpb24iQGVuLA0KICAgICAgICAiQ29tcHJlbnNpw7NuIGRlIGRpY2Npb25h\"\n",
        "        \"cmlvcyJAZXMgOw0KICAgIHNrb3M6YnJvYWRlciBweXI6Y29tcHJlbnNpb25fbGlzdGFzIDsNCiAgICBweWVkdTphTml2ZWxEb21p\"\n",
        "        \"bmlvIHB5cjphdmFuemFkbyA7DQogICAgcHllZHU6cGVydGVuZWNlQVRlbWEgcHlyOlRfZXN0cnVjdHVyYXMgOw0KICAgIHB5ZWR1\"\n",
        "        \"OnJlcXVpZXJlUHJlcnJlcXVpc2l0byBweXI6Y29tcHJlbnNpb25fbGlzdGFzLA0KICAgICAgICBweXI6ZGljY2lvbmFyaW8gOw0K\"\n",
        "        \"ICAgIHB5ZWR1OnRpZW5lRGlmaWN1bHRhZCA0IC4NCg0KcHlyOmNvbXByZW5zaW9uX3NldHMgYSBweWVkdTpFc3RydWN0dXJhRGVD\"\n",
        "        \"b250cm9sIDsNCiAgICByZGZzOmxhYmVsICJTZXQgY29tcHJlaGVuc2lvbiJAZW4sDQogICAgICAgICJDb21wcmVuc2nDs24gZGUg\"\n",
        "        \"Y29uanVudG9zIkBlcyA7DQogICAgc2tvczpicm9hZGVyIHB5cjpjb21wcmVuc2lvbl9saXN0YXMgOw0KICAgIHB5ZWR1OmFOaXZl\"\n",
        "        \"bERvbWluaW8gcHlyOmF2YW56YWRvIDsNCiAgICBweWVkdTpwZXJ0ZW5lY2VBVGVtYSBweXI6VF9lc3RydWN0dXJhcyA7DQogICAg\"\n",
        "        \"cHllZHU6cmVxdWllcmVQcmVycmVxdWlzaXRvIHB5cjpjb21wcmVuc2lvbl9saXN0YXMsDQogICAgICAgIHB5cjpjb25qdW50byA7\"\n",
        "        \"DQogICAgcHllZHU6dGllbmVEaWZpY3VsdGFkIDQgLg0KDQpweXI6Y29udmVyc2lvbl90aXBvcyBhIHB5ZWR1OlByaW5jaXBpb1Ry\"\n",
        "        \"YW5zdmVyc2FsIDsNCiAgICByZGZzOmxhYmVsICJUeXBlIGNhc3RpbmciQGVuLA0KICAgICAgICAiQ29udmVyc2nDs24gZGUgdGlw\"\n",
        "        \"b3MiQGVzIDsNCiAgICBweWVkdTphTml2ZWxEb21pbmlvIHB5cjpiYXNpY28gOw0KICAgIHB5ZWR1OnBlcnRlbmVjZUFUZW1hIHB5\"\n",
        "        \"cjpUX3RpcG9zIDsNCiAgICBweWVkdTpyZXF1aWVyZVByZXJyZXF1aXNpdG8gcHlyOnRpcG9faW50LA0KICAgICAgICBweXI6dGlw\"\n",
        "        \"b19zdHIgOw0KICAgIHB5ZWR1OnRpZW5lRGlmaWN1bHRhZCAyIC4NCg0KcHlyOmRlc2VtcGFxdWV0YWRvIGEgcHllZHU6UHJpbmNp\"\n",
        "        \"cGlvVHJhbnN2ZXJzYWwgOw0KICAgIHJkZnM6bGFiZWwgIlVucGFja2luZyJAZW4sDQogICAgICAgICJEZXNlbXBhcXVldGFkbyJA\"\n",
        "        \"ZXMgOw0KICAgIHB5ZWR1OmFOaXZlbERvbWluaW8gcHlyOmJhc2ljbyA7DQogICAgcHllZHU6cGVydGVuZWNlQVRlbWEgcHlyOlRf\"\n",
        "        \"ZXN0cnVjdHVyYXMgOw0KICAgIHB5ZWR1OnJlcXVpZXJlUHJlcnJlcXVpc2l0byBweXI6bGlzdGEsDQogICAgICAgIHB5cjp0dXBs\"\n",
        "        \"YSA7DQogICAgcHllZHU6dGllbmVEaWZpY3VsdGFkIDIgLg0KDQpweXI6ZW5jYXBzdWxhY2lvbiBhIHB5ZWR1OlBhcmFkaWdtYSA7\"\n",
        "        \"DQogICAgcmRmczpsYWJlbCAiRW5jYXBzdWxhdGlvbiJAZW4sDQogICAgICAgICJFbmNhcHN1bGFjacOzbiJAZXMgOw0KICAgIHB5\"\n",
        "        \"ZWR1OmFOaXZlbERvbWluaW8gcHlyOmF2YW56YWRvIDsNCiAgICBweWVkdTpwZXJ0ZW5lY2VBVGVtYSBweXI6VF9wb28gOw0KICAg\"\n",
        "        \"IHB5ZWR1OnJlcXVpZXJlUHJlcnJlcXVpc2l0byBweXI6YXRyaWJ1dG8gOw0KICAgIHB5ZWR1OnRpZW5lRGlmaWN1bHRhZCA0IC4N\"\n",
        "        \"Cg0KcHlyOmVycl9pdGVyYWNpb25fcmVjdXJzaW9uIGEgcHllZHU6RXJyb3JDb25jZXB0dWFsIDsNCiAgICByZGZzOmxhYmVsICJJ\"\n",
        "        \"dGVyYXRpb24gdnMgcmVjdXJzaW9uIGNvbmZ1c2lvbiJAZW4sDQogICAgICAgICJDb25mdXNpw7NuIGl0ZXJhY2nDs24gLyByZWN1\"\n",
        "        \"cnNpw7NuIkBlcyA7DQogICAgcHllZHU6ZXJyb3JTb2JyZUNvbmNlcHRvIHB5cjpyZWN1cnNpb24gLg0KDQpweXI6ZXhwcmVzaW9u\"\n",
        "        \"X2dlbmVyYWRvcmEgYSBweWVkdTpFc3RydWN0dXJhRGVDb250cm9sIDsNCiAgICByZGZzOmxhYmVsICJHZW5lcmF0b3IgZXhwcmVz\"\n",
        "        \"c2lvbiJAZW4sDQogICAgICAgICJFeHByZXNpw7NuIGdlbmVyYWRvcmEiQGVzIDsNCiAgICBza29zOmJyb2FkZXIgcHlyOmNvbXBy\"\n",
        "        \"ZW5zaW9uX2xpc3RhcyA7DQogICAgcHllZHU6YU5pdmVsRG9taW5pbyBweXI6YXZhbnphZG8gOw0KICAgIHB5ZWR1OnBlcnRlbmVj\"\n",
        "        \"ZUFUZW1hIHB5cjpUX2Z1bmNpb25hbCA7DQogICAgcHllZHU6cmVxdWllcmVQcmVycmVxdWlzaXRvIHB5cjpjb21wcmVuc2lvbl9s\"\n",
        "        \"aXN0YXMsDQogICAgICAgIHB5cjpnZW5lcmFkb3IgOw0KICAgIHB5ZWR1OnRpZW5lRGlmaWN1bHRhZCA0IC4NCg0KcHlyOmluZGV4\"\n",
        "        \"YWNpb25fbmVnYXRpdmEgYSBweWVkdTpQcmluY2lwaW9UcmFuc3ZlcnNhbCA7DQogICAgcmRmczpsYWJlbCAiTmVnYXRpdmUgaW5k\"\n",
        "        \"ZXhpbmciQGVuLA0KICAgICAgICAiSW5kZXhhY2nDs24gbmVnYXRpdmEiQGVzIDsNCiAgICBza29zOmJyb2FkZXIgcHlyOmluZGV4\"\n",
        "        \"YWNpb24gOw0KICAgIHB5ZWR1OmFOaXZlbERvbWluaW8gcHlyOmJhc2ljbyA7DQogICAgcHllZHU6cGVydGVuZWNlQVRlbWEgcHly\"\n",
        "        \"OlRfZXN0cnVjdHVyYXMgOw0KICAgIHB5ZWR1OnJlcXVpZXJlUHJlcnJlcXVpc2l0byBweXI6aW5kZXhhY2lvbiA7DQogICAgcHll\"\n",
        "        \"ZHU6dGllbmVEaWZpY3VsdGFkIDIgLg0KDQpweXI6aW5pdF9tZXRob2QgYSBweWVkdTpQYXJhZGlnbWEgOw0KICAgIHJkZnM6bGFi\"\n",
        "        \"ZWwgIkNvbnN0cnVjdG9yIkBlbiwNCiAgICAgICAgIkNvbnN0cnVjdG9yIF9faW5pdF9fIkBlcyA7DQogICAgc2tvczpicm9hZGVy\"\n",
        "        \"IHB5cjptZXRvZG8gOw0KICAgIHB5ZWR1OmFOaXZlbERvbWluaW8gcHlyOmludGVybWVkaW8gOw0KICAgIHB5ZWR1OnBlcnRlbmVj\"\n",
        "        \"ZUFUZW1hIHB5cjpUX3BvbyA7DQogICAgcHllZHU6cmVxdWllcmVQcmVycmVxdWlzaXRvIHB5cjptZXRvZG8gOw0KICAgIHB5ZWR1\"\n",
        "        \"OnRpZW5lRGlmaWN1bHRhZCAzIC4NCg0KcHlyOml0ZXJhZG9yIGEgcHllZHU6UHJpbmNpcGlvVHJhbnN2ZXJzYWwgOw0KICAgIHJk\"\n",
        "        \"ZnM6bGFiZWwgIkl0ZXJhdG9yIkBlbiwNCiAgICAgICAgIkl0ZXJhZG9yIChpdGVyLCBuZXh0KSJAZXMgOw0KICAgIHNrb3M6ZXhh\"\n",
        "        \"Y3RNYXRjaCB3ZDpRMTMyNjM4OCA7DQogICAgcHllZHU6YU5pdmVsRG9taW5pbyBweXI6YXZhbnphZG8gOw0KICAgIHB5ZWR1OnBl\"\n",
        "        \"cnRlbmVjZUFUZW1hIHB5cjpUX2Z1bmNpb25hbCA7DQogICAgcHllZHU6cmVxdWllcmVQcmVycmVxdWlzaXRvIHB5cjppdGVyYWJs\"\n",
        "        \"ZXMgOw0KICAgIHB5ZWR1OnRpZW5lRGlmaWN1bHRhZCA0IC4NCg0KcHlyOmplcmFycXVpYV9leGNlcGNpb25lcyBhIHB5ZWR1OkVz\"\n",
        "        \"dHJ1Y3R1cmFEZUNvbnRyb2wgOw0KICAgIHJkZnM6bGFiZWwgIkV4Y2VwdGlvbiBoaWVyYXJjaHkiQGVuLA0KICAgICAgICAiSmVy\"\n",
        "        \"YXJxdcOtYSBkZSBleGNlcGNpb25lcyJAZXMgOw0KICAgIHB5ZWR1OmFOaXZlbERvbWluaW8gcHlyOmludGVybWVkaW8gOw0KICAg\"\n",
        "        \"IHB5ZWR1OnBlcnRlbmVjZUFUZW1hIHB5cjpUX2V4Y2VwY2lvbmVzIDsNCiAgICBweWVkdTpyZXF1aWVyZVByZXJyZXF1aXNpdG8g\"\n",
        "        \"cHlyOmV4Y2VwY2lvbiwNCiAgICAgICAgcHlyOmhlcmVuY2lhIDsNCiAgICBweWVkdTp0aWVuZURpZmljdWx0YWQgMyAuDQoNCnB5\"\n",
        "        \"cjptZW1vaXphY2lvbiBhIHB5ZWR1OlByaW5jaXBpb1RyYW5zdmVyc2FsIDsNCiAgICByZGZzOmxhYmVsICJNZW1vaXphdGlvbiJA\"\n",
        "        \"ZW4sDQogICAgICAgICJNZW1vaXphY2nDs24gKGxydV9jYWNoZSkiQGVzIDsNCiAgICBweWVkdTphTml2ZWxEb21pbmlvIHB5cjph\"\n",
        "        \"dmFuemFkbyA7DQogICAgcHllZHU6cGVydGVuZWNlQVRlbWEgcHlyOlRfcmVjdXJzaW9uIDsNCiAgICBweWVkdTpyZXF1aWVyZVBy\"\n",
        "        \"ZXJyZXF1aXNpdG8gcHlyOmRpY2Npb25hcmlvLA0KICAgICAgICBweXI6cmVjdXJzaW9uIDsNCiAgICBweWVkdTp0aWVuZURpZmlj\"\n",
        "        \"dWx0YWQgNCAuDQoNCnB5cjptZXRvZG9fY2xhc2UgYSBweWVkdTpQYXJhZGlnbWEgOw0KICAgIHJkZnM6bGFiZWwgIkNsYXNzIG1l\"\n",
        "        \"dGhvZCJAZW4sDQogICAgICAgICJNw6l0b2RvIGRlIGNsYXNlIkBlcyA7DQogICAgc2tvczpicm9hZGVyIHB5cjptZXRvZG8gOw0K\"\n",
        "        \"ICAgIHB5ZWR1OmFOaXZlbERvbWluaW8gcHlyOmF2YW56YWRvIDsNCiAgICBweWVkdTpwZXJ0ZW5lY2VBVGVtYSBweXI6VF9wb28g\"\n",
        "        \"Ow0KICAgIHB5ZWR1OnJlcXVpZXJlUHJlcnJlcXVpc2l0byBweXI6ZGVjb3JhZG9yLA0KICAgICAgICBweXI6bWV0b2RvIDsNCiAg\"\n",
        "        \"ICBweWVkdTp0aWVuZURpZmljdWx0YWQgNCAuDQoNCnB5cjptZXRvZG9fZXN0YXRpY28gYSBweWVkdTpQYXJhZGlnbWEgOw0KICAg\"\n",
        "        \"IHJkZnM6bGFiZWwgIlN0YXRpYyBtZXRob2QiQGVuLA0KICAgICAgICAiTcOpdG9kbyBlc3TDoXRpY28iQGVzIDsNCiAgICBza29z\"\n",
        "        \"OmJyb2FkZXIgcHlyOm1ldG9kbyA7DQogICAgcHllZHU6YU5pdmVsRG9taW5pbyBweXI6YXZhbnphZG8gOw0KICAgIHB5ZWR1OnBl\"\n",
        "        \"cnRlbmVjZUFUZW1hIHB5cjpUX3BvbyA7DQogICAgcHllZHU6cmVxdWllcmVQcmVycmVxdWlzaXRvIHB5cjpkZWNvcmFkb3IsDQog\"\n",
        "        \"ICAgICAgIHB5cjptZXRvZG8gOw0KICAgIHB5ZWR1OnRpZW5lRGlmaWN1bHRhZCA0IC4NCg0KcHlyOm11dGFibGVfaW5tdXRhYmxl\"\n",
        "        \"IGEgcHllZHU6UHJpbmNpcGlvVHJhbnN2ZXJzYWwgOw0KICAgIHJkZnM6bGFiZWwgIk11dGFibGUgdnMgaW1tdXRhYmxlIkBlbiwN\"\n",
        "        \"CiAgICAgICAgIk11dGFibGUgdnMgaW5tdXRhYmxlIkBlcyA7DQogICAgcHllZHU6YU5pdmVsRG9taW5pbyBweXI6aW50ZXJtZWRp\"\n",
        "        \"byA7DQogICAgcHllZHU6Y29udHJhc3RhQ29uIHB5cjp0dXBsYSA7DQogICAgcHllZHU6cGVydGVuZWNlQVRlbWEgcHlyOlRfdGlw\"\n",
        "        \"b3MgOw0KICAgIHB5ZWR1OnJlcXVpZXJlUHJlcnJlcXVpc2l0byBweXI6bXV0YWJpbGlkYWQgOw0KICAgIHB5ZWR1OnRpZW5lRGlm\"\n",
        "        \"aWN1bHRhZCAzIC4NCg0KcHlyOm9wZXJhZG9yX2VzdHJlbGxhIGEgcHllZHU6UHJpbmNpcGlvVHJhbnN2ZXJzYWwgOw0KICAgIHJk\"\n",
        "        \"ZnM6bGFiZWwgIlN0YXIgb3BlcmF0b3IiQGVuLA0KICAgICAgICAiT3BlcmFkb3IgKiB5ICoqIkBlcyA7DQogICAgcHllZHU6YU5p\"\n",
        "        \"dmVsRG9taW5pbyBweXI6aW50ZXJtZWRpbyA7DQogICAgcHllZHU6cGVydGVuZWNlQVRlbWEgcHlyOlRfZXN0cnVjdHVyYXMgOw0K\"\n",
        "        \"ICAgIHB5ZWR1OnJlcXVpZXJlUHJlcnJlcXVpc2l0byBweXI6ZGVzZW1wYXF1ZXRhZG8gOw0KICAgIHB5ZWR1OnRpZW5lRGlmaWN1\"\n",
        "        \"bHRhZCAzIC4NCg0KcHlyOm9yZGVuYWNpb25fYnVyYnVqYSBhIHB5ZWR1OlByaW5jaXBpb1RyYW5zdmVyc2FsIDsNCiAgICByZGZz\"\n",
        "        \"OmxhYmVsICJCdWJibGUgc29ydCJAZW4sDQogICAgICAgICJPcmRlbmFjacOzbiBkZSBidXJidWphIkBlcyA7DQogICAgc2tvczpi\"\n",
        "        \"cm9hZGVyIHB5cjpub3RhY2lvbl9vIDsNCiAgICBza29zOmV4YWN0TWF0Y2ggd2Q6UTYwODY0IDsNCiAgICBweWVkdTphTml2ZWxE\"\n",
        "        \"b21pbmlvIHB5cjppbnRlcm1lZGlvIDsNCiAgICBweWVkdTpwZXJ0ZW5lY2VBVGVtYSBweXI6VF9hbGdvcml0bW9zIDsNCiAgICBw\"\n",
        "        \"eWVkdTpyZXF1aWVyZVByZXJyZXF1aXNpdG8gcHlyOmJ1Y2xlX2ZvciA7DQogICAgcHllZHU6dGllbmVEaWZpY3VsdGFkIDMgLg0K\"\n",
        "        \"DQpweXI6b3JkZW5hY2lvbl9tZXpjbGEgYSBweWVkdTpQcmluY2lwaW9UcmFuc3ZlcnNhbCA7DQogICAgcmRmczpsYWJlbCAiTWVy\"\n",
        "        \"Z2Ugc29ydCJAZW4sDQogICAgICAgICJPcmRlbmFjacOzbiBwb3IgbWV6Y2xhIkBlcyA7DQogICAgc2tvczpicm9hZGVyIHB5cjpu\"\n",
        "        \"b3RhY2lvbl9vIDsNCiAgICBza29zOmV4YWN0TWF0Y2ggd2Q6UTE4OTA1NyA7DQogICAgcHllZHU6YU5pdmVsRG9taW5pbyBweXI6\"\n",
        "        \"YXZhbnphZG8gOw0KICAgIHB5ZWR1OnBlcnRlbmVjZUFUZW1hIHB5cjpUX2FsZ29yaXRtb3MgOw0KICAgIHB5ZWR1OnJlcXVpZXJl\"\n",
        "        \"UHJlcnJlcXVpc2l0byBweXI6bm90YWNpb25fbywNCiAgICAgICAgcHlyOnJlY3Vyc2lvbiA7DQogICAgcHllZHU6dGllbmVEaWZp\"\n",
        "        \"Y3VsdGFkIDUgLg0KDQpweXI6b3JkZW5hY2lvbl9yYXBpZGEgYSBweWVkdTpQcmluY2lwaW9UcmFuc3ZlcnNhbCA7DQogICAgcmRm\"\n",
        "        \"czpsYWJlbCAiUXVpY2tzb3J0IkBlbiwNCiAgICAgICAgIk9yZGVuYWNpw7NuIHLDoXBpZGEiQGVzIDsNCiAgICBza29zOmJyb2Fk\"\n",
        "        \"ZXIgcHlyOm5vdGFjaW9uX28gOw0KICAgIHNrb3M6ZXhhY3RNYXRjaCB3ZDpRNDg2NTk4IDsNCiAgICBweWVkdTphTml2ZWxEb21p\"\n",
        "        \"bmlvIHB5cjphdmFuemFkbyA7DQogICAgcHllZHU6cGVydGVuZWNlQVRlbWEgcHlyOlRfYWxnb3JpdG1vcyA7DQogICAgcHllZHU6\"\n",
        "        \"cmVxdWllcmVQcmVycmVxdWlzaXRvIHB5cjpyZWN1cnNpb24gOw0KICAgIHB5ZWR1OnRpZW5lRGlmaWN1bHRhZCA1IC4NCg0KcHly\"\n",
        "        \"OnJhaXNlX2V4Y2VwY2lvbiBhIHB5ZWR1OkVzdHJ1Y3R1cmFEZUNvbnRyb2wgOw0KICAgIHJkZnM6bGFiZWwgInJhaXNlIkBlbiwN\"\n",
        "        \"CiAgICAgICAgInJhaXNlIkBlcyA7DQogICAgcHllZHU6YU5pdmVsRG9taW5pbyBweXI6aW50ZXJtZWRpbyA7DQogICAgcHllZHU6\"\n",
        "        \"cGVydGVuZWNlQVRlbWEgcHlyOlRfZXhjZXBjaW9uZXMgOw0KICAgIHB5ZWR1OnJlcXVpZXJlUHJlcnJlcXVpc2l0byBweXI6ZXhj\"\n",
        "        \"ZXBjaW9uIDsNCiAgICBweWVkdTp0aWVuZURpZmljdWx0YWQgMyAuDQoNCnB5cjpyZWN1cnNpb25fY29sYSBhIHB5ZWR1OlByaW5j\"\n",
        "        \"aXBpb1RyYW5zdmVyc2FsIDsNCiAgICByZGZzOmxhYmVsICJUYWlsIHJlY3Vyc2lvbiJAZW4sDQogICAgICAgICJSZWN1cnNpw7Nu\"\n",
        "        \"IGRlIGNvbGEiQGVzIDsNCiAgICBza29zOmJyb2FkZXIgcHlyOnJlY3Vyc2lvbiA7DQogICAgcHllZHU6YU5pdmVsRG9taW5pbyBw\"\n",
        "        \"eXI6YXZhbnphZG8gOw0KICAgIHB5ZWR1OnBlcnRlbmVjZUFUZW1hIHB5cjpUX3JlY3Vyc2lvbiA7DQogICAgcHllZHU6cmVxdWll\"\n",
        "        \"cmVQcmVycmVxdWlzaXRvIHB5cjpyZWN1cnNpb24gOw0KICAgIHB5ZWR1OnRpZW5lRGlmaWN1bHRhZCA1IC4NCg0KcHlyOnJlZl9r\"\n",
        "        \"ZXVuaW5nMjAxOSBhIHB5ZWR1OlJlY3Vyc28gOw0KICAgIHJkZnM6bGFiZWwgIktldW5pbmcsIEpldXJpbmcgJiBIZWVyZW4gKDIw\"\n",
        "        \"MTkpLCBBIHN5c3RlbWF0aWMgbGl0ZXJhdHVyZSByZXZpZXcgb2YgYXV0b21hdGVkIGZlZWRiYWNrIGdlbmVyYXRpb24gZm9yIHBy\"\n",
        "        \"b2dyYW1taW5nIGV4ZXJjaXNlcyJAZW4sDQogICAgICAgICJLZXVuaW5nIGV0IGFsLiAoMjAxOSk6IHJldmlzacOzbiBzaXN0ZW3D\"\n",
        "        \"oXRpY2EgZGUgZ2VuZXJhY2nDs24gYXV0b23DoXRpY2EgZGUgZmVlZGJhY2siQGVzIDsNCiAgICBkY3Rlcm1zOmNyZWF0b3IgIkJh\"\n",
        "        \"c3RpYWFuIEhlZXJlbiIsDQogICAgICAgICJIaWVrZSBLZXVuaW5nIiwNCiAgICAgICAgIkpvaGFuIEpldXJpbmciIDsNCiAgICBk\"\n",
        "        \"Y3Rlcm1zOmRhdGUgIjIwMTkiXl54c2Q6Z1llYXIgOw0KICAgIGRjdGVybXM6aWRlbnRpZmllciAiMTAuMTE0NS8zMjMxNzExIiA7\"\n",
        "        \"DQogICAgZGN0ZXJtczp0aXRsZSAiQSBzeXN0ZW1hdGljIGxpdGVyYXR1cmUgcmV2aWV3IG9mIGF1dG9tYXRlZCBmZWVkYmFjayBn\"\n",
        "        \"ZW5lcmF0aW9uIGZvciBwcm9ncmFtbWluZyBleGVyY2lzZXMiQGVuIC4NCg0KcHlyOnNsaWNpbmdfc3RyIGEgcHllZHU6UHJpbmNp\"\n",
        "        \"cGlvVHJhbnN2ZXJzYWwgOw0KICAgIHJkZnM6bGFiZWwgIlN0cmluZyBzbGljaW5nIkBlbiwNCiAgICAgICAgIlNsaWNpbmcgZGUg\"\n",
        "        \"Y2FkZW5hcyJAZXMgOw0KICAgIHNrb3M6YnJvYWRlciBweXI6c2xpY2luZyA7DQogICAgcHllZHU6YU5pdmVsRG9taW5pbyBweXI6\"\n",
        "        \"aW50ZXJtZWRpbyA7DQogICAgcHllZHU6cGVydGVuZWNlQVRlbWEgcHlyOlRfc3RyaW5ncyA7DQogICAgcHllZHU6cmVxdWllcmVQ\"\n",
        "        \"cmVycmVxdWlzaXRvIHB5cjpzbGljaW5nLA0KICAgICAgICBweXI6dGlwb19zdHIgOw0KICAgIHB5ZWR1OnRpZW5lRGlmaWN1bHRh\"\n",
        "        \"ZCAzIC4NCg0KcHlyOnRpcG9fYnl0ZXMgYSBweWVkdTpUaXBvRGVEYXRvIDsNCiAgICByZGZzOmxhYmVsICJCeXRlcyJAZW4sDQog\"\n",
        "        \"ICAgICAgICJCeXRlcyJAZXMgOw0KICAgIHB5ZWR1OmFOaXZlbERvbWluaW8gcHlyOmludGVybWVkaW8gOw0KICAgIHB5ZWR1OnBl\"\n",
        "        \"cnRlbmVjZUFUZW1hIHB5cjpUX3RpcG9zIDsNCiAgICBweWVkdTpyZXF1aWVyZVByZXJyZXF1aXNpdG8gcHlyOnRpcG9fc3RyIDsN\"\n",
        "        \"CiAgICBweWVkdTp0aWVuZURpZmljdWx0YWQgMyAuDQoNCnB5cjp0aXBvX25vbmUgYSBweWVkdTpUaXBvRGVEYXRvIDsNCiAgICBy\"\n",
        "        \"ZGZzOmxhYmVsICJOb25lVHlwZSJAZW4sDQogICAgICAgICJOb25lVHlwZSAoTm9uZSkiQGVzIDsNCiAgICBweWVkdTphTml2ZWxE\"\n",
        "        \"b21pbmlvIHB5cjpiYXNpY28gOw0KICAgIHB5ZWR1OnBlcnRlbmVjZUFUZW1hIHB5cjpUX3RpcG9zIDsNCiAgICBweWVkdTp0aWVu\"\n",
        "        \"ZURpZmljdWx0YWQgMSAuDQoNCnB5ZWR1OlJ1dGFBcHJlbmRpemFqZSBhIG93bDpDbGFzcyA7DQogICAgcmRmczpsYWJlbCAiTGVh\"\n",
        "        \"cm5pbmcgcGF0aCJAZW4sDQogICAgICAgICJSdXRhIGRlIGFwcmVuZGl6YWplIkBlcyA7DQogICAgcmRmczpzdWJDbGFzc09mIHB5\"\n",
        "        \"ZWR1OkVudGlkYWRFZHVjYXRpdmEgLg0KDQpweWVkdTplcnJvclNvYnJlQ29uY2VwdG8gYSBvd2w6T2JqZWN0UHJvcGVydHkgOw0K\"\n",
        "        \"ICAgIHJkZnM6bGFiZWwgImlzIGEgbWlzY29uY2VwdGlvbiBhYm91dCJAZW4sDQogICAgICAgICJlcyB1biBlcnJvciBzb2JyZSBl\"\n",
        "        \"bCBjb25jZXB0byJAZXMgOw0KICAgIHJkZnM6ZG9tYWluIHB5ZWR1OkVycm9yQ29uY2VwdHVhbCA7DQogICAgcmRmczpyYW5nZSBw\"\n",
        "        \"eWVkdTpDb25jZXB0byAuDQoNCnB5ZWR1OmVzcGVjaWFsaXphIGEgb3dsOk9iamVjdFByb3BlcnR5IDsNCiAgICByZGZzOmxhYmVs\"\n",
        "        \"ICJzcGVjaWFsaXNlcyJAZW4sDQogICAgICAgICJlc3BlY2lhbGl6YSBhIkBlcyA7DQogICAgcmRmczpkb21haW4gcHllZHU6Q29u\"\n",
        "        \"Y2VwdG8gOw0KICAgIHJkZnM6cmFuZ2UgcHllZHU6Q29uY2VwdG8gLg0KDQpweWVkdTpyZXF1aWVyZVByZXJyZXF1aXNpdG8gYSBv\"\n",
        "        \"d2w6T2JqZWN0UHJvcGVydHksDQogICAgICAgIG93bDpUcmFuc2l0aXZlUHJvcGVydHkgOw0KICAgIHJkZnM6bGFiZWwgInJlcXVp\"\n",
        "        \"cmVzIHByZXJlcXVpc2l0ZSJAZW4sDQogICAgICAgICJyZXF1aWVyZSBjb21vIHByZXJyZXF1aXNpdG8iQGVzIDsNCiAgICByZGZz\"\n",
        "        \"OmRvbWFpbiBweWVkdTpDb25jZXB0byA7DQogICAgcmRmczpyYW5nZSBweWVkdTpDb25jZXB0byAuDQoNCnB5cjpUX2NvbXBsZWpp\"\n",
        "        \"ZGFkIGEgcHllZHU6VGVtYSA7DQogICAgcmRmczpsYWJlbCAiQWxnb3JpdGhtaWMgY29tcGxleGl0eSJAZW4sDQogICAgICAgICJD\"\n",
        "        \"b21wbGVqaWRhZCBhbGdvcsOtdG1pY2EiQGVzIC4NCg0KcHlyOmFtYml0byBhIHB5ZWR1OlByaW5jaXBpb1RyYW5zdmVyc2FsIDsN\"\n",
        "        \"CiAgICByZGZzOmxhYmVsICJWYXJpYWJsZSBzY29wZSJAZW4sDQogICAgICAgICLDgW1iaXRvIGRlIHZhcmlhYmxlcyAoc2NvcGUp\"\n",
        "        \"IkBlcyA7DQogICAgcHllZHU6cGVydGVuZWNlQVRlbWEgcHlyOlRfZnVuY2lvbmVzIDsNCiAgICBweWVkdTpyZXF1aWVyZVByZXJy\"\n",
        "        \"ZXF1aXNpdG8gcHlyOmZ1bmNpb24gOw0KICAgIHB5ZWR1OnRpZW5lRGlmaWN1bHRhZCAzIC4NCg0KcHlyOmFzeW5jX2F3YWl0IGEg\"\n",
        "        \"cHllZHU6RXN0cnVjdHVyYURlQ29udHJvbCA7DQogICAgcmRmczpsYWJlbCAiYXN5bmMvYXdhaXQiQGVuLA0KICAgICAgICAiYXN5\"\n",
        "        \"bmMvYXdhaXQiQGVzIDsNCiAgICBweWVkdTphTml2ZWxEb21pbmlvIHB5cjphdmFuemFkbyA7DQogICAgcHllZHU6cGVydGVuZWNl\"\n",
        "        \"QVRlbWEgcHlyOlRfY29uY3VycmVuY2lhIDsNCiAgICBweWVkdTpyZXF1aWVyZVByZXJyZXF1aXNpdG8gcHlyOmZ1bmNpb24gOw0K\"\n",
        "        \"ICAgIHB5ZWR1OnRpZW5lRGlmaWN1bHRhZCA1IC4NCg0KcHlyOmJ1Y2xlX3doaWxlIGEgcHllZHU6RXN0cnVjdHVyYURlQ29udHJv\"\n",
        "        \"bCA7DQogICAgcmRmczpsYWJlbCAiV2hpbGUgbG9vcCJAZW4sDQogICAgICAgICJCdWNsZSB3aGlsZSJAZXMgOw0KICAgIHB5ZWR1\"\n",
        "        \"OnBlcnRlbmVjZUFUZW1hIHB5cjpUX2NvbnRyb2wgOw0KICAgIHB5ZWR1OnJlcXVpZXJlUHJlcnJlcXVpc2l0byBweXI6Y29uZGlj\"\n",
        "        \"aW9uYWwgOw0KICAgIHB5ZWR1OnRpZW5lRGlmaWN1bHRhZCAyIC4NCg0KcHlyOmNsb3N1cmUgYSBweWVkdTpQcmluY2lwaW9UcmFu\"\n",
        "        \"c3ZlcnNhbCA7DQogICAgcmRmczpsYWJlbCAiQ2xvc3VyZSJAZW4sDQogICAgICAgICJDbGF1c3VyYSAoY2xvc3VyZSkiQGVzIDsN\"\n",
        "        \"CiAgICBza29zOmV4YWN0TWF0Y2ggd2Q6UTUzNTMzNSA7DQogICAgcHllZHU6YU5pdmVsRG9taW5pbyBweXI6YXZhbnphZG8gOw0K\"\n",
        "        \"ICAgIHB5ZWR1OnBlcnRlbmVjZUFUZW1hIHB5cjpUX2Z1bmNpb25hbCA7DQogICAgcHllZHU6cmVxdWllcmVQcmVycmVxdWlzaXRv\"\n",
        "        \"IHB5cjphbWJpdG8sDQogICAgICAgIHB5cjpmdW5jaW9uIDsNCiAgICBweWVkdTp0aWVuZURpZmljdWx0YWQgNCAuDQoNCnB5cjpj\"\n",
        "        \"b21wbGVqaWRhZCBhIHB5ZWR1OlByaW5jaXBpb1RyYW5zdmVyc2FsIDsNCiAgICByZGZzOmxhYmVsICJUaW1lIGNvbXBsZXhpdHki\"\n",
        "        \"QGVuLA0KICAgICAgICAiQ29tcGxlamlkYWQgdGVtcG9yYWwiQGVzIDsNCiAgICBza29zOmV4YWN0TWF0Y2ggd2Q6UTIzOTMxOTMg\"\n",
        "        \"Ow0KICAgIHB5ZWR1OmFOaXZlbERvbWluaW8gcHlyOmF2YW56YWRvIDsNCiAgICBweWVkdTpwZXJ0ZW5lY2VBVGVtYSBweXI6VF9j\"\n",
        "        \"b21wbGVqaWRhZCA7DQogICAgcHllZHU6dGllbmVEaWZpY3VsdGFkIDUgLg0KDQpweXI6Y29uanVudG8gYSBweWVkdTpFc3RydWN0\"\n",
        "        \"dXJhRGVEYXRvcyA7DQogICAgcmRmczpsYWJlbCAiU2V0IkBlbiwNCiAgICAgICAgIkNvbmp1bnRvIChzZXQpIkBlcyA7DQogICAg\"\n",
        "        \"c2tvczpleGFjdE1hdGNoIHdkOlExNTE0NzQxIDsNCiAgICBza29zOnJlbGF0ZWQgcHlyOmxpc3RhIDsNCiAgICBweWVkdTpwZXJ0\"\n",
        "        \"ZW5lY2VBVGVtYSBweXI6VF9lc3RydWN0dXJhcyA7DQogICAgcHllZHU6dGllbmVEaWZpY3VsdGFkIDMgLg0KDQpweXI6ZHVuZGVy\"\n",
        "        \"IGEgcHllZHU6UGFyYWRpZ21hIDsNCiAgICByZGZzOmxhYmVsICJEdW5kZXIgbWV0aG9kcyJAZW4sDQogICAgICAgICJNw6l0b2Rv\"\n",
        "        \"cyBlc3BlY2lhbGVzIChkdW5kZXIpIkBlcyA7DQogICAgcHllZHU6YU5pdmVsRG9taW5pbyBweXI6YXZhbnphZG8gOw0KICAgIHB5\"\n",
        "        \"ZWR1OnBlcnRlbmVjZUFUZW1hIHB5cjpUX3BvbyA7DQogICAgcHllZHU6cmVxdWllcmVQcmVycmVxdWlzaXRvIHB5cjptZXRvZG8g\"\n",
        "        \"Ow0KICAgIHB5ZWR1OnRpZW5lRGlmaWN1bHRhZCA0IC4NCg0KcHlyOmVycl9vZmZfYnlfb25lIGEgcHllZHU6RXJyb3JDb25jZXB0\"\n",
        "        \"dWFsIDsNCiAgICByZGZzOmxhYmVsICJPZmYtYnktb25lIGVycm9yIkBlbiwNCiAgICAgICAgIkVycm9yIGRlIMOtbmRpY2UgcG9y\"\n",
        "        \"IHVubyAob2ZmLWJ5LW9uZSkiQGVzIDsNCiAgICByZGZzOmNvbW1lbnQgIkNvbmZ1c2nDs24gZW4gbGEgY29uZGljacOzbiBkZSBw\"\n",
        "        \"YXJhZGEgZGUgdW4gYnVjbGUgbyBlbiBsb3MgbMOtbWl0ZXMgZGUgdW4gcmFuZ28vw61uZGljZS4iQGVzIDsNCiAgICBweWVkdTpl\"\n",
        "        \"cnJvclNvYnJlQ29uY2VwdG8gcHlyOmluZGV4YWNpb24gOw0KICAgIHB5ZWR1OnRpZW5lRGlmaWN1bHRhZCAzIC4NCg0KcHlyOmhp\"\n",
        "        \"bG9zIGEgcHllZHU6UGFyYWRpZ21hIDsNCiAgICByZGZzOmxhYmVsICJUaHJlYWRzIkBlbiwNCiAgICAgICAgIkhpbG9zICh0aHJl\"\n",
        "        \"YWRpbmcpIkBlcyA7DQogICAgc2tvczpyZWxhdGVkIHB5cjptdWx0aXByb2Nlc28gOw0KICAgIHB5ZWR1OmFOaXZlbERvbWluaW8g\"\n",
        "        \"cHlyOmF2YW56YWRvIDsNCiAgICBweWVkdTpjb250cmFzdGFDb24gcHlyOm11bHRpcHJvY2VzbyA7DQogICAgcHllZHU6cGVydGVu\"\n",
        "        \"ZWNlQVRlbWEgcHlyOlRfY29uY3VycmVuY2lhIDsNCiAgICBweWVkdTpyZXF1aWVyZVByZXJyZXF1aXNpdG8gcHlyOmdpbCA7DQog\"\n",
        "        \"ICAgcHllZHU6dGllbmVEaWZpY3VsdGFkIDUgLg0KDQpweXI6bXVsdGlwcm9jZXNvIGEgcHllZHU6UGFyYWRpZ21hIDsNCiAgICBy\"\n",
        "        \"ZGZzOmxhYmVsICJNdWx0aXByb2Nlc3NpbmciQGVuLA0KICAgICAgICAiTXVsdGlwcm9jZXNvIkBlcyA7DQogICAgc2tvczpyZWxh\"\n",
        "        \"dGVkIHB5cjpoaWxvcyA7DQogICAgcHllZHU6YU5pdmVsRG9taW5pbyBweXI6YXZhbnphZG8gOw0KICAgIHB5ZWR1OmNvbnRyYXN0\"\n",
        "        \"YUNvbiBweXI6aGlsb3MgOw0KICAgIHB5ZWR1OnBlcnRlbmVjZUFUZW1hIHB5cjpUX2NvbmN1cnJlbmNpYSA7DQogICAgcHllZHU6\"\n",
        "        \"cmVxdWllcmVQcmVycmVxdWlzaXRvIHB5cjpnaWwgOw0KICAgIHB5ZWR1OnRpZW5lRGlmaWN1bHRhZCA1IC4NCg0KcHlyOm9iamV0\"\n",
        "        \"byBhIHB5ZWR1OlBhcmFkaWdtYSA7DQogICAgcmRmczpsYWJlbCAiT2JqZWN0IkBlbiwNCiAgICAgICAgIk9iamV0byAvIGluc3Rh\"\n",
        "        \"bmNpYSJAZXMgOw0KICAgIHB5ZWR1OmFOaXZlbERvbWluaW8gcHlyOmludGVybWVkaW8gOw0KICAgIHB5ZWR1OnBlcnRlbmVjZUFU\"\n",
        "        \"ZW1hIHB5cjpUX3BvbyA7DQogICAgcHllZHU6cmVxdWllcmVQcmVycmVxdWlzaXRvIHB5cjpjbGFzZSA7DQogICAgcHllZHU6dGll\"\n",
        "        \"bmVEaWZpY3VsdGFkIDMgLg0KDQpweXI6cGFxdWV0ZSBhIHB5ZWR1Ok1vZHVsb0xpYnJlcmlhIDsNCiAgICByZGZzOmxhYmVsICJQ\"\n",
        "        \"YWNrYWdlIkBlbiwNCiAgICAgICAgIlBhcXVldGUiQGVzIDsNCiAgICBweWVkdTphTml2ZWxEb21pbmlvIHB5cjppbnRlcm1lZGlv\"\n",
        "        \"IDsNCiAgICBweWVkdTpwZXJ0ZW5lY2VBVGVtYSBweXI6VF9tb2R1bG9zIDsNCiAgICBweWVkdTpyZXF1aWVyZVByZXJyZXF1aXNp\"\n",
        "        \"dG8gcHlyOmltcG9ydF9tb2QgOw0KICAgIHB5ZWR1OnRpZW5lRGlmaWN1bHRhZCAzIC4NCg0KcHlyOnRpcG9fZmxvYXQgYSBweWVk\"\n",
        "        \"dTpUaXBvRGVEYXRvIDsNCiAgICByZGZzOmxhYmVsICJGbG9hdCJAZW4sDQogICAgICAgICJGbG90YW50ZSAoZmxvYXQpIkBlcyA7\"\n",
        "        \"DQogICAgcHllZHU6YU5pdmVsRG9taW5pbyBweXI6YmFzaWNvIDsNCiAgICBweWVkdTpjb250cmFzdGFDb24gcHlyOnRpcG9faW50\"\n",
        "        \"IDsNCiAgICBweWVkdTpwZXJ0ZW5lY2VBVGVtYSBweXI6VF90aXBvcyA7DQogICAgcHllZHU6dGllbmVEaWZpY3VsdGFkIDEgLg0K\"\n",
        "        \"DQpweXI6dGlwb19pbnQgYSBweWVkdTpUaXBvRGVEYXRvIDsNCiAgICByZGZzOmxhYmVsICJJbnRlZ2VyIChpbnQpIkBlbiwNCiAg\"\n",
        "        \"ICAgICAgIkVudGVybyAoaW50KSJAZXMgOw0KICAgIHB5ZWR1OnBlcnRlbmVjZUFUZW1hIHB5cjpUX2Z1bmRhbWVudG9zIDsNCiAg\"\n",
        "        \"ICBweWVkdTp0aWVuZURpZmljdWx0YWQgMSAuDQoNCnB5cjp2YXJpYWJsZSBhIHB5ZWR1OlByaW5jaXBpb1RyYW5zdmVyc2FsIDsN\"\n",
        "        \"CiAgICByZGZzOmxhYmVsICJWYXJpYWJsZSJAZW4sDQogICAgICAgICJWYXJpYWJsZSJAZXMgOw0KICAgIHJkZnM6Y29tbWVudCAi\"\n",
        "        \"Tm9tYnJlIGFzb2NpYWRvIGEgdW4gdmFsb3IgZW4gbWVtb3JpYS4iQGVzIDsNCiAgICBweWVkdTphTml2ZWxEb21pbmlvIHB5cjpi\"\n",
        "        \"YXNpY28gOw0KICAgIHB5ZWR1OnBlcnRlbmVjZUFUZW1hIHB5cjpUX2Z1bmRhbWVudG9zIDsNCiAgICBweWVkdTp0aWVuZURpZmlj\"\n",
        "        \"dWx0YWQgMSA7DQogICAgcHllZHU6dGllbmVFamVtcGxvQ29kaWdvICJ4ID0gNDIiIC4NCg0KcHlyOndpdGhfY29udGV4dCBhIHB5\"\n",
        "        \"ZWR1OkVzdHJ1Y3R1cmFEZUNvbnRyb2wgOw0KICAgIHJkZnM6bGFiZWwgIndpdGggc3RhdGVtZW50IkBlbiwNCiAgICAgICAgIlNl\"\n",
        "        \"bnRlbmNpYSB3aXRoIkBlcyA7DQogICAgcHllZHU6YU5pdmVsRG9taW5pbyBweXI6YXZhbnphZG8gOw0KICAgIHB5ZWR1OnBlcnRl\"\n",
        "        \"bmVjZUFUZW1hIHB5cjpUX2NvbnRyb2wgOw0KICAgIHB5ZWR1OnJlcXVpZXJlUHJlcnJlcXVpc2l0byBweXI6ZXhjZXBjaW9uIDsN\"\n",
        "        \"CiAgICBweWVkdTp0aWVuZURpZmljdWx0YWQgNCAuDQoNCnB5ZWR1OkNvbXBldGVuY2lhIGEgb3dsOkNsYXNzIDsNCiAgICByZGZz\"\n",
        "        \"OmxhYmVsICJDb21wZXRlbmN5IkBlbiwNCiAgICAgICAgIkNvbXBldGVuY2lhIkBlcyA7DQogICAgcmRmczpzdWJDbGFzc09mIHB5\"\n",
        "        \"ZWR1OkVudGlkYWRFZHVjYXRpdmEgLg0KDQpweXI6VF9yZWN1cnNpb24gYSBweWVkdTpUZW1hIDsNCiAgICByZGZzOmxhYmVsICJS\"\n",
        "        \"ZWN1cnNpb24iQGVuLA0KICAgICAgICAiUmVjdXJzacOzbiJAZXMgLg0KDQpweXI6YWJyaXJfZmljaGVybyBhIHB5ZWR1OkZ1bmNp\"\n",
        "        \"b25JbnRlZ3JhZGEgOw0KICAgIHJkZnM6bGFiZWwgIkZpbGUgb3BlbiJAZW4sDQogICAgICAgICJBcGVydHVyYSBkZSBmaWNoZXJv\"\n",
        "        \"cyAob3BlbikiQGVzIDsNCiAgICBweWVkdTphTml2ZWxEb21pbmlvIHB5cjppbnRlcm1lZGlvIDsNCiAgICBweWVkdTpwZXJ0ZW5l\"\n",
        "        \"Y2VBVGVtYSBweXI6VF9maWNoZXJvcyA7DQogICAgcHllZHU6cmVxdWllcmVQcmVycmVxdWlzaXRvIHB5cjp3aXRoX2NvbnRleHQg\"\n",
        "        \"Ow0KICAgIHB5ZWR1OnRpZW5lRGlmaWN1bHRhZCAzIC4NCg0KcHlyOmJmcyBhIHB5ZWR1OlByaW5jaXBpb1RyYW5zdmVyc2FsIDsN\"\n",
        "        \"CiAgICByZGZzOmxhYmVsICJCcmVhZHRoLWZpcnN0IHNlYXJjaCJAZW4sDQogICAgICAgICJSZWNvcnJpZG8gZW4gYW5jaHVyYSAo\"\n",
        "        \"QkZTKSJAZXMgOw0KICAgIHNrb3M6YnJvYWRlciBweXI6Z3JhZm9fZXN0ciA7DQogICAgc2tvczpleGFjdE1hdGNoIHdkOlEzMjU5\"\n",
        "        \"MDQgOw0KICAgIHNrb3M6cmVsYXRlZCBweXI6ZGZzIDsNCiAgICBweWVkdTphTml2ZWxEb21pbmlvIHB5cjphdmFuemFkbyA7DQog\"\n",
        "        \"ICAgcHllZHU6Y29udHJhc3RhQ29uIHB5cjpkZnMgOw0KICAgIHB5ZWR1OnBlcnRlbmVjZUFUZW1hIHB5cjpUX2FsZ29yaXRtb3Mg\"\n",
        "        \"Ow0KICAgIHB5ZWR1OnJlcXVpZXJlUHJlcnJlcXVpc2l0byBweXI6Y29sYSwNCiAgICAgICAgcHlyOmdyYWZvX2VzdHIgOw0KICAg\"\n",
        "        \"IHB5ZWR1OnRpZW5lRGlmaWN1bHRhZCA1IC4NCg0KcHlyOmNvcGlhX3N1cGVyZmljaWFsIGEgcHllZHU6UHJpbmNpcGlvVHJhbnN2\"\n",
        "        \"ZXJzYWwgOw0KICAgIHJkZnM6bGFiZWwgIlNoYWxsb3cgY29weSJAZW4sDQogICAgICAgICJDb3BpYSBzdXBlcmZpY2lhbCJAZXMg\"\n",
        "        \"Ow0KICAgIHB5ZWR1OmFOaXZlbERvbWluaW8gcHlyOmF2YW56YWRvIDsNCiAgICBweWVkdTpwZXJ0ZW5lY2VBVGVtYSBweXI6VF90\"\n",
        "        \"aXBvcyA7DQogICAgcHllZHU6cmVxdWllcmVQcmVycmVxdWlzaXRvIHB5cjpsaXN0YSwNCiAgICAgICAgcHlyOm11dGFiaWxpZGFk\"\n",
        "        \"IDsNCiAgICBweWVkdTp0aWVuZURpZmljdWx0YWQgNCAuDQoNCnB5cjpkZnMgYSBweWVkdTpQcmluY2lwaW9UcmFuc3ZlcnNhbCA7\"\n",
        "        \"DQogICAgcmRmczpsYWJlbCAiRGVwdGgtZmlyc3Qgc2VhcmNoIkBlbiwNCiAgICAgICAgIlJlY29ycmlkbyBlbiBwcm9mdW5kaWRh\"\n",
        "        \"ZCAoREZTKSJAZXMgOw0KICAgIHNrb3M6YnJvYWRlciBweXI6Z3JhZm9fZXN0ciA7DQogICAgc2tvczpleGFjdE1hdGNoIHdkOlE4\"\n",
        "        \"MTYzMTkgOw0KICAgIHNrb3M6cmVsYXRlZCBweXI6YmZzIDsNCiAgICBweWVkdTphTml2ZWxEb21pbmlvIHB5cjphdmFuemFkbyA7\"\n",
        "        \"DQogICAgcHllZHU6Y29udHJhc3RhQ29uIHB5cjpiZnMgOw0KICAgIHB5ZWR1OnBlcnRlbmVjZUFUZW1hIHB5cjpUX2FsZ29yaXRt\"\n",
        "        \"b3MgOw0KICAgIHB5ZWR1OnJlcXVpZXJlUHJlcnJlcXVpc2l0byBweXI6Z3JhZm9fZXN0ciwNCiAgICAgICAgcHlyOnJlY3Vyc2lv\"\n",
        "        \"biA7DQogICAgcHllZHU6dGllbmVEaWZpY3VsdGFkIDUgLg0KDQpweXI6Z2lsIGEgcHllZHU6UHJpbmNpcGlvVHJhbnN2ZXJzYWwg\"\n",
        "        \"Ow0KICAgIHJkZnM6bGFiZWwgIkdsb2JhbCBJbnRlcnByZXRlciBMb2NrIkBlbiwNCiAgICAgICAgIkdJTCJAZXMgOw0KICAgIHNr\"\n",
        "        \"b3M6ZXhhY3RNYXRjaCB3ZDpRNTU3MDQ1MSA7DQogICAgcHllZHU6YU5pdmVsRG9taW5pbyBweXI6YXZhbnphZG8gOw0KICAgIHB5\"\n",
        "        \"ZWR1OnBlcnRlbmVjZUFUZW1hIHB5cjpUX2NvbmN1cnJlbmNpYSA7DQogICAgcHllZHU6dGllbmVEaWZpY3VsdGFkIDUgLg0KDQpw\"\n",
        "        \"eXI6aGVyZW5jaWFfbXVsdGlwbGUgYSBweWVkdTpQYXJhZGlnbWEgOw0KICAgIHJkZnM6bGFiZWwgIk11bHRpcGxlIGluaGVyaXRh\"\n",
        "        \"bmNlIkBlbiwNCiAgICAgICAgIkhlcmVuY2lhIG3Dumx0aXBsZSJAZXMgOw0KICAgIHNrb3M6YnJvYWRlciBweXI6aGVyZW5jaWEg\"\n",
        "        \"Ow0KICAgIHB5ZWR1OmFOaXZlbERvbWluaW8gcHlyOmF2YW56YWRvIDsNCiAgICBweWVkdTpwZXJ0ZW5lY2VBVGVtYSBweXI6VF9w\"\n",
        "        \"b28gOw0KICAgIHB5ZWR1OnJlcXVpZXJlUHJlcnJlcXVpc2l0byBweXI6aGVyZW5jaWEgOw0KICAgIHB5ZWR1OnRpZW5lRGlmaWN1\"\n",
        "        \"bHRhZCA1IC4NCg0KcHlyOm11dGFiaWxpZGFkIGEgcHllZHU6UHJpbmNpcGlvVHJhbnN2ZXJzYWwgOw0KICAgIHJkZnM6bGFiZWwg\"\n",
        "        \"Ik11dGFiaWxpdHkiQGVuLA0KICAgICAgICAiTXV0YWJpbGlkYWQiQGVzIDsNCiAgICByZGZzOmNvbW1lbnQgIlByb3BpZWRhZCBk\"\n",
        "        \"ZSBsb3Mgb2JqZXRvcyBjdXlvIGVzdGFkbyBwdWVkZSBjYW1iaWFyIHRyYXMgc3UgY3JlYWNpw7NuLiJAZXMgOw0KICAgIHB5ZWR1\"\n",
        "        \"OmFOaXZlbERvbWluaW8gcHlyOmF2YW56YWRvIDsNCiAgICBweWVkdTpjb250cmFzdGFDb24gcHlyOnR1cGxhIDsNCiAgICBweWVk\"\n",
        "        \"dTpwZXJ0ZW5lY2VBVGVtYSBweXI6VF9lc3RydWN0dXJhcyA7DQogICAgcHllZHU6dGllbmVEaWZpY3VsdGFkIDQgLg0KDQpweXI6\"\n",
        "        \"cGFyYW1ldHJvcyBhIHB5ZWR1OlByaW5jaXBpb1RyYW5zdmVyc2FsIDsNCiAgICByZGZzOmxhYmVsICJQYXJhbWV0ZXJzIkBlbiwN\"\n",
        "        \"CiAgICAgICAgIlBhcsOhbWV0cm9zIHkgYXJndW1lbnRvcyJAZXMgOw0KICAgIHB5ZWR1OmFOaXZlbERvbWluaW8gcHlyOmJhc2lj\"\n",
        "        \"byA7DQogICAgcHllZHU6cGVydGVuZWNlQVRlbWEgcHlyOlRfZnVuY2lvbmVzIDsNCiAgICBweWVkdTpyZXF1aWVyZVByZXJyZXF1\"\n",
        "        \"aXNpdG8gcHlyOmZ1bmNpb24gOw0KICAgIHB5ZWR1OnRpZW5lRGlmaWN1bHRhZCAyIC4NCg0KcHlyOnBpbGEgYSBweWVkdTpFc3Ry\"\n",
        "        \"dWN0dXJhRGVEYXRvcyA7DQogICAgcmRmczpsYWJlbCAiU3RhY2siQGVuLA0KICAgICAgICAiUGlsYSAoc3RhY2spIkBlcyA7DQog\"\n",
        "        \"ICAgc2tvczpicm9hZGVyIHB5cjpsaXN0YSA7DQogICAgc2tvczpyZWxhdGVkIHB5cjpjb2xhIDsNCiAgICBweWVkdTphTml2ZWxE\"\n",
        "        \"b21pbmlvIHB5cjpiYXNpY28gOw0KICAgIHB5ZWR1OmNvbnRyYXN0YUNvbiBweXI6Y29sYSA7DQogICAgcHllZHU6cGVydGVuZWNl\"\n",
        "        \"QVRlbWEgcHlyOlRfZXN0cnVjdHVyYXMgOw0KICAgIHB5ZWR1OnJlcXVpZXJlUHJlcnJlcXVpc2l0byBweXI6bGlzdGEgOw0KICAg\"\n",
        "        \"IHB5ZWR1OnRpZW5lRGlmaWN1bHRhZCAyIC4NCg0KcHlyOnNsaWNpbmcgYSBweWVkdTpQcmluY2lwaW9UcmFuc3ZlcnNhbCA7DQog\"\n",
        "        \"ICAgcmRmczpsYWJlbCAiU2xpY2luZyJAZW4sDQogICAgICAgICJTbGljaW5nIChyZWJhbmFkbykiQGVzIDsNCiAgICBza29zOmJy\"\n",
        "        \"b2FkZXIgcHlyOmluZGV4YWNpb24gOw0KICAgIHNrb3M6bmFycm93ZXIgcHlyOnNsaWNpbmdfc3RyIDsNCiAgICBweWVkdTpwZXJ0\"\n",
        "        \"ZW5lY2VBVGVtYSBweXI6VF9lc3RydWN0dXJhcyA7DQogICAgcHllZHU6cmVxdWllcmVQcmVycmVxdWlzaXRvIHB5cjppbmRleGFj\"\n",
        "        \"aW9uIDsNCiAgICBweWVkdTp0aWVuZURpZmljdWx0YWQgMyAuDQoNCnB5cjp0aXBvX2Jvb2wgYSBweWVkdTpUaXBvRGVEYXRvIDsN\"\n",
        "        \"CiAgICByZGZzOmxhYmVsICJCb29sZWFuIChib29sKSJAZW4sDQogICAgICAgICJCb29sZWFubyAoYm9vbCkiQGVzIDsNCiAgICBw\"\n",
        "        \"eWVkdTpwZXJ0ZW5lY2VBVGVtYSBweXI6VF9mdW5kYW1lbnRvcyA7DQogICAgcHllZHU6dGllbmVEaWZpY3VsdGFkIDEgLg0KDQpw\"\n",
        "        \"eXI6YnVzcXVlZGFfYmluYXJpYSBhIHB5ZWR1OlByaW5jaXBpb1RyYW5zdmVyc2FsIDsNCiAgICByZGZzOmxhYmVsICJCaW5hcnkg\"\n",
        "        \"c2VhcmNoIkBlbiwNCiAgICAgICAgIkLDunNxdWVkYSBiaW5hcmlhIkBlcyA7DQogICAgc2tvczpleGFjdE1hdGNoIHdkOlEyNDM3\"\n",
        "        \"NTQgOw0KICAgIHNrb3M6cHJlZkxhYmVsICJCw7pzcXVlZGEgYmluYXJpYSJAZXMgOw0KICAgIHNrb3M6cmVsYXRlZCBweXI6YnVz\"\n",
        "        \"cXVlZGFfbGluZWFsIDsNCiAgICBweWVkdTpwZXJ0ZW5lY2VBVGVtYSBweXI6VF9jb21wbGVqaWRhZCA7DQogICAgcHllZHU6cmVx\"\n",
        "        \"dWllcmVQcmVycmVxdWlzaXRvIHB5cjpidWNsZV93aGlsZSwNCiAgICAgICAgcHlyOmluZGV4YWNpb24gOw0KICAgIHB5ZWR1OnNl\"\n",
        "        \"QXBsaWNhQSBweXI6bGlzdGEgOw0KICAgIHB5ZWR1OnRpZW5lRGlmaWN1bHRhZCA0IC4NCg0KcHlyOmNvbGEgYSBweWVkdTpFc3Ry\"\n",
        "        \"dWN0dXJhRGVEYXRvcyA7DQogICAgcmRmczpsYWJlbCAiUXVldWUiQGVuLA0KICAgICAgICAiQ29sYSAocXVldWUpIkBlcyA7DQog\"\n",
        "        \"ICAgc2tvczpicm9hZGVyIHB5cjpsaXN0YSA7DQogICAgc2tvczpyZWxhdGVkIHB5cjpwaWxhIDsNCiAgICBweWVkdTphTml2ZWxE\"\n",
        "        \"b21pbmlvIHB5cjpiYXNpY28gOw0KICAgIHB5ZWR1OmNvbnRyYXN0YUNvbiBweXI6cGlsYSA7DQogICAgcHllZHU6cGVydGVuZWNl\"\n",
        "        \"QVRlbWEgcHlyOlRfZXN0cnVjdHVyYXMgOw0KICAgIHB5ZWR1OnJlcXVpZXJlUHJlcnJlcXVpc2l0byBweXI6bGlzdGEgOw0KICAg\"\n",
        "        \"IHB5ZWR1OnRpZW5lRGlmaWN1bHRhZCAyIC4NCg0KcHlyOmVqX2ZhY3RvcmlhbCBhIHB5ZWR1OkVqZXJjaWNpbyA7DQogICAgcmRm\"\n",
        "        \"czpsYWJlbCAiUmVjdXJzaXZlIGZhY3RvcmlhbCJAZW4sDQogICAgICAgICJGYWN0b3JpYWwgcmVjdXJzaXZvIkBlcyA7DQogICAg\"\n",
        "        \"cHllZHU6Y3VicmVDb25jZXB0byBweXI6ZnVuY2lvbiwNCiAgICAgICAgcHlyOnJlY3Vyc2lvbiA7DQogICAgcHllZHU6dGllbmVE\"\n",
        "        \"aWZpY3VsdGFkIDMgOw0KICAgIHB5ZWR1OnRpZW5lRW51bmNpYWRvICJJbXBsZW1lbnRhIGVsIGZhY3RvcmlhbCBkZSBuIGRlIGZv\"\n",
        "        \"cm1hIHJlY3Vyc2l2YS4iQGVzIC4NCg0KcHlyOmVqX3N1bWFfbGlzdGEgYSBweWVkdTpFamVyY2ljaW8gOw0KICAgIHJkZnM6bGFi\"\n",
        "        \"ZWwgIlN1bSB0aGUgZWxlbWVudHMgb2YgYSBsaXN0IkBlbiwNCiAgICAgICAgIlN1bWEgZGUgbG9zIGVsZW1lbnRvcyBkZSB1bmEg\"\n",
        "        \"bGlzdGEiQGVzIDsNCiAgICBweWVkdTpjdWJyZUNvbmNlcHRvIHB5cjpidWNsZV9mb3IsDQogICAgICAgIHB5cjpmdW5jaW9uLA0K\"\n",
        "        \"ICAgICAgICBweXI6bGlzdGEgOw0KICAgIHB5ZWR1OnRpZW5lRGlmaWN1bHRhZCAyIDsNCiAgICBweWVkdTp0aWVuZUVudW5jaWFk\"\n",
        "        \"byAiRXNjcmliZSB1bmEgZnVuY2nDs24gcXVlIHJlY2liYSB1bmEgbGlzdGEgZGUgZW50ZXJvcyB5IGRldnVlbHZhIHN1IHN1bWEg\"\n",
        "        \"dXNhbmRvIHVuIGJ1Y2xlLiJAZXMgLg0KDQpweXI6Z2VuZXJhZG9yIGEgcHllZHU6RXN0cnVjdHVyYURlQ29udHJvbCA7DQogICAg\"\n",
        "        \"cmRmczpsYWJlbCAiR2VuZXJhdG9yIkBlbiwNCiAgICAgICAgIkdlbmVyYWRvciAoeWllbGQpIkBlcyA7DQogICAgc2tvczpleGFj\"\n",
        "        \"dE1hdGNoIHdkOlEyNTY1MTg3IDsNCiAgICBweWVkdTphTml2ZWxEb21pbmlvIHB5cjphdmFuemFkbyA7DQogICAgcHllZHU6cGVy\"\n",
        "        \"dGVuZWNlQVRlbWEgcHlyOlRfZnVuY2lvbmFsIDsNCiAgICBweWVkdTpyZXF1aWVyZVByZXJyZXF1aXNpdG8gcHlyOmZ1bmNpb24s\"\n",
        "        \"DQogICAgICAgIHB5cjppdGVyYWRvciA7DQogICAgcHllZHU6dGllbmVEaWZpY3VsdGFkIDQgLg0KDQpweXI6Z3JhZm9fZXN0ciBh\"\n",
        "        \"IHB5ZWR1OkVzdHJ1Y3R1cmFEZURhdG9zIDsNCiAgICByZGZzOmxhYmVsICJHcmFwaCJAZW4sDQogICAgICAgICJHcmFmbyAoZXN0\"\n",
        "        \"cnVjdHVyYSkiQGVzIDsNCiAgICBza29zOmV4YWN0TWF0Y2ggd2Q6UTI0Nzk3MjYgOw0KICAgIHNrb3M6bmFycm93ZXIgcHlyOmJm\"\n",
        "        \"cywNCiAgICAgICAgcHlyOmRmcyA7DQogICAgcHllZHU6YU5pdmVsRG9taW5pbyBweXI6YXZhbnphZG8gOw0KICAgIHB5ZWR1OnBl\"\n",
        "        \"cnRlbmVjZUFUZW1hIHB5cjpUX2FsZ29yaXRtb3MgOw0KICAgIHB5ZWR1OnJlcXVpZXJlUHJlcnJlcXVpc2l0byBweXI6ZGljY2lv\"\n",
        "        \"bmFyaW8gOw0KICAgIHB5ZWR1OnRpZW5lRGlmaWN1bHRhZCA0IC4NCg0KcHlyOm5vdGFjaW9uX28gYSBweWVkdTpQcmluY2lwaW9U\"\n",
        "        \"cmFuc3ZlcnNhbCA7DQogICAgcmRmczpsYWJlbCAiQmlnLU8gbm90YXRpb24iQGVuLA0KICAgICAgICAiTm90YWNpw7NuIE8gZ3Jh\"\n",
        "        \"bmRlIkBlcyA7DQogICAgc2tvczpleGFjdE1hdGNoIHdkOlEyNjk4NzggOw0KICAgIHNrb3M6bmFycm93ZXIgcHlyOm9yZGVuYWNp\"\n",
        "        \"b25fYnVyYnVqYSwNCiAgICAgICAgcHlyOm9yZGVuYWNpb25fbWV6Y2xhLA0KICAgICAgICBweXI6b3JkZW5hY2lvbl9yYXBpZGEg\"\n",
        "        \"Ow0KICAgIHB5ZWR1OmFOaXZlbERvbWluaW8gcHlyOmF2YW56YWRvIDsNCiAgICBweWVkdTpwZXJ0ZW5lY2VBVGVtYSBweXI6VF9h\"\n",
        "        \"bGdvcml0bW9zIDsNCiAgICBweWVkdTpyZXF1aWVyZVByZXJyZXF1aXNpdG8gcHlyOmNvbXBsZWppZGFkIDsNCiAgICBweWVkdTp0\"\n",
        "        \"aWVuZURpZmljdWx0YWQgNCAuDQoNCnB5ZWR1Ok5pdmVsRG9taW5pbyBhIG93bDpDbGFzcyA7DQogICAgcmRmczpsYWJlbCAiTWFz\"\n",
        "        \"dGVyeSBsZXZlbCJAZW4sDQogICAgICAgICJOaXZlbCBkZSBkb21pbmlvIkBlcyA7DQogICAgcmRmczpzdWJDbGFzc09mIHNrb3M6\"\n",
        "        \"Q29uY2VwdCAuDQoNCnB5ZWR1OlJlY3Vyc28gYSBvd2w6Q2xhc3MgOw0KICAgIHJkZnM6bGFiZWwgIkxlYXJuaW5nIHJlc291cmNl\"\n",
        "        \"IkBlbiwNCiAgICAgICAgIlJlY3Vyc28gZGUgYXByZW5kaXphamUiQGVzIDsNCiAgICByZGZzOnN1YkNsYXNzT2YgcHllZHU6RW50\"\n",
        "        \"aWRhZEVkdWNhdGl2YSAuDQoNCnB5ZWR1OnJlbGFjaW9uYWRvQ29uY2VwdHVhbG1lbnRlQ29uIGEgb3dsOk9iamVjdFByb3BlcnR5\"\n",
        "        \"IDsNCiAgICByZGZzOmxhYmVsICJjb25jZXB0dWFsbHkgcmVsYXRlZCB0byJAZW4sDQogICAgICAgICJyZWxhY2lvbmFkbyBjb25j\"\n",
        "        \"ZXB0dWFsbWVudGUgY29uIkBlcyA7DQogICAgcmRmczpjb21tZW50ICJTdXBlcnByb3BpZWRhZCBnZW7DqXJpY2EgZGUgbGFzIHJl\"\n",
        "        \"bGFjaW9uZXMgZW50cmUgY29uY2VwdG9zOyBwZXJtaXRlIGNvbnN1bHRhcyBhbXBsaWFzIHBvciBzdWJzdW5jacOzbiBkZSBzdWJw\"\n",
        "        \"cm9waWVkYWRlcy4iQGVzIDsNCiAgICByZGZzOmRvbWFpbiBweWVkdTpDb25jZXB0byA7DQogICAgcmRmczpyYW5nZSBweWVkdTpD\"\n",
        "        \"b25jZXB0byAuDQoNCnB5cjphbm90YWNpb25lc190aXBvIGEgcHllZHU6UHJpbmNpcGlvVHJhbnN2ZXJzYWwgOw0KICAgIHJkZnM6\"\n",
        "        \"bGFiZWwgIlR5cGUgaGludHMiQGVuLA0KICAgICAgICAiQW5vdGFjaW9uZXMgZGUgdGlwbyJAZXMgOw0KICAgIHB5ZWR1OmFOaXZl\"\n",
        "        \"bERvbWluaW8gcHlyOmludGVybWVkaW8gOw0KICAgIHB5ZWR1OnBlcnRlbmVjZUFUZW1hIHB5cjpUX3RpcG9zIDsNCiAgICBweWVk\"\n",
        "        \"dTpyZXF1aWVyZVByZXJyZXF1aXNpdG8gcHlyOmZ1bmNpb24gOw0KICAgIHB5ZWR1OnRpZW5lRGlmaWN1bHRhZCAzIC4NCg0KcHly\"\n",
        "        \"OmRlY29yYWRvciBhIHB5ZWR1OlBhcmFkaWdtYSA7DQogICAgcmRmczpsYWJlbCAiRGVjb3JhdG9yIkBlbiwNCiAgICAgICAgIkRl\"\n",
        "        \"Y29yYWRvciJAZXMgOw0KICAgIHNrb3M6ZXhhY3RNYXRjaCB3ZDpRMTEwOTM4OTQxIDsNCiAgICBweWVkdTphTml2ZWxEb21pbmlv\"\n",
        "        \"IHB5cjphdmFuemFkbyA7DQogICAgcHllZHU6cGVydGVuZWNlQVRlbWEgcHlyOlRfZnVuY2lvbmFsIDsNCiAgICBweWVkdTpyZXF1\"\n",
        "        \"aWVyZVByZXJyZXF1aXNpdG8gcHlyOmNsb3N1cmUsDQogICAgICAgIHB5cjpmdW5jaW9uX29yZGVuX3N1cGVyaW9yIDsNCiAgICBw\"\n",
        "        \"eWVkdTp0aWVuZURpZmljdWx0YWQgNSAuDQoNCnB5cjplal9idXNxdWVkYSBhIHB5ZWR1OkVqZXJjaWNpbyA7DQogICAgcmRmczps\"\n",
        "        \"YWJlbCAiQmluYXJ5IHNlYXJjaCBvbiBhIHNvcnRlZCBsaXN0IkBlbiwNCiAgICAgICAgIkLDunNxdWVkYSBiaW5hcmlhIHNvYnJl\"\n",
        "        \"IGxpc3RhIG9yZGVuYWRhIkBlcyA7DQogICAgcHllZHU6Y3VicmVDb25jZXB0byBweXI6YnVjbGVfd2hpbGUsDQogICAgICAgIHB5\"\n",
        "        \"cjpidXNxdWVkYV9iaW5hcmlhLA0KICAgICAgICBweXI6aW5kZXhhY2lvbiA7DQogICAgcHllZHU6dGllbmVEaWZpY3VsdGFkIDQg\"\n",
        "        \"Ow0KICAgIHB5ZWR1OnRpZW5lRW51bmNpYWRvICJJbXBsZW1lbnRhIGxhIGLDunNxdWVkYSBiaW5hcmlhIHNvYnJlIHVuYSBsaXN0\"\n",
        "        \"YSBvcmRlbmFkYSB5IGRldnVlbHZlIGVsIMOtbmRpY2UgZGVsIGVsZW1lbnRvLiJAZXMgLg0KDQpweXI6ZXhjZXBjaW9uIGEgcHll\"\n",
        "        \"ZHU6RXN0cnVjdHVyYURlQ29udHJvbCA7DQogICAgcmRmczpsYWJlbCAiRXhjZXB0aW9uIkBlbiwNCiAgICAgICAgIkV4Y2VwY2nD\"\n",
        "        \"s24iQGVzIDsNCiAgICBza29zOmV4YWN0TWF0Y2ggd2Q6UTQ3MTc0OCA7DQogICAgcHllZHU6cGVydGVuZWNlQVRlbWEgcHlyOlRf\"\n",
        "        \"ZXhjZXBjaW9uZXMgOw0KICAgIHB5ZWR1OnJlcXVpZXJlUHJlcnJlcXVpc2l0byBweXI6Y29uZGljaW9uYWwgOw0KICAgIHB5ZWR1\"\n",
        "        \"OnRpZW5lRGlmaWN1bHRhZCAzIC4NCg0KcHlyOmZ1bmNpb25fb3JkZW5fc3VwZXJpb3IgYSBweWVkdTpQcmluY2lwaW9UcmFuc3Zl\"\n",
        "        \"cnNhbCA7DQogICAgcmRmczpsYWJlbCAiSGlnaGVyLW9yZGVyIGZ1bmN0aW9ucyJAZW4sDQogICAgICAgICJGdW5jaW9uZXMgZGUg\"\n",
        "        \"b3JkZW4gc3VwZXJpb3IiQGVzIDsNCiAgICBweWVkdTphTml2ZWxEb21pbmlvIHB5cjphdmFuemFkbyA7DQogICAgcHllZHU6cGVy\"\n",
        "        \"dGVuZWNlQVRlbWEgcHlyOlRfZnVuY2lvbmFsIDsNCiAgICBweWVkdTpyZXF1aWVyZVByZXJyZXF1aXNpdG8gcHlyOmZ1bmNpb24g\"\n",
        "        \"Ow0KICAgIHB5ZWR1OnRpZW5lRGlmaWN1bHRhZCA0IC4NCg0KcHlyOml0ZXJhYmxlcyBhIHB5ZWR1OlByaW5jaXBpb1RyYW5zdmVy\"\n",
        "        \"c2FsIDsNCiAgICByZGZzOmxhYmVsICJJdGVyYWJsZXMiQGVuLA0KICAgICAgICAiSXRlcmFibGVzIkBlcyA7DQogICAgcHllZHU6\"\n",
        "        \"YU5pdmVsRG9taW5pbyBweXI6YmFzaWNvIDsNCiAgICBweWVkdTpwZXJ0ZW5lY2VBVGVtYSBweXI6VF9lc3RydWN0dXJhcyA7DQog\"\n",
        "        \"ICAgcHllZHU6cmVxdWllcmVQcmVycmVxdWlzaXRvIHB5cjpsaXN0YSA7DQogICAgcHllZHU6dGllbmVEaWZpY3VsdGFkIDIgLg0K\"\n",
        "        \"DQpweWVkdTpFdmFsdWFjaW9uRGVDb25jZXB0byBhIG93bDpDbGFzcyA7DQogICAgcmRmczpsYWJlbCAiQ29uY2VwdCBhc3Nlc3Nt\"\n",
        "        \"ZW50IG9jY3VycmVuY2UiQGVuLA0KICAgICAgICAiRXZhbHVhY2nDs24gZGUgY29uY2VwdG8iQGVzIDsNCiAgICByZGZzOmNvbW1l\"\n",
        "        \"bnQgIk5vZG8gaW50ZXJtZWRpbyBxdWUgcmVpZmljYSBsYSByZWxhY2nDs24gTi1hcmlhIChlamVyY2ljaW8sIGNvbmNlcHRvLCBw\"\n",
        "        \"ZXNvLCBuaXZlbCkgc2luIHBlcmRlciBpbmZvcm1hY2nDs24sIHNlZ8O6biBlbCBwYXRyw7NuIGRlIHJlbGFjaW9uZXMgTi1hcmlh\"\n",
        "        \"cyBkZWwgbWF0ZXJpYWwgZG9jZW50ZS4iQGVzIDsNCiAgICByZGZzOnN1YkNsYXNzT2YgcHllZHU6RW50aWRhZEVkdWNhdGl2YSAu\"\n",
        "        \"DQoNCnB5cjpUX2NvbmN1cnJlbmNpYSBhIHB5ZWR1OlRlbWEgOw0KICAgIHJkZnM6bGFiZWwgIkNvbmN1cnJlbmN5IkBlbiwNCiAg\"\n",
        "        \"ICAgICAgIkNvbmN1cnJlbmNpYSJAZXMgLg0KDQpweXI6VF9leGNlcGNpb25lcyBhIHB5ZWR1OlRlbWEgOw0KICAgIHJkZnM6bGFi\"\n",
        "        \"ZWwgIkV4Y2VwdGlvbnMiQGVuLA0KICAgICAgICAiRXhjZXBjaW9uZXMiQGVzIC4NCg0KcHlyOlRfZmljaGVyb3MgYSBweWVkdTpU\"\n",
        "        \"ZW1hIDsNCiAgICByZGZzOmxhYmVsICJGaWxlcyBhbmQgSS9PIkBlbiwNCiAgICAgICAgIkZpY2hlcm9zIHkgRS9TIkBlcyAuDQoN\"\n",
        "        \"CnB5cjpUX2Z1bmRhbWVudG9zIGEgcHllZHU6VGVtYSA7DQogICAgcmRmczpsYWJlbCAiRnVuZGFtZW50YWxzIkBlbiwNCiAgICAg\"\n",
        "        \"ICAgIkZ1bmRhbWVudG9zIkBlcyAuDQoNCnB5cjpUX3N0cmluZ3MgYSBweWVkdTpUZW1hIDsNCiAgICByZGZzOmxhYmVsICJTdHJp\"\n",
        "        \"bmdzIkBlbiwNCiAgICAgICAgIkNhZGVuYXMgZGUgdGV4dG8iQGVzIC4NCg0KcHlyOlRfdGVzdGluZyBhIHB5ZWR1OlRlbWEgOw0K\"\n",
        "        \"ICAgIHJkZnM6bGFiZWwgIlRlc3RpbmcgYW5kIHN0eWxlIkBlbiwNCiAgICAgICAgIlBydWViYXMgeSBlc3RpbG8iQGVzIC4NCg0K\"\n",
        "        \"cHlyOmVzdF9hbGljaWEgYSBmb2FmOlBlcnNvbiwNCiAgICAgICAgcHllZHU6RXN0dWRpYW50ZSA7DQogICAgcmRmczpsYWJlbCAi\"\n",
        "        \"QWxpY2UiQGVuLA0KICAgICAgICAiQWxpY2lhIkBlcyA7DQogICAgZm9hZjpuYW1lICJBbGljaWEiIDsNCiAgICBweWVkdTpkb21p\"\n",
        "        \"bmFDb25jZXB0byBweXI6YnVjbGVfZm9yLA0KICAgICAgICBweXI6ZnVuY2lvbiwNCiAgICAgICAgcHlyOnZhcmlhYmxlIC4NCg0K\"\n",
        "        \"cHlyOmVzdF9ib3JqYSBhIGZvYWY6UGVyc29uLA0KICAgICAgICBweWVkdTpFc3R1ZGlhbnRlIDsNCiAgICByZGZzOmxhYmVsICJC\"\n",
        "        \"b3JqYSJAZW4sDQogICAgICAgICJCb3JqYSJAZXMgOw0KICAgIGZvYWY6bmFtZSAiQm9yamEiIDsNCiAgICBweWVkdTpkb21pbmFD\"\n",
        "        \"b25jZXB0byBweXI6Y29uZGljaW9uYWwsDQogICAgICAgIHB5cjp2YXJpYWJsZSAuDQoNCnB5cjp0dXBsYSBhIHB5ZWR1OkVzdHJ1\"\n",
        "        \"Y3R1cmFEZURhdG9zIDsNCiAgICByZGZzOmxhYmVsICJUdXBsZSJAZW4sDQogICAgICAgICJUdXBsYSJAZXMgOw0KICAgIHNrb3M6\"\n",
        "        \"ZXhhY3RNYXRjaCB3ZDpRMjg3OTA3MiA7DQogICAgc2tvczpyZWxhdGVkIHB5cjpsaXN0YSA7DQogICAgcHllZHU6Y29udHJhc3Rh\"\n",
        "        \"Q29uIHB5cjpsaXN0YSA7DQogICAgcHllZHU6cGVydGVuZWNlQVRlbWEgcHlyOlRfZXN0cnVjdHVyYXMgOw0KICAgIHB5ZWR1OnRp\"\n",
        "        \"ZW5lRGlmaWN1bHRhZCAyIC4NCg0KcHllZHU6RXN0dWRpYW50ZSBhIG93bDpDbGFzcyA7DQogICAgcmRmczpsYWJlbCAiU3R1ZGVu\"\n",
        "        \"dCJAZW4sDQogICAgICAgICJFc3R1ZGlhbnRlIkBlcyA7DQogICAgcmRmczpzdWJDbGFzc09mIHB5ZWR1OkVudGlkYWRFZHVjYXRp\"\n",
        "        \"dmEgLg0KDQpweXI6VF9mdW5jaW9uZXMgYSBweWVkdTpUZW1hIDsNCiAgICByZGZzOmxhYmVsICJGdW5jdGlvbnMiQGVuLA0KICAg\"\n",
        "        \"ICAgICAiRnVuY2lvbmVzIkBlcyAuDQoNCnB5cjpjb25kaWNpb25hbCBhIHB5ZWR1OkVzdHJ1Y3R1cmFEZUNvbnRyb2wgOw0KICAg\"\n",
        "        \"IHJkZnM6bGFiZWwgIkNvbmRpdGlvbmFsIChpZikiQGVuLA0KICAgICAgICAiQ29uZGljaW9uYWwgKGlmKSJAZXMgOw0KICAgIHB5\"\n",
        "        \"ZWR1OnBlcnRlbmVjZUFUZW1hIHB5cjpUX2NvbnRyb2wgOw0KICAgIHB5ZWR1OnJlcXVpZXJlUHJlcnJlcXVpc2l0byBweXI6dGlw\"\n",
        "        \"b19ib29sIDsNCiAgICBweWVkdTp0aWVuZURpZmljdWx0YWQgMSAuDQoNCnB5ZWR1OkVudmlvRXN0dWRpYW50ZSBhIG93bDpDbGFz\"\n",
        "        \"cyA7DQogICAgcmRmczpsYWJlbCAiU3R1ZGVudCBzdWJtaXNzaW9uIkBlbiwNCiAgICAgICAgIkVudsOtbyBkZSBlc3R1ZGlhbnRl\"\n",
        "        \"IkBlcyA7DQogICAgcmRmczpjb21tZW50ICJFbnRyZWdhIGRlIGPDs2RpZ28gZGUgdW4gZXN0dWRpYW50ZSBlbiByZXNwdWVzdGEg\"\n",
        "        \"YSB1biBlamVyY2ljaW8uIkBlcyA7DQogICAgcmRmczpzdWJDbGFzc09mIHB5ZWR1OkVudGlkYWRFZHVjYXRpdmEgLg0KDQpweWVk\"\n",
        "        \"dTpUaXBvRGVEYXRvIGEgb3dsOkNsYXNzIDsNCiAgICByZGZzOmxhYmVsICJEYXRhIHR5cGUiQGVuLA0KICAgICAgICAiVGlwbyBk\"\n",
        "        \"ZSBkYXRvIkBlcyA7DQogICAgcmRmczpzdWJDbGFzc09mIHB5ZWR1OkNvbmNlcHRvIC4NCg0KcHlyOmNsYXNlIGEgcHllZHU6UGFy\"\n",
        "        \"YWRpZ21hIDsNCiAgICByZGZzOmxhYmVsICJDbGFzcyJAZW4sDQogICAgICAgICJDbGFzZSJAZXMgOw0KICAgIHNrb3M6ZXhhY3RN\"\n",
        "        \"YXRjaCB3ZDpRNDQ3OTI0MiA7DQogICAgcHllZHU6cGVydGVuZWNlQVRlbWEgcHlyOlRfcG9vIDsNCiAgICBweWVkdTpyZXF1aWVy\"\n",
        "        \"ZVByZXJyZXF1aXNpdG8gcHlyOmZ1bmNpb24gOw0KICAgIHB5ZWR1OnRpZW5lRGlmaWN1bHRhZCAzIC4NCg0KcHlyOmNvbXByZW5z\"\n",
        "        \"aW9uX2xpc3RhcyBhIHB5ZWR1OkVzdHJ1Y3R1cmFEZUNvbnRyb2wgOw0KICAgIHJkZnM6bGFiZWwgIkxpc3QgY29tcHJlaGVuc2lv\"\n",
        "        \"biJAZW4sDQogICAgICAgICJDb21wcmVuc2nDs24gZGUgbGlzdGFzIkBlcyA7DQogICAgc2tvczpicm9hZGVyIHB5cjpidWNsZV9m\"\n",
        "        \"b3IgOw0KICAgIHNrb3M6ZXhhY3RNYXRjaCB3ZDpRNzk1MDY1IDsNCiAgICBza29zOm5hcnJvd2VyIHB5cjpjb21wcmVuc2lvbl9k\"\n",
        "        \"aWN0cywNCiAgICAgICAgcHlyOmNvbXByZW5zaW9uX3NldHMsDQogICAgICAgIHB5cjpleHByZXNpb25fZ2VuZXJhZG9yYSA7DQog\"\n",
        "        \"ICAgcHllZHU6YU5pdmVsRG9taW5pbyBweXI6YXZhbnphZG8gOw0KICAgIHB5ZWR1OnBlcnRlbmVjZUFUZW1hIHB5cjpUX2NvbnRy\"\n",
        "        \"b2wgOw0KICAgIHB5ZWR1OnJlcXVpZXJlUHJlcnJlcXVpc2l0byBweXI6bGlzdGEgOw0KICAgIHB5ZWR1OnRpZW5lRGlmaWN1bHRh\"\n",
        "        \"ZCA0IDsNCiAgICBweWVkdTp0aWVuZUVqZW1wbG9Db2RpZ28gInlzID0gW3gqeCBmb3IgeCBpbiB4cyBpZiB4ID4gMF0iIC4NCg0K\"\n",
        "        \"cHlyOmRpY2Npb25hcmlvIGEgcHllZHU6RXN0cnVjdHVyYURlRGF0b3MgOw0KICAgIHJkZnM6bGFiZWwgIkRpY3Rpb25hcnkiQGVu\"\n",
        "        \"LA0KICAgICAgICAiRGljY2lvbmFyaW8iQGVzIDsNCiAgICBza29zOmV4YWN0TWF0Y2ggd2Q6UTgwNTg1IDsNCiAgICBweWVkdTpw\"\n",
        "        \"ZXJ0ZW5lY2VBVGVtYSBweXI6VF9lc3RydWN0dXJhcyA7DQogICAgcHllZHU6dGllbmVEaWZpY3VsdGFkIDIgLg0KDQpweXI6aW1w\"\n",
        "        \"b3J0X21vZCBhIHB5ZWR1OlByaW5jaXBpb1RyYW5zdmVyc2FsIDsNCiAgICByZGZzOmxhYmVsICJpbXBvcnQiQGVuLA0KICAgICAg\"\n",
        "        \"ICAiaW1wb3J0IkBlcyA7DQogICAgcHllZHU6YU5pdmVsRG9taW5pbyBweXI6YmFzaWNvIDsNCiAgICBweWVkdTpwZXJ0ZW5lY2VB\"\n",
        "        \"VGVtYSBweXI6VF9tb2R1bG9zIDsNCiAgICBweWVkdTp0aWVuZURpZmljdWx0YWQgMiAuDQoNCnB5cjp0aXBvX3N0ciBhIHB5ZWR1\"\n",
        "        \"OlRpcG9EZURhdG8gOw0KICAgIHJkZnM6bGFiZWwgIlN0cmluZyAoc3RyKSJAZW4sDQogICAgICAgICJDYWRlbmEgKHN0cikiQGVz\"\n",
        "        \"IDsNCiAgICBweWVkdTpwZXJ0ZW5lY2VBVGVtYSBweXI6VF9mdW5kYW1lbnRvcyA7DQogICAgcHllZHU6dGllbmVEaWZpY3VsdGFk\"\n",
        "        \"IDEgLg0KDQpweXI6aW5kZXhhY2lvbiBhIHB5ZWR1OlByaW5jaXBpb1RyYW5zdmVyc2FsIDsNCiAgICByZGZzOmxhYmVsICJJbmRl\"\n",
        "        \"eGluZyJAZW4sDQogICAgICAgICJJbmRleGFjacOzbiJAZXMgOw0KICAgIHNrb3M6bmFycm93ZXIgcHlyOmluZGV4YWNpb25fbmVn\"\n",
        "        \"YXRpdmEsDQogICAgICAgIHB5cjpzbGljaW5nIDsNCiAgICBweWVkdTpwZXJ0ZW5lY2VBVGVtYSBweXI6VF9lc3RydWN0dXJhcyA7\"\n",
        "        \"DQogICAgcHllZHU6cmVxdWllcmVQcmVycmVxdWlzaXRvIHB5cjpsaXN0YSA7DQogICAgcHllZHU6c2VBcGxpY2FBIHB5cjpsaXN0\"\n",
        "        \"YSA7DQogICAgcHllZHU6dGllbmVEaWZpY3VsdGFkIDIgLg0KDQpweXI6bWV0b2RvIGEgcHllZHU6UGFyYWRpZ21hIDsNCiAgICBy\"\n",
        "        \"ZGZzOmxhYmVsICJNZXRob2QiQGVuLA0KICAgICAgICAiTcOpdG9kbyJAZXMgOw0KICAgIHNrb3M6bmFycm93ZXIgcHlyOmluaXRf\"\n",
        "        \"bWV0aG9kLA0KICAgICAgICBweXI6bWV0b2RvX2NsYXNlLA0KICAgICAgICBweXI6bWV0b2RvX2VzdGF0aWNvIDsNCiAgICBweWVk\"\n",
        "        \"dTphTml2ZWxEb21pbmlvIHB5cjppbnRlcm1lZGlvIDsNCiAgICBweWVkdTpwZXJ0ZW5lY2VBVGVtYSBweXI6VF9wb28gOw0KICAg\"\n",
        "        \"IHB5ZWR1OnJlcXVpZXJlUHJlcnJlcXVpc2l0byBweXI6Y2xhc2UsDQogICAgICAgIHB5cjpmdW5jaW9uIDsNCiAgICBweWVkdTp0\"\n",
        "        \"aWVuZURpZmljdWx0YWQgMyAuDQoNCnB5cjpoZXJlbmNpYSBhIHB5ZWR1OlBhcmFkaWdtYSA7DQogICAgcmRmczpsYWJlbCAiSW5o\"\n",
        "        \"ZXJpdGFuY2UiQGVuLA0KICAgICAgICAiSGVyZW5jaWEiQGVzIDsNCiAgICBza29zOmV4YWN0TWF0Y2ggd2Q6UTIxMjU0MiA7DQog\"\n",
        "        \"ICAgc2tvczpuYXJyb3dlciBweXI6aGVyZW5jaWFfbXVsdGlwbGUgOw0KICAgIHNrb3M6cmVsYXRlZCBweXI6Y29tcG9zaWNpb24g\"\n",
        "        \"Ow0KICAgIHB5ZWR1OnBlcnRlbmVjZUFUZW1hIHB5cjpUX3BvbyA7DQogICAgcHllZHU6cmVxdWllcmVQcmVycmVxdWlzaXRvIHB5\"\n",
        "        \"cjpjbGFzZSA7DQogICAgcHllZHU6dGllbmVEaWZpY3VsdGFkIDQgLg0KDQpweWVkdTpFamVyY2ljaW8gYSBvd2w6Q2xhc3MgOw0K\"\n",
        "        \"ICAgIHJkZnM6bGFiZWwgIkV4ZXJjaXNlIG9yIGFzc2lnbm1lbnQiQGVuLA0KICAgICAgICAiRWplcmNpY2lvIG8gZW51bmNpYWRv\"\n",
        "        \"IkBlcyA7DQogICAgcmRmczpzdWJDbGFzc09mIHB5ZWR1OkVudGlkYWRFZHVjYXRpdmEgLg0KDQpweXI6VF9tb2R1bG9zIGEgcHll\"\n",
        "        \"ZHU6VGVtYSA7DQogICAgcmRmczpsYWJlbCAiTW9kdWxlcyBhbmQgcGFja2FnZXMiQGVuLA0KICAgICAgICAiTcOzZHVsb3MgeSBw\"\n",
        "        \"YXF1ZXRlcyJAZXMgLg0KDQpweWVkdTpGdW5jaW9uSW50ZWdyYWRhIGEgb3dsOkNsYXNzIDsNCiAgICByZGZzOmxhYmVsICJCdWls\"\n",
        "        \"dC1pbiBmdW5jdGlvbiJAZW4sDQogICAgICAgICJGdW5jacOzbiBpbnRlZ3JhZGEiQGVzIDsNCiAgICByZGZzOnN1YkNsYXNzT2Yg\"\n",
        "        \"cHllZHU6Q29uY2VwdG8gLg0KDQpweWVkdTpFbnRpZGFkRWR1Y2F0aXZhIGEgb3dsOkNsYXNzIDsNCiAgICByZGZzOmxhYmVsICJF\"\n",
        "        \"ZHVjYXRpb25hbCBlbnRpdHkiQGVuLA0KICAgICAgICAiRW50aWRhZCBlZHVjYXRpdmEiQGVzIDsNCiAgICByZGZzOmNvbW1lbnQg\"\n",
        "        \"IlN1cGVyY2xhc2UgYWJzdHJhY3RhIGRlIHRvZGFzIGxhcyBlbnRpZGFkZXMgZGVsIGdyYWZvIGVkdWNhdGl2by4iQGVzIC4NCg0K\"\n",
        "        \"cHlyOlRfYWxnb3JpdG1vcyBhIHB5ZWR1OlRlbWEgOw0KICAgIHJkZnM6bGFiZWwgIkFsZ29yaXRobXMiQGVuLA0KICAgICAgICAi\"\n",
        "        \"QWxnb3JpdG1vcyJAZXMgLg0KDQpweXI6cmVjdXJzaW9uIGEgcHllZHU6UHJpbmNpcGlvVHJhbnN2ZXJzYWwgOw0KICAgIHJkZnM6\"\n",
        "        \"bGFiZWwgIlJlY3Vyc2lvbiJAZW4sDQogICAgICAgICJSZWN1cnNpw7NuIkBlcyA7DQogICAgcmRmczpjb21tZW50ICJEZWZpbmlj\"\n",
        "        \"acOzbiBkZSB1bmEgZnVuY2nDs24gZW4gdMOpcm1pbm9zIGRlIHPDrSBtaXNtYS4iQGVzIDsNCiAgICBza29zOmV4YWN0TWF0Y2gg\"\n",
        "        \"d2Q6UTI2NDE2NCA7DQogICAgc2tvczpuYXJyb3dlciBweXI6cmVjdXJzaW9uX2NvbGEgOw0KICAgIHNrb3M6cHJlZkxhYmVsICJS\"\n",
        "        \"ZWN1cnNpw7NuIkBlcyA7DQogICAgc2tvczpyZWxhdGVkIHB5cjpidWNsZV9mb3IgOw0KICAgIHB5ZWR1OmFOaXZlbERvbWluaW8g\"\n",
        "        \"cHlyOmF2YW56YWRvIDsNCiAgICBweWVkdTpjb250cmFzdGFDb24gcHlyOmJ1Y2xlX2ZvciA7DQogICAgcHllZHU6cGVydGVuZWNl\"\n",
        "        \"QVRlbWEgcHlyOlRfcmVjdXJzaW9uIDsNCiAgICBweWVkdTpyZXF1aWVyZVByZXJyZXF1aXNpdG8gcHlyOmZ1bmNpb24gOw0KICAg\"\n",
        "        \"IHB5ZWR1OnRpZW5lRGlmaWN1bHRhZCA0IC4NCg0KcHlyOlRfY29udHJvbCBhIHB5ZWR1OlRlbWEgOw0KICAgIHJkZnM6bGFiZWwg\"\n",
        "        \"IkNvbnRyb2wgZmxvdyJAZW4sDQogICAgICAgICJDb250cm9sIGRlIGZsdWpvIkBlcyAuDQoNCnB5cjpUX2Z1bmNpb25hbCBhIHB5\"\n",
        "        \"ZWR1OlRlbWEgOw0KICAgIHJkZnM6bGFiZWwgIkZ1bmN0aW9uYWwgcHJvZ3JhbW1pbmciQGVuLA0KICAgICAgICAiUHJvZ3JhbWFj\"\n",
        "        \"acOzbiBmdW5jaW9uYWwiQGVzIC4NCg0KcHlyOmJ1Y2xlX2ZvciBhIHB5ZWR1OkVzdHJ1Y3R1cmFEZUNvbnRyb2wgOw0KICAgIHJk\"\n",
        "        \"ZnM6bGFiZWwgIkZvciBsb29wIkBlbiwNCiAgICAgICAgIkJ1Y2xlIGZvciJAZXMgOw0KICAgIHNrb3M6bmFycm93ZXIgcHlyOmNv\"\n",
        "        \"bXByZW5zaW9uX2xpc3RhcyA7DQogICAgc2tvczpwcmVmTGFiZWwgIkJ1Y2xlIGZvciJAZXMgOw0KICAgIHNrb3M6cmVsYXRlZCBw\"\n",
        "        \"eXI6cmVjdXJzaW9uIDsNCiAgICBweWVkdTphTml2ZWxEb21pbmlvIHB5cjpiYXNpY28gOw0KICAgIHB5ZWR1OmVzUHJlcnJlcXVp\"\n",
        "        \"c2l0b0RlIHB5cjpjb21wcmVuc2lvbl9saXN0YXMgOw0KICAgIHB5ZWR1OnBlcnRlbmVjZUFUZW1hIHB5cjpUX2NvbnRyb2wgOw0K\"\n",
        "        \"ICAgIHB5ZWR1OnRpZW5lRGlmaWN1bHRhZCAyIDsNCiAgICBweWVkdTp0aWVuZUVqZW1wbG9Db2RpZ28gIiIiZm9yIHggaW4geHM6\"\n",
        "        \"DQogICAgcHJpbnQoeCkiIiIgLg0KDQpweWVkdTpFc3RydWN0dXJhRGVEYXRvcyBhIG93bDpDbGFzcyA7DQogICAgcmRmczpsYWJl\"\n",
        "        \"bCAiRGF0YSBzdHJ1Y3R1cmUiQGVuLA0KICAgICAgICAiRXN0cnVjdHVyYSBkZSBkYXRvcyJAZXMgOw0KICAgIHJkZnM6c3ViQ2xh\"\n",
        "        \"c3NPZiBweWVkdTpDb25jZXB0byAuDQoNCnB5ZWR1OkV2YWx1YWNpb25BY3RpdmlkYWQgYSBvd2w6Q2xhc3MgOw0KICAgIHJkZnM6\"\n",
        "        \"bGFiZWwgIkFjdGl2aXR5IGFzc2Vzc21lbnQiQGVuLA0KICAgICAgICAiRXZhbHVhY2nDs24gZGUgYWN0aXZpZGFkIkBlcyA7DQog\"\n",
        "        \"ICAgcmRmczpzdWJDbGFzc09mIHB5ZWR1OkVudGlkYWRFZHVjYXRpdmEgLg0KDQpweXI6VF90aXBvcyBhIHB5ZWR1OlRlbWEgOw0K\"\n",
        "        \"ICAgIHJkZnM6bGFiZWwgIlR5cGUgc3lzdGVtIkBlbiwNCiAgICAgICAgIlNpc3RlbWEgZGUgdGlwb3MiQGVzIC4NCg0KcHllZHU6\"\n",
        "        \"TW9kdWxvTGlicmVyaWEgYSBvd2w6Q2xhc3MgOw0KICAgIHJkZnM6bGFiZWwgIk1vZHVsZSBvciBsaWJyYXJ5IkBlbiwNCiAgICAg\"\n",
        "        \"ICAgIk3Ds2R1bG8gbyBsaWJyZXLDrWEiQGVzIDsNCiAgICByZGZzOnN1YkNsYXNzT2YgcHllZHU6Q29uY2VwdG8gLg0KDQpweXI6\"\n",
        "        \"ZnVuY2lvbiBhIHB5ZWR1OlByaW5jaXBpb1RyYW5zdmVyc2FsIDsNCiAgICByZGZzOmxhYmVsICJGdW5jdGlvbiJAZW4sDQogICAg\"\n",
        "        \"ICAgICJGdW5jacOzbiJAZXMgOw0KICAgIHNrb3M6cHJlZkxhYmVsICJGdW5jacOzbiJAZXMgOw0KICAgIHB5ZWR1OmVzUHJlcnJl\"\n",
        "        \"cXVpc2l0b0RlIHB5cjpyZWN1cnNpb24gOw0KICAgIHB5ZWR1OnBlcnRlbmVjZUFUZW1hIHB5cjpUX2Z1bmNpb25lcyA7DQogICAg\"\n",
        "        \"cHllZHU6dGllbmVEaWZpY3VsdGFkIDIgOw0KICAgIHB5ZWR1OnRpZW5lRWplbXBsb0NvZGlnbyAiIiJkZWYgZih4KToNCiAgICBy\"\n",
        "        \"ZXR1cm4geCArIDEiIiIgLg0KDQpweWVkdTpUZW1hIGEgb3dsOkNsYXNzIDsNCiAgICByZGZzOmxhYmVsICJDdXJyaWN1bGFyIHRv\"\n",
        "        \"cGljIkBlbiwNCiAgICAgICAgIlRlbWEgY3VycmljdWxhciJAZXMgOw0KICAgIHJkZnM6Y29tbWVudCAiQWdydXBhY2nDs24gY3Vy\"\n",
        "        \"cmljdWxhciBkZSBjb25jZXB0b3MgKHVuaWRhZCBkaWTDoWN0aWNhKS4iQGVzIDsNCiAgICByZGZzOnN1YkNsYXNzT2YgcHllZHU6\"\n",
        "        \"RW50aWRhZEVkdWNhdGl2YSAuDQoNCnB5cjpUX2VzdHJ1Y3R1cmFzIGEgcHllZHU6VGVtYSA7DQogICAgcmRmczpsYWJlbCAiRGF0\"\n",
        "        \"YSBzdHJ1Y3R1cmVzIkBlbiwNCiAgICAgICAgIkVzdHJ1Y3R1cmFzIGRlIGRhdG9zIkBlcyAuDQoNCnB5ZWR1OkVycm9yQ29uY2Vw\"\n",
        "        \"dHVhbCBhIG93bDpDbGFzcyA7DQogICAgcmRmczpsYWJlbCAiTWlzY29uY2VwdGlvbiJAZW4sDQogICAgICAgICJFcnJvciBjb25j\"\n",
        "        \"ZXB0dWFsIChtaXNjb25jZXB0aW9uKSJAZXMgOw0KICAgIHJkZnM6Y29tbWVudCAiTWFsZW50ZW5kaWRvIHJlY3VycmVudGUgZG9j\"\n",
        "        \"dW1lbnRhZG8gZW4gbGEgbGl0ZXJhdHVyYSBkZSBkaWTDoWN0aWNhIGRlIGxhIHByb2dyYW1hY2nDs24uIkBlcyA7DQogICAgcmRm\"\n",
        "        \"czpzdWJDbGFzc09mIHB5ZWR1OkVudGlkYWRFZHVjYXRpdmEgLg0KDQpweXI6bGlzdGEgYSBweWVkdTpFc3RydWN0dXJhRGVEYXRv\"\n",
        "        \"cyA7DQogICAgcmRmczpsYWJlbCAiTGlzdCJAZW4sDQogICAgICAgICJMaXN0YSJAZXMgOw0KICAgIHNrb3M6ZXhhY3RNYXRjaCB3\"\n",
        "        \"ZDpRMjc5NDggOw0KICAgIHNrb3M6bmFycm93ZXIgcHlyOmNvbGEsDQogICAgICAgIHB5cjpwaWxhIDsNCiAgICBza29zOnByZWZM\"\n",
        "        \"YWJlbCAiTGlzdGEiQGVzIDsNCiAgICBza29zOnJlbGF0ZWQgcHlyOmNvbmp1bnRvLA0KICAgICAgICBweXI6dHVwbGEgOw0KICAg\"\n",
        "        \"IHB5ZWR1OmFOaXZlbERvbWluaW8gcHlyOmJhc2ljbyA7DQogICAgcHllZHU6cGVydGVuZWNlQVRlbWEgcHlyOlRfZXN0cnVjdHVy\"\n",
        "        \"YXMgOw0KICAgIHB5ZWR1OnRpZW5lRGlmaWN1bHRhZCAyIDsNCiAgICBweWVkdTp0aWVuZUVqZW1wbG9Db2RpZ28gInhzID0gWzEs\"\n",
        "        \"IDIsIDNdIiAuDQoNCnB5cjpUX3BvbyBhIHB5ZWR1OlRlbWEgOw0KICAgIHJkZnM6bGFiZWwgIk9iamVjdC1vcmllbnRlZCBwcm9n\"\n",
        "        \"cmFtbWluZyJAZW4sDQogICAgICAgICJQcm9ncmFtYWNpw7NuIG9yaWVudGFkYSBhIG9iamV0b3MiQGVzIC4NCg0KcHllZHU6RXN0\"\n",
        "        \"cnVjdHVyYURlQ29udHJvbCBhIG93bDpDbGFzcyA7DQogICAgcmRmczpsYWJlbCAiQ29udHJvbCBzdHJ1Y3R1cmUiQGVuLA0KICAg\"\n",
        "        \"ICAgICAiRXN0cnVjdHVyYSBkZSBjb250cm9sIkBlcyA7DQogICAgcmRmczpzdWJDbGFzc09mIHB5ZWR1OkNvbmNlcHRvIC4NCg0K\"\n",
        "        \"cHllZHU6Q29uY2VwdG8gYSBvd2w6Q2xhc3MgOw0KICAgIHJkZnM6bGFiZWwgIlByb2dyYW1taW5nIGNvbmNlcHQiQGVuLA0KICAg\"\n",
        "        \"ICAgICAiQ29uY2VwdG8gZGUgcHJvZ3JhbWFjacOzbiJAZXMgOw0KICAgIHJkZnM6Y29tbWVudCAiVW5pZGFkIGRlIGNvbm9jaW1p\"\n",
        "        \"ZW50byBkZWwgZG9taW5pbyAocC4gZWouIHJlY3Vyc2nDs24sIGJ1Y2xlIGZvciwgbXV0YWJpbGlkYWQpLiBBbCBzZXIgc3ViY2xh\"\n",
        "        \"c2UgZGUgc2tvczpDb25jZXB0IGFkbWl0ZSBsYSByZWQgY29uY2VwdHVhbCBza29zOmJyb2FkZXIvbmFycm93ZXIvcmVsYXRlZC4i\"\n",
        "        \"QGVzIDsNCiAgICByZGZzOnN1YkNsYXNzT2Ygc2tvczpDb25jZXB0LA0KICAgICAgICBweWVkdTpFbnRpZGFkRWR1Y2F0aXZhIC4N\"\n",
        "        \"Cg0KcHllZHU6UGFyYWRpZ21hIGEgb3dsOkNsYXNzIDsNCiAgICByZGZzOmxhYmVsICJQcm9ncmFtbWluZyBwYXJhZGlnbSJAZW4s\"\n",
        "        \"DQogICAgICAgICJQYXJhZGlnbWEgZGUgcHJvZ3JhbWFjacOzbiJAZXMgOw0KICAgIHJkZnM6c3ViQ2xhc3NPZiBweWVkdTpDb25j\"\n",
        "        \"ZXB0byAuDQoNCnB5cjpiYXNpY28gYSBweWVkdTpOaXZlbERvbWluaW8gOw0KICAgIHJkZnM6bGFiZWwgImJhc2ljIkBlbiwNCiAg\"\n",
        "        \"ICAgICAgImLDoXNpY28iQGVzIDsNCiAgICBza29zOm5vdGF0aW9uICIxIiA7DQogICAgc2tvczpwcmVmTGFiZWwgImJhc2ljIkBl\"\n",
        "        \"biwNCiAgICAgICAgImLDoXNpY28iQGVzIC4NCg0KcHlyOmludGVybWVkaW8gYSBweWVkdTpOaXZlbERvbWluaW8gOw0KICAgIHJk\"\n",
        "        \"ZnM6bGFiZWwgImludGVybWVkaWF0ZSJAZW4sDQogICAgICAgICJpbnRlcm1lZGlvIkBlcyA7DQogICAgc2tvczpub3RhdGlvbiAi\"\n",
        "        \"MiIgOw0KICAgIHNrb3M6cHJlZkxhYmVsICJpbnRlcm1lZGlhdGUiQGVuLA0KICAgICAgICAiaW50ZXJtZWRpbyJAZXMgLg0KDQpw\"\n",
        "        \"eWVkdTpQcmluY2lwaW9UcmFuc3ZlcnNhbCBhIG93bDpDbGFzcyA7DQogICAgcmRmczpsYWJlbCAiQ3Jvc3MtY3V0dGluZyBwcmlu\"\n",
        "        \"Y2lwbGUiQGVuLA0KICAgICAgICAiUHJpbmNpcGlvIHRyYW5zdmVyc2FsIkBlcyA7DQogICAgcmRmczpzdWJDbGFzc09mIHB5ZWR1\"\n",
        "        \"OkNvbmNlcHRvIC4NCg0KcHlyOmF2YW56YWRvIGEgcHllZHU6Tml2ZWxEb21pbmlvIDsNCiAgICByZGZzOmxhYmVsICJhZHZhbmNl\"\n",
        "        \"ZCJAZW4sDQogICAgICAgICJhdmFuemFkbyJAZXMgOw0KICAgIHNrb3M6bm90YXRpb24gIjMiIDsNCiAgICBza29zOnByZWZMYWJl\"\n",
        "        \"bCAiYWR2YW5jZWQiQGVuLA0KICAgICAgICAiYXZhbnphZG8iQGVzIC4NCg0KW10gYSBvd2w6QWxsRGlzam9pbnRDbGFzc2VzIDsN\"\n",
        "        \"CiAgICBvd2w6bWVtYmVycyAoIHB5ZWR1OkNvbmNlcHRvIHB5ZWR1OlRlbWEgcHllZHU6Q29tcGV0ZW5jaWEgcHllZHU6RWplcmNp\"\n",
        "        \"Y2lvIHB5ZWR1OkVudmlvRXN0dWRpYW50ZSBweWVkdTpFcnJvckNvbmNlcHR1YWwgcHllZHU6UmVjdXJzbyBweWVkdTpFc3R1ZGlh\"\n",
        "        \"bnRlIHB5ZWR1OlJ1dGFBcHJlbmRpemFqZSBweWVkdTpFdmFsdWFjaW9uRGVDb25jZXB0byApIC4NCg0K\"\n",
        "    ),\n",
        "    'ontologia/shapes-ekg.ttl': (\n",
        "        \"QHByZWZpeCBzaDogICAgICA8aHR0cDovL3d3dy53My5vcmcvbnMvc2hhY2wjPiAuDQpAcHJlZml4IHB5ZWR1OiAgIDxodHRwczov\"\n",
        "        \"L3czaWQub3JnL2VrZy1weXRob24vc2NoZW1hIz4gLg0KQHByZWZpeCByZGZzOiAgICA8aHR0cDovL3d3dy53My5vcmcvMjAwMC8w\"\n",
        "        \"MS9yZGYtc2NoZW1hIz4gLg0KQHByZWZpeCBkY3Rlcm1zOiA8aHR0cDovL3B1cmwub3JnL2RjL3Rlcm1zLz4gLg0KQHByZWZpeCB4\"\n",
        "        \"c2Q6ICAgICA8aHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjPiAuDQpAcHJlZml4IGZvYWY6ICAgIDxodHRwOi8veG1s\"\n",
        "        \"bnMuY29tL2ZvYWYvMC4xLz4gLg0KQHByZWZpeCBvd2w6ICAgICA8aHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjPiAuDQpA\"\n",
        "        \"cHJlZml4IHNrb3M6ICAgIDxodHRwOi8vd3d3LnczLm9yZy8yMDA0LzAyL3Nrb3MvY29yZSM+IC4NCg0KIyMjIyMjIyMjIyMjIyMj\"\n",
        "        \"IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiMgIFNIQUNMIOKAlCBWYWxpZGFjacOz\"\n",
        "        \"biBkZSBmb3JtYSBkZWwgRUtHLVB5dGhvbg0KIyAgKGNvcnJlc3BvbmRlIGEgbGEgInRhcmVhIGRlIHZhbGlkYWNpw7NuIGRlIGxh\"\n",
        "        \"IGZvcm1hIGRlbCBncmFmbyINCiMgICBxdWUgZWwgcHJvZmVzb3IgZGVzY3JpYmUgZW4gbGEgU2VzacOzbiAzOiBjb21wcm9iYXIg\"\n",
        "        \"cXVlIG5vIGZhbHRlbg0KIyAgIGVubGFjZXMgb2JsaWdhdG9yaW9zKS4gU2UgdmFsaWRhIHNvYnJlIGVsIGdyYWZvIGNvbiBpbmZl\"\n",
        "        \"cmVuY2lhDQojICAgUkRGUywgZGUgbW9kbyBxdWUgc2g6dGFyZ2V0Q2xhc3MgYWxjYW5jZSBsb3MgdGlwb3MgaW5mZXJpZG9zLg0K\"\n",
        "        \"IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCg0KcHllZHU6\"\n",
        "        \"Q29uY2VwdG9TaGFwZSBhIHNoOk5vZGVTaGFwZSA7DQogICAgc2g6dGFyZ2V0Q2xhc3MgcHllZHU6Q29uY2VwdG8gOw0KICAgIHNo\"\n",
        "        \"OnByb3BlcnR5IFsNCiAgICAgICAgc2g6cGF0aCByZGZzOmxhYmVsIDsNCiAgICAgICAgc2g6bWluQ291bnQgMSA7DQogICAgICAg\"\n",
        "        \"IHNoOm1lc3NhZ2UgIlRvZG8gY29uY2VwdG8gZGViZSB0ZW5lciBhbCBtZW5vcyB1bmEgZXRpcXVldGEgcmRmczpsYWJlbC4iQGVz\"\n",
        "        \"IF0gOw0KICAgIHNoOnByb3BlcnR5IFsNCiAgICAgICAgc2g6cGF0aCBweWVkdTpwZXJ0ZW5lY2VBVGVtYSA7DQogICAgICAgIHNo\"\n",
        "        \"Om1pbkNvdW50IDEgOw0KICAgICAgICBzaDpjbGFzcyBweWVkdTpUZW1hIDsNCiAgICAgICAgc2g6bWVzc2FnZSAiVG9kbyBjb25j\"\n",
        "        \"ZXB0byBkZWJlIHBlcnRlbmVjZXIgYWwgbWVub3MgYSB1biB0ZW1hLiJAZXMgXSA7DQogICAgc2g6cHJvcGVydHkgWw0KICAgICAg\"\n",
        "        \"ICBzaDpwYXRoIHB5ZWR1OnRpZW5lRGlmaWN1bHRhZCA7DQogICAgICAgIHNoOm1heENvdW50IDEgOw0KICAgICAgICBzaDpkYXRh\"\n",
        "        \"dHlwZSB4c2Q6aW50ZWdlciA7DQogICAgICAgIHNoOm1pbkluY2x1c2l2ZSAxIDsNCiAgICAgICAgc2g6bWF4SW5jbHVzaXZlIDUg\"\n",
        "        \"Ow0KICAgICAgICBzaDptZXNzYWdlICJMYSBkaWZpY3VsdGFkLCBzaSBleGlzdGUsIGRlYmUgc2VyIHVuIGVudGVybyBlbnRyZSAx\"\n",
        "        \"IHkgNS4iQGVzIF0gOw0KICAgIHNoOnByb3BlcnR5IFsNCiAgICAgICAgc2g6cGF0aCBza29zOmV4YWN0TWF0Y2ggOw0KICAgICAg\"\n",
        "        \"ICBzaDpub2RlS2luZCBzaDpJUkkgOw0KICAgICAgICBzaDpwYXR0ZXJuICJeaHR0cDovL3d3dy53aWtpZGF0YS5vcmcvZW50aXR5\"\n",
        "        \"L1FbMC05XSskIiA7DQogICAgICAgIHNoOm1lc3NhZ2UgInNrb3M6ZXhhY3RNYXRjaCBkZWJlIGFwdW50YXIgYSB1bmEgZW50aWRh\"\n",
        "        \"ZCBXaWtpZGF0YSAoaHR0cDovL3d3dy53aWtpZGF0YS5vcmcvZW50aXR5L1HigKYpLiJAZXMgXSAuDQoNCnB5ZWR1OkVqZXJjaWNp\"\n",
        "        \"b1NoYXBlIGEgc2g6Tm9kZVNoYXBlIDsNCiAgICBzaDp0YXJnZXRDbGFzcyBweWVkdTpFamVyY2ljaW8gOw0KICAgIHNoOnByb3Bl\"\n",
        "        \"cnR5IFsNCiAgICAgICAgc2g6cGF0aCBweWVkdTp0aWVuZUVudW5jaWFkbyA7DQogICAgICAgIHNoOm1pbkNvdW50IDEgOw0KICAg\"\n",
        "        \"ICAgICBzaDptZXNzYWdlICJUb2RvIGVqZXJjaWNpbyBkZWJlIHRlbmVyIHVuIGVudW5jaWFkby4iQGVzIF0gOw0KICAgIHNoOnBy\"\n",
        "        \"b3BlcnR5IFsNCiAgICAgICAgc2g6cGF0aCBweWVkdTpjdWJyZUNvbmNlcHRvIDsNCiAgICAgICAgc2g6bWluQ291bnQgMSA7DQog\"\n",
        "        \"ICAgICAgIHNoOmNsYXNzIHB5ZWR1OkNvbmNlcHRvIDsNCiAgICAgICAgc2g6bWVzc2FnZSAiVG9kbyBlamVyY2ljaW8gZGViZSBj\"\n",
        "        \"dWJyaXIgYWwgbWVub3MgdW4gY29uY2VwdG8uIkBlcyBdIDsNCiAgICBzaDpwcm9wZXJ0eSBbDQogICAgICAgIHNoOnBhdGggcHll\"\n",
        "        \"ZHU6dGllbmVEaWZpY3VsdGFkIDsNCiAgICAgICAgc2g6bWluQ291bnQgMSA7DQogICAgICAgIHNoOmRhdGF0eXBlIHhzZDppbnRl\"\n",
        "        \"Z2VyIDsNCiAgICAgICAgc2g6bWluSW5jbHVzaXZlIDEgOw0KICAgICAgICBzaDptYXhJbmNsdXNpdmUgNSA7DQogICAgICAgIHNo\"\n",
        "        \"Om1lc3NhZ2UgIlRvZG8gZWplcmNpY2lvIGRlYmUgZGVjbGFyYXIgdW5hIGRpZmljdWx0YWQgZW50ZXJhIGRlIDEgYSA1LiJAZXMg\"\n",
        "        \"XSAuDQoNCnB5ZWR1OkVycm9yQ29uY2VwdHVhbFNoYXBlIGEgc2g6Tm9kZVNoYXBlIDsNCiAgICBzaDp0YXJnZXRDbGFzcyBweWVk\"\n",
        "        \"dTpFcnJvckNvbmNlcHR1YWwgOw0KICAgIHNoOnByb3BlcnR5IFsNCiAgICAgICAgc2g6cGF0aCByZGZzOmxhYmVsIDsNCiAgICAg\"\n",
        "        \"ICAgc2g6bWluQ291bnQgMSA7DQogICAgICAgIHNoOm1lc3NhZ2UgIlRvZG8gZXJyb3IgY29uY2VwdHVhbCBkZWJlIHRlbmVyIGV0\"\n",
        "        \"aXF1ZXRhLiJAZXMgXSA7DQogICAgc2g6cHJvcGVydHkgWw0KICAgICAgICBzaDpwYXRoIHB5ZWR1OmVycm9yU29icmVDb25jZXB0\"\n",
        "        \"byA7DQogICAgICAgIHNoOm1pbkNvdW50IDEgOw0KICAgICAgICBzaDpjbGFzcyBweWVkdTpDb25jZXB0byA7DQogICAgICAgIHNo\"\n",
        "        \"Om1lc3NhZ2UgIlRvZG8gZXJyb3IgY29uY2VwdHVhbCBkZWJlIGFzb2NpYXJzZSBhbCBtZW5vcyBhIHVuIGNvbmNlcHRvLiJAZXMg\"\n",
        "        \"XSAuDQoNCnB5ZWR1OkVudmlvRXN0dWRpYW50ZVNoYXBlIGEgc2g6Tm9kZVNoYXBlIDsNCiAgICBzaDp0YXJnZXRDbGFzcyBweWVk\"\n",
        "        \"dTpFbnZpb0VzdHVkaWFudGUgOw0KICAgIHNoOnByb3BlcnR5IFsNCiAgICAgICAgc2g6cGF0aCBweWVkdTplbnZpYWRvUG9yIDsN\"\n",
        "        \"CiAgICAgICAgc2g6bWluQ291bnQgMSA7DQogICAgICAgIHNoOmNsYXNzIHB5ZWR1OkVzdHVkaWFudGUgOw0KICAgICAgICBzaDpt\"\n",
        "        \"ZXNzYWdlICJUb2RvIGVudsOtbyBkZWJlIHRlbmVyIHVuIGVzdHVkaWFudGUgYXV0b3IuIkBlcyBdIDsNCiAgICBzaDpwcm9wZXJ0\"\n",
        "        \"eSBbDQogICAgICAgIHNoOnBhdGggcHllZHU6cmVzdWVsdmVFamVyY2ljaW8gOw0KICAgICAgICBzaDptaW5Db3VudCAxIDsNCiAg\"\n",
        "        \"ICAgICAgc2g6Y2xhc3MgcHllZHU6RWplcmNpY2lvIDsNCiAgICAgICAgc2g6bWVzc2FnZSAiVG9kbyBlbnbDrW8gZGViZSByZXNv\"\n",
        "        \"bHZlciB1biBlamVyY2ljaW8uIkBlcyBdIDsNCiAgICBzaDpwcm9wZXJ0eSBbDQogICAgICAgIHNoOnBhdGggcHllZHU6bnVtZXJv\"\n",
        "        \"RGVMaW5lYXMgOw0KICAgICAgICBzaDptYXhDb3VudCAxIDsNCiAgICAgICAgc2g6ZGF0YXR5cGUgeHNkOmludGVnZXIgOw0KICAg\"\n",
        "        \"ICAgICBzaDptaW5JbmNsdXNpdmUgMSA7DQogICAgICAgIHNoOm1lc3NhZ2UgIkVsIG7Dum1lcm8gZGUgbMOtbmVhcywgc2kgZXhp\"\n",
        "        \"c3RlLCBkZWJlIHNlciB1biBlbnRlcm8gcG9zaXRpdm8uIkBlcyBdIC4NCg0KcHllZHU6UmVjdXJzb1NoYXBlIGEgc2g6Tm9kZVNo\"\n",
        "        \"YXBlIDsNCiAgICBzaDp0YXJnZXRDbGFzcyBweWVkdTpSZWN1cnNvIDsNCiAgICBzaDpwcm9wZXJ0eSBbDQogICAgICAgIHNoOnBh\"\n",
        "        \"dGggZGN0ZXJtczp0aXRsZSA7DQogICAgICAgIHNoOm1pbkNvdW50IDEgOw0KICAgICAgICBzaDptZXNzYWdlICJUb2RvIHJlY3Vy\"\n",
        "        \"c28gZGViZSBkZWNsYXJhciB1biB0w610dWxvIChkY3Rlcm1zOnRpdGxlKS4iQGVzIF0gLg0KDQpweWVkdTpFc3R1ZGlhbnRlU2hh\"\n",
        "        \"cGUgYSBzaDpOb2RlU2hhcGUgOw0KICAgIHNoOnRhcmdldENsYXNzIHB5ZWR1OkVzdHVkaWFudGUgOw0KICAgIHNoOnByb3BlcnR5\"\n",
        "        \"IFsNCiAgICAgICAgc2g6cGF0aCBmb2FmOm5hbWUgOw0KICAgICAgICBzaDptaW5Db3VudCAxIDsNCiAgICAgICAgc2g6bWVzc2Fn\"\n",
        "        \"ZSAiVG9kbyBlc3R1ZGlhbnRlIGRlYmUgdGVuZXIgZm9hZjpuYW1lLiJAZXMgXSA7DQogICAgc2g6cHJvcGVydHkgWw0KICAgICAg\"\n",
        "        \"ICBzaDpwYXRoIHJkZnM6bGFiZWwgOw0KICAgICAgICBzaDptaW5Db3VudCAxIDsNCiAgICAgICAgc2g6bWVzc2FnZSAiVG9kbyBl\"\n",
        "        \"c3R1ZGlhbnRlIGRlYmUgdGVuZXIgZXRpcXVldGEuIkBlcyBdIC4NCg0KcHllZHU6VGVtYVNoYXBlIGEgc2g6Tm9kZVNoYXBlIDsN\"\n",
        "        \"CiAgICBzaDp0YXJnZXRDbGFzcyBweWVkdTpUZW1hIDsNCiAgICBzaDpwcm9wZXJ0eSBbDQogICAgICAgIHNoOnBhdGggcmRmczps\"\n",
        "        \"YWJlbCA7DQogICAgICAgIHNoOm1pbkNvdW50IDEgOw0KICAgICAgICBzaDptZXNzYWdlICJUb2RvIHRlbWEgZGViZSB0ZW5lciBl\"\n",
        "        \"dGlxdWV0YS4iQGVzIF0gLg0KDQpweWVkdTpOaXZlbERvbWluaW9TaGFwZSBhIHNoOk5vZGVTaGFwZSA7DQogICAgc2g6dGFyZ2V0\"\n",
        "        \"Q2xhc3MgcHllZHU6Tml2ZWxEb21pbmlvIDsNCiAgICBzaDpwcm9wZXJ0eSBbDQogICAgICAgIHNoOnBhdGggcmRmczpsYWJlbCA7\"\n",
        "        \"DQogICAgICAgIHNoOm1pbkNvdW50IDEgOw0KICAgICAgICBzaDptZXNzYWdlICJUb2RvIG5pdmVsIGRlIGRvbWluaW8gZGViZSB0\"\n",
        "        \"ZW5lciBldGlxdWV0YS4iQGVzIF0gLg0KDQpweWVkdTpFdmFsdWFjaW9uRGVDb25jZXB0b1NoYXBlIGEgc2g6Tm9kZVNoYXBlIDsN\"\n",
        "        \"CiAgICBzaDp0YXJnZXRDbGFzcyBweWVkdTpFdmFsdWFjaW9uRGVDb25jZXB0byA7DQogICAgc2g6cHJvcGVydHkgWw0KICAgICAg\"\n",
        "        \"ICBzaDpwYXRoIHB5ZWR1OmVuRWplcmNpY2lvIDsNCiAgICAgICAgc2g6bWluQ291bnQgMSA7DQogICAgICAgIHNoOm5vZGVLaW5k\"\n",
        "        \"IHNoOklSSSA7DQogICAgICAgIHNoOmNsYXNzIHB5ZWR1OkVqZXJjaWNpbyA7DQogICAgICAgIHNoOm1lc3NhZ2UgIkxhIGV2YWx1\"\n",
        "        \"YWNpw7NuIGRlIGNvbmNlcHRvIGRlYmUgcmVmZXJpciBhIHVuIGVqZXJjaWNpby4iQGVzIF0gOw0KICAgIHNoOnByb3BlcnR5IFsN\"\n",
        "        \"CiAgICAgICAgc2g6cGF0aCBweWVkdTpzb2JyZUNvbmNlcHRvIDsNCiAgICAgICAgc2g6bWluQ291bnQgMSA7DQogICAgICAgIHNo\"\n",
        "        \"Om5vZGVLaW5kIHNoOklSSSA7DQogICAgICAgIHNoOmNsYXNzIHB5ZWR1OkNvbmNlcHRvIDsNCiAgICAgICAgc2g6bWVzc2FnZSAi\"\n",
        "        \"TGEgZXZhbHVhY2nDs24gZGUgY29uY2VwdG8gZGViZSByZWZlcmlyIGEgdW4gY29uY2VwdG8uIkBlcyBdIDsNCiAgICBzaDpwcm9w\"\n",
        "        \"ZXJ0eSBbDQogICAgICAgIHNoOnBhdGggcHllZHU6Y29uUGVzbyA7DQogICAgICAgIHNoOm1heENvdW50IDEgOw0KICAgICAgICBz\"\n",
        "        \"aDpkYXRhdHlwZSB4c2Q6ZGVjaW1hbCA7DQogICAgICAgIHNoOm1pbkluY2x1c2l2ZSAwIDsNCiAgICAgICAgc2g6bWF4SW5jbHVz\"\n",
        "        \"aXZlIDEgOw0KICAgICAgICBzaDptZXNzYWdlICJFbCBwZXNvIGRlYmUgc2VyIHVuIGRlY2ltYWwgZW50cmUgMCB5IDEuIkBlcyBd\"\n",
        "        \"IC4NCg0KcHllZHU6RXZhbHVhY2lvbkFjdGl2aWRhZFNoYXBlIGEgc2g6Tm9kZVNoYXBlIDsNCiAgICBzaDp0YXJnZXRDbGFzcyBw\"\n",
        "        \"eWVkdTpFdmFsdWFjaW9uQWN0aXZpZGFkIDsNCiAgICBzaDpwcm9wZXJ0eSBbDQogICAgICAgIHNoOnBhdGggcHllZHU6cG9yRXN0\"\n",
        "        \"dWRpYW50ZSA7DQogICAgICAgIHNoOm1pbkNvdW50IDEgOw0KICAgICAgICBzaDpjbGFzcyBweWVkdTpFc3R1ZGlhbnRlIDsNCiAg\"\n",
        "        \"ICAgICAgc2g6bWVzc2FnZSAiVG9kYSBldmFsdWFjacOzbiBkZSBhY3RpdmlkYWQgZGViZSB0ZW5lciB1biBlc3R1ZGlhbnRlLiJA\"\n",
        "        \"ZXMgXSA7DQogICAgc2g6cHJvcGVydHkgWw0KICAgICAgICBzaDpwYXRoIHB5ZWR1OmV2YWx1YUEgOw0KICAgICAgICBzaDptaW5D\"\n",
        "        \"b3VudCAxIDsNCiAgICAgICAgc2g6bWVzc2FnZSAiVG9kYSBldmFsdWFjacOzbiBkZSBhY3RpdmlkYWQgZGViZSBldmFsdWFyIHVu\"\n",
        "        \"YSBhY3RpdmlkYWQuIkBlcyBdIDsNCiAgICBzaDpwcm9wZXJ0eSBbDQogICAgICAgIHNoOnBhdGggcHllZHU6b2J0dXZvTm90YSA7\"\n",
        "        \"DQogICAgICAgIHNoOm1heENvdW50IDEgOw0KICAgICAgICBzaDpkYXRhdHlwZSB4c2Q6ZGVjaW1hbCA7DQogICAgICAgIHNoOm1p\"\n",
        "        \"bkluY2x1c2l2ZSAwIDsNCiAgICAgICAgc2g6bWF4SW5jbHVzaXZlIDEwIDsNCiAgICAgICAgc2g6bWVzc2FnZSAiTGEgbm90YSBk\"\n",
        "        \"ZWJlIHNlciB1biBkZWNpbWFsIGVudHJlIDAgeSAxMC4iQGVzIF0gOw0KICAgIHNoOnByb3BlcnR5IFsNCiAgICAgICAgc2g6cGF0\"\n",
        "        \"aCBweWVkdTplbkZlY2hhIDsNCiAgICAgICAgc2g6bWF4Q291bnQgMSA7DQogICAgICAgIHNoOmRhdGF0eXBlIHhzZDpkYXRlIDsN\"\n",
        "        \"CiAgICAgICAgc2g6bWVzc2FnZSAiTGEgZmVjaGEgZGViZSBzZXIgeHNkOmRhdGUuIkBlcyBdIC4NCg==\"\n",
        "    ),\n",
        "    'ontologia/ejemplo-invalido.ttl': (\n",
        "        \"QHByZWZpeCBweWVkdTogICA8aHR0cHM6Ly93M2lkLm9yZy9la2ctcHl0aG9uL3NjaGVtYSM+IC4NCkBwcmVmaXggcHlyOiAgICAg\"\n",
        "        \"PGh0dHBzOi8vdzNpZC5vcmcvZWtnLXB5dGhvbi9pZC8+IC4NCkBwcmVmaXggcmRmczogICAgPGh0dHA6Ly93d3cudzMub3JnLzIw\"\n",
        "        \"MDAvMDEvcmRmLXNjaGVtYSM+IC4NCg0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj\"\n",
        "        \"IyMjIyMjIyMjIyMjIyMNCiMgIEVqZW1wbG8gY29uIHZpb2xhY2lvbmVzIERFTElCRVJBREFTIHBhcmEgZGVtb3N0cmFyIHF1ZSBT\"\n",
        "        \"SEFDTA0KIyAgZGV0ZWN0YSBsb3MgZGVmZWN0b3MgZGUgZm9ybWEuIE5PIGZvcm1hIHBhcnRlIGRlbCBncmFmbyB2w6FsaWRvOw0K\"\n",
        "        \"IyAgc2UgdXNhIHNvbG8gZW4gbGEgZGVtb3N0cmFjacOzbiBkZSB2YWxpZGFjacOzbi4NCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj\"\n",
        "        \"IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQoNCiMgQ29uY2VwdG8gc2luIHRlbWEgeSBzaW4gZXRp\"\n",
        "        \"cXVldGEsIGNvbiBkaWZpY3VsdGFkIGZ1ZXJhIGRlIHJhbmdvICg4KS4NCnB5cjptYWxfY29uY2VwdG8gYSBweWVkdTpQcmluY2lw\"\n",
        "        \"aW9UcmFuc3ZlcnNhbCA7DQogICAgcHllZHU6dGllbmVEaWZpY3VsdGFkIDggLg0KDQojIEVqZXJjaWNpbyBzaW4gZW51bmNpYWRv\"\n",
        "        \"LCBzaW4gY29uY2VwdG9zIGN1YmllcnRvcyB5IHNpbiBkaWZpY3VsdGFkLg0KcHlyOm1hbF9lamVyY2ljaW8gYSBweWVkdTpFamVy\"\n",
        "        \"Y2ljaW8gOw0KICAgIHJkZnM6bGFiZWwgIkVqZXJjaWNpbyBtYWwgZm9ybWFkbyJAZXMgLg0K\"\n",
        "    ),\n",
        "    'consultas/01_conceptos_por_tema.rq': (\n",
        "        \"UFJFRklYIHB5ZWR1OiA8aHR0cHM6Ly93M2lkLm9yZy9la2ctcHl0aG9uL3NjaGVtYSM+DQpQUkVGSVggcmRmczogIDxodHRwOi8v\"\n",
        "        \"d3d3LnczLm9yZy8yMDAwLzAxL3JkZi1zY2hlbWEjPg0KDQpTRUxFQ1QgP3RlbWEgKEdST1VQX0NPTkNBVCg/ZXRpcXVldGE7IFNF\"\n",
        "        \"UEFSQVRPUj0iLCAiKSBBUyA/Y29uY2VwdG9zKQ0KV0hFUkUgew0KICA/Y29uY2VwdG8gcHllZHU6cGVydGVuZWNlQVRlbWEgP3Qg\"\n",
        "        \"Lg0KICA/dCByZGZzOmxhYmVsID90ZW1hIC4NCiAgP2NvbmNlcHRvIHJkZnM6bGFiZWwgP2V0aXF1ZXRhIC4NCiAgRklMVEVSKExB\"\n",
        "        \"TkcoP3RlbWEpID0gImVzIikNCiAgRklMVEVSKExBTkcoP2V0aXF1ZXRhKSA9ICJlcyIpDQp9DQpHUk9VUCBCWSA/dGVtYQ0KT1JE\"\n",
        "        \"RVIgQlkgP3RlbWENCg==\"\n",
        "    ),\n",
        "    'consultas/02_inferencia_conceptos.rq': (\n",
        "        \"UFJFRklYIHB5ZWR1OiA8aHR0cHM6Ly93M2lkLm9yZy9la2ctcHl0aG9uL3NjaGVtYSM+DQpQUkVGSVggcmRmczogIDxodHRwOi8v\"\n",
        "        \"d3d3LnczLm9yZy8yMDAwLzAxL3JkZi1zY2hlbWEjPg0KDQpTRUxFQ1QgP2NvbmNlcHRvID9ldGlxdWV0YQ0KV0hFUkUgew0KICA/\"\n",
        "        \"Y29uY2VwdG8gYSBweWVkdTpDb25jZXB0byA7DQogICAgICAgICAgICByZGZzOmxhYmVsID9ldGlxdWV0YSAuDQogIEZJTFRFUihM\"\n",
        "        \"QU5HKD9ldGlxdWV0YSkgPSAiZXMiKQ0KfQ0KT1JERVIgQlkgP2V0aXF1ZXRhDQo=\"\n",
        "    ),\n",
        "    'consultas/03_prerrequisitos_transitivos.rq': (\n",
        "        \"UFJFRklYIHB5ZWR1OiA8aHR0cHM6Ly93M2lkLm9yZy9la2ctcHl0aG9uL3NjaGVtYSM+DQpQUkVGSVggcHlyOiAgIDxodHRwczov\"\n",
        "        \"L3czaWQub3JnL2VrZy1weXRob24vaWQvPg0KUFJFRklYIHJkZnM6ICA8aHR0cDovL3d3dy53My5vcmcvMjAwMC8wMS9yZGYtc2No\"\n",
        "        \"ZW1hIz4NCg0KU0VMRUNUIERJU1RJTkNUID9wcmVyZXF1aXNpdG8gP2V0aXF1ZXRhDQpXSEVSRSB7DQogIHB5cjpidXNxdWVkYV9i\"\n",
        "        \"aW5hcmlhIHB5ZWR1OnJlcXVpZXJlUHJlcnJlcXVpc2l0bysgP3ByZXJlcXVpc2l0byAuDQogID9wcmVyZXF1aXNpdG8gcmRmczps\"\n",
        "        \"YWJlbCA/ZXRpcXVldGEgLg0KICBGSUxURVIoTEFORyg/ZXRpcXVldGEpID0gImVzIikNCn0NCk9SREVSIEJZID9ldGlxdWV0YQ0K\"\n",
        "    ),\n",
        "    'consultas/05_errores_por_concepto.rq': (\n",
        "        \"UFJFRklYIHB5ZWR1OiAgIDxodHRwczovL3czaWQub3JnL2VrZy1weXRob24vc2NoZW1hIz4NClBSRUZJWCByZGZzOiAgICA8aHR0\"\n",
        "        \"cDovL3d3dy53My5vcmcvMjAwMC8wMS9yZGYtc2NoZW1hIz4NClBSRUZJWCBkY3Rlcm1zOiA8aHR0cDovL3B1cmwub3JnL2RjL3Rl\"\n",
        "        \"cm1zLz4NClBSRUZJWCByZGY6ICAgICA8aHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIz4NCg0KU0VM\"\n",
        "        \"RUNUID9lcnJvciA/Y29uY2VwdG8gP2Z1ZW50ZQ0KV0hFUkUgew0KICA/ZSBhIHB5ZWR1OkVycm9yQ29uY2VwdHVhbCA7DQogICAg\"\n",
        "        \"IHJkZnM6bGFiZWwgP2Vycm9yIDsNCiAgICAgcHllZHU6ZXJyb3JTb2JyZUNvbmNlcHRvID9jIC4NCiAgP2MgcmRmczpsYWJlbCA/\"\n",
        "        \"Y29uY2VwdG8gLg0KICBGSUxURVIoTEFORyg/ZXJyb3IpID0gImVzIikNCiAgRklMVEVSKExBTkcoP2NvbmNlcHRvKSA9ICJlcyIp\"\n",
        "        \"DQogIE9QVElPTkFMIHsNCiAgICA/c3RtdCByZGY6c3ViamVjdCA/ZSA7DQogICAgICAgICAgcmRmOnByZWRpY2F0ZSBweWVkdTpl\"\n",
        "        \"cnJvclNvYnJlQ29uY2VwdG8gOw0KICAgICAgICAgIHJkZjpvYmplY3QgP2MgOw0KICAgICAgICAgIGRjdGVybXM6c291cmNlID9y\"\n",
        "        \"ZWYgLg0KICAgID9yZWYgZGN0ZXJtczp0aXRsZSA/ZnVlbnRlIC4NCiAgfQ0KfQ0KT1JERVIgQlkgP2Vycm9yDQo=\"\n",
        "    ),\n",
        "    'consultas/06_construct_prereq_directos.rq': (\n",
        "        \"UFJFRklYIHB5ZWR1OiA8aHR0cHM6Ly93M2lkLm9yZy9la2ctcHl0aG9uL3NjaGVtYSM+DQoNCkNPTlNUUlVDVCB7DQogID9jb25j\"\n",
        "        \"ZXB0byBweWVkdTp0aWVuZVByZXJyZXF1aXNpdG9UcmFuc2l0aXZvID9wcmVyZXF1aXNpdG8gLg0KfQ0KV0hFUkUgew0KICA/Y29u\"\n",
        "        \"Y2VwdG8gcHllZHU6cmVxdWllcmVQcmVycmVxdWlzaXRvKyA/cHJlcmVxdWlzaXRvIC4NCn0NCg==\"\n",
        "    ),\n",
        "    'consultas/07_diagnostico_envio.rq': (\n",
        "        \"UFJFRklYIHB5ZWR1OiA8aHR0cHM6Ly93M2lkLm9yZy9la2ctcHl0aG9uL3NjaGVtYSM+DQpQUkVGSVggcmRmczogIDxodHRwOi8v\"\n",
        "        \"d3d3LnczLm9yZy8yMDAwLzAxL3JkZi1zY2hlbWEjPg0KDQpTRUxFQ1QgP2VudmlvID9lamVyY2ljaW8gP2Vycm9yID9jb25jZXB0\"\n",
        "        \"b0FmZWN0YWRvID9wcmVyZXF1aXNpdG8NCldIRVJFIHsNCiAgP2VudiBhIHB5ZWR1OkVudmlvRXN0dWRpYW50ZSA7DQogICAgICAg\"\n",
        "        \"cmRmczpsYWJlbCA/ZW52aW8gOw0KICAgICAgIHB5ZWR1OnJlc3VlbHZlRWplcmNpY2lvID9laiA7DQogICAgICAgcHllZHU6bWFu\"\n",
        "        \"aWZpZXN0YUVycm9yID9lIC4NCiAgP2VqIHJkZnM6bGFiZWwgP2VqZXJjaWNpbyAuDQogID9lICByZGZzOmxhYmVsID9lcnJvciA7\"\n",
        "        \"DQogICAgICBweWVkdTplcnJvclNvYnJlQ29uY2VwdG8gP2MgLg0KICA/YyAgcmRmczpsYWJlbCA/Y29uY2VwdG9BZmVjdGFkbyAu\"\n",
        "        \"DQogIE9QVElPTkFMIHsNCiAgICA/YyBweWVkdTpyZXF1aWVyZVByZXJyZXF1aXNpdG8rID9wIC4NCiAgICA/cCByZGZzOmxhYmVs\"\n",
        "        \"ID9wcmVyZXF1aXNpdG8gLg0KICAgIEZJTFRFUihMQU5HKD9wcmVyZXF1aXNpdG8pID0gImVzIikNCiAgfQ0KICBGSUxURVIoTEFO\"\n",
        "        \"Ryg/ZW52aW8pID0gImVzIikNCiAgRklMVEVSKExBTkcoP2VqZXJjaWNpbykgPSAiZXMiKQ0KICBGSUxURVIoTEFORyg/ZXJyb3Ip\"\n",
        "        \"ID0gImVzIikNCiAgRklMVEVSKExBTkcoP2NvbmNlcHRvQWZlY3RhZG8pID0gImVzIikNCn0NCk9SREVSIEJZID9lbnZpbyA/cHJl\"\n",
        "        \"cmVxdWlzaXRvDQo=\"\n",
        "    ),\n",
        "    'consultas/10_jerarquia_skos_estrella.rq': (\n",
        "        \"UFJFRklYIHB5ZWR1OiA8aHR0cHM6Ly93M2lkLm9yZy9la2ctcHl0aG9uL3NjaGVtYSM+DQpQUkVGSVggcHlyOiAgIDxodHRwczov\"\n",
        "        \"L3czaWQub3JnL2VrZy1weXRob24vaWQvPg0KUFJFRklYIHJkZnM6ICA8aHR0cDovL3d3dy53My5vcmcvMjAwMC8wMS9yZGYtc2No\"\n",
        "        \"ZW1hIz4NClBSRUZJWCBza29zOiAgPGh0dHA6Ly93d3cudzMub3JnLzIwMDQvMDIvc2tvcy9jb3JlIz4NCg0KU0VMRUNUIERJU1RJ\"\n",
        "        \"TkNUID9nZW5lcmFsID9ldGlxdWV0YQ0KV0hFUkUgew0KICBweXI6YmZzIHNrb3M6YnJvYWRlciogP2dlbmVyYWwgLg0KICA/Z2Vu\"\n",
        "        \"ZXJhbCByZGZzOmxhYmVsID9ldGlxdWV0YSAuDQogIEZJTFRFUihMQU5HKD9ldGlxdWV0YSkgPSAiZXMiKQ0KfQ0KT1JERVIgQlkg\"\n",
        "        \"P2V0aXF1ZXRhDQo=\"\n",
        "    ),\n",
        "}\n",
        "\n",
        "for _ruta, _b64 in FICHEROS.items():\n",
        "    _p = pathlib.Path(_ruta)\n",
        "    _p.parent.mkdir(parents=True, exist_ok=True)\n",
        "    _p.write_bytes(base64.b64decode(_b64))\n",
        "    print('escrito:', _p, _p.stat().st_size, 'bytes')\n",
        "\n",
        "print()\n",
        "print('Setup Colab completo: datos del proyecto escritos en', pathlib.Path.cwd())"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 19,
      "id": "48c03970",
      "metadata": {
        "execution": {
          "iopub.execute_input": "2026-06-23T17:17:49.077024Z",
          "iopub.status.busy": "2026-06-23T17:17:49.077024Z",
          "iopub.status.idle": "2026-06-23T17:17:49.165202Z",
          "shell.execute_reply": "2026-06-23T17:17:49.165202Z"
        },
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "48c03970",
        "outputId": "19091cd1-6562-4e7e-f81a-5d7e285ffbbc"
      },
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Fichero: ekg-python-150.ttl\n",
            "Enunciados afirmados (tripletas): 1772\n",
            "Clases OWL: 20\n",
            "Propiedades de objeto: 21\n",
            "Propiedades de datos: 7\n",
            "Alineamientos skos:exactMatch a Wikidata: 30\n",
            "Relaciones skos:broader: 19\n"
          ]
        }
      ],
      "source": [
        "from pathlib import Path\n",
        "from rdflib import Graph, RDF, RDFS, OWL, URIRef\n",
        "from rdflib.namespace import Namespace, SKOS, DCTERMS\n",
        "\n",
        "BASE = Path.cwd()  # Colab: datos escritos por la celda de setup en el cwd\n",
        "ONTO = BASE / \"ontologia\" / \"ekg-python-150.ttl\"\n",
        "\n",
        "PYEDU = Namespace(\"https://w3id.org/ekg-python/schema#\")\n",
        "PYR = Namespace(\"https://w3id.org/ekg-python/id/\")\n",
        "\n",
        "g = Graph()\n",
        "g.parse(ONTO, format=\"turtle\")\n",
        "\n",
        "clases = sorted(set(g.subjects(RDF.type, OWL.Class)))\n",
        "obj_props = sorted(set(g.subjects(RDF.type, OWL.ObjectProperty)))\n",
        "dat_props = sorted(set(g.subjects(RDF.type, OWL.DatatypeProperty)))\n",
        "exact = list(g.triples((None, SKOS.exactMatch, None)))\n",
        "broader = list(g.triples((None, SKOS.broader, None)))\n",
        "\n",
        "print(\"Fichero:\", ONTO.name)\n",
        "print(\"Enunciados afirmados (tripletas):\", len(g))\n",
        "print(\"Clases OWL:\", len(clases))\n",
        "print(\"Propiedades de objeto:\", len(obj_props))\n",
        "print(\"Propiedades de datos:\", len(dat_props))\n",
        "print(\"Alineamientos skos:exactMatch a Wikidata:\", len(exact))\n",
        "print(\"Relaciones skos:broader:\", len(broader))"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "cc44f8ed",
      "metadata": {
        "id": "cc44f8ed"
      },
      "source": [
        "### La TBox: clases del esquema\n",
        "\n",
        "`pyedu:EntidadEducativa` es la superclase abstracta. De ella derivan, por una parte, `pyedu:Concepto`\n",
        "(que además es subclase de `skos:Concept`, lo que habilita la red conceptual `skos:broader/narrower/related`)\n",
        "y, por otra, las entidades del proceso educativo (`Tema`, `Ejercicio`, `EnvioEstudiante`, `ErrorConceptual`,\n",
        "`Estudiante`, `Recurso`, etc.). Las subcategorías de concepto (`EstructuraDeDatos`, `EstructuraDeControl`,\n",
        "`Paradigma`, `PrincipioTransversal`, `ModuloLibreria`, `FuncionIntegrada`, `TipoDeDato`) son subclases de\n",
        "`pyedu:Concepto`. La pertenencia a `Concepto` nunca se afirma a mano para un individuo: la deduce el razonador\n",
        "por `rdfs:subClassOf` cuando se activa (lo veremos en la sección 3)."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 20,
      "id": "a7cede93",
      "metadata": {
        "execution": {
          "iopub.execute_input": "2026-06-23T17:17:49.166206Z",
          "iopub.status.busy": "2026-06-23T17:17:49.166206Z",
          "iopub.status.idle": "2026-06-23T17:17:49.169383Z",
          "shell.execute_reply": "2026-06-23T17:17:49.169383Z"
        },
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "a7cede93",
        "outputId": "19bbbd58-ab7e-47c8-9373-d5738dc21296"
      },
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "CLASES OWL DEL ESQUEMA\n",
            "----------------------------------------------------------------------\n",
            "  Competencia            Competencia ⊑ EntidadEducativa\n",
            "  Concepto               Concepto de programación ⊑ Concept, EntidadEducativa\n",
            "  Ejercicio              Ejercicio o enunciado ⊑ EntidadEducativa\n",
            "  EntidadEducativa       Entidad educativa\n",
            "  EnvioEstudiante        Envío de estudiante ⊑ EntidadEducativa\n",
            "  ErrorConceptual        Error conceptual (misconception) ⊑ EntidadEducativa\n",
            "  EstructuraDeControl    Estructura de control ⊑ Concepto\n",
            "  EstructuraDeDatos      Estructura de datos ⊑ Concepto\n",
            "  Estudiante             Estudiante ⊑ EntidadEducativa\n",
            "  EvaluacionActividad    Evaluación de actividad ⊑ EntidadEducativa\n",
            "  EvaluacionDeConcepto   Evaluación de concepto ⊑ EntidadEducativa\n",
            "  FuncionIntegrada       Función integrada ⊑ Concepto\n",
            "  ModuloLibreria         Módulo o librería ⊑ Concepto\n",
            "  NivelDominio           Nivel de dominio ⊑ Concept\n",
            "  Paradigma              Paradigma de programación ⊑ Concepto\n",
            "  PrincipioTransversal   Principio transversal ⊑ Concepto\n",
            "  Recurso                Recurso de aprendizaje ⊑ EntidadEducativa\n",
            "  RutaAprendizaje        Ruta de aprendizaje ⊑ EntidadEducativa\n",
            "  Tema                   Tema curricular ⊑ EntidadEducativa\n",
            "  TipoDeDato             Tipo de dato ⊑ Concepto\n"
          ]
        }
      ],
      "source": [
        "def etiqueta(s, lang=\"es\"):\n",
        "    for o in g.objects(s, RDFS.label):\n",
        "        if getattr(o, \"language\", None) == lang:\n",
        "            return str(o)\n",
        "    for o in g.objects(s, RDFS.label):\n",
        "        return str(o)\n",
        "    return s.split(\"#\")[-1].split(\"/\")[-1]\n",
        "\n",
        "print(\"CLASES OWL DEL ESQUEMA\")\n",
        "print(\"-\" * 70)\n",
        "for c in clases:\n",
        "    supers = [s.split(\"#\")[-1].split(\"/\")[-1] for s in g.objects(c, RDFS.subClassOf)]\n",
        "    sub = (\" ⊑ \" + \", \".join(supers)) if supers else \"\"\n",
        "    print(f\"  {c.split('#')[-1]:<22} {etiqueta(c)}{sub}\")"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "dfb2783e",
      "metadata": {
        "id": "dfb2783e"
      },
      "source": [
        "### La TBox: propiedades de objeto y de datos\n",
        "\n",
        "Las propiedades de objeto modelan las relaciones pedagógicas. Destacan las que llevan caracterización OWL:\n",
        "\n",
        "- `pyedu:esPrerrequisitoDe` es transitiva (`owl:TransitiveProperty`) e inversa de\n",
        "  `pyedu:requierePrerrequisito` (`owl:inverseOf`): el razonador materializa los prerrequisitos indirectos.\n",
        "- `pyedu:contrastaCon` es simétrica (`owl:SymmetricProperty`): empareja conceptos que suelen confundirse.\n",
        "- `esPrerrequisitoDe`, `contrastaCon`, `generaliza`, `seAplicaA` son subpropiedades de\n",
        "  `relacionadoConceptualmenteCon` (`rdfs:subPropertyOf`).\n",
        "\n",
        "Las propiedades de datos llevan literales tipados (`xsd:integer`, `xsd:decimal`, `xsd:date`, `rdf:langString`).\n",
        "`pyedu:tieneDificultad` es funcional (`owl:FunctionalProperty`): admite a lo sumo un valor por entidad."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 21,
      "id": "567b894d",
      "metadata": {
        "execution": {
          "iopub.execute_input": "2026-06-23T17:17:49.170386Z",
          "iopub.status.busy": "2026-06-23T17:17:49.170386Z",
          "iopub.status.idle": "2026-06-23T17:17:49.174385Z",
          "shell.execute_reply": "2026-06-23T17:17:49.174385Z"
        },
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "567b894d",
        "outputId": "f50daea1-d643-42bd-b43b-f3ba892f7485"
      },
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "PROPIEDADES DE OBJETO\n",
            "----------------------------------------------------------------------\n",
            "  aNivelDominio                - -> NivelDominio\n",
            "  contrastaCon                 Concepto -> Concepto  [simétrica; ⊑ relacionadoConceptualmenteCon]\n",
            "  cubreConcepto                Ejercicio -> Concepto\n",
            "  dominaConcepto               Estudiante -> Concepto\n",
            "  enEjercicio                  EvaluacionDeConcepto -> Ejercicio\n",
            "  enviadoPor                   EnvioEstudiante -> Estudiante\n",
            "  errorSobreConcepto           ErrorConceptual -> Concepto\n",
            "  esPrerrequisitoDe            Concepto -> Concepto  [transitiva; inversa de requierePrerrequisito; ⊑ relacionadoConceptualmenteCon]\n",
            "  especializa                  Concepto -> Concepto\n",
            "  evaluaA                      EvaluacionActividad -> Ejercicio\n",
            "  evaluaCompetencia            Ejercicio -> Competencia\n",
            "  generaliza                   Concepto -> Concepto  [inversa de especializa; ⊑ relacionadoConceptualmenteCon]\n",
            "  ilustraConcepto              Recurso -> Concepto\n",
            "  manifiestaError              EnvioEstudiante -> ErrorConceptual\n",
            "  perteneceATema               Concepto -> Tema\n",
            "  porEstudiante                EvaluacionActividad -> Estudiante\n",
            "  relacionadoConceptualmenteCon Concepto -> Concepto\n",
            "  requierePrerrequisito        Concepto -> Concepto  [transitiva]\n",
            "  resuelveEjercicio            EnvioEstudiante -> Ejercicio\n",
            "  seAplicaA                    Concepto -> Concepto  [⊑ relacionadoConceptualmenteCon]\n",
            "  sobreConcepto                EvaluacionDeConcepto -> Concepto\n",
            "\n",
            "PROPIEDADES DE DATOS\n",
            "----------------------------------------------------------------------\n",
            "  conPeso                      EvaluacionDeConcepto -> decimal\n",
            "  enFecha                      EvaluacionActividad -> date\n",
            "  numeroDeLineas               EnvioEstudiante -> integer\n",
            "  obtuvoNota                   EvaluacionActividad -> decimal\n",
            "  tieneDificultad              EntidadEducativa -> integer  [funcional]\n",
            "  tieneEjemploCodigo           - -> string\n",
            "  tieneEnunciado               Ejercicio -> langString\n"
          ]
        }
      ],
      "source": [
        "def caracteristicas(p):\n",
        "    tipos = set(g.objects(p, RDF.type))\n",
        "    flags = []\n",
        "    if OWL.TransitiveProperty in tipos: flags.append(\"transitiva\")\n",
        "    if OWL.SymmetricProperty in tipos: flags.append(\"simétrica\")\n",
        "    if OWL.FunctionalProperty in tipos: flags.append(\"funcional\")\n",
        "    inv = [x.split(\"#\")[-1] for x in g.objects(p, OWL.inverseOf)]\n",
        "    if inv: flags.append(\"inversa de \" + \", \".join(inv))\n",
        "    sup = [x.split(\"#\")[-1] for x in g.objects(p, RDFS.subPropertyOf)]\n",
        "    if sup: flags.append(\"⊑ \" + \", \".join(sup))\n",
        "    return flags\n",
        "\n",
        "def rango(p):\n",
        "    dom = [x.split(\"#\")[-1].split(\"/\")[-1] for x in g.objects(p, RDFS.domain)]\n",
        "    ran = [x.split(\"#\")[-1].split(\"/\")[-1] for x in g.objects(p, RDFS.range)]\n",
        "    d = dom[0] if dom else \"-\"\n",
        "    r = ran[0] if ran else \"-\"\n",
        "    return f\"{d} -> {r}\"\n",
        "\n",
        "print(\"PROPIEDADES DE OBJETO\")\n",
        "print(\"-\" * 70)\n",
        "for p in obj_props:\n",
        "    extra = caracteristicas(p)\n",
        "    s = f\"  {p.split('#')[-1]:<28} {rango(p)}\"\n",
        "    if extra: s += \"  [\" + \"; \".join(extra) + \"]\"\n",
        "    print(s)\n",
        "\n",
        "print()\n",
        "print(\"PROPIEDADES DE DATOS\")\n",
        "print(\"-\" * 70)\n",
        "for p in dat_props:\n",
        "    extra = caracteristicas(p)\n",
        "    s = f\"  {p.split('#')[-1]:<28} {rango(p)}\"\n",
        "    if extra: s += \"  [\" + \"; \".join(extra) + \"]\"\n",
        "    print(s)"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "ed5afe0e",
      "metadata": {
        "id": "ed5afe0e"
      },
      "source": [
        "### Ejemplos del dominio: conceptos, prerrequisitos y contrastes\n",
        "\n",
        "Mostramos algunos individuos reales del grafo con su dificultad declarada, su tema, sus prerrequisitos directos\n",
        "y los conceptos con los que contrasta. Por ejemplo, *Recursión* requiere *Función* y contrasta con *Bucle for*;\n",
        "*Copia profunda* requiere y contrasta con *Copia superficial*."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 22,
      "id": "bd2de807",
      "metadata": {
        "execution": {
          "iopub.execute_input": "2026-06-23T17:17:49.175464Z",
          "iopub.status.busy": "2026-06-23T17:17:49.175464Z",
          "iopub.status.idle": "2026-06-23T17:17:49.178465Z",
          "shell.execute_reply": "2026-06-23T17:17:49.178465Z"
        },
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "bd2de807",
        "outputId": "0e1f9f34-719f-499b-fbf0-dd02f6b735df"
      },
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Recursión  (dificultad 4; tema: Recursión)\n",
            "    requiere: Función\n",
            "    contrasta con: Bucle for\n",
            "\n",
            "Bucle for  (dificultad 2; tema: Control de flujo)\n",
            "    requiere: (ninguno)\n",
            "    contrasta con: (ninguno)\n",
            "\n",
            "Lista  (dificultad 2; tema: Estructuras de datos)\n",
            "    requiere: (ninguno)\n",
            "    contrasta con: (ninguno)\n",
            "\n",
            "Copia profunda  (dificultad 4; tema: Sistema de tipos)\n",
            "    requiere: Copia superficial\n",
            "    contrasta con: Copia superficial\n",
            "\n",
            "Clase abstracta (ABC)  (dificultad 5; tema: Programación orientada a objetos)\n",
            "    requiere: Herencia\n",
            "    contrasta con: (ninguno)\n",
            "\n",
            "Búsqueda binaria  (dificultad 4; tema: Complejidad algorítmica)\n",
            "    requiere: Bucle while, Indexación\n",
            "    contrasta con: (ninguno)\n",
            "\n"
          ]
        }
      ],
      "source": [
        "def label_o_id(s):\n",
        "    return etiqueta(s) if list(g.objects(s, RDFS.label)) else str(s).split(\"/\")[-1]\n",
        "\n",
        "muestra = [PYR.recursion, PYR.bucle_for, PYR.lista, PYR.copia_profunda,\n",
        "           PYR.abstract_class, PYR.busqueda_binaria]\n",
        "\n",
        "for s in muestra:\n",
        "    lbl = etiqueta(s)\n",
        "    dif = next(iter(g.objects(s, PYEDU.tieneDificultad)), None)\n",
        "    tema = next((label_o_id(t) for t in g.objects(s, PYEDU.perteneceATema)), \"-\")\n",
        "    prereq = [label_o_id(p) for p in g.objects(s, PYEDU.requierePrerrequisito)]\n",
        "    contr = [label_o_id(c) for c in g.objects(s, PYEDU.contrastaCon)]\n",
        "    print(f\"{lbl}  (dificultad {dif}; tema: {tema})\")\n",
        "    print(f\"    requiere: {', '.join(prereq) if prereq else '(ninguno)'}\")\n",
        "    print(f\"    contrasta con: {', '.join(contr) if contr else '(ninguno)'}\")\n",
        "    print()"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 23,
      "id": "1f3bfd27",
      "metadata": {
        "execution": {
          "iopub.execute_input": "2026-06-23T17:17:49.179562Z",
          "iopub.status.busy": "2026-06-23T17:17:49.179562Z",
          "iopub.status.idle": "2026-06-23T17:17:49.181672Z",
          "shell.execute_reply": "2026-06-23T17:17:49.181672Z"
        },
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "1f3bfd27",
        "outputId": "120ccc20-ba37-4aa9-81ec-8a7d5b8a4917"
      },
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Errores conceptuales modelados (misconceptions): 16\n",
            "----------------------------------------------------------------------\n",
            "  Capturar Exception de forma demasiado amplia: sobre Jerarquía de excepciones\n",
            "  Comparar flotantes con ==: sobre Flotante (float)\n",
            "  Concatenar cadena y número (TypeError): sobre Conversión de tipos\n",
            "  Confundir variable global y local: sobre Ámbito de variables (scope)\n",
            "  Confusión == frente a is: sobre Booleano (bool)\n",
            "  Confusión iteración / recursión: sobre Recursión\n",
            "  Confusión paso por valor / por referencia: sobre Mutabilidad\n",
            "  Copia superficial cuando se necesita profunda: sobre Copia superficial\n",
            "  Decorador sin functools.wraps: sobre Decorador\n",
            "  Error de índice por uno (off-by-one): sobre Indexación\n",
            "  Esperar paralelismo real con hilos (GIL): sobre GIL\n",
            "  Late binding en clausuras de bucle: sobre Clausura (closure)\n"
          ]
        }
      ],
      "source": [
        "errores = list(g.subjects(RDF.type, PYEDU.ErrorConceptual))\n",
        "print(f\"Errores conceptuales modelados (misconceptions): {len(errores)}\")\n",
        "print(\"-\" * 70)\n",
        "for e in sorted(errores, key=lambda x: etiqueta(x))[:12]:\n",
        "    concepto = next((etiqueta(c) for c in g.objects(e, PYEDU.errorSobreConcepto)), \"-\")\n",
        "    print(f\"  {etiqueta(e)}: sobre {concepto}\")"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "8c7e3324",
      "metadata": {
        "id": "8c7e3324"
      },
      "source": [
        "## 3. Inferencia OWL 2 RL\n",
        "\n",
        "El grafo está diseñado para que el razonamiento aporte un valor visible. Ningún individuo se afirma directamente como\n",
        "`pyedu:Concepto`; se tipa por su subcategoría (por ejemplo, `pyr:lista a pyedu:EstructuraDeDatos`). De ahí dos efectos:\n",
        "\n",
        "- Sin razonamiento, la consulta «todo lo que es `pyedu:Concepto`» devuelve 0 filas.\n",
        "- Con el cierre OWL 2 RL, `rdfs:subClassOf` propaga el tipo y la consulta devuelve 157 conceptos, los 157\n",
        "  propios del dominio. Las 30 entidades de Wikidata enlazadas con `skos:exactMatch` no se infieren como\n",
        "  `pyedu:Concepto`, precisamente porque `skos:exactMatch` enlaza sin propagar el tipo, a diferencia de `owl:sameAs`.\n",
        "\n",
        "A escala global, el grafo pasa de 1772 enunciados afirmados a 4786 tripletas tras la materialización.\n",
        "Usamos `owlrl` para calcular el cierre deductivo y dejamos ambas cifras embebidas."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 24,
      "id": "716c5d09",
      "metadata": {
        "execution": {
          "iopub.execute_input": "2026-06-23T17:17:49.182676Z",
          "iopub.status.busy": "2026-06-23T17:17:49.182676Z",
          "iopub.status.idle": "2026-06-23T17:17:50.522327Z",
          "shell.execute_reply": "2026-06-23T17:17:50.522327Z"
        },
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "716c5d09",
        "outputId": "5b417059-9fc1-4e57-c3d6-acac34decb41"
      },
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "                          SIN inferencia   CON OWL 2 RL\n",
            "--------------------------------------------------------\n",
            "  Tripletas en el grafo           1772           4786\n",
            "  ?x a pyedu:Concepto                0            157\n",
            "\n",
            "  Tripletas inferidas por el razonador: +3014\n",
            "  Conceptos materializados por rdfs:subClassOf: 157\n"
          ]
        }
      ],
      "source": [
        "import owlrl\n",
        "\n",
        "def cuenta_conceptos(grafo):\n",
        "    q = \"\"\"PREFIX pyedu: <https://w3id.org/ekg-python/schema#>\n",
        "           SELECT (COUNT(DISTINCT ?x) AS ?n) WHERE { ?x a pyedu:Concepto }\"\"\"\n",
        "    return int(next(iter(grafo.query(q)))[0])\n",
        "\n",
        "g_base = Graph(); g_base.parse(ONTO, format=\"turtle\")\n",
        "n_base = cuenta_conceptos(g_base)\n",
        "t_base = len(g_base)\n",
        "\n",
        "g_inf = Graph(); g_inf.parse(ONTO, format=\"turtle\")\n",
        "owlrl.DeductiveClosure(owlrl.OWLRL_Semantics).expand(g_inf)\n",
        "n_inf = cuenta_conceptos(g_inf)\n",
        "t_inf = len(g_inf)\n",
        "\n",
        "print(\"                          SIN inferencia   CON OWL 2 RL\")\n",
        "print(\"-\" * 56)\n",
        "print(f\"  Tripletas en el grafo        {t_base:>7}        {t_inf:>7}\")\n",
        "print(f\"  ?x a pyedu:Concepto          {n_base:>7}        {n_inf:>7}\")\n",
        "print()\n",
        "print(f\"  Tripletas inferidas por el razonador: +{t_inf - t_base}\")\n",
        "print(f\"  Conceptos materializados por rdfs:subClassOf: {n_inf}\")"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 25,
      "id": "d8085ded",
      "metadata": {
        "execution": {
          "iopub.execute_input": "2026-06-23T17:17:50.522327Z",
          "iopub.status.busy": "2026-06-23T17:17:50.522327Z",
          "iopub.status.idle": "2026-06-23T17:17:50.532055Z",
          "shell.execute_reply": "2026-06-23T17:17:50.532055Z"
        },
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "d8085ded",
        "outputId": "98a223e2-c77e-4604-a118-de3857f80cd6"
      },
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Entidades de Wikidata inferidas como pyedu:Concepto: 0\n",
            "(esperado 0: skos:exactMatch NO propaga el tipo; owl:sameAs sí lo haría)\n"
          ]
        }
      ],
      "source": [
        "consulta_clase = \"\"\"PREFIX pyedu: <https://w3id.org/ekg-python/schema#>\n",
        "SELECT (COUNT(*) AS ?wikidata_como_concepto) WHERE {\n",
        "  ?wd a pyedu:Concepto .\n",
        "  FILTER(STRSTARTS(STR(?wd), \"http://www.wikidata.org/entity/\"))\n",
        "}\"\"\"\n",
        "n_wd = int(next(iter(g_inf.query(consulta_clase)))[0])\n",
        "print(\"Entidades de Wikidata inferidas como pyedu:Concepto:\", n_wd)\n",
        "print(\"(esperado 0: skos:exactMatch NO propaga el tipo; owl:sameAs sí lo haría)\")"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "6d8ac336",
      "metadata": {
        "id": "6d8ac336"
      },
      "source": [
        "## 4. Consultas SPARQL sobre el grafo\n",
        "\n",
        "El proyecto incluye diez consultas SPARQL en `consultas/*.rq`. Ejecutamos varias de ellas sobre el grafo con\n",
        "inferencia y mostramos los resultados. Cubren los distintos casos de uso didácticos:\n",
        "\n",
        "- La 02 evidencia la inferencia (`?x a pyedu:Concepto`): 0 sin razonar, 157 con razonamiento.\n",
        "- La 01 agrupa conceptos por tema (`GROUP_CONCAT`).\n",
        "- La 03 calcula prerrequisitos transitivos con un *property path* `+`, sin necesidad de razonador.\n",
        "- La 05 lista errores conceptuales y su concepto, con procedencia bibliográfica por reificación.\n",
        "- La 07 es el caso de uso del TFM: dado un envío, recupera ejercicio, error, concepto y prerrequisitos.\n",
        "- La 10 usa el *property path* `*` (cierre transitivo reflexivo) sobre `skos:broader`."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 26,
      "id": "d879e613",
      "metadata": {
        "execution": {
          "iopub.execute_input": "2026-06-23T17:17:50.533565Z",
          "iopub.status.busy": "2026-06-23T17:17:50.533565Z",
          "iopub.status.idle": "2026-06-23T17:17:50.588245Z",
          "shell.execute_reply": "2026-06-23T17:17:50.588245Z"
        },
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "d879e613",
        "outputId": "caa1f5d0-1769-4a47-aafa-0d9259a3302f"
      },
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "========================================================================\n",
            "02_inferencia_conceptos.rq\n",
            "========================================================================\n",
            "concepto | etiqueta\n",
            "------------------------------------------------------------------------\n",
            "https://w3id.org/ekg-python/id/args_kwargs | *args y **kwargs\n",
            "https://w3id.org/ekg-python/id/anotaciones_tipo | Anotaciones de tipo\n",
            "https://w3id.org/ekg-python/id/abrir_fichero | Apertura de ficheros (open)\n",
            "https://w3id.org/ekg-python/id/valor_por_defecto | Argumentos por defecto\n",
            "https://w3id.org/ekg-python/id/argumentos_nombrados | Argumentos por nombre\n",
            "https://w3id.org/ekg-python/id/asignacion | Asignación\n",
            "https://w3id.org/ekg-python/id/atributo | Atributo de instancia\n",
            "https://w3id.org/ekg-python/id/backtracking | Backtracking\n",
            "https://w3id.org/ekg-python/id/tipo_bool | Booleano (bool)\n",
            "https://w3id.org/ekg-python/id/bucle_for | Bucle for\n",
            "https://w3id.org/ekg-python/id/bucle_while | Bucle while\n",
            "https://w3id.org/ekg-python/id/tipo_bytes | Bytes\n",
            "... (145 filas más)\n",
            "(157 filas)\n",
            "\n",
            "========================================================================\n",
            "01_conceptos_por_tema.rq\n",
            "========================================================================\n",
            "tema | conceptos\n",
            "------------------------------------------------------------------------\n",
            "Algoritmos | Árbol, Backtracking, Programación dinámica, sorted() y sort(), Tabla hash, Búsqueda lineal, Ordenación de burbuja, Ordenación por mezcla, Ordenación rápida, Recorrido en anchura (BFS), Recorrido en profundidad (DFS), Grafo (estructura), Notación O grande\n",
            "Cadenas de texto | Codificación de texto, Formateo de cadenas, f-strings, Métodos de cadena, Expresiones regulares (re), Slicing de cadenas\n",
            "Complejidad algorítmica | Complejidad temporal, Búsqueda binaria\n",
            "Concurrencia | asyncio, Corrutina, async/await, Hilos (threading), Multiproceso, GIL\n",
            "... (12 filas más)\n",
            "(16 filas)\n",
            "\n"
          ]
        }
      ],
      "source": [
        "CONS = BASE / \"consultas\"\n",
        "\n",
        "def ejecuta(nombre, grafo, maxfilas=None):\n",
        "    q = (CONS / nombre).read_text(encoding=\"utf-8\")\n",
        "    res = grafo.query(q)\n",
        "    print(\"=\" * 72)\n",
        "    print(nombre)\n",
        "    print(\"=\" * 72)\n",
        "    if res.type == \"CONSTRUCT\":\n",
        "        cg = Graph()\n",
        "        for t in res: cg.add(t)\n",
        "        print(f\"[CONSTRUCT] {len(cg)} tripletas generadas\")\n",
        "        return\n",
        "    cols = [str(v) for v in res.vars]\n",
        "    print(\" | \".join(cols))\n",
        "    print(\"-\" * 72)\n",
        "    filas = list(res)\n",
        "    for i, row in enumerate(filas):\n",
        "        if maxfilas and i >= maxfilas:\n",
        "            print(f\"... ({len(filas) - maxfilas} filas más)\")\n",
        "            break\n",
        "        print(\" | \".join(\"\" if row[v] is None else str(row[v]) for v in res.vars))\n",
        "    print(f\"({len(filas)} filas)\\n\")\n",
        "\n",
        "ejecuta(\"02_inferencia_conceptos.rq\", g_inf, maxfilas=12)\n",
        "ejecuta(\"01_conceptos_por_tema.rq\", g_inf, maxfilas=4)"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 27,
      "id": "5e8e22d7",
      "metadata": {
        "execution": {
          "iopub.execute_input": "2026-06-23T17:17:50.590249Z",
          "iopub.status.busy": "2026-06-23T17:17:50.589250Z",
          "iopub.status.idle": "2026-06-23T17:17:50.624844Z",
          "shell.execute_reply": "2026-06-23T17:17:50.624844Z"
        },
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "5e8e22d7",
        "outputId": "e10d06c6-8cec-4d3b-8a2f-cb28c8d479e3"
      },
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "========================================================================\n",
            "03_prerrequisitos_transitivos.rq\n",
            "========================================================================\n",
            "prerequisito | etiqueta\n",
            "------------------------------------------------------------------------\n",
            "https://w3id.org/ekg-python/id/tipo_bool | Booleano (bool)\n",
            "https://w3id.org/ekg-python/id/bucle_while | Bucle while\n",
            "https://w3id.org/ekg-python/id/condicional | Condicional (if)\n",
            "https://w3id.org/ekg-python/id/indexacion | Indexación\n",
            "https://w3id.org/ekg-python/id/lista | Lista\n",
            "(5 filas)\n",
            "\n",
            "========================================================================\n",
            "05_errores_por_concepto.rq\n",
            "========================================================================\n",
            "error | concepto | fuente\n",
            "------------------------------------------------------------------------\n",
            "Capturar Exception de forma demasiado amplia | Jerarquía de excepciones | \n",
            "Comparar flotantes con == | Flotante (float) | \n",
            "Concatenar cadena y número (TypeError) | Conversión de tipos | \n",
            "Confundir variable global y local | Ámbito de variables (scope) | \n",
            "Confusión == frente a is | Booleano (bool) | \n",
            "Confusión iteración / recursión | Recursión | \n",
            "Confusión paso por valor / por referencia | Mutabilidad | \n",
            "Copia superficial cuando se necesita profunda | Copia superficial | \n",
            "... (8 filas más)\n",
            "(16 filas)\n",
            "\n",
            "========================================================================\n",
            "06_construct_prereq_directos.rq\n",
            "========================================================================\n",
            "[CONSTRUCT] 356 tripletas generadas\n"
          ]
        }
      ],
      "source": [
        "ejecuta(\"03_prerrequisitos_transitivos.rq\", g_inf)\n",
        "ejecuta(\"05_errores_por_concepto.rq\", g_inf, maxfilas=8)\n",
        "ejecuta(\"06_construct_prereq_directos.rq\", g_inf)"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 28,
      "id": "4fb35e67",
      "metadata": {
        "execution": {
          "iopub.execute_input": "2026-06-23T17:17:50.624844Z",
          "iopub.status.busy": "2026-06-23T17:17:50.624844Z",
          "iopub.status.idle": "2026-06-23T17:17:50.653937Z",
          "shell.execute_reply": "2026-06-23T17:17:50.653937Z"
        },
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "4fb35e67",
        "outputId": "96235c04-bb06-4a57-abd5-85ebfa04958e"
      },
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "========================================================================\n",
            "07_diagnostico_envio.rq\n",
            "========================================================================\n",
            "envio | ejercicio | error | conceptoAfectado | prerequisito\n",
            "------------------------------------------------------------------------\n",
            "Envío 001 | Búsqueda binaria sobre lista ordenada | Error de índice por uno (off-by-one) | Indexación | Lista\n",
            "Envío 002 | Factorial recursivo | Confusión iteración / recursión | Recursión | Función\n",
            "(2 filas)\n",
            "\n",
            "========================================================================\n",
            "10_jerarquia_skos_estrella.rq\n",
            "========================================================================\n",
            "general | etiqueta\n",
            "------------------------------------------------------------------------\n",
            "https://w3id.org/ekg-python/id/grafo_estr | Grafo (estructura)\n",
            "https://w3id.org/ekg-python/id/bfs | Recorrido en anchura (BFS)\n",
            "(2 filas)\n",
            "\n"
          ]
        }
      ],
      "source": [
        "ejecuta(\"07_diagnostico_envio.rq\", g_inf)\n",
        "ejecuta(\"10_jerarquia_skos_estrella.rq\", g_inf)"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "a39b0aae",
      "metadata": {
        "id": "a39b0aae"
      },
      "source": [
        "La consulta 07 materializa el caso de uso central del TFM. Para el *Envío 001* (búsqueda binaria),\n",
        "detecta el error *off-by-one* sobre el concepto *Indexación* y recupera *Lista* como prerrequisito que el estudiante\n",
        "podría no dominar; para el *Envío 002* (factorial recursivo), señala el error *iteración/recursión* sobre *Recursión*, con\n",
        "*Función* como prerrequisito. Ese subgrafo es exactamente el contexto que el GraphRAG inyecta en el modelo.\n",
        "\n",
        "La consulta 10 ilustra la diferencia entre `*` (cero o más pasos, que incluye el nodo de partida y devuelve 2 filas,\n",
        "*BFS* y *Grafo*) y `+` (uno o más pasos, que lo excluye y deja solo *Grafo*)."
      ]
    },
    {
      "cell_type": "markdown",
      "id": "ddf2d351",
      "metadata": {
        "id": "ddf2d351"
      },
      "source": [
        "## 5. Validación SHACL: conformidad y control negativo\n",
        "\n",
        "La integridad estructural del grafo se verifica con SHACL (`ontologia/shapes-ekg.ttl`). Las *shapes* exigen,\n",
        "entre otras restricciones, que todo concepto tenga etiqueta y pertenezca a un tema, que la dificultad sea un entero\n",
        "entre 1 y 5, que `skos:exactMatch` apunte a una entidad Wikidata válida, y que todo ejercicio tenga enunciado,\n",
        "dificultad y al menos un concepto cubierto. La validación se hace sobre el grafo con inferencia, para que\n",
        "`sh:targetClass pyedu:Concepto` alcance los tipos inferidos.\n",
        "\n",
        "Validamos primero el grafo canónico, que debe resultar conforme, y después un control negativo\n",
        "(`ontologia/ejemplo-invalido.ttl`) con violaciones deliberadas, que debe fallar. Si el control negativo\n",
        "dispara violaciones, queda claro que la validación discrimina y no acepta cualquier entrada."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 29,
      "id": "bcff4405",
      "metadata": {
        "execution": {
          "iopub.execute_input": "2026-06-23T17:17:50.653937Z",
          "iopub.status.busy": "2026-06-23T17:17:50.653937Z",
          "iopub.status.idle": "2026-06-23T17:17:50.923888Z",
          "shell.execute_reply": "2026-06-23T17:17:50.923888Z"
        },
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "bcff4405",
        "outputId": "c7fce85a-c58c-4844-e5c2-4cc18fe06a3a"
      },
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "VALIDACIÓN DEL GRAFO CANÓNICO (ekg-python-150.ttl)\n",
            "------------------------------------------------------------\n",
            "Conforme: True\n"
          ]
        }
      ],
      "source": [
        "from pyshacl import validate\n",
        "\n",
        "SHAPES = BASE / \"ontologia\" / \"shapes-ekg.ttl\"\n",
        "\n",
        "conforme, _, texto = validate(\n",
        "    data_graph=ONTO.read_text(encoding=\"utf-8\"),\n",
        "    shacl_graph=SHAPES.read_text(encoding=\"utf-8\"),\n",
        "    data_graph_format=\"turtle\", shacl_graph_format=\"turtle\",\n",
        "    inference=\"rdfs\", advanced=True)\n",
        "\n",
        "print(\"VALIDACIÓN DEL GRAFO CANÓNICO (ekg-python-150.ttl)\")\n",
        "print(\"-\" * 60)\n",
        "print(\"Conforme:\", conforme)"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 30,
      "id": "f152ed15",
      "metadata": {
        "execution": {
          "iopub.execute_input": "2026-06-23T17:17:50.925904Z",
          "iopub.status.busy": "2026-06-23T17:17:50.925904Z",
          "iopub.status.idle": "2026-06-23T17:17:51.159634Z",
          "shell.execute_reply": "2026-06-23T17:17:51.159634Z"
        },
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "f152ed15",
        "outputId": "72e58673-ce23-4c18-eb40-f254a537fd66"
      },
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "CONTROL NEGATIVO (grafo canónico + ejemplo-invalido.ttl)\n",
            "------------------------------------------------------------\n",
            "Conforme: False\n",
            "Violaciones detectadas: 6\n",
            "\n",
            "  Focus Node: pyr:mal_concepto\n",
            "  Message: La dificultad, si existe, debe ser un entero entre 1 y 5.\n",
            "  Focus Node: pyr:mal_ejercicio\n",
            "  Message: Todo ejercicio debe cubrir al menos un concepto.\n",
            "  Focus Node: pyr:mal_concepto\n",
            "  Message: Todo concepto debe pertenecer al menos a un tema.\n",
            "  Focus Node: pyr:mal_ejercicio\n",
            "  Message: Todo ejercicio debe declarar una dificultad entera de 1 a 5.\n",
            "  Focus Node: pyr:mal_concepto\n",
            "  Message: Todo concepto debe tener al menos una etiqueta rdfs:label.\n",
            "  Focus Node: pyr:mal_ejercicio\n",
            "  Message: Todo ejercicio debe tener un enunciado.\n"
          ]
        }
      ],
      "source": [
        "INVALIDO = BASE / \"ontologia\" / \"ejemplo-invalido.ttl\"\n",
        "\n",
        "# Misma lógica que scripts/validar.py: se valida el grafo canónico (150 conceptos)\n",
        "# MÁS ejemplo-invalido.ttl, con inferencia RDFS y modo avanzado. Las violaciones se\n",
        "# cuentan como sujetos distintos con sh:resultMessage en el grafo de resultados.\n",
        "from rdflib.namespace import SH\n",
        "\n",
        "g_neg = Graph()\n",
        "g_neg.parse(ONTO, format=\"turtle\")\n",
        "g_neg.parse(INVALIDO, format=\"turtle\")\n",
        "\n",
        "conforme_neg, report_neg, texto_neg = validate(\n",
        "    g_neg,\n",
        "    shacl_graph=SHAPES.read_text(encoding=\"utf-8\"),\n",
        "    shacl_graph_format=\"turtle\",\n",
        "    inference=\"rdfs\", advanced=True)\n",
        "\n",
        "n_viol = len(set(report_neg.subjects(SH.resultMessage, None)))\n",
        "print(\"CONTROL NEGATIVO (grafo canónico + ejemplo-invalido.ttl)\")\n",
        "print(\"-\" * 60)\n",
        "print(\"Conforme:\", conforme_neg)\n",
        "print(\"Violaciones detectadas:\", n_viol)\n",
        "print()\n",
        "for linea in texto_neg.splitlines():\n",
        "    if \"Message:\" in linea or \"Focus Node\" in linea:\n",
        "        print(\" \", linea.strip())"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "e3ea787b",
      "metadata": {
        "id": "e3ea787b"
      },
      "source": [
        "## 6. Enlazado a Wikidata con `skos:exactMatch`\n",
        "\n",
        "El grafo alinea 30 conceptos con sus entidades equivalentes en Wikidata mediante `skos:exactMatch`. Listamos\n",
        "los alineamientos reales extraídos del grafo."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 31,
      "id": "eb80b5ea",
      "metadata": {
        "execution": {
          "iopub.execute_input": "2026-06-23T17:17:51.159634Z",
          "iopub.status.busy": "2026-06-23T17:17:51.159634Z",
          "iopub.status.idle": "2026-06-23T17:17:51.163680Z",
          "shell.execute_reply": "2026-06-23T17:17:51.163680Z"
        },
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "eb80b5ea",
        "outputId": "7b7b4543-cbdb-4c82-c52b-5e18c9a79d6a"
      },
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Alineamientos skos:exactMatch a Wikidata: 30\n",
            "----------------------------------------------------------------------\n",
            "  Búsqueda binaria                 Q243754\n",
            "  Búsqueda lineal                  Q787903\n",
            "  Clase                            Q4479242\n",
            "  Clausura (closure)               Q535335\n",
            "  Complejidad temporal             Q2393193\n",
            "  Comprensión de listas            Q795065\n",
            "  Conjunto (set)                   Q1514741\n",
            "  Decorador                        Q110938941\n",
            "  Diccionario                      Q80585\n",
            "  Excepción                        Q471748\n",
            "  Expresiones regulares (re)       Q185612\n",
            "  Función lambda                   Q567612\n",
            "  GIL                              Q5570451\n",
            "  Generador (yield)                Q2565187\n",
            "  Grafo (estructura)               Q2479726\n",
            "  Herencia                         Q212542\n",
            "  Iterador (iter, next)            Q1326388\n",
            "  Lista                            Q27948\n",
            "  Notación O grande                Q269878\n",
            "  Ordenación de burbuja            Q60864\n",
            "  Ordenación por mezcla            Q189057\n",
            "  Ordenación rápida                Q486598\n",
            "  Polimorfismo                     Q3240252\n",
            "  Python                           Q28865\n",
            "  Recorrido en anchura (BFS)       Q325904\n",
            "  Recorrido en profundidad (DFS)   Q816319\n",
            "  Recursión                        Q264164\n",
            "  Tabla hash                       Q207440\n",
            "  Tupla                            Q2879072\n",
            "  Árbol                            Q223655\n"
          ]
        }
      ],
      "source": [
        "enlaces = []\n",
        "for s, _, o in g.triples((None, SKOS.exactMatch, None)):\n",
        "    enlaces.append((etiqueta(s), str(o).split(\"/\")[-1], str(o)))\n",
        "\n",
        "print(f\"Alineamientos skos:exactMatch a Wikidata: {len(enlaces)}\")\n",
        "print(\"-\" * 70)\n",
        "for lbl, qid, _ in sorted(enlaces, key=lambda x: x[0]):\n",
        "    print(f\"  {lbl:<32} {qid}\")"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "78e4c689",
      "metadata": {
        "id": "78e4c689"
      },
      "source": [
        "### La elección de `skos:exactMatch` frente a `owl:sameAs`\n",
        "\n",
        "La decisión es deliberada y semánticamente prudente. `owl:sameAs` afirma identidad de individuos: bajo el perfil\n",
        "OWL 2 RL, el razonador fusionaría el concepto propio (`pyr:lista`) con la entidad de Wikidata (`wd:Q27948`),\n",
        "los identificaría como el mismo individuo y propagaría tipos y propiedades en ambos sentidos. La entidad de Wikidata\n",
        "pasaría entonces a ser `pyedu:Concepto` y arrastraría hacia nuestro grafo todo lo que Wikidata afirma de ella,\n",
        "contaminando el modelo. `skos:exactMatch`, en cambio, establece una equivalencia conceptual fuerte entre dos\n",
        "*conceptos* de esquemas distintos sin fusionar los individuos; es la relación de mapeo que SKOS prevé para alinear\n",
        "vocabularios.\n",
        "\n",
        "Lo comprobamos empíricamente: en la sección 3, tras el cierre OWL 2 RL, el número de entidades de Wikidata inferidas\n",
        "como `pyedu:Concepto` es 0. El enlazado aporta valor (descripciones multilingües, federación con el\n",
        "*Wikidata Query Service* en la consulta 08) sin colapsar identidades, en línea con un uso maduro de los datos enlazados."
      ]
    },
    {
      "cell_type": "markdown",
      "id": "953966b5",
      "metadata": {
        "id": "953966b5"
      },
      "source": [
        "## 7. Arquitectura GraphRAG (descripción del código real, O2)\n",
        "\n",
        "La tubería RAG vive en `Sistema-RAG-TFM/scripts/rag_ekg.py` y consta de cinco componentes. Se describe aquí sin\n",
        "ejecutarla, porque depende de modelos servidos localmente (Ollama). El código es real y verificable.\n",
        "\n",
        "### Enlazador de conceptos por AST\n",
        "\n",
        "El componente más fino es el que enlaza el código con el concepto del grafo. En lugar de buscar subcadenas (algo\n",
        "frágil: `try` dentro de `country`, `if ` dentro de `elif `), el método `_conceptos_ast` recorre el árbol de sintaxis\n",
        "abstracta de Python con `ast.walk` y mapea cada tipo de nodo a un identificador del EKG:\n",
        "\n",
        "| Nodo AST | Concepto (`pyr:`) | Nodo AST | Concepto (`pyr:`) |\n",
        "|---|---|---|---|\n",
        "| `ast.For` | `bucle_for` | `ast.ListComp` | `comprension_listas` |\n",
        "| `ast.While` | `bucle_while` | `ast.DictComp` | `comprension_dicts` |\n",
        "| `ast.If` / `ast.IfExp` | `condicional` | `ast.GeneratorExp` | `expresion_generadora` |\n",
        "| `ast.FunctionDef` | `funcion` (+`decorador` si tiene) | `ast.JoinedStr` | `fstring` |\n",
        "| `ast.AsyncFunctionDef` | `funcion` + `async_await` | `ast.Subscript` | `slicing` / `indexacion` |\n",
        "| `ast.Lambda` | `funcion_lambda` | `ast.Compare` con `is`/`is not` | `tipo_bool` |\n",
        "| `ast.ClassDef` | `clase` | llamada a función propia | `recursion` |\n",
        "| `ast.Try` / `ast.Raise` | `excepcion` | `range(...)` | `indexacion` |\n",
        "| `ast.With` | `context_manager` | `.append(...)` | `mutabilidad` |\n",
        "\n",
        "Solo si el código no parsea, por sintaxis rota, se recurre a un respaldo léxico por *token* (palabra completa, no\n",
        "subcadena). Cada nodo detectado se convierte en su IRI `pyr:` y se filtra contra el conjunto de IRIs realmente\n",
        "existentes en el EKG, de modo que el enlazador devuelve una lista ordenada y deduplicada de nodos semilla."
      ]
    },
    {
      "cell_type": "markdown",
      "id": "22ea7d96",
      "metadata": {
        "id": "22ea7d96"
      },
      "source": [
        "### Recuperación de subgrafos (vectorial + simbólica)\n",
        "\n",
        "Los nodos semilla del AST se combinan con una búsqueda por similitud sobre un índice vectorial: cada concepto\n",
        "del grafo se documenta con su etiqueta, su `rdfs:comment` y su tema, y se vectoriza con `nomic-embed-text`\n",
        "(servido por Ollama; los vectores se cachean en `datos/embeddings_conceptos.json`). Así se gana robustez frente a\n",
        "la variabilidad superficial del código.\n",
        "\n",
        "Sobre los nodos semilla se ejecuta una expansión simbólica con SPARQL (`SUBGRAFO_QUERY` en el código), que\n",
        "recupera para cada concepto su dificultad, su tema, sus prerrequisitos (`requierePrerrequisito`), los conceptos\n",
        "con los que contrasta (`contrastaCon`) y los errores conceptuales asociados (`errorSobreConcepto`). Lo que se\n",
        "obtiene es un fragmento conexo del grafo con sus relaciones, y no una lista plana de pasajes; precisamente eso es\n",
        "lo que después permite visualizar el subgrafo y colocar los marcadores de procedencia.\n",
        "\n",
        "### Generación y explicabilidad\n",
        "\n",
        "El generador serializa el subgrafo (conceptos, definiciones, relaciones e identificadores de procedencia) y lo\n",
        "combina con un encuadre de tarea que fija el rol (retroalimentación formativa, no sumativa), las dimensiones a\n",
        "cubrir y el nivel del estudiante. El *prompt* se entrega a un LLM local (`llama3.1:8b` base, o el modelo afinado).\n",
        "La interfaz web (FastAPI + Cytoscape.js) muestra el feedback junto al subgrafo recuperado, con código de color y\n",
        "marcadores de procedencia que cierran el lazo de explicabilidad (O4).\n",
        "\n",
        "Las cuatro configuraciones experimentales comparten esta tubería y solo difieren en el componente generativo y en\n",
        "si la recuperación está activa: A (base, sin grafo), B (afinado QLoRA, sin grafo), C (base + GraphRAG) y\n",
        "D (afinado + GraphRAG)."
      ]
    },
    {
      "cell_type": "markdown",
      "id": "a5e1dcc4",
      "metadata": {
        "id": "a5e1dcc4"
      },
      "source": [
        "## 8. *fine tuning* QLoRA (Sistema B): protocolo y curvas de pérdida reales\n",
        "\n",
        "El Sistema B internaliza el conocimiento en los pesos del modelo en lugar de inyectarlo en contexto. Se afina\n",
        "`Qwen2.5-Coder-7B-Instruct` con QLoRA: el modelo base se cuantiza a 4 bits en formato NF4 (NormalFloat-4) y solo se\n",
        "entrenan adaptadores LoRA de bajo rango (`r = 16`, `alpha = 32`), aplicados a las proyecciones de atención y de\n",
        "las redes de avance. Todo el afinado se ejecuta en una única NVIDIA RTX 5090, sin infraestructura externa.\n",
        "\n",
        "El dataset es sintético, generado por plantillas deterministas ancladas al grafo (2625 registros, 35 esqueletos):\n",
        "cada ejemplo instancia un concepto y un error típico del EKG, sin recurrir a ningún LLM generativo para fabricarlo,\n",
        "lo que favorece el control, la trazabilidad y la reproducibilidad. Dos decisiones resultan clave para la honestidad\n",
        "de la evaluación: el enmascarado del prompt, de modo que la pérdida solo computa los tokens de la respuesta, y la\n",
        "partición *held-out* por esqueleto, en la que las plantillas estructurales de validación no aparecen en\n",
        "entrenamiento, lo que mide transferencia y no memorización.\n",
        "\n",
        "### Curvas de pérdida (cifras reales)\n",
        "\n",
        "| *Run* | Regularización | Pérdida *held-out* por época | Tendencia |\n",
        "|---|---|---|---|\n",
        "| v2 | ninguna | 1,297 → 1,380 → 1,410 | sobreajuste (crece) |\n",
        "| v3 | NEFTune (α=5) + dropout LoRA 0,1 | 1,051 → 1,028 | generaliza (decrece) |\n",
        "\n",
        "El *run* v2 mostró el patrón inequívoco del sobreajuste con datos escasos: la pérdida de validación crece época\n",
        "a época, y que la separación por esqueleto permitiera detectarlo confirma que medía generalización. El *run* v3,\n",
        "con NEFTune (ruido en los *embeddings* de entrada) y *dropout* en los adaptadores, invirtió esa dinámica.\n",
        "La precisión de token *held-out* final fue 0,842."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 32,
      "id": "90fcec36",
      "metadata": {
        "execution": {
          "iopub.execute_input": "2026-06-23T17:17:51.163680Z",
          "iopub.status.busy": "2026-06-23T17:17:51.163680Z",
          "iopub.status.idle": "2026-06-23T17:17:51.490250Z",
          "shell.execute_reply": "2026-06-23T17:17:51.490250Z"
        },
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 443
        },
        "id": "90fcec36",
        "outputId": "73174a2c-3dd2-412d-82f6-6659474bbb49"
      },
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 700x420 with 1 Axes>"
            ],
            "image/png": "iVBORw0KGgoAAAANSUhEUgAAAq8AAAGZCAYAAACnqtiwAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAlpxJREFUeJzs3Xl4TNcbB/DvZJusk4UsgkRsQUgkilKKoqGaolWKVjTWtqqqtvhZW0tRtbSWqmqsRZXSKqpqX9oiQexLSJFIkGSyyTJzfn9M5jaTmSQzZOX7eZ48Mveee+6ZxZ03577nHJkQQoCIiIiIqBIwK+8GEBEREREZi8ErEREREVUaDF6JiIiIqNJg8EpERERElQaDVyIiIiKqNBi8EhEREVGlweCViIiIiCoNBq9EREREVGkweCUiogprx44dmDNnDnJycsq7KUQA+JmsCBi8UoXxyiuvYMiQIeXdDHoMN2/ehEwmQ0RERHk3hUrQhQsXYGFhgejo6HI5/8mTJ/HWW2+hbt26sLS0fKK6IiIiIJPJcPPmTWlb+/bt0b59+2KPPXDgAGQyGQ4cOPBEbSjYlpMnT5ZIfQAwbdo0yGQyo8rKZDJMmzatxM79LCnJzyQ9PgavFdj58+fx9ttvo3r16pDL5fD09MTbb7+NCxcu6JUtyYuh9kKt/TE3N4ebmxt69eqFixcvFnrcb7/9BplMBk9PT6jVapPOefToUfz+++8YP3683r7Y2FgMHz4ctWrVglwuh5ubG3r27Iljx46Z/NzKSkZGBpYsWYKXX34Z1apVg4ODAwIDA7Fs2TKoVCqj6qhVq5bO+6D9GT58uEltOXDgAF5//XV4eHjAysoKbm5uCAkJwdatWx/nqZW79u3bG3xdZDKZ3pdJwf12dnZo1KgRZsyYgYyMDKPP17hx49J4KgCADRs2YOHChaVW/5O0oVGjRujWrRumTJlS5m1KTk5G79698fnnn+ONN94o8/NT6agIn/fHxc9kxWFR3g0gw7Zu3Yq+ffvCxcUFgwYNgo+PD27evInvvvsOW7ZswaZNm9C9e/dSbcPIkSPRvHlz5OTk4OzZs1i+fDkOHDiA6OhoeHh46JVfv349atWqhZs3b+LPP/9Ep06djD7XvHnz0LFjR9StW1dn+9GjR/HKK68AAAYPHoxGjRohPj4eERERaNOmDZYsWYL33nvvyZ5oKbhx4wY+/PBDdOzYEaNHj4ZCocCePXvw/vvv48SJE1i9erVR9TRt2hSffPKJzrb69esb3Y6pU6fi008/Rb169TBs2DB4e3vjwYMH+O233/DGG29g/fr16Nevn0nPrbz973//w+DBg3W2paenY/jw4Xj55Zf1ynfu3BkDBgwAAKSlpeHw4cOYPHkyzpw5gx9//LFM2lyUDRs2IDo6GqNGjaqQbRg+fDheeeUVXL9+HXXq1CmzNkVFRWHSpEkICwsrtXP8/vvvpVY3GVYRPu+Pqyw+k2QkQRXOtWvXhK2trWjQoIFISEjQ2ZeYmCgaNGgg7O3txY0bN6Tt33//vQAg/vnnnyc+//79+wUA8eOPP+psX7ZsmQAg5syZo3dMWlqasLOzE4sXLxaBgYFi4MCBRp/v3r17wsLCQqxcuVJn+8OHD4WHh4dwd3cX165d09mXkZEh2rZtK8zNzcXx48dNeHZlIzExUURHR+ttf/fddwUAcfXq1WLr8Pb2Ft26dXvsNvz4448CgOjVq5fIzs7W2797927xyy+/PHb9+cXExAgA4vvvvy+R+tLS0kwqv3btWgFArF+/Xmc7APHBBx/ole/Vq5cwMzMTmZmZxdbdrl074efnZ1J7TNGtWzfh7e1tVNnMzEyhUqnKtA3Z2dnC2dlZTJ48ucTPW5JUKlWR76f2GhkTE2Ny3dpr4v79+x+/gQbaUhLXa62pU6cKY7/SAYipU6eW2LlNYcrnvayYer2h8se0gQpo3rx5yMjIwIoVK+Dq6qqzr2rVqvjmm2+QlpaGefPmmVx3ZGQkunbtCoVCAXt7e3Ts2BEnTpww6ti2bdsCAK5fv663b9u2bcjMzMSbb76Jt956C1u3bsWjR4+Mqnfnzp3Izc3V66n95ptvEB8fj3nz5un1+NjY2Ei9l59++ikAzS0dc3NzLF68WCp3//59mJmZoUqVKhBCSNvfe+89vd7jv/76C126dIGjoyNsbW3Rrl07HD16VKeMNq/s2rVrGDhwIJycnODo6Ih3331X5zZ01apV4efnp/dce/bsCQBFpl8UlJ2djfT0dKPLa02ePBkuLi5YtWqVwdys4OBgvPrqq9LjhIQEDBo0CO7u7rC2tkZAQIDBHuLk5GQMHDgQjo6OcHJyQmhoKJKTkw224dKlS+jVqxdcXFxgbW2N5557Djt27NApo015OXjwIN5//324ubmhRo0aJj3XDRs2wM7Ozui7ER4eHpDJZLCweLybTzKZDCNGjMDPP/+Mxo0bQy6Xw8/PD7t379Ypl5qailGjRumkvHTu3BmnT58GoElJ2LlzJ27duiWlNtSqVQvAf+k7GzduxKRJk1C9enXY2tpCqVQWmt9oKK8TAHbt2oV27drBwcEBCoUCzZs3x4YNG4ptAwBYWlqiffv22L59u06dGRkZuHTpEu7fv1/s66VNvTh16hRat24NGxsb+Pj4YPny5Xpls7KyMHXqVNStWxdyuRw1a9bEuHHjkJWVZfA9WL9+Pfz8/CCXy6XX//z583jppZdgY2ODGjVqYMaMGQZTmQzlvN6+fRs9evSAnZ0d3Nzc8PHHH+udGwAOHz6MN998E15eXlI7P/74Y2RmZhb7euR/rqNHj4arqyvs7OzQs2dPJCYm6pXbtWsX2rZtCzs7Ozg4OKBbt244f/68UfV//PHHcHV1hYODA1577TXcvn3b6PYBmrtIb775JlxcXGBra4vnn38eO3fu1ClT2OeuYK5wcZ81Q/K/z76+vrC2tkazZs1w6NAhvbLGfL89zvXmcT6TJdFWQHO9/fjjj6VrSI0aNTBgwADp/112djamTJmCZs2awdHREXZ2dmjbti32799f5HOq7Jg2UAH98ssvqFWrlhQsFvTiiy+iVq1a+OWXX7B06VKj6z1//jzatm0LhUKBcePGwdLSEt988w3at2+PgwcPomXLlkUer70wOTs76+1bv349OnToAA8PD7z11luYMGECfvnlF7z55pvFtuvYsWOoUqUKvL29dbb/8ssvsLa2Ru/evQ0e5+PjgzZt2uCPP/7Ao0eP4OTkhMaNG+PQoUMYOXIkAODIkSOQyWR4+PAhLly4IAWUhw8f1nl9//zzT3Tt2hXNmjXD1KlTYWZmhu+//x4vvfQSDh8+jBYtWuicu3fv3vDx8cHs2bNx+vRprFy5Em5ubpgzZ06RzzU+Ph6AJrg1xp9//glbW1uoVCp4e3vj448/xkcffVTscVevXsWlS5cQFhYGBweHYstnZmaiffv2uHbtGkaMGAEfHx/8+OOPGDhwIJKTk6VzCiHQvXt3HDlyBMOHD0fDhg2xbds2hIaG6tV5/vx5vPDCC6hevTomTJgAOzs7bN68GT169MBPP/0kBfJa77//PlxdXTFlyhSTgvXExETs3bsXffr0gZ2dnd7+R48eSRf69PR0HD16FKtXr0a/fv0eO3gFNJ+trVu34v3334eDgwMWL16MN954A7GxsahSpQoAzS33LVu2YMSIEWjUqBEePHiAI0eO4OLFiwgKCsL//vc/pKSk4Pbt21iwYAEAwN7eXuc8n332GaysrDBmzBhkZWXBysrKpHZGREQgLCwMfn5+CA8Ph5OTEyIjI7F7927069fPqDY0a9YM27dvh1KphEKhAAD8/fff6NChA6ZOnWrU4J+kpCS88sor6N27N/r27YvNmzfjvffeg5WVlXQbVq1W47XXXsORI0cwdOhQNGzYEOfOncOCBQtw5coV/Pzzzzp1/vnnn9i8eTNGjBiBqlWrolatWoiPj0eHDh2Qm5srfe5WrFgBGxubYtuYmZmJjh07IjY2FiNHjoSnpyfWrl2LP//8U6/sjz/+iIyMDLz33nuoUqUK/v77b3z11Ve4ffu20ekoH374IZydnTF16lTcvHkTCxcuxIgRI7Bp0yapzNq1axEaGorg4GDMmTMHGRkZWLZsGdq0aYPIyMgig7/Bgwdj3bp16NevH1q3bo0///wT3bp1M6ptAHDv3j20bt0aGRkZGDlyJKpUqYLVq1fjtddew5YtW/T+DxfHmM+aIQcPHsSmTZswcuRIyOVyLF26FF26dMHff/8t5aOb+v1m7PXG1M9kSbY1LS0Nbdu2xcWLFxEWFoagoCDcv38fO3bswO3bt1G1alUolUqsXLkSffv2xZAhQ5CamorvvvsOwcHB+Pvvv9G0aVNj357Kpby7fklXcnKyACC6d+9eZLnXXntNABBKpVIIYdxtqB49eggrKytx/fp1advdu3eFg4ODePHFF6Vt2ltkq1atEomJieLu3bti9+7dom7dukImk4m///5bp17tbf9vv/1W2ta6detin4NWmzZtRLNmzfS2Ozk5iYCAgCKPHTlypAAgzp49K4QQ4oMPPhDu7u7S/tGjR4sXX3xRuLm5iWXLlgkhhHjw4IGQyWRi0aJFQggh1Gq1qFevnggODhZqtVo6NiMjQ/j4+IjOnTtL27S35sLCwnTa0bNnT1GlSpUi25qVlSUaNWokfHx8RE5OTpFlhRAiJCREzJkzR/z888/iu+++E23bthUAxLhx44o9dvv27QKAWLBgQbFlhRBi4cKFAoBYt26dtC07O1u0atVK2NvbS5+zn3/+WQAQc+fOlcrl5uZKbcufNtCxY0fRpEkT8ejRI2mbWq0WrVu3FvXq1ZO2aT+7bdq0Ebm5uUa1N7+vvvpKABC//fab3j4ABn969Oih066iGEobACCsrKx00lnOnDkjAIivvvpK2ubo6GgwbSG/wm6jav8f1q5dW2RkZOjsK+wWccFb48nJycLBwUG0bNlS75Z6/s96cbdyN2zYIACIv/76S699xtx+bteunQAg5s+fL23LysoSTZs2FW5ublJay9q1a4WZmZk4fPiwzvHLly8XAMTRo0elbQCEmZmZOH/+vE7ZUaNG6bU1ISFBODo66qUNtGvXTrRr1056rP1/sHnzZmlbenq6qFu3rl7aQMH3RAghZs+eLWQymbh161aRr4f2ferUqZPO+/Dxxx8Lc3NzkZycLIQQIjU1VTg5OYkhQ4boHB8fHy8cHR11thf8TERFRQkA4v3339c5tl+/fka/b9rXMv/7kZqaKnx8fEStWrWkFJbCUjIMpVuYmjag/T978uRJadutW7eEtbW16Nmzp7TN2O83U683pn4mS7KtU6ZMEQDE1q1b9dql/dzk5uaKrKwsnX1JSUnC3d1d73vqacK0gQomNTUVAIrtLdPu15Yvjkqlwu+//44ePXqgdu3a0vZq1aqhX79+OHLkCJRKpc4xYWFhcHV1haenJ7p06YKUlBSsXbsWzZs31ym3ceNGmJmZ6Yy+7Nu3L3bt2oWkpKRi2/bgwQODvbmpqakmvw5t27bFvXv3cPnyZQCaHtYXX3wRbdu2xeHDhwFoesyEEFLPa1RUFK5evYp+/frhwYMHuH//Pu7fv4/09HR07NgRhw4d0rvlWHDEf9u2bfHgwQO91zC/ESNG4MKFC/j666+N6vHbsWMHxo0bh+7duyMsLAwHDx5EcHAwvvzyy2Jv/WnbYUyvK6CZKcLDwwN9+/aVtllaWmLkyJFIS0vDwYMHpXIWFhY6g+TMzc3x4Ycf6tT38OFD/Pnnn+jduzdSU1Ol1/TBgwcIDg7G1atXcefOHZ1jhgwZAnNzc6Pam9+GDRvg6uqKzp07G9zfvXt37N27F3v37sX27dsRHh4u9TqKfKkkpurUqZNOOou/vz8UCgVu3LghbXNycsJff/2Fu3fvPvZ5QkNDjeo1NGTv3r1ITU3FhAkTYG1trbPP2GmVgP/utuRPEWjfvj2EEEZPuWRhYYFhw4ZJj62srDBs2DAkJCTg1KlTADS9mQ0bNkSDBg2kz8z9+/fx0ksvAYDerdB27dqhUaNGOtt+++03PP/88zp3S1xdXdG/f/9i2/jbb7+hWrVq6NWrl7TN1tYWQ4cO1Sub/z1JT0/H/fv30bp1awghEBkZWey5AGDo0KE670Pbtm2hUqlw69YtAJr3Lzk5GX379tV5PczNzdGyZcsibw3/9ttvACDdhdIyZaDUb7/9hhYtWqBNmzbSNnt7ewwdOhQ3b940OPNNaWjVqhWaNWsmPfby8kL37t2xZ88eqFSqx/p+M/Z6Y+pnsiTb+tNPPyEgIMBgD7f2c2Nubi7djVGr1Xj48CFyc3Px3HPPSelJTyOmDVQwxgalqampkMlkRt9+TkxMREZGBnx9ffX2NWzYEGq1Gv/++69OnuaUKVPQtm1bpKWlYdu2bVKQWtC6devQokULPHjwAA8ePAAABAYGIjs7Gz/++KPBC39BhoIIBwcHo14HAHBzcwPwX17u4cOHUaNGDURGRmLGjBlwdXXFF198Ie1TKBQICAgAoLnFDsDgrW+tlJQUnQDby8tLZ792X1JSknRbNb958+bh22+/xWeffSbNnmAqmUyGjz/+GHv27MGBAwfw9ttvIzMzEykpKTrlPDw8pDYY+8fNrVu3UK9ePb33t2HDhtJ+7b/VqlXTu9VX8HN17do1CCEwefJkTJ482eA5ExISUL16demxj4+P9Ht2djYePnyoU97V1VXvy+bGjRs4fvw4RowYUegfBDVq1NDJp37ttddQpUoVjBkzBr/++itCQkKQlpaGtLQ0qYy5ublevnlBBT8DgOZzkP8Ptrlz5yI0NBQ1a9ZEs2bN8Morr2DAgAE6X1rFyf+6mEqbn/6kU31p/3+aEvAW5OnpqZfWoZ054+bNm3j++edx9epVXLx4sdDXPiEhQeexodfm1q1bBlOgDF37DB1bt25dvedp6NjY2FhMmTIFO3bs0PsjveD/ycIUdR0B/rs2aQOlggxda7Ru3boFMzMzvfECBZ9LUf/XCnst818XSnMaOa169erpbatfvz4yMjKkHGFTv9+M/X9l6meyJNt6/fp1o6bkWr16NebPn49Lly7pLJzwJNeOio7BawXj6OgIT09PnD17tshyZ8+eRY0aNUzOfzNFkyZNpC/9Hj16ICMjA0OGDEGbNm1Qs2ZNAJr/2P/88w8Aw/9p169fX2zwWqVKFYM9tI0aNcLp06eRlZUFuVxu8NizZ8/CyspKCoI8PT3h4+ODQ4cOoVatWhBCoFWrVnB1dcVHH32EW7du4fDhw2jdurUUqGl7VefNm1doflDBYK2wv9gNBeEREREYP348hg8fjkmTJhl+EYykfd21XzabNm3Cu+++q9eGBg0aAADOnTv3ROd7XNrXdMyYMQgODjZYpuC0aPl7so4dO4YOHTro7I+JidHL79MOOjKmVy2/jh07AgAOHTqEkJAQfPHFF5g+fbq039vbW2/wSUHGfAZ69+6Ntm3bYtu2bfj9998xb948zJkzB1u3bkXXrl2NaquhXtfCgkhj5xA2lfb/p7F/LD8utVqNJk2a4MsvvzS4X/v513rcHuknpVKp0LlzZzx8+BDjx49HgwYNYGdnhzt37mDgwIFGz3Nd3GdIW8/atWsNTk/4JDnbWsb+XytKWX8eS4Kxnx1TP5Nlbd26dRg4cCB69OiBsWPHws3NDebm5pg9e7bBwdVPCwavFVBISAi++eYbHDlyROd2jdbhw4dx8+ZNjB492ug6XV1dYWtrK91Oz+/SpUswMzMr9j/h559/jm3btmHmzJnSKOH169fD0tISa9eu1bsQHzlyBIsXL0ZsbKzBXiqtBg0a4KefftLbHhISgmPHjuHHH3/E22+/rbf/5s2bOHz4MLp3765zIWrbti0OHToEHx8fNG3aFA4ODggICICjoyN2796N06dP6wQq2p4JhUJh0ty0xti+fTsGDx6M119/HUuWLHni+rS3pLW9AMHBwdi7d69eufr168PX1xfbt2/HokWLih0U4e3tjbNnz0KtVuv0vl66dEnar/133759SEtL06mz4OdK27NoaWn5WK9pQECA3vMy9OW9YcMG1KlTB88//7xJ9efm5gKA1Ns6YMAAnf9rJRkUVatWDe+//z7ef/99JCQkICgoCDNnzpSC18fpzdT20CUnJ8PJyUnaru0h19J+tqOjo/X+WMivuDbExMTAzMzMpDmGC7p79y7S09N1el+vXLkCAFKgVKdOHZw5cwYdO3Z87F5eb29vqccyP0PXPkPHRkdHQwihc/6Cx547dw5XrlzB6tWrpTmEARj8v/gktO+fm5ubyf+PvL29oVarcf36dZ1evoLPpaj/a97e3oV+Z2j3A7qfx/wKfh6Bx/u8G3o/r1y5AltbW+la+KTfb4Ux9TNZkm2tU6dOsavbbdmyBbVr18bWrVt12jd16tRi21qplUumLRXp6tWrwtbWVjRq1Ejcv39fZ9+DBw9Eo0aNhEKhMHme1x49egi5XK6TVB8fHy8UCoXBAVsF53kVQojevXsLuVwu4uLihBBC1K1bV7z00ksGz3f79m0hk8nE559/XuTz/e677wQAneR1If6b59XDw0NvX2Zmpmjfvr2wsLAQJ06c0Nn37bffCgDC19dXjBo1StretWtXUb9+fb0BCCqVStSpU0fUq1dPpKam6rUv/1y72kERiYmJOmUMDVg4ePCgsLa2Fh06dChycFB2dra4ePGiuHv3rrTtwYMHeoMJsrOzxQsvvCCsrKyk178oGzduFABEnz59DA4Q27NnjzTPq3agyoYNG6T9OTk54oUXXnjsAVvt27cXLi4uOs9LK/9r+rhzXp4+fVoAKHL+URQyz6t2IIR2EF9RChuwZaheb29vERoaKoTQvC7agTf5NW/eXDz33HPS4z59+ggnJye9ckX9P/z1118FALF9+3ZpW1pamvDy8tL5HKakpAgHBwfRokWLIgdsFdYGrZ49e4omTZrobEtPTxcXL17U+79gSFEDtlxdXaUBWxEREQKA+Oabb/TqyMjI0JmPs7D3oCwGbJ09e1YAEBEREVI5tVotunXrZtR8x4V95gsOcEpJSREKhUK0a9fO4FzNhq5NWpGRkSU2YOvYsWPStrS0NFG7dm2dAVvR0dECgDQIVgjN579ly5Z6A7aK+6wVhLxBUKdOnZK2xcbGCmtra9GjRw9pm7Hfb6Zeb0z9TJZkW40ZsPX666+L2rVr68z/fOLECSGTySrcfLoliT2vFVDdunWxZs0a9O3bF02aNNFbYSspKQkbN240mM+yatUqvbkmAeCjjz7CjBkzsHfvXrRp0wbvv/8+LCws8M033yArKwtz5841qm1jx47F5s2bsXDhQvTs2VOaWsmQ6tWrIygoCOvXrze47KtWt27dYGFhgT/++EMnxcDZ2RlbtmzBK6+8gqCgIL0Vtm7cuIGvv/5aLydLm/d6+fJlzJo1S9r+4osvYteuXZDL5TqDzszMzLBy5Up07doVfn5+ePfdd1G9enXcuXMH+/fvh0KhwC+//GLU66N169YtvPbaa5DJZOjVq5fe1Dn+/v7w9/cHANy5cwcNGzZEaGgoIiIiAGgGa82YMQO9evWCj48PHj58KK1MM2vWLIO9kAX16dMH586dw8yZMxEZGYm+fftKK2zt3r0b+/btk267Dx06FN988w0GDhyIU6dOoVatWtiyZQuOHj2KhQsXSrnYISEheOGFFzBhwgTcvHkTjRo1wtatWw3m+C1ZsgRt2rRBkyZNMGTIENSuXRv37t3D8ePHcfv2bZw5c8ak17Sg9evXAyg+ZeDKlStYt24dAE2umXaFs7p16+Kdd955ojYUJTU1FTVq1ECvXr0QEBAAe3t7/PHHH/jnn38wf/58qVyzZs2wadMmjB49Gs2bN4e9vT1CQkKKrPvll1+Gl5cXBg0ahLFjx8Lc3ByrVq2Cq6srYmNjpXIKhQILFizA4MGD0bx5c/Tr1w/Ozs44c+YMMjIypHl8i2pDTk6ONCdmfqZOleXp6Yk5c+bg5s2bqF+/PjZt2oSoqCisWLFCmof4nXfewebNmzF8+HDs378fL7zwAlQqFS5duoTNmzdjz549eO6554o8z7hx47B27Vp06dIFH330kTRVlvbuQlGGDBmCr7/+GgMGDMCpU6dQrVo1rF27Fra2tjrlGjRogDp16mDMmDG4c+cOFAoFfvrpJ6MGqJpCoVBg2bJleOeddxAUFIS33npLeo937tyJF154AV9//bXBY5s2bYq+ffti6dKlSElJQevWrbFv3z5cu3bN6PNPmDABP/zwA7p27YqRI0fCxcUFq1evRkxMDH766SfpLo2fnx+ef/55hIeH4+HDh3BxccHGjRulOxz5Pc7nvXHjxggODtaZfgqAzh20kvh+M8TUz2RJtnXs2LHYsmUL3nzzTYSFhaFZs2Z4+PAhduzYgeXLlyMgIACvvvoqtm7dip49e6Jbt26IiYnB8uXL0ahRI508/qdOeUfPVLhz586Jfv36CQ8PD2FmZiYACGtra72pYYT476/Jwn7+/fdfIYSmtyo4OFjY29sLW1tb0aFDB52/qoUousdHCE2PmkKhEAMHDjTYY5rftGnTBABx5syZIp/ra6+9Jjp27Ghw382bN8XQoUOFl5eXsLCwkJ7TH3/8UWh9bm5uAoC4d++etO3IkSMCgGjbtq3BYyIjI8Xrr78uqlSpIuRyufD29ha9e/cW+/btk8oY2/OqfQ0L+8nf66FdnUrbYyeEECdPnhQhISGievXqwsrKStjb24s2bdro9AgZa9++faJ79+7Czc1NWFhYCFdXVxESEqLTayeEZsqzd999V1StWlVYWVmJJk2aGOxBevDggXjnnXeEQqEQjo6O4p133pF6eQqWv379uhgwYIDw8PAQlpaWonr16uLVV18VW7Zs0XvtTOl5ValUonr16iIoKKjIcgVfd3Nzc1GjRg0xdOhQnc9GUR635zUrK0uMHTtWBAQECAcHB2FnZycCAgLE0qVLdY5JS0sT/fr1E05OTgKA1FtS3P/DU6dOiZYtWworKyvh5eUlvvzyy0KnLNqxY4do3bq1sLGxEQqFQrRo0UL88MMPxbZBCCF27dolAP1V4UydKsvPz0+cPHlStGrVSlhbWwtvb2/x9ddf65XNzs4Wc+bMEX5+fkIulwtnZ2fRrFkzMX36dJGSkiKVK+w9EELTM9quXTthbW0tqlevLj777DPpDk9RPa9CaKY2eu2114Stra2oWrWq+Oijj8Tu3bv1ehAvXLggOnXqJOzt7UXVqlXFkCFDpOnSSqrnNf/24OBg4ejoKKytrUWdOnXEwIEDdaZkMjR9WmZmphg5cqSoUqWKsLOzEyEhIeLff/81+n0TQvN/uFevXsLJyUlYW1uLFi1aiF9//dVguU6dOgm5XC7c3d3FxIkTxd69e/WeT1GfNUO07/O6detEvXr1hFwuF4GBgQZXOzPm++1xrjemfiZLqq1CaK63I0aMkL4LatSoIUJDQ6W7smq1WsyaNUt4e3tL5/v1119FaGjoU93zKhPiCeaKoTK1Zs0aDBw4EG+//TbWrFlT3s0pUYcPH0b79u1x6dIlgwO/8tu3bx9eeeUVtGnTBrt27SrVQWtEz7oePXpAJpNh27Ztj11H+/btcf/+/WLz94gKkslk+OCDDwrtYa5IKlNbKzvO81qJDBgwALNnz8batWsxceLE8m5OiWrbti1efvllo27vdOzYEatXr8b+/fvx7rvvPtFcnURUuIsXL+LXX3/FZ599Vt5NISKSMHitZMaPHw8hhE4u59Ni165d+Pbbb40q+9Zbb0GtVmP9+vVPNPckERWuYcOGyM3NLZO5PImobGmnCvT09IRMJtNb6rYoR48ehYWFhd70ksbUKYTAlClTUK1aNdjY2KBTp04GZ2koCoNXIiIiomdMeno6AgICTJ7GMTk5GQMGDJDmyza1zrlz52Lx4sVYvnw5/vrrL9jZ2SE4OBiPHj0yug3MeSUiIiJ6hmnz2nv06FFs2bfeegv16tWDubk5fv75Z0RFRRldpxACnp6e+OSTTzBmzBgAmhXp3N3dERERgbfeesuo9rLnlYiIiIiK9f333+PGjRuPvQhCTEwM4uPjdRbdcHR0RMuWLXH8+HGj6+E8r0RERERUpKtXr2LChAk4fPjwYy9NHB8fDwBwd3fX2e7u7i7tMwaDVwPUajXu3r0LBwcHDgYiIiKip15GRgaUSqXBfSqVCn369MGECRPg4eEBpVKJrKwsqNXqQo8BgPv37+stO14SmPNqwO3btx97HWQiIiIi0vj3339Ro0YNAMCNGzdQp04dREZG6sxU0K5dOzRt2hSLFi0yqk72vBqgXQrz33//hUKhKNVzqdVqJCYmwtXVtcT/MiGipxevHURkqsKuG46Ojli/fj1effXVQo+7dOmSzraVK1fi0KFDWLNmDby9vWFnZ6ez39HREcB/MRUA+Pj4wMPDA/v27ZOCV6VSib/++gvvvfee0c+DwasB2lQBhUJRJsHro0ePoFAo+AVEREbjtYOITJX/upGRkYFr165J++7du4cbN27AxcUFXl5eCA8Px507d6QVPZ9//nmdunbv3g1bW1ud7WlpaTp1AsC5c+fg5eUFLy8vyGQyjBo1CjNmzEC9evXg4+ODyZMnw9PT06iZDrQYvBIRERE9Y06ePIkOHTpIj0ePHg0ACA0NRUREBOLi4hAbG/tEdQKaFTS1dQLAuHHjkJ6ejqFDhyI5ORlt2rTB7t27YW1tbfR5mPNqgFKphKOjI1JSUsqk5zUhIQFubm7sPSEio/HaQUSmKsvrRmnGUrziEREREVGlweCViIiIiCoNBq9EREREVGkweCUiIiKiSoPBKxEREdFTTqhUSD79D5SH/0Ty6X8gVKrybtJj41RZRERERE+xxAN7cW3h58hOuAcAiANg5eaOuqMmwLV95/Jt3GNgzysRERHRUyrxwF5cmDhaCly1shMScGHiaCQe2FtOLXt8DF6JiIiInkJCpcK1hZ8DMDSlv2bb9YVzKl0KAYNXIiIioqeIOisLj+7FIe6Xn/R6XHUJZCXEI+XMqTJrW0lgzisRERFRBSZyc5GTkozspAfISXqI7KSHyMn7kX5P/u93VUa6SfVn379fSi0vHQxeiYiIiMqQUKuRm6qUglFNEJqEnPzBabLmcXbSQ+QqU0w+h8zCAuZ2DshNSSq2rFXVqo/zNMoNg1ciIiKiJyCEgCojPS/wfICch5rgM7uQYDQnJRkwNc/UzAyWjk6wcq4CS2cXWDo5w8rZBZZ5j62cnTXbnavAytkF5nb2gFqNE2+8jOyEBBjOe5VB7uYOx4BmJfAqlB0Gr0REldihQ4cwf/58nDp1CnFxcdi2bRt69OhRaPkjR45g/PjxuHTpEjIyMuDt7Y1hw4bh448/lsqoVCpMmzYN69atQ3x8PDw9PTFw4EBMmjQJMpkMgObLeurUqfj222+RnJyMF154AcuWLUO9evVK+ykTlQlV1iPkPHz4X+9oclLebfm8gDQ5Ka/XVBOQipwck89h4aDICz61gajLfwFpvuDUytkFFg4KyMzNTTuBuTnqjpqACxNHA5BBN4DV/F+uM2q86fWWMwavRESVWHp6OgICAhAWFobXX3+92PJ2dnYYMWIE/P39YWdnhyNHjmDYsGGws7PD0KFDAQBz5szBsmXLsHr1avj5+eHkyZN499134ejoiJEjRwIA5s6di8WLF2P16tXw8fHB5MmTERwcjAsXLsDa2rpUnzPR41Dn5iAnKSkv8MyfM/ogr1f0v5zR7KQHUGdmmnwOc1tbWDrlD0LzfnfK97uzi6aMkzPMLC1L4Znqcm3fGY1mfakzzysAyN3cUWfU+Eo5z6tMCGGoH7lMHDp0CPPmzTO6xyC/o0ePol27dmjcuDGioqJ09i1ZsgTz5s1DfHw8AgIC8NVXX6FFixZGt0upVMLR0REpKSlQKBQmPCPTqdVqJCQkwM3NDWZmnPyBiIxj6Nohk8lMuo5qvf7667Czs8PatWsBAK+++irc3d3x3XffSWXeeOMN2NjYYN26dRBCwNPTE5988gnGjBkDAEhJSYG7uzsiIiLw1ltvlcyTJCqCUKmQo0zRG6yUnfe44MCm3FSlyeeQWVrCyqWKfkDq5KLbU+rkAktnZ5hb25TCMy0ZQqVCUuRJ3I+5jqo+deAc+Fyp9riWZixVrj2vpvYYaCUnJ2PAgAHo2LEj7t3TnQJi06ZNGD16NJYvX46WLVti4cKFCA4OxuXLl+Hm5lbST4GIqFKLjIzEsWPHMGPGDGlb69atsWLFCly5cgX169fHmTNncOTIEXz55ZcAgJiYGMTHx6NTp07SMY6OjmjZsiWOHz/O4JUeixACqrTUQoNPveA0JRlQq007ibl5Xt7of7fjLZ2c84LQvFxSZ2fpd3NbOylVprKTmZvDKag5smt4w8nNDbJK3GFWrsFr165d0bVrV5OPGz58OPr16wdzc3P8/PPPOvu+/PJLDBkyBO+++y4AYPny5di5cydWrVqFCRMmGKwvKysLWVlZ0mOlUvPXmVqthtrU/xgmUqvVEEKU+nmI6OlS2LXD2OuWl5cXEhMTkZubi6lTpyIsLEw6bty4cUhJSUGDBg1gbm4OlUqFGTNmoG/fvlCr1bh79y4AwNXVVedcbm5uiIuL4/WMJKrMjAL5og+lx/l7S7XBqsjNNfkcFgpH3dvzTs7S44K9pBYOCpOCNiEEyvEGdYkry5ijNM9R6XJev//+e9y4cQPr1q3T6SkAgOzsbJw6dQrh4eHSNjMzM3Tq1AnHjx8vtM7Zs2dj+vTpetsTExPx6NGjkmu8AWq1GikpKRBCMG2AiIxW2LUjJSUFCQkJxR6/detWpKen49SpU5g1axZcXV3Rs2dPAMDPP/+MdevWYenSpfD19UV0dDSmTp0Ke3t79O7dG0lJmql37t+/D/N8tx2zsrIgk8mMOj9VTiInB7nKFKhSkqBKSUZuSjJUKclQKfP9npIMlTIFuSnJEFmmf4ea2djC3NEJ5o5OsHB0grnCEeaOzprfCz52UEBmUXgoIwBk5/0gKxvIqlzzmZa0sow5UlNTS63uShW8Xr16FRMmTMDhw4dhYeDDev/+fahUKri7u+tsd3d3x6VLlwqtNzw8HKNHj5YeK5VK1KxZE66urmWS8yqTyeDq6srglYiMVti1w9HR0agUKW2Zdu3aITMzEwsXLsSwYcMAADNnzkR4eLg0gKtdu3ZITk7G0qVLMWLECDRs2BCAZlaC/OdKSUlBQEAAU7QqEU3eaLLurXlpFH2+XtK8QU6qNNMDEjMreb5eUOcCeaLabf/dwjeTy0vhmRJQtjFHaQ7crDTBq0qlQr9+/TB9+nTUr1+/ROuWy+WQG/jPYmZmViYBpUwmK7NzEdHTw9C143GuJUIIZGVlScdlZGTA3Nxcpx4LCwuo1WqYmZmhTp068PDwwP79+xEUFARA80f/X3/9hffee4/XsnIkhEBuqrLQlZcKjrTPSUkGTLwtLjO3gKV2TlGn//JDrQoGonkBqrmt7VOTN/o0KKuYozTrrzTBa2pqKk6ePInIyEiMGDECwH+5GxYWFvj999/Rpk0bmJub6w3iunfvHjw8PMqj2UREpSotLQ03btyQHsfExCAqKgouLi7w8vJCeHg47ty5gzVr1gDQzMbi5eWFBg0aANDM+vLFF19IU2ABQEhICGbOnAkvLy/4+fkhMjISX375JcLCwgBovvxGjRqFGTNmoF69etJUWZ6enibPdEBFE0JAnZlZYLJ7A4OZpIA0CUJlYt6oTAZLRye9YFSTQ+qcbxL8vLxRe4dKPdiHKr9KE7wqFAqcO3dOZ9vSpUvx559/YsuWLfDx8YGVlRWaNWuGffv2SRdQtVqNffv2SQEvEdHT5OTJk+jYsaP0WJsCFRoaioiICMTFxSE2Nlbar1arER4ejpiYGFhYWKBOnTqYM2eOlDIAAF999RUmT56M999/HwkJCfD09MSwYcMwZcoUqcy4ceOQnp6OoUOHIjk5GW3atMHu3bs5x6sR1FlZUrBZWDCa/7E6O6v4Sgswt3cwPJK+wMT3ls7OsFQ4FZk3SlTRlOs8r2lpabh27RoAIDAwEF9++SU6dOhQaI9BQdOmTcPPP/+sM8/rpk2bEBoaim+++QYtWrTAwoULsXnzZly6dEkvF7YwnOeViCo6XjsqDpGbi5yU5Hzr1BexLGjSQ6gy0k0+h5ncWqf3M3/O6H9LhDpL282srErhmVJlV5bXjad2nteTJ0+iQ4cO0uPiegyM0adPHyQmJmLKlCmIj49H06ZNsXv3bqMDVyIierYJtRq5qcq8ADT/yksPCkz59ADZyUnITUk2+RwyCwudKZx0pnRy0Q9OzW1sS/6JElVS5drzWlGx55WIKjpeO4wnhIAqI93ApPcFlwXNC06TkwCVyrSTyGSwdMw3kt5Zd+CSXjBq78BBTFTm2PNKRERUTlRZj5Dz0IhlQfP2i+xsk89h4aAoMHCp4KpM+UbVKxxLdalNIvoPg1ciIip36twczS36IqZ1yh+QqjIyTD6HmY2NgYFLeYOZDAxsMrO0LIVnSkRPisErEVElI1QqJEeehDLmOqx86sA58LkK1+unmfw+RW+wkl5PaZJmf26q0uRzyCwt/xuslC8YtXSukq+nVBuQOsPc2qYUnikRlTUGr0RElUjigb24tvBzZCdo5rOOA2Dl5o66oybAtX3nUjuvEAKq9LT/ckOTHiI7Kem/gUv5VmPKTnqgmfze1LXNzcw0QaiTS77As8Coepf/BjaZ29kzb5ToGcTglYiokkg8sBcXJo6GZsX2/2QnJODCxNFoNOtLkwJY1aNM3cFKSUn5ekX1BzOJXBMnvwdgoXDUGVVvaDCTdr+FwpGT3xNRsRi8EhFVAkKlwrWFn6Ng4Jq3F4AM1xd+DocGfshJSTGwLKhmWqf8+aPqR5kmt8Pc1k5/sJKz4SVCLZ2cYGbBvFEiKlkMXomIKoGUM6ekVAHDBLIS7uGv1182qV6ZlVUhA5e0E9/nXyLUGeZyrqBFROWLwSsRUQUlVCqkXbsC5dnTuLdnp3EHyWSwcsm/Nn0R+aPOVWBua8u8USKqVBi8EhFVEKpHmVCePwfl2dNIOXMayugzJi8l6r9oJZyfa1lKLSQiKn8MXomIykl20kMoz0Yi5exppJyNRNqlCxAq3UFR5nb2cPQPhEPjANz9cT1ykpMKqU0GuZs7nAKfK/2GExGVIwavRERlQAiBR3f+RcrZSE2v6tnTyLgVo1fOytUdjgFB0o+dT11pDlc7nzp5sw0AugO3NLf964waX+HmeyUiKmkMXomISoHIzUXa9St5gaqmdzX7fqJeOVufunAMCIRjQDM4+gdB7lGt0BxU1/ad0WjWlzrzvAKA3M0ddUaNL9V5XomIKgoGr0REJUCVmQHlhWhNvmrUKSjPn9FbwlRmYQGHho01gWpAIBRNAmGpcDTpPK7tO6Nq25eQFHkS92Ouo2oFXWGLiKi0MHglInoMmnzV00g5o+lVTbt8UT9f1d4Bjk2awjEgCAr/IDg09CuRqaZk5uZwCmqO7BrecHJz48T+RPRMYfBKRFQMKV/1zGnN4KozkciM1c9Xlbu5wzGgGRT+QXAMCNTJVyUiopLB4JWIqACRm4u0a5fzgtVIKM+eRvaD+3rl7GrXgyIgEI7+QXD0D4J1Nc9yaC0R0bOFwSsRPfNUmRlQnj+HlLOnoTxz2nC+qqWlJl81r1f1cfJViYjoyTF4JaJnTvbDB1Cei9Tkq545hdQrFwGVSqdM/nxVx4BmcGjgBzO5vJxaTEREWgxeieipJuWrRp2SFgPIjL2pV06br+oYEASFdn5VDoQiIqpwGLwS0VNFJ181b4BVzsMHuoVkMtjVrgtHf02g6ugfBGuPauXTYCIiMgmDVyKq1DT5qmelQFUZfQbqzEydMjJLSzg0agJHf83gKkWTpsxXJSKqpBi8ElGlkv3wft4Sq5pZAAzlq1o4KKBo0jRvcFUQ81WJiJ4iDF6JqMISQiDzdiyU0vyqp5H57y29cnL3apqBVf6aZVZtfeowX5WI6CnF4JWIKgyRm4u0q5fyelZPIeXMaeQkPdQtlC9fVbMgQCDzVYmIniEMXomo3KgyMqC8cDZvJoBIKM8Xka+aN7BK0TiA+apERM8wBq9EVGayH97XzK2atxhA6tVLhvNV8wZWOQYEwsGX+apERPQfBq9EVCqEEMj895YUqKacjTScr+rhmZerqulZZb4qEREVpVyD10OHDmHevHk4deoU4uLisG3bNvTo0aPQ8keOHMH48eNx6dIlZGRkwNvbG8OGDcPHH38slZk2bRqmT5+uc5yvry8uXbpUWk+DiACoc3OQduUSlGcjpcFVBvNV69TT9Kr6B0EREAhrd+arEhGR8co1eE1PT0dAQADCwsLw+uuvF1vezs4OI0aMgL+/P+zs7HDkyBEMGzYMdnZ2GDp0qFTOz88Pf/zxh/TYwoIdzEQlTZWRAeX5M9JiAMrzZ6F+VCBf1coKioZNoAjISwNo0hQWDopyajERET0NyjWq69q1K7p27Wp0+cDAQAQGBkqPa9Wqha1bt+Lw4cM6wauFhQU8PDyMrjcrKwtZWVnSY6VSCQBQq9VQq9VG1/M41Go1hBClfh6iJ5X94D6U5yI1gerZSKRdu1zo/KqKvPlV7X0bwczKSqcMP+slg9cOIjJVWV43SvMclbpLMjIyEseOHcOMGTN0tl+9ehWenp6wtrZGq1atMHv2bHh5eRVaz+zZs/VSDQAgMTERjx49KvF256dWq5GSkgIhBMyY50cVhBACOXF3kHHhHDIvRiPzUjRy4u7olbNwdYdNw8awbdgENg0bw6qGl5Sv+gjAo+Tksm34M4TXDiIyVVleN1JTU0utbpkQQpRa7SaQyWTF5rxq1ahRA4mJicjNzcW0adMwefJkad+uXbuQlpYGX19fxMXFYfr06bhz5w6io6Ph4OBgsD5DPa81a9ZEUlISFIrSvcWpVquRmJgIV1dXfgFRuVHn5iD9imZ+VeVZzcpVOclJuoVkMtjVrgdFQJBmNoAmgZC7G3+Hg0oWrx1EZKqyvG4olUo4OzsjJSWlxGOpStnzevjwYaSlpeHEiROYMGEC6tati759+wKAThqCv78/WrZsCW9vb2zevBmDBg0yWJ9cLofcwFQ8ZmZmZfKlIJPJyuxcRACQm54O5fkzUJ49rVlmtbB81Ub+cPQPhCIgCI6NA5ivWsHw2kFEpiqr60Zp1l8pg1cfHx8AQJMmTXDv3j1MmzZNCl4LcnJyQv369XHt2rWybCJRhZL94L5mYNVZzU/aVcP5qo4BQXn5qnnzqxbIVyUiIipvlTJ4zU+tVuvc8i8oLS0N169fxzvvvFOGrSIqP0IIZMbelKarSjlzGo/u/KtXzrpadc3tf+38qrVqc35VIiKq8Mo1eE1LS9PpEY2JiUFUVBRcXFzg5eWF8PBw3LlzB2vWrAEALFmyBF5eXmjQoAEAzTyxX3zxBUaOHCnVMWbMGISEhMDb2xt3797F1KlTYW5uXmjPLFFlp51fVbPEqmYmAIP5qnXr582vqglY5W7MVyUiosqnXIPXkydPokOHDtLj0aNHAwBCQ0MRERGBuLg4xMbGSvvVajXCw8MRExMDCwsL1KlTB3PmzMGwYcOkMrdv30bfvn3x4MEDuLq6ok2bNjhx4gRcXV3L7okRlaLc9HQoo6M0g6u086tm6c6KkT9f1bFpMygaB8DC3vCARSIiosqkwsw2UJEolUo4OjqWygi5gtRqNRISEuDm5sZBF2RQ1v3EvIFVmiVW065eAgrMn2ehcJR6VBX+QXAwML8qPV147SAiU5XldaM0Y6lKn/NK9DQRQiDzVkzewKrIwvNVPWtoZgHIWwzA1tuH+apERPRMYPBKVI7UOTlIu3JRmgmgsHxV+7q+mumq/APh6B/IfFUiInpmMXglKkO56WlQRp+RgtXU8+f08lXNrORw8GuiGVwVEMR8VSIionwYvBKVoqzEBE2PqjZf9drlQvJVNXOrOgY0g71vI5hZWpZTi4mIiCo2Bq9EJUQIgYxbN6A8EynNsfro7m29ctp8VceAZlAEBMLWi/mqRERExmLwSvSY1Dk5SLt8IS9Q1QSsuSnJuoXy8lUdA4KknFW5q3u5tJeIiOhpwOCVyEi56WlQnjsjLbFaaL5qY/+8xQCCoGjsz3xVIiKiEsTglagQ2nzVlDOanNW061f081Udnf7LV/UPYr4qERFRKWPwSoT/8lVTok5rFgQ4G1l4vmpAXq9qQCBsvWtDJpOVQ4uJiIieTQxe6ZmkzslB6qXzeStXRSLlXKR+vqqZmSZf1T8wL181CHJXt3JpLxEREWkweKVnQm5aqv78qtlZOmXM5Nb686va2ZdTi4mIiMgQBq/0VMpKvJcXqEYaka+q+bGv35D5qkRERBUcg1eq9IRajYxbMZqBVdr5VePu6JWz9qwBx6bN8pZYDYKNtw/zVYmIiCoZBq8VyKFDhzBv3jycOnUKcXFx2LZtG3r06FFo+a1bt2LZsmWIiopCVlYW/Pz8MG3aNAQHB0tlUlNTMXnyZGzbtg0JCQkIDAzEokWL0Lx5c6lMYQHc3LlzMXbs2BJ7fiVFN19V07uaq0zRLWRmBvt6DfIWAwiCokkg81WJiIieAgxeK5D09HQEBAQgLCwMr7/+erHlDx06hM6dO2PWrFlwcnLC999/j5CQEPz1118IDAwEAAwePBjR0dFYu3YtPD09sW7dOnTq1AkXLlxA9erVAQBxcXE69e7atQuDBg3CG2+8UfJP8jHkpqUi5VyUtMRq6gXD+aoKP39pIQDmqxIRET2dZEIIUd6NqGiUSiUcHR2RkpIChUJRqudSq9VISEiAm5sbzPItESqTyYrteTXEz88Pffr0wZQpU5CZmQkHBwds374d3bp1k8o0a9YMXbt2xYwZMwzW0aNHD6SmpmLfvn2P9ZyeVFZCvNSjmnL2NNKvXQEKfEwtnZyhyLv97xgQBHvfhjCzYL4qPTsKu3YQERWmLK8bpRlLsef1KaJWq5GamgoXFxcAQG5uLlQqFaytrXXK2djY4MiRIwbruHfvHnbu3InVq1eXenuBvHzVmzf+WwzgbKThfNXqNaWBVY7+QbDxqsV8VSIiomcQg9enyBdffIG0tDT07t0bAODg4IBWrVrhs88+Q8OGDeHu7o4ffvgBx48fR926dQ3WsXr1ajg4OBiVtvA41NnZSL18HilnIqXFAIrOV20GhX8g5FVdS6U9REREVLkweH1KbNiwAdOnT8f27dvh5vbfwKS1a9ciLCwM1atXh7m5OYKCgtC3b1+cOnXKYD2rVq1C//799XprH1duqhIp0Wc0+apnTkN58RxEdrZOGW2+qmPTICj8g6DwC4CFnV2JnJ+IiIieLgxenwIbN27E4MGD8eOPP6JTp046++rUqYODBw8iPT0dSqUS1apVQ58+fVC7dm29eg4fPozLly9j06ZNj92WrIR4pERpFgJIOXsa6devGshXdYFjQCAU2nzV+g2Yr0pERERGYfBayf3www8ICwvDxo0bdQZlFWRnZwc7OzskJSVhz549mDt3rl6Z7777Ds2aNUNAQIBR5xZqNTJirkv5qilnI5EVf1evnE0Nr7xANZD5qkRERPREGLxWIGlpabh27Zr0OCYmBlFRUXBxcYGXlxfCw8Nx584drFmzBoAmVSA0NBSLFi1Cy5YtER8fD0AzIMvR0REAsGfPHggh4Ovri2vXrmHs2LFo0KAB3n33XZ1zK5VK/Pjjj5g/f36h7VNnZyP1UjRSzmhmAVCejURuqlK3kJkZ7Os30MwC4B/EfFUiIiIqUQxeK5CTJ0+iQ4cO0uPRo0cDAEJDQxEREYG4uDjExsZK+1esWIHc3Fx88MEH+OCDD6Tt2vIAkJKSgvDwcNy+fRsuLi544403MHPmTFgWWAZ148aNEEKgb9++0rbcVCVSzkVpAtUzkYbzVa1tNPmqAZrBVQ6N/JmvSkRERKWG87waUBHmeS0Pj+7FQZnXq5py5hTSb1xjvipRBVWRrh1EVDlwnleq1PTyVc+cRta9OL1yUr5q07z5VWt6M1+ViIiIyg2D12eEOjsbqRej8wZWnYbyXJR+vqq5ORzqNchbYlWzzKpVlarl02AiIiIiAxi8PqVylClQ5uWrppyNROrFaMP5qo0D8hYDCGK+KhEREVV45Rq8Hjp0CPPmzcOpU6cQFxeHbdu2oUePHoWWP3LkCMaPH49Lly4hIyMD3t7eGDZsGD7++GOdckuWLMG8efMQHx+PgIAAfPXVV2jRokUpP5vy9Sg+Lm9gVd78qobyVZ1dpOVVFf6BzFclIiKiSqdcg9f09HQEBAQgLCzMqOVI7ezsMGLECPj7+8POzg5HjhzBsGHDYGdnh6FDhwIANm3ahNGjR2P58uVo2bIlFi5ciODgYFy+fFln5amKQKhUSI48CWXMdVj51IFz4HOQmZsXf5xajfSYa3mBaiRSzpxC1r14vXI2Nb3h6B+oSQMIaAabGl7MVyUiIqJKrcLMNiCTyYrteTXk9ddfh52dHdauXQsAaNmyJZo3b46vv/4agGZkXc2aNfHhhx9iwoQJRtVZFrMNJB7Yi2sLP0d2wj1pm5WbO+qOmgDX9p11yqqzspB66XzewKpTUEafKTpfNSAvX9WF+apETyvONkBEpuJsAxVAZGQkjh07hhkzZgAAsrOzcerUKYSHh0tlzMzM0KlTJxw/frzQerKyspCVlSU9Vio1gaFarYZarS7xdt8/+Acu/u8TALp/N2QnJODCxNGo/78ZsFAooDwbCeXZSKReiobIydEpa2ZtDYVfABQBmhQARSN/mNva6pQpjbYTUcWgVqshhOD/cyIyWlleN0rzHJUyeK1RowYSExORm5uLadOmYfDgwQCA+/fvQ6VSwd3dXae8u7s7Ll26VGh9s2fPxvTp0/W2JyYm4tGjRyXadqFS4caXs1AwcM3bCwC4MvN/envMHZ1g07AJbBo2hm3DxpDXqgOZhebtywHwIC0NSEsr0bYSUcWlVquRkpICIQR7XonIKGV53UhNTS21uitl8Hr48GGkpaXhxIkTmDBhAurWrauzMpSpwsPDpdWsAE3Pa82aNeHq6lriXd3Jp/9B7oP7xZazcnWHc4vWUPgHwtE/ENbMVyWifNRqNWQyGVxdXRm8EpFRyvK6YW1tXWp1V8rg1cfHBwDQpEkT3Lt3D9OmTUPfvn1RtWpVmJub4969ezrl7927Bw8Pj0Lrk8vlkMvletvNzMxK/M3NffjAqHJ1PvgEbi+/UqLnJqKni0wmK5XrFBE9vcrqulGa9Vf6K55arZbyVa2srNCsWTPs27dPZ/++ffvQqlWr8mqiDquqxg2iMrYcERER0bOkXHte09LScO3aNelxTEwMoqKi4OLiAi8vL4SHh+POnTtYs2YNAM38rV5eXmjQoAEAzTyxX3zxBUaOHCnVMXr0aISGhuK5555DixYtsHDhQqSnp+Pdd98t2ydXCMeAZrByc0d2QgIM573KIHdzh2NAs7JuGhEREVGFV67B68mTJ9GhQwfpsTbvNDQ0FBEREYiLi0NsbKy0X61WIzw8HDExMbCwsECdOnUwZ84cDBs2TCrTp08fJCYmYsqUKYiPj0fTpk2xe/duvUFc5UVmbo66oybgwsTRAGTQDWA1Oa11Ro03ar5XIiIiomdNhZnntSIpr3le5W4eqDNqvN48r0REBXGeVyIy1TM7z6u5uTni4uL0Vqt68OAB3NzcoFKpSqxxTzPX9p1Rte1LSIo8ifsx11HVhBW2iIiIiJ5VJgevhXXUZmVlwcrK6okb9CyRmZvDKag5smt4w8nNDTL2nhAREREVyejgdfHixQA0UyysXLkS9vb20j6VSoVDhw5JA6mIiIiIiEqD0cHrggULAGh6XpcvXw7zfLe3raysUKtWLSxfvrzkW0hERERElMfo4DUmJgYA0KFDB2zduhXOzs6l1igiIiIiIkNMznndv39/abSDiIiIiKhYJgevYWFhRe5ftWrVYzeGiIiIiKgoJgevSUlJOo9zcnIQHR2N5ORkvPTSSyXWMCIiIiKigkwOXrdt26a3Ta1W47333kOdOnVKpFFERERERIaUyMSiZmZmGD16tDQjARERERFRaSixWfGvX7+O3NzckqqOiIiIiEiPyWkDo0eP1nkshEBcXBx27tyJ0NDQEmsYEREREVFBJgevkZGROo/NzMzg6uqK+fPnFzsTARERERHRk+A8r0RERERUaZgcvGolJibi8uXLAABfX1+4urqWWKOIiIiIiAwxecBWeno6wsLCUK1aNbz44ot48cUX4enpiUGDBiEjI6M02khEREREBOAxgtfRo0fj4MGD+OWXX5CcnIzk5GRs374dBw8exCeffFIabSQiIiIiAvAYaQM//fQTtmzZgvbt20vbXnnlFdjY2KB3795YtmxZSbaPiIiIiEhics9rRkYG3N3d9ba7ubkxbYCIiIiISpXJwWurVq0wdepUPHr0SNqWmZmJ6dOno1WrViXaOCIiIiKi/ExOG1i0aBGCg4NRo0YNBAQEAADOnDkDa2tr7Nmzp8QbSERERESkZXLw2rhxY1y9ehXr16/HpUuXAAB9+/ZF//79YWNjU+INJCIiIiLSeqx5Xm1tbTFkyJCSbgsRERERUZFMznnNr1u3boiLiyupthARERERFemJgtdDhw4hMzOzpNpCRERERFSkJwpeiYiIiIjK0hMFr97e3rC0tCypthARERERFemxBmxpRUdHl1Q7iIiIiIiKZVTP69mzZ43+McWhQ4cQEhICT09PyGQy/Pzzz0WW37p1Kzp37gxXV1coFAq0atVKb27ZadOmQSaT6fw0aNDApHYRERERUcVkVM9r06ZNIZPJIISATCaTthd8DAAqlcrok6enpyMgIABhYWF4/fXXiy1/6NAhdO7cGbNmzYKTkxO+//57hISE4K+//kJgYKBUzs/PD3/88Yf02MLiiTqYiYiIiKiCMCqqi4mJkX6PjIzEmDFjMHbsWGk52OPHj2P+/PmYO3euSSfv2rUrunbtanT5hQsX6jyeNWsWtm/fjl9++UUneLWwsICHh4fR9WZlZSErK0t6rFQqAQBqtRpqtdroeh6HWq2GEKLUz0NETxde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hZIkk8kkm82mzMxMBQUF6Y477lB9fb3X9b29vVqzZo2CgoIUHh6uwsJCjY2NefV57733lJiYqMDAQEVFRam4uNhzbu/evbr77rsVEhKi2NhYPf3001ddDwCzGeEVAGaRF154QY8++qhOnz6t3Nxcbdy4UWfPnpUkuVwurV+/XgsXLtSpU6dUV1enlpYWr3Bqs9lktVpVWFio3t5eHTlyRPHx8Z7zAQEBev3113XmzBlVV1frxIkT2r59u8/HCQA3ih9sAYCPFBQU6NChQ5o3b55X+44dO7Rjxw6ZTCYVFRXJZrN5zq1atUqpqamqqqrS22+/rdLSUg0MDCgkJESSdPToUWVnZ2twcFCRkZFavHixnnzySb300kt/q6b6+noVFRXp+++/n76BAsAMYs8rAPhQRkaGVziVpLCwMM+/LRaL1zmLxSKHwyFJOnv2rJKTkz3BVZLS0tLkdrvV398vk8mkwcFBrV279pqf39LSovLycp07d04jIyP65ZdfND4+rsuXLys4OHgaRggAM4ttAwDgQyEhIYqPj/c6/hhe/4mgoKA/Pf/tt98qKytLSUlJOnz4sHp6elRZWSlJ+vnnn6elBgCYaYRXAJhFurq6rnq9dOlSSdLSpUt1+vRpuVwuz/nOzk4FBAQoISFBZrNZt99+u1pbW6d8756eHrndblVUVGjVqlW68847NTg4OHODAYAZwLYBAPChK1euyOl0erXNmTNHt956qySprq5O99xzj1avXq2amhp1d3fr3XfflSTl5uZq165dys/P1+7duzU0NKSSkhLl5eUpMjJSkrR7924VFRUpIiJCmZmZGh0dVWdnp0pKShQfH6+JiQm98cYbys7OVmdnp/bt2+fbLwAA/iFWXgHAhxobGxUVFeV1rF692nP+xRdf1IcffqikpCQdPHhQH3zwgZYtWyZJCg4OVlNTk3744QetXLlSjz32mNauXas333zTc31+fr5effVVVVVVKTExUVlZWfrqq68kScnJydq7d6/27Nmj5cuXq6amRuXl5b79AgDgH+JuAwAwS5hMJtntduXk5Pi7FACYtVh5BQAAgGEQXgEAAGAY/GALAGYJdnEBwF9j5RUAAACGQXgFAACAYRBeAQAAYBiEVwAAABgG4RUAAACGQXgFAACAYRBeAQAAYBiEVwAAABjG/wB07i6M74NAQwAAAABJRU5ErkJggg==\n"
          },
          "metadata": {}
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Precisión de token held-out (v3): 0.842\n"
          ]
        }
      ],
      "source": [
        "%matplotlib inline\n",
        "import matplotlib.pyplot as plt\n",
        "\n",
        "epocas = [1, 2, 3]\n",
        "loss_v2 = [1.297, 1.380, 1.410]\n",
        "loss_v3 = [1.051, 1.028]\n",
        "\n",
        "fig, ax = plt.subplots(figsize=(7, 4.2))\n",
        "ax.plot(epocas, loss_v2, \"o-\", color=\"#c0392b\", label=\"v2 sin regularizar (sobreajuste)\")\n",
        "ax.plot([1, 2], loss_v3, \"s-\", color=\"#27ae60\", label=\"v3 NEFTune + dropout (generaliza)\")\n",
        "ax.set_xlabel(\"Época\")\n",
        "ax.set_ylabel(\"Pérdida held-out\")\n",
        "ax.set_title(\"QLoRA (Qwen2.5-Coder-7B-Instruct): pérdida held-out por época\")\n",
        "ax.set_xticks(epocas)\n",
        "ax.legend()\n",
        "ax.grid(True, alpha=0.3)\n",
        "for x, y in zip(epocas, loss_v2): ax.annotate(f\"{y:.3f}\", (x, y), textcoords=\"offset points\", xytext=(0, 8))\n",
        "for x, y in zip([1, 2], loss_v3): ax.annotate(f\"{y:.3f}\", (x, y), textcoords=\"offset points\", xytext=(0, -14))\n",
        "plt.tight_layout()\n",
        "plt.show()\n",
        "print(\"Precisión de token held-out (v3):\", 0.842)"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "2f005b3a",
      "metadata": {
        "id": "2f005b3a"
      },
      "source": [
        "Conviene leer esa cifra con cuidado. La precisión de token (0,842) mide coincidencia léxica sobre datos sintéticos\n",
        "y no equivale a la precisión diagnóstica del 85 % del anteproyecto, que esta cifra ni mide ni cumple. La contribución\n",
        "real del afinado se aprecia en la evaluación comparada de la sección 9: el Sistema B alcanza 0,70 en acierto de\n",
        "categoría del error frente a 0,26 del modelo base, y 3,80 frente a 2,04 en identificación del error. Su límite también\n",
        "es claro, porque no mejora la trazabilidad ni el acierto de concepto frente al sistema con grafo, y por eso se diseña\n",
        "el híbrido D."
      ]
    },
    {
      "cell_type": "markdown",
      "id": "c7097fc0",
      "metadata": {
        "id": "c7097fc0"
      },
      "source": [
        "## 9. Evaluación comparada A/B/C/D, panel humano y validez del juez\n",
        "\n",
        "### Los cuatro sistemas\n",
        "\n",
        "- A: modelo base `llama3.1:8b` sin augmentación (línea de referencia).\n",
        "- B: modelo afinado QLoRA (`Qwen2.5-Coder-7B-Instruct`), sin grafo.\n",
        "- C: modelo base más recuperación GraphRAG sobre el EKG.\n",
        "- D: híbrido, modelo afinado más recuperación GraphRAG.\n",
        "\n",
        "### Distribución 1: banco sintético (n = 50, juez `qwen2.5:32b`)\n",
        "\n",
        "```{list-table}\n",
        "```\n",
        "\n",
        "| Métrica | A (base) | B (QLoRA) | C (GraphRAG) | D (híbrido) |\n",
        "|---|---|---|---|---|\n",
        "| Acierto de categoría (0–1) | 0,26 | 0,70 | 0,36 | 0,76 |\n",
        "| Acierto de concepto (0–1) | 0,18 | 0,50 | 0,48 | 0,54 |\n",
        "| Identificación del error (1–5) | 2,04 | 3,80 | 2,44 | 4,04 |\n",
        "| Trazabilidad (1–5) | 1,72 | 3,00 | 2,92 | 3,16 |\n",
        "\n",
        "En distribución, D > {B, C} > A en las cuatro métricas objetivas. La complementariedad es nítida: el afinado\n",
        "(B) destaca al clasificar y explicar técnicamente el error; el grafo (C), al acertar el concepto y en\n",
        "trazabilidad; el híbrido (D) sintetiza ambas fortalezas. El *grounding*, esto es, la fracción de conceptos citados que\n",
        "estaban en el subgrafo recuperado, sube de C = 0,35 a D = 0,65, con lo que el afinado casi duplica la fidelidad al grafo.\n",
        "\n",
        "> Aviso de rigor: de las cuatro métricas, solo dos son independientes (acierto de categoría y de concepto); la\n",
        "> identificación y la trazabilidad son recodificaciones afines de aquellas a la escala 1–5."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 33,
      "id": "c1dafd2b",
      "metadata": {
        "execution": {
          "iopub.execute_input": "2026-06-23T17:17:51.491255Z",
          "iopub.status.busy": "2026-06-23T17:17:51.491255Z",
          "iopub.status.idle": "2026-06-23T17:17:51.494630Z",
          "shell.execute_reply": "2026-06-23T17:17:51.494630Z"
        },
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "c1dafd2b",
        "outputId": "f79abaf0-c597-4dbb-84f3-2bbfe34c4d5c"
      },
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Evaluación A/B/C/D (banco sintético n=50, juez qwen2.5:32b)\n",
            "----------------------------------------------------------------\n",
            "Métrica                             A        B        C        D\n",
            "Acierto de categoría (0-1)       0.26     0.70     0.36     0.76\n",
            "Acierto de concepto (0-1)        0.18     0.50     0.48     0.54\n",
            "Identificación error (1-5)       2.04     3.80     2.44     4.04\n",
            "Trazabilidad (1-5)               1.72     3.00     2.92     3.16\n",
            "\n",
            "Mejor sistema por métrica: {'D (híbrido)'}\n"
          ]
        }
      ],
      "source": [
        "sistemas = [\"A (base)\", \"B (QLoRA)\", \"C (GraphRAG)\", \"D (híbrido)\"]\n",
        "metricas = {\n",
        "    \"Acierto de categoría (0-1)\": [0.26, 0.70, 0.36, 0.76],\n",
        "    \"Acierto de concepto (0-1)\":  [0.18, 0.50, 0.48, 0.54],\n",
        "    \"Identificación error (1-5)\": [2.04, 3.80, 2.44, 4.04],\n",
        "    \"Trazabilidad (1-5)\":         [1.72, 3.00, 2.92, 3.16],\n",
        "}\n",
        "print(\"Evaluación A/B/C/D (banco sintético n=50, juez qwen2.5:32b)\")\n",
        "print(\"-\" * 64)\n",
        "print(f\"{'Métrica':<28}\" + \"\".join(f\"{s.split()[0]:>9}\" for s in sistemas))\n",
        "for m, v in metricas.items():\n",
        "    print(f\"{m:<28}\" + \"\".join(f\"{x:>9.2f}\" for x in v))\n",
        "mejor = [sistemas[max(range(4), key=lambda i: metricas[m][i])] for m in metricas]\n",
        "print()\n",
        "print(\"Mejor sistema por métrica:\", set(mejor))"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "6ffdd6f9",
      "metadata": {
        "id": "6ffdd6f9"
      },
      "source": [
        "### Distribución 2: código real de estudiantes (Dublin DCU CS1, n = 60)\n",
        "\n",
        "La prueba más exigente es la generalización a código real escrito fuera de toda plantilla (el subconjunto público\n",
        "*Dublin repair* de un curso introductorio). Como no hay etiquetas de categoría ni de concepto, la métrica objetiva es la\n",
        "relevancia al arreglo: qué fracción de los componentes que la corrección del profesorado modifica aparece\n",
        "mencionada en la retroalimentación.\n",
        "\n",
        "| Sistema | Relevancia al arreglo (código real) |\n",
        "|---|---|\n",
        "| A (base) | 0,80 |\n",
        "| C (GraphRAG) | 0,73 |\n",
        "| B (QLoRA) | 0,43 |\n",
        "| D (híbrido) | 0,32 |\n",
        "\n",
        "Aquí el orden se invierte: sobre código real gana el modelo base y caen el afinado y el híbrido. Es evidencia directa\n",
        "de un sobreajuste a la estructura superficial de las plantillas sintéticas, y muestra que la ventaja del híbrido era un\n",
        "fenómeno en distribución que no llega a trasladarse a errores auténticos. Probablemente sea el resultado\n",
        "científicamente más valioso del trabajo: haber probado el sistema sobre datos reales y reportar el resultado adverso\n",
        "delimita con precisión hasta dónde llega la evidencia."
      ]
    },
    {
      "cell_type": "markdown",
      "id": "717b954c",
      "metadata": {
        "id": "717b954c"
      },
      "source": [
        "### El panel humano (10 anotadores, 2000 valoraciones)\n",
        "\n",
        "Diez revisores —siete programadores en activo y tres docentes universitarios (R01–R10)— puntuaron a ciegas las\n",
        "retroalimentaciones de los cuatro sistemas sobre los 50 casos en tres dimensiones cualitativas (divulgativa, técnica,\n",
        "sugerencia), en escala Likert 1–5, hasta sumar 2000 valoraciones.\n",
        "\n",
        "Acuerdo inter-anotador (la paradoja κ frente a ICC):\n",
        "\n",
        "| Coeficiente | Qué mide | Global | Técnica |\n",
        "|---|---|---|---|\n",
        "| Fleiss κ | coincidencia exacta de celda | 0,096 | 0,143 |\n",
        "| Krippendorff α (ordinal) | cercanía de puntuaciones | 0,318 | 0,507 |\n",
        "| ICC(2,k) | fiabilidad del *promedio* de los 10 | 0,831 [0,80–0,86] | 0,910 |\n",
        "\n",
        "La aparente contradicción es coherente: cada anotador individual concuerda poco celda a celda, pues la escala es fina\n",
        "y cada cual aplica su propio rasero, de ahí un Fleiss de 0,096; en cambio, el promedio de los diez es un instrumento\n",
        "fiable (ICC 0,831), porque los sesgos idiosincrásicos se cancelan al agregar. El panel humano, además, discrimina los\n",
        "sistemas con nitidez (Friedman significativo, *p* < 0,001 en las tres dimensiones), con un perfil de especialización\n",
        "cruzado: los afinados (B, D) dominan en lo técnico (D = 4,20) y los de grafo (C, A) en lo divulgativo y en la\n",
        "sugerencia (C = 3,77 y 3,64)."
      ]
    },
    {
      "cell_type": "markdown",
      "id": "7034e98c",
      "metadata": {
        "id": "7034e98c"
      },
      "source": [
        "### Validez de criterio del juez LLM\n",
        "\n",
        "Se contrasta el consenso de los diez humanos con el juez `qwen2.5:32b`, celda a celda, sobre los 33 casos comunes\n",
        "(396 celdas):\n",
        "\n",
        "| Comparación | Pearson | Spearman |\n",
        "|---|---|---|\n",
        "| Global humano ↔ juez | 0,203 | 0,189 |\n",
        "| Dimensión divulgativa | −0,203 (¡negativa!) | — |\n",
        "| Dimensión técnica | 0,363 (moderada) | — |\n",
        "| Dimensión sugerencia | 0,041 (nula) | — |\n",
        "\n",
        "El juez LLM no queda validado como instrumento de puntuación absoluta: una correlación global de 0,203,\n",
        "negativa en lo divulgativo, no autoriza a tomar sus puntuaciones por verdad pedagógica. El análisis de\n",
        "Bland-Altman lo confirma: el sesgo medio es casi nulo (+0,139), pero los límites de acuerdo van de −2,19 a +2,47,\n",
        "casi cinco puntos sobre una escala de cinco, lo que indica coincidencia de promedio y no de celda. Las validaciones\n",
        "convergentes con un segundo juez (`llama3.1:8b`, κ = 0,118) y con un panel multifamilia (Qwen/Llama/Gemma, Fleiss 0,21)\n",
        "apuntan en la misma dirección.\n",
        "\n",
        "De ahí la consecuencia metodológica: el veredicto del trabajo descansa en las métricas objetivas ancladas a la verdad\n",
        "de referencia (acierto de categoría y de concepto) y en el *grounding*, inmunes al juez. Las dimensiones cualitativas\n",
        "del juez LLM se leen como indicios, no como medidas."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 34,
      "id": "72c050a0",
      "metadata": {
        "execution": {
          "iopub.execute_input": "2026-06-23T17:17:51.496634Z",
          "iopub.status.busy": "2026-06-23T17:17:51.496634Z",
          "iopub.status.idle": "2026-06-23T17:17:51.499617Z",
          "shell.execute_reply": "2026-06-23T17:17:51.499617Z"
        },
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "72c050a0",
        "outputId": "5e7428bf-c452-479f-f9a3-b8d31184440c"
      },
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Acuerdo humano y validez del juez por dimensión\n",
            "------------------------------------------------------------\n",
            "Dimensión       Fleiss κ    ICC(2,k)  Pearson h-juez\n",
            "Divulgativa        0.071           -          -0.203\n",
            "Técnica            0.143       0.910           0.363\n",
            "Sugerencia         0.032           -           0.041\n",
            "------------------------------------------------------------\n",
            "GLOBAL             0.096       0.831           0.203\n",
            "\n",
            "Fleiss global 0,096 (azar)  vs  ICC del promedio 0,831 (fiable)\n",
            "Pearson global humano-juez = 0,203 (juez NO validado)\n"
          ]
        }
      ],
      "source": [
        "dims = [\"Divulgativa\", \"Técnica\", \"Sugerencia\"]\n",
        "icc = [0.071, 0.910, 0.032]\n",
        "fleiss = [0.071, 0.143, 0.032]\n",
        "pearson_juez = [-0.203, 0.363, 0.041]\n",
        "\n",
        "print(\"Acuerdo humano y validez del juez por dimensión\")\n",
        "print(\"-\" * 60)\n",
        "print(f\"{'Dimensión':<14}{'Fleiss κ':>10}{'ICC(2,k)':>12}{'Pearson h-juez':>16}\")\n",
        "icc_dim = [0.071, 0.910, 0.032]\n",
        "fleiss_dim = [0.071, 0.143, 0.032]\n",
        "icc_real = {\"Divulgativa\": None, \"Técnica\": 0.910, \"Sugerencia\": None}\n",
        "for d, f, p in zip(dims, fleiss_dim, pearson_juez):\n",
        "    icc_txt = f\"{0.910:>12.3f}\" if d == \"Técnica\" else f\"{'-':>12}\"\n",
        "    print(f\"{d:<14}{f:>10.3f}{icc_txt}{p:>16.3f}\")\n",
        "print(\"-\" * 60)\n",
        "print(f\"{'GLOBAL':<14}{0.096:>10.3f}{0.831:>12.3f}{0.203:>16.3f}\")\n",
        "print()\n",
        "print(\"Fleiss global 0,096 (azar)  vs  ICC del promedio 0,831 (fiable)\")\n",
        "print(\"Pearson global humano-juez = 0,203 (juez NO validado)\")"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "4a66a122",
      "metadata": {
        "id": "4a66a122"
      },
      "source": [
        "## 10. Conclusiones y reproducibilidad\n",
        "\n",
        "### Conclusiones\n",
        "\n",
        "El grafo cumple con holgura lo que se había planteado para él. Reúne 157 conceptos, por encima del umbral de 150,\n",
        "articulados en 20 clases, 21 propiedades de objeto y 7 de datos; tras el cierre OWL 2 RL pasa de 1772 enunciados\n",
        "afirmados a 4786, valida SHACL como conforme y, ante el control negativo, dispara las 6 violaciones esperadas. A ello\n",
        "se suman 30 enlaces `skos:exactMatch` a Wikidata. El valor de la inferencia queda a la vista en el salto de 0 a 157\n",
        "conceptos y en que las entidades de Wikidata no se infieran como `Concepto`, dos hechos que confirman un razonamiento\n",
        "ontológico correcto y un uso prudente de los datos enlazados.\n",
        "\n",
        "En el plano de la arquitectura, el GraphRAG opera de extremo a extremo en local: enlace por AST, recuperación\n",
        "vectorial y por SPARQL, generación condicionada y explicabilidad apoyada en el subgrafo de procedencia. La evaluación,\n",
        "en cambio, obliga a matizar el hallazgo central. En distribución sintética el orden es D > {B, C} > A, pero sobre\n",
        "código real ese orden se invierte y gana el modelo base, lo que delata un sobreajuste a las plantillas: la augmentación\n",
        "mejora de forma significativa frente al modelo desnudo, aunque su valor depende de qué se recupera y de cuán real sea\n",
        "el código evaluado. Por último, el juez LLM no sustituye al evaluador humano. El panel humano resulta fiable en\n",
        "promedio (ICC 0,831) y discrimina los sistemas, mientras que el juez automático correlaciona apenas 0,203 con el\n",
        "consenso humano, e incluso de forma negativa en lo divulgativo; el peso del veredicto recae, por eso, en las métricas\n",
        "objetivas y en el *grounding*, inmunes al juez.\n",
        "\n",
        "Ningún umbral cuantitativo del anteproyecto debe darse por cumplido: lo reportado es evidencia prometedora en algunas\n",
        "dimensiones y limitada en su alcance, suficiente para justificar que la investigación continúe.\n",
        "\n",
        "### Cómo reproducir el proyecto\n",
        "\n",
        "```bash\n",
        "export PYTHONIOENCODING=utf-8 PYTHONUTF8=1\n",
        "pip install rdflib pyshacl owlrl nbformat jupyter matplotlib --break-system-packages -q\n",
        "\n",
        "# desde Entregable-Grafo-EKG/\n",
        "python scripts/inferir.py                     # cierre OWL-RL (1772 -> 4786)\n",
        "python scripts/validar.py                     # SHACL conforme; ejemplo inválido: 6 violaciones\n",
        "python scripts/consultar.py                   # consultas con inferencia (157 conceptos)\n",
        "python scripts/consultar.py --sin-inferencia  # contraste (0 conceptos)\n",
        "\n",
        "# el notebook completo, ejecutado de principio a fin:\n",
        "jupyter nbconvert --to notebook --execute --inplace \\\n",
        "    notebook/EKG-Python-proyecto-completo.ipynb\n",
        "```\n",
        "\n",
        "Las secciones 8 y 9 (QLoRA y evaluación con LLM) requieren GPU y modelos servidos por Ollama; sus cifras proceden de\n",
        "las memorias y salidas reales del proyecto y no se reejecutan aquí."
      ]
    }
  ],
  "metadata": {
    "kernelspec": {
      "display_name": "Python 3",
      "name": "python3"
    },
    "language_info": {
      "codemirror_mode": {
        "name": "ipython",
        "version": 3
      },
      "file_extension": ".py",
      "mimetype": "text/x-python",
      "name": "python",
      "nbconvert_exporter": "python",
      "pygments_lexer": "ipython3",
      "version": "3.12.10"
    },
    "colab": {
      "provenance": [],
      "gpuType": "T4"
    },
    "accelerator": "GPU"
  },
  "nbformat": 4,
  "nbformat_minor": 5
}