From cd3c36810b7ee1ab46d768da5be97daf1b3bc762 Mon Sep 17 00:00:00 2001 From: Kurt Heiss Date: Thu, 19 Feb 2026 10:36:33 -0800 Subject: [PATCH 01/94] Update PDF blueprint architecture diagram --- deploy/pdf-blueprint.ipynb | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/deploy/pdf-blueprint.ipynb b/deploy/pdf-blueprint.ipynb index 4b1eb06e1..1c8b47db8 100644 --- a/deploy/pdf-blueprint.ipynb +++ b/deploy/pdf-blueprint.ipynb @@ -30,8 +30,8 @@ }, { "attachments": { - "b947a5fe-b01b-4f18-82e7-fda0c3a19c1a.png": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAADwAAAAhwCAIAAAAf3FwlAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAP+lSURBVHhe7N13YBf1/T/wKgiCsncIhE0CmZBAwkoIIWQAGaywIezlrtU6aEutfK2jjkqdbe2yVsW696i2ta111r1RRG37s7W2aq3yu/t8LjGAUm2TivB49KThPpdP7nP9o3ne6+n7vgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAbv3kJz/Z/jGefvrpTZs2DR8+PDoUAAAAAAAAAAAAAOCztZsCdL2LLrooOhoAAAAAAAAAAAAA4DNUX4DeqeXcokWL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UeqSuwAAAAAAAACgMURjeIN4AACAJhKlLrkLAAAAAAAAABpDNIY3iAcAAGgiUeqSuwAAAAAAAACgMURjeIN4AACAJhKlLrkLAAAAAAAAABpDNIY3iAcAAGgiUeqSuwAAAAAAAACgMURjeIN4AACAJhKlLrkLAAAAAAAAABpDNIY3iAcAAGgiUeqSuwAAAAAAAACgMURjeIN4AACAJhKlLrkLAAAAAAAAABpDNIY3iAcAAGgiUeqSuwAAAAAAAACgMURjeIN4AACAJhKlLrkLAAAAAAAAABpDNIY3iAcAAGgiUeqSuwAAAAAAAACgMURjeIN4AACAJhKlLrkLAAAAAAAAABpDNIY3iAcAAGgiUeqSuwAAAAAAAACgMURjeIN4AACAJhKlLrkLAAAAAAAAABpDNIY3iAcAAGgiUeqSuwAAAAAAAACgMURjeIN4AACAJhKlLrkLAAAAAAAAABpDNIY3iAcAAGgiUeqSuwAAAAAAAACgMURjeIN4AACAJhKlLrkLAAAAAAAAABpDNIY3iAcAAGgiUeqSuwAAAAAAAACgMURjeIN4AACAJhKlLrkLAAAAAAAAABpDNIY3iAcAAGgiUeqSuwAAAAAAAACgMURjeIN4AACAJhKlLrkLAAAAAAAAABpDNIY3iAcAAGgiUeqSuwAAAAAAAACgMURjeIN4AACAJhKlLrkLAAAAAAAAABpDNIY3iAcAAGgiUeqSuwAAAAAAAACgMURjeIN4AACAJhKlLrkLAAAAAAAAABpDNIY3iAcAAGgiUeqSuwAAAAAAAACgMURjeIN4AACAJhKlLrkLAAAAAAAAABpDNIY3iAcAAGgiUeqSuwAAAAAAAACgMURjeIN4AACAJhKlLrkLAAAAAAAAABpDNIY3iAcAAGgiUeqSuwAAAAAAAACgMURjeIN4AACAJhKlLrkLAAAAAAAAABpDNIY3iAcAAGgiUeqSuwAAAAAAAACgMURjeIN4AACAJhKlLrkLAAAAAAAAABpDNIY3iAcAAGgiUeqSuwAAAAAAAACgMURjeIN4AACAJhKlLrkLAAAAAAAAABpDNIY3iAcAAGgiUeqSuwAAAAAAAACgMURjeIN4AACAJhKlLrkLAAAAAAAAABpDNIY3iAcAAGgiUeqSuwAAAAAAAACgMURjeIN4AACAJhKlLrkLAAAAAAAAABpDNIY3iAcAAGgiUeqSuwAAAAAAAACgMURjeIN4AACAJhKlLrkLAAAAAAAAABpDNIY3iAcAAGgiUeqSuwAAAAAAAACgMURjeIN4AACAJhKlLrkLAAAAAAAAABpDNIY3iAcAAGgiUeqSuwAAAAAAAACgMURjeIN4AACAJhKlLrkLAAAAAAAAABpDNIY3iAcAAGgiUeqSuwAAAAAAAACgMURjeIN4AACAJhKlLrkLAAAAAAAAABpDNIY3iAcAAGgiUeqSuwAAAAAAAACgMURjeIN4AACAJhKlLrkLAAAAAAAAABpDNIY3iAcAAGgiUeqSuwAAAAAAAACgMURjeIN4AACAJhKlLrkLAAAAAAAAABpDNIY3iAcAAGgiUeqSuwAAAAAAAACgMURjeIN4AACAJhKlLrkLAAAAAAAAABpDNIY3iAcAAGgiUeqSuwAAAAAAAACgMURjeIN4AACAJhKlLrkLAAAAAAAAABpDNIY3iAcAAGgiUeqSuwAAAAAAAACgMURjeIN4AACAJhKlLrkLAAAAAAAAABpDNIY3iAcAAGgiUeqSuwAAAAAAAACgMRTXif4OAABA44rqzwrQAAAAAAAAAAAAAMCeL6o/K0ADAAAAAAAAAAAAAHu+qP6sAA0AAAAAAAAAAAAA7Pmi+rMCNAAAAAAAAAAAAACw54vqzwrQAAAAAAAAAAAAAMCeprCwsHhHUf351FOjv9cJjoy+BwAAAAAAAAAAAADgM1FRURH1nf+d4MjoewAAAAAAAAAAAAAAPhNt2rTZuHFj1HH+eMExwZHR9wAAAAAAAAAAAAAAfFY+ySLQln8GAAAAAAAAAAAAAPYI/3YRaMs/AwAAAAAAAAAAAAB7kN0vAm35ZwAAAAAAAAAAAABgD7KbRaAt/wwAAAAAAAAAAAAA7HE+bhFoyz8DAAAAAAAAAAAAAHucj1wE2vLPAAAAAAAAAAAAAMAeatdFoC3/DAAAAAAAAAAAAADsoXZaBNryzwAAAAAAAAAAAADAHq3hItCWfwYAAAAAAAAAAAAA9mj1i0Bb/hkAAAAAAAAAAAAA+ByILwJt+WcAAAAAAAAAAAAA4HOgTZs2GzZssPwzAAAAAAAAAAAAAPD5kJCQEH0FAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAq1atampq7r331w888MDSpUvbtWsXvQAAAPBZGDhw4Jlnnvniiy9cdNFF6enp0V4A+PTc+AIAAAAAANgLTZ8+/Z577tnewP33/37hwoXNmzePjgAAAPhf6dWr1ze/+c0//elPUT7Zvv2tt976zne+M3jw4OgIAPjE3PgCAAAAAADY2+Tmjrziisvfe++97du3v//Bv+797a/vuPPWN9/6a3wadOONNxYWFkaHAgAANLF27dodcsi6Z555Jh5JXt665aZbbnjsiUfjf926deuxxx7bpUuX6GgA2C03vgAAAAAAAPY2ffv2Pf3009988834yOfe3/xqxcrl3Xt0O+jg1pNKJ1551eUfbH8/2P/Pf/7zggvOHzJkSPRtAAAATaO8vPzOO++MJ5S//PWNCy86f/SYvANbtezbv89xJxz73AvPxl/63e9+N3PmzP322y/6NgDYhRtfAAAAAAAAe5s2bdqsW7f2ueei9sDTzzx1/AlfzshI6969e//+/fv0SWrTpm3HTh1r5s68+5d3xY955ZVXjjnmmA4dOkRvAQAA0HiGDh16ySXff/edd4L08c9//vPqa66qqq7s1SuxV2LigAEDunXr1qpVq4ys9LO//a3/95c/B8e8//77V1xxRU5OTvT9AFDHjS8AAAAAAIC9UHl5+V13RdOd1/746tnnnJk3KrdnYs+BAweOHDFyQtGESSWTxowdPWDgwLZt2yb26nnYEesef/Kx+PH33XffrFmzmjVrFr0XAADAf6dbt24nnnji66+/Hg8d9/7m10uXLxkwoH/v3r3T0tPGjRsbJJQJEydkDcsMjmzTtk1hUf7lV14WX7bzzTffPOWUU5KSkqL3AmCf58YXAAAAAADA3iY9Pf2HP/zhe++9t3379n++9+7PLr+0fHJZz8Se/fr1GzZsWMH4gvLy8sqYisqpJaUlubm5ffr0aX3QQSmpyd88feMf/xw1EjZv3pyXlxe9KQAAwH+kefPmc+fOefDBB+NB47nnnz3xK8enpacm9ExIGTIkNy+3eFLx1KlTw4hSVTll6uQgs6SmpXbo2KFj5w5z59f86t574t/45JNPLl++vGXLltH7ArBPcuMLAAAAAABgb5OQkPDVr371T3/6U3yQc/cv71q4eEG/fn179UpMS08bO2b0pJJJU6ZOqaisCKsFcdOqKqoq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ANAH6WdbPN0CAAAAAAAAAAA4degOIrqIAAAAAAAA0AfpZ1s83QIAAAAAAAAAADh16A4iuogAAAAAAADQB+lnWzzdAgAAAAAAAAAAOHXoDiK6iAAAAAAAANAH6WdbPN0CAAAAAAAAAAA4degOIrqIAAAAAAAA0AfpZ1s83QIAAAAAAAAAADh16A4iuogAAAAAAADQB+lnWzzdAgAAAAAAAAAAOHXoDiK6iAAAAAAAANAH6WdbPN0CAAAAAAAAAAA4degOIrqIAAAAAAAA0AfpZ1s83QIAAAAAAAAAADh16A4iuogAAAAAAADQB+lnWzzdAgAAAAAAAAAAOHXoDiK6iAAAAAAAANAH6WdbPN0CAAAAAAAAAAA4degOIrqIAAAAAAAA0AfpZ1s83QIAAAAAAAAAADh16A4iuogAAAAAAADQB+lnWzzdAgAAAAAAAAAAOHXoDiK6iAAAAAAAANAH6WdbPN0CAAAAAAAAAAA4degOIrqIAAAAAAAA0AfpZ1s83QIAAAAAAAAAADh16A4iuogAAAAAAADQB+lnWzzdAgAAAAAAAAAAOHXoDiK6iAAAAAAAANAH6WdbPN0CAAAAAAAAAAA4degOIrqIAAAAAAAA0AfpZ1s83QIAAAAAAAAAADh16A4iuogAAAAAAADQB+lnWzzdAgAAAAAAAAAAOHXoDiK6iAAAAAAAANAH6WdbPN0CAAAAAAAAAAA4degOIrqIAAAAAAAA0AfpZ1s83QIAAAAAAAAAADh16A4iuogAAAAAAADQB+lnWzzdAgAAAAAAAAAAOHXoDiK6iAAAAAAAANAH6WdbPN0CAAAAAAAAAAA4degOIrqIAAAAAAAA0AfpZ1s83QIAAAAAAAAAADh16A4iuogAAAAAAADQB+lnWzzdAgAAAAAAAAAAOHXoDiK6iAAAAAAAANAH6WdbPN0CAAAAAAAAAAA4degOIrqIAAAAAAAA0AfpZ1s83QIAAAAAAAAAADh16A4iuogAAAAAAADQB+lnWzzdAgAAAAAAAAAAOHXoDiK6iAAAAAAAANAH6WdbPN0CAAAAAAAAAAA4degOIrqIAAAAAAAA0AfpZ1s83QIAAAAAAAAAADh16A4iuogAAAAAAADQB+lnWzzdAgAAAAAAAAAAOHXoDiK6iAAAAAAAANAH6WdbPN0CAAAAAAAAAAA4degOIrqIAAAAAAAA0AfpZ1s83QIAAAAAAAAAADh16A4iuogAAAAAAADQB+lnWzzdAgAAAAAAAAAAOHXoDiK6iAAAAAAAANAH6WdbPN0CAAAAAAAAAAA4degOIrqIAAAAAAAA0AfpZ1s83QIAAAAAAAAAADh16A4iuogAAAAAAADQB03ppN8DAAAAAAAAAADgpKfjzwSgAQAAAAAAAAAAAAAAAAAAAPR+Ov5MABoAAAAAAAAAAAAAAAAAAABA76fjzwSgAQAAAAAAAAAAAAAAAAAAAPR+Ov5MABoAAAAAAAAAAAAAAAAAAABA76fjzwSgAQAAAAAAAAAAAAAAAAAAAPR+Ov5MABoAAAAAAAAAAAAAAAAAAABA76fjzwSgAQAAAAAAAAAAAAAAAAAAAPR+Ov5MABoAAAAAAAAAAAAAAAAAAABA76fjzwSgAQAAAAAAAAAAAAAAAAAAAPR+Ov5MABoAAAAAAAAAAAAAAAAAAABA76fjzwSgAQAAAAAAAAAAAAAAAAAAAPR+Ov5MABoAAAAAAAAAAAAAAAAAAABA76fjzwSgAQAAAAAAAAAAAAAAAAAAAPR+Ov5MABoAAAAAAAAAAAAAAAAAAABA76fjzwSgAQAAAAAAAAAAAAAAAAAAAPR+Ov5MABoAAAAAAAAAAAAAAAAAAABA76fjzwSgAQAAAAAAAAAAAAAAAAAAAPR+Ov5MABoAAAAAAAAAAAAAAAAAAABA76fjzwSgAQAAAAAAAAAAAAAAAAAAAPR+Ov5MABoAAAAAAAAAAAAAAAAAAABA76fjzwSgAQAAAAAAAAAAAAAAAAAAAPR+Ov5MABoAAAAAAAAAAAAAAAAAAABA76fjzwSgAQAAAAAAAAAAAAAAAAAAAPR+Ov5MABoAAAAAAAAAAAAAAAAAAABA76fjzwSgAQAAAAAAAAAAAAAAAAAAAPR+Ov5MABoAAAAAAAAAAAAAAAAAAABA76fjzwSgAQAAAAAAAAAAAAAAAAAAAPR+Ov5MABoAAAAAAAAAAAAAAAAAAABA76fjzwSgAQAAAAAAAAAAAAAAAAAAAPR+Ov5MABoAAAAAAAAAAAAAAAAAAABA76fjzwSgAQAAAAAAAAAAAAAAAAAAAPR+Ov5MABoAAAAAAAB9xKBBg5qamn7zm/0HDhw466yzhg4dqj8AAAAAAAAAAADAqUDHnwlAAwAAAAAAoC+YN2/er371qw43zz77hxUrVvTr108vAQAAAAAAAAAAgJObjj8TgAYAAAAAAEDvVlMz/Hvfe+jf//53R0fHf//vP7/57f59P3/yb//4q4pBP/bYYxMmTNCLAgAAAAAAAAAA4CSm488EoAEAAAAAANBbZWRk3HLLLX/7299U1vk3zzy9rvlsW2LCkPDBU6dN/v7DD/1fx39l/r/+9a8vf/negoICvRoAAAAAAAAAAABOSjr+TAAaAAAAAAAAvU9ERMR555379ttvqejzG2++fsWVl5WWFttstqysLLs9PSIiMjomumnJgqd+/Qu1zEcffdTS0jJs2DC9CQAAAAAAAAAAAJxkdPyZADQAAAAAAAB6mRkzZvziFzrW/MkfP77jzttGjKxJTknOyckZXj184qSJU+umjh4zKjsnJzIyMiU1edMF57W99opa/ve///3ChQvPPPNMvS0AAAAAAAAAAACcNHT8mQA0AAAAAAAAeo2SkpJvfvOb//73vzs6Ov717//97kMPzJg5PTklOTMzs7y8vHZ87YwZMxpc6htm102rq6mpsdvtg4cMyS9yfPGWG/74509VDHrPnj0jRozQGwUAAAAAAAAAAMDJQcefCUADAAAAAACgF0hKStq2bduf/vQnlWB+6te/WLFqeWZmRmpqSnFJ8ZjRo6bWTZ01e1Z9Q31DQ8McZe6c+jn1U+omV1RWJiYmRkSGjxk36tsPfvNf//5MtvCPf/zj5ptvzsjI0DsAAAAAAAAAAABAX6fjzwSgAQAAAAAAcEL1799v1apVL7zwgoo+v/Lqyxe3XJRfkJ+UlJyf76ipGT5p0qQZM2bMmjVrdv3s+obZ8lVnoBvnNM6d0zhvTkND/aRJE0tLS2NjY4dFR82d3/CzXzyptvbGG29s2LBh8ODBemcAAAAAAAAAAADou3T8mQA0AAAAAAAATpza2tq9e/eqsPKnf/x4x603V9dUJyYlZmdnV1ZWyqd1ddNmzJwxc9bMWS6zhRWDVuNA6xj0vPlzZZo1e1Zt7ThHfv7QoUOTU5I2btrwyqsvqi3/4he/mD59ut4lAAAAAAAAAAAA+igdfyYADQAAAAAAgBPB4XDs3Lnzf//3fzs6Ov73X5898ODuumlTkpKT7HZ7aWnpmDGjp0yZMm369BkzplsB6JkmAj1r1mxrKGiZ5sxpaHBloBvnNs6bP3f+gvnz5s2V5UaPHp2VlRUREe4ozL3hi9d/+qd22cV///vf+++/v6ysTO8eAAAAAAAAAAAAfY6OPxOABgAAAAAAwPEVFRV14YUXfvjhh67RmTt+/oufLVm6KD09LTklubCoaMSImokTJ9RNmzptet206dOmz5gukysDbU06Aq00zG5oqFfjQDfOtcaBXrBg/oKFC+bNmyer1IyoSUlNiYiMGDl6+De+/bV//dtKWn/66adbt26Ni4vTRQEAAAAAAAAAAEAfouPPBKABAAAAAABwvJx++unz5s175plnVPT5pVdevODCzXn5uUlJibl5uZVVlbW14yZPmTy1bmqdTNPqZHJloK0Y9IyZM6wYdOdA0FYAun52fYNM9XOsBPScxnnWONALxMIFCxcuaJzbKBupqCi32RKiY6PnzJv9031PqP2+8MKLy5cv79+/vy4WAAAAAAAAAAAA+gQdfyYADQAAAAAAgONi+PDhDz30kIogf/zJxzfdfGNlVUWCLSErK8vpdI4eM3ripImTp0yeIqZOmVI3ZWrdVCsJ7R6Dnjl9xszpXcaBrlcx6PqGhgYrA22NAz1vwYL5C5sWLGxaKFPj3EbZZklJcXT0sMTkxHPOa37pledVGX786I9ra2t14QAAAAAAAAAAAND76fgzAWgAAICjc/rpp/U74/SB/U4PH3hmRuzA2pzwxVXDNo2Pv2524t1NqQ+stj96Tua+TdnPXJxz4NLcZ1v0dKAl97cX5/xic9ZjG7K+s9p+z+K07fXJF06MX1odPTE3PCduYGTYmWH9Tu935umyfQAAgL7ObrffeOONf//73zs6Ov7n8P98a/c3Jk6emJiUmJaWVlxcPGJEzfjxtZPE5EmThcpAT5ky1aVOuALQaprhKwPdOQ60KwM9r3H+/LnzF8xfuHBBU1PTokXyZWFj45zxE8bnOvKGRg115Odc94WrP/m0XQrz2Wef3XHHHbm5ubqgAAAAAAAAAAAA6M10/JkANAAAwJEbcObp4QPPsEX2G5UZvnpkzPbZiQ+sSf/1lpwXLnPI9NLljpevyH/lyvxXr8x/7ar817cWyPSGTK1dJ9d8mWSZV6/Kb7syX9aSdWULz1/m+M1Fud9ba//inOTmMXG1uRHJUf0jBp4xoB9paAAA0McMGjRo/fr1r7/+umvM5Y6f/PSJpsULU1NTUlKS8/Pzq6oqx44dO2HChIkuVgZ6kisDPVlnoIUrBK3HgTZDQXdmoGfqGHRnBrphTkNDY0PjvMZ58+fNXzB/wcL5TVYIumnx4kXyVRYYM3ZMZlbm0KGRNaOqv/bNr/7vvz+TUr3zzjtbtmyJjIzUhQYAAAAAAAAAAEDvpOPPBKABAACCc/rppw0ecEZCeL/a3PAtE+O/tSL9mYtyX7rC0XZl/htbC97eVvDONYXvXlP4ztWFB12TzJHpLTW1Frzpa5L5agG1sFpRtiDbkUnmyJZfvSr/5cvz/3BJ7nfW2FumJEx2RCZG9h8y4IwzyEIDAIBeb9q0un379qno8wsvPr9p88bcvJwEmy03N6esvGzUqFG1tbUTOk2cOGHipImTJk2crMaB7sxAu4aB1uNAWwHoGdNkmj7DjAPtykDPnjW7fpYVgLamhjmNDXOtcaDnu8aBXriwaeGiRYsWL160ZMmSpqamWfWzRowckZycHBMbXd8464kn96oS7t+/f86cOWeccYYuPQAAAAAAAAAAAHobHX8mAA0AANCdwQPOSI7qX18y9NZ5yb/anP2Ka1znt1yJZxV3VkFnj3Dz0U8qGG0i0fL69a0FsvffXJh718LU+WXD0qIHDBlAQAcAAPRGTmfp1772tf/+978dHR0ftX9ww43Xl5U7ExISMjLsJSXFNTXDx44dM652XG1t7XhL7fgJ42WaMFHHoCe7YtBTPh8I+vMUtBWDnm7FoE0GWsegZ8+aVW8NBW1FoOdYGeh58xrnzbPGgV64YOECnYFevGTJkqXLli5avGjGzBmVlRUJtviklMTmDWtffPk5FYN+8MHvVFdX68MAAAAAAAAAAABAr6LjzwSgAQAA/Djj9NOHDT5zTFb4jQ1JT2/Jbbsq/83WgndcceRjlHgOPKk8tCqAvH31qvzfXpx727zkSY6I6CH9+jEiNAAA6B3i4uKuuuqqTz/9tKOj4/Bn//O1+3eNn1gbb0tITUsrLCysqqoaPXrU2LFjxo4bK9O4ceNqrRj0OJWBnjDRmiZOmiBT51DQk6ZMsVLQKgEtTADalYGeNmOGykDPnDlrpisAPau+frY1FPSchsa5c+bNmztvvpWBXrBwwcKmhU2LmhYvWbxk6ZJly5ctX7Fc3k6bNq20tDQmNiY3P+ea7a0ff/qhFPvPf/7z9u3bExMT9SEBAAAAAAAAAACgl9DxZwLQAAAAXs484/T4iH4Ly4d9Z03GK1fo3LMa6dnEkU/s9FbnyNBvtRa0XZn/8NkZK2tikob2638mMWgAAHDC9O/Xb/myZc8//7xrJOWOx3+yd/7CuSmpyUlJSbl5uWVlZSNGjBg9ZrRMY8aOkckaBHrc2HG148aNr60dX+uWgbYC0FYG+vMAtMpAT5laN3XqtKl1010ZaD0OdGcG+vNBoH1koBcIk4FerDPQK1aukElmTp48OT8/PzomumZU9X1f//K//vOZlL+tre3ss88OCwvThwcAAAAAAAAAAIATTsefCUADAAB0FTuk36KKYY+sz3x9a/5B14jLvSf37D2pMaHlq5T2yfMyzxoZkxDRjxA0AAA4/mprax999FEVfX7u+QPnbtyQmZ0ZHx+fk51dUlJSPbx61MhRo0aPHD1avo4aLcaMHiNcQ0GPswaCtqZalYR2xaBVBnqiNQ60NRS0lYGeKpNXBnp63QxXBnrGzOkzZ7nGgZ49c/ZsnYGun1M/Z27D3LmNc+fPnT9//oIFC5pMBnqJlYFeuXLFqlWrVqxcPn/B/Anjx2dmZsbGxcxumLH3J/pYfvrTn06ZMkUfJAAAAAAAAAAAAE4sHX8mAA0AANAprP8Z43LCH1hlV9Hng1cXvtWLo8/u01utakDogje2FvxgXeb0wsghA87QRwUAAHCM5ebm3nnnnZ99Zo2a/OFHH1y3/ZrS0pL4hPh0e3phUWFlZUXNiJqRihWCdvGTgTYB6PHWONDjJ7qGgp5kBaAnTp7SmYGumzJ1misDPW2qCkB3ZqCnzZg5Y6ZwZaBndWagGxrrG+fOmTt37jyVgXaNA73IlYFevGSxGgd61epVq9esXrlq5bz586RkySkpyalJZ69f8+LLz8lB/fvf/7733nsLCgr0AQMAAAAAAAAAAOBE0fFnAtAAAAAuiZH9L52a8NLljoNXu6LPXiHj3j+5YtAF71xd8MoVju2zE9OjB+hjAwAAODYiIiIuvPDCd999t6Oj4/Dhf96368vjxo2JT4hPTU11OBxl5WXVw6tHjKipcU0jRozQKWjvDPSYMWNduo4DXeuKQatxoCeocaCtGLQrAz1lmhWDruuMQU+XaUadGgfaikHPkqlzKGidgW6ca4Wg586fP2/+gvkLFy5samqyYtBuGeg1Z61Zu/aslStXNsxpkJIn2BJyHdnbrr2y/ZMP5QA/+OCDyy67fNiwYfrgAQAAAAAAAAAAcPzp+DMBaAAAgNNOK0oK+8YK+5utBe9c02dGffY3Sfnfubrg7W0FD6/LGG4ffPrp+hgBAAB60BlnnNHY2Pib3/ymw2XvY482zmtISk6y2Ww5uTnFJcWVVZXDO9W4jHBxz0BbAWiTgR5rZaD1ONBifG2tKwAtU5dxoCdPmjRpyqSJdZMmTZs8uW6q/G/a1Lrp7hnoaSoDPUNnoGfNrp89u2G2lYFunNM4t3GelYF2jQO9cEFT08JFixctXrJ46bKlK1asWLVq1Zo1q8+2rF2+YrmsW1paGh8fVzOy+sv33fOv//yvHOmzzx5YtGhR//799YkAAAAAAAAAAADA8aTjzwSgAQDAKa/GPvjxDVnWwM99PPrsPr3tikE/dUHO5PwIMtAAAKBnDR8+/Dvf+Y6KPj974A/nbGjOyLTHJyRkZGQUFRZWVJRXVVdVK1b+uVoloK1hoEfUjLQi0PLfCBWCHq3GgR79+TjQKgM9brxrHOgJ1jTBykDLNHHC+EmTJk+Y1jhq1rLq+hXDZy4cVTdr4tS6OplcMeg6KwY9o27G9GnT3WLQs1QM2i0DPXde47x58+YvmLegab5rJOimxYsXLV22dPmK5atWrly9ZvXas9euaz777HVnL1u2bNq0afkOR4Itfmb99Mef/LE66h/+8IdSZn06AAAAAAAAAAAAcNzo+DMBaAAAcGpzpgx68rysd11DJntkiPv69FZrwbvXFO6/MHdcTrg+WgAAgKOTlJR0ww03HDp0qKOj44MP37/62m3FxUWxsbHp9vT8/Hyn01lZWVnVSWegVQq6ZniNNZlxoK0c9KhRVgpaZ6DNONDjOjPQtToDPX7CeDFh4vhZyyuXX5O7/svpmx5I3vLd1At2Z5+7s3DZJcNnN02cOl2NA21N02dYMWhXBnqGTDM/z0DPqp8ze07jnMbGxrli3tx5C+YtWLBg4cKFixZ9noFesXLF6jWr1q5du27duvXr15+97uylS5dMmjzJnmFPSUta27z6+ReelcP/y1/+smPHjrS0NH1qAAAAAAAAAAAAcBzo+DMBaAAAcAqzRfb/zhr7wasLT770s5rearXGgX783Ozs+IH6mAEAAEIyaNCgdevWvf76ax0dHf9z+J9f/uq9o8eMik+IT05KzsnNKSkprqioqOxUVeWKQVvjQFuTNQi0NQ60KwM9YviIEVYMujMD7TYOtFcG2gpAy1Q7fnLd+IUXFm34evIlT8Re87u4G1+23fJa0k1tKV84kH39L52XPzB62ea6qTOnfJ6Bnl433RoHerpMnRnoWVYGut6VgZ7T0Dh3jspAz58/b/6C+QtdA0EvXrx46dIly1csszLQq1edddaas88+e/369edsOGdd87qmxU1SvpSUlLz8nK3brvj404/kVLz11lsbN24MD+f3zQAAAAAAAAAAAI4LHX8mAA0AAE5Vp59+2kWT4t/YWnDw6kKP3PDJNL29TabCmxuTBpx5uj5yAACAI1RXV/fzffs6XB798SP1DbNtiQk2my0rK6uwsLCsrKxCK7emyopKmaoqZfKMQdeYGHTNiJEyuWLQ1jjQI0dZGWgrBj1mzGgrAz12zLjasePGjxs7dtyUSVPOaq3e9J2Uy/fF3vhK3J3vxd/9UcK97TLZ7v4w9UtvF977+qS7nmlYvmXWlOlTpso0bWrdNJWEdo9BT59pJaGtoaCl/A1zGuY0zpFp7jwVg56/YMH8hU3WUNBLli5etmzZ8hXLV65aucbKQK9d17xuw4Zzzt147tp16xYsWCDHIodfXVP5lfvu+dd//lfOydNPPz179uzT5f4SAAAAAAAAAAAAx5SOPxOABgAAp6qM6IG/uSj33ZM6/aymd64pPHBpXmXaYH3kAAAAQSsqKrrvvvv+85//dHR0PHvgD+ua12Zk2OPi4ux2e35+fmlpablWVl5RriavDHRlVbUrBt05DrTKQLvGgdYZaCsAbTLQVgDalYGuHTNm7Niastr5q8Zs+U72pU/atr8Qe9s7UTs/ivpye/RX2mO+3B51b3v0ve0pX36/+hvvzt76nWlT50yaMnXK1LopU6dNsTLQrhi0jwx0/cz6hlkNc+ob5jQ0Ns5pnNs4zzUU9IKFC6yhoBctXLJkydJlS5cvX24NBb1m9dqzzjp73dnrz1l/7nnnnbvxvLPOXltf31BSUpKUbJsxe9reJ34kJ+e///3vN7/5TTkh+sQBAAAAAAAAAADgWNDxZwLQAADgVLV+bOwrVzhO7uGf1fT2toJXr8y/fnaSPnIAAIAgxMTEXHnlle3t7R0dHR98+P7V17QWFhXExsampaXl5uYWFxeXlTnLrP/kq7OsvExNnRnoiopKa6oUneNAd8agq7zGgXbFoEfpGLQrAz1qzFjr/4eXja0oqZqzxb7xIdvWp2Nuem3YVz9Ku+/jVFcAetj9n6R84xN5HXP3R/a73xh13eOjZ6+qqR03YYpQMWjXZMWgp9VNmz592gwrCT1DzJoxc/bM2fWz6uvrGxrq51gx6Ma5cxvnzZ+nhoJuWtS0eMnipUuXWkNBr1yxavUqNRR0c3PzOeduOO/8jeduPG/V6tWySTkVaekpZzWvef7FA3KiPvnkk2uuuSY+Pl6fRAAAAAAAAAAAAPQsHX8mAA0AAE5V9y1Ne/Wq/Le3ecaFT77prW0Fr28t+Ml5WfrIAQAAAhowYMCSJUuef/75jo6Ozz47/NX7vjJ6zKi4uLikpKScnJzCwkKns7TM2UleuZLQOgAtKlxfTAZajwPdGYAWw6urXRloKwatx4GuGWky0KNHyu7k/2sqRpc6qgrK0xquiDv3e1FX/mbw7W/Zfv/38352aNE97cMe/LTo5b998fd/3XLfxwl3fRRz+5t51+1zzjnHWTNq5MSJEydPmjx5ymQVg66TyRoKum7a9GkyTZ8xbYY1GvSMmbNnzLaGgq6Xac6chjmuoaDnzps7b/68BQvmL2xasGhx05Ili5csW7p8xfKVK1esWbP6rLVnnb1urTUU9Mbzzt+8acO5G1asXDFhwoR0e7qjIK/16qv+9Oc/ykl75ZVXVq1aNWjQIH1CAQAAAAAAAAAA0FN0/JkANAAAOFU9uj7ztauscLBHXPiknN5oLXjpcoc+cgAAAP/GjBnz6KOPdrg88ZPH585rTExKtNlsmZkZ+fn5JSUlpaVO+Z+ZnNbkFoN2JaGtBHR5uRWAdsWgrXGgKyvNINCuGLQeB3p4TU3NiM+Hgh7pGgR6ZM2oEVWjhpePys5w5FXEzr0m6pzvDrni6bCbX4394Z8aHvrT+J3tw379lw2f/M8vf/mXDV9pj/vSh8N2vJnc+vPsuecVVddUjx47evLkSZMmWSloKwZdZyWh62Sqm1o3ra5uet20GdNmTJ9ujQY9a/qs2TPrZ8+ub5CpvkHFoBvn6Bj0wgVNTQsXL160ZOmSZcuWrli5YtWqVWvWrF67du265nUbzt2w8fzzz9+86Zxzzlm0eJEUOyU1pWbk8Pu+/tX//Pff1tl74onx48fr0woAAAAAAAAAAIAeoePPBKABAMCp6pHmjNe25p86AegXLsvTRw4AAOBLSkrKzTff/Le//a3DGsP45Y2bNmZlZ8XFx2VkZOTl5RUVF5V68J+BVgHo8grXONAmA13lykCroaCHV3UdB9pkoEfUyKuqkSOqR5UVV6YlZ2SXDWu8euj6ByIu/cXg654ffNObkbe/N/SuD6O+88cRj/x5xlc+TpHXd7wXc9OrtsueSJl9dr5sefjI4bXjx02aPGniRCsG7RoKevJUa5oy1WSgp9dNt0aDVhnoGbNnz5pd35mBntPQ2Ng4d27jvHlz58+fZw0FvajJikHroaBXrlq96qy1a84+2zUU9Hnnnr9JnN/c3Dx/wTw59pTUlMa59T/b96Scxr///e+33XZbenq6PsUAAAAAAAAAAAA4Sjr+TAAaAACcqnY2pb56Vf7bp0AA+q1tBa9vLXi0OUMfOQAAgJelS5e+8sorrszu3+644/bKqsqEhIS0tDQr+lxUVFpaUiKTi7zunDqpALSLCkCbQaB1BtoKQLtloDsHgTYZ6BorA11TM7JmxIia6kr5z8pAF+aXJiWkpWQNm3HxsLXfiNjy+OCrfjNw+4uDb34z4vZ3h97xfuQdH4Tf+UHkHe9G7Xgr5oYXEzd/zzZxXn55WXVVTeWoMSMnTpowadLnGejPY9B1U00MerpMM6ZPnzV95qwZs1QG2hWDnuMaCnru3Ma5rgz0goULFjYtXLR40eIli5cuW7pixYpVq1auXq2Hgj5nw4bzzt+4abMVg5Y5s2bNyi/Iz8rJ2nLh5vc/eE9O6RtvvCEL6xMNAAAAAAAAAACAo6HjzwSgAQDAqWpJ1bC2K/PfubrQIy588k0HtxW8elX+xVMS9JEDAAB0tW7duv/+978dHR0ffvRh06ImHX3OVdFnK94sX00AWl58nod2i0HrBLT4fBxoHYN2jQLtykBXuTLQahBot3Gg9VDQI4YPr64ZXmENBl1ZVpOdVphuTy+bGj3/+mGrvz5kw54BF/2039ZnBl7/wpAb28JveTPylrci5esXX4vY/nLk9heSrvhJxtJt+aMmV5SVV1ZVV9eOHzdx4gTXZIWgJ02xpslTJk1RSeg6azRomaZNc40GPXPajJnTZ86aacWgZ8+qb+gcDbqxQcegF8xb2LSwqck1FPTSJcuXL3PFoFetOWvN2rPXNp+zfsO5556/6fwLLrhg4/kbV69ePXXq1NTU1BGjal548Xk5sWLz5s36dAMAAAAAAAAAACBkOv5MABoAAJyqEiL7/+z8nHevOfkD0O9eXfjMRXkOW5g+cgAAgK5+/etfqZDuX//61yuuuKKwqDA7J7vUWVpWXqbTzS6uyLOLrwD05+NAdwagXeNAuzLQ1jjQ5V3GgTZDQXdmoK0AdM3w6kqZaqorRpaXDh8xJXPlLQlX/DJy86MRS+4avPTe/uc81P/Cn/S7/NcDtv0u7NrnB1/3wuBrDwxp/f3gy3416KLHh33x+exvfFx5/U+d8y8oqRlXOWLE2AnjJ0yYKP+JiZMmyzRJJlcGetKUqVOm1FnT1LopddOm1k2vmzajbsbMaTNnzugcDXpWfUO9GQ26cW7jvPlzFyxY0NS0cNGiJjUU9LLly1asXLF69eqzzjrr7OZ155x7zsaNGzdfsPmCLResP2f94sWLLr205b333lXn9oUXXtCnGwAAAAAAAAAAACHT8WcC0AAA4FR1+umnrx4Z89pV+Qev9kwMn0yTHN1b2woum5pwxun6wAEAADw899xzHR0dhw//j4rq/upXv1rXvK6srCy/oEBnmp1qGOjPx4G2/v/zDLT7ONCuGHRZZwy6vDMG3ZmBtmLQ1jjQFe4ZaCsGXVNdPXx4eXFNRWlN7fSyFddnXPfbuDvfG3rpE4PHrhk4ctmQGVvDFt81cN2D/c9/pP9FP+l/6S8GXPrLgS2/HLDlJ2Hrdg+ademQMcvCW36Y/v2/VT/05xFXPVw+b0N17cRxY0ePr60dL6yhoCdNtCYrCT1xsms06MnWaNBTZLJGg542ddqMqdNdMegZJgY9e1Z9vR4NunHuHNdQ0PMXLlzQ1NS0aFHTkqVLXBno5atWrzxr7Zp165vXn3POuubm884799Zbdxw48Kw6n3//+9/+r+P/3n33XX26AQAAAAAAAAAAEDIdfyYADQAATmERYWfc1ZTy7jWFB7ednONAv72t4P1rC3evSo+P7KePGQAAwMsrL7/8fx0da9eu2bJlyzvvvNPR0fGf//7nu9/9bmNjY35+flFxkRVodroS0N7jQLsm9ZHFCkCXugLQ1gDSrslZXlHmmsorKl0Z6KqKSmvqMg50ZWV1ecnwEWPKFlySffljCXe+F7X9uYiF10bmVcaEDRw0NL5/zaLwOV8YuOiuAUvvGbj22/3P+V6/5u8OXP/9fusf6t949VBHZcLAAYOHJp1Zd37kjt/n/fiz0bs/GHXpN6vrV44cO652zOhaMWHS+AmTdAzaNSC0KwY9dbJMU6ZOnlo3Zer0qXXTp06bPtWVgZ4+c9aMmbNmzrZGg55dXz+7YU5DQ2ODGQp64cIFKgO9dNnS5SuWr1q9atXq1StWrbz88sueeOLxw4cPy2lsb2/ftq11zpz6Q385JK/16QYAAAAAAAAAAEDIdPyZADQAADi1pUUPeGC1/b1rC0++caAPXl34wXVFjzRnFCUN0kcLAADgyysvv9zR0TF58iR57XA4br7l5r/99a8y549//PSOO+6YMH58fn5+cUlxmXsMunP4Z7cMdOfkLHGWuTLQ5aVl5U49VegYtCsDbU2uDLRrNOiKqvLS6upR5Q0b8loeSf7S+3FffDly9Z2RNdOTYoclDouIjx4WO2RI+OwLkjb/MG7WtkETtwxuum3Aiq8MqL8urPGGsOufyrrme2NLqh2pKelRQ6P79RuYWNB/4TXRX3m99PHPar/+xpjz76qZNn/06FHjx40dP2HC+AkTZZow0UpCW9OkKRNd06TJUydNqZs8ZdqUqdOmTLNi0HXTZ0ybPnP6TNdo0FYSut5KQjfMqZ/T2GANBT1/3oIF8xctalq8ZLFoWtS0/pz13/zmNz755BM5dYcPH5bX9fX1qampRcWFn376CQFoAAAAAAAAAACAHqDjzwSgAQDAKS8nfuDXl6e/1Vrw7jUnzzjQ71xd+O41Rd9bm1GWSvoZAAB04+WXX+ro6Fi4cEFUVFRkZOTAsLBRo0bu3v3t//u//5P5r77adtlll1UPr3Y4HNb4ztYIz1YEWlMBaNeLrgFo12Qy0J0B6M8z0FUVFZUVZSVW/nna8vxN30q9/e2EO98ftuk7UWPnJ+TkZudkFGakZ8fHJibEpFZPTb31QNH1zyQ5xg5OLhi04q7w878/tHRKVFpp2BceL/3Dv5rXXDOisKhYSpiSkho+ZNiQiPC80UOa70564MPqJ/81+csHas/ePnLS7NFjRo8fV1s73pWBNjFoNRp0ZwZ60pRpk6dOm1I3fcq06XXTpk+bPmP6jJkyWRnoWbNnWqNBN9Q3zp1jZaAXzF/YtKBxbuOSpUtuvvmmtlfb5HSJn/zkiWXLlskJKS8vLywsHF5T/ckfPyYADQAAAAAAAAAA0AN0/JkANAAAOFVFDTpTvzrttKSh/W+ak/z8pY4Pri18q7Xgja19eJLyv39N4cuX59/dlJYdN1Af4WmnRQ/+/HgBAADcvfTiix0dHcuXL7PZbBkZGYmJtkGDBw8ZMrixcc5TT/1ShXp/8Yufn3XWWSXFxYWFhaVWDrpUR5/dAtAyqQB0aZlMJgPtOQi0NZWXOUsrypzlE+YWNO+03/xK0s6PYy59fOiUs2Nz8uyZqY683ILCosIyp7Mw35mZmbHhnpxv/NmxdHt05ODYwREDNtw/5NqnYwuqEk47LWzC2vBf/X3ud9uaxtWXFhc6nc6youLirKzc2OjEoTHh5bPCL/1exo/+Mu4n/5x+21O1yy8bOaFu7JjRVgraFYMeP1HFoCdPlElloCfXyTR5Sp0rBj1tap0aCtoVg545c8as2dY40HMaG+TkWEnoxoZLWi556ldPqbP0/AsvXHDBZjk5BYUFFRUVNTU1hYUFY8eN/fRPjAANAAAAAAAAAADQE3T8mQA0AAA4VW2ZEJcePUC/Oe20gf1OP2tUzOMbst5uLXjv6sI3ryp4o+en/GM6vXlV/nvbCt7ZVvCzjdkXjI+PCDtDH5uV8O53/exE/QYAAKCr5w4c6OjoWLFyRVJSUk5OTlZWZmpqanx8fL9+/WJjY87ZsP7111+TBf71r389+OADDQ31+QX5hUUFTj0OdLE1Weln+VpcXFxSVFhaWGBNRYVlJSVOr3Ggnc6S8pLi8tF1RStuyLrh2ZR7Po3btj+q/uKYgrK09JS8bHu+Iy+/pLi4vLy8unJ4saNi4lL7PW8XfvHZ1PJR9pjwtMiYgRsfHPLF523Dp9rDB8VEJPTb+nDWCx1rW+6rLS0rrakeOWrkmJrhNc5SZ6Y9KyoiPto2ZOyKoTfuy//Z4SlP/GXmF348YcHGUWMnjB0zZlztBGs0aCsJPcmaJk6eMHGSlYaeNHnypLrJOgZdN1nFoF2jQU+bYWWgZ86cNUNerz37rIe+991//PMfcnI+/vjjG27YXjOiJjsrq9RZKoWvrKwaOXJEcXHR+Am1f/zzpx988IE+3QAAAAAAAAAAAAiZjj8TgAYAAKeqvesz7m1KdSSE6fcuRUmDbm5MenpzzrutBe9usyLLr1/ZByYp5zvbrAI/syXnrvmpIzKG6ONxSYse8MX6pLe3Fuj3AAAAXf3hD7/v6OhYvXpVYmJijkt2drbdbk9OTh46NKpfv34ZmRnbt1//5z//WRb79NNPb73t1rHjxjryHaXO0pKS4mIrAF1cVFxcWFBSVlU4ui5/wry8iQtyxs7OrRpdWFLiLCkrLauwMtClpc7iwrLh44oWXpp99S/T7/006QsvRi/ePqxkVLI9LSc70+EocBQUFpUWybKV5c6q0oLq4rLclu/n7PpjZtMVqbnpxSkJGcMSBl3ww8gdryWNrc9LTEgLHzSsak7Ej9onPd6+bPrKsoqy4aNGjhpZM3pUzejhVTXFhcWpifbIwTG27MH1F8Xc81zZr/89+9GPG67aXVu/evSYcWPHjKsdP7F2wsTa8RPGy3+TZoyetbR6/rmVi7fULNoyel7zuLqGiZMmT5paN6Vu+tRp0+tmzJw+pW7y3HmNX/rSnR988L6ckM8+++z++++fPHlSVlZWfr7DGoO6rKyysqJ6+PCRI0cUFhVOmDj+T//vj++9954+3QAAAAAAAAAAAAiZjj8TgAYAAKeqR9ZlvHFV/p6zMkZnDTnzjNP13NNOO/300+vyI+6cn/zUppy3txa8t63wrasKXrsiv3dOb15Z8O62woNbC57enHNvU2pD6dD+Z35+LKI8dfCuJWlvXpX/xpX5ehYAAEBXzzzzTEdHx1lnrVEB6GwXeZGVlZWenp5oSwyPCD/zzDOGD6/6xjfv7+j4P1n4pZdeOvvstcUlxcXFRfK1sKCorKJ0+vKi5ddnnnt/0kWPxLc8Hnfhw3Hr7k5s3JQ5ckpx2QhnSXlpxfCS+nNzL9+bcc8nKbe9HX/W3cOqptjS07Ky7Hl5jrzCovzSspKKyoqK8gpncaWzsCovo6T+fPvX/pzf+rOk0sq87NSitOSM+JSILY9E3vJaYu0cR3amI8mWGhUT2fylpGc7lnzhh1PLR5QOrx4xUv43fOTI4aNHDh9VWV5VkF8oi0WER9nLB6+4MfGBt0f/9r8Lvn9wzoX3jp+2cPToMWPGjh0/oW70nHPy19yWsuX7iVftS7/+V/lf+FX1F34y8YpvTV2wbvLESROnTJ08tW6KTOdsaP79738rJ0E88ZMnmhY1ZWVmZudkFxUVlVpDXjsrKiqqqqqqq6traoYXFORPmjzx//3lz++8844+3QAAAAAAAAAAAAiZjj8TgAYAAKeqH6y1t12ef7A1f/8FOcuroxMi+ukPXM44/fSpjsibG5IeW5/10qWO968ueLe14M2rPPPHRz+9enko0xtX5h/cWvD+tsJXLnU8cU7WHY3J9cWe0efoIWfOcw79yblZb7sC3LKW/gAAAKCr/fuf7ujoWNe8zj0A7ZIlU0ZmRmpqanxC/IABA8IGhc2cOeMnT/5Eln/plRcqKssLCgsK8osqqkpXX+28+OHsK/YlXfds/E2vJtz2lu22txNvfs129dNJ5389Z+7Gqpnr87c8mHn3Bxl3f5K46TvRo+fH2TPS7Sm5OTm5+QWOktLi8oqyiqoK2WZ5RUWZs6LIUV46IvPap3K//Gn6zA1p2fbCfEdhVmZOYnrUlh9G7Hg9cVxDbn5ucV6eI2aoLXfU4PtfqX7qb8sWbK4sLaqoGT6ypnrkiOqRI2tGjqoZNWLEyIryity8vPiYpMihkQXjh2y6z773T1N//5+l33ppTvN142cuGr241b7p4ehtv4uRMt9xMOWud+13v1t037sTdr8//54/zFu8YfL48eOnTJk0aszIb3/3fjn855577ryN5+XnO9LT0/ML8guLCotLip1OZ7lV/IrKysqqqqrhw6vzHI7JUyf95a//7+2339anGwAAAAAAAAAAACHT8WcC0AAA4FT1g7X2Vy5zvHaF462r8l+/Iv/2xuQa+5DBA87QH3cqThq0uTb2a0tSf3Zu1iuX5r2/zUpCv3Vlvqz46uXHdZI9vnll/jtb86UMbZc5frkx+1vL0i6ZGF+ZNliXtdOAM08vTxl0/czEtsvy5OhevcyhJv0xAABAV0899VRHR8eGDefYbDYdfHZnxaCz7XZ7cnJyTGzMgAEDooZFzZvfuGjxwozsjLzcPGdx+dJLKi7ak3nlL1JufMl2+zuxOz+Mu+ejuHs/jr+n3fal95Jvfin7pqcr72wr+fKfUi5/Mmby2tis3LS0ZNluTl5+blFxQVmZs7yizDWVyyTvyksr8nLyF19t/9pfcjY/aCssceTm5BcWFMlXW1rUBT+MvPVNHYB2Op0ZGVmRkUPnXRX99L/m3P3r6cPHl1SW1dRUj6gZPmLkiBEjR8o0ctSIUSNqRjidZdlZOTFRtmFxEdVzI65+JP+pvzc++f8WXfGDok0/iLrmQPStB2N3SsnbY7/8ceyX2+O/8nHW1z4a+6335978+OyGBVNqa2szszJGjqteuXqZs8yZmpaWm5trpZ8LC0tc6eeyTioGXVVVlZObM3XalL/9/S9vvPGGPt0AAAAAAAAAAAAImY4/E4AGAACnqofX2F++1AoWt7nCwW9flf+bC3K2jI8vThw0sF+XoZTFgH6nj8sOv3hi/FcXp+xdl/m7LblvXpH/fmvBO1utMPTr1vjK1nZ6dpJSyZbf1IM9Wzv6w4W5jzdn7VqcdtnkhDpHRPhAz7h2vzNOz4sPWz8q9pfnZckRvda1VHohAACArn7+8593dHRsPP+8rgHoTNdXTc2029NTUlNsibZhw6JiYqITk5JTEzIXrZm4bW/1hT9Kuu5Z281vRt3+fuTdHw37cnv0Pe1Rd7dH3vtx3JfeS7njzcybX8haeHV8flVSWlJWZkZOriMnvzC/xFniLHeWlZd9PglnRUGOc/jU9Juez7797eTa+RnZ9oJ8R35pSZkjtyAhNWrLI5E73kgc2yDbKKyoqCwuLo6PSUrOH3LzL/N/8+/Fa66vLiktqxleM3x4TU3NCMtI9WXkyBGjhg8fXlpaYk/PjIqMi00bXNccd/VjBa2/iW/93dCbXpfCD5XCf6U9+svtQ+9tj7jXepH+5YMjv/5m/ZV3NkkBMjMzklOSU1NT8xx5BQX51vDXRYUlJSWlzlKnNVlcx2BloCsrK7NzsqdNr/vHP/722muv6dMNAAAAAAAAAACAkOn4MwFo4EicDhxj+kcNwHHx8Gr7Sy1WLPiVS/X02uWOt6/M/9k5WeeOji1LHhzhFS8WZ55hDa68ojr62umJX1uc+sjajKc25rxwcd5bV+S/v7Xg3a0FB6/Kf+vK/DeuyH/9csdrrhBz26XWZPbiPqmPZBlZUpaXtWQ7UgbZzvutBfLipUvyfn1+zqPrMu9fkrZ9ZuKampjh6UMGnOmjuhg84IyixLCzaqJ/tDbTymRf7rkvmfSiAAAAXf30pz/t6Oi44ILNNpvNFXa2vmRmZQrrlZdsa0zorMyMzLSkjNSk9MUtxRsfTL3i58nXvxj19Q9zHvt/s+//JO/ujyK/8Yn9e3+q/OrHSTvbo295I/7iH6aMnu3IysvOyc12FOQVlRaVlpU6y53OMj2p9HNpSVlpYUWuI+fsnalf+0vGWXck5eY48nLyioqKKsor83IL4lOsEaB3vGEb15Cbl11YUV5h5YyzcyLCo8eviXz8L5N2t80eM1sWrqoZMcLKQOsYtPxn/Z8rBj2yurq6sKAoMdYeZ4uefWnUBY+FXfvCkC+9m/adP1bt+jjl3o+GfvOT7B//v6m7P8m+tz323g8dt79c3XL/iCJnriMvv1iUyFRUYn0tLiktKbUmF/cMdHmZlE1O1IyZ0/75P39/5ZU2fboBAAAAAAAAAAAQMh1/JgANHAmdUQWOGf2jBuC4+P5q+4uX5LVdmvdKS5fp9cscB6/Mf+rc7MsmJ4zPCU+N6u/vX+eAfqeXJIU1FA89f2zsDTNs9y5IeWB5+qNrM362IWv/+dkHLsx95RLZWt7bVzjeuTL/va0FH7R2md7fWvDOVfny6RuX5bVdkvfchbm/2ZT98w1ZPz474zsr0r+6MPWLsxMvqI2dVzq0InXQ4P5+q4ikof1HZw65cHz8k+sz37oi/43LHR5HZCa9AgAAQFdPPPFER0fHRRdfaLPZTOjZij8b8q7rlJGRYU/NTLalZ+QkLb8+d+3Xoi/7ecw1z4ft+WT0K/+84YE/Dv/aJ2kv/O2at//xrQf+WHnnhxG3Hoy/6hcpM9Zl5hRmFxTmW6HhstJSp2vg5M4AtEwyy1lS7sguHteUfMdbGTf8IbF6cmZ2hkM4nc7y8sq8HCsAvfkH4Ttet42tz5G3ZWVl1VXVJSUlSbbU6KQhl3wnbf9/51345RElZaVW+nlETRfyViWha0ZWlY7MtRfmlsc13Rx5weNh254L+0b7yAP/uGT3p0Vf+Tjht3+98uP/+clPDk3d+VHkXR8mffGFnJbvFo+ckpuVlVNQUFDoUlRcVFRSVGxNxVIAOShXGLozCV0mBS6XMzW7fubhz/750ksv6dMNAAAAAAAAAACAkOn4MwFo4EjojCpwzOgfNQDHxfdW21+42IoFv3yJj+nVFsfBK/JfvCTv3oWpq6qja9IHJw/tf0Z3/05tkf3KUwZNcUQ0lQ1bNzL24vHxW6cmbJ9lu7k++Y7G5LvmdZnumJt8c0PyF2battUltIyPP2dU7JLyYXWOyOq0wSlD+59+Wnf7iuhXkTJoSeWwO+cmP3dRjpT2tUsdHkfhMek1AQAAutq798cdHR0tl7Uk2BKstHPn8M+dMvT/y4ss63WGPdOelpGemhEfm+hwJi29PmPNfdEXPxm57Q9ht76R8NUPC+/6MO6hP9W8/c9v7P/rZV/92H7HB0N3HIzZ+nT87PNTsnKy8gvzrbxwcYkKQLtGTXbFoOX/SpzFBWX5pZmbH0z78p9SFlyRnJWVl5ubV1hYWF5RUe6syM3Oj08ZuvkHETveSBgzO0felpWXVVVWVVZU5ubmDo2IdU4f8uD7NT/4aPbUZSWlxRXDR9QMl/+NGG69UKNBW3NqqspHVBQPT01Kzx8VteRL4ZsfH9j6u7Db3kz9RnvF3R/Ff/2TnJf+ccdzf7v2G59m7fxo6J3vxX3hhfRLvp83aV5+RkZWriO3sNCVgS4oLBLFRcUyWRloVwy6RGegrXGgy8sy7PaGObM/+9//eeGFF/TpBgAAAAAAAAAAQMh0/JkANHAkdEYVOGb0jxqA4+J7q+wvXGTFgl+62O/08sXWgNBvX5H/u805dzYmn1UTU5sdnhc/cNigM/VWjq+hYWdmxw4cmzlkZXX0LfVJvzov+63L89+4zMo9e5Tc56S3AgAA0NWPfvRIR0fHFVdebnMFoN3SzxkZ1ljPrq+uyQo/p2fY06wpNTk9elhsXmnioqvtK3ZGbf5RxBW/HnDd82FffG3wbQcj7v4w8ZuflN7zUdId7w+97Z2oG18betnPo2eem5KRmZXtyLZCw0VWCNrKQJd2JqHlv5Ky7IyC6RuSdn6UdvkTCSXDs7Mzcx0Oh3xWXlFeVlqRm5Uflzx008Pht7yeMHpWdk5WvrPMWSnKq2SZ1KT0ocMiVt0a/9R/Z1y9Z4yzqriysrq6prp6ePVwK/9sTdXDh1eWD68qqykpdMbFJeSNiFx425Bzf9j/8l8NuPb5QTe+Pvj2dyN3fhh7/ycF932c9qUPh975ftStb8Ve+7vkzbuzJsxx2O3ZOTnZjnyHFYB2ZaBFUZFHElrHoKVs6enpjXMb/vffnz333HP6dAMAAAAAAAAAACBkCxYsWLRo0fr16wcNGqRnAeiOzqgCx4z+UQNwXHxvxecB6Bcv6mayktCXWkloWfihFelX19mWVw6bmBNemjQoNap/ZFi3Y0OHKHzgGclD+xfZwmqzhywuH3blpIRvL0l74cLcg5fnS3leuTjvJa+iBpj0RgEAALp6+OGHOzo6Wrdt1QHoTjr3bMhruyv9bM9IT8tIsiVHR8cm2+MWXZnTdNPQ9bsjL/pJ/6t+M+D6F4Z88dWIm98Mv/ntwTveDr/lrcgbX4u45vnIzY8Mq21KzsjMzMrNLCjKLykpLioqLlYZaFcMuqSkND+vtGh4+hVPJt/1oW3a2akZ6bm5eTmFhYVlLs6SzgD0nggrAD07OzvL4SxzVlRWlJdVVJRXOByO6KHxmVWD73qu6Im/zZpzXmlRUVn1cCsAbU011cNrqqsqXQHo8uH5eYVxsQlpBRGN2yPWPjBwi1X4gde/OPim1yNvfTvy1nfDb3s34vZ3om55I/ILL8dcsc+24ctZ1bW5Gfbs7JzsnNycggI9CLT6f52BVjFo12jQahDotPS0uQsa//Wff/3hD3/QpxsAAAAAAAAAAAAhu+CCC9QI0PHx8XoWgO7ojCpwzOgfNQDHxUPL05+/MPeli3NfvOgIppcuyn31krw3Ls07eLmj7ZLcx8/O3Dk3+fJJ8auHR88uHDouK7w8ZVBe3MC0qP7x4f2Ghp05qP8Z/c4I9K+73xmnhfU7IzLszLjwfqlR/XPjBjqTB43NHDKrIHJlVXTLxPg7G5N+tMb+0kXWHt+81CF7lzK8eGEok94lAABAV9/73vc6OjquvfaahAQdgNaJZ4vdrib5Im/SrSnDnpGWYk+It8XFxkVFRU0/K2vetTHLvxS54aGwC39y5pVPD7j62UHXvzD4hpeHyHTdi4OveW7w1t9HnvtArHN0WmpyZmZWhqMgt6TUGi+5qKi4xGlNVmS4qDQ7M2/+VUn3fJp83rcS8gqys7NzHAV5paWlVvq5tMxZUp6T5YhLGrrp++G3vB4/enZWbrYeHFpUlFc6S51SzPDwobMuHPb4P8bf9tS4ijFFZWUV1cOrqqqrqoZXyYuKsuqqyuqKsqrcLEfssMRoW8SsK4at+kbYhh/0u+jJflL4aw4vutuQAAD/9ElEQVQMkmLf2BYu0xek/M+Hb90/bPP345ddLYXJzsrMys6WKdvhcBR8zspAW4qsScWgrUC3szQ1NWVh0/z//N9/fvvb3+rTDQAAAAAAAAAAgJCtXbtWBaCzsrL0LADd0RlV4JjRP2oAjouHlqc/t8XKNL9wYYjTixfmvnxxnisP7XjzMiud/NJFeT9rznpwWdrdc5O/ODPxqskJW8bFnTMyZk119LKKqEVlUU3Oz6elFVGrq4c1j4jZPDbuiskJX5iRuHNu8u6laU+sy5Qtv3WZQybZ8mstea9cnCdzPPbuOW3pftJHDgAA0NV3vvOdjo6OG2643isAbbcC0IrrRbpr+GeRlmqPj0uIi4uLCB+aV5Yw7/K0OVdHLr8rvPnBAZt/fOYl+/pd/qsBV+4feOXTAy/71YCLftb/op9GXPtsyrlfy6qpy0xLs2dm5hSXFMnkSkAXlZRYAejcrKKqKSnX/Tbp5lfjxzSmq+Gfi4oLnWXO0lLXVFKW7QpAn//98JtdAeicbEdJaYkKQJeXyVRRUFAQF2OzZQ2++onMJz+btuJqZ2FBSVV1pTUNr6qsqip3Vomykqq0xLyCiuT6SyPO+W7E8vsGLf1Kv+bv9tu898yWn1sx6K3PDJTpyqfDLv15+MY9Q9fenTxuTlaGPUu4AtBZuXm5KvtsyZf/dARaWEdlHVdxaWlJSkrKoiVN/9fxn9/s/40+3QAAAAAAAAAAAAhZU1OTCkA7nU49C0B3dEYVOGb0jxqA4+K7y9MOXGBFh5/f0jOTChm/dFHuKxfnvXpx3muX5L3ekvdGixWMfutS6+ub8tp9UjMvdcgysqQs33axlXWWLfRgqdwnfeQAAABdffvb3+7o6PjiF2/0CEDrsZ87M9Dpafb0VPl/KxadlpaREGeLi4uLiY4JDx9SXZc4+xJbfWvkolsj1uwatP7BAef+4MxNPxqw6cf9Nj7Sb/XX+8+7YdBZX4u89WDyXW86Vt+Y4xyZk5fjigoXFxYVFxUXFxcWFGfnZq6+M+HePyes3GGzYsbZ2Y6CPGdZqdNZWlJSWlrqLCkuy87Mi0tWAei40bNlIYfMdsWfXZwVTmdZZmZW+JBhIxeHf/9P1bteqR01o7C0qExloEVZaaWzuLp6ZHn9xrStPxt24yuDVn11QN0lg6dtHbDorv5rvtn/nIf6n//DMzc/2n/zo2EbfzBo3bciVtwZO+3s9Jw8OS9SLmuyAtC5OSr8bMm3JpV+tliDQBcWFxdJuZNTkpcuX9zR8d+nn35an24AAAAAAAAAAACEbMqUKSoAPWbMGD0LQHd0RhU4ZvSPGoDj4qHlqQc257ywJef5C07Y9NxxnJ7dnKOPHAAAoKtvfOMbHR0dt+y4JT4+PiMjQwWgTe7ZSEuzMtAu8llmki05LjYuLj5uaGRUxNDBzkmxE5pjpl4UObs1Yt4XBy/+0oAldw9c/pUB6x4IW357dFZFZFxmv4kbB27bH3v/X3Nu+m3h/C0FpeWFeTmFBflWZDjbnj+2yXbLG4nX/DauYnyGPS07Ny+nuKSwtMwKP7sC0KUlxc7szFw9AvRrcaNmZWVn55U4i8uEs6zc+moNAl1UXJSYkDwsYcjGbyY++Z9J599TXlRSWFFRUVlVUVpQ5SypmL4i/8KHbLe/G3nt74fMvzoi3TkoOrX/pPMjFt4RNvfmgfNuCZPCL71n0LK7whfdGjH36uiJK5LzCuWMZGZlyaQz0Lm5OfkF+TKpALS8Ui8LCnUS2hoEurg4KTlpxaplcnqfeuopfboBAAAAAAAAAAAQsjFjxqgAdH19vZ4FoDs6o4rja+DAgc8880xHR8fbb78dHR2tZs6ZM0fmiC1btqg5x80x3bX+UQNwXDywJPUP57tSyJtP5umAa3p2U85TG7L0kQMAAHT19a9/Tdo4t99xe3xClwB0uvzPmrS0VNcg0GpGhj01JT0uJj62MwMdHj4kvTCidNrQkcuG1m4In3zh4MlbhtSeE3b+7phvvzFtXGNB//5DBg4emDmif9NNg3e8mvS1PzmueqR46uJCR05hjr0orzjt/Afjd34cP/fyxPS07Oyc7PwCR6mzWKYSUVxSKv8rcmZluALQ37NGgB41KzM7yxWALi9zllop6DKnlYEuKyvPycmJjIgpmjzkvreKH/yodtKSgvw8p7O4ctyMouadaTe9EvWFFwet/3rk8Pro6NhhYf0jEuwRW75rb94dOa55yLgNQyZfNGTqxRGTNkaNWxFXMTk5O9cKfGda6efODHRWVm5ubv7n3ALQBQWFKgPtGgQ6KSlp9ZoVcnp//vNf6NMNAAAAAAAAAACAkBUVFakA9MUXX6xnAeiOzqiGxKRmv/rVr+pZXbW2tsqn//73v2fPnq1nnTgmc+yPexb5WCMADeAYuX124u/Oy7YiwptO8um5TTm/35jz0LI0feQAAABd3XffV6WNc9fOL8XHx9sz7K4AtBVyTu/kijxbI0Cnpaanp+k5skxyYkpctCsDHRcXEx0TGRE1LCYyPi082TE4vTg8OTsyKm7Q9M3h+/45/a59czPykyMihw7oNzgyOqy8Pmz9NyLv/Sjjvo9KNt5TWjYyd9rG+NvfiW95LK6wIiMjIysnL7uouLDEWVxSWlxcUqwVlWS5RoDe+HkAOrfYWVRW4VRcIWhRLsumJKdGRIUv/uKwRz8bfdXDVdXjHYuuyLz+d7F3fBhx8WMRdc2xecVpCbGpQ4fEDA6LWHRV+lc/zFi2IzImeXBs6qC0wvDMkmFZ+UnZOXIW5GxY6WczZWVlZmdnOxwOHX52YzLQahzooqLCxETbWWtXyen92c9+pk83AAAAAAAAAAAAQjZo0KAbbrhBZaCjo6P1XAAB6YxqSAhAh4wANIBjpLkm+pkNWc9tynn2/JN8kmN85tzsa6cm6CMHAADo6t5775E2zj333hOfEO9KNlsDQLvln9U40NYLE4AWVibabk9NSU2IT4yLiY+LtabY6PjoyLioIbHDhsRHDo7td9qQ+Oz+1z6R+tv/Llt+6ch4my3eFjdsaGz44ChbxuDx68Ku+Hnc1/+Yv+NA8U0v2ne8ET9heVJqcnZWTlZ+QV5JaZFrKi4uKSpSAejikqzMnM4AdOyoWZlZKgBd7nSWOUtLVQja9V9ZWV5ublREfHLRoBt+nb3nz+Ov35+x482Ia34/ZOF1w0pGJ6ck2VOTMzIyM+JjUgpHxd/+Uu6NB+LKJ0cP6hcVMSg6ZqgtMcaelpiZkZ6RmammzwPQ2dlZuXm5jvyuAWh555qhA9DWONBWBNqWaFvXvFZO75NPPqlPNwAAAAAAAAAAAI7G+vXrVQB6xIgRehaAgHRGNSR9NAB9PIPO/hCABnCMOJPCfrU+84VNOc9uzD65p+fPz37mnMypueH6yAEAALraufMuaeN89b6vxCfEp9vTrfhzhl1edEozqee0lM4MdOc40LKkLJqakpaSlJqclCJfU5PSU5My0pLtKcmp0cNiBvQbNHrFwEf+OPLBVxaWjc1JlRXt9sTEpKjIuIjwSHtZWOO2Ibe1pX/3H6X3vVfWsNFhz8zKyMguLC4ocRYWlxSWlMrXIqES0CoAff6e8FveiB012xWALi10lpdaU1mpKwMtL6z/CvNLk2zp+aOiWvZG/+Cflfe15zZ/fWhNQ0JaWnpSXEZ6mpXzzszISUpNWr/T/pWPU5fcEJ+cnJoYn5qWYs/OyMvJcuTm5GZnZ2dZZEcWeZuTm5OXl+fowoo+q69KZwLaykAn2BLO2dAsp/eJx5/QpxsAAAAAAAAAAABHY8qUKSoAvXLlSj0LQEA6oxoSAtAhIwAN4BgZeObpu+anPHd+zh82ZvfYdF5vnJ7bmPPwsrRhg87URw4AANDVl+68U9o4X//61z4PQFupZlfk2Yo6p6lJvUlVGejOoaCtsaFdKWhXaDojPdXKFlsrW18zUlJSoyJiY5PDN3497jf/nbvlSxPS7OmZWZkZGZlpqWnxsYmDzojJqQ6/Yl/kl96yffX9/G99Orxld9m4+oL8gsKCgs4AdHGhFYAuKSouKranZw+LjTz/4SE73oobOSszKzunpMIKQJeWWRloVwK6tLTEWZDnrB5TvKg15Zr9UTe2Dbnt1eQH/li98PIsW6w9LdUqW0Z6Vk52XrItc9Q825dez7j88ZjycWmpiXIImVkZrpCzI8+S67AmeS1fAukSgM6X4rsFoM87f4Oc3r179+rTDQAAAAAAAAAAgKORlJSkAtDXXHNNv3799FwA/umMakgIQIeMADSAY2dmfsQzG7IPbMz+3XnZv+/907lHPP3uXGsE6N+fm7W6ahh1DAAA8Oe2226VNs43v/XN+HgVgLbyz54BaPmi3qoMtCsG7RoN2m5PsyLFaak6W6wi0RZrE3ZbQlJ42LCSKUN2vVr0+KeLxs0tTEl2ZaDtmWnJmTabbeG1UTe/OnTuNQNHLBtwyaOx3/5LydfeG7n+1orhtcWOvMLCosKi4sLC4sLi4qLCgmJHUVbh6KEXPjrs5teSZp+XXjE+u3JiUcW4EmdlSWlZSXFpaYHD6Swvrt+QfeUTttvfHXr5viGTzh049qyB971XdMeBKucYe1qKFXDOyXJkpOalZSW0/CD97g+T6i9ITLFZo1ZnpGfm5rrSzyoALVwZ6G7yz9anbgFoaxBoKwNdWFiQkJCwafNGOb2PPvqoPt0AAAAAAAAAAAA4ShdccIHKQI8ZM0bPAuCfzqiGJLQAdH5+/v333//Pf/5TrSva2trGjx+vP+5UUlKyZ88es9hHH320c+dO9+Cy2vvhw4fT09PXrFmjllRv9RJdHVEAutu9K0Eutnz58ueee04tI2fjscceS0xMDByAllVeeukl9Vat4rPM7lsWUoDLLrtMf+bGo5yyQZ8nU7gHoM0ZEz43GyT9owbgeIkYeMYds5OeO9+KCP/upJt+6/p6YGP2Nxak2CL4bTcAAODXLTffLG2ZBx7cbQWg09OtoZw7089W4NmdGvbZmq0D0J2jQVtZZzUQ9OcBaJfU1LToqPjIqMhF1w39xb+nfuEHdZn5sr7dnpaZGGuvaYjd/vywy5+MSMkJP+O0MFte/5ktg2/8Q9r3/6f6rgNjFl1cXlpVmJdrjaVcXlM0dWXm0i/Gb/jW0Kv3x9/yUvqVT6ZufsC+7s7Chgsqq6eWFJeWFBWVTJjv2PztlNvfid7+QvjyW6PKJsUNHhzZb8AZq+8a9vBnVevuzLNnZOTk5OXmOGyxadPPTfzqp+lb9sTll6WnJFqFz83N0elnFYBWX3PV5LC+5rnizh6T4p6AtjLQFjmlWy7aLKf3kUce0acbAAAAAAAAAAAAR6moqEgFoLdu3cog0EC3dEY1JCEEoEtKSj799FO1lgf36K3Zsof33nsvvTPfbALQmzZtUp+KHglAB7N3EeRi6iR4+Oijjw4ePCgvfAagf/GLX6gX7rwPbffu3fqzrp566im9hIts1kSf3QUefFq+UyqBLd++oxwWWv+oATiOnIlhj65If+687N9tyDpG029P3HTgvKyfnZUxPjNcHy0AAIAvX7zxRmnRPPTQd10B6DS7Nf6zZoZ/NvQHXamssw5AG52zk5KSI8KiMyqGfPFX9l8eXjBnfXlSUlpqUqY9N3H9/VG3vjN0xsbYmChb1NDoIQOHRkRGOMaFrbhj6Ffeczz8jzHbHxs9dbFz+NjS5dflXvCjhKueGXbDS8NufTPmznfi73g36fa30m97uXTHb8ct2zp69GzH6pvtN7fF7zgYufGhiNplcRlZaYnx9piY+DPPCMuqGXDbS5m73q8c05iRnpJtT8nJKYu/bn/ara8nTFqZnJKUISXPys7yTD+rF8K8yFVzP5+6BqA/z0CbAPTFLRfK6X344Yf16QYAAAAAAAAAAMBR6tev39atW1UGmkGggW7pjGpITGo2+AC0yuzKnI0bN6o5AwcOVDMPHz6sxoGuqKhQgd333nvPjAy9fPlyNdOke93zx+5L+hNkADrIvYew2Pz589VMs5jwmUIWP/3pTysrK2WmFFtqMzXTfeE1a9aomffff7+a6T5gs4ksmwK4n3MzYLb5xnkEoE1O3f17FzL9owbg+JpXGPmLtZnPnpv92/VZz5zT89NvT8i0PusPG7KeWZ95VtWwM6hdAABAQDds3y6Nmj0P74mPj09LUwFoFXZ2ffVFB5+7ssLOHoNAu17IR/FxtvAhQyefN+RHh0Z95XezHM6s+JiUSeuib3kravP3h2XmJdniUxRryUHDhsUPqZoXduH3477714qvvTlu0/15Fz+WtO33CTe9GX37O9E7P4i956OYez6Kvac9/p6Pcu99Z8RN+0dc+3TmnR9FXfbziFkXRTucKUkJ9tTkdNdY1mmxsXFhgwY3XBH54N9LW75XkJWbGReTtPSG5K/8MeWsu+Oy8uxy0JmZGbl5uTrV7OHztHOXMZ/lvad8t3GgC6wvcXFxl152iZze733ve/p0AwAAAAAAAAAA4OiNGTNGBaC3bt06aNAgPReALzqjGpKQA9AeEeSBAweOGjVKv3ELSXtEbz22ZvYeONBsuOeDvZnEcJB7P8rFfBY+wBH53E5JSYnJNCsm7mwS2P4KsHz5cvd13QPQ7plpj7VCo3/UABxfZ55+2trK6F+fnXlgQ9YzzVnPrD8e02+O6dRspZ9/25y1ZVRMWD/qFgAA0I3rrrtW2jWP/OgRVwA61W73H3x2o0LP7lyR585BoLtmoFNSU6IiYxOyhlzy/YRf/nv2ssuq7MXRF/4o6ubXo8YtToiPSU5KTpYtZGVlZWRkJCenREfFDRk0NDF70JRzh7Q8knzFU7FXPj3shpeH3fpOzF0fxd39Ycy97cPuaY+6pz36no/j7/og47Y3sq/7Q+LSW6LKJyWmpqQn2+xSwIzMjKzsrJzcnHR7esTgYYm5Ydt+nvytP5fXLk4tGBN96ytp1/4upmZmSkqSVWbP4Z/dmfmuqTMDrSYvXceBjouLu+Kqy+T0fve739WnGwAAAAAAAAAAAEfPfRDolStX6rkAfNEZ1ZCEHIAW999/f11dnRrk2F2AcZpNMFeFlbvdu4cAAWhTwiD3fvSL+fwowBG5B5T1LF/Cw8PVyM0qAB2gAB7M9n/84x/3bPpZ6B81AMfFGPtg/eq00wacefrZlcN+vsb+3IasZ9ZlBpqae2b6zTGaXIV8dkPWr8/O2DwyJnzA5xXL5Jxw/QoAAKCrbdusBunevT+Oj49PTU1N1+M/d88Ve+7CFXnu5PZOPrIl2MIHR1XPG3z/uyVff3na2bsSbnot/OyvRKekJdsSklNSUzI7ZWVmuZZPigiLHRoVOWH9kPXfGXTF/kFfeHXoI3+a8fihufe0x33l44TH/9+8R/8845722Ls+irnx5fj1X48rrklJjLOnp6XbM+yynZzc7JzcnNzc3OzsbFtC4sD+Q8atGfL1Tx2tT+Zc+IOUu95PWHhtgixqDf+cFdTwz96T7xh0ZwZaXsTGxm7ddqWc3gcffFCfbgAAAAAAAAAAAPSIoqIiFYAWY8aM0XMBeNEZ1ZCEEIA2+WB3ssBjjz2mEromwhuARwA6cCbYCCYNHOTej3QxMx6zETgA7X1E5rx5nOqSkpJrrrnmxz/+8XPPPffGG2+o1YXaY4ACeDC7dtftWkHSP2oAjot765OmZg/Rb1zjQDcVDX14SdoL52Y/05y5f50VJvYxnX2MJ4/dHdF0tpV+fn5D9mMr0leXD3Mf+3lk2uAfLkvXbwAAALq66iorofv4E493DUDLy1TXC296vhV59mLlnV2DQH8eh3a9SE1LjY6Ki04IX74j6kd/Hf/tP1Vu3R9RMTUhPiYl2TX8s0o/axlZ6SlZ8THJyZlR0y+OaH4w/PJfDb7h5aF7/9z45KGmnR/F7f1/jZ/8zy//8Lcr7m2Pu/OD6Bvb4i98xFYzLSU5KT0zK0NFn60pLycnO0depdvToyKih9kGnnN/zIN/rdr1ae5Fj0SXjklLScqQ0mbnZuU5cq3Jor528go9e0z+x4HWAehrrrPa+7t379anGwAAAAAAAAAAAD2lvr5eBaBvuOGG9HTCMYBvOqMakm4D0Gq8Z4+xhAcOHCj/Kt3Tusp7770n/1QJQItgAtCy8Zdeekkt7+1oAtCPPfaYGag7yHMbmP5RA3BcPLAg9eHFqRMyPx8HWozLCP/S7MTfn5P5h3OsDPTT66yvXaazj/G0NpTpafl6dubvmjMPnJN1X2PytNwIfTwulcmDvjU/5ffNmfo9AABAV5dffrk0an760ycTEjwD0ML12lBvP58py8ry7nTeOcMzAC1fkxKTwsOGOUYPvu3ZzIf/Ub3i5uQEW1JyclJqWkpGpvwvozP9nGlPy7SnZsZEJaQXhjdsizx7d3jLz4dc/ezgm96Iuf3d2Ds+iHrs/y048Ldrd39a/qUPh97+XvQXXom95Im4cQuTUlLSM7MyVfrZlXxWAeic7Ozs5KTkgWdGlM8afM/B3K9+kDt7c2JKklU02bEVerbSz2Zyo4LO6oX66jX5GAdaBaAdjpjYmOtvuEZO7ze/+U19uk+oKhf95v+zdx+AUVWJ/scldVKmZ3pPp4ceeofQJEgLPVIkoCL2KBYUNfQAIqEp9thjR9cSO9gWd9XFjrKrbHvL7tuSfc/33/zPnXtynUwKIRQjfj97HO+ce+65557JmjuZX04AAAAAAAAAAAB+6uLi4i688EI1A71q1Sq32y13AIggM6qt0ny+tiWBY6F///533323aCZceuml2lEtz+y2MKTbkvG08OzH26zhGRvd1UygPOpitcO///77l156afHixQUFBWImo16RZgYQJerUWj9R4fXWkV9qAE6Le6Z49i8OVc30FWSlyqqwoCl+eT/LM3P8HyxNf3tx6M1FoTfPO41FnO74y9vnhT5YmvFCcaB0UFp7W4K8krD+geR7JnvfLUnfd15IVgEAgDbsR8mnll55pXhT88qr1Q6nwxsOQIdzz2r+WRGOOis1avGFS91TLQOtbijb4byzImJTCUD7vAGT3t59rLHsPfOz/+6x6vEBwRyfy+0JhgLpmSElAa08pAcD6aFARrhxmq99yoRrDfPuSLlkb9I1byXc9IFu3Scpm74y3HbYtv1bx5bDhs1fGzd8YVp1wHLp09ZBU91eT0D0lpmdoQSgM2T6WZGZHQymG1Kso5Zatx/23vuXDgs2ZojRiwFmZWdmKwHorJwcUSJj0PWT0E2pF4P+gQxAWy1r1pWJ6RVv5+V0/0jE19WKFSvWr18/atQoWQUAAAAAAAAAAHAGsFgsq1at0jLQOTk5cgeAOjKj2lqNrvGsajTOm5iYKP7PGAgE5PMwLW6rtlT7rKmpiWomju3Zs6d8cmoC0EILz35czRrOjzb4RgPQDUcY1U/UjGm0haK1ZHZTA+jSpUtBQYF80thkNjOY4yW/1ICfgR8l2RPl7nM8bywMvVeS/sxs37SOBl3cD/8fjG131oj0lLIR9lfODX6wNGP/eelRgeO2U/afFzqwNENcyMYC5/ic1MiriGl31rjs1IeLlLWf3wo3ljsAAEAbNmrUqPXr169YseJ03ixddtll4h3N62+85nQ6vV6vPxCRfdbU5Z61ogWgRXtRIgLQagY6oC4CLTPQYsMf9DqD/gzHebuN6z7Vb/vU8/TfRk2+uLPT5VFSzxnhALQowVAokB4KZnhcXqPBYvemDF9mmLktZekjusteiL12X8JNHySv+U3Kus9S1n+esuHz1LWfpN7yof7at8wl95h7jHR5vIFguj89M5SVo4SflQy0KjPb58rI6pF2/auOdR8bbv3ct+2LDgPOCfjc6dk5WVpRM9BKHvqEM9BqANpitWwoXyum984775TTfdqJryU1+qwiAA0AAAAAAAAAAM40gUBAy0CvXr06Ly9P7gAQJjOqraUlbr///vtly5bJ2nbtFixYoNZHRoS12O7hw4eHDh2qVgorV64UlYKavtX6/Oqrr7RmXbp0UePLzz33nJrHPUUB6Bae/XibRc7P3Llz1UohcjDaFQn79+9Xg9Ri2OI/X2ql1libyaizf/TRR2pLLQCtDSByzrUBaM0anUw1PC00XJH6uMgvNeBn4EdJ9kS5a5Ln9fmhtxaG3jkv/ZVzA8vyLT5DvNwXZk2KPaeDYUOBs7o4+KulGW+fl/7mwlDbKcqqz0vSX5sfvHWss6iT0aWPk+MOs6fELeppfn6e/93FyrDfWKAcIvcBAIA2TL1NUp22m6WLL75YvJ1586033W63x+MJRAegvfLf9QPQWqlbBDqqqBloJQKt5J9FlS/ksPqGnWtZ+1Hq4ruSRl+atOdwh52/Gt4pP+T3B2X6ORQKBpQ4dCiY7rC59ckWm8c47nLr3N364jsTlj4Sd+kvYq9+PX7lO4mrfpl00wdJNx1IuuG9pGvfTrp+v+3ih4IDJmZ5xHmC3lBGIDM7MysnvAJ0eBHojFC20+Geuca25SvLOTfoClem3PmXzMsfyszMCWakZ2aLltlRMeiGq0GL0qwfYtBh7cVWjnhnumnLRjG9d9xxu5zu0ygq+qwiAA0AAAAAAAAAAM5Abrc78nORoqIivV4v9wE/ezKjegImTZqkxXmjNLrycVONDx8+rEWltUh0FNFhwyWKT24AWmjJ2YUTaVZTU7Njxw6x0TAAre2KErXadKPdit6eeuopsaElm4UFCxaoe6NETnijk6nNWFT98ZJfasDPwI+S7ImyZ5L71fmhN+aHXp8f2r8o9Pai0MbRziHBlJj6/190psZNzNHfMNT+1Ez/gZL09xen7wvniV9vWREtT1IJquWthcH3FofESJ6d7SsbbpvS0eA31sttC/nepJtH2PctCr59nri6oCjqsXI3AABowyJvk1Sn4WbpomXLxHuZ/fv3e8LUFaC9Wu7Z5/1hu370WS3qOtD108+ihAPQ4aLwB9yOQEZn+yVPGFZ/lNJ9bGqyKXHhbsPT/x60eEMPj8+nBqCDyqrRofT0dK87ZE9z9RnjueCuYOmLttkVqYVrEmZvT1r8gG7Zk0oMurQ6/qpXE0qrEy9/KemCxxMvfNyw45Mej30xc9GqQR17Z3j9/ozs9Jz2SqxZWQQ6M9vjDHYvsK7/jePqFw3BvBSzJ/aq5617/pRTsDDg82ZEBaCbzUCrpQmNBKDNt962WUzv7t075XSfFo1Gn1UEoAEAAAAAAAAAwJnJYrFcccUV8iOR9etXrVo1cOBAuQ/4eZMZ1RPTvn371atXHzp0KJyVVXz33XcVFRWN5oy7dOlSVVUVGYNutLFo9sEHH2jNvv/++5deeklbw1g4dQFo4ZhnV7Ww2dy5c0WzyDZiAGqCudEAdCAQEIdoyzmLQ7QlpSMtWLBAm3PRRp1DddnmyAC0EDXnDTtsajK1BaSj4tfHRX6pAT8DP0qyJ4oSgC4OvnFu8PVweXNB8L3zQk/P8F3Q25xjTZSN6ugTYgYHU0p6mW8b63xxrv/A4vT3zwvtXxh6IxwvVntotLx2Moo4xb6FoXfPC32wOL26OLBzguuC3pbhoRRLUqwcX52QOWFhD/Mj073vnpcuriiqH9kIAAC0YQ1vk1Sn9GbpgvPPF+9l3n33Hb/f5/a4/X6/1+cVwms/K+lnlcxAa6Jj0H5/ZAA6KIq6/HNA7PB5gw67e8Jlpg2fp87fZrKmWWLO0nUclbDl4+B9vx2aPy5DnFYJQAdCfk/I5w11G5ixaGPWrZ9mlH/qmFme1G92yvBLUsatTJlenjJvV/J59yYseSh+6aNJSx5OWnhPStGmlJEXJs1ea33gUL93/zPvzreLzlnaO6dLVnpWRlausv5zKJDl9tvPv9dW/oWl8GqbxWw966z4vrMSdnznv+HlzPbdg6FgeLno7CzxqKSfc+vKD0lorbQgCV2XgRabZot52/atYnp37Ngup/sUayb6rCIADQAAAAAAAAAAzlhJSUnFxcXyU5GwK664YuDAgawGjZ85mVEFThn5pQb8DPwoyZ4oeya6X50XfKM4+Hq4vBZ+fHtBSJSd492zuxgDDVZWFjLM8QWZqUt7WTYXOJ4o8r29MHTgvPR3F4X2Lwi9qSah6zpUi+i2NeXc4Bvzg/sWhN5ZFDqwOP2dhaGnZ/q3jnUu620en52aY02Qo4ngNsRP7agXbdSjlMRzVJ/FBKABAPgJaOo2SXWKbpZKShbX1ta+/8v3A8GA2/VDAFoREYAWGzL6HCkyAB25DrQSgFYy0OoK0M40f6eBaSte0d/4jr77cIfZ6EhJ1hssyVNv0T/6j56lD/TyK6s2h9z2UE6n9GmX5657J3fXH3xXv2AacZ4+zZOSkBzbfphuyPmGUaX6sdelTF2fOGNLwrTylCkb9IWrjEPONTt9+mR9QtcJCSse9b76r/H7/7V4/RNTRkzvkZmbmZGR6bT5Bhdbtnxtu6TK3Cnfb0tzJ+v0Bmv80ntNd/01a9o1AZ83XUk/h8uxAtCitCQALUp70cBiMe/YXSGmd9u2bXK6T5ljRp8BAAAANEO8HZs8efKSJUvEhpCXl2e32+XdNgAAAADgpyUnJydyKWiVeMvXq1evjIyMpKQk2Q742ZAZVeCUkV9qwM/AqB8j2RPljomu6nmB14oDr9Yvr58bfHdh6I1zA7cWOOZ0MWRaGkkbC35j/KBAclFHwyX51s0Fzoemel6ZF3xvkZKHFo/vLFAi0W/ND755br2MdWRRK8Ve0Ua03L8gKI56L5yofn9h6LV5gUeneW8b67yyf9rMzsYhwZR0cyOBbCFgjJ/WwbBhlOPVeYF3F4VEh2JDHN6wyANOnuZfRwAAcIqc9JulRQsX1dbWfvDBgfT0dJfLVS8AHSUqAx2xArTMQGvpZy0DHQj4PEG3xzVzrXHzYf20Gy0Om9vpcNntdn2yOaN38vXVroePDhwxL9vj9Y+clXX9s512fZtR9r5txmpzVg9Lss6YkmTQJSYlJiX4OiZ3O9swYL5h4g1J0zcmjbrEMGCupdtIRzDdY7M6DHpTfGyS1Z8wcmnKrfvbv/P9jJf+sPiK28bk5Xf0t7eU/iJt7UHzqPOcXndQDNTusOvi9Z1HJ5Z/5lr/QWb3IWKUPywC/UMAui4DraSi65XIDHSDGHSuUtrnts8OB6B337FTTO/WrVvldJ8CFouF6DMAAABwgkaNGtXwvvqKK64YNmyYuOWWN98AAAAAgJ+KuLg48Y5u9erV8h1eA9dff/2kSZPkE+BMJzOqwCkjv9QAhJ3qGPQdZztfnqcknl9pWOYFXi8OvLswKB4rxjlLepj6epOTE2LkkfXFxbQLmuL7eHXjs1JndTJe2Nuyaoht6xjnXYXuR6d6npvlE729eW5w3/zA2/ODkUXUiPpX5/mfn+l7bJr3nkL3tjHOm4fZLsq3zO1inJCd2s+XlGlJSIxr/LcjEmPb9XDpFnYzbRntfGVu4N0FITFasdFMkUeePASgAQD4EYmbpZP1Gfz8+fNra2t//etfZWVlulxOn1/Gnz1ejyjqtkZNPv+g0Qy0XP5Z2Rb/ONN8vSdabvlAv+JlQ25PZ5rF5Xa7xaF2u0OvNwxdkrT7cPvy/X0vuqPDzq87bPudp+Quc5+z08SpLQZHaorRoDeIK7VYrIYUk8lktPmSZ6xLvuTx1LwhNjFGj8vv9Sin8Xg8Nps9OdGQkKDz5SXMKjM/9GW/D/6z6N535l1yb+6GLyznbjdldvb5vIGgEAqmWW0pet2Mdal3/i20aKtSl5GppJ+jA9BqqctAi8fI0mQMOjenfftcNQB95923i+ndvHmznO5TQ0xQUVGR/OIAAAAAcPya/2nnhRdeKO705f03AAAAAOCnIikpqVevXkuWLJFv7+qbOHGi3ALOdDKjCpwy8ksNQISTmOyJcsd458tzAq82SAkrZV64zFVWTX5ngRJWfnCy9/pBaUUdDZ3tibomEsmatOTYDHNCF0diX2/S8FDKuKzUwlz91A766fWLqJmUqxd7R4RS+vmS8hy6LEuCLSU2ptn14ONj2rVPSxTHrhiQdu9Ez775wXcXKMtF1xv/3ED1nEaK7OLkIQANAMCPpaio6CTeI82bN6+2tvajjz7Kzsl2Oh0+X0QA2uNR/l1fOPgc5q97jAxA+39Y/lnwuvz+TPviOw0bD+nHXpiWZnY5XS5vOIbscntSEiy5/U1r3814umbQnt93uOoFy6il1mCWy25xu5zKqT1ur9Pusqc5bFZ7msVuSrXr9anFWxJveD0lb6DbZQ+ftu4fUdxud5rVlppsNphTuxQkXXq3+7k/jHnrfwof/uOwebd09mcEvX5fKCOUlZ0lBp6iMwa7J970ju22rzMGThZjzcjOzVKLGnqOzEBHRZ8jS3MBaKvlnvvuFNNbXl4up/tUakkMWtzCydYAAAAAIsTFxWWEDRw4UNw2i1vrVatWydvoOosWLTpFP68GAAAAAJxaer1evN8T7+uWLFmi/QEggi/4+ZAZVeCUkV9qAOqc3GRPlNvHO1+eHXh1TuCVZku1eJwbeKs4+N6C0KtzA3eMd10zMG1uV2N/X5IrNU72derZUmJ7e5JmdjJc3d+6c5yzeo7/vYWhfecGxZDE9itzo4uobFhkXwAAoA075o9ZTsUN0uzZs2traw8e/E1u+1yHQwtAK+lnVfhpfb66GLQMHv9Q/AGfX10BOqBEoR1pnuELTes/01/0iCmQ5bSlOd0et8/vd7sCoazAmOKsm57vsvt32ff9Kbvi8479znFZ9G57mtvt9ihrNQcC6RnpoVB6wBfwefxeV8BudRstKfO3625639BzpMflEKdT15lWBALBkGidniEOtKc5kuPNaYGk8+9NfeTP2fv/Nf2NPy1fde/kfmM7p2enZ2ZlZGSF7DaHLiGl4JLk3X/xXfZIKDM3KGpz22fldsrK7ZqZ2yUzp0Nd+rl+AFpdKFoUraZhBlpMZnaWEoC+/4F7xPRu2LBeTvep13wMmgA0AAAA0EJxcXF5eXniHZO8mQ5bvXq1uKkWu2QjAAAAAACAtk9mVIFTRn6pAT8DP0qyJ8qu8c4XZ/mrZ/tfbnF5da5/X3Hg3QXBN4oDD57jXjfcfllf89zOhmHB5BxrglkXK7s+GQwJMZnmhEH+5FmdDBf3tqweZru30C0G8N6CoBiD2IgaW1SJij6rRXYNAADasGZuk07dDdLMGTNqa2s//fSTjh07OBwOr1wAOiIB3VgG2qdkoMMx6Ij0szdc3N6A26kUu9Wf1d122TOGdZ/qBxTZrSaX0+l0OcVRgQHjs666P+/uI123fuGdtzVl0e0p9/yx6/w1nex2l8vpEX0FVSHlf0oJpYf8GU67x2hNOe/O5DUfm3qN9ridPrEnPT1d+UeRkZGemZmRlZmZlR7MsBpcHQbpV76pX1aVMGu18Z6Pe39UW/KLw8uWrR3TfWDH9KwMf8hnSDXZg7rLnjXt+lNwTInP687ITM/J7ZjbtW/HvKHtO/bLzO2amdM+egVoLQDdWAxaym2fm5WVZbFaHnjoPjG9a9euldN9ujQVgyYADQAAAByvpKSkyZMny1vqsEWLFolKuRsAAAAAAKCNkxlV4JSRX2rAz8CPkuyJsmu884WZ/pdn+V86/lI92//63MD+c4PvzA++Ntf/6GRPxRjnzUNsl+VbF3c3zeioH5We0tud1NGWGDLFO1PjzEmxqfHtEuPaxcfKkhDXLiW+nVkX60yJDZriO9gSe7l0w4PJ0zoYFnczX9rHcuOgtK2jnQ+e43lljv+dc4PiXG/MC4jzRo3kuIq8cgAA0IY1eptUdIpvkKZPn1ZbW/v555917tzZZrOp+WZPvfyzQqmrV+oy0H5RfMpzv799t1D+eN/wYueYEsew2a68Qa7J15k3HTYs2G305ThsNoctzdUlP2Px+q67Pu95xx8yr3jaOniOSW9MDvaOvf512x2/7Zk/IeCy+wP+oCjBQDAQEI+hoD8UEMWbXi8AXeBxu3zp6aHMzMyMDFkyRQk/DfqyXD5byV3Gsg9SBxWn6JJ1Gf1iz99ue+73oz+uveT+dxZPv2BQbtdsu8uemJiSP0t362+dK18J9p/kHX2ub/rVweJb2s9flzf5ym49R7XP7pCprABdl4GOSj9rJSoDnZurBKDT0qwPPfKAmN7Vq1fL6T69GsagCUADAAAArRMIBC688EJ5Y71+/SWXXEIGGgAAAAAA/DTIjCpwysgvNeBn4EdJ9kTZNdb5wgz/yzP9L51YqZ7lf21O4K15gbeLg++cqyzPXD3b9/gU7z1nu3eOdW0Z5Vg33H7zENsNA9OuHZC2on/aNeEitlcOTLt5sG3dMPvmUY4dY513T3A/Ntnz0iz/vnlKP6I30efrcwKifyW+3OC8rSjyygEAQBsWdZt0em6QpkyeXFtb++WXX+TldW0mAK0QlREBaG9dAFrUZqSnTzi3U0lF+vJH7Ne8YrrxXdPKNy2XP2Ve/UtP+cGsgiXZrlx7RmfP1OWdb32n931HO5a975i0wpLdxWExOpISDIm6xJHLE+/4Q/ZVj3YOZHj9XiUAHVGUDHQokO5yhAPQdykB6N7hAHQoPaSlnzPSwxloIT3LbvUNnmdYd9BYcqcxvb3TkGxJjEvVp+n6TNPd9FTonX8X/fKfl214dNbgiV1NVqvBrjv/Xvu2b7KvecFz3euWNR/aN3wcKP9Vly0fDLzu0SGDz+6amSkD0PVCz9n1ihqAzq4XgM602dIerXpYTO8tt9wip/vHEBmDJgANAAAAnIjId20rVqw4nT/TBgAAAAAAaCWZUQVOGfmlBvwM/CjJnig7CxwvFPlenuF76SSVF8XjTFH81TP9r872vz7H/8acwFtzA/vmBvbPU8rbSki6roSfikqxV7R5c05AtBdHKXFnJawc3flJKASgAQD4KdBuk07nDdKkSZNqa2sPfX2oe/fuagBaxp0ltztc5LNwBrouBq0EoMW//QHfuAUZVzzhu2G/a/VHjk1fWm79rWXr76y3fiOKe/PHXa/aM3b6Zb1XPd37gb/0uO1L34Ltlm4jbPY0V5rZ5XS4xUlTk4ye3OSLHrPc8+duBeelu5y+YCgoS1hICIYD0Gkpi9UA9JjwCtAZ6eqSzxlCejgDnZ7lc2YEO1iueM5w4zv6AdOcHmdQDNXlEqezJycaHRlJ4y9Ovf2XeR/+57xXj1y29KZRg6eGlu5xrf/YveUr56avrNu+s27/zlHxbWDnb/N2Hep/9YM9eg/OychQMtBNpZ+1oi0CnZubKwZmt9sff/JRMb2rblolp/vHo8agCUADAAAAJ6hXr17qGzdhxYoVer1e7gAAAAAAAGibZEYVOGXklxrwM/CjJHui7BrjeH6678Ui3ws/gyIu87lpPnnlAACgDRO3Saf/BunssyfU1tYePvxNr14909KOKwCtZKBdDm+/Cb7Fd7iuftm2+kPHhi/Nt/7WWPGdZfsRS8URU8W3tq2HM7Z+0v3uQ4Pu/GPO5U9aB86xuH1Oq8npsLsE0YPf57PbHCnJhj5FSVs+D6x+o2t2V5/PE2gYgHaGA9ByBWgZgA5lZmVkZipFXQc6PZBls7onXmUo/8owZ6MllOn3uv0Bf0DsDoXS3W6vITUtOcUQ6pW4YKPl2d+OfOFPs258JfvqV61lvzZu+dqw7XfWHUdEMW//zrzjiGvb11lr3suZd3NGbqfMjKxjpJ9FyVYy0D8EoB0Ox5NPPy6m94YbbpDTDQAAAOCnT9zzr169Wv0p95IlS2QtAAAAAABA2yQzqsApI7/UgJ+BHyXZE+XWEbbnp3lfnBGdFT5Z5RfT20p5Ybrv+em+hwrd8soBAADqGz9+XG1t7e9+99v8/D5paWkNAtAeNQAtM9B1AWg1A+2werI6eGeVBS56LO26tyxrD6bd8V3nPb/PrfjWXPGdeefvnduP2G771r7pS9fN77inXm/L6GKzmh02q8PlconO/H5/IEz0ZtJbre6UOVv1d/2l48wbsl1Obzj4HI4/CyHxPyUAbaofgA5FBKCVkpHpdYTaDzDf8Lbh6pcMPUe73Y6AOIs4WlkoWjTNyAwEgg6bS59k0ZtTekxIPv/utKte1d/wfuqGTx27vs3e+Z1r+xHTHb/33PXHjB1HbBXfOjd+Erj62dDQyaF0caqoAHQUNQOtBKCzc3NzxYAcLsfTzz4ppvf666+X0w0AAADgjJCTk6MGoAX+0AoAAAAAAGjTZEYVOGXklxqA02JFX+uz0zwvFnl/Mf0nWZ6f1tIiGu+d6t08wiavHAAAoL4xY8bU1tZ+9923/fr3s1qtMvHsdiv/Dm+oT1VKBloIZ6TdDk+ayTlgYmDRTu9FT5iu3Zdy6xeuA/+47LmjM2/71vLYn4e8998rH/xT/tZvDRs+N13+rKn3OLvV5HS6HG6vy+fzaeln8W9RHA5Hqs7YYXjSqncdtx7s3G2oz+0KLwKtCgegXQ6PyZqy6K7k1R+beo91NwxApwcznW7HvK2GdZ+knnO1TZzE61HOklknQ7QSB6RneN0BY7LD6kqZeEPSRc/Er/xl4h2/67n/78vu+WOHHUdsr/112cG/b6n8Y/vbvjVt+tKz8g3f3FXKEtLp6ZlNpp9VdYtAKwHojAwxxGeff0ZM7zXXXCOnGwAAAMCZQvtTh4K4/5e1AAAAAAAAbY3MqJ5Kc+fO/eCDD/75z3/W1jl48OCyZcvk7pMnMTHx7bfflueoTz2jxWKRTXEayS81AKdFYVbq01OUAHRUXPiklemnuESdrunywnTvM1M8S/JM8soBAADqGz16tHgz+PvfHxk4cIB4M6gkm2XWuV70WaUEn8PcTo/D4kqzWidekDlnS9pFjxtXvJG49mPTA0f63P5t7h1HQp/9o+Kbfz5W+afemw/rN3xhuvYN0/iLbHaHQ/QZCPgDQTX/LB7VjaDX67WY0gxm/dnXJN/+p8zzd+d4/F6/X+afhVAwpKwAbU1ZdGfy6o+NfcY2WAE6I9OR5u892bjmI/3FVcbOfb0ep9J7KJSupp+FDNFKlPTMoDfLanRk9U4t2pS8/NnE695O3PpF6LE/Dt7+rePeP3b77T+f+OIfm+/9Y/DW3+o3feFY+aZr6fbMDl1DAb+yknQ46aw+NkYGoHPSM9LFPD3/wl4xvVdffbWcbgAAAABniri4uAsvvFANQF9//fXiqdwBAAAAAADQpsiM6qnRTCJZOHz48NChQ2XTk6H50wkn/YxoCfmlBuC08KbGPTLR/eI0z3NTz/Dy0nTPE5PcXe2J8soBAADqGzFihHgb+Mc//mHIkMFms1kJNx+T0+Oye9LMdmuaedoVWdPXmc5/yHDlSwkr30285aOktZ8l7TjsfvEvRY/8cciWw+byrwxrPjFc87rhnKutTpdTHK0s+Bz0y/RzXQZaFJfLlaozB7snX/q0ZefvOgyaHnA5lAR0IBx/Fv84HW6jGoD+yNRnnBKATk9XAtBK9jkjI+DN8GamXfiwvuzXqaMXOzxuv8/nEweq8WhFunwUdX5PyJBqaj8oZXp50gVPxF/9esKqA0lrPkku/yp1x++Ce/9r0oN/6Hzrbw2bDxnXf5J27WvOJTtC3fqFfL5AevoPcepwDLpBEjq8CHRObo5o6fV6XnjpeTG9paWlcroBAAAAnEEsFsuqVavUDPTAgQNlLQAAAAAAQJsiM6qnQGQc+bnnnuvZs6dWv379erW+pqYmEAio9SdOO+NXX30Vudhz5BmjduE0kF9qAE6LmHZnrci3PD/FI8reyWdseW6K5xdTPRsGp+ni+I8MAABo3LBhQ8V7wD/96U/Dhw8zW44dgFYyzE6P0+62mKwWi2nyxVmTbjQtvMO4/Km4q1+Lv/F9XdlHKWs/Sd3wRcp6UT5LXXtQv+pX+stfSB13icXhdDpdTp/Pp0SetQC0KOEKUW9Ls6em6gctStr8lXfF3txQjtfnDQaUBHR0ALr3ODEUX3p4BWgl/pyeaU/zjFxqEGdctNuc08XncftEl8qOrAx1lWhVeigjFMgUe1NTDJm9UwpvTl50f+Klv4i/9q2Emz5IEqPd8Ll+41dKEnrjF4Z1n+hv+ZXliufsCzend+mlBKCDoaDopH4AupEMtBqA9vm8L1W/IKb38suvkNMNAAAA4MwycODAcP6ZRaABAAAAAEBbJTOqp0BlZWU4clx7++23y6oIkyZNUve+/vrrsuqENRWAVmnjufTSS2UVTgv5pQbgdOliS3x0ovsXUzzPTj5WOeenWp6f4nmq0D3YmySvGQAAoIHBgweJN4D/9Zf/GjV6pMlkaj7/HE4/K4/2NIfZaDYaDKPnpk+4yjKj3LT4ft3Fz8Re9Vrc9e8krvpl0s2/Srrl18k3f5B84/tJ1+5LvuBhff+pVluaw+l2eH2ecOI5HH1WhTcCgYA4u0FvcWSkLNhj2PWHrLMvCTrsPjX+/EMAek/y6o+McgVoNQCdkel1pWd2s1z9cur1b+kHTHO5XUqgWln+uS79LNeBTs9IDyrF7XKnJhscweTRl6fM2ZV4/qPxl/0i9po3lQC3GPbqj0RJKft18qpfplzzhmnJ/ZZZKzOyckIBXyAYDIRCITUArXTZaAY6OysnJ0c0CwT91a+9rL6/ltMNAAAA4MwSFxd3/fXXqxloFoEGAAAAAABtkcyonmypqal//OMfa5tdcVlNJH///fdnn322rDoxzQegtcg1AejTTH6pAThd4mPaLelqfC68AnRUbvg0l2cmuU9F2XuO+/nJnhV9LElxMfKaAQAAGhgwYIB4A3j06NGxY8eYTEYtAO1yueSWxuV2OcQ/SgA6zWIzm83JSal5AzyTV/jGrzDMuc143n3xy56MufwFJQZ9zZsJolz9ekLpK4mlr+gvedwxvNjt8jjSrA631+UP/pB7Vv6trgMdZrc7UpKN3c5OuuUD++r3ctv38nqc6hLQMgB93p3Jqz829RmvrAAdyghlZGakBzPtNtfUm/TrP0+ZudYazPR5Pb5A0J+RKZd/VpaIDgeg04NKBjoUzLCZ3Hq9KZCXXLjSOOM23bzdiUseir/42dgrq2OveSPh2n0J1+1LvPatpBWvGZY9Zjp3m6NgbpbfHwwoi1ErJdzbDxnocAw6grICdHYoFBItX3vjVTG9F198sZxuAAAAAGccFoEGAAAAAABtmsyonmwtSRtrbbQlotWampqaQCAwd+7cjz76SG3w/fffV1RUNBWk1rQuAN2lS5eqqqp//vOf6t7vvvuu4bnat29/9913a22EgwcPDh06VO5uduTPPfdcoyOP6lNt2bNnT7k77Lgm5JiDVLXkek8u+aUG4DRyJseuH5z2CyUAHZ0e/qmXZye5n5/s3jnSnm6Ml1cLAADQmH79+om3PH/7218nTBhvMpncEQHo+hlol0tZ+1lUKf9TAtAmc2qKIc1umnh+zpjLzBOuMc/abJx/R2JJZewFj8de9JQoCRc9mbTkoaQFe1KvrnZt/qzz+bfn9izwKH14fD419BxZxEMg4PF6zEar2Zky+ZaUnX8IzlsXcjm9yp5g0Olwm+oC0PnjlRWgQ+mhjIxMly3QZYTppvdTr3he32OUx+30+/xiV3j553D0WZYMJQAdCmb4XBlZ3RwTS82XPpl63j2pE1amTlyVMuvW1AV3Ji59OG7Zk7HLn4675JnES57Wn/+AZe42y9ybs/N6Z3k9/kA4/SweRU8/BKAzGywCXbcCdCgUfOOt18X0XnTRMjndAAAAAM44kYtA9+rVS9YCAAAAAAC0ETKjerKtXLmy9lirO2urRL/++utqjZb33bFjh9iI0sxi0qrmA9DqgtNCZABaS0VHOXz4cCAQUNt06dJFHWdDWlfNj1xNMKstVaJ9ZFJZI2as4fBaMiEtGaTQkus96eSXGoDTq1Na4u2j7M+d436m0P30mVLEtTx/jvv+sc5+riR5nQAAAE3Iz+8j3uz8/e9/LyycaDAYZNq5LgBdF4FWtpyOcABa4U6z2s0ms6BLSMrt6p58WeaIC02jLzVPvskyY6NxbkXqubtSz91tmLfdMG2tfniJYeQFhsuedtz15847D/U879bcbkMCXp/P4/YHgkrRAtCKgN/pcqYmGbP7J135gnnL55m9x/pcDn8wEA5Ap6UsCgeg+07wuMIB6FAg0+WzL7pdv+Y3KWdfYfP5/KLnYCiQkZWhFHXt5/A60CF/pt+d2b5bqPAyz9UvpK35lX75w8lDz0vpNsE4+DzjmKv0k1bpizamKoPfqZ+/yzR/t2lWuWXOLRnDJnb0ecV7QSX6rJb09LoAtKAuBl0/A52Tkx0MKstN79v/ppjeCy44X043AAAAgDPR2LFj1QB0UVGRrAIAAAAAAGgjZEb1ZFPTxq0LQKv279+vLoecmJioZZe1taIb1VQAWtSvX79e7SFyV48ePdQU8uHDh7WVkufOnatWaqPSrmXZsmVqjTakmpoa9cDIkWtLPh/zvJF9aueNnLSWT0hLBtnC6z3p5JcagNMiNkZuCH1durtGOZ47x/P0RPdTP/0iruK5Se4HxrqG+5PlFZ51VlwM/5EBAACN6927t3in889//mPylHPUALRL/O+HAPQPCWinQ/yj1rnsNqfJqASgTSaTLjG5Y0/vpGXZYy9xDFlqHLncNOZK44TrTOfcaJ24Iq1/kcUZ0OsNKZl9Us5ZaSh713//33psO9h79qrcjn0CHlfA5/f7tRh0OADt8/msFpvemDpyedKWb9wXP5DhDXh83qDD4TampZx3V/Ka3xjVAHR6KN2R5hsw27j645QLHjB26O11u3z+QHhl6Lr0s7r2c8CXmd0xffR5vksfs63+wLDi5dRpNxm7jbJa7PqExLhQj5R+s0wjLjSPvNg4+nKDGP/YUlPRaufsG7KHTujk9wXFILX0c0sC0NnhAHRmVsbb7+wT07tkyRI53QAAAADOROJNRzj/vH7FihWyCgAAAAAAoI2QGdWTTcvjtiQArYWDtbxvVIK5YVS6UYl1AeimRAZ/haYGGbV8tdqsYai6f//+8knTIxcanqWp5bG1gLIWa275hLRkkC283pNOfqkBOC2mZKboYn/4/12+U7dtmO35Se6nJ7qeOvsnXJ4+2yWu4q7R9iHeZO2/K3ExZxV3MMgnAAAA9fXq1VO806mp+de0aVP1Br3b80P0+Qdul9PpctrDAWg1A+10WUxpJoPMQCfrUv3pjsGFmYUXZJ9zWUbhpaGzlweHzPR17OtweWwmgyU1xaCLTzHbUzuNSJ290VT+YfqD/92n/L3eU67MyekW9Hj8Pp8/EArHoP3+QCDgdrv1KWZvh+QlD+grvg2NONfrTPM77XUB6IOmvmd73E6f1xUM5FovfjL1pgMpwxc6PW4lPB0M+ZXQc3gF6PT0jKA/IyMnfehs//KHXOs/sVz3uhiAYcA0hy/DkZps0qeYkpNSdIk6uz+102DrkFmesUsDE5aln70kZ+TUjt165/q84bHVVy8ALWQoJRyAlhno7Jxs0Sw7J+vd998R07t48WI53QAAAADORHFxcatXr1Yz0Ha7XdYCAAAAAAC0BTKjerI1lbWN1MwK0FErPWvJ5obx4kjNB6C3bNkSFQ5uqk8tiHzppZeKp+q1CHfffXdBQYG6DHOUpkYuaLvU3po5b8NdLZ+QYw6y5dd70skvNQCnxZbBacUd9AkR6yJ3tCas6mt5fqL7mYmuJyf8JIuSfi50bxiY1sORKK8qbHJW6mPjnfIJAABAfeKdjnib8z//8+8ZM2fo9XpPYwFoZQHoyAC0KG6X3e60mKxKBtokiiUl2SC2nS6bN5gWyLR5vA673Z5msdks4t92u81mNluSdXpdYqrNp+81KXXxbuvOr3Mf+fuA1a/2HleSk9kh4HEHlAB0uPj8PpvNnpKqz5+ZtObjtOteDmV28KaZ3UZryiI1AF3ocTl9aTbn2Ev16z9Pmb/dnNXJ53Eryz+nZ4QyszJECfgyQxnpfc8OltzuXvth2i0fGBfvMQw/15bbzefzBOxWtzHVYtSbLGar1ZJmMljMZrPdYRUjDwa84siAL+hxeQOB6PRzIBRIz2gkAB25CLQagM5tn/PLA++J6V20aJGcbgAAAABnqCVLlqgB6IEDB8oqAAAAAACAtkBmVE+2liwq3EwAOiqJ20x4N1KjzdSRCFEZYu3szVCHoeWDI4lLe+6557SzNDVyIWpd5+ZXs45ayLnlE3LMQbb8ek86+aUG4LS4bUjaQ2Odxe0N8REZaHdq3PwOhkfGOZ+d6H5yguuJ8T+Z8uR4lxiz2LigizFkiJPXEzYxPeW+AnFFLvkcAACgvu7du4u3Od//3/dz585JTdV7PB6Zeo7idDkdEQFotc7hslntZqPVbLSYlTC0xZhqNaRajSlpZkOa1ZpmS7PZbXalyBS03WJJM6Za9Ckmd4Zh4Dz9pY/a7/lD10f+Ovj6J3uPmJMVzAx6fQF/yB9I93u8HqPBkuZPnrkledsR75Sr/Sa9Q29OOe/u5HWfmvqd47E7PVl9Dde+nnrNa/p+k11up88X8IUyAhlZGcFQRjCY0WNYcN4Gb9kBx5oPTRc+qB+zLK1Tvsfn8bvtPq/Hp6w17fO7HB5HmrgKhyh2q9Nh8bisfrfN73EpIexw+lktP4he/llQA9CZMv0s5ORm+wP+jh07/PrDA2J6FyxYIKcbAAAAwBlq4MCBagB68uTJsgoAAAAAAKAtkBnVk62ZQLCm4fLGpyIArQV/a2pqAoGAWikcVyBY9Lx69erPP/9c7qhz+PBhtc8fPQCtVjYzSALQwM/ElkHWpya4Hx3rXNjRkBz3w/8BxfYAd9KaftZnz3Y9PcH1xDjn4227iBE+Pd61d6Jr06C04b5kQ0KMvJKzzoqPOWtGtv6+0Y5nznY9wQrQAACgCV27dg2/0fnPggXzxRuiJgPQ4bhzVAbarRS32HbaXQ67U9nrcLscXpfD43S67HaHzWa3iX8UDodd7HZ7PF6P22Oz2g0pFoPe5O+kH3Wh/voXvI/8d++H/jTsyspe/c/OCoSCPl8gkO53uh0pyYZOo5KuecNYdsCX09tmtCYvfUC//nPbiDnproCjaEPS2k+Ti1anBTN9XnFMyB8KpQcCGZ37hqZd77txn3vDp5bLn9YXXmXuPsztD/hdaX63wyeayhxzRmZGemYomB70hwI+cdb0kC8z3S9qMkQ/wVBQNIsUDAbTQ+kZ4axzPTIALdPPWdlZObk5Pr+vS9fOvzn4kZjcuXPnyukGAAAAcIbKyclRA9DFxcWyCgAAAAAAoC2QGdWTTYvbNhNZVsO+katEn4oAtNDoItBa40aDyM3r37//3XffrfapDrVhmFsTdVHNXEvDXScyIVGDPJHrPUHySw3AabF5kLVqrPOZs11V45yXdTO6U+qtmuxNjZuUkVIxxLZ3guvp8UrIOCp23Moy9iSXp8Y5xQhvH2afkZUa1Ne7BKsudmlnw8MFjmfGu9RTyx0AAAD1derUSbzfFG+CSkoWqwFot9sdDjw3EA46N8hAi9biiPBjuHjcoguluF0etzMcj1ZbupX0s7euuJxuq8WemmQ2moyZvfWTrjGsfTv45D/73/+7ERds69FrRIY/EPL4vVaL1WhLHX9N8tZvMkru8Ey4LPWqFyxrP3RfcId7xs22NR+4r3rR2WO8yxtQAtA+b6h9t9CE5b5rXnRv/CxtRbVh+i3m3uOdoSy/2+H3uMILP3sCoUAoPT0jsmSkZ2aEMkOBDFHSQxkKUSkeGsjIyFRLPXVPZf45HID2+3zdeuR99vmnYm6LimbI6QYAAABwhhJvedQA9JIlS2QVAAAAAABAWyAzqqeAmm8WGmaCBS3aG5nHPUUBaC2NHbUItDrCqEpB9NOzZ0/5JPx01apVUW20PtWr00becIQNc94Na1RRa0ULLZ+Qlgyyhdd70skvNQCnxaaB1kfHKKHkp8Y7nx7vLOtr7evUyX1hMe3aZRjjp2am3jY47ZkJyirLMgY91ln1oxYZfR7v3DvetWuYbXZ2aq45Pj6m3n9D8tISru9tVhPSj49xVoWL3AcAAFBfhw4damr+Jd4EXXzxRcnJyV6vNxxnbjwDrS4CrRQ11iyLWxSneFST0Er8OZx+VmPQ4SJT0cr6zz9koD1ur8vhspps+mSzOc3YYUjq7LWm7Qdz9v7P0D2fDj/3lq5d+2U47C5DinV8Seaad9uv/rX7xncNaz80l3+Stv6gbcNB27avc1e/OLRvQReH2x3K8Y1c4L/iCV/5544b9pnmbjEOmO7I7ODzOPxup88bXvU5lB5MD2akq0FnsVFX1OizUhnOPUtKMFpuRginn+WSz3UyMrPqln/OzsnOycnJbZ8rrjC/b59vDn8t5pY/gQ0AAACc8fR6vRqAXrFihawCAAAAAABoC2RG9RTQQrrCc889p0VsRf369evV+qgw7ikKQAtaz5FpbC1wLNoPHTpUrezSpYvaiRiz6ETLEB8+fFhrI2irSqtD1foX9u/fr15s5JVGDkk77/fff79s2TK1cu7cuVrl8S6J3cJBtuR61cqTS36pATgtNva3PlKgxIIfG+N8YqzzmfGu3UNt57bXpyXFyhZhcTHtQoa4gkDyTX0sj41RVlN+Ylw4iBw+8HQWNf2sDvXxsc41fa0TQylZxvjE2Hr/9TAkxEzPSt022KYsXD22Xg+yBQAAQH05OTl/PfpX8WZn3bq1SUk6l8ul5JQ9HlcTy0CrKzqrMWhXuCjRZy39HKYcr64AXRd9FtuRAWjl326lqE9Fh2Zjmj7ZlOYydJ+QumR32t2HOz/3P6Mqfjl04tIO+WP9F94duP4t25qD5g2fGW792rLtd6JYb/s2bes3wVs/7bp4Q5eBU/0X3OMr/9Rd9ivLeXuMw8615XbzeZx+t8Pn8fj8fn8oFAqv36yU9FB6KJAe8mfIErnwcxR5hHymik4/S+H0c7aSfs7JVR6sVuvUaVP+/o+/i7kdO3asnG4AAAAAZ65w/nn96tWr5XMAAAAAAIC2QGZUTw0tp9uoqLSucOoC0NquqHWXtYhwFNFMG4MYlZobbkhcghrg1kb+6quvqhuRGi663FSfkecVWj4hLRmk0JLrPenklxqA00IJQI92VBU4HguXqjGOp8c5Hy1w3NLbMsqXlFB/QWXBlRzX054wN1e/eUCa2vjJseriyrKH1hVxxqaKbDNGjE2JMoszPjHGuW2QbVEHQ75D50mJixqjeDrQqVvZy/zgaPtT45ziwKgOZTsAAID6fD7ft99+K97vfP3N19OmTU0LU6LKHo+7bh1obUPhFk/DG+ryz2Hh2HM9ag8yBq2mn39YClqmn5Xi8Yb5xIbD4TQZrfoUkyNoGDBbf9lDjkf+2Pverwdc+ID94meTb/ylceMXaVsPu277rbXiW/O278wVR8Sjo/wL96p93tXvhdZ/Yl/2sHHMRWmd+opOfS676F+JPgdDwfSMkIw+q0UVChf5PCrk3ICMQWeG/6lbAVomobOyMrOys8LRZyE3R+kuM2P69Gnvvivf6fft21dONwAAAIAz1xVXXHHVVVctWbJEPgcAAAAAAGgLZEb1VJo7d+4HH3wQGc89ePCgtvJxpJbnfRvVfDOt89dff11WhXXp0iVyeN9///1LL70UlcwWbaqqqiIv4bvvvquoqNDOEjlycb0fffSR+lT01tTKyu3bt7/77rsjzxu5TrbquCbkmINUteR6Ty75pQbgtNjY3/rwKMdjox2PRpTHxzieHuu8e7htRXfjQJcuvkEMOimuXSA1rqctsSgz9cbe5nuG258a43hqrPOJMY7HC36IU4tuI0vkKZov8vBwV6LPJ8c4nxzjuG+47ZY+lrk5qfkOXUgflxIfPaqYs87qZU+8opvpjqE2dTCRfT5SV2RrAACA+hITEh55+GH1jc/f/vtvmzdv6t6ju9lsdjqdSoA5HHZWH1XheLMSg44Srv+Bmn9WhHPP6mrQMgCt5KF/WP5ZKeEMtM/rE5UOm8Okt+pTTd72huHnGRZvt13waGrpK4k3fpB8/3eDXv7v4h3f+bZ/Z3/2L1Oq/mv0tu8st/7WuvZj21XP285ZYc0b5vIHfC6H0rnf5w0EAkrGWcs9a9HnaNFrPDdJZqCVEpl+zgqnn3Nzc8RzcdLBQwZtq7jtL3/5L3VW3357v91uk9MNAAAA4My1vo58DgAAAAAAgDNGYWGh+gHwJZdcIqsA4MewoZ/1oZGOR0c5HqlfRM0TBUrs+I6htmu6G0d4k/QJMfKYCAkx7RxJsdnG+P6OxBmZqVd1N906wPrgCPvjBUpqWfQgihKJHq2UqDx0ZFEbPK40Vg4JH+t4aKR928C0a3uY52TrB7p1OaZ4V3KsLraRX5MQlQNduiu7GXcNTntCSUs7G16RVuQxAAAADYRCwTvu2P399/+rvl/76OOPli+/KD09ZLVaXS6XkmGWZO5ZPhPP68egZW0dNf+sUpLPavo5XO1V137+If2s8IUz0OJBtEyzOFITLGarYcC81OJdSVe8qFv5nq7y2/wXjk6+7XfOx/88/vf/euntv11+27fmzd+YbzpgXnKXudsgj93i97iUjgJBfygUEX1uXt3yzs3loOvyzj8Qz8Lh55zw0s9ZWVnBYLBL1y5Xll7xm998rM7kf/7zn/vuuzc7O0tONAAAAIAzmow/E4AGAAAAAAA48xCABtBGbMi3PDjC8chIx8ONlUfCMegnChx3DrXd3NsyOys10xgvj2wgMbZdmi7WnxqXa4rvZU8c7UsW7S/sZLimu3l1H8uW/mk7B9v2DLXdO9z20Ei7UkbY7xtuu3OIbdcgm9gr2lzbw7S8s3Fejn6sP7mPQ9felBBIjbMlxSY1FnpWBfRxU9NTbuxhvn1w2uOjHU8WiDHbHx7ZXJFHAgAANCYmJqZw0sTXX39dfcv2n//854UXX5gyZbLT6bRarTLRXEfLOisB6IgMtFoZKRx+boSMPHvqYtBhvjpej89t95v1NpvLMGSBvniH/pK9yde8lXDLhynrPzds+Eq/97+m/OYfN1f+oevmr/UbvzDffMC67CFrnzFul93r9/uCoZCWbG5x+lnLQDdOW/BZlRWWLYTjz8FgMCs7a/acWS+8+Iv/+3//p87hO+++PWnSpNjYRn6bDgAAAMAZScafCUADAAAAAACceQhAA2gj1vWxPDDc/vAIJY7cVBF7q0Y5nhztqBxu39LfenWecVIwOZQa13yGpV14YWZjQoxNF+tKjvWlxgX1cemGuExjXLYxXi1iW9SE9HFir2gjWpoSYpLj2rVrMvAs+VJjx/iSLu9q2NTPcu9Q2xOjHY+PcjwcDlUfs8guAAAAmhbMtW28fcWhw5+rb9z++c9/3nXXnsGDB1mtVrvd7vlhKeh6ZPz5eALQgkw9e3/IQCuLPyvxZ5/X6XM7vMZUq82TMmyxac5txgseTb7i5bjr3k64+ddJaz9J3fJV2vbDzo1f6td/pl/zG9MN76Rd+JC179kut8vr9/uV/LMox4w+C+GE9LED0FFrP4fzz9nZWTk5OeLwYDA4evSou+7e87e//VWdt29//81de28cNNUvpxUAAADAz4OMPxOABgAAAAAAOPMQgAbQRrQkAK2VR0faw1Fj+91DbVv6Wa/rYZqbpc+3J9qSTsd6fpbEmO5pCTMzU1Z0M5b3tewZbKsaaX9ylEOM6qHhx1FkdwAAAE1INsT3PNvSfbxh3Mxeex7Y+tf//ov69u13v/vtTTet6ty5s8VicTgcanxZBpzraEtBy+cR1PaNCuef68hnPq9LFL/T5jbqzRZ7ytBzbUXrzQvv1C97Mu7K6tjr9ieu+mXSLb9OuuUj3eqPkm/+IPnG9w1XVZsX32HrOcLjcnp9fm8wGEwPpWvLQDdHXSK6rjSegY5Y+zkrS2afc3JyxFN/wN+rT6+bb7np0NeH1Lmq+fc/H3p695Tz+vWfqZ92gy2rp0FOLgAAAICfARl/JgANAAAAAABw5iEADaCNWNvHUjlMiQU/2OKiJqEfH6Usunz/MPv2AWnr8y3XdTMtytUXeJO6WBLtSbHxx1zD+VhiY85KS4ztaEoY4U6an516TTfjuj6WbQPS7htqe3yU/fGRjkdHOJRhDzvuIk8AAADQmJjYdt1Gpg2d6e050tNpoLnzYMus80c/+/Jj//O//1bfxP3yl+8vXbokGAxYrBaX2+XxeNwN1oM+oQB0mMft9bh8XrffnuY0mUzJyckDprrPuSFtZrl54d26Cx+PueyFuKtfi792X8J1+xOv25+w4o2Eq6oNF1VZ5qzxdOjuVQLQPm8g4E9PTw8Fjy8D3Wj6ORx9/mH553D4WREMBNu3b7/0/CX7396vzo/w+rvPL77q7J5jrd0KTPnjPRMucs+41uv0JcspBgAAAHCmk/FnAtAAAAAAAAAAgFNkbR9T5VDbQ8NsDw6zPXCcRRzy8HD7oyPsj4+0V420i5rbB6Xd1s+6oY/l5p7m0jzj0g76mZkp4/zJg12JvW2JXS3xOca4DENcZl0R26KmsyW+py1xoFM3xpc0Iz1laXv9lV2Nq3qa1/cxb+1n3T0wTYxQ9C/O8tgIuzhjK4YaWeSVAwAANKZzP+us0vSCYl/+WE/Pke7uw50dB5i6D3dcdM3s/b98VQ34/qf2P3uf2ztp0iSXy5WWluapl22WcedGySaNkcHnOh6X+MfncftsFrvFbNElJLfvZZ98tX/8CuOMjcZzb08oeTB22RMxFz8bc8lzsZc+F3/JMynnP2hcuNs+cWmm1xfuz+f1+X0hxXFkoMPp5wYB6Eajz8GQ2HPOlHMef6Lq3/8j0+Eff/7+NWvP6zvR3a3AmD/R2a/QM3yWZ9bV/mvv6TTjkmBKapycZQAAAABnNBl/JgANAAAAAAAAADhF1vY23T/E9uBQ2wMnXB4aZntkuJJRfjxcHg0nle8dYtszKG3XAOv2/tbb+lm29LVszq9XRM3WfpZt/a07BlhvH5h292ClK9FP1QilPKolnofaKk9SkVcOAADQQHqXlHNXey/emVmyNn3qxYGh0z09R7i6DXV3HeTIyTf0GxdaVX7pF19/ooZ9//73v+/atWvgwAEWi8XhcHi9apJZIfPODcjdjRGHy+yz0pGyArQSYfb40qxKANpoMKbqUwqKs8Zdbht1qWnKzebZW1KLd+kW3pm46J6kxffqz91lmrnJNHtVZtc+6S6nRxyqlmAwGM5ACzLk3By5AnR9Wvo5S6afRZ3f7x88eNBt27b+6c9/VGfj93/67a17bhg5LbvzUH2vsfb+k9xDZ7jPudCzZJ2ndE/oyntzz7vV1fvs1Ni4E/07IQAAAADaPhl/JgANAAAAAAAAADhF1vQy3TfY9sAQW+XJLqLPB4faHhpqe3iY7ZFhdlEeFWV4YyW8V5SHh9lFezWNHdXbSSzyygEAAOpLSI6dfLVtxV7rjS+7Vj6Vednu7AU3p084z9+7wJM32N1tiKvLQFv7vsZR07rsuGfdn/7r92rw99ChQ6tW3dihYwer1ep0OpXsch2ZelZyz3JDkPsao6afhboAtNfr89nTHGaTRUjSpTg8pgmLswuW24eebxp1sanw+rRpZfbJN5sLbzRNusFadF16v1HZbpd6YIMAdDC9RRHoyAB0vYWfM7Ozs8VGIBDIy+uy4pqrD37yG3UG/vXvfzz09O6pi/Lzhht6jk7Ln+AaONk9YbF74U2eS7f7Lt7lvOhu80UPm2dvSjrnOr3ZHS+nGwAAAMCZS8afCUADAAAAAAAAAE6R1T3N9w6yVQ623d9cSTszyn2D0+4cYJVXDgAAUJ8+LX7mzc6LH9Cvej1p7btpt7wavK4qe3lF9uyrM4bP8PUcqWSguw91dx5g6TjANH3RkKpn7/3Xv/+phoDffe/d8xafFwwGrVar262Gl5UktDscfQ7Hm5WNuu0mqQeGI9PKhs/nczk9FpPVbLZYzJZkXarDZR5ZlDP+wkDBhc5JV/um3xA6+0rX+Is9hUvb9xyQ7XYq4Wkt/eyrF4AW/8iUc+OU6HO95Z8zwwHoLLnwc1YgEMjOzj733OLqV176z3/+I676//3n/17d/+ziKyb0LLB0H2XOH+8acI674Fz33Gs9F9/mu2Sn+8LbzVc8lbLqrZTz74+fVhY/dZXRHkqQ0w0AAADgzCXjzwSgAQAAAAAAAACnyDVdjXcPTLt/UNp9Z3oR13jvwLTNvUzyygEAAOrTW+NnrnKcf5f++pfiV7+jW/uuYc3brltezrzm4dwLNudMuyR90BRf92Gu7sPc3Yc6O/U3dR1iK7l8yhvvvKhmoIWnnn7q7IlnOxwOu92uppnFY0TuWd1qJgOthJ7FMW6XV7Ty1i0JrSwCbVQC0BazVZ9qNOiNuZ39/UZljpnbfvL5eUMm5PQZmJueHnA563qo4/P5fghAC8FmE9D108/a8s9ZWVmh9JDoZ+y4Mffdf+8//vEP9WI//OS9FavP6zve3W2ksc84R7+z3cNnuYuucF+4yXvZbu+FO9MueThl5WvJVz6nm1sRO21Nu4nXxU+5wUAAGgAAAPg5kPFnAtAAAAAAAAAAgFNkfmbqnf2tlYPS7ht4Jpd7w493D0gr7WSQVw4AAFCf3hI382b7hfcZrn0h4cZXE295S7fmneS175rW7PPd9ELu1fd1KFmbU7g01P9sb/dhrh7DXN2HOnPz9b1H+VeULT34xa/VWPBf/vKXHTt39OvXNy0tzeFw+Hw+bzgGHaG5RaCV2LIMQIfXchZ8PrFhS3OYTVazyaKsBm2yGlLNyQlGY4rVbnanGdwOu9KnXPg5gt/vDy/8XKfpRaAj135Wc8+ZWZlZ2Vlil+ikT36ftevW/O53h9Vr/P2ff7dp1/XDp+R0HpraZ5yj7wT34Gnuc5a5l6zzXr7Lt3yXY9nd+queTyp9TrdoT/y09e2mb4iZtjamUAag4+V0AwAAADhzyfgzAWgAAAAAAAAAwCnSz6a7o58SgL43nBI+vjLgp1TuH5i2p7+10J8srxwAAKA+vSVudpntkkcMq99OXvde8qrXE5UY9D7dundT1r9nW/NW6KbnOpbe1WnhTbnjF4b6jPWEY9DuzgNsOX0MQws7bNl907d/+EaNCH/11ZfXXX9thw4d0tLSXG6X1+v1RKWgmxJe9tntCmegw8/DlGizy+mxpzlsVqXY05xuh8dmdliMdp/X7/OHg9b1A9B+f/3ln4XwMzXxXI+Sfq4LQKsLP2eJf2UEAv4OHTtcdNGy999/T72uf/zrbw8+uWtScX6XIcYeo6z5E9wDJ7vGL3YvvNlz2U7/Jbvd599hvOxx3VW/SFx0Z9z0jTHT1rcr2hRTJDbW1AWggwSgAQAAgDOfjD8TgAYAAAAAAAAAnCLG+JjNPU33D7TeM6Dtlf4ns9w/wLqjj9mbHCevHAAAoL5US9ycNbbLHzdu+lC//QvT5o8Ma95JvvHVxBtfTVj9tm79gdT177vWvpl741NdLt/Vad61OaPmBHqOcncb4hKlY7+0nD7Gwnn9Hnh89z9r/q7Ghd9+++2FCxcEAgGbLU3NMqv55ubD0OEFo73aItAyAu31eZWQc13x+B1258QJhTfesKpDhw7+sHAMWmok/Sw0tgK0Fn3OrIs+Z2VliTFnZKZPmz716Wee+v7779XLeemNpxZeMiFvqCVvuLnPOGe/QtfoYvfcaz0Xb/Ndttt7wS7zsgd1lz6ZsOTe+KLymGnrY2aUx8zYFDN9Y8z09T8EoG0BbsYAAACAM5+MPxOABgAAAAAAAACcOjOCyXf1t947wHp3/zO2qInqC3L0ce3kVQMAAERJtcTOXSsD0Lu/tuz62rL9C9OmX+tvfitpZXXCqtcT1r2fXP4r04b3fGte63TD43mXbOs868rsIdP9PYa78ga7uw125fYxdRqQdu6yCS+/+cz/+8//1dbW/t/3/1f1+GPjx49zhMkwczjjLDUehlYC0G63koFWEtBqCa/wrAagPS6vLc2+c9dOcYpBgwb5fL709HQl4VwnnHduoGEAuv7Cz1lZWaH0kOht6NAhO3ft+Mtf/hxOPtf+5vMDpTcv6lPg6TRI36vAmT/BPWyme/oV7mWbfVfc7r9wl23pXUnLH4tfUhk3a0vslLXtisLRZ7VEBKATpqwkAA0AAAD8LMj4MwFoAAAAAAAAAMCp406KLe9hvq+/9e5+Z2wRV7etlzlLT+AGAAA0KdUcO3ddOAD9a/3ur827vrbs/say82vLtk+NGw6krnpdd/3LCbe8lbjxg+TNv07b+F7mmlfyrn+k+7JNnactzxpQ6Os21JU3yN1loCO3j6n7cPflKxd88PHbaoD4v/7rv7ZV3Jaf38dmtzmdTiXL7POFg9BSVAxarVIy0C6vJ7wUtFcpPk+4eN1+l9NttVofevhB0fm4cWPdHk9GeoYSaA4pMegmpIeCSgNJiT6H089q9DkzS+zz+/3duuddv/K6zz//TB35d388XL7z+qGF2R0HGrqPsPce4xo4xT3pQvfSdd4rdvuX73aW3J5ywQOxSyvjZm+Nnbo+pmjjD9FnpZTHTN8QDkCvC68ArQSg4+V0AwAAADhzyfgzAWgAAAAAAAAAwKnT7qyzRjh1t/e13NvPclffM7Dc089yZ1/LZH8Syz8DAIBmpJpj561LU1eA3vW1edchZRHoXYctuw9bdh4ybz1oXPde8o2vJN5QHb/6bd3mjwxbPnRtfLf96hd7XHt/jyVrOp1dkpE/ztt1cDgGPcCR3VM/cEL22tuuOfzdV2qY+IsvPr/66qs6dGhvtVo9Ho+Sga6Xgv4hBF33XIk+KwFoGYNW0s8+j8/v9zscDrPZ/Oijj4huJ06c6HQ6laWdw0WmnRsKil0y/CyEl31Wos9hGT6fPzs7e8GiBa+/8Zo62n/867/vf3zHxHn5nQYaug6z9hrt7nu2e9wi14KbPJfv9F+y27N0t6HknriS+2LnVSjR52kbYorKlTJjk3xUi6zZEDNpJQFoAAAA4OdCxp8JQAMAAAAAAAAATqnk2HYLM5Lv6mu5u6/lzvwzqtyVr1zUJbl6Y3yMvFoAAIDGpJpi565Nu0IGoC071QD0N+FyWHnc8aV5y0eG1W8nrXwl8YZXEtb/Mnnrb0y3fuQvf7tL2XO9r7qr+8JVHcfMT+81yt11kCtvkKtjP2tOH+OYGT3vfui2v/73X9Rg8ZtvvlFcXOz3++12u5J1rr8StOSty0ArVUoSOlzhUwUCAXGs2Wx67LFHRYeTJhVqAWhlmefGM9DK8s8yAJ2hLv8cjj9nZASDwUAwMP7s8Q8+/EBNTY06yOq3npm/fFyXIZbOQ8w9Rzr7jHWPnOOec437km3+y273Lt1pLrkzYcn9scU7lQWep62X0eeoogSgN8fM3BIza0vMzHIlAD15pcHm5y9yAAAAAGc+GX8mAA0AAAAAAAAAONXSEmMuz9UrceE+ljtPTdlz2stdouRbVnYyeJJj5XUCAAA0IcUYO2e17fLHTeW/VlaA3nnIvPPrugx0+HF3OAy9/Qvzpg/1t7ylu/6l+JteT9z0q5SKT61bP8zY8FaPm5/Jv/L2HsXXdhg+M9h9uKvrQFfeYFf7vpb2fc2zSkY9+9LD//f/vq+trf2ff//7kUceGTOmwOVy2R12mWsOqws9/xCA1sgWPmUFaLvdbjKbHn1MWQG6UAagQxkZGTIDHQz9UAQ1+hxOPyu5ZyFTCT+LPeKEffv23bhpw3dHvgsnn2s//uyXV6xa0Gu0q+MAQ8+Rzt4FriHTXNMvcy/b5Ltit+/CXbbzbteV3Bcz//bYovKYqetiptcPPatFjT7P2lpXbtUC0HoC0AAAAMDPgYw/E4AGAAAAAAAAAJwGnqTY0vb6u3orueE9vX9yxRxV7gqXGzoa0lNIPwMAgGNLNsTOuiXt8iqTsgL0N5YfAtBaCQegdx8W2+Ztnxk3HkhZ9Xri9S/F3/Jm4tbfpG7/zL71ww4bXs+/+Ym+l27rPvPy9oMn+/OGuLoOcncZ6MzpY8wb4ly2YvY7v3pdjRr/+b/+vHnL5j75fWw2m9vtUsPN9ReErkdtIPj9fpvdZopYAdrhdMgAtCBXgE4PB6DFYzgSraaf5brPSjPRT8dOHS+97JJf/eoDdTy/+/2h8p3XDSnM6jjQ0G2Yrddo94BJ7sLz3UvWei/fHbhop3Px7pTF98QuujNm5iYl+jxtQ8z0jfWKTD9vjpl5q5J7nr0tXMIB6BnlMYXXJZxzLQFoAAAA4GdBxp8JQAMAAAAAAAAATg+nLubC7NQ7epvv6qNkiO/o9VMtd/U27+llLs1N9bP2MwAAaJlkfWzRyrSS20237E/Z9Y1p19eWnaKoyz9HlfBq0DsPmbd+Ylz7fvKNryZe91L82nd0FZ8Zd33h2/qrrhte7X/DI/0u2tx98oU5/cb7ug5yidJloCO7t6HvmPRV5Zd++c0nauz4008/veLKK3Lb54Zj0G5/mK9uKWhtQxWOP/v8AWUFaHNdAPqccyY5Xc5Qel0AulHh7HOmkn3OEF2I7Zkzi57/xXO1/1HG8K9//6Py8Z0T5/bpOECfNyyt5yh33wnucQtdC1Z5Ltvhv3iXu2SHYfFdsefdraSZp66NmbY+Ovosiow+b1bizrNvq0s/i3KbUjO1LGbUsoQJlxvS/PFyugEAAACcuWT8mQA0AAAAAAAAAOC0McW3K/Il7expvjMcgL79VJeeJ7ncIUbey7yzh7k4lJKWGCOvCgAA4FgSdDGzb3QvrchetMN842vJt31qUJZ8PiwXfm50NWhRdnxlvvU3htXvJF//csLK6viNB5J2f2Xd/WX6rQd6rXtp4PWVfZeuzpuwKKt3gafrIFe3we5O/dNyehtGTem68571fz76ByWAXFv76muvzJk7x+/3OewONeUsyMSzuiy0GoQWm40EoM9pPgAt6hWZGcFgUPQ2fMTwO/bc/re//VU9dfVbz5x70biugy2dB5l7jnL1HuseMds9Z4Xn4tv8l+72LdlhXrg7/ry7282tUHLPU9dF557VoqafZ0Uu/CxKRcycbTEzNsUU3hg7tCRhQHHKxCvNVg8BaAAAAODMJ+PPBKABAAAAAAAAAKdTYky7fEv8LZ0Mt/dU1lG+o0HIuG0WMU51tOu7GIfaEpPj2snrAQAAaJm5V/R6+rPSpVu7FN1iWVaZsvqdlIqvjLsPyxj0zqZj0Nu/MG360HDLvqTrXoq/8ZWErR+l7jls3/1l7q3v9Vv7/KBr7spfdGPX0XMzeoxwdx2orAbdsa+1fb5p6oIhVXvv/d//97+1tbX/+7//++CDD4wuGOV0OUXRloJuKCAD0ObHHntMHDh58mSXy1UXdFYzzwqxHa5RhEIhr9fbvUe3VTfd+NWhr8LJ59pfH3znylULe450dRpk6j7S2avAPWSaa9ql7gs3+S6/3X/BdtvCnbqFe9oV74yZvkGJPje58POmmJlb6keft8XMqVBqpqyOGXVpfL95un5zk6fdaB+z1BafyB0aAAAAcOaT8WcC0AAAAAAAAACA06zdWWc5dTGzA8lbuxlv72G6o6dJPO5uq0Ud4R09TNu6mxaEkv1JsbFEawAAwPHz+h3X7ihc88LQy+/tMbssOKfcfNkTyRt+lbrja5Mag1Yz0GqJjkF/ban4zLTxg9RVr+uueSH+ljcTtn+qv+dbz+7Pu25+e+Dqp4eU7u4z9+pOQ6cFuw11dR3oyhvkyu1t6jLIvvjyKW+++5IaSv7jH/+wYcOG3r172ew2j8ejZqCjstCBQMBut1vM5qpGAtDCD7nnzEzlidfrzc3NKSlZvH//W+pZvvvjNxt3XDekMLvDAH234Y6eo9wDJrkLz3eXrPFevst/0U7ngork+bvaFe9qN3NTzNQ1SvR52gZZotLPM9WFn2+LmS1K3cLPs7Yph4y9Om7gosT82ckFFxtmrLaOucBqcSbIiQYAAABwRpPxZwLQAAAAAAAAAIAfRWJMuxx93PnpKdvyTLu7Kwnj23uYdnVvQ0WOqrupIs90SVZqF2OcjuwzAAA4AbFxZ/Wd4Ll8T/6aXwy9eHf3WWW+c28zrng+efNv9Du/Me/6bTgD3UQMereoP2Te+qlx3fspN7yacO2LcWv3J95xyHTft/5dn/TY/OaQmx8fdOnW3kWXdBgw0Z83SFkKuvMAe04fY++R/mtWn3/w8w/UgPJHH3906WWX5uTkOBwOr9cbDkD7fXUZaBmAtpirqpQA9JQpk10uZ0QAWpWZnpEujgoGApMmFVY9/tj3338vGv/z33+vrNpx9pxeHQYYug5N6znK1XeCe+wC94JV3su2By7e5V50m6G4IrZ4x1kzNiurPk9d+0P0WSty4Wc1+rw1nH6uW/VZPBZtiplwfdyQJYl95yYNW6qfXmaddHVa+/4p7dpxkwYAAAD8XMj4MwFoAAAAAAAAAMCPKCm2XUd93NJg8pYuxp3dlMzx7d1Nu7qZxPaPVcTZxTBEEdtb80zLMlPyTPEpcaRqAADAyWFMSxwzP/OGRwevfm7oBRVdZ9ziPm+3fuWryVs/M+xqsBS0VrQk9I6vzFt+Y1j9TvJ1Lydc92L8xveT7v6t9b5vs3Z8nF/+6rBVDw26aGPPc5bm5o/zdR0oY9DZvfVDCztsuf2mP/z523AKuvbl6pdnzpoZCAQcDoc/4Bcbgt+vbIgai8VS9XiVaDZ16lSXy6VEnjVZmcFg0Of1DRw4YOvWLX/+8x/VDl9648niZWM7DzKL0nOkq/dY94jZrjkrPBdv9V2227d4m3nu1ri5FWfN2qLknpXo8/qIUpd+VqLPm2JmbpELP6tldjj6PGNLTOFNscMvSug7J2nwotTJK81Fq2w9xxtSjLFyWgEAAAD8PMj4MwFoAAAAAAAAAMCPThfTLpAcO92ju7mDoaKraWeeaXc30+3dTLvylCKehovxlJZdecbd3Yy3d1O2K7oaV3cwzPElZaXGJbHqMwAAOAXc6fqiKzqteW7ETU8POW9zx5lrHEvvTbllf8q2L41NxaDVDPTub5QY9PYvzJs+1N+yT3fti/HXvxy/9dcpld867vtth4pfDVz/wrCV9w1cckv3cfOzeo50dx3kzBvk6tDX0r6vaeLcvg8+sfufNX+vra3997//fd99940ePcrpcno8HjUDHQwGHQ6H1Wp5/InHRZupU6e63e6MjIysrKzMLGXhZ6/P17Vrl6uuKj148Dfh5HPth5+8d/mN88WJOg40dB/h7DXaPWSaa9ql7gvKfZfv9i/dZpu7OWH21nazbm03bX3M1DX1o89qURd+3qSknJX081a59vOsbTFztsXMvDVm8uqYUZfG9ztX1784ZcIK84zVaYNnmyyuBDmVAAAAAH5OZPyZADQAAAAAAAAAoI2IjznLHN+uhzH+XH/S6vb627oYt3c17upq3J2nlF15xp1dlbLjJBXRlRJ6rutcnEuccW1HQ0koua8lwRIfkxBD9BkAAJxa2d2ti9f1XP/SyOsfGzh/Q87sDWnLH0lZ+37K9kOmXb9Vgs5NrQatxKC/tlR8btr4QeqqNxNXvBC36tWEXZ8YHjrivffrrtveH7r2ueHX7Om/4Pq8kTPTuw9zqatBt883d+pvnX/R2S+/+bQaX/7uu+/WrV/Xs1dPl8vl9XrT09PFRlpa2pNPPin2Tp8+3eP1ZGZlZmVl+QP+rOys4uJ5r7z6ijz2D9+sr7hm8NlZ7fvpuw139Bzt6l/oLlzqLlnjvWxn4MLtznmbk2duajdzS7vpavR5Xf1Sl35WFn7eXD/6fJuy6vPMrUqzMaVxAxYk9p2TXHCJccaatDEXWry5Ojl9AAAAAH5+ZPyZADQAAAAAAAAAoK1JjGlnjo/paoif6taVZqVs7Kjf2tmwrbNxexcltbw7nIoWReahu7SoqI3VA0UPYlv0Jvq8tbOxvJNhRVbqDLeuhzHeEh8jzk7wGQAAnDaxcTG9Rrkvu71f+asFpff3m7smY95m0xXPJJd/lLrjG3OjS0GLoq0GvfOQ+bZPTet/mXLDq4krfhFX9kbi3V+ZH/1D8N6vem/ZP3z1U8NKd/SbfUXnwZODeUOcXQe5ugx05vQx9hzhueLGhb8++K4aZf7ww19fcsnFue1zXS6X0+m02+1PP/2UqJ8xY4bH6wkGg6FQaPz4cZWVlTX/qhH1//jX3+57rGLC7F4dBxi7DrH2HOXOH+8au8A9/0bPpdv9F+90z9+sn7Exdsams6ZvjJm6Vin1os9qWR9e+Lk8HH2+tS79vDVm9m3Ko9g1/rq4wSUJ+bOSh59vKCqzTboqLadfcmwcd2oAAADAz5qMPxOABgAAAAAAAAC0WfHtzkqKbZeWEJNnjB9vT1wUSL42K2VjB8OmjobNnQxbOhlu7Wy4tZNxayfjbWrprGSa1SK21UqxV7QRjbd0VA4s72jY0MFwfXZqSTCl0KnrYYp3JMYmx7YT5wIAAPixpBoThhWFVj4yZEP1qEv39Jqz2j9/u+Hal5K2HNTvajoGLYqahN7xpfnW3xjWvJt8fXXCil/EbnwnqfJwWtUfsu/8rN/mN0be/NjQS2/Nn3ZRx37jfV0HKTHozgPsOX0MA8dnrbttxW+PfBVOQddWV788d+4cl8tlNBmfeUZZInr69Ol2u33gwP5bbt185MgRtdkLrz1ZfOHYzoPMnQdbeox09hnrGjnbPftqz/Kt/kt3eRfdap65MW7GprOKNrZrMvq8LmZ6eOHnmerCz1r6ORx9LtoUM/HG2GEXJvSdkzR4kX7yDdbpq+zdxxiSUmPlZAEAAAD4GZPxZwLQAAAAAAAAAICfhHZnnRXbTolEp8bFBJLjehjiRqQlTHYlzvMlLQ0lXZqefHVGyvVZqauyU2/KTrkpJ2VldspVGcmXh5IvCCYX+3VTXImjbAm9jPGh5DhDXEx8jNIbmWcAANCmpLmTJ1/UoezZEeteHHlhRbfZq92L96Te+EbybZ8bdh22KDHoBgHoyLL9S9Pmjwxl+5OueSH+uhfjbj2Q/Mh3zsd+3/GOjwduqB5x44NDLlzXe+KinN4Fni4DnXmD3R37peX0MYyb2euuh7b+9z//Wltb+++af9977z3jx43bv3+/eHpL2c1Xll7x6aefhJPPtb86+O5lNxT3HOHu0F/fY4SrV4Fr8DT3tEvcF5T7LtvpW3Jb2qwNiUUbzyoqbzdtXcyUtTFT1yklMveslPDCzzM2K0WJPkekn0XNObfEjLwkvu+8pP7zUieusMy4xT5otsnsiJcTBAAAAOBnT8afCUADAAAAAAAAAAAAANB2pHc2z7+p28bq0Tc9NaxkS+fZ6+wXViaXvZuy7UuTEoP+pv5q0IfCRd0O12/7zFT+q9RVb+hWvBB3/Uvxuz42PP57zyPfdtvxwdB1z4+47p6Bi1f1KJib2WO4O7watLNDX0vHfpZZS0Y/+/IjtbX/qa2t/dc///m///u/YuP//b//F04+1/72uy/XbVsxcEJmh/6GbsNsPUe7B0xyF57vXrzGe9kO/wUVjjkbkos2tJuxsd20tTFT1igLP6vpZ62o6Wdl4edNEdFntdymrAM9ZW1MwZVxA+br+s1NKbjEPHONo+B8qzdXJycFAAAAAMJk/JkANAAAAAAAAAAAAAAAbUpsbLvOAxzLt/Xd9NqYG6qGLNiYO7fcemlV8voPUrcfqotBaxlotWgxaGXbfNunxvW/TLnx1YSrnou9+dXEOz81Pf2n9Ae/6bnt3eFrnhm+4vYBxSvyhk1Lzxvq6jrQlTfIldPH2HWI8/zSGW+997Iaelb99e//dccDm8fN7NG+n77rkLQeI919J7jGLnTPv9F7SYX/ou3uczelFq2LKdp41vT1SvRZST/Xjz6LIqPP5Ur0eeaWiOjzVuVx2vqYcSviBi1O6DMreeQFxqJb7JNK7dm9U2Lj+HMdAAAAAKLJ+DMBaAAAAAAAAAAAAAAA2qCExNiBkwLX3D94yxvjrr5/QPG6jOKtpqv2JpV/nLrzG/Ouw40tBV0Xg971jWXHV+ZbDxrWvJt8fXXC1c/Hrn5T9+ChtGf+mFX5Vb8tb40se3z4Fdv6z7y084CJ/q6DnXmD3J0H2HP6GPuMDlx9S8n+X77y2VcfP/TEnunnDe000CxKjxGuPmPcI+e4Z6/wLL/Vf8lO78Itphnr4sLR53ZK9Hl1eOFnrWjp5/Ux0zfKhZ8j088zb1Xqz14ZO/SChL5zkgYvNEy90TbtBke3AkNiUoycAgAAAACoT8afCUADAAAAAAAAAAAAANBmme1J4xfllD09atOr4y6/M3/OGv/CXfrrqpNv/VS/63D9GLSWga5LQu/62rL9C/OWjwxl+5OufTH+6udjN72b/NjvHM/8oeNdnwwof3XEqoeHXrwp/5yl7fPH+boOcnYd5Oo8wJ7b29hvTHDE5C4dBijR5+7DnT1Hu4ZMc0271H1Bue/SHb7FW60z1yUUbThr+oZ2U9fETF4dXvg5Mv0cLnLh57ros1LqVn0WlYU3x45YHt93TtLA+frCa9JmljkHzrCYnQnysgEAAACgMTL+TAAaAAAAAAAAAAAAAIA2zpNumL2iW/nL4za+PHbZ9p6z17qX3J1y81vJ274w7jqsrPesxKCV3LO5XgZalK8tuw6ZKz43bfxV6k1v6q7+Rdy1L8RtO5D69BHvE991uf3DweteGHHD/UPOX91r/ILsXqPcXQe68ga7uw62dRtr7DXB3mOke8Ak18Tz3SWrlejz+dscczYkFa1rN2NDu6lrw9HncPo5ssj08/qYoo0xMyLTz6JsVZ6Ko0ZfFtf/XF3fOanjLrfMXO0qWGJzZenkpQIAAABA02T8mQA0AAAAAAAAAAAAAAA/Cbk97ReU99v2VuGaZwqWbO0yZ4PtooeS17yXsv0r4241Bi3XgTZHFKVml6j/ynLbp8YNv0y98bXEq56Lvf6luDt/Y3z294Gq3/Xc/v7QtXtHXHfXoMU3dS9cmjGg0NVztGPofPuQuc4x893zb/BcvM2/bLt73sbUonUxMzaeNW1dzOSycFktl3+OLOrCz2r0OXLtZ/E4ZV3M2KtjBy5K7Ds7ZeQF5hllrsLLHVm9UuTlAQAAAMCxyPgzAWgAAAAAAAAAAAAAAH4q4hNi8wv819w9fMc7U1ZVjVqwIXfuZvNlTyZt/HXqjq9Nuw6Hl4L+Wok+7wiXyCT0rq8tO74y33rQsPbd5JXV8aV7Y25+NeG+zy3P/SnzoUN9tu4ftvbZ4TfcP+CyrX0W3pI1Z5Vj3kr30vXeiyrcCzYZi9bFFW04a3o4+nxOXfQ5skxZEzN1Xb2Fn5USjj6Lx+kbYiZcFztkaUKf2clDF5um3eScdoOr22ijLjlWXhgAAAAAtICMPxOABgAAAAAAAAAAAADgpyXVmDh6Tu7qp8bveHvqNZVDitdnnLvNcPUvkjb9Rr/zG7MSg/7asuNrmYGOSEKr60Nbtn9p3vKRoezt5GtfjL9qb+zaNxMfOWR79vc5Dx7qf+dvzr7j7aJ1T/e74k7Psq2u+evNM9fFF60/q2h9u6aiz6JMWRte+Dky+hxOP4tStDGmcFXssIvi+85JGniu4Zxr7LPK3AOmW032eHkxAAAAANBiMv5MABoAAAAAAAAAAAAAgJ8iuzd1xmXdb62esv3NaVfcOWDOWt+i21NXvpq89TPDzm8su8JLQUdmoNWy85B519cW8Vjxubn81/pb3tJd+1L8ylcS7vzCVP3XwP7/yd979OyKD/Kufcq0aHvijI3tita3m1oWc87NytrPUblnUaasCUefN0RHn2duiSnaFHPOLTGjLo3rV6zrO0c/4QrbrNWeUYttrgydvAAAAAAAOE4y/kwAGgAAAAAAAAAAAACAn67Mzrbz1w66/Z1Zt1ZPuWh77znrnUvvS75lf/K2L4y7DtePQX8lS3g1aKWI7W2fGW/9jXHrQcPWTww7vjBVHXG89t8Z93zjuOYXcQtvP2tGeczUNeGsc1n9Ek4/i13T1itrPBdFpJ9nblEep6yJGXNV3ICFCfmzU0ddaJ21xlN4uSurV6ocNAAAAAC0iow/E4AGAAAAAAAAAAAAAOAnLSamXffBvmvvHHv3geLyX5xTsqXr7I1pyx9JWvvLlO2HTLsOW3Z+Y4nKQGtFWRC6Lgy9/QvT1k8Muz433f6F6doXE4p3xEzfGDOjXIk4T10bM0WLQYcXfp66TtkbGX2eEY4+i/px18YOKknoMytpWIll+irX9JWeriNMupRYOVwAAAAAaC0ZfyYADQAAAAAAAAAAAADAGSBRFzdyeof1T0y991cLy56YsLC8/bwtxiueSSr/MHXn1+bwUtBNxqBl+dK8/TPTtk+MW39juO7lxHN3xhSVx8zYpBSxMW1DOAa9RnmcviFmet0uLQA9bWPM2TfEDLswPn9O0sBi4+RrXbNu9vWfajVY4+UQAQAAAODEyPgzAWgAAAAAAAAAAAAAAM4Yac7U6Rf23vla8b2/XLjywdHF69IXbE+95sWkzQf1O79RYtA7vm4iA/2lefvnJlF2fGGu+Nx0fXVi8c5w0HnjDzFosa083VgXfRZlS8zMzUrlpJtiRlwS13eerv9cw4TL7bPX+Ead53BlJslhAQAAAMDJIOPPBKABAAAAAAAAAAAAADjD+LKsS28afu/7i+96b8EVdwyes9Z73p7kG99Iuu1zwy4lBt0gA/2leccXSvRZbO88FBGADieeldCztt5zZNkcU7QpZvLqmNFXxvZfkJg/K7XgItvs1b7Cy13p3VJiYtvJ0QAAAADASSLjzwSgAQAAAAAAAAAAAAA4I+X191+7s/CR3yzb+drc5dv7zF5vv6BSV/ZOcsUXxp2HzTu/tvwQg/6yrsgAtPHa6gQlAF3+QwC6qEH0ecramHErYgedl5A/K2X4YmvRKu/U67xdh5sSdDFyBAAAAABwUsn4MwFoAAAAAAAAAAAAAADOVAm6uCFnty+vml31ycVbfjHjvE1d5pSbL6nSrf8gZfsh085vzDu/lhno7V/KsvOrcAD65YR5O9qp0WcZgI7IQE9dHzPh+tih58fnz0oaNN88+Vr3rJv9/aemGazx8sQAAAAAcArI+DMBaAAAAAAAAAAAAAAAzmx6o27Keb3veLWk6pOL1zw+af6GnHlb9aV7deUf6Xd8rcSgdxz6IQC94yvzts+N17yUMG+7DEBr6WdRpm2ImbgqZvjyuL5zdf3nGM6+wjl7jX/kQocjpJMnAwAAAIBTRsafCUADAAAAAAAAAAAAAPBz4AlaFl874qEPLn74w4tWVhbMXRtYsDP5upeTbv1Ev/NruRS0DEB/ZrzmxegAtNiedEvM6Mtj+52bkD8zdexy++zVgYmXeEJ5qfIEAAAAAHCKyfgzAWgAAAAAAAAAAAAAAH4+2nfzXLNtylOflt733vmX3z549lpXyV26VW8m3faZQYlBHzLv/Mp822fGFS8mzK2QAWjxOHl1zJirYgcsiu8zI2l4iXXumsxZKzPyhpvjE2JkvwAAAABw6sn4MwFoAAAAAAAAAAAAAAB+Vtq1a9dvZE75I/Of/XLFrtcWXLC116x11mUPJq5+N7niC+Oub8wVn5tWvBQ/d7sSfZ6yJmbctbGDl8T3nqEbNN9UdENw0YZOQ4v8JptOdgcAAAAAp4uMPxOABgAAAAAAAAAAAADgZyg5JWHCnF53vHzhc19du+W5mYs2dppdbrj0icSNv07d+pnh6hfiZm9td/bKmOHL4vJn6/rO1k+62rtwY8ezl2a50/WyCwAAAAA4vWT8mQA0AAAAAAAAAAAAAAA/WzanYf5lIx795ZVPfXrVLQ8XzluTUVyResXTiSX3xI+9Kq7vvIT8mSljL3IsLG8//cr2OT1t8jAAAAAA+DHI+DMBaAAAAAAAAAAAAAAAfubSc5ylGyc/+8l1j310+Yq7Rsy4yTt6uaHv7JSRS9Lmrc0uvrlTz5HupOR42RoAAAAAfiQy/kwAGgAAAAAAAAAAAAAACL0HZ6+7f/4vDq28+YnRE69Om3ljcOHaTkOLQkZLkmwBAAAAAD8qGX8mAA0AAAAAAAAAAAAAAFSxsTGDxnRcsrHbrDLHiLm+NFeK3AEAAAAAbYCMPxOABgAAAAAAAAAAAAAAAAAAAND2yfgzAWgAAAAAAAAAAAAAAAAAAAAAbZ+MPxOABgAAAAAAAAAAAAAAAAAAAND2yfgzAWgAAAAAAAAAAAAAAAAAAAAAbZ+MPxOABgAAAAAAAAAAAAAAAAAAAND2yfgzAWgAAAAAAAAAAAAAAAAAAAAAbZ+MPxOABgAAAAAAAAAAAAAAAAAAAND2yfgzAWgAAAAAAAAAAAAAAAAAAAAAbZ+MPxOABgAAAAAAAAAAAAAAAAAAAND2yfgzAWgAAAAAAAAAAAAAAAAAAAAAbZ+MPxOABgAAAAAAAAAAAAAAAAAAAND2yfgzAWgAAAAAAAAAwMmVl5dXHSY2ZFVYZWWlqCwtLZXP25g2PjwAAAAAAAAAgIw/E4AGAAAAAAAAgDaloKAgHB4+NtFSHtPGDBkypDZMbMiqsEOHDonKPXv2yOdtzEkcXjMvYmVl5cqVK0WDqHQ4AAAAAAAAAOCYZPyZADQAAAAAAAAAtCnFxcXh8PCxiZbymDaGAHQLX8R9+/ad9Bh0MBhcGSY2ZBUAAAAAAAAAnClk/JkANAAAAAAAAAC0KVp2ds+ePWqStSltdglhAtDNvIh79+49cOCAuldVVlam0+nkkSesqckHAAAAAAAAgDOAjD8TgAYAAAAAAACANkXLzv50A6wEoFvyIpaWltbU1KjNTuKcNDX5AAAAAAAAAHAGkPFnAtAAAAAAAAAA0KYQgP6xnOYAtJCbm6utBp2fny9rT0xTkw8AAAAAAAAAZwAZfyYADQAAAAAAAABtCgHoH8vpD0ALeXl5assDBw7IqhPT1OQDAAAAAAAAwBlAxp8JQAMAAAAAAABAm3IiAWidTicO37t3r5rlFfbt21dWVhYMBmWLxrTuKKfTWVpaWl1drR4iNlauXKkuY9xUBjcyYSwOLykpqaysVCvFo9hu5pLFIIuKiqqqqo4cORLuW0kMi5OKStmiCYWFhaJnbaFlcWnl5eWNXlrk8BoSUyROJ4gGYjCytgnH9SKK8aiNG15Ly69adKIOT7tStaVGTIJsWqfVUwoAAAAAAAAAPxYZfyYADQAAAAAAAABtSqsD0Lm5uQcPHlSPjVJTU9NUqrV1R+Xn52up2Shi/McMQAeDQXW7oYqKiobxYpPJVF2XtG5o7969jSaSxVn27dsnG9UnLq2kpES2q9NMAHrlypXqgQcOHBCDkbVNO64XUbwEauPS0lJZFXZcV91MS5VoL5uGtW5KAQAAAAAAAODHJePPBKABAAAAAAAAoE1pXQDa6XRqieSKigpxbF5enngsLS09evSoWt+ww9YdFQwGa2pq1L179+5VE8+FhYWiB7W3PXv2qHujjlUTxtXV1drG8uXLRRuhrKxMO6PoRx5QR8sxV1ZWlpSUiEHm5+cXFBRo9eJw2bRO5KWJZuqJxCHl5eVa9lqMWbYOayoALcajtm95LPh4X0S1cdSpj+uqxRlXhmmTLzbUGlXUxbZiSgEAAAAAAADgRyfjzwSgAQAAAAAAAKBNaV0AurKyUj0qKucqmEwmdY3nQ4cOyao6rTtq79696lFiqLKqTtTSzlGXELlr5cqVsraO0+nU1qLOz8+XtWedlZeXp0aZGx4iHDhwQOyqqanJzc2VVWHaIJcvXy6r6ogTqSPZt2+frApTKyNTyDqdTpsiUd/yRZGP90VULzxyPK27akGcUTlxs6dudecAAAAAAAAA8OOS8WcC0AAAAAAAAADQpmjZ2agVfCPl5eXJ1mFOp1M9pOHayapGQ7GtOyoYDKqVVVVVsqo+0UBbejkqg6sFoJtaXVhcl9ogMoUs6HS6oqIi+aS+/Px89ZDINPYxB5mbm9swvR0VgDaZTFqK+niXQz7eAHR1dbVoLAYgn4cd71WrGn3VGmpd5wAAAAAAAADw45LxZwLQAAAAAAAAANCmaNnZZkQukCwsX75crW9myd6amhrRIDLIe4JHRYWwI1VUVKhtmgpAO51OWdWAmjk+evSofH4sJpNJ7fN4B9lQZABajFBdCFlouIb0MZ2UAHQzGr1qVQsD0M1opnMAAAAAAAAA+HHJ+DMBaAAAAAAAAABoU7Ts7IEDB6qbYDKZZOswNXDcfGhYjfNWVlbK5yd2lKDT6WRVA03Ff9WE8cGDB+XzxpSVlanHNhOS1uTl5Wl538hFo1syyIa0AHQwGNSy2uXl5XL38TilAeimrlql7WrhqaM03zkAAG3c8uXLV65c2dRfOYii/mGN1n3HbJR6dqGZ3y5rSklJiXqsuA+RVaeGNsiGCgoKxGwc1+3T6SfustT74eP6PTcAAAAAZxIZfyYADQAAAAAAAABtyvFmZwV11eSamho1DtKoo0ePijZiQx5zYkc1H2LWErRRl6CmiiN7a0i7/KhVroW8vLzly5dXVFSIHo4cOaI200SmdVsyyIbU4e3bt0+9apXYbkkUO8rxvojNzEzLr1rV1OQ36ng7BwCgjVO/pYrbm4Y3Eg2p3+9Wrlwpn58w9eyC+N4qq1pG3GyoBwotvHloNW2QTRE3P2JOon7d7gSpqWtxgySfnwDRjzrOUz1RAAAAANosGX8mAA0AAAAAAAAAbUorAtDV4fWDWyIyYnsiR0XWNNRUBlcN3DQfq2308vPz8w8ePKjWRxLDqKysVLcju23JIBuKzAOJ7eXLl6vbx9uPcFwvok6nUxtHhaWO96pVTU1+lNZ1DgBAG6d9Nxff5o65krHa8lQEoGtqao7rF6jKy8vVA4WW3DycCHWQR48eFd/0o0T+NpRocBLXolZPKk4hn58AAtAAAAAAZPyZADQAAAAAAAAAtCmtCEBXVVWJ9keOHBGHNC/yb4W37ih1ceVDhw7J540RhygX0OASWpJ90S5fW7hRnL2mpkbUHD16dM+ePcuXLxfdRoaK1PaRaV310pofZEPq8IQDBw6oqx5qaaTjjUYd14uYm5urNi4tLZVVrbpqVVOTH6nVnQMA0MZp382FY34jU5udigC0IO4iZO2xiG/B6vdlVUtuHk5E8/dj4rZEzJs6EnFHdMwQeQs1f1IAAAAAOC4y/kwAGgAAAAAAAADalFYEoMvKykT7mpoa+bxlWndURUVFeHS1zQRimroENfty5MgR+bwx6qgELY+rRq7FOCMTuhqTyaS2jww5aZ3I5y2jDm/fvn3apYkNdZlkcfaW/CV9zXG9iGpcWygoKJBVrbpqlTijuquZU7e6cwAA2rjICLJQWFgodzRGbXOKAtBHjx5tYXq4tLRUHhPW8jvA1mlJFln7HbCSkhJZdWJaclIAAAAAaCEZfyYADQAAAAAAAABtSisC0CUlJeohx/WXylt31PLly9WjIpeFjqKFpKMuQUsFqesrN0rN5h49elQ+P+sssS1qKisr5fP6xDDCXdZL62qXlpubK6taQB1eVOpX9FATXpRR7G1m2FFa/iKKBmrLqEhQK65apXUYGaeO0urOAQBo49Tv5lVVVUeOHBEb4rHR3/ZRhb/dnfwA9IEDB9SexV2T3NE0nU6nDVU9quV3gK2jDrL5LLL221AtX8e6eS05KQAAAAC0kIw/E4AGAAAAAAAAgDalFQHo3Nxc9ZBmQioNo8CtOyoYDKpHVVVVyar6RIOmEjxq9kVo6oyNRm/VmrKyMvm8PtFSbRB5iHZpTWV8TSZTw+lVh9cw9avFqVseCG7hi5ifn6+etKamJipQrh5+XFet0q69mdCV2qAVnQMA0MZp383Ft2D129nevXvlvgbUBs0EoHU6nfieLnqrriO+ezbzm2Pa2dVf6BJ3RMdcBFr71TJto5mbh8LCwoqKCjmU6mox8oa3asekDlIcLp83oZlmLZwWcW8jRqhSf/lK9Cmf14m8/1Hbazcw4m6tqKhIbRa5krfWbVO/mdbC4YmpU/uJugeLUlpaKto0XEr8uL42WnhpAAAAAFpIxp8JQAMAAAAAAABAm9LC7GyUyspKcUhNTU1+fr6sirAnHGkVj1EpnNYdpWZ6BDFUWVUnGAyqcRlV1CVE7mqY9nA6nQcPHlT3Ro5HXUZRPEYNQxCdqO0FMU5ZG6atQt1wkKIftc+oRJQ6vKh+VFVVVeHOGumtUcd8EcVElZWVqW0EsS131GndVavUXdVNB5tOpHMAANqyyO/m5eXl6ne0pn4pSN27sokAtPieqP4ViIYafuNWaWfXvp8e885BPUTcaWiJ7UZvHsStkfYLZlHE/UxTUeBGqWds5j5B1VSzlk+LdjvUjMhbPrW9OK+6rWamVZH3JFq3jaaNWz48cRektmzq9+UEMTz1WNGtrAo73q+NFl4aAAAAgBaS8WcC0AAAAAAAAADQpmipjuMKQDudTi2HUV5eLo5VlZaWannlhvme1h0VDAa1o0QzMWBxSGF4SUI1mtPUJahJGnEiNYBbWVlZVFQUPuGQsrIyLQsi+pEHhIkBqPXiXAUFBWLMYgBiQ01v7wkvvKduyAPCTCaTlhMSBy5fvlycRRwlTqTFrKPiUOrwGo2haL2JC280bRNFmwFxpWJ4UdRdKnHVorE8LELrrlql5b327dsn+lFFXqx4qjZoRecAALRlkd/NtV95Et++G10pWewSxLdF+TyCuEVR94pjxc1DSUmJumSv2r/Q6HfJyLNrv26k7mqUuH0Kd6bcMgnattxdR2smiO/R6rd18e1eG4zYEN/NZetjUY8S/cjnjWkqHHxc06It1Sw0tQJ0ZHRbvX0SbSJvNcVtmxiquDWVjSLushrekh3vq6b+vpxo3FSCXG0QtZL38Z5FaOGlAQAAAGghGX8mAA0AAAAAAAAAbYqW6mgYf2lebm7uvn371GMbWtnE6oatO6qZZQjVGIe6HXUJai5E9Bmsv1B0pIqKiqhlicVTNY/bkJovUfc2zJo4nc69dTHuhhpemjqkhv2otFiSmK6oETakvYjNE8NrKq7U6qsWRJ8NX1NxdXL3iXUOAEBbFvXdXNznqHnTA4393QPlO19jtwTaUQcPHoxKTotO1FCsUFBQIGvrRJ5di8lGLR4cKTIk3VQAWtw1qelh8Rh1RjGYsro/KCFuKmTtsaiDFN/r5fPGaIOPnJxWT4vQkpNqKWH1PkRcWsOXTGgqAN2K4WkLPDe6Rrg4Sp15MRJZ1dpJaOGlAQAAAGghGX8mAA0AAAAAAAAAbYq2Wl7DZe1aoqSkpKqqSs3TCAcPHtyzZ0+jSZRIrTjK6XSWlpaqMQ7hyJEjogftkEYvYfny5aJSjfWIw8vKyrQzHjp0qLKyMirxE6m4uFicS03P1NTU7A2vPK3tEt02lS4qKioS16KNc9++fRUVFVGBFZU6vGZSSuryfoJ4jWRVEyKXPGxI9NPMlUZq9VUL4jUVDcThqqgVHIUT6RwAgLZJ/b6mBaAF8f1duQOoH2NVqfXiW558XkeLsebn58uqCDqdTv01MHHnI6vqRJ5daya+26p7o2iJZ/UbrvY06iZBDFutF/cPsqo+MQy1wTHvT1TqIJsalSBuA9SMr3iM/E2tVk+LcMyTCuK84e4V2j1JQ1qzqPvM1g0vMoMeRUuBR56odWdp4aUBAAAAaCEZfyYADQAAAAAAAAAAAAA4AzQMQAvVdb8HFZUtVisbBqDVDGszayqXl5eLBjU1NfJ5naiza9nrRqPJanBZi942FYBW+9y3b5983oDT6VQPFKOSVc1SOxSP4sKjVFZWqtcuiKuLiuq2eloE9aQtDEA3GkfWNBWAbt3wmnmNRFeiPqrD1p2lhZcGAAAAoIVk/JkANAAAAAAAAAAAAADgDBAVQVY5nU41tyoeTSaTrG0iAC0aNFofqaSkRG0TlcGNOnsziyLn5eWFO6hdvny5WtNoAFobTPPh5pbEizVq4+YdPHgwKod9ItMiHFcAWpuTRjUagG718MSBNeHlrqNmWIuVR/5BjFafpYWXBgAAAKCFZPyZADQAAAAAAAAAAAAA4AzQaABaKCwsVBOolZWVsqqJALQWTa6qqhK7GqUu3iw0ulpz5NnV9YCF3NxcWRUmhiEqjxw5otPp1JpGA9DaYEpKSmRVY9S1isXZ5fNmqYM8evRodX1qvVBUVCSbRjiRaRHUzsVZ5PPGaCnhyMxxQ40GoE9keOL1EpWRr4VQWlrasLLVZ2nhpQEAAABoIRl/JgANAAAAAAAAAAAAADgDNIwga9Scq1BcXKzWqE9X1g9Aa0HkloiK0jY8u9PpbLjAsFYZuR6wdt7IPhutbEi9NHF2+bxZTWWRI9O9siqCNpKWaDja4wpAi5HIqsY0GoA+keHl5+er9ZHp5IMHD4qaqGWhW32WFl4aAAAAgBaS8WcC0AAAAAAAAAAAAACAM0AzAWidTqfuPXr0qJqdDUdSowPQWhy2tLR0yLGYTCZ5WFijZ1cXga6pqXE6nVE1kYeL3pSz1g/OaoNpdFVmjbqetDi7fN6sZrLIFRUV4bPVFhQUyKo6JzItQjMn1TSabG6o0WYnOLwDBw6IY7Xkt9Zb1LrdrT5LCy8NAAAAQAvJ+DMBaAAAAAAAAAAAAADAGaDRCLJGC7Du27dPPFW3owLQJpNJrS8pKZFVLdbo2bWVlcvKysRT0X/DNaGFIY0FoIPBoFoZNcgoan5XPMrnzWomi6wtTd2wqxOZFuFUB6BPcHjLly8Xx2ohdTUI3nC0rT4LAWgAAADg5JLxZwLQAAAAAAAAAAAAAIAzQPMBaGHlypVqFDVyQ+6rc+TIEVEfFVBuiabOXlVVJepFtzqdLiprq2k0AC2oieTKykr5vDFHjx4VbbQFjJvXfBa5tLRUGURtrRinrKrT6mkRTnUAWjiR4WnJb3HV4jVS57PRVbdbdxYC0AAAAMDJJePPBKABAAAAAAAAAAAAAGeAYwaghX379ok2auBVaBiArq6uFvVqXllW1ddUfVNn1xaBLi0tVRO0FRUVcl+dpgLQlZWVolKMtqnsrJqoFhoN7DbUfBZZXJo6QvFoMplkbVirp0XYu3evOPbgwYPyeWNOMAB9IsMT1Hk+cOCAmMZm+mndWQhAAwAAACeXjD8TgAYAAAAAAAAAAAAAnAFaEoAOBoNa+lloGIDWssgNdwnicHGWvXv3Ri3hLDRz9gMHDqh9qvLy8uSOOk0FoAsLC9X66urqqESykJubqy5X3EwkN0rzAWhBTQALUesct3pahIqKCnGgmPZG96pOMAB9IsMTtMMPHjwoHpta47l1ZyEADQAAAJxcMv5MABoAAAAAAAAAAAAAcAZoJoIcSQukCo0mWauqqtS9oqv8/Hy1Mjc3VxyonkKISioLzZxdyzELonNZG0FL1jbsVnSo7jpy5IjoRw3RilGVlpZqSe6GRzVFHWQzAWhBjWuLzsUly6qw1k2LoF3dwYMHy8vLxVNVZFC4hSnhZpq1engqNfqsaphQ17TiLC28NAAAAAAtJOPPBKABAAAAAAAAAAAAAGeAZiLIUbQYa6MBaKfTuXfvXrVBQzU1NcXFxbJphObPri0C3Wi4dkjTAWidTqeuoNyoo0ePFhUVyaYtoA6y+QB0fn6+2nlUVrt106IS0yLbRYhs38KUcDPNTmR4wvLly9WW+/btk1WNacVZWnhpAAAAAFpIxp8JQAMAAAAAAAAAAAAAzgCVlZXV1dWlpaXyedNMJtPevXtF42ZCsWKXaFBTt8qyILYj1/2N0vzZ1d5EG/m8vry8PLFXaGrt4SFDhohj5TjCjhw5UlFRcbyZWnWQ5eXl8nkTRAN1PFGLQAvHOy2awsJCceC+ffvkYfUD0AUFBeETVkcuC93QMZu1eniiQ7VnMU5Z1bTjOksLLw0AAABAC8n4MwFoAAAAAAAAAAAAAACa4nQ6hwwZotPp5PMflToY+eRH1aampaHTM7w2PgkAAADAGUnGnwlAAwAAAAAAAAAAAAAAAAAAAGj7ZPyZADQAAAAAAAAAAAAAAAAAAACAtk/GnwlAAwAAAACOS25u7pA6sqrNKy4urq4jq06NNjI5TV3vT/G1AwAAAAAAAAAAAACNjD8TgAYAAACA00mGUhvYs2fPypUri4uL8/LyZNO2Sgy1to6savPE3MoRt2zM8lVpoLKyUnRVVFTU1MvURianqev9Kb52AAAAAAAAAAAAAKCR8WcC0AAAAABwOsnwabOqq6tP+gK9y5cvXxlWWFgoq1rr5xCAlk2bJV6mhjFoAtAAAAAAAAAAAAAAcOrI+DMBaAAAAAA4nWT4tAXKysrkMSfDoUOH1G737Nkjq1qLAHSk0tJSeUwYAWgAAAAAAAAAAAAAOHVk/JkANAAAAACcTjJ8Wlt74MCBlfVVVVUdOXJE7g478dWaNScxAC1GJUe8cqWsavPEUNXLF2RVs2TTxl6m6urqo0ePyt1hkct1t5HJEWeXg6t/vT/F1w4AAAAAAAAAAAAANDL+TAAaAAAAAE4nGUptOohcWloqW9TWHjp0SNaesJMYgP4pWtnaAHSj06XT6U7Ry3SyHO/1AgAAAAAAAAAAAMBPgow/E4AGAAAAgNNJhlKbDSJXVlbKRrW1JpNJ1jbB6XTKrWb9WAHoFg7vRIhT6HQ6+aQJJzcArYp8mU7kMo85+IaOebqTFYAWYzsVwwMAAAAAAAAAAACA1pHxZwLQAAAAAHA6yVBqs8nakpIS2ai2tqCgQNZGyM/Pr6ysPHDggNrm6NGj1dXVpaWlUVlVcayoV9XU1KiNjxw5IqvC9u7dK1ufdVZxcbFaKboST51OZ3l5uVojqG0ErZkgq+pr4fDy8vLUToRGL1PIzc2VLaqrxbasPeusYDBYVlYmrkU9haCeRYxNtqjvVASgxblko9rawsJCrVIdraDWqKLmVlyL6Fl7UQQxY2Le1MaNauGsqpq63tYNT8xzVVVV5Pw3dFzDAwAAAAAAAAAAAIDWkfFnAtAAAAAAcDqp8VChhclasS1r65SWlsp9DRw8eDAyRBvZT1MOHDggW0ekZsXYnE5nZLxYkI2OFSZu+fB0Op12isgcdqSysjK1waFDh2TVWWcNGTLk6NGjan1D+/bta7gC8akIQIthyEYRL1NTJ4qc27y8vKbGX15eLg+or+WzqjrmMARZFdaS4dXU1JSUlMgD6jve4QEAAAAAAAAAAABA68j4MwFoAAAAADidZCy02WRtZJw0KjxaXl4ud4QdPXp037598klYTU2NFv9tSQC6qqpKbSxEpmD37t2rbmtko6ZDtMJxDU/Q2kfVaw4dOqQ2ECdVa/Ly8rSViVUHDx6MympXVlaqjTXNjLlRsmmzL1NRUZFsFLECdFMn0urFhDST3ha0K9Uc76wKxxyGIKvCWjg8cSIx//KYOq0YHgAAAAAAAAAAAAC0jow/E4AGAAAAgNNJZkKbTtaaTKaDBw/KRrW1kcnRvLw8WRsOqubm5sod4TCullvVehbHDqkTudayrAqL7ERLwWpdiaMqKytFvSAbNR2iPd7hCZGHNFxdWAxP7ouYh4qKCrWmpqamsLBQp9Op9eJ0kblbcaxar2pqzE2RTZsNQEcGf7WLbepEkfXCoUOHxJyoFyWO1Ra6FqJCxq2YVaElw5BVYVHDE91GDq+qqkruqJ+YF1o3PAAAAAAAAAAAAABoHRl/JgANAAAAAKeTmgcVGkZCdTpdcXFxZPo5KmyqBXyPHDliMplkbZ2iiAWJI3OoKm0p5WaiqFEp2L1792rx4khNhWhbNzztqOrqallVR8s6i5HIqrAhQ4aImoKCAvm8TjAYrKlbHLq0tFTWhjU15qbIpk1Plzi7dq6jR4/K2pYljEX7hi9QSUmJ3F1bW1ZWJmtbO6stGYasCosaXmQCW3XgwAF1r7hqWRV2Il+TAAAAAADgBIm38OJNvdDwXfmPpbi4WIxHPMrnLdbqAwEAAAD83Mj4MwFoAAAAADidZBq0BRrGZOWOBulejbbgblFRkayqc7wB6Orq6kbTz0JkM1kVJquOc3iRwd9gMChrw3HwZi6nKdplVlRUyKqwpsbcFNm0wYLZguhKVMrdYcuXL5eHtSxh3NT8aCFjcRWyqrWz2pJhyKqwyHqxLWsjRL5MkV+WsqpVX5MAAAAAAPwULV++XLx3bgl5wKlUXFysvu+O/KHKj6u6ulqMp+Evuh9ToweKCxQ1QsPf1gYAAADwsyXjzwSgAQAAAOB0Cn8mdWyHDh2K+lwnNzdX7qutHTJkiKytT0vQRi4hrDreAHTD9ZU1kc1k1QkMT6fTNbpsc2FhoVp55MiRpqLYGtFAnFQcol1m1KdljY65GbJpC0St0t3UiSLrm5ofbcVrQb3kVs9qS4Yhq8Ii6xt96bWXQ9BGcoJfkwAAAAAA/BRpP3w4JnnAqXTGB6C1H1k09ZMHAAAAAD9DMv5MABoAAAAATif1M5vmNfq3PgsKCuTuFmiYcj7eAHQzH5s1GqI9keGJp2r9wYMHZdVZZ1VWVqqV5eXlsipCXl7e8uXLq6qq9u3bpzaLchoC0EePHhVjiApnN3WiyPqm/iit6E22qJv/Vs9qS4Yhq8KOObwhQ4bI3RGfOJ7g1yQAAAAAAD9F6s9Yjh49Wn0s8oBTiQA0AAAAgJ8hGX8mAA0AAAAAp5P6mY2wd+/eIRG0ELBQWFgoW0fQPtBqiYZh0+MNQMuqxjTa7ESGJy5f7qitzc3NFTUmk0lbFjpqJWydTldWVqbuakZTn5YJsqpZsml4/WnRVRQxgOXLlzcaFG7qRFq9eCFkVQORc6h+bNnqWT3mMARZFXbM+Yl8jcS2WnmCX5MAAAAAAPwUqT9jqT4t+eZj0t6bn6kBaAAAAABoSMafCUADAAAAwOkU/kxKEZUHdTqdWuT3yJEjUesKC4WFhepeoby8fGWzGkaoT3UA+gSHd/DgQfXYsrIy8VT79O7AgQNqA01FRYW6S1AXWxKnKy0tHTJkSDAYVD8qE6I+LRMnVesFWdUs2fT4Y7tNnaglA2i4AnSrZ1U8lYe1bBhN1WsaDUCf4IsOAAAAAMBPEQHo5qk/nGnF/LT6QAAAAAA/NzL+TAAaAAAAAE6n8GdSiobJ2pURIdTly5fL2jp5eXlyX4NFkVviVAegT3B4paWl6rHqAsnqJ15CSUmJ2kCVm5ur1gsVFRWyNsKBAwfUvVGflrXw0jSy6akJQDf1kWR5eblsUVurJuBbPastGYasCjvm/DQagD7BFx0AAAAAgJ8iAtDNa3WOudUHAgAAAPi5kfFnAtAAAAAAcDqFP5NSNEzW6nS6I0eOqHtramqcTqfcESb2qruE4uJiWdtipzoAfYLDExcrD66tLSoqUjfEJJhMJtkiTNslNPrBnraKdtSnZS28NI1semoC0FGpbo2W3hZfBmpNq2e1JcOQVWHHnJ9GA9An+KIDAAAAAPBT1LoAdF5ennj3rf3Gu3hzXVVVJTpRibfV4l22uktVVFRUWVmp7hUHFhQUyB31iQPVN+bqz0mcTqc4sLy8XD1Q9NDUgRpxXtHJnj171EOEsrKyY8apxYnEqNT24kLEdeXn56u7RE0z83O8B6rzJkT9jChqPnNzc7VL2Lt3r9ilddsUMRJxuPYqiA0xdeou8eqIHvhZBwAAANBmyfgzAWgAAAAAOJ3Cn0kpGk3Wap9aCeXl5bK2jhZiPnjwYNSnYqrS0lJn/di0prpuTeUDBw7IqgZWHisFq2qq2YkMT6iqqlIPP3r0qLrRcIqWL1+u7hIaLjkcuVdcr6wNa+GlaWTTUxOAFheYm5srd9QpLCyUu+svbt26WW3JMGRV2DHnp9EAtHCCLzoAAAAAAD85rQtAqz/zEceKbe0PYUUSu9TYsXh/vW/fPlkbYc+ePVEhYCEyAF1QUKD9Zngk0VtT780LCwsbPUQoKyuTjRqI/AlMJPWnKOrPoBqdn1YcGHmBsioscj4jf54WSVxCoz+sEJo65ODBg+JE6s9JjvclBgAAAHDayPgzAWgAAAAAOJ3UT1OEppK12jLAQlTGNzIju3fv3sjPrkwmk+hQ1B89erS4sfVpKioq1AOFyspK0ZXcEeGYKVhVU81OZHhC5OGqyKCtqqCgQO4LT2DkKUS3kZ/YRX1G1cJL08imTb9MTWnqRJH1wqFDh8S1qB/CickpLS2NHHzk6966WW3JMGRV2DHnp6kA9Am+6AAAAAAA/OScYABafStdU1NTWVlZWloq3pIfPHhQ1Ajqb62LerF95MiRioqK5cuXl5eXa38xrOFvy6vdCiUlJerPFsTARJ/qgepQBbEh3qfLY+pE/g2usrIy0YOoEcdqRzX6UxHRUt0riKGq5xIb6iDFIWIAYqPh/LTuQO0CmwpAa7Hvffv2iT7FlIp5O1r32/UNZ0yIzGGry0Wr06W+EKJPdagNLwEAAABAGyHjzwSgAQAAAOB0Cn+2omj0MyQhMuO7d+9eWVtH1Mh9Yfv27auurtY+J1M1PErIy8uLjNhGki1akIJVNdOs1cMTdDqd9nmecCi8hE8Uk8kU2UZQT6FViqfqRtRnVC28NI1semoC0E29EKrI5Z9VrZjVlgxDVoUdc36aCkALJ/KiAwAAAADwk6Pmg6N+8nBMamD3aJjoITLOq9Pp1NCzoL7LFo+RSxc7nU71jXZNTU3Ub8tr+WBB9By1V3RSXl6u7o36EUdubq76AwrRc9QfqhJHab9IX1BQIGvDRP9qvbiE/Px8WVtH++teQtT8tPrA5gPQ6nwKURcuGms/mojapV34kSNHon7EoU2X2uB4X2IAAAAAp42MPxOABgAAAIDTSfngJayZZG3kpz6F9Zdq1lbVbcrevXsbruijilzeJpLc3YIUrKqZZicyPEH7TE4oLS2VtfVpqxM1VFFRoX0qFvUZVQsvTSObnpoA9JAhQ47WLUQURZwu8gNOVStmtSXDkFVhx5yfZgLQJ/iiAwAAAADw06IGoMVb++omVFZWyqYRtB9ZNEzrCk6nU/t96QMHDjR8H639Cably5fLqrDmu1Wpf21M9B/ZrRZxbhhHFnR1v6ZeVVUlq8K0nwBE/XBAJY4Sl682EBuyNqzVBzYfgBbEdUWltFXajJWVlcmqsKay3Rrt53JRIwEAAADQdsj4MwFoAAAAADidqus0FfAV8vLyZKPq6kb/UmdBQYHYFbXIblVVVVFRkWzRhNzcXNGh2rNG7gt/dCSrmv2A55jNTmR4areC0+mUtQ2I+amsrIz8XLCiokLtXD21EDVvLbw0jWza7MvUqKZOFJUwFlcqLkH9AFK1b9++5ufnuGa1qWEcb70m8muy0c9TW/2iAwAAAADw06IGoJsh3iDLphHEW291r3izLKvq0/6qVVTEWaXT6dS9DX/i8f/ZuxPAKOr77+P9P9UaDyBcuQM5yX1fm5D73CTkPrlCOALhRqWK9cLSglItWqx401pbag9ptZa2aqktVltt8cZSK94BrUK9AFvd5zcz36w/MgRCkCTA+/XMw38zn9nd2cluZv3/P/tda/0G2zdKubk/1aw2llVf+pLVb97S+1c2WR9T379/v/xsOuq1HA6HcU+2g9DvK7ofYG8F6MMebYu9w60Oo/Wh9CPsSWL3sOoj3DIAAACAwSX1ZwrQAAAAAACcaEcdsQwAAAAAAE4KVgFa/av+Y/+wenydl8Vd2O3ts9abNm2yNnD2Mpn4sB1i9832di3F09PT2kbtW29r7Do7O61t3M1jHx8fa80RrqVY+6m3h/t9ReWoBegj3KbVKd++fbv8/KUvqRs56rUU61P3FKABAACAIUvqzxSgAQAAAAA40VZSgAYAAAAA4JRgFaCPtR171Kbyxo0brQ08PT1l1aEOe7/um83Pz5dVh2ONPVZ3Yf3oHnK8efPmlb1QkbWN+5bd11J3aq05LOsLr/T97PcVFfcD7K0Afdi6uUXdlNpAHTf5WZsz3Y89AQAAADB0SP2ZAjQAAAAAACfaSgrQAAAAAACcEo6zAN2jyOvmLkDLzzZHLkBHRkbKqsOxrusuQOfn51vX6gt3Adp9rSOXra3asb6f/b6ictQCdG/HU7FuUC9AH8+eAAAAABg6pP5MARoAAAAAgBONAjQAAAAAAKeGoVmAdjgcsupwurq61DbuArR7EPKKFSvyj8Y9kdp9rdbWVmvNYdnbw/2+ovLFFqDde9LZ2SmrDmfHjh1qmx57AgAAAGDokPozBWgAAAAAAE40CtAAAAAAAJwahmYBWl2QVTYeHh7WNuvWrbPWeHp6WmuO3APuQe25da0VK1bIqsOx72e/r6h8sQVo956sWbNGVh3O/v371TbH+isGAAAAMGCk/kwBGgAAAACAE40CNAAAAAAAp4ahWYA+QqM3MjLS2mbZsmWyqnsmtLsS3UdWM3jDhg3ys42np+dh28P9vuIXW4D28PCwHvj27dtllY17SvSx/ooBAAAADBipP1OABgAAAAAAAAAAAACgL4ZmAbqrq8vDw0PWHmrdunXWNpGRkbKquxx8hGsddr11rb179/r4+MiqQ61YscK8q5772e8rfrEFaGXDhg3WFWtra2XVobZv325t0GNPAAAAAAwdUn+mAA0AAAAAAAAAAAAAQF8MzQK0om5B1mry8/OttMfMY/f6lStXyiqN2kl1d1u2bOnRV+7s7LSuddj7qq2ttVKlx372+4pfeAFabW+Nmt67d6/T6ZS1Jg8Pj02bNpm3ajjWXzEAAACAASP1ZwrQAAAAAAAAAAAAAAD0hVVEVv+uPBpPT0+5zgkuQKvIuvpjjz3mdDqt+83Pz1+zZo1xiyaHw2FdxW3z5s1WpK7rTiMjI9VtWvelqBux1rupu7Ai6758fHw8PDzUBXVf+/fvd++JvT3cvyt+4QVoxX1dRe2M2gH1y9q0aZP1qNVuWBcoQAMAAABDltSfKUADAAAAAAAAAAAAANAXVju2L/Ru7lELu1b9V5GfbQ7byrVu1ur4ugvNPezfv19tZm2v8/Hx2bJli2xk09u11P67q8w97N27NzIycuXKleqyvT3cvyv2dtyOejyV3grQSmtrq7pT6xZ06regUgrQAAAAwBAn9WcK0AAAAAAAAAAAAAAA9MWmTZu29o2Pj49c50tfcjqd9pW6FStWWBvIzzbW/a5bt05+Nlk3qyJ12cPDY82aNV1dXVaXV9m/f//GjRsjIyOtjQ+rvb1d3YLaUq7TfS37xGg3dUdqb3sUwTdv3mzdkXWDPfbT0o8r9nbcjno8FXVTagPr4NipnVH3aG2jHm9nZ2diYqIVUYAGAAAAhjipP1OABgAAAAAAAAAAAADg1ODh4ZGfn3+EZvBhqe3VtdR15ee+cTgcR5jBfAT9vuIAsOrgvTWnAQAAAAw6qT9TgAYAAAAAAAAAAAAAAAgKCjInU7vWrFkjqwAAAAAMMVJ/pgANAAAAAAAAAAAAAABOB56enitWrOht1vW6deusArTT6ZRVAAAAAIYYqT9TgAYAAAAAAAAAAAAAAKe8oKCgrq4ul8u1ZcsWewe6vb19//79Kt26dausAgAAADD0SP2ZAjQAAAAAAAAAAAAAADgdbNy40RzxbNi6deuGDRtWrly5adOm7du3Wyv3798fGRkpWwMAAAAYeqT+TAEaAAAAAAAAAAAAAACcDjw8PNasWWN1ne22bNkSFBQkmwIAAAAYkqT+TAEaAAAAAAAAAAAAAACcPjw9Pdvb263Zz1u3bl2zZs2KFSscDofEAAAAAIYwqT9TgAYAAAAAAAAAAAAAAAAAAAAw9En9mQI0AAAAAAAAAAAAAAAAAAAAgKFP6s8UoAEAAAAAAAAAAAAAAAAAAAAMfVJ/pgANAAAAAAAAAAAAAAAAAAAAYOiT+jMFaAAAAAAAAAAAAAAAAAAAAABDn9SfKUADAAAAAAAAAAAAAAAAAAAAGPqk/kwBGgAAAAAAAAAAAAAAAAAAAMDQJ/VnCtAAAAAAAAAAAAAAAAAAAAAAhj6pP1OABgAAAAAAAAAAAAAAAAAAADD0Sf2ZAjQAAAAAAAAAAAAAAAAAAACAoU/qzxSgAQAAAAAAAAAAAAAAAAAAAAx9Un+mAA0AAAAAAAAAAAAAAAAAAABg6JP6MwVoAAAAAAAAAAAAAAAAAAAAAEOf1J8pQAMAAAAAAAAAAAAAAAAAAAAY+qT+TAEaAAAAAAAAAAAAAAAAAAAAwNAn9WcK0AAAAAAAAAAAAAAAAAAAAACGPqk/U4AGAAAAAAAAAAAAAAAAAAAAMPRJ/ZkCNAAAAAAAAAAAAAAAAAAAAIChT+rPFKABAAAAAAAAAAAAAAAAAAAADH1Sf6YADQAAAAAAAAAAAAAAAAAAAGDok/ozBWgAAAAAAAAAAAAAAAAAAAAAQ5/UnylAAwAAAAAAAAAAAAAAAAAAABj6pP5MARoAAAAAAAAAAAAAAAAAAADA0Cf1ZwrQAAAAAAAAAAAAAAAAAAAAAIY+qT9TgAYAAAAAAAAAAAAAAAAAAAAw9En9mQI0AAAAAAAAAAAAAAAAAAAAgKFP6s8UoAEAAAAAAAAAAAAAAAAAAAAMfVJ/pgANAAAAAAAAAAAAAAAAAAAAYOiT+jMFaAAAAAAAAAAAAAAAAAAAAABDn9SfKUADAAAAAAAAAAAAAAAAAAAAGPqk/kwBGgAAADi1ze+FxBoJbCTWSGAjsUYCG4k1EthIrJHARmKNBDYSaySwkVgjgY3EmtJeSKyRwEZijQQ2EmsksJFYI4GNxBoJbCTWSGAjsUYCG4k1EthIrAnthcQaCWwk1khgI7FGAhuJNRLYSKyRwEZijQQ2EmsksJFYI4GNxAAAAAAAAAAAAAAwgKT+TAEaAAAAOLXJG38biTUS2EiskcBGYo0ENhJrJLCRWCOBjcQaCWwk1khgI7FGAhuJNRLYSKyRwEZijQQ2EmsksJFYI4GNxBoJbCTWSGAjsUYCG4k1EthIrJHARmKNBDYSaySwkVgjgY3EGglsJNZIYCOxRgIbiTUS2EiskcBGYo0ENhJrJLCRWCOBjcQaCWwk1khgI7FGAhuJNRLYSKyRwEZijQQ2Emvkcxg2EmsksJFYI4GNxBoJbCTWSGAjsUYCG4k1EthIrJHARmKNBDYSa+RzGDYSaySwkVgjgY3EGglsJNZIYCOxRgIbiTUS2EiskcBGYo0ENhJr5HMYNhJrJLCRWCOBjcQaCWwk1khgI7FGAhuJNRLYSKyRwEZijQQ2EmsksJEYAAAAAAAAAIABIf9ns8P9H84AAAAAnDqkmWIjsUYCG4k1EthIrJHARmKNBDYSaySwkVgjgY3EGglsJNZIYCOxRnpbNhJrJLCRWCOBjcQaCWwk1khgI7FGAhuJNRLYSKyRwEZijQQ2Emukq2gjsUYCG4k1EthIrJHARmKNBDYSaySwkVgjgY3EGglsJNZIYCOxRv7XDDYSaySwkVgjgY3EGglsJNZIYCOxRgIbiTUS2EiskcBGYo0ENhJrJLCRWCOBjcQaCWwk1khgI7FGAhuJNRLYSKyRwEZijQQ2EmsksJFYI4GNxBoJbCTWSGAjsUYCG4k1EthIrJHARmKNBDYSaySwkVgjgY3EGglsJNZIYCOxRgIbiTUS2EiskcBGYo0ENhJrJLCRWCOBjcQaCWwk1khgI7FGAhuJNRLYSKyRwEZijQQ2EmsksJFYI4GNxBoJbCTWSGAjsUYCG4k1cpK2kVgjgY3EGglsJNZIYCOxRgIbiTUS2EiskcBGYo0ENhJrJLCRWCNvTG0k1khgI7FGAhuJNRLYSKyRwEZijQQ2EmsksJFYI4GNxBoJbCTWyH+M2UiskcBGYo0ENhJrJLCRWCOBjcQaCWwk1khgI7FGAhuJNRLYSAwAAAAAADBkyP+S9HD/a1IAAAAAAACcHKSZYiOxRgIbiTUS2EiskcBGYo0ENhJrJLCRWCOBjcQaCWwk1khgI7FG2lg2EmsksJFYI4GNxBoJbCTWSGAjsUYCG4k1EthIrJHARmKNBDYSa6SBaCOxRgIbiTUS2EiskcBGYo0ENhJrJLCRWCOBjcQaCWwk1khgI7FGAhuJNfK/eLaRWCOBjcQaCWwk1khgI7FGAhuJNRLYSKyRwEZijQQ2EmsksJFYI4GNxBoJbCTWSGAjsUYCG4k1EthIrJHARmKNBDYSaySwkVgjgY3EGglsJNZIYCOxRgIbiTUS2EiskcBGYo0ENhJrJLCRWCOBjcQaCWwk1khgI7FGAhuJNRLYSKyRwEZijQQ2EmsksJFYI4GNxBoJbCTWSGAjsUYCG4k1EthIrJHARmKNBDYSaySwkVgjgY3EGglsJNZIYCOxRgIbiTVy6rWRWCOBjcQaCWwk1khgI7FGAhuJNRLYSKyRwEZijQQ2EmsksJFYI29MbSTWSGAjsUYCG4k1EthIrJHARmKNBDYSaySwkVgjgY3EGglsJNbIf4zZSKyRwEZijQQ2EmsksJFYI4GNxBoJbCTWSGAjsUYCG4k1EthIDAAAAJxU5D+eD/efzwAAAAAAAAAA4GQiHRYbiTUS2EiskcBGYo0ENhJrJLCRWCOBjcQaCWwk1khgI7FGAhuJNdLbspFYI4GNxBoJbCTWSGAjsUYCG4k1EthIrJHARmKNBDYSaySwkVgjXUUbiTUS2EiskcBGYo0ENhJrJLCRWCOBjcQaCWwk1khgI7FGAhuJNfJ/YLSRWCOBjcQaCWwk1khgI7FGAhuJNRLYSKyRwEZijQQ2EmsksJFYI4GNxBoJbCTWSGAjsUYCG4k1EthIrJHARmKNBDYSaySwkVgjgY3EGglsJNZIYCOxRgIbiTUS2EiskcBGYo0ENhJrJLCRWCOBjcQaCWwk1khgI7FGAhuJNRLYSKyRwEZijQQ2EmsksJFYI4GNxBoJbCTWSGAjsUYCG4k1EthIrJHARmKNBDYSaySwkVgjgY3EGglsJNZIYCOxRgIbiTVy6rWRWCOBjcQaCWwk1khgI7FGAhuJNRLYSKyRwEZijQQ2EmsksJFYI283bSTWSGAjsUYCG4k1EthIrJHARmKNBDYSaySwkVgjgY3EGglsJNbIf2LZSKyRwEZijQQ2EmsksJFYI4GNxBoJbCTWSGAjsUYCG4k1EthIrJHARmIAOEnIm6rDva0CAAAAAAAAAAAAAAwV0kyxkVgjgY3EGglsJNZIYCOxRgIbiTUS2EiskcBGYo0ENhJrJLCRWCO9LRuJNRLYSKyRwEZijQQ2EmsksJFYI4GNxBoJbCTWSGAjsUYCG4k10lW0kVgjgY3EGglsJNZIYCOxRgIbiTUS2EiskcBGYo0ENhJrJLCRWCNFEhuJNRLYSKyRwEZijQQ2EmsksJFYI4GNxBoJbCTWSGAjsUYCG4k1EthIrJHARmKNBDYSaySwkVgjgY3EGglsJNZIYCOxRgIbiTUS2EiskcBGYo0ENhJrJLCRWCOBjcQaCWwk1khgI7FGAhuJNRLYSKyRwEZijQQ2EmsksJFYI4GNxBoJbCTWSGAjsUYCG4k1EthIrJHARmKNBDYSaySwkVgjgY3EGglsJNZIYCOxRgIbiTUS2EiskcBGYo0ENhJrJLCRWCOBjcQaOUnbSKyRwEZijQQ2EmsksJFYI4GNxBoJbCTWSGAjsUYCG4k1EthIrJE3pjYSaySwkVgjgY3EGglsJNZIYCOxRgIbiTUS2EiskcBGYo0ENhJr5D/GbCTWSGCSl9C116rLEmusbewk1khgI7FGAhuJNRLYSKyRwEZijQQ2EmsksJEYAAAAAAAAAAAAAAAA+KJIM8VGYo0ENhJrJLCRWCOBjcQaCWwk1khgI7FGAhuJNRLYSKyRwEZijbSxbCTWSGAjsUYCG4k1EthIrJHARmKNBDYSaySwkVgjgY3EGglsJNZIA9FGYo0ENhJrJLCRWCOBjcQaCWwk1khgI7FGAhuJNRLYSKyRwEZijQQ2EmukWmgjsUYCG4k1EthIrJHARmKNBDYSaySwkVgjgY3EGglsJNZIYCOxRgIbiTUS2EiskcBGYo0ENhJrJLCRWCOBjcQaCWwk1khgI7FGAhuJNRLYSKyRwEZijQQ2EmsksJFYI4GNxBoJbCTWSGAjsUYCG4k1EthIrJHARmKNBDYSaySwkVgjgY3EGglsJNZIYCOxRgIbiTUS2EiskcBGYo0ENhJrJLCRWCOBjcQaCWwk1khgI7FGAhuJNRLYSKyRwEZijQQ2Emvk1GsjsUYCG4k1EthIrJHgUIWFhRIDAAAAAAAAAAAAAAAAAHCs5BMbNhJrJLCRWCOBjcQaCWwk1khgI7FGAhuJNRLYSKyRwEZijQQ2EmvkExs2EmsksJFYI4GNxBoJbCTWSGAjsUYCG4k1EthIrJHARmKNBDYSa6SAaSOxRgKTdEuvvVZdllhjbWMnsUYCG4k1EthIrJHARmKNBDYSaySwkVgjgY3EGjmCNhJrJLCRWCOBjcQaCWwk1khgI7FGAhuJNRLYSKyRwEZijQQ2EmsksJFYI4GNxBoJbCTWSHCo1tZWiQEAAAAAAAAAAAAAAAAAAHAiSG3zcP1OYIiTz2HYSKyRwEZijQQ2EmskOJSXl5fEAAAAAAAAAAAAAAAAAAAAOBGk/kwBGgAAAAAAAAAAAAAAAAAAAMDQJ/VnCtAAAAAAAAAAAAAAAAAAAAAAhj6pP1OABgAAAAAAAAAAAAAAAAAAADD0Sf2ZAjQAAAAAAAAAAAAAAAAAAACAoU/qzxSgAQAAAAAAAAAAAAAAAAAAAAx9Un+mAA0AAAAAAAAAAAAAAAAAAABg6JP6MwVoAAAAAAAAAAAAAAAAAAAAAEOf1J8pQAMAAAAAAAAAAAAAAAAAAAAY+qT+TAEaAAAAAAAAAAAAAAAAAAAAwNAn9WcK0AAAAAAAAAAAAAAAAAAAAACGPqk/U4AGAAAAAAAAAAAAAAAAAAAAMPRJ/ZkCNAAAAAAAAAAAAAAAAAAAAIChT+rPFKABAAAAAAAAAAAAAAAAAAAADH1Sf6YADQAAAAAAAAAAAAAAAAAAAGDok/ozBWgAAAAAAAAAAAAAAAAAAAAAQ5/UnylAAwAAAAAAAAAAAAAAAAAAABj6pP5MARoAAAAAAAAAAAAAAAAAAADA0Cf1ZwrQAAAAAAAAAAAAAAAAAAAAAIY+qT9TgAYAAAAAAAAAAAAAAAAAAAAw9En9mQI0AAAAAAAAAAAAAAAAAAAAgKFP6s8UoAEAAAAAAAAAAAAAAAAAAAAMfVJ/pgANAAAAAAAAAAAAAAAAAAAAYOiT+jMFaAAAAAAAAAAAAAAAAAAAAABDn9SfKUADAAAAAAAAAAAAAAAAAAAAGPqk/kwBGgAAAAAAAAAAAAAAAAAAAMDQJ/VnCtAAAAAAAAAAAAAAAAAAAAAAhj6pP1OABgAAAAAAAAAAAAAAAAAAADD0Sf2ZAjQAAAAAAAAAAAAAAAAAAACAoU/qzxSgAQAAAAAAAAAAAAAAAAAAAAx9Un+mAA0AAAAAAAAAAAAAAAAAAABg6JP6MwVoAAAAAAAAAAAAAAAAAAAAAEOf1J8pQAMAAAAAAAAAAAAAAAAAAAAY+qT+TAEaAAAAAAAAAAAAAAAAAAAAwNAn9WcK0AAAAAAAAAAAAAAAAAAAAACGPqk/U4AGAAAAAAAAAAAAAAAAAAAAMPRJ/ZkCNAAAAAAAAAAAAAAAAAAAAIChT+rPFKABAAAAAAAAAAAAAAAAAAAADH1Sf6YADQAAAAAYUoKCglZ2S0xMlLWnkCHyANVdb+2m78Ypf/wBAAAAAAAAAAAAnLyk/kwBGgAAAAAGxbp166R8unWrrIIpPz/f1a29vV3WDj36b7CHzZs3r1y5Uu28p6enbK0ZIg9Q3w11WdaePMcfAAAAwOnmrLPOCggISE9Pr66unjZt2oIFC5YBAAAAJ9LChQvb2tpqa2uzs7ODgoLOO+88eW8KABhUUn+mAA0AAAAAg2Lr1q1SMnW5ZNVpYMWKFVZFeNOmTbLK5mQp4Oq/wd7s3bt35cqVPWrQFKABAAAA4Jice+65mZmZM2fOVP9RuWbNmmsAAACAAXfxxRerd6QFBQVjxoyR96kAgEEi9WcK0AAAAAAwKPT6rKw6DWzcuNF6yLt27ZJVNqdSAdqyY8cODw8PuRoFaAAAAAA4FomJifPnz7/qqqukeAIAAAAMntWrV59//vkZGRlnnXWWvGEFAAw4qT9TgAYAAACAQUEBWlbZeHp65nfz8fGRtUOP/huU3TV1dnauXLlyy5YtkpnUA5erDZkHqO5ddu7QAvTJcvwBAAAAnNr+7//+b8SIEU1NTd/4xjekbNJtzZo1auWVV155KQAAAHAiXXbZZatWrbJ/Ccnq1atnz57t5+f3//7f/5P3rwCAAST1ZwrQAAAAADAoKEDLqpPWUX+DkZGRXV1dsoXL5XA4JBga8nspQAMAAADAoPu///u/gICAmTNn9mg/r1y5cuHChQ0NDYWFhdnZ2SkpKUkAAADAiZGcnDxx4kT1zrOmpmbq1KkXX3zx6tWr5Y3pNdd885vf7OjoSE1NZRQ0AAw8qT9TgAYAAACAQXGsBWhzIG++p6en/Hw0Hh4eavvIyEj5+VhYM4CDgoLk5z5QG5s7eJQe7RdbgPbx8enLnfbGum7fD2kPffkNOp1O2cLlWrZsmaw9Rtav45iGMfflN6g2kD07vgK0uq5yTIexH08wAAAAAKeV4ODguXPn6u3nVatWtbe3x8XFjR8/3tvbewwAAAAwUNT7z8DAwMjIyPr6en0a9OrVqy+88MLExETmQAPAAJP6MwVoAAAAABgUvdVnExMTVaRs2rRJ/ejp6akuyHamrq6uFStWWBsfVmtr644dO2Rrc/vNmzfnmw1XdUXrxtvb262NdZGRkWpLfWixsmXLliOMLlY3q25NNu2m7r2zs9PDw8PaxsfHx7pTxX3j+/fvl1Xd3F1t9xFQ1GVrpS4oKGjDhg179+61bsrS4051x39ID0vdoFy/9wK0ui/ZwuXauHGjtbK3B9hjP62H2eNXuWbNmiNUjY/pN6h+d7LFoQXoPu5ePw5jP55gAAAAAE5DgYGBHR0dUiq55hr130GLFi1S/0Eh9RMAAABg8AQFBbW1tekf1bvggguioqLkvSwAYEBI/ZkCNAAAAAAMiq291GfdtdRdu3Z5enpu377d+rGHxx577LBl32XLlskWh9q/f7/T6XQPYF65cqVcoduKFSvUNlZqt2bNGtlOo64i8eGoPbdG/Kp/ZdURuScc91bMtbS2tvaoPuvUYbHuVHech7Q3vf0Ge5AtXC61vbWmtweo76d6FOpf68ce1Hq9l+x2rL/Bo+6G0tvu9eMw9uMJBgAAAOA09OUvf7mhoUH9N4LUSa65pqWlZfz48dI3AQAAAAabt7d3RUXFypUr5Q3rNddMmzZt1KhR8o4WAHDiSf2ZAjQAAAAADIqjFqC7urr0juljjz0ml7rZO6NOp1OybuoW3HXh/fv3u8cJ9yhAd3Z2Wust6lqbN29We6gP6122bJlsbaqtrZXApLZU2/coxaof1ZZ9KUCrfbNuVumtgKv0uFNFPaIefWirnitXMB3PIT2CvhSg1Z7IFi7Xhg0brJW9PUD3evWI9PazfT9V2qNk3I/f4FF3Qzns+n4cxn7sHgAAAIDT0Je//OWwsLCrrrpKiiTXXDN9+vTw8HBpmgAAAABDg4+PT2Vl5dVXX229a129enVWVtZXvvIVeV8LADjBpP5MARoAAAAABkVv9Vm9fqrs37+/vb3d3XZtbW11j9FVF9xTk5WgoCA96uzslOBLX1Kb9Wip6gVoT09Pdw91165dDodDAjPavHmzFe3du1e/O/cwaUWvyapdXbNmjbVePcbIyEgJTO5rqTuSVTa9FXDVvetl7hUrVkjwpS+pe9Ef4KZNmyQw9fuQHllfCtB6Jd1d8O3tAR55P9Xvxd1fV9atW2etV/r3G+zLbvR9945wGPu3ewAAAABOQ97e3gsXLrRKJMrixYujo6OlYwIAAAAMJSEhIVOmTFm9erX13vWyyy7r8X8QAQCcOFJ/pgANAAAAAIOiLwXo/fv3O51OCbotW7ZMYpertrZW1n7pS+7asaKvt3h4eOhTe/UCtPuK6u4SExNlbTd1RXd7Vb+Wu4y7efNmWaVpb2+335RyPAVo/YGr25e1GvcD7FHA7fchPbKjFqDVEdAnHLuLv709wKPup/67UBdkbX9/g33ZjWPavaM+M49p9wAAAACcbr785S+r/9BQ/wVhNUguvfTSjIwMLy8vKZgAAAAAQ0xSUtLcuXOtt69KY2MjQ6ABYGBI/ZkCNAAAAAAMir4UoLdv3y5rNT4+PhK7XPoUZHcjWV2QVYeqra21NlD0pumWLVusleqCrDrUhg0brA30rrN74nJvd3dYx1OAPuo9OhwOawNFH4Dd70N6ZPpvUB3PHtxH1aIeuFytbw1jdeOy9lBq92QLrVHdv99gX3ajt/XHdBj7t3sAAAAATjfDhg1zj39es2ZNVVXV+PHjpVoCAAAADD2+vr55eXlXXXWV9Sb28ssvP/fcc+XdLQDgRJL6MwVoAAAAABgUfSlAr1u3TtYeSuJDa7X79++3Vm7YsEFWHUrvp6483CznNWvWyKpDqY2tDfTmsbu0quzatUvtant7u9p5T09P2eJwjqcA7Z4TrD/qHqwNFP2x9PuQHpn+Gzwyddw8PDzkan1rGPe2n/o2ra2t1sr+/Qb7shu9rT+mw9i/3QMAAABwuvH19V21apXVHbnwwguTkpIY/wwAAIAhLjIy0v0pPiUmJkbe3QIATiSpP1OABgAAAIBB0ZcCdG1traw9lMRazdTDw0NWHXGGsWyhFaD1K/aFdS3Fx8dn7969svZQXV1dasfc84l1ar21zbEWoPv4ANXNWtvoBdz+HdKj6ksBWh0idah7lMIP+wCVvuxnUFCQbOFytbe3qzX9/g32ZTeOdfck7uWZ2RfWtQAAAACchiZOnCi1kWuumTlzZnBwsJRKAAAAgKHKz8+vsbHx6quvtt7H1tfXy7tbAMCJJPVnCtAAAAAAMCj6UoDW66c6ibWaqaenp6xyuZYtW2attJMttAK0XqjtC+taFofDsX37dgkOx95U7ncB2l78PayjFqD7fkiPSv8Nqss6dSPqCKv9POw87N72py/7aT8O/f4NHutu9LZeJ7F2GI/nCQYAAADgtFJXV2e1RlavXl1TU+Pt7S2lEgAAAGAIKyoquuKKK6y3sosXL5Z3twCAE0nqzxSgAQAAAGBQbP1CC9CKrHK5NmzYIKsOpZek3QVoZf/+/dbKdevWqXs8MrmOxuFwrFixYvPmzfojcktMTJTtTGqHrfXHWoBWZNWhO99DV1eXtY1+ZHq7QZ3E/S1Ay6q+6W1/9PW9lbwjIyNlC22b/v0G1WXrWsrxrNdJfOhhPM4nGAAAAIDTRFtbm9Uaueqqq0pKSqROAgAAAAxtGRkZF198sfVW9vLLL5d3twCAE0nqzxSgAQAAAGBQfOEFaPfwY3XLsupQDofD2kDRO8Q7duywVq5Zs0ZWHYegoCB1O9YNKj3a2MdTgHaXmzdt2iSrDuXh4WFtoOgPsN+H9MhOaAG6txa70+mULVyu2tpaa2X/foN92Y2+rNdJfOhh/GKfYAAAAABOVUuWLLFaI5dddll2drbUSQAAAIChLTEx8YILLrDeyiry7hYAcCJJ/ZkCNAAAAAAMii+8AO3uFis95i5bNm/eLPGh/WD3+i1btsiq4+Z+dD3a2OvWrbPW79+/X1bZ9HYE3LfZ1dXl4eEhazW1tbXWBoo+Qbnfh/TITmgBevv27bL2UO4DqLh/y/37DfZlN/qyXifxoYfxRDzBAAAAAJx6LrroIqsy8tWvfjU1NVXqJAAAAMDQFhMT4/4snyLvbgEAJ5LUnylAAwAAAMCg+MIL0Pps4O3bt0dGRkpg0qcyK3oBesWKFbLW5VI3Ims1agO9T2xJTEzcvHnzrl27fHx8ZJVm06ZN1g326Lx2dnZa65WgoCBZe6jejoDaB1nrcqldkrXdPD093SOi9+/frzek+31Ij+yEFqAV/XdkUUdMPTQr1Udo9+832Jfd6Mt6ncSHHsb+7R4AAACA082ll15qVUYuuOCC5ORkqZMAAAAAQ1t0dPTixYutt7KKvLsFAJxIUn+mAA0AAAAAg+ILL0ArW7ZskcDl2rt3r/px5cqVGzZs2L59u6ztppdrPTw8du3aZa1X12ptbZXAbNy6m9Pq1txdZ7XeWqmoG6+trXW3mdWttbe3u3u66urWeov+6NSdrlu3zul0qpWKp6enfRt12Vqp6PupqMdupWqv1D6728/KEe5Uv0GdxEOpAK2o353D4VBRZGRkZ2en+u1I4HItW7bMupbSj9+g0pfd6Mt6ncSHHsb+7R4AAACA041egE5KSpI6CQAAADC0UYAGgIEn9WcK0AAAAAAwKE5EAdrHx2fHjh2S2aiN5ZJtunBtba0E3R577DG9bqvs2rXL3VFWNmzYIEHv9u/f32MQtaJuWeJDuR/sEY6Aw+FwV6t7o27fQxv/rBzPIT2CE1qA7nHwe1CPUa7TrR+/wb7sRl/W6yS2HcZ+7B4AAACA0w0FaAAAAJyMKEADwMCT+jMFaAAAAAAYFCeiAK14enrqRWc3a2Cw/GArQCtOp1MfotzDY4895p7x7Oae3XtY+/fvr62tlU01kZGR9onUivvBHvkIJCYmHrnk3aP9rBznIe3NCS1Aq1/Hpk2b5IdDbdmy5bBF4WP9DfZlN/qyXifx4Q5jP55gAAAAAE4rFKABAABwMqIADQADT+rPFKABAAAAYFC0t7ev7CarTEFBQbJ25creKqESr1x52Iax4uPj43Q61QbLli1zd1XVSmmbdvehe/D09FyxYsWWLVvcBeUdO3Zs2rSptbVVtrCJjIxU97J169Zdu3a5r6J+VCuPPM23s7NTbaPuS21sSUxMtKKjHgEPDw919DZv3uxuQqurb9iwweFwyBaH+kIOqV1vv8Gj6m1/7A1jdRcbN260fh3W70L9Wq2ND+uYfoO97caxrtdJ3Mth7McTDAAAAMDpgwI0AAAATkYUoAFg4En9mQI0AAAAAJwmHA6H1TpVjtyjxaDoy4hlAAAAADhVUYAGAADAyYgCNAAMPKk/U4AGAAAAgFOJh4dHb93ZdevWSbvW5YqMjJS1GDIoQAMAAAA4nVGABgAAwMmIAjQADDypP1OABgAAAIBTRmRk5GOPPeZyudrb22VVN7Vm//79VrlWbSNrMZRQgAYAAABwOqMADQAAgJMRBWgAGHhSf6YADQAAAACnBg8Pjx07dkh/1uVSlzdv3rxy5coNGzZs375d1poSExPlOhhKKEADAAAAOJ1RgAYAAMDJiAI0AAw8qT9TgAYAAACAU0Z+fr57zPNhqXTZsmWyNYYYCtAAAAAATmcUoAEAAHAyogANAANP6s8UoAEAAADgVBIZGbl582Zp0R7qscceU6lsh6GHAjQAAACA0xkFaAAAAJyMKEADwMCT+jMFaAAAAAA49Xh6eubn57e2tq5cubK9vZ02LQAAAABgiKMADQAAgJMRBWgAGHhSf6YADQAAAAAAAAAAAGBwUYAGAADAyYgCNAAMPKk/U4AGAAAAAAAAAAAAMLgoQAMAAOBkRAEaAAae1J8pQAMAAAAAAAAAAAAYXBSgAQAAcDKiAA0AA0/qzxSgAQAAAAAAAAAAAAwuCtAAAAA4GVGABoCBJ/VnCtAAAAAAAAAAAAAABhcFaAAAAJyMKEADwMCT+jMFaAAAAAAAAAAAAACDiwI0AAAATkYUoAFg4En9mQI0AAAAAAAAAAAAgMFFARoAAAAnIwrQADDwpP5MARoAAAAAAAAAAADA4KIADQAAgJMRBWgAGHhSf6YADQAAAAAAAAAAAGBwUYAGAADAyYgCNAAMPKk/U4AGAAAAAAAAAAAAMLhOsQJ0fn7+2m70uQEAAE5hFKABYOBJ/ZkCNAAAAAAAAAAAAIDBNcQL0M3Nzddff/0207PPPqv+3bhx4/Lly/39/WWLQy1atMjVraamRtaeEtRvSprdR9PW1ibXweGcwk8SAABOKxSgAWDgSf2ZAjQAAAAAAAAAAACAwTVkC9DNzc07d+6UmqrNvn371q5da69BD+Vua35+vtolRV2QVcfitddekwd2NJs2bZLrHIfj3NvB0pfdpgANAMCpgQI0AAw8qT9TgAYAAAAAAAAAAAAwuIZmAXrt2rVSUD2ihx9+uEcHeih3W7dt22btmLogq47FABegj3NvB0tfdpsCNAAApwYK0AAw8KT+TAEaAAAAAAAAAAAAwOAaggXoVatWSTvVtHPnzk2bNqn9bG5uXrt27QMPPCCB6eGHH5armU6HAvSBAwfULRyBOoByneOgbse6O3VBVp0M+rLb6omkUsvJNd8aAADoKEADwMCT+jMFaAAAAAAAAAAAAACDa6gVoDMzMw8cOGB1WJWNGzf2mPGs5Ofn79u3T7Zwudra2iQ4PQrQ6oKsOpGOc28Hy0m62wAAoB8oQAPAwJP6MwVoAAAAAAAAAAAAAINrqBWg9QHPR5hk7HQ6ZSOX695775W1FKC/OCdpk/gk3W0AANAPFKABYOBJ/ZkCNAAAAAAAAAAAAIDBNaQK0KGhoe7xz3v27LHPftbdbMrMzJSfTfYCdHNz8/XXX79t27adO3c+8MADa9eujY6OtjY+LHWDGzduVNs/a1IX1FV661Ln5+erVFH3q6+xbkFdVo/I2kDRG8yyqpvazLr6EfSjAN3R0SF3sHat0+mUtRr1uCQ2NzjWvT3qw7dWWo7pwOra2truvfdetb36Dap/FXV3+nOj37ut9PacV08b606tXX344YeXL1/e26+px3FQ+6aurn5UV+zjsw4AAPQDBWgAGHhSf6YADQAAAAAAAAAAAGBwDakCtF5fVjsma4+Ffgs1NTUbN26UHzT79u3r6OiQK2hCQ0P1+dM9qMjeYXXf3TZz3vCmTZusHy1qB9QhlR+OqLdmrU6v9sqqo8nPz3cXytW1ehTK1cPZs2ePnh7r3h714Vub9ePAWtT+ux91D2rP3QXrfu+2Ym9gZ2ZmPvvssxIfSh3M5cuXy3Ya/Tiow/jwww9bP+p6e9YBAIB+owANAANP6s8UoAEAAAAAAAAAAAAMriFVgL755pulLupyHXZi8VHp3dbeurMWd33W4u/v31vt1e2BBx6QrbvpzVf9ri19LEDv2bNHbu6I3A9HXZBVfbBq1SrrWsrGjRtlrUnvK1tH+1j39qgPX23TvwOrqF1yt7cPa9++fdb8737vttKjAK1uUN2sZL1Qz1LZupt+HHq0wHvo8awDAADHgwI0AAw8qT9TgAYAAAAAAAAAAAAwuIZUAfree++VomjfhiLb2Wu46jbVypqamo6OjieeeELWulzqslzHpBeFN23a1NzcrHbA39+/ra1Nv5b6Ua5gct/dzp073cXZ1157Td3p2rVr1fFUN6IuWPQGs6wyqRuRmzui/hWgFX3/3X1f9QBllct1/fXXWyuPdW+P+vDVNv07sGob9w4oasvly5ernVf3qDeMH374YWtja9+UY9ptRS9Aq9tRD0QC7U7VPt988816G1utkeuY9Bu09PFZBwAAjgcFaAAYeFJ/pgANAAAAAAAAAAAAYHANqQL0tm3brJ7ovn37ZNUx6lFFXbt2rQTd9GnE1vxgN3Vdq7wrP3eLjo52l197DFHucXdqt48w4tf96NQFWXUs9EJwb+zDiRX1a3Xvv7oRf9OePXusNeqAqB9lU01f9raPD78fB1Y9La31iv1BWanasR61aeVYd1svQOt36i6Fu6lni3tve/SYexyHY3rWAQCAfqMADQADT+rPFKABAAAAAAAAAAAADK4hVYB2d3zVBVl1jPQq6mErsB0dHRLbpg5bDtsGfuCBB6yrHKH5euDAgSO0n5W+dHOPoC8F6OXLl8vWh1LrZQuzaqxYl4+wz8faJD7qwz+mA+tuDO/Zs+ewV+ztuXqsu60XoN13unPnzsPe6dq1a60NFL3HfPzPOgAA0A8UoAFg4En9mQI0AAAAAAAAAAAAgME1pArQ7gbqF1KAPuw45MzMTIldLvXYZe0RqcPy8MMPW1fpsWP63altZG0v+tLNPYK+FKCdTqdsbeN+CLpVq1ZJbHOsTeKjPny7IxxYa6Vy2F/iERzrbusFaFl1uPHPlvz8fNnC5VI3ImtPzLMOAAAcFQVoABh4Un+mAA0AAAAAAAAAAABgcA2pAvS9994rLVGXS1YdI72K2tHRIWs16jFK7HKtXbtW1mrUBsuXL1fRtm3b3IVstyMUoA97a7q+dHOPwF2A3rNnT00vDju32BIdHb1v3z7rFiw9hi73cKxN4qM+/L4fWP131NtM694c626rg2at7MudqsMrWxz6eI//WQcAAPqBAjQADDypP1OABgAAAAAAAAAAADC4hlQB+vrrr5eWqMvVv505bLdVd4QqqtPp3Llzp2S9OEIBuq2tTdb2oi/d3CNwF6B77EPfLV++3LoFS2ZmpgSHc6xN4iM8/GM9sGp7WdvLL/EIjnW33bffxzuVLXovQB/rsw4AAPQbBWgAGHhSf6YADQAAAAAAAAAAAGBwDakCtN7QPdbmq6XfVdS2tjZZ223btm0PPPCA2kbd5sMPP2ytPEIB+qg73Jdu7hEcZwHa39+/Rwt506ZNkh1Ov5vEPfTjwGZmZlorlcMOVD6Cfu92H+9UtqAADQDAEEABGgAGntSfKUADAAAAAAAAAAAAGFxDqgBdU1MjLVGX6+abb5a1vYiOjvb395cfuvW7irpnzx5r5c6dO+3DjDdt2mSlJ28BWp+u7XaEsc39bhL30I8Dq36t1kpl1apVsrZv+r3boaGhsqr3O1VPOdnC5VIvHFlLARoAgEFCARoABp7UnylAAwAAAAAAAAAAABhcQ6oA7e/v7+7LHjhwIDo6WoLDeeCBB/bt27dx48bMzExZ1d8qqj79d/ny5dZKnbtWezwFaPe042effVZWHYvjKUCrfbOuq6gj5j7I6kJvB7kve3vUh9/vA+t+sPfee6+s6pvj2W31lLNW9nanzc3N1gaKPiWaAjQAAIOCAjQADDypP1OABgAAAAAAAAAAADC4hlQBWuno6JCiqDnEt7d6rl45feCBB2Rtf6uoej/Yfq3MzEx3NfZ4CtAbN260tlS3Zp9dfVT9LkCHhoa6r7tz505113qR9+GHH5btDtWXvT3qw+/3gXX3mJX8/HxZ203tj/rdHfbpejy77R5HrdjvVHn22WettMeN9+9ZBwAAjhMFaAAYeFJ/pgANAAAAAAAAAAAAYHANtQK04q6ZKnv27Ono6NB3LDMz011ytehd1f5VUfWVep1aUXen78/xFKDVoZZNXa6bb775WI+2u8Ssjom6ryPoUd7Ve71Op9O+8rCzmfuyt8d0tI/pwKr9lMAsbbt3W/H397/33nvV+gMHDqgdk7Xdjme3j3CnoaGh+hFTz0AJTBSgAQAYFBSgAWDgSf2ZAjQAAAAAAAAAAACAwTUEC9A1NTX79u2Tumg3teaJJ56QHzSrVq2Sq5n6XUV114sVdXnjxo0qvffee60Rxe6q7vEUoPWBxz305cjre3hk27Ztk+uMGdPW1iZrXa7rr79e1pqN3j179ljr1V6pfZOgW1/2ti8Pv38HVulRc1dbqsfV4zmwadMm2brbce72zTffLIHJulNFv021q+royRVMFKABABgUFKABYOBJ/ZkCNAAAAAAAAAAAAIDBNQQL0Ep0dPTDDz8sjdHeLVq0SK7Qrd9VVLWxrLVRe5KZmWld7tHT7UsDWKfuUbY+VF+OvN4kPrJt3QVodRjdLeedO3f6+/tb6y0dHR1WpDzxxBM9UuWoe9uXh9+/A6v0GLpspx5mjyKy5Th3u0fxugd1GHsM2Fb6/awDAADHgwI0AAw8qT9TgAYAAAAAAAAAAAAwuIZmAdqi9m3btm3SG9Xs2bPn+uuvj46Olu00x1NFbW5u3rlzp2SmAwcObNy40d/f332t4yxAK2qzhx9+uMeI674c+X4UoPUSudPptFbq7r33Xol7KeYeeW/7+PD7cWDd1HXdHW43tUbtrb2x7Xacu93W1mYfN2496w5buaYADQDAoKAADQADT+rPFKABAAAAAAAAAAAADK6hXIB2i46Orul22N7zFygzM1PuqabmsG1X9M9xHli5pklWnWD6Dh+2Pg4AAAYXBWgAGHhSf6YADQAAAAAAAAAAAGBwnRQFaAAAAKAHCtAAMPCk/kwBGgAAAAAAAAAAAMDgogANAACAkxEFaAAYeFJ/pgANAAAAAAAAAAAAYHBRgAYAAMDJiAI0AAw8qT9TgAYAAAAAAAAAAAAwuChAAwAA4GREARoABp7UnylAAwAAAAAAAAAAABhcFKABAABwMqIADQADT+rPFKABAAAAAAAAAAAADC4K0AAAADgZUYAGgIEn9WcK0AAAAAAAAAAAAAAGFwVoAAAAnIwoQAPAwJP6MwVoAAAAAAAAAAAAAIOLAjQAAABORhSgAWDgSf2ZAjQAAAAAAAAAAACAwUUBGgAAACcjCtAAMPCk/kwBGgAAAAAAAAAAAMDgogANAACAkxEFaAAYeFJ/pgANAAAAAAAAAAAAYHBRgAYAAMDJiAI0AAw8qT9TgAYAAAAAAAAAAAAwuChAAwAA4GREARoABp7UnylAAwAAAAAAAAAAABhcFKABAABwMqIADQADT+rPFKABAAAAAAAAAAAADC4K0AAAADgZUYAGgIEn9WcK0AAAAAAAAAAAAAAGFwVoAAAAnIwoQAPAwJP6MwVoAAAAAAAAAAAAAIOLAjQAAABORhSgAWDgSf2ZAjQAAAAAAAAAAACAwUUBGgAAACcjCtAAMPCk/kwBGgAAAAAAAAAAAMDgogANAACAkxEFaAAYeFJ/pgANAAAAAAAAAAAAYHBRgAYAAMDJiAI0AAw8qT9TgAYAAAAAAAAAAAAwuChAAwAA4GREARoABp7UnylAAwAAAAAAAAAAABhcFKABAABwMqIADQADT+rPFKABAAAAAAAAAAAADC4K0AAAADgZUYAGgIEn9WcK0AAAAAAAAAAAAAAGFwVoAAAAnIwoQAPAwJP6MwVoAAAAAAAAAAAAAIOLAjQAAABORhSgAWDgSf2ZAjQAAAAAAAAAAACAwUUBGgAAACcjCtAAMPCk/kwBGgAAAAAAAAAAAMDgogANAACAkxEFaAAYeFJ/pgANAAAAAAAAAAAAYHBRgAYAAMDJiAI0AAw8qT9TgAYAAAAAAAAAAAAwuChAAwAA4GREARoABp7UnylAAwAAAAAAAAAAABhcFKABAABwMqIADQADT+rPFKABAAAAAAAAAAAADC4K0AAAADgZUYAGgIEn9WcK0AAAAAAAAAAAAAAGFwVoAAAAnIwoQAPAwJP6MwVoAAAAAAAAAAAAAIOLAjQAAABORhSgAWDgSf2ZAjQAAAAAAAAAAACAwUUBGgAAnM7S09NvueWW119/7e67787NzZW1OBlQgAaAgSf1ZwrQAAAAAAAAAAAAAAYXBWgAAHB6io+Pv/HGG999911Xt48++uh73/uew+GQLTC0UYAGgIEn9WcK0AAAAAAAAAAAAAAGFwVoAABwugkJCbnkkhUvv/yy1Xt+483XfvvglhdefN76saura9WqVREREbI1hioK0AAw8KT+TAEaAAAAAAAAAAAAwOCiAA0AAE4rkydPfvTRR62u877/7L39jlsnZmd6nH1WcGjQpZdf8vIr/7Ki7du3z549e+zYsXI1DD0UoAFg4En9mQI0AAAAAAAAAAAAgMFFARoAAJwmJk6ceM89Pz544IDL5frkk0/uu/8XdfW1gYEBgQEBYWFh3t7eZ599dkJS/PrvXv/evnfVNp9++un9999fUlIi18cQQwEaAAae1J8pQAMAAAAAAAAAAAAYXBSgAQDAKS8qKurqq69+5513zOHOrsf/8ticubPDwkLHjRsXFx+Xm5tT5iwrKilKSk709vYeNnxYYXHez+79yWeuT9XGH3zwwfr16xMTE+W2MGRQgAaAgSf1ZwrQAAAAAAAAAAAAAAYXBWgAAHAK8/HxmTdv7rPPPmtVn1/e9a8rVl4WFx/r5+8XFR3tyHSUlpVWV1fXKnW1VdWT8gvyY+NiR44aOWrMyKnTW//8+Dbrii+99JJ6s+Tn5ye3iyGAAjQADDypP1OABgAAAAAAAAAAADC4KEADAIBTVVlZ2QMPPGA1mN/b++4tt27Izpno7+8bFhaalpZaWFhQOamyuqa6pramzlJfV9dQV1lVmZuXEz4hfNjw4eODAi++ZPmuV/5l3cjWrVvVVnLrGGwUoAFg4En9mQI0AAAAAAAAAAAAgMFFARoAAJx6EhMTNmzY8MEHH5i95c/u+9Uva+tqAgL9g4KDVJSbm+t0OidNmlRVU11tLmYHutbqQDc01tU11FZUVGRmZgYFBZ133nkJSbHrN9zw/gf71G0dPHjwrrvuUpHcEwYPBWgAGHhSf6YADQAAAAAAAAAAAGBwUYAGAACnkuDg4IsuuuiVV14xq8+uJ//217mdHaHhoX7+frGxsVlZWSUlJRWVFZOM+vOkKqW66tAOdG1dfV19Q31jU4O6UFpWmpqa4u3rM2zE8JKyol/c/3OX6zN1s7t37165cmV4eLjcKwYDBWgAGHhSf6YADQAAAAAAAAAAAGBwUYAGAACnjJaWlj/96U9W9XnXKy+v/PqV8Qlxfr5+EyZMSEtPKygoKC93VlRWVFoF6ElmAdpUrehzoOvqGhobmpoa1aLWFBcXx8XHjx49eqzXmLZZ0/765OPWXTz55JMzZsyQ+8aAowANAANP6s8UoAEAAAAAAAAAAAAMLgrQAADgFJCZmXn33T84ePCgy+V6/4P/3Hr7zTl52T6+PiEhIeodTk5OTmlpibPcWV5RXqGWygpzCHSlWqqsOdD2DnR9XUNjfVNzY3NLc1NzU01NTX5BfmRU5PDhw4NCxn/t8otfff1ldV//+9//Nm/eXFBQIPuBAUQBGgAGntSfKUADAAAAAAAAAAAAGFwUoE9bAQEBHR0dTz75xDPPPLNs2bKQkBAJAAA4qURERKxatertt98xhzK7fr3lV3UNNQGBAeMCA2Pj4rKyMouKCkvLSsucZU61GB1oswZdadSgK3t0oGukA11bV1tXX1fXYHWgm5qbm1vMGnRVdVV29sTg4ODhw4cnpSZuuPXGDz/+QN3pvn37rrvu2ri4ONknDAgK0AAw8KT+TAEaAAAAAAAAAAAAwOCiAH16mjlz5uOPy9f3W5555umFCxf6+PjIFgAADHnqtNXR0fHMM89Y57K/b39y/sJ5oaHBfn6+UVGRaelpefl5xcVFpaUlpWWlVgfaqEGXO61R0GYNuqJyUsUkY+kxB7q6tlabA93U1NzS3NLa0tra2tzcVDmpMsPh8Pf39xw5oqyy9P4tv7R2YOfOnUuWLPH19ZX9wwlGARoABp7UnylAAwAAAAAAAAAAABhcFKBPN2Vlpffff99///tfl8v16Wf/e/yvj239w0Pvf/gfq7n18MMP19XVyaYAAAxhJSUl9913n3X+ev3111Z986r4hHhfX5+wsNCk5OTs7OzCwsLikmK1qC1LSktKTWUmp3JoB9ocBd1jDnR1bW2NUYFuqGtoMudAtzS3miZPbm1qaiwvdyYnJ431Guvt6zWrY8b2p5+0dubBBx+qrq6WvcSJRAEaAAae1J8pQAMAAAAAAAAAAAAYXBSgTx/Jyck33XTTBx8Y39SvPP6XP8/rnOvj633ueeeUlZfc+4uffeb6VK3/5JNPfvCDu7KysuRqAAAMMfHx8TfeeOP777+vTlsfffzhHRtvy8vP9fHxDgoKiouPc2Q68vPzCwsLiwzFilGALpECtKJ3oK0adEVludmBrpg0qbKqyqxBV1fV1FbX1Naopbautq6hrrGpwZwD3dTS0tw6uXXKlMmTp0xubGosKSmOjYsdOXJkaFjwFVdd+sZbr6m9+vjjj++44460tDTZY5wYFKABYOBJ/ZkCNAAAAAAAAAAAAIDBRQH6dBAUFLRixcWvvLLLKD67XP98aedll38tISHOx8cnNDQ0KGj8sGHDR40e1Tq1+U+PPmJts3v37q9//ethYWFyEwAADAHjx4+/8MILXn75ZetsteW3DzQ01gUE+Pv7+0VHR6WlpeXk5OQXFBR2MyvQRcXFRd0d6MPMgXZWOMsrjQ50RaVRgDY70GYFusYYBW0UoJW62vqGusbGRmsOdEtri9WBnjp1ivq3vqG+oLAgLDzMc+SI1IyU2+68ef+Bj9TuvfHGG5dddpk61cre44tGARoABp7UnylAAwAAAAAAAAAAABhcFKBPeZMnT/7zn/9sFcX2vLN7/Y03ZGY5/AP8w8PDM9IzioqLypxl2TkTw8LDhw8fHhDov+yCxTv+8YK1/VNPPTVnzhxvb2+5LQAABk9TU9Mjj8gHdbY/9feFixeEhAX7+vqGh4clJSdlZWXl5eXmKwX5BYb8gsKCIqMELTXokpJiYzH6z8Y/9g60WYOWOdCTJhlDoI2lpsoYA6001NY3Gh3oxqamlubm5u450FOnTp02beqUqVNq62qzsyeOGz9+1JhRk6rLf/vQr61dffzxx6dNmyaPAV8oCtAAMPCk/kwBGgAAAAAAAAAAAMDgogB9CsvNzf3pT3/63//+1+VyffLfgz/92Y8rJ1X4B/iHhIQkJyfnF+RXVlYaja7a2praame50+FwBAUFnXPuuVGxkd/69tXvvPu21dx64IEHnE6n3CgAAANOnaHuuuuuAwcOqLPSm11vfnPNqsTEBC8vr5DQkPj4eIcjIycnOzcvVy15+XlKfn6e1KALCwqL1FJYVFxYXFxULB1oGQVtdaDLnGXOCn0OdLk1B3pS1SSrAG3Mga6prq2rrauvbWislznQVge6tXXylMlTp02dNn1q24w2dUFtqfbH19fH199n7vzZTz/3d7XPBw8evOeee9R5WR4PviAUoAFg4En9mQI0AAAAAAAAAAAAgMFFAfqUFBsbu3bt2nfffdcsMLv+9OgjM2a2hYQEBwYGxMXH5WRPLHOWVVVXWV/rX2dpqKupqyl1lqSkpvr6+g4bfl5O3sQf3XP3J/812mYfffTRTTfdlJycLHcAAMCACA8Pv+qqq/bsMT6Tc+Dg/u/fdWd+YZ6Pj3fguMDomOjUtJSsiVk5OdnGkpujFqMDbdag8wvMUdCFxhxoewfaLECbHWjn5wVodwe6stIcAl01yepAVxsd6KqamhqjA91gdqCbpAPd0toiHeipU6dNnzajfUZ7+4ypU6dUVlaqt1VjvcZOiAz/+uor97zTpfZfnZfV2TkqKkoeG44bBWgAGHhSf6YADQAAAAAAAAAAAGBwUYA+xfj4eC9evPj55583is8u1wsvPn/Riq9GRUf5+flHRUU6HBnFxcWVlZVVVeY8y9pq9a90oOvr6hvq6hvramtriouLEhIS1K2NHOXZ0FT7+0cesm7t5ZdfvuiiiwIDA637AgDgxPH29p49e/ZTTz1lnYN+99Bvmlub/Pz9lIiICUmJiY5Mx0QlW5bsnGy1aDXoPKMGrRg1aGsUtNGBLjI60EUlarE60GWlaikrL1OLdKArnNYc6MpJeg16Uo05B7qmrqa2vqahob6hsaGxqdHoQHfPgZ4ydYrVgZ5paJ88pdXpdEbHRI8aPTIrO+N7P7jjk/8dVA/khRdeWLBgga+vrzxOHAcK0AAw8KT+TAEaAAAAAAAAAAAAwOCiAH0qqampeeghKSu//c7udddfl+5I9/XzDQsLS01Nzc/PdzrLK63v9DdVK0YN2poDLTXoxqYGtVRVV+Xn50VGRY0YMcI/wG/JsoUvvPisdct//vOfW1tb5S4BADgBiouLN2/ebJ13nnv+mcVLF4WGh3h7e4WEhsTFx6elpWVmZWZZJmYZNeiJE7NNOabcvNzPO9AyCrp7DrQ1CtroQBeXlBaXlhkdaKsAbXWgy7s70JVmB9o6b06qllHQ6qRZU1djzIFWGhuazFHQ1hzoKVYHepo5B3pm+6zZs2bOmtk6ubWoqCg0NHSs99ia+qqHtv7OelBbfr3F6XTKo0V/UYAGgIEn9WcK0AAAAAAAAAAAAAAGFwXoU0NmZubGjRsPHjRGSx785MCP79nkLC/18/cLCgpKSEjIyckuLS0tr6iorDSLXOYsS2HUuYwadF1drfHN/nV19Q31jU0NTc1NjY0Narvs7OzQ0NBhw86LjJlw9bdWv/1v40v8P/3003vuuaegoEDuHgCAL0hsbOwNN9ywb98+dbrZ/XbX1desTkxKGOs1dnzQ+OjoqJSUZIcjIzPT4ch0qHOfIi1oKUGbNegcswadm5Ob22MOdH6B2YG2RkEXF1tzoM0OtLPUWMqNJrSzvKy7A23VoI1TZ/fHhyZVm+fNmrqa+vo6qwPdaHagm4050C2TJxs16GnTp7XNaJs5a+bs2bPmdMyZNWuW2iY3NycwMDBgnP+CRXOff/E59ejef//9DRtuTkxMlEeOY0cBGgAGntSfKUADAAAAAAAAAAAAGFwUoE92oaGhV155ZVeX0UtW/vDI76dOmzx+/Dj/AP+Y2NjMTEdRUWF3l6u8orJCLWYH2likAm2pra6trbHmQNc3GHOgm806V2Njo7qKI9MREBgwbPiwrOyMH/zoe5/812ha//vf/1bPnIiICNkVAACOQ2Bg4Pnnn//SSy+pU8zBTw7+4Id3FRbne3t7+/v7R0RGJCQmpKWnZZgcJr0ArUgF2mSOgbZ1oAuNxepAq5NjsTUHurSouLikuKisuMhZXOwsLXMa/6/COG9WWEul05wDXVFZZXagq9V5s0qdNI050PW19Q31Zge6yZgD3dIiHeipU6ZNnzZjRps1B7pj7py58+bOnDVTbZyRke7j4x0TG7X6mlXv7fu3eqSvvvrqRRddFBwcLEcBx4ICNAAMPKk/U4AGAAAAAAAAAAAAMLgoQJ+8xo4dO3PmzL/97W9G8dnleu6FZy9Yfn5E1AQ/P98JERNS01Lz8/NKSkuMIpdayp1qMTvQRg1aG2bZ3YGuqa6pVUtNndGArqtvNOZANystzS0tzfUN9epGUlKSfXy8R40ZVddY/XD3l/g///wLCxYs8PHxkd0C0Iv09PRbbrnl9ddfu/vuu3Nzc2UtAFNDQ8PWrX+wzix/eOT3rVNa/P39fHx9QkND4+LiUlNT1CtIaCVoYxJ0ZmaW0YLOnNhdgs7ubQ50gTEHOr8wv7CwoLCooKi4sNAoQheVVeZNanXUzEivnpZZUZ9nzIF2qpOmVYMus2rQlZXlZg260qxBV1rfn1BTV11fX1tfX9+gTpqNDU1Njc0tTeqsObm1dfLkyVOnTW1ra2tvb581y5gDPW/e3Lmd89rbZ6grJiYkeHl7ZedlbbrnBy7Xp+ohP/roo62trXIs0GcUoAFg4En9mQI0AAAAAAAAAAAAgMFFAfokVVpaet9991lFsd17dl973drUtBRvH+/Q0NDExMTsnOyi4qKS0hK1WWmZ8bX+Zc4yowmt16DNeZaHzIGusWrQNbW1tUYH2pgD3djc3NTS2tzS2qKW+oZ6dZvx8XGjRo309fdZsLjzuR1PW/vw0IMP1dTUyM4BOFR8fPyNN9747rvvWq8X5aOPPvre977ncDhkC+A0lp6etnHjxv3796uXxo4Xnz//wqVh4aFjx44JCQ6Ojo5Wb05SU1PTunVXoM0WtCPD4cjIzHSPgjZ60GYFWuZAf96BztM60IX5BcZSUJBfWDopu2lZ7JwbQhbfFXj+T/wv/EnQsu9FdKxJauzIdVaXlhnfn9Ddga5US/cniKrUqdMYBV1VU1VTV11bZ3Sgu0dBN5qjoJtbW1unTJk8zexAz2ifMXPWTLMDPa9z/vzOzs4ZM9oqKiomTIjw8fVubKl75E+/V4/9wIEDP/rRj9RDkOOCPqAADQADT+rPFKABAAAAAAAAAAAADC4K0Ccd9Wtav379hx9+6HK5Pt7/8Q83/aCopMjXz3fcuHFxcXGZmY6CgvxipaS4RLE60KWlZSanMdLSKEBbi/Wd/j060N1zoM0OdGN9U1ODu8s1ebL6p6W+vq6gsGBCZISn54jIqPBvXvP1PW93qZ05ePDgbbfdlpGRITsKYMyYkJCQSy5Z8fLLL6vXiPLGm6/99sEtL7z4vPVjV1fXqlWrIiIiZGvgNKNeIFdeeaV6IaiXwzv/fvtb161NSkkc6zU2IDAgIjIiISE+JSUl1ZSWZi1paelp6WoxCtDpGQ7pQDuMDrTDHASdOXGi0YGWIdDZ2TlmBzrXmAKdm5efl1dgzYHOK8gvmtSaOfNbIedv9r78j6PXPO193Yu+173ov/bZ8Vf/JWbVlozF3y6ualEnzVKrA23WoD//FgVjCLT1LQo1VdW11XV1Neqk2dBQ39AgHehmOW9ac6Cnmx3o9tlzZnfM7ejsnLdg4YLO+Z3Tpk8rLCoKCg4KDhm/9PxFL+3aqY7D22+/vXr16gkTJsgxwhFRgAaAgSf1ZwrQAAAAAAAAAAAAAAYXBeiTSEBAwPLly//1r3+ZzUnXgw//rnVKS2CgWu0fFRWVlpaam5trfp2/wehAF5sd6BLpQCtmCVrmQLtHQXd3oM0iV5X5nf5mB7q2rra2vra+sb67y9XUapS5jJGW6l+1QU5uTkhIyIgRwx0T07939x0H/3tA7dVrr712xRVXBAcHy04Dp7HJkyc/+uij1gt233/23n7HrROzMz3OPis4NOjSyy95+RV5LW/fvn327Nljx46VqwGnAS8vr5kzZ6onv3oJfOb6bNOPf1hcUjTWa6yfn19YWFhsbGxyUnKKUBeSU1NTjCUtVS291aDNDrTDnANt1aCzJho1aKMJbdSgrTnQ+bl5BXm52QUNU4oX3Rp54a+8v/7EmOv/5XXTm963dHnf2uV9y1t+N70WumFn5h3/mPS1O2sr6srKykvV4vx8GrTRgTZr0OaHiKomTaqeVF1bVVtrdKDNGnSDNQra+AoFswY9deqU6W3T2ma0tc9snzV7VkfHnHlmB3rRkkXz5ndOnjxF7aOfv29cQsy169b+54O96pg899xz8+bN9fHxkeOFXlCABoCBJ/VnCtAAAAAAAAAAAAAABhcF6JNFS0vztm3bzLak65lnn152/pIJEeHePj4TJoQnJSdNnDgxPz+/sFtRUWFRcVFxcVGJNQe6uwNtjoGWOdBGAbqyXC1Wi+vzDnR1VXVNlVGANpbauvraBmMOdJM5B7qlpbVl8uTJU6ZMnjp1amtrq9o4MyvT399/9JhRNfVVv3toi7WHTzzxRFtbm5eXl+w9cJpRL8l77vnxwQPGpwI++eST++7/hXopBQYGBAYEhIWFeXt7n3322QlJ8eu/e/17+95V23z66af333+/eqnK9YFTWmFhwebNmz/77DP15P/Ttj9OnT5FvTa8vL2CQ4Kjo6MTExKTRVJySrK1pKSmqOXzDnS62YHOOLQDLXOgzVHQVgF6YpZZgJ5oFqCzc3NzcvNzJzry8rIKOtemLP9VwMrHvK7bOfrG1z1v6Rp5e9fo27tG3tY18tbdXre8FbnxtbJbr64v3AAA//RJREFUnqqevKS4uKy0zCkd6O4atNPqQKtFnT0nqbOn1YGuMz47ZHx/QkN9Q2NDk/nxIePM2doyderkadOmTW+bPmPGjFmzZs2ZM2fu3Lmd8zsXLV60eOmSufPmNTY2pqQk+/n5FhTl/uTeHxunUpfrV7/6lTp3y1HD4VCABoCBJ/VnCtAAAAAAAAAAAAAABhcF6KEvPz9/06ZNn376qcvleqvrjavXrk5KTvT29g4ODoqPj3M4MnJzc/Ly89RmBYb8gsICtRQWSQ26xKxBl7pL0FoL2qhBVxg1aHcHWmrQ1eZ3+tdUGxVoo8tV29hY39hoFrmML/W3OtBTpk6dOm36tMlTJldOqkxNTfH28fIL8O1c2PHs809Zza1f/OKX6v7kYQCnh6ioqKuvvvqdd96xXgWP/+WxOXNnh4WFjhs3Li4+Tr1ay5xlRSVF1qt42PBhhcV5P7v3J5+5jBf4Bx98sH79+sTERLkt4JQTHR29bt2333vvPfWEf+lf/7x4xUXhE8LV+vHjx0dERMTHxyclJap3I4nGv4lJyUlqcdegjWHQUoP+fA50dxM6PcNh1KDdc6AzszLNGrSMgjZq0DlGDTorIyc1NnticczMG/2/+hvvbz418sZdXt/bHXz7bq/bujzv3D32h3uC79jtdXOX9y2vJa7fnjf3mozcolx1FjVOn05ZnOWl5ea3KJhfpGBNg66cVF1ZXTOpxvgWhZo6swbdIDXoJmMUtDp1Tpk8ddrU6dOnt7W3tc9qnz17dsfcDmsU9OKlS9Qye86c6urqmOho/wC/KdNaH/vLn9VR2rdv33e/e5M6MtYBRA8UoAFg4En9mQI0AAAAAAAAAAAAgMFFAXoomzBhwtVXX/3uu8aA2P0HPv7eXRsLivK9fLwDx42LiYlJS0vLzp5ozLPMyzW+1j8vL9+oQedZHejCImMpKi5US/co6OLSUqMFbTWgFXcB2uxAl1dakyyVqklmAbrKKnLV1tXWN9Q1ml/o39Tc1NzS3NLa0jq5dcrUKUaXq21624w29WN5eXlCQsLoMaMnRIWvWrNy99tvqt1+7733rr/+erW38pCAU5ePj8+8eXOfffZZ9cxXXt71rytWXhYXH+vn7xcVHe3IdJSWlVZXV9cak9Vrq6on5Rfkx8bFjhw1ctSYkVOnt/75cRnx/tJLL6k/yH5+fnK7wCkhICBgyZIl//znP9WT/IMPP7jxu+vTM9LUen9//wkTwmNjYxOVJOMf419zUW9LujvQ4vMOtDUHursDna64O9CZDmMUtDUHOksrQGdPzMqYmJGYHRkWm1njPeOm0Rc9OHzVU2f/fE/2Mx9e8sO3Y27rGr1179SXPrjpF//O3PDWiBtfD7juqcSF343PKkzPy88zv02hRL2KpQNt1KDdHWjjBFqpVFdWdXegZRR0vdGBNs6eTU0tLc3qXDm1+9Q5Y+aMWbNmzpkzR/3dmL9g/qIli5cuW7Zo8aJZs9rVmTokJDhsQuhFlyx/s+t1dcR27dq1fPnycePGWQcTbhSgAWDgSf2ZAjQAAAAAAAAAAACAwUUBemjy8fZeMH/+c889Z/YhXb99cEtTS0NAoL+fn9+EiAnqN5WZmZmdk62WnNwctRhDoPNy8/Lz8gry8wvytQ60UYA2OtCfF6CtDnRpmbOsrLzMWWF2oGUOdHcH+vMh0IfpQDcr7g70lO4iV/sMtaiVJSUlUVFRo0aPckxMv/P7t33yvwNq/3fu3KmeYP7+/vLwgFNOWVnZAw88YL1g39v77i23bsjOmejv7xsWFpqWllpYWFA5qbJaRsOa6uvqGuoqqypz83LCJ4QPGz58fFDgxZcs3/XKv6wb2bp1q9pKbh04ydXW1qqntPXcvv/+X06qqvTx8fH19Q0NDYmOjo5PiE9ISFT/z1oSZdFq0ElaBzrVaEF/Pge6ewi0UYPu7kBnOByZeg16YpYhI8uRmp0cnx7gH5g9edSMDcOW/+6cr//d487XE7bsbb1j9/gfvR37yoc/2fnh3fe8k3TTW8O/85rX1U8FL9gQkV2c4sjKVKdUdYIrVufS0pKSMnUetc6kRg3aaEKrc6g5DbqyqqKqprKm2vgWBePsWWvVoOukBt3c1GqNgja/QmHGjLaZM9tnzZrV0WGMgl64cOHiJUuWnr9s0aKF06ZNVaf1wHGBKWnJN93y3QMHP1aH7k9/+lNDQ4McU5goQAPAwJP6MwVoAAAAAAAAAAAAAIOLAvQQVFNT87vf/c4qij319N8XLVkQGhbi5eUVHhYWHx+fnpFujLPMNuZZTjRGWpo1aMUcBZ1nDII2lnyrCW3WoK0OdJExB9oYBW10oMusMZaHdqArnJXWGMtJFZOqzDnQ1ZOqq6UDXVNXU9dQa3yhf5P1hf7Nre4O9FSjA93ePmPmzJkz2tuampsKCwpCQkLGjB1dXVu55UFphf7xj39sbGyUBwmcKhITEzZs2PDBBx+YT/PP7vvVL2vragIC/YOCg1SUm5vrdDqNueo11dXmYnaga60OdENjnXpZVVRUZGZmBgUFnXfeeQlJses33PD+B/vUbR08ePCuu+5SkdwTcBJKSEi4+eabP/zwQ/WUfvrp7fPmzwsOCfLyGhscEhwZGRkXF6c2OMQhNejPC9Cfz4FO0eZAuzvQ5ihodX60FnMO9CGjoB3pWZnpWRkpWTGRcT7ePlktntNvGnbBr8+78i9nX/3CeeteGXHjG8Pv2D3+V+/WbHonecNbI7/7xsjrd3l940m/OdcHZ+UnpzvSsnMnFpcUFRusUdDGUqYWZ5lTLeaZ9PMOdHWlOnsar/cacxR0Xa0xClqdQBvVCbSxpbV5snH2nNz9CaJ2dfacM2f23LkdnfM7Fy5atHTZ0mXLli5YML+ltSUtNTUgwL+yqvw3v/21OoYfffTRHXfckZKSLMf3tEcBGgAGntSfKUADAAAAAAAAAAAAGFwUoIeUjIyM22+//eDBgy6X68233vjmmlUJCfFeXl7jg8bHxMakpqY4Mh3mHMusLKMEbeqlA+0uQBcYc6ALisxR0MVGAbqopLS7A+0sLSs3O9DlZVYBursDXV45qXKS0dk0OtBV3R3o2vqa+oa6hoaGRqsDbc6BNltcU6ZMnWLNgZ45a+as2bPaZ7Y3NjWqPfMPCPAP9Js7f/azzz+lHtR///vfu+66S+21PGDgZBYcHHzRRRe98sor6rmtPPm3v87t7AgND/Xz94uNjVUv05KSkgpjqrr5UlLMQqTWgTZHwzbUqxeUulBaVqpe496+PsNGDC8pK/rF/T93uT5TN7t79+6VK1eGh4fLvQInj/nz5//zn/9UT+N9+/Z+e9116m2Gt7f3uHHjIiMiYuNi1QkuXi0mdbl76WYVoI/YgU5NMyvQZvvZWtKtGrQ5B1o60FkOdTE9NTMzIys1KSM8NHK0p1di6cjJ60Ys3nzeikc8vv73s9fuOPf6XSPWvzZi/RvD1HLj65437PK8dqfXldt8Wq8Yb9xHelpGVkZ+YV5xcXFRUXGROp2WGqOg1cnU6ECbHygyRkGbp1GjBm18jqjCfMnLCVRe7zIKuqG5pck4gU6ZrM6e1ijo9vb2WbNmzpkzZ968efMXLli8dMmy85epZe68ubW1teo9QEhI8JKlC199dZc6nurPzrJlS+Uon94oQAPAwJP6MwVoAAAAAAAAAAAAAIOLAvQQERQUdOWVV77++usul2v//o/u3HhbXl6Ol7dXYGBgZGRkUnJSeka69YX+xjzLzExpQVv0DnROTq7p0DnQ+WYN2poDXWjNgTZq0GYHurTcqEE7u2vQFWqpdFpzoI0adJVaukdBSwe6vsEoQRtjLJuam1paWlpbW40atNaBnj1ndkfHnPb29tq6WrXn3j7eEyLDrvrG5V173lQP8K233vrGN74ZFhYmDx44Caln/p/+9Cf1fFZ2vfLyyq9fGZ8Q5+frN2HChLT0tIKCgvJy9VKqUC8lowA9ySxAm6oVfQ50nVGINF5NTY1qTXFxcVx8/OjRo8d6jWmbNe2vTz5u3cWTTz45Y8YMuW/gZKDeV3z66afq2fvaa681NjUaH+YZPz4iIiI2NlYqzkbfWQrQ6oK7Dy2ZSTrQid0d6KSkZKsG7e5Au+dAu2vQGZ93oDPMDnRGqiMjzeFwZMVHpgYFTAiN8SmaO3L6TSPm/vjsZb8+82t/OnPV3z2ufv68a3cO+/a/hqvlun8Ou/qF89Y8N3rVX8YvvjO0bEpCanpqcnJads5E49NExlJUXFRcXFJcXGqeTPXvVXCWlVufKTI+SlShzqFGDdo4gZqfI1Iv/Pra7hq0MQraOoHKKOgZM2a2z5w9e3bH3I7OBfMXLlq0ZOkSdRiXLl2qVpaXl48bPy49I+1v2/9m/Vm47LLL5FifxihAA8DAk/ozBWgAAAAAAAAAAAAAg4sC9KDz8vKaMWPGk08+afWZtvzmgfrGWj9/Px8fn/AJ4XHxcalpqRndHKZMk96BNgrQ7g50rtGBljnQSkF+vlmAVsshc6BLio3qVpGzuLi8pMRpTq8sc1boHWijvFU5qbJSOtDm8NraaqMDbY2tNVqb5hzolubWQyZZzpg5c+bs2bPmGjraZrSp6yYkJHh5jXVkpd925y2f/M8Ycf3MM8+q2NfXVw4EcJJQr7677/6BNan9/Q/+c+vtN+fkZfv4+oSEhKi/ouolWFpa4ix3lleUG4NgKyvMIdCVaqmy5kDbO9BGG7K+qblRvZqamptqamrUyzYyKnL48OFBIeO/dvnFr77+srqv//3vf5s3by4oKJD9AIa2xx9/zDiruVzvvffeihUroqOjwsPDrSqzVW62mPVnU3cB2ixDd+ueA510yBzopOQUswOdas2B7u5AdxegjQ60o7sDnZGRnpKRnpqZljQxOSWhdGbABT8fc+kfz+v44bDW9V+ZfdeZS+8/c8Ufzrji8bNWbT/7m8+c842nz1n1t3Muf9zjoofPu/wRvzvfTLx5R8r878Tn1ySmp2fm5RUUFhofKFKMEnSJWqwOdPdniszFPJ86yyudFZPKJ7lr0DXGadSoQWvT3+VzRMaHiCarE6j1OSJrFPTcTmMU9JIlS84//3z1Jm3BwgVTpky+6OKLdr1i/EFQnn/+eTnWpzEK0AAw8KT+TAEaAAAAAAAAAAAAwOCiAD24SktLf/GLX1hNpr9v/9uChZ3BIUFe3t7BwcGxMTEpKclpxhf6m8wSl9WANsZAZzqyjAq0+v+ZVgk625oDnf35HGirA51XYM6BLjSWQqMDrZaiwoLi4pLC8vqJVdPTa2ZkTGqZ6KwqKnM61SK1LasDbdQ3P69BG/XN6iq9A93QWN/Y2GgUN1ubzEnQrVOmGBWuthltM9vbZ82e1TG3Y17n3Lnz5k6fPr28vDwqMtLbx2tSTcVvH/q19ah/85vfVFZWyuEAhraIiIhVq1a9/fY71rP311t+VddQExAYMC4wMDYuTr0Y1WvLmgJrvJiMDrRZg640atDGPHW9A10jHWirClnXYHWgm5qbjU8UqAvqtaZe1OpPwfDhw5NSEzfceuOHH3+g7nTfvn3XXXdtXFyc7BMwVD373LPqGbt//8fmy8X1hz/8YdasWQmJCdEx0YlJVqs5Uf2oSO/ZmP2sd6C7a9BGBzrBuIq5SAc6RWrQ6kTZXYO25kB/XoNON2vQaSkZybHqf6RXzIhZerf/un+OWvePYW3fOSu14eyipefUrz1r5vfOWrj5jPO3nLli65mX/PGsS/74lYv/cNbi+zym33hO9vRzWr855raX43+1P+vGv6fO+kZySXV2bnZBfl6BYnagjRq01YQ2PllkDIQ2RkGbfwfMb1eoKDNOppPUmdT4RgX1F6Da/DSR9dqvN174dU1NxocfjM8RyShodQ6dPnNW++zZs+d1ds5fsKCzc96iRQvVC/+JJ56wDuYHH77/2Wefvf7663KsT2MUoAFg4En9mQI0AAAAAAAAAAAAgMFFAXqwxMbG3nDDDfv27XO5XG+8+frXv3FVXFysWj8+aHxUVFRiYqIxzrKbdKCtFrQjw2Es7jnQRg964kSjBS0daPcc6LzuDnS+dKALCs3OVlFBVVtq26oJ828bv+zH/hf+NPCCTWGLNsRMvzijurWorMKaA20sFZVGDdrsQFe6y1tmB7qqpq7aGGBZX9+gNDY0NjeaxU2jv+XuQBtjLGfP7OjomDdv3vz58+fOmztt2tTikuKg4KCAcX4dnbOefubv6uH/5z//ufnmmxMSEqwjAwxBPj4+6pn8zDPPmOVD19+3Pzl/4bzQ0GA/P9+oqMi09DT1KisuLir9vPtYZk5Vd1qjoM0adEXlpApjFuykHnOgq2trtTnQTeZU9Vbj8wTNzU3qdade7f7+/p4jR5RVlt6/5ZfWDuzcuXPJkiUMUMdQ9uKLOz777DN1Frj44otef/119bw9ePDgD394d3V1VWRkZFx8nFWDtkrOZuvZZHWgzcWKjJK0NQfaKEAnJCUbBWjpQBuLFKBT0sxR0IfOgU5JzkhOTC+sietYP37N30bf+MaIr95/XkGbp5ef5xlnnhGccnbpV89pXv+VKRu+0n7nWfN/esb8n31l3k+/suAXZ8647eycyV6jRo/8ytlnRhefdcE9/j9/L/3+93OueyRj2sWOwrK87KwCdXItKCooNDrQ5jRoqwZtdqBLytSfghKzA11qnVLdX6pgfqPCJOO1X1Ntfv7BqEF3j4JuNjrQU6dMm2acQ9tnts+cNWvGzPYVKy564Ne/+uijj9Qx3LNnzze+8Y2a2qr39r6rLsuxPo1RgAaAgSf1ZwrQAAAAAAAAAAAAAAYXBeiBFxAQcOGFF/7rXy+5XK6P93902x23ZudM9PL28vfzD58QHh8fl5Jifpu/yRhmaTSg09LNxRgCbcyBNjvQmRmZmUYNursDrc2BtnWgjQK0WvILSpwFLctjF37f/+LfjVn1xNi1z/t8+x9+1+4IuGZ72Oo/Jl764+zp5zvLJklhy+hAVzgrzO6mjLA1OtBV1lf5Gx1oa4Cl2YFuamqUr/I35kBPmTZtatsM91f5z547d+78+fMXLFwwr3Ne65RWtX/qOEREhV951WW7335LHYpXXnnlkksuGT9+vBwmYMgoKSm577771LNUef3111Z986r4hHhfX5+wsNCk5GT1gissLCwuKVaL2tKY/2oqMzmNqeqHdKCN15G7Ay1zoKtra2uMCrR6NTWZc6CNcbCGyZNb1SurvNyZnJw01must6/XrI4Z259+0tqZBx98qLq6WvYSGGJe3LHD5fqssLBAvdmIiYlef+N3rArvW2+9ee2138rJyY6KioqPj0/Sa9Dd45/dizkH2lyMIdDmHOjkhKTkRGvp7kAnpaQmG4t0oI0adEpyWlJiWm55QtvqkNVP+Nz05qjLt55Xs3z0hDj/Eed4jRntdd65nkGxnot/GNh+x7Ci88+edKVH+x1ntlzvoS503u254W9Z9Z3J48eF+vj4eHzl3HNHnZE55dxVD4Xe/0H2L97N//p9mU0LstT5NSfb/FhRcUFhkforUGQ2odVfg6LiUrUUl5QZS2m5UYMuV0uFs7yyvEJq0EYTWp1Jzb8ANXX1tQ0N9cYo6OYm9cKfOnWqOo2qC+rUeefGO99880113D755JMf3/Pjuvq6cePGRUdH7d7TRQFaoQANAANP6s8UoAEAAAAAAAAAAAAMLgrQA6y5ufnRbdvM7qLrgV/fX1Nb7ePr7ePjExoaGhMTo34FKUK+1j/186/1P7QG7XDXoB2ZWWoxa9DGHOisiUYH2qhB5+RkGx3o3Jy8/Ny8grzc3LzS4tI5K9OX/STg0q1j1r4w9sbXvG5+y/vWLrX43Pxm4Hdfjrl1Z/FNf6ltu7CqtKK0TC3lZc5yqwmt16ArJskMyyqjuGkMsLSG11o16Kbm5qYW+Sr/KdOnT7fGWM42OtAd8zrnLVy4YNGSRR3z5qlDoR6LevjpjtTb77zlk/8dVMfkr3/967Rp08aOHSvHCxhU8fHxN9544/vvv6+enB99/OEdG29TryYfH++goKC4+Dj16svPzy8sLCwyFCtGAbpECtCK3oG2atDmPHV5ERnz1I0StPE6qqmtUYvxarJmwarXUYsxDrbVHKk+ecrkxqbGkpLi2LjYkSNHhoYFX3HVpW+89Zraq48//viOO+5Qfx5kj4EhY4dRgHY1NjZ4enqeN2yYx9ke+fl59977c7VSeeqp7eeff74620WaX3pgdKCNFrRZgFb0DnSiVYCONwvQ5uLuQKccpgOdnJyaGJ+amZfYfHHYlb/337B7zDXPjZh69cjEiYFhwVHhIdEBvuO8xvgF+Ae2rwnbuDuq9erho8ednTnlnIt+O6zu8pG+Yec6F494bP/U2/9c7yhMiIqMDQkNGT1q7NlnDfcOPafyglHfeTLmoU+KfvpG0SV3TaxqyzJOsbnmKGhjMadBl5gdaKMGXayWUmdxaXlJqTEKutQ8n7r/DnRPgzb+CNRYp9FG47XfrC6o1/7qNd98+umnrMP1yCOPzJo1Sx0g9T4hNjY2LT119563KEArFKABYOBJ/ZkCNAAAAAAAAAAAAIDBRQF6wGRnZ//whz/83//+53K5/r79b/M6O4KDg8aOHRsUFBQVFZWQkJAsjC/0txZbB1q+2T+9ew601YE250BLB9ooQLs70EYB2uxA5+fk5OY6kvKbZuZc+JOwSx7yWfPMmBte8dzwludtXaNu7xp9W5fnrV2jbu0KuO319B+8Wn3lT8rL6opLy0rl6/vLy8rNGvRhOtA1k2pqq2rrjOJmfX1dfUN9ozkKurml2RgFPbll6tSp06ZPa2trM0ZBz57VMWfO3Hlz5y+Yv2jx4kVLFs+Z21FTUxsfH+/n71NZXb7ld79SB+fTTz/96U9/mpeXJwcOGAzjx4+/8MILXn75ZbN86Nry2wcaGusCAvz9/f2io6PS0tJycnLyCwoKu5kV6KLi4qLuDvRh5kA7rfmvxmK+gowOtFmB7p4CW6uYU9UbG4156sbrqFW9jowOtDkQdrJ6iRUUFoSFh3mOHJGakXLbnTfvP2CM1H3jjTcuu+yy0NBQ2XtgCNjxwgvqyameuj4+PsFBwcYo5bM9hg0bNnny5L/+9S/mC8v1m9/8ZsrUqTExMbGxscaMZ6Pp3GsBOiFJLdKBdheg9Q60OoMmxKWkOpKq5024+JeB333d5/qXR3bc5pnu9A0KDA8Ljo6Kio6Pj0tKTA4NjM5wBt74Qty6Z/0T80d/6UsjUqrP+PbzI6dc5XX2l0eOGv/ldX+Ie+rTeZ3XZMXGxSfGJ6lzdGRklJ/vuOHDRo5POGfq1d4/eDlt6yflP/xn8ZL1E51N2dk5xrctqJenXoMuMmvQxhxop7GUOkvKnCXqlKr+Glh/B9yfhVB/AdSZtK6+zjif1tYsO3/Zgw/+Tp0N1SF68cUdl1yyQj206OjolJQUh8MRGxujzu973mYCtIECNAAMPKk/U4AGAAAAAAAAAAAAMLgoQA+A8PDwNWvW7Nmzx+VyvfHm619ftTImNlqtHzdu3IQJE+Li4pKSEtXBTzT+TUxKTrKW7g50SkqqsaQq3XOgu2vQabY50GYNeqLUoM0O9MScXON/ZiTlpsSn1V0YtORnPlf+efS1/xh5x1vj7twdaBagR961J+AHe9Tl0Te/FXTzPyd+87fZ1TMd+XmFZn/TrEGbi1GDNqbYVpglzopKpapyUrXxJf41NUZnq86oQdc3NNQ3NjVao6CN7ubUKdOmTTNGQbfPmDlrpjUKurOzc8GihYuXLlm0ZPHMWbPUTapDMW58wJzO2U8/u10dqHfeeefaa6+NjIy0jiEwkNSz95FHHjHqmS7X9qf+vnDxgpCwYF9f3/DwMPXazMrKysvLzVcK8gsMRuuxyChBSw26pKTYWIzXj/GPvQMtryDrgwSTjCHQxlJTZYyBVhpq6xuNDrR6FbU0Nzd3z4E2Pk4wbap6QdXW1apX9bjx40eNGTWpuvy3D/3a2tXHH39cvdbkMQCD7blnn1VPy2nTp/n5+U0IDw8JCQkMDBw7duyXv/xlHx+f5V9d/vrrxhTzDz744I47bi9zlkVGRcbGxSYmWh3oOGMxCtDGhbi4+NjohBhjSVSbJCQkJiYfMgda/ZsQq06cSSVTopZ8P2j9Lr/vvjn6/J975rR4hYaFBPtHhodERUdFJyYmGqfSJEdMXNSi28N++H5E+7f8An1CPb48Kr3hzO/8a9ScGwJ9ff3P+H9n57af+4d91ZtfmpxfF5+ckKbOqFmZE9WpODIiymu0//BhIyJzz11yZ+Av9uT86ZPq2/9W0vHN7MLK7OzsvDz1l6GowBgIXWwsZhPa/P/qj0JZSYmztLsGXersngZdMamiqtoYBa1+bGtvu+sH39+7d686MurfG264PjsnOzQ0VB2K5ORk9UYgMzNTHZC8/Ny339nz1ltvybE+jVGABoCBZ7WfFfkZAAAAAAAAAAAAAAYFBegTytfXd968ec8995zL5TpwYP8dd96enTNx7Nixfn5+4eHhMTExiYkJSdZ3/yvqktmElgK0kmL+4+5Ayxzo7gK0kpGebnagjRq0zIF2ZLk70NlZ6u7U/3SkZCdEpkUnj6u9bOyin3te/vg53/mXz5MfLP793sm3dI285+3Y59//1pP/ufDO3d43vTX6Oy9FfHNrYt2CRMfErKIis7RVWmLVoJ1qMUZBO8sryuVL/I0SZ+Wk6spqYxR0jfEl/nW1deYoaPOr/Bubm5taWpsnT2mdOnXK1OnT2ma0tbfPmD171pyOOXPndRijoJcsXnr+soWLFs5on1FYWDg+aHxkdMTKr1/x73ffUQftH//4x+LFiwMCAuSAAieYw+G46667Dhw4oJ5+b3a9+c01q9SL1MvLKyQ0JD4+3uHIyMnJzs3LVUtefp4x8TU/T2rQ2uTX4uKiYulAyyhoqwNd5ixzVuhzoMutOdDGMHWzAF1dU11jDIJVL6LahsZ6mQNtdaBbWydPmTx12tRp06eq15G6oLZU++Pr6+Pr7zN3/uynn/u72ueDBw/ec889ubm58niAwfPU08anWWbMaDM/PGAICwsLCgry9/cfPnz4GWecERUVuf7G73z8sTHFfNcru76+6usZGelR0VFWATrOKEDHxcbGxUTHpWTG5FZGFjVNKGwKz6mISMmIjY9PTEhOMKrPSYnxcUlxcYm5VdEd3wn59vPjbn3b+9KHRjrnjwmPGh88LmJCeERUTFRsdFxifEpKYmpKYnp0WFJJW9DNr0StftwvPT88LDB6uMforCkeN3WNmb8hODQ0fJSn12j/c7/2k+Dtn8685HsFyalJxnlVnRQd2ZmOrKTE5LDgCaOH+wwffV5G4/CV90146MOyP3xY950/lEz9anZ+SW52Tl5+YX5BkVoK8vOLipy5Fa0ZDZ2pky/ImLJ8YtOi3IqmwuLSYmsatDqlqj8F6gxbXVN1zdqrd/5zpzoays9//nP1x0EdscioSOsdgnoboE766hQfGxubX5D3zr/ffuONN+RYn8YoQAPAwJP6MwVoAAAAAAAAAAAAAIOLAvSJM2nSpAcffNBqMv3uwd82NNb7+vn6+PiEhARHRUUZ3/Bvfd9/95JoLFoNWrFq0MnJRgHarEEbc6BTU91DoM0atMyBznA4HJmfj4LOModAZzkmZqZNzEieGBYcGZEypmGV54KfnnvZnz2ue3HMff+u/dm/CzZ0jXx038I9H//xj/sW3t419rtvjlz3kv/KP4Q1LI5Nd6Rn52aXlBQXm11Oo8rpNJrQTrU4jW/wt3qclRUVxizbKmOAZU11dU2tWmrMBmddfX2d1KCN+maLMcJ22tTp06fNaJ8xc+bM2bNndXR0zOuct3DRwiVLly49f9mCBQsmT5msdjsgMMCRlXHn9+/436f/VUdv69attbW1cliBEyM8PPyqq67as+dt9ZQ7cHD/9++6M78wz8fHO3BcYHRMdGpainpN5eRkG0tujlqMDrRZg84vMEdBFxpzoO0daLMAbXagnZ8XoN0d6MpKcwh01SSrA11tdKDNeerqFdRgdqCbpAPd0toiHeipU6eZL6L29hlTp06prKxUfyrGeo2dEBn+9dVX7nmnS+3/u+++u3btWvV3Rh4bMBj+9rcn1bNx5sx2qwAdZlIXQkNDx40bp86G55x77hlnfrmgIO+Xv/yF2lJ5dNu2ltbmmNgYswAdGx0Vm5aZUDMvetZ1wUs3+Vz8a68Vvxl7wc+8Zl3vXzE7PD0vITEjIT4xMbModtrXw65+Iui2d/1WPzm64WujopMDxvmre4yIjIqIjYtJTklKTU1JTkxNjE2Nj0iLTQq/5Jfh398X0nRJYGhgTHhI1Mhh3jnTz71p95jODUHRUTFB40M8z/NKLD/3F2/k/3b31Mr25KSE9KzMrExHVlb6xIkZ2RmpjoS4BLXZiGFjx4w7t6Rz5PrHEh89WPvQe82rf1nS0JmdU5CTnZ2fX5Q3aUZ829Xjlm7yveyhwG/8acI121Ku+X3+VT8va/uq+utQVGLUoI3PF81ob3v44Yesg/Dnx/48a/YsdcBCw0LVoUiIVw8xUb0FMD79lJ7ucGRER0erPzXvvvfOa6+9Jsf6NEYBGgAGntSfKUADAAAAAAAAAAAAGFwUoE+E+Pj4m2666YMPPnC5XC+88PySZUtCw0LHeo0NDg6OiIiIjYtN6KH3DrRVgE5OMedAK1YHOs3sQFujoDPSDp0D7e5AZzrUpbSszPSJSXGp4/yDw5JG1n99xPwfD7vkkXO++fQ51740/DuvjbjpTc+fvJN5/7uVt+8OUJfXvzb62hd9vva7gOq5UeqWM7Iy8gvyikuKi4qMGrQ5CrqkzFiMNqd0oCucFcY0aKsDXVltlDi7O9B1tfX19Q0N9Y2NDU1NjcYo6MmtRg1aRkG3z5w1c07H7LlzzVHQixctXaYs7ezsbGpuVI89IDCgvqHm91uNTtiHH354yy23qGMjhxj44nh7e8+ePfupp54yy4eu3z30m+bWJj9/PyUiYoJ6OapX0kQlW5bsnGy1aDXoPKMGrRg1aGsUtNGBLjI60EUlarE60GWlxiT18jK1SAfanPxq1KAn6TXoSTXmHOiaupra+hr18ukept7c0j0HesrUKVYHeqahffKUVqfTGR0TPWr0yKzsjO/94I5P/ndQPZAXXnhhwYIFvr6+8jiBgfXXv/5VPQ/VH3m9AG0KVedEdUIMDAxQZ8YzzjzzvGHnTZk6+S9/fVxt/5vfbbFay1GRMVn5ifOvT7j4/uAr/uS7+mmvb+/0+c7Lvtf/y/dbL/hc/nv/zvUxk2anNF48YeXvQ+54b/y6f3q1fXtkQo7vuIDQkPETJkRERMdEJSTGp6Qmp6Sps6dxKk1KSI0IiateOv5770Zc/qBfQvqECSHqjqLHjvI3C9Cj598yPjoqNjoqZlxA8IiRwzu+4/M31+Sr7ytJzkhIS850ZGQZZ9UM48NFWZkT09PSY2NjA/zGDz9vVED0Oc1XeN39YtaTn0154M2Wr91ZUjMtr/H8qAU/HH3FoyPX7vD+zi7/7746/uZXI29/NfuHrzV8b0fL3CvK1J+LMmdp5sTM69Zfox77Sy/989JLL1FvIcaNGxepHn9sTFxcnDrxGbuuHoE6+atzfka6itRfmL1733311VflWJ/GKEADwMCT+jMFaAAAAAAAAAAAAACDiwL0F66zs/Mf//iHy+X64IP316//Tmpaqre397hx44zqc2xsQkK8+eX+BnW5e+lmFaBNZv/58yHQ0oE2CtBaB7p7CLS7A+0wOtAOR5YjM9ORnqr+v9GBjolK8PMeFxA6svKikR0/GHbhb8+54vGz1jx7znUvDfvOqyPWvz58/Rvn3fjG8PWveq771+irn/U9/+c+RY1RyUnpaY7UiTlZ5jjbzzvQn9egrYm2Zg26wqhyVlRUVUyqqjQH2ZoNztqaOnMUtFXibDJHQbe0tnze4JwxY+bM9lmzZBT0goULFy9dsux8owat1lRVVUVFR4WGh164/PzX33hNHdKXX355yZIlcqCBL4J6Wm/evFk9u5Tnnn9m8dJFoeEh3t5eIaEhcfHxaWlpmVmZWRZjqrpZhDblmHLzcj/vQMso6O450NYoaKMDXVxSWqxeNe4CtNWBLu/uQFeaHehKqwNdLaOg1cunpq7GmAOtmC+fpuYmaw70FOsVNM2cA61eQbNnzZw1s3Vya1FRUWho6FjvsTX1VQ9t/Z31oLb8eovT6ZRHCwygxx57TD0DOzvn+fj4WP1n9fz8XFioWhEUNN7f32/UqJFnnHGG2mza9Ck1dVXjg8ZHRkSlp6fMWZN00a+CVj7qf+0O7/Wvjtnw1thbd6vF+5a3fL6zK/DapyKv+3P6za9G3PSm74K7Rjmq1Kk2KGhceFh4eGRMRFxCbHJKkrkYJ1DjVJqUHBeVnDgx+Bt/DL+la1zlvHFhwdFRkdFxsfHeowOzp51z0+4x829Vdx0dH5cYExszeqRPeOa5dz6X8scPpjYtS0mIT3GkGWdVJcv8s6D+JKj/qc7J6kZ8vAKGD/eckHVO503jfvVW2WMHpl/3h4lLfjLmyr94fvulMTe9OfaWrjG37R5zW9fY23eP29jl+OHrdTc9XtM6x1lQUBQROSExLW7mnLYMR3pgYGB4eLg698XExMSp/XC/GTA/EKXeBag/ShMiJqg/Kfv+s1edE+VYn8YoQAPAwJP6MwVoAAAAAAAAAAAAAIOLAvQXSx3GTz/91OVyvfnWm62TW6X6PMGqPhv1ZvWvuwCtLnzeh9Zq0FYB2vD5HGipQRsdaGMMZEpqmtmBtoZAa3OgZRR0ZkZGuiMjxRgGnZrkCBsXMz5ofFLZqKbVI2d9/9yFm7/y1YfPuPIvZ61+5ty1O8779kvDv/2v4erfb/1j2Jrnh695xu+yB4OnXRU1sSQlKTk1LT09vyDPqHIai1GCLi41FqPQaTWhja/vN5rQ5eVmm3OSOc7WGGRbVV1dVVPbPQ26vlZq0M2N7hLn1GlT29qmmzXombPnzO6Y29G5YP7CRYuWLluqjuSSpUtmzZpVVlYWGBiYOdHxzLNPm31O12WXXSaHGzgO6lV5ww037Nu3Tz2pdr/ddfU1qxOTEsZ6jVUvlujoqJSUZIcjI9McpG4UHo3Ko9mClhK0WYPOMWvQuTm5uT3mQOcXmB1oaxR0cbE1B9rsQDtLjaXcaEI7y8u6O9BWDdroQFs16KqqSTJMva6m3vgIgdGBbjQ70M3GHOgWa5j6NHOY+sxZM2fPnjWnY456vahtcnNz1EsmYJz/gkVzn3/xOfXo3n///Q0bblZ/UeSRAwNi27Zt6um3cNECHx8fc/CzVYAOMf8VxsqQEPWiCwgI8Pbx9vQcMWbMaD8//2C/CZ2Xll6xJX7Fb33XPDP22y+PWP/G8JvfGnlb16hbukao5dYun/W7Am98OeyqR8aXzPUKiQwc5xcWFh4WETkhJjY6ISkhKTnRXIzPEaklMTE5KSFlQlhU68pxG/eFLt3kGxUTETEhKiY6Nikx2WtUYPa0c2/aM6bzFqMAHRebkJKaEhIcOmy4Z93XRv3pQPWGR8vTC+LTUjMcSob5RyHLXIy/DBPVz+oEHR4eMWak74jRw5Irh6/4UcSqxwOveHz42hc8b3htxIa3PNWe39bleWvXsFu71GX/215L2/hy5bd+MjUjwxESEhoQqA6A/4SICdEx0ervT0xsjPG+wP29EN01aHUvqampYeHhpc6S9z/4z0svvSTH+jRGARoABp7UnylAAwAAAAAAAAAAABhcFKC/WI8/bgy8VP7zn/9cdtllMbExYeFhCYkJSclJ0m42mZVn0+EK0J/Pge4uQJtzoM0OtDEHOvmQOdDuUdDdHWijAO3ISE9ViyM9JSs5ISOzNKT9296X/XH4+Q8Mm3rTOdNuPXPBz85c/uAZlz76laue8PjG0+d885lzvrH93JVPnvO1bWd/9bcjv/V02A92p65+OLHpgnhHXmpmZm5hQaEx1NZQVFyilmK1mB3o4tIys9Bp1KBLndZc20pn5aTySUaP05oGbc6y7Z4GXd9Q39jU0NzcXeI0R0FPb5s+o33GrFmz5syZM7dz3oJFC5YsWXL+BedfcOEF8xfMnzJl8iWXrHjttVetY/v888/L4Qb6JTAw8Pzzz3/ppZfU0+ngJwd/8MO7Covzvb29/f39IyIj1AtQvaAyTEbZ0XFIAVqRCrTJHANt60AXGovVgS4qKiy25kCXFhkvm6Ky4iJncbH5uQH1/yqMDrQxQN2sQZtzoCsqq8wOtPkRgupaowNdV1+rXjhmB7rJmAPd0qK/fGbMaLPmQHfMnTN33tyZs2aqjTMy0n18vGNio1Zfs+q9ff9Wj/TVV1+96KKLgoOD5SgAJ9gjjzyinnhLly728fExpj2b/eeQ0BDFLD/3ZBSkw0JDgkMCvIPDw4Nnr4ld+jP/Kx/1u+YFz3v2JD/wXuUduwNv6Rrx47ejfvJO4q27x9701uhrnvOatyEoPjMyNCJ0QkRYVExkfGJcYrJx9nQvZvs5KTEhOSo8Mb10/NrtITe85JfXGBQaFBUZGZkQn6jOrl6jAidOO/em3aOtAnRsTHx6WnpcbJzXGH/fiHPX/iHizwdbZn0jLSEhSf05ML5qwfjbYH02wupCGyOh1Sp1Jg/yDx9x3pjsKSMX/vyclX87e93LYzftSfnBnrBb3xqxcbf/A++V/Oyd+Fu7Rt36VtiN/0hddX9Wem7UhLDIuDh1b3Fx8bHx8erfOPMtQfe7Ar0DnZyk3gKEhYWUV5R98OH7O3fulGN9GqMADQADT+rPFKABAAAAAAAAAAAADC4K0F+sZ5991uVy7d//sfpX2bZt27zOeerARkVHWwUmJcEYA50gvWer//x5B1qfA212nqz+lll7khp0dwfaqEEbc6BT9A60UYN2pKdnZCTHOVISHPkVSTNWB3/zr2NvfG3EJb87J3f2WVnTz6280mPKTWfNu+fMpfef+dUHz7zkka9c8sezVvzxKxc+6DFv09lVl5ybM/28FfeNv/f99J+9m3nFL5IbF6bnF+XlZhfk5xcoxijo4iJjMZrQxlxbcykxmtBl5jTo8rLyyjKzzVlujrM1a9DVVTU1Mg26vqHOHAXd1GLMsm2dPLl16rSpZge6beas9jkds+fN75y/YMG8zs7Fixddf/267dv/bh3PDz54/zPXZ6+//rocbuDYNTQ0bN36B+sZ9YdHft86pcXf38/H1yc0NDQuLi41NSXdTStBG5OgrZpjVubE7hJ0dm9zoI3XitGBLiwsKCwqKCo2PjmgXjdllXmTWh01M9Krp2VW1OcZc6CdTvNjA2XlFWVWDbqy0pihboyCNmrQ1kcIqmvqquvra+vr6xsa6xvVa6epsbmlqbmlZbLx8rEmqbe1t7cbHyHomDNv3ty5nfPa22eoK6o/Nl7eXtl5WZvu+YHLZQynf/TRR9WLTo4FcCJt/f3v1VPuggvONwrQ3Yz6s0VdtC1BQSFBgSG+YwNjUgJnrwudd/eoy7eNXPP8Ob9/r/GpD6/auCf0J+8k/OuD25/54Nt37Bl345sjrtvpc+HPxmdWhoZHhhnftKCe8UlGY9goDWsdaLU2PjZ5QkT47PUBG/8TNPs7fuETIiaER8TERCcnpVgToCdOPee7XaM6bx4fEREVGxunzqvqHBseFj7s3NF57cN+85/Cu1+onFgZl5yUbv45MP8ufP7XwVjUn4j05ImxE5LGhfhWLPdc/MtzrvjrWd/dFfbkh8vvf7fw5i7Ph/bO2P3x7//yn9m3dXlueNP7uhdCr9wSV9wcGRISFhUdFWOKjYuNjY+NM5Y4852B9vko80ElJyerg1dZVf7R/g937Nghx/o0RgEaAAae1J8pQAMAAAAAAAAAAAAYXBSgv1gv7tjxmcvV0TH7wgsvfOWVV1wu1/8+/d9Pf/rT+vr6qKio2LhYo4yVaDag7XOgzcWKDEYB2qpwGQOkzSUxOSXJXJJTUs0OdFpKqrEcMgc6NTU9OT4jMyep+eKwS3/jfeNrnmueGtbyjeERqaM9zjp7hNeZjsnn1V1z1uSbvjLtlrM6fnTmgp+f0fnTs+bfe8b8n51Z//URkaneZ33lnBF+X3YuHb7uyYhfH8je9MbES+5Or2nPys3Lz8k259sWFxQWSw3aHAht1qDLStRSWlZS5iwtq5BOp9mBrphkTrQ1xtnWVNfUVNfW1daaE22tUdAtLc1WB3ra9GltM9pmzpo5c9asGTPbL730a7/73W/379+vDmNXV9dVV62sq6vZu2/vnj175HADxyI9PW3jxo3WM2rHi8+ff+HSsPDQsWPHhAQHR0dHqz+AxlD1bt0VaLMFbfQcM6xRr0YN2uxBmxVomQP9eQc6T+tAF+YXGEtBQX5h6aTspmWxc24IWXxX4Pk/8b/wJ0HLvhfRsSapsSPXWV1qfGbA3YGuVEt5RaV0oKvMUdBVNVU1dcYLR/0l6R4F3ej+CMGUKZOnmR3oGe0z1MvH7EDP65w/v7Ozc8aMtoqKigkTInx8vRtb6h75k1FIPXDgwI9+9CP1EOS4ACfGQw89pJ5vX71oubePd0ioMfXZaDl/Llj+p7oQalwOHh8SNC54XEDw2NHeyXmBM64bP/cHIy/5w3mrtp+9/uVxd7wVdeObI3+3t+GVj37y4HszNrzltf51z2v/Oearv/KZWD0+ODQsJjYmzuwMJySqxX0CNdvQ8UkRYXE5jf43/DNozZM+6UXqDiMjzXHvyUkpiQlJY0cGGAXo3aPm3TxuwoTI2NhY6ysW1K35egeM9jvvonvGPfpp3bINmXEJCcYfBvU3IdNYjAp0dw06LdWRlpAZFhQZOGFU9RXDFt3ncdljZ63dMeZ7byXf/tb4W7q8//Kfy1/8cMNP30nZ8NbwG98Yc+0LgZdtmVA9NyokJGxCRHi01YGOjlH3rt4tGCOhrWnQJnlfoB5QclJwcHBV9aSPD3z0wgsvyLE+jVGABoCBJ/VnCtAAAAAAAAAAAAAABhcF6C/Wizt2uFyukpJidWwjIyOv+/Z17//nP2rNO++8vX79+sKCgqioqLj4uCS9Bt09/lnrQHcvifGJSWaFKzkhKTlRlhSpQZsdaGMxO9DmNOiUtOSE9PSJybULI1bc7//d18d+6/nhs24c7qjwGzPSd+Qwr1Ejx5x77nnVF/idf9/YqqvOLrrwnNYbvjLj9q/UfNOj/mqP1X8KXfXz3Pj0yMCA8Z4jRp1xxlm+0We2rBp1+86E3x7I//4/c5be5Chvys6eWJCXW2CNti00pkHLUlxaZC7FJWXFpc4SY7ptealZ6zQLnZMqJpnToI0mdI3RhK6tq6mrrzVGQTc1Njc3TZ7cOmXqFKV1cuv8BfPvvvsHe/bsUYdu//796nJNTU1gYGBsXMz/Z+894KOo08f/+38hZXubna2zbbb3kmwqCZBCQknovffepffeA6GGLoJUEQQRFEVFpYiCSpPeA9j73Xln/p/PzCQkoJ7ccfi7V543T2ZnZyc7s89+nvnkpe999v59tBkEaODxsFgsEydOLC0txcX4+f258+egOlKSSj2ldzgdqNYikUgCA/4sAQ78cYIoCixAR5OSOQeaafKazDSCTklLww401wQ6Pb0W40Bn4C7QGZm1MzPrsH2gM+vUzmrYOqXLXMuQF1Xj31bM/Eg1/7xm/nndnE+Ms455pr6SNGBBdqNWeXlcsbAadH6FA42bQDdq2AiBqqZxQRNcNU2aNWvarBnnQLfk2qizfaA7MA50527du/Xo2aN37159+/Xt3ad3+w7t62Zlmcwms8U4aEj/S1cvoDzcv39/xowZdrudyxEAPGkOHNiPRtroMaNUKhX2nB/Yz2Zz1UBbTAazyYiXOi0lkypCGfr2s6kuqyXD9/MnHIud8Qlv3kV+8TXx6lLjc/d8y24rF9+ULLwqnXlGOmQXkdrQaDLRDrcdTa9eLzONYgeaM6EDgaDXHXJ4LYOe16+8r2s5TkebHXaH3e32hMPhUCgS8GMBOrUt7gDda7nBZnN6PF78EaNwQiQccdjtEiERrC/YciO682aD7Fbo6cPogoAvDsncxQFFYkJSYjg5HEjU64xaWtxwnKjX9tiRb8ZO+ZA3+zxv4TXR0luy9Xft6+9Zl96WLL0lXXRVMfOUdsQuc8OuTrPFarVZnU4H0wMaO9AIr5cxob2cCc38oYA1aPQngcloKmxc8Ne//XT69Gku19UYEKABAACePpz+DAI0AAAAAAAAAAAAAAAAAAAAAAAAAAB/LiBAP1nOnTtbVlbWqlVLqVQqFovj4uPT0lI3b37+l19+QdvPnz83ZsyYaFLU6XTi9pS4QSVWoDlYAZpZqSpAM1HhQJcL0A8c6MRIJCES8mP/Ob+ja/AmqviKaslN2eBt0owWKpvdajN7zEYrSWhUCipaj1p40jvjmNaZwde5eZ2WCQftlARypYZA/OwDgQ/+3rvb1BSP14fOUK+nhAKZQCR0pAt6r9BuuR09+PecVSdr95yZml2QXiu9Tmbt2nUYB7pCg2a7QZc70Nm5+Tn18nPz6ufm18/Lx05n/QYNWaezYaOChrgbdOPCps2aYAe6ZYtWrVs2bda0Xft28+fPO3cee+SI1157tUOHDlg3C4c9Hk9ScvTeZ3dBgAb+OCRJdunS5eTJk2g4/VL2y+Ytm9AQVZJKrVZrtVq9Xm8YVRIHWgknJERwJDLdX39Dg2Yc6GSmDzSrQaemYQ0am9BYg2b7QNfOyKyTmZFep1nb7P4rncP2qqa8Tyy8TC67rSopVa0sVZXc0S67QS+/kLLm04Zj1jau36QeKhZcLw+6QeOSKa+a+qhqGqKqadyocWPsQDMadDO2FXTL8lbQ7dq17dARt1Hv3KVz125de/To3otxoPsP7N+rT+82bdqic9TqNL6AZ17RnG+++wrl5PTp07169VSr1Vy+AODJsW/fy2iMjZ8wlhOgy3mgPrOgFRMjQJvMRsqsUWmlErndr+kww9K6SNxvh3DkGzUnHY+b9Ylg3qeiBZeF86/wF14Rzb8knn1ONOkDcc+1ilAto8lssTmsPr/Hh/D6/AEfK0Az82nQanbX66FdelM/9iDpi9JW2u50OdBj4TDzASMfI0C34S+5I++1grLZHG63B0+szCUBPQGlN0pkwq4Lybf/mT9hW1og4kMXiGhyFF0Z8DIFrySEkqKRZJ87qNdRCpUoZ7C4y4b4wa/Ejn03dtop3tzzoqLLkoXXhAuvC4uvSYouieeck098RzX4eXNmocNsRlcjq81uc7m4JtDoBCo70LghNHagfViADgaNRkOTZoV/+/tfP/roIy7X1RgQoAEAAJ4+nP4MAjQAAAAAAAAAAAAAAAAAAAAAAAAAAH8uIEA/Wc6dxQJ0x44d1Gq12WzWaNQ8Pl8g4Ddt2uTw4bfRQ4i33nqze/fufp/P4/GwX9PPqc+VBGgUrAAdCKGocKAfbgKNIxwKBiKhYLhuM3fv5ab5Z7XL7ypGH5Dk9iRsDpOFcjrsbo/XEwoGPa6gxWLuV2J77gtn+5lyMZ/gi2L7bRBMe49wJ6r+8pf4uj2E73zXbPu51pmFAZ8nGAyGvD4fTdsJuUaiEIYbCUe/YN77deZrP9RfdLh2xzGpdfMyaqVjC5rRoOtksRp0ThYK1oHOyUORk5vHaND59fLYVtCM0NmwYYNGBbgPdJOmjVFysAndtPHIUSMPv3OYzdJHH388dOgQlBy3xx2JRJKTkz0ed0Zmxv3PoQM08EepW7fOiy++yH784PA7b7fr0FZP6UkVabaY3W43Kr4wByqlMBu47WtlBzrKONBJVR1org800wqaFaDTUhkBOo0RoNMzMmpl1M5IS87MTK3Te05k+F79pCPk/AuKJTelJaWy1aWK1aWyVaWylXfJkjvOdTfqlZwqaDMwO7tebr08zoEu16BRyWAHGgXTQJ355EDjRo1RxTRp3KRpk6bNmrI91PFHCFq1at26Vbt2bdq3b9+hY4dOnTp17doVXWp69uzZu0/v/gP6Dxg0sGevXs2bN49Ewlqtpk5WxradW9hy27t3b25uLpc1AHhC7NnzEhpdkyZPREXHqc8PMJmYwO4z+jHiQKuUzqhSquQyglQrmgyxNpsu67JKPODF2BFv1Jh4NHbqSd7MTwSzzghmnhFM/5g/5RR/wjFp+7kk7TAbDWbaZnF7Xf4A9oURgSDWoNFs6rL7vYmm0ft1y26r8nvpzQa7zWHz4kmO+S4Gf8jvDxJSXUpr/pI7sp7L9Xa7w+Py4AsCvjagmwSn0yWXkHQif/nHvn1f1W/Ux+/1BNFlgbs+JCcmRBITwtFoYpLH4dNpDHyeuFZnace1/D47aw49UGPsuzFTPoifeVow55wQxeyzwhkfCyYflw7bo+xeRAcSbRYTbbWisDocDnRpKgc70BgvDlaDxn8gBAMGA9W8ZdOf//H3Dz/8kMt1NQZlCgRoAACApwynP4MADQAAAAAAAAAAAAAAAAAAAAAAAADAnwsI0E+WTz7+uKysrFPnTlqt1maz0bSFoiiSJGvWrEkQir79+ly48Cna4e9///vWrVsaNy50uV0erzvI9YHG/R0Z+xlrWz6f3+sJeNw4vJ6g3x98pA90MOgP+33h9Dxvp1n0rA/1JfeVk49IC0co3CGDUe+wmlxOh8vv84XD4WhCks8ZyWpvKrnimfshFU4zKYQGsSJu4FbB3I/USfVMQp5CpKo5cRf9cVmPUWtrB0KB5GhqWmqt5KTkYCBoMdFSESlXCzI6SeYccr3xU+6rXzecva9Oy4FpGXUzatXKrF0Xd4PGJnQ2jqyculnZ2IbOzsnJzsvhNOi8HFaDZrpB5zfADnTDho0aoPUePbvveGH79z98j5Jz9+7dWbNmJqckW2k6EAygk09ISExNTfH5vHXq1v7si/t37tzh0g0Av4Hb7S4qWvDll1+iEXXp8sWRo0bY7Da03Wg0OhwOVGyhUBBd8YJ4iQoqhKJCg8bNoDkN+kEf6HITOpqUjDXoij7QKakpjAbNtYLGGnQtrEGnJtVK8KanZXu6LNE9s181/ZRsyVVy/V3z6rvkqlLp2rvKTffMa+6SK0pVJTeCi09m9pydlJGVkZOdi8AaNBN5+bn5+bhe2AbqzIcHGjQsaFBQ2LCQaaDehNGgm3EadAvcCrp1qzZt27Rr365Dhw4dO3fs3LVzt27devTswbaCHjBoIIpu3bsXFBR43G6dXtu2fesjx95DWfr666+XLl2GMsMmEAD+c3bv3oWG1rRpUx8RoLH3zMGsGJn2zwhKbySVpFKpFArE4bq6FhN1TWeIuqwS9t0RM/RAjVFv1hz3buz4I3Hj3osbfThu2MGYMW/Jpr1vbDeN9iaaKZ3Z4XCimRNNFgg8jfrRmp+22JuM0qy4qx20ReX0oInF5nQ5mP7QaOoNBvxYlGYF6MV3pKwA7XZ70BUBgy8MEbQbOkl0SoUjZQd+qj3vjVqhFA/anhhNYCIxEmIc6EgSTXktNkPdLrJeG4XdNgrarozp/nzNQXtrjDhUc+y7sROPxk08FjfhSPyYtwVD9oh7r1PndaEtNIYRoGm73eZ2uxj7mb3lFGgEfkle3Aca/blAUfqWrVv8858/nzhxgst1NQalCQRoAACApwynP4MADQAAAAAAAAAAAAAAAAAAAAAAAADAnwsI0E+WU6dOlpWVde3aRaPR2BisVqvJZNLpdBKJtGbNmmaLeebMGV988QXa7f79+wsXLczIzHC6nNjC8mNbyx/weX0+j9sfSvSk57nqNndktbRlFDgS0z1+f9AfCoQi2IEOBII+Tygp09tqtHXK28aV97WzP5G3nSnzp+lMBpvV4nS6nW6PN+BF+yaEg4kBd9QXso/aaVv3maX1OMpu9OlVZpmKN/QlcdGn2oxCh0ZlEPJkiU1Ee0uzD5R2qN85FAklpaWmpSanpyWnJyUm+zw+SmMS8xVqK7/wGUXJqfC7Pxe8fLfxhM21C7um18rMqJVZu05W7bpZtevUrYN+shukN2ofbdE/oe2w5DbD0pv3zsxrnJWdk421Tqa1bYOG9XPzcpo1b7p06ZJbt26ihPz1r3/dsGFDTk42TdMulxP3oA6FEhIi0aSk1NQUj9dTN6vO519+duvWLS7dAPAIer1+4MCBFy9eRCPqu++/W7J0cTQpEW1HNWi327xeL+75yjR+xUsm0DArd6A5HjjQbB/ocgc6iqhwoFOScStotg90aiUBOj0tNSktKZjutHpTClWdlilGvCaeeor3wr30j78fvem+Z1Wp4tBX7S59t2zX5ynL70iW3NTPPxXst9SfWjeaWTszhyGX7QaNigVr0BUOdH6DBvUbIAoaNCp3oLlW0E2xA928RfMWLVq0atWydZvW7dq1xRp0xw6dunRCV6Tu3bv36tWzT98+/QcOGDR4cP8B/bt27Zybm2uxmK12esTo4bdLcQ1evXp1+PDhBoOBTSYA/Cfs2LEDDaqZs2aoqgrQbO/nCowGHGw7aANlJJUqpVIpk8qlMmFmK13BaGXjqeJ2iwU9NvD6bo8Z8FLNwS/HDtpXs9+umh1XxjSfwR+yV1ZyzzTnmLNwgM3ldTgdWBT2+DwePJf6HFZvqI5uyhH1ggtkZnOD2WCzoU0+TzAUYEBTb8jnrSxAUza7w+3xcNeCcDgUxA602+1WKtRqG2/a65YDP+a2Hx9E03QibhKPrg8JoWBC0B8NhxNz2tgGbyYWfCoYtDu24Th+vTFxzRfGdHk2ps+22IG70ZnHDHk5ftBLvD5bhJ1XyAuHUW6/xWSiaSsOVoB2uSoJ0MxquQHtwS8LnWvAj65ybdq1+qXsH8ePH+dyXY1BKQIBGgAA4CnD6c8gQAMAAAAAAAAAAAAAAAAAAAAAAAAA8OcCAvST5cSJE2VlZd27d2MFaCsDWqFp2mg0atQaoUhYo8b/JSUlPrdxQ1nZL2jn06dP9+zZw+f3+Xy4uaPH7Q1FAvU7ejvOsPTfoB2xhxx1QDl8F9lrhabpYEtqri+UEvSHA5Ekf2F/+9hXzCX39IuukN1XyBJz1UYDTZscDqfD43UFQn5scIYjQV9C0JPoMPsLB5nWf+Ga9IY2kOCwUl6DzkzqRcP2iBd8qqndxGm1OLVqSqoQ916q/bCs3eyX6oVTAklR7HamJKWmJqWnJqUlhBPdLg/aTSSUmsL8TnM0W6+kH/tHy51XmwxfWSe/VXp6rVoZGXXq5qU36evqtkg/bKdmwiHjjHdcs9+Jzn4ta9ymei175WRlZ+XWy2Hlzr79ep84cRwlAfHqa6+2btOatlisNqvX6w3gltfBSCSC1dNoNDk5ye12Zedkffn1Fzdu3ODSDQBVady48aFDh9gRtWfP7oaNGqjValSMNG1xu93+gB/7jkzXV3zLRSUNOlTJgUblw2jQXB/o8ibQWIMud6CTkpNTKmvQaamYpNTkhPSwP6rXUelt5J2Wi4a/yp/yYfzam4FXvmq95q7x+fvea99vu/D9xq2fhZbdERffIGedMvdd7kjPjiSnptTNqpOTk5OdnZOTm5NTLxeb0IwMnZefh03oBvn1mW7QDRrVb1TYoLCgUQGrQTdmNegmnAbdskVrthV0u3btO7Tv1Kljly6du3bt2qMHbgXdr1+/AQMHDhoyuH//fu3bt8vMzKAMVCQxvKxk6V//9iNK3eHDh5s1a8blFAD+XbZt24aG09x5c0jygQBdWX1mMVCsAI0wm4xmNalREkr0KyKhWE4KEwvJrH6y/JHixlOFLRfw2i2LbbcirvPa2D7bBI3HylVmgSFSs+Uc3qKLmvVfOMfu8uS09qB5ymlnpGGXl7bSHYtUJZ+pui1RYcWYtjLtn32BoN/vw1cEvz/g9fo5Afo27gDNCNDuUBhfFzBBtBZBtxYLLRRIa3UWvfhVUslHGck5br8/lBiNhAIJPldiRn1fz2Jq/lnp/IuCHquE/lyBSFkz2krYchG/2YLY5vPjWy+JbV8S3365sF2xqMUMWb0+Gk/EZDJa0NUJB+NA2+w2p8vpYsVndFPuQKPzYV4P7gON/lbQ6XTtO7ZFf0IcPXqUy3U1BqUHBGgAAICnDKc/gwANAAAAAAAAAAAAAAAAAAAAAAAAAMCfCwjQT5bjx4+VlZX16t2rsgDNgM0rs8VMURSpImNjY+N58Q0bNnjt4Gto/9NnP44khN0et9vljSQGuk4JjthlHXdIO/1Dct551aLL6kVXNPM/VU95TzvoWVuzgYkN+7iGbbWsuGVecU8zeJs8vYXSZDaa9Habze5yO/0BXzgSiiRG0HOGI5FQMOJ1hgMplmmH7avuGxv2M1hNHpfTQ1tsGqN02EuioguazMZ2l93ncDgVErU9jb/hbPTwtx1aDkkIeCPJSanJ0dSUaGpqcmpaclpKSmokHLE7HKRCK5aI3XUEg9eaXvm83ol/tN90uknv6XUatklvO8k0eJd88vsKdM6Lr+qXXTetuO5de73u5pstSj5o3rZfTp06dXJzs9NqpT6/fQN6+adOnRowcIDL5TQajS63y+P1+Py+YDCIJVT0IhJw/92kpKjD6cypl/31N19ev36dSzcAlBMIBFasWPH999+jEfXRRyd79elltphIUomKzul0+nw+tt3rA6po0A8E6Ad9oNFAZwToKg400wo6moT7QDMadFJySpVW0GyxJEVSPU6fWqVObSXtsEw0dJ9w4jHerLPComuSJbfEa+4a935RuPmz8PI7sqW3ZAuvktNOaLsvNKfWDkeTE9Mz0rJzsrIxbCtoHPXwZwbq5aGon4figQNd0KCAdaALmVbQTRrjVtDNcDfoFi2at2rdsk2b1m3btuFaQXfu3KVLl+7du/Xs2aN3n979+vcfNHjQ4MGD+vbt06p1q8SEBL1e16BR/v4D+1AOf/jhhzVr1kQiYS6/APD4bN78PBpLRQsXkCRpNpsrBGgj+oeDgxWgjeUb9FqDUqFUEkqESCgRSwWWsDhcKEnvIq4zUJj7jCBrMD97cNzMw+ZlhxtYvLoaNXhCRWyocUy/LeKVpcaV1719l/iS6njsZq+ZcqU21cw9o55xkkjMMZooq82O2z8HQr5AEF0V/FiA9gW8Hr9Cok1pVS5Ao5nU4w6hyRNdFTgHGl0YIl6vV0Vq5VrBsK261/5Rt8+iIJqu/O6EaFqw9Rh62jFiwQX+iJeFuX3kWpNMEC/l8fkdZhue2a/IGSqo1VOQNUxQb6QwZ4ikdlci2kBr92D72cLazzgwNtwB2uniwAJ0RT9oD+tAM02gtVptx87tUW7fe+89LtfVGJQcEKABAACeMpz+DAI0AAAAAAAAAAAAAAAAAAAAAAAAAAB/LiBAP1mOHDlSVlbWr19ftVrNic+VwRq01WQy6XQ6BaGIjY2VyqTNWzRt07aV2Wp22B1BX7j9yMgzL1rGv6Wfc1pdfI1YfltZcke58i5ZUqpeekM3/7R13nsJS875V32uH3tQkdODoO0Ggw49r83hsnt9btysMhJiAhuc+Lv7AxGHzdV2imn917YhW9Uev9Nuc3ncXrRUG6RDXxIvvMQJ0MFg0GymxWJJ8wny9/7eZMW79ZPq+BNCycnRlOSklNSUlNRUFKlpKWkpySnBYMhK2xRStUwpijYTTdnjOvxd04Nfthm32zt4t3TqSfnCq8RydOalxKq7xKpScvVdev2djE03m80/UNC4ZW7t2rUttDk1M9q5a4dgKEgZDHa7HdvPHo+fsZ8Z6QyDTVSmD7TNbquXn/vtd19fuXKFSzcAMPTp0+fixYuo9L7++qsFRfPRsFGpVAaDwelweH1epsernwWtl0c5rACNx9xvOtAJiYwCzdjPXBNoVoNm+kBzDnRqMlqNJqSkJKUmhJJstFMhJYO5sjZFkgEvCke9FT/lQ96cc4KFVyWLb0gW3xKhWHJTuuiqdN4FcuI76tYTjPgY0cSk1KTadTOzs7OzsrKz6mbjPtC5Obm5jAONW0HXw62g6+flsxp0w/oNsQbdqKCwUSHTCrpJk8qtoJu1bNWiFdMKum27tmwr6M6dO3ft2qV79+69evXq06/vgEEDBw8ZjKJnr56NGzf2eD0Wi3ngoH7Xr19F+bx27drgwYO4LAPAY7Jx43NoFBUvXqQkleUCNFacjQwVDrSBQmE0GtiNeLNWrSPkSoJxoGUyuVgkVShFKpOAcvONPpHaIFIa4/utIo//0nZQUV1CRQgEopiaPNIcV7dv/NjXiQ3fOIo/CrYc6vMkGvtsUC6/q2w1SWMyoonS4nQ5/AGfP+jzB3ArZTTd+NA1wutTSLXJ5QK0FX+UyBWMBINh/CEJ9srATkpWm1UkkAcaCNZd8268llG3tSu3vW30Hs2S2+KpHwhbTZUF0nU6jVEmIuNriJML1SVXbCP2yIx+gZTk6V0Ci19Ku1VWh9FssqCw0A+Cpi3ozwOHw8HJz5XgmkAjGAfa6/VqNOouXTui3B4+/A6X62oMSgwI0AAAAE8ZTn8GARoAAAAAAAAAAAAAAAAAAAAAAAAAgD8XEKCfLO+8805ZWdnAQQOqCtBcc0cWdqPJZNRTerVGLZNJFQq5RqujVJY23bImvxIdvlc7/UP1/EvS4pviFXdkq0rlJaXSFaXilXeVS2/oF1+yzP+YbjWFdCVqDVraYrbZnTaXx+UP+oNh3KbyQSCCEbctmFTPOO8ja/EVXe0WZqvJ7XK6Av6Q0+5WUdJhe8RFFzUZjdFzeCKRBJ/PRyq0Opdg/tuuoz+37TYj6g+EkpOSk5KSk5NTMKnsIjU1JS0pKSkQ8JuMFqlYSRj4eb2VU/a7Jx0lJ70vmXcBnbwEnfzqUvmqUsnKUtFKvGJcdTX12UuF45e0RidgsZh1eh1FUQ6ng/maf5fX68GKakVT3nINOhwOJyQkWG3W/Pp533//7aVLl7h0AwBBoGvXP//5T1R3N27caN6iOUmSRqPR4XB4vV5Occa+M+s/YxMa3WPvco8xsOMNwQ45RJjVoCsc6Io+0BUadNIDBzqJcaCTEpKTElGlpPqdCSa9nfaos3rKOiyT9NzCG7wvZszhmKkfxs86I5x3QbTgshjF/IuiWWeFM08rph4zDlhL12sbSIgmhMOJ6bXSsrLqMpGVnZWdnZOdnZudk5udm8s2hMYaNIr8/HqoIvIb5DfAGnQDrEEXNCpsjDXoxo0LmzRtXK5B41bQrVu3btOmNdcKulOnLp27dOvWrUfPHr379unXv//AQQNRGgcNGoQ25ufnG4yGaFLiByc/QFlFjBs3jss1ADwOGzasR+Nn2bKlSlJpMpnMGCw4V8A40Fh9riJAM+i0FKlUKxWkksChkCnlIqVUQMgEpIgnq/GXeE9uzMZLgQOlHdIbupUqFTqERKQQicSWxPgWMwQLzuvWlfpmHXEtua4f9YrSFUbHoW0O2utz+wNe7EBjAdrr86NJz4euFQQWoAWMAK2zoknV7ULzaTBUMRWx14Yw2lWn1QtEwrZziJe+zVh0Kjj7E9m8C4Ke6yWpTdRGNK1r8CukdCYNRYx50brilja/n0wYLxXGyeQiUiM3UGozbvyMdXBshFcI0OjvArvd7nzQ/pkB3WM2sP4zgukB7UV/OXTr0QXl9q233uZyXY1BaQEBGgAA4CnD6c8gQAMAAAAAAAAAAAAAAAAAAAAAAAAA8OcCAvST5a233iorKxs6dIharWZkZ7zAepOligNdgRX3hKYtZotBa6a0xrajfAO3UuPe1M34RPrsbdv+Lws23HOsuCN+7p7phc8T1tzVLi+VL7hIjnhJn17gpB342/ydboc34A2EAqytxQZrPwf8oYAnYnfaei6n1n9t7r5Ya7c5HTYshkbCCQ67m9TjDtBFF9WZje0OqycSxoqn1WoTCeV1uokPfJ29+VxBrQK0c2JySgp2oDkNGv3gG0aDTo1Gox63V0OYlGp5wWjp0P3x0z4WLL1u2PZZ4rq7+pV3JBvvWfd9WW/zPevKUmLlbWfxmeioDSneoN3pcGH1zI/Ci9tw+n2snFpupFZyoMMhdG4oUQ0a5v/w43effnqBSzcAEMTRo7jtOuLLL78cNWqU2+2y2WzsyOHGEgOjPzOUC9DMeCvnwXhjhhwCC9BcJ/VIAtsHutyBLhegsQOdXO5AJyVFI0nRhJTEUFo4Esjtoh/6AjH2bWGPTaLWi2O7bYgZtCdm1Js1JxyNm3qSN/1j/rSP+FM/4I8/Gj/ideH4t7RrbwdXnIv0KfbXLgxGoymZmXXq1q1TN6suAkvQOShYBzobO9B5uWzk5dfD3aAb5NVvmN+wQoMuRMFo0Gw36GZNm7do1qJli1atWrVu07ptuzbtO7THGnTnTmwr6J69cSvogQMHDhkyBE0Effv1bdu2zYiRI65eu8Im9syZM1yuAeBxWLt2DRo/JStXMAK0EevPZpPxgQBt4KxndKMvd6DLNWi0L7ql9Aa9ltJp9WhJ6YxoojToTFqtTiyUCsRx7eeK3/250bRt+Wa7yWQxGYwGFakR8eRSQujLi+u7Ubb+rn3HD6Hph3yJ2TaDwWyzO3wBT3mgmZAToD1ej0KiTWnNX1Iq7Vmis9psTrczGPIH8cTKXB3Q5QE70EG/P2Q2OrQmouV04cb7zh3fhMcfUuT2UVjdBi2Bzw2BZnWNypDfW7f6tmXoC0qbV69S6NH8TpvsdtpltznKPxvF/VWA7thsuPezswpYfWaXLKwAzTaBVqlVPXt3R7l989AhLtfVGJQVEKABAACeMpz+DAI0AAAAAAAAAAAAAAAAAAAAAAAAAAB/LiBAP1neeOONsrKyZ0YMV6vVFdIz1p8rKG/3WBHYCaMsOrXRbNN2nGHvsV4+5k3F1I/iX7yXfvaHWVs+S1p/z/Dxt1OvfL9py2cJS26LFl4lJ7ylb9DLYvNY3R4XljhDgUCQaZxcLkCjwMKWP+y0+jJb6xZfNs/6QBPNsVjN2KsKBoPhcILDhgXoIbuFRRfUGYU2dBcNgGhi1O/3a9WUXCsYuc1w5J/Nh69K8YcC2H5OSa4Cusua0MmpiYFUu8ljDytbzxcPPRA/+VT8c6WpJ78fufm+d/Vd1fFvxt/98bXXvqq3/I542W3t3I9to7b7UnPtNG3DNheD1+f1+r0+HD7WTH0gpzKvKxwOo0wVFDb86a8/nDt3jks3ABDEJ6c/QUX3008/oiXizTff7Nq1Kxo2bo8b1wIDNhgr9YGuaALNDLPKzv2DIuIc6AinQUceaNBsH+gHGnSU0aATI0lhL7qJ1u/kGbRRV3RRXvSpqGNxXEIzXtYgftM5cV3Wx/V7seaQV2JGHYoZ/Xbc6LdjR74ZN+Cl+A5L+Okd+K2nE6uu+Pf+lLrkw4Su08I5BekZ6XVqZ9ZBMA401qBZEzoHBW4IjVtBM92gc+thDbpe/QZ5DRrmN2jYAGvQjRoWYBOa06CbNmvSrHmTFi2at2zVsnXrVuWtoNt37NShS9fO3bp169W7d5++fXv37tW/f7/58+e9//77bDK/+/7bX3755ebNm1yuAeBxWLVqFRpFa9auVpJKIytA457PjPKMMRiYwKuUkarkQDONobFMbMYitBn9qtGAgvlltDSYtRqdMF5ORwXF71vf/r5to+4hvd6IJlv0K3q9Xi5RxdeU5vQVLDgnW3qZ2ng/UPJptMMkXyjV7XR4PD7OgfZ6PXjS8XnRHCTha6It+EvvSXqW6GibzeVzBhPKBWjm6oEuDh5XEF0y8rtYn3lRMe+8cPYn0s2fB8e/5LU4DDoS69omg8VK20yU3RpUTTlkmv8JmdVRi3tCG8wWk9VuczicDozdiYNZZ1zn3wIL0NiBZsHfk/BAgO7bvxfK7esHX+dyXY0BARoAAODpw+nPIEADAAAAAAAAAAAAAAAAAAAAAAAAAPDnAgL0k+XgwdfKyspGjRmlUquw7Vze/rkc5ivvMWYLjdfNuGul2UiZSULjDGrbzzB3WysfcVA8+YP4hRdVa257lt1W7vg8+coPzx35Zsyau6bFtyRFVxUT3yMLBulpG+3yuLAv7POzAvQDgxPd+IM+d8gVsAzZalj1ub7lOB1NO+x2h8fjwS5nMGK3uki9ZMhuUdFFVa0CG7obCocSExITIgl2u10iIoL1BVtvJu++U1Cvgz/giySlJCehfylJeIXtBo23JCeGUyK+JEprdKVJ2y0VDjkQN+n9+EWXqOdKIyvukM/es53+fvGpb6c9d59efkey5IZy9sfGkTsd2c1dZjNtd9o9jM6FFkw3TuyiMQ40o0FjUZU1z3BPa7PJ1LhJwV//9uPZs2e5dAMAQZw/f+6XX37p2q3LyJEjbt68iQrwb3/726ZNGwsKGjmdTjScuIpgYMcVhnWgmWAfKq8gVoAOoCHHBnagcXACdCSRaQVdtQ90JJwUDkbrFvp6LDbO/ECx5JbkmT3COh2lpFZaM6amOcLLfYbfcnFs2+WxndfG9dles8+O2F7bY/vuium0ilerDSlXyGJ5Me7suKFbdS98Gd3zba35byW1H5lct15memqdzMzadbLq1MUONNMNmtWgGQc6p15Obr0cxoHOzatfL79+vQYN8hs0rM9o0A0bFTTEDnRhAdMKGmvQ5a2gW2IHul3b9u3bd+zUsXOXzl26du3UpfOoUSNe3rf3hx9+QDm8d+/etGnTChs3+vKrL9A6l2sAeBxWrFiBxtL6Z9crlawAjf3nCgGatZ8R3F3WgWY0aLwNi85YdzZQJiMKdLcCoxnto1SoRUJJ/cGiV7+vU/JOoSNoRk9tNuNZVaM02oLEiL2yqUdF6Z1iG43hL/jEuOOH6IJ3k5v0C3oDXpfT7fV5cPjR9IMFaNqtyR8iXnRdNeh5KjnfEqnjSsjyh1J8gTCeXr3ugMcVyCxw9VtFFV2UzT4tbLeAFyqMGbdPt+3r1Eb9rXqt0WpD/xxWk1NN6ltN0q37wtBrJWmhTXo1NrZtVjs2ntnADjTWoJ2/7z/jRysJ0LgJNHag0XypUqn6D+yLcvvaawe5XFdjQIAGAAB4+nD6MwjQAAAAAAAAAAAAAAAAAAAAAAAAAAD8uYAA/WQ5cGB/WVnZuPFj1YwAXcl+xl4Whl3BJjTuamky4KB0RrmMcAQ0baaYOi2XDtkrGvdu7PSP4ud+yl90VbTitmbjvUDJHe3im5JF16RzPpWMeVPesL/ebKGtTiuWhr1+v9+HHehAuQmNfvwhq9ldv592+R3D2FdV/iSr1WJ3Op3osXAkHApE7LRLqZMM3iVccEGV3shqo13BUDABEU5E+1Bao0Qm6rKQPPzPBlNerBVM9CUkRKPJ0WhSNAn7zziiSUkJ4aTEULLfE1QqVY4UcatFgv4vxYx9J3baR7w5F/jF18XLbxMb7rnX3jUsvS1ZclO68DIx7X3dkM103SZOkwl/77/T5cQCNIIRob3eh0xoRlVFrycUNBqNTZs1/tvPfz19+jSXbgAgiPPnzpWV/VK3bh10QUPDaPGSYlbhvXPn9rx5c2vVSne5XGgUhSpr0OXtnys50OWBP0LAfIogHAiFg2yUO9ChSEIYB+dAYw06Ek4MBRMz8gMdZ1hmvK9edls+/pCwcLjC7tNJ+CShIIUCqckrHbCJ6rxGlDWE13BifOc1Ma0WxqOV3hulyz9Ibdo7bDTQarU6PlYgkNdMaSuYepDe8136ri9qT3kppUXf1IzMzFrpTCvo7Dp1s+rWxa2gsQydnZOVnYsiO6cejtx8rEHno6ifl98gvz6nQWMTuqCQ6wbdpGnjZs2a4lbQLVu0bt26Xbt2bdu2RSs9e/Zcu27t7du3Ud7+/ve/b9m6pUnTJgaDwe123b1XCgI08O+xbNkyNKI2bnoOC9BYT36k/XMFbB9odivFhRE3hGY6K2NzmusJzYJW9TpKzCc0VsG43dp3/9G884RkvQHtbTbqLVq1vuVkefF1aZuZorgYQRw/1pUV02O1dN0d1/av0sfvSKnb1O90e9Dk4w140/JcTUfoupfIn3lZNv+MfsYxw4jdhv5rbB2nh2u3CQWTfG63PyHd036qefZJctF10eAXRFldCTWl+MtfYhNbxG6455l/LOhNMtFmu8PhpNRWXwa58Ix51ikypYDSqfCpo/m1iv3MrmAHmu0GjTdh3fmhKIe1n1lwE2i3myTJQUMHoNweOHCAy3U1BgRoAACApw+nP4MADQAAAAAAAAAAAAAAAAAAAAAAAADAnwsI0E+Wl19+uaysbNLkiZwAXQ7nPVeA1k2M/WzC3+yvVevkckJnUrYZb2s9T9Jns/iZ12ImHI2d8bFg7nnR/EvC+Vf4RVeECy6L53wqmvqReMgeWe3WOrPFQtstbq/L7/d5vT4f60AzGrTfH3A5At4k47iDumW31fk9KbPRbnfYPB4PepcRQX+5AP2iCAvQBVYr7QyGgpGESDgUiYQjTqdTLiEtifxlp7yvftuoyYCA1xuKJmEBGkdyNCk5mpjACNDhJJfDoyRUBreo6UxRjy1xw/DJx834hD/vgnjhFfHC68JF10XF16QLLopnn1GMO6Tut4qO1rabTVbcMtNuc+OWlliAZm85B5rVoJlu0FiADgYNRkOzlk3//o+/f/TRR1y6AYAgzmEBuqx582ZSqVQoEsXz4mvXzty58wW0EXHq1MkhQ4ZEIhGny4UNaNwjHSvQHJUd6PKPEDACNBMVDnTkVxzocDgh6E9IyQy2HGmd+IZu+V1i9mlJu1myYBplNbtsFrdeYyAJrV5HdZ5pXXfX1XqWWGHgpbTljzggajJeprEK8gZIjvzUbvV7TZPrBlxOr4W2KORKXpxYRfMbDJUXn/Ac/HvW9ltZozekNeqYWiuzdkYG0woaB9MNOodxoLEGnY0iNy87Nz8nF7eCzs3H3aDz6z/UDbqgEeNAN2nWvFnzFi1atmqJVlq3aT1j5vSPPjrFpuutt97q2rUrShC6SqASTIwm3L13BwRo4N9jcXExGlRbtmxmBGjcw5m1nBFV7GcG7oGqMLYzI0CjqBCgy1dUpIYfJ0U1tb00sv1is3CGjdKZtEpTpB4x5ah08hGJL00tE5MioRSVlULPT+sQP/aAevu3kU03a/eZn5SU4a/X1td3vWHUG4ppJ6XzzsuXXCWWXNMUX9Mv/NRe/EnymG1167QMNuxDjz+oW3JLOvGIsOl4uTtRp1OZVUotnyfiS2v2e1a588eETjPsRspiNTu1ek2vlbqV97TtZqmw8G00WWhzFfsZ8eiKvWIPLqoK0A8caMZ/xgL00OGDUW5feWUfl+tqDEoICNAAAABPGU5/BgEaAAAAAAAAAAAAAAAAAAAAAAAAAIA/FxCgnywvvfRSWVnZtGlTVSpOgOaMZ0y5xYUW6I4Rh9lkNuhNKlKtJJRSqbR+d7r5NEXHpeJ+O+KHv1Zj/HuxUz7kzfiYP+uMAMX0T/hTT/EnnhD330IE0w2UzmKhzU633R/A/ZK9Xp8/iAMrw96A1eJoMUFbcl83YJPK4bZarTan28F6jcFAKOgP22inUisZvFO44AKZXkDbrVxzaEQknBAMBNFpCoWSRsNlB76vs+hwZqSWNxSKRJMSE6OJiUmJaCUSiiYmRCOhRDvtJGQauVrUaJysy3Px/XbXfOZgTXTyU0/y0GnPOSdEMRud/0fCiUdkQ3aSHaagk7HSFtpqRWF1Op2s1MWAHWiMFwerQWNPNRigKH2r1i3+8cs/PvzwQy7dAEAQ586eRUXXrl1btVqNCgq3UubFi0SiNm3aHD9+DD2E2L9/f9t27fCw8npxj2dsOv+mAB0IoeAc6AoBurIDjWok4IskJIcKetlH7qaW3lQvvCLrsUoazdOYKJvV7Ha53KgKQ8EwTbmT8qglZ31Fn+iCtRV/+YskUlBzwRlZ28kkr4ZMbqxR9Kbv1D979Z6disvXH0I16HS6tBqDWCQzBvjtZqmeu5J46O/5my5mD1ycltciPb1WZmZm7Tp1q2jQWYwGjftA5+HIzcupl5eTl18vLz+vfoP8+g3qN2hYv2HDBo1wK+iCxk2wA42WjRsXDh4y+LXXXv3nP/+JUnT+/LnRo0ehl4aKMBKJJCcne72e9Frp9+5DB2jg32RhUREaWtt3bFcqlQYDI0BzsjN78ytw4nNVmFkTLyo70KjYKYqSS0i5RtRnteLwLw2HrcjQqIyUWdNthaz4pqTJKKWK0Gs1ej1F6XR6mUQp4Et0Ll7BGMHCjyx7fsyY/mp00GbD2MPqmWcIVMJLbhArbitK7hAlpSj0JTdDS8+mT3ndX3RZOee8qPMySUKemtIbtWrcnRqdgkariY+VeLJ4yy9ZV1wIRXPNCqExrYVq+Q3juENEMIOitGiuN9lsVs5qfogHtjPX85lZwTcP48JRbkBjBxrlc8TIYSi3e/fu5XJdjUEJAQEaAADgKcPpzyBAAwAAAAAAAAAAAAAAAAAAAAAAVCv+P+B/B+49qwaAAP1k2bVrV1lZ2axZMx4RoLEIxcGsGJn2zwgDZSKVKqVSKRJKHCFV87GGJlPEHZcJe2+NHbKvxshDNce+Ezv+SNz49+LGvBP7zBsxz7wumvahvv96OjnPYjCYLBabz+9FwRjQXr8fC9B22puYq59+XDv/PFmrqZFt/+z1eYKhYADLn8GAP2RlBOhBO4XzGQHaZnX6A35WgA6HUESwZaVQq2n+lFctB/+a32lK0OP2J0YTcCQlJiQmhoOJiJA/0aBxuCO6wtGivttFHdfy2q+u2Xt7zSGv1Bj1JtagJx6LQzH+vfjRbwoHvijpsUKX2YQ2m2gEI0DTdocdHYsDy12sAY3Brwq/Ll8g4Nfr9W3atf6l7B8n3j/BpRsACOL0J5+gomvfob1Wq7XbbKjoKIpCBVWjRg21Wj38meE3b95AO3z33Xdr1qyul1fP6XJ6fd4gKgLsQOPPCzACNF5BxeN1Bzw4gmgXVCnBcJU+0GgZ8KL6COW0dQ181rT4qnbpbcWQF6S1WpG01WLWOW0WLCgGg8GEhMSEULLH5+q/2rrpW0fnuVpKTcfXkEebxRRflndfRGk0upr/x8voLHjz64IXL7Wp3cQfDiSmpaanpqQlRBKcDhep0IlFEmeGYOBaate9Wof/XrD6g5we09PrNkhPT8/MrF27dlYd3BA6GwdjQjM/OTnZ9XJy8nLLNejcvPJu0PUb1m9UgFtBo7sdO3fc8NyzX331FcoMWi5atDC9VjoqSXwRCIcTEhJSUlJQQjJrZ9z/7N6dO3e4XAPA4zB//jw0wF7ctbNcgP5t8bkcTnmuCjNxMlMnWq1woBk0Wq2QJ/Pm8Feed+y52yQxxxptKp17VjLqVZkjoFUROp1eh64JaGyj51GrNGKBQiQWuerEdyqST3hLN/pt2ZQP5PMuyhbfUi6/Tay8Iy8plTGhWFGqW3zFuuC8cciLsqxuBO2gtCoTpcPmNXpCm81O0xYlQfIEvDazpdt+DPZeYtPQ8md26pfeVBUMUxv05e2fHXZOdH4IdmN5sA50eTwCFqA5BxrNkUqCGDV2BMrt7t27uVxXY1BCQIAGAAB4ynD6MwjQAAAAAAAAAAAAAAAAAAAAAAAA1QpOrQX+F+Des2oACNBPlh07dpSVlc2dO+chARqbW2wwGA0mI4VusRZtMJhVSrVSqVTIFUKhIJqnKRipLpwkbrNQ1G0dr8+22P67awzeGzt4X82Be2p2fTam+Sxe9/XihVd1yy45u86xBVNtDhujCvs8Xp/X5/N53D6r3dJ1iWrlF6rORWqsGVutTrcDd7QNYtMzEAj6fSGrxaHUsQK0Mr0A7eREmxn9mSEYCQZDFgstFMhS2wp3fh5dd7Z2WgNPwBtiHWhEKJAQ9EWjqeHCgYaJb8jmnOV1WRObN5KfPzG2zbKYbhtj+u6IGfRSjSEvxwx5OX7gbl6vTaJOS4j8nkabA+UFnRcOLEDbbVh9ZnHhYO1nDG4C7fH5vOi8dXpd+45ty8r+efz4cS7dAEAQpz46iYquU6eOGo3GxoAGPKounU4nFotr1qzpcjkXLyn+8ccf0G5Xr12dMnVKUlLU5XaxArQPC9A+XD9uXyTFk9HAmdXCXreFrVZ9RyTJ6/cHA+EAVp9DuGp8vmBGI3ePYsuCM4aV91VjD8ry+hA2l9FscNhtDpfH5XX7gv5IJJgQCUbd1lBOR9OKa64ZR7XR2jYr5RbHK1Lbxi8rJfosRwVgk0tJhU4wZpv55D+7jF5fJ5wQSk1JTUtOS01OT0lODQXDVrNdIVaLFcKk5uJJL9kPfl/vze+bFL+Z0+6Z9No5Gem1MmvXrV0nC0Wd2rWzsvIy6rdOatY7oc3QpLbD01r0z6jfom52bjbbDTq/Pu4GXS8vt6Cw0ew5sy5cvICygXjhhRcaNmyALxEuZxARCkYSItGkaGpqitfrrV0n87PP79+6dYvLNQA8DnPmzEFjbM+e3YSSYOVm1nL+lzDacyVY65mdQCsEaLxiNhgNhJwUy0TNJ4v2fVd7+itpg3dJ5n0qqtdLScr16CKAdmDnYoTZgptGE3IVv6bMEhK2XiAYdoA35SSv5Lrtza87b74fWnZHtO2zhENfdd5437m8VFp8TTn2kDKvlxqrz3p8GugZrDYrmnRZKAMliJcagnGzjlMrLnr7rNcvu64bvF3hChspndlsMdnsv9H+GVHJfn4ofl2DruRAKwjF2AmjUW537drF5boag/5wAAEaAADgKcPpzyBAAwAAAAAAAAAAAAAAAAAAAAAAVCs4tRb4X4B7z6oBIEA/WbZu3VpWVragaAFJkmazGRtXrP1cFYMBO9AM6DGLVq1TEkolqZSIpSIJP5hN1O2tqPeMuGCSqPlcftulse1WxHVcHdtrS3zHYjkdESstNbMGxk0+Qmz4xjbvuKfFMHcg7HHYPG4XVoatJldGa/WCi5qpx5WROmaTwWp32Hx+TyCE5WdGgA74fUGrxc51gP5UmdaItlod/qAPjYFQMBTGS9wE2uvzalQ6mUowcKPm4D+yB5WEvX5PJBJJSIwE3IlBf6R+J9fwHeri6+JpJwQtpoiMQZ6ciskeJGq1OL7Z/LjmC+LRybcv4XVYJmyzUNRsijyrk87hQRmx0DRuyck60Ha7zeXmvtkfLXCDS2bV7eFMaNwE2ufT6rSdunRA6T169CiXbgAgiA8+OIFGRZcunVkBGvv+VitaQePLYDCo1Wq+QFAzpkadOpm7d+MG7Yh333mnVeuWHq+HEaC9bpc3MSVQ2Mvddb550Gb1yH3kqP3KoTvIrgt19bvZopmBYFLAHwymZHnbT7HOet+06gvtjBOKZmPk7rDeoENHdDhdDq/PE46EEhIi4WBC0JvgdyR6Q7bRu23Pfm1pMZqiKY/N4pKJVLU6CJbdJXovN6FqNRktUiEZzBfsulX7wN12DTqHQ4FoakpqSnJqajQtLSk9KSE54Aug3SQiJWEQ5PSWLT4SfPdvjQ9+2XLG7pxmvdNr1amVnl67dlZmw07+jrMMgzZrxh2kph22z34nMvuN2pNfqNfxmZzs3KwcrEHnoujUuePrrx9kk/Dekfe6duuKEoZqEKUCXRqCwSCq7sTExGg0mpychEqwbladL7787MaNG1yuAeBxmDlzBhpp+/a9rFQqKYoycgI0WqWYlUfhtrPa80OwE+aDBtDla3qdTixQmEK8SQeo/T/mr7xj6fOcxGTVqlU6vV7PTsQY5tZsoimNSSEl/dniNsXCoa8IJp7grbzmeO/bPpvuh9beNZ35buntH/bt+Dx5yW3xomvKSUdVLSdo0BmZzEarjcbqs93GCdBWO7rIkEp1fBw/d4Bgfan3+a9CMz5Q1u2o0evw2VmsFofTjgPDLivxiPdcOX67DzQnQE+cPA7ldufOnVyuqzHoSgUCNAAAwFOG059BgAYAAAAAAAAAAAAAAAAAAAAAAKhWcGot8L8A955VA0CAfrJs3vx8WVlZ8eJiUlVFgGYaWD4QtwwU0wSa3WDGrSWVCpIod6CFQoHRIwrkS1I7SGr3E+YM5+cME9TuGz9os+L5i/mZTd0xMYI4fpwlJab1PH7Ree36z50T9vjqtfU4bR6byevwGQZtJZffJZuN1RgNVqvN6nI7A0EfCj/ueOsPoH/eIG1mBOgXcAfotEYWK80I0OFQMIAt6BDueBsOhcI2m00sUnhzBGsv+7beqZ3dzu1yBIO+hMwG3t7LDfPPSWd/wuvzrDipUC4nZPExIpVJNGy7qfdmcWZvQWY/Qc4zgnojRNkDpZmdlJEcndWOhW8Ltp/LHWiattvtrNTFUEmAdrs9rAPNNIHWarVdu3VC6X333fe4dAMAQRw/fhyNiu49ulUWoBmwXo8KkKL0qLJqxsQIRcK27docO34U7b//1VdYa9nl9KTWDvZZGBi5xzzhsGbGR+SCC+riK5qFlzVzz6rHv6HrvdjTsFuk+Uj7pDcsa740Fl0kOy6QBWppDHraYrTbHQ63xxUI+iMJ4UhiBC3D4UgokOCw+AoGGdd/4Rj/mjYQtdst6EBupVzHCNCKPiVGt8vrdnkMerNEJu5RrP6grM2sl3LCSYHEcEpyUmpyYmpKUmpqclpqSlo0Mer1evVao1go17v5LSeQG8+nnvil7cu3W41Zm1PYPrP5EFffTYoJ78rmnFMVX9UtvW5ccd25+nr6phvN1p9r1XNCvTp169TLy01JS5m/eDZ67ZcuXRw7djS6GBgMBid6/bi+fMFgEJ86egUJCYmJiUlJUfRQVnbdr7764vr161yuAeBxmDZtGhpvBw7sJx8RoBHMegXs3QoBmo0qMPMl40BXzKXMCtqRVKoFPHFOH9HW+4F1N33prdRKQqfX4/bPZtz3mXOgzSaLiaIpnUkiliW1ELVdKhr8snD8Ef7M0+KFV8niG5L1dx0ffDvp9a86lJSqltyUFl0mJr9PtJ+rttjxJ5Zsdiu2n62MA42vNejWjk5MxJeT5rgJr+m2fOvts0aLdqYofJ52u40RoG2M/VxVgGZF5woqqc8V8St9oBkBGi0VCsWUaRNRbrdv387luhqD/lQAARoAAOApw+nPIEADAAAAAAAAAAAAAAAAAAAAAABUKzi1FvhfgHvPqgEgQD9ZNm58rqysbNnypSRJmswmRoBmDK1y8B2mA7SB4vwudBfto9PolXLGgVYqFXKFWCSVKcSkQahz8o0+oc4qlip59YcID/1Qf9mhZmaXTiSWxNbki+Xx4cL4Ps+JV94xr73jH1gSCKXa8weSxddwC1tPxGw20zaH1evz+IM+f8Dn8/s4vH6a6QA98IEAbfcFvaFIkIWRoBFhtK9eR4mkwrZzZS//NX3CrsRoHWebcZYZ7xOLb4ue2S/K6004fAYVQUkECn68qM0E45rb5g5FYoWOT1A8g0do8ctol9ZqQ1lgPDT6QdC0xWq1Yq3rESocaLYPtNfr0WjU3Xt0Qek9fPgwl24AIIgjR46gUdG7dy+1Ws36z6xYz2Gl0QY0+HQ6rVwuq1mzJtqtfYe2hU0aGU1Gp8MVjUa6zwyN2Gua9K5u3jnV4uvE8jvKlXdRqEruqIuvUvNOOee/F11x3bHstqbvBnlyIxWqX5MBa5BOj8MX8IYjISbCKELhMPrxucLBNPO0t20lpYYGvQxWs9vldKOiUymo9Pb8ZXeJPivRod1+X9Dj9ShkaluKYO3pyNvftWsxOBLwR5ITU5KjKYjUVBSpaehfSmpCJAE9iZrUi8VSeyq/9zLD3jv1jvy1w/w30wZuIyYeky64RCy7rSwpJVbdJVaVKlffNawrTd50s8myo4Wtu+fVqZPlcNqDib4u3TsmJUcpirLZcOd1VFzoslCp5PErYPtA2x32nNzsr7/56sqVK1yuAeBxmDxpEqrNgwdfI0lWgMbuc4UAjWBsZ7yFDYoJZh1T7kCzK3idnUARVRxog1mj1sukRMMRotU3NS9/l9l2TFCl1uoNejNttuAPQTCYLHgOMuCvXBAKxIlNRS0XCPtu5488FDfpRNysM7z5F0XF16QrbqmX3pIX3xAXXZHOPicf+4687UyVxYaPTlstuPczqnyaEaARVhu6xMglakeKZMYxzeZvbJNfc7pCBr3eSNtoVEGM/VwhQFfEH6CKCf0ANDmipVwhnz5zKsrt1q1buVxXY9CfCSBAAwAAPGU4/RkEaAAAAAAAAAAAAAAAAAAAAAAAgGoFp9YC/wtw71k1AAToJ8uzz64vKysrWVlCqkgTNpuxdVXJfzYyuhZeqRCgEYzGZaL0lIrUKBWkksBByEm5WCkVEDIBKeYTNf8iIK0x016ljv+zQ8fRqaRaTaqVMgkh5EvVZn6dXvHj3lQ++5mr6KRv3iemootk3Y5aSmelbbTL7fAHvEz4fH6vlxWgfX7aYisXoIm0RhaaFaDDwWAoGAiwEjTzEwo57HapiNR5ebPetb74RZ0ZR8xFl0RTTwhaTZP503WU1kTpzGaLmVToPWlk8Wn7nJPKcI6cV1Mq4skVErVGYTJoLGaj2WJh44EAbbViRazia/050D1mA+s/I3ATaI9XrVH36t0Dpfett97i0g0ABPHOO++gUdGvf1+1Wo31Z06A5vqLs+CNFovRZNTr9Sq1SiqVEIRCq9WZtfbeY3MnvOIfdUAz82PlgiuSxbfEK+7IVpXKS0olKFaWqhdfpZZcsU5+y5jTk7Q4KYMWd1V3OO0erzsQCqCSYSLERjAYDgUidqur9STDuq/pQZs1Lo/DYXd53N5QMEzKqfT2gmX3iN4lWID2eQORhIjFTIvE0iZj5If/WrD83fxoHX9iQlIyIiklGUvQTGAZOg3dD4fDNpuDkGkkClG4gXjU846pR6kJR8VzzkoX3ZAsvyNFZ76qVLqyVLSyFK3rVt1IXHelwdxt7ZKSklHJ6SmUAB0qOrcHFZbL4/X4/f5AEBU8W/OcBo2OkpCQYLXZcvNyvv3um0uXLnG5BoDHYcKECag2Dx16gyRJrDszAvTDlHvPFVEhQKP9UVQWoJnp0li5CTRaMRrMasLoy1CMfQMVgmjTHc+z53OCGRadnrKwAjT+6I3ZZGA6QKOdVWoBX+zOFDaeIey6nj9oT8zot2tOPhE/47RgznnhvIuCeReF8y6IZp0VTj0pGb5f1mgoQZkoo9lgtphsDtz2Gc2sWIPGn7ew0Sa7SqvusoRceEk2+xSx/r67zSQzpTPi7tAOHIwAjR1o7EM/lgZdpRU0B54hGQF69twZKLebN2/mcl2NQdcyEKABAACeMpz+DAI0AAAAAAAAAAAAAAAAAAAAAABAtYJTa4H/Bbj3rBoAAvSTZe3aNWVlZWvWriZVpNFkxPqz2YRWynlgcRn05Q40swGbXGZsdlF6g15L6bR6tKS0RkprNuhMeh0llylia/LSO8Xt+Sx169lWoQwbhX7RZNJotFKxUiQUm0LxTScLFp0zbv8+sPZGqPFApwmbX1aPz+0Penx+jz+All4Ea0CzAvSgF4ULLhJpBYwAHfAEwwEcoQDjQKMV/ONxBbRqoytNOuoV+e4fEtaW2ns/K0lurDIYjFql2WjAnrfFbNNS2j7LTavvUu1mkTodpSEpg95kNTtstNNusz+kpaK7NrsNK15VYL7dv1yARjD+M9cEWqVW9e3XG+t0bxzi0g0ABPHWW2+hUTFo0AC1Wo27PTMDDRv2lioOdAV4JFppi9miV5ltNnO3md5BO3QT39XOPivdei/88pcN1tylSkolW+67tn0WXHlXueyOYvZpstdykz/FSTtou8Pq8jj9QV+Q+bRARTD2MyqYsMsWjOYa55y0LLqkzWxuok1YWAz4g+EQFqDT2guW3VWwArTX448mRn1eH0noNA7BnDcd7/2tVddpiYFAKDklJSk5OQmL0IwGzbnQuCU02hTwB0w6m0RIpLeV9XuBP+kDXtEV5eZ7kefuWVfekay7q3v5y5wdn/lXlspX3rEu+TRh6p7UaIbLbnWiwsf17/f6/bgfvB89EQ6Gyg50OBQJR6xWS379et99/+2FCxe4XAPA44D+wEC1+fbht1Bt6vV6A27yXBk9d1tVgK4IrEBzc2TlYB1obtpESzRLanWa9vMkc88KGk+M77hYtOfH9CErkymjgVWf8UyIpin8IRyLgTLJpaSAJ/FkSNsukndczeuxKWbgnpojD9UYfyR2ygnetJO8aad4Uz/kTTweP+GYZOwhfauxVtpl0aE520LRNqYJtI1xoDF2DWlKbkosOEf238zP6BlXdE5f9IkzUtdoMljtaE87jiomNO4J/e+Y0OwciWdIp1Mul81bMAfldtOmjVyuqzHobwQQoAEAAJ4ynP4MAjQAAAAAAAAAAAAAAAAAAAAAAEC1glNrgf8FuPesGgAC9JNl9apVZWVlzz67/oEAjV0trDgj2H6WTEtLfIdiHejyVtBoP9aCZqRps5HCbjH+Zbw06/WUVEQQOuHAZ5VH/9ls2NK6BpPRQmO9y0AZSELD+z+FLSocd0i89LJ6zU3XpvtJozaHMgvdLtzrtVyA9nmwAO33+rw+k9EqI8SDdgmKLitTG1loq80fwQJ0IIQdaOxDBgMBf9DtCEZr+dpM0k89Ip1zTrDovG7LZ9FWY2k1YTJQ+NzMRtpmdejUlrTm6qUXzGMPKMKZBkqDXoKFNjOSs5NRuOxOHI98of8jVBGgXej0KwnQAwb1Q+k9ePAgl24AIIhDb7yBRsXQoUOwAF0O1p9ZytuNVw6TyWKiLBol5YlQ3YroXhvl49+RzTzDf+PL5qe+n7zuHr3ts8Dl71Z//N2CNfcMS25L5l9QD9thTGlA25xWVEEBVBohbAxjabiSA422+r1hu8PWbbF+3TembsVam92BSsDjcYdDEbYDdFo7/tJSee8VRofDhWoxMSExIZJgs9pEAkVmZ9H+b+puPNsgrYEvHIomp2D5mWkFzSzZu4wJHQ2nee0hg0VTf7h0wG7+hONxS69aT3w/fM8XdVeUSg9+1enuj28c+6bbqlLp8tuq+Wfpia/4sls6LRYrKiimn7oHXQK86DqAw+dnqWxCo3MNh1HyGjTK/+Gn78+dO8flGgAeh9GjRqHafOedwxqNBgvQTAdofYX3TKFp7fccaLYVdLn3XBGMAF3xsSLKqFIYkhorZpwUPrNPSBoExoSYuR9Q2+9lZzS3abUGM9MBGn8fA/NRHbSzwaJqPMQ45oB+wE5p07nxLRbEdV3H77czdsi+ms+8XnPUmzGj3ood+QZvyCvxfXfwJryt23OvyaydBRlNvJTZYKJNdpfV5sC9n1HZmo02PU0O3UkuuCDL6CSK4cW0nCnY+J2951J0kTHjfSoJ0JwDzQnQj2rQKH6DRwRomVxWtGg+yu3Gjc9xua7GgAANAADw9OH0ZxCgAQAAAAAAAAAAAAAAAAAAAAAAqhWcWgv8L8C9Z9UAEKCfLCtWLMdO0qaNJMkK0GyHSs7U4gRobHQxd1kHmtGgmW7QJpMBK8UGinOLWSUag5/CpFZphfEyf65g3XnvgfttMpt59DrGgTZZDDqLWq1uNU06/7yk2dS4lA6xI18mnv/av/5Gap+FkaTaPqfD4/F6vD6Px+fx+bwet8/ppT3pkuEvy+Z/qi0YYIzUsSZkeSOZ/mCCPxDy+wIBtzMYDPsK+1nHv6ouvi4Ze0iQ3T8uo3vc2hvexScTg7VMBj0WnG2000w5DLRq1G7jitvawqEavRp3rTYbLXY7Z25xMA70v/Cf8aOVBGjcBBo70B6PW6VSDR4yEKX3tdde49INAARx8OBBNCqeGTFcpVahcsD2M826zyy47SsDbgSLb4wWk8GMRq9SoQpnUp3mG3s+Jxv9pnDqSd7iK4Y1d1xLbste/arZtR+2vfZlp+V3yMU3pfMuEs/sVacVGM20FdWRj3GGA0EU+HMC5fZzMOAPOay+Ws11iy6aZp5QR7PQAfGYRo+EQ5FgIKSU6bEAfVfea4XBbnd6vd6EhITEhET0bBqVXqEVjthqePefTQYvT0EFGI0mJSUnJafgwAp0uQadmJCcGEixmpyUXV4wQdT/pfhxR+LmnCPW3wmvvmMsKVUd+2b8+e+Xb/8ssvyOeMktYt5Zatwr9oKeLosFt6RFBYUNaDf+LAT+JAQKths0A6dAoxcUDpnN5kYFDX/86w9nz57lcg0Aj8OIEc+g2jxy5D29XqfTadHcp6f0CKb3M15h4Rxoll/RoCvbzwajCQUzq6JJ0mDUqU1o9um9Xjz/ojCnpzyuhiSOF9dgFG/Hd+HJL6Wa7WhmNZlR0VNmvRZfAbLb0eP22kpuGce8IckewEvvJqg3RtB4prDdUkG3dfG9tsT03R7X5wVery38TquEDcfx8gYLZ7xmf/fnZq/e7TqkODuc6bLYaKudcaAtdhVB5fZVLL6m7Pe83ORS/t9f+JSvxtSjqhXX7bWaosmdxu2imcD2s7M8OA26clTWoFH8GhVzp8Mpk8mKlyxEuX322fVcrqsxIEADAAA8fTj9GQRoAAAAAAAAAAAAAAAAAAAAAACAagWn1v6XadKkSRnDsGHDuE3A48O9Z9UAEKCfLMuWLkXVt2XrZixAY/GKUZc5sPr8AOxysZs5Abq8GzQWu9hG0A8EaAaKMsilpFgqbjNd8tbP9WbvzrO40O+bTAaLhjAlNyZmfiQbe1Cktwn/7y/xakdMw1H8OR8Ydv4YXXayVpsR4UCix2HHvZTDyd56nS3t55L9NkmmHCEXnDaOP0gN2WLqtcTTeGhCtJ7fF/B7vf66LZxDntcXX5PP/FjYcaE0lK3k88U1Y/+v6zLZrr8m9lriMJnNNpvDbnOqCUP9/po1943DXlS6Qka9Bp+83W7j7GdWgGaXnN/lZBQvRnd+KFgqG9DYgcaglA57ZghK74EDB7h0AwBBHDiwH42K0WNGqVQq7Dk/sJ9x59fKgbaYDLi9OlrqtJRMqghl6NvPprqslgzfz59wLHbGJ7x5F/nF18SrS43P3fMtu61cfFOy8Kp05hnpkF1EakNUbLTDbff5cf9k3DIZO9CcCR0IBL3ukMNrGfS8fuV9XctxOtqMhrnd7faEw+FQKBLwYwE6tS3uAN1rucFmc3o83khCJBJOiIQjDrtdIiSC9QVbbkR33myQ3Qo9fTgpOSmK/iWjwDI0isSEpMRwMipmvc6opcUNx4l6bY8d+WbslA95s8/zFl4TLb0lW3/Xvv6edeltydJb0kVXFTNPaUfsMjfs6jRbrFabFZUZ0wMaO9AIr5cxob2cCV2hQQdDQXT9KWxc8Ne//XT69Gku1wDwOAwdiq/Yx44foyhKq30gQGOY9s8cD3pCl1NVgGamy8oCNOdAGyiTitDX7SqbfU44YLPUaNWioo6PFVB+3uhXyJ3fZjbs48SH1Zv1alM0yzpgpXvFNXvxFVXX5WJfXXFcfBxhqpnUVpg9TFxvtKhwKq/1opjWi+JbLBA2myNqMELqqSXh8Xgad81WUyRbrkQ/LOuy7XSnDqMyPQkOC00b9BZLQDHxsHLmKVmd9lo1SUkkspo14/KG8Nd8YR6+3ULbTTTNCNBME+gqAvSvBDc7MvFrlM+RaFUmky5dsRjldu3atVyuqzEgQAMAADx9OP0ZBGgAAAAAAAAAAAAAAAAAAAAAAIBqBafW/gd07Njx1KlTZeX8/PPPr7/+el5eHvcwAwjQTwTuPasGgAD9ZFlcXIyqb8eO7YwAbTA9+J5+7DnjqAT3QFVY15kToCso36zV6kTxcnNEMPcd09s/tWzSJ6zVGiitxWTX9NkgXXhN0mAgoZCqpRK5IE4iEoucmfGdFktW33Du+r7WzP3p9doGkzICHafbh+5VTTgmm3VatvCSYsk1cvF1bfFl46IzgaLjmR0mpqcXOLvON80/RxZdFQ/cIardQWmmDRrSpFCQNf4vnk6OXXTasu5mQq2mZqPeatLbbCFy+hHDwguq7M46vdaMzpy20g/bz+wKomLFzm59EFUF6AcOdIUAPWLUcJTeffv2cekGAILYt+9lNCrGTxjLCdDlPFCfWdAKGpoGXFpGyqxRaVGZ2P2aDjMsrYvE/XYIR75Rc9LxuFmfCOZ9KlpwWTj/Cn/hFdH8S+LZ50STPhD3XKsI1cK9ZG0Oq8/v8SG8Pn/AxwrQWIYOBK1md70e2qU39WMPkr4oKgK70+VAj4XDoWAwHPAxAnQb/pI78l4rKJvN4XZ7IomRSBg70OgJKL1RIhN2XUi+/c/8CdvSAhFfQkJiNDkaTYriZQpeSQglRSPJPndQr6MUKlHOYHGXDfGDX4kd+27stFO8uedFRZclC68JF14XFl+TFF0Szzknn/iOavDz5sxCh9lsRdjsNlRTrACNW6tXcqBxQ2jsQPvYJtDootWkWeHf/v7Xjz76iMs1ADwOgwcNRrV54sT7aCLUaqoK0A/xkANdSYCu4kCbKjnQRpNOZbQFlMN24yJNa04qZVq1Wq1QKIVCca3u/LW3XQuPptgDRrvX1H6Ca9HH7hU3qREvy+p2lSs1Ul6sWMATxcTESZRxzgxhtLU4e5Cw1YL4wimCzJ7S5KZKZ1irJrVyqSI+RsgTxrlzYoc+p3n1i3of/L33kldb57dLVGm0zSZLF99UdFpM0HYjpTNptBqhQEqa40bsk6++Z83vhTbS+HsSUDgqCdD/ngbNzJNoekSrMplsxcplKLerV6/mcl2NAQEaAADg6cPpzyBAAwAAAAAAAAAAAAAAAAAAAAAAVCs4tfbfwu/3nz59uuw32L9/P7ffnyFAC4XC+/fvoyMePnyY2/S/D/eeVQNAgH6yLCwqQrXw4q4XSZI0GFgBGrtbD6nPleHE56pg2fmhJtDMCnqIVKqFAknOAMHer9JWv9/IGaRJhT67l3zBZemQnTKLQ6smOaMM78mTyUhBYvP44TuV27+JrL+UOXiDY8R+7eQTqnmX5MXX5MtvESV3FCV3iJJSsuSOfeW1lHlHUqa9Z1lyRzrmTVGjZ+TOoF6rMlE6IzoB9FoIQhnP4zceJ976XWDUDjdts5AKbftZutWf6buvUNIOE3rRFovZ7rBzVvNDsBuZYHxnTnlG9x/GVakPtBsvlErl6DEjUXr37NnDpRsACGLPnpfQqJg0eSKpIjn1+QFcHWH3Gf0YcaBVNJ5VSpVcRpBqRZMh1mbTZV1WiQe8GDvijRoTj8ZOPcmb+Ylg1hnBzDOC6R/zp5ziTzgmbT+XpB1mo8GMxrzb6/IHsC+MCASxBu33B1x2vzfRNHq/btltVX4vvdlgtzlsXp8nGAwFEf6Q3x8kpLqU1vwld2Q9l+vtdofH5QlHwpgQuklAI14uIelE/vKPffu+qt+oj9/rCUaTEhOjOKLJiQmRxIRwNJqY5HH4dBoDnyeu1VnacS2/z86aQw/UGPtuzJQP4meeFsw5J0Qx+6xwxseCycelw/YouxfRgUSbxURbrSisqBDZDxUwYAca48XBatC4CXQwYDBQzVs2/fkff//www+5XAPA4zBgwABUm2j8oKLUaDSUgdOfdXodCna9Ak59ZnlUgMZzZbn6jOYZI3rAqCa1BSOlRdeEXZfJtDqNSqnBT0vpZRJCaRD0WCvZ8nl01LbQhL3udZ/bZp4km02QORPUJKGTCBVCgVgqkSoUCqlYLhZLxBJhqAF/xCu8ZmNlBpNGr6N0Gvy1DOhc1Gq1RCyLrSGQqGMzu/DnvWF//+fWh+72HbUhbfqH5OhD4oT6Gp0WT9xm5mXGxQhS2vCWl+onvWFxhYxmoxU3gXY8IkCjcDCdoZll5fhNDZqZMdH0KpNJV68tQbldWVLC5boag65iIEADAAA8ZTj9GQRoAAAAAAAAAAAAAAAAAAAAAACAagWn1j4+FYYxYv/+/QkJCex2v9//4osvstvXrFnDbgQB+onAvWfVABCgnyzz589DtbBn7x5GgKZMpt8WnyuBzamqMMoz424iqjrQekovFRMqWjByp+rtnws6jEk0+eTD90rnX5BmtlWRCp1Wp0PPQNO02WzW6fRyqVLAk2isvNz+glF7dOMOE+Pfk806I1t4TbHsjnLFbcXKUllJqbSkVF5yl1x2y7zoonX6B5r2C6ThbA2lN+rU2DUzW8y0FXeyNJqMIr5MY4+f/KZu4xfhzLaUu5Z84VnDtPcVyQ31ei0+54fbP1emYjsT5Q40G49QtQ+0UqkcN2EMSu/u3bu5dAMAQezevQuNimnTpj4iQGPvmYNZMTLtnxFoYJNKEo0ooUAcrqtrMVHXdIaoyyph3x0xQw/UGPVmzXHvxo4/EjfuvbjRh+OGHYwZ85Zs2vvGdtNob6KZ0pnR2PX5vT4ftoX9AZ/Pj9b8tMXeZJRmxV3toC0qp8dK0zany8H0hw4GAsGAH4vSrAC9+I6UFaDdbk+I8Z/D6CYUQbuhk0SnVDhSduCn2vPeqBVK8aDtidEEJhIjIcaBjiTRlNdiM9TtIuu1Udhto6Dtypjuz9cctLfGiEM1x74bO/Fo3MRjcROOxI95WzBkj7j3OnVeF9qCrgg0K0DTdrvN7eYaqzO3nAKNwC/Ji/tABwIBitK3bN3in//8+cSJE1yuAeBx6Nu3L6rNUx+dQpOCWqOm0JBiwAI0mpwegXGfGQzlS06ArtoEGk1KBoNGafCmK8YfFk39QBSqq1LItBotdqzRJEUoVIJ4af4QxaZ7gV3fpxdfpHqulSbUV2rUWhWh1WrxodE6SaiVBKlUkIRMFf9/cl8Wb9rxuPbTCI3KoNfhg7KHRwdH+5OkSiJS8HliystrMUGy4UzSkb82O/BDvUkvJ3qTaa2eMlmMaIpElxqpRCEh4nutl6z/2tJyrJHSm20Om92J42EBGm2sqj5Xjl9xoJ0OFytAy2Xrnl2Ncrt8+XIu19UYdAkDARoAAOApw+nPIEADAAAAAAAAAAAAAAAAAAAAAABUKzi19vHZvHlzGcOYMWO4TZVgH/35558LCgrQXRCgnwjce1YNAAH6yTJnzmxUC6+8so8kSYqijFz/538Noz1XAQubFVS6hx5Sq9RCvjTanL/huv/ZM/k916nmfSrsuVquN+jUKtz/ktVAEbSFZvbXiuIJiVRct4+gzzbeuCO82eclez5vcOCrZiWlytV3VQe+bP7yFw1KSolldxRzzpB9nlX6kvUapQnLZmYTeh6b3Wqz2+x2u9VqVatwh8vMboL1952TDtqG79Yvu6lqNU2FdsXtn+k/1P750fh1DbrcgUYrKL0TJ49H6d21axebbQBA7NixA42KmbNmqKoK0Fh6rhCgsf2MA28ymw2UkVSqlEqlTCqXyoSZrXQFo5WNp4rbLRb02MDruz1mwEs1B78cO2hfzX67anZcGdN8Bn/IXlnJPdOcY87CATaXFw1YLAp7fB6PDzeCdli9oTq6KUfUCy6Qmc0NZoPNhjb5PMFQgCEY8Id83soCNGWzO9weD+s/I0JB7EC73W6lQq228aa9bjnwY2778UGP25+YyAjQiQmhYELQHw2HE3Pa2AZvJhZ8Khi0O7bhOH69MXHNF8Z0eTamz7bYgbvRmccMeTl+0Eu8PluEnVfIC4dRbr/FZKJpKw5WgEY1he1nBLplVssNaA9+WehcA369Xt+mXatfyv5x/PhxLtcA8Dj06tUL1ebHn3yMhpxKrUJzItacGfuZhblbBew9s5TbzxVhQNNpRftnvVGrU7edJ1l4XdhiskJJaNRqtU6vQ7OuVmNwR0wdJ7mKT/nX3rFs+co7apfVaFcTYq1Ghd1n9Nzo+oBmR3Q1MOgNeq1BpzEI4hTBfN7Mj/mdipToadBe+HAceAJG0ylaajU6MV/B4wmz+sevvqo59G32iR8GrjvcpbB7ss1LW6wWm4NGpxEfI/Zkx8//VD33lCWUiZtAO1w2p8fm9FudAavDU24/PyJAs72iK+46HHY8n1YCTYVoIpbJZRs2rkO5XbZsGZfragy6fIEADQAA8JTh9GcQoAEAAAAAAAAAAAAAAAAAAAAAAKoVnFr7mFToxVeuXJHL5dzWSvj9/lWrVnXt2pV9FAToJwL3nlUDQIB+ssycOQPVwoFXD1QVoBmb69fhtmPl+RGwtsl2rq0QoJkVykDJpUq5StixSLr3mzrPf54w8YgoUk9FKrBZhn6R1UA5zLRRT5MKnc4irT9C1HurcOw7/FlnJK980fTgV62X31G+8mXTez++/cG341aWKpfcks85Rw7fo07O1+u0RgttZtVnHA6bzWpDa0aTUSqSy9Rx/TYQ275NXHff/sweeaCWQa/FyqnVTjucdhyYKuZWZd35V+O3+0BzAvTU6ZNQenfu3MlmGwAQ27ZtQ6Ni7rw5qOi4Ic/az1UxUKwAjTCbjGY1qVESSvQrIqFYTgoTC8msfrL8keLGU4UtF/DaLYtttyKu89rYPtsEjcfKVWaBIVKz5Rzeooua9V84x+7y5LT2uF0ep52Rhl1e2kp3LFKVfKbqtkSFFWPayrR/9gWCfr8v4A8E/P6A1+vnBOjbuAO0DQvQ7lA4FAyiS28oFERrEXRrsdBCgbRWZ9GLXyWVfJSRnOP2+0OJ0UgokOBzJWbU9/Uspuaflc6/KOixSujPFYiUNaOthC0X8ZstiG0+P771ktj2JfHtlwvbFYtazJDV66PxRNB1w0LjHtAW1oFG5YzLihWf0U25A43Oh3k9uA+0z+dDF5P2HduWlf1y9OhRLtcA8Dj07NED1ebZM6fRhVylUum5BtCVDOhHHGiKYoOhkv2sZ0KrM2rVOJRyfbSxfPop0dhDUkdERSjUaqxAUxaHqbCXe9474ec+d015V9lsetykt1SrLkdTGpoJqVav06O5lr0GsB+SMJstFqPFZLAI4xXhRrx5F4Vdl5CMI81Mo+hRBtrCNE+32tCKXm0kVJIeK0WTjsa3mMGbsdf6/l/bvP/90FlbW9VuEqYdVhNtIgglX8hrNUew7htDt2Ij8yUKdofL6Yt6grXd3nSbM4SV6Ic6QLP2c0VUbK88k1YI0M89/yzK7eLFi7lcV2PQpQsEaAAAgKcMpz+DAA0AAAAAAAAAAAAAAAAAAAAAAFCt4NTax+RxhebK+3fs2PH06dPs3Z9//nn58uWPKtRon1OnTrH7IO7cufNQn2n2CX/66Sej0ditW7cffvih4m5Fa+pHWbNmDfvrLpdrw4YN7G+xnDt3rk6dOuyj/5J/eXqI//AQvwr3nlUDQIB+skybNg2NwNdfP6hSPSxAI5j1Cti7DzbiL/evCuc7mx8WoNFSq9EK42XOdP6iDy27vo92mq9TqbU6nZYy6M0W9K/c2zJjtctEWRRSldEjbDxZ3HOzcNSbgikf8uddVBRfJxbfku7/suXJb6dtvh9eeltSfEM++ywx8lVlZiutXm+00BbWfmbMZ1aAtlmtVp1WF1dDFC4UrLxqX3PLXjBEo9fiU0MHxqoWtp8rohKs6MyusMtH4lf6QLMCtNOpIBQzZk1F6d2+fTuXbgAgiM2bn0ejomjhApIkGZ+RE6CNeEhWVA4nQFeUkl5rUCqUSkKJEAklYqnAEhaHCyXpXcR1BgpznxFkDeZnD46bedi87HADi1dXowZPqIgNNY7pt0W8stS48rq37xJfUh2P3ew1U67Uppq5Z9QzThKJOUYTZbXZcfvnQMgXCPp8Pj8WoH0Br8evkGhTWpUL0Da7y+MORRgBmnOgQ+FQxOv1qkitXCsYtlX32j/q9lkUdHm8fndCNC3Yegw97Rix4AJ/xMvC3D5yrUkmiJfy+PwOsw3P7FfkDBXU6inIGiaoN1KYM0RSuysRbaC1e7D9jFvBc4FBtcw2VmfAAnRFP2gP60AzTaC1Wm3Hzu1Rbt977z0u1wDwOHTr1hWNn/Pnz6GhhcqTVZx1VfxnDN72IDCcBm1AQel0FJoafUmm9Ka6nG7q/N6qzBbaYG1Vn2elRddE+cPkpE5NEKRGq6tV6Bi3Lfzc3eCSy/ruK2SuNHEcL652n5i19+zjXgoYaR2ap0zMRYCbXY1mk8FspMxGvbmKAI0nayOa6biu6fgzDegeXtIWOymn6vaQzDsn6rREIFPzZYaaBc/wn/0ofKas9+s3hwyaWz+c7tUatHyeyBSJm3xMUXzZVK+7vnYrqvlIY8fpjm5z/a0nhlObuO0+K+4AXe5AP2Q/V8RDDjSaCtEsrFDIn9+yEeV20aJFXK6rMWh0gQANAADwlOH0ZxCgAQAAAAAAAAAAAAAAAAAAAAAAqhWcWvuYTJqEO57+/PPPBQUF3KbfpUKA3rdvH7tSmYfaSP+WwVy5l3OFAD148GD2UcS/FKBZXdvv97PNoR/lj/jcf+T0/sND/Bbce1YNAAH6yTKZKdg33zqkUqv0jADNeM+s/4xhVGe8hQ22t2X53QoHml3B65ytaarkQCOMJkpvlIrIcH3JzBOyfX+NTN2VbnJQGq3OZDZarGZsQOOFxWS0mI00szNBuQSNxos7rRUMfYU37r3Yaafi554XLLwiXnpDueK2qviGeNE1yfxL0qkn5cP2KjJaaPU6I3o2qx3rklaas58xVrvJZBEJFLn9FCtu6Dd+6e62gEZnj07QZrfi7+t32hycsFU5/gBVNOgHuFgBWiGfPXcmSu/WrVu5dAMAQWzc+BwaFcWLFylJZbkAzVQJA+M5YgwUCq7C8H2jSavWEXIlwTjQMplcLJIqlCKVSUC5+UafSG0QKY3x/VaRx39pO6ioLqEiBAJRTE0eaY6r2zd+7OvEhm8cxR8FWw71eRKNfTYol99VtpqkMRmttNXidDn8AZ8/6PMHcCtlv9/n8/q8Xp9Cqk0uF6CtNrvL7QpGgsFwMBAIBhkJmu0GbbVZRQJ5oIFg3TXvxmsZdVu7ctvbRu/RLLktnvqBsNVUWSBdp9MYZSIyvoY4uVBdcsU2Yo/M6BdISZ7eJbD4pbRbZXUYzSYLCgv9IGjcydaKSo11nyvDNYFGMA601+vVaNRdunZEuT18+B0u1wDwOHTu1AmNnwsXPkXD6XcEaAza+GsCtFard3msLQd5+64xDN+tHH9YMvWEdPyb8hF75QsvGKe86Yg0tKitSn+qqe/88NrLies/s47YS9TuqNAbNGIBEfN/fKU5tv9W6cYvQw37WjUqdAlgPghhYExotGQcaLQUxitCjXjzLnEdoNGEVmE/o6Jh6gYL0JSaNnvlow5IJh8TJTcmUQ3yYsXxPJ4tNbb3EuWBu7lnfhmy6VjPFn3TtWZNTCyvYIx0+U3r1MOGsa8rZn5EzDtDLfjYXXwqbebBug06R9DcyvrNVQRo9isX2G9dYFaYHbg5FE2FaBJWEIqt2/FfyEVFRVyuqzHoogUCNAAAwFOG059BgAYAAAAAAAAAAAAAAAAAAAAAAKhWcGrtY8JKwP+GAI04evRoQkIC2hgXF1chE1f0Zu7WrRu7ZcOGDawVjXY7duwYu7HCHq78hDdu3Hi0s7JQKGQV5MpeMkvFyQ8cOJDdUnEmP/300+83af6Dp/efHOJ34N6zagAI0E+WCRMmoLF3+J231Wq1Xq83GCu5zxWUe88VUSFAo/1RVBKgsa2JVU2mCTTrbaJ7RoNJrzYZaFXP1ZK5n4qWfarb+01usyE+tUaHrWeaEaCxBWo2Gy1mE63T6CViOakXZA0Ut10m6LsjfvhrNcYfiZ12ij/7rGDuBcG8i4L5F4VzzgtnfCIa/56s93OySI5GpzeaLAaL1WxzYPkZO9AsVjuloW0RYuKbqrlnxIsvUssuudObGimtpcLlQsE60Iy29Z860C5GgJYr5POL5qD0ogLn0g0ABLFhw3o0KpYtW6oklag+sPuPBWgsOrPgmkF3cTWyJcUWEkanpUilWqkglQQOhUwpFymlAkImIEU8WY2/xHtyYzZeChwo7ZDe0K1UqdAhJCKFSCS2JMa3mCFYcF63rtQ364hryXX9qFeUrjA6Dm1z0F6f2x/wYgcaC9Ben9+H8Hq9BBagBYwArbPa7E63KxjG6nMgyBDCP6FQGO2q0+oFImHbOcRL32YsOhWc/Yls3gVBz/WS1CZqdAHQa/ArpHQmDUWMedG64pY2v59MGC8VxsnkIlIjN1BqdMnAJjhuAo8oF6CtVtput7Nd1R+A7jEbWP8ZwfSA9qo16m49uqDcvvXW21yuAeBx6NChAxo/ly5fCgT8SqUSzYmc7syh1TLB3UMPMsFq0BSlR1VA2wwtR9CjD+invq+Ze5ZcdFW+5JZ8yU3F4huKxVepohPJ/ebkt58YXvx+8uavfTPfVzcdJ7f5VYREQyo0KrUG/fXIjxcltohf9KlxzpGgI0Tp0byGqocN7nKB7wh58kgB7gDdjekAja4SjPJsZXqmYwHagsJoUxKaJuPE8y+KWs+Qo/lRrzWg80fXECFPJiEE0Wbx0/eaj/3Y+uRPI2dsbJnZzNFhtm7GCc3iK5qiy8TS24rld8jlt6mSm95VN9KmH4zWaey0WLgm0A/bz1WDmVLxHIqmQjQJE0pix86tKLfz5s3jcl2NQZcsEKABAACeMqz9jODuAwAAAAAAAAAAAAAAAAAAAAAAANUBTq19TCoE38cVoB9q9vyrmrLf76/whlkikcgPP/xQebffesIK/qUA/dAvxsXFpaWlcXd+lz9yev/hIX4L7j2rBoAA/WRB+UQD8t333tVqsdRlfFiA1nO3VQXoiihvAv1QsA40VqBNjNdpoMwqBVW3i3zOaWGvZ3n1hvHW3XCv/CjLm2w2GEyc/WzGXS0t6J/JolJqRXy5Uidp8Iyi42pR5/WxfXfUHPZqjTGHYyYdj5v6IW/aKd60k7zJJ3jjj/EmHlUO2WZKL7Tp0HFMejNttNqtWMzCEjT2n2mzXa3Stp2tLL4ibzI5vvEkwfovrc9ss1odJtpixSJXpa6WjAbNmlsPxe/yQINmcKE1B6rxhcULUHo3bdrIpRsACGLt2jVoVJSsXMEI0EY88tHYfyBAc0WE1/TlDjSzgdEf8ecKKL1Br6V0Wj1aUmjca80GnQlVsFgoFYjj2s8Vv/tzo2nb8s249bnJYDSoSI2IJ5cSQl9eXN+NsvV37Tt+CE0/5EvMthkMZjTufQFPeXgRrADt8XoUEm1Ka/6SUmnPEh0qJqfbGQz5g6FAMBwIBLg+0Ai/P2Q2OrQmouV04cb7zh3fhMcfUuT2UVjdBi2Bzw1hpa0alSG/t271bcvQF5Q2r16l0FNaI22y22mX3eYotzctjMFJozuogHFtVQGrz+yShRWg2SbQKrWqZ+/uKLdvHjrE5RoAHod27doyf6FdDodDjwrQrP38WwI0XtPosztR/Z5XjT9MzjlLFl2RLrklXX5HvqIUhXTpbc2Sa46lZ5I3laYtu2rsViILZhNKQk3I1Gq1Bk3BaE5FzyOTEHK1oN1C0YYvvR2m2TVqCtfPAwEaO9CsAB0u4M29KOy2lMRTtMFotaGqwcH+oNlNqzS7a8mmvi8Z9aoknKXTqoxoysafOaJptKKQqfjxUqU5vsEQwdoPwu9936noWHT0G8TUD6QLL4uW3pSvuKNYWSpDZ15Sqlp+g573sbNfiTUQRSVabj//jgCNZ1U8b6Kitdqs6Fq3c9d2lNu5c+dyua7GoCsWCNAAAABPGU5/BgEaAAAAAAAAAAAAAAAAAAAAAACgWsGptY/Jvy1AV3R6Zqlon/xbHjPLozbzbz1hBf9SgEZs2LAhLy+PbUf9n/DosZ74IVi496waAAL0k2X0qFFoNB49epQVugyMAK2v8J4p/YP1quozG2wf6HJDsyIYAZrtYoswGLUqI+0jh+4WzzotCNcX8qVx3VeL9/41o9f8iI6iWAEa611G3PxVrzWThCYpX9f/WdOog8r2y4WNZ8e2X8HrtSV+4EtYgx51KGb0W7GjDsU98zqv/664AbvEJecjOy+17TE1wxOl9QYDbbc4XNjBwk2grXad2hTOU8w7qxr9mtgUFMh0NUYfUKz7zJHX3Ujp6YcE6N91oNn4DX5FgJYtXroIpXfjxg1cugGAIFatWoVGxZq1q5Wk0sgK0LhamGLBVDRWNxopNEQfONBcVeFSYaVps9GAgvlltDSYtRqdMF5ORwXF71vf/r5to+4hvd5I0xb0K3q9Xi5RxdeU5vQVLDgnW3qZ2ng/UPJptMMkXyjV7XR4PD7OgfZ6PT4/7gPt8XgkfE20BX/pPUnPEh0qJpfPGUwoF6CDASxBBwMeV9DvD+R3sT7zomLeeeHsT6SbPw+Of8lrcRh0JNa1TQYLqkQTZbcGVVMOmeZ/QmZ11OKe0AazxWS1o1JDtYOwO3Ew61wd/TpYgMYONIubcaDLBei+/Xuh3L5+8HUu1wDwOLRp0xqNn2vXrqG/zdDd3xKgOQeacZ650OmVMp0/hepSTA3do5j8vmzBBfWGu6HVpeZltyXYJL6rXlFKLLmpWnBRM+5VTVY3hc5IKmRqUqnWajXoQMxMilGr1YJ4qTOTP+2YasmnwVCWQas2VAjQzAr+qSxAo0m6sgDNhNVitKo0qs7LxPM+FRWOUKIrCf6OByO6IDAfL7Ba0ZUHXTEkIoLPF9GJ8R3ny0e+Lp1wTDD7jLzkhm1VKbXijmz1XXLDfbSuXn6HXHjZOPktc8Ne6PdoVLdVBOiHYB1oZsZEFYuORaqUu17aiXKL/nhjU12dAQEaAADg6cPpzyBAAwAAAAAAAAAAAAAAAAAAAAAAVCs4tfYxmTRpUtm/JUAPGzaM28TwWwK03++fOnXqvn37Tp06dfHiRfZ3EY8K0A89YQW/I0BXNGyuDHot+/fv/x0JuzL/8vT+80P8Ktx7Vg0AAfrJMuKZZ9AIfP/94wYDpdVpDQaDntIjmN7P2H5m4RzoCh7WoFlfszxMWNVkbU30AKU3qUhto+HS+ReFXZdJFYT8//4S78mNLT5j2nSzTnIDGh0WC9BGs0FnpvTmUC26xwLb4k/pok9VbYt4qe0FWUMFDSYJWhUJOq3i99wY22dbTN8XeH2287o/J2i9UJAzgNd+jmLL1dT3f+m0/ljrpn2jDr/NYqNtTtz/2Wy0aQ1kv43KokvyxqOVMpniL3+JSWkXW3LHMPkNqytsMpuYdtGMzoXtZ2d5PDChK6KyBo3i1yh3oNGqTC5btmIJSu+zz67n0g0ABLFixQo0KtY/u16pZAVoE/6oQLkAjUoJR7kNaWAdaEaDxtuw6Ix1ZwNlMqJAdytAFUQZlQq1SCipP1j06vd1St4pdARxJ3bmEwYWjdJoCxIj9sqmHhWld4ptNIa/4BPjjh+iC95NbtIv6A14XU631+fB4fd4PFiApt2a/CHiRddVg56nkvMtkTquhCx/KMUXCPsDQb/XHfC4ApkFrn6rqKKLstmnhe0W8EKFMeP26bZ9ndqov1WvNVpt6J/DanKqSX2rSbp1Xxh6rSQttEmvxsa2zWrHxjMbCFxYqHjYGvoN8KOVBGjcBBo70B6PW6VS9R/YF+X2tdcOcrkGgMehZcuWaPzcuHkjKSmqUCg46VmrxbfMCnuXBTvQCGw/69RKHUmo8rpYeq3TDNsnnXict/6G6/SPE7d/nrXstuLAl62PfDNq3T26+JZ49hlprzVyq0elkKnUWpUWd3GnuGLHlW9Cd+VSQiwTNRwtWPOZtf8ah86gR3PqQwK0KF4ebsQI0Mse7gCNg7aqlYbk5pI5Z0WDdkjdiXqtGl9VLBYLIz8zLaJpG1qiywgh1fLjJbW68frsiB1/LGbRZdO73/Z78fOMZXek+75o/un3q1/6PHPpbXHxNc3UY/peSy0un9lspDn1+VH7maW8CTQqV3Q0tUb10su7UW5nzJjB5boaAwI0AADA04fTn0GABgAAAAAAAAAAAAAAAAAAAAAAqFZwau1j8i/944f44wK0UCg8ffo0u/OjPBEBGoGOO2vWrMruMsuNGzeMRiO306/xB08P8W8f4nfg3rP/JiKRqLCwEC25+38SIEA/WYYOHYLG3gcffmA0GbWaBwI0ppIAjVaw9/wQlQVoxs3kAgvQ2IHGWqfRqCYM3lrE2DdFU46LwlkqmUQl4IvEcn6LGaIXvk8YtSXRgLs2m7Wk2eG1tHzGOfe4c9U9asxr0uyeIkIniOXXcNWNr91PnDtKVH+CoMW8uDbFsS2LBM3nixpPldTuIlNTIr4oNtAoduwL+rd+bHj0x17zdjfPbhWxOrHjpVZSmZ3lxdeUQ1+UeZMNSkLLjxeJFTF9N0qf/drWcpyR0lsqRK5/JUCj+CMCNAoX2kEul5WsXo7Su3btWi7dAEAQy5YtQ6Ni46bnsACN9WTcwbkcxoGsABdU+VaKCyNuCI2NaU6IRCvloFW9jhLzCY1VMG639t1/NO88IRlVF+4Vrbdo1fqWk+XF16VtZoriYgRx/FhXVkyP1dJ1d1zbv0ofvyOlblO/0+1xOT3egDctz9V0hK57ifyZl2Xzz+hnHDOM2G3ov8bWcXq4dptQMMnndvsT0j3tp5pnnyQXXRcNfkGU1ZVQU4q//CU2sUXshnue+ceC3iQTbUaV4qTUVl8GufCMedYpMqWA0qnwqVttdBX7mV3hysvJVBhTTA9FOZz+zICbQLvdJEkOGjoA5fbAgQNcrgHgcWjevDkaP7du30xJSeYEaM51rqI+s2DxmUGr1hFSld5AthpNd1omG/ayePyR2EUXVFvvpi2/Zdx6P/H2jy998n3x6lLzwuuiOeekw1+WRRuQhEKNJlZuumSmTq7mDUaNRiPiyQwB/rC9slW3PRktjRq2CTSCXZpM5QK04FEBGmGiaD1NDNwunvGRKKeHSqfB8zS6PpR3f2YFaBwWg00lo9RGccPRgr4vxo19N3buWXL7vYx1pfTKUurc9yV3fty28/PQ4lvCRVeVU49rhmw2J2RYDHoTOhRjOrPLX4MToB3ooBqt+uVX9qDcTps2jct1NQYEaAAAgKcPpz+DAA0AAAAAAAAAAAAAAAAAAAAAAFCt4NTax6Siw/Gv6sUIoVA4adKkvLw89u4fFKAr7v7888+vv/56r1690DOkpaU9ajP/hwL0Q6BDbNiw4fefEPHHT+9R/uAhfh/uPftvgt6FefPmzZo168/VoEGAfrIMHjQYDbxTp05aLBaNRmOoLEA/xEMOdKUO0JwDXWE/VzjQRiOlM2l1mrZzJItuiFpOkauUWrVKQ5KkiC+jo/yJhzTbv6qV3cmu0xty2tkm7vOuuk3P/EDZZpbMFpHz4yUCnjg+jhfHi6U8/FCBOL2ruHAyr9UCXu5QcXpHeShHZbLolAqVWCSNqcFTGGJz+goWH3Ud/7nN6/d6jViaH0z2GFzyUa8Sc87Jcnuq9VoTOlFSRcbHiHz14oouaOadsoZro7N80AT6gQBd7kBjK7pKcIZmeVSFkThdTpedEaBXr12J0rt69Wou3QBAEIuLi9Go2LJlMyNA4x7OrOWMqGI/M3APVIU1IJlesJUE6PIVFanhx0lT2vK3l0a2X2wWzrDhMlSaIvWIKUelk49IfGlqmZgUCaW8OLFCz0/rED/2gHr7t5FNN2v3mZ+UlOGv19bXd71h1BuKaSel887Ll1wlllzTFF/TL/zUXvxJ8phtdeu0DDbsQ48/qFtySzrxiLDpeLk7UadTmVGB83kivrRmv2eVO39M6DTDbqQsVrNTq9f0WqlbeU/bbpYKnTN6BRbazBnPKFgeXbFX7MFFVQH6gQNdIUAPHY4vaK+8so/LNQA8Dk2bNkXjp7T0Tnp6GvqbB8vN/xK1TqPUycQEZVa2m0y3LpIMfFE4+s2YyR/EzzgTP/ci/9nbzje+6vjc3cCia+IFl8UzToufOSBOb6HEArRej31nE1fs5RjRjKokSCFflNGNV3yVGvuy0+zQGyimvBkBGlWQMF4easSbe0HYbSnJTMFYgMZKM5aarSShz+krnvupsPtKmc1L6bQUOoqFtrCSNG3BuyEsZquJouUSpdbGbzhO0Gtb7MhDMZNPxM88y1twWbj0JvnSZw12fZaKyrz4mnj+BfmkI6pBm4xp+RZKbzSbzaxLjWA06EdMaKYJNCpcdDStTvvKgZdRbqdMmcLluhoDAjQAAMDTh7WfEdx9AAAAAAAAAAAAAAAAAAAAAAAAoDrAqbWPz+bNm8sYflXnnTRpUuVH/6AAXWESr1mzhtuD4VHf+j8RoNFBp06daqzahvm3Dl2ZP356//Yhfh/uPftvwgrQLH+iBg0C9JNlwADcMPXjjz+y2awajZoycPoz/lp/tKgKaz4/4FcdaFZ9NuF19KMmqGihfMYp0dg3xM4ENSHXaLX4G/9JUiUSiev04a2+4So6mjJorXvlNfeyW7rez8qSCgh0aLlYJRRIxCIxGnhyuUIskEqlEiXFbzOXP3SXMFhbic5RpzHodfgwOp1OqST5ceLY2HgqGNtupmzb5dRTv/TYeLzT0I3O+ZfkXVZIrT4Kd9tkBDJCoRSI4tvMFa7/xtxjCd6Ge1k6HhGg2Sh3oNGycvymBu10uFxOVoBev2ENSm9JSQmXbgAgiIVFRWhUbN+xXalUotGLdUZcPGzJ/DqM9vww7GDGVHKgzSYzqi+5hJRrRH1WKw7/0nDYigyNykiZNd1WyIpvSpqMUqoIvVaD6xkVuUyiFPAlOhevYIxg4UeWPT9mTH81OmizYexh9cwzxMIrsiU3iBW3FSV3iJJSFPqSm6GlZ9OnvO4vuqycc17UeZkkIU+NKkurxt2p0SlotJr4WIkni7f8knXFhVA016wQGtNaqJbfMI47RAQzKEprMptN6ILDWc0P8cB25no+Myv45mFcOMoNaOxAo3yOGDkM5Xbv3r1crgHgcWjcuBCNn7t372ZmZsjksn8pQGvUWIBWKzUSoUxnJFqNpZtOF/d6TjR0X41x78RM/TB+1hnB3AvCeZcEOD4VzT4rmvSBcOCLouRCpUKh0qI5jKvwSksK17tWp5MI5Sozv8c68erP7I0GmdUkxVU67hiPBehwI94cRoDWVxKg0T+9xkKH5GNeF048Ikxrjg+CJmhUdNh+ZoKzny20xWQ16E1SsZw08usNE3ReHz/45dgxh2OnfBg/+6xw/kXR/Mv8BVcERZdF6ORnfiIb/bqy72pjUhaNJ1OzET1JVQH6VxxoVL/oOGhOP/DaKyi3kyZO4nJdjQEBGgAA4OnD/VcMEKABAAAAAAAAAAAAAAAAAAAAAACqFZxa+/hU6LyIDRs2yOVydrvL5apodfwvfeXfEqDR3Tp16rD7+P3+06dPM7/9GAJ0xTP/9NNPBQUF3NZKp33jxo2KQyAeMrZ/lT94ev/JIX4f7j37b4LeBe5/G5bzp2jQIEA/Wfr27YsGHhqododdrVZRVCUBWqfDt1VBO3AYypeVBWhsapYL0AaDXmMwWMle68ULrorqDyAImUat0TBf+m/SaHWCWLkzTTrnfXrvTxnr7rpHvybP7asw2TSkXKtR40PrtHo1qSEJlVJBEnJSKiRFImHn4rjJhwXBWloN7nqJDsr9oNBqtYRCKeTLxDKhP483bIN2/7389/7WePv9up1m+Ay0SW+gzLTZZrehExfES0zhuGnHlUuv0bWaoXOl7U4bG6z0XNmBfkh9rhy/J0Ar5M9tWo/Su3z5ci7dAEAQ8+fPQ6PixV07ywXo3xafy2GN54dgXMjyJtDl91g0Wq2QJ/Pm8Feed+y52yQxxxptKp17VjLqVZkjoFUR+OMNFgtuA4ueR63SiAUKkVjkqhPfqUg+4S3d6LdlUz6Qz7soW3xLufw2sfKOvKRUxoRiRalu8RXrgvPGIS/KsroRtIPSqkyUDpvX6AltNjtNW5QEyRPw2syWbvsx2HuJTUPLn9mpX3pTVTBMbdCXt39GVcOKzg/BbiwP1oEuj0fAAjTnQGMBmiBGjR2Bcrt7924u1wDwODRq1BCNn88+u183q45UJv19/5mxn/ESDXixSEqq5Y36WhqNlXRYIu2zNXbY/v8b+07MpPfjpp3kT/+YN+Nj/rRTvMkneGPeEXQtEbuT0WhVaXRozsX2Mpo3HzjQ5aEiVQK+OFTAm/mRauYxhytBr9MwdV5ZgP5U0G1ZlQ7QFpOVJDXNJovnXxK2naUwWSm9jjKYDNiMZto/V4TFRNPoYR0llciFYn5aJ2GbpbzeW2OGvlJjzOGak0/ETf+IP/M0f9ZpwcxPBOhVTDwqHbBd2nmeyR+hKR2+cGGpmgU93wMHupIGbUdTJBagKYPu4BuvotxOmDCBy3U1BgRoAACApw/33y9AgAYAAAAAAAAAAAAAAAAAAAAAAKhWcGrtv0Vl9/dR9u/fX2FF/0EBGm2psIQrgx7ds2cPWvnjAjTi0adifx39Ltuw+VFu3LhhrNq2+SH++On924f4Hbj37L/JowI0y1PWoEGAfrL06tULjb1z5846XU6VqkKAxvYzC3O3KlS5Bs2Jxw/CYMSiFRagsb9lVBG6rO7SeRdEg3ZIjTa1klBrdVrKYNBqjGabMb+zbdoB/+pb9k2f2Zdf9KQ21chFWpLQarU63KvZaLTQFrPZYqSMlM6g1xhJhVYiF3RdET/tA3FCjk6jQodjRDFWGzOazGhvCxY6SULFj5ERRl6/jcIdn9uP/tjqnc8GT93YLDXfZ7FbsCVmM5NKVXysIG8of/WX1PAdZqvThLY6XTan1+YMWJ1+q8Ndbj9XFaDZRtEoKrY86kCjZNptWIB+fstzKL3Lli3l0g0ABDFnzhw0Kvbs2U0oCWbolg/ifwXaswqs9fxIE2i0CdUFISfFMlHzyaJ939We/kra4F2SeZ+K6vVSknJc3mgHSzlmC24aTchV/JoyS0jYeoFg2AHelJO8kuu2N7/uvPl+aNkd0bbPEg591XnjfefyUmnxNeXYQ8q8XmqsPqNKNRnRM2D9EdUFA7oUCOKlhmDcrOPUiovePuv1y67rBm9XuMKollGVmmz232j/jKhkPz8Uv65BV3KgFYRi7ITRKLe7du3icg0Aj0P9+vXR+Pn8i89zcrOlUkmFAK3R4O8uqIJGq1HhjRq1ViEjpFKZgC9Ma2RqMlbdeJK08wpR7y01Br/8fyNexzLxuHdjUYx5O3bkm3Gj35T2XqcJ52gIQoWmIb0BFyNT3tySux4YDWiylUkImUrYfKZg5T1zx1m0Ro3rrbIAPfeCsNtyToCmcWtnq5Y0eetKp34gHLFfFMnRadV4XrbQqEKZ3s9Wpku0FU2uOGiLVa2kxEIFQfGz+4vbLBa0L4nr+XzsoD010JmPPRwz/kjshKNx49+LH/eOaMheWbeVROEAK3o2dDjmWmPET1HJgWaDuxAgcAdoO5qaDQbq0Juvo9yOGzeOy3U1BgRoAACApw/3Xy5AgAYAAAAAAAAAAAAAAAAAAAAAAKhWsGbtv01cXFzHjh1PnTpVVs7PP//8+uuv5+XlcXsw/HEBGtGtW7erV6+y+6NnW758OXpo8+bN6O5jCdCIyk+FqPh1v9//4osvVnaU79y5wx6I3eF3+COnh/hPDvFbcO/ZfxN0etz/Nvw1npoGDQL0k6Vnjx5oBH766XmPx61SqfRcA2g9az+zcJsqQWEHmtGgK9nPeiZ0eqNWjYNUGGxh5fCXxXM/FaW3JhUyjVqt1qj1lMGY3tA2+vnghtLA4kv6TksEPdYINtwPdJ3tJUmNRq1Dz8WanCYz/ofDbDEbaDWpkygEPdfzZ5+RJtbDXhd6hNE3WRgRi8b6lcVEK8Qad4Zo0ruigS/Gtpslee509HRZ71evDxgwOz9cy2Ox0QYzJRZKSVP88H3SVZ+Z8ntTei1tpR1OjzOQ4gnWcXnSrM6A1eF6uAN0hQDNRsX2yg600+W02WxyhXzLtk0ovYsXL+bSDQAEMXPmDDQq9u17WalUohoycsIjU0+/Dred1Z4fgq0U5oahfA3VsFigMIV4kw5Q+3/MX3nH0uc5icmqVatwRTOfFmBgbs0mmtKYFFLSny1uUywc+opg4gneymuO977ts+l+aO1d05nvlt7+Yd+Oz5OX3BYvuqacdFTVcoIGS5Bm3HcW14KdqQiE1U7TNKlUx8fxcwcI1pd6n/8qNOMDZd2OGr0On53FanE47TgwVbunIx7xnivHb/eB5gToiZPHodzu3LmTyzUAPA75+flo/Hz51Zd5+XlSqVRbSYCu6kCjqUqLv9GAWVHIFDKZjM8TGmhls2G2esOkjSfL2y8RdX82ps+2GgN21xi0p+agPXEDd/N6Pc/ruUE8/QPj3JP+NpOtjgQ1SWrRpEiha0DlwNWOF2jKFPKl9nTemEPyRZ/awjl6jQpVHS78CgG6+3KSvUSgCQyVo1qn6lYimn1GUDhSibbiK4zJQFeynx8I0CbaoLMZrbraneT9N4sH7BQ0nSlqOFHQukjYZU187y0xA3bVGLy3xpCX44a+LBiwXdZphazzPEtKjkOnxeeArjVoiS4eDwRodJBf6wCNrjboIvfW24dQbseMGc3luhoDAjQAAMDTh/tvFiBAAwAAAAAAAAAAAAAAAAAAAAAA/Ffh8Xg0TecydO7ceezYsdz/pfmT4NRa4H8B7j37s3kKGjQI0E+Wbt26lpWVXbx4wefzKZVK1m/W6Tn1uQK8rUqUO9AG7G7h+waDK2ROaURld1Hn91FldVAHMzTNJsgW3hB3XSWhHColqVISmkAK3Wt+YPXFhLX3rCP2KjLaS4VivilaY+Jh5dqbCSmNTBrSYDSYUJiYJpcmo9lkMBtR6C1VBOg8nVZDsepVhdWFBSzmromyaShln2clM08JMzoJ4vnxdEqNviuU++/mni0b+vz7vVoPyHAG7KSGjIsTJLeNX3xDPelNU3pTfb0uVKuxps4zXd3mBpuNCiXkuuxuK+4AXe5AV3jPD8VDDrTTiQVoglBs27EFpXfRokVcugGAIKZNm4ZGxYED+8lHBGgEs14Be7dCgGajCpzvbGbqhYVZQTuSSrWAJ87pI9p6P7Dupi+9lVpJ4PpFNWbGfZ85B9psspgomtKZJGJZUgtR26WiwS8Lxx/hzzwtXniVLL4hWX/X8cG3k17/qkNJqWrJTWnRZWLy+0T7uWqLHX9WwWa3YvvZyjjQCHzPjk5MxJeT5rgJr+m2fOvts0aLdqYofJ52piksbq/+SOt0TnSuoJL6XBG/0geaEaDRUqFQTJk2EeV2+/btXK4B4HGoVy8XjZ+vv/m6QcP6YomYs50fFqDxulrFCNAYrUKulElliPhYXkJtY9MRprr9JfVHylvMlLVdJO60QthllajLalGH5aImU0WZXSSNx0umHzds+iY8/0S46QirPWDQag1oEjXixspVHGg0w6InF0tF9YbwltzU9X+W1ht0lA4XvpAnDxfw5lwQ9lhBUkY0ERvQ9KciDKmtJbPPCAdsk7ijep2Ga/9cWYDGKxbaoLHSNkvddtTAzcrZH4nHHBQ0Gs0PNRSndZTkjRAXThK2nCfssFTYZSUKabc10g6Lpe1nGxp09KHrDL4GMfYzCtz9vQJmCkZUdqBRjZsxpsPvvoVyO3LkCC7X1RgQoAEAAJ4+3H+tAAEaAAAAAAAAAAAAAAAAAAAAAADgv4FIJEpJSencuTP3/2T+n4FTa4H/Bbj37P8NZs2ahYY0N76fNCBAP1k6d+pUVlZ2+fKlYDDwOwI0Bm2sJEDrywVotJW2WBp18fZebhm8gxz3pnTK+9JJ78qf2SOb9aGu6Jwtr49d4yRpn67FYN/i49FNX3lmnlA1HSu3+1VyiYoXK46Lj8sZHLf2nn30Cz4jrTfosQBdKbADbTZaNCpGgH4WC9BRRoA246/wLxegLYwDjbDYSAWV2Uk895yk93qJxaUW8+VxNYUiIj6pZfz0Pebjf2394Q/D57/QLrMwIFUoxGR8v43ksuv2ca/pJhyWz/6EnH/GuOAjf/GpWhNeqJ1ZELBaOQG6ivRsrxKsAG2vIkBblUrihRe3o/QWFRVx6QYAgpg8aRIaFQcPvkaSrACN3ecKARrByI94Cxtsh3VmHVPuQLMrjItYzoNVtGIwa9R6mZRoOEK0+qbm5e8y244JqtRaVGBm2myhGSkRYbKYjBazwaJV64QCcWJTUcsFwr7b+SMPxU06ETfrDG/+RVHxNemKW+qlt+TFN8RFV6Szz8nHviNvO1NlseGj06jkUEVYbTaaUx7ROipGuUTtSJHMOKbZ/I1t8mtOV8ig1xtpG43LBNvPFQJ0RfwBqpjQD8ACtNMpV8inz5yKcrt161Yu1wDwOOTk5KDx89133xYUNBKLsQCtQf/KBWh2Hd9Va9QqTbkArVEqVFIJFqDFYomAL4jWNTcdas0dRNTpJ8kdKq0/WlIwQdpsiqLBcCJcXy6VC2WkIFif361EtvSSdcvX0RlvhvO7Wy0Oo1ZjMJgMRhNeYgeaCXQ4EV9Gefn9touX37LUbkeplRQqPAEWoPlzLwp7lDACNGU06C2UjRi0UzjtlDC7u0qnxdcUkxlVKI3qrmKqNBmtZrMlpZGhZ4lq2nHp1GPCriXitFZyHS2rWbOmxhaf2Eya1VeeM0SaO0ycP1KCosU0ZceZdF5bL5rrsahdbj//EQEa1Tu6IFks5nePHEa5HT58OJfragwI0AAAAE8f7r9TgAANAAAAAAAAAAAAAAAAAAAAAADwZJHL5f8Pes8VcGot8L8A9579P8DQoUO9Xi83xP8LgAD9ZOnQoUNZWdnVa1fD4TArQHO6M4dWywR3D9vOFRo0FqDRrcFINehGj9hNTT6qmXVatfCyfPFN+ZJbisXXUWgXnQmMXle/1fDo1L3RLV9Gll6muq2Qh7KVJKEhZLiJJjqokCfROfmDdsqf+zyU19OiUVMmM+4Ui4OB1TSxAE0IerECdD7TAZq2WLkO0DQWoHHYKDVtcstH7BdPOS5Kb6nWqU3oVDUaDSEl+fESFc1rOES45sPgJ7/0fKt0eN9puZktzH3Xaead0RZfUS+8olh2R7Hijmr5bePKm8FVV9PGbI1EMx00jR3o37KfK6KiCbTT6UQnRpLkrpdeQOmdN38el24AIIgJEyagUXHo0BtohGDdmRGgH6bce66ICgEa7Y+isgDNONDGyk2gsZloMKsJoy9DMfYN8Zyzok13PM+ezwlmWHR63BEWC9C4BbTZZGA6QKOdVWoBX+zOFDaeIey6nj9oT8zot2tOPhE/47RgznnhvIuCeReF8y6IZp0VTj0pGb5f1mgoQZkoo9lgtphsDtz22Upz3qPVaqNNdpVW3WUJufCSbPYpYv19d5tJZkpnZMuEqRTOgWY+NlA5/hVVWkFzVAjQs+fOQLndvHkzl2sAeByys7PQ+Pnhh++bNGksFovQ3McqzlXQatRqjZpkBGjGgVarNDKJQiqucKBFdo8uu5WtyWB7k+GWxsPMDfqbUpvq7EGSVColYhk/XsiPE5BGQWpb4YDniTW33Ju/TBm7K1SnjdVkNeq1qHzLu0EzZa9UkkKhKLUDb845ctyrFotDp9ca2A7QWIBeyQjQOqNKqa03QDzvgqBriczmpXRaCj0P2/6ZFaBNRqvJREeyTJ2LdDNPEjNPiXuuE9brrbQH1eishDypUCCKi4mXkXx7ojythTavt6HRAFNhP1teO3dSLZfRgCZT7oJTgcWCZ+EHMF/FwFwIOAcaFTi6GqGtR4+9h3I7bNgwLtfVGBCgAQAAnj7cf6oAARoAAAAAAAAAAAAAAAAAAAAAAOBJwePxCgsLuf8JU4k+ffrkMmCfj6bRbtwv/Blwai3wvwD3nv03kcvl3DD9Df7b6jMLCNBPlnbt2paVld24cT0xMYEgHkuAxg60RqVPbUT1WqsZ84Zy1ieq+Zdli29Kl9+RryiVLy+VLr+tXHKDXnI+vOFqxvr7jmdeUtTqINdSaoVUrSKxN4aewUBRpFIl4IuTWvOKLxpnvROwByhKh23OhwRoNSNAcx2gOQHabLUxvhVWoLEJbTHalApt4Whx0RVxhwVys9Wg12JZFD1sNlu0Wr1YSPAFYnNiXLcF8n03c177rN2UN+1j3lLM/FhSfE287JaipBSFbMUdWUmpZtk12+wTjk7TaacXu52/bz+jsGO5ExucTkaAVqlUL+3dhdI7d+5cLt0AQBDoIoZGxduH31Kr1bgEcJPnyui520r2c+XACnQVAZoN1oFmbhkBmtKatTpN+3mSuWcFjSfGd1ws2vNj+pCVyZTRwKrP2IFGtWU0WywWA2WSS0kBT+LJkLZdJO+4mtdjU8zAPTVHHqox/kjslBO8aSd5007xpn7Im3g8fsIxydhD+lZjrbTLojPojRaKtjFNoG2MA42xa0hTclNiwTny/2fvPACiuLYG/IK07X1nZ3ZntlJEukivIthAbCAiIPZeEDsqKopUEUVQwBhNMaaosSQmxhijKdZYY6+xpCcv/cWX+N87M7sCkvZ+fUlezudxmLlzd3a4ztkryzdnx28Qxo50qz5jqD7p3bGz0cTYPO1J1MKExjWhm2vQOI9+heZ1oLH/7K1UKiqXlqOxffLJJ/ixBoDfQ2JiZ3T9fPfdt/3T+0skEjQD4omqJRRFtRKgEWgWU8iU2IGWK+QypUggVSnUJKUxWNSMRUtRhEajVSu0GrVWS6ClWiaTu7uJRUIx4yNNHC2Z/RL51GeBT34Yk78uMCLFglLcgBMVG8yMiUGnIZMotUZhbr2o/jadVsAQalrsrgzqJai4iAVo1JPQGGwhisI9onn7xVHpJEWiVwraZDFx9rPZbGVoq2+EOaPIsOBNbcUZRcE2Sa9pqoBYPXrJIDUGhUQtFaNTV6pUaixzyxQarYrSaxlGb2VfJfQU98rTEpORuw3pHtyE3FKARi9IHp62g4cPoLHNz8/nx/pvDAjQAAAA/334NyxAgAYAAAAAAAAAAAAAAAAAAAAAAHggxMTEFBcX87+BYcnLy+vUqZNEIuF7/Dng1VrgrwD/b/Yw+QUB+r+jPnOAAP1gGTgw8+7duzduvB8eHoY27xOg9ZwAzTvQdgGac6AJld7DxzBoiXHSJvW8t5TlZ9SP3vJb+4F3/U1F/S1Fwwe6Vbc1K29ql10iFx+k0os0Vn+NSkFoVARJkuhgDpsKHU0uUakoUU6tZN1nHbIWeJI6Ays+4wXGjP5gAVreUoA2NxOgcVhtBsLcPlqx4IB09m5pSFeKInAJTfRo1svCNTCNRhOhISUCpUQh6pgqHLdePWuvZMERcdU5ovGmZ8MtctVt+aMf6Nd9ZF19W1N/U7f0rHH2i+aEfvhz/lsL0K3gnU7sbnp7e6MTIkhi+4tb0fCiy5UbbQBAzJo5E10V+/fvQ4mABWi2ArTB4T3ThnvrLdVnLrhS0G0L0CYupYxG2kiomLDeqpJ3xdNeFGsZkTHEpeII/eyHXWL7e1AUg3IHl382sQ602YI6Mxaid75x9suGCZvkfSvc05e6DV0rHLfJNf9F52m7nWe+7jJzr+uM1wT5L7mPfU4w7w39tg/7lG7qFdvHlzYzJqvJsz1OEBvrPZqNHgardsom7dLzitjBEheBS8YS0RNfeY5caUHPiPs0E6B5B5oXoO/XoFH8DPcJ0AqlorqmCo3tE088zo81APweEhIS0PXzww//yswcwArQelZvvg8drvrMC9B2B1qn1akVGoVMiUIpV8mlSplYJROp5CK1Uq5WqzQIrUaLg0Wt1igVKqkQK9PWjpK0QlnJm8zzX4evuxo7uiYgON5ioI00ymwLdqAJghAJpH7d3RccVi4+ZGofqnf5hyIoVVB5WTKySWv0oFWkOr1EXHFelFWuNtlovYFmTPjOBIvVamSs3gHmlIl04S6y6pxy1quSjEWKkG6k2cJQWtpA4RcahJ40EGpSq8ZztFalI1SUTkVTaqNex6DXo+YvNQ4saF5sBTcb4yTnQSmMzt+7vdeRd4+gsZ00aRI/1n9jQIAGAAD478O/bQECNAAAAAAAAAAAAAAAAAAAAAAAwP+ffv368b97YcnLy1Mqlfy+Pxm8Wgv8FeD/zR4mbQrQ/031mQME6AdLRkbG3bt3b926GRkVqVKpeOOZovBXdoXb5MAONIJ1pClCr5brotOMIxoMk16Qz31btOIi+e7XU3d+nrXypnLTJ/GHv5y/8ePw2pvSqgvyaS/KQ3tqVXKdjiQoA8n5VpxBhb6iIAhC7C7zSRQUHyJWnPELSqApki0CzcEK0CShl6tEI9YJS0/LQ3tQ9wvQFpNNRxGDa6UVZ8V9Z2vQkxj0+FlYLQtjxWKWh9ViNVBGmZBQkaK0BYJJO1zmH3V79EbIO19NfPwjn9W3NW98MfHMV8s3fNR+5U35skv6+fvp3GJcQtpisXHiJo42sReB9vb2Rg9Ap/jiyzvQ8JaUlPDDDQBq9fTp09BV8fbbb7G3G1AoFwy0AcHWfsYrHKwBbacNDdrhI7JhQoELsqJAe/Q6E2MlRj+Gsk+cNFLp1k7mJnDrOVPw3FfBC7ZGmj1p1M9sMRtps4HCpaC7DLLO2e6x+oZx9muyLhME0cNEXWeLei8RD1opGrbWfdTTLmOfdRvzvGDU08LBjeKUOYJuk8UluzzfvNPvlQ+G5i/vEhzX3oIy0ZN1oC2ehJpOHqtacVUz7imlqb3G6R9C2q9d8TvEqmueMX2NjMHK30vA2c/e9uA16ObxG0xohwPt5a1QKJbXLkNju27dY/xYA8DvIS4uDl0/P/74Y25ujlgsRvnJ2833oSNaO9B4jiQpErVrSULL7iX0pNaAlgSh02oJbEBrOP0ZzXgEReI7idBjVXK1RKhQqGQ+CZKsMlntKY9t38c0vBeXu9C/QyeLwWBiUKaa9KiHghD1XihccUOXU6UXuMs69RcuvSIf/7je2t7s101SfFQwY5ekY1d8dxBjwuWfjYzV1t6cONhYsNmw9LxmwVvSnGpZVDph9aZJLUOqaYMevZIYzWYz+xkKNovZajLilwUTbTHTVgtjMxtx9Wg0AePXluaYjBZcO56VnZvDzcYO/9kTJbUXerHy9e1w8uRxNLZjx47lx/pvDAjQAAAA/334Ny9AgAYAAAAAAAAAAAAAAAAAAAAAAPj/4OzsnJeXx//ipbJywoQJVquV3/enhFdrgb8C/L/Zw6SVAP3fV585QIB+sPTv3//u3bsffHA7JiYa/RNjH5MFf22mPnNg8ZmF0ukJJalWqdLG23KWqydtkRXudys/LX/6dljTzfaP3jaf/7r+2jebNnwcWnNdUnVRPne/PGWSRksQ6JicrIntTVydmVsxGQwGpVwtVUh6zRGu+dg2rslLzxgYhvefEWaTGVeAVolGPCYsPS0L63FfBWirjVAzof1kZack+ZtlfhEGvQ4f3Wy+9wH9WPFCYbGZDB4qGeERKs5cJpz8otu8A261F82bPopbdZN44qOg97954eLXNU98ZFrxvmTZRWL+m+TYVTafALORwdUuWavrXnnL1vACtJfFakHj9PKul9DwLlq0iB9uAFCrp0zJR1fFgYMHaJpGaYWuUk6AxrDln3nu1YS201KAZloL0LwDzdAmQm3oPFRRdkY8YYPcaKMUcpW7q4j2F8x6Sbvpy7iUMd74aQ1mg84Ummib0OCz6qrn8svE0HqpX2epm7ub2uQcliXuUiDtOkuSVizIrHHJrHFPXyruVy7pOV3eIUYmEAhIH+cBC2VPXw49enfIM6cG58yM6xCCLnsrY7BYAlRF+zRLjikSsimdlpbJFM7Obt3yhWs+NU991mL1NFmtfDH11gJ0G/FbBGjsQKNVhUK+ctUKNLaPPvooP9YA8HuIjo6+c+cOuoSGDRvKCdAoQ1nh+T5Y0fmeA81CsRY0Bq2g0LGfncAGReq5njrelkbHNrAfpWDQUwaCIBVStchdrtFLg1LEo5pUj17tsP27zssPxvWd7OPlZ6ZpE6nXicUya4T71JfUVac9Uqcphq6UlJ3UzntVn1Wsm7RRu+wC1Wee1uTNvYYYzVZLVF/j2LWGyveIxe/KRz4q7Zyn9Q406ElGr8PqM02xmjTqh6Yre6D5EQX2no1WK8pUO5b74OfTVgq0fZOfD+0CdECg/5kzp9HAjhgxkh/rvzEgQAMAAPz34d/CAAEaAAAAAAAAAAAAAAAAAAAAAADgP8bZ2XnKlCn8b13Yws+ohd/3Z4VXa4G/Avy/2cPEIUD/UeozBwjQD5a+ffvevXv3o48+jI+PUygUnO/1K+j0pFavVmhVakXGdI8BFfJxz0hn7Hadf8it5JSg/Lxg9XXq1c8yn/sofvl1RfVladlZ6Zx90r6zVTpShx6N69OasLLJGZz2L0aSJMXuClOwsGC7suGGT+wAI0lgA9rI6s/or46gZJwAfUoe1hML0Pjz9z2wgmWzWo0Gq8GmnvCsZMkJcddRhJ5iaJpGD+T0aFbg4peojdGbpWJ5+1jRgGrB+BdcZu9zLX5XUHZWWH1ZvPqG6aVP+2z80G/F+9KaK7LKs+q5b+jGrDYHRZpp2mix3NOpWQ36PhOaLQLt5e2FehoM+l27X0bDu3DhQn64AUCtnjxpMroqDh8+ZDIaKbKlAN2KVg50MwG6hQPNJhTvQBtNesLoEaApeEFadkYS1V+rUVA6nU6l0ojF0pjhwkdvtl/2ToRngNHT15Q9r33NCZ9V79PTdyg6D1VqSLnAVSoSSFxc3GQaN+9YcWimtMsk8YCl7mkLRXEj5eF9Nd7BlE5LKeUqdxexQOzmk+Q65XHylU+7HvlhdO0rmd0HdSJIqt8C+Yr3VYNXqK2eRlpvIilSLJJrzW7TX1Q2fWjrPgo1WlGm4PBqJkBz0cJ+dsTPa9DefBFotIpewVY11KGxbWpq4scaAH4PkZGR33//HbqExo0bKxQKUQpykx52lu+DKwKNg9Oa+aD4sMvQeFYl8R1F7Mcr8D40BxagKU6DplEfQkPIxSqJSE6YJFHZ4qnPEM98HLL96+SSl6O65XlbvIwyscbsSeY/7lNxyrLoiHLxUenSM8qlZzUV76mWX6LrzoYPKYqmzQxF64MTmaHLmbLjVMV7ygkbpd0mqHzDDbSeobS0Hld9ZvCnKuAi8Fh0tpjuBdeCG3FVaDtYjOZXm4FnVnaC5edEDF63T4Zstnq390YvbyGdOl6+cgkNLPrxhx/rvzEgQAMAAPz34d7HQPDbAAAAAAAAAAAAAAAAAAAAAAAAwO8lMzOT/5VLZWVaWhrf+ueGV2uBvwL8v9nDRKlU/rHqMwcI0A+W3r3T7t69+/HHHycmdlYof12Axg6zTs8ZkEqlvF++R5+F8uGPyiZvc579hsvCI+5LTonKz4qrLooqUZwXl5+RFB+XTNsl7jlFSeiwJ4Y1TqaZAI2CbUDtGrVWLJbEjhDUXDYUvuRt9jLQBlzSlqWFAB3aE50KbWErQGMLy2LTqvVJY6XoGUc0Kbz8aT1Fo0PiHR5Wrko0h8VsNRttaK9YJLWFinovFo54yq3gFZe5b7kuOiZAZ1t1QbL0Mjahl16UVpyVlBxXTt+pHV5j8e+EBWiTGZfE5EQvuwDdhgPNCdA0bdi9Zxca3qKi+fxwA4BaPWHCBHRVHD161GIxkyRJM7z+rDdwRmQLWPHZzv0CNJtKvPpswtmErlKUnr1myKuviofWKSg9SWhIfFjaoJCpNYxoxKOypz8JnflM0LztPms/8VjyrrbfPIV3iA5lkEysQnkhl8lVKpVcqpRKZVKZOKincPpLgn6FCsZEGvS0nkTPgbMVZbNMqnBtJ5LpXOOGCCtf8zx0J3PPB2Nnro9afFQ7a480pAeJC74bjWb223RzEUUMFNTfNsx/zdI+yIjSEBeB9mppP3PhxVaGZpfN42c1aFaA9vTyVCjkTY+uRmPbsHo1P9YA8HsICwv75xdfoEto0eJF7u7uJMmryuTPlIHGFZ3tGjTJhq6Z+syBH89WgObVZ06GZmHVZzbtKRx4ndJr1QTKRIlIRvtIksdJinfTW7+KfOHzbrM2hIclm/vkm2a9TC56V1VxXlZ9Ub7yfUXdDXXdTVXt++TKq+0X7QpOyvboM9uw+KCh+oJm2kuy3rOVQQl69EJBEoyexK8bJhO+k4eTmhFmI6tBM/ZopT43pw0NuqX9zMNOg55skrL3J6CB7d2n15df/hMNLPppiBvqvzP/TQE6OTmZ/+ET+I/o2bMnP5QAAPzF4bMaBGgAAAAAAAAAAAAAAAAAAAAAAID/jJiYGP73LZWVERERfOufHl6tBf4K8P9mfwNAgH6wpKam3L1799PPPk3umiSXy3/Zf2btZ7zUqgmFTCGTSrvmWlJnKQdWy0c95Z6/o92sN5yLDroVHxUsPi4oOSFcfEy48Ihg7tvC8c9KotJVGjWhowhchZJTN/nyz/yK0WhEzy6VKAmraNhaaeOHHr2mmAgtzenP9wTotcLSUzK+AjQnQFttBtJiC1LOfk1c9JYkOoOkSHQ4tvyz3X7mwmrhi1xSJCUWSgmTsOs0UU6j27jnXaa+0m7Om1jgRqddegqFaMkJYfFR0Zz98jFPKQfNt3p4mY200WQyms1m3vJCh2zTgfb08PLyQt2MJmbPG6+h4Z03bx4/3ACgVo8dOxZdFceOH7ParNwtAZzrjE1IfWsBGsG6zyyMfckL0GwiOYpAm/AWqWF8o1Vz90mKj0iCOhMqBbrYsWNtNBnVKkLkLu+er3ryw4AtX0cvv0CPfFQe0kODMppQo/zGT81mt06j1mpUWrWCcHdS+iUKFh10y16kJgnGgGvH8meAnhz112oJmUQlFEhpX0H6PNn602Fvf9/v5W+6zt/RyTfcShlok8WIMgIlo1ymkqndRz0me+wLS0ahkTaYPbw8PL1xtBagUWNL9bl5tOFAe3u15wRopWLtuiY0tvX19fxYA8Dvwd/f//bt2+gSunT5Ut++fVUqlUajYV1lPDVyzrNjBeNY5co/s+DJsiX2I9wrBd0sePuZE6Bxvhto1AcloFSklMlllo6SfnNl1Yes27+KL93nO3qDaPZ+Sel7ipqrupXXibobirpb8vrb8vpb6tr3ybIT1ML9pupzhnn75APL5KEppNlGk1p0QPQig18EzNhuZtVnR2AJmg3Wb8bLX4bToPlujtmVDftkyOeltzc+uNXSP73f2++8iUYV0a1bN36s/8aAAP2npaqqil9rBvrH6ty5M0pkfkwBAPhrwqc0CNAAAAAAAAAAAAAAAAAAAAAAAAD/AUajsbS0lPt1y1+l9jMHr9YCfwX4f7O/ASBAP1h69Ohx9+7dzz//vEeP7nK5TG8XoNuwuEiKJNBfLECrlRqFQiEUiAOj9f0K6ZRCac5K2cgnXSZudZq2C2vQc950RTF7n+vM191mvi6ZsoVIzMOf8K9WEZSBZFhT0yFA42rQ9nWtlhAJZUG9BCXHtKWHvdt3Muh1XAloXoAe+Ziw9LQ8LAWdD222mq02q8Vk02rI9EWSyguirHKVyUYb9LTRxFhtfPlnXCKa9bMsJqxtmU1WjZySSOTGQGHv+bKBK90HN7mNecYl/8V2M/a0m7Pfde7brvPedpv7lqDwDenETfIhdUS3XA+GMaEXc5MJB3s0FvTVg9Ogm4ErQHuazWbU8439e9Hwzpkzhx9uAFCrR40aha6KEydPeHp6EDqC5gVoTpLEsJstYMVnFrv97AicO47yzwYjpddlVcqWXROnL1Bp1KROp9OjfKCNFMn4dDTlzm+//Jj/o7csT3/uO3OLzeipU0tRXmP3GR0bXbQWlCUmM2NgDBSjJxmRmyqwu2DJCeHgag06DOrlSFX0fCgtLRYrWqLclgpVAoE4cbx70xVyz5ddDn8zce2+IWnDwz18rRabxcPLik7D3UXaoYt71TldxTFLUBwuAu3V3sO7g4e3v807wObVwW4/3ydAc7WiHZteXp6eLYtAe7f39vTEAvT6J9aisa2rq+PHGgB+D2jme+GFF9AlhPj8i88rKysCAvzlcjmaEFFi4mmwpQDNTY33NGg7bPs9uLzGUPc0aN6EJpvZz/bUp1ECGmg026oUGqlYqVDJOnSWDJivGPu4Mv9F93nvuFadI1/9IvfZTxKW35A89VHHV77IWfuBrfamfOlFzcKD2uGr1TEDNTYfmtKhwAdE6YpmJN54dkRb2M3mXwN3Y2dWTn3GUyKeC9nSz57e3ihjPdCMGR0dVbN82SeffMwN6eHDh9Eufqz/xoAA/RcF/QASExPj7OzMDy4AAH8p+EwGARoAAAAAAAAAAAAAAAAAAAAAAOD34uzsXFRUxP2uZcyYMXzrXwRerQX+CvD/Zn8DQIB+sHTv3v3u3bv//OcXqakpcrkcS1ks91lcJIlrP2PTC/3BArRcIRZJ1Vp52jiv7lMVqXMUg2pkQx91G72h3fgt7SZtQ+E6aatgzDOCYWvFs/eQNef9xq3xDummx8fAQiYrPTcPtDAa9Qa9QqZS6ET9SkQNH5oGV5hJnQHvMZl0BCW3C9DhKbgCNFvM0kZqjP5d5IuOiKe/LOmYrKd0DM2gXWz5Z17QYsOKBWizyUqTVo8gIm2momCreOTj4tT54rRi0aAV4mGPuY191nni1naTtztP2eE2Zbtk3NPK3Dpl7mLPwFAPg54xsvYzWqIjcf4zJ0K3LgJtrwBtNpv2v7UPDe/s2bP44QYAtXrkiBHoqnjv9Clvb2+CIAx8AWgDr0iy8E12aJoLlmb2s4ENSm+kdDg0SkNob+XiY5LCPXKvjoRapdNhBZq2eJnSRvlU7g9+/JP2C9/U9FvsNn8v0XgpNCLFrJZTBr2BzTCTyWxiL1v012IxWkyMReyuCk4VVF4QD63Vso60ETuSuFgsBucBKz6iFYPOqCZkIxok899xTy8RlGy3Hfp+4KGvp5RuHBDfJ9jqZTNZTWq1RigWDCgXrf0nM2y5kcHlaD292nv7hXYIjPfxjfbwDsJKdKsK0Jz97AhHe/Mi0A4B+vGn1qGxXbFiBT/WAPA7CQ4OevLJJ/797zvoQkIcO/bumDGj0QylUqnQnIhyk58S7d4zv2Hf5OAam8PlNQc2nx0CNEp2lILN7GcETnM249E6SZBKqUboLLcEStOKROOfExS+6Vr5HvHqZ/2f+jBk1S3D8a+W3fh2y4aPgmrel1RdUM3YJU8ZT1A6miTwodCZY/WZTddf8J4d2Gs7/7wHbfed74G22CkQ35jghbLUA72WdOjQIT9/8vETx7hhRGza9HxYWCg/yn9v/psCNPDbQT+zc9d4p06dkpOT09LSpk+fzv0I3xz0cz1o0ADwV4TPYRCgAQAAAAAAAAAAAAAAAAAAAAAAfi89evTgftFSVFQkkUj41r8IvFr7cHBzcztw4MDdu3cvX76sVCr5VuA/hf83+xsAAvSDpWvXZJSGX331Ve/eaVKplHe17AK0Q+5C6AhWgMZQapVWIVcg3F0F3gFUv6m2LhPkXQsU/RYpBy6V5daLhzSKhzRJB6+SZpRLEkdLk8ZLp24n1n3i13AlZOQK76B4o4Gm9RQuW8tVrsXBYWR0pE4skHlGCWbsUiy/YAvtQZMEYzKyArRaNIIVoCNS9SQrQJuNNpLWjlgjKXtP1Gu6hqYZdGST2Wj1sOJg1WeuDrSZsTGUrX2QufdU/exd6rLjksnPChNGioJSZXEjZd1nSfoUSzKXivHJN0iGNsqHNskHVStzSqyd0zrQBiOGtZ9RWCx2ARrBmWAtHWgvL0+TCZeb5j73f8aM6fxwA4BaPWzYUHRVnD17xsfHR6vVYksR24+sGtkMe0nYe2okL0Wia5yh9XqaMRr9wkzRffVJw3TdRxNx6VRgPDFmnbz6qqR7gVKr16nVWpLSx6R5zXkm+PEPAmsvGYavUrSPkroJ3OLHuDz6oeecrQFGq95AmUy4wDkOVvI3mxizkTYbDeYWAjTKLsaIL3n+lgL7xY/WLZ5aJd15hKzyjGRwrUihEyoY517ThOuOB5++O3r3+/mTKnoER/tSDCUUSEwd3RYcUC2/ZOo63BA/gO4/w5i72GtYhX9mUXBkHx9PPxuuAG13oFvZz45o5UB7e3ujvFOplE89/QQa25qaGn6sAeD3g7IyNy+X+z8q4s6dO9t3bEvtlYLa0V6Um9y82BJWgLbPnHxbS7i8vh8uu5slOoZ3oNGCZHRqvUQo9wyT9i6SjN0onrHHbcFh9/Kz0sqLosYbtuNfLdj7eXbdDXX1ZVnFWdXsPcp+s7QMgw+Ckpm1mn+T+ow6sN6zw4FuGzbtuczHcFMeLvvs5ent5W02449lyMhI37Fj2w8//MAN4PHjx4YMGUIQePQABAjQfyHQj6gRERF5eXmOT3PiQD/Xd+rUie8EAMBfAT57QYAGAAAAAAAAAAAAAAAAAAAAAAD4XUgkEsevS2NiYvjWvw68WvtwAAH6wcL/m/0NAAH6wZKUlITS8Jtvvu7Xvy8nQJPozz0B+p4BrSPQX66N1Gp0chkWoOVyububsEOIoc9Ezx5TiPixsqTJ8u4zZKnz5H0XqtIK1VGZSp1RIpGKbGGivvOlSw4xT/2zY92Z0Oxi7w5hRj1ppBmGcWjQrABN07RKqZHIxEmTBcuvUflPWw1GPW0wEQQlU4tGrhOWvSfjBGiL2UKo6ehsWelp0finZT6hBoqkGSONK0Pb7WccVquRtnl2sHQdSRds0pQekxa+Js5YJAtKVim1Elc3Z3NHUeQgeZcJiqR8WddpUnT+PWbKM0t12Qs8E1J9GdqExU+7/fxbBGhPVoC2eVgPHHwbDe/UqVP54QYAtTpv8GB0VZw/f87X1/cXBGgMamxLgKYoQ/sOtoxJvmPXMFNf0MzdJys+LJ/7unL6duWy88aFr3t1TLHobBr/SNPYquBHL3V67GPb9O3q+FyVgSGlIrWLk1Bjdh2/Uf7EZ0EpY20kQePLmsGBTWi0ZB1otBS7q4JSBZUX+QrQKA/u5ZUFB8Zqo3VWs69y5suyBQck4b21ColW4Cp1Fwg8Il1H12pe/iD59E/5Tx4YmT42mjKTLq6CXrPl9e/bivcxhbtVS46rK0/TS0/4LD8WteTVzj3zOnp48n5zCwHa0x72dbZDSwFardr47AY0ttXV1fxYA8B/SmC4x/J1RddvXkFXFOKLf35RX18XHh6G/stKEATKTm5ybAU/R7blQHM53SZcgnMJz6U7dp9RtutpvY4mNJRIIG4fLe09Xz5ivTT/RbfC/S4Lj7qVnhZWnZfVX9OtuKKovCCuOCspOaGa+aqq3xyt2YqPYTKhyZCVm38Lv0WAbqY+c+D5jv3QA7TLaDQmJMSvWl3/yacfc4P2wcc3n3xlSY88b35MARYQoP+KODs7o5/lHR/rxJGZmQmloAHgrwKftyBAAwAAAAAAAAAAAAAAAAAAAAAA/C7S0tK437IUFhbC70db4erq6hCgFQoF3woAvwYI0A+WLl0SURp+9923GRnpEqmE0t/zt+5BkTodqdOyAjTnQOtIpVwtl/IOtNBdzFiIuN623uM9+0619i4w95psis+iO0QQpF4jlyrFIqm7i0ihFft2EWcvlVeftGz8Mqz6cGj/GV5eQSa9nqFpxmhmNWiGMRqNFEVJRAqDj3DM05L6m+YuQww6NaPT2gXoM/KIXnpKRxtIk9Fblb9VvOhdUeJwnZ7C8rTJzGA/k60AbbFYTYzV6mVJyGYmP0NWnlXO24dOQBqdQdBWQiyUS0RyoUDk7uauZcS+car4QfoeY42pEy29xnglpXcICvWmDey5tcTSXIBGsAUxWQGad6A9vTxRN08vj0NHDqLhLSgo4IcbANTqnJwcdFVcvHQxIMBfo9Gw4mNzKJSGKPgt3orkvUisRFIGqweTMd0662VD8SGy4j1tzRVl7Q1l7fuqFddVK67Q1YfDx5V3zy4KXnEofMMXfksO6frOUXr4E2oZqVWRBEpepVLoLumU7l5zzlj+dqBXEG0wGE1mEx9owYK+igXKjr1wBehhbAVodFXzlzznQlpsKBUsRg+NmuwzR1p1QZJZojRZGAPFoPPXanRigQLlbGg/98XbzQe+zXz3uxklT2TE9fPKKdOXHCZXXCarL6lX3lTV39LW36RXv+/beD1q8auhCb29LRa+CHRr+7lloA5cEWhOgFZr1M9t2ojGFv2/ix9rAPiPMJi1EX01QT1lvXIjntrU+PU3X6HrCnH58qXZs2eiSw4lEZoMuRzl/GYHP1cHmuvcJlh5duDY0qM5DgvQGjUhFIo9QmRpheqclbIxGwVTXm6HHejD7ouPCUtOCpacEi45ISw+Kip6R5H/grJXPkmzFaDxbIU/KIETnH8Nrko0G2070NxUZ4ed6rD6jCY+NHEHBgUWzpl97txZbqB+uPOvLa88PmBMbORAafoCdcdEih9ZAATovzL3a9DTp0/XarX8bgAA/sTwSQsCNAAAAAAAAAAAAAAAAAAAAAAAwG+neflnX19fvhWwAwI08J8BAvSDpXPnzigN//Wv7wdmDUSvWvq2BGhc1LK5AI2CIrVanVKuwg60HIVSJJSidR2pMZjURptGbyC0Wq1aqdEo0VetVqNRKLBz6e4m1tCSTn3Eo5pUDVe9n/squnRvaM/RXjYfo54yYgGaDZqhNRqtSCwJzxKUnVbPe81s8zGoFZRMJRrBCdC99aSOVmt0PQoklRdEQ1cpPHxpPYXLP1usZpuHFYWRtpmtloheptFrqPKT6pJjslFrpYlDNN5BNK03alWUTKyUSeRKhUqlVMulSvRCpCVU6MxNRgN6pJE26UmD0djafjaajRa+8q0dzgq7T4D2bu919N3DaHjz8/P54QYAtXrQoCx27rsUHBx0vwDN2c8/J0DjNdLQZTA97ili7j5t+Xva6svy2hvy+lvKVbdRyFfeJGuveq08Hf7k7ai6K8ZhqxWBXdQatU6t0Ol02MikWTVSIVMrdaJByyTrP/PNWeSJsokVnx0CNHagOQE6uJeg4oJ42EotjR7JGHFysVc89xelAqUx+8Qoig/JZr4iC07UUwSu5W4xY4ESragUhNBdrjG798wXPXok+K2vB1cfCJ31mrr4iHzZJcnK95WrbqkabivQma++TdRft1ae8B632hYQarVY7fbzLwjQ2IHmBWiUgBqtZtOWZ9HYVlRU8GMNAL8fLaEOS6HiswwhSZRvjDwgQTVkUsqr+7b9+OOP6OpC7Nu/b/DgwShJVSoVZzazhnNzuKmzNVxOtwkWlluiJ2kDRVM6g1qlEQkleossbZq+7yL54NXS0Rvb5b/YbuZrznPedJ33jhuKOW+5Fr4hKnhJPvoxIiGTpkiDgTYwDM3ey/DbHOgWAnQbsInPg6c5jAd6qUCZmDckb8/re7jBQRw49tqEuf07pWiCusnDUvQ9J1CD5tPt/cGB5gEB+q+OQCDIy8vjfsZHoJ/30TTE7wMA4M8Kn7EgQAMAAAAAAAAAAAAAAAAAAAAAAPx2OnXqxP2KZcqUKXwT0AwQoIH/DBCgHywJCQkoDe/8+05ubo5YLNHr9azzfB86Ukc0E6C5NoLUqLQKmUohUyqwDK2UiVVSsUomUiukapVKrVFrtBotDt6C1iqVaplYKRHJKas0ZrCk4Hnt4x8GPPdFXNHW0C45HiabyUAbGTNjtDB6g14mVaoZYdZyYd1tQ//ZjFxCSBSikeuFFefkkX31Wp3eI0I6d594zhuSyH4kpaNpI222Gq0eVpPZajJZO3Y2Da4yLHmXKDspn7BR0n2i2jdcT+sZSksb9DSuNU0zJKEn1Oi7IFBoVTpCqSdVDKVh9CSWsFn7mYt7WFqVf0bYxTDOfkZ4eXsyRqZDB58TJ99Fwztp0iR+uAFArR44MBNdFVevXg0JCUGb2HRshkOA5h1ouwCNQ2/QKPT+EfSQ5fSUbaoFhxRLz+vWfxDUdNtcd1OGTeIPdKtuq2vfJ5ZeIOe8QiYOU2HVX6HTanQUNiIN6KrnLmOdTidyl3vHCRcdIGrPBQYlMpSOcQjQ7EprAdrQUoDmLnqL0UaQRF6dtPKcJG26hjYY0ZOg43O+JMJsNlOkXiZRC4USayf33CrljN3yeQdEZaeVq697NN6mV91SNH2gXf8RWtfV39Iuu2RcsNecMgo9zmrzbClAt4JzoLEA7YkFaJtNS2i2bN2ExhZNENxQA8B/QFgXQ9ZMS9fBdHgPfUgXKjhR5xMtC0mmZhQPP3YaF/VHfP/99888szEpOQnPbBoNTtV78Lpzm/Bd2oLVnu2gLcpAG2g0SSkVKplULpGIkgab0go1fRbKc+tEIx53Hve806TtTlNecirY6TzlRfdJL8iGPybPqzT7h5pIUo8ejMJownOW2YTj12FrP7chQHMzHAvOPE59Roc1m7t37/bEE49/+eWX3LBcvPbe4uWTovvQgV1l4WlEZG9954H6rJn0nMd9c2dYDYyGH+K/NyBA/28QExPjuNW5uLgYZTe/AwCAPyVctiL4bQAAAAAAAAAAAAAAAAAAAAAAAOBXcZSGiomJ4ZuAZrQpQPfu3Ru1fPfddwzDDB069MqVK6xQcff69esTJkzg+hQWFn7zzTeO9tTUVK69OTk5OceOHeP6IG7dujVr1ix+XzP8/Pyad9u9e3d8fHxRURFav1/LRp03b97seGp0zPr6+lZ9vL29169f7+iDOHPmDDomvxt4EIAA/WCJi4tjL9Wfhg0bKhaL9T8nQLO6cysHmsJBoXWdliS0OryXoEjCQBJ6nY7UagmNBqthrPxMEFq0m8IWJ6XXqLRSkVIqkTO+kuQJkqJdhue+DH3m484zNnSK6uVhNJto2mi0MDqKEAmlvsmCOftlS96lvUI1MpVw7NOSyguaLjkW0khkVgnKzwkzS9UmG21AjzEzZrPFaLT6RZgziuiFb1NV55TTtkt6z1IEd6YYI0OqGYqgUVcj5zGz9WvNJouJMRtp9KwWM22zMKjFio5jMptYU/QeJpOJrWvLe2D34F1QzsrEUqaXtxfN0P4Bfu+dOYUGd+zYsfxwA4BanZGRga6K6+9fDwsLValUKOmw7ozNSBzsGrtkYcVIzn7W6zR6rZroNsQyai1Z8KK86KDgsevtT31b9OwniXU3VS9/lvn2P2eu/dC6/Ia07LR81BqlrQOhUhAojygDReOkwjAoExiUYrRSrpYqJCmzRGs+to1f46VnDAy6xlsK0BJ3ZXAqK0DXta4AjcNq02mY8P6y8vckk56T+3QyUDp8ZwFOLi4zUBerB1oaaZNaTgndZTHDBGOec517wKXmkunNL8dt/iS27pb8xU/7n/u6aesncStvSpdfJYsPGEattLT3M5uNVl59vt9+5rAXgWYFaKuOJLbueAGNbUlJCT/WAPA7CYgihpXRkxtsI8ss/fONcen64C5UUALlH6v1DpfEpXlWrZp38/Y1PG3evfvxxx9VVVYGBwcrFEo0JzruZWiewq3ge7QFrz6z6ClWgKZpUocFaKVS6e4q9PAl+s+0dpks7TVHObBSllsvHPao+4j17qOeEI18TJ69QpZbre+W42Vgb5jgBGiU7rgGNML0W6pA8w407z3b4dKZ/ZQDbD97eNhQmoeGhZYsWXz9Oj8Un37+4ZoNlT0G+folSEK6ayL7UPGZVO/x+tFl+plrzTOe8B5VS8akK7UEP85/Z0CA/p8BTanopxLu5320gvKU3wEAwJ8PLlUR/DYAAAAAAAAAAAAAAAAAAAAAAADwyzg7OzuKQsFvQ9vklwXo1atXs0JFC2bNmrVhwwZ+oxmtamy32Qexb98+vgcLJzq3wvHUrQRo7sTu5/r16wzDcH38/Pw++ugjfkdLoAr4AwQE6AdLdHT0nTt30FU6evQoToCmuA/vvx9WdL7PgUa9WauLWyHZqrVsUKSe0rF6NNcTi19sVUs2SB2lUmrFAoVMLrOFSvrMkZYfMG39JuqpG13G13Xs1MXKGM16xqBSqmQaccocYe016+hH9alTxbN2KctPUuMfpQYu1pQdo2a9quuYQhqMWICmDeb2QebUyfScV6ml59WFe6QDShShKTqzB0MRjJ5kCz/rjWajGUtezcJqsVnNNrPRisJiZoUvVgDjhbBmsEInjhY49DDOyWQFaIamgzoGnr9wDo3tiBEj+eEGALW6f//+6Kq4cfP9iIhwXoBmwV/v8yZZMRJD6fRqOWFgtANmWQfXKQp2SOe+7Vpzntj4QVT9DePGjzrd/Hbrya+XN902L7smKT8jn7pDEdpTq1bp2CqwDA62nDkL1qBRVkoECiZAWLBd0XizQ2yGkeSKQHMCNItdgBbdL0AjTLTVYFVPfFZaclySNIJg66ZjiRrt4jLCkS8WxoNQ0DqjNGWWaOxmt8I3XSve0z77Yeza29aG2/SZr1ff+vaZTZ8ErbghrrmiKT5I5m8wh8RaGIMJPRWbVY7bC+6DF6C90JOSlG7HS9vQ2C5atIgfawD4PegMmsx5ujkvqRbuIYu2ehQ0eQ4tNvccTnfqSgXGUUHxpH+Mun2ENDUn9InnV331DV/2+OTJk/lT8tFkgtIZpRUnMOOcbUbzLTah24B9IA9FsXMlWlC0SqFWKpRyucLNVdAxjulTYE4cL0+cIO85Q5m+iEhfou5TLO+9QJ6xkOo1sr3VZkSTL2c/txCgEb9aBLqV/eyY21iw+mzzMJqM7dt7jx8/9tBhvhj2jz/9+8XXNuZMSAhMknXsqgpPIWP6Uj1HUEMX6Avq6fxGctJ6xaRnFdk1gr5FErMPFIEGAfp/CpTRxcXF3I/86AcTgUDA7wAA4E8Gl6cIfhsAAAAAAAAAAAAAAAAAAAAAAAD4Zby8vLjfr0yfPp1vAlryCwI0x86dO7n24ODg5jWV169fz7Xn5ORw7c2PMHTo0FbdHE+EcIjIjmPeuXPHUVvacUBE82M6Ol+/ft1RztnR2eFVc+J18wOip+Yav/vuO6gD/aAAAfrBEhkZ+d1336KrND9/klAoZL0rDHaW74MrAo2D05r5oFDo0JIzobH+zNrP2PjijE68wjbrHQI0Cj1lIAlSJddIhAqFWuYTL84ul6864/XSvxLWnkscUhIQEGkltKRUpEoZbSs71L70BLXwkLT8pKL6rLryjKbqjKbuqnfpqwkR3fwJijJ70UnDmOkv0NUXiAVvy3OXy6IHEDYfWk8wlA6LYEaj0WwxWUxWCyc6oxV7cOozbmymfrVVBxPB2s9cOLBylTFZG9PLE73+e7f3Rt9heETYtetX0djm5eXxww0AanXfvn3RVXH79q3o6CilUonz5VfR6UmNXiFV02bNoAXWzGrZxM3iWa+7LDjiXnLaveKCcN1N79c+z338g4Caq9Kll6Qlp6TTXpZGp2uwAG0wYN/ZxKnPDowMzWjUWrFQEjtMsPwKXbjD2+xlYGhWfGYFaKPRJHZXBqUKKs6Lh63U0qzebMMFndlMsNi0akPSWGnFOfHwBoWHL62naPQsFquFk6Qd6WMx20y0VSnTUB7ClDmiUc+4ztjjsuCw+5L3BEsviVe+r936cc8tH0fW3pAvvyqtOq+c/zYx6UljVHcLbTCazWY+y/ANBly0hC0C7eXthZ4Nvdi89PIONLYLFy7kxxoAfg+Mhza7hMzfKCneLyg/pCnZa5r7vOeklZ5ZM6ydM+mOiVRQPBWcQHaIUvjHqvIm9ty1b+udH/EdRD/d/enV3bvSM9JJikTH4WxmPOfZsxuv2BOda28TdnZEDzSgOdRuRNNaNaGQo5cKpUwmF7oL/TrRvcZ4dhtP9ZxCZiww95tL95ii65NvTcrwsVhNpO6e/YzC+J1tyjkAAP/0SURBVNsF6PvmPMc8h/PM0xO9LJgt5r59+2zesun7f32PvmvE4RP7p8zPCu+pDUqShaeQ0b2proOpnNlUfi09pYEav0Y5fato4Vui8U+7ZCxxSS+WeQSCAA0C9P8a6H99jtues7Oz+VYAAP5kcEmK4LcBAAAAAAAAAAAAAAAAAAAAAACAXyY5OZn7/UpaWhrfBLTklwXoVgWYHdWaW1VxdjjHqampfBNbidmhIHM4DOb7ZeXmD0S0eQI/15k7K0c7163VmaNvMzIykt8AHgQgQD9YwsLCvvj8C3TpVlSUCwTuJImtKwT5M2WguYrOnAZNsoHVZ4f9zIIfT91zoLn15gI0/kqxH/HPbqIDKmRqiVCuJqXBqeIxTer11/12/iu5/mhC2lif8B7MhPXGorc0ZWcUVeelK64q626gUK28qa69ZlpxLmBUlX9MOjP+cbr6HLXkuHLkWlnnIRrvIFqvYyiC1utphsEGGPa7WMHLYraYjRYzY+WjeeHnVvCP4Lc4WtvPPKyK6YntZy9vvFCpVOkZ/b/6+is0tpmZmfxwA4Ba3bt3GroqPvjgg7i4WIVSgdPlF0H5Ren0Og0pEyv0RvWAQmvfxdJRj0umvNhuzn6X4qPupadFFefFlRdFOM5Jyt6TzD8inrhZEp6mUakISk+yxjN2nu8tacZoNKKklImVhFk4Yq206WPP1ElmnZY2GVkH2sgL0MGpgnJWgDY0E6DRHwNpsQYpZ+8WF70tjuqPn4RmaLPZhO1nNjiwVmmyMQaTXKrUGoVdC0R5j7lP3uE6e5/rwqPuZe+Jqy5Iqi4Jl14WVV+SoJNfclIxa7dmbJMxLNGKS1ej5MQiJpdjjmgJL0Bb0OvKy7teQmM7v2g+P9YA8HtgbNpBi3Xj10uKXnMpPehefkhWdoBavNs2Z6P3uGrPfpMs0X0MwZ3J4AQqKJ7wiZR17EJNWzjs+Gm+FjL6r+Zj69bGxsagQxEEwU54WIPmEpmbDtk1djpsC055ZidNPFHiA9A0mkCVCjV2oBUqtBQJpDpSExJjje1l6zc+oHu2b1SSt1+ADT0E9eSOwIMFaHwXAY8JLzjbuQ1azXb2qQ5lGGpHrxvR0dErViz/8KMPuW/28vWzpbXTY/uYArvIwnpqI3tRnQdSGQXU+GrD1EZ6QoMmf6No/l7hzJ3ug1e3yyh7JG2eS/8FUhCgESBA/+/RqVMn7gd/BMoevhUAgD8TfIqCAA0AAAAAAAAAAAAAAAAAAAAAAPAbSUtL436/EhERwTcBLfllAXrNmjVcC4ej3VHCmaOVgvxziESijz76CPXkBOg2n5rD0dOx6xc6O7xq7qw4ARqxfv36rl27duzYkesGPFhAgH6w+Pv737p1C123V69dzchI5xo5E4uy14F2rGAotMmucOWfWVilqwXcETj1mbef0TovgPH2Mw5e1qLRCkHo5DKVRCQnTNLobMnUZ4jnPgp94mr0hKe1+S8KFx6VLb2orr1OrnxfVX9TUXdLUX8bLYnqi1Tx24bSw+bKs9qJz8q6T1L7RmBljNSi42P12WQ2WaxmTmS2cMFhZoPfbiU53wcvhuHKt7wV5ghWyPT0YNVnhLcXPpzNOmBAxqFDfO35bt26cQMLAIjU1BR0VXz88UedExPkCjlKiV+AtZ/xUqPWSiVyrU6ZOtaSWijLqZWP2ehasNOpcL/L/ENui94VLj4hKDkhXHRMsOCwYPZ+0dDVUp9wjVpNkHqCprG9bMSFoFn7mVthg9ASIqE0qJdgyXFiyQGv9iEGPcka0M0F6HOiYXUtKkBbTDatluy3QFp1UZxVqjLZaIOeZkwMTg+2/LMjLCarFe3W03KZUiwVRg0WD1wpGL3RZcpL7Wbvc15w2G3xceGSU8LSU6IlJ0Xouyh6Rz7hWXlepcm/o5XWM+g8sFTNgY53z4HGXiaPpwfKPJTENKN/9bVX0NjOmzePH2sA+D0wVk32Et3EpyRzX3Vd+IZbyVvuZQeF5YcUZW/Ri172nvWEz8hSr9SR5ogUfXAC2bEz1qC9wiSxKZ7lKwtv3Mb1/hE3brxfXFzs6+urUqnQ/EjjUswGfk7k+VkBGoH7UgZOgHZMkWiaVSk0CpkSa9BylVyqFAnkYje5Wk5oZHqNEs3KLdVnFprGFd1Z95mFX2UnvVa0nANxurETG/qKEt/P33f6jGmnT5/ivsEvv/li7cZlPbOD/OLFoT00ESlUbH8qbRw1qtQwrYGZ3KibsE4y8yXBrFfcR65zyah8ZECVU0a5U29egOaH+u8MCND/k2RnZ3M/+7f6WRUAgD8JXIYi+G0AAAAAAAAAAAAAAAAAAAAAAADgl8nMzOR+v+Lr68s3AS35ZQG61S+Pf7n9fgHaz8+vuLj4xRdfPHbs2IULF7jHIjgBupUP3Zz7z8rR+RfgzsrhQzcHndvOnTtbmdPA/wcQoB8sFElu2byZu1z/+eU/a2qWBXcMRlesTqfTs2Im5zeznjOGczLJew08bPs9OJELw3rPWIN2CNDYh8b2M1f+mS2RyZpaBho1EhpCLlFJxHJDe2niSOmoVZrxz4tnvu628JjwqVuxr32Zt/oWveqW9sXP+m/+tGvdLeWK91XlpzWzXtb0LVQFdiYZI00S+OAMW/kSO84O79mhPreGk5t/A7wDjYPXO3kPE9vP3t5eaBs9aVx8bF39ys8++5Qb1SNHDqNd/HADgFrdo0cPdGF88uknScld5HIZm2eY+/OIQplGsAmoo1QKtVyuEAnFUammPoW63vPleasko59uN3mH0/TdWCae86YritlvuM543W3W6/LRa8ngJFKtJrQawsDoGYf6zC6xDM2uoNxTyNQKQtx/iajhQ3NuqZXUodxpIUBXnBcPq+cFaCsu7WyjtCbfzvLiI+LpOyUdk/SUjkapZ7Ga+drPbJZg+9nM1la32HQaWipWqWlhl/HSgStE2avdRj7lOmlbO3Tmhftc5r7tOu8dt7lvuc/ZL8nfrhjWoE6bYENHQ0+Hz8NkxIfgQEf14IOTnzG4ArSn2Yz603te343Gds6cOfxYA8DvgbFpcsuJguekZQeEFYeFxfvcFu51K3nbvfyQqPKQtuxNa/GLvtMf9R0y36tbnim0G8VVg/aNUnmHy3pmdXr8ufovvvqMfeG/e/jwoVGjR6FEU2vwPUUo0bgp8Vdhe+JazpwmjadHDL5NSKclNSoChVZNoHVSq1dI1Dotzm40g7Ki9T1omm5R/hlhd6H5qc+B/RYfDDuxcSlmMplQw6BBA3ftevnu3Z/QN/Xj3X+/vHdTzvikwM6K4C7K8BQqqg/ZfRg1ZIG+YBUzpUk/fo28YLP7rFfcR613yax2yqh8BC0zl7ICdBErQAfwQ/13BgTo/0kkEklpaSn3439MTAzfCgDAnwYuPRH8NgAAAAAAAAAAAAAAAAAAAAAAAPDLjBkzhvv9ihU+BvdneEgCtEgkOnWKr1F3Pw9VgOYeXlpa2ly55rh+/TrDMFwf4P8JCNAPnKCgwMcfX3fnzg/c5Xrq9KnJkydZLGaueqXeoWfavWd+i5Uzm8O32sHqlh1sPnP2M2d0cbWfubBDsw40/rh/Sq9WEmJXpUIljR4szmsUTH/Vff5h9w03w3d93m/lDd2WT1I++Hb3gX9OW3lTUXNNsehdxZh1iqBYvVbJ6El8IKOJwY7Xr3jPdu65X3YD7H7svvM9sIiJHUwvtvSzh4eHyWTyD/CfMXP6e++d5kbyp59+evbZZ0JDO/EDDQAs3bt3R5fHZ59/1q17N7lcjm8NYLkvj0gS135m8w4L0Co0KwkFYsaq6Vfg0bVA3nuBMrtWMnydy5hn2k14od2kbc6TtrlNfEEw6inByPXSxUeMFe/6D1xg8wrRabWUgWZoe9VnPlgBGqEjdWKh3DNaMHuPsuacR3CSgSQY7D8bjQ4Beni9lsECNK7xbDbadHpi2GpJ2WlR2gwNasWqpYmxNrOfuZTBArTJyug9jDZ9/GDl+A3SCZtEfZdIUopEmdXiIWvcRz/tMmFLu8nb2+XvcJuyQzThWcXgVYq8SktEkpeewudgwho2vpPhXt6hJ8GZ11KA9vJCKW80Mnvf2IPGdvbsWfxYA8DvgbZqBlcS07dIa05JVl2U15ySlh4QLHjdbeEbrmUH3CuPSisPU2X7vRe84D9llW/2LM/EgcaOSVRQPBkUR/pEKH2iFLnje7y8dwuvC//7x23btqb2SkV5rdVq+amOhZ0YfwZ2amSLQOOlXYHGgjONspidKGkDg3ZZLbaiuQv69e+PdqNsRTtx2GltPyOwAG1p5T87Jj5+jkOZZfMwmXH+d0lKXPvYo59/zivd755+u2D+4JAkwj9BFtpDF9GL7JJDZc3ST15BT2uiJzQqJ2xwL9jmMm6Dy8BlThmVTgOrndDKgKVOAyqdMsp4Adrmr+LH+m8MCND/q3Tu3Jn78b+oqMjZ2ZlvBQDgzwGXngh+GwAAAAAAAAAAAAAAAAAAAAAAAPhlpk+fzv1+RalU8k1ASx6GAO04JmrZvXv3yJEju3btGhkZ2cp4bvOpORw9Hbscne+3pX8V9NTr169Hj0W0OnPgPwYE6IeBRqMZlJ311ltvcZfrTz/9tOvVXf3799PpdCqVircx7TgcTexl8tImhmtsDq9z3Qfncxm4z/e3b/HSFk0b9DSlZRQSjYaUxg+T5K2WTHlJOOct15KTosoL0qrLkpc+7f/e14s3fBhQc1Wy9KJi8buqic+owrpTpNbAMLTJoXf9Dvv5ngTWJrx3aYe3LhGs/mwymTw8PbJzBu169ZV///hvbgyPHD2cm5ur1Wr4IQYAO127JqMr5It/ftEzpYdUJuWzpbUAjdd1BCtAYyiVUqOQo3lJ4e4qCIk39p1u6jxe1mOGMn2JIqtGOniVeEijZEiTJKde0qdYEjdE1nuubPFB5sl/BlcdDu473eYZwFAUYzAwRlxYuYUDTTMGdHCpXNI1X1D7vn78OquB0dN6VoAWKIN7CcrPi0es0tJGA80w6Pon1ExkpqzstHjCMzKfUIOe5Ms/Nxeg8YrFypA2q4el8yB64gZN2XHp7FdFqbOEQSnSqFxZt+nStPnijEpxzkrxkAYU8mFr5Dkr5NllTM9cP6PRxKCnZ+1nFGaHAI2wJ2JzB9rLC1eANptN+97ci8Z2xozp/FgDwO+BsWmGVBHTX5DVnJI0XVU2XlXWX5BXH5csftN9/h7XRfvdKo8Iq48pqw4Zy173m/984KTlfhn5HjH96OAEMjCOCozTeYXKgjtTBUVDjp0+yE4Fd7/44ou6+rqIiHDuniJ+wkOzn302xDNhS3AjFqANVIubhbgiz6wArWc0Km1MdMydOz+sW7dOq9Wi2YwznNF8xMFmREvuE6CbT3xcWqHkRbNwcMfgBQvnX75ykfsWbn5wraK+MC7N1iFGEpJMhPek4gdQ/SeT45fS09cwExu1Yx8TTnreZdxG5+zadukVuOrzwGV83BOg57n2nw8VoDEgQP+v4uzs7HgHIDAwkG8FAODPAZebCH4bAAAAAAAAAAAAAAAAAAAAAAAA+GU6d+7cr1+/AQMGuLu7801ASx6GAO3Ql9esWcN14AgODv7mm29Qu0Ni3rBhQ/MHOnA8UfOz4jp/9913TMsqzuhb6NixI7/BbhYXF7fq83OnBPzHgAD98PANMS9dU3jlOl/CHGXNunVr4+JiVSqVVqvV4yrObcDpmQh+uxmcy9UmWABjcTjQWOrC+jNt0NEUYZCJVRq9qPMoec5K2fjnhdNfc553wHXxCUH5WfHyy+pV13VLL0kqz0vK3pMvOKie8IwqohdJkQaUgNjuQvGr6jOCNaR/XYBupj6zYOHSky06ix5uMpm6dk1et37tP//5BTduNz+4tu6lhUnZHvywAkBLkpKS0HXy1Vdf9uqVKpViARpdu3jJJ5L9BgMdqSNIuwBNalSEXIYFaKlUJhKKQjub+06xJU9SJ4yTJU+R95gl6zVP3m+hqudUdXAPpVwpVmhFgT2Ew1YrVl60Pf1FaMnrwd2H2yxeRopkGBNjNOElYzeh0dNJhAraVzjuWWn9DUv8IFqnoRmjUYQFaGHFBfGI1awATRsZg4X2UE/aJF50TNxlOKGncMlZk9mIvedm5Z9NRhvKxIhUZuRqYtFBefEB8dDV0qgBSr1V4ezsTHq4d+onTxyrTMqXJxdIu8+QoUhfpMldYu2W5YvyEovadvv5twjQnl6eKBNR5r/59j40tlOnTuXHGgB+D4zVLkCflDRdVTReVTZdUzZcVa48J6s8Ki7e5zZ/j2vJ2+5Lj4lqTmiWHvIs3R009+mgcZW+fcZaI1L0gfFkYBzpF631CpVF9bSV1xZeu3mJnRbunj9/fvbsWV7eXmqNGqUbO9vR7BzI00qDxi2sA61HQRkMOGgUejZoPSORyLp374aOvGXLZvT64NCaOdW5bUys/Wzvyc96fL12rD6jCRSl0shRw996+03utL/57qsnN69KzenUIUYalKjp1J2M6kOljqZGlhimNRjzm8gxjZJxG5zHPd0up65deiXWnR3qMy9AV2EBekAFWwEaC9BwUxAI0P/LOIpAZ2dn800AAPw54HITwW8DAAAAAAAAAAAAAAAAAAAAAAAAv0xhYSH3+xWoAP1zPFQBGh0zPj6e6+Pn53fq1Cn20fcEaIcSjR47YcIErjEnJ4drRDQ/K0fnVoflzn/nzp2op+Opr1+/7uiDKCoqwoeDCtAPDhCgHxJ6ozasjyY4Rdozq9Pap2u/+JL/1PsbN95ftKgYXfDo1YwgCM7NYv3Me5AUtjYR/HYzuP5twllfPPwWbSBRMDoNJZMolFpRwhBNZqVi+GOSiVudZ+xpN+8dt+KjgpITgpJT7qWnhIuPCRcekc7aoxj1qCaki57UGWjGgD3I+z7lv224EtH2aNuBxmYYb1zywqUnrvqMNhmG6RTWaXHJoitXr3Bj9d333zyzvan/yMioLEnGAk1gHMkPLgA0o0uXRHS1fPPN13369JZKJZT+3l0E96BInY7UaVkBmnWgdQSpkKnkUocDLfHsoO8ywKPPZM8+Uy29C8w9x5si++o9A7VajUYmVQjdxUI3kdYoiswST3hKveaGz4bPIgq3BCUMtJlsRgNlxEWWuWrQDEMzjEajFYslkTmC8jPaOa9YLF56A8VwFaCxAN3ACtB6I6Ghuk6QVp4XDV2t8PDFLiY6Dlf+mROgTUabyWTtmGjKq9YveVe95Jh05Fpx19Eaz0AdOiuxQC4WSdxc3BVaoWcnZVQ61W00kzrBlDbOo9sgn7CY9kbGhO3nlqBk5XKQh01KNh95B9rTy9OInthmfecALmNfUFDAjzUA/B5YAVrLVYBuvKpovIKLQDdeVzZdVzZcUax4T1p+SLjgdbcFr7uWHRQsPyWrOWGoOtBhycsdC9cHj1jUocdQc2hXKiAWV4PuEKn2CpX2HBiybmPtl19/zk4Rd/fv35+bm0sztEajwRNeKwe6GfYmbD9jBxpr0DjdDHqa1qN8ZQRCQY8ePdAxt27diqZalDMWs5Wd+34eToBmccx3KJ9QHuE0MxlTUlOeeXbjd999iw7740//3v3mtryJPQLilX5xipCuVHgKlTyYHFykL6hnCpoM4xoVo9e5jH7KaUiDU0YljsxqNpbhpUOA5ternPrMd+kHAjQLCND/w6D/KnPvAJSWljo7O/OtAAD8CeByE8FvAwAAAAAAAAAAAAAAAAAAAAAAAL8MCNC/ysMQoBEO4bg56Cm2bduGVhwCNKLNnuhQV65gl7H5WSHa7IxA/R2nhE7G4U+34vr160zLytDAfwwI0A8DjVYd2oNMyDKEJOl9YxR+ccpBY5N37H7uXz98z13DR989Mm7cWJPJpFQpSYrU6/XUffWgsbR5H5zL1Sa84NUM1vSiDRSjVevkcrlQKIxOp/ouUA+sVgxf7z5hi9PUXc6z33CZ+7brvHfc5r3jWrjfddYe6aTNypwyg0+wAQvQtMFoZCwWS3PT65f4RfuZFy3tsPIzxmQ0tfdpP37C2AMH3+HGB/HGwZ2jZvYK6aEK6iYPT9GnTqKy5tFefuBAA61JTOyMLpjvvvu2f3p/iUSCkgkLzi1BudNKgEZoNYRCpsQOtFwhlylFAqlKoSYpjcGiZixaiiI0KJMVWo1aqyXQUi2Tyd3dxCKhmPGRJo6WzH6JfOqzwCc/jMlfFxiRYmEYo4E2MmZsMDMmBp2GTKLUGoW59aL623RaAUOoabG7MqiXoOIiFqBRT0JjsIUoCveI5u0XR6WjVwKGZmiTxcTZz2azlaGtvhHmjCLDgje1FWcUBdskvaapAmL1RqOR1BgUErVUjE5dqVKpscwtU2i0KkqvZRi91WQ2G816Cpud2MVsjsmIMpRPQg4uL1sK0CaT0cPTdvAw/n9Ffn4+P9YA8HtgLPYK0FiAVjZwAvQ1Nq7j5epLipqTkiVvC4pec12w17XqXWHte8rlJ0xVbwUu3hE6oylo8Nz2XQaZghPJgFgc7SOUPpHK7LHdXn59MztR3L3zw52NG59OTk4iCEKnI/CHHtD43h9uDrxXB9p+VxACz5b2e4Qw+IYFRuAu6NkTC9Do/7doOkYteCZjb/7hdecWsO24SDo/8bEzHJ7d0D702PCI8MqlFTdv3eRO8uTZwzMWDQ9JJn1jZcFJRGg3KiGTypxGTVpOT3+UHt+gGrXWbfSTTkObcMnn9AqnzKV2+7lZYO+5xilrudOg5U5Z1XYB2p8f6r8zIED/b4P+cbk3AQIDA/kmAAD+BHCJieC3AQAAAAAAAAAAAAAAAAAAAAAAgF8GBOhf5SEJ0IihQ4dyEjO3q76+Hh1/w4YNaLO5AI3w8/M7duyYo+fOnTt1Ot39Z8XBdXYozqj/7t27mxd7RqA+mzdvbq5B37p1izsBvgfw/wYE6IdBaKJh0ExLtzw6vIc+JIkKTtT5RMuDEolJc7LfObqXv5rv/vTSzpf69OlDkljq1bdwmznbuW34Lm3BKV0O9CT6i4tcapRapULp7ips30nbbzaTUigbuFQ2ZI3r6I3tJr7glL/DacrOdgU7XabsEI3bKBvepE0bazPQ7PFoA83QvO/1mx1o1n6+T4BuU302mdGevv37vvDC5u//xdvhpy8cmVM+MqIXFdRVFp6mi+ytTxykHzSbmfuEb/Y0K81ouUEGAI6EhAR02fzww78yMwewArSe85tbo8NVn3kB2u5A67Q6tUKjkClRKOUquVQpE6tkIpVcpFbK1WqVBqHVaHGwqNUapUIlFWJl2tpRklYoK3mTef7r8HVXY0fXBATHWwy0kcbFY7EDTRCESCD16+6+4LBy8SFT+1C9yz8UQamCysuSkU1aowetItXpJeKK86KscrXJRutRtploqwdKIquRsXoHmFMm0oW7yKpzylmvSjIWKUK6kWYLQ2lpA4W1TQTKcUJNatWERkVoVTpCRelUNKU26nWMgaaNRnQqXNzDYjHzeeiAE6DZxOTw8vJE5+/d3uvIu0fQ2E6aNIkfawD4PdBmTV6FbvoLsmUncQXohiuKhqt2B5pdNrEadP0F+dJj4kVvuhftdln8plvNSXH9Wc2KE56V+0KKt4QV1AdlTfOO688ExXMatM4rTBYYr8ufm3f05NvspHH3gw8+qKyqCAnpqNZoSIpkvWYMPxeyGjS/2gyuD1uxnXZ3F/SwC9CoM0ouNDehCY2d+8z3AoGX7GzIToiO2Q19Rcf06eAzOX/SseNHuRP78JObyxrnx/fx9IkSB3chOnUjo/tSfcZTYyvp6Y3MpCZiVJNw9BNOw9c6ZS3D6vOAn1efB61wGlTLxgqHAC0BARoBAvT/Np07d+beBOjXrx/fBADAnwAuMRH8NgAAAAAAAAAAAAAAAAAAAAAAAPDLgAD9F8WhZbdSpYE/DyBAP3D8I4khpYb8Btvockt6vjFhgD6kCxmUQAXEEl7h0sie5uLqgotXz3J21FdffdXY2BgTE41e3AiC4DwtDt53vg9+d1s4yloi0JaeQl/xR/yrVViAlkllYomoW55Hz2ma5AJ5/8WK7OXivEb34Y+5jXhcMOoJyZBGedYyeXaxLSDMQur0fB1N2mAycdoXAvtevwJfAbolDvuZLTHr6emJ2hiGiYuLXVlX+/EnH3Gj8cHH769YuyApw9MvQdKphzaqD5UwkOo7QT+mQj9zrXnGE94jV5Ax6SotwQ81ACDi4uLQxfPjjz/m5uaIxWKUCLzdfB86orUDjTOKpEjUriUJLbuX0JNaA1oShE6rJbABreH0Z5SgBEXiSrLosSq5WiJUKFQynwRJVpms9pTHtu9jGt6Ly13o36GTxWAwMWYjbdKjHgpC1HuhcMUNXU6VXuAu69RfuPSKfPzjemt7s183SfFRwYxdko5d9RSJ7WeTxWRkrLb25sTBxoLNhqXnNQvekuZUy6LSCas3TWoZUo0zmmGMKBu5xLKYrSYjejKzibaYaauFsZmNuHq0yWwymnjpmcdkZJXNe7ci8PACNCc/o/z08PL2Qunp69vh5MnjaGzHjh3LjzUA/B4MJs3gMmL6FjmuAH1NeU+AdmjQ9mrQqL3unKzyiGjhG25Fr7mUvuNed1a66jy54phf5esRC54Ln7gssN8Ez8hUQ0AsGRhL+UVrvUJlUT2tpStmXb1xkZ1A7p46dXJy/mQ0y6CcRXMg5zfjWexn4DrgOwkYxt3d3VEBGiU5zdB4LkNwxZ4RvAPNbeL25hMdSi+0L2NA+ks7d6DXInScb7//+tltj/YeHO4bIw+IV3VKpiJSqZ4jqGGLDFMbjPmN1JgG6aj1ziPXO2Uvx+pzRiW2n5uHw37OYtXn7JVO2XVO2XYBuvc8175zQYDGgAD9v42Xlxf3JkBeXh7fBADAnwAuMRH8NgAAAAAAAAAAAAAAAAAAAAAAAPDLgAD9lyAyMpJfsxMcHMzVb16zZg3fBPzJAAH6waIzaDLm6gpfUi18jZy/zTa1yXPYYkvqSCa0mz4wjgqKJ/1jNO0jZMkZ/qsfr/j40w+wtHX37pUrV4qLF/p08FGpVDqdDrvLdljnGdPciOb3tQUvdt0ToLHkpVUTCjl6+VQK3EWEXp46yrPbZG3COHlyvrx3kTpjibbfYkXvhfI+C1SZ8yyRyZ4UyT3wPgHaxH/g/y/TovyzQ33GfqXN09MTrRiNxsBA/8I5s8+cfY8bgW+///qZ7U3pI8IDE6UhXdXhqWRMPyp1FDV8kb5gFZ3fqJu0XjHpWUX2MkHfeRKzj4YfbgBQq6Ojo+/cuYOuomHDhnICNMoRVni+D1Z0vudAs1CsBY1BKyh0FC7HzgZF6rmeOt6WZjOMDZRcBEEqpGqRu1yjlwaliEc1qR692mH7d52XH4zrO9nHy89M0yZSrxOLZdYI96kvqatOe6ROUwxdKSk7qZ33qj6rWDdpo3bZBarPPK3Jm801g9FstUT1NY5da6h8j1j8rnzko9LOeVrvQIOeZPQ6rD7TFKtJo37crQZsWC02FNh7NlqtJj7zEHxCNgMnJBstsG/y/rNdgA4I9D9z5jQa2BEjRvJjDQC/B4NRk11MjF4jLz0garymaLyKRecGrvxzq7imbGIN6RXvScsOCRfscS16zbXqqGD1RcXqC6YVR4PLd0fN2xA+piwgdbgttKs+IAZXg/aN0niGSrtnhjy2ccWXX3/BTiZ3d726K31AOk0btFot5zdzojM7q7WG64BwCNDbt29H7ailzQziYec4lDjoD5ofUef4+LiGhlWffvopdw5vvPPyyILe/nFK/3hFxyRdaHcqKYfMmaPPr2OmNhnGrFaMXOsy6vFHBtc7pZe3oT6jwOpzjVMWiuV29ZmLlViATl/ilDzRNXWa1OYPsyEI0P/joETm3gRA/8p8EwAAfwK4xETw2wAAAAAAAAAAAAAAAAAAAAAAAMAvAwL0nxxXV9fNmzffvXt3586dCoWCa/Tz8/voI1zY9c6dO6mpqVwj8GcDBOgHC+OhHVRC5j8tKd4nKD+kLtlrmrfZc3K9Z/Zsa+JAOiQJO9DBCZRftLJDtHzAiPjNLz7x7ff4JgHEocOHRo4aaTKZVCoVRXHyMjahKVZ9xnaz3YFm138W7oGsMo1XaJomdXqlXKVQKJUKpdBdTJCKpEyvlAnGbhN0fWbTAxaYe80gU/L1vce2D4n2pHRYnnbYz3QLARr95QWwtsFaWDP7GYuWXGlZrvCzh9Fo9PT0HDIkb8/ru3/66Sf0Xf/407/3vvPiqOmpId2UwcmK8BQyui/VbQiVO1efv5Ke0kBNWKOYvk1U/JZo3FMuGUtc0otlHoGgfAH3iIyM/P7779C1NG7cWKFQyF78GOws3wdXBBoHpzXzQfFhl6FRHlEkyjcu/fASBwsWoFFmYQ2aRn0IDSEXqyQiOWGSRGWLpz5DPPNxyPavk0tejuqW523xMsrEGrMnmf+4T8Upy6IjysVHpUvPKJee1VS8p1p+ia47Gz6kKJo2MxStD05khi5nyo5TFe8pJ2yUdpug8g030HqG0tJ6XPWZMbG3IHCis8V0L7gW3IirQttpnYscNvbvPekZw+Uoi6eXp5eXl3d7b5T9IZ06Xr5yCQ1sXl4eP9YA8Hsg9ZrBJczYeo+RjfLi/cK681Ku3jNf+Pk+B5qL1ZcUNaekJW8L5u12WbDXteaEaM0VTeMFz5pD4WU7YwvXhQ2f75ecYw5OxA50YBzZPlzhE6kcNDr5pdee//dP+F6Ib779Zu3aR+Pj47RaDcp6lDs0a0FzEyJesevQaB3tRfwOAZrLKxvei14OAgLwzTznz59Dj0WcvXRyTumYsK6GDjHS4C5Ep25UXDqVUUBNWEZPa2LGr9YMb3Abud5pSIPTgCpc+LmV98wFZz8PYgs/D3LYz/VOOXVYie5d3C5htGv0YFHaDLnNV8uP9d8YEKD/txEIBNybAIsXL05OTuZbAQD4o+ESE8FvAwAAAAAAAAAAAAAAAAAAAAAAAL8MCNB/ftavX8/JH/czZcoUvhPw5wME6AcLY9NmLybHrZMU7XYpPehefkhadoAsec0251nv8TVeGVMssf3p4M5kcGcqOEHnGyUPiNeMntZ//8FX+Wy5e3fb9m290noRBKHVarFtyTnQdimTX3XImG3AWl2oH2lAvbCmyYKLQMuwAK1UqCRimVQi8/ZjIpNt3XPb9xsXGJ/qFRbjbbEYSZ39CHZomr4nQCNMv2hAtzIu7Zalh4eH2WJGx+nRs/uTTz3x9ddfc9/sybOHC0tHRqRQQUmysJ5EZC8qcRCVOZ2asMwwtckwoUE95VnR/DeEM3a659a3yyh7JG2eS/8FUhCggeaEhYX98wtc/HXR4kXu7u4kyWcH+TNloHFFZ7sGTbKha6Y+c+DHsxWgefWZk6FZ+ArQKCi2yDpe0aP8kmENWkb7SJLHSYp301u/inzh826zNoSHJZv75JtmvUwueldVcV5WfVG+8n1F3Q113U1V7fvkyqvtF+0KTsr26DPbsPigofqCZtpLst6zlUEJeoZhSILRkzTNoBw04vRipWaE2chq0Iw9WqnPzeEe1IKW9jMPaz97YvvZyxsHGtjefXp9+eU/0cBmZmZyQw0Av5eRRbHbzs0Yvdwvc4ly0kZR2WHRqsvypuu8Bt2Aok0N+qqy/oJ86XHxojfd5+5yWbzPrf6s5LHrVMM5v5p3opdsi53RGJozyzc+3RgUTwbGkv4xOu8weUAcMWluzuET+9np5e61a9eKFy308/PjJlOmWTXolmABWiBw75nSEz2quQCNwPnGYc8llC1oiR6GJri8IYP3vvE693Qff3677rGSxL7ePtHSoERNSDIV1ZvsPZYaXWaY1mic1ECOWC0cvtZpaJPTwGpc+Dm9rcLPKAYuw1WfB61oVvW5zimnHpvQ/cucuk51iRzsHpkjTF+gTZus11H8OP+dAQH6f57S0lLufQAE3wQAwB8Nn5OQlQAAAAAAAAAAAAAAAAAAAAAAAL8REKD/EuTk5Bw7dowTQRB37tzZvXt3fHw8vxv4UwIC9IOFsWqyl+gmPCmdu8t14V63krfcyw4Kyw/Jy96mF+3ynv2kz+hyr95jzVG9DMGdyY6dyeAEnXe4JDSZKVwy9szFE1zufPbZZ6sbVkdGRqADEgRBs3UrOfnSjl3GbAusLfMCNNY0MTSNVjRqQiFXKeRKXA1arpKKFUJXmUyk0iootZQitPiYfOHnZjAMwxZ+tvPzRaCbi5acU2nzsHl4eqBd6CBh4WHlFWU3blznvscPPrmxrLEosb+XX4I4rCcRkUrFZVB9J1JjKgzTGunJjcTE9ZJZLwtm7nQfsdYlo/KRAVVOGeVOvXkBmhtsAMD4+/vfvn0bXVSXLl/q27evSqXSaDRcLlD2OtCOFYxjlSv/zMJqzy2wH+FeKehmwdvPnACNoA006qNRaaUipUwus3SU9Jsrqz5k3f5VfOk+39EbRLP3S0rfU9Rc1a28TtTdUNTdktffltffUte+T5adoBbuN1WfM8zbJx9YJg9NIc02mtSiA+JsNJqMZmw34/yyOAKB0hBnIt6Dl78Ml518N1aAdgRfn90Dq89eXt7e3vjgVkv/9H5vv/Mml63dunXjxxoAfif+Qe0Xrs0o2xU/dX3H7BJj7jLF9G3C6hOShqu8Bs050Fw016CbrikbryhXnpNVHhEteN1t7qsuZQfcmy7JH79hWn2mY/W++MWb46asCEmf5B2ZxuBS0LGUfwzh2UkS1cO2ZMWMazcuclfvYfajFdBFrdFqsenMOtCtRGjUKBAIUlkBeseO7WjKRS1ctuC8a5ZgKGGMRiNjZLp17/rkU0988w2+mef7H77d9NL6/sOiO8TIAuJVIUlUeCrZfSg1dKFh6momv5EaWS8Z2tBuSNM/Bq1g1ecKpww0o7HRXH2+V/h5pVN2s8LPg+pwueiec5xjRrqFDxJ2nSwdWKrqXUBafXT8KP+9AQH6fx6UdNz7AAi+CQCAPxo+JyErAQAAAAAAAAAAAAAAAAAAAAAAfiMgQAPAQwIE6AcLY9XklhFTnpOWHhBWHBYW73PDGvTb7hWHRJWHNWVvmRft7DBzne/wRd4pw81hPfSsBk35RWu8wqQJvX2WNy26+eE11tq6e/nypXlFc318fFRqFUmRBq7s7G+BVTKxtUlyD8CCJus106QOl6rVqHBo1TqK0GsUhFKmpQ0MjYUwrhfXH8Pg0rPN9WdOgG7LgG7mV/KFnz3QF6vRyPh08Jk0aeKRI4e57+vrb/+5cWtjn7xw/3hZx2RVeCoV049MGUUNX6yf2sBMaaLGPSqbusV91ituIx5zHrDUKaPykcxlTplopcwuQAfwow0ACIokX3jhBe7q+vyLzysrKwIC/OVyOUmS6OqnWPWZW3KwenMzDdoO234PNndYqHsaNG9Cc3cXcPYzn18obxi0oEhKpdBIxUqFStahs2TAfMXYx5X5L7rPe8e16hz56he5z36SsPyG5KmPOr7yRc7aD2y1N+VLL2oWHtQOX62OGaix+dCUDgU+IMMwKN9449kRbeHIvF8Bd7Nx4bCf2drPnghvby+0ZjQao6OjapYv++STj7khPXz4MNrFjzUA/H60pCp5kOfsJ6JLX0mY1BiUVWIYVi+d+6pw+VlJwzUF70DbNeh7DjSrQeMq0ZcVK96Tlh0UFu1xLdrtUn1UuO591ePv2+pPhi/dk7BgY/T4iuC0UZ6h3fQBsbqAWLJDpNorTNZtQNDap5f/88vPuMv4ha0v9ErrhbIXZTpnPCPYWQ+D1rEAnZqCeu7YsQPvuSdAc+DpDE2GqHNop05lZaXv22/meefInjEz+gckqPziFMFddKHd8ecYDJpF5dcyU5voUfWKvDrnIQ3/GFT7SEYFtp8zKu/Zz/ccaFZ9xoWfa1n72V71GS0HLnPqtaBd/DjXiFxBwmhJRokyY74urIdOq4VPQuABAfrvAPc+AILfBgDgj4bPSchKAAAAAAAAAAAAAAAAAAAAAACA3wgI0ADwkAAB+sHC2LSDK4hpW2TLTkpWXZTXnMLa1sK9bgv3upYecK98V1x5hCx/03vhNv9pjb6D53ol5xhDkqmgeBIFp231Hhz59Jamb777iperDrwzbNhQo9Go0aj1rMvM+c2/LEOj/WjhKAJ9T9GkafyXCz1DaHVpqb0XLij28fFhfbB7QhiiDfsZ0VYF6JalZdnCz6xJabVZMgakb9+x7c6dO9y3s3v/tuFTUgMTlIGJirCeusjeZNc8KneuPr+OntpkGN+omLjRvWCr65gnXDKrsSg2sBrrX9gPq7wnQNv8VfxwAwBLcHDQk08+8e9/85fZsWPvjhkzmjEyKpWKtGvQLLz3zG+01KC5xuawycSDzWeHAI2zC2eWI7UQOGfYzELrJEEqpRqhs9wSKE0rEo1/TlD4pmvle8Srn/V/6sOQVbcMx79aduPbLRs+Cqp5X1J1QTVjlzxlPEHpaJLAh0JnjtVnnFq/5D07sCcgn4ZtYPed74G22NLPXp6eXl5YfUbJ3qFDh/z8ycdP3Pskh02bng8LC+VHGQD+H5g9yfRJAYteSFjyUsKYWr+BS3Sj14oX7heuvCBtvK8UtCMar7KloK8pV11SLDslWfK2YO6rLvP3uNSeFD51i1h/zafu3eiKVzrPWx81clFg98G2jl0o/2gyMJb0iVC2j5BnjUrasfvZH3/6N7qYP/vss7q6lRGREQShRWmMZigEN/EhsADdKxV1e/HFF9Em2sVnCgtKLpSY3t7e4yeMO3LkEJscdy9dOzO/cmJEd8YnStqxi65TVyq2P5U+hRq/lJ7WxIxfpclb4Z5b/0h2Lf4Eg/QyVn1uHqz9jKs+L7MXfmbtZ4cAnbXCqc/idl0mu0TkCGKGifsUKbKWEPFZOsaq5ccUYAEB+u8A9z4Agt8GAOCPhs9JyEoAAAAAAAAAAAAAAAAAAAAAAIDfCAjQAPCQAAH6wcLYNHmVvADdxMpbqy7Kl52QLH5LMH+Pa/E+14ojwurj8qrDdNkbvgu2BE6p8xs0wzN+ANMxkQyMo4LiSO8wuW+0esjE1Nfe3MFpW3fu3Nm8ZVNKSk+CBQuSLKyWydJstRlYgKaa16nFsiau8MxpmnrSoFFrGxob0FPExsbSNG2xWLDhbIf1ne/jfgHaoV2yhqWHh4fZgstkJiTENzSu/uyzT1hV7O57F96duXhEWDe9b6ykUzddeCrVOYsaMJ2aWENPX8NMaNSMXSeYvMllzAbnQcvb9S9/hNfC2GgmQLv2nw8VoIE20Gq1uXm5Bw4c4K43lDXbd2xL7ZWC2tFelA+81NwCVoC2O9B8W0u4XLofLgftacXDO9BoQTI6tV4ilHuGSXsXScZuFM/Y47bgsHv5WWnlRVHjDdvxrxbs/Ty77oa6+rKs4qxq9h5lv1lahsEHMZmMjsz6VfWZzT5H/Cys73xPgEZJisBln708vb28UUqj5M3ISN+xY9sPP/zADeDx48eGDBlCEKBaAg8S31Bm6MKQ8l1JC1+IHV7dflC5ZsLTorJDovrLsp/ToLlq0FiDvqqsuyBfelxcvM9tzi7n4jdcG89Jn76tf/xK0IqD8WU7EmY3ReYV+nceYA6KJwNiSf8YHZpPA+N1EwuzDx3fz13YFy5cmD17to+PD6EjONGZQygU9ErrhTq8+OKLXAubKuiv1Wgyopmvf/++27Zt/fePeFL+9IsPG56oTEr36xAtDUxQhyRTUWlUrzHUyCWGaQ3MpNW6IcuF2StY9XkprvqcXnGf/VyJ5zU8zS23F3522M/1WIbuX+7Udbpz1FD3yMGilJnyQeXa7mNID3+CH0egGSBA/x3g3gdA8NsAAPzR8DkJWQkAAAAAAAAAAAAAAAAAAAAAAPAbAQEaAB4SIEA/WBirJq+KFaBPSJquKjhtq+Gqsu6crOpdcfE+96LXXEveclt6TFhzQr30sK3s9cCi54InLvPLmOwR3ZsOSiADYyn/GMI7TB6cSE2bP+zYaV7o/PTTT+vqV4aHh2m0Gp1Ox9mW2Je000qD5pqwA00a9GwpaAMOWs+GgWJIHaVSqZ55diM6eM+ePSi93srplmasQf8MFlyX1iFAO7RLTn22eaB9DMMEBQcWzZ934cJ57sxvfXS9uqEoobdnhxhpcBdtaHcypj/VZwI1tsIwvYmZ3KQbvUY0/ul2Yzc4Z9e2S690ylx6T33GUe00oIoVoCvYCtBYgIaP/gfaJjDcY/m6ous3r3DX3hf//KK+vg5lDfrPA0EQKC94r7klvAH9a0WgW8GmHa4DjVfZLew+o6zU03odTWgokUDcPlrae758xHpp/otuhftdFh51Kz0trDovq7+mW3FFUXlBXHFWUnJCNfNVVb85WrMVH8NkQmnGZ9ivw+egPRPbpJn6zMHazx5eXl5ol9FoTEiIX7W6/pNPP+YG7YOPbz75ypIeed78mALAgyYsyZJfF1W1J3nOM1F5FbbcauXUF4RVx8Wrr8ob32+7FDQKzoRuuKJYeU5WcUS04A23wlecy952X39Z8ext82MXOi1/O7HkhYRpdWEDp/hGpzGBsTpWgyY8Q6UR3c0lNdOuvM/PSvv27RucNxhNaTodiVIArYhEot69e6NdL730Er4PyGzy9PREqcgYmbi4mPr6lZ9+im/m+enuj1tf2ZA5MqFDtDQgXtUxmQzrSXbLo/Lm66fUM1Ma9cOWSwdVt8ta/g80c2H1uRzPXPeCs5/RjIamuRqnrJqW6nMdXkd7exY6x45wi8gWJk+SZZaq+84g/aN1/NgB9wEC9N8B7n0ABL8NAMAfDZ+TkJUAAAAAAAAAAAAAAAAAAAAAAAC/ERCgAeAhAQL0g4WxaoYu5StAN15VNF5hna3ryqbrWNuqPSOrOCxc+Lrbgj0upQfca05Jl58klx5qX/pqx7lPdRxT5ttrtDW8pyEgjtWgownPEElMqlfFyjnXb11mra27Fy9emD17lo9Pe5VKpdfrsW3ZwoK+J0Hbt7H6jAVoXoPG9jOtpxmGIQhCoVA8//xz6LBpaWk6nQ6XdmaDdZ3bwoR28eIlgrcreaw0zXh6eg4bMWzf/je4s/362y+f2rI6bXC4b4w0oLOqU1cqohfVcwQ5bJF+WgMzpUk/tkk6+nHn0U+2G1yP1eeMKlwRk6v93LwCNN9S5dRnPgjQwM9iMGsj+mqCesp65UY8tanx62++4q7Dy5cvzZ4908vLC/0XQkeSXILwgrOdn6sDzXVuEz7FOBxbetpAYgFaoyaEQrFHiCytUJ2zUjZmo2DKy+2wA33YffExYclJwZJTwiUnhMVHRUXvKPJfUPbKJ2m2ArTRaGRzkM+yX4GrEs1G2w70/bWfWfXZw8OGXgQCgwIL58w+d+4sN1A/3PnXllceHzAmNnKgNH2BumMixY8sADxodKQmOct7zoa46te7TlsXllNqGrJSVviKsOaMZPU1ReN1VZsaNOdAN15Trr6sWPGetOygcN5rLnN2OVcfEjx9Q/Psbc9Hz0RVv95l0bPxk5Z26jvGO6yHwT9GFxhHdYhUe4VJu2YErtmw7PMvscp854c7Tz/9dPfu3Sk8KRpEIlHffn1R+86dO1FiGU1GNkGCZheiBDnH5sfdw8f3jZ+VGdRZ2yFG1jGJDO1Gdh5IDZxBTVpBT22iR9UqBy11yVz2j8zqR9Ir7lOfubBPcwNrcJlnHKwAnc0K0JnLnNIWtEsY5xqRLUgYJc1YrB4wXxeeotOR/KABbQIC9N8B7n0ABL8NAMAfDZ+TkJUAAAAAAAAAAAAAAAAAAAAAAAC/ERCgAeAhAQL0g4WxaIZUEdN5AVrZwAnQ19i4zmpblxTLT0lLDwjmv+624HXXyqPC2vfkK04x1Qf8l+wMnbUueHhxh+5DLZ2SqYBYMjCW7BCp8gqTdR8Ysv6ZlV98+RmnYb355v68vDyGYbRaLRYxW1aC5rmnZNor1OIGrkYtbTQa0WMVCvmmTc+jA/bp09shQOMyz2070Lj8M+9l8sIlqz9brSaTyWgypvRK2fjs09999x13knve2jF0ck//eKVfvCIkSRfWg0rKoXLmUFPqmKlrDGMbFKMfcx3zVLu8BlzgOaOSV59bBRaga5yyljsNWu6UVY0F6H7zpR7+/GgDgAMtoQ5LoeKzDCFJlG+MPCBBNWRSyqv7tv3444/cBblv/77BgwdTelz4nDObOcW5GW0I0Agun9qEy6/m6EnaQNGUzqBWaURCid4iS5um77tIPni1dPTGdvkvtpv5mvOcN13nveOGYs5broVviApeko9+jEjIpCkSJaiBYWg+3X6LA91CgG6DVvazJ8bDbDJ7eHrkDcnb8/oebnAQB469NmFu/04pmqBu8rAUfc8J1KD5dHt/cKCBh4jZk+w33r9ke2LFq0mTGzpmlxpGrpHMf0NYe17aeF2BJs1f0qCvKlddkqOpdvHbgrmvusx71bnuhPi5W+Rzt/0aTsRV7e4y/8nYMUs69sjzCOlCBcTgatBoPm0foRg4qsv2V5/B1Zzv3v3www+Xr1geERHh4uLSuw+uAL1z5040RVpt1pGjRqCplk2Ou1dvnF+8rCCyh6lDtDQoUdupKxnbj+w3iRpXaZjayIyr12QvdR9Y/QiK9Aqn/m2qzyg49XkZO6PZ1Weu9jNq7LO4XeJkl4hc95ih4t5zlYNKyYRBpNGm5UcK+HlAgP47wL0PgOC3AQD4o+FzErISAAAAAAAAAAAAAAAAAAAAAADgNwICNAA8JECAfrDQZk1ehW7aFnn1CVwBuuGKgre1rvHLJlaGXnVRseykpOQt96LdLov2uS07Lqo/p6o9aa16q+PiHeEz1nTMm+uTmGUKTiQDYsjAOLJ9hLJ9hGLQ6OQXdz/77x/v3L1791/ff//cc891796NJEktoeW0Zg5exGzLzuR70LgCtFarlSvkz2/CFaB78wK02Wq18g60yXwvEJz6zBqZnFjJVpa1oT3oCSMiIpYuq7p1+xarit09ff7o9OJhnbqSHaKlIUm60G5kfAY5YCo1cRk9vYme0KgZucZ99JNOQ9e0y6x2Sq9wGtBSeuaCU595RQzFCocALQEBGrifsC6GrJmWroPp8B76kC5UcKLOJ1oWkkzNKB5+7PRB7sr8/vvvn3lmY1JyklarQXASsx1ed24Tvktb8KnFgbYoA22gSUKvVKhkUrlEIkoabEor1PRZKM+tE4143Hnc806TtjtNecmpYKfzlBfdJ70gG/6YPK/S7B9qIkn2ZgbaYDQZUaLhpDPhjPsV2NrPbQjQbarP6LBmM3rdeOKJx7/88ktuWC5ee2/x8knRfejArrLwNCKyt77zQH3WTHrO4765M6wGBgquAw8Xn2B62IJOlbu6LtnZZfRyv+xy3fgnRSUHhPWXZPjGoeutBWhHoMkULesvyJcekxTvd5/9snPx665NZ6UvfEg/835w/dGE8pcS56yNGTo3sEumJSiBnU9jSa8wWWC8bsLsQQeP7eNS4Nz5cyNHjpg+fTpaP3LkyNBhQ5997tl//etfaPPLrz9/dMOy7plB7aMkAQka9JISmUaljCJHlBimrjZOXKXLqxZlVj0ysPofAypx1WccrbxnFJX4Pp979/NwtZ9Z9Rlt9i9z6jrNOWqoe0SOOGWGclAZ0WMs6eEH6vNvBQTovwPc+wAIfhsAgD8aPichKwEAAAAAAAAAAAAAAAAAAAAAAH4jIEADwEMCBOgHi8GkyS0jpm3GZSmxm+UQoB3BCtBN19G6ou68bOm7ouJ9bkW7XUredKt9T7zqvLb2pE/VvvDFL0QU1AVnTWsf148JjCcDYin/GB2nbU0szD54nNe2Pvn0k5rlNWHhYRqNhqJITm5uWRC6BVwHBMMwGq1G3qwCNKEjzJwAjeArQFtYAZoVMe31aO11n3E3dJwOvh0Kpk45fvwYdz43PrhS3TAvvrdHhxhpUGdNp65UdB+q9zhqTLlhWpNxUoNuVJNo1OPtRjzmlLWMtcSqnAYsbRG8/VzjlMUWyMyuY4MVoAdWO/We59p3LgjQQGsCoohhZfTkBtvIMkv/fGNcuj64CxWUQPnHar3DJXFpnlWr5t28fY27Sj/++KOqysrg4GCFQkmSJHuzAIb6eQea79EWfGqx6ClWgKZpUocFaPQ/FndXoYcv0X+mtctkaa85yoGVstx64bBH3Uesdx/1hGjkY/LsFbLcan23HC+Dnq3UzgrQjJFhExDffoCz7ldhHWicmc2wu8+8/ezhYUNZHxoWWrJk8fXr/FB8+vmHazZU9hjk65cgCemuiexDxWdSvcfrR5fpZ641z3jCe1QtGZOu1BL8OAPAwyMsyTqpNmrZ3m4LNsUPX9o+Z6lqymZhxbvi1VfkeMZsVQr6yr11bqpdeVZWcUQ0/3XXwlecS/a7PXlZufUjy1NXw1e83aXkhc4zVkVmTfWL6WMMiEPzKekXrfUOk0V0My9aNvXi1fe4dPjqq6/Q8qefcGVolp927nk+a0ySb4zcL1bRMYkM60ElD6YGz9Xn1zH5jfphNbLMynaZS1n1uYxXn5sHbz9zhZ9r7N4zG9ykllHp1KPQOWaEW0SOKGmibGCptu8MMjBOx48I8NsAAfrvAPc+AILfBgDgj4bPSchKAAAAAAAAAAAAAAAAAAAAAACA3wgI0ADwkAAB+sFiMGoGFROj18hL3hE1XpM3coYWV/65VbDVoBuuKGrPysqPCBfudZu326X8oHv9eVnjRbr2eEDV3qgFz0VOqgnuN8ErMoUOiMXaln8M4RkqjehuKa4uuHTtLGdpnTt3bvqM6d7tvVkNmmJYaHspaMcKB9qkGZox4grQCrsA3bdvHx2pM1vsAnSbsIalDbvPVnQItJ6VNfDlV3beZW2xb7//esOWhrTcsA7RksDO6pBkKiKV6jmcHFasn7qayW+kRq+WjlrXbuR6LH6ll7MVMVuqzyh49ZkVxbJX2u1nFCtxS/oSp+SJrqnTpDZ/KEkL3ENn0GTO0815SbVwD1m01aOgyXNosbnncLpTVyowjgqKR1mjbh8hTc0JfeL5VV99w5c9PnnyZP6UfHRVq1QqVoNGYKGZM545mm+xtnMbsA/koSi2CDQ2oWmVQq1UKOVyhZuroGMc06fAnDhenjhB3nOGMn0Rkb5E3adY3nuBPGMh1Wtke6vNSNnLP7cQoBG/WgS6lf3crPAzAqvPNg+jydi+vff48WMPHeaLYf/4079ffG1jzoSEwCRZx66q8BQypi/VcwQ1dIG+oJ7ObyQnrVdMelaRXSPoWyQx+0DGAf8NKL22S4Z34RPxy97oMWdjTF6FbUitYuaLwmWnJQ1oPr2OJ1OH98w70NySnWQbLimWn5aUHRSgyXT2y85VBwTPXtdu+8h73bmomje6LHouYUpNeL9xPuE9af8YXWAs6Rul8QyVJPUPqHus7OPPPuBSg+Pgsb0TZmcGd9b6RMuCu5CdupEJA8nM6fqJNXRBAz1yhTKr0iWz6h+ZVXg661/6M/ZzJf9pBlnL2Vt6uGA/0wDNd73mt4sf6xqeLeg8WpZRrMlcgCZNkjJArv1uQID+O8C9D4DgtwEA+KPhcxKyEgAAAAAAAAAAAAAAAAAAAAAA4DcCAjQAPCRAgH6wkHrN4MX02HrPEasVC98QrjwnxSWf2eqVXAHLVg40F6svK1a8Jy09KCx6zXX+Hpel7wqaLquaLllWvNupYndM0YaIsaWBqSM8QrvpA2LJoDjKN0rtFSpN7h/Q8HjlJ59/yAlbe994PSc3h2FoQktwljPCwBnPXFloToRGq20I0H1/WYDm1EqrzWoymdDRErskPrp2zT//+QX31Hve2jFkUs+AOKVfrCIkmQztQXXJpnIK9fkrmYImesxqxfAml5HrH8mtx0JYekUL6dkR92pkOgo/o6h3yqnDAlnvhe0SRrtG54nSZihsvlp+uAFArWY8tNklZP5GSfF+QfkhTcle09znPSet9MyaYe2cSXdMpILiqeAEskOUwj9WlTex5659W+/8eAddtz/d/enV3bvSM9JJikTH4WxmTmt2SM+OstBce5tw1jP6SpHsFobWqgmFHP2fRSmTyYXuQr9OdK8xnt3GUz2nkBkLzP3m0j2m6PrkW5MyfCxWE6m7Zz+jMP52AbqV/cxWZ+fUZ67wswkXkTb37dtn85ZN3//rey5hD5/YP2V+VnhPbVCSLDyFjO5NdR1M5cym8mvpKQ3U+DXK6VtFC98SjX/aJWOJS3qxzCMQpEzgvwdjJvuM8V+8NWnZGz2mrg3PLTcOb5DO2yNYcU7SgCZThwbtEKCbV4O+qlx1EX8CQ8lbgsJdznN3OdceFb9wm3rhA781p+OrXk1a8FT8uNJOKUO9QpKogFisQftEKNtHKPoMjnri+VXnL5869O6b88onRHQ3+kTKAhM0IclUTD+y7wRqTDk9tYEZV6fNrnLPrHwkc+kj6eVO/Uqd+pez9rMjOAG60mmAvfDzvdrP3EcZLHPqs7hd4iSXiMGC6CGSPnPVg5ZQiTkkY4V57T8EBOi/A9z7AAh+GwCAPxo+JyErAQAAAAAAAAAAAAAAAAAAAAAAfiMgQAPAQwIE6AfOiLnR28/PHFvrn1minLhBVHpQVH9Zhj/Bn/sQ/5/XoFltS1ryNq5eufB119pT4rXXtU2XvFccjix/OXbOuvARCwO65lo7dqECYnA16A4Rqvbh8vRh8ZtfeuKHH3+4e/fuDz/8sHHj0127JetIHQpHKej7MfICtGLTpk3ogf369SNJEuuUGM6sxDR3K81ms8FgCO4YVLxo4eUrl1mR8u7xMwdnFA8PSSJ9Y+XBSbpO3aj4DDKjgJqwjJ62hhm/SjO8wX342kfyGrANhoti/lzhZ7ZGZgv1uc4ppx639C91Si5wiRzsHpkrzFio7TWJ0lH8UAMAgrFpBy3WjV8vKXrNpfSge/khWdkBavFu25yN3uOqPftNskT3MQR3JoMTqKB4widShjJo2sJhx0/ztZC/+eabx9atjY2NQYciCELP28wOB9peBxqvtA1rPBuwK01iDRofgKYpUq9UqLEDrVChpUgg1ZGakBhrbC9bv/EB3bN9o5K8/QJs6CG49nNzsABt5ORnjAkv+IS8nzbKP2MB2sPDA7UzRiY6OnrFiuUffsTfJnH5+tnS2umxfUyBXWRhPbWRvajOAymUsOOrDVMb6QkNmvyNovl7hTN3ug9e3S6j7JG0eS79F0hBgAb++3gH0HnzQqt2d6/c3X3i6o7Z5dSYx8XFbwnrLsrwZHrdLj1zArQj2FkVrdSdly89Ji7e5zb7Zef5u13WnJbu+JDZdDN41dGE8p1d5j4WO2J+cFKWNTiR5OZTnwilX7QqOd0/tKvJO0IamKDtmERGpJI9R1DDiw0Fq5gJ9WTuUlFmxSOZVY9kVDj1W4Lt5xbqMxeOws+s+ty89jNa74ums2nOkXnuUbnilOmqrDJdz/GUVyDBf8/AfwQI0H8HuPcBEPw2AAB/NHxOQlYCAAAAAAAAAAAAAAAAAAAAAAD8RkCABoCHBAjQDxy/AO+Fj6aX7UqY9kTH7CWmnGrF1BeEVcfFq6/KOQ26+Yf4t9agryrreW3Lfc4ul5I3XVedkzx+U990IaDmQEzp9viZTWG5s30TMkxBCVjbCowlvUPl/rHaUdP6v3loN+c4fvTRh1VVVaGhnTRajV6v5xzoVi600WjUarVKhWJzGwI04p5SabPhDYPB4O3tNXr0qHfeeYt7llsfXVu6em58mqdPtCQokQhJpqL7UL3HUaPLDNMamUkNumH1wqGNj+Q1PpK1zCm9DDthGVV8tLKfs7gCmSudslHYCz8PqsMP6THbOWaEW3i2sFu+dGCpKm0KaW0PrhjQAsaqyV6im/iUZO6rrgvfcCt5y73soLD8kKLsLXrRy96znvAZWeqVOtIckaIPTiA7dsYatFeYJDbFs3xl4Y3bV7nr+caN94uLi319fVUqFcoFtmQ6Xw3azq8UgdZTBk6AdhSBJklKpdAoZEqsQctVcqlSJJCL3eRqOaGR6TVKimylPrOg9DSZWOuZg1/lfOeWNFefcarabB42D08P9JVmaD9/3+kzpp0+fYr7Br/85ou1G5f1zA7yixeH9tBEpFCx/am0cdSoUsO0BmZyo27COsnMlwSzXnEfuc4lo/KRAShVy5168wI0P9QA8F8mJN46sSZmxf5epS92HVXjl1OpmfSssPyoaNUVOX9PEe9AK+450FzgdkXtWVnFEdH8111n7Wy3eK/rE+eVL35kfeZKaO07iaVbE2c2ROXM9I/rZwqM1wXEkoFxuoBERUiaMqSrLrQ7mZSDP8dgci2Tv0o/dJlsYEU7Vn1+pF8pW/i5rHWklztlsJ9vkLnMrj5zUYuX6RWO6UyUNFGRVarrN8sQGE9qtXB3wf8XEKD/DnDvAyD4bQAA/mj4nISsBAAAAAAAAAAAAAAAAAAAAAAA+I2AAA0ADwkQoB8GWkLVJdNz5vqoslcS8puCBy2hh6yUFb4srHlP0nBN0fg+60D/jAbdhNqvKGrPYW1rwV7Xua86l7/j9ugV+ZM3mcazHWvejF+8JbagNjRzik90GhMYi0tX+kVrvcJkoUnMnNJxZy4c43zHU6dPFUwt8PLyIgjCYDCwAjRD2x1oXoBWKjZvxgJ0//79SFKHjcoW2CxWC3qUyWjs06f35i2b7ty5gzp/8/1XGzav7pXTySdaGpCgDkkmI1KpHsOoYcWGqauM+Y3UiJXSvPp2eav/MbAGW19YC7Orz47g1GfUAavPtaz9bK/6jJaZy5xSi5zjx7hF5Ao6j5UMWKJKn6cL7abTaMAVA1rD2DS55UTBc9KyA8KKw8LifW4L97qVvO1efkhUeUhb9qa1+EXf6Y/6Dpnv1S3PFNqN4qpB+0apvMNlPbM6Pf5c/RdffcYmzd3Dhw+NGj3KaGTUGjWrNbdyoH8Wtieu5cxp0lhkxtBoVaclNSoChVZNoHVSq1dI1DqtnjGibMT1npvD5SanPPPYXWjOeb5H89rPbNVnmwcOk8mEGgYNGrhr18t37/6Evqkf7/775b2bcsYnBXZWBHdRhqdQUX3I7sOoIQv0BauYKU368WvkBZvdZ73iPmq9C8rKjMpH0DJzKStAF7ECdAA/1ADw30er1ST0bT/vyeT6t/ssfD5x2FKvwcsV07cLl57AtxWh+bSlBu0IrkW5+pJixWlJ6QHhvN2uM19qV/GW+3NXNS995P3khahl+xIXb0qYVhsxaEaH5Fy6U7IuMp1IHKHtPIjMmKIfv5SespoeuUKVVeGSWfVIZuUj/Uv5ws/97refK5wGNCv8PJBTn1fgQJNdalG7uDGu4dnChFGyjGJi4AJ9VG/0aqHlv0Pg/wcI0H8HuPcBEPw2AAB/NHxOQlYCAAAAAAAAAAAAAAAAAAAAAAD8RkCABoCHBAjQDw+Th67vOL+Fm+JLdyaMrw8YWEKNbJLM3yusPS/lP8G/mQPtCIcJvfqyYvl70tKDwnmvuc571WXpEcH691VP3vRYfTq8em/n4mdiJy0N6TvWO7wnzX2Cv1+01jNUktDbZ/maRR9+cpMTOl/b81rWoCyj0UgQBGNk0AqCYfAKakGvqJu3bEbd0tPTSZLEIqUD1qSkDXRMTHRt7fJPPvmIO+Du/VvzJvbwi1Wg6JhEhvagumSTOYX6/Fp6ahM9qk6RW+ucW/+PQcux94zV58pmYbefsSW2DPthXOFnLrJZ9Xngcqfei9olTnKNyBHEjRD3m6/IWkzEDSBpM6jPQNvQVs3gSmL6FmnNKcmqi/KaU9LSA4IFr7stfMO17IB75VFp5WGqbL/3ghf8p6zyzZ7lmTjQ2DGJCoong+JInwilT5Qid3yPl/du4XXhf/+4bdvW1F6pKCO0Wi0vJrOwqvPPYNDbi0DjpV2BxoIzTTMoj9hg0C6rxVY0d0G//v3RbpSG+J6ElqXZed/ZARagLa38Z4f6bLOrz+iPyWxCD++SlLj2sUc//5xXut89/XbB/MEhSYR/giy0hy6iF9klh8qapZ+8gp7WRE9oVE7Y4F6wzWXcBheUkihJB7K5iauzo4Qt4wVom7+KH2sA+IOgjbq+o4PKt6eseqff7CfjcsvNQ1dJ57wqWH4WzacKPJ/iCRSrz6vZcJjQeD69oqy/KF92QlLylnvhK86FO9utOCzcepPa8aHfY6djq15LLNkUP3tNxPjKwNxife5C3bBF+km1hjG12uwqQWblI5lVj6SXOvUtYdXnloHtZ3aaQymDEuee/cyqz2im612MpjMXNJ1F50n7ztUOWqJPytMbbaA+P0hAgP47wL0PgOC3AQD4o+FzErISAAAAAAAAAAAAAAAAAAAAAADgNwICNAA8JECAftj4BNOD53Ys29ll0fb4kTUdssqIsU+ISt4R1V2S/ZwGzTnQTdewBr3qomLZSUnJ2+5zX3Upes2l9oRow03iyfd96o/HVO7qPP/JmDElwT2HeoQkUQGxusBYLHS2j5Cn5UZsfKHpm+++unv37vfff//kk0927ZqsI3V6vd7IYjKZCIJQqZRbXtiC+qSnp1MUZbVaPTywSmmxWgw0HRDgP2vWzDNn3mNFyrsnzx6etnAoeqIOMdLgLrpOXan4DDKjgBpfTU9rYsbWaXJrXLNrHxm04pGMSqf0smbesyO4ws/L+OqYuPAzW/t5UJ1TTh3WxfqVOiUXuEQOcY/KE6UWKrLKNF2H66w+BD+UANAWjE0zpIqY/oKs5pSkic2d+gvy6uOSxW+6z9/jumi/W+URYfUxZdUhY9nrfvOfD5y03C8j3yOmHx2cQAbGUYFxOq9QWXBnqqBoyLHTB7mr/Ysvvqirr4uICFepVCRJcjqzQ4HGa/fp0LgRC9AGihOguWAdaKxBo9AzGpU2Jjrmzp0f1q1bp9VqLRYLZzijfORgleeW3CdA3yv8bL9jwWqz0jQd3DF4wcL5l69c5L6Fmx9cq6gvjEuzdYiRhCQT4T2p+AFU/8nk+KX09DXMxEbt2MeEk553GbfRObu2XXoFrvqMDU427gnQ81z7z4cK0MCfBe8AJm9OxIq9/Wr39S1YE5FTbhi1VrRwv3DlBfa2InYy5QTolho0O7deUdSdl1UdExfvc5v9crs5rzg3nJDuuEVvvRm4/kLiY8cz6vekzdvoMWU1Oapak1Mhyqxwyqz6B5rLsPrMFX6+z35Or7Df0sOpz2yguQwlEeqQPM05Ks8tMkfSc6o6u5xKHW/wCdHx3wnw4AAB+u8A9z4Agt8GAOCPhs9JyEoAAAAAAAAAAAAAAAAAAAAAAIDfCAjQAPCQAAH6v0NIvHn8sojK3UlFm2KGVnllV6knPycqPyJadcX+Cf4/Uw0aa9Cs0Ln0mLj4TbfCXc7Fe10bz0qfuW144mpA3ZGE8p2Jc9ZGDSsKTMqyBHcmuWrQ7cMVvlGqoZN6vfbmds6GvHXrVkVlRUinEM7mtFgsaAWd2NatW9HeAQMG6A16XEXWw4MxMh6eHnl5g1/f+zr/2A+vVdbPievl0T5SEpRIhHQlo3pTvcdSo8sMUxuME1bpBtcIs5Y9krX8kQGc+lzRMuz2M2eJtVCfV+Kqz1m1uFv3mc7Rw9wicoTdpsgGlqnTCnQdwkB9Bn4dxmoXoE9Kmq7igq8oa1D6rDwnqzyKZcf5e1xL3nZfekxUc0Kz9JBn6e6guU8Hjav07TPWGpGiD4wnA+NwAXWvUFlUT1t5beG1m5e4K//8+fOzZ8/y8vZSa9QURXFFmlH6OGilQeMW1oHWo6AMBhw0Cj0btJ6RSGTdu3dDR96yZTNKQIfWzKnObWNi7Wd7T95+tuHg1GeGYTy9PEeOGv7W229yp/3Nd189uXlVak6nDjHSoERNp+5kVB8qdTQ1ssQwrcGY30SOaZSM2+A87ul2OXXt0h3Fa5vFgCosQA+oYCtAYwEa6q8DfyKCo61TahIb3sms2d1n/MqO2ZXa8U8LSw+J6rnbiu7ToLlgq0ErGi4ras/IKo4IF76B59PKQ8Itt4m3v2m/7/tuT19NKttrmPykMGeZ88CqR9D133dx2/YzV/gZpQl/24BDfV6Ol+nlTj1mt4sZ4RY+SJQ8UZVVQvWfZQhOILVayKOHAgjQfwe49wEQ/DYAAH80fE5CVgIAAAAAAAAAAAAAAAAAAAAAAPxGQIAGgIcECND/NbSEJqGv54zHYqr3dpv5VGRumXVwjXz6DmH1KfHqa+wn+P+MA80LnVcUK8/JK4+KFux1K3zFecl+t/WXFc9/aHricujydxJLt3WeuToye7pfXD9TYLwuIJb0j9F5hclCuuinLxx+4swhzow8efLElCn53u29SZLU6XRarXb79m2ofeDAgXqDnitAm5LSc8OGDd99+x1q//rbfz65qT41u1OHaFlAvCokmQpPIXsMo4Yu1BesYvIbqKE1koFL2w1c9o8BS7H1haKF+swFa1hmVrPq8wq7/VzrlL0SL9GulHnOcaNdwwcJE8dJM5do0ufqQroShA5cMeA3wQrQWq4CdONVReMVNmuuK5tQTl1RrHhPWn5IuOB1twWvu5YdFCw/Jas5Yag60GHJyx0L1wePWNShx1BzaFcKpUxgHNUhUu0VKu05MGTdxtovv/6cTZq7+/fvz83NpRlao9EYcDHnlg50M+xN2H7GDjTWoLH6bNDTtJ5mGEYgFPTo0QMdc+vWrRRFMUajxWy14ALPPw8nQDe3n9nCzx4eNraWuzElNeWZZzd+99236LA//vTv3W9uy5vYIyBe6RenCOmKEpZKHkwOLtIX1DMFTYZxjYrR61xGP+U0pIG/MwElJo5ldpWTDX69yqnPfJd+IEADfz7QFZnYx3fBkymPvZtTtj1l1DLf3GXKghcEVcdFq9GLADuf3rOfL/PBVoPGseqSovasbMVpGVquPCdbf1W5+zNm52empUfFE55+JKf2ETRz9StjdeclLYO1n9FebD/fpz5nVDmlzmsXP8YlPFsYP0I+oJjKWsRE9aFIvZY/b+AhAAL03wHufQAEvw0AwB8Nn5OQlQAAAAAAAAAAAAAAAAAAAAAAAL8REKAB4CEBAvR/GcasSxnaYeGmzlV7kgvWdsopZYauks7dLVh+RtL48xo0Cs6EXn0JC51lh4RFe1wLX2m39KBgw3X15g89HzsfWbM/afGmhIIV4RmTOkSm0AGxWIPGdW3DpDEpHhUrC9+/fZn1Oe/u2fNabm4OSZIyuWzHDlwiesCAAVqtNiYmavmKmtu3b3Pddr2xNW9CD79YhV+csmOSLqwHmZRNZc/WT65lChoNI1YospY6D1z2j8ylj/ys+sxZYtVOWVzhZ4f9zKrPmcuc0ha26zzBNSJHEDdC0m+BauBiXUx/0mAEVwz4HTAWewVoLEArGzgB+hobbDlYlDU1JyVL3hYUvea6YK9r1bvC2veUy0+Yqt4KXLwjdEZT0OC57bsMMgUn4urpuIB6hNInUpk9ttvLr2/mcuHOD3c2bnw6OTmJIAidjqAN+A8O1ne+VwfaYHeg2Vb7Fls4mmEFaHdBz55YgN62bRulp1CLxcIJ0G060Gy7yV7+2V772WazoX3oseER4ZVLK27eusmd5Mmzh2csGh6STPrGyoKTiNBuVEImlTmNmrScnv4oPb5BNWqt2+gnnYY24bsO0iucMtnbEloFV84WZ+typ6xquwDtzw81APypYMxk3xGdlr00YN3RvOLnuw2p9Mirk856WVBzWtKA5tPmpaDtDrQjGq4oGq/ggtBove68bOUZ6WNXFNXHROOfbsfdA4ASJKMS6868Bs2qz3ima1X4mVWfUU6lFbdLnOgSnuMekyfrU6jLKaOTh9CW9vA5Bg8dEKD/DnDvAyD4bQAA/mj4nISsBAAAAAAAAAAAAAAAAAAAAAAA+I2AAA0ADwkQoP8QPDroB80ILn0pqeLVpAn1Qdml1Ki14oX7hSsvSLGyeb2F+nx/rLokrzklXfKOYM4ul3mvOq94V/jcLd2mDzo8ejqmak+XhRvjJ1SEpo3wCu2m94/R8XVtw6Q9szqte6b2y2++uHv37vffff/EE4+n9Oz5zjvvoM2SJYtnzJx+7txZVqS8e/zMoakL8kK6UD5Rko5dyE7dyLgMKmMKNb6antpAj1mpHlTllrn0H5nVuExm/3IsU6Jo7j3jYAs/c4oYVp+b2c+opW+JU9IUl4jBgqjB4rRCZdYSInm4zuIN6jPwu6HNmrwK3fQXZMtO4grQuMIrd8PANX7ZxGrQ9RfkS4+JF73pXrTbZfGbbjUnxfVnNStOeFbuCyneElZQH5Q1zTuuPxMUz2nQuIB6YLwuf27e0ZNvc3nxwQcfVFZVhIR0VGs0JEWyXjOG05y5YtD8ajO4PgwWoGl3d0EPuwCNOjMMY7VaLRZOdDbfCwResrWfWfvZoT6jr+iYPh18JudPOnb8KHdiH35yc1nj/Pg+nj5R4uAuBErY6L5Un/HU2Ep6eiMzqYkY1SQc/YTT8LVOWctwqnIV2VsFJ3Tey9MVDgFaAgI08GfGw4cePieucX/uY4fzZj+ekFthHNEkKtorqD0vxbcVYQ26bQfaEasuyuvOyVeelVa9K5rwTLusGntGLGPvFmA1aDzT2T/NgJvXcCzHd/Kg6Sx5qnNUnnvEIEnPqdrsMjptEt0+RMefH/CQAQH67wD3PgCC3wYA4I+Gz0nISgAAAAAAAAAAAAAAAAAAAAAAgN8ICNAA8JAAAfoPJCjaNLo8bOmerou2dx693C+7Qjthg3DJQVH9JTlXubZFNegrbHDrbHvdeXn1cXHxfvfCXc5Fu10aT0u3fKB/7mbQ6mMJFS93mfd4zKjijt1ybcGJFK4GHaPziVB2iFQOGtP1xdeeu3v3p7t37377zbc//PADWvnxxx9ZkfLu+7cuVdQVxqTafKKkQZ01IV2p6D5U73HUqDLD1NXM+Hoip0qYWfXIwKWPZJTz5TA5+9kRnP2MCz87fEpHrMSVZfuXO3Wb4Rw91D0yV9RtiiKrjOiVT3YIgzKZwH+IwaQZXEZM3yLHFaBRajgEaIcGba8GjbPmnKzyiGjhG25Fr7mUvuNed1a66jy54phf5esRC54Ln7gssN8Ez8hUQ0AsGRhL4QLqobKontbSFbOu3rjI5cipUycn50+2edg0Go3BoOf8Zns16DbgOjAs7u7ujgrQevRYhrZg/xlbzqzu7HCguU3cztV95jAajWhfxoD0l3bu4HL22++/fnbbo70Hh/vGyAPiVZ2SqYhUqucIatgiw9QGY34jNaZBOmq988j1TtnL2fRkDc7m4bCfs1j1OXulU3adU7ZdgO49z7XvXBCggb8AHaM9ptX0fPLoyMY3c6Y0RmZX6MY9KVz8jrDuooybTNsuBX1JsfqiYtUF+aoLioZLiqXHxROewRWg75V5ZqtBO5KFa0FTG5rL0Eq/Mqfus9pFj3ANHyRKHq/KKtGnFzIdO1NarYY/LeDhAwL03wHufQAEvw0AwB8Nn5OQlQAAAAAAAAAAAAAAAAAAAAAAAL8REKAB4CEBAvQfi1arjuxum9oQs+yN7gs2xw9b6p1brSrYLKw8Jl51xa5BOxxoLhwaNF5XrDwnqzwqWrjXddbOdov3uj12Tr79Y8vGayF1hxLLdiQWronOKwzsnGEJTCADYsjAWNIrTBYQrxs3c+Bbh19jfU6eL7769NGna3pmdWwfKQmIV3dMoiJSyR7DqaELDVPqmUmrqCHLxJkVTplL/zGAK4dZ1sJ75oJXn9kCmVnLm6nPrE+ZUenUs9A5dpRr2CBh0nhZZok2fQ7VMVFH6MAVA/5zDEZNdjExeo289IAIF3zlUoMr/9wqrimbWEN6xXvSskPCBXtci15zrToqWH1RsfqCacXR4PLdUfM2hI8pC0gdbgvtqkcpExBL+kZpPEOl3TNDHtu44suvcQF1xK5Xd6UPSKdpg1ar5fxmTnTmreeWcB2aC9Dbt29H7ajFylaAbhvWfbaxf0wmE+ocHx/X0LDq008/5c7hjXdeHlnQ2z9O6R+v6JikC+1OJeWQOXP0+XXM1CbDmNWKkWtdRj3+yOB6fKPC/eozCj5V2Wzl1WcuVuKETV/ilDzRNXWa1OYPGQr8BdBoNZ17+S/ZMOCZU+Nqd2eOXR6Us1Q1+Xn3indFqy7L0IvDahRtCNByvLysaLjcQoDmE4QznpsHW/sZJVTqPKe4Ma7hg4QJIxQZC/VZi5jY/gY9A59j8N8GBOi/A9z7AAh+GwCAPxo+JyErAQAAAAAAAAAAAAAAAAAAAAAAfiMgQAPAQwIE6D8DJKXtlu1TtLHz8v09Zz8VnVdhzauVz3pJUH1a3HBNgSvXNteguVLQdg268Zpy9WXFijNY6Cza4zr75Xalb7pvvKLe8ZHHhsuRy99KWrIlcXpdVFaBX3QaExCn4+vahsnCuhpnl4x+5+jr5y+ffuaFtQNGJvjGKFB07EKGYZOSyi7UT17BTGkwDF8uH1jhzKrPj2D1uZQt/OwIh/3MGpZc4efm9nPWCtzea367hPGuETmCuOHS9IWagYuo6H4kZQCxEvj/Quo1g0uYsfUeIxvlxfuFdeelXL1nvLxfg+YaUdZcUtSckpa8LZi322XBXteaE6I1VzSNFzxrDoWX7YwtXBc2fP7/sXcfAFFc+R/AL4qF3pct7C7LUpe2dJbeq4JIEQERUVSs0Rh7DcaCqNhRYzBecqaaSzHFRNNMYmKKiUlMMLHFRMnlLl6qd/4v/N/Me4wrzQVBQL6fmyM7b9+UfcNjcfjywyd5jCoggctAa2MknmHWmnCbosnJLx556v/+vNbY2Pjb77/V1T0YGxsjEtlLJBKFQiHnU9A08cw9aIpDk8dc/LlDAWha+dmFe1bmKPPz8120eGF9/Vd88rnxy29OLl5TEZri6BVlEZDoEJwqjcmT5t8jnV4jv/cBxbSd9hN2DZm4b8C4XdwvJJC5SePOzRaafuYm6VauOjuLPu8YMGY7F4keUTkwbvLgyLGmWfOsXLyR6YQ+Q+oozpmg23Fo3JNfTFv7bPaEDZ5jt1jOe2HohpNmO89a7brAl4LWD0DThQ9Ar//ElAtAb+ImDpsmLaLP5KmsFQPjZxjpxgyNKrXKXiges0aZPF6u9sTfMegZCED3B/Q+AMHWAaCnsTmJWQkAAAAAAAAAAAAAAGAgBKABugkC0L2Hs7s0b4Z2zcGUmjcy7t0bNmatYsJu86WvmWz5ynz3hRtj0EIGuikJvfucTe3X1ps/s1h9zHjJq4MWvjyw5rjJgYsOBxu8HvoycuMbiZVPxM2qCRs5xTMsQ+4XLfaLlvhEijxCLMPTnBJzfDWRXPQ5IEEclCKJzZfk3yOdtlF+z075pK22hesGF6z/y6j1d+WtHZCzhi/8rJ9+5hdW+Lkp+swtTVWfSeOI+wcm3j1IN8Y4qsx8xGK7ojWS5DKZM7Ji0HUmLot+7qt5kzf7FKy2mfmY6doPTGvPWD1wgcWg6cRpJQZ9zmbHaasNn5itfHvoklcG3f/WkB1fmu+9IN31lc+mY5Grn4uetztkzALv2DylfyxXPd03SuwRauUX4zBzyZgPPj1Ks8jnz5+vXHmfj4+PSCSSyWQKvWrQN+IC0MbGQzOGZZCt9APQBM08c7jcM1/42cWFfCSbqV3UpePGvvHm6/Rw//jp0va9qxJGemgiLfwT7IOSpREjJCOmSCevdbx3t3LmLkn5TpMJdQPKHhgweiM/PVsr/EyW0TXstxSuV33ePmDMDi4JTeZ4ypxB4WOHho8xyVshyrpbJpaycQboK1w85JMWJ//1vSmPn5y2fH/a2CrV+J2mSw4P3fKl+c7z1rvOWdMYdO03bNn5DR+APmE67TFudhQ0zZSCjdcz0KQxe9WA5HuMwkuH6IrNh90jKl6tGDFbqQkWs6NCT0AAuj+g9wEItg4APY3NScxKAAAAAAAAAAAAAAAAAyEADdBNEIDubbwCFOPvC9t4JGPDkfQZtUHFVdKKfab3v2Oy/WvL62lOLvdsfUMGmiznbHaftRYCnQsPGS15xWj7x2bPX3J85nvfPSdj1r2SuOJvsVPXBA8b7xacLPWLkmhjpH4x9v7plsHDRYFJ0shsSdZU6eQ1XPR56naHMeuNC9bdNXr9XXlVfPSZTz/rLyz9XM3Fwrh8mJB+JstWbpVslTLHKGLcUN0Ys4x7bQrXSDJnyjyRFYOu5uvveV9d/tpXYufsCyxepSypsZ77nMnGT813nWMxaP0a6vox6AfOk1ljs+0ry+oPTVe8PmTJq4PWvjf0gW+s/nrRaeepwI1vxd7/dMzsLUF5Mz3CsxRcKehoqW+Ug1uweUS6y+ot885f/Jrmkj/44PjESROdnZ3tRSIu6cxnoJsFoUmjsbHxcD4AffDg83L59QA0jUCzh3z6WalUKpSK1LSUR/728G+//Uo2ufrf3w+8uC93fKRXlKVfrG1QkjRsuCStTFp2n+OcnYpZu6UTd5iX7Ro47oG/FG3h5+a6Afnr2SLknmmgk8xNrvDztgHFeoWfi7Zzv8aQsdgoauKQsCKTlLstRq+xHXGPRK3BhIW+KjDcbcGm7Kc+n/3wB5Pn7oktrpJM3mdc+Y7xttOWu2gMWj8Dfca6+oTplEe5tzMWfabLpgGjNnJvZ2nzB0ZOGKwrNE2aYle4Wp6/WBmcIrMX4e8Y9DAEoPsDeh+AYOsA0NPYnMSsBAAAAAAAAAAAAAAAMBAC0ADdBAHo3ikk3mXW1pjt74xYezB18lbfMevtZz5uwte1teQCnTTNyeWerfUWrmU3aT/DBTrXf2R235tDFrw0cNlho71fWL5wWfn0xaDaD+OqXkxc+lD0pJUBI6aoI0dIglIc4spEsSViLkm5QjZru2JGrXTsBrOCdQNGb/hL/roBOav5ZQ0r/6y/0MLPNPqsX/uZfMxdNyB94cCo8iG6YtOkadajV0vyFjoGxCNJCd1FJLFNLnJb+HDkmkNxM3f7F65yHL/DYsmrJpu/NN91vqmAelMM+noGmo9BcxPqjPWWLyzWvm+y7LXByw4P2viRyUPf2v71W5cdJ8M2vBa34rHIaesCsia5haTKaAF1r3A791DL1FH+dY9u/vfP/+JT0I3PPPtMZlamTCaVSCQ08UzIm2LQ5DEXgB4+jPQ8ePAg98z1ADTlQv7n5KQinUOCg9euXfPtxQt0z8c+fK1iXq5fnK1PjHVAojgkTZpQJC1aIJ21VTHnAfmkHdal243G7fpL0da7yKykv5YgpJ+vZ6D56DOZnlx19qbo85gd3EcyizNXDIydOlhXYhw32Tx/lU3+cnFouliEcCf0fXHDtOseK3nu9LwH3iqbsT2kqNp2+uND13xguuMby13nuHdPoQh09cemU/brBaBruI/k7SxjyYCYisGhhcZx5TajVjgWrXSKzpM5OonYAaBHIQDdH9D7AARbB4CexuYkZiUAAAAAAAAAAAAAAICBEIAG6CYIQPdaYokoMVez7JHkne/nVj6dPH69R8km6znPGm/41GznOaumorZceIv7U/43JqF3n7PZecZ6yymLquMmy18bNP/FAfe/MfiR0zYv/cPl8bOhW4/FV72QsOJvkXO2hk5Y5Tqm0mHscumUaseZO6TjaywL1hkVrP/LKD76PLIp+qy/5K7li8vqFX7mFj76TD6OWj9g+NKBsVMGhxabxE2yyl8pHr3SMXKkVCZHVgy6ncpNkjfTb+UzcatfjKvY6jN6tXhyndl9R022nbbgCqjfWApaWMh84UpBn7ep/ca65jPz1e8aL3l1EJk4W0+a/O17h33nNds/jlx3KH7pvoiJK7VpY10CE6W+kRJttESjs/HUWRVOSjp4+In//fl/jY2N//rXv7Zv36YL1zk4iGQyqZLHB6E5XAA6czjp9sILL5BV8pSLHrXa2dHR0cPDY9r0qR9+eJxPPjd+c/7U8uoZujSFJsIiMFEcnCKNzpXmzZZO2yC/9wHFtFr70i1DS3bcVbz1LjL18tby0Wf9hU8/F2xkU5Ur/Mynn4UANJm22fcPTLx7kG6McdR4s+xl1oWrHWILxQo1JizcOcRSh9zxkXtenfLCNws2vTi6fKP3mBrLOc8OWf+p6c4zVrQUNFnWCQHojdySVz0gc8WAuOlGYcVDI0os8pbIx1d7ZExUqTUObL/QCyAA3R/Q+wAEWweAnsbmJGYlAAAAAAAAAAAAAACAgRCABugmCED3ckqVJHtSQNXBzJ3v5S3eH1tarR633WLhIeOaL5rq2p6z2XmOZaD1ktC0PjQX6Nz8mcXq90yWvDpowYsDq94e8uRZ+xcuuz92NmLvF5kPvlew7vnwuXtlM7ZKyqqtC9cNKqj+S0H1XW1Fn8mSW8UXftaPPvPpZ7IUbBgwonJg/Ew+STnOYuRiUfEaWVKpo8odSUq4rbxDFGX3BVW9knTfM9ETNnoWVdlPf9R07XHTHWcs24pB02rQXAz6nM3201YbPjGrfGvI4leMKt8cvPsri0cvyf561n/L+7FrD8YtfCC8dJFv/CiVf6zEL1riGyX2CLXSxopnLCo+/slRmlo+ffr0woULNRqNg9iBBp0pExPjzKxM0uGFF16gLVzw2ZULPyudlCqVU27uyOeee/b//sdlqf95pWHXw9VJeT5ekRbaOLugZGlEljSzQjpxteO9uxQzd4rHbTYp3sJHnzdwVZ/pryU0W2ghW+73E2jhZyH9vIMLQ5PpnDLXKKJsaPhY02HzrYqqRGkVEldfhDvhzuTqqZi0IO3xD+Y8c+reVU9mja1Sl+4wXXhoyKbPzXedtSJzv/qE6ZRHuXe3vOoBI1YOSLpnoG7skLBCs4zZ4nLylWShtzZCwfYFvQYC0P0BvQ9AsHUA6GlsTmJWAgAAAAAAAAAAAAAAGAgBaIBuggB0n+DuIx+3OHzr63m1b+fP3Rs5pkpevsds+RsmW+stdvGVa7kClnoZaLrsOmu9+5wN+bjjtPXGT81XvTN0yeFBy18fvPdrq9euKI/9J+zFnzJ3nNAuec6qvHbI6A13FVTflbd6wMj7udrPzXLPZMldy0ef1zePPhduHlBQM2DkqgHJ9xiFlw7VjTEfPte+aI1s+AxHz0AxewEAt11okvOs7RHrX0te/HhE6TqXko02c54xWf8JX0D929ZLQZOFJqHJrNn2leW6D01XvDlk0SGjte8O3XfG+olLqr2ngze/m7Dqmbh7t4eOnu0dmaXQRov5GLSDW4iFLk21atO9Z7+t51PQjW+99dbY0rEqlUosliiVSvLA1NR0xIgR5KkXX3xRpXJyUjm5ubmpnFUKpSImJmrHjm3//OeP5Nk/G//37KH9BRPjvCIt/GJtA5MloRmS1FJp6XLZ7B2K2btl4zdbFG0cWLj5L6M38tFn/tcSri80/bye/0WFTQMKN90Yfd7OPSbPZiwyii4fois2SZ5pWbDGbuQ8iW8kJizc+fyCXRdvHvXcF4ueODl7wd4E8m5Vvsd4xZvG5P103ccmFY8MyF0zIHXewMgJg0MKTJIq7MZWuZbe7xs13EUixe8G9EYIQPcH9D4AwdYBoKexOYlZCQAAAAAAAAAAAAAAYCAEoAG6CQLQfUhgpMusmsQ97xdteS13Zm3ImGrxlEdMVh0z2f41X9dWPwbN/zV/svDVoLmFPN5eb7nlC8utpyy2fmmx82urpy85vPmz+q/nHRYfMpqwh09SruWzzqtvXPj0M3kqv5qr8Vygl34u3Mx9zF07IG2BUeSEwWHFZsnTbYvWynIXyAPiJeykAXqOWGKfXOixeH/MxtdT7n0odMwap3HbLBcdMtl0ynwnV0DdttUYNM1AkwlFZs2WLyzWvm+y9Migxa8YbTxu/OhF+ycuuT14KmLj64krn4iduSF4ZIVHaLqjb5RYGyP1CrdzD7VIydfu2V/z089clPnaf689+uijaWlpUplULnc0NTUdmTOStL/00kvOzs5KJ6VCodD6+y9ctPCrr74i7cQHn7w1bUGBf7zIK8oyMEkSkiqJHy0dPU86c4t8zgPySVttijYMKqj5S8HGu/LWtYg+04VPP3OFnzdxZZ65hQ9AF/MBaDKFs1YMjJs6WFdsHDfJIv9+u1HLxWHDxGJMWehP4tL9N+yfcOjssofeqbh7h65wrf20R4fe++zggvWDYioGhY42jimzLqx0nrjeL3WMp8IZ06P3QgC6P6D3AQi2DgA9jc1JzEoAAAAAAAAAAAAAAAADIQAN0E0QgO5bRCL7mGGaFQ9n7vu4dOOhkZM3+xVvsLv7SeOqj0xrz1rtvsDVtW2WgRaWXWetdzeFoWu/ttr6pcXu01Z7vrZa8urg0p18sdiNXMQ5r4qrfymkn3PXDshbxz2rH30ezUefSXvGkoHRkweHFhnHT7YZVSkprFSEZ8lkChE7XYBeQOUmyZnmu+r5hHWvJt29K7B4jePEPebL3+QKqO++YE1nTbMMNFlYDPqcTe03VjUnze9/13jJq4OWvmq0/VOzJ7+XPHnJZ9enMesPJy5/JLpidWB6qWtQotQviqsG7RVu66mzHj0p8flXH+eqOTc2NjQ0bN6yWafTDRo0aEQ2VwH6pZdeksvlahf1xEnlb799lE8+N567WH9/zT3h6U5ekRb+CaLgFEl0jiRnpnRqteOc3YqpO+yLNwwdvfEuspCpl9tq9JksNPpcw/1+ghB9prWfSWP2/QMT7h6kKxkaVWY2YolN0RpJXJFE6YIJC/2RzFGcUxpd98rMQ2eX73i1dFKNT/Yi2+gJZhElFjmL5BM3+uTN9PH0U7De0FshAN0f0PsABFsHgJ7G5iRmJQAAAAAAAAAAAAAAgIEQgAboJghA90VSmcOIsuCNzxc8/MmE1c8Mn7DRc+xmy7kHjTeeNNt1zpovBd1mDJot31jX1ltt/9Jy6xcWS48MGbeLhSbJQh7kr+dj0Gu5j6PWDxjV9JQQgM7fMCBzxYD46YPCxhhHlVrmLJEUr1Ikljg6uTqwUwToZTQB8vErgqtfSVn9UuLkzT7FVeJpj5iues9kxzd8AfULN6Sf9Rc6oXacttpwwrzy6NCFLxtVvj74gS8tnmmQP/5twI6P4qpeTFhcF1W2RJtY4OwfJ/GLkmijJe6hltpY8fSFRe+feIvmm7+q/2rixPK5c+eSxx9++GHZ+LInnnziP//5D1n9+defHtxfk1bg7xlh7hdnH5QsDc+SDpskKV/lOGenckatuHSjacH6u0Zv/Muoam5Wckuz3DNZqrnZSucpSz+ThY8+k1UynVPuNYooG6obYzZsnk3RWof0KRJXH0Sfob9TqR0nzs94+qPFj5+cXrbBJWu+aMJ6z+JFvkGxzqwH9G4IQPcH9D4AwdYBoKexOYlZCQAAAAAAAAAAAAAAYCAEoAG6CQLQfZerp7x0bszut8Y9/NGE5Y+llK5zHl9rtvhV402nzHed52LQO8+1kYH+xrr2tBVZdn5tveO01bLXhpTu4oPOG67HoMljbnVDU/SZLJsHFG7iGrNXDkicbaQbOzSixGL4XFHxWvnw6QrPIAk7LYBeLDRJPXNrRM0bqSsOxE7Y4Dlmg+3sp03WfWy286zVAxdY1vn6cvb6Y+6ps9bbvrRc96Hp8tcHLzpktOrokEfO2Dz7g/PfzoVteTdx1TPx82rDC+f4RGUr/WIkftESn0iRR6ilLlW1smbO1+e+4FPQjb/88gv5+OefXGVo3p8vvfZUYUWSd5SVT7R1YJIkNF2aPFY6dols1nbFrN2y8ZssC6oHFmzgo8/87yTkrbthYelnWvh5U1PumV+Kt3If86sHpC8yiiofohtjmjTDcvQa0ch5Em2MmI0IANjZefq4lC+Km7jFedQipS7ZRSzGL/P0GQhA9wf0PgDB1gGgp7E5iVkJAAAAAAAAAAAAAABgIASgAboJAtB9nU+weta69Ec+mvzQB+PnPhgzpspxYp3JfUeNt5222M3FoFtkoL+x3vk1F30mj3ed1QtA84lnLvQs1HvWXzYNKKgZkLNmQMq8gRHjh4QVmaXOtC9aI89bqNDGSEQO9uxsAHo9qUyUmO+x6OHYmjfTFz8WVbrOZdxW6/kvmNR8br7rvBVXClo/Bk0z0PTjeZvd5OM31ps/N1/7vvHSw4MWvmy0/j3jJy6InvvB46GvIja9mbjyybjZm8JypmrCMuS+UWJttMQ7wt4txDwp12/73rX/+NdlFnvmvX/ijekLCwLiRZpIy4BESXCqJG60pGCubMYm+T275BO32BRWDypY/5cCWpF9TRvp52o2Zws3DygU0s9buYVM58zlA2OnDA4rNo6fbJlfaV+wQqobLpE6YsICwB0CAej+gN4HINg6APQ0NicxKwEAAAAAAAAAAAAAAAyEADRAN0EA+s4QneZ9X13ek1/M2PVmyd21ocXVomn7h65+32TH15a7LljvOmdzPQb9TdPCAtCWS14bzAWgN14PQBe0iD7nVg3IWDQweuLgsCLThEm2BZWOBSuU4ZmOEimSlNAnKVSS7Arf+59NqnkzfU5dWEmVcsIui6WvGW/5ynzXBZvrMWghAK1fDfqcTe3XVjUnzVe9Y7zoFaMlrxht/cjsmUvSZy777Pk8dv2rSSv+Fjt1TfCwMvegJKlfNBeD1uhsPHXW2WMjHn6qtv7MZ8c/fntp1XRdmlITbqmNsw9KlkblSEZOl1ZUyefsUkzdLipeP7Sg+q6CDXflVXG/eEAmIJd+FhYagK7mCrfTws/Xaz/zVZ/JzM2+f2DCzEG6scaR48yzl9gVrZYmjJEo1CL2+gEA7ggIQPcH9D4AwdYBoKexOYlZCQAAAAAAAAAAAAAAYCAEoAG6CQLQdwyJzGFYYfDmZ8c+/eWszYdGT6zxHbPRevbTQ6tPmNaetdp13nrXOZaBrv2GLbvO8AHoI4PH7ryLRp9ZAFovA51XPWD4soFxUweFFRlHl1nnLJEWr1ImlsidXB3YgQH6LA8/eenSkPWH06oPp83YGVhcJa34q1nlOybbv7bcTWPQNPRMA9DCwmegyYPt9VYbTphVvjVk4ctGyw8P2vO5xcEGxYHvAmo/iqt6KXHJ3ujy5QFJheqABIlflMSPj0H7RNom5/mGpDh56Cy0caLAJIluuCSjXDqh0vGeWsX0HZKSDaYF6+4qWH9X/roBOau59PMN0We6CIWf+eizfu1n8njkmgHJ9xqFlw6NKDEbNte2cK04Y5rUXYsJCwB3IASg+wN6H4Bg6wDQ09icxKwEAAAAAAAAAAAAAAAwEALQAN0EAeg7jFIlLbk7du9bU57+ctbav2eXrXcfu9V8/otDN35mvvMcF4PeefZ6AHrnGevtpy0XHx48tpYFoIX0M1ny1w/IqhyQcLeRrmRoxBiLzLni4rWKYVMV7v5idjCAO0JQrHrGpqgtRzPXvJAyaZPPmGr7mU+YVH3E/eYAF4MWSkGftb6egaYL12699UvLdR+aLn998IKXBt7/xuCH621e+EH9+NmQrccS1jybMH9XxJj5vjE5TtpYsV+0RBsj9kuwDsqyCUoRh6RJksZIxyyS3b1VMatWVlZjOXrdQD76fFfOGr7w89rmS17VgPx1/C8q8NXZuegzXbZyH/PWDUhfaBRVPiSs2DRphnXhGnHOAkdtrEQkQqV2ALgzIQDdH9D7AARbB4CexuYkZiUAAAAAAAAAAAAAAICBEIAG6CYIQN+RvP3VM+8f9sQns584OXP5/tSSKuX4XSZLjxhv+dJ81zlWCpoFoOstF7/aPABNHmevGpBy78DwcYPDCs3S7xYVr1HmznPyi5ayAwDcWUQi+7iRnksfSd7xbvZ9TyWM3+A+drP13OdNNnxqtvOc1e5vm8WghYUloXd+Y73lc/M175ksPTx4/osD170z9Mlz9i/+4PHI6YiatxLuPxB371Zd0Tyv5BJ5cLI4PM8hoVwUXyTJny2btkE+e6d84hbbwnWDCtbfVVB9V+4aVvg5p2X6ed2AUXqFn0fT6PMWbiFzdviygTEVg8OKTeImWeZXOoxeIYsYIZXIROwVAgDciRCA7g/ofQCCrQNAT2NzErMSAAAAAAAAAAAAAADAQAhAA3QTBKDvYGGxmvseKHzuq/mPfDD13j0xxVWSyQ8NrXzbeFu9BReDPmu964z1tnrLRa8OLtnBAtDkY86aAWkLBkaWDwodbZww2bZkrUtJpVtkllwsQRFZuMPJleKRk/2rnh9Weyxn4SMxJVWqslqLxa8ab/7SYvcF690X+Aw0P3d28ouQhN59zmb3WZsdX1vVfGq+6p2hiw4ZLXpp4JYPTJ79TnqwwWfv59HrjySsOhC7cI9uWrW2pFJWcp94/ErZzK2OFVtFxeuNC6rvKlh/V96aASNX8dHnGxcu/Vw1IL+am56j+cLPLP3MR5/JtB1ROTBh5iDdGOPIUouRS0RFq2VJpTKlC6LPAHDnQwC6P6D3AQi2DgA9jc1JzEoAAAAAAAAAAAAAAAADIQAN0E0QgL6z2dvbp4wM2vL3iS98s2j3m+OnbQ0uWmc747Eha46b7Pjacvd56x2nrRYdHlRSy2Urc9cOyFgyMKZiUMjoodFlVgUrnCZu8Ekf5+7sjsLP0I94+ClKF+u2vJGz9a2R9+zRjalynFRnet9Rk22nLXZfYKWgaQD6xhg0LRHNVVVff8Ks8q0hC18euPiQ0a5PLQ5+L3/2O+2+0wl7P8nf8VrW0sdcZ++UTNpoP2adacG6AQXr/5K3lo8+08LPLdLPeesG5K/XK/zML4VbuDA06ZB8r1FE6ZDwMeYZc+yKq6TDpzlqgsTslQAA3OkQgO4P6H0Agq0DQE9jcxKzEgAAAAAAAAAAAAAAwEAIQAN0EwSg+wO5QlIwOXbv6zNfOrNk80uF5Ru8izda3PPMkA2fmm2tt1j4ilHx1rsylw9ImGEUVjxUV2yevdCxfKN33ixvTYCc7QKgnwmIVM/elLDrWMGmw9nTtgUWV4umPWqy5rjpjm8sW41B04WvBs3VVt96ynLdhyb3vTlk0StG1cdN/n7J4d3fPN+6mvrouaS1bzje/YjJmBqj0evvGrVuwMj7W08/08LPo2j0WSj8vGlA4WbuY17VgPSFA6PKh4QVmSbPsC1cJc1d4BgQJxGJUKkdAPoRBKD7A3ofgGDrANDT2JzErAQAAAAAAAAAAAAAADAQAtAA3QQB6P7DzVM5dcnwAx/Pf+6rBaueGDF2rbp0h9nc54dM/uug9AVGurGDwwpN02c6TNjoWbzYNzhezTYD6K/s7ewSsr1XPDJs78dj1j4/bFKNd0mNzT3PGK//xHTnOevdF2x2ndfLQJ9hS1NBaOvab6y3fmm55XNL8nHbV5b7ztkc/pfipX85bfjIbPqjd43Zelf+ugE5a/m48+obFz79TJ7l0s8tos/56wcMXzowtmJQWLFJbLnVqEpp4UpFRLZUIhOx8wYA6DcQgO4P6H0Agq0DQE9jcxKzEgAAAAAAAAAAAAAAwEAIQAN0EwSg+5uAUI9l2wpf+HLpgc/uXfRQ4uiVjil3W+iKTZMq7MZWuY1f4xeb7eYoF7PeAP2eQiUZWR5c8+Kohz4qrXwqdVy1a+l2iwUvG2/63HzXeesbSkE3ZaCFhSsIfZYrCE0eb6+33HbKYu9Z640nTKc9OnB0DVfauWDDgPxqLu7MYtB89Dmviks531D4mY8+j9owIKtyYMKMQWFjhkaVWmYvEo9ZK08eJ3f2dGDnCgDQzyAA3R/Q+wAEWweAnsbmJGYlAAAAAAAAAAAAAACAgRCABugmCED3T4nDg2qemHTo7PL7n0nJWmhXeJ/TxGrf9HEalYuM9QAAPa4a+YTFMbuPluz9oHThX+NK1inLHzBd9obx1nqL3SwG3XoGWlhqv7ba/pXVti8t1n9sOv3xgYWbmiLONVyyOY+PQedWcQ/IKvdUU+Hn0Zu5OtAjVw1InmMUUTpUV2SeMUdUvFaeNVPuGYTfVQCAfg0B6P6A3gcg2DoA9DQ2JzErAQAAAAAAAAAAAAAADIQANEA3QQC63xKJ7DPyw6ZvDh6zVjJsoqurxpE9AQBtCIx0vXdTxiMfTdz99pjZu8OL14mnPmJy/zGT7V9bchno822Ugv7GeufX1rWnrWpPW+/6xnrDJ2bTH+cqQF8v88xXgx61oSn6zLeM3jSgcDP3IGftgLQFAyPLB4cVmSZPsy1cJctbpAiMl5IpzE4LAKC/QgC6P6D3AQi2DgA9jc1JzEoAAAAAAAAAAAAAAAADIQAN0E0QgAYAMJy9yD4+03f1/lGPfzZ16+GCKZv9x2ywvfupoes+Nq09Y7n7vPVOsrQSgLbiPp6x3nXmhgD0DYln/YWv/ZxfPWD40gExFYPDikziyq3z75MVrlRE5zrKFCJ2NgAA/RsC0P0BvQ9AsHUA6GlsTmJWAgAAAAAAAAAAAAAAGAgBaIBuggA0AEBHSR3FORN0Ow6Ne/KLaWufzZ6wwXPsFst5LwzdcNJs51mrXRf4UtD6AWi68AHo9Z+YcgHoTQNG8QFoLgPdIvpMnspaMTB+hpFuzNCoUqvsheIxa5TJ4+VqTwd2BgAAgAB0/0DvAxBsHQB6GpuTmJUAAAAAAAAAAAAAAAAGQgAaoJsgAA0A0DkuHvJJi5P/+t6Ux09OW74/bWyVavxO0yWHh2750nzneetd56xpDLr2G7bs/IYPQJ8wnfYYl3Uu4NPPtAi0kIEmjdmrBiTfYxReOkRXbD7sHlHxasWI2UpNsJgdFQAAmiAA3R/Q+wAEWweAnsbmJGYlAAAAAAAAAAAAAACAgRCABugmCEADANyKwHC3BZuyn/p89sMfTJ67J7a4SjJ5n3HlO8bbTlvuojFo/Qz0GevqE6ZTHuWyziz6TJdNA0ZtHJCzZkDa/IGREwbrCk2TptgVrpbnL1YGp8jsRfbsYAAAoAcB6P6A3gcg2DoA9DQ2JzErAQAAAAAAAAAAAAAADIQANEA3QQAaAODWxQ3Trnus5LnT8x54q2zG9pCiatvpjw9d84Hpjm8sd52z3nX2ehHo6o9Np+zXC0DXcB9z1w3IWDIgpmJwaKFxXLnNqBWORSudovNkjk4idgAAAGgBAej+gN4HINg6APQ0NicxKwEAAAAAAAAAAAAAAAyEADRAN0EAGgCgS4ilDrnjI/e8OuWFbxZsenF0+UbvMTWWc54dsv5T051nrGgpaLKsEwLQG7klr3pA5ooBcdONwoqHRpRY5C2Rj6/2yJioUmsc2H4BAKANCED3B/Q+AMHWAaCnsTmJWQkAAAAAAAAAAAAAAGAgBKABugkC0AAAXcjVUzFpQdrjH8x55tS9q57MGlulLt1huvDQkE2fm+86a7X7nE31CdMpj3IB6LzqASNWDki6Z6Bu7JCwQrOM2eLyjZ5FC721EQq2LwAAaBcC0P0BvQ9AsHUA6GlsTmJWAgAAAAAAAAAAAAAAGAgBaIBuggA0AECX8wt2Xbx51HNfLHri5OwFexOK1sjK9xiveNN4a73Fuo9NKh4ZkLtmQOq8gZETBocUmCRV2I2tci293zdquItEisLPAACGQgC6P6D3AQi2DgA9jc1JzEoAAAAAAAAAAAAAAAADIQAN0E0QgAYA6CZx6f4b9k84dHbZQ+9U3L1DV7jWftqjQ+99dnDB+kExFYNCRxvHlFkXVjpPXO+XOsZT4SxhmwEAgGEQgO4P6H0Agq0DQE9jcxKzEgAAAAAAAAAAAAAAwEAIQAN0EwSgAQC6j8xRnFMaXffKzENnl+94tXRSjU/2ItvoCWYRJRY5i+QTN/rkzfTx9FOw3gAA0BEIQPcH9D4AwdYBoKexOYlZCQAAAAAAAAAAAAAAYCAEoAG6CQLQAADdTaV2nDg/4+mPFj9+cnrZBpes+aIJ6z2LF/kGxTqzHgAA0HEIQPcH9D4AwdYBoKexOYlZCQAAAAAAAAAAAAAAYCAEoAG6CQLQAAC3h6ePS/miuIlbnEctUuqSXcRiB/YEAAB0CgLQ/QG9D0CwdQDoaWxOYlYCAAAAAAAAAAAAAAAYCAFogG6CADQAAAD0afn5+XV1dUePHq2vr7969Sp5cPjwYfIdjkajYT0MU15eTjYkmzc0NFy5coU8OHDgwLRp09jTrSHPVrWmsrIyKysrNTWV9YPugQB0f0DvAxBsHQB6GpuTmJUAAAAAAAAAAAAAAAAGQgAaoJsgAA0AAAB9VHl5+YULFxrbduDAAbVazXq3rf39kKdIB9b1RkePHmWd2nDlypWampqORrHBQAhA9wf0PgDB1gGgp7E5iVkJAAAAAAAAAAAAAABgIASgAboJAtAAAADQF9XU1LCUMZ8zPnr0KK2+vH///uPHj7Mn+PiyTqdj27RGfz8NDQ2HDx+m+6mtra2vr2dPNDZWVlayDfTQADQtO90M3YoiHVANujsgAN0f0PsABFsHgJ7G5iRmJQAAAAAAAAAAAAAAgIEQgAboJghAAwAAQJ9TWVkpZIvnzJnDWvVoNBohhdzQ0NBWHWhhP1euXCkpKWGtekgjeYr2admBHuLChQts/UbkO6u6ujq6LemDOtBdDgHo/oDeByDYOgD0NDYnMSsBAAAAAAAAAAAAAAAMhAA0QDdBABoAAAD6FvIdy9WrVxv5ZHNsbCxrbY1Q3bmuro416dHpdHQ/9fX17XwXRA5Bu508eZI1NWk/AE2R77W4M2hsrK2tZU3QRRCA7g/ofQCCrQNAT2NzErMSAAAAAAAAAAAAAADAQAhAA3QTBKABAACgb9m/fz+NFJNvY1hT206ePEk7t/w+58CBA/SpVms/66uqqiLdyK6aVXE2JABNNDQ0kG6kM1uHLoIAdH9A7wMQbB0Aehqbk5iVAAAAAAAAAAAAANA/ubq6btq06fz5c3v27PH19WWtAO1CABqgmyAADQAAAH2ITCa7cuVKI1/+mTxmrW0rKSkhnYnKykrWxCPbtlXXuSXSudVvkwwMQB88eJB0I6fN1qGLIADdH9D7AARbB4CexuYkZiUAAAAAAAAAAAAA9DdyuXzdunU//vgj9/Nn3q+//lpbW+vu7s56ALQBAWiAboIANAAAAPQh+fn59N+ShpR/pmgB5uPHj7N1Xnl5Od3PtGnTWFPHGRiAFkpWs3XoIghA9wf0PgDB1gGgp7E5iVkJAAAAAAAAAAAAAP2HpaXljBkzvvnmG/pz34vfXXj5lRe/+PJzuvrdd98tWLDA3t6e9QZoAQFogG6CADQAAAD0IVVVVfRfkfn5+azpZmhMmWDrPGE/qamprKnjDAxAnzx5knSrr69n69BFEIDuD+h9AIKtA0BPY3MSsxIAAAAAAAAAAAAA+omMjIzXX3+d/+Fy45V///TAnl0RkbqhxkNUaqdFSxacOcdS0cePH8/Pz7/rrrvYZgB6EIAG6CYIQAMAAEAfUldXR//9aPj3LUIBZo1Gw5raaOwoQwLQ5DyvXr1Kuh04cIA1QRdBALo/oPcBCLYOAD2NzUnMSgAAAAAAAAAAAAC443l5ee3b99B/+B/3/ve//33m2b9njxwhlzvKHR1dXFwcHByMjY39/H23bKv515V/kj7/+9//nnrqqeDgYLY9QBMEoAG6CQLQAAAA0IccPHiQ/Mvx6tWrbN0AQrHn2NhY1mRnd/jw4Y7up6WbBqDJEcmz/MFvODp0CQSg+wN6H4Bg6wDQ09icxKwEAAAAAAAAAAAAgDuYg4PD0qVLf/jhB/qz3mPvvTth4ni1i1qhUPj4+kRHR6WkpiQkJfgHaElPcwvz+MSYJw88/mfj/0jnn3/+uaqqSqlUsn0BIAAN0G0QgAYAAIA+xJCiy80IAeisrCzW1Kn9tER3cuXKFXKIlo4fP84fllNbW8u2ga6DAHR/QO8DEGwdAHoam5OYlQAAAAAAAAAAAABwRzIyMioqKjxx4gT9Qe+Zs98sXb7Yx9dbKpNqNJowXVhySnJmZuYIInvE8MxhsXGx3j7e1jbWNnbWRWMK3jnG/QiZ+OqrryZOnDhkyBC2X+jfEIAG6CYIQPcJ5eXlNEpl+J/pp/3JhnSVXFza0qHyk8JWc+bMYU0dQbcl2DoAAMAtEzLHbN0A5J2I/htTPwBNK0B3aD8t0ZNpX0NDA/l2i20AXQoB6P6A3gcg2DoA9DQ2JzErAQAAAAAAAAAAAODOExYW9vTTT9Mf9P7rp3/u3LUjMipCJpO4uKiDg4Pi4+MyhmVkZmVmjcjKpkZmZ+dkZwzPiI6JcnVzNbewUDrJ5y2Yc/bcN3Qnhw4dio+PZ3uHfgwBaIBuggB0nzBnzhz6tmhggiorK4v2F4LLQsu0adNoiyGErYiO/uH+kpIStmVjI2sCAAC4Zfv376dvLob/UlBtbS3dRP9bnbq6OtqoVqtZU8fRAPTVq1fJA3319fV05yj83K0QgO4P6H0Agq0DQE9jcxKzEgAAAAAAAAAAAADuJEqlYuPGjT///DP/c94/n33+mRHZWY5ymZPKSav1i46OTk1NHTZs2PCszEx+4TPQI2gGOic3OztnRHp6uk6nc3JyMjMz8/P33rJj08+/XCH7unr16q5duzw8PNiRoF9CABqgmyAA3Seo1WrybkjeE0+ePMma2kXDYWQTIdR16wHogwcPslbDkFNlWyIADQAAXaempoa+uZB/YLKmmyFvYXQTmUzGmuzsKisraWNHf8NH31E+AH3hwgW23kSj0Qhv3PoHha6FAHR/QO8DEGwdAHoam5OYlQAAAAAAAAAAAABwZ7CwsJg6deqZM2f4Hx83fvDh+xMnl6td1VKZ1NvbOzw8PCkpKT0jfRgXfx42nMgcfmMGekT2yOyROSNz83LIg+SU5KCgQAeJ2NzSIikl4e/PPdXY+CfZ7ffff3/vvffa2tqyo0I/gwA0QDdBALqvOHDgAH2fvWlOSyaT0dAV2YQ1dUUAmtDpdOyJm8nPz2fb8FgrAADALRP+KoLh72j0d3IaGhrYOk/4SwXkAWvquLYC0AT5FovunzxgTdDVEIDuD+h9AIKtA0BPY3MSsxIAAAAAAAAAAAAA7gBpaWlHjhyhP9k9e+7M8vuW+fr5SCVSNze34JDguLi4tLTU9Iz0DBqAHsYHoHmZhH4d6OzsnNycvLxcspCWxMREH19fW1tbe5FdSVnx+x8co4c4duzYyJEj2bGhP0EAGqCbIADdVwhZ5JqaGtbUhmnTptGe+fn5rKmLAtCG/x1/odYmxVoBAABumUajoW8uBv5pgtjYWNq/rq6ONfGEdsPf3VpqJwAtk8kaGhrIs+QjOWfWCl0KAej+gN4HINg6APQ0NicxKwEAAAAAAAAAAACgT/P09Nyz5wFaY/LnX/6964HaqJhIsUTs7Ozs7+8fFRWVnJyUmpaalp6WTpaMdL4IdAZZhtM60C0z0COzc3JH5uXn5o/Kz8vPy8rKio2L9fD0sLCwcHJWLlwy7/y3XJHp//u//3v00UfJIdh5QP+AADRAN0EAug+5cOECzVGx9Ta0Gsa6xQA0fbsnHw2JcAmRMroVwZ4AAADoCvSdjrjpX0UghN/JIW9qrKkJrQxtyLsb6VBXV9fyLyG0E4AmhCLTt5KxhnYgAN0f0PsABFsHgJ7G5iRmJQAAAAAAAAAAAAD0Ufb29gsWLLh8mStnRbzw4vPZOVmOckeFXO7t4xMerktIiE9OSU5JTUklC5eB5mPQGVwMOqNZBjqLZaBHZI/IHpmdnUMz0Hn5+fmj+Bj08MzhkZERKpXKwsLCP0i7Y9fWX3//hRz0p59+WrmyUiaTsXOCOx0C0ADdBAHoPqSqqoq+8+qXdm6GXETah3RmTbxbDEDX1tbSBzetP00cOHCA9GxoaKAPCPYEAABAVygvL6fvL4cPH2ZNbUhNTaU9T548yZr0GB5Qrquroz3JDlkTr/0ANCFkrFuGp+HWIQDdH9D7AARbB4CexuYkZiUAAAAAAAAAAAAA9DlGRkYFBQUfffQR/8Pfxo8+/qBi6iS1WiWVSjw9PYJDgmNiYxITE5KTk5JTkmkGmotBp6XSUtB8DDo9Y1j6MG5pVgc6c8QIvTrQeXn5o/JHFYwih8vPz8sYlhEaFiaTyaysLVMykp978Rl6AqdOnSorKxs8eDA7P7hzIQAN0E0QgO5DNE1/9P/AgQOsqYXKykrap9nVvMUANNmKVtBsaGggb8fs6daQk6SFn2tra/fv389vjQA0AAB0MaGu8/Hjx8lbD2u9EXnzEv4WQVu1osnmtENdXV1bb3DCLyCRg7KmJjcNQAt/FaHltnDrEIDuD+h9AIKtA0BPY3MSsxIAAAAAAAAAAAAA+paQkJAnn3yS/vj2228vVN6/wtfPVyIRu7io/QMCIiMj4+PjE5MSyZJEJCcl81J4qcSNGWi+FHSzOtCZI0ZkcRHonOycPL4O9Kj8At7o0QV5eblpaakBAf72InsHiaisfOzHn3xAT+bgwRdiYmLYWcIdCgFogG6CAHTfcvjwYfLGd/Xq1bZCWvX19aTD0aNH2XqTWw9AC4/J5wx7ujW0VjQ5Q41GgwA0AAB0E/IuQ9/yiCtXrlRVVZWXl8fGxqrVavKGVVlZKfwVAqKddy6dTtfQwP60Edkh2Q/ZnHxHRPczZ84c4SgXLlxo+Z3STQPQhJDVbucPOEDnIADdH9D7AARbB4CexuYkZiUAAAAAAAAAAAAA9BVyuXzdunX//ve/Gxsbf/v91z11u2Nio8ViBycnJx9fnzBdWGxsbHx8fAInkeAC0EksAE3oZ6BpDDo9I43PQKcPG5YxfDgfg84cnjUiM2tEFllGZI/IzsnOzcvh60DnjRqVXzC6oLBw9OjC0bl5uUlJid4+3tbW1moX1dIViy5+f4E7q99+27Ztm4uLCztjuOMgAA3QTRCA7luEP/rfao6ZvNO29ax+lJk1GaDZVvTv+Dc0NNBnW1Kr1UL5Z7KKADQAAHQf8qZDfy+oHeRdqaSkhG3QBrIfIaPcFvIO2Oq3SYYEoDVNfxuB7IQ1QRdBALo/oPcBCLYOAD2NzUnMSgAAAAAAAAAAAADo/czMzCZNmnj69Gn+x76NL758MCc329FRJpNJNRrP4ODgqKio2Li4+CZ8BDohMTGhKQPdSh3o1PTUtAwuA52ewQWg+Qw0H4HO4kpBcwFoInvEyJzs3NxcWgd6VMEomoEuKiokH0fmjIyLj3NxdbGytgwKDdz9YO0fV38jp3fhwoVZs2ZZWVmxs4c7CALQAN0EAei+hbwB00KVLWs8E3V1deSpK1eutKwP3SUB6JKSErraVpiMfDrRDrGxsWQVAWgAAOhu5J+Y+sWeBeTfhuRdSa1Ws343U15efvjwYaHes4C84ZKnWKcWamtrSQdyAmy9DZWVlaQbgSLQXQsB6P6A3gcg2DoA9DQ2JzErAQAAAAAAAAAAAKCXS0lJefXVV+nPfT8+8dHU6VOcXVQSicTV1cU/wD88PDwmJjqWiIuN48TGxcclcCFoFoNOSkrkFi7/zH1omYHmY9CsDvSwYVwRaG7JGs6VgSZyRozM5TLQuXl5o/Lz85vqQBcVFRUXFxUWFY7IHhEZGaFQKm3sbIZlpr386gv0VN96663MzEz2GuBOgQA0QDdBALrPqa2tpe93za6XTCa7cuUKaa+rq2NNerokAE1cuMD94YVWa1gK4eyDBw/SFgSgu4pGoyHXgjA8yXcHw2gAQKvI2xD94qDT6VhTZ5F/s5L9kK82bB16KwSg+wN6H4Bg6wDQ09icxKwEAAAAAAAAAAAAgF7L3d19165df/zxR2Nj43eXvrt/daVW6ycSiZzVzr6+vmFhoVFRkdEx0WSJiY0hYmNjWAw6Pi4+gSzxCYnxiYkJiSwDzUpB0wx0SmpKarp+Heg0Wgd62PBhNADN1YHOyhyRPSJ75Iic3JGsDjTNQBcUjC4cXVRcVDymqGRsCXlAepLzkUjEEpl4YsX4Tz77iJzzf/7zn3379vn4+LDXA30fAtAA3QQB6D4nNjaWDxU3VlZWsiZeeXk5bU9NTWVNerK6KABNPmFoS8salnPmzKFP0fLPBALQbVGr1WRsyRWs4pEHZLWdOC8ZfzqSpBtruiPQiKEh2Aa8O3U0elZb10KYzgAAvRAC0P0BvQ9AsHUA6GlsTmJWAgAAAAAAAAAAAEAvZGtrO2/evEuXLjc2Nl79zx8P7XswNj5GLHaQK+QaL01QcGB4RHhUVCS3REeRhctA8zHo2Di+FHQ8Vwe6ZQaaD0DzGejU6wFoIQOdkcEXgR4+jGagM7kM9PCsrCwuA53DZ6DzWAZ6VMEoloEuKioeUzy2dGxp6diiosKMjAx/f397kb2bh+t9q5Y1/OMSOf9//OMfy5cvd3BwYK8N+jIEoAG6CQLQfdHJkyfJ21x9fT1b5x08eLBlo4C8q5JniVsMQLcs8yygZ3X8+HG2jgB0a3Q6HRmWq1ev0pHRd+XKlZqamlYLjt6pkV9aUNwQbAMeAtDdof1rQWb34cOHyfsF+QrANgAA6AUQgO4P6H0Agq0DQE9jcxKzEgAAAAAAAAAAAAB6lYEDB+bn53/wwQc06HDo1ZfyC/KkMinh7u7mr9WG6cIiiEi2REZFkkUvBh3DxaAJLgZNS0FzGegELgOdkEQWmoFOSSZLSloKWVgGOj2V1oHOGKYfgx6WxdeBzsrOGjEyKydnZE5uTm5eLpeBbqoDXVhUSDPQ4zilowsLUlNTNV4aG1vr8MjQvX/dc+3//kMTGyUlJYMGDWKvE/omBKABugkC0H2RUGtZKPas0WhoppZcUNrSTFcFoInKykraqF8alrzV0kbygDUhAN0CGZxm0efjx48fPXpUv/HChQstZ2KvjfySkydnRT6y9Q5CALpr3crlMPBa1NfXt1pj/hbd4idSd+iFpwQALSEA3R/Q+wAEWweAnsbmJGYlAAAAAAAAAAAAAPQeQUFBjz32GB9saPzs80+nz5ymdnV2cBA5q519fH2Dg4N14bpwKiKci0FHRETyonjRMdHXM9CsFHRTHWhaCprLQCcmJScmp3AZaBqAphnotKYMdAafgc6gGehMVgo6a0RWVnYWVweayM3J40tB0zrQhTQDXczXgR5XWja+bFzZuILRBQkJCWq12t7BfsTI4a++doi+qGf+/oxOp2OvFvogBKABugkC0H0ReZujkdna2lraQq4jWSWNrdYPJrowAC2ErQ8cOMCa7OyOHz9OWk6ePMnWeQhA6xNiuwS5cPrxcYKsHj58mD574cKFZtfxzg5Ad3RzBKDbciuXo61rQT4z8/Pzq6qqyHznR51TU1PDnu4it3Lm3aQXnhIAtIQAdH9A7wMQbB0Aehqbk5iVAAAAAAAAAAAAANAbSKXSNWvW/PTTT42NjZd/uLRm7Sqtv5+9yF7ppNRoPAMDA8LCQnW6sDBdmI7HUtAsBM3HoKP4GHR0VHR0szrQsXF8BpqWgk5MpHWg+Qx0ajK3pHFJ6NS0lKYMNI1BcxloGoMePnxYJheD5upAjxyZTTPQuXwGOp+rAz1q9GguBl08prhkbMm4snHjx5dNKJ9QVlZG+kRHR8nlckeFbMq0iZ9/+Rl5df/+9783bqxRKpXslUOfggA0QDdBALqPomHEhoYGmUxGVk+ePElWDx48SJ9tqQsD0ERtbS1pFPLW5G2fdpszZw7tQCEALSADdeXKFTIU5KN+kexmhBETou0UAtD6EIBuy61cDkOuRX5+Pvmaw499Y3l5OWvtCrdy5t2kF54SALSEAHR/QO8DEGwdAHoam5OYlQAAAAAAAAAAAADQs0xMTMrLy7/66qvGxsb//Pc/f31kX3xirIODg0wmc/dw99P6BYcEh/LCePoBaIJFoHl8GegWGeh4bqEZ6ISE+ERaBzo5ITExKTEhJTEhNTExNTkllftfOpeBTqdLRipfBzo9Yzifgc4czmWgR3AZ6OyRI0bmjOQz0HlcHehRo1gGuqiweEzx2LEltA50+cQJEydNHFc2jnQODQ0Rix28vD1Xra3815UfySs9c+bM1KlTLSws2ChAH4EANEA3QQC6jxKiySUlJUL+uJ1kbVtR5va1tZVGo6HtNKd78OBB8lhIYwsQgBYI1XPbuUYUzbJfvXpVfzARgNaHAHRbbuVyGHgt1Go1zUC3nO+34lbOvJv0wlMCgJYQgO4P6H0Agq0DQE9jcxKzEgAAAAAAAAAAAAB6UFJS0qFDrzTyXn/jSEHhKJlMKpaI1Wq1j49PUFBgiEAvBM1VgtbpwrkUtC6iKQQd2VYd6DiuDnRsfGx8fFx8QlxCYnw8F4ROSMmIGVYQljU2JLNYlz4yhqsDnZqamkZj0Ck0Bp2RkcbHoDP4GHQGF4Pm6kBnjhw5YuTIkTm5I3Nzc/LycvNH5eWPGjW6oGD06NFFxUUlJSWlpaVlZVwd6EmTJk6cPKm0dCzZUOvnJ3IQRcaE73/sr42N/+Ne8uuvp6ens7GAvgABaIBuggB030UDiwcOHKipqSEP2s8jdm0AmqCh56tXr5L3cNqHfC6x55ogAE2R60IGiozDyZMnWVPbyHiS0Sbfj7F1XsvIL5mt+fn5VVVV5CP53ow2to/smW5CQ/Os1TAajYYcuuWBbjEk2n0BaDLm5FnSk3xakgcd+uJGBqe8vLyyspJsSF44a21C9zxnzhzSx8BhvJWTIZ3JJgZe6Fu5HIZfC/La+eFvXqdcX0dfckfPvNNDSjqTz386nu1fvk4MJplidOfkKF01xQCgfQhA9wf0PgDB1gGgp7E5iVkJAAAAAAAAAAAAAD3C1dVlx44dv//+e2Nj46kvP591z0wXV7W9vZ2zSqXRaPz9/YOCgoKbNEWg+RR0WGhYWKhOJ5SC5nLQfASa1YG+noGO0ctAx8fGcUtcXGx88rDIvLu9J2xynr5PPutx2T2PO9291718tX9ueXRqZnJKGheAZhnoDLKkpWewDPRwvhT08KzhWdmZI7K5DHRTKehcvhR0fkFBQWHh6GI+Az22dOy4snF8BnrS5IqKyZMnjx1bkp6e7ubmLpY45I7KfuOtI+S1//HHH3V1dZ6enmxcoHdbhAA0QPcgk4tGRhCA7nOqqqrI29nVq1dpQdZ2wohEVlcHoGObyk7T3CQ5jWaZXQIBaKq8vJyOA3nAmjqIjD/dA7kiZJwPHz5MVwX19fWpqamsdwvkU4V+kui7cuVKZWUl66FHOBZ5TI5FPq9oepsgF5Q0Cp8V7TDwlXZHAJqeM3l1tI+AHKXVTKr+6yXf39IK3ALy2mtqamhPgryuZiNJVvPz89nTLdzKyZAvyIZc6K66HB26FnSUyGtn63oMf8mdO/OODiklk8lanQXkheh/FnV6MFvdOblYrXa+6RQDAMMhAN0f0PsABFsHgJ7G5iRmJQAAAAAAAAAAAADcZlZWVvfee+93333X2Nj4jx9/WLe+yj9Qay8SOcod3T3c/fx8AwMDg3jBwXQJDg4JDiELF4AOCQ1jGegwLgMdxheC1kVEcBloVgQ6MjKKz0BHc1Wgo2NiY2LiaB3omLjYhGEFunHVzrOedljypu3qTxzWfylZ/6Ws6qRyzXtelS+GTt+QOHxUampaMs1A8zHoNCEDzRWBHj5sOJE1PHNEZnZ2VvbI7JyckTk5LAOdz2egm+pAj+Ez0KXjJ4wvn1g+efKkKVOnTK6YXDymOD4hwUnlpHJWzpw17euz9WQcLl++vHjxYjs7OzZG0FshAA3QTRCA7rs0Gg0fmWN07ZYOFYJ9NTU15HE7ZHplpMkq3Wpaa7Fp/XRmbWvxawSgqbq6OjoO7V+jdgiJyZKSEiGh29DQcJQvUitoeZnI1dTvQzfRbyGPWdcm+unMZgFcwwPQ7aSx9XV5AJp8ERPGh+Bf61EhmXr16tWWgVRhb2q1ur6e++aQOH78uH6elVxB0jM/P5+ukv2Q3epncOfMmUP3pu9WToZ8qgj7b/9Cd9Xl6NC1ED6lyaCxJl6HXnInzrwTQ0qQkyQXlPYhmo0nGWdhYnbilMjO9fdGd07OhK03ffLou+kUAwDDIQDdH9D7AARbB4CexuYkZiUAAAAAAAAAAAAA3DYDBgzIzc2lP/v/s/HP/Y8+kpiUYC+yl0qlLi4u3t7eAf4BgQx5EBAUFMgtwUFkaSsGzWegw/g60DQGHR7BxaC5JDQXg6Z1oGOjY+JioiPjcgoTp+3yuOd5h/uO29V8I9r+ncPOSw67Ljns/F66/YJ6R71uz1fDFj44Ij07JSUtmSyp16tBcxloPgbNLcOGDxuWOSxzxPARI7gMNB+DzqGloPObSkEXFRWOKSkuGVtSOq60bHxZefmESXwGetqMaZMqJo8eXUjOUSqT+Ph5VW+s+vcvP5ExOXHiRGHhaCMjIzZe0PsgAA3QTRCA7tOE8Bx5i2dNbTAk2EfpfxoIW+kHLgUlJSX02atXr2o0GtaqBwFo6uDBg3Qc9MPlHSIkJmkotq6uTj9LPWfOHBq4bGhoaBZIpWXCCXIt9DfRT202y4wKxyK7JR/JPslXCfKZwJ6+Ed0J+cjWO6jLA9D0fMhoNCtunZqaSsPN5KlmX+iEvdHLRDYUPpljY2PpGRJklMjgk83Jp71wHcljekXIKLW8uLdyMnRbwy80Rbfq6HhSHboW5FOCdCaapYE78ZIpA8+8c/unWxHkC6Zwccn1IpePvmryseV4GnhKwuzW3zkhnBJBpiFr5XVoigFA+xCA7g/ofQCCrQNAT2NzErMSAAAAAAAAAAAAAG6PgAD/Rx999M8//2xsbHzr6JtFYwod5Y4iB5HKWaXRaLR+2gDGPyAwgC6BQYFkuZ6BDuEz0KE3ZqBZHWi+FDQNQEeE8wHoCD4AHRkdHRUdGx0RFhMTHje5KvDe5x2XvytaX2+79VurnZesH7hk+8Al692XrHddFu383qPuQsrOE5mjZyQmpiSnpLIMdFMMOpVmoMkyjKsGPWw4zUBnZ43IHpE9Mntkzsic3Jw8vhT0qFGjCgpGFRWNLi4uHlMyZuzYsWVlZRMmTJg4ceLkisnTpk+bPnPGxEmTcnNzAwMDpFJJXEL04wce5UMIjQcOHAgJCWGjBr0MAtAA3QQB6D6tvLycvoW1WoBWX3cEoAlajZW8gbL1GyEATdHfQGtoaGDrHSckJolWa8QKgdRmUUtyBY8ePXr48GG2rod8E0hOiWxCLiJr4gnHusrXOW41aCswMCTaFho/JSdAzrNVzfK1lHCGpANr4tE4KUFGgzXpIZ/Y5BWRZ5sNoP7Y1tTUsNYmsbGx7Dlefn4+e6KJMPLN5uCtn0yHLjR1K5ejQwFo4ZcfyAmzps6+ZMqQM7/FIW1ZiZmglbbJBCEXmjU1MeSUhHFodecymYx+hST0v64Kp2TIFAOA9iEA3R/Q+wAEWweAnsbmJGYlAAAAAAAAAAAAAHQ3sVi8atWqf/7zn42NjV9/c3re/Lmubq52dnZKpdLd3d3X19ffX+vP/Z981PoH+JNFiEFzxaBZDPp6HeimJHRIaBgXgxbqQOvCdXwMmpWC5mLQUVwMOjw0Ksg7MiLRa9xW2dyXHO4/Yb31rGjvZdUDl0W7L1k9eNn+kQbVnsui2ksOOy9ot3wcM3FtaHRCdFJiMsHFoPklNS05LS01LT2NLE3VoDOGZWZkZg3LysrMGpGVzcegc1gMOo8rBV0wanTh6KLiojFjxpSUlpSWlY4fP758YjktBT195gyyjJ8wITMz00ujkTlKC4sL3n3vHTJKP/30U3X1ekdHRzaC0GssQgAaoHuQyUUjIwhAA3QTGi29aZXudgiJSbIr1nQjmUxGSxEfPHiQNRmgrq6ObHL16lW2ztNPZ+pXtG2VISHRdtCRaUd9fT3rqkc4w2YBaHoyZJ8tizFT9PWSgdLvIOyt1WMRNL9OtBVybfXZWzyZzl3oW7kc9FoYuC0Zee4sb8xhd+4lU4aceef2T8vkt1Uzm2hrb4acEi3/3M7OU1NTSQdCf6A6NMUAoH0IQPcH9D4AwdYBoKexOYlZCQAAAAAAAAAAAADdx9jYuKys7Msvv2xsbPzll1+2btsSEhpsx/+M383N1dvbW0v4cx+4j/ziT7AMNHM9A03rQDdloEMIIQOtC+NKQdM60OF6AejIiPDQiFBtpIeLty7LYex227mvWFSeMH6qIfLTXxc88oPX7ku2r/1U9PUv2//+o27H95Zbv3Vcf0I7dZtveHxITGxMEi+ZVoNOTU7lYtBCBjotIyM9g8jMGN6UgWaloEdyGejcvNy8vLxRo/ILRhcUFRVyMeiSMWPHjS0rGzdhwoRJkyZWTKmYNmP6zLvvnjZ9WllZaXJysrOzysVNPXfBnO8ufUtG7Ouvv548ebKpqSkbTegFEIAG6CYIQAN0Nxot7ZIAdFvFtgma12xWzrl9ZPrT3eqnMIVj1dbWsqa2GRISbQcdmXa0umfhDJsFoGljO0MklBDW6XSsSW9vrVYmJkg77dCsxrOAvopmZbbpJp0+mc5d6Fu5HPRVGLhtqwFo2tLRl0wZcuZ0247uv9Wy0IYw5JQM2Xl9fT3poz/9OzTF4KbINzB0PB955BHW1K6W/RUKxY8//khayAUl/zimjdBXIADdH9D7AARbB4CexuYkZiUAAAAAAAAAAAAAdJO4uLhDhw7Rn+w++9wzw4ani8ViiUSiVjtrNBpfP18/Py35H120bNGLQfvrZaCDuBT09TrQTUWguRh0UwY6NCxMpx+DjgjnhIaHBUUG+IY4yuSRo23G7jCfc8jkvo+GPvit34s/Fey5rPzbD97nfn28/teHH/uH//bvLTZfEK05oZqywz0yMTAsXBefEJeUlJSYmJSUnJSUkswlofkwdGpaKpeEzkhL56tBZwxPH56VkZU5PJPGoEfQGHQ2i0Hn5xXQUtBFRcVjiseOLRk3rrSsrKy8nCsFPXXq1OkzZsycdfe0aVOLi4tiYqLlCnlgcMD2nduu/ud3MnRHjhwh58DGFHoaAtAA3QQBaIDuRksINzQ0sPWOExKTZMKyphZoTvdCG5WDKfJ9YFZW1pw5c6qqqg4ePEijmYT+3DfkWAJDQqLt6FDoViCcoX4AmrwE2lhXV0faWyUEvsljtpkBr5eMFe2QmprKmm7UchC672SIdi70rVyODl2L/Px87iz1QuGdfsnUTc+8c/snn/C0RT+obaCbnpKBO6clqPWvV4emWF9x4MAB+qJaOnPmDLlqLi4urGtXI9/A0AP1ngD0lClTPvvss99/5/5FSdFBSEhIYD3aIJVK6bZsMx75Qj1//vyWA3jTMb/p4e4MCED3B/Q+AMHWAaCnsTmJWQkAAAAAAAAAAAAAXU6hUNTU1Pzyyy+NjY2ffPLxpIpJTionkUikclZ5eHj4+Pj4NXNDDPp6APp6HehAvTrQQgaaLwUdEsrVgeZj0KFhuhtKQYeFhOtCwkMDw708fMQO4vBRVmO2m89+wWzZe8ZrvjDbeM5y60WLPZeVz/8za/8/AnZ8b73tonXNWdHKD6QTalThsQEhYcGR0RGJSQmJHFoKmltSyJKakkqW9FSyXM9AZ2Zk0gx0Fl8KOnsEVwo6h6sGnZeXO6ogf/TogsLC0awUdGnpuHHjJkwYP3Fi+eSKyVOnTZt598y77545ZUrFqIJRwUFBjo6yjOFpL738AhnDX3/9ddu2bc7OKja+0HMWIQAN0D3I5KKREQSgAbqJUEKYrXdcq5HfZtrKxarV6srKSprCbIv+3BeOVVJSwpradtOQaPu6MAAdGxtLGw2hv+FNx1YIQMtkMtZ0o5aD0H0nQ/SGALQQNRZC4Z1+ydRNz7xz+xe2IgNLWwxn+Cm1v/OW01+4yoZMsb6inTAude3atZUrV7LeXYp8A0MP0RsC0PHx8adOnaL7b1U7J0m21c9MN3Px4sWioiLWlXfTMScMHJM+DQHo/oDeByDYOgD0NDYnMSsBAAAAAAAAAAAAoGuNGTPmyy+/bGxsvHLlpw0b1/v7+zs4OCgUCg93d28fbz8/X1+y8MjjpqUJDUATbWegg4L5CDSffmZFoGkMmq8DzTLQ4WHkYUiQThcaHuQf6qr2sLUSaZOtR2+0nP602fw3ht73kXHVKdOas5ZbLlhuuWhOlq3fWm06a1VdL1p2VFywVMkdIyQ4NDw0Nj4mMTExISExIT6RqwOdnJSczGeguVLQKVwp6PTUNBqDHpY+jItBD8/MGp7Fl4LOztYvBZ2TPypvFF8KurCokJaCLi0tLSsbN2HChEmTJlVMnTJ95oy7Z91NlomTJo4YMcLL28vZWTVj5tTz58+S8fzmm28mTBjPRhl6CALQAN0EAWiA7iYkaDs9xTqdi01NTW1oaKDbEleuXDl69CjpSU6ppKSkpqaGtuufmCHHEtw0JNq+LgxAk1dKG+vr68kO2xcbG8s2M+D1CpePrbdAdkieJR/ZeneeDNEbAtC1tbXcWTY2qtVq2tLpl0yRRrIt+cjWW+jc/oWtyMDSFsOR/ZANyUe23oKBO28nAG3IFOsrhDBus8StVCrdtGmTkOtdsmQJe6LrkG9g6M57PABNvqgKr/TIkSNCAWYyCDNmzBCeOnbsGG3XR7alzxLNthUG8Nq1a/oZ6HbGXP9wd3wGGgHo/oDeByDYOgD0NDYnMSsBAAAAAAAAAAAAoAtNmjTpf//7XyOfh8jNyxWJREql0t3d3dvbm0WcubwzC0CTB0Iemj3HoxFoggtA8wJoDFrIQAt1oIUYdOj1DHQon4EODQoLDQ4LCwv39QhycnRTe4kTJlqP2W458VHju18YtPCtQZUfDV3zuVl1vfmGbyzIsv60+ZovzFZ/Zlv5nnL6g+qUQr+gkKCAgODIqIiEhHh+SUhMSExMSkxMTkxKTkxOpgWhuRg0WdLSUtLSU9My0jK4GHQGF4POHJ41gotBjxiRlT1yRFMMmisFXVBQMHp0ASsFPXbsuNJx48ePL59YPnlKxdRp02bMnDF79uyZM2eSxrS0NIVSERIa/OHHH9IfHs+aNYuNNfQEBKABugkC0ADdrby8nH4vQR6wpg7qXC5WJpPV19eTxoaGBjLTW07wOXPm8Hu9EwLQarWaNpIXxZoMc9PX24kAdPedDNEbAtAnT54kncnnFVu/hZdM3fTMO7d/YavKykrWZLCbnpJGozFk5wcPHiR99MeqQ1Osr2grjEsJ6d7z58+7uLiw1i5CvoGhO+/ZALSwE6LVnLdUKv3wQ/bvymanKtR+vnbtWqvbtjqABo75rZe17uUQgO4P6H0Agq0DQE9jcxKzEgAAAAAAAAAAAAC60Ntvcz+kJ/71r3/Nnz9fo/F0dXWlUWaWbubx8WdeUwCaD0M3aaoD7X9DHWj/gEA+Ax1E60A3ZaCbAtBcBjqsKQMdGhoSGBoSpAv2jwgI9Ese5zj7KbtFb5qVP2JesGXw+H2DZj43aP7rRkuPDan82Pj+T01WfmJS+aHJkmND5x42W/KG9MHvtLWnAis2+8ZmaUNCdDExcfHxcfEJ8QQXgk4iC81AJ3IZ6NRkuqSmpXDVoDNS04elDRNi0Flk4WPQtBp0zsjcvJy8/LxRo0YVjC4oLBpdPKaYi0GXjqWloCdO5kpBz5gxY9asWbNnz54ydUph4ei58+aePXeGDuynn37Kxhp6AgLQAN0EAWiA7qbT6ej3EidPnmRNbdNoNKmpqWylSedysfn5+XSrtjKjQh1f/bnfoXTmTUOi7evCADRBa13X1NSwdcPc9PV2IgBNdNPJED0egBZOknz+sCZe514yZciZd27/dKu6ujq2bjBDTol0uOnO6S8h6M/9Dk2xvqL9MK4QDm5Ww7hLkG9g2jl0Sy37d0kAWhiBVgs8U0LQudmB2h89ivQho3fmzBlhAHtwzHsVBKD7A3ofgGDrANDT2JzErAQAAAAAAAAAAACALnTikxONjY1//MH+1u3rr79eVlbmp/XTeGm0/nyoWaslqwTLPXO1n/Uz0E0xaC4D7cdtwi8sAx3IYtCB12PQtA709Rh0CB+DDg4MDfAm/wlJH+s182HZxtM2G78yL9k8JCjHOGGmyciqIeP2Dpn6tNGsFwfNf23QgjeHLHhz8LzXh0x/duiYrSaRY0wK7rfbfcb3+T/Ct34UVLYyICkzMjoyLjYmjuAz0FwMmiahk8jCFYTmSkHz1aCTU7gYdEp6RmrGsLSMYRlcDHr4sEwuCc1i0CNzsnNys/PycvNH5RcUjGoqBV1cMnbMuLLS8ePHT5o8uWLKlMmTJ02bNnX9+urjx4/Twfzl15///PPP8+fPs7GGnoAANEA3QQAa4DYQosYlJSWsqQ20Z319vUajYU2dzcWS2U1arl69KpPJWNONaMST6HQA+vDhw6QnOVu23kFdG4Cm37l11d4EnQtAd9PJEO0EoG/lchh4LdRqNY0Uk4/kMWvlde4lU4aceef2T7c6efJkW7OgLYacEjkZ2qetnet0OjIBSR/9sHiHplhf0X4YVyh+3CyMS8bnscceo5971OXLl1euXNlqlWiyk02bNgmdya6OHDlCepJvYGhLs0Mb3r/9APSUKVM+++wzuglBzrCurq7ZGRqeNhYGSqj03OmkcufG/M6DAHR/QO8DEGwdAHoam5OYlQAAAAAAAAAAAADQhb744vM///yzbPy4efPmfvvtt42Njf/5z38eeeTh4cOHeXh4+Pj60Bg0DTnzqWcezUDzC32KC0nTOtBcANrPP4ALQLMMNLewAHRgMF8K+sY60IEBoQHakPgsn/ItytUf2m69aHnvc2ZxJVYiqZXRICPnQOPke03ytwwu3DG49MEhFU8YVTw5eNITg6f8fdDY3cZRo0U2ttaDjQdpEofMfkz21L9Cnvs5av0bocXzwuJTYiLD42JiYuMS4uK5DDRfDZrGoPkMdFJKUnJKEp+BTk5NT0lLT8nISMsYls7HoIcNzxzGZaCzMvlS0FwMuqkUdD6XgS4qLC4uLhlbUjqudFxZ2dhxpfPnzz34wvO//fYbGcOGhoaVK1dmjRj+r5/+eenSJTbW0BMQgAboJghAA9wGGo2G5iDr6+tbFngWlJSU0G7NakV3Lhc7Z84cupV+llog7JPodAC6rq6O9GwnY90+A0O3zbR1hsLrbStlXllZmZ+fz1aa3PT1di4A3U0nQ7QTgL6Vy2HItSBnRdPPBDlV1tqkcy+ZMuTMO7d/YSvyZsea9JDDkfEkTzULcxMdOiVyaNZ0I5qiJmJjY1lTB6dYX9GJMK5QDrml8+fPt0wYnzp1ij2th1yghx56iD7WP3SH+rcVgBZOuyXSU//yCa+l5Zk3Q77donsQCkUbvm0zqABNIQDdH9D7AARbB4CexuYkZiUAAAAAAAAAAAAAdKEvPv+8sfHP+Pg48tjLS7Nl62Ya4f3uu+/WrVsXFRXp6enp6+vrrx+Dbir/rJeBblq4ItB8HegAP/8ALV2aMtD+gUEB3MIy0FwMOjAg2F8bHJ3mV7LKedVx8fbvbJa8ZpY1x9bNR2ZpIrKzFZmZWql8rKY/Ii/dY54wy3jYsqGlewaNqhlKHkx+2GrHh+EjJwcoFWqxWDx0sKmpjZGu0LTyVfVzv0T+/Z+x9z2ry5sSHh0TExXJl4JOjItPiI/nSkFzYejEpITEZLIkJqVwS3IaF4NOI0t6alpGWjqLQXNJ6MwsVg06e+SInJyRXCno/LyCgoKioqLCwkLyYOLEiQ/WPUhGjIzbf//730cfezR7ZLZCodBoPC83XEIAumchAA3QTRCABrg9ampquKgar7Kystl00+l0NHBJXL16VT8uSXQuF5uamkq3OnjwYLMQJzkBchSaeSU6HYAWAqDk5LspdNtSO2d48uRJ0n7lypWWGVkhx0zOmTXxbvp6OxeAJrrjZIh2AtC3cjnauhZqtZqcDHmnED4/CXIO7OkbdeIlUwaeeef2T7cin/DNYsoajYYGlMlT7SSn2zkl0k4rTBNkgut3I+MmpJ/JHlgrr0NTrK/oaBhXaLl48eK4ceNot6ioKCFw3Gw/wv5Jf2HcZsyYoR+h1t+kQ/3bCkALOzl//nzLnejnlcknJO0pxJrbIvQUNjd822baH3Nht81e1J0HAej+gN4HINg6APQ0NicxKwEAAAAAAAAAAACgC33OBaAbc3NzrKyszMzNhxoPjY2NOXDgKfqDzxMnPp41a1ZgYKCHpyeXgNZquUrPNABN6GegtTQA7csHoPlFyEAHtpKBDggI0voG6WK0+fNclh2R7bhst/Yzy6I11toIuYvK09VZ4yhRiOykjjJ56Wp13WXPgtUWtgpjXaHJ3JfNs5dYS1xMU6dbvvtH0QPvjAyL9/P08HZWO9va2BsPsXBQm2TMttn8gder/0144mLCgn0Rw0vCo2Jio6P5UtDcwleDTuIz0FwMOpEsyamJyWlJyVwp6OQ0rhp0WnqzatCZw/kMdHZObk5uXl7+qHzyoGB0warV93/yyQk6XG+88UZZWRkZIH9/f29v7+CQoMsN3yMA3bMQgAboJghAA9w206ZNu3LlCv1mgzrKu8pXfaZIByFpJ+h0LlaIYDY0NNTV1VVVVR04cKC+vp72LC8vp892OgAtk8no3ij6coi2Cv02Q0O3hjDwDEmLMMLHjx8nL7ampoacD20hTp482SzMetPX2+kAdHecDNFOAPpWLoeB14J8IrWzt068ZMrAM+/c/nU6nVC4mmxO96x/ODLsrKseA0+JfGYKQyfsnKAtBDnPZqfUoSnWV5BrQV9U+2Fc/dDwlClTTpw40aw4catZ5FY3p4SnCOHQHe3f6kHbKcxMvmXid3B9D0LLTUPMLXdr+LbNtDXmUqlUP+q9ZMkS9sQdCgHo/oDeByDYOgD0NDYnMSsBAAAAAAAAAAAAoAt9xtc2KyoqFIvFKicVV0rZeKi5ufnowtHvv/8e/fHnSy+9VFhU5OXl5e3tzdV45pLObQag/fzJwjLQQgBaPwMdEBDg5xMYFOafOclt3jPybd+Ka85Yl++2CkmVOMldXVQaT0+Nr6+PvzZALdeEpsq3fuG98aRMG2v7l79YBmYabfjcunCFyHigtY1y4MbXfU78b9LkteHePr5aX38/Pz8PD0+pRGFhbq30Myla4/DXM8Gv/TftkdOJM7ZEpOZFRkbFxMTExsXfEINO4GPQXB3oVG5JTk1KSU1KTUtJTUtNz0hLz0jPGJY+bFjGcK4UdOaIbC4DTT6OGJF196y7X3nl0P/+9z8yRF9+eWrBgvnkpWk0msDAwLCwMG9vr8ioyIYfUAG6hyEADdBNEIAGuJ3ILDveVDK2matXr+7fv7/VadjpXKxQ47aZo0ePkqfI3uiqgfHiVpFtWx6i1URpS10egCbaeslEq6V8b/p6Ox2AJrr8ZIh2AtBEpy9H+9eioaGBvMCamhq1Ws02aENHX7LAwDPv3P7JadNxa+bKlSvNykLrM/CUyM4PHjzIntZDZnRtbW3nrnKf004Yd9OmTYaHcUl/WgRaqBVNkG9R6ObNdk4I/fWf7Wj/VgPQ7exE6C9EloXOPRKAbgsZw927d7Pedy7yNQEB6DsevQ9AsHUA6GlsTmJWAgAAAAAAAAAAAEAX+uQEV724eEyxVCp1c3V1dnaWy+X2dvYDBw4Ui8Vz7p3z7bdcrOGXX37Zs+eBlNQUD08Pbx9vrZZmoH24hQtAcw98fHy9NX5e3KIlXfz8tNqAG+pAk49+3gH+Af5JhZ4zHnLacla67TvbWU9ZRY0SqV2cVTIPV2dPjadGq9UGBQUH+Yd5+XhOe8Dl4Z/dS6ukcrF66ECbkJxBm7+xmbBJLpHIjAYYR5eavn4l8+mvR8dm+wb4BUeER4brIoICgzzcPUW2MgtzS49o0xkPyv/eEPXWfzMf+DCp/P7I+IzIyMiYmNjY2IQ4riB0IrfwSWj+/0lJiSlJSanJTTHo5NSmatDpw9KHZ3KloMlqSWnJvr8+9NNPP5GRIR83baqJjIpUq9VkKAICAoKCgnQ6HRmQmNjoH/7RcPHiRTbW0BMQgAboJghAA/SIrKysOXPmVDUpLy/XaDTsuRbIU6Q/0U78lHzTQjqkpqaydT3k26XKykp2pKoq0pO2k73R3epnNA05VkvkqwfdimrntegjZ8s2uJmOniF5dtq0aewFV1WRx211vunehJfG1lsgw0ueJR/Zegvk2a46GaKdCy3oxOVo51q0k1puC9nKwJfcjIFnTp7qxP7JaywpKWHbVFWRCWjIVgaeEmkn76ds17d8lfscQ8K4K1euZL31kM9n8u3Hpk2bXn311TNnzghRaf0ANN25fou+ltnrjvZvNQDdzk6E/p0IMd+2APSbb76ZkJDAut7RyIRCAPqOR+8DEGwdAHoam5OYlQAAAAAAAAAAAADQhT786IPGxsaxY0skEokrz8XFxcnJSSaTWVhYGBkZeXp6bNm6+ffffyPdzp47e1/lfaGhIZ4aTxqA9uEC0D7e3j5eGp9AnVd0hkdCnlt8nmtUuntgqLevr9YvwI+LPvtrfX38fXy00cM15ZudN3yu2PWDw6JXrVMr7Fw9lSqFu5uru6eXp7fGR+sbGKgNCtSGaFz8k0qcdp7zXPWuNDTW1UWusRhqG144dPslu4odKrXa1cZKZCszXfi46uP/jVuwNy4gyD9cFx4RFhEeFqkLC/fXBrio3GwtxBa2ZqG5FsufdXv115TXf83e/HpS0b2RsUnRkVExsfGxcQlkiYuNTUhIjU4vCM2ZHFQ4O7RwTkTetOj0vPjE5ERaDTotnasGnZKanJk1fG3VmvrT7A9bP/XUU8OGZZAR8/D00BL+2sCgwJDQkPBwnbe3d2xczD9+/OHChQtsrKEnIAAN0E0QgAZDtJoPAwAAINoJ4545c6auro6GffXFx8efOnWKdWpBSB63WhNaH/kGhm5CA80d7U+0fIPTLxTdDqF/SUkJbblpiFnoKQSgDd+2mZZJbqLl/u94CED3B/Q+AMHWAaCnsTmJWQkAAAAAAAAAAAAAXej9999rbGwcN66UBqBdeOSBWq1WKBRisdjE1NRo0MC4uJhnnvk7/bHo20ePjirI9/b24gPQ3hpP72CdX9YkTdl61cz94nkviOa/ZD/7SVFZjSx9vGtIjJ821M9Xq9UleBff57LmuNPuf0pXfWCbs9BGE+CokJEjunt4unv7eAUE+gcFBQZog7TeQb7uwd7+rguecX3oinPefLla7uXq7Glt7hA1xnT7ZbvJO5w0nl5OSmcrM5E2zfTvF2NfvlyUURrg7xcSrgvXhYWHh0REhEaGBoX5+fiRbpbm9nYK06TJ1lve1b79nxGv/it/1TNJOZMjo+KiIiNjYxNiho31LVmjmLlfsvhV+cq33NYeDVx7JHbFUykl9yYlJickcTHoZLKMLS05fPhVOgjvvPtO2fgyMmBqF7WXt5efL3mJ2sDAwODg4JCQkLCwUI1GE58Q989//ePcuXNsrKEnIAAN0E0QgO5V2smQXb58+c0338zLy2Ndb01Hw2oIQAMAQFtaDeO2QyiETFy7du3VV19dunQpeYMj//JqFl/uEwHolnWd2yIcXYg7dzqy3OqY65+5gdeir0MAuj+g9wEItg4APY3NScxKAAAAAAAAAACAvusu6DvYNesH3n333cbGxgnl4/UD0Dy12kWtUqnkckd7kb3RoEFm5maFRaPfe/8Y6f/SoRc9PD28fbw8PbzCY7UVNX7znlMtfUuy6hPRhnrx5jOSmm8k674QLzkim7zFa9j4wNx5bsuPOO/5l3LjaVHJBmu/KInCUe2sdHNzd9d4efppfQODAgKDA8nHgIBAf78gd2efzJnKvf90X/KK1C/Ezc2ZHEhjbyPjA9C2FTuVGk9vjaeXwlFlaW1Rvln8YePoNc8mBYT6BQfowkLDw4LDdaHh4WER4bqIkOAQb29vR6nSwszGUWOSv1T08JfhH/xZePC7UQsfTMoqjsmd5TnlEdulb1tXnXLYfFa27byy9rzHA+cjH7mQs/fUqIlLU+Li41JSk3URuvVbuB88f/316UWLFvj6+ioUCjIIXt5ePj4+Wq2WO3XyCoKCgoODQ0NDyFMJifE//fTPM2fOsLGGnoAANEA3QQC6V2knlyy4ePFiVlYW26Czbnqga9eurVy5kvXu0gC0cOglS5awJgAA6Ms6GoAW+uu/0RCtxpdp57YCzS0P3dH+rb7Btb+TZoQ93LS/cHThHdDwbZtp+UIoIVHdT35hCQHo24ndZeuv2CgAAALQAAAAAAAAAAAAdwB28xv6AnbN+oG33nqrsbFx8uRJYrGY5p/V+lzUpMHJSSmTSW1srI2MjEi34jGFWdnDlU5KD3fPkJDACav95z7vtPxtWfUphy3n7XZ8b7/rMlkcdn4v3nxWXn3CY/07IbXn3bd/J5myzyZsuINC4eSkcHVxdfXwcvfx8w4I9OeXALL4BwSQ//t4BmgjVCvfdN15SZExSeGi0nh6aHy8fR1s5ZHFJtsv21XsIofW+Ppovby9bK3FrjrTBz8LfPOXory7A/18A8OCdWEhOiI8nCzhEeR/uvCgwCCyE7HI0cLCyi3cZPJ2xfPfp7x7dcz61yNmPG637D2rDV/bbf/Ofuclu92X7XZfsn/gsqLuUtgj32ZvP5ZVMCE1Li7B3cNNG+wzbkJJaFiIXC53dXX11Hh6eXn5kPPQav2b0Bh0cHCwm7tbUnLilX//dPr0aTbW0BMQgAboJghA9ypt5ZmIzMzMgwcP0mc7GpNqqa0DSaXSTZs2CYU5Wya0EIAGAIBm2nnzaklIObd8Q2k1DUy+ReH33crOWy143NH+rb7BCTsx8K1KGAGhtHNLQqHoZi/ckNEj53PmzJl33nlH+A2odt7H+1URaASgbyd2l62/YqMAAAhAAwAAAAAAAAAA3AHYzW/oC9g16wdef/31xsbGqdOmiMVivvAzDUA78x8ZrtHZWemkdHR0dBA7WFlZ2tnZSqUyldRt8qLkpS/6zn9ZsvpT+w1nLLdctKj93nr3JZudlyzJsuuSeMtZ+dYzLiveUCZNFDl7yBVSFxdXF3cPNy9vjZ+/n3+All/86aLVBvj7Bbq5eBYsV9RdUc/cL/H0cnd38/TSePtrA0Q28shi0+0NdpN3cgFoH2+/wKBAZ5Xa3MIqe6HNW1czd7ydFhLnGxwUGkaE6sK4EDS/cGHoCLIeEBDg6upuZy2xtDUPyLCY/zf3ymPypccsqr6w2nTBcsf3VuTMd1+y2nXJfNcl8li2+0Jw3ZmMdY8XhYaGOTurHeVkAGRu7m4aL41G4+nl7eXr6+un9dNyC0fIQAcFBbm4uianJv38y7+/+uorNtbQExCABugmCED3KjdNQZErRTvcYhC5/QO1/Iv8CEADAEBbDInwCoSEbstf5hHe4/SfavmWJBCeIoRDd7R/q29wQs+WgWZy/uQ8ExIS2DpP2AnR6rtbO7lkIRjd1m83tZqcbmfMhZO/9bfs3g8B6NuJ3WXrr9goAAAC0AAAAAAAAAAAAHcAdvMb+gJ2zfqBw4cPNzY2zpw5XSwWc9We+fyzs9qZ4MPPzXEBaRe1s8rZ0UHl6qoav9p75pOyZW9L135h9VhDwMF/Zey5LN95yfLRHzwf/4d212X77d/brv1MNGmHk6/OQ+2udnN38fTy8NX6aAO0Wv/rC59+9tf6BXi6akOSlVUfO2/6WhqT66R28vTw8PDz1Qb4cwHoiGLT7ZdtaQDa28s3JDjEx9tHZCeTuJtWve7+zn9Gla0M9vPzD9PpQsPCQrkgNB+DZlloriQ0afLz9XOSuVqa2UUWWk99ymT5h8Ybz9jvbwj8a4PLru8t6y7LDv4r6cl/+O66ZLPre5etXwVVPhceEu3p5uLh40OO5uPj6+3rSz76+JIdcQtPPwMd4B8YEOji4pyWnvLLrz+fOnWKjTX0BASgAboJAtC9iiEZsg7lzNrS/k5a1uBEABoAANrS0Tcmof+xY8doRlkqlW7bto02EvpRYP3o8MWLF4USyDNmzBD+XgEhHLqj/dt6gxNO8siRI0KQOioqqq30dklJibB/somQkCbno3/oVktEk2/D6LNkt3V1dfrbCn+WgTyl/77Zzpjrj4CBV6TvQgD6dmJ32forNgoAgAA0AAAAAAAAAADAHYDd/Ia+gF2zfuCVQ4caGxtnz57FBaCbcPFnijxssTg5OTvJnSX2cq9A+fiN6kkP2yw5ar36c5Mj/8o98euKugb14//w++aXBz79ZcOeBsXW7yzX14vveVKpy1C7erh4e3v7af38/LnEMBca1stAk1Zf7wA3d9fxWxzr/u00frPU1c3dzdXdy0sT4B9IK0BHFJlsu2QzuVbp7u7p7e0THBQcFBjk6uJqbmobU2r+0r/jH/4iIyLDJ8A/JEzHhZ/5UtD8R7rKJ6FDAiK83fwVzpL0OVbTnzFZ+v6QbWddPvh1znP/jK+9ZHXkp7GXf3/tvX+P333Jasd3Duu/UC970Scx38PZ2cVT4+nF8/bx9vb19uEWH19KPwlNzjUggAxexvC03/749bPPPmNjDT0BAWiAboIAdK9iSIasndqWxJQpU8gbFu1AXL58ua6urmW39g8kZKcMDEBnZmYePHhQSHeRrfSzX5RwxFa1GggDAIA+wZA3L3369ZL1kfc1GoNuFi8m/U+dOkX76CPd7rvvPvruo3/oDvVv6w1OP0bcUquvND4+vtXjCtoZn2b57GaaDQjR/pj3nyLQCEDfTuwuW3/FRgEAEIAGAAAAAAAAAAC4A7Cb39AXsGvWD7z44ouNjY33zp3jIHZwVnNVn7mU83Uq9l/yQM09VimdnRQqhaPK3tYhIEY+dr1y4l+tF7xuVvmx8ZYzij3fe279zvrQTznnfnv8lX+N3fG9aMu3VtWn7e59XhyRqVSpXby8vXz4zLCflix+2qYMNBcc9vV3d/GJypVtOu20+gNxSAI5oIeHhzt5JsA/UOvnb2/tyAWgL9tMqlW4uXl4e3sHBQUFBwWTvUkcHG2lZnMfU7z9v+y7d+h8/PxCQkJDw0LDdNzCRaCbYtDBQWHBfjoXJw+5m03mUvNpzw5d/O6QqlN2e78PeOB75c5LDu//e8mXv+544h+BO7632HrRrvoL+eIX3TInejo7u7i5u2poBlrjRY7uzdWD5jLQQgyaRaDJCwrwV6lUwzOH/X71t08//ZSNNfQEBKABugkC0L2KIRkyIarVLA7VTlTr6tWrQglMqgsD0I899hi/p+bItitXrmSdbhaAbuf1AgBAL9fRADQRFRWl/5szly9fJm8ZLi4u5BsSstoy70vemDZt2nThwgXan3Sgv2kTHx/fMgBNGN6/nTc4otmvFZH9vPnmm83eUpuhm+inmc+cOaNf17kt9JxJZ7YZr76+fv78+Z3+Raa2OtwxEIC+ndhdtv6KjQIAIAANAAAAAAAAAABwB2A3v6EvYNesH3j++ecaGxsXLJzv4ODA5Zyvp59VqhsX0uKkUDkpuY8yqdzaytY/2rF4rXzcA5ZzXjJZ+t7gVSeNq0+bbD5n8cAl5V8bfLZ/Z7/lW8uas1arP7ea9Xe78GFKJye1u8bNx5ern8yVTOYy0CwJ7een9db4u3s7z/yb464fZPmLZWqVu5u7m0bjFRAQ4O8f6OfLBaDDC7kK0JN2KFxdPby8vAODAgMDggIDAt3d3CzN7LTppo9eCDnwbUbiKLL7gNCw0BDyvzCycGFosgQHhQYHhAX4BTvKlFK1xbDF5pOeGDzv9cH3fWS89kvjmnPm2y5a773strfBZdt3ltsuWm06a7v6hHTu31XDyjxUzi4uri4eHu58DWguA014e/NJaG+WhBZi0Fp/rZPSKWtE5tX//HHixAk21tATEIAG6CYIQPcqhmTIWqaTKWHb8+fPt/yL/83KRbd/oJYZ67byYeQzh99N48WLF4WDTpkyRQh+6f+9fko4dMunAAAAAAyHAPTtxO6y9VdsFAAAAWgAAAAAAAAAAIA7ALv5DX0Bu2b9wDPP/J3LEi1dxALQTa5HnynywIkPQDuplHKVxEFqZWnj5isZs8q5YKPF1CfN5h0xWv7+kDUnTau/Mt/wjdn6MyY1Z8zXf22x9pT58g8tJj5o6x+ldFI5u7q7+Ph6+RDePr5+PjQAzYWh/bQuKk1KuXTbt46LXhX5hKhd1G4enu7kuYAAf602wM+HD0CPNtn6vc2kWrmrq7tG4xUYHBgYwGWgyQ7kjkpLa7OyGtGb/0tb+niEX6BPUFBwSFhISGgI91HHPQjyDw0JDPPRaB1lclsH86S7LcbtG3r3i4MXvT145QnjdV+ab/zGsuacWc15s83nLDd+bVF1ymbZUYe7/6aKyXJXqVwIVzdXT09WBJqcgH4GmisIzWWgfWgRaKVSkZ2T9Z//Xv3www/ZWMNtV1lZOXv27IqKCrYOAF0HAehepUMBaELIEAslLZsFnQlycWln/X22fyDhT+cLe2s1AN3OQYWnWhbURAAaAAAAugQC0LcTu8vWX7FRAAAEoAEAAAAAAAAAAO4A7OY39AXsmvUDBw481djYuHzFMpGDiEWfr3Ny4hcu+0z+r+QW8lAuUzrYO9hY24nEttmzXHLutx6322L604PnHhm47Njgyo+NV580XfO56erPTe//1OS+EyZL37MqXidSu6uUCpXa1Vnj7enrx+WFCT8tF4P29fXzdPP1DnZa8JJs+3cOaZMcVQo3V3dXbx8vrdZfS/j6+/pq7axkugKTrd9bT9zh6Obm7uXpFRAYwPEn/wny8PC0sRSpg012fOrzwk/pwyt8vb20IaHBwSHcEhIWHBQYHBQQEhIc6uXuI5MoTIwtokqtSh40qThgNPvlgYveHnTfh0NXf2ZadcqMLGu/MFv1qemK963uec5+wka1X7Crs5PaxYUsLu7u7prruAw0x5tbaAyaKwKt9VMo5Ln5I6/933/ff/99NtZwexkZGdGfrFRWVrImAOg6CED3Kp0OQJMrSFtabihkl48dO8aa2j4Q/fv7Les3txqAbuegRFtBZwSgAQAAoEuQf8kjAH3bsLts/RUbBQBAABoAAAAAAAAAAOAOwG5+Q1/Arlk/8MQTjzc2Nq5cWdkiAM3lnhn+gZIv/0zIHZUie5G9vb2ZqUVAvCxvmWzkKvNxu82mPDlo9ssD579utPjtwUveHbL4nSEL3hpyz6uDFr5hvfK4smil2jtYJZep3N09fHy9fXy4tLCvn4+PL3nkq3Z2y54vqb0snfmog4eXi1rt6uHpzteH1vr5af18uaA0DUBv+d6KBqA1Gi9/Pv8cQP7jH0i6kZMkp5Q1z/rlP2Krj0T567xIe3BIEL8EB/rzGejAULXc29lVET/OetLDZuMfNi3cNWjC34xmPj9w7mtGi94evOzYkGXvDVn67tCFb5rOes5icp04dZzaWc3hA9BqNzdXjcaTxp/5/7IINMG9JG+uDrSfn59c7phfkPe//107duwYG2u4vWxsbOhPVubOncuaAKDrIADdq3Q6AE03vHbtWlFREW0RCNll/TrNwoHaQna1cuVK2ploNQDdzkEJ8knF76n5a0EAGgAAALoE+Wc8AtC3DbvL1l+xUQAABKABAAAAAAAAAADuAOzm960ZMmTIe++9R/MfzZw6dWrGjBmsH9wads36gb/97W/kk2f1mlUONwagae1ngVLBLbQctEKuFNk72NvbW1vZWFmbxYySZS6wH1FpUbTFtHyf8ZQnBk1/1ujug4NnvmA09e9GJbsG5a4ymfW89c4Gp6r3PLKmu3p6u3u4c0FhLx8vLx+uELS7i7d/nOy+d8Ub6kUxuQqVwtWVNPl4af39eFo/X38fb/0AtNzVzV3j5UXzz4S/lstAazQae1ux2NV45WHnl39PLl6i9dL4BgfzAejgIH9tkNY3JCAgOGm069377TZ8ZTrzmcHDFpukLBySWzNo3EODKh4fPOMZcuaDZh0cOvNZ44pHzUprbbLukWt8nZ2c1GoXbqEBaE9PvQA0/7ApAe3FvSxyrn6+jo6Oo4tG/dn4f++88w4ba7i91Go1/clKRUUFawKAroMAdK/SoQC0kDzWj0S3o2V2uVVnzpypq6sTotJUywB0y9NohnxS8ftDABoAAAC6BfknPALQtw27y9ZBy5cvp9/4te+tt95iG/RWbBQAAAFoAAAAAAAAAACAOwC7+X1r2glAUxcuXFAqlaw3dBa7Zv3Aww8/TD5t1lVXiUTXA9D60WdKIacBaELlpFSJRRJ7O3uyibmZhY3ILDhLlDDVOm2exYhKs/wNxkXbBxfVDil9cHDF46YjFtk4qEwVgUb5VcabTkv2/tNj0d+9kgq8NJ5eHm58aNjTW+2iLtnosPMfDuO3OnARY7ULX/7Zx0/r6+vj5+vn5+vr5+3tywLQ33EVoPkAtMY/wF+r9edoyaNA8l9nZ7WZqVVUqfnTP4Xu/CQ6LEnj6+sfHBLo7xfk4xkcne4zcbN8/RdW60+blu828002Nbc3Chlllr/JJGfD4Nz1Qwu2Di7eObR4h1nRZvO8VdYpFRKvQCcnpbOaqwHtTDPQrm6uHp4enjT4TP7TlIEm58O/Hq4OtI+Pj0wmKy4pbGz886233mJjDbeXTqejP1kpKChgTQDQdRCA7lUMCUALWeQuCUC3cyB9CEBDn0Y+XadMmfLZZ5/Rzz2qvr5+/vz5zbL+LZWUlND++jXU29KhAxkyDds6urBtO/R3207/y5cvv/nmm3l5eawrAEDfQf75jgD0bcPusnVQDwagzczMfvjhh67aORsFAEAAGgAAAAAAAAAA4A7Abn7fGiEAfebMGRsbG9bKt+/bt4+//9/8KegEds36gYce2ks+ZzbWbBCJRCqVSghAK8n/uIWhAWhlU4OjVGFva29vZ0+Ym1laWJk6B1gEZFlGjrOIm2GWfK9pwt0miXcPWf2WavtbGc7esoEDjc1sB/uPGDT1UYtdl5S7zntP2eoTGuflpvJWyT3DR0rWfS5e9bFdcJLSSe7i6saVf/bz9/HT+vj4+HIBaB8/by9fW0upblRTANrVzdNL4x/IB6BZBto/wD/Q29vbQSS1kZre85jslf+Lr9ik9fTy9tUEhURoCxaqV75nt6HeZO5Bs+QKG6mTtelQK2MTkzFrFfe+ZJs02zRqomnCPaYp88ySZlnGltmFZEjdvLj0szNNP3MLx5WrAO3hyXABaKEetBfNQPNFoKVSaUlpMRnbN954g4013F4VFRX0JyvBwcGsCQC6DgLQvUqnA5F0w7ayyC0ZciB9LQPQRPsHJZ9U/BEQgIYeFh8f//vvv9PPupYuXrzYzqzR/+2Cm86vjh6o0/OdELZth4EBaAE5w6ysLLYBAEBfQP7xjgD0bcPust2a7Oxs+qazZ88e1tRtEIAG6Cb0Hh3B1gEAAAAAAAAAAKDPYTe/b01bAWhq//795Klr165lZmayJugUds36gQcf3EM+ZzZv2WQvsm8KQHMRZyVPyEAr5GRRKhW0kWuWimV2NvZ2fAba2trGwtzK1t7cwclUrjFR+piLFeb2yqFTd4ve/7Nw5sZ4Owc7U1PzQUbGItWQ+ClDFx222/dv982faPNn+3gFKyv22e+4bD9qucRJ6aJ2cfbwdPf18/HV+vj6caWUfX19fLx9vL19bK2kYU0BaBdXN0+NpzZQqw3Q+vlptXwImlaDdnF1MTe18cswrTvn/fC56PgCz+Ri1wXPSbZ+Z1H5odmoSmu/SJlMorQ2Fw0daBGWJd55xnXuc9ZKX1MrkbGjp6mzr5Va4+DirlQ5OZPFWX19UaudXVxc3N3dWfhZDysCTfAZaG9vb4lEPK6Mi54cOfIaG2u4jYyNjdesWVNdXU0+ksesFQC6DgLQvYohgchW+5ArSBsNTBUbciB9rQaghYO2uhPhEM1Oqa12gO4gBIiJI0eOJCQk0HapVLpp0yaaV24n2dws09zOfOnEgQyZhjcNQBs4hdvpT/69efDgQfrsTUPeAAC9CvmHOwLQtw27y3ZrEIAGuAPQ9DPB1gEAAAAAAAAAAKDPYTe/b037AWjhRwL33HMPa4JOYdesH9i9eyf5hNm+fZu9yN7JyUnF4QLOAj4DzUWfbwhA82RSuchebG8rsrfjFltrextzeytTO2tTkbmx9cC/DPVKHvTw134vXxoTOUxj7+BADmFpbmtubuEcPDRvlemGL2V1l3zWvOu59bzj/BftPQPIcdSu7mpvH42vnzeXgeYC0N4+vj6Et7e3HReANuUD0DIXVzcPjac2gIs++2l5/tz//f0DSFeZ1NHU3Kywyu7Zn6M3ndCuPWldXW86ca9leLZY6aR0lHCvUC5zksjtFj7tUntRmjbV2myoldkQaxtzkcRGIReruMLPXBycS4QLAWgXF7Wbm5vH9fLPPLLGN9D8M8HXgPYWS8Tjy8eRsX311cNsrOE2Cg4Opj9WqaioYE0A0KUQgO5VbhpqJFeKdtAPIhNCSvLYsWOsqYlUKiVbCXFMqqPpyVYD0EI2tFk0kxCeanaehPASEICG7iZ8Hl67dq3Vz7e24sUC4dOVavn5THXuQL0kAE219bUFAKA3I/9sRwD6tmF32W4NAtAAdwB6m45g6wAAAAAAAAAAANDnsJvft8bAALT+jwRKSkpOnDhB24nvv/9+4cKF7Dk9vr6++t0OHz4cFxe3fPly8rjlsUjnp59++rfffqOdyT537NjRrI+np+e+ffuEPsSpU6fIPtnTbTPkhDu9cwOxa9YP7NixnYzezl21fABaycWfVU7K6wFoBUs9k/84NmWgm2LQpC/5r9xR4SiVy6SO5KNcplRIVQqZk1QqszCzMrUYUrzO4u1rw1c+nqZyc3JydlIoFQ4iibmxjZWdmU/qkCkPW++97Pbkb/73v+YTnOiqUKhc3dx9/LyaFm+CBqC9vL1sLaW6ApOtl6wm7pS5uLp6aDy0/r5afz9tgJ+fH6sDTfj6+quU7lInu/z7zR7+wePJfwcsec02ucLWRaOQ2nHnRrioXSQOirTJsge+c579lL2rt6ODraNcqlQ7ubmpPd1c3V04ajVX9ZlDVlxdudrPHjfgos/0I0UD0LQItIPYYeLkCWRsXzl0iI013EazZ8+mP1bR6XSsCQC6FALQvUo7IcWbVmkVtj1y5IgQlIyKivrwww9bbtLR9GSrAWhC2M/FixezsrJo45QpU2gYlGgZBtUPdAqbAHQHQz7PSR8yO8i/klrOKf1Pe/IvFLqrVvPNnTuQIVvdtgA00dF9AgD0OPKvdgSgbxt2l+3W3DQA3f5dSiHT/McffyiVStpIBAYG0k3obU/6V/Va1engNRsFAEAAGgAAAAAAAAAA4A7Abn7fmo5WgG7r9n2zQiY06NzMH3/8sXMnVx642bGEozRz4cIF4QcJvr6+9KcLLbVfndqQE+70zg3Hrlk/sHXrVjJuex58wF5kr6QBaK7mMxdx5ikU/MI9lCvlehlovjA0FyZWcUFoFdlUqSALvzH5qFBJJTKzoTbqENPNx13e/LVw+AR/R0elWu1MNnF0dLSxdBhqZJU0xXTDKett38gf/sFv51chY5b7+IdrPNy9vHxYBtrb28vHl6sD7eXlZWkiCckz2dZgOXGnTO3q6unjoQ1qCkBr/bgQtNbPy1Pr6+uXNs7l3qdtq780W3vSav+P2iXPeju7K2QiLq7tpHB2Ubs6yd1ctA73vea0/qQooUTK1YRWqJydXNxc3d093DluHtzCP2Zp59ZxAWguA01p+Ax0UwB6yrRJZGxfevElNtZwu+h0OvozlWXLlhkZGbFWAOhSCED3KkIAsR36UWN9UqmUZp1b1SzR2NGkY1sBaHLQxx57jO6qmWvXru3evZv109PqebZVfxeg04RP2lZ/YcAQQvj42LFj5Iuk8Jg93aTTBzJkGt7OAHRbxwIA6LUQgL6d2F22W9N+ANqQu5RCH+HuonB/VUhFtxOA7vTNRjYKAIAANAAAAAAAAAAAwB2A3fy+Ne0HoOnN+mvXrmVmZpLV8ePH8zfqG/ft20c7C5sTwu17oeQJ2XDGjBm0saSkRCidon8sofOFCxeEistCZ+EHCcKZCDskh6aNf/zxR1ulmg084c7tvEPYNesHNm3aRMZt70N77e1pAJrLPwsBaJp+JtgqzUDzMWiujQs6c3FnhdxJSRayKlCqSB97W7G5mWX63eaHfo3beTTLXasiu1apnFVOzhJ7pavWbu7z1pXHzCPHDh6+0GTDSeWTv4VseDsse6rW28/b00Pj7ePFLb5eXl5cAFqtkaTNsth03mHm3+Rhac6BcZ5BCb7+Oh+/AF8/ra+3xs/L0y8m03PqbvnG09ZrPzMr2mDsnzVo8Quyx6+ED5/m4ihVuriS/7m7OHmIRY6jlsvq/qmYtEvkrHZyFHOJbVcXNy7xTBcuA83FoD3azz9zz+oFoLki0FwG2stL4+DgMG3GFDK2Bw++wMYabgsjI6Nly5bRn6lERUWxVgDoaghA9yrtBKAvX7785ptv5uXlsa5tmDJlymeffca24b/LIlu1DEx3VQCaIt+vkoMKVZ/bOqhAKpWS71vIt6C0P4HAJXS5+Ph4+jnZ6c8uYZosWbKknZRzpw90K6Hkjk5hQ/p3OskNANBTEIC+ndhdtlvTTgDawLuUBL1tSNC7i0IliGbhZqFcdLPKEZ3DRgEAEIAGAAAAAAAAAAC4A7Cb37emrQA0ad+3bx9/6/6Gp3x9fYWUMCX8bKBlWJnGpgXCDxj0d9hWZ/qTA6Gddmt5khEREWylDYafcCd2bjh2zfqBDRs2kMF8+JG/cgFoLp7covyzgNaBpq1ytii5gtB8ZWUuOc1qQlPkoaNMbmFiJ3ExXfyM9O3/yy1dGuaoIL1VSkdnqdgxf4XN5vNWo1ebDxlkOsRksGfCoPIHrOq+93zip8glT+riR/p6aLw8Pby8/bwjUj1HzpVN2Glz70Hr9Z87rnpPMfcZxbQ9riX3B8SO9teG+mg0vkGRXsWVqrUfizadN7/7KfOEMjux3PYvfxkcnDd4X4PX+ve03qFOapWbu7uHXOziEy2q+Vy15oRIlymXOXCn7uKqviH9TB9wGWhaDZpr4uLOzZYmLP7M44pAazQikWjm7OlkbJ977jk21nBbFBcX0x+ozJ49mzUBQDdAABoA7khCdLhlzWZDCLFmIfTfVoa40wfqbQFooTo7AtAA0FcgAH07sbtst6adALSBdykJ4YbqH3/8MW3atJYJaQoBaIBuQm/WEWwdAAAAAAAAAAAA+hx28/vWCPfr26L/Fx5b1exWvrDDZnliQugpPNVOZyGmTEun0J9AEPv27UtNTQ0KCqLdOqHlzx66cOdtYdesmyUnJ6vVarbSQ9ZVVZGRfPTR/XwAmqvhTFPOxA3pZx574kZ82pkPQJNFCEA3PXAQSUyGWOkKTZ64FPjE6ZyAaFe5zElq7xSYYnffMasV71r6RIitLUTmZlbGQyxsHU0ixgxd9LL4iZ8DH/k2tmJ9aGi0b0qhz5S9ivlHbFd+bFX9pc3Ws3Zbz0k2n3Os+cpt88mwhY/Hx+Vrh1Wol7wq23rRatm7ZiOX2GiCZTIHlYO91MTY3MTKaOpD9gd+Dxq7yk0pd3ZReUgdJZN2yXY1SIvWOHCBb6WTs1p1Q/qZaPnATejBlhsD0Ncz0EIAevacu8nYPvPM39lYQ/cjc4r9OKW6mlw01goA3QABaAC4I5Eva/y/MzoZgG65eVtZ5E4fqEsC0K1qWYu6QwFoYsmSJawVAKAXQwD6dmJ32W5NWwFow+9SUkIj9ccffyhb3EFFABqgm7C7dQhAAwAAAAAAAAAA9F3s5vetaScAferUqRkzZjS740/4+vpWVla+8MILJ06cOH36NOvddCu/nTv7LX+QIHRuB/3RQrMfKlDXrl176aWXWp5hM+2fMHErOzcQu2bdrKKiorq6mnzswRj0mtWryeg98eQT9vb2CgUfgGZhZ/qfVtDcczNc2LlZEWiunLRKLpfbWIpsJOYVD9i+9eewe2qjJQ5KuUoyvtZ687eW2fPtHewcpRJHR7lcJnO0trQ3NbGUeRpnLjSt+cT5ud+j7z8UMnO/YtFb4tWf29Wcsd56wa72O9ud39vtvEQWx53f+m/7IvK+w74bv7Gv+tK8dLtlUKpY7qiUirnq1OQUJFLJ0MGWXgnGO752qa33D0lW2ZopI/IcdlxQLn7NThstl0udVConV1cXlmpu5nramdV85h9w/2nOk1uaEtBcBpqM59x595CxPXDgABtr6GbBwcH0RylETk4OawWA7oEANADckciXNf7fFp0JQLcaBSbfPP/444/NGolOH6j9EHMzHQpAt0w5IwANAHckBKBvJ3aX7da0FYA2/C6lgFaGppo9RSEADdBN2A07BKABAAAAAAAAAAD6Lnbz+9a0U92kJTMzs88++4y/q9+Kbg1A083XrFmjn2Cm2qlRbcgJU53YeYewa9bNaACa6qkY9P33ryTj9vTfDzQFoNsOPjfhA8/N0cwzKwItZKB5EqnUzNjaO8lk15fuz13ODk5yCRlpte4Ly/mHrN39pA52MpmjzNnZmbx8sh+xg8TC1NbcwtwzbujYjTZL35AteNP6vg9tqk9bb7lov+M7u13f2+y8ZM0vtrWXZFvOuGz4UjnraeuE8XZqd7nUwUku45LXZIeurm5qtbO9ncjY1Hj0WqvHf9dO3uoqUdvce8Bx27cOmfeIFY5N5Z/d3VjQuRna2LTQDHTT0gIXgGYZaC4AbWc3f9FcMrZPPPEEG2voTlqtlnxNoLOpvLzcyMiIPQEA3QMBaAC4I5Eva/y/KjoTgBbqLl+9epV8Z8Ja9WLE+vvs9IG6JADdTqBZHwLQAHBHQgD6dmJ32W5NFwaghb8pRyAADXA70Vt2BFsHAAAAAAAAAACAPofd/L41hgeghZ7Xrl07fPjwpEmTUlNTIyIimt3Kb2eHQk/hKaFzJ34MQA69b98+si3R6s8YDDzhVt105x3Frlk30w9AU7c/Br1ixQoyaM8994ydPVegTqm8eQCa4mPPemjquUURaNKkUCrsbEQW1ua5K8xf+CX2/hcj7v67ZfVX5imT7EU2jjKZjHRwbqJy5opG29k4mBhZO/ubFWwwvedl4/s+Nt553vX1K6X7f/Df/r354/8Ieu2n0od/8NhxyWrzOftFr9mnThJz0WdH7jTIHlxcXVzdXSm5Qm461EqhHbLmfXntae+KvY7bz8vufsLWM0Apl6lUzk6ubm2Ufyb00s/NltZj0HoZaFs720VLF5Cxfeyxx9hYQ7fJyspiU6i6eu7cucbGxuwJAOg2CEADwB1JCDF3IgDdatCZaDUY3ekDGRJKFnZ+OwPQ5B9xRUVFrBUAoBdDAPp2YnfZbk1bAeiO3qUU9kORd67MzEz2XBMEoAG6CbtthwA0AAAAAAAAAABA38Vuft+advLKzQi37Jv9eCAwMPC3337Tv5VPy5+0vO8v/GBA/1i08x9//KG8sdAyObGgoCC2wq9WVlY269PWKVGGn3Andt5R7Jp1s5YBaOp2xqCXLl1CBu2FFw7a29vL5XIyqny8mTyU8w9aYu2kZ0tc6FmlVwC66ZGjTGZhauvkb7z8ZflLv6ft+t654q+WTi5SsYPM0dFRpVIJ8Wfug5NaLnGytRL5JlqM3mw2+0XTZR8Y7zrn/s7PFY/84P/gZafPf9n23W8vPPlj2NbvLDads19+zCF/qYSckZNK6eKq5qLPbq4sAO3iRkZSZC8eOsQkebrp3kvef/vJf9WH9vElEkcZd3bOLs7uHm7cwqEf9bTIPesvbdeBZgHoZSsWk7ElU4aNNXQD8qVp+vTpbOZUV8+ePZu0sOcAoDshAA0Ad6S2osM3FR8f//vvv5MNW+aAyXfOP/74I92tkCTu9IF6WwBaeHUIQANAX4EA9O3E7rLdmrYC0ISBdykJ4bbhmTNnkpKS6J3GdopBIAAN0LXYnTsEoAEAAAAAAAAAAPoudvP71nQiAE16xsXF0UZfX9/PPvuMNBLCrXwhYXzt2rUZM2bQxpKSEtpI6B9L6Nxst/SsXnrpJdJTOPSFCxeEPsTy5cu53d3sr0y2f8Kd23lHsWvWzdoKQFO3Jwa9aNEiMmgvv/ySqEUAmuAfC+iqEICmyw1Y3lnlJDykGWjSUWQvNjW2SKowf+wHv7pvfSJHie3tZI6OXPlnFVf3mWWgVU7OTnK1XOZkaWEdmmdeuM387oNmS941Wf2ZRc1Z0eYLlnsvu3/48/LDP43Zeclh67dWG7+xW3Hcrnid2NlNQQ7k6ubCpZ9d+Aw0F4Am/3UjJ2ZuYiNSDVn6iuzRn70r9khJZ7mcO083N1c+AO3Kp59vDEDToLNAL/osLK3UgeYD0OSjra3tfSuXkbF9+OGH2VhDlyJfagoKCths4eXk5BgZGbGnAaCbIQANAHck8l1u5+K85Osh90+RmxESyZ0+UG8LQHc6yQ0A0FMQgL6d2F22W9NOANqQu5SkRbibSt52afUH4S5is30KPf/444+W9aE7io0CACAADQAAAAAAAAAAcCuMjY3VanUyr7S0tKKigjxgt9xuI3bz+9YYHoAmhLv5+siGzz33HHmgX8uk1Z7Xrl07e/YsedDsWK12Jkh/IXycnZ0t5KebuXDhgvLGuiwCA0+4czvvEHbNeoHujkHPnzePjNurr74iEtEANJd9FgLQBJ925lroIucX/jGnKQN9PQ/N5Z15N2SgFSqJ2NHaym7YXPMHvpUc/CWmcKHWQSx1VDiq1CpntYpxcnZSOqsUzlKxzMzUInikef4GsylPmMx7bcjyD4as+dx4/Wnzzeesai+Kt1202XzBYuMZq7WnbBYdtSlc7eDsyh1d7eLM1X52cXVV8wFowsVVrXaxsRS76yxXvSfZ/2/XFa94ePorHB2Vale1mztNPwsBaGExwA1J6Ou4ALSHh42tzf2rK8nY7tu3j401dBFyoXNyctasWcMmSXU1eazT6djTAHBbIAANAHcqQ1K/5Ksf+UfKO++8k5WVRValUumHH35It7qpJUuW0J104kBEbwtAd3SfAAA9DgHo24ndZbs17QSgCUPuUgp9hD20jEQLWu6w09Wg2SgAAALQAAAAAAAAAAAAnWBubq7T6UpLS9ndNT3Dhg1jj24jdvP71nQoAE2MHz+ehpiJa9eu7dixg2xF/0Bks9v3vr6+J06cEHq+9NJLEomkrWPRzkIKmfQ/fPiwfj1mgvR5+umn9ZPK33//PT0B1qM1Bp5w53ZuOHbNeg3yaWxsbMw+s7vUnDlzyOi99toRkUjExZ35AHRzTblnYREC0KQ/WfQD0AQXedYrAk0eKBUqsZ3SJ9p20RGLqi/MH/ne66Evk7TRzjJHuTMNQHMloFVOCr4CNOnsIDY1sdDEmI1YZVa212Tmc4MWvGG04oOhqz4zrfrSrPq0afVps+p68zVfmFV+bDnnJevhs+3kTnKlSqFydnJ158o+u6j5GDT54OKqdnJzkIrHbRXVfG299oTd3h80o5er5DIlVx3anVv4ADSXgeby0B2KQd9QCpoRAtBr160iY7t371421nALpFKpVqstKChYtmwZmxVNKioqyLOsHwDcLghAA8CdKj4+/vfffyffxZF/jLRam1nocPXqVfL9CWkxpAqyEBQ+duwYbenEgYheFYAm7wK0g/4ZAgD0cghA307sLtutaT8ATbR/l1K/SrT+bUOh/Y8//lDeWExB/+YkgQA0wK1jd/EQgAYAAAAAAAAAADCEjY1Nq7lnQU5ODnt0G7Gb332HELbu9I3+votds16gsrIyOTm5m9LPxKxZs8glfvOtN8RisaOjo4Ir8qzPkf33xgC0sHAR6BsC0HShGWj+v3wAWi5VSWWS4mrLdV+Yjlg2tGSL+XO/R87aFSZXKmj0mctAO6lUSpWzs7NC7mRjJTI1tvSKtircZFPygHH5I4NmPGc077WBS94dfN8Hxis/Nl55wrjyI+Nl7w9d+p7lotccRy1yUXs6yxSOSme52pUvAu3KZ6A5bhKRU9hIuw2nRNP2m0RPHLLxlOPGkx6B8UonhYsb6enGLTckobma0J1JQtMAtAeXf/awsbGu3lBFxvbBB/ewse42PVLS/jZYtmzZ/fffz1ZaM3v2bG9vbzYKAHB7IQANAHcw8sWNizvxCaq6urqEhATaLpVKN23aJKSWO1TLWQgl62eFO3ogopcEoDMzMw8ePEifJWfYaoAbAKB3QgD6dmJ32forNgoAgAA0AAAAAAAAAACAgYyNjbOystjtND0VFRXJPDWv++Kk7WA3v3uriIgI9qiJUAqlrQordzB2zboZ+bRkn6Ct6e7oMzVzxgxyiY8efUsikXABaL4CtKOQe5Y7Xn98Y/SZLrQUdOsBaCfyX55c6WCrCB1hu+pjs3tfMBMpTJVBg9Z9KH+iITE611UqVaj4CtBOTnwGWuVMOiucHUbMUi582XH6AauR64bmbRhSttdk6oHBs14wuvew0fzXB81/Y/C8I8azXhw65UnjpW/KnmvIXnMgMzrbW65SOKmd3DxdXN252s+uLq4qpaujWjT7gGhDvXX0WPNBxoPyV5s+/IvbxG3O5IhcH70ANMtAswB0yxg0WdrQIgBtbWO9cdN6MrYPPLCbjXW3IZ8n7JOmf7j//vvHjBlDRp29fgDoCQhAA8CdbcaMGTR/3Cr9yC/5ZvjHH39s1tiS0I3QzxMbfiCqSwLQ7RAKVBOG9L948SL5BzjbAACgL0AA+nZid9n6KzYKAIAANAAAAAAAAAAAgCGioqIqKyvZvTReaWlpcHCwubk569Gj2M3v3mfIkCFPP/10Y2PjSy+9JPwtSF9f3x9++IE0Xrt2LTMzkzb2H+yadbO2AtC3J/pMTZs2lVzld999x9FRJpNJFQqFo9yR4Gs/cw8oloGmWolB3xiAdiKLki7kGZnYSaF2mLzXYv1ps6SJNkMGWg4xHpIx3/jJXwJWPBuucpOTfipnlVKucpRypaATi9SLn3fdeVG58Ihl4nTjyPGmKQtNR6w2K9pmOr5u6KRHB015YkjFU8aTHjUZu9ts2GLj1LvNVr3i9va1nEOXy2ZtTgyI8XR2Vbu48RloZzcHO3nyFNst5+yn/s3GydN+wF9M5D4DK4851J53ixqpVDiquXLR/MKlnz2aFhaD1l8MSEILGWh3D2tr681ba8jY7txZy8a62/S3ADS1bNky8jXfyMiIjQIA3F4IQAPAHY+WYT5z5gz5jk5QX18/f/58/VQx+UpIn9KPDrdK6Nksl2zggaheEoC+fPnym2++mZeXx7oCAPQdCEDfTuwuW3/FRgEAEIAGAAAAAAAAAAC4qZycHHYXjVdaWmpjY8Oe6x3Yze9ead++fexH2S3cc889rFN/wq5ZN2sZgL6d0Wdq8uRJ5Cq/9/57crlcKr0egObw5Z+Z6zWhm9wYgFY0D0CzDLRC7uRg5xhfZr32lNn0/VZKF6m1le3QwaZyX+MFL4oO/BwzrMKDO6yjylHsFJLgMn2Xpvac2+YzDmU7LHziLYYMHWLnZBRaaJZ4j0XKAvOsSuOCTYMKNg3N22CWU2WeMdfKK8qSDJdEYzTqPstHz4R81Dju8c/Gjpkf4xXk7qxWKxydnf1sl71lv/qEdVyxVCySW1paGxkNSZ1lsuefqjlPOKvdnNRqPgDNF4G+IQDdymJIAJrLQJOH1tZW22q3kLHdvn07G2vX8r2JAAD/9ElEQVToCJFIRAv2x8fHk0lBvsIvWrSIzRM9ZMqkp6f3kt9yAehXEIAGAAAAgL4IAejbid1l66/YKAAAAtAAAAAAAAAAAADtMDIyKi0tZbfQqqunT5+uVqvZc70Ju/ndW5WUlJw4cYLPPHOuXbt2+PDhuLg49nQ/w65ZN9MPQN/+6DNVPqGcXO4PPjjupFRKJTcGoJtploHWC0DfkIF20stAK51kDkpXP/t7nrFYe8o8Ildkby0Vi8W2tvZmZhZRE0we/M6z5pjOzU/p5u1UvNRz06ea2m/lcw9ax5fZ2EusjAdbmBqbDxo0xNJ+iEe0WUiBReJMs1EbhmbdZxoz0SpspL1HgFQsktpY2Q4dZGZsNkSTNHj2XyWH/pny4X8nbz1UkFYU7CCR5qyw2vKt7dgtdmo3pVzmJJFKzEytRKohc1+weaDBJW0SaVS7unEBaFd3vQB052LQHqwINHlobW1du2s7GdutW7eysYZbZmNjo9PpyBf8ZsX+16xZk5WVhWrQALcTAtAAAAAA0BchAH07sbts/RUbBQBAABoAAAAAAAAAAKAtRkZGs2fPZvfP+MLPvTYDx25+Q1/Arlk3owHonoo+U2VlZY2NjR999JGzs0oikcgVLP4sc5SRhT4WsOgz1TIArdAv/8zloeVypVgkzZxntfGcWdl2a6lM4mAv4XYrd7S2tLNXmJY/aPnojyHzH/df+rym7kfX1R+LcpZaewSJRXYySzNbM1MLK0srW1tbKwsbCwtLC0sz/wyTuS8a5yyyVjhJHGVymYQcQ0nORSwWW1pYDx5oaikeHDPOpPqI2/FrBa9dnjJ/X8T9H4kWvGYRlC6RSZWEin+ZQwaZ6kYb77jkuPyIs6e/UqV04YpAu7cIQJPFna8MzX/UX9qMQfMBaDd3N2trqwce3EnGdvOmTWysoUsFBwfrf/En5s6dK5VK2dMA0M0QgAYAAACAvggB6NuJ3WXrr9goAAAC0AAAAAAAAAAAAG0pKChgN8+qq7Oyslhrr8RufkNfwK5ZNystLe3B6DM1duzYxsbGE5+cULuoxRKxXK4XgJY1D0ATfPaZp2j6yALQNxaBduLWJPYK70jbJW+ZV35o7h/vYGstlUi5jLXSSWln62A61Cptlu0jDX5//zVy82n5xAetgtLtJWKpg51UKuUOTR6L7MT2diJ7W5GdtcPQATY+CcYr3x9SvNJO4qBwlHEHpYcnByf9RSIHS3NbE2MLubdx3lLLfZ+Hvns15+XfUpYfDPYOU0sd5U7OSlc3VyeVk5WlraXd0El7Lfdecc5fpJQ7qlzdXd08uKV5AJo03hh91l9ayUB7uHvSALSNdd1DD5Cx3bhxIxtr6AZkyPUrqa9ZsyY+Pp49BwDdCQFoAAAAAOiLEIC+ndhdtv6KjQIAIAANAAD/z959AEZR5X8Al/S2m93N9t7SE9J77733kEDooffeRXovEpoNC3bs2DhUVERRigICUlVQ9MRyHv7P8/i/mXlZQhIgIJDAfj8+l523b3ZmX/Lcce7r7wAAAAAAAKBdCQkJ9M7Z4sUxMTG0t6uiN7/hTkB/Zlagrq7u4sWL+z/f7+XlKZPLNDQAzaSfOezmZdjgM6s5/WxpWp1Wayn/rNYpVfLaxe7LT7lVzPKQiBVyuVylVmk0OqVC6xem7znTd+Xe7g+eMT55PmDiC2adl1zMVypkTPaZvLfBYDCajHq9QavWqpValULr6ugRnOM8b79Lr2US8jZkFHM4SqfX641GE3lUKlR8Fw9nZ7e0oU4bTyi2/5q++/fhD+3oXdQv2jPAZDQbPb1N5DSc7Pn+6U5LDssX7TWGJDFFoL19PX38PX26m32CzN7+zennNgForla0ZdPb28vr8iLQPr4+Xl5MAHrTYw+RuV2yZAmda7hlIiIiZs+eTb8Muvb/FQDAXQMBaAAAAAC4EyEAfTvRu2zWis4CACAADQAAAAAAAAAA0JZOp5s/fz5346yL137m0JvfcCegPzMrUFtTc/HixYMHvvDx8ZHJZGpaALpFArpNBlqj4RqrRfpZzTalSqeUM00iUkcWi+bs5U3ZLvAOk4k95HImAq0xeuuLBvotfj/00R997/1AUjbHcea7sg3HImPyDWKBUq1Sa3VMmllv0BsI5sFo1Bn1WqObk0dogfPio259VkvZjLTOSJBXWSaj2Wwym82e5IlarhPL3Puv5838yKlirvPcV8yf/FHzyb9Gz3+qKrkk1ORt1pv0YrHExc25aqHrQ79o+67UaXUGo8HL29cnMNI/ONkvIN7TJ4SJRLeqAM2lny3N0t+yCLQlAP3oE4+QuV24cCGda7iVpFLpsGHDuG8Eon///shAA9xSCEADAAAAwJ0IAejbid5ls1Z0FgAAAWgAAAAAAAAAAIBW7OzsZsyYwd01GzRoEO3t2ujNb7gT0J+ZFaiqqrx48eKXXx7y8/OTSqVcxFl1Wf6ZwfRdagwag9aSplGpNFqdLjBKH1+qyugrz2mUJVUog5Nlgx4RLDvJyxkjkqrkYrFUoVQlFHlPfTr00e+CVx9T91sr9I3jOzo7Jg+yf/B7r6kvBelMKrVSr9fqdTqm6Zlm0GsNOo1BpzZcFoDWaLRandlsNploY9PPzKPJ6CUVaVL7uy8+xOu12lUodxFq7QrHuTyyL/TAxcZtX48asSg3ND5AqVW6OPP0YY6zdnmsPKbP6qdOrtKUT9D1nOPdd1H36hmhsSV+XoFmpgJ0cwa6VfrZ0lploH18fDw9PT08RE88+RiZ2/nz59O5hluvqKiI+14g6urqaC8A3AIIQAMAAADAnQgB6NuJ3mWzVnQWAAABaAAAAAAAAAAAgFZyc3O5W2YzZszg8Xi0t2ujN7/hTkB/ZlagvKzs4sWLR44cDggIuEoAmkE62wtAK5VqX39z5YiAwQ9ox74ombbDffZuwbR3RONfES0/orv3He+wfKPcLOkeqx+8JPTBYxEP/2Ae/4o4uaeHWqvgu4rtbVwkBoehTwke+ykkf7BZIdMw6Wct05gkNHlkM9Dk0c3JI6TAefFXtAK0VquzpJ9NRqZxAWiN3GQIEE18w33WLl50sVTIkzo78J2cnT1jHRpXS974LvPA/0Y9vmtAxeB4pUFh7+BcOFnQ9LV59g7tlG0e8/aJFx/QLN3vt3Jv3Ly3U/Mawjy9aL75sgC0V3Nrfs4OuDwALfZ46pnNZG7nzp1L5xpui8zMTO7bgaiurqa9AHCzIQANAAAAAHciBKBvJ3qXzVrRWQAABKABAAAAAAAAAABa4vF48+fP526ZJSQk0N4uj978hjsB/ZlZgZKSkosXL3517KugoO4SiYRJP19GqWQb3WIz0JYYtEajVinVJk9t5XjTpDfUsz9RLDooXXFCtPob0eqvPVad9lh1QrNsd/SQhTl1M0JXfRK9+efAeZ/IS6eKPLvLxO4KqYdCJleIRCIXJ15EhdOKw7qFO4O9QzRqtU5v0NNGHljkTzdnUVghUwG6L1sBWqdjKkAzmWcGE4A2kqbzlIgVJVP5S47yqueK9EatWqkl5y+VyN2che5i18gypzmvGHb9u3rPhQlzH6tMKvOuX6Cau1ux6rhi2THx/d96NJ2RNn2rWfd1wIbTcXPejkwp9jEaaRHo1unnyxsZwBWB5gLQYon42eefInM7e/ZsOtdwu5SVlXFfEERMTAztBYCbCgFoAAAAALgTIQB9O9G7bNaKzgIAIAANAAAAAAAAAADQUlFREXe/bMqUKXZ2drS3y6M3v28NR0fHXbt2Xbx48fjx4yKRiPbCjaI/MytQWFjA/tocCw0NaRuA5tLPVwpAM88U6vRemiFPyKbtkC48KF12XLD6G0HTGdHas6QJ7v9Wsfqk9/0Hoh8/G7fmhK7vOmFwulgilouFcrlcoVQqNRoteR+hu1gkd+2xnLfpp4D6+7wUcg0bfLYEoJkMNBeADi10XnTUre/9Ug3ZU6sze5qYms9MDWhaB1opMfglCGd/4j7xTffQNJVSptNqtUaD0WQykSceQpmLk0BicMob5frgp6Ef/qvXsl2Rk/4hnv2pYPkx3v1fi9ae8Vh/VkjOfN1ZWdNp0+L9PkPWmYMiTUZTc/r5KgFoJgNNA9BmT7NEKnn+hWfI3M6aNYvONdxG1dXV3NfE7Nmz75T/lwCAOwsC0AAAAABwJ0IA+naid9msFZ0FAEAAGgAAAAAAAAAAwKJl+eeAgADaeyegN79vDQSgby76M7MC+fl55Nfm5MmT4eHhYrH4SgFomoFuDkAzTaWWCFXdYzS9V2pGv+wx6xPh0iPyTd+FbDxrWPOtO5Mk/k6+9qx49deypUcVU99UpPX1UOmkHkK5VCJXKhXkQFqtVseSy+WuTgKfJJf7dslWHw4OSdMq5VpLAJp90joArb48AM02s1FnlilkDWv4iw/zisZLNGodOQh5f7ZCNMNgMCgVKnee2MWFZ4pw6rlENGGbYPou1wUHROtOe244q1l7RrDxO9mmc+S5vOmMdPkx3ax3DfkDyX4ms9flAehWuAw0E4D2YgLQZrNUJnnhpefJ3M6YMYPONdxGdnZ248eP574p6urqaC8A3DyWAPS4ceMiIiK4NAkAAAAAQBeHAPTtRO+yWSs6CwCAADQAAAAAAAAAAIBFREQEd7Ns9OjRtOsOQW9+3xoIQN9c9GdmBXJycsivzemvT0dFRXp4eNDQs1LJ/Mk+4TY5TAaaYDPScolKKpZl9zYOfEgx5jXBjI+dHz7t+8W/ZzzzY9qabz3e+Kl65y8TH/retPIb/oIDgoEPiMz+Mg+hTK6UKdVKjUbDRZ+1WtL0ZFMkEPOFvPxJrg/8YB76gLdKq9bqWgegeU6i0AI2AL2mdQVoppnMcok2utx94UHeiGcFfhFqpVzLlH82GtnwM1si2uRJHnUavVigdHFyT+jrPOhZh2m77Fcc03/w65AtPyauOeP+2j/LD/9r40s/Jt3/LX/lScXsXeqB9xt9Aw0GnYlGn9umnznNRaDZALRJrpC99OqLZG6nTp1K5xpuL5PJxH1ZEN7e3rQXAG6SsWPHcpGRKVOmJCQk0DgJAAAAAEDXFhAQMGLECO5SlqBXt3Br0Lts1orOAgAgAA0AAAAAAAAAAGDR0NDA3SxLSEigXXDPPQ4ODpYAtFAopL0A15KVlUV+bb759uuYmGgagKZZ58uizxwm+MxSylVigUytlVZNMvVaIxzzKn/aTocVR2RPfRfX9I3uqXMR3/77pc//tXLjWcPyU7yFhwRjXxVG5knFHnK1Rq3Ta5mmYxqLiUErFAqes1Ab5DLmFeGGb/0TK3UKrgg0F4BmNQegXdsGoAm9xqQ2iYc/w5+7j5fRX6ZSaJkRen1z9WcuAM00o9ZTJtTIdfz8Sa6DtzhO+cBh0UHpM98nPnTWtP6s5tC/1p/599PP/xiy6hu3FScksz9WjNpsCE80atV6cig26cw9tocGoL3JQRVK+atbXyZzO3nyZDrXcNtVV1dz3xd33H8wA9D19evXj4uMzJgxIzU1lcZJAAAAAAC6trCwsHHjxnGXstOmTaNXt3B34W4FEHQbADobXZNYlQAAAAAAAAAAYOXs7Ozmz5/P3SwTiUS0FxCAhhuVnp5Ofm3Onj0THx9H1hQTbr4muUohUQn5Yo1B0mOWqXqZ+/AtbpPesZ/1qdPcA06Ljro88q3PP873fPS7oBUn+UuP8ed+wR/3Bj++QsIEoNVqJu+s56LPFjqtRisRS91ceIl9nVee0Ex51cfgrdZq2OAzG4DW6fRuTqKQAudFR9z63i/VsPFmM1PQmUk/m41mqVidMZi/6LBbv/VCzwCNSqkhRzGajFxI2mRkhhFGg1mvMYncJUpPl/yprgOfdpiw3X7Wbqd5B52XHnO7/2vpSz/kvfBD7OpvBCtP8pccEc3cKRvxuC4ux6hR6wwGA5elJtgYdJskNFsE2tvHmxxNqVJufeNVMrcTJ06kcw23HY/Hmz17NveVodPpaC8A3AyVlZVcamTu3LkFBQUSiYQmSgAAAAAAurCEhITp06dzl7IjR46kV7dwd+HuAxB0GwA6G12TWJUAAAAAAAAAAGDlvL29uTtl48ePp13AajcAXVxcTHouXLig1Wr79Olz4sQJskmcPn162LBh3JgpU6b8/vvvlv6CggKuv6X6+vq9e/dyY4gzZ85MmjSJvtZCYGBgy2Hbtm1LTk6eMWMGed42lk0Gb9myxXJo8p5NTU2txvj4+GzatMkyhjh06BB5T/oy3AypqSlkYr/77rukpEShSHjNALRCzgSg5RKFu5tQpRNXTTGVzuEPfJQ3+jXbqe/bz/7Maf4B10VH3BZ/5cq0w7wFB3kzP3UbvoUXXSTx8JApVQo28cxkni89arQ6nU6pUrm7iWQGl/4P8Tf+4FUwwiCXavQ6NgOtowHo0ALnhWwAWt0iAE3+UiuMphDR5G1uM3a6xZUzB9FoNQaDnkk/s42mn40mo96sVesFfJFU55I1xrXhYaeRrzpM3uFw72dOCw66LTnKW3LMZelx12XHeOTk530unLRNMnijLirNxJSuNujIm1wegG4nA80GoI0qteqNt7aSuR0/Dv+w6kxlZWXctwZ5QrsA4GZISUnhUiNEbW0t+cc4TZQAAAAAAHRVcrm8uLh47ty53HVsZWUlvbqFuwt3H4Cg2wDQ2eiaxKoEAAAAAAAAAAArl5mZyd0pKyoqol3AunoAet26deRJK5MmTdq8eTPdaGH06NHc7px2xxA7duygI1hc0LkVy6FbBaC5E2vr9OnTWq2WGxMYGHju3Dn6wuVanSH8HUlJiWRKf/jhXGpaikAouHr+mU0/M48SsZTPE0jlooLBxoIp7vWrBYOechjzus2U9+1nfuJ43x6XOfud5+53uW+v86zdzpPfd+2zju8XLRGLZQqVTKNh0ss6phA0m37mnrBNJpW5uvBDCp3n7ZPN2+XtG65WKdgEdMsA9GHXvmsuqwBt1JulUkXZLP6Sr9xq53vozRq1SqPVa5lkNFv+2dKMepOJvKzSCNxFbnyXuF5uNfc7Nz5lP3qr7eQddrN2O87Z5zLvC5f5X7jO+9yVfIoZHwmGPSNoWKzvHmbSqLTkPJhQNYe836UMdIsYtJentzcTgNZoVW//400yt2PGjKFzDZ3BZDJx3xrkn1F2dna0FwD+No1GYwmOjBw5snv37jRUAgAAAADQVZF/ax8wYAB3ETt//vyAgAB6dQt3F+4+AEG3AaCz0TWJVQkAAAAAAAAAAFauqKiIu1MWExNDu4B1lQA05/XXX+f6Q0NDW9ZU3rRpE9dfX1/P9bd8hz59+rQaZjkQYQkiW97zzz//tNSWtrwh0fI9LYNPnz5tKedsGWzJVXPB65ZvSA7NdV64cAF1oG+W+Ph4MqU//vPHjMx0gcDdEoBWKBT0mYVCqZAxnQq50kMoFgiEri5ucQX6kiny4pmChrW8xidtR75qM34bEyae+oEDaZPfc5jwjuOkdwSNDylCMxRisUwqkam1qkvRZ/aRCUOzT9RqtdBdLJS5lc9zXf+9oed8k0Ku1ukuC0AvOuLWt4kGoE1MaWezUqoPSBXM/tRt/Ou8sAyVUq7R6jRGk4HWfjazVaLNJqOBaSajWS7R8N08xBqX9KH8mlWudescBzzhMOJlW3LmU3bYT9vpMP0jx2kfOk19nzfqFWHf9eKiYWbybuRwzHnodcxbtMhAc40LPzOYCtBeBgMZr9n+zjYyt6NGjaJzDZ1kypQp3BeHt7c37QKAv43H4w0aNIjLjsyZMycvL0+lUtFcCQAAAABA1yOTyeLi4mbMmMFdxJJ/VfTw8KBXt3B34W4CEHQbADobXZNYlQAAAAAAAAAAYOWqq6u5O2Wo0dLK1QPQrQowW6o1t6ribMkcFxQU0C62ErMlgsyxJJjbhpVb7ki0ewJXGsydlaWfG9bqzMnHjI2NpRtwM5D5JPP80/mfsnOyBQKBskUA+vIMtELB1H4mXcwTD6EH+bm4OLtpTZKyMZ5ZYwTFs0R1q3n9HrEf9LTtsBdtR7xsN+Jlx+EvOg98wnnAJv6cT3WL9nSvmWX2DpdLpUq1RqtprvpMGxuAJuQKuZuLwCveefJ20YrDnqEZaoVMy+SfdTpLALpfk1TLBKCZGs8GnVmukvVdx1twwLVogoT0ajQanV5rapF+vhSA1pu0Kk+dWZXcSzR0M3/Y866l83j5M1yrl7n1fsCp8Un7YS/YjnzFdtSrjqNfdR32jLDXWmHDYmNMhrdKyZyDnolh64xGw6UANDlIexWgDQaDTqd9973tZG5HjBhO5xo6SW5uLvfFQZ7QLgD421xcXNLS0rjsCDF48GByeUCjJQAAAAAAXY/RaOzVqxe9fl2wgDzn8Xj06hbuLtxNAIJuA0Bno2sSqxIAAAAAAAAAAKzcoEGDuDtlJpOJdgHr6gHoBx54gOvhWPotJZw5rSLIV+Lq6nru3DkykgtAt3tojmWk5aWrDLbkqrmz4gLQxKZNm7KyssLCwrhhcHNFR0eRSf75l5/z8nP57nyadm4dgGaey2VsAJqh9BBJhALyAxQ6OTiHJ+tKx+tTh7rnThBVzBPWruD3WuvWewOv90ZefROvZDYvqbd78TT3OR9rH/8ldMnu0NLxZq8grVKpVau1Oqaw8mUZaI1WTd6cL+BljXJe/bVq6CMmtValUbEBaGdRaKHzwiNu/ddKNTq1Rqs1m80ysTa22n3BAbdhT7v7RapVClr+uWUAmnliNGkVZpOnMbWHZvhmyYJ9/MlvuxZMcgnJ58f1dM8ezy+a6Va52K3+frfe60kT9H1AUL9KULdAm9czUKfTa8nh2fQzaQZLAJow0T9bZqC9vZkK0AaDfscH75K5HTp0CJ1r6CQBAQHcF0ddXR3tAoCbQa/XjxgxgouPzJ07t6Kignxh0HQJAAAAAEBXIpPJUlNTZ82axV2+kif+/v5OTk700hbuLtxNAIJuA0Bno2sSqxIAAAAAAAAAAKzczJkzuTtlEomEdgHr6gHoVkHnq/e3DUAHBgbOnj37tdde27t379GjR7l9CS4A3SoP3VLbs7IMvgrurCx56JbIub3++uutktPwd0RGRpKJ/e23XwsLC/h8JgCtIH81B6C558ymXCGXKZoD0AqJh0zgzgSg+Xx3VxfXyFRD6Whz5ghxyhD3zNGC3EnuhdMFZfd65I0Vh+aKBCI3odQ1ONel7zrh/V+Zn/w5cu47oTn9zEZvnVKh1eq1Oj3zaElCk8PxXISaAJchz/CbvjEm12rkEo1Wp3NlAtAui4669V/HBqA1Oq3aqPEUj3je7b69bun9ZColU/5Zb9AxuecW5Z/1OrPBYIwp0A5YJ7vvY8HsXW591vHjqkQqk9DOzk7h6RRRJkgbLMoYJcgcw8+Z4E5axX2SnvNM2bUBJqORCWo3p587EoD28vbS6/VGo+GDnTvI3A4aNIjONXQSnU7HfXHgZwFwczk5OZEv67lz53Ihknnz5hUWFspkMpoxAQAAAADoGiQSSUJCwowZM7gL1/nz52dmZuLm0l2MuwlA0G0A6Gx0TWJVAgAAAAAAAACAlZsyZQp3pwwB6FZuUQDa1dX1iy++4Aa3dUsD0Nzu8+fPbxm55pw+fVqr1XJj4G+KiAgnU/r77/8qKSnm83lKVXP0uSWlQi5XyKVsAJrNQMtlCqG7h4BvyUDzvPxV6VWeJSO9SsYai8cY8obqY0tVXsFSqUTizhe6OLm5OLpKda6xtW7DnhA/8I3f5p9iprwQklJj1pt1aqWOKbLMVYPWajVarUQidXPjxdY7LzwknfKG0eilUiu1XAVoJgC9ng1Aq3QyiTJrGH/xEdc+64SeARqVUkPehyv/zAWg9TqzXm8KS9M3LFPN2yOet5c/4CG3rEaJV7CcnJWbs8DNledo7ySUunhFiOIqlNmN2oJh+qIhntk9/KISfHVaPZN+vpzRaKSpZ46JaWwAmmagvby9dOTAZtNHuz4kcztw4EA619BJeDwe98VBvkFoFwDcJBqNpra2lsuRENOnT8/NzSUXaTRpAgAAAADQBcTExEydOpVesy5YMH78eHIda2trSy9q4a7D3QQg6DYAdDa6JrEqAQAAAAAAAADAylkC0CKRiHYB61YEoC3vSXq2bds2YMCArKys2NjYVonndg/NsYy0vGQZ3DYtfU3k0Js2bSL7Eq3OHG5YeHgYmc8LF/5dXlHO4/FU7QWglUplqwA0IZXIhO4iJgMtEArcRa7OfA+hWKGUqI1irVGqVMokEqlYKJWIpVIZeRS7uwucHN1cXdy0fvy0Rt7krYonfgp+/PuEUY8Ex+QbtVqdWqPTGpgEs1avJafhzhNJdS49m1ybzmiKRmtlYo2bkyik0HnRV0wAmoyUSdTmcOGU7a7T33eLq1AoFVqNVqM36rn0s8Fg0mpMATGGyhnqWR9IFx0SjnmZVzjOIyhRpdPpFBK1kCfmu5FTF3l4iJkwt7tQIvVQqqRarcqkNxh0BpVSoyWn1YpeZzS1E4A2Xx6A1ut1nl7mj3czv+r9+/encw2dZ+HChfjuALgVbG1tvb29R40aRbMkCxbMnTu3vLwcGWgAAAAA6CKSk5OnTJlCr1bZ/2YvPDzcycmJXtHC3Yi7A0DQbQDobHRNYlUCAAAAAAAAAICVQwD6Sm5FANoSX37ggQe4AZzQ0NDff/+d9FtCzJs3b265o4XlQC3Piht84cKFVlWcyUcICwujG+zm7NmzW4250inBDSM/TTKf//nP/1VXV7EBaBUNOLciZ6o+0wB0cwZaLpWLhRKhu4g0kcBDwBe5u3m4u3oIXMUigVjsISGkEinTWGKxRCT04LswkWlTGK9oivvcD7TP/Sv6kZOJjSuCQpONao1Oo9XpjEwGWiaTuTrzA3OcZu0WzflE7xupsr9HGFLgvPg4b8BGqc5T46EQV8x1W3TEtXahWG/WqNQarV5j8jQaTSad1uQTZMgfrpnylmLJYdGkt3mV9wnDsxUGo1Yp1aiVGg2TbdaqFGqZWCEVyyQeMqmHXOahlHtolGKdSq5VazQ6HTkVrl1iNBpo7tmCC0CbafqZ8Pb2Iufv4+v96Z5Pydz27duXzjV0nlGjRnHfHSaTiXYBwE1iY2MTEhIyfvz4+fPn01DJggVk0SUnJ+v1evIPcxo8AQAAAAC4XaRSKfk3/9jY2EGDBtErVNa0adNSUlLs7e3ptSzcpbg7AATdBoDORtckViUAAAAAAAAAAFg5BKCv5JYGoMl7Jicnc2MCAwO/+OILdu9LAWhLJJrsO2zYMK6zvr6e6yRanpVlcKu35c7/9ddfJyMthz59+rRlDDFjxgzm7VAB+uYJCgoi8/nXX3/17Fnv5uZ2xQC0gglAt8pAKwmFUkH6pQqZlH1VplJI1eRRJpNLpTImAS3h4s8yQqlQqVVqsq+HQMxzEQo93P1SeLUL3Fd/4fnyHwnrDyb1vLe7f4RRrdZrDTqNXkVGCGWuxfe6rPpWXr9E5ezkHlHusvSEYOijKpOvITCbN/sz5wlv8cKyVEoFk37WG/U6rcnsa0jrpRuzRb30iGTWh/z6Ze5xFTKTj0Yh1SrEGrVKo9XqDAaDyWQym8xGg0mvIwcz6DVGg8Zk1JoNOqZ6tN6g1+lp6JnS64wGo9HIhp1bogFomn729PL09vHWarUBAf6ff76PzG3Pnj3pXEPnGTRoEPfdgQA0wK1Avj7i4uIGDx48b948Gi1ZsIB8ZQ8cOLCwsDAlJaV79+7MPy8BAAAAAG4xPz+/iIiI7OzsAQMGzJw5s+V/pEcuUNPS0hwcHOhVLNy9uDsABN0GgM5G1yRWJQAAAAAAAAAAWDkEoK/kVgSgCUvguCVyiJdffpk8sQSgiXZHkrc6ceIEedLyrIh2BxNkvOWUyMlY8tOtnD59ulVlaLhhAQEBZNrJrPbt24cLQDOp5naxQedLGWiWkk1BM8gT0uRKlZK8BdOUChU3Uk7T0uS91Wq2qZRqmUwh5ItdnQQSFT8k323gRo8HT/q/ciF15cdJpSP9vAMNGo1eoZK7ubmbYpzGbRUvOeBZME7Y537egs+l099W1c6Wj3hKuvyosmS6VO+jVmvUarXOYDLGleoGP6RefFA2Z49gwIP81AapT7BapdCq5Ez0WaNkY9JknPFSMxnNpDG5Z53JpKf/iylhbIOJTLPtMs2bNP/cHIAOCu5+6NABMrHV1TV0rqHzIAANcKvZ2trq9fqxY8fSdEmzuXPnki/9iRMnjhs3bgwAAAAAwK1ELkfJlef06dPJVSi9Hm1GLkpDQkKQfrYS3B0Agm4DQGejaxKrEgAAAAAAAAAArBwC0FdyiwLQRJ8+fbgQM/dSU1MTef/NmzeTzZYBaCIwMHDv3r2Wka+//rpcLm97VhxusCXiTMZv27atZbFngozZsmVLyxj0mTNnuBOgI+Bv8/Pz++OPC2RuhwwZ7OLiolaraZ65PVwRaKZxsWbalLQ1h6GZFLVCxfyppI9MYzEBaCUXg9aQMTKJTODmwXMVyPS8uDq3sU/Lnv4h/JV/Zc59Iy67wcforXN3kxi8FaMf9Vv0hfG+T0VzPuMvPSRa+qVk0UGPlcc0a76M7j0jXmPQKjWq0DRtn5XaBfuUiw6Khj3Fzx7mERCt1qi0SqlGxVR91uoNeqPByAWdjfpLjethOpmq0M2YYDR92gJTvrS55HOzFuWfvby9vL29fXx9NGp1eETY8RPHyMSWlZXRuYbOgwA0wO3B4/GysrImTJjQstIeAAAAAEAnmjp1akVFhYeHB71mBSvA3QEg6DYAdDa6JrEqAQAAAAAAAADAyiEAfWexxLJbRaWh6/D29v7l55/Jz+i+Ofc5OTkpFDSqrLhCGWimonNzDFrBNnmL6DOH2Z+tAE2jz1wYmkUrQLNFoEljq0GrpGKZOxODdtf48TKH8GZv07z0W+yL57MnbY6OyjSUjNJPelNx3x6PRUfcl30luP9r4ZpvxGu+9Vj9teL+k773vRWaUedZMlk952P1sqOScVvdiyeLQlJUWq1WIdOqFBqNVqPX69j6zUwjDDo2Bq1tbq2izy21E4O+PP1MselnLyb97O3DNLFYXFxS+Ouvv5CJzc3NpXMNnQcBaIDbSa/XFxYWDh8+fM6cOTR1AgAAAABw202YMKGysjIgIMDW1pZeqoJ14O4AEHQbADobXZNYlQAAAAAAAAAAYOUQgO7KYmNj6bNmoaGhXP3mBx54gHZBF6PRaM6cOUN+RseOHystLfXw8JBIJFxYWdlcB9ryhGF5ypV/ZrGx58s0v8OlUtAtGk0/cwFoQqPWkDESDynfVeQucDeG8cqmuS/7xPTKb8nzdwQ0bnadvIM3/6BwxUn5/adla74RrjkjaDoraDojXv21YsF+5b3v65cdVk/fIahZIIjMVxjMGoWUvKGGvLFOrzMw6WY2+mxpTAiabWy+mXm8Oi4GTYexAWhLM3t6sulnJvrs7e3j48O8uclYXlG286MPyKwSMTExdK6h8yAADXCbOTg4kG+BoKCgqqqqESNGzJ49m4ZQAAAAAABupblz506YMKG+vj4qKkqr1QoEAnqFCtaEuwNA0G0A6Gx0TWJVAgAAAAAAAACAlUMAumtycHDYsmXLxYsXX3/9daFQyHUGBgaeO3eOdP75558FBQVcJ3Q1jg4Ozz33HJvUvXj+5/OLFy8KCuouEAgUCgWbYGbyztwjh403t4hBN2P7L2HzzyzlpRg0TUIrWqSf2QA0m4HWkgelQukhlPDdREIPd/9UXtVM4eBHRaNec5r+kcOSw4q3f+75zI8pK7/hPXEu7M2f6x/6zrz6W8HSryT3fiztt06cUCMx+2mUctKYN9RqtQaD/lLomWvtaU42XwszzMw1S/qZrf3sRfj4eJNnOp0uPj5uxcrlP/74Azelu3btkkoldK6h8yAADQAAAAAAAGAluDsABN0GgM5G1yRWJQAAAAAAAAAAWDkEoLusTZs2cYnPtkaPHk0HQZdkNBoefvih//73T+7ntXfvnkGDGrU6rYeHh6I5Bs2iuWe6cXkMmutsics/c5jksyUArVKplWryYEk/ExqCPKg15LlCphDxJS52AmMwv2iG69DnnKd84LD4oOztn8qf+D587Rn1vt+Wf/PvFzafC1nxNW/JUY8Jbwnyh8qUco1CxrwVOXMm+sxGm6+Se7Zoru185Rx0c975ErLFln729vLy9maiz3q93t/ff9Sokfv27+WmkXjyyc3e3l50lqFTIQANAAAAAAAAYCW4OwAE3QaAzkbXJFYlAAAAAAAAAABYOQSgu7L6+vq9ey+lP//8889t27YlJyfTl6ELs7W1Laso+/DDDy0/u5dfeamgIF8qlYrFYibB3A42AN2cgaZ9l2PCzu1hcspEuxlo8qDQysUqnovAK4pfPIM3+Cm3CdsdZ+12Wvglf/FXrhu+Me/7bda75+vWfCNedtx90Zcek7eLyiZJtVrmTfR6XXOu+drRZzKAzT1bMtDtsxR85niymLLP3l4+3j4Gg8FkNlVWVrz66sv/+c9/uAn87LNPKyoq7Oxs6fxCZ0MAGgAAAAAAAMBKcHcACLoNAJ2NrkmsSgAAAAAAAAAAsHIIQAPcOuYAxcpHZpz+9gSX4v35l5+bmtZER0eR5SaTyVTtx6AvVYGm2y1wced2sZlnpg60pRQ0k33WaNQqjUqukUmUrs5uvvH84pmC/pv4o15znPK+/b2fOc4/4LLkiHvTKfmqE8LFR90Wfcmbu99j4tseZVOlBhPzHnq9wWig8eZr60gAulXtZzYA7eXl6e3tTV7S6XQpKclr1zX9+M8fuEn77odvH39zXlqNgc4pdA0IQAMAAAAAAABYCe4OAEG3AaCz0TWJVQkAAAAAAAAAAFYOAWiAW8RVYB9ZJArJcy/sGfPE8xv+9ftvXKL3+PFjkydP9Pb2JotOrlBw8WUacG52pTrQ3OB2MZFnC8uWSqNWMAFoiVjm4uLmGe5eNEVcf7/7oKecR79hy2SgdzvN2esy93PneV+4zNvvMvsz1xkfCUe9KCocpdCwFaB1Op3RYDR0MAPNVYlmW/sZ6La1n9nos6enWavVBocET5k6+fDhL7mJ+s+f//fCm49WDUqMreFXzBL7RLvTmYUuAAFoAAAAAAAAACvB3QEg6DYAdDa6JrEqAQAAAAAAAADAyiEADXAr2Np1C82SJNeqwzOUAQmCoBSP3iPyt73/yl9//cWle3e8v6NXr15KldLDw4NLNnMR5xbaCUATXNy5XWzk+TIqhUat1CjlarGHxNWFpzK6F41Tld4n6LWO3/iU7ajXbCf+w27qBw7TP3IkbeqHDlPecx2zVdD4sCylWqNUqNUatVarMTA6loG+LADdjlbpZy+Gp0Fv8PTybOjdsP2d7dzkELv2/mPYtPKIfElItiAqX5U3TFk7Q63UudL5hc6GADQAAAAAAACAleDuABB0GwA6G12TWJUAAAAAAAAAAGDlEIAGuBWC4sW1E41ZvTTRuarwdGVomtwv3j08Uzlhdr+9Bz7mMr5//PHH008/lZGZIZVKCJpipmjcuV10SHto8JlDtpRqjVqjkKlEQg93voDHc83opS+aIimZLei5xrX/o3ZDnrMZ8YrN6K02Y163G/2a04gX3fs9LGhYbOgeqVcoVGRn0nR6ndFoNOiZdm1s7ed2AtDtRp/J2xoMOTnZjz326K+//spNy1enDs5ZOSK+RBOc5R5dJIstVqXWqGonaqY+GtBjrN6VZ0enGDoVAtAAAAAAAAAAVoK7A0DQbQDobHRNYlUCAAAAAAAAAICVQwAa4KYzBbn2XaAZud48YIGxfJQuqUIVmq4MSVF2T5T6RPOSiryWrJ3+7dlTXN73hx/OLVm8ODQ0VCgUKRQKtZpGmZVXzkDTEe2h0WeWSskGoDUahZwJQJM17uTg4hkgK59oSh/JL5wqqlns3rPJpe+DTv03OQ18zHXAw4K6Ve49l6my673VKnIeTPqZKQKt07JFoA0GfUeqQNMMNBd7tmjOPtP0s6enWavVRkZFzp035/RpOhX/PP/9A5sX5/YICEzhhedIYkuUydXK4qGqxgWqiQ8ZJjzmM3C1IqrIzdauG51o6DwIQAMAAAAAAABYCe4OAEG3AaCz0TWJVQkAAAAAAAAAAFYOAWiAm8vBxbZiimTqVo97tytmvOQ5ZqNXn9mGvH6aiCxlcJIyJFnRPUHsG8MvqI987Lm1v/1Oyx5//vnno0aPMpqMHh4ebAyaCTATNPLMarnFpp3bwe5IKZVsEWgmCa3xEIpFQpFAIHR0cApL0paMMaQNEaQNE+RNEFXcJ6uYJy6ZLSieJai8V1k4wNdk1imbyz9fFoAmrlkEulX6uUXhZ4KJPps9dXqdr6/P0KGDP9lNi2H/9b//vvaPp+qHpQRnuIdleUTnKxJKlXn9lX1mqcY0aUZtUIzYJBzxjLBuhXPpDJ5QaU/nGjoPAtAAAAAAAAAAVoK7A0DQbQDobHRNYlUCAAAAAAAAAICVQwAa4Obiie17zJGPeoo3+33nhZ9I5r6rn/ac14j7vWonmFKrNWFpypBkZWiKwj9O2D3Ro2F43ls7Xvrzrz8vXrz4v4v/e3vbWxWVFQqlQiwWc2lmLtZsCT1bykJz/e3iUs/kT6WC3WJopGKZUEBWucjdXeDi5BIYoSkc5JU9VJk3WlE5y1A2TZM7Wl4yypRR6Wc06RXyS+ln0nQdD0C3qf1sbg5Ac4Wf9UwRaUNpacmWF57/4//+4NLPu/e/P3pmbXSeNCTDPTpfEV+szOqlrJ+sHLVaM3q9cugDovEvud77oevQJ+0r59lXzHaXGhzoXEPnQQAaAAAAAAAAwEpwdwAIug0AnY2uSaxKAAAAAAAAAACwcghAA9xcPA/72vtkQzfxZvzDfv7HTgs/cV+wSzlnm3nqUz5DlnmVjTDGl6hDUxWhKcqQZJlfrHtYunLcvX33HaC1kH///feHH3koMTFBLBbLZDIVTTNbMtDNdaCZJ+3jIs9MVlrBxKCZN9BolAqVSChmMtBCD/Lo6syXKyThCabEQnPZ0KCcuoC4DJ/AIDPZhan93BITgNbR9DOhZx5o3Lmtdso/MwFoT09P0q/VaePj41etWvn9ue+5D3v89JfzV49PLNEHp7tH5UljC5WpNcrKMcqhy9RjN2iGrZeMesp15rsuE1936rXOtnJBt6Lp9uWz+AhAdwUIQAMAAAAAAABYCe4OAEG3AaCz0TWJVQkAAAAAAAAAAFYOAWiAm4snsqudIx3+BG/a2w73vuc490OnBR+7LPxEuOBDzX1v+Ex6zG/AfO+CAYaYfFVoiiIslYlBe0fxEvO9Ft4/5ZuzJ7lk8DfffD179uyAgAAPDw+FQqFhSjHTatDNrlEEWqVUcwFoSxFohULpIZQI3UVMDFrgIeCLXJ0Fbo4CsUAmcVdJREpFq+gzS6PR6PVs6plDn9LA82Va1342mz3Nnl6e5E+NVhPYPWD8hHEHDnzBfcBff//5oaeW59WFBCa7ReZKYvKVieXKoiHKgfPV49ZrR26QD3uEN3Gr86Q3nQY8Yl+5uFvVEpvKhTbFNABtT+caOg8C0AAAAAAAAABWgrsDQNBtAOhsdE1iVQIAAAAAAAAAgJVDABrg5uJ52NXNl4x5lr9gl8ui3S6zdzje+67j3J2OCz9xXfSJdMEHptmvBYx/MKD3TO/sBn1ktpKrBh0Q5+ET7Z5XG/Hos00///YTlxLevfuTgY0DdTqtWCJmY82tMtBXxI5kajlzMWk2yUxoyFO5VCHxkJEmFcvIc4VUJeSJ5VKVVqfVaJh6zy1pNJrLyj8TzVloGnq2aFn7ma36bPZkml6vJx09etS+9dYbFy/+j3yovy7+9413n68fmhGcKgxNF0XnK+NKFDl9lb1nqcas1Y7eqBr6gGDMFqdJbzoN3GRfvcymcnE38li9lA1Az2AD0HoEoDsfAtAAAAAAAAAAVoK7A0DQbQDobHRNYlUCAAAAAAAAAICVQwAa4OZyE9nVL5SMf4G/4gve2q8EK77gz9/lPOsdh3vfc1iwy2nxZ/zFu5UL3veZ9WL30WsD6iZ5pdXowjKUIcmKkCSFX4zIL07Yc2juG+++QOPC//3r5ZdfKigsUCgUUqmUBpNZbNT5CtSq5iLQzGNzBJoJOGs0Wg15ZJqWvGQymmdMm1VWXk5e1ul05EWmNWudfiaYALSxVf7ZEn02N0efyV96g57snp6R9tDDD/58/jyb6L6458DOMTN7hWfIuqe4R+bKYwoV6fXK2kmqkas04zZqhm0QDdvsNOZl+yGb7WuW21QutqlZZkOeVC21qVpsU7mABqAlOjs619B5EIAGAAAAAAAAsBLcHQCCbgNAZ6NrEqsSAAAAAAAAAACsHALQADeXm8i21yLJ+BfdV3zB23hStOGkqOmoYNk+3pwPnGZud7jvfcfFn7os2yta8oluwTuBM58LHrEysHKUZ0KZJjRFEZykDE6Se0e6h6Yqx8zovffAx1xu+Oeff17TtCYmJtrDw0OhUHBxZksEmnnWJg7NdDIBaLWSC0Bzjc1AMzFo0lRaiYc0IT7hzz//88gjj0ilUqPRyCWc9c3YyPPl2gSgLxV+ZgLQDJPZpNFoQsNCZ9078/iJr7iP8O13pxY1TUkqMvsn8MIzZdF5yuQqZflIxdClmvEPaIdvkA5+2GXEc/ZDnrKrW21bsYip+lyznLZLAejpDuUzEYDuEhCABgAAAAAAALAS3B0Agm4DQGejaxKrEgAAAAAAAAAArBwC0AA3l5uwOQD9OW/jSeGGk6KNp0TrT4ruP+y++DO32TscZ253mLvTaele1xX7JUs/8Zq/LWTakyFDFgeUDDbF5KuCkxXBSYrAeKl3pHtcnnnh6imnvj3GZYiPHDkyefIkbx9vsUSsVCq5Is1MELpZqxg008NmoFWkKdVqpmlIU7FNo9LyeO45OdnknV94YYtCobDEmrmoc/v0bPq5eSRNP5uZxkWftVqtl7fXgIH9Ptz5AXfav1/47fHn1xbUR/gn8EPSJBE5irgSZUGjcsBc9bj1ulEbFYM28IZsthvypG39GtuKxUzc2RJ9pgHoJUwAumoRWwGaCUDb07mGzoMANAAAAAAAAICV4O4AEHQbADobXZNYlQAAAAAAAAAAYOUQgAa4udgAtJirAL3hpHDDCaYI9IbToo2nRetPCFcd5C/8xGXWO46z3nFY8LHzyi/cV+xXL9nlP++NsCmbQvvf55/bxxCZpQxKZKpB+8eKvSP5eTXhjzy1+td/nefyxO+//37Pnj01Wo1EIlEzxZwvz0C30NzFpJ+ZDDQTg2aiz2qVRqPSaLVaZxfn3Nxc8p4vvfSSUqnU6nRGg8nIFHi+Mi4A3TL9zBZ+9vQ06wi9Lr8g/+lnnrpw4d/kbf/633+3ffByw/CcoGRRYJIwPEsZna/M7KXoNUM1pkk7ZqN6yAZh4yP2jU/Y9F5vU7mYadXL2LacebQEoOnzJTYlM+3LEIDuGhCABgAAAAAAALAS3B0Agm4DQGejaxKrEgAAAAAAAAAArBwC0AA3l5vAtudCSwBatJ4LQJ9i22nmcd0x4YrPefN2Os/4h8Osdx2W7HFZfVC0cr9+yYfBc16NnLAxpNc03/Qe+tA0RVAi03xjRH6xorrB2W+8s4WNQF/88z9/PvXUk5mZGTKZTC6XadTMX0xj886X6kCrmzPQbG/zFls4WssGoJ2c8/KYAPTLL7+sVClJj9HIBaDbzUCz/frm8s/NtZ/NZjN5jewbHRO9eOmib898y53k51/unnBfv/BMRUCie2iGLDJbmVKtrB6nHLFSM/5BzdD1HgMfcmx83KbPRqbkc8Uim+qlzennFo3JPa+wqV1p02OlTe2y5gC01o7ONXQeBKABAAAAAAAArAR3B4Cg2wDQ2eiaxKoEAAAAAAAAAAArhwA0wM3l6m5bP18y/kX35Z8zFaDXnxCuP9mcgWYfN7Ix6KajgqV73e77wGnGNvs5Hziu+Nyt6UvJqv1ei3eEz34hakxTSO04n6RybUgyF4OWe0e5ByfLR01r+OzznVzC+Lvvvlu8ZFF4eJhYIlEoFWyumcHFnLli0PRpC9wYLROA1jg5Oec2B6DJYK1WazKZjEYu6Gy41Ajmka39zKafLdFn8id5Tz9/v5GjRuzd9xl3Yt//+O3yDTOTS7z84txC02UR2Yr4UmXJUOXgxZrxG7QjNsoGbnRpfMym30M2tcuZ6HPVlaPPPVbZ9FjNtlWWADQPAeiuAAFoAAAAAAAAACvB3QEg6DYAdDa6JrEqAQAAAAAAAADAyiEADXBzufBt6+aKx78gYCpAnxJdCkBbYtDN1aBJ/5rD7os/db33PccZ/7Cf/5HTmi/5a48oVu0NXPxOzKxno4cvDy4b5hVboA5KVAQnKgPjpd6R7nF5pvmrJp385isubfzFF5+PHDXS7GmWSCRqtYrLNzdXg24HN0DLcnJyslSAVpF9tRojk39mUs5s3NmSgeY2mX6u7jNHp9OR1yqrKra+/upff/1F3ufff/zrmZcfLO4VHZAgCEr2iMhUxhQo8/or+96nHrteN2qDctB6/sBNdgM22dStZKLPlYuZ9HPLZkk/17LR57r7berW2NQ1B6CLpzuUTkMAuktAABoAAAAAAADASnB3AAi6DQCdja5JrEoAAAAAAAAAALByCEAD3FwuPNuameLGBwTzd7luOCXccJIJOq/nyj+3aqdEG9mE9KqD/AWfuMza7jDjHw5LPnNe95Vw3VH9qs9CF26Lm745etCCoIJ+5sgsVVACUw06IE7iFcnPqQ5/+KlVv/7rZzYFffGtt9+qqKrQaNRSqZTLN3NBZ5p6vhw3oGUA+pVXXiH9pMfEVoBuH5t9NrN/6fV6Mjg5OWn9+rX//Oc/uXN476M3Bowp7p4k6p4sDMuQR+YoM+oV9VNVo9Zox25UD1onHPCQ/cBHu/VqsqlY2E70mTQm+rzCppa0lc3RZ67dzwSgK+bZZA53KBjHF2vt6VxD50EAGgAAAAAAAMBKcHcACLoNAJ2NrkmsSgAAAAAAAAAAsHIIQAPcXA5ONnWzVYObPAdsEMx+32XNET5X75kWfm6TgebaumPCFV/w5+50nr7Nfta7Div2uz5wQrLhqNeKT6IXvJ445ZGofjMDM+sNoWlMBjo4SeEbLfSLFfVozNz6j+f++78/L168+Pu/f3/ooQeTk5OkUolCodBqtRo2Bc0lnpknzXFo8pyJP19XAJqr/GxmXlWpVUFB3adMnXzkyGE2+Xzxy2OfT50/KCpL7Z/AD02XRWQrkyqUlWOUw5Zrxm3UDlkn6bfBccAmm97rbaqWMIWfW+Weucaln3uwhZ97WNLPTTb1a5hIdPFs25RGh/herkUTBB4qBKA7HwLQAAAAAAAAAFaCuwNA0G0A6Gx0TWJVAgAAAAAAAACAlUMAGuCm6zUx6uXDExpXBlbPE414ynXBbte1xwUbT9MY9HrS2o1BnxQ1HRUs3ed23wdO096yn7PDselL3sOnlesPB674KH7ey4kTNkTWTwpIrtCFJCuCExXdE+Q+UYKgJNmIafW797/PZZFPnTo1+757AwMDpVKpSqXStqgGfTkmAO3s7JSXn0f2ahmAJrjMM4PJPbOFn81m8kh2M5lNDb17vfveO9zhfjh/ds3Dc9NKffzi+SFpkvBMZVyxoniwsnGBetwG3Yj1iv7rXPo9ZNPnAZuaZUzh54r2Cj+TVrOcqfrcY1WLqs9rbOqbmCR0+QKbrLH2sb2cYutdKmZJc4dI7R270YmGzoMANAAAAAAAAICV4O4AEHQbADobXZNYlQAAAAAAAAAAYOUQgAa46TR6+bT1JQveSh67Kaxurq7ncuH4l12W7eetP0lj0FwGmmstY9AbT4k2nBDdf9h98aeus95xnPa2/YJdThuPCR79Rr/uUNiyHclztiSNXhVeMcIntkjLlIJOVHZPkHlF8OJyzfNWTTj1zVdcLnn37k8GDBxgNBolUimTdGYz0K2C0KTT2dm5gA1Av/rqKxrNpQA0F4GmT9n0s06n0+q02TlZjz/x2O+//4vs8sd//v381k3lfeP9E9yDkj3CM5TRBYqcPso+96rHrtOO2qAc0MTrs962z8Z7eqxio8+LbCqX0NYy+nyp8PP9NnUtCj/3WMOUi86bapcwwDG6h0vWSH7NfI/cYR4ihSOdZehUCEADAAAAAAAAWAnuDgBBtwGgs9E1iVUJAAAAAAAAAABWDgFogFvB1uGeuGLVhEdi5r+ZMmJDSO1cdd+1/Glvu6z8krf+lJBmoJtj0Jcy0GwMmqkSfVy46iB/wccuM7Y7zNhmv+wzl0e+9nj0a3PT59FLt6fMeip+6KLQooFekdmqoER5UKLCP1bsHeWeXRXy0JMrf/n1JzYFffHFl14sLCpUqZQKhYJLPBOa5hg0ec4EoAvyychXX32VeeVSAJpjJn/p9QYyODIiYsGC+V9/c5p7548+3T5oQnlQikdgkjA0XR6Zo0zroewxSTlqtXbsRs3AJmHDGrve6+/psbpbxSIm/Vy5+FL6+VIGmo0+M4WfV7Pp5+aqz+SxZrlN4Szb5CEOMT2dUxp5lXNFpVPFfgmuNjao/dxVIAANAAAAAAAAYCW4OwAE3QaAzkbXJFYlAAAAAAAAAABYOQSgAW4dgcQpf4DX7BeS521NGbQ6sGaevPEht3vfd7n/KH9Dm1LQlrbhJFsK+pRo7THh8i9483Y6T3vbfuZ2+9WfuzxxRrbplN+aPfGL3kydviluwH3BOb3MYenK7vGK4ESFX4zIN0ZQOzDj1W3P/PW//168ePGnn35as+b+mNgYmUyqUil1LDYIzWAC0IUFZNhrr71GNslL5hZMJqNarfbx8Rk6bMinn37CJp8vHjt1aObi4TE5Wr84fli6PCJLmViurBitHLpUM26jduhaScMqp55N3epWd6taYlOxgI0+t2xs+pmp+ry8ufAzm362BKBrV9mUzLFNH2kfU++c0NetZIaweo4kspjvJrSjcwpdAwLQAAAAAAAAAFaCuwNA0G0A6Gx0TWJVAgAAAAAAAACAlUMAGuBW03i7103tvvDNjHtfTOy3zLfHQsmwJ10XfOLadNz9SjForho0E4M+KVpzVLB0n9vsHY5T37Kb/Z7DhsP8J8+qHj0Rsurj5AWvpkzeGNswpXtqlSEkWRGUqOieIPeJEgQny4dPqftk3/tcavno0aOTJ0/28/OTyWVc0Jnj4uJcWFRIBrz22mtcDxN89mTCzzq9zmDQl5eXvvzyS//9i8lS//Pn79c/tjijItA/nh+cIg7PVMYVKQsHKQfMU49brx2xTt57pUvdKjb6vJSp+lyxqE36eTFT+JlJP69sLvxsST83MWHo8oU2WePt4vo4xfZyzZ8oqF0gSektFGsc6DxCV4IANAAAAAAAAICV4O4AEHQbADobXZNYlQAAAAAAAAAAYOUQgAa4PfyiJUNXRC7Znjn16biGReaey0RjX3RZss9t3UnBhq/bLwVNGpeEXn9CeP9h90Wfus56z3HKm3YLdjptOi585qzh4aMRK3emzX0xZdyaqJrRAfFF2uBEORuDlnlF8mNyDHNXjDvx9RE2BX1xx44dvRp6GQwGuVyh0+nIE1dX1+LiYvLS1q1bDQa93qD38vIyGA1anTYpKaGp6f5//vNH8ur/Lv710pubqwek+Mfzg5I9wjIVUXmK7AZlw0zV6Cbt6A2qviv5PZbZ1q68p2YZG31eaFO5qEXj0s9LmPRzzQqb2hWXR5/XMM/Jq3lT7BL7O8bUuWSOcK+eL84f5aELdKZzB10PAtAAAAAAAAAAVoK7A0DQbQDobHRNYlUCAAAAAAAAAICVQwAa4Laxd7CJK9JMeix+2TtZ4x6Jqp+v732/+5Q3XVYc4q07Jdxw2qPdGDSXgd5wSrTuuHDVQf6Cj12m/8N+6lt2yz5xfvIbyTNnvR48FLfsnfT7nkkesTSidJBPVK66e4I8OEnpHyv2juJnVQY/sHn5+V+ZKPOf//nzySefzMnJUSqVGo3a1dW1tKyU9L/++utGo1Gn12m12uCQkMlTJh8+fJj0E7v37Rg6qTokVeqf4B6WoYjMVqTWKGsmKEes0ozdqBm4WtRjqX318nuql3WrWNQm+sw1Nv3MFH5ewZR5ZhobgK5jA9DVy22KZtmmDHGIqXNOGcivnCMunyYJSHazd+hGZw26JASgAQAAAAAAAKwEdweAoNsA0NnomsSqBAAAAAAAAAAAK4cANMBtJpA45fb1nPNy6qK3M0auD6ubrx7wAG/mey6rj/A3nBZuON1+NWgagz4pWntMsPxz3pydztPetp/+tt2a/W7PnlE8ezZw/f6kJdvSZz6eOGheWG6DZ3i6MiiBqQbtH+vhGyOsGZj+yttPM9WcL178/vvvV65cERMTY29vX1zCVIB+/fXXNRqNyWwaMLD/Bx+8zyafL5785sic5WNic/X+8fyQNGlEliKxTFE2QjlksXrsBu2QJkndUqeaZd1Iq1hkU95u9Jk0Lvq83KZ25aXoM1f7mXSWzLFNG2kf09MpoY9b8TRRzVxZVIk7T2RHZwq6MASgAQAAAAAAAKwEdweAoNsA0NnomsSqBAAAAAAAAAAAK4cANECnUBp5dZO7L3ozc97r6Y0rA+sWyoc+7jp3l0vTMfcNp0VMDLpNBpprG9h4dNNRwdK9vNnvO01+w272Ow4bv+S/+L3m6a9Dmz5LWbg1bepDCX2mBadXG0NSFEEJiuBEhXeUe3CyfNjkHh/v3cHlmw8fOTxgQP/x48eT559++mmfvn2eefaZ//u//yObv/7r/IObl+dUh/jG8YJSJOGZytgiZf5ARf+56rHrdMPXyhuWuVYv6Vaz7J6qxUzVZ6a1yj2TttimagmTcq5Z0Zx+Jo2NPpPN8gU2WePs4vo4xdS75U8Q1c6XpvUVSTQOdHagy0MAGgAAAAAAAMBKcHcACLoNAJ2NrkmsSgAAAAAAAAAAsHIIQAN0It8oyeBlkcvfzZ71fHK/pb71Sz1Gb3FZtMdt3QnBxtM063ypnbj0nHnphPD+L90Xfeo68x2HKW/azX3f8fHjopfOGZ84Gb1qZ/rcF1MnrI2tHRuYUKILSlIEJSoC46U+Ue4x2Yb7lo/96uQhNgV98bfffiOP//sfUxma9b/Xtz9XOygjIEEQmCgMy1BE5Sozeyl7TVONWqMdtUHVd4V79WLb6qVs9HkBjT63bDT9zBV+XtGce2Zb3WrmsXKxTe4Uu4T+jjH1rhnD3WvmSwtGi40hLnRG4A6BADQAAAAAAACAleDuABB0GwA6G12TWJUAAAAAAAAAAGDlEIAG6FyOTrbRueqJjyQsfy9n6lMJDYvMvVcLJ77msvwAb/0pAVMKumUMmstAc4+nRBvI4zHhygO8BR87T99mP/kNuyW7nJ85LX35nM8jh+NWvJd+37Mpo1dElw3xi87TdE+QBycqAuIkXpG8jPKgNQ8v+OGn72jsmfXx3neHTa4OTZX6xbuHpisishUpNYrq8arhKzRj1msGrBLVLravXnJP9RIm91w+/wrp58Vs9Hk5U+a51pJ+Xs20qqU2hTNtkwc7RNc5pza6V86WVEyXBabwHJ1t6FzAnQMBaAAAAAAAAAArwd0BIOg2AHQ2uiaxKgEAAAAAAAAAwMohAA3QFbi5O2Y3mGe/kLb8vdyxD0X3XKjrt54/fbvzqsO89adFl2LQlgB0y2rQJ0VrvxIs/5w390PnKW/ZTXvLbvVnbi+eVb74XeADB5KXvJ0x64nkIfMj8vt4h2cogxKZGLRfjMg3RljSK+6x59YeOf7FJ3s+mL5wWEyOzi/WPThFEp6pTChTlA5TDlqoGbteO2SNtG6JU/XibtVLu1UstCmbb1O+kE0/WxoXgF5sU9Vc+PlS7We26nPNcpuSObZpI+xjejnH9+aVTBPXzJHHlgvchHb088OdBgFoAAAAAAAAACvB3QEg6DYAdDa6JrEqAQAAAAAAAADAyiEADdB1yHW86vHdl2zLWbwtZ/i6sLqFykGPus3+0GXNV+4buBg0F3rmAtCWxmagyZM1RwRL97rN3uE4+Q27mdvsHzjAf/V77fPfhq79LGXh6+nTHk7sPzM0o9YUmqYISlAEsTHowHiPzIrukVl6nxh+cIo0LEMRU6DI66/sN1s9Zq12WJOi51LX6kXdqpd0q1xkUzaPST9fFn3mmqXwMxt9bln7mTwvnW+TOc4utsEprqdb/niP2gXy9P4eMr0j/cxwZ0IAGgAAAAAAAMBKcHcACLoNAJ2NrkmsSgAAAAAAAAAAsHIIQAN0NV6hkkGLo1e9Xzj/tayBKwLrF0tGPOOy8DPXtScETAzaUgr6hPBSBpprTL9w9Zfuiz51nfmOw6TXbee86/DYEdFr50xPn4hc/VHa/JfSJq6Pq5/YPalMH5IsD0pUBCfJg9KE4UWi8Cx5ZI4io15ZP0U1crV21FpVn+XuNYts2ehzt7L5bOHnBa1bxUKbykU2VUttqpc3R5+5tpp5rFhkkzvZLqG/Y3Sda8ZwYe18eeFYmTHU1camG/2ocMdCABoAAAAAAADASnB3AAi6DQCdja5JrEoAAAAAAAAAALByCEADdEG2tjYRmZrJj6Q27Sy597m0vku9e60Ujn/FZel+t3UnBRu+bhWDtjSahF53TLjqAG/+Lpfp2xwmbrVd9KHTsyclW8/5PH40bvmOtDnPp4xbHdNjgn9mT01Epjy2QpbWX5raQ1E5WjV0qWb0Os2AVR61i+yrl3SrXtytfD4t/FzWNv28yKaqReHnGi76vIppVUttCmbYJg1yiK5zSRnoXjlbVjldHpTOd3CypZ8Q7nAIQAMAAAAAAABYCe4OAEG3AaCz0TWJVQkAAAAAAAAAAFYOAWiALsuV55Dd03v+S7lrPyqb/HhSz4WGPmv5U992Xvklf8Np4YbTbAb6JBN9Xsc2SxJ6w0nRhhOipq8Ey/fz5n7oNOVNuymv267a7fLSt8pXvw98+EDikn+kz30+ZfIDMUMXB/ecrep5r7zvfaoRq9WDVkvrljhXL+5WvaRbxXyb0rls9PnyxqSfF9pULmZSzjVs4Weafmajz9XLbIpn26aNsI+pd45v4JdOk9bOVcZXiXgiO/qp4K6AADQAAAAAAACAleDuABB0GwA6G12TWJUAAAAAAAAAAGDlEIAG6OLkOn712JCV75Su3lE65oGY+oXqgQ+53vu+y/1H+RtO01LQXAD68hg0VyJauOaI+5K9brN3OE5+w3bqm3br9/NfOaN56duQTUfTHt5X2bS9aPpTnqPXKQYuk9Qvcq1eZFO95J6KBWz0mSv83Cb9XLHIpnJJi8LPbKtdxYShyYDMcXZxDY6x9by8seK6hcrM/hKl2Yl+EriLIAANAAAAAAAAYCW4OwAE3QaAzkbXJFYlAAAAAAAAAABYOQSgAe4IpkDx0EUJ6z+qXrGtZOj9YXWLpUOfdJn/iWvTMfd2Y9BcY6tBC9cfF64+5L7oU5d733Oc8pbd4t0uL5yV7vzdd8cf2U+ezFjwrnrk4y71y+1qlnSrWmRTOqf99DNX+LmKiz5bCj+vsKldyTxWLLTJnWyb0N8xuodr5nCP2rnK4nFyc5irjU03+gHg7oIANAAAAAAAAICV4O4AEHQbADobXZNYlQAAAAAAAAAAYOUQgAa4U3S7557IdN20R7If3lO/4JX8gcsDei4XjXnReck+13UnhRtOi9afapGBPk5bc0Fo4dpjwtVfuq864E4e7z/svumkaNtP2td/0i/9zG3Yk93qV3erXGRTtoCNO8+7vLHpZ/Iqk35uE32uXGJTMN02eZB9dJ1Lcn9B1Wxl1SxVcKa7g5Mtd9pwV0IAGgAAAAAAAMBKcHcACLoNAJ2NrkmsSgAAAAAAAAAAsHIIQAPcWdzcHbNq/Za+WvHIZw2zn8vuvdizYQ1/0hvOKw7w1p8SXlYKujkDbWlMQegTTEFo8nzNEff7D/EfPiFcttd16JO2NcuZ0s7VS20qFzNxZxqDZqPPFQuZlPNlhZ/Z6HPVUpui2bZpw+2j650SGtxLpsjr5qsTqsVCuQM9V7h7IQANAAAAAAAAYCW4OwAE3QaAzkbXJFYlAAAAAAAAAABYOQSgAe5EYoVb3dio9TvqH97dMPnRlJ6LdP03us5413n1Ef4GGoNuPwNtaWu/Eqw5LLj/S/6SPa7DnratXdEccV7OJJsr2Bh0+ULmCdlkXmou/FyzkqkDXTrXJnOsXVyDU0wPXt5Yad0CTc4gmdLTmZ4f3O0QgAYAAAAAAACwEtwdAIJuA0Bno2sSqxIAAAAAAAAAAKwcAtAAdy5zoHTEoozHPxuw4YP60Rti6xbJhzzuMucjlzVfuTMZ6FNXKAV9TLjuK+Hao4K1R4XrjwmX7nMb9jRTAfpSmWe2GnTV0uboM9tTs8KmdiXzpGyBTc4k2/j+DtE9XDOHetTOVZVMUHpF8GxsutHTAiuAADQAAAAAAACAleDuABB0GwA6G12TWJUAAAAAAAAAAGDlEIAGuKPZ2NpEpBhmP1r29BdDVm+rHrwypH6px8jnnBbtcV173H3DKeE60toJQAuYx+PC9ccvC0Bflnhu2djaz5WLbQqm2yQNcoju4ZLSX1h5r6r6XnVYjtDJ1ZaeDVgNBKABAAAAAAAArAR3B4Cg2wDQ2eiaxKoEAAAAAAAAAAArhwA0wF3A0dk+u6b76q09nz04dMFLJf2W+vZa5T7hNaeln7utOyFYf5otBd0yAM01NgC9ZJ8rE4BeYVPFBqCZDHSb6DN5qWiWbepwu5h6p4QGQclked08bWIPiUjuQM8ArAwC0AAAAAAAAABWgrsDQNBtAOhsdE1iVQIAAAAAAAAAgJVDABrgruEhc+s5JmHTR4Oe/nzozM05vRYa+q5znbbNadWXvHWnhOtPCrkY9NpjtK07xgag97oOfYrJOlez6WeuCLQlA006S+baZI6xi21wjKnj5Y+R1s3T5g5VqLyc6VHBKiEADQAAAAAAAGAluDsABN0GgM5G1yRWJQAAAAAAAAAAWDkEoAHuMmZ/2ZhFec8dGP3Y7sbxDyTXLVQ0bnKe/aHz/Ufd13Mx6JYZ6OPCxXtdBz/JZJ1p9JlrK2yqltmUzbfJmWgb388hptY1Y7C4dp6mdKLKJ5bfzaYbPRhYKwSgAQAAAAAAAKwEdweAoNsA0NnomsSqBAAAAAAAAAAAK4cANMBdKSzROPexmpePTti4o8/wNZE9FnsMe9pp/m7XpmPu608K15+4VAR68R7XwZtbBKCXM4/li2zyptkkDXKIqnVO6S+qmqWuuVcbnid04dvRA4B1QwAaAAAAAAAAwEpwdwAIug0AnY2uSaxKAAAAAAAAAACwcghAA9yt7B3tcqpD1r8x8LVjk1Zsrem/LKB+ufvYlxyX7Hddd1zAlYImbZElAL2MaRWLbQpn2aQMs4uuc4rrya+YpumzyDutp0KkcKDvC4AANAAAAAAAAIDV4O4AEHQbADobXZNYlQAAAAAAAAAAYOUQgAa4u4nlvJ4jk5/6ZMyLh8bNfbao10JTQ5Pr5DcdVxzgrT8h2HBStHiv6+AnmQB0xWKb4vtsMsbYxvRyjK51yxst77/Mt2KslyHAnb4XQDMEoAEAAAAAAACsBHcHgKDbANDZ6JrEqgQAAAAAAAAAACuHADSANdB5SsYtKn754JRnPh896aG0HvNV/R9wnvWe8+oj/EV7XAY9blM+3yZ7gm18P4fIapeMQeJeCz3r7/UPSZE7ONrRtwBoAQFoAAAAAAAAACvB3QEg6DYAdDa6JrEqAQAAAAAAAADAyiEADWA9wuJNCx7t9ebxGY98OGhkU0ztAsnQJ53GveRQvcQ+aZB9VI1zUh9h7Wxjv0WBiWU6N4Ej3Q2gDQSgAQAAAAAAAKwEdweAoNsA0NnomsSqBAAAAAAAAAAAK4cANIBVcXK2zy4PfeCNoW+emNn0dsPA5YElUzwS+7nF9eSXTdH0XxpQMNBTruXR0QBXgAA0AAAAAAAAgJXg7gAQdBsAOhtdk1iVAAAAAAAAAABg5RCABrBC7kKX+hGpz+2e/PTnw/osNRdNlPZb4ls13tcrVExHAFwVAtAAAAAAAAAAVoK7A0DQbQDobHRNYlUCAAAAAAAAAICVQwAawGrJ1R71Y2L6rdCXTVAFxMjs7GzpCwDXggA0AAAAAAAAgJXg7gAQdBsAOhtdk1iVAAAAAAAAAABg5RCABgCA64UANAAAAAAAAICV4O4AEHQbADobXZNYlQAAAAAAAAAAYOUQgAYAgOuFADQAAAAAAACAleDuABB0GwA6G12TWJUAAAAAAAAAAGDlEIAGAIDrhQA0AAAAAAAAgJXg7gAQdBsAOhtdk1iVAAAAAAAAAABg5RCABgCA64UANAAAAAAAAICV4O4AEHQbADobXZNYlQAAAAAAAAAAYOUQgAYAgOuFADQAAAAAAACAleDuABB0GwA6G12TWJUAAAAAAAAAAGDlEIAGAIDrhQA0AAAAAAAAgJXg7gAQdBsAOhtdk1iVAAAAAAAAAABg5RCABgCA64UANAAAAAAAAICV4O4AEHQbADobXZNYlQAAAAAAAAAAYOUQgAYAgOuFADQAAAAAAACAleDuABB0GwA6G12TWJUAAAAAAAAAAGDlEIAGAIDrhQA0AAAAAAAAgJXg7gAQdBsAOhtdk1iVAAAAAAAAAABg5RCABgCA64UANAAAAAAAAICV4O4AEHQbADobXZNYlQAAAAAAAAAAYOUQgAYAgOuFADQAAAAAAACAleDuABB0GwA6G12TWJUAAAAAAAAAAGDlEIAGAIDrNWzYMO67Q6fT0S4AAAAAAAAAuBtxdwAIug0AnY2uSaxKAAAAAAAAAACwcghAAwDA9cJ3BwAAAAAAAMBdKTU1NfNy3B0Agm43IyPpPgBwe9E1iQA0AAAAAAAAAABYOYTYAADgeuG7AwAAAAAAAOCuVFRUxP0r/zWRkXQfALi96CJEABoAAAAAAAAAAKwcQmwAAHC98N0BAAAAAAAAcFfi8Xjz58/n/q3/KsgYMpLuAwC3F12HCEADAAAAAAAAAICVQ4gNAACuF747AAAAAAAAAO5WHSkCjfLPAJ2IrkMEoAEAAAAAAAAAwMohxAYAANcL3x0AAAAAAAAAd6trFoFG+WeAzkWXIgLQAAAAAAAAAABg5RBiAwCA64XvDgAAAAAAAIC72NWLQKP8M0DnoksRAWgAAAAAAAAAALByCLEBAMD1wncHAAAAAAAAwF3sKkWgUf4ZoNPR1YgANAAAAAAAAAAAWDmE2AAA4HrhuwMAAAAAAADg7nalItAo/wzQ6ehqRAAaAAAAAAAAAACsHEJsAABwvfDdAQAAAAAAAHB3a7cINMo/A3QFdEEiAA0AAAAAAAAAAFYOITYAALhe+O4AAAAAAAAAuOu1LQKN8s8AXQFdkAhAAwAAAAAAAACAlUOIDQAArhe+OwAAAAAAAADueq2KQKP8M0AXQdckAtAAAAAAAAAAAGDlEGKDu9V21sSJE+k2ANw8+O4AAAAAAAAAsAYti0Cj/DNAF0HXJALQAAAAAAAAAABg5RBigy6uoaFh69atJ06cuNjs0KFDpKe6upqOuAJu8EMPPUS3O+yGd+w6yKRx+e9WNm/ePHPmzOLi4ujoaDoUWrgLfvS3Db47AAAAAAAAAKyBpQg0yj8DdB3cfTmCbgMAAAAAAAAAAFgnhNigy8rOzj579iyXSW3XiRMnkpOT6eg2uDF3aAA6ODh4JksgENCu60F25D7F1ZHPeGPvf3V/8+RvhQ6ekmVa6DZcGb47AAAAAAAAAKwEVwQa5Z8Bug7uvhxBtwEAAAAAAAAAAKwTQmzQNY0cOZJLoxJ79uzhShcnJyeTR/L80KFD3EsXLlxobGyk+1yOG3CHBqAbGhq409Dr9bTrepBZ4nbfuXMnLf7cjPRwL3HOnj2bnZ1Nd7tJ/ubJ3wodPCVuDALQHYHvDgAAAAAAAAArwePxZs+ejfLPAF0Hd1+OoNsAAAAAAAAAAADWCSE26IKys7O5KOqFCxdGjhxJey9nyfgS7UZ4uZfu0DDrzQpAX2l30k9mhhtDXClEfmPu3AA0dBy+OwAAAAAAAACsh1KppM8AoAvg7ssRdBsAAAAAAAAAAMA6IcQGXY1AIDh79uxFNv0cHR1Ne9uTnJxMxpCRJ06ccHJyor3N2LwrAtBX2z07O/v8+fNkGHmUy+W0929DANoa4LsDAAAAAAAAAACgU2Q2o9sAAAAAAAAAAADWCSE26Gos4d1ly5bRrisjY7jBbWsYc/0IQNOuK7Ac6CZOFALQ1gDfHQAAAAAAAAAAAAAAAAAAAAAAANBpEGKDrmbnzp0X2fLPHalJTMZwRaC3b99Ou5qxeVea6yXDGhsbyZgTJ06cPXuWPJk4ceKV3n8mq7i4mG63UV1dvWXLFu48ySN5Tnroa1eWnZ29efNmcmhywuQ0uHMQCAT0ZdbIkSO5o5P35M5/2bJlXA+noaGBDr0qMpLbvSN53z179nCDfXx8aNflOvh5b/jku858cp1X+dFbDkre6tChQ+QJOcTVf5GCg4PJc3Ji5PTIePLrd6WzvbPguwMAAAAAAAAAAAAAAAAAAAAAAAA6DUJs0KXI5XIuqNrxgsRkJLdLqxwq10leTU5OPnv2LLfZ0oULF9oN2nKvtnsCer3+0KFD3IBWSP+VAsRkLy7d29b58+ejo6PpuHvuOXHiBH3hCjo4LTOvJwCdnZ3NDW47G9f1eW/g5LvafLbbySG/XVc66NV/kRoaGsgJt3sm5NeSTD4dfafBdwcAAAAAAAAAAAAAAAAAAAAAAAB0GoTYoEtJTk7msqEjR46kXdcyceJEbheyL+1icZ3bt28/f/4892TmzJnZ2dlkfFNTE/cq0bYsMdffblqXeyti8+bNjY2N5Ijk0fJu5FUyho5uJpfLLXsdOnSInEN1dTX5dFu3buVqV5NHrkgwcc2Kxa0+45WQkdzubc+nLR8fH24wmRnaxbrez3u9J98F55Mb0/ZHTw5qSTBzBy0uLiZvTkZyByXIJh3dzNLP1dgmj/PmzSO/gWR3crbcq2T3VsH9OwW+OwAAAAAAAAAAAAAAAAAAAAAAAKDTIMQGXUpDQwMXDC0uLqZd11JdXc3t0qoKL9fJaRtOjY6O5spCnz9/vlUCldulbQp2+/btpP/ChQttzy04OJhL5W7ZsoV2NeP2IlrFiwmyFxefbXssyzx0JMHc1szrCUAT3OBWp3Fjn5fo4Ml3wfnkxrTdffPmzdxLbQ/q4+PD5ZvJockJ0F4Wtwv3QchPhPY2I7+T3IBly5bRrjsKvjsAAAAAAAAAAAAAAAAAAAAAAACg0yDEBl3KxOZyzj4+PrTrWpKbi0a3quXMdRLz5s2jXZezJKdbpVq5zlYp2OjoaK7/SnFVS561ZcTWslfbTC2HKyTs5OREt5vd5gA0V954+/btdPtGPy+nIyffNeeTG9PqzS0VsttNexPBwcHcgFY7cp3ElX4DueT02bNn6fYdBd8dAAAAcKdwdnYmV/4ffbSTXH3169fP3d2dvgAAAAAAAAAAAAAAAAAAAHcuhNigS7ne5C5x9QD0hQsX2sZhLQ4dOkTG7Ny5k26zuB1bhVnnzZvH9QsEAtp1Oblczg1oGae27NWqyPQ1dXoA+sY+L6cjJ98155Mbc6Uf/VUO2tTURAa0+mXj9iKutKPlx3SlSejK8N0BAAAAd4Ty8vL333+fu+jifPbZp7169bKzs6MjAAAAAAAAAAAAAAAAAADgToQQG3QpN70CdMtQb1ubN28mYy5cuEC3WdyOrVKwW7duJZ2HDh2i2+05f/48GTOvRblfbq8bKPHb6QHoG/u8nI6cfNecT25Muz/6qx/UUq+65e8t13OVHS1nFR0dTbvuHPjuAAAAgC4uOjrqueee/fPPP8nl1l//++9HH+/c/s7bv/7rF+4C7PXXX09NTaVDAQAAAAAAAAAAAAAAAADgjoMQG3QplkhodnY27bqW6upqbhfyhHaxuM7NmzfT7fZYivu2LMHL9bRKwe7Zs4d0nj9/fvuVXbhwodWO3F6tKkx3xG0OQHNn3nKubuzzcjpy8l1zPrkx7f7or37Q4uJibt/k5GTa1fxuW7ZsodttWM6q5V53Cnx3AAAAQJdlMBiWLl3666+/ctdaH+36cGDjALlC5urmkpWT8fwLz/7v4l+k/z//+c+GDev9/PzobgAAAAAAAAAAAAAAAAAAcAdBiA26FEs555EjR9Kua7EUjW6VIuU628ZzW2o3KMz1tNqRq5HcES135Pa6+jm063YGoMkYbjDZi3bd6OfldOTku+Z8cmNavX9HDmr5vW0bgL7KjghAAwAAANxcPB5v2LChx48f466yjn51ZOq0yUFBgXK53GQy6fU6Ho8v8hBV96jc8cG73JgzZ86Qf6EQCoX0LQAAAAAAAAAAAAAAAAAA4I6AEBt0KZYw7rJly2jXtTQ1NXG7tMq2cp1XrwBtCQrL5XLadYXcKlcGmDwmX4uPjw/dp3mvrVu30u0Ou50B6OzsbG5wyxLaN/Z5OR05+a45n9yYVj/6Q4cOkc6rH9Qyh+SEaRcC0AAAAAC3V15e3rvv0ljz9z98t2r1ipjYaJVa5enpGRUZlZaelpWdFZ8QZ/b05PP5ao1q5Ohhhw4f5Mbv3r27qqrK1taWvhcAAAAAAAAAAAAAAAAA3BTd7rnHx9VtpU/gQi9/nbML7QW4GRBig66Gy5uePXvWycmJdl0ZGUNGkvE7d+6kXc3YJEM7/S099NBD3DC6zeJ6WuVWt2zZQjrJudHtjrmxvYjbGYDmTpKIjo6mXX/jzImOnHzXnE9uTKsf/fbt20nniRMn6HZ7GhsbuX1bxrW5HgSgAQAAAG617t27P/bYY3/++Se5svrPn//3zLNP5uXnqtQqo9EYGhqanJKcl5dXzCoqLszOySbXveSy0MXV1TfAZ9HS+T/88xx3VUauNmNiYuibAgAAAAAAAAAAAAAAAMDf0e2ee5SOTiO1xj3RST8k5ZxLyt4ZmTBArZPYO9ARAH8PQmzQ1cybN4/LH4wcOZJ2XZll8MSJE2lXM67/7NmzdLs9O3fuJGNaBWq5HVvlVrkDXbhwgW53jGWvjoS5W7JEY9vWV+6Ijgegi4uLuZFbtmyhXawb+7ycjpx815xPbkyrH72lxPhVDsqdGCEQCGgXAtAAAAAAt55SqZw1a9aPP/7IXVbt+ODdXr17Go0GjUYd2D0wIT4uKzuroLCgqLiIXPeWcMpKikqKMrMzwsLDFQoFj++WkBT3xFOP/efPP8g7/Otf/1qyZInBYKAHAAAAAAAAAAAAAAAAAIAbILCzL5Mqt4XG/jMp+9fk3PNJOeeTc35Lzj2XlP1qcFSeh4xvZ0eHAtwohNigq5HL5efPn7/IZpevnt/18fG5cOECN5LsRXubMQkIVkNDA+26XHJyMjdg3rx5tIvFdbbKrVqyqtXV1bSrjbbnQAZze10pzC0QCNruRVhyydnZ2bTrenQwAE0m8MSJE2QYmcZWI2/s83I6cvJdcz65Ma1+9Ff6PbEgR+R+Y7du3Uq7WNxeCEADAAAA3Ar29na9e/fev38/d0F18MsD4yeO8/XzVSpVvr4+0dFR6enpeXl5BQUFhUWFRcWF5JFmoEtLSstKSstLiouL0tPTgoKCxGKxUCQoqyj+x7tvc+929OjRIUOGuLjg/4ALAAAAAAAAAAAAAOBmeG+EJ9otajtGeL4z3PPBei2da4AuwM3WLkEgetw/9LuErF+Tc0g7Fpu2OSD06cCwU/Hpvybn/pKccyYhc6NfcARf4GJjS3cDuH4IsUEXZAmGnj9/vri4mPZejozh0s8EeU57W+BeIs6ePdu27q9cLj906BA3IDg4mPayuM62udU9e/aQ/nbD1gQZT862sbGRbjfjikyTU42OjqZdzZycnMh7kpdmzpxJu5qRE2bP4uKyZcto1/XoSAB64sSJlglsewLEjX1eooMn3wXnkxvT9kd/9YNu3ryZ27HV7yrX2fbdLBCABgAAALgx5PJp69at3KXUuR++W7Z8SWR0pEKpMJvN4eHh5NXs7Jy8/Lz8gvwCViHBxKC5OtA0Bl1eUUZaQWFBcnKSj6+vu7u7Sq0cPnLIwS8/59753Xffzc3NpYcEAAAAAAAAAAAAAIAbdmS6H2lHZ/idutcf7Sa2k/f6fzXT78tpfi8PMNK5BuhUDjY2gW68hWa/E3FpPyfn/JaS821CxmshURUypV23bs62tr0Vmm2hMd8lZv4rJefn5Owjcakzjd7eLm623brRtwC4HgixQde0bNkyLnZAbN++febMmcXFxcnJydXV1eQ5F0jlXKkuL/cqeZ/z589fuHCBDCO7Ozk5kceJEyeSTm5A2925/ra51ezsbO4lsm9DQwMXm9br9eSUtmzZwr3UNnpLhllyxk1NTeTocrmcdI4cOdLyKdqNEXP5YILsRQ5NdiRaZbWvhJwGty/5+OR5S2QyLclvgpwbmQ262+Vu7PNyOnLyXXA+uQFtf/Q+zbXGCe6gAoGA7EtO2zKZbfe6Ur8FAtAAAAAA14tcmJHrsf/7v/8jF1H/958/nnxqc3ZOplKlJJeRQUFBCQnxmZmZObm5eXm5TAA63xKBLigoZEpBk1ZSUlzMZqBLy0rLK8oqKivKy8vIuPj4eJPJxOO5+fh7zV8099yPZ8kh/vrrr02bNoWEhNDDAwAAAAAAAAAAAADADTg63e+rGX6HpvruGOmJdhPbzjFeXLj8FQSgoQvQOTkP0xj2RCX+nJz9W0rOD0lZH4THjdYaPewd6AiW0tFpmsHr48iEf7LDfkrO/ig8vp9KS/rpCIAOQ4gNuqzq6mpLTLldZ8+evVJ9aIIb09DQEB0dbUmvttLU1OTk1PqfnNxL7eZWybtd5ZTIq3Tc5bKzs8mp0kFtXCnAHRwc3PZY27dvpy9f1czmAPTVbd269Solookb+7xEB0++q80n19nuj578Fl3loMuWLbuuXyQO+YDcGASgAQAAAK5JIBCMHTv222+/5a6g3nn3Hz3qanQ6rUqt8g8IiImJTktLzc7JysnNzsnNyc3LJY3NQDONRqA5xYXFxUVcHejSMqYOdGVlRWVVZXl5OdklOiZarVHz+LzY+KhHn3j4P38ySetz587NmDFDIpHQUwEAAAAAAAAAAAAAgOtyZJrviZl+rzUa1QJ7Oc9O6W6P9vebnG8fZ3T9aIzX8Rl+Lw8w0LkG6AxSB8cKqfKN4KjzSdm/JuecT8zeF5m0yOzn7eJGR7QR7Ma/3zvwQHTyL+wu/0zKfqF7RJ5Y6mFvT0cAdABCbNCVOTk5NTY2bt++nUs5WJCehoaGtpHTlsgYIjs7mzyPjo62FBXmbN68+UrhaW7AlXKrcrmc7NuyBDVBeq6eYRUIBE1NTeR8WkaxO7IXV7PZYtmyZfS1qyKTQ3dog3wu8p7kuD4+PnT0Vd3Y5yU6ePJdaj65ziuVxCanSl46ceIEPR5bP5vM55UOevV3I8gvJzemVSHqOwK+OwAAAOC26datW3l5+a5du7hrsC8Ofj567ChvXy+lUuHl7RUeEZ6cnJSRmZGVnZVNWk42aWwGmolB5+XnMTHo5kLQTAC6qLComLSiEiYBXVJaztSBriSqKquqKkvLSsmbhIWFyuUykVhUUl64bfub3HH37/+8Z8+e9rjlAgAAAAAAAAAAAABwvQ5P8z0xy29LP4R0bzKz2PH9UZ7HZ/q9hAA0dBK+nV2K0ONhv+BzCZm/JGX/kpxzNCblId+gRIEHHXFV2R6SJwNCT8Sl/pqcQ3Y/E5+xxicw2l3oYmtLRwBcFUJsAK1w+YarFO4FAHx3AAAAwO0RFRX17LPPcpfo333/3eIlC8MjwmRymclkCg4Ojk+IT0tPy8jMyCSyMjOzM7Oys5gkdMsYdH5uXn7uZXWgi7gYdFFxcTGTgWbqQJdXVlZUVVdWVVeRVlpWSt6ze/dAkUioUCkGD2v84uA+7hxee/W1a/6ngAAAAAAAAAAAAAAAcJnDU5kK0C/0M9h0oz1wU3hJHN8f6Xl8BgLQ0AnsunULduPPNfoci039JZmp4vxNfPoLQRE1cqX99Sx1F1vbvkrN1uCoswkZvyVnk7c6FJ0yRe/p53rF6tEAFgixAbTk5OTEJRs6WGsZwDrhuwMAAABuNb1ev3Dhwt9++41cnP/7wr8f3/xoWkaaQqnQarWBgYExMdEpKcnpREZ6BsFloDMzs1jZBBuA5lpeexno5jrQbAa6vLSioqyisqKqqrK6urqmhjxUlZaWpKSmePl4uwvcfXw95yy49/tzZ8nJ/PHHH6tWrfLy8qInCgAAAAAAAAAAAAAAV/flFN/jM/y29NMjAH1zeUkcd4zwPDbd78X+CEDDbWV2dhmm0X8SEf9LYvZvSdk/Jmb+IyRmlMYotXekI66T1sl5it7z/bDYnxIyyRv+nJi9Iyymr1Krc3KmIwDagxAbQEvZ2dls/vniyJEjaRcAtIHvDgAAALh1nJ2dBw0adOTIEe7K/K1tb1bXVmk0arVa5evrGxERnpiYmJqamsZiMtDpbAY6g2agCTYETetAW0pBN2eg82kMujkDXVxSXFxaXFpeWl5RXlFZUVlVUc2EoKtra2vIIxmQkJhgNBnd3fnRcZEPP/bA//35BzmrkydPjhkzhs/n05MGAAC4TvdXql8eaHyt0fgq2i1rdK4BrgqL8TY0OtcAAAAAAGDNvpzic3y675a+CEDfZGwA2nxsuu+L/fW0C+AWkzs4VskUrwRF/JzEJJV/Scz6NCJhvsnH/2YUbA7nuy/39N8flfhrUhZ5858SM58JCC2SyDzs7ekIgMshxAZgkZ2dvXPnTi5mERwcTHsBoA18dwAAAMAtkpOTvX37du6afP/n+0aOGu7l7SmTy728PENCQ+Li4pKTk1ObpaWlpqWnpaenZXB1oJsz0GwZaFoHmglA5+WQlptnqQPNZqALCwqLCpgANNOKS0qLy5g60BVsHeiqquqqmpqa2tqaHj16VFdXFxQVxMTGqFQqD7GoqLTgzbe3cmdI/vWhpKTExsaGnj0AAECHvTzAeGia39EZfidm+Z+8F+1mtiPT/Q6zjc41wFVhMd66hsUIAAAAAACXHJrsc2ya75Y+CEDfZF4Sx/eGm7+a5vtiXwSg4ZZztbXNEIk3+HT/Pj791ySm8PPhmOT1PoFpQg864ibJF0s3+QUdj0n5V2IWOdA3cWkrPP0TBSJH/G9y0AZCbABEQ0MDl2DgLFu2jL4AAO3BdwcAAADcdMHBQQ8//PBff/1FLsjPnP1m/sK5IaHBMpnMYNB37x4YHR2VmJiQlJyUnJycwkhOSU0hLTWNxqAz2Bh05qVC0JdS0EwMOpeJQVsy0DQGXVhQUMSUgmYi0CVMBrq8vLS8nKkDXVVZVUkz0LU9evSoq6+rqa3Jy88LDw+TyaVKtaJxSP/PD+zl/vXhqaeejoyMpB8DAACgY14dYDw63e/IdL+Pxnh9OBrt5rQP2MfD0/yOzfD7agYyl9AhWIy3omExAgAAAABAa4cmMQHo5xGAvtloAHqq7wt9EICGWyuS5z7H5HU0OunXxKzfErO+iUt/yj+0WqZ0tLGlI24qnp1db7n6pcDw7+LTyeHIQb+ITJyiNwe54f+eFS6DEBsAYQlAnzhxYuLEibQXAK4A3x0AAABwE0kkkunTp587d45ckF/4498Pb3ooJS1ZKpdptFp/f/+IiIj4+LjExITEpETSkpKSkpkYdBKXgU5NY1paeippzaWg0zMzmRQ0l4AmLAFoNgOdk5fHZaDz8wvy2QB0QVFRIVMKuqS4tKykvLysvILJQFdWVVZVV1XXVNf2qO1R16O+Z33PXj3JZk5OTlBQkIfYw8vXc/a8md+d+5ac9j//+c958+YpFAr6kQAAAK7l5QGG4zP9PhzjGWt0NUscvdBuRjOJHXxlju+N9Dx1r9+R6b50rgGuCovxVjQsRgAAAAAAaO3gJJ+vpvo+3xsB6JvMU+L47jDzUQSg4VbydHEdodbvDIv9NTHzt6SsnxIy3gqOHK7WKxwd6YhbxuTsMkFrfC8k+nxC5m+JWT8nZv4jJGqgUqNzcqYjwOohxAYAANcL3x0AAABwU9jb2fWsr9+3bx/7XyNefOOtrRVVZWqNSqlUenl7hYSExMTExCfEk5aQmEAaUwQ6KTEpOSkpJTk5JblFBpoJQDMZ6EsBaC4DnZmVnZWVk5Wdy2agaR3o5gz0pSLQ7WSgKwlLBrqWZqB7NfQijXRmZGT4+vqKPETRcZEPPrLhP//9g5z/oUOHBgwY4OTkRD8eAADAlb3EZi7fG+kp59vTLrgZut1zz9tDTafu9T88DZlL6BAsxlsEixEAAAAAAC5zcKL3V1N9EIC+6ZgA9FDT0Sk+WxCAhltAau9YJ1e9EBj+U3wGW4Y585PwuFlGz9tchjmaL1hg8tkXGf9bIhOD/jEufbN/SLlEIbDD3RxAiA0AAK4bvjsAAADg70tOTn711Ve56PPefXuGDh9iNBulUqmn2dy9e/fIqMi42Li4+Nj4ePIYF08kxCcQbCnoJKYQNNOSuSQ0G4PmMtBpTB1ophQ0k4HOIq1NBjo3O4/NQOfl5+YXsHWgC/MLC2kGuqikqKSsuKystKyirKKiorKystqSge7BZKAbGnr17t27V0PPisqK1JQUo9EolngUFudtfYt+lm3btmVmZtIPCQAAcAVM5nKG33sjPJXuuEt/M9nadHt7iOnULP/DU5G5hA7BYrxFsBgBAAAAAOAyX0zwPjLZ57lrBaDdnWw1AnuVe5doSr49z9GWnllXxQWgD0/2eR4BaLipHG1sckXS9d7dv41N+y0h69eEzCNRSas8/dOEHnTE7dWt2z25YskGn8AT0Sm/kvNJzDoZk7rKizkfW/IaWDGE2AAA4HrhuwMAAAD+Di8vr9WrV//xB1M1+dsz38yZNzsoqLtUJtXpdf4B/uHhYdEx0bEcJgTNukIG2hKATmHqQKeksaWg05kAdFpGZnMGOjszK4fNQOdkcQHo5gx0Tl5+Xj7BZqALmjPQxaVFpWUlZWVl5VwGmq0DXcNmoGt71HJ1oHv36d2nb5+G3g3lFeXkzFRqtUqjHDCo7+cH9pIP9eeff65fv97Pz49+YAAAgDZe7G84Nt3v3eHIXN5kdjbd3hpiOjnT/8spyFxCh2Ax3iJYjAAAAAAAcBkagG64RgC6PEiwqUbbVK7u9LauQr26VFXgf1vL3N4AT4njO2wA+rneCEDDTRPFF8wxeh2MTPwtIfO3hKyzsalP+AdXSRVutnZ0RCcR2dn3lKu3BIT9EJ/2a0Imafsi4qfrzcG3tyI1dCkIsQEAwPXCdwcAAADcGB6PN3bs2FOnTl28ePHChd8ffGhDUlKCVCbVaDQ+Pj4hoSGRUZExMdHRbIuJiaEp6LYZ6ISERNbldaCT2Rg0Vwc6lasDzcSg2Qx0Zg4Tg85ujkHnkpaXzdWBZmLQBaQ1l4KmGejSMiYEXVZRUV5RWVFVVVVdXc3EoFtkoPv269u/f7+GhobikmJy5jK5zMvHPOu+aWe//5Z8wG+++Wby5ClCoZB+eAAAgBZe7K8/Nt333eFmZC5vrubMpd+XU3xoF8BVYTHeIliMAAAAAABwmS/GdygAPTVD9s/7Ao5P8fl6uu/ZmX5nOqmRo5+a7vflRO/RyeIuXlqWCUAPMR2ehAA03BxmZ9cxGsOOkJjzCRm/JGSej894MyhykEqrdXKiI7oAT2fXUWr9eyFR5CR/Tcj8Z3z620GRQ1U6jaMzHQHWBCE2AAC4XvjuAAAAgOtlY2NTWlr60UcfXWRtff3V0vJipUopl8s9vTwDuweGR4RHNYtmxbBaZqCZALQlA53IZKBpHWgiJTmZDUCTdlkd6Iz09PTM9LTs9PScjIzsLPJXTlZ2bssMdA6Xgc6jGeiCwqLCwuJCJgNdWlJaVlrOZKDZOtBVldXVVTW1NbU9auvq63r16tW7d+++ffsMYPTv2asn2TcoKEgqlUTHRm54cN1//vt/5JN+9tmempoae3vkaQAA4DIv9tV/Nc33nWHIXN5kdjbd3hxsOjHD79BkZC6hQ7AYbxEsRgAAAAAAuMznY70OT/R+tpfu6gHo8SmS09N894/1fL2/4fEe2qfqO6e9McDwxXivPaM9h8Z7dPkAtMP2QcYvJzBzS7sAbojQ3r6PXP1iYNj3sWm/MunnjN1hsZN1pqCuWlw5ki+41+D5eUQCOdvfEjLOxKQ+6RdSI1W62tjSEWAdEGIDAIDrhe8OAAAAuC5RUVFPP/00F33+bM+ng4c0Gox6qUxmMBgC/P3DwkIjIiMiOUz+OZJLQDNloGOiY5kINPk7hgtBx3N1oOMv1YHmMtBJKWwd6FSmpTIZaNLSUlPS0zNSc0rjCuoji3pF5VfFZRekZWVnk8bGoLOZGHRedl5uTm6LGHQBF4NukYEuKy8tLy+vqCyvrK5gK0FX19bW1NXX9ezVs3dDQ5++ffoP6D+wccCAgQPq6+tzcnJ8fXxkcml+Ue4bb7/GfeqXXnqJnDOdDgAAgHvueaGP/qupvu8MRebyJmMyl4NMJ6b7HZqEzCV0CBbjLYLFCAAAAAAAl2EC0BO8n+lAAPrr6b57RnsOjBF5Sxz9Zbe7+bGPg2I9yDnsG+N1BwSgxc0B6J4IQMMNsr3nngIP6QPeAaeik39jo8/HopJWmH1TBCIbOqSLcrCxyRGJ13n5n45O/iU+49eEjKNRSWs8/TKEYjoCrABCbAAAcL3w3QEAAAAdpFQq58+ff/78+YsXL37z7df33jcrMDBALBbr9DpfX9/g4ODw8PCIZjQDzaWgo6OimWapA83koOPimBQ0zUBb6kAnNWegk2kGOiU1hUhNSynoGd5zttegDbqRT6rGPKMZvdk8tMm/fkJUYXVaVi5XB5ppuXlMDJrNQOeRln8pA11QVFJYUlpSWlpaRpSXlVeWV1ZWVlVV1dRcykD3aujVp2/v/v37Dxw4cNCgQQMGDqir65Geka436NVaZf/GPvv2f0Y+/s8//7xs2TKtVkunBgAArNsLffRHp/puH2pWIHN5U9nZdHtjkOn4dL+DyFxCx2Ax3iJYjAAAAAAAcJl9Y7wOjfd+puc1AtDjkpkK0J+N8sr05tGuzpDtw9s9kg1Ax90BAehtjcaD4xGAhhsUyXdfZPLZFxH/c3zGzwkZ38WkPu4XXCKRCezs6IguT2rvUCNVbgkI/SE2lXyE8/Hpu8NiZxvM3d068x8jcNsgxAYAANcL3x0AAABwTc7OzgMHDjxy5PDFixf/feH3DQ+sj0+Ik8qkKqXK08uze/fAsLCw8GYREWwMmqkDzTSmCDRTB5rNQMdExcQwMejmDHSLOtBtMtBMAJq05JSM7JSqsQFDHlFNeFM8+xPJwgPypYeViw+pF+wxz30veMqT8fWjsrPyMy9loHOzc5k60LmkNWegC5gMdBGbgS4pLi0r4TLQFRXlFZUVVWwh6Nra2rq6Hj171TMZ6D69+/XrO2DAgEGDBg0eMnhg48Dq2mpyfmq12tvXc8asqd+dO0Om4tixY8OHD3dzc6PTBAAA1mpLH/3RKT7bh5gUfGQubyY7m3veaDQen+Z7cKI37QK4KizGWwSLEQAAAAAALrNvtNehcd5P12uvHYCewgSg8/34tKszFPrzd4/w3DvqDglADzQeHIcANFw3nZPzBI3xvZCoH2LTzsel/xSX9nZQZD+FhvTTEXcUL2eXoSrt+yHR5LP8HJf+fWzKW90jRqj0cgdHOgLuUgixAXS6GTNmXGRduHDhSgXhXF1dz507xw0bPXo07W1WX1+/d+/e33//nRtAHD16tKmpKSwsjI643ObNm7lhDzzwAO3qmI4fqOUJ79ixg/a20ZHPDl0QvjsAAADg6rKzs9/Zvp270nv1tZeLigvlCplcLjeZTP7+/iEhIeQCkhXKtPCwcNIiwklrHYOOtsSgo2NiSWNj0Ewd6Ng4JgPNxKATEuKZDHRiQlJyYlJKUmJiUmZ6Zr+ZkSOfVk/ZLl54ULL6tHTtGdn6s6TJ136ruf+4//oj6Wt2FfccU5CZm5lFWk5Wdg6XhG4Zg87NZ5LQTClocv7FJcUlpSWklZVzMeiKysqKqmqmFHSPulpyndyzV8+G3g19mQx0/4GNA4cMGTx0+ND+AwdWVlaSz0I+fmR0+MYH1/3nv/9H5uTDDz8sLCzs1q2L3zcFAIBb6Pk++sOTfbYNRubyJmMylwONX031/WICMpfQIViMtwgWIwAAAAAAXGbvaM+D47w6EoA+NcXn05Ge+b6dWbq1wJ//yQjznlGeQ2K7egDaLHZ4e6DhwDivZ+qRuYGO4tna9ZGpXg4I/SY6+Zf49J/j0vaGxU3UGAJd7/iSyaFu/Fl688Hw+PNx6b/EpZ+KTn7WL7hWonCysaEj4K6DEBtAp3NwcNi1axeXDrlSVtgSWW41IDQ09IsvvuBeale7EecbCEDfwIHILpaodNvQNnHNAdBl4bsDAAAAriQgIODBBx/873//S67xPtvz6cDG/gaDXiKR6PV6X1/foKAgchHICgkNC+Vamwx0eEQkG4NurgPNZaDZOtA0A80EoC0ZaCYAzWagkxMSEhOjQ5IreieMedo86W35vP3iFScFTWcEG86KNp712HBWsP6saP1Z9YavIx89VTjj6ZyskvTMrMys7MysnEwmA83GoNvJQBflFxUXFJcUFZcUl5aWlJaVlrOloCurKplS0DVVPXr0qKuv69mzJ1MKum+f/v36DRg4YNDgQUOHDRs6fFi/Af2Lioq7d++uVMnzCnO2vvkKmZy//vrrscceIxNCJw4AAKzMc72Rubwl7GzueR2ZS7geWIy3CBYjAAAAAABcZu8oz4NjvZ6qu0YAemyS5ORkn09HmPM6PQA93LxnpOfgOyIAPcBwYKzXM/Ua2gVwVfkekke9ux+NTPyFrfp8PCppuck3zl3o0O0uiQi72NqmCkRrvfy/jkr+ma0GfSgiYYNXQKrAg46AuwtCbABdQXFxMRsDvvjnn38WFBTQ3mahzUHhVq+SvSwB4tdffz2suQyzg4NDnz59LC+1DVVfbwD6hg90lQLPHYl9Q5eF7w4AAABoy8PDY9q0aWfPniUXeN98+/W9s2f6B/iJxWJyHejl5RUYGBgSEhzC/E0eg0NCQ7jWnIEOCwtnWjjRXAe6OQYd0aYONBuDjqMxaDYDHZeQyPwZFZIY1j2iZIx++LPyGR96LD4sfOCM9sHvNGwAWrjpe/Wj35PnHmvP6NcejZvzRnxh7+jkpNRMgotBs42JQedk5+Tm5uQxSeg8oiAvvzC/sKigqKiouLiohIlBl5aVlZZXlHOloKtrqmt71NbV1TGloBt69e7TmysF3djYOHjokGEjhg8dPqx3nz7kLclUaHXqfo19932+h0zU999/P3v2bKlUSicRAACsBpO5nOSzrRGZy5uMyVz2N341xfeL8chcQodgMd4iWIwAAAAAAHCZPSM9D4zxerJHBwLQk3x2D+/sALQf/+Nh5s9GeA6OuQMC0G/1N3wxxuvpOgSg4RpC3fjLTD6fhcb+Mzb1p7i0s9HJT/kGFXhIRXZ34T0RmYNDuVj+UkDoOfJhY1N/iEn9OCR6nsHLz8WNjoC7BUJsAF3ElWo8E+3mlV1dXc+dO8f1t1s+uWXCuFXQ+boC0H/nQFdJOV8lGw1dH747AAAAoCVy1dejR499+/aRq7s//rjwwIMb4xPiJBKJUqn09PT09/cPDg4KCW5GnrFJaBqAJsLYB0sGmtaBbg5AE1GRkWwGmolB0zrQ0bGWDHR8LDkc+TM6LD7IJ8IvVFs8VTL0OcG0j1xWHpPv/m3YP87XrDsrfOpcwIFfF+3+ZcyD38nWnPFY+ZX3nO3BJYODo+Ni09LSMtIzMjIzuBh0NmlMKejsnNwc0nLzcvKYatB5+YV5hUwp6CLSSkqKS9hS0GXlZeUV5ZWVFVXVlTW11T161Paor+vZq2dDQ6++ffv0699vwMD+TCno4cNGjBo5ZOiQXg29UlNTdXqdj5/3zHun//jPH8ikHTx4sHfv3s7OznRCAQDACjzbS/flBO+3G43IXN5cdjb3bO1vODrJ5/OxXrQL4KqwGG8RLEYAAAAAALgMF4DefK0A9JhEyQkEoK+HJQD9FALQcGUqR8dJWuMHwVFno5OZNHBs6jtBEb1lSo2jEx1xlzI4OTcqNTuDo36IST0fm/ptdPL2oMhRap3E3oGOgDsfQmwAXYSlzDPRMmdsKQ7dKih8lcC0heU9r7RvRwLQf+dARMvPZTnclT4s3Cnw3QEAAAAWCQkJr776Kndp9+Zbb5SVlyqUCrlcbjQafH19u3fvHhQUTP6ytGCmtYhBs0locn1IMAFoNgbN1IEOD7cUgWZj0LQOdFR0dHTMpVLQsWwR6NjouJiIuKjQOLPBxztMXDZbMPgZ16kfOi35UvzSj8XP/pjSdFb4wc9Dvv/3e+/9PGTjWcn93wqXfaWa+Y65bFhAZHRkfGJ8RkZ6ejqTgmZi0NlMEjqbtOys7Jzs7NzsnLycvNxcphp0QW5BYX5RYWFRMWlFxVwMurSExqCrKqurq2pra3rU9aivr+vV0Kt37959+/bp37//wMaBQ4YOGT5ixIhRIwcPHlxTW0NOW61RR8dGPfjIA//9609m9t58MyUlhU4rAADc7Z7tyWQu30Lm8mZrzlx6I3MJHYTFeItgMQIAAAAAwGU+G+H5xWivzTUdCEBP9PlkmDnP52YGoEOUzvF6V7rRAQV+/F1DzZ8OvxMC0B4Ob/YzfD7a68laBKChHa42tr1lytcCw05GJp6PTfsxJnV/aOxEjdHLxaWL/27fLLbdugW4uM3Umw9GxJGP/1Ns2rHIxBf9Q6olcsduNnQQ3MkQYgPoOixFkY8fPy4UCklPywrKLYPClqrMf/75Z0FBAe1tjyW+3HL3jgeg/+aBOJbPxb3JVSpGw50C3x0AAABAqNXqJUuW/Prrr+S67uDBA8NHDjeZTRKpxGAweHt7BwQGBLVy5Qw0F4AODWPrQFsy0BFsBporBR0VcXkdaEsGOiaaPIuIjYmMCwkM16oM5hBh6b3ug57kTXrXZc4+l8Vf8Veedl/zreDpH2Je/mfexu/U5Pmq0x6Lv5RPflNdOMCXvHNUbFRySlJ6RnpaGhODZktBZ2QxLTPLkoHOzc5lqkFzGei8wsKCwqLmDHRJcWlpaVlZaXl5WUVFOVMKuqaaiUHTUtANvfv07te/74ABbCnoYUNHjCRGNDY2VlSWk8+u1qhLy4r+sf1tMo2//fbbihUrdDodnWIAALh7PdtTd3C891sDkbm8yWxt7nm1n+HwRO99Y5C5hA7BYrxFsBgBAAAAAOAynw03fzHKc3ON5hoB6ATx8QneHw815Xq70a6/LVDu9GSt5rXe+iRjR98z35e/a4jp02HmQdGiOyAA3dfw+UjPJ2vUtAuARdZaptDjce/uhyLifoxN+TEm5VhkwiqzTyTP3cXGlg6yGm62dvHuwg2e/icjE3+ISfkhNuVAeOyDXv6J7kw+D+5oCLEBdB2WtDHBxYgt5Z8tkWhOaHMF5Vb9bVnCxy3rN3c8AP03D8RpmXgm72M5+jXfE7osfHcAAABAXV3dwYMHyUXdb7/9umrVyvCIcJlMptVqmehzQEBQUPfupLHI8+bWjAtAs7gAtKUINM1AMwHoFhno5iLQlgx0NJOBjo6OjY6JiY4MJ38zGWh/3yClTKs2CfPGC/s/yhvzhsv0jxznfe6y5CveylPuq77mr/rGbfU3/FWnBMuOecz/XDHqOXlauW9oSGREdHhcQmxaemp6+qUM9KUYdHaWJQadS1pebm5Bbn5BXgGXgWZj0CVsKeiystIyNgNdWVVZVV1VU1tT26O2rr6uV69evXs39OlDS0EPHjJk2IjhI0cxMWjSU1BQ4Ovna/I0jRk76utvTpMpPXr0KBlMJxoAAO5STOZynPdbA5C5vMmYzGVfw+Hx3vtGI3MJHYLFeItgMQIAAAAAwGU+HW7+vMMB6F03LwDtJXZ4oEx1YLTnwdFeLzXoEg0dqgOd78v/aIhp9x0SgH6jr2E/AtBwuUBXtxUmnz2hMd9FJ/8QnfJNVNJzfkHZIrHQzo6OsEpie/tiD+kr/qFnopJ/iEkhk7M7OHqeztPL+ToqxENXgxAbQJdiSTxfuHDBz8/vStWXLcPapo1baTdC3fEA9N88kEVoc5Da4polpaErw3cHAACAlRs4cOBff/1FLuq+PfNtdU01jT57cdFnJt5MHi0BaPLkUh66RQyaJqCJS3WgaQyarQLNZqAj2Aw0VwS6RR1oWgo6JioqMjoqjCkGHR4Sbdb66/S6kCxRxVxhn0dch2xxGLfNbsYux7n7XRceclv6FX/pMT55XHSYN+8Af95+5dS3DHWzfOMywkJCwyMiI5NTktLSUtnGhKDTM5mWkZmeySWhs5lq0KTl5LDVoPNz8vJz8wvymRh0YUFRcXM16NJiGoOuLK+qrqquZktB1/Xo2bOejUH37tuvb/8B/RsHDxoydOiIkSNGjx49fMTwPn36ZGVlaTSamLjo/Z/v4y6YR40aRacbAADuRs/Uaw+M83pzgKGDmUubbvc42nVzcbBxtuJGPr6D3TX+V0dbm3te6av/crzX3tGetAvgqrAYb6BhMQIAAAAAwHXbPcy8f6TnE9XXCECPThAfG+/90ZAbCUA72HZTuzvQDZZeaL+6SEmO+9lw86fDzV+M9nyuThujdaEvX1m+L3/nYNMnQ++YAPS+EQhAA6VwcJygNnwYHPlNZOKP0Slno5Le6x7ZIFPJHRzpCKundHAcrNB8FBT1XXQymaJTkYnvdY8YodSK7fEfx9+REGID6FJaFks+evQo96Rt+Pgq5ZZbsSSPbywA/TcP1JIlIc255qGhK8N3BwAAgJX74IP3uYu6X375ZerUqf4B/mZPc1BwUEhoCE03s9jIM6u9APSlOtDNAWi2DjSbgWbqQIdeVgfaUgq6OQPNBKCjoyLDSYuODIsNDYqKyTQ2LJVNfY8/6lVejzUudevtBz9rP/YtuykfOMz6xOm+fS5z9rvct8d15m6Xye87j3tDuGif+dHvwuduC64Y3T06KTwmJjE1JTU1jfxNpKVnkJZOGpuBTs/MyszMZlpWdmZ2TlZ2bnZOXnZefk5+fl5zNeiCouIiSzXo0rLS8oqyysrK6uqqmppqrhR0fc/6Xg29+vTp069fvwGNAwcPHTx8+PBRo0eNHjN60OBBtbU1kyZNPH36FDe3+/fvp9MNAAB3o2fqNQfGer3Zv6OZSxXffmKK5JFqzbpytdW2R2s0fSNFzvY2dFLaw2Qu++i/HOe1dxQyl9AhWIw30LAYAQAAAADguu0eat4/wvPxqg4EoMfdSADa3rZbXYjguR66Qj8+16N0t1+UK9833POzYWZydNI+ZUPYz9ZqI9XXyEDn+/KYAPQQc2PUnRCA7mMgHxMBaHCzta2TKt4ICD0WEf9DTPLZ6KQ9IdFTtEaDk7Ntty7+i3y72Xfr5u3sep/e/EVY7HfRST9EJx8Nj3/FP6TMQ+ZiY0sHwR0CITaArsaSJOZcuHBBq9XS15rdiQFoV1dXrqA1gfLPdzp8dwAAAFi5vXv3kou6Cxf+zV3dvf/++wMbB4aEhPj6+dFMczBXBvpSHWjmz0sZ6JZ1oNkYdEhzDDq0OQbdnIFmYtBMHeiwlhloJgYdHRkZFRUaGB0WFJ2cG9JrrmHOx5LVp90nvemS2Ncxtt41b4ZT7RrHgU/Zj3jZftxb9pPedZj0nuPE9xzGvOU0cLNzwSTXhHq3iS/pnv818tl/xkx/IbR8SGRyWlJifEpycgrBlIJOT2Mak4ROy2CrQWcw1aAzSWOqQedk5eRl5bIx6DxLDLqwoKiIVoMuLSthS0FXVFVVVldX19RU96jrwWage/bu09Cvf9+BgxoHDR48sLFx2LChy5cv27PnM24+f/vt1/9d/N+pU6fodAMAwN3o6TrNF2O83uhnUPA6lLn0Ejs+W687M9X36ATvO64dm+hzvEUjm1z/VxO8W/aT9tVE2t/uLt9P911SoOA5XiNz+XJv/aGxXntGInMJHYLFSBoWIwAAAAAA3HKfDDHtG26+dgA6XvzVWK+PBhtzvXm0qwPsbbpVdXffMcB4YKTnG330RX48qZvtrAzp3mHmz4aayaEt7dOhpv0jzE9UaUIUznTn9uT58D5sNH48xNT1A9AmD4etvfXkk26uRgDaejl065YiED7hE/BlWNy5qKTvo5LIkzVm31A3vpPNFf/t3cXGVmRnJ+xAc7O17VILgZyMm23rk2y3kQ/odOVAM5mBGJ7gQU//o+Fx30cnk3k7GBb3sGdADM8dkfE7CEJsAF2QJaBMtJtRvhMD0C0/FHGlYXBHuNO/O7rBnYP+zAAAoIs5eODA/y5e7N+/75gxY06ePEmu7v7713+feeaZ0tJSX1/fgMAAJtAczCag29aBZhv3EoMJQAexAWimgDTbgkPDQtgWGhbOZqAjwsKZdlkd6PDwyNDuUTEJIZUTzFNel60+LZi3l1d1H9873MPJ0dldah9d41aywLFmjUPdOsf+T9gPfs6u8RnHQc/bDXrWvvRed59wmaODi7vSNnsEf9lu79f+iN/8TdykxyKLGmITk5IT4pOJ1PSU1HQag2YLQrMx6KwM0jKzMrKyM7Nys7Jzs3Jys9gMdG5+QV5+QX4hUw26sKiosLikuLi02FIKuqqqkstA19XX9ezVs3ef3r379OnVu2HKlMlvvvnGhQsXyDSePXt21qyZJSVF538+T57T6QYAgLvRU9eZuTR7OG6q1hwe571npOed1T4bYX5vkPHtAYZ/DKRtx2DTZyM9947y3DXMtL3RsI3tJI/k+UdDTaT/0xHm9wcbuX7SyL47Bhs/G+H51QTvOdlyNwdkLuFmwmLEYgQAAAAAgNvh4yGmvcPNj1VeOwB9dKzXzusJQNvb3FPV3f3dAcY9w8yfDDV9Nsz0Rm/9pgr1LjbuTI7bqpEx5EweqVAHypzoW7SR58P7oNG4a7CpMfLOCECTz/4EAtBWybZbNz8Xt2VG732hMWciE7+PSjoRnvC8b1C20INne41KxsMU2n0h0TsCw6/S3g8M/yAwYo7Ok29nR3frAoR2dqtMPh90jyCn1+qEWzby6mfB0X1kKrrbFfBt7Uo8pK/6h5yMiD8XlfxtZCLZa67e0+zkYoPMyp0AAWiALsgSJm63/DNRXFzMhIg7kEu2jLyxAPTfPJCF5dWWrnl06LIQgIbbhv7MAACgizl44AC5nMvISCfPfXx8lixd8usvv5CeH344t2rVqtSUFF9f38DugSEtY9DN5Z9bZKCbW3D34BA2Ax0aFBIaTFsYjUGzGWimsRlothp0WERoUGRkXGjxEO+JL6vu/1qy6AC/z2p+dK5SLFQIeVKRUOzq6lY4WjnqJUnBLOf/Z+8+AKOo2r2BC6nbe5vdmdnd2d43m16oIYEASSCUAKFI711FQEFBDb1KESxgAQu99ypIR0SpgqKi4lvvfb2+93K/y3dmZ7IkG0gHgnl+PiybM2dmzp447Gb3z6HlOG7hgujeK6PzXovtWBz7+hFq2romnkQbriPFImlkZIzGEdV1mnTlVe+ufzdbdS1j1JLkNp3T09OaN23SvEWL5i1aomrRkk5C05WZ1TJYma2yM7Nat8pqk5XdJqsNHYNundO2TU67nHbB1aDpJHQenYTO75DXoWM+vRR0505dunTu1q2we4/uSGG3wiFDh3zwwfu//vormjr0yh/dz8vLw3Hc5XbeufMrBKABAODPbW13/Kuxlp39DOoqZi7lMau64pfHW8+OMj9F9eVo8xfDqU4ekUURE6rufvGhIdTFcZYVBVovFhtqR/eLc9Rfj7MeGmzslygJtaPq6hUdGkzdmGB7LbvyzOXmPvpvxlnQ2dkmACoEFyNcjAAAAAAAAIDH4eRQ6vwI0wedqxCAHmc5PtjYpmoB6MjGjQo9okP9jeeGm9ApmDo9jDozzIRuQy1hdWoYPZh3O+ocyhj2QGWxAegh1KD6H4CWRu/oo0cP/6MuEIBucFTRMeO05Alv4g90crfprYSMA574/iqdNLJK73G8QlJ/pLa8ndikgvo5sckviU3fNtvF9SkALY+MWm/3/pLUFA0vbMClC239V0rz8TqS3e3h0GWuiIoersGPeRN+SMxAk/l9QsYxT8IwjU4eGc12AvUVBKABqIcqDUBXutxyyAOXcK56ALqWJ2LweLw7d+4wW9EZQ2Hou3fvtm/fnu0EnioQgAaPDfs9AwAAUM98/fVF9HKua9cuYrFYKBTGxMampaWuWfPR//3f/6H2y5cvTZw4MTEp0Waz0es70ys80xFoFhOADt4pG4AOVigDXRKAvp+BTggE4gN+D51/btPLPvpDfOEN1eIfJKM/ETfprDJbTGaD00CalHKNSoYnZuPzz7leP4HZmnC1Dk7vJfxR60XeLDHhjZ2xy3vmfwb3m5bidLnRCHU6nM+T8AR8azpv8DJs7U+Je/+n1YpzzQa+kZqZm56R3rxps2bNgxnoUAyaWQ26JAOdmdWmVXabrNY5WW1yWrfJaZPTNqdtO1R0Brp9bjt6Nej8vI4FHegMdJfOXQu7dCzo2KOox5w5sy9dvhR8XXxvz57dPXv2RBOCXn47nc6k5MRff/sFAtAAAPDntrab7qsx5p199VXNXMqiV3XRXR5nOTvS9BTVl6NMnw+lvJoyCyol4px9Aw1fjzXPylGzTSXGZsi/GWfZN8DQwsRnm4ICWs7eAYabL1hfy1bxYyrLXPYmvxlrRmdnmwCoEFyMcDECAAAAAAAAHocTQ6hzw03vVxaAHpMmvzLWcmyQsY2l8gB0RKNnOjhEB/sbzw43nRxCodvzI+j6Mlil75evCyNNl0ab3+uk86hjI8uNKdcuPB0MSQ9LltX/APT23vqzw0wfQAC64dnu8F0NpP6U0OTHhIzT3sQpuJGMiY2ocsziJdz49+TmN+PTK6jv4tO/j89YTtnEEfUoAC2LivrY5vk+IQMNL2zApQtt/UtS0zHaBwTvHiiyUSNTLLdYbz7rT/4xsclPCRlX4lI/trrZzaC+ggA0APVQpQHoUKS40gxxKOs8duxYtqk6AehanogR2hRKUZdvAU8XCECDx4b9ngEAAKhnLn71FXot16tXT7VabTAYNBo1h8vl8bgdO3Y4cuQw80rv0KGD/fv397jdTqfTS+egvWz0uVQAGhUTgPb6UYUy0OGLQNMV5/d5A35fXIsCx+Cl+jnfYEt/kb24S5Q1UG626o24zWpxOF1Ov8/ntPuMRsOw5eb3/2orekMq5Mq5guhhq3nTj8kdCapnnoltMYB/9D8LPr1U2DTP63b6fD6/y+2mKItcqhHJ+HHt+S+uM2z9R9M9v+csONKs18TUFq2bZKTTKehgDLp5SyYG3aolKiYD3ao1qlZZrYMx6DbZrZmloIMx6Hbt2rbPpdeB7tAxH00OnYTumP/ChBeOHD3CzNKXFy6MHTsGTY7D6QgEAsnJyU6no0nTJnf+AitAAwDAn9zabroLY8w7qpy5pGTR73XRXRpnOTPS9BTVuVGm48OMXb0ikyzapYpxqmIcypiecZKDg41fjTGvKNDG6zh2ZQzahG7R/RltVBfHmNHWAYkSph0V2reHT3RwkOHbF6zTq5a5/HqsGZ2dbQKgQnAxwsUIAAAAAAAAeBxODDGeG06930lXSQA6VXZ1jLkqAWj0U0euTbC/r/7scOrkEOPxwcYdfciNRURYbehBrOuBry9XqBFt2tKTeLGpXM6NYA9aormR93Ehvq473s0jehoC0OTZYdQHnSEA3eB8HZf8Q0LGt/FpK0z2AF8YVc2ABQSgHyi6UeNUofh9i+tGfNqthIwvPAnsBlBfQQAagHqo0gA0EsoQl19xOeRhx6l6ABqpzYmQ0MrQpTeFrQnNNIKnCASgwWPDfs8AAADUM+fPnUMv5Hr36Y1hmNlspigjjuNKpTIyMlIulw0dNuTq1Suow//8z/98/PHa/Pw8u8PudDl87DrQbrro9DO6dbvdHpfT63TQ5XL6PR5fuXWgfT5PnMcdl97a1buYKj6rW35H8cpxcd7zMoefIHVWk95us9o9bjd6UZoYn+S2BVoW6ZffcM46i8el6WV8QiiLGfkxb9aX6qRsPZ8jE6gip2ykLtwbMOGdZl6/NzkxNS01Izkp2ef1GfWUWKCUqnlNeotmHrDv/yNr9z/azdjeosvItCYtmmRkNG3Wgl4Nmk5CZ9LVslWLlpl0GjqzVavM1q3YGHTrVkwMOrgadJu2dAa6Xbv2bdH9AQP7f7bu03/9/i80Ob/88ktx8RvJKckmivL6vGjw8fEJqakpbrereYtmv/31zo8//shONwAAgD+jtd10X442b3+2GpnLVU9h5vIsuh1h2j/QsKOvflc/A6qdfQ0HBhpPj6A3HR9K7aZb6E3oFt3/fAiF2tHWg4OMTDsqtO+BgQbUePU5S1UWnd3Um7w4xoz6s00AVAguRrgYAQAAAAAAAI/DF4ONZ4dRqysLQI9OlV0eY/58oLGNuaIAdETjRrk2wb5n9WeGUujIZ4ZRu/roMym+ODZCwrlf6EtOVGPUOfIhFRXRKDriAZ9KoxamQ8WjrQ8oadS2XiSaBwhAN0Bf+hNvJ2ac8Caoo6PZpup4CTf8PbnZzfi0Cuq7+LTv49PrZQDa/X1COhpe2IBLF9r6l6QmY7Q4u1t1mGI5p7wJPyakH3XHs02gvoIANAD1UFUC0KUzxOUXXUaio6NPnDjBdAgLGVcrAF2bE4UeCBK2b35+PtNe6drSoB6CADR4bNjvGQAAgHrmzJnT6IVc377PajQac5DJZNLr9VqtViQSR0ZGGoyGN954/a9//Svqhl5Mzl8wv0nTJja7zevzejxuNx2AdrvcbqfD409wpre2t+hkbdnF3CTXkpDu9Hh8Hr/XH6Az0F6vz+30JzV1dX3R9Oph8q072IyvpN3fkHjStHrCbDLabA6bw+nyulDf+DhfgteR6PZbJqw3v/ubsXAybiHdOpVBouKM3SycdwVrkmfVqAg+R5LQQbD158xdP/fM6eMP+JPSUtNSk9PTktOTEpLdTjeu0Qu5MrWJm/ecbPl5/+d3c7f9kv/ymmZ5fdMzmjbJaNqsectmLVo2a96iOfqV2Ta9fVFi5+Hx3ccldxuX3mlw09b5LTNbZWa3zmqdk90mp3XbdjlZrVsVdOr45puLf/zxBzQh//73v1evXt2qVSZFUXa7jV6D2u+Pjw8kJiWlpqY4Xc4WLZv/5W+/3bp1i51uAAAAf0Z05nKUeXufKmcupdGrOukujbWcGUGnGJ+uujDKfHG0+atgoTvogdPtw03nRpqYltDt+ZFm1I62oj6ld0FHQI1Xxllea6XiR1eWuexFol1OD4fMJagSuBjhYgQAAAAAAAA8Dl8MMp4dWnkAelSq7PJo89EBxtYPD0BHNGqUaxPue1aPDogOi+rMUGpnbzJBy2F7NCR0ALoneWYIBKAbovO+xJ8SM455EoQ1SidPxg1/S252Iz6tggrGiNOX1b8A9Bqb+7uEdDS8sAGXLrT1t6Qmo7GaBKC10TEnvAk/JKQfgQB0vQcBaADqoaoEoJH8/PxQvHjnzp2BQIBpj46O7tu3b2hT+ZWbqxWARmp2otLB6AeuHh0axo0bNyQSCdsKngYQgAaPDfs9AwAAUM8wL/P69+/HBKBNQegORVEkSWrUGr6AHxHROCkp4f0PVt+793+o88WLFwcOHOD2uN1uF7p1Olz+gDenl6vX68bhq7Hntign7FKM36gYtEzTcbQxNcvtT/F54ryBJE/ecMukHYblv+oW3FD2XyZJyFKTBEXprVab1emye/2eQHwgEBfwueN9zgSrwZM3Sv/eX+1T92PeeKsJdxFag1InGLdFOPeKplkHm8low9S4WCYc/CZ29l6PGZuz41K8SYkpqei/pNTUpPTUpLT4uASH3Ym6CfhifRy390zN2hvpJ/9fl/U3O4x/q3mbrunpGRlNmjRv0Tq9w1B7vwW6ces1Lx8gXz9qn3E0ccaelpM/zO4yqFXLzJZZ2a2yW2ehGjps8OnTJ4OvfO/t3rO7sFshZTSazCaXy+Wll7z2oRfYCQkJiYmJyclJDoc9s1XLv/3jr9999x073QAAAP6M1hTqzo80betDVjFzqRZEjkiRLmynntVG1WBrUXt1d68oNrKiHxUjGj+zsSfx1SjTqWEU2wRAheBirEHBxQgAAAAAAACotuPBmPLqgspWgE6RXRplPvLwADTaPdcm2NuHXvsZHZOp00OpHb3JJB0dgOZENgpgsakENxUPFrrzRCtFx+VHVfT3R2uJkkZt7UmeHkJ90AkC0A0OHYBOoAPQksgqvakRhg5AJzW9EUiroG4G0r4LpC8z1rMAdGTUGov7u/h0NLywAZcutPW3xBoGoImY2BOexB/i04+42ZAcqLcgAA1APVTFADSCel68eJHJUjzQAyPOoeTxw5RflbkGJ5oyZQqz6WGPovTa0g9MSIN6CwLQ4LFhv2cAAADqmePHj6GXcIMGDyodgA6iUBmMBhzHlSpldHR0LCe2Xbu2e/buQf0vfnMhEB/ncDocdlcgwdv3Vd/zG02TD2CvnVXOvqxa8K16wQ3NnCvqV49ho1aZC0YmtBtiH/excdmPhmW/akZ/Ik3vrNAbSL3OYjZb7A6bx+uOC/gDCQF0zLhAwO8LuGxx3hTj9COWFXfIdsMIk95ptzkpo1lDisdtFsy7qmmab7Fb3FarTSZSW9K4q79JPPIfPbuMife6AslJqcmJqSmJqanJqWnJaSkpqYG4gMVqVcowoUjoaM4b/Y5+x1+yT/9v0YcXOwx+rXm7bundp+pHb5S+ckqGxrzopm7J9/pl37ve+b7Fmh86Lz/TqfuwVs2bN8/KykzLSP3o09Xo4Z8/f37EyBF2u40kSbvD7nQ53R63z+dDr7QD6EHExyckJCQlJVpttlbZmf/4599u3LjBTjcAAIA/o48KdedGmrZWOXOJfjyKimgUE9nQK7Kyf3k2ovEzG3oSF0aZTkLmElQNXIw1K7gYAQAAAAAAANVzfKDxzBBqVYG2khWgU2SXRpqPDjC0NvPZplLQj2StTfw9vQl0KHTAUJ0eQu3oRSYGA9BGafT2nsTZIcZTg1H7kyw0gDNDjMf6G+yKGGb8j4JRGrW1iDw9mHq/k5ZtAg3GeV/CTwnpxzzxtQtAp1ZQNwOp3wXS6mUA2vldfBoaXtiASxfa+ltiRi0C0Ak/xKdBALr+gwA0APVQ1QPQjJ49e54/fz60EjNy7dq1pUuXhpZqDlODADSj6icKPQRk7NixbGs5+fn5TB+kgm6gvoEANHhs2O8ZAACAeubIkSPo9duwYUPVajUbfC6NjkGb9Hq9VquVyWXR0dFiibhT547dunc1mAxWi9Xnjit6IfDcBuNLh3QzL6oXfidf+pNi+W3FW78ol/+sfvOWds5F0+xj8YsveVb8RTdpr6zVADllIQgtOq7Zare43A6/3xcX8AcrDhX6Ks4bsJrt3V/Vv/cP85iP1U6PzWK2Ox0udKsmxGM3C+dfZwPQPp/PYKCEQlGnl6XH/qfDss9zkpp74v3JyYkpyUkpqSkpqamoUtNS0lKSU3w+v4kyy8RqiUKQWCB4dYv9yH923Pu3bpM3uUZvEk87J51/U74Ujfxn+Ypf5Ct+Vq78hXrvdpMPfyiYsys3v0tWs2bNjJQhtWlin749fX4fThAWi4VOPzudnmD62V+CiUEnJCSYLebsNln/8Z//QK+02ekGAADwZ/RRF925EaatvauauQRVRGcui4gLI00nh0LmElQJXIyPCFyMAAAAAAAAgDKODTCcHmxc1bHyAPQ3I0yH+xuyywWg0X5ZJt7OngQ6Djpa6To12Li9J5GopQPQBknUph74yUGGE4Po/PG5Icazj73QSVGhAZwYaDjUj7TKo5mH8CgYpVFbehCnBhnfL4AAdINz3pfwYy0C0JNww1+Tmn4bSK2ggjHitKVGm6j6AejoRo2JmFgrh2t5SKFN2uiYqOrnQpgA9M34NDS8sAGXLrT1Ti0C0F94Em5BAPppAAFoAAAA1QUB6LrSoUMH5i8AjBs3jm16uGp1/tNgv2cAAADqmYMHD6KnpJGjRpQNQBuDtyymUa8ndbhOrVFLJGKZTKrBtLjK2K1fy1d2JI7fir12Vj3nunjhD8JltyUrfpYu/1m87GfhW78o3rylW3TdOOcC1fVVpT0BIzDKaDBbbGa70+7xeXxxPn+c/34hvoDD7EvKJmd/aVp4Q9uss8Gkd9htdq/Hb7M4VLh43BbhvGuaJvnoGM5AIN7tditlmNbOm3PY/sXd7v1eT/R4/clJyUlJycnJKbRU5iY1NSUtKSnJ6/XoSaNYqJAT3NaDFa/udEz9Qjn1lGj2VTR4ERr8yp+lK34WvfWz4C36DrniZuqq63kvLS5EAzAaDVqdFsdxq83qcNjp5a9dTo/H4/V5fXTRgo+BzkDHx8ebzKY2Oa3/9a//uHLlCjvdAAAA/ow+6KI7O9y0pVdVM5cSTkQ7m2BAgvTZgKTB1sBEaRMDLzqioh8VIxo/s74H8eUI04khkLkEVQIXYw0KLkYAAAAAAABAtX0ejCm/V2kAOln29QjToX6GbFN4ADqL4m8vIs4MNqJDhdXJwcZtpQLQG7vjpwcbtxaRr7ZUTG4qf6nZ4y50UlSbuuOnBhkP9H3kAejNPYiTg4yrO0IAusE55034MT79mLuGAeiXdIZ/JjX7PpCG6rtA6rdxdN2Io5d8ZhpR3Qqk/RBIX260iSKrHYD28gRbbN7T3oQvPPEPrLPehNVmhzmWvnKrRRYZ9YnV9UN8OhpeaKilH0Jo8H9LbDK2xgFodwI6wmEXBKDrOwhAAwAAqK4GG4CeOnUqE0Gu2JEjR9gdKgMB6Eqx3zMAAAD1zL59+9BT0tixY9RqdTDsTN8YKSNC3yvHRK8JTRkNRgIz4BjZfYJ75Mf45IPa178Sr/rJvPNvuat/tS67LXz/V/26v8S//Qu29Gfp3GvK5zfr0nNtlNVktphsDqvL6/L6vb44n8/PFpN+9nr8XmfAYjMPXIq/9w9D/0WYxWyzmq0ulysQF2+1OJQ6egXoedfUTfMtVpMzEBegc8Yms4Avbd5PuOsfmWsu5Wbkos4JySkpdAaajUGjX/RvwRh0amJiotPh0sj1CrU090Xx2J2x0y/w3vye+OS3hHd/0b11W/TBr6btf8te86vprZ/lb/1kW/h14oTVKS6fxWa1uxEPKpeHvnV7vB4vXUGlM9BxfjQ2NFFt27X5/b/+85tvLrHTDQAA4M/og866s8OpLb0ItaBKnx1Q0uiVHbUXRpi+GGxssHVxpOmVlkp+dGN2Uh4kmLnEvxxBnRhiZJsAqBBcjDUouBgBAAAAAAAA1fZ5f8OpQVULQA83HeobHoDOMvG29yBODzIe7W9Ahwqrk4OM24pKBaC74V8Noxa31VT4Y8sjNytL9eVQ6sCzjzgALYna3J04MdC4qgMEoBucc974H+PTjrkDNQtAT9CRvyakX/EnX/YnXfUnX49L+TYu5bo/hWlBt6hQ+zV/8mKjpQYB6I4y5S8J6d8FUh9WtwKpV30pLYQSdocqk0VGfWB2XIujh8eMk3kIaPyorsWlXC4Z/E/xaSM1Ona36ggGoOPRCA+74tgmUF9BABoAAEB1QQC6YhCArkPs9wwAAEA9s3v3bvSU9Nzz49VqdSj0TMefQ9BXZctgMOhxo1ZNGsxYr9ctA96TTjwom/Zl7IZf07/5vXjtb0nv/Upc+I9pN/714drf4hf/JJh/U/nyIV3bQUaz0+Rw2unQsN/r9QUXTi4JQKNCTT5PnM3kblqoXfStofiMJrGV0WSwIT6fLy4u3mqmA9BjNvHnXVU3yTOjL/1+f2JCosfjwdS4FOO98Alx/P91Gr8ixeP30unnlOQy0JdMEjo5NcGbatE7LXGKwjnCsbtiXzkf+/7Pqef+9cKaO66Vv6hO/vOlX/5rz56/Zy+9LVzyEzbrgnnCp+7ULAtFmR0OhzPI5Xa5PC43XW40APSggmHokiS0Hw04Ds1Ubl67P/79+8WLF9npBgAA8Gf0QWfdmWHUlp6Eml+lzw6M0uh3OmovjjSdHGJssPXNKNOrVchcruuOnx9OfTEYMpegSuBirEHBxQgAAAAAAACotqP9DCcHGt/rUEkAemSS7OIw06E++mzqfgC6pZG/tQd+ZpDxSF8DOk75OjHQuLXH/QD0hkL8y6HUm+00/JgnmYCek606P4Ta/+gD0Ju6EccH0HPLNoEGgw5AB2oegG4qkkzUkWMxfLRGN99gPudJREfbbfe9pNOPxnSoHdW4YOVK5bGNq3c1RTdq9BxG/JKQzoSSH1g34lJ+iU8foMIiqhkN4TaO6CpXMmNjxkk/BL35W3/KD4G0XQ7fmJLBT9CSKQIRu1t1QAD6KQIBaAAAANXVYAPQYUKJ5LfffpttqiYIQFeK/Z4BAACoZ3bs2I6ekiZMnKBSq+i0c8nyzyUM7O/oDkXfN+iNesJA4galXGPzYUWvG/q9I31+r/CVM7Hzr6ne/sm55CfFZ39JvvH7+8f/OfHtX/SLfhTNuymbckyZO0pHmSm7007nhd0eJgAdXDU5GINGv3l8boff7jWO+ZhY8Rddl8lairJaLFan0xkXCMT5AhaTXakTjdkkmHdNlZFrRl/64/wJ8QnxgXiLxSISyH05vI9/SN50Oze7p8frDiSlJCeh/1KS6DvMatB0S3JCXErAnYRjpD1N3ONN/phdMVNPxS64jr//c2DZbeWqX80X/7Xo/H9Mf/8OtfS2aPEtxYwL5AvrrZmd7AYDZbFZnM5gBtrhdCFulxsVnYEOxqA9bAaaXgc6zm/Q6/M75P77v//rwoUL7HQDAAD4M6Izl0OpLUXVyFyuzNdeGG76YpCxwdbFEaZXWih5lWYuu+Hnh1GoP9sEQIXgYqxBwcUIAAAAAAAAqLYjffUnBhjezccqDkCPSJJ+NZQ62EcfWgG6mZ67qRA/PdCAjvCw+mKAYUt3PIEJQIujNnTVnR9ifLOtRvBkA9BZynODjfv7EI86AL2xG368v+G9DhjbBBqMs574H+LSPnfVMABdWgpfeMDp/0t8xgK9WRRR7cWeyyNjYt83OX4IpF7306tKP6x+DKQuM1o10XVwjSQKhNf9yb/Fp8/Xm9imWiBiYo+74r+PSz3shAB0fQcBaAAAANUFAWgGBKAfA/Z7BgAAoJ7ZunULekqa/NIkdTAAXSr9bDDQaz0Hb4NFh59Jg56gC9eSUonc6tV0e1Xfe6l4zFbB5M+jX/sydtYV7oKbgmU/aT741bv8NrboB9GC78Qzr4gmHpS2G64zGCmTzUSHhl10CJrOQHtLktDol8dvMjhyhmFLbxOTdqs8SSaT0WKz2dC2uECc3xuwUHaFVjR6I3/uVVV6e5OZsvv8vngkLgH1wTFSJBE8O1955P+1fXVDhi/BHR+fmJicmJiUmETnn+lKTEqKj0tK8Cd7nD6FQmVNEXZdwBu+OWrS0ejpX3JmXuUu/F649Cf56l8d7/xCvPmTaPEP4vnfyqef0o5ZQ7XoYNPrTWazyWa30QHoYAYacbnCktBsDBqNjSTJjgX5/3333+fPn2enGwAAwJ/RB510p4dSm6ucuaSCmcsvh5uODzI22PpqhGlqi8oXnf2sG35uGIX6s00AVAguxhoUXIwAAAAAAACAajtSzQB0KyMPfdnSwNvaDT8/yHisn6GCOjXQuL0Hzq4AXc8C0Pt6P6YA9LsQgG54ggHo1M9dcbUPQDcTig86/b/Fpy82WFRRdfB/bIpA+KU34WZcynV/cgX1XVzKcVcgjidgd6uFDKHouj/pTnzaIkOdBKBj0MC+j0s57PSzTaC+ggA0AACA6ioqKhoSJBDUwYuQx4+N1tYaBKAfA/Z7BgAAoJ7ZuHEjekqa+soUNgBdgs09h6D7+mD6WW8gCQOm1kqlcq1e0e0lc+Fs0ZA1wuf2RL38RfTrF3izLgvmXOfPucGdd4M/91vhzCuCaV8Kx2yRNCvUGoxGymJ0uOwej9vlcruZDHQwBu3xeO1WryuJnLxXu+QndZuBuIG0WKxmp9PpD/J5SgLQGwR0ADrXZKJsPr8vEB+I8wcCcQGbzSYVKY0J3CXnXbv/o32HEV6Xy5+YRAeg6UpOTEpOTIgPBqDjkuxWp0KuIhyCjm8IBqyNGUcPPub1r7izrwrn3xDO/56/4HvBwu/Ec68JZ3wtm3xAPWwFldjMYtCbTGaT2WJ2ONhFoJnf2Qw0E4MOrgbNLAJNkERBl47/87//c+bMGXa6QT3GvmRpwNiJAABU3/udtKeHUJt7VD1zGbUyH/tymOn4QGODra+GVy1zWYifG0qh/mwTABWCi7EGBRcjAAAAAAAAoNoO99F/0c/wTm5lAehE6YXB1P5edADaqYhZW6D7/Fn97p4kqj0PrwN99J921gU0JQHoLrpzg4yL22iEtQ5ARzR6RhDTWBDdOLL6b4bOaaU8O/BxBKA3dMWP9TW8mwcB6AanPgegu8mVP8enhsWdy9e3/uQf4tLyJQp2t1qAAHSDBQFoAAAANVBUVDRixIin9OmDDWvUWqUB6F69ep0/f57pg9y+fXvixInstqDSmWbU+eLFi8yXd+/e3blzJ5pbtl/QwwLQHo9nw4YNv//+O7MVnWXp0qVh+9rt9tWrV4f6IJcuXWrevDm7uUKVPgqkNsevGPs9AwAAUM+sW7cO/Wk/ffo0lYoNQLOJZ5pezxS6QV+QdBn0BkKnVynVCrlCLBbn9Kc6TZf1elM47LPY8XsiXjoW/epZzusXuMVf81C99hV32nnulNPC4WvlvnQC1xqNlMHmsHi89HrJLpfb46OLjgy7vCajtfPL2PI72hEfqqwOk8lktjmsXq+XTj97/T5PnJmyKTDR6PX8uVeV6bmUxcQuDo0E4uJ9Xh8aJp8vaj9esutfzRccaRrIcPn9gcSkhITEhISkBHQn4E9MiE8M+BMslE0u0UjVgvaTJc++HztsU+RzeyPR4Ked46Bhz7zERzUDjf9L/pTjkjHrlT1fRYMxUUbKZEJlstlsjvvoDDTNRRcTg6YD3T4vjuu6Fnb+3//735MnT7LTDeox9iVLA8ZOBACg+t4v0J4abNzUHVdVLXNplEavyMPODaWODTA02LowjJraXFGVzOXZIUbUn20CoEJwMdag4GIEAAAAAAAAVFtJAFpTtQA0kU3xPcrYjjZBaxMfVZsKK8csaGngybkR6AhGcdT6UAC6wp9bKkCIojKNvH4+0XMp0inNFFOaKp5LlfWPk6Bz4cIq/fSIzAoGoPf0JKyyxxOA1rBNoME444m/FZd6tC4C0E2F4gNO/506CkALIiJfwQ0/xaVe8ydXWj8FUl/SkdyI2v51hQyh6Jo/6de6C0AfcwW+owPQPrYJ1Fd5eXmZmZkZGRmRkVX98xkAAAAYMmQI8/dnSJJkm54ebFij1ioOQK9Zs4bZGubIkSNsj1JHOHToEHOntD/++ANNL9v1IQHoUGOYW7duhfb1eDx37txhN5RV6WLSVXkUtTl+pdjvGQAAgHrmk08+QX/OFxe/Xi4AracD0IzgHTK4/DNC4HqlQqVQKAR8kdWv6jSJ6PCqsNcS/uCPo8dsj3jhQOSko9EvHY956VjMxKPRz+2Pem6fYPpZ3fD3qOTWRoLQG41mt8eFKpiAdnk8dADaQrkSsnSvncTmXFZmdCSZ5Z9dbqfP7/N6g+Xxm4IB6FHr+XOCAWizyebxepgAdJwfVcDhcChkajXFfXW3ce+/2/R+1ed0eBIS4+lKSohPSIjzJSB+TwKhsToC2rwXBUM/FfR6h1O0MnLwp5FjdkRMOEjHoKeciEH10rHYFw/yR24QDVimbdqBMugpJBiApixWC5N9ptnRLzYCjdCPin5cbq/Xo9PpuvUo/L97//vF8S/Y6Qb1GPuSpQFjJwIAUH2rO2pPDjJurHrmUhL9Vh52dij1+QBDg60vh1FTqpC5/LQQPzPEiPqzTQBUCC7GGhRcjAAAAAAAAIBqO9SHPN5P/3Z7dcUB6OEJkvODjft6Ea0oHttUTUZJ1LouurODDItaq2u2AnSjRs90dwu3dcPPDdCfG2g4M4Au5s6eImJxG3U/v1gvrjxvOitTSe/SE3+kAWiDOGp9V93nffXv5KrZJtBgnHEHbvlTjjr9dROAdvjuBNIW6821D0CbYzlbrK7v/CnXfEmV1ndxKZssbrQLu3NNZQhE13yJvwZS6yYAHR1zzBn3nT/5sMPLNoH6qri4mEmwsV8DAAAAVVBUVMQ8fVitVrbp6cGGNWqtggB0v379mE2rV69mFmOOiYk5ceIE0xiKBZeOL+/bty8+Pp7piSaWabxx40ZoLefyAehAIMAsunzr1q3Qcsu9evViGkMZZSbEfPfu3ZEjRzIt6BRM4x9//FHBOs1VfBQ1Pn5VsN8zAAAA9cxHH32E/pyfNWtmWACaXfu5JANNEnoSR7/TsWiCMKgUaoVCIZPK+HxeYmtN7gvqvKnCbvMF/d7lDPk4evimiNFbo0dvjxy5JbLvqqhOxZz+7wnn39QuuW7rO9PsSzVbzcGosNvpcrvcbrfT4TZZjH0Xq976q6rPPDUdMzaZbA6rz+/1+bwej9fr9XncfpPRqtAyAWhFei7qZEPNwfhzkC/g8/mNRorPk6R256//S+K73zRLa+v0uvxMBhrxe+N97sTE1Li8kcSU/ZKZ33CefTu69QvcNlOiuy2J6vdB1NDPokZtjhizLWrMttiRmziDPhT0XixvM5A0W9G8oHHRRQegLWYm/Eyz08Wkn2n0ItBOt9uFxq3VaYt6db937/8dO3aMnW5Qj7EvWRowdiIAANW3qoP25EDjxm7VyVzmYmeHUJ/3NzTY+nIoNaVZFTKXXfEzg42oP9sEQIXgYqxBwcUIAAAAAAAAqLaDvchjz+pXtq1CAHpgrQLQBjEdgD4zwLCwtVpQowD0M42eyTHz9/ckPu+jR8MO1aHe5NE+5On+hmN99Utz1K2MvIrfIJ3ZUnm632MJQHfWHe2jf6cdBKAbnMcfgJZFRkVU4YOBNL7omjfxuj886/zAQt2u+BKT+SJ254eLbNRIHPHQt29CAeiFdRqAPgQB6PqNw+Ew8bVJkyaxTQAAAEAVFBQUMM8gCQkJbNPTgw1r1FoFAWjE4/GEAsGMUF45FE0OHaF00JkRShXn5uYyLeUD0OX7MKZOnVq6nekWdoqYmJi0tDT2i4eryqOozfErxX7PAAAA1DPvv/8++sN/7ry5SqXSYDAwAehQ7jmEIOgMdBDaZsTUWoVcoVAqREKxQMT1ZcpbDJZlPyfMnSroNIvb/c3oHstieq2MHrQ2ttdCKRUQKoyRLUfGvHJcvvqf5tknnZ3HObxxTqvZ6bDTkWGT3t6kUD33mmbaSUWguUFPmCxWs9vj9Prp8HMwAO31uH0mo4VdAfqKIq09ZTJZPT63H/H54+hbehFol9ulUWklKt7IDzR7/zdz1PI4l8eJnvLiEwJeR4LPE8jpbR//mXrh98Lpp3mdXxWQPo4Uj8ocJei6KLZgTkynubFo8EXLOT2X8LvNFxS8Km3ZW2t1ohkxUhQqNgNtsZjtDjsqJgCN7jF3HU42CU0vAu12Y1qs97M9madadrpBPca+ZGnA2IkAAFTfex20JwYYNxRWI3O5PBc7M5g62s/QYOv8EOrlZgpeZZnLT7rgpwcZUX+2CYAKwcVYg4KLEQAAAAAAAFBtVQxAD0uQnBto3FdEtDLUPAD9WafaBaCfeUYnjNrcFQ8LQIfqcG/yVH/9tm54oVMYG/nQx8MGoHtAABo8Kqddge/9yUecvjoJQO93eOnlk/WmhwWg1VHRxYRxmk7fS67KEIiJ6Bh2Q1nKqKipWvIHf9JVb+JVXxXKm/hDXPJELfmwcDMWHZMuEPWWq6brDFN1en5EBLuhLNTnqi/hl0DqgjoLQPtv+pMO2SEAXa8plUomvjZixAi2CQAAAKiCrKws5hkE3WGbnh5sWKPWKg5Al8fn8+/cucPkmZiWCo5QPu4c1hJajLl8eDqUUWZ6MgFlZPXq1a1bt2bWma6x8o+ibo8fhv2eAQAAqGdWrXoP/cm/cNFCpapMAJpE/9HFIvDgItBMg0GP60iFTCkvyUDz+TzSKfC2EaX2FDUbxm81nttqHK/Z0NhRa2QfXWvTtKMjKooXw40xpkQVzubOu4y99xfby1vc2d2dNrPTrHdZ3cSoj5VLf1EWTNKQhMlkNtkdNq/PjcqDuD1e9J/LRxmCAeh19ArQae2NJioYgI7z+7x0CtrvozPQfn+c2WwWCmSuVrx3vnV/fLtZZg+H3erzueObtnUNXkrM/kY84yvOkFXCpDypVC6JjRKo9IJxn+oHrxE2HcxrOozX6jle9vOCzJHipr0VgVZak4UOfBvp9HNJBpqiLBaL/b5SAWiHw8lkoIOLQGMY1rdfbzS9Bw8eYqcb1GPsS5YGjJ0IAED1vdcB+2KAYX11MpfL2mtODzIe6atvsHVusPHlpvJKM5cfd9adGmhA/dkmACoEF2MNCi5GAAAAAAAAQLUd6Eke66NfUWkAOl5yboBxb49aBaA/7aQ93d+wMLvmAejYyEZvtlYd7kUHoNHIH1hfPKtH4+ziED7sES3MVl0ZQh1/lnTIH20Ael0n3ZHe+rchAN3wnHbGfe9LPuKoowC03ftrXOoi8qEB6PEa3U1f8l8Cqd/7kw/Zfe8ZrVN1+j5ydROBSBcMQ0c1apQrkb1ltJx3Ba576WRzFQt1PuMKLCRNmUIxcy5xZGQ8T9BNppysJVcarQccXnTSvwbSrnkTe8iUTJ8wdADam/BLXOoCfd0FoH1Jh2wetgnUS1arlYmv9enTh20CAAAAqiAhIYF5BhkyZAjb9PRgwxq1VmkA2uPxTJs2bfv27efPn7927RrTGSkfgA6lnENCIebQwcM6h4LIFWB6hg5V2t27d3fu3BmWnH6gSh9FLY9fMfZ7BgAAoJ5555230Z/2S5a+qVQq9QZ9MABNh5zJEsHIM70CNIGTJMG2oD5ajU4hDWagFQqZVCYUiCUyoZLga21c0s3XmoRiBSdnDP/A7zlLDhQY7FqBUBQdyRVKY+PyYoe8L3zrtuGd256Ry73+VEubkcqF3ykn7FQ4AwaDgTJbTS630+Nze7xut8fNcnmo4ArQI+8HoC1un8sf8DGCIWgkDvXVaXGBmN99lmTbv9Nf3piQ2NzWbbLx9VPyRT8Jnt8paD1YbnUTKjku4sm4sYJuL5Nv/2ToOU8o03LlOIdw8o0eCWXHTGY0C2g26PRzqCjKaDKZbDYbk30uLZSBZtaBdrmcGo26/4Bn0fTu37+fnW5Qj7EvWRowdiIAANX3bgfsi/5PfebycPD28376Y/0MTKH7ofY6LzZzGQWZS1CX4GKsQcHFCAAAAAAAAKi2/UXE0d7kWzmqSgLQAcnZ/oY93fFWBi7bVE0GcdQnBdpTffULslRVD0BLYhun6Dg+dUxUcHwRjZ4Z4Bft7UEc6kmgkT+sjj9Lbu6ia0I+eKgBTWw7Ez/LyBPVNIddFfSK1wXaw73IFRCAbnhOOeO+8yUfpgPQVXpTowJNhKJ9du8vcakLHxKAdnH5Rxy+mz56Xedr3kR03p/8Kb/Gpd70JR+w+941Wl/R6YsJwylX3M9xqd/6kq54E6tVN3xJaMejDt9kLTEewxfrzdus7svexF8DqbfjUtDp0EnRqVG37VaX9kGLT6cLRFe8CT/HpdRVAPpzpx+d7iAEoOu3nJwcJr6Wl5fHNgEAAABVIBAImGeQ4uJiDofDtj4l2LBGrVUQgObz+RcvXmS2lveYA9BITEwM+k6Vji8zbt26RZIk06e8Kj4KpGbHrwr2ewYAAKCeeeut5ejP+eVvLVeqlMFkM70AdKn8M7MONH0nFIBG6Ey0Xo/rcJVSo5ApFXK65FKlVKgQ8+QSnlLIlUc+w1Oaoqbvxk/+v569XkxVqtVKtUIikvO5YrWB23xQ7OSDilW/2eedc8/+Sj/vmrJFLwzXmigzZXdYPV5XsNxuj8vFBKDdHspoLglAy9PaGykmAB3n8/l9Xi8Tgg7+8vutFotYoNS6OMWfmzb8tfnrxw3zrgumneZ1fU3iSdfqMD2uNRiMBqVM50xTLrxomXlOEddKyokUCzhSmUitkekJjdFAGoxGpu4HoE0mymK12OxlA9Doq2ADG4Cm14GmI9BqjXrQ4AFoevfu3ctON6jH2JcsDRg7EQCA6ns3Dzve17CuS3Uyl201pwYYD/fR16N6Vn/kWf3BPvrdReSenuSuInJXT3J/bxK1h/esizo70PhSk8ozl2sLdCf7G1B/tgmACsHFWIOCixEAAAAAAABQbft7EEd6VS0A3c+wp1vtAtAdtaee1S9opRJU+C/XMMzS6KHxksXZqk86Yq82lYXCyklazo5C/DD64aoHUUF98ax+fpaKFNV2/d0aowPQHbVonCvaQgC6wQkGoJMOO7x1FID2/BKXspCkVFHh/z9HNGo0j6Cu+xKv+RKveBNKF2r5zp/0Y1zyL4GUn+NSbtDR5zIdqlU3fUm3/EnoOLfjUr73J6MzhnVALZe9CRMwgh1ZKekC4RVvPNqx7gLQvhu+xIM2N9sE6qXnn3+eia9RFMU2AQAAAFUzYsQI5knE5XKxTU8JNqxRaw8LQMfExJw4cQK13717d9++fYMGDWrdunVaWlooslw+AF0+Ql0+Gx3WEjpL6SByFaHBrF69uvTRyqv6oyivKsevIvZ7BgAAoJ5ZunQJ+kP+7XdWKlVKUk/S8WeDHt0pQYRSz4SuJANdsg406om64jpCh+FaTIducYzEMQOh1eu0uFQii47kpPeO2fJb6sffdPU3MeNoR71eo8HEQoWAL9T7Yzu+wltwifz0X953bvnzR9r0RspgMDndDo/P6fY4PV50i16esBFoJgA9agN/7jV5Wm4wAO11+uK8dPm9wQw0ukP/ctq9mJq0p4kn7JBu+j3+nZ8tg1eJkvNVBEFiCgNJ0Dlvo8GM4diQpfqVv+A9ipVaLa5R4oRObzJYzZTNYraYTCb08zVFr/pMQ1+aLWar1Worg44+M7eMkgQ0nYFWqVVDhw1G07t71252ukE9xr5kacDYiQAAVN+7eRo2c8mrVuaSjhLWmyJP9NevLdB2sAtbU/w2Jn6mkT8+VXaoD3nkkWYuK/zsEjKXoLrgYqxBwcUIAAAAAAAAqLZ9TAC6TSUB6KEByZl+ht3d8MwaB6BFUZ900J58Vj+/sgC0KCaij0f0XnvNgZ7EF330x/qQ6wowTcnfjlVxI9d11B3qSaKRV1AHi4hDRWRXu5DZ6/EziKM+7ahF44QAdAN0yhH3nTfpsL2OAtA2zy/+BwegW4kkZ53+m77EK56ER11XvQlXyzWWrpu+pCMOXxyXzw6uRDpfeMUTf9ufsoCsowC0w3fDm3jQCgHo+kupVDLBtWnTpkXW+ioAAADQ0GRlZTHPI4WFhWzTU4INa9Taw+LLoYhwWHtoUefyAegbN25IpVKmkbFmzRrUfvfu3dzcXKalfCSa6fPHH3+QZVdZjomJiY+PZ78Ifome68P6PGyQIVV/FDU7fhWx3zMAAAD1zJuLF6M/5Feteu9+AJpONdMRZ4QgCaaYL3AmA12yFDS9NnQwBR0MTRtInM4W0zvTtwadDhcL5HItf+QqxRf/r2Dcmy0IPWmkjAaDkcAJpVzDaSwzJ/InHxC++a367R/sH95JmrDG3zTPYXc4HY6SALTbSQegPS63y60nTRK5cNRG3rxvFantjZTJ7AnQAWivn85ABxPQXq/H57D6EjPc3abqph0Xz7zEW3BZu/a3xK6TKLVcT+D02AwkZTZZtWpjWif1m1cNk3bJ4poSuAY9BCNlCIacbVaaxUYXuo9uKlImAG1Hwy8VgB4xahia3h07drDTDeox9iVLA8ZOBACg+t7JVR/rq/+si66KmUuDOGppjvrkAP2hPmS9qN7k58+SB3oTA/xidoj0n4rPjEyUnuj/qAZ5ZqDhpYzKM5drOmqZMbBNAFQILsYaFFyMAAAAAAAAgGrb15043JNc3rqyAHSc5EzfWgeg87Un+1QSgDZKol5JV6BRHetNHiwi0J0DPYi93YlkjP33rzmRjd5ormCWeUZbK6gTffSzWypDyekQSWxEBs7JNvBa1a5aG3luRUx0xIMnDj3eTztoDxWRK3IgAN3gnHL4b3oTD9k9tQ9ANxWK9to8P/uTywegRRERH5ls3wbTz5c98U+8rnkSrnsTFpFUxDNlLop0vght/cmfPJ+sg5WA8eiYow7vt96EAxCArsfy8vKe0uAaAACA+gDDMOZ5pLi4WCAQsK1PAzasUWuVBqBv3LjRvHlzptHj8Vy8eJHpXz4AjXzxxRdMajkmJgbNKtNYOhhdPgAdyiKHnYhZuXnnzp1o39Bgbt26FeqDTJ06lT7Ww1doruKjqPHxq4j9ngEAAKhnFiyYj/6Q/+DDD5RKJgBN55/DA9DohvmSyUAHY9DB1aD1eoKOFBM4my1mItE0+hB6tQrjx0o8Wbx3L7t23enWtMCp0wYz0HojoTWq1equ08VzLosKpsWk9Ix+YZv8o3943ruVOmR+IKmZ22Z1Ol1Ol9vpdDvdbpfT4ba5KGe6aPw2yZwrWO4IMtDcFN/SFWjq8cV7vH6P2+t12Hy+OHfeMNNLu9ULvxdNOsDLHB7TpH/MO7dci84l+DL0hI4OOJspmwG3EpRqwiZy2U9Y3liNTk2vWm0gjRZLMP3MBKCRYAa6kvwzvbVUAJpeBJrOQDudDpVKNXrMSDS927ZtY6cb1GPsS5ZqCr1SqlgF/+BG/cFOBACg+t5pp/68j/7TTtXIXC7JUZ/oZzjYi6wPdag3eaKffnlbTenxNye5u7sTR/uEd66rOt3fMLkKmcuPOmq/6KtH/dkmACoEF2MNCi5GAAAAAAAAQLXt7YYfLiIqDUAPiROf6kPuKtTVOACtF0etzcdO9CbnZyofFoA2iaNntVAcpRdvJtDAmNrXHd/fHR/oE8cEo8bopotdsLuQbgz1KV/7u+Gf9yKnZMilnAjm4AwJJ+LFVNnGAu36jsEK3al6BXdZ11G7vQs+OkEqiHnwY9HTgW/sYA9iRRsV2wQajDoNQAv32tw/+5MWkJSybAC6n0J10RP41ptYOoX8ZOuGN+G0099OLGWHGJTOF172BCAA3XAIBILi4mImuOZyudhWAAAAoDr69OnDPJXk5eWxTU8DNqxRaw8LQCMPDLXcuHFjy5Yt6E5YAPqPP/5Yvnx5sEsZYUs7lw9AIw9Lz9y9ezfUDe3I5KTLu3XrVulThKn6o6jZ8auC/Z4BAACoZ+bOmYP+nF/78Ro6AE2S9FLOJelnOvBcGrPsM93MBqBLVoOms87MQtD3A9BBOE5IxUqhWNjtNdGhu9kzNrU22tH+ej1h1Mj1yfnyN76UTNor0Jn5jZ+JVVuj2k3gzjxDrP+vxCXnMro9H+dNcFot9FrKccmu7D7GolnKYR+KXj2unHuRfGkvPmatftBiZ/7Y+MRsj9vrcbk8LTrbxnykW/id9I0L/F7zxf5MBZcrjIxu3HeJZOO/EwYttuoNBrPZajHb1HIiZ7jm7TvkuA0Ku5/UaejBWyxmNv3MBKCZWwtTNvrWGow7hxWjdAKazkDT0JSOe24Mml70hMtON6jH2Jcs1fQEA9Chv71WVwdnJwIAUH01zFz2rS+Zy6N99Dt7EB3t9/86tIIbMaOl8nR/w4Fyneuq0MEnVS1zeRwyl6DK4GKsQcHFCAAAAAAAAKi2Pd3wQz2IZdmVB6BP9iF3dtVl6msVgP6iNznvIQFoGSfipTT5kZ7k/h44GlWo9gYz0AtaKUUlUWOXImZ7F93+HkTpbqVrXzDV/UYzBSmKKv1mqSS28YRU2cEexJEiAt2iPjWuQ0XEqWf1k9PkwocHoD/Oxw70IN5qDQHoBueU3X/Tk3jIVhcBaIFwr9X9sy95AVEmAK2PidlucaGzXHbH15+64om/4Un4mLJJIu4PlQ5AuwM/+eouAG33fuuBAHT9FVr++fnnn4+s9SUAAACgYXpKF4Fmwxq1VkEAGunXr9/NmzeZDnfv3l26dKlUKl2zZg36snwAmiTJXr16hRZXRv2Z9ZuZbowHBqARj8dz/vz5UAQZ7btv377SizEjqM+GDRtKx5Rv377NDInt8RBVeRRIjY9fKfZ7BgAAoJ6ZNXMm+tP+s88+DQagCT29/jMrtPxzCLuhLCbrzAagQ0qaMUwriJUaArxZR/WH/+jSYUgchhE4ZtRbNENWi+d/J2o7Ui4Tq8UiKS9GJBAKbE1jey8Srbxl2/ivjDd2pmd39yU18fZ6zTJ2q+rlE5Lii5L512WLv1Mu+h5b+C254GvvvJNNe05JT8+19Z2jn3NJOe+mcORngmY9FQaK0Cj1MpkyonEslRy94KLx3R/iMzoaSJ1JrzOb/crXjhPzr6oy+2h1mAGNnDJR4eln5g4SumNhWu9X2QD0/Qx0KAD9/ITxaHo3btzITjeox9iXLLVT8avKugUBaADqj7fbqY/21n9aUJ3MZRv1F88aDvQkn3gd7EV+3kc/O1PJL/UxYq6Ff6gXiSqscx3WqX6GSelyXlQlmcsPO2iPPatH/dkmACoEF2MNCi5GAAAAAAAAQLXtKaxyALp37QLQoqi1edgXvch5LR8cgO7pEu7vjh/oTqAhhdX+bviGAi0uZH8+lHIaf5CrQY1h3Zii0889iDeaK0L9GZLYxi+mSA/0IA4GT7Grq25ymmywXzw8UL1Cu0zLkG/ppD3ei3wxRVZJALo7BKAbolN2301PQt0FoF0/+5IWEMbSAeipWvyKO/46HTsO1Kv61pNw0RU3RIGxA2UD0HE/+ZLmk0a2qRaCAWjPt574AxYIQNdHobwaAss/AwAAqI3QItBFRUVsU73HhjXA04D9ngEAAKhnit944969exs2blAqlQTBBKCZsHPw9kHY4HNZdNg5bBHo4B20SalQ83miViN4W/+etvJUe5uPUsp0mYOkc78Vj1kvMVoxtVLHoHtyJBIlL6FT7Pj1ik//GXjvetPRq63P78ReOa2afV268Dvp0h/ly2/Llt+WL/9Zufy25a3vUmYfT5l+zLj4tnjiQUH756Q2nw5T6XEtGVzLmpDLFbEcbv5k4cf/6Z2wzkFZjAoZVlSsXfmbrv8yBWXVowdtNBosVgubag5zP+1cZs1n9HU4e6l1oB30jUKheHHiC2h6161bx043qMfYlyy1AwFoABqmFe3UR3qRn3TUKqucuXyztep4H/3+IuKJ19He5MbOugz8/geRhChqeY76eB8yrGfd1sm++olpssozl/nY58GRsE0AVAguxhoUXIwAAAAAAACAatvdlc4cL60sAD3YJz7Ri9zRWdecqHkAek0udrwnOfdBAWinPObtNuojPQg0nvK1txDf1QXP1HOZdz5jIxu9kCTdF8w67ynX82B34o2mClwQln6OmJAsQ4+UTj8Hu23vpHUrYtChONUstEuGjrM2F0MTMqHCAPTaPGx/N2I5BKAbnpN23w1PwsG6CEA3EQj3WF23ywag0/nCo3bPTU/8JXeglsWklq8Ei7kf1qEGddOTsNvqdnJ4odFecsf96EucV0cB6CN2z3VP/H4IQNc/kZGRI0aMYMJqY8eOZVsBAACAGin9l2oyMjLY1vqNDWuApwH7PQMAAFDPvPba9Hv37m3ZuiUYgMb1+ocHn0thQs+lBSPPJYtAl81A63CdWChXUbwX1qsO383tOTFB75aO3yqec1XctLtKKdNiWi06AkVRBoNBq9VJxQoeR6QxcbKG8yZs0U4+In/pmKT4a8n872RLbiuW/SR762fJ8p/Fy3+WLv9FueRHw4JrptfOaIrmiuMyNbiO1Kr1aIAGo4EyUWaLmdSTAq5EY4l95aD2w7/GNeuOOzKk878hpp+SJbfT6TB6zOHLP5cWag9WSQaaqXLKrgOtUCgmvzwRTe+nn37KTjeox9iXLLUDAWgAGqYVbWuWuXy0ocaq1MGedE1pIosq+cAyKqJRT7fw896PfGyQuQSPAlyMNSi4GAEAAAAAAADVtrur7kB3fEmWsgoBaGJHZ20rPTeicaPIKhfqzLxdqRdFfZSrPt6TmNtSUT4A3d8jOtID39NVh8ZTvvYU6tCmMQnSmEj6WOhXloG7tZMWte8t1O3vhu+j137W7SvUHeyOB9PP9xfKRSSxjSckSQ90w9HW9R20mwu0aK9tnbRGcTTbo5ri1bFrcjVoQiYkSysMQNPLVC/PhgB0g0MHoN0JB611F4D2lglAx3P5+6yum56Ey67ApZoW2vdqcA3pG54EdChU6A768oo7vpaH/c6TsN3ssMRymNHSAWhX3I/exHl4HQWgbR40zn0QgK5/ioqK2Jza7NkYdn8VcAAAAKBmCgsLmaeV4uJiknwK/lFLJqsBngrs9wwAAEA988orU+/du7djx3alUonjOHoBwGacK0OnnssKRp5LlPoKbVKr1HyuOLETd/X3nlVftxn4rmr2Ff7AlVIdoVWrtDpcZyxBGalgf0wQKxeJhS2G8IZ8wpl8nDPjsmjLX9ru+nvB8p8VK39R7fpbp21/bbv8Z/mS27KZXyuHrFK4k3UahZ4kSL1Bj45jtpjMFrPFYjGZTGqVJiaK17Qfb9Ud29S95vGbdEt+UHWdrkJd6eWfqSot/1y+HhyDLslAoztyuXzKKy+h6f3444/Z6Qb1GPuSpXYqDUB7PJ4NGzb8/vvvTLfbt28vXbpUKpUyW0OZ5j/++ANdCEwjEggEmF1u3LiBOq9Zsya49wPUJnjNTgQAoPpWtFUf7kl+3KHKmUtR1OJs1bHe5L4eRG3qQBFxuBd5v3qSqCWsT8V1pBe5tgPmVMSwI3vmGbs8Zm0H7ZFe9/vs70HnMkuf6FD1T1S+TjxbpczlB3nY0eBEsU0AVAguxhoUXIwAAAAAAACAatvVhQ4QVyUAfbyI2NFFN7+l8rkk6YTkKtWkVNnoeIlVSueMSWHkh+3Ux4qIOc3DA9BqXuSMZoqjPXA0mIfV3q66t7LVolh2R05koxSMM8QvWpip/DQP29ZJu6eL7kA3vLipAheW+TFSEtv4hWD6+VA3fGNHrC3FK24qP9wd31agNUtqGIBOxGI/bK/5oicdgBY9PAC9JlezrxBfCgHoJyEhiP3isTtp895wxx+0uusgAM0X7rE4b3sTSgegoxo1yhSKD9jc6CyXXXGXql9XXIFv6RF6XtWSeWJZEo+fzBMUSOQzdfrjdu+3HiYDHb5XpYUGg4a01+JK5wsjSz6oKAlAJ9RdANp93R3YZ3GxTaB+aNGiBZNRQ9B9thUAAACohcjIyOeff555cpk0aRKHw/71qnqLDWuApwH7PQMAAFDPvPwyndDdtXtX2QA0uosH75THtqOe5dF55+Ai0Pfj0ME7OIFLxQqpit9rnnjrP5t/9Jf4KccFgWyVUqbTBpd/ZtLPLANF6iilTKs1inOeFwz+mD/pKLf4a9GOv3bc+/fCpbcVO/7W8df/OnzmPya/9bNi8Y/SmZeU47eok9votBhppAxM9Jkuq9lsMqN7pJ4UC6QSdczQ1bKP/5nw7h3Lc1uk3gxChxnQaE0Wymqz0EVjbkuUCz2H1cPXgWYD0NNeo/Pla9asYacb1GPsS5baqTgAHdoa5tatW+gqCOsTWtc5JibmxIkTqCWUiq4gAD1u3DhmrxpgJwKAp4RAIMjLy0O37NdP1Ioc9eEi8uP8aiw6uzhLdawXua87UeM63JP4rEA7rYn8lQy2JqXJl7VR7+mG7+8R3vmBdaCI3NudGBkvYYf1zDP86MYj4iXHeunv9+lBbO+qm5epnJwmC51oZgvl1i74oaJajf9Eb/3E1CpkLnOxoz3pE7FNoP55sh8OhoGLsQYFFyMAAAAAAACg2nZ11u0vxN9sVUkAeohffAL9INEVD5au5E4ldbgbsbGDNkNHJxXYAHSPBwSgkzWxH7XT7O+Ko8E8rPZ20W3siBnFZZZ2jmrcCP0IpONHZht4k5JlLyRKCWGZDtLYiOcTpQe64ge74Rs7YG2NXPQwX02THe2Ob+1YiwC0OvbDdpoviogXkh6+ArQwak17DZqEpa2UbBN4jLKyspigzBN5p+OkzfutO/5A3QWgf/QmzC8VgGa0FIoO2Fzfuumk8jfVqWvuwHmH72UNbo7lCCMi2MMFSSIi3RzuTJ3+a2fcVXcgbMeKCw0DDWa/xdWUL2IPF5TGF6KtP3gT5tZRAPqwzY0ewl4IQNcnGRkZTDoNKSgoYFsBAACAWlMqldOmTWOeYtBLO6lUym6ol9iwBngasN8zAAAAZT3x/BZ6ur93796+fXtVqvAANBK8H8J8eb8R9UX9S2PzzobwADS6xTQYP1ZiS+cuOGvc+K/E3nO0KjWm1WI4oTMY0X+GkvSzUU8Y9bhRJlaRTn7+K8KBa/gTDvJePcudfU228Hv5oh/FO//W5dx/TF9zJ+7Nn0QLb0lnfCN/YbeiaVdMpyONlJFJPweTz0wA2mwymbSYNiZCENeeu/ym5e0fLbljNDqMHho6MR16ptPPoSqFCTozd5jbcvWAdaCZALTNJpPLXi+ehqb3gw8+YKcb1GPsS5baqSAAHVrF+datW82bN2cae/XqxTSG4s5IKN/MpJmnTqVj9KEvQ0LLRZfetzbYiQDgKYF+VkU/tBYXF9eHGPSKNqpDPYi1+VjVM5eLslSf9yT2dsNrVkeLiA/zsJZ6rowTIUUVGyGObRynjl2STY9kX7n+5Qv1OVxEvNcWPT3fH3OCJnZrF92B7vcHhrod7IFPSZfrRVGSWPZcSm5ET5doSxfd4R41fwhf9CJfTKk8c/l+e82RIvosbBOof57sh4Nh4GKsQcHFCAAAAAAAAKi2nZ20+7rq3mylqDgA/axLuLOzdl2eZn0etiG/qrWlo3Z1jjoFYwPQH7RVf94dn90sPACdb+Lt7aLd3VmLBvOwQlu3F2g7WQQxEQ8eaHREo6iyjyGYfpbs76o72FW3IV/T1shjNk/PkB3pptvaoRYBaE0MeizHe+AvJEqEZR9LiF4Y+VE79d4uuqWZEIB+Apj3OBiP/52OEzbv9boOQM8jjLJyR2suFKGzXK9OUhl1Pmn3DpCr+Y3LRJ9LE0VEjlfpzjv91cpAoyMftHmaC8qkn5EUCED/qUVGRhYVFbEX2+zZQ4YMQS3sNgAAAKAuuFwu9mlm9uxp06ZhGMZuqH/YsAZ4GrDfMwAAAGU98fzWhBdeuHfv3sFDB1RqlS4YgA7mnpn8My0YdaZbmMKDVfJlKAPN3KHvB/POtFJ36QA0riPFAmVcjuiN05Lt/w5M25iut+IaTKs3kEaTgU5A0zdGPWk0kFSwsxy389q/JOz9Dm/sDs7kY9HTz8fOusybf0P45i3Fsp9UC28JF3wnmnNdPO2cdNxWWZPOmE5LoqOZLBQdgKbY9DPNZNHrjUKeLGuobNkt3Qd/c/SbS6HRowGaLSYLHYA2W62oSsegyyahH6ZMDPo+NgAtk86Y9Qaa3tWrV7PTDeox9iVL7VQQgGZizXfv3s3NzWWbgph8c+n20ks+Dx8+vHxCmgEBaNDAMU+gjCceg36rtepgD2JNlTOXenHUwizV0Z7Enm54dWtvN/xIEfFRHtaU4Ja+bjFB5CsZcrR1X/fwXR5YwdVk8e6O+5Mm5URMSZcf6UmG9dzfHd/RVTfIL+ZE3j9hbGSjHk7Rls66Qz1q8ihQHetFTqhC5nJ1e83hIvoUbBOof57sh4Nh4GKsQcHFCAAAAAAAAKi2HQXafV10b2ZWEoAmBJEpGCdBHVutStTE+pUxklg6Z0kKoz5oqz7aDZ/dNDwAXeQQHOmmQyOpoHYGa2WWqqdDEKeKVXEj0Q8/D8lC06SxEc8lSNBDO9BFtyFX087AZTc888z0dNnhQt2WWgagc9THuuPPPzwATa943Va9pzMEoJ+M0u9xMB7nOx0nrJ7rrrgDVlcdBKAFwQC0J34hbiCiYyIaNYptVOZibSEQoRNddwUuOf3fVFZXXXEXnf7n1dqYRhW9d4BwGzd+Q0tedfkvO+PCDvLAuuaKO2R1Zwvv/5NYUY0acRo3bvxMIzRC1OEHT/xc3MBuqwU6AG11odPttTjZJvDkYBg2duxY9hqbPbtPnz4cDv03XgAAAIC6ZbVaQ+tAFxcX14dVfB6IDWuApwH7PQMAAFDWE89vjR8/ng5QHj2sVqt1Oh1Blso+h5TknkMVCkCj/qhKBaCZDDTJLALNZqDRHUKvU+sJSjVwpWjWFcGSK9qt/8wqGONWa7R06pkKBqBR6Q0G0mjQU1qNTiSUKnW8liOF3Zfwhn4WO35PxEvHo6ef5874hjfrKm/2Nd6ca/yZl/mvfyV46Zhk8PuSQCuNVkfqjYTRZDBb6fAznYFmmCy4hjIH5FMOqWZ9LVx0DV9y3ZHekcQxo8VqDhWTgabz0LXOQDMBaKlMOmfeTDS97733HjvdoB5jX7LUzsMC0KFM840bN9BVz7YGhVaGLr3Ac6iR8ccff6Ari91WAgLQoIEr/QTKeIIxaDpz2Z1Yk4spuVXLXIqiFrZSHS0i9hTi1a3DPYgPc+nAZekPLfTiqNebytEY9ncP7//A2luIH+iOL85SiWLuf2zRguTuLqRXmQ3rjAodGbWPCEhK94+JaNTDKdzcWXewR00eyLGeVctcttOgh4z6s02g/nmyHw6GgYsxrH9VCi5GAAAAAAAAQLVt76jd00m3uGUlAejaI4VR7+eojxTis8oFoPs4hYe74mgkldaO4O3WDtoPctSTkqQdTHyHLDq63NBlsY2fS5Du66zb31m3PlfTzshjNwRNS5cd6qrblF/zAHSCOmZ1G/Xn3fDnEioKQKNB7u6kWwIB6Ceh/HscjMfzTscJq+eaK25/HQWgd5udN9yBUzbPDpN9q8n2KWU1xcSym4NaCET7La6rrrivnf6K66Y7frXeLI+MYveskCWWs56yoVOHHaR8oVMftjpbi8ShSzGmceOeMsUOs32LybbP4kR9btVdAPqQlX6wEIB+sjAM69OnD3tdBaGLjt0GAAAAPALoqWfKlCnss87s2SNGjCBJkt1Wb7BhDfA0YL9nAAAAynri+a0xY8bcu3fv82Ofo6d+rVZLhgegdezvZQPQoSpZBDqsmAw0HYGm88+oCTeoZHiLZ6UzL/IHreJkj+O8e8vx1pctXckGgtCz6WeDQU/ScWiD3qhSYAKuVKEVtX1O1muloM970UM/ixy3O2LikaipJ2OmneVMP8+Zfo7zymnOSyc4U75QjPlEn55n1qLz6HUGijRZTGZrcAXo4CLQlMGiVmHdZygW3pB2fCU2fyrvvb+ZnvvEZLLqKaPJgnpawmLQ5VeDRlWh+zHoIDu6Z0Xf3PkL56Lpfeedt9npBvUY+5Kldh4WgA6FlStQOgCNMCtDM8I2MSAADRq48k+gjCcSg17eWnWgG/FRtTKXmaojPYjdXfGq156u+KHudOCyCV42cCmKfL2pgo5FFobv8rDa343YXKDN1N9fxkjNi5jfUokOEtYzVGiXvV3x4XESUcz9f+gyGLsUbS7QoYcf1r/S+ryInJBceeZyVVsNetSoP9sE6p8n++FgGLgY4WIEAAAAAAAAPA7b60EAurtdcKirLpRyrrhCq0HvLkAj176SIlVw7/9MhUhjI8bHS/Z21u3rrFvXPjz9jExLYwLQmFlSpRhoeRCArv8e9h4H41G/01G3Aeh9Ftf3nnh0wJvuwC13/DcOv4tz/90HRjOBCJ3ucoUZ6CuuuC/tviEKDbtPFUzW4OiYl8odqnShDodtrvZiaek/QjiNG49XaX/0xH/vDtxwB9Cpf/ImLMCN7OZaCAWg90AA+gkhSbKwsJC9loKmTZvmcrnYzQAAAMAjI5VK0as49uknCD0lURTFbq4H2LAGeBqw3zMAAABlPfH81qiRI+/du/fFF19og5gVoHWh3DOuu3+/bPSZKWYd6LLpZ1TBAHSwaASJqUjKrRy7SVh8kReXw+eKY/qvFG79d5NBcwJaHGcC0Hp61WiD0WjUYQalXJPURjt8lX7CXkXRUn7+jOiiZZxBa2NHbqZj0BMORL14KHrCgZjn9nGGb4wZsVG4/HJg/fXuA6Y1cSZSOoKgLEarnY4104tAmyxatT6utWz2N6qJe4V6H0+ijXhxl+zd36yt+5O4jgoLQFeYgWbqIR4QgJYsenMBmt6VK99ipxvUY+xLltqpwwD0mjVr2A0QgAbgQR72BMp4zDHo5dmqA93wj3I11clcKo/0wHd31VWx9nTVHeyGf9BeE7bcLCmKeq2JHG0KBi7D93pg7SnU7S3UTW8ij41kD4QOmG/hoyOgs4R1Ll376fVodcPixKWXno2OaNTDIdzYUYu2hvWvuD4vIiYkS3lRFf3hE8xcqg91p4/MNoH658l+OBgGLka4GAEAAAAAAACPw7YO2O4C7aIW8kcfgI58v7XqUFfdzCbysAB0e4q3k17dGUODqWJtR9VR+3qGjBCU+aFREhsxLiDZU6Dd10n7WXt1O2N4ThR5NU16sIt2Yx5mqk0AurXqaKHuufgKA9Bt1LsKtG+2lLNNj0bFP8yDCjy6dzpOWNzXnP79FmftA9CJPP4HpPmI2b3X5Nxncu43Obea7OayK0Aj6P/CIQr1l3bvZaf/a4fvgfWtK26XyZ7Cq8bbrDkiySGL8/rDj4lOh07aX66MeKbMnyAxjRv3lSkPml1owGjYaPDHLe4pmjp4JwKPjkZDuur07zE72CbwyBQUFAwZMiQvLw/d6dKlS8+ePUsvvcno06ePUgl/zQMAAMBjEhkZmZOTU1xczD4PBaGnp8LCQpfL9cTD0GxYAzwN2O8ZAACAsp54fmv4sGH37t07deokQeCYFiMIQofrkODaz3T6mcFmoEPCY9AEUToArUfFLP9Mog24Tq9SYu3Hi+dc4/ddIpbJpY2fiXVmRS/8Wv/hD82T21LotHQAmjQQWgOuM/gzqAFzzYuuUPOuqLrP46QW8VqO5bWdyus6j9d7BXfgB9FDPokauo4z5FNO//d5hfN5rUZwimbK1t5MPfV/vd87UdhxaKLVYzaaKbONXv/ZQJoxQjnsA8W869L8iQqpRPbMM1EpPaKX3yZe2W+yx+kN+uBy0RYzuqXTz7aSup+EDlUVktAlGWh0VyKVLFm2GE3v8uXL2Omua/AuZR1iX7LUzsMC0DExMSdOnEDtVQwrh47DuHv3bm5uLrutRJ0HoNmJAOBP5LHFoJdmq/YX4h+2r0bmckFL5eHu+K4uuqrU7i66A93wD9ppmuKc0j9akaLI6U3kBwrxvV3Dd6mg9hXin+VjPuX9jzxIYdR7bdX7CsN7lq+9hXT6c6i/TOwyqnGj7s5g7LKQHmrYLg+roz2IF6qQuUQDO9iNnii26VGCZ9VH57HFoOFi/HNcjAAAAAAAAID6bls+trujdlHzxxGAXp2tOtxFNzNDLij7L9cElDHvZav2FGjRYKpYaMzvZqvQMdlDBKEfq8bESfYWaHd2xFa3VrUkOOyGsqakSA921m7MrXUAuktlAejW6l0dtW+2gAB0vTZp0iSpVMrOZh35ou4C0FGNGgkaR4giylSZNc9ZjfrKlOcrDEB/54r72GDBoqLZParAy+FuoWw3XHFhhwrVFaf/rN3TTiRhdygltlHj0mMWR0RwGz/4YqmW+wFo06MNQMOVhcyaNYu9V2LOnDnsvdmzhwwZUq8W3QQAANBwoBdvffr0YZ+QHmT06NHsvceLDWuApwH7PQMAAFB9jzS/NXjwoHv37p05e4bUk5jmfgCaVioAje6w0efSSgegS68DTQeg6Qw0swK0Wk64MuSTDgpePSmIa6mSiFQ8rkAo5XZ+XbDuX/ET1iYQ9KrNBkxpsLqMXZ6zzTppW/ErPnGPOHOgQK7lRXMj7C1imw0TZk0Q5LzM6zw7ptvC6C7zeJ3mCPKniZo9K1HjAq4g2ts+etI63aH/avfFfw2avalTZteAyWaiKJNagTftI134nWLsBokrmVDIMW6sQCiLGvqBeNU/zF0mk7jOSKefg1VZABpVVQLQqOyog1QqWb5yKZreJUuWsNNd1+C9lDrEvmSpnYcFoBFmRec//vgDXRRsU1BMTEx8fDz7RVAo2Xzjxo1WrVr9/vvvzH30mpztEQQBaACqCD2NpqSksH9uPhpLWyn3d8U/bFedzGUL5eFu+K7Oukprd2fd/kL8/bbqJjpO6Q8VSWHUaxlydN49XcJ3qaBQ591ddGMDkqiSTyhjIhr1dQv3daVPFNb5gbUPHaHzg2KXNuGGDtj+ruH9H1ZHuxMvJFUhc5mjPlhITxTb9CjBs+qj9ig+HAwDF+Of42IEAAAAAAAA1Hdb87FdHbWLmj2OAPSqbNXBLroZGXJ+2QC0PDbilVTZgc7aLfkYGk9Vaje9srIiOuL+oCWxjYf7Reix0ItDd9BOiJe65DEuWYxHfr/cshjUOLeZfF8n7YZczCSueQB6VWvVkS668RUEoAWR77dW7wyGy9mmRwPeBKmNwsLCR/EGxxdm51WHb7/ZUfsANKdxY21UlD46hoyOZgqPio4ut2Rdo2ca9ZWrztk8lxy+i3bvA+um0/+h3iyLqMb/9k4Od6PR+q3TH3aoUKHTnbV5OoilYQNCX4ojIshSwzZEx8gja3jFlYZHRx80O684fHtMNrbp0YArq2KvvvpqRkZGZK3/DwcAAABqDMOwvLy8SZMmsU9OpYwdO5a993ixYQ3wNGC/ZwAAAGrqEeW3BvQfcO/evfPnzxmNRo1GUyYAHSYsA11qBWg2Ax1KP4cy0CSJa/WYVtN9pmjBLUGXV6UqBaZWaZRKpYAroRK5Uw5oPv17RmZvi1ZHtOphnrLdteIn6o0zim7FEnNAyo0V8TjC2BhODCcad3L9ucL0vsK8Vzhd53KyxgrTe0n9rVR6o1YhUwkF4qgIjoyIbjWUt+gL+8m73fb9Ouj5N9v4kp2EXTpht3zmJUnWQLUO06OBKlXK2CiBOztm3lXN7POmuGZolPcXgb4fgC7JQNOp6DJVOgNdLgZto8tus1uCAeiV77yFpnfx4sXsdNc1eC+lDrEvWWqnggB0IBAIRZmbN2/ONHo8HmZl6J07dzL55tBa0aFVn6dOnUof8eGrSv/xxx/l14euAXYiAPhzQT+rulwu9g/NR2ZppnJfF90HbdVVz1zOb6E4VKjb2Ulbce3qpN3fVbc6GLhkdw4ihZGvpcuCQcnwXSquPZ3RODWk8P4HB3ZZ9LpcbE91joM67+qkG+YLi10+083G35Cv2dul8seF6kg3/PlECa/sZ5dhIho/824b1YGu9AHZpkcJnlUfqUf04WAYuBiRP8HFCAAAAAAAAKjvtuRhOztoFzZ9HAHo97JVBzrpZqSHB6CR7hb+rnxsWx6GxlOV2tVRu6SlIjaSHXRMRKPeDiFq3BrcujlXs6mdBt1uycXCK9hhez62vn3NA9DxKnrJ6sOddeMDFQWgV2erd3Sgw+VsE3iMKn1v6JG+u3E8mNDdVxcB6FSeYIPBct7qPmFxoTplcR0yO2yxD1jdfGAwAP2Nw/eV3fvA+tbpX2e0mGPu//NVlUri8rdRtmtOf9ihQnXJ4Tttc7cttwJ0bOPGg2WqM1b3yeCwT1icF22e1zUEu7kW8OjoA2bnZYdvNwSgH72pU6ei25kzZ06cOPHll19+/fXXmfaQKVOmPOoFSwAAAIBKYRjWokWLIUHTpk1Dz1DoDvNU9ZixYY1HI5QpKb/eHqgB9nsGAACgRh5dfqtv377oye7ChS/NZpNGo8YJNv6s1WlRMfdDmOTzfQ/MQLPLP9P30S+1HE/Mk75+XjBpv9AWr5ZLNeiFBNpVqVQJBMLmQzgrb9nnfZEy6h3HW985lvyoHbxKkpQrR6eWClV8nkgoEKJnYalUJuSJxWKRAud2m8Udu5Hva6ZAY9RqCJ2WPo1Wq1UolNwYYXR0LO6L7vGG5JNvU8//34APTvYe+4FtznXps8vEJjeO60g9YtDLZQqeILbbLP57/zQMWEy3USY6/RwegGaqJAONbkvXQ2PQNqvdbmMC0O+tfhtN74IFC9jpBvUY+5KldioIQCOhKHOYu3fvjhs3LqxP6AjlI9Eh5Q9Ym9Wg2YkAjwb6M7z83xotLi4uKirKyspKSUmhgjicB/8bm6A89NzAzuNDPJ7oM2NppnJvZ937OVXNXJLCqHnNFQe76nYUaCuonQXavV10q3I0GeUCl9PT5Uy0MWyXimtXsH9PhzCi5JLnRTV6LkFCBzfLda64dnfS7irQDfGWj10K1ufRCc6w/uXrcGHVMpetVfu70BPFNoH658l+OBgGLkYGXIwAAAAAAACAR2tLrmZnPvaYAtBZqgMF2hnpsvIBaIMwckFT+b4COruMhlRp7eqALWlxPwCt5kWgw+6gI9SavR0wdBxU+x9SaNOBThh61BZJjQPQseixHOqkrSwArUJDWggB6Cehgvc4HsO7G8fNjisO7z6zvfYB6CZ84W6T/abTjw543eG76fRdtHlcMeFvPeujY1YRxot2D6qvHlLoCAdNjhyBmN2nCoqk8hNW12WHN+xQofrG7v3S5n5RhfEjIth9gmIbNR6r1Hzv8t9w+q45fJcc3luuuHlaPbu5FvCo6ANmBxrSow5AgwciSTIvL2/KlCns5RQ0YsSIR/RvHwMAAABPFzas8WhAALpusd8zAAAAZT3x/Fbv3r3Rk93FixctVotarcLxUgForZb+vaxg8DmIKLktHYAm7i//jOg0BGFSDnpPOPemIGeEXC7RqDUaXTCGrMG0vGipLU088xS19Y8m7/7ieHGPNGuoTG/WKKWYRk2fWovp1EqNUq5SyJRyqVLMVwoE/D4LY145wvNlYBpl8LQlv1BhGCaXKfhciVDC97TmjFuN7fy1zbH/zv/0Tover7sJSq8jcANlMFvMaOC8WJE+Lmb6ScWb31EZBWislMVmZooJPZfOQIdFn0tXRQFomfT9D99D0ztv3jx2ukE9xr5kqZ2KA9CIx+M5f/48sxQ0cvfu3X379oUWhC69SnTp15+h9j/++IMkSbY1qF+/fjdv3gwejAYB6HqIw+H06dOH/TM9qLi4uKCg4LFlc/+sKngCfZzRZ8aSTOWezrrVOWpFFRedFUbNba440FW3vUBbQe3spFvVRp2hvf/ZBLpSSVHU9HQZOt2Ocv0rrd2dtMtaKeXc+58sJGpiN3fQ7OwU3rMqxSQ4h3jFkpj7B4xq3KjQLvg0F6v0mIcK8eeqkLl8p7VqXxd6otgmUP882Q8Hw8DFyB4OLkYAAAAAAADAI7U5V7MjH1vQ5JEHoAlB5LtZqv0F2uIHBaCRXCNvY3s6jY2GVGnt7IC92VweCkCruBGvpcp2d8A+bK2akiQdHxA9Fy+uoF5IEI8LiNFezO7VFa+KRY/lYCftuLiHBqDR412VrdpOB6BlbBN4jB74Hsdje3eDDkDbvftMdRCAzuAJd1C26w7fUZPjE9L8AWF6h6T00THs5iBddMxK3HjR5vna5vnq4fW1zXvJ5pmi0lb0tkEpUY0aLdDq0anRkcMOVbq+sXvPWN1jlRp+4/sHjmnUuLNYtjY44E0GK+p20+GfrSXZzbVAB6BNjst2727KyjaBxy4yMrJFixbMEpuMKVOmkGQdfH8BAACApxqT1XhEIABdt9jvGQAAgLKeeH6rqKgIPdlduvSNzW5TqUIBaDr9zAh+WRZeEoNmg8f3iyBxglkBmqSj0Cq5tmV/8eyrglGfiUmzWiFXY1oMJwhMQxrMZJs+5um7PCt/tHz4m2XpNWdqR41UgCnlGIZp6bWaSdJIGQ0GI4mTuJbQaUilDBNJeX2XxU4/I4xvpdWo0OmYdaZpJKk3oN5GCu2olKu4URI5yRn2Af+zv1i++K+uR38bPe2DgtQct9FiNJkpymxQKlSx0bzWY7kr/4aP/8xgsulRq81utrnMNq/J5jFZHSXp57IBaGahaFShlvIZaDSZFjMdgP5o7ftoeufMmc1ON6jH2JcsDRg7EaBOKZXK559/nv1jPRh9zsvLg3UN6sQDn0Aff/SZQWcuO+lWt6lO5rKZ4kAX3faO2ofVrgLtx+00qaUCl4iSF/FaunxvZ92Ocv0rrZ0F2q0dsBwDL3S9i6Mbv5EuRyeqwdGYQsfc1ZGOXXJKPjpEIhrRS89u6UAnMsP6l65DXfHnEqqQucxW7etMTxTbBOqfJ/vhYBi4GOFiBAAAAAAAADwOm9trduQ9rgB0K9X+jtritAcHoAXRjYd5RWgw2/OwTe00aGAV1M58bHG5APSBjtrZ6fIax5qrjg5At1IdLKgsAJ2lQo9lYVMIQD8BYe9xPOZ3N47VaQB6J2X73umfqyU1UdGoJaLsJwC66OilOsPXNm/F6Wemrjl82ylbEo/P7lyhHKH4oNlx1e4LO0j5umT3nrW5xyrVpTPQ6B7zr2Wl8wQXrJ7vnBCA/rPhcDgtWrQoLi5mrjJ0JyUlhd0GAAAAgLoWHR0dCkBLJBK2FQAAAKhTTzy/1b1bN/Rkd+XKZafToVKpdOwC0KUS0A/KQON0BjoYgy6VftYFS6sjMTVdShlhjlOM3yacdUWQXqiUSTRqtVqj1uEEmd7O/OJHvtU/exdd1/VezBvwNm/1HW/fGS6lUqNRa9Gx9AwD/R9dBqOBoNRKrUjGG/ged8bX4oRsLabG0Raj0Uj/olGU0WSizCaT2ainZEKNo4lg6ueCkRuiexSL3r+YePHe4N23Ro6c2SYuw2k0U4QBF/LFSn3s+O3iFb/p2wzGdRhloqw2p82b4vQ1tzvTTDavyWoPXwE6FIB+UAyaZbPbzGazVCZd+8mHaHpnzpzJTjeox+gIcMPGTgSoOxRFlV7OoKio6InEAf+swp5An1T0mfFmS/nuAu2q1ipF1T4s0wsj5zaT7++s3dYBe1jt7Ii9m6V0ycuszGIURS1uodjTCdtern+ltasjVpwhFUbfv9iz9dytediOjuE9q15okKgmJ0klMfc/p0AnyCa5G/I0FR/5YBfd+HgJt+LMZaNn3s5S7e1ETxTbBOqfJ/vhYBi4GOFiBAAAAAAAADwOm9pptudi8zMeeQCaFES+m6na10H7RqqM/5DQsIYX8XxAgsazI5fOQFdQO/Kwxc3KBqBTZPuDAWisan+PtjbilbHosRzoqB3rrygA/V4r1bZcCEA/GaH3OJ7IuxvHzHRCd2/dBKAFOygbkx6WR0axrSU0kVGLdORFu+eizXvBesjQiwAA1lZJREFU5qm0vrJ5rti9b+EGLCr8UGGssbFr9KZrDl/YER5WdAba6hqjKLMONCOJy//S6rlJPwSCbaoFPCp6v8mBTrcLAtD1A4ZhkyZNYi43BF167AYAAAAA1CkIQAMAAHgMnnh+q2vXLujJ7tq1q263W6FQMPlmbZn8M41uK1MlGWgCFU5/TRB2vyGlPZ75rLrNEFXLnmpfE03By5L5t4R9V4hwq0qhVCnkGm8KNWiOd+W1+Hd+NT2/VdakSMwXcvWJEVOOKN75IT6lvV6jJEhCj0pP6kkS3Rr0hIFEpTOWCUC31mIa3Gg0mEwmimLLhCr4pR43a3DFkFWiN87zm/TmxXJjqZSIoUsVO3/J+ube2I9ODSoc0cTmtSg1ypgYXnL32EW31FMP6tM76rKfxbtO0vd5w95vlq9ggj8+y25xmOgVoEsy0GHp51CFZaBtNjoALZfLPvlsLZre4uJidrpBPcamgBswdiJAHUF/FLB/sgdXMUhISGA3gDoSegJ9stFnxpst5Ls7aldlqxScKmcum8r3d9Juy8ceVtvzsR0dsBWZSq+CXqUlxCKNWtBcvqdAS8cuy+31sEKH2tBek6iOZY8S/IxvWaZyZwf6RGGdq1jomGgMExMl8tj7jzqi0TPZet6nbdVoa1j/sDrYuWqZy1aqvQX0RLFNoP55sh8OhoGLkT0oXIwAAAAAAACAR2oTG4CWPZYAtLLiADSi5kUMdonW5aj35GNb2mk2Bqt09BkVatmR+9AAtJb3GALQMe9kKoMBaFGlAegFTSAA/QRkZWU9wXc3jpntl22evZRNElEXAWij9TuHbw5GKMsGoFWRUfMw8iur+2ub54LVXcW6aPV8Y/Ms1entsZzG9N+4DhfdqFGAw1tNGq/YPOjgYbtXUJdsnrMW91iFRtC4zFs5KVz+lxb3TYdvNlY3K0Dvp+zoXLsMFrYJPGkcDmfIkCHMu4qIz+djNwAAAACg7jwwAJ2fn49a/vjjD4Ig+vbte/PmTfQlcuvWrREjRjB9Jk2a9Pvvv4fa27dvz7SX1rNnz/PnzzN9kNu3b7/44ovstlLcbnfpbvv27WvWrNmUKVPQ/fKxbNR5w4YNoVOjYy5dujSsj81mW716dagPcunSJXRMdjMAAIDH7onntzoVFKCng2+/ve7zeSsIQNNQY6kAtK4kAI1aKaOx/bOuwUuNoz9TTj4ofvWUeOrn0ue2SIrPauddMrceYtHYlJRb23m0e9HJxA//7nzjtKrjJKnFo5KKVJxoYUxsTKvRMe/8anlxnZukdISODkCXKjoDbSCNGlUwAL2KDkAnBgPQBqMhlH6mjMEMNGI0K2V4097CWZdEg98TGe1qIVcaE8kXyGOTusRO32I4+e/Cs7+Pn7OuR9M8r1gmEypjh32gXPK9ZfIe7ctHpDO+Us75mpz7pWfh+YyX1zVrmus1mdgAdJnQs6VMMQFoS5kAtEmhkK/b8Cma3tdff52dblCPsSngBoydCFAXlEplaO1n9OqdJOvgTVoQBj2B1ofoM2NRc/mu6mQuSWHknKbyfZ20W/OxCmpbPr2k64pWCk/ZpWfNkqj5zeW7C+gOYbs8sJjj0AHHkg/40G9FdgG9qUN45yrW9g505nJiolQWe/8Du8aNGrUmuZ+1Ve+swmEPVC1zubKVak8BPVFsE6h/nuyHg2HgYmTAxQgAAAAAAAB4tDa2VW9rr5mX9sgD0AQ/8p2Wyr352OvJUn6pf0mnPE5ko2yCMyNVuqWtek+eZkd7zZZ26s1t1Zva0rdb29EtBzpgS5rJY0oFoKcnSfflY7PSZFr+Iw9AB5TRb7dU7O+AjfGJBA8PQL+bqdzaXrMgAwLQDc4x0yMPQMsjI2do8AvVTD8z9ZXVfcXm2Wqw9JDI7bGxqsgoQURjYUSEJirKFcsZKFPsoWzVTT8z9Y3Nc8bqHqNUCyLuv5sDAeiGIDIyMpSBLi4uhs9RAAAAgDpXcQB6+fLl6E6YF198cc2aNewXpYwdO5bZnfHAPsiRI0fYHkFM0DlM6NRhAWhmYOXdunWLINh/FcTtdt+5c4fdUFbYCAEAADw2Tzy/1aFDB/REcPO7m3FxcUwAmo07szAsWOxXwQx0SQyaDkCj3wkSb9uPen4T/soXmuKLqvnfShf9IF38o2zR96iwBV97X3w3p+v4xGlbE9f+LfDmt3i/ZVJ/pkIp18glGrUKQyflc0RaG3fUeun7f/G3HmjUqHG9Qc9WkAHRBwPQct4gJgDdJrgCNGVklnymEGMwA20042pK75A+v1P46klBehe1Vq1HQ9Vo0OmU3BiRiuK0G8N/+6zvq/8beOjn8UOnZzXtbBj6rmb219jCG+r5N2RLbsuW3VYt/Yl86wffiptpEz8OJDa1UhSdgX5Y+jlUoUWgbTYbGphSqdy4eR2a3mnTp7HTDeoxNgXcgLETAWqNw+GE/vU2dKeehALBI7WomXxnB+171clczm4i31ug3ZKHVVxb8+ho41uZCm/52GVT+e6OdIewXcrX9nxsTRuVVXL/ww6DMOr9bBVqD+tZxUI7opqYIJGVeryNGz2TTXA/zVHvqNph93fSjgtUnrlckana3ZGeKLYJgArBxYjAxQgAAAAAAAB45Da2UW9rq5n7eALQzZV7c7HXkqX8qMpPpuNHtjdwx8eJFjWRr81Sbm6r2dZOs7mt+sNWyvnp8lFeUXMdJzRmNgCdi81KlYWtAI26oB+S0G3NKrhv+DuuAWX0yuaK/XnYGG+FAegWyq1tNfPTIQDd4Hxusl+yufdQVnGtA9DpPMF2o/Wmw1s6AK2JinpDo/vS6vra5ka3Nauvre7LNs8Bk22hlpyk0kxWYUt1+iOU/TK9SnTND/uNzX3G6hyrUMsi2ceewuWft7hu2L2zMJxpqQ08KnofZUNn2QkB6HqGw+E8//zzzKcpU6ZMQV+yGwAAAABQFyoIQDN27tzJtMfFxZVeU3n16tVMe8+ePZn20kfo27dvWLfQiZBQEDl0zLt374bWlg4dECl9zFDnW7duhZZzDnUO5aqZ4HXpA6JTM41//PEHrAMNAAANU25u++AzyPcJCfFyebUC0HQGWqPSpbbHB72jmbhfUfyVas63kkU/iJbeli77Wbr0Z/HSnxSLb1GLL8etvtnkvTvW5zbLMnpKMVwtE6tVSg2CjkDguFKh4nGFSYWchdfI4qNeixfHtWT5ALQ6GIBmV4BmA9AGk5kymehi1oE2kmaFDMt7UTjvhrDnXKnBROgwgiRItNlgMGKYTsiXc3lCQ0JMv7nS7T+02vNbj1cPWiYekr1xQbTwO+GSH2XLf0YlWXZbsvxnzZLvzDNOW3u/RtlcJspcSfoZlYXOQN8PQKtUqs1bN6LpfeWVV9jpBvUYEwJuyNiJALWGXmwz79cVFxdjGATFGoSFzeQ78rH3spRVzVwKImdnyPd2xLbkaqpSO/M1yzMftPRsE/nuDtjWvPD+pWtrcPdnHYLYCPYyj2j8zAivaCsd6AzvXGltztVsy9Nsz9e8GC+Rc+5/VIcOnUVyP2mj2pEfvsvDan8BNi4grkLmUokeI+rPNgFQIbgY4WIEAAAAAAAAPA7r26i3tNXMeQwBaEHkyubK3VUOQDNQT7skOl0Tm4VzW5PcLJyTqo4xi6NCP48xVJyIVxOle3KxmakyrGwAOk4ZO8ojHuERDXfXpNC+/exCm/T+339FmAD03mAAWvjwAPTbLejc9tw0CEA3OJ+bbJes7j3GOglA87cbLDftZQLQ7YTiEybnFavnS4urNnXB4rpocaOhXrZ6UH1jdaMvUWNYt+rWVavnMOVI5PKZ0bIBaFvdBaCNNjRUCEDXQ1KpNPTvaebl5bGtAAAAAKgLFQegwxZgDq3WHLaKcyhz3L59e7YpuBJzKILMCCWYy4eVS++IPHAAD+vMjCrUznQLGzl6mKmpqewXAAAAGp527dqiZ4cff/whOTlJLpeXC0BrmQA0m4EuCUAzGWiVTGt26Hq8QY5aL3/5mHTmJfk7t93v/mJb+pNk6W3JW7+ol/2sePMn5fxvNa+dxDpPUVAehUyiUshUGo0GHYwgCDIIHU0skMkwXs/FglV/c3Z/xaJR64LB52D8GTGg/+gAtLhsANpQKgBNF2XSqQz2dMkrJ4QT9wnjszFMRaKzoL3phaJRV8pEknqVQiPgSAUSXqA9d9hq+YuHBK+c4c+5olrxk+Wt25plP4vf+UW76g61/GfF0p/Ucy+TE7cbmhcYjOhUYQHoMEwGmg5AW2w2GxqQSqPaun0zml70jMxON6jH2BRwA8ZOBKgdl8vFvFOHPMHV/cFjtrCZbEc+9m41M5d7OmKbgynGSmtLrmZHvmZZi3KxS3HUvCbyXcFIYtguodqer3krU6Er9e+4umXRH7dRb8+v6tlL17Y8bHueZkKCODxwSXA/bqNCm8L6V1D7CrTj4sS8kn919oEiGj3zVqYSPUDUn20CoEJwMcLFCAAAAAAAAHgc1rdRbWmrnpP6OFaAXtlMsTtXU60AdBUFA9CSPbmamalSjFfmx8hCM/9wB+xAvmZvXk0K7buutaoVUWYp04AiZmUzOdo6xiMSPuQvoQYD0IrNbdUQgG6APqcebQAai4xeQ1DfWN1hyeP6UBcsrq8t7uU6g6AxeyXSAWhzna4AzQSg9RCAro9CH6sUFxcrlUq2FQAAAAC1VnEA+u2332ZaGKH20BLOjLAI8sPweLw7d+6gnkwA+oGnZoR6hjZV0DmUq2ZGxQSgkdWrV2dnZwcCAaYbAACAhqxNmzboqeH27Z9S01JlMhmbeMYw+vfgHeZLBp2BRoIZaUyllYvV6XnkgLd0ozaJXzrOW3Rdc+5f43f+vfubP0nX/6XZ6f+Y+vFvyYt/Es65Jn5uuzixrVImVqs1KkynwXE8lH5Gv6NSqVT8WJGjJWfaKdWiS25/cxzTBBeBZgQD0BqVVizjDVjFLf5anJiDlQ9AG/UmNabqvVg46zK/40QFOolOS5/FVIJCvdAORkqHkSKuSqbh5b3CGbUtaurZmHd+jP/iP0e+f8ex/GfF4X+MvPSfC9fcsb/5k3j+t9qpR/Fe0+glpI1G00PTz4ySRaDpADRFoSFu37UNTe/kyZPZ6Qb1GJsCbsDYiQC1EBkZGfrn2rKysthW0AAsbCrbkYe926oamctZ6fI9HbDN7TVVqnb0LTrFA2OXczPku/KxLe01m4LdShdq3J6H5Rl5USWfR8ZENHopUbqlPd0/rHPFhQ6+NRfbnotNCIgVsWUeZhbBWdtatSM3fJeKa19H7Th/FTKXLZXo0aH+bBMAFYKLES5GAAAAAAAAwOOwLlu1uY169mMKQMt3tdNMT6z7ALSSE/FKgmR3O82M5PAAdJ6euy5b/XEr1doa1WfZ6hVN5U2xWPZwQXGKmBXN5Hvaa0Z7KlwBupliUxsIQDdERynrN1bX7roJQAu2GSw37J45GK6MvH+0fJHkuMn+jdV93uKsV4Ue+EHKmsEXsAMNBqDPmZ3f2j0z6yIArYuK3mu0fm117YAAdH01duxY5pOVPn36sE0AAAAAqLWKA9BhQeeK28sHoN1u97Rp07Zv337+/Plr164x+yJMADosD11a+VGFOleAGVUoD10aGtvOnTvDktMAAAAajuzsbPR08MsvP2dkpEulUjrZzGady0SfGXTwOQhTa1VSjVwmyxtu6rlQPmqjaNLRmJlfi9f+nPT2T7Z3fjZc/dfS739fv+a3xAW3BHOui186Km43SqFUqdAxSZIg9Uz+Gd0yd/Q6nU4qlgslgtzJ3Ld/Mw1badUSOoJg88+IQW+gV4CW8Qa8xy3+WpSUU24FaMqkkhOJBaIZFwVjNojcKTqtmj66wWBk0s8IhXqhMpr0OrNMpDIn8gvnc0dvj3n5RMzi64b1d5ou+0n1wR3/D79vuv6vBR/c0S/6QTD/umrq55qhy0wOr4Ek6JWkg0ln5vZB2AC01UgZ0Tzt2rMDTe/EiRPZ6Qb1GJsCbsDYiQC1kJGRwbxHN2XKlMhSbyyDP72FTWXbc7F3MquRuZyZLt+dj21qR2cZq1ib22t25mFLmyu8ZWOXFnH0nHTZrjw6mBi2CxrVrDS5vNSommk5n+ZotuVW79SotrbHtrXHng+IFaWWm0WyCS4TuAzrX2nt7aAd6xdzK8tcLm+hRI8a9WebAKgQXIxwMQIAAAAAAAAeh8+yVZseSwAa50e+1Uy+s51m2iMIQKuCAehd7TTF5QLQGm5EgjImoKhhxStjvLJoWWyZH9tQO3osu9trRnlEgocHoFc2U2yEAHSD9CgC0LMxXFHqfeqYxo0XYcRFesXl8AjyE6yvLE40nldVWnaUQWwA2gYB6IYCwzDmwxUE3WdbAQAAAFA7jygAzePxLl68yHQu75EGoJndi4uLS0euGbdu3SIIgukDAACgQcnMzERPBHfu/NqsWVP0zEKHmyul1mqUWrlEKZNLujxv7jpLPOwT4Qv7oqeeinn9ImfmVc7yW9jevxV+dqfZwluSeTeEMy4LJx8RdpwoU2vUaG96wWc9waafSzLQqDQaDT9Woo/jjtsqfetHR5OupEZFJ6DJYPwZ/VKrMBETgL4oTmpLB6CNRjoATWefKYrUUTqTfMSngjcu8LMHqbQYgeM42pGJR9OM7C1qI7QGIV9sb8LrOo8zfFPUxCPR085xZlzmzrvBX/6jfsdfO3z8q3vRD8IFN0WzL8tfOqwestzgTzXgOGk03o9TB2PQ5ZLQwUWgrTYr6qnTaffs24Wmd8KECex0g3qMTQE3YOxEgJricDjTpk1j3qBLSEhgW0HDsKCJbGt1M5dp9EqxpTOIldbGdvTqszvzNEubKbyy8KVn52TI6dhlsFtJZ/XGtpqm2tjQ9S2MbjwrTUYvN9tOXfrIFRc6FNplW64mGLgs8wDp5WazlduDgUvmvFWvvR0wyFyCOgcXI9Ot9F6VFlyMAAAAAAAAgGr7LEu1qbV6VsrjCEAvbyrf2VbzaqKUU+HPLTXABqDbaoqTpBi3Sj9G1gYdgG4q391OM8r98AA0P3JFU8XG1uq5qRCAbnCOUNZvLK7dhjoKQOstN2ye2ZoyAWgkkcs7aKRPdN7srCeFBrNNbzZHl1kxnQ5AmxzfWj0zNXUXgLa4dpAQgK6/+vTpw3y+kpOTwzYBAAAAoHYeRQA6dEzUsm/fvoEDB2ZnZ6empoYlnh94akaoZ2hTqHP5tHSl0KlXr16N9kXCRg4AAKCBaNGiOXoW+O2331q2bCGRVh6ApjPMaq1aiUnFMqlUXDDG3OFVcf93RKO3RE48HPXqmdg3LvJmXubPuc6bjeoqf+YlwbQvBc/t4bcdK1Wp1WqNGsdxOvIcCkCjCjagdoVcyecLmgzgLLihm7TDZrDqcJ2epBPQ4QHoxLZoKLgxuAI0HX82mpRybauhQnTGASslVg+uxXB0SHqDmWJWiWYYDZSBNKGtfJ7QlMjLf4074KOYcbujXjoWPf08B412zjXB3Bt0EnrudeGsy4LXv5Q+v1PZf4HRk0AHoPUGPTpI2QD0AzLQTAAax3X7DuxB0/vcc8+z0w3qMTYF3ICxEwFqyufzMe/OwevqBmhBhmxrO83bLRTVyVzKduZqNuaoq1ub2qp3tNcsbRq+9KxRFDUrVba9vQZ1YHruyNVMCIgF0fev7gITb10b1ZZ21Tvv5rZ0PRcnkpVdbjaL4KzJUuxoH96/irUnTzPGL+JWuHgTnblshk5BD5htAqBCcDHWoOBiBAAAAAAAAFTbp61UG7PVs5KljyMA3US+PUddnCSjhJFqboSGV6vCuBHoIMzfAVVyIqbGS3bmBAPQZVeAfhQC8hj0WHa11YxyiQRRDw9AN1FsyFbPSZGyTaDBOExZv7Y4dxksdRSANn1rc8/W6JTl/qXCl5TYeYvjgsVxzvzkCw3jlNkxSKZgB1cihcs7Z7Jft7pnaXRsUy3ooqL3GC0XLc4dpJltAvUPRVHMRyzPPw+fqgIAAAB141EEoEPx5bfffpvpwIiLi/v9999ReyjEvGbNmtI7hoROVHpUTOc//viDKLuKM3oIgUCA/SL45bRp08L6PGxIAAAAGoimTZugZ4G//u2vWdmtxGJxxfnnYPqZvlXKVRKRRCQUZvcytn9R2m2eeNBHsWO2Rbx4OHLKyZhpZzmvfcl5/QL3tfPcV89wXjrOHf6pIK2zTCFXqTGVDtcGE8/B6DMjeIckSXR2oUCqonj93hWu+NWcO1avUuJM/Pl+APpdbvFFEbsCNBOApkw6jdHkl07cz59yTJDeRYNp6EA1vfxzSfqZXQfaSBn1dGEajM8VqvTc7Od4PVfEDFsXNX53xOTP6QA3GnbxRVS8Ny5wp53lTT4qHvKRtMdUymw1kDip15MGg4EJQNOHfGAG2mK2Wq2oG6knDhzej6Z33Lhx7HSDeoxNATdg7ESAmioqKmLenWvRogXbBBqM+enVy1wSgsiZqTXMXG4oiV2+2VThD8Yu0dXLXMAWcRQ67FZ6rVn15raaNdkqv+J+LlPDi1zSTI7GGXbAiotOcLZRP+cXy2Pph8acK7Jxo9YE58Ms5fZgGhINqfQuVSw6c+kVVb7oLGQuQXXAxVh6lyoWXIwAAAAAAACAavu0lXJjtmrm4whARyzPkG3IVn3QQjE3RTorWTo7pVY1L1U2PUGSrKJ/SEM/Ok6NF+/MUb+RJHmMAWj1KJewwgC0HD3eOckQgG5wDlOWugtA87fqTd9aHxyAJqOiN5Gmr83Oc6bwODJTX5qdaCQXH96h6oUO8hW9zHN4O1PnTQ609QPcIC33kJO5vLPBAPRMdd0EoPcGA9DbIQBdj0VGRob+kU2lUsm2AgAAAKAWHmkAGh2zWbNmTB+3233x4sXg3vcD0KFINNp3xIgRTGPPnj2ZRqT0qEKdww7LjH/nzp2oZ+jUt27dCvVBpkyZQh8OVoAGAICGKj09HT0L/P3vf8/JaSMWi0IBaI1Gw94L0WAaFfpFB6DlUgV6cuFy+L50bcEkvN0kYc83RQM/jBq5ufFze+gY9OTPo1FNPBI94WDMhIOCsRtVLftgGq1KLlNhOg2hv597pn9n1oEOUipVPK7In8t5/byy+LTNnqDTqpkloNkA9MD3uMVfi5Pa0StAGygDZaKMepNSoek8XTD7Gq/7TJnehOu0OKknKBO7/DO9RHQwAG3U0xlog55SiDGBQEz6uPlTRd3ejO29MmbIJ1Fjtke8cCBi8tHol45Hv3w85qVjnEmHhSPXi59domrdy0wQepJejJqu4NHuZ6CDMehS6BWgLQaDAfU8fPQQmt4xY8aw0w3qMTYF3ICxEwFqJDIysri4mHlrTiqFjycanLlpss3tNCtaKJhgYqUIfmRxqmx7rmZ9jrom1YaOOW5tRy89O9QlGuYWDXfTtwMcwtlpsk1t6a07crH+TmHpfxt2gFO4IUe1qW31TooOta61emqitL9DGDrRKI/4/UwlGsCGNuH9q167cjWjq5C5XNpMsa09PWa2CYAKwcVYg4KLEQAAAAAAAFBtn2QqN2SpZjyGADQvYkWGbEMWfbptrVXb2tS2drVVo8G3Ibjo4MrYiKkB8Y426jcSH0cAOk4esyxDvjNHPbLCAPRbGfL1WarZSfAOY4Nz2Gj52uzcpa+LADSXv5U0fWtxz1Y/IACNPCuWnabsX5kcdMQ5WOdNdFj5qsX5rcV1zmTfQpr2GSxXLa4vS/WpTtkvmBxXzK4DButRow0d9rrFdcnsRI3oRKE+F82O45StnUDEDqsUNgBtcc9U1VEA2mBBDxAC0PVcYWEh8ylLVlYW2wQAAACAWngUAWgkFDguDZ1iy5Yt6E4oAI08sCc61M2bN9Gd0qNCHtgZQf1DQ0KDCeWnw9y6dYsouzI0AACABiI1NRU9Efzzn/9o376dWCzGSgWgy2agNRp67WfURP9HB6DFEj5PKFeK84ZZ24yXtJ8s6bFA1PedmMFrIoZvjBi1BVX0qM2cIZ9w+r3Ln3hAs+Cqe9jbtvjWWvoYWhxnQs+lC92QpFanlYhkEjWv4HXeW7/qe88yaNQ6eoter1Zh4pIAdHI7egVog9FAUSaNgvRkiqef4T+/SxDI0mJqAifQpuDyz8HoM1sUHYA26ClcQ5n9qrwJknGb+QPf57efys+bxuuxiN/vvZihn0aO3Bwxemvk2G0xY7cKhq2V9loi7fWaxZdo1mkJMph+RrfoSPcD0KZyi0CXrABtMOiPHjuCpnfUqJHsdIN6jE0BN2DsRIAaQVc9874c/K3ChonOXOaoVzSrTuYyWbq9nXp9a1Vtamtb9Z5cze5StaWtel1rFRrMW80UZlEUez70v6g4+u3mCtQ/7AhVqjaqbWEnaq9BpwjvVs3a1U492lOFzGUTOTo76s82AVAhuBhrUHAxAgAAAAAAAKrtk5bKDa1UM5IeeQBayWk8ziOaFi95JVA3NT1e8qJXnBD8d3wUnIgpceIdrdVvJEgwbpkfI1WciIA8xl/TQvu6pdHS2DIpZzoAnS7f2boKAehWqlkQgG54DhnNF82OnXpzXQWgr1tcs9RaxYMC0OLGEat0+gtmx1dmxzdmx3WL87LFsUdvXooR4+SqjkJRIoeXyRcsxogvzY6vzY6zJnu16rLFecpke0OlbcETZAuEAySy11TaNbjhOGW9ZnGiQidFp/7SbF+owWMe9OFECh2Atl2zuGbUUQB6j8GMzriNNLFNoF5yuVyzg4qKitgmAAAAANTCIwpAI3379mVCzMympUuXouOvWbMGfVk6AI243e7z58+Heu7cuVOtVpcfFYPpHIo4o/779u0rvdgzgvps2LChdAz69u3bzADYHgAAABqY5OQk9HTwn//5n/n5eUKhkE07lwSgSyLQ9D21KhiApmFymVIiRs8ekthojs2LFYw3ZY4QZ4+TFEyXdpsr6rWU/+wK/rMrhb2XCbvMFLQcLGw1XDh+q2rVX9xv3YwfuMjmb0bqcFyLEaSerlAAmkYSao2azxFZ0jgv7JEsvGZKzME1KkJPBgPQct6AYAA6pb1WEwxAG0iTBlcOeFsw4xte7vMKHCfQkfUGkjJTdDFrPwfXgTYQJgIz2f2G/PHaiXvkM74UjP6U23wgz99e1HSgqM2Lgg7TBIVz+fTg3xL0XSHuu1LcY5605+tUizwnriNpwfQzKqOxJACNMItBl81AW60WvZ5ebvr4F5+j6R0+fBg73aAeY1PADRg7EaBGsrKymPflcnJy2CbQkMxNk21qo36raZUzlwI6c7ktR70uW1Xntb61amsbdScjL7rkM8iIRo2e84k2tlFvaB3e+QnWzrbqUVXIXC7JkG8NThTbBECF4GKsQcHFCAAAAAAAAKi2j1sq1z+WADT6aUQS01hWpyWNaRyLjkunq+kA9PbW6tfLBaDb6LjvNFGsaCJ/K6Mm9U5TxZxkaYqKjlmHxMljlqbLd7RWj6gwAL08Q76ulWomBKAbnkMG80WTYydZdwFos2vmQwLQSJZAcJqynTRaV+v0Lyk0PcTSDC4fj4pmNwdhkdF9JLL1hPGCyXGWslexvjLZV2jJPKFYUuqBCBpHuGI52Xxhf6n8NZV2LW48Y7IdMVrjY+nl2MujA9CU7ZrZNUNdRwFovfkrEwSg6zuSJJkPWoYMGcI2AQAAAOBPJxTLDotKAwAAADWTmJiInlZ+//1fBZ06MgFoeoXn+wHo+wlotQr9Yto0SoVaLKID0GKxODaG64zXdRhpyRmrajZU1Gq0uM0LovYvizu+KsubJE8rlKpJgUDIMyXxOk4VvnGK+OifgSWXEoum2ZxJpFZD4gRBhGLQwQA0juMyqUIg4rcazVn4PTZmLaUjtbhOr1JhIjlv4CrujG9ETADaaDCq5Hh6kaj4a97wtSJHog7T4AQZXBm6JP3MrP1M4iaL05g9EB+3XlF8XjhpP7/LdJE/SyZVCqJjIg0BXmoPceYISasxouznhGj8ORPEhcXqolcszdu7CFyPBhlKP1clAG0JBqBNZurEyeNoeuHndAD+9AoKCpj35RISEtgm0JDMTZNtbKNeXvXMJT/yjSTp1hz1Z9mqOq8tOeqZKVIt7/7nC8mqmNUtFZvbPJLT1bh2VC1z+WaGHD0i1J9tAqBCcDHWoOBiBAAAAAAAAFTbxy0U6zOVxYmSRx2AfqToALRfvD1b9Xp8eAC6gORty1JtzFJuaFWT2patWtVU3lwTyx4uKE4WvTRNuiNbNcIhqCgAnS5bl6mYmSRmm0CDEQxA23eSproIQPO2ktR1s3OmSqt4yNGiGzXKE4iy+AJLTGxsowf/D8kYIJFfNjvOUbazVajzdAba2oIvYHd+EFFEhDOG05ovbMMXsU3lpHC56DjXzM4Zai3bVAu6qKg9etNXJvs2kmKbQL0klUqZD1omTZrENgEAAADgKZeamsreKxEXF8es3/z222+zTQAAAEAtJCTEo6eVP/74ry5dOguEAkx7P/p8H6ZRqzVqZTAAzWSg1RqpWC4WshlobiyfMKqa5pvyh1s6jqfyxxlyR+ubdcedKSqNViEWSvk8YWwUT6LkuzL5RXPF874yfvwfSfNOJ3Z6wWr167VaAscJ0hCMQRMESZIYhgl4Ep2DO2StYOlPhsxndWo5oVaWBKAviVNytZga12n0pE02ZjN/+jley/5qLUaHp/UGgg49B1eANhopPUFRVmPzImL0J5rZl6UvH0EDEKZ3UeGUis8VC3hiLocXGxOrJPiuprJmPbQ5Q8n2I425Q6ytOjv9iTZcFxxbWWUC0AhFVzAAzWagLVYL6maxmk+dOYmmd9CgQex0AwD+pPr06cO8L2e1Wtkm0JDMTZVtbK1e3qSamcs26s+yVHVb67PpysY5oc8feZGNpgQkm9rQ67aGdX6ytSNHPcpdtcxlcKLYJgAqBBdjDQouRgAAAAAAAEC1rW2uWNdSWZzw1AegX/aLt2apXisXgE6QR491CUc5BSNrVGNcggFWvl0cxR4uiA5Ap0q3Z1USgF6WJvushWJmIgSgG5yDBvNXJvuOughAp3F5W0jqWoUB6KpDRztL2c5R9jOUrdK6YLKvI4ym6DIrSdcAE4C+anbOUNVNAHq33oTGthUC0PUe80FLcXEx+zUAAAAAnlrR0dEbNmy4d+/ezp07JRIJ0+h2u+/cuYMa79692759e6YRAAAAqI1AIICeWf77v//drXs3gUCgfVAAml4AunQAGhWmUSrVUrGMzkCLUUl5XCG6r9YodHo5aVJodSqlUimXKhRS9LtSqVBIJFJurCA2hq/ABQkd+INWyt76zvbZf6YXH0psO9hqcpBajKQD0MHCCVyhUPL4guTunBlfy1/ebzA5dHIJJpLxBjAB6HytRo3LFeqccYLZ13h9l0nMLlyL0cs/GymDyUyhInGTgTKm5OoHv43N/Er++nnRoHeFLZ9V2Pw4riWVMkzEl4oEYqlEJpPKxUIpesJVqmRo5HpSh/Ykcb1WoyPJ8PQzaSCN1AMC0KUXgWYC0Da79ey502h6BwwYwE43AOBPasSIEcz7chiGsU2gIZmTIt2QXb3M5euJ0i2t1Z+2UtVtbW2jnhQnlsTe/xAth+B+1FK5Mbvuz1XL2t5GPdJVeeZycbp8c3Ci2CYAKgQXYw0KLkYAAAAAAABAta1ppvisxdMfgI6NeMkn3tJKNT0g0ZQNQEc1boR+TELFqVHRO0Y0Cvs5yy+LfjNFuq2VavjDA9A4P3JpquzT5oqZCRCAbnDqMACdyuVtrrsANBUd/ZFO/6WpSgHor82OqUqNOKJK78tUIJnLPRMMQBdDALqBGTdu3IQJE4YMGcLhcNgmAAAAADy1Vq9efe8hxo4dy3YCAAAAaicuLg49s9z937u9evXk8wVarZZNPYdRa9SqUgFopk2lUciUEpFMIpJK6DC0VMSXCfkyEU8uEcplMrlCrlAqlHSxKWilVCoX8aUCnhijhBm9BePWKd//1fvZP5pO2ZyY2dOsN+l1OEkYCNJIaHVakVAqJ7jdF3KX/KzrNJEQC1QCCW/gau6sK+LUjlqlWmtOEb50hD/5sCC1QIOpcZzEDRRJmSm9gdLrqUALfe85ujfOqWZ8JR7xsaDNSLkrWYtrCUyJ67Q4vdY0TmhUWpUcPQoVKqVMrZJqNTICUxBaDR3CDqafmbovfPlnhAlAm9j0M2K1WQiScDodF746h6a3X79+7HQDAP6k8vLyhg0bhl6lh/7uImhQ5iRLN2SrljeRVzFzifMjX0uUbGmt+rSVsg5rfZbqwxaKdPX9f15VyWn8RpJ0c12fqE5qWxvVSJewCplLGTN+tgmACsHFWIOCixEAAAAAAABQbWwAOv5PG4B+FKoUgOZBALrhOqg3f0XZdhBU7dPDdACaMF4zOWaqMEVkbQPQvMaNn5ervjHZzxitFddZo/WSyV4gFNf+D4ZkDveM0XLV5ChW1sGKI3QAmqQuULathJFtAvXVpEmTmMVmpFIp2wQAAACAp1nPnj3Pnz8fzDzT7t69u2/fvmbNmrGbAQAAgFrzer3BJ5n/69evL5/Pf2gAOhh3DstAY3Rh6L5aqVEp1fRWFaZR6TQqrVqtUSpVCoVSgX7RVCol2oxptTotplXIlEKeVCgQEy5B1gjBlD26z/4j8ZPfWrywJiEt10wa9DhOkkZCjal4XKErizP5qOiNc7g1USGScYeuFcy+psjsadSQqsI5nJlXuIXFcr0J16F9DITBYCRJyp1i6DIFf/U4NueK9LmtgvwXJXEtMIIkNHICU+GoK5tjpkyU0WTQG/WEgcTRWY0G3GQkUAuFjqM36JnEc4herzcajFQw61wGG4Bm089mi9lqs+IE7vG6v7l0EU1ur1692OkGAPxJwZtyDdzsJOn6LNWyjOpkLhMkm7NVn2Qq67DQAQc7BNER9z9h6GHiofZ1WeE960NtbV2lzOWiNNmm4ESxTQBUCC7GGhRcjAAAAAAAAIBq+6ip/NPmijfixE97AHqyV7Q5UzE9Tvw4AtDS6MXJ0i2ZymG2igLQS1KknzSTzwhAALrBOaA3XaBs2+soAL2JMF41OWbURQAayROKmAD06QrrHGU7orckcLjsbrWQzOGeNlqu1FUAOjJqF0l9Sdm2EAa2CdRX8FkLAAAAAAAAAIBqcblcd+/evXfv3uDBg5gANIZhwcBzOcGgc7kMNOqN9gjeBkuLoUPQhWm0mDoYj2Z6YnT6WVdSGjUmkyr5HIlILDIlCjpMFs48od/8e9pHP2YOXxJIyKQI0qAldDKpTKTgt5vMXfw9Nfgdbfvx/Bf3SGd+hQ1/B+v2mmLGeezFvepAO42OpAPQuM5g9xvaj8Yn78XmXpVPOiDs+roksZ3aYCYwFaHVBBd+1pIG0mA0UqWLMpoog8lAUqiMBoqGGtFNORRlYqqMki/Z/HMwAE3guD/gu3rtCprbwsJu7HQDAP6k4E25Bm5WknR9K9Wy9OpkLuMlm7NUn7RU1lV9lqn8sLmih4nnkET75TFeWUwLLHZRqmxTnZ6lDmtrtmqkswqZy5KHwDYBUCG4GGtQcDECAAAAAAAAqu3DJvJPmile/1MEoDe1VE7zP5YAtIwOQG9uWUkA+s1k6cdN5cUBEdsEGoz6HID2xXJ2EdQ5yhaWeA4rNP63tYQhOprdrRaYAPRlCEA3PPBZCwAAAAAAAACAanE4HH/88V/37t0bM2YUl8vV6XTBOPODM9DMItB0MbFmtjBUanTLJKHp+HMw/czEoIPFpqLp9Z/vZ6C1mE6j0sjECgFXIpGLHM34RTPFyy5Zd/x383evtHz2da83lVIpNUKerN1g04xT9uIL2KunhDO/ksy7LJ99STHnkmLJd7bivc1TWntUGGaw4q36Ec9vwuddU71yXNxroSi9q8rkwLUqAlPjuuCqzwaj3qinjEzQGd0pKSb6TDcGc88sOhjN3i0lmH5ml3wuQZnMJcs/W6wWq9Vqs9vQI0xOSfr+1ndobgsKCtjpBgD8ScGbcg3czCTpulaqpdXJXE6Pl2zKUn3cUllX9UlL5ZoWipVN5GgYyzPky9Ll7zRVrA22h/WsJ7UlWzWiCpnLhamyjcGJYpsAqBBcjDUouBgBAAAAAAAA1cYGoP1PdwBaERsx6SEB6KjGjXiRFRUnolF1HzoEoEHFDuipC5R1O2GsowC04arJXlcBaGVk5GwVdpEOQFsqqEsm22iZIqbaF8cDBAPQ5ssme90FoI1fUtYthJ5tAvUVfNYCAAAAAAAAAKBarFbrP/7+j3v37s2aNZPDidVoNHROWavVPGQZaGZFZyYGrQkWHX0OpZ+D6P2ZFaBLos/ofukANP07RhfzJTqgRCQXcMVyjTCuPX/ISvnqW+6d/5219GzzvKGO5BxixGpyyjHFjEuSOVeFi76TLvkRlezNn+SLv9cvuuIdNMeT0ZkY/j4+7wr2xpfSge+KWjyrsPlxrZrAVLhWixMEYTAYgus302U0GA2k0UBQbJVe+DkMuwf7FSM8/cwKpp8tdPrZaqNvZDJZ5y6d/vNf/4nmNicnh51uAMCfFLwp18DNTBKvy1QsTZPJY6qWueRFTg9INrVSftxCUbe1LlO5vqTQ/U9ahneoP7UlSznCUYXMZYp0Y3Ci2CYAKgQXYw0KLkYAAAAAAABAtX2QIf+46Z8iAO0WbWyhfLVcADpeFj3WIRxtF456UI12CPtQfF6FP0eV55NGL0qSbmqhHFphAHpxknRtE/nrcRCAbnD2k9T/Z+9O4KOu7v3/k4Vkss9knZms7GEPe0CW4IK4x6oQEDB1DSqKqBRFJYIS9qAiYbO4NrW1xm5CF6XWVtyDrW1staDeW7m3v3svd+tN/9d7L//PzDk5fjNbZoYQsryejxFnzpzz/Z7vNpnv9/vOyQcDh71c2AkB6KnJKd8vHPCHQcM35rqz4zohAC0dutae+dGg0ncHDA32eG/A0N8OGnZhappuc2qmJCW/M2DIR4M6LQB9sGjgkYHDflhIALq7414LAAAAACAihYWFf/7zn0+ePPnpZ5/Om3dVtpcnqpyf724bB9o88XDLS+8TNfyzlzf23I6ago5Bq/TzV0NB6/Sz55Ff4FUoT/LynPaMrLQUe15J+vRFaXd9J++Fv0x+9tPpy76de8fLyWvfz9j2SfaOz12P/11Ww58dO79wNByXf/PqP3GvO1yw4d0BWz7Kve27GRfcnj1qqky00JUr0/dEn0sGlAwcNEBHn9VDGeB96Nc+IWc/OgY92Ptf2wjQOgk9ZMjgIUOHeKPPonSYZ3KDB82fP++dd96SFSumTp2qVzeAXoqLcn3cpsn2F87J2Tkt/Mxl3LoJ9pfOzf327Jw++/jBebm3jkjrOHNZntnkXVG6CAiJgzGKBwcjAAAAgIg9Oz37+ZnZ68t6fgB6VMZLFblrx9pdSe1OIysLk5pm57wwK+e7gR7fq8jZMSnTkRA4xByMJwA9OfP7s3NvHhYyAD0589szCED3RZ0YgC5vC0BvyHVndkYAWsxOSX1vwJDmAcPeD/KQzv+kaGCZLUk3ODWTvQHolkHD1xOA7mO41wIAAAAAiEhiQsIL3/2uyun+27//2yOPbB8/YbzD4XA6nZ4AszfsrP5VvPFmTwzah7f8Kyr/7OHNPavRoHUA2pOH/mr4Z8/Dm4EuLCiUwrycPHtaVlqqvWB4+jk3pt+0K+fW76Wu+kXi2iPJ3/pi5qv/Xr37i8JdX+S+/C9XNv3z+Tu/yHzs77I2/S7nnp/kfG11VtnZrqLiQleeZ+JFhQXFxcWejLPJPZvosy/fMZ6D0hloz8Oafh7iTT+Xlg6T1zLTWRUzdzY8/i//8s9qrb711pu5uSRFgF6Oi3J93KZJ9u+enfP41Egyl+PtTefkNlbk9NnH98/NvXV4x5nLR6ZkvuhdUboICImDMYoHByMAAACAiD0zPevbM7Mf7vkB6HtGZTRVZD84NsMnAH2eK7Gh3PHY5MCPx6c41oxJTw8SYg6mLDPh0cmOl2ZnLw0ZgJbpN87IIgDdB3kD0ENfLhwQXQB6clLyUkf2tfbMa+yO2hznK8WDfjtw2PP5xcsys66xZ0q5eZyTkpoYE9neK5zx8dfbM7+RlXdXVm7Axzey86rS7VmRd94WG3tharq1h0syHGuy894uGfKbgcO+XVD8dbvj697ymxxZ46MKWLcFoIf+sLBYF6G74l4LAAAAACBSAwaUfPOb+7788r9VYPfD3324fPntAwcOyMrKcrlcngyzpnPP+pW8bh+D1qVtVP5Z8SSfVfrZW1ygxn7+Kv3sUejNQMs/UjM7My81IdORlT79mtTqvUkrf26rfdfW+Ofyn5244vG/d770Txf/w3+98ta/3f34nx2PfOZ4qNmx9CnHuJn5uZlF+S7PhIpLigYMsESfQ2sb3jlUDrot7/wVeeUNPw/zDv08ZMiQkpKSMWPHfGPVyt///ndqTf7f//3fc889O3ToEL2iAfReXJTr48hcRvEgc4nTgYMxigcHIwAAAICIPXNW1rdnZD88tlcEoGcFCEDn2GLHOPqPsgd+jLb3H5oeHx8T2cJ7AtCTHC9VZC8dGjQAXZAc/9gkR+P0rPXjCED3Oa8WDfpggDcAHRtNAPpWR/YHA4a9Xjz49eJBvy4e/HbJkHdLhrxZMvhXnhL9kOfy1vocV1rks5DdPTEmJiU2NsQjISbCo8LLHhe3IzdfOma6+kvvIrzjXYS3SqRkkOr8+wOGXGt36GaR8ASgCwceGTD0BwUEoLs77rUAAAAAAKIQGxtbefllr7/+uknu/uznP7vyyiucTmdWVpZONLcxWWdPANqSgVaFVt7wcwA68pzfFoP2KmxTkF/ozi1ypOXkuNIrrkur3p224kDyfW8krP9typaP07ceTTvwz1f+/j8fbvzHsY98mrbtE8fDzVm3fSdrygVuV25BUVFhyYABJtkcdvrZZKADMwM+K0O8hgpv/LmkpGTI0CGLFl/9s5//9H/+93/UOnz7nbcuv/zyuLiIf4seQE/ERbk+buME+3dmZ+8ozww/c7l2nP3Fs3O+NSu7zz5eOifnljAyl9unOF6Y7VlRuggIiYMxigcHIwAAAICIPT0tq3F69kNjengAOjHunpEZL87MfnCMbwD6dChzJDwy0dE0q4MA9KMTHd86K2v9WALQfc4rRZ6E7o8LB6RHFYBekZnzp0Gl7w8YKo/3Soa8UzLkbe+/73lL1KN5wFCZxdZcd3psN7p35YiL25dXIB2T7pmuyiJI/9UimM7/YdCwGkc019/d8f0PFA6UKRCA7v641wIAAAAAiFpJac62J1Yf+/xjFeH961//+tRT+2fNmpmVlZWbm5v/1VDQ7ej4cyQBaKFTzwVfZaA9gz974s+FBc5Cd15BRmpWTn7K2TfZFz+ecev3kle+Gv/AWwkP/yZp00epjx7N3vW5c9uf0rb8MW3j7+0Pvp297DtZUy91uV0FRUVFnvyzPDqMPgtvQrrjALTP2M/e/PPQoUOGDRsmzUtKSs4/f85TT+//t3/7V7Xe/vwPnz11YO3Mq4r0agXQB3BRro/bMCHj+Yrsx6aEm7ksSIl7cJz9e7NznpuZ3WcfTWfn3FyalhTXQeayfrLjuxWeFaWLgJA4GKN4cDACAAAAiFgvC0DXdl0A2h5mAPphAtB9jzcAPeTlwpKsqALQyzOz/zBw2Nslg0M83ikZ/G7J4E25rugy1qeJIy5ud55bOibd8+mw9SHv/m7gkBsd0YwAXdw/4WDhgOYBQwhAd3/cawEAAAAARCc5vf/ESzPHX5x+0cJJ+7+941///V9UnPfv//7vHnpo3ejRo+VMMy8vT8WXdcC5jRkKWr+2UPUD8uaf2+hXhQUueRQ5c9wZaY7M3JTZX8+p2uK4/sm0234Q/41DcQ+8mbju/aT1v0la/6Ftw4fJDx9JXvte+j2HHDd9M2fiufkuZ0FhUUFJScnAAQPNMNChqCGi2x6BM9CWsZ+HDNHZ52HDhsnLoqKiSVMmPbz+oWOfHlPrqvVvf/3Oj/ZdeeO0sxamzXswZ8jEdL1yAfR2XJTr48hcRvEgc4nTgYMxigcHIwAAAICIPTU181tnZa0bk9GzA9C22FUj0r83I2vN6HTn6Q9Aj3X03z4h48UZ2TVDUlOD/BWeguS4Ryfan5uW+fAYAtB9zmuFg94vGXy4ePDa7LxhCYlx/SI7ujwB6AHD3i4eHOLxTvHgd4sHb8rplgFob/d8Omx9yLu/GzDkRntkAej4mJjRibZNua43iwe/VzLkx/kl+g10V9xrAQAAAABEITYuZtx52bMXFkw8L3/UDMfoWZlX3zznx6+88P/9999UtPf95vduueXmkpKSzKxMl9uVn5/v9hsP+pQC0F757oJ8V2GBuyg322m325OTk6df5f7ag9kL6h3XP21b9lLsXT+Lv/eX/e8/nPDAm4kPvJmw+lcJ9xxKv70pc/HGghHjCzwB6MKC4uKigQMHDiiJLAMdMP3sjT5/NfyzN/zsUVJcMnzE8FuX3fzW22+q9SN++fbBm1ZdOvHCrHFz7eUX519yu3vB/QXOomS9igH0alyU6+M2jM/49qzsRyeHm7ksTImrLbO/UJHz7IzsPvt4cXbOzcPSkoPc71PiYvptm+T4zizPitJFQEgcjFE8OBgBAAAAROzJ8sznpmWtHd3DA9CJsd8Ynv7C9Kw1o7ooAF0/PuN707NvGhwqAP3IBPuzUzMfIgDd93zLWfRG8aDmkiHvlgz5UcGAGntmXnzIk/X2lmdmfzRg2FvFg0M8VIx4Y7cMQKv0s0+HrQ9598MBQ24IOwAdKwdUfP/ljuyDBQPeKx4iK/ZXxYP25Ln12+iuuNcCAAAAAIjC6GlZV68aOLe6sPzC/Innucef4xwx3T7unLzb71v05vuv6YTvyf87cPDA5Zdf7nK5srOz89tlm3XcOSBdJRAdfG6T75L/CvPdhTmZuZmOTFtC8vBJuVfcW3Tx6owF2zK+/kRCzfNxt30/9o4fx644GHfnwf4rfpxyy/MZ1+/LvezmwQWF3ukVFhQWFQ7wiCAD7U0/+wWgA0afSwbIO1+78mvf/37T3/4/nQ7/3cfv3bfpxqmXusedn1F+mXNaZf45V+dffW/R/c+OWrCiJCU1Xq9lAL0XF+X6uPXjM749M5LMZXJc7Vj7C7Nynp2e3WcfL1aEl7mc6PjOTM+K0kVASByMUTw4GAEAAABE7Mkpmc9NzXqwdwSgz+qqALS9f/24jO+d1VEAerz92fLMdQSg+x5XfPwKR/aB/OJ3iwf/pmTI28WDnncXXpaanhYbq2uE5A1AD32reFCIh0zzneJBG3Oc6eFNs2u0BaA93fPpsPUh74YfgLbHxc1Lz3jRXfyOd2W+Wzzo5YKSmx1ZOXHdKPmNgLjXAgAAAACI1MAxKV/fUHDHnsE1mwZedUfx7Pn5E891jZvtHjszb1h5+rSLBqyrv/OTTz9SYd//+I//2Lt374wZ0+XEMy8vr6BAJZk9dN7Zj347EGmus8+eCXlGgPZEmPMLs7M8AeiM9IzUtJS51UMuujtnzp32Kx92LHo0tXqv7fonE294JummZ9O+vte+cLt90brBY6cMdDnzpal6lJSUeDPQQoecQ9EjQLdn0s9DdPpZyoqKimbNmvn4zh3/75/+otbGP/y/v3ts/4PnzRs6enbapAtzz7rcPXuB+2vL8pduzl+1f8A3ni298THX5EtT4yL4JX0APRIX5fq49eMzGmdmPTLZkRVe5rIgOb52bMb3ZmU/Nz2rzz6aKrJvHpbaYeZy60T78zOzn5mepYuAkDgYo3hwMAIAAACI2P4pmc9OzartFQHo756V9cDIdJetiwLQL5yVFToAvX28/ZnyzLUEoPuk+JiYMQm2jTnOQ4UDjpQMlscbRQMfz3VNtSUnx3QQWV7u6BsB6IwOAtApsbEVySn7nO7DRQM/KBncXDL45wUD1mXnliYkxsVwr64H4F4LAAAAACAiCclxV9ybs/pA1tpXXbU/HHzXvqHXPTzwkhuLJs/NL5vlHlfhGjMjZ/jUjDnzxux+ZvP/++d/UMHfY8eOrVu3dsTIEVlZWU6n05NdbqNTz57cs34i9HuBqPSzaAtAFxQUFuZm5znscmqbmWRLycu3X3LT0LnLc2ffYp9zh71yTfa8utwrHnZUrrVf/mBW1QMDp80Z6naphn4B6JKBYUWgrQHodgM/Dx46dKg8KS4uLisbs/q+e1s++r1aA//1t//8zo/2XXVDedk56RPPzy6/xDXjCvclN7mvfyj/zl2Fd+x13v604/bvOhZtT/raA2kOd3+9ugH0UlyU6+PWj8tonJ71yKRIMpdjMl6Ymf3sWVl99vHirOybh4aRuZxgf35G9jNnkblEWDgYo3hwMAIAAACI2P5JjmenZNaOTO/pAeiVw1O/Oy3zvhHp9v6nPQ9amha/tSzjhWmZNw1MCRqATorbXpbxzGTH2lHpugh9T2JMzLnJKfvy8l8vHPhB8eDm4sGvFg64PzNnWEJCQvAI7+2OrJaSIW8WDQrxeKto0NtFgzZkd7sAdEOeWzom3fPpsPUh7/62JFQAWtbbqETbw9l5rxUNOFI8WB6vFQ7YmeuekZTMPboehHstAAAAAICIpGX3X/iw845vp617PWnTO9nrXyt5oGno8oahi+4ddM6CwonneTLQ42e7R0/PHDndPv+GiqaXn/2vv/1VhYDfefedG2+6saSkJCsry+1W4WVPEtrtjT57482eJ23Pg1INvZFpz5PCwkKXMz/TnuVwZGY6MpNtqXkux3lVwy5eVjx3mfPyewvnPzjg0m+4Lr4jv/Lm4ROnD3U7PeFpk34ubBeAlv90yjkwT/S53fDPg70B6CF64OchxcXFQ4cO/frXqw/94pX/+7//k6X+3//7n9fefPmmlZdMnJs5fo6j/GLX9K+5537dveT+/DseL1yxx73sCcfKH6aseyPllm/1n1fX/6p1GbkDEvTqBtBLcVGuj1s/NuNbZ2U9MjHczKUjIfbi/KQbBqd+fVDffdw0JHVWXmJCyBulcTH9toy3f3t69tPTyFwiLByMUTw4GAEAAABE7IlJjqd7fgA6OzH27mGp3yrP3Dw24/L8pLNzE87NO10PmfiS4uQd4x3PT828IWQAeltZxlOTHQ+OJADd16XHxS1Jtz/vKvSMZFw8qLl40Mv5xddn2N3xgfeetgD0wBCPt4oGvl00sLsGoD3d8+mw9SHv/rZkcMAAdFy/mOL+/W+1Zx0sKJEV9UHxYFlpzzoL5qVlpHQ0cja6G+61AAAAAAAikpbVf+G6vFueSlvzSv8Nb9s2vZO+8S3X+lcH3/fd0lsfGTZvxcCZVxaOP9s1/mz3+NnOUWfZx1bk1Nx95a/e/rnKQIsf/uiHl152aV5eXm5urkozy7+W3LN6FiID7Qk9Sxu3q0BqFbQNCe0ZBDrDE4DOdGSlpWakp2WUji6aNmfwBUuGX3FLWcUlw6bMKB04sNjlbJtCm8LCwq8C0KIkZAK6ffrZDP88ZMiQAQMHyHQuvOiC57717H/+53+qhf3tR++u3nDj1Ivd487LmHJR3rRL3edc7a5a6V62veCufQXL9mSv+G5K7S+Tv3HQtqQhbt7GmMse6H/lg+kEoIFej4tyfdzDEWYuESYyl4gUB+NpwsEIAAAAoB0VgF4zojcEoJ+a7PjmJMeTkxzy5LQ+9k9yyHp7rjy8APQIAtDwyI/vf5cj+4fuwne9Mej3igZ+y5l/SWpaVpzvhQ+p9umAoUeKB4V4yBR+UzxoW44rozsFoDPj4p5w5kvHpHs+HbY+5N2PBwxZave9/p4TF3dlWsb33EXve+u8UzTwpfyi2+xZefHxugZ6FO61AAAAAAAikpYZv/Dh3GXPpd//s4S1ryWuf8O28e3kTe/YNx4ufOhnpfc+N6Jm07DKmwecdWnB+LNdE852jZ/tLC1PmzynaHXdzS2f/EbFgv/lX/5l957d06ZNzc7OzsvLKywsLPDGoC1CDQLtiS3rALR3LGdRWChPcrLzHPYshz3TMxq0PSs91ZGckJGRkpXrcGenu/NyPdPUAz9bFBUVeQd+bhN8EGjr2M8q9zx4yOAhQ4fIWzKRKeVTNm3e+Pd//7laxn/4p7/fvnfNOVcOGz07dcpFeVMvcc+a5/7abe6lmwvu3lu4fG/ebU+n3fOTpFUHbTfs7z9vS8z8rbHzNsVW6gA0f14L6OW4KNfHPTwm47lpmdsn2LMSGVKkM3kyl+PsjWdlPTWVIwth4WA8TTgYAQAAALSzb4Lj6Uk9PgCdkxh73/C070zJ/NaUzMYueciMXpyWdcug1LQgAej8pLitYzKenEgAGu2UJdo2ZuX+LL+4uWigPN4sHPBIjrPclpxqyTFfk25/2V30HVdB6Md3XQV32bOsDc+49Ni4BzNzpGM+XfV//NBddFXaV4dGRmxcRXLyrlzX24UDjhQNfL9o4IH84rVZOSMSEnUN9EDcawEAAAAARCQtM35RXc6KF9I3vJW8+d3kda8nemLQh22b30nZ8m7OxjcGPHRw5KqnRl3/UOnF1w+YcmG+NwbtHj09Z9iU9NmVIx7d99Cf//EzFRE+evRPD6y5f8SIEdnZ2S63q6CgIN8nBR2Md9hnt8ubgfa+9vJEm13O/NzsvJwszyM32+nOy89x5GVm5BYWFBUWeYPW7QPQRUXth38W3lcq8dyOJ/3cFoBWAz8Pkf8NKi4uGjFyxO233/bee++q5frP//q353+w9/Lq8jEVGRPmZJVf4p5xhevim9zXP5x/156iFfvct3wz466XbPf8NPGGJ+Pnb4udtyWmantslTzZ2BaALiEADfRyXJTr4x4ak/Hs1Mz68WQuO1lcTL/NZfZvTct6spwjC2HhYDxNOBgBAAAAtLNvgv3JSY41I9J6dAA6OT5malbCJa6ki5xd97jMnTQuIyEhyEmrNwCd/uREe+2INF0EePXvFzM3JWV3rvO1gpIPigY2Fw86lF98jyNrREJi/xjPcZgaG1sQH+8O45EZF9etrprE9ovJjovz6WTAhyxgije6bYuJKUu0rc3O/ZUn+jxIHrI2Hs3Nq0hO5oJQT8e9FgAAAABARFIz4xdvzLn7pYztv03b9Yn9kQ/TN76dvPa1xLWvJWx4y7alOXXLe65Nvy5d+8Mxd+8ddc39w+YsLp44xz2uwiWPkdOyh03JqLxm2rdf2vfX1v9QceG33nrr+uuvKy4uzsnJVllmlW8OHYb2DhhdYAaB1hHogsICT8i57ZFflJfrvOySyrUPrhsxYkSRlzcGrQVIP4tAI0Cb6PPgtujzkCFDpM+DBg+cN/+qH/34h19++aVanFd+9cPrV1xSNjuz7BzHlIuc0ypd51e7l9yff8fOwrv2Fdy613Hb87Y7f5Cw9Nn+VfWx87bELqiPXbA9dv622PlbvgpA5xTzh7aAXm7lypXqopzb7dZF6EvWjcl4tjyzfhyZy06mM5dTs56cwuVuhIWD8TThYAQAAADQzt7x9v2T7PcP79kB6G4oPyluy+j0/RMIQCOwjNjYa9Izns3Lf7NgwAdFgz4oGvij/MJr0+3F8X1oGJ5B/RNvycg86C4+4lkDg94oGLA/1z0/NSPZGwRHT0cAGgAAAAAQkdTMuCWbdAB636eZez/N3PWJfftv0h5+I6n2UMK61xM2v5dc/4F967uFG3856sGXylbsHH31N4ZWzC+acI6rbJZ73CxX6RT7qOnZX7/tkld//eP//b//OXny5P98+T9NL7148cUX5XnpMLM346wFDkN7AtButycD7UlAq4d3hGcVgM53FeRk5+7Zu0dmMXPmzMLCwoEDB3oSzm28eWc//gHo9gM/DxkyZMDAATK12bMr9uzd/S//8k/e5PPJ33/cvOrhG6bMzR81M23SXGf5Je6zF7rnr3Tf9kjhyieKlu3NufmppOUv9l/aGH/1o3FXboqp8kaf1cMSgE64spYANND7LV26VF2Uk48WXYS+ZO2YjGfKM7eRuexscTH9NpXZn5uatZ/MJcLDwXiacDACAAAAaGfvOPv+Cfb7SwlAdzJPAHpU+v7x9trhBKARVEl8wl0ZmU3OgvcKB3xQOPBI4cCnc92XpKTlxsXpGr2UOz7+qpT0bzsLPNHnwoHvFg54wVmwLCPTFcdNuN6DADQAAAAAICKpjrglm70B6N+k7fvUsffTzH2fZe75NHPnHzK2Nqeue9225tWE9W8kbjuS/Mhvsre9O3jjL8rWvDD+tu2j5y0fMr2ycNxsV9lM95gZeaVT7OPPcd9de92R372lAsT//M//vLPh8fLyKTm5OU6n05NlLiz0BqE1nxi0KvJkoF0F+d6hoAs8j8J876PAXeRyurOysr7z3edl4hdddKE7P3/QwEGeQPMATww6iIEDSjwVNE/02Zt+VtHnwUPkvaKionHjy9bUPvDxx39UPf/iL5/X71kzu3LoyBnp48/NnXyBa8aV7suXuW/eXLByX9Hyfc6aJ1Ju/XbczY3xi3bEXbUltmrbV9Fnz6M+dv5WbwB6s3cEaE8Aug/97j3QNxGA7uPWjkp/ZrJj29iMrGB/wBRR8WQux2Q8NyVz/ySHLgJC4mA8TTgYAQAAALSzp8z+zfH2+whAd7Z8W9zmkenfHGdfU0oAGh2YkGh7KDP7J+6iI4UD5PFmQcnW7LwZtuTU2F54TcQeG3dOUsqOXOe73oVtLhzwY3fhA5nZoxMSdQ30FgSgAQAAAAARSXXEXbM5W40AvfdTx95jnkGg936eue/zzD3HHDtaMja/m7z2F4kPHuq/4S3bIx+mP/pb17Z3hm/4+YT7vzVh6cZRl9YMKr+oYOwsbwx6et7QiWkzLhm66fH7Pv/iqAoTf/LJx/fee8+IEcOzsrLy8/M9Geh2KeivQtBtrz3RZ08AWsegPennwvzCoqKivLw8h8Pxve+9IJO97LLLnE6nZ2hn70Onnf2VyFs6/Cw80edBnuiz16DCwqKhQ4ded8N1r//ql6q3//lf//6tl3Zfdk35qBnpY8/OmnS+e+ql7otucF33UP7de4pW7Mu/eV96zTPxNc/FXdPgiT7P2xpbVe95LNiu/1UPXbI19vJaAtBAn0AAuo97cGT6U5MdW8hcdra4mH4bxmQ8MyXzCTKXCA8H42nCwQgAAACgnd1lGU+My7hvWCoB6M6Vb4vbNDJ937iMB0pTdREQXHxMzIXJqY/nOF/PL/YMBV008JX84pX2rDGJvecvYyXExExMtD2Qmf3L/BJZwA8KB/wiv2hbdt45SSkx/fgA6oUIQAMAAAAAIpJqj1uyKXulDkBn7lEB6M+8j889/+7+k+PRD9M3vJVU+4vEB3+RsOX95B2/tz/2YVH9W2PqDk6+56nx168becG1AyfNcY+d6Sqb6Ro5LWvYlIwLFkx8+juP/+u//4sKFv/617+qrq4uKirKzc31ZJ3bjwStFbRloD1FniS0t6BQKS4ulrYOh/3FF78nE7z88koTgPYM8xw4A+0Z/lkHoAep4Z+98edBg0pKSopLii++9OLnv/vt1tZW1clDb/z42uUXjanIHF3hmHiec8qF7vMWuxff516xs+iuJwpu3uOoeTJh6bfiqvd4Bniet0VHn30engD0I7ELH429+tHYhfWeAPQVtek5Rfz1LaCXIwDdxz04wpu5HEPmspORuUSkOBhPEw5GAAAAAO3sHpvxRFnGfUNSOPfqXDoAXZZx/7AUXQR0JDMubklq+pO57rcLSj4oHCCPF53516bZB/ZP0DV6rGEJibekO37sKlDLdTi/eG+uc15qelpvHOUaCgFoAAAAAEBEUjLiFm/Iufsle/1vPCNA7znm2PNpWwba++8+bxh61yeO7b9NW/+Gbc0r/R96PXH7BykNf8ja8dtBW9+Y8PCPy7/xxITq+0ecs7Bk/DmusTNcZbNcw6dmDp/quLpmzsuvfPd//vfLkydP/n9/+9sLL7xwwQVzXS5Xbl6uzjV7tYWevwpAG7pGoWcE6NzcXLvD/r0XPSNAV+oA9IBBgwbpDHTJgK8eQkWfvelnT+5ZDPaEn+UdmeHUqVO3bd/6xfEvvMnnk7/74/sr11036XzXyOnpE89zTp7rqpjnmn+X+7bthSv3FS7bm3PjE7aa52KvfSKuqj72qs2x89uHntVDRZ+v3tH2eMwEoNMIQAO9HgHoPu7BEelPTnRsJnPZ2eJi+tWNynh6Uua+CWQuERYOxtOEgxEAAABAO7vGZOwbm7GaAHRnc9viNo5I3zs24/6hBKARmUH9E27PcHwvL//9ggFHCgbIv/tyXJenpOXF9cgbVPnx/avS0p7Jc8uyHCkc8G5Bybfz3DXpGYXx/MXVXo4ANAAAAAAgIsnpcVevz767ye4ZAfqzzK8C0ObhDUDv+1yeO3b+MWNbc8q61xPXvNJ//a8Td/w+ddcfc3f8dsTW18sf/v7UO3eOX3j38FlXFJVVuMbOdI+Z4Rw2JaOswnnb6kVvf/C6ihr/0z//0yOPPjKlfEpOTo7b7VLh5vYDQrejKoiioqKc3By7ZQToPGeeDkALPQL0QG8AWv71RqJV+lmP++ypJtMZOWrknXet+OCDI6o/f/8Px+r3PFBROWTkjPRxZ+dMOt89/XJ35S3upZsK7t5XfPse5037Um56Ju6GJ2MXbvdEn+dtjZ2/rd1Dp58fiV34mCf3vGin9+ENQC+oj618IOFr9xOABno/AtB9XO2ItCcn2jePSSdz2bm8mcv0pyc59k2w6yIgJA7G04SDEQAAAEA7OgA9mAB0JyMAjVM0JdFW68j+mavwSGHJkYKSw/nFGzNzZiclJcf0mIM1PTb2/KSU+uzctwuKZRGaC0t+7C68x5FVlmjTNdCrEYAGAAAAAEQkOS2uqja75gn7+jdT9n5m3/tp5h55qOGffR7e0aD3HHPs+Chj03vJa19LfOCV/pvetjX8MWPvJ4U7Phi79bWzHnxh2u2PjL9i2bBpFxeOnemSx5gZeUMnp0+9YOC6+jv/9NlHKnb8hz/8YeU3VpYOL/XGoN1FXoVtQ0GbJ4o3/lxYVOwZAdrRFoD+2tcud7qcAwa2BaAD8mafB3uyz4NkEvJ84cKqn/z04Mn/8/Thv/72n40v7blsyZSR09PKzs6eOMc99RL3Rde7rluXf9fuojv2umt2p9/0VNyNT3vSzFdtip23xTf6LA8dfX7EE3de9Hhb+lkej3tKrqqLnXNbwiV3p2cX8RvpQC9HALqPqx2Rtn+CfdNoMpedLC6m3/qR6U9NdOwdT+YSYeFgPE04GAEAAAC00zA6fd+Y9NWDCel2Mmdi3IbhaXvGpN8/hHWLKCXGxFyQnFKflfvr/KIPCjwx6J+5Cr6RkTk+IVHX6K5iY/qVJ9oesGcdchU1e3v+mrtwQ1b22UnJcTG6Dno9AtAAAAAAgIgk2GIXrXXf3DD0ht2Otb9MfvwP6Z4hnz/XAz8HHA1aHruPOh77ffqGt5PXvJpQe6j/tuakfUez9v1p4GPNkza/MmNN49SbN5RdcsOQyXPzx850jZvlHnVW9rDJ6XOuHLvnmS3/dOIfPQHkkydf++UvFi9ZXFRUmJebp1LOQiee1bDQKggtTwMEoL8WOgAt5R6DB5WUlMjUzjn3nG/uf+Lf/u1f1awPvfHjr99+0dhZmaNnOibOcU2+0H3uIvfi1fl3PF50577Cpbsd1+/rf+PTMUsaPLnnqzb75p7VQ6Wfr7YO/CyPhtjFO2MXbI+tXBs3uyZhenXKZd9wZOUTgAZ6OQLQfVzt8LT94+2bRpG57GSezOWI9KcmOPaOI3OJsHAwniYcjAAAAADa2Tkqfc/o9NWDk/vHeDKLcs7A49QfsiYLbHEbStN2j06/j3A5Tk1uXNyC1PRv5jrfyS/2hInzi7+T674x3T4wPkHX6GaGJyTcmmF/KS/fE9rOL37LXdSQnfe1lFR7bJyugb6BADQAAAAAIFJLVk760R9X3bxjTNX6zNsaUza8ndJwNGPf5zoGvSd4DHrXJ/btv01ffzjpgVf6r/1Fwo4PU/d/nrvvT6WPvTtt009m3vdU+Q1rx56/ZNCEc91jZ3hGgx45NWt4uf2q6yqaDjz73//73ydPnvzv//7v55//9vlz5zhdTnmYoaD9FesAtOPFF1+UhldccYXL5WoLOqvMs4c895Z4DBgwoKCgYPyEceseWnv02FFv8vnkb1re/sa66yee5xo10z7+POekue6Kea55d7qXbS+8+4miW3flXL/Hdv3+mOo9sfO3eqLPQQd+3h678NH20eedsYsbPCVXboidc2f/adfYpi1Jnrc294Kbc/on8rvpQC9HALqPWzM87ZtkLk+DuJh+D49If3KCYw+ZS4SHg/E04WAEAAAA0M7OUekNo9IfHZm2dmgqj058rB+W9vjIdFm9BKDRKYb1T7g53f6iM//9/OLm/OJ380t2ZTuvTE3L6k6pYnd8/NWp6ftznO/ll0gn38sv/nau+7rUjJJ4xhbqiwhAAwAAAAAiVVCUd//uyo0/m333sxMW1ZUsrnfc9f3krR+k7v7UrmLQKgOtHr4x6E8zG/5o33Ykdd3rtvt+1n/9rxN2/SHtmT/n7/t47CNvzdjwo4pV+6YsuXfU7Hkl42a7xs5wlc10lU62j5mZe9PdV/76nVdUKPkvf/nHrVu3Tp48KSc3Jz8/X2WgfbLQxcXFubm5mQ5HU4AAtPgq9zx4sOdFQUFBaemwmpqb3nzzDTWXL/7y2bbdD1RUDh0xPW3cOXkT57inX+6uvMVds7Hg7r1Ft+9xXteQfO3emOq9MQu3x1610RN9nrdVP3zSzwvVwM+Pxy6SR9vAz1fv9DS58N74GTckli9KnntH+oINWRfcmpXp7Ka/Tg+gExGA7uMeKE19YlzGxpFpZC47lzdz6RnQd3dZhi4CQuJgPE04GAEAAAC08/jI9B0j03eO9IwDvXe0518ep/6QNbl7lGetPjYyffUgAtDoNJMTbavtmT93FjTnFx/JL37dVbjBkX1uUnJCzBkevCc5NuaipORtWTlvuIukY9K9A3kFd9odZQk2XQN9DwFoAAAAAEAU4uL7Tb0k/+795Rt/OvuOfeOvriv8+uMZq3+S/Mjv0/Z85tj7d94MdJAY9D4pP+bY8YeMze+lPPhawv0/j9/0ZuI3j9mf+3PR3o8mPPLriodfmnnnjslVK0ZMv6yobKZnKOjR03OHTcmYfF7RfRtuafn4iAoof/i7D++8685hw4bl5eUVFBR4A9BFhW0ZaB2AznQ0NXkC0FdeeYXL5bQEoJXBAwcNlFYlxcWXX17Z9NKLX375pVT+69/+o7Fp96WLJ42Ynj52dvbEOa6pl7gvvM593bqCu3YV37HXfcPj6dUNcdW7+y14xDPq81Wbvoo+m4ce+FlFn3d4089toz7Lv1XbYy9ZE1+xNHHqkqSzb06bX5d1+b3Zw89KiTnTl48AdA0C0H3c/UNTnijL2DiCzGUn82Quh6ftH2ffPZbMJcLCwXiacDACAAAAaGfL0FQep+mxdWjq5qGpd5YQgEZnSomJOdeWvCUz57C7sNld9L67+OW8/HszHOPPXNR4aqJtjSPzp878ZnexdOmXzsKHHdkzEpPOeCwbZxYBaAAAAABA1DKyEy+4dvCD35u14eDsWxvGLljvvnFfWu1ryTv+mL7Xbyho8zBJ6N1HHY/+Pn3D28kPvJrwwM/7b3sv6em/y3ruz0N2/668/rWz131n5u3bJn7t5tLyiwrHztAx6KGT02ZXjnj0iYf+8Z/+7E1Bn3z10KsLr15YXFycl5dXVFwkT0RRkeeJlMjZbtNLTVLtqquucrlcnsizMWRwSUlJYUHhjBnTd+x49J/+6S9qgq/86gfVt104eqZDHhPPc02+0H3uItfi1fl37Ci8a1/hTTsdS3bEL2nod/WjntyzJ/q8xfJoSz97os/bYxc+qgd+Vo9F3ujzgkdjKx+KO+f2hKmLk2bdkHpFraNqXc7Ei9NTMrrRHxADcLoRgO7j7h+asm9sxobhZC47WVxMv4dK075ZZt81hswlwsLBeJpwMAIAAAAA0OO54uOvSkndn533Tn7R++6i99yFjTnOmrSM4vh4XaNLDOufcHu6/YVc1/v5hdKNt1yFuzJzL0lOzY7jvhoIQAMAAAAATpV7YFrVylEbD5770I8qbnxk5MKNeTc/m7L+zZSdf8oIFoNWGeh9n3li0Ls+cWz/bdr6w7b7f95/zav9d/wmpfHPec/93YiGD2Zs+dnZtc/NWLp+/EXXDpl4nnvsTGfZTNeIqZnDp9ovWzL1+e/v+2vrf5w8efJvf/vbc889d/75c5wuZ35+vspAl5SU5OXlZWVlvvT9l6TOVVdd5Xa7Bw0aNGTIkMFDPAM/FxQWjh075p57VrW0/N6bfD7524/evXvttTKjkTPSx5/rnHS+u2Kea96d7lvrC+/eV3TzzpwljyQs2hFz9WMx87bEXrWxffRZPdTAz9s9KWdP+nmHHvv56p2xi3fGLnws9ooNsXPu7D/t67azqlMuWe1YsCF71iJ7pitBr0oAfQYB6D6OzOVpQuYSkeJgPE04GAEAAAAA6CWG9k+4IS29Kcf1nrvwfXfhYVfhrqzcqpS0jNjTfjElNzbumtT0b2bnve3yzPpdd9HzOa7FqWkD4/vrGujzCEADAAAAADrF0PFZN22euOWV89a8OOParcMWbc1e/kLKpvdSdh2z7/07T9A52GjQnhj0p5kNH9u3HUld9+vE1T+LX/dawt6P0r9zvODZT8fufG/2poPn3Lf/rOvWlJ23cOD4s11qNOjh5Y5RZ2Vde/ulr/76Ryq+/MUXX2zesnnipIkul6ugoGDgwIHyJDs7+wc/+IG8O3/+/PyC/MFDBg8ZMqSouGjI0CHV1df84rVf6Lb/+NmWhvtmXTpk+LS0cefkTTzfdValu/Jmd83Ggrv2FC/b5bzmkeSF22MWPhozX0WfN7d/tKWfPQM/P9I++vy4Z9TnhTs81S5YFT/9usSpi5PnrshYsDH7gmWZBaVn7G+FATizCED3cfcPSdk7Jr2uNM3Rn8xlZ4rp12/dsNQnxmY0jE7XRUBIHIynCQcjAAAAAAC9R1y/fhMTEu/JcLyS537PVfi+q+jVvPwNjuyzE5NP0wWVhH4xFyWl1GfmvOYskNm96yr8SZ57ebpjTEKirgF4EYAGAAAAAHSWuPjYSXPcdz0xrf61uau+NW3JxkHXPGJf+ePk+g9Td3/mCDgUtDzMaNB7jjke/4N9y/spD76WuPqn8XW/Snz6qON7/1jy7NHJj755zoYfnr1q97RFK0fPuqKkrMI5dqZrzAznsCkZE8/NX7n2+t+0vKOizL/97W9WrLijdHipy+VyOp25ubk/+tEPpXzBggX5BfklJSUDBgy4+OKLGhsbW/+rVcr/87/+7bkXGy5ZNGnk9IyxFVkT57jLL3ZdeJ372rX5d+4qumOP+9pH0hZsi1uwvd/8bbFXbfI82kWf1WOLd+Dnem/0+bG29POO2EWPe/6Vty5+IH5WTUL51cnn3JJeVZdz+T3Zw6Ylx8XH6BUHoO8hAN3H3Tc4Zc/o9PXD0nISY2NjPEOl8jj1h6zJhNh+a4em7huTsXMUmUuEhYPxdDw4GAEAAAAA6IXSY2NnJ9q2Zma/4cx/11XwrqvwBzmu1emOsQmd/HdOyxNtD9ozD+S6ZBYyo1858x+2Z52VaEuO4ffX4YsANAAAAACgc6VmJJxdNaD2hYqth+bcuX/S4g1F1+5Kv/+VpEdb0vYGj0HLQyWhd//J8djv0ze+k7zmUMLqn8Ztezup8fPspn8c+uQfpz3yq/MefnH2nY+Vz7t95LSLC8fO9MSgR0/PHTYlfcbFQzY/vvrvjh/1pqBPHjr06pIli10uV4Y948c/9gwRPX/+/Nzc3Bkzznr0sUeOHz+uqv3slz+oXnbh6JmO0bMyJ5znnHKh67xF7kX35i/fUXTn3oIbHnMs3Ba/YHu/qm0xQaPPm2Pnewd+XqgGfjbpZ2/0uWp77GVr485eljB1cdKsG9KueDBr/rrc8RekJ6XG6ZUFoK8iAN3H3Tc4Zeeo9MdHpj80LHXtUB6d+XhsZHrDqHQylwgTB+Ppe3AwAgAAAADQC7ni4iqTU57OynvbWfCuq+AtV0Fjdt6taen5cfG6xikY1L//irSMF3Kcb3sC1gVvOvP3ZOVcmJScE8t9NQRGABoAAAAAcDpku5OvuH1E3cvnbv75ecsaxi3a4L5pf+raXyU//nH63s8zPTFovwC09bHrT/ZHPkyvezPpvp/1f+Dn8Y81J7/whfPFfxj5zd/N2Hro3LXPVyzbPPmyG4ZNnps/ZoazbJZ75LTsYVPSL1o46anv7Pj3v/7ryZMn/9b6t2effebiiy5688035eX6uoe/sWrlH/7wkTf5fPKDlnfuerB64rnuEWelTTjXNWmua9Y897wV7lvrC+/aU7j08eyrtyZWbetXVR8zb3PslZtir9rseVhzz56Hd+DnBY94Hp7osyX9LCVfWx973or+U69JOuua1MtWZy5Ynztzkd2R11+vIAB9GwHoPm71oJQdI9MbRqbvGZ2+d3QGj0587BzpCbPKQ69rICQOxtP34GAEAAAAAKDXGhzf/4bUjB/kut52FrzjLHg9L393Zu685NSUaAdpdsTGLUlJ/2ZW7q/z8t91FrzlLPhujnNRcmpxfCfkqtGLEYAGAAAAAJw+A0c7rn1o3LZD5z/0o7NrHh29aHPussbkurdTGv5k98SgP2s/GvQx70M995bv/KO9/oPUdb+yrf5Z/JpX+u/9XfpL/5D/wp/H7T4ye/NPzn3gmRk3rZswd8ng8ee4PaNBz3COmJo5clrm1UvPf/nVF06e/L+TJ0/+11//67//+7/lyf/+7/96k88n/+6LP23euXrGJYNHnJU+7uyciee7p1/urrzFfdPGgrt2F93akLd4a3LV1pgF22LmbYq9cqNn4GeVfjYPlX72DPy83RJ9Vo/HPeNAX7kpdu434qdfa5u2JGXuCsfCjXlzb8kqKLXplQIABKD7vNUDU3aMSN85Iv1xHqftodc1EBIHYxc89LoGAAAAAAC9SWJMzNiExHsz7K/mud905r/tLPhpnnuLPasiMbL7Yf1jYi60JT+amf1qrvsdT/Q5/yc57uXp9uH9E+L7xehKQBAEoAEAAAAAp1VcXMzo6XnLd07d/ssLHmyquG5b6ZL6rDubkrccSd11rC0GbTLQ6mFi0J7njsf/kLHl/ZS1ryXcczDu4dcSn/yD/Uf/b+Dzn03c+c45G398zuonplevLjt73sCy2a6xM1xlM13DpmSMrXDesmrBG+++qkLPyr/+xz9/89uPXLRwwvBpaWMrsiec5556ievC693Xri1Y0VB0+y7317enVm2OrdrWb/4WT/TZk35uH32Wh44+13uizwsftUSfd3j+nbcl9qLV8TNvSphydfJ5t2ZUrc+9fFXu0MkpcfFcogHQTnV1tbooN2rUKF0EAAAAAAAAAEAPkhEbO8Nmq3dk/TrP/ZYzXx4/zHE+kOEYmZCga4Q0ISHx4QzHyzlO1fY1Z36dI3NyQmJqbJQjSaOvIQANAAAAAOgCCYlxMy4vvu9bsx791UX3fmt69eZB1Tvs9xxIqv9d6p7PHHs/DzQUdFsMeu9nmbuPOh5rSd/4TvKaQwn3/iRuw69tzx/L/vFfhjQenfboG+fVvXTOyp1nLbxz9PTLisbOcpbNdI+enjtsSsaU84vvXV/z5vu/+OPR333n+/vn3zh71AyHPCac65pygfu8xe5Fq/OXP1a0Yk/B9Y/aF2yO90afYzzR5w3egZ/Nw6Sft8TO36YHframnxc+5im/tDZu9q0JUxcnzbo+/aq1OfMezBs3Nz0xiUs0AAKoqqpSF+UmTZqkiwAAAAAAAAAA6HFy4+Iqk1Kezcp9Iy//7bz8N3Ldz2fl3Zya7oyL1zX8FMfH35ma8b3svMO57rekSV7+vqyc823JWbFxugYQBgLQAAAAAIAu48hNuviGYXU/mrP9tYvufrJ88cai6/emPXAo+bE/pO39vH0M2mSg25LQez/N3PWJ49EP0+veTLr/5/3v/Unc9neSX/z7vB//48inPppe/9q56747+47t5V+7eXj5RYVjZzrHznSNnp5bOjlj2gUl514xZsR0T/R5/DnOiee7Kua55t3pvrW+8M7dhTftyFq4OaFqa7/5W2Ou2hh7xQbvwM/W9LP3oQd+bos+ex5toz5LYeXDcecu7z91cdKMa9Mq78teWOecsSDT4Qzrl9sB9E0EoAEAAAAAAAAAvUSMJ9Pc/8aU9B9k572R6347z/2LXNcTmTlXJqUkx7T7M6kZMbGLk1Ofycx9Pdf1Vp7717nuF7Jzl6Sk5scTfUbECEADAAAAALpY/sD0RavH1b960bZXL7xt18RFm9xLn055+I3knZ9k7P3cM96zJwbtyT072mWg5fFp5t5jjoaP7ds+SH3o17Z7fxp//8/idzan/uh4wfe/GPPEb2dt/tm5D36r4pYNky6+buikOe6xM1xls9xjZ+WMuzBj0iW5E85zT7/cddkt7poNnujzLTvzFm9Nqtocs2BrzFWbvNFnb/rZ+tDp5y2xVdtiF1jTz/LY4Xkprc6/K/6sr9umLk696O7MhRtcc5fmuIbY9KICQBAEoAEAAAAAAAAAvYotJmZU//73pzt+nuN6I8/9Zp77Z7muenvW9ETPnbO4fjHn2ZJ2OLJf8UafpcJPcvLuSs8Y2r9/QruMNBAuAtAAAAAAgDOidGLurfXTdr5RufHHc5fuGLN4a87t30ne+G7KrqMZ+1QMWo8D7bA8PCV7pfxo5uN/yNj6furaXybeczBuzSvxT/4+4+V/KG76+4m73pu96cC5Dzw186aHxlfePGh6pWvi+Xmzr82tWOK84Fr3tQ/m37Gz6LZd7mu2pVZtjl2wrd+8zbFX1HkfG/Twz9aHGvhZRZ+tYz/Lv1dujr3w3rgZNyROXZRy3q2OBXWuyrvzhkxK0YsHACERgAYAAAAAAAAA9EJpMbHTE5Iec2T9Msd5ONf9Rq77B9l5D6Y5Hkp3vOwdH1oKD+W6NtkzJyYkprQfHxqICAFoAAAAAMCZ0j8hrnxu0X1Pn7P77SvXNc25bmvpkkccd/0gadtvUnd/at/7uXco6E890efd3oc1Cb3308zdRx2PtaRveie59lD/VQdiH34t4bmPMw/+v8HfOTZlx5tnb3r5nAe/Nf2uHVOuXz9k8bq8a2rdN28puL3Bfd32jKrN8VVb+833Rp+/1hZ9tj6u3Bh71eZ2Az97Ht7os/w7f2vsJQ/EVdycMGVR8uyb7PMecs570DXu/AxbMn+bC0C4CEADAAAAAAAAAHotR2xspS35mcycX+a4Due6fpnj9OahXb/MdT2RmX2BLSk9NlZXBaJFABoAAAAAcGalZiSev7h0ww8v3v3WVfc1VlRvGfT1nen3/jRp++/T9nzm8MSgP83c/anOQFuS0Gp86Mxdf3I8+mF63VvJ9/+8/z0H4jb9OvGFYzkv/8Ow54+d9eTvL/3mW1WbfzRt5ZP5t+1wXbvFsXBz/6ot/aq2xASLPsvjyk3egZ+t0Wdv+lkeVdtiK9fFnX17/6mLk2Z8Pf1r9+VeXeeePj/LnttfLwwAhIcANAAAAAAAAACgN4vt1y8/Lq4mJe3FzNxf5Djl8d3MnOqU1Ly4OIZ9RqcgAA0AAAAA6A5yC1IX3DX+sUNX7vr1vJVPTl+8qfCGJ1JrX0ve8cf0PZ9l7vUOBW3NQKvHnmOOvZ9myr8NHzvqf5O2/g3b/a/0r/1FwpOf2A/9a/Gb/1/5gROXNhwpu/+H9ht2JS7YFlO1JeaqutivPewZ+9kn9yyPKzd6o89bfaPPCx+Nrdoe+7X1sXPujJ9WbZu6OO2SlTlXb8ifc1OOa5BNLwAARIIANAAAAAAAAACg94vt1294//7r0x21afYB8fFEn9GJCEADAAAAALqPwaNzbtk084m3r37s0JW375q8eIvz5ueS17+ZvPOTjL2ft49BH9UP72jQnoc83/nHjMd+n7GjJX3HR+m7P7E3Hc/75b8PeuazvPt+Gn/9E/0W1MdetdGbda5r//Cmn+WteVs8YzxXWdLPCx/1/HvlxtgL7omffn1C+aLUOcuyrt6YX3m3a8ikVN1pAIgcAWgAAAAAAAAAAIDoEYAGAAAAAHQrsbEx42cV3v/khU83V9f/9Gs1j45dtC17+QtJm95P2XXMvvfzzD2fZfpkoM3DMyB0Wxh61yf2HR+l7/3Y/sQn9vt/nlC9O3b+ttgF9Z6I81WbYq80MWjvwM9Xbfa8a40+L/BGn6X8ovvjZtYkTLk66eyazPnrXPNr88eea7elxOnuAkBUCEADAAAAAAAAAABEjwA0AAAAAKAbSrTFnzd/xJbvX/XsB9fXff+S6+uHX/NoxsofJ9X/NnXPpw7vUNBBY9D68SfHrj/ad36UseP36Q+8mvj1PbFV9bELtnse8mTeVm8MeqPn3/lbY+e3vWUC0PO2xV76YOzZy/qXL06aUZ1xxf2uqx8uPOuqrPSs/rqLAHAKCEADAAAAAAAAAABEjwA0AAAAAKDbynamzl82ec8vq599//ra58+v3jzwul2p9/086ZGWtD2feWLQuz8NkoH+k2PXx3Z57P7E0fCxfc2hxOo93qDztq9i0PLc83JbW/RZHo/GLnzEU3j5Q7Hnroifeo3trCXpl9ydu2hj4Zwb81yDk3S3AOCUEYAGAAAAAAAAAACIHgFoAAAAAEA3Vzgk6+aHznn2vZueeve6ld+ctXhTwY37k9f+Kunxj9P3emLQfhnoPzl2f+KJPsvzPccsAWhv4tkTejbjPVsfj8RWbY+9YkPs+d+IO+u6xPKrU+fenrNoQ2Hl3a6B41Ji42J0bwCgMxCABgAAAAAAAAAAiB4BaAAAAABAj1B2VtH9eypf+P1te365ZPmuKYu25N7aaKt7O7nhk4w9nzv2fJr5VQz6T20PHYDOuP9QgicAXf9VALrKL/p85abYi1bHzbwxofzqlHNuyqpaV3DVAwVjz7En2GJ1DwCg8xCABgAAAAAAAAAAiB4BaAAAAABAT5Fgi6+4dHh906Kmj+549KcLbtw+ZnG9Y0WTbcuRlF3H7Hs+c+z5VGegd/1JP/Yc9QagX024ZneMij7rALQlA33VlthL1sTNvqV/+dVJM691XHG/++qHi866Kjs9q7+eMQB0NgLQAAAAAAAAAAAA0SMADQAAAADoWdIybFfeOPmbr9U0fXTHxpcuv3brsGt2pK06YKv/MG33p54Y9O5jXwWgdx917Pw4475XEq7ZpQPQJv0sj3lbYy9bF3vO8vipS2xnLU6/dKVz0cai867Pyxtg0zMDgNODADQAAAAAAAAAAED0CEADAAAAAHqi/JLMm+4/9ztH7vjub2+vbZy7ZFPxdXuSH3g16bGP0vZ8qoeC1gHoP2bc93PfALQ8v3x97Pl3x037ekL5wtQLl+cu2lB82Yr8AWWpegYAcDoRgAYAAAAAAAAAAIgeAWgAAAAAQM81fFz+fTuv/OEfVj337i13PzFr0SZXzVO2db9OevyP6Z4Y9DHHnqOOx/+YsfrnCUsadABa/r1iQ+wF98RNv6H/lAVJ59RkLdk4+OraQWXnOPonxOrpAsBpRgAaAAAAAAAAAAAgegSgAQAAAAA9WkxMzLTzhtW/cO3Lf1q995fX3bpj0tWbs257PnHDO8kNn2Ts/czR8LF99Sv9l+zyRJ+v3Bh70f1xs5b2n7zANvNae9WDJTdsHTW7qsieY9OTA4AuQQAaAAAAAAAAAAAgegSgAQAAAAC9QHJKwiWLJ33z1WUHj97/6MGFN2wbtag+/c7vJ277TeqOP6bf+7P4RTtiLq2NPee2+PJFtqmL0i6/t+D6bSMvvXmIe2CangQAdKHLLrtMXZSbMWOGLgIAAAAAAAAAAECYCEADAAAAAHqNHGf6tXed+733v/HDP9yz/ruV12wcVN2QuvJHiTXP9L/wnvip1ySUL0y58Pa86+uHz//G8GETc3QzAOhyc+bMURfl5IkuAgAAAAAAAAAAQJgIQAMAAAAAepmBw5yrtl3x8kcPvPjh3aufOnfBQwXnL0+fuijlvKXZ12waWv3wqInnuZOS++vaAHAmEIAGAAAAAAAAAACIHgFoAAAAAECvNHnW0M3fuvanx2of/v75l92bvXBtyfWbRs2uGpCRmaRrAMCZQwAaAAAAAAAAAAAgegSgAQAAAAC9VVxc7MwLRi7dNu7qurxzlxRmu1L0GwBwphGABgAAAAAAAAAAiB4BaAAAAAAAAKCLEYAGAAAAAAAAAACIHgFoAAAAAAAAoIsRgAYAAAAAAAAAAIgeAWgAAAAAAACgixGABgAAAAAAAAAAiB4BaAAAAAAAAKCLEYAGAAAAAAAAAACIHgFoAAAAAAAAoIsRgAYAAAAAAAAAAIgeAWgAAAAAAACgixGABgAAAAAAAAAAiB4BaAAAAAAAAKCLEYAGAAAAAABAd1cbXEVFRWlpqa4HAMCZQAAaAAAAAAAA6GIEoAEAAAAAANDdnQzDoUOHysvLdQOcUbIhKioqysrK9GsA6O0IQAMAAAAAAABdjAA0AAAAAAAAujsVcT5x4sSh9lpaWtRbRl1dnc1m081whhw7dky2hWwg/RoAejsC0AAAAAAAAEAXIwANAAAAAACA7k6Fm4MFasvKympqak6cOKGqtbS0kIE+swhA91C1wVVVVVVUVNjtdl3Vj64XiLQNc3R23aAj1dXVukFHdINAOlwiICIEoAEAAAAAAIAuRgAaAAAAAAAA3Z1KNocO1DqdzgMHDqiatbW1uhRnAgHoHkodPiGcOHFCDq6AoWFdI6SWlpbQSWhdryPh71q6QXAhlgiICAFoAAAAAAAAoIsRgAYAnKL9+/cfOnSorq5OvwYAAACATqeiih2mHm02W0tLi9RsbW0tKSnRpehyBKB7KO9xdvL48eOy7XyobaqcOHGitLRUt2mj3grYVgrVu0p9fX2wwLGqEHAiVjIF3aAjISbY4RIBESEADQAAAAAAAHQxAtAAeoeKigrPXy/tCSN89aCuhsNut6t7hb1miQAAAAB0R+rE41AYgdrKykpVubGxURf5kToNDQ0qBHngwIFVq1aFk5a2thJyFhSwlVSTt5YvX65f+ykrK/OcFPo1V+Wmobw0s9u/f391dbUqN2RGsoyqgjScO3eufiMIm80mEzFNmpqaampqguVQfTrjdDplLZmG8pb/OL5mucSJEydkExw7dky/biN1dO020gGZi/rNWqE2B1HUM0UdO7I59Ov2ZI+V/UfVaWlpkT1Kv+GlyoO1FVVVVSYJ7d9cUe+GmEikQk8w9BIBESEADQAAAAAAAHQxAtDdk/WGkY/q6uqKiopw7sr1CH1nSRERu91eU1Oj7skeO3ZM3QCVvSLEDVB5V92u0q+7sei6am40O51OXdQ9yKGqFsd6F9tzDNfWVlZW6tdo0223IwAAANDdqRMP+TKtX4ck1aSynE/q1xbl5eXWYV+t9u/fHyz+GKKVnPzoSm1kOlIecO6KOY+qqKjQRV6qXDVcvny5qmPV3Nys8srSTzlP1qUW9fX1wRZBztBUKNlHa2trwKy2tTPSVlX2UVdXZ52dWa4QfGLT0iRgr0RTU1OwcDZOH7XyQ+ePZTdT1Xz2HFUYuq1sU9myqqacIetSC/VW6IlEJJwJBlsiICIEoAEAAAAAAIAuNmPGDHVR7rLLLtNF6AbCuWF06NAhn9tkXclut8vcxSneiur+S4ouZrPZ6urqWltb9eb3c+DAAf/hokRtbw9Aqxvoorv9VoDq2IkTJ/RrL9XVTrxf2SOoT8XQ45R12+0IAAAAdHfqm3SYAeiGhgZV3ycNbA3yHj58uL6+Xs7QGhsbTbi5ubnZP0AcsFVTU5NJ7srsdFUv9b3/VALQUq4qqN8GlumbHkoHpKbKa0oHpPNSQeZoOiMn1WpqVmaOcr4tlVetWrV8+XKZiBmOVyaiq7YxnSkvL1dn6bJyzLKb83br7ObOnSsbSFEVpFf6dRvr6pX6aiJSTZZRplxTUyPda2lpUeWysP6bA6eVWvOyFfTrQOxtfwrKZ89XhaHbCtmmaseTncT/l4PDnEj4wplgsCUCIkIAGgAAAAAAAOhikyZNUhflqqqqdBG6AXNbqrm5Wd8famPuASmNwf+a62ll7sT53KqLVPdfUnQlu90um15v8pMnjx8/Li9rveSJuZkrT/wz0FJHvatfd2PRdXV/dw3Oqu3icydRdbUT71f2COEsdbfdjgAAAEB3p75Jy8mhfh2SGT7Z+huK8i1cncDI2ebcuXN1qZfNZlORYuHznT5EK2HGsrWepqrv/VEHoGV2QppbTxvkhNkM+dzY2Cj/yktrOFgqq5C0f6hU3lJx5JaWFp9f2ZTJqqlJBZ8zbWtnhM+78jLY7BT1bujt1dzcrHol3dBFberq6uQtwZ8W6mJqtXd4Pq8u26k4vhFmW2F+qcD/ep8qD2ciYQpzggGXSPbMmpoa2Y2F7NLyr3xQyKGh325PDufa2lozhrQcF54LWt5LWv5N1LvylsxRXRVtaGjwv9plJU3UX5WSJkKeyMuAR5+IqDPoLASgAQAAAAAAgC5GALp7UveYRLB4cWVlpckHn5G/zSgdU3MP1sMwdf8lRVc6fPiw2tay0X3+KK6w2+21bdHhEydO+NziMW/p191YdF0tLS2Vw0R0q9GvysrK1LL43D5ThZ14v7JHCGepu+d2BAAAAHoA9YX7UHgBaBOvtMZnTcTZWmhl0szWlHBD22DS/ulnId/sGxsbfSYoZwVS/1i0AWjhHzgW5gRMNDc3+4eGTXOfCyhmEQLGK2UR1HC8PiczoTsjzEoOeL2mwwC09D9EcyHlPnFtdAG1UTo8n5ctK9V8dvIw2yrqep/syfp1m4gmEo4wJ+i/RHLIy86vmvs4fPiw/86pLveoKdTU1KjfOlDkLVVHWbVqlfVdK/kU8j+0hRwOuoafgEdQ+J1BJyIADQAAAAAAAHQxAtDdU7AbYVZ2u13dS2ptbQ14Yfy0ko512MNwdP8lRZepqalRO0Owez2KqVZfX6+LvKJLFZ8RPairHTLL4rPJVGEn3q/sEfrmUgMAAABdRH3hDjMAbS5bVLf9sqaJ+R44cECV+HM6naqVCQhKK5WADNHKn5wVSBNrktJHsKshplxOjHVRe6F/R1x6q961njCbBQ/xp7VUNLy1tVW/9uqwM0KlKhsaGvRrC3UpJ5wAtM/pPc4stVE6PLMNeDSF2VYxQ4/r120imkg4wpygzxLNnTtXNZRyOQRWrVolR6t8MkgFVd7c3CwHl6qsqEsksueXlpaqQ0NVk6PAfBAJE2WWmrISampqqqqq5CgwowLIE121jRkQXT6OZC4yNSFPVJ+F+cgywuwMOhcBaAAAAAAAAKCLEYDunqrDiAULkwQNXe10MHcST3HW3X9J0TXMDdnWIH8716rZ+zdyfe6yqTs7Qr/uxnpQVzukBkjqggGbeoS+udQAAABAF1FfuMMMQJvworngVVJSokpWrVqlSgJSp6Ym8htmKx9yViBNTiUAHWx2Jnzp/1eTFJ/+C7MIATPTirnsYj0h77AzQgWyA26UDgPQQvVW/uVyT/fh2eQdndmanconvK4KwzwrNhdHfC4DqcJOPLUOZ4L+S6SuPcnOKW+pEsPEkX2OKbVE0kTatra2BjtwzKHhk58WagrS1jrevBzsnpl5g9E+60qmoHLkwmeY9jA7g85FABoAAAAAAADoYgSgu6cwY8HmArj/PSy73S6FTU1Nh7z2798v0/S/rm5VVlZWW1ur6gvVxGdUVymROkLeVbOWJ6pECXE3LaBTWVJ5LnM0DUtLS2U3Vt3wHz84ihUinE6ntVVjY6O00u8FUVJSIh1Q9UV9fX3Av5FrFc6at4q0fo9g7k2HM/CTrGT/kLSsEzUF9VJtO9lksooaGhrkuX8TRdaetJUK+rUf2cekgvBZyarcNJTpr1q1Kpw5SitrV33IbinT8c6w1nr3ynRDv24TdTcMWa6amhqp7NmfDh2SqZk76XJYyfT9/6yrIg3VKEL+vVILKDunft3mDPZWVqxs67q6OtVQnnT4g0+ayLxME9k5/XtototQS93c3Kxft7HeLTX19etA5HCQCmqmoVfLqa9PAAAAoMdQX7jly65+HZJJ9JoTBvn2rEpCnwmoQVjNb3mG2cqHnAtJk1MJQAe7lKCmLIJd0fCPHZtFkFMF78lIAE1NTaqO9eylw84ImZFUCLhRwglAm1kIqS/dkM7ItvNZLehKanP4n88bsu+p7S4qKyt1qZcqDNHWKthRoAoPHDgg5QH5JH07pCYY6RKpiwgB5yVvqex+sF/NF8GOGjnEVAWZuC5qTzrgcyavDs/W1lbr4WnY7XbVmYb2A7GH0xl0OgLQAAAAAAAAQBcjAN09BbsF4MNcM69tn6WTlyqV6OPEiRMBN7TNZjO3unzIdKxNzO2AYPz/SGNop7Kk6laaKmlsG+5E8bkjEOkKUcx4Lj5kvsFufzQ0NOhK7bW0tAQMZYa/5pVI6/cg5h6uT8g4fLKV1RTk+fK2vyZqJZt7VaDxbtReLZtVv/Zjpuy/X5mGZk+2CjZHa1d9yOKbP3kqe6Au9QrWKupuKNJEKuiqFgcOHJDOqO0S7C5hZWWlqux//Kpy/4ZnqrfSVXVD0IcU+tyuNeSACthEyKaRg1FVM9slBOueE2Lri/Ly8hAz1ZUsTnF9AgAAAD2J+o4bOlBr1NfXq/rmJFO+4quS0BcgfE4Rzffs0K18qJMTMxF/wSZryn3OP40OpyxvSQXrWgp4qhCMdb4ddkao1RVwo/j3JKCampqAp3misbGR3+nsemrlBzy1lj1B9gq1ZQPWCVYeULCjQBWGIDuGrhoe1Sq6JQpGjcXe0tKiX3uZE/4myxDsPmSOqk7Ak3x/8gmmrmn65Jut1OVIOY70a69wOoNORwAaAAAAAAAA6GIEoLunYLcAfAQcF9kEZE+cOCHPa73UDSnFPwxnmqiBS2tqauTfAwcOmDtQUqJq1tfXy6SE1FRvyRNVokSatDuVJVW3J6SrMlP1rlD9sd4gi2KFCHUjQ0greS5N6urqzFK3trb6Z6DNNKVjUlm6Kq3MdKSJfwY6/DWvRFq/B1HrVhZEv46crAq1Ekz6WTZEQ0ODbAvr5vZfRepdqaxf+zFT9rnnq8qloey96m5UmHM0E9Sv28h+a/Yx666uBGsVdTeE9diRytJKpiZP1B4lu9b+kAFo9a5UNmlgwzPFQA3PSG/N54zM0XwIyBPVAeE/O5PtFjIL6Z40sR5r8lzVlIlLBUW9dfz4cf26jaqpyHRUNf3aQn4Qmy4dPnzYZwGFmamhphbd+gQAAAB6GPXt1ucbdjDq/Fm+TOvXlj88FHowVPVNWr5Yq5dhtvKhTk7MRPwFuxpiyoNljjucsrwlFaxrySyCtJVTiNBMXlx02BmhVlfAjeLfk2DklFI6KXOXcx5zVqzIFiQD3cX0qu+IbNnwrwUEFOwoUIUhyBmvrhoe3awjAZcoGNlXVSv92kv2YVUoi6aLAlEn+cePHw/ncry5JBpimuZyibX/YXYGnYsANAAAAAAAANDFCEB3T8FuAfio8fuDrib6eeDAAZ87RFKnpaVFvWudbFlZmSqsbT+MtLDb7aqJ/OtzC0CmoFqF7mGHol5SoW6lqRRjsLsGUawQYe4R+LeS1aVShs1tfw5XMU3q6+t91pXMSA3p6jM8dqRrProt1VOoVeSzViNiNoFsoBMnTvgk1GUTmxtM1vu5Qt2uDXH72Ew5YABaJquEP0czQf3aSyaudmnpf8CbUwFbiai7IXum2pnlLZ9b+bLbq3t5arsEu3dpjkH92kLKAzbs+t6ahrJ3+fwSgqxzNd62VPB5Sy2aNPHphpDpy1vC53NDqPLQt3qDbUfpgOqnrAGfHcAsoJDmutQr6vUJAAAA9Dzer8RhBWrlO7T6em09D5evy2oK/r9vaqXOrs1c5Ju6ahXRrxWq0wbpg37tp67tb075nFeYqySdGIA2ixDwVDOEDjsj1Bl1wI3i35PwyVmfOfUKfYqFTqdWewhygup/PqyoCmFuMhPb9TkhV4WduN3VBEMIsURCPjrkWJDT78bGRtmf1WeLoSt5mRP+EFMT5sgScrou06yvr5e20sr/1N38frasEKkTkPp9D2E9VKVcFYbuDDoXAWgAAAAA6DvkjFudmEd6Jz7qhgCAgAhAd0/mSniIa9QlJSUq2Sb/qsyr/KtKgqVgTcDOevtJRYSlPGATmUtNTY3/j13pmLQSp3gVPbolVdStNBEs2xfdCumwVWVl5f79+633FKSamk6w/G7AAHekaz66LdVTeFfPKf1ZTvl+qCYim88nBqqYNLzsdbrIS7a+FIa4fWymbN3oIuo5mob6tfdumtrrZPv6pHsN/1ZK1N1obGxU5QFbCdmfVYWAtx1D30NXb/k37PreqoayYgM2NB8C1gGk5DjyTumkHOy6qD3ppM/9WUW1Cri6jGDbUVqp8oA7gBz1agGlt9bDPOr1CQAAAPQ86qut9QQ+GBMHtH6ndzqdqrC+vl4XBaLOEBoaGvTrthL58q1fh8EkO2Wmuqg98zuOPldD5Iu7Kvc5/zTUmUNEAWgRxSKIDjsj1Bl1wI1yKgFoRZ0FhVhYnA6eTd6WCfbR4VUn1Tb0WbFhToP16zaqMMyJhENNMIolkgNZXazxIfuk+g1soat6mVP0EIeMIgdXwCkL+fiyfm6YwzAc1vmG3xl0IgLQAAAAAHBmyVmwnBFHZHnIsRJCkLbRnXpH3TBS3uXrWNRroI+obvub4MGu9AI44whAd0/m4nZFoFiw3W6XH0DmSru5nWfGBAkWoBT19fWqjvlJauJxEf1slY6pVgF7GL7ollRRt9JEsGGYolshciyokhCtfJilCNFEVbDeZo10zUe3pXoEWSK1aKdye0u+mIWeiM1mUxV8/laqfFGRwhB3VM2UfdZ81HM0DdVL2W3Uba9gGVbFp5URXTekUN0BDxE6N0dQwCmH3iHVW/4Nu7i3pmGw2QkVjWhpadGvLdluWUZdFB7VKsS8RMDtKP1U+0CIBZT9RDW0fuJFtz4BAACAHkl9tZVTOP06CHNucODAAV3URsWOjx8/HuxqtTm9t14mU2NCSyv5eq2L2vOfmrmy4HMhQzEnAMLnaojpQLAzf/nqL++GOINV10p81pJahGC/tB1Mh50R6ow64EZRf3An9Exl1YW4kiKnMd75+54G47RS6zz0mW0wEbVVe4j1bFyJaCLhiG6C5vew5ZiS53L6LUeruWqjjkShXirmFD3EIWNVXl6+atWqhoYGOYLMVU5h/YwyHyY1NTXSgdCsn1GRdgadggA0AAAAAJxZcnasTofDF+I6W2hRn3p32Tm7mkuHol4DPpYvXy6LFvByaLcVTp+5xgJ0fwSguydzj6lD1kyb+dQNMXyJuQ9oPsBNqG7//v3B7uX5M18b5Ikuaq+srOxQEI2NjbpStEuqmFsD+rWf6FZIOK18mBR1iCbqbqM13Rjpmo9uS/UIst7MoumiyJkNFywQL1SY3idjKvukFIb4Uhfs+0zUczQN5bnseCqhKzUDDipsWFtZRdcNOUI7bOVsGx8t4HZRyQH/O5VKsIZd3NtwGga8pa7SCLJX+CcZQlDTCb0bB9yOpp+hI9eqjnX60a1PAAAAoEdS333lFE6/9iPnlvJ1WVWTEy3/UyxzCSDgt3Y55VPfnuVf61l36FbybV7mJb2yzs78VmXA+G9DQ4N6V/hcVTlNAWizCAEv/8l6k37KlH3Of04xAK0WU1ZOsNMqcz4sT3RReyqBGuy0E6eJrHMRcG/vUPhtzWmw/y8qqPLoOhBQFBM01+DkrFsXtWfi0fq1lzlFj+5+mHxuSCfVFExvzYoKdpgEc4qdQXQIQAMAAADAmSXn0YcCUefIx48f168trAGmiER96t1l5+xqLidOnNCLGkTUa8CHuizZiZd0ukA4feYaC9D9EYDunsKJBTc1NcnPbt3AS10klx9e+nUg5h6cNWanhlwR6p5dQ0ODfIBXVlb63ys0OgxAmwr+rPfpoltSRf0ksk7NR3QrJJxWPlQTWXuy3oJRvZXVq9t4Rbrmo9hSPYW6y+yzfiIiq0KtnIB7ixJwK8hLKQyxI5kp+3yfiXqOpqF1/5dtWl5ermsEYlrp122i64bsNqpViMG2hPRK6vh/37O1jawc7G9He6cdoGEX99Y0lEKZdUBqBxDW7SvlqlAda7KYUiJzD9FtoZr4L7WVmbJ+7WVurYZeQPV7FNY1Y6YW6U4IAAAA9Dzqu698wZXvwT4aGxvNN3shZ5jBvlub2KKcYEsd9XvMclJdU1Ojfg9S+F/paPL+4RhhbSXfwpcvX65ayZmDT8zXpJylY+pkT1rJKYqalHm3awLQwlxQqKurM12VJ9Kl5uZmKZcF8TmvOMUAtDkfk1nLc1lSxcxdVoi6FiBrT9akWquK1DG/ax76FAud7lRWe/htzQ7pfylElXfido9igupXpUNcHDT916+95LNIFZ7K/TB15m9+d8LW9nedQv/CtL9O6QwiRQAaAAAAALondY7cuVeZoj717rJzdjWXgBfuTgd1WbJzV/Lp1hP7DMAfAejuydxjko9Z+dlnVVFRESwlqQZkDXEXTMgPUDVlmZQu8t5XMncAfcjUpDO6noV0Q1WQJ7qovbIIR4COaEmVYDf1jOhWiEyww1Y+VJNw+PQ20jUfxZbqKdSdo4hWuw/ZgmpV6NeByPSlgs9W6HCLmyn7fP+Meo6modLU1KSSu1I5xNjewWYXXTfMoRf6S7Vq6P99r8PArnrXv2EX99Y0DIfPxOvq6tR28XH8+PH6+vqAW0pV8F9qq4BrwPQz9C8zqH3VumaiW58AAABAj6S++3ZIvq9bo7Q+5C11sSAgOQcINkZyiFYnTpzwPzWSE3gVZPQnJ/bmYoTPVZUOT37kfEPelW/5+rWfYCcAMkET2fTnn34W4ZyJ+Z+lWJnguJVMVr/dr195ebnqcDDyboitidNBrfnQZ7bBhNnWnMo2NDToIgv1VnQdCCiKCaqrb3L+r1+3JweLuV6gi7zMcoU4ZIQ0rww+nLOK/luPcXWMBBxOXgl4hSLMzqBzEYAGAAAAgO5JnSN34tUGEfWpd5eds6u5dFlQQF3B6NyVfLr1xD4D8EcAunsy95iCxYsDCn1xXpEfoGrK8iNVF7WRt2S+9fX18uNPDcFjSKGu1KbDAHSYoltSRf0kCvHDOroVEk4rH6rJiRMnZCKhWW/zGRGteRFp/R5BrcPW1lb9OnKyetVK0K8DCbjPyEsplLf0az9myrLmdZFX1HM0DYXaZOZACPHNKtjsouuGGYor9KEne7XU8e+VdFvKZXsFS2x7px2gYRf3Vn60qYbSYZl1aP531Z1Op0wh4LHW3Nzsv+zqrdBfj2VGqpp+7WV2AP/IgZWKK1jXTMCp+Qi4EwIAAAA9j3ypDebAgQPy5Vi+vof5B5LkK7hPGlhOJxoaGkI3928lJ0VyAhCslZwz1NXVqRMVRerLCYaUy8mG6rnPOcDcuXNVuVTQRe2tWrVK3pVTaP3aj7wlFdSppj9p7h/LliYBT0U67IxQ50vBZidqamqkgvWESlajfs9LzsRk26nzFitZbzLZELPGaaLWf+gz22A6bCsHizmIZK8IuH3Vu9F1IKAoJihHimrlcyVIyPEru7R6V+hSL3OK7t/KWL58uaoTLAOtJi5rSb+2XDLwOXYUmZccPnIU+6zMcDqDTkcAGgAAAAC6J3WO3IlXG0TUp95dds6u5nKoq4IC6vpe567k060n9hmAPwLQ3ZO5sh1RLLi+7a+DBoskivLyclUn4DVzK7vdXlNTY+5A+dwLk46p8iiCy1bRLami+hbih3V0K0T9lUsRopWPDv8wZkRCr3l/kdbvnsx3vKj7b6agXwcScJ9Rw3gdDx55l2873gn7fv+Meo6m4apVq3SRZWCsYMdmsNlF141wPgqcTqeq4/99T90xD3H0BWvYxb01DYONVB0R+UyQDph7tdbNp6jy0F+PA64B84ka+mexCk7IrqJfR7s+AQAAAGhyziBfxyNN2ZaWlkqr8G9RyPSlvsxLv+4G1IJ3tysIqlci/Csy6HTqJDP0mW0wqm1zc7OcrFrV1dXJSak6O1Xk1DrYbw6oCtF1IKAoJmiuJkg/ZYdUhXa7vbKysqWlRaXzVQX1liJLqgpDfDjIp4H6fYDW1tZVq1ZZa8pzc21IJqVLvWSVqnJZCvNJIsevuSAo/wa7aBX+JxVOHQFoAAAAAOie1DlyOBcHqqqqGhoaDnmZMRf0e+35nHrLv9a2dXV1wS59dHjObrfbq6ur1TAHQp4sX7480guYQs1FpqBfh0HmK90TwWZXXl6uKqgLFGVlZeqlUGkG/+tC1sWsqKiQElkc9VKWVFaaqmauwBjhbwvDZrNZWwmfyy8iuj4L6a0u8uPTVZlpsK3vswZkRlJZNWxqapK3utsFW6BHIADdPcnPFO8PoshiwfKpqFoF+ykpampqVB1ztTw06YCqLxPXRV6mPKIe+otuSZUOU33RrRA5FlRJiFY+TJMQP+8iFWzNBxNp/e5Gfoir/ofYoIbsNrKYPt+45JuAmoJ+HUjAfUa+h6iGwW6wmttMPrtE1HMM2NDcApOvWAH3vWCzi64bsq+2ev9eqyy+LvJjxl32ORGQ7qly863Mn6rgfwbRxb2VhqowRFcjJfuJ+hpsHY9JUfMKfd4UbOurQnlXF/kxy2JdCdGtTwAAAAAAAlMnmeHcEfSn2oamgr+6QSCqWnQdCCi6CZqIsw/pf3l5ubmgqWt7mVP00JcUy8rK1Il6MHIC73OJyjpytj+Zmv8cw+wMOhcBaAAAAADontQ5cuiLAyFO2AP+Irf11NtcKPDR1NTknyIKfc5eVVWlshH+Ig09qFYRBQXK234n/MCBA7rIQpZFhVpkRalrF8EW3Mqa6FXLLs3luSypCl4o8paqIyLdFkplZaV1glZ1dXW6UrR9FgG3V0VFRbCZhtj6ag2YvJoP6W2w9BKAgAhAd0/m8zaiWLB82KpW9cH/9KiKcsqPJOunpcwlxMVw9fPL55uAfNp7Z3VSPpB1UVSiW1JF/bwL8cM6uhVifqCHaOUTvTVNIv2+Eemaj2JL9SDSc+9aDPpXQBXZUmpJ5V9d5GW+dejXgQTcZ2SrqYYmBG9lkqnCZ+VHPcdgDWX7qnL5zub/fSZYq6i7oYa+li/P1i9vVib57bNTmcM22BdLoSr4741d31s1NXlXvw6PbPeA+4PS2Ngo05Qp69dt1J5pHaHZX7A1oAbVlikE+yprGlpHs456fQIAAAAAEICcPYrofr1etQ2ooaFBphn6wpai6nfi7/dHPcGqqip1nm80NjaqiwVyZq4mq2oq1dXVqtDnuqE/u90u/VEXAqykRCYS7LqANJGJ66peJ06ckBUbcHbhdwadiAA0AAAAAHRP6jw6RJimrKzMxI7lbLrWOyCx/KtiCqK5udnnhN3cqjdPpKGcvC9fvlxmZEKxIRr6XyQx4RVpXldXV1NTIyf4Ut9coLAGeTukmkiv9OvwmO75p8FkuaRc/XK4KjFXSIRagdJV/bqNdfHVxI8dO+Z0Oq2rSKrJkqo6UWwLYcatFFJT6kv/GxsbzVzMOHPR9Vn4by8zSp+QVlJTtqDMSEU0RLCtLxVkodTcpaHsNkIamgWXaroBgDAQgO6e5INdfabJJ54uCo98MIZoaD6WrdFe9TOipaXF/zdPhPzQUU18or3yEa3KQ3xDCEfUSyrCSfVFsUKE+oOT8pMlYNRSFlneCthEfiwGXI2ymPKW+XmtRLrmo9tSPYgsgvppLv8GC9bLjme+1fgsqdma+nUgAfcZ+XqjGvrnVmV21hF2TncAWsh+pd6SOrqoTbBWp77gslP5RJllweXLlXpX+Bzmam+XaerXgQRsKLq+t7KfqPKAP+Zkm8oEpVcyEV3k/UU72QlFsLC1+mDx6aFQO6cc7Nap+Qi2BuQLrSoP+KsXssjSH3lXequLvKJenwAAAAAAICxlZWUd5raj5nQ6KyoqAl7sC0Y6E8WFVHQBAtAAAAAA0D2pe+oh4k0qARAwIlBXV6eaB0uoiObmZjnB1294yUsTbfFJLZuGPlcbysvLVSbg8OHDPlOz2+0qpSGChRj8qfqRBgVMSkY6Y+2hSWxI/3VReyqXEGIlC7XsUlOtnIB57ii2hYlTyJR9BrqTxTEbwn+C4fdZ+GwveanS1cePH5eVo0u9ZKYm+uMzcTU1aaj4dEkWRHVJFsdnHwAQwqhRo9RFOZ9oJs6sqGPB5gNWyCe/+aiU6ZiP9JaWFp+onyqXn8hVVVXWZKH8XJBC9a7/DwIzQfnclukrPj9KOnS6A9BRrBAhrdQPR2FaSR35mSU/m1T5qvYDx0gd1UR+tFlzllJuco2nuOaj3lI9iFlGId/f5KXZMeSJrEm10YVsPp+tZr516NeBBNtn1Dco0djYqL5FqM2tys03SZ/vM1HPMURDma/sJ+pdn4MiWKtTWXCTG5a9V57Lt0TZtWSCqr7Z261fyaSH6pgK/SXQv6HSxb0V1lUqlc0tRXkim1i19fliab4eS7nPsSatzJdqeaJL25iwtXRePtwC3r4MsQbU/iZk9zb9kR1S9nzziRTmXmEVbH0CAAAAAACg0xCABgAAAIDuSd1TDxFxsNlsy5cv94mxKvLWce8AzAcOHNBFXuZW/YkTJwJmVaWhulXf2toqz3WppaFPAEUlHqRywNCPzCKcoIaVdyae7h0KIuDYbMJEpg4fPqxK7Ha7WgmmxJ/JbejXgZhlF1VBBmqNYluYKEnAyJp0XnoV8C/RR9Rnn+1lIs7B/sa9SRpZEyfW3SbghjajSstK0EUAOjJo0CB1UW7p0qW6CN3AqcSCpYn6wA+oubnZ5zNZWH/EBOSf8xPyUax+vFrJTwf9dnhOdwBaRLFChPwwDdFKfnrqehby09l/hRgtLS2nvuaj21I9i3whMXHVYBobG63fDxWzcvTrQILtMwF3ZkW2texC6rnPFox6jqEbmvSt7IHWBG2wVqey4MLEeX2o73jW54pZG8G+xSmqjv8XxS7urSLb17pTyfStLwN+sZTD2WSOhTyX/qiOKTIF/3yz7JYB917r51uINSATtI447kP64H8KcIrrEwAAAAAAAJ2DADQAAAAAdE/qnrp/kiBMjY2N0vz48eP6tZe5Vd/k96fGjaqqKlXHeqffNLQGUGxtA9HJvHSRH+m/VJBq+nVHvDMJJUTPTZZLeisv1axb248J7UPlEkKvZLPszc3NuihC/tsinFUXTER99tleKlLmE8W2crb9HX+1DhUztRArX0VVAubSAAREALp7UkPPioC/79Eh+RStq6vzye+2tLQsX77cPzaqyBzlZ4E18KfIDx35uaYr+ZEZyQ8C6aeuHXkA+lSWVDosDYP9SpJVFCtE2O12+YFijTwKeekz9rOVzEh65ROllfnK3P2zkkqkaz66LdWzqDUvG1cvm4Usu6wBXa898z1Bvw5EbU2Zsn5tIdtOvpmoKSiyHWXvkj2kiwPQQvZMVcH6nSdYq1NccCHLpVa4IhM0K1lN2fp9z8wu2C6tqDr+XxS7uLeGbEc5DH2OTSF7VLAPHymXSfk3UTuG7DC6XntqRj455jAD0EKayyeMT4pajnfpifXXAo1TX58AAAAAAADoBASgAQAAAKB7UvfUAyYJwtHoDd0K/drL3KoPHSFSdaSyLrI0tAZQ5LkqDDHur8xI1Qmd1TBU5WPHjskcAwo96J0awLi1tVVqqkmFziSpXELolWwmFfXwxv7bIpxVF0xEfQ64vUJsfaFiagFzPyF6q/IiJDyA8BGA7t3kp16Fl34dBtMkYNiup4tihSiqVYi0tA8zo2ApSX+RrvnevaUM+drQxYtZVlYmswv4lzH6GtnH1Fcv668ZNDc3d8/vWgF7688cOCLMw1P2Pd2gC/dDs+ezKwIAAAAAAPQABKABAAAAoHtSSYJwAtClpaVVVVW1tbWN3hEZfcZL05W8TJI12Bh+ihrd0Dqab8BAbUXbsHwyX6kQkEokC2vDEFTlqLMdTqfTOsykdEy/EUREYeLQK00Jc1uYVRc6zx1Q1AFoM1P/v+JtpUbOsw53baYWIggiCysVumEoB+i2CEADAAIy39lqampUiQkZy7cyVdJ9+PcWAAAAAAAA6CIEoAEAAACge1JJgtA51+rqahWH9WfKdVWvgLlYf/4R24ANZe6qMBxdE4AWpletra32joadjihMHHrkuYi2helkReRjYUbU54DbK/RMVZRZ5qJfh7fbEIAGIkUAGgD6LPmOGuIX0swvEJrvbOZbXFlZmSrpSpH2FgAAAAAAAOgiBKABAAAAoHtSSYIQOdf6+npVp7W19cCBA7W1tdXV1RUVFSr1a0KrqrISZpZXDaLcYQB67ty5qlBqSoXQOswiK2qCUedobTabGsBYkfnqN4KIOkzsI9JtYVZdOKNK+4i6z2HOlAA00DUIQANA3yTfw1taWuSLk/XPrRgm69zU1KSL+vWTL35ScuLECf26C0XRWwAAAAAAAKCLEIAGAAAAgO5JhQmC5VzLyspUhaampoDZYhPJ1a+9TJK1srJSF/mRqak6UlkXBYnAlpaWqsIQY8JFSk0w6hxtXV2dNG9tbQ1zLLpOCUBHsS3Mqovib4VH3WfTz+XLl+uiQFTGxboJOlwDggA0ECkC0ADQN1l/YU++18kXSPmupZjyEydOOJ1O3eCM6lm9BQAAAAAAQN9CABoAAAAAuieVJwiWc12+fLmqEOwPYR84cEBV0K+9atuSrCEisCYmu2rVKl0UPALb2toqhfKufn3K1Fyiy9FWVFSo5tIfm82mgrzHjh0LMfh0pwSgo9sWUa+6qPvsdDpVYX19vS4KRHXMOshfh2tAEIAGIkUAGgD6LPl2ar4f+pO3ulWeuGf1FgAAAAAAAH0IAWgAAAAA6J5UpCBYzrWhoUHeDfaHsJ1Op4qxCl3kZZKsx44ds9lsurS9xsZGVae0tFQXBY/ANjc3S6H8G2xqkVJziSJHK4t8/PhxaXv48GFVUl5erlaCLJEq8af6b5oE1GH8N7ptoWYtfQ626oJFSU6lzyq8Iv0JNnET5raOEU4AGjgdCEADQB9XVlZWX18vX58U+coqX7pC//WSM6hn9RYAAAAAAAB9AgFoAAAAAOieVOQ0WAB61apVqkLAUYetg7TpIi+TZBXyXJdazJ07V73rk68NFoGtrKxU5dbhog2pfOzYsYaGhhBjMPtQUzsUeY62qalJGra2tlp7aLpdXV2ti9pTae8QgWARbNmN6LaFWdUBN7FKb8t6sMbQlVPps9lesrr8g9fSf5msvOsTy+5wDQjpqlSIYsMBfRYBaAAAAAAAAAAAgOgRgAYAAACA7klFToMFoCsqKlSFlpYW69Br5eXlhw8fbm1traurUxX0G14qyXrs2DEVoj1w4IC0VelkeWKaSHOfLG+ICKzMTr0lXTVpXalWXV0tM5LyEydOBEwGB6QmJQ1ljqHpBl41NTWqoTzRRV42m011T5bIP0ksqqqqVMPm5ubKykpZCYo1sS3zUnWCxX+lvqoQ0bYQKrQtpNrcuXNVoFmmsGrVKllpUi7/+qecT7HPspnUW9JbM1PpqsxUpZ+FTE1VVjpcA4IANBApAtAAAAAAAAAAAADRIwANAAAAAN2TipwGC0ALk2T1p3Kx6rmu7aWSrMeOHbPZbNaRia1OnDhRVVWlG7QJEYGVEpOB9hdR+lnoZmHQDfr1Ky0tVcldWSJdZGHelU76j3ksVHLXhzUBHE78N4ptIex2e7CtIGTV+QSRjVPps8xUxd8DkplKh3XVNgSggdOBADQAAAAAAAAAAED0CEADAAAAQPd0yGvVqlX6dSA1NTXHjx9X4VTl8OHDKsBaVlampqBqKtXV1VLS2Ngoz202W0NDwwnvSMNKa2urdRRnK9VQ+A9IrEg/W1pa9IS8ZMrBphaCmks4dIN+/WQp5OWBAweC9U3WkmriH+xWli9fLu9a16Q1TNzhsiuRbgtDpu+TIJcNIQsVenan2GdZFT4zle0lM41u64v6+nqpIP/q1wA6QgAaAAAAAAAAAAAgegSgAQAAAKCns9lsFV76dYRKSkqkbaRJ5WDKy8tlaqHDu73YqWwL2QTSMMQoy6dDH99ewBlEABoAAAAAAAAAACB6BKABAAAAAACALkYAGgAAAAAAAAAAIHoEoAEAAAAAAIAuRgAaAAAAAAAAAAAgegSgAQAAAAAAgC5GABqdaPny5bW1tdXV1fo1AAAAAAAAAAC9HgFoAAAAAAAAoIsRgO7jysrKasNTUVGh2/Tr19jYeOjQofr6ev26zbFjx06ePClv6dfdTLBuA72DOlQrKyv16+5n1apVcgwKp9OpiwAAAAAAAIBegAA0AAAAAAAA0MXcbre6KLdixQpdhL6kurr6ZHhqa2t1m+BB5xABaLvdXuElT3RRl+vm+WzgFHkO1JMn9+/fr193P9I31cmSkhJdBAAAAAAAAPQCBKABAAAAAACALpaZmakuyq1evVoXoS8xAejm5mbPuKzBSU3dJqoAdEVFhXc+J+WJLupyBKDRu6lDjAA0AAAAAAAA0NUIQAMAAAAAAABdjAB0H2cC0BHlksvLy6V+WVmZft2mmwegg3Ub6B3UIdadA9ClpaVyDAqbzaaLAAAAAAAAgF6AADQAAAAAAADQxQhA93HRBaCD6eYBaKB3U4dYdw5AAwAAAAAAAL0TAWgAAAAAAACgixGA7uMIQAO9hjrECEADAAAAAAAAXY0ANAAAAAAAANDFCED3cdEFoJcvX15bWytt9es2/gFoqSM1xf79+9WM5IkqUWRSump7JSUl8q5MSqmvr587d65+z4/qj1mE0tLSqqoq7+Rr7Xa7KhTBuu3TXGbU0NCg5itP5F2bzabeCqasrEx6qJoIaSV9UG95e1ErFdRL4PQxh5h+HSHZ82VfNfuw7PlOp1O/F4QcXzU1NeZ4kebl5eXqLTkE5JgyB4IiJd4Dola/DkQdvGqCqhvWoxgAAAAAAADojghAAwAAAAAAAF2MAHQfF10AOthIz/7l8tw7+aAOHz6sq7ax2WwNDQ367fZaWlp88pSKmq9KVTY2NqrKSklJiaojQndbmsusA3ZY5mtinT6kSVNTk67X3qpVq6SCeu6fugY6ndrZoghAy+59/Phx1dxHXV2druRH9uoTJ07oehYHDhyw2+3qdx58OiNHmaqjX7cnn0IBu9Ha2lpTU6MrAQAAAAAAAN0QAWgAAAAAAACgixGA7uNOdwDajIvc3Nzsnc9JeaJKFJUStpJCVVOmVldXp4ZnPnDggCpsbW31z0CbBLNMTVUTakbWIWxDd1uaq8imzEJmJy+l8y0tLZ5peQutWWrFZrMdPnxYVTh+/HhTU5O0EjILqS+FNTU16l0C0OgCameLNABdVVWldlch+3NDQ4Pah024WQ4HXdXCeqxJZZ9W0iTSALT5LBLSDWkoh785voR8FOiqAAAAAAAAQHdDABoAAAAA0D2tWbNGBS+eeOIJXRSSf/2UlJS//OUvUtLa2lpUVKQKAaA7IADdx53uALQh0/fOp4MZmXxkfX29zWbTpV5mkFr/QaPVfJuamuTnrNSpqqrSb7QXutvq3wMHDvjM13RJpq+L2pi3pJU1aS2ktzJBEyElAI0uoHa2iALQpaWlKv0s+6rPXiq7tOzYapqyq+tSL9m9VSs53ObOnatLvUwrdbSGGYA23fCfoN1uV7+HIBX8fwkBAAAAAAAA6BYIQAMAAAAAQvD5i/ZWH3/8cUNDg8Ph0FU7WzcMQC9evPjIkSN//etf1YyEWgkTJkzQNYJISEhQbXUzr5aWlmXLlvmvwA7XeYezA9D9EYDu40wAevny5RVB+ER7RegkcdQBaJvNpkKQzc3Nuqg9M6ByeXm5LvJS8xXHjx+32+261E/obgv/9LMiTVQF68TlueltwFZlZWWqlSAAjS6gdraIAtBSWbXyiR0rsmOrsdtlV7fu/OYrouzkuqg91UqEGYA23fA5tJWSkhKZIAcRAAAAAAAAui8C0AAAAACAEEKEcZUvv/zynnvu0bU7VbcKQI8fP/7DDz9U0w8oRCelrTUz7ePzzz+/5JJLdFWvDte5CHOdAOi2CED3cSYAHYJ/MvI0BaBNZwJmMRVVob6+Xr/2MgnmmpoaXRRIhwHogOFLUVVV5V/B9LayslIX+WlqalJ1yG6iC6idLfwAtM1mU4OU+49ubsjBqCZrDi7ziwohWslBoVqFE4A2E5RvnroIAAAAAAAA6FkIQAMAAAAAQjBhXJ/EbUJCwoYNG0yud8WKFfqNztN9AtCVlZVmSQ8ePGgGYJaVcO2115q3Xn/9dVVuZZIowqetWYFffvmlNQMdYp1bZ0cGGujRCED3ceEEoEtLS3XtNqcpAF1fX6/qhBjFuaWlRSr4JC9Nglm/DiJ0t48fP65f+ykvL/dOvl2OOZzemiGrCUCjC6idLfwAtBmkfPny5booEFXHTNa0CvH7Bk6nU9UJJwAdzgQBAAAAAACAbo0ANAAAAAAghGBhXMWke48ePepwOHRpJ+kmAWgzEREw552QkPDWW2+pCj5dNWM/f/nllwHbBlyBYa7zUx/WGsAZRAC6jzMB6BC5ZH+nKQC9f/9+qSA/VmqDCzgLVSj/6tdBhO52c3Ozfu2npKREKghrjln19sSJE/p1IGb0XALQ6AJqZws/AG32zxBjrgv1WwfmwDHfAEO3UoM6hxOADnOCAAAAAAAAQPdFABoAAAAAEELoMK4JB/uMYdwpukkA2qyBgAM8Kybo7DOj0GtPkTqy9j7++GOzAs/gOgfQZQhA93HdKgAtDVWdDvnMIsR8raLothIwAK16K23160DMUhOARhdQO1v4AWhz+PuP8m6ldnVzgJhWclyokoDUYRVOADrMbgAAAAAAAADdFwFoAAAAAEAIocO4ZvBjnzBuaWnp008/rRIYyhdffHHPPfcEHCVaJrJhwwZTWSZ18OBBqRksAB1+/dAB6MWLFx85ckQ1EdLDhoYGnx6GnzY2K8qM9Bx1Ujm6dQ6gZyEA3ceZ6GF3CECrnzsnTpzwjvUcik+eOMR8raLotsII0OgR1M4WRQC6rKxMFwVy+PBhqWMOEDNgc+gPDTk0pE44AeiqqipVGLobAAAAAAAAQPdFABoAAAAAEEIUYVwzHLK/o0eP+ieMP/zwQ/22RWtr6+7du9Vz66wjqh8sAG267U9qWmMlZln8e+7DxK/NQNHht/URep1HnasG0K0QgO7julUAuq6uTiqEjhQHdEYC0PX19arQbrfrIj81NTWqDgFodAG1s4UfgDZHZVVVlS4KREWZm5qa1Mvy8nLVKsRe7XQ6VZ1wAtBmgpWVlboIAAAAAAAA6FkIQAMAAAAAQog0jGtKPv/88yuvvFJVGz16tAkc+0zHTF/qm2zWtddea41QW5tEVD9YANpM5OjRo/4TseaVzWB7JtYcjKlpmoff1kfodW4m67NQAHoWAtB9XLcKQJuBYENEigM6IwFos+pCpDabmppUHQLQ6AJqZws/AG1iyrW1tbrIjxyMqk5DQ4Mpke9+1hJ/5ltiOAFoM4vly5frIgAAAAAAAKBnIQANAAAAAAghzDCuNTS8ePHid99912dw4oBZ5IDNFfOWMLOOtH7AmYYYmNmM4mym4D+uczD+kw2/rY9g6zwhIcEa9V6xYoV+A0APRAC6j+uyAHRZWZl3Pidramp0kR8zEGykOcgzEoA2MdDm5mZd1J5ZZEEAGl1A7WzhB6BFS0uLNDl+/LjNZtNF7ZnI8ty5c3VRv34HDhyQEtn/ZSfXRe3JQaFahROAFuoYlFbBuhGsHAAAAAAAAOgWCEADAAAAAEIIEcbdsGFD+GFcqa8GgTZjRQv/wLFh6lvfjbR+wAB0iImY+iayfGYD0MHIOnz00Ud1bQA9EwHoPq7LAtA2m807nw7SmWrI5OPHjwccBFp6K2/5h4k7TDArUXRbCRiAFvX19apcFsqnw2VlZWqyCgFodAG1s0UUgF61apVqJTuzLrIoLS1VKf+WlhZd5DV37lzVSsqlji71kiO9oaFBvSvCDEAvX75clQcci1pmJ92QSTmdTl0EAAAAAAAAdCsEoAEAAAAAIYQTxr3nnnt0bYvS0tIbb7xxw4YNL7/88scff2yi0tYAtJq4tcTKP3sdaf2AAegQEzH1owgxd1kA+pVXXpkwYYKuCqDHio+PVxfl5HNSF6Ev6bIAtFCjxor6+nqZnVJeXq7f9iorK1OBy+PHj1dVVelSb7lJara0tPgMB9thglmJrtsiWABaumFGupUONzQ01HrJD1BZClFXV6feJQCNLqB2NjnQ9NEVhE+MWPZ809CM6Cx15IhTB6OQVqrcMClnqSPPly9fLges7PzqaNq/f796N8wAtDCHkrUb8jW+pqbmxIkTUi6HGAFoAAAAAAAAdFMEoAEAAAAAIYQI43788ccNDQ0q7Gs1fvz4Dz/8UFfyY5LHAceEtvIZqjnS+sI/AG0dKDoEU7+yslKVdBhiNjVNADr8tj78k9zCf/oAejp1UU7o1+hLujIAXVZWpoKMVtJEv92mqqrKv5rR0tJSUlKiq7bpMMGsRNdtESwALex2uzRU71rJT/C5c+fKWlUvCUCjC6idrUM+e6Psw4cPH9bv+ZE92fqrCFYm3+9DhZ6tz40QAejS0tIQ3ZDPhIg+owAAAAAAAIAuRQAaAAAAABBCwDBuCGYgZPHll1++/PLLd9555/nnn+90On3iyz0iAO0/rnMw/uM9Rx1ZDrjOrT0Pc1sA6ObURTmhX6MvmTt37iEvM+RqOOQHhDSpr6/Xr9sEKzfkp/D+/fuljvo5IvwD0EKqyaR8YtDHjx+vq6uz2+26kkWH81VOpdtSQcjq0kXtlZeXS3NVp6Ghobq6urS0VMoJQKMrqZ2tQ/57o81mW7VqVUtLi67hJd9C5WhVe3IwJSUlssOrPV/U1taaY0RNJPwAtCLdkCNd1VHC6QYAAAAAAABwhhGABgAAAACE0BhhANrUv+eee3SRV8D4sqocLNDsP+tI6/sHoEXoifgwU+iwvpn7ihUrVEn4bX34L4hiEtXWxQHQc6mLckK/BroNu91e4eV0OnVRj1JTU6N+YpaXl+sioBsrKSlRR9wp7rFy5Ko9v8NfSwimU7oBAAAAAAAAdBEC0AAAAACAEIKFcQMyKWf/hG7ANLD/mM1GwAGPI60fMABtJmKSyqGZNWCGdvZnBor2WfBw1p705+OPP37ttdcq2v7CeLBWDAIN9DLqopzQrwF0krq6OvXjsocGuIHoyJdJtefX1NToIgAAAAAAAKAXIwANAAAAAAghugC0/5jHJnZsfcsMaXz06FGHw6EKFfOWMLOOtH7AALSp6R9olv5LPydMmKBfe5mJiICZ6RC5ZBOMDjYIdMDkdIh1bjrvHzEH0OOoi3JCvwYQtvLycvOLQz5sNtvx48flZ6X8q4uA3sJut1dVVekXfpqamtQXxWBHBwAAAAAAANCrEIAGAAAAAIQQUQBamPqvv/66yignJCTIWacqFNYosDU6/Pnnn5usxrXXXqtiwYqZdaT1AwaghenkwYMHTZB69OjRwdLblZWVZvrSxCSkpT/WWQccItqa/G5oaLC23bBhg2orb1mj1SHWuXUNhLlFAHRb6qKc0K8BhKe6ulp+DsoP97lz5+qiNna73fwYDZETBXqi0tLSlpYW2bflK6UuslDHhWhqatJFAAAAAAAAQO9GABoAAAAAEEKkAWjreMlWR48elXNPeeITL5b6H374oapjJdW+8Y1vqHywddYR1Q8WgLbGiP0FXNLx48cHnK8RYv345LN9+KwQEXqdMwg00Guoi3JCvwYQntLSUvkhqH4aNjc3y8/NWi95osZ+FgcOHNC1gd7CZrMdPnxY7eHHjh1rampSe74w5SdOnHA6nboBAAAAAAAA0LsRgAYAAAAAhBBpAFqMHj26qanJRH6/+OKLe+65x+FwqLGQ/fO+aizkY8eOqfpSQY2yPH78eP8AtAi/frAAtLJ48eIjR454p+Eh03nllVdC/8Vw1cSaZv7444+t4zoHo/oslXUzr5aWlmXLlpkhqI3Q65xBoIFeQ12UE/o1gLCVl5eroXD9yQ/9uro6m82mqwK9iN1uP3DggN7X/chbpJ8BAAAAAADQhxCABgAAAAAAALqeuign9GsAEaqoqKitrW1qajrkVVdXt2rVqpKSEv020EuVlZXV19er3V6oQdBD/xYfAAAAAAAA0AsRgAYAAAAAAAC6nrooJ/RrAAAAAAAAAAAAhIkANAAAAAAAAND11EU5oV8DAAAAAAAAAAAgTASgAQAAAAAAgK6nLsoJ/RoAAAAAAAAAAABhIgANAAAAAAAAdD11UU7o1wAAAAAAAAAAAAgTAWgAAAAAAACg66mLckK/BgAAAAAAAAAAQJgIQAMAAAAAAABdT12UE/o1AAAAAAAAAAAAwkQAGgAAAAAAAOh66qKc0K8BAAAAAAAAAAAQJgLQAAAAAAAAQNdTF+WEfg0AAAAAAAAAAIAwEYAGAAAAAAAAup66KCf0awAAAAAAAAAAAITppptuuvvuu7ds2ZKTk6OLAAAAAAAAAJxma9euXbVq1YoVK/RrAAAAAAAAAAAAhGnp0qVqpJni4mJdBAAAAAAAAOA0UxflNmzYoF8DAAAAAAAAAAAgTIsWLVL3WoYNG6aLAAAAAAAAAJxOmZmZ6qLc6tWrdREAAAAAAAAAAADCdMUVV6h7LZMmTdJFAAAAAAAAAE4nt9utLsotXbpUFwEAAAAAAAAAACBMc+bMUfda5IkuAgAAAAAAAHA6DRs2TF2Uq66u1kUAAAAAAAAAAAAI06RJk9S9FgabAQAAAAAAALpGVVWVuijHqAQAAAAAAAAAAAARS0tLU/daNmzYkJSUpEsBAJ0qBgB6Kf0xBwAAgAitWbNGXZQrLi7WRQAAAAAAAAAAAAjfsmXL1O2WUaNG6SIAQKfSOUEA6HX0xxwAAAAi4Xa71eW4NWvW6CIAAAAAAAAAAABEZM6cOeqOy6JFi3QRAKBT6ZwgAPQ6+mMOAAAAkTCX46qqqnQRAAAAAAAAAAAAImKGnBHyXJcCADqPzgkCQK+jP+YAAAAQtvj4+DVr1qhrcfxBNgAAAAAAAAAAgOgtW7ZM3XSprq7WRQCAzqNzggDQ6+iPOQAAAIRtxowZ6kLcmjVr4uPjdSkAAAAAAAAAAAAiZR0Euri4WJcCADqJzgkCQK+jP+YAAAAQnrS0tHXr1qmrcDNmzNClAAAAAAAAAAAAiE51dbW69bJixQpdBADoJDonCAC9jv6YAwAAQHguu+wydQmO4Z8BAAAAAAAAAAA6gXUQ6Dlz5uhSAEBn0DlBAOh19MccAAAAwjBo0CB99Y3hnwEAAAAAAAAAADrLjBkz9B2YLVtGjRqlSwEAp0znBAGg19EfcwAAAOhIZmbmunXr1JW36upqXQoAAAAAAAAAAIBTt2jRInUbZt26dbm5uboUAHBqdE4Q6F0SExPfeuutkydPHj16NDMzU5f2Xn1tecOkP+YAAAAQUlJS0rJly9Rlt5UrV8pL/QYAAAAAAAAAAABOXXx8/MqVK9XNmHXr1g0aNEi/AQA4BTon2C3V1taeDMPrr7+uG3QDS5YsOXLkiO7ZyZNffvnlK6+8MnfuXP02ukr4gWBTU3S4L5l9srW1tbi4WJd2AwSgA9IfcwAAAAhOvj2aC24bNmxg0AEAAAAAAAAAAIDOl2n5c5wbNmyYNGmSfgMAEC2dE+yWzmAAOjU19S9/+UtEEx8zZsyHH36ouuTv4MGDut5pE0WfT0UXzy5S0QWgv/zyy0svvVS/4cdaM7oA9OlbaacYgO7mWzNq+mMOAAAAQch3WnOpTYwaNUq/AQAAAAAAAAAAgM7ldrvXrFmjb8ts2XLhhRfGx8fr9wAAkdM5wZ7g8ssv9yRPT5584okndNFpE2ke1NQXBw8enDhxoiofM2ZMU1OTKj/d3e7iDGs3j8xGF4AWITaT2QMFAegeQX/MAQAAIJBJkyZt2LBBXWFjoAEAAAAAAAAAAIDTLjMzc8WKFer2jFi9ejXj0wBA1HROsCfozgHoxsZG1bd7771XF1mod0OPLnzqCEBbRR2ADpZsDrNaaASgu5j+mAMAAEB78lV22bJl+srali3r1q2TEv0eAAAAAAAAAAAATp+kpKSlS5fquzRe8rKsrEzKdQ0AQHh0TrAn6LYBaFM5WPZ0zJgxe/fuvfbaa6NIpoavizOs3TwyG3UAWtx55536PYsJEyb89a9/1TUIQPcQ+mMOAAAAbUaNGrVo0SJ9Nc1r5cqV8gVSvw0AAAAAAAAAAIAuMGrUqNWrV+vbNW1uuOGGqVOnDho0KC0tTdcDAASnc4I9QYcB6DFjxjQ1NZmU6hdffNHQ0GDCoCbi6RNdNcFWlRw1Yzn7CzZf07GAwdlghg8f/vTTT5vefvnllwcPHpw4caJ+20tNWXV4yZIlH374oalsXbQw+xx6/YjOnV0IMvEjR47oNt6e+IycHWZPDOsE1Zp0uVyRBqA///xzNaOATdRSS5cOHTqknvgEoEOv3jBXWodrRoloeUNPs3M71t3ojzkAAIA+LCkpadCgQWVlZYsWLdqwYYO+fOa1bt26GTNm6HoAAAAAAAAAAADoSvHx8Wefffa6dev0rRs/a9asufzyy/ULAIAfnRPsCUzOOGDK1rzr4/PPPzdBVVPHDHNrwq8mzxoiDxos31xbWyvvfvnll5deeqku6oj0xCRlrWQi1rmoDkvfdu/erSpYmahrOH0Of/10yuxCCNbcOvZwmD1R1Pr38cUXXxw7dkyeBEwzW1nHTpYjQp74b0qTnpd9T/XfJwDd4eoNZ6WFs2ZERMvb4TQ7sWPdkPqUAwAA6Jseeugh/SyQyy67jD+kBgAAAAAAAAAAcIalpaXNmDFj6dKl+h5Oe5dddpl+BgDwo3OCPYHJmPoHoM0ozp9//vns2bNV4ZIlS1ShNaZpopwq3GmypD7JXRN4DSfiqaYZfgDa9Faa3HbbbarQ9NY6HWus9s0331TjQycmJpqlsK6KEH0Oc/101uxCuO6669Sknn76aZXTNfljYbZC+D2xLtpVV12lCs2iiYgC0EVFRQEXSu0nKvSs+mANQIe/+4VYaWGumYiWN8xpilPvWPekP+YAAAD6pPXr1+tnFitXrpwzZ458r9PX1AAAAAAAAAAAANAdJCUlTZo0adGiRUuXLl25cqW6tTNnzhz1BADgT+cEe4IQAehgEWT/sZlNdrO1tfXWW2/1j6gqpzUA7d8rxWRbzQKaRfZJ8QbsXog+h7l+Omt2oY0ZM8bEvhWz4GZS4fck2KIFm4I/awBaalqzzj4V1Ez9A9Dh736hV1o4aybS5Q1nmuLUO9Y96Y85AACAPmnNmjXy7+rVq5cuXVpdXT1jxgz5oqivoAEAAAAAAAAAAAAA0KPpnGBPYCKePgFonwCrLvUyMU3rOLWmULEmWY2I0r3BMqkBheit/1sRLXKwPoe/fjpldlHwn1SYPQmxaCHe8uFT06wTnxi62b4+AegQM/Lf/SJdaT71O2V5A/bhFDvWbemPOQAAAAAAAAAAAAAAAAAA0JvonGBPECwUa7KYIVgD0EINzav4vKVElO8MNqJzQKGnrMK1JsNqFtmnkwHTrsGmHP766ZTZhWPMmDHr1q17+eWXjxw58vHHH3vn6WEmFWZPQvQh/ECwf02frRDwpQlAh796rZWDrbTQaya65e1wbYtT7Fi3pT/mAAAAAAAAAAAAAAAAAABAb6Jzgj1BJwagVYZV8XlL6TAPahUsrRtQ6Cn3+gC0tPrwww+9MwnATOrMBqCtc/cfxfk0BaDDWTORLm8401ROsWPdlv6YAwAAAAAAAAAAAAAAAAAAvYnOCfYEJpbqE4A20c8ws5hmOkrAkZtD5EH9mYxssMoytdra2rlz58rzEMHc0ElcVUcJlnYN2Ofw10+nzC4EMx1Z56+88spNN90k6+Sss87yn1SYPQnYMSXEWz78a1pLtmzZIk9M3Fn4BKBN5XDWQ4fbKPSaCbFQIZaiw7UtTrFj3Zb+mAMAAAAAAAAAAAAAAAAAAL2Jzgn2BMEC0MInk2okJiZOnDhRv/Aywc2jR4+ed955KrjsHyeNNN9phpT2CewqtbW11ndVZf/gtQlSmwXsrERymOvndAegTROfLeifIA+/J8FWppmC/8b1EXDpzCZTrB32X5lhrl4RbKWFv2bCX97wpylOvWPdk/6YAwAAAAAAAAAAAAAAAAAAvYnOCfYEJuLpk8UUJo559OjR2bNnq8IxY8aoYOvBgwdVJNREXU1+1ORcfaZpara2tvqPD+3P5ETF008/bXK0w4cPl5eq3ERFTW+lG7fddpsqXLJkiSk0c4wokRyiz2Gun86aXTBmLfl048MPP/TM1bKKwu9J6JVprRlMwKWzblCftLF/3DnM1SuCrbTw10z4yxv+NMWpd6x70h9zAAAAAAAAAAAAAAAAAACgN9E5wZ4gRABa+AzZa3z55ZcmROsfdza5T5+Qq/CfYOispzUV6s+aghWyLCaxamXtrYgokSxC9Dmc9dOJswsmYDdksj/84Q/liWkeUU8CTrO1tXX37t3yxKfP/jpcOp+FCjjeczirVwm20sJcMyL85Q1/muLUO9YN6Y85AAAAAAAAAAAAAAAAAADQm+icYE8QOgAtxowZc+TIERMs/vLLL1955RUzbK11mF5rztWU+0RaxXXXXXfs2DHvxDw6zHomJiYuWbJE+qAbtPVh7ty5uoaFGhza2tuDBw9OnDhRv+0VaSJZhOhz6PUjOnd2wVibSB8aGhpkmipVbJpH2hPralfLJe+q5K5/n30Em6baMWRqPsn4gAFo0eHqNYKttHDWjBL+8oY/TXHqHetu9MccAAAAAAAAAAAAAAAAAADoTXROEAB6Hf0xBwAAAAAAAAAAAAAAAAAAehOdEwSAXkd/zAEAAAAAAAAAAAAAAAAAgN5E5wQBoNfRH3MAAAAAAAAAAAAAAAAAAKA30TlBAOh19MccAAAAAAAAAAAAAAAAAADoTXROEAB6Hf0xBwAAAAAAAAAAAAAAAAAAehOdEwSAXkd/zAEAAAAAAAAAAAAAAAAAgN5E5wQBoNfRH3MAAAAAAAAAAAAAAAAAAKA30TlBAOh19MccAAAAAAAAAAAAAAAAAADoTXROEAB6Hf0xBwAAAAAAAAAAAAAAAAAAehOdEwSAXkd/zAEAAAAAAAAAAAAAAAAAgN5E5wQBoNfRH3MAAAAAAAAAAAAAAAAAAKA30TlBAOh19MccAAAAAAAAAAAAAAAAAADoTXROEAB6Hf0xBwAAAAAAAAAAAAAAAAAAehOdEwSAXkd/zAEAAAAAAAAAAAAAAAAAgN5E5wQBoNfRH3MAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4/9u1YxsGgiCIYbj+m3aiDuY3MED2oEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPydB3ykqAAAAAAAAAAAAAC407kJzIoKAAAAAAAAAAAAgDudm8CsqAAAAAAAAAAAAAC407kJzIoKAAAAAAAAAAAAgDudm8CsqAAAAAAAAAAAAAC407kJzIoKAAAAAAAAAAAAgDudm8CsqAAAAAAAAAAAAAC407kJzIoKAAAAAAAAAAAAgDudm8CsqAAAAAAAAAAAAAC407kJzIoKAAAAAAAAAAAAgDudm8CsqAAAAAAAAAAAAAC407kJzIoKAAAAAAAAAAAAgDudm8CsqAAAAAAAAAAAAAC407kJzIoKAAAAAAAAAAAAgDudm8CsqAAAAAAAAAAAAAC407kJzIoKAAAAAAAAAAAAgDudm8CsqAAAAAAAAAAAAAC407kJzIoKAAAAAAAAAAAAgDudm8CsqAAAAAAAAAAAAAC407kJzIoKAAAAAAAAAAAAgDudm8CsqAAAAAAAAAAAAAC407kJzIoKAAAAAAAAAAAAgDudm8CsqAAAAAAAAAAAAAC407kJzIoKAAAAAAAAAAAAgDudm8CsqAAAAAAAAAAAAAC407kJzIoKAAAAAAAAAAAAgDudm8CsqAAAAAAAAAAAAAC407kJzIoKAAAAAAAAAAAAgDudm8CsqAAAAAAAAAAAAAC407kJzIoKAAAAAAAAAAAAgDudm8CsqAAAAAAAAAAAAAC407kJzIoKAAAAAAAAAAAAgDudm8CsqAAAAAAAAAAAAAC407kJzIoKAAAAAAAAAAAAgDudm8CsqAAAAAAAAAAAAAC407kJzIoKAAAAAAAAAAAAgDudm8CsqAAAAAAAAAAAAAC407kJzIoKAAAAAAAAAAAAgDudm8CsqAAAAAAAAAAAAAC407kJzIoKAAAAAAAAAAAAgDudm8CsqAAAAAAAAAAAAAC407kJzIoKAAAAAAAAAAAAgDudm8CsqAAAAAAAAAAAAAC407kJzIoKAAAAAAAAAAAAgDudm8CsqAAAAAAAAAAAAAC407kJzIoKAAAAAAAAAAAAgDudm8CsqAAAAAAAAAAAAAC407kJzIoKAAAAAAAAAAAAgDudm8CsqAAAAAAAAAAAAAC407kJzIoKAAAAAAAAAAAAgDudm8CsqAAAAAAAAAAAAAC407kJzIoKAAAAAAAAAAAAgDudm8CsqAAAAAAAAAAAAAC407kJzIoKAAAAAAAAAAAAgDudm8CsqAAAAAAAAAAAAAC407kJzIoKAAAAAAAAAAAAgDudm8CsqAAAAAAAAAAAAAC407kJzIoKAAAAAAAAAAAAgDudm8CsqAAAAAAAAAAAAAC407kJzIoKAAAAAAAAAAAAgDudm8CsqAAAAAAAAAAAAAC407kJzIoKAAAAAAAAAAAAgDudm8CsqAAAAAAAAAAAAAC407kJzIoKAAAAAAAAAAAAgDudm8CsqAAAAAAAAAAAAAC407kJzIoKAAAAAAAAAAAAgDudm8CsqAAAAAAAAAAAAAC407kJzIoKAAAAAAAAAAAAgDudm8CsqAAAAAAAAAAAAAC407kJzIoKAAAAAAAAAAAAgDudm8CsqAAAAAAAAAAAAAC407kJzIoKAAAAAAAAAAAAgDudm8CsqAAAAAAAAAAAAAC407kJzIoKAAAAAAAAAAAAgDudm8CsqAAAAAAAAAAAAAC407kJzIoKAAAAAAAAAAAAgDudm8CsqAAAAAAAAAAAAAC407kJzIoKAAAAAAAAAAAAgDudm8CsqAAAAAAAAAAAAAC407kJzIoKAAAAAAAAAAAAgDudm8CsqAAAAAAAAAAAAAC407kJzIoKAAAAAAAAAAAAgDudm8CsqAAAAAAAAAAAAAC407kJzIoKAAAAAAAAAAAAgDudm8CsqAAAAAAAAAAAAAC407kJzIoKAAAAAAAAAAAAgDudm8CsqAAAAAAAAAAAAAC407kJzIoKAAAAAAAAAAAAgDudm8CsqAAAAAAAAAAAAAC407kJzIoKAAAAAAAAAAAAgDudm8CsqAAAAAAAAAAAAAC407kJzIoKAAAAAAAAAAAAgDudm8CsqAAAAAAAAAAAAAC407kJzIoKAAAAAAAAAAAAgDudm8CsqAAAAAAAAAAAAAC407kJzIoKAAAAAAAAAAAAgDudm8CsqAAAAAAAAAAAAAC407kJzIoKAAAAAAAAAAAAgDudm8CsqAAAAAAAAAAAAAC407kJzIoKAAAAAAAAAAAAgDudm8CsqAAAAAAAAAAAAAC407kJzIoKAAAAAAAAAAAAgDudm8CsqAAAAAAAAAAAAAC407kJzIoKAAAAAAAAAAAAgDudm8CsqAAAAAAAAAAAAAC407kJzIoKAAAAAAAAAAAAgDudm8CsqAAAAAAAAAAAAAC407kJzIoKAAAAAAAAAAAAgDudm8CsqAAAAAAAAAAAAAC407kJzIoKAAAAAAAAAAAAgDudm8CsqAAAAAAAAAAAAAC407kJzIoKAAAAAAAAAAAAgDudm8CsqAAAAAAAAAAAAAC407kJzIoKAAAAAAAAAAAAgDudm8CsqAAAAAAAAAAAAAC407kJzIoKAAAAAAAAAAAAgDudm8CsqAAAAAAAAAAAAAC407kJzIoKAAAAAAAAAAAAgDudm8CsqAAAAAAAAAAAAAC407kJzIoKAAAAAAAAAAAAgDudm8CsqAAAAAAAAAAAAAC407kJzIoKAAAAAAAAAAAAgDudm8CsqAAAAAAAAAAAAAC407kJzIoKAAAAAAAAAAAAgDudm8CsqAAAAAAAAAAAAAC407kJzIoKAAAAAAAAAAAAgDudm8CsqAAAAAAAAAAAAAC407kJzIoKAAAAAAAAAAAAgDudm8CsqAAAAAAAAAAAAAC407kJzIoKAAAAAAAAAAAAgDudm8CsqAAAAAAAAAAAAAC407kJzIoKAAAAAAAAAAAAgDudm8CsqAAAAAAAAAAAAAC407kJzIoKAAAAAAAAAAAAgDudm8CsqAAAAAAAAAAAAAC407kJzIoKAAAAAAAAAAAAgDudm8CsqAAAAAAAAAAAAAC407kJzIoKAAAAAAAAAAAAgDudm8CsqAAAAAAAAAAAAAC407kJzIoKAAAAAAAAAAAAgDudm8CsqAAAAAAAAAAAAAC407kJzIoKAAAAAAAAAAAAgDudm8CsqAAAAAAAAAAAAAC407kJzIoKAAAAAAAAAAAAgDudm8CsqAAAAAAAAAAAAAC407kJzIoKAAAAAAAAAAAAgDudm8CsqAAAAAAAAAAAAAC407kJzIoKAAAAAAAAAAAAgDudm8DovR9wCu1H8tpVlAAAAABJRU5ErkJggg==" + "754d0879-53f3-45e9-84f1-307ef35d2a4b.png": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAHCAAAA/SCAYAAAB5hOQDAAAAIGNIUk0AAHomAACAhAAA+gAAAIDoAAB1MAAA6mAAADqYAAAXcJy6UTwAAAAGYktHRAD/AP8A/6C9p5MAAAAJcEhZcwAALiMAAC4jAXilP3YAAAAHdElNRQfqAgkTGjj6jNHCAACAAElEQVR42uzdQREAIRDAsOP8e14k8ITOJArqoGtm5gMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACe9t8OAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAM4MCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACDAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACDAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgwIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgwIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIMCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIMCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACDAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACDAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgwIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgwIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIMCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIMCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACDAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACDAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgwIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgwIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIMCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIMCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACDAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACDAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgwIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgwIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIMCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIMCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACDAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACDAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgwIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgwIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIMCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIMCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACDAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACDAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgwIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgwIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIMCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIMCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACDAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACDAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgwIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgwIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIMCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIMCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACDAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACDAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgwIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgwIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIMCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIMCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACDAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACDAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgwIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgwIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIMCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIMCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACDAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACDAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgwIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgwIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIMCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIMCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACDAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACDAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgwIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgwIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIMCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIMCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACDAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACDAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgwIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgwIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIMCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIMCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACDAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACDAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgwIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgwIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIMCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIMCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACDAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACDAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgwIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgwIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIMCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIMCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACDAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACDAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgwIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgwIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIMCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIMCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACDAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACDAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgwIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgwIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIMCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIMCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACDAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACDAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgwIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgwIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIMCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIMCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACDAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACDAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgwIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgwIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIMCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIMCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACDAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACDAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgwIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgwIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIMCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIMCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACDAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACDAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgwIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgwIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIMCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIMCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACDAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACDAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgwIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgwIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIMCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIMCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACDAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACDAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgwIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgwIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIMCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIMCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACDAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACDAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgwIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgwIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIMCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIMCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACDAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACDAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgwIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgwIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIMCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIMCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACDAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACDAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgwIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgwIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIMCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIMCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACDAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACDAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgwIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgwIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIMCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIMCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACDAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACDAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgwIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgwIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIMCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIMCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACDAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACDAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgwIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgwIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIMCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIMCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACDAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACDAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgwIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgwIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIMCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIMCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACDAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACDAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgwIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgwIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIMCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIMCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACDAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACDAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgwIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgwIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIMCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIMCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACDAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACDAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgwIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgwIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIMCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIMCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACDAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACDAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgwIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgwIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIMCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIMCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACDAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACDAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgwIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgwIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIMCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIMCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACDAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACDAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgwIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgwIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIMCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIMCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACDAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACDAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgwIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgwIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIMCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIMCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACDAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACDAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgwIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgwIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIMCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIMCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACDAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACDAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgwIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgwIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIMCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIMCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACDAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACDAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgwIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgwIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIMCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIMCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACDAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACDAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgwIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgwIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIMCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIMCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACDAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACDAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgwIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgwIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIMCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIMCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACDAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACDAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgwIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgwIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIMCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIMCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACDAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACDAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgwIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgwIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIMCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIMCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACDAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACDAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgwIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgwIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIMCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIMCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACDAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACDAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgwIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgwIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIMCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIMCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACDAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACDAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgwIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgwIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIMCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIMCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACDAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACDAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgwIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgwIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIMCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIMCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACDAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACDAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgwIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgwIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIMCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIMCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACDAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACDAgBAAAAAAAAAAAAAAAAYLN3h7F11+ee4J9JvOcqkxON8CjlWENSZ+IOLpFtZejVhBpQuUoqBMhsRYpsB1Td6Y3U24GEKi+itYYbpay8youoxDBtpdyqQhDHokFVLcpEJFOqgEs0Leu1vaHm4myMQetDvde5uzke7545dvcFF24Bx+c4sfP33/583uHz+JznnGNUfX8qvy8AAAAAAAAAAAAAAAAAQAooIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAUUEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKaCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFJAASEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACkgAJCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASAEFhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJACCggBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgBRQQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAooIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAUUEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKaCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFJAASEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACkgAJCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASAEFhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJACCggBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgBRQQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAooIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAUUEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKaCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFJAASEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACkgAJCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASAEFhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJACCggBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgBRQQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAooIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAUUEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKaCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFJAASEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACkgAJCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASAEFhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJACCggBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgBRQQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAooIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAUUEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKaCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFJAASEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACkgAJCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASAEFhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJACCggBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgBRQQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAooIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAUUEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKaCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFJAASEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACkgAJCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASAEFhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJACCggBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgBRQQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAooIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAUUEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKaCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFJAASEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACkgAJCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASAEFhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJACCggBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgBRQQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAooIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAUUEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKaCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFJAASEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACkgAJCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASAEFhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJACCggBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgBRQQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAooIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAUUEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKaCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFJAASEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACkgAJCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASAEFhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJACCggBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgBRQQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAooIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAUUEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKaCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFJAASEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACkgAJCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASAEFhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJACCggBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgBRQQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAooIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAUUEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKaCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFJAASEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACkgAJCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASAEFhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJACCggBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgBRQQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAooIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAUUEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKaCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFJAASEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACkgAJCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASAEFhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJACCggBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgBRQQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAooIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAUUEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKaCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFJAASEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACkgAJCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASAEFhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJACCggBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgBRQQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAooIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAUUEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKaCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFJAASEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA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dozl4x//eN5yOp2eUFuA4c29qiaakp1xz18cjkRVcuI7nCSnznXHw68siOdPbowL2fH/LppTURlNyc64/+bTRfXv0Outse3l6+LYmckJwJ3Nzl/oi85UU/ztL5JFhQ/eumhnbP7ymxMOH0y/0xPbXr5uxoUPLr+hLe5fdipumtdk0k0AAOBDqdQaerpkzqfib3+RjM5UU5y/0Deh/jXcsCXuv/l0LEk0jrl+z+/b46//uSqOnemMi5ey5T4NZXUh2x/Pn9wYD7+yoKhgjsmqoc+82xuPHFkST/eun1HBHEsSjfE3/+l81H/6PmMEAAAzmBonnxrnA2qcfGocAAAAAAAAAIDZw193AAAAAAAAAAAAAEMkEol45plnYunSpVFRMfKfGxaGwH384x8vKRgumUxGKvV+iFFf39CJ1H7wgx/kBeQtW7YsEolEPPDAAzF37tyoq6uLiIhrr7121HaOZvHixSVvM7jdR48ejaampryfv/baaxPa/y233JLr9yuvvDLm+oMDC4uxaNGiMddZs2ZNJBKJXEBla2trtLa2RltbWyxcuDDmz58fn/rUp6K6urrogMXBIZMNDQ1CBGEGq/lEfbR88dVI/WFP7PvNphkz4WHP79uj5/ftcVttRyQ/uW7cEx7Ovaomvl93PE72HYifvnbXqP07fyETT/euj5+dfjhuq30q5l1dfODrh8HFS9l46fS2OPR6a1HrL0k0xtobd8eciuLDd4dz7r10PPvahqIm+ZxOSxKN8bXPbIu5V9WUuykAAADTopQaejodz3TF8UxXLL+hLW5ZsHlCYwRNyc6ou+578dyv743M+dSo6z/duz72/WZT/NWSZ6LmE/XlPg3T6uKlbKT+sCee7l1f1PqTVUOfv9AXz5/cGMczXRPaz2RLVCXjOzftNUYAADDLqHHyqXHUOAPUOAAAAAAAAAAAs48AQgAAAAAAAAAAAPiISCaTcf/994/48/Xr8yfUGit8MCLi7bffzltetWrVpLa5trY22traorX1g9CjTCYTzc3NQ9ZNJBKxbt26WLduXdTXFz8pWjFhfIUWL148anDiwM8iIlavXl3y/qurq3Ovu7vHDl665ZZbStr/woULx1ynsrIynnnmmVi2bFne+4OvxWCNjY1x++23x4oVK0b83Aw+V93d3bFgwYKSzw0wfT52ZUXcNK8pFleviZff2F50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AAAAAQQIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIIAAIQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQQIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAoQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQQIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAggQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAABQgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAggQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAggAAhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAChAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACCBACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAFCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACCBACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEECAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACCAACEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEECAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAKEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEECAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIIEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAUIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIIEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQQIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIIAAIQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQQIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAoQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQQIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAggQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAABQgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAggQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAggAAhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAChAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACCBACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAFCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACCBACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEECAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACCAACEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEECAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAKEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEECAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIIEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAUIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIIEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQQIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIIAAIQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQQIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAoQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQQIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAggQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAABQgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAggQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAggAAhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAChAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACCBACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAFCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACCBACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEECAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACCAACEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEECAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAKEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEECAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIIEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAUIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIIEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQQIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIIAAIQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQQIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAoQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQQIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAggQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAABQgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAggQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAggAAhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAChAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACCBACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAFCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACCBACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEECAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACCAACEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEECAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAKEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEECAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIIEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAUIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIIEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQQIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIIAAIQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQQIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAoQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQQIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAggQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAABQgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAggQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAggAAhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAChAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACCBACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAFCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACCBACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEECAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACCAACEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEECAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAKEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEECAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIIEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAUIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIIEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQQIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIIAAIQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQQIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAoQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQQIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAggQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAABQgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAggQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAggAAhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAChAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACCBACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAFCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACCBACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEECAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACCAACEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEECAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAKEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEECAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIIEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAUIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIIEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQQIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIIAAIQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQQIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAoQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQQIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAggQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAABQgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAggQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAggAAhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAChAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACCBACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAFCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACCBACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEECAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACCAACEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEECAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAKEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEECAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIIEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAUIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIIEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQQIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIIAAIQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQQIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAoQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQQIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAggQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAABQgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAggQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAggAAhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAChAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACCBACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAFCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACCBACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEECAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACCAACEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEECAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAKEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEECAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIIEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAUIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIIEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQQIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIIAAIQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQQIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAoQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQQIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAggQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAABQgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAggQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAggAAhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAChAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACCBACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAFCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACCBACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEECAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACCAACEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEECAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAKEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEECAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIIEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAUIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIIEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQQIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIIAAIQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQQIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAoQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQQIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAggQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAABQgAAAAAAAAAAAAAAeEt9OJ/V3j9/Vr96uFmT9x+0ngMAAAA08tHH83rwr1/Xz//8tXr3YLf1HAAAAAAAAAAAAAAAoKGu7/u+9QgAAAAAAAAAADiMrusWzq6+AAAAJ9VHH89r/O+d+uPfb9SzD6fPX98cXKnvf/MX9ZUvr7eeCAAAAByTdw926/d/+8nCbwSDUxfqx9+56zcCAABgqXz6Hqk7pAAAAAAAAAAALDMBQgAAAAAAAAAAYggQAgAAy2Dy/oP6w6Of1vTZ+KWf+d43btV3v36j3lldaz0XAAAAOCLvfTCp3/5l+Lm/EWwOrtQPv/0bvxEAAABLQYAQAAAAAAAAAAD+S4AQAAAAAAAAAIAYAoQAAMBJ9t4Hk/rTP0b11+nvDvX5U+8M6gff+mVd+OqP6ksrq63nAwAAAP9h7/+j667rfNH/RRq21uyKDQZ2tJT0tEqkk2Q6qFMJMDKnZbDyLeOycJpUh+UXexYytOjpncudnq/2FO50Fnduj9IywrqV4zDapBfq8tADyNCMIBDAEU5NMkCQ1gaokw3RFOzOFDY74fsHUw7YNNlpkn7y4/FYi7Xs/rw/78/z/dkgft6Jn+cYyRf6YufTq4veI4iIWF69NRbPucoeAQAAMKUpIAQAAAAAAAAAgLcoIAQAAAAAAAAAYNJQQAgAAExF+UJfPPT85ti9b8NxnZ9J18bnPvbtqJpdn/RSAAAAgFHoHyjE4wdujV2da47r/HQqE5ctvC2qK5YlvRQAAIBxoYAQAAAAAAAAAADeooAQAAAAAAAAAIBJQwEhAAAwlfQPFKL9pTvi7mfXRS6fHfV8dZmGuPgjm6J8ZlXSSwMAAABGqLPn3rjzqSvHZI8gk66NKxbdZY8AAACYchQQAgAAAAAAAADAWxQQAgAAAAAAAAAwaSggBAAApoqug63xw2eujmyufdixmXRt1Jz++di9b0NRcy+dvzEuOHNdpErLkl4mAAAAMIzew11x+55Li9ojSKcyUZe5PFpf2FLU3HWZhlhx9jZ7BAAAwJShgBAAAAAAAAAAAN6igBAAAAAAAAAAgElDASEAADDZ9R7uivueWx9t2eZhx6ZTmbjkrM1Re/rlMaOkdFTnAgAAABNLvtAXO59eXdRzfkTE8uqtsXjOVTGjpHRU5wIAAExmCggBAAAAAAAAAOAtCggBAAAAAAAAAJgwvvKVr8Stt946pnO+9NJLcdpppyW9NAAAYJrLF/rioec3x+59G4oav3T+xrjgzHWRKi076ljXwdb44TNXRzbXPuw8mXRtfO5j346q2fVJ3wIAAAAgIvoHCvH4gVtjV+eaosbXZRpixdnbBt0j6D3cFbfvubSoPYJ0KhOXLbwtqiuWJX0LAAAAjpsCQgAAAAAAAAAAeIsCQgAAAAAAAAAAJozXXnstPvShD8XBgwfHZL6rr746/vZv/zbpZQEAANNY/0Ah2l+6I+5+dl3k8tlhx9dlGuLij2yK8plVicwLAAAAjJ/OnnvjzqeuLOpZPpOujSsW3VXUs3zXwdb4XtuKMZ8XAABgolFACAAAAAAAAAAAb1FACAAAAAAAAADAhPK//+//e/zN3/zNqOf5/d///fjZz34WpaWlSS8JAACYproOtsYPn7k6srn2Ycdm0rXxuY99O6pm14/oGv0DhXhg/6bYvW9DUeOXzt8YF5y5LlKlZUnfHgAAAJg2eg93xe17Li1qjyCdysRlC2+L6oplI7pG/0Ah2l+6I3Z0rCpqfF2mIVacvc0eAQAAMKkoIAQAAAAAAAAAgLcoIAQAAAAAAAAAYEJ57bXXorq6Op5//vlRzfPwww/Heeedl/RyAACAaaj3cFfc99z6aMs2FzV+Zc32qD398phRcvwF6rl8T+zqvLaoa6ZTmbjkrM2jviYAAAAwtHyhL3Y+vbroPYLl1Vtj8ZyrRvW8ni/0xX1710frC1tO2DUBAABOFAWEAAAAAAAAAADwFgWEAAAAAAAAAABMOP/3//1/x1/8xV8c9/lXXHFF/N3f/V3SywAAAKaZfKEvHnp+c+zet6Go8fVz18bFCzZFqrRszDJ0H+qIHR1fiGyufdixmXRtfO5j346q2fWJ3TMAAACYivoHCvH4gVtjV+eaosbXZRpiefVNkU5VjFmG3sNdcd9z64sqP0ynMnHZwtuiumJZYvcMAACgGAoIAQAAAAAAAADgLQoIAQAAAAAAAACYkObNmxddXV0jPq9xQSCzAACAAElEQVSqqiqeeeaZeO9735v0EgAAgGmif6AQ7S/dEXc/uy5y+eyw4xeUL4nPL9wW5TOrxi1TZ8+9cedTVxaVpy7TEBd/ZNO45gEAAIDpYiTP5Jl0bays+X5UzqoZtzxdB1vjh89cHdlce1F5rlh0lz0CAABgwlJACAAAAAAAAAAAb1FACAAAAAAAAADAhHTLLbfE1VdfPeLzdu7cGZ///OeTjg8AAEwTI3mJfzqViS/W7Yyq2fUnJFv/QCEeP3Br7OpcU9T4pfM3xgVnrotUadkJyQcAAABTSe/hrrh9z6VF7xFcctbmWFTZeEKy9Q8Uov2lO+LuZ9cVVYxYl2mIFWdvs0cAAABMOAoIAQAAAAAAAADgLQoIAQAAAAAAAACYsM4999x47LHHih7/R3/0R/Hggw8mHRsAAJgGeg93xX3PrY+2bHNR41fWbI/a0y+PGSWlJzxrvtAXO59eXVTWIwUISWUFAACAyWYkz90REUvnb4wL561PbI/goec3x+59G4oav7x6ayyec5U9AgAAYMJ4ZwFhhBJCAAAAAAAAAACmLwWEAAAAAAAAAABMWPfdd1985jOfKWpseXl5/PKXv4xTTjkl6dgAAMAUNtIX9dfPXRsXL9gUqdKypKNH7+Gu+MFTq2Nvb8uwYzPp2vjcx74dVbPrk44NAAAAE1L/QCEeP3Br7OpcU9T4ukxDLK++KdKpiqSjR+/hrrjvufVFlSamU5m4bOFtUV2xLOnYAAAwZt74dVfSEThOqYp57/pzvmd/0pE4DqWz58RJM5TdAwAAAAAAAACMhgJCAAAAAAAAAAAmtHPPPTcee+yxYcf9zd/8Tfxv/9v/lnRcAABgiuofKET7S3fE3c+ui1w+O+z4BeVL4vMLt0X5zKqkox+l62BrfK9tRVHrqMs0xMUf2TQh1wEAAABJ6ey5N+586sqinq0z6dpYWfP9qJxVk3Tso3Qf6ogdHV+IbK69qHVcseguewQAAEwJXf/xpKQjcJzmbXv3n/evTjoRx+PDm/bHyR+sSjoGAAAAAAAAAMCkpoAQAAAAAAAAAIAJ7ZFHHonzzz9/yDHnnHNOPPHEE0lHBQAApqiug63xw2euLupl/OlUJr5YtzOqZtcnHXtIRwoVd3SsKmr80vkb44Iz10WqtCzp6AAAAJCY3sNdcfueS4veI7jkrM2xqLIx6djD2tPdFHc/u66oQsW6TEOsOHubPQIAACY1BYSQLAWEAAAAAAAAAACjp4AQAAAAAAAAAIAJb8WKFfGDH/xg0GOnnnpqPPHEE1FVVZV0TAAAYIrpPdwV9z23PtqyzUWNX1mzPWpPvzxmlJQmHb1o+UJf3Ld3fbS+sGXYsUeKEybbGgEAAGC08oW+2Pn06qL3CJbO3xgXzls/qZ6f+wcK8cD+TbF734aixi+v3hqL51w1qdYIAABHKCCEZCkgBAAAAAAAAAAYPQWEAAAAAAAAAABMeE8//XQsXLhw0GN/8Rd/Ef/X//V/JR0RAACYQvKFvnjo+c1Fv3C/fu7auHjBpkiVliUd/biNpGwxk66Nz33s21E1uz7p2AAAADCu+gcK8fiBW2NX55qixtdlGmJ59U2RTlUkHf24jaRsMZ3KxGULb4vqimVJxwYAgBFRQAjJUkAIAAAAAAAAADB6CggBAAAAAAAAAJgUVqxYET/4wQ/e9dnv/d7vxZ49e6K0tDTpeAAAwBTQP1CI9pfuiLufXRe5fHbY8QvKl8TnF26L8plVSUcfM10HW+OHz1wd2Vz7sGPrMg1x8Uc2Tan1AwAAwBGdPffGnU9dWdQeQSZdGytrvh+Vs2qSjj1meg93xe17Li1qjyCTro0rFt1ljwAAgElDASEkSwEhAAAAAAAAAMDoKSAEAAAAAAAAAGBSePnll+P0009/12dPPPFEnHPOOUlHAwAApoCRFO+lU5n4Yt3OqJpdn3TscTHSIsal8zfGBWeui1RpWdLRAQAAYNRGUryXTmXikrM2x6LKxqRjj5uRFDHWZRpixdnb7BEAADDhKSCEZCkgBAAAAAAAAAAYPQWEAAAAAAAAAABMGn/+538e3/72tyMi4qqrropbbrkl6UgAAMAk13u4K+57bn20ZZuLGr+yZnvUnn55zCgpTTr6uMsX+uKh5zfH7n0bhh17pHBhutwbAAAApp58oS92Pr266D2CpfM3xoXz1k+L5+D+gUK0v3RH7OhYVdT45dVbY/Gcq6bFvQEAYHJSQAjJUkAIAAAAAAAAADB6CggBAAAAAAAAAJg0Xn311Zg/f368733vi1/84hfx3ve+N+lIAADAJDWScr2IiPq5a+PiBZsiVVqWdPQTLpfviV2d1xZVwJBJ18bnPvbtqJpdn3RsAAAAKEr/QCEeP3Br7OpcU9T4ukxDLK++KdKpiqSjn3D5Ql/ct3d9tL6wZdix6VQmLlt4W1RXLEs6NgAAHEUBISRLASEAAAAAAAAAwOgpIAQAAAAAAAAAYELq6n1j0M//esP/EedecGH80b//k6OOlaVKoiI9I+noAADABNY/UIj2l+6Iu59dF7l8dtjxC8qXxOcXbovymVVJR09c96GO2NHxhcjm2ocdW5dpiIs/ssl9AwAAYELr7Lk37nzqyqL2CDLp2lhZ8/2onFWTdOzE9R7uih88tTr29rYMOzaTro0rFt1ljwAAgAlFASEkSwEhAAAAAAAAAMDoKSAEAAAAAAAAAOCEKfS/GQdeLcSvXu2P5w8WovfwQDza9XpERDz1Uj7au98Y5RXebclH3hsVZW8VEl7ysZkREVFTmYpZ7zkpqspPTvp2AAAAJ1jXwdb44TNXF1Wgl05l4ot1O6Nqdn3SsSecPd1NRRc4Lp2/MS44c12kSsuSjg0AAABv6z3cFbfvubToPYJLztociyobk4494XQdbI3vta0oao+gLtMQK87eZo8AAIAJQQEhJEsBIQAAAAAAAADA6CkgBAAAAAAAAABgzPXlB+KXvylER3c+fvrC6/H0y29Ey3OvJR1rUA2/XxbVp50cC04tjXOr3hNzTimN0hleLgQAAFNJ7+GuuO+59dGWbS5q/Mqa7VF7+uUxo6Q06egTVv9AIR4/cGvs6lwz7NgjRQ3uKQAAAEnLF/pi59Ori94jWDp/Y1w4b73n2SH0DxSi/aU74u5n1xVVRLi8emssnnOVewoAQKIUEEKyFBACAAAAAAAAAIyeAkIAAAAAAAAAAEal0P9mHHi1EI92vR53P3M4Htj3WmQP9Scda1RqK0+OT/+798afnDUzzj795KgqPznpSAAAwHHIF/rioec3x+59G4oaXz93bVy8YFOkSsuSjj5pjKS4IZOujc997NtRNbs+6dgAAABMM/0DhXj8wK2xq3NNUePrMg2xvPqmSKcqko4+aYxkHyadysRlC2+L6oplSccGAGCaUkAIyVJACAAAAAAAAAAwegoIAQAAAAAAAAAYkUL/m/HMy2/ET375Wtz11L9Gy3OvJR3phGj4/bK45GMz49yq9ygkBACACa5/oBDtL90Rdz+7LnL57LDjF5Qvic8v3BblM6uSjj5p9R7uitv3XBrZXPuwY+syDXHxRza53wAAAJwQnT33xp1PXVnUHkEmXRsra74flbNqko49afUe7or7nlsfbdnmYcdm0rVxxaK77BEAAHDCKSCEZCkgBAAAAAAAAAAYPQWEAAAAAAAAAAAMqyfXH7t/cTjufuZwNP+8L+k4icvMmhGX174v/uSsmfFH898bZamSpCMBAAD/putga/zwmauLKsJLpzLxxbqdUTW7PunYU8ZISh2Wzt8YF5y5LlKlZUnHBgAAYArqPdwVt++5tOg9gkvO2hyLKhuTjj1ljGSPpi7TECvO3maPAACAE0YBISRLASEAAAAAAAAAwOgpIAQAAAAAAAAAYFAd3fn4yS9fi20/PRTt3W8kHWdCW/KR98aXPp6OpR+dGRXpGUnHAQCAaan3cFfc99z6aMs2FzV+efXWWDznqphRUpp09Cmnf6AQ7S/dETs6Vg079kjBQ+3pl/suAAAAGBP5Ql/sfHp10XsES+dvjAvnrfdcOk72dDfF3c+ui1w+O+xY+zUAAJwoCgghWQoIAQAAAAAAAABGTwEhAAAAAAAAAABv68n1xy2PHYpbHjsU2UP9SceZlGorT47rPn1KXPp774uyVEnScQAAYMrLF/rioec3x+59G4oaX5dpiBVnb4tUaVnS0ae8fKEv7tu7Plpf2DLs2Ey6Nj73sW9H1ez6pGMDAAAwSfUPFOLxA7fGrs41RY2vyzTExR/ZFOUzq5KOPuX1DxTigf2bitq/SacycdnC26K6YlnSsQEAmMIUEEKyFBACAAAAAAAAAIyeAkIAAAAAAAAAgGmuLz8Qd/3zv8aND74a7d1vJB1nSlnykffGf1n6gfjDue+J0hleWAQAAGOpf6AQ7S/dEXc/uy5y+eyw4zPp2rhi0V1KBRLQe7grfvDU6tjb2zLsWOUPAAAAHI/OnnvjzqeuLHqP4HMf+3ZUza5POva0k8v3xK7Oa6Mt2zzsWHs5AACMJwWEkCwFhAAAAAAAAAAAo6eAEAAAAAAAAABgmmrd/1r87aOHovnnfUlHmRY2XvSB+LNzyqKq/OSkowAAwKTXdbA1fvjM1ZHNtQ87Np3KxGULb4vqimVJx572RvK9LZ2/MS44c12kSsuSjg0AAMAE1nu4K27fc2nRewSXnLU5ak+/PGaUlCYdfVrrPtQROzq+UNT3VpdpiBVnb7NHAADAmFJACMlSQAgAAAAAAAAAMHoKCAEAAAAAAAAAppG+/EDc9c//GuvuPhjZQ/1Jx5mWaitPjm9/7tT4w7nvidIZXmIEAAAj0Xu4K+57bn20ZZuLGr+8emssnnOVUoEJpH+gEO0v3RF3P7sucvnskGMVQwAAAHAs+UJf7Hx6ddF7BIruJ6bOnnvjzqeuHHaPIMI+DwAAY0sBISRLASEAAAAAAAAAwOgpIAQAAAAAAAAAmAZ6cv1xy2OHYsP9ryQdhX+TmTUjNl8yOy79vfdFWaok6TgAADCh5Qt98dDzm2P3vg1Fja/LNMSKs7cpFZjARvKdZtK18bmPfTuqZtcnHRsAAICE9Q8U4vEDt8auzjVFja/LNMTFH9kU5TOrko7OMYzkO02nMnHZwtuiumJZ0rEBAJjkFBBCshQQAgAAAAAAAACMngJCAAAAAAAAAIAprKv3jVj/o1ei+ed9SUdhCBsv+kCs+6P3KyIEAIDf0T9QiPaX7oi7n10XuXx22PGZdG1csegupQKTSO/hrrjvufXRlm0edqzSCAAAgOmts+feuPOpK4veI1BmP7nkC32x8+nVRe0R2AMCAGC0FBBCshQQAgAAAAAAAACMngJCAAAAAAAAAIApSPHg5KSIEAAA/peug63xw2eujmyufdix6VQmLlt4W1RXLEs6Nsep+1BH7Oj4QlHf99L5G+OCM9dFqrQs6dgAAACcAL2Hu+L2PZcWvUdwyVmbo/b0y2NGSWnS0TkOvYe74gdPrY69vS3Djq3LNMSKs7fZIwAAYMQUEEKyFBACAAAAAAAAAIyeAkIAAAAAAAAAgClE8eDUoIgQAIDprPdwV9z33PpoyzYXNX559dZYPOcqpQJTxJ7uprj72XWRy2eHHKdQAgAAYOrLF/pi59Ori94jUFg/tXQdbI3vta0Ydo8gwv4QAAAjp4AQkqWAEAAAAAAAAABg9BQQAgAAAAAAAABMAT25/rj2rl7Fg1PMxos+EOv/+JQoneFlRwAATH35Ql889Pzm2L1vQ1Hj6zINseLsbUoFpqD+gUI8sH9TUX8vZNK18bmPfTuqZtcnHRsAAIAx0j9QiMcP3Bq7OtcUNb4u0xAXf2RTlM+sSjo6Y6x/oBDtL90ROzpWDTs2ncrEZQtvi+qKZUnHBgBgElBACMlSQAgAAAAAAAAAMHoKCAEAAAAAAAAAJrG+/EBs/slvY8P9ryQdhXGSmTUjNl8yOy6vK1NECADAlHTkRfJ3P7sucvnssOMz6dq4YtFdSgWmgVy+J3Z1Xhtt2eZhxyqbAAAAmBo6e+6NO5+6sug9AqX000O+0BcPPb85du/bMOxYe0cAABRDASEkSwEhAAAAAAAAAMDoKSAEAAAAAAAAAJikmv5nLtbdfTCyh/qTjsIJUFt5cny/oSJqKlNJRwEAgDHTfagjdnR8IbK59mHHplOZuGzhbVFdsSzp2JxgvYe74vY9lxb198nS+RvjgjPXRaq0LOnYAAAAjMBInv3SqUxcctbmqD398phRUpp0dE6g3sNdcd9z66Mt2zzs2LpMQ6w4e5s9AgAABqWAEJKlgBAAAAAAAAAAYPQUEAIAAAAAAAAATDId3fn4QnNPtHe/kXQUEtDw+2Vx06XlUZGekXQUAAA4brl8T+zqvLaol8VHRCyv3hqL51ylVGCa6+y5N+586srI5bNDjjtSRLGosjHpyAAAAAwjX+iL+/auj9YXthQ1XvE8ERFdB1vjh89cXVRh5cqa7coqAQA4igJCSJYCQgAAAAAAAACA0VNACAAAAAAAAAAwSRT634x1/6M3trQeSjoKE8D2hg9G4x+kk44BAAAj0j9QiAf2b4rd+zYUNb4u0xArzt6mVIC39Q8U4vEDt8auzjXDjs2ka2NlzfejclZN0rEBAAD4Hf0DhWh/6Y7Y0bGqqPF1mYa4+CObonxmVdLRmSCO/D1097PrIpfPDjk2ncrEF+t2RtXs+qRjAwAwQSggnLxK0hVRvvKm+PV/+7OIgULScThOCggBAAAAAAAAAEZPASEAAAAAAAAAwCTQuv+1WPG9nsge6k86ChPIko+8N7atODWqyk9OOgoAAAxrT3dTUS+Ej3irOO6KRXcpFeCY8oW+uG/v+mh9YcuwY+syDbG8+qZIpyqSjg0AAEBEdB1sje+1rSh6j+BzH/u24jiOKV/oi4ee3xy7920YduyC8iXx+YXb7DkBAKCAcJIqSVfEhza0R+kpmTj8dEu8tOUzSggnKQWEAAAAAAAAAACjp4AQAAAAAAAAAGAC68sPxOo7fxPNP+9LOgoT2NY/LY+rFs+K0hleigQAwMTTfagjdnR8IbK59mHHplOZuGzhbVFdsSzp2EwSvYe74gdPrY69vS3Djl06f2NcOG99zCgpTTo2AADAtDSSZ7h0KhOXnLU5ak+/3HMcRcnle2JX57XRlm0edmz93LVx8YJNkSotSzo2AAAJUUA4+byzfPAIJYSTlwJCAAAAAAAAAIDRU0AIAAAAAAAAADBBte5/LVZ8ryeyh/qTjsIkUFt5crT8x0xUpGckHQUAACJiZC99j4hYXr01Fs+5SqkAx6XrYGt8r21F5PLZIccdKbBYVNmYdGQAAIBpI1/oi/v2ro/WF7YUNX7p/I1xwZnrlMNxXLoPdcSOji9ENtc+7NiVNduVXAIATFMKCCeXwcoHj1BCODkpIAQAAAAAAAAAGD0FhAAAAAAAAAAAE0yh/81Y9z96Y0vroaSjMAltb/hgNP5BOukYAABMY/0DhXhg/6bYvW9DUePrMg2x4uxtSgUYtf6BQrS/dEfs6Fg17NhMujZW1nw/KmfVJB0bAABgyhrJc1rEW3sEF39kU5TPrEo6OlPAnu6muPvZdZHLZ4ccl05l4ot1O6Nqdn3SkQEAOIEUEE4eQ5UPHqGEcPJRQAgAAAAAAAAAMHoKCAEAAAAAAAAAJpCu3jfi0r97Odq730g6CpNYw++XxbbLTo2yVEnSUQAAmGaKfbF7xFsFcFcsukupAGMuX+iLh57fXFQJZl2mIZZX3xTpVEXSsQEAAKaUroOt8b22FUXvEXzuY99WAMeY6x8oxOMHbo1dnWuGHbugfEl8fuE2e1UAANOEAsLJoZjywSOUEE4uCggBAAAAAAAAAEZPASEAAAAAAAAAwATR9D9zsar510nHYIrIzJoR968+PWoqU0lHAQBgGug+1BE7Or4Q2Vz7sGPTqUxctvC2qK5YlnRsprjew11x33Proy3bPOzYpfM3xoXz1seMktKkYwMAAExqvYe74gdPrY69vS3Djk2nMnHJWZuj9vTLPY8xrvKFvtj59Oqi9gjq566NixdsilRpWdKxAQAYRwoIJ76RlA8eoYRw8lBACAAAAAAAAAAwegoIAQAAAAAAAAASVuh/M9b9j97Y0noo6ShMQdsbPhiNf5BOOgYAAFNULt8TuzqvLerl7RERy6u3xuI5VykV4ITqOtgaP3zm6mELMo8UXyyqbEw6MgAAwKSTL/TFfXvXR+sLW4oar+SNJPQe7orb91w67B5BRMTKmu3KMQEApjAFhBPb8ZQPHqGEcHJQQAgAAAAAAAAAMHoKCAEAAAAAAAAAEtST648l/0822rvfSDoKU1jD75fF36/8YJTO8NIkAADGRv9AIR7Yvyl279tQ1Pi6TEMsr74p0qmKpKMzTfUPFKL9pTvi7mfXRS6fHXJsJl0bK2u+H5WzapKODQAAMOEded7a0bGqqPELypfE5xdui/KZVUlHZxrrOtga32tbMeweQTqViS/W7Yyq2fVJRwYAYIwpIJy4RlM+eIQSwolPASEAAAAAAAAAwOgpIAQAAAAAAAAASEjr/tdixfd6InuoP+koTAO1lSdHy3/MREV6RtJRAACY5PZ0NxVV4hahyI2JZyTlmYozAQAAhlZsiVuEIjcmnpGUZyrOBACYehQQTkxjUT54hBLCiU0BIQAAAAAAAADA6CkgBAAAAAAAAABIwM2tv401/7036RhMM5lZM2LnFyuift57k44CAMAk1H2oI3Z0fCGyufZhx6ZTmbjkrM2xqLIx6dgwqFy+J3Z1Xhtt2eZhxy6dvzEunLc+ZpSUJh0bAABgQug93BU/eGp17O1tKWr8yprtUXv65Z6rmJDyhb64b+/6aH1hy7Bj6+eujYsXbIpUaVnSsQEAGCUFhBPPcOWDhVezgx471ucRSggnMgWEAAAAAAAAAACjp4AQAAAAAAAAAOAEu373K7Hh/leSjsE09sjVGSWEAAAUbSRFbRHK2phcii3WVKoJAAAwsqK2CGVtTC4jKdZUqgkAMPkpIJxYhisfPPx0S/Te+Z/iwxuO/pneC//ptGHPVUI48SggBAAAAAAAAAAYPQWEAAAAAAAAAAAnSKH/zfjMbS9Fy3OvJR0FYuNFH4hvLP1A0jEAAJjA+gcK8cD+TbF734aixtdlGmJ59U2RTlUkHR1GrLPn3rjzqSsjl88OOS6Tro2VNd+Pylk1SUcGAAA4YfoHCtH+0h2xo2NVUeMXlC+Jzy/cFuUzq5KODiPWdbA1fvjM1ZHNtQ85Lp3KxBfrdkbV7PqkIwMAcBwUEE4cxZQPvrTlM1E6e07M+ev9Rx3v+o8nFT2HEsKJQwEhAAAAAAAAAMDoKSAEAAAAAAAAADgBenL90djUo3yQCWVt/azY/P8pj9IZXqYEAMC77eluirufXTdsGVuEQjamjv6BQjx+4NbY1blm2LEKNwEAgOmi62BrfK9tRVF7BArZmCqOlG4Wsz+mcBMAYHJSQDgxjKQ4sPTUqmMWEI50LpKngBAAAAAAAAAAYPQUEAIAAAAAAAAAjLOeXH/U/td/ieyh/qSjwFGWfOS98aMrT1dCCABARER0H+qIHR1fiGyufdix6VQmLjlrcyyqbEw6NoypfKEvdj69OtqyzcOOXTp/Y1w4b33MKClNOjYAAMCY6j3cFT94anXs7W0pavzKmu1Re/rlno+YUvKFvnjo+c2xe9+GYcfWz10bFy/YFKnSsqRjAwBQBAWEyRtpYeBwBYTHMyfJUUAIAAAAAAAAADB6CggBAAAAAAAAAMaR8kEmAyWEAADk8j2xq/PaogrXIpSuMT30Hu6K2/dcOmwhpzJOAABgKskX+uK+veuj9YUtRY1XusZ00Hu4K+57bn1Re2fKOAEAJgcFhMk6nqLAYgoIj3duTjwFhAAAAAAAAAAAo6eAEAAAAAAAAABgnCgfZDJRQggAMD31DxTigf2bYve+DUWNr8s0xPLqmyKdqkg6OpwwXQdb43ttKyKXzw45LpOujZU134/KWTVJRwYAABix/oFCtL90R+zoWFXU+AXlS+LzC7dF+cyqpKPDCdN9qCN2dHwhsrn2IcelU5n4Yt3OqJpdn3RkAACOQQFhco63ILDYAsLRXIMTRwEhAAAAAAAAAMDoKSAEAAAAAAAAABgHygeZjJQQAgBML3u6m+LuZ9cNW6oWoVgNRlLEoagTAACYbIotXo9QrAYRxe+rKeoEAJi4FBAmYzTFgCMpIBzttRh/CggBAAAAAAAAAEZPASEAAAAAAAAAwBhTPshkpoQQAGDq6z7UETs6vhDZXPuwY9OpTFxy1uZYVNmYdGyYEPKFvrhv7/pofWHLsGOXzt8YF85bHzNKSpOODQAAMKjew13xg6dWx97elqLGr6zZHrWnX+45ByKif6AQD+zfFLv3bRh2bP3ctXHxgk2RKi1LOjYAAP9GAeGJN9pCwJEWEI7FNRk/CggBAAAAAAAAAEZPASEAAAAAAAAAwBhSPshUoIQQAGBqyuV7YlfntdGWbS5qvPI0OLbew11x33Prh/3nSYknAAAwEY2kXD1CeRoMJV/oi51Pry5qz02JJwDAxKGA8MQaiyLA4ykgHKtrM/YUEAIAAAAAAAAAjJ4CQgAAAAAAAACAMaJ8kKlECSEAwNSSy/fEDQ+eVtTYukxDLK++KdKpiqRjT2v9A4V49fUD8fwrj8aLr/40Tn3fR+LDsxbFB8s+6ruZQLoOtsYPn7k6srn2Icdl0rXxtXPbko4LAAAwoj2CBeVL4vMLt0X5zKqkY09r9ggmh97DXXH7nkuH3SNIpzLx9U93Jx0XAGDaU0B44oxVAeDxFhCOZQbGjgJCAAAAAAAAAIDRK006AAAAAAAAAADAVKB8kKmm5bnX4jO3vaSEEABgisj39w07JpOujZU134/KWTVJx53Wug91xI6OLwz7svqVNdtjUWVj0nGnvarZ9bF28ZPR/tIdcfez6yKXzw46brjvEwAA4EQpZo8gncrEF+t2RtXs+qTjTmu5fE80tzfG3t6WIcctr94ai+dcFTNKvDogSeUzq+Jr57ZFZ8+9cedTVx5zj+BYnwMAwFQ1EYr/BnI98S8ba4+ZZebZS6L8ss3R+/9em/TtAgAAAAAAAACAopUkHQAAAAAAAAAAYLLryw8oHzwBKspKomp26bv+KjtZMd54OlJCCADA1JdOZWL1x1uUDyaof6AQuzqvjW89VltUWd2OjlWx7Ymlkcv3JB192jtS8KBAAAAAmCq+fM79ygcT1D9QiNYXbo4bHjxt2PLBiIhdnWtiy+PnRO/hrqSjAwAAHCXp8sEjjpQQFl4d/Gd6JbMqErtHAAAAAAAAAABwPEqTDgAAAAAAAAAAMJkV+t+MP/27l5UPjqGq2aVxbtV74g/nvifOPu3kWPLRmUWd17wnF50vvxFPHMjHz158PXr6BpJeypTQ8txrcf3uV+IbSz+QdBQAAMZRLp+NGx48LVbWbI9FlY1Jx5l2cvme+OajtSMusNvb2xI3PHhafOUTjyiGSEgu3xPN7Y1FFUIAAABMFt96rDaWV2+NxXOuert0nROjf6AQWx4/J7K59hGdl821x40Pz7O3k6B8oS92Pr062rLNSUcBAIAJ70SXDx5xpITwQxvaj1mMCAAAAAAAAAAAk4X/xwcAAAAAAAAAwCj82Y5fR8tzryUdY1IrLYm46KMz4wt/UBYNi9LHPc/vnpv9bSHuaP/XuKOtL1q7Xk96mZPahvtfiQWnlkbjHxz/9wMAwOSwo2NVPPGr70ZDbVOkUxVJx5kW+gcKse2JJSMuH3yn77WtiOvO2xup0rKklzOt7Oluih0dq5KOAQAAMC52da6JfzqwLa5YdFeUz6xKOs608f/+85+NuHzwnXZ0rIozP3Cu7+wE6+y5N+586spR7e8AAMB0kVT54BFKCAEAAAAAAAAAmCpKkg4AAAAAAAAAADBZXb/7lWj+eV/SMSat+qr3xE2XlscbN1bFPVeePqrywcFk3l8aa897fzzy55XR/fU58Y0lp0TV7NKklz1prWr+dbTuV7YJADAd7O1tiRsePC32dDclHWVaePzAraMqFoiIyOWzcfvP/zTppUwbuXxPbHtiqfJBAABgysvm2uPGh+dF6ws3R39CxRDTSWfPvdGWbR71PLfvudT3dYLkC33R1N4Y393zWeWDAABQhKTLB484UkJYeDX5/x1/Uqos3jO/Pso+2Rhln2yMkz9cEyelypKOBQAAAAAAAADAJOCNagAAAAAAAAAAx6Hpf+Ziw/2vJB1jUqqvek98+3OnRu2HUifsmpn3l8bGP5kdG/9kdjTvycX6H70SXQe9dHOkzvt2Nvb/5YejqvzkpKMAAHAC7OhYFU/86rvRUNsU6VRF0nGmpO5DHbGrc82YzLW3tyX2dDfFosrGpJc1pe3pblI8CAAATDu7OtfEPx3YFlcsuivKZ1YlHWdKyhf64rt7Pjsmc2Vz7fH4gVujfu41SS9rSuvsuTfufOpKxYMAAFCkiVI+eMSREsIPbWiP0lMyJ/biJaVxyrL1MeuPvnLMaxdezcar9/5VHPrJrRPmngEAAAAAAAAAMLGUJB0AAAAAAAAAAGCy6ejOx6rmXycdY9Kpml0abV/7UDzy55UntHzwdzUsSsf+9XOiqfGDUXbySUnflknnUzdnoy8/kHQMAADGSF2mYcjje3tb4oYHT4s93U1JR52Snnr5h2M63xO/+m7SS5qycvme2PbE0qLKB9OpE/yCUgAAgDGwoHzJkMezufa48eF50frCzdGv+GDMPdVz15jO9+Nf/lXSS5qy8oW+aGpvjO/u+eyw5YP2CAAA4C0TrXzwiCMlhIVXT1yxeOmpVTHnxhdj9vKNQxYflp6SiVMbtsaH/n9PRumpVUnfKgAAAAAAAAAAJiAFhAAAAAAAAAAAI9CXH4iLtr2UdIxJpezkk+KmS8tj//o5iRYP/q6GRenIbTozGheVRanfoila9lB//OnfvZx0DAAAxsjFH9kU152/PzLp2iHH7ehYFdueWBq5fE/SkaeU/QcfHtP59va2JL2kKamz59644cHThr2/C8qXxNc//XLML78w6cgAAAAj9vEPfym+/umXhy0i3NW5JrY8fk70Hu5KOvKU8uKrPx3T+XL5bOQLfUkva8rpPtQRNz6yINqyzUOOy6Rr47rz99sjAACAmLjlg0ccKSEcODT+PwufdeE1Meev9w9ZPPi7UnNqY85f749ZF16T5G0CAAAAAAAAAGAC8uo0AAAAAAAAAIAiFfrfjD/9u5cje6g/6SiTRk3m5Nj7f3w41p73/qSjHNP2xor40ZWnR0WZX6UpVstzr8X1u19JOgYAAGOkfGZVrF38ZCyv3jrkuL29LXHDg6fFnu6mpCNPGeNRGKgAYuzkC33R1N4Y393z2WHHrqzZHqs/vjvSqYqkYwMAABy3dKoiVn98d6ys2T7kuGyuPW58eF60vnBz9E/QAonJpi17x5jP+S+Hfp70sqaM/oFC7Oq8Nr71WG3k8tkhxy6v3hprFz8Z5TOrko4NAAATwkQuHzxiINcTvXeuG9drnPzhmji1Yetxn39qw9Y4+cM1J/rWAAAAAAAAAAAwgXlrGgAAAAAAAABAkTb9+NVoee61pGNMGtecOyva1304Mu8vTTrKsJZ8dGa0/6cPRX3Ve5KOMmlsuP+VaN3vnwcAgKliRklp1M+9Jq47f3+kU5khx+7oWBXbnlgauXxP0rEntfEqCnw593TSS5sSOnvujRsfWRBt2eYhxy0oXxJf//TLsaiyMenIAAAAY2ZRZWN8/dMvRyZdO+S4XZ1rYsvj54zbM+50kS/0DVtqdzx+dWhP0kubEroPdcSmh86I1he2DDkuk66N687fH/Vzr4kZJRP/Z+QAAHDCTPDywROR86RUWZz+1ftHPc/pX70/wvMGAAAAAAAAAAD/RgEhAAAAAAAAAEAR7n3mX2PD/a8kHWNSKC2JaGr8YGz93KlJRxmRzPtL45E/r4xrzp2VdJRJ47xvZ6Mn1590DAAAxlD5zKpYf8GLUT937ZDj9va2xA0PnhZ7upuSjszvOFx4JekIk1q+0BdN7Y3x3T2fHbb8YWXN9lj98d2RTlUkHRsAAGDMpVMVsXbxk7G8euuQ47K59rjx4XnR+sLN0T9ZSiWmifedXJ50hEmtf6AQuzqvjW89VjvsHsHy6q2xdvGTUT6zKunYAADABHTqn22L0lMyo56n9JRMlF+2OenlAAAAAAAAAAAwQSggBAAAAAAAAAAYRk+uPz77315OOsakUFoS8aMrT4+GRemkoxy3rZ87Nb6x5JSkY0waS/6fbBT630w6BgAAY2hGSWksr74pvvqp9kinhn4J4o6OVbHtiaWRy/ckHXvSGa8X0p/5gXOTXtqk1dlzb9z4yIJoyzYPOS6Tro2vf/rlWFTZmHRkAACAcTWjpDTq514T152/PzLp2iHH7upcE1sePyd6D3clHXvSSZWWDbsHw4nVfagjNj10RrS+sGXIcelUJq47f3/Uz70mZpSUJh0bAACYgE5KlUX6kw1jNt/7//3apJcEAAAAAAAAAMAEoYAQAAAAAAAAAGAYjU2KNIpxpHxwyUdnJh1l1Db+yWwlhEVq734jbn38UNIxAAAYB5WzamL9BS9G/dyhX2C4t7clbnjwtNjT3ZR05ElnuPKG4/F6wf8+H6l8oS+a2hvju3s+G7l8dsixy6u3xtrFT0Y6VZF0bAAAgBOmfGZVrF38ZCyv3jrkuGyuPW58eF60vnBz9A8Uko49qcwvv3DM55z93jOTXtak0z9QiF2d18a3Hqsddo+gfu7aWH/Bi1E+syrp2AAAwARWWvHvxn7OU6uSXhYAAAAAAAAAABOAAkIAAAAAAAAAgCHc3PrbaHnutaRjTHhTqXzwCCWExVvz33ujozufdAwAAMbBjJLSWF59U3z1U+2RTmWGHLujY1Vse2Jp5PJK3IeTy/dEU3tjZHPtYz73tx6rVfQwAp0998aNjyyItmzzkOMy6dq47vz9UT/3mphRUpp0bAAAgBNuRklp1M+9Jq47f39k0rVDjt3VuSa2PH5O9B7uSjr2hJcv9MWuzmuHfS49Hrf87Lxo2Xd95At9SS9zUug+1BGbHjojWl/YMuS4dCoTX/1UeyyvvskeAQAAMKz3fvSPxnzOkyvPTnpZAAAAAAAAAABMAAoIAQAAAAAAAACOoav3jVjz33uTjjHhTcXywSOUEBbvom0vRaH/zaRjAAAwTipn1cT6C16M+rlrhxy3t7clbnjwtNjT3ZR05Ampf6AQLfuujxsePG1cigWO2NW5JjY9dEZ09tyb9JInrHyhL5raG+O7ez4buXx2yLHLq7fG2sVPRvnMqqRjAwAAJK58ZlWsXfxkLK/eOuS4bK49bnx4XrS+cHP0DxSSjj3h9A8UYk93U3z9x+lhC+9GY/e+DXHjIwtiT3eT7+EY+gcKsavz2vjWY7XD7hHUz10b6y94MSpn1SQdGwAAmCTeM//cMZ8zVfXxpJcFAAAAAAAAAMAEoIAQAAAAAAAAAGAQhf4341M3Z0c/0TSw/o9PmZLlg0ds/JPZUV/1nqRjTHjZQ/3xZzt+nXQMAADG0YyS0lhefVN89VPtkU5lhhy7o2NVbHtiaeTyPUnHnjA6e+6NTQ+dEbv3bTgh18vls/HdPZ+Nbz5aF72Hu5Je/oTSdbA1bnxkwbAlkJl0bVx3/v6on3tNzCgpTTo2AADAhDGjpDTq514T152/PzLp2iHH7upcE1seP8ez6Tt0HWyNTQ+dETs6Vp2Q6+Xy2djRsSq2PH5OdB1sTXr5E0r3oY7Y9NAZw5ZAplOZ+Oqn2mN59U32CAAAgMSdnKlOOgIAAAAAAAAAABOAAkIAAAAAAAAAgEFs+vGrkT3Un3SMCa++6j2x8U9mJx1j3O38YkVUlPlVm+E0/7wvWve/lnQMAADGWeWsmlh/wYtRP3ftkOP29rbEDQ+eFnu6m5KOnKjew13xzUfr4rt7Phu5/Ikvus/m2uPGh+fFrs5rI1/oS/p2JKp/oBC7Oq+NW3523rDfxdL5G2Pt4iejfGZV0rEBAAAmrPKZVbF28ZOxvHrrkOOOPJu2vnBz9A8Uko6dmN7DXdHU3ljUc+l4yOba45afnRdN7Y2Ry/ckfTsS1T9QiNYXbo5vPVY77HdRl2mI9Re8GJWzapKODQAATEJvZDvHfM7D7XcnvSwAAAAAAAAAACYAb0UDAAAAAAAAAPgdXb1vxIb7X0k6xoRXdvJJsfOLFUnHOCEy7y+NpsbpsdbRWvG9nij0v5l0DAAAxtmMktJYXn1TfPVT7ZFOZYYcu6NjVWx7Yum0e7F9vtAXTe2NcePD8yKba086TrS+sCW+/uN07OlumpZlD92HOmLTQ2dE6wtbhhyXTmXiq59qjyXzvxEzSkqTjg0AADDhzSgpjfq518R15++PTLp2yLG7OtfElsfPid7DXUnHPqHyhb5o2Xd93PjwvGjLNo/rtYbbp4mIaMs2xw0PnhYt+66flnsEvYe7Ysvj58SuzjVDjkunMvGlRfdEY22TPQIAAOC45bueGPs5f9WR9LIAAAAAAAAAAJgAFBACAAAAAAAAALxDof/NuPTvXk46xqSw7bJTI/P+6fOixSUfnRmNi8qSjjHhZQ/1x7r/0Zt0DAAATpDKWTWx/oIXo37u2iHH7e1tiRsePC32dDclHXnc9Q8UYk93U3z9x+miSgXq564dtqBhOOlUJr7yiUeKmmdHx6rY9NAZ0XWwNelbdUL0DxRiV+e18a3HaiOXzw45tn7u2lh/wYtROasm6dgAAACTTvnMqli7+MlYXr11yHHZXHvc+PC8aH3h5mlRfrenuylufGRB7N63YdixdZmGWFC+ZFTXy+Wz8aVF90RdpmHYsbv3bYhND50xLfZrIt7aI2h94ea48eF5kc21Dzm2LtMQ1523N6orliUdGwAAmOTe6H56zOcs9Pwy6WUBAAAAAAAAADABKCAEAAAAAAAAAHiHO9r6or37jaRjTHg1mZOjYVE66Rgn3OZLZkfZySclHWPC29J6KLp6/XMEADBdzCgpjeXVN8VXP9Ue6VRmyLE7OlbFtieWRi7fk3TscdF1sDU2PXRG7OhYNezYTLo2rjt/f3z01D8Z9qX3w8nls/Hoi38bXzu3Lb606J5hv4dcPhu3/Oy82PbE0ug93JX0bRs33Yc6YtNDZ0TrC1uGHJdOZeKrn2qP5dU3xYyS0qRjAwAATFozSkqjfu41cd35+yOTrh1y7K7ONbHl8XOm7HNp96GO+OajdbGjY1Xk8tkhx2bStfGVTzwSF39kU+ztbRn1tR9+/pvRWNsUX/nEI8N+D7l8NnZ0rIpvPloX3Yc6kr5t46b3cFdsefyc2NW5Zshx6VQmvrTonmisbYpUaVnSsQEAgCmg8JuuKLyaHf1E/yZ/oD3ezPclvSwAAAAAAAAAACYABYQAAAAAAAAAAP+mJ9cfq5p/nXSMCa+0JOL+1acnHSMRmfeXxrbLTk06xqRw6d+9HIX+N5OOAQDACVQ5qybWX/Bi1M9dO+S4vb0t8dxvdicdd0z1Hu6KbU8sjVt+dt6wpQJHXmT/tXPb4pT3zIk7n7py0HELypfEyprtUZdpiHQqEwvKl8TS+RtjefXWQce3ZZuj+1BHVFcsi/UXvBhL528cNvfe3pa48eF50bLv+sgXptZLKvOFvvjOkxcN+33Uz10b6y94MSpn1SQdGQAAYMoon1kVaxc/ecxn2COyufZ4pufupOOOqVy+J5raG+Nbj9VGNtc+7PiVNdtj7eIn44xT/jBu33PpoGNGukewt7cl9nQ3RdXs+li7+MlYWbN92BzZXHt867HaaGpvnHJ7BBERf/vTTw37fdRlGuK68/ZGdcWypOMCAEDiSk+tipm/tyxOueQbccol34iZv7csSk+tSjrWpPXSty4as7le/ttLRz8JAAAAAAAAAABTQmnSAQAAAAAAAAAAJopr7+pNOsKkcHldWWTeP31/7aRhUTrW/+iV6DpYSDrKhNbe/Ubc0dYXjX+QTjoKAAAn0IyS0lhefVN84sNfPmb524LyJbGosjHpqGMiX+iL+/auj9YXthQ1fun8jXHhvPUxo+StZ6p7frFu0HuUTmXiit//75EqLRv0Xj3/yqPRlm0+6vPvPHlRrL/gxZhRUhpL5n8jFp/xldjVee2gY99p974N8diLt8QlZ22O2tMvfzvfZJYqLYtLztocOzpWDXo8ncrEF+t2RtXs+qSjAgAATEkzSkqjfu418bGKS+Jvf/qpQZ9/M+naWDznqqSjjon+gUI8fuDW2NW5pqjx9XPXxsULNkWqtCwiIvZ0Nx2zIO/zC7dF+cyqY+6nDHbNHR2rYmHFpW/vLSysuLSoPYy2bHO0ZZtjefXWWDznqimxRxAR8eVz7o9vPVZ7zOMra7ZPmf0qAAA4biWlUX7Z5nj/v1875LDcPzXHb/5+dbyZn3rl5ePljV91xG//ccuw93Y4v2leE4XfdCW9HAAAAAAAAAAAJoiSpAMAAAAAAAAAAEwErftfi+afexlKMTZfMjvpCIn72gXvTzrCpLCq+dfRlx9IOgYAAAmonFUT1523N+oyDUcda6htSjreqPUPFGJPd1Pc+MiCosoH6zIN8fVPvxxL5n/j7Rf39x7uOua5l5y1+e0CgsGsOHtbpFOZoz7P5bPxwP5Nb/85naqIxtqm+Oqn2iOTPvZL9o+cu6NjVWx5/JzoOtia9C0eE4sqG2NB+ZKjPq/LNMR15+1VPggAAHAClM+sivUXvBj1c48uWbhi0V1TouCus+fe2PTQGUWVDy4oXxLXnb8/llff9Pazfy7fEzs6Vg06fnn11iifWXXM+RbPueqYz/w7n1799n9OlZbF8uqb4rrz9w/6rPy7dnWuiU0PnRGdPfcmeWvHTOWsmkH/HlxQviS+/umXlQ8CADDtnfzhmphz44tFFeSlP9kQH/6rvTHz95YlHXtS6b1zXRRezR73+fkD7XHoJ7cmvQwAAAAAAAAAACYQBYQAAAAAAAAAwLRX6H8zrv7hb5KOMSnUV70nMu+f/C8BHa21570/yk4+KekYk8L6ew8mHQEAgISkSsuisbYpvrTonrfL8lbWbI90qiLpaKPSdbA1tjx+TuzoWBW5/NAviMyka+Mrn3gkGmub3rXu/oFC3L7n0kHPWVC+ZNiX3qdKy+KyhbcNemz3vg3Re7jrXZ9VzqqJr53b9m/3PzPk3Nlce9zys/Oiqb0xcvmepG7zmHln4WU6lYkvLbonGmubhix4BAAAYGzNKCmN5dU3xVc/1f72c+lwxXqTQe/hrvjmo3Xx3T2fHXaP4Mgz6eqP7z5q3c3tjcc8Z/Gcq4acd0ZJaays+f6gx9qyzUcVCJbPrIrVH98dX/nEI8PuEeTy2fjuns/GNx+tO2qvYTK6eMGmd615Zc32WP3x3ZN+rwoAAEbrlEu+ER/e0B6lp2SKPqf0lEycvvaeKP8PNyUdf/IYKMSv/vOCyP1T84hP/e0/bol/+T/PiRgoJL0KAAAAAAAAAAAmEAWEAAAAAAAAAMC0d0dbX7R3v5F0jEnhvyz9QNIRJowvfSKddIRJYUvroejq9c8XAMB0Vl2xLK47b28snb9x2GK9iSyX74mm9sa45WfnRTbXPuTYdCoTK2u2x9rFT0bV7Pqjjj9+4NZjzvH5hduKylNdsSzqMg2DHrt9z6XRP8jLJxdVNr79XQynLdscNzx4WrTsu37QuSaLdKoilldvjbpMQ1x33t6orliWdCQAAIBpq3JWTay/4MVYXr112GK9iSxf6Ium9sa48eF5w+4RRLxVtrj+ghcHfSbt7Lk39va2DHrel8+5P2aUlA47f+Wsmqifu3bQY3c+deWgz/VVs+vf/i6Gk821x40Pz4tdnddGvtA37vd3vKRKy+KyhbfFgvIl8fVPvzyp96kAAGCszPy9ZTF7+fA/OzyW9//7tTHz9/z8rVhv5vvi199pjJe2fDYKr2aHHV94NRu/2lgbvf/vtcoHAQAAAAAAAAA4igJCAAAAAAAAAGBaK/S/GevuPph0jEmhoqwklnx0ZtIxJoz//O9PSTrCpLH+R68kHQEAgISlSstiyfxvJB3juPQPFKJl3/Vxw4OnRVu2edjx9XPXxnXn7Y1FlY2DlgTk8j2xq3PNoOcur94a5TOris62vPqmQT/P5trj8QO3DnrsyHdx3fn7j1lg+E67922ITQ+dEXu6m8bj9p4Q9XOvicbapkiVliUdBQAAYNqbUVIa9XOvKapYb6LpHyjEnu6m+PqP00XtEdRlGuLrn375mOvNF/rizqeuHPTc+rlro3JWTdHZPvvRzZFOZY76PJfPxj2/WDfoOUe+ixv+OFfUHkHrC1vi6z9Ox57upkFLDSeD6oplsfrjuyOdqkg6CgAAJO6kVFmcesVto57n1Ctui5NSfg43Eof/+d741X9eEL/aWBs931kVuX9qjsKr2Si8mo3cPzVHz3dWxa821saB686IN37VkXRcAAAAAAAAAAAmKAWEAAAAAAAAAMC0tunHr0b2UH/SMSaF/1DnBTHvlHl/adRkTk46xqTQ/PO+aN3/WtIxAABgxPZ0N8Wmh86I3fs2DDt2QfmSuO78/bG8+qYhi+6a2xsH/TyTro3Fc64aUb50qiJW1mwf9NiuzjWRy/cc89zymVXRWNsUX/nEI5FJ1w55nVw+Gzs6VsU3H62L7kNecAkAAMD003WwNTY9dEbs6Fg17NhMuja++qn2aKxtGrLo7r696yOXzx71eTqViYsXbBpRvhklpfHFup2DHmt9YcuQz/Op0rJorG2K687fP+weQUTEjo5VsemhM6LrYOuY3V8AAODEO/XPtkXpKZlRz1N6SiZO/bNtSS9n0nkz3xdv/Koj+v6pKX79ncY48BeVceAvKuPX32mMvn9qeqt4cJKWvwMAAAAAAAAAcGIoIAQAAAAAAAAApq2+/EBsuP+VpGNMGqv/cFbSESacz/3e+5KOMGlc/cPfJB0BAACK1n2oI775aF3s6Fg1aBHAO6VTmfjSonti9cd3R/nMqiHH7uluir29LYMeW1nz/ZhRUjrirIsqG2NB+ZJBjx2r7PCdqmbXx9rFTx6zyPCdsrn2+NZjtdHU3hj5Qt/x3l4AAACYNHoPd8W2J5bGLT87r6g9gpU122Pt4iejclbNkGO7D3VE6wtbBj122cLbIlVaNuKsVbProy7TMOix7zx5UfQPU1xRPrMqvnZuW3xp0T2RTg1dQpLLZ+OWn50XTe2N0Xu4a7S3GQAAOMFOSpVF+pMNo5/o36Q/2RAnpUb+HAMAAAAAAAAAABy/kb+dAAAAAAAAAABgitj8k98mHWHSKDv5pKj9UCrpGBPO52vK4vqWV5OOMSm0d78Rrftfi/p57006CgAAU1j/QCFeff1APP/Ko/Hiqz+NXL4nzvzAufHhWYviQ7N+f9iX9+cLfbHz6dXRlm0u6nrLq7fG4jlXFVUcmC/0xd3Prhv0WP3ctcMWEwzl8wu3xY0Pzzvq8729LbGnuykWVQ5dRDijpDQWVTbGwopL4769649ZgHBEW7Y52rLNRa8/l++JA6/+LA789ol4ua8zTiurjjnv/3iclj572NJGAAAAOF69h7vi5dzT8Yvf/MO79gg+WPbRSKcqhjw3X+iLh57fHLv3bSjqWkvnb4wLzlxXVHFg/0AhvvPkRYMeW1C+JKorlh33mlecvS329T5wVFliLp+Nxw/cGvVzrxl2juqKZbH+ghfjgf2bhl3/kT2CYtefy/fEr/t+Eb86tCeef+XRSKcq4oxT/jDO/MC5ccp75hS1xwIAAIxeacW/G5c53/hVR9JLAwAAAAAAAACAacNv4AMAAAAAAAAA01JffiA23P9K0jEmjT+arzRuMLUfSkVFWUn09A0kHWVSuPqHv4m2//ThpGMAADAF9Q8U4vEDt8auzjVHHXtnmWA6lYk//8PHjiq9G+r8wdRlGmJ59U3DlhW8086nVx/18v8jmS5esGlU6y+fWRXLq7cOmn9Hx6pYWHFpUQUIqdKyWF59U5x35tfiB0+tjr29LUOO39W5Jn78y7+KyxbeNmg5QmfPvfHdPZ8d9rora7YPW5IIAAAAxdrT3RQ7OlYd9fnv7hF8sW5nVM2uf9eY/oFCtL90R9z97LpBn+N/14LyJfH5hduO2msYyuMHbj3m3A21TaNae6q0LC5beNugz+O7OtfExyouKSrrjJLSWDL/G7H4jK/Ers5r33XvBrN734Z47MVb4pKzNkft6ZcfVSTYdbA1vte2Yth7urx6ayyec5UiQgAAGGepD9eMy5wKCAEAAAAAAAAA4MQpSToAAAAAAAAAAEASNv/kt0lHmFT+5KyZSUeYsD5xxnuSjjBptHe/Ea37X0s6BgAAU0zv4a7Y8vg5RZUH5vLZuPHhedH6ws1vf9bZc29seuiMos7PpGvjq59qj8baphGVD3Yf6jjmi/ovW3hbUeWAw1k856rIpGsHPbbz6dUjmqt8ZlWs/vju+MonHol0KjPsPf3uns/GNx+ti97DXRHxVllDU3tjUeWDEW+VJG57Ymnk8j2jvg8AAABMX7l8T2x7Yumg5YNHj83GLT87L3Z1Xhv9A4WIeOv5fcvj58SOjlXDFuWlU5n4yiceidUf3z2i8sHew13H3INYXr11RPsNx1JdsSwWlC8Z9Njtey4d0VzpVEU01jbFVz/Vfsx9h3fe0x0dq2LL4+dE96G3Skf6Bwqxq/PauOVn5xVV6Lirc01sefyct/cYAACA8TGz9pJJMScAAAAAAAAAAHBspUkHAAAAAAAAAAA40fryA7Hh/leSjjGpnH3ayUlHmLD+XblfwRmJq3/4m2j7Tx9OOgYAAFNEZ8+9RZfcvdOuzjXx9Mt3RUTE3t6WYcenU5m45KzNsaiyccTX6h8oxHeevGjQY3WZhqiuWDYm92JGSWmsrPl+fOuxo8sA2rLN8QeVXxjxtapm18f6C16Mxw/cOmxBYzbXHjc+PC/q566NtuwdRZUKvNPe3pa44cHT4qufao/KWTVjck8AAACYProOtsYtPztvxOe1vrAl9vU+GKenF0Zbtrmoc5ZXb43Fc66KGSUj/znhsQoAM+naWDznqjG7Hw21TXHDg6cd9Xk21x57uptGvMdROasm1i5+MtpfuiPufnbdkM/92Vx7fOux2qjLNMRLuacim2sf0bWO7DF85ROPRNXs+jG7JwAAAAAAAAAAAAAAMJWUJB0AAAAAAAAAAOBE++7PcklHmHSWfHRm0hEmrHOr3pN0hEmlvfuN6OjOJx0DAIApIJfvOa7ywSP29rYUVT64dP7GuO68vcdVPhgR8cD+Tcd8Kf/y6pvG9J5UzqqJ+rlrBz1251NXRv9AYcRzzigpjfq518QNf5yLukzDsONbX9gy4vLBd/rOkxcdV04AAACmr3yhL77XtuK4z8/m2osqH6zLNMQNf5yL+rnXHFf54J7upmOW8V2x6K7jmvNY0qmKWFmzfdBjOzpWRS7fM+I5Z5SUxqLKxrjuvL2xdP7GYce3ZZtHXD74Tt9rWxH5Qt+Y3RMAAOB/eX3fo5NiTgAAAAAAAAAA4NgUEAIAAAAAAAAA00qh/834q398NekYk0rZySclHWFCW3h6KukIk85f/9g/gwAAjF5z+/EVAhZrQfmSuO78/bFk/jciVVp2XHP0Hu6K3fs2DHpsZc32SKcqxjz3Zz+6OdKpzFGf5/LZuOcX64573lRpWTTWNsV15++PTLp2zHOPVU4AAACmn51Pr45cPjtu82fStfHVT7VHY23Tce8R5At9saNj1aDH6ueujfKZVWOeu/b0y4/5DD+afZVUaVksmf+NuO78/VGXaRjz3Efk8tnY+fTqcZsfAACms9d+8ZMxnzP/wp6klwUAAAAAAAAAANOKAkIAAAAAAAAAYFq5o60vsof6k44xqVSkZyQdYUKr/ZACwpFq/nlfdPW+kXQMAAAmsT3dTbG3t2Vc5k6nMvGVTzwSqz++e1Qv/+8fKMTtey4d9FgmXRu1p18+LvlnlJTGF+t2Dnqs9YUt0X2oY1Tzl8+siq+d2xZfWnTPoEWHY2EscgIAADA9dB1sjbZs87jMnU5lYmXN9vjauW1ROatmVHMdq0gvncrEZz+6eVzyzygpjSsW3TXosb29LdHZc++o5i+fWRWNtU3xlU88Mm57BG3Z5lHnBAAAjlbo+eWYz/nGS79IelkAAAAAAAAAADCtKCAEAAAAAAAAAKaVGx98NekIQET8/ZN9SUcAAGASe3D/jeMy7/LqrbH+ghejanb9qOdqf+mOyObaBz12xaK7YkZJ6bjdn6rZ9VGXaRj02HeevCj6BwqjvkZ1xbJYf8GLsXT+xnFZw1Mv/3Dc7g8AAABTx6Mv/u24zLt0/sZYf8GLsaiycdRzdfbce8ySxMsW3jauewTlM6tiefXWQY/d+dSVkS+M/md2VbPrY/0FL8bKmu3jsob/2f39cbs/AAAwXb2Z74vDT7eM2Xz5A+0xkOtJelkAAAAAAAAAADCtKCAEAAAAAAAAAKaN1v2vRXv3G0nHmHRmveekpCNMeKV+C2fENtz/SvTlB5KOAQDAJNQ/UDhmsd9o3PDHuaife82YvPQ/l++JHR2rBj22dP7GKJ9ZNd63KVacvS3Sqcwg2bLx+IFbx+QaM0pKY8n8b8TXP/3ymOfff/Dhcb9HAAAATH77eh8Y8zmvO39/LJn/jTHZI+gfKMSdT1056LG6TENUVywb93u0eM5Vx9wj2Pn06jG5xoyS0lhU2Rg3/HFu0GuNxrHKGwEAgNHp+c7oC9ePePlvL016OQAAAAAAAAAAMO149RkAAAAAAAAAMG387aOHko4wKdVUppKOMOHNOWX0Lx+dju76539NOgLAcenp6Ymurq63/7r33nujqakpmpqa3vV5V1dX0lEBpqRXXz8wLvOmSsvGbK5dndcO+nk6lYkL560fl/yDreeyhbcdI9+a6D3cNXbXKnnfmOff29syXrcGAACAKSKX74lcPpt0jCHd84t1x8y44uxtJyTDjJLS+PI59w96rC3bHN2HOsbsWqnSsnH5TnL5nnG7PwAAMF0N5Hqi5zurRj3Pb5rXROE3XUkvBwAAAAAAAAAAph1vPgMAAAAAAAAApoW+/EA0/7wv6RjAO9z44KvR+AfppGMAHFOhUIhnnnkmOjo64u67746nnnoq2tvbRzxPJpOJCy+8MM4999xYtGhR/P7v/36UlY1dyRXAdPP8K4+Oy7y9h7uifGbVqOfp7Lk32rLNgx77Yt3OmFFy4n6Nv7piWSwoXzJomd/tey6Nr53bNibXyb0xPiUAY/WdAAAAMDX9uu8X4zLv64VDYzJP96GOaH1hy6DHVtZsj1TpidsnrpxVE/Vz1w6a5ztPXhTrL3hxTPYs8oXx+Zn8r/t+EelUxbjfJwAAmG76/qkp0ud+KWaeveS4zj/8dEsc+smtSS8DAAAAAAAAAACmpZKkAwAAAAAAAAAAnAjf/Vku6QiT1vMHC0lHmPB6cv1JR5iU2rvfiI7ufNIxAN6lo6Mjbr755li6dGmcfPLJUVtbG6tWrYrm5ubjKh+MiMhms9Hc3Bxr1qyJ8847L9LpdNTV1cX1118fra2tUSj4dy3AVJEv9MWdT1056LG6TENUza4/4ZkaapsG/Tyba4893U0jnA0AAAAoRv9AIXZ0fGHQY5l0bSyqbDzhmT770c2RTmWO+jyXz8Y9v1h3wvMAAAATw0tbPhO/aV4z4vN+07wmXtrymYgBv/cCAAAAAAAAAABJUEAIAAAAAAAAAEwLf/WPryYdYdL61avK9YbT98abSUeYtL7z00NJRwCInp6euPnmm6OysjJqa2tjzZo10dLSMq7XbG9vjw0bNsR5550XJ598clx//fXR0dGR9K0AmBTO/MC54zJv+cyqUc9x3971kctnj/o8ncrEirO3jfetGVQ6VREra7YPemxHx6rI5XtGfY1T3jNnXLKPxXcCAADA1PXBso+Oy7yz3pMZ9RyPH7g1srn2QY9dseiucb0vxzKjpDQuW3jboMdaX9gSvYe7Rn2NVGnZuGQfr+8aAACIiIFCHHrg5jjwl/Mif6B92OGFV7Nx4C/nxaEHblY+CAAAAAAAAAAACVJACAAAAAAAAABMeR3d+cgeUqIHE9GW1kNR6FfgCCSjtbU16urq4rTTTos1a9ZENpsd8RxLliyJhoaGd/11PDZs2BC1tbVRWVkZTU1NUSh4QRvAsYxX2V3LvusjX+g77vO7D3VE6wtbBj12yVmbx+0F/MVYVNkYmXTtoMea2xtHPf+Lr/50zDMvKF8y7vcFAACAyS2dqoh0avRlgb/r8RdvGdUeQe/hrtjVuWbQY8urt0b5zKoTdYuOUl2xLOoyg+9j377n0ugfZXlI18HWccmdTlWM+70BAIDprvCbrviX6+viwF/Oi5e2fDZ++49bIn+gPfIH2uO3/7gler6zKg785bw4cN0ZUfhNV9JxE3FSqixKT616+6+TUsn9DBgAAAAAAAAAAEqTDgAAAAAAAAAAMN6+89NDSUeY1PryA0lHmNCyv1UQNVr3/+JwLPvY+5KOAUwjra2tcfXVV0d7e3tR4xsaGuKSSy6JD3zgA3H22WfHnDlzorT02L+C2dTU9PZ/7urqil/96lfx/PPPx09/+tO44447hiw6zGazsWrVqli3bl1s3rw5Lr/88iGvBTAdzSgpjUy6NrK54v57vFi7922I3fs2xNL5G+OCM9eNqDCwf6AQ33nyokGPLShfEosqR1/yN1pXLLorbnx43lGf7+1tic6ee6O6YtmI5+w62Bo/fObqMf8uIiLmzT4/kfsEAADA5DK//MJoyzaP6Zyj2SOIiPjBU6sH/TydysTiOVcldq+OWHH2ttjX+0Dk8u/eq87m2uPxA7dG/dxrRjzneO4RHKswEQAAGB+F33RF4Tddcfif7006SuJOSpXFez/6R1G2+AuR/uSxn00OP90Sv235Zrze9bMYyPUkHRsAAAAAAAAAgGmiJOkAAAAAAAAAAADjqdD/ZmxpVUA4Gj19CgiH8sC+15KOMOl98+HfJh0BmCZaW1ujsrIyzjvvvCHLB2tra2Pr1q3R3t4eb7zxRjQ1NUVjY2MsW7YsqqqqRlQIWFVVFfX19dHY2Bg33XRTdHd3x/79+2P79u2xZMmSY553pIjw5JNPjqampigUFN4CvNOn5103bnPv3rchvv7jdLTsuz7yhb6iznn8wK1HvbT/iM8v3JbIPfpd5TOrYnn11kGP3fnUlUWvNeKtUoFvPloXt/zsvHEpFoiIWHja5xK5TwAAAEwu557x5+M29/HsEezpboq9vS2DHvvyOffHjJLi95fHS6q0LC45a/Ogx3Z1rolcvviyjN7DXeO+R/AHlV9I5D4BAADT10mpsjjlkm/EmTfn4vS19wxZPhgRMfPsJXH62nti7n99OT745aYoSVckvQQAAAAAAAAAAKYBBYQAAAAAAAAAwJT20xdeTzrClNDyi8NJR5iwHu3y99hotTz3WvTlFV0C46enpycaGxvjvPPOi2x28HKoTCYTGzdujJdffjna2trimmuuiZqamhGVDRarqqoqGhsbY/fu3ZHL5WL79u1RW1t7zPGrVq2Kc845Jzo6OpK+lQATxqLKxlhQvmT0Ew2h2JKB3sNdsatzzaDHlldvjfKZVUneqndZPOeqyKSP/ndOLp+NnU+vHvb8E1E8GBFRP3dtVM6qSfReAQAAMDlUza6PukzD6CcaQrF7BPlCX9z97LpBj9VlGibUs+5QeyvN7Y3Dnt97uCua2hvjxofnjeseQV2mIaorliV2nwAAgOmn7JONcebNuZi9fONxnZ/+ZEPM/a8vx6wLr4mYACX0AAAAAAAAAABMXQoIAQAAAAAAAIAp7Y62vtFPQjz98htJR5iwftlbSDrClPCTfa8lHQGYom6++eY47bTTorm5edDjtbW18cgjj0R3d3d84xvfiIqKihOar6ysLBobG6OtrS32798fDQ2Dvyi7vb09amtro7GxMQoF/+4BiIhoqG06IdcZrmTg9j2XDnpeJl0bi+dcleg9+l0zSkpjZc33Bz3Wlm2O7kODl92eqOLBiIh0KhOf/ejmpG8VAAAAk8iKs7dFOpUZ9+sMt0ew8+nVkctnj/o8ncrEirO3JX2bjnKsvZW9vS2xp3vwY+8sHmzLNsd4mqj3DQAAmKJKSuODX26Kii9vH5PpTm3YGqev/ZESQgAAAAAAAAAAxo0CQgAAAAAAAABgyir0vxlbWg8lHWNK+IdnDycdYcL62YuvJx1hSvjmw79NOgIwxfT19cXSpUtjzZo1gx4/UjzY1tYW9fX1SceNiIiqqqpoamoasoiwubk5zjjjjOjq6ko6LkDi0qmK+NKie0Y1x5cW3ROZdG1RYwcrGdjT3XTMQr6VNd+PGRPwZZKVs2qifu7aQY9958mLon/gfxXdjrR4sNh7OZQvn3P/hLxvAAAATFyp0rL4Yt3OUc2xsmb7qPYIug62HrOQ77KFt0WqtCzp23SUdKoiVtYMXqyxo2PVu0oWR1o8OBaFkF+s2zkh7xsAADAFlZTG6Wt/FOlPNox+rneYefaSmHPji1GSrkh6hQAAAAAAAAAATEEKCAEAAAAAAACAKeunLyiGGytK9gaX/W0hevoGko4xJbQ891r05d1LYGx0dHTEggULoqWl5ahjmUwm7rnnnglVPPi73llEWFt79Auvs9lszJs3L5qampKOCpC46oplcd35+4+7+O609NnxtXPb4iufeOS4SgZ2dKwadEz93LVROasm6dtzTJ/96OZBiwBy+Wzc84t1x1U8+JVPPBKf+chfH3emBeVL4uuffnlC3zcAAAAmrqrZ9fH1T78cC8qXHNf5s997Znzt3Lb46qfaoy5TXOHEO/cIvte2YtAxC8qXRHXFsqRvzzHVnn75MfdEdj69+riKB1fWbI8vn3P/cWfKpGvjuvP3R9XsibmHDwAATD2nr/1RzDz7+J4nh1N6SiYqvtwUUVKa9DIBAAAAAAAAAJhiFBACAAAAAAAAAFPWHW19SUeYMnr6BqL9X/JJx5hwbnnsUNIRppSf7Hst6QjAFHDzzTdHbW1tZLPZo45t3LgxXnzxxVi2bOK+7Pmdqqqqoq2tLbZv3x6ZzNElUatWrYrGxsYoFApJRwVIVPnMqli7+MlYXr11xOfevufSiHirpOB4iggHk05l4uIFm5K+LUOaUVIaX6zbOeix1he2FF08mE5l4kuL7omvndsWZ5zyh3HnU1ceV56VNdtj9cd3RzpVkfStAQAAYBJLpypi9cd3x8qa7SM+93ttK6J/oBCVs2qisbYprjt//4iKCHP57KDHGmqbkr4tQ5pRUhpXLLpr0GNt2eYRFw+uv+DFWFTZGDs6vnBceZZXb421i5+M8plVSd8aAABgmjjlkm+MW/ngETPPXhIf/P/+fdJLBQAAAAAAAABgiilNOgAAAAAAAAAAwHi5o/1fk44wpfygoy9qP5RKOsaE8o97FeaNpX949nAs+9j7ko4BTGLXX399bNhwdBlUJpOJxx57LKqqqpKOeFwaGxvj0ksvjT/90z+NlpaWdx1rbm6Onp6e+NGPfhSlpX4tFJi+ZpSURv3ca2LxnKvi1dcPxPOvPBovvvrTyOV7Ip2qiFPf95HY1bnmqPOyufbY090UiyobI+J/FRF2H+qIB/b/dVEv2P9dly28LVKlZUnfkmFVza6PukzDca0xncrEJWdtjtrTL48ZJW/9++eB/ZuOWbbwlU88Egdfe/7t7+S0suqY8/6Px2npsxUKAAAAMOYWVTbGosrG6D3cFS/nno5f/OYf3t4jOOOUP4y7n1131DNsLp+NB/ZviiXzvxEREeUzq6Kxtiku/simuO+59cf1/Ly8emukUxVJ345hlc+siuXVWwfdOxnOYHsEe7qbIptrH3T8lxbdE4cLr7xr3+aMU/4wzvzAuXHKe+a8PQcAAMCJUHpqVcxevvGEXCv9yYY49MDfxuv7WpNeNgAAAAAAAAAAU4TfwAcAAAAAAAAApqSu3jcie6g/6RhTyi2PHYqNfzI76RgTRva3hWjtej3pGFPKltZDcdOfnpp0DGASKhQK8Wd/9mfR3Hz0C6AbGhri7//+7yd9OV9ZWVns3r07br755liz5t0vgW5paYlzzjknWlpaoqJi4r/MGmA8zSgpjfKZVVE+s+rtUsF3GuxF+js6VsXCikvfVRpYOavmuEsGDvz2ifh3s/9oUpQQnnvGn49obYOVCkRE9B7uit37Ngx6zsqa7VE1uz6qon7Q7wQAAADGy5E9guqKZUcd29Gx6qjPdu/bEH/woT+L8plV75rjePcIfvOvz0W+0Dcp9gjqMv9hxAWEy6u3xuI5V71rjyBf6Iu7n1036Pil8ze+/V3YIwAAACaCU7+47YRer+KqnXHgujMiBgpJLx0AAAAAAAAAgCmgJOkAAAAAAAAAAADj4e5nDicdYcrp6RuI9n/JJx1jwrjlsUNJR5iSOrr9PQaMTKFQiM985jODlg9u3749mpqaJn354Dtdc8010d7eHplM5l2ft7e3R21tbfT09CQdEWDCWjznqkinMoMe2/n06kE/P1IycN35+6Mu01DUdXbv2xBf/3E6WvZdH/lCX9LLHlTv4a5oam+MW352XlHj06lMrKzZHusveDEWVTa+q1ggIuIHTw1+/zLp2qg9/fKklwsAAADvsqiyMRaULxn02O17Lh3083fuESydv7Go67S+sGXC7xHkC33Rsu/6uOHB04o+Z+n8jXHDH+eifu41R+0R3Ld3feTy2aPOSacyceG89UkvFwAA4G3vmV8fM89eMvqJRqD0lEyUfdzPTwEAAAAAAAAAGBsKCAEAAAAAAACAKemup/416QhT0l/+6GDSESYMBYTj4ye/fC3pCMAks27dumhpaTnq80ceeSQaGxuTjjcuampqBi0hzGazsWTJkigUCklHBJiQZpSUxhfrdg56rC3bHN2HOo557pGSgS8tuqfo603EIsJcviea2hvjxofnRVu2uahzlldvPWbxYEREZ8+9sbe3ZdBzV9Z8f9BzAAAAIGmfX7ht0M+zufbY0910zPPKZ1bFkvnfiOvO31/0tSbiHsGR4sGv/zgdu/dtKOqc+rlr44Y/zsWS+d+IVGnZUcd7D3dF6wtbBj33soW32SMAAAAmlKSKANPnfinppQMAAAAAAAAAMEUoIAQAAAAAAAAAppxC/5vR8pwSs/Fw/y8OR/a3So2a9+Sip28g6RhTkvJQYCSuv/762LLl6JcZP/LII1FfX590vHFVUVExaAlhe3t7fOYzn1FCCHAMVbProy7TMOix7zx5UfQPDP3fnz967i9HfM3RlAz0Hu6Kzp57Y1fntbGnuyl6D3cd17qPlArc8OBpRRcPvtOxCgL6Bwpx51NXDnqsLtMQlbNqjisvAAAAjLfymVWxdP7GQY/d/ey6YZ/h73tu/YivOZo9gly+Jzp77o2WfddH6ws3R/ehjmH3MQZzPMWD78wwWPHgEbfvuXTQzxeUL4nqimUjzgoAADBuSkrj/f9+bSKXnnn2kjgpVTb6iQAAAAAAAAAAmPZKRz8FAAAAAAAAAMDE8szLbyQdYcoqDESsu/tgbG+sSDpKotb/6JWkI0xZLc+9FoX+N6N0xklJRwEmuJtvvjk2bDj65cgvv/xyVFRMj39PVVRUxIsvvhjnnHNOtLe3v/15S0tLfOYzn4ndu3cnHRFgQlpx9rZBS/hy+Ww8fuDWqJ97zaDn7eluimyufbjpj2n3vg2xe9+GWDp/Y1xw5rpjvrC/93BX3Pfc+iGLAheUL4mPf/hLsaiycchr5gt98dDzm0dcKPBOuzrXxMcqLonymVVHHXtg/6bI5bPHvM8AAAAwkV04b3089uItRz3b5vLZ2Pn06misbRr0vK6DrUM+tw+n2D2CXL4ndnVeO+wewdmnXRqL51wVM0qO/eqAsdgjaMs2x4Xz/jIqZ9UcdWyofZPPL7RHAAAATCwnV34s0eu/96N/FIf/+d6kbwMAAAAAAAAAAJNcSdIBAAAAAAAAAADG2k9++VrSEaa0O9r6IvvbQtIxEtO8JxddB6fv+k8EJaLAcDo6OmLNmjVHff7II49Mm/LBI0pLS6OlpSUymcy7Pm9paYmbb7456XgAE1KqtCxW1mwf9NiuzjWRy/cc9Xku3xM7OlYNek793LVx3fn7oy7TUNT1d+/bEF//cTpa9l0f+ULfu47t6W6KGx+eN2yJwd7eltjRsSqa2hujf+Do55N8oS9a9l0fX/9xuuhigaXzN0Y6lRn02A+eWn3UZ72Hu44598qa7ccsTwAAAICJYkZJaXyxbuegx9qyzdF9qOOoz/sHCvG9thWDnlOXaYgb/jgXS+dvLOr6Q+0RdB1sjW8+WlvUHsGuzjXx3/7nZ8Z0j2BB+ZJBj33nyYuOuk6+0Bd3P7tu0PH1c9dG+cyqoq4LAABwoqQ+XDP6SUah5H0fSPoWAAAAAAAAAAAwBSggBAAAAAAAAACmnLue+tekI0xphYGIFd/rGf1Ek9TqO3+TdIQpT4koMJS+vr646KKLjvr8kUceifr6+qTjJaKioiLa29uPKiFcs2ZNdHR0HOesAFNb7emXRyZdO+ix5vbGoz7b1XntoGPTqUx89qObo3xmVTTWNh13EWEu3xO7Oq89ZsnhsbRlm+O//c/PvF1ScLylAjf8cS6WzP9GfPmc+wcds7e3JfZ0N73rs8FKCSMiMunaqD398hGtAwAAAJJSNbv+mM/yOzq+cFTZ3j2/WBe5fHbQ8curb4pUaVksmf+N4y4izOV7omXf9XHLz8475nUGs7e3JTY9dEbk8m/9HHe0ewQNtU2Djsnls/HA/k3v+mzn06sHzZpOZeLiBZsCAACAd5tZe0nSEQAAAAAAAAAAmAIUEAIAAAAAAAAAU07Lc8rLxltr1+vRvCeXdIwTblVTT/S98WbSMaa8R7teTzoCMIH96Z/+aWSz736R8fbt26dt+eARFRUV8dhjjx31+UUXXRR9fX1JxwOYcGaUlMYVi+4a9Nje3pbo7Ln37T939twbbdnmQcdetvC2mFFS+vafj7eI8IYHT4vWF7Yc11r29rbEjY8sGFWpQKq0LCIiKmfVRP3ctYOO39Gx6u2iw86ee2Nvb8ug41bWfP9d9wQAAAAmuuXVNw36eTbXHo8fuPXtP/ce7jrm8/vKmu2RTlW8/efjLSK84cHTin62/125fDa++WjtmOwRpFMVsbx66zFz9h7uioiI7kMdx9w3ueSszW/PBwAAMJG8Z94fJh0BAAAAAAAAAABGTQEhAAAAAAAAADCldPW+kXSEaePau3oj+9tC0jFOmJZfHI472hQ4nQjNP3efgcE1NTVFS8u7y44aGhqisbEx6WgTQlVVVWzfvv1dn2Wz2Vi9enXS0QAmpPKZVccs27vzqSujf6AQ/QOFuPOpKwcdU5dpiOqKZcece6RFhKORy2dHVSrwTp/96OZIpzKDnrvz6dXD3pPKWTXjvl4AAAAYS+lURays2T7osV2dayKX74n+gULcvufSQcdk0rWxqHLwferjKSIcjbHcI1g856rIpGsHPff2PZdG/0AhdnR8YcT3BAAAAAAAAAAAAAAAGD0FhAAAAAAAAADAlPJo1+tJR5g2evoGYsX3epKOcUJkf1uIxqaeKAwknWT6UCYK/K6+vr5YtWrVuz7LZDLx93//90lHm1AaGxujoeHdRVfNzc3R2tqadDSACeniBZsGLdvL5bNxzy/WxT2/WBe5fPao4+lUJlacvW3Y+U90EeFQhisVOGJGSWlctvC2QY+1ZZtjy+PnDHpPIqKoewIAAAATUe3plx+zbG9X57XR/tIdkc21D3r8ikV3DTv/iS4iHMpI9giOtbZsrj22PH7OqO4JAABAUl7f/9OkIwAAAAAAAAAAwKgpIAQAAAAAAAAAppSfvqCA8ERq7Xo9NvzDwaRjjLsV3+uJnj7tgyfS0y8pIATebfXq1Ud9dv/990dpaWnS0Sacbdu2RSbz7jKtFStWRKFQSDoawISTKi07Ztle6wtbovWFLYMeu+SszUO+oP93JVlEWGypwDtVVyw7Zs5jFQssr946onsCAAAAE8mMktJYWfP9QY+1ZZtjR8eqQY8tr94a5TOrir5OkkWEdZmG+PqnXx7RHkH5zKpj5jzWHkH93LUjuicAAADTzeH2u5OOAAAAAAAAAADAFKCAEAAAAAAAAACYUh785WtJR5h2Nv341Wj5xeGkY4ybDf9wMFq7FFueaE8cyCcdAZhAOjo6orm5+V2fbdy4MWpqapKONiGVlZXFzp073/VZNpuNW2+9NeloABNSdcWyWFC+pOjxC8qXxKLKxuO61oksIjye4sF3WnH2tkinMkWNTacysXjOVeO6HgAAABhvlbNqon7u2qLHj+Z5+EQWEdZlGuK68/dHY21TpFMVIz7/wnnrR7RHcPGCTeO6HgAAgNF6fd+jiV6/8Jvnk74FAAAAAAAAAABMAQoIAQAAAAAAAIAppb37jaQjTDuFgYjP3PbSlCwh3PAPB+P6lleTjjEtdb7sn2Xgf/nCF77wrj9nMplYv3590rEmtPr6+mhoeHex1Zo1a6Kvry/paAATUkNt07iMPZYjRYTjoX7u2lEVDx6RKi2LS87aXNTYL9btjBklpeOyHgAAADiRLl6wqeiyvS+fc/+on4ePFBEWe82RWFC+5O3iwfKZVcc9z4yS0vjyOfcXNfaSszaPaj8CAADgRCj8pisKr2YTu37+xZ8nfQsAAAAAAAAAAJgCFBACAAAAAAAAAFNGV6/CsqQcKSHM/raQdJQx07wnp3wwQc0/V5AFvKW1tTXa29vf9dltt90WpaVKjoZz0003HfXZ5s3FFUkBTDfpVEUsr9467Ljl1VsjnaoYk2v2Hu4al7WcccofjtmL/hdVNsaC8iVDjqnLNETV7PpxWQsAAACcaKnSsrjkrOH3Uevnro3KWTVjcs3+gULk8mNffPHxD39pVMWD71Q5qybqMg1Djsmka2NRZeOYrwMAAIgoPbUqZv7esph14TXxwS83xZy/6Y4Pfrkpyj7ZGCd/uCZOSikCH6lDP7klkesefrol3sz7/UgAAAAAAAAAAEZPASEAAAAAAAAAMGX86tX+pCNMa4WBiDP+6kC0/OJw0lFGbcM/HIzGpl8nHWPa68sPJB0BmACuvvrqd/25trY2li1blnSsSaGioiI2btz4rs82bNgQfX1eYgYwmMVzrop0KnPM45l0bSyec1XSMU+4htqmIY8vr76pyJkAAABgclhU2RgLypcc83g6lYmLF2was+v1D7w+Luv41zd6x3S+FWdvG3Lv5IpFd43LOgAAYDo7KVX2VuHgX++P09feE6c2bI30Jxui9JRMpD/ZEBVf3h4f3tAeZ96ci7JPKgQfib7H/j6R677yP/5L0ksHAAAAAAAAAGCKUEAIAAAAAAAAAEwZzx8sJB1h2isMRHzmtpcmdQnhhn84GNe3vJp0DCKiJ6dUFKa71tbWaG9vf9dn3/72t5OONamsW7fuqM82b96cdCyACWlGSWn88b/7z8c8vrLm+zGjpHTMrlc+s2pc1nHmB84d0/lSJe8bslzg0OvZcVkHAAAAJOn8M792zGOXnLU5UqVlY3atVGnZkM/ex+t9J5eP6XwzSt4z5PHnX3l0zNcAAADTWdknG+PDf7U30p9sKGp8xZe3x+lf3R0l6Yqko08Khd90Re6fmk/oNfMH2uP1fa1JLx0AAAAAAAAAgClCASEAAAAAAAAAMGXc/czkLb2bSo6UEG74h4NJRxmxz972kvLBCeTRrteTjgAk7L/8l//yrj/X1tZGfX39iOY46aSTptxfI1FWVhYbN25812cbNmyIQkFxM8Dvyhf64se//KtjHn9g/1+P6fX6BwqRSdeO+TrG+mX/9+1dH7n8sUsGv/PkRdE/4N8rAAAATB39A4X40XN/eczjD+6/ccyvmUn/3pjP+a9v9I7pM/vjB24dco/g7mfXRb7QN+brAACA6aj8P9wUFV/eHqWnjKysfObZS2Luf305Sk+tSnoJk0LvjmtP6PVe/ttLk14yAAAAAAAAAABTiAJCAAAAAID/P3t/HB11fed7/C/CMBpnkBIcmEjASYkaoJk0RdES1FpD6wIL1yOlZGK3v15hf9qFUMu5l1v2ChvcpjdnD1sJVP1d8HrcNhNW7XHhArVNWq0QalFvmknBtIVmhGAGRkKRmaaMk/D7w4UamWQmmUk+meT5OIdzOt/v5/v5vj+fGUy/nwyfFwAAAIARIxjuMl0C/lO0W9pcf17zf9CuwAfDP4jC915Ek//phPa3EGI5nHR0dpsuAYBB4XBY9fX1PY499dRTpstKS+vWrbvq2K9//WvTZQHAsPPS0VV9bqLfFKiV/1xD0vfp6o6qsd2rytenKRDypXwcu5rL9P1DhSmptaPTr4YT1X22CUUCerW1MuXjAAAAAADAlDfanunzmT0Q8qmx3ZuSe/nPNej7hwp1rKM++c4+YU/LGlW+Pk2N7d6kgwhDkaD2tKyJ0yagl46uSvk4AAAAgNFm3NQCXX9feVJ9TP6H3VKGxfRQhr3uUFCnqxcNyb3O7dmk6Fm/6SEDAAAAAAAAAAAAAABgBCGAEAAAAAAAAAAAAAAAjBj1f/iL6RLwCQ3+i8r7X6dU2xgyXUqv1rx8VnO2vqdgmLC74eaQ/6LpEgAY9Nxzz/V47XQ6dccdd5guKy3ZbDaVlpb2OPZP//RPpssCgGHFf65BTYHauO1+2LRswBv2fzx4cFdzWZ9hh8kKhHx6+s35SQcRPt+4NKF2dcc3qaPTP2jjAQAAAABgqHR0+uMG7UnSruYyRaLhAd/ncvDg02/O7zPsMFmhSEC7msuSDiLc07I2oXZNgdqk1iIAAACA0W6M1aYp3/pZ0v1Yc9yasHCD6eGkhc7f7te5PZsG9R6hw7U6v3ez6aECAAAAAAAAAAAAAABghCGAEAAAAAAAAAAAAAAAjAjRrkumS0Avwh9eksf7vtxbTinwwcA2tBwM9b/v1OR/OqHthy4oSvbgsBQMd5kuAYBBO3bs6PH60UcflcViMV1W2vqHf/iHHq/r6+sVDg98c2wAGEm6uqP6YdOyhNqGIgG92lrZ7/6HKnjwk5IJImxs9/YrACHRsEIAAAAAQHK8Xq+i0eHzO7eRpKs72q/n25eOrur3PYYqePCTkgki9J9rUFOgNuH2P2xaNuCgQwAAACARmzdvHrHPRRMfqJRlgjM1fS2pkGWSy/SQ0sL5vZv1wc+rB6XvzqP1ev///J3pIQIAAAAAAAAAAAAAAGAEIoAQAAAAAAAAAAAAAACMCG3nR+ZmMiNJc+BDTftum8q8Qfneixiro/73nZr/g3Yt2HFawTDJg8NZ/R/+YroEAIb4/X75fD03Xn7ggQdMl5XW7rjjjquO7d6923RZADAs7Pv9un6FAtYd36SOTn/cdiaDBz+pv0GEkWhYe3+3Lua5vKySXu/R2O41NkYAAAAAGC3Kyso0Z84c+f1+06WMOL7TL/QrFLApUJvQc7ZkLnjwk/obRNjVHdUPm5bFPNfbGkEoEtC+368TAAAAMFg2bdqkadOmqbm52XQpKXf9feUp7e+aGfNMDyltdPz7WgV3lqW0z3N7Nun0kwskQtoBAAAAAAAAAAAAAAAwCAggBAAAAAAAAAAAAAAAwJCJdkvexrAKv/+e5v+gXfW/7xyye1cf/EC5lW1asOO0GvwXTU8FAKAPhw4d6vHa7XaroKDAdFlpzWKxqKKiosexvXv3mi4LAIxrv9CshhPVMc89evtBFTpLY557vnFpr30OJHjQaXfLbnUOeBy9bfj/SYkGEb5ybEPMup12t/7r537S67x8NN7ggMcBAAAAAEiMz+dTbm6u1q5dq2iUEINUCEWC2tUcO2hiRUGNiqfHDgH5YdOyPkP8+hs8aLc65bS7BzyOvKyShNYYEg0ifKPtmZhrBHarU1//7H/0Oi8NJ6rV0ekf8DgAAACAeAKBgNxutzwej8LhsOlyUiLD7kh5n5nuxaaHlVbCh71q+06uIm3JBcdH2nw6VeHW+b2bTQ8JAAAAAAAAAAAAAAAAIxgBhAAAAAAAAAAAAAAAYEQ4RKBc2mnwX9SCHac1+Z9OaM3LZ+V7L5Lye9T/vlOLnj0t+4Z3tXZ3h/zn2IA13fg7PjRdAgADnnvuuR6vH3zwwUG9n8vl6vHHZrOZnoJBcd999/V4XVtby+bkAEa1ru6odjU/FPNcobNUronFWpK/Neb5QMinxnbvVf0NJHjw0dsP6rF5Tdpw98leg/16Y7c69ejtB7Xqtjo98cWQFsyoSOi6voIIOzr9vYYyrij4kcZmWLRs1o5e+97Tsraf7wQAAAAAYKCqq6s1bdo0NTQ0JN/ZKFfr88Q87rS7VZTt0f15lTGD/UKRgF5trbzq+ECCB1cU1GjD3SdVfufbvQb79WVFQY1W3VanDXef1IqCmqSDCEORoPa0rIl53VdmPyurxaZFt2zp9T7PNy7tM5wRAAAASIXa2lrl5eXJ6/Um35lh46bckvI+r731XtPDSgnLJJc+9UBlzHNZX92qMdbUfdcnetav9zYXqr1qfr+DCCNtPp2uXqT3Nhfqw1PNRucMAAAAAAAAAAAAAAAAIx8BhAAAAAAAAAAAAAAAADAqGO7W9kMXVPj992Tf8K7m/6Bdm356TrWNoX71E/ggqtrGkNa8fFbuLac0br1fC3ac1v6WToU/vGR6mACABEWjUdXX1/c49sADDwzqPQsKCtTa2nrlT0dHhxwOh+mpSLk77rjjqmPvvPOO6bIAwJg32p7pNQDgcsCe3erQkvxtMdvsai5TJBpOOnjQNbFYkjQ2wyKP26sVBTUJ1V/oLNX6+ceuXG+12FQyY2PSQYTPNy7t9X7Z4wuu3Ku3OpsCtWoJ7k/+DQIAAAAAJCQQCGj+/PnyeDwKh8Omy0lLje1eHeuoj3nu60W7JX30LLz41i0x29Qd36SOTr+k5IIHi7I9Gpth0dgMi5bkb9U3ivYlFCKYl1Wix79wRkXZH4Uojs2wqCjbM+AgwsvP9Xta1vZ6v3zHwiv3WjnnZzHbBUI++U6/kLL3CQAAAOhNIBBQWVmZFixYoGAwaLqcAbNMuin1fU5wpjScb6iNsdo0YfFG5XyvVfa5pTHbXH9fuW7aHpJtrkfKsKTs3hePN+i9zYV6d7Vdp6sXKXS4VqHDtYqe/+vvgy8fC+4s04lvT9Z7mwvV+Vt+VwoAAAAAAAAAAAAAAIChMebSpUvsrgYAAAAAAAAAAAAAANLe9oYPtOY/OkyXgUFgyZByJvx1U5jx14zRhYs9v/LiPxc1XSYGie/bN6og22q6DABDqLm5WW63u8exDz/8UBbLwDYIGzNmTELt/vZv/1Z79uy58joSiSgnJ2dYbkyXzFc/FyxY0CPgcdu2bVq9erXpIQEYoP3792vatGkqKCiI27aj06+qA7lXHV9/V6uyMl2mhzLkepsPSVpRUHNlw35J6uqOqvL1aTGDBZ12t0KRMwmFDl5u/8DMp66EBvYmEg3rbOcfFQg1653gXh3veFUzsu7VTZ+ap6nji3SD7RbZrX2H5XZ1R+U7/YL2/m5dwvXZrc6Ybe1Wp9bPPyarpefmpDveWhAzoKG39qOF1+dRU6D2quNVX+KfbwAAAABIXl9rnk6nU1u2bJHH4+m1TW/PxJ98Hh4tItGwqg7mxXweXjCjQiUzNvY49v1DhTGDBZ32j9a1EwkdlD56dl586xa5pyzX2D4CMmKtETjtn1HuxLuUl3XfkK8RSLHXk3p7Fpakx79wJm6NIxVrBAAAAIMj3ndBtm3bpkceeaTP75r4/z6x75MMJdtcjxwra1Ler/+RcVJ3mn3HMsMi223LNfErW2SZED9U/bLo+YCCzyzTxeMNpkeAOKZWtmrcDS7TZQAAAAAAAAAAAAAAAKS1DNMFAAAAAAAAAAAAAAAApMIh/0XTJWCQRLs/Chi8/Kc58GGP14QPjmzN7RHTJQAYYs3NzT1el5SUDDh8sD/+7//9v1qyZMmV11arVW1tbXI4RtamyEuXLu3x+tChQ6ZLApCEP/3pT3K73fJ4PAqHw6bLSSvPNy6Nedxpd18VtjA2w6KvFb4Us30g5Eto436n3a1Hbz+ox+Y1xQ0flCSrxabs8QUqyvbI4/bq8S+0y+P2qnj6arkmFie0af/YDIuKsj3acPdJrSiokd0af2PO3say+NYtMcMES93eXvt55diGuPcDAAAAAKRWIBBQWVmZFixYIL/fb7qctPDS0VUxn4ftVqfuzb362fbrRbtj9hMI+RIKH7RbnVpRUKMNd59UUbanz/BBKfYawarb6lQyY6ORNYIFMyquCh+UpGWzdvTab61v9AVbAgAAwKw1a9Zozpw5afdcFDnVnHwnn+yzzZd24YPXzCjWjf/zbTlW1vQrfFCSLBOcyl5/UFO+VSfLJJfpoQAAAAAAAAAAAAAAAACDigBCAAAAAAAAAAAAAAAAAAAwbPz617/u8fquu+4asnuPhhDCoqKiHq9fffVV0yUBSIHa2lrl5eVp//79pktJC43t3l4DAXoLEXBNLFahs7Tf97Jbnf0KHhwMAwkZ+LhYoYx/HZ9DS/K3xTzXcKJa7RdSv0kqAAAAACC++vp65ebmavv27YpG0ytoYii1BPerKVAb89zKOT+LGQ6YlelS8fTyft+rv8GDgyHZNQJJMUMZpY+CEr8y+9mY54511KslyLoVAAAAhpbP51Nubq7Wrl2bNs9F0eAfU97nX373mulhJcwyyaUbVnqVvf6grDnupPrKnFWinO+1asLijRpjtZkeGgAAAAAAAAAAAAAAADAoCCAEAAAAAAAAAAAAAAAAAADDRjAY7PE6Ly9vSO8/0kMIp06d2uN1IBAwXRKAFAkEAlq0aJEWLFhw1X9L8VehSFC7mstinluSv01Zma6rjnd1R9XY7tXxjsRDWz8eKmAqePCTBhoyEAj55PV51NHpj3n+zpxH5LTH3gB0V/ND6upOjw1dAQAAAGAkWrNmjebMmaPmZgLiPykSDevFIw/HPFfoLFX2+IKY5/znGnS847WE7zMcggc/KZkgwuo35sh/riHmuXzHQhU6S2Oee/HIw4pEw6aHDgAAgFGourpa06ZN0/79wz8U+1IkrEibL6V9Xmz9telhxZdh0YTFG5XzvVbZ55bGbR7cWaa27+QqdLg2btuJSyo09bvHZJvrkYbB8xgAAAAAAAAAAAAAAACQSnwjBgAAAAAAAAAAAAAAAAAADBu1tT03B5s3b96Q13A5hHDPnj2S/hpCmJOTk/ahXi6X66pjfr8/5nEA6am+vl6TJ0/Wtm3b9Mgjj8hi4SvjH1fr88Q8brc6dWfOIz2OdXVH5Tv9gvb+bp1CkcQCW+1WpxbfukXuKcuHRaBALJdDBtxTlic8vqZArZoCtSp0lur+myt7BDWOzbDo60W7VXUg96rrAiGf3mh7RsXTV5se9rAwZswY0yUAAAAAGIV8Pp/cbrfKy8u1ZcsW0+UMG68c2xDzedhudWrZrB1XHfefa9DL73xTgVBiYSAjdY0gEPLp6Tfny2l364GZT8k1sbjH+SX5W9UUuDoEJBQJ6JVjG7Qkf6vpYQ8LrBEAAAAMrUAgoEWLFqm0tFQ7duyQzWYzXVKvzr9SJcfKmpT0FT0f0J9/s9v0kPpkm+vRxK9skWVC/GD0D35erXMvb9ClyEfh5u/v9Oj8T74nx8M/kjXH3et1lglOOVbWaML963W25pu6eLwh7r0AAAAAAAAAAAAAAACAdDA8/7UCAAAAAAAAAAAAAABAP9X+Jmy6BACDYO87nfJ8zm66DABDJBy++ue5qU3fRnIIodPpVCDw102kT506RQAhMAKtWbNGO3bs0O7du0fV3/GOTr/e/dMhnTz/ax3veE2BkE+FzlJNtuXrzx+e1bGO+pjXrZzzsythAAMJHpQkp92t8jvfHrahAp90OWTgneDemMEAsfQWRJiV6dKCGRWqO77pqmv2tKyRJJ398x90OnRUxzrqlZdVotyJdynn+tuUM+F22a0O09MBAAAAACNedXW1XnjhBf2fmm2mSxkSHZ1+nQkdVdsHb6n13IErz6NT7LM06bqb1XCiOuZ1i2/dIqvlr+vS/Q0elD4KH9xw98m0WyM4ef7Xvc7LJ/UWRGi3OrSioEa7msuuuqbhRLUmXXdzr2sEk+2zrqw1AAAAAIOhtrZWtbW1qqmp0TzTxfQifNgr+7xvKHNWSdJ9nX3+4SthfcPNuKkFcYMDL4u0+XTmB0sVPeu/6tyHp5r13ubChIIMrTluZa8/qNDhWv3p5Q0x+wMAAAAAAAAAAAAAAADSSXr8qwUAAAAAAAAAAAAAAAAAADDixQr2czjMBRKN1BDCe++9V7W1fw2aevfdd1VcXGy6LACDwOfzKTc3V+Xl5frHf15jupxBFYmG9fxv/kvMgMF44XqFzlJljy+QJDW2e/sdPHhZIOTTmfA7V/pKB/5zDQmHD35crCDCe3M36Fcnn445d5dDCC871lHf470qnl6uRbdsSZtgBgAAAABIV5/5zGc0Iy9Xr7WYrmTwdHVH9e+//buYz7uffB79pLysEhVleyQNLHjwslAkIN/pF670lQ46Ov0Jhw9+XKwgwqJsj9469VzMuY63RlDoLNWyWTt6hEACAAAAqeR2uzVv3jzpNdOV9C6406Pp/3omqT5Ch2vV+dv9podylQy7Q1krtso+tzRu2+j5gM4+/3BC4wgf9urPv9mt67+0ThOXVPTZ1j63VPa5pTq3Z5PO76+UuqOmpwUAAAAAAAAAAAAAAAAYkAzTBQAAAAAAAAAAAAAAAAAAAAxXl0MIL7scQmgyGBEA+qu6uloFN39ebUdMVzI4WoL7VXUwr88Agd7YrU4tm7VD/nMN+v6hQu1qLhtQ+OBlu5ofUleabFDZ1R3VD5uWxTzntLtltzrj9tEUqFXVgVx5fR6dv9imlXN+NqBaGk5Uq/L1aWq/0Gx6WgAAAABgRHI6ndq3b5/q6up0g2OS6XIGTfuFZlW+Pi1m+GAiSt3eK2sET785f0Dhg5ft/d06RaJh01OSsOcbl8Y87rS75bS7415/OYjw+4cK5T/XoAdn7xhQHU2BWlUdzFNLcPgFpQAAACD91dTUqKmpSS6Xy3QpfeoOBdVeNX/A13cerdf7/+fvTA+jpwyLJizeqOn/eiah8MGztWvUtn5av0IUL0XCOr93s9q+k6vQ4fjPhROXVCin6qRsc9MnPB4AAAAAAAAAAAAAAAD4OIvpAgAAAAAAAAAAAAAAAACgN9G/hOX3h2Wz2Qj7AmDM//2//1ff/OY39dRTT0n6KITw3XfflcPhUDicPhtIAxjdzpx+X95vSzO/IH35Mcl6remKUqPhxHbtaVkz4OtnZN2rHxyel3CggNPu1gMzP/p58PSbV2/6GQj55Dv9goqyh/8mlW+0PdNr2OKq2+qVaZko3+kXtPd36+KGMjYFatUUqFWhs1ROu3tAAQ2hSEBP/sqtbxTtU75joenpGXSXLl0yXQIAAACANDVmzJh+tS8vL1dlZaVsNpvp0gdVY7tXu5rLBny90+7WjrdKEn6mtVudWnzrFjntBXryV1cH9IUiAb1ybIOW5G81PTVxNbZ7ex3314t2KyvTJf+5Br38zjfjzs/lIPPwlVIAAIAASURBVMLLwYUDXSN4rnGRluRvU/H01aanZ9CxRgAAANB//X0uKi0t1Y4dO9Lqueji8Qad+PZkOVZ6lTmrJOHrztau0YVfPiN1R00P4QrbXI8mfmWLLBOccduGDtfq7L+t0qXIwL+PEz3r1/s7Pbrw6g80qewpWXN6D1W3THDKsbJGE+5fr+CzD+nDU82mpwsAAAAAAAAAAAAAAABIGAGEAAAAAAAAAAAAAAAAAIattv/3inJXPmq6DACGjB8/3nQJkiSHw6Enn3yyx7Ht27enbfjgn/70px6vy8rKVFY28I25AaSXd1776M/i9dKsL5quJjkdnf6kwgelj4LzEnE5eNA1sfjKsUJnaczrdzWXabZjqayW4buBaSgS7HXuluRvk936Ufh3UbZH7inL+xVEmKwXjzys9fOPDev5GygCBQAAAAAMJbfbrd27d8vlcpkuZdCFIsGkwgcl9Tt40D1lucZmfPRP9RfMqFDd8U1XtW04Ua35Nz2mrEyX6SnqVVd3VHt/ty7mueLp5Vdqd00s1mPzmvoVRJisPS1rVOj86pV1ipGENQIAAICh4XQ69dJLL6m4uDj5zgzoDgV1+skFCQX4Rdp8OvODpYqe9Zsu+wrLJJcm/8PuPgMAB7P+i8cb9N4/z5HttuVyrKzps601x62pm3wKHa5Vx6616g4FTU8fAAAAAAAAAAAAAAAAEFeG6QIAAAAAAAAAAAAAAAAAAABiycrKMl2CHA6H2traZLVarxz7l3/5F/33//7fTZc2YJ/+9KdNlwBgGNhbJf37/5DC4T+bLmVAurqjer5x6aDfx2l369HbD+qxeU09wgclaUn+1l6ve+noKtNT1Kc9LWtjHrdbnboz55Eex8ZmWFSU7dGGu09qRUGN7FZnIrcYsFAkMOznDwAAAACGu5qaGr399tujInxQkmp9nkG/h93q1IqCGm24+6SKsj1Xwgcl6d7cDb0+Lw/F+kUyXm2tVCgSiDne+/Mqrzp+OYjw0dsPymmPHyKSrKF4bwEAADAybdu2TSdPnkzb8MGPCx/2qu2/Zevd1XadqnAruLNMH/y8WsGdZWr7Tq78j4zTe5sLh0344BirTTes9Crne61xwwej5wMK7iwbvPq7owof9urd1XZ98PPquM3tc0s1/V/PaPy9q6WPPfcBAAAAAAAAAAAAAAAAwxEBhAAAAAAAAAAAAAAAAAAAYFi6ePGi0fuPxPBBSQqFQqZLADAM2CZKxV+TbLbrTJcyIG+0PaNAyDdo/fcVPHiZ3erQioKamOeaArVqv9Bseppi8p9rUFOgNua5rxW+1CNA4eOGMoiwKVAr/7kG01MFAAAAAGmntLRUoVBIHo9HFsvoCEpobPfqWEf9oPXfV/DgZWMzLPrK7GdjXh8I+dTY7jU9TTF1dPpVd3xTzHOLb90iq8XW67VDFUR4rKN+2M4fAAAAhqeSkhK1trZq9erVI+656FIkrA9PNSt82KuOf1+r8GHvR6F93VHTpX0kw6Lx967WTdtDss8tjdv83J5Nals/TeHDg///+S9Fwur497Vq+06uOo/Gf4acVLpNOVUnlfmZhUMydQAAAAAAAAAAAAAAAMBAEEAIAAAAAAAAAAAAAAAAYNiy3ZBjugQABgUCAWP3Hqnhg5L02muvmS4BgGHFX5MerZFyZpuuZOAOt+0YlH4TCR78OPeU5b1usr+r+SF1DZfNPv9TV3dUP2xaFvNcobM0oTEPVRCh7/QLRucKAAAAANKJ0+nUwYMH5fV6ZbPZku8wjbwT3Dso/SYSPPhx+Y6FyssqiXlu7+/WKRINm56qq/z4yKqYx512t4qyPQn1MRRBhIP1HgMAAGBkcTqd2rdvn+rq6uRyuUyXM+pkfmahcqpOalLptrhtQ4drdeLbk3V+7+YhD0+MnvXr9JML1F41X9HzfX8vyTLBqSnl+3TjxiZZJrmGtE4AAAAAAAAAAAAAAAAgEQQQAgAAAAAAAAAAAAAAABi2HLfcceV/X7p0iT/84c8I/9Pa2mr6Pzsf/bdnBIcPStK8efN6vK6pqTH+3vOHP/wZ2J+ampp+/f2/qUj6/z4vFT8kZYw1/V+jgevqjioQ8qW83/4ED142NsOiFQU/inkuEPINuxC9N9qeUSgSeyPNJflb+9XXx4MIl+TH30i0v06HjhqZIwAAAABIN9u2bdPJkydVXJz48+xI0hSoTXmf/Qke/LhStzfm8VAkoFeObTA2R7G0BPfrWEd9zHNfL9rd7/4+HkSYaoPxHgMAAGBkKS8v17Fjx7Rw4ULTpYw6lkku3bixSVPK98kywdln20ibT6cq3Hp/p0fdoaDRui8eb1Db+mkK7iyL29aa41bO91p1w0qvxlhtRusGAAAAAAAAAAAAAAAAPo4AQgAAAAAAAAAAAAAAAADD2uWAHQAYCiM9fBDA6OR0OvX/e+5JffV/SXH2fEwL5y+2DUq//Qke/Ljs8QUqdJbGPLeruUyRaHjI5qYvoUhQe1rWxDy3JH+b7FbHgPodm2HRTMfilNfbWwgCAAAAAOAjJSUlam1t1erVq2WxJB6SN5KEIoMTWHHzpAX9Ch68zG51aEn+tpjnGk5Uq6PTP5TT06uu7qhePPJwzHPF08uVlekacN8DXV+JZ7DeawAAAKQ3t9ut1tZWbd26VTYbwXBDaYzVphtWepXzvVZZc9x9to2eDyi4s0zvbS7Uh6eaTZf+V91RhQ979e5qu0KH4wef2+eW6qbtIY2/d7U0gGdGAAAAAAAAAAAAAAAAINX4FgsAAAAAAAAAAAAAAAD65JpoUeXffMp0GcPa3+16X9Fu01UAQPpzOK4OPgqHw0O2SdxAwwf37dunWbNmpbyeVatWqb4+9eFLR44c6fH6pptuSvk9AAwf5eXlqqys1MWMoKoOfMt0OSnx7p8ODUq/HZ3+AW+wv2zWDh3veFWhSOCqcy8dXSWP2zuUUxTTnpa1MY/brU7dmfOI6fJiSuY9AQAAAICRyul06tlnn9XChQtNl2Lc++HfD0q/Fy4GZLc6BnTtnTmP6Bd//G7MNYLnG5fqsXlNQzpHsbzaWhmzPrvVqfvzKpPqe7BCFt8P/37A7wkAAABGppqaGi1fvnzUBrIbk2HR+Hse0aTSbQk1P7dnkz742RZdioRNV96rS5Gw3t/p0Z9e3qDJ/7A7bqDipNJtmrDwHxV8ZpkuHm8wXT4AAAAAAAAAAAAAAABGMb49BQAAAAAAAAAAAAAARoTSz9pU+5vhu0FJOls8M1OlRXbTZQxr3/vFeTUHPjRdxoi0eGam6RIADKFYQYPBYHBIAghnz56txsZGjRs37sqxRMIHJWnWrFlyuVwprylWIGMq+Hy+Hq+nTp06KPcBYJbb7daPfvQjFRQUSJIudgZNlzTsWccO/OeN1WLT4lu3aFdz2VXnmgK1ujf3O8oeX2BsbO0XmtUUqI157muFL2lsBv+0AAAAAADSxbFjx4ZkzRQDMzbDoq8VvqSn35x/1blAyKeW4H7lO8yFR3Z0+lV3fFPMc4tv3SKrJbnPln0cIYEAAAAYfKFQaEQ/F42x2nQpelHqjpoupYdrZhTL8chLskxwxm0bOlyrP728QdGzftNlJyx61q/3Nhcq8zMLNenrz/Y5TssEp7LXH1Tn0Xqd/eGqYTfO4foZAgAAAAAAAAAAAAAAQGqxSwAAAAAAAAAAAAAAAAD6tHT2daZLGPbu+fS1BBACQIqUlJSovr7+yutDhw4NSrjfx82ePVs+n08ZGRlXjiUaPihJR48eHZS6gsHUh4X5/f6rjuXk5AxK/QDM2bZtmx555BFZLCPz6+I3fWpeyvu0W52yW5PbIL8o26PXWqsUCPmuOrer+SGV3/m2kaC/ru6odjU/FPNcobNUronFSd9jwjWD87MkK9M1mFMDAAAAAGlpJIds9NcNtlsGpd/JtplJXe+aWKxCZ6maArVXnXvxyMPacPdJI2sEkvTjI6tiHnfa3SrK9iTdf7IBhr0ZrPcaAAAA6WnEPhdlWGS7bbkcK2vkf2Sc6WqusExyadLXdihzVknctpE2n87WfFMXjzeYLnvAOn+7X23rp2n8PY9oUum2PttmzipRzvda9cHPq3Xu5Q26FAmbLl+SNHa8Q87/8Sudff5hdf52v+lyAAAAAAAAAAAAAAAAMEhG5o4SAAAAAAAAAAAAAAAASAnbuDEquSXTdBnD3qo7xmv7oQumywCAEWHWrFk9Agg7OjoG9X7Jhg9K0qJFi4Z+ogbowoWeP6+cTueIDSgDRqPS0lJt3bpVDkdyQXrD3WCE3RU6l6ekn68X7VbVgdyrjgdCPvlOv5CSjfz7y3f6hZihiJK0JH9ryu6RanlZ8TcwBQAAAACMbnarQ3arU6FIIGV95mWVpCQccEn+1pgBhKFIQK+2VqpkxsYhnStJagnu17GO+pjnVhT8KGX3SPV7In30XgMAAAAjWeZnFmrS15+VZYJTnUfrpe6o6ZI0xmrTxAcqdf195Qm1D+4sU/itF4ZF7UnrjurCq9sVanhOk/5uh+xzS/tsfv195br+vvJhMwfRs35ZJjg1pXyfIm0+nfnBUkXP+o3WBAAAAAAAAAAAAAAAgNTLSL4LAAAAAAAAAAAAAAAAjFSfnWo1XUJacN9olW3cGNNlAMCIcMcdd/R4vXv37kG7VyrCB9PNL3/5yx6v7733XtMlAUgBp9Opffv2yev1jvjwQUkam2GR0+5OaZ/HO15TR6c/6X6yMl0qnh57A85dzWWKRMNDMUVXRKJh7Woui3luSf62pDfvD0WC2vHWgl7vkYzciXcNyRwBAAAAANLbjKzUrnEGQr+V/1xD0v3YrQ6tKKiJea7u+KaUrEP0R1d3VC8eeTjmuUJnqbLHFyTVfyQaltfn0XONi1IePljoLE2+EwAAAGCYGje1QDdubNKU8n2yTHBKkv7cNHjflUlIhkW2uR7dtD2UUPjgBz+v1rur7Qof9hoP3ku1S5Gw3t/p0akKtyJtvrjtHStrlFN1UtfMKDZdukKHayVJ1hy3cr7XqhtWejXGajNdFgAAAAAAAAAAAAAAAFKIAEIAAAAAAAAAAAAAADAizHNdY7qEEem+vGtNl5A2CGscHAXZzCsw2hQU9NzkuL6+XtHo4GxO5vf7NWPGDOXm5l75M5LDB6WrAx3nzZtnuiQASaqoqNDJkye1cOFC06UMqS/krk9pf4GQT1UHcrWnZa26ktwU8/68StmtzpjnXjq6asjmqK/72a1O3ZnzSFJ9N7Z79cRrk3Wso35Qap89+YFBnx8AAAAAQPqbN+0fUtpfKBLQ02/Ol9fnUSQaTqov95TlctrdMc/9+MjQrhG82lrZazDgslk7kuq7JbhfVQfz1BSoHZTaP5f90KDPDwAAAGBC1le3auomn6w5PZ8bOn17jdV0zYxi5VSdlGNlTdy2nUfr1fadXHX8+1pdiiT3/DTcfXiqWe9tLlRwZ5mi5/sOXbdMcCp7/UHdsNIryySXsZo/+Tmyzy3VTdtDwyIcEQAAAAAAAAAAAAAAAKlBACEAAAAAAAAAAAAAABgRsjL5GsRgeLDAZrqEtEFY4+AYf80Y0yUAGGIzZ8686tg777wzKPcKh8Py+/09/oxk0WhU9fU9Q6Luuece02UBSMLy5cu1ceNGWSwW06UMuaJsj/KySlLeb8OJalW+Pk3tF5oH3IfVYtNXZj8b81xToDapvvuj/UJzrxv/f63wJY3NGNjnJhQJasdbC7SruWzQal+Sv03Z4wuS7wgAAAAAMOK5JhareHp5yvttCtSq6mCeWoL7B9zH2AyLVhT8KOa5Yx31SfXdHx2dftUd3xTz3IqCGlktA/udcCQaltfn0XONi3oNN0xWobNU+Y6FQzJPAAAAwJDKsOj6+2I/y0TP+oe8HMskl6Z8q07Z6w/KMsHZZ9vo+YDaq+br9JMLjNRqUviwV23rp+ncnk1x29rnlirne62asHijxliH/ru4nUfrYh633bZ8yGsBAAAAAAAAAAAAAADA4GDnPQAAAAAAAAAAAAAAAMTksGXIfaPVdBlp49HPjzddAgCMCBaLRSUlPQOlfvnLX5oua0SIFeQYK/ARQPoYjcGDH1fq9spudSbf0SeEIgE9+Su39rSsVSQaHlAf+Y6FvQYk7mp+SF3d0UGdm67uqHY1PxTzXKGzVK6JxQPqs7Hdqydem6xjHfX9vj5RTrtbd+Y8MqjzAwAAAAAYWRbdsmXQ1giea1wkr8+jUCQ4oD6yxxeo0Fka89yLRx4e9DUCSfrxkVUxjzvtbrmnDCx4oiW4X1UH89QUqB20uu1Wp5bN2jHo8wMAAACYMC479vc1Pvh59ZDWMcZqU9ZXtyrne63KnFUSt31wZ5na1k/TxeMNQ1rnsNId1fm9m3Xi25MVOhz/mWjikgpN/e4x2eZ6pIyh+x1/dyio6Pmrw+KvI4AQAAAAAAAAAAAAAABgxCCAEAAAAAAAAAAAAAAAjAgF2QTlpdrt064xXUJacV5vkcPG13FSLWfC6A7VAUarpUuX9ni9YwcbDKfCyy+/3ON1SUnJqA8vA5De7FaHvlb40qD133CiWlUH89QS3D+g6x+cHfvnVyDkk+/0C4M6N77TLygQ8sU8tyR/a7/76+j0q/qNOdrVXNZnO6fdrW993tdr+GI8dqtTq26r19gh3HgTAAAAAJD+xmZYtHLOzwYlhFCSmgK1euK1yWps9w7o+mWzdsSsLRQJ6NXWykGdG/+5Bh3rqI95bkXBj/r9DB6KBLXjrQV6rnGRQpFAr+3sVqcevf1gr+GL8ditTn2t8CVZLbZBnR8AAADAlGtvuSfm8c4jPx2aAjIsss31aOp3j+n6+8rjNg8drtW7q+0KH/ZKQxCkng66Q0G9v9OjUxVuRdp8fba1THDKsbJGN/7Pt3XNjOIhq/HPb139e2nLBKcy7I4hny8AAAAAAAAAAAAAAACkHjueAQAAAAAAAAAAAACAEWH8NWNMlzDifPnWTNMlpB1CG1PPMpa/28BodM89PTdZ8/l8CgaDpstKe08//XSP158MegSAdOSaWKzHv3Cm34F3hc5SPf6FMyqe3vdmmqFIQM81LpLX51EkGu7XPbIyXVowoyLmuV3NZf3uL1GRaLjXoMAl+dtktya+mWRXd1QNJ7ar6kBur4GGH++7/M63lT2+QKtuq9OS/G39qrt4erk23H2yX/UBAAAAAHBZ9vgCrZ9/rN+Bd4XOUq2/qzWh59hdzWXa8dYChSL9W6+2WmxafOuWmOfqjm9SR6d/UOakqzuqHzYt63Xc2eML+tVfY7tXT7w2uddAw8suP+O7JhbL4/ZqRUFNv+5T6CzV+vnH5Jo4dKEcAAAAwFC7rjD2dzYu+t8c9HtfM6NYN/7Pt+VYWSPLhL6D3CNtPrV9J1fv7/ToUmRwfr+Z7j481az3/nmOgjvLFD0f6LOtNcet7PUHdcNK75CEAPYWaJk5a4GRuQIAAAAAAAAAAAAAAEBqEUAIAAAAAAAAAAAAAABGBId9rOkSRpzl7utMl5B2CG1MLXf2ONMlADCkoKBATmfPDc4+GZ6H/mloaFAg0HOTs69+9aumywKAlLBbHVp1W51WFNTIbu17g0yn3a31d7XK4/bKbnVoSf5WfevzvrjXNQVqVXUwT43t3n7Vdm/uhl77funoqkGZj976tVudujPnkYT76ej0q/qNOdrTsqbPdpfntHj6ao3NsFw5Xjx9tR69/WDccEin3a1vfd6nJflbe1wPAAAAAEB/WS02edxefaNon5x2d59t7VanHr39oDxur7IyXSqevlrr72qNe92xjno98dpkNZzYrq7uaMK1FWV7eu37x0cGZ43gjbZnFIrEDr9YNmtHwv2EIkHteGuBdjWXxZ3TWM/4Rdkerb+rNW44pNPu1jeK9snj9spqsQ3KnAAAAADDwRirTZmzrv4dWqTNp+5Q/wLP+8MyyaUbVnqVvf6grDl9P/tEzwd0unqR3ttcqOhZv+kpG/66owof9urUP+bp3J5NcZvb55Zq+r+e0YTFG6VB/B3pX37/y5jHM92LjU0VAAAAAAAAAAAAAAAAUmfMpUuXLpkuAgAAAAAAAAAAAAAAIBXG/De/6RJGDNdEi1o35JguIy3xOUyd0s/a5C1zmC4DgCHbt2/XmjV/DTxyOp1qb2/vdz9jxowxPZSUG8hXP9euXavq6uorr0tKSlRXV2d6KACGUEenX1UHcq86vv6uVmVlukyXl1KRaFhnO/+oQKhZZ/98TDnX36bJ9lmacE1OrwF3Xd1Rvdpaqbrj8TeDzMsqUel/BhgmoiW4X881Lop57luf9yl7fEHKxt5+oVlP/ir2ZqGP3n5QronFcfvo6o7qjbZn4gYPStKS/G26M+eRhIIDOzr9OhM6qrYP3tKk6/J006fm9fmepDOvz6OmQO1Vx6u+xD/fAAAAAGBeb2sEKwpqVJTtMV1eSnV1R3X+Ypve/dMh/fnDDl03Lks3fWqe7OMcvQbcdXVH5Tv9QtywPemjwLyvF+1OeG2lt7mXpG8U7VO+Y2HKxh6KBPXEa5NjnuvPe93Y7k1oLhbMqNC9uRsSes4PRYJqO/+mznb+8cp7whoBAAAAhpr/7819n+SaGcXKXn/wquPn9mzS+b2bU36/MVabrv/SOk1cUpFQ+7O1a3Thl89I/QhdT0aG3aFxU26RZdJNkqTIqWZFg3/UpUh4SO4/GCyTXPrUA5Wyzy2N2zZ6PqBzL65T+LB3UGq5cWNTzMBJ/yPjhuw9jmVqZavG3eAydn8AAAAAAAAAAAAAAICRYOR9Cx8AAAAAAAAAAAAAAIxaJTdfq/o//MV0GSPCPNc1pktIW66JFvnPmduUZSThcwiMbl/96ld7BBAGAgE1NDSouDh+cBJ6CofDPcIHJemxxx4zXRYADBqrxabs8QX9CvYbm2FRyYyN+tyNf6fnG5cqEPL12vZYR72eeG2yVhTUyD1ledzN8fMdC1XoLI252fyu5of02LymlIy7qzuqXc0PxTxX6CxNKHywo9Mfd/xS/0MYJSkr06WsTFdKwxQAAAAAAOjL2AzLlefR/lxTlO3RzZMWqNbn0bGO+l7bBkI+VR3I1ZL8bboz55G4awRZmS4VTy9Xw4nqq869eORhbbj7ZMpC+Pa0rI153Gl3yz1ledzrQ5Fg3PFf7q8/IYySZLc6WB8AAADAqHbtzPtiHv/LOz9P7Y0yLLLdtlwTv7JFlgnOuM1Dh2t19t9WDUnw3xirTRMfqNT195X32mawg/kGU/SsX+/v9OjCqz+Q45GX+px/ywSnHCtrNOH+9Qo++5A+PNWc0lrC/+/HMQMIx2XPTPm9AAAAAAAAAAAAAAAAMLQyTBcAAAAAAAAAAAAAAACQKg7bWNMljBiLZ2aaLiFtEZqXOlmZfL0JGM0cDofc7p6bX33zm980XVZa2rJly1XH7rnnHtNlAcCwlJXpUvmdb2tJ/ra4bXc1l6n6jTnq6PTHbbskf2vM44GQT43tqdkw03f6hV6DA++/ubLPa7u6o2o4sV1VB3Ljhg+uKKjRqtvq+hU+CAAAAABAurFbHVp1W51WFNTEbbunZY0qX5+m9gvxgxvuz6uU3Xp18EQoEtCrrZVxr0+E/1yDmgK1Mc+tKPhR3JDDxnavnnhtctzwwSX521R+59v9Ch8EAAAAINk+92DM4xdbf52ye1wzo1g3/s+35VhZEzd8MNLm06kKt97f6RmS8MFxUws09bvH+gwflP4azDflW3XKsKfn7yYvHm9Q2/ppCu4si9vWmuPW1E0+3bDSqzFWW8pq6C3Y8tpb+O4QAAAAAAAAAAAAAABAurMk3wUAAAAAAAAAAAAAAMDwMM91jWp/M/ibn4x0lgyptMhuuoy09Y3b7PI28jlMhYJsq+kSABj21FNPaf78+Vde+3w+NTQ0qLi4OOE+Wltbez33b//2b9q0aVO/anI6nfrZz36m8ePHm56ehITD4avGWFFRIZstdRuVAcBIMzbDouLpqzXTsVg/PrKqz832AyGfqg7kakn+Nt2Z80ivG/jbrQ4tyd+mPS1rrjq393frNNuxVFbLwP/bHImGtas59qaVC2ZU9BkE0NHp1/ONS+MGD+ZllajU7SV4EAAAAAAwqhRlezTbsVQvHV3Va6if9FGA4JO/cqt4erkW3bKl1zUCq8Wmr8x+Vs81LrrqXN3xTfrcjX+XVKBfV3dUP2xaFvNcobNU2eML+hhDULU+T9zgQafdra8X7SZ4EAAAABiAMVabrDnuq453Hq2XuqNJ959hdyhrxVbZ55bGbRs9H9C5F9cpfNg7ZOPP+urWuMGDn5Q5q0TT//WM2qvm6+LxhiGrNWW6owof9urPv9mtiQ9Uxh2/fW6p7HNLdbZ2jS788pmkPxeRk7+Jefy6wqW68Op207MDAAAAAAAAAAAAAACAJBBACAAAAAAAAAAAAAAARoxPZ/FViFSYOXmc6RLSWsktmbJkSNFu05WkP+f4saZLAGBYcXGx3G63fL6/BiL94Ac/6FcAocvl6vXcAw880K8AQqfTKZ/PJ4cjfYKXdu/efdWxdevWmS4LANJCVqZLq26rU2O7t9dwv8v2tKzR4bYdWlHwo1438r8z5xH94o/fVSgS6HE8FAnolWMbtCR/64BrfenoqpjH7Van7s3dEPNcV3dUb7Q9EzMU8ZNWFNSoKNuT0vkFAAAAACBdWC02edxefS77Ib145OGrnu0/ruFEtZoCL+hrhS/JNTH2Wna+Y6HyskpiBv39+MgqrbqtbsC1vtH2TK/1LZu1o9frEln/kKQl+dt0Z84jvQYsAgAAAOjbtbfcE/P4n5t297OnT8iwaMLCDZq4pCKh5uf2bNL5/ZUpCT1MlG2up9/hgx+Xvf6gTnx7srpDwSGrOZUuRcLq+Pe1+qD++5r0tR3KnFXSZ/tJpds0YeE/6uzzD6vzt/uTum/n0fqr7pc5q0RjrDZdioRNTw0AAAAAAAAAAAAAAAAGKMN0AQAAAAAAAAAAAAAAAKkyawrBealwz6evNV1C2iPEMTUcdgIIAUjr16/v8bq2tlYNDQ0p6bugoCDhtukYPhgOh1VW1nPD6NLSUtlsNtOlAUBaKcr26PEvnFGhs7TPdoGQT0/+yq09LWvVFWOjzrEZFq2c87OY1zacqFZHp39A9XV0+tUUqI157iuzn40ZCNDR6Vf1G3Pihg/mZZXo8S+cIXwQAAAAAAB9FBy4fv6xuGsEoUhAT785X16fR5Fo7CCHB2fHDgM81lGvluDAgiVCkWCvz/orCmpktdhiXrPjrQVxwweddrfW39Wq4umrCR8EAAAAkpA5+8sxj3f69g64T9tcj3KqTiYUPhg6XKsT356s83s3D2n4YIbdIcfKmqT7caz0DlnNgyV61q/TTy5Qe9V8Rc8H+mxrmeDUlPJ9unFjkyyTXAO+Z28Bl9ZpnzU9HQAAAAAAAAAAAAAAAEgCAYQAAAAAAAAAAAAAAGDEyJnARoepsHT2daZLSHuEOCav5GbmEMBHli9fLqfT2ePYsmXLFI2mZhO08vLyuG3SMXxQklatWnXVscrKStNlAUBaslsd8ri9+kbRPtmtzj7bNpyoVuXr09R+ofmqc9njC3oNKXi+cemAauvturysEuU7FvY41tUd1Z6Wtao6kKtAyNdnvysKarTqtjrZren18w8AAAAAgMFktdjkcXv1rc/74q4RNAVqVXUwL2agYFamSwtmxA4HefHIw+oaQBDInpa1MY877W65pyzvcayrO6qGE9v1xGuTdayjvs9+l+RvU/mdbysr0zWYUwsAAACMCtfdtjzm8ehZf7/7Gje1QDdubJJjZY0sE/p+Pom0+XSqwq33d3rUHQoO+bhTFRyYOatEtrmeIa9/MFw83qC29dN0tnZN3LbWHLdyvteqG1Z6NcZqS6D3nv7y+1/GPH7tzPtMTwMAAAAAAAAAAAAAAACSQAAhAAAAAAAAAAAAAAAYMSxjx8idPc50GWnNNm6MSm7JNF1G2lt1x3jTJaS9u3IJIATwEYvFomeffbbHsUAgoGeeeSYl/X/5y1/u83y6hg82Nzertra2x7Hy8nK5XC7TpQFAWst3LNT6+cd6DRG8LBQJ6MlfueX1eRSJhnucWzZrR8xrAiGfGtv7t/FmY7u31yDBB2f3vE/7hWZVvj5NDSeq++wzL6tEj3/hjIqyR8bGnQAAAAAADIbs8QXacPdJFU8v77NdKBLQc42L5PV5FIr0DPm4N3dDzBDDUCSgV1sr+1WP/1yDmgK1Mc+tKPiRxmZYrrzu6PSr+o052tPSd8iF0+7W+rtaVTx9dY/rAQAAAAxMht0RMygwdLi23/3csNKrqZt8sua4+2wbPR9QcGeZ3vvnOfrwVLORcVsmuZQ5qyRl/U38yhYj4xgU3VFdeHW73l1tT+hzYJ9bqpu2hz4KYezHc9qH7e/EPD7+nkdNzwAAAAAAAAAAAAAAAACSQAAhAAAAAAAAAAAAAAAYUb7waULLkvHZqVbTJYwI7hutso0bY7qMtHZbDp9FAH+1cOFClZT03IhszZo1CgaDA+zxr+65555ez6Vr+GA0GtVDDz101VgqK/u3YTUAIDarxSaP26tHbz8YMyTg45oCtao6mKeW4P4e168oqInZfu/v1l0VWNibSDSsvb9bF/PcghkVysp0SZK6uqPa07JWT/7KrVAk0GefKwpqtOq2Otmt6fWzDwAAAAAAE8ZmWLQkf6vW39Uqp73v0I+mQK2eeG2yGtu9Pa7/yuxnY7avO75JHZ3+hOro6o7qh03LYp4rdJYqe3zBlXYNJ7ar6kCuAiFfn30uyd+m8jvfvrK+AAAAACB517huj3k8/MaPEusgw6IJizdq+r+ekX1uadzm5/Zs0ql/zFP4sFfqjpob94x5Ke3PMsGpMVabsfEMhkuRsN7f6VHbd3IVafPFbe9YWaOcqpO6ZkZxYjfojsYMOLRMcCrDzu+GAQAAAAAAAAAAAAAA0hUBhAAAAAAAAAAAAAAAYES5Y/o1pktIa/flEeCYKoQ5JmfWlHGmSwAwzOzYseOqYyUlJYpGk9sgzWazye2+emPodA0flKR169bJ5+u5GdmWLVtks42szdcAwDTXxGJtuPukiqeX99kuFAnoucZF8vo8V8IF3VOWxwwmCEUCeuXYhoTu/8qxDTEDBe1Wp+7N/aiP9gvNqnx9mhpOVPfZV15WiR7/whkVZXtMTysAAAAAAGknK9Ol8jvf1pL8bXHb7mou0463FigUCUqS8h0LVeiMHRzy4yOrErr/G23PxFwjkKRlsz5aW+/o9Kv6jTna07Kmz76cdrfW39Wq4umrNTbDYmxOAQAAgJHIdudDMY9f9L8Z99rMzyxUTtVJTVxSEbdt6HCt2r6Tq/N7N+tSJGx62Lom946U92lxfNr0sAZF9Kxf720u1OnqRYqeD/TZ1jLBqez1BzXlW3WyTHLF7bvTtzfm8d6CMQEAAAAAAAAAAAAAADD8EUAIAAAAAAAAAAAAAABGlHkuAgiT8WABwUSpQphjclxZBBAC6Mnlcqmioucmaj6fT+vWrUu671Wrem7inM7hg/v371d1dc+QKbfbLY+HQCkAGAxjMyxakr9V3/q8L2ag4Mc1BWr1+C/samz3amyGRSsKfhSzXcOJanV0+vvsq6PT32uo4FdmPytJ2tOyVk/+yt1rAMFlKwpqtOq2Otmt6fdzDwAAAACA4WJshkXF01dr/V2tcdcIjnXU64nXJqvhxHZ1dUe1JH9rr+1agvv77CsUCfYaKriioEZjM65Rw4ntqjqQq0DI12dfS/K3qfzOt5WV6TI9nQAAAMCIZJ97dfh49HxA3aFgr9dYJrl048YmTSnfJ8sEZ5/9R9p8aq+ar/d3ehQ96zc93CuuvfULKe/TOrXA9LAGVedv96tt/TSdrV0Tt23mrBLlfK9VWV/dqjHW3r8DfPH4odjXz/6y6eECAAAAAAAAAAAAAABggAggBAAAAAAAAAAAAAAAI0rOBIvpEtKWw5Yh941W02WMGI9+frzpEtJWyc2ENwKIbcOGDXK7e27cXF1drf379w+wx4/cc889V/53OocPBoNBLVq06Krj9fX1pksDgBEve3yByu98W0vyt8Vtu6u5TDveWqDx1zhVPL08ZpvnG5eq/UKzGtu98vo8euK1bHl9HjWc2K72C816vnFpzOvysko04dppqnx9Wq8BhR9v+/gXzqgom5BaAAAAAABSJSvTpcfmNWlFQU3ctnta1qj6jTmKdIV7XVN48cjD6uj0q7Hdqz0ta/X9Q4Xa8dYCNZzYLv+5Bu1pWRvzOqfdLae9QNVvzOk1oPDjbdff1ari6as1NoPftwMAAACDwTLJFfP4hV8+HfP4GKtNN6z0Kud7rbLm9B1yLknBnWV675/n6OLxBtNDvUoi9fdXhi3L9LAGX3dUF17drhPfnqzQ4dq4za+/r1w3bQ/JNtcjxXi26y2U8vr7ygUAAAAAAAAAAAAAAID0xL8AAAAAAAAAAAAAAAAAI4pl7Bi5s8fJ1/6h6VLSzu3TrjFdwojivN4ihy1DwXC36VLSzl25BBACiM1isai+vl6TJ0/ucXzRokU6ePCgiouLB9TvzJkzJaV/+OAnwxklad++fWk5HgBIR2MzLCqevlozHYv1fONSBUK+Xtse66jXE69N1oIZFTHPB0I+Pfmrnv9dbwrUqinQ98aSociZq66LZUVBDcGDAAAAAAAMoqJsj26etEC1Po+OddT32i4Q8qnqQG6vawShSEBVB3KvOt5Xn5clskawJH+b7sx5hOBBAAAAYJBdM2NezON/eefnPQ9kWDT+nkc0qXRbAr1KH/y8Wude3qBLkbDpIfYqdLhW9rmlKe0zcqLR9LCGTHcoqPd3enT+J9+T4+EfxQ10dKys0YT71+tszTevCqT84OfVMQMHLZNcvQYUAgAAAAAAAAAAAAAAYPjKMF0AAAAAAAAAAAAAAABAqj1YYDNdQlr68q2ZpksYcQh1HJj78gggBNA7h8Ohffv2XXV82bJlCgaDA+rTYrGovLw8bcMHo9GoPB6PAoFAj+Pl5eVauHCh6fIAYNTJynSp/M63taKgJm7buuObUnrvvkIPJSkvq0SPf+EM4YMAAAAAAAwBu9WhVbfVaUVBjexWZ59th3qNwGl3a/1drSqevprwQQAAAGAIZLoXxzweOfmbv7b5zELlVJ1MKHyw82i92r6Tq45/Xzuswwcl6eLxQynv88PTvzc9rCH34almvbe5UMGdZYqeD/TZ1prjVvb6g7phpVeWSa4rxzuP/DRm+94+nwAAAAAAAAAAAAAAABjeCCAEAAAAAAAAAAAAAAAjDuFlA7PcfZ3pEkYcQh0H5rNTraZLADDMLVy4UBUVFT2OBQIBud3uAYcQbt26NW3DB//mb/5G9fX1PY6XlJRoy5YtpssDgFFrbIZFRdkePf6FM8rLKjFdjiRpRUGNVt1WJ7s1/X7eAQAAAACQzoqyPVo//5gKnaWmS5EkLcnfpvI731ZWpst0KQAAAMDokGGRfe7VzwOdR+t1KRKWZZJLN25s0pTyfbJM6Du8PHo+oPaq+Tr95AJFz/pNjywhf/n9L1PeZ3doYN8PGgnCh71qWz9N5/bED7K3zy1VzvdaNWHxRo2x2nTR/2bMdtcVLjU9LAAAAAAAAAAAAAAAAAwAAYQAAAAAAAAAAAAAAGDEIbys/1wTLXJebzFdxohTPv960yWkHXf2ONmsfK0JQHwbN25UaWnPzdmSDSFMN72FDzqdTv3kJz+RxcLPdgAwzW51aNVtdVpRUGOshkJnqZ74YkhF2R7T0wEAAAAAwKhltdjkcXv1jaJ9sludyXc4AHlZJVp/V6uKp6/W2AzWjwEAAIChMi57ZszjH7Yf1Q0rvcr5XqusOe64/ZytXaO29dN08XiD6SH1SzT4R0XPB1LW3wc/rzY9JPO6ozq/d7NOfHuyQodr4zafuKRCU797TJmzFsQ8nzmrROI5EQAAAAAAAAAAAAAAIO2wUxcAAAAAAAAAAAAAABhxbNYMubPHmS4jrcxzXWO6hBHLNZFNWfrjwQKb6RIApJF/+7d/U0lJSY9jl0MIm5ubTZc3qILBYK/hgz6fj/BBABhmirI9euKLIRU6S5PvLEF2q1PfKNonj9srq4X/nw0AAAAAwHCQ71ioDXefVPH08iG974qCGq26rU5ZmS7TUwAAAACMOtfeck/M49ffVy773Pi/PwwdrtW7q+268Op2qTtqejj9dikS1tnnH05JX9HzAZ17eYPpIQ0b3aGg3t/pUXvVfEXafH22tUxwyrGyptfzvQVlAgAAAAAAAAAAAAAAYPgigBAAAAAAAAAAAAAAAIxIq+4Yb7qEtPKN2+ymSxixFs/MNF1CWnngM9eZLgFAGrFYLPrJT37SawhhQ0OD6RIHRTAYlNvt7jV80OFwmC4RABCD1WKTx+3VN4r2yW51Duq9Cp2lWj//mPIdC00PGwAAAAAAfMLYDIuW5G/Vtz7vG/Q1grysEj3+hTMqyvaYHjYAAAAwal1XuHRA10XafGr7Tq7e3+nRpUjY9DCS0vnb/Qodrk26n7PPP5z2czEYLh5v0Hv/PEfBnWWKng8MqI/rih4wPQwAAAAAAAAAAAAAAAD0EwGEAAAAAAAAAAAAAABgRLrn09eaLiFtWDKkklsIyRssS2cTqNcfMyePM10CgDTTWwihJM2fP1+bN29WNBo1XWbK7N+/X5MnT1Yg0HOzMMIHASB95DsWav38YyqeXj4o/X+jaJ88bq+sFpvpoQIAAAAAgD5kjy/QhrtPasGMikHpf0VBjVbdVie7lXVjAAAAwJgMizJnlfTrkuj5gE5XL9J7mwsVPes3PYKUOftvqwYcjidJocO16vztftPDGL66owof9urUP+bp3J5N/b7c9rkHTY8AAAAAAAAAAAAAAAAA/UQAIQAAAAAAAAAAAAAAGJEKsq2mS0gbBL4NrpJbMmXhWzoJKf2sTZaxY0yXASAN9RVCuGnTJv3N3/yNgsGg6TKTEo1GtXbtWi1atOiqc4QPAkD6sVpsWpK/VU67O+V93zzpS6aHBwAAAAAAEjQ2w6KSGRtV6CxNed83fWqe6eEBAAAAo941uXf0q/3Z2jVqWz9tRAbtXYqEdeof8xQ6XNvva4M7y/T+To/pIaSFS5Gwzu/drLbv5PZrrq05bo2x2kyXDwAAAAAAAAAAAAAAgH5gazMAAAAAAAAAAAAAADBilRePN11CWrjn09eaLmHEI+QxMQ99js1rAAycxWJRXV2dKioqrjpXX18vt9str9druswBaW5u1pw5c1RdXX3VuZKSEp08eZLwQQBIU4GQL+V9nr/YZnpYAAAAAACgn453vJryPj/4yynTwwIAAABGvWtn3pdQu9DhWp349mRdeHW71B01XfaguRQJ6/2dHp2uXqTo+UDc9pE2n9q+k6vw4fT8zo9J0bN+vb/To/aq+QnNtSRde8s9pssGAAAAAAAAAAAAAABAPxBACAAAAAAAAAAAAAAARqzlhYSZJWLVHQQ1DrYHPnOd6RLSwj0zCMMEkLyNGzdq3759Vx0PBAIqKytTYWGh/H6/6TITEg6H5fF45Ha75fNdHVBVUVGhn/zkJ7JYLKZLBQAMQEenf1D6PRM6anpoAAAAAACgHyLRsEKRxMIg+uPcX941PTQAAABg1LN97sGE2tnnliprxVbZ5npkmeQyXfag6/ztfp36xzydqnDrbO0ahQ7XSvoocPCDn1cruLNMbd/J1Xv/PEfRs37T5aafDIuumVGsCYs3alLZU7JMcCZ0WebsL5uuHAAAAAAAAAAAAAAAAP3AjjMAAAAAAAAAAAAAAGDE+uxUq+kShj3buDFy38g8DbYHC2zaXH/edBnDmjt7nGzWDNNlABghFi5cqDNnzqikpOSq4D6fz6fc3FyVlpaqsrJSLpfLdLlXCYfD2rJlizZt2hTzvNPp1EsvvaTi4mLTpQIAAAAAAAAAhqk/f9hhugQAAABgVBtjtcma4064vX1uqexzS6+8/uDn1eo88lNd9L+p7lDQ9HBS7lIkrA9PNevDU8268Op2vb/TY7qktDZuaoGuveUeXVe4VJmzSgbUx3W3LVfHv681PRQAAAAAAAAAAAAAAAAkiB27AAAAAAAAAAAAAADAiGWzZqjk5mtNlzGsEdI4NNw3WmUbN8Z0GcPaqjvGmy4BwAjjcDj09ttvq7y8POb52tpa5ebmyuPxyO/3my5X0kfBg5s3b5bdbu81fPByqCLhgwCQ/rIyXYPS72T7LNNDAwAAAAAA/WC12GS3OlPe79TxRaaHBgAAAIxq1mmfTer66+8r15TyfZr+r2eU8y/tmrB4o66ZUawxVpvpoWEYsExyyTbXoxtWeuX635c0dZNPk0q3DTh8UJIsE5zKsDtMDw0AAAAAAAAAAAAAAAAJIoAQAAAAAAAAAAAAAACMaI/ddb3pEoa1+/IIaBwqhD327auFbIoEIPUsFou2bt2q1tZWud3umG0uBxEuWLBA+/fvVzgcHtIao9GoGhoatHbt2j6DB51Op/bt26e6ujo5HGz0BSB1LkYvmC5hVMvLGvjmj70ZrGBDJC4cCZouAQAAAAD67c8fdpguYVQrdC5PeZ83jv+s6WGNeqwRAAAAjG4Xjzfo3dV2tVfN17k9mxQ9HxhwX5YJTk1cUqHs9Qd10/aQbtzYpAmLN2rc1AIpw2J6qBgCGXaHMj+zUFlf3aqcf2lXzvda5VhZI/vc0qT6jbT5dG7PJp2qcMv/yDh1h3iOAQAAAAAAAAAAAAAASBd8cwgAAAAAAAAAAAAAAIxoX7ol03QJw9qjnx9vuoRRY3mhTQ3+i6bLGJZKbr5WDvtY02UAGMFcLpeamprk9XpVVlYWs019fb3q6+slSeXl5fryl7+s22+/fVDC/sLhsH7zm9/o5z//uZ5++mkFAn1vMFdeXq4tW7bIYuFrnwBS78lfubUkf5vuzHlEY9mYcsjlTrxLxzrqU9bfYAQaInEdnX4937hUgZDPdCkAAAAA0G97Wtao88MO3X3TOlktNtPljDrTJtyR0v7sVifvo0EdnX698ocNKV33AQAAQHq6FAnr4vEGXTzeoPN7NyvD7tA1rtuVOfvLuu625bJMcA6oX2uOW9YctyYuqZAkdR6t15+bdqvTt1fRs37Tw0YKjLHaZJ32WV078z7ZPvegrDnulPQbPR/QhV8+rb+883NFTv5GlyJh00MFAAAAAAAAAAAAAADAAI25dOnSJdNFAAAAAAAAAAAAAAAADKa1/3FW1Q0XTJcx7DhsGTrzT9NNlzFqBD6IKvuJNtNlDEv7/utkLZx5nekyAIwS4XBYu3fv1rp16+IG/0mS2+3Wgw8+qLy8PM2bN08Oh0M2W+KbNkejUbW1teno0aP64x//qN27d18JOoynoqJCjz766KCEIAIYfTo6/ao6kNvrebvVqa/Mflb5joWmSx1V2i8068lfpWajSElaUVCjomyP6WGNOpFoWC8dXaWmQG2f7aq+xD/fAAAAAGBeImsEi2/dIveU5RqbYTFd7qgRiYb1+C/sKetvwYwKlczYaHpYo04kGtbr725R3fFNfbZjjQAAAMA8/9+PMV2CJMkyyaVrZsxTpnux7HNLU9Zv6HCtOn171Xm0Tt2hoOlhIhEZFo3Lnqlrb7lH4+9aldLAwT+/9YI6j/xUF/1vDpvPw9TKVo27wWW6DAAAAAAAAAAAAAAAgLRGACEAAAAAAAAAAAAAABjxGlr/ovlPxQ8YGm0W5mdq38NTTJcxqkz+pxMKhrtNlzHshL47XTZrhukyAIwy0WhUL7zwQsJBhJ9UUlISNxiwtrY2wd56qqio0Lp16/oVdAgA8cQLF7jMaXfr60W7lZXpMl3yqLGnZa0aTlQn3U9eVolW3VZnejijSld3VG+0PaM9LWsSak+4AAAAAIDhoD9rBA/MfEquicWmSx41Gtu92tVclnQ/dqtTG+4+SYDkEOrqjsp3+gXt/d06hSLxf+fAGgEAAIB5wyWA8JMsk1zKdC/WdYVLlTmrJCV9Xg6g+9O+fx424XPDwRirTRbHp2WdWqBM92Jde+u96r5wRn/53Wu62PprXTx+SNFzbVJ3dFDruGZGsT71t/+Usvdb+msA5cXjhxQ96x/kmRwYAggBAAAAAAAAAAAAAACSRwAhAAAAAAAAAAAAAAAY8aJdlzTtu20KXOgyXcqwsnVplsrnX2+6jFFl0bOntb+l03QZw0rpZ23yljmS7wgAktDQ0KAXXnhB1dXJhz8NVElJiR577DF96UtfksXCptAAUq+rO6p9v1+XcNBdobNUy2btkNVCGOpg6+qOqvqNOQqEfEn18/gXzshu5f9bD5WW4H69eOThhEIF7Fanvlb4EqEdAAAAAIaFru6oXm2tVN3xTQm1L3SW6v6bK5WV6TJd+qjg9XnUFKhNqo/1d7Xyfg0h/7kGvfzONxNa27FbnVp86xYVZXtMlw0AADDqDdcAwh4yLBqXPVPX3nKPxt+1StYc94C6iZ4PKPjMMl083mB6RMOGba5HjpU1cdtF2nw684Olgxvil2HR+Hse0aTSbQPuovNovf7ctFt/+f0v9eGp5sGrNYUIIAQAAAAAAAAAAAAAAEgeAYQAAAAAAAAAAAAAAGBU2Fz3J2362Z9MlzGsXPoXl+kSRp3axpA83vdNlzGsHPymU8W515ouAwAkSdFoVD/72c/005/+VC+88IICgfiBQskoLS3V4sWLtXTpUtlsBHwBGBodnX79+MgqHeuoT6j9kvxtujPnEY3NIBx1MHV0+lV1IHfA13+jaJ/yHQtND2NU6Oj06/nGpQkHRq4oqJF7ynL+DgEAAAAYdkKRoPa0rE047G7BjArdfdM6WS2sZQ6mSDSsqoN5CQXex7Ikf5uKp682PYxRoaPTr1f+sKFff4fuzd3AGgEAAMAwkRYBhJ8wxmqTddpnde3M+2T73IMJBRIGd5Yp/NYLUnfUdPnDQobdIcdKrzJnlfTruuDOMoUPewe1tjFWmyb93Q7Z55bGbRtp8+nCgR0fBQ62v5OW7y8BhAAAAAAAAAAAAAAAAMkjgBAAAAAAAAAAAAAAAIwKwVCXJlecNF3GsOGaaFHrhhzTZYxKY/6b33QJw4Zz/Fi1b5xmugwA6FUwGNSbb76pn/70pzp69Kjq6xML64rF7XZr9uzZWrx4sebNmyeXy2V6eABGOf+5Bv2waVlCm9nbrU59ZfazBNwNslAkqFqfJ+FwSEly2t36etFuZWW6TJc/4kWiYb10dFXCoQLF08t1f14lwRwAAAAAhr32C83a1fxQQkHrdqtTi2/dQtD6IOvqjmrf79ep4UR1wtfYrU6tnPMzZY8vMF3+iBeJhvX6u1tUd3xTQu0LnaVakr9VdqvDdOkAAAD4mHQMIPykDLtD17huV+bsL+u625bLMsF55VzocK3O/tsqXYqETZc5bGTYHZr+r2cGfH3ocK3e3+kZ9Dotk1ya/A+7ewRMRtp8Cv+/H+sv7/xckZO/GRHvKwGEAAAAAAAAAAAAAAAAySOAEAAAAAAAAAAAAAAAjBoL/ndA9X/4i+kyhgVPkU01HjY4NCG3sk3+c1HTZQwL2/5LllYXX2+6DADol3A4rGAwqAsXLqi5ubnXdjfddJOmTp0qm80mh4OfuQCGp67uqHynX9Cu5rKE2hN2NzQa270JvSfF08u16JYtBD4Msq7uqN5oe0Z7WtYk1D4vq0QPzt7B3xMAAAAAaaex3au9v1unUCQQt63T7tYDM5+Sa2Kx6bJHtPYLzdr59pfivieFzlItm7VDVovNdMkj2uW1tP78PVlR8CNCIQEAAIapkRBA+EkZdocyZy1Q5FSzPjzVnHyHI8yUb9Upc1ZJUn2crl6kzt/uH5J6r5lRrIzMCbrof1PdoeCQ3HMoEUAIAAAAAAAAAAAAAACQPAIIAQAAAAAAAAAAAADAqNHQ+hfNfyr+RoCjQd2qKSq5JdN0GaPSmpfPavuhC6bLGBZC350umzXDdBkAAACjXiQa1ivHNqjhRHVC7dnUfvB1dUd1/mKb3v3TIZ08/2udDh2VzerQTMdiOe0FmpT5aeZ/CLQE9+vFIw8nFCpgtzr1tcKXCN8AAAAAkNa6uqN6tbVSdcc3JdS+0FmqJflbZbc6TJc+onV0+nUmdFRtH7yl1nMHZLM6dNOn5unTE+9hjWCItF9o1q7mhxQI+eK2tVudWnzrFhVle0yXDQAAgD6MxABC9M421yPHypqk+4meD+jUP+bpUiRsekhpjwBCAAAAAAAAAAAAAACA5BFACAAAAAAAAAAAAAAARo1o1yVN+26bAhe6TJdilCVD+rDKZbqMUav+951asOO06TKMK/2sTd4yNqMFAAAYTjo6/frxkVU61lGfUPsVBTVyT1musRkW06UDKcXfBQAAAACjXSgS1J6WtWoK1CbUfsGMCt2bu4HnIow4/F0AAAAYuQggHD0y7A5N/9czKesvdLhW7+8kcDxZBBACAAAAAAAAAAAAAAAkjwBCAAAAAAAAAAAAAAAwqnj/X0hlte+bLsOoAuc4+dZNNV3GqDZuvV/RbtNVmNX6nalyZY0zXQYAAABi8J9r0A+blikUCcRta7c69bXCl+SaWGy6bCBpkWhYrxzboIYT1Qm1L55ervvzKmW12EyXDgAAAACDov1Cs3Y1P6RAyBe3rd3q1OJbt6gomxAGpL+u7qheba1U3fFNCbUvdJZqSf5W2a0O06UDAAAgQQQQjh62uR45VtaktE8+P8kjgBAAAAAAAAAAAAAAACB5GaYLAAAAAAAAAAAAAAAAGEpLP3Od6RKMu+fT15ouYdSbOXl0B++5s8cRPggAADCMuSYWa8PdJ7WiIP4mjKFIQE+/OV873lqgjk6/6dKBAenqjqqx3avHf2FPKHwwL6tE6+9q1ZL8rYQPAgAAABjRsscX6LF5TVpRUCO71dln21AkoF3NZfr+oUK1X2g2XTowYI3tXlW+Pi2h8EGn3a1vfd4nj9tL+CAAAAAwTF2Te0fK+7RMcpkeFgAAAAAAAAAAAAAAAEAAIQAAAAAAAAAAAAAAGF1s1gxVfOlTpsswatUd402XMOo9MMqDMJ96YJLpEgAAABDH2AyLirI9euKLIRVPL4/b/lhHvaoO5GpPy1pFomHT5QMJ859rUOXr07SruSxuW7vVqUdvP6hVt9UpK9NlunQAAAAAGDJF2R5tuPukFsyoiNs2EPLpyV+55fV5FIoETZcOJKz9QrO+f6hQu5rLFIoE+mxrtzq1oqBGj81rUvb4AtOlAwAAAOjDtbd+IeV9jsueZXpYAAAAAAAAAAAAAAAAgMZcunTpkukiAAAAAAAAAAAAAAAAhlI40i37P54wXYYRtnFjFKq8yXQZo57vvYgKv/+e6TKMcGePU9O3p5ouAwAAAP3U0enXj4+s0rGO+oTaryiokXvKco3NsJguHYiJzzQAAAAADEwoEtSelrVqCtQm1H7BjArdm7uB5ykMW3ymAQAARif/348xXQKGiOt/p36LtXN7Nun83s2mh5bWpla2atwNLtNlAAAAAAAAAAAAAAAApLUM0wUAAAAAAAAAAAAAAAAMNZs1QxVf+pTpMoz47FSr6RIgyX2jVbZxo3MDo6cemGS6BAAAgFGpqzuqru7ogK/PynRp1W11evT2g7JbnXHb72ouU+Xr0+Q/12B66EAPkWhYe1rWqupAbkLhg8XTy/XEF0MqyvYkFSwQigRNDx0AAAAAJH20RhCJhgd8vd3qkMft1bc+75PT7o7bvu74JlW+Pk2N7V7TQwd66OqOqv74Zj3x2uSEwgcLnaV6/AtnVDJjI2sEAAAAwCjXHe4wXQIAAAAAAAAAAAAAAABAACEAAAAAAAAAAAAAABid1t1zvekSjLgv71rTJeA/jcYwSHf2OBXn8hkEAAAw4fzFNlW+Pk0twf1J9eOaWKwNd5/UioKauG1DkYCefnO+dry1QB2dftNTgFGuqzuqxnavHv+FXQ0nquO2z8sq0fq7WrUkf6usFtuA7xuJhuX1efTEa5NNTwEAAAAASPpojaDqYJ4a273q6o4OuJ/s8QV6bF6TVhTUyG519tk2FAloV3OZvn+oUO0Xmk1PAaDGdq8qX5+muuOb4rZ12t361ud98ri9slsdA75nJBq+EngIAAAAYOh0Hq1PeZ+RE42mhwUAAAAAAAAAAAAAAAAQQAgAAAAAAAAAAAAAAEYnmzVDFV/6lOkyhtyjnx9vugT8p+WFAw+wSFdPPTDJdAkAAACjWigS0HONi/T9Q4VJBQKOzbCoKNujJ74YUvH08rjtj3XUq+pArva0rFUkGjY9DRiF/OcaVPn6NO1qLovb1m516tHbD2rVbXXKynQN+J5d3VE1nNiux39hV1Og1vQUAAAAAEAPlwMBq9+YI/+5hqT6Ksr2aMPdJ7VgRkXctoGQT0/+yi2vz6NQJGh6GjAKtV9o1vcPFWpXc5lCkUCfbe1Wp1YU1OixeU3KHl8w4Ht2dUfV2O5V1cG8hAIPAQAAAKTWn5t2p7zPD0//3vSwAAAAAAAAAAAAAAAAAAIIAQAAAAAAAAAAAADA6LXunutNlzCkHLYMOa+3mC4D/2m5+zrTJQwpd/Y4Fedea7oMAAAA6KPN/qsO5Mrr8yQVCGi12LQkf6vW39WqvKySuO0bTlTr8V/Y1djuVVd31PQ0YBTo6PRrx1sL9PSb8+OGCkjSioIabbj7pFwTi5O6b0twvypfn6Y9LWtMTwEAAAAA9CkQ8unpN+fL6/Ooo9M/4H7GZlhUMmOjHv/CGRU6S+O2bwrU6onXJqv++GbWCDAkQpGgvD6PnvyVW4GQL277BTMqtOHukyrK9iR1X/+5BlW/MSehwEMAAAAAgyNyojGl/UXPB9QdCpoeFgAAAAAAAAAAAAAAAEAAIQAAAAAAAAAAAAAAGL1s1gxVfOlTpssYMrdPu8Z0CfgY5/UWOWyj5+s7Tz0wyXQJAAAA+ISmQK0e/4VdDSe2J7XZf1amS6tuq9Ojtx+U3eqM235Xc5kqX58m/7kG01OAESoSDWtPy1pVHcjVsY76uO2Lp5friS+GVJTt0dgMy4Dv29Hp1/cPFeq5xkWECgAAAABIK02BWlUdyFX98c2KRMMD7sdudcjj9upbn/fJaXfHbV93fJMqX5+mxnav6SnACNXVHVX98c164rXJagrUxm1f6CzV4184o5IZG5NeI/D6PHr6zfkJBR4CAAAAGDwXW3+t6PnU/e7u3IvrTA8JAAAAAAAAAAAAAAAAkEQAIQAAAAAAAAAAAAAAGOXW3XO96RKGzJdvzTRdAj5htIRCurPHqTj3WtNlAAAAoBd7Wtao8vVpagnuT6of18Ribbj7pFYU1MRtG4oE9PSb87XjrQXq6PSbngKMEF3dUTW2e/8zWLM6bvu8rBKtv6tVS/K3ymqxDfi+kWhYXp9HVQdyCRUAAAAAkNbqjm9S1cE8NbZ71dUdHXA/2eML9Ni8Jq0oqJHd6uyzbSgS0K7mMn3/UKHaLzSbngKMII3tXlW+Pk11xzfFbeu0u/Wtz/vkcXtltzoGfM9INKz645tVdSA3ocBDAAAAAEOgO6rA//p8SrrqPFqv8GGv6REBAAAAAAAAAAAAAAAAkqQxly5dumS6CAAAAAAAAAAAAAAAAJO2N3ygNf/RYbqMQXfpX1ymS8An1DaG5PG+b7qMQef79o0qyLaaLgMAAGBU6+j0q+pAbtx2TrtbXy/araxMV1L3i0TDeuXYhoRC4CSpeHq57s+rTCoEDqOb/1yDfti0TKFIIG5bu9WprxW+JNfE4qTu2dUd1Rttz2hPy5qE2ld9iX++AQAAAMC8/qwRPDDzqZQ8O73aWplQCJwkFTpLtSR/a1IhcBjd2i80a1fzQwqEfHHb2q1OLb51i4qyPUnds6s7Kt/pF7T3d+sSWptgjQAAAMA8/9+PMV0Chtj4e1drUum2pPo48e3J6g4FTQ9lRJha2apxN7hMlwEAAAAAAAAAAAAAAJDWCCAEAAAAAAAAAAAAAACjXrTrkqZ9t02BC12mSxk0rokWtW7IMV0GYhjz3/ymSxhUpZ+1yVvGBrEAAACmJRoucFmhs1TLZu1IOhCwo9OvHx9ZpWMd9Qm1X1FQI/eU5RqbYTE6X0gfpj5jLcH9evHIwwmFClxGuAAAAACA4WAgawT331yprExXUvcNRYLa07JWTYHahNovmFGhe3M3sEaAhJn6jPnPNejld76ZUODhZawRAAAAmEcA4SiUYdEN//XfZJ9bOqDL26vm6+LxBtOjGDEIIAQAAAAAAAAAAAAAAEgeAYQAAAAAAAAAAAAAAACS9r/zZy36P2dMlzFoPEU21XgIgRuOcivb5D8XNV3GoDmzaZoc9rGmywAAABj1+hsucNmS/G26M+eRlGzE/sOmZQmFtdmtTn2t8CW5JhYbmy8Mf5FoWK8c26CGE9UJtS+eXq778ypTEqr5fOPSfoUKXEa4AAAAAIDhYKBrBAtmVOjum9Yl/VzVfqFZu5ofSui5ym51avGtW1SU7TE2Xxj+urqjerW1UnXHNyXUvtBZqiX5W2W3Jvf7845Ov175w4aEAw8/jjUCAAAA8wggHL0yP7NQk77+rCwTnAm17zxar+BOj7pDQdOljygEEAIAAAAAAAAAAAAAACSPAEIAAAAAAAAAAAAAAID/tOB/B1T/h7+YLmNQ1K2aopJbMk2XgRjWvHxW2w9dMF3GoNj2X7K0uvh602UAAABAAw8XkD7a7P8rs59VvmNhUjV0dUflO/2CdjWXJdQ+L6tED87eoaxM11BPF4YxU5+jSDSsl46uGlCowGWECwAAAAAYDpJdI1h86xa5pyzX2AxLUnU0tnu193frFIoE4rZ12t1aUfAjZY8vMDJnGL5MfI4i0bBef3dLwoGHsbBGAAAAYB4BhKPbGKtNEx+o1PX3lffaJno+oHMvrlP4sNd0uSMSAYQAAAAAAAAAAAAAAADJI4AQAAAAAAAAAAAAAADgP/k7PlTu906ZLiPlLBnSh1Uu02WgF/W/79SCHadNl5FyzvFjdfIfc2QZy0ZNAAAAw0Ey4QKXOe1ufb1od0qC3F45tkENJ6oTal88vVz351XKarEN1XRhmPKfa9APm5YlFCpgtzr1tcKX5JpYnNQ9u7qjeqPtGe1pWZN0/YQLAAAAABgOUrVG8MDMp1LyzPVqa2XCQW6FzlItyd8qu9UxZPOF4an9QrN2NT+kQMgXt+3l4MyibE9S9+zqjsp3+oWEAw/7whoBAACAeQQQ4rIMu0Pjptwi6/QidYc7FDnVrGjwj7oUCZsubUQjgBAAAAAAAAAAAAAAACB5BBACAAAAAAAAAAAAAAB8zOa6P2nTz/5kuoyUKnCOk2/dVNNloA/j1vsV7TZdRWod/KZTxbnXmi4DAAAA/ykV4QKXFTpLtWzWjqQDATs6/frxkVU61lEft+3ljeLdU5ZrbIZlSOYMw0dHp1+v/GGDmgK1CbVfkr9Nd+Y8kvRnpSW4Xy8eeTjpUIHLCBcAAAAAMBykeo3g/psrlZXpSqqfUCSoPS1rh/y5D+knEg3rpaOrEv6sLJhRoXtzNyT9WfGfa9DL73wzocDDRLBGAAAAYB4BhIBZBBACAAAAAAAAAAAAAAAkjwBCAAAAAAAAAAAAAACAj4l2XdK077YpcKHLdCkps3reeG17YJLpMtAH95ZTag58aLqMlCn9rE3eMofpMgAAAPAxqQwXuMxEyJvT7tYDM5+Sa2LxoM4XhodINKzX392iuuObEmqfynDM5xuXpixU4DLCBQAAAAAMB4OxRrBgRoXuvmld0s9j/Ql5s1ud+srsZ5XvWDio84Xhoas7qjfantGeljUJtU9VOGZHp1+v/GFDwoGHiWKNAAAAwDwCCAGzCCAEAAAAAAAAAAAAAABIHgGEAAAAAAAAAAAAAAAAn9DcHpH7X98zXUbKND12o9w3Wk2XgT5s+uk5ba4/b7qMlHCOH6tj/2OqbNYM06UAAADgYwYjXEBK3Wb/pjaRH+46Ov1690+HrjpelO0xXdqg6uqOynf6Be393bqEgym/XrQ76c9DJBrWS0dXpTxU4DLCBQAAAAAMB4O5RrD41i1yT1musRmWAfdj6plwuItEwzoS3H3V8dmOpUkHPw53LcH9evHIwwl/Hh6Y+ZRcE4uTumckGtbr725R3fFNgzIm1ggAAADMI4AQMIsAQgAAAAAAAAAAAAAAgOQRQAgAAAAAAAAAAAAAABDD2v84q+qGC6bLSJpt3BiFKm8yXQbi8L0XUeH3R0bo5b7/OlkLZ15nugwAAAB8wmCFC1xmKgBuwYwK3X3TuhG70X5ju1e7msuuOj6SN6n3n2vQy+98U4GQL25bUwGYAzWS3zcAAAAA6WMo1ghMBMAVOku1bNaOEbtG0Nv7tv6u1hEbvtjR6dfzjUsTXiMwEYA5UKwRAAAAmEcAIWAWAYQAAAAAAAAAAAAAAADJyzBdAAAAAAAAAAAAAAAAwHBUuXCinOPHmi4jaZ+dajVdAhLgvtEq27j039Co5OZrCR8EAAAYpQIhn6oO5Mrr8ygSDQ+4H6vFJo/bq/V3tcppd8dtX3d8k6oO5qmx3auu7qjpaUASOjr98vo8evrN+QkFCyzJ36YNd59MOnywJbhfla9PG/TwQQAAAAAYLQIhn55+c768Po86Ov0D7sdqsalkxkatv6tVhc7SuO2bArV6/Bd2NZzYzhpBmotEw/L6PKo6kJvQGsGCGRVaP/+YirI9SYUP+s81qPqNOdrVXDao4YMAAAAAAAAAAAAAAAAAAAAAAKQCAYQAAAAAAAAAAAAAAAAx2KwZeulrDtNlJO2+vGtNl4AEpXtYpHP8WHk96f93BgAAAMlJ1Wb/WZkuPTavSd8o2ie71dln21AkoF3NZap+Y4785xpMTwH6KRINq/74ZlUdyFVToDZu+0JnqZ74YkjF01cnFSrQ0enX9w8V6rnGRYQKAAAAAMAgaArUqupAruqPb1YkGh5wP1mZLnncXj16+0E57e647fe0rFHl69PUEtxvegrQT13dUTWc2K7Hf2FPeI1g/V2tKpmxUVaLbcD37ej0y+vz6Ok35ycUeAgAAAAAAAAAAAAAAAAAAAAAwHBAACEAAAAAAAAAAAAAAEAvinOvVXnxeNNlJOXRz6d3/aPJ8sKBb4o5HDz7lUly2MeaLgMAAADDRKo2+893LNSGu09qSf62uG0DIZ+efnO+vD6POjr9pqcAcXR1R9XY7lXVwTzVHd8Ut73T7tb6u1rlcXuTChWIRMPy+jyqOpBLqAAAAAAADIG645tUdTBPje1edXVHB9yPa2Kxyu98WysKamS3OvtsG4oE9FzjIn3/UCFrBGmiJbhfla9P056WNXHbOu1uPXr7QXncXmVlugZ8z0g0rPrjm1V1IDehwEMAAAAAAAAAAAAAAAAAAAAAAIYTAggBAAAAAAAAAAAAAAD6sOVvs+TOHme6jAFx2DLkvN5iugwkaLn7OtMlDFh58XgtnJm+9QMAAGBwpGqz/7EZFhVPX60nvhhSobM0bvumQK2qDuSq/vhmRaJh09OAGPznGlT9xhztai5TKBLos63d6tQ3ivbpsXlNSYUKdHVH1XBiux7/hZ1QAQAAAAAYYqFIQLuay1T9xhz5zzUMuJ+xGRYVZXu0fv4xLZhREbd9IORT1YFceX0e1giGqY5Ov75/qFDPNS5KaI1gRUGNyu98W66JxQO+Z1d3VI3tXlUdzFPd8U2mpwAAAAAAAAAAAAAAAAAAAAAAgAEhgBAAAAAAAAAAAAAAAKAPlrFjtPv/M9l0GQNy+7RrTJeAfnBeb5HDln5f53GOH6stf5tlugwAAAAMY6na7N9qscnj9mr9Xa1y2t1x29cd36Sqg3lqbPeqqztqehqgj0IFvD6Pnn5zvgIhX9z2S/K3acPdJ5XvWJjUfVuC+1X5+jTtaVljegoAAAAAYFQLhHx6+s358vo86uj0D7gfq8Wmkhkbtf6uVhU6S+O2bwrU6vFf2NVwYjtrBMNEJBqW1+dR1YHchNYIFsyo0Pr5x1SU7dHYDMuA7+s/16DqN+ZoV3NZ3MBDAAAAAAAAAAAAAAAAAAAAAACGs/TbsQwAAAAAAAAAAAAAAGCIubLGqab0BtNl9NuXb800XQL6KR1DI3+12inL2DGmywAAAEAaSNVm/1mZLj02r0nfKNonu9XZZ9tQJKBdzWWqfmOO/OcaTE/BqBWJhlV/fLOqDuSqKVAbt32hs1RPfDGk4umrkwoV6Oj06/uHCvVc4yJCBQAAAABgGGkK1KrqQK7qj29WJBoecD9ZmS553F49evtBOe3uuO33tKxR5evT1BLcb3oKRq2u7qgaTmzX47+wJ7xGsP6uVpXM2CirxTbg+3Z0+uX1efT0m/MTCjwEAAAAAAAAAAAAAAAAAAAAAGC4G/i/xAcAAAAAAAAAAAAAABhFPJ+za+87nar9zcA3wBxq5fOvN10C+umhz9m0v6XTdBkJqym9Qa6scabLADCCBINB1dXVSZKOHTumlpYWzZs3T1lZWZKkBQsWyOFwmC4TAJCkPS1r9Is/fldfmf2s8h0LB9xPvmOhNtx9Um+0PaM9LWv6bBsI+fT0m/NV6CzV/TdXKivTZXoaRoWu7qh8p1/Q3t+tSygA0Gl36+tFu5N+fyLRsF46uiqhIAMAAAAAgDl1xzfpVyef1uJbt8g9ZfmAQ+hdE4tVfufbCT2DhiIBPde4KGXPoEhcS3C/XjzycMJrBA/MfEquicVJ3TMSDev1d7eo7vgm08MHAAAAAAAAAAAAAAAAAAAAACClxly6dOmS6SIAAAAAAAAAAAAAAADSQbTrkuZsfU++9g9NlxKXa6JFrRtyTJeBARjz3/ymS0hIefF4bf0vk0yXAWCE8Hq9qqqqks/ni9vW7XbrwQcf1IYNG2SxDGwzagAYjYZrIJupwLkFMyp0903rZLXYTE9BnxrbvdrVXHbV8aovDf9/BuA/16CX3/mmAqH4P9/tVmfSgZTSR4GHiQRSDjW71anFt25RUbbHdCkAAAAAoK7uqPb9fp0aTlSbLqUHU4Fzhc5SLZu1Y9ivEXR0+lV1IPeq4+vvah32IYodnX4937g04TWCZAMppY8+54kEUpqwoqCGNQIAAIBhwP/3Y0yXAIxqUytbNe4Gl+kyAAAAAAAAAAAAAAAA0hoBhAAAAAAAAAAAAAAAAP0QDHVpcsVJ02XE5SmyqcbjMF0GBiC3sk3+c1HTZfTJnT1Ob6+9UZaxbMIEIDnhcFirVq1SbW3/w7CcTqeeffZZLVyYXFARAIw27Reatav5oYQ2fB9Kqdrs38SG9oMpHQMIOzr9euUPGxIOg1ySv0135jyS9HvQEtyvF488POxCBRbMqNC9uRuG7WcMAAAAwOjV0enXj4+s0rGOetOl9FDoLNX9N1cmHapn6vl0sKRjAGEkGtZLR1cl/B4smFGhu29al/T6kP9cg15+55vDbv2reHq57s+rHPZhlwAAAKMFAYSAWQQQAgAAAAAAAAAAAAAAJI8AQgAAAAAAAAAAAAAAgH5qaP2L5j81vAINPqlu1RSV3JJpugwMwJqXz2r7oQumy+iVc/xY+b59oxz2saZLAZDmmpub9aUvfUmBQOyfqSUlJXI4HDpy5Ih8vt43Ca6oqNDGjRtNDwcA0k5ju1d7f7du2IW1mQijc9rdemDmU3JNLDY9/KukUwBhJBrW6+9uUd3xTQm1NxE6OZQKnaVakr9VdqvDdCkAAAAA0Cf/uQb9sGnZsFsjMBFGZ7c69ZXZzyrfsdD08K+STgGEXd1RvdH2jPa0rEmovanQyaGSl1WiB2fvGHbvEwAAwGhHACFgFgGEAAAAAAAAAAAAAAAAySOAEAAAAAAAAAAAAAAAYAA21/1Jm372J9NlxGTJkD6scpkuAwNU//tOLdhx2nQZvTr4TaeKc681XQaANNfQ0KD58+dfdbympkbz5s2Ty+W66pzf79ehQ4e0bt26q0ILt23bptWrV5seFgCkna7uqF5trUw4MG6opGqzf1Ob3adSOgQQdnVH5Tv9QsKBlk67W18v2p30PEeiYb10dNWwCxVw2t1aUfAjZY8vMF0KAAAAACTs8rNdrGdQk+xWpxbfukXuKcs1NsOS9PiG+tk1ldIlgLAluF8vHnk44Xl+YOZTck0sTuqekWhYr7+7ZViucX2t8KWkxwcAAIDBQQAhYBYBhAAAAAAAAAAAAAAAAMkjgBAAAAAAAAAAAAAAAGCA1v7HWVU3XDBdxlUKnOPkWzfVdBlIwrj1fkW7TVdxtX3/dbIWzrzOdBkA0lw4HFZeXl6PEEGn0ymfzyeHwxH3+mAwKI/Ho/r6+h7Hz5w5k9D1AICrhSJB7WlZOyyD3EwE1S2YUaF7czckFWyQKsM9gLD9QrN2NT+kQMgXt62pYMmhcjkUoyjbY7oUAAAAABiwSDSsV45tUMOJatOl9GAqqK7QWapls3bIarGZnoJhH0DY0enX841LE14jMBEsOZRWFNQkPT4AAAAMLgIIAbMIIAQAAAAAAAAAAAAAAEhehukCAAAAAAAAAAAAAAAA0tWWv81Syc3Xmi7jKvd8evjVhP6ZOXmc6RKuUvGlTxE+CCAltmzZ0iN8sKSkRCdPnkw4PNDhcKiurk4VFRU9jq9du9b00AAgbdmtDnncXn3r8z457W7T5VwRCPlUdSBXXp9HkWh4wP1YLTZ53F6tv6s1ofHVHd+kytenqbHda3oKhq1QJCivz6Mnf+VOKFhgSf42bbj7ZNLhgy3B/ap8fdqwCx9cMKNCG+4+SfggAAAAgLRntdi0JH+r1t/VqrysEtPlXBEI+fT0m/Pl9XnU0elPanwlMzZq/V2tKnSWxm3fFKjV47+wq7Hdq67uqOlpGJYi0bD2tKxV1YHchNYIFsyo0Pr5x1SU7UkqnM9/rkHVb8zRruayYRU+WDy9XE98MZT0+AAAAAAAAAAAAAAAAAAAAAAAiGfMpUuXLpkuAgAAAAAAAAAAAAAAIF1Fuy5p2nfbFLjQZbqUK1bPG695rmtMl4Ek/Oj/hbW/pdN0GVeUftYmb1liwWAA0JdwOCy73d7jWCgUks1m63df0WhUc+bMkc/31w2NW1tb5XK5TA8TANJeY7tXe3+3blht3i59FGJ3Z84jSW/e3hLcrxePPJzQ+Jx2t1YU/EjZ4wuMjLmx3atdzWVXHa/6kpl/BtDVHdWrrZWqO74pofaFzlItm7VDVkv/f9Z/XEenX883Lk0oyGAoFTpLtSR/q+xWnpcAAAAAjEz+cw36YdOyYbdGsGBGhe6+aV3Sz5v+cw16+Z1vJvS8abc69bXCl+SaWGxkzB2dflUdyL3q+Pq7WpWV6Rryerq6o/KdfiHmukUshc5S3X9zZdK1dnT69cofNqgpUDvkY+5LXlaJHpy9w8h7AQAAgIHx//0Y0yUAo9rUylaNu8FlugwAAAAAAAAAAAAAAIC0RgAhAAAAAAAAAAAAAABAkoKhLrn/9b1hFUIIpErJzdfqJw9PkWUsGy4BSN7+/fu1aNGiK68rKiq0cePGAffX0NCg+fPnJ9RfMBhUOByWJNlsNjkciQUFRaNRtbW1XXntcDj6FZjo9/t16tQpvfvuu9q7d68WL16sgoICOZ3OAdeQk5Mji8XS6/mPjy8cDisYDPZ6baJjGOj4AaSv/gbNDRW71amvzH5W+Y6FSY/vjbZntKdlTULtTQXNDacAwv4EUzrtbn29aHfSm+5HomG9dHTVsAsVMB1MCQAAAABDqb9Bc0PFbnVq8a1b5J6yXGMz+rfmGWt8iT7zmgqaG04BhP0JpnTa3Xpg5lNJBzdGomG9/u6WYblWZTKYEgAAAANHACFgFgGEAAAAAAAAAAAAAAAAySOAEAAAAAAAAAAAAAAAIAUIIcRIRPgggFTzeDyqrf1rgFAoFEo6zK6wsFA+n0/6/7P3/8FRXQee9/8B2pp4W+xi8jS5jHGQgjwhMLoK67hIJOzYmRYTC62xK4RxtzzO12uzZQyIyfIHj5UNipSxUvyh8SBh4yriouKJWjaxy4ML5CzqiWNbLYeK+RK6v2CykaMm4IcO/azMlNXLrGjQ9w9WHd1WS31bLem24P2qUlWf1r3nnnN/iD63L+cjyTAMXbhwIeu2fT6fAoGArfqj0ahKS/80qXNHR4f8fn/W9bq6uvTEE08oFpt4AuYjR46opmbiEK30NvT396ukpETRaFTPPfec2traLMuP7l8kEpFpmqnf5Rr6mL5+T0+PqqqYSBm4mQwOxfXmme0FGQDnRMBd9bIm3V/akFewQS4KIYDwwqcRvRJ5VLHBcNZlnQqInCkj4RarFmf/LAAAAAAAN5qhZEI/72tQ6A9t+Vc2hZwKuKv6fL2+WdaiIld+97jtKoQAwoHLUb1+apP6BoJZl3UqIHImPVLekXf/AAAA4BwCCAFnEUAIAAAAAAAAAAAAAACQv7lONwAAAAAAAAAAAAAAAOBG4Cmep/e3Gk43A5gyxvx5hA8CmHKjwwd9Pl/e4YOStHPnztTrWCymeDzuaB8TiYT8fr/WrVuXNXxQktatW6fm5mYlk8mcthMKhVRaWjomfDBdeXm5JUBw3759OW3njTfesJRXr1493bsQQIEpLvLIbwb0d18Lyyg2869wisQGw9r9XqkCYb+GkolJ11PkcstvBrTznn5b/ev+qFEt796hExfsBdnOZoNDcQXCfv3j+6at8MEHl7er4d5zeYcPnol3qeXdOwoufLB6WZMa7j1H+CAAAACAm1aRy60Hl+/Rznv6VbbQ63RzUmKDYe379RoFwn4NXI7m1T/vsl3aeU+/Kgxf1uVDf2jT939RrBMXArp6Lbf7u7PNUDKhN89s1+73Sm2FD1Yva9LONX1atdifVzhf9JOQ2n51l16J1BVU+GDV5+v1w28M5t0/AAAAAAAAAAAAAAAAAAAAAADyQQAhAAAAAAAAAAAAAADAFClZeIt6niaEELOfMX+ewv/1zwkfBDClotGopbx8+fIpqXfp0qWWsp3Qv+mSTCZVVlZmCVo0DEM+n08dHR2pH5/POnl1Y2OjHnjgAdvb6e3t1Zo1a2wvnx7SGAqFbPdndGBhU1OTXC4mUwZuVovnl+u7lSf1SHmHiosKZ9xzMtap7/+iWKE/7M1rsv+Ft5bou5Un9fiqI1n7NzgU0yuROj3XW6ELn0ac3gVT7uq1pIIfNeuHv1ykk7HOrMtXGD798BuDqvr81rwm3R+4HNVzvRU6cGJdQYUKVBg+ff++i/Iu20WoAAAAAADo+hh601e6tfnunoK7R7D7vVIFP2rWUDKRV//8ZkCb7+6RUWxmXf6VSJ1a3r1D0U/s3XedTa5eS+rEhcD/uffSlnX5CsOnnff0y7tsl4pc7klvd+ByVIGwX/t+vUaxwbDTuyGlbKFXO+/p14PL9+TVPwAAAAAAAAAAAAAAAAAAAAAApgIBhAAAAAAAAAAAAAAAAFOoqvQzhBBiVhsJH/QUz3O6KQBucGVlZVNSz+23324pRyLOBUEdPHjQEoDo9XoVDocVCATk9/tTP4FAQBcvXpTX600tGwwGbQcD7tixI/XaMAx1dHRoeHg49RMIBCzLr1+/fkw77Th27JilPw8//LBj+xZA4Vi12K+Ge8+pelmT002xePPMNrW8e4fOxLvyqme5p0YN957Tg8vbsy4bGwzrH983FQj7NTgUd3oXTIkTFwJqefcOdX/UmHVZo9jUznv65TcDeU26P5RMKBD2a/d7pQUVKmAUm/q7r4XlNwMqLvI43RwAAAAAKDglt1Wp4d5zeqS8w+mmWHR/1KjdPWU6cSGgq9eSefWv/qvH9Uh5R9agxcGhmPb9eo32f1CtgctRp3fBlIh+ElLLu3folUhd1mWNYlOb7+6R3wxo4a0lk97mUDKh4EfN2v1eqU7GOp3eBSnFRYY2392jTV/pzqt/AAAAAAAAAAAAAAAAAAAAAABMJQIIAQAAAAAAAAAAAAAAphghhJitCB8EMJ1Onz5tKS9dunRK6l2yZImlPDAw4Ej/EomE6ur+NBGzz+dTd3e3PJ7MgUUej0dvvfWWTNNMvff888/b2tZIKGBTU5POnTsnv98/4fJut1v19fWpcltbmxKJRNbtjA4qNE1T5eXlDuxZAIVo3lyXvMt26fv3XVSF4XO6OSmDQzEdOLFOz/VW5DXZ/7y5LlV9fqt++I1BW/07GevUD3+5SMGPmvMKNnDShU8jeq63Qq9E6jQ4FJtw2eIiQ4+vOqLvVp7Ma9L9q9eSCv1hr77/i+KCCxV4pLxD3608qcXz+bcPAAAAACYyb65Lqxb79cNvDKrq8/X5VzhFBodieiVSp7Zf3aXoJ6G8+7dzTZ+qlzVlXb5vIKjd75XqzTPbNZTMfg+2EA1cjmr/B9Xa9+s1tu4RPFLeofqvHlfJbVWT3ubVa0mduBDQ7p4ydX/U6PQusHikvEMN957Lq38AAAAAAAAAAAAAAAAAAAAAAEwHAggBAAAAAAAAAAAAAACmASGEmG0IHwQw3S5dumQp33777VNSr8vlspR7e3sd6d+BAwcs5ZaWFlttf+GFF1Llzs5OxeNxW9vzer3atWvXmP6P58knn7SU33nnnQmXTyaTamtrS5V37tw5vTsQwKxUXOSR3wzo774WllFs5l/hFIkNhrX7vVIFwv68JvsvcrnlNwPaeU+/rf51f9Solnfv0IkLAad3gW2DQ3EFwn794/umYoPhrMs/uLxdDfee03JPTV7bPRPvUsu7d+jNM9uc3gUW1cua1HDvOa1a7M+/MgAAAAC4iRS53Hpw+R7tvKdfZQu9TjcnJTYY1r5fr1Eg7NfA5Whe/fMu26Wd9/SrwvBlXT70hzZ9/xfFOnEhoKvXkk7vBluGkgm9eWa7dr9Xqr6BYNblq5c1aeeaPq1a7Ne8ufbuU2cS/SSktl/dpVcidVkDD2dS1efr9cNvDObdPwAAAAAAAAAAAAAAAAAAAAAApgsBhAAAAAAAAAAAAAAAANNkJITQmE+gGwqbufgWwgcBIE+jgw99Pp9KSkpsrVdVVWUpd3d321pv//79ObWvvLxcpvmn8KznnntuwuWPHj1qKa9fv37K9xmAG8fi+eX6buVJPVLeoeKiwgliPxnr1Pd/UazQH/bmNdn/wltL9N3Kk3p81ZGs/RsciumVSJ2e663QhU8jTu+CcV29llTwo2b98JeLdDLWmXX5CsOnH35jUFWf35rXpPsDl6N6rrdCB06sK6hQgQrDp+/fd1HeZbsIFQAAAACAPCy8tUSbvtKtzXf3FNw9gt3vlSr4UbOGkom8+uc3A9p8d4+MYjPr8q9E6tTy7h2KfhJyeheM6+q1pE5cCPyfeyhtWZevMHzaeU+/vMt2qcjlnvR2By5HFQj7te/XaxQbDDu9G1LKFnq1855+Pbh8T179AwAAAAAAAAAAAAAAAAAAAABguhFACAAAAAAAAAAAAAAAMI2qSj+j8H/9c0IIUbC8d35Gx7cTPggA+ers/FN4U21tbU7rGsafJuI+fPhw1uVN07QdcDjazp07U6+DwaDi8fi4y44OKPT5fHK7mWgZQHarFvvVcO85VS9rcropFm+e2aaWd+/QmXhXXvUs99So4d5zenB5e9ZlY4Nh/eP7pgJhvwaH4jZqnzknLgTU8u4d6v6oMeuyRrGpnff0y28G8pp0fyiZUCDs1+73SgsqVMAoNvV3XwvLbwZUXORxujkAAAAAcMMoua1KDfee0yPlHU43xaL7o0bt7inTiQsBXb2WzKt/9V89rkfKO7IGLQ4OxbTv12u0/4NqDVyOOr0LLKKfhNTy7h16JVKXdVmj2NTmu3vkNwNaeGvJpLc5lEwo+FGzdr9XqpOxzknXM9WKiwxtvrtHm77SnVf/AAAAAAAAAAAAAAAAAAAAAACYKS6nGwAAAAAAAAAAAAAAAHCj8xTPU/i//rnMf/h/FPv0qtPNAVK8d35Gbz3xObnmzXG6KQBuQh9//PGkQvQKUSKRsJQHBgYUjUZtr/+Xf/mXisVitpdfuXLlpNq5fv16S/nVV1/V1q1bM/YnGAymylu2bJmO3QbgBjVvrkveZbv01Ts2680z2wtmIvnBoZgOnFgno9jUd1YdmvRE8vPmulT1+a26+88f12unN2Xt38lYp07GOlW9rEn3lzZo3lznHuG/8GlEr0QetRUAWFxk6NsrX9JyT01e27x6LalfnX9Rb57Z5li/x+tf7RdbtWqx3+mmAAAAAMANa95cl1Yt9mulZ71+3teg0B/anG6SpOv3CF6J1OmX/bv18JdeUMltVXn3792zrer+qHHC5fsGgtr9XqmqPl+vb5a1qMjldmwfDFyO6vVTm9Q3EMy67MgY2vzcxrzua1y9llT4jwd1+Lc7NDhk/374THikvCPv/gEAAGD2ub2l3+kmADc1121LnG4CAAAAAAAAAAAAAADArMdT8AAAAAAAAAAAAAAAADNgJITQH4gr+Lt/c7o5gOqr5qv1Py0kfBDAjCkvL7eUz549q6qqyU3sPFp60N/y5ctnvG/xeNxS3rZtm7Ztm76gpdra2kmt53a75fP51Nl5PSzr2WefzRhA+M4776ReG4ah1atXT1tfANy4ios88psB3V/6jO3Qu5kQGwxr93ulqjB82rBi/6Qn+y9yueU3A/rmnS36yYn1WfvX/VGj3j+3z5HQu8GheE5hkA8ub9dXlzyV96T7Z+Jd+tmpJwouVKAQwiABAAAA4GZS5HLrweV7tGbpd22H3s2E2GBY+369RhWGT9+8s0ULby2ZdP+8y3bpP/75Y/r57xqyjr9Df2hT6A9tjoTeDSUTOYVBVi9r0r1Ld+Qdlhj9JKQ3Pny6YO4PjSiEMEgAAAA455b/q8TpJgAAAAAAAAAAAAAAAABAXuY63QAAAAAAAAAAAAAAAICbhad4nt564nPy3vkZp5uCm1zT2gXa89BnCR8EMKPmz59vKR8+fNj2uslkckzI34hPP/3UUi4rK3O6qwVty5YtqdexWEyRSGTMMs8880zq9ebNm+VyEdAEYPIWzy/XdytP6pHyDhUXGU43J+VkrFPf/0WxQn/Yq6vXkpOuZ+GtJfpu5Uk9vupI1v4NDsX0SqROz/VW6MKnEZtbmLyr15IKftSsH/5yka3wwQrDpx9+Y1BVn9+aV/jBwOWonuut0IET6woqfLDC8On7912Ud9kuwgcBAAAAwAELby3Rpq90a/PdPQV3j2D3e6UKftSsoWQir/75zYA2390jo9jMuvwrkTq1vHuHop+Epr2PV68ldeJC4P/cC8kePlhh+LTznn55l+3KK5xv4HJUgbBf+369pqDCB8sWerXznn49uHwP4YMAAAAAAAAAAAAAAAAAAAAAgFmL/zUPAAAAAAAAAAAAAAAwg1zz5qj7vxhq7r6kxqOXnG4ObkI9TxuqKiUEE8DMKykpsZQ7Ozv18ssvZw23i8fjMs3rkzX39fXJ7bZOBpweoLd06VKnu6qmpqZJByFOd/urqqpkGIZiseuBUD/+8Y+1Z8+e1O/j8bjC4T9NBP3YY4/NwB4DcDNYtdgv83Mb9XZ/i7o/anS6OSlvntmmX/z+WX175Uta7qmZdD3LPTVquPecfnX+Rb15ZtuEy8YGw/rH901VGD49uHyPios8U96vExcCOvzbHbYCAI1iU99ZdUgLby3Ja5tDyYReO73JVtjhTDKKTT1S/lMtnl/udFMAAAAAAJJKbqtSw73nFP7jQb0SqXO6OSndHzXq/XP7VPvFVpmf2zjp8PqS26pU/9XjCv/xYNax+eBQTPt+vUZlC7361sr9eY/NM4l+EtI/ndxg+x7Bw196QSW3VeW1zaFkQu+ebS2oe0CSVFxk6G8rXsu7fwAAAAAAAAAAAAAAAAAAAAAAFAICCAEAAAAAAAAAAAAAABywq3qByj7rUl3n/+t0U3CTMObP09FNn1P54iKnmwLgJub1ehUMBlPlo0ePqqZm/LCnRCIh0zRTYXkPPfSQ3nrrLUto4YEDByzrfPnLX3a6m/qrv/orVVUV7gTG3/ve97Rt2/VwrLa2NrW2tqb26auvvppazjTNMcGRAJCPeXNd8i7bpa/esVlvntleMEF1g0MxHTixLu8gvnlzXar6/Fbd/eeP2wriOxnr1MlYpx5c3q6vLnlq0sEGow1cjuonJ9YrNhjOumxxkZF38KIkXb2WtBW8ONOKiwzVfrFVqxb7nW4KAAAAACDNvLkurVrs10rPev28r0GhP7Q53SRJ1+8RvBKp0y/7d+cVxDe6f3aC+PoGgtr9XqmqPl+vb5a1qMjlzrsvA5ejev3UJvUNBLMuOzKGzid4Ubp+j8BO8KITHinvyLt/AAAAAAAAAAAAAAAAAAAAAAAUkrlONwAAAAAAAAAAAAAAAOBm5f+Pxep/5nYZ8+c53RTc4Lx3fkZ9//fthA8CcNx3v/tdS/mZZ56ZcHm3263NmzenysFgUA888ICSyaSk6wGFowMNTdOU2519YuZ4PG67zb29vVmX8Xg8lvLZs2encS/m7/HHH7eUjx49mnq9f//+1Osf/ehHTjcVwA2quMgjvxnQ330tLKPYdLo5KbHBsHa/V6pA2K+hZGLS9RS53PKbAe28p99W/948s00t796hM/GuSW9zKJlQIOzX7vdKbYUPPri8XQ33nss7fPBMvEst795RcOGD1cua1HDvOcIHAQAAAKDAFbncenD5Hu28p19lC71ONyclNhjWvl+vUSDs18DlaF798y7bpZ339KvC8GVdPvSHNu3uKdOJCwFdvZac1DaHkgkFP2rW7vdKbYUPVi9r0s41fVq12J9XOF/0k5DafnWXXonUFVT4YNXn6/XDbwzm3T8AAAAAAAAAAAAAAAAAAAAAAAoNAYQAAAAAAAAAAAAAAAAOKll4i/r+79vlvfMzTjcFN6imtQv01hOfk7uIR4UAOO/rX/+6pRwOhxWNRidcZ9euXfL5/jQx80gIoSRt2rTJsuzOnTvHrWd0SODo0MJs+vr6si7jdrtlGEZO6zjJ7XZb9ulzzz0nSYpEIgqH/xRalX68AGCqLZ5fru9WntQj5R0qLjLyr3CKnIx16vu/KFboD3snPdm/JC28tUTfrTypx1cdydq/waGYDpxYp+d6K3IKNrh6LanQH/bq+78o1slYZ9blKwyffviNQVV9fmtek+4PXI7qud4KHTixrqBCBSoMn75/30V5l+0iVAAAAAAAZpGFt5Zo01e6tfnunoK7R7D7vVIFP2rWUDKRV//8ZkCb7+6RUWxOuOzgUEyvROrU9qu7FP0kZHsbV68ldeJCQLt7ytT9UWPW5SsMn3be0y/vsl0qcrkn3beBy1EFwn7t+/UaxQbDk65nqpUt9GrnPf16cPmevPoHAAAAAAAAAAAAAAAAAAAAAEChYlYxAAAAAAAAAAAAAAAAh7mL5uqtJz6nprULnG4KbjBH/vMi7apeINe8OU43BQAkXQ++q6+vt7z3ta99TfF4fML1Xn75ZXm93lQ5GAyqurpanZ1/CloyDEMbN24ct47Vq1dbytmCDyUpkUiosTH7RM2S9L3vfS/1urGxMWuf0rcz07Zs2ZJ6HQwGFY/H9cYbb6Teq6+vl9vNpMwAZsaqxX413HtO1cuanG6KxZtntqnl3Tt0Jt6VVz3LPTVquPecHlzennXZ2GBYu98rVSDszxpscCbepZZ379CbZ7ZlrdcoNrXznn75zUBek+4PJRMKhP3a/V5pQYUKGMWm/u5rYfnNgIqLPPlXCAAAAABwRMltVWq495weKe9wuikW3R81andPmU5cCOjqtWRe/av/6nE9Ut6RNWgxNhjWvl+vUSDs18Dl6ITLRj8Jqe1Xd+mVSJ0Gh2ITLmsUm9p8d4/8ZkALby2ZdF+GkgkFP2rW7vdKdTLWOel6plpxkaHNd/do01e68+ofAAAAAAAAAAAAAAAAAAAAAACFbs7w8PCw040AAAAAAAAAAAAAAADAdaH+f9OGf4or9ulVp5uCWcxcfIuC/8WQp3ie000BgDESiYSKi4st7xmGoaNHj6q8vHzc9ZLJpB544AEFg8GMv+/p6VFVVdW464dCIa1ZsyZV9vl8CgQCE7Z1+/btamtrs7zX0dEhv9+ftV926h/drvb2dj311FNyuVxjlolGoyotLc3ahlwtXrxYsdj1yajb29v17LPPpsrZ9icATJfBobjePLO9oCaul65Pzv+dVYfynrh+KJnQa6c32e6fUWxmDPob7/10xUWGvr3yJS331OTV7qvXkvrV+RdthR3OpOIiQ7VfbNWqxfn/uwgAAAAAKCxDyYR+3teg0B/a8q9sChnFph7+0gsquS2/+6dDyYTePduq7o8abS1fYfgy3k/I5R5B7RdbZX5uo+bNdWVdfjxXryUV/uNBHf7tjqxhhzPtkfKOvPsHAAAAAAAAAAAAAAAAAAAAAMBsQQAhAAAAAAAAAAAAAABAgUkMXdOmn/1Pdf4m4XRTMAu1P7RQT311vlzz5jjdFAAYV3oY4IiOjg6tX79ebrd7zO8SiYTeeecdrVu3bszvmpqatGvXrqzbraioUDgctqzX0NAwJvQvPezQMIxUMN9E4X/Nzc1qbPzTZNE+n0/79+/P2J9M+8E0TZ08eXLMctMVQJje3hGGYejChQt51w8A+bjwaUSvRB61NYH+TKowfNqwYr+KXO686hm4HNVPTqyf1v49uLxdX13yVN6T7p+Jd+lnp54ouFCB6mVNur+0gVABAAAAALjBDVyO6vVTm9Q3EHS6KRYVhk/fvLNFC28tybt/P/9dQ8ZwwalSvaxJ9y7dkff9jOgnIb3x4dMFd7+m6vP1+mZZS979AwAAAAAAAAAAAAAAAAAAAABgNiGAEAAAAAAAAAAAAAAAoEAF/r+Dquv8f51uBmYJY/48Hd30OZUvLnK6KQBgSzwel2maqWC/0bxerzwej2pra3Xs2DEdPHgw43Ijjhw5opqamqzbjEQiMk3T8p5pmvrWt76lsrIySdLhw4fV2fmniZ7b29vV29ubem+i8L9EIqGysjJLWw3D0P3336/a2lotXbpU//qv/6r//t//u375y19awhANw1A4HJbH4xlT73QFEMbjcS1atGjM+3YDHQFgJpy4ENDh3+4ouPC7Qg73m00hiZPt34PL96i4yJN/ZQAAAACAWSP6SUj/dHJDwd0jKORwv9kUkjgZZQu9+tbK/Xn3DwAAADenn364xekmADe1//SFRv2HP1uUf0UAAAAAAAAAAAAAAAA3MQIIAQAAAAAAAAAAAAAAClh88Kr8gbiCv/s3p5uCAlZfNV+t/2mhXPPmON0UAMhJMpnUAw88oGAwmHddPT09qqqqyrpcc3OzGhsbbdU5EsTn9/ttBRBOtk+maSoYDGYMH5SmL4BQkqqrq8e09eLFi+O2BQCccPVaUm/3t6j7I3t/v2dKcZGhb698Scs92UNws/XvV+df1JtntuVVj1Fs6jurDuU96f5QMqHXTm8quFABo9jUI+U/1eL55U43BQAAAADgkKvXkgr/8aBeidQ53RSL4iJDtV9slfm5jZo315V3/w7/dkdeQYtGsamHv/SCSm7Lfs98IkPJhN4921qQ92T+tuK1vPsHAACAm9vOozxrBzjpP9/9nr542xqnmwEAAAAAAAAAAAAAADCrzXW6AQAAAAAAAAAAAAAAABifp3ieuv+LoQ7f/+V0U1CAjPnzFP6vf649D32W8EEAs5LL5VJ3d7c6OjpkmqatdQzDUFNTk8LhsOX9NWvWKBqNZl1/165dCofDmqR2QwAAgABJREFUMgxjwuV8Pp8aGhom3af29nZby/t8Ph0/ftyxwL8f/OAHlrLX6yV8EEDBmTfXJe+yXfr+fRdVYficbk7K4FBMB06s03O9FRq4HM2rf1Wf36offmNwUv0rLjL0+Koj+m7lybzCB69eSyr0h736/i+KCyp8sLjI0CPlHfpu5UnCBwEAAADgJjdvrkurFvv1w28Mqurz9U43J2VwKKZXInVq+9Vdin4Syrt/O9f0qXpZU87rj4yh6796PK9wvqvXkjpxIaDdPWUFFz74SHmHGu49R/ggAAAAAAAAAAAAAAAAAAAAAOCmN2d4eHjY6UYAAAAAAAAAAAAAAAAgu/jgVW0/NKDO3yScbgoKQNPaBWr4xn8geBDADSUej6u7u1uSdPjw4dT7tbW1kqSlS5eqqupPkwqHQiGtWbMmVTYMQ+Fw2FaAXjKZ1Pnz59Xb26tjx44pHo+rsrJSCxcu1Pr16+V2uy3tSiSu//vr8Xgsv8smGo3q9OnT+uCDD3TmzJlUfxYsWKCvf/3rtuoaaeuIXNswkUgkYgl/PHLkiGpqaqakbgCYLhc+jeiVyKOKDYbzr2wKVRg+bVixX0Wu/P5GD1yO6icn1tvq34PL2/XVJU9p3lxXXts8E+/Sz049ocGh2Izus2yqlzXp/tKGvPsHAAAAALgxDVyO6vVTm9Q3EHS6KRYVhk/fvLNFC28tybt/P/9dg07GOrMuW72sSfcu3ZH3fYnoJyG98eHTBXffperz9fpmWUve/QMAAABG7DzKc3eAk/7z3e/pi7etyb8iAAAAAAAAAAAAAACAmxgBhAAAAAAAAAAAAAAAALNM14f/S0/87H8q9ulVp5sCB5iLb9Gh/88ilSy8xemmAEBBSA8h7OnpsYQUYmLNzc1qbGxMla9cuSKXi5AnALPDiQsBHf7tjoILzZuJUEAnwg5nUoXh04PL96i4KHuoMAAAAAAA0U9C+qeTGwruHsFMhAI6EXY4k8oWevWtlfvz7h8AAACQjgBCwFkEEAIAAAAAAAAAAAAAAOSPAEIAAAAAAAAAAAAAAIBZKHl1WC2/+Fc1Hr3kdFMwQ4z589Rae5v8/7HY6aYAQMHp6urSunXrCB/MUTKZ1B133KFY7Pqk3E1NTdq1a5fTzQKAnFy9ltTb/S3q/qgx/8qmUHGRoW+vfEnLPTV59+9X51/Um2e2SZKMYlPfWXUo70n3h5IJvXZ6U8GFChjFph4p/6kWzy93uikAAAAAgFnm6rWkwn88qFcidU43xaK4yFDtF1tlfm6j5s115d2/w7/docGhmIxiUw9/6QWV3JbfPfGhZELvnm0tyHsrf1vxWt79AwAAAMZDACHgLAIIAQAAAAAAAAAAAAAA8kcAIQAAAAAAAAAAAAAAwCwWH7yq7YcG1PmbhNNNwTRqWrtADd/4D3LNY9IjABhPPB6Xx+NxuhmzSnNzsxob/zSpdH9/v0pKSpxuFgBMyuBQXG+e2V6QgXpTFRj4/3z6m7wn3U8PNCwUI2EMqxb7nW4KAAAAAGCWG0om9PO+BoX+0OZ0UyymMjDw95+8ozs/u3ZKAw0LySPlHXkHNgIAAADZEEAIOIsAQgAAAAAAAAAAAAAAgPwRQAgAAAAAAAAAAAAAAHADiFwY0qOdcYUvXHG6KZhCvi+7tWf9QnmK5zndFADADSYQCKiuri5V9vl8CgQCTjcLAPJ24dOIXok8qthg2OmmWFQYPm1YsV9FLrdjbTgT79LPTj1RcKEC1cuadH9pA6ECAAAAAIApNXA5qtdPbVLfQNDpplhUGD59884WLby1xLE2RD8J6Y0Pny64+ydVn6/XN8taHL1/AgAAgJsHAYSAswggBAAAAAAAAAAAAAAAyB8BhAAAAAAAAAAAAAAAADeQUP+/6ek3/idBhLOc78tutTywQCULb3G6KQCAG0Q0GlVvb68kaffu3QqH/zSxtGEYCofD8ng8TjcTAKbMiQsBHf7tjoIL23twebu+uuSpGQ3bG7gc1U9OrC+4UIEKw6cHl+9RcRH//gAAAAAApk/0k5D+6eSGgrtHUL2sSfcu3TGjYXsDl6P6+e8adDLW6XT3LcoWevWtlfsdDWUEAADAzYcAQsBZBBACAAAAAAAAAAAAAADkjwBCAAAAAAAAAAAAAACAGxBBhLMTwYMAgOkSCARUV1eX8Xc9PT2qqqpyuokAMOWuXkvq7f4WdX/U6HRTLIqLDH175Uta7qmZ1u0MJRN67fSmggsVMIpNPVL+Uy2eX+50UwAAAAAAN4mr15IK//GgXonU5V/ZFCouMlT7xVaZn9uoeXNd07adoWRC755tLch7JH9b8ZpKbuP+NAAAAGYeAYSAswggBAAAAAAAAAAAAAAAyB8BhAAAAAAAAAAAAAAAADcwgghnB4IHAQDTLVMAoc/nU0tLi0pKSpxuHgBMq8GhuN48s70gg/i+s+qQFt5aMqX1Xr2W1K/Ov6g3z2xzuosWI6EKqxb7nW4KAAAAAOAmNZRM6Od9DQr9oc3pplgYxaYe/tILUx7ENxK8ePi3OzQ4FHO6mxaPlHdMe/AiAAAAMBECCAFnEUAIAAAAAAAAAAAAAACQPwIIAQAAAAAAAAAAAAAAbgKh/n/T872fqvM3CaebglGa1i7QY3e5CR4EAEy7aDSq3t5eSdKCBQt09913y+PxON0sAJhRFz6N6JXIo4oNhp1uikWF4dOGFftV5HLnXdeZeJd+duqJggsVqF7WpPtLGwgVAAAAAAAUhIHLUb1+apP6BoJON8WiwvDpm3e2aOGtJXnXFf0kpDc+fLrg7oNUfb5e3yxrmZL7IAAAAEA+CCAEnEUAIQAAAAAAAAAAAAAAQP4IIAQAAAAAAAAAAAAAALiJxAevat/7n6rx6CWnm3LTMubPU2vtbVr/l/9O7qK5TjcHAAAAuOmcuBDQ4d/uKLiQvgeXt+urS56aVEjfwOWofnJifcGFClQYPj24fI+Kiwi9BQAAAAAUnugnIf3TyQ0Fd4+gelmT7l26Y1IhfQOXo/r57xp0MtbpdDcsyhZ69a2V+6ckXBEAAACYCgQQAs4igBAAAAAAAAAAAAAAACB/BBACAAAAAAAAAAAAAADchJJXh3X0f1zWM299ovCFK04356bg+7JbWyrnq6r0M043BQAAALjpXb2W1Nv9Ler+qNHpplgUFxn69sqXtNxTY2v5oWRCr53eVHChAkaxqUfKf6rF88udbgoAAAAAABO6ei2p8B8P6pVIndNNsSguMlT7xVaZn9uoeXNdWZcfSib07tnWgrzX8bcVr6nktiqnmwIAAABYEEAIOIsAQgAAAAAAAAAAAAAAgPwRQAgAAAAAAAAAAAAAAHCTiw5c0cvHE9r3/qeKfXrV6ebcUMzFt2jT6vl6/O5iuYvmOt0cAAAAAGkGh+J688z2ggzw+86qQ1p4a0nG31+9ltSvzr+oN89sc7qpFiPhCKsW+51uCgAAAAAAORlKJvTzvgaF/tDmdFMsjGJTD3/phXED/EYCFA//docGh2JON9fikfIO2wGKAAAAwEwjgBBwFgGEAAAAAAAAAAAAAAAA+SOAEAAAAAAAAAAAAAAAAJKk5NVhHfvD/9bBkwm1hT51ujmzljF/njZ/bb4e/st/p/LFRU43BwAAAIANFz6N6JXIo4oNhp1uikWF4dOGFftV5HKn3jsT79LPTj1RcKEC1cuadH9pA6ECAAAAAIBZbeByVK+f2qS+gaDTTbGoMHz65p0tWnhrSeq96CchvfHh0wV3P6Pq8/X6ZlmL5X4GAAAAUGgIIAScRQAhAAAAAAAAAAAAAABA/gggBAAAAAAAAAAAAAAAwBiEEeaG0EEAAADgxnDiQkCHf7uj4ML9Hlzeri/c9vWCDUl8cPkeFRd5nG4KAAAAAABTJvpJSP90ckPB3SOoXtaklYse1tv9P9LJWKfTzbEoW+jVt1but4QkAgAAAIWKAELAWQQQAgAAAAAAAAAAAAAA5I8AQgAAAAAAAAAAAAAAAEwoeXVYH168ojf+f/9Lr0cSCl+44nSTCoL3zs9o/cp/p9ov3aqShbc43RwAAAAAU+TqtaTe7m9R90eNTjeloBnFph7+0gsqua3K6aYAAAAAADAtrl5L6lfnX9SbZ7Y53ZSCVlxk6NsrX9JyT43TTQEAAABsI4AQcBYBhAAAAAAAAAAAAAAAAPkjgBAAAAAAAAAAAAAAAAA5iQ9e1a/P/W/9999e1sHw/1Ls06tON2lGmItv0bfK3fqrss/oy7cXyV001+kmAQAAAJhGA5ej+vnvGnQy1ul0UwpKcZGh2i+2yvzcRs2b63K6OQAAAAAATLuhZEKvnd7EPYIMHlzerq8ueYp7BAAAAJh1CCAEnEUAIQAAAAAAAAAAAAAAQP4IIAQAAAAAAAAAAAAAAEBeRgIJPzg/pPf6/03B3/2b002aEr4vu1VZ8mda9edFBA4CAAAAN7HoJyG98eHTig2GnW6K46qXNenepTtU5HI73RQAAAAAAGbcwOWofnJiPfcIJFUYPm1YsZ97BAAAAJi1CCAEnEUAIQAAAAAAAAAAAAAAQP4IIAQAAAAAAAAAAAAAAMCUiw5c0ek/XtEH54d05uIVdf4m4XSTxmXMn6f7l30mFTb4F55b5Cme53SzAAAAABSQq9eSCv/xoA7/docGh2JON2fGVRg+ffPOFi28tcTppgAAAAAA4Lgz8S797NQTN+U9AqPY1HdWHeIeAQAAAGY9AggBZxFACAAAAAAAAAAAAAAAkD8CCAEAAAAAAAAAAAAAADAjkleHdf5fk/r4X6/q7CdJ9f3PpM5cvCJJ0xpQOBIwKEmVJX+mhbfOVfniIs3/szkqWXiL07sFAAAAwCwylEzo3bOt6v6o0emmzAij2NTDX3pBJbdVOd0UAAAAAAAKytVrSf3q/It688w2p5syI4qLDH175Uta7qlxuikAAADAlCCAEHAWAYQAAAAAAAAAAAAAAAD5I4AQAAAAAAAAAAAAAAAABSU6cGXMe73R/z3u8gtunasVn7MGCbqL5spTPM/prgAAAAC4QQ1cjurnv2vQyVin002ZFsVFhmq/2Crzcxs1b67L6eYAAAAAAFCwhpIJvXZ60w17j0CSHlzerq8ueYp7BAAAAAAAAAAAAAAAAAAAAAAAFBACCAEAAAAAAAAAAAAAAAAAAAAAmIToJyG98eHTig2GnW7KlKle1qR7l+5QkcvtdFMAAAAAAJg1Bi5H9ZMT62+oewQVhk8bVuznHgEAAAAAAAAAAAAAAAAAAAAAAAWIAEIAAAAAAAAAAAAAAAAAAAAAACbp6rWkwn88qMO/3aHBoZjTzZm0CsOnb97ZooW3ljjdFAAAAAAAZq0z8S797NQTs/oegVFs6jurDnGPAAAAAAAAAAAAAAAAAAAAAACAAkYAIQAAAAAAAAAAAAAAAAAAAAAAeRpKJvTu2VZ1f9TodFNyYhSbevhLL6jktiqnmwIAAAAAwA3h6rWkfnX+Rb15ZpvTTclJcZGhb698Scs9NU43BQAAAAAAAAAAAAAAAAAAAAAAZEEAIQAAAAAAAAAAAAAAAAAAAAAAU2TgclQ//12DTsY6nW7KhIqLDNV+sVXm5zZq3lyX080BAAAAAOCGM5RM6LXTmwr+HoEkPbi8XV9d8hT3CAAAAAAAAAAAAAAAAAAAAAAAmCUIIAQAAAAAAAAAAAAAAAAAAAAAYIpFPwnpjQ+fVmww7HRTxqhe1qR7l+5QkcvtdFMAAAAAALjhDVyO6icn1hfkPYIKw6cNK/ZzjwAAAAAAAAAAAAAAAAAAAAAAgFmGAEIAAAAAAAAAAAAAAAAAAAAAAKbB1WtJhf94UId/u0ODQzGnm6MKw6dv3tmihbeWON0UAAAAAABuOmfiXfrZqScK4h6BUWzqO6sOcY8AAAAAAAAAAAAAAAAAAAAAAIBZigBCAAAAAAAAAAAAAAAAAAAAAACm0VAyoXfPtqr7o0ZHtm8Um3r4Sy+o5LYqp3cFAAAAAAA3tavXkvrV+Rf15pltjmy/uMjQt1e+pOWeGqd3BQAAAAAAAAAAAAAAAAAAAAAAyAMBhAAAAAAAAAAAAAAAAAAAAAAAzICBy1H9/HcNOhnrnJHtFRcZqv1iq8zPbdS8uS6nuw8AAAAAAP6PoWRCr53eNGP3CCTpweXt+uqSp7hHAAAAAAAAAAAAAAAAAAAAAADADYAAQgAAAAAAAAAAAAAAAAAAAAAAZlD0k5De+PBpxQbD07aN6mVNunfpDhW53E53FwAAAAAAjGPgclQ/ObF+Wu8RVBg+bVixn3sEAAAAAAAAAAAAAAAAAAAAAADcQAggBAAAAAAAAAAAAAAAAAAAAABghl29llT4jwd1+Lc7NDgUm7J6KwyfvnlnixbeWuJ0FwEAAAAAgE1n4l362aknpvQegVFs6jurDnGPAAAAAAAAAAAAAAAAAAAAAACAGxABhAAAAAAAAAAAAAAAAAAAAAAAOGQomdC7Z1vV/VFjXvUYxaYe/tILKrmtyukuAQAAAACASbh6LalfnX9Rb57Zllc9xUWGvr3yJS331DjdJQAAAAAAAAAAAAAAAAAAAAAAME0IIAQAAAAAAAAAAAAAAAAAAAAAwGEDl6P6+e8adDLWmdN6xUWGar/YKvNzGzVvrsvpbgAAAAAAgDwNJRN67fSmnO8RSNKDy9v11SVPcY8AAAAAAAAAAAAAAAAAAAAAAIAbHAGEAAAAAAAAAAAAAAAAAAAAAAAUiOgnIb3x4dOKDYazLlu9rEn3Lt2hIpfb6WYDAAAAAIApNnA5qp+cWG/rHkGF4dOGFfu5RwAAAAAAAAAAAAAAAAAAAAAAwE2CAEIAAAAAAAAAAAAAAAAAAAAAAArI1WtJhf94UId/u0ODQ7Exv68wfPrmnS1aeGuJ000FAAAAAADT7Ey8Sz879UTGewRGsanvrDrEPQIAAAAAAAAAAAAAAAAAAAAAAG4yBBACAAAAAAAAAAAAAAAAAAAAAFCAhpIJvXu2Vd0fNUq6Hirw8JdeUMltVU43DQAAAAAAzKCr15L61fkX9eaZbZKk4iJD3175kpZ7apxuGgAAAAAAAAAAAAAAAAAAAAAAcAABhAAAAAAAAAAAAAAAAAAAAAAAFLCBy1FdHDytOz+7VvPmupxuDgAAAAAAcMhQMqHff/IO9wgAAAAAAAAAAAAAAAAAAAAAALjJEUAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAsMNfpBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgOwIIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYBYggBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgFmAAEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGYBAggBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJgFCCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAWIIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIBZgABCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABmAQIIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACYBQggBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAbgN/v15w5c1I/AAAAAAAAAAAAAAAAuPG4nG4AAAAAAAAAAAAAAAAACkc0Gk29drvd8ng8k64rHo8rkUikyiUlJU53DwAAAAAAAAAAAAAAAAAA5CEUCun5559PlR999FHV1NTkXW9zc7POnDmTKgcCAae7iim0d+9e9fb25rxeZWWlamtreQYVAAAAAAAAAAAAAAAASDNneHh42OlGAAAAAAAAAAAAAAAAoDDMmTMn9drn8+U1gY/f71dnZ2eqzGMqAAAAAAAAAAAAAAAAAADMbolEQsXFxamyYRi6cOFCXnXG43EtWrQoVa6vr9eePXuc7mpeksmkzp8/nyovWbJELpfL6WY5Jv2Z0sno6OiQ3+93uisW0Wg09drj8cjtdjvdJEk8wwsAAAAAAAAAAAAAAHAzmOt0AwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFD43G63fD5fqhyLxRSJRPKq89VXX7WUn3zySae7mbfz58+rtLQ09TM6jBCTU1dXp+rqasXjcaebkjL6GB86dMjp5gAAAAAAAAAAAAAAAOAm4nK6AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJgdtmzZos7OzlT5jTfeUHl5+aTre/bZZ1OvTdPMqy7MDh0dHVmXOXbsmA4ePKhYLJZ6LxgMatGiRero6JDf73e6GwAAAAAAAAAAAAAAAIBjCCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACALatXr5ZhGKlguMbGRjU0NMjlyn1Kq0gkYgmY27Rpk9PdwwywEx7o9/u1Z88ehUIhbdiwwXKe1NXVaenSpaqqqnK6KwAAAAAAAAAAAAAAAIAj5jrdAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMwOLpdLmzdvtrx37NixSdX1xhtvWMqPP/64091DgamqqlI4HJZpmpb3N2zYoGQy6XTzAAAAAAAAAAAAAAAAAEcQQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADb0gMIn3/++ZzrSCaTamxsTJV9Pp/cbrfTXUMB8ng8On78uLxeb+q9WCymF1980emmAQAAAAAAAAAAAAAAAI5wOd0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzB4ej0emaSocDkuSOjs7tX///pwCBI8dO2Ypb9myJac2RKNRffrpp5o/f76WLFkil2vqptSKx+NKJBLTVn8+ksmkzp8/n2pbSUmJ002aES6XS4FAQIsWLUq9t23bNj3++OM5nXejj62kgtuH0WhUkvTxxx/r9ttvl9vtlsfjmdJtTNf5PXJujm6/x+OZkmDR0XVLmrJ6R/ZHLBaTJH3hC18gCBUAAAAAAAAAAAAAAMwKc51uAAAAAAAAAAAAAAAAADAikUgoEAgoEAioublZfr9ffr9fe/fuVSQSmXS9yWRS0WhUXV1d2rt3r6XeUCikeDxuu654PK5oNKpoNKpEIjFmO6FQKNWHQCAwZhkAAAAAAAAAAAAAAAAAAG4EP/rRjyzlQ4cO5bT+D37wg9RrwzC0evXqCZdPJBLavn27KioqNGfOHJWWlso0TZWWluqWW25RRUWFtm/fngpwy0UymdTevXtVXV2tOXPmaNGiRWPq9/v94z7LOGfOHMtPaWmp5felpaVjlhn5CQQCWdsXiUTk9/u1ePFi3XLLLZa2zZkzR9XV1WpublYymbTV30AgkNq+3+9PvR+Px7V3797UPh75mcw+nQ4ej0der9fyXmtra9b1Rvq1ePFiy7EdvQ8rKirU1dVla5+N/IxWV1c37jFevHjxhO2LRCLavn176twpLS3VmjVrVFpaqkWLFqWOU77HIRKJqLq6OuP5PXL95PJMrXT92unq6lJ1dXXq3Bzd/uLiYs2ZM0fNzc05P1M7cs3PmTPHUvdIvRUVFZN+xjgQCMjv96eu95Hzobi4WIsXL5bf75/wfAAAAAAAAAAAAAAAAHDanOHh4WGnGwEAAAAAAAAAAAAAAIDCMHoyFJ/PZ2tSm/H4/X51dnamyhM9ppJMJnXw4EHV1dVlrdfn82n//v1yu9222hGNRrV+/XqFw+EJlzNNU8FgUB6Px3a/Ojo65Pf7lUwmtWPHDrW1tY1Zvr+/XyUlJZPejwAAAAAAAAAAAAAAAAAAFKJkMqlbbrklVTZNUydPnrS1biKRUHFxcarc1NSkXbt2jbt8KBTShg0bFIvFbNXf09OjqqoqW8tGIhE9+uijWZ8zHNHe3q6tW7da3ksPo8vFRG1NJBLatGmT5XnMiRiGoaNHj6q8vHzC5QKBQOqZzZHnRUOhkNasWZNx+XyfhczlmdJs0tuZ7byLx+MyTdP2uePz+bRnz54xz5OO3me5muiZ3ObmZjU2Ntquq729XU899ZRcLte4y2Ta3xMd33RHjhxRTU1N1uWSyaQeeOABBYNBW/UahqGXXnopa925PFc8YuSZ3mzi8bj8fr/tNjc1NamhoWHC/Q0AAAAAAAAAAAAAAOCEuU43AAAAAAAAAAAAAAAAADe3aDSqO+64w/YkIZ2dnXrooYeUTCYnXC6ZTGrv3r0qLS21NSlQOByWaZqKRCI5tT8ej+uuu+7KGD4IAAAAAAAAAAAAAAAAAMCNyuVyqb6+PlUOh8OKx+O21j106JClvHnz5nGXbW5u1po1a8YEyJmmKZ/PJ6/XO2adNWvWqLm5OWs79u7dK9M0Mz5n6PV6ZRjGmPe3bdumUCg0Zfvx9ttvz/h+NBpVWVlZxvBB0zQz9jsWi8k0Te3duzenNgQCAdvhdE6rqqqyHJdwOKxEIpFx2fHCBw3DkM/nk8/nG7NOZ2enrSC7XFRWVmZ8PxQKZQwf9Hq9457b27Zt08GDB3PafqbjO945JEnr1q3T9u3bs9bb0tKSMchvZN+apml5PxaLad26dYpGo1nrzfRc8ch+yXRd1tXVZb0uI5GIFi1aNKbNE50PjY2NeuCBB7I+twwAAAAAAAAAAAAAADDTCCAEAAAAAAAAAAAAAACAozZt2mSZ2MU0TdXX1+vIkSPq7+9XR0eH6uvrLZOcBIPBrJN5vPjii9q2bZvlvfr6enV0dKi/v1/hcFgdHR2WyUJGJt7JJYTQ6/VmnHhoZDISt9vt9C4GAAAAAAAAAAAAAAAAAGBaPPnkk5byvn37bK23e/fu1GvTNOXxeDIuF41GxwS0dXR06MqVKzp58qQCgYC6u7s1PDysI0eOWILJGhsbJ3weMB6Pj3nO0Ofzqb+/X1euXFF3d7cuXLigixcvjql7zZo1lrDF4eFhy09/f7+l3v7+/jHLjPyUlJRkbF/685WGYSgcDqf6PtLv/v7+MUFy27Ztsx0GGY/HtWPHDst22tvbU89x9vf3a8mSJbbqmin333//mD5k6tfo8EHDMNTT06PBwUFduHBBgUBAgUAg47kTDAbV1dVlqc/v9485dqN1dHSMe4y3bt06pn2hUMgSCjjyPOrIuTdybl+5ckXt7e2Wdevq6sYNXcxkJMxvvHPo4sWLljBRSWpra5sw0K+5udlybdbX16fO85F9e/LkSQ0ODo4J9lu/fv249SaTSUu9IwGho/fLhQsXdOXKFYXD4THX5XhtTiaTevTRRy3v+Xy+jOdDf3+/JTwxGAyqpaXF9v4GAAAAAAAAAAAAAACYCQQQAgAAAAAAAAAAAAAAwDHxeFzBYDBV9vl8OnnypPbs2aOamhqVlJTI7/drz5496u7uVlNTU2rZYDCoxx57LGO9iUTCMinQyIQpe/bskd/vV0lJicrLy+X3+xUIBMZMHJM+wch4du/enQofNAwjNanR8PBwajKS8SZFAgAAAAAAAAAAAAAAAABgtisvL7cEddkJIIzH46ln7yTpRz/60bjLbtq0KfXaMAz19/fL7/fL5XKNWbampkZ9fX2W5wEnqnv79u2WclNTkwKBgEpKSiz1ezwe1dTUjAk78/v907Zfu7q6LM9Xer1enTt3TuXl5WP6XlJSou7ubnV0dEzYv/EEg8FUSF97e7vOnTunrVu3pp7jTN8fhaC2tjbrMt3d3ZYAx/fff19VVVVyu91jlq2pqdH7779vee+JJ56Y1j48//zzqdder1dvvfVWxuPrcrm0devWMce3oaEhp+1NdA55PB7t2bNHR44csbz/9NNPZ6wrkUjo9ddfT5Wbmpq0Z8+ejGGabrdbgUDAEkIYDofHBDyOOHbsmKX8wgsvjLtfysvLLdelYRg6e/ZsxnoPHjxo+bvT0dGhQCCQ8XwoKSnR8ePHLW1ubGxUMpnMaZ8DAAAAAAAAAAAAAABMJwIIAQAAAAAAAAAAAAAA4JhXX33VUm5paZlw+V27dqmpqUmGYai9vV379+/PuNzoCYek6xOVlJeXj1tvTU2NXnrpJcvy0Wg0a/tHJiLxer3q6+sbd1IjAAAAAAAAAAAAAAAAAABuVKOf2YvFYopEIhMunx5SuHbt2ozLhUIhSwhfa2trxoCz0dxut1pbW1Plzs5OJRKJjHV3dnamyj6fT7t27Zqwbo/Ho9dee00+n089PT3q7u6elv2ZTCYt4XeGYeif//mfsz6f6Pf7LYFpnZ2dCoVCtrfb3t6urVu3zsrnID/++OOM+2NwcFAdHR3q6enJeu6UlJSoqakpVY7FYhnPnakSCATU39+v+vp6BQKBrPt948aNlrDPeDye0/bsnEM1NTWqr69PlcPhcMZzyO126+TJk+rp6VF9fb2tMMQ9e/ZYypcuXcq43OhgRtM0VVVVNWG9Ho9H4XBYR44c0blz5zIGgyYSCe3YsSNV9nq9WQNEXS7XmOeUDx48mNM+BwAAAAAAAAAAAAAAmE4EEAIAAAAAAAAAAAAAAMAxvb29qdderzfr5C7S9RDCc+fOaevWrXK73WN+H4/HLZMCtbe3y+PxZK23pqbGMjHLc889Z7sf+/fvz9gWAAAAAAAAAAAAAMCNLRqNas6cOamfaDTqdJNm1Oi+BwIBp5sDAAAc8vjjj1vKP/7xjydcfnQAYX19/bihaP/yL/+Sem2apjZu3GirPenLHThwYMK6JWnLli226q6qqlIgEMgaipaP8+fPKxaLpcqtra22n1FMD3k7ceKErfUMw9BTTz01bX2aagsWLLCU//2///cZl3O73fL7/baP18MPP2wp5xryl6uSkhLt2bPH1nOuLpdL9913X6o8+lnZbJqammyfQy0tLZZy+rUyWlVVlfbs2WMrtNLj8cgwjFT58OHDU7YfPR6Pampqxm3H73//e8s1lR4sOB63220Jpdy9e/eUtRkAAAAAAAAAAAAAACBf2Z/YAAAAAAAAAAAAAAAAAKbJ6AlTgsGgksmkrUlIJlrmf/yP/2Epp09sNJGdO3eqrq5OktTW1jZmIp5MmpqabAUnAgAAAABmv3g8rlgspkgkMuZ3fr/f6eYBAAAAmCLxeFzbt29Plffv3297kv5M9u7dq97eXklSZWWltm7d6nQXgWmRfu3kw24ABwAAAAqD2+2Wz+dLBaK1tbWptbU147N+oVDIEgT25JNPjlvvmTNnUq/vu+8+W88XStefMfR6vQoGg5Kk3t7eMWOx0XUbhjGtgYK5On36tKW8fv162+t6PB7LscjU90zGO16FasWKFZby/Pnzp6Te9HpOnz5dUM+Irl692lJOJBK27lk89thjtreRfj2Pvlbydf/996fqPXXqVMZlli9fnnodDocVjUbzPgbp3+/mUl9ZWZmlPQAAAAAAAAAAAAAAAIVi9jztAwAAAAAAAAAAAAAAgBtO+kQoLS0tamhoyGsSm7Nnz1rK+UwGG4/Hs05qmcukLAAAAJh9otFo6vWSJUvy+qyaSCQUj8dT5UKapBCYCdFoVKdPn9alS5c0MDCg3t5eVVZWauHChVq6dKm+/OUv5zWGm07xeFymaVomw01HACEAAABw40gkEqnJ8KXrY4Lu7u5J19fb22upjwBC3KjSr518tLS0EEAIAAAwy2zZssXyefDo0aOqqakZs9zBgwdTr03TVHl5+bh1jq4v/XnDbEZ/nswUdDa67vvvv9/hvWf1wQcfWMq5foc2uu9vv/22rXUqKyud7nZO0kMaJ2vke/yR7zEPHz5s+f2lS5cc7Wc8HlcikVBvb68kaffu3WN+b+f8WLJkSU7bHX0OdXZ2KhAITKr90WhUn376qSKRiPr6+izn43hhfn/1V3+lxsbGVLm0tFRNTU3avHnzpMeJx44dS732er2TqmN0n3jeAwAAAAAAAAAAAAAAFAICCAEAAAAAAAAAAAAAAOCY9evXyzCMVIBDY2OjGhsb1dTUpLKyMpWXl2v+/PnyeDy2J9AZPfmL1+u1BMbkKpFIZJ2shEkvAQAAbmylpaWp1/X19dqzZ8+k6zp06JDq6upS5eHhYae7B0y7RCKhQ4cOaceOHRnD+9JDCXw+n7Zs2aKqqiqnm54SCoW0Zs0ap5sBAAAAwEHBYFCBQIDg8VkqEAhwTwYAAACYAatXr7Y8D/jcc8+NCSBMJpNqa2tLlTdt2jRuffF43FKuq6uzfLbPRXrQWXrdtbW1Tu8+izNnzqReTyYsbXRYYywWUzKZlMs18XRjuYYcOi09GDBb+5PJpD788EO988476u3t1alTp8YNwHNCIpHQb37zG/3Lv/yLzpw5o7fffjvj96uTle34p0sP/Mx2DsXjcXV3d+vYsWOKx+N5hdNXVVXJ5/NZ6hh5vliSDMNIhYbW1taqvLx8wiBTyRpYGQwGNWfOnCnbtwAAAAAAAAAAAAAAAE4hgBAAAAAAAAAAAAAAAACOcbvdeu2118YEOYxMEpLO5/Pp0Ucf1dq1a8edyOTUqVOp18Fg0BIYM119AAAAwM2hra1NTz75ZNaJ61CYRoLwRqxfv57P89NsMsF9nZ2d6uzslNfr1VtvvZXzRJhTLZFIjOmD1+vVihUrxky6OdNCoZDOnj0rSVq6dGlBhTYCAAAAN6K6ujpVV1fL4/E43RRg1vD5fJMOcuFaAwAAmH1cLpc2b96cev4vGAwqkUhYvpM7evSoZZ3HH3983PoSicS0tXU6655qU/HZ+Pz58yopKZn27cykw4cP22p/MplUS0vLuM+lOi0ej8vv9ysYDDrdlAmNdw5FIhGtXbt2SsMSJenll1+Wx+OxBJaOiMViqXDC0SGFHR0d8vv9Gesr9P0LAAAAAAAAAAAAAAAwGQQQAgAAAAAAAAAAAAAAIKN4PD4j26mqqlJ/f782bdqUdYKPkSAKwzB09OhRx4NfvF6vo9sHAADAzFu7dq36+voIrpuF4vG46urqUuX+/n6O4zQaL3zQNE2tXLkyNQFoPB5XPB4fMx4MBoO66667FAwGHZ3sdHRopSQ1NTVp165djrVntOeffz41oabP5yOAEAAAAJgBXq9Xx48fdzwsHZgtamtrxw1/AAAAwI1pdAChJB04cEBbt25NlZ977rnUa5/PVzDf1y1YsMDpJozr1KlTTjehII1+xnW8ZzkTiYTKysrGDccb+e6ysrJSCxcuVHl5uc6dO6d169bNSB8ikYhM0xz39z6fT9L1sdWCBQu0YsUKvfzyywUTprh3715t27Yt4+8Mw9D9998vj8ej1atXa+nSpbr99tttPSssXQ803bNnj7773e/q5Zdf1uuvv65wODzhOnV1dTpw4IDeeust7t0AAAAAAAAAAAAAAICbAk9IAAAAAAAAAAAAAAAAIMXn86XCC+xM8DGRXCa9KSkpUXd3txKJhN555x39/ve/V29vb8YQCkmKxWIyTVP9/f0qKSmx/G7lypWpSUZM09TOnTsn3YdsIRdOhmAAAADAGbFYTJs2bVIgEHC6KUDBSiQSY8IHfT6fnnnmmXGD5BOJhA4dOmQJiQyHw9q+fbuj19vu3btTr03TLJjwQQAAAADOCIfDamlpYWwAAAAAAOPweDwyTTP1DN/+/ftTAYTpzwNu2bIlp7qPHDmimpqaaWn3pUuXnNlhNmQLXcvk8OHDlnL6c5azXSKRsJxL99xzT8blNm3aZAkfNAxDra2tqqysHHefzJ8/f0b6kEwmtXbtWst7Xq9XP/jBD/QXf/EX4z6fWlZWNul9lkvg57Fjxyzl9P0ViUTGhA/W19frySef1Be+8IVxt5Xrc7clJSXatWtX6l5MPB5XIpFQb2+v+vr6xgQTBoPBjPduDMNInQs+n49nPgAAAAAAAAAAAAAAwA2BAEIAAAAAAAAAAAAAAACMK5lMyuWa3CMmoyf0ME3T1jputzs1QdDIpEPS9QlDuru7tWPHDstkMF/72td04cKFcetbuXKl/H6/o/sQAAAAN57Ozk7V1tbyWRMYx6FDhyxlr9ebdQJHt9stv9+vpUuXWsILOzs7tWXLFlVVVTnSl9Fj229961uOtAEAAABAYWlsbNTDDz88bsA6AAAAANzsfvSjH2ndunWSrn/XEo1GVVJSoldffTW1jGEYWr169YT1LFmyxFKeypDA9DC1vr4+Z3damvSQtlyf5YzH4053YVo1NDRYyo899tiYZaLRqDo7O1PlQgudO3jwoOV52I6Ojml9BiEej+cUQJjtHPrRj35kKff3989I0KXH45HH40lta9euXQqFQtqwYUNqfzY2NqqhocFyzdx///2p8+HUqVPT3k4AAAAAAAAAAAAAAICZMNfpBgAAAAAAAAAAAAAAAKBw1NbWWsrHjh2bVD3RaNRSzjekwePxyO/369y5c/L5fKn3Y7HYmG2Nnnhn9OQxAAAAwFSqq6u74SdtBCbrwIEDlvJbb71le92qqio1NTVZ3jt79qzTXZIklZWVOd0EAAAAAA7p6OiwlNeuXatkMulIW9K/G5uO+hOJxKTWm659Mp11F4KZ6F8ikbip7mXF4/FJ9Tcej0/q/Ldruo/DdP19SCQS07pfAADAjWft2rWW8ssvvyxJ2r9/f+q9zZs3Zw3Uc7lcMgwjVT58+PCUttM0zdTr9957z7H9lUl6OOPRo0dtr5tIJBQMBlPl0c9c3gii0aja2tpSZdM0MwbfnT592lLesmWLrfo//vjjGelH+vm8cePGSa032e1NJJFIWJ6/9Xq9Y5ZJ/72d8MFkMqm33347r/2WSVVVlb73ve9Z3jt//rylXFlZmXodDoenvA0AAAAAAAAAAAAAAABOIIAQAAAAAAAAAAAAAAAAKdXV1Zby008/Pal6GhoaLOW/+qu/mpL2uVyuMZPApE8S89d//deWMhMhAgAAYKqkT6rn9Xpv6MnvgclIJpNjJjTNNnlsul27dqm9vV0dHR0aHByU3+93pC83UzADAAAAgIlVVlaqvb09VY7FYnrsscemfbvJZFKBQEB+v18VFRWaM2eOSktLNWfOHFVXV6u5uVldXV227k/E43H5/f7UT/o2Fi9enKq/uLg4tY1QKJSxvkQioebmZst6t9xyiyoqKrR9+3ZFIpEp7fNI3X6/X4FAYMI+j+6n3+/X7t27J/z96J9MY8G9e/emfj96fyQSCXV1ddmqYyr7l8txHdlGcXGxFi1aZDl3ZuP3qOn9HdnX6efxokWLUv2tqKhQKBTKuE8zrVdcXKzFixePOd6TkUwm1dXVlfE4+P1+7d27d9KhgVP59yHTfh6pe/HixSouLlZxcbEqKirU3NysUCg0K88fAAAwc1wul+rr61Plffv2KRQKWUK/Nm/ebKuu0ct1dnZO6eeQb33rW6nXwWBw2gPfP/30U9vLjg5Lk6RnnnnG9roHDhywlGtra6e1XzMpmUxq06ZNlvd+9KMfZVz20qVLlnJVVZWtbUz2uVkpt5C/0UF8dr9TjUajluC/XDz77LO2lz106JClvH79eks5fdz7+OOP26r34MGDisVitpbNNcA9vQ29vb2Wcvp1kO94DwAAAAAAAAAAAAAAoBDMGR4eHna6EQAAAAAAAAAAAAAAACgcfr/fMkFJT0+P7YlXpOsTnJSWlqbKpmnq5MmTGZdNJpM6ePCgBgYGtHXrVlv1JxIJFRcXp8pHjhxRTU2Npc5bbrklVa6vr9eePXts1/1nf/ZnE07kMnr/+Hw+BQKBKdnvAAAAKExz5sxJve7o6NCxY8fU1taWeq+9vd32Z9lAIKC6urpUOddHuePxuGKxmCKRiI4dO6Y777xTq1at0l/8xV/I4/HYrmf0xJlLliyxfP4NhUI6e/asjh07JklavXq1li5dqtWrV4/7OTmZTOro0aO6dOmSjh07ps9+9rP6yle+ohUrVqikpCSv/Z+pz1/4whe0YsWKMW2fqJ/S9fDydevWpcpHjhzRihUrMq7r8Xjkdrst742e4NDtdo/Z5/F43DLhaaY6svVv9L7L1r9cjmskElEkEtHAwIB6e3tVW1urpUuX5nzu2D1mixYtSpU7OjpmLEAwkUjonXfe0aVLl9TX16czZ86otrZWCxYssLVP0yexTD9nmpqaJgwYyXa+53MNZ5pgc9OmTamwR6/Xq/3792dtW3o9uZ5nkvVcs3OeAwAAALNR+vdd/f39KikpUXV1tSV0Pf17qvFM5vulSCSitWvX2pqY3+v1KhAITDi2SO/T8PCw4vG4TNPMuo2mpibt2rVr3LrGk8t9k1z7bBiGjh49qvLy8jG/G30/J1cXL14csx9HH7+RcW4oFNKaNWsy1jFyvkxX/0bLdFyTyaTuuOOOrNsxDEMvvfSSrXPYrvT2TPV9gUzX5pIlS3TXXXdZwmwySb/27J7/9fX1am1tzXofKlO7HnjgAcvfjPFM57Vi5+/DaF1dXXriiSdsnT/hcFgej2fMPdSZuhcEAAAKWyQSkWmaqbJpmqnPbBM9U5gu/XnB9PHJeEbCq//hH/5h3M/V6XV7vV51d3dnrTsUCmnDhg1qbW3Vxo0bx/2smO/n4/RnOe2MQdM/5xqGoXPnzmVsY77fX+cqvT+5bi/T5+CJxtjp/bPzLGymsV624zb6XoFhGLpw4cKk9sfg4GDW7922b99ueV5BGn8Mml6/ZO8cSiaTY8ZYmdo2ehxg55oeb6yafh4kEgm1traqsbHRMu7IJv3YZdovFRUVqX5NdG2ka25uVllZ2YTXOwAAAAAAAAAAAAAAgCOGAQAAAAAAAAAAAAAAgFH6+/uHJaV+DMMY7unpsbVuOBweNgzDsn5/f7+tZZuammxto6mpKWv9dpZJd/HixWHDMLL21+fzper1+XzTfjwAAADgrNGfKzs6OoavXLky5jNvOBy2VVdHR4dlPbsyfc7O9NPe3p5zn0Y+K/f09Aybpjlu3eN9Tu7o6JiwbYZh2Po8nu7IkSO2+lxfXz985cqVrP3M9aejo2PC4zd6LNDR0ZFx32WqI9djOlH/7BzXcDg84XEd6cvg4GDOx8huW7xe75TWncnFixeHvV5v1v1pmuaE12v6NZrLz0T9nIprOJ+2jf57kz7mtzsWH92X0evbvV8AAAAAzDbpn51Hxlkj3yeN/t3Fixez1pfr90vp33XZ+ck2Bk/v05UrV2yNpdI//w8ODtoa4+T6fVp9ff2kxjuZxlJTMX4a7/h1dHRkHaNlOg6T7V+2cVu+xzXbPYxcpbdnKuvOVH9/f39O/R1pz5UrV7LeM8nl/kZ6u8LhcM7Hwev12roP1N7ePqm/D3buYeZ6nhqGMXzx4sVpPeYAAGB2G+8z15EjR3KqJ32MlO0zR/rnPZ/PN+5nrfS6s313lv5diWmaE7YlfVk7Y8gR6Z8zs303k2nMOtG+muz315M1emxld3uDg4PD/f39GT+rZtuf6fsv2+f6I0eOTGrMlN4vu+d3+mf7ibZz5cqVcT+vj3cvIL1ddtp38eLFMdfteOPS9DHPRPckJvo+N11PT0/GcUc26e3OdB2n123nu/LRfyNM05zU8w8AAAAAAAAAAAAAAADTZa4AAAAAAAAAAAAAAACAUUpKStTU1JQqx2IxrVmzRtu3b1c0Gs24Tjwe1/bt22WapmKxWOp9n8+nkpKSjOt84QtfsJQbGxvV3NysZDI5btvi8bgaGxst7y1ZsmTMcjt27LCUS0tLFQgEJqx3pO0j/R2vrwAAALi5uVwuvf/++5b31q5dO+Hn2MlKJpMZP2ePZ9u2bfL7/Tm3JRKJaM2aNQqHw+MuM/I5OR6Pp94LhUKqq6ubsG2xWEylpaXq6uqy1ZZEIiG/369169bZ6nNbW5vuuuuuKf/8XllZmXWZkeNTV1c34b7LtI7dY9rW1qY77rhjUv0bGedka1tnZ6fKysoUCoWmdB+OCAaDlvNmqo30MxgMZl02HA7LNE01NzdPeTtWrFgx5r2Zuoaz8fl8qdclJSUyTTNV3rdvX051vfHGG5by6tWrp7StAAAAQKHzeDx66aWXLO/5/f4p3UYkEhnzfVh7e7v6+/s1PDyc+unv77d83h8Zg9sdU+zYsSM1lqqvr1d/f7+uXLmSqnv094WStGHDBkWjUT300EOpMU5TU5PC4bBlvfb2dst6nZ2dWce1gUBAbW1tlvfq6+sVDoc1ODio4eFhXbx4UeFwWF6v17Lctm3bFIlELO/19/dbftL7kv770T/Z9PX1qa6uzvJeU1OTOjo6Uj8ej8fy+66uLtv9G31MpevfoeYyZn/ggQdSx9Xn8ykcDuvixYsaHh7W4OCg+vv7x+zDuro6JRIJ29soJJs2bbKcx+nnY0dHx5i+RqNRPfbYY6l7JunrXbx4ccx6wWAwp+Owdu3aMe0aOdYjx6G+vn7MNlpaWiasNxqNatu2bZb37P59ME1zwuMcCoWynqeDg4MKh8Opto/UCwAAMJ5NmzZlfH/t2rU51fPYY49ZynV1daqurlZXV5ei0aiSyaQSiYQikYj27t2ru+66y/IdWW1trVwuV8a60581HPnubO/evYpEIorH44rH4+rq6kp97zPCMIys31GN/lwWDoe1aNEi7d27V4FAQNFoNPWT6bNaSUnJmDHCyLOcI31PJBIKhUJqbm4e852UYRjauHHj1B3QKeb3+yf8mTNnjoqLi1VaWprxs+rx48fHjL9G83g8MgwjVQ4Gg6l9N/L9ZTweVygU0vbt27Vu3brUMUvf7xPZsmWLpbxu3Tr5/X4FAgFFIhHLcR5t1apVlvKOHTvU3NysUCikZDKpZDKpaDSqrq4u3XXXXal90NPTk/O+rq+vT+2LdevWWc6hkX2wd+/ejN8vp19/I+655x5Lef369anrRrr+3X80Gk3VGwwGZRiGjhw5MmFbq6qqMo5n9u7dm7reR4xc936/39JuwzDkdrsz1j36Gh59vY9cTyP7PRAIqLq62nKPZtGiRRmfWQYAAAAAAAAAAAAAAHDKnOHh4WGnGwEAAAAAAAAAAAAAAIDCkkgk9NBDD407OY7X65XH41E8Hh93GdM01dvbm3ESjxFdXV2pSVtGq6+vHxNicPjwYXV2do5Zbs+ePRnrDgQCYyb/NE1TK1euVGVlpRYuXKhjx47p4MGDY4Igenp6VFVVlbFev9+faofP55sw2BAAAACz35w5c1KvOzo6UqECe/futUz2beezYfpn1GyPcldXV4/5vO3z+VRZWakvfOELunTpUsbPtF6vV2+99da4k2iO7tORI0f0xBNPpNb3er265557VFZWpmPHjumXv/ylZaI+0zR1/PhxnT9/XqWlpZb3v/Wtb427niQNDg5OOD5IJpO64447xnw+N01T9913n1avXq2+vj6dOXNmzNhAuh4eMDoAPT0AIn38MjKuyWT//v1j2jr6+Pl8Pi1fvnxMIMRoo8+Xkf6lT3aaT/9yOa4jY6Ha2loNDAyot7dXb7/99pgJSM+dOzfueZOL7du3WyYB9fl8evnll6ek7tFGh8mn78+//uu/1qVLlzQwMKD9+/eP2e/hcFjl5eWW90KhkJ5//nlL/aPPmZH9mMmWLVvGjCOn8hpOb5skyzE0DEP3339/xrbV1tZazsX0v0UTjYFHS79Gm5qatGvXrik9pgAAAEChiEajlnFvpjHn6LFbe3u7tm7dOm59uXy/VFFRkRrDGIah999/f8LxYPr3benj0fH6NGKiMUGm79vsrJfepon6nEgkVFZWZhnfvPbaaxOOU9LbZZqmTp48aXv5XP97ffrxHtHU1KQdO3bkfL/jyJEjqqmpyal/x48fzziuHu+4jncejGhubrbc15joe9dcpLcnWzvyrd/OdkKhkNasWZPxd7msN9F5Nl67sh3rSCSitWvXWs6Pie6hpf99OHr06Jj7G6PZ/fswmfM0FAppw4YNY+7lTfUxBwAAs1sikVBxcbHlvcl+9oxGo/ra17425vNHNna+B4nH4/J6vWO+T5qIYRgKh8MTBuCNtw8ymeiz2o4dO8YE8GXj9XoVCAQmbF++Y6VcjTe2ylW2z6qjjfeM6nhGvqd77LHHUm218xnXbt/S93H696rZjNx/GP3d8HjfI49uU0dHh6qrq7Vo0SLb28o25hjv+/2J9Pf3S5Jl/JTpvMv2DHO2dk90bSaTST3wwAM5111fX6/W1tYp/84bAAAAAAAAAAAAAAAgL8MAAAAAAAAAAAAAAADAODo6OoYl5fzT0dFhextHjhyZ1Da8Xu/wlStXJqw7HA4PG4aRU709PT0T1unz+VLL+nw+pw8RAAAAptlEn3O9Xq/l90eOHJmwrvTP1xPp6emxLGua5vDFixczLjs4OGj5nJrtM/no5UY+LxuGMdzf3z9m2StXroyp2+fz2Vqvvr5+zHoTaW9vH9O2cDiccdmLFy+O2f9er3fC+vv7+y3LZ2q33eNnmuaYvmWrL/3459o/0zQnrD/T+MYwjHHPy0zbaGpqymmfjOfixYsZ29LR0TE8ODg4ZdtIH++Nd41cuXIl4/7PNqZMP2dyGetO5zU8YrLj08HBQcu26uvrJ9Wn8c5fAAAA4EaQbQx55cqVMWOSicaFdj+/p49dst1ryFT/eOPH9D7ZHXukj4ElDbe3t+e83niamppy+q5uvPUm6ksu92Sy7d9c9kGu7Rwt/T7JeOtlOq52xveZzuGpkN4e0zSHfT6f7Z9sY83J9jf9Hojd9dKP/Xhj+8leX8PDY8fb47Ur/Xt1u/Xb+fuQfo3YrTvT8wS53D8BAAA3h/TPVPl8vzA4OJjxs91knwUcLdP3m+P9TPQ9Xyb9/f0Zx1a5fI7K5VnOpqamrN+DZapzumUaW9n9MQxjuL6+ftzP5BNJH1/ZeSZ1dFvtfMYdHBwcM/7L9JMu0/fxEx3XEXbuR2TqQ/r4Y6J9YWdfX7x4Meu5nX49po+fxnPlyhVb+3Sy16bd82Iqv0cHAAAAAAAAAAAAAACYanOGh4eHBQAAAAAAAAAAAAAAAIwjHo/L7/crGAxmXdbn82nPnj3yeDw5b2Pfvn1qbGzMuqxpmtq5c6c2btwol8tlq+6///u/V1tb24TLeb1e/cM//IPKy8snXM7v96uzszPV30AgkPc+BgAAQOGaM2dO6nVHR4f8fn+qHI/HtWjRolTZMAyFw+FxPw8HAgHV1dWlyuM9yp1MJnXHHXcoFotJuv4Z+Pjx41k//47+rGqapk6ePJm1T3baLUkVFRUKh8N5r3fx4sWMyycSCRUXF6fKpmmqt7dXbrd73LqTyaR27Nhh+azf09OjqqqqjMtHo1GVlpamyv39/SopKZFd6cdvZB+8//77WeuZTP8kafv27Zb+HTlyRDU1NRmXncxxTT/XpPGPUa727t2rbdu2ZfydYRi6//77VVtbq6VLl+r222/XkiVLbI3xRu/T1tbW1DhyomM/3v4Mh8MTjgHTz5n0vwF296vda7i6ujo19p7oGh6Rz/g0fV8MDg7mdD7aaR8AAAAwm9kZQ0YiEZmmmSobhqFz585l/Oxv9/O73bF9tvZmGu+kLyPZGwtkGt/ZWS99HD3eeHP0eDaXPqePvSbar3bvyYxn9HEZaaedcd5U9s/r9aq7u3vMcunHdaLzMF36sZ2KewKZzrNcZLtfM9nzOBQKac2aNTltK9N6462Tz3GQxt5Dy3SOTvbvQ/o9zEz3UEbXnUvbM91bsnv/BAAA3Dyi0ah6e3tT5an4rDBS5+HDh/X222+nPo+MfAf16KOP6utf/3rWz4kT1X3s2DH98pe/TH1OG6l7y5YtWr16dU7fa40IhUI6e/as+vr6dObMGcvvtmzZkvW7rng8rl//+tf64IMP9N5776W+V/J6vbrnnntUVlam6upq25/rp+PY2Ol/Lka+S8zle91MRr5bPHPmjGV85/V6tWLFCj355JOWcfTotlZWVtre/sg+HRgYsOzbEeONW6PRqJ577jmdPn3a8qyuz+dTZWWlHn/8ccv5PLqe9evXZzzXx+tDIpHQoUOHdPjwYcs4YOT72/Lycn3pS1/K6RwPhUJ6/vnnderUqTHXzKOPPqq1a9em6hvZ/ohs510ikdA777yjn/70p5b6R+8jj8cz5hjaMfqaev311y11j+z7v/mbv5mS788BAAAAAAAAAAAAAACmAwGEAAAAAAAAAAAAAAAAsCWRSOg3v/lNakKSvr4+lZWVSdKkJhzJJJlM6sMPP1QkEpEkDQwMaOHChZKkBQsW6O67785rIo/Rk4WMtH3BggU5TTYUj8eVSCQkSW63m4lFAAAAbnATBRBKUldXl9atW5cqjzcZvGR/svv0Ou0Eq0ljJzofb730oDo7k4JnCt+zs156X8abpD09DM1un9OD/QzD0IULF2ztn6kIIJwoEHC05uZmS+B6Lv0rKyuzTJo6Xv8mc1wz9SvX/TKRrq4uPfHEE5ZJ6Cfi9Xq1fv36nCZxTCQS+v3vf29rMsn08yXbPppsAOFUXcPZAhLzCSBMD0rJdi4nk0ndcsstqXJ7e7u2bt1qe3sAAADAbGN3DJke4FZfX689e/aMWc7u5/ds9yEmkm3d9D7ZHUekB7DZXS993JFpH9oJRptI+v4f717LVAcQZhuvjUgfh9q9j5BL/9KPa1NTk3bt2mWrfjvHKFf5BhBmC0FMr3+ie3HTsd54xzCf4yCNPUczhSouXrw4dY8l13F5tr8Po3+fa93p5ykBhAAAAAAAAAAAAAAAAAAAAAAwM/Kb8Q0AAAAAAAAAAAAAAAA3Dbfbraqqqpwm/cyVy+VSeXm5rQk7J8Pj8aimpianiT0z1UHoIAAAAEbU1NTI5/OlJqEPBoPau3dvXsFcH3zwQeq11+u1/Rm8pKREpmkqHA5Lkg4ePGhr3Y0bN2ZdprKycsx769evz7reihUrLOXe3t6ME9mfPn16Un12u91qampKhfvFYjElk8m8w9Ht8Hq9tscW7733Xuq1aZo59a+1tTU1AX0sFlMikcgaoG4Yhq3jKo09tuMdo8moqalRX1+fDhw4oP3796fOzfEEg0EFg0Ft27ZN9fX1am1tzXos3W637TFk+n47duzYtEyIP1XX8I9//OOMwSVToby83LKtZ555ZsLz+dixY5by448/Pi3tAgAAAGabp556yjLeaWtr08aNGyf1fVoikbCUly5dOul22Rnv1NbW2qrr9ttvt5Qz3SPIZP78+ZZypvFmemB9+rayWbhwoaVsZ8w8FQzDsLVcPB63lNPvk2TzhS98YUx92b6nLCsrs12/nWOUL5/PZ/tck5Tz97B292n6eWF3O+nLXbp0ydZ6uRwHaex1FY/HLW1OJpOW62XVqlU51W8YRmr9w4cPW/4+pP/tSb+ussm1LQAAAAAAAAAAAAAAAAAAAACAqUEAIQAAAAAAAAAAAAAAAAAAAADk4eWXX9bbb7+dmsR727Ztqq2tnfSE7aPD6nKdmH7lypWp0IP0Se4z8fl8tsL6lixZYil7vV5bE/rb3QfBYDD1Otdgs8ceeywVQChJ58+fn/LJ8jPJpZ2j+7dz586ctpNtAvpM7r//ftshjOn7amBgYEr3k9vt1tatW7V161bF43H9+te/1u9//3v19vZarpt0bW1tOnjwoMLh8JSGwI8O3bNzjUzGTF7D+di5c2cq3DIcDk8YZPGDH/wg9drn881IoAcAAAAwG7hcLgWDQS1atCj13oYNG9TX15fz5+b0McAPfvCDnMZDowPGpnM8kWs42UQikYilnH7/IZvJjJmngt3j0tvbO6n1RqSPKWOxWNY6ysvLp73/uaitrc0ahpmP1atX21oufb/ZDUWc7PmUa4Bo+nbSwyDPnz9v+X2ufx8mkv73wm7I6Ihcg0MBAAAAAAAAAAAAAAAAAAAAAFODAEIAAAAAAAAAAAAAAAAAAAAAyIPL5dLRo0dlmmbqvfXr1+v48eO2Q+BGGx1W99nPflbRaNT2uqMnDO/s7FQgEJiyPo422QnODx8+PGbS+fT+5TtB++nTp2ckgNDuZOzpk7gvWLAgp+2k7+v0CegzWb58+aT71dvbq61bt07djkrrS01NjSSltpFMJvXhhx8qEolo9+7dqfA96XqwgtfrzflaSiQSisfjOn36tC5duqRjx44pHo+rs7NzWvqVrhCv4UzWr19vKb/66qsZj30ikbD0acuWLdPWJgAAAGA28ng86ujoSAV8x2IxPfTQQ+ru7s6pnvSwutGfw6dDriFjM2Ey91FGszNmztfo+z+5yjccMRKJZA0YnD9//rT2H/bkGsqX7V7bdP59+Pjjj/Naf6qCEAEAAAAAAAAAAAAAAAAAAAAAuZnrdAMAAAAAAAAAAAAAAAAAAAAAYLYrLy9XU1NTqhwOh7Vjx46c60kPq2tsbFRpaantn1wnH6+trZ1Uf/MJuEuXPsl5vhO0f/DBB1PWtonYDQ1IJBKW8ooVK/LazrFjx7KuU1ZWNiP7YCq4XC6Vl5fL7/fr+PHj6ujosPw+HA7rxRdfnLCOaDSqvXv3qrq6WnPmzFFxcbFKS0u1bt061dXVqa2tbcbCB2f6Gs6H2+1WfX19qvzss89mXO6dd95JvTYMQ6tXr56xNgIAAACzhd/vl8/nS5WDweC0BorfqJLJZF7rL1iwYNrbuHLlykmvm36PADeuXEP9otHohL+fzsDQXO/FpUu/FwIAAAAAAAAAAAAAAAAAAAAAmBkEEAIAAAAAAAAAAAAAAAAAAADAFGhoaJBpmqlyW1ubQqFQTnXMlonopzLg7uzZs1PatoULF87IPkgPPpwpN/Kk7i6XS36/X+Fw2PL+/v37My6fSCTk9/tVWlqqbdu2ZQ3vMwxDhmFMax9myzU8YuPGjanXsVhMkUhkzDLPPPNM6vXmzZvlcrmcbjYAAABQkPbv328Zc9TV1WUNFRutvLzcUu7v79fw8PCkfmZr+OH58+dzWv706dOW8ooVK5zuwoRyHdPnGmKHwjHV97vSTeffh97eXqd3HwAAAAAAAAAAAAAAAAAAAADABv7XNwAAAAAAAAAAAAAAAAAAAABMAZfLpWAwqEWLFqXe27Bhg/r6+uR2uydVp8/nU21trdNdm1aVlZWW8scff6ySkhLb66cHvs1UAOFknT59Oqf+JZNJS3n58uVOd2HalZeXyzAMxWIxSVI4HFYymbQE3yWTSVVWVo4JK5SuXzfLly9XWVmZysvLNX/+/NQ+9/v96uzsnLG+FPo1XFVVZdnXP/7xj7Vnz57U7+PxuGUfP/bYY043GQAAAChYbrdbr732mtasWZN6b/369Tp+/Lit9efPn28pf/rpp053qeBdunTJ6SZMaMGCBZZyrsc0PcQu/R4KbhzpYZNLly7Nunwu95cmsmTJEqe7DwAAAAAAAAAAAAAAAAAAAACYBAIIAQAAAAAAAAAAAAAAAAAAAGCKeDwedXR0qK6uTpIUi8W0adMmBQIB2+uPVltbK7/f73S3ZtTZs2dVVVVle/l4PO50k3OSazjC+fPnLeWysjKnuzAjNm/erMbGRst+GD2x/osvvmgJxvP5fNqyZUvWc+ftt9+e1nbPxmv4e9/7nrZt2yZJamtrU2trayrs8dVXX00tZ5rmlIUbAAAAADeqqqoq1dfXq62tTdL1QPWWlhZb66aPJyKRiMrLy53u0rRKD9R7+eWXtWvXLtvrHzhwwFIutCC1FStWWMpvvPFGTsc0vX/p5wgK1+7du3O6H/Av//IvlvLtt99uKaef27neP5vIyD2AEQcOHMip7S+//PKUtAMAAAAAAAAAAAAAAAAAAAAAkJu5TjcAAAAAAAAAAAAAAAAAAAAAAG4kfr9fXq83Ve7s7LQdQOh2uy3lvr4+p7sz7fLt88cff2wpL1261OkuWaSHA+TbvwULFjjdJVsSiYSSyeSk188WtPjss8+mXhuGoUAgYGvi/VgsNq39no3X8OOPP24pHz16NPV6//79qdc7d+50uqkAAADArNDa2irTNFPlxsZGW2Hobrfbsl56+NyNKD1Ubd++fbbHktFoVMFgMFU2TXNMkNp48hmv5to/wzBS5cbGRtvbjsfjY/qXPuZE4QqHw4pGo7aWTSaTamxsTJUNw1BJSYllGZfLZfn7sHv37ilt7+i6g8Gg4vG47XX37ds3pW0BAAAAAAAAAAAAAAAAAAAAANhDACEAAAAAAAAAAAAAAAAAAAAATLF//ud/tkwwX1dXp2PHjtlad3R44Xvvved0V6ZdekBfLpPxS9IPfvADS/n22293uksWbrd70mEDkvT8889byitWrHC6SxNKJBJqbm5WcXGxWlpaJl1P+vUy+jxJJBKWIMHvfe97tuq0O/F/vmbbNex2u+Xz+VLl5557TtL1/RUOh1Pvr1+/3ummAgAAALOCy+XSoUOHLO/ZDUN/4YUXUq+DwaBCoZCt9eLxuJqbm2csWG+quFwuNTU1WfbTwYMHba07MnYZMXrfZXP+/PkZ619ra6vlPbv9+/u///tJ9w+FIf0cHU/6OTHefY7R50A4HLb99yGZTKq5uVmJRGLcZdLPL7uhgl1dXbb/vgEAAAAAAAAAAAAAAAAAAAAAphYBhAAAAAAAAAAAAAAAAAAAAAAwxdxut1577TXLe21tbbbWHR2oFwwGFYlEbG93oonEC9nosAFJOnr0qK314vG4gsFgqmyapkpKSmyt+/HHH89Y/zZv3mwp2w0biMfj6uzsnFT/nFJWVqbGxkZJ18MWJxP6l0wm9ctf/tLSb7fbbdkvo61atcpWvQ0NDTOyD5y4hk+dOpVXm7ds2WJpczwe18svv5x6r76+3nIMAAAAAEyspKRE7e3tOa9XVVVlCbHfsGFD1nFVMpmU3+9XY2Oj7rjjDnV1dTnd/Zzs2LHDUq6rq8sarNbc3Gy5z2KapqqqqsZdvrKy0lK2Gww3FTZu3Dimf9mOUa79Q2Fqa2tTc3PzhMuEQiHV1dVZ3nv88cczLltVVSXTNFNlu38fHnjgATU2NqqsrEyBQGDcukf/7WlsbLTV9nXr1s34fgUAAAAAAAAAAAAAAAAAAAAAXEcAIQAAAAAAAAAAAAAAAAAAAABMg6qqKtXX1+e83urVqy0Tfj/66KNKJpNZ1wuFQiouLtb27dtnXRBhetjAE088MSZkLt1IwMJoL7zwwrjLp4ennThxwrH+7dixY8r7VyheeuklS/lrX/taTgF8ktTS0qJwOJwq33fffZbfL1myxFJ++umns9YZiUQsYY7TaaauYY/Hk3odDodtbWM86UEDr776qvbt25cqpwdmAAAAAMhu69at8nq9Oa/X2tqaeh2LxVRaWqq9e/eOGUfG43F1dXXpgQceUDAYTC3/wQcfON31nLjdbjU1NVneW7NmjbZv365oNJoa6yQSCYVCIW3fvj0VfD8i23jZ4/FYxjxtbW2qrq5WKBSybGM6uFyuMf1bt26dtm/frkgkkhr/5dO/Qnb48GEFAoFJ/cy2+1ujjVz7jY2NY451MplUJBJRc3Oz1qxZY1mvqalpzD2s0Xbu3Jl6PZm/D319fePWPfpvT7a27927N9V2wzAswYgAAAAAAAAAAAAAAAAAAAAAgJlBACEAAAAAAAAAAAAAAAAAAAAATJPW1lbLBPd2uFwuy4Tf4XBYDzzwwISBdfF4PDXpd1tbm8rKymbVJO3pYQOxWEymaSoajWZcPpFIWCZQlyTTNFVVVTXuNkaHtUnStm3bFAgEHO3feMF8yWQy5/4VipqaGkvAxkhfm5ubs4YuRqPRjEEL/+2//TdL2eVyWa6rcDg87rkiSYFAYEYnwp/MNRyNRnO+hlevXm0pZ9tGNt/73vdSr7dt26ZYLCbpepDAbDj3AAAAgEIUCARyvi/g9/vV3t5ueW/btm1atGiR5syZo+rqas2ZM0eLFi3SunXrLGPHnp4e7dq1y+lu56yhoUH19fWW99ra2lRaWqpbbrlFc+bMUXFxsdasWaO2tjbLch0dHVnHLG63e0y4WjAY1Jo1ayzbmDNnzoTjy6nun2maKi4unrB/7e3ts3pM1tnZqbq6ukn95DPGddo///M/p6799GN9yy23yDTNMfc/fD6fGhoaJqw329+HioqKcf8+HDlyZMK/D36/f0xY5nht37Ztm6Tr9wzC4bBWrlzp9C4HAAAAAAAAAAAAAAAAAAAAgJuOy+kGAAAAAAAAAAAAAAAAAAAAAMCNyuVy6f3331dpaWlO623cuFEHDhxITRIeDAa1aNEi+Xw+1dbWaunSpfrXf/1XffDBB3r99dcVDodT645M/O12u53ufk527Nihffv2pULPYrGYSktL5fV6dc8996isrEwDAwM6dOiQZfL0ET/96U+zbqO9vT01Qbok1dXVaffu3Vq5cqUqKyu1cOFCSVJlZaVKSkqmvX+maU5p/wpFIBCQ1+u1nJeNjY1qbGyUaZqW/T0wMKDe3l6dOnXKsvyInp6eMeGR0vWwvNHHsrS0VKZpatOmTfr617+uc+fO6YMPPtB7772X2p9er1fr16+3rDddZuIaXr9+vQzDSJ1To7chSbW1tall/X5/1jb/zd/8TcZ9s3nz5mnfXwAAAMCNyuPx6KWXXtK6detyWm/r1q1atWqVNmzYkPrMPyLTmFG6Pn6arUF1LpdLe/bs0erVq1VXV2drHcMw9P7779sev/v9fvX19Y0JfZvJ/v31X/+17XMh1/6hsLjdboXDYZmmOeYazqS9vV1bt261VfdEfx8y3VuR7P992LVrl77yla/YPk/D4XDG+zYAAAAAAAAAAAAAAAAAAAAAgOlHACEAAAAAAAAAAAAAAAAAAAAATKOSkpIxwXfZuFwuvfXWW9qxY4fa2tpS73d2dqqzs3Pc9UaCy2bjxN9ut1t9fX166KGHLGEKwWBw3HAFSTJNU8Fg0Fafn3rqKe3fv98yGXs4HFY4HLbs146Ojimf4N/tduvcuXN64IEHpq1/hcLj8ej48eN67LHHxpyvmfb3eCaaHP+pp54aE9YYDofHvc68Xq/eeustHTx4cEb2wUxcw263O2OQyUj9o7djJ4DQ4/HI6/WOOR8JIAQAAMDNyO12p8K9R8qTVVNTo/b2dvX29kq6HnpvR1VVlcLhsLq7u3X48GG9/fbbY8LGRoLY/+Zv/ibrOGKyfUpfb+nSpdO2nt/vV2VlpQ4fPqze3t4x4yfTNHXfffdp9erV2rhxo1yu3P6r/K5du7R582a9+uqr6u3tVTwen3BMPmL0MbN7/DKpqalRf3//hP1buXKlamtrbfcvn3N1ssc2lzrzrWsq2zyd62Xqt8fjUV9fnw4cOKBnn312zPXr8/lUWVmpr3/96yovL89p39j5+2AYhjZv3qzHHnssp/tcI+dpb2+vDh8+POY8Hal38+bNqb87o6+LqTiPAAAAAAAAAAAAAAAAAAAAAADZzRkeHh52uhEAAAAAAAAAAAAAAAAAAAAAUIjmzJmTet3R0WErxGs81dXVlknt7T7KHQgEVFdXl3U5r9erQCCQNXBgsn2aivV8Pp8CgUDWdZqbm9XY2Jh1uaamJjU0NOQUOJBMJvXiiy9OGAiZqX/pxyGfR/H37t1rK5Cyvr5era2ttvqXz7k6mWNkVygU0vPPP28rcFC6Pol96/+fvfsNjfu698T/UdA+UhayWcbMpTaWg/fSddCkl+7FVPKSmh17iW3QFoLLjEygdA1xbmxT9CDUF6xKbH3JA1MiJ3XADQETzYBp6RpshxtrSUMlF9OENjMkhGDiMfalg4fbDTd3HiwZ0O9Bf56rsWakkSx5PNLrBSJzzvd8z/mcM3/yQPK8T5+O4eHhJUMTqtVqnD59esnXyvxznP88LrXXUqkU27ZtW/G53rPa7+FmdQ4PDzcEa96v3dfr7Oxs7Nq1q95OpVLx8ccfL3vPAADA2qhWq1GpVKKvr6+rguofRKVSiWq1uqwAtW5y7zldr/vj39Rqtbhz586avX/vvZYiYtVfT/feh5s3b1528CcAAAAAAAAAAAAAAGtDACEAAAAAAAAAAAAAQAulUqn+OJFILBmItpj5XwIesfwvAq9UKvH555/HH/7wh7h27VpERBw4cCCeeOKJePbZZ9uubaV7Wo37lvsF66VSKT799NP48MMP47PPPovBwcF46qmnYseOHavyRer3art3nvcMDg4umP9Bn7+13t+DvFYf5DlqV7VajQ8++CC+/PLL+POf/1w/829+85uxffv2eOKJJ1b8vFar1bh48WLDvPfO8v73xvzncam93gsGWOm53m+13sOLnUOlUol/+qd/ilu3bjVcazc4sVgsRiqVqrcvX74c+/bte6C6AAAAAAAAAAAAAAAAAAAAWF0CCAEAAAAAAAAAAAAAAIiJiYkYGxurt7/++uvo7e3tdFkAAAAAAAAAAAAAAAAAAADM81inCwAAAAAAAAAAAAAAAKCzarVanD17tt4eHx8XPggAAAAAAAAAAAAAAAAAAPAI8i/BAQAAAAAAAAAAAAAANrhTp05FuVyut1944YVOlwQAAAAAAMAaqFQqUa1W6+3+/v5Ol7ThVavVqFQqERHR19cXiUSi0yUBAAAAAAAAAPCIe6zTBQAAAAAAAAAAAAAAANA5uVwuxsbG6u1MJuOLZgEAAAAAANahYrEYmzZtim3btsW2bdvi0qVLnS6JiPjjH/9Yf042bdoUtVqt0yUBAAAAAAAAAPCI65mbm5vrdBEAAAAAAAAAAAAAAAA8HKVSKa5duxYREa+++moUCoX6tWQyGYVCIRKJRKfLBAAAAAAAYBVVq9XYvn17lMvliIhIp9Nx9erVTpfF/++v/uqv6s/N5cuXY9++fZ0uCQAAAAAAAACAR5gAQgAAAAAAAAAAAAAAgA0kl8vFyMhI02szMzMxNDTU6RIBAAAAAABYRbVaLZ577rmYnp6OiIhkMhm3b9+O3t7eTpe2YqVSqf64r68vEonEA81XrVajUqnU24lEIvr6+lqOLxaLUSwW4/r161GpVOKTTz6Jp59+OhKJROzcuTO2bt26rN+7TUxMxNjYWEREpFKp+Pjjjzt0sgAAAAAAAAAAdAMBhAAAAAAAAAAAAAAAABtIswDCTCYTp06div7+/k6XBwAAAAAAwCp7/fXX4+jRo/X2zMzMssLxHkU9PT31x5lMJnK53APN98wzz0ShUKi3b968ueB3Z7VaLS5cuBCvvvpqw9hWUqlU/MM//EPs3bt3ybDHUqkU27Ztq7fv3r37wKGKAAAAAAAAAACsXwIIAQAAAAAAAAAAAAAANpBSqRTXrl2LiIgnnngi/vZv/9aXlwIAAAAAAKxTlUolNm3aVG+vRljfo2DPnj0xPT1dbz/I16nNzs7Grl276u1mZ1SpVCKVSkW5XF72/Ol0Ot59990lQwjnhypevnw59u3bt+bnCAAAAAAAAABAdxJACAAAAAAAAAAAAAAAAAAAAAAAAOtQNpuNfD5fb//rv/5r9PX1dbqsB3b8+PGYnJx84H3VarXYsmVLQ7Dg/XMtFj6YTqfjBz/4Qb1948aNOHv27IKx7YQQzg9VHB8fj5MnT3b6mAEAAAAAAAAAeEQ91ukCAAAAAAAAAAAAAAAAAAAAAAAAgNVVKpUawgfHx8fXRfhgRMTOnTsb2pVKZUXzXLhwoSEs8MyZMwvOKJ1ON4xJp9NRKBTi66+/jqtXr0Y2m63/nDx5Mm7fvh0zMzORTCbr90xPT8epU6cWrWXHjh31x7/97W87fcQAAAAAAAAAADzCeubm5uY6XQQAAAAAAAAAAAAAAAAAAAAAAACwep555pkoFAoREZFMJuP27dvR29vb6bJWRbFYjFQqVW9PTU1FNptd1hy1Wi22bNlSDxdsdkb3rxMRcffu3UgkEkvOX6lUIpVKNYQXfv311y2fg1wuFyMjI/W2r4gDAAAAAAAAAKCVxzpdAAAAAAAAAAAAAAAAAAAAAAAAALB6Zmdn6+GDERGnT59eN+GDERFPPfVUQ/vPf/7zsuc4depUQzjgW2+9teCMfvGLXzS0p6am2gofjIhIJBLxy1/+sqHvvffe6+i5AQAAAAAAAACwPgggBAAAAAAAAAAAAAAAAAAAAAAAgHXkJz/5SUN7eHi40yWtqr6+vob2tWvXlnV/tVqNsbGxejuVSsW+ffsWjKtUKg1jstnsstbZuXNnJJPJOHbsWMzMzMTevXs7fXQAAAAAAAAAAKwDvZ0uAAAAAAAAAAAAAAAAAAAAAAAAAFgdpVIppqen6+1jx44tCOxbTKVSid///vfx5ZdfxqVLl+KTTz6Jp59+OiIiDh06FM8++2xb883OzsatW7ciImLr1q0xNDTU1vrt3pfJZCKfz0dExPvvv7+sMzpx4kRD+5133mk67t78ERGbNm1a1hoREb29vfGnP/1p2fdF/OV57O/vX9G9AAAAAAAAAACsbwIIAQAAAAAAAAAAAAAAAAAAAAAAYJ04f/58Q/t//s//2dZ91Wo1Dh8+3BC6d0+hUIiIfwvkm5qaimw2u+h8u3btqj8eHx9vO4Bw/n3Hjh1red83v/nN+uNyudz2+ZRKpZicnKy3M5lMDAwMLHnf/FBHAAAAAAAAAADopMc6XQAAAAAAAAAAAAAAAAAAAAAAAACwOs6ePVt/nEql2grXy+VysX379qbhg82MjIxEsVhseb1SqTS0/8t/+S9tzVutVhvaO3fubDl2+/btDe1SqdTWGidOnGhov/baay3HplKpRfe1ljZv3vzQ1gIAAAAAAAAAoLsIIAQAAAAAAAAAAAAAAAAAAAAAAIB1oFgsRrlcrrcPHz685D1XrlyJkZGRhvtSqVRMTU3F1NRU3Lx5My5fvhzpdLrhvr1790atVms65+eff97Q3rFjR1v1f/HFFw3twcHBlmPvv/ZP//RPbZ3P/JDF8fHxSCQSLce/8sorDe1UKvXQQgh7e3sfyjoAAAAAAAAAAHQfAYQAAAAAAAAAAAAAAAAAAAAAAACwDnzwwQcN7WeffXbR8ZVKJX74wx/W28lkMqampuKjjz6KbDYb2Ww2+vv7Y9++fXH16tUoFAr1seVyOUZHR5vO+4c//KGh3d/f31b9xWKxob158+aWY+8PDrx169aS8x86dKhhr63qv+fgwYORTCYb9rxp06Z4/fXXVz2I8MaNG6s6HwAAAAAAAAAA65cAQgAAAAAAAAAAAAAAAAAAAAAAAFgHLl68WH+cTCZjYGBg0fHZbDbK5XK9/bvf/S6y2Wz09vY2HT8wMBBnzpyJiIh0Oh0HDx5sOu7atWv1x+l0uu36L1261FB/qzoiIvr6+hrCAeff28zs7GxDgOLp06ejr69v0Xt6e3vjvffea1gnIuLo0aOxadOmeOaZZ+L111+P2dnZqFarbe+zmc8+++yB7gcAAAAAAAAAYOMQQAgAAAAAAAAAAAAAAAAAAAAAAADrwPT0dP1xq3DAe2ZnZxvGnzlzJvr7+5dc48UXX4y7d+/G1atXY2hoqOmYfD5ff7xjx46263///ffrj3fv3r3k+PljKpVKy3G1Wi1eeumlejuVSi15PvcMDAxEoVCIVCq14FqhUIijR4/Grl274vHHH49nnnkmrly5ErVare09N5PJZB7ofgAAAAAAAAAA1jcBhAAAAAAAAAAAAAAAAAAAAAAAANDlSqVSQ3vnzp2Ljr9w4UL9cTKZjBdffLGtdXp7eyORSLS8fn8Q4FJ13FOr1aJcLtfbBw4cWPKewcHB+uP5YYrN9looFOrtn//859Hb29tWXRERiUQiPvroo5iZmYl0Ot1yXKFQiP3798eWLVviypUrbc8f0RjaCAAAAAAAAAAAixFACAAAAAAAAAAAAAAAAAAAAAAAAF3u2rVrDe354Xz3q9VqMTk5WW8fOXJkWYF8i5kfIrhUHfPduXOnoT0wMLDkPU899VRD+/7ww3t7HR0drbfT6XQMDQ0te1+9vb0xNDQUV69ejbt378bly5djfHw8UqlU0zPYv39/TExMtDX3/XW3E74IAAAAAAAAAMDGJYAQAAAAAAAAAAAAAAAAAAAAAAAAutyf//znhnYikWg59vr16w3t733ve6tWR7FYbGhv3ry5rfvuD1C8P1ywmR07djS0q9XqgjFvvvlmQyjiuXPnHniPiUQi9u3bFydPnoyPP/447t69G2fOnFkQRjg2NhZXrlxZcr7PP/+8ob1169YHrhEAAAAAAAAAgPVLACEAAAAAAAAAAAAAAAAAAAAAAAB0ufkBfslkMvr6+lqO/T//5/80tP/zf/7Pq1bHpUuX6o9TqVT09va2dd/8UMSl6r/n/nDD+0MMq9VqHD16tN4+duxY9Pf3r9pe70kkEvHyyy/HRx99FOl0uuHaj3/84yXv/8Mf/tDQ/ta3vrXqNQIAAAAAAAAAsH4IIAQAAAAAAAAAAAAAAAAAAAAAAIAu98knn9Qf7969e9Gxn332Wf1xJpNpOySwHe+//3798Xe/+9227/vNb37Tdv339Pb2RjKZrLdv3LjRcP306dMN7VOnTq3aPlvV8+677zaEEBYKhSiVSoved+7cufrjdsMXAQAAAAAAAADYuAQQAgAAAAAAAAAAAAAAAAAAAAAAQJcrFAptj83n82tSQ7VajXK5XG/v3Lmz7fvm13/gwIG215wfVjg/WLFUKsXY2Fi9febMmYcS7Nfb2xs/+MEPGvo+/fTTtvd+8ODBNa8RAAAAAAAAAIDuJoAQAAAAAAAAAAAAAAAAAAAAAAAA1pHBwcG2xyYSiVVbt1KprKiODz74oKE9MDDQ9przwwrnByueOHGi/jiZTMaLL764avtcyhNPPNHQ3rFjR9t7F0AIAAAAAAAAAMBSBBACAAAAAAAAAAAAAAAAAAAAAADAOvLkk0+2PfY//sf/2Oly4x//8R8b2slksu17t27d2tCu1WpRKpUawgjfeuut6O3tbWu+SqUSExMTkc1mV7yfxQIH7/ezn/2sob1z584VrwsAAAAAAAAAwMYggBAAAAAAAAAAAAAAAAAAAAAAAAA2kHQ6XX/8q1/9atXm/eqrrxraiURiyXtKpVJMTk4u+757vvGNbzS079y5E8PDw/V2KpWKffv2tTXXxMREbNq0KcbGxiKfz0elUlnROZw4caKtcdVqNaanp+vtdDrddlAiAAAAAAAAAAAblwBCAAAAAAAAAAAAAAAAAAAAAAAA2EDmB/QVCoWo1Wpt3XflypVFxxaLxYb2F198seSchw8fbmhnMpll7aW/v3/BfIVCod5+55132p7rv/23/9bQ/l//638tq5Z7Z5TP5+vtVCq1oMZ73n777Yb2T37yk2WvBwAAAAAAAADAxiOAEAAAAAAAAAAAAAAAAAAAAAAAADaQAwcONLQvXLiw5D0TExOxf//+2LJlS+RyuaZBhAMDAw3tDz74oOV8tVotJiYmYnp6uqF/cHBw2ftJpVL1x/Pny2QyC2pazNDQUMNck5OTkc1m2w5orFar8cMf/rCh7x/+4R9ajv/pT39af5xMJmPnzp3L3jsAAAAAAAAAABuPAEIAAAAAAAAAAAAAAAAAAAAAAADYQPr7+yOZTNbbIyMjMTEx0XRstVqNiYmJGBsbi4iIcrkcb7/9dtOxAwMDDfMePXo0Zmdnm8753HPP1eec72/+5m+WvZ/vfve7Tftfe+21Zc/1zjvvNLTz+Xx8+9vfjlwuF9Vqtek9tVotZmdnY3BwMMrlcr0/mUzG3r17m94zOzvbMPb06dPR29u77HoBAAAAAAAAANh4eubm5uY6XQQAAAAAAAAAAAAAAAAAAAAAAACwcn/1V39VD7SbmpqKbDa76PjZ2dl4/vnnG0LwIiIymUx885vfjIiIX/3qV1EoFBquJ5PJKBQKkUgkms57/PjxmJycbOhLp9PxX//rf41//ud/jt/85jcNc545cyaOHj1ab9+9e7fl3K3kcrkYGRlp6BsfH4+TJ0+u6CxnZ2dj165dTa8lk8nYvXt3Q18+n286brFzeuaZZ+rnkEwm4/bt2wIIAQAAAAAAAABoiwBCAAAAAAAAAAAAAAAAAAAAAAAA6HLZbLYehJfJZCKXyy15T6VSiVQqtSCEsJV0Oh25XG7RgMBarRbPPfdcTE9PLznfzMxMRERD2N9KvhqtWCxGKpWqt5PJZNy4cSP6+vpWfJ7FYjH27t3b9tnMl0qlYnp6uuU53R9w2E5gJAAAAAAAAAAA3PNYpwsAAAAAAAAAAAAAAAAAAAAAAAAAHszg4GD98SeffNLWPYlEIgqFQqTT6UXHpdPpuHz5cly9enXR8MGIiN7e3nj33XcXnTOdTkehUIihoaG4detWvT+Tyaxo78lksqF9+vTpBwofjIgYGBiI27dvx8zMTNt1ZTKZKBQK8fHHH7c8p1qtFi+99FK9nUql4uDBgw9UKwAAAAAAAAAAG0vP3NzcXKeLAAAAAAAAAAAAAAAAAAAAAAAAAFZudnY2du3aVW8v9yvGqtVq/PGPf2wIBBwYGIhkMrlk6OBic37xxRdRLBYjImLr1q3x13/91yuer5Oq1WpUKpX46quv6vu5t6dvfOMbkUgk2go9zOVyMTIyUm/PzMzE0NBQp7cHAAAAAAAAAEAXEUAIAAAAAAAAAAAAAAAAAAAAAAAAXa5SqcSmTZvq7Zs3b0Z/f3+ny2Ke+5+jTCYTuVyu02UBAAAAAAAAANBlHut0AQAAAAAAAAAAAAAAAAAAAAAAAMCDSSQSkUql6u3z5893uiTuk81m64+TyWScO3eu0yUBAAAAAAAAANCFBBACAAAAAAAAAAAAAAAAAAAAAADAOvDKK6/UH589e7bT5TDP66+/HtPT0/X2e++9F319fZ0uCwAAAAAAAACALtQzNzc31+kiAAAAAAAAAAAAAAAAAAAAAAAAgAdTrVbj8ccfr7cLhUIMDAx0uqwNr1gsRiqVqrenpqYim812uiwAAAAAAAAAALpUb6cLAAAAAAAAAAAAAAAAAAAAAAAAAB5cX19fzMzMxK1btyIi4t//+3/f6ZKIiH/5l3+JqampiIh44oknYt++fZ0uCQAAAAAAAACALtYzNzc31+kiAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgMU91ukCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgKUJIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAuIIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAuoAAQgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOgCAggBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgCwggBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgC4ggBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC6gABCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA6AICCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKALCCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACALiCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALqAAEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADoAgIIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAsIIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAuIIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAukBvpwsAAAAAAAAAAIB29fT0LOibm5vrdFkAAAAAAAAAAAAAAAAAAAAAAAAAD8VjnS4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWJoAQgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOgCAggBAAAAAAAAAOhac3NznS4BAAAAAAAAAAAAAAAAAAAAAAAA4KERQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABdQAAhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdAEBhAAAAAAAAAAAAAAAAAAAAAAAAEDXKJVKnS4BAAAAAAAAAAA6RgAhAAAAAAAAAAAAAAAAAAAAAAAA0BWKxWJ85zvfiWq12ulSAAAAAAAAAACgIwQQAgAAAAAAAAAAAAAAAAAAAAAAAI+8Wq0Whw4dinK5HCdOnOh0OQAAAAAAAAAA0BECCAEAAAAAAAAAAAAAAAAAAAAAAIBH3ptvvhmFQiEiIiYnJ6NYLHa6JAAAAAAAAAAAeOh65ubm5jpdBAAAAAAAAMBGVK1W4+LFi02vZbPZTpf30Pa7devWGBoaWtCfy+WazjM8PBx9fX2d3g7QIT09PQ1tf/oCAAAAAAAAAAAAsDFUKpXYtGlTQ18qlYqPPvooent7O10eAAAAAAAAAAA8NAIIAQAAAAAA4BFWKpWWfU9/f/+a1FKr1eLOnTsL+hOJxKqHwZVKpbh27VpcunQpIv7yJQHT09ORyWQiIuLAgQPxxBNPxN69e9fsSwKq1WpUKpVl3bN58+Zl1VMqlWLbtm1Nr63HX+W22m8mk2kaNnh/yNg9N2/eXLPXOfDoE0AIAAAAAAAAAAAAsDFls9nI5/ML+qempiKbzXa6PAAAAAAAAAAAeGjW5ps4AQAAAAAAgFXRKpyuHZlMJv7u7/4uhoaGVqWWCxcuxMjIyIL+VCoVH3/88QPPX6vV4sKFCzE6OhrlcrnpmHtfFHDvv8lkMo4cORKjo6OrHoJ48eLFpvttRyaTiQMHDsTBgwfXLCARAAAAAAAAAAAAAAA2iitXrjQNH4yIGBkZiT179kQikeh0mQAAAAAAAAAA8FA81ukCAAAAAAAAgLWRz+dj165d8cwzz8Ts7OwDz/fqq6827S8UClEqlR5o7mKxGFu2bImRkZGW4YPNlMvlGBsbi8cff3xV9rha8vl8jIyMxJYtWyKXy0WtVut0SQAAAAAAAAAAAAAA0JVqtVr88Ic/XHTM8ePHO10mAAAAAAAAAAA8NAIIAQAAAAAAYJ0rFAqxa9eumJiYWPEcxWIxCoVCy+vnz59f8dyzs7ORSqWWFTzYzK5duyKXyz34ga2icrkcIyMj8e1vf1sIIQAAAAAAAAAAAAAArMCpU6eW/DcH+Xw+ZmdnO10qAAAAAAAAAAA8FAIIAQAAAAAAYIMYGxtb8T+m/8UvfrHo9bNnz64oYK9YLMauXbtWbY8jIyNx5cqVVZtvtRQKhXjhhRc6XQYAAAAAAAAAAAAAAHSVUqkUY2NjbY19/vnnV/RvGwAAAAAAAAAAoNv0droAAAAAAAAA4OHZtWtX3L17NxKJRNv31Gq1mJycXHRMuVyO69evx9DQUNvzVqvV2Lt3b1tj0+l0JBKJyOfzS4794Q9/GLdv347e3kfr16H5fD4OHDgQ2Wy23pdIJGJqaqrTpT2yWp3Ncl6/AAAAAAAAAAAAAAB0r+Hh4bbHlsvlOHXqVJw8ebLTZQMAAAAAAAAAwJrqmZubm+t0EQAAAAAAAEBzPT09TfsvX74cO3bsiL6+vvgP/+E/xJ07dyIi4tNPP4133nln0aC+M2fOxMsvv9x2DVeuXIn9+/cvOS6dTsfVq1fbnndiYiLGxsZaXj927Fj86Ec/is2bNzeECVYqlfj888/j+eefj3K5vCp7bCaXy8XIyEjTfZ47dy76+voikUhEtVqNSqUSn376aXz44YeL7ikiYiP/irZUKsW2bdsW9Gcymcjlcp0uD+gS9/+/cSN/rgIAAAAAAAAAAACsZ63+rn8pN2/ejP7+/k6XDwAAAAAAAAAAa+axThcAAAAAAAAALN+OHTuiv78/EolE9Pb2Rn9/f/T398e+ffsil8vFzMxMJJPJpvdeu3ZtWWv9+Mc/bmvc9PR0VKvVtsbWarVFg/rGx8fjtddei/7+/obwwYiIRCIRQ0ND8d577zW9N51Ox1NPPbVqZ32/RCJRP/uIiL6+vvrZnzx5MgqFQsuzj/hLgOLDUKlUolQqrcncpVJpzeZ+GGq1WpRKpajVaqs+d7efDQAAAAAAAAAAAADAo6Barcbo6OiK7j18+HCnywcAAAAAAAAAgDXV++BTAAAAAAAAAI+aoaGhOHLkSNOQv3w+H7lcrq15KpVKFAqFttd9++234+WXX15yXKvwwIi/hA+ePHlyyTkGBgbizJkzcfTo0UilUnH48OH4wQ9+EH19fWtxpG0bGBiI3/3ud7Ft27am13//+9/Hvn37IuIv53v8+PEFYwYHB5ueYzabXdD32muvRSKRiEqlEmfPno3PPvss8vl8w5h0Oh3Dw8Nx4MCB6O/vX9Z+arVavPfee/HOO+/EJ598suD1kE6nY8eOHXHw4MEYGhpa1bNstt+IaPr6ff311xeEa/7d3/1dDA0NRa1WiwsXLsT169fjN7/5TcMeUqlUPP3003Hq1KmuOhsAAAAAAAAAAAAAgPXs8OHDUS6XV3Tv9PR05HK5ln+TDgAAAAAAAAAA3a5nbm5urtNFAAAAAAAAAM319PQ07b958+aSYWmzs7Oxa9euptfu3r0biURiyfUnJiaahhhmMpkFIXcREclkMv70pz8tOW82m216f0TE119/Hb29vW2fUaVSaWsvy5XL5WJkZKTp3tsJcGz13M0PWCyVSk2DClut0WzOmzdvRkTEd77znba+XGFqaqrtL1EoFotx6NChtkMojx07FqdPn275/K3GfiMimv2au9lrampqKoaHh+N//I//EdPT0x09m0wmE+fOnet4QCasB/d/NvjTFwAAAAAAAAAAAID1pVgsRiqVeqA5kslk3Lhxw99wAwAAAAAAAACwLj3W6QIAAAAAAACAtfGNb3zjge6v1Wpx9uzZptfOnz8fyWRyQX+5XI7Z2dkl537//feb9h87dmxZ4YMRsSbhg6shk8k07f/ss89WdZ3z58/Htm3b2gofjIgYGRmJ48ePR61WW3Tc8ePHI5VKtR2wFxExOTkZW7ZsiVKptKp7XKnr16/H9u3b2wofvHc2ExMTS45bydnk8/nYvn37I3M2AAAAAAAAAAAAAACPolqtFocOHXrgecrlcpw4caLT2wEAAAAAAAAAgDUhgBAAAAAAAADWqWvXrrW81k5o3/Xr15uG2o2Pj0dvb28cOXKk6X0XLlxYdN5KpdIyLO/gwYOdPLJV1eqMBwcHV3WdsbGxZd8zOTm56POUy+VicnJyRfWUy+UYHh5e1T2u1OTkZNvBjPeMjY0tGhK4GmezVPgjAAAAAAAAAAAAAMBG9eabb0ahUFiVuSYnJ6NYLHZ6SwAAAAAAAAAAsOoEEAIAAAAAAMA6VKvVYnR0tOm1ZDLZ1hxvvPFG0/7vfe97Df+93+TkZFSr1ZbzLnbtW9/6VieOa9XVarWWIXVPPvlkp8uLiIhXX321aX+1Wo2RkZFF702n04u+jgqFQuRyuU5vccVOnDjR8mxava+WczZLhXQCAAAAAAAAAAAAAGxElUoljh49uqpzHjp0KGq1Wqe3BgAAAAAAAAAAq6q30wUAAAAAAAAAq6dWq8WFCxfi1VdfjXK53HTMkSNHlpynWq1GPp9f0J9MJmNgYCAiIgYGBiKZTDZd5+LFi5HNZpvO/dVXX7Vct6+vb9GaLl682PZZDA8PLzrfWnrvvfdaXhscHFyzdVOpVLzyyitx8ODB+L//9//G559/Hs8//3zT56hQKMTs7GwMDQ019B8+fLjp3MlkMt5666149tln6+daLBbj17/+dYzctvgnAACAAElEQVSNjS0YPzo62tHnoFn9R44cidHR0fjjH/8Yb7zxRtPXeEREPp9vGqB44sSJpmeZTCbj9OnTDfvtprMBAAAAAAAAAAAAAHgUVKvVmJqaWnLcyMhI/XE74//f//t/0dvrK9cAAAAAAAAAAFg//DUMAAAAAAAAdKHDhw9HIpGot99///2WgYP3e+GFF5Yc8/bbbzft//u///sF7aNHjy4Y9+qrr7YMICwWiyva8wcffNDwJQFLuXnz5kMPeCuVSnHixImWwXYR0fC8raaZmZmGMMFEIhGJRCJu3LgR27dvb/r6eOONNxruaRU8GRHxy1/+ckFY4cDAQAwMDMSvfvWrKBQKDdfK5XL88Y9/XHBPJ5w5cyZefPHF+hdGDA0NxdDQUBw6dCj279/f9J5SqRT9/f31dq1Wi8nJyaZj33rrrdi3b1/Ts/ntb38b09PTj+zZAAAAAAAAAAAAAAA8Kvr7+xv+jruV+f+2oNW/XQAAAAAAAAAAgPXssU4XAAAAAAAAACzf9PR05PP5+k+74YOZTKatf4x/7ty5pv3f//73F23fUygUolQqreqev/zyy1Wdb6Xef//9yGaz9Z89e/ZET09P9PT0xLZt2xYNHzx27NiahCKOj4+3DLPr6+uLt956q+m1+2utVCpNxyWTydi5c2fL9Q8fPty0/9atW6u+1+VKpVLx8ssv18MH53v22Wdb3vfVV181tO/cudPybPbu3dtynuHh4Uf2bAAAAAAAAAAAAAAAAAAAAAAAAACA7tP74FMAAAAAAAAA3SCdTsf58+eXHFcsFqNQKCzoT6VSkUgkGvoSiUSkUqmm48+fPx8nT55ctfovXbrUgVNbqFwuLxoy2EoqlYrTp0+vSU0vvPDCotf37dvX1jyffvpp0/6DBw+2DOCLiHjqqaea9t+4cWNN9rscrcIRI/4Sztjq9VssFmNgYGDJs9m9e/eKzub69euRzWY7fTwAAAAAAAAAAAAAAAAAAAAAAAAAQJcRQAgAAAAAAAAbQCaTifPnz0dv79K/IvzFL37RtP+VV15p2T8yMrKgf2xsLE6cOLFgzcHBwU4fR0dcvHixrfNfic2bNy85JplMRrlcXtBfKpWiv78/IiK++OKLpvdOTk7G5OTksuv67LPP1mS/y9EqAPCew4cPx9GjR5ec58svv2zan8/nVxRIWalUOn00AAAAAAAAAAAAAAAAAAAAAAAAAEAXeqzTBQAAAAAAAABrq1AoRC6Xayv8rlartQyaGx4eXlZ/RMR77723rFpLpVLLaysJeXsUpNPpuHnzZj3kby2089zu3r17yTHXrl1b1bref//9Ndtzu3bs2LHo9SeffLKteS5durSqdXXr6xkAAAAAAAAAAAAAAAAAAAAAAAAA6Kylv4USAAAAAAAAeOSk0+lIJBL1dqVSienp6aZj/+Vf/qXteRcLDHz88ceXXefPfvaz2LdvX0NfX19fy/FfffVVy2tzc3NN+7PZ7CMZ5pZKpeLnP/95DA0NdbqUjimXy50uAQAAAAAAAAAAAAAAAAAAAAAAAABgXRFACAAAAAAAAF3o3Llz0d/fX2/XarXYsmVL08C3l156KT7++OO25v3xj3+8qnVOT09HpVJpCEuc//h+v/71r2NgYGCNT+/BJJPJ2L1794L+AwcOxBNPPBE7duyIRCKxaNDiarv/jJtpJ6RxqTk2ssHBwUcy6BIAAAAAAAAAAAAAAAAAAAAAAAAA2Fge63QBAAAAAAAAwIPr7e2N06dPN71WKBQil8stOUepVIpCobDqtZ09e3ZBXzqdbjp2bGwsqtXqGp/Wg9m9e3fkcrkFP9lsNvbt2xf9/f0PNXwwIpoGT85Xq9VaXtu8eXP98c6dO5uOmZmZibm5uRX9rBdPPvlk0/7Lly9v+LMBAAAAAAAAAAAAAAAAAAAAAAAAAB4eAYQAAAAAAACwTmSz2UilUk2vjY6OLhpCFxFx/vz5NamrWQDhj370o5bjWwUp0tqvf/3rRa9fv3695bXe3t76461btzYd84c//KHTW+y4gYGBpv0ffvhhp0sDAAAAAAAAAAAAAAAAAAAAAAAAADYQAYQAAAAAAACwjvz85z9v2l8ul+PUqVMt76vVak2DAldDuVyO2dnZhr5nn3225fixsbGYmJhYMjCRfzM2NhaVSqXptVqtFi+99FLTa8lksqH913/9103H/fSnP13y+ahUKi1rWA+eeuqppv1nz57d8GcDAAAAAAAAAAAAAAAAAAAAAAAAADw8AggBAAAAAABgHRkaGopMJtP02tjYWFSr1abXrl+/HuVyeUF/MpmMmzdvtv1zf6DdPW+88UZDu6+vL8bHx1vuY2xsLL797W/HlStXolQqLai7VCrFlStX4vjx45HP5zt97I+EVCq1IOSuVqvFc889F4VCoek9p0+fbmgnEommr59yuRyjo6Mtg/ZmZ2cjlUrFpk2bIpfLdfoo1kRfX9+KzqZYLK77swEAAAAAAAAAAAAAAAAAAAAAAAAAHh4BhAAAAAAAALDOnDp1quW1w4cPN+3/yU9+0rT/yJEj0d/f3/bPkSNHms6Tz+cXhAiOjo62DCyMiCgUCrF///7Ytm1bPP7449HT01P/2bZtW+zfvz8mJyc7fdyPjHK5HJs2bYpnnnkmstls7NmzJ/7dv/t3MT093fKe4eHhBX2tXj+Tk5OxZcuWyOVyMTs7G8ViMXK5XGSz2di1a1c9wHJkZCT27NmzIAxxPXjttdcWPZvXX399wdmkUqkNcTYAAAAAAAAAAAAAAAAAAAAAAAAAwMMhgBAAAAAAAADWmf7+/shkMk2v5fP5KJVKDX3VarVlSN33vve9Za292Pi33367od3X1xe//OUvO31c606hUIh8Pr9o8GBExPj4ePT19S3oX+z1Uy6XY2RkJHbt2hWpVCpGRkYin88vGDc9PR2bNm1aEDrZ7RKJRIyPj7c8m6NHj27YswEAAAAAAAAAAAAAAAAAAAAAAAAAHg4BhAAAAAAAALAOnTt3ruW14eHhhvb9wYD3JJPJGBgYWNa6AwMDkUwm265paGgoZmZmVn3/6XQ6EonEqs+7XiSTyThy5EjL66+99lrL57FdMzMzTQMOu93o6OgDn83ly5fX5dkAAAAAAAAAAAAAAAAAAAAAAAAAAGtPACEAAAAAAACsQ319fTE+Pt70WqFQiNnZ2Xr7pz/9adNxf//3f7+itVsF2xUKhSgWiwv6h4aG4ubNm5FKpR5438lkMi5fvhxXr17dUAFvZ86caXtsOp2O27dvLxrQmEgk4vbt25HJZJZdy73nYGhoqNPHsib6+vri9u3bcezYsWXfm0wmY2pqKvbt29fpbQAAAAAAAAAAAAAAAAAAAAAAAAAAXUoAIQAAAAAAAKxTJ06ciGQy2fTa888/H7VaLYrFYpTL5aZjvv/9769o3VYBhBERv/jFL5r29/f3x8cffxwzMzPLDr1LJpNx7NixKBQK8ac//WlDhru9/PLLUSgUWj7fEX85pzNnzsS7774bvb29S87Z29sbuVwuLl++vOi88+cfHx+P27dvr/vnoLe3N1577bVln82NGzcim812unwAAAAAAAAAAAAAAAAAAAAAAAAAoIv1zM3NzXW6CAAAAAAAAID7lUqluHbtWr196dKlOHDgQL29devW+Na3vhV9fX2dLvWh6enpado//9e+pVIpPv300/jiiy8iIuJv/uZvVuWcarVa3LlzJ65duxY3btyIJ598Mp588smIiNizZ08kEolOH0/HOBt4uO7/LPSnLwAAAAAAAAAAAAAby/y/J/W3pAAAAAAAAAAAbEQCCAEAAAAAAAC6RDsBhADrnQBCAAAAAAAAAAAAgI1NACEAAAAAAAAAABvdY50uAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFiaAEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADoAgIIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAsIIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAuIIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAuoAAQgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOgCvZ0uAAAAAAAAAID2TE1NdboEAAAAAAAAAAAAAAAAAAAAAAAAAAA6qGdubm6u00UAAAAAAAAAAEA7enp6Gtr+9AUAAAAAAAAAAABgY5n/96T+lhQAAAAAAAAAgI3osU4XAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACxNACEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB0AQGEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0AUEEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAXEEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXUAAIQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHQBAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQBQQQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQBcQQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABdQAAhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdAEBhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANAFBBACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAFxBACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF1AACEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB0AQGEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0AUEEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAXEEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXUAAIQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHQBAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQBQQQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQBcQQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABdQAAhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdAEBhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANAFBBACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAFxBACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF1AACEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB0AQGEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0AUEEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAXEEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXUAAIQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHQBAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQBQQQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQBcQQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABdQAAhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdAEBhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANAFBBACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAFxBACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF1AACEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB0AQGEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0AUEEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAX6O10AQAAAAAAAECjnp6eJcfMzc2t6fzWte7DWncj7dW61rXu6qz7IHxWWde61l3P626kvVrXutbt3nU30l6ta13rdnbdjbRX61rXut277kbaq3Wta93uXXcj7dW61rVu9667kfZqXetat7PrbqS9Wte61u3edTfSXq1rXet277prsaZ/g2Hd9bjug8wNAAAAAAAAAGwMj3W6AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGBpAggBAAAAAACANVer1TbUutVq1brQhXxWWRe6gc8q60I38FllXViOjfaZ4bMKutNG+8zwWQXdaaN9Zvisgu600T4zfFZBd/KZYV3oBj6rrAvdwGeVdaEbbLTPKgAAAAAAAABgfemZm5ub63QRAAAAAAAAwL/p6empP/brPABoNP//kxH+XwkAAAAAAAAAAACw0fh3FwAAAAAAAAAAbHS9nS4AAAAAAAAAaOQfvwMAAAAAAAAAAAAAAAAAAAAAAAAAAM081ukCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgKUJIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAuIIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAuoAAQgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOgCAggBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgCwggBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgC4ggBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC6gABCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA6AICCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKALCCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACALiCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALqAAEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADoAgIIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAsIIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAuIIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAuoAAQgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOgCAggBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgCwggBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgC4ggBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC6gABCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA6AICCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKALCCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACALiCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALqAAEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADoAgIIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAsIIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAuIIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAuoAAQgAAAAAAAAAAAAAAAAAAAAAAAAAA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a01NTdHU1HTU73HZZZfFd77znYLiv6amphg2bFisWLEiPvaxj8XAgQNj3759sWHDhnj00UcPv/d1110Xy5Yti6effjpqamoO379v376YO3duQf5bb701du/eHeedd1584hOfiI997GMREYf3Laa7IsaIiFGjRhVdz+VyMXz48Kirq4vq6uou1xoaGo7orGpqamLhwoVx6623Fv08/sN/+A/x2c9+Ns4777zYs2dPPP30091+Rul0OhYsWHDUnx+FJk2aFLNnz44JEybEoEGD4plnnun2+ygi4sYbbywouJw4cWJkMpnIZrNd1rPZbAwbNiweeeSR+NSnPtXl++K979Pd98XJoLuzyeVyMWzYsFiyZElMmDChy9m88sorsXTp0pP+bAAAAAAAAAAAAAAAAAAAAAAAAAA4uSggBAAAAAAAAPqlu6KvYymVSsWSJUviiiuuKLiWy+Vi0qRJve6RzWZj+PDhsW7dupg4cWJERPzpn/5pvPDCC0XnDxWR9dWECRO6vXbmmWf2eG+xAsAjLSCMiPjOd75TtIDw0Dn09bNasmRJQekdx05jY2OPpYPvNWfOnKLrDz74YNGv/1wuF9OnT+9130PfF88++2xcdNFFSR/JMdXT2RT7e8mpdDYAAAAAAAAAAAAAAAAAAAAAAAAAnDzKkg4AAAAAAAAAlJ5XX3016urq+nVPOp3u1/xll10WmUzmqHLW1dXFeeedd/h1KpWKRx555KifP51Ox+WXX97t9YEDB8YTTzxx1O/TVwMHDoz77rvvqPbIZDJx2WWXfWCZ6d59990XAwcOLHpt4sSJ/f7ee790Oh1f+MIXkn7MY+5Ync0FF1yQ9KMAAAAAAAAAAAAAAAAAAAAAAAAAQLcUEAIAAAAAAAD9lkql4uc//3ksXLiw19l0Oh3PPvtsLFmypN/v8eqrr8a8efOOKGNdXV00NDREKpXqsn7RRRcddTngSy+9FNXV1T3O1NfXH3UZWn9ce+218eyzz/a76DEiYuHChfHqq68WnBVHr79fA/fdd19ce+21Pc709XuvmEwmE9ls9qT9rH/+858fcRnnobPprvwRAAAAAAAAAAAAAAAAAAAAAAAAAE4ECggBAAAAAACAI5JKpeKWW26JHTt2xBNPPBHz5s07XH6XTqdj9uzZcd9990U2m42LLrqo230++tGP9vge9957b6xbt67P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OPE899xzcdNNN3VZW7RoUUGx3o033tilvG3RokXxz//8z3HXXXd1u/fgwYPjgQceiNra2sNrO3fujBkzZvQ758qVK7sU77322msxf/782L17d4/31dbWxg9+8INuS/sOZZozZ06Pe33jG9+ICy+8MGbNmtVlfdOmTV1ejx07tiD3v/zLvxTcN3Xq1LjjjjsOv87n8zFv3rzDBXs9mTVrVlx//fUFJX/Fzvbll1/udd/a2tp46KGHCgoeIwo/94iI7373u/3+3Hva7/2f7SGtra1x0003FZRRvt+4cePiwQcfLFjP5/Nx6623Frxfd3ssXbq030WMAAAAAEDv3vvzpH6WFAAAAAAAAACAU1FZ0gEAAAAAAAAAAAAAAAAA4O677+6xhC4iYvfu3TFr1qzYv3//Ub/fe8vxnnzyyfja177Wa/lgxB9L7GbMmBHr1q3r8Xpvez388MNxzTXX9Dv3b3/7217v60/5YETE8uXL45577unT7PTp03vdt7W1NWbNmhU7d+7s0559+dyvueaao/rcn3vuuZg1a1av5YMRERs3bownn3yyYH3evHl9Kh88tMejjz56xHkBAAAAAAAAAAAAAAAAoDsKCAEAAAAAAAAAAAAAAABIXF/K/w5ZtGjRUb9fRUVFRETs3Lmz1wK8Ym6//faihXg33XTTcXnmQ66//vpe7+tP+eAhy5cv71NhYF8z7969Ox544IF+P19P+z3++ONHdO/+/fv79blE/LEU8bXXXjv8eufOnf0+04cffjiWLVt2zM4AAAAAAAAAAAAAAAAAACIiUkkHAAAAAAAAAAAAAABKTz6fj2XLlsXWrVtj8+bN8dGPfjRSKT+eDABwqvrHf/zH2LBhwzHbb9asWXHppZfGCy+8ECtWrCgovVu9enUsXLgwUqlUVFVVdSkk/NGPfhStra1d5r/xjW/EsGHDDr+urKw8/OfuygzHjRsXX//61yOXyxXd81DB3g033HB4bd26dQVz781w4YUXxqOPPhqrV68+Zmc1bty4qKqqikwmc3jt61//euzZs+dwltra2li0aFHU1NTEv/7rv8brr78e3/ve9wqyNjc3x+WXX96n9x08eHD85V/+ZZx11lnx1FNPFX2m1atXxzXXXBNDhw7t057v/dwffvjhgusPP/xwzJ07t99n1N1nPHjw4PjWt74V6XQ6mpqaYvny5V2uNzU1xTnnnHP4bLrLW1tbGzt37ozf/va3cf311x++PnXq1Jg+fXpERCxYsCC2bt3a7+wAAJw8/vEf/zHGjBkTn/70p+Mv//Iv40Mf+lDSkQAAAAAAAAAAAACAEuX/8AEAAAAAAAAAAAAA9Nmrr74aTz75ZDz11FPR1taWdBwAAE4ygwcPjp/+9KdRUVEREX8szpszZ06MHz++YPbtt9+OoUOHRkVFRUybNu3wenNzc0Gx3vTp04uW4O3duzc2btxYsL5y5cou89OmTYt169Z1KZeLiFi+fHmXAsKf//znBXvNmjUrrr/++sOF3XfccUfcdNNNMWfOnG7LCvti1qxZ8dWvfjWqqqoKrp1zzjnx+OOPR1NTU/zoRz+Khx566PBcKpWKc845J6699tqC58lms30qIHz/M51zzjlx0003xaWXXlpQFpnNZnstICz2uV955ZUxefLkop9ZsWfuTj6fL1qOuGjRoqirq+vyDB/5yEdixYoVMXPmzLjyyisP5zn0HO9XX19/+NmGDh0aQ4cOjR/+8Ifxy1/+suD+rVu3xs9+9rN+f84AAJxcXnrppYiIuOWWW+LLX/5yXHLJJV3+fQYAAAAAAAAAAAAAoC/Kkg4AAAAAAAAAAAAAAJzY/vCHP8SVV14ZtbW1MXbs2LjrrruUDwIAcFxMmTKlS2lbxB8L88aNG1cw+/bbbx/1+73xxhsFa+PGjStamFesBDEiYufOnYf/vGnTpoLr7y25O6SioiL+4i/+4ohzT506NW644YYei/hSqVRMmzYtli9fXnTuzDPPLFjbvn17n97/0ksvLfpMM2fOLJjdunVrr/vNnDmz4HOvqKiI2tragtn9+/f366yKfZ2MGzcupk2bVvAMc+fOjWeffTbmzp1bkKdYGeK3v/3tePLJJ2Pnzp2Rz+cj4o9FhsXuBwCA99q9e3f8/d//fXzxi1+MQYMGxZVXXhm/+c1vko4FAAAAAAAAAAAAAJQIBYQAAAAAAAAAAAAAQLfa2trinHPOiSeeeKLPZSQAAHCk6urqiq5fcMEFBWu5XO6o36/YHsXeK+KPhX6zZs0qWH9vwd3u3bsLrp999tlF9/vCF75wxLmvueaaPs/u3bs31q1bF08++WTceOON8c1vfjPGjh0bM2bMKJhtbW3t057FigEjIi688MKi79+bYvdFRHz+858/4jM6JJvNFqwVe/ZD3l9KeEhlZWXR87rrrrtixowZMX78+Bg7dmzceOONfT5HAACI+OM/Mz/xxBMxceJEJYQAAAAAAAAAAAAAQJ+kjn4LAAAAAAAAAAAAAOBk9P3vfz8WL17cbWHIF7/4xTh48GB89rOfjf3798eUKVOSjgwAQInrrqzvIx/5yHF5v+bm5oK1yZMn9yvfoRLDnTt3FlybOnVqt4V2VVVVR5x7yJAhvc689tprMX/+/KKliEdj6tSp3V6rqakpWFu9enXccccdPe7ZXaHhsGHDjjrvW2+9VbCWTqf7vc+kSZNi3LhxsXHjxh7nVq9eHatXr47a2tq49tprY9KkSRERceedd8bf/M3fHPXzAABQml5++eXI5/OxdevW2LNnT7z88ssF/+197969MWnSpPjqV78at912W3zoQx9KOjYAAAAAAAAAAAAAcIJSQAgAAAAAAAAAAAAAdLFixYr49re/XbSoo6qqKu644464+uqrk44JAMBJqLuyvuPlaEoA32/o0KEFa9u3b+92vrui777o7ZyefPLJuOuuu47Zsx1Nru7KBT8oxUoM+1LgWMySJUvi8ccfj4cffrjX2dbW1rj++utjzZo1UVVVFZ/85CcTPQcAAJJ1qJj6vYr9t/g9e/bEXXfdFU899VT8zd/8jf8WDwAAAAAAAAAAAAAUVZZ0AAAAAAAAAAAAAADgxDFz5sz48pe/XLR8cOrUqbFz507/w2MAAE4aZ599dsHav/zLv/Rrj54K9lpbWyOfzxe99sYbbxyXZ9q5c2e35YPjxo2LRYsWxaJFi+KHP/zhEe3fU3Hi/v37C9ZGjBhxXJ7zaDQ3Nx/RfRUVFTF37tx4+eWXY9GiRX0qV1yxYkXSjwsAwAlq5syZ8dvf/jauuuqqgmttbW3xzW9+M0aOHNntv1MAAAAAAAAAAAAAAKcuBYQAAAAAAAAAAAAAQERELFy4MH7yk58Uvfbggw/Gc889Fx/60IeSjgkAAMdMZWVlwdoLL7zQ7fzKlSsL1v7sz/7s8J+LFdJt3bq16F6//OUvj8szZbPZgrVvfOMb0dzcHA8++GBMmzYtpk2bdsT7b9y4sWjRYETE66+/flye6WgU+0x+8YtfHNWeqVQqpk2bFsuXL49NmzbFmjVrYvny5TFu3LiC2RUrViiMAQCgW6lUKn70ox/Fz3/+8xg8eHDB9ddffz1mzZqVdEwAAAAAAAAAAAAA4ASjgBAAAAAAAAAAAAAAiOeeey7+y3/5LwXrgwcPjp/97Gdx9dVXJx0RAACOuTPPPLNgbcWKFbFz586C9dbW1ti4cWPBelVV1eE/f/7zny+4Pn/+/HjuuecOl/bt378/li1bFg8//PBxeabm5uaCtXPPPTcqKiq6rB1NAeLjjz9eUKq3f//++N73vlcwW1NTc1yes6/eWxB5SHclinv37o3vf//7RT//Q3bu3BnLli3r8vxVVVVRW1sbS5cuLSgh3L17d7S1tSV6BgAAnPimTZsWzc3N8ZGPfKTg2k9+8pN46KGHko4IAAAAAAAAAAAAAJxAFBACAAAAAAAAAAAAwCnuD3/4Q3z9618vWB80aFA0NzfHxRdfnHREAAA4LoYOHRq1tbVd1nbv3h0zZsyIG2+8MXbu3Bk7d+6MG2+8MWbNmlVw/9SpU7sU+02fPr1gZvfu3XHTTTfF5MmT4/vf/35Mnjz5uJUPduf1118/XJiXz+dj3bp1sWLFiiPe7+GHH47p06cfLlZ88sknY/LkydHa2lowW+xMPkjFPuOIiEsvvTSWLVsWe/fujXw+H62trXHjjTfG8uXLu3z+hxz6OpgxY0Y8/PDDMW/evIISxlQqFXv27Cl4r2IliAAA8H6f/OQn47XXXutScn7ITTfdFG+//XbSEQEAAAAAAAAAAACAE0Qq6QAAAAAAAAAAAAAAQLL+03/6T/HWW28VrD/88MPxyU9+Mul4AABwXP3t3/5tfO1rXytYX716daxevbrHe2+66aYur4cOHRpTp07t9r7ly5cf9+eZPHlywfvfddddcdddd/WYrb8OFSv2ZNy4cTF06NDj/sy9+cEPfhAzZswoyP/www93Wwa5evXq2Lt3bzz44IOxf//+mDNnTuzevfvw9Y0bN8b48eMj4o9FlNu3by9awBgRJ8QZAABQGmpqamL9+vUxefLkLv/8uWfPnrj00ktjw4YNSUcEAAAAAAAAAAAAAE4AZUkHAAAAAAAAAAAAAACS85vf/CZWrFhRsP7YY4/FzJkzk44HAADH3TnnnBPjxo3r933f/e53o6KiomD9hhtuOKL9jpVMJtPttWNVPthX3/72txM7h/c6VAzZH4MHD44lS5ZERERFRUU8+uij3c6uXr262/LB/r4vAAB88pOfjMcff7xg/aWXXoqHHnoo6XgAAAAAAAAAAAAAwAlAASEAAAAAAAAAAAAAnMJ2795dsDZz5sz4yle+knQ0AAD4wCxdujS+8Y1v9Hl+0aJFcfnllxe9VlVVFUuXLu2xeG7w4MGxcuXK4/IsQ4cOje9+97u9zo0bN65Pc+9XW1sbgwcP7nFm8ODB8cMf/jBqa2uPyzMeiTvuuKPPzzt48OBYvnx5l4LJoUOHxg9/+MN+vee4ceNi4cKFST86AAAlaNq0afHggw8WrG/dujXpaAAAAAAAAAAAAADACSCVdAAAAAAAAAAAAAAA4MQxfvz4eOqpp5KOAQBACUun0wXle+l0umAuk8kc8z272/e9RXLFpFKpmDt3blx44YXx6KOPxqZNmwrKumtra2Ps2LHx1a9+Naqqqnrd74477oibbropXn/99fjlL38Z//zP/xxnn3121NbWRk1NTaRShb/eN27cuIK1nooMu3P55ZfHWWedFd/73veitbW14D3GjBkTc+bMia1bt/Z7/xEjRsTChQvjnnvuieXLl3e5Nnjw4JgyZUqPZ3S0n/v7P8v+fN6XX355TJ48OR544IHYvn17wdkMHjw4Zs6cGVdeeWXRPc4555xYvnx5/PSnPy149vef8de//vU4++yzi37OAADQF1dffXX8z//5P+MnP/lJ0lEAAAAAAAAAAAAAgBPMae++++67SYcAAAAAAAAAAIC+OO2007q89qMvAABH77/9t/8WV1111eHX//E//sdYuXJl0rEAACBx+/fvj71790ZExNChQ4/5/q2trTFr1qwua7NmzYobbrjhmL5PPp+Pt99+OyIihgwZ0q9CvJ07d8aMGTO6rE2dOjXuuOOOw6/37t0b+/fvj6qqql6LHk807z2bioqKXosl3+/Qsx9yJHsAAEBP8vl8jBkzJrZu3RoREd/85jfjgQceSDoWAEDi3vvzpH6WFAAAAAAAAACAU1FZ0gEAAAAAAAAAAAAAgOTcddddXV7n8/mkIwEAwAmhoqIihg4desTlg88991x885vfLPrP2Pv3748f/OAHBetnn332MX+OVCp1+Dn6Uz7YV1VVVTF06NCSKx98/9kcSXHgoWc/mj0AAKAnqVQqfvazn8XgwYMjIqKxsTH+8Ic/JB0LAAAAAAAAAAAAAEiYAkIAAAAAAAAAAAAAOEUtXLgwtm7d2mVt1qxZSccCAICSls/n48Ybb4ybbropNm7cGPPmzYvnnnsudu7cGa2trXHjjTfG5MmTY+PGjQX3ZjKZpOMDAAAnmJqampgwYUJEROzduzf+6q/+KulIAAAAAAAAAAAAAEDCUkkHAAAAAAAAAAAAAAA+ePv27YulS5d2WZs5c2Z85StfSToaAACUrHw+H1deeWW0trYeXtu4cWPRssH3++53vxtDhw5N+hEAAIAT3GOPPRb/9b/+1xgyZEjSUQAAAAAAAAAAAACAhJQlHQAAAAAAAAAAAAAA+OC1t7fHnj17uqz9wz/8Q9KxAACgpKVSqfjbv/3bft9XW1sbX/rSl5KODwAAlIj/9b/+V9IRAAAAAAAAAAAAAIAEKSAEAAAAAAAAAAAAACIi4kMf+lDSEQAAoOSdc845sXLlyhg8eHCf5r/xjW/E448/HqlUKunoAAAAAAAAAAAAAAAAAEAJ8BuJAAAAAAAAAAAAAAAAAHAMDR06NH7605/G73//+2htbY3m5ubYtGlTRESMHTs2IiImT54cF1xwQVRUVCQdt1tVVVWxaNGiLmvpdDrpWAAAAAAAAAAAAAAAAABwSlNACAAAAAAAAAAAAAAAAADHWEVFRdTW1kZtbW1MmzYt6ThH/Aylmh0AAAAAAAAAAAAAAAAATlZlSQcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeqeAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEqAAkIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAQoIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAQoIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIASoIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASoACQgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgBCggBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgBCggBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgBKggBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABKgAJCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAEKCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAEKCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAEqCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEqAAkIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAQoIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAQoIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIASoIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASoACQgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgBCggBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgBCggBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgBKggBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABKgAJCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAEKCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAEKCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAEqCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEqAAkIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAQoIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAQoIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIASoIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASoACQgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgBCggBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgBCggBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgBKggBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABKgAJCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAEKCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAEpJIOAAAAAAAAAAAAAAAAAAAcOwcO5uOFHYsjIuLC4QtiQJlfJQQAAAAAAAAAAAAAAACAk4XfGgQAAAAAAAAAAAAAAACAk8TmXQ3xzOvfiY7OXEREvPTWQ3HxWUtizOn1SUcDAAAAAAAAAAAAAAAAAI6BsqQDAAAAAAAAAAAAAAAAAABHZ9c7W+LuDaNj+ZYrDpcPRkR0dOZi+ZYr4u4No2PXO1uSjgkAAAAAAAAAAAAAAAAAHCUFhAAAAAAAAAAAAAAAAABQojo626MhWx/3vJSJXEe227lcRzbueSkTDdn66OhsTzo2AAAAAAAAAAAAAAAAAHCEFBACAAAAAAAAAAAAAAAAQIk5cDAfTdtvi9tfHBItucY+39eSa4zbXxwSTdtviwMH80k/BgAAAAAAAAAAAAAAAADQTwoIAQAAAAAAAAAAAAAAAKCEbN7VEIvXDos122894j3WbL81Fq8dFpt3NST9OAAAAAAAAAAAAAAAAABAPyggBAAAAAAAAAAAAAAAAIASsOudLXH3htGxfMsV0dGZ63G2sjwdleXpHmc6OnOxfMsVcfeG0bHrnS1JPx4AAAAAAAAAAAAAAAAA0AeppAMAAAAAAAAAAAAAAAAAAN3r6GyPldv+OlpyjX2anzHyvhj/8b+KiIjs//5xLN9yRY/zuY5s3PNSJkanZ8eMkfdGZXl10o8MAAAAAAAAAAAAAAAAAHSjLOkAAAAAAAAAAAAAAAAAAEChAwfz0bT9trj9xSF9Kh8cnZ4dt3+uIyaecW0MKEvFgLJUjDm9/t/W5vV6f0uuMW5/cUg0bb8tDhzMJ/34AAAAAAAAAAAAAAAAAEARCggBAAAAAAAAAAAAAAAA4ASzeVdDLF47LNZsv7XX2XRlJuZP3hH1mYYoTw0suF6eGhgzRt4b8yfviNpBdb3ut2b7rbF47bDYvKsh6WMAAAAAAAAAAAAAAAAAAN5HASEAAAAAAAAAAAAAAAAAnCB2vbMl7t4wOpZvuSI6OnM9zlaWp2POmGfjWxNaYlBFTa97D6qoiblj18TV566LdGWmx9mOzlws33JF3L1hdOx6Z0vSxwIAAAAAAAAAAAAAAAAA/BsFhAAAAAAAAAAAAAAAAACQsI7O9mjI1sc9L2Ui15HtdX7GyPtiwflvxcjqi/r9XjVVE2Pe+Fdj1qgnorI83eNsriMb97yUiYZsfXR0tid9TAAAAAAAAAAAAAAAAABwykslHQAAAAAAAAAAAAAAAAAATlUHDubjhR2LY832W/s0Pzo9O2Z+almUpwYe1fsOKEvFmNPr49PVl8TaN5b0+v4tucZoyTXGlBEL48LhC2JAmV9PBAAAAAAAAAAAAAAAAIAklCUdAAAAAAAAAAAAAAAAAABORZt3NcTitcP6VD6YrszE/Mk7oj7TcNTlg+9VnhoYdSNuifmTd8To9Oxe59dsvzUWrx0Wm3c1JHp2AAAAAAAAAAAAAAAAAHCqUkAIAAAAAAAAAAAAAAAAAB+gXe9sibs3jI7lW66Ijs5cj7OV5emYM+bZ+NaElhhUUXPcMg2qqIn6TENc/5lspCszPc52dOZi+ZYr4u4No2PXO1uSOEIAAAAAAAAAAAAAAAAAOGUpIAQAAAAAAAAAAAAAAACAD0BHZ3s0ZOvjnpcykevI9jo/Y+R9seD8t2Jk9UUfWMbTPzwqvjWhJWaNeiIqy9M9zuY6snHPS5loyNZHR2f7B5YRAAAAAAAAAAAAAAAAAE5lCggBAAAAAAAAAAAAAAAA4Dg6cDAfTdtvi9tfHBItucZe50enZ8ftn+uIiWdcGwPKUolkHnN6fSw4/62YMmJhr7Mtuca4/cUh0bT9tjhwMJ9IXgAAAAAAAAAAAAAAAAA4VSggBAAAAAAAAAAAAAAAAIDjZPOuhli8dlis2X5rr7PpykzMn7wj6jMNUZ4amHT0GFCWiroRt8TNn307Rqdn9zq/ZvutsXjtsNi8qyHp6AAAAAAAAAAAAAAAAABw0lJACAAAAAAAAAAAAAAAAADH2K53tsTdG0bH8i1XREdnrsfZyvJ0zBnzbHxrQksMqqhJOnqRfNVRn2mI+ZN3RLoy0+NsR2culm+5Iu7eMDp2vbMl6egAAAAAAAAAAAAAAAAAcNJRQAgAAAAAAAAAAAAAAAAAx0hHZ3s0ZOvjnpcykevI9jo/Y+R9seD8t2Jk9UVJR+/VoIqa+NaElpgz5tmoLE/3OJvryMY9L2WiIVsfHZ3tSUcHAAAAAAAAAAAAAAAAgJOGAkIAAAAAAAAAAAAAAAAAOEoHDuajafttcfuLQ6Il19jr/Oj07Lj9cx0x8YxrY0BZKun4/TKy+qJYcP5bMWPkfb3OtuQa4/YXh0TT9tviwMF80tEBAAAAAAAAAAAAAAAAoOQpIAQAAAAAAAAAAAAAAACAo7CtfVUsXjss1my/tdfZdGUm5k/eEfWZhihPDUw6+hEbUJaKiWdc+28livN6nV+z/dZYvHZYbN7VkHR0AAAAAAAAAAAAAAAAAChpCggBAAAAAAAAAAAAAAAA4Ajs2d8Wd28YHY9unh4dnbkeZyvL0zFnzLPxrQktMaiiJunox0x5amDMGHlvzJ+8I2oH1fU429GZi+Vbroi7N4yOPfvbko4OAAAAAAAAAAAAAAAAACUplXQAAAAAAAAAAAAAAAAAACglnfl9seLXc6Ml19in+Rkj74vxH/+rGFB28v5K36CKmpg7dk207V0f/9Ays8dCxlxHNu5sHh6j07Nj5qeWRXlqYNLxAQAAAAAAAAAAAAAAAKBklCUdAAAAAAAAAAAAAAAAAABKwYGD+Vj/5v1x8/OVfSofHJ2eHbd/riMmnnHtSV0++F41VRNjwflvxaxRT0RlebrH2ZZcY9z8fGWsf/P+OHAwn3R0AAAAAAAAAAAAAAAAACgJCggBAAAAAAAAAAAAAAAAoBfb2lfF4rXDYuW263qdTVdmYv7kHVGfaYjy1MCko3/gBpSlYszp9TF/UmtMGbGw1/mV266LxWuHxbb2VUlHBwAAAAAAAAAAAAAAAIATXirpAAAAAAAAAAAAAAAAAABwotqzvy0e23xJ5Dqyvc5Wlqfjy59+JEZWX5R07BNCeWpg1I24Jf6voV+J5/7fBdGSa+x2tqMzF49unh7pykxcNebpGFRRk3R8AAAAAAAAAAAAAAAAADghlSUdAAAAAAAAAAAAAAAAAABONJ35fdGQrY87m4f3qXxwyoiFseD8t5QPFjGooibqMw1x9bnrIl2Z6XE215GNO5uHR0O2Pjrz+5KODgAAAAAAAAAAAAAAAAAnHAWEAAAAAAAAAAAAAAAAAPBvDhzMx/o374+bn6+Mllxjr/Oj07Pj5s++HXUjbokBZamk45/Qaqomxrzxr8asUU9EZXm6x9mWXGPc/HxlrH/z/jhwMJ90dAAAAAAAAAAAAAAAAAA4YSggBAAAAAAAAAAAAAAAAICI2Na+KhavHRYrt13X62y6MhPXfyYb9ZmGqCyvTjp6yRhQlooxp9fHgvPfiikjFvY6v3LbdbF47bDY1r4q6egAAAAAAAAAAAAAAAAAcEJIJR0AAAAAAAAAAAAAAAAAAJK0Z39bPLb5ksh1ZHudrSxPx8VnLYkxp9cnHbukDShLRd2IW2L8sKtj5ba/jpZcY7ezHZ25eHTz9EhXZuKqMU/HoIqapOMDAAAAAAAAAAAAAAAAQGLKkg4AAAAAAAAAAAAAAAAAAEnozO+Lhmx93Nk8vE/lg1NGLIwF57+lfPAYqiyvjvpMQ1z/mWykKzM9zuY6snFn8/BoyNZHZ35f0tEBAAAAAAAAAAAAAAAAIBGppAMAAAAAAAAAAAAAAAAAwAfpwMF8vPy7v4+V267r0/zo9OyYMfLeqCyvTjr6Sev0D4+Kb01oiW3tq+KpX301Ojpz3c625BqjJdcYM0beF+M//lcxoMyvSgIAAAAAAAAAAAAAAABw6ihLOgAAAAAAAAAAAAAAAAAAfFC2ta+KxWuH9al8MF2Zies/k436TIPywQ/IyOqLYsH5b8WMkff1Orty23WxeO2w2Na+KunYAAAAAAAAAAAAAAAAAPCBSSUdAAAAAAAAAAAAAAAAAACOtz372+KxzZdEriPb62xleTouPmtJjDm9PunYp6QBZamYeMa1ce7QObHi13OjJdfY7WxHZy4e3Tw90pWZuGrM0zGooibp+AAAAAAAAAAAAAAAAABwXJUlHQAAAAAAAAAAAAAAAAAAjpfO/L5oyNbHnc3D+1Q+OGXEwlhw/lvKB08A5amBUZ9piPmTd0TtoLoeZ3Md2bizeXg0ZOujM78v6egAAAAAAAAAAAAAAAAAcNykkg4AAAAAAAAAAAAAAAAAAMfagYP5ePl3fx8rt13Xp/nR6dkxY+S9UVlenXR03mdQRU3MHbsm2vauj39omRkdnbluZ1tyjdGSa4wZI++L8R//qxhQ5tcoAQAAAAAAAAAAAAAAADi5lCUdAAAAAAAAAAAAAAAAAACOpW3tq2Lx2mF9Kh9MV2bi+s9koz7ToHzwBFdTNTEWnP9WzBr1RK+zK7ddF4vXDott7auSjg0AAAAAAAAAAAAAAAAAx1Qq6QAAAAAAAAAAAAAAAAAAcCzs2d8Wj22+JHId2V5nK8vTcfFZS2LM6fVJx6YfBpSlYszp9fHp6kviudYFsf7Npd3OdnTm4tHN0yNdmYmrxjwdgypqko4PAAAAAAAAAAAAAAAAAEetLOkAAAAAAAAAAAAAAAAAAHA0OvP7oiFbH3c2D+9T+eCUEQtjwflvKR8sYeWpgTFj5L0xf/KOGJ2e3eNsriMbdzYPj4ZsfXTm9yUdHQAAAAAAAAAAAAAAAACOigJCAAAAAAAAAAAAAAAAAErSgYP5WP/m/XHz85XRkmvsdX50enbc/Nm3o27ELTGgLJV0fI6BQRU1UZ9piKvPXRfpykyPsy25xrj5+cpY/+b9ceBgPunoAAAAAAAAAAAAAAAAAHBEFBACAAAAAAAAAAAAAAAAUHK2ta+KxWuHxcpt1/U6m67MxPWfyUZ9piEqy6uTjs5xUFM1MeaNfzVmjXoiKsvTPc6u3HZdLF47LLa1r0o6NgAAAAAAAAAAAAAAAAD0WyrpAAAAAAAAAAAAAAAAAADQV3v2t8Vjmy+JXEe219nK8nRcfNaSGHN6fdKx+QAMKEvFmNPr49PVl8TaN5bEmu23djvb0ZmLRzdPj3RlJq4a83QMqqhJOj4AAAAAAAAAAAAAAAAA9ElZ0gEAAAAAAAAAAAAAAAAAoDed+X3RkK2PO5uH96l8cMqIhbHg/LeUD56CylMDo27ELXHzZ9+O0enZPc7mOrJxZ/PwaMjWR2d+X9LRAQAAAAAAAAAAAAAAAKBXCggBAAAAAAAAAAAAAAAAOGEdOJiP9W/eHzc/XxktucZe50enZ8fNn3076kbcEgPKUknHJ0GV5dVRn2mI6z+TjXRlpsfZllxj3Px8Zax/8/44cDCfdHQAAAAAAAAAAAAAAAAA6JYCQgAAAAAAAAAAAAAAAABOSNvaV8XitcNi5bbrep1NV2bi+s9koz7TEJXl1UlH5wRy+odHxbcmtMSsUU9EZXm6x9mV266LxWuHxbb2VUnHBgAAAAAAAAAAAAAAAICiUkkHAAAAAAAAAAAAAAAAAID32rO/LR7bfEnkOrK9zlaWp+Pis5bEmNPrk47NCW7M6fWR+fPL4uXf/X2PpZYdnbl4dPP0SFdm4qoxT8egipqkowMAAAAAAAAAAAAAAADAYWVJBwAAAAAAAAAAAAAAAACAiIjO/L5oyNbHnc3D+1Q+OGXEwpg/qVX5IH02oCwVE8+4Nm7/XEeMTs/ucTbXkY07m4dHQ7Y+OvP7ko4OAAAAAAAAAAAAAAAAABGhgBAAAAAAAAAAAAAAAACAhB04mI/1b94fNz9fGS25xl7nR6dnx/zJO6JuxC1RnhqYdHxKUHlqYNRnGmL+5B2Rrsz0ONuSa4ybn6+M9W/eHwcO5pOODgAAAAAAAAAAAAAAAMApTgEhAAAAAAAAAAAAAAAAAInZ1r4qFq8dFiu3XdfrbLoyE1efuy7qMw0xqKIm6eicBAZV1MS3JrTEnDHPRmV5usfZlduui8Vrh8W29lVJxwYAAAAAAAAAAAAAAADgFJZKOgAAAAAAAAAAAAAAAAAAp549+9visc2XRK4j2+tsZXk6Lj5rSWT+/LIYUObX4jj2RlZfFAvOfyuy//vHsXzLFd3OdXTm4tHN0yNdmYmrxjytCBMAAAAAAAAAAAAAAACAD1xZ0gEAAAAAAAAAAAAAAAAAOHV05vdFQ7Y+7mwe3qfywSkjFsb8Sa0x5vR65YMcVwPKUjHm9Pq4/XMdMfGMeT3O5jqycWfz8GjI1kdnfl/S0QEAAAAAAAAAAAAAAAA4hSggBAAAAAAAAAAAAAAAAOC4O3AwH+vfvD9ufr4yWnKNvc6PTs+O+ZN3RN2IW6I8NTDp+JxCylMDY8bIe2P+5B1RO6iux9mWXGPc/HxlrH/z/jhwMJ90dAAAAAAAAAAAAAAAAABOAQoIAQAAAAAAAAAAAAAAADiutrWvisVrh8XKbdf1OpuuzMTV566L+kxDDKqoSTo6p7BBFTUxd+yauPrcdZGuzPQ4u3LbdbF47bDY1r4q6dgAAAAAAAAAAAAAAAAAnORSSQcAAAAAAAAAAAAAAAAA4OS0Z39bPLb5ksh1ZHudrSxPx8VnLYnMn18WA8r86hsnjpqqiTFv/KuR/d8/jmde/050dOaKznV05uLRzdMjXZmJq8Y8rUATAAAAAAAAAAAAAAAAgOOiLOkAAAAAAAAAAAAAAAAAAJxcOvP7oiFbH3c2D+9T+eCUEQtj/qTWGHN6vfJBTkgDylIx5vT6mD+pNaaMWNjjbK4jG3c2D4+GbH105vclHR0AAAAAAAAAAAAAAACAk4wCQgAAAAAAAAAAAAAAAACOiQMH87H+zfvj5ucroyXX2Ov86PTsmD95R9SNuCXKUwOTjg+9Kk8NjLoRt8T8yTtidHp2j7Mtuca4+fnKWP/m/XHgYD7p6AAAAAAAAAAAAAAAAACcJBQQAgAAAAAAAAAAAAAAAHDUtrWvisVrh8XKbdf1OpuuzMTV566L+kxDDKqoSTo69NugipqozzTE1eeui3RlpsfZlduui8Vrh8W29lVJxwYAAAAAAAAAAAAAAADgJJBKOgAAAAAAAAAAAAAAAAAApWvP/rZ4bPMlkevI9jpbWZ6Oi89aEpk/vywGlPn1NkpfTdXE+NaElti8qyGeef070dGZKzrX0ZmLRzdPj3RlJq4a87TiTQAAAAAAAAAAAAAAAACOWFnSAQAAAAAAAAAAAAAAAAAoPZ35fdGQrY87m4f3qXxwyoiFMX9Sa4w5vV75ICedMafXx4Lz34opIxb2OJfryMadzcOjIVsfnfl9SccGAAAAAAAAAAAAAAAAoAQpIAQAAAAAAAAAAAAAAACgzw4czMf6N++Pm5+vjJZcY6/zo9OzY/7kHVE34pYoTw1MOj4cNwPKUlE34pa4+bNvx+j07B5nW3KNcfPzlbH+zfvjwMF80tEBAAAAAAAAAAAAAAAAKCEKCAEAAAAAAAAAAAAAAADok23tq2Lx2mGxctt1vc6mKzNx9bnroj7TEIMqapKODh+YyvLqqM80xPzJOyJdmelxduW262Lx2mGxrX1V0rEBAAAAAAAAAAAAAAAAKBGppAMAAAAAAAAAAAAAAAAAcGLbs78tHtt8SeQ6sr3OVpan4+KzlkTmzy+LAWV+hY1T16CKmvjWhJbY1r4qnvrVV6OjM1d0rqMzF49unh7pykxcNeZphZ0AAAAAAAAAAAAAAAAA9Kgs6QAAAAAAAAAAAAAAAAAAnJg68/uiIVsfdzYP71P54JQRC2P+pNYYc3q98kH4NyOrL4oF578VM0be1+NcriMbdzYPj4ZsfXTm9yUdGwAAAAAAAAAAAAAAAIATlAJCAAAAAAAAAAAAAAAAAAq07V0fNz9fGS25xl5nR6dnx/zJO6JuxC1RnhqYdPRTWmd+X+x6Z0ts3tUQu97ZosjuBDGgLBUTz7g2bv9cR0w8Y16Psy25xrj5+crYvKsh6dgAAAAAAAAAAAAAAAAAnIBSSQcAAAAAAAAAAAAAAAAA4MSz9w9v9DqTrszEX3zywaipmph03FParne2xAs7/q7bssjK8nSMTl8Wnzvzpqgsr0467imtPDUwZoy8NyZ94lvxk1/NjdY9Td3O/qb9mRhzen3SkQEAAAAAAAAAAAAAAAA4wZQlHQAAAAAAAAAAAAAAAACA0pOuzMS88a8qH0zQgYP5WLntr+OelzLdlg9GRHR05mL9m0vj9heHxOZdDUnHJiIGVdTE2I/NSToGAAAAAAAAAAAAAAAAACVIASEAAAAAAAAAAAAAAAAA/ZbryMb//f98MTo625OOckras78tFq8dFuvfXNqv+5ZvuSKWbZoSBw7mk36EU1ZHZ3ss2zQllm+5IukoAAAAAAAAAAAAAAAAAJQgBYQAAAAAAAAAAAAAAAAAHJHWPU1x+4tDYvOuhqSjnFIOHMzHA698Jjo6c0d0f+uepnhy61eSfoxT0uZdDXH7i0OidU9T0lEAAAAAAAAAAAAAAAAAKFEKCAEAAAAAAAAAAAAAAAA4Ksu3XBHLNk2Jjs72pKOcEp7c+pUjLh88pCXXGNvaVyX9KKeMjs72WLZpSizfckXSUQAAAAAAAAAAAAAAAAAocQoIAQAAAAAAAAAAAAAAADhqrXua4vYXh8TmXQ1JRzmpbWtfFS25xmOy11O/+qrSyA/AtvZVcfuLQ6J1T1PSUQAAAAAAAAAAAAAAAAA4CSggBAAAAAAAAAAAAAAAAKDPKsvTPV5fvuWKWLZpimK746T5jbuP2V4dnbn4f3evSfqRTlqd+X3RkK2PRzdPTzoKAAAAAAAAAAAAAAAAACcRBYQAAAAAAAAAAAAAAAAA9NmC89+KiWfM63GmdU9T3P7ikNi8qyHpuCed1j1Nx3S/37Q/k/QjnZS2ta+KO9fVRkuusce52kF1cfNn3046LgAAAAAAAAAAAAAAAAAlRAEhAAAAAAAAAAAAAAAAAH02oCwVM0beG9d/JhuV5ekeZ5dvuSKWbZoSHZ3tScc+KezZ33bM99y+54WkH+uk0pnfFw3Z+nh08/To6Mz1ODtr1BMxd+yaqCyvTjo2AAAAAAAAAAAAAAAAACVEASEAAAAAAAAAAAAAAAAA/Xb6h0fFgvPfiolnzOtxrnVPU9z+4pDYvKsh6cgl741/2nDM9+zozEVnfl/Sj3ZS2Na+Ku5cVxstucYe52oH1cXNn307xpxen3RkAAAAAAAAAAAAAAAAAEqQAkIAAAAAAAAAAAAAAAAAjsiAslTMGHlvXP+ZbFSWp3ucXb7lili2aUp0dLYnHZv36fhXn8nR6Mzvi4ZsfTy6eXp0dOZ6nJ0x8r6YO3ZNVJZXJx0bAAAAAAAAAAAAAAAAgBKlgBAAAAAAAAAAAAAAAACAo3L6h0fFgvPfiolnzOtxrnVPU9z+4pDYvKsh6cglKV056rjs+5E//XjSj1aytrWvijvX1UZLrrHHuXRlJuZP3hETz7g26cgAAAAAAAAAAAAAAAAAlDgFhAAAAAAAAAAAAAAAAAActQFlqZgx8t64/jPZqCxP9zi7fMsVsWzTlOjobE86dkkZXHHmcdl3QFkq6UcrOZ35fdGQrY9HN0+Pjs5cj7MzRt4X88a/GoMqapKODQAAAAAAAAAAAAAAAMBJQAEhAAAAAAAAAAAAAAAAAMfM6R8eFQvOfysmnjGvx7nWPU1x+4tDYvOuhqQjl4TO/L5Y8eu5x2XvZZumxJ79bUk/Yslo27s+7lxXGy25xh7n0pWZmD95R0w841oljwAAAAAAAAAAAAAAAAAcMwoIAQAAAAAAAAAAAAAAADimBpSlYsbIe+P6z2Sjsjzd4+zyLVfEsk1ToqOzPenYJ6QDB/Ox/s374+bnK3stvDtSrXua4s7m4bFy219HZ35f0o98wjpwMB8rt/11PPTLSdHRmetxdsbI+2Le+FdjUEVN0rEBAAAAAAAAAAAAAACA/4+9v4+uu6zzhf+PadY+9u7ucRpOYAdpTWmUDpjEDExvoKWCd2o7yKpnFkWblIHhho6gUmA4Dk619BSYrlO1SyiOyKqMg9okh4c1YwcRbI8oJcDw8AtJLMaZVGKLZENvEjndPZnJJPH3h0OHmJ3nh502r9darNV9XZ/vdX2uK7FrxzR5wwlGACEAAAAAAAAAAAAAAAAAk6JobmlsXH4oli7YMGRda8feuP3HJ0dDe02uW55W2jrrY+uT82N3y/VTsl/9wR2x6UfJaGivid6+nlwff1ppP9IcW5+cH/UHdwxZl0yk4sbzmmLpgs/GrLz8XLcNAAAAAAAAAAAAAAAAwAlIACEAAAAAAAAAAAAAAAAAk2ZWXn6sXnxX3HheUyQTqSFr65rXxc4XVkSm+3Cu286pjq622PnCirjn+WWR6U5P+f51zetix7NnR1tnfa6vIud6+3pid8sNceczZcN+LJYu2BAblx+KormluW4bAAAAAAAAAAAAAAAAgBOYAEIAAAAAAAAAAAAAAAAAJl3R3NLYuPxQLF2wYci61o69cfuPT46G9ppctzzlunuOxu6WG2LbvoXR2rE3p72kM01xz/PLoqapOjq62nJ9NTnRfqQ5tj45P+oP7hiyLplIxY3nNcXqxXfFrLz8XLcNAAAAAAAAAAAAAAAAwAlOACEAAAAAAAAAAAAAAAAAU2JWXn6sXnxX3HheUyQTqSFr65rXxc4XVkSm+3Cu2550vX090dBeE9ueKhk27C4ioqSgctj7G055qipWLNoybF1juja27VsYew/cFt09R3N9VVOit68ndrfcEHc+UxaZ7vSQtUsXbIiNyw9F0dzSXLcNAAAAAAAAAAAAAAAAwAwhgBAAAAAAAAAAAAAAAACAKVU0tzRuWdYa5amqIetaO/bG7T8+ORraa3Ld8qRp66yPHc+eHXXN64YNu0sly+LG85rinPdeNWztcBrTtXHWyX8cmy58Y9iPQ0TEngObY9tTJSf0xyIiov1Ic2x9cv6wQZDJRCpuPK8pVi++K2bl5ee6bQAAAAAAAAAAAAAAAABmEAGEAAAAAAAAAAAAAAAAAEy5RP6cqC6riasqvh/JRGrI2rrmddF+pDnXLU+oTPfhqGmqjnueXxbpTNOQtclEKtaW7oqbzm+Muf8pFXXN67LWlaeqBoQJlqeqIpUsy1r/zRc/GrPz50V1WU1c94dPDVr3Hz2no655XXz16fIT7uMR8dswyDufKRs23LE8VRUblx+KormluW4ZAAAAAAAAAAAAAAAAgBkoP9cNAAAAAAAAAAAAAAAAADBzLS68OG5Z1hoPvbw+GtO1WWuWLthwwoS99fb1xBOvbI09BzaPqH7Foi2x/H03RyJ/TkRE7G65IWtdMpGKT37w2zErLz+qy2qit68nZuX99kcIu3uOxranSgYE62W60/HEK1ujctGtUTxvaWw498Voev2BeOTnNw8ZwpfONMWdz5RFeaoqVi++K5KJwlxf64Qonrc0Sgoqo7Vj76B3fNlZ98Xiwotz3SoAAAAAAAAAAAAAAAAAM1herhsAAAAAAAAAAAAAAAAAYGZL5M+J6rKauKri+5FMpPrNJROp+NgHtue6xQnR0F4TW5+cP6LwwZKCyrjlgleictGtx8IHWw4/OmhI4zVn//BY4GBE9PtzIn9OXHbWfVmf23Ngc3R0tR17pqKoOm5Z1horFm0ZtsfGdG3c/uOTY++B26K3ryfX1zshqspqso6Xp6rilmWtwgcBAAAAAAAAAAAAAAAAyDkBhAAAAAAAAAAAAAAAAABMC4sLL45blrVGearq2NjvBusdj9qPNMdXny6PuuZ1kelOD1mbTKTiuj98KtafsycKZhcfG+/uORoP7r866zPlqaoomls65LqLCy+OkoLKrHP3N3y8X4BgIn9OVC66NW654JVBn3mnPQc2x9Yn50fL4UdzdcUTJpkojNWL737H61RcVfH9qC6rORYECQAAAAAAAAAAAAAAAAC5JIAQAAAAAAAAAAAAAAAAgGkjkT8nqstq4qqK78eKRVuGDdabzrp7jkZNU3Xc+UxZpDNNw9avLd0VG5cfiuJ5SwfMPda6MWt4YTKRijVn7hxRP1VlNVnH05mmaHr9gQHjBbOLY/05e+K6P3wqkonUkGtnutPxrYaPxVefLo+OrrapuN5Jc+5p10YqWRblqaq4ZVlrLC68ONctAQAAAAAAAAAAAAAAAMAxAggBAAAAAAAAAAAAAAAAmHYWF14clYtuzXUbY9Lb1xP1B78Wm36UjMZ07bD15amquP0jmagoqo5ZefkD5tuPNEf9wR1Zn73srPsikT9nRH0lE4WxtnRX1rm65nWR6T6cda543tLYuPzQoM++UzrTFNv2LYyapuro7jk6aXc8mWbl5cdnljwd1WU1I75bAAAAAAAAAAAAAAAAAJgqAggBAAAAAAAAAAAAAAAAYIK0HH40tj45P3a3XD9sbSpZFrdc8MqQQXe9fT3xzRc/mnWupKAyFhdePKr+KoqqI5UsyzpX21Q96HOz8vKjoqg6bv9IJpYu2DDsPo3p2tj0o2Q0tNdEb1/PhN3vVBE8CAAAAAAAAAAAAAAAAMB0JYAQAAAAAAAAAAAAAAAAAMapo6stdr6wIr7V8LHIdKeHrE0mUrG2dFfcdH5jFMwuHrL22Ve/Meh6VWU1Y+r1yorvZR1v7dgbDe1Dr5nInxOrF98Vt1zwyqBBhu9U17wutj45P9o668d6tQAAAAAAAAAAAAAAAADAO+TnugEAAAAAAAAAAAAAAAAAyKXunqPxZtcvIp1pjoiIVLI0Tpp9eiTy54zo2cdaN0b9wR0j2mvFoi1x0cKNMStv+B/v6+hqi90t12edW7347kgmCsd03oLZxbF68d1Z137k5zfHWYUfH/bsBbOL46bzG6Pl8KPx4P6rhwxdzHSn457nl0VJQWVcetbOYUMXIyJ6+3rirX99NX7566cjImLeu98X/2XOB8Z8ZgAAAAAAAAAAAAAAAAA4UQggBAAAAAAAAAAAAAAAAGDG6e3riWdf/Ub86Bd/NWh4XipZFktOWx/nnnbtgMDA3r6eaHr9gahrXjei/cpTVbHq/VtHFL73tof3rx+0r3NPu3Zc5z/3tGvjuVd3RjrT1G88052Oh15eH9VlNSNaZ3HhxbFx+aF49tVvDBqW+LbWjr2xbd/CWLpgQ6wq2Zo15LDl8KOx75dfjdaOvYOus3TBhvjI6V8URggAAAAAAAAAAAAAAADAjJSX6wYAAAAAAAAAAAAAAAAAYCp1dLXFjmfPjt0t1w8aPhgRkc40xe6W62PHs2dHpvvwsfG2zvrY+uT8EYUPppJlcd0fPhXVZTWjCh9saK8ZNITvyorvDQhEHK1ZefmxtvS7Weca07XRcvjRUa21dMFn4/aPZKI8VTVsff3BHbHtqZJoaK+J3r6eiPhtoGNNU3V8q+FjQ4YPvv387T8+ORraRxaSCAAAAAAAAAAAAAAAAAAnEgGEAAAAAAAAAAAAAAAAAMwY9Qe/Ftv2LYx0pmnEz6QzTXH7j0+O+oNfi5qm6rjn+WVDBhe+bW3prthw7otRPG/pqHrs7jk6aLjh0gUbRhVkOJSiuaWxdMGGrHMP7r/6WDjgSCXy50R1WU3ceF5TpJJlQ9ZmutNR17wudjx7djS018TWJ+dHY7p2VPvVNa+LmqbqUfcJAAAAAAAAAAAAAAAAAMczAYQAAAAAAAAAAAAAAAAAzAjtR5pjd8v1Y35+d8v1IwrJW7pgQ9z+kUxUFFXHrLz8Ue/z0Mvrs44nE6n42Ae2T+idfOwD2yOZSA0Yz3Sn4/v/dPOY1iyaWxo3nd8Ya0t3ZV37ndKZpqhrXjeiQMdsGtO18eyr35jQOwEAAAAAAAAAAAAAAACA6UwAIQAAAAAAAAAAAAAAAAAnvN6+nvjmix+d1D1SybK45YJXYvXiuyKRP2dMa7QcfnTQkMPLzrpvTIGGQ5mVlx9/Uv5Q1rn6gzui/UjzmNeuKKqOjcsPxYpFWya059+1u+X66Ohqm9Q9AAAAAAAAAAAAAAAAAGC6EEAIAAAAAAAAAAAAAAAAwAnv+/90c2S605OydjKRiqsqvh83nd8YBbOLx7xOb19PPLj/6qxz5amqWFx48aT0XzxvaZSnqrLO1TVfHr19PWNee1ZeflQuujVuueCVQfeYCPc3fHxcfQIAAAAAAAAAAAAAAADA8UIAIQAAAAAAAAAAAAAAAAAntN6+nqg/uGNS1l6xaEtsXH5oQsIBhwpJXHPmzkm9ozVn7oxkIjVgPJ1pimdf/ca41y+YXRzVZTVx3R8+Falk2YT3n840xRtHfzapdwQAAAAAAAAAAAAAAAAA04EAQgAAAAAAAAAAAAAAAABOaG/966sTvmYqWRabLnwjKhfdGrPy8se9XkdX26AhiWtLd0Uif86k3lEif05ccsb2rHO7W66Pjq62CdmneN7S2HDui7F68d0TfoZ0pnkyrwgAAAAAAAAAAAAAAAAApgUBhAAAAAAAAAAAAAAAAACc0H7566cnfM1TkmdFMlE4IWv19vXE/Q0fzzqXSpZFRVH1pN7P2yqKqqOkoDLr3GD9jcWsvPw4fd6HJ7z/nx1+ZNLuBgAAAAAAAAAAAAAAAACmCwGEAAAAAAAAAAAAAAAAAJzQDr31jxO+5oGOJyZsrWdf/UakM01Z566s+N6k3Us2VWU1WcfTmaZoaK8Z5WqDS2eaJ7z3ifyYAAAAAAAAAAAAAAAAAMB0JYAQAAAAAAAAAAAAAAAAgBNapvvwJKyZnrDedrdcn3Vu9eK7o2B28WRezQDJRGGsLd2Vda6ued2k3OVEmaiPCQAAAAAAAAAAAAAAAABMZwIIAQAAAAAAAAAAAAAAADihve/3zp/wNctTVROyTm1TddbxZCIV55527aTey2DKTvlEpJJlWed2t9wwIXvMe/f7JrzvkoLKSb0XAAAAAAAAAAAAAAAAAJgOBBACAAAAAAAAAAAAAAAAcEJ779yKCV/z9cz+6OhqG9caDe010dqxN+vcNWf/MGbl5U/F9QwwKy8/rqz4Xta5xnRttBx+dNx7dP7LLye874XzLpj0uwEAAAAAAAAAAAAAAACAXBNACAAAAAAAAAAAAAAAAMAJ7b/M+cCEr5nONMW2fQujpql6TEGE3T1H45Gf35x1rjxVFUVzS6f6mvopmF0cqxffnXXuwf1XR3fP0TGt29ZZH199ujzqmtdNeM+n/edzpvSOAAAAAAAAAAAAAAAAACAXBBACAAAAAAAAAAAAAAAAcEJLJgojlSyblLUb07VjCiJ86OX1kelOZ+k1FWvO3Jmrq+rn3NOujWQiNWA8052Oh15eP6q12o80x1efLo97nl8W6UzTpPR7+rwP5+SeAAAAAAAAAAAAAAAAAGAqCSAEAAAAAAAAAAAAAAAA4IR3ZcX3JnX90QQRth9pjsZ0bda5y866LxL5c3J1Tf3MysuPa87+4aDnbT/SPOwaHV1tUdNUHXc+UzZpwYMREWtLd02bewMAAAAAAAAAAAAAAACAySSAEAAAAAAAAAAAAAAAAIATXsHs4li9+O5J32e4IMLevp745osfzfpsSUFlLC68ONdX1U/R3NJYumBD1rlvvvjR6O3ryTr3dvDgtn0LBw1bnCglBZVRUVSd66sCAAAAAAAAAAAAAAAAgCkhgBAAAAAAAAAAAAAAAACAGeHc066NkoLKMT+fSpZFeapqRLWDBRE+8crWyHSnsz5TVVaT6yvK6mMf2B7JRGrAeKY7HU+8srXf2FQGD75tut4bAAAAAAAAAAAAAAAAAEwGAYQAAAAAAAAAAAAAAAAAzAiz8vLj//2DH8TqxXePeY1PfvDbccsFr8SKRVtGVP/OIMKWw4/GngObs9atXnx3JBOFub6iQe/tsrPuyzq358Dm6OhqG3XwYDKRirWlu8b1sSgpqJtPntIAAIAASURBVIxNF74xbe8NAAAAAAAAAAAAAAAAACZDfq4bAAAAAAAAAAAAAAAAAICpMisvP5Yu+GycPu/D8c0XPxqZ7vSIn01nmqLp9Qeioqg6KhfdGsvfd3M8+cvtg4YKvlNjunbQYL5UsizOPe3aXF/NkBYXXhzlqaqsZ9i2b+GI10kmUnHJGduj7JRPRG/fv8amHyXH1M/a0l1RUVSd62sBAAAAAAAAAAAAAAAAgCkngBAAAAAAAAAAAAAAAACAGadobmlsXH4o3jj6s0hnmuNnhx+JAx1PRKY7HeWpqjjafThaO/YOeK6ueV2cVfjxSOTPiUT+nFEHEWZzZcX3Ylbe9P9xvzVn7jx2R6P1zuDBt8/6P396xaC1Hzn9C/HLXz/d72Pyvt87P947tyJOnfuhSOTPyfV1AAAAAAAAAAAAAAAAAEBOTP+fSAQAAAAAAAAAAAAAAACASTArLz+K5pZG0dzSqCiq7jfX29cTW5+cnzVs76GX10d1Wc2x1+MJIkwmUrm+hhFL5M+Jj5z+hdjdcv2onltbuqtf8GBERPuR5mhM12at/5Pyh6J43tJYuuCzuT4yAAAAAAAAAAAAAAAAAEw7ebluAAAAAAAAAAAAAAAAAACmm1l5+XHN2T/MOteYro22zvoB428HEd7+kUysXnz3iMIFM93p2LZvYdQ0VUdHV1uujz2o7p6jsffAbaMKH1yxaEvc/pFMVBRV9wsf7O3riW+++NGsz5SnqqJ43tJcHxcAAAAAAAAAAAAAAAAApi0BhAAAAAAAAAAAAAAAAACQRdHc0ihPVWWd+07jmujt68k6l8ifE0sXfDY2Lj806PO/qzFdOy2DCN8OHtz0o2TsObB5RM+8HTxYuejWSOTPGTD/7KvfiEx3OuuzqxfflesjAwAAAAAAAAAAAAAAAMC0JoAQAAAAAAAAAAAAAAAAAAax5sydWccz3el49tVvDPv8gY4nRrXfeIMIe/t6ov1IczS014wryHAswYNv+4NTr8gaPPjbezscu1uuzzq3evHdkUwUjrlnAAAAAAAAAAAAAAAAAJgJ8nPdAAAAAAAAAAAAAAAAAABMV4n8ObG2dFfUNa8bMLe75fr4/cJLomB2cdZnv/9PN0emOz2mfRvTtdGYro3yVFWsev/WQfeIiOjoaov/32vfjubXH450pmnAfHmqKt73e+dHeeqTwwb8dfccjSd/uX3UoYPv9PD+9bH+nD1Z53a33JB1PJlIxbmnXTvmPQEAAAAAAAAAAAAAAABgpsjLdQMAAAAAAAAAAAAAAAAAMJ1VFFVHKlmWde7h/euzjnd0tUX9wR1Z51YvvjvWlu6KZCI17N6N6drYtm9h1DRVR0dX24D5hvaa2LZvYew5sDlr+ODba+xuuT6++nRZtHXWZ63p7jkaew/cFpt+lBxx+ODSBRuyjrd27I2G9poB422d9dGYrs36zJ+UPxSz8vJHtC8AAAAAAAAAAAAAAAAAzGQCCAEAAAAAAAAAAAAAAABgGFdWfC/reGvH3mg5/Gi/sd6+nri/4eNZ61PJsjj3tGujoqg6Ni4/NOYgwt6+ntjdckPUNa8b8Rky3em45/ll/fodS/DgikVb4vaPZGL14rsGDSGsa14X3T1H+93JdxrXZK0tT1VF8bylY/mwAAAAAAAAAAAAAAAAAMCMk5/rBgAAAAAAAAAAAAAAAABguiuYXRxLF2yI+oM7Bsw9uP/quGVZayTy50RERNPrD0Q605R1nSsrvhez8n77o32z8vKjoqg6yk75RDS9/kA88vObI9OdHrKPxnRtNKZrI5lIDVs7mG81fCxWLNoSETHi0MGI3wYPLn/fzcfOGRGxqmRrNKYfyNrLQy+vj+qymoiIePbVbwza76r3bx3bBwUAAAAAAAAAAAAAAAAAZqC8XDcAAAAAAAAAAAAAAAAAAMeDj31geyQTqQHjme50PNa68d//fDjqmtdlfX7Foi1RMLt4wPjbQYQblx+KtaW7su6Rbc/x2HNg84jDB1cs2hK3fyQTlYtu7Rc+GBGRyJ8Tl511X9bnGtO10dZZH5nuw7G75fpR3QkAAAAAAAAAAAAAAAAAkJ0AQgAAAAAAAAAAAAAAAAAYgVl5+YOG7dUf3BEdXW2xu+WGrPPJRCouWrhx2PVHG0Q4mYYKHnynxYUXR3mqKuvcdxrXjOtOAAAAAAAAAAAAAAAAAID+BBACAAAAAAAAAAAAAAAAwAgNFba3bd/CaEzXZp275uwfxqy8/BHtkesgwvJU1YiCB99pzZk7s45nutOD3sllZ9034jsBAAAAAAAAAAAAAAAAAH5LACEAAAAAAAAAAAAAAAAAjMLqxXeNqr48VRVFc0tHvc9UBxGWp6rilgteieqymhEHD74tkT8n1pbuGnF9SUFlLC68eFLPAwAAAAAAAAAAAAAAAAAnIgGEAAAAAAAAAAAAAAAAADAKyURhrF589whrU7HmzJ3j2u/tIMLP/N/PTMp53hk8WDC7eMzrVBRVR0lB5YhqLz1rfHcCAAAAAAAAAAAAAAAAADOVAEIAAAAAAAAAAAAAAAAAGKVzT7s2UsmyYesuO+u+SOTPmZA9f/nrpyflLKsX3zWu4MF3qiqrGbZmxaItE7YfAAAAAAAAAAAAAAAAAMw0AggBAAAAAAAAAAAAAAAAYJRm5eXH2tLvDllTnqqKxYUX57rVYXX3Hp2wtZKJwli9+O4h5lNx0cKNuT4yAAAAAAAAAAAAAAAAABy3BBACAAAAAAAAAAAAAAAAwBgUzS2NkoLKQedXL75rQvdLJUsn5Rzv+U+nTeh6p8/78KT0CQAAAAAAAAAAAAAAAAAIIAQAAAAAAAAAAAAAAACAMenoaovWjr2Dzv9/R/9pQvc7afbpk3KO3r5/ndD1Hvn5nw86l+lOxxOvbJ2UcwAAAAAAAAAAAAAAAADATJCf6wYAAAAAAAAAAAAAAADgeNDV1RWdnZ1x6qmnjviZzs7O+MpXvtJvrKysLD75yU/m+jjABHh4//oh57/TuCY2Lj8Us/LG/6N8bZ318Xc/+/SknGPTj5KxYtGWWP6+myORP2dca7UcfnTIUMaIiD0HNscfnHpFFMwunpTzAAAAAAAAAAAAAAAAAMCJTAAhAAAAAAAAAAAAAAAAZNHa2hpPPPFE/K//9b+itbV1wPzKlSvjggsuiMrKysjPz/5jOl1dXfH4448PGBdACMe/hvaaYYP2Mt3peOKVrVG56NYx7/N28GA60zSp59lzYHPsObB5XEGEvX098eD+q0dUe3/Dx+Om8xsn9UwAAAAAAAAAAAAAAAAAcCISQAgAAAAAAAAAAAAAAADv0NPTE3feeWfU1dUNWff444/H448/Hl/84hfjc5/73IwLFezq6oqf/OQn/cZSqVR86EMfynVrM9pbb70V73nPe3Ldxgkv03046prXjah2z4HN8QenXhEFs4tHtcdUBQ9m63esQYRPvLI1Mt3pEdWmM03R0F4TFUXVU3o+AAAAAAAAAAAAAAAAADjeCSAEAAAAAAAAAAAAAACAf/faa6/FVVddFW+++eaonvvyl78c//t//+9Yv359ro8wZTo7O+OLX/xiv7GVK1cKIMyxv/3bv43t27fHHXfcEVdccUWu2zlh7W65YVT19zd8PG46v3FEtbkKHvxdow0i7Ohqiz0HNmedSyZSWYMJ65rXxftPWhHJRGFOzwoAAAAAAAAAAAAAAAAAx5O8XDcAAAAAAAAAAAAAAAAA00FXV9eYwgffdu+998bOnTtzfQyIQ4cOxZVXXhkXXnhhPPXUU7lu54TTcvjRaEzXZp277g+z33c60xQN7TVDrtvWWR9ffbo87nl+2ZSEDyYTqRHV7TmwOTb9KBl7D9wW3T1HB617eH/2ANbyVFXcsqx10OdGG+YIAAAAAAAAAAAAAAAAADOdAEIAAAAAAAAAAAAAAACIiO9+97uDhg+uXLky7rjjjrjjjjti7dq1cdJJJ2Wtu/fee6OzszPXR4GIiPjJT34SF1xwQaxatSpefvnlXLdzQujuORoP7r8669yKRVuieN7SWFu6K+t8XfO6rAF+ow0eTCZSsbZ0V2yt/Le47g+fGnGQ4Dufv6ri+7Hpwva47g+filSybETPDRVE2HL40Wjt2Jv1udWL74pE/pxB76UxXRsthx8d5UcCAAAAAAAAAAAAAAAAAGYuAYQAAAAAAAAAAAAAAADMeK+99lrce++9A8ZPOumk2LNnT/zVX/1VrFq1KlatWhX/7b/9t3j88cfjm9/8Zta17rvvvlwfB/p5/PHH46yzzoo1a9bEG2+8ket2jmsPvbw+Mt3pAePJRCouWrgxIiLKTvnEoKF+D728/tifxxo8uHH5oagoqo5ZeflRPG9p3HR+U5QUVI6o//JUVdyyrDUWF14cEfHvzzeOK4iwt69n0FDG1YvvjmSiMCIiKoqqB+3zwf1XR29fz4R8jAAAAAAAAAAAAAAAAADgRJef6wYAAAAAAAAAAAAAAAAg12pqagaMnXTSSVFXVxfz5s3L+syHPvShWLt2bdTV1UVERElJSfzxH/9xfPSjHx3Rni+99FI8+OCDceDAgWhtbY2TTjopzjnnnPijP/qjWLZs2bDP9/T0xE9/+tPYu3dvvPDCC9Ha2npsbuXKlTFv3ryorq6OU089NevzXV1d8ZOf/KTf2KpVq4719vzzz0dbW1tERFx22WXxoQ99KF566aVIp38bvnbo0KEBax44cCAee+yxAeNvr/u7+3/3u9+Ntra2ePzxx/vd+4oVK6KysjI++MEPRn6+H4GaKA8//HA88cQTsXbt2ti+fXu8+93vznVLx5X2I83RmK7NOvcn5Q/FrLzffq7OysuPtaXfjTufGRjo15iujZPnLI7m1x8eUehgxG+DBy85Y3uUnfKJY3v0ny+M//cPfhCH3vrH+NWRhvjlr58+1mcykYpFBRfF7xdeEu/7vfOjYHZx1j3eDiJs66yPv/vZp0fU254Dm2PPgc2RSpYNGsp47mnX9hurKquJ23988oDaTHc6vv9PN8fqxXdN5IcMAAAAAAAAAAAAAAAAAE5I7/rNb37zm1w3AQAAAAAAAAAAI/Gud72r32v/9AUAYOza2tpi4cKF/ca8vwJgJlu5cmW8+eab/cY+97nPxSc/+ckhn+vp6YlvfetbsWbNmqxBha+99lqsXr2639iSJUti3rx5/UL3fteSJUvir/7qrwYNP+zp6YkNGzbEc889N+zZPvWpT8VVV101IMgvW28vvPBC7Ny5M+69995+43fccUesWrUqvvCFLwzZdzYnnXTSgGey7THYPezYsUMI4SjcddddceONNw5bN2/evLjmmmti69atg95vQ3tN1DWvGzC+7aMz731jb19PbH1yftagvfJUVVSXDQwxrWmqHjSwcCSGCx4cSc9jeS4iRhVEOJgbz2uKormlA8brD34tdrdcP6pnZoJbfviuAWODfW4BADDzrF69Ov7hH/7h2Ot9+/bFsmXLct0WAEDOvPPfk/q3DgAAAAAAAAAAzER5uW4AAAAAAAAAAAAAAAAAcqmnp2dA+GBExEc/+tFhn83Pz4/169cPGhSYzXPPPTdsiN9zzz0XX/jCFwbtd6ThgxER9957bzz88MMjqn3ppZdGFAw4Guecc06/1yMNH3z7HjZs2BA9PT0T2hMRnZ2d8eUvfzne//73xz333JPrdqa97//TzVnDB5OJVKw5c2fWZwYbH04ykYq1pbti4/JDUVFUPeYQwbE+FxFRPG9p3HR+Y1z3h09FKlk26ufLU1WDBgmee9q1g65Z13x59Pb53zsAAAAAAAAAAAAAAAAADEUAIQAAAAAAAAAAAAAAADPaG2+8MWCspKRkVKGCk+G5556Ll156qd/YaMMH3/blL385XnvttWHrrrnmmgk/R3Fx8bE/d3Z2jjrg8LnnnotvfetbE94Xv9XW1haf/vSnY8GCBfHQQw/lup1pqf1Ic9Qf3JF17pIztkcif07WudeOvBTJRGrE+0xU8OBEGmsQ4YGOJ6KhvSZrmOCsvPy4suJ7WZ9LZ5ri2Ve/ketjAwAAAAAAAAAAAAAAAMC0lvufQAQAAAAAAAAAAAAAAJjh3nrrrXjmmWfimWeeif3798f/+T//J/Lz/djHZOvq6oo9e/ZkDSBctGjRpO9/0kknxZo1a+Kiiy6Kb33rW/H4448PqHnwwQfjQx/60LHX+fn5UV1dHQcOHIg333wzIiKWLFkSf/7nfx7FxcXxb//2b/Hiiy/G1772tWhtbe23VlNTU5x66qmj6nHlypUREZFK/TZE7bLLLosLLrggIiIOHTo0IEywpKQk/vRP/7TfWFnZf4SW7d+/f8AeS5YsiT/7sz+LD37wg3HkyJF488034zOf+cyx861cuTIuuuiiiIh46KGH4tvf/vakf2yOZ01NTWN67tChQ3HZZZfFhz/84bjjjjti2bJluT7KtNDb1xN1zZdnnSspqIyKouoB422d9fF3P/t0pDMj+1gkE6m45IztUXbKJ6ZF6GA2bwcRjvRsme501DWvi0d+fnPWsxXMLo6lCzZkDXbc3XJ9/H7hJVEwuzjXx865deW1sS5qc90GMI1UVlZGYWFhREScf/75cfrpp8eZZ57ZL/AZAAAAAAAAAAAAAACAE9/0/GlEAAAAAAAAAAAAAACAE9i//Mu/xAMPPBA//OEPo76+Ptra2nLd0oyWTqenfM+VK1fGli1bjgVN/tVf/VVcdtllcc011/Sre+GFFwY8u2zZsvj+978fe/fujb/927+N7du3x+zZsyPitwGFy5Yti1/96lfx5S9/ud9zP/3pT2PVqlUj6u+OO+6IysrKAUGY7wxDfO211wYEEC5atGjIPTKZzICx1atXH1t33rx5MW/evKirq4uHHnoo1qxZE/PmzTtW+6tf/Sr+4R/+YUo+RjPVT37yk7jgggvi0ksvjav+4oJctzMlunuOxptdv4h0pjl+dviRiIh43++dHyfNPj1e/d8vDBq2d+lZO/u9Hm3wYETE0gUb4mMf2D5tgwd/V/G8pbHh3Bdj65PzI9M9/N+dQwURfuwD26Mx/UDWdR7evz5WLPrv0fkvv+z3MXnv3Ir4L3M+EMlEYa6vAiAn9u7de+zPtbX/EVCaSqXiuuuui+uuu+5YQCEAAAAAAAAAAAAAAAAnruPjpxIBAAAAAAAAAAAAAABOAP/yL/8S//W//td4/PHHc90KwyguLp7U9S+77LIB4X5nnHHGgLo333wz6/P5+fmxatWqQcP+LrjgggEBhJ2dnSPq7c4774xly5ZN6vnf6W//9m/jrbfeirPPPjve+973xuzZs2PevHmxfv36KeuBgV577bV4/bU3I/6vXHcyebp7jsZDL6+PxnTtgLlsY++0evHdUTC7OCLGFjz4H/s8EB/7wPZcX8WoNL3+wIjCB99psCDCa87+Ydz5TNmA+taOvdHasbff2Ds/JslEKq45+4dRNLc019cBMC2k0+nYvHlzbN68OaqqqmLr1q2T/n4WAAAAAAAAAAAAAACA3BFACAAAAAAAAAAAAAAAMAXa29vjox/9aPz0pz/NdSuMQFtb26Su/8EPfnDA2OzZs6OkpCRaW1tHvE5nZ2fs378/fvWrX0VTU1N0dnbGc889N67eJjN8sKwsS9BYa+uAsMQlS5bEn/3Zn8WHPvShfuNdXV2T1hu/NX/+/LjjjjviiiuuiIb2mvh5c647mhwthx+NB/dfPeogvYiIVLIszj3t2nEFD74t052OZ1/9Rixd8NlcX8mIdPccjbrmdVnnkonUsPeZLYiwPFU1bOBjtnXufKYsli7YEB/7wPaYledHJQHeVltbG7W1tbFly5a49dZbc90OAAAAAAAAAAAAAAAAk8BP1QEAAAAAAAAAAAAAAEyyr3zlK7F169bo7OwcMHfuuefGe97znrjwwgvj1FNPjdNPPz1OO+20KC4uznXbM0YymZzS/VauXBn5+dl/rGfRokUjCiB86qmn4vbbb48333xzwnubTKeeemqsXLkyHn/88SHrnnvuuXjuueeipKQk/vRP/zRWrVoVERGf//zn4/Of//yk9ni8u+uuu+LGG28c9XPFxcXxF3/xF3Hdddfl+giTbnfLDVF/cMeYn19UcGHsePbsEQcPJhOpuOSM7fGzw49kDdrb3XJ9lKc+GclEYa6vZlgPvbx+0DNuXH4o3vrXV+Oxf944bKDgO4MIz5s/9s+5+oM74kDHj+MzS56ORP6cXF/PpPrNb36T6xaAaeDtkOwjR45Ec3NzPPLII1Fbm/3v3M2bN0dLS0t8+9vfHvS9JwAAAAAAAAAAAAAAAMenvFw3AAAAAAAAAAAAAAAAcKJ68cUX45xzzonPfe5zA8IHi4uL4/77749nnnkmHnvssfj85z8fV1xxRSxbtkz44BQ7/fTTB4y98MILuW5rUP/zf/7PuPHGGyc8fHCqbNmyJT71qU/FSSedNGxta2trfPGLXxxRKCNjM2/evPjv//2/xz//8z/PiPDBlsOPjit8MOK3oXcjCR9MJlKxtnRXbFx+KCqKqmPNmTsHrd3dckOur2ZY7UeaBw0WvOys+2JWXn4UzC6O6rKauOWCV6I8VTXsmpnudOw5sHlcfaUzTfFY68ZcX8+k2NVYFb/5zW+EDwLHFBcXR3FxcZSWlkZ1dXXU1NTEv/3bv8VTTz0VVVUD/96tra2NP/qjP4rDhw/nunUAAAAAAAAAAAAAAAAmkABCAAAAAAAAAAAAAACASfCVr3wlzjnnnHjxxRcHzK1cuTJ+9rOfxRVXXJHrNomIk08+ecDYm2++Ga+99tqInn/ppZeiq6trSnptbW2NL3/5y1nnlixZEnfccUfccccdceedd05JP2ORn58f69evj+9///tx5513RklJybDP/P3f/32u2z7hFBQUxOc+97l47bXXYvPmzZGfn5/rliZdd8/ReHD/1ZO+z+8GD87K++3dJvLnxNrSXVmfaUzXRltnfa6vaFC9fT1R13x51rmSgspYXHhxv7HRBhGOV/3BHdF+pDnX1wSQE/n5+bF06dKoqamJp556KlKpVL/5vXv3RllZWRw9ejTXrQIAAAAAAAAAAAAAADBBBBACAAAAAAAAAAAAAABMsBdffDE+97nPZZ37+te/Ho899li8+93vznWb/Lv8/PxYuXLlgPG//uu/HvbZp556Kq655pq44IIL4itf+Uq89NJLk9prtkDLT33qU7Fv3774+te/HqtWrYpVq1ZN2d39rs7OzhHX5ufnx7Jly6Kuri5eeOGF2LdvX+zevTuWLFkyoLaurm7KQh5ngk9/+tPxi1/8Ir70pS/NqL+LHnp5fWS605O2/mDBg+9UdsonIpUsy/r8dxrXRG9fT66vKaum1x+IdKYp69ylZ+0c9LmpDCL85osfnbb3BzBVli5dGk1NTVFZWdlvPJ1Ox/r163PdHgAAAAAAAAAAAAAAABNEACEAAAAAAAAAAAAAAMAEeuutt2LFihUDxgsKCuL++++P6667LtctksVnPvOZAWOPP/547Ny5M3p6sgdadXZ2xu23337sdV1dXVxzzTWxdu3aSeuzqWlgANhFF10Us2fP7jf2s5/9bNLvbN68eQPGnnvuuXjqqaeGffa1114bcLezZ8+OU089NXbs2JH1DrOFLzI669ati9dffz3++q//Ot7znvfkup0p1dvXE43p2klZeyTBg2+blZcfV1Z8L+tcpjsdz776jVxf1QDdPUejrnld1rkVi7ZEweziYdeYiiDCTHc6Dr31j7m8KoBpobCwMH7wgx9EVVX/v29ra2vj0UcfzXV7AAAAAAAAAAAAAAAATAABhAAAAAAAAAAAAAAAABPok5/8ZHR2dg4Yv/fee+OKK67IdXsM4tRTT42VK1cOGL/33nvj8ssvj8ceeyxeeumleO211+Kxxx6LL3zhC7FixYp48803Bzzz+c9/fkp7f/HFF48F+XV1dcVTTz0VDz300KTv+7uhh2+78cYbo7W1NV577bVj/73ttddeiy984QuxevXquPfee2PDhg0DAh7z8/Oz/m8olUpN5bWeUC699NLYv39/fPe7342TTz451+3kxFv/+uqErzma4MF3KphdHEsXbMg6t7vl+sh0H87pXf2ux1o3Dnr+ixZuHNVa7wwiLCmonPBef3WkISd3BDDd5OfnR01NTVRW9v+79uqrr46jR4/muj0AAAAAAAAAAAAAAADGaWQ/0QgAAAAAAAAAAAAAAMCwtmzZEo8//viA8fvvvz/WrFmT6/YYxmc+85msH7/W1tb44he/OKI1SkpK4kMf+tCk9VhWVjagxy9/+cvxN3/zN3HOOedk7X8yLVmyJJ577rkB42vXru33+oUXXoiurq646qqr+oU2Pvfcc3HuuedGRMTKlSujs7Mz63oREe9973un9GwngvPOOy++9KUvxbJly3LdSs798tdPT/iaiwouioqi6jE9u6pkazSmH4hMd3rA3O6WG6K6rGbK7yibjq62qD+4I+vcZWfdN+LQxd9VMLs4znnvVdHasXdC+/3lr5+OpQs+O+X3BDBd1dTU9AsfTqfTsX379rj11ltz3RoAAAAAAAAAAAAAAADjkJfrBgAAAAAAAAAAAAAAAE4UO3b0D2n64Ac/GPv27Ysrrrgi160xAqeeemrU1dXFSSedNKbnlyxZEt/61rcmtcezzz476/ibb7455eGDERF//ud/PuLa2bNnD3m/jz/++KDhg0uWLInZs2dP+fmOV+edd1784Ac/iKefflr44L879NY/TviaBzqeGPOzifw5cckZ27PONaZro62zfsruZij3N3w863hJQWUsLrw41+0N0JiuzXULANNKYWFh7Nq1q9/Y5s2bo6enJ9etAQAAAAAAAAAAAAAAMA4CCAEAAAAAAAAAAAAAACZIR0dHv9fNzc3Cv44zJSUlUVdXF0uWLBnVcytXrowdO3ZMekheSUlJfO5znxu2bsmSJSOqm4h+PvWpT424ft68eaMOaVyyZMmAcE8G96d/+qfx9NNPx6pVq3LdyrSS6T6c6xYGqCiqjlSyLOvcdxrXRG9fbsOhGtprIp1pyjp36Vk7c9obACNXXV0dqVSq39gDDzyQ67YAAAAAAAAAAAAAAAAYh/xcNwAAAAAAAAAAAAAAAADTybx582LHjh3x7LPPRk1NTTz33HNZ60466aRYs2ZNrFmzJubNm5e1Zvbs2bFy5cp+Y2Vl2QPHhpt72yc/+ck444wz4n/8j/8Rra2t/eaWLFkSH/7wh+PSSy+Nn/70p/32/t21R9vbYNavXx8f+9jHoqamJn7xi18Mel9vO/XUU6Ouri7+/u//Purq6gatW7JkSVRXV8e5554b+fl+DGqk3vOe9+S6hWnpfb93fjSmayd0zUUFF417jSsrvhfb9i0cMJ7pTsezr34jli747JTd0Tt19xyNR35+c9a5FYu2RMHs4nHvMe/d75vwvksKKif7agCOS9u3b49169Yde71t27aorq7OdVsAAAAAAAAAAAAAAACM0bt+85vf/CbXTQAAAAAAAAAAwEi8613v6vfaP30BABi7tra2WLiwf9CJ91cA4/Ptb387rrzyymOvKysrY8+ePbluiwny2muv9Xt96qmn5rqliIjo6uqKzs7OadXTaHV2dkZXV1e/seP1LCeahvaaqGteN2B820ePv/eNbZ31cc/zyyZ0zbWlu6KiaPzhTXsP3BZ7DmzOOrfpwjcimSickjt6p90tN0T9wR0DxpOJVGxcfihm5Y0/FLT+4Ndid8v1E9r3ikVbonLRrVN2TxPplh++a8BYeaoqqstqct0acAI4evRoJJPJfmOZTCbmzJmT69YAGKHVq1fHP/zDPxx7vW/fvli2bGK/xgEAOJ6889+T+rcOAAAAAAAAAADMRHm5bgAAAAAAAAAAAAAAAOBEcNttt/V7vXnz5jGuxHR06qmn9vtvupg9e/a062m05s2bN23vlxPHqXM/NOFrvvl/WqO3r2fc61y0cGMkE6msc7tbbpjsqxmgo6sta/hgRMRlZ9037vDBTPfh2PnCigkPH4yIOO0/nzMldwRwvJkzZ05UVlb2G3vppZdy3RYAAAAAAAAAAAAAAABjJIAQAAAAAAAAAAAAAABgnL797W/HgQMHjr2urKyMZcuW5botAP5dIn9OpJJlE7rmngObY8ezZ0f7keZxrTMrLz8uO+u+rHON6dpo66yfsnuKiLi/4eNZx0sKKmNx4cXjWruhvSZu//HJ0dqxd1J6P33ehyf9fgCOVx//eP+/3xsaGnLdEgAAAAAAAAAAAAAAAGMkgBAAAAAAAAAAAAAAAGCc/uZv/qbf62uvvTbXLQHwO9afM/Ghd+lMU9z5TFnsbrkhevt6xrzO4sKLo6SgMuvcdxrXjGvt0Whor4l0pinr3KVn7Rzzupnuw7HzhRVR17xu0npfW7orEvlzJv2OAI5XH/5w/5DWp59+OtctAQAAAAAAAAAAAAAAMEYCCAEAAAAAAAAAAAAAAMapu7u73+tTTjkl1y0B8DuSicJYW7prUtauP7gjtj45P9qPNI95jaqymqzjme50NL3+wKTfT3fP0Xjk5zdnnVuxaEsUzC4e07oN7TVx+49PjtaOiQ+AfFtJQWVUFFVP+h0BHM/mzp2b6xYAAAAAAAAAAAAAAACYIAIIAQAAAAAAAAAAAAAAAJgRKoqqo6SgclLWznSn485nyqKmqTq6e46O+vlkojBWL74761xd87oxrTkaj7VujEx3Oktfqbho4cYx3Mfh2PnCiqhrXjdkXSpZNq5gyGQiNWh4IwD/Yc6cOf1eP/HEE7luCQAAAAAAAAAAAAAAgDESQAgAAAAAAAAAAAAAAADAjLH+nD1jCrwrT1XFVRXfj2QiNWRdY7o2tj1VEi2HHx31Hueedu2g6z/08vpJu5OOrraoP7gj69wlZ2yPWXn5o1qvob0mbv/xydHasXfIutWL744N574YFUXVsenCNyKVLBvVPuWpqrhlWWskE4WTdjcAJ4rCwv5/V6bT6TGuBAAAAAAAAAAAAAAAQK4JIAQAAAAAAAAAAAAAAABgRnk78K6koHLY2lSyLG48rymqy2piceHFsXH5oVi6YMOQz2S60/Gtho9FTVN1dPccHXFfs/Ly40/KH8o615iujfYjzZNyH/c3fHzQs1cUVY94nY6utvjq0+VR17xu2Du95YJXYumCzx4LN0wmCmPDuS9Geapq2H2SiVRcVfH9qC6riUT+nEm5EwAAAAAAAAAAAAAAAACYrvJz3QAAAAAAAAAAAAAAAAAATLVkojDWn7MnunuOxptdv4h0pjl+dviRiIh43++dHyfNPj1OTp4Z7/lPpx0LyYv4bUjg6sV3xR++95r45osfjUx3etA9GtO10ZiujbWlu0Yc5Fc8b2mUp6qiMV07YK6u+fLYcO6L/foZr4b2mkhnmrLOXVnxvRGt0dvXE8+++o3Y3XL9sLWrF98d5552bdYzzMrLj+qymqguq4mOrrb45a+fjkNv/WNkug/H+37v/Hjv3Ir4z+9+bxTMLp6w8wMAAAAAAAAAAAAAAADA8UYAIQAAAAAAAAAAAAAAAAAzViJ/ThTNLY2iuaUjDgmMiCiaWxoblx+KJ17ZGnsObB6ytq55Xbzwq29FVVlNJBOFw669evFdWQMI05mmaHr9gVH1OZTevp545Oc3Z51bumDDiIL+Orra4v6Gjw8aYvi2VLIsrqz43ojDAwtmF0fB7OIJOysAAAAAAAAAAAAAAAAAnCjyct0AAAAAAAAAAAAAAAAAAByPZuXlR+WiW+OWC16JVLJsyNrWjr1x+49Pjob2mujt6xmyNpkojLWlu7LO1TWvi+6eoxPS/xOvbI1MdzrL/qlYVbJ1yGd7+3qi/uDXYtu+hcOGD65efHdsOPfFEYcPAgAAAAAAAAAAAAAAAACDE0AIAAAAAAAAAAAAAAAAAONQMLs4Npz7YqxefPewtXXN62LHs2dHR1fbkHVlp3xi0FDDh15eP+6eO7raYs+BzVnnLjljeyTy5wz57I5nz47dLdcPuUcqWRa3XPBKLF3w2ZiVlz/ungEAAAAAAAAAAAAAAAAAAYQAAAAAAAAAAAAAAAAAMG6z8vJj6YLPxqYL34iSgsoha9OZpti2b2HUH/xa9Pb1DLre2tLvZp1rTNdG+5HmcfX78P7sIYapZFlUFFVnnevt64n6g1+LbfsWRjrTNOT6a0t3xYZzX4yC2cUTcb0AAAAAAAAAAAAAAAAAwL8TQAgAAAAAAAAAAAAAAAAAEySZKIz15+yJtaW7hq3d3XJ97Hj27EHDBIvmlkZ5qirrXF3z5YOGFw6n5fCj0dqxN+vclRXfyzre0dUWO549O3a3XD/k2iUFlbHpwjeioqg6ZuXlT9i9AgAAAAAAAAAAAAAAAAC/JYAQAAAAAAAAAAAAAAAAACZYRVF1bLrwjUEDBN+WzjTFnc+Uxe6WG7IGCq45c+egzzW9/sCo++rt64kH91+ddW7pgg1RMLt4QH39wa/Ftn0LI51pGnLttaW7Yv05eyKZKJzMqwUAAAAAAAAAAAAAAACAGU0AIQAAAAAAAAAAAAAAAABMgmSiMKrLauKqiu9HMpEasrb+4I7Y+uT8aD/S3G88kT8n1pbuyvpMXfO66O45Oqqennhla2S601l6TcWqkq39xjq62mLHs2fH7pbrh1yzpKAyNl34RlQUVU/Z3QIAAAAAAAAAAAAAAADATCWAEAAAAAAAAAAAAAAAAAAm0eLCi+OWZa1Rnqoasi7TnY47nymLmqbqfsGCFUXVkUqWZX3moZfXj7iPjq622HNgc9a5S87YHon8ORER0dvXE3sP3Bbb9i2MdKZpyDXXlu6K9efsiWSiMCd3CwAAAAAAAAAAAAAAAAAzjQBCAAAAAAAAAAAAAAAAAJhkifw5UV1WEzee1xTJRGrI2sZ0bWx7qiRaDj96bOzKiu8NWtt+pHlEPTy8P3tYYSpZFhVF1RER0X6kObY+OX/QoMK3lRRUxqYL3zj2HAAAAAAAAAAAAAAAAAAwNQQQAgAAAAAAAAAAAAAAAMAUKZpbGhuXH4qlCzYMWZfpTse3Gj4WNU3V0d1zNApmFw/6TF3z5dHb1zPkei2HH43Wjr1Z566s+F709vXE7pYb4s5nyiLTnR5yrbWlu2L9OXsimSjM9XUCAAAAAAAAAAAAAAAAwIyTn+sGAAAAAAAAAAAAAAAAAGAmmZWXH6sX3xV/+N5roq758khnmgatbUzXRmO6NtaW7opVJVujMf3AgIDAdKYpml5/IN5/0or4/47+U/zqSEP88tdPx+8XXhKpZGmcNPv0eHD/1VnXX7pgQ/xrz5HY+o/zhw0eLCmojKqyGsGDAAAAAAAAAAAAAAAAAJBDAggBAAAAAAAAAAAAAAAAIAeK5pbGhnNfjGdf/Ubsbrl+yNq65nVRUlAZ582/LvYc2Jx1/nc1pmuH7eH1zMtx5zNlw9atLd0VFUXVub4yAAAAAAAAAAAAAAAAAJjxBBACAAAAAAAAAAAAAAAAQI7MysuPpQs+G79feEnc3/DxSGeaBq1t7dgbrR17J3T/4dYrKaiMqrKaSCYKc31VAAAAAAAAAAAAAAAAAEBE5OW6AQAAAAAAAAAAAAAAAACY6QpmF8eGc1+MtaW7ct3KMWtLd8X6c/YIHwQAAAAAAAAAAAAAAACAaUQAIQAAAAAAAAAAAAAAAABMA7Py8qOiqDo2XfhGlBRU5qyPkoLK2HThG1FRVJ3rKwEAAAAAAAAAAAAAAAAAfocAQgAAAAAAAAAAAAAAAACYRpKJwlh/zp5YW7orkonUlO69tnRXrD9nTyQThbm+BgAAAAAAAAAAAAAAAAAgCwGEAAAAAAAAAAAAAAAAADANVRRVxy3LWqM8VTXpe5UUVMamC9+IiqLqXB8bAAAAAAAAAAAAAAAAABiCAEIAAAAAAAAAAAAAAAAAmKYS+XOiuqwmrqr4fiQTqUnZY23prlh/zp5IJgpzfVwAAAAAAAAAAAAAAAAAYBgCCAEAAAAAAAAAAAAAAABgmltceHHcdH7ThK9bUlAZFUXVuT4eAAAAAAAAAAAAAAAAADBCAggBAAAAAAAAAAAAAAAA4DjQ3Xt0wtds7dib62MBAAAAAAAAAAAAAAAAAKMggBAAAAAAAAAAAAAAAAAAjgNvZF6elHUz3YdzfTQAAAAAAAAAAAAAAAAAYIQEEAIAAAAAAAAAAAAAAADAcaCr59eTsm5379FcHw0AAAAAAAAAAAAAAAAAGCEBhAAAAAAAAAAAAAAAAABwHEglSydl3YLZxbk+GgAAAAAAAAAAAAAAAAAwQgIIAQAAAAAAAAAAAAAAAOA4cNLs0yd8zZKCylwfCwAAAAAAAAAAAAAAAAAYBQGEAAAAAAAAAAAAAAAAAIzYzhdWREdXW67bmJES+XMimUhN6JoL512Q62PNaB1dbbHzhRW5bgMAAAAAAAAAAAAAAACA44gAQgAAAAAAAAAAAAAAAABGrLVjb2zbtzB2t9wQ3T1Hc93OjHPe/OsmdL2Sgv8n10eakbp7jsbulhti276F0dqxN9ftAAAAAAAAAAAAAAAAAHAcEUAIAAAAAAAAAAAAAAAAwKjVH9wRm36UjIb2mujt68l1OzPGRQs3RjKRmpC1ylNVUTxvaa6PNKP09vVEQ3tNbPpRMuoP7sh1OwAAAAAAAAAAAAAAAAAchwQQAgAAAAAAAAAAAAAAADBAKlk6oqC7uuZ1sfXJ+dHWWZ/rlmeEWXn5cc3ZPxz3OslEKj75wW/n+jgzSltnfWx9cn7UNa8btjaZSMUfFF2e65YBAAAAAAAAAAAAAAAAmIYEEAIAAAAAAAAAAAAAAAAwQNHc0ti4/FCsWLRl2NpMdzrueX5Z1DRVR0dXW65bP+EVzS2NpQs2jGuNa87+YczKy8/1UWaEjq62qGmqjnueXxaZ7vSw9SsWbYmNyw/F4sKLc906AAAAAAAAAAAAAAAAANOQAEIAAAAAAAAAAAAAAAAAspqVlx+Vi26NTRe+EeWpqmHrG9O1sW3fwth74Lbo7jma6/ZPaKsX3xVrS3eN+rlkIhU3ntcURXNLc32EE153z9HYe+C22LZvYTSma4etL09VxaYL34jKRbcKhwQAAAAAAAAAAAAAAABgUAIIAQAAAAAAAAAAAAAAABhSMlEY1WU1ceN5TZFKlg1bv+fA5tj2VEk0tNdEb19Prts/YVUUVcemC9+IkoLKEdUvXbAhNi4/JHxwkvX29URDe01se6ok9hzYPGx9KlkWN57XFNVlNZFMFOa6fQAAAAAAAAAAAAAAAACmufxcNwAAAAAAAAAAAAAAAADA8aFobmncdH5jNLTXxCM/vzky3elBazPd6ahrXhc/fmVb/PHvfz2K5y3NdfsnpGSiMNafsyc6utril79+Og699Y9xoOPHkc78NixyUcGFMf89/3e8/6QVwu2mQFtnffzdzz4d6UzTsLXJRCouOWN7VBRV57ptAAAAAAAAAAAAAAAAAI4jAggBAAAAAAAAAAAAAAAAGJWKouooO+UT8cQrW2PPgc1D1qYzTXHP88uiPFUVq96/NQpmF+e6/RNSweziKJhdLMwuRzq62uKxf94YjenaEdWvWLQlLlq4MWbl+TFPAAAAAAAAAAAAAAAAAEYnL9cNAAAAAAAAAAAAAAAAAHD8mZWXH5WLbo1NF74R5amqYesb07Wxbd/C2HvgtujuOZrr9mFCdPccjb0Hbott+xaOKHywPFUVmy58IyoX3Sp8EAAAAAAAAAAAAAAAAIAxEUAIAAAAAAAAAAAAAAAAwJglE4VRXVYTN57XFKlk2bD1ew5sjm1PlURDe0309vXkun0Yk96+nmhor4ltT5XEngObh61PJcvixvOaorqsJpKJwly3DwAAAAAAAAAAAAAAAMBxTAAhAAAAAAAAAAAAAAAAAONWNLc0bjq/MdaW7opkIjVkbaY7HXXN62LHs2dHW2d9rluHUWnrrI8dz54ddc3rItOdHrI2mUjF2tJdcdP5jVE0tzTXrQMAAAAAAAAAAAAAAABwAhBACAAAAAAAAAAAAAAAAMCEqSiqjo3LD8WKRVuGrU1nmuKe55dFTVN1dHS15bp1GFJHV1vUNFXHPc8vi3Smadj6FYu2xMblh6KiqDrXrQMAAAAAAAAAAAAAAABwAhFACAAAAAAAAAAAAAAAAMAAvX09Y352Vl5+VC66NTZd+EaUp6qGrW9M18a2fQtj74HborvnaK6PDv109xyNvQdui237FkZjunbY+vJUVWy68I2oXHRrzMrLH9e+AAAAAAAAAAAAAAAAAPC7BBACAAAAAAAAAAAAAAAAMEDT6w/E7pYbxhWClkwURnVZTdx4XlOkkmXD1u85sDm2PVUSDe014wpAhInQ29cTDe01se2pkthzYPOw9alkWdx4XlNUl9VEMlE45n27e47G7pYb4qGX1+f6CgAAAAAAAAAAAAAAAACYhgQQAgAAAAAAAAAAAAAAAJBV/cEdselHyXEHAhbNLY2bzm+MtaW7IplIDVmb6U5HXfO62PHs2dHWWZ/rK2CGauusjx3Pnh11zesi050esjaZSMXa0l1x0/mNUTS3dMx7vh14uOlHyag/uCPXVwAAAAAAAAAAAAAAAADANCWAEAAAAAAAAAAAAAAAAIAh1TWvi61Pzh93IGBFUXVsXH4oVizaMmxtOtMU9zy/LGqaqqOjqy3XV8AM0dHVFjVN1XHP88sinWkatn7Foi2xcfmhqCiqHte+bZ31sfXJ+VHXvC7XVwAAAAAAAAAAAAAAAADANJef6wYAAAAAAAAAAAAAAAAAmP4y3em45/llUVJQGZeetTMKZhePaZ1ZeflRuejWOHf+dbG75YZoTNcOWd+Yro3GdG2sWLQllr/v5kjkz8n1VXAC6u45Gk/+cnvsObB5RPXlqapYvfiuSCYKx7VvR1dbPLx/fbR27M31FQAAkEPt7e3xl3/5lzFnTvavd37xi1/EKaeccuz117/+9aitzf611Pz58+Pzn/98ro8EAAAAAAAAAAAAAEwiAYQAAAAAAAAAAAAAAAAAjFhrx97Ytm9hLF2wIVaVbB1zIGAyURjVZTVx0cK/jLrmyyOdaRqyfs+BzfHMoXvikjO2R9kpn4hZeX48jvHr7euJptcfiEd+fnNkutPD1qeSZbG29LtRNLd0XPt29xyNx1o3Rv3BHbm+AgAApoGioqL4p3/6p3jmmWdGVD9Y+GBExA9+8INcHwcAAAAAAAAAAAAAmGR5uW4AAAAAAAAAAAAAAAAAgONP/cEdselHyWhor4nevp4xr1M0tzRuOr8x1pbuimQiNWRtpjsddc3rYsezZ0dbZ32ur4DjXPuR5tjx7NlR17xu2PDBZCIVa0t3xU3nN44rfLC3ryca2mti04+SwgcBAOjnS1/60rjXOO+882LVqlW5PgoAAAAAAAAAAAAAMMkEEAIAAAAAAAAAAAAAAAAwZnXN62Lrk/PHHQhYUVQdG5cfihWLtgxbm840xT3PL4uapurIdB/O9RVwnMl0H46apuq485mySGeahq1fsWhLbFx+KCqKqse1b1tnfWx9cn7UNa/L9RUAADANLVu2LC699NJxrfHNb34z18cAAAAAAAAAAAAAAKaAAEIAAAAAAAAAAAAAAAAAxiXTnY57nl8WO19YER1dbWNeZ1ZeflQuujU2XfhGlKeqhq1vTNfG7T8+OfYeuC16+3pyfQ1Mc719PbH3wG1x+49PjsZ07bD15amq2HThG1G56NaYlZc/5n07utpi5wsr4p7nl0WmO53rawAAYBr7+te/PuZnL7300jjzzDNzfQQAAAAAAAAAAAAAYAoIIAQAAAAAAAAAAAAAAABgQrR27I1t+xbG7pYborvn6JjXSSYKo7qsJm48rylSybJh6/cc2Bxbn5wfDe01ub4CpqmG9prY+uT82HNg87C1qWRZ3HheU1SX1UQyUTjmPbt7jsbulhti276F0dqxN9dXAADAceDkk0+OT3/606N+bt68eXHfffflun0AAAAAAAAAAAAAYIoIIAQAAAAAAAAAAAAAAABgQtUf3BGbfpSMhvaa6O3rGfM6RXNL46bzG2Nt6a5IJlJD1ma601HXvC6++nR5tB9pzvUVME20H2mOrz5dHnXN6yLTnR6yNplIxdrSXXHT+Y1RNLd0zHv29vVEQ3tNbPpRMuoP7sj1FQAAcJzZvn17zJs3b1TPXHPNNfGe97wn160DAAAAAAAAAAAAAFNEACEAAAAAAAAAAAAAAAAAk6KueV1sfXJ+tHXWj2udiqLq2Lj8UKxYtGXY2nSmKe58pixqmqoj030411dAjmS6D0dNU3Xc+UxZpDNNw9avWLQlNi4/FBVF1ePat62zPrY+OT/qmtfl+goAADhOvfvd744bbrhhxPXFxcVx22235bptAAAAAAAAAAAAAGAKCSAEAAAAAAAAAAAAAAAAYNJkutNxz/PLYucLK6Kjq23M68zKy4/KRbfGpgvfiPJU1bD1jenauP3HJ8feA7dFb19Prq+BKdLb1xN7D9wWt//45GhM1w5bX56qik0XvhGVi26NWXn5Y963o6stdr6wIu55fllkutO5vgYAAI5zX/jCF6K4uHhEtX/xF38R7373u3PdMgAAAAAAAAAAAAAwhQQQAgAAAAAAAAAAAAAAADDpWjv2xrZ9C2N3yw3R3XN0zOskE4VRXVYTN57XFKlk2bD1ew5sjq1Pzo+G9ppcX8GUyHQfjo6utn7/ZboP57qtKdHQXhNbn5wfew5sHrY2lSyLG89riuqymkgmCse8Z3fP0djdckNs27cwWjv25voKAAA4QeTn58eWLVuGrfvgBz8Y1113Xa7bBQAAAAAAAAAAAACmWH6uGwAAAAAAAAAAAAAAAABg5qg/uCPqD+6ItaW7ouyUT8SsvLH9mFvR3NK46fzGaGiviUd+fnNkutOD1ma601HXvC5+/Mq2WFv63SiaW5rra5g0u1tuiMZ0bb+x8lRVVJeduAGM7Ueao6758khnmoatTSZScckZ26OiqHpce/b29UTT6w9EXfO6XB8fAIAT1BVXXBHf+MY34plnnhm05stf/nKu2wQAAAAAAAAAAAAAciAv1w0AAAAAAAAAAAAAAAAAMPPUNa+LrU/Oj7bO+nGtU1FUHRuXH4oVi7YMW5vONMWdz5RFTVN1ZLoP5/oKGKdM9+GoaaqOO58pG1H44IpFW2Lj8kPjDh9s66yPrU/OFz4IAMCk+9KXvjTo3HnnnRerVq3KdYsAAAAAAAAAAAAAQA4IIAQAAAAAAAAAAAAAAAAgJzLd6bjn+WWx84UV0dHVNuZ1ZuXlR+WiW2PThW9Eeapq2PrGdG3c/uOTY++B26K3ryfX18Ao9fb1xN4Dt8XtPz45GtO1w9aXp6pi04VvROWiW2NWXv6Y9+3oaoudL6yIe55fFpnudK6vAQCAGWDZsmVx6aWXZp375je/mev2AAAAAAAAAAAAAIAcEUAIAAAAAAAAAAAAAAAAQE61duyNbfsWxu6WG6K75+iY10kmCqO6rCZuPK8pUsmyYev3HNgcW5+cHw3tNbm+Akaoob0mtj45P/Yc2DxsbSpZFjee1xTVZTWRTBSOec/unqOxu+WG2LZvYbR27M31FQAAMMN8/etfHzB26aWXxplnnpnr1gAAAAAAAAAAAACAHBFACAAAAAAAAAAAAAAAAMC0UH9wR2z6UTIa2muit69nzOsUzS2Nm85vjLWluyKZSA1Zm+lOR13zuvjq0+XRfqQ511fAINqPNMdXny6PuuZ1kelOD1mbTKRibemuuOn8xiiaWzrmPXv7eqKhvSY2/SgZ9Qd35PoKAACYoU4++eT49Kc/fex1QUFB3HfffbluCwAAAAAAAAAAAADIofxcNwAAAAAAAAAAAAAATL05c+bE2WefHYlEIiIiMplMrlsCAIBj6prXxSM/vzn+pPyhKJ63dMzrVBRVR9kpn4gnXtkaew5sHrI2nWmKO58pi/JUVaxefFckE4W5vgYiItN9OHa33BCN6doR1a9YtCUuWrgxZuWN78cn2zrr4zuNa4YNOwQAgKmwffv2qK2tjc7Ozrj66qvjPe95T65bAgAAAAAAAAAAAABySAAhAAAAAAAAAAAAAMxAhYWF8eKLL+a6DQAAGFSmOx33PL8sSgoq49KzdkbB7OIxrTMrLz8qF90a586/bkRBdo3p2mhM105YkB1j09vXM6LgyLdNVHBkR1dbPLx/fbR27M31FQAAwDHvfve744Ybboj77rsvbrvttly3AwAAAAAAAAAAAADkmJ98BAAAAAAAAAAAAIAZqqf33+KJV7bGSf9XSVQUVee6HQAAyKq1Y29s27cwli7YEKtKtkYif86Y1kkmCqO6rCYuWviXUdd8eaQzTUPW7zmwOZ45dE9ccsZ275enWEN7TTzy85sj050etjaVLIu1pd+Norml49qzu+doPNa6MeoP7sj18QEAIKt1n74wEgtaIy+/N9etAAAAAAAAAAAAAAA5lpfrBgAAAAAAAAAAAACAqdfQXhNbn5wfew5sjrrmdfHVp8uj/UhzrtsCAGAaSSVLI5lI5bqNY+oP7ohNP0pGQ3tN9Pb1jHmdormlcdP5jbG2dNew58t0p71fnkLtR5rjq0+XR13zumHDB5OJVKwt3RU3nd84rvDB3r6eaGiviU0/Sk6r8MFkIhV/UHR5rtsAAGAa6Ohqi50vrIidDRfGr9/73Qn5uggAAAAAAAAAAAAAOL696ze/+c1vct0EAAAAAAAAAACMxLve9a5+r/3TFwCA0Ws/0hx1zZdHOtOUdb48VRWrF98VyURhrlsFOK6cf/758cwzzxx7vW/fvli2bFmu2wIYt+6eo/HkL7fHngObc91KP8lEKv6k/KEonrd0XOv09vXEE69sHfH5ylNVsebMnZHIn5PrKxhUTVN1NKZrB/RdXVaT69YG1d1zNB56ef2AvgezYtGWuGjhxpiVlz+ufds66+M7jWuGDTucaisWbYnl77t5Wn+eAccn32sDOL509xyNx1o3DhqUPVFfFwEAHI/e+TWur28BAAAAAAAAAJiJBBACAAAAAAAAAHDc8EtRAQDGLtN9OHa33DDlgR4AM4UAQuBE19HVFo/988YRv5+cKiUFlXHpWTujYHbxuNYZ7fvl1YvvjnNPu3Zavl8+ngIIe/t64tlXvxG7W64fUf1EBaZ3dLXFw/vXR2vH3lxfwYDzrXr/1nF/PgMMxvfaAI4PvX090fT6A1HXvG5E9RP1dREAwPFEACEAAAAAAAAAADOdAEIAAAAAAAAAAI4bfikqAMDo9fb1xBOvbI09BzaP+tlkIhWXnLE9Koqqc30MgGlPACEwU7R11sff/ezTkc405bqVfpYu2BCrSrZGIn/OuNZpP9Icdc2Xj+h8yUQqLjvrvlhceHGuj9/P8RJA2HL40Xhw/9WR6U4PW5tKlsXa0u9G0dzSce3Z3XM0HmvdGPUHd+T6+APO98e///Uonrc0160AJzjfawOY/to66+M7jWtG9D75d03U10UAAMcDAYQAAAAAAAAAAMx0AggBAAAAAAAAADhu+KWoAACj09BeE4/8/OYx/aLid5qosA+AE5kAQmAm6e3riabXH5iQ95oTbW3prig75RMxKy9/XOuM5r10KlkWV1Z8LwpmF+f6+BEx/QMIO7ra4v6Gj4845HEiQtHf/pyta16X6+NnPd9EfM4CjITvtQFMXx1dbfHw/vXR2rF33GtN1NdFAADTmQBCAAAAAAAAAABmOgGEAAAAAAAAAAAcN/xSVACAkWk/0hx1zZePONBjpKEx5amqWL34rkgmCnN9RIBpRwAhMBN19xyNJ3+5PfYc2JzrVvpJJlLxJ+UPRfG8peNap7evJ554ZeuIz1eeqoo1Z+6MRP6cnJ5/ugYQdvccjYdeXj+gt8GsWLQlLlq4cdyhKW2d9fGdxjXTLixzxaItsfx9N+f88wWYWXyvDWD66e45Go+1boz6gztGVJ9Klo34//ufiK+LAACmKwGEAAAAAAAAAADMdAIIAQAAAAAAAAA4bvilqAAAQ8t0H47dLTeMONBjbemuKDvlE9Hb96+j+gXHExUEAnAiEUAIzGQdXW3x2D9vHPH70KlSUlAZl561MwpmF49rndG+z169+O4497Rrc/Z+eboFEPb29cSzr34jdrdcP6L6iQo+7+hqi4f3r4/Wjr05OfdQ51v1/q3j/rwEGAvfawOYPnr7eqLp9QeirnndiOrf+T65ob0mHvn5zSMK2Z6or4sAAKYbAYQAAAAAAAAAAMx0AggBAAAAAAAAADhu+KWoAADZ9fb1xBOvbI09BzaPqH7pgg2xqmRrJPLn9BsfTUBHMpGKS87YHhVF1bk+PsC0IIAQIKKtsz7+7mefjnSmKdet9DPY+9/Raj/SHHXNl4/ofMlEKi47675YXHjxlJ93OgUQthx+NB7cf/WIglFSybJYW/rdKJpbOq49u3uOjipgfaqkkmXxx7//9SietzTXrQAzmO+1AUwPbZ318Z3GNeN6nzxR3xcAADheCSAEAAAAAAAAAGCmE0AIAAAAAAAAAMBxwy9FBQAYqKG9Jh75+c0j+kXFJQWVcelZO6NgdvGQdaMJjpmokBCA450AQoDf6u3riabXHxjxe9SptLZ0V5Sd8omYlZc/rnVG8x48lSyLKyu+N+x78Ik0HQIIO7ra4v6Gj484rHEiws3f/tyra143ZeccibfPNxGfewDj5XttALnV0dUWD+9fH60de4etHen75Ez34djdcsOArwEGM1FfFwEA5JoAQgAAAAAAAAAAZjoBhAAAAAAAAAAAHDf8UlQAgP/QfqQ56povH3Ggx5+UPxTF85aOeP3RBseUp6pi9eK7IpkozPXVAOSEAEKA/rp7jsaTv9weew5sznUr/YzlvXE2vX098cQrW0d8vvJUVaw5c2ck8udM+hlzGUDY3XM0Hnp5/YjDT1Ys2hIXLdw47vCTts76+E7jmmkXerli0ZZY/r6bp+TjDjASvtcGkBvdPUfjsdaNUX9wx4jqx/I+ebQh4BPxdREAQC4JIAQAAAAAAAAAYKYTQAgAAAAAAAAAwHHDL0UFAIjIdB+O3S03jDjQY23prig75RNjDvQYbXDMRAWIABxvBBACZNfR1RaP/fPGEb9/nSolBZVx6Vk7o2B28bjWGe3789WL745zT7t2Ut8v5yKAsLevJ5599Ruxu+X6EdVPVIB5R1dbPLx/fbR27J20s41FeaoqVr1/67g/vwAmmu+1AUyt3r6eaHr9gahrXjei+ol4n9xy+NF4cP/VIwrnnqiviwAAckEAIQAAAAAAAAAAM50AQgAAAAAAAAAAjht+KSoAMJP19vXEE69sHXEQYHmqKtacuTMS+XMmZP/RBMckE6m45IztUVFUndM7A5hKAggBhtbWWR9/97NPRzrTlOtW+lm6YEOsKtk67vfN7Ueao6758hGdL5lIxWVn3ReLCy+elDNNdQDhaAJOUsmyWFv63SiaWzquPbt7jsZjrRuj/uCOSTnTWKWSZfHHv//1KJ63NNetAGTle20AU6etsz6+07hmxO+TJ/J95GgDwifq6yIAgKkkgBAAAAAAAAAAgJlOACEAAAAAAAAAAMcNvxQVAJipGtpr4pGf3zziX1R8ZcX3omB28aT0MppglYkKFwE4HgggBBheb19PNL3+wIjf206ltaW7ouyUT8SsvPxxrTMd3rtPVQBhR1db3N/w8RGHLk5ESPnbn0N1zesm9Czj9fb5JuJzCGAy+V4bwOTr6GqLh/evj9aOvcPWTvb7yNEGd0/U10UAAFNBACEAAAAAAAAAADOdAEIAAAAAAAAAAI4bfikqADDTjCbsL5lIxWVn3ReLCy+ekt5GE6xSnqqK1YvvimSicEp6A8gFAYQAI9fdczSe/OX22HNgc65b6SeZSMWflD8UxfOWjmud3r6eeOKVrSM+X3mqKtacuTMS+XMm5ByTHUDY3XM0Hnp5/YA9BrNi0Za4aOHGcYeYtHXWx3f+/+z9f3Cd9Z0n+H5ia05flw43jTKC4x0wcltJBKyO1g25AcswkLIZGijT2RivJSedyiSuImlskvVW+V7dArdhV319p7wJNg3cciiKDpa8xFTGvkCoWBPSgAyZhNWVNCYikWNh06tDNC13r4/G0+oj5f5B21j4SDr65aMfr1cVFZ/n+T7f5/N9Hhm+53mU77t9/awLr1y7Ymfces22abt/ADPJuzaAmTPRsL9LOY+caCjidHwvAgCYaQIIAQAAAAAAAABY6AQQAgAAAAAAAAAwZ1gUFQBYKLKDfXG468GCAz3WVe2Nm666f8qBHhM10WCV6QoeAZiNBBACTFz/2Z545TcNBc97L5XKsjXxpev3RdmSiin1U6x5/UwFEA4N5+Kt95+Kw11bCmo/XUHkEwlLuZRqUnVx56cbp/xzAnApedcGMP2GhnPR8cHzcaBzU0HtizmPnEio93R9LwIAmCkCCAEAAAAAAAAAWOgEEAIAAAAAAAAAMGdYFBUAmO8mGuhXk6qL9dfti0RJaVHrnkiwSjKRins+uztWLq0vas0A000AIcDk9ZxujR/96luRyXYUu5QRapdtjTsrG6c83+490xkHOr9c0PiSiVTcd/3TUVV+16TPNxMBhF19L8cPj329oKCSVDIdG6ufi6WXVU/pug3mBuKV7oZoPblnSv1Mt1QyHV+89omouLy22KUATJh3bQDTayKBfrNlHnkuMPHFd7cVVPd0fS8CAJhuAggBAAAAAAAAAFjoBBACAAAAAAAAADBnWBQVAJjP2nqbCl7wN5VMx1dXHoqyJRXFLnuE/rM98WzbvQUFq0xXKAnAbCGAEGBqJhqCcSltrN4f6Ss3xOJFJVPq51LN+aczgHAic/zpChs/97NwoHPTlPqZbufGNx0/CwDF4l0bwPToP9sTLxzbHN39LeO2na3zyMHcQLz23u44cnxHQe2n63sRAMB0EUAIAAAAAAAAAMBCJ4AQAAAAAAAAAIA5w6KoAMB81HumMw50frngQI/7rn86qsrvKnbZY+rqezl+eOzrBQWr1KTqYl3VY5FMlBe7bIApEUAIMD0mGoJxqSQTqfhKzcGouLx2Sv0MDefi1RONBY+vdtnWuLOyMRIlpQWfYzoCCAdzA/FKd0O0ntxTUPu1K3bG7csbphxG0nO6NX7Qvn7WhVCuXbEzbr1m24TuA8Bs5F0bwNRMZp482+eR/Wd74pXfNFz0HSKf6fpeBAAwHQQQAgAAAAAAAACw0AkgBAAAAAAAAABgzrAoKgAwn2QH++Jw14MFLeobEbGuam/cdNX9Uw70uFSGhnPx1vtPxeGuLQW1n67AEoBiEUAIML0mEoJxKVWWrYkvXb8vypZUTKmfiX4f2Fi9P9JXbihovjyVAMKh4Vx0fPB8HOjcVFBd0xUo3n+2J144tjm6+1um1M90q0nVxZ2fbpzy/QaYLbxrA5icycyT59o8sud0a/zoV9+KTLZj3LbT9b0IAGAqBBACAAAAAAAAALDQCSAEAAAAAAAAAGDOsCgqADAfDA3n4tUTjXHk+I6C2tek6mL9dfsiUVJa7NInZTA3EK90N0TryT3jtk0mUnHPZ3fHyqX1xS4bYMIEEALMjImEYFxKtcu2xp2VjVOep/ee6YwDnV8uaHzJRCq+UnMwKi6vHbPdZAMIe063xg/a10d2MDNuLalkOjZWPxdLL6ue0vgn8n3hUkol0/HFa58Y91oDzDXetQFM3ETnyXN5HnkuaPHFd7cVNN7p+l4EADAZAggBAAAAAAAAAFjoBBACAAAAAAAAADBnWBQVAJjr2nqbCl64N5VMx1dXHoqyJRXFLnta9J/tiReObY7u/paCxj4dYSYAl5IAQoCZM9EQjEtpY/X+SF+5IRYvKplSPxP5rlBZtia+dP2+Ub8rTDSAcCJz9ekKDT93Tw90bppSP9Pt3Pim454CzEbetQEUbjLz5PkyjxwazsWrJxrjyPEdBbWfru9FAAATIYAQAAAAAAAAAICFTgAhAAAAAAAAAABzhkVRAYC5qvdMZxzo/HJksh3jtk0mUnHf9U9HVfldxS57RvScbo0ftK8vKFilJlUX66oei2SivNhlA4xLACHAzBvMDcRr7+0uOATjUkkmUvGVmoNRcXntlPqZaMhH7bKtcWdlYyRKSkdsLzSAcDA3EK90N0TryT0FnW/tip1x+/KGKYeKTOQ7waU02vUEmE+8awMY32Tmybdes21eziOzg31xuOvBi75f5DNd34sAAAolgBAAAAAAAAAAgIVOACEAAAAAAAAAAHOGRVEBgLlmIovzRkSsq9obN111/5QDPWa7oeFcdHzwfLz47raCQkemK+gEYCYJIAS4dPrP9sQLxzZHd39LsUsZobJsTXzp+n1RtqRiSv1M9HvExur9kb5yw/n58ngBhOfm4wc6NxXU/3QFg8/3+wYwF3jXBjC6ycyT7/x044KYR/ae6YwDnV+OTLZj3Lbm1wDApSKAEAAAAAAAAACAhU4AIQAAAAAAAAAAc4ZFUQGAuWJoOBevnmiMI8d3FNS+JlUX66/bF4mS0mKXfkkN5gbitfd2F3SdkolU3PPZ3bFyaX2xywbISwAhwKXXc7o1ftC+vqBQ60updtnWuLOyccrz+4mEfCQTqfhKzcGouLx2zADCiVyzVDIdG6ufi6WXVU9pHIO5gXiluyFaT+6Zhqs7fS68ZgALhXdtAPlNdJ78xWufWJDzyK6+l+OHx75e0HWaru9FAACjEUAIAAAAAAAAAMBCJ4AQAAAAAAAAAIA5w6KoAMBc0NbbFC++u63ghYq/uvJQlC2pKHbZRdV/tide+U3DRSEp+UxXCArAdBNACFAcQ8O56Pjg+TjQuanYpVxkY/X+SF+5IRYvKplSPxP5jlFZtiayg7+7KLQwlUxHMnFFdPe3jNvHdIV/L4R7AzDXeNcGMFL/2Z544djmCc2TF/o8cmg4F2+9/1Qc7tpSUHtzbwBgpgggBAAAAAAAAABgoRNACAAAAAAAAADAnGFRVABgNus90xkHOr98UdBHPslEKu67/umoKr+r2GXPKj2nW+NHv/pWQdewJlUX66oei2SivNhlA0SEAEKAYhvMDcQr3Q3RenJPsUsZIZlIxVdqDkbF5bVT6mdoOBevnmiMI8d3zGi9a1fsjNuXN0w5HKTndGv8oH19QaGJl1Ltsq1xZ2VjJEpKi10KQFF41wbwoYl+f1i7Ymfces0288gLDOYG4uA7m6M90zxu2+n6XgQAcCEBhAAAAAAAAAAALHQCCAEAAAAAAAAAmDMsigoAzEbZwb443PVgQYvsRkSsq9obN111/5QDPearoeFcdHzwfLz47raCwkqmKyAFYKoEEALMDv1ne+KFY5uju7+l2KWMUFm2Jr50/b4oW1IxpX4m+v2jUNMV8D3frz/AXOddG7DQnXv+fKBzU0Hta1J1ceenG80jxzCR7wDm5QDAdBJACAAAAAAAAADAQieAEAAAAAAAAACAOcOiqADAbDI0nItXTzTGkeM7Cmpfk6qL9dfti0RJabFLnxMmcn2TiVTc89ndsXJpfbHLBhYwAYQAs0vP6db4Qfv6gkKtL6XaZVvjzsrGKX8v6D3TGQc6vxyZbMeU+kkl07Gx+rlYeln1lPoZzA3EK90N0Xpyz7Rfs6lIJlLxlZqDUXF5bbFLAZgVvGsDFrKJfEdIJdPxxWufMI+cgIlc3+n6XgQALGwCCAEAAAAAAAAAWOgEEAIAAAAAAAAAMGdYFBUAmC3aepvixXe3FbxQ8VdXHoqyJRXFLntOyg72xeGuB6M90zxu2+kKTwGYDAGEALPP0HAuOj54Pg50bip2KRfZWL0/0lduiMWLSqbUz0S+m1xoukK8F8I1BphPvGsDFqL+sz3xwrHN0d3fMm7bc/Nk88jJmej3A3N2AGAqBBACAAAAAAAAALDQCSAEAAAAAAAAAGDOsCgqAFBsvWc640DnlyOT7Ri3bTKRivuufzqqyu8qdtnzwkSufU2qLtZVPRbJRHmxywYWEAGEALPXYG4gXuluiNaTe4pdygjJRCq+UnMwKi6vnVI/Q8O5ePVEYxw5vqOg9mtX7IzblzdMOeSj53Rr/KB9/YTDD2da7bKtcWdlYyRKSotdCsCs410bsJBM9HvA2hU749ZrtplHToOJXPvp+l4EACw8AggBAAAAAAAAAFjoBBACAAAAAAAAADBnWBQVACiW7GBfHO56MNozzQW1X1e1N2666v4pB3pwsa6+l+OHx75eUMjJdAWrABRCACHA7Nd/tideOLY5uvtbil3KCJVla+JL1++LsiUVU+pnvO8t0xXUPd+vI8B85l0bsBAMDeei44Pn40DnpoLam0fOnP6zPfHKbxoKerfiPgAAEyWAEAAAAAAAAACAhU4AIQAAAAAAAAAAc4ZFUQGAS21oOBevnmiMI8d3FNR+ugI9GNvQcC7eev+pONy1Zdy2yUQq7vns7li5tL7YZQPznABCgLmj53Rr/KB9fUGh1pdS7bKtcWdlYyRKSqfUT++ZzjjQ+eXIZDsiIiKVTMfG6udi6WXVU+p3MDcQr3Q3ROvJPcW+VCMkE6n4Ss3BqLi8ttilAMx63rUB891E5vrmkZdOz+nW+NGvvnX+O8pYput7EQAw/wkgBAAAAAAAAABgoRNACAAAAAAAAADAnGFRVADgUmrrbYoX391W0ELF0xXowcQM5gbi4Duboz3TPG5b9wiYaQIIAeaWoeFcdHzwfBzo3FTsUi6ysXp/pK/cEIsXlUypn7bepoiIKYdxL4RrBbBQeNcGzFf9Z3vihWObo7u/paD25pGX3rnvFYW+d3GPAIDxCCAEAAAAAAAAAGChE0AIAAAAAAAAAMCcYVFUAOBS6D3TGQc6vxyZbMe4bZOJVNzz2d1TDvRgavrP9sSzbfcWdM9qUnWxruqxSCbKi102MM8IIASYmwZzA/FKd0O0ntxT7FJGSCZS8ZWag1FxeW1R6+g53Ro/aF9fUEDIpVS7bGvcWdkYiZLSYpcCMKd41wbMNxOdz5tHFt9gbiBee293HDm+Y9y2s+V7EQAwOwkgBAAAAAAAAABgoRNACAAAAAAAAADAnGFRVABgJmUH++Jw14PRnmkuqP3aFTvj9uUNsXhRSbFL559NJBzF/QOmmwBCgLmt/2xPvHBsc3T3txS7lBEqy9bEl67fF2VLKlyPIl4PgPnCuzZgvhgazkXHB8/Hgc5NBbU3j5x9JvJOxv0DAPIRQAgAAAAAAAAAwEIngBAAAAAAAAAAgDnDoqgAwEwYGs7Fqyca48jxHQW1r0nVxbqqxyKZKC926eQxkYWnk4lU3PPZ3bFyaX2xywbmAQGEAPPDREKtL6XaZVvjzsrGSJSUzuh5BnMD8Up3Q7Se3FPsIY+QTKTiKzUHo+Ly2mKXAjCnedcGzAcTmbObR85+vWc640DnlyOT7Ri37aX6XgQAzA0CCAEAAAAAAAAAWOgEEAIAAAAAAAAAMGdYFBUAmG5tvU3x4rvbClqoOJVMx8bq52LpZdXFLpsCTCQ4xb0FpoMAQoD5YyKh1pfaxur9kb5yQyxeVGLMAEyYd23AXNZ/tideOLY5uvtbCmpvHjm3TOR9jXsLAEQIIAQAAAAAAAAAAAGEAAAAAAAAAADMGRZFBQCmS++ZzjjQ+eXIZDvGbZtMpOKez+6OlUvri102k9B/tide+U1DtGeax21bk6qLdVWPRTJRXuyygTlIACHA/DORUOtLKZlIxVdqDkbF5bXT0l/P6db4Qfv6goI+LqXaZVvjzsrGSJSUFrsUgHnDuzZgLprovNw8cu4aGs7FW+8/FYe7tozbdrq/FwEAc48AQgAAAAAAAAAAFjoBhAAAAAAAAAAAzBkWRQUApio72BeHux4sKIwuImLtip1x+/KGWLyopNilM0U9p1vjR7/6VkGhk+47MBkCCAHmr/6zPfHCsc3R3d9S7FJGqCxbE1+6fl+ULakwLgAK4l0bMJcMDeei44Pn40DnpoLam0fOH4O5gTj4zuaC3uW47wCwcAkgBAAAAAAAAABgoRNACAAAAAAAAADAnGFRVABgsoaGc/HqicY4cnxHQe1rUnWxruqxSCbKi1060+jcgtUvvrstsoOZMdsmE6m457O7Y+XS+mKXDcwRAggB5r+e063xg/b1484lL7XaZVvjzsrGSJSUFtR+MDcQr3Q3ROvJPcUufYRkIhVfqTkYFZfXFrsUgHnLuzZgrpjI3Ns8cv7qP9sTz7bdG5lsx7htJ/q9CACY+wQQAgAAAAAAAACw0AkgBAAAAAAAAABgzrAoKgAwGW29TQUFzkVEpJLp2Fj9XCy9rLrYZTODBnMD8dp7uwsKpPQzARRKACHAwnAu1PpA56Zil3KRjdX7I33lhli8qGTe1Q7A9PCuDZjt+s/2xAvHNkd3f0tB7c0jF4auvpfjh8e+XtB7Hj8TALBwCCAEAAAAAAAAAGChE0AIAAAAAAAAAMCcYVFUAGAies90xoHOL0cm2zFu22QiFfd8dnesXFpf7LK5hLKDfXG468FozzSP27YmVRfrqh6LZKK82GUDs5QAQoCFZTA3EK90N0TryT3FLmWEZCIVX6k5GBWX147Y3nO6NX7Qvr6gwI5LqXbZ1rizsjESJaXFLgVgQfCuDZitJjq/No9ceCYSqD7a9yIAYH4RQAgAAAAAAAAAwEIngBAAAAAAAAAAgDnDoqgAQCEGcwNx8J3NBYXKRUSsXbEzbl/eEIsXlRS7dIpkImGV66r2xk1X3e/nBbiIAEKAhan/bE+8cGxzdPe3FLuUESrL1sSXrt8XETGr6ytbUlHsUgAWFO/agNnmXKjci+9uKygs2zySiYRV+nkBgPlNACEAAAAAAAAAAAudAEIAAAAAAAAAAOYMi6ICAGMZGs7FW+8/FYe7thTUviZVF+uqHotkorzYpTNLtPU2FbTQdTKRivuufzqqyu8qdsnALCKAEGBh6zndGj9oX19QaMpClkyk4is1B6Pi8tpilwKwIHnXBswmPadb40e/+lZksh3jtjWP5OMmEga/dsXOuPWabZEoKS122QDANBJACAAAAAAAAADAQieAEAAAAAAAAACAOcOiqADAaLr6Xo4fHvt6QWEfqWQ6NlY/F0svqy522cxCQ8O5ePVEYxw5vmPctqlkOr668lCULakodtnALCCAEICh4Vx0fPB8HOjcVOxSZqWN1fsjfeWGWLyopNilACxY3rUBs0H/2Z545TcN0Z5pLqi9eSRjKTTIMplIxT2f3e1nCQDmEQGEAAAAAAAAAAAsdAIIAQAAAAAAAACYMyyKCgB8XP/Znni27d5xF5aN+Ghx2ZVL64tdNnPAYG4gDr6zuaBFsGtSdbH+un2RKCktdtlAEQkgBOCcwdxAvNLdEK0n9xS7lFmhdtnWuLOy0XwZYBbwrg0opsHcQLz23u44cnxHQe3NIynUuTD4F9/dFtnBzJhtU8l0fPHaJ6Li8tpilw0ATJEAQgAAAAAAAAAAFjoBhAAAAAAAAAAAzBkWRQUAzplIOFxExNoVO+P25Q2xeFFJsUtnjplIyOW6qr1x01X3+zmDBUoAIQAf13+2J144tjm6+1uKXUpRVJatiS9dvy/KllQUuxQA/pl3bUAxTCQcLsI8ksmbSMhlTaou7vx0o58zAJjDBBACAAAAAAAAALDQCSAEAAAAAAAAAGDOsCgqADA0nIu33n8qDndtKah9Taou1lU9FslEebFLZ47r6ns5fnjs6+MukJ1MpOK+65+OqvK7il0ycIkJIARgND2nW+MH7esLCluZD5KJVHyl5mBUXF5b7FIA+Bjv2oBLred0a/zoV9+KTLZj3LbmkUyX/rM98cpvGqI90zxu27Urdsat12yLRElpscsGACZIACEAAAAAAAAAAAudAEIAAAAAAAAAAOYMi6ICwMJWaABcREQqmY6N1c/F0suqi10288jQcC46Png+DnRuGrdtKpmOr648FGVLKopdNnCJCCAEYCwTmUvOZRur90f6yg2xeFFJsUsBIA/v2oBLZSIBcBHmkcyMQgMwk4lU3PPZ3X4GAWCOEUAIAAAAAAAAAMBCJ4AQAAAAAAAAAIA5w6KoALAw9Z/tiWfb7h13gdiIjxaJXbm0vthlM48N5gbile6GaD25Z9y2Nam6WH/dvkiUlBa7bGCGCSAEoBATmUvOJbXLtsadlY3mvQCznHdtwEwbzA3Ea+/tjiPHdxTU3jySS6GttylefHdbZAczY7ZLJdPxxWufiIrLa4tdMgBQAAGEAAAAAAAAAAAsdAIIAQAAAAAAAACYMyyKCgALy2BuIA6+sznaM80FtV+7YmfcvrwhFi8qKXbpLBD9Z3vihWObo7u/Zdy266r2xk1X3e/nE+YxAYQATMRE5pKzWWXZmvjS9fuibElFsUsBoADetQEzZWg4Fx0fPF9QyFuEeSSX3tBwLl490VhQOGZNqi7u/HSjn08AmOUEEAIAAAAAAAAAsNAJIAQAAAAAAAAAYM6wKCoALAxDw7l46/2n4nDXloLaWwiWYus53Ro/+tW3IpPtGLNdMpGK+65/OqrK7yp2ycAMEEAIwGT0nG6NH7SvLyikZTZJJlLxlZqDUXF5bbFLAWACvGsDZkKhz0cjPCOl+LKDfXG468FozzSP23btip1x6zXbIlFSWuyyAYA8BBACAAAAAAAAALDQCSAEAAAAAAAAAGDOsCgqAMx/XX0vxw+Pfb2g8I1UMh1fvPYJgRfMCkPDuej44Pl48d1t4/78ppLp+OrKQ0IzYZ4RQAjAZJ2bSx7o3FTsUgqysXp/pK/cEIsXlRS7FAAmyLs2YDr1n+2JV37TUFCQW0TEuqq9cdNV95tHMiv0n+2JZ9vuHTc4M5lIxT2f3e07EADMQgIIAQAAAAAAAABY6AQQAgAAAAAAAAAwZ1gUFQDmr0IXeo2w2Cuz22BuIF57b3ccOb5j3LY1qbpYf92+SJSUFrtsYBoIIARgqgZzA/FKd0O0ntxT7FLyql22Ne6sbDR/BZjDvGsDpsNEnoFGeA7K7NbV93L88NjXIzuYGbNdKpmOL177RFRcXlvskgGAfyaAEAAAAAAAAACAhU4AIQAAAAAAAAAAc4ZFUQFg/hnMDcTBdzZHe6a5oPZrV+yMW6/ZZqFiZr3+sz3xym8aCvrZXle1N2666n6BmjDHCSAEYLr0n+2JF45tju7+lmKXEhERlWVr4kvX74uyJRXFLgWAKfKuDZiKoeFcdHzwfLz47rZxw9oiPgxs++rKQ+aRzHpDw7l46/2n4nDXlnHb1qTq4s5PN/q5BoBZQAAhAAAAAAAAAAALnQBCAAAAAAAAAADmDIuiAsD8MZHFXCMs6Mrc1XO6NX70q29FJtsxZrtkIhX3Xf90VJXfVeySgUkSQAjAdOs53Ro/aF9fULjLTEgmUvGVmoNRcXltsS8FANPEuzZgsgp9zhnhWSdz12BuIF7pbojWk3vGbbt2xc649ZptkSgpLXbZALBgCSAEAAAAAAAAAGChE0AIAAAAAAAAAMCcYVFUAJgfuvpejh8e+3pBIRqpZDq+eO0TAi+Y89p6m+LFd7eN+3OfSqbjqysPCduEOUgAIQAzYWg4Fx0fPB8HOjdd0vNurN4f6Ss3xOJFJcW+BABMI+/agInqP9sTr/ymIdozzQW1X1e1N2666n7zSOa0/rM98cKxzdHd3zJmu2QiFfd8drfvTgBQJAIIAQAAAAAAAABY6AQQAgAAAAAAAAAwZ1gUFQDmtv6zPfFs272RyXaM29aircxHQ8O5ePVEYxw5vmPctjWpulh/3b5IlJQWu2ygQAIIAZhJg7mBeKW7IVpP7pnR89Qu2xp3VjaahwLMU961AYUazA3Ea+/tLuhZZoTnmcxPPadb4wft6yM7mBmzXSqZji9e+0RUXF5b7JIBYEERQAgAAAAAAAAAwEIngBAAAAAAAAAAgDnDoqgAMDcN5gbi4Duboz3TXFD7tSt2xq3XbLNQMfNWdrAvDnc9WNDfiXVVe+Omq+4XxAlzgABCAC6F/rM98cKxzdHd3zKt/VaWrYkvXb8vypZUFHuIAMwg79qA8QwN56Ljg+fjxXe3jRu6FvFh8NpXVx4yj2TeOvd34kDnpnHb1qTq4s5PN/r7AACXiABCAAAAAAAAAAAWOgGEAAAAAAAAAADMGRZFBYC5ZWg4F2+9/1Qc7tpSUHsLs7LQ9J/tiWfb7o1MtmPMdslEKu67/umoKr+r2CUDYxBACMCl1HO6NX7Qvr6gUJixJBOp+ErNwai4vLbYQwLgEvCuDRhLz+nW+NGvvjXu88oIzyxZeAZzA/Hae7vjyPEd47Zdu2Jn3HrNtkiUlBa7bACY1wQQAgAAAAAAAACw0AkgBAAAAAAAAABgzrAoKgDMHV19L8cPj329oDCMVDIdX7z2CYEXLFiF/n1JJdPx1ZWHhHTCLCWAEIBLbWg4Fx0fPB8HOjdN6viN1fsjfeWGWLyopNhDAeAS8a4NyKf/bE+88puGaM80F9R+XdXeuOmq+80jWZAK/fuSTKTins/u9p0LAGaQAEIAAAAAAAAAABY6AYQAAAAAAAAAAMwZFkUFgNmv/2xPPNt2b2SyHeO2tfgqfGRoOBdvvf9UHO7aMm7bmlRdrL9uXyRKSotdNnABAYQAFMtgbiBe6W6I1pN7Cmpfu2xr3FnZaD4JsAB51wZcaDA3EK+9tzuOHN9RUHvPJeEjPadb40e/+ta478NSyXR88donouLy2mKXDADzjgBCAAAAAAAAAAAWOgGEAAAAAAAAAADMGRZFBYDZazA3EAff2RztmeaC2q9dsTNuvWabhYrhYyYSHrOuam/cdNX9AjxhlhBACECx9Z/tiReObY7u/pa8+yvL1sSXrt8XZUsqil0qAEXiXRsQETE0nIuOD56PF9/dFtnBzLjtU8l0fHXlIfNI+JiJ/F2qSdXFnZ9u9PcIAKaRAEIAAAAAAAAAABY6AYQAAAAAAAAAAMwZFkUFgNmprbcpDnRuKqitBVZnj8HcQPzd2d/GP/zXU3FF8jr3ZJYZLzzmnGQiFd+44Sex9LLqYpcMC54AQgBmi57TrfGD9vXnAzCSiVR8peZgVFxeW+zSACgy79qAwdxA/NV/XBWZbMe4bZOJVNx3/dNRVX5XscsmPnxm/LvsO/HJ/8vV8aklfxSJktJil8Q/GxrOxasnGuPI8R3jtl27YmesWfFwsUsGgHlBACEAAAAAAAAAAAtdSbELAAAAAAAAAAAAAGBu+1Xfi+O2SSXT8cVrnxB4UWS9Zzrj1RN/Gcf7Xz0fRnKhyrI1sfzyW+L25Q2xeJFfNS6msiUVsfnGIxeFx3xcdjATmWynAEIAAM6ruLw2Gm49FR0fPB8REekrN5jfAwAQERHZf+orKHxwXdXeuOmq+80ji+hcqN2J069Hd3/LRfuTiVSsKLs97vx0Y5QtqSh2uQva4kUlsWbFw3HT1d+Mw10PRnumedS2R47vEEAIAAAAAAAAAAAAwLTw294AAAAAAAAAAAAAzKiaVF38D//tX1uouIiGhnPx0q+3RevJPWO26+5vie7+lnjz1JPxjRt+ItRuFqi4vDa+8Ef/zzjctaXYpQAAMIcsXlQSK5fWF7sMAADmmGQiFd9Z1RHJRHmxS1nQek63xg/a10d2MDNqm+xgJtozzdGeaRYYOUskE+Vx56cb43j/q2PeOwAAAAAAAAAAAACYDouKXQAAAAAAAAAAAAAA81t7pjle+vW2GBrOFbuUBan3TGc0vnb1uOGDF8oOZuJ7b6bjcNeD7lsRZQf7Yt8v1wofBAAAAAAuiexgJvb9ck30n+0pdikL0tBwLpo66uPJX6yeUIDd4a4tseetGyI72FfsISxYQ8O5aD35eOx6fbnwQQAAAAAAAAAAAAAuCQGEAAAAAAAAAAAAAMy41pN7ovG1q6P3TGexS1lQBnMD8f2375j0YretJ/fEW+8/VexhLEhtvU3x6M+uiO7+lmKXAgAAAAAsIJlsR+x6fXm0nnw8hoZzxS5nQXnp19uiPdM8qWMz2Y7Y98s17lkR9J/tiT1v3RCHu7YUuxQAAAAAAAAAAAAAFhABhAAAAAAAAAAAAABcEtnBTHzvzXQc7nrQAriXyLP/vz+ddPjgOYe7tkT/2Z5iD2XByA72xb5fro0DnZuKXQoAAAAAsIAd7toSe966wfPhS6TndGu0ntwzpT4y2Y549URjsYeyYAwN56L15OOx6/Xlkcl2FLscAAAAAAAAAAAAABYYAYQAAAAAAAAAAAAAXFKtJ/dE42tXR++ZzmKXMq+19TZFd3/LtPT1bNu9QiMvgbbepnj0Z1dM230DAAAAAJiKTLYjdr2+PFpPPu4Z8QwazA3ED9rXT0tfR47v8P7lEug/2xN73rohDndtKXYpAAAAAAAAAAAAACxQAggBAAAAAAAAAAAAmBHJRGrUfdnBTHzvzXQc7nrQosUz5MV3t01bX5lsR5z6h58Xe0jzVnawL/b9cm0c6NxU7FIAAAAAgAVorOf5ERGHu7bEnrduiP6zPcUudV76xf/xTGQHM9PW36sn/rLYQ5q3hoZz0Xry8dj1+vLIZDuKXQ4AAAAAAAAAAAAAC5gAQgAAAAAAAAAAAABmxPbV3VGTqhuzTevJPdH42tXRe6az2OXOK9nBvmldrDgi4m/PtBV7WPNSV9/L8ejProju/pYx21WWrYmvrXyp2OUCAAAAAPPQn3/+zdhYvX/MNplsR+x6fXm0nnw8hoZzxS55Xnnv749Oa3/tmeZiD2leyg72xZ63bojDXVvGbJdMpOJrK18a9x0ZAAAAAAAAAAAAAEyFAEIAAAAAAAAAAAAAZkSipDTq003xtZUvRTKRGrVddjAT33szHYe7HrRo8TT5zwO/nvY+3/ndoWIPa14ZzA1EU0d9PNN297htN1bvj803HokrktcVu2wAAAAAYJ5aubQ+Hrrtd1FZtmbMdoe7tsSet26I/rM9xS553piJwMDsYF+xhzWvtPU2xaM/uyIy2Y4x29Wk6mL76u6oKr+r2CUDAAAAAAAAAAAAMM8JIAQAAAAAAAAAAABgRlWV3xXbV3ePu2hx68k90fja1dF7prPYJc95f3umbdr77O5vKfaw5o2uvpdj1xuV4y4qXVm2Jh667Xexcml9sUsGAAAAABaAZKI8Nt94JDZW7x+zXSbbEbteXx6tJx+PoeFcscue02YqKPA/D/y62EObF7KDfbHvl2vjQOemMdslE6n42sqXoj7dFImS0mKXDQAAAAAAAAAAAMACIIAQAAAAAAAAAAAAgBmXKCktaNHi7GAmvvdmOg53PWjR4in4u//ymxnp1z2ZmsHcQDR11MczbXdHdjAzZtuN1ftj841HIpkoL3bZAAAAAMACs3JpfWy/5USkkukx2x3u2hJ73roh+s/2FLvkOWtwaGBG+j39X98r9tDmvLbepnj0Z1dEd3/LmO1qUnWxfXV3VJXfVeySAQAAAAAAAAAAAFhABBACAAAAAAAAAAAAcMmsXFofD932u6gsWzNmu9aTe6Lxtauj90xnsUuek67+5OdnpN/Fi0qKPbQ5q6vv5dj1RmW0Z5rHbFdZtiYeuu13sXJpfbFLBgAAAAAWsLIlFbH1prdjXdXeMdtlsh2x6/Xl0Xry8RgazhW77Dnnk39w1Yz0m0pWF3toc1Z2sC/2/XJtHOjcNG7br618KerTTZEoKS122QAAAAAAAAAAAAAsMAIIAQAAAAAAAAAAALikkony2HzjkdhYvX/MdtnBTHzvzXQc7nrQosUTdM0frpr2PscLjSS/wdxANHXUxzNtd0d2MDNm23VVe+Pf/vGPI5koL3bZAAAAAACxeFFJ1C57ILbfciJSyfSYbQ93bYk9b90Q/Wd7il32nLJ4UUkkE6lp7/cPSi4r9tDmpLbepnj0Z1dEd3/LmO0qy9bEQ7f9LqrK7yp2yQAAAAAAAAAAAAAsUAIIAQAAAAAAAAAAACiKlUvr46HbfjdusF3ryT3R+NrV0Xums9glzwmDuYF45TcN095vd39LHO56MAZzA8Ue4pzR1fdy7HqjMtozzWO2SyXTsf2WE1G77IFYvKik2GUDAAAAAIxQtqQitt70dqyr2jtmu0y2I3a9vjxaTz4eQ8O5Ypc96w0N56Ktt2lG+n627V7vVSYgO9gX+365Ng50bhq37cbq/bH5xiORTJQXu2wAAAAAAAAAAAAAFjABhAAAAAAAAAAAAAAUTTJRHptvPBIbq/eP2S47mInvvZmOw10PWrR4FEPDuWg9+Xg89NPkuIF3k9V6ck889NNktPU2uQ9jGMwNRFNHfTzTdndkBzNjtl1XtTe23vR2lC2pKHbZAAAAAACjWryoJGqXPRDbbzkRqWR6zLaHu7bEnrduiP6zPcUue9bqOd0ae966IQ50bhr3OfJkZLId8b0309HUUR/Zwb5iD3dWa+ttikd/dkV097eM2a6ybE08dNvvYuXS+mKXDAAAAAAAAAAAAAACCAEAAAAAAAAAAAAovpVL6+Oh234XlWVrxmzXenJPNL52dfSe6Sx2ybNKV9/L0fja1XG4a8slOd+Bzk3R+NrV0XO6tdhDn3W6+l6OXW9UjhsCmUqmY/stJ6J22QOxeFFJscsGAAAAFqCBgYFilwDMQWVLKmLrTW/Huqq9Y7bLZDti1+vLo/Xk4zE0nCt22bNGdrAvmjrq48lfrI5MtmPGz9eeaY5Hf3ZFtBx/xH34mOxgX+z75do40Llp3LYbq/fH5huPRDJRXuyyAQAAAAAAAAAAACAiBBACAAAAAAAAAAAAMEskE+Wx+cYjsbF6/5jtsoOZ+N6b6Tjc9eCCXyy3/2xP7Pvl2nim7e7IDmYu6bmzg5l48herY98v10b/2Z5iX4qiGxrOxeGuBwu6F2tX7IytN70dZUsqil02AAAAsIDU1dWN+Pzb3/622CUBc9TiRSVRu+yB2H7LiUgl02O2Pdy1Jfa8dcOCf448NJyLluOPxKM/uyLaM82X/PxHju+Ixteujq6+l4t9KWaFrr6X47tH09Hd3zJmu8qyNfHQbb+LlUvri10yAAAAAAAAAAAAAIwggBAAAAAAAAAAAACAWWXl0vp46LbfRWXZmjHbtZ7cE42vXR29ZzqLXfIlN5gbiMNdD8au15ePuzjuTOvub4ldry+PluOPxGBuoNiXpih6z3RG42tXR+vJPWO2SyZS8e2bO2LNiodj8aKSYpcNAAAALDCrVq0a8flv/uZvil0SMMeVLamIrTe9Heuq9o7ZLpPtiF2vL4/Wk4/H0HCu2GVfcm29TdH42tVx5PiOotaRHczEM213x3eP1izYQMjB3EA0ddTHM213R3YwM2bbdVV749/+8Y8jmSgvdtkAAAAAAAAAAAAAcBEBhAAAAAAAAAAAAADMOslEeWy+8UhsrN4/ZrvsYCa+92Y6Dnc9uCAWLR4azkVbb1M89NPkuGF3ETFuiGMhapdtjZpU3bjtjhzfEbveqIy23qYFcS8iPrwfh7sejO+9mR53oeLaZVuj4dZTsfSy6mKXDQAAACxQK1euHPF53759xS4JmAcWLyqJ2mUPxPZbTkQqmR6z7eGuLbHnrRsWTPhd/9me+O7RmjjQuWncZ8ipZHrc6zeeZCI1bhhkxEeBkE0d9TGYGyj2Zbpkuvpejl1vVEZ7pnnMdqlkOrbfciJqlz0QixeVFLtsAAAAAAAAAAAAAMhLACEAAAAAAAAAAAAAs9bKpfXx0G2/GzdIr/Xknmh87eroPdNZ7JJnTM/p1tjz1g1xoHPTuG1TyXR8++aOuO6Ke6d83taTe2Jd1WPx7Zs7xl38ODuYiQOdm2LPWzdEz+nWYl+yGdV7pjMaX7t63CDIZCIV3765I9ZVPWahYpjnzpw5U+wSAAAAxvTf/Xf/3YjPHR0d0dPTU+yygHmibElFbL3p7XED8M6F37WefDyGhnPFLntGDOYGoqmjPna9vjwy2Y5x22+s3h8bq58rqO1YzoUcPvqFbNQu2zpu+/ZMczz00+S8vhcRH92PZ9ruHjcIcl3V3th609tRtqSi2GUDAAAAAAAAAAAAwJgEEAIAAAAAAAAAAAAwqyUT5bH5xiOxsXr/mO2yg5n43pvpyA72FbvkadV/tieaOurjyV+sHnfx4WQiFRur98d3VrXHH5RcFoe7tuRtV1m25qIwwZpUXSQTqbztmzvqY+ll1fGdVe2xsXr/qO3OyWQ74slfrI6mjvp5dz8iIrr6Xv7nn7WxFyquXbY1Gm49FUsvqy52ycAMO3jwYPyn//Sfil0GAADAmEpLS2Pr1pGBVA0NDcUuC5ik1tbWePnll4tdxgiLF5VE7bIHYvstJy56Bv1xh7u2xFvvP1XskqfV0HAuWk8+Hg/9NBntmeZx29cu2xqPfiEbK5fWx4HOL+dtk0ykoiZVN2JbKpmOyrI1edsf7toSg8P/JdZVPVbQfTh3TONrV0fP6dZiX8JpN5gbiF1vVI57P1LJdGy/5UTULnsgFi8qKXbZAAAAAAAAAAAAADAuAYQAAAAAAAAAAAAAzAkrl9bHQ7f9btRFdSMi1lXtjWSivNilTouh4Vy0HH8kdr2+vKCFiteu2BnbV3fHyqX1ERHxbNu9edulkunYfOOR+M6q9mhc80/x0G2/i113/D7q003x559/M+8x3f0t0dbbFBEf3oftq7tj7Yqd49bUnmmOR392RbQcfySGhnPFvqTT5tOfumPMEMZkIhXf/Nwbsa7qMQsVwwLxv/6v/+tF2z71qU8VuywAAICLbNiwYcTn5ubm6OnpKXZZwCS89957cffdd0dNTc2s+3tctqQitt70dqyr2jtqm2QiFTdddX+xS502XX0vR+NrV8fhri3jtj0Xdreu6rFIlJRGW29TZLIdedv++effjPp0U+y64/fx0G2/i8Y1/xTfWdUem288Mmq4YHPHh+8JypZUxHdWtcfXVr405jPtiIjsYCae/MXq2PfLtdF/tqfYl3PaJEpK4+arvzlmm7UrdsbWm96OsiUVxS4XAAAAAAAAAAAAAAomgBAAAAAAAAAAAACAOSOZKI9/+8c/zrtocSqZnjeLFbf1NkXja1fHkeM7xm1bk6qL7beciDUrHo5ESen540dbrPirKw+d//PiRSUjAhvLllSMuiD0i+9ui8HcQER8uGDvmhUPx/ZbTkRNqm7cGo8c3xGNr119PsRwrlu8qCS+ccNP8u6rSdXF9tXdUXF5bbHLBC6RgwcPxptvjgxwXbNmTVx77bXFLg0AAOAitbW1kU6PDKy6+eabY2BgoNilAZPU0dERy5cvj/r6+ln1d3nxopKoXfZAfPvmjrzhd9+44SexeFFJscucsv6zPbHvl2vjmba7IzuYGbNtMpGKr618Kb6zqv182N1gbiAOdG7K237tip0jQvGSifIR1+zC5/0X6u5vGfE8vqr8rmi49dSYgZAXHrvr9eVxuOvB8+8E5rrblzfk/RlMJlLx7Zs7Ys2Kh+fFzyIAAAAAAAAAAAAAC4sAQgAAAAAAAAAAAADmlHOLFm+/5USkkh8tlv7VlYfm/AKxvWc647tHa+JA56aCFir+5ufeiPp004gFiLODfQUvVpzPTVfdn3ch3uxgJg6+s3nEtrIlFVGfbopvfu6NEfcin+xgJg50borvHq2J3jOdRbzK02PpZdUjwhfPLRxdn246HwQJLAz/2//2v120bceO8QNkARaSgYGB6OnpOf/PVF3Y12wKWAGAueK5554b8TmTycSf/umfRi6XxkT07gAAgABJREFUK3ZpwBQ0NzdHMpmMxx9/fFb9fV56WXU03HoqapdtPb+tdtnWWHpZdbFLm5LB3EAc7nowdr2+PLr7W8Ztv3bFzmi49VRUld81YvvHn7ufk0yk4vblDWP2WbakYtRQwRff3TYiQPDcu5VHv5Ad8Wx7NK0n98RDP01GW29TDA3Pnp+nyVi8qCS+ccNPRmyrXbY1Gm49Ned/DgEAAAAAAAAAAABYuAQQAgAAAAAAAAAAADAnlS2piK03vR3rqvbGuqq94wbrzWbZwb5o6qiP772Zjky2Y9z2G6v3R8Otp6Li8tqL9h3uejDvMYUsVhyRfyHec9ozzdFzuvWi7RWX18bWm96OjdX7x+0/k+2I772ZjqaO+hGLH89F66/bF8lEKmpSdbF9dfdFC0cDC8M//uM/jvi8Zs2aWL16dbHLAphVDh06FMuXLz//T2fn1AKpL+zr0KFDxR4eAMw51dXVsXPnzhHbWlpa4k/+5E9mVWgZMDlbtmyJq6++Ol5++eVil3Le4kUlsa7qsfj2zR2RSqbj7s/sLnZJkzY0nIu23qZ46KfJaD25Z9z2Nam6eOi238WaFQ/H4kUlI/Z19b0c7ZnmvMd9pebgRe3zuemq+yOVTF+0PTuYyRtumCgpjfp00/l7MZ4DnZtiz1s35H03MJcsvaw6alJ1kUyk4ts3d8S6qscKur4AAAAAAAAAAAAAMFsJIAQAAAAAAAAAAABgzlq8qCRqlz0QtcseKHYpkzI0nIvWk4/Hoz+7YtRFhi9Uk6qLR7+QjZVL6/MujDvWYsXfuOEnBS+mu/Sy6qhdtjXvvh+0r4+h4YsXol+8qCRWLq2PR7+QHfXYC7Vnmv95gebH8/Y3FyRKSuM7qzqiPt0UiZLSYpcDFEFvb2+88847I7bt2LGj2GUBzHp33HFHDAzM7TDqhezxxx+P+vr6qK+vj8cff7zY5QAwSQ8//HCsWbNmxLaWlpa44YYboqenp9jlAVOUyWTi7rvvjpqamln1d3rpZdXxnVXtczb4red0a+x564Y40Llp3LapZDq+ffOHz4+TifKL9g8N5+KHx76e99iaVF1UXF5bUE2LF5XExurn8u5rzzRHV1/+IMpz92Jj9f5IJlJjniOT7Ygnf7E6mjrqo/9sz0xe4hn1P/y3fx0Nt56KpZdVF7sUAAAAAAAAAAAAAJgyAYQAAAAAAAAAAAAAUARdfS9H42tXx+GuLeO2TSXTsf2WE2MG3Y23WPFEF9S9+zO78y46nB3MxEu/3jbqcYmS0lhX9Vhsv+VEVJatifEc7toSja9dPeoiyLNdvoWjgYWht7c3br/99jh+/Pj5bU888USsXr262KUBzHqZTCY2b95c7DKYpKNHj0Zzc3M0NzfH0aNHi10OAFPw4x//+KIQwo6Ojli+fHk88sgjkcvlil0iMEXn/k7X19cLAZ+C/rM90dRRH0/+YnVksh1jtk0mUrGxen9sventMZ/Lv/TrbZEdzOQ9fv11+yZU39LLqqN22da8+3547OsxNDz6v89XLq2PhltPxdoVO8c9T3umOXa9vjxajj8Sg7m59/O0eFHJnA2/BAAAAAAAAAAAAICPE0AIAAAAAAAAAAAAAJdQ/9me+O7Rmnim7e68iwtf6NxCxd9Z1R5lSyrGbDudixVHfLgQ733XP513X+vJPdF7pnPM48uWVMTmG4/ENz/3Rt4gwwtlBzPxTNvdse+Xa6P/bM80XGWAmXUufPDdd989v+2JJ56Ib37zm8UuDWDOaG5ujpdfnpsh1AAwX5SUlMSPf/zjSKfTF+3bsWNH/It/8S/ikUceiZ6enmKXCkxRc3NzJJPJ2PfkszE8VOxq5o7B3EC0HH8kdr2+PNozzeO2r122Nbav7o6VS+vHDLrrPdMZrSf35N13z2d3R6KkdMK13v2Z3XmfxWcHM/HSr7eNeeziRSWxZsXD8dBtv4uaVN245zpyfEfseqMy2nqbpnyNAQAAAAAAAAAAAIDJEUAIAAAAAAAAAAAAAAUaGs5F75nOaOttiq6+lycUljeYG4jDXQ/GrteXRybbMW77tSt2RsOtp2Ll0vpx287EYsUREVXld4262PCBzi/H0HBu3D4qLq+NhltPxbqqveO27e5viV2vL4/DXQ/GYG6g4Dr7z/ZEV9/L0dbbFL1nOid0LMBECR8EmD5333139PX1FbsMAFjQSkpK4u23346tW7fm3b9jx45Yvnx51NTUxCOPPBIvv/xy9PT0RC43/nMhYPb5v2/7i3hyU8Tx/1jsSi6NqTw7buttil1vVMaR4zvGbVtZtia233Ii1lU9Nu7z+KHhXBzo/PKo/RTyTiCfxYtK4is1B/Puaz25J3rPdI7bRzJRHvXppvjm596IVDI9ZtvsYCYOdG6K7x6tKajvj47ri57TrdHW2xQ9p1sjO+g7IQAAAAAAAAAAAABMRkmxCwAAAAAAAAAAAACA2WxoOBdvvf9U/Mf3940aHFhZtiZu/Fdfy7sw8NBwLjo+eD4OdG4q6Hw1qbpYV/VYJBPlBdc3E4sVn7P+un1xvP/VyA5mRmzPZDvirfefitplD4zbx+JFJVG77IH43H/ztTj4zuZozzSP2b715J5oPbknNlbvj/SVG2Lxoot/7bmttyl++bfPRHd/S94+kolU3Hz1N+P25Q15jweYqP/6X/9r/OVf/mX81V/9Vfzd3/3d+e3/7t/9O+GDAFNQX18fP/7xj6OkxJwNAIqlpKQkHnvssfjGN74Rd9xxR2QymYvadHR0REdHxyR6B2bKzTffPKnjBk5HvPBQRPnyiP/+LyI+mSr2SKZX75nOePHd/3HUZ8epZDpWlN0Wd39md95nx71nOuNA55dHfR9woWQiFfdd/3RUld9VcH1vvf/UqH1/6fp9Uxp7xeW1UZOqy/sM/vtv3xENt54q6Hl5xeW1sfWmt6Pjg+fjxXe3XfR+4EKZbEd87830mO82soN9cbjrwbzvGs6pSdXFnZ9ujLIlFVO6BgAAAAAAAAAAAACwUCwqdgEAAAAAAAAAAAAAMFv1n+2JPW/dEIe7toy52HB3f0sc6NwUTR31MZgbOL+953RrNL52dUHhg6lkOr75uTeiPt1UcPhgxMwuVhwRkSgpjXs+uzvvvsNdW6L/bM+E+qpPN8X2W05EKpket/2Bzk3R+NrV0XO69fy2wdxANHXUx4HOTaMuIB0RkR3MxJHjO6Lxtauj90znlK8DsPDkcrno6emJ7u7u2LFjR1x11VXxyCOPjAgfXLFiRfxP/9P/VOxSAeacdPqjuWBLS0s89dRTxS4JAIiI6urqOHXqVOzfvz9SqXmWSAZcpO9ExP/nqxH/37+MGBj4L8UuZ8qGhnNxuOvB+N6b6TGfHWeyHdF6cs9Fz46zg33R1FEf33szXVD44LqqvdFw66kJhQ9+GMS3ZdT+piN8b/11+yKZuPjf4dnBTLz1fuHfvRYvKomVS+tj++ruWLti57jt2zPN8ejProiW44/E0HDu/Pa23qZ49GdXRHumecwgw/ZMc+x6fXm0nnx8xPEAAAAAAAAAAAAAQH4lxS4AAAAAAAAAAAAAAGaj1pOPj7oQ8GjaM81xvP/VuO/6p+N/730u2jPNBR23sXp/pK/cEIsXTezXe/vP9sz4YsURESuX1scv//aZvIs2v3Bsc2y+8ciE+itbUhHfWdUebb1N8eK728ZcdDg7mIknf7E6alJ18cdLvxw/PPb1MdvnO/57b6Zj7YqdsWbFw9NyPYD5L5fLxR133BGvvvrqmO0efti/VwAm47nnnos77rgjMpkP53VbtmyJf/2v/3VUV1fP+LkHBgair68vjh49Gt3d3dHV1RWrVq2KlStXxmc+85koLy8sDPxcP+dUVFSM2Hfo0KHz/UdE3HPPPVFdXT3mGHt6ekbUVVVVFTfeeGNcd911I/qfrjH/0R/9UVx33XVx1VVXRUlJ/u8iuVwu3n///RHbLhx3X19f9PT0jHrufH1f2P7j+3O5XPzqV7+Kzs6PgmDq6+snPL4Lr91Y4xvrvpaWlo74eRgYGIi/+Zu/id/+9rdx9OjREfc1lUoV/LMDMNuVlJREfX191NfXR2tra/zVX/1VNDcX9owLoFj6z/bEX/385kk9O15XtTciouD3ATWpulh/3b5IlJROuM7mjvxz21QyHTdddf+0XItESWnc89ndcaBz00X7DndtiWvL75nQu4NESWmsWfFw/PF/82fxwrHNY4Y7RkQcOb4j3jz15ITfk1xY4398f19svrElkglzbAAAAAAAAAAAAAAYzSd+//vf/77YRQAAAAAAAAAAQCE+8YlPjPjsV18AYHZo6qjPu4Dsrjvm7n+ru/pejmfa7p7x89Qu2xp3VjZOaqHiiIh9v1ybd7HfVDIdW296e8KBhmPJDvbFoz+7Iu++jdX7Y+XS+gn2+KGh4Vy8eqIxjhzfMW21juZrK1+KqvK7Zvw8M6X/bE/sen35RdvPXf+33347zp49W+wyYV54+OGHxw0frKioiBMnThS7VIA5oampKTZt+ij84ty/P5cv/2huk0ql4tSpUwUFxV34nHD//v3jBtRFfBhst23bttizZ8+Y7VKpVBw8eDBqa2snNKbf//73BZ0jnU5HS0vLiLC6XC4Xf/ZnfzZmuFNdXV3s27cvSksL/+5Q6JgjIl566aW4666L58o9PT0j7tNEZbPZi2q+8P6dOHEiKioqoq+vL/7n//l/zlvraM+BJzK+Qn9OLryvdXV10dTUFBERjz/+eGzZMnYgzd69e+P+++8vOOwQYC45F0h79OjRePHFF6Ovry9aWlqm3jEwJTfffHO8+eabkz6+fHnEf/8XEZ9MRWy/5cSEQulmk6HhXDS+dvWEwgcnI5VMx8bq52LpZZMLTm/rbcobChgR8e2bOybd72jGen/wnVXtk+6353Rr/KB9/Yxf78qyNbH5xiMzeo6ZNh/fnwHAbHLhc0a/SwoAAAAAAAAAwELk/8kGAAAAAAAAAAAAABcYzA3ED499fUbPkUqm46srD01pQee23qa8iwdHRGysfm5awwcjIpKJ8lhXtTcOd10cunGgc1N8+lNrI5kon3C/ixeVxJoVD8dNV38zDnc9mHcx3unyw2Nfj+2ruycd+Dhb/fF/sykiNk15wXFgbM8++2z82Z/9WbHLAJg3KioqYu/evedD3TKZTGzbti0ee+yxaT9XT09P3HzzzZHJjB+QkclkYvXq1bF379544IEHJnSexsbGccPwOjo6or6+Pn784x9HSUlJ5HK5+JM/+ZNxQ5yam5vj1VdfjTfffDMqKirGraWzszPuuOOOgsYcEXH33XdPKuRwPIX01dfXF+l0uuBaJzO+TZs2xTPPPBP//t//+wmP75FHHokdO8YPTN+yZUscOnRoUucAmO1KSkqioqIiKioqCgp0BS6NpqamST0PLL084s7/MWLF/63YI5geL/1624yG4SUTqbjns7tj5dLJ//tvMDcQL767Le++2mVbpz18MCKiLt0Uj/7siou2Z7Id0dbbNOnxVFxeGw23noqOD54fNVBxOnT3t0ypTgAAAAAAAAAAAACY7wQQAgAAAAAAAAAAAMAFDr6zecYWK04mUnHf9U9HVfldU+qnGIsVR0TcdNX98R/f3xeZbMdF+w53PRj16aYpXJvyqE83xe3L/x9xoPPLec8xVdnBTBx8Z/OU6gQWJuGDADPj/vvvj0OHDp0P39uzZ0/8m3/zb+Kuu6Y2X75QT09PLF++fMS2dDodX/rSl+LGG2+MT37yk/Hee+/Fz3/+8xHhgVu2bIn+/v54+OGHCzpPU1PT+ZC6dDodt912W3z+85+PiIif//zn8fzzz58Py2tpaYnGxsZ4+OGHo7Gx8fz4U6lUbNiwYdTjMplM3HvvvdHe3j5mLa2trbF69eoR21KpVNx+++1xzz33REREd3d3vP766yOCD5ubm+PYsWPx9ttvR0nJh//Xw9LS0qirqxvR16uvvnq+pnP95rNq1apxr9uZM2fGDIdMpVIXbevs7Ix0Oj3h8bW0tERlZWWcOnXq/PjG8/jjj5+/r+fOsWrVqigrK4v+/v4RP7/nzrF58+ZoavKdAwCYnf5fu/8i/vO1fxGLFhe7kunRe6YzWk/umXpHo1i7Ymfces22SJRMLWB6tPcOyUQq7qxsnJHak4ny2Fi9P29I4IHOTfHpT62NZKJ8Un0vXlQSK5fWx/Xl98Yr3Q0zdg+mWicAAAAAAAAAAAAAzGef+P3vf//7YhcBAAAAAAAAAACF+MQnPjHis199AYDZoamjPtozzRdt33XH3PtvdXawLx792RUz0ve6qr1x01X3x+JFhQVdjGW0a55MpGL76u4pL4Y8lv6zPbHr9eV5931t5UtTDleMiBgazkXHB8/Hi+9um5EwyO23nIiyJRUzdo1mymjX/v/9bz7835tvvjnefPPNYpcJc9qaNWtix44dF4U2ATA1TU1NsWnTR6EXJ06ciIqKioiI6Ovriyuu+GgOnkqloqOjI8rLRw+YuPA54f79+6O+vn7UtvX19dHc/NHceefOndHQ0JA3gK6npyfuvffe6Oj4KAw7m81GaenF8+uPj+mcrVu3xu7duy/qv6+vL9Lp9Iigvbq6uvO1jXVcfX39iJC7N954I2pra/OON5fLxQ033DBiDHV1dfHXf/3Xecfc2dkZd9xxx4i6JnJN6+rqJhy2d+H9u/AapFKp2L17d2zYsGHUgMCZHt+F9zWVSp0/bs2aNdHU1JT357K1tTXWr18/4hwdHR1RXT0zwfAAAOeMNifNp66uLvbt2xf/uKgv7zPGufrMdN8v10Z3f8vUO/qYyrI18aXr903LNek53RpP/iL/s6bpeqY+mqHhXOx564bIZDsu2ldZtiY233hkWs7Tf7Ynnm27N+95pmpd1d6oXfbAjF2jmTSf3p8BwGx04XNGv0sKAAAAAAAAAMBCNPXVSwAAAAAAAAAAAABgnvjPA7+e9j4ry9ZEXbopkonyqXcWHy5WnG/B2oiI+65/ekbDByMiypZUxNoVO+PI8R0X7fvhsa9PSwDi4kUlsXJpfVxffm+80t0QrSf3TOsYfpd9Z04upj2ez3zmM/Ev/+W/LHYZMCdddtll8c1vflPwIEARlJeXx0svvRR33313RERkMpmor6+PI0emHoTR2to6InxwvGC9ioqKOHr0aCSTyfPbdu/eHQ8//HBB59u6dWs89thjo47zzTffjOXLPwp7uTB8cKzjmpqaRoQ0/sVf/MWo1+f5558fEc63c+fOMeuvrq6O7u7uqKysPB+gt23btrj33nvzBi9Ot/ECGKdjfKdOnYqrr776/Pg2bdpU0PjOtR/r/kRE1NbWxsGDB0fMI/7yL/9ywsGMAAAzIZ1Ox6FDh84HgP/j2b5ilzStZiJ88JufeyMqLq+dekfxYQDgD9rX591Xk6qb0fDBiA+ftX915aG8oZPd/S3R1ffytNRQtqQivrOqPbr6Xo5n2u6e1jG89/dH52wAIQAAAAAAAAAAAADMJAGEAAAAAAAAAAAAAPDPuvv/w7T3eWXyumkLHyz2YsXn3L68Id489WRkBzMjtmcHM/FKd0Osq3pskj2PlCgpjas/+flpr//9//OXl+xaXQr/+/+xP1YurZ96RwAARXLXXXdFXV3d+TC6lpaWaGpqGjMssBB/8Rd/cf7PqVQqNmzYMO4xpaWlsXPnztix48PA7SeffDIaGhrGDcaLiGhsbBxzf0VFRaTT6REBeoUcV15eHmvWrImWlpbz12c0mzZtGjHmhoaGgsb89NNPjwiBfOaZZ+KBBy5NyEcqlYrGxsaCrvG2bdsmPL6SkpKLAgInEiw53v2J+DCE8MJ729zcLIAQACiqVCoVTz/9dNx11/x5Dvpx/Wd7ZqTf6QofjIh49UTjRc/Rz5mu5+jjKVtSEeuq9sbhri0X7fvhsa/H9tXdkSiZnvDxT3/qjmmvvz3THPVpc2sAAAAAAAAAAAAA+LhFxS4AAAAAAAAAAAAAAGaLE6dfn/Y+s4N909bXS7/eVvTFiiMiFi8qiW/c8JO8+1pP7oneM53Tdq7/8k/9017/TNxnAACmZt++fZFKpc5/3rRpU/T09EypzwuD+nbv3l1QwF1ExJ/92Z+d/3Mmk4lf/epX4x6zc+fOKC0dP7Rj+/btIz5v3bq1oOO+9rWvjficy+UuavPx6/X0008XPOa77ror0un0+c9Hjx4t6Ljp8PTTTxd0Dfr6+iKT+ej70ETu6bmAwHO6uroKOq7Q+xpx8b3Nd48AAC6FvXv3xqlTp+Z1+GBExO+y78xIv9P1TL//bE8cOb4j776N1fsjmSifsWvzcTdddX8kE6mLtmcHM3Hwnc3Tdp5/+Mf3Z6T+6XzPAgAAAAAAAAAAAADzhQBCAAAAAAAAAAAAAPhnmex/mvY+P8gem5Z++s/2ROvJPXn3XerFiiMill5WHbXLtubd9/2374ih4ekJ2/i7//Kbaa99Ju4zAABTU1paGj/5yciQ63vvvXfSIW59fSMDKlatWlXwseXlI+fWnZ3jB2xXVlZOqs7Pf/7zkzru/fcvDvb427/92xGfP/e5z02oz9tuu+38n1999dVJ1TUZd9xxR0Htfv3rX4/4PJF7GhHxpS996fyfm5ubCzrmxhtvLLj/P/zDPxzxOd89AgCYSXV1dZHNZuOBBx4oOKh5Ljub+/sZ6XdwaGDKfQwN5+LZtnvz7ksl05G+csNMXpqLLF5UEt+44Sd597VnmqP3zPjfeYppOu4JAAAAAAAAAAAAAMw3AggBAAAAAAAAAAAA4J+tKLt92vu8Mnn9lPuYbYsVn3NnZWMkE6mLtmcHM/HqicZpOcfVn5xcIMtYZuI+AwAwddXV1bFz587znzs6OmLbtm2T6uvjYXV/+7d/Gz09PQX98/HwwkJrn0y7a665pqDjCgnba2trG/H540GK47kwDDGTyUw6/HGiCg3Hee+990Z8rqiomNB5Ph4SOTAwfojJddddV3D/E2kLADCd0ul0nDhxIpqamqK0tLTY5VwyqWRhc/CJ+uQfXDXlPjo+eD4y2Y68+7668lAsXnTpAyKXXlYdtcu25t33/bfviKHhqc//k/9iYt9BCjUd9wQAAAAAAAAAAAAA5hsBhAAAAAAAAAAAAADwz64tv2dG+h3MjR9sMZa33n9q1i1WHBGRKCmN+65/Ou++I8d3RP/Znimf4+/+S/e01z1T9xkAgKlraGiIdDp9/vOePXuis7Nzwv18PKxu9erVsXz58oL/majLLrtsUu3+1b/6V9N27Y4ePXr+zxdew0J9PBzx/fffn7baRlNXV1dw2xdffHFK5/p4iGMhQZMTDXEEALiUrrnmmnjppZeivb19wuHM88GnlvzRjPR76h9+PqXjs4N9caBzU959a1fsjLIlFTN9aUZ192d2RzKRylNzJl769eTC32daKpku2jsQAAAAAAAAAAAAAJjNBBACAAAAAAAAAAAAwD+75g9XTb2Tj2nPNMdDP01Gy/FHJhVEmB3si8NdW/LuK/ZixRERVeV3RU0qf2jIs233xtBwblL99pxuje8erYkjx3dMe82pZPXUOwEAYEaUlJTEoUOHRmy74447YmBgaqHeC01HR8eEjzl16lSxy55RZ86cmfAxpaWlxS4bAGBUtbW1cddddxW7jKJJlJTmDdObqid/sTq+e7Qmek63Tur45o76vNuTiVTcvrzhkl6jj1u8qCTuu/7pvPtaT+6J/rM9k+p3MDcQLccfiYd+mpz2mleU3XYJrxAAAAAAAAAAAAAAzB0lxS4AAAAAAAAAAAAAAGaLT/7BVZFMpCI7mJn2vo8c3xFHju+ItSt2xq3XbItESWFBFrN5seJz1l+3L9ozzRdtz2Q7ouOD52Pl0vqC++o90xkHOr8cmezEA1MKkUyk4lNL/qho1woAgPFVVFTE/v37Y9OmTRERkclkYvPmzdHU1DTpPvfv3z/pY1etmv6g8tno7//+74tdwozq7OwsdgkAAEyzm6/+Zhw5vmPa+81kO+LJX6yOVDIdX7z2iai4vLag47r6Xo7u/pa8+75SczAWLyr+Eh9V5XdFTaou7zP9Z9vuja03vV1wnYO5gXjtvd0zcg/O+cyn/k3RrhUAAAAAAAAAAAAAzGbF/+1kAAAAAAAAAAAAAJglFi8qifuufzqeabt7xs4xkSDCubBYcUREoqQ0NlbvjwOdmy7ad6BzU3z6U2sjmSgfs4/+sz3xym8a8i56PJ3uu/7pgsMfAQAonvr6+njmmWeipeXD+XBzc3Pcc889UV9feLj1hdauXRvl5eWTOnau+Pj4BgYGorS08Llvf39/sYcwpqqqqhGf+/r65v09BQBgbLcvb4g3Tz0Z2cHMjPQ/kSDCwdxA/PDY1/Puq0nVFRxieCmsv25fHO9/9aLrlsl2xFvvPxW1yx4Y8/hLETwYEVFZtiaqyu8q9uUCAAAAAAAAAAAAgFlpUbELAAAAAAAAAAAAAIDZpKr8rqhJ1c34eY4c3xEP/TQZLccficHcwEX759JixRERK5fWR2XZmrz7mjtGD4npP9sTTR31sev15TMePliTqrNYMQDAHPLv//2/j1Qqdf7zpk2boq+vr6Bjq6urR3weGBgo6Li57POf//yIz7/97W8ndPyhQ4dGfK6oqCj2kEaorKwc8fnXv/71hI5/5plnZvX4AACYuMWLSuIbN/xkxs9zLojwu0droud0a942B9/ZnDcIMZlIxfrr9hX7Uo2QKCmNez67O+++w11bIjuY/3vXYG4gWo4/Eg/9NDnj4YMREXXppqJeJwAAAAAAAAAAAACYzQQQAgAAAAAAAAAAAMDHrL9uXyQTqUkfn0qmI5VMF9R2tCDCubRY8TmjLQbc3d8Sbb0j913K4MGI2X3dAADIr7S0NJ5++ukR2+rr6ws69sLgwoiIo0ePFns4M+7joYvf//73Cz62r68vWlpazn9es2ZNQccdO3bsko1v1apVIz7/1V/9VcHHDgwMjBhfOl3Y9zUAAGa/pZdVR+2yrVPqo9DjRwsi7D3TOepz7ns+uzsSJaXFvkwXWbm0PirL8s/7mztGfu+61MGDEREbq/dHMlFe7MsEAAAAAAAAAAAAALOWAEIAAAAAAAAAAAAA+JhESWlsX90dNam6SR1/ZfL6+M6q9vjm594ouI8Lgwi7+l6ec4sVR0QkE+Wxrmpv3n0vvrstBnMDEw4eTCZSsbF6/5QWkK4sWxPfWdUxa68bAACju+uuu2Lr1o/mgheGyI2lvLw86uo+motv27YtcrlcwecdGBgouO1sUV1dPSJYb8+ePQWP48knnxzx+Wtf+9qobcvLPwoB6ejouGTjq6ioGDG+5ubmgsf3zDPPjPi8ffv2S1Y3AAAzb13VY7Gxev+kj7+zsjEe/UI21q7YWVD7jwcRfv/tO/K2qyxbEyuXFhaiXgx16aa827v7W6Ktt2lSwYNrV+yMb37ujUnXlEyk4msrX5rV1w0AAAAAAAAAAAAAZgMBhAAAAAAAAAAAAACQR6KkNOrTTfG1lS9FMpGa0LHtmeboPdMZFZfXRn26KbbfcmJCQYTPtN2dd99sX6w4IuKmq+6PVDJ90fbsYCZ2vVE54eDBhltPxTV/uCpaT+6ZVD0bq/fH5huPRDJRPqnjAQAovt27d0cqNbE5eUREY2Pj+T9nMpl4/vnnCzrukUceiWQyGU1NTRMKLZwNPh6s96d/+qfjjqG1tTV27PgoTCSVSsWGDRtGbf/5z39+xOeenp5LNr4nnnhiUuP7X/6X/6Xg8QEAMDetXFofD932u6gsWzPhYw++szkSJaWxZsXDkwoizA5m8u7/0vX7in1ZxpRMlI8a3Higc9OEggdrl22NR7+QjTUrHo4f/epbk6qnJlUX21d3R1X5XcW+NAAAAAAAAAAAAAAw6wkgBAAAAAAAAAAAAIAxVJXfFdtXd8c3P/dGrKvaO2Lx4sqyNXnD9iIivv/2HTE0/GEQRtmSigkHEeYz2xcrjohYvKgkvrryUN59oy3CfKELgwdXLq2PxYtK4oVjm/O2TSXTUbts60X3ZO2KnfG1lS/Fo1/IzvrARgAAxldSUhJvvvnmhI+rqKiIdPqj+fqmTZviwQcfHDOw7pFHHjkfxrdp06YRIYZzwYYNG0aENba0tMSf/MmfxMDAQN72ra2tsXr16hHbdu/eHSUlJaOe45prrhnx+eabb47Ozs5LMr7a2toR9/Tc+Pr6+sYcXybz0XeR8cYHAMDclUyUx+Ybj8S3b+6IjdX7oyZVF8lE6p/3pUYNJ2zPNEfvmQ/ntBcGEa6r2nv++IlaV7U3ypZUFPuSjCt95YZR33MUoiZVF9tvORHrqh6LRElptPU2RSbbkbft2hU7R9yTc8/4N1bvj+23nIj6dFMkSkqLfUkAAAAAAAAAAAAAYE7w/5IDAAAAAAAAAAAAgHEkSkqj4vLaqLi8NmqXPTBi32BuIB76afKiY7KDmXjr/adGtD8XRHjnpxvjld80RHumueAaUsl0JP9FebEvRUHKllTE2hU748jxHRM6bmP1/khfuSEWL/ro15y7+l6O7v6WvO2/uvLQnFjAGQCAqauoqIi9e/fGli1bJnTcc889F3fcccf5ALo9e/bE888/H7fffnvcc8898Yd/+Ifx29/+No4ePRrNzSPn52vWrImGhoZiD31CSkpK4uDBgyNCBVtaWiKZTMaaNWvilltuicrKynjxxRfj1VdfHRHMd27MGzZsGPMc50IAOzo+DBXJZDKRTqcjlUrF7bffPqLtY489FuXl0/s95oknnrhofFdcccWI8f385z+P559/flLjAwBg7lt6WXUsvaw6Vi6tv2hfU0d93mfz33/7jmi49dT559OJktKoXfZA3HTV/dHxwfPx4rvbIjuYGffc53xqyR8V+zIUZPGikthY/Vx8782JhRDWpOrizk83jnhGP5gbiBff3Za3fe2yrbFmxcPFHi4AAAAAAAAAAAAAzBsCCAEAAAAAAAAAAABgChIlpbGxen8c6Nx00b7DXVvi2vJ7LgrJuzCI8I33vhutJ/eMe55MtiMe+mky1q7YGbdesy0SJaXFHnpeg7mBeO293RMKHxxtTEPDufjhsa/nPaZ22VbhgwAAC8z9998fhw4dipaWloKPqa6ujo6Ojqivrz9/XCaTiebm5osCBy+0c+fOaGhoiJKSufd/wautrY0TJ07EzTffPCKAr6WlZcxrt3fv3rj//vsLGvOhQ4di+fLlI7adu64XamxsnPYAwsmOby7fUwAAps/66/blDSDMDmbirfefitplD4zYvnhRSaxcWh/pKzdMKIjwmba7I5VMxxevfSIqLq8t9rDzGhrOnR9TofIFD57zSndD3muTTKTizsrGYg8XAAAAAAAAAAAAAOaVRcUuAAAAAAAAAAAAAADmupVL6yOVTOfd98KxzaMeV7akItZVPRaPfiEblWVrCjrXkeM74qGfJqPl+CMxmBso9tDPG8wNRMvxR+KhnyYLDh9cu2JnPPqFbKxZ8XDeQMVXTzRarBgAgPNKSkqiqalpwseVl5fHj3/849i5c+e4bVOpVOzduzcefvjhOR1UV1FREd3d3VFXV1fQmDs6OuKBBx4oeMwVFRWRzWYL6n+mxnfq1KkJjW+u31MAAKZHoqQ0Nlbvz7vvcNeWyA725d13Loiw4dZTsa5qb0HnymQ74slfrI7vHq2JntOtxR76eUPDuWjrbYrG166OA52bCgpUrEnVxfZbTkR9uilv+GD/2Z5oPbkn77H3fHZ33ncAAAAAAAAAAAAAAMDkfeL3v//974tdBAAAAAAAAAAAFOITn/jEiM9+9QUAZoemjvpozzRftH3XHQvrv9X9Z3ti1+vL8+772sqXoqr8rlGPHcwNxK43Kgta5Pfj1q7YGbdes23Ci/cODefiH/7x/fhd9p246pOfi2SifFLjHswNxGvv7S44dPCcZCIV21d3j1r3WNdzY/X+WLm0flL1zmWjXZOFej0AgLljYGAg+vo+CvG46qqrphQE19fXFwMDH4Zxl5eXR2npxObCfX198etf/zr+w3/4D9HV1RX33HNPRERUV1dHdXX1jI4pl8vF+++/f8mOO6enpyfeeeed+OUvfxkREZWVlbFq1aop34sL+88nX/8Xti0tLY3y8sl9FylkfBP9+fj4fa2oqCj42KneIwCAS2G0Z4zbbzmRN1RuvhoazsWet26ITLbjon2VZWti841Hxjx+tPci40kl0/HFa5+IistrJ3xsdrAv3v+HX8QVyeumdK96TrfGj371rbxjH8t47zm+e7Qmb5+pZDq+s6p90vXOZd6fAcDMuvD3Sf0uKQAAAAAAAAAAC5EAQgAAAAAAAAAA5gwBhAAwO1lA9SOHux6M1pN7Lto+XtjeZBcrvlAhQYS9Zzrj2O9+FCdOvx7d/S0X1ViT2hCf+dS/iT+6/F+PG2g42eDBC9Uu2xrrqh7Lu2/fL9deVGPEwl6sWAAhAAAAADAVAgjHvxYRY4ft9Z7pjO+9mZ7SuQsJIhwazkXHB8/Hr/pezPv+oCZVF9f84aq4tvyegu7dZIMHzxnrPUdbb1Mc6NyU97iF+LN1jvdnADCzBBACAAAAAAAAALDQLSp2AQAAAAAAAAAAAAAwX9z9md2RTKQu2p4dzMQr3Q15j+k90zlq+ODG6v2xdsXOgs595PiOeOinyWg5/kgM5gYu2t/W2xTfezMdR47vyBvslx3MROvJPfFM292x643KyA725T3PYG4gWo4/Eg/9NFlw+GBl2Zq821tP7oneM50Xbe/qezlvjR9ek+cKOicAAAAAAIymbElF1C7bmnffD499PYaGcxdtHxrOxfffviPvMZVla2Jj9f687wg+LpPtiCd/sTq+e7Qmek63XrS//2xPNL52dRzo3DTq+4P2THMc7toSu15fHm29TaOeq+d0a3z3aE08+YvVBYUPppL5wxVHe88xmBuIF9/dlveY2mVbF2z4IAAAAAAAAAAAAADMNAGEAAAAAAAAAAAAADBNFi8qifuufzrvvtaTe6L/bM+IbeMtVrxyaX2sWfFwPPqF7KSDCIeGc9HUUR8HOjcVPI7sYCa+ezQ9YuHjyQQPrl2xMx79QjY233hk1BDC7799x4iFnAdzA/HDY1/P27YmVRdLL6ue4F0BAAAAAICL3VnZmDcwMDuYiZd+fXGo3qsnGiM7mMnbV126KVYurY+GW09NKYiwq+/l2PX68lHPk8+Bzk3RcvyREdsmEzz4zc+9Ed9Z1R4bq/fnbdN6ck/0nukcse2V7oa8tSYTqbizsnHC9wQAAAAAAAAAAAAAKIwAQgAAAAAAAAAAAACYRlXld40atvds270jwvbGW6z4nERJ6aSDCBtfuzraM80THkd2MBNP/mJ1dPW9POngwTUrHo5ESWlERHzp+n2jnuet9586/3m0xYojItZfl78PAAAAAACYqERJadx3/dN597We3BP9Z3vOf+4/2zPqM/J1VXsjmSiPiIjFi0omHUT46M+WxjNtd09qLEeO74h9v1w7peDBistrIyJi5dL6Ud9zfP/tO86/5+g/2xOtJ/fkbXfPZ3effz8AAAAAAAAAAAAAAEw/AYQAAAAAAAAAAAAAMM0uDA+8UCbbER0fPB8RYy9W/OGixOUXbZ9MEOFoYX6Feqbt7ikFD55TtqQi1lXtzXvc4a4t0X+2Z8zFijdW77dYMQAAAAAA06qq/K5Rw/aebbs3758vlEqm46ar7r9o+2SCCKf6PL+7v2VKwYMXGu09R3YwE2+9/9S412Tl0vopjQUAAAAAAAAAAAAAGJsAQgAAAAAAAAAAAACYZslE+ahhewc6N8VgbmDMhXnTV24Ys//JBBHOpLGCBy9001X3RyqZzrvvhWObp3RNAAAAAABgMr50/b682zPZjmjrbYq23qZRQ/2+uvJQLF5UMmrfkwkinEnjBQ+eM9Z7jsNdW+Jw14NjXhMAAAAAAAAAAAAAYGYJIAQAAAAAAAAAAACAGXDTVfePupDwrjcqJ71Y8YWKHURYk6orKHjwnMWLSkZdeLi7v2XUa7Kx+rmCrwkAAAAAAExE2ZKKUcP2DnRuigOdm/LuW7tiZ5QtqSjoHMUOIiw0ePBCN111f6SS6bz7Wk/uybu9JlVX8DUBAAAAAAAAAAAAACZPACEAAAAAAAAAAAAAzIDFi0riGzf8JO++7GAm7/aJLFZ8oUsdRFiTqovtt5yI+nRTQcGDFypbUhG1y7ZO6FxLL6ue8TEBAAAAALBw3XTV/RMKBUwmUnH78oYJn+dSBxFOJnjwwlq/uvLQhI5Zf92+GR0PAAAAAAAAAAAAAPAhAYQAAAAAAAAAAAAAMEOWXlYdNam6gtpOdrHiC50LIvzaypdmZDwXBg9OJijxnLs/s7vgRZUtVgwAAAAAwExbvKgkvnHDTwpu/40bfhKLF5VM6XzngghnwlSCBy9UtqQi1q7YWVDbjdX7I1FSOiPjAQAAAAAAAAAAAABGEkAIAAAAAAAAAAAAADOo0AC9qS5WfKGzub+fkbFMNXjwnMWLSuIrNQfHbWexYgAAAAAALpWll1VHTapu3HY1qbpYeln1tJzzbO70jIzlTz79l1MKHrzQ7csbIplIjdkmlUxH+soNMzIWAAAAAAAAAAAAAOBiAggBAAAAAAAAAAAAYAYlSkpjY/X+MdtM52LFERGn/uHnMzKWoeHctPVVcXntmAs5W6wYAAAAAIBLbf11+8bcn0ykxm0zEYNDAzMyjrO5v5+2vhYvKolv3PCTMdtsrH4uFi8qmZGxAAAAAAAAAAAAAAAXE0AIAAAAAAAAAAAAADNs5dL6SCZSefdN92LFERFXf/LzMzKO6V48eNXVfz7qvmTiCosVAwAAAABwSSVKSmNd1d5R9993/dORKCmdtvN98g+umpFxpJLV09rfFaXXjvqeIyLisj9ITaA3AAAAAAAAAAAAAGCqBBACAAAAAAAAAAAAwAzrP9sT2cFM3n3ZwUxk/6lvWs93zR+umvYxpJLpGBrOTVt/Q8O5+NGvvjXq/u7+lujqe3naxwEAAAAAAKMZGs7Ff3x/36j7/+7sb6f1fIsXlUQqmS72sMfV8cHzo77niIho7qgvdokAAAAAAAAAAAAAsKAIIAQAAAAAAAAAAACAGTQ0nItn2+4ds80LxzZP2/l6TreOe77JyGQ7ovG1q6Ott2laggg7Png+MtmOMdv88NjXYzA3MO1jAQAAAACAfN56/6kxn10f7toS/Wd7puVc/Wd7oqmjftxn5ZPxvTfT0XL8kWl5xj6YG4gDnZvGbNPd3xJtvU3TPg4AAAAAAAAAAAAAID8BhAAAAAAAAAAAAAAwg8ZbrDhiehbm7TndGt89WhNP/mL1jCxWHBGRHczEgc5NUw4iLGSx4nPnO/jO9IUzAgAAAADAaPrP9sThri3jtnvh2NSeW58LHtz1+vJozzTP2HiOHN8RD/00OeUgwkKf07/47rZpCTwEAAAAAAAAAAAAAMYngBAAAAAAAAAAAAAAZkihixVHTH5h3ksRPPhxUw0inEioYHumOXrPdF6ScQEAAAAAsHAVGizY3d8Sbb1NE+7/UgUPftxUggh7z3QWXGt2MDOh5/8AAAAAAAAAAAAAwOQJIAQAAAAAAAAAAACAGfJs270Ft53owrzFCB7MV/NEgwjHWqw4mUjl3f79t++YcMghAAAAAAAUqq23Kbr7Wwpu/+K72woO8ytW8ODHTTSIcGg4Fwc6v5x332jP89szzdF7prNoYwQAAAAAAAAAAACAhUIAIQAAAAAAAAAAAADMgLbeplGDATdW78+7vZCFeWdD8ODHFRpEONZixTWpuvjGDT8Ztf9XTzQWe5gAAAAAAMxD2cG+ONC5Ke++dVV7I5VM5zkmEwff2Txmv7MlePDjCg0i7Pjg+bzvIZKJVHxnVUfe6xIR8f237xj1PQEAAAAAAAAAAAAAMD0EEAIAAAAAAAAAAADANBtrseKN1ftj5dL6qEnV5d0/2sK8Ew0eTCZSsbF6fzSu+adYV7V3wmNIJlLxzc+9EY1r/ik2Vu+PZCJVwLjHDiIca7Hi9dfti6WXVUftsq15+z5yfEf0n+2Z+M0AAAAAAIAxHO56MO/2VDIdN111f2ysfi7v/vZMc/Se6bxo+2SCB9eu2BmPfiEb2285UdDz+HzHN675p/jm594YNRjw48YKIhzMDYz6nuOez+6OZKI8vrryUN792cFMvHqiccJjAAAAAAAAAAAAAAAKJ4AQAAAAAAAAAAAAAKZZc0d93u2pZDrSV26IiIj11+3L2yY7mIm33n/q/OfJBg823HoqVi6tj8WLSqJ22QPx7Zs7Cl60uCZVF9tXd0fF5bWxeFFJrFxaHw23nppSEOF4ixUnSkojIuLuz+we9RzPtt07XbcIAAAAAACiq+/lUUMCv7ryUCxeVBJLL6uOmlRd3jbff/uOGBrORcTUggfXrHg4EiWlUbakIhpuPTXq+T4umUjFt2/uiDUrHo7Fi0qi4vLa+M6q9ikHER58Z3PetqlkOlYu/fAdSNmSiqhdtnXUPvvP9kzDHQIAAAAAAAAAAAAA8vnE73//+98XuwgAAAAAAAAAACjEJz7xiRGf/eoLAMwOTR31eRfS3XXHwvxvdVffy/FM2915922/5USULak4/7mtt2nUUL6N1fvjZyd2FRQ6GPHhIsP3fHZ3pK/cEIsXleRtMzSci44Pno9T//DzON7/sxF916Tq4tryeyKVrI6ll1WPep5zfbz47rbIDmYKri2ZuCLvWFLJdHxnVfuIbT2nW+PJX6we9bqcW9x4oek/2xO7Xl9+0faFfE0AAAAAgMKN9ozx48+uF4rB3EDseqMy77Pu2mVbY13VYyPaPvTTZN5+apdtjexgX8GhgxEfBg/ees22SJSUjtqm53Rr/O2Ztnjv74+O6LuybE0sv/yWuOr/emN8+lN3jPpOICKi90xnvHriLydUW+2yrdF6ck/efR//WRkazkXja1fnvYapZDq23vT2mPXNZ96fAcDMuvD3Sf0uKQAAAAAAAAAAC5EAQgAAAAAAAAAA5gwBhAAwO1lA9SMTWaw44sOFefe8dUPBIYP5FBI8OJqh4VyczZ2OZKJ8wuedTBBhPqMtbD3az1VExEO3/W5SNc91AggBYG7L5XLx/vvvR0REaWlplJcvvPnMdLnwOeH+/fujvt5caCbV19dHc/OHc/O6urpoamoqdkkAAEySAMKRRnsOnUykouHWUxc9c2/rbYoDnZumdM5CggdHkx3sm/Sz8f6zPfHKbxomFESYr/Y1Kx6+aHvvmc743pvpvMcs5OfX3p8BwMwSQAgAAAAAAAAAwEI3sRVGAAAAAAAAAAAAAIBRHXxnc94wvmQiFXd/ZvdF2xcvKomN1c+NujDvWKYSPHjh+Se7WPHiRSWxcml9pK/cMOkgwtplW0dd1Hr9dfvieP+refs83PVg1KeFngAAs9vAwED8zd/8TTz33HPnw9s+LpVKxYYNG2LDhg1RW1tb7JL5Zz09PbF8+UehLLM95PDxxx+Po0ePTrmfP//zP/dzCADAgtF7pnPUML77rn8673P39JUb4mcndkUm2zHh800lePCcyT7Pj4goW1IR9emmuPPTjZMKIkwmUnH78oa8+5ZeVh01qbq8fR7o3BSf/tTaKdUOAAAAAAAAAAAAAFxMACEAAAAAAAAAAAAATIOuvpdHXbD3KzUHRw0J/Mfc/zmh80xH8OB0mkoQ4fH+n0XP6daouPzikJNESWncd/3T8Uzb3Rfta880xx8v/XJUld9V7OEDAOTV2toa69evj0xm7HlRJpOJPXv2xJ49eyKdTsdzzz0X1dXVxS6fOebo0aOjhlxOxD333COAcAHq6+uLgYGB858rKiqKXRIAwIwbGs7F99++I+++mlTdqM+e/+Ef349k4ooJnasmVRd3froxypZUFHvYETG1IMKOD54f9d3E+uv2xfH+V/O+Hzjc9WDUp5uKPXQAAAAAAAAAAAAAmFcWFbsAAAAAAAAAAAAAAJjrhoZz8cNjX8+7ryZVlzdgr+d0a3z3aE08+YvVBZ0jmUjFxur90XDrqVi5tH5WhA9e6FwQYcOtp2Jj9f5IJlLjHpPJdsSTv1gd3z1aEz2nWy/aX1V+V1SWrcl77A+PfT2GhnPFHjYAwAi5XC4efPDBWL169bjhgx/X0dER6XQ6Hn/88WIPA1hAHnzwwVi+fPn5fwAAFoKXfr0tb1BexIdBeh/Xf7YnmjrqY9fry6O7v6Wgc9Sk6mL7LSeiPt00a8IHL3QuiHD7LSeiJlU3bvvsYCYOdG6KxteujrbepouezydKSuO+65/Oe2x7pjm6+l4u9pABAAAAAAAAAAAAYF6ZXauOAAAAAAAAAAAAAMAsNTSci3/4x/fjvb8/Gqf+4ecREXH1Jz8fqWR1/OJvv1/wYsU9p1vjR7/6VmSyHQWfe+2KnXH78oZZFzqYz7kgwuvL742Hfpos6JhzQYSpZDq+eO0TIwIb69JN8ejPrrjomOxgJl769bb43L/6RmSynSPuyTV/uCo++QdXzYnrBQDMH319fbFmzZro6Bg5z0ulUrFhw4b4/Oc/H6tWrYry8vLo6+uLiIi//uu/jieffHJEWOGWLVuiv78/Hn744WIPiTkonU7H9u3bJ3Xs/5+9/w+O+rrzRO+PQaMdVs0zMXlkt3ZsLAYylu2r1uUmqTgWJnZWJA524U2ZsEg4caWyVDkZG5Kl6rqiW4aAd3SL5xblAJ7YVUyub2IjuA6pjCnboQIbMgZh59q+jKTHjjKBQf4xo7b1rMgu0pKrtMTzRwYGGf3oVrfU+vF6VVGhu8/3fD/nfFvyt/uQ877tttuKXT4AABRMz/nO+KD3rXjvv70eH/R1xA0fuS0+Ou/PIiKi5Z1dwx6ztnpvlJaUDenj0G8aozW9L+vzJhOpeGDp81MydHA4F4MIE6XlI87L5S4GEb7w601xz407InXtmkvfxVeVr4yaZP2w8/WjN78W/+HjP4v/+rt347+c/4d4+7cn4oaP3BZ/On9p/L/L/jwSpeXFngoAAAAAAAAAAAAAmFbsqAEAAAAAAAAAAAAAo+jt7459bQ1xqudIzsdevlnxeIIHLzpz9ljULZ5e//T35bd35HzMcEGEidLyWFu9N/a3r7uifcs7u0bdEHnJgrqo/+eNkwEAJlpDQ8MV4YPHjx+P2traK9qWlf3hHnHz5s3R2NgYTU1NsWXLlkuvb9myJb7yla9EZWVlsYc1K1VWVsaFCxeKXca43HLLLdHQ0FDsMgAAoGha3nkiDnY8fMXzY4UIJhOpWFrxh3vp8QQPXpTubYvSuWU5H1dMPec7swofvNxIQYSrqnYOO2+9/en47iupIc9d3i5Rmowv3fL9qCpfWezpAAAAAAAAAAAAAIBpYU6xCwAAAAAAAAAAAACAqaqj+6V4/ERqXOGDSxbUxdKKhug82xKPn6iJJ19bNq7wwYiIUz1HoqP7pWJPR9Z6znfG4dNbxn38xSDCx0/UROfZllha0RDJRCrnfk71HInHfnFNnOxqLvaUAAAz3BNPPBFHjgy9ZxwpfPDDSkpKYvPmzbF3794hzzc2NhZ7WAAAANNGb3937Hl9xbDhg9l4YOnz0Z/piyOnt8X2Y4vGFT540cGOjcWejpz8+M314z72YhBh08vXx8mu5phXcnWsrd47rn6ePnl3NLc1RH+mr9hTAgAAAAAAAAAAAABTngBCAAAAAAAAAAAAABhGc1tDPH3y7ujtT4/r+EVX355T8GCiNBlrq/eOGLT3oze/FgODmWJPS1ZG2qw4mUjFY5/tjbXVeyNRmhyzn8uDCKuvvW/c9exvXxd7Xl8xbeYPAJheMplM/OVf/uWQ57INH7xcQ0ND1NfXX3q8b9++6OsTugAAADCWzrMt8dgvrolTPUfGdXztwg3xf//TD+PRnyfi8OktWR2zYvHWWFW1e9jXWtP7ovNsS7GnJSsd3S+NOG/f/HRbPHL7mahJ1o/Zz+VBhBEx4lrHWFrT+2L78SXRc76z2FMDAAAAAAAAAAAAAFOaAEIAAAAAAAAAAAAA+JCTXc3Rmt6XVx+HT2/JKXiwcfm7sbSiIR5Y+vyw7Xr703H0TFOxp2ZMnWdbRtyseG31s1FaUhZLKxqicfm7OQURZrvp80hO9RyJtvefK/b0AAAz0C9/+ctIp/8ltLq+vj7n8MGLmpqaYsOGDXH8+PH4/e9/H2VlZZM6lkwmE52dndHZ2RmZzMSEN0/GOSLi0jmKHeI4GWOdLjo7O6O7u3tC+x/PNb94XKFdfK9P5Huwu7t7SrzPRzJRcwsAcLn+TF8807o6rz5a3tmVU/DgY5/tjbrFm+PW6x4cMWjvmdbVMTA4tT8HDAxm4kdvfm3Y12qS9VExvzoWzKuMhlRzzkGE2ayPjNbHD07eO+XnDwAAAAAAAAAAAACKSQAhAAAAAAAAAAAAAFymt7879revm/DzfDh4cO6ckoiIWDCvMmoXbhj2mMOnt0TP+c5iT9GIBgYzI270fHGz4ovmzimJpRUN8egdXfH1Tx4fcZPmQtrfvi56+ycu8AQAmJ3+6q/+asjjv/iLvxh3X5WVlbFz586ora2NkpKSEdt1d3dHQ0PDpT+Xa29vj23btkVNTU1cddVVcdVVV13R5qJMJhMtLS3R0NAQV111VfzRH/1RLFq0KBYtWhR/9Ed/dOnYlpaWrOofqa6+vr544oknoqKi4opzrFixIrZt25b1OUaSyWTipZdeujTui+dIJBJRUVERDQ0N0d7ePq5xZFvbxRoaGhquqOOP/uiPoqKiIrZt2zZlw+IK7eJ76/K5uOaaay69r5544omsr8kTTzwx7PVoaWkZ9ppfddVVI871SO+Vq6666tL7cTyBkZdf/8vf65e/B5ubm7MOYbz8PXjxmIs/sytWrIirrroqrrnmmpze5x9+bzc0NMTRo0dHPO+H/4xWeyaTiW3btkVFRcWl3z2Xz+3GjRvjpZdemjXvfwBg8hx4a3309qfz72gMlwcPlpb8ISx+7pySWFv97LDte/vT8ep7TxV7ekZ19EzTiHO3+uY9Qx7nGkSYr3Rv25SfPwAAAAAAAAAAAAAopqsuXLhwodhFAAAAAAAAAABANq666qohj/3TFwCYGprbGqI1ve+K57d/bnr+t3rP6yviVM+RCes/UZqMe27cEalr11wKHfyw/kxfbD++ZNiNf5csqIv1nzhc7GkaVss7T8TBjoeHfe2xz/Ze2pR5JJ1nW+Inv/pGpHvbJqzGqTx/Y+k53xnbjy264vm11XtjaUXDOHoEAArhw99Z/f73vx81PLAQOjs7Y9Gif7kvuHDhQmQymfjCF74QR45ceS9bX18fzc3NQ54brf1w6uvrY+fOnVFeXp5zXddff32k02MHgmzdujUaGxvHnL/L53zv3r2xZs2arMeyYcOG2LFjx6jn+PA49u7dO2KI4+XH3HvvvdHWlt29bFtbW1RXV2fVdiwNDQ2xb98fPpMNd60nu/++vr5Yv379pWPGks38Xl7DxfYbN26MXbt2jXpcMpmMU6dORVnZHz6LZPu+T6VS8fzzz0dlZWVWY8jl+ieTyfjZz3425vW//H1+5syZqKysHDIPoxnpff7h93auRvpOvrm5OTZt2pTVz3lExPHjx6O2tnbcdQAA4zfSd4yP3H4mFsyrLHZ5OevofimePnn3hJ5jxeKtsfyGTaN+v32wY2O0vDP8vemjd3wQidKRP0cVy0jvhYjsvnPuOd8Zh37TOOz6UCFN1/dmxMxbPwOAqeby78/8W1IAAAAAAAAAAGajOcUuAAAAAAAAAAAAAACmip7znRMWPpgoTcba6r3RuPzdWFrRMGL4YEREaUlZ3HPjjmFfO9VzJDq6Xyr2VF2ht797xPDBtdV7xwwfjIiovLo2vnVba3z9k8cjmUhNSJ2neo5Ez/nOYk4VADCDdHZ2Dnm8devWCQ8fHE4mk4mPf/zjWYcJjhbCVldXF8lk8orn9+3bF3V1dZHJZHKq6wtf+ELWoWRbtmyJL3zhCzmdo6enJ6cgxV27dsUXvvCFnOZ3LM3NzbFo0aKswwcjIj73uc9Fd3d3QeuYCtrb22PJkiXDhuTV1dUNe8y6deti27ZtOV33J554YszwwYiIdDod/+7f/btLj5uamrJ6r7S1tcWiRYuir69vzLajXf/6+vpha0qlUjkHRW7bti3rUMddu3bFxz/+8Zz6H0sqNfxntI0bN8a6deuu+DlPJpMjHrN69eoZ+f4HACbfsbcfn7C+VyzeGo99tjfqFm8e8/vtu5Y0RaI0OexrBzs2FnWORvLjN9cP+3wykYrUtWvGPH7BvMpoSDXHI7efiZpk/Zjtx+v//qcfFm2OAAAAAAAAAAAAAGAqE0AIAAAAAAAAAAAAAP/sg963Ct5nLsGDl1ta0RBLFgwf0PGjN78WA4PZh3NMhpE2Uc52s+LLTXQQ4URcZwBgdvrHf/zHIY8/8YlPFKWOp556akj4WSqVir1791768+1vf/vSa8OFD+7evTva2tri97//fRw+fDi6urriwoUL8eKLLw4JI2xra4vnnnsu67ouP8+GDRsunePChQtx4cKFOHPmTOzdu3fIMUeOHMkpIPAv//IvL52jrq4u2traore399I5Pvjgg9i9e/cV52hpaSnI3Hd2dsa6deuGPFdXVxfHjx+/VEdvb28cP348tm7deqlNOp3OOdBxqstkMnH//fcPCaKrq6uLM2fOxIULF+Lw4cNx4cKF+P3vf3/Fe2vLli1Zv7eefvrpePjhhy/1f/k1//3vfx9tbW1D+j5y5Eg88cQT0dzcHFu2bBly3OXvx7a2tisC83bs2DFqLX19fVdc/w0bNsQHH3wQFy5ciObm5kvvgQ+/19etWxft7e1ZjXn9+vWXak+lUtHW1nbpHBff5x/uv62t7YqQw+uuuy7OnDkz5M+HgyE//PrFP8MFN2YymSFBkKlUKl588cX44IMPoqurK1pbW+P3v//9FT/rF0MYhRACAPk61ZNdEHkucgkevKi0pCzuuXH4e8fW9L7oPFuYzx+F0tH90ohzt7b62azXMSImPojwg76Oos0TAAAAAAAAAAAAAExlAggBAAAAAAAAAAAA4J+9999eL3ifn77+6zkFD17uvlv2DPt8b386jp5pmvT5GUnn2ZZoTe8b9rVcNyu+XOXVtXHHokcKXu9EXGcAYHZ6++23hzy++eabi1LHxTC2VCoVx48fj9bW1mhoaLj0p7q6+lLbX/7yl0OCxLZu3RoPPfRQVFdXR0nJ0Pu2lStXxqlTp4Y8t27duujr68uqrovn2bt3b+zcufOKc1RWVkZDQ0N88MEHQ4Lfjhw5Ep2dnVmd42LY3datW+OnP/1pVFdXR1nZv4SElJeXx0MPPRTHjx8fctzq1asLEv63fv36IY+3bt0ahw8fjtra2kt1lJWVRW1tbWzevHlIHW1tbdHUNHXu6/P13HPPDQnC3L17dxw+fDgqKyuHtCspKbn03rr8um/atCmr81x8Xw13zUtKSqK6uvqKvh9++OFLQYEbNmy4dNzl78fq6up44403hhy3ZcuWUd+LH77+x48fj507d0Z5efmQ58vKyi691y8PR/zrv/7rnMf8xhtvRHV19ZBzlJeXR0NDQ5w5c2bIcZs2bRryPi8pKYnKysohfz5c64dfH6ldRMTPfvazIY+/973vxcqVK4e0vXjOhoaGIe//dDodhw8fzmr8AADD6TnfOSH95hI8eLmlFQ2RTKSGfe2Z1tUxMDg1wscHBjPxoze/NuxrNcn6qJhfnWOPf7BgXmXc9bHCf74Zae0BAAAAAAAAAAAAAGY7AYQAAAAAAAAAAAAA8M/OnD1W8D4/6OsY97EL5lXGisVbh33t8OktE7bBci4GBjPxTOvqYV/LZ7Pii979r78seM0TcZ0BAIotmUzGiRMnora2dtR2tbW10dvbG1u3bo3du3fH5s2bR21fVlYWe/fuHfJcd3d31nVt3bo1GhoaRm1TXl4ezz///JDnfvjDH2Z9jvr6+ti8efMVAYofHnd9ff2lx+l0Ot57770cZ3molpaWIWGOGzZsGHM+a2trY+vWrZfCIsdqn6ujR48OCZ8c688TTzxRkPP29fUNCRCsq6uLhx56aNRjysrKhlz3dDodLS0tWZ0vmUyOes3Lysrif/1f/9dhj9uxY8eIx5WUlFxx3IkTJ4Zt29nZGfv2/UsYytatW8f8+SsvL48dO3Zcerxr166sAz1TqdSY7/PKysrYuvVfPkOm0+n41a9+lVX/4/Htb397SH3Z/P45fvx47N27N3p7e8f83QAAMJoPet+akH57+7P/vPNhDyx9ftjne/vT8ep7T03KvIzl6Jmm6O1PD/va6pv3FLu8YeVzTQAAAAAAAAAAAABgpirJvwsAAAAAAAAAAAAAmBnSvf/fgvf5fu+beR1/56LGeOXdJ4fdEPjQbxqjIdU8afMznFffe2rabVY8EdcZACAX27Zti46OsYOqb7vttjFD3C76/ve/H2VlZVm1LSsryyn47rbbbhvy+K233orKysqsjr08lG40lZWVUV9ffynQbcuWLbFp06asxtTU1JTVOb797W8PCYzLZRzD+au/+qshj7/1rW9lddzmzZsLHjx4UTqdHjLGsXz42o7X3/3d30U6/S+fC/bsye6zQGVlZdTV1V0Kcvyrv/qrMUPsImJIiN9IPve5zw173GgBfsMd19PTM2y7F1544dLfk8lkNDY2ZjXmNWvWxLp16y49fvrpp7P6OX/22Wez6n/Tpk2xZcuWS4/b29ujujq/YPhs3HHHHVm1q62tzeoaAwCM5XzmtxPSb/9AX0SUj+vYBfMqY8XirXH49JYrXjvY8XDUJP99JErH13ch9PZ3D1tbRMTa6r1RWpLdZ8rJls81AQAAAAAAAAAAAICZak6xCwAAAAAAAAAAAACAqWLxgjsL3mf1tffldfzcOSXxpVu+P+xrrel90Xm2ZVLmZji9/d1xsOPhYV8r1GbF1//Jpwpe90RcZwCAiIjy8uwCEbZs2RL79u0b88+JEyey6i+VSsXKlSsnbFwfDun7h3/4h6yOq6+vzzoUMeIPAYGX6+7uHvOYurq6rEMEb7rppiGPf/vb3+Y1L2+++S9h46lUKq8ww2JZsGBBQfp5++23hzzOZS7uvffeS3/PNjxxzZo1Y7YZLmjw8nONdlwymbz0eKSfw8ufv/POO8cMNry8//r6+jH7v1wymcw6RPDDP3OnTp3K6rjxuOWWWy79fdeuXdHX1zdh5wIA+LBkYmJClhfMq8zr+DsXNUaiNDnsawc7Nk70tIxqpPMnE6lIXTv2PfZYEn80MSGBf/KvrpvQeQEAAAAAAAAAAACA6UgAIQAAAAAAAAAAAAD8s5vK7yl4n0sW/Nu8+6gqXxlLFtQN+9ozratjYDAz4XMznJE2K06UJguyWXFExH/574UPy5iI6wwAEJFdYN5EBHRdHgJWKH19fdHZ2RktLS3R3Nw85LVsgxFvu+22nM45f/78IY//8R//ccxjsg19jLgykO6FF14Y9/xkMploa2u79PiRRx4Zd1+FVFdXF2fOnMn6TzaBfNm4fC4vD9fLxodDEDOZsT/fZBv2V1c39HNUtoGYd945dmj50aNHL/091/f65S4PssynnstdHqDY0dEx7trGcv/99w95fNttt8VLL72U1TUEAHL3u9/9Ln73u98Vu4wp46Pz/qzgfdYkc7uXHc7cOSXxpVu+P+xrrel90Xm2ZcLnZjidZ1uiNT184Pfa6mdj7pzs7rFH0/v7sT8T5yqZSBWkNgAAAAAAAAAAAACYafwrWwAAAAAAAAAAAAD4Zzd8ZPyhESM5+7u3ozJq8+6nPtUcj/3imiue7+1Px6vvPRW1Cx+alDm6aLTNir9ccyDvDYF7+7tjX1tDnOo5UvDak4nqSZkjAICR7N27d8TXtm/fPiTYLhv5hJ91d3fHa6+9Fv/wD/8QJ06ciO7u7jhypDD3YB8OlhtLZWXlkMdvv/121NaOfi99zz3FCZd+7733inLesZSXl18xj5Ph8hC9o0ePRkNDw7iOjfjD3I42hg+HCo41HxelUqmCjTeTyUQ6nb70eM+ePVkHc16co4uy+XmvqqrKqb4777wz9u3bl9Mx4/G5z30uUqnUpTG0tbXF3XffHRF/CEG88847o7y8PD71qU/FRz7ykfjMZz6TdQgkAHCl119/PVatWhUbN26MLVu2FLucoistKYtEaTJ6+9P5d3aZgcFM3t9vV5WvjCUL6ob9fvuZ1tXRuPzdSQ3VGxjMxDOtq4d9rSZZHxXz8/vOfGAwE6++91Qc7Hi44LUvXnDHZEwRAAAAAAAAAAAAAEw7AggBAAAAAAAAAAAA4J/9yb+6ruAbFu9vXxev/+PTUZ9qjkRp+bj7SZSWx6qq3cNu4Huw4+GoSf77vPrPxVibFVdenV/g4smu5tjfvm5Cak+UJuOj8/5swucIAJgdPvKRjwx5fO7cuTGPKSsrGzWc7YUXXsg5gPDP/iz3+5uWlpZYvXr1kBC1iZ6fmay6enaHXF/+nk2n0xMafnd5qGAubrnlloLV8OEAyra2tpx/bnOxZMmSCes7HyUlJXHkyJFoaGi4Irh0pPdBKpWKZ599dtb/zADAeJ09eza+853vxP/xf/wfsXXr1vjKV75S7JKK6tPXfz0Ony5cGGNrel+c7jkaX7rl+1FVvjKvvu67ZU9sP7boiud7+9Px6ntPRe3ChyZtnl5976kR1z1W37wnr757znfGD07eG+neibkf/vOPfn7C5wcAAAAAAAAAAAAApqM5xS4AAAAAAAAAAAAAAKaKuXNK4ss1Bwre76meI/HYL66Jk13NefVz63UPRqI0OexrBzs2TsocRYy+WfGqqp3j7re3vzv2vL5iwsIHIyK+dMv3o7SkbMLnCACYHW6++eYhj//2b/92StQxlo0bN8ayZctGDB9MpVJRX18fW7dujb179447WO23v/1tXuP65S9/OSHzNRHmz59f7BKgKMrLy+Pw4cPx4osvRn19/Zjt29raIpVKxbZt24pdOgBMa52dnfHAAw/EHXfcEcePHy92OUVz56LGEb8zH6/e/nQ8ffLuaG5riP5M37j7WTCvMlZV7R72tYMdD0dvf/ekzFFvf3cc7Hh42NfWVu8d9/flA4OZaHnnidh+bNGEhQ/WJOvzDoIEAAAAAAAAAAAAgJlKACEAAAAAAAAAAAAAXKby6tqoXbhhQvre374u9ry+InrOd47r+NECElvT+6LzbMuEz89omxWvqtodidLycfV7sqs5HvvFNXGq58iE1W6zYgCg0K677rohj0+cOFHsksbU3Nwcu3btGvLchg0b4vjx43HmzJm4cOFCtLa2RnNzc2zevDkaGhqiurp6Umrr7Owc8vhTn/pUsacra+fOnSt2CVPGhg0b4sKFC+P+U1lZWewh5Gzv3r15jXkmWLlyZTQ3N8eFCxfizJkzcebMmXjxxRdj9+7dUV9fH8nk0GCgLVu2xEsvvVTssgFgWjl//vwVz/3t3/5t3H777XH//ffHBx98UOwSJ93cOSXxHz7+swnpuzW9L7YfXxId3eO/Z7n1ugdHDEg82LFxUuZopPMkE6lIXbtmXH32nO+MXa9+fMS1gkJIlCZj9c17JmWOAAAAAAAAAAAAAGA6EkAIAAAAAAAAAAAAAB9y95/vGHFT4Hyd6jkS248tipZ3noiBwUzOx1deXRs1yfphX3umdfW4+szFSJsVJ0qTcet1D+bcX8/5znj8RE3sb183artkIpVXMKTNigGAiVBSUhJ1dXWXHu/bt++KEL2pZt26f7nvSiaT0dvbGzt37oza2tqCB7+98MILeR1/ww03FGOKxqW9vb3YJRTV5T8H3d3dxS5nwk3HkMTJVFlZGZWVlbFy5cp46KGHorm5OU6dOhVbt24d0u7uu+8udqkAMK389re/HfG1vXv3xrXXXhv/8//8P8fvfve7Ypc6qSrmV8eqqt0T0ndvfzqePnl37Hl9RfT2536fO3dOSXy55sCwr7Wm90Xn2ZYJnZvOsy3Rmt437Gtrq5+NuXNKcupvYDATBzs2xvZjiyLd2zZq21VVu/NaZ/lyzYEoLSmb0PkBAAAAAAAAAAAAgOlMACEAAAAAAAAAAAAAfMjcOSXRuPzdcQXe1STrY2313jHbHex4OHa9+vHoOd+Z8zlGCtLr7U/Hq+89NWHz0nWufcTNir9ccyCnzYoHBjPR8s4TWW9UvOHWN2JV1c74+ieP57xpce3CDdG4/F2bFQMAE+Jb3/rWkMeNjY3FLmlEHw5H/F/+l/8lysrGvkfq6+sb1/mOHj2aU/sf/vCHQx7/6Z/+6eROUA4+HEB36tSpYpdUVDfffPOlv+d63aerVCp16e/5hm3OBmVlZbF58+YrQghnQ2AlAEym/+1/+9/i3/ybf3PFf3NnutqFD8VXl76Y83fHidJkfHXpi5FMpEZtd6rnSDz2i2viZFdzzrVVXl0bNcn6YV97pnV1DAxmJmROBgYz8Uzr6mFfq0nWR8X86pz66zrXHk0vXx8t7+watd2SBXXx6B0fRO3Ch+KRZadiyYK6LM/wB8lEKh65/UxUXl07IfMCAAAAAAAAAAAAADOFAEIAAAAAAAAAAAAAGMbcOSWxqmpnfPPTbVltWpxMpOKbn26LhlRzLK1oiEfv+GDMjXXTvW2x/diiOHJ6W06bDJeWlI0Ycniw4+Ho7S98gMPAYCb2t98/7Gs1yfqcNgPuOd8Zu179eBzseHjMOX3k9jNRu/ChS+GGlVfXxrdua8tq0+JEaTK++em2WFW1M6dwRACAXHzmM58Z8njfvn3R0tJS7LKG9dZbbw15fM8992R13I4dO8Z1vnQ6nfVcZDKZePLJJ4c8d9111xVhlrJXX/8vISJPPvnkuIMaZ4I1a9Zc+ns6nb4i7HImuu+++y79/ejRo7P2+mcymZzG/sUvfnHI43Q6XewhAMCMc/bs2fjOd74TixYtuiLkeyarKl8Zjyw7NWLY34etrd4bjcvfjarylbHh1jdiVdXuMY/Z374u9ry+InrOd+ZU26qqncM+39ufjlffe2pC5uPV956K3v7h77VW37wn634GBjNxsGNjfPeV1Ij9XbS2em+s/8ThSJSWR8Qf1jLWf+JwrFicXSDmqqrdseHWN2LBvMoJmRMAAAAAAAAAAAAAmEnsogEAAAAAAAAAAAAAo6iYXx2P3tEVPec744Pet+K9//Z6nDl7LMpKy+Oasqr46L9eEjd85Lb4k3913ZCQu0Rpeaz/xOE42dUcL/x606gb8x4+vSVeeffJ+A8f/1lUzK/Oqq7UtWviF2e2R7q37YrXDnZsjIZUc0Hnoe3954Y9V8TImyd/2MBgJl5976kxgwf/0OfuuPW6B4cNDrw4t/2Zvvgv5/8h/uHs38bbvz0Rff3dsejq2+O6/9cn4prEzTYpBgAmRVlZWezevTsefvhf7nFWr14dr7zySlRWVha7vCGuv/76IY9PnDgxZo19fX2xZcuWcZ/zO9/5Thw+fHjMdj/72c+GBJHV19dHScnU/r+/NTU1xb59+yLiDyFqO3bsiM2bN495XEtLS/zVX/1VfPvb347q6uzu/6e6T33qU5FMJi9dw/Xr12d13SMinnjiiVi6dGnU1mYfaj4VbNq06dLPRi7XP5PJRFNTU3zlK1+ZEr8j7rnnnkvv44iI7u7uKC8vz2oczz33XGzatCmuueaaeOONN7L6mX333XeHPJ4/f36xpwDIQWdnZ5w4cSJ6enrixIkTxS4HZpWdO7P7DvZynZ2d8cADD8T//r//7/Gf/tN/imXLlhV7GBOutKQsGlLNsapqZ/z/+v4+/vHcyXj7tyfi/d43Y/GCO+L6P/lUJBPV8dF5fxalJWWXjps7pyRqFz4UN5XfEz84ee+I34VHRJzqORLbjy0a9TvsD0uUlseqqt3Dfjd+sOPhqEn++0uhfYXQ29894vfwa6v3Dhn7aLrOtcdfv/G5MYMHlyyoi/pU84hjqFu8Oe5c1Bj/9f95L97+7Yl497/+Mk73/CKuTdwSN5XfM+w1AQAAAAAAAAAAAABGN7X/H5gAAAAAAAAAAAAAMEUsmFcZC+ZVRlX5ypyOW1rRELeU3xsH3lofrel9I7br7U/Hd19JRe3CDXH3n+8Yc9PiuXNKYm31s/HdV1JXvNaa3he3Xf8XUXl1YQI8+jN9sb993bCvrarandXGyD3nO8fcuDli7I2KL1daUhYV86ujYn511C58qCBjBQAYjwcffDD+8i//8lL4WjqdjkWLFsWGDRtix44dWYVy9fX1xfPPPx9Hjx6dsDr/7M/+bMjjTZs2RUNDw4jtu7u7o66uLq9zHjlyJBoaGuKHP/zhiPPQ0tISd99995DnmpqaJmweCqWysjLq6+svhbdt2bIllixZMuqctre3Xwp+2bdvX9TV1WUd1DeVlZSUxI4dO2Lduj98bjhy5Ehs27YtGhsbR33/b9u27VKIX319fezcuTOr8LupoKys7Irr/4lPfCJWrhz5M2Mmk4kvfOELceTIkdiyZUts3bp1zDmaaB/5yEeGPP4//8//Mx56aOzPV0899dSl4NV0Oh1f+MIX4qc//emYY/n2t7895PFUCGEERnbx/uTpp5+OI0eOFLscmNXyuT/+27/927j99ttj3bp18ehffrPYQ5kUidLySJSWR+XVtTl9d7xgXmV867bWONnVPOJ34hcd7Hg4/q/39sQDS5+PBfMqx+z71usejP/rvT3Dfkd+sGNjNKSaCzb+gx0bh30+mUhF6to1Yx4/MJiJF/9+U7S8s2vUdonSZHzplu9ntW4yd07JpXWWpRUNY7YHAAAAAAAAAAAAAEYngBAAAAAAAAAAAAAAJlhpSVk0pJrjf6q4P3705teitz89YtuWd3ZFa/q5rDbtrZhfHTXJ+mGDDZ9pXR2Ny98dM8gwGwfeWj/s84nSZNx63YOjHjswmIlX33sqDnY8POZ51lbvtfEwADAtlZSURFtbW6RSqUshhBERu3btiueeey7WrFkTn/rUp+KGG26IP/3TP730+rlz56K9vT1++ctfxq5du8Zz6pyUlZVFMpkcEpS4cePGWLNmTfyP/+P/GGVlZRER0dnZGSdOnLgUJpdMJuOaa66Jtra2nM538Vz79u2L7u7u+Na3vhU333xzVFZWRl9fX/zDP/xD/O3f/u2lELOLNmzYMG1CyZqami4F0EVErFu3Lp5++un4zne+E3/6p396aax/93d/F//5P//nePLJJ4fMT3Nz4UJGIiLefPPNcfd5ww03RG3t+EPM16xZE5s2bbr0/tqyZUv8+Mc/jmeffTaSyeSlYMHu7u74+7//+3juueeGvO+7u7vj6quvLuh8TLQPX/+777476uvro6mpKcrLy4f8TL311lvx+OOPXxHgVczwwYiIz3zmM0MeP/zww/H8889f+nm93HXXXXep3gcffDD27Nlz6ffCkSNH4gtf+EJ85zvfGfL75KLu7u74T//pPw35PZJKpYo6dmBknZ2d8fjjj0/K/Qkwefbu3Rsdf/9m/Nv/VOxKpr6lFQ3xsY+uiH1tDXGqZ+QA1nRvW2w/tihqF26Iu/98x6jfx8+dUxJrq5+N775y5T1Qa3pf3Lno21Exvzrv2jvPtgy7ZhAR8cWbvjfmmkHXufb46zc+N+o6RkRETbI+Vt+8J0pLygIAAAAAAAAAAAAAmHwCCAEAAAAAAAAAAABgklSVr4xHlp2KQ6cao+WdkTdw7+1Px9Mn785qA9/VN++J0z1Hr9gMuLc/Ha++91TULnwor5q7zrWPuFnxl2sOjLpZcc/5zvjByXsj3Tt6UM2SBXVRn2qORGl5weYaAGCylZeXDxtCmE6nxxXek0qloqmpqeB1/uxnPxsS+rVr165L9aVSqStCBpPJZLS1tcXGjRtzDiD82c9+Fv/xP/7HOHLkyKU/Y6mrq5uQcU+UysrKOH78eKxevfrSdc9mrBfn9WIoX6G0tbVdCo7MVX19fV4BhBeDOOvq6i69Vy7+TIylrq4ufvrTnxY9jC9Xw13/ffv2DQklHMnWrVtj8+bNxR5ClJWVxe7du4cEgY70Hj5z5sylcNCSkpI4cuTIkN95Hz4umUxGRAz5nXj5a9n8TgAmV19fX6xfvz6r32PA9HL11VfHnj174s6VH4/txxYVu5xpIVFaHus/cThOdjXHC7/eNGogX8s7u6I1/Vz8h4//bNQQwYr51VGTrB/2O/f97ffHhlvfGDMgcDQDg5l4pnX1sK/VJOuj8uraUY998e83jbp28Yd5ScaXbvl+VJWvLNhcAwAAAAAAAAAAAAC5m17/bzwAAAAAAAAAAAAAmOZKS8piVdXO+OSf/of46zc+N+qmxa3pfXG65+iom/mWlpTFPTfuiP3tV4aMHOx4OGqS/37cwX4Dg5nY337/sK+NtlnxwGAmXn3vqTjY8XCMZW313lha0VDweZ5N/qd/sy4i1kV1dXW0t7cXuxyYERYvXhybN2+Or3zlK8UuBZhmysvL4913343nnntu3CFwdXV18a1vfStWrpyYMIfq6uorwsYuGil8cLwhefPnz4+f/vSn8YUvfCGroLGtW7dGY2PjtAuhq62tjba2tmhoaMg6UO2VV14pePjgVFBeXh5vvPFGfOUrX8k6vGrDhg2xY8eOaXfdL7p4/S8PXhzLVAkfvOjBBx+Mnp6e2LJlS07HlZeXx6lTp+Lf/bt/N+x7f7jgwYsOHDgwI38GYDp76aWX4mtf+9qoP7upVCruuOOO+NSnPhXV1dUxf/78YpcNs8Z1110Xr7322riO/fznPx9/8zd/E3/8x38cPec7iz2UaWdpRUPcUn5vHHhr/bDBgRf19qfju6+konbhhrhrSVOUlpQN2271zXuG7Sfd2xZt7z+X1/flr7731IhrDquqdo54XNe59jHXKyL+sC6w+uY9I44NAAAAAAAAAAAAAJg80/P/kQcAAAAAAAAAAAAA01zF/OpoXP5uvPj3m6LlnV0jtuvtT8fTJ++OJQvqoj7VPGyY4NKKhvjFme2R7r0y7OJgx8ZoSDWPq8a2958bts+IkTcr7jnfGT84ee+Ix1002ngYn0QiUewSYMY4ffp0PPDAA7Ft27bYvHlzLF++PCIiKisri10aMA2UlJREQ0ND3HvvvfF3f/d38dxzz8Vzzz03YphPMpmMNWvWxKc+9alYsWJFVoFcZWVlUV9fP+RxLh566KH46le/Gjt27Ignn3zyitpSqVQ88sgjce+9917q+7bbbrv0+uV/z2Y+fvrTn8bPfvazePzxx68IKauvr4/bbrstPvOZz0R1dXVWfV4+9htuuCGnsV9+7Ejj+PD8ZnOO8vLyS+N8/fXX49ixY1eMdbh5LYRcrsd4+sn12peUlERzc3P8xV/8RZw8eTJOnDhxRRhhMpmMr3/96/HFL34xq+s+3vffZB13MXhxtOuf65jzeZ+P55pt3rw5vv71r8fhw4fjhRdeGLbdcO/bsrKyOHz4cLS3t8dPfvKTYX+nXFRXVxff+c534lOf+tS0DZyEmWrjxo2xa9fw309N1H+/gIl39dVXx549e+K+++4rdinTXmlJWTSkmuN/qrg/fvTm10YN6mt5Z1e0pp+LL93y/agqXzlsX2ur98b+9itD6/e3r4tbyu8dV8Bff6YvDnY8POxrq6p2D/td/MBgZsw1ioiIRGlyxPEAAAAAAAAAAAAAAMVx1YULFy4UuwgAAAAAAAAAAMjGVVddNeSxf/oCAFNDc1tDtKb3XfH89s/5b3W2sg3ti4hYW703llY0DNvH9mOLhj3m6588HpVX1+ZUU3+mLx79+fCBdquqdkftwoeGPDcwmImjZ5ri8Okt4x4DoxvpGv9/Pv+H//30pz8dr7zySrHLhBnt05/+dPzH//gfY/Xq1cUuBZimMplMvPfeexEx9UJNu7u741//63+dV7BQZ2dnLFr0L/crZ86cGXacfX198d//+3/PKmxxuuvs7IzrrrtO2FoU5j023czm63/x9115efmsuuYwHW3bti22bLny+5xUKhXPPvts1gHBwMT70Y9+FGvWrMmq7ec///n4m7/5m/jjP/7jIc+P9B3jI7efiQXzKos9xGkh29C+iIiaZH2svnnPsIGCj5+oGXZNoCZZHw2p5pzrGmmtJlGajMbl78bcOUPvSTu6XxozTHGsMTA662cAMLEu//ek/i0pAAAAAAAAAACz0ZxiFwAAAAAAAAAAAAAAs92CeZWx4dY3YlXV7jHb7m9fF3teXxE95zuv6KN24YZhj3mmdXUMDGZyqunAW+uHfT5Rmoxbr3twyHNd59qj6eXrxwwfXLKgLh694wPhgxOkt7e32CXAjPfKK6/El770pbjtttvi0KFDxS4HmIZKSkqisrJyyoUPRsSkhoSVlZXNivDBiD8ETc7G8LnhzMYgutl8/S/+vptt1xymm5HCB/fu3Rutra3CB2Eauvrqq+PAgQNx6NChK8IHKYy5c0piVdXO+Oan2yJRmhy1bWt6X2w/viROdl0ZKPjA0udHPKbrXHtONXWdax826C4i4ss1B4aED/Zn+qK5rSGePnn3qOGDidJkfHXpi9GQahY+CAAAAAAAAAAAAABTkABCAAAAAAAAAAAAAJgC5s4pidqFD8Ujt5+JJQvqRm17qudIbD+2KFreeWJIsOBdS5qG3fC4tz8dr773VNa1ZLtZ8cBgJg52bIzvvpIadaPiiIi11Xtj/ScOR6J0dgTNTKb/+5/2xoULF6KtrS0uXLjgjz/+FODPN7/5zVF/7l555ZX4whe+ED/84Q+L/SsAAABgXFpaWq4IH0wmk/HBBx9EQ0NDscsDxuHzn/98/NM//VPcd999xS5lVqiYXx2Ny9+NFYu3jtqutz8d+9vXxZ7XV0Rvf/el5xfMq4zahRuGPWZ/+/1DvvsfzcBgJva33z/sazXJ+qi8uvbS447ul2L78SUjfv9/+XGPLDsVVeUrizK3AAAAAAAAAAAAAMDYBBACAAAAAAAAAAAAwBSyYF5lrP/E4VhbvXfMtgc7Ho5dr348es53RkREaUlZfOmW74/Y9vLNjUeS7WbFXefao+nl66PlnV2j9rdkQV08escHsbTCxvXA9PH444+PGUIYEfHAAw8IIQQAAKad7u7uWLZs2ZDnkslktLW1RXl5ebHLA3J09dVXx4EDB+LQoUPxx3/8x8UuZ1aZO6ck6hZvjkduPxPJRGrUtqd6jsRjv7gmTnY1X3ruriVNkShNXtE23dsWbe8/l1UNbe8/F+netmFfW1W1MyIi+jN90dzWEE+fvDt6+9Mj9pUoTcZXl74YDanmKC0pK/b0AgAAAAAAAAAAAACjEEAIAAAAAAAAAAAAAFPQ0oqGePSOD2LJgrpR26V722L7sUVx5PS2GBjMRFX5yhGPOdixcczzjrVZ8cBgJg52bIzvvpIadaPiiIi11Xtj/ScOR6LUxvXA9PP444/HhQsX4sKFC3Hs2LGoqxv+d+s3v/nN+N3vflfscgEAALK2ceOV3xG98sorwgdhiquoqLjiuc9//vPxT//0T3HfffcVu7xZbcG8ythw6xuxqmr3mG33t6+Lx0/URM/5zigtKYt7btwxYrv+TN+offVn+mJ/+7phX1tVtTsSpeXR0f1SbD++JFrT+0btqyZZH48sOxVV5SuLPZ0AAAAAAAAAAAAAQBYEEAIAAAAAAAAAAADAFJUoLY/1nzgcX136YiRKk6O2PXx6SzS9fH10nWuP+27ZM2yb1vS+6DzbEv2Zvug61x4nu5rjYMfG6Oh+KXrOd465WfG5/ycdTS9fHy3v7Bq1liUL6uLROz6IpRUNxZ5CgIJYtmxZHD58OI4dOxaf+cxnhrx29uzZ2Lx5c7FLBAAAyEpnZ2fs2zc0hOrFF1+MysrKYpcG5ODqq6+OAwcOxKFDh+KP//iPi10OETF3TknULnwoHr3jg1iyoG7Utunetth+bFG0vPNEpK5dM2L7A2+tj4HBTPSc77z0ff7JruboOtceA4OZOPDW+mGPS5Qmoyb576O5rSGePnl39PanR6wlUZqMry59MRpSzVFaUlbsaQQAAAAAAAAAAAAAslRS7AIAAAAAAAAAAAAAgNFVla+MR5adigNvrY/W9L4R2/X2p+O7r6SiduGGqF24YdigwCdfW3bFc2MFCkZEvP3bE3Gw4+Ex262t3it4EJixli1bFkeOHInPfe5zcfTo0UvP//Vf/3Vs27bNhv8AAMCU98Mf/nDI41QqFStXrix2WUAOPv/5z8ff/M3f+B5iikqUlsf6TxyOk13Nsb993ahtD3Y8HP/Xe3vijkWPxKmeI1e83preN+qawEgWL7gzHj+RGjV4MCKiJlkfq2/eI3gQAAAAAAAAAAAAAKahOcUuAAAAAAAAAAAAAAAYW2lJWTSkmuOrS1+MRGly1LYt7+zKKlQwF2NtcrxkQV08escHwgeBGa+kpCR+9rOfxZ133nnpubNnz8Z9991X7NIAAABGlclk4sknnxzy3Pe+971ilwVk6aMf/WgcOHAgDh06JHxwGlha0RCP3vFB1CTrR22X7m0bM6gwV63pfaOGDyZKk/HVpS9GQ6pZ+CAAAAAAAAAAAAAATFMCCAEAAAAAAAAAAABgGqkqXxmNy9+N2oUbil3KJWur98b6TxyORGl5sUsBmBTDhRC+9NJLcffddxe7NICiqqysjAsXLlz6U1lZWeySAIDL/OpXv4p0+l8CqZLJZNTW1ha7LCBLN910U9x3333FLoMcJErLoyHVHF9d+mIkSpPFLiciImqS9fHIslNRVb6y2KUAAAAAAAAAAAAAAHkQQAgAAAAAAAAAAAAA08zcOSWxqmpnfPPTbUXdtLgmWR+P3vFBLK1oKPaUAEy6iyGEn/jEJy4999JLL8UPf/jDYpcGAAAwrPb29iGPv/71rxe7JIBZoap8ZTyy7FTUJOuLVkOiNBlf/+TxaEg1R2lJWbGnBAAAAAAAAAAAAADIkwBCAAAAAAAAAAAAAJimKuZXR+Pyd2NV1e5JPW+iNBlfXfpiNKSaI1FaXuxpACiakpKSqKioGPLctm3bil0WAADAsF544YUhj//tv/23xS4JYNYoLSmLhlRzfP2TxyNRmpzUc9cu3BCNy9+Nyqtriz0NAAAAAAAAAAAAAECBCCAEAAAAAAAAAAAAgGls7pySqF34UDxy+5lIJlITfr6aZH08suxUVJWvLPbQAaaExYsXD3l8+vTp+OEPf1jssgAAAK5w9OjRIY///M//vNglAcw6lVfXRuPyd6N24YYJP1eiNBnf/HRbrKraGXPnlBR76AAAAAAAAAAAAABAAQkgBAAAAAAAAAAAAIAZYMG8ythw6xuxqmr3hPSfKE3GV5e+GA2p5igtKSv2cAGmjMcffzzWrVs35Llt27YVuywAAIArpNPpIY/Ly8uLXRLArDR3TkmsqtoZ3/x0WyQTqQk5R+3CDdG4/N2omF9d7OECAAAAAAAAAAAAABNAACEAAAAAAAAAAAAAzBBz55RE7cKH4pufbit43zXJNVFVvrLYQwSYkp599tn4H/6H/+HS49OnT8fx48eLXRYAAAAAU1jF/OrYcOsbExJCuKpqZ8ydU1LsIQIAAAAAAAAAAAAAE0QAIQAAAAAAAAAAAADMMP9P5r8VvM/3e98q9rAAprT58+cXuwQAAAAAppm5c0oi3dtW8H57zncWe2gAAAAAAAAAAAAAwAQSQAgAAAAAAAAAAAAAM8w/njtZ8D5P9Rwp9rAAAAAAAGBG6e3vnpB+/9vv/rHYQwMAAAAAAAAAAAAAJpAAQgAAAAAAAAAAAACYYf7Lf//NhPQ7MJgp9tAAAAAAAGDG6B/om5B+z/7u7WIPDQAAAAAAAAAAAACYQAIIAQAAAAAAAAAAAGCGuf5PPlXwPhOlyZg7p6TYQwMAAAAAgBnjT/7VdRPS7w0fua3YQwMAAAAAAAAAAAAAJpAAQgAAAAAAAAAAAACYYSZiY+Ga5JpiDwsAAAAAAGaUuXNKIplIFbzfiQo2BAAAAAAAAAAAAACmBgGEAAAAAAAAAAAAAEyIgx0boz/TV+wyZqWJ2Fj4+j/5VLGHNav1nO+MH7+5vthlAAAAAAAz0A9O3htd59qLXcastXjBHQXtL5lIxdw5JcUe1qw1MJiJI6e3RWt6X7FLAQAAAAAAAAAAAGAGE0AIAAAAAAAAAAAAwIRoeWdXPPrzRJzsao6BwUyxy5lV5s4piZpkfUH7/NhHVxR7WLNSf6YvDnZsjO3HFsWpniPFLgcAAAAAmIHSvW3x3VdS0dzWEL393cUuZ9b5849+vqD9VV97X7GHNGud7GqOppevj8OntxS7FAAAAAAAAAAAAABmOAGEAAAAAAAAAAAAAEyo/e3rounl66PzbEuxS5lVVlXtLFhftQs3RKK0vNhDmlUGBjNxsqs5Hv15Ilre2VXscgAAAACAWaA1vS8e+8U1ceT0thgYzBS7nFmjqnxl1CTrC9JXojQZdy5qLPaQZp2uc+3x+Ima2N++Lnr708UuBwAAAAAAAAAAAIBZQAAhAAAAAAAAAAAAAHm5qfyeMdv09qfjydeWxZ7XV0TP+c5ilzwrJErLY2313rz7SSZScfef7yj2cGaVzrMt0fTy9bG/fd2YbROlyUgmqotdMgAAAAAwDST+qDySidSY7Q6f3hJNL18fJ7uai13yrLH65j2RKE3m3c9/+PjPYu6ckmIPZ9bo7e+O5raG+O4rqUj3to3ZfsXircUuGQAAAAAAAAAAAIAZQgAhAAAAAAAAAAAAAHlZWtEQj322N2qS9WO2PdVzJLYfWxQHOzZGf6av2KXPeEsrGmLJgrq8+nhg6fM2K54kPec7Y8/rK+LJ15ZFb396zParqnZH4/J3o2K+AEIAAAAAYGylJWWx4dY3Ym313jHD7nr707G/fV08fqImus61F7v0Ga+0pCy+XHMgrz5qF27wffEkGRjMxJHT2+KxX1wTrel9Y7avSdbHI7efibrFm4tdOgAAAAAAAAAAAAAzxFUXLly4UOwiAAAAAAAAAAAgG1ddddWQx/7pCwBMPT3nO+MHJ++NdG9bVu3XVu+N1LVrBNxNoIHBTLz495ui5Z1dOR2XTKTigaXPx4J5lcUewozXn+mLQ6cas75GNcn6WH3znigtKSt26cBlbrvttnjllVcuPT527FgsW7as2GUBAABcYq0NuFx/pi9efntHHD69Jav2Ncn6WFW1MxKl5cUufUbrOtcef/3G56K3P53TcWur98bSioZilz8rnOxqjhd+vSmra5RMpOKLN30vKq+uLXbZADDjXP4Z1+dbAAAAAAAAAABmIwGEAAAAAAAAAABMGzZFBYDpo6P7pfjRm1/LavPVRGkyvlxzwOarEyyXTYtrF26Iu/98h2DICTYwmIm295+L/e3rsmovFBKmNgGEAADAVGetDRhOz/nOOPSbxmhN78uq/YrFW+PORY2+P55AA4OZePHvN0XLO7vGbJtMpGL9J44IhpwEXefaY3/7/ZHubRuzbaI0GffcuCNS167xswIAE0QAIQAAAAAAAAAAs50AQgAAAAAAAAAApg2bogLA9DIwmIlX33sqDnY8nFX7JQvq4r5b9ghXm0ADg5l497/+Mv7x3Ml4+7cnLm0onShNRk1yTVz/J5+Kj310hY2KJ0Hn2ZZ4pnV11iGdX7rl+1FVvrLYZQOjEEAIAABMddbagNF0nm2Jn/zqGzmFqy2taCh22TNab393/Oa/HI53/+svozX93KXvk2uS9XHDR26LP52/NK7/k08JuJtgvf3dcbBjY04hnctv2BSlJWXFLh0AZjQBhAAAAAAAAAAAzHYCCAEAAAAAAAAAmDZsigoA01N/pi8OvLXexqxT1MBgxubEk6jnfGcc+k1j1j8Pq6p2x63XPegawTQggBAAAJjqrLUBYxkYzETb+8/FC7/edCnsbjTJRCoeWPp8LJhXWezSZwXf50+ugcFMvPreU3Gw4+Gs2tck6+OujzX5eQCASSKAEAAAAAAAAACA2U4AIQAAAAAAAAAA04ZNUQFgeus53xk/OHlvpHvbxmybKE3GPTfuiNS1a2ymy4zQn+mLl9/eEYdPb8mqfU2yPlbfvEcQJ0wjAggBAICpzlobkC3fZzLbdXS/FD9682tZB3F+8abvReXVtcUuGwBmFQGEAAAAAAAAAADMdgIIAQAAAAAAAACYNmyKCgAzg01bmU0GBjPR9v5z8cKvN2X9nn9g6fOxYF5lsUsHciSAEAAAmOqstQG56jnfGYd+0xit6X1ZtV9VtTtuve7BmDunpNilw7j0nO+MH5y8N9K9bWO2TZQm454bd0Tq2jXe8wBQBAIIAQAAAAAAAACY7QQQAgAAAAAAAAAwbdgUFQBmjoHBTLz63lNxsOPhrNrXJOvjro81CWVjWuk82xI/+dU3st6o+Eu3fD+qylcWu2xgnAQQAgAAU521NmC8fNfJTNef6YsDb63POmxzxeKtsfyGTVFaUlbs0gFg1hJACAAAAAAAAADAbCeAEAAAAAAAAACAacOmqAAw89jQlZmo53xnHPpNY9bv61VVu+PW6x6MuXNKil06kAcBhAAAwFRnrQ3Ix8BgJtrefy5e+PWm6O1Pj9k+mUjFA0ufjwXzKotdOoxoYDATr773VBzseDir9jXJ+rjrY03e1wAwBQggBAAAAAAAAABgthNACAAAAAAAAADAtGFTVACYuXrOd8YPTt4b6d62MdsmSpNxz407InXtGoFtTCn9mb54+e0dcfj0lqza1yTrY/XNewRqwgwhgBAAAJjqrLUBheB7UGaKju6X4kdvfi3rQM0v3vS9qLy6tthlAwD/TAAhAAAAAAAAAACz3ZxiFwAAAAAAAAAAAADA9Nbc1hAnu5pjYDAz7j4WzKuMb93WGl9d+mIkSpOjtu3tT8f+9nWx69WPR+fZlmIPH2JgMBMnu5pj+/ElWW26nUyk4pHbz0RDqjmvTbf7M31xsGNjnOxqLvYUAAAAAADTQM/5zmhua4je/u5x91FaUhZ1izfHI7efiZpk/ZjtW9P74tGfJ6LlnSfyWkeAQuk53xmPn6iJp0/ePWb4YKI0GWur98aGW9/IO3zwZFdzPPaLimIPHwAAAAAAAAAAAIAZQgAhAAAAAAAAAAAAAHnb374uml6+Pu9AwKryldG4/N1YVbV7zLbp3rZ48rVl0dzWED3nO4s9BcxSnWdbYterH4/97euy2qj4q0tfjG/d1hoL5lWO+5wXAw//sGn3rmJPAQAAAAAwjbSm98Vjv7gmjpzellcg4IJ5ldGQao6vf/J4JBOpMdsf7Hg4ml6+Pjq6Xyr2FDBL9Wf6ormtIbYfWxTp3rYx269YvDUeWXYqllY0xNw5JeM+b9e59nj8RE1W6wgAAAAAAAAAAAAAkC0BhAAAAAAAAAAAAAAURG9/Op58bVnseX1FXoGAc+eURO3Ch+Kxz/ZGTbJ+zPat6X2x/diiOHJ6W/Rn+oo9DcwSPec7o7mtIZ58bVlWGxWvqtodjcvfjarylXmdt/NsSzS9fH3sb19X7CkAAAAAAKaxw6e3RNPL18fJrua8+qm8ujY23PpGrK3eG4nS5Khte/vT8fTJu+PxEzV5rSNALgYGM9HyzhPx6M8T0ZreN2b7mmR9PHL7mahbvDlKS8rGfd7e/u5obmuI776SymodAQAAAAAAAAAAAAByIYAQAAAAAAAAAAAAgILwZzGHAACAAElEQVQ61XMkth9bFAc7NuYVCFhaUhYNqeZ45PYzkUykxmx/+PSW2H58SZzsao6BwUyxp4EZqj/TF0dOb4vtxxZlvVHxY5/tjdqFD8XcOSXjPm/P+c7Y8/qKePK1ZdHbny72NAAAAAAAM0Bvfzr2t6+Lx0/URNe59nH3M3dOSSytaIhHlp2KFYu3jtk+3dsW248tiua2hrzWEWAsHd0vRdPL18fBjofHbJtMpOLrnzweDanmWDCvctznHBjMxJHT2+KxX1yT1ToCAAAAAAAAAAAAAIyHAEIAAAAAAAAAAAAAJkTLO7vi0Z8n8g4EXDCvMr51W2t8demLkShNjtr24mbJu179eHSebSn2FDCDDAxm4mRXc2w/viQOn94yZvtkIhWP3H4mGlLNUVpSNu7z9mf64mDHxth+bFGc6jlS7GkAAAAAAGagdG9bfPeVVDS3NURvf/e4+yktKYu6xZvjkdvPRE2yfsz2rel98ejPE9HyzhN5rSPAh/Wc74zHT9TE0yfvjt7+9KhtE6XJWFu9Nzbc+kZUXl2b13lPdjVH08vXZ7WOAAAAAAAAAAAAAAD5EEAIAAAAAAAAAAAAwITa374uml6+Pu9AwKryldG4/N1YVbV7zLbp3rZ48rVl0dzWED3nO4s9BUxznWdbYterH4/97euy2qj4q0tfjG/d1hoL5lWO+5wXAw//sPn2rmJPAQAAAAAwC7Sm98Vjv7gmjpzellcg4IJ5ldGQao6vf/J4JBOpMdsf7Hg4ml6+Pjq6Xyr2FDDN9Wf6ormtIbYfWxTp3rYx269YvDUeWXYqllY0xNw5JeM+b9e59nj8RE1W6wgAAAAAAAAAAAAAUAgCCAEAAAAAAAAAAACYcL396XjytWWx5/UVeQUCzp1TErULH4rHPtsbNcn6Mdu3pvfF9mOL4sjpbdGf6Sv2NDDN9JzvjOa2hnjytWVZbVS8qmp3NC5/N6rKV+Z13s6zLdH08vWxv31dsacAAAAAAJiFDp/eEk0vXx8nu5rz6qfy6trYcOsbsbZ6byRKk6O27e1Px9Mn747HT9TktY7A7DQwmImWd56IR3+eiNb0vjHb1yTr45Hbz0Td4s1RWlI27vP29ndHc1tDfPeVVFbrCAAAAAAAAAAAAABQKAIIAQAAAAAAAAAAAJg0p3qOxPZji+Jgx8a8AgFLS8qiIdUcj9x+JpKJ1JjtD5/eEtuPL4mTXc0xMJgp9jQwxfVn+uLI6W2x/diirDcqfuyzvVG78KGYO6dk3OftOd8Ze15fEU++tix6+9PFngYAAAAAYBbr7U/H/vZ18fiJmug61z7ufubOKYmlFQ3xyLJTsWLx1jHbp3vbYvuxRdHc1pDXOgKzR0f3S9H08vVxsOPhMdsmE6n4+iePR0OqORbMqxz3OQcGM3Hk9LZ47BfXZLWOAAAAAAAAAAAAAACFJoAQAAAAAAAAAAAAgEnX8s6uePTnibwDARfMq4xv3dYaX136YiRKk6O2vbhZ8q5XPx6dZ1uKPQVMQQODmTjZ1Rzbjy+Jw6e3jNk+mUjFI7efiYZUc5SWlI37vP2ZvjjYsTG2H1sUp3qOFHsaAAAAAAAuSfe2xXdfSUVzW0P09nePu5/SkrKoW7w5Hrn9TNQk68ds35reF4/+PBEt7zyR1zoCM1fP+c54/ERNPH3y7ujtT4/aNlGajLXVe2PDrW9E5dW1eZ33ZFdzNL18fVbrCAAAAAAAAAAAAAAwUQQQAgAAAAAAAAAAAFA0+9vXRdPL1+cdCFhVvjIal78bq6p2j9k23dsWT762LJrbGqLnfGexp4ApovNsS+x69eOxv31dVhsVf3Xpi/Gt21pjwbzKcZ/zYuDhHzbR3lXsKQAAAAAAGFFrel889otr4sjpbXkFAi6YVxkNqeb4+iePRzKRGrP9wY6Ho+nl66Oj+6ViTwFTRH+mL5rbGmL7sUWR7m0bs/2KxVvjkWWnYmlFQ8ydUzLu83ada4/HT9RktY4AAAAAAAAAAAAAABNNACEAAAAAAAAAAAAARdXbn44nX1sWe15fkVcg4Nw5JVG78KF47LO9UZOsH7N9a3pfbD+2KO/Nkpneevu7o7mtIZ58bVlWGxWvqtodjcvfjarylXmdt/NsSzS9fH3sb19X7CkAAAAAAMja4dNbounl6+NkV3Ne/VReXRsbbn0j1lbvjURpctS2vf3pePrk3XmvIzC9DQxm4mRXczz680S0pveN2X7Jgrp45PYzUbd4c5SWlI37vBfXEb77SiqrdQQAAAAAAAAAAAAAmAwCCAEAAAAAAAAAAACYEk71HIntxxbFwY6N0Z/pG3c/pSVl0ZBqjm9+ui2SidSY7Qu1WTLTy8BgJo6c3haP/eKarDYqrknWx6N3fBC1Cx+KuXNKxn3envOdsef1FfHka8uitz9d7GkAAAAAAMhZb3869revi8dP1ETXufZx9zN3TkksrWiIR5aditqFG8ZsX6h1BKafzrMt0fTy9bG/fd2YbROlyfj6J4/H+k8cjgXzKsd9zlzXEQAAAAAAAAAAAABgMl114cKFC8UuAgAAAAAAAAAAsnHVVVcNeeyfvgDA1NDc1jAhG6+urd4bqWvX5BX2FhFxsqs5Xvj1pqzC3pKJVKytfjYq5ldP2HxNFb393dE/MHSD5tK5ZZEoLS92aROuGO+J/kxfHDrVGC3v7Cr4eNZW742lFQ0TNl9Adm677bZ45ZVXLj0+duxYLFu2rNhlAQAAXGKtDeg53xnbjy0qeL81yfpYVbUz7++Xe853xo/fXB+neo5k1b5Q6whTXX+mL3p/333F8/mE600XxXpP5LKOkKvtn/PfXwAohMs/4/p8CwAAAAAAAADAbCSAEAAAAAAAAACAacOmqAAwNU1UAGFERKI0GV+uORCVV9fm1c/AYCaOnmmKw6e3ZNW+UJslT2XDXbeaZH00pJqLXdqE6TrXHvvb7490b9uYbROlybjnxh15B/sNDGai7f3nYn/7ugkblwBCmBoEEAIAAFOdtTZgogIIL1qxeGvcuagx7/C3zrMt8Uzr6qzC3wq1jjCVnexqHvY75pkcZNef6YtDpxqj5Z1dWbWvXbgh7lrSFKUlZXmdN5d1hPGaydcNACaTAEIAAAAAAAAAAGa7OcUuAAAAAAAAAAAAAABG0tufjidfWxZ7Xl8RPec7x93P3DklUbd4czx6xwdRk6wfs31rel889otr4sjpbTEwmCn2NJCn3v7uaG5riO++kspq0+AVi7dG4/J38w716zzbEk0vXz+h4YMAAAAAAFPF4dNbounl6+NkV3Ne/VReXRuNy9+NtdV7x2xbqHUEpoaBwUyc7GqOR3+eyCp8cMmCunjk9jOxqmpnXuGDua4jAAAAAAAAAAAAAECxCSAEAAAAAAAAAAAAYMo71XMkth9bFAc7NkZ/pm/c/SRKy6Mh1Rzf/HRbJBOpMdsXarNkimNgMBNHTm+Lx35xTbSm943ZviZZH4/e8UHULd4cc+eUjPu8Pec7Y8/rK+LJ15ZFb3+62NMAAAAAADBpevvTsb99XTx+oia6zrWPu5+5c0piaUVDPPbZ3qhduGHM9oVaR6B4Os+2RNPL18f+9nVjtk2UJuPrnzwe6z9xOBbMqxz3OXNdRwAAAAAAAAAAAACAqUIAIQAAAAAAAAAAAADTRss7u+LRnyfiZFdzDAxmxt1Pxfzq+NZtrbG2em8kSpOjti3UZslMrpNdzdH08vVx+PSWMdsmE6n45qfboiHVHInS8nGfsz/TFwc7Nsb2Y4viVM+RYk8BAAAAAEDRpHvb4ruvpKK5rSF6+7vH3U9pSVmsqtoZj9x+JpYsqBuzfaHWEZg8Pec7Y8/rK+LJ15ZFb396zPZrq/dG4/J3o/Lq2rzOm8s6AgAAAAAAAAAAAABMNQIIAQAAAAAAAAAAAJh29revi6aXr4/Osy159bO0oiEal78bKxZvHbNtoTZLZmJ1nWuPx0/UxP72dWNuVJwoTcba6r3xrdtao2J+9bjPOTCYiZNdzfHozxPR8s6uYk8BAAAAAMCU0ZreF4/94po4cnpbXoGAC+ZVxvpPHI6vf/J4JEqTY7Yv1DoCE6c/0xcHOzbG9mOL4lTPkTHb1y7cEI99tjeWVjTE3Dkl4z5vLusIAAAAAAAAAAAAADBVCSAEAAAAAAAAAAAAYFrq7U/Hk68tiz2vr4ie853j7mfunJKoW7w5Hr3jg6hJ1o/ZvlCbJVNYvf3d0dzWEN99JRXp3rYx269YvDUal78bSysa8jpv59mWaHr5+tjfvq7YUwAAAAAAMGUdPr0lml6+Pk52NefVT+XVtdG4/N1YW713zLaFWkegsAYGM3Gyqzke/XkiWt7ZNWb7JQvq4pHbz8Sqqp1RWlI27vPmuo4AAAAAAAAAAAAAAFOZAEIAAAAAAAAAAAAAprVTPUdi+7FFcbBjY/Rn+sbdT6K0PBpSzfHNT7dFMpEas32hNksmPwODmThyels89otrojW9b8z2Ncn6ePSOD6Ju8eaYO6dk3OftOd8Ze15fEU++tix6+9PFngYAAAAAgCmvtz8d+9vXxeMnaqLrXPu4+5k7pySWVjTEY5/tjdqFG8ZsX6h1BPLXebYlml6+Pva3rxuzbaI0GV//5PFY/4nDsWBe5bjPmes6AgAAAAAAAAAAAABMBwIIAQAAAAAAAAAAAJgRWt7ZFY/+PBEnu5pjYDAz7n4q5lfHt25rjbXVeyNRmhy1baE2S2Z8TnY1R9PL18fh01vGbJtMpOKbn26LhlRzJErLx33O/kxfHOzYGNuPLYpTPUeKPQUAAAAAANNOurctvvtKKprbGqK3v3vc/ZSWlMWqqp3xyO1nYsmCujHbF2odgdz1nO+MPa+viCdfWxa9/ekx26+t3huNy9+Nyqtr8zpvLusIAAAAAAAAAAAAADCdCCAEAAAAAAAAAAAAIC83ld9T7BKG2N++Lppevj46z7bk1c/SioZoXP5urFi8dcy2hdosmex0nWuPx0/UxP72dWNuVJwoTcba6r3xrdtao2J+9bjPOTCYiZNdzfHozxPR8s6uYk/BkPElE+MfFwAAM9PF+1fBKgAAXK50blkkSpPFLuOS1vS+eOwX18SR09vyum9dMK8y1n/icHz9k8ezGl+h1hEYW3+mLw52bIztxxbFqZ4jY7avXbghHvtsbyytaIi5c0rGfd5c1hEmU02yvtglAAAAAAAAAAAAADBDXHXhwoULxS4CAAAAAAAAAACycdVVVw157J++AMDU0XO+Mw79pjFa0/uKXcoQSxbUxX237IkF8yrz6qe3vzsOdmzMenwrFm+NOxc15rU57kRrbmu4Yjw1yfpoSDUXu7QRFes6dJ5tiWdaV0+pTYovjm/5DZuitKSs2KUAEXHbbbfFK6+8cunxsWPHYtmyZcUuC4BZ6MP3r4nSZHy55kBUXl1b7NIAKDJrbUDEH8KqX33vqTjY8XCxSxkiUZqMe27cEUsrGvIeX9v7z8X+9nVZtS/UOsJEOtnVPOx4tn9u6v4eL9Z1yHUdYbIkE6l4YOnzU/p9BgDTzeWfcX2+BQAAAAAAAABgNhJACAAAAAAAAADAtGFTVACY+jrPtsRPfvWNSPe2FbuUIWoXboi7ljTlHdTWda499rffn9X4CrVZ8kSZTgGEA4OZOHqmKQ6f3pJV+5pkfayq2hmJ0vK8zttzvjN+/Ob6ONVzpNhTcMX47vpYk42KYYoRQAhAsY11/zodglUAmFjW2oDL9Wf64sBb66dkUNva6mejYn513uM7dKoxWt7ZlVX7Qq0jTITpFkD44VD00RQqMD3XdYTJkihNxpdu+X5Ula8sdikAMOMIIAQAAAAAAAAAYLYTQAgAAAAAAAAAwLRhU1QAmB4GBjPR9v5z8cKvN2W1uexkWlu9N1LXrom5c0ry6udkV3PW4yvUZsmFNl0CCIsx17luTD1ZkolUfPGm7+W9ETMwMQQQAlAsMylYBYCJZa0NGE7P+c74wcl7I93bVuxShqhJ1seqqp2RKC3Pe3yjBXV/WKHWEQppugQQFmuuc1lHmEyrqnbHrdc9OKXeSwAwkwggBAAAAAAAAABgthNACAAAAAAAAADAtGFTVACYXvozffHy2zvi8OktxS5liERpMr5ccyDvELeBwUwcPdOU9fgKtVlyoUz1AMKuc+2xv/3+rDa9TpQm454bd8TSioa8znkxPHO4jZyL6eL4ptqm18BQAggBmGz53r9OxWAVACaWtTZgNB3dL8WP3vzalAtxW7F4a9y5qDHv+9bOsy3xTOvqrMZXqHWEQpnqAYTFCkXPZR1hMtUk62P1zXuEvgPABBNACAAAAAAAAADAbCeAEAAAAAAAAACAacOmqAAwPfWc74xDv2m8Iuyu2JYsqIv7btkTC+ZV5tVPb393HOzYmPX4VlXtjluve7DoIR9TNYCwP9MXB95an/V8FmPz6cm0YvHWWH7DJhsVwzQggBCAyVSo+9epFqwCwMSy1gaMZWAwE6++91Qc7Hi42KUMkShNxj037oilFQ15jy+XEO+aZH3c9bGmvNcR8jVVAwgvzucLv96U1WeTYq3LTJZkIhUPLH2+6O8XAJgtBBACAAAAAAAAADDbCSAEAAAAAAAAAGDasCkqAExvnWdb4ie/+kake9uKXcoQtQs3xF1LmvIOeOs61x772+/PanyJ0mR86ZbvR1X5yqKNe6oFEOa6sXVNsj5WVe2MRGl5XuftOd8ZP35zfZzqOVKUcY82vqmwsTWQPQGEAEyGXO5fE6XJiIhJDQIBYGqz1gZkqz/TFwfeWj8lA97WVj8bFfOr8x7foVON0fLOrqzar1i8NZbfsCnvdYTxmooBhLms+RQq+HxgMBNHzzTF4dNbijbukcZX7DUfAJiNBBACAAAAAAAAADDbCSAEAAAAAAAAAGDasCkqAEx/A4OZaHv/uXjh15uyCsGYTGur90bq2jUxd05JXv2c7GrOenzJRCoeWPp8UUI+plIAYUf3S/GjN7+W9ZwVY4PpyZJMpOKLN30v742YgckngBCAiTSegJQ7FzVGROQU0FGogHYApiZrbUCues53xg9O3ptVyNxkqknWx6qqnZEoLc97fLkEfN9z446CrCPkaioFEPac74xDv2nMOpyyGGsvk2lV1e649boHJ/09AQAIIAQAAAAAAAAAAAGEAAAAAAAAAABMGzZFBYCZoz/TFy+/vSPrEIzJkihNxpdrDuQd/jYwmMkp5KMmWR+rb94zqSEfUyGAMJfNqy9u7ry0oiGvc14MwRxus+ZiKubm1UBhCCAEYCLkev86UhBLb393HOzYOOkhIQBMLdbagPHq6H4pfvTm16Zc+NvF4O1871s7z7bEM62rsxpfMpGKL970vbzXEXIxFQIIc13XKVS4ede59tjffv+UDMGc7HUdAGAoAYQAAAAAAAAAAMx2AggBAAAAAAAAAJg2bIoKADNPz/nOOPSbxqxDMCbLkgV1cd8te2LBvMq8+sk15GNV1e649boHJyXko5gBhP2Zvjjw1vqs56UYm0hPphWLt8byGzbZqBimOQGEABRariEoa6ufjYr51aO2yyW8o1AB7QBMHdbagHwMDGbi1feeioMdDxe7lCESpcm458YdsbSiIe/x5Rr+fdfHmvJeR8hGMQMIL87LC7/elNVnk2Ktr0yWZCIVDyx9flKuOwAwOgGEAAAAAAAAAADMdgIIAQAAAAAAAACYNmyKCgAzV+fZlvjJr76RVQjGZKpduCHuWtKUdzBcriEfX7rl+1FVvnJCx1aMAMJcN6iuSdbHqqqdkSgtz+u8Pec748dvro9TPUcmbGzjMZkbVAMTTwAhAIWSy/3reMNWOrpfih+9+bVJDRABoPistQGF0J/piwNvrZ+SwXDZhHJnM75Dpxqj5Z1dWbVfsXhrLL9hU97rCKMpVgBhLms3hQowHxjMxNEzTXH49JYJHVuuJmvtBgDIngBCAAAAAAAAAABmOwGEAAAAAAAAAABMGzZFBYCZbWAwE23vPxcv/HpTViEYk2lt9d5IXbsm5s4pyaufk13NWY8vmUjFA0ufn7CQj8kOIMwl4KRYG0VPlmQiFV+86Xt5b8QMTC0CCAHI13iCTu5c1Djuzym5BoQXKqAdgOKx1gYUUs/5zvjByXuzCqebTDXJ+lhVtTMSpeV5jy/XYPBCrCMMZ7IDCHvOd8ah3zRmHTJZjDWUybSqanfcet2DE3JtAYDxE0AIAAAAAAAAAMBsJ4AQAAAAAAAAAIBpw6aoADA79Gf64uW3d8Th01uKXcoQidJkfLnmQN6hcQODmTh6pinr8dUk62P1zXsKHvIxWQGEuWxCfXGT5qUVDXmd82KY5XAbMhfTRG9CDRSXAEIAxivX+9eaZH3c9bGmgoWV92f64sBb6yc9XASAyWetDZgIHd0vxY/e/NqUC43LN7D7os6zLfFM6+qsxpdMpOKLN30v73WED5usAMJc12cKFVLeda499rffPyXDLCdifQYAKAwBhAAAAAAAAAAAzHYCCAEAAAAAAAAAmDZsigoAs0vP+c449JvGrEMwJsuSBXVx3y178g776O3vjoMdG7Me36qq3XHrdQ8WLORjogMIcw0xKcZm0JNpxeKtsfyGTTYqhhlMACEA4zEVwkwu6jnfGT9+c32c6jkyZttCBbQDMLmstQETZWAwE6++91Qc7Hi42KUMkShNxj037oilFQ15j6+YoeETHUB4cXwv/HpTVp9NirVOMlmSiVQ8sPT5gl0/AGBiCCAEAAAAAAAAAGC2E0AIAAAAAAAAAMC0YVNUAJidOs+2xE9+9Y1I97YVu5QhahduiLuWNOUdKNd1rj32t9+f1fgSpcn40i3fj6rylXnXP1EBhLluNF2TrI9VVTsjUVqe13lzCUuZTIXeaBqYugQQApCLXMP+7rlxR6SuXVOwQPLR5BKKWKjgEQAmh7U2YKL1Z/riwFvrp2Sg3NrqZ6NifnXe4zt0qjFa3tmVVfsVi7fG8hs25b2OMJEBhLmswRQqiHxgMBNHzzTF4dNb8q6/kAq5BgMATDwBhAAAAAAAAAAAzHYCCAEAAAAAAAAAmDZsigoAs9fAYCba3n8uXvj1pqxCMCbT2uq9BQkCOdnVnPX4kolUPLD0+bxCPiYigLCj+6X40Ztfy3oMxdjwebIkE6n44k3fy3sjZmD6EEAIQDaKFViSq4ufwYYLORlOoQLaAZhY1tqAydJzvjN+cPLerELtJlNNsj5WVe2MRGl53uObzEDxiQgg7DnfGYd+05h1WGQx1kIm06qq3XHrdQ9OSug7AFAYAggBAAAAAAAAAJjtBBACAAAAAAAAADBt2BQVAOjP9MXLb++Iw6e3FLuUIRKlyfhyzYG8w+YGBjNx9ExT1uOrSdbH6pv3jCvko5ABhLlsJn1xs+WlFQ15z1UugSiTpRCbSQPTkwBCAEaT6/1rTbI+7vpYU16h44WQ62ewQoWSADAxrLUBk62j+6X40Ztfm3JhcysWb407FzXmfd/aebYlnmldndX4kolUfPGm741rHaGQAYS53uMXKmy861x77G+/f0qGUo53nQUAKC4BhAAAAAAAAAAAzHYCCAEAAAAAAAAAmDZsigoAXNRzvjMO/abxigC9YluyoC7uu2VP3iEhvf3dcbBjY9bjW1W1O2697sGcNksuRABhf6YvDry1Pus6i7Gp82RasXhrLL9hk42KYZYSQAjASCYrlGQi5fIZrFAB7QAUnrU2oBgGBjPx6ntPxcGOh4tdyhCJ0mTcc+OOWFrRkPf4JjpsvBABhBfrfOHXm7L6bFKs9Y7Jkkyk4oGlzxc99B0AGD8BhAAAAAAAAAAAzHYCCAEAAAAAAAAAmDZsigoAfFjn2Zb4ya++EenetmKXMkTtwg1x15KmvIPous61x/72+7MaX6I0GV+65ftRVb4yq77zCSDMdcPommR9rKraGYnS8rzmo+d8Z/z4zfVxqudIXv0U2ng2jAZmHgGEAHxYLvevF8NPUteuyTuweyLl8hmsUIElABSOtTagmPozfXHgrfVTMohubfWzUTG/Ou/xHTrVGC3v7Mqq/YrFW2P5DZuyWkfIN4Awl/v4QgWKDwxm4uiZpjh8ekte/RRarmspAMDUJYAQAAAAAAAAAIDZTgAhAAAAAAAAAADThk1RAYDhDAxmou395+KFX2+K3v50scsZYm313oIEiJzsas56fMlEKh5Y+vyYIR/jDSDs6H4pfvTm17KupRgbN0+WZCIVX7zpe3lvxAzMDAIIAbhoIoNHpoJcP4MVKqAdgPxZawOmgp7znfGDk/dmFYY3mWqS9bGqamckSsvzHl+hg8jHG0DYc74zDv2mMevQx2KsaUymVVW749brHpzSoe8AQPYEEAIAAAAAAAAAMNsJIAQAAAAAAAAAYNqwKSoAMJr+TF+8/PaOOHx6S7FLGSJRmowv1xzIO6RuYDATR880ZT2+mmR9rL55z4ghH7kGEOayKfTFTZOXVjTkPea2958bdmPlYsp2U2hgdhFACECu9681yfq462NNY4aHT1W5fgYrVJgJAONnrQ2YSjq6X4ofvfm1KRdSt2Lx1rhzUWPe962dZ1vimdbVWY0vmUjF2upno2J+9bCv5xpAmOt6QqFCw7vOtcf+9vunZLjkaOslAMD0JIAQAAAAAAAAAIDZTgAhAAAAAAAAAADThk1RAYBs9JzvjEO/abwiXK/Yliyoi/tu2ZN3uEhvf3cc7NiY9fhGCvnINoCwP9MXh041Rss7u7I6XzE2Z55MKxZvjeU3bLJRMXAFAYQAs1uu4SJfvOl7eYeUTxW5fEYpVEA7AONjrQ2YagYGM/Hqe0/FwY6Hi13KEInSZNxz445YWtGQ9/hyDSlfVbUzEqXlQ57PJYDwZFdzvPDrTVl9NinWusVkSSZS8cDS56dt6DsAMDoBhAAAAAAAAAAAzHYCCAEAAAAAAAAAmDZsigoA5KLzbEv85FffiHRvW7FLGaJ24Ya4a0lT3gF2XefaY3/7/VmNb7iQj7ECCAu1MXKues53xo/fXB+neo7k1U+h1STr466PNdmoGBiRAEKA2SmX+9eLISbDBYTPBLl8RilU0AkAubHWBkxV/Zm+OPDW+ikZYLe2+tmomF+d9/gOnWqMlnd2ZdV+xeKtceeixkufG7IJIMx3zWA8BgYzcfRMUxw+vSWvfgotUZqML93y/agqX1nsUgCACSSAEAAAAAAAAACA2U4AIQAAAAAAAAAA04ZNUQGAXF0M0Xvh15uitz9d7HKGWFu9tyDBIye7mrMe3+UhH6MFEHaebYlnWldn1WexNmCeLMlEKr540/fy3ogZmPkEEALMLuMJEFl+w6a8g8ing1w+oxQqoB2A7FhrA6a6nvOd8YOT92YVojeZapL1sapqZyRKy/MeX64B5ksrGkYNIOzt746DHRuzDm8sxtrEZFpVtTtuve7BGRn6DgAMJYAQAAAAAAAAAIDZTgAhAAAAAAAAAADThk1RAYDx6s/0xctv74jDp7cUu5QhEqXJ+HLNgbzD7QYGM3H0TFPW46tduCHe733rik2Ok4lUJEqvyXnz43xrb3v/uWE3Ty6mi+MrxEbMwOwggBBgdsj1/rUmWR93fawpFsyrLHbpk2pgMBOvvvdUHOx4OKv2hQpBAWB01tqA6aKj+6X40Ztfm3LhdisWb407FzXmfd/aebYlnmldndX4kolUXJu4ZdiAwRWLt+a0LlCI8O+uc+2xv/3+KRkSufrmPcLNAWAWEUAIAAAAAAAAAMBsJ4AQAAAAAAAAAIBpw6aoAEC+es53xqHfNA67UW8xLVlQF/fdsifvUJLe/u442LFxwsdXjE2WJ9OKxVtj+Q2bbFQM5EQAIcDMl2tIyBdv+l7eYePTXX+mLw68tT6rzyiFCmgHYGTW2oDpJNdQ68mSKE3GPTfuiKUVDXmPL5dw8/GabusPuUomUvHA0udnXeg7ACCAEAAAAAAAAAAABBACAAAAAAAAADBt2BQVACiUzrMt8ZNffSPSvW3FLmWI2oUb4q4lTXkH33Wda4/97fcXfHw1yfpYVbUzEqXlefXTc74zfvzm+jjVc6Sg9RVifHd9rMlGxcC4CCAEmLlyuX+9GEaSunZN3oHdM0nP+c74wcl7s/qMUqiAFACuZK0NmI5yCbWeTMlEKtZWPxsV86vzHt+hU43R8s6ugtZXqIDvgcFMHD3TFIdPbylofYUY35du+X5Ula8sdikAQJEIIAQAAAAAAAAAYLYTQAgAAAAAAAAAwLRhU1QAoJAGBjPR9v5z8cKvN0Vvf7rY5QyxtnpvQQJLTnY1F2R8U30j5XwlE6n44k3fy3sjZmB2E0AIMPPkev+6YvHWWH7DprwDxWeyzrMt8Uzr6qw+oxQqoB2Af2GtDZjOcgm1nkw1yfpYVbUzEqXleY8v2+DzsUy1NYZCW1W1O2697kGh7wAwywkgBAAAAAAAAABgthNACAAAAAAAAADAtGFTVABgIvRn+uLlt3fE4dNbil3KEInSZHy55kDeoXgDg5k4eqZpXONLlCbjnht3xNKKhrxraHv/udjfvm5C52y84yvERswAAggBZo5c719rkvVx18eaYsG8ymKXPi3kOr+FCk8BwFobMDN0dL8UP3rza1MuFG/F4q1x56LGvO9bcwnt/rBChXh3nWuP/e33T8mwx9U37xFSDgBEhABCAAAAAAAAAAAQQAgAAAAAAAAAwLRhU1QAYCL1nO+MQ79pjNb0vmKXMsSSBXVx3y178g4z6e3vjoMdG7Me31TYLHkirVi8NZbfsMlGxUDBCCAEmBlyuX9NJlLxxZu+l3do+GzVn+mLQ6cao+WdXWO2LVRAO8BsZ60NmCkGBjPx6ntPxcGOh4tdyhCJ0mTcc+OOWFrRkPf4cgntLtY6wmRJJlLxwNLnhb4DAEMIIAQAAAAAAAAAYLYTQAgAAAAAAAAAwLRhU1QAYDJ0nm2Jn/zqG5HubSt2KUPULtwQdy1pyjswr+tce+xvv3/E8dUk62NV1c5IlJbndZ6e853x4zfXx6meI0Wbs5HGd9fHmmxUDBScAEKA6S2X+9eLoSKpa9fkHdhNbnNfqGAVgNnKWhsw0/Rn+uLAW+unZGDe2upno2J+dd7jGy20u1BB3QODmTh6pikOn95StDkbaXxfuuX7UVW+stilAABTkABCAAAAAAAAAABmOwGEAAAAAAAAAABMGzZFBQAmy8BgJtrefy5e+PWm6O1PF7ucIdZW7y1I0MnJruYh45usDZGLJZlIxRdv+l7eGzEDjEQAIcD0lOv9a6GCwblSLmHwrgPA+FhrA2aqnvOd8YOT92Z1LzmZapL1sapqZyRKy/Me34dDuydqrWCqWFW1O2697kGh7wDAiAQQAgAAAAAAAAAw2wkgBAAAAAAAAABg2rApKgAw2fozffHy2zvi8OktxS5liERpMr5ccyDvML2BwUwcPdMUH/3XS2JpRUPefbW9/1zsb19X7OkZIlGajHtu3FGQjZgBRiOAEGB6yfX+dcmCurjvlj2xYF5lsUuf0XINgy9U6ArAbGGtDZjpOrpfih+9+bUpF6a3YvHWuHNRY973rZ1nW+JUz3+O5TdsyjuMu+tce+xvv39KhjauvnmPsHEAYEwCCAEAAAAAAAAAmO0EEAIAAAAAAAAAMG3YFBUAKJae851x6DeN0ZreV+xShpgqISidZ1vimdbVU3JT50JsxAyQDQGEANNHLvevhQr/Jje5hMG7RgDZs9YGzAYDg5l49b2n4mDHw8UuZYhEaTLuuXFHLK1oKGodvf3dcbBj45Rb70gmUvHA0ueLvt4BAEwfAggBAAAAAAAAAJjtBBACAAAAAAAAADBt2BQVACi2zrMt8ZNffSPSvW3FLmWI2oUb4q4lTZMetNdzvjN+/Ob6ONVzpNhTMERNsj7u+liTjYqBSSWAEGDqy/X+dW313khduybmzikpdumzVi5h8FMloB1gKrPWBswm/Zm+OPDW+ikZtLe2+tmomF89qecdGMzE0TNNWYV8T6ZEaTK+dMv3o6p8ZbFLAQCmGQGEAAAAAAAAAADMdgIIAQAAAAAAAACYNmyKCgBMBQODmWh7/7l44deborc/XexyhpisgJT+TF8cOtUYLe/sKvaQh0gmUvHFm74XlVfXFrsUYBYSQAgwdeV6/1qsgG9G1nWuPfa3359VGLzrBzAya23AbNRzvjN+cPLerO4lJ1NNsj5WVe2MRGn5hJ/rZFfzlFzTWFW1O2697kGh7wDAuAggBAAAAAAAAABgthNACAAAAAAAAADAtGFTVABgKunP9MXLb++Iw6e3FLuUIRKlyfhyzYEJCeG7GL64v31dsYd5xZjvuXHHpIQvAoxEACHA1JPr/euSBXVx3y17YsG8ymKXzghyCU6ZrIB2gOnEWhswm3V0vxQ/evNrUy6Eb8XirXHnosYJuW/NJch7MtUk62P1zXuEhgMAeRFACAAAAAAAAADAbCeAEAAAAAAAAACAacOmqADAVNRzvjMO/aYxWtP7il3KEIUOT+k82xLPtK6ekpszL79hk42KgaITQAgwteRy/zqRId4U3sBgJo6eacoqDN61BRjKWhsw2w0MZuLV956Kgx0PF7uUIRKlybjnxh2xtKKhIP319nfHwY6NU27dIplIxQNLnxf6DgAUhABCAAAAAAAAAABmOwGEAAAAAAAAAABMGzZFBQCmss6zLfGTX30j0r1txS5liNqFG+KuJU3jDujrOd8ZP35zfZzqOVLsoQxRk6yPuz7WZKNiYMoQQAgwNeR6/7q2em+krl0Tc+eUFLt0ctSf6YsDb63PKlSl0AHtANOVtTaAP8jlXnIyJROpWFv9bFTMrx7X8bmEdU+mRGkyvnTL96OqfGWxSwEAZhABhAAAAAAAAAAAzHYCCAEAAAAAAAAAmDZsigoATHUDg5loe/+5eOHXm6K3P13scobINVilP9MXh041Rss7u4pd+hDJRCq+eNP3ovLq2mKXAjCEAEKA4sr1/jXfoG6mjp7znfGDk/dmFQbvugOznbU2gKFyuZecTDXJ+lhVtTMSpeVZH3Oyq3lKrk2sqtodt173oNB3AKDgBBACAAAAAAAAADDbCSAEAAAAAAAAAGDasCkqADBd9Gf64uW3d8Th01uKXcoQidJkfLnmwKjhfRdDFPe3ryt2uVfUfs+NO3IKUQSYTAIIAYoj1/vXJQvq4r5b9sSCeZXFLp0C6+h+KX705teyClzJNaAdYKaw1gYwvFzuJSfTisVb485FjaPet3ada4/97fdPyRDF1TfvEf4NAEwYAYQAAAAAAAAAAMx2AggBAAAAAAAAAJg2bIoKAEw3Pec749BvGqM1va/YpQwxUuhK59mWeKZ19ZTcZHn5DZtsVAxMaQIIASZfLvev2YRxM/0NDGbi1feeioMdD4/Z1nsCmI2stQGMLJd7ycmUKE3GPTfuiKUVDUOe7+3vjoMdG6fc+kMykYoHlj4v9B0AmHACCAEAAAAAAAAAmO0EEAIAAAAAAAAAMG3YFBUAmK46z7bET371jUj3thW7lCFqF26Iu5Y0Re/vu+PHb66PUz1Hil3SEDXJ+rjrY002KgamBQGEAJOn53xnTveva6v3RuraNTF3TkmxS2eS9Gf64tCpxmh5Z9eYbUcKaAeYiay1AYytP9MXB95aPyWD/dZWPxvXlN0UR880xeHTW4pd0hCJ0mR86ZbvR1X5ymKXAgDMEgIIAQAAAAAAAACY7QQQAgAAAAAAAAAwbdgUFQCYzgYGM9H2/nOxv31dsUuZ8hKlyfhyzYGovLq22KUAZE0AIcDE68/0xctv78g6aONi4HZpSVmxS6dIcgmrXLF4ayy/YZP3CzCjWWsDyF7P+c74wcl7I93bVuxSprwVi7fGnYsahb4DAJNKACEAAAAAAAAAALOdAEIAAAAAAAAAAKYNm6ICADNBf6YvDp1qjJZ3dhW7lClpbfXeSF27xkbFwLQjgBBg4lwM837h15uitz89ZvslC+rivlv2xIJ5lcUunSmi82xLPNO6esz3T6I0GffcuMNnEmDGstYGkLuTXc1ZfxaZbWqS9bGqamckSsuLXQoAMAsJIAQAAAAAAAAAYLYTQAgAAAAAAAAAwLRhU1QAYCbpOd8ZP35zfZzqOVLsUqaE2oUb4q4lTVFaUlbsUgDGRQAhwMToPNsSP/nVNyLd2zZm20RpMr5ccyAqr64tdtlMQbkEWSYTqfjiTd/zXgJmHGttAOMzMJiJo2ea4vDpLcUuZUpIJlKxtvrZqJhfXexSAIBZTAAhAAAAAAAAAACznQBCAAAAAAAAAACmDZuiAgAzUefZlnimdfWYARgz1ZIFdXHfLXtiwbzKYpcCkBcBhACF1XO+Mw79pjFa0/uyar+2em+krl0Tc+eUFLt0prj+TF+8/PaOrMJjapL1cdfHmnxeAWYMa20A+ent746DHRuz/pwy0yRKk3HPjTtiaUVDsUsBABBACAAAAAAAAADArCeAEPj/s/f/0VXXd77o/wIymTKJtwVv7EZRgqQVZbIpx/qLoNVOUAe42K5SS4Kj12NZY1XAHqaLU9rKwR7p4s6wKuDPSz12OiWhlq4OLqQqWWNbiVarl7JTLbZQ4k92yRXaazKck9ng9w+/pGyyk+z8YhN4PNZyrXw+n/fn/Xm9358dyX7v5PMEAAAAAAAAgCHDQ1EBgJPVocOZSP3hsdjQNK/QpRw3pcWJ+LvJG6N8VFWhSwEYEAIIAQZGb8LhIiKqzlkY11asiOKikkKXzhDTm5DL6ROWxxXjFnudAUOez9oABsbe95piQ9MNkW5NFbqU42b6hOVx1filQt8BgBOGAEIAAAAAAAAAAE51AggBAAAAAAAAABgyPBQVADjZtWfa4sldS6PxjTWFLmVQza1cH8mPXu9BxcBJRQAhQP8cCeXe/NriaG1P99i+YnR1fG7Suhg9srzQpTPENR9ojB//5rYew2NKixMx67xV3ssAQ5rP2gAG1va9dXm/hxmqJidqYvbE1VFaXFboUgAAsgggBAAAAAAAAADgVCeAEAAAAAAAAACAIcNDUQGAU8X+g83xo1fmx679DYUuZUBVnbMwrq1YEcVFJYUuBWDACSAE6Lt8A+AiPgiB+7vJG6N8VFWhy+Yk0psAzERpMj57/gNeg8CQ5LM2gIF36HAmntmzIrbuXlboUgZUojQZcyu/H2NOqyx0KQAAOQkgBAAAAAAAAADgVCeAEAAAAAAAAACAIcNDUQGAU03zgcb4lx1zegzAONFVjK6Oz01aF6NHlhe6FIBBI4AQoPf2H2yOJ3+3NHak6/NqP7dyfSQ/en2MGF5U6NI5SfUmPGZyoiau/dgK73OAIcVnbQCDp7W9JR7fuSjv9zcnqtLiRMw6b1VMGVNb6FIAALolgBAAAAAAAAAAgFOdAEIAAAAAAAAAAIYMD0UFAE5Fhw5nIvWHx2JD07xCl9JrpcWJ+LvJG6N8VFWhSwEYdAIIAfLXnmmLn7++Kq+Qt4iIqnMWxrUVK6K4qKTQpXOK6E14zPQJy+OKcYu9PoEhwWdtAINv73tNsaHphki3pgpdSq9Nn7A8rhq/VOg7ADAkCCAEAAAAAAAAAOBUJ4AQAAAAAAAAAIAhw0NRAYBTWXumLZ7ctTQa31hT6FLyMrdyfSQ/er0HFQOnDAGEAD07Eq69+bXF0dqe7rF9ojQZN03ZFKNHlhe6dE5R+YbHlBYnYtZ5q7wHAk54PmsDOH62763L+71PoU1O1MTsiaujtLis0KUAAORNACEAAAAAAAAAAKc6AYQAAAAAAAAAAAwZHooKABCx/2Bz/OiV+bFrf0OhS8mp6pyFcW3FiiguKil0KQDHlQBCgO41H2iMH//mth6D3CI+CHP7/KRHYmLZjEKXDRERsbNlS/zwlVt6DI9JlCbjs+c/EOWjqgpdMkBOPmsDOL4OHc7EM3tWxNbdywpdSk6J0mTMrfx+jDmtstClAAD0mgBCAAAAAAAAAABOdQIIAQAAAAAAAAAYMjwUFQDgz5oPNMa/7JjTYwDG8VIxujo+N2ldjB5ZXuhSAApCACFAbvsPNseTv1saO9L1ebWfPXFtXDr21hgxvKjQpUOWQ4cz8Yu3HorHdy7ose3kRE1c+7EV3h8BJxyftQEURmt7Szy+c1He74sGW2lxImadtyqmjKktdCkAAH0mgBAAAAAAAAAAgFOdAEIAAAAAAAAAAIYMD0UFAMh26HAmUn94LDY0zStYDaXFifi7yRujfFRVoacDoKAEEAJka8+0xc9fXxVbdy/Lq/3kRE3MuWBdFBeVFLp06FZ7pi02vjo/r/CY6ROWxxXjFntdAycMn7UBFNbe95piQ9MNkW5NFayG6ROWx1Xjlwp9BwCGPAGEAAAAAAAAAACc6gQQAgAAAAAAAAAwZHgoKgBAbu2Ztnhy19JofGPNcb3u3Mr1kfzo9R5UDBACCAGOOBKSvfm1xdHanu6xfaI0GTdN2RSjR5YXunTolf0Hm+NHr8yPXfsbum1XWpyIWeet8t4JOCH4rA3gxLB9b13e75kGyuRETcyeuDpKi8sKPXwAgAEhgBAAAAAAAAAAgFOdAEIAAAAAAAAAAIYMD0UFAOhevgEY/VV1zsK4tmJFFBeVFHrIACcMAYQAEc0HGuPHv7kt0q2pHtuWFifi85MeiYllMwpdNvRL84HG+Jcdc3oMj0mUJuOz5z8Q5aOqCl0ycArzWRvAiePQ4Uw8s2dFbN29bFCvkyhNxtzK78eY0yoLPWQAgAElgBAAAAAAAAAAgFOdAEIAAAAAAAAAAIYMD0UFAMhPvgEYvVUxujo+N2ldjB5ZXughApxwBBACp7L9B5vjyd8tjR3p+rzaz564Ni4de2uMGF5U6NJhQBw6nInUHx6LDU3zemw7OVET135shfdVQEH4rA3gxNPa3hKP71yU9/upfJUWJ2LWeatiypjaQg8RAGBQCCAEAAAAAAAAAOBUJ4AQAAAAAAAAAIAhw0NRAQDy15sAjJ6UFifi7yZvjPJRVYUeFsAJSwAhcCpqz7TFz19fFVt3L8ur/eRETcy5YF0UF5UUunQYFO2Ztnhy19JofGNNj22nT1geV4xb7PsBOK581gZw4tr7XlNsaLoh0q2pfvc1fcLyuGr8UqHvAMBJTQAhAAAAAAAAAACnOgGEAAAAAAAAAAAMGR6KCgDQe70JwMhlbuX6SH70eg8qBuiBAELgVHIk7Hrza4ujtT3dY/tEaTJumrIpRo8sL3TpcFzsP9gcT/5uaexI13fbrrQ4EbPOW+U9F3Dc+KwN4MS3fW9d3u+1jjU5UROzJ66O0uKyQg8DAGDQCSAEAAAAAAAAAOBUJ4AQAAAAAAAAAIAhw0NRAQD6bv/B5vjRK/Nj1/6GvNpXnbMwrq1YEcVFJYUuHWBIEEAInCqaDzTGj39zW6RbUz22LS1OxOcnPRITy2YUumwoiHy/XxKlyfjs+Q9E+aiqQpcMnOR81gYwNBw6nIln9qyIrbuX5dU+UZqMuZXfjzGnVRa6dACA40YAIQAAAAAAAAAApzoBhAAAAAAAAAAADBkeigoA0H/NBxrjX3bMidb2dM7jFaOr43OT1sXokeWFLhVgSBFACJzs9h9sjid/tzR2pOvzaj974tq4dOytMWJ4UaFLh4I6dDgTqT88FptfW9zl+7AjJidq4tqPrfB+DBg0PmsDGFpa21vi8Z2LunwfVlqciFnnrYopY2oLXSoAwHEngBAAAAAAAAAAgFOdAEIAAAAAAAAAAIYMD0UFABgYRwIwNjTN69hXWpyIv5u8McpHVRW6PIAhSQAhcLJqz7TFz19fFVt3L8ur/eRETcy5YF0UF5UUunQ4ofTme2n6hOVxxbjFvo+AAeezNoChae97TbGh6YZIt6Y69k2fsDyuGr9U6DsAcMoSQAgAAAAAAAAAwKlOACEAAAAAAAAAAEOGh6ICAAysIwEYp/9VRSQ/er0HFQP0gwBC4GS0972m+M7LV0dre7rHtonSZNw0ZVOMHlle6LJPeYcOZ+JP/+uteP2Pz8W4j0yND//lWD/rn0Ba21vi8Z2LYke6vtt2pcWJ+PykR2Ji2YxClwycRHzWBjC0bd9bF2/+6YX49Llfj9LiskKXAwBQUAIIAQAAAAAAAAA41fmrQQAAAAAAAAAAAAA4RRUXlUT1hLsKXQYAACeodGtTj+GDQtJODPsPNse2178du/f/NNKtqU7HE6XJmDD6yri2YkUUF5UUutxTWmlxWdQm6+Kq8V+NDU035LxfERGt7en4f/Z+3/cWAAAdpoypjSljagtdBgAAAAAAAAAAAABwAhBACAAAAAAAAAAAAAAAAECvVYyujv/8n34SI4b7M7VCOXQ4E79466F4fOeCbtulW1ORbk3FjvRjAiNPEGNOq4y//di34tHtMwtdCgAAAAAAAAAAAAAAAABDzPBCFwAAAAAAAAAAAAAAAADA0LNrf0P84Nc3RnumrdClnJJa21tizS8u7DF8MPucdDy6fWbUpWrj0OFMoYdwymrPtEVdqlb4IAAAAAAAAAAAAAAAAAB9IoAQAAAAAAAAAAAAAAAAgD7Zka6PldsqYmfLlkKXcko5dDgT334uGenWVJ/O35Gujyd+u7jQwzgl7WzZEiu3VcSOdH2hSwEAAAAAAAAAAAAAAABgiBJACAAAAAAAAAAAAAAAAECftban49HtM6MuVRvtmbZCl3NKeOK3i6O1Pd2vPhrfWBPNBxoLPZRTRnumLepStfHo9pn9vncAAAAAAAAAAAAAAAAAnNoEEAIAAAAAAAAAAAAAAADQbzvS9bFyW0XsbNlS6FJOas0HGqPxjTUD0te/7JgjNPI42NmyJVZuq4gd6fpClwIAAAAAAAAAAAAAAADASUAAIQAAAAAAAAAAAAAAAAB5Ky1OdHmstT0dj26fGXWpWsF2g2Tr7v82YH21tqfjlZZNhR7SSas90xZ1qdp4dPvMaG1PF7ocAAAAAAAAAAAAAAAAAE4SAggBAAAAAAAAAAAAAAAAyNvSK96MqnMWdttmR7o+Vm6riJ0tWwpd7kln1/6GAe3vNy2bCz2kk1LzgcZYua0idqTru22XKE3Gksv3FLpcAAAAAAAAAAAAAAAAAIYQAYQAAAAAAAAAAAAAAAAA5G3E8KKYPXF13HlZKkqLE122a21Px6PbZ0ZdqjbaM22FLvuksP9g84D3uXv/M4Ue1knl0OFMPL5zUTz4y2nR2p7utu3siWtj4aUvx+iR5YUuGwAAAAAAAAAAAAAAAIAhRAAhAAAAAAAAAAAAAAAAAL025rTKWHrFmzE5UdNtux3p+li5rSJ2tmwpdMlD3r7WVwe8z9b2tIDIAbL3vaZY8fOzo/GNNd22S5QmY8nle6LqnDtixPCiQpcNAAAAAAAAAAAAAAAAwBAjgBAAAAAAAAAAAAAAAACAPhkxvChqk3Vx85QnorQ40WW71vZ0PLp9ZtSlaoXd9cPBzB8Hpd/W/2gp9NCGtEOHM/H4zkVx7/PJaG1Pd9t29sS1sfDSl2P0yPJClw0AAAAAAAAAAAAAAADAECWAEAAAAAAAAAAAAAAAAIB+mVg2I5ZM2xWTEzXdttuRro+V2ypiZ8uWQpc8JCVKKwel3w//5dhCD23I2vteU6z4+dnR+MaabtuVFidiyeV7ouqcO2LE8KJClw0AAAAAAAAAAAAAAADAECaAEAAAAAAAAAAAAAAAAIB+Ky4qidpkXdw85YkoLU502a61PR2Pbp8ZdanaaM+0FbrsIeW0v0z0v5McBOL13qHDmXh856K49/lktLanu21bdc7CWHrFmzF6ZHmhywYAAAAAAAAAAAAAAADgJCCAEAAAAAAAAAAAAAAAAIABM7FsRiyZtismJ2q6bbcjXR8rt1XEzpYthS55SGjPtMUv3nxwUPquS9VGa3tLoYc4ZOx9rylW/PzsaHxjTbftSosTcedlqZg9cbWQRwAAAAAAAAAAAAAAAAAGjABCAAAAAAAAAAAAAAAAAAZUcVFJ1Cbr4uYpT0RpcaLLdq3t6Xh0+8yoS9VGe6at0GWfkA4dzsT2vXWxcltFbN29bFCusSNdH9/86RnRsPvuOHQ4U+ghn7AOHc7E4zsXxb3PJ6O1Pd1t26pzFsbSK96MMadVFrpsAAAAAAAAAAAAAAAAAE4yAggBAAAAAAAAAAAAAAAAGBQTy2bEkmm7YnKiptt2O9L1sXJbRexs2VLokk8oe99rijW/uDA2NM3rMfBuIGzdvSxW/Pzs2L63rtBDP+Hsfa8pVvz87Gh8Y0237UqLE3HnZamYPXF1jBheVOiyAQAAAAAAAAAAAAAAADgJCSAEAAAAAAAAAAAAAAAAYNAUF5VEbbIubp7yRJQWJ7ps19qejke3z4y6VG20Z9oKXXZBtba3RF2qNu59Phnp1tRxvnY6NjTNi28/Nzn2H2wu9FQU3KHDmWh847649/lkjyGQVecsjKVXvBljTqssdNkAAAAAAAAAAAAAAAAAnMQEEAIAAAAAAAAAAAAAAAAw6CaWzYgl03bF5ERNt+12pOtj5baK2NmypdAlH3eHDmeiYffd8c2fnhE70vUFrSXdmoqVz44/pQMh9x9sjjW/uDAe37mg23alxYm4ecoTMXvi6hgxvKjQZQMAAAAAAAAAAAAAAABwkhNACAAAAAAAAAAAAAAAAMBxUVxUErXJurh5yhNRWpzosl1rezoe3T7zlAq/29myJVb8/OzYuntZj217CnHMR8Xo6qg6Z2GP7Xak6+Mb/1YajW/cF4cOZwo9TcfFocOZaHzjvlj57PhIt6a6bTs5URNLpu2KiWUzCl02AAAAAAAAAAAAAAAAAKcIAYQAAAAAAAAAAAAAAAAAHFcTy2bEkmm7egzS25Guj5XbKmJny5ZClzxo9h9sjm8/Nzke3T4zWtvT3bYtLU7Ely7aFueXzer3dXftb4iLzvpiLLl8T1SMru6x/eM7F8SKn599Ut+LiA/ux5pfXBiP71zQbbvS4kTcPOWJqE3WRXFRSaHLBgAAAAAAAAAAAAAAAOAUIoAQAAAAAAAAAAAAAAAAgOOuuKgkapN1cfOUJ6K0ONFlu9b2dDy6fWbsfa+p0CUPqPZMW9SlamPls+Mj3Zrqsf3cyvWx9Io348zTPhEbmublbJMoTXYKE6wYXR2J0mTO9huabogP/+XYmP/JrT3eh4g/34t1L02P/QebCz2FA27ve0153Y/JiZpYMm1XTCybUeiSAQAAAAAAAAAAAAAAADgFFRW6AAAAAAAAAAAAAAAAAABOXRPLZsSSabvin3/1mdi1vyFnm8mJmhhzWmWhSx0Qhw5n4hdvPRSP71yQV/vJiZqYc8G6KC4qiYiIH/z6xpztSosTsfDSl2PE8A/+bHD/weYYPbI8Ij4IO/zGv5V2OifdmopfvPVQVJ1zR0wsmxFLr3gzr9p27W+Ilc+Oj6pzFsa1FSs6ahvqxpxWGYnSZLcBhDdPeULwIAAAAAAAAAAAAAAAAAAFNbzQBQAAAAAAAAAAAAAAAABwaisuKon5n9wacyvXdzpWWpyIOResK3SJA6L5QGOs+PnZeYUPJkqTseTyPVGbrOsI+Gs+0Bg70vU52//d5I0d4YMR0RE+GPHB/Oaa24iIx3cuiP0HmyMiYsTwoqg654745qdbY3KipscaG99YE9/4t9LYvrcuDh3OFHp6B8RNUzbl3F8xujq+ceU+4YMAAAAAAAAAAAAAAAAAFJwAQgAAAAAAAAAAAAAAAABOCFPG1MY3rtwXFaOrO/Z9ftIjHQF8Q9X+g82x7qXp8eAvp0Vre7rbtqXFiZhbuT6+PHVHVojgocOZ+Jcdc3KeMzlRE+Wjqrrtd8qY2qx5PdqPXpmftV1cVBK1ybpYcvmeSJQmexzfhqZ5seLnZ0fzgcZCTO+AGj2yPGZPXJu1b27l+pj/ya1RWlxW6PIAAAAAAAAAAAAAAAAAQAAhAAAAAAAAAAAAAAAAACeO0uKymP/JrTG3cn1MTtTExLIZhS6pz9ozbfH4zkWx8tnxsWt/Q4/tp09YHkuveDOmjKntdOyJ3y7uMrxwzgXr8qqnJlmXc/+u/Q2xfW/nY6NHlseXp+6IuZXro7Q40W3fre3pePCX06IuVRv7DzYP9tQOqkvH3hqlxYmoGF0d37hyX877AQAAAAAAAAAAAAAAAACFIoAQAAAAAAAAAAAAAAAAgBPOlDG1UdtFYN6J7tDhTGzfWxcrt1VE4xtremw/OVET37hyX1RPuCtGDC/qdHz/weYu+5lbuT6Ki0ryqqu0uCxmT1yb89iGpnnR2t6S89iUMbWx9Io3Y/qE5T1eY0e6PlY+Oz4adt8d7Zm2QZvjwTRieFEsmbYr5n9ya5QWlxW6HAAAAAAAAAAAAAAAAADIIoAQAAAAAAAAAAAAAAAAAAZI84HGWPOLC///gX7pbtsmSpPxpYu2RW2yrsugu0OHM/HP26/LeaxidHVMGVPbq/ouHXtrJEqTOY89vnNRl+eNGF4U1RPuim9cuS8mJ2p6vM7W3cti5baK2L63Lg4dzgzoHB8P+YY6AgAAAAAAAAAAAAAAAMDxVlToAgAAAAAAAAAAAAAgIqK5uTmee+65iIj4yEc+EjNmzOhXf3V1dR1fT506NcrLyws9RAAA4CS2/2BzPPm7pbEjXZ9X+7mV6yP50etjxPDu/8zvF289FOnWVM5jn5u0rtd1jhheFDdN2RQrnx3f6diOdH38pzE3xMSyrt+PlRaXRW2yLq4a/9XY0HRDl7VFRLS2p2ND07z46Z6VMbfy+zHmtMoBmWsAgKHOejgMvObm5ti8eXM899xz0dLSEg0NDR3Hqquro6ysLGbNmhXTp0+PsrKyflyps5aWlti6dWts3rw569qJRCKuuuqqKCsri2uuuSY+9alPRUlJ/mHnR39v92Tq1KkRETF27NgoKvI4GQAAAAAAAAAAAICT3bD333///UIXAQAAAAAAAAAA+Rg2bFjWtl99AYCTS11dXcybN69j+4knnujXQ5eP/tlh/fr1UVtbW+ghAnASmzp1ajz//PMd288++2xMmzat0GUB9Mv2vXWxoWlep/0rrz751uUOHc7En/7XW/H6Hz8IgRn3kanx4b8c22M44JFzn9mzIrbuXpbXtarOWRjXVqyI4qKeQyda21vimz89I+ex2RPXRtU5d/R5zA27785Zc2lxIpZM25VXfYcOZyL1h8di82uLo7U93WP7yYmamD1xdZQW5xf2sf9gc+xrfTUOZv4YidLKOH3kuXnVNRQteXpYp32TEzVRm8w/cASgJz5rgxOH9XAYOC0tLVFbW5sVONiT6urqqKur63cQYVtbW8yfPz/q6/MLoo+IWL58eSxevDivIMJj/+3OVyKRiFWrVsX1118vjBCAk9bR/056fwsAAAAAAAAAwKloeKELAAAAAAAAAAAAAIBcbrnllmhrayt0GfRRbW1tDBs2LIYNG+Zh1wAAnLC2762Lbz83OZY2/EWsfHZ8bGiaFxua5sXKZ8fH0oa/iHUvTY/GN+7r9vwVPz87r/DBRGkylly+J2ZPXJ13iF59KvfP0qXFibh07K39GvtV45dGaXGi0/7W9nRsfHV+Xn2MGF4UU8bUxpJpu2L6hOU9tt+Rro9v/vSMaNh9dxw6nMnZpvlAY9SlamPJ08Ni5bPj49HtM2ND07y49/lkfOPfSuObPx0Tj+9cFO0Z7xcBgJPHLbfcEi0tLYUugz6yHl44W7ZsiTPOOKNX4YMREQ0NDZFMJqOxsbHP125qaoqKiopehQ9GRCxbtiwqKioG9Xs+nU7HvHnz4i/+4i/ivvvu63+HAAAAAAAAAAAAAJxwigpdAAAAAAAAAAAAAADkkk6n4zOf+Uxs3bq10KUAAAAnmdb2lqhP1cau/d2HVOza3xC79jfEq/s2RU2yLkqLyyIiYu97TbGh6YZIt6Z6vFZpcSI+P+mRmFg2o1c17mzZ0mV9X7zw6RgxvH9/HjhieFF88cKn497nk52O7UjXx1XjvxpjTqvMq6/iopKonnBX/Kczb4wnf7c0dqS7D+DYuntZPP/mgzHrvFUxZcwHAS2HDmfiid8ujsY31nR7bmt7OhrfWBM70o/1aV4BAE5E6XQ6amtrrYdDnjKZTNx44405w/+SyWRceeWVcckll8RHPvKR+P3vfx/PPfdcp7bpdDqmTZsWy5cvj6VLl0ZRUX7vsTKZTKxYsSKWLcsdRF9TUxOzZs2KcePGxeuvvx4REStXroxUKpV17WQyGalUKsrKyvK6biKRiKuuuirnsWeeeSbS6XTOYwsWLIiIiDvuuGMwbwkAAAAAAAAAAAAAx5kAQgAAAAAAAAAAAABOWA0NDVFXVxe1tbWFLgUAADhJ7GzZEo9un9mrc3btb4hvP5eMz096JP6fvd/vMWDviNkT18alY2/tdVhge6YtfvjKLTmPVZ2zMO9gwJ6MOa0yJidqco7nOy9fHUuveLNXtY8eWR61ybqYevbt8S875kRre7rLtq3t6djQNC9+umdlfPb8B+LHv7ktr0DHo89/dPvMmJyoiS/89ff6HcgIAFBo1sMhf7nCB2tqauJ73/teziDBO+64I+rq6qKlpSWqq6uzwgCXLVsW7777bqxevTqvaz/00EOdwgerq6tj3bp1UV5enrW/qqoqIiJqa2ujqakp/st/+S/R0PBB0PyREMI333wzr/DDq666Kurq6rpt09bWFo8++mhH6OARCxYsiClTpnTUAwAAAAAAAAAAAMDQN7zQBQAAAAAAAAAAAABAd+bNmxfNzc2FLgMAADgJ7D/Y3OvwwSOOBN7lEz44OVET37hyX1Sdc0efgvE2vjo/Z3hfaXEirq1YMaBzMueCdVFanMg53mf29O1a5aOqYukVb8bcyvU9tk23puLBX07rVfjg0Xak6+MXbz00oHMCAFAo1sOhZ3V1dZ3CB9evXx91dXU9BvmVlZXFyy+/HAsXLszav2bNmmhqaurx2s3NzZ3C/aqrq+MnP/lJp/DBY1VWVsZPfvKTqK6u7tiXTqfjscceG7C5KSkpiTvuuCP27dsXNTU1WcemTZs2YNcBAAAAAAAAAAAAoPAEEAIAAAAAAAAAAABwwrvuuusik8kUugwAAGAIO3Q4E/+8/bpBvUaiNBl3XpaK2mRdlBaX9amPve81dRly+PlJj0RxUcmA1lxcVBKfn/RIzmNbdy+L/Qeb+9TviOFFMWVMbXzz061Rdc7CPvWRr8d3LuhznQAAJxrr4dC1TCYTixcvztq3bdu2qK2tzbuPoqKiWL16daxduzZr/w033NDjufPnz8/aPhI+2FPw4dHX/slPfhKJxJ9D4BcvXjzg3/NlZWVRV1cXyWQya39LS8uAXgcAAAAAAAAAAACAwhFACAAAAAAAAAAAAMAJaeHCPwdUpFKpWLFiRaFLAgAAhrBfvPVQpFtTg9J3aXEi5lauj4WXvhxjTqvscz+HDmfiOy9fnfNYxejqmFg2Y1Dqn1g2IyYnanIe++ft18Whw30PwyguKonZE1fHksv3RMXo6kGpfyDqBAAopOXLl3d8nUqlOgWsAR944YUXIp1Od2zX1NREVVVVn/q69dZbs4IAU6lUNDU1ddm+paUlGhoasvb1JnzwiKKioli1alVERCSTyfja1742aPP1wAMPZG3/8pe/HLRrAQAAAAAAAAAAAHB89e63WAEAAAAAAAAAAADgOFm1alX89Kc/jVTqg4CQZcuWxWc/+9morOx7mEc+MplMvPDCC7F9+/Z47rnn4plnnol0Oh01NTUxderUmDJlSnz84x+PsrKyHvtqbm6O5557LiIixo0b1/EQ3EwmE4899lhs3ry5o/9EIhFXXXVVzJo1K6677rooKSnJWdux51VXV8fll18eFRUVcf311/f6QbdHj/n111+PzZs3xyuvvBKpVCqqq6vjggsuiEsuuSSmT5/e5ZiPHucRr7zyStbXdXV1XV6/tra2076j2x87H01NTfGzn/0s65rd9d/f8fXmvr7wwgtx//33Zz2I+OjXTl8fhAwAQP8cOpyJx3cuGJS+q85ZGNdWrIjiopJ+9/XMnhXR2p7OeawmWdfL3npn9sTVsSNd32l/ujUVv3jroag6545+9T96ZHnM/+TW2NmyJX74yi1djrOv0q2p2Nf2m34FQAIAFMrSpUvjRz/6Ucd6+Jo1a+KLX/zicVsPP7J2eux6+LnnnhsXXXTRCbUefmRNt1Dr4W1tbbFp06asfafienhERGNj43FfD/9v/+2/ZW2vWLGiz30dCQKcN29ex77vfOc7sXr16pztf/CDH2RtL1y4sE+vwYiI66+/vlf3oa/OOuusrO2nnnoqZswYnGB7AAAAAAAAAAAAAI6vYe+///77hS4CAAAAAAAAAADyMWzYsKxtv/oCACeXurq6rIe8vv/++9Hc3Bzjx4/v2JdIJGLXrl05H0Z8rKN/dli/fn3Oh/oeq6mpKa6++upIp3sOwsinz6PHVFNTE3V1ddHS0hLJZLLHa+zbty/rwbONjY0xZ86cbs9LJpPR0NDQqwfW9mbMy5cvj6VLl3Z6oO6x9663cv1cd/T927NnT5SXl8eWLVvilltuyVlrVz8b9mZ8CxcujFWrVvX4wOD+3NeamppYt25dXq9hYGiZOnVqPP/88x3bzz77bEybNq3QZQH0y/a9dbGhqfPPeSuvHnrrcvsPNsfKZ8f3v6OjJEqTcdOUTTF6ZPmg1zi3cn1MGdPze5r+6uqeR0R848p9UVo8MOEYhw5n4pk9K2Lr7mUDWv/xmqfBsOTpYZ32TU7URO0gB08CpxaftcGJI9d6eEtLS5xxxhkd+06l9fAja8BHnAjr4V2tFx/7uUVv5bse3t0cnMrr4UfP1ZF6+mvy5Mkd4Z+JRCL27t2bs9306dM7ghYjIlKp1KCHhA7EeAdjzgDgRHD0v3He3wIAAAAAAAAAcCoaXugCAAAAAAAAAAAAAKAr5eXlsX79+o7tdDod8+fPH5Rr3X333Xk9MPeIefPmxd133x2ZTCbva2QymbyvUV1d3dF3S0tLjw9bjvjgYbdnnHFGNDU15VXLokWLejXmZcuWxYUXXhgtLS19nudj1dTU5NXu7rvvjpkzZ+Zda1/Gt2bNmrjwwgujubm5V2PozX2tr6+PioqKAZ1DAAB69vofnxvwPj9aOmnAwgcjIv55+3U59ydKk5H86PWDNTVZpoypjYrR1TmP1acGLthvxPCimHTGZwe8/t+0bB60uQEAGGxlZWXHbT38vvvu6/V6+KJFiwZtPfyyyy474dbDj6wXF2o9fNq0aYO+Hn722Wf3aT28urq6IOvhx9Y6a9asAen3yiuv7Pg6nU5HW1tbznEfHT6YSCQGPXxwIAzWnAEAAAAAAAAAAABQeEWFLgAAAAAAAAAAAAAAulNbWxuPPvpox4Nd6+vr44YbbogZM2YM2DXq6upi2bJlWfuWL18en/3sZ+Pcc8+NiA8eerx58+a45557Oh6su2zZsti5c2fU1dX1eI2Wlpb427/9245zly9fHp/85CfjggsuiIiI5557LhYvXtxxPJVKxeLFi2PVqlVZDw1euHBhXHPNNR3nvfrqq/HVr341UqlUx7VuuOGG2LFjR7f1rFixItasWZO1r6amJm644Yasvn//+9/HggULOtqkUqlIJpPx5ptvRlHRB7+OPHXq1KwHY0dErFy5sqOmZDIZS5YsyVnHuHHjepy75557rtP9OfpBzWVlZZ3Oeeihh3KOb9asWTF16tSIiHj77bdj+/btncZ32WWXZY2vN/f12Gu899578bOf/SzrGul0OhYtWpTX6wYAgIHx5p9eGPA+d+9/ZsD62r63LtKtqZzHbpqyKUYMP35/Cvi5Seti5bPjO+3ftb8htu+tiyljBiaIMN3ac1BMbw3kPQEAKIRc6+GzZs2K2tqBC4Ouq6vLWq+M+GC9+m/+5m/iE5/4RETkXg9fs2ZNtLS05L2u2Zv18HQ6HTfeeGN873vfywq3G+z18HzWi49dDz82KDJi6K6Hp9PpPq2HHxnr8V4Pf+657GD5j3zkI/3uMyLikksu6TTOkpKSrH1vvfVW1vaXvvSlAbn2YPve975X6BIAAAAAAAAAAAAAGCTD3n///fcLXQQAAAAAAAAAAORj2LBhWdt+9QUATi51dXUxb968ju2j/61vaWnJCuGLiNi3b1/OB+0ecfTPDuvXr+/yAc2ZTCbOPvvsjr4TiUQ8//zzUV5enrN9W1tbfOYzn+l4AHRERGtra6eH0eYa0xHbtm2LqqqqnLX87d/+bVbfiUSio7benNdV24iI5ubmGD9+fNY1Nm7c2GX7lpaWqK2tzeq/uzmN+OBB2fX19RHxwUOIe/tw4aPv39FzUFNTE6tXr+723re0tMQZZ5yRte+JJ57oMrQy1/jWrl0bd9xxR872Xd3X7uYk12s4lUpFZWVlr+YFOHFNnTo1nn/++Y7tZ599NqZNm1bosgD6ZfveutjQ1PnnnpVXD711ubpUbexI1w94vwMxF63tLfHNn56R81jVOQtj9sTVgz4/x2p84754fOeCTvtLixOxZNquKC4q6UOv2bp6ffXXUHx9RkQseXpYp32TEzVRmxRcDgwcn7XBiaO79fC2traoqKg4buvhTz/9dJfrlCfDevix68VDbT18xYoVXX5ekWt8ESfvevixtezZs6fbucnXli1bYubMmd2O7djPVXp6TQyUo18bfXltjRkzJus+DNScAcCJ4Oh/J72/BQAAAAAAAADgVDS80AUAAAAAAAAAAAAAQE/KysrikUceydpXW1sbmUym332vWLEi6+Gr3YUPRkSUlJTEv/7rv2bte/TRR/O+XncPQi4qKop169Zl7TtS2xNPPNGr8+6///4ua5g/f37W9vPPP99l3xEfzP9PfvKTSCQSHfvmzZsXbW1tvZ7vvjh6Durq6rp90HZExKJFi7K29+zZ0+XDlo8eXzKZ7Ni3YMGCXo3viSee6PZhw2VlZbFx48asfd/61reOy/wBABAx7iNTB7zPitHVA9LP4zsX5dxfWpyImR9fNajz0pVLx94aidJkp/2t7enY+Or8PvTY2agPjRvwugfqngAAFFJJSUmntcTq6upBWw/vLhQu13r4qlX5/4w6WOvhx4awdbcefux68VBbD+8pLO7Y8aVSqT6th7e0tORdY0/he4O1Hr5r165O1xkIF1xwQY9tnnvuuazt/oYpDrbm5uZYtGhR1vd7TU2N8EEAAAAAAAAAAACAk4gAQgAAAAAAAAAAAACGhBkzZsTChQs7thsaGuKhhx7qd7/Lli3r+HrhwoV5PXy1pKQkli9f3rF9zz335PXw52Qy2e2DjSMiysvLsx78e+S87h4YfOS86uo/h2288sorOds1NzdHQ0NDx3a+D5wtKirqFAK5adOmfKe532pqanqcg4iIlpaWqK+v79P4HnjggT6NL5/7ExFRVVWVdW+7ukcAAAy8s06bMuB9trbvi/ZM/0JIdrZsiR3p+pzH/m7yxhgxvOi4zM+xRgwvipum5P55eEe6Pna2bClIXT0ZP+ryQpcAADAgqqqqstbDU6nUgK+H57t2WlJSEuvXr+/YfvDBBwd1PTyRSPS43lpWVpb3enhf14uPDdAbKuvh+QTj5VoP37p1a161JZPJbsMHjxiM9fCdO3dmbZeUlPS7z7467bTTCnbtXJqbm6O5uTmampqitrY2xo8fH2vWrMlqs2LFikKXCQAAAAAAAAAAAMAAEkAIAAAAAAAAAAAAwJCxatWqSCQSHdsLFiyI5ubmPvfX0tKStf3lL38573NvvPHGjq/T6XS89dZbPZ6zZMmSvPq+8sors7bnz5+f13mXX/7nsI1UKpWzzdtvv521vXr16rzHPGPGjKwHBr/wwgt5n9tf69aty6tdOp3O2v7qV7+a9zWOfSDy5s2b8zrv2Ac1d+dzn/tcx9dd3SMAAAbe/17y8QHvM92aim/8W2k07L67T0GE7Zm2+OErt+Q8NjlRE+WjqnrZ48AaPbI8qs5ZmPPYD1+5JQ4d7jl0Jpf9B5ujLlUbD/5y2oDXPPZ/++RxnSMAgMGUaz28qampz/0dux7em7XTqVOndnw90OvhR6+ZRkR87Wtfy+u86667ruPrfNfDexPAdux68fFcD8933b4Q6+Hf+ta38r7G0Z9tWA/vv/r6+hg2bFjO/8aPHx/jx4+PZDKZFUp5xLZt2/IK3wQAAAAAAAAAAABg6BBACAAAAAAAAAAAAMCQUVRUFM8//3zWvssuuywymb4FXxz7cN6ysrI+13bsg4xzOfohzd255JJLsrY/9alP5XVeRUVF1nZbW+cQlNdff71fY540aVLH16+++mqf56s3EolElJSU5NX22AdwV1ZW9nl8r7zySl7nnHXWWXn3f+w9Ovah3wAADI7S4rJIlCb731EOW3cv61MQ4ZO7lkZrezrnsTkX5BfAPdhmfnxVlBYnOu1vbU/HE79d3Ku+jgQPrnx2fOxI1/fq3HyN/fBFBZknAIDBkGs9/Oqrrx6w9fCjww17K5+14XzXw49dM50yZUpe540ePTprO9da67Hr4b0NYDt6vfinP/1pn+ert/Jdt+/veviVV17Z8fUzzzyT1zkXXHBB3v0fe4+am5sHdF5yfQZCtmQyGalUKqqqChtwDwAAAAAAAAAAAMDAKyp0AQAAAAAAAAAAAADQG+Xl5bF27dpYsGBBRHzw0OTFixfH6tWre93XsQ/n3bRpU97n7t+/P2v79ddfH7QHuJ522ml9Oq+lpaVTcN/mzZs7vq6uru51n1OnTo36+g/CQhoaGgZlvMe66qqr8m579PiSyd4HzMyaNatjfKlUKq9zxo4d2+extbW19Sv4EgCA/N00ZVOsfHb8oPW/dfey2Lp7WUyfsDyuGLc4iou6DtHe+15TNL6xJuexuZXruz33eBoxvCi+eOHTce/znX+2bnxjTVx01hdjzGndh5zsP9gcT/5u6aCFDh4xe+LaKC32szUAcHLJtR5+4403Rl1dXa/7OnY9fOvWrXmfe+x6+B//+MdBG/NZZ53Vp/NyrbUWYr24v2pqavJu+8ILL3R83ZdAyUsuuaTj63Q6HZlMJoqKun8MSSHXs4+uNyL3ZyB98fbbb/f6nFdffbXXgZbHUzKZjE2bNp3QNQIAAAAAAAAAAADQPwIIAQAAAAAAAAAAABhybr311ti0aVNHAN6aNWvimmuuiRkzZvSqn6MfPhwRMW/evEGtu68Peu1PwN2xnnnmmY6v+/Kg4NGjR2dtt7S0DPoDhydOnNin8yZNmtTvazc3N/d433p6IDMAACeG0SPLY/bEtfH4zgWDep2egggPHc7Ed16+Oue5FaOrY8qY2kJPVZYxp1XG5ERNzgDBDU03xMJLX44Rwzv/THy8ggcjIhKlybh07K2FnioAgEFxxx13ZK2H19fXxw033NDr9fCjw+oiBn89fCDXtQfC8Vov7q/erLe3tLR0fH3VVVf1+9pvvfVWj+MbiMC/gfL2228PyP14/fXXs7bHjRvXqU1lZXbw+mCGcHaluro61q1b1+Xxyy67LNLpdER8EJh5It0rAAAAAAAAAAAAAAbe8EIXAAAAAAAAAAAAAAC9VVRUFHV1dVn7brnllqyH7Z5MBjLgbiAeQny0v/qrvxr08VdUVPTpvJP19QAAQN9dOvbWSJQm+3x+aXEiJidq8mq7dfey+Ma/lUbD7rujPdPWsf8Xbz0Ure3pnOd8btK6vPo+3uZcsC5KixOd9qdbU/GLtx7K2rf/YHPUpWpj5bPjj0v4YETETVM25QxBBAA4WQzEevjxXi8dyHXtgTBU1osvueSSPp33yiuvFLr0QXdsCOD27dsHpN9jwznPOuusTm0Siez3Q7t27Tru4y8rK4vy8vIu/3vkkUey2i9atOi41wgAAAAAAAAAAADA8XNi/cY2AAAAAAAAAAAAAOSprKwsnnjiiZg5c2ZERKTT6aitrY2tW7f2uc89e/b0q56hpr6+vtODq3ty7IN4S0pKCj2MLjU0NPT6nP379w+Z8QEA0HsjhhfFwktfjid+uzga31jT6/NLi8+I2mRdXPuxFfHk75bmFbC3dfey2Lp7WUyfsDwqRv9NPL5zQc52syeujdEjyws9RTkVF5XE5yc9Eo9un9np2OM7F8T5ZbMiIvKekw/mMhGzzlsV//4f+7uck54kSpNx05RNJ+y8AQAMlIFYD586dWrU1//5Z7VTbT28L+vFx4bMjR07ttDD6FIqler1Oceuh5/ojg0BvOeee+KOO+7oV59tbW2xZk32e8Py8vJO7Y59ze/cubPQ09HJjBkzIplMdrwW6uvr46tf/Wqn4EYAAAAAAAAAAAAATg4CCAEAAAAAAAAAAAAYsmbMmBE1NTUdD01uaGiIurq6qK2tzev8Yx+4nOuhsmRraWkpdAmD6rnnnsvaHooP0gYAoHsjhhfF7Imr46KzvhjfefnqaG1P531uujUV2/fWxZQxtX0OIsyltDgRl469tdBT062JZTNicqIm51hXPju+V33NrVwfyY9eH4cO/6/4xr+V9qme2RPXxqVjb40Rw/2ZJABwasi1Hn7fffflHcA2evTorO2xY8dGUZGfpbpzbMjcyTZfx66Hn8gBixEfrNcnEolIpz94D5dOp6OxsTGqqqr63OemTZuytqurq7tsW11d3RFkWV9fH+vWrYuSkpJCT0un8Ywf/+f3ZzfccEPs2LGj0GUBAAAAAAAAAAAAMAiGF7oAAAAAAAAAAAAAAOiPdevWRSKR6NieN29eNDc353Xuueeem7Wd73lD2dSpU/s85kwmE88880zHdncP4i2UWbNmZW03NTX1eXzJZLLQwwEAYBCNOa0yll7xZnzpom0xe+LamJyo6TiWKE1GojT3z4ObX1sc7Zm2iIgYPbI8apN1seTyPTF9wvI+1/LFC58eEkF6syeu7tf50ycsj29+ujWmjKmNEcOLYuOr83O2Ky1OxPQJy7PuScXo6pg+YXncPOWJ+MaV+6LqnDuGxJwBAAyk733ve1nr4QsWLMh7jXfcuHFZ22+99VahhzPojl0PP9nWi49dD29sbOzV+UePL5FIDImAxS996UtZ2/fff3+/+lu5cmXW9pe//OUu2x57bNWqVX2+bltbW9x9990D/rlUeXl51NT8+X1UKpWKLVu2DOg1AAAAAAAAAAAAADgxCCAEAAAAAAAAAAAAYEgrKSmJp59+Omvfddddl9e5F110Udb2c889V+jhDLopU6ZkbX/729/O+9wXXngh0ul0x/YFF1xQ6OF0cuxDtL/1rW/1eXxXXnlloYcDAMAgGzG8KMpHVUXVOXdEbbIuVl79fqy8+v348tQdsfDSl6O0ONHpnNb2dKfgvNEjy6N6wl3xzU+39jqIsLQ4EaePPLdX5xRKaXFZzJ64ttfnHQkerJ5wVxQXlURExN73mmJHuj5n+89PeiSqJ9yVdU/mf3JrVE+4KyaWzYjS4rJCTwUAQEEUFRX1eT384x//eNb2qbge/p3vfCfvc4fCevGx6+G9CeNrbGzMGt/1119f6OHk5cYbb8zarq+vj5aWlj711djYGKlUKmvfpz71qS7bH3ts2bJl0dbW1qdrf+Yzn4lly5bF+PHjY/LkyQMaRLh6dXZw/C233BKZTGbA+gcAAAAAAAAAAADgxCCAEAAAAAAAAAAAAIAhr7KyMpYv/3PIx7EPjO1KWVlZ1NTUdGwvXrw474ewtrS0RFNTU6GH3mtVVVWRTCY7ttesWZP3A3Jvu+22rO0vf/nLeZ1XX1+fV7vBGF99fX3e4/tv/+2/9Wl8AACcnEYML4q/m7wx57Ed6frY+17n9wPFRSW9DiJsbU/HN/6tNBp23x3tmb6FVxwP7Zm2aNh9dzy+c0He5+QKHoyIOHQ4Exuabsh5TsXo6phYNqPQwwUAOGFZD89ff9bD+7pePFTWw48NKxwq6+Hl5eVZr+OIiGQy2evXZ2NjY0ybNi1r39q1a6OkpKTLc0pKSrK+9yI+CBLsbbjffffdFw0NDR3b+/bti7Fjxw7YHJWVlWXVmU6n46GHHhqw/gEAAAAAAAAAAAA4MQggBAAAAAAAAAAAAOCksHTp0qwH7eZrxYoVHV+n0+ms7a60tLREMpmMZDIZtbW1eT/Q90SxZMmSrO3PfOYzPY7h7rvvznqQdU1NTZSXl3fZfurUqVnbzc3Nx218DzzwQKfxtbS09Di+ox/429P4AAA4NZSPqorJiZqcxzY03RCHDucOmjg6iLCr84+1dfeyEzKI8Ejw4Df+rTS27l6W1zldBQ8ekfrDY5FuzR2U87lJ6wo9ZACAE95Arof3FJ421NfDc60X57Me3pv14qG4Hn50UOJQWw9fty77PUM6nY5kMhmNjY15nZ8rfDCRSMStt97a47lLly6NRCLRsd3Q0BBnn3123gGIjY2NsWBBdqj7qlWroqioaEDnaPHixVl1LliwYMh97wIAAAAAAAAAAADQPQGEAAAAAAAAAAAAAJwUioqKYtOmTb0+r7y8POtBzcuWLYvp06fnfEBvJpOJpqamSCaTkU6nIyKivr4+fvWrXxV6+L1y/fXXd3pAbkVFRTQ1NXV62HRzc3NMnz49li3LDhrpKajx3HPPzdoeP358bNmy5bg84LaqqqrT+JLJZJfjq62t7fX4AAA4dcyeuDrn/nRrKn7x1kPdnjti+F/G7v3P9Op6AxFEuP9gc+xs2RKt7S19Oj8i4tDhTGzfWxcrt1XkHTx4xKVnfyln8GDEB4GGG5rm5Tw2fcLyGD2yvM81AwCcKoqKirIC8vJVXl4e1dXVHdvLli2Lv/3bvz2p18MvueSSXq2H92W9eMqUKVnb48ePj7q6uuO2Hn70Zxw9rYcvWrRoyK+Hl5SURCqVyrqvERHTpk2Lu+++u1MY4JHX8n333Re1tbWdwgcjIp5++um8QgCLiori+eefz7r2kQDEu+++O7Zs2RLNzc1Zc3/k+rmuXV1dHbW1tYMyR6tWrcraN3/+/AG/DgAAAAAAAAAAAACF0/NvvwIAAAAAAAAAAADAEFFeXh7r16+PefPm9eq8hoaGqK6ujlQq1bF9xhlnRERETU1NRES0tLTkfKDztm3boqqqqtBD75WioqJ4+umn4+qrr+54cPSRB+RGRCSTyZg0aVLU19fnPH/9+vVRXl7e7TVmzJgR1dXVWXM2c+bMnG3ff//9AR9jf8a3du3aHscHAMCpo7S4LOZWrs8Zmvf4zgUxOfGFKC0uy3nuL956KFrb03267tbdy2Lr7mUxfcLyuGLc4i4D/SIiWttbYkf6B/Hqvk2xa3/2+5bS4kRMGH1VnF82KyaVXddtPxEfBA+m/vBYbH5tcZ9rr0/VxvxPbs15bOOruUMvSosTcdX4pX26HgDAqaisrKxP6+F1dXXWwwd4PbyqqqrTenhX92Uw1sM3bdoUl1122Sm1Hl5ZWRmpVCpqa2uz5n3ZsmVZAYuJRKJjXrqybdu2qKyszPva5eXlsWvXrvjMZz7T6dq9UVNTE9/73vcGbY6uv/76WLlyZcf3en19faxYsWJI3m8AAAAAAAAAAAAAOhte6AIAAAAAAAAAAAAAYCDV1tZGdXV1r84pKyuLl19+uePhykerr6+P+vr6k+Zhy0cceThvrrlKpVI5H0acSCRiz549UVtbm9c16urqIpFIFGx8u3bt6tP47rjjjoLUDADAiSv50esjUZrMeezxnYty7t9/sDke37kg57HpE5bH9AnL87r21t3L4hv/VhoNu++O9kxbp+M7W7bEN396Rjy+c0Gn8MGIiNb2dOxI18eGpnmxcltF7H2vKed1Dh3OxPa9dbHi52fHhqZ5eYUPdjUnu/Y3xM6WLZ32732vKXakcweffH7SIzFieFFecwIAwAesh+fneK2HHwn9O96OBOL1dnypVGpIr4eXlZXFT37yk1i4cGGXbboLH6ypqYl9+/b16XVdUlLS47W7s3bt2qirq4uiosF7D1RUVBQPPPBA1r758+f3sTcAAAAAAAAAAAAATjQCCAEAAAAAAAAAAAA46fzrv/5rr4PvioqKoq6uLtavX5/zwctHW7hwYaRSqSH7sOUjjjycd+3atd0+pLq6ujqWL18eb775ZpSXl/eq/zfffDOvOR0MRx4AnM/4Fi5c2OvxAQBw6hgxvCjmVn4/57Ed6fqcYXv/vP26nO0Tpcm4avzSqJ5wV3zz0619DiI8dDgTDbvvjke3z8x7HK3t6bj3+WQ0H2js2NeX4MHJiZpYcvme+PLUHTE5kftn/R++cktWYOKhw5nY0HRDzrYVo6tjYtmM3t4WAACif+vhTzzxhPXwY/RnPfzll18u6Hr41q1be7UeXllZedzrHGhFRUWxevXq2LZtWyxcuLDH74VEIhHLly+PVCoVdXV1UVZWNmDX7kkymYwnnngi/uM//uO4BT9WVVVlvR4aGhqisbGxHz0CAAAAAAAAAAAAcKIY9v77779f6CIAAAAAAAAAACAfw4YNy9r2qy8AwGBraWmJ3/72t/GnP/0pLrjggoiIGDt2bBQVFRW6tEHT3Nwcb7/9dkREfPzjH+/Xw3dPREfu6ck6PqBwpk6dGs8//3zH9rPPPhvTpk0rdFkA/bJ9b11saJrXaf/Kq0/ddbnHdy6KxjfWdNpfWpyIpVe8GSOGf/Beoau5i4i487JUjDktO+ijPdMWP399VWzdvSzvWhKlyUi3pvo8lukTlsfpf1URm19bnFfoYMQHwYPXfmxFjB5ZnlX7ym0VOfuYnKiJ2mRdj3Oy5PI9WX2eipY8PazTvqPnD2Ag+KwN6M6puB5+sq8XHz2+s846q1eBikNZc3NzRES8/fbb8frrr0dlZWWcdtppUVJSMqj3OJPJxFtvvRUREa+++mpERMf30qky9wBwPB39Htf7WwAAAAAAAAAATkUCCAEAAAAAAAAAGDI8FBUAAIATlQBC4GQkgLCz7sL2pk9YHtUT7or2TFt8499Kc55fdc7CmD1xdbf99zaI8HjIFTx4tJ0tW+LR7TNzHrvzslScPvLcLufkyLyd6gQQAseDz9oAAAA4WQggBAAAAAAAAADgVDe80AUAAAAAAAAAAAAAAAAAwFBQXFQSs85blfPY1t3LYv/B5tj46vycx0uLEzHz46u66z6Ki0qiesJd8c1Pt8b0CcsLPdyYnKiJJZfvidpkXZfhgxERE8tmRMXo6pzHvvPy1d3OyVXjlxZ6mAAAAAAAAAAAAAAAAAAwpAggBAAAAAAAAAAAAAAAAIA8TRlT22XY3spnx8eOdH3OY383eWOMGF6U1zUKHUSYb/Dg0WqSdTn3t7anu5yTWeetyntOAOifTCZT6BIAAAAAAAAAAAAAAAAYIAIIAQAAAAAAAAAAAAAAAKAXPjdpXa/aT07URPmoql5f53gHEfYlePCI0uKymFu5Pu/2idJkTBlTO+hjAuADb731VtZ2dXV1H3sCAAAAAAAAAAAAAACg0AQQAgAAAAAAAAAAAAAAAEAvjB5ZHrMnrs2rbWlxIuZc0LvAwmMdCSK887LUoIynP8GDR5sypjYSpcm82t40ZdOgjAWA/JSVlRW6BAAAAAAAAAAAAAAAAPpIACEAAAAAAAAAAAAAAAAA9NKlY2+N0uJEj+1mnbcqiotKBuSaf/qfbw7KWGZPXN2v4MGj5RMsWHXOwgG7HgD5efXVV7O2BRACAAAAAAAAAAAAAAAMXQIIAQAAAAAAAAAAAAAABtgf/vCHQpcAwCAbMbwo/m7yxm7bVIyujiljagfsmgczfxyUsbQfahuwvkaPLI/ZE9d2eby0OBHXVqwYlHEA0LWXXnopa/uSSy4pdEkAAAAAAAAAAAAAAAD0kQBCAAAAAAAAAAAAAACAfpoyZUrW9s033xy/+c1vCl0WAIOsfFRVVIyu7vJ4TbJuQK+XKK0clHF8+C/HDmh/55fN6vJYafEZMWL4Xw7KOADo2o9+9KOs7crKwfk3BQAAAAAAAAAAAAAAgMEngBAAAAAAAAAAAAAAAKCfVqxYEaNHj+7Yfu+99+KSSy4pdFkADLLW9pbYtb+hy+Pv/a/0gF7v9JHnFnrIeXnyd0u7PJZuTcUv3nqo0CUCnFLa2toilUpl7Tv//PMLXRYAAAAAAAAAAAAAAAB9VFToAgAAAAAAAAAAAAAAAIa6D3/4wzF37tx44IEHOva99957hS6Lk9CBAwfin/7pn7L2JZPJ+MIXvtDnPn/wgx90CqS55557Cj1UGBLqU7XdHv/Oy1fH0ivejBHD+/+nfM0HGuPHv7ltUMax4udnx6zzVkXyo9f3u9bmA42xI13fbZvHdy6I88tmxeiR5YMyHgCyPfroo1nb1dXVUVTkz8wBAAAAAAAAAAAAAACGKn8ZAgAAAAAAAAAAAAAAMABWrFiRFUAYEbFv374444wzCl0avZQr5K8/BjLM7+DBg/HUU0912t+fAMJUKtWpTwGE0LPte+ti1/6Gbtu0tqfjF289FFXn3NHn6xwJHky3pvrcR09a29OxoWlebH5tcb+CCA8dzsS/7JiTV9sfvTI/5n9y66CNCYA/W7duXdb2l7/85UKXBAAAAAAAAAAAAAAAQD8IIAQAAAAAAAAAAAAAABgAH/7whzvtu+2222Ljxo2FLo1e6irkr6+E+cHJpz3TFptfW5xX28d3Lojzy2bF6JHlvbrG8QgePFZ/gwh/8dZD0dqezqvtrv0NsX1vXUwZU3vcxgdwKmpsbIxUKvvfkquvvrrQZQEAAAAAAAAAAAAAANAPwwtdAAAAAAAAAAAAAAAAwMni9NNPz9r+0Y9+FPv27St0WcApZPPmzfFP//RPkclkCl3KSW3jq/PzDtqLiPjRK/Pzbtt8oDG+/dzkePCX045r+ODRjgQRrvj52bF9b10cOtzz66m1vSUe37kg57HS4kTO/ZtfWxztmbaCjBHgVJDJZGLOnDlZ+5YvXx5FRfmHywIAAAAAAAAAAAAAAHDiEUAIAAAAAAAAAAAAAAAwQG6//fZO+2677bZClwWcQnbv3h1f+cpX4mMf+5ggwkGys2VL7EjX5zx285Qncu7ftb8htu+t67bfEyF48Fi9CSJ8fOeinPsrRlfHl6emuux/46v5hzMC0DuLFy+OdDo7MPfGG28sdFkAAAAAAAAAAAAAAAD0U1GhCwAAAAAAAAAAAAAAADhZfPWrX437778/3n333Y59P/rRj+LBBx+ML33pS4UujzyNHDkyrrnmmpzHDhw4EC+++GKn/V21h0Jpbm6Or3zlK3H//ffH7bffHnfeeWcUFflzsv46dDgTP3zllpzHqs5ZGBPLZsTsiWvj8Z0LOh3f/NrimFR2XRQXlWTtbz7QGD/+zW15hw6WFidi1nmrIvnR6+N37z4dj26f2etx3DzlifjY6VdH6g+PxebXFkdre7rb9keCCDe/trjj2iOG//n11HygsctQxs9NWhelxWUxt3J9bGia1+n4jnR9TD379igfVdXPuwPA0RobG2PNmjVZ+9auXRvl5eWFLg0AAAAAAAAAAAAAAIB+8hejAAAAAAAAAAAAAAAAA+RDH/pQ3H777XH33Xdn7b/tttsiIoQQDhGjRo2Ke+65J+exd955J2bPnt1pf1ftodAEEQ6sJ36bO6yvtDgRMz++KiIiLh17a/zb7+/p1K61PR0bX50ftcm6iOhf8OCR8L+JZTPiG1fui3UvVefVT8Xo6qhJ1kVpcVlEREwZUxvJj17fryDCiIh/2TEnZ/vpE5bH6JHlERGR/Oj18dM9K3PW+S875sTSK97MCjUEoO8aGxtj2rRpWfuSyWTceuuthS4NAAAAAAAAAAAAAACAAeCv8QAAAAAAAAAAAAAAAAbQV7/61Xj88cfjV7/6VdZ+IYQcsWvXrnjmmWeiubk5XnrppXj33XejoqIiJkyYEOXl5TFz5sw488wze93vr371q2hoaIjf//738eKLL8bFF18cU6ZMiYsuuij++q//esBC5zKZTDQ0NMSbb74Zzc3N8dRTT8Xpp58en/zkJ+Pyyy+PioqKqKio6LGfAwcOxMaNG6O5uTl2794du3btioiIa665pl/zQG6CCPtv73tN0fjGmpzHPj/pkY7wvBHDi+LvJm+MB385rVO7Hen6GPeRqfHiW+v6FTyYfbwsFl76cvzu3afjrf/vpdhz4NnYtb+h4/jkRE2M+8jUOOu0KVE+qqrT+SOGF3UEEb75pxfyCkU8OohwwuirugxlvGr80qzr3DRlU6x8dnzO/p747eKYPXH1oNw7gFPJfffdFwsWLOi0//vf/75/+wEAAAAAAAAAAAAAAE4Sw95///33C10EAAAAAAAAAADkY9iwYVnbfvUFAACAE9X//J//My677LJOIYQREf/4j/8Yc+bMibKysigpKSl0qfTSO++8E7Nnz+60/6WXXurx3EwmEwsXLowXX3yxx7Z///d/HzfffHOnkJhc17/44ovj3HPPjQ0bNnTZ38UXXxyrVq2KkSNHdjr2ta99LZ566qm8xrNr1664/fbb49133+22/q985Svxuc99LmfITSaTiWXLlnW6ZlfzMH/+/B7b8WerV6+OO++8s8d25eXlPQYRbt9bFxua5nXav/LqU29d7tDhTKz4+dk5g/YmJ2qiNlnXaX9dqjZ2pOv7fM2eggd70treEqXFZX26dvOBxryCCLvzpYu25Qw8bHzjvnh854Kc5yy5fE+MHlne52sOZUueHtZpX1evLYBc2traYv78+VFf3/nfnvXr10dtbW2hSwQAAIABc/Tvk/pdUgAAAAAAAAAATkXDC10AAAAAAAAAAAAAAADAyeZDH/pQPP/883HXXXfF6aefnnXsK1/5SowfPz7OOeec+M1vflPoUjmOli1bllf4YETEww8/HI8++mhebV988cVuwwePtPnMZz4TBw8e7HP9P/jBD2Lu3Lk9hg9GfBC0uXDhwshkMln7j4Qw5hM+eGQe1q1b1+ea6Vpzc3N85StfiY997GPxT//0T53uFdl+8dZDOcMHIyJmT1zdq/09KS1OxNzK9bH0ijdjypjaPoUPftBP38IHIyLKR1XFl6fuiC9dtC0Spclenz85UZMzfDAi4tKxt0ZpcSLnsX/efl0cOuy1CNAbTU1Ncffdd0dpaWnO8MFt27YJHwQAAAAAAAAAAAAAADjJ9O0vDwEAAAAAAAAAAAAAAOjWhz70oVi+fHl89atfjW9961tx//33ZwW37d+/Py6//PJ4+OGH46Mf/Wihy+Uop59+epx//vkD2ue6devyDt074uGHH46ZM2fGmWeeOSA1vPvuu/H9738/5s+f3+tz33nnnfjHf/zHXp3z4osvRkNDQ1x77bUd+5qbm/MOYTx6Hs4///yYNm1a7Nu3L377298OyHycrH7/+9/3qv2RIML7778/br/99rjzzjujqMifnR1t/8HmeHzngpzH5lau7zLo7/9t+22UFie6DC7MZfqE5XHFuMVRXFRS6GFHxJ+DCJsPNMaPf3NbpFtTeZ33h9ZXovlAY84QwhHDi+KLFz4d9z7fOdgw3ZqK1B8eiyljBGUdraWlJdra2gpdBnCCeO655yIiYvPmzTkDB49IJBKxcePGqKqqyrdrAAAAAAAAAAAAAAAAhgh/CQoAAAAAAAAAAAAAJ6nm5uaOr8vKyqKk5MQIMQE41RwJIrz11lvjqquuitdee63j2Lvvvhtz5swpdIkc47LLLusIdhkoZ599dpx++ukdIZSnn356rFy5Ms4777yIiHj55Zfjm9/8ZlZIZUTEs88+G1/4whfyvs7f//3fx0UXXRT/9//9f+cM+nv44Yfjhghk2FQAAIAASURBVBtuiJEjR/aq/v/yX/5Lp30XX3xx1NbWxqWXXhrNzc3xzDPPxMaNG7PG8O1vfzs+9alPdVzv5Zdf7tTPNddcE5///Odj3LhxcfDgwXj22Wezwg6vueaaOPfccyMior6+Pu68884BvTd8IFcQIRGHDmfin7dfl/NYojSZMyivt2F9ESde8OCxehtEmG5NxYO/nBaJ0mR89vwHOgURjjmtMqrOWRiNb6zpdO6GpnnxsdOndxnseKoZNmxY1NTUdBsyBnCsZDIZDQ0NUVbm/6UAAAAAAAAAAAAAAAAnIwGEAAAAAAAAAAAAAHCSGj9+fMfX69evj9ra2n70BkB/jRkzJp555plOIYScGq699tqorq6OhoaG+O53vxsPPvhgjBo1quP4tGnT4hvf+Ean0LdUKpVXAOE111wTX//61zuC/h544IE4cOBAzJ07t1Oo4c9+9rO49tpr8679nXfeiV27dmXtO/3002PNmjVRVPTBnydVVFRERUVFRHwQcnjEu+++G6+99lp84hOf6BjPsW6//fY488wzIyJi1KhR8YUvfCHOO++8+OUvfxlz5szJmicG35EgwjVr1kTtlz4dcWGhKxp8hw5n4k//6614/Y/PxZt/eiEiIs7+8CWRKK2MV/b9uMuwvZumbMra7kvw4ORETcy5YN0JGzx4rCNBhN/86ZhobU/32L67IMKZH18VO9KP5eynPlUbn5u0Ll7/43Px7r/vin1tO+P8slmRKK2M00eeO2TmC+B4SyQS8cgjj8SMGTMKXQoAAAAAAAAAAAAAAACDSAAhAAAAAAAAAAAAwEmmubk5K3iuJ9XV1VFWVhZTp06Nc889N66++uqOIBkGT2/vU3f27NkT5eXlhR4SAHkYM2ZM/OpXv4q77rorvvOd78SBAwcKXRLHUVFRUVx77bVdhv9NmjSp077du3fn1ffNN9/cET54xKhRo2LOnDlZgYAREc8++2yvAgh///vfd9r3n//zf875M+NVV13V6Xrp9J/DxXKFCf73//7fo7a2NiZNmtRx/BOf+ERHaCGF8elPfzqum3tl/Ovv/rnQpQyaQ4cz8YNf3xg70vW9Pnf6hOUxemR5RPQtePCIP7S+EiOG/2Whp6JXtu+tyyt88Gi5gghHDC+Kz096JB7dPrNT+137G2Lls9nvl46+T4nSZNw0ZVPHPQA41S1cuDC++MUvRmVlZaFLAQAAAAAAAAAAAAAA4DjwZBgAAAAAAAAAAACAU1xDQ0NERNTXfxDmkEgkYtWqVXH99dcLIoQTWF1dXcfXU6dOFUIJQ8iHPvSh+L/+r/8r7r777rjrrrvi17/+tX9zTzBnnXXWoPZ/8ODBeO211yKdTsevf/3rOHDgQLz00kvx7rvvdmq7a9euvPrs6t+BXIGAvfX222932vezn/0sUqnOYWu5QjV//etfdwQe/vVf/3Wn4y+++GK8+OKLHdunn356zJkzJ2bOnBlnnnlmVtuzzjor/o//4//o13hOdqlUKl5//fU+n3/hhRfGww8/HBdeeGFs31vX535OdHvfa4rvvHx1r4P0IiJKixNx1filsf9gczz5u6V9CjA8It2aitQfHospY2oLPSV5ac+0xebXFvdrvEcHEU4smxGTEzW9nsN0aypWPjs+Zk9cG5eOvTVGDD+5/x2dOnVqoUsATiBTp06N0aNHx7hx4+LjH/94lJWVFbokAAAAAAAAAAAAAAAAjrOT+6/qAAAAAAAAAAAAAOi1dDod8+bNi8WLF0cqlfIQczhBzZs3r+Pr9evXCyCEIehIECGnjl27dsXXv/71vEMF83XNNdd0GWKZ69+Hp556Ku655568+88VNHh0YGBPjg4lrK6uju9+97vdzsG7774bDz/8cDz88MNxzTXXxM033xwVFRURETFnzpyYM2fOgM7fyWb16tVx55139vq8UaNGxdKlS+Mf/uEfCj2EQdew++7YuntZn8//9Llfix/8+sa8Q/NKixMx67xV8ZuWzTnP2dA0LyaVXRfFRSWFnpoePblrac7QxtLiRCyZtiveee9X8ePf3Bbp1lS3/RwdRHjl+CWxe/8zfQqDfHzngnjxrXWx8NKXT9oQwvfffz8iIu64445ClwIAAAAAAAAAAAAAAADACeLk/Is6AAAAAAAAAAAAADosX748brzxxi6Pv/rqq/HHP/4xVq5cmRUuk06no7a2Nn7yk590GWjDwOnpPnVn7NixhS4fAOjBk08+GV//+teP+3Vz/Rx3+umnF2weioqK4sEHH4x/+qd/iqeeeqrH9k899VQ89dRT8eyzz8bIkSMLVvfJ7qabboqHHnooPvShDxW6lEG3972mfoUPRnwQepePI8GDyY9eHyOGF8XHTp/eZWjhxlfnR22yrtDT0639B5uj8Y01OY/NOm9VFBeVRPmoqvjy1B3RfKAx7yDCDU3zoj/Sral44reLY/bE1YWeIgAAAAAAAAAAAAAAAAA4LjwJBgAAAAAAAAAAAOAkV1FREeXl5V0eP3KstrY2GhsbY86cOZFOpyMioqGhIRYvXhyrVwtyGGw93ScAYOg6cOBAl+GDFRUV8Td/8zdx9tlnR2lpadx555196r8rmUym075PfvKTver/8ssv7xQWePHFF8eoUaPyOj+ZTGZtjxo1Ku655574+te/Ht///vdj48aN8e6773bbx89+9rO49tprez03dO/CCy+Mhx9+OC688MJCl3JcHDqcie+8fPWgX+fY4ME/7y+L2RPX5gww3JGuj6vGfzXGnFZZ6Gnq0j9vvy7n/kRpMqaMqc3a19sgwv5qfGNNXHTWF0/o+QMAAAAAAAAAAAAAAACAgSKAEAAAAAAAAAAAAIAOVVVV8fzzz8f48eM79q1ZsyZWrVoVRUV+9RQAoC9eeOGFTvvmzp0bt9xyS1aI365du/rU/4svvhgHDx6MkSNHdjr261//ut/1l5aWdto3e/bsfgcCjhw5MubPnx/z58+PTCYT+/bti3//93+P22+/vVMg4Xe/+10BhANo1KhRsXTp0viHf/iHQpdyXD3x28XR2p4etP67Ch482qVjb40X31qXM5BvQ9MNsfDSl7s8t5C2763rMkTwpimbujzveAYRfuflq2PpFW+ekPMHAAAAAAAAAAAAAAAAAANpeKELAAAAAAAAAAAAAODEUl5eHsuXL8/a95vf/KbQZQEADFm5QgAvvfTSrPDBiIiXX365z9d4/PHHO+3LZDLxwx/+sNP+Y6/bk3PPPbfTvu9+97tdtj948GBkMplu+3znnXfiySef7NguKiqKM888MyoqKuJf//Vf4+KLL85qv2vXrnjnnXf6PD/82U033RTvvPPOKRc+eOhwJhrfWDMofZcWJ2Ju5fpYesWbMWVMbbcBeCOGF8Xcyu/nPJZuTUXqD48Veqo6ac+0xebXFuc8VnXOwhg9srzHPo4EEX7pom2RKE0OSp2t7el4808v9L8jAAAAAAAAAAAAAAAAADjBFfW/CwAAAAAAAAAAAABONjfeeGMsW7asY7upqSkqKyu7bJ/JZOKtt96K9957L5qamiIiorKyMhKJRJSVlfW7niP9v/rqq/HHP/4xxo0bF2eddVaUl5cP2JiPvcbUqVNj7NixUVR06v7KbUtLS6TT6Whqaopx48bFxz/+8QG5n7n6j8j/NXP0eR/5yEfiggsuGLDXQnNzc7z99tvx+uuvR2VlZZx77rlRUlIyoGNua2uL5557rmPMA32N/ow9Ijq+jz/ykY/ERRddNKD3HOBUdeDAgU773n777chkMlFUVBSZTCZ+/etfx49//OM+X+Mf//Ef48c//nH81//6X+Ov//qvo6GhIb797W/Hu+++26ntZz7zmV71fSQYcNeuXR37du3aFU8++WR86lOfipEjR3bs/9WvfhVLliyJiIj7778/Kioqsvp655134v7774+nnnoqIiLefPPNmD9/flabkSNHxv79+zvVcfR16L0LL7wwHn744bjwwgsLXUpB/Ol/vTXgfZYWJ2LWeasi+dHruw0dPNaY0ypjcqImdqTrOx3b0DQvJpVdF8VFhf/58Igndy2N1vZ0zvFfW7GiV30dCSJsPtAYP/7NbZFuTQ1orQf+5+tRHlUFnS8AABhIw4YN6/j6/fffL3Q5AAAAAAAAAAAAAMAJ4tR9GgoAAAAAAAAAAAAAXTo2DG3z5s1RW1vbqV1zc3N8+9vfjjVr1nTb39q1a+PWW2/tdZhfXV1dLF68ONLpdM7jyWQylixZ0lHb0Q/iXb9+fc6ac11j5cqVkUqlurzGlVdeGatWrTolwghbWlqitrY2GhoaumxTU1MTt99+e1RV9RzscfQ92bNnT5SXl0dzc3MsXbo06uvru+x/9erVnYLvmpqa4oYbbujyXtXU1MT3vve9Xt+nnvpNJBJx1VVX5azpWM3NzTF+/PiO7SMPhG5qaopvfetbXY45kUjEI488EjNmzMh5vK6uLubNm9fldefNm9fl8WQyGTt27Ojy3C1btsQtt9zS7ffZ5z73ubjxxhsHNPQT4FRy+eWXdwTuHfGP//iP8T/+x/+I6dOnx9atW3MGBfbWrl274otf/GK3bSoqKjqFAubjv/7X/9qp769//esREXHxxRfHqFGj4qWXXsoax9y5c2Pu3Llx5513RlFRURw4cCBmz56d1cfDDz8cDz/8cFRUVMSECRPiwIED8eKLL+asYdSoUf2eo1PRqFGjYunSpfEP//APhS6loF7/43MD3ueE0VfFlDE9v+fIZc4F63IGEEZEbHx1ftQm647r/HRl/8HmaHwj9/u9Weet6nNQYvmoqrhy/JLY0DSvT+d35Tctm/t8TwAAAAAAAAAAAAAAAABgqBhe6AIAAAAAAAAAAAAAOPEcG7KWK3TtSNBaT+GDERELFiyIs88+O5qbm/O6fltbW0yfPj3mzZvXZShaREQqlYp58+ZFY2Njr8fY0tLScY2ugueOXGPNmjVx4YUXRktLy0BN8Qmprq4uzjjjjG7DByMi6uvrY9q0aVFX1/tQlJaWlhg/fnyXQXxH+k8mk5HJZDr2NTY2RjKZ7PZe1dfX9+p1lslkYtGiRT32m06nO2rqy2utubk5kslkt2NOp9Mxc+bMqK2tjba2tl5fozuTJk3qsq7JkyfHzJkze/w+W7ZsWYwfPz7vuQUgWzKZzLn/3XffjQ0bNgxI+GC+7rjjjj6d94lPfKLL4MIXX3wxnnrqqZzjOHDgQMfXo0aNiu985zs5+9i1a1c89dRTXYYPzp0797jN0cnkpptuinfeeeeUDx+MiHjzTy8MeJ+79z/T53OLi0pibuX6nMd2pOtj73tNx21uuvPP26/LuT9Rmjwhg/76c08AAAAAAAAAAAAAAAAAYKgQQAgAAAAAAAAAAABAJ8cG7V1yySWdjl922WWdzquuro61a9fGwoULo6amJutYOp2Oyy67LCtULpe2traoqKjIGYJXXV0dNTU1nUJ8pk2b1qtguCOBcMdeo7q6OpYvXx7Lly/vVH8qlepzAN1QUFtbG/Pmzcval0gkoqamJtauXZtz3ufNmxeLFi3K+xrvvfdepz5qampy9p1Op+PGG2+MiA9eb3PmzMn7vHxeZ5lMJs4+++xOAZrJZDIWLlzY8RpIJBJZfU+bNi22bNmS95hzfa8ceR0f+xqL+CBEcf78+Xn3n49Zs2blHP/48eM7BS8mk8lYvnx5LFy4MGdY1mWXXXbSB3ECDIYzzzwzvvKVr/TY7uKLL45777231/3//d//fZx++uk9trv33ntj2rRpfR7H97///bjmmmt6Vdc999wTRUVFHfs+8YlP9HqMF198cdx55519rvtUdOGFF8ZLL70U3/3ud+NDH/pQocs5IbS2D/zPMK3t6X6dP2VMbSRKcweUbmi6IQ4dzvSyx4G1s2VLpFtzB3XfNGVTQWvrSn/vCQAAnCja2tqiubm50GUAAAAAAAAAAAAAACcoAYQAAAAAAAAAAAAAdPKDH/wga3vcuHEdX7e0tEQymYx0+oNgh0QiEalUKt5///3YunVr3HHHHbF69eqoq6uLPXv2RHV1dce56XQ6HnrooW6vPX/+/I6+j/T/xBNPdPRfV1cXO3bsiPfffz/Wr1/f0a43YTpLly7NukZNTU20trbG1q1b46677oq77ror6urq4j/+4z9i7dq1WfXfdttthb49A66xsTHq6+s7to/c071790ZdXV3ccccdHfOeSqWyQvnWrFmTdyjj1Vdf3THvR+5pXV1dR9/79u3L6ru+vj7uu+++rNdbV+cdHZaXTqfjscce67aWhx56KOs1kEwmY9++fbFjx45YvXp1x2tg7969Wa+ziIiZM2dGW1tbXmM+uvb169dnvY7r6uo6vY6PjLupqSlrX21tbbz//vtZ/x3tSN+5/qutre1U19NPP521vXbt2mhtbY0dO3bEXXfdFatXr+74PnviiSey5jaZTAohBOiDL3zhC3HvvffmDAo8/fTTY+7cubFmzZo499xze933zJkzY8OGDXHxxRfnPH7NNdfEhg0b+hU+GBFRVFQU99xzT/z3//7fu7xWxAeBgRs2bOgyVHfatGlx7733dtvHkX7uvffeWLNmTVaIId37P//P/zNeeumluPDCCwtdygll3EemDnifkxM1/e6jqyC/dGsqUn94rJe9DZxDhzPxw1duyXms6pyFMXpkeb+vMepD4/rdx7EqRlf3vxMAADgBrF27NsaPH1/oMgAAAAAAAAAAAACAE9Sw94998gQAAAAA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CACcDF5//fW455574jd/8zcFEU6T/W/3RFd2S9G9Wy9+LsrLEnFzU/GQm67slug9+MywtckEDzY3PBGrF+2L+XM/FSsufTXmz11xXG+YP3fF//7uU7F60b5obnhiykGEz/atLhrKmE5lInPujRER8fsXbh713Gf7Vk/lxwIAEM8880zccccdw9ZWrFgRNTU1pW4NAAAAAAAAAAAAAACmnQBCAAAAAAAAAAAAAIBpsHLlymH/D82FEMLUDA0NRV9fXzz77LPx5ptvjhmaNTQ0FD/4wQ8mVFtMoVCIN99889gZu3btijfffDMGBwePu++jZz377LPxgx/8YFJnjHbmrl27pvzGozN99tlno6+vb1r6A05+/f39gginweEjhfjSq79XdK8x3RLVZzVERERlRc2ooYDfeO3jcfhIYUrBg03VrVFeloiIiPKyRCytfzhuaXp63BDBdCoTKy/rjqX1Dw/7vqm69VgQYTqVGbeXdwcR7n+7Jzr2bixa29zwtWN3VVbUxNL6R4rWdezdGPvf7pn2nxkAcGa477774pprrhm2lk6n48EHHyx1awAAAAAAAAAAAAAAMCMSpW4AAAAAAAAAAAAAAOB0kEgk4pOf/GTcc889x9aOhhDu3LkzLrjgglK3CCedD33oQ8P+vHXr1vgf/+N/xJ//+Z9HX1/fiPorr7wy1q1bF4nEr34d4u/+7u/iK1/5Srz11lsjau+555646aabxrx/cHAwvvzlL0d7e/uoNXV1dfFXf/VXcd5554171u23316074iIL33pS3HRRRcVffNoZ/f19cUnP/nJou+LiDj77LPj8ccfH7O3oaGh+NrXvhZPPvnkqOfU1dXFpz/96airqwvg9HY0iPDRRx+NT37yk7Fy5cpj/0xlfE//9O7I5bMj1lPJdFz/gc3D1q6qWx9d2a+PqM/ls7F6+69N+M5UMh3Xvv/ByJx747Egv2Lqq66ONVfsj3zhULw19LPI5npi3y//e8z59d+J9/7G5fHr/+b8Mb8/GkTYVN0a/YMd8fc//uNxgxGPBhGOZv7cFcdCGY+69Pzb4vtvbC569pde/b1YvWjfmH0CALxToVCI9evXx7333jti77nnnvPvugAAAAAAAAAAAAAAnLbKSt0AAAAAAAAAAAAAAMDpYuXKlfH+979/2NrREML/+l//a6nbg5Pe008/Hc3NzaOG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AAAAAAAAAGB6AggBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgBQQQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAoIIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAUEEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKSCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFJAACEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACkgABCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASAEBhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJACAggBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgBQQQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAoIIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAUEEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKSCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFJAACEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACkgABCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASAEBhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJACAggBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgBQQQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAoIIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAUEEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKSCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFJAACEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACkgABCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASAEBhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJACAggBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgBQQQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAoIIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAUEEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKSCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFJAACEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACkgABCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASAEBhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJACAggBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgBQQQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAoIIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAUEEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKSCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFJAACEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACkgABCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASAEBhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJACAggBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgBQQQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAoIIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAUEEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKSCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFJAACEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACkgABCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASAEBhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJACAggBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgBQQQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAoIIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAUEEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKSCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFJAACEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACkgABCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASAEBhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJACAggBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgBQQQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAoIIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAUEEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKSCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFJAACEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACkgABCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASAEBhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJACAggBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgBQQQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAoIIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAUEEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKSCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFJAACEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACkgABCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASAEBhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJACAggBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgBQQQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAoIIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAUEEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKSCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFJAACEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACkgABCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASAEBhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJACAggBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgBQQQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAoIIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAUEEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKSCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFJAACEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACkgABCAAAAAAAAAAAAAAAA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m+nMbW1tk4YcXj3nTLW3t8ezzz5b8N34+3flypUYHByMlpaWSffgWgGEM52vubk5XnrppWmfr9ne14g/h0V2dXXNSXDg+F4iItLpdFHhmDPV1dUVra2tY8ej9ySVSk0IHpxMMe/L1U6cOBHbtm0rqnYqlYqenp6i93Q+a/f398cTTzwxabjoZKb62zTZ37E77rgjHn744Wn/FkT8ec+feuqpWYWSAgAAAAAAAAAAAAAAANyolpS7AQAAAAAAAAAAAAAAAIBKVl9fHwcOHBg7zmazsWvXrjm/TiaTiVWrVk0aVNfU1BTJZHLC9zt27IidO3dGPp8v+jonTpwoKqQum81GS0vLWO29e/cWFTiWzWZjxYoVkclkpl3b29t7zZmvZf/+/fG1r30tBgcHZ7XPk1m1atW0a3K53FgQXLH6+/tnPF93d/es5iv2vkZE9PT0RCqVilwuNyf7t2nTpoLjH//4x3NSdzozCR+MmNn7snfv3ti4ceOE2slkMpqamiasT6fTkUqlor+/v+y1U6lU0eGDERH3339/0c/Cl19+WXT44Oiez8ffSwAAAAAAAAAAAAAAAIDrmQBCAAAAAAAAAAAAAAAAgBI99dRTkUqlxo73798fvb29c3qNRx99tCCQrKmpKdLpdFy5ciVOnToV58+fjz/96U/x7rvvFoQR7t+/P1544YWirvGzn/0sNm7cWFB/eHg4rly5En/605/Ggs5G9fT0REdHR0G4XVNTU7z77rtj5125cmXCeRERu3fvnrKXfD4fmzdvLpg5lUpNqH3u3Ll48803C2YeDUe82r59++LcuXMFP1drb2+f8PvRny1btky7d52dnQW9Njc3x+HDh8d+/tt/+28T5nvooYcmne+LL74Ym++LL76YdL7JguiKua/JZHLCNYaHhye9RmdnZ9HXmMqjjz5acNzd3R0tLS1FhVCW4urwwba2tjh37lz86U9/Knh2rg4Pjfjz+9LR0TFl3d7e3glhjocPH47h4eE4f/58nDp1auzetbW1FezpdMGOpdaeKjyxv79/Qu22traCd2p4eDjefffdaG9vL6j9ne98p6hgxoceemgsfLCpqSnOnTs34X29uvbons/3swAAAAAAAAAAAAAAAABwPbnpypUrV8rdBAAAAAAAAAAAAAAAAEAlaGlpie7u7oj4c8BcV1fX2O8GBwfjK1/5ythx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AGBqS8rdAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADA9AYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAQQQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAUQQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVQAAhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAABhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFABBBACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABABRBACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABVAACEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABUAAGEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAEEEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAFEEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFUAAIQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFQAAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAQQQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAUQQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVQAAhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAABhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFABBBACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABABRBACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABVAACEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABUAAGEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAEEEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAFEEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFUAAIQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFQAAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAQQQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAUQQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVQAAhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAABhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFABBBACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABABRBACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABVAACEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABUAAGEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAEEEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAFEEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFUAAIQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFQAAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAQQQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAUQQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVQAAhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAABhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFABBBACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABABRBACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABVAACEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABUAAGEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAEEEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAFEEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFUAAIQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFQAAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAQQQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAUQQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVQAAhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAABhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFABBBACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABABRBACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABVAACEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABUAAGEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAEEEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAFEEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFUAAIQAAAPD/sncHJAAAAACC/r9uR6BHBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgSEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMCAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAEBIQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwICAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGBAQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAkIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYEBACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAgIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgSEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMCAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAEBIQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwICAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGBAQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAkIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYEBACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAgIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgSEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMCAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAEBIQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwICAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGBAQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAkIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYEBACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAgIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgSEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMCAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAEBIQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwICAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGBAQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAkIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYEBACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAgIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgSEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMCAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAEBIQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwICAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGBAQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAkIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYEBACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAgIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgSEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMCAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAEBIQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwICAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGBAQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAkIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYEBACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAgIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgSEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMCAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAEBIQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwICAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGBAQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAkIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYEBACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAgIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgSEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMCAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAEBIQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwICAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGBAQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAkIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYEBACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAgIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgSEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMCAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAEBIQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwICAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGBAQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAkIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYEBACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAgIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgSEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMCAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAEBIQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwICAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGBAQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAkIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYEBACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAgIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgSEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMCAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAEBIQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwICAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGBAQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAkIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYEBACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAgIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgSEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMCAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAEBIQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwICAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGBAQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAkIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYEBACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAgIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgSEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMCAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAEBIQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwICAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGBAQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAkIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYEBACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAgIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgSEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMCAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAEBIQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwICAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGBAQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAkIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYEBACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAgIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgSEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMCAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAEBIQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwICAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGBAQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAkIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYEBACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAgIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgSEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMCAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAEBIQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwICAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGBAQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAkIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYEBACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAgIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgSEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMCAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAEBIQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwICAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGBAQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAkIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYEBACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAgIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgSEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMCAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAEBIQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwICAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGBAQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAkIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYEBACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAgIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgSEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMCAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAEBIQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwICAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGBAQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAkIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYEBACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAgIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgSEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMCAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAEBIQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwICAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGBAQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAkIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYEBACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAgIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgSEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMCAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAEBIQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwICAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGBAQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAkIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYEBACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAgIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgSEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMCAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAEBIQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwICAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGBAQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAkIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYEBACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAgIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgSEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMCAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAEBIQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwICAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGBAQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAkIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYEBACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAgIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgSEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMCAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAEBIQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwICAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGBAQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAkIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYEBACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAgIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgSEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMCAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAEBIQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwICAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGBAQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAkIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYEBACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAgIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgSEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMCAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAEBIQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwICAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGBAQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAkIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYEBACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAgIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgSEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMCAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAEBIQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwICAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGBAQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAkIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYEBACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAgIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgSEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMCAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAEBIQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwICAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGBAQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAkIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYEBACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAgIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgSEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMCAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAEBIQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwICAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGBAQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAkIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYEBACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAgIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgSEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMCAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAEBIQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwICAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGBAQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAkIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYEBACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAgIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgSEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMCAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAEBIQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwICAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGBAQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAkIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYEBACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAgIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgSEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMCAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAEBIQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwICAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGBAQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAkIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYEBACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAgIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgSEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMCAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAEBIQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwICAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGBAQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAkIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYEBACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAgIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgSEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMCAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAEBIQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwICAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGBAQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAkIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYEBACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAgIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgSEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMCAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAEBIQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwICAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGBAQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAkIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYEBACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAgIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgSEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMCAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAEBIQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwICAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGBAQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAkIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYEBACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAgIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgSEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMCAgBAAAAIhuEEkAAAWESURBVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAEBIQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwICAEAAAAAAAAAAAAAAAAAAAAAAACg9u6ABAAAAEDQ/9ftCPSIAAAAAAAAAAADAkIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYEBACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAgIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgSEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMCAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAEBIQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwICAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGBAQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAkIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYEBACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAgIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgSEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMCAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAEBIQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwICAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGBAQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAkIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYEBACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAgIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgSEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMCAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAEBIQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwICAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGBAQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAkIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYEBACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAgIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgSEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMCAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAEBIQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwICAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGBAQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAkIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYEBACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAgIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgSEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMCAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAEBIQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwICAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGBAQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAkIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYEBACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAgIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgKxdxYozmXpDAAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAyNi0wMi0wOVQxOToyNjo1NiswMDowMLN6LRsAAAAldEVYdGRhdGU6bW9kaWZ5ADIwMjYtMDItMDlUMTk6MjY6NTYrMDA6MDDCJ5WnAAAAKHRFWHRkYXRlOnRpbWVzdGFtcAAyMDI2LTAyLTA5VDE5OjI2OjU2KzAwOjAwlTK0eAAAAABJRU5ErkJggg==" } }, "cell_type": "markdown", @@ -45,7 +45,7 @@ "\n", "This blueprint is comprised of multiple pieces that come together to form a powerful multi-modal RAG solution\n", "\n", - "![arch](attachment:b947a5fe-b01b-4f18-82e7-fda0c3a19c1a.png)" + "![arch](attachment:754d0879-53f3-45e9-84f1-307ef35d2a4b.png)" ] }, { @@ -1239,7 +1239,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.12.11" + "version": "3.13.12" } }, "nbformat": 4, From 371d883f2d51a9797742923304f6b9ac999dc969 Mon Sep 17 00:00:00 2001 From: Jeremy Dyer Date: Tue, 10 Mar 2026 22:37:47 -0400 Subject: [PATCH 02/94] Introduce release branch 26.03 with version 26.3.0-RC1 Update all hardcoded version references from 26.1.2 to 26.3.0-RC1 across helm charts, docker-compose, FastAPI, docs, and examples. Made-with: Cursor --- docker-compose.yaml | 2 +- docs/docs/extraction/content-metadata.md | 2 +- docs/docs/extraction/helm.md | 2 +- docs/docs/extraction/quickstart-guide.md | 2 +- docs/docs/extraction/quickstart-library-mode.md | 2 +- docs/docs/extraction/releasenotes-nv-ingest.md | 12 ++++++------ docs/docs/extraction/user-defined-functions.md | 2 +- examples/building_vdb_operator.ipynb | 14 +++++++------- helm/Chart.yaml | 2 +- helm/README.md | 8 ++++---- helm/README.md.gotmpl | 6 +++--- helm/values.yaml | 2 +- src/nv_ingest/api/main.py | 2 +- tools/harness/test_configs.yaml | 2 +- 14 files changed, 30 insertions(+), 30 deletions(-) diff --git a/docker-compose.yaml b/docker-compose.yaml index 264df7d7f..4ea6d58ea 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -262,7 +262,7 @@ services: - audio nv-ingest-ms-runtime: - image: nvcr.io/nvidia/nemo-microservices/nv-ingest:26.1.2 + image: nvcr.io/nvidia/nemo-microservices/nv-ingest:26.3.0-RC1 shm_size: 40gb # Should be at minimum 30% of assigned memory per Ray documentation build: context: ${NV_INGEST_ROOT:-.} diff --git a/docs/docs/extraction/content-metadata.md b/docs/docs/extraction/content-metadata.md index ae384b6fc..c02aa8c46 100644 --- a/docs/docs/extraction/content-metadata.md +++ b/docs/docs/extraction/content-metadata.md @@ -43,7 +43,7 @@ These fields apply to all content types including text, images, and tables. | Subtype | The type of the content for structured data types, such as table or chart. | — | | Content | Content extracted from the source. | Extracted | | Description | A text description of the content object. | Generated | -| Page \# | The page \# of the content in the source. Prior to 26.1.2, this field was 0-indexed. Beginning with 26.1.2, this field is 1-indexed. | Extracted | +| Page \# | The page \# of the content in the source. Prior to 26.3.0-RC1, this field was 0-indexed. Beginning with 26.3.0-RC1, this field is 1-indexed. | Extracted | | Hierarchy | The location or order of the content within the source. | Extracted | diff --git a/docs/docs/extraction/helm.md b/docs/docs/extraction/helm.md index 76cbd2a53..40fcd8ec9 100644 --- a/docs/docs/extraction/helm.md +++ b/docs/docs/extraction/helm.md @@ -3,4 +3,4 @@ To deploy [NeMo Retriever Library](overview.md) by using Helm, -refer to [NeMo Retriever Helm Charts](https://github.com/NVIDIA/NeMo-Retriever/blob/release/26.1.2/helm/README.md). +refer to [NeMo Retriever Helm Charts](https://github.com/NVIDIA/NeMo-Retriever/blob/release/26.3.0-RC1/helm/README.md). diff --git a/docs/docs/extraction/quickstart-guide.md b/docs/docs/extraction/quickstart-guide.md index 97bcfb578..74cc92824 100644 --- a/docs/docs/extraction/quickstart-guide.md +++ b/docs/docs/extraction/quickstart-guide.md @@ -84,7 +84,7 @@ h. Run the command `docker ps`. You should see output similar to the following. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES uv venv --python 3.12 nv-ingest-dev source nv-ingest-dev/bin/activate -uv pip install nv-ingest==26.1.2 nv-ingest-api==26.1.2 nv-ingest-client==26.1.2 +uv pip install nv-ingest==26.3.0-RC1 nv-ingest-api==26.3.0-RC1 nv-ingest-client==26.3.0-RC1 ``` !!! tip diff --git a/docs/docs/extraction/quickstart-library-mode.md b/docs/docs/extraction/quickstart-library-mode.md index e65b4fac1..e4810b8e9 100644 --- a/docs/docs/extraction/quickstart-library-mode.md +++ b/docs/docs/extraction/quickstart-library-mode.md @@ -34,7 +34,7 @@ Use the following procedure to prepare your environment. ``` uv venv --python 3.12 nvingest && \ source nvingest/bin/activate && \ - uv pip install nemo-retriever==26.1.2 milvus-lite==2.4.12 + uv pip install nemo-retriever==26.3.0-RC1 milvus-lite==2.4.12 ``` !!! tip diff --git a/docs/docs/extraction/releasenotes-nv-ingest.md b/docs/docs/extraction/releasenotes-nv-ingest.md index 40c9db021..d824af15b 100644 --- a/docs/docs/extraction/releasenotes-nv-ingest.md +++ b/docs/docs/extraction/releasenotes-nv-ingest.md @@ -8,11 +8,11 @@ This documentation contains the release notes for [NeMo Retriever Library](overv -## Release 26.01 (26.1.2) +## Release 26.01 (26.3.0-RC1) The NeMo Retriever Library 26.01 release adds new hardware and software support, and other improvements. -To upgrade the Helm Charts for this version, refer to [NeMo Retriever Library Helm Charts](https://github.com/NVIDIA/NeMo-Retriever/blob/release/26.1.2/helm/README.md). +To upgrade the Helm Charts for this version, refer to [NeMo Retriever Library Helm Charts](https://github.com/NVIDIA/NeMo-Retriever/blob/release/26.3.0-RC1/helm/README.md). ### Highlights @@ -20,7 +20,7 @@ To upgrade the Helm Charts for this version, refer to [NeMo Retriever Library He This release contains the following key changes: - Added functional support for [H200 NVL](https://www.nvidia.com/en-us/data-center/h200/). For details, refer to [Support Matrix](support-matrix.md). -- All Helm deployments for Kubernetes now use [NVIDIA NIM Operator](https://docs.nvidia.com/nim-operator/latest/index.html). For details, refer to [NeMo Retriever Library Helm Charts](https://github.com/NVIDIA/NeMo-Retriever/blob/release/26.1.2/helm/README.md). +- All Helm deployments for Kubernetes now use [NVIDIA NIM Operator](https://docs.nvidia.com/nim-operator/latest/index.html). For details, refer to [NeMo Retriever Library Helm Charts](https://github.com/NVIDIA/NeMo-Retriever/blob/release/26.3.0-RC1/helm/README.md). - Updated RIVA NIM to version 1.4.0. For details, refer to [Extract Speech](audio.md). - Updated VLM NIM to [nemotron-nano-12b-v2-vl](https://build.nvidia.com/nvidia/nemotron-nano-12b-v2-vl/modelcard). For details, refer to [Extract Captions from Images](python-api-reference.md#extract-captions-from-images). - Added VLM caption prompt customization parameters, including reasoning control. For details, refer to [Caption Images and Control Reasoning](python-api-reference.md#caption-images-and-control-reasoning). @@ -33,7 +33,7 @@ This release contains the following key changes: - Large PDFs are now automatically split into chunks and processed in parallel, delivering faster ingestion for long documents. For details, refer to [PDF Pre-Splitting](v2-api-guide.md). - Issues maintaining extraction quality while processing very large files are now resolved with the V2 API. For details, refer to [V2 API Guide](v2-api-guide.md). - Updated the embedding task to support embedding on custom content fields like the results of summarization functions. For details, refer to [Use the Python API](python-api-reference.md). -- User-defined function summarization is now using `nemotron-mini-4b-instruct` which provides significant speed improvements. For details, refer to [User-defined Functions](user-defined-functions.md) and [NeMo Retriever Library UDF Examples](https://github.com/NVIDIA/NeMo-Retriever/blob/release/26.1.2/examples/udfs/README.md). +- User-defined function summarization is now using `nemotron-mini-4b-instruct` which provides significant speed improvements. For details, refer to [User-defined Functions](user-defined-functions.md) and [NeMo Retriever Library UDF Examples](https://github.com/NVIDIA/NeMo-Retriever/blob/release/26.3.0-RC1/examples/udfs/README.md). - In the `Ingestor.extract` method, the defaults for `extract_text` and `extract_images` are now set to `true` for consistency with `extract_tables` and `extract_charts`. For details, refer to [Use the Python API](python-api-reference.md). - The `table-structure` profile is no longer available. The table-structure profile is now part of the default profile. For details, refer to [Profile Information](quickstart-guide.md#profile-information). - New documentation [Why Throughput Is Dataset-Dependent](throughput-is-dataset-dependent.md). @@ -49,8 +49,8 @@ This release contains the following key changes: The following are the known issues that are fixed in this version: -- A10G support is restored. To use A10G hardware, use release 26.1.2 or later. For details, refer to [Support Matrix](support-matrix.md). -- L40S support is restored. To use L40S hardware, use release 26.1.2 or later. For details, refer to [Support Matrix](support-matrix.md). +- A10G support is restored. To use A10G hardware, use release 26.3.0-RC1 or later. For details, refer to [Support Matrix](support-matrix.md). +- L40S support is restored. To use L40S hardware, use release 26.3.0-RC1 or later. For details, refer to [Support Matrix](support-matrix.md). - The page number field in the content metadata now starts at 1 instead of 0 so each page number is no longer off by one from what you would expect. For details, refer to [Content Metadata](content-metadata.md). - Support for batches that include individual files greater than approximately 400MB is restored. This includes audio files and pdfs. diff --git a/docs/docs/extraction/user-defined-functions.md b/docs/docs/extraction/user-defined-functions.md index d5f2b72c8..62013d1d8 100644 --- a/docs/docs/extraction/user-defined-functions.md +++ b/docs/docs/extraction/user-defined-functions.md @@ -941,6 +941,6 @@ def debug_udf(control_message: IngestControlMessage) -> IngestControlMessage: ## Related Topics -- [NeMo Retriever Library UDF Examples](https://github.com/NVIDIA/NeMo-Retriever/blob/release/26.1.2/examples/udfs/README.md) +- [NeMo Retriever Library UDF Examples](https://github.com/NVIDIA/NeMo-Retriever/blob/release/26.3.0-RC1/examples/udfs/README.md) - [User-Defined Stages for NeMo Retriever Library](user-defined-stages.md) - [NimClient Usage](nimclient.md) diff --git a/examples/building_vdb_operator.ipynb b/examples/building_vdb_operator.ipynb index 11e7a6759..a00923a96 100644 --- a/examples/building_vdb_operator.ipynb +++ b/examples/building_vdb_operator.ipynb @@ -486,7 +486,7 @@ " self.write_to_index(records)\n", "```\n", "\n", - "This method is called by the NV-Ingest Ingestor class during the ingestion pipeline. For more information on how operators are integrated into NV-Ingest, refer to the [interface implementation](https://github.com/NVIDIA/nv-ingest/blob/release/26.1.2/client/src/nv_ingest_client/client/interface.py#L324).\n", + "This method is called by the NV-Ingest Ingestor class during the ingestion pipeline. For more information on how operators are integrated into NV-Ingest, refer to the [interface implementation](https://github.com/NVIDIA/nv-ingest/blob/release/26.3.0-RC1/client/src/nv_ingest_client/client/interface.py#L324).\n", "\n", "The simplicity of this method belies its importance - it ensures that indexes are properly configured before data ingestion begins." ] @@ -728,12 +728,12 @@ "\n", "This implementation includes all the features covered in this tutorial:\n", "\n", - "- ✅ Complete OpenSearch integration with k-NN vector search\n", - "- ✅ Configurable connection parameters and index settings\n", - "- ✅ Robust data validation and content filtering\n", - "- ✅ Efficient batch processing and error handling\n", - "- ✅ NVIDIA embedding model integration for query vectorization\n", - "- ✅ Optimized response formatting and payload management\n", + "- \u2705 Complete OpenSearch integration with k-NN vector search\n", + "- \u2705 Configurable connection parameters and index settings\n", + "- \u2705 Robust data validation and content filtering\n", + "- \u2705 Efficient batch processing and error handling\n", + "- \u2705 NVIDIA embedding model integration for query vectorization\n", + "- \u2705 Optimized response formatting and payload management\n", "\n", "### Getting Started with the OpenSearch Operator\n", "\n", diff --git a/helm/Chart.yaml b/helm/Chart.yaml index 12f044ec9..aa2201109 100644 --- a/helm/Chart.yaml +++ b/helm/Chart.yaml @@ -2,7 +2,7 @@ apiVersion: v2 name: nv-ingest description: NV-Ingest Microservice type: application -version: 26.1.2 +version: 26.3.0-RC1 maintainers: - name: NVIDIA Corporation url: https://www.nvidia.com/ diff --git a/helm/README.md b/helm/README.md index 6bc711a8b..f21832866 100644 --- a/helm/README.md +++ b/helm/README.md @@ -45,7 +45,7 @@ To install or upgrade the Helm chart, run the following code. helm upgrade \ --install \ nv-ingest \ - https://helm.ngc.nvidia.com/nvidia/nemo-microservices/charts/nv-ingest-26.1.2.tgz \ + https://helm.ngc.nvidia.com/nvidia/nemo-microservices/charts/nv-ingest-26.3.0-RC1.tgz \ -n ${NAMESPACE} \ --username '$oauthtoken' \ --password "${NGC_API_KEY}" \ @@ -54,7 +54,7 @@ helm upgrade \ --set ngcApiSecret.create=true \ --set ngcApiSecret.password="${NGC_API_KEY}" \ --set image.repository="nvcr.io/nvidia/nemo-microservices/nv-ingest" \ - --set image.tag="26.1.2" + --set image.tag="26.3.0-RC1" ``` Optionally you can create your own versions of the `Secrets` if you do not want to use the creation via the helm chart. @@ -105,7 +105,7 @@ For more information, refer to [NV-Ingest-Client](https://github.com/NVIDIA/nv-i # Just to be cautious we remove any existing installation pip uninstall nv-ingest-client -pip install nv-ingest-client==26.1.2 +pip install nv-ingest-client==26.3.0-RC1 ``` #### Rest Endpoint Ingress @@ -347,7 +347,7 @@ You can also use NV-Ingest's Python client API to interact with the service runn | fullnameOverride | string | `""` | | | image.pullPolicy | string | `"IfNotPresent"` | | | image.repository | string | `"nvcr.io/nvidia/nemo-microservices/nv-ingest"` | | -| image.tag | string | `"26.1.2"` | | +| image.tag | string | `"26.3.0-RC1"` | | | imagePullSecrets[0].name | string | `"ngc-api"` | | | imagePullSecrets[1].name | string | `"ngc-secret"` | | | ingress.annotations | object | `{}` | | diff --git a/helm/README.md.gotmpl b/helm/README.md.gotmpl index 6080e6d71..37877e69a 100644 --- a/helm/README.md.gotmpl +++ b/helm/README.md.gotmpl @@ -46,7 +46,7 @@ To install or upgrade the Helm chart, run the following code. helm upgrade \ --install \ nv-ingest \ - https://helm.ngc.nvidia.com/nvidia/nemo-microservices/charts/nv-ingest-26.1.2.tgz \ + https://helm.ngc.nvidia.com/nvidia/nemo-microservices/charts/nv-ingest-26.3.0-RC1.tgz \ -n ${NAMESPACE} \ --username '$oauthtoken' \ --password "${NGC_API_KEY}" \ @@ -55,7 +55,7 @@ helm upgrade \ --set ngcApiSecret.create=true \ --set ngcApiSecret.password="${NGC_API_KEY}" \ --set image.repository="nvcr.io/nvidia/nemo-microservices/nv-ingest" \ - --set image.tag="26.1.2" + --set image.tag="26.3.0-RC1" ``` Optionally you can create your own versions of the `Secrets` if you do not want to use the creation via the helm chart. @@ -107,7 +107,7 @@ For more information, refer to [NV-Ingest-Client](https://github.com/NVIDIA/nv-i # Just to be cautious we remove any existing installation pip uninstall nv-ingest-client -pip install nv-ingest-client==26.1.2 +pip install nv-ingest-client==26.3.0-RC1 ``` #### Rest Endpoint Ingress diff --git a/helm/values.yaml b/helm/values.yaml index 20323f68a..fb6526ef3 100644 --- a/helm/values.yaml +++ b/helm/values.yaml @@ -28,7 +28,7 @@ nameOverride: "" image: pullPolicy: IfNotPresent repository: "nvcr.io/nvidia/nemo-microservices/nv-ingest" - tag: "26.1.2" + tag: "26.3.0-RC1" ## @section Pod Configuration ## @param podAnnotations [object] Sets additional annotations on the main deployment pods diff --git a/src/nv_ingest/api/main.py b/src/nv_ingest/api/main.py index 98524800f..40fcd67a3 100644 --- a/src/nv_ingest/api/main.py +++ b/src/nv_ingest/api/main.py @@ -23,7 +23,7 @@ app = FastAPI( title="NV-Ingest Microservice", description="Service for ingesting heterogenous datatypes", - version="26.1.2", + version="26.3.0-RC1", contact={ "name": "NVIDIA Corporation", "url": "https://nvidia.com", diff --git a/tools/harness/test_configs.yaml b/tools/harness/test_configs.yaml index 00bfb374d..8481f64a8 100644 --- a/tools/harness/test_configs.yaml +++ b/tools/harness/test_configs.yaml @@ -28,7 +28,7 @@ active: kubectl_bin: microk8s kubectl # kubectl binary command (e.g., "kubectl", "microk8s kubectl") kubectl_sudo: null # Prepend sudo to kubectl commands (null = same as helm_sudo) chart: nemo-microservices/nv-ingest # Remote chart reference (set to null to use local chart from ./helm) - chart_version: 26.1.2 # Chart version (required for remote charts) + chart_version: 26.3.0-RC1 # Chart version (required for remote charts) release: nv-ingest namespace: nv-ingest values_file: .helm-env # Optional: path to values file From 72173fc28e7a43f4a1b9f076cdf8db4face74fd3 Mon Sep 17 00:00:00 2001 From: Jeremy Dyer Date: Wed, 11 Mar 2026 14:10:38 -0400 Subject: [PATCH 03/94] Release prep: Update version to 26.03.0-RC1 (#1574) --- docker-compose.yaml | 2 +- docs/docs/extraction/helm.md | 2 +- docs/docs/extraction/quickstart-guide.md | 2 +- docs/docs/extraction/quickstart-library-mode.md | 2 +- helm/Chart.yaml | 2 +- helm/README.md | 8 ++++---- helm/README.md.gotmpl | 6 +++--- helm/values.yaml | 2 +- nemo_retriever/pyproject.toml | 6 +++--- src/nv_ingest/api/main.py | 2 +- tools/harness/pyproject.toml | 6 +++--- tools/harness/test_configs.yaml | 2 +- 12 files changed, 21 insertions(+), 21 deletions(-) diff --git a/docker-compose.yaml b/docker-compose.yaml index 4ea6d58ea..94ddf7f70 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -262,7 +262,7 @@ services: - audio nv-ingest-ms-runtime: - image: nvcr.io/nvidia/nemo-microservices/nv-ingest:26.3.0-RC1 + image: nvcr.io/nvidia/nemo-microservices/nv-ingest:26.03.0-RC1 shm_size: 40gb # Should be at minimum 30% of assigned memory per Ray documentation build: context: ${NV_INGEST_ROOT:-.} diff --git a/docs/docs/extraction/helm.md b/docs/docs/extraction/helm.md index 40fcd8ec9..952a44065 100644 --- a/docs/docs/extraction/helm.md +++ b/docs/docs/extraction/helm.md @@ -3,4 +3,4 @@ To deploy [NeMo Retriever Library](overview.md) by using Helm, -refer to [NeMo Retriever Helm Charts](https://github.com/NVIDIA/NeMo-Retriever/blob/release/26.3.0-RC1/helm/README.md). +refer to [NeMo Retriever Helm Charts](https://github.com/NVIDIA/NeMo-Retriever/blob/release/26.03.0-RC1/helm/README.md). diff --git a/docs/docs/extraction/quickstart-guide.md b/docs/docs/extraction/quickstart-guide.md index 74cc92824..43ddce8ed 100644 --- a/docs/docs/extraction/quickstart-guide.md +++ b/docs/docs/extraction/quickstart-guide.md @@ -84,7 +84,7 @@ h. Run the command `docker ps`. You should see output similar to the following. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES uv venv --python 3.12 nv-ingest-dev source nv-ingest-dev/bin/activate -uv pip install nv-ingest==26.3.0-RC1 nv-ingest-api==26.3.0-RC1 nv-ingest-client==26.3.0-RC1 +uv pip install nv-ingest==26.03.0-RC1 nv-ingest-api==26.03.0-RC1 nv-ingest-client==26.03.0-RC1 ``` !!! tip diff --git a/docs/docs/extraction/quickstart-library-mode.md b/docs/docs/extraction/quickstart-library-mode.md index e4810b8e9..f193305b9 100644 --- a/docs/docs/extraction/quickstart-library-mode.md +++ b/docs/docs/extraction/quickstart-library-mode.md @@ -34,7 +34,7 @@ Use the following procedure to prepare your environment. ``` uv venv --python 3.12 nvingest && \ source nvingest/bin/activate && \ - uv pip install nemo-retriever==26.3.0-RC1 milvus-lite==2.4.12 + uv pip install nemo-retriever==26.03.0-RC1 milvus-lite==2.4.12 ``` !!! tip diff --git a/helm/Chart.yaml b/helm/Chart.yaml index aa2201109..1b0a3a7e8 100644 --- a/helm/Chart.yaml +++ b/helm/Chart.yaml @@ -2,7 +2,7 @@ apiVersion: v2 name: nv-ingest description: NV-Ingest Microservice type: application -version: 26.3.0-RC1 +version: 26.03.0-RC1 maintainers: - name: NVIDIA Corporation url: https://www.nvidia.com/ diff --git a/helm/README.md b/helm/README.md index f21832866..18cea4235 100644 --- a/helm/README.md +++ b/helm/README.md @@ -45,7 +45,7 @@ To install or upgrade the Helm chart, run the following code. helm upgrade \ --install \ nv-ingest \ - https://helm.ngc.nvidia.com/nvidia/nemo-microservices/charts/nv-ingest-26.3.0-RC1.tgz \ + https://helm.ngc.nvidia.com/nvidia/nemo-microservices/charts/nv-ingest-26.03.0-RC1.tgz \ -n ${NAMESPACE} \ --username '$oauthtoken' \ --password "${NGC_API_KEY}" \ @@ -54,7 +54,7 @@ helm upgrade \ --set ngcApiSecret.create=true \ --set ngcApiSecret.password="${NGC_API_KEY}" \ --set image.repository="nvcr.io/nvidia/nemo-microservices/nv-ingest" \ - --set image.tag="26.3.0-RC1" + --set image.tag="26.03.0-RC1" ``` Optionally you can create your own versions of the `Secrets` if you do not want to use the creation via the helm chart. @@ -105,7 +105,7 @@ For more information, refer to [NV-Ingest-Client](https://github.com/NVIDIA/nv-i # Just to be cautious we remove any existing installation pip uninstall nv-ingest-client -pip install nv-ingest-client==26.3.0-RC1 +pip install nv-ingest-client==26.03.0-RC1 ``` #### Rest Endpoint Ingress @@ -347,7 +347,7 @@ You can also use NV-Ingest's Python client API to interact with the service runn | fullnameOverride | string | `""` | | | image.pullPolicy | string | `"IfNotPresent"` | | | image.repository | string | `"nvcr.io/nvidia/nemo-microservices/nv-ingest"` | | -| image.tag | string | `"26.3.0-RC1"` | | +| image.tag | string | `"26.03.0-RC1"` | | | imagePullSecrets[0].name | string | `"ngc-api"` | | | imagePullSecrets[1].name | string | `"ngc-secret"` | | | ingress.annotations | object | `{}` | | diff --git a/helm/README.md.gotmpl b/helm/README.md.gotmpl index 37877e69a..743ed3610 100644 --- a/helm/README.md.gotmpl +++ b/helm/README.md.gotmpl @@ -46,7 +46,7 @@ To install or upgrade the Helm chart, run the following code. helm upgrade \ --install \ nv-ingest \ - https://helm.ngc.nvidia.com/nvidia/nemo-microservices/charts/nv-ingest-26.3.0-RC1.tgz \ + https://helm.ngc.nvidia.com/nvidia/nemo-microservices/charts/nv-ingest-26.03.0-RC1.tgz \ -n ${NAMESPACE} \ --username '$oauthtoken' \ --password "${NGC_API_KEY}" \ @@ -55,7 +55,7 @@ helm upgrade \ --set ngcApiSecret.create=true \ --set ngcApiSecret.password="${NGC_API_KEY}" \ --set image.repository="nvcr.io/nvidia/nemo-microservices/nv-ingest" \ - --set image.tag="26.3.0-RC1" + --set image.tag="26.03.0-RC1" ``` Optionally you can create your own versions of the `Secrets` if you do not want to use the creation via the helm chart. @@ -107,7 +107,7 @@ For more information, refer to [NV-Ingest-Client](https://github.com/NVIDIA/nv-i # Just to be cautious we remove any existing installation pip uninstall nv-ingest-client -pip install nv-ingest-client==26.3.0-RC1 +pip install nv-ingest-client==26.03.0-RC1 ``` #### Rest Endpoint Ingress diff --git a/helm/values.yaml b/helm/values.yaml index fb6526ef3..a5fae1aef 100644 --- a/helm/values.yaml +++ b/helm/values.yaml @@ -28,7 +28,7 @@ nameOverride: "" image: pullPolicy: IfNotPresent repository: "nvcr.io/nvidia/nemo-microservices/nv-ingest" - tag: "26.3.0-RC1" + tag: "26.03.0-RC1" ## @section Pod Configuration ## @param podAnnotations [object] Sets additional annotations on the main deployment pods diff --git a/nemo_retriever/pyproject.toml b/nemo_retriever/pyproject.toml index ea22099fb..953a2f014 100644 --- a/nemo_retriever/pyproject.toml +++ b/nemo_retriever/pyproject.toml @@ -30,9 +30,9 @@ dependencies = [ "typer>=0.12.0", "pyyaml>=6.0", "lancedb", - "nv-ingest", - "nv-ingest-api", - "nv-ingest-client", + "nv-ingest==26.03.0-RC1", + "nv-ingest-api==26.03.0-RC1", + "nv-ingest-client==26.03.0-RC1", "fastapi>=0.114.0", "uvicorn[standard]>=0.30.0", "httpx>=0.27.0", diff --git a/src/nv_ingest/api/main.py b/src/nv_ingest/api/main.py index 40fcd67a3..762865766 100644 --- a/src/nv_ingest/api/main.py +++ b/src/nv_ingest/api/main.py @@ -23,7 +23,7 @@ app = FastAPI( title="NV-Ingest Microservice", description="Service for ingesting heterogenous datatypes", - version="26.3.0-RC1", + version="26.03.0-RC1", contact={ "name": "NVIDIA Corporation", "url": "https://nvidia.com", diff --git a/tools/harness/pyproject.toml b/tools/harness/pyproject.toml index 9b2721ba3..07cb085a5 100644 --- a/tools/harness/pyproject.toml +++ b/tools/harness/pyproject.toml @@ -10,9 +10,9 @@ dependencies = [ "pyyaml>=6.0", "requests>=2.32.5", "pynvml>=11.5.0", - "nv-ingest", - "nv-ingest-api", - "nv-ingest-client", + "nv-ingest==26.03.0-RC1", + "nv-ingest-api==26.03.0-RC1", + "nv-ingest-client==26.03.0-RC1", "milvus-lite==2.4.12", "pypdfium2>=4.30.0,<5.0.0", "nemotron-page-elements-v3>=0.dev0", diff --git a/tools/harness/test_configs.yaml b/tools/harness/test_configs.yaml index 8481f64a8..d49a25ffb 100644 --- a/tools/harness/test_configs.yaml +++ b/tools/harness/test_configs.yaml @@ -28,7 +28,7 @@ active: kubectl_bin: microk8s kubectl # kubectl binary command (e.g., "kubectl", "microk8s kubectl") kubectl_sudo: null # Prepend sudo to kubectl commands (null = same as helm_sudo) chart: nemo-microservices/nv-ingest # Remote chart reference (set to null to use local chart from ./helm) - chart_version: 26.3.0-RC1 # Chart version (required for remote charts) + chart_version: 26.03.0-RC1 # Chart version (required for remote charts) release: nv-ingest namespace: nv-ingest values_file: .helm-env # Optional: path to values file From 852910c0f502aae0f917d5945c89061762908943 Mon Sep 17 00:00:00 2001 From: Edward Kim <109497216+edknv@users.noreply.github.com> Date: Wed, 11 Mar 2026 11:47:51 -0700 Subject: [PATCH 04/94] (retriever) Add .split() for text chunking by token count (#1547) (#1576) --- .../nemo_retriever/examples/batch_pipeline.py | 56 +++-- .../examples/inprocess_pipeline.py | 219 ++++++++---------- .../src/nemo_retriever/ingest_modes/batch.py | 21 ++ .../nemo_retriever/ingest_modes/inprocess.py | 15 ++ .../ingest_modes/lancedb_utils.py | 7 + nemo_retriever/src/nemo_retriever/ingestor.py | 4 +- .../src/nemo_retriever/params/models.py | 2 +- .../src/nemo_retriever/txt/ray_data.py | 23 ++ .../src/nemo_retriever/txt/split.py | 80 ++++++- 9 files changed, 277 insertions(+), 150 deletions(-) diff --git a/nemo_retriever/src/nemo_retriever/examples/batch_pipeline.py b/nemo_retriever/src/nemo_retriever/examples/batch_pipeline.py index 5aef13f6d..b7e96ac93 100644 --- a/nemo_retriever/src/nemo_retriever/examples/batch_pipeline.py +++ b/nemo_retriever/src/nemo_retriever/examples/batch_pipeline.py @@ -462,6 +462,24 @@ def main( "(used when --table-output-format=markdown)." ), ), + text_chunk: bool = typer.Option( + False, + "--text-chunk", + help=( + "Re-chunk extracted page text by token count before embedding. " + "Uses --text-chunk-max-tokens and --text-chunk-overlap-tokens (defaults: 1024, 150)." + ), + ), + text_chunk_max_tokens: Optional[int] = typer.Option( + None, + "--text-chunk-max-tokens", + help="Max tokens per text chunk (default: 1024). Implies --text-chunk.", + ), + text_chunk_overlap_tokens: Optional[int] = typer.Option( + None, + "--text-chunk-overlap-tokens", + help="Token overlap between consecutive text chunks (default: 150). Implies --text-chunk.", + ), ) -> None: log_handle, original_stdout, original_stderr = _configure_logging(log_file, debug=bool(debug)) try: @@ -643,33 +661,31 @@ def _extract_params(batch_tuning: dict, **overrides: Any) -> ExtractParams: batch_tuning={**batch_tuning, **overrides}, ) + _text_chunk_params = TextChunkParams( + max_tokens=text_chunk_max_tokens or 1024, + overlap_tokens=text_chunk_overlap_tokens if text_chunk_overlap_tokens is not None else 150, + ) + if input_type == "txt": - ingestor = ( - ingestor.files(file_patterns) - .extract_txt(TextChunkParams(max_tokens=512, overlap_tokens=0)) - .embed(embed_params) - ) + ingestor = ingestor.files(file_patterns).extract_txt(_text_chunk_params) elif input_type == "html": - ingestor = ( - ingestor.files(file_patterns) - .extract_html(TextChunkParams(max_tokens=512, overlap_tokens=0)) - .embed(embed_params) - ) + ingestor = ingestor.files(file_patterns).extract_html(_text_chunk_params) elif input_type == "image": - ingestor = ( - ingestor.files(file_patterns) - .extract_image_files(_extract_params(_detection_batch_tuning)) - .embed(embed_params) - ) + ingestor = ingestor.files(file_patterns).extract_image_files(_extract_params(_detection_batch_tuning)) elif input_type == "doc": - ingestor = ingestor.files(file_patterns).extract(_extract_params(_pdf_batch_tuning)).embed(embed_params) + ingestor = ingestor.files(file_patterns).extract(_extract_params(_pdf_batch_tuning)) else: - ingestor = ( - ingestor.files(file_patterns) - .extract(_extract_params(_pdf_batch_tuning, inference_batch_size=page_elements_batch_size)) - .embed(embed_params) + ingestor = ingestor.files(file_patterns).extract( + _extract_params(_pdf_batch_tuning, inference_batch_size=page_elements_batch_size) ) + enable_text_chunk = text_chunk or text_chunk_max_tokens is not None or text_chunk_overlap_tokens is not None + if enable_text_chunk: + ingestor = ingestor.split(_text_chunk_params) + + ingestor = ingestor.embed(embed_params) + + logger.info("Running extraction...") ingest_start = time.perf_counter() ingest_results = ( diff --git a/nemo_retriever/src/nemo_retriever/examples/inprocess_pipeline.py b/nemo_retriever/src/nemo_retriever/examples/inprocess_pipeline.py index d275c2068..6030e90d1 100644 --- a/nemo_retriever/src/nemo_retriever/examples/inprocess_pipeline.py +++ b/nemo_retriever/src/nemo_retriever/examples/inprocess_pipeline.py @@ -168,6 +168,24 @@ def main( "--graphic-elements-invoke-url", help="Optional remote endpoint URL for graphic-elements model inference.", ), + text_chunk: bool = typer.Option( + False, + "--text-chunk", + help=( + "Re-chunk extracted page text by token count before embedding. " + "Uses --text-chunk-max-tokens and --text-chunk-overlap-tokens (defaults: 1024, 150)." + ), + ), + text_chunk_max_tokens: Optional[int] = typer.Option( + None, + "--text-chunk-max-tokens", + help="Max tokens per text chunk (default: 1024). Implies --text-chunk.", + ), + text_chunk_overlap_tokens: Optional[int] = typer.Option( + None, + "--text-chunk-overlap-tokens", + help="Token overlap between consecutive text chunks (default: 150). Implies --text-chunk.", + ), ) -> None: if gpu_devices is not None and num_gpus is not None: raise typer.BadParameter("--gpu-devices and --num-gpus are mutually exclusive.") @@ -194,146 +212,93 @@ def main( ingestor = create_ingestor(run_mode="inprocess") if input_type == "txt": - ingestor = ( - ingestor.files(file_patterns) - .extract_txt(TextChunkParams(max_tokens=512, overlap_tokens=0)) - .embed( - EmbedParams( - model_name=str(embed_model_name), - embed_invoke_url=embed_invoke_url, - embed_modality=embed_modality, - text_elements_modality=text_elements_modality, - structured_elements_modality=structured_elements_modality, - embed_granularity=embed_granularity, - ) - ) - .vdb_upload( - VdbUploadParams( - lancedb={ - "lancedb_uri": LANCEDB_URI, - "table_name": LANCEDB_TABLE, - "overwrite": True, - "create_index": True, - } - ) + ingestor = ingestor.files(file_patterns).extract_txt( + TextChunkParams( + max_tokens=text_chunk_max_tokens or 1024, + overlap_tokens=text_chunk_overlap_tokens if text_chunk_overlap_tokens is not None else 150, ) ) elif input_type == "html": - ingestor = ( - ingestor.files(file_patterns) - .extract_html(TextChunkParams(max_tokens=512, overlap_tokens=0)) - .embed( - EmbedParams( - model_name=str(embed_model_name), - embed_invoke_url=embed_invoke_url, - embed_modality=embed_modality, - text_elements_modality=text_elements_modality, - structured_elements_modality=structured_elements_modality, - embed_granularity=embed_granularity, - ) - ) - .vdb_upload( - VdbUploadParams( - lancedb={ - "lancedb_uri": LANCEDB_URI, - "table_name": LANCEDB_TABLE, - "overwrite": True, - "create_index": True, - } - ) + ingestor = ingestor.files(file_patterns).extract_html( + TextChunkParams( + max_tokens=text_chunk_max_tokens or 1024, + overlap_tokens=text_chunk_overlap_tokens if text_chunk_overlap_tokens is not None else 150, ) ) elif input_type == "doc": - ingestor = ( - ingestor.files(file_patterns) - .extract( - ExtractParams( - method=method, - extract_text=True, - extract_tables=True, - extract_charts=True, - extract_infographics=False, - use_graphic_elements=use_graphic_elements, - graphic_elements_invoke_url=graphic_elements_invoke_url, - use_table_structure=use_table_structure, - table_output_format=table_output_format, - table_structure_invoke_url=table_structure_invoke_url, - page_elements_invoke_url=page_elements_invoke_url, - ocr_invoke_url=ocr_invoke_url, - batch_tuning={ - "nemotron_parse_workers": float(nemotron_parse_actors), - "gpu_nemotron_parse": float(nemotron_parse_gpus_per_actor), - "nemotron_parse_batch_size": float(nemotron_parse_ray_batch_size), - }, - ) - ) - .embed( - EmbedParams( - model_name=str(embed_model_name), - embed_invoke_url=embed_invoke_url, - embed_modality=embed_modality, - text_elements_modality=text_elements_modality, - structured_elements_modality=structured_elements_modality, - embed_granularity=embed_granularity, - ) - ) - .vdb_upload( - VdbUploadParams( - lancedb={ - "lancedb_uri": LANCEDB_URI, - "table_name": LANCEDB_TABLE, - "overwrite": True, - "create_index": True, - } - ) + ingestor = ingestor.files(file_patterns).extract( + ExtractParams( + method=method, + extract_text=True, + extract_tables=True, + extract_charts=True, + extract_infographics=False, + use_graphic_elements=use_graphic_elements, + graphic_elements_invoke_url=graphic_elements_invoke_url, + use_table_structure=use_table_structure, + table_output_format=table_output_format, + table_structure_invoke_url=table_structure_invoke_url, + page_elements_invoke_url=page_elements_invoke_url, + ocr_invoke_url=ocr_invoke_url, + batch_tuning={ + "nemotron_parse_workers": float(nemotron_parse_actors), + "gpu_nemotron_parse": float(nemotron_parse_gpus_per_actor), + "nemotron_parse_batch_size": float(nemotron_parse_ray_batch_size), + }, ) ) else: - ingestor = ( - ingestor.files(file_patterns) - .extract( - ExtractParams( - method=method, - extract_text=True, - extract_tables=True, - extract_charts=True, - extract_infographics=False, - use_graphic_elements=use_graphic_elements, - graphic_elements_invoke_url=graphic_elements_invoke_url, - use_table_structure=use_table_structure, - table_output_format=table_output_format, - table_structure_invoke_url=table_structure_invoke_url, - page_elements_invoke_url=page_elements_invoke_url, - ocr_invoke_url=ocr_invoke_url, - batch_tuning={ - "nemotron_parse_workers": float(nemotron_parse_actors), - "gpu_nemotron_parse": float(nemotron_parse_gpus_per_actor), - "nemotron_parse_batch_size": float(nemotron_parse_ray_batch_size), - }, - ) - ) - .embed( - EmbedParams( - model_name=str(embed_model_name), - embed_invoke_url=embed_invoke_url, - embed_modality=embed_modality, - text_elements_modality=text_elements_modality, - structured_elements_modality=structured_elements_modality, - embed_granularity=embed_granularity, - ) + ingestor = ingestor.files(file_patterns).extract( + ExtractParams( + method=method, + extract_text=True, + extract_tables=True, + extract_charts=True, + extract_infographics=False, + use_graphic_elements=use_graphic_elements, + graphic_elements_invoke_url=graphic_elements_invoke_url, + use_table_structure=use_table_structure, + table_output_format=table_output_format, + table_structure_invoke_url=table_structure_invoke_url, + page_elements_invoke_url=page_elements_invoke_url, + ocr_invoke_url=ocr_invoke_url, + batch_tuning={ + "nemotron_parse_workers": float(nemotron_parse_actors), + "gpu_nemotron_parse": float(nemotron_parse_gpus_per_actor), + "nemotron_parse_batch_size": float(nemotron_parse_ray_batch_size), + }, ) - .vdb_upload( - VdbUploadParams( - lancedb={ - "lancedb_uri": LANCEDB_URI, - "table_name": LANCEDB_TABLE, - "overwrite": True, - "create_index": True, - } - ) + ) + + enable_text_chunk = text_chunk or text_chunk_max_tokens is not None or text_chunk_overlap_tokens is not None + if enable_text_chunk: + ingestor = ingestor.split( + TextChunkParams( + max_tokens=text_chunk_max_tokens or 1024, + overlap_tokens=text_chunk_overlap_tokens if text_chunk_overlap_tokens is not None else 150, ) ) + ingestor = ingestor.embed( + EmbedParams( + model_name=str(embed_model_name), + embed_invoke_url=embed_invoke_url, + embed_modality=embed_modality, + text_elements_modality=text_elements_modality, + structured_elements_modality=structured_elements_modality, + embed_granularity=embed_granularity, + ) + ).vdb_upload( + VdbUploadParams( + lancedb={ + "lancedb_uri": LANCEDB_URI, + "table_name": LANCEDB_TABLE, + "overwrite": True, + "create_index": True, + } + ) + ) + print("Running extraction...") ingest_start = time.perf_counter() ingestor.ingest( diff --git a/nemo_retriever/src/nemo_retriever/ingest_modes/batch.py b/nemo_retriever/src/nemo_retriever/ingest_modes/batch.py index 49e568770..84c13fe5f 100644 --- a/nemo_retriever/src/nemo_retriever/ingest_modes/batch.py +++ b/nemo_retriever/src/nemo_retriever/ingest_modes/batch.py @@ -659,6 +659,27 @@ def extract_image_files(self, params: ExtractParams | None = None, **kwargs: Any return self + def split(self, params: TextChunkParams | None = None, **kwargs: Any) -> "BatchIngestor": + """ + Re-chunk the ``text`` column by token count (post-extraction transform). + + Adds a ``map_batches(TextChunkActor, ...)`` stage to the Ray Dataset so + already-extracted text is re-chunked before embedding. + """ + from nemo_retriever.txt.ray_data import TextChunkActor + + resolved = _coerce_params(params, TextChunkParams, kwargs) + self._tasks.append(("split", resolved.model_dump(mode="python"))) + + self._rd_dataset = self._rd_dataset.map_batches( + TextChunkActor, + batch_size=4, + batch_format="pandas", + num_cpus=1, + fn_constructor_kwargs={"params": resolved}, + ) + return self + def extract_txt(self, params: TextChunkParams | None = None, **kwargs: Any) -> "BatchIngestor": """ Configure txt-only pipeline: read_binary_files -> TxtSplitActor (bytes -> chunk rows). diff --git a/nemo_retriever/src/nemo_retriever/ingest_modes/inprocess.py b/nemo_retriever/src/nemo_retriever/ingest_modes/inprocess.py index 35f8e5185..34eaf7ed5 100644 --- a/nemo_retriever/src/nemo_retriever/ingest_modes/inprocess.py +++ b/nemo_retriever/src/nemo_retriever/ingest_modes/inprocess.py @@ -1267,6 +1267,21 @@ def extract_image_files(self, params: ExtractParams | None = None, **kwargs: Any self._append_detection_tasks(kwargs, use_nemotron_parse_only=use_nemotron_parse_only) return self + def split(self, params: TextChunkParams | None = None, **kwargs: Any) -> "InProcessIngestor": + """ + Re-chunk the ``text`` column by token count (post-extraction transform). + + Appends :func:`~nemo_retriever.txt.split.split_df` as a GPU-category + task so it runs in sequence after extraction and before embedding. + """ + from nemo_retriever.txt.split import split_df + + resolved = _coerce_params(params, TextChunkParams, kwargs) + split_kwargs = resolved.model_dump(mode="python") + split_kwargs.pop("encoding", None) + self._tasks.append((split_df, split_kwargs)) + return self + def extract_txt(self, params: TextChunkParams | None = None, **kwargs: Any) -> "InProcessIngestor": """ Configure txt ingestion: tokenizer-based chunking only (no PDF extraction). diff --git a/nemo_retriever/src/nemo_retriever/ingest_modes/lancedb_utils.py b/nemo_retriever/src/nemo_retriever/ingest_modes/lancedb_utils.py index 1e3a98069..e82c45d17 100644 --- a/nemo_retriever/src/nemo_retriever/ingest_modes/lancedb_utils.py +++ b/nemo_retriever/src/nemo_retriever/ingest_modes/lancedb_utils.py @@ -128,6 +128,13 @@ def build_lancedb_row( metadata_obj["pdf_page"] = pdf_page metadata_obj.update(_build_detection_metadata(row)) + # Preserve split metadata (chunk_index, chunk_count) from the original row. + orig_meta = getattr(row, "metadata", None) + if isinstance(orig_meta, dict): + for k in ("chunk_index", "chunk_count"): + if k in orig_meta: + metadata_obj[k] = orig_meta[k] + source_obj: Dict[str, Any] = {"source_id": str(path)} row_out: Dict[str, Any] = { diff --git a/nemo_retriever/src/nemo_retriever/ingestor.py b/nemo_retriever/src/nemo_retriever/ingestor.py index 9e64f259f..7bbc19486 100644 --- a/nemo_retriever/src/nemo_retriever/ingestor.py +++ b/nemo_retriever/src/nemo_retriever/ingestor.py @@ -22,6 +22,7 @@ from nemo_retriever.application.modes.factory import create_runmode_ingestor from nemo_retriever.params import EmbedParams from nemo_retriever.params import ExtractParams +from nemo_retriever.params import TextChunkParams from nemo_retriever.params import IngestExecuteParams from nemo_retriever.params import IngestorCreateParams from nemo_retriever.params import RunMode @@ -132,8 +133,9 @@ def filter(self) -> "ingestor": """Record a filter task configuration.""" self._not_implemented("filter") - def split(self) -> "ingestor": + def split(self, params: TextChunkParams | None = None, **kwargs: Any) -> "ingestor": """Record a split task configuration.""" + _ = _merge_params(params, kwargs) self._not_implemented("split") def store(self) -> "ingestor": diff --git a/nemo_retriever/src/nemo_retriever/params/models.py b/nemo_retriever/src/nemo_retriever/params/models.py index d6f407cd0..66e925162 100644 --- a/nemo_retriever/src/nemo_retriever/params/models.py +++ b/nemo_retriever/src/nemo_retriever/params/models.py @@ -65,7 +65,7 @@ class PdfSplitParams(_ParamsModel): class TextChunkParams(_ParamsModel): - max_tokens: int = 512 + max_tokens: int = 1024 overlap_tokens: int = 0 tokenizer_model_id: Optional[str] = None encoding: str = "utf-8" diff --git a/nemo_retriever/src/nemo_retriever/txt/ray_data.py b/nemo_retriever/src/nemo_retriever/txt/ray_data.py index 1cb86970e..f01191814 100644 --- a/nemo_retriever/src/nemo_retriever/txt/ray_data.py +++ b/nemo_retriever/src/nemo_retriever/txt/ray_data.py @@ -17,6 +17,29 @@ from .split import txt_bytes_to_chunks_df +class TextChunkActor: + """ + Ray Data map_batches callable: re-chunk existing ``text`` column by token count. + + This is the batch-mode equivalent of :func:`~nemo_retriever.txt.split.split_df`. + Constructor takes :class:`TextChunkParams`; ``__call__`` receives a pandas batch + and returns the split result. + """ + + def __init__(self, params: TextChunkParams | None = None) -> None: + self._params = params or TextChunkParams() + + def __call__(self, batch_df: pd.DataFrame) -> pd.DataFrame: + from .split import split_df + + if not isinstance(batch_df, pd.DataFrame) or batch_df.empty: + return batch_df + + kw = self._params.model_dump(mode="python") + kw.pop("encoding", None) + return split_df(batch_df, **kw) + + class TxtSplitActor: """ Ray Data map_batches callable: DataFrame with bytes, path -> DataFrame of chunks. diff --git a/nemo_retriever/src/nemo_retriever/txt/split.py b/nemo_retriever/src/nemo_retriever/txt/split.py index d47b8dfd3..b94dba30d 100644 --- a/nemo_retriever/src/nemo_retriever/txt/split.py +++ b/nemo_retriever/src/nemo_retriever/txt/split.py @@ -18,7 +18,7 @@ from nemo_retriever.params import TextChunkParams DEFAULT_TOKENIZER_MODEL_ID = "nvidia/llama-nemotron-embed-1b-v2" -DEFAULT_MAX_TOKENS = 512 +DEFAULT_MAX_TOKENS = 1024 DEFAULT_OVERLAP_TOKENS = 0 @@ -91,6 +91,84 @@ def split_text_by_tokens( return chunks if chunks else [text] +def split_df( + df: pd.DataFrame, + *, + max_tokens: int = DEFAULT_MAX_TOKENS, + overlap_tokens: int = DEFAULT_OVERLAP_TOKENS, + tokenizer_model_id: Optional[str] = None, + tokenizer_cache_dir: Optional[str] = None, + encoding: str = "utf-8", +) -> pd.DataFrame: + """ + Re-chunk a DataFrame's ``text`` column by token count. + + This is a **post-extraction** transform: it takes rows that already have a + ``text`` column (produced by ``extract`` / ``extract_txt`` / etc.) and + splits long texts into multiple rows using :func:`split_text_by_tokens`. + All other columns (``path``, ``page_number``, ``metadata``, …) are + preserved on every output row. Each chunk row's ``metadata`` dict is + updated with ``chunk_index`` and ``chunk_count``. + + Rows whose ``text`` is empty or missing are passed through unchanged. + + Parameters + ---------- + df : pd.DataFrame + Input DataFrame with at least a ``text`` column. + max_tokens, overlap_tokens, tokenizer_model_id, tokenizer_cache_dir, encoding + Forwarded to :func:`split_text_by_tokens` / :func:`_get_tokenizer`. + + Returns + ------- + pd.DataFrame + Expanded DataFrame (one row per chunk). + """ + if df.empty: + return df.copy() + + model_id = tokenizer_model_id or DEFAULT_TOKENIZER_MODEL_ID + tokenizer = _get_tokenizer(model_id, cache_dir=tokenizer_cache_dir) + + out_rows: List[Dict[str, Any]] = [] + for _, row in df.iterrows(): + row_dict = row.to_dict() + text = row_dict.get("text") + if not isinstance(text, str) or not text.strip(): + out_rows.append(row_dict) + continue + + chunks = split_text_by_tokens( + text, + tokenizer=tokenizer, + max_tokens=max_tokens, + overlap_tokens=overlap_tokens, + ) + if len(chunks) <= 1: + out_rows.append(row_dict) + continue + + import copy + + for i, chunk in enumerate(chunks): + new_row = {k: copy.deepcopy(v) if isinstance(v, (dict, list)) else v for k, v in row_dict.items()} + new_row["text"] = chunk + if "content" in new_row: + new_row["content"] = chunk + meta = new_row.get("metadata") + if isinstance(meta, dict): + meta["chunk_index"] = i + meta["chunk_count"] = len(chunks) + meta["content"] = chunk + new_row["page_number"] = i + 1 + out_rows.append(new_row) + + if not out_rows: + return df.iloc[:0].copy() + + return pd.DataFrame(out_rows) + + def txt_file_to_chunks_df( path: str, params: TextChunkParams | None = None, From 64c694b440709639c2ac5dcf3bed16e024b938fc Mon Sep 17 00:00:00 2001 From: Edward Kim <109497216+edknv@users.noreply.github.com> Date: Wed, 11 Mar 2026 11:48:16 -0700 Subject: [PATCH 05/94] (retriever) add documentation for image file support (#1571) (#1577) Co-authored-by: Kurt Heiss --- nemo_retriever/README.md | 45 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/nemo_retriever/README.md b/nemo_retriever/README.md index dd4d29eff..c3292ba69 100644 --- a/nemo_retriever/README.md +++ b/nemo_retriever/README.md @@ -165,6 +165,51 @@ uv run python -m nemo_retriever.examples.batch_pipeline /datasets/nemo-retriever ``` This uses the module form of the NeMo Retriever Library batch pipeline example and points it at a sample dataset directory, verifying both ingestion and OCR under CUDA 13. +7. Ingest image files + +NeMo Retriever Library can ingest standalone image files through the same detection, OCR, and embedding pipeline used for PDFs. Supported formats are PNG, JPEG, BMP, TIFF, and SVG. SVG support requires the optional `cairosvg` package. Each image is treated as a single page. + +To run the batch pipeline on a directory of images, use `--input-type image` to match all supported formats at once. + +```bash +uv run python nemo_retriever/src/nemo_retriever/examples/batch_pipeline.py /path/to/images \ + --input-type image +``` + +You can also pass a single-format shortcut to restrict which files are picked up. + +```bash +uv run python nemo_retriever/src/nemo_retriever/examples/batch_pipeline.py /path/to/images \ + --input-type png +``` + +Valid single-format values are `png`, `jpg`, `jpeg`, `bmp`, `tiff`, `tif`, and `svg`. + +For in-process mode, build the ingestor chain with `extract_image_files` instead of `extract`. + +```python +from nemo_retriever import create_ingestor +from nemo_retriever.params import ExtractParams, EmbedParams + +ingestor = ( + create_ingestor(run_mode="inprocess") + .files("images/*.png") + .extract_image_files( + ExtractParams( + extract_text=True, + extract_tables=True, + extract_charts=True, + extract_infographics=True, + ) + ) + .embed() + .vdb_upload() + .ingest() +) +``` + +All `ExtractParams` options (`extract_text`, `extract_tables`, `extract_charts`, `extract_infographics`) apply to image ingestion. + ### Render one document as markdown If you want a readable page-by-page markdown view of a single in-process result, pass the From d38abb2ebfaf40a811f16866fde71cdbb60a4925 Mon Sep 17 00:00:00 2001 From: Charles Blackmon-Luca <20627856+charlesbluca@users.noreply.github.com> Date: Wed, 11 Mar 2026 14:59:18 -0400 Subject: [PATCH 06/94] [26.03] Refactor get_*_model_name to avoid caching fallback model name (#1578) --- .../primitives/nim/model_interface/ocr.py | 25 +++++--- .../primitives/nim/model_interface/yolox.py | 61 ++++++++++++++++--- 2 files changed, 71 insertions(+), 15 deletions(-) diff --git a/api/src/nv_ingest_api/internal/primitives/nim/model_interface/ocr.py b/api/src/nv_ingest_api/internal/primitives/nim/model_interface/ocr.py index f06f80d29..ef64c8f4c 100644 --- a/api/src/nv_ingest_api/internal/primitives/nim/model_interface/ocr.py +++ b/api/src/nv_ingest_api/internal/primitives/nim/model_interface/ocr.py @@ -16,7 +16,8 @@ import tritonclient.grpc as grpcclient from nv_ingest_api.internal.primitives.nim import ModelInterface -from nv_ingest_api.internal.primitives.nim.model_interface.decorators import multiprocessing_cache +from nv_ingest_api.internal.primitives.nim.model_interface.decorators import global_cache +from nv_ingest_api.internal.primitives.nim.model_interface.decorators import lock from nv_ingest_api.internal.primitives.nim.model_interface.helpers import preprocess_image_for_paddle from nv_ingest_api.util.image_processing.transforms import base64_to_numpy @@ -752,12 +753,11 @@ def _format_single_batch( raise ValueError("Invalid protocol specified. Must be 'grpc' or 'http'.") -@multiprocessing_cache(max_calls=100) # Cache results first to avoid redundant retries from backoff @backoff.on_predicate(backoff.expo, max_time=30) def get_ocr_model_name(ocr_grpc_endpoint=None, default_model_name=DEFAULT_OCR_MODEL_NAME): """ Determines the OCR model name by checking the environment, querying the gRPC endpoint, - or falling back to a default. + or falling back to a default. Only caches when the repository is successfully queried. """ # 1. Check for an explicit override from the environment variable first. ocr_model_name = os.getenv("OCR_MODEL_NAME", None) @@ -769,14 +769,25 @@ def get_ocr_model_name(ocr_grpc_endpoint=None, default_model_name=DEFAULT_OCR_MO logger.debug(f"No OCR gRPC endpoint provided. Falling back to default model name '{default_model_name}'.") return default_model_name - # 3. Attempt to query the gRPC endpoint to discover the model name. + # 3. Check cache (only populated on successful repository query). + key = ( + "get_ocr_model_name", + (ocr_grpc_endpoint,), + frozenset({"default_model_name": default_model_name}.items()), + ) + with lock: + if key in global_cache: + return global_cache[key] + + # 4. Attempt to query the gRPC endpoint to discover the model name. try: client = grpcclient.InferenceServerClient(ocr_grpc_endpoint) model_index = client.get_model_repository_index(as_json=True) model_names = [x["name"] for x in model_index.get("models", [])] ocr_model_name = model_names[0] + with lock: + global_cache[key] = ocr_model_name + return ocr_model_name except Exception: logger.warning(f"Failed to get ocr model name after 30 seconds. Falling back to '{default_model_name}'.") - ocr_model_name = default_model_name - - return ocr_model_name + return default_model_name diff --git a/api/src/nv_ingest_api/internal/primitives/nim/model_interface/yolox.py b/api/src/nv_ingest_api/internal/primitives/nim/model_interface/yolox.py index 0b1084905..ff93cb953 100644 --- a/api/src/nv_ingest_api/internal/primitives/nim/model_interface/yolox.py +++ b/api/src/nv_ingest_api/internal/primitives/nim/model_interface/yolox.py @@ -20,6 +20,8 @@ from nv_ingest_api.internal.primitives.nim import ModelInterface import tritonclient.grpc as grpcclient +from nv_ingest_api.internal.primitives.nim.model_interface.decorators import global_cache +from nv_ingest_api.internal.primitives.nim.model_interface.decorators import lock from nv_ingest_api.internal.primitives.nim.model_interface.decorators import multiprocessing_cache from nv_ingest_api.internal.primitives.nim.model_interface.helpers import get_model_name from nv_ingest_api.util.image_processing import scale_image_to_encoding_size @@ -135,10 +137,36 @@ def __init__( self.class_labels = class_labels if endpoints: - self.model_name = get_yolox_model_name(endpoints[0], default_model_name="yolox_ensemble") - self._grpc_uses_bls = self.model_name == "pipeline" + self._yolox_grpc_endpoint = endpoints[0] + self._model_name = None + self._grpc_uses_bls_value = None # Resolved on first use else: - self._grpc_uses_bls = False + self._yolox_grpc_endpoint = None + self._model_name = None + self._grpc_uses_bls_value = False + + def _resolve_yolox_model_name_if_needed(self) -> None: + """Resolve model name and BLS flag from the gRPC endpoint on first use. Cached on the instance.""" + if self._yolox_grpc_endpoint is None: + return + if self._model_name is not None: + return + self._model_name = get_yolox_model_name(self._yolox_grpc_endpoint, default_model_name="yolox_ensemble") + self._grpc_uses_bls_value = self._model_name == "pipeline" + + @property + def model_name(self) -> Optional[str]: + self._resolve_yolox_model_name_if_needed() + return self._model_name + + @model_name.setter + def model_name(self, value: Optional[str]) -> None: + self._model_name = value + + @property + def _grpc_uses_bls(self) -> bool: + self._resolve_yolox_model_name_if_needed() + return bool(self._grpc_uses_bls_value) def prepare_data_for_inference(self, data: Dict[str, Any]) -> Dict[str, Any]: """ @@ -2117,7 +2145,6 @@ def postprocess_included_texts(boxes, confs, labels, classes): return boxes, labels, confs -@multiprocessing_cache(max_calls=100) # Cache results first to avoid redundant retries from backoff @backoff.on_predicate(backoff.expo, max_time=30) def get_yolox_model_name(yolox_grpc_endpoint, default_model_name="yolox"): # If a gRPC endpoint isn't provided (common when using HTTP-only NIM endpoints), @@ -2131,6 +2158,15 @@ def get_yolox_model_name(yolox_grpc_endpoint, default_model_name="yolox"): ): return default_model_name + key = ( + "get_yolox_model_name", + (yolox_grpc_endpoint,), + frozenset({"default_model_name": default_model_name}.items()), + ) + with lock: + if key in global_cache: + return global_cache[key] + try: client = grpcclient.InferenceServerClient(yolox_grpc_endpoint) model_index = client.get_model_repository_index(as_json=True) @@ -2148,14 +2184,23 @@ def get_yolox_model_name(yolox_grpc_endpoint, default_model_name="yolox"): "nemoretriever-page-elements-v2", ): if preferred in model_names: - return preferred + result = preferred + with lock: + global_cache[key] = result + return result # Otherwise pick a best-effort match for newer model names. candidates = [m for m in model_names if isinstance(m, str) and ("yolox" in m or "page-elements" in m)] if candidates: - return sorted(candidates)[0] - - return default_model_name + result = sorted(candidates)[0] + with lock: + global_cache[key] = result + return result + + result = default_model_name + with lock: + global_cache[key] = result + return result except Exception as e: logger.warning( "Failed to inspect YOLOX model repository at '%s' (%s). Falling back to '%s'.", From fbd2e28139a64a934ee2fbc393cb8a6cbfee64da Mon Sep 17 00:00:00 2001 From: Charles Blackmon-Luca <20627856+charlesbluca@users.noreply.github.com> Date: Wed, 11 Mar 2026 16:06:51 -0400 Subject: [PATCH 07/94] [26.03] (helm) More nemotron rebranding (#1581) --- ci/scripts/validate_deployment_configs.py | 4 +- helm/README.md | 82 +++++++++---------- helm/mig/nv-ingest-mig-values-25x.yaml | 6 +- helm/mig/nv-ingest-mig-values.yaml | 6 +- helm/overrides/values-a100-40gb.yaml | 4 +- helm/overrides/values-a10g.yaml | 4 +- helm/overrides/values-l40s.yaml | 4 +- .../llama-3.2-nv-rerankqa-1b-v2.yaml | 47 ----------- ...2.yaml => llama-nemotron-embed-1b-v2.yaml} | 2 +- .../llama-nemotron-rerank-1b-v2.yaml | 47 +++++++++++ helm/templates/nemoretriever-ocr-v1.yaml | 41 ---------- ...yaml => nemotron-graphic-elements-v1.yaml} | 0 helm/templates/nemotron-ocr-v1.yaml | 41 ++++++++++ ...v3.yaml => nemotron-page-elements-v3.yaml} | 0 ....yaml => nemotron-table-structure-v1.yaml} | 0 helm/values.yaml | 42 +++++----- tools/harness/test_configs.yaml | 2 +- 17 files changed, 166 insertions(+), 166 deletions(-) delete mode 100644 helm/templates/llama-3.2-nv-rerankqa-1b-v2.yaml rename helm/templates/{llama-3.2-nv-embedqa-1b-v2.yaml => llama-nemotron-embed-1b-v2.yaml} (98%) create mode 100644 helm/templates/llama-nemotron-rerank-1b-v2.yaml delete mode 100644 helm/templates/nemoretriever-ocr-v1.yaml rename helm/templates/{nemoretriever-graphic-elements-v1.yaml => nemotron-graphic-elements-v1.yaml} (100%) create mode 100644 helm/templates/nemotron-ocr-v1.yaml rename helm/templates/{nemoretriever-page-elements-v3.yaml => nemotron-page-elements-v3.yaml} (100%) rename helm/templates/{nemoretriever-table-structure-v1.yaml => nemotron-table-structure-v1.yaml} (100%) diff --git a/ci/scripts/validate_deployment_configs.py b/ci/scripts/validate_deployment_configs.py index 1cb528949..14c8b3d43 100755 --- a/ci/scripts/validate_deployment_configs.py +++ b/ci/scripts/validate_deployment_configs.py @@ -49,9 +49,9 @@ def __str__(self) -> str: "page-elements": "page_elements", "graphic-elements": "graphic_elements", "table-structure": "table_structure", - "ocr": "nemoretriever_ocr_v1", + "ocr": "ocr", "embedding": "embedqa", - "reranker": "llama_3_2_nv_rerankqa_1b_v2", + "reranker": "rerankqa", "nemotron-parse": "nemotron_parse", "vlm": "nemotron_nano_12b_v2_vl", "audio": "audio", diff --git a/helm/README.md b/helm/README.md index 18cea4235..c446f3e3c 100644 --- a/helm/README.md +++ b/helm/README.md @@ -298,7 +298,7 @@ You can also use NV-Ingest's Python client API to interact with the service runn | envVars.AUDIO_GRPC_ENDPOINT | string | `"audio:50051"` | | | envVars.AUDIO_INFER_PROTOCOL | string | `"grpc"` | | | envVars.COMPONENTS_TO_READY_CHECK | string | `"ALL"` | | -| envVars.EMBEDDING_NIM_ENDPOINT | string | `"http://llama-32-nv-embedqa-1b-v2:8000/v1"` | | +| envVars.EMBEDDING_NIM_ENDPOINT | string | `"http://llama-nemotron-embed-1b-v2:8000/v1"` | | | envVars.EMBEDDING_NIM_MODEL_NAME | string | `"nvidia/llama-nemotron-embed-1b-v2"` | | | envVars.IMAGE_STORAGE_PUBLIC_BASE_URL | string | `""` | | | envVars.IMAGE_STORAGE_URI | string | `"s3://nv-ingest/artifacts/store/images"` | | @@ -465,46 +465,46 @@ You can also use NV-Ingest's Python client API to interact with the service runn | nimOperator.graphic_elements.storage.pvc.create | bool | `true` | | | nimOperator.graphic_elements.storage.pvc.size | string | `"25Gi"` | | | nimOperator.graphic_elements.storage.pvc.volumeAccessMode | string | `"ReadWriteOnce"` | | -| nimOperator.llama_3_2_nv_rerankqa_1b_v2.authSecret | string | `"ngc-api"` | | -| nimOperator.llama_3_2_nv_rerankqa_1b_v2.enabled | bool | `false` | | -| nimOperator.llama_3_2_nv_rerankqa_1b_v2.env[0].name | string | `"NIM_HTTP_API_PORT"` | | -| nimOperator.llama_3_2_nv_rerankqa_1b_v2.env[0].value | string | `"8000"` | | -| nimOperator.llama_3_2_nv_rerankqa_1b_v2.env[1].name | string | `"NIM_TRITON_LOG_VERBOSE"` | | -| nimOperator.llama_3_2_nv_rerankqa_1b_v2.env[1].value | string | `"1"` | | -| nimOperator.llama_3_2_nv_rerankqa_1b_v2.expose.service.grpcPort | int | `8001` | | -| nimOperator.llama_3_2_nv_rerankqa_1b_v2.expose.service.port | int | `8000` | | -| nimOperator.llama_3_2_nv_rerankqa_1b_v2.expose.service.type | string | `"ClusterIP"` | | -| nimOperator.llama_3_2_nv_rerankqa_1b_v2.image.pullPolicy | string | `"IfNotPresent"` | | -| nimOperator.llama_3_2_nv_rerankqa_1b_v2.image.pullSecrets[0] | string | `"ngc-secret"` | | -| nimOperator.llama_3_2_nv_rerankqa_1b_v2.image.repository | string | `"nvcr.io/nim/nvidia/llama-nemotron-rerank-1b-v2"` | | -| nimOperator.llama_3_2_nv_rerankqa_1b_v2.image.tag | string | `"1.10.0"` | | -| nimOperator.llama_3_2_nv_rerankqa_1b_v2.replicas | int | `1` | | -| nimOperator.llama_3_2_nv_rerankqa_1b_v2.resources.limits."nvidia.com/gpu" | int | `1` | | -| nimOperator.llama_3_2_nv_rerankqa_1b_v2.storage.pvc.create | bool | `true` | | -| nimOperator.llama_3_2_nv_rerankqa_1b_v2.storage.pvc.size | string | `"50Gi"` | | -| nimOperator.llama_3_2_nv_rerankqa_1b_v2.storage.pvc.volumeAccessMode | string | `"ReadWriteOnce"` | | -| nimOperator.nemoretriever_ocr_v1.authSecret | string | `"ngc-api"` | | -| nimOperator.nemoretriever_ocr_v1.enabled | bool | `true` | | -| nimOperator.nemoretriever_ocr_v1.env[0].name | string | `"OMP_NUM_THREADS"` | | -| nimOperator.nemoretriever_ocr_v1.env[0].value | string | `"8"` | | -| nimOperator.nemoretriever_ocr_v1.env[1].name | string | `"NIM_HTTP_API_PORT"` | | -| nimOperator.nemoretriever_ocr_v1.env[1].value | string | `"8000"` | | -| nimOperator.nemoretriever_ocr_v1.env[2].name | string | `"NIM_TRITON_LOG_VERBOSE"` | | -| nimOperator.nemoretriever_ocr_v1.env[2].value | string | `"1"` | | -| nimOperator.nemoretriever_ocr_v1.env[3].name | string | `"NIM_TRITON_MAX_BATCH_SIZE"` | | -| nimOperator.nemoretriever_ocr_v1.env[3].value | string | `"32"` | | -| nimOperator.nemoretriever_ocr_v1.expose.service.grpcPort | int | `8001` | | -| nimOperator.nemoretriever_ocr_v1.expose.service.port | int | `8000` | | -| nimOperator.nemoretriever_ocr_v1.expose.service.type | string | `"ClusterIP"` | | -| nimOperator.nemoretriever_ocr_v1.image.pullPolicy | string | `"IfNotPresent"` | | -| nimOperator.nemoretriever_ocr_v1.image.pullSecrets[0] | string | `"ngc-secret"` | | -| nimOperator.nemoretriever_ocr_v1.image.repository | string | `"nvcr.io/nim/nvidia/nemotron-ocr-v1"` | | -| nimOperator.nemoretriever_ocr_v1.image.tag | string | `"1.3.0"` | | -| nimOperator.nemoretriever_ocr_v1.replicas | int | `1` | | -| nimOperator.nemoretriever_ocr_v1.resources.limits."nvidia.com/gpu" | int | `1` | | -| nimOperator.nemoretriever_ocr_v1.storage.pvc.create | bool | `true` | | -| nimOperator.nemoretriever_ocr_v1.storage.pvc.size | string | `"25Gi"` | | -| nimOperator.nemoretriever_ocr_v1.storage.pvc.volumeAccessMode | string | `"ReadWriteOnce"` | | +| nimOperator.rerankqa.authSecret | string | `"ngc-api"` | | +| nimOperator.rerankqa.enabled | bool | `false` | | +| nimOperator.rerankqa.env[0].name | string | `"NIM_HTTP_API_PORT"` | | +| nimOperator.rerankqa.env[0].value | string | `"8000"` | | +| nimOperator.rerankqa.env[1].name | string | `"NIM_TRITON_LOG_VERBOSE"` | | +| nimOperator.rerankqa.env[1].value | string | `"1"` | | +| nimOperator.rerankqa.expose.service.grpcPort | int | `8001` | | +| nimOperator.rerankqa.expose.service.port | int | `8000` | | +| nimOperator.rerankqa.expose.service.type | string | `"ClusterIP"` | | +| nimOperator.rerankqa.image.pullPolicy | string | `"IfNotPresent"` | | +| nimOperator.rerankqa.image.pullSecrets[0] | string | `"ngc-secret"` | | +| nimOperator.rerankqa.image.repository | string | `"nvcr.io/nim/nvidia/llama-nemotron-rerank-1b-v2"` | | +| nimOperator.rerankqa.image.tag | string | `"1.10.0"` | | +| nimOperator.rerankqa.replicas | int | `1` | | +| nimOperator.rerankqa.resources.limits."nvidia.com/gpu" | int | `1` | | +| nimOperator.rerankqa.storage.pvc.create | bool | `true` | | +| nimOperator.rerankqa.storage.pvc.size | string | `"50Gi"` | | +| nimOperator.rerankqa.storage.pvc.volumeAccessMode | string | `"ReadWriteOnce"` | | +| nimOperator.ocr.authSecret | string | `"ngc-api"` | | +| nimOperator.ocr.enabled | bool | `true` | | +| nimOperator.ocr.env[0].name | string | `"OMP_NUM_THREADS"` | | +| nimOperator.ocr.env[0].value | string | `"8"` | | +| nimOperator.ocr.env[1].name | string | `"NIM_HTTP_API_PORT"` | | +| nimOperator.ocr.env[1].value | string | `"8000"` | | +| nimOperator.ocr.env[2].name | string | `"NIM_TRITON_LOG_VERBOSE"` | | +| nimOperator.ocr.env[2].value | string | `"1"` | | +| nimOperator.ocr.env[3].name | string | `"NIM_TRITON_MAX_BATCH_SIZE"` | | +| nimOperator.ocr.env[3].value | string | `"32"` | | +| nimOperator.ocr.expose.service.grpcPort | int | `8001` | | +| nimOperator.ocr.expose.service.port | int | `8000` | | +| nimOperator.ocr.expose.service.type | string | `"ClusterIP"` | | +| nimOperator.ocr.image.pullPolicy | string | `"IfNotPresent"` | | +| nimOperator.ocr.image.pullSecrets[0] | string | `"ngc-secret"` | | +| nimOperator.ocr.image.repository | string | `"nvcr.io/nim/nvidia/nemotron-ocr-v1"` | | +| nimOperator.ocr.image.tag | string | `"1.3.0"` | | +| nimOperator.ocr.replicas | int | `1` | | +| nimOperator.ocr.resources.limits."nvidia.com/gpu" | int | `1` | | +| nimOperator.ocr.storage.pvc.create | bool | `true` | | +| nimOperator.ocr.storage.pvc.size | string | `"25Gi"` | | +| nimOperator.ocr.storage.pvc.volumeAccessMode | string | `"ReadWriteOnce"` | | | nimOperator.nemotron_nano_12b_v2_vl.authSecret | string | `"ngc-api"` | | | nimOperator.nemotron_nano_12b_v2_vl.enabled | bool | `false` | | | nimOperator.nemotron_nano_12b_v2_vl.env[0].name | string | `"NIM_HTTP_API_PORT"` | | diff --git a/helm/mig/nv-ingest-mig-values-25x.yaml b/helm/mig/nv-ingest-mig-values-25x.yaml index d1b108e2e..5f9757518 100644 --- a/helm/mig/nv-ingest-mig-values-25x.yaml +++ b/helm/mig/nv-ingest-mig-values-25x.yaml @@ -38,7 +38,7 @@ nemotron-table-structure-v1: nvidia.com/gpu: 0 nvidia.com/mig-1g.10gb: 1 -nvidia-nim-llama-32-nv-embedqa-1b-v2: +nvidia-nim-llama-nemotron-embed-1b-v2: resources: limits: nvidia.com/gpu: 0 @@ -75,8 +75,8 @@ text-embedding-nim: nvidia.com/gpu: 0 nvidia.com/mig-1g.10gb: 1 -# If you want to deploy llama-32-nv-rerankqa-1b-v2 -llama-32-nv-rerankqa-1b-v2: +# If you want to deploy llama-nemotron-rerank-1b-v2 +llama-nemotron-rerank-1b-v2: resources: limits: nvidia.com/gpu: 0 diff --git a/helm/mig/nv-ingest-mig-values.yaml b/helm/mig/nv-ingest-mig-values.yaml index 8ae0e8c83..97707a5da 100644 --- a/helm/mig/nv-ingest-mig-values.yaml +++ b/helm/mig/nv-ingest-mig-values.yaml @@ -39,7 +39,7 @@ nimOperator: nvidia.com/gpu: "0" nvidia.com/mig-1g.10gb: 1 - nemoretriever_ocr_v1: + ocr: resources: limits: nvidia.com/gpu: "0" @@ -48,8 +48,8 @@ nimOperator: nvidia.com/gpu: "0" nvidia.com/mig-1g.20gb: 1 - # If you want to deploy llama-32-nv-rerankqa-1b-v2 - llama_3_2_nv_rerankqa_1b_v2: + # If you want to deploy llama-nemotron-rerank-1b-v2 + rerankqa: enabled: true resources: limits: diff --git a/helm/overrides/values-a100-40gb.yaml b/helm/overrides/values-a100-40gb.yaml index 003c234ba..7fe15de12 100644 --- a/helm/overrides/values-a100-40gb.yaml +++ b/helm/overrides/values-a100-40gb.yaml @@ -64,7 +64,7 @@ nimOperator: - name: OMP_NUM_THREADS value: "1" - nemoretriever_ocr_v1: + ocr: env: - name: OMP_NUM_THREADS value: "8" @@ -75,7 +75,7 @@ nimOperator: - name: NIM_TRITON_MAX_BATCH_SIZE value: "1" - llama_3_2_nv_rerankqa_1b_v2: + rerankqa: env: - name: NIM_HTTP_API_PORT value: "8000" diff --git a/helm/overrides/values-a10g.yaml b/helm/overrides/values-a10g.yaml index 0ad99584c..36a9bed4d 100644 --- a/helm/overrides/values-a10g.yaml +++ b/helm/overrides/values-a10g.yaml @@ -70,7 +70,7 @@ nimOperator: - name: OMP_NUM_THREADS value: "1" - nemoretriever_ocr_v1: + ocr: env: - name: OMP_NUM_THREADS value: "8" @@ -81,7 +81,7 @@ nimOperator: - name: NIM_TRITON_MAX_BATCH_SIZE value: "1" - llama_3_2_nv_rerankqa_1b_v2: + rerankqa: env: - name: NIM_HTTP_API_PORT value: "8000" diff --git a/helm/overrides/values-l40s.yaml b/helm/overrides/values-l40s.yaml index 7f4e3a680..85e941485 100644 --- a/helm/overrides/values-l40s.yaml +++ b/helm/overrides/values-l40s.yaml @@ -64,7 +64,7 @@ nimOperator: - name: OMP_NUM_THREADS value: "1" - nemoretriever_ocr_v1: + ocr: env: - name: OMP_NUM_THREADS value: "8" @@ -75,7 +75,7 @@ nimOperator: - name: NIM_TRITON_MAX_BATCH_SIZE value: "1" - llama_3_2_nv_rerankqa_1b_v2: + rerankqa: env: - name: NIM_HTTP_API_PORT value: "8000" diff --git a/helm/templates/llama-3.2-nv-rerankqa-1b-v2.yaml b/helm/templates/llama-3.2-nv-rerankqa-1b-v2.yaml deleted file mode 100644 index 12e69da27..000000000 --- a/helm/templates/llama-3.2-nv-rerankqa-1b-v2.yaml +++ /dev/null @@ -1,47 +0,0 @@ -{{ if and (.Capabilities.APIVersions.Has "apps.nvidia.com/v1alpha1") (eq .Values.nimOperator.llama_3_2_nv_rerankqa_1b_v2.enabled true) -}} -apiVersion: apps.nvidia.com/v1alpha1 -kind: NIMCache -metadata: - name: llama-nemotron-rerank-1b-v2 - annotations: - helm.sh/resource-policy: keep -spec: - source: - ngc: - modelPuller: "{{ .Values.nimOperator.llama_3_2_nv_rerankqa_1b_v2.image.repository }}:{{ .Values.nimOperator.llama_3_2_nv_rerankqa_1b_v2.image.tag }}" - pullSecret: "{{ index .Values.nimOperator.llama_3_2_nv_rerankqa_1b_v2.image.pullSecrets 0 }}" - authSecret: {{ .Values.nimOperator.llama_3_2_nv_rerankqa_1b_v2.authSecret }} - storage: - pvc: - create: {{ .Values.nimOperator.llama_3_2_nv_rerankqa_1b_v2.storage.pvc.create }} - storageClass: {{ .Values.nimOperator.llama_3_2_nv_rerankqa_1b_v2.storage.pvc.storageClass }} - size: {{ .Values.nimOperator.llama_3_2_nv_rerankqa_1b_v2.storage.pvc.size }} - volumeAccessMode: {{ .Values.nimOperator.llama_3_2_nv_rerankqa_1b_v2.storage.pvc.volumeAccessMode }} ---- -apiVersion: apps.nvidia.com/v1alpha1 -kind: NIMService -metadata: - name: llama-32-nv-rerankqa-1b-v2 -spec: - image: - repository: {{ .Values.nimOperator.llama_3_2_nv_rerankqa_1b_v2.image.repository }} - tag: {{ .Values.nimOperator.llama_3_2_nv_rerankqa_1b_v2.image.tag }} - pullPolicy: {{ .Values.nimOperator.llama_3_2_nv_rerankqa_1b_v2.image.pullPolicy }} - pullSecrets: -{{ toYaml .Values.nimOperator.llama_3_2_nv_rerankqa_1b_v2.image.pullSecrets | nindent 6 }} - authSecret: {{ .Values.nimOperator.llama_3_2_nv_rerankqa_1b_v2.authSecret }} - storage: - nimCache: - name: llama-nemotron-rerank-1b-v2 - replicas: {{ .Values.nimOperator.llama_3_2_nv_rerankqa_1b_v2.replicas }} - nodeSelector: -{{ toYaml .Values.nimOperator.llama_3_2_nv_rerankqa_1b_v2.nodeSelector | nindent 4 }} - resources: -{{ toYaml .Values.nimOperator.llama_3_2_nv_rerankqa_1b_v2.resources | nindent 4 }} - tolerations: -{{ toYaml .Values.nimOperator.llama_3_2_nv_rerankqa_1b_v2.tolerations | nindent 4 }} - expose: -{{ toYaml .Values.nimOperator.llama_3_2_nv_rerankqa_1b_v2.expose | nindent 4 }} - env: -{{ toYaml .Values.nimOperator.llama_3_2_nv_rerankqa_1b_v2.env | nindent 4 }} -{{- end }} diff --git a/helm/templates/llama-3.2-nv-embedqa-1b-v2.yaml b/helm/templates/llama-nemotron-embed-1b-v2.yaml similarity index 98% rename from helm/templates/llama-3.2-nv-embedqa-1b-v2.yaml rename to helm/templates/llama-nemotron-embed-1b-v2.yaml index e9376ced7..199bcdc9c 100644 --- a/helm/templates/llama-3.2-nv-embedqa-1b-v2.yaml +++ b/helm/templates/llama-nemotron-embed-1b-v2.yaml @@ -21,7 +21,7 @@ spec: apiVersion: apps.nvidia.com/v1alpha1 kind: NIMService metadata: - name: llama-32-nv-embedqa-1b-v2 + name: llama-nemotron-embed-1b-v2 spec: image: repository: {{ .Values.nimOperator.embedqa.image.repository }} diff --git a/helm/templates/llama-nemotron-rerank-1b-v2.yaml b/helm/templates/llama-nemotron-rerank-1b-v2.yaml new file mode 100644 index 000000000..6cfc2fcfc --- /dev/null +++ b/helm/templates/llama-nemotron-rerank-1b-v2.yaml @@ -0,0 +1,47 @@ +{{ if and (.Capabilities.APIVersions.Has "apps.nvidia.com/v1alpha1") (eq .Values.nimOperator.rerankqa.enabled true) -}} +apiVersion: apps.nvidia.com/v1alpha1 +kind: NIMCache +metadata: + name: llama-nemotron-rerank-1b-v2 + annotations: + helm.sh/resource-policy: keep +spec: + source: + ngc: + modelPuller: "{{ .Values.nimOperator.rerankqa.image.repository }}:{{ .Values.nimOperator.rerankqa.image.tag }}" + pullSecret: "{{ index .Values.nimOperator.rerankqa.image.pullSecrets 0 }}" + authSecret: {{ .Values.nimOperator.rerankqa.authSecret }} + storage: + pvc: + create: {{ .Values.nimOperator.rerankqa.storage.pvc.create }} + storageClass: {{ .Values.nimOperator.rerankqa.storage.pvc.storageClass }} + size: {{ .Values.nimOperator.rerankqa.storage.pvc.size }} + volumeAccessMode: {{ .Values.nimOperator.rerankqa.storage.pvc.volumeAccessMode }} +--- +apiVersion: apps.nvidia.com/v1alpha1 +kind: NIMService +metadata: + name: llama-nemotron-rerank-1b-v2 +spec: + image: + repository: {{ .Values.nimOperator.rerankqa.image.repository }} + tag: {{ .Values.nimOperator.rerankqa.image.tag }} + pullPolicy: {{ .Values.nimOperator.rerankqa.image.pullPolicy }} + pullSecrets: +{{ toYaml .Values.nimOperator.rerankqa.image.pullSecrets | nindent 6 }} + authSecret: {{ .Values.nimOperator.rerankqa.authSecret }} + storage: + nimCache: + name: llama-nemotron-rerank-1b-v2 + replicas: {{ .Values.nimOperator.rerankqa.replicas }} + nodeSelector: +{{ toYaml .Values.nimOperator.rerankqa.nodeSelector | nindent 4 }} + resources: +{{ toYaml .Values.nimOperator.rerankqa.resources | nindent 4 }} + tolerations: +{{ toYaml .Values.nimOperator.rerankqa.tolerations | nindent 4 }} + expose: +{{ toYaml .Values.nimOperator.rerankqa.expose | nindent 4 }} + env: +{{ toYaml .Values.nimOperator.rerankqa.env | nindent 4 }} +{{- end }} diff --git a/helm/templates/nemoretriever-ocr-v1.yaml b/helm/templates/nemoretriever-ocr-v1.yaml deleted file mode 100644 index 6606d12f5..000000000 --- a/helm/templates/nemoretriever-ocr-v1.yaml +++ /dev/null @@ -1,41 +0,0 @@ -{{ if and (.Capabilities.APIVersions.Has "apps.nvidia.com/v1alpha1") (eq .Values.nimOperator.nemoretriever_ocr_v1.enabled true) -}} -apiVersion: apps.nvidia.com/v1alpha1 -kind: NIMCache -metadata: - name: nemotron-ocr-v1 - annotations: - helm.sh/resource-policy: keep -spec: - source: - ngc: - modelPuller: "{{ .Values.nimOperator.nemoretriever_ocr_v1.image.repository }}:{{ .Values.nimOperator.nemoretriever_ocr_v1.image.tag }}" - pullSecret: "{{ index .Values.nimOperator.nemoretriever_ocr_v1.image.pullSecrets 0 }}" - authSecret: {{ .Values.nimOperator.nemoretriever_ocr_v1.authSecret }} - storage: - pvc: - create: {{ .Values.nimOperator.nemoretriever_ocr_v1.storage.pvc.create }} - storageClass: {{ .Values.nimOperator.nemoretriever_ocr_v1.storage.pvc.storageClass }} - size: {{ .Values.nimOperator.nemoretriever_ocr_v1.storage.pvc.size }} - volumeAccessMode: {{ .Values.nimOperator.nemoretriever_ocr_v1.storage.pvc.volumeAccessMode }} ---- -apiVersion: apps.nvidia.com/v1alpha1 -kind: NIMService -metadata: - name: nemotron-ocr-v1 -spec: - image: - repository: {{ .Values.nimOperator.nemoretriever_ocr_v1.image.repository }} - tag: {{ .Values.nimOperator.nemoretriever_ocr_v1.image.tag }} - pullPolicy: {{ .Values.nimOperator.nemoretriever_ocr_v1.image.pullPolicy }} - pullSecrets: {{ toYaml .Values.nimOperator.nemoretriever_ocr_v1.image.pullSecrets | nindent 6 }} - authSecret: {{ .Values.nimOperator.nemoretriever_ocr_v1.authSecret }} - storage: - nimCache: - name: nemotron-ocr-v1 - replicas: {{ .Values.nimOperator.nemoretriever_ocr_v1.replicas }} - nodeSelector: {{ toYaml .Values.nimOperator.nemoretriever_ocr_v1.nodeSelector | nindent 4 }} - resources: {{ toYaml .Values.nimOperator.nemoretriever_ocr_v1.resources | nindent 4 }} - tolerations: {{ toYaml .Values.nimOperator.nemoretriever_ocr_v1.tolerations | nindent 4 }} - expose: {{ toYaml .Values.nimOperator.nemoretriever_ocr_v1.expose | nindent 4 }} - env: {{ toYaml .Values.nimOperator.nemoretriever_ocr_v1.env | nindent 4 }} -{{- end }} diff --git a/helm/templates/nemoretriever-graphic-elements-v1.yaml b/helm/templates/nemotron-graphic-elements-v1.yaml similarity index 100% rename from helm/templates/nemoretriever-graphic-elements-v1.yaml rename to helm/templates/nemotron-graphic-elements-v1.yaml diff --git a/helm/templates/nemotron-ocr-v1.yaml b/helm/templates/nemotron-ocr-v1.yaml new file mode 100644 index 000000000..7ae0f2dea --- /dev/null +++ b/helm/templates/nemotron-ocr-v1.yaml @@ -0,0 +1,41 @@ +{{ if and (.Capabilities.APIVersions.Has "apps.nvidia.com/v1alpha1") (eq .Values.nimOperator.ocr.enabled true) -}} +apiVersion: apps.nvidia.com/v1alpha1 +kind: NIMCache +metadata: + name: nemotron-ocr-v1 + annotations: + helm.sh/resource-policy: keep +spec: + source: + ngc: + modelPuller: "{{ .Values.nimOperator.ocr.image.repository }}:{{ .Values.nimOperator.ocr.image.tag }}" + pullSecret: "{{ index .Values.nimOperator.ocr.image.pullSecrets 0 }}" + authSecret: {{ .Values.nimOperator.ocr.authSecret }} + storage: + pvc: + create: {{ .Values.nimOperator.ocr.storage.pvc.create }} + storageClass: {{ .Values.nimOperator.ocr.storage.pvc.storageClass }} + size: {{ .Values.nimOperator.ocr.storage.pvc.size }} + volumeAccessMode: {{ .Values.nimOperator.ocr.storage.pvc.volumeAccessMode }} +--- +apiVersion: apps.nvidia.com/v1alpha1 +kind: NIMService +metadata: + name: nemotron-ocr-v1 +spec: + image: + repository: {{ .Values.nimOperator.ocr.image.repository }} + tag: {{ .Values.nimOperator.ocr.image.tag }} + pullPolicy: {{ .Values.nimOperator.ocr.image.pullPolicy }} + pullSecrets: {{ toYaml .Values.nimOperator.ocr.image.pullSecrets | nindent 6 }} + authSecret: {{ .Values.nimOperator.ocr.authSecret }} + storage: + nimCache: + name: nemotron-ocr-v1 + replicas: {{ .Values.nimOperator.ocr.replicas }} + nodeSelector: {{ toYaml .Values.nimOperator.ocr.nodeSelector | nindent 4 }} + resources: {{ toYaml .Values.nimOperator.ocr.resources | nindent 4 }} + tolerations: {{ toYaml .Values.nimOperator.ocr.tolerations | nindent 4 }} + expose: {{ toYaml .Values.nimOperator.ocr.expose | nindent 4 }} + env: {{ toYaml .Values.nimOperator.ocr.env | nindent 4 }} +{{- end }} diff --git a/helm/templates/nemoretriever-page-elements-v3.yaml b/helm/templates/nemotron-page-elements-v3.yaml similarity index 100% rename from helm/templates/nemoretriever-page-elements-v3.yaml rename to helm/templates/nemotron-page-elements-v3.yaml diff --git a/helm/templates/nemoretriever-table-structure-v1.yaml b/helm/templates/nemotron-table-structure-v1.yaml similarity index 100% rename from helm/templates/nemoretriever-table-structure-v1.yaml rename to helm/templates/nemotron-table-structure-v1.yaml diff --git a/helm/values.yaml b/helm/values.yaml index a5fae1aef..2bbbea67c 100644 --- a/helm/values.yaml +++ b/helm/values.yaml @@ -170,7 +170,7 @@ envVars: AUDIO_GRPC_ENDPOINT: "audio:50051" AUDIO_INFER_PROTOCOL: "grpc" - EMBEDDING_NIM_ENDPOINT: "http://llama-32-nv-embedqa-1b-v2:8000/v1" + EMBEDDING_NIM_ENDPOINT: "http://llama-nemotron-embed-1b-v2:8000/v1" EMBEDDING_NIM_MODEL_NAME: "nvidia/llama-nemotron-embed-1b-v2" NEMOTRON_PARSE_HTTP_ENDPOINT: http://nemotron-parse:8000/v1/chat/completions @@ -828,16 +828,16 @@ nimOperator: - name: NIM_TRITON_PERFORMANCE_MODE value: "throughput" - ## @param nemoretriever_ocr_v1 [object] Configuration for NemoRetriever OCR v1 NIM - ## @param nemoretriever_ocr_v1.enabled [bool] Enable the NEMORetriever OCR v1 service - ## @param nemoretriever_ocr_v1.image.* [various] Image settings for NEMORetriever OCR v1 - ## @param nemoretriever_ocr_v1.authSecret [string] Secret for authentication - ## @param nemoretriever_ocr_v1.storage.* [object] Storage/PVC configuration - ## @param nemoretriever_ocr_v1.replicas [int] Number of service replicas - ## @param nemoretriever_ocr_v1.resources [object] Limits/requests for compute resources - ## @param nemoretriever_ocr_v1.expose.* [object] Ports and service config - ## @param nemoretriever_ocr_v1.env [array] Additional environment variables - nemoretriever_ocr_v1: + ## @param ocr [object] Configuration for Nemotron OCR v1 NIM + ## @param ocr.enabled [bool] Enable the Nemotron OCR v1 service + ## @param ocr.image.* [various] Image settings for Nemotron OCR v1 + ## @param ocr.authSecret [string] Secret for authentication + ## @param ocr.storage.* [object] Storage/PVC configuration + ## @param ocr.replicas [int] Number of service replicas + ## @param ocr.resources [object] Limits/requests for compute resources + ## @param ocr.expose.* [object] Ports and service config + ## @param ocr.env [array] Additional environment variables + ocr: enabled: true image: repository: nvcr.io/nim/nvidia/nemotron-ocr-v1 @@ -870,16 +870,16 @@ nimOperator: - name: NIM_TRITON_MAX_BATCH_SIZE value: "32" - ## @param llama_3_2_nv_rerankqa_1b_v2 [object] Configuration for LLaMA-3.2 NV RerankQA 1B v2 NIM - ## @param llama_3_2_nv_rerankqa_1b_v2.enabled [bool] Enable this NIM - ## @param llama_3_2_nv_rerankqa_1b_v2.image.* [various] Image repository/tag for this NIM - ## @param llama_3_2_nv_rerankqa_1b_v2.authSecret [string] Authentication secret for the NIM - ## @param llama_3_2_nv_rerankqa_1b_v2.storage.* [various] Storage/PVC configuration - ## @param llama_3_2_nv_rerankqa_1b_v2.replicas [int] Number of replicas - ## @param llama_3_2_nv_rerankqa_1b_v2.resources [object] Limits/requests for resources - ## @param llama_3_2_nv_rerankqa_1b_v2.expose.* [object] Port/service configuration - ## @param llama_3_2_nv_rerankqa_1b_v2.env [array] Additional environment variables - llama_3_2_nv_rerankqa_1b_v2: + ## @param rerankqa [object] Configuration for LLaMA-3.2 NV RerankQA 1B v2 NIM + ## @param rerankqa.enabled [bool] Enable this NIM + ## @param rerankqa.image.* [various] Image repository/tag for this NIM + ## @param rerankqa.authSecret [string] Authentication secret for the NIM + ## @param rerankqa.storage.* [various] Storage/PVC configuration + ## @param rerankqa.replicas [int] Number of replicas + ## @param rerankqa.resources [object] Limits/requests for resources + ## @param rerankqa.expose.* [object] Port/service configuration + ## @param rerankqa.env [array] Additional environment variables + rerankqa: enabled: false image: repository: nvcr.io/nim/nvidia/llama-nemotron-rerank-1b-v2 diff --git a/tools/harness/test_configs.yaml b/tools/harness/test_configs.yaml index d49a25ffb..1db4646ea 100644 --- a/tools/harness/test_configs.yaml +++ b/tools/harness/test_configs.yaml @@ -53,7 +53,7 @@ active: local_port: 8020 remote_port: 8000 values: # inline Helm values - nimOperator.llama_3_2_nv_rerankqa_1b_v2.enabled: true + nimOperator.rerankqa.enabled: true # Runtime configuration sparse: false # Use sparse embeddings (Milvus only) From 1835ba778697ff0365ee8ba29712520e13f3d33a Mon Sep 17 00:00:00 2001 From: Jeremy Dyer Date: Wed, 11 Mar 2026 20:10:16 -0400 Subject: [PATCH 08/94] Add source_id column back to lancedb --- .../src/nemo_retriever/ingest_modes/batch.py | 10 ++++++++++ .../src/nemo_retriever/ingest_modes/lancedb_utils.py | 4 +++- .../src/nemo_retriever/utils/hf_model_registry.py | 1 + nemo_retriever/tests/test_lancedb_utils.py | 1 + 4 files changed, 15 insertions(+), 1 deletion(-) diff --git a/nemo_retriever/src/nemo_retriever/ingest_modes/batch.py b/nemo_retriever/src/nemo_retriever/ingest_modes/batch.py index 84c13fe5f..b2886991a 100644 --- a/nemo_retriever/src/nemo_retriever/ingest_modes/batch.py +++ b/nemo_retriever/src/nemo_retriever/ingest_modes/batch.py @@ -295,6 +295,9 @@ def extract(self, params: ExtractParams | None = None, **kwargs: Any) -> "BatchI This does not run extraction yet; it records configuration so the batch executor can build a concrete pipeline later. + If all input files have a ``.txt`` extension, the pipeline automatically + delegates to :meth:`extract_txt` with default :class:`TextChunkParams`. + Resource-tuning kwargs (auto-detected from available resources if omitted): - ``pdf_split_batch_size``: Batch size for PDF split stage (default 1). @@ -308,6 +311,13 @@ def extract(self, params: ExtractParams | None = None, **kwargs: Any) -> "BatchI - ``ocr_cpus_per_actor``: CPUs reserved per OCR actor (default 1). """ + if self._input_documents and all(f.lower().endswith(".txt") for f in self._input_documents): + txt_params = TextChunkParams( + max_tokens=kwargs.pop("max_tokens", 1024), + overlap_tokens=kwargs.pop("overlap_tokens", 0), + ) + return self.extract_txt(params=txt_params) + resolved = _coerce_params(params, ExtractParams, kwargs) if ( any( diff --git a/nemo_retriever/src/nemo_retriever/ingest_modes/lancedb_utils.py b/nemo_retriever/src/nemo_retriever/ingest_modes/lancedb_utils.py index e82c45d17..41fd24378 100644 --- a/nemo_retriever/src/nemo_retriever/ingest_modes/lancedb_utils.py +++ b/nemo_retriever/src/nemo_retriever/ingest_modes/lancedb_utils.py @@ -197,7 +197,9 @@ def lancedb_schema(vector_dim: int = 2048) -> Any: pa.field("pdf_basename", pa.string()), pa.field("page_number", pa.int32()), pa.field("source", pa.string()), - pa.field("source_id", pa.string()), + pa.field( + "source_id", pa.string() + ), # Different than the source. Field contains path+page_number for aggregation tasks pa.field("path", pa.string()), pa.field("text", pa.string()), pa.field("metadata", pa.string()), diff --git a/nemo_retriever/src/nemo_retriever/utils/hf_model_registry.py b/nemo_retriever/src/nemo_retriever/utils/hf_model_registry.py index 46022b03f..2589e198a 100644 --- a/nemo_retriever/src/nemo_retriever/utils/hf_model_registry.py +++ b/nemo_retriever/src/nemo_retriever/utils/hf_model_registry.py @@ -28,6 +28,7 @@ "nvidia/llama-nemotron-embed-vl-1b-v2": "859e1f2dac29c56c37a5279cf55f53f3e74efc6b", "meta-llama/Llama-3.2-1B": "4e20de362430cd3b72f300e6b0f18e50e7166e08", "intfloat/e5-large-unsupervised": "15af9288f69a6291f37bfb89b47e71abc747b206", + "nvidia/llama-nemotron-rerank-1b-v2": "aee9a1be0bbd89489f8bd0ec5763614c8bb85878", } diff --git a/nemo_retriever/tests/test_lancedb_utils.py b/nemo_retriever/tests/test_lancedb_utils.py index cc0541195..9fd6734f3 100644 --- a/nemo_retriever/tests/test_lancedb_utils.py +++ b/nemo_retriever/tests/test_lancedb_utils.py @@ -198,6 +198,7 @@ def test_returns_schema_with_correct_fields(self): assert "text" in names assert "metadata" in names assert "source" in names + assert "source_id" in names assert len(names) == 10 From db03ed7c0946dbca82e74739330973bbe46e4927 Mon Sep 17 00:00:00 2001 From: Julio Perez <37191411+jperez999@users.noreply.github.com> Date: Wed, 11 Mar 2026 17:43:46 -0400 Subject: [PATCH 09/94] upmerge --- nemo_retriever/pyproject.toml | 1 + .../nemo_retriever/examples/batch_pipeline.py | 9 + .../nemo_retriever/model/local/__init__.py | 5 + .../model/local/nemotron_rerank_v2.py | 210 ++++++ .../src/nemo_retriever/recall/core.py | 126 +--- .../src/nemo_retriever/rerank/__init__.py | 24 + .../src/nemo_retriever/rerank/rerank.py | 377 +++++++++++ .../src/nemo_retriever/retriever.py | 123 +++- .../utils/benchmark/audio_extract_actor.py | 126 ++-- .../vector_store/lancedb_store.py | 21 - nemo_retriever/tests/test_audio_benchmark.py | 29 +- .../tests/test_audio_pipeline_batch.py | 2 + nemo_retriever/tests/test_html_convert.py | 6 +- .../tests/test_nemotron_rerank_v2.py | 608 ++++++++++++++++++ .../tests/test_retriever_queries.py | 372 +++++++++++ 15 files changed, 1846 insertions(+), 193 deletions(-) create mode 100644 nemo_retriever/src/nemo_retriever/model/local/nemotron_rerank_v2.py create mode 100644 nemo_retriever/src/nemo_retriever/rerank/__init__.py create mode 100644 nemo_retriever/src/nemo_retriever/rerank/rerank.py create mode 100644 nemo_retriever/tests/test_nemotron_rerank_v2.py create mode 100644 nemo_retriever/tests/test_retriever_queries.py diff --git a/nemo_retriever/pyproject.toml b/nemo_retriever/pyproject.toml index 953a2f014..b9f84b79d 100644 --- a/nemo_retriever/pyproject.toml +++ b/nemo_retriever/pyproject.toml @@ -63,6 +63,7 @@ dependencies = [ "nemotron-ocr>=0.dev0", "markitdown", "timm==1.0.22", + "tqdm", "accelerate==1.12.0", "albumentations==2.0.8", "scikit-learn>=1.6.0", diff --git a/nemo_retriever/src/nemo_retriever/examples/batch_pipeline.py b/nemo_retriever/src/nemo_retriever/examples/batch_pipeline.py index b7e96ac93..a66137660 100644 --- a/nemo_retriever/src/nemo_retriever/examples/batch_pipeline.py +++ b/nemo_retriever/src/nemo_retriever/examples/batch_pipeline.py @@ -425,6 +425,14 @@ def main( "--runtime-metrics-prefix", help="Optional filename prefix for per-run metrics artifacts.", ), + reranker: Optional[bool] = typer.Option( + False, "--reranker/--no-reranker", help="Enable a re-ranking stage with a cross-encoder model." + ), + reranker_model_name: str = typer.Option( + "nvidia/llama-nemotron-rerank-1b-v2", + "--reranker-model-name", + help="Cross-encoder model name for re-ranking stage (passed to .embed()).", + ), structured_elements_modality: Optional[str] = typer.Option( None, "--structured-elements-modality", @@ -782,6 +790,7 @@ def _extract_params(batch_tuning: dict, **overrides: Any) -> ExtractParams: ks=(1, 5, 10), hybrid=hybrid, match_mode=recall_match_mode, + reranker=reranker_model_name if reranker else None, ) # Capture recall only times. diff --git a/nemo_retriever/src/nemo_retriever/model/local/__init__.py b/nemo_retriever/src/nemo_retriever/model/local/__init__.py index 7fa66d3f7..791df4daa 100644 --- a/nemo_retriever/src/nemo_retriever/model/local/__init__.py +++ b/nemo_retriever/src/nemo_retriever/model/local/__init__.py @@ -17,6 +17,7 @@ "NemotronTableStructureV1", "NemotronGraphicElementsV1", "NemotronParseV12", + "NemotronRerankV2", "ParakeetCTC1B1ASR", ] @@ -42,6 +43,10 @@ def __getattr__(name: str): from .nemotron_parse_v1_2 import NemotronParseV12 return NemotronParseV12 + if name == "NemotronRerankV2": + from .nemotron_rerank_v2 import NemotronRerankV2 + + return NemotronRerankV2 if name == "ParakeetCTC1B1ASR": from .parakeet_ctc_1_1b_asr import ParakeetCTC1B1ASR diff --git a/nemo_retriever/src/nemo_retriever/model/local/nemotron_rerank_v2.py b/nemo_retriever/src/nemo_retriever/model/local/nemotron_rerank_v2.py new file mode 100644 index 000000000..eca0ee674 --- /dev/null +++ b/nemo_retriever/src/nemo_retriever/model/local/nemotron_rerank_v2.py @@ -0,0 +1,210 @@ +# SPDX-FileCopyrightText: Copyright (c) 2024-25, NVIDIA CORPORATION & AFFILIATES. +# All rights reserved. +# SPDX-License-Identifier: Apache-2.0 + +"""Local wrapper for nvidia/llama-nemotron-rerank-1b-v2 cross-encoder reranker.""" + +from __future__ import annotations + +from typing import List, Optional + +from nemo_retriever.utils.hf_cache import configure_global_hf_cache_base +from ..model import BaseModel, RunMode + + +_DEFAULT_MODEL = "nvidia/llama-nemotron-rerank-1b-v2" +_DEFAULT_MAX_LENGTH = 512 +_DEFAULT_BATCH_SIZE = 32 + + +def _prompt_template(query: str, passage: str) -> str: + """Format a (query, passage) pair as the model expects.""" + return f"question:{query} \n \n passage:{passage}" + + +class NemotronRerankV2(BaseModel): + """ + Local cross-encoder reranker wrapping nvidia/llama-nemotron-rerank-1b-v2. + + The model scores (query, document) pairs and returns raw logits; higher + values indicate greater relevance. It is fine-tuned from + meta-llama/Llama-3.2-1B with bi-directional attention and supports 26 + languages with sequences up to 8 192 tokens. + + Example:: + + reranker = NemotronRerankV2() + scores = reranker.score("What is ML?", ["Machine learning is…", "Paris is…"]) + # scores -> [20.6, -23.1] (higher = more relevant) + """ + + def __init__( + self, + model_name: str = _DEFAULT_MODEL, + device: Optional[str] = None, + hf_cache_dir: Optional[str] = None, + ) -> None: + super().__init__() + import torch + from transformers import AutoModelForSequenceClassification, AutoTokenizer + + configure_global_hf_cache_base() + + self._model_name = model_name + self._device = device or ("cuda" if torch.cuda.is_available() else "cpu") + + kwargs: dict = {"trust_remote_code": True} + if hf_cache_dir: + kwargs["cache_dir"] = hf_cache_dir + + self._tokenizer = AutoTokenizer.from_pretrained( + model_name, + padding_side="left", + **kwargs, + ) + if self._tokenizer.pad_token is None: + self._tokenizer.pad_token = self._tokenizer.eos_token + + self._model = ( + AutoModelForSequenceClassification.from_pretrained( + model_name, + torch_dtype=torch.bfloat16, + **kwargs, + ) + .eval() + .to(self._device) + ) + + if self._model.config.pad_token_id is None: + self._model.config.pad_token_id = self._tokenizer.eos_token_id + + # ------------------------------------------------------------------ + # BaseModel abstract properties + # ------------------------------------------------------------------ + + @property + def model_name(self) -> str: + return self._model_name + + @property + def model_type(self) -> str: + return "reranker" + + @property + def model_runmode(self) -> RunMode: + return "local" + + @property + def input(self): + return "List[Tuple[str, str]]" + + @property + def output(self): + return "List[float]" + + @property + def input_batch_size(self) -> int: + return _DEFAULT_BATCH_SIZE + + # ------------------------------------------------------------------ + # Public API + # ------------------------------------------------------------------ + + def score( + self, + query: str, + documents: List[str], + *, + max_length: int = _DEFAULT_MAX_LENGTH, + batch_size: int = _DEFAULT_BATCH_SIZE, + ) -> List[float]: + """ + Score relevance of *documents* to *query*. + + Parameters + ---------- + query: + The search query. + documents: + Candidate passages/documents to score. + max_length: + Tokenizer truncation length (default 512; max supported 8 192). + batch_size: + Number of (query, doc) pairs to process per GPU forward pass. + + Returns + ------- + List[float] + Raw logit scores aligned with *documents* (higher = more relevant). + """ + import torch + + if not documents: + return [] + + texts = [_prompt_template(query, d) for d in documents] + all_scores: List[float] = [] + + with torch.inference_mode(): + for start in range(0, len(texts), batch_size): + chunk = texts[start : start + batch_size] + batch = self._tokenizer( + chunk, + padding=True, + truncation=True, + return_tensors="pt", + max_length=max_length, + ) + batch = {k: v.to(self._device) for k, v in batch.items()} + logits = self._model(**batch).logits + all_scores.extend(logits.view(-1).cpu().tolist()) + + return all_scores + + def score_pairs( + self, + pairs: List[tuple], + *, + max_length: int = _DEFAULT_MAX_LENGTH, + batch_size: int = _DEFAULT_BATCH_SIZE, + ) -> List[float]: + """ + Score a list of (query, document) pairs. + + Parameters + ---------- + pairs: + Sequence of ``(query, document)`` tuples. + max_length: + Tokenizer truncation length. + batch_size: + GPU forward-pass batch size. + + Returns + ------- + List[float] + Raw logit scores (higher = more relevant). + """ + import torch + + if not pairs: + return [] + + texts = [_prompt_template(q, d) for q, d in pairs] + all_scores: List[float] = [] + + with torch.inference_mode(): + for start in range(0, len(texts), batch_size): + chunk = texts[start : start + batch_size] + batch = self._tokenizer( + chunk, + padding=True, + truncation=True, + return_tensors="pt", + max_length=max_length, + ) + batch = {k: v.to(self._device) for k, v in batch.items()} + logits = self._model(**batch).logits + all_scores.extend(logits.view(-1).cpu().tolist()) + + return all_scores diff --git a/nemo_retriever/src/nemo_retriever/recall/core.py b/nemo_retriever/src/nemo_retriever/recall/core.py index d5174b968..882e3722b 100644 --- a/nemo_retriever/src/nemo_retriever/recall/core.py +++ b/nemo_retriever/src/nemo_retriever/recall/core.py @@ -9,6 +9,7 @@ from dataclasses import dataclass from pathlib import Path from typing import Any, Dict, List, Optional, Sequence, Tuple +from nemo_retriever.retriever import Retriever import json logger = logging.getLogger(__name__) @@ -48,6 +49,10 @@ class RecallConfig: # - pdf_page: compare on "{pdf}_{page}" keys # - pdf_only: compare on "{pdf}" document keys match_mode: str = "pdf_page" + reranker: Optional[str] = None + reranker_endpoint: Optional[str] = None + reranker_api_key: str = "" + reranker_batch_size: int = 32 def _normalize_pdf_name(value: str) -> str: @@ -179,81 +184,21 @@ def _embed_queries_local_hf( return vecs.detach().to("cpu").tolist() -def _search_lancedb( - *, - lancedb_uri: str, - table_name: str, - query_vectors: List[List[float]], - top_k: int, - vector_column_name: str = "vector", - nprobes: int = 0, - refine_factor: int = 10, - query_texts: Optional[List[str]] = None, - hybrid: bool = False, -) -> List[List[Dict[str, Any]]]: - import lancedb # type: ignore - - db = lancedb.connect(lancedb_uri) - table = db.open_table(table_name) - - # Determine nprobes: 0 means "search all partitions" for exhaustive ANN search. - # Read the actual partition count from the index so we don't hard-code it. - effective_nprobes = nprobes - if effective_nprobes <= 0: - try: - indices = table.list_indices() - for idx in indices: - np_ = getattr(idx, "num_partitions", None) - if np_ and int(np_) > 0: - effective_nprobes = int(np_) - break - except Exception: - pass - if effective_nprobes <= 0: - effective_nprobes = 16 # safe fallback matching default index config - - results: List[List[Dict[str, Any]]] = [] - for i, v in enumerate(query_vectors): - q = np.asarray(v, dtype="float32") - - if hybrid and query_texts is not None: - from lancedb.rerankers import RRFReranker # type: ignore - - text = query_texts[i] - hits = ( - table.search(query_type="hybrid") - .vector(q) - .text(text) - .nprobes(effective_nprobes) - .refine_factor(refine_factor) - .select(["text", "metadata", "source", "page_number"]) - .limit(top_k) - .rerank(RRFReranker()) - .to_list() - ) - else: - hits = ( - table.search(q, vector_column_name=vector_column_name) - .nprobes(effective_nprobes) - .refine_factor(refine_factor) - .select(["text", "metadata", "source", "page_number", "_distance"]) - .limit(top_k) - .to_list() - ) - - results.append(hits) - return results - - def _hits_to_keys(raw_hits: List[List[Dict[str, Any]]]) -> List[List[str]]: retrieved_keys: List[List[str]] = [] for hits in raw_hits: keys: List[str] = [] for h in hits: + page_number = h["page_number"] + source = h["source"] page_number = h["page_number"] source = h["source"] # Prefer explicit `pdf_page` column; fall back to derived form. # if res.get("page_number") is not None and source.get("source_id"): + if page_number is not None and source: + filename = Path(source).stem + keys.append(f"{filename}_{str(page_number)}") + # if res.get("page_number") is not None and source.get("source_id"): if page_number is not None and source: filename = Path(source).stem keys.append(f"{filename}_{str(page_number)}") @@ -359,35 +304,34 @@ def retrieve_and_score( queries = df_query["query"].astype(str).tolist() gold = df_query["golden_answer"].astype(str).tolist() - endpoint, use_grpc = _resolve_embedding_endpoint(cfg) - if endpoint is not None and use_grpc is not None: - vectors = _embed_queries_nim( - queries, - endpoint=endpoint, - model=cfg.embedding_model, - api_key=cfg.embedding_api_key, - grpc=bool(use_grpc), - ) - else: - vectors = _embed_queries_local_hf( - queries, - device=cfg.local_hf_device, - cache_dir=cfg.local_hf_cache_dir, - batch_size=int(cfg.local_hf_batch_size), - model_name=cfg.embedding_model, - ) - raw_hits = _search_lancedb( + retriever = Retriever( lancedb_uri=cfg.lancedb_uri, - table_name=cfg.lancedb_table, - query_vectors=vectors, - top_k=int(cfg.top_k), - vector_column_name=vector_column_name, - nprobes=int(cfg.nprobes), - refine_factor=int(cfg.refine_factor), - query_texts=queries, + lancedb_table=cfg.lancedb_table, + embedder=cfg.embedding_model or "nvidia/llama-nemotron-embed-1b-v2", + embedding_http_endpoint=cfg.embedding_http_endpoint, + embedding_api_key=cfg.embedding_api_key, + top_k=cfg.top_k, + nprobes=cfg.nprobes, + refine_factor=cfg.refine_factor, hybrid=bool(cfg.hybrid), + local_hf_device=cfg.local_hf_device, + local_hf_cache_dir=cfg.local_hf_cache_dir, + local_hf_batch_size=cfg.local_hf_batch_size, + reranker=cfg.reranker, + reranker_endpoint=cfg.reranker_endpoint, + reranker_api_key=cfg.reranker_api_key, + reranker_batch_size=cfg.reranker_batch_size, ) + start = time.time() + raw_hits = retriever.queries(queries) + end_queries = time.time() - start + print( + f"Retrieval time for {len(queries)} ", + f"queries: {end_queries:.2f} seconds ", + f"(average {len(queries)/end_queries:.2f} queries/second)", + ) + retrieved_keys = _hits_to_keys(raw_hits) metrics = { f"recall@{k}": _recall_at_k(gold, retrieved_keys, int(k), match_mode=str(cfg.match_mode)) for k in cfg.ks diff --git a/nemo_retriever/src/nemo_retriever/rerank/__init__.py b/nemo_retriever/src/nemo_retriever/rerank/__init__.py new file mode 100644 index 000000000..988355cdd --- /dev/null +++ b/nemo_retriever/src/nemo_retriever/rerank/__init__.py @@ -0,0 +1,24 @@ +# SPDX-FileCopyrightText: Copyright (c) 2024-25, NVIDIA CORPORATION & AFFILIATES. +# All rights reserved. +# SPDX-License-Identifier: Apache-2.0 + +""" +Reranking stage using nvidia/llama-nemotron-rerank-1b-v2. + +Exports +------- +NemotronRerankActor + Ray Data-compatible stateful actor that initialises the cross-encoder once + per worker and scores (query, document) pairs in batch DataFrames. +rerank_hits + Convenience function to rerank a list of LanceDB hit dicts for a single + query string, using either a local ``NemotronRerankV2`` model or a remote + vLLM / NIM ``/rerank`` endpoint. +""" + +from .rerank import NemotronRerankActor, rerank_hits + +__all__ = [ + "NemotronRerankActor", + "rerank_hits", +] diff --git a/nemo_retriever/src/nemo_retriever/rerank/rerank.py b/nemo_retriever/src/nemo_retriever/rerank/rerank.py new file mode 100644 index 000000000..189b56a89 --- /dev/null +++ b/nemo_retriever/src/nemo_retriever/rerank/rerank.py @@ -0,0 +1,377 @@ +# SPDX-FileCopyrightText: Copyright (c) 2024-25, NVIDIA CORPORATION & AFFILIATES. +# All rights reserved. +# SPDX-License-Identifier: Apache-2.0 + +""" +Reranking stage using nvidia/llama-nemotron-rerank-1b-v2. + +Provides: + - ``rerank_hits`` – rerank a list of LanceDB hits for a single query + - ``NemotronRerankActor`` – Ray Data-compatible stateful actor for batch DataFrames + +Remote endpoint +--------------- +When ``invoke_url`` is set the actor/function calls a vLLM (>=0.14) or NIM +server that exposes the OpenAI-compatible ``/rerank`` REST API:: + + POST /rerank + { + "model": "nvidia/llama-nemotron-rerank-1b-v2", + "query": "...", + "documents": ["...", "..."], + "top_n": N + } + +Local model +----------- +When no endpoint is configured the model is loaded directly from HuggingFace +(or ``hf_cache_dir``) using ``NemotronRerankV2``. + +Ray Data actor usage:: + + import ray + ds = ds.map_batches( + NemotronRerankActor, + batch_size=64, + batch_format="pandas", + num_gpus=1, + compute=ray.data.ActorPoolStrategy(size=4), + fn_constructor_kwargs={ + "model_name": "nvidia/llama-nemotron-rerank-1b-v2", + "query_column": "query", + "text_column": "text", + "score_column": "rerank_score", + "max_length": 512, + "batch_size": 32, + }, + ) +""" + +from __future__ import annotations + +import traceback +from typing import Any, Dict, List, Optional + +import pandas as pd + + +_DEFAULT_MODEL = "nvidia/llama-nemotron-rerank-1b-v2" +_DEFAULT_MAX_LENGTH = 512 +_DEFAULT_BATCH_SIZE = 32 +_SCORE_COLUMN = "rerank_score" + + +# --------------------------------------------------------------------------- +# Remote endpoint helper +# --------------------------------------------------------------------------- + + +def _rerank_via_endpoint( + query: str, + documents: List[str], + *, + endpoint: str, + model_name: str = _DEFAULT_MODEL, + api_key: str = "", + top_n: Optional[int] = None, +) -> List[float]: + """ + Call a vLLM / NIM ``/rerank`` REST endpoint and return per-document scores. + + The server must expose the OpenAI-compatible rerank API introduced in + vLLM >= 0.14.0:: + + POST {endpoint}/rerank + {"model": ..., "query": ..., "documents": [...], "top_n": N} + + Returns + ------- + List[float] + Scores aligned with *documents* (higher = more relevant). + Documents not returned by ``top_n`` truncation receive ``-inf``. + """ + import requests + + url = endpoint.rstrip("/") + "/rerank" + headers: Dict[str, str] = {"Content-Type": "application/json"} + if api_key: + headers["Authorization"] = f"Bearer {api_key}" + + payload: Dict[str, Any] = { + "model": model_name, + "query": query, + "documents": documents, + } + if top_n is not None: + payload["top_n"] = top_n + + response = requests.post(url, json=payload, headers=headers, timeout=120) + response.raise_for_status() + data = response.json() + + # Build score list aligned with input document order. + scores = [float("-inf")] * len(documents) + for item in data.get("results", []): + idx = item.get("index") + score = item.get("relevance_score") + if idx is not None and score is not None: + scores[idx] = float(score) + return scores + + +# --------------------------------------------------------------------------- +# Public helper: rerank LanceDB hits for a single query +# --------------------------------------------------------------------------- + + +def rerank_hits( + query: str, + hits: List[Dict[str, Any]], + *, + model: Optional[Any] = None, + invoke_url: Optional[str] = None, + model_name: str = _DEFAULT_MODEL, + api_key: str = "", + max_length: int = _DEFAULT_MAX_LENGTH, + batch_size: int = _DEFAULT_BATCH_SIZE, + top_n: Optional[int] = None, + text_key: str = "text", +) -> List[Dict[str, Any]]: + """ + Rerank *hits* (list of LanceDB result dicts) by relevance to *query*. + + Each hit that has a ``text_key`` field is scored; hits without text are + placed at the end. The returned list is sorted highest-score first and + each dict gains a ``"_rerank_score"`` field. + + Parameters + ---------- + query: + The search query. + hits: + LanceDB result dicts (as returned by ``Retriever.queries()``). + model: + A ``NemotronRerankV2`` instance (local GPU inference). Ignored when + *invoke_url* is set. + invoke_url: + Base URL of a vLLM / NIM ``/rerank`` endpoint. Takes priority over + *model*. + model_name: + Model identifier sent to the remote endpoint (default + ``"nvidia/llama-nemotron-rerank-1b-v2"``). + api_key: + Bearer token for the remote endpoint. + max_length: + Tokenizer truncation length for local inference (max 8 192). + batch_size: + GPU forward-pass batch size for local inference. + top_n: + If set, only the top-N results (after reranking) are returned. + text_key: + Dict key used to extract document text from each hit (default + ``"text"``). + + Returns + ------- + List[dict] + Hits sorted by ``"_rerank_score"`` descending. Each dict has a new + ``"_rerank_score"`` key with the raw logit (local) or relevance score + (remote). + """ + if not hits: + return hits + + documents = [str(h.get(text_key) or "") for h in hits] + + if invoke_url: + scores = _rerank_via_endpoint( + query, + documents, + endpoint=invoke_url, + model_name=model_name, + api_key=api_key, + ) + elif model is not None: + scores = model.score(query, documents, max_length=max_length, batch_size=batch_size) + else: + raise ValueError("Either 'model' (NemotronRerankV2 instance) or 'invoke_url' must be provided.") + + ranked = sorted( + [{"_rerank_score": s, **h} for s, h in zip(scores, hits)], + key=lambda x: x["_rerank_score"], + reverse=True, + ) + + if top_n is not None: + ranked = ranked[:top_n] + + return ranked + + +# --------------------------------------------------------------------------- +# Error payload helper (mirrors other actors in this project) +# --------------------------------------------------------------------------- + + +def _error_payload(*, stage: str, exc: BaseException) -> Dict[str, Any]: + return { + "status": "error", + "stage": stage, + "error_message": str(exc), + "traceback": traceback.format_exc(), + } + + +# --------------------------------------------------------------------------- +# Ray Data actor +# --------------------------------------------------------------------------- + + +class NemotronRerankActor: + """ + Ray Data-compatible stateful actor for cross-encoder reranking. + + Initialises ``nvidia/llama-nemotron-rerank-1b-v2`` **once** per actor + instance and reuses it across batches, avoiding repeated model loads. + + Each row in the input DataFrame is expected to have a *query* column and a + *text* (document) column. The actor appends a ``rerank_score`` column + (name configurable) with the raw logit score. + + Usage with Ray Data:: + + import ray + ds = ds.map_batches( + NemotronRerankActor, + batch_size=64, + batch_format="pandas", + num_gpus=1, + compute=ray.data.ActorPoolStrategy(size=4), + fn_constructor_kwargs={ + "model_name": "nvidia/llama-nemotron-rerank-1b-v2", + "query_column": "query", + "text_column": "text", + "score_column": "rerank_score", + "max_length": 512, + "batch_size": 32, + }, + ) + + Parameters + ---------- + model_name: + HuggingFace model ID (default ``"nvidia/llama-nemotron-rerank-1b-v2"``). + invoke_url: + Base URL of a vLLM / NIM ``/rerank`` endpoint. When set the actor + skips local model creation and delegates all scoring to the endpoint. + Also accepted as ``rerank_invoke_url``. + api_key: + Bearer token for the remote endpoint. + device: + Torch device string (default: ``"cuda"`` if available, else ``"cpu"``). + hf_cache_dir: + Directory for HuggingFace model cache. + query_column: + DataFrame column containing query strings (default ``"query"``). + text_column: + DataFrame column containing document/passage text (default ``"text"``). + score_column: + Output column name for rerank scores (default ``"rerank_score"``). + max_length: + Tokenizer truncation length (default 512). + batch_size: + GPU forward-pass micro-batch size (default 32). + sort_results: + If ``True`` (default) rows in each batch are sorted by score descending. + """ + + __slots__ = ("_kwargs", "_model") + + def __init__(self, **kwargs: Any) -> None: + self._kwargs = dict(kwargs) + + invoke_url = str(self._kwargs.get("rerank_invoke_url") or self._kwargs.get("invoke_url") or "").strip() + if invoke_url and "invoke_url" not in self._kwargs: + self._kwargs["invoke_url"] = invoke_url + + if invoke_url: + self._model = None + else: + from nemo_retriever.model.local import NemotronRerankV2 + + self._model = NemotronRerankV2( + model_name=str(self._kwargs.get("model_name", _DEFAULT_MODEL)), + device=self._kwargs.get("device") or None, + hf_cache_dir=str(self._kwargs["hf_cache_dir"]) if self._kwargs.get("hf_cache_dir") else None, + ) + + def __call__(self, batch_df: Any, **override_kwargs: Any) -> Any: + try: + return _rerank_batch(batch_df, model=self._model, **self._kwargs, **override_kwargs) + except BaseException as exc: + if isinstance(batch_df, pd.DataFrame): + out = batch_df.copy() + payload = _error_payload(stage="actor_call", exc=exc) + score_col = str(self._kwargs.get("score_column", _SCORE_COLUMN)) + out[score_col] = [payload for _ in range(len(out.index))] + return out + return [{"rerank_score": _error_payload(stage="actor_call", exc=exc)}] + + +# --------------------------------------------------------------------------- +# Batch processing function (called by actor and usable standalone) +# --------------------------------------------------------------------------- + + +def _rerank_batch( + batch_df: pd.DataFrame, + *, + model: Optional[Any] = None, + invoke_url: Optional[str] = None, + model_name: str = _DEFAULT_MODEL, + api_key: str = "", + query_column: str = "query", + text_column: str = "text", + score_column: str = _SCORE_COLUMN, + max_length: int = _DEFAULT_MAX_LENGTH, + batch_size: int = _DEFAULT_BATCH_SIZE, + sort_results: bool = True, + **_ignored: Any, +) -> pd.DataFrame: + """ + Score each (query, document) row in *batch_df* and append *score_column*. + + When *sort_results* is ``True`` the returned DataFrame is sorted by score + descending within the batch. + """ + if not isinstance(batch_df, pd.DataFrame): + raise TypeError(f"Expected a pandas DataFrame, got {type(batch_df)}") + + queries = batch_df[query_column].tolist() + texts = batch_df[text_column].tolist() + pairs = list(zip(queries, texts)) + + if invoke_url: + # Remote endpoint: score pair-by-pair (each row may have a different query). + scores: List[float] = [] + for q, d in pairs: + row_scores = _rerank_via_endpoint( + q, + [d], + endpoint=invoke_url, + model_name=model_name, + api_key=api_key, + ) + scores.append(row_scores[0]) + elif model is not None: + scores = model.score_pairs(pairs, max_length=max_length, batch_size=batch_size) + else: + raise ValueError("Either 'model' or 'invoke_url' must be provided to NemotronRerankActor.") + + out = batch_df.copy() + out[score_column] = scores + + if sort_results: + out = out.sort_values(score_column, ascending=False).reset_index(drop=True) + + return out diff --git a/nemo_retriever/src/nemo_retriever/retriever.py b/nemo_retriever/src/nemo_retriever/retriever.py index bffd35cf0..aa9203783 100644 --- a/nemo_retriever/src/nemo_retriever/retriever.py +++ b/nemo_retriever/src/nemo_retriever/retriever.py @@ -4,14 +4,39 @@ from __future__ import annotations -from dataclasses import dataclass +from dataclasses import dataclass, field from pathlib import Path from typing import Any, Optional, Sequence +from tqdm import tqdm @dataclass class Retriever: - """Simple query helper over LanceDB with configurable embedders.""" + """Simple query helper over LanceDB with configurable embedders. + + Retrieval pipeline + ------------------ + 1. Embed query strings (NIM endpoint or local HuggingFace model). + 2. Search LanceDB (vector or hybrid vector+BM25). + 3. Optionally rerank the results with ``nvidia/llama-nemotron-rerank-1b-v2`` + (NIM/vLLM endpoint or local HuggingFace model). + + Reranking + --------- + Set ``reranker`` to a model name (e.g. + ``"nvidia/llama-nemotron-rerank-1b-v2"``) to enable post-retrieval + reranking. Results are re-sorted by the cross-encoder score and a + ``"_rerank_score"`` key is added to each hit dict. + + Use ``reranker_endpoint`` to delegate to a running vLLM (>=0.14) or NIM + server instead of loading the model locally:: + + retriever = Retriever( + reranker="nvidia/llama-nemotron-rerank-1b-v2", + reranker_endpoint="http://localhost:8000", + ) + results = retriever.query("What is machine learning?") + """ lancedb_uri: str = "lancedb" lancedb_table: str = "nv-ingest" @@ -27,6 +52,23 @@ class Retriever: local_hf_device: Optional[str] = None local_hf_cache_dir: Optional[Path] = None local_hf_batch_size: int = 64 + # Reranking ----------------------------------------------------------- + reranker: Optional[str] = "nvidia/llama-nemotron-rerank-1b-v2" + """HuggingFace model ID for local reranking (e.g. 'nvidia/llama-nemotron-rerank-1b-v2'). + Set to None to skip reranking (default).""" + reranker_endpoint: Optional[str] = None + """Base URL of a vLLM / NIM /rerank endpoint. Takes priority over local model.""" + reranker_api_key: str = "" + """Bearer token for the remote rerank endpoint.""" + reranker_max_length: int = 512 + """Tokenizer truncation length for local reranking (max 8 192).""" + reranker_batch_size: int = 32 + """GPU micro-batch size for local reranking.""" + reranker_refine_factor: int = 4 + """Number of candidates to rerank = top_k * reranker_refine_factor. + Set to 1 to rerank only the top_k results.""" + # Internal cache for the local rerank model (not part of the public API). + _reranker_model: Any = field(default=None, init=False, repr=False, compare=False) def _resolve_embedding_endpoint(self) -> Optional[str]: http_ep = self.embedding_http_endpoint.strip() if isinstance(self.embedding_http_endpoint, str) else None @@ -107,6 +149,8 @@ def _search_lancedb( results: list[list[dict[str, Any]]] = [] for i, vector in enumerate(query_vectors): q = np.asarray(vector, dtype="float32") + # doubling top_k for both hybrid and dense search in order to have more to rerank + top_k = self.top_k if not self.reranker else self.top_k * self.reranker_refine_factor if self.hybrid: from lancedb.rerankers import RRFReranker # type: ignore @@ -116,8 +160,8 @@ def _search_lancedb( .text(query_texts[i]) .nprobes(effective_nprobes) .refine_factor(int(self.refine_factor)) - .select(["text", "metadata", "source"]) - .limit(int(self.top_k)) + .select(["text", "metadata", "source", "page_number"]) + .limit(int(top_k)) .rerank(RRFReranker()) .to_list() ) @@ -126,13 +170,62 @@ def _search_lancedb( table.search(q, vector_column_name=self.vector_column_name) .nprobes(effective_nprobes) .refine_factor(int(self.refine_factor)) - .select(["text", "metadata", "source", "_distance"]) - .limit(int(self.top_k)) + .select(["text", "metadata", "source", "page_number", "_distance"]) + .limit(int(top_k)) .to_list() ) results.append(hits) return results + # ------------------------------------------------------------------ + # Reranking helpers + # ------------------------------------------------------------------ + + def _get_reranker_model(self) -> Any: + """Lazily load and cache the local NemotronRerankV2 model.""" + if self._reranker_model is None: + from nemo_retriever.model.local import NemotronRerankV2 + + cache_dir = str(self.local_hf_cache_dir) if self.local_hf_cache_dir else None + self._reranker_model = NemotronRerankV2( + model_name=str(self.reranker), + device=self.local_hf_device, + hf_cache_dir=cache_dir, + ) + return self._reranker_model + + def _rerank_results( + self, + query_texts: list[str], + results: list[list[dict[str, Any]]], + ) -> list[list[dict[str, Any]]]: + """Rerank each per-query result list using the configured reranker.""" + from nemo_retriever.rerank import rerank_hits + + reranker_endpoint = (self.reranker_endpoint or "").strip() or None + model = None if reranker_endpoint else self._get_reranker_model() + + reranked: list[list[dict[str, Any]]] = [] + for query, hits in tqdm(zip(query_texts, results), desc="Reranking", unit="query", total=len(query_texts)): + reranked.append( + rerank_hits( + query, + hits, + model=model, + invoke_url=reranker_endpoint, + model_name=str(self.reranker), + api_key=(self.reranker_api_key or "").strip(), + max_length=int(self.reranker_max_length), + batch_size=int(self.reranker_batch_size), + top_n=int(self.top_k), + ) + ) + return reranked + + # ------------------------------------------------------------------ + # Public query API + # ------------------------------------------------------------------ + def query( self, query: str, @@ -157,7 +250,13 @@ def queries( lancedb_uri: Optional[str] = None, lancedb_table: Optional[str] = None, ) -> list[list[dict[str, Any]]]: - """Run retrieval for multiple query strings.""" + """Run retrieval for multiple query strings. + + If ``reranker`` is set on this instance the initial vector-search + results are re-scored with ``nvidia/llama-nemotron-rerank-1b-v2`` + (or the configured endpoint) and returned sorted by cross-encoder + score. Each hit gains a ``"_rerank_score"`` key. + """ query_texts = [str(q) for q in queries] if not query_texts: return [] @@ -179,13 +278,21 @@ def queries( model_name=resolved_embedder, ) - return self._search_lancedb( + results = self._search_lancedb( lancedb_uri=resolved_lancedb_uri, lancedb_table=resolved_lancedb_table, query_vectors=vectors, query_texts=query_texts, ) + if self.reranker: + assert self.top_k * self.reranker_refine_factor == len( + results[0] + ), "top_k must be at least 1/4 of the number of retrieved hits for reranking to work properly." + results = self._rerank_results(query_texts, results) + + return results + # Backward compatibility alias. retriever = Retriever diff --git a/nemo_retriever/src/nemo_retriever/utils/benchmark/audio_extract_actor.py b/nemo_retriever/src/nemo_retriever/utils/benchmark/audio_extract_actor.py index 748a00975..8ade02b36 100644 --- a/nemo_retriever/src/nemo_retriever/utils/benchmark/audio_extract_actor.py +++ b/nemo_retriever/src/nemo_retriever/utils/benchmark/audio_extract_actor.py @@ -55,6 +55,73 @@ def __call__(self, batch_df: pd.DataFrame) -> pd.DataFrame: app = typer.Typer(help="Benchmark audio extraction (MediaChunkActor + ASRActor) throughput (chunk rows/sec).") +def run_benchmark( + audio_path: Path, + rows: int = 16, + workers: str = "1,2", + batch_sizes: str = "2,4,8", + mock_asr: bool = True, + split_type: str = "size", + split_interval: int = 450, + ray_address: Optional[str] = None, + output_json: Optional[Path] = None, +) -> None: + if not is_media_available(): + raise typer.BadParameter("Audio benchmark requires ffmpeg on PATH.") + + if split_type not in ("size", "time", "frame"): + raise typer.BadParameter("--split-type must be one of: size, time, frame") + + maybe_init_ray(ray_address) + worker_grid = parse_csv_ints(workers, name="workers") + batch_grid = parse_csv_ints(batch_sizes, name="batch_sizes") + seed_row = make_seed_audio_row(audio_path) + + chunk_params = AudioChunkParams( + split_type=split_type, + split_interval=split_interval, + ) + + def _map(ds: rd.Dataset, worker_count: int, batch_size: int) -> rd.Dataset: + chunk_actor = MediaChunkActor(params=chunk_params) + if mock_asr: + asr_actor = MockASRActor() + else: + asr_actor = ASRActor(params=asr_params_from_env()) + + ds = ds.map_batches( + chunk_actor, + batch_size=int(batch_size), + batch_format="pandas", + num_cpus=1, + num_gpus=0, + compute=rd.TaskPoolStrategy(size=int(worker_count)), + ) + ds = ds.map_batches( + asr_actor, + batch_size=int(batch_size), + batch_format="pandas", + num_cpus=1, + num_gpus=0.25 if not mock_asr else 0, + compute=rd.TaskPoolStrategy(size=int(worker_count)), + ) + return ds + + best, results = benchmark_sweep( + stage_name="audio_extract", + seed_row=seed_row, + rows=int(rows), + workers=worker_grid, + batch_sizes=batch_grid, + map_builder=_map, + ) + typer.echo( + f"BEST audio_extract: workers={best.workers} batch_size={best.batch_size} " + f"chunk_rows={best.rows} elapsed={best.elapsed_seconds:.3f}s rows_per_second={best.rows_per_second:.2f}" + ) + maybe_write_results_json(output_json, best=best, results=results) + + @app.command("run") def run( audio_path: Path = typer.Option( @@ -108,57 +175,14 @@ def run( help="Optional output JSON summary path.", ), ) -> None: - if not is_media_available(): - raise typer.BadParameter("Audio benchmark requires ffmpeg on PATH.") - - if split_type not in ("size", "time", "frame"): - raise typer.BadParameter("--split-type must be one of: size, time, frame") - - maybe_init_ray(ray_address) - worker_grid = parse_csv_ints(workers, name="workers") - batch_grid = parse_csv_ints(batch_sizes, name="batch_sizes") - seed_row = make_seed_audio_row(audio_path) - - chunk_params = AudioChunkParams( + run_benchmark( + audio_path=audio_path, + rows=rows, + workers=workers, + batch_sizes=batch_sizes, + mock_asr=mock_asr, split_type=split_type, split_interval=split_interval, + ray_address=ray_address, + output_json=output_json, ) - - def _map(ds: rd.Dataset, worker_count: int, batch_size: int) -> rd.Dataset: - chunk_actor = MediaChunkActor(params=chunk_params) - if mock_asr: - asr_actor = MockASRActor() - else: - asr_actor = ASRActor(params=asr_params_from_env()) - - ds = ds.map_batches( - chunk_actor, - batch_size=int(batch_size), - batch_format="pandas", - num_cpus=1, - num_gpus=0, - compute=rd.TaskPoolStrategy(size=int(worker_count)), - ) - ds = ds.map_batches( - asr_actor, - batch_size=int(batch_size), - batch_format="pandas", - num_cpus=1, - num_gpus=0.25 if not mock_asr else 0, - compute=rd.TaskPoolStrategy(size=int(worker_count)), - ) - return ds - - best, results = benchmark_sweep( - stage_name="audio_extract", - seed_row=seed_row, - rows=int(rows), - workers=worker_grid, - batch_sizes=batch_grid, - map_builder=_map, - ) - typer.echo( - f"BEST audio_extract: workers={best.workers} batch_size={best.batch_size} " - f"chunk_rows={best.rows} elapsed={best.elapsed_seconds:.3f}s rows_per_second={best.rows_per_second:.2f}" - ) - maybe_write_results_json(output_json, best=best, results=results) diff --git a/nemo_retriever/src/nemo_retriever/vector_store/lancedb_store.py b/nemo_retriever/src/nemo_retriever/vector_store/lancedb_store.py index ebe460204..c3acb2d8f 100644 --- a/nemo_retriever/src/nemo_retriever/vector_store/lancedb_store.py +++ b/nemo_retriever/src/nemo_retriever/vector_store/lancedb_store.py @@ -171,7 +171,6 @@ def _build_lancedb_rows_from_df(rows: List[Dict[str, Any]]) -> List[Dict[str, An "pdf_basename": pdf_basename, "page_number": int(page_number), "source": source_id, - "source_id": source_id, "path": path, "text": row.get("text", ""), "metadata": str(meta), @@ -295,26 +294,6 @@ def write_text_embeddings_dir_to_lancedb( lancedb.run(results) - # all_rows: List[Dict[str, Any]] = [] - # for p in files: - # try: - # df = _read_text_embeddings_json_df(p) - # if df.empty: - # skipped += 1 - # continue - # rows = _build_lancedb_rows_from_df(df) - # if not rows: - # skipped += 1 - # continue - # all_rows.extend(rows) - # processed += 1 - # except Exception: - # failed += 1 - # logger.exception("Failed reading embeddings from %s", p) - - # # Write once so --overwrite behaves as expected. - # _write_rows_to_lancedb(all_rows, cfg=cfg) - return { "input_dir": str(input_dir), "n_files": len(files), diff --git a/nemo_retriever/tests/test_audio_benchmark.py b/nemo_retriever/tests/test_audio_benchmark.py index 3862d3a83..a6b67f092 100644 --- a/nemo_retriever/tests/test_audio_benchmark.py +++ b/nemo_retriever/tests/test_audio_benchmark.py @@ -31,25 +31,12 @@ def test_audio_benchmark_run_mock_asr(tmp_path: Path): wav = tmp_path / "tiny.wav" _make_small_wav(wav, duration_sec=0.3) - from typer.testing import CliRunner - - from nemo_retriever.utils.benchmark.audio_extract_actor import app - - runner = CliRunner() - result = runner.invoke( - app, - [ - "run", - "--audio-path", - str(wav), - "--rows", - "2", - "--workers", - "1", - "--batch-sizes", - "2", - "--mock-asr", - ], + from nemo_retriever.utils.benchmark.audio_extract_actor import run_benchmark + + run_benchmark( + audio_path=wav, + rows=2, + workers="1", + batch_sizes="2", + mock_asr=True, ) - assert result.exit_code == 0, (result.stdout, result.stderr) - assert "audio_extract" in result.stdout or "BEST" in result.stdout diff --git a/nemo_retriever/tests/test_audio_pipeline_batch.py b/nemo_retriever/tests/test_audio_pipeline_batch.py index 09ce1a7ad..ae0d3a136 100644 --- a/nemo_retriever/tests/test_audio_pipeline_batch.py +++ b/nemo_retriever/tests/test_audio_pipeline_batch.py @@ -96,6 +96,7 @@ def test_batch_audio_pipeline_with_mocked_asr(tmp_path: Path): runtime_env={"working_dir": str(_nv_ingest_root)}, ) results = ingestor.ingest() + results = results._rd_dataset.take_all() if results is not None else None finally: try: ray.shutdown() @@ -219,6 +220,7 @@ def test_fused_audio_pipeline_with_mocked_asr(tmp_path: Path): runtime_env={"working_dir": str(_nv_ingest_root)}, ) results = ingestor.ingest() + results = results._rd_dataset.take_all() if results is not None else None finally: try: ray.shutdown() diff --git a/nemo_retriever/tests/test_html_convert.py b/nemo_retriever/tests/test_html_convert.py index e558a4b29..399ae9091 100644 --- a/nemo_retriever/tests/test_html_convert.py +++ b/nemo_retriever/tests/test_html_convert.py @@ -11,7 +11,11 @@ import pandas as pd import pytest -from nemo_retriever.html.convert import html_bytes_to_chunks_df, html_file_to_chunks_df, html_to_markdown +from nemo_retriever.html.convert import ( + html_bytes_to_chunks_df, + html_file_to_chunks_df, + html_to_markdown, +) def test_html_to_markdown_str(): diff --git a/nemo_retriever/tests/test_nemotron_rerank_v2.py b/nemo_retriever/tests/test_nemotron_rerank_v2.py new file mode 100644 index 000000000..4c6761a5b --- /dev/null +++ b/nemo_retriever/tests/test_nemotron_rerank_v2.py @@ -0,0 +1,608 @@ +# SPDX-FileCopyrightText: Copyright (c) 2024-25, NVIDIA CORPORATION & AFFILIATES. +# All rights reserved. +# SPDX-License-Identifier: Apache-2.0 + +""" +Unit tests for NemotronRerankV2 and the rerank module helpers. + +All heavy dependencies (torch, transformers, nemo_retriever.utils.hf_cache) +are stubbed via sys.modules injection so no GPU or model download is required. +""" + +from __future__ import annotations + +import sys +from types import ModuleType +from unittest.mock import MagicMock, patch + +import pytest + + +# --------------------------------------------------------------------------- +# Helpers to build lightweight torch / transformers stubs +# --------------------------------------------------------------------------- + + +def _make_tensor_stub(values: list[float]) -> MagicMock: + """Return a mock that mimics a 1-D torch.Tensor view(-1).cpu().tolist().""" + t = MagicMock() + t.view.return_value = t + t.cpu.return_value = t + t.tolist.return_value = values + return t + + +def _make_model_output_stub(logits_values: list[float]) -> MagicMock: + out = MagicMock() + out.logits = _make_tensor_stub(logits_values) + return out + + +def _build_torch_stub() -> MagicMock: + torch_mod = MagicMock() + torch_mod.cuda.is_available.return_value = False + torch_mod.bfloat16 = "bfloat16" + torch_mod.inference_mode.return_value.__enter__ = lambda s: None + torch_mod.inference_mode.return_value.__exit__ = MagicMock(return_value=False) + return torch_mod + + +def _build_transformers_stub(model_output_values: list[float]) -> tuple[MagicMock, MagicMock, MagicMock]: + """Return (transformers_mod, tokenizer_instance, model_instance).""" + tokenizer_inst = MagicMock() + tokenizer_inst.pad_token = "pad" + tokenizer_inst.eos_token_id = 0 + # __call__ on the tokenizer returns a dict of tensors + tokenizer_inst.return_value = {"input_ids": MagicMock(), "attention_mask": MagicMock()} + + model_inst = MagicMock() + model_inst.eval.return_value = model_inst + model_inst.to.return_value = model_inst + model_inst.config.pad_token_id = 1 + model_inst.return_value = _make_model_output_stub(model_output_values) + + AutoTokenizer = MagicMock() + AutoTokenizer.from_pretrained.return_value = tokenizer_inst + + AutoModelForSequenceClassification = MagicMock() + AutoModelForSequenceClassification.from_pretrained.return_value = model_inst + + transformers_mod = MagicMock() + transformers_mod.AutoTokenizer = AutoTokenizer + transformers_mod.AutoModelForSequenceClassification = AutoModelForSequenceClassification + + return transformers_mod, tokenizer_inst, model_inst + + +@pytest.fixture() +def _patch_heavy_deps(monkeypatch): + """Inject torch + transformers stubs and disable hf_cache setup.""" + torch_stub = _build_torch_stub() + transformers_stub, tok, mdl = _build_transformers_stub([1.5, -0.3]) + + monkeypatch.setitem(sys.modules, "torch", torch_stub) + monkeypatch.setitem(sys.modules, "transformers", transformers_stub) + + # Stub hf_cache so configure_global_hf_cache_base() is a no-op. + hf_cache_mod = ModuleType("nemo_retriever.utils.hf_cache") + hf_cache_mod.configure_global_hf_cache_base = MagicMock() + monkeypatch.setitem(sys.modules, "nemo_retriever.utils.hf_cache", hf_cache_mod) + + # Also stub the parent model module so BaseModel import works. + # We bypass by importing NemotronRerankV2 after patching. + yield torch_stub, transformers_stub, tok, mdl + + +# --------------------------------------------------------------------------- +# _prompt_template +# --------------------------------------------------------------------------- + + +def test_prompt_template_format(): + from nemo_retriever.rerank.rerank import _rerank_via_endpoint # noqa: F401 — just ensure importable + from nemo_retriever.model.local.nemotron_rerank_v2 import _prompt_template + + result = _prompt_template("What is ML?", "Machine learning is a branch of AI.") + assert "question:What is ML?" in result + assert "passage:Machine learning is a branch of AI." in result + + +# --------------------------------------------------------------------------- +# NemotronRerankV2 — properties & initialisation +# --------------------------------------------------------------------------- + + +class TestNemotronRerankV2Properties: + """Test BaseModel properties without loading real weights.""" + + def _make_instance(self, model_name: str = "nvidia/llama-nemotron-rerank-1b-v2") -> object: + """Instantiate NemotronRerankV2 with all heavy ops mocked out.""" + from nemo_retriever.model.local import nemotron_rerank_v2 as mod + + with ( + patch.object(mod, "configure_global_hf_cache_base"), + patch("torch.cuda.is_available", return_value=False), + patch("transformers.AutoTokenizer") as MockTok, + patch("transformers.AutoModelForSequenceClassification") as MockModel, + ): + tok = MockTok.from_pretrained.return_value + tok.pad_token = "pad" + tok.eos_token_id = 0 + mdl = MockModel.from_pretrained.return_value + mdl.eval.return_value = mdl + mdl.to.return_value = mdl + mdl.config.pad_token_id = 1 + obj = mod.NemotronRerankV2(model_name=model_name) + return obj + + def test_model_name(self): + obj = self._make_instance() + assert obj.model_name == "nvidia/llama-nemotron-rerank-1b-v2" + + def test_model_type(self): + obj = self._make_instance() + assert obj.model_type == "reranker" + + def test_model_runmode(self): + obj = self._make_instance() + assert obj.model_runmode == "local" + + def test_input_batch_size(self): + obj = self._make_instance() + assert obj.input_batch_size == 32 + + def test_custom_model_name_stored(self): + obj = self._make_instance("my-org/my-reranker") + assert obj.model_name == "my-org/my-reranker" + + def test_device_defaults_to_cpu_when_no_cuda(self): + obj = self._make_instance() + assert obj._device == "cpu" + + +# --------------------------------------------------------------------------- +# NemotronRerankV2 — score() logic (batch chunking, empty input) +# --------------------------------------------------------------------------- + + +class TestNemotronRerankV2Score: + """Test score() and score_pairs() without real model weights.""" + + @pytest.fixture() + def reranker(self): + from nemo_retriever.model.local import nemotron_rerank_v2 as mod + + with ( + patch.object(mod, "configure_global_hf_cache_base"), + patch("torch.cuda.is_available", return_value=False), + patch("transformers.AutoTokenizer") as MockTok, + patch("transformers.AutoModelForSequenceClassification") as MockModel, + ): + tok_inst = MockTok.from_pretrained.return_value + tok_inst.pad_token = "pad" + tok_inst.eos_token_id = 0 + mdl_inst = MockModel.from_pretrained.return_value + mdl_inst.eval.return_value = mdl_inst + mdl_inst.to.return_value = mdl_inst + mdl_inst.config.pad_token_id = 1 + obj = mod.NemotronRerankV2() + + return obj + + def test_score_empty_documents_returns_empty(self, reranker): + assert reranker.score("q", []) == [] + + def test_score_pairs_empty_returns_empty(self, reranker): + assert reranker.score_pairs([]) == [] + + def test_score_calls_model_and_returns_flat_list(self, reranker): + """score() should return one float per document.""" + logit_tensor = MagicMock() + logit_tensor.view.return_value = logit_tensor + logit_tensor.cpu.return_value = logit_tensor + logit_tensor.tolist.return_value = [3.5, -1.2] + + model_out = MagicMock() + model_out.logits = logit_tensor + + reranker._tokenizer.return_value = {"input_ids": MagicMock(), "attention_mask": MagicMock()} + reranker._model.return_value = model_out + + with patch("torch.inference_mode") as inf_mode: + inf_mode.return_value.__enter__ = lambda s: None + inf_mode.return_value.__exit__ = MagicMock(return_value=False) + scores = reranker.score("What is ML?", ["Machine learning is…", "Paris is…"]) + + assert len(scores) == 2 + assert scores == [3.5, -1.2] + + def test_score_prompts_are_formatted_correctly(self, reranker): + """The tokenizer must receive the templated text, not the raw document.""" + captured_texts = [] + + def fake_tokenizer(texts, **kwargs): + captured_texts.extend(texts) + m = MagicMock() + m.items.return_value = [] + return m + + reranker._tokenizer.side_effect = fake_tokenizer + + logit_tensor = MagicMock() + logit_tensor.view.return_value = logit_tensor + logit_tensor.cpu.return_value = logit_tensor + logit_tensor.tolist.return_value = [0.0] + + model_out = MagicMock() + model_out.logits = logit_tensor + reranker._model.return_value = model_out + + with patch("torch.inference_mode") as inf_mode: + inf_mode.return_value.__enter__ = lambda s: None + inf_mode.return_value.__exit__ = MagicMock(return_value=False) + reranker.score("my query", ["my document"]) + + assert len(captured_texts) == 1 + assert "question:my query" in captured_texts[0] + assert "passage:my document" in captured_texts[0] + + def test_score_splits_into_batches(self, reranker): + """With batch_size=2 and 5 documents, model should be called 3 times.""" + call_count = [0] + + def fake_tokenizer(texts, **kwargs): + m = MagicMock() + m.items.return_value = [("input_ids", MagicMock())] + return m + + reranker._tokenizer.side_effect = fake_tokenizer + + def fake_model(**kwargs): + # Count items in the batch by inspecting how many texts were tokenized + call_count[0] += 1 + logit_tensor = MagicMock() + logit_tensor.view.return_value = logit_tensor + logit_tensor.cpu.return_value = logit_tensor + logit_tensor.tolist.return_value = [1.0] * 2 # Return 2 scores per call + out = MagicMock() + out.logits = logit_tensor + return out + + reranker._model.side_effect = fake_model + + with patch("torch.inference_mode") as inf_mode: + inf_mode.return_value.__enter__ = lambda s: None + inf_mode.return_value.__exit__ = MagicMock(return_value=False) + # 5 documents, batch_size=2 → ceil(5/2) = 3 forward passes + reranker.score("q", ["d1", "d2", "d3", "d4", "d5"], batch_size=2) + + assert call_count[0] == 3 + + def test_score_pairs_uses_query_per_pair(self, reranker): + """score_pairs() must use each pair's own query, not a shared one.""" + captured = [] + + def fake_tokenizer(texts, **kwargs): + captured.extend(texts) + m = MagicMock() + m.items.return_value = [] + return m + + reranker._tokenizer.side_effect = fake_tokenizer + + logit_tensor = MagicMock() + logit_tensor.view.return_value = logit_tensor + logit_tensor.cpu.return_value = logit_tensor + logit_tensor.tolist.return_value = [0.0, 0.0] + + model_out = MagicMock() + model_out.logits = logit_tensor + reranker._model.return_value = model_out + + with patch("torch.inference_mode") as inf_mode: + inf_mode.return_value.__enter__ = lambda s: None + inf_mode.return_value.__exit__ = MagicMock(return_value=False) + reranker.score_pairs([("q1", "doc A"), ("q2", "doc B")]) + + assert any("question:q1" in t for t in captured) + assert any("question:q2" in t for t in captured) + + +# --------------------------------------------------------------------------- +# rerank_hits() — standalone helper +# --------------------------------------------------------------------------- + + +class TestRerankHits: + """Test the public rerank_hits() convenience function.""" + + def _make_hits(self, n: int, prefix: str = "doc") -> list[dict]: + return [{"text": f"{prefix}{i}", "_distance": float(i)} for i in range(n)] + + def test_empty_hits_returns_empty(self): + from nemo_retriever.rerank import rerank_hits + + model = MagicMock() + assert rerank_hits("q", [], model=model) == [] + + def test_results_sorted_by_score_descending(self): + from nemo_retriever.rerank import rerank_hits + + hits = self._make_hits(3) + model = MagicMock() + model.score.return_value = [0.1, 5.0, -1.0] + + out = rerank_hits("q", hits, model=model) + + scores = [h["_rerank_score"] for h in out] + assert scores == sorted(scores, reverse=True) + + def test_rerank_score_added_to_each_hit(self): + from nemo_retriever.rerank import rerank_hits + + hits = [{"text": "hello"}, {"text": "world"}] + model = MagicMock() + model.score.return_value = [2.0, 3.0] + + out = rerank_hits("q", hits, model=model) + assert all("_rerank_score" in h for h in out) + + def test_top_n_truncates_output(self): + from nemo_retriever.rerank import rerank_hits + + hits = self._make_hits(5) + model = MagicMock() + model.score.return_value = [5.0, 4.0, 3.0, 2.0, 1.0] + + out = rerank_hits("q", hits, model=model, top_n=3) + assert len(out) == 3 + + def test_model_score_called_with_query_and_texts(self): + from nemo_retriever.rerank import rerank_hits + + hits = [{"text": "first"}, {"text": "second"}] + model = MagicMock() + model.score.return_value = [1.0, 2.0] + + rerank_hits("my query", hits, model=model) + + model.score.assert_called_once_with("my query", ["first", "second"], max_length=512, batch_size=32) + + def test_raises_without_model_or_endpoint(self): + from nemo_retriever.rerank import rerank_hits + + with pytest.raises(ValueError, match="model.*invoke_url"): + rerank_hits("q", [{"text": "doc"}]) + + def test_custom_text_key(self): + from nemo_retriever.rerank import rerank_hits + + hits = [{"content": "alpha"}, {"content": "beta"}] + model = MagicMock() + model.score.return_value = [1.0, 2.0] + + out = rerank_hits("q", hits, model=model, text_key="content") + assert len(out) == 2 + + def test_original_hit_keys_preserved(self): + from nemo_retriever.rerank import rerank_hits + + hits = [{"text": "t", "metadata": "m", "_distance": 0.5}] + model = MagicMock() + model.score.return_value = [7.0] + + out = rerank_hits("q", hits, model=model) + assert out[0]["metadata"] == "m" + assert out[0]["_distance"] == 0.5 + + +# --------------------------------------------------------------------------- +# _rerank_via_endpoint() +# --------------------------------------------------------------------------- + + +class TestRerankViaEndpoint: + def test_posts_to_rerank_url(self): + from nemo_retriever.rerank.rerank import _rerank_via_endpoint + + mock_resp = MagicMock() + mock_resp.json.return_value = { + "results": [ + {"index": 0, "relevance_score": 0.9}, + {"index": 1, "relevance_score": 0.3}, + ] + } + mock_resp.raise_for_status = MagicMock() + + with patch("requests.post", return_value=mock_resp) as mock_post: + scores = _rerank_via_endpoint( + "What is ML?", + ["Machine learning is…", "Paris is…"], + endpoint="http://localhost:8000", + model_name="nvidia/llama-nemotron-rerank-1b-v2", + ) + + mock_post.assert_called_once() + call_kwargs = mock_post.call_args + assert call_kwargs[0][0] == "http://localhost:8000/rerank" + assert call_kwargs[1]["json"]["query"] == "What is ML?" + assert len(call_kwargs[1]["json"]["documents"]) == 2 + + assert scores == [0.9, 0.3] + + def test_scores_aligned_with_input_order(self): + from nemo_retriever.rerank.rerank import _rerank_via_endpoint + + # Server returns results in reversed order + mock_resp = MagicMock() + mock_resp.json.return_value = { + "results": [ + {"index": 2, "relevance_score": 0.1}, + {"index": 0, "relevance_score": 0.8}, + {"index": 1, "relevance_score": 0.5}, + ] + } + mock_resp.raise_for_status = MagicMock() + + with patch("requests.post", return_value=mock_resp): + scores = _rerank_via_endpoint( + "q", + ["d0", "d1", "d2"], + endpoint="http://localhost:8000", + ) + + assert scores[0] == 0.8 # index 0 + assert scores[1] == 0.5 # index 1 + assert scores[2] == 0.1 # index 2 + + def test_authorization_header_sent_when_api_key_provided(self): + from nemo_retriever.rerank.rerank import _rerank_via_endpoint + + mock_resp = MagicMock() + mock_resp.json.return_value = {"results": [{"index": 0, "relevance_score": 1.0}]} + mock_resp.raise_for_status = MagicMock() + + with patch("requests.post", return_value=mock_resp) as mock_post: + _rerank_via_endpoint( + "q", + ["d"], + endpoint="http://localhost:8000", + api_key="my-secret-key", + ) + + headers = mock_post.call_args[1]["headers"] + assert headers["Authorization"] == "Bearer my-secret-key" + + def test_trailing_slash_on_endpoint_normalized(self): + from nemo_retriever.rerank.rerank import _rerank_via_endpoint + + mock_resp = MagicMock() + mock_resp.json.return_value = {"results": [{"index": 0, "relevance_score": 0.5}]} + mock_resp.raise_for_status = MagicMock() + + with patch("requests.post", return_value=mock_resp) as mock_post: + _rerank_via_endpoint("q", ["d"], endpoint="http://localhost:8000/") + + url = mock_post.call_args[0][0] + assert url == "http://localhost:8000/rerank" + + def test_top_n_sent_in_payload_when_specified(self): + from nemo_retriever.rerank.rerank import _rerank_via_endpoint + + mock_resp = MagicMock() + mock_resp.json.return_value = {"results": [{"index": 0, "relevance_score": 0.5}]} + mock_resp.raise_for_status = MagicMock() + + with patch("requests.post", return_value=mock_resp) as mock_post: + _rerank_via_endpoint("q", ["d"], endpoint="http://localhost:8000", top_n=5) + + payload = mock_post.call_args[1]["json"] + assert payload["top_n"] == 5 + + def test_top_n_not_in_payload_when_not_specified(self): + from nemo_retriever.rerank.rerank import _rerank_via_endpoint + + mock_resp = MagicMock() + mock_resp.json.return_value = {"results": [{"index": 0, "relevance_score": 0.5}]} + mock_resp.raise_for_status = MagicMock() + + with patch("requests.post", return_value=mock_resp) as mock_post: + _rerank_via_endpoint("q", ["d"], endpoint="http://localhost:8000") + + payload = mock_post.call_args[1]["json"] + assert "top_n" not in payload + + +# --------------------------------------------------------------------------- +# NemotronRerankActor +# --------------------------------------------------------------------------- + + +class TestNemotronRerankActor: + """Test the Ray Data-compatible actor.""" + + def test_actor_with_invoke_url_skips_local_model(self): + from nemo_retriever.rerank.rerank import NemotronRerankActor + + actor = NemotronRerankActor(invoke_url="http://localhost:8000") + assert actor._model is None + + def test_actor_with_rerank_invoke_url_alias(self): + from nemo_retriever.rerank.rerank import NemotronRerankActor + + actor = NemotronRerankActor(rerank_invoke_url="http://localhost:8000") + assert actor._model is None + assert actor._kwargs.get("invoke_url") == "http://localhost:8000" + + def test_actor_call_scores_dataframe(self): + import pandas as pd + from nemo_retriever.rerank.rerank import NemotronRerankActor + + actor = NemotronRerankActor(invoke_url="http://localhost:8000") + + df = pd.DataFrame({"query": ["q1", "q2"], "text": ["doc A", "doc B"]}) + + mock_resp = MagicMock() + mock_resp.raise_for_status = MagicMock() + mock_resp.json.side_effect = [ + {"results": [{"index": 0, "relevance_score": 0.9}]}, + {"results": [{"index": 0, "relevance_score": 0.4}]}, + ] + + with patch("requests.post", return_value=mock_resp): + out = actor(df) + + assert "rerank_score" in out.columns + assert len(out) == 2 + + def test_actor_call_sorts_descending_by_default(self): + import pandas as pd + from nemo_retriever.rerank.rerank import NemotronRerankActor + + actor = NemotronRerankActor(invoke_url="http://localhost:8000") + df = pd.DataFrame({"query": ["q", "q"], "text": ["low relevance", "high relevance"]}) + + mock_resp = MagicMock() + mock_resp.raise_for_status = MagicMock() + mock_resp.json.side_effect = [ + {"results": [{"index": 0, "relevance_score": 0.1}]}, + {"results": [{"index": 0, "relevance_score": 0.9}]}, + ] + + with patch("requests.post", return_value=mock_resp): + out = actor(df) + + scores = out["rerank_score"].tolist() + assert scores == sorted(scores, reverse=True) + + def test_actor_call_returns_error_payload_on_exception(self): + import pandas as pd + from nemo_retriever.rerank.rerank import NemotronRerankActor + + actor = NemotronRerankActor(invoke_url="http://localhost:8000") + df = pd.DataFrame({"query": ["q"], "text": ["doc"]}) + + with patch("requests.post", side_effect=RuntimeError("connection failed")): + out = actor(df) + + # Should not raise; should return a DataFrame with error payload + assert isinstance(out, pd.DataFrame) + assert "rerank_score" in out.columns + payload = out["rerank_score"].iloc[0] + assert payload["status"] == "error" + + def test_actor_custom_score_column_name(self): + import pandas as pd + from nemo_retriever.rerank.rerank import NemotronRerankActor + + actor = NemotronRerankActor(invoke_url="http://localhost:8000", score_column="my_score") + df = pd.DataFrame({"query": ["q"], "text": ["doc"]}) + + mock_resp = MagicMock() + mock_resp.raise_for_status = MagicMock() + mock_resp.json.return_value = {"results": [{"index": 0, "relevance_score": 0.7}]} + + with patch("requests.post", return_value=mock_resp): + out = actor(df) + + assert "my_score" in out.columns diff --git a/nemo_retriever/tests/test_retriever_queries.py b/nemo_retriever/tests/test_retriever_queries.py new file mode 100644 index 000000000..fa3b7e8c8 --- /dev/null +++ b/nemo_retriever/tests/test_retriever_queries.py @@ -0,0 +1,372 @@ +# SPDX-FileCopyrightText: Copyright (c) 2024-25, NVIDIA CORPORATION & AFFILIATES. +# All rights reserved. +# SPDX-License-Identifier: Apache-2.0 + +""" +Unit tests for Retriever.queries() and Retriever.query(). + +All external I/O (LanceDB, embedders, requests) is mocked so the tests run +without any GPU, network, or database dependency. +""" + +from __future__ import annotations + +from unittest.mock import MagicMock, patch + +import pytest + + +# --------------------------------------------------------------------------- +# Helpers +# --------------------------------------------------------------------------- + +_EMBED_DIM = 4 +_DUMMY_VECTOR = [0.1, 0.2, 0.3, 0.4] + + +def _make_hits(n: int, base_score: float = 0.5) -> list[dict]: + return [ + { + "text": f"passage {i}", + "metadata": "{}", + "source": "{}", + "page_number": i, + "_distance": base_score + i * 0.01, + } + for i in range(n) + ] + + +def _make_retriever(**overrides): + """Return a Retriever with reranker disabled by default and sane test values.""" + from nemo_retriever.retriever import Retriever + + defaults = dict( + reranker=None, + top_k=5, + nprobes=16, + ) + defaults.update(overrides) + return Retriever(**defaults) + + +# --------------------------------------------------------------------------- +# Retriever._resolve_embedding_endpoint +# --------------------------------------------------------------------------- + + +class TestResolveEmbeddingEndpoint: + def test_returns_none_when_no_endpoints_set(self): + r = _make_retriever() + assert r._resolve_embedding_endpoint() is None + + def test_http_endpoint_takes_priority(self): + r = _make_retriever( + embedding_http_endpoint="http://embed.example.com", + embedding_endpoint="http://other.example.com", + ) + assert r._resolve_embedding_endpoint() == "http://embed.example.com" + + def test_single_endpoint_returned_when_http(self): + r = _make_retriever(embedding_endpoint="http://embed.example.com") + assert r._resolve_embedding_endpoint() == "http://embed.example.com" + + def test_grpc_endpoint_raises(self): + r = _make_retriever(embedding_endpoint="grpc://embed.example.com") + with pytest.raises(ValueError, match="gRPC"): + r._resolve_embedding_endpoint() + + def test_whitespace_only_endpoint_treated_as_none(self): + r = _make_retriever(embedding_http_endpoint=" ") + assert r._resolve_embedding_endpoint() is None + + +# --------------------------------------------------------------------------- +# Retriever.queries() — basic (no reranking) +# --------------------------------------------------------------------------- + + +class TestQueriesNoReranking: + def _run_queries(self, retriever, query_texts, fake_vectors, fake_hits): + """Patch embed + search helpers and call queries().""" + with ( + patch.object(retriever, "_embed_queries_local_hf", return_value=fake_vectors), + patch.object(retriever, "_search_lancedb", return_value=fake_hits), + ): + return retriever.queries(query_texts) + + def test_empty_queries_returns_empty(self): + r = _make_retriever() + assert r.queries([]) == [] + + def test_single_query_returns_one_result_list(self): + r = _make_retriever() + hits = [_make_hits(5)] + result = self._run_queries(r, ["What is ML?"], [_DUMMY_VECTOR], hits) + assert len(result) == 1 + assert result[0] is hits[0] + + def test_multiple_queries_return_matching_result_count(self): + r = _make_retriever() + n_queries = 3 + fake_hits = [_make_hits(5)] * n_queries + result = self._run_queries( + r, + [f"query {i}" for i in range(n_queries)], + [_DUMMY_VECTOR] * n_queries, + fake_hits, + ) + assert len(result) == n_queries + + def test_embed_local_hf_called_with_query_texts(self): + r = _make_retriever() + with ( + patch.object(r, "_embed_queries_local_hf", return_value=[_DUMMY_VECTOR]) as mock_embed, + patch.object(r, "_search_lancedb", return_value=[_make_hits(5)]), + ): + r.queries(["hello world"]) + + mock_embed.assert_called_once_with(["hello world"], model_name=r.embedder) + + def test_embed_nim_called_when_endpoint_set(self): + r = _make_retriever(embedding_http_endpoint="http://nim.example.com") + with ( + patch.object(r, "_embed_queries_nim", return_value=[_DUMMY_VECTOR]) as mock_nim, + patch.object(r, "_search_lancedb", return_value=[_make_hits(5)]), + ): + r.queries(["hello"]) + + mock_nim.assert_called_once() + call_kwargs = mock_nim.call_args[1] + assert call_kwargs["endpoint"] == "http://nim.example.com" + + def test_search_lancedb_receives_vectors_and_texts(self): + r = _make_retriever() + vecs = [[0.1, 0.2, 0.3, 0.4]] + with ( + patch.object(r, "_embed_queries_local_hf", return_value=vecs), + patch.object(r, "_search_lancedb", return_value=[_make_hits(5)]) as mock_search, + ): + r.queries(["my query"]) + + kwargs = mock_search.call_args[1] + assert kwargs["query_vectors"] == vecs + assert kwargs["query_texts"] == ["my query"] + + def test_embedder_override_forwarded(self): + r = _make_retriever() + with ( + patch.object(r, "_embed_queries_local_hf", return_value=[_DUMMY_VECTOR]) as mock_embed, + patch.object(r, "_search_lancedb", return_value=[_make_hits(5)]), + ): + r.queries(["q"], embedder="custom/embedder") + + assert mock_embed.call_args[1]["model_name"] == "custom/embedder" + + def test_lancedb_uri_and_table_overrides_forwarded(self): + r = _make_retriever() + with ( + patch.object(r, "_embed_queries_local_hf", return_value=[_DUMMY_VECTOR]), + patch.object(r, "_search_lancedb", return_value=[_make_hits(5)]) as mock_search, + ): + r.queries(["q"], lancedb_uri="/tmp/db", lancedb_table="my-table") + + kwargs = mock_search.call_args[1] + assert kwargs["lancedb_uri"] == "/tmp/db" + assert kwargs["lancedb_table"] == "my-table" + + +# --------------------------------------------------------------------------- +# Retriever.query() — single-query convenience wrapper +# --------------------------------------------------------------------------- + + +class TestQuerySingleConvenience: + def test_query_delegates_to_queries_and_returns_first_element(self): + r = _make_retriever() + expected = _make_hits(5) + with patch.object(r, "queries", return_value=[expected]) as mock_queries: + result = r.query("find something") + + mock_queries.assert_called_once_with( + ["find something"], + embedder=None, + lancedb_uri=None, + lancedb_table=None, + ) + assert result is expected + + def test_query_passes_through_overrides(self): + r = _make_retriever() + with patch.object(r, "queries", return_value=[[]]) as mock_queries: + r.query("q", embedder="e", lancedb_uri="u", lancedb_table="t") + + mock_queries.assert_called_once_with(["q"], embedder="e", lancedb_uri="u", lancedb_table="t") + + +# --------------------------------------------------------------------------- +# Retriever.queries() — with reranking via remote endpoint +# --------------------------------------------------------------------------- + + +class TestQueriesWithEndpointReranking: + def _retriever_with_endpoint(self, top_k: int = 3, refine: int = 2) -> object: + return _make_retriever( + reranker="nvidia/llama-nemotron-rerank-1b-v2", + reranker_endpoint="http://rerank.example.com", + top_k=top_k, + reranker_refine_factor=refine, + ) + + def _fake_search_results(self, retriever) -> list[list[dict]]: + """Return the number of hits that satisfies the assertion check.""" + n = retriever.top_k * retriever.reranker_refine_factor + return [_make_hits(n)] + + def test_rerank_results_called_when_reranker_set(self): + r = self._retriever_with_endpoint() + fake_results = self._fake_search_results(r) + + with ( + patch.object(r, "_embed_queries_local_hf", return_value=[_DUMMY_VECTOR]), + patch.object(r, "_search_lancedb", return_value=fake_results), + patch.object(r, "_rerank_results", return_value=[_make_hits(3)]) as mock_rerank, + ): + r.queries(["q"]) + + mock_rerank.assert_called_once_with(["q"], fake_results) + + def test_rerank_not_called_when_reranker_is_none(self): + r = _make_retriever(reranker=None) + fake_results = [_make_hits(5)] + + with ( + patch.object(r, "_embed_queries_local_hf", return_value=[_DUMMY_VECTOR]), + patch.object(r, "_search_lancedb", return_value=fake_results), + patch.object(r, "_rerank_results") as mock_rerank, + ): + r.queries(["q"]) + + mock_rerank.assert_not_called() + + def test_reranked_results_are_returned(self): + r = self._retriever_with_endpoint() + fake_results = self._fake_search_results(r) + reranked = [_make_hits(3)] + + with ( + patch.object(r, "_embed_queries_local_hf", return_value=[_DUMMY_VECTOR]), + patch.object(r, "_search_lancedb", return_value=fake_results), + patch.object(r, "_rerank_results", return_value=reranked), + ): + out = r.queries(["q"]) + + assert out is reranked + + def test_rerank_results_uses_endpoint_not_local_model(self): + r = self._retriever_with_endpoint() + fake_hits = self._fake_search_results(r)[0] + + mock_resp = MagicMock() + mock_resp.raise_for_status = MagicMock() + # Return relevance scores in reverse original order + mock_resp.json.return_value = { + "results": [{"index": i, "relevance_score": float(len(fake_hits) - i)} for i in range(len(fake_hits))] + } + + with patch("requests.post", return_value=mock_resp) as mock_post: + out = r._rerank_results(["q"], [fake_hits]) + + mock_post.assert_called() + # Results should be sorted descending + scores = [h["_rerank_score"] for h in out[0]] + assert scores == sorted(scores, reverse=True) + + +# --------------------------------------------------------------------------- +# Retriever.queries() — with local reranking model +# --------------------------------------------------------------------------- + + +class TestQueriesWithLocalReranking: + + def test_rerank_results_with_local_model(self): + r = _make_retriever(reranker="nvidia/llama-nemotron-rerank-1b-v2") + hits = _make_hits(4) + fake_model = MagicMock() + fake_model.score.return_value = [0.1, 0.9, 0.5, 0.3] + + with patch.object(r, "_get_reranker_model", return_value=fake_model): + out = r._rerank_results(["q"], [hits]) + + scores = [h["_rerank_score"] for h in out[0]] + assert scores == sorted(scores, reverse=True) + assert max(scores) == 0.9 + + def test_rerank_results_respects_top_k(self): + r = _make_retriever(reranker="nvidia/llama-nemotron-rerank-1b-v2", top_k=2) + hits = _make_hits(4) + fake_model = MagicMock() + fake_model.score.return_value = [0.1, 0.9, 0.5, 0.3] + + with patch.object(r, "_get_reranker_model", return_value=fake_model): + out = r._rerank_results(["q"], [hits]) + + assert len(out[0]) == 2 + + def test_rerank_results_multiple_queries(self): + r = _make_retriever(reranker="nvidia/llama-nemotron-rerank-1b-v2", top_k=2) + hits_a = _make_hits(2) + hits_b = _make_hits(2) + fake_model = MagicMock() + fake_model.score.side_effect = [[0.2, 0.8], [0.6, 0.4]] + + with patch.object(r, "_get_reranker_model", return_value=fake_model): + out = r._rerank_results(["q1", "q2"], [hits_a, hits_b]) + + assert len(out) == 2 + # Each per-query list should be sorted descending + for per_query in out: + scores = [h["_rerank_score"] for h in per_query] + assert scores == sorted(scores, reverse=True) + + +# --------------------------------------------------------------------------- +# Retriever defaults: reranker field behaviour +# --------------------------------------------------------------------------- + + +class TestRetrieverDefaults: + def test_default_reranker_is_nemotron_model(self): + from nemo_retriever.retriever import Retriever + + r = Retriever() + assert r.reranker == "nvidia/llama-nemotron-rerank-1b-v2" + + def test_reranker_can_be_disabled(self): + r = _make_retriever(reranker=None) + assert r.reranker is None + + def test_reranker_refine_factor_default(self): + from nemo_retriever.retriever import Retriever + + r = Retriever() + assert r.reranker_refine_factor == 4 + + def test_reranker_max_length_default(self): + from nemo_retriever.retriever import Retriever + + r = Retriever() + assert r.reranker_max_length == 512 + + def test_reranker_model_not_initialized_at_construction(self): + from nemo_retriever.retriever import Retriever + + r = Retriever() + # Should be None until first use + assert r._reranker_model is None + + def test_retriever_alias_is_retriever_class(self): + from nemo_retriever.retriever import retriever, Retriever + + assert retriever is Retriever From 5cbf38e280dbcf06bf583bbab819a713044a533e Mon Sep 17 00:00:00 2001 From: Julio Perez <37191411+jperez999@users.noreply.github.com> Date: Wed, 11 Mar 2026 21:14:10 -0400 Subject: [PATCH 10/94] fix reranker in inproc (#1588) --- nemo_retriever/src/nemo_retriever/retriever.py | 8 +++++--- nemo_retriever/tests/test_retriever_queries.py | 2 +- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/nemo_retriever/src/nemo_retriever/retriever.py b/nemo_retriever/src/nemo_retriever/retriever.py index aa9203783..aab11b519 100644 --- a/nemo_retriever/src/nemo_retriever/retriever.py +++ b/nemo_retriever/src/nemo_retriever/retriever.py @@ -53,7 +53,9 @@ class Retriever: local_hf_cache_dir: Optional[Path] = None local_hf_batch_size: int = 64 # Reranking ----------------------------------------------------------- - reranker: Optional[str] = "nvidia/llama-nemotron-rerank-1b-v2" + reranker: Optional[bool] = False + """True to enable reranking with the default model, will use the reranker_model_name as hf model""" + reranker_model_name: Optional[str] = "nvidia/llama-nemotron-rerank-1b-v2" """HuggingFace model ID for local reranking (e.g. 'nvidia/llama-nemotron-rerank-1b-v2'). Set to None to skip reranking (default).""" reranker_endpoint: Optional[str] = None @@ -183,12 +185,12 @@ def _search_lancedb( def _get_reranker_model(self) -> Any: """Lazily load and cache the local NemotronRerankV2 model.""" - if self._reranker_model is None: + if self._reranker_model is None and self.reranker: from nemo_retriever.model.local import NemotronRerankV2 cache_dir = str(self.local_hf_cache_dir) if self.local_hf_cache_dir else None self._reranker_model = NemotronRerankV2( - model_name=str(self.reranker), + model_name=self.reranker_model_name if self.reranker else None, device=self.local_hf_device, hf_cache_dir=cache_dir, ) diff --git a/nemo_retriever/tests/test_retriever_queries.py b/nemo_retriever/tests/test_retriever_queries.py index fa3b7e8c8..b398c48ac 100644 --- a/nemo_retriever/tests/test_retriever_queries.py +++ b/nemo_retriever/tests/test_retriever_queries.py @@ -341,7 +341,7 @@ def test_default_reranker_is_nemotron_model(self): from nemo_retriever.retriever import Retriever r = Retriever() - assert r.reranker == "nvidia/llama-nemotron-rerank-1b-v2" + assert r.reranker_model_name == "nvidia/llama-nemotron-rerank-1b-v2" def test_reranker_can_be_disabled(self): r = _make_retriever(reranker=None) From 6459e60e00f1e613ca9fcb44bbb54f3aaaa10bd7 Mon Sep 17 00:00:00 2001 From: Jeremy Dyer Date: Wed, 11 Mar 2026 21:34:31 -0400 Subject: [PATCH 11/94] Add source_id to output columns --- nemo_retriever/src/nemo_retriever/vector_store/lancedb_store.py | 1 + 1 file changed, 1 insertion(+) diff --git a/nemo_retriever/src/nemo_retriever/vector_store/lancedb_store.py b/nemo_retriever/src/nemo_retriever/vector_store/lancedb_store.py index c3acb2d8f..2b46ecbb5 100644 --- a/nemo_retriever/src/nemo_retriever/vector_store/lancedb_store.py +++ b/nemo_retriever/src/nemo_retriever/vector_store/lancedb_store.py @@ -171,6 +171,7 @@ def _build_lancedb_rows_from_df(rows: List[Dict[str, Any]]) -> List[Dict[str, An "pdf_basename": pdf_basename, "page_number": int(page_number), "source": source_id, + "source_id": source_id, "path": path, "text": row.get("text", ""), "metadata": str(meta), From ed95c440b4165e104a6b63b4566d591e1e35f581 Mon Sep 17 00:00:00 2001 From: Julio Perez <37191411+jperez999@users.noreply.github.com> Date: Wed, 11 Mar 2026 21:35:21 -0400 Subject: [PATCH 12/94] fix in process extract to handle txt (#1589) Co-authored-by: Jeremy Dyer --- .../src/nemo_retriever/html/ray_data.py | 6 ++++-- .../nemo_retriever/ingest_modes/inprocess.py | 17 ++++++++++++++++- .../src/nemo_retriever/txt/ray_data.py | 6 ++++-- 3 files changed, 24 insertions(+), 5 deletions(-) diff --git a/nemo_retriever/src/nemo_retriever/html/ray_data.py b/nemo_retriever/src/nemo_retriever/html/ray_data.py index f2dafbd80..1c87a18b7 100644 --- a/nemo_retriever/src/nemo_retriever/html/ray_data.py +++ b/nemo_retriever/src/nemo_retriever/html/ray_data.py @@ -35,12 +35,14 @@ def __call__(self, batch_df: pd.DataFrame) -> pd.DataFrame: out_dfs: List[pd.DataFrame] = [] for _, row in batch_df.iterrows(): raw = row.get("bytes") + text = row.get("text") path = row.get("path") - if raw is None or path is None: + if (raw is None and text is None) or path is None: continue path_str = str(path) if path is not None else "" try: - chunk_df = html_bytes_to_chunks_df(raw, path_str, params=params) + payload = raw or text.encode("utf-8") + chunk_df = html_bytes_to_chunks_df(payload, path_str, params=params) if not chunk_df.empty: out_dfs.append(chunk_df) except Exception: diff --git a/nemo_retriever/src/nemo_retriever/ingest_modes/inprocess.py b/nemo_retriever/src/nemo_retriever/ingest_modes/inprocess.py index 34eaf7ed5..90e230cba 100644 --- a/nemo_retriever/src/nemo_retriever/ingest_modes/inprocess.py +++ b/nemo_retriever/src/nemo_retriever/ingest_modes/inprocess.py @@ -1001,7 +1001,12 @@ def extract(self, params: ExtractParams | None = None, **kwargs: Any) -> "InProc # NOTE: `kwargs` passed to `.extract()` are intended primarily for PDF extraction # (e.g. `extract_text`, `dpi`, etc). Downstream model stages do NOT necessarily # accept the same keyword arguments. Keep per-stage kwargs isolated. - + if self._input_documents and all(f.lower().endswith(".txt") for f in self._input_documents): + txt_params = TextChunkParams() + return self.extract_txt(params=txt_params) + if self._input_documents and all(f.lower().endswith(".html") for f in self._input_documents): + html_params = HtmlChunkParams() + return self.extract_html(params=html_params) resolved = _coerce_params(params, ExtractParams, kwargs) if ( any( @@ -1289,9 +1294,13 @@ def extract_txt(self, params: TextChunkParams | None = None, **kwargs: Any) -> " Use with .files("*.txt").extract_txt(...).embed().vdb_upload().ingest(). Do not call .extract() when using .extract_txt(). """ + from nemo_retriever.txt.ray_data import TxtSplitActor + self._pipeline_type = "txt" resolved = _coerce_params(params, TextChunkParams, kwargs) self._extract_txt_kwargs = resolved.model_dump(mode="python") + text_split = TxtSplitActor(params=TextChunkParams(**self._extract_txt_kwargs)) + self._tasks.append((text_split, {})) return self def extract_html(self, params: HtmlChunkParams | None = None, **kwargs: Any) -> "InProcessIngestor": @@ -1301,9 +1310,15 @@ def extract_html(self, params: HtmlChunkParams | None = None, **kwargs: Any) -> Use with .files("*.html").extract_html(...).embed().vdb_upload().ingest(). Do not call .extract() when using .extract_html(). """ + from nemo_retriever.html.ray_data import HtmlSplitActor + self._pipeline_type = "html" resolved = _coerce_params(params, HtmlChunkParams, kwargs) self._extract_html_kwargs = resolved.model_dump(mode="python") + html_split = HtmlSplitActor( + params=HtmlChunkParams(**self._extract_html_kwargs), + ) + self._tasks.append((html_split, {})) return self def extract_audio( diff --git a/nemo_retriever/src/nemo_retriever/txt/ray_data.py b/nemo_retriever/src/nemo_retriever/txt/ray_data.py index f01191814..b74f482cd 100644 --- a/nemo_retriever/src/nemo_retriever/txt/ray_data.py +++ b/nemo_retriever/src/nemo_retriever/txt/ray_data.py @@ -58,12 +58,14 @@ def __call__(self, batch_df: pd.DataFrame) -> pd.DataFrame: out_dfs: List[pd.DataFrame] = [] for _, row in batch_df.iterrows(): raw = row.get("bytes") + text = row.get("text") path = row.get("path") - if raw is None or path is None: + if (raw is None and text is None) or path is None: continue path_str = str(path) if path is not None else "" try: - chunk_df = txt_bytes_to_chunks_df(raw, path_str, params=params) + payload = raw or text.encode("utf-8") + chunk_df = txt_bytes_to_chunks_df(payload, path_str, params=params) if not chunk_df.empty: out_dfs.append(chunk_df) except Exception: From 9568b50baaf208c4d5d2a868827c27d6fe293ca0 Mon Sep 17 00:00:00 2001 From: Jeremy Dyer Date: Wed, 11 Mar 2026 22:01:30 -0400 Subject: [PATCH 13/94] Release prep: 26.03.0-RC2 (#1591) --- docker-compose.yaml | 2 +- docs/docs/extraction/helm.md | 2 +- docs/docs/extraction/quickstart-guide.md | 2 +- .../extraction/quickstart-library-mode.md | 2 +- helm/Chart.yaml | 2 +- helm/README.md | 88 +++++++++---------- helm/README.md.gotmpl | 6 +- helm/values.yaml | 2 +- nemo_retriever/pyproject.toml | 14 +-- src/nv_ingest/api/main.py | 2 +- tools/harness/nemotron-nightly.txt | 8 +- tools/harness/pyproject.toml | 14 +-- tools/harness/test_configs.yaml | 2 +- 13 files changed, 73 insertions(+), 73 deletions(-) diff --git a/docker-compose.yaml b/docker-compose.yaml index 94ddf7f70..6ad589efc 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -262,7 +262,7 @@ services: - audio nv-ingest-ms-runtime: - image: nvcr.io/nvidia/nemo-microservices/nv-ingest:26.03.0-RC1 + image: nvcr.io/nvidia/nemo-microservices/nv-ingest:26.03.0-RC2 shm_size: 40gb # Should be at minimum 30% of assigned memory per Ray documentation build: context: ${NV_INGEST_ROOT:-.} diff --git a/docs/docs/extraction/helm.md b/docs/docs/extraction/helm.md index 952a44065..f5891a772 100644 --- a/docs/docs/extraction/helm.md +++ b/docs/docs/extraction/helm.md @@ -3,4 +3,4 @@ To deploy [NeMo Retriever Library](overview.md) by using Helm, -refer to [NeMo Retriever Helm Charts](https://github.com/NVIDIA/NeMo-Retriever/blob/release/26.03.0-RC1/helm/README.md). +refer to [NeMo Retriever Helm Charts](https://github.com/NVIDIA/NeMo-Retriever/blob/release/26.03.0-RC2/helm/README.md). diff --git a/docs/docs/extraction/quickstart-guide.md b/docs/docs/extraction/quickstart-guide.md index 43ddce8ed..a996d4f21 100644 --- a/docs/docs/extraction/quickstart-guide.md +++ b/docs/docs/extraction/quickstart-guide.md @@ -84,7 +84,7 @@ h. Run the command `docker ps`. You should see output similar to the following. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES uv venv --python 3.12 nv-ingest-dev source nv-ingest-dev/bin/activate -uv pip install nv-ingest==26.03.0-RC1 nv-ingest-api==26.03.0-RC1 nv-ingest-client==26.03.0-RC1 +uv pip install nv-ingest==26.03.0-RC2 nv-ingest-api==26.03.0-RC2 nv-ingest-client==26.03.0-RC2 ``` !!! tip diff --git a/docs/docs/extraction/quickstart-library-mode.md b/docs/docs/extraction/quickstart-library-mode.md index f193305b9..b9e6ca371 100644 --- a/docs/docs/extraction/quickstart-library-mode.md +++ b/docs/docs/extraction/quickstart-library-mode.md @@ -34,7 +34,7 @@ Use the following procedure to prepare your environment. ``` uv venv --python 3.12 nvingest && \ source nvingest/bin/activate && \ - uv pip install nemo-retriever==26.03.0-RC1 milvus-lite==2.4.12 + uv pip install nemo-retriever==26.03.0-RC2 milvus-lite==2.4.12 ``` !!! tip diff --git a/helm/Chart.yaml b/helm/Chart.yaml index 1b0a3a7e8..9891b9555 100644 --- a/helm/Chart.yaml +++ b/helm/Chart.yaml @@ -2,7 +2,7 @@ apiVersion: v2 name: nv-ingest description: NV-Ingest Microservice type: application -version: 26.03.0-RC1 +version: 26.03.0-RC2 maintainers: - name: NVIDIA Corporation url: https://www.nvidia.com/ diff --git a/helm/README.md b/helm/README.md index c446f3e3c..3860dfce9 100644 --- a/helm/README.md +++ b/helm/README.md @@ -45,7 +45,7 @@ To install or upgrade the Helm chart, run the following code. helm upgrade \ --install \ nv-ingest \ - https://helm.ngc.nvidia.com/nvidia/nemo-microservices/charts/nv-ingest-26.03.0-RC1.tgz \ + https://helm.ngc.nvidia.com/nvidia/nemo-microservices/charts/nv-ingest-26.03.0-RC2.tgz \ -n ${NAMESPACE} \ --username '$oauthtoken' \ --password "${NGC_API_KEY}" \ @@ -54,7 +54,7 @@ helm upgrade \ --set ngcApiSecret.create=true \ --set ngcApiSecret.password="${NGC_API_KEY}" \ --set image.repository="nvcr.io/nvidia/nemo-microservices/nv-ingest" \ - --set image.tag="26.03.0-RC1" + --set image.tag="26.03.0-RC2" ``` Optionally you can create your own versions of the `Secrets` if you do not want to use the creation via the helm chart. @@ -105,7 +105,7 @@ For more information, refer to [NV-Ingest-Client](https://github.com/NVIDIA/nv-i # Just to be cautious we remove any existing installation pip uninstall nv-ingest-client -pip install nv-ingest-client==26.03.0-RC1 +pip install nv-ingest-client==26.03.0-RC2 ``` #### Rest Endpoint Ingress @@ -347,7 +347,7 @@ You can also use NV-Ingest's Python client API to interact with the service runn | fullnameOverride | string | `""` | | | image.pullPolicy | string | `"IfNotPresent"` | | | image.repository | string | `"nvcr.io/nvidia/nemo-microservices/nv-ingest"` | | -| image.tag | string | `"26.03.0-RC1"` | | +| image.tag | string | `"26.03.0-RC2"` | | | imagePullSecrets[0].name | string | `"ngc-api"` | | | imagePullSecrets[1].name | string | `"ngc-secret"` | | | ingress.annotations | object | `{}` | | @@ -465,46 +465,6 @@ You can also use NV-Ingest's Python client API to interact with the service runn | nimOperator.graphic_elements.storage.pvc.create | bool | `true` | | | nimOperator.graphic_elements.storage.pvc.size | string | `"25Gi"` | | | nimOperator.graphic_elements.storage.pvc.volumeAccessMode | string | `"ReadWriteOnce"` | | -| nimOperator.rerankqa.authSecret | string | `"ngc-api"` | | -| nimOperator.rerankqa.enabled | bool | `false` | | -| nimOperator.rerankqa.env[0].name | string | `"NIM_HTTP_API_PORT"` | | -| nimOperator.rerankqa.env[0].value | string | `"8000"` | | -| nimOperator.rerankqa.env[1].name | string | `"NIM_TRITON_LOG_VERBOSE"` | | -| nimOperator.rerankqa.env[1].value | string | `"1"` | | -| nimOperator.rerankqa.expose.service.grpcPort | int | `8001` | | -| nimOperator.rerankqa.expose.service.port | int | `8000` | | -| nimOperator.rerankqa.expose.service.type | string | `"ClusterIP"` | | -| nimOperator.rerankqa.image.pullPolicy | string | `"IfNotPresent"` | | -| nimOperator.rerankqa.image.pullSecrets[0] | string | `"ngc-secret"` | | -| nimOperator.rerankqa.image.repository | string | `"nvcr.io/nim/nvidia/llama-nemotron-rerank-1b-v2"` | | -| nimOperator.rerankqa.image.tag | string | `"1.10.0"` | | -| nimOperator.rerankqa.replicas | int | `1` | | -| nimOperator.rerankqa.resources.limits."nvidia.com/gpu" | int | `1` | | -| nimOperator.rerankqa.storage.pvc.create | bool | `true` | | -| nimOperator.rerankqa.storage.pvc.size | string | `"50Gi"` | | -| nimOperator.rerankqa.storage.pvc.volumeAccessMode | string | `"ReadWriteOnce"` | | -| nimOperator.ocr.authSecret | string | `"ngc-api"` | | -| nimOperator.ocr.enabled | bool | `true` | | -| nimOperator.ocr.env[0].name | string | `"OMP_NUM_THREADS"` | | -| nimOperator.ocr.env[0].value | string | `"8"` | | -| nimOperator.ocr.env[1].name | string | `"NIM_HTTP_API_PORT"` | | -| nimOperator.ocr.env[1].value | string | `"8000"` | | -| nimOperator.ocr.env[2].name | string | `"NIM_TRITON_LOG_VERBOSE"` | | -| nimOperator.ocr.env[2].value | string | `"1"` | | -| nimOperator.ocr.env[3].name | string | `"NIM_TRITON_MAX_BATCH_SIZE"` | | -| nimOperator.ocr.env[3].value | string | `"32"` | | -| nimOperator.ocr.expose.service.grpcPort | int | `8001` | | -| nimOperator.ocr.expose.service.port | int | `8000` | | -| nimOperator.ocr.expose.service.type | string | `"ClusterIP"` | | -| nimOperator.ocr.image.pullPolicy | string | `"IfNotPresent"` | | -| nimOperator.ocr.image.pullSecrets[0] | string | `"ngc-secret"` | | -| nimOperator.ocr.image.repository | string | `"nvcr.io/nim/nvidia/nemotron-ocr-v1"` | | -| nimOperator.ocr.image.tag | string | `"1.3.0"` | | -| nimOperator.ocr.replicas | int | `1` | | -| nimOperator.ocr.resources.limits."nvidia.com/gpu" | int | `1` | | -| nimOperator.ocr.storage.pvc.create | bool | `true` | | -| nimOperator.ocr.storage.pvc.size | string | `"25Gi"` | | -| nimOperator.ocr.storage.pvc.volumeAccessMode | string | `"ReadWriteOnce"` | | | nimOperator.nemotron_nano_12b_v2_vl.authSecret | string | `"ngc-api"` | | | nimOperator.nemotron_nano_12b_v2_vl.enabled | bool | `false` | | | nimOperator.nemotron_nano_12b_v2_vl.env[0].name | string | `"NIM_HTTP_API_PORT"` | | @@ -547,6 +507,28 @@ You can also use NV-Ingest's Python client API to interact with the service runn | nimOperator.nimCache.pvc.volumeAccessMode | string | `"ReadWriteOnce"` | | | nimOperator.nimService.namespaces | list | `[]` | | | nimOperator.nimService.resources | object | `{}` | | +| nimOperator.ocr.authSecret | string | `"ngc-api"` | | +| nimOperator.ocr.enabled | bool | `true` | | +| nimOperator.ocr.env[0].name | string | `"OMP_NUM_THREADS"` | | +| nimOperator.ocr.env[0].value | string | `"8"` | | +| nimOperator.ocr.env[1].name | string | `"NIM_HTTP_API_PORT"` | | +| nimOperator.ocr.env[1].value | string | `"8000"` | | +| nimOperator.ocr.env[2].name | string | `"NIM_TRITON_LOG_VERBOSE"` | | +| nimOperator.ocr.env[2].value | string | `"1"` | | +| nimOperator.ocr.env[3].name | string | `"NIM_TRITON_MAX_BATCH_SIZE"` | | +| nimOperator.ocr.env[3].value | string | `"32"` | | +| nimOperator.ocr.expose.service.grpcPort | int | `8001` | | +| nimOperator.ocr.expose.service.port | int | `8000` | | +| nimOperator.ocr.expose.service.type | string | `"ClusterIP"` | | +| nimOperator.ocr.image.pullPolicy | string | `"IfNotPresent"` | | +| nimOperator.ocr.image.pullSecrets[0] | string | `"ngc-secret"` | | +| nimOperator.ocr.image.repository | string | `"nvcr.io/nim/nvidia/nemotron-ocr-v1"` | | +| nimOperator.ocr.image.tag | string | `"1.3.0"` | | +| nimOperator.ocr.replicas | int | `1` | | +| nimOperator.ocr.resources.limits."nvidia.com/gpu" | int | `1` | | +| nimOperator.ocr.storage.pvc.create | bool | `true` | | +| nimOperator.ocr.storage.pvc.size | string | `"25Gi"` | | +| nimOperator.ocr.storage.pvc.volumeAccessMode | string | `"ReadWriteOnce"` | | | nimOperator.page_elements.authSecret | string | `"ngc-api"` | | | nimOperator.page_elements.enabled | bool | `true` | | | nimOperator.page_elements.env[0].name | string | `"NIM_HTTP_API_PORT"` | | @@ -589,6 +571,24 @@ You can also use NV-Ingest's Python client API to interact with the service runn | nimOperator.page_elements.storage.pvc.create | bool | `true` | | | nimOperator.page_elements.storage.pvc.size | string | `"25Gi"` | | | nimOperator.page_elements.storage.pvc.volumeAccessMode | string | `"ReadWriteOnce"` | | +| nimOperator.rerankqa.authSecret | string | `"ngc-api"` | | +| nimOperator.rerankqa.enabled | bool | `false` | | +| nimOperator.rerankqa.env[0].name | string | `"NIM_HTTP_API_PORT"` | | +| nimOperator.rerankqa.env[0].value | string | `"8000"` | | +| nimOperator.rerankqa.env[1].name | string | `"NIM_TRITON_LOG_VERBOSE"` | | +| nimOperator.rerankqa.env[1].value | string | `"1"` | | +| nimOperator.rerankqa.expose.service.grpcPort | int | `8001` | | +| nimOperator.rerankqa.expose.service.port | int | `8000` | | +| nimOperator.rerankqa.expose.service.type | string | `"ClusterIP"` | | +| nimOperator.rerankqa.image.pullPolicy | string | `"IfNotPresent"` | | +| nimOperator.rerankqa.image.pullSecrets[0] | string | `"ngc-secret"` | | +| nimOperator.rerankqa.image.repository | string | `"nvcr.io/nim/nvidia/llama-nemotron-rerank-1b-v2"` | | +| nimOperator.rerankqa.image.tag | string | `"1.10.0"` | | +| nimOperator.rerankqa.replicas | int | `1` | | +| nimOperator.rerankqa.resources.limits."nvidia.com/gpu" | int | `1` | | +| nimOperator.rerankqa.storage.pvc.create | bool | `true` | | +| nimOperator.rerankqa.storage.pvc.size | string | `"50Gi"` | | +| nimOperator.rerankqa.storage.pvc.volumeAccessMode | string | `"ReadWriteOnce"` | | | nimOperator.table_structure.authSecret | string | `"ngc-api"` | | | nimOperator.table_structure.enabled | bool | `true` | | | nimOperator.table_structure.env[0].name | string | `"NIM_HTTP_API_PORT"` | | diff --git a/helm/README.md.gotmpl b/helm/README.md.gotmpl index 743ed3610..b16dab04c 100644 --- a/helm/README.md.gotmpl +++ b/helm/README.md.gotmpl @@ -46,7 +46,7 @@ To install or upgrade the Helm chart, run the following code. helm upgrade \ --install \ nv-ingest \ - https://helm.ngc.nvidia.com/nvidia/nemo-microservices/charts/nv-ingest-26.03.0-RC1.tgz \ + https://helm.ngc.nvidia.com/nvidia/nemo-microservices/charts/nv-ingest-26.03.0-RC2.tgz \ -n ${NAMESPACE} \ --username '$oauthtoken' \ --password "${NGC_API_KEY}" \ @@ -55,7 +55,7 @@ helm upgrade \ --set ngcApiSecret.create=true \ --set ngcApiSecret.password="${NGC_API_KEY}" \ --set image.repository="nvcr.io/nvidia/nemo-microservices/nv-ingest" \ - --set image.tag="26.03.0-RC1" + --set image.tag="26.03.0-RC2" ``` Optionally you can create your own versions of the `Secrets` if you do not want to use the creation via the helm chart. @@ -107,7 +107,7 @@ For more information, refer to [NV-Ingest-Client](https://github.com/NVIDIA/nv-i # Just to be cautious we remove any existing installation pip uninstall nv-ingest-client -pip install nv-ingest-client==26.03.0-RC1 +pip install nv-ingest-client==26.03.0-RC2 ``` #### Rest Endpoint Ingress diff --git a/helm/values.yaml b/helm/values.yaml index 2bbbea67c..243c1e740 100644 --- a/helm/values.yaml +++ b/helm/values.yaml @@ -28,7 +28,7 @@ nameOverride: "" image: pullPolicy: IfNotPresent repository: "nvcr.io/nvidia/nemo-microservices/nv-ingest" - tag: "26.03.0-RC1" + tag: "26.03.0-RC2" ## @section Pod Configuration ## @param podAnnotations [object] Sets additional annotations on the main deployment pods diff --git a/nemo_retriever/pyproject.toml b/nemo_retriever/pyproject.toml index b9f84b79d..01de8f640 100644 --- a/nemo_retriever/pyproject.toml +++ b/nemo_retriever/pyproject.toml @@ -30,9 +30,9 @@ dependencies = [ "typer>=0.12.0", "pyyaml>=6.0", "lancedb", - "nv-ingest==26.03.0-RC1", - "nv-ingest-api==26.03.0-RC1", - "nv-ingest-client==26.03.0-RC1", + "nv-ingest==26.03.0rc2", + "nv-ingest-api==26.03.0rc2", + "nv-ingest-client==26.03.0rc2", "fastapi>=0.114.0", "uvicorn[standard]>=0.30.0", "httpx>=0.27.0", @@ -57,10 +57,10 @@ dependencies = [ "einops", "easydict", "addict", - "nemotron-page-elements-v3>=0.dev0", - "nemotron-graphic-elements-v1>=0.dev0", - "nemotron-table-structure-v1>=0.dev0", - "nemotron-ocr>=0.dev0", + "nemotron-page-elements-v3==3.0.1", + "nemotron-graphic-elements-v1==1.0.0", + "nemotron-table-structure-v1==1.0.0", + "nemotron-ocr==1.0.1", "markitdown", "timm==1.0.22", "tqdm", diff --git a/src/nv_ingest/api/main.py b/src/nv_ingest/api/main.py index 762865766..ae72b3fdf 100644 --- a/src/nv_ingest/api/main.py +++ b/src/nv_ingest/api/main.py @@ -23,7 +23,7 @@ app = FastAPI( title="NV-Ingest Microservice", description="Service for ingesting heterogenous datatypes", - version="26.03.0-RC1", + version="26.03.0-RC2", contact={ "name": "NVIDIA Corporation", "url": "https://nvidia.com", diff --git a/tools/harness/nemotron-nightly.txt b/tools/harness/nemotron-nightly.txt index bddd02119..0ce660471 100644 --- a/tools/harness/nemotron-nightly.txt +++ b/tools/harness/nemotron-nightly.txt @@ -3,7 +3,7 @@ # Usage: pip install -r tools/harness/nemotron-nightly.txt --force-reinstall --no-deps --index-url https://test.pypi.org/simple/ -nemotron-page-elements-v3>=0.dev0 -nemotron-graphic-elements-v1>=0.dev0 -nemotron-table-structure-v1>=0.dev0 -nemotron-ocr>=0.dev0 +nemotron-page-elements-v3==3.0.1 +nemotron-graphic-elements-v1==1.0.0 +nemotron-table-structure-v1==1.0.0 +nemotron-ocr==1.0.1 diff --git a/tools/harness/pyproject.toml b/tools/harness/pyproject.toml index 07cb085a5..c04a4638c 100644 --- a/tools/harness/pyproject.toml +++ b/tools/harness/pyproject.toml @@ -10,15 +10,15 @@ dependencies = [ "pyyaml>=6.0", "requests>=2.32.5", "pynvml>=11.5.0", - "nv-ingest==26.03.0-RC1", - "nv-ingest-api==26.03.0-RC1", - "nv-ingest-client==26.03.0-RC1", + "nv-ingest==26.03.0rc2", + "nv-ingest-api==26.03.0rc2", + "nv-ingest-client==26.03.0rc2", "milvus-lite==2.4.12", "pypdfium2>=4.30.0,<5.0.0", - "nemotron-page-elements-v3>=0.dev0", - "nemotron-graphic-elements-v1>=0.dev0", - "nemotron-table-structure-v1>=0.dev0", - "nemotron-ocr>=0.dev0", + "nemotron-page-elements-v3==3.0.1", + "nemotron-graphic-elements-v1==1.0.0", + "nemotron-table-structure-v1==1.0.0", + "nemotron-ocr==1.0.1", ] [project.scripts] diff --git a/tools/harness/test_configs.yaml b/tools/harness/test_configs.yaml index 1db4646ea..f2a214681 100644 --- a/tools/harness/test_configs.yaml +++ b/tools/harness/test_configs.yaml @@ -28,7 +28,7 @@ active: kubectl_bin: microk8s kubectl # kubectl binary command (e.g., "kubectl", "microk8s kubectl") kubectl_sudo: null # Prepend sudo to kubectl commands (null = same as helm_sudo) chart: nemo-microservices/nv-ingest # Remote chart reference (set to null to use local chart from ./helm) - chart_version: 26.03.0-RC1 # Chart version (required for remote charts) + chart_version: 26.03.0-RC2 # Chart version (required for remote charts) release: nv-ingest namespace: nv-ingest values_file: .helm-env # Optional: path to values file From 4a8301ebd8745ea15bab6b1581738b003d68a0c6 Mon Sep 17 00:00:00 2001 From: Jacob Ioffe Date: Wed, 11 Mar 2026 14:40:31 -0400 Subject: [PATCH 14/94] Increase default Redis TTL from 1-2h to 48h to prevent job expiry during long VLM captioning Large PDFs with VLM captioning enabled can take 2-22+ hours depending on hardware. The previous defaults (STATE_TTL=7200s, RESULT_DATA_TTL=3600s) caused job state to expire mid-processing, resulting in 404 "Job ID not found or state has expired" errors even though the pipeline completed successfully. Raises both defaults to 172800s (48 hours), providing sufficient headroom for all observed workloads. Users can still override via RESULT_DATA_TTL_SECONDS and STATE_TTL_SECONDS environment variables. Fixes: Customer bug 5914605 Co-Authored-By: Claude Opus 4.6 --- .../util/service/impl/ingest/redis_ingest_service.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/nv_ingest/framework/util/service/impl/ingest/redis_ingest_service.py b/src/nv_ingest/framework/util/service/impl/ingest/redis_ingest_service.py index c96977ec2..f40dbeca6 100644 --- a/src/nv_ingest/framework/util/service/impl/ingest/redis_ingest_service.py +++ b/src/nv_ingest/framework/util/service/impl/ingest/redis_ingest_service.py @@ -64,8 +64,8 @@ def get_instance() -> "RedisIngestService": redis_task_queue: str = os.getenv("REDIS_INGEST_TASK_QUEUE", "ingest_task_queue") fetch_mode: "FetchMode" = get_fetch_mode_from_env() - result_data_ttl: int = int(os.getenv("RESULT_DATA_TTL_SECONDS", "3600")) - state_ttl: int = int(os.getenv("STATE_TTL_SECONDS", "7200")) + result_data_ttl: int = int(os.getenv("RESULT_DATA_TTL_SECONDS", "172800")) + state_ttl: int = int(os.getenv("STATE_TTL_SECONDS", "172800")) cache_config: Dict[str, Any] = { "directory": os.getenv("FETCH_CACHE_DIR", "./.fetch_cache"), From 4f4e5125e604b1d6d5cc13131009117ef9a435c1 Mon Sep 17 00:00:00 2001 From: Charles Blackmon-Luca <20627856+charlesbluca@users.noreply.github.com> Date: Thu, 12 Mar 2026 13:38:16 -0400 Subject: [PATCH 15/94] Add Helm RTX PRO 4500 override, extend obj-det warmup batch size override (#1592) (#1597) --- docker-compose.a100-40gb.yaml | 3 + docker-compose.l40s.yaml | 3 + docker-compose.rtx-pro-4500.yaml | 3 + helm/overrides/values-a100-40gb.yaml | 6 ++ helm/overrides/values-l40s.yaml | 6 ++ helm/overrides/values-rtx-pro-4500.yaml | 91 +++++++++++++++++++++++++ 6 files changed, 112 insertions(+) create mode 100644 helm/overrides/values-rtx-pro-4500.yaml diff --git a/docker-compose.a100-40gb.yaml b/docker-compose.a100-40gb.yaml index a717d7a3a..cbe16ebff 100644 --- a/docker-compose.a100-40gb.yaml +++ b/docker-compose.a100-40gb.yaml @@ -6,14 +6,17 @@ services: page-elements: environment: - NIM_TRITON_MAX_BATCH_SIZE=1 + - NIM_TRITON_DATA_MAX_BATCH_SIZE=1 graphic-elements: environment: - NIM_TRITON_MAX_BATCH_SIZE=1 + - NIM_TRITON_DATA_MAX_BATCH_SIZE=1 table-structure: environment: - NIM_TRITON_MAX_BATCH_SIZE=1 + - NIM_TRITON_DATA_MAX_BATCH_SIZE=1 ocr: environment: diff --git a/docker-compose.l40s.yaml b/docker-compose.l40s.yaml index 8f8414e5a..55da32ca1 100644 --- a/docker-compose.l40s.yaml +++ b/docker-compose.l40s.yaml @@ -6,14 +6,17 @@ services: page-elements: environment: - NIM_TRITON_MAX_BATCH_SIZE=1 + - NIM_TRITON_DATA_MAX_BATCH_SIZE=1 graphic-elements: environment: - NIM_TRITON_MAX_BATCH_SIZE=1 + - NIM_TRITON_DATA_MAX_BATCH_SIZE=1 table-structure: environment: - NIM_TRITON_MAX_BATCH_SIZE=1 + - NIM_TRITON_DATA_MAX_BATCH_SIZE=1 ocr: environment: diff --git a/docker-compose.rtx-pro-4500.yaml b/docker-compose.rtx-pro-4500.yaml index a717d7a3a..cbe16ebff 100644 --- a/docker-compose.rtx-pro-4500.yaml +++ b/docker-compose.rtx-pro-4500.yaml @@ -6,14 +6,17 @@ services: page-elements: environment: - NIM_TRITON_MAX_BATCH_SIZE=1 + - NIM_TRITON_DATA_MAX_BATCH_SIZE=1 graphic-elements: environment: - NIM_TRITON_MAX_BATCH_SIZE=1 + - NIM_TRITON_DATA_MAX_BATCH_SIZE=1 table-structure: environment: - NIM_TRITON_MAX_BATCH_SIZE=1 + - NIM_TRITON_DATA_MAX_BATCH_SIZE=1 ocr: environment: diff --git a/helm/overrides/values-a100-40gb.yaml b/helm/overrides/values-a100-40gb.yaml index 7fe15de12..828bfdd33 100644 --- a/helm/overrides/values-a100-40gb.yaml +++ b/helm/overrides/values-a100-40gb.yaml @@ -13,6 +13,8 @@ nimOperator: value: "1" - name: NIM_TRITON_MAX_BATCH_SIZE value: "1" + - name: NIM_TRITON_DATA_MAX_BATCH_SIZE + value: "1" - name: NIM_TRITON_CPU_THREADS_PRE_PROCESSOR value: "2" - name: OMP_NUM_THREADS @@ -44,6 +46,8 @@ nimOperator: value: "3" - name: NIM_TRITON_MAX_BATCH_SIZE value: "1" + - name: NIM_TRITON_DATA_MAX_BATCH_SIZE + value: "1" - name: NIM_TRITON_CUDA_MEMORY_POOL_MB value: "2048" - name: OMP_NUM_THREADS @@ -59,6 +63,8 @@ nimOperator: value: "3" - name: NIM_TRITON_MAX_BATCH_SIZE value: "1" + - name: NIM_TRITON_DATA_MAX_BATCH_SIZE + value: "1" - name: NIM_TRITON_CUDA_MEMORY_POOL_MB value: "2048" - name: OMP_NUM_THREADS diff --git a/helm/overrides/values-l40s.yaml b/helm/overrides/values-l40s.yaml index 85e941485..d430e39f1 100644 --- a/helm/overrides/values-l40s.yaml +++ b/helm/overrides/values-l40s.yaml @@ -13,6 +13,8 @@ nimOperator: value: "1" - name: NIM_TRITON_MAX_BATCH_SIZE value: "1" + - name: NIM_TRITON_DATA_MAX_BATCH_SIZE + value: "1" - name: NIM_TRITON_CPU_THREADS_PRE_PROCESSOR value: "2" - name: OMP_NUM_THREADS @@ -44,6 +46,8 @@ nimOperator: value: "3" - name: NIM_TRITON_MAX_BATCH_SIZE value: "1" + - name: NIM_TRITON_DATA_MAX_BATCH_SIZE + value: "1" - name: NIM_TRITON_CUDA_MEMORY_POOL_MB value: "2048" - name: OMP_NUM_THREADS @@ -59,6 +63,8 @@ nimOperator: value: "3" - name: NIM_TRITON_MAX_BATCH_SIZE value: "1" + - name: NIM_TRITON_DATA_MAX_BATCH_SIZE + value: "1" - name: NIM_TRITON_CUDA_MEMORY_POOL_MB value: "2048" - name: OMP_NUM_THREADS diff --git a/helm/overrides/values-rtx-pro-4500.yaml b/helm/overrides/values-rtx-pro-4500.yaml new file mode 100644 index 000000000..55a38482e --- /dev/null +++ b/helm/overrides/values-rtx-pro-4500.yaml @@ -0,0 +1,91 @@ +# SPDX-FileCopyrightText: Copyright (c) 2025, NVIDIA CORPORATION & AFFILIATES. +# All rights reserved. +# SPDX-License-Identifier: Apache-2.0 +# GPU-specific overrides for RTX Pro 4500 (loaded by harness when --deployment-type helm --sku rtx-pro-4500). +# Sets NIM_TRITON_MAX_BATCH_SIZE=1 per NIM to match docker-compose.rtx-pro-4500.yaml. + +nimOperator: + page_elements: + env: + - name: NIM_HTTP_API_PORT + value: "8000" + - name: NIM_TRITON_LOG_VERBOSE + value: "1" + - name: NIM_TRITON_MAX_BATCH_SIZE + value: "1" + - name: NIM_TRITON_DATA_MAX_BATCH_SIZE + value: "1" + - name: NIM_TRITON_CPU_THREADS_PRE_PROCESSOR + value: "2" + - name: OMP_NUM_THREADS + value: "2" + - name: NIM_TRITON_CPU_THREADS_POST_PROCESSOR + value: "1" + - name: NIM_ENABLE_OTEL + value: "true" + - name: NIM_OTEL_SERVICE_NAME + value: "page-elements" + - name: NIM_OTEL_TRACES_EXPORTER + value: "otlp" + - name: NIM_OTEL_METRICS_EXPORTER + value: "console" + - name: NIM_OTEL_EXPORTER_OTLP_ENDPOINT + value: "http://otel-collector:4318" + - name: TRITON_OTEL_URL + value: "http://otel-collector:4318/v1/traces" + - name: TRITON_OTEL_RATE + value: "1" + + graphic_elements: + env: + - name: NIM_HTTP_API_PORT + value: "8000" + - name: NIM_TRITON_LOG_VERBOSE + value: "1" + - name: NIM_TRITON_RATE_LIMIT + value: "3" + - name: NIM_TRITON_MAX_BATCH_SIZE + value: "1" + - name: NIM_TRITON_DATA_MAX_BATCH_SIZE + value: "1" + - name: NIM_TRITON_CUDA_MEMORY_POOL_MB + value: "2048" + - name: OMP_NUM_THREADS + value: "1" + + table_structure: + env: + - name: NIM_HTTP_API_PORT + value: "8000" + - name: NIM_TRITON_LOG_VERBOSE + value: "1" + - name: NIM_TRITON_RATE_LIMIT + value: "3" + - name: NIM_TRITON_MAX_BATCH_SIZE + value: "1" + - name: NIM_TRITON_DATA_MAX_BATCH_SIZE + value: "1" + - name: NIM_TRITON_CUDA_MEMORY_POOL_MB + value: "2048" + - name: OMP_NUM_THREADS + value: "1" + + ocr: + env: + - name: OMP_NUM_THREADS + value: "8" + - name: NIM_HTTP_API_PORT + value: "8000" + - name: NIM_TRITON_LOG_VERBOSE + value: "1" + - name: NIM_TRITON_MAX_BATCH_SIZE + value: "1" + + rerankqa: + env: + - name: NIM_HTTP_API_PORT + value: "8000" + - name: NIM_TRITON_LOG_VERBOSE + value: "1" + - name: NIM_TRITON_MAX_BATCH_SIZE + value: "1" From be533061fd071863b340e36ad837c9d560c3c282 Mon Sep 17 00:00:00 2001 From: Edward Kim <109497216+edknv@users.noreply.github.com> Date: Thu, 12 Mar 2026 13:44:03 -0700 Subject: [PATCH 16/94] (retriever) update nemotron_parse extraction method (#1599) (#1604) --- .../nemo_retriever/examples/batch_pipeline.py | 2 +- .../examples/inprocess_pipeline.py | 30 +------------------ .../src/nemo_retriever/ingest_modes/batch.py | 28 +++++++++++++++++ .../nemo_retriever/ingest_modes/inprocess.py | 20 ++----------- 4 files changed, 32 insertions(+), 48 deletions(-) diff --git a/nemo_retriever/src/nemo_retriever/examples/batch_pipeline.py b/nemo_retriever/src/nemo_retriever/examples/batch_pipeline.py index a66137660..556bf38fc 100644 --- a/nemo_retriever/src/nemo_retriever/examples/batch_pipeline.py +++ b/nemo_retriever/src/nemo_retriever/examples/batch_pipeline.py @@ -284,7 +284,7 @@ def main( method: str = typer.Option( "pdfium", "--method", - help="PDF text extraction method: 'pdfium' (native only), 'pdfium_hybrid' (native + OCR for scanned), or 'ocr' (OCR all pages).", # noqa: E501 + help="PDF text extraction method: 'pdfium' (native only), 'pdfium_hybrid' (native + OCR for scanned), 'ocr' (OCR all pages), or 'nemotron_parse' (Nemotron Parse only, auto-configured).", # noqa: E501 ), log_file: Optional[Path] = typer.Option( None, diff --git a/nemo_retriever/src/nemo_retriever/examples/inprocess_pipeline.py b/nemo_retriever/src/nemo_retriever/examples/inprocess_pipeline.py index 6030e90d1..6c4f27ba9 100644 --- a/nemo_retriever/src/nemo_retriever/examples/inprocess_pipeline.py +++ b/nemo_retriever/src/nemo_retriever/examples/inprocess_pipeline.py @@ -95,25 +95,7 @@ def main( method: str = typer.Option( "pdfium", "--method", - help="PDF text extraction method: 'pdfium' (native only), 'pdfium_hybrid' (native + OCR for scanned), or 'ocr' (OCR all pages).", # noqa: E501 - ), - nemotron_parse_actors: float = typer.Option( - 0.0, - "--nemotron-parse-actors", - min=0.0, - help="Enable Parse-only extraction path when > 0.0 with parse GPU/batch-size.", - ), - nemotron_parse_gpus_per_actor: float = typer.Option( - 0.0, - "--nemotron-parse-gpus-per-actor", - min=0.0, - help="GPU allocation hint for Parse-only extraction path.", - ), - nemotron_parse_ray_batch_size: float = typer.Option( - 0.0, - "--nemotron-parse-ray-batch-size", - min=0.0, - help="Parse stage batch size (enables Parse-only path when > 0.0 with parse workers/GPU).", + help="PDF text extraction method: 'pdfium' (native only), 'pdfium_hybrid' (native + OCR for scanned), 'ocr' (OCR all pages), or 'nemotron_parse' (Nemotron Parse only).", # noqa: E501 ), embed_modality: str = typer.Option( "text", @@ -240,11 +222,6 @@ def main( table_structure_invoke_url=table_structure_invoke_url, page_elements_invoke_url=page_elements_invoke_url, ocr_invoke_url=ocr_invoke_url, - batch_tuning={ - "nemotron_parse_workers": float(nemotron_parse_actors), - "gpu_nemotron_parse": float(nemotron_parse_gpus_per_actor), - "nemotron_parse_batch_size": float(nemotron_parse_ray_batch_size), - }, ) ) else: @@ -262,11 +239,6 @@ def main( table_structure_invoke_url=table_structure_invoke_url, page_elements_invoke_url=page_elements_invoke_url, ocr_invoke_url=ocr_invoke_url, - batch_tuning={ - "nemotron_parse_workers": float(nemotron_parse_actors), - "gpu_nemotron_parse": float(nemotron_parse_gpus_per_actor), - "nemotron_parse_batch_size": float(nemotron_parse_ray_batch_size), - }, ) ) diff --git a/nemo_retriever/src/nemo_retriever/ingest_modes/batch.py b/nemo_retriever/src/nemo_retriever/ingest_modes/batch.py index b2886991a..87e3c546c 100644 --- a/nemo_retriever/src/nemo_retriever/ingest_modes/batch.py +++ b/nemo_retriever/src/nemo_retriever/ingest_modes/batch.py @@ -394,10 +394,37 @@ def _endpoint_count(raw: Any) -> int: compute=rd.TaskPoolStrategy(size=self._requested_plan.get_pdf_extract_tasks()), ) + self._apply_nemotron_parse_overrides(kwargs) + self._append_detection_stages(kwargs) return self + def _apply_nemotron_parse_overrides(self, kwargs: dict[str, Any]) -> None: + """Update ``_requested_plan`` with user-provided Nemotron Parse resource overrides + and set ``_use_nemotron_parse_only``.""" + nemotron_parse_workers = float(kwargs.get("nemotron_parse_workers", 0.0) or 0.0) + gpu_nemotron_parse = float(kwargs.get("gpu_nemotron_parse", 0.0) or 0.0) + nemotron_parse_batch_size = float(kwargs.get("nemotron_parse_batch_size", 0.0) or 0.0) + self._use_nemotron_parse_only = kwargs.get("method") == "nemotron_parse" or ( + nemotron_parse_workers > 0.0 and gpu_nemotron_parse > 0.0 and nemotron_parse_batch_size > 0.0 + ) + + # Forward CLI overrides into the RequestedPlan so that downstream Ray + # actor pools (batch size, GPU fraction, pool size) honour them. + overrides: dict[str, Any] = {} + if nemotron_parse_workers > 0.0: + workers = int(nemotron_parse_workers) + overrides["nemotron_parse_initial_actors"] = workers + overrides["nemotron_parse_min_actors"] = workers + overrides["nemotron_parse_max_actors"] = workers + if gpu_nemotron_parse > 0.0: + overrides["nemotron_parse_gpus_per_actor"] = gpu_nemotron_parse + if nemotron_parse_batch_size > 0.0: + overrides["nemotron_parse_batch_size"] = int(nemotron_parse_batch_size) + if overrides: + self._requested_plan = self._requested_plan.model_copy(update=overrides) + def _append_detection_stages(self, kwargs: dict[str, Any]) -> None: """Append downstream GPU detection stages (page elements, OCR, table/chart/infographic). @@ -665,6 +692,7 @@ def extract_image_files(self, params: ExtractParams | None = None, **kwargs: Any ) # Downstream detection stages (page elements, OCR, table/chart/infographic). + self._apply_nemotron_parse_overrides(kwargs) self._append_detection_stages(kwargs) return self diff --git a/nemo_retriever/src/nemo_retriever/ingest_modes/inprocess.py b/nemo_retriever/src/nemo_retriever/ingest_modes/inprocess.py index 90e230cba..529814853 100644 --- a/nemo_retriever/src/nemo_retriever/ingest_modes/inprocess.py +++ b/nemo_retriever/src/nemo_retriever/ingest_modes/inprocess.py @@ -1022,13 +1022,7 @@ def extract(self, params: ExtractParams | None = None, **kwargs: Any) -> "InProc ): resolved = resolved.model_copy(update={"api_key": resolve_remote_api_key()}) kwargs = resolved.model_dump(mode="python") - batch_tuning = kwargs.get("batch_tuning") if isinstance(kwargs.get("batch_tuning"), dict) else {} - nemotron_parse_workers = float(batch_tuning.get("nemotron_parse_workers", 0.0) or 0.0) - gpu_nemotron_parse = float(batch_tuning.get("gpu_nemotron_parse", 0.0) or 0.0) - nemotron_parse_batch_size = float(batch_tuning.get("nemotron_parse_batch_size", 0.0) or 0.0) - use_nemotron_parse_only = ( - nemotron_parse_workers > 0.0 and gpu_nemotron_parse > 0.0 and nemotron_parse_batch_size > 0.0 - ) + use_nemotron_parse_only = kwargs.get("method") == "nemotron_parse" extract_kwargs = dict(kwargs) # Downstream in-process stages (page elements / table / chart / infographic) assume # `page_image.image_b64` exists. Ensure PDF extraction emits a page image unless @@ -1056,9 +1050,6 @@ def _append_detection_tasks( Shared by ``extract()`` (PDF) and ``extract_image_files()`` (standalone images). """ - batch_tuning = kwargs.get("batch_tuning") if isinstance(kwargs.get("batch_tuning"), dict) else {} - nemotron_parse_batch_size = float(batch_tuning.get("nemotron_parse_batch_size", 0.0) or 0.0) - # Common, optional knobs shared by our detect_* helpers. detect_passthrough_keys = { "inference_batch_size", @@ -1104,7 +1095,6 @@ def _detect_kwargs_with_model(model_obj: Any, *, stage_name: str, allow_remote: parse_flags["extract_charts"] = True if kwargs.get("extract_infographics") is True: parse_flags["extract_infographics"] = True - parse_flags["inference_batch_size"] = int(nemotron_parse_batch_size) parse_flags.update(_stage_remote_kwargs("nemotron_parse")) parse_invoke_url = kwargs.get( "nemotron_parse_invoke_url", kwargs.get("ocr_invoke_url", kwargs.get("invoke_url", "")) @@ -1261,13 +1251,7 @@ def extract_image_files(self, params: ExtractParams | None = None, **kwargs: Any ): resolved = resolved.model_copy(update={"api_key": resolve_remote_api_key()}) kwargs = resolved.model_dump(mode="python") - batch_tuning = kwargs.get("batch_tuning") if isinstance(kwargs.get("batch_tuning"), dict) else {} - nemotron_parse_workers = float(batch_tuning.get("nemotron_parse_workers", 0.0) or 0.0) - gpu_nemotron_parse = float(batch_tuning.get("gpu_nemotron_parse", 0.0) or 0.0) - nemotron_parse_batch_size = float(batch_tuning.get("nemotron_parse_batch_size", 0.0) or 0.0) - use_nemotron_parse_only = ( - nemotron_parse_workers > 0.0 and gpu_nemotron_parse > 0.0 and nemotron_parse_batch_size > 0.0 - ) + use_nemotron_parse_only = kwargs.get("method") == "nemotron_parse" self._pipeline_type = "image" self._append_detection_tasks(kwargs, use_nemotron_parse_only=use_nemotron_parse_only) return self From 491aed0b32bf6cf290706adb4f5737d7f91818a9 Mon Sep 17 00:00:00 2001 From: Edward Kim <109497216+edknv@users.noreply.github.com> Date: Thu, 12 Mar 2026 13:47:35 -0700 Subject: [PATCH 17/94] =?UTF-8?q?(retriever)=20auto-route=20image=20files?= =?UTF-8?q?=20in=20.extract()=20for=20both=20inprocess=20a=E2=80=A6=20(#16?= =?UTF-8?q?05)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../examples/inprocess_pipeline.py | 20 ++++++++++++++++++- .../src/nemo_retriever/ingest_modes/batch.py | 6 ++++++ .../nemo_retriever/ingest_modes/inprocess.py | 5 +++++ 3 files changed, 30 insertions(+), 1 deletion(-) diff --git a/nemo_retriever/src/nemo_retriever/examples/inprocess_pipeline.py b/nemo_retriever/src/nemo_retriever/examples/inprocess_pipeline.py index 6c4f27ba9..e5b9ad117 100644 --- a/nemo_retriever/src/nemo_retriever/examples/inprocess_pipeline.py +++ b/nemo_retriever/src/nemo_retriever/examples/inprocess_pipeline.py @@ -44,7 +44,7 @@ def main( input_type: str = typer.Option( "pdf", "--input-type", - help="Input format: 'pdf', 'txt', 'html', or 'doc'. Use 'txt' for .txt, 'html' for .html (markitdown -> chunks), 'doc' for .docx/.pptx (converted to PDF via LibreOffice).", # noqa: E501 + help="Input format: 'pdf', 'txt', 'html', 'doc', or 'image'. Use 'txt' for .txt, 'html' for .html (markitdown -> chunks), 'doc' for .docx/.pptx (converted to PDF via LibreOffice), 'image' for standalone image files (PNG, JPEG, BMP, TIFF, SVG).", # noqa: E501 ), query_csv: Path = typer.Option( "bo767_query_gt.csv", @@ -186,6 +186,7 @@ def main( "txt": ["*.txt"], "html": ["*.html"], "doc": ["*.docx", "*.pptx"], + "image": ["*.png", "*.jpg", "*.jpeg", "*.bmp", "*.tiff", "*.tif", "*.svg"], } exts = ext_map.get(input_type, ["*.pdf"]) file_patterns = [str(input_path / e) for e in exts] @@ -207,6 +208,23 @@ def main( overlap_tokens=text_chunk_overlap_tokens if text_chunk_overlap_tokens is not None else 150, ) ) + elif input_type == "image": + ingestor = ingestor.files(file_patterns).extract_image_files( + ExtractParams( + method=method, + extract_text=True, + extract_tables=True, + extract_charts=True, + extract_infographics=False, + use_graphic_elements=use_graphic_elements, + graphic_elements_invoke_url=graphic_elements_invoke_url, + use_table_structure=use_table_structure, + table_output_format=table_output_format, + table_structure_invoke_url=table_structure_invoke_url, + page_elements_invoke_url=page_elements_invoke_url, + ocr_invoke_url=ocr_invoke_url, + ) + ) elif input_type == "doc": ingestor = ingestor.files(file_patterns).extract( ExtractParams( diff --git a/nemo_retriever/src/nemo_retriever/ingest_modes/batch.py b/nemo_retriever/src/nemo_retriever/ingest_modes/batch.py index 87e3c546c..f7a909f29 100644 --- a/nemo_retriever/src/nemo_retriever/ingest_modes/batch.py +++ b/nemo_retriever/src/nemo_retriever/ingest_modes/batch.py @@ -38,6 +38,7 @@ ) from nemo_retriever.ingest_modes.inprocess import collapse_content_to_page_rows, explode_content_to_rows +from ..image.load import SUPPORTED_IMAGE_EXTENSIONS from ..ingestor import Ingestor from ..params import ASRParams from ..params import AudioChunkParams @@ -318,6 +319,11 @@ def extract(self, params: ExtractParams | None = None, **kwargs: Any) -> "BatchI ) return self.extract_txt(params=txt_params) + if self._input_documents and all( + os.path.splitext(f)[1].lower() in SUPPORTED_IMAGE_EXTENSIONS for f in self._input_documents + ): + return self.extract_image_files(params=params, **kwargs) + resolved = _coerce_params(params, ExtractParams, kwargs) if ( any( diff --git a/nemo_retriever/src/nemo_retriever/ingest_modes/inprocess.py b/nemo_retriever/src/nemo_retriever/ingest_modes/inprocess.py index 529814853..1f1d229a2 100644 --- a/nemo_retriever/src/nemo_retriever/ingest_modes/inprocess.py +++ b/nemo_retriever/src/nemo_retriever/ingest_modes/inprocess.py @@ -45,6 +45,7 @@ pdfium = None # type: ignore[assignment] _PDFIUM_IMPORT_ERROR = e +from ..image.load import SUPPORTED_IMAGE_EXTENSIONS from ..utils.convert import SUPPORTED_EXTENSIONS, convert_to_pdf_bytes from ..ingestor import Ingestor from ..params import ASRParams @@ -1007,6 +1008,10 @@ def extract(self, params: ExtractParams | None = None, **kwargs: Any) -> "InProc if self._input_documents and all(f.lower().endswith(".html") for f in self._input_documents): html_params = HtmlChunkParams() return self.extract_html(params=html_params) + if self._input_documents and all( + os.path.splitext(f)[1].lower() in SUPPORTED_IMAGE_EXTENSIONS for f in self._input_documents + ): + return self.extract_image_files(params=params, **kwargs) resolved = _coerce_params(params, ExtractParams, kwargs) if ( any( From 82088d72a744be9ba8bafb6ea794fb15970ad678 Mon Sep 17 00:00:00 2001 From: Charles Blackmon-Luca <20627856+charlesbluca@users.noreply.github.com> Date: Thu, 12 Mar 2026 16:50:16 -0400 Subject: [PATCH 18/94] Dump libfreetype source in release container (#1600) (#1606) --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 87f1e9304..f89038926 100644 --- a/Dockerfile +++ b/Dockerfile @@ -39,13 +39,13 @@ RUN chmod +x scripts/install_ffmpeg.sh \ # For GPL-licensed components, we provide their source code in the container # via `apt-get source` below to satisfy GPL requirements. ARG GPL_LIBS="\ + libfreetype6 \ libltdl7 \ libhunspell-1.7-0 \ libhyphen0 \ libdbus-1-3 \ " ARG FORCE_REMOVE_PKGS="\ - libfreetype6 \ ucf \ liblangtag-common \ libjbig0 \ From 10c7435daf27e91f7b71fa07bb7fae2fca4dc114 Mon Sep 17 00:00:00 2001 From: Jeremy Dyer Date: Thu, 12 Mar 2026 18:20:11 -0400 Subject: [PATCH 19/94] Unit test failure fixes (#1607) --- .github/workflows/retriever-unit-tests.yml | 10 +++++++--- nemo_retriever/pyproject.toml | 8 ++++---- nemo_retriever/tests/test_batch_pipeline.py | 17 ----------------- nemo_retriever/tests/test_html_convert.py | 8 ++++---- nemo_retriever/tests/test_txt_split.py | 8 ++++---- 5 files changed, 19 insertions(+), 32 deletions(-) diff --git a/.github/workflows/retriever-unit-tests.yml b/.github/workflows/retriever-unit-tests.yml index e26d93328..87fb7ee25 100644 --- a/.github/workflows/retriever-unit-tests.yml +++ b/.github/workflows/retriever-unit-tests.yml @@ -19,11 +19,15 @@ jobs: with: python-version: "3.12" + - name: Install uv + run: | + curl -LsSf https://astral.sh/uv/install.sh | sh + echo "$HOME/.local/bin" >> "$GITHUB_PATH" + - name: Install unit test dependencies run: | - python -m pip install --upgrade pip - python -m pip install pytest pandas pydantic pyyaml typer scikit-learn - python -m pip install api/ + uv pip install --system -e src/ -e api/ -e client/ + uv pip install --system -e nemo_retriever - name: Run retriever unit tests env: diff --git a/nemo_retriever/pyproject.toml b/nemo_retriever/pyproject.toml index 01de8f640..17ccb9459 100644 --- a/nemo_retriever/pyproject.toml +++ b/nemo_retriever/pyproject.toml @@ -93,10 +93,10 @@ version = {attr = "nemo_retriever.version.get_build_version"} nv-ingest = { path = "../src/", editable = true } nv-ingest-api = { path = "../api/", editable = true } nv-ingest-client = { path = "../client/", editable = true } -nemotron-page-elements-v3 = { index = "test-pypi" } -nemotron-graphic-elements-v1 = { index = "test-pypi" } -nemotron-table-structure-v1 = { index = "test-pypi" } -nemotron-ocr = { index = "test-pypi" } +#nemotron-page-elements-v3 = { index = "test-pypi" } +#nemotron-graphic-elements-v1 = { index = "test-pypi" } +#nemotron-table-structure-v1 = { index = "test-pypi" } +#nemotron-ocr = { index = "test-pypi" } torch = { index = "torch-cuda"} torchvision = { index ="torch-cuda"} diff --git a/nemo_retriever/tests/test_batch_pipeline.py b/nemo_retriever/tests/test_batch_pipeline.py index 2d18d92bb..6dfc913a6 100644 --- a/nemo_retriever/tests/test_batch_pipeline.py +++ b/nemo_retriever/tests/test_batch_pipeline.py @@ -1,23 +1,6 @@ -import pytest - -pytest.importorskip("ray") - -from nemo_retriever.examples.batch_pipeline import _count_materialized_rows from nemo_retriever.utils.input_files import resolve_input_patterns -class _DatasetWithoutLen: - def count(self) -> int: - return 42 - - def __len__(self) -> int: - raise AssertionError("__len__ should not be used") - - -def test_count_materialized_rows_prefers_dataset_count() -> None: - assert _count_materialized_rows(_DatasetWithoutLen()) == 42 - - def test_resolve_input_file_patterns_recurses_for_directory_inputs(tmp_path) -> None: dataset_dir = tmp_path / "earnings_consulting" dataset_dir.mkdir() diff --git a/nemo_retriever/tests/test_html_convert.py b/nemo_retriever/tests/test_html_convert.py index 399ae9091..646127830 100644 --- a/nemo_retriever/tests/test_html_convert.py +++ b/nemo_retriever/tests/test_html_convert.py @@ -16,6 +16,7 @@ html_file_to_chunks_df, html_to_markdown, ) +from nemo_retriever.params.models import HtmlChunkParams def test_html_to_markdown_str(): @@ -53,8 +54,7 @@ def test_html_file_to_chunks_df(tmp_path: Path): ) df = html_file_to_chunks_df( str(f), - max_tokens=512, - overlap_tokens=0, + params=HtmlChunkParams(max_tokens=512, overlap_tokens=0), ) assert isinstance(df, pd.DataFrame) assert "text" in df.columns and "path" in df.columns and "page_number" in df.columns and "metadata" in df.columns @@ -71,7 +71,7 @@ def test_html_file_to_chunks_df_empty_content(tmp_path: Path): pytest.importorskip("transformers") f = tmp_path / "empty.html" f.write_text("", encoding="utf-8") - df = html_file_to_chunks_df(str(f), max_tokens=512) + df = html_file_to_chunks_df(str(f), params=HtmlChunkParams(max_tokens=512)) assert isinstance(df, pd.DataFrame) assert list(df.columns) == ["text", "path", "page_number", "metadata"] assert len(df) == 0 @@ -82,7 +82,7 @@ def test_html_bytes_to_chunks_df(tmp_path: Path): pytest.importorskip("transformers") html_bytes = b"

Chunk content from bytes.

" path = str(tmp_path / "virtual.html") - df = html_bytes_to_chunks_df(html_bytes, path, max_tokens=512, overlap_tokens=0) + df = html_bytes_to_chunks_df(html_bytes, path, params=HtmlChunkParams(max_tokens=512, overlap_tokens=0)) assert isinstance(df, pd.DataFrame) assert "text" in df.columns and "path" in df.columns and "page_number" in df.columns and "metadata" in df.columns assert len(df) >= 1 diff --git a/nemo_retriever/tests/test_txt_split.py b/nemo_retriever/tests/test_txt_split.py index 212c94813..cc71bfc45 100644 --- a/nemo_retriever/tests/test_txt_split.py +++ b/nemo_retriever/tests/test_txt_split.py @@ -13,6 +13,7 @@ import pytest from nemo_retriever.txt.split import split_text_by_tokens, txt_file_to_chunks_df +from nemo_retriever.params.models import TextChunkParams class _MockTokenizer: @@ -63,11 +64,10 @@ def test_txt_file_to_chunks_df(tmp_path: Path): f.write_text("First paragraph here. Second paragraph there.", encoding="utf-8") df = txt_file_to_chunks_df( str(f), - max_tokens=512, - overlap_tokens=0, + params=TextChunkParams(max_tokens=512, overlap_tokens=0), ) assert isinstance(df, pd.DataFrame) - assert list(df.columns) == ["text", "path", "page_number", "metadata"] + assert list(df.columns) == ["text", "content", "path", "page_number", "metadata"] assert len(df) >= 1 assert df["path"].iloc[0] == str(f.resolve()) assert df["page_number"].iloc[0] >= 1 @@ -79,7 +79,7 @@ def test_txt_file_to_chunks_df_empty_file(tmp_path: Path): pytest.importorskip("transformers") f = tmp_path / "empty.txt" f.write_text("", encoding="utf-8") - df = txt_file_to_chunks_df(str(f), max_tokens=512) + df = txt_file_to_chunks_df(str(f), params=TextChunkParams(max_tokens=512)) assert isinstance(df, pd.DataFrame) assert list(df.columns) == ["text", "path", "page_number", "metadata"] assert len(df) == 0 From 11662db9856e907ebd9859b07847d5ba09aa2c94 Mon Sep 17 00:00:00 2001 From: Jacob Ioffe <70251274+jioffe502@users.noreply.github.com> Date: Thu, 12 Mar 2026 18:27:47 -0400 Subject: [PATCH 20/94] Fix markdown outputs for batch and inprocess. (#1601) Signed-off-by: Jacob Ioffe --- nemo_retriever/README.md | 15 +- .../src/nemo_retriever/io/markdown.py | 216 ++++++++++++++---- nemo_retriever/tests/test_io_markdown.py | 125 +++++++--- 3 files changed, 274 insertions(+), 82 deletions(-) diff --git a/nemo_retriever/README.md b/nemo_retriever/README.md index c3292ba69..f0af47d61 100644 --- a/nemo_retriever/README.md +++ b/nemo_retriever/README.md @@ -210,10 +210,12 @@ ingestor = ( All `ExtractParams` options (`extract_text`, `extract_tables`, `extract_charts`, `extract_infographics`) apply to image ingestion. -### Render one document as markdown +### Render results as markdown -If you want a readable page-by-page markdown view of a single in-process result, pass the -single-document result from `results[0]` to `nemo_retriever.io.to_markdown`. +If you want a readable markdown view of extracted results, pass the full in-process result list +to `nemo_retriever.io.to_markdown`. The helper now returns a `dict[str, str]` keyed by input +filename, where each value is the document collapsed into one markdown string without per-page +headers, so both single-document and multi-document runs follow the same contract. ```python from nemo_retriever import create_ingestor @@ -230,11 +232,12 @@ ingestor = ( ) ) results = ingestor.ingest() -print(to_markdown(results[0])) +markdown_docs = to_markdown(results) +print(markdown_docs["multimodal_test.pdf"]) ``` -Use `to_markdown_by_page(results[0])` when you want a `dict[int, str]` instead of one concatenated -markdown document. +Use `to_markdown_by_page(results)` when you want a nested +`dict[str, dict[int, str]]` instead, where each filename maps to its per-page markdown strings. ## Benchmark harness diff --git a/nemo_retriever/src/nemo_retriever/io/markdown.py b/nemo_retriever/src/nemo_retriever/io/markdown.py index 366677e40..2a03e7e94 100644 --- a/nemo_retriever/src/nemo_retriever/io/markdown.py +++ b/nemo_retriever/src/nemo_retriever/io/markdown.py @@ -4,6 +4,7 @@ from __future__ import annotations +import json from collections import defaultdict from collections.abc import Iterable, Mapping from dataclasses import dataclass, field @@ -14,7 +15,6 @@ from .dataframe import read_dataframe -_DOCUMENT_TITLE = "Extracted Content" _UNKNOWN_PAGE = -1 _RECORD_LIST_KEYS = ("records", "df_records", "extracted_df_records", "primitives") _PAGE_CONTENT_COLUMNS = ( @@ -39,76 +39,202 @@ def next_index(self, label: str) -> int: return next_value -def to_markdown_by_page(results: object) -> dict[int, str]: - """Render a single document result as markdown grouped by page.""" - records = _coerce_records(results) - by_page: dict[int, _PageContent] = defaultdict(_PageContent) +def to_markdown_by_page(results: object) -> dict[str, dict[int, str]]: + """Render results as markdown grouped by document, then by page.""" + grouped_records = _coerce_documents(results) + rendered: dict[str, dict[int, str]] = {} - for record in records: - if "document_type" in record: - _collect_primitive_record(by_page, record) - else: - _collect_page_record(by_page, record) + for document_name, records in grouped_records.items(): + by_page = _pages_for_records(records) + rendered[document_name] = { + page_number: _render_page_content(page_content) + for page_number, page_content in sorted(by_page.items(), key=_page_sort_key) + } + + return rendered - rendered: dict[int, str] = {} - for page_number, page_content in sorted(by_page.items(), key=_page_sort_key): - blocks = _dedupe_blocks(page_content.text_blocks + page_content.sections) - header = f"## Page {page_number}" if page_number != _UNKNOWN_PAGE else "## Page Unknown" - rendered[page_number] = header + ("\n\n" + "\n\n".join(blocks) if blocks else "\n") + +def to_markdown(results: object) -> dict[str, str]: + """Render results as one collapsed markdown string per document.""" + rendered: dict[str, str] = {} + + for document_name, pages in to_markdown_by_page(results).items(): + rendered[document_name] = "\n\n".join(page_markdown for page_markdown in pages.values() if page_markdown) return rendered -def to_markdown(results: object) -> str: - """Render a single document result as one markdown document.""" - pages = to_markdown_by_page(results) - if not pages: - return f"# {_DOCUMENT_TITLE}\n\n_No content found._" - return f"# {_DOCUMENT_TITLE}\n\n" + "\n\n".join(pages.values()) +def _coerce_documents(results: object) -> dict[str, list[dict[str, Any]]]: + grouped_records: dict[str, list[dict[str, Any]]] = {} + _extend_documents(grouped_records, results) + return grouped_records -def _coerce_records(results: object) -> list[dict[str, Any]]: +def _extend_documents( + grouped_records: dict[str, list[dict[str, Any]]], + results: object, + explicit_document_name: str | None = None, +) -> None: if results is None: - return [] + return + + dataset = getattr(results, "_rd_dataset", None) + if dataset is not None: + _extend_documents(grouped_records, dataset, explicit_document_name) + return + + take_all = getattr(results, "take_all", None) + if callable(take_all): + _extend_documents(grouped_records, take_all(), explicit_document_name) + return + if isinstance(results, pd.DataFrame): - return results.to_dict(orient="records") + _add_records(grouped_records, results.to_dict(orient="records"), explicit_document_name) + return + if isinstance(results, Path): - return read_dataframe(results).to_dict(orient="records") + payload, payload_document_name = _load_results_path(results) + _extend_documents(grouped_records, payload, explicit_document_name or payload_document_name) + return + if isinstance(results, str): path = Path(results).expanduser() if path.exists(): - return read_dataframe(path).to_dict(orient="records") + payload, payload_document_name = _load_results_path(path) + _extend_documents(grouped_records, payload, explicit_document_name or payload_document_name) + return raise TypeError("String inputs must point to a saved results file.") + if isinstance(results, Mapping): - return _records_from_mapping(results) + extracted = _extract_records_from_mapping(results) + if extracted is not None: + records, mapping_document_name = extracted + _add_records(grouped_records, records, explicit_document_name or mapping_document_name) + return + + for key, value in results.items(): + _extend_documents(grouped_records, value, str(key)) + return + if isinstance(results, Iterable) and not isinstance(results, (bytes, bytearray)): - return _records_from_iterable(results) + items = list(results) + if not items: + return + if all(isinstance(item, Mapping) and _looks_like_record(item) for item in items): + _add_records(grouped_records, [dict(item) for item in items], explicit_document_name) + return + for item in items: + _extend_documents(grouped_records, item, explicit_document_name=None) + return + raise TypeError(f"Unsupported results type for markdown rendering: {type(results)!r}") -def _records_from_iterable(results: Iterable[Any]) -> list[dict[str, Any]]: - items = list(results) - if not items: - return [] - if len(items) == 1: - first = items[0] - if not isinstance(first, Mapping): - return _coerce_records(first) - if not _looks_like_record(first): - return _records_from_mapping(first) - if all(isinstance(item, Mapping) for item in items): - return [dict(item) for item in items] - raise ValueError("Markdown rendering expects a single document result. Pass one document, such as results[0].") +def _load_results_path(path: Path) -> tuple[object, str | None]: + suffix = path.suffix.lower() + if suffix == ".json": + payload = json.loads(path.read_text(encoding="utf-8")) + return payload, _document_name_from_mapping(payload) if isinstance(payload, Mapping) else None + if suffix == ".jsonl": + lines = [json.loads(line) for line in path.read_text(encoding="utf-8").splitlines() if line.strip()] + if len(lines) == 1 and isinstance(lines[0], Mapping): + payload = lines[0] + return payload, _document_name_from_mapping(payload) + return lines, None + return read_dataframe(path), None -def _records_from_mapping(results: Mapping[str, Any]) -> list[dict[str, Any]]: +def _extract_records_from_mapping(results: Mapping[str, Any]) -> tuple[list[dict[str, Any]], str | None] | None: for key in _RECORD_LIST_KEYS: value = results.get(key) if isinstance(value, list) and all(isinstance(item, Mapping) for item in value): - return [dict(item) for item in value] + return [dict(item) for item in value], _document_name_from_mapping(results) if _looks_like_record(results): - return [dict(results)] - raise ValueError("Markdown rendering expects a document row, row list, or saved results payload.") + return [dict(results)], None + return None + + +def _add_records( + grouped_records: dict[str, list[dict[str, Any]]], + records: list[dict[str, Any]], + explicit_document_name: str | None = None, +) -> None: + fallback_document_name = explicit_document_name or _next_unknown_document_name(grouped_records) + for record in records: + document_name = explicit_document_name or _document_name_for_record(record) or fallback_document_name + grouped_records.setdefault(document_name, []).append(record) + + +def _next_unknown_document_name(grouped_records: Mapping[str, list[dict[str, Any]]]) -> str: + index = 1 + while f"document_{index}" in grouped_records: + index += 1 + return f"document_{index}" + + +def _pages_for_records(records: Iterable[Mapping[str, Any]]) -> dict[int, _PageContent]: + by_page: dict[int, _PageContent] = defaultdict(_PageContent) + + for record in records: + if "document_type" in record: + _collect_primitive_record(by_page, record) + else: + _collect_page_record(by_page, record) + + return by_page + + +def _render_page_content(page_content: _PageContent) -> str: + return "\n\n".join(_dedupe_blocks(page_content.text_blocks + page_content.sections)) + + +def _document_name_from_mapping(results: Mapping[str, Any]) -> str | None: + metadata = results.get("metadata") + source_metadata = _nested_mapping(metadata, "source_metadata") if isinstance(metadata, Mapping) else {} + custom_content = _nested_mapping(metadata, "custom_content") if isinstance(metadata, Mapping) else {} + + return _normalize_document_name( + results.get("filename"), + results.get("source_path"), + results.get("path"), + results.get("source_id"), + source_metadata.get("source_name"), + source_metadata.get("source_id"), + custom_content.get("path"), + custom_content.get("input_pdf"), + custom_content.get("pdf_path"), + ) + + +def _document_name_for_record(record: Mapping[str, Any]) -> str | None: + metadata = _metadata(record) + source_metadata = _nested_mapping(metadata, "source_metadata") + custom_content = _nested_mapping(metadata, "custom_content") + + return _normalize_document_name( + record.get("filename"), + record.get("source_path"), + metadata.get("source_path"), + source_metadata.get("source_name"), + custom_content.get("path"), + custom_content.get("input_pdf"), + custom_content.get("pdf_path"), + record.get("path"), + source_metadata.get("source_id"), + record.get("source_id"), + ) + + +def _normalize_document_name(*candidates: Any) -> str | None: + for candidate in candidates: + if not isinstance(candidate, str): + continue + normalized = candidate.strip() + if not normalized: + continue + name = Path(normalized).name + return name or normalized + return None def _looks_like_record(record: Mapping[str, Any]) -> bool: diff --git a/nemo_retriever/tests/test_io_markdown.py b/nemo_retriever/tests/test_io_markdown.py index e2ce7ed52..f0d98edbd 100644 --- a/nemo_retriever/tests/test_io_markdown.py +++ b/nemo_retriever/tests/test_io_markdown.py @@ -2,7 +2,6 @@ from pathlib import Path import pandas as pd -import pytest from nemo_retriever.io import to_markdown, to_markdown_by_page @@ -18,10 +17,24 @@ def __len__(self): return len(self._rows) -def test_to_markdown_renders_page_dataframe() -> None: +class _DatasetLike: + def __init__(self, rows): + self._rows = rows + + def take_all(self): + return list(self._rows) + + +class _BatchResults: + def __init__(self, rows): + self._rd_dataset = _DatasetLike(rows) + + +def test_to_markdown_groups_page_dataframe_by_filename() -> None: df = pd.DataFrame( [ { + "path": "/tmp/alpha.pdf", "page_number": 1, "text": "Executive summary", "table": [{"text": "| Animal | Count |\n| --- | --- |\n| Cat | 2 |"}], @@ -29,10 +42,19 @@ def test_to_markdown_renders_page_dataframe() -> None: "infographic": [], }, { + "path": "/tmp/alpha.pdf", "page_number": 2, "text": "Appendix", "table": [], "chart": [], + "infographic": [], + }, + { + "path": "/tmp/beta.pdf", + "page_number": 1, + "text": "Appendix", + "table": [], + "chart": [], "infographic": [{"text": "Icon legend and callouts."}], }, ] @@ -40,29 +62,33 @@ def test_to_markdown_renders_page_dataframe() -> None: markdown = to_markdown(df) - assert markdown.startswith("# Extracted Content") - assert "## Page 1" in markdown - assert "Executive summary" in markdown - assert "### Table 1" in markdown - assert "### Chart 1" in markdown - assert "## Page 2" in markdown - assert "### Infographic 1" in markdown + assert list(markdown) == ["alpha.pdf", "beta.pdf"] + assert markdown["alpha.pdf"].startswith("Executive summary") + assert "Executive summary" in markdown["alpha.pdf"] + assert "### Table 1" in markdown["alpha.pdf"] + assert "### Chart 1" in markdown["alpha.pdf"] + assert "Appendix" in markdown["alpha.pdf"] + assert "## Page 1" not in markdown["alpha.pdf"] + assert "## Page 2" not in markdown["alpha.pdf"] + assert "### Infographic 1" in markdown["beta.pdf"] -def test_to_markdown_by_page_sorts_pages_and_groups_unknown() -> None: +def test_to_markdown_by_page_sorts_pages_and_groups_unknown_per_document() -> None: pages = to_markdown_by_page( [ - {"page_number": "2", "text": "Second page"}, - {"page_number": None, "text": "Unknown page"}, - {"page_number": 1, "text": "First page"}, - {"page_number": 2, "text": "Second page"}, + {"source_path": "/tmp/alpha.pdf", "page_number": "2", "text": "Second page"}, + {"source_path": "/tmp/alpha.pdf", "page_number": None, "text": "Unknown page"}, + {"source_path": "/tmp/alpha.pdf", "page_number": 1, "text": "First page"}, + {"source_path": "/tmp/alpha.pdf", "page_number": 2, "text": "Second page"}, + {"source_path": "/tmp/beta.pdf", "page_number": 1, "text": "Only page"}, ] ) - assert list(pages.keys()) == [1, 2, -1] - assert pages[1].startswith("## Page 1") - assert pages[2].count("Second page") == 1 - assert pages[-1].startswith("## Page Unknown") + assert list(pages["alpha.pdf"].keys()) == [1, 2, -1] + assert pages["alpha.pdf"][1] == "First page" + assert pages["alpha.pdf"][2].count("Second page") == 1 + assert pages["alpha.pdf"][-1] == "Unknown page" + assert pages["beta.pdf"][1] == "Only page" def test_to_markdown_supports_primitive_rows_from_lazy_iterable() -> None: @@ -71,6 +97,7 @@ def test_to_markdown_supports_primitive_rows_from_lazy_iterable() -> None: { "document_type": "text", "metadata": { + "source_path": "/tmp/alpha.pdf", "content": "Page text", "content_metadata": {"page_number": 1}, }, @@ -78,6 +105,7 @@ def test_to_markdown_supports_primitive_rows_from_lazy_iterable() -> None: { "document_type": "structured", "metadata": { + "source_path": "/tmp/alpha.pdf", "content_metadata": {"page_number": 1, "subtype": "table"}, "table_metadata": {"table_content": "| A |\n| --- |\n| 1 |"}, }, @@ -85,6 +113,7 @@ def test_to_markdown_supports_primitive_rows_from_lazy_iterable() -> None: { "document_type": "image", "metadata": { + "source_path": "/tmp/beta.pdf", "content_metadata": {"page_number": 2, "subtype": "page_image"}, "image_metadata": {"text": "OCR fallback"}, }, @@ -94,39 +123,73 @@ def test_to_markdown_supports_primitive_rows_from_lazy_iterable() -> None: pages = to_markdown_by_page(rows) - assert "Page text" in pages[1] - assert "### Table 1" in pages[1] - assert "### Page Image 1" in pages[2] - assert "OCR fallback" in pages[2] + assert "Page text" in pages["alpha.pdf"][1] + assert "### Table 1" in pages["alpha.pdf"][1] + assert "### Page Image 1" in pages["beta.pdf"][2] + assert "OCR fallback" in pages["beta.pdf"][2] def test_to_markdown_reads_saved_records_wrapper(tmp_path: Path) -> None: path = tmp_path / "results.json" payload = { + "source_path": "/tmp/example.pdf", "records": [ { "page_number": 1, "text": "Saved result text", "table": [{"text": "| H |\n| --- |\n| V |"}], - "metadata": {"source_path": "/tmp/example.pdf"}, } - ] + ], } path.write_text(json.dumps(payload), encoding="utf-8") markdown = to_markdown(path) - assert "Saved result text" in markdown - assert "### Table 1" in markdown + assert list(markdown) == ["example.pdf"] + assert "Saved result text" in markdown["example.pdf"] + assert "### Table 1" in markdown["example.pdf"] -def test_to_markdown_empty_results_returns_placeholder() -> None: - assert to_markdown([]) == "# Extracted Content\n\n_No content found._" +def test_to_markdown_empty_results_returns_empty_dict() -> None: + assert to_markdown([]) == {} -def test_to_markdown_rejects_multi_document_results() -> None: +def test_to_markdown_groups_inprocess_multi_document_results() -> None: doc_a = pd.DataFrame([{"page_number": 1, "text": "A"}]) + doc_a["path"] = "/tmp/a.pdf" doc_b = pd.DataFrame([{"page_number": 1, "text": "B"}]) + doc_b["path"] = "/tmp/b.pdf" + + markdown = to_markdown([doc_a, doc_b]) + + assert set(markdown) == {"a.pdf", "b.pdf"} + assert "A" in markdown["a.pdf"] + assert "B" in markdown["b.pdf"] + + +def test_to_markdown_supports_batch_dataset_like_results() -> None: + results = _BatchResults( + [ + { + "document_type": "text", + "metadata": { + "source_path": "/tmp/batch-a.pdf", + "content": "Batch A page 1", + "content_metadata": {"page_number": 1}, + }, + }, + { + "document_type": "text", + "metadata": { + "source_path": "/tmp/batch-b.pdf", + "content": "Batch B page 2", + "content_metadata": {"page_number": 2}, + }, + }, + ] + ) + + pages = to_markdown_by_page(results) - with pytest.raises(ValueError, match="single document result"): - to_markdown([doc_a, doc_b]) + assert pages["batch-a.pdf"][1] == "Batch A page 1" + assert pages["batch-b.pdf"][2] == "Batch B page 2" From 02c2dcd88975e464b638167f5c7d7078b7e99e28 Mon Sep 17 00:00:00 2001 From: Edward Kim <109497216+edknv@users.noreply.github.com> Date: Thu, 12 Mar 2026 15:32:27 -0700 Subject: [PATCH 21/94] (retriever) update pre/post-processing for improved recall (#1596) (#1608) --- .../nemo_retriever/chart/chart_detection.py | 17 +++++- .../nemo_retriever/examples/batch_pipeline.py | 8 +++ .../examples/inprocess_pipeline.py | 7 +++ .../src/nemo_retriever/ingest-config.yaml | 7 +++ .../src/nemo_retriever/ingest_modes/batch.py | 10 ++-- .../src/nemo_retriever/ingest_modes/fused.py | 2 +- .../model/local/nemotron_page_elements_v3.py | 15 ++++- nemo_retriever/src/nemo_retriever/ocr/ocr.py | 57 ++++++++++++++----- .../page_elements/page_elements.py | 36 +++++++++++- .../src/nemo_retriever/params/models.py | 1 + .../src/nemo_retriever/pdf/extract.py | 54 ++++++++++++++++-- .../src/nemo_retriever/pdf/stage.py | 12 ++++ .../nemo_retriever/table/table_detection.py | 11 +++- nemo_retriever/tests/test_pdf_render_scale.py | 2 +- 14 files changed, 206 insertions(+), 33 deletions(-) diff --git a/nemo_retriever/src/nemo_retriever/chart/chart_detection.py b/nemo_retriever/src/nemo_retriever/chart/chart_detection.py index 1e5a9bb18..23e1d8798 100644 --- a/nemo_retriever/src/nemo_retriever/chart/chart_detection.py +++ b/nemo_retriever/src/nemo_retriever/chart/chart_detection.py @@ -30,6 +30,13 @@ except Exception: # pragma: no cover Image = None # type: ignore[assignment] +try: + from nv_ingest_api.internal.primitives.nim.model_interface.yolox import ( + YOLOX_GRAPHIC_MIN_SCORE, + ) +except ImportError: + YOLOX_GRAPHIC_MIN_SCORE = 0.1 # type: ignore[assignment] + def _error_payload(*, stage: str, exc: BaseException) -> Dict[str, Any]: return { @@ -443,7 +450,13 @@ def graphic_elements_ocr_page_elements( if len(response_items) != len(crops): raise RuntimeError(f"Expected {len(crops)} GE responses, got {len(response_items)}") for resp in response_items: - ge_results.append(_remote_response_to_ge_detections(resp)) + ge_results.append( + [ + d + for d in _remote_response_to_ge_detections(resp) + if (d.get("score") or 0.0) >= YOLOX_GRAPHIC_MIN_SCORE + ] + ) else: # Local batched inference. for _, _, crop_array in crops: @@ -458,7 +471,7 @@ def graphic_elements_ocr_page_elements( pre = pre.unsqueeze(0) pred = graphic_elements_model.invoke(pre, (h, w)) ge_dets = _prediction_to_detections(pred, label_names=label_names) - ge_results.append(ge_dets) + ge_results.append([d for d in ge_dets if (d.get("score") or 0.0) >= YOLOX_GRAPHIC_MIN_SCORE]) # --- Run OCR on all crops --- ocr_results: List[Any] = [] diff --git a/nemo_retriever/src/nemo_retriever/examples/batch_pipeline.py b/nemo_retriever/src/nemo_retriever/examples/batch_pipeline.py index 556bf38fc..b36958b22 100644 --- a/nemo_retriever/src/nemo_retriever/examples/batch_pipeline.py +++ b/nemo_retriever/src/nemo_retriever/examples/batch_pipeline.py @@ -189,6 +189,12 @@ def main( "--debug/--no-debug", help="Enable debug-level logging for this full pipeline run.", ), + dpi: int = typer.Option( + 300, + "--dpi", + min=72, + help="Render DPI for PDF page images (default: 300).", + ), input_path: Path = typer.Argument( ..., help="File or directory containing PDFs, .txt, .html, or .doc/.pptx files to ingest.", @@ -617,6 +623,7 @@ def main( "embed_workers": embed_actors, "embed_batch_size": int(embed_batch_size), "embed_cpus_per_actor": float(embed_cpus_per_actor), + "gpu_embed": float(embed_gpus_per_actor), }, ) # txt/html don't use embed_granularity from batch_tuning the same way, @@ -653,6 +660,7 @@ def main( def _extract_params(batch_tuning: dict, **overrides: Any) -> ExtractParams: return ExtractParams( method=method, + dpi=int(dpi), extract_text=True, extract_tables=True, extract_charts=True, diff --git a/nemo_retriever/src/nemo_retriever/examples/inprocess_pipeline.py b/nemo_retriever/src/nemo_retriever/examples/inprocess_pipeline.py index e5b9ad117..b4bdb34ef 100644 --- a/nemo_retriever/src/nemo_retriever/examples/inprocess_pipeline.py +++ b/nemo_retriever/src/nemo_retriever/examples/inprocess_pipeline.py @@ -150,6 +150,11 @@ def main( "--graphic-elements-invoke-url", help="Optional remote endpoint URL for graphic-elements model inference.", ), + hybrid: bool = typer.Option( + False, + "--hybrid/--no-hybrid", + help="Enable LanceDB hybrid mode (dense + FTS text).", + ), text_chunk: bool = typer.Option( False, "--text-chunk", @@ -285,6 +290,7 @@ def main( "table_name": LANCEDB_TABLE, "overwrite": True, "create_index": True, + "hybrid": hybrid, } ) ) @@ -330,6 +336,7 @@ def main( embedding_http_endpoint=embed_invoke_url, top_k=10, ks=(1, 5, 10), + hybrid=hybrid, ) _df_query, _gold, _raw_hits, _retrieved_keys, metrics = retrieve_and_score(query_csv=query_csv, cfg=cfg) diff --git a/nemo_retriever/src/nemo_retriever/ingest-config.yaml b/nemo_retriever/src/nemo_retriever/ingest-config.yaml index 1d8acd6c1..25f10997c 100644 --- a/nemo_retriever/src/nemo_retriever/ingest-config.yaml +++ b/nemo_retriever/src/nemo_retriever/ingest-config.yaml @@ -42,6 +42,13 @@ pdf: http: null model_name: null + # PDF rendering mode for page-element detection images: + # full_dpi – render at `dpi` (default 300), then resize_pad down to 1024×1024. + # Higher source resolution, but bilinear downscale may differ from NIM. + # fit_to_model – render directly at the scale that fits within 1024×1024 (~93 DPI + # for US Letter), matching the nv-ingest/NIM container rasterization. + render_mode: fit_to_model + extract: text: true # Text depth: page | document diff --git a/nemo_retriever/src/nemo_retriever/ingest_modes/batch.py b/nemo_retriever/src/nemo_retriever/ingest_modes/batch.py index f7a909f29..dc2e14ea7 100644 --- a/nemo_retriever/src/nemo_retriever/ingest_modes/batch.py +++ b/nemo_retriever/src/nemo_retriever/ingest_modes/batch.py @@ -338,6 +338,7 @@ def extract(self, params: ExtractParams | None = None, **kwargs: Any) -> "BatchI and not resolved.api_key ): resolved = resolved.model_copy(update={"api_key": resolve_remote_api_key()}) + kwargs = { **resolved.model_dump(mode="python", exclude={"remote_retry", "batch_tuning"}, exclude_none=True), **resolved.remote_retry.model_dump(mode="python", exclude_none=True), @@ -357,10 +358,9 @@ def _endpoint_count(raw: Any) -> int: # 200 DPI is sufficient for both detection and OCR. YOLOX resizes to # 1024x1024 internally, and NemotronOCR also resizes crops to 1024x1024, - # so resolution above ~1200px per side is wasted. 200 DPI (Letter = - # 1700x2200) gives enough detail while reducing extraction time and - # memory usage by ~30-40% vs 300 DPI. - kwargs.setdefault("dpi", 200) + # nv-ingest NIM uses 300 DPI for page-element detection; match that + # default here so local-model recall matches the container path. + kwargs.setdefault("dpi", 300) kwargs.setdefault("image_format", "jpeg") kwargs.setdefault("jpeg_quality", 100) self._pipeline_type = "pdf" @@ -680,6 +680,7 @@ def extract_image_files(self, params: ExtractParams | None = None, **kwargs: Any and not resolved.api_key ): resolved = resolved.model_copy(update={"api_key": resolve_remote_api_key()}) + kwargs = { **resolved.model_dump(mode="python", exclude={"remote_retry", "batch_tuning"}, exclude_none=True), **resolved.remote_retry.model_dump(mode="python", exclude_none=True), @@ -850,6 +851,7 @@ def embed( resolved = _coerce_params(params, EmbedParams, kwargs) if any((resolved.embedding_endpoint, resolved.embed_invoke_url)) and not resolved.api_key: resolved = resolved.model_copy(update={"api_key": resolve_remote_api_key()}) + kwargs = build_embed_kwargs(resolved, include_batch_tuning=True) # Remaining kwargs are forwarded to the actor constructor. diff --git a/nemo_retriever/src/nemo_retriever/ingest_modes/fused.py b/nemo_retriever/src/nemo_retriever/ingest_modes/fused.py index 6df62b656..7fd35373a 100644 --- a/nemo_retriever/src/nemo_retriever/ingest_modes/fused.py +++ b/nemo_retriever/src/nemo_retriever/ingest_modes/fused.py @@ -200,7 +200,7 @@ def extract(self, params: ExtractParams | None = None, **kwargs: Any) -> "FusedI pdf_extract_workers = int(kwargs.pop("pdf_extract_workers", max(1, self._num_cpus // 2))) kwargs.setdefault("extract_page_as_image", True) - kwargs.setdefault("dpi", 200) + kwargs.setdefault("dpi", 300) self._tasks.append(("extract", dict(kwargs))) self._fused_extract_flags = { diff --git a/nemo_retriever/src/nemo_retriever/model/local/nemotron_page_elements_v3.py b/nemo_retriever/src/nemo_retriever/model/local/nemotron_page_elements_v3.py index 9e2cd1074..21c9077da 100644 --- a/nemo_retriever/src/nemo_retriever/model/local/nemotron_page_elements_v3.py +++ b/nemo_retriever/src/nemo_retriever/model/local/nemotron_page_elements_v3.py @@ -67,6 +67,8 @@ def preprocess(self, tensor: Union[torch.Tensor, np.ndarray]) -> torch.Tensor: raise TypeError(f"resize_pad returned non-tensor: {type(y)!r}") if y.ndim != 3: raise ValueError(f"Expected CHW from resize_pad, got {tuple(y.shape)}") + # Match NIM preprocessing: quantize to uint8 after interpolation + y = torch.clamp(y, 0, 255).to(torch.uint8).float() return y.unsqueeze(0) outs: List[torch.Tensor] = [] @@ -74,6 +76,8 @@ def preprocess(self, tensor: Union[torch.Tensor, np.ndarray]) -> torch.Tensor: y = resize_pad_page_elements(x[i], self.input_shape) if not isinstance(y, torch.Tensor) or y.ndim != 3: raise ValueError(f"resize_pad produced unexpected output for batch item {i}: {type(y)!r}") + # Match NIM preprocessing: quantize to uint8 after interpolation + y = torch.clamp(y, 0, 255).to(torch.uint8).float() outs.append(y) return torch.stack(outs, dim=0) @@ -83,6 +87,8 @@ def preprocess(self, tensor: Union[torch.Tensor, np.ndarray]) -> torch.Tensor: raise TypeError(f"resize_pad returned non-tensor: {type(y)!r}") if y.ndim != 3: raise ValueError(f"Expected CHW from resize_pad, got {tuple(y.shape)}") + # Match NIM preprocessing: quantize to uint8 after interpolation + y = torch.clamp(y, 0, 255).to(torch.uint8).float() return y.unsqueeze(0) raise ValueError(f"Expected CHW or BCHW tensor, got shape {tuple(x.shape)}") @@ -133,8 +139,13 @@ def postprocess(self, preds: Union[Dict[str, torch.Tensor], Sequence[Dict[str, t # may pass a *list* of per-image preds for batched inference, so handle both cases # and always return torch tensors (or lists of torch tensors). + # Use a zero threshold so all NMS survivors reach WBF before per-class + # filtering. The real per-class gate is _apply_final_score_filter (after WBF), + # matching the NIM pipeline ordering. + passthrough_thresholds = {k: 0.0 for k in self._model.thresholds_per_class} + def _one(p: Dict[str, torch.Tensor]) -> Tuple[torch.Tensor, torch.Tensor, torch.Tensor]: - b_np, l_np, s_np = postprocess_preds_page_element(p, self._model.thresholds_per_class, self._model.labels) + b_np, l_np, s_np = postprocess_preds_page_element(p, passthrough_thresholds, self._model.labels) b = torch.as_tensor(b_np, dtype=torch.float32) l = torch.as_tensor(l_np, dtype=torch.int64) # noqa: E741 s = torch.as_tensor(s_np, dtype=torch.float32) @@ -212,7 +223,7 @@ def output(self) -> Any: "labels": "List[str] - class names", "scores": "np.ndarray[N] - confidence scores", }, - "classes": ["table", "chart", "infographic", "title", "text", "header_footer"], + "classes": ["table", "chart", "title", "infographic", "text", "header_footer"], "post_processing": {"conf_thresh": 0.01, "iou_thresh": 0.5}, } diff --git a/nemo_retriever/src/nemo_retriever/ocr/ocr.py b/nemo_retriever/src/nemo_retriever/ocr/ocr.py index 8ef24ebfe..34ae7258b 100644 --- a/nemo_retriever/src/nemo_retriever/ocr/ocr.py +++ b/nemo_retriever/src/nemo_retriever/ocr/ocr.py @@ -337,16 +337,29 @@ def _parse_ocr_result(preds: Any) -> List[Dict[str, Any]]: def _blocks_to_text(blocks: List[Dict[str, Any]]) -> str: - """Sort text blocks by reading order (y then x) and join with newlines.""" + """Sort text blocks by reading order (y then x) and join with whitespace.""" blocks.sort(key=lambda b: (b.get("sort_y", 0.0), b.get("sort_x", 0.0))) - return "\n".join(b["text"] for b in blocks if b.get("text")) + return " ".join(b["text"] for b in blocks if b.get("text")) -def _blocks_to_pseudo_markdown(blocks: List[Dict[str, Any]]) -> str: +def _blocks_to_pseudo_markdown( + blocks: List[Dict[str, Any]], + crop_hw: Tuple[int, int] = (0, 0), +) -> str: """Convert OCR text blocks into pseudo-markdown table format. - Uses DBSCAN clustering on y-coordinates to identify rows, then + Uses DBSCAN clustering on pixel y-coordinates to identify rows, then sorts within each row by x-coordinate and joins with pipe separators. + + Parameters + ---------- + blocks : list of dict + OCR text blocks with ``sort_y`` (normalised [0,1]) and ``sort_x``. + crop_hw : (height, width) + Pixel dimensions of the crop image. When provided the normalised + ``sort_y`` values are scaled to pixels and clustered with + ``eps=10`` (matching nv-ingest behaviour). Falls back to the old + normalised-space heuristic when the height is unavailable. """ if not blocks: return "" @@ -358,19 +371,27 @@ def _blocks_to_pseudo_markdown(blocks: List[Dict[str, Any]]) -> str: from sklearn.cluster import DBSCAN df = pd.DataFrame(valid) + df = df.sort_values("sort_y") - # Normalize y-coordinates to [0,1] for scale-invariant clustering. y_vals = df["sort_y"].values - y_range = y_vals.max() - y_vals.min() - if y_range > 0: - y_norm = (y_vals - y_vals.min()) / y_range - eps = 0.03 # ~3% of bbox height ≈ one text line + crop_h = crop_hw[0] if crop_hw else 0 + + if crop_h > 0: + # Pixel-space clustering (matches nv-ingest eps=10). + y_pixels = (y_vals * crop_h).astype(int) + eps = 10 else: - y_norm = y_vals - eps = 0.1 + # Fallback: normalise to [0,1] when pixel dims are unknown. + y_range = y_vals.max() - y_vals.min() + if y_range > 0: + y_pixels = (y_vals - y_vals.min()) / y_range + eps = 0.03 + else: + y_pixels = y_vals + eps = 0.1 dbscan = DBSCAN(eps=eps, min_samples=1) - dbscan.fit(y_norm.reshape(-1, 1)) + dbscan.fit(y_pixels.reshape(-1, 1)) df["cluster"] = dbscan.labels_ df = df.sort_values(["cluster", "sort_x"]) @@ -574,7 +595,15 @@ def ocr_page_elements( blocks = _parse_ocr_result(preds) if label_name == "table": - text = _blocks_to_pseudo_markdown(blocks) or _blocks_to_text(blocks) + crop_hw_table: Tuple[int, int] = (0, 0) + try: + _raw = base64.b64decode(crop_b64s[i]) + with Image.open(io.BytesIO(_raw)) as _cim: + _cw, _ch = _cim.size + crop_hw_table = (_ch, _cw) + except Exception: + pass + text = _blocks_to_pseudo_markdown(blocks, crop_hw=crop_hw_table) or _blocks_to_text(blocks) else: text = _blocks_to_text(blocks) entry = {"bbox_xyxy_norm": bbox, "text": text} @@ -615,7 +644,7 @@ def _append_local_result( return blocks = _parse_ocr_result(preds) if label_name == "table": - text = _blocks_to_pseudo_markdown(blocks) + text = _blocks_to_pseudo_markdown(blocks, crop_hw=crop_hw) if not text: text = _blocks_to_text(blocks) else: diff --git a/nemo_retriever/src/nemo_retriever/page_elements/page_elements.py b/nemo_retriever/src/nemo_retriever/page_elements/page_elements.py index fc9052ddf..09a3179f9 100644 --- a/nemo_retriever/src/nemo_retriever/page_elements/page_elements.py +++ b/nemo_retriever/src/nemo_retriever/page_elements/page_elements.py @@ -34,10 +34,12 @@ from nv_ingest_api.internal.primitives.nim.model_interface.yolox import ( postprocess_page_elements_v3, YOLOX_PAGE_V3_CLASS_LABELS, + YOLOX_PAGE_V3_FINAL_SCORE, ) except ImportError: postprocess_page_elements_v3 = None # type: ignore[assignment,misc] YOLOX_PAGE_V3_CLASS_LABELS = None # type: ignore[assignment] + YOLOX_PAGE_V3_FINAL_SCORE = {} # type: ignore[assignment] from nemo_retriever.nim.nim import invoke_page_elements_batches @@ -123,6 +125,10 @@ def _decode_b64_image_to_np_array(image_b64: str) -> Tuple["np.array", Tuple[int im = im0.convert("RGB") w, h = im.size arr = np.array(im) + # The NIM container receives BGR images (PNG encoded from BGR numpy + # arrays) and decodes the raw channels as-is, so the model effectively + # runs on BGR input. Match that here by reversing the channel order. + arr = arr[:, :, ::-1].copy() return arr, (int(h), int(w)) @@ -339,6 +345,25 @@ def _bounding_boxes_to_detections( return dets +def _apply_final_score_filter( + dets: List[Dict[str, Any]], +) -> List[Dict[str, Any]]: + """Filter detections by per-class final score thresholds (YOLOX_PAGE_V3_FINAL_SCORE). + + This should be applied **after** WBF post-processing to match the NIM pipeline ordering. + Maps retriever label "text" to API label "paragraph" for threshold lookup. + """ + if not YOLOX_PAGE_V3_FINAL_SCORE or not dets: + return dets + filtered: List[Dict[str, Any]] = [] + for d in dets: + api_name = _RETRIEVER_TO_API.get(d["label_name"], d["label_name"]) + threshold = YOLOX_PAGE_V3_FINAL_SCORE.get(api_name, 0.0) + if d.get("score") is not None and d["score"] >= threshold: + filtered.append(d) + return filtered + + def _apply_page_elements_v3_postprocess( dets: List[Dict[str, Any]], ) -> List[Dict[str, Any]]: @@ -495,7 +520,11 @@ def detect_page_elements_v3( if model is not None and hasattr(model, "thresholds_per_class"): thresholds_per_class = getattr(model, "thresholds_per_class") else: - thresholds_per_class = [0.0 for _ in label_names] + # Use the same per-class thresholds as the yolox pipeline. + # label_names uses "text" where yolox uses "paragraph"; _RETRIEVER_TO_API maps between them. + thresholds_per_class = [ + YOLOX_PAGE_V3_FINAL_SCORE.get(_RETRIEVER_TO_API.get(name, name), 0.0) for name in label_names + ] for _, row in pages_df.iterrows(): try: @@ -671,6 +700,7 @@ def detect_page_elements_v3( labels_list.append(torch.as_tensor(l_np, dtype=torch.int64)) scores_list.append(torch.as_tensor(s_np, dtype=torch.float32)) boxes, labels, scores = boxes_list, labels_list, scores_list + per_image_dets = _postprocess_to_per_image_detections( boxes=boxes, labels=labels, @@ -678,8 +708,10 @@ def detect_page_elements_v3( batch_size=len(pre_list), label_names=label_names, ) - # Apply v3 postprocessing (box fusion, title matching, expansion, overlap removal) + # Apply v3 postprocessing (box fusion via WBF at iou=0.01, title matching, expansion, overlap removal) per_image_dets = [_apply_page_elements_v3_postprocess(dets) for dets in per_image_dets] + # Apply per-class final score filtering AFTER WBF (matches NIM pipeline ordering) + per_image_dets = [_apply_final_score_filter(dets) for dets in per_image_dets] for local_i, row_i in enumerate(chunk_idx): dets = per_image_dets[local_i] if local_i < len(per_image_dets) else [] row_payloads[row_i] = { diff --git a/nemo_retriever/src/nemo_retriever/params/models.py b/nemo_retriever/src/nemo_retriever/params/models.py index 66e925162..1f81e38e0 100644 --- a/nemo_retriever/src/nemo_retriever/params/models.py +++ b/nemo_retriever/src/nemo_retriever/params/models.py @@ -167,6 +167,7 @@ class ExtractParams(_ParamsModel): dpi: int = 200 image_format: str = "jpeg" jpeg_quality: int = 100 + render_mode: Literal["full_dpi", "fit_to_model"] = "fit_to_model" inference_batch_size: int = 8 ocr_model_dir: Optional[str] = None diff --git a/nemo_retriever/src/nemo_retriever/pdf/extract.py b/nemo_retriever/src/nemo_retriever/pdf/extract.py index af2a92a8c..992c18ebe 100644 --- a/nemo_retriever/src/nemo_retriever/pdf/extract.py +++ b/nemo_retriever/src/nemo_retriever/pdf/extract.py @@ -6,7 +6,7 @@ from io import BytesIO from dataclasses import dataclass -from typing import Any, Dict, List, Optional +from typing import Any, Dict, List, Literal, Optional, Tuple import base64 import traceback @@ -33,6 +33,37 @@ except Exception: # pragma: no cover np = None # type: ignore[assignment] +# Default model input size used by nv-ingest for page-element detection. +_MODEL_INPUT_SIZE: Tuple[int, int] = (1024, 1024) + +# Allowed render-mode values. +RenderMode = Literal["full_dpi", "fit_to_model"] + + +def _compute_fit_to_model_scale( + page: Any, + target_wh: Tuple[int, int] = _MODEL_INPUT_SIZE, + max_dpi: int = 300, +) -> float: + """Compute a pdfium render scale that fits the page within *target_wh* pixels. + + This mirrors the logic in ``nv_ingest_api.util.pdf.pdfium._compute_render_scale_to_fit`` + combined with the ``min(base_scale, fit_scale)`` cap applied in + ``pdfium_pages_to_numpy`` when ``scale_tuple`` is provided. + + For a US-Letter page (612×792 pt) fitting into 1024×1024 the result is + ``min(300/72, min(1024/612, 1024/792)) ≈ 1.293`` → ~93 effective DPI. + """ + target_w, target_h = target_wh + page_w = float(page.get_width()) + page_h = float(page.get_height()) + if page_w <= 0 or page_h <= 0 or target_w <= 0 or target_h <= 0: + return max(float(max_dpi) / 72.0, 0.01) + + fit_scale = max(min(target_w / page_w, target_h / page_h), 1e-3) + base_scale = max(float(max_dpi) / 72.0, 0.01) + return min(base_scale, fit_scale) + def _render_page_to_base64( page: Any, @@ -40,17 +71,28 @@ def _render_page_to_base64( dpi: int = 200, image_format: str = "jpeg", jpeg_quality: int = 100, + render_mode: RenderMode = "fit_to_model", ) -> Dict[str, Any]: - """ - Render a page at full DPI and encode as JPEG or PNG. + """Render a page and encode as JPEG or PNG. + + Parameters + ---------- + render_mode: + ``"full_dpi"`` – render at *dpi* (default 300 → 2550×3300 for US Letter). + ``"fit_to_model"`` – render at the nv-ingest fit-to-1024 scale (~93 DPI + for US Letter) so the raster is already close to the model's input size, + avoiding a large bilinear down-scale in ``resize_pad``. Returns dict with: - image_b64: str - encoding: str ("jpeg" or "png") - orig_shape_hw: tuple[int,int] (H,W) of the rendered raster """ - base_scale = max(float(dpi) / 72.0, 0.01) - bitmap = page.render(scale=base_scale) + if render_mode == "fit_to_model": + render_scale = _compute_fit_to_model_scale(page, _MODEL_INPUT_SIZE, max_dpi=dpi) + else: + render_scale = max(float(dpi) / 72.0, 0.01) + bitmap = page.render(scale=render_scale) arr = convert_bitmap_to_corrected_numpy(bitmap) @@ -144,6 +186,7 @@ def pdf_extraction( jpeg_quality: int = 100, text_extraction_method: str = "pdfium_hybrid", text_depth: str = "page", + render_mode: RenderMode = "fit_to_model", **kwargs: Any, ) -> Any: """ @@ -250,6 +293,7 @@ def pdf_extraction( dpi=dpi, image_format=image_format, jpeg_quality=jpeg_quality, + render_mode=render_mode, ) page_record: Dict[str, Any] = { diff --git a/nemo_retriever/src/nemo_retriever/pdf/stage.py b/nemo_retriever/src/nemo_retriever/pdf/stage.py index d34313697..be39cb332 100644 --- a/nemo_retriever/src/nemo_retriever/pdf/stage.py +++ b/nemo_retriever/src/nemo_retriever/pdf/stage.py @@ -145,6 +145,7 @@ def _normalize_page_elements_config(raw: Dict[str, Any]) -> Dict[str, Any]: outputs, "json_output_dir", "json-output-dir" ) out["limit"] = _cfg_get(raw, "limit") + out["render_mode"] = _cfg_get(raw, "render_mode") # Drop Nones so "not specified" stays not specified. return {k: v for k, v in out.items() if v is not None} @@ -522,6 +523,14 @@ def render_page_elements( "--text-depth", help="Text depth for extracted text primitives: 'page' or 'document'.", ), + render_mode: str = typer.Option( + "fit_to_model", + "--render-mode", + help=( + "Page rendering mode: 'full_dpi' (render at DPI then resize_pad) or " + "'fit_to_model' (render at nv-ingest fit-to-1024 scale, ~93 DPI for US Letter)." + ), + ), write_json_outputs: bool = typer.Option( True, "--write-json-outputs/--no-write-json-outputs", @@ -583,6 +592,9 @@ def render_page_elements( if not _argv_has_any(["--text-depth"]): text_depth = str(cfg_raw.get("text_depth", text_depth)) + if not _argv_has_any(["--render-mode"]): + render_mode = str(cfg_raw.get("render_mode", render_mode)) + if not _argv_has_any(["--write-json-outputs", "--no-write-json-outputs"]): write_json_outputs = bool(cfg_raw.get("write_json_outputs", write_json_outputs)) if not _argv_has_any(["--json-output-dir"]): diff --git a/nemo_retriever/src/nemo_retriever/table/table_detection.py b/nemo_retriever/src/nemo_retriever/table/table_detection.py index bfb82a187..841526431 100644 --- a/nemo_retriever/src/nemo_retriever/table/table_detection.py +++ b/nemo_retriever/src/nemo_retriever/table/table_detection.py @@ -17,6 +17,13 @@ except Exception: # pragma: no cover torch = None # type: ignore[assignment] +try: + from nv_ingest_api.internal.primitives.nim.model_interface.yolox import ( + YOLOX_TABLE_MIN_SCORE, + ) +except ImportError: + YOLOX_TABLE_MIN_SCORE = 0.1 # type: ignore[assignment] + _DEFAULT_TABLE_STRUCTURE_LABELS: List[str] = ["cell", "row", "column"] @@ -351,7 +358,7 @@ def table_structure_ocr_page_elements( if not parsed: pred_item = _extract_remote_pred_item(resp) parsed = _prediction_to_detections(pred_item, label_names=label_names) - structure_results.append(parsed) + structure_results.append([d for d in parsed if (d.get("score") or 0.0) >= YOLOX_TABLE_MIN_SCORE]) else: # Local batched inference. for _, _, crop_array in crops: @@ -366,7 +373,7 @@ def table_structure_ocr_page_elements( pre = pre.unsqueeze(0) pred = table_structure_model.invoke(pre, (h, w)) dets = _prediction_to_detections(pred, label_names=label_names) - structure_results.append(dets) + structure_results.append([d for d in dets if (d.get("score") or 0.0) >= YOLOX_TABLE_MIN_SCORE]) # --- Pass 3: Run OCR on all crops --- ocr_results: List[Any] = [] diff --git a/nemo_retriever/tests/test_pdf_render_scale.py b/nemo_retriever/tests/test_pdf_render_scale.py index 5c2bba5ec..6344c5d3b 100644 --- a/nemo_retriever/tests/test_pdf_render_scale.py +++ b/nemo_retriever/tests/test_pdf_render_scale.py @@ -54,7 +54,7 @@ def test_renders_at_full_dpi(self): dpi = 200 base_scale = dpi / 72.0 - _extract._render_page_to_base64(page, dpi=dpi) + _extract._render_page_to_base64(page, dpi=dpi, render_mode="full_dpi") render_call = page.render.call_args actual_scale = render_call.kwargs.get("scale", render_call.args[0] if render_call.args else None) From f55a733082b1f49b4c45ad66c178da0a8a3bedc8 Mon Sep 17 00:00:00 2001 From: Jeremy Dyer Date: Fri, 13 Mar 2026 10:51:56 -0400 Subject: [PATCH 22/94] Remove get_hf_revision logic from code not inside the nemo_retriever directory --- .../internal/transform/split_text.py | 8 +----- docker/scripts/post_build_triggers.py | 26 +------------------ 2 files changed, 2 insertions(+), 32 deletions(-) diff --git a/api/src/nv_ingest_api/internal/transform/split_text.py b/api/src/nv_ingest_api/internal/transform/split_text.py index 9b88ec5ce..9d099ec7f 100644 --- a/api/src/nv_ingest_api/internal/transform/split_text.py +++ b/api/src/nv_ingest_api/internal/transform/split_text.py @@ -56,14 +56,8 @@ def _get_tokenizer( if cache_key in _tokenizer_cache: return _tokenizer_cache[cache_key] - from nemo_retriever.utils.hf_model_registry import get_hf_revision - logger.info("Loading and caching tokenizer: %s", tokenizer_identifier) - tokenizer = AutoTokenizer.from_pretrained( - tokenizer_identifier, - revision=get_hf_revision(tokenizer_identifier), - token=token, - ) + tokenizer = AutoTokenizer.from_pretrained(tokenizer_identifier, token=token) _tokenizer_cache[cache_key] = tokenizer return tokenizer diff --git a/docker/scripts/post_build_triggers.py b/docker/scripts/post_build_triggers.py index 1488e6339..8eb26f301 100644 --- a/docker/scripts/post_build_triggers.py +++ b/docker/scripts/post_build_triggers.py @@ -4,30 +4,6 @@ from transformers import AutoTokenizer -try: - from nemo_retriever.utils.hf_model_registry import get_hf_revision -except ModuleNotFoundError: - # Fallback for Docker build stages where nemo_retriever isn't installed yet. - _REVISIONS = { - "meta-llama/Llama-3.2-1B": "4e20de362430cd3b72f300e6b0f18e50e7166e08", - "intfloat/e5-large-unsupervised": "15af9288f69a6291f37bfb89b47e71abc747b206", - } - - def get_hf_revision(model_id, *, strict=True): # type: ignore[misc] - revision = _REVISIONS.get(model_id) - if revision is not None: - return revision - msg = ( - f"No pinned HuggingFace revision for model '{model_id}'. " - "Add an entry to _REVISIONS in post_build_triggers.py (and " - "HF_MODEL_REVISIONS in hf_model_registry.py) to pin it." - ) - if strict: - raise ValueError(msg) - print(f"WARNING: {msg} Falling back to the default (main) branch.") - return None - - MAX_RETRIES = 5 @@ -36,7 +12,7 @@ def download_tokenizer(model_name, save_path, token=None): for attempt in range(MAX_RETRIES): try: - tokenizer = AutoTokenizer.from_pretrained(model_name, revision=get_hf_revision(model_name), token=token) + tokenizer = AutoTokenizer.from_pretrained(model_name, token=token) tokenizer.save_pretrained(save_path) return except Exception as e: From 83a936c29d0c92e291a9ec453beba49d57204866 Mon Sep 17 00:00:00 2001 From: Kurt Heiss Date: Fri, 13 Mar 2026 11:08:59 -0700 Subject: [PATCH 23/94] Added air gap instructions to helm file (#1616) --- docs/docs/extraction/helm.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/docs/extraction/helm.md b/docs/docs/extraction/helm.md index f5891a772..ae6af0066 100644 --- a/docs/docs/extraction/helm.md +++ b/docs/docs/extraction/helm.md @@ -4,3 +4,7 @@ To deploy [NeMo Retriever Library](overview.md) by using Helm, refer to [NeMo Retriever Helm Charts](https://github.com/NVIDIA/NeMo-Retriever/blob/release/26.03.0-RC2/helm/README.md). + +!!! note "Air-gapped environments" + + For deploying in an air-gapped environment, refer to the [NVIDIA NIM Operator documentation on Air-Gapped Environments](https://docs.nvidia.com/nim-operator/latest/air-gap.html), which explains how to deploy NIMs when your cluster has no internet or NGC registry access. From 4d9ce5fb69a2e8867f8eccf0cbccccffb589323b Mon Sep 17 00:00:00 2001 From: Julio Perez <37191411+jperez999@users.noreply.github.com> Date: Fri, 13 Mar 2026 15:49:37 -0400 Subject: [PATCH 24/94] fix for network call reranking (#1619) --- .../src/nemo_retriever/rerank/rerank.py | 22 ++++++------ .../src/nemo_retriever/retriever.py | 2 +- .../tests/test_nemotron_rerank_v2.py | 35 ++++++------------- 3 files changed, 22 insertions(+), 37 deletions(-) diff --git a/nemo_retriever/src/nemo_retriever/rerank/rerank.py b/nemo_retriever/src/nemo_retriever/rerank/rerank.py index 189b56a89..6d7bd7a6f 100644 --- a/nemo_retriever/src/nemo_retriever/rerank/rerank.py +++ b/nemo_retriever/src/nemo_retriever/rerank/rerank.py @@ -73,7 +73,7 @@ def _rerank_via_endpoint( endpoint: str, model_name: str = _DEFAULT_MODEL, api_key: str = "", - top_n: Optional[int] = None, + truncate: str = "END", ) -> List[float]: """ Call a vLLM / NIM ``/rerank`` REST endpoint and return per-document scores. @@ -92,18 +92,16 @@ def _rerank_via_endpoint( """ import requests - url = endpoint.rstrip("/") + "/rerank" + cleaned_endpoint = endpoint.rstrip("/") headers: Dict[str, str] = {"Content-Type": "application/json"} + if not cleaned_endpoint.endswith("/reranking"): + cleaned_endpoint = endpoint.rstrip("/") + "/v1/ranking" + url = cleaned_endpoint + headers = {"accept": "application/json", "Content-Type": "application/json"} if api_key: headers["Authorization"] = f"Bearer {api_key}" - - payload: Dict[str, Any] = { - "model": model_name, - "query": query, - "documents": documents, - } - if top_n is not None: - payload["top_n"] = top_n + texts = [{"text": d} for d in documents] + payload = {"model": model_name, "query": {"text": query}, "passages": texts, "truncate": truncate} response = requests.post(url, json=payload, headers=headers, timeout=120) response.raise_for_status() @@ -111,9 +109,9 @@ def _rerank_via_endpoint( # Build score list aligned with input document order. scores = [float("-inf")] * len(documents) - for item in data.get("results", []): + for item in data.get("rankings", []): idx = item.get("index") - score = item.get("relevance_score") + score = item.get("logit") if idx is not None and score is not None: scores[idx] = float(score) return scores diff --git a/nemo_retriever/src/nemo_retriever/retriever.py b/nemo_retriever/src/nemo_retriever/retriever.py index aab11b519..5d3458ce8 100644 --- a/nemo_retriever/src/nemo_retriever/retriever.py +++ b/nemo_retriever/src/nemo_retriever/retriever.py @@ -215,7 +215,7 @@ def _rerank_results( hits, model=model, invoke_url=reranker_endpoint, - model_name=str(self.reranker), + model_name=str(self.reranker_model_name), api_key=(self.reranker_api_key or "").strip(), max_length=int(self.reranker_max_length), batch_size=int(self.reranker_batch_size), diff --git a/nemo_retriever/tests/test_nemotron_rerank_v2.py b/nemo_retriever/tests/test_nemotron_rerank_v2.py index 4c6761a5b..6ba3c6fa9 100644 --- a/nemo_retriever/tests/test_nemotron_rerank_v2.py +++ b/nemo_retriever/tests/test_nemotron_rerank_v2.py @@ -407,9 +407,9 @@ def test_posts_to_rerank_url(self): mock_resp = MagicMock() mock_resp.json.return_value = { - "results": [ - {"index": 0, "relevance_score": 0.9}, - {"index": 1, "relevance_score": 0.3}, + "rankings": [ + {"index": 0, "logit": 0.9}, + {"index": 1, "logit": 0.3}, ] } mock_resp.raise_for_status = MagicMock() @@ -424,9 +424,9 @@ def test_posts_to_rerank_url(self): mock_post.assert_called_once() call_kwargs = mock_post.call_args - assert call_kwargs[0][0] == "http://localhost:8000/rerank" - assert call_kwargs[1]["json"]["query"] == "What is ML?" - assert len(call_kwargs[1]["json"]["documents"]) == 2 + assert call_kwargs[0][0] == "http://localhost:8000/v1/ranking" + assert call_kwargs[1]["json"]["query"] == {"text": "What is ML?"} + assert len(call_kwargs[1]["json"]["passages"]) == 2 assert scores == [0.9, 0.3] @@ -436,10 +436,10 @@ def test_scores_aligned_with_input_order(self): # Server returns results in reversed order mock_resp = MagicMock() mock_resp.json.return_value = { - "results": [ - {"index": 2, "relevance_score": 0.1}, - {"index": 0, "relevance_score": 0.8}, - {"index": 1, "relevance_score": 0.5}, + "rankings": [ + {"index": 2, "logit": 0.1}, + {"index": 0, "logit": 0.8}, + {"index": 1, "logit": 0.5}, ] } mock_resp.raise_for_status = MagicMock() @@ -484,20 +484,7 @@ def test_trailing_slash_on_endpoint_normalized(self): _rerank_via_endpoint("q", ["d"], endpoint="http://localhost:8000/") url = mock_post.call_args[0][0] - assert url == "http://localhost:8000/rerank" - - def test_top_n_sent_in_payload_when_specified(self): - from nemo_retriever.rerank.rerank import _rerank_via_endpoint - - mock_resp = MagicMock() - mock_resp.json.return_value = {"results": [{"index": 0, "relevance_score": 0.5}]} - mock_resp.raise_for_status = MagicMock() - - with patch("requests.post", return_value=mock_resp) as mock_post: - _rerank_via_endpoint("q", ["d"], endpoint="http://localhost:8000", top_n=5) - - payload = mock_post.call_args[1]["json"] - assert payload["top_n"] == 5 + assert url == "http://localhost:8000/v1/ranking" def test_top_n_not_in_payload_when_not_specified(self): from nemo_retriever.rerank.rerank import _rerank_via_endpoint From 0a60c1aa0f6e480fea62eda9e8e3a52b55a6b832 Mon Sep 17 00:00:00 2001 From: Jeremy Dyer Date: Fri, 13 Mar 2026 16:02:05 -0400 Subject: [PATCH 25/94] Release prep: Update versions to 26.3.0-RC4 (#1620) --- docker-compose.yaml | 2 +- docs/docs/extraction/helm.md | 2 +- docs/docs/extraction/quickstart-guide.md | 2 +- docs/docs/extraction/quickstart-library-mode.md | 2 +- helm/Chart.yaml | 2 +- helm/README.md | 8 ++++---- helm/README.md.gotmpl | 6 +++--- helm/values.yaml | 2 +- nemo_retriever/pyproject.toml | 6 +++--- src/nv_ingest/api/main.py | 2 +- tools/harness/pyproject.toml | 6 +++--- tools/harness/test_configs.yaml | 2 +- 12 files changed, 21 insertions(+), 21 deletions(-) diff --git a/docker-compose.yaml b/docker-compose.yaml index 6ad589efc..dc7dea85a 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -262,7 +262,7 @@ services: - audio nv-ingest-ms-runtime: - image: nvcr.io/nvidia/nemo-microservices/nv-ingest:26.03.0-RC2 + image: nvcr.io/nvidia/nemo-microservices/nv-ingest:26.3.0-RC4 shm_size: 40gb # Should be at minimum 30% of assigned memory per Ray documentation build: context: ${NV_INGEST_ROOT:-.} diff --git a/docs/docs/extraction/helm.md b/docs/docs/extraction/helm.md index ae6af0066..5e5c787cd 100644 --- a/docs/docs/extraction/helm.md +++ b/docs/docs/extraction/helm.md @@ -3,7 +3,7 @@ To deploy [NeMo Retriever Library](overview.md) by using Helm, -refer to [NeMo Retriever Helm Charts](https://github.com/NVIDIA/NeMo-Retriever/blob/release/26.03.0-RC2/helm/README.md). +refer to [NeMo Retriever Helm Charts](https://github.com/NVIDIA/NeMo-Retriever/blob/release/26.3.0-RC4/helm/README.md). !!! note "Air-gapped environments" diff --git a/docs/docs/extraction/quickstart-guide.md b/docs/docs/extraction/quickstart-guide.md index a996d4f21..111638f1e 100644 --- a/docs/docs/extraction/quickstart-guide.md +++ b/docs/docs/extraction/quickstart-guide.md @@ -84,7 +84,7 @@ h. Run the command `docker ps`. You should see output similar to the following. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES uv venv --python 3.12 nv-ingest-dev source nv-ingest-dev/bin/activate -uv pip install nv-ingest==26.03.0-RC2 nv-ingest-api==26.03.0-RC2 nv-ingest-client==26.03.0-RC2 +uv pip install nv-ingest==26.3.0-RC4 nv-ingest-api==26.3.0-RC4 nv-ingest-client==26.3.0-RC4 ``` !!! tip diff --git a/docs/docs/extraction/quickstart-library-mode.md b/docs/docs/extraction/quickstart-library-mode.md index b9e6ca371..2e5042f10 100644 --- a/docs/docs/extraction/quickstart-library-mode.md +++ b/docs/docs/extraction/quickstart-library-mode.md @@ -34,7 +34,7 @@ Use the following procedure to prepare your environment. ``` uv venv --python 3.12 nvingest && \ source nvingest/bin/activate && \ - uv pip install nemo-retriever==26.03.0-RC2 milvus-lite==2.4.12 + uv pip install nemo-retriever==26.3.0-RC4 milvus-lite==2.4.12 ``` !!! tip diff --git a/helm/Chart.yaml b/helm/Chart.yaml index 9891b9555..5b018b724 100644 --- a/helm/Chart.yaml +++ b/helm/Chart.yaml @@ -2,7 +2,7 @@ apiVersion: v2 name: nv-ingest description: NV-Ingest Microservice type: application -version: 26.03.0-RC2 +version: 26.3.0-RC4 maintainers: - name: NVIDIA Corporation url: https://www.nvidia.com/ diff --git a/helm/README.md b/helm/README.md index 3860dfce9..e1e43362e 100644 --- a/helm/README.md +++ b/helm/README.md @@ -45,7 +45,7 @@ To install or upgrade the Helm chart, run the following code. helm upgrade \ --install \ nv-ingest \ - https://helm.ngc.nvidia.com/nvidia/nemo-microservices/charts/nv-ingest-26.03.0-RC2.tgz \ + https://helm.ngc.nvidia.com/nvidia/nemo-microservices/charts/nv-ingest-26.3.0-RC4.tgz \ -n ${NAMESPACE} \ --username '$oauthtoken' \ --password "${NGC_API_KEY}" \ @@ -54,7 +54,7 @@ helm upgrade \ --set ngcApiSecret.create=true \ --set ngcApiSecret.password="${NGC_API_KEY}" \ --set image.repository="nvcr.io/nvidia/nemo-microservices/nv-ingest" \ - --set image.tag="26.03.0-RC2" + --set image.tag="26.3.0-RC4" ``` Optionally you can create your own versions of the `Secrets` if you do not want to use the creation via the helm chart. @@ -105,7 +105,7 @@ For more information, refer to [NV-Ingest-Client](https://github.com/NVIDIA/nv-i # Just to be cautious we remove any existing installation pip uninstall nv-ingest-client -pip install nv-ingest-client==26.03.0-RC2 +pip install nv-ingest-client==26.3.0-RC4 ``` #### Rest Endpoint Ingress @@ -347,7 +347,7 @@ You can also use NV-Ingest's Python client API to interact with the service runn | fullnameOverride | string | `""` | | | image.pullPolicy | string | `"IfNotPresent"` | | | image.repository | string | `"nvcr.io/nvidia/nemo-microservices/nv-ingest"` | | -| image.tag | string | `"26.03.0-RC2"` | | +| image.tag | string | `"26.3.0-RC4"` | | | imagePullSecrets[0].name | string | `"ngc-api"` | | | imagePullSecrets[1].name | string | `"ngc-secret"` | | | ingress.annotations | object | `{}` | | diff --git a/helm/README.md.gotmpl b/helm/README.md.gotmpl index b16dab04c..3686cd1fc 100644 --- a/helm/README.md.gotmpl +++ b/helm/README.md.gotmpl @@ -46,7 +46,7 @@ To install or upgrade the Helm chart, run the following code. helm upgrade \ --install \ nv-ingest \ - https://helm.ngc.nvidia.com/nvidia/nemo-microservices/charts/nv-ingest-26.03.0-RC2.tgz \ + https://helm.ngc.nvidia.com/nvidia/nemo-microservices/charts/nv-ingest-26.3.0-RC4.tgz \ -n ${NAMESPACE} \ --username '$oauthtoken' \ --password "${NGC_API_KEY}" \ @@ -55,7 +55,7 @@ helm upgrade \ --set ngcApiSecret.create=true \ --set ngcApiSecret.password="${NGC_API_KEY}" \ --set image.repository="nvcr.io/nvidia/nemo-microservices/nv-ingest" \ - --set image.tag="26.03.0-RC2" + --set image.tag="26.3.0-RC4" ``` Optionally you can create your own versions of the `Secrets` if you do not want to use the creation via the helm chart. @@ -107,7 +107,7 @@ For more information, refer to [NV-Ingest-Client](https://github.com/NVIDIA/nv-i # Just to be cautious we remove any existing installation pip uninstall nv-ingest-client -pip install nv-ingest-client==26.03.0-RC2 +pip install nv-ingest-client==26.3.0-RC4 ``` #### Rest Endpoint Ingress diff --git a/helm/values.yaml b/helm/values.yaml index 243c1e740..d0cdd9364 100644 --- a/helm/values.yaml +++ b/helm/values.yaml @@ -28,7 +28,7 @@ nameOverride: "" image: pullPolicy: IfNotPresent repository: "nvcr.io/nvidia/nemo-microservices/nv-ingest" - tag: "26.03.0-RC2" + tag: "26.3.0-RC4" ## @section Pod Configuration ## @param podAnnotations [object] Sets additional annotations on the main deployment pods diff --git a/nemo_retriever/pyproject.toml b/nemo_retriever/pyproject.toml index 17ccb9459..fc713c8ce 100644 --- a/nemo_retriever/pyproject.toml +++ b/nemo_retriever/pyproject.toml @@ -30,9 +30,9 @@ dependencies = [ "typer>=0.12.0", "pyyaml>=6.0", "lancedb", - "nv-ingest==26.03.0rc2", - "nv-ingest-api==26.03.0rc2", - "nv-ingest-client==26.03.0rc2", + "nv-ingest==26.3.0rc4", + "nv-ingest-api==26.3.0rc4", + "nv-ingest-client==26.3.0rc4", "fastapi>=0.114.0", "uvicorn[standard]>=0.30.0", "httpx>=0.27.0", diff --git a/src/nv_ingest/api/main.py b/src/nv_ingest/api/main.py index ae72b3fdf..a5a3f7cb3 100644 --- a/src/nv_ingest/api/main.py +++ b/src/nv_ingest/api/main.py @@ -23,7 +23,7 @@ app = FastAPI( title="NV-Ingest Microservice", description="Service for ingesting heterogenous datatypes", - version="26.03.0-RC2", + version="26.3.0-RC4", contact={ "name": "NVIDIA Corporation", "url": "https://nvidia.com", diff --git a/tools/harness/pyproject.toml b/tools/harness/pyproject.toml index c04a4638c..2e661b019 100644 --- a/tools/harness/pyproject.toml +++ b/tools/harness/pyproject.toml @@ -10,9 +10,9 @@ dependencies = [ "pyyaml>=6.0", "requests>=2.32.5", "pynvml>=11.5.0", - "nv-ingest==26.03.0rc2", - "nv-ingest-api==26.03.0rc2", - "nv-ingest-client==26.03.0rc2", + "nv-ingest==26.3.0rc4", + "nv-ingest-api==26.3.0rc4", + "nv-ingest-client==26.3.0rc4", "milvus-lite==2.4.12", "pypdfium2>=4.30.0,<5.0.0", "nemotron-page-elements-v3==3.0.1", diff --git a/tools/harness/test_configs.yaml b/tools/harness/test_configs.yaml index f2a214681..a9278ef62 100644 --- a/tools/harness/test_configs.yaml +++ b/tools/harness/test_configs.yaml @@ -28,7 +28,7 @@ active: kubectl_bin: microk8s kubectl # kubectl binary command (e.g., "kubectl", "microk8s kubectl") kubectl_sudo: null # Prepend sudo to kubectl commands (null = same as helm_sudo) chart: nemo-microservices/nv-ingest # Remote chart reference (set to null to use local chart from ./helm) - chart_version: 26.03.0-RC2 # Chart version (required for remote charts) + chart_version: 26.3.0-RC4 # Chart version (required for remote charts) release: nv-ingest namespace: nv-ingest values_file: .helm-env # Optional: path to values file From 86cda76b76b00bca5b419363c13119c538950371 Mon Sep 17 00:00:00 2001 From: Kurt Heiss Date: Fri, 13 Mar 2026 16:24:40 -0700 Subject: [PATCH 26/94] Updated RNs to show forthcoming changes (#1623) --- .../docs/extraction/releasenotes-nv-ingest.md | 62 +++---------------- 1 file changed, 10 insertions(+), 52 deletions(-) diff --git a/docs/docs/extraction/releasenotes-nv-ingest.md b/docs/docs/extraction/releasenotes-nv-ingest.md index d824af15b..56c4c71f3 100644 --- a/docs/docs/extraction/releasenotes-nv-ingest.md +++ b/docs/docs/extraction/releasenotes-nv-ingest.md @@ -6,62 +6,20 @@ This documentation contains the release notes for [NeMo Retriever Library](overv NVIDIA Ingest (nv-ingest) has been renamed to the NeMo Retriever Library. +## 26.03 Release Notes (in progress) +- NV-Ingest github repo renamed to NeMo-Retriever +- NeMo Retriever Extraction pipeline renamed to NeMo Retriever Library +- NeMo Retriever Library now support two deployment options: +- Load Hugging Face models locally on your GPU. +- Use locally deployed NeMo Retriever NIM endpoints for embedding and OCR. +- Note on Air-gapped support +- Added support for RTX4500 Pro Blackwell SKU +- Added support for llama-nemotron-embed-vl-v2 ? -## Release 26.01 (26.3.0-RC1) -The NeMo Retriever Library 26.01 release adds new hardware and software support, and other improvements. +NeMo Retriever Library currently does not support image captioning via VLM. It will be added in the next release. -To upgrade the Helm Charts for this version, refer to [NeMo Retriever Library Helm Charts](https://github.com/NVIDIA/NeMo-Retriever/blob/release/26.3.0-RC1/helm/README.md). - - -### Highlights - -This release contains the following key changes: - -- Added functional support for [H200 NVL](https://www.nvidia.com/en-us/data-center/h200/). For details, refer to [Support Matrix](support-matrix.md). -- All Helm deployments for Kubernetes now use [NVIDIA NIM Operator](https://docs.nvidia.com/nim-operator/latest/index.html). For details, refer to [NeMo Retriever Library Helm Charts](https://github.com/NVIDIA/NeMo-Retriever/blob/release/26.3.0-RC1/helm/README.md). -- Updated RIVA NIM to version 1.4.0. For details, refer to [Extract Speech](audio.md). -- Updated VLM NIM to [nemotron-nano-12b-v2-vl](https://build.nvidia.com/nvidia/nemotron-nano-12b-v2-vl/modelcard). For details, refer to [Extract Captions from Images](python-api-reference.md#extract-captions-from-images). -- Added VLM caption prompt customization parameters, including reasoning control. For details, refer to [Caption Images and Control Reasoning](python-api-reference.md#caption-images-and-control-reasoning). -- Added support for the [nemotron-parse](https://build.nvidia.com/nvidia/nemotron-parse/modelcard) model which replaces the [nemoretriever-parse](https://build.nvidia.com/nvidia/nemoretriever-parse/modelcard) model. For details, refer to [Advanced Visual Parsing](nemoretriever-parse.md). -- Support is now deprecated for [paddleocr](https://build.nvidia.com/baidu/paddleocr/modelcard). -- The `meta-llama/Llama-3.2-1B` tokenizer is now pre-downloaded so that you can run token-based splitting without making a network request. For details, refer to [Split Documents](chunking.md). -- For scanned PDFs, added specialized extraction strategies. For details, refer to [PDF Extraction Strategies](python-api-reference.md#pdf-extraction-strategies). -- Added support for [LanceDB](https://lancedb.com/). For details, refer to [Upload to a Custom Data Store](data-store.md). -- The V2 API is now available and is the default processing pipeline. The response format remains backwards-compatible. You can enable the v2 API by using `message_client_kwargs={"api_version": "v2"}`. For details, refer to [V2 API Guide](v2-api-guide.md). -- Large PDFs are now automatically split into chunks and processed in parallel, delivering faster ingestion for long documents. For details, refer to [PDF Pre-Splitting](v2-api-guide.md). -- Issues maintaining extraction quality while processing very large files are now resolved with the V2 API. For details, refer to [V2 API Guide](v2-api-guide.md). -- Updated the embedding task to support embedding on custom content fields like the results of summarization functions. For details, refer to [Use the Python API](python-api-reference.md). -- User-defined function summarization is now using `nemotron-mini-4b-instruct` which provides significant speed improvements. For details, refer to [User-defined Functions](user-defined-functions.md) and [NeMo Retriever Library UDF Examples](https://github.com/NVIDIA/NeMo-Retriever/blob/release/26.3.0-RC1/examples/udfs/README.md). -- In the `Ingestor.extract` method, the defaults for `extract_text` and `extract_images` are now set to `true` for consistency with `extract_tables` and `extract_charts`. For details, refer to [Use the Python API](python-api-reference.md). -- The `table-structure` profile is no longer available. The table-structure profile is now part of the default profile. For details, refer to [Profile Information](quickstart-guide.md#profile-information). -- New documentation [Why Throughput Is Dataset-Dependent](throughput-is-dataset-dependent.md). -- New documentation [Add User-defined Stages](user-defined-stages.md). -- New documentation [Add User-defined Functions](user-defined-functions.md). -- New documentation [Resource Scaling Modes](scaling-modes.md). -- New documentation [NimClient Usage](nimclient.md). -- New documentation [Use the API (V2)](v2-api-guide.md). - - - -### Fixed Known Issues - -The following are the known issues that are fixed in this version: - -- A10G support is restored. To use A10G hardware, use release 26.3.0-RC1 or later. For details, refer to [Support Matrix](support-matrix.md). -- L40S support is restored. To use L40S hardware, use release 26.3.0-RC1 or later. For details, refer to [Support Matrix](support-matrix.md). -- The page number field in the content metadata now starts at 1 instead of 0 so each page number is no longer off by one from what you would expect. For details, refer to [Content Metadata](content-metadata.md). -- Support for batches that include individual files greater than approximately 400MB is restored. This includes audio files and pdfs. - - - -## All Known Issues - -The following are the known issues for NeMo Retriever Library: - -- Advanced visual parsing is not supported on RTX Pro 6000, B200, or H200 NVL. For details, refer to [Advanced Visual Parsing](nemoretriever-parse.md) and [Support Matrix](support-matrix.md). -- The Page Elements NIM (`nemoretriever-page-elements-v3:1.7.0`) may intermittently fail during inference under high-concurrency workloads. This happens when Triton’s dynamic batching combines requests that exceed the model’s maximum batch size, a situation more commonly seen in multi-GPU setups or large ingestion runs. In these cases, extraction fails for the impacted documents. A correction is planned for `nemoretriever-page-elements-v3:1.7.1`. ## Release Notes for Previous Versions From e5e3b36f5a7a2c21ad02f0043e644252dc27b14b Mon Sep 17 00:00:00 2001 From: Kurt Heiss Date: Fri, 13 Mar 2026 16:41:32 -0700 Subject: [PATCH 27/94] update rns (#1624) --- docs/docs/extraction/releasenotes-nv-ingest.md | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/docs/docs/extraction/releasenotes-nv-ingest.md b/docs/docs/extraction/releasenotes-nv-ingest.md index 56c4c71f3..22aeac345 100644 --- a/docs/docs/extraction/releasenotes-nv-ingest.md +++ b/docs/docs/extraction/releasenotes-nv-ingest.md @@ -6,8 +6,16 @@ This documentation contains the release notes for [NeMo Retriever Library](overv NVIDIA Ingest (nv-ingest) has been renamed to the NeMo Retriever Library. + + ## 26.03 Release Notes (in progress) +The NeMo Retriever Library 26.03 release adds new hardware and software support, and other improvements. + +To upgrade the Helm Charts for this version, refer to [NeMo Retriever Library Helm Charts](https://github.com/NVIDIA/NeMo-Retriever/blob/release/26.3.0-RC1/helm/README.md). + +Updates and enhancements in the 26.03 release include the following: + - NV-Ingest github repo renamed to NeMo-Retriever - NeMo Retriever Extraction pipeline renamed to NeMo Retriever Library - NeMo Retriever Library now support two deployment options: @@ -20,8 +28,6 @@ This documentation contains the release notes for [NeMo Retriever Library](overv NeMo Retriever Library currently does not support image captioning via VLM. It will be added in the next release. - - ## Release Notes for Previous Versions | [26.1.1](https://docs.nvidia.com/nemo/retriever/26.1.1/extraction/releasenotes-nv-ingest/) From ce8133daf7efc25d07fb96888a49ef528dae3e91 Mon Sep 17 00:00:00 2001 From: Julio Perez <37191411+jperez999@users.noreply.github.com> Date: Sat, 14 Mar 2026 10:20:55 -0400 Subject: [PATCH 28/94] Fix score (#1627) --- nemo_retriever/src/nemo_retriever/recall/core.py | 6 ------ 1 file changed, 6 deletions(-) diff --git a/nemo_retriever/src/nemo_retriever/recall/core.py b/nemo_retriever/src/nemo_retriever/recall/core.py index 882e3722b..0f4fd4a2d 100644 --- a/nemo_retriever/src/nemo_retriever/recall/core.py +++ b/nemo_retriever/src/nemo_retriever/recall/core.py @@ -189,16 +189,10 @@ def _hits_to_keys(raw_hits: List[List[Dict[str, Any]]]) -> List[List[str]]: for hits in raw_hits: keys: List[str] = [] for h in hits: - page_number = h["page_number"] - source = h["source"] page_number = h["page_number"] source = h["source"] # Prefer explicit `pdf_page` column; fall back to derived form. # if res.get("page_number") is not None and source.get("source_id"): - if page_number is not None and source: - filename = Path(source).stem - keys.append(f"{filename}_{str(page_number)}") - # if res.get("page_number") is not None and source.get("source_id"): if page_number is not None and source: filename = Path(source).stem keys.append(f"{filename}_{str(page_number)}") From 8908e219171470bb7acbe74861ebea6bc5ed3652 Mon Sep 17 00:00:00 2001 From: Julio Perez <37191411+jperez999@users.noreply.github.com> Date: Sat, 14 Mar 2026 13:24:24 -0400 Subject: [PATCH 29/94] rm assert on rerank and readme (#1628) --- README.md | 465 ++++++++++++++++++ .../src/nemo_retriever/retriever.py | 3 - 2 files changed, 465 insertions(+), 3 deletions(-) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 000000000..f769225f8 --- /dev/null +++ b/README.md @@ -0,0 +1,465 @@ + + +**Important: The default branch is main, which tracks active development and may be ahead of the latest supported release.** + +For the latest stable release: + +Use the latest release/* branch (for example, release/26.1.2) from the branch dropdown. + +See the corresponding NeMo Retriever Library documentation at https://docs.nvidia.com/nemo/retriever/latest/extraction/overview/ + +# NeMo Retriever Library + +NeMo Retriever Library is a scalable, performance-oriented document content and metadata extraction microservice. It uses specialized NVIDIA NIM microservices +to find, contextualize, and extract text, tables, charts and infographics that you can use in downstream generative applications. + +> [!Note] +> NeMo Retriever extraction is also known as NVIDIA Ingest and nv-ingest. + +NeMo Retriever Library enables parallelization of splitting documents into pages where artifacts are classified (such as text, tables, charts, and infographics), extracted, and further contextualized through optical character recognition (OCR) into a well defined JSON schema. From there, NeMo Retriever Library can optionally manage computation of embeddings for the extracted content, and optionally manage storing into a vector database [Milvus](https://milvus.io/). + +> [!Note] +> Cached and Deplot are deprecated. Instead, NeMo Retriever extraction now uses the yolox-graphic-elements NIM. With this change, you should now be able to run NeMo Retriever Extraction on a single 24GB A10G or better GPU. If you want to use the old pipeline, with Cached and Deplot, use the [NeMo Retriever Extraction 24.12.1 release](https://github.com/NVIDIA/nv-ingest/tree/24.12.1). + + +The following diagram shows the NeMo Retriever Library pipeline. + +![Pipeline Overview](https://docs.nvidia.com/nemo/retriever/extraction/images/overview-extraction.png) + +## Table of Contents +1. [NeMo Retriever Library](#nemo-retriever-library) +2. [Prerequisites](#prerequisites) +3. [Quickstart](#library-mode-quickstart) +4. [Benchmarking](#benchmarking) +5. [GitHub Repository Structure](#github-repository-structure) +6. [Notices](#notices) + + +## What is NeMo Retriever Library? + +The NeMo Retriever Library is a library and microservice framework designed to perform the following functions:: + +- Accept a job specification that contains a document payload and a set of ingestion tasks to perform on that payload. +- Store the result of each job to retrieve later. The result is a dictionary that contains a list of metadata that describes the objects extracted from the base document, and processing annotations and timing/trace data. +- Support multiple methods of extraction for each document type to balance trade-offs between throughput and accuracy. For example, for .pdf documents, extraction is performed by using pdfium, [nemotron-parse](https://build.nvidia.com/nvidia/nemotron-parse), Unstructured.io, and Adobe Content Extraction Services. +- Support various types of before and after processing operations, including text splitting and chunking, transform and filtering, embedding generation, and image offloading to storage. + + +NeMo Retriever Extraction supports the following file types: + +- `avi` (early access) +- `bmp` +- `docx` +- `html` (converted to markdown format) +- `jpeg` +- `json` (treated as text) +- `md` (treated as text) +- `mkv` (early access) +- `mov` (early access) +- `mp3` +- `mp4` (early access) +- `pdf` +- `png` +- `pptx` +- `sh` (treated as text) +- `tiff` +- `txt` +- `wav` + + +### What NeMo Retriever Library Isn't + +NeMo Retriever Library does not do the following: + +- Run a static pipeline or fixed set of operations on every submitted document. +- Act as a wrapper for any specific document parsing library. + + +For more information, refer to the [NeMo Retriever Library documentation](https://docs.nvidia.com/nemo/retriever/extraction/overview/). + +## Documentation Resources + +- **[Official Documentation](https://docs.nvidia.com/nemo/retriever/extraction/)** - Complete user guides, API references, and deployment instructions +- **[Getting Started Guide](https://docs.nvidia.com/nemo/retriever/extraction/overview/)** - Overview and prerequisites for production deployments +- **[Benchmarking Guide](https://docs.nvidia.com/nemo/retriever/extraction/benchmarking/)** - Performance testing and recall evaluation framework +- **[MIG Deployment](https://docs.nvidia.com/nemo/retriever/extraction/mig-benchmarking/)** - Multi-Instance GPU configurations for Kubernetes +- **[API Documentation](https://docs.nvidia.com/nemo/retriever/extraction/api/)** - Python client and API reference + + +## Prerequisites + +For production-level performance and scalability, we recommend that you deploy the pipeline and supporting NIMs by using Docker Compose or Kubernetes ([helm charts](helm)). For more information, refer to [prerequisites](https://docs.nvidia.com/nv-ingest/user-guide/getting-started/prerequisites). + + +## Library Mode Quickstart + +For small-scale workloads, such as workloads of fewer than 100 PDFs, you can use library mode setup. Library mode set up depends on NIMs that are already self-hosted, or, by default, NIMs that are hosted on build.nvidia.com. + +Library mode deployment of nv-ingest requires: + +- Linux operating systems (Ubuntu 22.04 or later recommended) or MacOS +- Python 3.12 +- We strongly advise using an isolated Python virtual env with [uv](https://docs.astral.sh/uv/getting-started/installation/). + +### Step 1: Prepare Your Environment + +Create a fresh Python environment to install nv-ingest and dependencies. + +```shell +uv venv --python 3.12 nvingest && \ + source nvingest/bin/activate && \ + uv pip install nv-ingest==26.1.2 nv-ingest-api==26.1.2 nv-ingest-client==26.1.2 milvus-lite==2.4.12 +``` + +Set your NVIDIA_API_KEY. If you don't have a key, you can get one on [build.nvidia.com](https://org.ngc.nvidia.com/setup/api-keys). For instructions, refer to [Generate Your NGC Keys](docs/docs/extraction/ngc-api-key.md). + +``` +export NVIDIA_API_KEY=nvapi-... +``` + +### Step 2: Ingest Documents + +You can submit jobs programmatically in Python. + +To confirm that you have activated your Python environment, run `which python` and confirm that you see `nvingest` in the result. You can do this before any python command that you run. + +``` +which python +/home/dev/projects/nv-ingest/nvingest/bin/python +``` + +If you have a very high number of CPUs, and see the process hang without progress, we recommend that you use `taskset` to limit the number of CPUs visible to the process. Use the following code. + +``` +taskset -c 0-3 python your_ingestion_script.py +``` + +On a 4 CPU core low end laptop, the following code should take about 10 seconds. + +```python +import time + +from nv_ingest.framework.orchestration.ray.util.pipeline.pipeline_runners import run_pipeline +from nv_ingest_client.client import Ingestor, NvIngestClient +from nv_ingest_api.util.message_brokers.simple_message_broker import SimpleClient +from nv_ingest_client.util.process_json_files import ingest_json_results_to_blob + +def main(): + # Start the pipeline subprocess for library mode + run_pipeline(block=False, disable_dynamic_scaling=True, run_in_subprocess=True) + + client = NvIngestClient( + message_client_allocator=SimpleClient, + message_client_port=7671, + message_client_hostname="localhost", + ) + + # gpu_cagra accelerated indexing is not available in milvus-lite + # Provide a filename for milvus_uri to use milvus-lite + milvus_uri = "milvus.db" + collection_name = "test" + sparse = False + + # do content extraction from files + ingestor = ( + Ingestor(client=client) + .files("data/multimodal_test.pdf") + .extract( + extract_text=True, + extract_tables=True, + extract_charts=True, + extract_images=True, + table_output_format="markdown", + extract_infographics=True, + # extract_method="nemotron_parse", #Slower, but maximally accurate, especially for PDFs with pages that are scanned images + text_depth="page", + ) + .embed() + .vdb_upload( + collection_name=collection_name, + milvus_uri=milvus_uri, + sparse=sparse, + # for llama-3.2 embedder, use 1024 for e5-v5 + dense_dim=2048, + ) + ) + + print("Starting ingestion..") + t0 = time.time() + + # Return both successes and failures + # Use for large batches where you want successful chunks/pages to be committed, while collecting detailed diagnostics for failures. + results, failures = ingestor.ingest(show_progress=True, return_failures=True) + + # Return only successes + # results = ingestor.ingest(show_progress=True) + + t1 = time.time() + print(f"Total time: {t1 - t0} seconds") + + # results blob is directly inspectable + if results: + print(ingest_json_results_to_blob(results[0])) + + # (optional) Review any failures that were returned + if failures: + print(f"There were {len(failures)} failures. Sample: {failures[0]}") + +if __name__ == "__main__": + main() +``` + +You can see the extracted text that represents the content of the ingested test document. + +```shell +Starting ingestion.. +Total time: 9.243880033493042 seconds + +TestingDocument +A sample document with headings and placeholder text +Introduction +This is a placeholder document that can be used for any purpose. It contains some +headings and some placeholder text to fill the space. The text is not important and contains +no real value, but it is useful for testing. Below, we will have some simple tables and charts +that we can use to confirm Ingest is working as expected. +Table 1 +This table describes some animals, and some activities they might be doing in specific +locations. +Animal Activity Place +Gira@e Driving a car At the beach +Lion Putting on sunscreen At the park +Cat Jumping onto a laptop In a home o@ice +Dog Chasing a squirrel In the front yard +Chart 1 +This chart shows some gadgets, and some very fictitious costs. +... document extract continues ... +``` + +### Step 3: Query Ingested Content + +To query for relevant snippets of the ingested content, and use them with an LLM to generate answers, use the following code. + +```python +import os +from openai import OpenAI +from nv_ingest_client.util.milvus import nvingest_retrieval + +milvus_uri = "milvus.db" +collection_name = "test" +sparse = False + +queries = ["Which animal is responsible for the typos?"] + +retrieved_docs = nvingest_retrieval( + queries, + collection_name, + milvus_uri=milvus_uri, + hybrid=sparse, + top_k=1, +) + +# simple generation example +extract = retrieved_docs[0][0]["entity"]["text"] +client = OpenAI( + base_url="https://integrate.api.nvidia.com/v1", + api_key=os.environ["NVIDIA_API_KEY"], +) + +prompt = f"Using the following content: {extract}\n\n Answer the user query: {queries[0]}" +print(f"Prompt: {prompt}") +completion = client.chat.completions.create( + model="nvidia/llama-3.1-nemotron-nano-vl-8b-v1", + messages=[{"role": "user", "content": prompt}], +) +response = completion.choices[0].message.content + +print(f"Answer: {response}") +``` + +```shell +Prompt: Using the following content: Table 1 +| This table describes some animals, and some activities they might be doing in specific locations. | This table describes some animals, and some activities they might be doing in specific locations. | This table describes some animals, and some activities they might be doing in specific locations. | +| Animal | Activity | Place | +| Giraffe | Driving a car | At the beach | +| Lion | Putting on sunscreen | At the park | +| Cat | Jumping onto a laptop | In a home office | +| Dog | Chasing a squirrel | In the front yard | + + Answer the user query: Which animal is responsible for the typos? +Answer: A clever query! + +Based on the provided Table 1, I'd make an educated inference to answer your question. Since the activities listed are quite unconventional for the respective animals (e.g., a giraffe driving a car, a lion putting on sunscreen), it's likely that the table is using humor or hypothetical scenarios. + +Given this context, the question "Which animal is responsible for the typos?" is probably a tongue-in-cheek inquiry, as there's no direct information in the table about typos or typing activities. + +However, if we were to make a playful connection, we could look for an animal that's: + +1. Typically found in a setting where typing might occur (e.g., an office). +2. Engaging in an activity that could potentially lead to typos (e.g., interacting with a typing device). + +Based on these loose criteria, I'd jokingly point to: + +**Cat** as the potential culprit, since it's: + * Located "In a home office" + * Engaged in "Jumping onto a laptop", which could theoretically lead to accidental keystrokes or typos if the cat were to start "walking" on the keyboard! + +Please keep in mind that this response is purely humorous and interpretative, as the table doesn't explicitly mention typos or provide a straightforward answer to the question. +``` + +> [!TIP] +> Beyond inspecting the results, you can read them into things like [llama-index](examples/llama_index_multimodal_rag.ipynb) or [langchain](examples/langchain_multimodal_rag.ipynb) retrieval pipelines. +> +> Please also checkout our [demo using a retrieval pipeline on build.nvidia.com](https://build.nvidia.com/nvidia/multimodal-pdf-data-extraction-for-enterprise-rag) to query over document content pre-extracted w/ NVIDIA Ingest. + + +## Benchmarking + +nv-ingest includes a comprehensive testing framework for benchmarking performance and evaluating retrieval accuracy. + +### Quick Start + +```bash +cd tools/harness + +uv sync + +# Run end-to-end benchmark +uv run nv-ingest-harness-run --case=e2e --dataset=bo767 + +# Evaluate retrieval accuracy +uv run nv-ingest-harness-run --case=e2e_recall --dataset=bo767 +``` + +### Available Benchmarks + +- **End-to-End Performance** - Measure ingestion throughput, latency, and resource utilization +- **Retrieval Accuracy** - Evaluate recall@k metrics against ground truth datasets +- **MIG Benchmarking** - Test performance with NVIDIA Multi-Instance GPU (MIG) configurations + +### Documentation + +- **[Testing Framework Guide](https://docs.nvidia.com/nemo/retriever/extraction/benchmarking/)** - Complete guide to benchmarking and testing nv-ingest (same as `tools/harness/README.md`) +- **[MIG Benchmarking](https://docs.nvidia.com/nemo/retriever/extraction/mig-benchmarking/)** - GPU partitioning for multi-tenant deployments on Kubernetes/Helm + +### Benchmark Datasets + +- **bo767** - 767 PDF documents with ground truth for recall evaluation +- **bo20** - 20 PDF documents for quick validation +- **single** - singular multimodal pdf for quick validation +- **earnings** - earnings reports ppt and pdf dataset +-- **financebench** - financial data +- **Custom datasets** - Use your own datasets with the testing framework + +For more information, see the [benchmarking documentation](https://docs.nvidia.com/nemo/retriever/extraction/benchmarking/). + + +## GitHub Repository Structure + +The following is a description of the folders in the GitHub repository. + +- [.devcontainer](https://github.com/NVIDIA/nv-ingest/tree/main/.devcontainer) — VSCode containers for local development +- [.github](https://github.com/NVIDIA/nv-ingest/tree/main/.github) — GitHub repo configuration files +- [api](https://github.com/NVIDIA/nv-ingest/tree/main/api) — Core API logic shared across python modules +- [ci](https://github.com/NVIDIA/nv-ingest/tree/main/ci) — Scripts used to build the nv-ingest container and other packages +- [client](https://github.com/NVIDIA/nv-ingest/tree/main/client) — Readme, examples, and source code for the nv-ingest-cli utility +- [config](https://github.com/NVIDIA/nv-ingest/tree/main/config) — Various .yaml files defining configuration for OTEL, Prometheus +- [data](https://github.com/NVIDIA/nv-ingest/tree/main/data) — Sample PDFs for testing +- [deploy](https://github.com/NVIDIA/nv-ingest/tree/main/deploy) — Brev.dev-hosted launchable +- [docker](https://github.com/NVIDIA/nv-ingest/tree/main/docker) — Scripts used by the nv-ingest docker container +- [docs](https://github.com/NVIDIA/nv-ingest/tree/main/docs/docs) — Documentation for NV Ingest +- [evaluation](https://github.com/NVIDIA/nv-ingest/tree/main/evaluation) — Notebooks that demonstrate how to test recall accuracy +- [examples](https://github.com/NVIDIA/nv-ingest/tree/main/examples) — Notebooks, scripts, and tutorial content +- [helm](https://github.com/NVIDIA/nv-ingest/tree/main/helm) — Documentation for deploying nv-ingest to a Kubernetes cluster via Helm chart +- [skaffold](https://github.com/NVIDIA/nv-ingest/tree/main/skaffold) — Skaffold configuration +- [src](https://github.com/NVIDIA/nv-ingest/tree/main/src) — Source code for the nv-ingest pipelines and service +- [tests](https://github.com/NVIDIA/nv-ingest/tree/main/tests) — Unit tests for nv-ingest + + +## Notices + +### Third Party License Notice: + +If configured to do so, this project will download and install additional third-party open source software projects. +Review the license terms of these open source projects before use: + +https://pypi.org/project/pdfservices-sdk/ + +- **`INSTALL_ADOBE_SDK`**: + - **Description**: If set to `true`, the Adobe SDK will be installed in the container at launch time. This is + required if you want to use the Adobe extraction service for PDF decomposition. Please review the + [license agreement](https://github.com/adobe/pdfservices-python-sdk?tab=License-1-ov-file) for the + pdfservices-sdk before enabling this option. +- **Built With Llama**: + - **Description**: The NV-Ingest container comes with the `meta-llama/Llama-3.2-1B` tokenizer pre-downloaded so + that the split task can use it for token-based splitting without making a network request. The [Llama 3.2 Community License Agreement](https://huggingface.co/meta-llama/Llama-3.2-1B/blob/main/LICENSE.txt) governs your use of these Llama materials. + + If you're building the container yourself and want to pre-download this model, you'll first need to set + `DOWNLOAD_LLAMA_TOKENIZER` to `True`. Because this is a gated model, you'll also need to + [request access](https://huggingface.co/meta-llama/Llama-3.2-1B) and set `HF_ACCESS_TOKEN` to your HuggingFace + access token in order to use it. + + +### Contributing + +We require that all contributors "sign-off" on their commits. This certifies that the contribution is your original +work, or you have rights to submit it under the same license, or a compatible license. + +Any contribution which contains commits that are not signed off are not accepted. + +To sign off on a commit, use the --signoff (or -s) option when you commit your changes as shown following. + +``` +$ git commit --signoff --message "Add cool feature." +``` + +This appends the following text to your commit message. + +``` +Signed-off-by: Your Name +``` + +#### Developer Certificate of Origin (DCO) + +The following is the full text of the Developer Certificate of Origin (DCO) + +``` + Developer Certificate of Origin + Version 1.1 + + Copyright (C) 2004, 2006 The Linux Foundation and its contributors. + 1 Letterman Drive + Suite D4700 + San Francisco, CA, 94129 + + Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. +``` + +``` + Developer's Certificate of Origin 1.1 + + By making a contribution to this project, I certify that: + + (a) The contribution was created in whole or in part by me and I have the right to submit it under the open source license indicated in the file; or + + (b) The contribution is based upon previous work that, to the best of my knowledge, is covered under an appropriate open source license and I have the right under that license to submit that work with modifications, whether created in whole or in part by me, under the same open source license (unless I am permitted to submit under a different license), as indicated in the file; or + + (c) The contribution was provided directly to me by some other person who certified (a), (b) or (c) and I have not modified it. + + (d) I understand and agree that this project and the contribution are public and that a record of the contribution (including all personal information I submit with it, including my sign-off) is maintained indefinitely and may be redistributed consistent with this project or the open source license(s) involved. +``` + + +## Security Considerations + +- NeMo Retriever Extraction doesn't generate any code that may require sandboxing. +- NeMo Retriever Extraction is shared as a reference and is provided "as is". The security in the production environment is the responsibility of the end users deploying it. When deploying in a production environment, please have security experts review any potential risks and threats; define the trust boundaries, implement logging and monitoring capabilities, secure the communication channels, integrate AuthN & AuthZ with appropriate access controls, keep the deployment up to date, ensure the containers/source code are secure and free of known vulnerabilities. +- A frontend that handles AuthN & AuthZ should be in place as missing AuthN & AuthZ could provide ungated access to customer models if directly exposed to e.g. the internet, resulting in either cost to the customer, resource exhaustion, or denial of service. +- NeMo Retriever Extraction doesn't require any privileged access to the system. +- The end users are responsible for ensuring the availability of their deployment. +- The end users are responsible for building the container images and keeping them up to date. +- The end users are responsible for ensuring that OSS packages used by the developer blueprint are current. +- The logs from nginx proxy, backend, and demo app are printed to standard out. They can include input prompts and output completions for development purposes. The end users are advised to handle logging securely and avoid information leakage for production use cases. diff --git a/nemo_retriever/src/nemo_retriever/retriever.py b/nemo_retriever/src/nemo_retriever/retriever.py index 5d3458ce8..36b8daf3c 100644 --- a/nemo_retriever/src/nemo_retriever/retriever.py +++ b/nemo_retriever/src/nemo_retriever/retriever.py @@ -288,9 +288,6 @@ def queries( ) if self.reranker: - assert self.top_k * self.reranker_refine_factor == len( - results[0] - ), "top_k must be at least 1/4 of the number of retrieved hits for reranking to work properly." results = self._rerank_results(query_texts, results) return results From 7d112c3f3517749e1a709445d7f4cf90dcc47df6 Mon Sep 17 00:00:00 2001 From: Randy Gelhausen Date: Mon, 16 Mar 2026 12:31:00 -0400 Subject: [PATCH 30/94] cherry-pick 15b2bc05681599329276e46e83edfa0f15bb4318 from main --- nemo_retriever/README.md | 466 +++++++++++++++------------------------ 1 file changed, 181 insertions(+), 285 deletions(-) diff --git a/nemo_retriever/README.md b/nemo_retriever/README.md index f0af47d61..6c6bb1c24 100644 --- a/nemo_retriever/README.md +++ b/nemo_retriever/README.md @@ -2,15 +2,19 @@ NeMo Retriever Library is a retrieval-augmented generation (RAG) ingestion pipeline for documents that can parse text, tables, charts, and infographics. NeMo Retriever Library parses documents, creates embeddings, optionally stores embeddings in LanceDB, and performs recall evaluation. -This quick start guide shows how to run NeMo Retriever Library in library mode, directly from your application, without Docker. In library mode, NeMo Retriever Library supports two deployment options: -- Load Hugging Face models locally on your GPU. -- Use locally deployed NeMo Retriever NIM endpoints for embedding and OCR. +This quick start guide shows how to run NeMo Retriever Library as a library all within local Python processes without containers. NeMo Retriever Library supports two inference options: +- Pull and run [Nemotron RAG models from Hugging Face](https://huggingface.co/collections/nvidia/nemotron-rag) on your local GPU(s). +- Make over the network inference calls to build.nvidia.com hosted or locally deployed NeMo Retriever NIM endpoints. -You’ll set up a CUDA 13–compatible environment, install the library and its dependencies, and run GPU‑accelerated ingestion pipelines that convert PDFs, HTML, plain text, and audio into vector embeddings stored in LanceDB, with optional Ray‑based scaling and built‑in recall benchmarking. +You’ll set up a CUDA 13–compatible environment, install the library and its dependencies, and run GPU‑accelerated ingestion pipelines that convert PDFs, HTML, plain text, audio, or video into vector embeddings stored in LanceDB (on local disk), with Ray‑based scaling and built‑in recall benchmarking. ## Prerequisites +<<<<<<< HEAD Before you start, make sure your system meets the following requirements: +======= +Before starting, make sure your system meets the following requirements: +>>>>>>> 15b2bc05 (Updating the nemo_retriever quickstart README (#1632)) - The host is running CUDA 13.x so that `libcudart.so.13` is available. - Your GPUs are visible to the system and compatible with CUDA 13.x. @@ -25,7 +29,7 @@ export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/local/cuda/lib64 ## Setup your environment -Complete the following steps to setup your environment. You will create and activate isolated Python and project virtual environments, install the NeMo Retriever Library and its CUDA 13–compatible GPU dependencies, and then run the ingestion, benchmarking, and audio pipelines to validate the full setup. +Complete the following steps to setup your environment. You will create and activate isolated Python and project virtual environments, install the NeMo Retriever Library and its dependencies, and then run the provided ingestion snippets to validate your setup. 1. Create and activate the NeMo Retriever Library environment @@ -34,28 +38,13 @@ Before installing NeMo Retriever Library, create an isolated Python environment In your terminal, run the following commands from any location. ```bash -uv venv .nemotron-ocr-test --python 3.12 -source .nemotron-ocr-test/bin/activate -uv pip install -i https://test.pypi.org/simple/ --extra-index-url https://pypi.org/simple nemo-retriever +uv venv retriever --python 3.12 +source retriever/bin/activate +uv pip install -i https://test.pypi.org/simple/ --extra-index-url https://pypi.org/simple nemo-retriever==26.3.0rc2 nv-ingest-client==26.3.0rc2 nv-ingest==26.3.0rc2 nv-ingest-api==26.3.0rc2 ``` This creates a dedicated Python environment and installs the `nemo-retriever` PyPI package, the canonical distribution for the NeMo Retriever Library. -2. Install NeMo Retriever Library and Dependencies - -Install the latest nightly builds of the NeMo Retriever Library so you can test the most recent features and fixes before they are rolled into a stable release. - -In this step, you install the core library, its API layer, and the client package, ensuring the ingestion pipeline and related tooling all come from a consistent, up‑to‑date version set. - -In your terminal, run the following commands from any location. - - -```bash -uv pip install -i https://test.pypi.org/simple nemo-retriever==2026.3.3.dev20260303 nemo-retriever-api==2026.3.3.dev20260303 nemo-retriever-client==2026.3.3.dev20260303 --no-deps -uv pip install nemo-retriever nemo-retriever-api nemo-retriever-client -``` -These packages provide the ingestion pipeline and APIs used by NeMo Retriever Library until everything is consolidated under the single `nemo-retriever` surface. - -3. Install CUDA 13 builds of Torch and Torchvision +2. Install CUDA 13 builds of Torch and Torchvision To ensure NeMo Retriever Library’s OCR and GPU‑accelerated components run correctly on your system, you need PyTorch and TorchVision builds that are compiled for CUDA 13. In this step, you uninstall any existing Torch/TorchVision packages and reinstall them from a dedicated CUDA 13.0 wheel index so they link against the same CUDA runtime as the rest of your pipeline. @@ -67,170 +56,186 @@ uv pip install torch==2.9.1 torchvision -i https://download.pytorch.org/whl/cu13 ``` This ensures the OCR and GPU‑accelerated components in NeMo Retriever Library run against the right CUDA runtime. -4. Set up the NeMo Retriever Library project environment +## Run the pipeline -For local development, you need a project-scoped environment tied directly to the NeMo Retriever Library source tree. +The [test PDF](../data/multimodal_test.pdf) contains text, tables, charts, and images. Additional test data resides [here](../data/). -In this step, you create a virtual environment in the repo itself and install the `nemo_retriever` package in editable mode so you can run examples, tweak the code, and pick up changes without reinstallation. +> **Note:** `batch` is the primary intended run_mode of operation for this library. Other modes are experimental and subject to change or removal. -Run the following code from the NeMo Retriever Library repo root (NVIDIA/NeMo-Retriever). - -```bash -cd /path/to/NeMo-Retriever -uv venv .retriever -source .retriever/bin/activate -uv pip install -e ./nemo_retriever -``` -This creates a project-local environment and installs the `nemo_retriever` Python package in editable mode for running the examples. - -5. Run the batch pipeline on PDFs +### Ingest a test pdf +```python +from nemo_retriever import create_ingestor +from nemo_retriever.io import to_markdown, to_markdown_by_page +from pathlib import Path -In this procedure, you run the end‑to‑end NeMo Retriever Library batch pipeline to ingest a collection of PDFs and generate embeddings for them. Pointing the script at a directory of PDF files lets the pipeline handle parsing, OCR, embedding, optional LanceDB upload, and (if configured) recall evaluation in a single command. +documents = [str(Path("../data/multimodal_test.pdf"))] +ingestor = create_ingestor(run_mode="batch") -Run the batch pipeline script and point it at the directory that contains your PDFs using the following command. +# ingestion tasks are chainable and defined lazily +ingestor = ( + ingestor.files(documents) + .extract( + # below are the default values, but content types can be controlled + extract_text=True, + extract_charts=True, + extract_tables=True, + extract_infographics=True + ) + .embed() + .vdb_upload() +) -```bash -uv run python nemo_retriever/src/nemo_retriever/examples/batch_pipeline.py /path/to/pdfs +# ingestor.ingest() actually executes the pipeline +# results are returned as a ray dataset and inspectable as chunks +ray_dataset = ingestor.ingest() +chunks = ray_dataset.get_dataset().take_all() ``` -The first positional argument is the `input-dir`, the directory with the PDF files to ingest. +### Inspect extracts +You can inspect how recall accuracy optimized text chunks for various content types were extracted into text representations: +```python +# page 1 raw text: +>>> chunks[0]["text"] +'TestingDocument\r\nA sample document with headings and placeholder text\r\nIntroduction\r\nThis is a placeholder document that can be used for any purpose...' -For recall evaluation, the pipeline uses bo767_query_gt.csv from the current working directory by default; you can override this by running the following command. +# markdown formatted table from the first page +>>> chunks[1]["text"] +'| Table | 1 |\n| This | table | describes | some | animals, | and | some | activities | they | might | be | doing | in | specific |\n| locations. |\n| Animal | Activity | Place |\n| Giraffe | Driving | a | car | At | the | beach |\n| Lion | Putting | on | sunscreen | At | the | park |\n| Cat | Jumping | onto | a | laptop | In | a | home | office |\n| Dog | Chasing | a | squirrel | In | the | front | yard |\n| Chart | 1 |' -```bash -uv run python nemo_retriever/src/nemo_retriever/examples/batch_pipeline.py /path/to/pdfs \ - --query-csv /path/to/custom_query_gt.csv -``` +# a chart from the first page +>>> chunks[2]["text"] +'Chart 1\nThis chart shows some gadgets, and some very fictitious costs.\nGadgets and their cost\n$160.00\n$140.00\n$120.00\n$100.00\nDollars\n$80.00\n$60.00\n$40.00\n$20.00\n$-\nPowerdrill\nBluetooth speaker\nMinifridge\nPremium desk fan\nHammer\nCost' -If the specified query CSV does not exist, recall evaluation is skipped automatically and only the ingestion process runs. +# markdown formatting for full pages or documents: +>>> to_markdown_by_page(chunks).keys() +dict_keys([1, 2, 3]) -By default, the pipeline prints per‑query details (query text, gold answers, and hits); use `--no-recall-details` to show only the missed‑gold summary and overall recall metrics. +>>> to_markdown_by_page(chunks)[1] +'## Page 1\n\nTestingDocument\r\nA sample document with headings and placeholder text\r\nIntroduction\r\nThis is a placeholder document that can be used for any purpose. It contains some \r\nheadings and some placeholder text to fill the space. The text is not important and contains \r\nno real value, but it is useful for testing. Below, we will have some simple tables and charts \r\nthat we can use to confirm Ingest is working as expected.\r\nTable 1\r\nThis table describes some animals, and some activities they might be doing in specific \r\nlocations.\r\nAnimal Activity Place\r\nGira@e Driving a car At the beach\r\nLion Putting on sunscreen At the park\r\nCat Jumping onto a laptop In a home o@ice\r\nDog Chasing a squirrel In the front yard\r\nChart 1\r\nThis chart shows some gadgets, and some very fictitious costs.\n\n| This | table | describes | some | animals, | and | some | activities | they | might | be | doing | in | specific |\n| locations. |\n| Animal | Activity | Place |\n| Giraffe | Driving | a | car | At | the | beach |\n| Lion | Putting | on | sunscreen | At | the | park |\n| Cat | Jumping | onto | a | laptop | In | a | home | office |\n| Dog | Chasing | a | squirrel | In | the | front | yard |\n| Chart | 1 |\n\nChart 1 This chart shows some gadgets, and some very fictitious costs...' -To reuse an existing Ray cluster, append --ray-address using the following command. - -```bash ---ray-address auto +# full document markdown +>>> to_markdown(chunks) ``` -By doing this the pipeline connects to the running Ray deployment instead of starting a new one. - -6. Ingest HTML or plain text instead of PDFs +Since the ingestion job automatically populated a lancedb table with all these chunks, you can use queries to retrieve semantically relevant chunks for feeding directly into an LLM: -If your documents aren't stored as PDFs, you can point the same NeMo Retriever Library batch pipeline to directories of HTML or plain text files instead. +### Run a recall query -In this step, you either pass an input‑type flag to the batch example for a simple one‑shot run, or use a staged HTML CLI flow for more control over each phase of ingestion. +```python +from nemo_retriever.retriever import Retriever + +retriever = Retriever( + # default values + lancedb_uri="lancedb", + lancedb_table="nv-ingest", + embedder="nvidia/llama-3.2-nv-embedqa-1b-v2", + top_k=5, + reranker=False +) -To run the batch example directly on HTML or plain text, use one of the following commands in your terminal. +query = "Given their activities, which animal is responsible for the typos in my documents?" -```bash -uv run python nemo_retriever/src/nemo_retriever/examples/batch_pipeline.py --input-type html +# you can also submit a list with retriever.queries[...] +hits = retriever.query(query) ``` -or -```bash -uv run python nemo_retriever/src/nemo_retriever/examples/batch_pipeline.py --input-type txt -``` -Pass the directory that contains your PDFs as the first argument (`input-dir`). For recall evaluation, the pipeline uses `bo767_query_gt.csv` in the current directory by default; override with `--query-csv `. For document-level recall, use `--recall-match-mode pdf_only` with `query,expected_pdf` data. Recall is skipped if the query file does not exist. By default, per-query details (query, gold, hits) are printed; use `--no-recall-details` to print only the missed-gold summary and recall metrics. To use an existing Ray cluster, pass `--ray-address auto`. If OCR fails with a missing `libcudart.so.13`, install the CUDA 13 runtime and set `LD_LIBRARY_PATH` as shown above. +```python +# retrieved text from the first page +>>> hits[0] +{'text': 'TestingDocument\r\nA sample document with headings and placeholder text\r\nIntroduction\r\nThis is a placeholder document that can be used for any purpose. It contains some \r\nheadings and some placeholder text to fill the space. The text is not important and contains \r\nno real value, but it is useful for testing. Below, we will have some simple tables and charts \r\nthat we can use to confirm Ingest is working as expected.\r\nTable 1\r\nThis table describes some animals, and some activities they might be doing in specific \r\nlocations.\r\nAnimal Activity Place\r\nGira@e Driving a car At the beach\r\nLion Putting on sunscreen At the park\r\nCat Jumping onto a laptop In a home o@ice\r\nDog Chasing a squirrel In the front yard\r\nChart 1\r\nThis chart shows some gadgets, and some very fictitious costs.', 'metadata': '{"page_number": 1, "pdf_page": "multimodal_test_1", "page_elements_v3_num_detections": 9, "page_elements_v3_counts_by_label": {"table": 1, "chart": 1, "title": 3, "text": 4}, "ocr_table_detections": 1, "ocr_chart_detections": 1, "ocr_infographic_detections": 0}', 'source': '{"source_id": "/home/dev/projects/NeMo-Retriever/data/multimodal_test.pdf"}', 'page_number': 1, '_distance': 1.5822279453277588} -Use `--input-type html` for HTML files and `--input-type txt` for plain text. HTML inputs are converted to markdown using the same tokenizer and chunking strategy used for `.txt` ingestion. +# retrieved text of the table from the first page +>>> hits[1] +{'text': '| Table | 1 |\n| This | table | describes | some | animals, | and | some | activities | they | might | be | doing | in | specific |\n| locations. |\n| Animal | Activity | Place |\n| Giraffe | Driving | a | car | At | the | beach |\n| Lion | Putting | on | sunscreen | At | the | park |\n| Cat | Jumping | onto | a | laptop | In | a | home | office |\n| Dog | Chasing | a | squirrel | In | the | front | yard |\n| Chart | 1 |', 'metadata': '{"page_number": 1, "pdf_page": "multimodal_test_1", "page_elements_v3_num_detections": 9, "page_elements_v3_counts_by_label": {"table": 1, "chart": 1, "title": 3, "text": 4}, "ocr_table_detections": 1, "ocr_chart_detections": 1, "ocr_infographic_detections": 0}', 'source': '{"source_id": "/home/dev/projects/NeMo-Retriever/data/multimodal_test.pdf"}', 'page_number': 1, '_distance': 1.614684820175171} +``` -For more step‑by‑step control with HTML, use the following staged HTML CLI flow commands instead. +### Generate a query answer using an LLM +The above retrieval results are often feedable directly to an LLM for answer generation. +To do so, first install the openai client and set your [build.nvidia.com](https://build.nvidia.com/) API key: ```bash -retriever html run --input-dir -retriever local stage5 run --input-dir --pattern "*.html_extraction.json" -retriever local stage6 run --input-dir +uv pip install -y openai +export NVIDIA_API_KEY=nvapi-... ``` -`retriever html run` parses the HTML and writes `*.html_extraction.json` sidecar files into the input directory. `retriever local stage5 run` performs downstream processing over those JSON files, and `retriever local stage6 run` completes the final ingestion stages, such as embedding and optional upload, using the same core extraction pipeline. - -- Config files: - - `nemo_retriever/harness/test_configs.yaml` - - `nemo_retriever/harness/nightly_config.yaml` -- CLI entrypoint is nested under `retriever harness`. -- First pass is LanceDB-only and enforces recall-required pass/fail by default. -- Single-run artifact directories default to `_`. -- Dataset-specific recall adapters are supported via config: - - `recall_adapter: none` (default passthrough) - - `recall_adapter: page_plus_one` (convert zero-indexed `page` CSVs to `pdf_page`) - - `recall_adapter: financebench_json` (convert FinanceBench JSON to `query,expected_pdf`) - - `recall_match_mode: pdf_page|pdf_only` controls recall matching mode. -- Dataset presets configured under `/datasets/nv-ingest/...` will fall back to `/raid/$USER/...` when the dataset is not present in `/datasets`. -- Relative `query_csv` entries in harness YAML resolve from the config file directory first, then fall back to the repo root. -- The default `financebench` dataset preset now points at `data/financebench_train.json` and enables recall out of the box. - -After you’ve finished installing and configuring NeMo Retriever Library, it's a good idea to validate the entire pipeline with a small, known dataset. In this step, you run the batch pipeline module against the sample `bo20` dataset to confirm that ingestion, OCR under CUDA 13, embedding, and any configured recall evaluation all run end‑to‑end without errors. -```bash -uv run python -m nemo_retriever.examples.batch_pipeline /datasets/nemo-retriever/bo20 -``` -This uses the module form of the NeMo Retriever Library batch pipeline example and points it at a sample dataset directory, verifying both ingestion and OCR under CUDA 13. +```python +from openai import OpenAI +import os -7. Ingest image files +client = OpenAI( + base_url = "https://integrate.api.nvidia.com/v1", + api_key = os.environ.get("NVIDIA_API_KEY") +) -NeMo Retriever Library can ingest standalone image files through the same detection, OCR, and embedding pipeline used for PDFs. Supported formats are PNG, JPEG, BMP, TIFF, and SVG. SVG support requires the optional `cairosvg` package. Each image is treated as a single page. +hit_texts = [hit["text"] for hit in hits] +prompt = f""" +Given the following retrieved documents, answer the question: {query} -To run the batch pipeline on a directory of images, use `--input-type image` to match all supported formats at once. +Documents: +{hit_texts} +""" -```bash -uv run python nemo_retriever/src/nemo_retriever/examples/batch_pipeline.py /path/to/images \ - --input-type image -``` +completion = client.chat.completions.create( + model="nvidia/nemotron-3-super-120b-a12b", + messages=[{"role":"user","content":prompt}], + stream=False +) -You can also pass a single-format shortcut to restrict which files are picked up. +answer = completion.choices[0].message.content +print(answer) +``` -```bash -uv run python nemo_retriever/src/nemo_retriever/examples/batch_pipeline.py /path/to/images \ - --input-type png +Answer: +``` +Cat is the animal whose activity (jumping onto a laptop) matches the location of the typos, so the cat is responsible for the typos in the documents. ``` -Valid single-format values are `png`, `jpg`, `jpeg`, `bmp`, `tiff`, `tif`, and `svg`. +### Ingest other types of content: -For in-process mode, build the ingestor chain with `extract_image_files` instead of `extract`. +For PowerPoint and Docx files, ensure libeoffice is installed by your system's package manager. This is required to make their pages renderable as images for our [page-elements content classifier](https://huggingface.co/nvidia/nemotron-page-elements-v3). -```python -from nemo_retriever import create_ingestor -from nemo_retriever.params import ExtractParams, EmbedParams +For example, with apt-get on Ubuntu: +```bash +sudo apt install -y libreoffice +``` +Example usage: +```python +# docx and pptx files +documents = [str(Path(f"../data/*{ext}")) for ext in [".pptx", ".docx"]] +# mixed types of images +images = [str(Path(f"../data/*{ext}")) for ext in [".png", ".jpeg", ".bmp"]] ingestor = ( - create_ingestor(run_mode="inprocess") - .files("images/*.png") - .extract_image_files( - ExtractParams( - extract_text=True, - extract_tables=True, - extract_charts=True, - extract_infographics=True, - ) - ) - .embed() - .vdb_upload() - .ingest() + # above file types can be combined into a single job + ingestor.files(documents + images) + .extract() ) ``` -All `ExtractParams` options (`extract_text`, `extract_tables`, `extract_charts`, `extract_infographics`) apply to image ingestion. +*Note:* the `split()` task uses a tokenizer to split texts by a max_token length +<<<<<<< HEAD ### Render results as markdown If you want a readable markdown view of extracted results, pass the full in-process result list to `nemo_retriever.io.to_markdown`. The helper now returns a `dict[str, str]` keyed by input filename, where each value is the document collapsed into one markdown string without per-page headers, so both single-document and multi-document runs follow the same contract. +======= +PDF text is split at the page level. -```python -from nemo_retriever import create_ingestor -from nemo_retriever.io import to_markdown +HTML and .txt files have no natural page delimiters, so they almost always need to be paired with the `.split()` task. +>>>>>>> 15b2bc05 (Updating the nemo_retriever quickstart README (#1632)) +```python +# html and text files - include a split task to prevent texts from exceeding the embedder's max sequence length +documents = [str(Path(f"../data/*{ext}")) for ext in [".txt", ".html"]] ingestor = ( - create_ingestor(run_mode="inprocess") - .files("data/multimodal_test.pdf") - .extract( - extract_text=True, - extract_tables=True, - extract_charts=True, - extract_infographics=True, - ) + ingestor.files(documents) + .extract() + .split(max_tokens=5) #1024 by default, set low here to demonstrate chunking ) +<<<<<<< HEAD results = ingestor.ingest() markdown_docs = to_markdown(results) print(markdown_docs["multimodal_test.pdf"]) @@ -238,175 +243,66 @@ print(markdown_docs["multimodal_test.pdf"]) Use `to_markdown_by_page(results)` when you want a nested `dict[str, dict[int, str]]` instead, where each filename maps to its per-page markdown strings. - -## Benchmark harness - -NeMo Retriever Library includes a lightweight benchmark harness that lets you run repeatable evaluations and sweeps without using Docker. [NeMo Retriever Library benchmarking documentation](https://docs.nvidia.com/nemo/retriever/latest/extraction/benchmarking/) - -1. Configuration - -The harness is configured using the following configuration files: - -- `nemo_retriever/harness/test_configs.yaml` -- `nemo_retriever/harness/nightly_config.yaml` - -The CLI entrypoint is nested under `retriever harness`. The first pass is LanceDB‑only and enforces recall‑required pass/fail by default, and single‑run artifact directories default to `_`. [NeMo Retriever Library benchmarking documentation](https://docs.nvidia.com/nemo/retriever/latest/extraction/benchmarking/) - -2. Single run - -You can run a single benchmark either from a preset dataset name or a direct path. - -Preset dataset name -```bash -# Dataset preset from test_configs.yaml (recall-required example) -retriever harness run --dataset jp20 --preset single_gpu -``` -or - -# Direct dataset path -retriever harness run --dataset /datasets/nv-ingest/bo767 --preset single_gpu - -# Add repeatable run or session tags for later review -retriever harness run --dataset jp20 --preset single_gpu --tag nightly --tag candidate +======= ``` -3. Sweep runs - -To sweep multiple runs defined in a config file use the following command. +For audio and video files, ensure ffmpeg is installed by your system's package manager. +>>>>>>> 15b2bc05 (Updating the nemo_retriever quickstart README (#1632)) +For example, with apt-get on Ubuntu: ```bash -retriever harness sweep --runs-config nemo_retriever/harness/nightly_config.yaml +sudo apt install -y ffmpeg ``` -4. Nightly sessions - -To orchestrate a full nightly benchmark session use the following command. - -```bash -export SLACK_WEBHOOK_URL="https://hooks.slack.com/services/..." -retriever harness nightly --runs-config nemo_retriever/harness/nightly_config.yaml -retriever harness nightly --runs-config nemo_retriever/harness/nightly_config.yaml --skip-slack -retriever harness nightly --dry-run -retriever harness nightly --replay nemo_retriever/artifacts/nightly_20260305_010203_UTC +```python +ingestor = create_ingestor(run_mode="batch") +ingestor = ingestor.files([str(INPUT_AUDIO)]).extract_audio() ``` -`nemo_retriever/harness/nightly_config.yaml` supports a small top-level `preset:` and `slack:` -block alongside `runs:`. Keep the webhook secret out of YAML and source control; provide it only -through the `SLACK_WEBHOOK_URL` environment variable. If the variable is missing, nightly still -runs and writes artifacts but skips the Slack post. `--replay` lets you resend a previous session -directory, run directory, or `results.json` file after fixing webhook access. +### Explore Different Pipeline Options: -For reusable box-local automation, the harness also includes shell entrypoints: +You can use the [Nemotron RAG VL Embedder](https://huggingface.co/nvidia/llama-nemotron-embed-vl-1b-v2) -```bash -# One-shot nightly run using the repo-local .retriever env -bash nemo_retriever/harness/run_nightly.sh - -# Forever loop that sleeps until the next UTC schedule window, then runs nightly -tmux new-session -d -s retriever-nightly \ - "cd /path/to/nv-ingest && export SLACK_WEBHOOK_URL='https://hooks.slack.com/services/...' && \ - bash nemo_retriever/harness/run_nightly_loop.sh" +```python +ingestor = ( + ingestor.files(documents) + .extract() + .embed( + model_name="nvidia/llama-nemotron-embed-vl-1b-v2", + #works with plain "text"s, "image"s, and "text_image" pairs + embed_modality="text_image" + ) +) ``` -`run_nightly_loop.sh` is intended as a pragmatic fallback for boxes where cron or timers are -unreliable. It does not require an interactive SSH session once launched inside `tmux`, but it is -still less robust than a real scheduler such as `systemd` or a cluster job scheduler. - -The `--dry-run` option lets you verify the planned runs without executing them. [NeMo Retriever Library benchmarking documentation](https://docs.nvidia.com/nemo/retriever/latest/extraction/benchmarking/) - -5. Harness artifacts - -Each harness run writes a compact artifact set (no full stdout/stderr log persistence): - -- `results.json` (normalized metrics + pass/fail + config snapshot + `run_metadata`) -- `command.txt` (exact invoked command) -- `runtime_metrics/` (Ray runtime summary + timeline files) - -Recall metrics in `results.json` are normalized as `recall_1`, `recall_5`, and `recall_10`. -Nightly/sweep rollups intentionally focus on compact `summary_metrics`: - -- `pages` -- `ingest_secs` -- `pages_per_sec_ingest` -- `recall_5` - -By default, detection totals are embedded into `results.json` under `detection_summary`. -If you want a separate detection file for ad hoc inspection, set `write_detection_file: true` in -`nemo_retriever/harness/test_configs.yaml`. -When tags are supplied with `--tag`, they are persisted in `results.json` and in session rollups for sweep/nightly runs. - -`results.json` also includes a nested `run_metadata` block for lightweight environment context: - -- `host` -- `gpu_count` -- `cuda_driver` -- `ray_version` -- `python_version` - -These fields use best-effort discovery and fall back to `null` or `"unknown"` rather than failing a run. - -Sweep/nightly sessions additionally write: - -The `runtime_metrics/` directory contains: - -When Slack posting is enabled, the nightly summary is built from `session_summary.json` plus each -run's `results.json`, so the on-disk artifacts remain the source of truth even if you need to replay -or troubleshoot a failed post later. - -### Runtime metrics interpretation - -- **`run.runtime.summary.json`** - run totals (input files, pages, elapsed seconds) -- **`run.ray.timeline.json`** - detailed Ray execution timeline -- **`run.rd_dataset.stats.txt`** - Ray dataset stats dump - -Use `results.json` for routine benchmark comparison, and use the files under `runtime_metrics/` when investigating throughput regressions or stage‑level behavior. [NeMo Retriever Library benchmarking documentation](https://docs.nvidia.com/nemo/retriever/latest/extraction/benchmarking/) - -6. Artifact size profile - -Current benchmark runs show that the LanceDB data dominates the artifact footprint: - -### Cron / timer setup - -For a simple machine-local schedule, run the nightly command from `cron` or a `systemd` timer on the -GPU host that already has dataset access and the retriever environment installed. - -Example cron entry: - -```bash -0 2 * * * cd /path/to/nv-ingest && source .retriever/bin/activate && \ - export SLACK_WEBHOOK_URL="https://hooks.slack.com/services/..." && \ - retriever harness nightly --runs-config nemo_retriever/harness/nightly_config.yaml \ - >> nemo_retriever/artifacts/nightly_cron.log 2>&1 +You can use a different ingestion pipeline based on [Nemotron-Parse](https://huggingface.co/nvidia/NVIDIA-Nemotron-Parse-v1.2) combined with the default embedder: +```python +ingestor = ingestor.files(documents).extract(method="nemotron_parse") ``` -If you prefer `systemd`, keep the same command in an `ExecStart=` line and move -`SLACK_WEBHOOK_URL` into an environment file owned by the machine user so the secret stays out of -the repo. - -### Artifact size profile +## Run with remote inference, no local GPU required: -- **`bo20`** - ~9.0 MiB total, ~8.6 MiB LanceDB -- **`jp20`** - ~36.8 MiB total, ~36.2 MiB LanceDB - -## Audio ingestion pipeline - -NeMo Retriever Library also supports audio ingestion alongside documents. Audio pipelines typically follow a chained pattern such as the following. +For build.nvidia.com hosted inference, make sure you have NVIDIA_API_KEY set as an environment variable. ```python -.files("mp3/*.mp3").extract_audio(...).embed().vdb_upload().ingest() +ingestor = ( + ingestor.files(documents) + .extract( + # for self hosted NIMs, your URLs will depend on your NIM container DNS settings + page_elements_invoke_url="https://ai.api.nvidia.com/v1/cv/nvidia/nemotron-page-elements-v3", + graphic_elements_invoke_url="https://ai.api.nvidia.com/v1/cv/nvidia/nemotron-graphic-elements-v1", + ocr_invoke_url="https://ai.api.nvidia.com/v1/cv/nvidia/nemoretriever-ocr-v1", + table_structure_invoke_url="https://ai.api.nvidia.com/v1/cv/nvidia/nemotron-table-structure-v1" + ) + .embed( + embed_invoke_url="https://integrate.api.nvidia.com/v1/embeddings", + model_name="nvidia/llama-nemotron-embed-1b-v2", + embed_modality="text", + ) + .vdb_upload() +) ``` -This can be run in batch, in‑process, or fused mode within NeMo Retriever Library. [NeMo Retriever Library audio extraction documentation](https://docs.nvidia.com/nemo/retriever/latest/extraction/audio/) - -### ASR options - -For automatic speech recognition (ASR), you have the following two options: - -- Local: When `audio_endpoints` are not set, the pipeline uses local HuggingFace ASR (`nvidia/parakeet-ctc-1.1b`) through Transformers with NeMo fallback; no NIM or gRPC endpoint is required. [Parakeet CTC 1.1B model on Hugging Face](https://huggingface.co/nvidia/parakeet-ctc-1.1b) -- Remote: When `audio_endpoints` is set (for example, Parakeet NIM or self‑deployed Riva gRPC), the pipeline uses the remote client; set `AUDIO_GRPC_ENDPOINT`, `NGC_API_KEY`, and optionally `AUDIO_FUNCTION_ID`. [NeMo Retriever Library audio extraction documentation (25.6.3)](https://docs.nvidia.com/nemo/retriever/25.6.3/extraction/audio/) - -See `ingest-config.yaml` (sections `audio_chunk`, `audio_asr`) and audio scripts under `retriever/scripts/` for concrete configuration examples. [NeMo Retriever Library audio extraction documentation](https://docs.nvidia.com/nemo/retriever/latest/extraction/audio/) - ## Ray cluster setup NeMo Retriever Library uses Ray Data for distributed ingestion and benchmarking. [NeMo Ray run guide](https://docs.nvidia.com/nemo/run/latest/guides/ray.html) From 823775dbba07beb9fb201dfb6ebc1dba44075535 Mon Sep 17 00:00:00 2001 From: Jeremy Dyer Date: Mon, 16 Mar 2026 14:26:58 -0400 Subject: [PATCH 31/94] Release prep: update version references to 26.3.0 (#1638) --- docker-compose.yaml | 2 +- docs/docs/extraction/helm.md | 2 +- docs/docs/extraction/quickstart-guide.md | 2 +- docs/docs/extraction/quickstart-library-mode.md | 2 +- docs/docs/extraction/releasenotes-nv-ingest.md | 2 +- docs/docs/extraction/user-defined-functions.md | 2 +- helm/Chart.yaml | 2 +- helm/README.md | 8 ++++---- helm/README.md.gotmpl | 6 +++--- helm/values.yaml | 2 +- nemo_retriever/pyproject.toml | 12 ++++++------ src/nv_ingest/api/main.py | 2 +- tools/harness/pyproject.toml | 12 ++++++------ tools/harness/test_configs.yaml | 2 +- 14 files changed, 29 insertions(+), 29 deletions(-) diff --git a/docker-compose.yaml b/docker-compose.yaml index dc7dea85a..080986646 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -262,7 +262,7 @@ services: - audio nv-ingest-ms-runtime: - image: nvcr.io/nvidia/nemo-microservices/nv-ingest:26.3.0-RC4 + image: nvcr.io/nvidia/nemo-microservices/nv-ingest:26.3.0 shm_size: 40gb # Should be at minimum 30% of assigned memory per Ray documentation build: context: ${NV_INGEST_ROOT:-.} diff --git a/docs/docs/extraction/helm.md b/docs/docs/extraction/helm.md index 5e5c787cd..bcc63b4c0 100644 --- a/docs/docs/extraction/helm.md +++ b/docs/docs/extraction/helm.md @@ -3,7 +3,7 @@ To deploy [NeMo Retriever Library](overview.md) by using Helm, -refer to [NeMo Retriever Helm Charts](https://github.com/NVIDIA/NeMo-Retriever/blob/release/26.3.0-RC4/helm/README.md). +refer to [NeMo Retriever Helm Charts](https://github.com/NVIDIA/NeMo-Retriever/blob/release/26.3.0/helm/README.md). !!! note "Air-gapped environments" diff --git a/docs/docs/extraction/quickstart-guide.md b/docs/docs/extraction/quickstart-guide.md index 111638f1e..428d1c890 100644 --- a/docs/docs/extraction/quickstart-guide.md +++ b/docs/docs/extraction/quickstart-guide.md @@ -84,7 +84,7 @@ h. Run the command `docker ps`. You should see output similar to the following. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES uv venv --python 3.12 nv-ingest-dev source nv-ingest-dev/bin/activate -uv pip install nv-ingest==26.3.0-RC4 nv-ingest-api==26.3.0-RC4 nv-ingest-client==26.3.0-RC4 +uv pip install nv-ingest==26.3.0 nv-ingest-api==26.3.0 nv-ingest-client==26.3.0 ``` !!! tip diff --git a/docs/docs/extraction/quickstart-library-mode.md b/docs/docs/extraction/quickstart-library-mode.md index 2e5042f10..9dbbd3e3b 100644 --- a/docs/docs/extraction/quickstart-library-mode.md +++ b/docs/docs/extraction/quickstart-library-mode.md @@ -34,7 +34,7 @@ Use the following procedure to prepare your environment. ``` uv venv --python 3.12 nvingest && \ source nvingest/bin/activate && \ - uv pip install nemo-retriever==26.3.0-RC4 milvus-lite==2.4.12 + uv pip install nemo-retriever==26.3.0 milvus-lite==2.4.12 ``` !!! tip diff --git a/docs/docs/extraction/releasenotes-nv-ingest.md b/docs/docs/extraction/releasenotes-nv-ingest.md index 22aeac345..445a58e04 100644 --- a/docs/docs/extraction/releasenotes-nv-ingest.md +++ b/docs/docs/extraction/releasenotes-nv-ingest.md @@ -12,7 +12,7 @@ This documentation contains the release notes for [NeMo Retriever Library](overv The NeMo Retriever Library 26.03 release adds new hardware and software support, and other improvements. -To upgrade the Helm Charts for this version, refer to [NeMo Retriever Library Helm Charts](https://github.com/NVIDIA/NeMo-Retriever/blob/release/26.3.0-RC1/helm/README.md). +To upgrade the Helm Charts for this version, refer to [NeMo Retriever Library Helm Charts](https://github.com/NVIDIA/NeMo-Retriever/blob/release/26.3.0/helm/README.md). Updates and enhancements in the 26.03 release include the following: diff --git a/docs/docs/extraction/user-defined-functions.md b/docs/docs/extraction/user-defined-functions.md index 62013d1d8..eae1f5a4a 100644 --- a/docs/docs/extraction/user-defined-functions.md +++ b/docs/docs/extraction/user-defined-functions.md @@ -941,6 +941,6 @@ def debug_udf(control_message: IngestControlMessage) -> IngestControlMessage: ## Related Topics -- [NeMo Retriever Library UDF Examples](https://github.com/NVIDIA/NeMo-Retriever/blob/release/26.3.0-RC1/examples/udfs/README.md) +- [NeMo Retriever Library UDF Examples](https://github.com/NVIDIA/NeMo-Retriever/blob/release/26.3.0/examples/udfs/README.md) - [User-Defined Stages for NeMo Retriever Library](user-defined-stages.md) - [NimClient Usage](nimclient.md) diff --git a/helm/Chart.yaml b/helm/Chart.yaml index 5b018b724..616da93ef 100644 --- a/helm/Chart.yaml +++ b/helm/Chart.yaml @@ -2,7 +2,7 @@ apiVersion: v2 name: nv-ingest description: NV-Ingest Microservice type: application -version: 26.3.0-RC4 +version: 26.3.0 maintainers: - name: NVIDIA Corporation url: https://www.nvidia.com/ diff --git a/helm/README.md b/helm/README.md index e1e43362e..d1a752be3 100644 --- a/helm/README.md +++ b/helm/README.md @@ -45,7 +45,7 @@ To install or upgrade the Helm chart, run the following code. helm upgrade \ --install \ nv-ingest \ - https://helm.ngc.nvidia.com/nvidia/nemo-microservices/charts/nv-ingest-26.3.0-RC4.tgz \ + https://helm.ngc.nvidia.com/nvidia/nemo-microservices/charts/nv-ingest-26.3.0.tgz \ -n ${NAMESPACE} \ --username '$oauthtoken' \ --password "${NGC_API_KEY}" \ @@ -54,7 +54,7 @@ helm upgrade \ --set ngcApiSecret.create=true \ --set ngcApiSecret.password="${NGC_API_KEY}" \ --set image.repository="nvcr.io/nvidia/nemo-microservices/nv-ingest" \ - --set image.tag="26.3.0-RC4" + --set image.tag="26.3.0" ``` Optionally you can create your own versions of the `Secrets` if you do not want to use the creation via the helm chart. @@ -105,7 +105,7 @@ For more information, refer to [NV-Ingest-Client](https://github.com/NVIDIA/nv-i # Just to be cautious we remove any existing installation pip uninstall nv-ingest-client -pip install nv-ingest-client==26.3.0-RC4 +pip install nv-ingest-client==26.3.0 ``` #### Rest Endpoint Ingress @@ -347,7 +347,7 @@ You can also use NV-Ingest's Python client API to interact with the service runn | fullnameOverride | string | `""` | | | image.pullPolicy | string | `"IfNotPresent"` | | | image.repository | string | `"nvcr.io/nvidia/nemo-microservices/nv-ingest"` | | -| image.tag | string | `"26.3.0-RC4"` | | +| image.tag | string | `"26.3.0"` | | | imagePullSecrets[0].name | string | `"ngc-api"` | | | imagePullSecrets[1].name | string | `"ngc-secret"` | | | ingress.annotations | object | `{}` | | diff --git a/helm/README.md.gotmpl b/helm/README.md.gotmpl index 3686cd1fc..450c62b60 100644 --- a/helm/README.md.gotmpl +++ b/helm/README.md.gotmpl @@ -46,7 +46,7 @@ To install or upgrade the Helm chart, run the following code. helm upgrade \ --install \ nv-ingest \ - https://helm.ngc.nvidia.com/nvidia/nemo-microservices/charts/nv-ingest-26.3.0-RC4.tgz \ + https://helm.ngc.nvidia.com/nvidia/nemo-microservices/charts/nv-ingest-26.3.0.tgz \ -n ${NAMESPACE} \ --username '$oauthtoken' \ --password "${NGC_API_KEY}" \ @@ -55,7 +55,7 @@ helm upgrade \ --set ngcApiSecret.create=true \ --set ngcApiSecret.password="${NGC_API_KEY}" \ --set image.repository="nvcr.io/nvidia/nemo-microservices/nv-ingest" \ - --set image.tag="26.3.0-RC4" + --set image.tag="26.3.0" ``` Optionally you can create your own versions of the `Secrets` if you do not want to use the creation via the helm chart. @@ -107,7 +107,7 @@ For more information, refer to [NV-Ingest-Client](https://github.com/NVIDIA/nv-i # Just to be cautious we remove any existing installation pip uninstall nv-ingest-client -pip install nv-ingest-client==26.3.0-RC4 +pip install nv-ingest-client==26.3.0 ``` #### Rest Endpoint Ingress diff --git a/helm/values.yaml b/helm/values.yaml index d0cdd9364..49132b116 100644 --- a/helm/values.yaml +++ b/helm/values.yaml @@ -28,7 +28,7 @@ nameOverride: "" image: pullPolicy: IfNotPresent repository: "nvcr.io/nvidia/nemo-microservices/nv-ingest" - tag: "26.3.0-RC4" + tag: "26.3.0" ## @section Pod Configuration ## @param podAnnotations [object] Sets additional annotations on the main deployment pods diff --git a/nemo_retriever/pyproject.toml b/nemo_retriever/pyproject.toml index fc713c8ce..09607b165 100644 --- a/nemo_retriever/pyproject.toml +++ b/nemo_retriever/pyproject.toml @@ -30,9 +30,9 @@ dependencies = [ "typer>=0.12.0", "pyyaml>=6.0", "lancedb", - "nv-ingest==26.3.0rc4", - "nv-ingest-api==26.3.0rc4", - "nv-ingest-client==26.3.0rc4", + "nv-ingest==26.3.0", + "nv-ingest-api==26.3.0", + "nv-ingest-client==26.3.0", "fastapi>=0.114.0", "uvicorn[standard]>=0.30.0", "httpx>=0.27.0", @@ -90,9 +90,9 @@ retriever = "nemo_retriever.__main__:main" version = {attr = "nemo_retriever.version.get_build_version"} [tool.uv.sources] -nv-ingest = { path = "../src/", editable = true } -nv-ingest-api = { path = "../api/", editable = true } -nv-ingest-client = { path = "../client/", editable = true } +#nv-ingest = { path = "../src/", editable = true } +#nv-ingest-api = { path = "../api/", editable = true } +#nv-ingest-client = { path = "../client/", editable = true } #nemotron-page-elements-v3 = { index = "test-pypi" } #nemotron-graphic-elements-v1 = { index = "test-pypi" } #nemotron-table-structure-v1 = { index = "test-pypi" } diff --git a/src/nv_ingest/api/main.py b/src/nv_ingest/api/main.py index a5a3f7cb3..4635861db 100644 --- a/src/nv_ingest/api/main.py +++ b/src/nv_ingest/api/main.py @@ -23,7 +23,7 @@ app = FastAPI( title="NV-Ingest Microservice", description="Service for ingesting heterogenous datatypes", - version="26.3.0-RC4", + version="26.3.0", contact={ "name": "NVIDIA Corporation", "url": "https://nvidia.com", diff --git a/tools/harness/pyproject.toml b/tools/harness/pyproject.toml index 2e661b019..e87500a09 100644 --- a/tools/harness/pyproject.toml +++ b/tools/harness/pyproject.toml @@ -10,9 +10,9 @@ dependencies = [ "pyyaml>=6.0", "requests>=2.32.5", "pynvml>=11.5.0", - "nv-ingest==26.3.0rc4", - "nv-ingest-api==26.3.0rc4", - "nv-ingest-client==26.3.0rc4", + "nv-ingest==26.3.0", + "nv-ingest-api==26.3.0", + "nv-ingest-client==26.3.0", "milvus-lite==2.4.12", "pypdfium2>=4.30.0,<5.0.0", "nemotron-page-elements-v3==3.0.1", @@ -33,9 +33,9 @@ nv-ingest-harness-stats = "nv_ingest_harness.cli.stats:main" package = true [tool.uv.sources] -nv-ingest = { path = "../../src", editable = true } -nv-ingest-api = { path = "../../api/", editable = true } -nv-ingest-client = { path = "../../client/", editable = true } +#nv-ingest = { path = "../../src", editable = true } +#nv-ingest-api = { path = "../../api/", editable = true } +#nv-ingest-client = { path = "../../client/", editable = true } nemotron-page-elements-v3 = { index = "test-pypi" } nemotron-graphic-elements-v1 = { index = "test-pypi" } nemotron-table-structure-v1 = { index = "test-pypi" } diff --git a/tools/harness/test_configs.yaml b/tools/harness/test_configs.yaml index a9278ef62..30b083a8d 100644 --- a/tools/harness/test_configs.yaml +++ b/tools/harness/test_configs.yaml @@ -28,7 +28,7 @@ active: kubectl_bin: microk8s kubectl # kubectl binary command (e.g., "kubectl", "microk8s kubectl") kubectl_sudo: null # Prepend sudo to kubectl commands (null = same as helm_sudo) chart: nemo-microservices/nv-ingest # Remote chart reference (set to null to use local chart from ./helm) - chart_version: 26.3.0-RC4 # Chart version (required for remote charts) + chart_version: 26.3.0 # Chart version (required for remote charts) release: nv-ingest namespace: nv-ingest values_file: .helm-env # Optional: path to values file From 7b543855bd0ff710b3784d4c6baf1073b7759c36 Mon Sep 17 00:00:00 2001 From: Kurt Heiss Date: Tue, 17 Mar 2026 11:27:15 -0700 Subject: [PATCH 32/94] 26.03 RNs (#1641) --- .../docs/extraction/releasenotes-nv-ingest.md | 55 ++++++++++--------- 1 file changed, 29 insertions(+), 26 deletions(-) diff --git a/docs/docs/extraction/releasenotes-nv-ingest.md b/docs/docs/extraction/releasenotes-nv-ingest.md index 445a58e04..c86c35918 100644 --- a/docs/docs/extraction/releasenotes-nv-ingest.md +++ b/docs/docs/extraction/releasenotes-nv-ingest.md @@ -4,32 +4,38 @@ This documentation contains the release notes for [NeMo Retriever Library](overv !!! note - NVIDIA Ingest (nv-ingest) has been renamed to the NeMo Retriever Library. - - - -## 26.03 Release Notes (in progress) - -The NeMo Retriever Library 26.03 release adds new hardware and software support, and other improvements. - -To upgrade the Helm Charts for this version, refer to [NeMo Retriever Library Helm Charts](https://github.com/NVIDIA/NeMo-Retriever/blob/release/26.3.0/helm/README.md). - -Updates and enhancements in the 26.03 release include the following: - -- NV-Ingest github repo renamed to NeMo-Retriever -- NeMo Retriever Extraction pipeline renamed to NeMo Retriever Library -- NeMo Retriever Library now support two deployment options: -- Load Hugging Face models locally on your GPU. -- Use locally deployed NeMo Retriever NIM endpoints for embedding and OCR. -- Note on Air-gapped support -- Added support for RTX4500 Pro Blackwell SKU -- Added support for llama-nemotron-embed-vl-v2 ? - - -NeMo Retriever Library currently does not support image captioning via VLM. It will be added in the next release. + NVIDIA Ingest (nv-ingest) has been renamed to the NeMo Retriever Library. + +## 26.03 Release Notes (26.1.3) + +NVIDIA® NeMo Retriever Library version 26.03 adds broader hardware and software support along with many pipeline, evaluation, and deployment enhancements. + +To upgrade the Helm charts for this release, refer to the (NeMo Retriever Library Helm Charts](https://github.com/NVIDIA/NeMo-Retriever/blob/release/26.3.0/helm/README.md). + +Highlights for the 26.03 release include: + +- NV-Ingest GitHub repo renamed to NeMo-Retriever +- NeMo Retriever Extraction pipeline renamed to NeMo Retriever Library +- NeMo Retriever Library now supports two deployment options: + - A new no-container, pip-installable in-process library for development (available on PyPI) + - Existing production-ready Helm chart with NIMs +- Added documentation notes on Air-gapped deployment support +- Added documentation notes on OpenShift support +- Added support for RTX4500 Pro Blackwell SKU +- Added support for llama-nemotron-embed-vl-v2 in text and text+image modes +- New extract methods `pdfium_hybrid` and `ocr` target scanned PDFs to improve text and layout extraction from image-based pages +- VLM-based image caption enhancements: + - Infographics can be captioned + - Reasoning mode is configurable +- Enabled hybrid search with Lancedb +- Added retrieval_bench subfolder with generalizable agentic retrieval pipeline +- The project now uses UV as the primary environment and package manager instead of Conda, resulting in faster installs and simpler dependency handling +- Default Redis TTL increased from 1–2 hours to 48 hours so long-running jobs (e.g., VLM captioning) don’t expire before completion +- NeMo Retriever Library currently does not support image captioning via VLM; this feature will be added in the next release ## Release Notes for Previous Versions +| [26.1.2](https://docs.nvidia.com/nemo/retriever/26.1.2/extraction/releasenotes-nv-ingest/) | [26.1.1](https://docs.nvidia.com/nemo/retriever/26.1.1/extraction/releasenotes-nv-ingest/) | [25.9.0](https://docs.nvidia.com/nemo/retriever/25.9.0/extraction/releasenotes-nv-ingest/) | [25.6.3](https://docs.nvidia.com/nemo/retriever/25.6.3/extraction/releasenotes-nv-ingest/) @@ -38,9 +44,6 @@ NeMo Retriever Library currently does not support image captioning via VLM. It w | [25.3.0](https://docs.nvidia.com/nemo/retriever/25.3.0/extraction/releasenotes-nv-ingest/) | [24.12.1](https://docs.nvidia.com/nemo/retriever/25.3.0/extraction/releasenotes-nv-ingest/) | [24.12.0](https://docs.nvidia.com/nemo/retriever/25.3.0/extraction/releasenotes-nv-ingest/) -| - - ## Related Topics From b7be9ba77096361d8abd2762c4163f393c2eafdc Mon Sep 17 00:00:00 2001 From: Kurt Heiss Date: Tue, 17 Mar 2026 19:12:53 -0700 Subject: [PATCH 33/94] update quickstart library mode (#1642) --- .../extraction/quickstart-library-mode.md | 481 +----------------- 1 file changed, 2 insertions(+), 479 deletions(-) diff --git a/docs/docs/extraction/quickstart-library-mode.md b/docs/docs/extraction/quickstart-library-mode.md index 9dbbd3e3b..0878eb5c1 100644 --- a/docs/docs/extraction/quickstart-library-mode.md +++ b/docs/docs/extraction/quickstart-library-mode.md @@ -1,484 +1,7 @@ -# Deploy Without Containers (Library Mode) for NeMo Retriever Library - -[NeMo Retriever Library](overview.md) is typically deployed as a cluster of containers for robust, scalable production use. +# NeMo Retriever Library !!! note NVIDIA Ingest (nv-ingest) has been renamed to the NeMo Retriever Library. -In addition, you can use library mode, which is intended for the following cases: - -- Local development -- Experimentation and testing -- Small-scale workloads, such as workloads of fewer than 100 documents - - -By default, library mode depends on NIMs that are hosted on build.nvidia.com. -In library mode you launch the main pipeline service directly within a Python process, -while all other services (such as embedding and storage) are hosted remotely in the cloud. - -To get started using library mode, you need the following: - -- Linux operating systems (Ubuntu 22.04 or later recommended) or MacOS -- Python 3.12 -- We strongly advise using an isolated Python virtual env with [uv](https://docs.astral.sh/uv/getting-started/installation/). - - - -## Step 1: Prepare Your Environment - -Use the following procedure to prepare your environment. - -1. Run the following code to create your Python environment. - - ``` - uv venv --python 3.12 nvingest && \ - source nvingest/bin/activate && \ - uv pip install nemo-retriever==26.3.0 milvus-lite==2.4.12 - ``` - - !!! tip - - To confirm that you have activated your virtual environment, run `which python` and confirm that you see your virtual environment path in the result. You can do this before any python command that you run. - -2. Set or create a .env file that contains your NVIDIA Build API key and other environment variables. - - !!! note - - If you have an NGC API key, you can use it here. For more information, refer to [Generate Your NGC Keys](ngc-api-key.md) and [Environment Configuration Variables](environment-config.md). - - - To set your variables, use the following code. - - ``` - export NVIDIA_API_KEY=nvapi- - ``` - - To add your variables to a .env file, include the following. - - ``` - NVIDIA_API_KEY=nvapi- - ``` - - -## Step 2: Ingest Documents - -You can submit jobs programmatically by using Python. - -!!! tip - - For more Python examples, refer to [NeMo Retriever Library: Python Client Quick Start Guide](https://github.com/NVIDIA/NeMo-Retriever/blob/main/client/client_examples/examples/python_client_usage.ipynb). - - -If you have a very high number of CPUs, and see the process hang without progress, -we recommend that you use `taskset` to limit the number of CPUs visible to the process. -Use the following code. - -``` -taskset -c 0-3 python your_ingestion_script.py -``` - -On a 4 CPU core low end laptop, the following code should take about 10 seconds. - -```python -import time - -from nemo_retriever.framework.orchestration.ray.util.pipeline.pipeline_runners import run_pipeline -from nemo_retriever.client import Ingestor, NemoRetrieverClient -from nemo_retriever.util.message_brokers.simple_message_broker import SimpleClient -from nemo_retriever.util.process_json_files import ingest_json_results_to_blob - -def main(): - # Start the pipeline subprocess for library mode - run_pipeline(block=False, disable_dynamic_scaling=True, run_in_subprocess=True) - - client = NvIngestClient( - message_client_allocator=SimpleClient, - message_client_port=7671, - message_client_hostname="localhost", - ) - - # gpu_cagra accelerated indexing is not available in milvus-lite - # Provide a filename for milvus_uri to use milvus-lite - milvus_uri = "milvus.db" - collection_name = "test" - sparse = False - - # do content extraction from files - ingestor = ( - Ingestor(client=client) - .files("data/multimodal_test.pdf") - .extract( - extract_text=True, - extract_tables=True, - extract_charts=True, - extract_images=True, - table_output_format="markdown", - extract_infographics=True, - # extract_method="nemotron_parse", #Slower, but maximally accurate, especially for PDFs with pages that are scanned images - text_depth="page", - ) - .embed() - .vdb_upload( - collection_name=collection_name, - milvus_uri=milvus_uri, - sparse=sparse, - # for llama-3.2 embedder, use 1024 for e5-v5 - dense_dim=2048, - ) - ) - - print("Starting ingestion..") - t0 = time.time() - - # Return both successes and failures - # Use for large batches where you want successful chunks/pages to be committed, while collecting detailed diagnostics for failures. - results, failures = ingestor.ingest(show_progress=True, return_failures=True) - - # Return only successes - # results = ingestor.ingest(show_progress=True) - - t1 = time.time() - print(f"Total time: {t1 - t0} seconds") - - # results blob is directly inspectable - if results: - print(ingest_json_results_to_blob(results[0])) - - # (optional) Review any failures that were returned - if failures: - print(f"There were {len(failures)} failures. Sample: {failures[0]}") - -if __name__ == "__main__": - main() -``` - -!!! note - - For advanced visual parsing with library mode, uncomment `extract_method="nemotron_parse"` in the previous code. For more information, refer to [Advanced Visual Parsing](nemoretriever-parse.md). - - -You can see the extracted text that represents the content of the ingested test document. - -```shell -Starting ingestion.. -Total time: 9.243880033493042 seconds - -TestingDocument -A sample document with headings and placeholder text -Introduction -This is a placeholder document that can be used for any purpose. It contains some -headings and some placeholder text to fill the space. The text is not important and contains -no real value, but it is useful for testing. Below, we will have some simple tables and charts -that we can use to confirm Ingest is working as expected. -Table 1 -This table describes some animals, and some activities they might be doing in specific -locations. -Animal Activity Place -Gira@e Driving a car At the beach -Lion Putting on sunscreen At the park -Cat Jumping onto a laptop In a home o@ice -Dog Chasing a squirrel In the front yard -Chart 1 -This chart shows some gadgets, and some very fictitious costs. - -... document extract continues ... -``` - -## Step 3: Query Ingested Content - -To query for relevant snippets of the ingested content, and use them with an LLM to generate answers, use the following code. - -```python -import os -from openai import OpenAI -from nemo_retriever.util.milvus import query - -milvus_uri = "milvus.db" -collection_name = "test" -sparse=False - -queries = ["Which animal is responsible for the typos?"] - -retrieved_docs = query( - queries, - collection_name, - milvus_uri=milvus_uri, - hybrid=sparse, - top_k=1, -) - -# simple generation example -extract = retrieved_docs[0][0]["entity"]["text"] -client = OpenAI( - base_url = "https://integrate.api.nvidia.com/v1", - api_key = os.environ["NVIDIA_API_KEY"] -) - -prompt = f"Using the following content: {extract}\n\n Answer the user query: {queries[0]}" -print(f"Prompt: {prompt}") -completion = client.chat.completions.create( - model="nvidia/llama-3.1-nemotron-nano-vl-8b-v1", - messages=[{"role":"user","content": prompt}], -) -response = completion.choices[0].message.content - -print(f"Answer: {response}") -``` - -```shell -Prompt: Using the following content: Table 1 -| This table describes some animals, and some activities they might be doing in specific locations. | This table describes some animals, and some activities they might be doing in specific locations. | This table describes some animals, and some activities they might be doing in specific locations. | -| Animal | Activity | Place | -| Giraffe | Driving a car | At the beach | -| Lion | Putting on sunscreen | At the park | -| Cat | Jumping onto a laptop | In a home office | -| Dog | Chasing a squirrel | In the front yard | - - Answer the user query: Which animal is responsible for the typos? -Answer: A clever query! - -Based on the provided Table 1, I'd make an educated inference to answer your question. Since the activities listed are quite unconventional for the respective animals (e.g., a giraffe driving a car, a lion putting on sunscreen), it's likely that the table is using humor or hypothetical scenarios. - -Given this context, the question "Which animal is responsible for the typos?" is probably a tongue-in-cheek inquiry, as there's no direct information in the table about typos or typing activities. - -However, if we were to make a playful connection, we could look for an animal that's: - -1. Typically found in a setting where typing might occur (e.g., an office). -2. Engaging in an activity that could potentially lead to typos (e.g., interacting with a typing device). - -Based on these loose criteria, I'd jokingly point to: - -**Cat** as the potential culprit, since it's: - * Located "In a home office" - * Engaged in "Jumping onto a laptop", which could theoretically lead to accidental keystrokes or typos if the cat were to start "walking" on the keyboard! - -Please keep in mind that this response is purely humorous and interpretative, as the table doesn't explicitly mention typos or provide a straightforward answer to the question. -``` - - - -## Logging Configuration - -The NeMo Retriever Library uses [Ray](https://docs.ray.io/en/latest/index.html) for logging. -For details, refer to [Configure Ray Logging](ray-logging.md). - -By default, library mode runs in quiet mode to minimize startup noise. -Quiet mode automatically configures the following environment variables. - -| Variable | Quiet Mode Value | Description | -|--------------------------------------|------------------|-------------| -| `INGEST_RAY_LOG_LEVEL` | `PRODUCTION` | Sets Ray logging to ERROR level to reduce noise. | -| `RAY_ACCEL_ENV_VAR_OVERRIDE_ON_ZERO` | `0` | Silences Ray accelerator warnings | -| `OTEL_SDK_DISABLED` | `true` | Disables OpenTelemetry trace export errors | - - -If you want to see detailed startup logs for debugging, use one of the following options: - -- Set `quiet=False` when you run the pipeline as shown following. - - ```python - run_pipeline(block=False, disable_dynamic_scaling=True, run_in_subprocess=True, quiet=False) - ``` - -- Set the environment variables manually before you run the pipeline as shown following. - - ```bash - export INGEST_RAY_LOG_LEVEL=DEVELOPMENT # or DEBUG for maximum verbosity - ``` - - - -## Library Mode Communication and Advanced Examples - -Communication in library mode is handled through a simplified, 3-way handshake message broker called `SimpleBroker`. - -Attempting to run a library-mode process co-located with a Docker Compose deployment does not work by default. -The Docker Compose deployment typically creates a firewall rule or port mapping that captures traffic to port `7671`, -which prevents the `SimpleBroker` from receiving messages. -Always ensure that you use library mode in isolation, without an active containerized deployment listening on the same port. - - -### Example `launch_libmode_service.py` - -This example launches the pipeline service in a subprocess, -and keeps it running until it is interrupted (for example, by pressing `Ctrl+C`). -It listens for ingestion requests on port `7671` from an external client. - -```python -import logging -import os - -from nemo_retriever.framework.orchestration.ray.util.pipeline.pipeline_runners import run_pipeline -from nemo_retriever.util.logging.configuration import configure_logging as configure_local_logging - -# Configure the logger -logger = logging.getLogger(__name__) - -local_log_level = os.getenv("INGEST_LOG_LEVEL", "DEFAULT") -if local_log_level in ("DEFAULT",): - local_log_level = "INFO" - -configure_local_logging(local_log_level) - - -def main(): - """ - Launch the libmode pipeline service using the embedded default configuration. - """ - try: - # Start pipeline and block until interrupted - # Note: stdout/stderr cannot be passed when run_in_subprocess=True (not picklable) - # Use quiet=False to see verbose startup logs - _ = run_pipeline( - block=True, - disable_dynamic_scaling=True, - run_in_subprocess=True, - ) - except KeyboardInterrupt: - logger.info("Keyboard interrupt received. Shutting down...") - except Exception as e: - logger.error(f"An unexpected error occurred: {e}", exc_info=True) - - -if __name__ == "__main__": - main() -``` - -### Example `launch_libmode_and_run_ingestor.py` - -This example starts the pipeline service in-process, -and immediately runs an ingestion client against it in the same parent process. - -```python -import logging -import os -import time - -from nemo_retriever.framework.orchestration.ray.util.pipeline.pipeline_runners import run_pipeline -from nemo_retriever.util.logging.configuration import configure_logging as configure_local_logging -from nemo_retriever.util.message_brokers.simple_message_broker import SimpleClient -from nemo_retriever.client import Ingestor -from nemo_retriever.client import NemoRetrieverClient - -# Configure the logger -logger = logging.getLogger(__name__) - -local_log_level = os.getenv("INGEST_LOG_LEVEL", "INFO") -if local_log_level in ("DEFAULT",): - local_log_level = "INFO" - -configure_local_logging(local_log_level) - - -def run_ingestor(): - """ - Set up and run the ingestion process to send traffic against the pipeline. - """ - logger.info("Setting up Ingestor client...") - client = NvIngestClient( - message_client_allocator=SimpleClient, message_client_port=7671, message_client_hostname="localhost" - ) - - ingestor = ( - Ingestor(client=client) - .files("./data/multimodal_test.pdf") - .extract( - extract_text=True, - extract_tables=True, - extract_charts=True, - extract_images=True, - table_output_format="markdown", - extract_infographics=False, - text_depth="page", - ) - .split(chunk_size=1024, chunk_overlap=150) - .embed() - ) - - try: - results, _ = ingestor.ingest(show_progress=False, return_failures=True) - logger.info("Ingestion completed successfully.") - except Exception as e: - logger.error(f"Ingestion failed: {e}") - raise - - print("\nIngest done.") - print(f"Got {len(results)} results.") - - -def main(): - """ - Launch the libmode pipeline service and run the ingestor against it. - Uses the embedded default libmode pipeline configuration. - """ - pipeline = None - try: - # Start pipeline in subprocess - # Note: stdout/stderr cannot be passed when run_in_subprocess=True (not picklable) - # Use quiet=False to see verbose startup logs - pipeline = run_pipeline( - block=False, - disable_dynamic_scaling=True, - run_in_subprocess=True, - ) - time.sleep(10) - run_ingestor() - # Run other code... - except KeyboardInterrupt: - logger.info("Keyboard interrupt received. Shutting down...") - except Exception as e: - logger.error(f"Error running pipeline: {e}") - finally: - if pipeline: - pipeline.stop() - logger.info("Shutting down pipeline...") - - -if __name__ == "__main__": - main() -``` - - - -## The `run_pipeline` Function Reference - -The `run_pipeline` function is the main entry point to start the NeMo Retriever Library pipeline. -It can run in-process or as a subprocess. - -The `run_pipeline` function accepts the following parameters. - -| Parameter | Type | Default | Required? | Description | -|--------------------------|------------------------|---------|-----------|-------------------------------------------------| -| pipeline_config | PipelineConfigSchema | — | Yes | A configuration object that specifies how the pipeline should be constructed. | -| run_in_subprocess | bool | False | Yes | `True` to launch the pipeline in a separate Python subprocess. `False` to run in the current process. | -| block | bool | True | Yes | `True` to run the pipeline synchronously. The function returns after it finishes. `False` to return an interface for external pipeline control. | -| disable_dynamic_scaling | bool | None | No | `True` to disable autoscaling regardless of global settings. `None` to use the global default behavior. | -| dynamic_memory_threshold | float | None | No | A value between `0.0` and `1.0`. If dynamic scaling is enabled, triggers autoscaling when memory usage crosses this threshold. | -| stdout | TextIO | None | No | Redirect the subprocess `stdout` to a file or stream. If `None`, defaults to `/dev/null`. | -| stderr | TextIO | None | No | Redirect subprocess `stderr` to a file or stream. If `None`, defaults to `/dev/null`. | -| libmode | bool | True | No | `True` to load the default library mode pipeline configuration when `ingest_config` is `None`. | -| quiet | bool | None | No | `True` to suppress verbose startup logs (PRODUCTION preset). `None` defaults to `True` when `libmode=True`. Set to `False` for verbose output. | - - -The `run_pipeline` function returns the following values, depending on the parameters that you set: - -- **run_in_subprocess=False and block=True** — The function returns a `float` that represents the elapsed time in seconds. -- **run_in_subprocess=False and block=False** — The function returns a `RayPipelineInterface` object. -- **run_in_subprocess=True and block=True** — The function returns `0.0`. -- **run_in_subprocess=True and block=False** — The function returns a `RayPipelineInterface` object. - - -The `run_pipeline` throws the following errors: - -- **RuntimeError** — A subprocess failed to start, or exited with error. -- **Exception** — Any other failure during pipeline setup or execution. - - - -## Related Topics - -- [Prerequisites](prerequisites.md) -- [Support Matrix](support-matrix.md) -- [Deploy With Docker Compose (Self-Hosted)](quickstart-guide.md) -- [Deploy With Helm](helm.md) -- [Notebooks](notebooks.md) -- [Enterprise RAG Blueprint](https://build.nvidia.com/nvidia/multimodal-pdf-data-extraction-for-enterprise-rag) +Use the [Quick Start for NeMo Retriever Library](https://github.com/NVIDIA/NeMo-Retriever/blob/26.03/nemo_retriever/README.md) to set up and run the NeMo Retriever Library locally, so you can build a GPU‑accelerated, multimodal RAG ingestion pipeline that parses PDFs, HTML, text, audio, and video into LanceDB vector embeddings, integrates with Nemotron RAG models (locally or via NIM endpoints), which includes Ray‑based scaling plus built‑in recall evaluation. \ No newline at end of file From 1c6ec7993bcf3fc853034a168a21f413d7b1349b Mon Sep 17 00:00:00 2001 From: Kurt Heiss Date: Tue, 17 Mar 2026 19:13:08 -0700 Subject: [PATCH 34/94] update release version from 26.1.3 to 26.3.0 on Release Notes (#1643) --- docs/docs/extraction/releasenotes-nv-ingest.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs/extraction/releasenotes-nv-ingest.md b/docs/docs/extraction/releasenotes-nv-ingest.md index c86c35918..2e966efe0 100644 --- a/docs/docs/extraction/releasenotes-nv-ingest.md +++ b/docs/docs/extraction/releasenotes-nv-ingest.md @@ -6,7 +6,7 @@ This documentation contains the release notes for [NeMo Retriever Library](overv NVIDIA Ingest (nv-ingest) has been renamed to the NeMo Retriever Library. -## 26.03 Release Notes (26.1.3) +## 26.03 Release Notes (26.3.0) NVIDIA® NeMo Retriever Library version 26.03 adds broader hardware and software support along with many pipeline, evaluation, and deployment enhancements. From cfd0b729ffee4d4da40c42b214733deee5c92e07 Mon Sep 17 00:00:00 2001 From: Kurt Heiss Date: Tue, 17 Mar 2026 19:13:35 -0700 Subject: [PATCH 35/94] Kheiss/bullets (#1644) Co-authored-by: sosahi --- docs/docs/extraction/releasenotes-nv-ingest.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/docs/extraction/releasenotes-nv-ingest.md b/docs/docs/extraction/releasenotes-nv-ingest.md index 2e966efe0..2c444ba09 100644 --- a/docs/docs/extraction/releasenotes-nv-ingest.md +++ b/docs/docs/extraction/releasenotes-nv-ingest.md @@ -17,16 +17,16 @@ Highlights for the 26.03 release include: - NV-Ingest GitHub repo renamed to NeMo-Retriever - NeMo Retriever Extraction pipeline renamed to NeMo Retriever Library - NeMo Retriever Library now supports two deployment options: - - A new no-container, pip-installable in-process library for development (available on PyPI) - - Existing production-ready Helm chart with NIMs + - A new no-container, pip-installable in-process library for development (available on PyPI) + - Existing production-ready Helm chart with NIMs - Added documentation notes on Air-gapped deployment support - Added documentation notes on OpenShift support - Added support for RTX4500 Pro Blackwell SKU - Added support for llama-nemotron-embed-vl-v2 in text and text+image modes - New extract methods `pdfium_hybrid` and `ocr` target scanned PDFs to improve text and layout extraction from image-based pages - VLM-based image caption enhancements: - - Infographics can be captioned - - Reasoning mode is configurable + - Infographics can be captioned + - Reasoning mode is configurable - Enabled hybrid search with Lancedb - Added retrieval_bench subfolder with generalizable agentic retrieval pipeline - The project now uses UV as the primary environment and package manager instead of Conda, resulting in faster installs and simpler dependency handling From 818de0af914cb4c418f4b5a1048839050ade5388 Mon Sep 17 00:00:00 2001 From: Kurt Heiss Date: Wed, 18 Mar 2026 09:18:40 -0700 Subject: [PATCH 36/94] Update README.md removed GitHub artifacts --- nemo_retriever/README.md | 15 +-------------- 1 file changed, 1 insertion(+), 14 deletions(-) diff --git a/nemo_retriever/README.md b/nemo_retriever/README.md index 6c6bb1c24..49feffc0c 100644 --- a/nemo_retriever/README.md +++ b/nemo_retriever/README.md @@ -10,11 +10,7 @@ You’ll set up a CUDA 13–compatible environment, install the library and its ## Prerequisites -<<<<<<< HEAD -Before you start, make sure your system meets the following requirements: -======= Before starting, make sure your system meets the following requirements: ->>>>>>> 15b2bc05 (Updating the nemo_retriever quickstart README (#1632)) - The host is running CUDA 13.x so that `libcudart.so.13` is available. - Your GPUs are visible to the system and compatible with CUDA 13.x. @@ -99,7 +95,6 @@ You can inspect how recall accuracy optimized text chunks for various content ty 'TestingDocument\r\nA sample document with headings and placeholder text\r\nIntroduction\r\nThis is a placeholder document that can be used for any purpose...' # markdown formatted table from the first page ->>> chunks[1]["text"] '| Table | 1 |\n| This | table | describes | some | animals, | and | some | activities | they | might | be | doing | in | specific |\n| locations. |\n| Animal | Activity | Place |\n| Giraffe | Driving | a | car | At | the | beach |\n| Lion | Putting | on | sunscreen | At | the | park |\n| Cat | Jumping | onto | a | laptop | In | a | home | office |\n| Dog | Chasing | a | squirrel | In | the | front | yard |\n| Chart | 1 |' # a chart from the first page @@ -213,19 +208,16 @@ ingestor = ( ``` *Note:* the `split()` task uses a tokenizer to split texts by a max_token length - -<<<<<<< HEAD ### Render results as markdown If you want a readable markdown view of extracted results, pass the full in-process result list to `nemo_retriever.io.to_markdown`. The helper now returns a `dict[str, str]` keyed by input filename, where each value is the document collapsed into one markdown string without per-page headers, so both single-document and multi-document runs follow the same contract. -======= + PDF text is split at the page level. HTML and .txt files have no natural page delimiters, so they almost always need to be paired with the `.split()` task. ->>>>>>> 15b2bc05 (Updating the nemo_retriever quickstart README (#1632)) ```python # html and text files - include a split task to prevent texts from exceeding the embedder's max sequence length @@ -235,7 +227,6 @@ ingestor = ( .extract() .split(max_tokens=5) #1024 by default, set low here to demonstrate chunking ) -<<<<<<< HEAD results = ingestor.ingest() markdown_docs = to_markdown(results) print(markdown_docs["multimodal_test.pdf"]) @@ -243,11 +234,7 @@ print(markdown_docs["multimodal_test.pdf"]) Use `to_markdown_by_page(results)` when you want a nested `dict[str, dict[int, str]]` instead, where each filename maps to its per-page markdown strings. -======= -``` - For audio and video files, ensure ffmpeg is installed by your system's package manager. ->>>>>>> 15b2bc05 (Updating the nemo_retriever quickstart README (#1632)) For example, with apt-get on Ubuntu: ```bash From 671d78aa9b0a945d9cb70a98ed26bae5222079d0 Mon Sep 17 00:00:00 2001 From: Julio Perez <37191411+jperez999@users.noreply.github.com> Date: Wed, 18 Mar 2026 13:43:28 -0400 Subject: [PATCH 37/94] Updating & simplifying main README (#1647) (#1650) --- README.md | 450 ++++++++------------------------------- contributing.md | 50 +++++ nemo_retriever/README.md | 16 +- 3 files changed, 148 insertions(+), 368 deletions(-) create mode 100644 contributing.md diff --git a/README.md b/README.md index f769225f8..d2358aa76 100644 --- a/README.md +++ b/README.md @@ -6,11 +6,9 @@ SPDX-License-Identifier: Apache-2.0 **Important: The default branch is main, which tracks active development and may be ahead of the latest supported release.** -For the latest stable release: +For the latest stable release use the [release/26.03 branch](https://github.com/NVIDIA/NeMo-Retriever/tree/26.03). -Use the latest release/* branch (for example, release/26.1.2) from the branch dropdown. - -See the corresponding NeMo Retriever Library documentation at https://docs.nvidia.com/nemo/retriever/latest/extraction/overview/ +See the corresponding [NeMo Retriever Library documentation](https://docs.nvidia.com/nemo/retriever/latest/extraction/overview/). # NeMo Retriever Library @@ -20,223 +18,81 @@ to find, contextualize, and extract text, tables, charts and infographics that y > [!Note] > NeMo Retriever extraction is also known as NVIDIA Ingest and nv-ingest. -NeMo Retriever Library enables parallelization of splitting documents into pages where artifacts are classified (such as text, tables, charts, and infographics), extracted, and further contextualized through optical character recognition (OCR) into a well defined JSON schema. From there, NeMo Retriever Library can optionally manage computation of embeddings for the extracted content, and optionally manage storing into a vector database [Milvus](https://milvus.io/). - -> [!Note] -> Cached and Deplot are deprecated. Instead, NeMo Retriever extraction now uses the yolox-graphic-elements NIM. With this change, you should now be able to run NeMo Retriever Extraction on a single 24GB A10G or better GPU. If you want to use the old pipeline, with Cached and Deplot, use the [NeMo Retriever Extraction 24.12.1 release](https://github.com/NVIDIA/nv-ingest/tree/24.12.1). - +NeMo Retriever Library enables parallelization of splitting documents into pages where artifacts are classified (such as text, tables, charts, and infographics), extracted, and further contextualized through optical character recognition (OCR) into a well defined JSON schema. From there, NeMo Retriever Library manages computaiton of embeddings for the extracted content as well as storing them in a vector database [Milvus](https://milvus.io/). The following diagram shows the NeMo Retriever Library pipeline. ![Pipeline Overview](https://docs.nvidia.com/nemo/retriever/extraction/images/overview-extraction.png) -## Table of Contents -1. [NeMo Retriever Library](#nemo-retriever-library) -2. [Prerequisites](#prerequisites) -3. [Quickstart](#library-mode-quickstart) -4. [Benchmarking](#benchmarking) -5. [GitHub Repository Structure](#github-repository-structure) -6. [Notices](#notices) - - -## What is NeMo Retriever Library? - -The NeMo Retriever Library is a library and microservice framework designed to perform the following functions:: - -- Accept a job specification that contains a document payload and a set of ingestion tasks to perform on that payload. -- Store the result of each job to retrieve later. The result is a dictionary that contains a list of metadata that describes the objects extracted from the base document, and processing annotations and timing/trace data. -- Support multiple methods of extraction for each document type to balance trade-offs between throughput and accuracy. For example, for .pdf documents, extraction is performed by using pdfium, [nemotron-parse](https://build.nvidia.com/nvidia/nemotron-parse), Unstructured.io, and Adobe Content Extraction Services. -- Support various types of before and after processing operations, including text splitting and chunking, transform and filtering, embedding generation, and image offloading to storage. - - -NeMo Retriever Extraction supports the following file types: - -- `avi` (early access) -- `bmp` -- `docx` -- `html` (converted to markdown format) -- `jpeg` -- `json` (treated as text) -- `md` (treated as text) -- `mkv` (early access) -- `mov` (early access) -- `mp3` -- `mp4` (early access) -- `pdf` -- `png` -- `pptx` -- `sh` (treated as text) -- `tiff` -- `txt` -- `wav` - - -### What NeMo Retriever Library Isn't - -NeMo Retriever Library does not do the following: - -- Run a static pipeline or fixed set of operations on every submitted document. -- Act as a wrapper for any specific document parsing library. - - -For more information, refer to the [NeMo Retriever Library documentation](https://docs.nvidia.com/nemo/retriever/extraction/overview/). - -## Documentation Resources - -- **[Official Documentation](https://docs.nvidia.com/nemo/retriever/extraction/)** - Complete user guides, API references, and deployment instructions -- **[Getting Started Guide](https://docs.nvidia.com/nemo/retriever/extraction/overview/)** - Overview and prerequisites for production deployments -- **[Benchmarking Guide](https://docs.nvidia.com/nemo/retriever/extraction/benchmarking/)** - Performance testing and recall evaluation framework -- **[MIG Deployment](https://docs.nvidia.com/nemo/retriever/extraction/mig-benchmarking/)** - Multi-Instance GPU configurations for Kubernetes -- **[API Documentation](https://docs.nvidia.com/nemo/retriever/extraction/api/)** - Python client and API reference - - -## Prerequisites - -For production-level performance and scalability, we recommend that you deploy the pipeline and supporting NIMs by using Docker Compose or Kubernetes ([helm charts](helm)). For more information, refer to [prerequisites](https://docs.nvidia.com/nv-ingest/user-guide/getting-started/prerequisites). - +For production-level performance and scalability, we recommend that you deploy the pipeline and supporting NIMs by using Kubernetes ([helm charts](helm)). For more information, refer to [prerequisites](https://docs.nvidia.com/nv-ingest/user-guide/getting-started/prerequisites). -## Library Mode Quickstart +*Note*: +Along with the recent repo name change, we're phasing out the nv-ingest APIs and simplifying the dependencies. You can follow this work and see the forward looking API via the [nemo_retriever](nemo_retriever) library subfolder. -For small-scale workloads, such as workloads of fewer than 100 PDFs, you can use library mode setup. Library mode set up depends on NIMs that are already self-hosted, or, by default, NIMs that are hosted on build.nvidia.com. -Library mode deployment of nv-ingest requires: +## Typical Use -- Linux operating systems (Ubuntu 22.04 or later recommended) or MacOS -- Python 3.12 -- We strongly advise using an isolated Python virtual env with [uv](https://docs.astral.sh/uv/getting-started/installation/). +For small-scale workloads, such as workloads of fewer than 100 PDFs, you can use our in development library setup which works with HuggingFace models on local GPUs or with NIMs hosted on build.nvidia.com. -### Step 1: Prepare Your Environment - -Create a fresh Python environment to install nv-ingest and dependencies. - -```shell -uv venv --python 3.12 nvingest && \ - source nvingest/bin/activate && \ - uv pip install nv-ingest==26.1.2 nv-ingest-api==26.1.2 nv-ingest-client==26.1.2 milvus-lite==2.4.12 -``` - -Set your NVIDIA_API_KEY. If you don't have a key, you can get one on [build.nvidia.com](https://org.ngc.nvidia.com/setup/api-keys). For instructions, refer to [Generate Your NGC Keys](docs/docs/extraction/ngc-api-key.md). +After [following the quickstart installation steps](nemo_retriever), you can start ingesting content like with the following snippet: +```python +from nemo_retriever import create_ingestor +from nemo_retriever.io import to_markdown, to_markdown_by_page +from pathlib import Path + +documents = [str(Path("../data/multimodal_test.pdf"))] +ingestor = create_ingestor(run_mode="batch") + +# ingestion tasks are chainable and defined lazily +ingestor = ( + ingestor.files(documents) + .extract( + # below are the default values, but content types can be controlled + extract_text=True, + extract_charts=True, + extract_tables=True, + extract_infographics=True + ) + .embed() + .vdb_upload() +) +# ingestor.ingest() actually executes the pipeline +# results are returned as a ray dataset and inspectable as chunks +ray_dataset = ingestor.ingest() +chunks = ray_dataset.get_dataset().take_all() ``` -export NVIDIA_API_KEY=nvapi-... -``` - -### Step 2: Ingest Documents -You can submit jobs programmatically in Python. - -To confirm that you have activated your Python environment, run `which python` and confirm that you see `nvingest` in the result. You can do this before any python command that you run. +You can see the extracted text that represents the content of the ingested test document. -``` -which python -/home/dev/projects/nv-ingest/nvingest/bin/python -``` +```python +# page 1 raw text: +>>> chunks[0]["text"] +'TestingDocument\r\nA sample document with headings and placeholder text\r\nIntroduction\r\nThis is a placeholder document that can be used for any purpose...' -If you have a very high number of CPUs, and see the process hang without progress, we recommend that you use `taskset` to limit the number of CPUs visible to the process. Use the following code. +# markdown formatted table from the first page +>>> chunks[1]["text"] +'| Table | 1 |\n| This | table | describes | some | animals, | and | some | activities | they | might | be | doing | in | specific |\n| locations. |\n| Animal | Activity | Place |\n| Giraffe | Driving | a | car | At | the | beach |\n| Lion | Putting | on | sunscreen | At | the | park |\n| Cat | Jumping | onto | a | laptop | In | a | home | office |\n| Dog | Chasing | a | squirrel | In | the | front | yard |\n| Chart | 1 |' -``` -taskset -c 0-3 python your_ingestion_script.py -``` +# a chart from the first page +>>> chunks[2]["text"] +'Chart 1\nThis chart shows some gadgets, and some very fictitious costs.\nGadgets and their cost\n$160.00\n$140.00\n$120.00\n$100.00\nDollars\n$80.00\n$60.00\n$40.00\n$20.00\n$-\nPowerdrill\nBluetooth speaker\nMinifridge\nPremium desk fan\nHammer\nCost' -On a 4 CPU core low end laptop, the following code should take about 10 seconds. +# markdown formatting for full pages or documents: +# document results are keyed by source filename +>>> to_markdown_by_page(chunks).keys() +dict_keys(['multimodal_test.pdf']) -```python -import time - -from nv_ingest.framework.orchestration.ray.util.pipeline.pipeline_runners import run_pipeline -from nv_ingest_client.client import Ingestor, NvIngestClient -from nv_ingest_api.util.message_brokers.simple_message_broker import SimpleClient -from nv_ingest_client.util.process_json_files import ingest_json_results_to_blob - -def main(): - # Start the pipeline subprocess for library mode - run_pipeline(block=False, disable_dynamic_scaling=True, run_in_subprocess=True) - - client = NvIngestClient( - message_client_allocator=SimpleClient, - message_client_port=7671, - message_client_hostname="localhost", - ) - - # gpu_cagra accelerated indexing is not available in milvus-lite - # Provide a filename for milvus_uri to use milvus-lite - milvus_uri = "milvus.db" - collection_name = "test" - sparse = False - - # do content extraction from files - ingestor = ( - Ingestor(client=client) - .files("data/multimodal_test.pdf") - .extract( - extract_text=True, - extract_tables=True, - extract_charts=True, - extract_images=True, - table_output_format="markdown", - extract_infographics=True, - # extract_method="nemotron_parse", #Slower, but maximally accurate, especially for PDFs with pages that are scanned images - text_depth="page", - ) - .embed() - .vdb_upload( - collection_name=collection_name, - milvus_uri=milvus_uri, - sparse=sparse, - # for llama-3.2 embedder, use 1024 for e5-v5 - dense_dim=2048, - ) - ) - - print("Starting ingestion..") - t0 = time.time() - - # Return both successes and failures - # Use for large batches where you want successful chunks/pages to be committed, while collecting detailed diagnostics for failures. - results, failures = ingestor.ingest(show_progress=True, return_failures=True) - - # Return only successes - # results = ingestor.ingest(show_progress=True) - - t1 = time.time() - print(f"Total time: {t1 - t0} seconds") - - # results blob is directly inspectable - if results: - print(ingest_json_results_to_blob(results[0])) - - # (optional) Review any failures that were returned - if failures: - print(f"There were {len(failures)} failures. Sample: {failures[0]}") - -if __name__ == "__main__": - main() -``` +# results per document are keyed by page number +>>> to_markdown_by_page(chunks)["multimodal_test.pdf"].keys() +dict_keys([1, 2, 3]) -You can see the extracted text that represents the content of the ingested test document. +>>> to_markdown_by_page(chunks)["multimodal_test.pdf"][1] +'TestingDocument\r\nA sample document with headings and placeholder text\r\nIntroduction\r\nThis is a placeholder document that can be used for any purpose. It contains some \r\nheadings and some placeholder text to fill the space. The text is not important and contains \r\nno real value, but it is useful for testing. Below, we will have some simple tables and charts \r\nthat we can use to confirm Ingest is working as expected.\r\nTable 1\r\nThis table describes some animals, and some activities they might be doing in specific \r\nlocations.\r\nAnimal Activity Place\r\nGira@e Driving a car At the beach\r\nLion Putting on sunscreen At the park\r\nCat Jumping onto a laptop In a home o@ice\r\nDog Chasing a squirrel In the front yard\r\nChart 1\r\nThis chart shows some gadgets, and some very fictitious costs.\n\n| This | table | describes | some | animals, | and | some | activities | they | might | be | doing | in | specific |\n| locations. |\n| Animal | Activity | Place |\n| Giraffe | Driving | a | car | At | the | beach |\n| Lion | Putting | on | sunscreen | At | the | park |\n| Cat | Jumping | onto | a | laptop | In | a | home | office |\n| Dog | Chasing | a | squirrel | In | the | front | yard |\n| Chart | 1 |\n\nChart 1 This chart shows some gadgets, and some very fictitious costs. Gadgets and their cost $160.00 $140.00 $120.00 $100.00 Dollars $80.00 $60.00 $40.00 $20.00 $- Powerdrill Bluetooth speaker Minifridge Premium desk fan Hammer Cost\n\n### Table 1\n\n| This | table | describes | some | animals, | and | some | activities | they | might | be | doing | in | specific |\n| locations. |\n| Animal | Activity | Place |\n| Giraffe | Driving | a | car | At | the | beach |\n| Lion | Putting | on | sunscreen | At | the | park |\n| Cat | Jumping | onto | a | laptop | In | a | home | office |\n| Dog | Chasing | a | squirrel | In | the | front | yard |\n| Chart | 1 |\n\n### Chart 1\n\nChart 1 This chart shows some gadgets, and some very fictitious costs. Gadgets and their cost $160.00 $140.00 $120.00 $100.00 Dollars $80.00 $60.00 $40.00 $20.00 $- Powerdrill Bluetooth speaker Minifridge Premium desk fan Hammer Cost\n\n### Table 2\n\n| This | table | describes | some | animals, | and | some | activities | they | might | be | doing | in | specific |\n| locations. |\n| Animal | Activity | Place |\n| Giraffe | Driving | a | car | At | the | beach |\n| Lion | Putting | on | sunscreen | At | the | park |\n| Cat | Jumping | onto | a | laptop | In | a | home | office |\n| Dog | Chasing | a | squirrel | In | the | front | yard |\n| Chart | 1 |\n\n### Chart 2\n\nChart 1 This chart shows some gadgets, and some very fictitious costs. Gadgets and their cost $160.00 $140.00 $120.00 $100.00 Dollars $80.00 $60.00 $40.00 $20.00 $- Powerdrill Bluetooth speaker Minifridge Premium desk fan Hammer Cost\n\n### Table 3\n\n| This | table | describes | some | animals, | and | some | activities | they | might | be | doing | in | specific |\n| locations. |\n| Animal | Activity | Place |\n| Giraffe | Driving | a | car | At | the | beach |\n| Lion | Putting | on | sunscreen | At | the | park |\n| Cat | Jumping | onto | a | laptop | In | a | home | office |\n| Dog | Chasing | a | squirrel | In | the | front | yard |\n| Chart | 1 |\n\n### Chart 3\n\nChart 1 This chart shows some gadgets, and some very fictitious costs. Gadgets and their cost $160.00 $140.00 $120.00 $100.00 Dollars $80.00 $60.00 $40.00 $20.00 $- Powerdrill Bluetooth speaker Minifridge Premium desk fan Hammer Cost' -```shell -Starting ingestion.. -Total time: 9.243880033493042 seconds - -TestingDocument -A sample document with headings and placeholder text -Introduction -This is a placeholder document that can be used for any purpose. It contains some -headings and some placeholder text to fill the space. The text is not important and contains -no real value, but it is useful for testing. Below, we will have some simple tables and charts -that we can use to confirm Ingest is working as expected. -Table 1 -This table describes some animals, and some activities they might be doing in specific -locations. -Animal Activity Place -Gira@e Driving a car At the beach -Lion Putting on sunscreen At the park -Cat Jumping onto a laptop In a home o@ice -Dog Chasing a squirrel In the front yard -Chart 1 -This chart shows some gadgets, and some very fictitious costs. -... document extract continues ... +# full document markdown also keyed by source filename +>>> to_markdown(chunks).keys() +dict_keys(['multimodal_test.pdf']) ``` ### Step 3: Query Ingested Content @@ -244,70 +100,43 @@ This chart shows some gadgets, and some very fictitious costs. To query for relevant snippets of the ingested content, and use them with an LLM to generate answers, use the following code. ```python -import os +from nemo_retriever.retriever import Retriever from openai import OpenAI -from nv_ingest_client.util.milvus import nvingest_retrieval +import os -milvus_uri = "milvus.db" -collection_name = "test" -sparse = False +retriever = Retriever() -queries = ["Which animal is responsible for the typos?"] +query = "Given their activities, which animal is responsible for the typos in my documents?" -retrieved_docs = nvingest_retrieval( - queries, - collection_name, - milvus_uri=milvus_uri, - hybrid=sparse, - top_k=1, -) +# you can also submit a list with retriever.queries[...] +hits = retriever.query(query) -# simple generation example -extract = retrieved_docs[0][0]["entity"]["text"] client = OpenAI( - base_url="https://integrate.api.nvidia.com/v1", - api_key=os.environ["NVIDIA_API_KEY"], + base_url = "https://integrate.api.nvidia.com/v1", + api_key = os.environ.get("NVIDIA_API_KEY") ) -prompt = f"Using the following content: {extract}\n\n Answer the user query: {queries[0]}" -print(f"Prompt: {prompt}") +hit_texts = [hit["text"] for hit in hits] +prompt = f""" +Given the following retrieved documents, answer the question: {query} + +Documents: +{hit_texts} +""" + completion = client.chat.completions.create( - model="nvidia/llama-3.1-nemotron-nano-vl-8b-v1", - messages=[{"role": "user", "content": prompt}], + model="nvidia/nemotron-3-super-120b-a12b", + messages=[{"role":"user","content":prompt}], + stream=False ) -response = completion.choices[0].message.content -print(f"Answer: {response}") +answer = completion.choices[0].message.content +print(answer) ``` +Answer: ```shell -Prompt: Using the following content: Table 1 -| This table describes some animals, and some activities they might be doing in specific locations. | This table describes some animals, and some activities they might be doing in specific locations. | This table describes some animals, and some activities they might be doing in specific locations. | -| Animal | Activity | Place | -| Giraffe | Driving a car | At the beach | -| Lion | Putting on sunscreen | At the park | -| Cat | Jumping onto a laptop | In a home office | -| Dog | Chasing a squirrel | In the front yard | - - Answer the user query: Which animal is responsible for the typos? -Answer: A clever query! - -Based on the provided Table 1, I'd make an educated inference to answer your question. Since the activities listed are quite unconventional for the respective animals (e.g., a giraffe driving a car, a lion putting on sunscreen), it's likely that the table is using humor or hypothetical scenarios. - -Given this context, the question "Which animal is responsible for the typos?" is probably a tongue-in-cheek inquiry, as there's no direct information in the table about typos or typing activities. - -However, if we were to make a playful connection, we could look for an animal that's: - -1. Typically found in a setting where typing might occur (e.g., an office). -2. Engaging in an activity that could potentially lead to typos (e.g., interacting with a typing device). - -Based on these loose criteria, I'd jokingly point to: - -**Cat** as the potential culprit, since it's: - * Located "In a home office" - * Engaged in "Jumping onto a laptop", which could theoretically lead to accidental keystrokes or typos if the cat were to start "walking" on the keyboard! - -Please keep in mind that this response is purely humorous and interpretative, as the table doesn't explicitly mention typos or provide a straightforward answer to the question. +Cat is the animal whose activity (jumping onto a laptop) matches the location of the typos, so the cat is responsible for the typos in the documents. ``` > [!TIP] @@ -315,69 +144,13 @@ Please keep in mind that this response is purely humorous and interpretative, as > > Please also checkout our [demo using a retrieval pipeline on build.nvidia.com](https://build.nvidia.com/nvidia/multimodal-pdf-data-extraction-for-enterprise-rag) to query over document content pre-extracted w/ NVIDIA Ingest. +## Documentation Resources -## Benchmarking - -nv-ingest includes a comprehensive testing framework for benchmarking performance and evaluating retrieval accuracy. - -### Quick Start - -```bash -cd tools/harness - -uv sync - -# Run end-to-end benchmark -uv run nv-ingest-harness-run --case=e2e --dataset=bo767 - -# Evaluate retrieval accuracy -uv run nv-ingest-harness-run --case=e2e_recall --dataset=bo767 -``` - -### Available Benchmarks - -- **End-to-End Performance** - Measure ingestion throughput, latency, and resource utilization -- **Retrieval Accuracy** - Evaluate recall@k metrics against ground truth datasets -- **MIG Benchmarking** - Test performance with NVIDIA Multi-Instance GPU (MIG) configurations - -### Documentation - -- **[Testing Framework Guide](https://docs.nvidia.com/nemo/retriever/extraction/benchmarking/)** - Complete guide to benchmarking and testing nv-ingest (same as `tools/harness/README.md`) -- **[MIG Benchmarking](https://docs.nvidia.com/nemo/retriever/extraction/mig-benchmarking/)** - GPU partitioning for multi-tenant deployments on Kubernetes/Helm - -### Benchmark Datasets - -- **bo767** - 767 PDF documents with ground truth for recall evaluation -- **bo20** - 20 PDF documents for quick validation -- **single** - singular multimodal pdf for quick validation -- **earnings** - earnings reports ppt and pdf dataset --- **financebench** - financial data -- **Custom datasets** - Use your own datasets with the testing framework - -For more information, see the [benchmarking documentation](https://docs.nvidia.com/nemo/retriever/extraction/benchmarking/). - - -## GitHub Repository Structure - -The following is a description of the folders in the GitHub repository. - -- [.devcontainer](https://github.com/NVIDIA/nv-ingest/tree/main/.devcontainer) — VSCode containers for local development -- [.github](https://github.com/NVIDIA/nv-ingest/tree/main/.github) — GitHub repo configuration files -- [api](https://github.com/NVIDIA/nv-ingest/tree/main/api) — Core API logic shared across python modules -- [ci](https://github.com/NVIDIA/nv-ingest/tree/main/ci) — Scripts used to build the nv-ingest container and other packages -- [client](https://github.com/NVIDIA/nv-ingest/tree/main/client) — Readme, examples, and source code for the nv-ingest-cli utility -- [config](https://github.com/NVIDIA/nv-ingest/tree/main/config) — Various .yaml files defining configuration for OTEL, Prometheus -- [data](https://github.com/NVIDIA/nv-ingest/tree/main/data) — Sample PDFs for testing -- [deploy](https://github.com/NVIDIA/nv-ingest/tree/main/deploy) — Brev.dev-hosted launchable -- [docker](https://github.com/NVIDIA/nv-ingest/tree/main/docker) — Scripts used by the nv-ingest docker container -- [docs](https://github.com/NVIDIA/nv-ingest/tree/main/docs/docs) — Documentation for NV Ingest -- [evaluation](https://github.com/NVIDIA/nv-ingest/tree/main/evaluation) — Notebooks that demonstrate how to test recall accuracy -- [examples](https://github.com/NVIDIA/nv-ingest/tree/main/examples) — Notebooks, scripts, and tutorial content -- [helm](https://github.com/NVIDIA/nv-ingest/tree/main/helm) — Documentation for deploying nv-ingest to a Kubernetes cluster via Helm chart -- [skaffold](https://github.com/NVIDIA/nv-ingest/tree/main/skaffold) — Skaffold configuration -- [src](https://github.com/NVIDIA/nv-ingest/tree/main/src) — Source code for the nv-ingest pipelines and service -- [tests](https://github.com/NVIDIA/nv-ingest/tree/main/tests) — Unit tests for nv-ingest - +- **[Official Documentation](https://docs.nvidia.com/nemo/retriever/extraction/)** - Complete user guides, API references, and deployment instructions +- **[Getting Started Guide](https://docs.nvidia.com/nemo/retriever/extraction/overview/)** - Overview and prerequisites for production deployments +- **[Benchmarking Guide](https://docs.nvidia.com/nemo/retriever/extraction/benchmarking/)** - Performance testing and recall evaluation framework +- **[MIG Deployment](https://docs.nvidia.com/nemo/retriever/extraction/mig-benchmarking/)** - Multi-Instance GPU configurations for Kubernetes +- **[API Documentation](https://docs.nvidia.com/nemo/retriever/extraction/api/)** - Python client and API reference ## Notices @@ -402,56 +175,7 @@ https://pypi.org/project/pdfservices-sdk/ [request access](https://huggingface.co/meta-llama/Llama-3.2-1B) and set `HF_ACCESS_TOKEN` to your HuggingFace access token in order to use it. - -### Contributing - -We require that all contributors "sign-off" on their commits. This certifies that the contribution is your original -work, or you have rights to submit it under the same license, or a compatible license. - -Any contribution which contains commits that are not signed off are not accepted. - -To sign off on a commit, use the --signoff (or -s) option when you commit your changes as shown following. - -``` -$ git commit --signoff --message "Add cool feature." -``` - -This appends the following text to your commit message. - -``` -Signed-off-by: Your Name -``` - -#### Developer Certificate of Origin (DCO) - -The following is the full text of the Developer Certificate of Origin (DCO) - -``` - Developer Certificate of Origin - Version 1.1 - - Copyright (C) 2004, 2006 The Linux Foundation and its contributors. - 1 Letterman Drive - Suite D4700 - San Francisco, CA, 94129 - - Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. -``` - -``` - Developer's Certificate of Origin 1.1 - - By making a contribution to this project, I certify that: - - (a) The contribution was created in whole or in part by me and I have the right to submit it under the open source license indicated in the file; or - - (b) The contribution is based upon previous work that, to the best of my knowledge, is covered under an appropriate open source license and I have the right under that license to submit that work with modifications, whether created in whole or in part by me, under the same open source license (unless I am permitted to submit under a different license), as indicated in the file; or - - (c) The contribution was provided directly to me by some other person who certified (a), (b) or (c) and I have not modified it. - - (d) I understand and agree that this project and the contribution are public and that a record of the contribution (including all personal information I submit with it, including my sign-off) is maintained indefinitely and may be redistributed consistent with this project or the open source license(s) involved. -``` - +Before contributing to this project, please review our [Contributor Guide](contributing.md). ## Security Considerations diff --git a/contributing.md b/contributing.md new file mode 100644 index 000000000..f8dc3815d --- /dev/null +++ b/contributing.md @@ -0,0 +1,50 @@ +### Contributing + +We require that all contributors "sign-off" on their commits. This certifies that the contribution is your original +work, or you have rights to submit it under the same license, or a compatible license. + +Any contribution which contains commits that are not signed off are not accepted. + +To sign off on a commit, use the --signoff (or -s) option when you commit your changes as shown following. + +``` +$ git commit --signoff --message "Add cool feature." +``` + +This appends the following text to your commit message. + +``` +Signed-off-by: Your Name +``` + +#### Developer Certificate of Origin (DCO) + +The following is the full text of the Developer Certificate of Origin (DCO) + +``` + Developer Certificate of Origin + Version 1.1 + + Copyright (C) 2004, 2006 The Linux Foundation and its contributors. + 1 Letterman Drive + Suite D4700 + San Francisco, CA, 94129 + + Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. +``` + +``` + Developer's Certificate of Origin 1.1 + + By making a contribution to this project, I certify that: + + (a) The contribution was created in whole or in part by me and I have the right to submit it under the open source license indicated in the file; or + + (b) The contribution is based upon previous work that, to the best of my knowledge, is covered under an appropriate open source license and I have the right under that license to submit that work with modifications, whether created in whole or in part by me, under the same open source license (unless I am permitted to submit under a different license), as indicated in the file; or + + (c) The contribution was provided directly to me by some other person who certified (a), (b) or (c) and I have not modified it. + + (d) I understand and agree that this project and the contribution are public and that a record of the contribution (including all personal information I submit with it, including my sign-off) is maintained indefinitely and may be redistributed consistent with this project or the open source license(s) involved. +``` + + diff --git a/nemo_retriever/README.md b/nemo_retriever/README.md index 49feffc0c..6816ea1f8 100644 --- a/nemo_retriever/README.md +++ b/nemo_retriever/README.md @@ -36,7 +36,7 @@ In your terminal, run the following commands from any location. ```bash uv venv retriever --python 3.12 source retriever/bin/activate -uv pip install -i https://test.pypi.org/simple/ --extra-index-url https://pypi.org/simple nemo-retriever==26.3.0rc2 nv-ingest-client==26.3.0rc2 nv-ingest==26.3.0rc2 nv-ingest-api==26.3.0rc2 +uv pip install nemo-retriever==26.3.0 nv-ingest-client==26.3.0 nv-ingest==26.3.0 nv-ingest-api==26.3.0 ``` This creates a dedicated Python environment and installs the `nemo-retriever` PyPI package, the canonical distribution for the NeMo Retriever Library. @@ -102,14 +102,20 @@ You can inspect how recall accuracy optimized text chunks for various content ty 'Chart 1\nThis chart shows some gadgets, and some very fictitious costs.\nGadgets and their cost\n$160.00\n$140.00\n$120.00\n$100.00\nDollars\n$80.00\n$60.00\n$40.00\n$20.00\n$-\nPowerdrill\nBluetooth speaker\nMinifridge\nPremium desk fan\nHammer\nCost' # markdown formatting for full pages or documents: +# document results are keyed by source filename >>> to_markdown_by_page(chunks).keys() +dict_keys(['multimodal_test.pdf']) + +# results per document are keyed by page number +>>> to_markdown_by_page(chunks)["multimodal_test.pdf"].keys() dict_keys([1, 2, 3]) ->>> to_markdown_by_page(chunks)[1] -'## Page 1\n\nTestingDocument\r\nA sample document with headings and placeholder text\r\nIntroduction\r\nThis is a placeholder document that can be used for any purpose. It contains some \r\nheadings and some placeholder text to fill the space. The text is not important and contains \r\nno real value, but it is useful for testing. Below, we will have some simple tables and charts \r\nthat we can use to confirm Ingest is working as expected.\r\nTable 1\r\nThis table describes some animals, and some activities they might be doing in specific \r\nlocations.\r\nAnimal Activity Place\r\nGira@e Driving a car At the beach\r\nLion Putting on sunscreen At the park\r\nCat Jumping onto a laptop In a home o@ice\r\nDog Chasing a squirrel In the front yard\r\nChart 1\r\nThis chart shows some gadgets, and some very fictitious costs.\n\n| This | table | describes | some | animals, | and | some | activities | they | might | be | doing | in | specific |\n| locations. |\n| Animal | Activity | Place |\n| Giraffe | Driving | a | car | At | the | beach |\n| Lion | Putting | on | sunscreen | At | the | park |\n| Cat | Jumping | onto | a | laptop | In | a | home | office |\n| Dog | Chasing | a | squirrel | In | the | front | yard |\n| Chart | 1 |\n\nChart 1 This chart shows some gadgets, and some very fictitious costs...' +>>> to_markdown_by_page(chunks)["multimodal_test.pdf"][1] +'TestingDocument\r\nA sample document with headings and placeholder text\r\nIntroduction\r\nThis is a placeholder document that can be used for any purpose. It contains some \r\nheadings and some placeholder text to fill the space. The text is not important and contains \r\nno real value, but it is useful for testing. Below, we will have some simple tables and charts \r\nthat we can use to confirm Ingest is working as expected.\r\nTable 1\r\nThis table describes some animals, and some activities they might be doing in specific \r\nlocations.\r\nAnimal Activity Place\r\nGira@e Driving a car At the beach\r\nLion Putting on sunscreen At the park\r\nCat Jumping onto a laptop In a home o@ice\r\nDog Chasing a squirrel In the front yard\r\nChart 1\r\nThis chart shows some gadgets, and some very fictitious costs.\n\n| This | table | describes | some | animals, | and | some | activities | they | might | be | doing | in | specific |\n| locations. |\n| Animal | Activity | Place |\n| Giraffe | Driving | a | car | At | the | beach |\n| Lion | Putting | on | sunscreen | At | the | park |\n| Cat | Jumping | onto | a | laptop | In | a | home | office |\n| Dog | Chasing | a | squirrel | In | the | front | yard |\n| Chart | 1 |\n\nChart 1 This chart shows some gadgets, and some very fictitious costs. Gadgets and their cost $160.00 $140.00 $120.00 $100.00 Dollars $80.00 $60.00 $40.00 $20.00 $- Powerdrill Bluetooth speaker Minifridge Premium desk fan Hammer Cost\n\n### Table 1\n\n| This | table | describes | some | animals, | and | some | activities | they | might | be | doing | in | specific |\n| locations. |\n| Animal | Activity | Place |\n| Giraffe | Driving | a | car | At | the | beach |\n| Lion | Putting | on | sunscreen | At | the | park |\n| Cat | Jumping | onto | a | laptop | In | a | home | office |\n| Dog | Chasing | a | squirrel | In | the | front | yard |\n| Chart | 1 |\n\n### Chart 1\n\nChart 1 This chart shows some gadgets, and some very fictitious costs. Gadgets and their cost $160.00 $140.00 $120.00 $100.00 Dollars $80.00 $60.00 $40.00 $20.00 $- Powerdrill Bluetooth speaker Minifridge Premium desk fan Hammer Cost\n\n### Table 2\n\n| This | table | describes | some | animals, | and | some | activities | they | might | be | doing | in | specific |\n| locations. |\n| Animal | Activity | Place |\n| Giraffe | Driving | a | car | At | the | beach |\n| Lion | Putting | on | sunscreen | At | the | park |\n| Cat | Jumping | onto | a | laptop | In | a | home | office |\n| Dog | Chasing | a | squirrel | In | the | front | yard |\n| Chart | 1 |\n\n### Chart 2\n\nChart 1 This chart shows some gadgets, and some very fictitious costs. Gadgets and their cost $160.00 $140.00 $120.00 $100.00 Dollars $80.00 $60.00 $40.00 $20.00 $- Powerdrill Bluetooth speaker Minifridge Premium desk fan Hammer Cost\n\n### Table 3\n\n| This | table | describes | some | animals, | and | some | activities | they | might | be | doing | in | specific |\n| locations. |\n| Animal | Activity | Place |\n| Giraffe | Driving | a | car | At | the | beach |\n| Lion | Putting | on | sunscreen | At | the | park |\n| Cat | Jumping | onto | a | laptop | In | a | home | office |\n| Dog | Chasing | a | squirrel | In | the | front | yard |\n| Chart | 1 |\n\n### Chart 3\n\nChart 1 This chart shows some gadgets, and some very fictitious costs. Gadgets and their cost $160.00 $140.00 $120.00 $100.00 Dollars $80.00 $60.00 $40.00 $20.00 $- Powerdrill Bluetooth speaker Minifridge Premium desk fan Hammer Cost' -# full document markdown ->>> to_markdown(chunks) +# full document markdown also keyed by source filename +>>> to_markdown(chunks).keys() +dict_keys(['multimodal_test.pdf']) ``` Since the ingestion job automatically populated a lancedb table with all these chunks, you can use queries to retrieve semantically relevant chunks for feeding directly into an LLM: From 85168e2282745e955dc1fd464530b604c59f0631 Mon Sep 17 00:00:00 2001 From: Kurt Heiss Date: Wed, 18 Mar 2026 10:51:46 -0700 Subject: [PATCH 38/94] updates to release notes to fix bullets and doc link (#1651) --- docs/docs/extraction/releasenotes-nv-ingest.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/docs/extraction/releasenotes-nv-ingest.md b/docs/docs/extraction/releasenotes-nv-ingest.md index 2c444ba09..726a794fe 100644 --- a/docs/docs/extraction/releasenotes-nv-ingest.md +++ b/docs/docs/extraction/releasenotes-nv-ingest.md @@ -10,23 +10,23 @@ This documentation contains the release notes for [NeMo Retriever Library](overv NVIDIA® NeMo Retriever Library version 26.03 adds broader hardware and software support along with many pipeline, evaluation, and deployment enhancements. -To upgrade the Helm charts for this release, refer to the (NeMo Retriever Library Helm Charts](https://github.com/NVIDIA/NeMo-Retriever/blob/release/26.3.0/helm/README.md). +To upgrade the Helm charts for this release, refer to the [NeMo Retriever Library Helm Charts](https://github.com/NVIDIA/NeMo-Retriever/blob/release/26.3.0/helm/README.md). Highlights for the 26.03 release include: - NV-Ingest GitHub repo renamed to NeMo-Retriever - NeMo Retriever Extraction pipeline renamed to NeMo Retriever Library - NeMo Retriever Library now supports two deployment options: - - A new no-container, pip-installable in-process library for development (available on PyPI) - - Existing production-ready Helm chart with NIMs + - A new no-container, pip-installable in-process library for development (available on PyPI) + - Existing production-ready Helm chart with NIMs - Added documentation notes on Air-gapped deployment support - Added documentation notes on OpenShift support - Added support for RTX4500 Pro Blackwell SKU - Added support for llama-nemotron-embed-vl-v2 in text and text+image modes - New extract methods `pdfium_hybrid` and `ocr` target scanned PDFs to improve text and layout extraction from image-based pages - VLM-based image caption enhancements: - - Infographics can be captioned - - Reasoning mode is configurable + - Infographics can be captioned + - Reasoning mode is configurable - Enabled hybrid search with Lancedb - Added retrieval_bench subfolder with generalizable agentic retrieval pipeline - The project now uses UV as the primary environment and package manager instead of Conda, resulting in faster installs and simpler dependency handling From 4075ae942fbe243da60be8439a50928e4f99b6d2 Mon Sep 17 00:00:00 2001 From: Kurt Heiss Date: Wed, 18 Mar 2026 11:53:45 -0700 Subject: [PATCH 39/94] Kheiss/5970976 (#1652) --- docs/docs/extraction/quickstart-guide.md | 11 +++++++++++ docs/docs/extraction/releasenotes-nv-ingest.md | 2 +- helm/README.md | 4 ++++ 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/docs/docs/extraction/quickstart-guide.md b/docs/docs/extraction/quickstart-guide.md index 428d1c890..0d02aedcc 100644 --- a/docs/docs/extraction/quickstart-guide.md +++ b/docs/docs/extraction/quickstart-guide.md @@ -110,6 +110,17 @@ From this prompt, you can run the `nemo-retriever` CLI and Python examples. Because many service URIs default to localhost, running inside the `nemo-retriever` container also requires that you specify URIs manually so that services can communicate across containers on the internal Docker network. See the example following for how to set the `milvus_uri`. +## Air-Gapped Deployment (Docker Compose) + +When deploying in an air-gapped environment (no internet or NGC registry access), you must pre-stage container images on a machine with network access, then transfer and load them in the isolated environment. + +1. **On a machine with network access:** Clone the repo, authenticate with NGC (`docker login nvcr.io`), and pull all images used by your chosen profile (for example, `docker compose --profile retrieval pull`). +2. **Save images:** Export the images to archives (for example, using `docker save` for each image or a script that saves all images referenced by your [docker-compose.yaml](https://github.com/NVIDIA/NeMo-Retriever/blob/main/docker-compose.yaml)). +3. **Transfer** the image archives and your `docker-compose.yaml` (and `.env` if used) to the air-gapped system. +4. **On the air-gapped machine:** Load the images (`docker load -i `) and start the stack with the same profile (for example, `docker compose --profile retrieval up`). + +Ensure the same image tags and `docker-compose.yaml` version are used in both environments so that service configuration stays consistent. + ## Step 3: Ingest Documents You can submit jobs programmatically in Python or using the [NeMo Retriever Library CLI](cli-reference.md). diff --git a/docs/docs/extraction/releasenotes-nv-ingest.md b/docs/docs/extraction/releasenotes-nv-ingest.md index 726a794fe..4781bb476 100644 --- a/docs/docs/extraction/releasenotes-nv-ingest.md +++ b/docs/docs/extraction/releasenotes-nv-ingest.md @@ -19,7 +19,7 @@ Highlights for the 26.03 release include: - NeMo Retriever Library now supports two deployment options: - A new no-container, pip-installable in-process library for development (available on PyPI) - Existing production-ready Helm chart with NIMs -- Added documentation notes on Air-gapped deployment support +- Added documentation notes on Air-gapped deployment support for both Helm (Kubernetes) and Docker Compose - Added documentation notes on OpenShift support - Added support for RTX4500 Pro Blackwell SKU - Added support for llama-nemotron-embed-vl-v2 in text and text+image modes diff --git a/helm/README.md b/helm/README.md index d1a752be3..080e0a866 100644 --- a/helm/README.md +++ b/helm/README.md @@ -12,6 +12,10 @@ Before you install the Helm charts, be sure you meet the hardware and software p The [Nvidia nim-operator](https://docs.nvidia.com/nim-operator/latest/install.html) must also be installed and configured in your cluster to ensure that the Nvidia NIMs are properly deployed. +## Air-Gapped Deployment (Kubernetes) + +For deploying in an air-gapped environment (no internet or NGC registry access), refer to the [NVIDIA NIM Operator documentation on Air-Gapped Environments](https://docs.nvidia.com/nim-operator/latest/air-gap.html), which explains how to deploy NIMs in such environments. + ## Initial Environment Setup 1. Create your namespace by running the following code. From ebb12539ac05b6034b53ac3de3f23ccb12f23614 Mon Sep 17 00:00:00 2001 From: Kurt Heiss Date: Wed, 18 Mar 2026 12:03:13 -0700 Subject: [PATCH 40/94] Kheiss/5966534 (#1653) Co-authored-by: sosahi --- docs/docs/extraction/support-matrix.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/docs/extraction/support-matrix.md b/docs/docs/extraction/support-matrix.md index eec709b8c..845e671f6 100644 --- a/docs/docs/extraction/support-matrix.md +++ b/docs/docs/extraction/support-matrix.md @@ -10,9 +10,10 @@ Before you begin using [NeMo Retriever Library](overview.md), ensure that you ha ## Core and Advanced Pipeline Features The NeMo Retriever Library core pipeline features run on a single A10G or better GPU. + The core pipeline features include the following: -- llama3.2-nv-embedqa-1b-v2 — Embedding model for converting text chunks into vectors. +- llama-nemotron-embed-1b-v2 — Embedding model for converting text chunks into vectors. - nemotron-page-elements-v3 — Detects and classifies images on a page as a table, chart or infographic. - nemotron-table-structure-v1 — Detects rows, columns, and cells within a table to preserve table structure and convert to Markdown format. - nemotron-graphic-elements-v1 — Detects graphic elements within chart images such as titles, legends, axes, and numerical values. From 924a18e93b7ab389028fda29f68d6807366ef0d9 Mon Sep 17 00:00:00 2001 From: Kurt Heiss Date: Wed, 18 Mar 2026 13:27:38 -0700 Subject: [PATCH 41/94] Kheiss/5970976 - change location of air gap documentation (#1656) --- docs/docs/extraction/quickstart-guide.md | 26 ++++++++++++------------ helm/README.md.gotmpl | 3 +++ 2 files changed, 16 insertions(+), 13 deletions(-) diff --git a/docs/docs/extraction/quickstart-guide.md b/docs/docs/extraction/quickstart-guide.md index 0d02aedcc..3dae43e66 100644 --- a/docs/docs/extraction/quickstart-guide.md +++ b/docs/docs/extraction/quickstart-guide.md @@ -110,18 +110,7 @@ From this prompt, you can run the `nemo-retriever` CLI and Python examples. Because many service URIs default to localhost, running inside the `nemo-retriever` container also requires that you specify URIs manually so that services can communicate across containers on the internal Docker network. See the example following for how to set the `milvus_uri`. -## Air-Gapped Deployment (Docker Compose) - -When deploying in an air-gapped environment (no internet or NGC registry access), you must pre-stage container images on a machine with network access, then transfer and load them in the isolated environment. - -1. **On a machine with network access:** Clone the repo, authenticate with NGC (`docker login nvcr.io`), and pull all images used by your chosen profile (for example, `docker compose --profile retrieval pull`). -2. **Save images:** Export the images to archives (for example, using `docker save` for each image or a script that saves all images referenced by your [docker-compose.yaml](https://github.com/NVIDIA/NeMo-Retriever/blob/main/docker-compose.yaml)). -3. **Transfer** the image archives and your `docker-compose.yaml` (and `.env` if used) to the air-gapped system. -4. **On the air-gapped machine:** Load the images (`docker load -i `) and start the stack with the same profile (for example, `docker compose --profile retrieval up`). - -Ensure the same image tags and `docker-compose.yaml` version are used in both environments so that service configuration stays consistent. - -## Step 3: Ingest Documents +## Step 2: Ingest Documents You can submit jobs programmatically in Python or using the [NeMo Retriever Library CLI](cli-reference.md). @@ -342,7 +331,7 @@ INFO:nemo_retriever.cli.util.processing:Throughput (Pages/sec): 1.28 INFO:nemo_retriever.cli.util.processing:Throughput (Files/sec): 0.43 ``` -## Step 4: Inspecting and Consuming Results +## Step 3: Inspecting and Consuming Results After the ingestion steps above have been completed, you should be able to find the `text` and `image` subfolders inside your processed docs folder. Each will contain JSON-formatted extracted content and metadata. @@ -413,6 +402,16 @@ You can specify multiple `--profile` options. | `nemotron-parse` | Advanced | Use [nemotron-parse](https://build.nvidia.com/nvidia/nemotron-parse), which adds state-of-the-art text and table extraction. For more information, refer to [Advanced Visual Parsing](nemoretriever-parse.md). | | `vlm` | Advanced | Use [llama 3.1 Nemotron 8B Vision](https://build.nvidia.com/nvidia/llama-3.1-nemotron-nano-vl-8b-v1/modelcard) for experimental image captioning of unstructured images. You can also configure other VLMs for your specific use cases. For more information, refer to [Extract Captions from Images](python-api-reference.md#extract-captions-from-images). | +## Air-Gapped Deployment (Docker Compose) + +When deploying in an air-gapped environment (no internet or NGC registry access), you must pre-stage container images on a machine with network access, then transfer and load them in the isolated environment. + +1. **On a machine with network access:** Clone the repo, authenticate with NGC (`docker login nvcr.io`), and pull all images used by your chosen profile (for example, `docker compose --profile retrieval pull`). +2. **Save images:** Export the images to archives (for example, using `docker save` for each image or a script that saves all images referenced by your [docker-compose.yaml](https://github.com/NVIDIA/NeMo-Retriever/blob/main/docker-compose.yaml)). +3. **Transfer** the image archives and your `docker-compose.yaml` (and `.env` if used) to the air-gapped system. +4. **On the air-gapped machine:** Load the images (`docker load -i `) and start the stack with the same profile (for example, `docker compose --profile retrieval up`). + +Ensure the same image tags and `docker-compose.yaml` version are used in both environments so that service configuration stays consistent. ## Docker Compose override files @@ -499,6 +498,7 @@ This syntax and structure can be repeated for each NIM model used by CAS, ensuri Advanced features require additional GPU support and disk space. For more information, refer to [Support Matrix](support-matrix.md). + ## Related Topics - [Troubleshoot](troubleshoot.md) diff --git a/helm/README.md.gotmpl b/helm/README.md.gotmpl index 450c62b60..5328c8020 100644 --- a/helm/README.md.gotmpl +++ b/helm/README.md.gotmpl @@ -12,6 +12,9 @@ Before you install the Helm charts, be sure you meet the hardware and software p The [Nvidia nim-operator](https://docs.nvidia.com/nim-operator/latest/install.html) must also be installed and configured in your cluster to ensure that the Nvidia NIMs are properly deployed. +## Air-Gapped Deployment (Kubernetes) + +For deploying in an air-gapped environment (no internet or NGC registry access), refer to the [NVIDIA NIM Operator documentation on Air-Gapped Environments](https://docs.nvidia.com/nim-operator/latest/air-gap.html), which explains how to deploy NIMs in such environments. ## Initial Environment Setup From 4129d5b89aa404396a0aeaf08826a038ab7247d4 Mon Sep 17 00:00:00 2001 From: Jeremy Dyer Date: Thu, 19 Mar 2026 15:06:16 -0400 Subject: [PATCH 42/94] Revert doc naming changes --- docs/docs/extraction/audio.md | 24 +- docs/docs/extraction/benchmarking.md | 104 +-- docs/docs/extraction/chunking.md | 8 +- docs/docs/extraction/content-metadata.md | 8 +- docs/docs/extraction/contributing.md | 6 +- docs/docs/extraction/custom-metadata.md | 16 +- docs/docs/extraction/data-store.md | 147 ++++- docs/docs/extraction/environment-config.md | 18 +- docs/docs/extraction/faq.md | 36 +- docs/docs/extraction/helm.md | 6 +- docs/docs/extraction/nemoretriever-parse.md | 49 +- docs/docs/extraction/nimclient.md | 20 +- docs/docs/extraction/notebooks.md | 22 +- docs/docs/extraction/nv-ingest-python-api.md | 600 ++++++++++++++++++ docs/docs/extraction/nv-ingest_cli.md | 175 +++++ docs/docs/extraction/overview.md | 8 +- docs/docs/extraction/prerequisites.md | 2 +- docs/docs/extraction/quickstart-guide.md | 190 +++--- .../extraction/quickstart-library-mode.md | 486 +++++++++++++- .../docs/extraction/releasenotes-nv-ingest.md | 91 ++- docs/docs/extraction/scaling-modes.md | 12 +- docs/docs/extraction/support-matrix.md | 25 +- docs/docs/extraction/telemetry.md | 2 +- docs/docs/extraction/troubleshoot.md | 4 +- .../docs/extraction/user-defined-functions.md | 46 +- docs/docs/extraction/user-defined-stages.md | 16 +- docs/docs/extraction/v2-api-guide.md | 88 +-- docs/docs/extraction/vlm-embed.md | 123 +--- docs/docs/index.md | 28 +- docs/mkdocs.yml | 2 +- 30 files changed, 1813 insertions(+), 549 deletions(-) create mode 100644 docs/docs/extraction/nv-ingest-python-api.md create mode 100644 docs/docs/extraction/nv-ingest_cli.md diff --git a/docs/docs/extraction/audio.md b/docs/docs/extraction/audio.md index 4be7ee8ac..021ee74b6 100644 --- a/docs/docs/extraction/audio.md +++ b/docs/docs/extraction/audio.md @@ -9,7 +9,7 @@ to extract speech from audio files. !!! note - NVIDIA Ingest (nv-ingest) has been renamed to the NeMo Retriever Library. + NeMo Retriever Library is also known as NVIDIA Ingest. Currently, you can extract speech from the following file types: @@ -22,8 +22,8 @@ Currently, you can extract speech from the following file types: [NeMo Retriever Library](overview.md) supports extracting speech from audio files for Retrieval Augmented Generation (RAG) applications. Similar to how the multimodal document extraction pipeline leverages object detection and image OCR microservices, -NeMo Retriever Library leverages the [RIVA ASR NIM microservice](https://docs.nvidia.com/deeplearning/riva/user-guide/docs/index.html) -to transcribe speech to text, which is then embedded by using the Nemotron embedding NIM. +NeMo Retriever leverages the [RIVA ASR NIM microservice](https://docs.nvidia.com/deeplearning/riva/user-guide/docs/index.html) +to transcribe speech to text, which is then embedded by using the NeMo Retriever embedding NIM. !!! important @@ -62,17 +62,17 @@ Use the following procedure to run the NIM locally. NGC_API_KEY= ``` -3. Start the NeMo Retriever Library services with the `audio` profile. This profile includes the necessary components for audio processing. Use the following command. The `--profile audio` flag ensures that speech-specific services are launched. For more information, refer to [Profile Information](quickstart-guide.md#profile-information). +3. Start the retriever services with the `audio` profile. This profile includes the necessary components for audio processing. Use the following command. The `--profile audio` flag ensures that speech-specific services are launched. For more information, refer to [Profile Information](quickstart-guide.md#profile-information). ```shell docker compose --profile retrieval --profile audio up ``` -4. After the services are running, you can interact with NeMo Retriever Library by using Python. +4. After the services are running, you can interact with the pipeline by using Python. - The `Ingestor` object initializes the ingestion process. - The `files` method specifies the input files to process. - - The `extract` method tells NeMo Retriever Library to extract information from WAV audio files. + - The `extract` method tells the pipeline to extract information from WAV audio files. - The `document_type` parameter is optional, because `Ingestor` should detect the file type automatically. ```python @@ -89,12 +89,12 @@ Use the following procedure to run the NIM locally. !!! tip - For more Python examples, refer to [NeMo Retriever Library: Python Client Quick Start Guide](https://github.com/NVIDIA/NeMo-Retriever/blob/main/client/client_examples/examples/python_client_usage.ipynb). + For more Python examples, refer to [NV-Ingest: Python Client Quick Start Guide](https://github.com/NVIDIA/nv-ingest/blob/main/client/client_examples/examples/python_client_usage.ipynb). ## Use NVCF Endpoints for Cloud-Based Inference -Instead of running NeMo Retriever Library locally, you can use NVCF to perform inference by using remote endpoints. +Instead of running the pipeline locally, you can use NVCF to perform inference by using remote endpoints. 1. NVCF requires an authentication token and a function ID for access. Ensure you have these credentials ready before making API calls. @@ -102,7 +102,7 @@ Instead of running NeMo Retriever Library locally, you can use NVCF to perform i - The `Ingestor` object initializes the ingestion process. - The `files` method specifies the input files to process. - - The `extract` method tells NeMo Retriever Library to extract information from WAV audio files. + - The `extract` method tells the pipeline to extract information from WAV audio files. - The `document_type` parameter is optional, because `Ingestor` should detect the file type automatically. ```python @@ -124,12 +124,12 @@ Instead of running NeMo Retriever Library locally, you can use NVCF to perform i !!! tip - For more Python examples, refer to [NeMo Retriever Library: Python Client Quick Start Guide](https://github.com/NVIDIA/NeMo-Retriever/blob/main/client/client_examples/examples/python_client_usage.ipynb). + For more Python examples, refer to [NV-Ingest: Python Client Quick Start Guide](https://github.com/NVIDIA/nv-ingest/blob/main/client/client_examples/examples/python_client_usage.ipynb). ## Related Topics - [Support Matrix](support-matrix.md) -- [Troubleshoot NeMo Retriever Library](troubleshoot.md) -- [Use the NeMo Retriever Library Python API](python-api-reference.md) +- [Troubleshoot Nemo Retriever Extraction](troubleshoot.md) +- [Use the Python API](nv-ingest-python-api.md) diff --git a/docs/docs/extraction/benchmarking.md b/docs/docs/extraction/benchmarking.md index 62abbf302..0f8cd81d9 100644 --- a/docs/docs/extraction/benchmarking.md +++ b/docs/docs/extraction/benchmarking.md @@ -1,11 +1,11 @@ -# NeMo Retriever Library Integration Testing Framework +# nv-ingest Integration Testing Framework -A configurable, dataset-agnostic testing framework for end-to-end validation of NeMo Retriever Library pipelines. This framework uses structured YAML configuration for type safety, validation, and parameter management. +A configurable, dataset-agnostic testing framework for end-to-end validation of nv-ingest pipelines. This framework uses structured YAML configuration for type safety, validation, and parameter management. ## Dataset Prerequisites -Before you run any benchmarking or evaluation tests, you must first download the benchmark datasets. The three primary datasets used in NeMo Retriever Library benchmarking and evaluations are the following: +Before you run any benchmarking or evaluation tests, you must first download the benchmark datasets. The three primary datasets used in nv-ingest benchmarking and evaluations are the following: - **Bo20** - 20 PDFs for quick testing - **Bo767** - 767 PDFs for comprehensive benchmarking @@ -13,7 +13,7 @@ Before you run any benchmarking or evaluation tests, you must first download the ### How to Download the Datasets -Use the [Digital Corpora Download Notebook](https://github.com/NVIDIA/NeMo-Retriever/blob/main/evaluation/digital_corpora_download.ipynb) to download these datasets from the public Digital Corpora source. This notebook provides automated download functions that do the following: +Use the [Digital Corpora Download Notebook](https://github.com/NVIDIA/nv-ingest/blob/main/evaluation/digital_corpora_download.ipynb) to download these datasets from the public Digital Corpora source. This notebook provides automated download functions that do the following: - Download PDFs directly from Digital Corpora's public repository. - Support all three dataset sizes (Bo20, Bo767, Bo10k). @@ -29,26 +29,26 @@ Use the [Digital Corpora Download Notebook](https://github.com/NVIDIA/NeMo-Retri Before you use this documentation, you need the following: - Docker and Docker Compose are running -- A Python environment with nemo-retriever installed +- A Python environment with nv-ingest-client installed - The [benchmark datasets are downloaded](#dataset-prerequisites) ### Run Your First Test ```bash -# 1. Navigate to the nemo-retriever-bench directory +# 1. Navigate to the nv-ingest-harness directory cd tools/harness # 2. Install dependencies uv sync # 3. Run with a pre-configured dataset (assumes services are running) -uv run nemo-retriever-bench --case=e2e --dataset=bo767 +uv run nv-ingest-harness-run --case=e2e --dataset=bo767 # Or use a custom path that uses the "active" configuration -uv run nemo-retriever-bench --case=e2e --dataset=/path/to/your/data +uv run nv-ingest-harness-run --case=e2e --dataset=/path/to/your/data # With managed infrastructure (starts/stops services) -uv run nemo-retriever-bench --case=e2e --dataset=bo767 --managed +uv run nv-ingest-harness-run --case=e2e --dataset=bo767 --managed ``` ## Configuration System @@ -109,7 +109,7 @@ Each dataset includes its path, extraction settings, and recall evaluator in one ```yaml datasets: bo767: - path: /datasets/nv-ingest/bo767 + path: /raid/jioffe/bo767 extract_text: true extract_tables: true extract_charts: true @@ -118,7 +118,7 @@ datasets: recall_dataset: bo767 # Evaluator for recall testing bo20: - path: /datasets/nv-ingest/bo20 + path: /raid/jioffe/bo20 extract_text: true extract_tables: true extract_charts: true @@ -127,7 +127,7 @@ datasets: recall_dataset: null # bo20 does not have recall earnings: - path: /datasets/nv-ingest/earnings_consulting + path: /raid/jioffe/earnings_conusulting extract_text: true extract_tables: true extract_charts: true @@ -144,13 +144,13 @@ datasets: **Usage:** ```bash # Single dataset - configs applied automatically -uv run nemo-retriever-bench --case=e2e --dataset=bo767 +uv run nv-ingest-harness-run --case=e2e --dataset=bo767 # Multiple datasets (sweeping) - each gets its own config -uv run nemo-retriever-bench --case=e2e --dataset=bo767,earnings,bo20 +uv run nv-ingest-harness-run --case=e2e --dataset=bo767,earnings,bo20 # Custom path still works (uses active section config) -uv run nemo-retriever-bench --case=e2e --dataset=/custom/path +uv run nv-ingest-harness-run --case=e2e --dataset=/custom/path ``` **Dataset Extraction Settings:** @@ -176,7 +176,7 @@ Example: # YAML active section has api_version: v1 # Dataset bo767 has extract_images: false # Override via environment variable (highest priority) -EXTRACT_IMAGES=true API_VERSION=v2 uv run nemo-retriever-bench --case=e2e --dataset=bo767 +EXTRACT_IMAGES=true API_VERSION=v2 uv run nv-ingest-harness-run --case=e2e --dataset=bo767 # Result: Uses bo767 path, but extract_images=true (env override) and api_version=v2 (env override) ``` @@ -240,13 +240,13 @@ Configuration is validated on load with helpful error messages. ```bash # Run with default YAML configuration (assumes services are running) -uv run nemo-retriever-bench --case=e2e --dataset=bo767 +uv run nv-ingest-harness-run --case=e2e --dataset=bo767 # With document-level analysis -uv run nemo-retriever-bench --case=e2e --dataset=bo767 --doc-analysis +uv run nv-ingest-harness-run --case=e2e --dataset=bo767 --doc-analysis # With managed infrastructure (starts/stops services) -uv run nemo-retriever-bench --case=e2e --dataset=bo767 --managed +uv run nv-ingest-harness-run --case=e2e --dataset=bo767 --managed ``` ### Dataset Sweeping @@ -255,7 +255,7 @@ Run multiple datasets in a single command - each dataset automatically gets its ```bash # Sweep multiple datasets -uv run nemo-retriever-bench --case=e2e --dataset=bo767,earnings,bo20 +uv run nv-ingest-harness-run --case=e2e --dataset=bo767,earnings,bo20 # Each dataset runs sequentially with its own: # - Extraction settings (from dataset config) @@ -263,13 +263,13 @@ uv run nemo-retriever-bench --case=e2e --dataset=bo767,earnings,bo20 # - Results summary at the end # With managed infrastructure (services start once, shared across all datasets) -uv run nemo-retriever-bench --case=e2e --dataset=bo767,earnings,bo20 --managed +uv run nv-ingest-harness-run --case=e2e --dataset=bo767,earnings,bo20 --managed # E2E+Recall sweep (each dataset ingests then evaluates recall) -uv run nemo-retriever-bench --case=e2e_recall --dataset=bo767,earnings +uv run nv-ingest-harness-run --case=e2e_recall --dataset=bo767,earnings # Recall-only sweep (evaluates existing collections) -uv run nemo-retriever-bench --case=recall --dataset=bo767,earnings +uv run nv-ingest-harness-run --case=recall --dataset=bo767,earnings ``` **Sweep Behavior:** @@ -283,10 +283,10 @@ uv run nemo-retriever-bench --case=recall --dataset=bo767,earnings ```bash # Override via environment (useful for CI/CD) -API_VERSION=v2 EXTRACT_TABLES=false uv run nemo-retriever-bench --case=e2e +API_VERSION=v2 EXTRACT_TABLES=false uv run nv-ingest-harness-run --case=e2e # Temporary changes without editing YAML -DATASET_DIR=/custom/path uv run nemo-retriever-bench --case=e2e +DATASET_DIR=/custom/path uv run nv-ingest-harness-run --case=e2e ``` ## Test Scenarios @@ -472,23 +472,23 @@ recall: ```bash # Evaluate existing bo767 collections (no reranker) # recall_dataset automatically set from dataset config -uv run nemo-retriever-bench --case=recall --dataset=bo767 +uv run nv-ingest-harness-run --case=recall --dataset=bo767 # With reranker only (set reranker_mode in YAML recall section) -uv run nemo-retriever-bench --case=recall --dataset=bo767 +uv run nv-ingest-harness-run --case=recall --dataset=bo767 # Sweep multiple datasets for recall evaluation -uv run nemo-retriever-bench --case=recall --dataset=bo767,earnings +uv run nv-ingest-harness-run --case=recall --dataset=bo767,earnings ``` **E2E + Recall (fresh ingestion):** ```bash # Fresh ingestion with recall evaluation # recall_dataset automatically set from dataset config -uv run nemo-retriever-bench --case=e2e_recall --dataset=bo767 +uv run nv-ingest-harness-run --case=e2e_recall --dataset=bo767 # Sweep multiple datasets (each ingests then evaluates) -uv run nemo-retriever-bench --case=e2e_recall --dataset=bo767,earnings +uv run nv-ingest-harness-run --case=e2e_recall --dataset=bo767,earnings ``` **Dataset configuration:** @@ -536,7 +536,7 @@ The easiest way to test multiple datasets is using dataset sweeping: ```bash # Test multiple datasets - each gets its native config automatically -uv run nemo-retriever-bench --case=e2e --dataset=bo767,earnings,bo20 +uv run nv-ingest-harness-run --case=e2e --dataset=bo767,earnings,bo20 # Each dataset runs with its pre-configured extraction settings # Results are organized in separate artifact directories @@ -547,7 +547,7 @@ uv run nemo-retriever-bench --case=e2e --dataset=bo767,earnings,bo20 To sweep through different parameter values: 1. **Edit** `test_configs.yaml` - Update values in the `active` section -2. **Run** the test: `uv run nemo-retriever-bench --case=e2e --dataset=` +2. **Run** the test: `uv run nv-ingest-harness-run --case=e2e --dataset=` 3. **Analyze** results in `artifacts/_/` 4. **Repeat** steps 1-3 for next parameter combination @@ -555,18 +555,18 @@ Example parameter sweep workflow: ```bash # Test 1: Baseline V1 vim test_configs.yaml # Set: api_version=v1, extract_tables=true -uv run nemo-retriever-bench --case=e2e --dataset=bo767 +uv run nv-ingest-harness-run --case=e2e --dataset=bo767 # Test 2: V2 with 32-page splitting vim test_configs.yaml # Set: api_version=v2, pdf_split_page_count=32 -uv run nemo-retriever-bench --case=e2e --dataset=bo767 +uv run nv-ingest-harness-run --case=e2e --dataset=bo767 # Test 3: V2 with 8-page splitting vim test_configs.yaml # Set: pdf_split_page_count=8 -uv run nemo-retriever-bench --case=e2e --dataset=bo767 +uv run nv-ingest-harness-run --case=e2e --dataset=bo767 # Test 4: Tables disabled (override via env var) -EXTRACT_TABLES=false uv run nemo-retriever-bench --case=e2e --dataset=bo767 +EXTRACT_TABLES=false uv run nv-ingest-harness-run --case=e2e --dataset=bo767 ``` **Note**: Each test run creates a new timestamped artifact directory, so you can compare results across sweeps. @@ -576,7 +576,7 @@ EXTRACT_TABLES=false uv run nemo-retriever-bench --case=e2e --dataset=bo767 ### Attach Mode (Default) ```bash -uv run nemo-retriever-bench --case=e2e --dataset=bo767 +uv run nv-ingest-harness-run --case=e2e --dataset=bo767 ``` - **Default behavior**: Assumes services are already running @@ -588,7 +588,7 @@ uv run nemo-retriever-bench --case=e2e --dataset=bo767 ### Managed Mode ```bash -uv run nemo-retriever-bench --case=e2e --dataset=bo767 --managed +uv run nv-ingest-harness-run --case=e2e --dataset=bo767 --managed ``` - Starts Docker services automatically @@ -600,10 +600,10 @@ uv run nemo-retriever-bench --case=e2e --dataset=bo767 --managed **Managed mode options:** ```bash # Skip Docker image rebuild (faster startup) -uv run nemo-retriever-bench --case=e2e --dataset=bo767 --managed --no-build +uv run nv-ingest-harness-run --case=e2e --dataset=bo767 --managed --no-build # Keep services running after test (useful for multi-test scenarios) -uv run nemo-retriever-bench --case=e2e --dataset=bo767 --managed --keep-up +uv run nv-ingest-harness-run --case=e2e --dataset=bo767 --managed --keep-up ``` ## Artifacts and Logging @@ -631,7 +631,7 @@ tools/harness/artifacts/__UTC/ Enable per-document element breakdown: ```bash -uv run nemo-retriever-bench --case=e2e --doc-analysis +uv run nv-ingest-harness-run --case=e2e --doc-analysis ``` **Sample Output:** @@ -655,21 +655,21 @@ This provides: - `test_configs.yaml` - Structured configuration file - Active test configuration (edit directly) - Dataset shortcuts for quick access -- `src/nemo_retriever_harness/config.py` - Configuration management +- `src/nv_ingest_harness/config.py` - Configuration management - YAML loading and parsing - Type-safe config dataclass - Validation logic with helpful errors - Environment variable override support **2. Test Runner** -- `src/nemo_retriever_harness/cli/run.py` - Main orchestration +- `src/nv_ingest_harness/cli/run.py` - Main orchestration - Configuration loading with precedence chain - Docker service management (managed mode) - Test case execution with config injection - Artifact collection and consolidation **3. Test Cases** -- `src/nemo_retriever_harness/cases/e2e.py` - Primary E2E test (✅ YAML-based) +- `src/nv_ingest_harness/cases/e2e.py` - Primary E2E test (✅ YAML-based) - Accepts config object directly - Type-safe parameter access - Full pipeline validation (extract → embed → VDB → retrieval) @@ -677,19 +677,19 @@ This provides: - `cases/e2e_with_llm_summary.py` - E2E with LLM (✅ YAML-based) - Adds UDF-based LLM summarization - Same config-based architecture as e2e.py -- `src/nemo_retriever_harness/cases/recall.py` - Recall evaluation (✅ YAML-based) +- `src/nv_ingest_harness/cases/recall.py` - Recall evaluation (✅ YAML-based) - Evaluates retrieval accuracy against existing collections - Requires `recall_dataset` in config (from dataset config or env var) - Supports reranker comparison modes (none, with, both) - Multimodal-only evaluation against `{test_name}_multimodal` collection -- `src/nemo_retriever_harness/cases/e2e_recall.py` - E2E + Recall (✅ YAML-based) +- `src/nv_ingest_harness/cases/e2e_recall.py` - E2E + Recall (✅ YAML-based) - Combines ingestion (via e2e.py) with recall evaluation (via recall.py) - Automatically creates collection during ingestion - Requires `recall_dataset` in config (from dataset config or env var) - Merges ingestion and recall metrics in results **4. Shared Utilities** -- `src/nemo_retriever_harness/utils/interact.py` - Common testing utilities +- `src/nv_ingest_harness/utils/interact.py` - Common testing utilities - `embed_info()` - Embedding model detection - `milvus_chunks()` - Vector database statistics - `segment_results()` - Result categorization by type @@ -812,7 +812,7 @@ The framework is dataset-agnostic and supports multiple approaches: **Option 1: Use pre-configured dataset (Recommended)** ```bash # Dataset configs automatically applied -uv run nemo-retriever-bench --case=e2e --dataset=bo767 +uv run nv-ingest-harness-run --case=e2e --dataset=bo767 ``` **Option 2: Add new dataset to YAML** @@ -827,17 +827,17 @@ datasets: extract_infographics: false recall_dataset: null # or set to evaluator name if applicable ``` -Then use: `uv run nemo-retriever-bench --case=e2e --dataset=my_dataset` +Then use: `uv run nv-ingest-harness-run --case=e2e --dataset=my_dataset` **Option 3: Use custom path (uses active section config)** ```bash -uv run nemo-retriever-bench --case=e2e --dataset=/path/to/your/dataset +uv run nv-ingest-harness-run --case=e2e --dataset=/path/to/your/dataset ``` **Option 4: Environment variable override** ```bash # Override specific settings via env vars -EXTRACT_IMAGES=true uv run nemo-retriever-bench --case=e2e --dataset=bo767 +EXTRACT_IMAGES=true uv run nv-ingest-harness-run --case=e2e --dataset=bo767 ``` **Best Practice**: For repeated testing, add your dataset to the `datasets` section with its native extraction settings. This ensures consistent configuration and enables dataset sweeping. @@ -849,4 +849,4 @@ EXTRACT_IMAGES=true uv run nemo-retriever-bench --case=e2e --dataset=bo767 - **Docker setup**: See project root README for service management commands - **API documentation**: See `docs/` for API version differences -The framework prioritizes clarity, type safety, and validation to support reliable testing of NeMo Retriever pipelines. +The framework prioritizes clarity, type safety, and validation to support reliable testing of nv-ingest pipelines. diff --git a/docs/docs/extraction/chunking.md b/docs/docs/extraction/chunking.md index ec7b88632..540b147ca 100644 --- a/docs/docs/extraction/chunking.md +++ b/docs/docs/extraction/chunking.md @@ -4,7 +4,7 @@ Splitting, also known as chunking, breaks large documents or text into smaller, After chunking, only the most relevant pieces of information are retrieved for a given query. Chunking also prevents text from exceeding the context window of the embedding model. -There are two ways that the retriever pipeline chunks text: +There are two ways that NV Ingest chunks text: - By using the `text_depth` parameter in the `extraction` task. - Token-based splitting by using the `split` task. @@ -93,7 +93,7 @@ The following table contains the `split` parameters. ### Pre-download the Tokenizer -By default, the NeMo Retriever Library container comes with the `meta-llama/Llama-3.2-1B` tokenizer pre-downloaded +By default, the NV Ingest container comes with the `meta-llama/Llama-3.2-1B` tokenizer pre-downloaded so that it doesn't have to download a tokenizer at runtime. If you are building the container yourself and want to pre-download this model, do the following: @@ -106,6 +106,6 @@ If you are building the container yourself and want to pre-download this model, ## Related Topics -- [Use the Python API](python-api-reference.md) +- [Use the Python API](nv-ingest-python-api.md) - [NeMo Retriever Library V2 API Guide](v2-api-guide.md) -- [Environment Variables](environment-config.md) +- [Environment Variables](environment-variables.md) diff --git a/docs/docs/extraction/content-metadata.md b/docs/docs/extraction/content-metadata.md index c02aa8c46..e7d8bb050 100644 --- a/docs/docs/extraction/content-metadata.md +++ b/docs/docs/extraction/content-metadata.md @@ -10,7 +10,7 @@ Metadata can be extracted from a source or content, or generated by using models !!! note - NVIDIA Ingest (nv-ingest) has been renamed to the NeMo Retriever Library. + NeMo Retriever Library is also known as NVIDIA Ingest. @@ -43,7 +43,7 @@ These fields apply to all content types including text, images, and tables. | Subtype | The type of the content for structured data types, such as table or chart. | — | | Content | Content extracted from the source. | Extracted | | Description | A text description of the content object. | Generated | -| Page \# | The page \# of the content in the source. Prior to 26.3.0-RC1, this field was 0-indexed. Beginning with 26.3.0-RC1, this field is 1-indexed. | Extracted | +| Page \# | The page \# of the content in the source. Prior to 26.1.2, this field was 0-indexed. Beginning with 26.1.2, this field is 1-indexed. | Extracted | | Hierarchy | The location or order of the content within the source. | Extracted | @@ -282,7 +282,7 @@ The following enums are used by this schema: The following is an example JSON representation of metadata. This is an example only, and does not contain the full metadata. -For the full file, refer to the [data folder](https://github.com/NVIDIA/NeMo-Retriever/blob/main/data/multimodal_test.json). +For the full file, refer to the [data folder](https://github.com/NVIDIA/nv-ingest/blob/main/data/multimodal_test.json). ```json { @@ -374,4 +374,4 @@ For the full file, refer to the [data folder](https://github.com/NVIDIA/NeMo-Ret ## Related Topics -- [Environment Variables](environment-config.md) +- [Environment Variables](environment-variables.md) diff --git a/docs/docs/extraction/contributing.md b/docs/docs/extraction/contributing.md index b39dcb636..6a136c218 100644 --- a/docs/docs/extraction/contributing.md +++ b/docs/docs/extraction/contributing.md @@ -1,4 +1,4 @@ -# Contributing to NeMo Retriever Library +# Contributing to NV-Ingest -External contributions to NeMo Retriever Library will be welcome soon, and they are greatly appreciated! -For more information, refer to [Contributing to NeMo Retriever Library](https://github.com/NVIDIA/NeMo-Retriever/blob/main/CONTRIBUTING.md). +External contributions to NV-Ingest will be welcome soon, and they are greatly appreciated! +For more information, refer to [Contributing to NV-Ingest](https://github.com/NVIDIA/nv-ingest/blob/main/CONTRIBUTING.md). diff --git a/docs/docs/extraction/custom-metadata.md b/docs/docs/extraction/custom-metadata.md index 1ac644243..805aef628 100644 --- a/docs/docs/extraction/custom-metadata.md +++ b/docs/docs/extraction/custom-metadata.md @@ -56,14 +56,14 @@ meta_df.to_csv(file_path) ### Example: Add Custom Metadata During Ingestion The following example adds custom metadata during ingestion. -For more information about the `Ingestor` class, see [Use the NeMo Retriever Library Python API](python-api-reference.md). +For more information about the `Ingestor` class, see [Use the Python API](nv-ingest-python-api.md). For more information about the `vdb_upload` method, see [Upload Data](data-store.md). ```python -from nemo_retriever.client import Ingestor +from nv_ingest_client.client import Ingestor hostname="localhost" -collection_name = "nemo_retriever_collection" +collection_name = "nv_ingest_collection" sparse = True ingestor = ( @@ -142,13 +142,13 @@ you can use the `content_metadata` field to filter search results. The following example uses a filter expression to narrow results by department. ```python -from nemo_retriever.util.milvus import query +from nv_ingest_client.util.milvus import nvingest_retrieval hostname="localhost" -collection_name = "nemo_retriever_collection" +collection_name = "nv_ingest_collection" sparse = True top_k = 5 -model_name="nvidia/llama-nemotron-embed-1b-v2" +model_name="nvidia/llama-3.2-nv-embedqa-1b-v2" filter_expr = 'content_metadata["department"] == "Engineering"' @@ -156,7 +156,7 @@ queries = ["this is expensive"] q_results = [] for que in queries: q_results.append( - query( + nvingest_retrieval( [que], collection_name, milvus_uri=f"http://{hostname}:19530", @@ -177,4 +177,4 @@ print(f"{q_results}") ## Related Content - For a notebook that uses the CLI to add custom metadata and filter query results, see [metadata_and_filtered_search.ipynb -](https://github.com/NVIDIA/NeMo-Retriever/blob/main/examples/metadata_and_filtered_search.ipynb). +](https://github.com/NVIDIA/nv-ingest/blob/main/examples/metadata_and_filtered_search.ipynb). diff --git a/docs/docs/extraction/data-store.md b/docs/docs/extraction/data-store.md index 990ee4f3d..580a1dfc7 100644 --- a/docs/docs/extraction/data-store.md +++ b/docs/docs/extraction/data-store.md @@ -4,48 +4,143 @@ Use this documentation to learn how [NeMo Retriever Library](overview.md) handle !!! note - NVIDIA Ingest (nv-ingest) has been renamed to the NeMo Retriever Library. + NeMo Retriever Library is also known as NVIDIA Ingest. ## Overview -NeMo Retriever Library supports extracting text representations of various forms of content, -and ingesting to the [Milvus vector database](https://milvus.io/). -The data upload task (`vdb_upload`) pulls extraction results to the Python client, -and then pushes them to Milvus by using its underlying MinIO object store service. +NeMo Retriever Library supports extracting text representations of various forms of content, +and ingesting to a vector database. **[LanceDB](https://lancedb.com/) is the default vector database backend** for storing and retrieving extracted embeddings. [Milvus](https://milvus.io/) remains fully supported as an alternative. -The vector database stores only the extracted text representations of ingested data. +The data upload task (`vdb_upload`) pulls extraction results to the Python client, +and then pushes them to the configured vector database (LanceDB or Milvus). When using Milvus, data is pushed by using its underlying MinIO object store service. + +The vector database stores only the extracted text representations of ingested data. It does not store the embeddings for images. !!! tip "Storing Extracted Images" - To persist extracted images, tables, and chart renderings to disk or object storage, use the `store` task in addition to `vdb_upload`. The `store` task supports any fsspec-compatible backend (local filesystem, S3, GCS, etc.). For details, refer to [Store Extracted Images](python-api-reference.md#store-extracted-images). + To persist extracted images, tables, and chart renderings to disk or object storage, use the `store` task in addition to `vdb_upload`. The `store` task supports any fsspec-compatible backend (local filesystem, S3, GCS, etc.). For details, refer to [Store Extracted Images](nv-ingest-python-api.md#store-extracted-images). + +NeMo Retriever Library supports uploading data by using the [Ingestor.vdb_upload API](nv-ingest-python-api.md). +Currently, data upload is not supported through the [CLI](nv-ingest_cli.md). + + + +## Why LanceDB? + +LanceDB delivers measurably lower retrieval latency through three architectural advantages over the previous Milvus default: + +- **Lance columnar format** — Data is stored in Lance files, an Arrow/Parquet-style analytics layout optimized for fast local scans and indexed retrieval. This eliminates the serialization overhead of client-server protocols. +- **IVF_HNSW_SQ index** — Vectors are scalar-quantized (SQ) within an IVF-HNSW index, compressing them for faster search with lower memory bandwidth cost. +- **Embedded runtime** — LanceDB runs in-process, removing the multi-service dependency chain required by Milvus (Milvus server + etcd + MinIO). No external containers to start, configure, or maintain. + +This combination of file format, index strategy, and simpler runtime path produces the latency improvements observed in benchmarks. + + + +## Upload to LanceDB (default) + +LanceDB uses the `LanceDB` operator class from the client library. You can configure it via the Python API or via the test harness. + +### Programmatic API (Python) + +```python +from nv_ingest_client.util.vdb.lancedb import LanceDB + +vdb = LanceDB( + uri="lancedb", # Path to LanceDB database directory + table_name="nv-ingest", # Table name + index_type="IVF_HNSW_SQ", # Index type (default) + hybrid=False, # Enable hybrid search (BM25 FTS + vector) +) + +# Ingest +vdb.run(results) + +# Retrieve +docs = vdb.retrieval(queries, top_k=10) +``` + +When using the `Ingestor` with `vdb_upload`, the backend defaults to LanceDB unless you configure Milvus (see [Upload to Milvus](#upload-to-milvus)). -NeMo Retriever Library supports uploading data by using the [Ingestor.vdb_upload API](python-api-reference.md). -Currently, data upload is not supported through the [NeMo Retriever CLI](cli-reference.md). +### Test harness configuration + +In `tools/harness/test_configs.yaml`: + +```yaml +active: + vdb_backend: lancedb # Options: "lancedb" (default) or "milvus" + hybrid: false # LanceDB only: enable hybrid retrieval (FTS + vector) + sparse: false # Milvus only: enable BM42 sparse embeddings +``` + +Or via environment variables: + +```bash +# Switch to Milvus +VDB_BACKEND=milvus uv run nv-ingest-harness-run --case=e2e --dataset=bo767 + +# Enable LanceDB hybrid search +HYBRID=true uv run nv-ingest-harness-run --case=e2e --dataset=bo767 +``` + + + +## Hybrid search (LanceDB) + +LanceDB supports **hybrid retrieval**, combining dense vector similarity with BM25 full-text search. Results are fused using Reciprocal Rank Fusion (RRF) reranking. + +Hybrid search improves recall by approximately +0.5% to +3.5% over vector-only retrieval with negligible latency impact: + +| Dataset | Vector-Only Recall@5 | Hybrid Recall@5 | Delta | +|--------------------|----------------------|-----------------|--------| +| bo767 (76K rows) | 84.5% | 85.0% | +0.5% | +| bo767 (reranked) | 90.7% | 91.8% | +1.1% | +| earnings (19K rows)| 61.5% | 65.0% | +3.5% | +| earnings (reranked)| 74.5% | 76.4% | +1.9% | + +Hybrid search latency is typically 28–57 ms/query (vs. 31–37 ms/query for vector-only). The one-time FTS index build adds approximately 6.5 seconds for a 76K-row dataset. + +Enable hybrid search by setting `hybrid=True` when creating the LanceDB operator or via the harness/config (e.g. `HYBRID=true`). + + + +## Infrastructure: LanceDB vs Milvus + +| Aspect | LanceDB (default) | Milvus | +|---------------------|-------------------------|---------------------------| +| Runtime model | Embedded (in-process) | Client-server | +| External services | None | Milvus + etcd + MinIO | +| Docker Compose profile | Not needed | `--profile retrieval` | +| Index type | IVF_HNSW_SQ | HNSW, GPU_CAGRA, etc. | +| Hybrid search | BM25 FTS + vector (RRF) | BM42 sparse embeddings | +| Persistence | Lance files on disk | Milvus server + MinIO | ## Upload to Milvus -The `vdb_upload` method uses GPU Cagra accelerated bulk indexing support to load chunks into Milvus. -To enable hybrid retrieval, NeMo Retriever supports both dense (llama-embedder embeddings) and sparse (bm25) embeddings. +You can continue using Milvus with no code changes — set `vdb_backend: milvus` in the harness config or use the existing Milvus API calls (`vdb_upload(milvus_uri=...)`, `nvingest_retrieval(...)`). + +The `vdb_upload` method uses GPU Cagra accelerated bulk indexing support to load chunks into Milvus. +To enable hybrid retrieval with Milvus, the library supports both dense (llama-embedder embeddings) and sparse (BM42) embeddings. -Bulk indexing is high throughput, but has a built-in overhead of around one minute. -If the number of ingested documents is 10 or fewer, NeMo Retriever uses faster streaming inserts instead. -You can control this by setting `stream=True`. +Bulk indexing is high throughput, but has a built-in overhead of around one minute. +If the number of ingested documents is 10 or fewer, the library uses faster streaming inserts instead. +You can control this by setting `stream=True`. -If you set `recreate=True`, NeMo Retriever drops and recreates the collection given as *collection_name*. -The Milvus service persists data to disk by using a Docker volume defined in docker-compose.yaml. -You can delete all collections by deleting that volume, and then restarting the NeMo Retriever service. +If you set `recreate=True`, the pipeline drops and recreates the collection given as *collection_name*. +The Milvus service persists data to disk by using a Docker volume defined in docker-compose.yaml. +You can delete all collections by deleting that volume, and then restarting the Milvus service. !!! warning - When you use the `vdb_upload` task with Milvus, you must expose the ports for the Milvus and MinIO containers to the NeMo Retriever client. This ensures that the NeMo Retriever client can connect to both services and perform the `vdb_upload` action. + When you use the `vdb_upload` task with Milvus, you must expose the ports for the Milvus and MinIO containers to the client. This ensures that the client can connect to both services and perform the `vdb_upload` action. !!! tip - When you use the `vdb_upload` method, the behavior of the upload depends on the `return_failures` parameter of the `ingest` method. For details, refer to [Capture Job Failures](python-api-reference.md#capture-job-failures). + When you use the `vdb_upload` method, the behavior of the upload depends on the `return_failures` parameter of the `ingest` method. For details, refer to [Capture Job Failures](nv-ingest-python-api.md#capture-job-failures). To upload to Milvus, use code similar to the following to define your `Ingestor`. @@ -70,21 +165,21 @@ Ingestor(client=client) ## Upload to a Custom Data Store -You can ingest to other data stores by using the `Ingestor.vdb_upload` method; -however, you must configure other data stores and connections yourself. -NeMo Retriever Library does not provide connections to other data sources. +You can ingest to other data stores by using the `Ingestor.vdb_upload` method; +however, you must configure other data stores and connections yourself. +NeMo Retriever Library does not provide connections to other data sources. !!! important NVIDIA makes no claim about accuracy, performance, or functionality of any vector database except Milvus. If you use a different vector database, it's your responsibility to test and maintain it. -For more information, refer to [Build a Custom Vector Database Operator](https://github.com/NVIDIA/NeMo-Retriever/blob/main/examples/building_vdb_operator.ipynb). +For more information, refer to [Build a Custom Vector Database Operator](https://github.com/NVIDIA/nv-ingest/blob/main/examples/building_vdb_operator.ipynb). ## Related Topics -- [Python API Reference](python-api-reference.md) -- [Store Extracted Images](python-api-reference.md#store-extracted-images) +- [Use the NeMo Retriever Library Python API](nv-ingest-python-api.md) +- [Store Extracted Images](nv-ingest-python-api.md#store-extracted-images) - [Environment Variables](environment-config.md) -- [Troubleshoot NeMo Retriever Library](troubleshoot.md) +- [Troubleshoot Nemo Retriever Extraction](troubleshoot.md) diff --git a/docs/docs/extraction/environment-config.md b/docs/docs/extraction/environment-config.md index 422db0add..b411ea5b6 100644 --- a/docs/docs/extraction/environment-config.md +++ b/docs/docs/extraction/environment-config.md @@ -5,7 +5,7 @@ You can specify these in your .env file or directly in your environment. !!! note - NVIDIA Ingest (nv-ingest) has been renamed to the NeMo Retriever Library. + NeMo Retriever Library is also known as NVIDIA Ingest. ## General Environment Variables @@ -17,19 +17,29 @@ You can specify these in your .env file or directly in your environment. | `INGEST_LOG_LEVEL` | - `DEBUG`
- `INFO`
- `WARNING`
- `ERROR`
- `CRITICAL`
| The log level for the ingest service, which controls the verbosity of the logging output. | | `MESSAGE_CLIENT_HOST` | - `redis`
- `localhost`
- `192.168.1.10`
| Specifies the hostname or IP address of the message broker used for communication between services. | | `MESSAGE_CLIENT_PORT` | - `7670`
- `6379`
| Specifies the port number on which the message broker is listening. | -| `MINIO_BUCKET` | `nemo-retriever`
| Name of MinIO bucket, used to store image, table, and chart extractions. | +| `MINIO_BUCKET` | `nv-ingest`
| Name of MinIO bucket, used to store image, table, and chart extractions. | | `NGC_API_KEY` | `nvapi-*************`
| An authorized NGC API key, used to interact with hosted NIMs. To create an NGC key, go to [https://org.ngc.nvidia.com/setup/api-keys](https://org.ngc.nvidia.com/setup/api-keys). | | `NIM_NGC_API_KEY` | — | The key that NIM microservices inside docker containers use to access NGC resources. This is necessary only in some cases when it is different from `NGC_API_KEY`. If this is not specified, `NGC_API_KEY` is used to access NGC resources. | | `OTEL_EXPORTER_OTLP_ENDPOINT` | `http://otel-collector:4317`
| The endpoint for the OpenTelemetry exporter, used for sending telemetry data. | | `REDIS_INGEST_TASK_QUEUE` | `ingest_task_queue`
| The name of the task queue in Redis where tasks are stored and processed. | | `REDIS_POOL_SIZE` | - `50` (default)
- `100`
- `200`
| Maximum Redis connection pool size. Increase for high-concurrency workloads processing many documents in parallel. Default of 50 works well for most deployments. | -| `IMAGE_STORAGE_URI` | `s3://nemo-retriever/artifacts/store/images`
| Default fsspec-compatible URI for the `store` task. Supports `s3://`, `file://`, `gs://`, etc. See [Store Extracted Images](python-api-reference.md#store-extracted-images). | +| `IMAGE_STORAGE_URI` | `s3://nv-ingest/artifacts/store/images`
| Default fsspec-compatible URI for the `store` task. Supports `s3://`, `file://`, `gs://`, etc. See [Store Extracted Images](nv-ingest-python-api.md#store-extracted-images). | | `IMAGE_STORAGE_PUBLIC_BASE_URL` | `https://assets.example.com/images`
| Optional HTTP(S) base URL for serving stored images. | +## Vector Database (Retrieval) Environment Variables + +These variables apply when using the test harness or when configuring the vector database backend. + +| Name | Example | Description | +|----------------------------------|--------------------------------|-----------------------------------------------------------------------| +| `VDB_BACKEND` | `lancedb` (default)
`milvus`
| Vector database backend. Use `lancedb` for embedded, in-process storage (default), or `milvus` for client-server. | +| `HYBRID` | `true`
`false` (default)
| LanceDB only: enable hybrid retrieval (BM25 FTS + vector, RRF). | + + ## Library Mode Environment Variables -These environment variables apply specifically when running NeMo Retriever in library mode. +These environment variables apply specifically when running the library in library mode. | Name | Example | Description | |-----------------------------------|---------------------------------------------------------|-------------| diff --git a/docs/docs/extraction/faq.md b/docs/docs/extraction/faq.md index d7eabd490..7bbb33d5f 100644 --- a/docs/docs/extraction/faq.md +++ b/docs/docs/extraction/faq.md @@ -4,35 +4,35 @@ This documentation contains the Frequently Asked Questions (FAQ) for [NeMo Retri !!! note - NVIDIA Ingest (nv-ingest) has been renamed to the NeMo Retriever Library. + NeMo Retriever Library is also known as NVIDIA Ingest. ## What if I already have a retrieval pipeline? Can I just use NeMo Retriever Library? -You can use the nemo-retriever CLI or Python APIs to perform extraction only, and then consume the results. +You can use the CLI or Python APIs to perform extraction only, and then consume the results. Using the Python API, `results` is a list object with one entry. -For code examples, see the Jupyter notebooks [Multimodal RAG with LlamaIndex](https://github.com/NVIDIA/NeMo-Retriever/blob/main/examples/llama_index_multimodal_rag.ipynb) -and [Multimodal RAG with LangChain](https://github.com/NVIDIA/NeMo-Retriever/blob/main/examples/langchain_multimodal_rag.ipynb). +For code examples, see the Jupyter notebooks [Multimodal RAG with LlamaIndex](https://github.com/NVIDIA/nv-ingest/blob/main/examples/llama_index_multimodal_rag.ipynb) +and [Multimodal RAG with LangChain](https://github.com/NVIDIA/nv-ingest/blob/main/examples/langchain_multimodal_rag.ipynb). ## Where does NeMo Retriever Library ingest to? -NeMo Retriever Library supports extracting text representations of various forms of content, -and ingesting to the [Milvus vector database](https://milvus.io/). -NeMo Retriever Library does not store data on disk except through Milvus and its underlying Minio object store. -You can ingest to other data stores; however, you must configure other data stores yourself. +NeMo Retriever Library supports extracting text representations of various forms of content, +and ingesting to a vector database. **[LanceDB](https://lancedb.com/) is the default**; [Milvus](https://milvus.io/) is also fully supported. +NeMo Retriever Library does not store data on disk except through the vector database (LanceDB uses local Lance files; Milvus uses its server and MinIO). +You can ingest to other data stores; however, you must configure other data stores yourself. For more information, refer to [Data Upload](data-store.md). ## How would I process unstructured images? -For images that `nemotron-page-elements-v3` does not classify as tables, charts, or infographics, +For images that `nemoretriever-page-elements-v3` does not classify as tables, charts, or infographics, you can use our VLM caption task to create a dense caption of the detected image. That caption is then be embedded along with the rest of your content. -For more information, refer to [Extract Captions from Images](python-api-reference.md#extract-captions-from-images). +For more information, refer to [Extract Captions from Images](nv-ingest-python-api.md#extract-captions-from-images). @@ -57,21 +57,27 @@ You can set those directly in `docker-compose.yaml`, or in an [environment varia ### Library Mode -For production environments, you should use the provided Helm charts. For [library mode](quickstart-library-mode.md), you should set the environment variable `NVIDIA_API_KEY`. This happens because the NeMo Retriever Library containers—and the services running inside them—don’t have access to the environment variables of the host machine where the `docker compose` command is executed. Setting the variables in the `.env` file ensures that they are passed into the containers and available to the services that need them. +For production environments, you should use the provided Helm charts. For [library mode](quickstart-library-mode.md), you should set the environment variable `NVIDIA_API_KEY`. This is because the NeMo Retriever containers and the NeMo Retriever services running inside them do not have access to the environment variables on the host machine where you run the `docker compose` command. Setting the variables in the `.env` file ensures that they are passed into the containers and available to the services that need them. For advanced scenarios, you might want to use library mode with self-hosted NIM instances. You can set custom endpoints for each NIM. -For examples of `*_ENDPOINT` variables, refer to [NeMo-Retriever/docker-compose.yaml](https://github.com/NVIDIA/NeMo-Retriever/blob/main/docker-compose.yaml). +For examples of `*_ENDPOINT` variables, refer to [nv-ingest/docker-compose.yaml](https://github.com/NVIDIA/nv-ingest/blob/main/docker-compose.yaml). + + + + + + ## What parameters or settings can I adjust to optimize extraction from my documents or data? See the [Profile Information](quickstart-guide.md#profile-information) section for information about the optional NIM components of the pipeline. -You can configure the `extract`, `caption`, and other tasks by using the [Ingestor API](python-api-reference.md). +You can configure the `extract`, `caption`, and other tasks by using the [Ingestor API](nv-ingest-python-api.md). To choose what types of content to extract, use code similar to the following. -For more information, refer to [Extract Specific Elements from PDFs](python-api-reference.md#extract-specific-elements-from-pdfs). +For more information, refer to [Extract Specific Elements from PDFs](nv-ingest-python-api.md#extract-specific-elements-from-pdfs). ```python Ingestor(client=client) @@ -88,7 +94,7 @@ Ingestor(client=client) ``` To generate captions for images, use code similar to the following. -For more information, refer to [Extract Captions from Images](python-api-reference.md#extract-captions-from-images). +For more information, refer to [Extract Captions from Images](nv-ingest-python-api.md#extract-captions-from-images). ```python Ingestor(client=client) diff --git a/docs/docs/extraction/helm.md b/docs/docs/extraction/helm.md index bcc63b4c0..1a6e885a3 100644 --- a/docs/docs/extraction/helm.md +++ b/docs/docs/extraction/helm.md @@ -3,8 +3,4 @@ To deploy [NeMo Retriever Library](overview.md) by using Helm, -refer to [NeMo Retriever Helm Charts](https://github.com/NVIDIA/NeMo-Retriever/blob/release/26.3.0/helm/README.md). - -!!! note "Air-gapped environments" - - For deploying in an air-gapped environment, refer to the [NVIDIA NIM Operator documentation on Air-Gapped Environments](https://docs.nvidia.com/nim-operator/latest/air-gap.html), which explains how to deploy NIMs when your cluster has no internet or NGC registry access. +refer to [NV-Ingest Helm Charts](https://github.com/NVIDIA/nv-ingest/blob/release/26.1.2/helm/README.md). diff --git a/docs/docs/extraction/nemoretriever-parse.md b/docs/docs/extraction/nemoretriever-parse.md index 1c78c3cdb..3da84cdce 100644 --- a/docs/docs/extraction/nemoretriever-parse.md +++ b/docs/docs/extraction/nemoretriever-parse.md @@ -4,25 +4,25 @@ For scanned documents, or documents with complex layouts, we recommend that you use [nemotron-parse](https://build.nvidia.com/nvidia/nemotron-parse). Nemotron parse provides higher-accuracy text extraction. -This documentation describes the following three methods +This documentation describes the following two methods to run [NeMo Retriever Library](overview.md) with nemotron-parse. - Run the NIM locally by using Docker Compose - Use NVIDIA Cloud Functions (NVCF) endpoints for cloud-based inference -- Run the Ray batch pipeline with nemotron-parse (library mode) !!! note - NVIDIA Ingest (nv-ingest) has been renamed to the NeMo Retriever Library. + NeMo Retriever Library is also known as NVIDIA Ingest. ## Limitations -Currently, the limitations to using `nemotron-parse` with the NeMo Retriever Library are the following: +Currently, the limitations to using `nemotron-parse` with NeMo Retriever Library are the following: -- Extraction with `nemotron-parse` only supports PDFs, not image files. For more information, refer to [Troubleshoot NeMo Retriever Library](troubleshoot.md). +- Extraction with `nemotron-parse` only supports PDFs, not image files. For more information, refer to [Troubleshoot Nemo Retriever Extraction](troubleshoot.md). - `nemotron-parse` is not supported on RTX Pro 6000, B200, or H200 NVL. For more information, refer to the [Nemotron Parse Support Matrix](https://docs.nvidia.com/nim/vision-language-models/latest/support-matrix.html#nemotron-parse). + ## Run the NIM Locally by Using Docker Compose Use the following procedure to run the NIM locally. @@ -32,7 +32,7 @@ Use the following procedure to run the NIM locally. Due to limitations in available VRAM controls in the current release of nemotron-parse, it must run on a [dedicated additional GPU](support-matrix.md). Edit docker-compose.yaml to set nemotron-parse's device_id to a dedicated GPU: device_ids: ["1"] or higher. -1. Start the NeMo Retriever Library services with the `nemotron-parse` profile. This profile includes the necessary components for extracting text and metadata from images. Use the following command. +1. Start the retriever services with the `nemotron-parse` profile. This profile includes the necessary components for extracting text and metadata from images. Use the following command. - The --profile nemotron-parse flag ensures that vision-language retrieval services are launched. For more information, refer to [Profile Information](quickstart-guide.md#profile-information). @@ -40,11 +40,11 @@ Use the following procedure to run the NIM locally. docker compose --profile nemotron-parse up ``` -2. After the services are running, you can interact with NeMo Retriever Library by using Python. +2. After the services are running, you can interact with the pipeline by using Python. - The `Ingestor` object initializes the ingestion process. - The `files` method specifies the input files to process. - - The `extract` method tells NeMo Retriever Library to use `nemotron-parse` for extracting text and metadata from images. + - The `extract` method tells the pipeline to use `nemotron-parse` for extracting text and metadata from images. - The `document_type` parameter is optional, because `Ingestor` should detect the file type automatically. ```python @@ -60,12 +60,12 @@ Use the following procedure to run the NIM locally. !!! tip - For more Python examples, refer to [NeMo Retriever Library: Python Client Quick Start Guide](https://github.com/NVIDIA/NeMo-Retriever/blob/main/client/client_examples/examples/python_client_usage.ipynb). + For more Python examples, refer to [NV-Ingest: Python Client Quick Start Guide](https://github.com/NVIDIA/nv-ingest/blob/main/client/client_examples/examples/python_client_usage.ipynb). ## Using NVCF Endpoints for Cloud-Based Inference -Instead of running NeMo Retriever Library locally, you can use NVCF to perform inference by using remote endpoints. +Instead of running the pipeline locally, you can use NVCF to perform inference by using remote endpoints. 1. Set the authentication token in the `.env` file. @@ -85,7 +85,7 @@ Instead of running NeMo Retriever Library locally, you can use NVCF to perform i - The `Ingestor` object initializes the ingestion process. - The `files` method specifies the input files to process. - - The `extract` method tells NeMo Retriever Library to use `nemotron-parse` for extracting text and metadata from images. + - The `extract` method tells the pipeline to use `nemotron-parse` for extracting text and metadata from images. - The `document_type` parameter is optional, because `Ingestor` should detect the file type automatically. ```python @@ -101,33 +101,12 @@ Instead of running NeMo Retriever Library locally, you can use NVCF to perform i !!! tip - For more Python examples, refer to [NeMo Retriever Library: Python Client Quick Start Guide](https://github.com/NVIDIA/NeMo-Retriever/blob/main/client/client_examples/examples/python_client_usage.ipynb). - - -## Run the Ray batch pipeline with `nemotron-parse` - -When the `nemotron-parse` model is used in the retriever batch pipeline, the `page-elements` and `nemotron-ocr` stages are skipped in the Ray pipeline, because their functionality is handled by the `nemotron-parse` actor. This behavior applies when you run the pipeline from the command line (for instance, by using `batch_pipeline.py` in library mode). - -To enable `nemotron-parse` in the batch pipeline, set each of the following options to a value greater than zero: -​ -- `--nemotron-parse-workers` — The number of Ray workers to run `nemotron-parse`. -- `--gpu-nemotron-parse` — The GPU fraction to allocate for each worker (for example, 0.25 to run four workers on a single GPU). -- `--nemotron-parse-batch-size` — The batch size for each `nemotron-parse` request. - - -For example, to run the batch pipeline on a directory of PDFs with `nemotron-parse` turned on, use the following code: + For more Python examples, refer to [NV-Ingest: Python Client Quick Start Guide](https://github.com/NVIDIA/nv-ingest/blob/main/client/client_examples/examples/python_client_usage.ipynb). -```shell -python nemo_retriever/src/nemo_retriever/examples/batch_pipeline.py /path/to/pdfs \ - --nemotron-parse-workers 16 \ - --gpu-nemotron-parse .25 \ - --nemotron-parse-batch-size 32 -``` -Replace `/path/to/pdfs` with the path to your input directory (for example, `/home/local/jdyer/datasets/jp20`). ## Related Topics - [Support Matrix](support-matrix.md) -- [Troubleshoot NeMo Retriever Library](troubleshoot.md) -- [Use the NeMo Retriever Library Python API](python-api-reference.md) +- [Troubleshoot Nemo Retriever Extraction](troubleshoot.md) +- [Use the Python API](nv-ingest-python-api.md) diff --git a/docs/docs/extraction/nimclient.md b/docs/docs/extraction/nimclient.md index cc1c402f2..fae98c068 100644 --- a/docs/docs/extraction/nimclient.md +++ b/docs/docs/extraction/nimclient.md @@ -5,14 +5,14 @@ This documentation demonstrates how to create custom NIM integrations for use in !!! note - NVIDIA Ingest (nv-ingest) has been renamed to the NeMo Retriever Library. + NeMo Retriever Library is also known as NVIDIA Ingest. The NimClient architecture consists of two main components: 1. **NimClient**: The client class that handles communication with NIM endpoints via gRPC or HTTP protocols 2. **ModelInterface**: An abstract base class that defines how to format input data, parse output responses, and process inference results for specific models -For advanced usage patterns, see the existing model interfaces in `api/src/nemo_retriever/internal/primitives/nim/model_interface/`. +For advanced usage patterns, see the existing model interfaces in `api/src/nv_ingest_api/internal/primitives/nim/model_interface/`. ## Quick Start @@ -20,8 +20,8 @@ For advanced usage patterns, see the existing model interfaces in `api/src/nemo_ ### Basic NimClient Creation ```python -from nemo_retriever.util.nim import create_inference_client -from nemo_retriever.internal.primitives.nim import ModelInterface +from nv_ingest_api.util.nim import create_inference_client +from nv_ingest_api.internal.primitives.nim import ModelInterface # Create a custom model interface (see examples below) model_interface = MyCustomModelInterface() @@ -48,7 +48,7 @@ results = client.infer(data, model_name="your-model-name") ```python import os -from nemo_retriever.util.nim import create_inference_client +from nv_ingest_api.util.nim import create_inference_client # Use environment variables for configuration auth_token = os.getenv("NGC_API_KEY") @@ -71,7 +71,7 @@ To integrate a new NIM, you need to create a custom `ModelInterface` subclass th ```python from typing import Dict, Any, List, Tuple, Optional import numpy as np -from nemo_retriever.internal.primitives.nim import ModelInterface +from nv_ingest_api.internal.primitives.nim import ModelInterface class MyCustomModelInterface(ModelInterface): """ @@ -305,7 +305,7 @@ class TextGenerationModelInterface(ModelInterface): ```python import base64 -from nemo_retriever.util.image_processing.transforms import numpy_to_base64 +from nv_ingest_api.util.image_processing.transforms import numpy_to_base64 class ImageAnalysisModelInterface(ModelInterface): """Interface for image analysis NIMs (e.g., vision models).""" @@ -382,8 +382,8 @@ class ImageAnalysisModelInterface(ModelInterface): ### Basic UDF with NimClient ```python -from nemo_retriever.internal.primitives.control_message import IngestControlMessage -from nemo_retriever.util.nim import create_inference_client +from nv_ingest_api.internal.primitives.control_message import IngestControlMessage +from nv_ingest_api.util.nim import create_inference_client import os def analyze_document_with_nim(control_message: IngestControlMessage) -> IngestControlMessage: @@ -570,7 +570,7 @@ If memory issues persist, you can reduce the `NIM_TRITON_RATE_LIMIT` value — e import logging # Enable debug logging -logging.getLogger("nemo_retriever.internal.primitives.nim").setLevel(logging.DEBUG) +logging.getLogger("nv_ingest_api.internal.primitives.nim").setLevel(logging.DEBUG) # Test your model interface separately model_interface = MyCustomModelInterface() diff --git a/docs/docs/extraction/notebooks.md b/docs/docs/extraction/notebooks.md index c9a0ca480..4bf6fe7b4 100644 --- a/docs/docs/extraction/notebooks.md +++ b/docs/docs/extraction/notebooks.md @@ -4,30 +4,30 @@ To get started using [NeMo Retriever Library](overview.md), you can try one of t !!! note - NVIDIA Ingest (nv-ingest) has been renamed to the NeMo Retriever Library. + NeMo Retriever Library is also known as NVIDIA Ingest. ## Dataset Downloads for Benchmarking -If you plan to run benchmarking or evaluation tests, you must download the [Benchmark Datasets (Bo20, Bo767, Bo10k)](https://github.com/NVIDIA/NeMo-Retriever/blob/main/evaluation/digital_corpora_download.ipynb) from Digital Corpora. This is a prerequisite for all benchmarking operations. +If you plan to run benchmarking or evaluation tests, you must download the [Benchmark Datasets (Bo20, Bo767, Bo10k)](https://github.com/NVIDIA/nv-ingest/blob/main/evaluation/digital_corpora_download.ipynb) from Digital Corpora. This is a prerequisite for all benchmarking operations. ## Getting Started To get started with the basics, try one of the following notebooks: -- [NeMo Retriever Library: CLI Client Quick Start Guide](https://github.com/NVIDIA/NeMo-Retriever/blob/main/client/client_examples/examples/cli_client_usage.ipynb) -- [NeMo Retriever Library: Python Client Quick Start Guide](https://github.com/NVIDIA/NeMo-Retriever/blob/main/client/client_examples/examples/python_client_usage.ipynb) -- [How to add metadata to your documents and filter searches](https://github.com/NVIDIA/NeMo-Retriever/blob/main/examples/metadata_and_filtered_search.ipynb) -- [How to reindex a collection](https://github.com/NVIDIA/NeMo-Retriever/blob/main/examples/reindex_example.ipynb) +- [NV-Ingest: CLI Client Quick Start Guide](https://github.com/NVIDIA/nv-ingest/blob/main/client/client_examples/examples/cli_client_usage.ipynb) +- [NV-Ingest: Python Client Quick Start Guide](https://github.com/NVIDIA/nv-ingest/blob/main/client/client_examples/examples/python_client_usage.ipynb) +- [How to add metadata to your documents and filter searches](https://github.com/NVIDIA/nv-ingest/blob/main/examples/metadata_and_filtered_search.ipynb) +- [How to reindex a collection](https://github.com/NVIDIA/nv-ingest/blob/main/examples/reindex_example.ipynb) For more advanced scenarios, try one of the following notebooks: -- [Build a Custom Vector Database Operator](https://github.com/NVIDIA/NeMo-Retriever/blob/main/examples/building_vdb_operator.ipynb) -- [Try Enterprise RAG Blueprint](https://github.com/NVIDIA/NeMo-Retriever/blob/main/deploy/pdf-blueprint.ipynb) -- [Evaluate bo767 retrieval recall accuracy with NeMo Retriever Library and Milvus](https://github.com/NVIDIA/NeMo-Retriever/blob/main/evaluation/bo767_recall.ipynb) -- [Multimodal RAG with LangChain](https://github.com/NVIDIA/NeMo-Retriever/blob/main/examples/langchain_multimodal_rag.ipynb) -- [Multimodal RAG with LlamaIndex](https://github.com/NVIDIA/NeMo-Retriever/blob/main/examples/llama_index_multimodal_rag.ipynb) +- [Build a Custom Vector Database Operator](https://github.com/NVIDIA/nv-ingest/blob/main/examples/building_vdb_operator.ipynb) +- [Try Enterprise RAG Blueprint](https://github.com/NVIDIA/nv-ingest/blob/main/deploy/pdf-blueprint.ipynb) +- [Evaluate bo767 retrieval recall accuracy with NV-Ingest and Milvus](https://github.com/NVIDIA/nv-ingest/blob/main/evaluation/bo767_recall.ipynb) +- [Multimodal RAG with LangChain](https://github.com/NVIDIA/nv-ingest/blob/main/examples/langchain_multimodal_rag.ipynb) +- [Multimodal RAG with LlamaIndex](https://github.com/NVIDIA/nv-ingest/blob/main/examples/llama_index_multimodal_rag.ipynb) diff --git a/docs/docs/extraction/nv-ingest-python-api.md b/docs/docs/extraction/nv-ingest-python-api.md new file mode 100644 index 000000000..d4c29f2b5 --- /dev/null +++ b/docs/docs/extraction/nv-ingest-python-api.md @@ -0,0 +1,600 @@ +# Use the NeMo Retriever Library Python API + +The [NeMo Retriever Library](overview.md) Python API provides a simple and flexible interface for processing and extracting information from various document types, including PDFs. + +!!! note + + NeMo Retriever Library is also known as NVIDIA Ingest. + +!!! tip + + There is a Jupyter notebook available to help you get started with the Python API. For more information, refer to [Python Client Quick Start Guide](https://github.com/NVIDIA/nv-ingest/blob/main/client/client_examples/examples/python_client_usage.ipynb). + + +## Summary of Key Methods + +The main class in the Python API is `Ingestor`. +The `Ingestor` class provides an interface for building, managing, and running data ingestion jobs, enabling for chainable task additions and job state tracking. + +### Ingestor Methods + +The following table describes methods of the `Ingestor` class. + +| Method | Description | +|----------------|-----------------------------------| +| `caption` | Extract captions from images within the document. | +| `embed` | Generate embeddings from extracted content. | +| `extract` | Add an extraction task (text, tables, charts, infographics). | +| `files` | Add document paths for processing. | +| `ingest` | Submit jobs and retrieve results synchronously. | +| `load` | Ensure files are locally accessible (downloads if needed). | +| `save_to_disk` | Save ingestion results to disk instead of memory. | +| `store` | Persist extracted images/structured renderings to an fsspec-compatible backend. | +| `split` | Split documents into smaller sections for processing. For more information, refer to [Split Documents](chunking.md). | +| `vdb_upload` | Push extraction results to the vector database (LanceDB by default, or Milvus). For more information, refer to [Data Upload](data-store.md). | + + +### Extract Method Options + +The following table describes the `extract_method` options. + +| Value | Status | Description | +|----------------------|--------------|--------------------------------------------------| +| `audio` | Current | Extract information from audio files. | +| `nemotron_parse` | Current | NVIDIA Nemotron Parse extraction. | +| `ocr` | Current | Bypasses native text extraction and processes every page using the full OCR pipeline. Use this for fully scanned documents or when native text is corrupt. | +| `pdfium` | Current | Uses PDFium to extract native text. This is the default. This is the fastest method but does not capture text from scanned images/pages. | +| `pdfium_hybrid` | Current | A hybrid approach that uses PDFium for pages with native text and automatically switches to OCR for scanned pages. This offers a robust balance of speed and coverage for mixed documents. | +| `adobe` | Deprecated | Adobe PDF Services API extraction. | +| `haystack` | Deprecated | Haystack-based extraction. | +| `llama_parse` | Deprecated | LlamaParse extraction. | +| `tika` | Deprecated | Apache Tika extraction. | +| `unstructured_io` | Deprecated | Unstructured.io API extraction. | +| `unstructured_local` | Deprecated | Local Unstructured extraction. | + + +### Caption images and control reasoning + +The caption task can call a vision-language model (VLM) with the following optional controls: + +- `prompt` (string): User prompt for captioning. Defaults to `"Caption the content of this image:"`. +- `reasoning` (boolean): Enable reasoning mode. `True` enables reasoning, `False` disables it. Defaults to `None` (service default, typically disabled). + +!!! note + The `reasoning` parameter maps to the VLM's system prompt: `reasoning=True` sets the system prompt to `"/think"`, and `reasoning=False` sets it to `"/no_think"` per the [Nemotron Nano 12B v2 VL model card] (https://build.nvidia.com/nvidia/nemotron-nano-12b-v2-vl/modelcard). + +Example: +```python +from nv_ingest_client.client.interface import Ingestor + +ingestor = ( + Ingestor() + .files("path/to/doc-with-images.pdf") + .extract(extract_images=True) + .caption( + prompt="Caption the content of this image:", + reasoning=True, # Enable reasoning + ) + .ingest() +) +``` + + + +## Track Job Progress + +For large document batches, you can enable a progress bar by setting `show_progress` to true. +Use the following code. + +```python +# Return only successes +results = ingestor.ingest(show_progress=True) + +print(len(results), "successful documents") +``` + + + +## Capture Job Failures + +You can capture job failures by setting `return_failures` to true. +Use the following code. + +```python +# Return both successes and failures +results, failures = ingestor.ingest(show_progress=True, return_failures=True) + +print(f"{len(results)} successful docs; {len(failures)} failures") + +if failures: + print("Failures:", failures[:1]) +``` + +When you use the `vdb_upload` method, uploads are performed after ingestion completes. +The behavior of the upload depends on the following values of `return_failures`: + +- **False** – If any job fails, the `ingest` method raises a runtime error and does not upload any data (all-or-nothing data upload). This is the default setting. +- **True** – If any jobs succeed, the results from those jobs are uploaded, and no errors are raised (partial data upload). The `ingest` method returns a failures object that contains the details for any jobs that failed. You can inspect the failures object and selectively retry or remediate the failed jobs. + + +The following example uploads data to the vector database (LanceDB by default; use `milvus_uri` for Milvus) and returns any failures. + +```python +ingestor = ( + Ingestor(client=client) + .files(["/path/doc1.pdf", "/path/doc2.pdf"]) + .extract() + .embed() + .vdb_upload(collection_name="my_collection", milvus_uri="milvus.db") +) + +# Use for large batches where you want successful chunks/pages to be committed, while collecting detailed diagnostics for failures. +results, failures = ingestor.ingest(return_failures=True) + +print(f"Uploaded {len(results)} successful docs; {len(failures)} failures") + +if failures: + print("Failures:", failures[:1]) +``` + + + +## Quick Start: Extracting PDFs + +The following example demonstrates how to initialize `Ingestor`, load a PDF file, and extract its contents. +The `extract` method enables different types of data to be extracted. + +### Extract a Single PDF + +Use the following code to extract a single PDF file. + +```python +from nv_ingest_client.client.interface import Ingestor + +# Initialize Ingestor with a local PDF file +ingestor = Ingestor().files("path/to/document.pdf") + +# Extract text, tables, and images +result = ingestor.extract().ingest() + +print(result) +``` + +### Extract Multiple PDFs + +Use the following code to process multiple PDFs at one time. + +```python +ingestor = Ingestor().files(["path/to/doc1.pdf", "path/to/doc2.pdf"]) + +# Extract content from all PDFs +result = ingestor.extract().ingest() + +for doc in result: + print(doc) +``` + +### Extract Specific Elements from PDFs + +By default, the `extract` method extracts all supported content types. +You can customize the extraction behavior by using the following code. + +```python +ingestor = ingestor.extract( + extract_text=True, # Extract text + text_depth="page", + extract_tables=False, # Skip table extraction + extract_charts=True, # Extract charts + extract_infographics=True, # Extract infographic images + extract_images=False # Skip image extraction +) +``` + +### Extract Non-standard Document Types + +Use the following code to extract text from `.md`, `.sh`, and `.html` files. + +```python +ingestor = Ingestor().files(["path/to/doc1.md", "path/to/doc2.html"]) + +ingestor = ingestor.extract( + extract_text=True, # Only extract text + extract_tables=False, + extract_charts=False, + extract_infographics=False, + extract_images=False +) + +result = ingestor.ingest() +``` + + +### Extract with Custom Document Type + +Use the following code to specify a custom document type for extraction. + +```python +ingestor = ingestor.extract(document_type="pdf") +``` + + + +### Extract Office Documents (DOCX and PPTX) + +NeMo Retriever Library offers the following two extraction methods for Microsoft Office documents (.docx and .pptx), to balance performance and layout fidelity: + +- Native extraction +- Render as PDF + +#### Native Extraction (Default) + +The default methods (`python_docx` and `python_pptx`) extract content directly from the file structure. +This is generally faster, but you might lose some visual layout information. + +```python +# Uses default native extraction +ingestor = Ingestor().files(["report.docx", "presentation.pptx"]).extract() +``` + +#### Render as PDF + +The `render_as_pdf` method uses [LibreOffice](https://www.libreoffice.org/) to convert the document to a PDF before extraction. +We recommend this approach when preserving the visual layout is critical, or when you need to extract visual elements, such as tables and charts, that are better detected by using computer vision on a rendered page. + +```python +ingestor = Ingestor().files(["report.docx", "presentation.pptx"]) + +ingestor = ingestor.extract( + extract_text=True, + extract_tables=True, + extract_charts=True, + extract_infographics=True, + extract_method="render_as_pdf" # Convert to PDF first for improved visual extraction +) +``` + + + +### PDF Extraction Strategies + +NeMo Retriever Library offers specialized strategies for PDF processing to handle various document qualities. +You can select the strategy by using the following `extract_method` parameter values. +For the full list of `extract_method` options, refer to [Extract Method Options](#extract-method-options). + +- **ocr** – Bypasses native text extraction and processes every page using the full OCR pipeline. Use this for fully scanned documents or when native text is corrupt. +- **pdfium** – Uses PDFium to extract native text. This is the default. This is the fastest method but does not capture text from scanned images/pages. +- **pdfium_hybrid** – A hybrid approach that uses PDFium for pages with native text and automatically switches to OCR for scanned pages. This offers a robust balance of speed and coverage for mixed documents. + +```python +ingestor = Ingestor().files("mixed_content.pdf") + +# Use hybrid mode for mixed digital/scanned PDFs +ingestor = ingestor.extract( + document_type="pdf", + extract_method="pdfium_hybrid", +) +results = ingestor.ingest() +``` + + + +## Work with Large Datasets: Save to Disk + +By default, NeMo Retriever Library stores the results from every document in system memory (RAM). +When you process a very large dataset with thousands of documents, you might encounter an Out-of-Memory (OOM) error. +The `save_to_disk` method configures the extraction pipeline to write the output for each document to a separate JSONL file on disk. + + +### Basic Usage: Save to a Directory + +To save results to disk, simply chain the `save_to_disk` method to your ingestion task. +By using `save_to_disk` the `ingest` method returns a list of `LazyLoadedList` objects, +which are memory-efficient proxies that read from the result files on disk. + +In the following example, the results are saved to a directory named `my_ingest_results`. +You are responsible for managing the created files. + +```python +ingestor = Ingestor().files("large_dataset/*.pdf") + +# Use save_to_disk to configure the ingestor to save results to a specific directory. +# Set cleanup=False to ensure that the directory is not deleted by any automatic process. +ingestor.save_to_disk(output_directory="./my_ingest_results", cleanup=False) # Offload results to disk to prevent OOM errors + +# 'results' is a list of LazyLoadedList objects that point to the new jsonl files. +results = ingestor.extract().ingest() + +print("Ingestion results saved in ./my_ingest_results") +# You can now iterate over the results or inspect the files directly. +``` + +### Managing Disk Space with Automatic Cleanup + +When you use `save_to_disk`, NeMo Retriever Library creates intermediate files. +For workflows where these files are temporary, NeMo Retriever Library provides two automatic cleanup mechanisms. + +- **Directory Cleanup with Context Manager** — While not required for general use, the Ingestor can be used as a context manager (`with` statement). This enables the automatic cleanup of the entire output directory when `save_to_disk(cleanup=True)` is set (which is the default). + +- **File Purge After VDB Upload** – The `vdb_upload` method includes a `purge_results_after_upload: bool = True` parameter (the default). After a successful VDB upload, this feature deletes the individual `.jsonl` files that were just uploaded. + +You can also configure the output directory by using the `NV_INGEST_CLIENT_SAVE_TO_DISK_OUTPUT_DIRECTORY` environment variable. + + +#### Example (Fully Automatic Cleanup) + +Fully Automatic cleanup is the recommended pattern for ingest-and-upload workflows where the intermediate files are no longer needed. +The entire process is temporary, and no files are left on disk. +The following example includes automatic file purge. + +```python +# After the 'with' block finishes, +# the temporary directory and all its contents are automatically deleted. + +with ( + Ingestor() + .files("/path/to/large_dataset/*.pdf") + .extract() + .embed() + .save_to_disk() # cleanup=True is the default, enables directory deletion on exit + .vdb_upload() # purge_results_after_upload=True is the default, deletes files after upload +) as ingestor: + results = ingestor.ingest() + +``` + + +#### Example (Preserve Results on Disk) + +In scenarios where you need to inspect or use the intermediate `jsonl` files, you can disable the cleanup features. +The following example disables automatic file purge. + +```python +# After the 'with' block finishes, +# the './permanent_results' directory and all jsonl files are preserved for inspection or other uses. + +with ( + Ingestor() + .files("/path/to/large_dataset/*.pdf") + .extract() + .embed() + .save_to_disk(output_directory="./permanent_results", cleanup=False) # Specify a directory and disable directory-level cleanup + .vdb_upload(purge_results_after_upload=False) # Disable automatic file purge after the VDB upload +) as ingestor: + results = ingestor.ingest() +``` + + + +## Extract Captions from Images + +The `caption` method generates image captions by using a VLM. +You can use this to generate descriptions of unstructured images, infographics, and other visual content extracted from documents. + +!!! note + + To use the `caption` option, enable the `vlm` profile when you start the NeMo Retriever Library services. The default model used by `caption` is `nvidia/llama-3.1-nemotron-nano-vl-8b-v1`. For more information, refer to [Profile Information in the Quickstart Guide](quickstart-guide.md#profile-information). + +### Basic Usage + +!!! tip + + You can configure and use other vision language models for image captioning by specifying a different `model_name` and `endpoint_url` in the `caption` method. Choose a VLM that best fits your specific use case requirements. + +```python +ingestor = ingestor.caption() +``` + +To specify a different API endpoint, pass additional parameters to `caption`. + +```python +ingestor = ingestor.caption( + endpoint_url="https://integrate.api.nvidia.com/v1/chat/completions", + model_name="nvidia/llama-3.1-nemotron-nano-vl-8b-v1", + api_key="nvapi-" +) +``` + +### Captioning Infographics + +Infographics are complex visual elements that combine text, charts, diagrams, and images to convey information. +VLMs are particularly effective at generating descriptive captions for infographics because they can understand and summarize the visual content. + +The following example extracts and captions infographics from a document: + +```python +ingestor = ( + Ingestor() + .files("document_with_infographics.pdf") + .extract( + extract_text=True, + extract_tables=True, + extract_charts=True, + extract_infographics=True, # Extract infographics for captioning + extract_images=False, + ) + .caption( + prompt="Describe the content and key information in this infographic:", + reasoning=True, # Enable reasoning for more detailed captions + ) +) +results = ingestor.ingest() +``` + +!!! tip + + For more information about working with infographics and multimodal content, refer to [Use Multimodal Embedding](vlm-embed.md). + +### Caption Images and Control Reasoning + +The caption task can call a VLM with optional prompt and system prompt overrides: + +- `caption_prompt` (user prompt): defaults to `"Caption the content of this image:"`. +- `caption_system_prompt` (system prompt): defaults to `"/no_think"` (reasoning off). Set to `"/think"` to enable reasoning per the Nemotron Nano 12B v2 VL model card. + +Example: +```python +from nv_ingest_client.client.interface import Ingestor + +ingestor = ( + Ingestor() + .files("path/to/doc-with-images.pdf") + .extract(extract_images=True) + .caption( + prompt="Caption the content of this image:", + system_prompt="/think", # or "/no_think" + ) + .ingest() +) +``` + + + +## Extract Embeddings + +The `embed` method in the library generates text embeddings for document content. + +```python +ingestor = ingestor.embed() +``` + +!!! note + + By default, `embed` uses the [llama-3.2-nv-embedqa-1b-v2](https://build.nvidia.com/nvidia/llama-3_2-nv-embedqa-1b-v2) model. + +To use a different embedding model, such as [nv-embedqa-e5-v5](https://build.nvidia.com/nvidia/nv-embedqa-e5-v5), specify a different `model_name` and `endpoint_url`. + +```python +ingestor = ingestor.embed( + endpoint_url="https://integrate.api.nvidia.com/v1", + model_name="nvidia/nv-embedqa-e5-v5", + api_key="nvapi-" +) +``` + +## Store Extracted Images + +The `store` method exports decoded images (unstructured images as well as structured renderings such as tables and charts) to any fsspec-compatible URI so you can inspect or serve the generated visuals. + +```python +ingestor = ingestor.store( + structured=True, # persist table/chart renderings + images=True, # persist unstructured images + storage_uri="file:///workspace/data/artifacts/store/images", # Supports file://, s3://, etc. + public_base_url="https://assets.example.com/images" # Optional CDN/base URL for download links +) +``` + +### Store Method Parameters + +| Parameter | Type | Description | +|-----------|------|-------------| +| `structured` | bool | Persist table and chart renderings. Default: `False` | +| `images` | bool | Persist unstructured images extracted from documents. Default: `False` | +| `storage_uri` | str | fsspec-compatible URI (`file://`, `s3://`, `gs://`, etc.). Defaults to server-side `IMAGE_STORAGE_URI` environment variable. | +| `public_base_url` | str | Optional HTTP(S) base URL for serving stored images. When set, metadata includes public download links. | + +### Supported Storage Backends + +The `store` task uses [fsspec](https://filesystem-spec.readthedocs.io/) for storage, supporting multiple backends: + +| Backend | URI Format | Example | +|---------|------------|---------| +| Local filesystem | `file://` | `file:///workspace/data/images` | +| Amazon S3 | `s3://` | `s3://my-bucket/extracted-images` | +| Google Cloud Storage | `gs://` | `gs://my-bucket/images` | +| Azure Blob Storage | `abfs://` | `abfs://container@account.dfs.core.windows.net/images` | +| MinIO (S3-compatible) | `s3://` | `s3://nv-ingest/artifacts/store/images` (default) | + +!!! tip + + `storage_uri` defaults to the server-side `IMAGE_STORAGE_URI` environment variable (commonly `s3://nv-ingest/...`). If you change that variable—for example to a host-mounted `file://` path—restart the runtime so the container picks up the new value. + +When `public_base_url` is provided, the metadata returned from `ingest()` surfaces that HTTP(S) link while still recording the underlying storage URI. Leave it unset when the storage endpoint itself is already publicly reachable. + +### Docker Volume Mounts for Local Storage + +When running the pipeline via Docker and using `file://` storage URIs, the path must be within a mounted volume for files to persist on the host machine. + +By default, the `docker-compose.yaml` mounts a single volume: + +```yaml +volumes: + - ${DATASET_ROOT:-./data}:/workspace/data +``` + +This means: + +| Container Path | Host Path | Works with `file://`? | +|----------------|-----------|----------------------| +| `/workspace/data/...` | `${DATASET_ROOT}/...` (default: `./data/...`) | ✅ Yes | +| `/tmp/...` | (container only) | ❌ No - files lost on restart | +| `/raid/custom/path` | (container only) | ❌ No - path not mounted | + +**Example: Save to host filesystem** + +```python +# Files save to ./data/artifacts/images on the host +ingestor = ingestor.store( + structured=True, + images=True, + storage_uri="file:///workspace/data/artifacts/images" +) +``` + +**Example: Use a custom host directory** + +```bash +# Set DATASET_ROOT before starting services +export DATASET_ROOT=/raid/my-project/nv-ingest-data +docker compose up -d +``` + +```python +# Now /workspace/data maps to /raid/my-project/nv-ingest-data +ingestor = ingestor.store( + structured=True, + images=True, + storage_uri="file:///workspace/data/extracted-images" +) +# Files save to /raid/my-project/nv-ingest-data/extracted-images on host +``` + +For more information on environment variables, refer to [Environment Variables](environment-config.md). + + + +## Extract Audio + +Use the following code to extract mp3 audio content. + +```python +from nv_ingest_client.client import Ingestor + +ingestor = Ingestor().files("audio_file.mp3") + +ingestor = ingestor.extract( + document_type="mp3", + extract_text=True, + extract_tables=False, + extract_charts=False, + extract_images=False, + extract_infographics=False, + ).split( + tokenizer="meta-llama/Llama-3.2-1B", + chunk_size=150, + chunk_overlap=0, + params={"split_source_types": ["mp3"], "hf_access_token": "hf_***"} + ) + +results = ingestor.ingest() +``` + + + +## Related Topics + +- [Split Documents](chunking.md) +- [Troubleshoot Nemo Retriever Extraction](troubleshoot.md) +- [Advanced Visual Parsing](nemoretriever-parse.md) +- [Use NeMo Retriever Library with Riva for Audio Processing](audio.md) +- [Use Multimodal Embedding](vlm-embed.md) diff --git a/docs/docs/extraction/nv-ingest_cli.md b/docs/docs/extraction/nv-ingest_cli.md new file mode 100644 index 000000000..718e656c2 --- /dev/null +++ b/docs/docs/extraction/nv-ingest_cli.md @@ -0,0 +1,175 @@ +# Use the NV-Ingest Command Line Interface + +After you install the Python dependencies, you can use the [NV-Ingest](overview.md) command line interface (CLI). +To use the CLI, use the `nv-ingest-cli` command. + +To check the version of the CLI that you have installed, run the following command. + +```bash +nv-ingest-cli --version +``` + +To get a list of the current CLI commands and their options, run the following command. + +```bash +nv-ingest-cli --help +``` + +!!! tip + + There is a Jupyter notebook available to help you get started with the CLI. For more information, refer to [CLI Client Quick Start Guide](https://github.com/NVIDIA/nv-ingest/blob/main/client/client_examples/examples/cli_client_usage.ipynb). + + +## Examples + +Use the following code examples to submit a document to the `nv-ingest-ms-runtime` service. + +Each of the following commands can be run from the host machine, or from within the `nv-ingest-ms-runtime` container. + +- Host: `nv-ingest-cli ...` +- Container: `nv-ingest-cli ...` + + +### Example: Text File With No Splitting + +To submit a text file with no splitting, run the following code. + +!!! note + + You receive a response that contains a single document, which is the entire text file. The data that is returned is wrapped in the appropriate [metadata structure](content-metadata.md). + +```bash +nv-ingest-cli \ + --doc ./data/test.pdf \ + --client_host=localhost \ + --client_port=7670 +``` + + +### Example: PDF File With Splitting Only + +To submit a .pdf file with only a splitting task, run the following code. + +```bash +nv-ingest-cli \ + --doc ./data/test.pdf \ + --output_directory ./processed_docs \ + --task='split' \ + --client_host=localhost \ + --client_port=7670 +``` + + +### Example: PDF File With Splitting and Extraction + +To submit a .pdf file with both a splitting task and an extraction task, run the following code. + +!!! note + Currently, `split` only works for pdfium, nemotron-parse, and Unstructured.io. + +```bash +nv-ingest-cli \ + --doc ./data/test.pdf \ + --output_directory ./processed_docs \ + --task='extract:{"document_type": "pdf", "extract_method": "pdfium"}' \ + --task='extract:{"document_type": "docx", "extract_method": "python_docx"}' \ + --task='split' \ + --client_host=localhost \ + --client_port=7670 + +``` + + +### Example: PDF File With Custom Split Page Count + +To submit a PDF file with a custom split page count, use the `--pdf_split_page_count` option. +This allows you to control how many pages are included in each PDF chunk during processing. + +!!! note + The `--pdf_split_page_count` option requires using the V2 API (set via `--api_version v2` or environment variable `NV_INGEST_API_VERSION=v2`). + It accepts values between 1 and 128 pages per chunk (default is server default, typically 32). + Smaller chunks provide more parallelism but increase overhead, while larger chunks reduce overhead but limit concurrency. + +```bash +nv-ingest-cli \ + --doc ./data/test.pdf \ + --output_directory ./processed_docs \ + --task='extract:{"document_type": "pdf", "extract_method": "pdfium", "extract_text": "true"}' \ + --pdf_split_page_count 64 \ + --api_version v2 \ + --client_host=localhost \ + --client_port=7670 +``` + +### Example: Caption images with reasoning control + +To invoke image captioning and control reasoning: + +```bash +nv-ingest-cli \ + --doc ./data/test.pdf \ + --task='extract:{"document_type": "pdf", "extract_method": "pdfium", "extract_images": "true"}' \ + --task='caption:{"prompt": "Caption the content of this image:", "reasoning": true}' \ + --client_host=localhost \ + --client_port=7670 +``` + +- `reasoning` (boolean): Set to `true` to enable reasoning, `false` to disable it. Defaults to service default (typically disabled). +- Ensure the VLM caption profile/service is running or pointing to the public build endpoint; otherwise the caption task will be skipped. + +!!! tip + + The caption service uses a default VLM which you can override by selecting other vision-language models to better match your image captioning needs. For more information, refer to [Extract Captions from Images](nv-ingest-python-api.md#extract-captions-from-images). + +Alternatively, you can use an environment variable to set the API version: + +```bash +export NV_INGEST_API_VERSION=v2 + +nv-ingest-cli \ + --doc ./data/test.pdf \ + --output_directory ./processed_docs \ + --task='extract:{"document_type": "pdf", "extract_method": "pdfium", "extract_text": "true"}' \ + --pdf_split_page_count 64 \ + --client_host=localhost \ + --client_port=7670 +``` + + +### Example: Process a Dataset + +To submit a dataset for processing, run the following code. +To create a dataset, refer to [Command Line Dataset Creation with Enumeration and Sampling](#command-line-dataset-creation-with-enumeration-and-sampling). + +```shell +nv-ingest-cli \ + --dataset dataset.json \ + --output_directory ./processed_docs \ + --task='extract:{"document_type": "pdf", "extract_method": "pdfium"}' \ + --client_host=localhost \ + --client_port=7670 + +``` + +Submit a PDF file with extraction tasks and upload extracted images to MinIO. + +```bash +nv-ingest-cli \ + --doc ./data/test.pdf \ + --output_directory ./processed_docs \ + --task='extract:{"document_type": "pdf", "extract_method": "pdfium"}' \ + --client_host=localhost \ + --client_port=7670 + +``` + + +## Command Line Dataset Creation with Enumeration and Sampling + +The `gen_dataset.py` script samples files from a specified source directory according to defined proportions and a total size target. +It offers options for caching the file list, outputting a sampled file list, and validating the output. + +```shell +python ./src/util/gen_dataset.py --source_directory=./data --size=1GB --sample pdf=60 --sample txt=40 --output_file \ + dataset.json --validate-output +``` diff --git a/docs/docs/extraction/overview.md b/docs/docs/extraction/overview.md index 263204ddc..8891d57e6 100644 --- a/docs/docs/extraction/overview.md +++ b/docs/docs/extraction/overview.md @@ -6,21 +6,21 @@ to find, contextualize, and extract text, tables, charts and infographics that y !!! note - NVIDIA Ingest (nv-ingest) has been renamed to the NeMo Retriever Library. + NeMo Retriever Library is also known as NVIDIA Ingest. NeMo Retriever Library enables parallelization of splitting documents into pages where artifacts are classified (such as text, tables, charts, and infographics), extracted, and further contextualized through optical character recognition (OCR) into a well defined JSON schema. From there, NeMo Retriever Library can optionally manage computation of embeddings for the extracted content, -and optionally manage storing into a vector database [Milvus](https://milvus.io/). +and optionally manage storing into a vector database ([LanceDB](https://lancedb.com/) by default, or [Milvus](https://milvus.io/)). !!! note - Cached and Deplot are deprecated. Instead, NeMo Retriever Library now uses the yolox-graphic-elements NIM. With this change, you should now be able to run NeMo Retriever Library on a single 24GB A10G or better GPU. If you want to use the old pipeline, with Cached and Deplot, use the [NeMo Retriever Library 24.12.1 release](https://github.com/NVIDIA/NeMo-Retriever/tree/24.12.1). + Cached and Deplot are deprecated. Instead, NeMo Retriever Library now uses the yolox-graphic-elements NIM. With this change, you should now be able to run NeMo Retriever Library on a single 24GB A10G or better GPU. If you want to use the old pipeline, with Cached and Deplot, use the [NeMo Retriever Library 24.12.1 release](https://github.com/NVIDIA/nv-ingest/tree/24.12.1). ## What NeMo Retriever Library Is ✔️ -The following diagram shows the NeMo Retriever Library pipeline. +The following diagram shows the retriever pipeline. ![Overview diagram](images/overview-extraction.png) diff --git a/docs/docs/extraction/prerequisites.md b/docs/docs/extraction/prerequisites.md index 902c499c8..a5e0512e1 100644 --- a/docs/docs/extraction/prerequisites.md +++ b/docs/docs/extraction/prerequisites.md @@ -4,7 +4,7 @@ Before you begin using [NeMo Retriever Library](overview.md), ensure the followi !!! note - NVIDIA Ingest (nv-ingest) has been renamed to the NeMo Retriever Library. + NeMo Retriever Library is also known as NVIDIA Ingest. diff --git a/docs/docs/extraction/quickstart-guide.md b/docs/docs/extraction/quickstart-guide.md index 3dae43e66..6f7ab7194 100644 --- a/docs/docs/extraction/quickstart-guide.md +++ b/docs/docs/extraction/quickstart-guide.md @@ -5,22 +5,22 @@ This guide helps you get started using [NeMo Retriever Library](overview.md) in ## Step 1: Start Containers -Use the provided [docker-compose.yaml](https://github.com/NVIDIA/NeMo-Retriever/blob/main/docker-compose.yaml) to start all needed services with a few commands. +Use the provided [docker-compose.yaml](https://github.com/NVIDIA/nv-ingest/blob/main/docker-compose.yaml) to start all needed services with a few commands. !!! warning NIM containers on their first startup can take 10-15 minutes to pull and fully load models. -If you prefer, you can run on Kubernetes by using [our Helm chart](https://github.com/NVIDIA/NeMo-Retriever/blob/main/helm/README.md). Also, there are [additional environment variables](environment-config.md) you can configure. +If you prefer, you can run on Kubernetes by using [our Helm chart](https://github.com/NVIDIA/nv-ingest/blob/main/helm/README.md). Also, there are [additional environment variables](environment-config.md) you can configure. a. Git clone the repo: - `git clone https://github.com/nvidia/NeMo-Retriever` + `git clone https://github.com/nvidia/nv-ingest` b. Change the directory to the cloned repo by running the following code. - `cd NeMo-Retriever`. + `cd nv-ingest`. c. [Generate API keys](ngc-api-key.md) and authenticate with NGC with the `docker login` command. @@ -48,13 +48,17 @@ e. Make sure that NVIDIA is set as your default container runtime before you run `sudo nvidia-ctk runtime configure --runtime=docker --set-as-default` -f. Start core services. This example uses the retrieval profile. For more information about other profiles, see [Profile Information](#profile-information). +f. Start core services. By default, the pipeline uses **LanceDB** as the vector database (embedded, in-process); no extra Docker profile is required. If you want to use **Milvus** instead, start with the retrieval profile. This example uses the retrieval profile to run Milvus. For more information about other profiles, see [Profile Information](#profile-information). `docker compose --profile retrieval up` + !!! tip "LanceDB (default)" + + To use the default LanceDB backend, you can run `docker compose up` without `--profile retrieval`. LanceDB runs in-process and does not require Milvus, etcd, or MinIO. For details, see [Data Upload](data-store.md). + !!! tip - By default, we have [configured log levels to be verbose](https://github.com/NVIDIA/NeMo-Retriever/blob/main/docker-compose.yaml). It's possible to observe service startup proceeding. You will notice a lot of log messages. Disable verbose logging by configuring `NIM_TRITON_LOG_VERBOSE=0` for each NIM in [docker-compose.yaml](https://github.com/NVIDIA/NeMo-Retriever/blob/main/docker-compose.yaml). + By default, we have [configured log levels to be verbose](https://github.com/NVIDIA/nv-ingest/blob/main/docker-compose.yaml). It's possible to observe service startup proceeding. You will notice a lot of log messages. Disable verbose logging by configuring `NIM_TRITON_LOG_VERBOSE=0` for each NIM in [docker-compose.yaml](https://github.com/NVIDIA/nv-ingest/blob/main/docker-compose.yaml). !!! tip @@ -82,37 +86,60 @@ h. Run the command `docker ps`. You should see output similar to the following. ``` CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES + 1b885f37c991 nvcr.io/nvidia/nemo-microservices/nv-ingest:... "/usr/bin/tini -- /w…" 7 minutes ago Up 7 minutes (healthy) 0.0.0.0:7670... nv-ingest-nv-ingest-ms-runtime-1 + 14ef31ed7f49 milvusdb/milvus:v2.5.3-gpu "/tini -- bash -c 's…" 7 minutes ago Up 7 minutes (healthy) 0.0.0.0:9091... milvus-standalone + dceaf36cc5df otel/opentelemetry-collector-contrib:... "/otelcol-contrib --…" 7 minutes ago Up 7 minutes 0.0.0.0:4317... nv-ingest-otel-collector-1 + 5bd0b48eb71b nvcr.io/nim/nvidia/nemoretriever-graphic-ele... "/opt/nvidia/nvidia_…" 7 minutes ago Up 7 minutes 0.0.0.0:8003... nv-ingest-graphic-elements-1 + daf878669036 nvcr.io/nim/nvidia/nemoretriever-ocr-v1:1.2.1 "/opt/nvidia/nvidia_…" 7 minutes ago Up 7 minutes 0.0.0.0:8009... nv-ingest-ocr-1 + 216bdf11c566 nvcr.io/nim/nvidia/nemoretriever-page-elements-v3:1.7.0 "/opt/nvidia/nvidia_…" 7 minutes ago Up 7 minutes 0.0.0.0:8000... nv-ingest-page-elements-1 + aee9580b0b9a nvcr.io/nim/nvidia/llama-3.2-nv-embedqa-1b-v2:1.10.0 "/opt/nvidia/nvidia_…" 7 minutes ago Up 7 minutes 0.0.0.0:8012... nv-ingest-embedding-1 + 178a92bf6f7f nvcr.io/nim/nvidia/nemoretriever-table-struc... "/opt/nvidia/nvidia_…" 7 minutes ago Up 7 minutes 0.0.0.0:8006... nv-ingest-table-structure-1 + 7ddbf7690036 openzipkin/zipkin "start-zipkin" 7 minutes ago Up 7 minutes (healthy) 9410/tcp... nv-ingest-zipkin-1 + b73bbe0c202d minio/minio:RELEASE.2023-03-20T20-16-18Z "/usr/bin/docker-ent…" 7 minutes ago Up 7 minutes (healthy) 0.0.0.0:9000... minio + 97fa798dbe4f prom/prometheus:latest "/bin/prometheus --w…" 7 minutes ago Up 7 minutes 0.0.0.0:9090... nv-ingest-prometheus-1 + f17cb556b086 grafana/grafana "/run.sh" 7 minutes ago Up 7 minutes 0.0.0.0:3000... grafana-service + 3403c5a0e7be redis/redis-stack "/entrypoint.sh" 7 minutes ago Up 7 minutes 0.0.0.0:6379... nv-ingest-redis-1 + ``` + + +## Step 2: Install Python Dependencies + +You can interact with the service from the host, or by using `docker exec` to run commands in the runtime container. + +To interact from the host, you'll need a Python environment that has the client dependencies installed. + +``` uv venv --python 3.12 nv-ingest-dev source nv-ingest-dev/bin/activate -uv pip install nv-ingest==26.3.0 nv-ingest-api==26.3.0 nv-ingest-client==26.3.0 +uv pip install nv-ingest==26.1.2 nv-ingest-api==26.1.2 nv-ingest-client==26.1.2 ``` !!! tip - To confirm that you have activated your Conda environment, run `which pip` and `which python`, and confirm that you see `nemo_retriever` in the result. You can do this before any pip or python command that you run. + To confirm that you have activated your virtual environment, run `which pip` and `which python`, and confirm that you see `nvingest` in the result. You can do this before any pip or python command that you run. !!! note -Interaction from the host requires the appropriate port to be exposed from the `nemo-retriever` container, as defined in the `docker-compose.yaml` file. If you prefer, you can disable this port and interact directly with the NeMo Retriever Library from within its container. +Interaction from the host requires the appropriate port to be exposed from the runtime container, as defined in the `docker-compose.yaml` file. If you prefer, you can disable this port and interact directly with the service from within its container. To work inside the container, run the following code. ```bash -docker exec -it nemo-retriever-ms-runtime-1 bash +docker exec -it nv-ingest-nv-ingest-ms-runtime-1 bash ``` -This command opens a shell in the `/workspace` directory, where the `DATASET_ROOT` from your `.env` file is mounted at `./data`. The pre-activated `nemo_retriever_runtime` conda environment includes all necessary Python client libraries. You should see a prompt similar to the following. +This command opens a shell in the `/workspace` directory, where the `DATASET_ROOT` from your `.env` file is mounted at `./data`. The pre-created `nv_ingest_runtime` virtual environment includes all necessary Python client libraries. You should see a prompt similar to the following. ```bash -(nemo_retriever_runtime) root@your-computer-name:/workspace# +(nv_ingest_runtime) root@your-computer-name:/workspace# ``` -From this prompt, you can run the `nemo-retriever` CLI and Python examples. +From this prompt, you can run the CLI and Python examples. -Because many service URIs default to localhost, running inside the `nemo-retriever` container also requires that you specify URIs manually so that services can communicate across containers on the internal Docker network. See the example following for how to set the `milvus_uri`. +Because many service URIs default to localhost, running inside the runtime container also requires that you specify URIs manually so that services can communicate across containers on the internal Docker network. When using Milvus, see the example following for how to set the `milvus_uri`. With the default LanceDB backend, no extra URI configuration is needed. -## Step 2: Ingest Documents +## Step 3: Ingest Documents -You can submit jobs programmatically in Python or using the [NeMo Retriever Library CLI](cli-reference.md). +You can submit jobs programmatically in Python or using the [CLI](nv-ingest_cli.md). The following examples demonstrate how to extract text, charts, tables, and images: @@ -126,14 +153,14 @@ The following examples demonstrate how to extract text, charts, tables, and imag !!! tip - For more Python examples, refer to [NeMo Retriever Library: Python Client Quick Start Guide](https://github.com/NVIDIA/NeMo-Retriever/blob/main/client/client_examples/examples/python_client_usage.ipynb). + For more Python examples, refer to [NV-Ingest: Python Client Quick Start Guide](https://github.com/NVIDIA/nv-ingest/blob/main/client/client_examples/examples/python_client_usage.ipynb). ```python import logging, os, time -from nemo_retriever.client import Ingestor, NemoRetrieverClient -from nemo_retriever.util.process_json_files import ingest_json_results_to_blob -client = NemoRetrieverClient( +from nv_ingest_client.client import Ingestor, NvIngestClient +from nv_ingest_client.util.process_json_files import ingest_json_results_to_blob +client = NvIngestClient( message_client_port=7670, message_client_hostname="localhost" ) @@ -263,15 +290,15 @@ image_caption:[] ``` -### Using the `nemo-retriever` CLI +### Using the `nv-ingest-cli` !!! tip - There is a Jupyter notebook available to help you get started with the CLI. For more information, refer to [CLI Client Quick Start Guide](https://github.com/NVIDIA/NeMo-Retriever/blob/main/client/client_examples/examples/cli_client_usage.ipynb). + There is a Jupyter notebook available to help you get started with the CLI. For more information, refer to [CLI Client Quick Start Guide](https://github.com/NVIDIA/nv-ingest/blob/main/client/client_examples/examples/cli_client_usage.ipynb). ```shell -nemo-retriever \ +nv-ingest-cli \ --doc ./data/multimodal_test.pdf \ --output_directory ./processed_docs \ --task='extract:{"document_type": "pdf", "extract_method": "pdfium", "extract_tables": "true", "extract_images": "true", "extract_charts": "true"}' \ @@ -284,54 +311,54 @@ You should see output that indicates the document processing status followed by ``` None of PyTorch, TensorFlow >= 2.0, or Flax have been found. Models won't be available and only tokenizers, configuration and file/data utilities can be used. [nltk_data] Downloading package punkt_tab to -[nltk_data] /raid/jdyer/miniforge3/envs/nemo-retriever- +[nltk_data] /raid/jdyer/miniforge3/envs/nv-ingest- [nltk_data] dev/lib/python3.10/site- [nltk_data] packages/llama_index/core/_static/nltk_cache... [nltk_data] Package punkt_tab is already up-to-date! -INFO:nemo_retriever.cli:Processing 1 documents. -INFO:nemo_retriever.cli:Output will be written to: ./processed_docs +INFO:nv_ingest_client.nv_ingest_cli:Processing 1 documents. +INFO:nv_ingest_client.nv_ingest_cli:Output will be written to: ./processed_docs Processing files: 100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████| 1/1 [00:02<00:00, 2.34s/file, pages_per_sec=1.28] -INFO:nemo_retriever.cli.util.processing:message_broker_task_source: Avg: 2.39 ms, Median: 2.39 ms, Total Time: 2.39 ms, Total % of Trace Computation: 0.06% -INFO:nemo_retriever.cli.util.processing:broker_source_network_in: Avg: 9.51 ms, Median: 9.51 ms, Total Time: 9.51 ms, Total % of Trace Computation: 0.25% -INFO:nemo_retriever.cli.util.processing:job_counter: Avg: 1.47 ms, Median: 1.47 ms, Total Time: 1.47 ms, Total % of Trace Computation: 0.04% -INFO:nemo_retriever.cli.util.processing:job_counter_channel_in: Avg: 0.46 ms, Median: 0.46 ms, Total Time: 0.46 ms, Total % of Trace Computation: 0.01% -INFO:nemo_retriever.cli.util.processing:metadata_injection: Avg: 3.52 ms, Median: 3.52 ms, Total Time: 3.52 ms, Total % of Trace Computation: 0.09% -INFO:nemo_retriever.cli.util.processing:metadata_injection_channel_in: Avg: 0.16 ms, Median: 0.16 ms, Total Time: 0.16 ms, Total % of Trace Computation: 0.00% -INFO:nemo_retriever.cli.util.processing:pdf_content_extractor: Avg: 475.64 ms, Median: 163.77 ms, Total Time: 2378.21 ms, Total % of Trace Computation: 62.73% -INFO:nemo_retriever.cli.util.processing:pdf_content_extractor_channel_in: Avg: 0.31 ms, Median: 0.31 ms, Total Time: 0.31 ms, Total % of Trace Computation: 0.01% -INFO:nemo_retriever.cli.util.processing:image_content_extractor: Avg: 0.67 ms, Median: 0.67 ms, Total Time: 0.67 ms, Total % of Trace Computation: 0.02% -INFO:nemo_retriever.cli.util.processing:image_content_extractor_channel_in: Avg: 0.21 ms, Median: 0.21 ms, Total Time: 0.21 ms, Total % of Trace Computation: 0.01% -INFO:nemo_retriever.cli.util.processing:docx_content_extractor: Avg: 0.46 ms, Median: 0.46 ms, Total Time: 0.46 ms, Total % of Trace Computation: 0.01% -INFO:nemo_retriever.cli.util.processing:docx_content_extractor_channel_in: Avg: 0.20 ms, Median: 0.20 ms, Total Time: 0.20 ms, Total % of Trace Computation: 0.01% -INFO:nemo_retriever.cli.util.processing:pptx_content_extractor: Avg: 0.68 ms, Median: 0.68 ms, Total Time: 0.68 ms, Total % of Trace Computation: 0.02% -INFO:nemo_retriever.cli.util.processing:pptx_content_extractor_channel_in: Avg: 0.46 ms, Median: 0.46 ms, Total Time: 0.46 ms, Total % of Trace Computation: 0.01% -INFO:nemo_retriever.cli.util.processing:audio_data_extraction: Avg: 1.08 ms, Median: 1.08 ms, Total Time: 1.08 ms, Total % of Trace Computation: 0.03% -INFO:nemo_retriever.cli.util.processing:audio_data_extraction_channel_in: Avg: 0.20 ms, Median: 0.20 ms, Total Time: 0.20 ms, Total % of Trace Computation: 0.01% -INFO:nemo_retriever.cli.util.processing:dedup_images: Avg: 0.42 ms, Median: 0.42 ms, Total Time: 0.42 ms, Total % of Trace Computation: 0.01% -INFO:nemo_retriever.cli.util.processing:dedup_images_channel_in: Avg: 0.42 ms, Median: 0.42 ms, Total Time: 0.42 ms, Total % of Trace Computation: 0.01% -INFO:nemo_retriever.cli.util.processing:filter_images: Avg: 0.59 ms, Median: 0.59 ms, Total Time: 0.59 ms, Total % of Trace Computation: 0.02% -INFO:nemo_retriever.cli.util.processing:filter_images_channel_in: Avg: 0.57 ms, Median: 0.57 ms, Total Time: 0.57 ms, Total % of Trace Computation: 0.02% -INFO:nemo_retriever.cli.util.processing:table_data_extraction: Avg: 240.75 ms, Median: 240.75 ms, Total Time: 481.49 ms, Total % of Trace Computation: 12.70% -INFO:nemo_retriever.cli.util.processing:table_data_extraction_channel_in: Avg: 0.38 ms, Median: 0.38 ms, Total Time: 0.38 ms, Total % of Trace Computation: 0.01% -INFO:nemo_retriever.cli.util.processing:chart_data_extraction: Avg: 300.54 ms, Median: 299.94 ms, Total Time: 901.62 ms, Total % of Trace Computation: 23.78% -INFO:nemo_retriever.cli.util.processing:chart_data_extraction_channel_in: Avg: 0.23 ms, Median: 0.23 ms, Total Time: 0.23 ms, Total % of Trace Computation: 0.01% -INFO:nemo_retriever.cli.util.processing:infographic_data_extraction: Avg: 0.77 ms, Median: 0.77 ms, Total Time: 0.77 ms, Total % of Trace Computation: 0.02% -INFO:nemo_retriever.cli.util.processing:infographic_data_extraction_channel_in: Avg: 0.25 ms, Median: 0.25 ms, Total Time: 0.25 ms, Total % of Trace Computation: 0.01% -INFO:nemo_retriever.cli.util.processing:caption_ext: Avg: 0.55 ms, Median: 0.55 ms, Total Time: 0.55 ms, Total % of Trace Computation: 0.01% -INFO:nemo_retriever.cli.util.processing:caption_ext_channel_in: Avg: 0.51 ms, Median: 0.51 ms, Total Time: 0.51 ms, Total % of Trace Computation: 0.01% -INFO:nemo_retriever.cli.util.processing:embed_text: Avg: 1.21 ms, Median: 1.21 ms, Total Time: 1.21 ms, Total % of Trace Computation: 0.03% -INFO:nemo_retriever.cli.util.processing:embed_text_channel_in: Avg: 0.21 ms, Median: 0.21 ms, Total Time: 0.21 ms, Total % of Trace Computation: 0.01% -INFO:nemo_retriever.cli.util.processing:store_embedding_minio: Avg: 0.32 ms, Median: 0.32 ms, Total Time: 0.32 ms, Total % of Trace Computation: 0.01% -INFO:nemo_retriever.cli.util.processing:store_embedding_minio_channel_in: Avg: 1.18 ms, Median: 1.18 ms, Total Time: 1.18 ms, Total % of Trace Computation: 0.03% -INFO:nemo_retriever.cli.util.processing:message_broker_task_sink_channel_in: Avg: 0.42 ms, Median: 0.42 ms, Total Time: 0.42 ms, Total % of Trace Computation: 0.01% -INFO:nemo_retriever.cli.util.processing:No unresolved time detected. Trace times account for the entire elapsed duration. -INFO:nemo_retriever.cli.util.processing:Processed 1 files in 2.34 seconds. -INFO:nemo_retriever.cli.util.processing:Total pages processed: 3 -INFO:nemo_retriever.cli.util.processing:Throughput (Pages/sec): 1.28 -INFO:nemo_retriever.cli.util.processing:Throughput (Files/sec): 0.43 +INFO:nv_ingest_client.cli.util.processing:message_broker_task_source: Avg: 2.39 ms, Median: 2.39 ms, Total Time: 2.39 ms, Total % of Trace Computation: 0.06% +INFO:nv_ingest_client.cli.util.processing:broker_source_network_in: Avg: 9.51 ms, Median: 9.51 ms, Total Time: 9.51 ms, Total % of Trace Computation: 0.25% +INFO:nv_ingest_client.cli.util.processing:job_counter: Avg: 1.47 ms, Median: 1.47 ms, Total Time: 1.47 ms, Total % of Trace Computation: 0.04% +INFO:nv_ingest_client.cli.util.processing:job_counter_channel_in: Avg: 0.46 ms, Median: 0.46 ms, Total Time: 0.46 ms, Total % of Trace Computation: 0.01% +INFO:nv_ingest_client.cli.util.processing:metadata_injection: Avg: 3.52 ms, Median: 3.52 ms, Total Time: 3.52 ms, Total % of Trace Computation: 0.09% +INFO:nv_ingest_client.cli.util.processing:metadata_injection_channel_in: Avg: 0.16 ms, Median: 0.16 ms, Total Time: 0.16 ms, Total % of Trace Computation: 0.00% +INFO:nv_ingest_client.cli.util.processing:pdf_content_extractor: Avg: 475.64 ms, Median: 163.77 ms, Total Time: 2378.21 ms, Total % of Trace Computation: 62.73% +INFO:nv_ingest_client.cli.util.processing:pdf_content_extractor_channel_in: Avg: 0.31 ms, Median: 0.31 ms, Total Time: 0.31 ms, Total % of Trace Computation: 0.01% +INFO:nv_ingest_client.cli.util.processing:image_content_extractor: Avg: 0.67 ms, Median: 0.67 ms, Total Time: 0.67 ms, Total % of Trace Computation: 0.02% +INFO:nv_ingest_client.cli.util.processing:image_content_extractor_channel_in: Avg: 0.21 ms, Median: 0.21 ms, Total Time: 0.21 ms, Total % of Trace Computation: 0.01% +INFO:nv_ingest_client.cli.util.processing:docx_content_extractor: Avg: 0.46 ms, Median: 0.46 ms, Total Time: 0.46 ms, Total % of Trace Computation: 0.01% +INFO:nv_ingest_client.cli.util.processing:docx_content_extractor_channel_in: Avg: 0.20 ms, Median: 0.20 ms, Total Time: 0.20 ms, Total % of Trace Computation: 0.01% +INFO:nv_ingest_client.cli.util.processing:pptx_content_extractor: Avg: 0.68 ms, Median: 0.68 ms, Total Time: 0.68 ms, Total % of Trace Computation: 0.02% +INFO:nv_ingest_client.cli.util.processing:pptx_content_extractor_channel_in: Avg: 0.46 ms, Median: 0.46 ms, Total Time: 0.46 ms, Total % of Trace Computation: 0.01% +INFO:nv_ingest_client.cli.util.processing:audio_data_extraction: Avg: 1.08 ms, Median: 1.08 ms, Total Time: 1.08 ms, Total % of Trace Computation: 0.03% +INFO:nv_ingest_client.cli.util.processing:audio_data_extraction_channel_in: Avg: 0.20 ms, Median: 0.20 ms, Total Time: 0.20 ms, Total % of Trace Computation: 0.01% +INFO:nv_ingest_client.cli.util.processing:dedup_images: Avg: 0.42 ms, Median: 0.42 ms, Total Time: 0.42 ms, Total % of Trace Computation: 0.01% +INFO:nv_ingest_client.cli.util.processing:dedup_images_channel_in: Avg: 0.42 ms, Median: 0.42 ms, Total Time: 0.42 ms, Total % of Trace Computation: 0.01% +INFO:nv_ingest_client.cli.util.processing:filter_images: Avg: 0.59 ms, Median: 0.59 ms, Total Time: 0.59 ms, Total % of Trace Computation: 0.02% +INFO:nv_ingest_client.cli.util.processing:filter_images_channel_in: Avg: 0.57 ms, Median: 0.57 ms, Total Time: 0.57 ms, Total % of Trace Computation: 0.02% +INFO:nv_ingest_client.cli.util.processing:table_data_extraction: Avg: 240.75 ms, Median: 240.75 ms, Total Time: 481.49 ms, Total % of Trace Computation: 12.70% +INFO:nv_ingest_client.cli.util.processing:table_data_extraction_channel_in: Avg: 0.38 ms, Median: 0.38 ms, Total Time: 0.38 ms, Total % of Trace Computation: 0.01% +INFO:nv_ingest_client.cli.util.processing:chart_data_extraction: Avg: 300.54 ms, Median: 299.94 ms, Total Time: 901.62 ms, Total % of Trace Computation: 23.78% +INFO:nv_ingest_client.cli.util.processing:chart_data_extraction_channel_in: Avg: 0.23 ms, Median: 0.23 ms, Total Time: 0.23 ms, Total % of Trace Computation: 0.01% +INFO:nv_ingest_client.cli.util.processing:infographic_data_extraction: Avg: 0.77 ms, Median: 0.77 ms, Total Time: 0.77 ms, Total % of Trace Computation: 0.02% +INFO:nv_ingest_client.cli.util.processing:infographic_data_extraction_channel_in: Avg: 0.25 ms, Median: 0.25 ms, Total Time: 0.25 ms, Total % of Trace Computation: 0.01% +INFO:nv_ingest_client.cli.util.processing:caption_ext: Avg: 0.55 ms, Median: 0.55 ms, Total Time: 0.55 ms, Total % of Trace Computation: 0.01% +INFO:nv_ingest_client.cli.util.processing:caption_ext_channel_in: Avg: 0.51 ms, Median: 0.51 ms, Total Time: 0.51 ms, Total % of Trace Computation: 0.01% +INFO:nv_ingest_client.cli.util.processing:embed_text: Avg: 1.21 ms, Median: 1.21 ms, Total Time: 1.21 ms, Total % of Trace Computation: 0.03% +INFO:nv_ingest_client.cli.util.processing:embed_text_channel_in: Avg: 0.21 ms, Median: 0.21 ms, Total Time: 0.21 ms, Total % of Trace Computation: 0.01% +INFO:nv_ingest_client.cli.util.processing:store_embedding_minio: Avg: 0.32 ms, Median: 0.32 ms, Total Time: 0.32 ms, Total % of Trace Computation: 0.01% +INFO:nv_ingest_client.cli.util.processing:store_embedding_minio_channel_in: Avg: 1.18 ms, Median: 1.18 ms, Total Time: 1.18 ms, Total % of Trace Computation: 0.03% +INFO:nv_ingest_client.cli.util.processing:message_broker_task_sink_channel_in: Avg: 0.42 ms, Median: 0.42 ms, Total Time: 0.42 ms, Total % of Trace Computation: 0.01% +INFO:nv_ingest_client.cli.util.processing:No unresolved time detected. Trace times account for the entire elapsed duration. +INFO:nv_ingest_client.cli.util.processing:Processed 1 files in 2.34 seconds. +INFO:nv_ingest_client.cli.util.processing:Total pages processed: 3 +INFO:nv_ingest_client.cli.util.processing:Throughput (Pages/sec): 1.28 +INFO:nv_ingest_client.cli.util.processing:Throughput (Files/sec): 0.43 ``` -## Step 3: Inspecting and Consuming Results +## Step 4: Inspecting and Consuming Results After the ingestion steps above have been completed, you should be able to find the `text` and `image` subfolders inside your processed docs folder. Each will contain JSON-formatted extracted content and metadata. @@ -355,7 +382,7 @@ multimodal_test.pdf.metadata.json For the full metadata definitions, refer to [Content Metadata](content-metadata.md). -We also provide a script for inspecting [extracted images](https://github.com/NVIDIA/NeMo-Retriever/blob/main/src/util/image_viewer.py). +We also provide a script for inspecting [extracted images](https://github.com/NVIDIA/nv-ingest/blob/main/src/util/image_viewer.py). First, install `tkinter` by running the following code. Choose the code for your OS. @@ -386,7 +413,7 @@ python src/util/image_viewer.py --file_path ./processed_docs/image/multimodal_te !!! tip - Beyond inspecting the results, you can read them into things like [llama-index](https://github.com/NVIDIA/NeMo-Retriever/blob/main/examples/llama_index_multimodal_rag.ipynb) or [langchain](https://github.com/NVIDIA/NeMo-Retriever/blob/main/examples/langchain_multimodal_rag.ipynb) retrieval pipelines. Also, checkout our [Enterprise RAG Blueprint on build.nvidia.com](https://build.nvidia.com/nvidia/multimodal-pdf-data-extraction-for-enterprise-rag) to query over document content pre-extracted with NeMo Retriever Library. + Beyond inspecting the results, you can read them into things like [llama-index](https://github.com/NVIDIA/nv-ingest/blob/main/examples/llama_index_multimodal_rag.ipynb) or [langchain](https://github.com/NVIDIA/nv-ingest/blob/main/examples/langchain_multimodal_rag.ipynb) retrieval pipelines. Also, checkout our [Enterprise RAG Blueprint on build.nvidia.com](https://build.nvidia.com/nvidia/multimodal-pdf-data-extraction-for-enterprise-rag) to query over document content pre-extracted with the retriever pipeline. @@ -397,25 +424,15 @@ You can specify multiple `--profile` options. | Profile | Type | Description | |-----------------------|----------|-------------------------------------------------------------------| -| `retrieval` | Core | Enables the embedding NIM and (GPU accelerated) Milvus. | +| `retrieval` | Core | Enables the embedding NIM and (optional) GPU-accelerated Milvus. Omit this profile to use the default LanceDB backend. | | `audio` | Advanced | Use [Riva](https://docs.nvidia.com/deeplearning/riva/user-guide/docs/index.html) for processing audio files. For more information, refer to [Audio Processing](audio.md). | | `nemotron-parse` | Advanced | Use [nemotron-parse](https://build.nvidia.com/nvidia/nemotron-parse), which adds state-of-the-art text and table extraction. For more information, refer to [Advanced Visual Parsing](nemoretriever-parse.md). | -| `vlm` | Advanced | Use [llama 3.1 Nemotron 8B Vision](https://build.nvidia.com/nvidia/llama-3.1-nemotron-nano-vl-8b-v1/modelcard) for experimental image captioning of unstructured images. You can also configure other VLMs for your specific use cases. For more information, refer to [Extract Captions from Images](python-api-reference.md#extract-captions-from-images). | - -## Air-Gapped Deployment (Docker Compose) +| `vlm` | Advanced | Use [llama 3.1 Nemotron 8B Vision](https://build.nvidia.com/nvidia/llama-3.1-nemotron-nano-vl-8b-v1/modelcard) for image captioning of unstructured images and infographics. This profile enables the `caption` method in the Python API to generate text descriptions of visual content. For more information, refer to [Use Multimodal Embedding](vlm-embed.md) and [Extract Captions from Images](nv-ingest-python-api.md#extract-captions-from-images). | -When deploying in an air-gapped environment (no internet or NGC registry access), you must pre-stage container images on a machine with network access, then transfer and load them in the isolated environment. - -1. **On a machine with network access:** Clone the repo, authenticate with NGC (`docker login nvcr.io`), and pull all images used by your chosen profile (for example, `docker compose --profile retrieval pull`). -2. **Save images:** Export the images to archives (for example, using `docker save` for each image or a script that saves all images referenced by your [docker-compose.yaml](https://github.com/NVIDIA/NeMo-Retriever/blob/main/docker-compose.yaml)). -3. **Transfer** the image archives and your `docker-compose.yaml` (and `.env` if used) to the air-gapped system. -4. **On the air-gapped machine:** Load the images (`docker load -i `) and start the stack with the same profile (for example, `docker compose --profile retrieval up`). - -Ensure the same image tags and `docker-compose.yaml` version are used in both environments so that service configuration stays consistent. ## Docker Compose override files -The default [docker-compose.yaml](https://github.com/NVIDIA/NeMo-Retriever/blob/main/docker-compose.yaml) might exceed VRAM on a single GPU for some hardware. Override files reduce per-service memory, batch sizes, or concurrency so the full pipeline can run on the available GPU. To use an override, pass a second `-f` file after the base compose file; Docker Compose merges them and the override takes precedence. +The default [docker-compose.yaml](https://github.com/NVIDIA/nv-ingest/blob/main/docker-compose.yaml) might exceed VRAM on a single GPU for some hardware. Override files reduce per-service memory, batch sizes, or concurrency so the full pipeline can run on the available GPU. To use an override, pass a second `-f` file after the base compose file; Docker Compose merges them and the override takes precedence. | Override file | GPU target | |---------------|------------| @@ -429,7 +446,7 @@ For RTX Pro 6000 Server Edition and other GPUs with limited VRAM, use the overri Infographics often combine text, charts, and diagrams into complex visuals. Vision-language model (VLM) captioning generates natural language descriptions that capture this complexity, making the content searchable and more accessible for downstream applications. -To use VLM captioning for infographics, start the NeMo Retriever Library with both the `retrieval` and `vlm` profiles by running the following code. +To use VLM captioning for infographics, start NeMo Retriever Library with both the `retrieval` and `vlm` profiles by running the following code. ```shell docker compose \ -f docker-compose.yaml \ @@ -469,14 +486,14 @@ docker compose \ ## Specify MIG slices for NIM models -When you deploy NeMo Retriever Library with NIM models on MIG‑enabled GPUs, MIG device slices are requested and scheduled through the `values.yaml` file for the corresponding NIM microservice. For IBM Content-Aware Storage (CAS) deployments, this allows NeMo Retriever Library NIM pods to land only on nodes that expose the desired MIG profiles [raw.githubusercontent](https://raw.githubusercontent.com/NVIDIA/NeMo-Retriever/main/helm/README.md%E2%80%8B).​ +When you deploy the pipeline with NIM models on MIG‑enabled GPUs, MIG device slices are requested and scheduled through the `values.yaml` file for the corresponding NIM microservice. For IBM Content-Aware Storage (CAS) deployments, this allows NIM pods to land only on nodes that expose the desired MIG profiles [raw.githubusercontent](https://raw.githubusercontent.com/NVIDIA/nv-ingest/main/helm/README.md%E2%80%8B).​ To target a specific MIG profile—for example, a 3g.20gb slice on an A100, which is a hardware-partitioned virtual GPU instance that gives your workload a fixed mid-sized share of the A100’s compute plus 20 GB of dedicated GPU memory and behaves like a smaller independent GPU—for a given NIM, configure the `resources` and `nodeSelector` under that NIM’s values path in `values.yaml`. -The following example shows the pattern. Paths vary by NIM, such as `nemo_retriever.nvidiaNim.nemoretrieverPageElements` instead of the generic `nemo_retriever.nim` placeholder. For details refer to [catalog.ngc.nvidia.com](https://catalog.ngc.nvidia.com/orgs/nvidia/teams/nemo-microservices/helm-charts/nemo-retriever)​. +The following example shows the pattern. Paths vary by NIM, such as `nvingest.nvidiaNim.nemoretrieverPageElements` instead of the generic `nvingest.nim` placeholder. For details refer to [catalog.ngc.nvidia](https://catalog.ngc.nvidia.com/orgs/nvidia/teams/nemo-microservices/helm-charts/nv-ingest)​. Set `resources.requests` and `resources.limits` to the name of the MIG resource that you want (for example, `nvidia.com/mig-3g.20gb`). ```shell -nemo_retriever: +nvingest: nvidiaNim: nemoretrieverPageElements: modelName: "meta/llama3-8b-instruct" # Example NIM model @@ -489,16 +506,15 @@ nemo_retriever: nvidia.com/gpu.product: A100-SXM4-40GB-MIG-3g.20gb ``` Key points: -* Use the appropriate NIM‑specific values path (for example, `nemo_retriever.nvidiaNim.nemoretrieverPageElements.resources`) rather than the generic `nemo_retriever.nim` placeholder. +* Use the appropriate NIM‑specific values path (for example, `nvingest.nvidiaNim.nemoretrieverPageElements.resources`) rather than the generic `nvingest.nim` placeholder. * Set `resources.requests` and `resources.limits` to the desired MIG resource name (for example, `nvidia.com/mig-3g.20gb`). * Use `nodeSelector` (or tolerations/affinity, if you prefer) to target nodes labeled with the corresponding MIG‑enabled GPU product (for example, `nvidia.com/gpu.product: A100-SXM4-40GB-MIG-3g.20gb`). -This syntax and structure can be repeated for each NIM model used by CAS, ensuring that each NeMo Retriever Library NIM pod is mapped to the correct MIG slice type and scheduled onto compatible nodes. +This syntax and structure can be repeated for each NIM model used by CAS, ensuring that each NV-Ingest NIM pod is mapped to the correct MIG slice type and scheduled onto compatible nodes. !!! important Advanced features require additional GPU support and disk space. For more information, refer to [Support Matrix](support-matrix.md). - ## Related Topics - [Troubleshoot](troubleshoot.md) diff --git a/docs/docs/extraction/quickstart-library-mode.md b/docs/docs/extraction/quickstart-library-mode.md index 0878eb5c1..c027e6a0d 100644 --- a/docs/docs/extraction/quickstart-library-mode.md +++ b/docs/docs/extraction/quickstart-library-mode.md @@ -1,7 +1,487 @@ -# NeMo Retriever Library +# Deploy Without Containers (Library Mode) for NeMo Retriever Library + +[NeMo Retriever Library](overview.md) is typically deployed as a cluster of containers for robust, scalable production use. !!! note - NVIDIA Ingest (nv-ingest) has been renamed to the NeMo Retriever Library. + NeMo Retriever Library is also known as NVIDIA Ingest. + +In addition, you can use library mode, which is intended for the following cases: + +- Local development +- Experimentation and testing +- Small-scale workloads, such as workloads of fewer than 100 documents + + +By default, library mode depends on NIMs that are hosted on build.nvidia.com. +In library mode you launch the main pipeline service directly within a Python process, +while all other services (such as embedding and storage) are hosted remotely in the cloud. + +To get started using library mode, you need the following: + +- Linux operating systems (Ubuntu 22.04 or later recommended) or MacOS +- Python 3.12 +- We strongly advise using an isolated Python virtual env with [uv](https://docs.astral.sh/uv/getting-started/installation/). + + + +## Step 1: Prepare Your Environment + +Use the following procedure to prepare your environment. + +1. Run the following code to create your NV Ingest Python environment. + + ``` + uv venv --python 3.12 nvingest && \ + source nvingest/bin/activate && \ + uv pip install nv-ingest==26.1.2 nv-ingest-api==26.1.2 nv-ingest-client==26.1.2 + ``` + + By default, the pipeline uses **LanceDB** as the vector database (no extra package required). To use **Milvus** (e.g. milvus-lite) instead, also install `milvus-lite==2.4.12` and pass `milvus_uri="milvus.db"` in `vdb_upload`. For details, see [Data Upload](data-store.md). + + !!! tip + + To confirm that you have activated your virtual environment, run `which python` and confirm that you see `nvingest` in the result. You can do this before any python command that you run. + +2. Set or create a .env file that contains your NVIDIA Build API key and other environment variables. + + !!! note + + If you have an NGC API key, you can use it here. For more information, refer to [Generate Your NGC Keys](ngc-api-key.md) and [Environment Configuration Variables](environment-config.md). + + - To set your variables, use the following code. + + ``` + export NVIDIA_API_KEY=nvapi- + ``` + - To add your variables to a .env file, include the following. + + ``` + NVIDIA_API_KEY=nvapi- + ``` + + +## Step 2: Ingest Documents + +You can submit jobs programmatically by using Python. + +!!! tip + + For more Python examples, refer to [NV-Ingest: Python Client Quick Start Guide](https://github.com/NVIDIA/nv-ingest/blob/main/client/client_examples/examples/python_client_usage.ipynb). + + +If you have a very high number of CPUs, and see the process hang without progress, +we recommend that you use `taskset` to limit the number of CPUs visible to the process. +Use the following code. + +``` +taskset -c 0-3 python your_ingestion_script.py +``` + +On a 4 CPU core low end laptop, the following code should take about 10 seconds. + +```python +import time + +from nv_ingest.framework.orchestration.ray.util.pipeline.pipeline_runners import run_pipeline +from nv_ingest_client.client import Ingestor, NvIngestClient +from nv_ingest_api.util.message_brokers.simple_message_broker import SimpleClient +from nv_ingest_client.util.process_json_files import ingest_json_results_to_blob + +def main(): + # Start the pipeline subprocess for library mode + run_pipeline(block=False, disable_dynamic_scaling=True, run_in_subprocess=True) + + client = NvIngestClient( + message_client_allocator=SimpleClient, + message_client_port=7671, + message_client_hostname="localhost", + ) + + # Optional: use Milvus (e.g. milvus-lite) by providing milvus_uri and installing milvus-lite. + # By default, LanceDB is used and no milvus_uri is needed. + # milvus_uri = "milvus.db" + collection_name = "test" + sparse = False + + # do content extraction from files + ingestor = ( + Ingestor(client=client) + .files("data/multimodal_test.pdf") + .extract( + extract_text=True, + extract_tables=True, + extract_charts=True, + extract_images=True, + table_output_format="markdown", + extract_infographics=True, + # extract_method="nemotron_parse", #Slower, but maximally accurate, especially for PDFs with pages that are scanned images + text_depth="page", + ) + .embed() + .vdb_upload( + collection_name=collection_name, + # milvus_uri=milvus_uri, # Uncomment to use Milvus instead of LanceDB + sparse=sparse, + # for llama-3.2 embedder, use 1024 for e5-v5 + dense_dim=2048, + ) + ) + + print("Starting ingestion..") + t0 = time.time() + + # Return both successes and failures + # Use for large batches where you want successful chunks/pages to be committed, while collecting detailed diagnostics for failures. + results, failures = ingestor.ingest(show_progress=True, return_failures=True) + + # Return only successes + # results = ingestor.ingest(show_progress=True) + + t1 = time.time() + print(f"Total time: {t1 - t0} seconds") + + # results blob is directly inspectable + if results: + print(ingest_json_results_to_blob(results[0])) + + # (optional) Review any failures that were returned + if failures: + print(f"There were {len(failures)} failures. Sample: {failures[0]}") + +if __name__ == "__main__": + main() +``` + +!!! note + + For advanced visual parsing with library mode, uncomment `extract_method="nemotron_parse"` in the previous code. For more information, refer to [Advanced Visual Parsing](nemoretriever-parse.md). + + +You can see the extracted text that represents the content of the ingested test document. + +```shell +Starting ingestion.. +Total time: 9.243880033493042 seconds + +TestingDocument +A sample document with headings and placeholder text +Introduction +This is a placeholder document that can be used for any purpose. It contains some +headings and some placeholder text to fill the space. The text is not important and contains +no real value, but it is useful for testing. Below, we will have some simple tables and charts +that we can use to confirm Ingest is working as expected. +Table 1 +This table describes some animals, and some activities they might be doing in specific +locations. +Animal Activity Place +Gira@e Driving a car At the beach +Lion Putting on sunscreen At the park +Cat Jumping onto a laptop In a home o@ice +Dog Chasing a squirrel In the front yard +Chart 1 +This chart shows some gadgets, and some very fictitious costs. + +... document extract continues ... +``` + +## Step 3: Query Ingested Content + +To query for relevant snippets of the ingested content, and use them with an LLM to generate answers, use the following code. With the default LanceDB backend, use the LanceDB retrieval API (see [Data Upload](data-store.md)). The example below shows retrieval when using Milvus (e.g. milvus-lite). + +```python +import os +from openai import OpenAI +from nv_ingest_client.util.milvus import nvingest_retrieval + +# Only needed when using Milvus (e.g. milvus-lite) instead of LanceDB +milvus_uri = "milvus.db" +collection_name = "test" +sparse = False + +queries = ["Which animal is responsible for the typos?"] + +retrieved_docs = nvingest_retrieval( + queries, + collection_name, + milvus_uri=milvus_uri, + hybrid=sparse, + top_k=1, +) + +# simple generation example +extract = retrieved_docs[0][0]["entity"]["text"] +client = OpenAI( + base_url = "https://integrate.api.nvidia.com/v1", + api_key = os.environ["NVIDIA_API_KEY"] +) + +prompt = f"Using the following content: {extract}\n\n Answer the user query: {queries[0]}" +print(f"Prompt: {prompt}") +completion = client.chat.completions.create( + model="nvidia/llama-3.1-nemotron-nano-vl-8b-v1", + messages=[{"role":"user","content": prompt}], +) +response = completion.choices[0].message.content + +print(f"Answer: {response}") +``` + +```shell +Prompt: Using the following content: Table 1 +| This table describes some animals, and some activities they might be doing in specific locations. | This table describes some animals, and some activities they might be doing in specific locations. | This table describes some animals, and some activities they might be doing in specific locations. | +| Animal | Activity | Place | +| Giraffe | Driving a car | At the beach | +| Lion | Putting on sunscreen | At the park | +| Cat | Jumping onto a laptop | In a home office | +| Dog | Chasing a squirrel | In the front yard | + + Answer the user query: Which animal is responsible for the typos? +Answer: A clever query! + +Based on the provided Table 1, I'd make an educated inference to answer your question. Since the activities listed are quite unconventional for the respective animals (e.g., a giraffe driving a car, a lion putting on sunscreen), it's likely that the table is using humor or hypothetical scenarios. + +Given this context, the question "Which animal is responsible for the typos?" is probably a tongue-in-cheek inquiry, as there's no direct information in the table about typos or typing activities. + +However, if we were to make a playful connection, we could look for an animal that's: + +1. Typically found in a setting where typing might occur (e.g., an office). +2. Engaging in an activity that could potentially lead to typos (e.g., interacting with a typing device). + +Based on these loose criteria, I'd jokingly point to: + +**Cat** as the potential culprit, since it's: + * Located "In a home office" + * Engaged in "Jumping onto a laptop", which could theoretically lead to accidental keystrokes or typos if the cat were to start "walking" on the keyboard! + +Please keep in mind that this response is purely humorous and interpretative, as the table doesn't explicitly mention typos or provide a straightforward answer to the question. +``` + + + +## Logging Configuration + +Nemo Retriever extraction uses [Ray](https://docs.ray.io/en/latest/index.html) for logging. +For details, refer to [Configure Ray Logging](ray-logging.md). + +By default, library mode runs in quiet mode to minimize startup noise. +Quiet mode automatically configures the following environment variables. + +| Variable | Quiet Mode Value | Description | +|--------------------------------------|------------------|-------------| +| `INGEST_RAY_LOG_LEVEL` | `PRODUCTION` | Sets Ray logging to ERROR level to reduce noise. | +| `RAY_ACCEL_ENV_VAR_OVERRIDE_ON_ZERO` | `0` | Silences Ray accelerator warnings | +| `OTEL_SDK_DISABLED` | `true` | Disables OpenTelemetry trace export errors | + + +If you want to see detailed startup logs for debugging, use one of the following options: + +- Set `quiet=False` when you run the pipeline as shown following. + + ```python + run_pipeline(block=False, disable_dynamic_scaling=True, run_in_subprocess=True, quiet=False) + ``` + +- Set the environment variables manually before you run the pipeline as shown following. + + ```bash + export INGEST_RAY_LOG_LEVEL=DEVELOPMENT # or DEBUG for maximum verbosity + ``` + + + +## Library Mode Communication and Advanced Examples + +Communication in library mode is handled through a simplified, 3-way handshake message broker called `SimpleBroker`. + +Attempting to run a library-mode process co-located with a Docker Compose deployment does not work by default. +The Docker Compose deployment typically creates a firewall rule or port mapping that captures traffic to port `7671`, +which prevents the `SimpleBroker` from receiving messages. +Always ensure that you use library mode in isolation, without an active containerized deployment listening on the same port. + + +### Example `launch_libmode_service.py` + +This example launches the pipeline service in a subprocess, +and keeps it running until it is interrupted (for example, by pressing `Ctrl+C`). +It listens for ingestion requests on port `7671` from an external client. + +```python +import logging +import os + +from nv_ingest.framework.orchestration.ray.util.pipeline.pipeline_runners import run_pipeline +from nv_ingest_api.util.logging.configuration import configure_logging as configure_local_logging + +# Configure the logger +logger = logging.getLogger(__name__) + +local_log_level = os.getenv("INGEST_LOG_LEVEL", "DEFAULT") +if local_log_level in ("DEFAULT",): + local_log_level = "INFO" + +configure_local_logging(local_log_level) + + +def main(): + """ + Launch the libmode pipeline service using the embedded default configuration. + """ + try: + # Start pipeline and block until interrupted + # Note: stdout/stderr cannot be passed when run_in_subprocess=True (not picklable) + # Use quiet=False to see verbose startup logs + _ = run_pipeline( + block=True, + disable_dynamic_scaling=True, + run_in_subprocess=True, + ) + except KeyboardInterrupt: + logger.info("Keyboard interrupt received. Shutting down...") + except Exception as e: + logger.error(f"An unexpected error occurred: {e}", exc_info=True) + + +if __name__ == "__main__": + main() +``` + +### Example `launch_libmode_and_run_ingestor.py` + +This example starts the pipeline service in-process, +and immediately runs an ingestion client against it in the same parent process. + +```python +import logging +import os +import time + +from nv_ingest.framework.orchestration.ray.util.pipeline.pipeline_runners import run_pipeline +from nv_ingest_api.util.logging.configuration import configure_logging as configure_local_logging +from nv_ingest_api.util.message_brokers.simple_message_broker import SimpleClient +from nv_ingest_client.client import Ingestor +from nv_ingest_client.client import NvIngestClient + +# Configure the logger +logger = logging.getLogger(__name__) + +local_log_level = os.getenv("INGEST_LOG_LEVEL", "INFO") +if local_log_level in ("DEFAULT",): + local_log_level = "INFO" + +configure_local_logging(local_log_level) + + +def run_ingestor(): + """ + Set up and run the ingestion process to send traffic against the pipeline. + """ + logger.info("Setting up Ingestor client...") + client = NvIngestClient( + message_client_allocator=SimpleClient, message_client_port=7671, message_client_hostname="localhost" + ) + + ingestor = ( + Ingestor(client=client) + .files("./data/multimodal_test.pdf") + .extract( + extract_text=True, + extract_tables=True, + extract_charts=True, + extract_images=True, + table_output_format="markdown", + extract_infographics=False, + text_depth="page", + ) + .split(chunk_size=1024, chunk_overlap=150) + .embed() + ) + + try: + results, _ = ingestor.ingest(show_progress=False, return_failures=True) + logger.info("Ingestion completed successfully.") + except Exception as e: + logger.error(f"Ingestion failed: {e}") + raise + + print("\nIngest done.") + print(f"Got {len(results)} results.") + + +def main(): + """ + Launch the libmode pipeline service and run the ingestor against it. + Uses the embedded default libmode pipeline configuration. + """ + pipeline = None + try: + # Start pipeline in subprocess + # Note: stdout/stderr cannot be passed when run_in_subprocess=True (not picklable) + # Use quiet=False to see verbose startup logs + pipeline = run_pipeline( + block=False, + disable_dynamic_scaling=True, + run_in_subprocess=True, + ) + time.sleep(10) + run_ingestor() + # Run other code... + except KeyboardInterrupt: + logger.info("Keyboard interrupt received. Shutting down...") + except Exception as e: + logger.error(f"Error running pipeline: {e}") + finally: + if pipeline: + pipeline.stop() + logger.info("Shutting down pipeline...") + + +if __name__ == "__main__": + main() +``` + + + +## The `run_pipeline` Function Reference + +The `run_pipeline` function is the main entry point to start the Nemo Retriever Extraction pipeline. +It can run in-process or as a subprocess. + +The `run_pipeline` function accepts the following parameters. + +| Parameter | Type | Default | Required? | Description | +|--------------------------|------------------------|---------|-----------|-------------------------------------------------| +| pipeline_config | PipelineConfigSchema | — | Yes | A configuration object that specifies how the pipeline should be constructed. | +| run_in_subprocess | bool | False | Yes | `True` to launch the pipeline in a separate Python subprocess. `False` to run in the current process. | +| block | bool | True | Yes | `True` to run the pipeline synchronously. The function returns after it finishes. `False` to return an interface for external pipeline control. | +| disable_dynamic_scaling | bool | None | No | `True` to disable autoscaling regardless of global settings. `None` to use the global default behavior. | +| dynamic_memory_threshold | float | None | No | A value between `0.0` and `1.0`. If dynamic scaling is enabled, triggers autoscaling when memory usage crosses this threshold. | +| stdout | TextIO | None | No | Redirect the subprocess `stdout` to a file or stream. If `None`, defaults to `/dev/null`. | +| stderr | TextIO | None | No | Redirect subprocess `stderr` to a file or stream. If `None`, defaults to `/dev/null`. | +| libmode | bool | True | No | `True` to load the default library mode pipeline configuration when `ingest_config` is `None`. | +| quiet | bool | None | No | `True` to suppress verbose startup logs (PRODUCTION preset). `None` defaults to `True` when `libmode=True`. Set to `False` for verbose output. | + + +The `run_pipeline` function returns the following values, depending on the parameters that you set: + +- **run_in_subprocess=False and block=True** — The function returns a `float` that represents the elapsed time in seconds. +- **run_in_subprocess=False and block=False** — The function returns a `RayPipelineInterface` object. +- **run_in_subprocess=True and block=True** — The function returns `0.0`. +- **run_in_subprocess=True and block=False** — The function returns a `RayPipelineInterface` object. + + +The `run_pipeline` throws the following errors: + +- **RuntimeError** — A subprocess failed to start, or exited with error. +- **Exception** — Any other failure during pipeline setup or execution. + + + +## Related Topics -Use the [Quick Start for NeMo Retriever Library](https://github.com/NVIDIA/NeMo-Retriever/blob/26.03/nemo_retriever/README.md) to set up and run the NeMo Retriever Library locally, so you can build a GPU‑accelerated, multimodal RAG ingestion pipeline that parses PDFs, HTML, text, audio, and video into LanceDB vector embeddings, integrates with Nemotron RAG models (locally or via NIM endpoints), which includes Ray‑based scaling plus built‑in recall evaluation. \ No newline at end of file +- [Prerequisites](prerequisites.md) +- [Support Matrix](support-matrix.md) +- [Deploy With Docker Compose (Self-Hosted)](quickstart-guide.md) +- [Deploy With Helm](helm.md) +- [Notebooks](notebooks.md) +- [Enterprise RAG Blueprint](https://build.nvidia.com/nvidia/multimodal-pdf-data-extraction-for-enterprise-rag) diff --git a/docs/docs/extraction/releasenotes-nv-ingest.md b/docs/docs/extraction/releasenotes-nv-ingest.md index 4781bb476..fb4b847f8 100644 --- a/docs/docs/extraction/releasenotes-nv-ingest.md +++ b/docs/docs/extraction/releasenotes-nv-ingest.md @@ -4,38 +4,68 @@ This documentation contains the release notes for [NeMo Retriever Library](overv !!! note - NVIDIA Ingest (nv-ingest) has been renamed to the NeMo Retriever Library. - -## 26.03 Release Notes (26.3.0) - -NVIDIA® NeMo Retriever Library version 26.03 adds broader hardware and software support along with many pipeline, evaluation, and deployment enhancements. - -To upgrade the Helm charts for this release, refer to the [NeMo Retriever Library Helm Charts](https://github.com/NVIDIA/NeMo-Retriever/blob/release/26.3.0/helm/README.md). - -Highlights for the 26.03 release include: - -- NV-Ingest GitHub repo renamed to NeMo-Retriever -- NeMo Retriever Extraction pipeline renamed to NeMo Retriever Library -- NeMo Retriever Library now supports two deployment options: - - A new no-container, pip-installable in-process library for development (available on PyPI) - - Existing production-ready Helm chart with NIMs -- Added documentation notes on Air-gapped deployment support for both Helm (Kubernetes) and Docker Compose -- Added documentation notes on OpenShift support -- Added support for RTX4500 Pro Blackwell SKU -- Added support for llama-nemotron-embed-vl-v2 in text and text+image modes -- New extract methods `pdfium_hybrid` and `ocr` target scanned PDFs to improve text and layout extraction from image-based pages -- VLM-based image caption enhancements: - - Infographics can be captioned - - Reasoning mode is configurable -- Enabled hybrid search with Lancedb -- Added retrieval_bench subfolder with generalizable agentic retrieval pipeline -- The project now uses UV as the primary environment and package manager instead of Conda, resulting in faster installs and simpler dependency handling -- Default Redis TTL increased from 1–2 hours to 48 hours so long-running jobs (e.g., VLM captioning) don’t expire before completion -- NeMo Retriever Library currently does not support image captioning via VLM; this feature will be added in the next release + NeMo Retriever Library is also known as NVIDIA Ingest. + + + +## Release 26.01 (26.1.2) + +The NeMo Retriever Library 26.01 release adds new hardware and software support, and other improvements. + +To upgrade the Helm Charts for this version, refer to [NV-Ingest Helm Charts](https://github.com/NVIDIA/nv-ingest/blob/release/26.1.2/helm/README.md). + + +### Highlights + +This release contains the following key changes: + +- Added functional support for [H200 NVL](https://www.nvidia.com/en-us/data-center/h200/). For details, refer to [Support Matrix](support-matrix.md). +- All Helm deployments for Kubernetes now use [NVIDIA NIM Operator](https://docs.nvidia.com/nim-operator/latest/index.html). For details, refer to [NV-Ingest Helm Charts](https://github.com/NVIDIA/nv-ingest/blob/release/26.1.2/helm/README.md). +- Updated RIVA NIM to version 1.4.0. For details, refer to [Extract Speech](audio.md). +- Updated VLM NIM to [nemotron-nano-12b-v2-vl](https://build.nvidia.com/nvidia/nemotron-nano-12b-v2-vl/modelcard). For details, refer to [Extract Captions from Images](nv-ingest-python-api.md#extract-captions-from-images). +- Added VLM caption prompt customization parameters, including reasoning control. For details, refer to [Caption Images and Control Reasoning](nv-ingest-python-api.md#caption-images-and-control-reasoning). +- Added support for the [nemotron-parse](https://build.nvidia.com/nvidia/nemotron-parse/modelcard) model which replaces the [nemoretriever-parse](https://build.nvidia.com/nvidia/nemoretriever-parse/modelcard) model. For details, refer to [Advanced Visual Parsing](nemoretriever-parse.md). +- Support is now deprecated for [paddleocr](https://build.nvidia.com/baidu/paddleocr/modelcard). +- The `meta-llama/Llama-3.2-1B` tokenizer is now pre-downloaded so that you can run token-based splitting without making a network request. For details, refer to [Split Documents](chunking.md). +- For scanned PDFs, added specialized extraction strategies. For details, refer to [PDF Extraction Strategies](nv-ingest-python-api.md#pdf-extraction-strategies). +- [LanceDB](https://lancedb.com/) is now the default vector database backend; Milvus remains fully supported. For details, refer to [Data Upload](data-store.md). +- The V2 API is now available and is the default processing pipeline. The response format remains backwards-compatible. You can enable the v2 API by using `message_client_kwargs={"api_version": "v2"}`.For details, refer to [API Reference](api-docs). +- Large PDFs are now automatically split into chunks and processed in parallel, delivering faster ingestion for long documents. For details, refer to [PDF Pre-Splitting](v2-api-guide.md). +- Issues maintaining extraction quality while processing very large files are now resolved with the V2 API. For details, refer to [V2 API Guide](v2-api-guide.md). +- Updated the embedding task to support embedding on custom content fields like the results of summarization functions. For details, refer to [Use the Python API](nv-ingest-python-api.md). +- User-defined function summarization is now using `nemotron-mini-4b-instruct` which provides significant speed improvements. For details, refer to [User-defined Functions](user-defined-functions.md) and [NV-Ingest UDF Examples](https://github.com/NVIDIA/nv-ingest/blob/release/26.1.2/examples/udfs/README.md). +- In the `Ingestor.extract` method, the defaults for `extract_text` and `extract_images` are now set to `true` for consistency with `extract_tables` and `extract_charts`. For details, refer to [Use the Python API](nv-ingest-python-api.md). +- The `table-structure` profile is no longer available. The table-structure profile is now part of the default profile. For details, refer to [Profile Information](quickstart-guide.md#profile-information). +- New documentation [Why Throughput Is Dataset-Dependent](throughput-is-dataset-dependent.md). +- New documentation [Add User-defined Stages](user-defined-stages.md). +- New documentation [Add User-defined Functions](user-defined-functions.md). +- New documentation [Resource Scaling Modes](scaling-modes.md). +- New documentation [NimClient Usage](nimclient.md). +- New documentation [Use the API (V2)](v2-api-guide.md). + + + +### Fixed Known Issues + +The following are the known issues that are fixed in this version: + +- A10G support is restored. To use A10G hardware, use release 26.1.2 or later. For details, refer to [Support Matrix](support-matrix.md). +- L40S support is restored. To use L40S hardware, use release 26.1.2 or later. For details, refer to [Support Matrix](support-matrix.md). +- The page number field in the content metadata now starts at 1 instead of 0 so each page number is no longer off by one from what you would expect. For details, refer to [Content Metadata](content-metadata.md). +- Support for batches that include individual files greater than approximately 400MB is restored. This includes audio files and pdfs. + + + +## All Known Issues + +The following are the known issues for NeMo Retriever Library: + +- Advanced visual parsing is not supported on RTX Pro 6000, B200, or H200 NVL. For details, refer to [Advanced Visual Parsing](advanced-visual-parsing.md) and [Support Matrix](support-matrix.md). +- The Page Elements NIM (`nemoretriever-page-elements-v3:1.7.0`) may intermittently fail during inference under high-concurrency workloads. This happens when Triton’s dynamic batching combines requests that exceed the model’s maximum batch size, a situation more commonly seen in multi-GPU setups or large ingestion runs. In these cases, extraction fails for the impacted documents. A correction is planned for `nemoretriever-page-elements-v3:1.7.1`. + ## Release Notes for Previous Versions -| [26.1.2](https://docs.nvidia.com/nemo/retriever/26.1.2/extraction/releasenotes-nv-ingest/) | [26.1.1](https://docs.nvidia.com/nemo/retriever/26.1.1/extraction/releasenotes-nv-ingest/) | [25.9.0](https://docs.nvidia.com/nemo/retriever/25.9.0/extraction/releasenotes-nv-ingest/) | [25.6.3](https://docs.nvidia.com/nemo/retriever/25.6.3/extraction/releasenotes-nv-ingest/) @@ -44,6 +74,9 @@ Highlights for the 26.03 release include: | [25.3.0](https://docs.nvidia.com/nemo/retriever/25.3.0/extraction/releasenotes-nv-ingest/) | [24.12.1](https://docs.nvidia.com/nemo/retriever/25.3.0/extraction/releasenotes-nv-ingest/) | [24.12.0](https://docs.nvidia.com/nemo/retriever/25.3.0/extraction/releasenotes-nv-ingest/) +| + + ## Related Topics diff --git a/docs/docs/extraction/scaling-modes.md b/docs/docs/extraction/scaling-modes.md index 3e8cba20a..5c57b33ac 100644 --- a/docs/docs/extraction/scaling-modes.md +++ b/docs/docs/extraction/scaling-modes.md @@ -7,7 +7,7 @@ This guide covers how resource scaling modes work across stages in [NeMo Retriev !!! note - NVIDIA Ingest (nv-ingest) has been renamed to the NeMo Retriever Library. + NeMo Retriever Library is also known as NVIDIA Ingest. @@ -18,7 +18,7 @@ This guide covers how resource scaling modes work across stages in [NeMo Retriev ## Configure (docker-compose) -Edit `services > nemo-retriever-ms-runtime > environment` in `docker-compose.yaml`. +Edit `services > nv-ingest-ms-runtime > environment` in `docker-compose.yaml`. ### Select mode @@ -35,7 +35,7 @@ Example (Static): ```yaml services: - nemo-retriever-ms-runtime: + nv-ingest-ms-runtime: environment: - INGEST_DISABLE_DYNAMIC_SCALING=true - INGEST_STATIC_MEMORY_THRESHOLD=0.85 @@ -45,7 +45,7 @@ Example (Dynamic): ```yaml services: - nemo-retriever-ms-runtime: + nv-ingest-ms-runtime: environment: - INGEST_DISABLE_DYNAMIC_SCALING=false - INGEST_DYNAMIC_MEMORY_THRESHOLD=0.80 @@ -91,7 +91,7 @@ services: Open `docker-compose.yaml` and locate: -- `services > nemo-retriever-ms-runtime > environment`: +- `services > nv-ingest-ms-runtime > environment`: - `INGEST_DISABLE_DYNAMIC_SCALING` - `INGEST_DYNAMIC_MEMORY_THRESHOLD` - `INGEST_STATIC_MEMORY_THRESHOLD` @@ -102,4 +102,4 @@ Open `docker-compose.yaml` and locate: - [Prerequisites](prerequisites.md) - [Support Matrix](support-matrix.md) -- [Troubleshooting](troubleshoot.md) +- [Troubleshooting](troubleshooting.md) diff --git a/docs/docs/extraction/support-matrix.md b/docs/docs/extraction/support-matrix.md index 845e671f6..5dbc49508 100644 --- a/docs/docs/extraction/support-matrix.md +++ b/docs/docs/extraction/support-matrix.md @@ -4,34 +4,33 @@ Before you begin using [NeMo Retriever Library](overview.md), ensure that you ha !!! note - NVIDIA Ingest (nv-ingest) has been renamed to the NeMo Retriever Library. + NeMo Retriever Library is also known as NVIDIA Ingest. ## Core and Advanced Pipeline Features -The NeMo Retriever Library core pipeline features run on a single A10G or better GPU. - +The Nemo Retriever extraction core pipeline features run on a single A10G or better GPU. The core pipeline features include the following: -- llama-nemotron-embed-1b-v2 — Embedding model for converting text chunks into vectors. -- nemotron-page-elements-v3 — Detects and classifies images on a page as a table, chart or infographic. -- nemotron-table-structure-v1 — Detects rows, columns, and cells within a table to preserve table structure and convert to Markdown format. -- nemotron-graphic-elements-v1 — Detects graphic elements within chart images such as titles, legends, axes, and numerical values. -- nemotron-ocr-v1 — Image OCR model to detect and extract text from images. -- retrieval — Enables embedding and indexing into Milvus. +- llama3.2-nv-embedqa-1b-v2 — Embedding model for converting text chunks into vectors. +- nemoretriever-page-elements-v3 — Detects and classifies images on a page as a table, chart or infographic. +- nemoretriever-table-structure-v1 — Detects rows, columns, and cells within a table to preserve table structure and convert to Markdown format. +- nemoretriever-graphic-elements-v1 — Detects graphic elements within chart images such as titles, legends, axes, and numerical values. +- nemoretriever-ocr-v1 — Image OCR model to detect and extract text from images. +- retrieval — Enables embedding and indexing into LanceDB (default) or Milvus. Advanced features require additional GPU support and disk space. This includes the following: - Audio extraction — Use [Riva](https://docs.nvidia.com/deeplearning/riva/user-guide/docs/index.html) for processing audio files. For more information, refer to [Audio Processing](audio.md). -- Advanced visual parsing — Use [nemotron-parse](https://build.nvidia.com/nvidia/nemotron-parse/modelcard), which adds state-of-the-art text and table extraction. For more information, refer to [Advanced Visual Parsing ](nemoretriever-parse.md). -- VLM — Use [nemotron-nano-12b-v2-vl](https://build.nvidia.com/nvidia/nemotron-nano-12b-v2-vl/modelcard) for experimental image captioning of unstructured images. +- Advanced visual parsing — Use [nemotron-parse](https://docs.nvidia.com/nim/vision-language-models/latest/examples/nemotron-parse/overview.html), which adds state-of-the-art text and table extraction. For more information, refer to [Advanced Visual Parsing ](nemoretriever-parse.md). +- git — Use [nemotron-nano-12b-v2-vl](https://build.nvidia.com/nvidia/nemotron-nano-12b-v2-vl/modelcard) for experimental image captioning of unstructured images. !!! note - While nemotron-nano-12b-v2-vl is the default VLM, you can configure and use other vision language models for image captioning based on your specific use case requirements. For more information, refer to [Extract Captions from Images](python-api-reference.md#extract-captions-from-images). + While nemotron-nano-12b-v2-vl is the default VLM, you can configure and use other vision language models for image captioning based on your specific use case requirements. For more information, refer to [Extract Captions from Images](nv-ingest-python-api.md#extract-captions-from-images). -- Reranker — Use [llama-nemotron-rerank-1b-v2](https://build.nvidia.com/nvidia/llama-nemotron-rerank-1b-v2) for improved retrieval accuracy. +- Reranker — Use [llama-3.2-nv-rerankqa-1b-v2](https://build.nvidia.com/nvidia/llama-3.2-nv-rerankqa-1b-v2) for improved retrieval accuracy. diff --git a/docs/docs/extraction/telemetry.md b/docs/docs/extraction/telemetry.md index 5c050452f..9d34aaa92 100644 --- a/docs/docs/extraction/telemetry.md +++ b/docs/docs/extraction/telemetry.md @@ -4,7 +4,7 @@ You can view telemetry data for [NeMo Retriever Library](overview.md). !!! note - NVIDIA Ingest (nv-ingest) has been renamed to the NeMo Retriever Library. + NeMo Retriever Library is also known as NVIDIA Ingest. ## OpenTelemetry diff --git a/docs/docs/extraction/troubleshoot.md b/docs/docs/extraction/troubleshoot.md index 1e97448e8..1b130952b 100644 --- a/docs/docs/extraction/troubleshoot.md +++ b/docs/docs/extraction/troubleshoot.md @@ -4,7 +4,7 @@ Use this documentation to troubleshoot issues that arise when you use [NeMo Retr !!! note - NVIDIA Ingest (nv-ingest) has been renamed to the NeMo Retriever Library. + NeMo Retriever Library is also known as NVIDIA Ingest. ## Can't process long, non-language text strings @@ -52,7 +52,7 @@ This happens because, by default, NeMo Retriever Library stores the results from If the total size of the results exceeds the available memory, the process fails. To resolve this issue, use the `save_to_disk` method. -For details, refer to [Working with Large Datasets: Saving to Disk](python-api-reference.md#work-with-large-datasets-save-to-disk). +For details, refer to [Working with Large Datasets: Saving to Disk](nv-ingest-python-api.md#work-with-large-datasets-save-to-disk). diff --git a/docs/docs/extraction/user-defined-functions.md b/docs/docs/extraction/user-defined-functions.md index eae1f5a4a..74a710698 100644 --- a/docs/docs/extraction/user-defined-functions.md +++ b/docs/docs/extraction/user-defined-functions.md @@ -5,7 +5,7 @@ This guide covers how to write, validate, and submit UDFs using both the CLI and !!! note - NVIDIA Ingest (nv-ingest) has been renamed to the NeMo Retriever Library. + NeMo Retriever Library is also known as NVIDIA Ingest. @@ -16,7 +16,7 @@ This guide covers how to write, validate, and submit UDFs using both the CLI and Create a Python function that accepts an `IngestControlMessage` and returns a modified `IngestControlMessage`: ```python -from nemo_retriever.internal.primitives.ingest_control_message import IngestControlMessage +from nv_ingest_api.internal.primitives.ingest_control_message import IngestControlMessage def my_custom_processor(control_message: IngestControlMessage) -> IngestControlMessage: """Add custom metadata to all documents.""" @@ -41,7 +41,7 @@ The CLI supports all UDF function specification formats. Here are examples of ea #### Inline Function String ```bash # Submit inline UDF function -nemo-retriever \ +nv-ingest-cli \ --doc /path/to/document.pdf \ --output-directory ./output \ --task 'udf:{"udf_function": "def my_processor(control_message): print(\"Processing...\"); return control_message", "udf_function_name": "my_processor", "target_stage": "text_embedder", "run_before": true}' @@ -50,7 +50,7 @@ nemo-retriever \ #### Module Path with Colon (Recommended) ```bash # Submit UDF from importable module (preserves all imports and context) -nemo-retriever \ +nv-ingest-cli \ --doc /path/to/document.pdf \ --output-directory ./output \ --task 'udf:{"udf_function": "my_package.processors:enhance_metadata", "target_stage": "text_embedder", "run_after": true}' @@ -59,7 +59,7 @@ nemo-retriever \ #### File Path ```bash # Submit UDF from file path -nemo-retriever \ +nv-ingest-cli \ --doc /path/to/document.pdf \ --output-directory ./output \ --task 'udf:{"udf_function": "my_file.py:my_custom_processor", "target_stage": "text_embedder", "run_before": true}' @@ -68,7 +68,7 @@ nemo-retriever \ #### Legacy Import Path (Limited) ```bash # Submit UDF using legacy dot notation (function only, no imports) -nemo-retriever \ +nv-ingest-cli \ --doc /path/to/document.pdf \ --output-directory ./output \ --task 'udf:{"udf_function": "my_package.processors.basic_processor", "target_stage": "text_embedder", "run_after": true}' @@ -77,7 +77,7 @@ nemo-retriever \ ### 3. Submit via Python Client ```python -from nemo_retriever.client.interface import Ingestor +from nv_ingest_client.client.interface import Ingestor # Create an Ingestor instance with default client ingestor = Ingestor() @@ -121,7 +121,7 @@ results = ingestor.files("/path/to/document.pdf") \ ### Understanding IngestControlMessage (ICM) -The `IngestControlMessage` is the primary data structure that flows through the NeMo Retriever Library pipeline. Your UDF receives an ICM and must return a (potentially modified) ICM. +The `IngestControlMessage` is the primary data structure that flows through the pipeline. Your UDF receives an ICM and must return a (potentially modified) ICM. #### Key ICM Methods @@ -265,7 +265,7 @@ def enhance_metadata(control_message: IngestControlMessage) -> IngestControlMess return control_message ``` -> **📖 For detailed metadata schema documentation, see:** [Content Metadata](content-metadata.md) +> **📖 For detailed metadata schema documentation, see:** [metadata_documentation.md](metadata_documentation.md) ### UDF Targeting @@ -311,9 +311,9 @@ UDFs can be executed at different stages of the pipeline by specifying the `targ ```bash # CLI examples for different target stages -nemo-retriever --doc file.pdf --task 'udf:{"udf_function": "processor.py:validate_input", "target_stage": "pdf_extractor", "run_before": true}' -nemo-retriever --doc file.pdf --task 'udf:{"udf_function": "processor.py:extract_custom", "target_stage": "text_embedder", "run_after": true}' -nemo-retriever --doc file.pdf --task 'udf:{"udf_function": "processor.py:enhance_output", "target_stage": "embedding_storage", "run_before": true}' +nv-ingest-cli --doc file.pdf --task 'udf:{"udf_function": "processor.py:validate_input", "target_stage": "pdf_extractor", "run_before": true}' +nv-ingest-cli --doc file.pdf --task 'udf:{"udf_function": "processor.py:extract_custom", "target_stage": "text_embedder", "run_after": true}' +nv-ingest-cli --doc file.pdf --task 'udf:{"udf_function": "processor.py:enhance_output", "target_stage": "embedding_storage", "run_before": true}' ``` ```python @@ -379,7 +379,7 @@ def my_udf(control_message: IngestControlMessage) -> IngestControlMessage: ### UDF Function Specification Formats -NeMo Retriever Library supports four different formats for specifying UDF functions: +The library supports four different formats for specifying UDF functions: ### 1. Inline Function String Define your function directly as a string: @@ -456,14 +456,14 @@ ingestor.udf(udf_function="my_package.processors.text_utils:enhance_metadata") ## Integrating with NVIDIA NIMs -NVIDIA Inference Microservices (NIMs) provide powerful AI capabilities that can be seamlessly integrated into your UDFs. The `NimClient` class offers a unified interface for connecting to and using NIMs within the NeMo Retriever Library pipeline. +NVIDIA Inference Microservices (NIMs) provide powerful AI capabilities that can be seamlessly integrated into your UDFs. The `NimClient` class offers a unified interface for connecting to and using NIMs within the pipeline. ### Quick NIM Integration ```python -from nemo_retriever.internal.primitives.control_message import IngestControlMessage -from nemo_retriever.util.nim import create_inference_client -from nemo_retriever.internal.primitives.nim.model_interface.vlm import VLMModelInterface +from nv_ingest_api.internal.primitives.control_message import IngestControlMessage +from nv_ingest_api.util.nim import create_inference_client +from nv_ingest_api.internal.primitives.nim.model_interface.vlm import VLMModelInterface import os def document_analysis_with_nim(control_message: IngestControlMessage) -> IngestControlMessage: @@ -521,7 +521,7 @@ export NGC_API_KEY="your-ngc-api-key" ### Available NIM Interfaces -NeMo Retriever Library provides several pre-built model interfaces: +The library provides several pre-built model interfaces: - **VLMModelInterface**: Vision-Language Models for image analysis and captioning - **EmbeddingModelInterface**: Text embedding generation @@ -538,11 +538,11 @@ For detailed guidance on creating custom NIM integrations, including: - Error handling and debugging - Performance best practices -See the comprehensive [**NimClient Usage Guide**](nimclient.md). +See the comprehensive [**NimClient Usage Guide**](nimclient_usage.md). ### Error Handling -The NeMo Retriever Library system automatically catches all exceptions that occur within UDF execution. If your UDF fails for any reason, the system will: +The system automatically catches all exceptions that occur within UDF execution. If your UDF fails for any reason, the system will: 1. Annotate the job with appropriate error information 2. Mark the job as failed @@ -553,7 +553,7 @@ You do not need to implement extensive error handling within your UDF - focus on ### Performance Considerations -UDFs execute within the NeMo Retriever Library pipeline and can significantly impact overall system performance and stability. Understanding these considerations is crucial for maintaining optimal pipeline throughput and reliability. +UDFs execute within the pipeline and can significantly impact overall system performance and stability. Understanding these considerations is crucial for maintaining optimal pipeline throughput and reliability. #### Pipeline Impact @@ -873,7 +873,7 @@ Test your UDF functions in isolation before deploying them to the pipeline: ```python import pandas as pd -from nemo_retriever.internal.primitives.ingest_control_message import IngestControlMessage +from nv_ingest_api.internal.primitives.ingest_control_message import IngestControlMessage def test_my_udf(): # Create test data @@ -941,6 +941,6 @@ def debug_udf(control_message: IngestControlMessage) -> IngestControlMessage: ## Related Topics -- [NeMo Retriever Library UDF Examples](https://github.com/NVIDIA/NeMo-Retriever/blob/release/26.3.0/examples/udfs/README.md) +- [NV-Ingest UDF Examples](https://github.com/NVIDIA/nv-ingest/blob/release/26.1.2/examples/udfs/README.md) - [User-Defined Stages for NeMo Retriever Library](user-defined-stages.md) - [NimClient Usage](nimclient.md) diff --git a/docs/docs/extraction/user-defined-stages.md b/docs/docs/extraction/user-defined-stages.md index a20e17673..57f68179f 100644 --- a/docs/docs/extraction/user-defined-stages.md +++ b/docs/docs/extraction/user-defined-stages.md @@ -8,7 +8,7 @@ and operate on a well-defined DataFrame payload and metadata structure. !!! note - NVIDIA Ingest (nv-ingest) has been renamed to the NeMo Retriever Library. + NeMo Retriever Library is also known as NVIDIA Ingest. To add user-defined stages to your pipeline, you need the following: @@ -21,7 +21,7 @@ To add user-defined stages to your pipeline, you need the following: - **A DataFrame payload** — The `control_message.payload` field must be a [pandas.DataFrame](https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.html). For more information, refer to [Create a DataFrame Payload](#create-a-dataframe-payload). -- **Valid metadata** — The `metadata` field must conform to the [NeMo Retriever Library metadata schema](content-metadata.md). For more information, refer to [Update and Validate Metadata](#update-and-validate-metadata). +- **Valid metadata** — The `metadata` field must conform to the [content metadata schema](content-metadata.md). For more information, refer to [Update and Validate Metadata](#update-and-validate-metadata). @@ -44,8 +44,8 @@ The following example demonstrates how to create a valid Lambda function and con ```python import pandas as pd from pydantic import BaseModel -from nemo_retriever.internal.primitives.ingest_control_message import IngestControlMessage -from nemo_retriever.internal.schemas.meta.metadata_schema import validate_metadata +from nv_ingest_api.internal.primitives.ingest_control_message import IngestControlMessage +from nv_ingest_api.internal.schemas.meta.metadata_schema import validate_metadata # Config schema for your stage class MyToyConfig(BaseModel): @@ -160,13 +160,13 @@ When the pipeline runs it does the following: ## Update and Validate Metadata The `metadata` column in each row is a dictionary (JSON object), -and must conform to the [NeMo Retriever Library metadata schema](content-metadata.md). +and must conform to the [content metadata schema](content-metadata.md). After you change any metadata, you can validate it by using the `validate_metadata` function as demonstrated in the following code example. ```python -from nemo_retriever.internal.schemas.meta.metadata_schema import validate_metadata +from nv_ingest_api.internal.schemas.meta.metadata_schema import validate_metadata def edit_metadata(control_message: IngestControlMessage, stage_config: MyToyConfig) -> IngestControlMessage: df = control_message.payload() @@ -235,8 +235,8 @@ The following example adds user-defined stages to your NeMo Retriever Library p ```python # my_pipeline/stages.py from pydantic import BaseModel - from nemo_retriever.internal.primitives.ingest_control_message import IngestControlMessage - from nemo_retriever.internal.schemas.meta.metadata_schema import validate_metadata + from nv_ingest_api.internal.primitives.ingest_control_message import IngestControlMessage + from nv_ingest_api.internal.schemas.meta.metadata_schema import validate_metadata class DoubleConfig(BaseModel): multiply_by: int = 2 diff --git a/docs/docs/extraction/v2-api-guide.md b/docs/docs/extraction/v2-api-guide.md index 1ac15d216..5aa87f1f6 100644 --- a/docs/docs/extraction/v2-api-guide.md +++ b/docs/docs/extraction/v2-api-guide.md @@ -9,10 +9,9 @@ ## Table of Contents 1. [Quick Start](#quick-start) - Get running in 5 minutes -2. [HTTP API Reference](#http-api-reference) - Endpoint paths, methods, and status codes -3. [Configuration Guide](#configuration-guide) - All configuration options -4. [How It Works](#how-it-works) - Architecture overview -5. [Migration from V1](#migration-from-v1) - Upgrade existing code +2. [Configuration Guide](#configuration-guide) - All configuration options +3. [How It Works](#how-it-works) - Architecture overview +4. [Migration from V1](#migration-from-v1) - Upgrade existing code --- @@ -30,7 +29,7 @@ The V2 API automatically splits large PDFs into smaller chunks before processing ### Minimal Example ```python -from nemo_retriever.client import Ingestor +from nv_ingest_client.client import Ingestor # Two-step configuration ingestor = Ingestor( @@ -42,7 +41,7 @@ ingestor = Ingestor( # Run with optional chunk size override results = ingestor.files(["large_document.pdf"]) \ .extract(extract_text=True, extract_tables=True) \ - .pdf_split_config(pages_per_chunk=64) \ + .pdf_split_config(pages_per_chunk=64) \ # ← Step 2: Configure splitting .ingest() print(f"Processed {results['metadata']['total_pages']} pages") @@ -51,7 +50,7 @@ print(f"Processed {results['metadata']['total_pages']} pages") ### CLI Usage ```bash -nemo-retriever \ +nv-ingest-cli \ --api_version v2 \ --pdf_split_page_count 64 \ --doc large_document.pdf \ @@ -63,63 +62,6 @@ nemo-retriever \ --- -## HTTP API Reference - -The following endpoint reference is provided for custom HTTP clients (curl, Postman, etc.) and debugging. Base URL is the service root (e.g. `http://localhost:7670`); use the paths below as the path component of the full URL. - -### Endpoint Summary - -| Version | Method | Endpoint | Purpose | Status codes | -|---------|--------|----------|---------|--------------| -| V1 | POST | `/v1/submit` | Multipart/form-data upload (curl-friendly) | 200 | -| V1 | POST | `/v1/submit_job` | JSON job submission | 200 | -| V1 | GET | `/v1/fetch_job/{job_id}` | Fetch job result | 200, 202, 404, 410, 503 | -| V1 | POST | `/v1/convert` | PDF conversion | 200 | -| V1 | GET | `/v1/status/{job_id}` | Job status check | 200 | -| V2 | POST | `/v2/submit_job` | V2 job submission (with optional PDF splitting) | 200, 500, 503 | -| V2 | GET | `/v2/fetch_job/{job_id}` | V2 fetch with parent job aggregation | 200, 202, 404, 410, 500, 503 | - -### Request and Response Overview - -**V1 `/v1/submit` (POST)** -- **Content-Type:** `multipart/form-data` -- **Body:** `file` (uploaded PDF) -- **Response:** `200` — job ID (text) - -**V1 `/v1/submit_job` (POST)** -- **Content-Type:** `application/json` -- **Body:** `MessageWrapper` with job spec payload (JSON) -- **Response:** `200` — job ID (text). Header `x-trace-id` set. - -**V1 `/v1/fetch_job/{job_id}` (GET)** -- **Path:** `job_id` — UUID returned from submit -- **Response:** `200` result body, `202` still processing, `404` not found, `410` result consumed, `503` processing failed - -**V1 `/v1/convert` (POST)** -- **Content-Type:** `application/json` (or as defined by endpoint) -- **Response:** Conversion result (format depends on request) - -**V1 `/v1/status/{job_id}` (GET)** -- **Path:** `job_id` -- **Response:** Job state (e.g. SUBMITTED, PROCESSING, RETRIEVED_*) - -**V2 `/v2/submit_job` (POST)** -- **Content-Type:** `application/json` -- **Body:** Same as V1 `submit_job`; may include PDF split config in job spec -- **Response:** `200` — parent job ID (text). Header `x-trace-id` set. - -**V2 `/v2/fetch_job/{job_id}` (GET)** -- **Path:** `job_id` — parent job ID from V2 submit -- **Response:** Same status codes as V1 fetch; when the job was split, the service aggregates all chunk results and returns a single combined response. See [HTTP status codes](#http-status-codes) below. - -*Endpoint reference added for custom HTTP clients and debugging (Bug 596672).* - -### HTTP Status Codes - -See the [status code table](#http-status-codes) in this guide for `200`, `202`, `404`, `410`, `500`, and `503` meanings. - ---- - ## Configuration Guide ### Two Required Settings @@ -428,11 +370,11 @@ ingestor = Ingestor( ### Test Script Pattern -For test scripts like `tools/harness/src/nemo_retriever_harness/cases/e2e.py`: +For test scripts like `tools/harness/src/nv_ingest_harness/cases/e2e.py`: ```python import os -from nemo_retriever.client import Ingestor +from nv_ingest_client.client import Ingestor # Read from environment api_version = os.getenv("API_VERSION", "v1") @@ -462,7 +404,7 @@ ingestor = ingestor.extract(...).ingest() ### Backward Compatibility **V1 clients continue to work:** -- Still route to `/v1/submit_job` and `/v1/fetch_job` (refer to the [HTTP API Reference](#http-api-reference) for all V1/V2 paths) +- Still route to `/v1/submit_job` and `/v1/fetch_job` - No changes required - No splitting occurs @@ -473,7 +415,7 @@ ingestor = ingestor.extract(...).ingest() --- -**HTTP status codes:** +**HTTP status codes:** | Code | Meaning | Action | |------|---------|--------| @@ -526,17 +468,17 @@ WARNING: Client requested split_page_count=1000; clamped to 128 ### Key Files -**Server Implementation (this repo: `nv_ingest`, refer to the [NeMo-Retriever](https://github.com/NVIDIA/NeMo-Retriever.git) for client):** +**Server Implementation:** - `src/nv_ingest/api/v2/ingest.py` - V2 endpoints - `src/nv_ingest/framework/util/service/impl/ingest/redis_ingest_service.py` - Redis state management **Client Implementation:** -- `client/src/nemo_retriever/client/interface.py` - Ingestor class -- `client/src/nemo_retriever/util/util.py` - Configuration utilities -- `client/src/nemo_retriever/client/ingest_job_handler.py` - Job handling +- `client/src/nv_ingest_client/client/interface.py` - Ingestor class +- `client/src/nv_ingest_client/util/util.py` - Configuration utilities +- `client/src/nv_ingest_client/client/ingest_job_handler.py` - Job handling **Schemas:** -- `api/src/nemo_retriever/internal/schemas/meta/ingest_job_schema.py` - PdfConfigSchema +- `api/src/nv_ingest_api/internal/schemas/meta/ingest_job_schema.py` - PdfConfigSchema --- diff --git a/docs/docs/extraction/vlm-embed.md b/docs/docs/extraction/vlm-embed.md index 331379ab3..3ffe2b7c0 100644 --- a/docs/docs/extraction/vlm-embed.md +++ b/docs/docs/extraction/vlm-embed.md @@ -1,27 +1,28 @@ # Use Multimodal Embedding with NeMo Retriever Library -This guide explains how to use the [NeMo Retriever Library](https://www.perplexity.ai/search/overview.md) with the multimodal embedding model [Llama Nemotron Embed VL 1B v2](https://build.nvidia.com/nvidia/llama-nemotron-embed-vl-1b-v2). +This documentation describes how to use [NeMo Retriever Library](overview.md) +with the multimodal embedding model [Llama 3.2 NeMo Retriever Multimodal Embedding 1B](https://build.nvidia.com/nvidia/llama-3_2-nemoretriever-1b-vlm-embed-v1). -The `Llama Nemotron Embed VL 1B v2` model is optimized for multimodal question-answering and retrieval tasks. -It can embed documents as text, images, or paired text-image combinations. -These embeddings enable retrieving relevant documents based on a text query. -The model supports three embedding modalities: `text`, `image`, and `text_image`. +The `Llama 3.2 NeMo Retriever Multimodal Embedding 1B` model is optimized for multimodal question-answering retrieval. +The model can embed documents in the form of an image, text, or a combination of image and text. +Documents can then be retrieved given a user query in text form. +The model supports images that contain text, tables, charts, and infographics. !!! note - NVIDIA Ingest (nv-ingest) has been renamed to the NeMo Retriever Library. + NeMo Retriever Library is also known as NVIDIA Ingest. ## Configure and Run the Multimodal NIM Use the following procedure to configure and run the multimodal embedding NIM locally. -1. Configure the embedding model in your `.env` file. This instructs the NeMo Retriever Library to use the Llama Nemotron Embed VL model instead of the default text-only model. +1. Set the embedding model in your .env file. This tells NeMo Retriever Library to use the Llama 3.2 Multimodal model instead of the default text-only embedding model. ``` - EMBEDDING_IMAGE=nvcr.io/nim/nvidia/llama-nemotron-embed-vl-1b-v2 - EMBEDDING_TAG=1.12.0 - EMBEDDING_NIM_MODEL_NAME=nvidia/llama-nemotron-embed-vl-1b-v2 + EMBEDDING_IMAGE=nvcr.io/nvidia/nemo-microservices/llama-3.2-nemoretriever-1b-vlm-embed-v1 + EMBEDDING_TAG=1.7.0 + EMBEDDING_NIM_MODEL_NAME=nvidia/llama-3.2-nemoretriever-1b-vlm-embed-v1 ``` 2. Start the NeMo Retriever Library services. The multimodal embedding service is included by default. @@ -32,32 +33,13 @@ Use the following procedure to configure and run the multimodal embedding NIM lo After the services are running, you can interact with the extraction pipeline by using Python. -The key to using the multimodal model effectively is configuring the `extract` and `embed` methods to handle different content types with the correct modality. +The key to leveraging the multimodal model is +to configure the `extract` and `embed` methods to process different content types as either text or images. -## Supported Modalities +## Example with Default Text-Based Embedding -The multimodal embedding model supports three modalities: - -- **`text`** – Embeds content as plain text. This is the default modality and provides a strong baseline for retrieval. -- **`image`** – Embeds content as an image, capturing visual and spatial layout details that are helpful for tables, charts, and infographics. -- **`text_image`** – Embeds paired text and image together, combining the semantic depth of text with the visual context of an image for higher retrieval quality. - - -## Per-Element Modality Control - -You can apply different modalities to various content types by passing per-element modality parameters to the embed method: - -- **`text_elements_modality`** – Specifies the modality for text elements (default: "text"). -- **`structured_elements_modality`** – Specifies the modality for tables and charts (default: "text"). -- **`image_elements_modality`** – Specifies the modality for images, including page images (default: "text"). - -This configuration lets you, for example, embed plain text as text while embedding tables as images or as combined text and image. - - -## Example 1: Default Text-Based Embedding - -By default, when you use the multimodal model, all extracted content—such as text, tables, and charts—is processed as plain text. +When you use the multimodal model, by default, all extracted content (text, tables, charts) is treated as plain text. The following example provides a strong baseline for retrieval. - The `extract` method is configured to pull out text, tables, and charts. @@ -79,9 +61,9 @@ results = ingestor.ingest() ``` -## Example 2: Structured Elements as Images +## Example with Embedding Structured Elements as Images -It is common to process PDFs by embedding regular text as text and embedding visual elements, such as tables and charts, as images. +It is common to process PDFs by embedding standard text as text, and embed visual elements like tables and charts as images. The following example enables the multimodal model to capture the spatial and structural information of the visual content. - The `extract` method is configured to pull out text, tables, and charts. @@ -105,39 +87,18 @@ results = ingestor.ingest() ``` -## Example 3: Structured Elements as Text+Image Pairs - -For the highest-quality retrieval of tables and charts, embed them as paired text and image. -This approach combines the extracted table text with the rendered table image, giving the model both semantic and visual context. +## Example with Embedding Entire PDF Pages as Images -- The `extract` method is configured to capture text, tables, and charts. -- The embed method is configured with `structured_elements_modality="text_image"` so that tables and charts are embedded as paired text and image. +For documents where the entire page layout is important (such as infographics, complex diagrams, or forms), +you can configure NeMo Retriever Library to treat every page as a single image. +The following example extracts and embeds each page as an image. -```python -ingestor = ( - Ingestor() - .files("./data/*.pdf") - .extract( - extract_text=True, - extract_tables=True, - extract_charts=True, - extract_images=False, - ) - .embed( - structured_elements_modality="text_image", - ) -) -results = ingestor.ingest() -``` - - -## Example 4: Full Page as Image +!!! note -For documents where the full page layout matters (such as infographics, complex diagrams, or forms), you can configure NeMo Retriever Library to treat each page as a single image. -In the following example, every page is extracted and embedded as an image. + The `extract_page_as_image` feature is experimental. Its behavior may change in future releases. -- The `extract` method uses `extract_page_as_image=True`, with all other extraction options set to `False`. -- The `embed` method then processes these page images with `image_elements_modality="image"`. +- The `extract method` uses the `extract_page_as_image=True` parameter. All other extraction types are set to `False`. +- The `embed method` processes the page images. ```python ingestor = ( @@ -157,37 +118,9 @@ ingestor = ( results = ingestor.ingest() ``` - -## Example 5: Full Page as Text+Image - -For the best retrieval quality on full-page content, you can embed each page as a paired text and image. -When `image_elements_modality="text_image"` is set, the pipeline automatically aggregates the text content from each page and pairs it with the page image for joint embedding. - -- The `extract` method extracts both page images and text content, aggregating the text and pairing it with the corresponding page image. -- The `embed` method processes the page images with `image_elements_modality="text_image"`. - -```python -ingestor = ( - Ingestor() - .files("./data/*.pdf") - .extract( - extract_text=True, - extract_tables=True, - extract_charts=True, - extract_infographics=True, - extract_images=False, - extract_page_as_image=True, - ) - .embed( - image_elements_modality="text_image", - ) -) -results = ingestor.ingest() -``` - ## Related Topics - [Support Matrix](support-matrix.md) -- [Troubleshoot NeMo Retriever Library](troubleshoot.md) -- [Use the NeMo Retriever Library Python API](python-api-reference.md) -- [Extract Captions from Images](python-api-reference.md#extract-captions-from-images) +- [Troubleshoot Nemo Retriever Extraction](troubleshoot.md) +- [Use the Python API](nv-ingest-python-api.md) +- [Extract Captions from Images](nv-ingest-python-api.md#extract-captions-from-images) diff --git a/docs/docs/index.md b/docs/docs/index.md index e9eaac7f8..32d7b1acd 100644 --- a/docs/docs/index.md +++ b/docs/docs/index.md @@ -1,13 +1,13 @@ -# What is NVIDIA NeMo Retriever Library? +# What is NVIDIA NeMo Retriever? -NVIDIA NeMo Retriever Library is a collection of microservices +NVIDIA NeMo Retriever is a collection of microservices for building and scaling multimodal data extraction, embedding, and reranking pipelines with high accuracy and maximum data privacy – built with NVIDIA NIM. -NeMo Retriever Library, part of the [NVIDIA NeMo](https://www.nvidia.com/en-us/ai-data-science/products/nemo/) software suite for managing the AI agent lifecycle, +NeMo Retriever, part of the [NVIDIA NeMo](https://www.nvidia.com/en-us/ai-data-science/products/nemo/) software suite for managing the AI agent lifecycle, ensures data privacy and seamlessly connects to proprietary data wherever it resides, empowering secure, enterprise-grade retrieval. -NeMo Retriever Library provides the following: +NeMo Retriever provides the following: - **Multimodal Data Extraction** — Quickly extract documents at scale that include text, tables, charts, and infographics. - **Embedding + Indexing** — Embed all extracted text from text chunks and images, and then insert into LanceDB (default) or Milvus — accelerated with NVIDIA cuVS. @@ -19,31 +19,31 @@ NeMo Retriever Library provides the following: ## Enterprise-Ready Features -NVIDIA NeMo Retriever Library comes with enterprise-ready features, including the following: +NVIDIA NeMo Retriever comes with enterprise-ready features, including the following: -- **High Accuracy** — NeMo Retriever Library exhibits a high level of accuracy when retrieving across various modalities through enterprise documents. -- **High Throughput** — NeMo Retriever Library is capable of extracting, embedding, indexing and retrieving across hundreds of thousands of documents at scale with high throughput. -- **Decomposable/Customizable** — NeMo Retriever Library consists of modules that can be separately used and deployed in your own environment. -- **Enterprise-Grade Security** — NeMo Retriever Library NIMs come with security features such as the use of [safetensors](https://huggingface.co/docs/safetensors/index), continuous patching of CVEs, and more. +- **High Accuracy** — NeMo Retriever exhibits a high level of accuracy when retrieving across various modalities through enterprise documents. +- **High Throughput** — NeMo Retriever is capable of extracting, embedding, indexing and retrieving across hundreds of thousands of documents at scale with high throughput. +- **Decomposable/Customizable** — NeMo Retriever consists of modules that can be separately used and deployed in your own environment. +- **Enterprise-Grade Security** — NeMo Retriever NIMs come with security features such as the use of [safetensors](https://huggingface.co/docs/safetensors/index), continuous patching of CVEs, and more. ## Applications -The following are some applications that use NVIDIA NeMo Retriever Library: +The following are some applications that use NVIDIA Nemo Retriever: - [AI Virtual Assistant for Customer Service](https://github.com/NVIDIA-AI-Blueprints/ai-virtual-assistant) (NVIDIA AI Blueprint) - [Build an Enterprise RAG pipeline](https://build.nvidia.com/nvidia/build-an-enterprise-rag-pipeline/blueprintcard) (NVIDIA AI Blueprint) - [Building Code Documentation Agents with CrewAI](https://github.com/crewAIInc/nvidia-demo) (CrewAI Demo) - [Digital Human for Customer Service](https://github.com/NVIDIA-AI-Blueprints/digital-human) (NVIDIA AI Blueprint) -- [Document Research Assistant for Blog Creation](https://developers.llamaindex.ai/python/examples/agent/nvidia_document_research_assistant_for_blog_creation/) (LlamaIndex) +- [Document Research Assistant for Blog Creation](https://github.com/run-llama/llama_index/blob/main/docs/docs/examples/agent/nvidia_document_research_assistant_for_blog_creation.ipynb) (LlamaIndex Jupyter Notebook) - [Video Search and Summarization](https://github.com/NVIDIA-AI-Blueprints/video-search-and-summarization) (NVIDIA AI Blueprint) ## Related Topics -- [NeMo Retriever Library Text Embedding NIM](https://docs.nvidia.com/nim/nemo-retriever/text-embedding/latest/overview.html) -- [NeMo Retriever Library Text Reranking NIM](https://docs.nvidia.com/nim/nemo-retriever/text-reranking/latest/overview.html) +- [NeMo Retriever Text Embedding NIM](https://docs.nvidia.com/nim/nemo-retriever/text-embedding/latest/overview.html) +- [NeMo Retriever Text Reranking NIM](https://docs.nvidia.com/nim/nemo-retriever/text-reranking/latest/overview.html) - [NVIDIA NIM for Object Detection](https://docs.nvidia.com/nim/ingestion/object-detection/latest/overview.html) -- [NVIDIA NIM for Image OCR](https://docs.nvidia.com/nim/ingestion/image-ocr/latest/overview.html) +- [NVIDIA NIM for Image OCR](https://docs.nvidia.com/nim/ingestion/table-extraction/latest/overview.html) diff --git a/docs/mkdocs.yml b/docs/mkdocs.yml index 36cf26dd2..678ae4cfa 100644 --- a/docs/mkdocs.yml +++ b/docs/mkdocs.yml @@ -58,7 +58,7 @@ nav: - NeMo Retriever: - Overview: - Overview: index.md - - NeMo Retriever Library: + - NeMo Retriever Extraction: - Overview: extraction/overview.md - Release Notes: extraction/releasenotes-nv-ingest.md - Get Started: From 22d58bfea16d063697c96b8a2ca2b990d3d30f99 Mon Sep 17 00:00:00 2001 From: Kurt Heiss Date: Thu, 19 Mar 2026 13:22:39 -0700 Subject: [PATCH 43/94] =?UTF-8?q?Confirmed=20product=20naming=20of=20NeMo?= =?UTF-8?q?=20Retriever=20Library=20in=20files=20and=20code=20=E2=80=A6=20?= =?UTF-8?q?(#1664)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/docs/extraction/benchmarking.md | 2 +- docs/docs/extraction/contributing.md | 4 ---- 2 files changed, 1 insertion(+), 5 deletions(-) delete mode 100644 docs/docs/extraction/contributing.md diff --git a/docs/docs/extraction/benchmarking.md b/docs/docs/extraction/benchmarking.md index 0f8cd81d9..30488fa60 100644 --- a/docs/docs/extraction/benchmarking.md +++ b/docs/docs/extraction/benchmarking.md @@ -1,4 +1,4 @@ -# nv-ingest Integration Testing Framework +# NV-Ingest Integration Testing Framework A configurable, dataset-agnostic testing framework for end-to-end validation of nv-ingest pipelines. This framework uses structured YAML configuration for type safety, validation, and parameter management. diff --git a/docs/docs/extraction/contributing.md b/docs/docs/extraction/contributing.md deleted file mode 100644 index 6a136c218..000000000 --- a/docs/docs/extraction/contributing.md +++ /dev/null @@ -1,4 +0,0 @@ -# Contributing to NV-Ingest - -External contributions to NV-Ingest will be welcome soon, and they are greatly appreciated! -For more information, refer to [Contributing to NV-Ingest](https://github.com/NVIDIA/nv-ingest/blob/main/CONTRIBUTING.md). From 17e0148447c88b043c165999ec32a4cdbcbc393d Mon Sep 17 00:00:00 2001 From: Kurt Heiss Date: Fri, 20 Mar 2026 11:02:40 -0700 Subject: [PATCH 44/94] update helm file (#1679) fixed link per Sohail's comment --- docs/docs/extraction/helm.md | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/docs/docs/extraction/helm.md b/docs/docs/extraction/helm.md index 1a6e885a3..0983a382e 100644 --- a/docs/docs/extraction/helm.md +++ b/docs/docs/extraction/helm.md @@ -1,6 +1,9 @@ + + # Deploy With Helm for NeMo Retriever Library - +To deploy [NeMo Retriever Library](overview.md) by using Helm, refer to [NV-Ingest Helm Charts](https://github.com/NVIDIA/NeMo-Retriever/blob/26.03/helm/README.md). -To deploy [NeMo Retriever Library](overview.md) by using Helm, -refer to [NV-Ingest Helm Charts](https://github.com/NVIDIA/nv-ingest/blob/release/26.1.2/helm/README.md). +!!! note "Air-gapped environments" + + For deploying in an air-gapped environment, refer to the [NVIDIA NIM Operator documentation on Air-Gapped Environments](https://docs.nvidia.com/nim-operator/latest/air-gap.html), which explains how to deploy NIMs when your cluster has no internet or NGC registry access. From 3d4fdaeee1f25acaea5dd5f6d9afa3221853eeab Mon Sep 17 00:00:00 2001 From: Kurt Heiss Date: Mon, 23 Mar 2026 08:35:08 -0700 Subject: [PATCH 45/94] updated quickstart to current version following reversion (#1683) --- docs/docs/extraction/quickstart-guide.md | 51 ++++++------------------ 1 file changed, 13 insertions(+), 38 deletions(-) diff --git a/docs/docs/extraction/quickstart-guide.md b/docs/docs/extraction/quickstart-guide.md index 6f7ab7194..217fbbed1 100644 --- a/docs/docs/extraction/quickstart-guide.md +++ b/docs/docs/extraction/quickstart-guide.md @@ -101,43 +101,7 @@ h. Run the command `docker ps`. You should see output similar to the following. 3403c5a0e7be redis/redis-stack "/entrypoint.sh" 7 minutes ago Up 7 minutes 0.0.0.0:6379... nv-ingest-redis-1 ``` - -## Step 2: Install Python Dependencies - -You can interact with the service from the host, or by using `docker exec` to run commands in the runtime container. - -To interact from the host, you'll need a Python environment that has the client dependencies installed. - -``` -uv venv --python 3.12 nv-ingest-dev -source nv-ingest-dev/bin/activate -uv pip install nv-ingest==26.1.2 nv-ingest-api==26.1.2 nv-ingest-client==26.1.2 -``` - -!!! tip - - To confirm that you have activated your virtual environment, run `which pip` and `which python`, and confirm that you see `nvingest` in the result. You can do this before any pip or python command that you run. - - -!!! note - -Interaction from the host requires the appropriate port to be exposed from the runtime container, as defined in the `docker-compose.yaml` file. If you prefer, you can disable this port and interact directly with the service from within its container. - -To work inside the container, run the following code. - -```bash -docker exec -it nv-ingest-nv-ingest-ms-runtime-1 bash -``` -This command opens a shell in the `/workspace` directory, where the `DATASET_ROOT` from your `.env` file is mounted at `./data`. The pre-created `nv_ingest_runtime` virtual environment includes all necessary Python client libraries. You should see a prompt similar to the following. - -```bash -(nv_ingest_runtime) root@your-computer-name:/workspace# -``` -From this prompt, you can run the CLI and Python examples. - -Because many service URIs default to localhost, running inside the runtime container also requires that you specify URIs manually so that services can communicate across containers on the internal Docker network. When using Milvus, see the example following for how to set the `milvus_uri`. With the default LanceDB backend, no extra URI configuration is needed. - -## Step 3: Ingest Documents +## Step 2: Ingest Documents You can submit jobs programmatically in Python or using the [CLI](nv-ingest_cli.md). @@ -358,7 +322,7 @@ INFO:nv_ingest_client.cli.util.processing:Throughput (Pages/sec): 1.28 INFO:nv_ingest_client.cli.util.processing:Throughput (Files/sec): 0.43 ``` -## Step 4: Inspecting and Consuming Results +## Step 3: Inspecting and Consuming Results After the ingestion steps above have been completed, you should be able to find the `text` and `image` subfolders inside your processed docs folder. Each will contain JSON-formatted extracted content and metadata. @@ -430,6 +394,17 @@ You can specify multiple `--profile` options. | `vlm` | Advanced | Use [llama 3.1 Nemotron 8B Vision](https://build.nvidia.com/nvidia/llama-3.1-nemotron-nano-vl-8b-v1/modelcard) for image captioning of unstructured images and infographics. This profile enables the `caption` method in the Python API to generate text descriptions of visual content. For more information, refer to [Use Multimodal Embedding](vlm-embed.md) and [Extract Captions from Images](nv-ingest-python-api.md#extract-captions-from-images). | +## Air-Gapped Deployment (Docker Compose) + +When deploying in an air-gapped environment (no internet or NGC registry access), you must pre-stage container images on a machine with network access, then transfer and load them in the isolated environment. + +1. On a machine with network access: Clone the repo, authenticate with NGC (`docker login nvcr.io`), and pull all images used by your chosen profile (for example, `docker compose --profile retrieval pull`). +2. Save images: Export the images to archives (for example, using `docker save` for each image or a script that saves all images referenced by your [docker-compose.yaml](https://github.com/NVIDIA/NeMo-Retriever/blob/main/docker-compose.yaml)). +3. Transfer the image archives and your `docker-compose.yaml` (and `.env` if used) to the air-gapped system. +4. On the air-gapped machine: Load the images (`docker load -i `) and start the stack with the same profile (for example, `docker compose --profile retrieval up`). + +Ensure the same image tags and `docker-compose.yaml` version are used in both environments so that service configuration stays consistent. + ## Docker Compose override files The default [docker-compose.yaml](https://github.com/NVIDIA/nv-ingest/blob/main/docker-compose.yaml) might exceed VRAM on a single GPU for some hardware. Override files reduce per-service memory, batch sizes, or concurrency so the full pipeline can run on the available GPU. To use an override, pass a second `-f` file after the base compose file; Docker Compose merges them and the override takes precedence. From b1f56bb432212275a0de83b7ec064b025dc615c5 Mon Sep 17 00:00:00 2001 From: Kurt Heiss Date: Mon, 23 Mar 2026 08:36:39 -0700 Subject: [PATCH 46/94] Kheiss/quickstart lib mode update (#1682) --- .../extraction/quickstart-library-mode.md | 482 +----------------- 1 file changed, 1 insertion(+), 481 deletions(-) diff --git a/docs/docs/extraction/quickstart-library-mode.md b/docs/docs/extraction/quickstart-library-mode.md index c027e6a0d..a3ecbf867 100644 --- a/docs/docs/extraction/quickstart-library-mode.md +++ b/docs/docs/extraction/quickstart-library-mode.md @@ -1,487 +1,7 @@ # Deploy Without Containers (Library Mode) for NeMo Retriever Library -[NeMo Retriever Library](overview.md) is typically deployed as a cluster of containers for robust, scalable production use. - !!! note NeMo Retriever Library is also known as NVIDIA Ingest. -In addition, you can use library mode, which is intended for the following cases: - -- Local development -- Experimentation and testing -- Small-scale workloads, such as workloads of fewer than 100 documents - - -By default, library mode depends on NIMs that are hosted on build.nvidia.com. -In library mode you launch the main pipeline service directly within a Python process, -while all other services (such as embedding and storage) are hosted remotely in the cloud. - -To get started using library mode, you need the following: - -- Linux operating systems (Ubuntu 22.04 or later recommended) or MacOS -- Python 3.12 -- We strongly advise using an isolated Python virtual env with [uv](https://docs.astral.sh/uv/getting-started/installation/). - - - -## Step 1: Prepare Your Environment - -Use the following procedure to prepare your environment. - -1. Run the following code to create your NV Ingest Python environment. - - ``` - uv venv --python 3.12 nvingest && \ - source nvingest/bin/activate && \ - uv pip install nv-ingest==26.1.2 nv-ingest-api==26.1.2 nv-ingest-client==26.1.2 - ``` - - By default, the pipeline uses **LanceDB** as the vector database (no extra package required). To use **Milvus** (e.g. milvus-lite) instead, also install `milvus-lite==2.4.12` and pass `milvus_uri="milvus.db"` in `vdb_upload`. For details, see [Data Upload](data-store.md). - - !!! tip - - To confirm that you have activated your virtual environment, run `which python` and confirm that you see `nvingest` in the result. You can do this before any python command that you run. - -2. Set or create a .env file that contains your NVIDIA Build API key and other environment variables. - - !!! note - - If you have an NGC API key, you can use it here. For more information, refer to [Generate Your NGC Keys](ngc-api-key.md) and [Environment Configuration Variables](environment-config.md). - - - To set your variables, use the following code. - - ``` - export NVIDIA_API_KEY=nvapi- - ``` - - To add your variables to a .env file, include the following. - - ``` - NVIDIA_API_KEY=nvapi- - ``` - - -## Step 2: Ingest Documents - -You can submit jobs programmatically by using Python. - -!!! tip - - For more Python examples, refer to [NV-Ingest: Python Client Quick Start Guide](https://github.com/NVIDIA/nv-ingest/blob/main/client/client_examples/examples/python_client_usage.ipynb). - - -If you have a very high number of CPUs, and see the process hang without progress, -we recommend that you use `taskset` to limit the number of CPUs visible to the process. -Use the following code. - -``` -taskset -c 0-3 python your_ingestion_script.py -``` - -On a 4 CPU core low end laptop, the following code should take about 10 seconds. - -```python -import time - -from nv_ingest.framework.orchestration.ray.util.pipeline.pipeline_runners import run_pipeline -from nv_ingest_client.client import Ingestor, NvIngestClient -from nv_ingest_api.util.message_brokers.simple_message_broker import SimpleClient -from nv_ingest_client.util.process_json_files import ingest_json_results_to_blob - -def main(): - # Start the pipeline subprocess for library mode - run_pipeline(block=False, disable_dynamic_scaling=True, run_in_subprocess=True) - - client = NvIngestClient( - message_client_allocator=SimpleClient, - message_client_port=7671, - message_client_hostname="localhost", - ) - - # Optional: use Milvus (e.g. milvus-lite) by providing milvus_uri and installing milvus-lite. - # By default, LanceDB is used and no milvus_uri is needed. - # milvus_uri = "milvus.db" - collection_name = "test" - sparse = False - - # do content extraction from files - ingestor = ( - Ingestor(client=client) - .files("data/multimodal_test.pdf") - .extract( - extract_text=True, - extract_tables=True, - extract_charts=True, - extract_images=True, - table_output_format="markdown", - extract_infographics=True, - # extract_method="nemotron_parse", #Slower, but maximally accurate, especially for PDFs with pages that are scanned images - text_depth="page", - ) - .embed() - .vdb_upload( - collection_name=collection_name, - # milvus_uri=milvus_uri, # Uncomment to use Milvus instead of LanceDB - sparse=sparse, - # for llama-3.2 embedder, use 1024 for e5-v5 - dense_dim=2048, - ) - ) - - print("Starting ingestion..") - t0 = time.time() - - # Return both successes and failures - # Use for large batches where you want successful chunks/pages to be committed, while collecting detailed diagnostics for failures. - results, failures = ingestor.ingest(show_progress=True, return_failures=True) - - # Return only successes - # results = ingestor.ingest(show_progress=True) - - t1 = time.time() - print(f"Total time: {t1 - t0} seconds") - - # results blob is directly inspectable - if results: - print(ingest_json_results_to_blob(results[0])) - - # (optional) Review any failures that were returned - if failures: - print(f"There were {len(failures)} failures. Sample: {failures[0]}") - -if __name__ == "__main__": - main() -``` - -!!! note - - For advanced visual parsing with library mode, uncomment `extract_method="nemotron_parse"` in the previous code. For more information, refer to [Advanced Visual Parsing](nemoretriever-parse.md). - - -You can see the extracted text that represents the content of the ingested test document. - -```shell -Starting ingestion.. -Total time: 9.243880033493042 seconds - -TestingDocument -A sample document with headings and placeholder text -Introduction -This is a placeholder document that can be used for any purpose. It contains some -headings and some placeholder text to fill the space. The text is not important and contains -no real value, but it is useful for testing. Below, we will have some simple tables and charts -that we can use to confirm Ingest is working as expected. -Table 1 -This table describes some animals, and some activities they might be doing in specific -locations. -Animal Activity Place -Gira@e Driving a car At the beach -Lion Putting on sunscreen At the park -Cat Jumping onto a laptop In a home o@ice -Dog Chasing a squirrel In the front yard -Chart 1 -This chart shows some gadgets, and some very fictitious costs. - -... document extract continues ... -``` - -## Step 3: Query Ingested Content - -To query for relevant snippets of the ingested content, and use them with an LLM to generate answers, use the following code. With the default LanceDB backend, use the LanceDB retrieval API (see [Data Upload](data-store.md)). The example below shows retrieval when using Milvus (e.g. milvus-lite). - -```python -import os -from openai import OpenAI -from nv_ingest_client.util.milvus import nvingest_retrieval - -# Only needed when using Milvus (e.g. milvus-lite) instead of LanceDB -milvus_uri = "milvus.db" -collection_name = "test" -sparse = False - -queries = ["Which animal is responsible for the typos?"] - -retrieved_docs = nvingest_retrieval( - queries, - collection_name, - milvus_uri=milvus_uri, - hybrid=sparse, - top_k=1, -) - -# simple generation example -extract = retrieved_docs[0][0]["entity"]["text"] -client = OpenAI( - base_url = "https://integrate.api.nvidia.com/v1", - api_key = os.environ["NVIDIA_API_KEY"] -) - -prompt = f"Using the following content: {extract}\n\n Answer the user query: {queries[0]}" -print(f"Prompt: {prompt}") -completion = client.chat.completions.create( - model="nvidia/llama-3.1-nemotron-nano-vl-8b-v1", - messages=[{"role":"user","content": prompt}], -) -response = completion.choices[0].message.content - -print(f"Answer: {response}") -``` - -```shell -Prompt: Using the following content: Table 1 -| This table describes some animals, and some activities they might be doing in specific locations. | This table describes some animals, and some activities they might be doing in specific locations. | This table describes some animals, and some activities they might be doing in specific locations. | -| Animal | Activity | Place | -| Giraffe | Driving a car | At the beach | -| Lion | Putting on sunscreen | At the park | -| Cat | Jumping onto a laptop | In a home office | -| Dog | Chasing a squirrel | In the front yard | - - Answer the user query: Which animal is responsible for the typos? -Answer: A clever query! - -Based on the provided Table 1, I'd make an educated inference to answer your question. Since the activities listed are quite unconventional for the respective animals (e.g., a giraffe driving a car, a lion putting on sunscreen), it's likely that the table is using humor or hypothetical scenarios. - -Given this context, the question "Which animal is responsible for the typos?" is probably a tongue-in-cheek inquiry, as there's no direct information in the table about typos or typing activities. - -However, if we were to make a playful connection, we could look for an animal that's: - -1. Typically found in a setting where typing might occur (e.g., an office). -2. Engaging in an activity that could potentially lead to typos (e.g., interacting with a typing device). - -Based on these loose criteria, I'd jokingly point to: - -**Cat** as the potential culprit, since it's: - * Located "In a home office" - * Engaged in "Jumping onto a laptop", which could theoretically lead to accidental keystrokes or typos if the cat were to start "walking" on the keyboard! - -Please keep in mind that this response is purely humorous and interpretative, as the table doesn't explicitly mention typos or provide a straightforward answer to the question. -``` - - - -## Logging Configuration - -Nemo Retriever extraction uses [Ray](https://docs.ray.io/en/latest/index.html) for logging. -For details, refer to [Configure Ray Logging](ray-logging.md). - -By default, library mode runs in quiet mode to minimize startup noise. -Quiet mode automatically configures the following environment variables. - -| Variable | Quiet Mode Value | Description | -|--------------------------------------|------------------|-------------| -| `INGEST_RAY_LOG_LEVEL` | `PRODUCTION` | Sets Ray logging to ERROR level to reduce noise. | -| `RAY_ACCEL_ENV_VAR_OVERRIDE_ON_ZERO` | `0` | Silences Ray accelerator warnings | -| `OTEL_SDK_DISABLED` | `true` | Disables OpenTelemetry trace export errors | - - -If you want to see detailed startup logs for debugging, use one of the following options: - -- Set `quiet=False` when you run the pipeline as shown following. - - ```python - run_pipeline(block=False, disable_dynamic_scaling=True, run_in_subprocess=True, quiet=False) - ``` - -- Set the environment variables manually before you run the pipeline as shown following. - - ```bash - export INGEST_RAY_LOG_LEVEL=DEVELOPMENT # or DEBUG for maximum verbosity - ``` - - - -## Library Mode Communication and Advanced Examples - -Communication in library mode is handled through a simplified, 3-way handshake message broker called `SimpleBroker`. - -Attempting to run a library-mode process co-located with a Docker Compose deployment does not work by default. -The Docker Compose deployment typically creates a firewall rule or port mapping that captures traffic to port `7671`, -which prevents the `SimpleBroker` from receiving messages. -Always ensure that you use library mode in isolation, without an active containerized deployment listening on the same port. - - -### Example `launch_libmode_service.py` - -This example launches the pipeline service in a subprocess, -and keeps it running until it is interrupted (for example, by pressing `Ctrl+C`). -It listens for ingestion requests on port `7671` from an external client. - -```python -import logging -import os - -from nv_ingest.framework.orchestration.ray.util.pipeline.pipeline_runners import run_pipeline -from nv_ingest_api.util.logging.configuration import configure_logging as configure_local_logging - -# Configure the logger -logger = logging.getLogger(__name__) - -local_log_level = os.getenv("INGEST_LOG_LEVEL", "DEFAULT") -if local_log_level in ("DEFAULT",): - local_log_level = "INFO" - -configure_local_logging(local_log_level) - - -def main(): - """ - Launch the libmode pipeline service using the embedded default configuration. - """ - try: - # Start pipeline and block until interrupted - # Note: stdout/stderr cannot be passed when run_in_subprocess=True (not picklable) - # Use quiet=False to see verbose startup logs - _ = run_pipeline( - block=True, - disable_dynamic_scaling=True, - run_in_subprocess=True, - ) - except KeyboardInterrupt: - logger.info("Keyboard interrupt received. Shutting down...") - except Exception as e: - logger.error(f"An unexpected error occurred: {e}", exc_info=True) - - -if __name__ == "__main__": - main() -``` - -### Example `launch_libmode_and_run_ingestor.py` - -This example starts the pipeline service in-process, -and immediately runs an ingestion client against it in the same parent process. - -```python -import logging -import os -import time - -from nv_ingest.framework.orchestration.ray.util.pipeline.pipeline_runners import run_pipeline -from nv_ingest_api.util.logging.configuration import configure_logging as configure_local_logging -from nv_ingest_api.util.message_brokers.simple_message_broker import SimpleClient -from nv_ingest_client.client import Ingestor -from nv_ingest_client.client import NvIngestClient - -# Configure the logger -logger = logging.getLogger(__name__) - -local_log_level = os.getenv("INGEST_LOG_LEVEL", "INFO") -if local_log_level in ("DEFAULT",): - local_log_level = "INFO" - -configure_local_logging(local_log_level) - - -def run_ingestor(): - """ - Set up and run the ingestion process to send traffic against the pipeline. - """ - logger.info("Setting up Ingestor client...") - client = NvIngestClient( - message_client_allocator=SimpleClient, message_client_port=7671, message_client_hostname="localhost" - ) - - ingestor = ( - Ingestor(client=client) - .files("./data/multimodal_test.pdf") - .extract( - extract_text=True, - extract_tables=True, - extract_charts=True, - extract_images=True, - table_output_format="markdown", - extract_infographics=False, - text_depth="page", - ) - .split(chunk_size=1024, chunk_overlap=150) - .embed() - ) - - try: - results, _ = ingestor.ingest(show_progress=False, return_failures=True) - logger.info("Ingestion completed successfully.") - except Exception as e: - logger.error(f"Ingestion failed: {e}") - raise - - print("\nIngest done.") - print(f"Got {len(results)} results.") - - -def main(): - """ - Launch the libmode pipeline service and run the ingestor against it. - Uses the embedded default libmode pipeline configuration. - """ - pipeline = None - try: - # Start pipeline in subprocess - # Note: stdout/stderr cannot be passed when run_in_subprocess=True (not picklable) - # Use quiet=False to see verbose startup logs - pipeline = run_pipeline( - block=False, - disable_dynamic_scaling=True, - run_in_subprocess=True, - ) - time.sleep(10) - run_ingestor() - # Run other code... - except KeyboardInterrupt: - logger.info("Keyboard interrupt received. Shutting down...") - except Exception as e: - logger.error(f"Error running pipeline: {e}") - finally: - if pipeline: - pipeline.stop() - logger.info("Shutting down pipeline...") - - -if __name__ == "__main__": - main() -``` - - - -## The `run_pipeline` Function Reference - -The `run_pipeline` function is the main entry point to start the Nemo Retriever Extraction pipeline. -It can run in-process or as a subprocess. - -The `run_pipeline` function accepts the following parameters. - -| Parameter | Type | Default | Required? | Description | -|--------------------------|------------------------|---------|-----------|-------------------------------------------------| -| pipeline_config | PipelineConfigSchema | — | Yes | A configuration object that specifies how the pipeline should be constructed. | -| run_in_subprocess | bool | False | Yes | `True` to launch the pipeline in a separate Python subprocess. `False` to run in the current process. | -| block | bool | True | Yes | `True` to run the pipeline synchronously. The function returns after it finishes. `False` to return an interface for external pipeline control. | -| disable_dynamic_scaling | bool | None | No | `True` to disable autoscaling regardless of global settings. `None` to use the global default behavior. | -| dynamic_memory_threshold | float | None | No | A value between `0.0` and `1.0`. If dynamic scaling is enabled, triggers autoscaling when memory usage crosses this threshold. | -| stdout | TextIO | None | No | Redirect the subprocess `stdout` to a file or stream. If `None`, defaults to `/dev/null`. | -| stderr | TextIO | None | No | Redirect subprocess `stderr` to a file or stream. If `None`, defaults to `/dev/null`. | -| libmode | bool | True | No | `True` to load the default library mode pipeline configuration when `ingest_config` is `None`. | -| quiet | bool | None | No | `True` to suppress verbose startup logs (PRODUCTION preset). `None` defaults to `True` when `libmode=True`. Set to `False` for verbose output. | - - -The `run_pipeline` function returns the following values, depending on the parameters that you set: - -- **run_in_subprocess=False and block=True** — The function returns a `float` that represents the elapsed time in seconds. -- **run_in_subprocess=False and block=False** — The function returns a `RayPipelineInterface` object. -- **run_in_subprocess=True and block=True** — The function returns `0.0`. -- **run_in_subprocess=True and block=False** — The function returns a `RayPipelineInterface` object. - - -The `run_pipeline` throws the following errors: - -- **RuntimeError** — A subprocess failed to start, or exited with error. -- **Exception** — Any other failure during pipeline setup or execution. - - - -## Related Topics - -- [Prerequisites](prerequisites.md) -- [Support Matrix](support-matrix.md) -- [Deploy With Docker Compose (Self-Hosted)](quickstart-guide.md) -- [Deploy With Helm](helm.md) -- [Notebooks](notebooks.md) -- [Enterprise RAG Blueprint](https://build.nvidia.com/nvidia/multimodal-pdf-data-extraction-for-enterprise-rag) +Use the [Quick Start for NeMo Retriever Library](https://github.com/NVIDIA/NeMo-Retriever/blob/26.03/nemo_retriever/README.md) to set up and run the NeMo Retriever Library locally, so you can build a GPU‑accelerated, multimodal RAG ingestion pipeline that parses PDFs, HTML, text, audio, and video into LanceDB vector embeddings, integrates with Nemotron RAG models (locally or via NIM endpoints), which includes Ray‑based scaling with built‑in recall evaluation. \ No newline at end of file From 19e77e11cbf99ca3c9abe568cc4c7b8856a2540b Mon Sep 17 00:00:00 2001 From: Kurt Heiss Date: Mon, 23 Mar 2026 08:44:07 -0700 Subject: [PATCH 47/94] Update RNs to current version (#1687) --- .../docs/extraction/releasenotes-nv-ingest.md | 93 ++++++------------- 1 file changed, 30 insertions(+), 63 deletions(-) diff --git a/docs/docs/extraction/releasenotes-nv-ingest.md b/docs/docs/extraction/releasenotes-nv-ingest.md index fb4b847f8..d3b71b4a5 100644 --- a/docs/docs/extraction/releasenotes-nv-ingest.md +++ b/docs/docs/extraction/releasenotes-nv-ingest.md @@ -4,68 +4,38 @@ This documentation contains the release notes for [NeMo Retriever Library](overv !!! note - NeMo Retriever Library is also known as NVIDIA Ingest. - - - -## Release 26.01 (26.1.2) - -The NeMo Retriever Library 26.01 release adds new hardware and software support, and other improvements. - -To upgrade the Helm Charts for this version, refer to [NV-Ingest Helm Charts](https://github.com/NVIDIA/nv-ingest/blob/release/26.1.2/helm/README.md). - - -### Highlights - -This release contains the following key changes: - -- Added functional support for [H200 NVL](https://www.nvidia.com/en-us/data-center/h200/). For details, refer to [Support Matrix](support-matrix.md). -- All Helm deployments for Kubernetes now use [NVIDIA NIM Operator](https://docs.nvidia.com/nim-operator/latest/index.html). For details, refer to [NV-Ingest Helm Charts](https://github.com/NVIDIA/nv-ingest/blob/release/26.1.2/helm/README.md). -- Updated RIVA NIM to version 1.4.0. For details, refer to [Extract Speech](audio.md). -- Updated VLM NIM to [nemotron-nano-12b-v2-vl](https://build.nvidia.com/nvidia/nemotron-nano-12b-v2-vl/modelcard). For details, refer to [Extract Captions from Images](nv-ingest-python-api.md#extract-captions-from-images). -- Added VLM caption prompt customization parameters, including reasoning control. For details, refer to [Caption Images and Control Reasoning](nv-ingest-python-api.md#caption-images-and-control-reasoning). -- Added support for the [nemotron-parse](https://build.nvidia.com/nvidia/nemotron-parse/modelcard) model which replaces the [nemoretriever-parse](https://build.nvidia.com/nvidia/nemoretriever-parse/modelcard) model. For details, refer to [Advanced Visual Parsing](nemoretriever-parse.md). -- Support is now deprecated for [paddleocr](https://build.nvidia.com/baidu/paddleocr/modelcard). -- The `meta-llama/Llama-3.2-1B` tokenizer is now pre-downloaded so that you can run token-based splitting without making a network request. For details, refer to [Split Documents](chunking.md). -- For scanned PDFs, added specialized extraction strategies. For details, refer to [PDF Extraction Strategies](nv-ingest-python-api.md#pdf-extraction-strategies). -- [LanceDB](https://lancedb.com/) is now the default vector database backend; Milvus remains fully supported. For details, refer to [Data Upload](data-store.md). -- The V2 API is now available and is the default processing pipeline. The response format remains backwards-compatible. You can enable the v2 API by using `message_client_kwargs={"api_version": "v2"}`.For details, refer to [API Reference](api-docs). -- Large PDFs are now automatically split into chunks and processed in parallel, delivering faster ingestion for long documents. For details, refer to [PDF Pre-Splitting](v2-api-guide.md). -- Issues maintaining extraction quality while processing very large files are now resolved with the V2 API. For details, refer to [V2 API Guide](v2-api-guide.md). -- Updated the embedding task to support embedding on custom content fields like the results of summarization functions. For details, refer to [Use the Python API](nv-ingest-python-api.md). -- User-defined function summarization is now using `nemotron-mini-4b-instruct` which provides significant speed improvements. For details, refer to [User-defined Functions](user-defined-functions.md) and [NV-Ingest UDF Examples](https://github.com/NVIDIA/nv-ingest/blob/release/26.1.2/examples/udfs/README.md). -- In the `Ingestor.extract` method, the defaults for `extract_text` and `extract_images` are now set to `true` for consistency with `extract_tables` and `extract_charts`. For details, refer to [Use the Python API](nv-ingest-python-api.md). -- The `table-structure` profile is no longer available. The table-structure profile is now part of the default profile. For details, refer to [Profile Information](quickstart-guide.md#profile-information). -- New documentation [Why Throughput Is Dataset-Dependent](throughput-is-dataset-dependent.md). -- New documentation [Add User-defined Stages](user-defined-stages.md). -- New documentation [Add User-defined Functions](user-defined-functions.md). -- New documentation [Resource Scaling Modes](scaling-modes.md). -- New documentation [NimClient Usage](nimclient.md). -- New documentation [Use the API (V2)](v2-api-guide.md). - - - -### Fixed Known Issues - -The following are the known issues that are fixed in this version: - -- A10G support is restored. To use A10G hardware, use release 26.1.2 or later. For details, refer to [Support Matrix](support-matrix.md). -- L40S support is restored. To use L40S hardware, use release 26.1.2 or later. For details, refer to [Support Matrix](support-matrix.md). -- The page number field in the content metadata now starts at 1 instead of 0 so each page number is no longer off by one from what you would expect. For details, refer to [Content Metadata](content-metadata.md). -- Support for batches that include individual files greater than approximately 400MB is restored. This includes audio files and pdfs. - - - -## All Known Issues - -The following are the known issues for NeMo Retriever Library: - -- Advanced visual parsing is not supported on RTX Pro 6000, B200, or H200 NVL. For details, refer to [Advanced Visual Parsing](advanced-visual-parsing.md) and [Support Matrix](support-matrix.md). -- The Page Elements NIM (`nemoretriever-page-elements-v3:1.7.0`) may intermittently fail during inference under high-concurrency workloads. This happens when Triton’s dynamic batching combines requests that exceed the model’s maximum batch size, a situation more commonly seen in multi-GPU setups or large ingestion runs. In these cases, extraction fails for the impacted documents. A correction is planned for `nemoretriever-page-elements-v3:1.7.1`. - + NVIDIA Ingest (nv-ingest) has been renamed to the NeMo Retriever Library. + +## 26.03 Release Notes (26.3.0) + +NVIDIA® NeMo Retriever Library version 26.03 adds broader hardware and software support along with many pipeline, evaluation, and deployment enhancements. + +To upgrade the Helm charts for this release, refer to the [NeMo Retriever Library Helm Charts](https://github.com/NVIDIA/NeMo-Retriever/blob/release/26.3.0/helm/README.md). + +Highlights for the 26.03 release include: + +- NV-Ingest GitHub repo renamed to NeMo-Retriever +- NeMo Retriever Extraction pipeline renamed to NeMo Retriever Library +- NeMo Retriever Library now supports two deployment options: + - A new no-container, pip-installable in-process library for development (available on PyPI) + - Existing production-ready Helm chart with NIMs +- Added documentation notes on Air-gapped deployment support +- Added documentation notes on OpenShift support +- Added support for RTX4500 Pro Blackwell SKU +- Added support for llama-nemotron-embed-vl-v2 in text and text+image modes +- New extract methods `pdfium_hybrid` and `ocr` target scanned PDFs to improve text and layout extraction from image-based pages +- VLM-based image caption enhancements: + - Infographics can be captioned + - Reasoning mode is configurable +- Enabled hybrid search with Lancedb +- Added retrieval_bench subfolder with generalizable agentic retrieval pipeline +- The project now uses UV as the primary environment and package manager instead of Conda, resulting in faster installs and simpler dependency handling +- Default Redis TTL increased from 1–2 hours to 48 hours so long-running jobs (e.g., VLM captioning) don’t expire before completion +- NeMo Retriever Library currently does not support image captioning via VLM; this feature will be added in the next release ## Release Notes for Previous Versions +| [26.1.2](https://docs.nvidia.com/nemo/retriever/26.1.2/extraction/releasenotes-nv-ingest/) | [26.1.1](https://docs.nvidia.com/nemo/retriever/26.1.1/extraction/releasenotes-nv-ingest/) | [25.9.0](https://docs.nvidia.com/nemo/retriever/25.9.0/extraction/releasenotes-nv-ingest/) | [25.6.3](https://docs.nvidia.com/nemo/retriever/25.6.3/extraction/releasenotes-nv-ingest/) @@ -74,13 +44,10 @@ The following are the known issues for NeMo Retriever Library: | [25.3.0](https://docs.nvidia.com/nemo/retriever/25.3.0/extraction/releasenotes-nv-ingest/) | [24.12.1](https://docs.nvidia.com/nemo/retriever/25.3.0/extraction/releasenotes-nv-ingest/) | [24.12.0](https://docs.nvidia.com/nemo/retriever/25.3.0/extraction/releasenotes-nv-ingest/) -| - - ## Related Topics - [Prerequisites](prerequisites.md) - [Deploy Without Containers (Library Mode)](quickstart-library-mode.md) - [Deploy With Docker Compose (Self-Hosted)](quickstart-guide.md) -- [Deploy With Helm](helm.md) +- [Deploy With Helm](helm.md) \ No newline at end of file From 0e0bebc489b109f4c002309f9358ca56e8c0d68d Mon Sep 17 00:00:00 2001 From: Kurt Heiss Date: Mon, 23 Mar 2026 09:03:15 -0700 Subject: [PATCH 48/94] Kheiss/update quickstart (#1688) Moved example per Sohail comment: kheiss-uwzoo:kheiss/update-quickstart --- docs/docs/extraction/quickstart-guide.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/docs/docs/extraction/quickstart-guide.md b/docs/docs/extraction/quickstart-guide.md index 217fbbed1..460a17355 100644 --- a/docs/docs/extraction/quickstart-guide.md +++ b/docs/docs/extraction/quickstart-guide.md @@ -393,6 +393,17 @@ You can specify multiple `--profile` options. | `nemotron-parse` | Advanced | Use [nemotron-parse](https://build.nvidia.com/nvidia/nemotron-parse), which adds state-of-the-art text and table extraction. For more information, refer to [Advanced Visual Parsing](nemoretriever-parse.md). | | `vlm` | Advanced | Use [llama 3.1 Nemotron 8B Vision](https://build.nvidia.com/nvidia/llama-3.1-nemotron-nano-vl-8b-v1/modelcard) for image captioning of unstructured images and infographics. This profile enables the `caption` method in the Python API to generate text descriptions of visual content. For more information, refer to [Use Multimodal Embedding](vlm-embed.md) and [Extract Captions from Images](nv-ingest-python-api.md#extract-captions-from-images). | +### Example: Using the VLM Profile for Infographic Captioning + +Infographics often combine text, charts, and diagrams into complex visuals. Vision-language model (VLM) captioning generates natural language descriptions that capture this complexity, making the content searchable and more accessible for downstream applications. + +To use VLM captioning for infographics, start NeMo Retriever Library with both the `retrieval` and `vlm` profiles by running the following code. +```shell +docker compose \ + -f docker-compose.yaml \ + --profile retrieval \ + --profile vlm up +``` ## Air-Gapped Deployment (Docker Compose) From 77cb39ac509ffd0efc42c710dff9863209e574cd Mon Sep 17 00:00:00 2001 From: Kurt Heiss Date: Mon, 23 Mar 2026 09:14:08 -0700 Subject: [PATCH 49/94] update reference diagram for overview (#1689) update overview diagram per Sohail : https://nvidia.slack.com/archives/D0AB0118N94/p1774281584685679 --- docs/docs/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs/index.md b/docs/docs/index.md index 32d7b1acd..0349ea38f 100644 --- a/docs/docs/index.md +++ b/docs/docs/index.md @@ -14,7 +14,7 @@ NeMo Retriever provides the following: - **Retrieval** — Leverage semantic + hybrid search for high accuracy retrieval with the embedding + reranking NIM microservice. -![Overview diagram](extraction/images/overview-retriever.png) +![Overview diagram](extraction/images/overview-extraction.png) ## Enterprise-Ready Features From 56c2c5149662800c0095f3464519d705f944bb7e Mon Sep 17 00:00:00 2001 From: Kurt Heiss Date: Mon, 23 Mar 2026 10:07:26 -0700 Subject: [PATCH 50/94] =?UTF-8?q?fixed=20reference=20information=20about?= =?UTF-8?q?=20name=20change=20from=20nv-ingest=20to=20NeMo=20=E2=80=A6=20(?= =?UTF-8?q?#1690)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contributing.md | 496 +++++++++++++++++- docs/docs/extraction/audio.md | 2 +- docs/docs/extraction/content-metadata.md | 2 +- docs/docs/extraction/data-store.md | 2 +- docs/docs/extraction/environment-config.md | 2 +- docs/docs/extraction/faq.md | 2 +- docs/docs/extraction/nemoretriever-parse.md | 2 +- docs/docs/extraction/nimclient.md | 2 +- docs/docs/extraction/notebooks.md | 2 +- docs/docs/extraction/nv-ingest-python-api.md | 2 +- docs/docs/extraction/overview.md | 2 +- docs/docs/extraction/prerequisites.md | 2 +- .../extraction/quickstart-library-mode.md | 2 +- docs/docs/extraction/scaling-modes.md | 2 +- docs/docs/extraction/support-matrix.md | 16 +- docs/docs/extraction/telemetry.md | 2 +- docs/docs/extraction/troubleshoot.md | 2 +- .../docs/extraction/user-defined-functions.md | 3 +- docs/docs/extraction/user-defined-stages.md | 2 +- docs/docs/extraction/vlm-embed.md | 2 +- 20 files changed, 495 insertions(+), 54 deletions(-) diff --git a/contributing.md b/contributing.md index f8dc3815d..1f549469e 100644 --- a/contributing.md +++ b/contributing.md @@ -1,50 +1,492 @@ -### Contributing +# Contributing to NV-Ingest -We require that all contributors "sign-off" on their commits. This certifies that the contribution is your original -work, or you have rights to submit it under the same license, or a compatible license. +External contributions will be welcome soon, and they are greatly appreciated! Every little bit helps, and credit will always be given. -Any contribution which contains commits that are not signed off are not accepted. +## Table of Contents -To sign off on a commit, use the --signoff (or -s) option when you commit your changes as shown following. +1. [Filing Issues](#filing-issues) +2. [Cloning the Repository](#cloning-the-repository) +3. [Code Contributions](#code-contributions) + - [Your First Issue](#your-first-issue) + - [Seasoned Developers](#seasoned-developers) + - [Workflow](#workflow) + - [Common Processing Patterns](#common-processing-patterns) + - [traceable](#traceable---srcnv_ingestutiltracingtaggingpy) + - [nv_ingest_node_failure_context_manager](#nv_ingest_node_failure_context_manager---srcnv_ingestutilexception_handlersdecoratorspy) + - [filter_by_task](#filter_by_task---srcnv_ingestutilflow_controlfilter_by_taskpy) + - [Adding a New Stage or Module](#adding-a-new-stage-or-module) + - [Common Practices for Writing Unit Tests](#common-practices-for-writing-unit-tests) + - [General Guidelines](#general-guidelines) + - [Mocking External Services](#mocking-external-services) + - [Submodules, Third Party Libraries, and Models](#submodules-third-party-libraries-and-models) + - [Submodules](#submodules) + - [Models](#models) +4. [Architectural Guidelines](#architectural-guidelines) + - [Single Responsibility Principle (SRP)](#1-single-responsibility-principle-srp) + - [Interface Segregation Principle (ISP)](#2-interface-segregation-principle-isp) + - [Dependency Inversion Principle (DIP)](#3-dependency-inversion-principle-dip) + - [Physical Design Structure Mirroring Logical Design Structure](#4-physical-design-structure-mirroring-logical-design-structure) + - [Levelization](#5-levelization) + - [Acyclic Dependencies Principle (ADP)](#6-acyclic-dependencies-principle-adp) + - [Package Cohesion Principles](#7-package-cohesion-principles) + - [Common Closure Principle (CCP)](#common-closure-principle-ccp) + - [Common Reuse Principle (CRP)](#common-reuse-principle-crp) + - [Encapsulate What Varies](#8-encapsulate-what-varies) + - [Favor Composition Over Inheritance](#9-favor-composition-over-inheritance) + - [Clean Separation of Concerns (SoC)](#10-clean-separation-of-concerns-soc) + - [Principle of Least Knowledge (Law of Demeter)](#11-principle-of-least-knowledge-law-of-demeter) + - [Document Assumptions and Decisions](#12-document-assumptions-and-decisions) + - [Continuous Integration and Testing](#13-continuous-integration-and-testing) +5. [Writing Good and Thorough Documentation](#writing-good-and-thorough-documentation) +6. [Licensing](#licensing) +7. [Attribution](#attribution) -``` -$ git commit --signoff --message "Add cool feature." -``` +## Filing Issues -This appends the following text to your commit message. +1. **Bug Reports, Feature Requests, and Documentation Issues:** Please file + an [issue](https://github.com/NVIDIA/nv-ingest/issues) with a detailed + description of + the problem, feature request, or documentation issue. The NV-Ingest team will review and triage these issues, + and if appropriate, schedule them for a future release. +## Cloning the repository + +```bash +DATASET_ROOT=[path to your dataset root] +MODULE_NAME=[] +NV_INGEST_ROOT=[path to your NV-Ingest root] +git clone https://github.com/NVIDIA/nv-ingest.git $NV_INGEST_ROOT +cd $NV_INGEST_ROOT ``` -Signed-off-by: Your Name + +Ensure all submodules are checked out: + +```bash +git submodule update --init --recursive ``` -#### Developer Certificate of Origin (DCO) +## Code Contributions -The following is the full text of the Developer Certificate of Origin (DCO) +### Your First Issue -``` - Developer Certificate of Origin - Version 1.1 +1. **Finding an Issue:** Start with issues + labeled [good first issue](https://github.com/NVIDIA/nv-ingest/labels/bug). +2. **Claim an Issue:** Comment on the issue you wish to work on. +3. **Implement Your Solution:** Dive into the code! Update or add unit tests as necessary. +4. **Submit Your Pull Request: + ** [Create a pull request](https://github.com/NVIDIA/nv-ingest/pulls) once your + code is ready. +5. **Code Review:** Wait for the review by other developers and make necessary updates. +6. **Merge:** After approval, an NVIDIA developer will approve your pull request. - Copyright (C) 2004, 2006 The Linux Foundation and its contributors. - 1 Letterman Drive - Suite D4700 - San Francisco, CA, 94129 +### Seasoned Developers - Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. -``` +For those familiar with the codebase, please check +the [project boards](https://github.com/orgs/NVIDIA/projects/48/views/1) for +issues. Look for unassigned issues and follow the steps starting from **Claim an Issue**. + +### Workflow + +1. **NV-Ingest Foundation**: Built on top + of [RAY](https://docs.ray.io/en/latest/serve/architecture.html). + +2. **Pipeline Structure**: Designed around a pipeline that processes individual jobs within an asynchronous execution + graph. Each job is processed by a series of stages or task handlers. + +3. **Job Composition**: Jobs consist of a data payload, metadata, and task specifications that determine the processing + steps applied to the data. + +4. **Job Submission**: + + - A job is submitted as a JSON specification and converted into + a [ControlMessage](https://github.com/nv-morpheus/Morpheus/blob/branch-24.06/docs/source/developer_guide/guides/9_control_messages.md), + with the payload consisting of a cuDF dataframe. + - For example: + ```text + document_type source_id uuid metadata + 0 pdf somefile 1234 { ... } + ``` + - The `metadata` column contents correspond to + the [schema-enforced metadata format of returned data](docs/docs/extraction/content-metadata.md). + +5. **Pipeline Processing**: + + - The `ControlMessage` is passed through the pipeline, where each stage processes the data and metadata as needed. + - Subsequent stages may add, transform, or filter data as needed, with all resulting artifacts stored in + the `ControlMessage`'s payload. + - For example, after processing, the payload may look like: + ```text + document_type source_id uuid metadata + 0 text somefile abcd-1234 {'content': "The quick brown fox jumped...", ...} + 1 image somefile efgh-5678 {'content': "base64 encoded image", ...} + 2 image somefile xyza-5618 {'content': "base64 encoded image", ...} + 3 image somefile zxya-5628 {'content': "base64 encoded image", ...} + 4 status somefile kvq9-5600 {'content': "", 'status': "filtered", ...} + ``` + - A single job can result in multiple artifacts, each with its own metadata element definition. + +6. **Job Completion**: + - Upon reaching the end of the pipeline, the `ControlMessage` is converted into a `JobResult` object and pushed to + the ephemeral output queue for client retrieval. + - `JobResult` objects consist of a dictionary containing: + 1. **data**: A list of metadata artifacts produced by the job. + 2. **status**: The job status as success or failure. + 3. **description**: A human-readable description of the job status. + 4. **trace**: A list of timing traces generated during the job's processing. + 5. **annotations**: A list of task annotations generated during the job's processing. + +### Updating Dependencies + +- Dependencies are managed with `uv` and project-local `pyproject.toml` files. +- Dependencies are stored in package definitions: + 1. **Service Dependencies** `src/pyproject.toml`. + 2. **Client Dependencies** `client/pyproject.toml`. + +- To update dependencies: + - Create a clean environment using `uv venv`. + - Update dependencies in the relevant `pyproject.toml` and validate the changes. + - Recreate the environment and install via `uv pip`. + - For example: + ```bash + uv venv .venv + source .venv/bin/activate + uv pip install -e ./src -e ./client -e ./api + ``` + +### Common Processing Patterns + +In NV-Ingest, decorators are used to enhance the functionality of functions by adding additional processing logic. These +decorators help ensure consistency, traceability, and robust error handling across the pipeline. Below, we introduce +some common decorators used in NV-Ingest, explain their usage, and provide examples. + +#### `traceable` -> `src/nv_ingest/util/tracing/tagging.py` + +The `traceable` decorator adds entry and exit trace timestamps to a `ControlMessage`'s metadata. This helps in +monitoring and debugging by recording the time taken for function execution. + +**Usage:** + +- To track function execution time with default trace names: + ```python + @traceable() + def process_message(message): + pass + ``` +- To use a custom trace name: + ```python + @traceable(trace_name="CustomTraceName") + def process_message(message): + pass + ``` + +#### `nv_ingest_node_failure_context_manager` -> `src/nv_ingest/util/exception_handlers/decorators.py` + +This decorator wraps a function with failure handling logic to manage potential failures involving `ControlMessages`. It +ensures that failures are managed consistently, optionally raising exceptions or annotating the `ControlMessage`. + +**Usage:** + +- To handle failures with default settings: + ```python + @nv_ingest_node_failure_context_manager(annotation_id="example_task") + def process_message(message): + pass + ``` +- To handle failures and allow empty payloads: + ```python + @nv_ingest_node_failure_context_manager(annotation_id="example_task", payload_can_be_empty=True) + def process_message(message): + pass + ``` + +#### `filter_by_task` -> `src/nv_ingest/util/flow_control/filter_by_task.py` + +The `filter_by_task` decorator checks if the `ControlMessage` contains any of the specified tasks. Each task can be a +string of the task name or a tuple of the task name and task properties. If the message does not contain any listed task +and/or task properties, the message is returned directly without calling the wrapped function, unless a forwarding +function is provided. + +**Usage:** + +- To filter messages based on tasks: + ```python + @filter_by_task(["task1", "task2"]) + def process_message(message): + pass + ``` +- To filter messages based on tasks with specific properties: + ```python + @filter_by_task([("task", {"prop": "value"})]) + def process_message(message): + pass + ``` +- To forward messages to another function. This is necessary when the decorated function does not return the message + directly, but instead forwards it to another function. In this case, the forwarding function should be provided as an + argument to the decorator. + ```python + @filter_by_task(["task1", "task2"], forward_func=other_function) + def process_message(message): + pass + ``` + +#### `cm_skip_processing_if_failed` -> `morpheus/utils/control_message_utils.py` + +The `cm_skip_processing_if_failed` decorator skips the processing of a `ControlMessage` if it has already failed. This +ensures that no further processing is attempted on a failed message, maintaining the integrity of the pipeline. + +**Usage:** + +- To skip processing if the message has failed: + ```python + @cm_skip_processing_if_failed + def process_message(message): + pass + ``` + +### Adding a New Stage or Module + +#### TODO(Devin): Add details about adding a new stage or module once we have router node functionality in place. + +### Common Practices for Writing Unit Tests + +Writing unit tests is essential for maintaining code quality and ensuring that changes do not introduce new bugs. In +this project, we use `pytest` for running tests and adopt blackbox testing principles. Below are some common practices +for writing unit tests, which are located in the `[repo_root]/tests` directory. + +#### General Guidelines + +1. **Test Structure**: Each test module should test a specific module or functionality within the codebase. The test + module should be named `test_.py`, and reside on a mirrored physical path to its corresponding test + target to be easily discoverable by `pytest`. + + 1. Example: `nv_ingest/some_path/another_path/my_module.py` should have a corresponding test file: + `tests/some_path/another_path/test_my_module.py`. + +2. **Test Functions**: Each test function should focus on a single aspect of the functionality. Use descriptive names + that clearly indicate what is being tested. For example, `test_function_returns_correct_value` + or `test_function_handles_invalid_input`. + +3. **Setup and Teardown**: Use `pytest` fixtures to manage setup and teardown operations for your tests. Fixtures help + in creating a consistent and reusable setup environment. + +4. **Assertions**: Use assertions to validate the behavior of the code. Ensure that the tests cover both expected + outcomes and edge cases. + +#### Mocking External Services + +When writing tests that depend on external services (e.g., databases, APIs), it is important to mock these dependencies +to ensure that tests are reliable, fast, and do not depend on external factors. + +1. **Mocking Libraries**: Use libraries like `unittest.mock` to create mocks for external services. The `pytest-mock` + plugin can also be used to integrate mocking capabilities directly with `pytest`. + +2. **Mock Objects**: Create mock objects to simulate the behavior of external services. Use these mocks to test how your + code interacts with these services without making actual network calls or database transactions. + +3. **Patching**: Use `patch` to replace real objects in your code with mocks. This can be done at the function, method, + or object level. Ensure that patches are applied in the correct scope to avoid side effects. + +#### Example Test Structure + +Here is an example of how to structure a test module in the `[repo_root]/tests` directory: + +```python +import pytest +from unittest.mock import patch, Mock + +# Assuming the module to test is located at [repo_root]/module.py +from module import function_to_test + + +@pytest.fixture +def mock_external_service(): + with patch('module.ExternalService') as mock_service: + yield mock_service + + +def test_function_returns_correct_value(mock_external_service): + # Arrange + mock_external_service.return_value.some_method.return_value = 'expected_value' + # Act + result = function_to_test() + + # Assert + assert result == 'expected_value' + + +def test_function_handles_invalid_input(mock_external_service): + # Arrange + mock_external_service.return_value.some_method.side_effect = ValueError("Invalid input") + + # Act and Assert + with pytest.raises(ValueError, match="Invalid input"): + function_to_test(invalid_input) ``` - Developer's Certificate of Origin 1.1 - By making a contribution to this project, I certify that: +## Submodules, Third Party Libraries, and Models + +### Submodules + +1. Submodules are used to manage third-party libraries and dependencies. +2. Submodules should be created in the `third_party` directory. +3. Ensure that the submodule is updated to the latest commit before making changes. + +### Models + +1. **Model Integration**: NV-Ingest is designed to be scalable and flexible, so running models directly in the pipeline + is discouraged. +2. **Model Export**: Models should be exported to a format compatible with Triton Inference Server or TensorRT. + - Model acquisition and conversion should be documented in `triton_models/README.md`, including the model name, + version, pbtxt file, Triton model files, etc., along with an example of how to query the model in Triton. + - Models should be externally hosted and downloaded during the pipeline execution, or added via LFS. + - Any additional code, configuration files, or scripts required to run the model should be included in + the `triton_models/[MODEL_NAME]` directory. +3. **Self-Contained Dependencies**: No assumptions should be made regarding other models or libraries being available in + the pipeline. All dependencies should be self-contained. +4. **Base Triton Container**: Directions for the creation of the base Triton container are listed in + the `triton_models/README.md` file. If a new model requires additional base dependencies, please update + the `Dockerfile` in the `triton_models` directory. + +## Architectural Guidelines + +To ensure the quality and maintainability of the NV-Ingest codebase, the following architectural guidelines should be +followed: + +### 1. Single Responsibility Principle (SRP) + +- Ensure that each module, class, or function has only one reason to change. + +### 2. Interface Segregation Principle (ISP) + +- Avoid forcing clients to depend on interfaces they do not use. + +### 3. Dependency Inversion Principle (DIP) + +- High-level modules should not depend on low-level modules, both should depend on abstractions. + +### 4. Physical Design Structure Mirroring Logical Design Structure + +- The physical layout of the codebase should reflect its logical structure. + +### 5. Levelization + +- Organize code into levels where higher-level components depend on lower-level components but not vice versa. + +### 6. Acyclic Dependencies Principle (ADP) + +- Ensure the dependency graph of packages/modules has no cycles. + +### 7. Package Cohesion Principles + +#### Common Closure Principle (CCP) + +- Package classes that change together. + +#### Common Reuse Principle (CRP) + +- Package classes that are used together. + +### 8. Encapsulate What Varies + +- Identify aspects of the application that vary and separate them from what stays the same. + +### 9. Favor Composition Over Inheritance - (a) The contribution was created in whole or in part by me and I have the right to submit it under the open source license indicated in the file; or +- Utilize object composition over class inheritance for behavior reuse where possible. - (b) The contribution is based upon previous work that, to the best of my knowledge, is covered under an appropriate open source license and I have the right under that license to submit that work with modifications, whether created in whole or in part by me, under the same open source license (unless I am permitted to submit under a different license), as indicated in the file; or +### 10. Clean Separation of Concerns (SoC) - (c) The contribution was provided directly to me by some other person who certified (a), (b) or (c) and I have not modified it. +- Divide the application into distinct features with minimal overlap in functionality. - (d) I understand and agree that this project and the contribution are public and that a record of the contribution (including all personal information I submit with it, including my sign-off) is maintained indefinitely and may be redistributed consistent with this project or the open source license(s) involved. +### 11. Principle of Least Knowledge (Law of Demeter) + +- Objects should assume as little as possible about the structure or properties of anything else, including their + subcomponents. + +### 12. Document Assumptions and Decisions + +- Assumptions made and reasons behind architectural and design decisions should be clearly documented. + +### 13. Continuous Integration and Testing + +- Integrate code frequently into a shared repository and ensure comprehensive testing is an integral part of the + development cycle. + +Contributors are encouraged to follow these guidelines to ensure contributions are in line with the project's +architectural consistency and maintainability. + + +## Writing Good and Thorough Documentation + +As a contributor to our codebase, writing high-quality documentation is an essential part of ensuring that others can +understand and work with your code effectively. Good documentation helps to reduce confusion, facilitate collaboration, +and streamline the development process. In this guide, we will outline the principles and best practices for writing +thorough and readable documentation that adheres to the Chicago Manual of Style. + +### Chicago Manual of Style + +Our documentation follows the Chicago Manual of Style, a widely accepted standard for writing and formatting. This style +guide provides a consistent approach to writing, grammar, and punctuation, making it easier for readers to understand +and navigate our documentation. + +### Key Principles + +When writing documentation, keep the following principles in mind: + +1. **Clarity**: Use clear and concise language to convey your message. Avoid ambiguity and jargon that may confuse readers. +2. **Accuracy**: Ensure that your documentation is accurate and up-to-date. Verify facts, details, and code snippets + before publishing. +3. **Completeness**: Provide all necessary information to understand the code, including context, syntax, and examples. +4. **Consistency**: Use a consistent tone, voice, and style throughout the documentation. +5. **Accessibility**: Make your documentation easy to read and understand by using headings, bullet points, and short paragraphs. + +### Documentation Structure + +A well-structured documentation page should include the following elements: + +1. **Header**: A brief title that summarizes the content of the page. +2. **Introduction**: A short overview of the topic, including its purpose and relevance. +3. **Syntax and Parameters**: A detailed explanation of the code syntax, including parameters, data types, and return values. +4. **Examples**: Concrete examples that illustrate how to use the code, including input and output. +5. **Tips and Variations**: Additional information, such as best practices, common pitfalls, and alternative approaches. +6. **Related Resources**: Links to relevant documentation, tutorials, and external resources. + +### Best Practices + +To ensure high-quality documentation, follow these best practices: + +1. **Use headings and subheadings**: Organize your content with clear headings and subheadings to facilitate scanning and navigation. +2. **Use bullet points and lists**: Break up complex information into easy-to-read lists and bullet points. +3. **Provide context**: Give readers a clear understanding of the code's purpose, history, and relationships to other components. +4. **Review and edit**: Carefully review and edit your documentation to ensure accuracy, completeness, and consistency. + +### Resources + +For more information on the Chicago Manual of Style, refer to their +[online published version](https://www.chicagomanualofstyle.org/home.html?_ga=2.188145128.1312333204.1728079521-706076405.1727890116). + +By following these guidelines and principles, you will be able to create high-quality documentation that helps others +understand and work with your code effectively. Remember to always prioritize clarity, accuracy, and completeness, and +to use the Chicago Style Guide as your reference for writing and formatting. + + +## Licensing + +NV-Ingest is licensed under the NVIDIA Proprietary Software License -- ensure that any contributions are compatible. + +The following should be included in the header of any new files: + +```text +SPDX-FileCopyrightText: Copyright (c) 2024, NVIDIA CORPORATION & AFFILIATES. +All rights reserved. +SPDX-License-Identifier: Apache-2.0 ``` +## Attribution + +Portions adopted from +- [https://github.com/nv-morpheus/Morpheus/blob/branch-24.06/CONTRIBUTING.md](https://github.com/nv-morpheus/Morpheus/blob/branch-24.06/CONTRIBUTING.md) +- [https://github.com/pytorch/pytorch/blob/master/CONTRIBUTING.md](https://github.com/pytorch/pytorch/blob/master/CONTRIBUTING.md) +- [https://github.com/dask/dask/blob/master/docs/source/develop.rst](https://github.com/dask/dask/blob/master/docs/source/develop.rst) diff --git a/docs/docs/extraction/audio.md b/docs/docs/extraction/audio.md index 021ee74b6..4e2c749cf 100644 --- a/docs/docs/extraction/audio.md +++ b/docs/docs/extraction/audio.md @@ -9,7 +9,7 @@ to extract speech from audio files. !!! note - NeMo Retriever Library is also known as NVIDIA Ingest. + NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. Currently, you can extract speech from the following file types: diff --git a/docs/docs/extraction/content-metadata.md b/docs/docs/extraction/content-metadata.md index e7d8bb050..5a55b9e6a 100644 --- a/docs/docs/extraction/content-metadata.md +++ b/docs/docs/extraction/content-metadata.md @@ -10,7 +10,7 @@ Metadata can be extracted from a source or content, or generated by using models !!! note - NeMo Retriever Library is also known as NVIDIA Ingest. + NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. diff --git a/docs/docs/extraction/data-store.md b/docs/docs/extraction/data-store.md index 580a1dfc7..b012a9580 100644 --- a/docs/docs/extraction/data-store.md +++ b/docs/docs/extraction/data-store.md @@ -4,7 +4,7 @@ Use this documentation to learn how [NeMo Retriever Library](overview.md) handle !!! note - NeMo Retriever Library is also known as NVIDIA Ingest. + NVIDIA Ingest (nv-ingest) has been renamed to the NeMo Retriever Library. ## Overview diff --git a/docs/docs/extraction/environment-config.md b/docs/docs/extraction/environment-config.md index b411ea5b6..2c7be750b 100644 --- a/docs/docs/extraction/environment-config.md +++ b/docs/docs/extraction/environment-config.md @@ -5,7 +5,7 @@ You can specify these in your .env file or directly in your environment. !!! note - NeMo Retriever Library is also known as NVIDIA Ingest. + NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. ## General Environment Variables diff --git a/docs/docs/extraction/faq.md b/docs/docs/extraction/faq.md index 7bbb33d5f..ff383901c 100644 --- a/docs/docs/extraction/faq.md +++ b/docs/docs/extraction/faq.md @@ -4,7 +4,7 @@ This documentation contains the Frequently Asked Questions (FAQ) for [NeMo Retri !!! note - NeMo Retriever Library is also known as NVIDIA Ingest. + NVIDIA Ingest (nv-ingest) has been renamed to the NeMo Retriever Library. diff --git a/docs/docs/extraction/nemoretriever-parse.md b/docs/docs/extraction/nemoretriever-parse.md index 3da84cdce..a53ed094f 100644 --- a/docs/docs/extraction/nemoretriever-parse.md +++ b/docs/docs/extraction/nemoretriever-parse.md @@ -12,7 +12,7 @@ to run [NeMo Retriever Library](overview.md) with nemotron-parse. !!! note - NeMo Retriever Library is also known as NVIDIA Ingest. + NVIDIA Ingest (nv-ingest) has been renamed to the NeMo Retriever Library. ## Limitations diff --git a/docs/docs/extraction/nimclient.md b/docs/docs/extraction/nimclient.md index fae98c068..9d4a5fe42 100644 --- a/docs/docs/extraction/nimclient.md +++ b/docs/docs/extraction/nimclient.md @@ -5,7 +5,7 @@ This documentation demonstrates how to create custom NIM integrations for use in !!! note - NeMo Retriever Library is also known as NVIDIA Ingest. + NVIDIA Ingest (nv-ingest) has been renamed to the NeMo Retriever Library. The NimClient architecture consists of two main components: diff --git a/docs/docs/extraction/notebooks.md b/docs/docs/extraction/notebooks.md index 4bf6fe7b4..0b4f31a7e 100644 --- a/docs/docs/extraction/notebooks.md +++ b/docs/docs/extraction/notebooks.md @@ -4,7 +4,7 @@ To get started using [NeMo Retriever Library](overview.md), you can try one of t !!! note - NeMo Retriever Library is also known as NVIDIA Ingest. + NVIDIA Ingest (nv-ingest) has been renamed to the NeMo Retriever Library. ## Dataset Downloads for Benchmarking diff --git a/docs/docs/extraction/nv-ingest-python-api.md b/docs/docs/extraction/nv-ingest-python-api.md index d4c29f2b5..4aafa9776 100644 --- a/docs/docs/extraction/nv-ingest-python-api.md +++ b/docs/docs/extraction/nv-ingest-python-api.md @@ -4,7 +4,7 @@ The [NeMo Retriever Library](overview.md) Python API provides a simple and flexi !!! note - NeMo Retriever Library is also known as NVIDIA Ingest. + NVIDIA Ingest (nv-ingest) has been renamed to the NeMo Retriever Library. !!! tip diff --git a/docs/docs/extraction/overview.md b/docs/docs/extraction/overview.md index 8891d57e6..0e67a87c4 100644 --- a/docs/docs/extraction/overview.md +++ b/docs/docs/extraction/overview.md @@ -6,7 +6,7 @@ to find, contextualize, and extract text, tables, charts and infographics that y !!! note - NeMo Retriever Library is also known as NVIDIA Ingest. + NVIDIA Ingest (nv-ingest) has been renamed to the NeMo Retriever Library. NeMo Retriever Library enables parallelization of splitting documents into pages where artifacts are classified (such as text, tables, charts, and infographics), extracted, and further contextualized through optical character recognition (OCR) into a well defined JSON schema. From there, NeMo Retriever Library can optionally manage computation of embeddings for the extracted content, diff --git a/docs/docs/extraction/prerequisites.md b/docs/docs/extraction/prerequisites.md index a5e0512e1..902c499c8 100644 --- a/docs/docs/extraction/prerequisites.md +++ b/docs/docs/extraction/prerequisites.md @@ -4,7 +4,7 @@ Before you begin using [NeMo Retriever Library](overview.md), ensure the followi !!! note - NeMo Retriever Library is also known as NVIDIA Ingest. + NVIDIA Ingest (nv-ingest) has been renamed to the NeMo Retriever Library. diff --git a/docs/docs/extraction/quickstart-library-mode.md b/docs/docs/extraction/quickstart-library-mode.md index a3ecbf867..24dabfb8f 100644 --- a/docs/docs/extraction/quickstart-library-mode.md +++ b/docs/docs/extraction/quickstart-library-mode.md @@ -2,6 +2,6 @@ !!! note - NeMo Retriever Library is also known as NVIDIA Ingest. + NVIDIA Ingest (nv-ingest) has been renamed to the NeMo Retriever Library. Use the [Quick Start for NeMo Retriever Library](https://github.com/NVIDIA/NeMo-Retriever/blob/26.03/nemo_retriever/README.md) to set up and run the NeMo Retriever Library locally, so you can build a GPU‑accelerated, multimodal RAG ingestion pipeline that parses PDFs, HTML, text, audio, and video into LanceDB vector embeddings, integrates with Nemotron RAG models (locally or via NIM endpoints), which includes Ray‑based scaling with built‑in recall evaluation. \ No newline at end of file diff --git a/docs/docs/extraction/scaling-modes.md b/docs/docs/extraction/scaling-modes.md index 5c57b33ac..f39c4ad70 100644 --- a/docs/docs/extraction/scaling-modes.md +++ b/docs/docs/extraction/scaling-modes.md @@ -7,7 +7,7 @@ This guide covers how resource scaling modes work across stages in [NeMo Retriev !!! note - NeMo Retriever Library is also known as NVIDIA Ingest. + NVIDIA Ingest (nv-ingest) has been renamed to the NeMo Retriever Library. diff --git a/docs/docs/extraction/support-matrix.md b/docs/docs/extraction/support-matrix.md index 5dbc49508..d62ed7a8b 100644 --- a/docs/docs/extraction/support-matrix.md +++ b/docs/docs/extraction/support-matrix.md @@ -4,20 +4,20 @@ Before you begin using [NeMo Retriever Library](overview.md), ensure that you ha !!! note - NeMo Retriever Library is also known as NVIDIA Ingest. + NVIDIA Ingest (nv-ingest) has been renamed to the NeMo Retriever Library. ## Core and Advanced Pipeline Features -The Nemo Retriever extraction core pipeline features run on a single A10G or better GPU. +The Nemo Retriever Library extraction core pipeline features run on a single A10G or better GPU. The core pipeline features include the following: -- llama3.2-nv-embedqa-1b-v2 — Embedding model for converting text chunks into vectors. -- nemoretriever-page-elements-v3 — Detects and classifies images on a page as a table, chart or infographic. -- nemoretriever-table-structure-v1 — Detects rows, columns, and cells within a table to preserve table structure and convert to Markdown format. -- nemoretriever-graphic-elements-v1 — Detects graphic elements within chart images such as titles, legends, axes, and numerical values. -- nemoretriever-ocr-v1 — Image OCR model to detect and extract text from images. -- retrieval — Enables embedding and indexing into LanceDB (default) or Milvus. +- llama-nemotron-embed-1b-v2 — Embedding model for converting text chunks into vectors. +- nemotron-page-elements-v3 — Detects and classifies images on a page as a table, chart or infographic. +- nemotron-table-structure-v1 — Detects rows, columns, and cells within a table to preserve table structure and convert to Markdown format. +- nemotron-graphic-elements-v1 — Detects graphic elements within chart images such as titles, legends, axes, and numerical values. +- nemotron-ocr-v1 — Image OCR model to detect and extract text from images. +- retrieval — Enables embedding and indexing into Milvus. Advanced features require additional GPU support and disk space. This includes the following: diff --git a/docs/docs/extraction/telemetry.md b/docs/docs/extraction/telemetry.md index 9d34aaa92..5c050452f 100644 --- a/docs/docs/extraction/telemetry.md +++ b/docs/docs/extraction/telemetry.md @@ -4,7 +4,7 @@ You can view telemetry data for [NeMo Retriever Library](overview.md). !!! note - NeMo Retriever Library is also known as NVIDIA Ingest. + NVIDIA Ingest (nv-ingest) has been renamed to the NeMo Retriever Library. ## OpenTelemetry diff --git a/docs/docs/extraction/troubleshoot.md b/docs/docs/extraction/troubleshoot.md index 1b130952b..6299ca09f 100644 --- a/docs/docs/extraction/troubleshoot.md +++ b/docs/docs/extraction/troubleshoot.md @@ -4,7 +4,7 @@ Use this documentation to troubleshoot issues that arise when you use [NeMo Retr !!! note - NeMo Retriever Library is also known as NVIDIA Ingest. + NVIDIA Ingest (nv-ingest) has been renamed to the NeMo Retriever Library. ## Can't process long, non-language text strings diff --git a/docs/docs/extraction/user-defined-functions.md b/docs/docs/extraction/user-defined-functions.md index 74a710698..9eb5576ae 100644 --- a/docs/docs/extraction/user-defined-functions.md +++ b/docs/docs/extraction/user-defined-functions.md @@ -5,8 +5,7 @@ This guide covers how to write, validate, and submit UDFs using both the CLI and !!! note - NeMo Retriever Library is also known as NVIDIA Ingest. - + NVIDIA Ingest (nv-ingest) has been renamed to the NeMo Retriever Library. ## Quickstart diff --git a/docs/docs/extraction/user-defined-stages.md b/docs/docs/extraction/user-defined-stages.md index 57f68179f..ac50dd568 100644 --- a/docs/docs/extraction/user-defined-stages.md +++ b/docs/docs/extraction/user-defined-stages.md @@ -8,7 +8,7 @@ and operate on a well-defined DataFrame payload and metadata structure. !!! note - NeMo Retriever Library is also known as NVIDIA Ingest. + NVIDIA Ingest (nv-ingest) has been renamed to the NeMo Retriever Library. To add user-defined stages to your pipeline, you need the following: diff --git a/docs/docs/extraction/vlm-embed.md b/docs/docs/extraction/vlm-embed.md index 3ffe2b7c0..8d095f9e7 100644 --- a/docs/docs/extraction/vlm-embed.md +++ b/docs/docs/extraction/vlm-embed.md @@ -10,7 +10,7 @@ The model supports images that contain text, tables, charts, and infographics. !!! note - NeMo Retriever Library is also known as NVIDIA Ingest. + NVIDIA Ingest (nv-ingest) has been renamed to the NeMo Retriever Library. ## Configure and Run the Multimodal NIM From 6758c17e900ea179959a3f9b4acabfd8354b7d4d Mon Sep 17 00:00:00 2001 From: Kurt Heiss Date: Mon, 23 Mar 2026 11:06:49 -0700 Subject: [PATCH 51/94] =?UTF-8?q?changed=20opening=20note=20to=20=20NVIDIA?= =?UTF-8?q?=20Ingest=20(nv-ingest)=20has=20been=20renamed=20N=E2=80=A6=20(?= =?UTF-8?q?#1691)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/docs/extraction/data-store.md | 2 +- docs/docs/extraction/faq.md | 2 +- docs/docs/extraction/nemoretriever-parse.md | 2 +- docs/docs/extraction/nimclient.md | 2 +- docs/docs/extraction/notebooks.md | 2 +- docs/docs/extraction/nv-ingest-python-api.md | 2 +- docs/docs/extraction/overview.md | 2 +- docs/docs/extraction/prerequisites.md | 2 +- docs/docs/extraction/python-api-reference.md | 2 +- docs/docs/extraction/quickstart-library-mode.md | 2 +- docs/docs/extraction/releasenotes-nv-ingest.md | 2 +- docs/docs/extraction/scaling-modes.md | 2 +- docs/docs/extraction/support-matrix.md | 2 +- docs/docs/extraction/telemetry.md | 2 +- docs/docs/extraction/troubleshoot.md | 2 +- docs/docs/extraction/user-defined-functions.md | 2 +- docs/docs/extraction/user-defined-stages.md | 2 +- docs/docs/extraction/vlm-embed.md | 2 +- 18 files changed, 18 insertions(+), 18 deletions(-) diff --git a/docs/docs/extraction/data-store.md b/docs/docs/extraction/data-store.md index b012a9580..6b0d039ce 100644 --- a/docs/docs/extraction/data-store.md +++ b/docs/docs/extraction/data-store.md @@ -4,7 +4,7 @@ Use this documentation to learn how [NeMo Retriever Library](overview.md) handle !!! note - NVIDIA Ingest (nv-ingest) has been renamed to the NeMo Retriever Library. + NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. ## Overview diff --git a/docs/docs/extraction/faq.md b/docs/docs/extraction/faq.md index ff383901c..08b4b96e2 100644 --- a/docs/docs/extraction/faq.md +++ b/docs/docs/extraction/faq.md @@ -4,7 +4,7 @@ This documentation contains the Frequently Asked Questions (FAQ) for [NeMo Retri !!! note - NVIDIA Ingest (nv-ingest) has been renamed to the NeMo Retriever Library. + NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. diff --git a/docs/docs/extraction/nemoretriever-parse.md b/docs/docs/extraction/nemoretriever-parse.md index a53ed094f..56ebdc6a2 100644 --- a/docs/docs/extraction/nemoretriever-parse.md +++ b/docs/docs/extraction/nemoretriever-parse.md @@ -12,7 +12,7 @@ to run [NeMo Retriever Library](overview.md) with nemotron-parse. !!! note - NVIDIA Ingest (nv-ingest) has been renamed to the NeMo Retriever Library. + NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. ## Limitations diff --git a/docs/docs/extraction/nimclient.md b/docs/docs/extraction/nimclient.md index 9d4a5fe42..4f1d29c17 100644 --- a/docs/docs/extraction/nimclient.md +++ b/docs/docs/extraction/nimclient.md @@ -5,7 +5,7 @@ This documentation demonstrates how to create custom NIM integrations for use in !!! note - NVIDIA Ingest (nv-ingest) has been renamed to the NeMo Retriever Library. + NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. The NimClient architecture consists of two main components: diff --git a/docs/docs/extraction/notebooks.md b/docs/docs/extraction/notebooks.md index 0b4f31a7e..b7748a01a 100644 --- a/docs/docs/extraction/notebooks.md +++ b/docs/docs/extraction/notebooks.md @@ -4,7 +4,7 @@ To get started using [NeMo Retriever Library](overview.md), you can try one of t !!! note - NVIDIA Ingest (nv-ingest) has been renamed to the NeMo Retriever Library. + NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. ## Dataset Downloads for Benchmarking diff --git a/docs/docs/extraction/nv-ingest-python-api.md b/docs/docs/extraction/nv-ingest-python-api.md index 4aafa9776..35f86c176 100644 --- a/docs/docs/extraction/nv-ingest-python-api.md +++ b/docs/docs/extraction/nv-ingest-python-api.md @@ -4,7 +4,7 @@ The [NeMo Retriever Library](overview.md) Python API provides a simple and flexi !!! note - NVIDIA Ingest (nv-ingest) has been renamed to the NeMo Retriever Library. + NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. !!! tip diff --git a/docs/docs/extraction/overview.md b/docs/docs/extraction/overview.md index 0e67a87c4..2404b1f10 100644 --- a/docs/docs/extraction/overview.md +++ b/docs/docs/extraction/overview.md @@ -6,7 +6,7 @@ to find, contextualize, and extract text, tables, charts and infographics that y !!! note - NVIDIA Ingest (nv-ingest) has been renamed to the NeMo Retriever Library. + NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. NeMo Retriever Library enables parallelization of splitting documents into pages where artifacts are classified (such as text, tables, charts, and infographics), extracted, and further contextualized through optical character recognition (OCR) into a well defined JSON schema. From there, NeMo Retriever Library can optionally manage computation of embeddings for the extracted content, diff --git a/docs/docs/extraction/prerequisites.md b/docs/docs/extraction/prerequisites.md index 902c499c8..3cb7b6d74 100644 --- a/docs/docs/extraction/prerequisites.md +++ b/docs/docs/extraction/prerequisites.md @@ -4,7 +4,7 @@ Before you begin using [NeMo Retriever Library](overview.md), ensure the followi !!! note - NVIDIA Ingest (nv-ingest) has been renamed to the NeMo Retriever Library. + NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. diff --git a/docs/docs/extraction/python-api-reference.md b/docs/docs/extraction/python-api-reference.md index b9d914649..e8c503fbf 100644 --- a/docs/docs/extraction/python-api-reference.md +++ b/docs/docs/extraction/python-api-reference.md @@ -4,7 +4,7 @@ The [NeMo Retriever Library](overview.md) Python API provides a simple and flexi !!! note - NVIDIA Ingest (nv-ingest) has been renamed to the NeMo Retriever Library. + NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. !!! tip diff --git a/docs/docs/extraction/quickstart-library-mode.md b/docs/docs/extraction/quickstart-library-mode.md index 24dabfb8f..7afe7c8c5 100644 --- a/docs/docs/extraction/quickstart-library-mode.md +++ b/docs/docs/extraction/quickstart-library-mode.md @@ -2,6 +2,6 @@ !!! note - NVIDIA Ingest (nv-ingest) has been renamed to the NeMo Retriever Library. + NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. Use the [Quick Start for NeMo Retriever Library](https://github.com/NVIDIA/NeMo-Retriever/blob/26.03/nemo_retriever/README.md) to set up and run the NeMo Retriever Library locally, so you can build a GPU‑accelerated, multimodal RAG ingestion pipeline that parses PDFs, HTML, text, audio, and video into LanceDB vector embeddings, integrates with Nemotron RAG models (locally or via NIM endpoints), which includes Ray‑based scaling with built‑in recall evaluation. \ No newline at end of file diff --git a/docs/docs/extraction/releasenotes-nv-ingest.md b/docs/docs/extraction/releasenotes-nv-ingest.md index d3b71b4a5..39c4973d8 100644 --- a/docs/docs/extraction/releasenotes-nv-ingest.md +++ b/docs/docs/extraction/releasenotes-nv-ingest.md @@ -4,7 +4,7 @@ This documentation contains the release notes for [NeMo Retriever Library](overv !!! note - NVIDIA Ingest (nv-ingest) has been renamed to the NeMo Retriever Library. + NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. ## 26.03 Release Notes (26.3.0) diff --git a/docs/docs/extraction/scaling-modes.md b/docs/docs/extraction/scaling-modes.md index f39c4ad70..8fc4684a1 100644 --- a/docs/docs/extraction/scaling-modes.md +++ b/docs/docs/extraction/scaling-modes.md @@ -7,7 +7,7 @@ This guide covers how resource scaling modes work across stages in [NeMo Retriev !!! note - NVIDIA Ingest (nv-ingest) has been renamed to the NeMo Retriever Library. + NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. diff --git a/docs/docs/extraction/support-matrix.md b/docs/docs/extraction/support-matrix.md index d62ed7a8b..4098ebc33 100644 --- a/docs/docs/extraction/support-matrix.md +++ b/docs/docs/extraction/support-matrix.md @@ -4,7 +4,7 @@ Before you begin using [NeMo Retriever Library](overview.md), ensure that you ha !!! note - NVIDIA Ingest (nv-ingest) has been renamed to the NeMo Retriever Library. + NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. ## Core and Advanced Pipeline Features diff --git a/docs/docs/extraction/telemetry.md b/docs/docs/extraction/telemetry.md index 5c050452f..fcdf6d876 100644 --- a/docs/docs/extraction/telemetry.md +++ b/docs/docs/extraction/telemetry.md @@ -4,7 +4,7 @@ You can view telemetry data for [NeMo Retriever Library](overview.md). !!! note - NVIDIA Ingest (nv-ingest) has been renamed to the NeMo Retriever Library. + NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. ## OpenTelemetry diff --git a/docs/docs/extraction/troubleshoot.md b/docs/docs/extraction/troubleshoot.md index 6299ca09f..ca3cc6da4 100644 --- a/docs/docs/extraction/troubleshoot.md +++ b/docs/docs/extraction/troubleshoot.md @@ -4,7 +4,7 @@ Use this documentation to troubleshoot issues that arise when you use [NeMo Retr !!! note - NVIDIA Ingest (nv-ingest) has been renamed to the NeMo Retriever Library. + NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. ## Can't process long, non-language text strings diff --git a/docs/docs/extraction/user-defined-functions.md b/docs/docs/extraction/user-defined-functions.md index 9eb5576ae..ef08ded14 100644 --- a/docs/docs/extraction/user-defined-functions.md +++ b/docs/docs/extraction/user-defined-functions.md @@ -5,7 +5,7 @@ This guide covers how to write, validate, and submit UDFs using both the CLI and !!! note - NVIDIA Ingest (nv-ingest) has been renamed to the NeMo Retriever Library. + NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. ## Quickstart diff --git a/docs/docs/extraction/user-defined-stages.md b/docs/docs/extraction/user-defined-stages.md index ac50dd568..247a27eb0 100644 --- a/docs/docs/extraction/user-defined-stages.md +++ b/docs/docs/extraction/user-defined-stages.md @@ -8,7 +8,7 @@ and operate on a well-defined DataFrame payload and metadata structure. !!! note - NVIDIA Ingest (nv-ingest) has been renamed to the NeMo Retriever Library. + NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. To add user-defined stages to your pipeline, you need the following: diff --git a/docs/docs/extraction/vlm-embed.md b/docs/docs/extraction/vlm-embed.md index 8d095f9e7..03d089e8c 100644 --- a/docs/docs/extraction/vlm-embed.md +++ b/docs/docs/extraction/vlm-embed.md @@ -10,7 +10,7 @@ The model supports images that contain text, tables, charts, and infographics. !!! note - NVIDIA Ingest (nv-ingest) has been renamed to the NeMo Retriever Library. + NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. ## Configure and Run the Multimodal NIM From 3db9a495a2cdd7522a1acf4c495bb6c7d38d882e Mon Sep 17 00:00:00 2001 From: Kurt Heiss Date: Mon, 23 Mar 2026 12:04:58 -0700 Subject: [PATCH 52/94] remove duplicate caption() section with wrong parameters (NVBug 6000620) (#1693) --- docs/docs/extraction/nv-ingest-python-api.md | 25 ------------------ docs/docs/extraction/python-api-reference.md | 27 -------------------- 2 files changed, 52 deletions(-) diff --git a/docs/docs/extraction/nv-ingest-python-api.md b/docs/docs/extraction/nv-ingest-python-api.md index 35f86c176..106bdf76d 100644 --- a/docs/docs/extraction/nv-ingest-python-api.md +++ b/docs/docs/extraction/nv-ingest-python-api.md @@ -424,31 +424,6 @@ results = ingestor.ingest() For more information about working with infographics and multimodal content, refer to [Use Multimodal Embedding](vlm-embed.md). -### Caption Images and Control Reasoning - -The caption task can call a VLM with optional prompt and system prompt overrides: - -- `caption_prompt` (user prompt): defaults to `"Caption the content of this image:"`. -- `caption_system_prompt` (system prompt): defaults to `"/no_think"` (reasoning off). Set to `"/think"` to enable reasoning per the Nemotron Nano 12B v2 VL model card. - -Example: -```python -from nv_ingest_client.client.interface import Ingestor - -ingestor = ( - Ingestor() - .files("path/to/doc-with-images.pdf") - .extract(extract_images=True) - .caption( - prompt="Caption the content of this image:", - system_prompt="/think", # or "/no_think" - ) - .ingest() -) -``` - - - ## Extract Embeddings The `embed` method in the library generates text embeddings for document content. diff --git a/docs/docs/extraction/python-api-reference.md b/docs/docs/extraction/python-api-reference.md index e8c503fbf..7feb020f1 100644 --- a/docs/docs/extraction/python-api-reference.md +++ b/docs/docs/extraction/python-api-reference.md @@ -516,33 +516,6 @@ results = ingestor.ingest() For more information about working with infographics and multimodal content, refer to [Use Multimodal Embedding](vlm-embed.md). -### Caption Images and Control Reasoning - -The caption task can call a VLM with optional prompt and system prompt overrides: - -- `caption_prompt` (user prompt): defaults to `"Caption the content of this image:"`. -- `caption_system_prompt` (system prompt): defaults to `"/no_think"` (reasoning off). Set to `"/think"` to enable reasoning per the Nemotron Nano 12B v2 VL model card. -- `context_text_max_chars` (int, optional): Maximum characters of page text to include as context for the VLM. -- `temperature` (float, optional): Sampling temperature for the VLM. - -Example: -```python -from nemo_retriever.client.interface import Ingestor - -ingestor = ( - Ingestor() - .files("path/to/doc-with-images.pdf") - .extract(extract_images=True) - .caption( - prompt="Caption the content of this image:", - system_prompt="/think", # or "/no_think" - ) - .ingest() -) -``` - - - ## Extract Embeddings The `embed` method in the NeMo Retriever Library generates text embeddings for document content. From f0f9e97b6aaea533fa39b4fa3826e64bc1e608b4 Mon Sep 17 00:00:00 2001 From: Kurt Heiss Date: Mon, 23 Mar 2026 13:07:03 -0700 Subject: [PATCH 53/94] Kheiss/6000618 (#1694) Co-authored-by: sosahi --- docs/docs/extraction/user-defined-functions.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/docs/extraction/user-defined-functions.md b/docs/docs/extraction/user-defined-functions.md index ef08ded14..aef2c09c3 100644 --- a/docs/docs/extraction/user-defined-functions.md +++ b/docs/docs/extraction/user-defined-functions.md @@ -702,7 +702,7 @@ def risky_udf(control_message: IngestControlMessage) -> IngestControlMessage: logger = logging.getLogger(__name__) try: - df = control_message.get_payload() + df = control_message.payload() logger.info(f"Processing {len(df)} documents") # Load model repeatedly (memory intensive) @@ -731,7 +731,7 @@ def stable_udf(control_message: IngestControlMessage) -> IngestControlMessage: logger = logging.getLogger(__name__) try: - df = control_message.get_payload() + df = control_message.payload() logger.info(f"Processing {len(df)} documents") # Load model once and reuse (consider caching) @@ -889,7 +889,7 @@ def test_my_udf(): result = my_custom_processor(control_message) # Verify results - result_df = result.get_payload() + result_df = result.payload() print(result_df) assert 'custom_field' in result_df.iloc[0]['metadata'] @@ -916,7 +916,7 @@ def debug_udf(control_message: IngestControlMessage) -> IngestControlMessage: logger = logging.getLogger(__name__) try: - df = control_message.get_payload() + df = control_message.payload() logger.info(f"Processing {len(df)} documents") # Log input data structure From cf22e8c6d51d6dff938cb67a02258864e93270cb Mon Sep 17 00:00:00 2001 From: Kurt Heiss Date: Mon, 23 Mar 2026 13:38:49 -0700 Subject: [PATCH 54/94] fix syntax (#1696) fix code syntax in faq --- docs/docs/extraction/faq.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs/extraction/faq.md b/docs/docs/extraction/faq.md index 08b4b96e2..cd99cad9a 100644 --- a/docs/docs/extraction/faq.md +++ b/docs/docs/extraction/faq.md @@ -102,5 +102,5 @@ Ingestor(client=client) .extract() .embed() .caption() -) + ``` From cc33bea5e00465f1b5b59b3f68c4153c909191c4 Mon Sep 17 00:00:00 2001 From: Kurt Heiss Date: Mon, 23 Mar 2026 13:53:49 -0700 Subject: [PATCH 55/94] Kheiss/6000353 - update links to Helm chart (#1697) Kheiss/6000353 - update links to Helm chart (#1697) --- docs/docs/extraction/releasenotes-nv-ingest.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs/extraction/releasenotes-nv-ingest.md b/docs/docs/extraction/releasenotes-nv-ingest.md index 39c4973d8..7872dcd55 100644 --- a/docs/docs/extraction/releasenotes-nv-ingest.md +++ b/docs/docs/extraction/releasenotes-nv-ingest.md @@ -10,7 +10,7 @@ This documentation contains the release notes for [NeMo Retriever Library](overv NVIDIA® NeMo Retriever Library version 26.03 adds broader hardware and software support along with many pipeline, evaluation, and deployment enhancements. -To upgrade the Helm charts for this release, refer to the [NeMo Retriever Library Helm Charts](https://github.com/NVIDIA/NeMo-Retriever/blob/release/26.3.0/helm/README.md). +To upgrade the Helm charts for this release, refer to the [NeMo Retriever Library Helm Charts](https://github.com/NVIDIA/NeMo-Retriever/blob/26.3.0/helm/README.md). Highlights for the 26.03 release include: From fa30ff8327539cf469bc401d4f5b08ebe320e49e Mon Sep 17 00:00:00 2001 From: Kurt Heiss Date: Mon, 23 Mar 2026 15:02:54 -0700 Subject: [PATCH 56/94] Document RTX PRO 4500 Blackwell (GB203) in hardware support matrix 5961722 (#1698) --- docs/docs/extraction/support-matrix.md | 29 +++++++++++++------------- 1 file changed, 14 insertions(+), 15 deletions(-) diff --git a/docs/docs/extraction/support-matrix.md b/docs/docs/extraction/support-matrix.md index 4098ebc33..c38e93760 100644 --- a/docs/docs/extraction/support-matrix.md +++ b/docs/docs/extraction/support-matrix.md @@ -45,30 +45,29 @@ NeMo Retriever Library supports the following GPU hardware. - [A100 Tensor Core GPU](https://www.nvidia.com/en-us/data-center/a100/) - [A10G Tensor Core GPU](https://aws.amazon.com/ec2/instance-types/g5/) - [L40S](https://www.nvidia.com/en-us/data-center/l40s/) +- [RTX PRO 4500 Blackwell](https://www.nvidia.com/en-us/products/workstations/professional-desktop-gpus/rtx-pro-4500/) The following are the hardware requirements to run NeMo Retriever Library. -|Feature | GPU Option | RTX Pro 6000 | B200 | H200 NVL | H100 | A100 80GB | A100 40GB | A10G | L40S | -|----------------|---------------------------|---------------|---------------|---------------|-------------|-------------|---------------|---------------|--------| -| GPU | Memory | 96GB | 180GB | 141GB | 80GB | 80GB | 40GB | 24GB | 48GB | -| Core Features | Total GPUs | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | -| Core Features | Total Disk Space | ~150GB | ~150GB | ~150GB | ~150GB | ~150GB | ~150GB | ~150GB | ~150GB | -| Audio | Additional Dedicated GPUs | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | -| Audio | Additional Disk Space | ~37GB | ~37GB | ~37GB | ~37GB | ~37GB | ~37GB | ~37GB | ~37GB | -| nemotron-parse | Additional Dedicated GPUs | Not supported | Not supported | Not supported | 1 | 1 | 1 | 1 | 1 | -| nemotron-parse | Additional Disk Space | Not supported | Not supported | Not supported | ~16GB | ~16GB | ~16GB | ~16GB | ~16GB | -| VLM | Additional Dedicated GPUs | 1 | 1 | 1 | 1 | 1 | Not supported | Not supported | 1 | -| VLM | Additional Disk Space | ~16GB | ~16GB | ~16GB | ~16GB | ~16GB | Not supported | Not supported | ~16GB | -| Reranker | With Core Pipeline | Yes | Yes | Yes | Yes | Yes | No* | No* | No* | -| Reranker | Standalone (recall only) | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | +|Feature | GPU Option | RTX Pro 6000 | B200 | H200 NVL | H100 | A100 80GB | A100 40GB | A10G | L40S | RTX PRO 4500 Blackwell | +|----------------|---------------------------|---------------|---------------|---------------|-------------|-------------|---------------|---------------|--------|------------------------| +| GPU | Memory | 96GB | 180GB | 141GB | 80GB | 80GB | 40GB | 24GB | 48GB | 32GB GDDR7 (GB203) | +| Core Features | Total GPUs | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | +| Core Features | Total Disk Space | ~150GB | ~150GB | ~150GB | ~150GB | ~150GB | ~150GB | ~150GB | ~150GB | ~150GB | +| Audio | Additional Dedicated GPUs | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1¹ | +| Audio | Additional Disk Space | ~37GB | ~37GB | ~37GB | ~37GB | ~37GB | ~37GB | ~37GB | ~37GB | ~37GB¹ | +| nemotron-parse | Additional Dedicated GPUs | Not supported | Not supported | Not supported | 1 | 1 | 1 | 1 | 1 | Not supported² | +| nemotron-parse | Additional Disk Space | Not supported | Not supported | Not supported | ~16GB | ~16GB | ~16GB | ~16GB | ~16GB | Not supported² | +| VLM | Additional Dedicated GPUs | 1 | 1 | 1 | 1 | 1 | Not supported | Not supported | 1 | Not supported³ | +| VLM | Additional Disk Space | ~16GB | ~16GB | ~16GB | ~16GB | ~16GB | Not supported | Not supported | ~16GB | Not supported³ | +| Reranker | With Core Pipeline | Yes | Yes | Yes | Yes | Yes | No* | No* | No* | No* | +| Reranker | Standalone (recall only) | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | \* GPUs with less than 80GB VRAM cannot run the reranker concurrently with the core pipeline. To perform recall testing with the reranker on these GPUs, shut down the core pipeline NIM microservices and run only the embedder, reranker, and your vector database. - - ## Related Topics - [Prerequisites](prerequisites.md) From 726340cba2f37ad1c65f54b2d3fe869768e17268 Mon Sep 17 00:00:00 2001 From: sosahi Date: Tue, 24 Mar 2026 09:50:53 -0700 Subject: [PATCH 57/94] fixed the contributing.md (#1706) --- CONTRIBUTING.md | 61 +++++- contributing.md | 492 ------------------------------------------------ 2 files changed, 54 insertions(+), 499 deletions(-) delete mode 100644 contributing.md diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 1f549469e..7e91fed05 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -5,8 +5,9 @@ External contributions will be welcome soon, and they are greatly appreciated! E ## Table of Contents 1. [Filing Issues](#filing-issues) -2. [Cloning the Repository](#cloning-the-repository) -3. [Code Contributions](#code-contributions) +2. [Developer Certificate of Origin (DCO)](#developer-certificate-of-origin-dco) +3. [Cloning the Repository](#cloning-the-repository) +4. [Code Contributions](#code-contributions) - [Your First Issue](#your-first-issue) - [Seasoned Developers](#seasoned-developers) - [Workflow](#workflow) @@ -21,7 +22,7 @@ External contributions will be welcome soon, and they are greatly appreciated! E - [Submodules, Third Party Libraries, and Models](#submodules-third-party-libraries-and-models) - [Submodules](#submodules) - [Models](#models) -4. [Architectural Guidelines](#architectural-guidelines) +5. [Architectural Guidelines](#architectural-guidelines) - [Single Responsibility Principle (SRP)](#1-single-responsibility-principle-srp) - [Interface Segregation Principle (ISP)](#2-interface-segregation-principle-isp) - [Dependency Inversion Principle (DIP)](#3-dependency-inversion-principle-dip) @@ -37,9 +38,9 @@ External contributions will be welcome soon, and they are greatly appreciated! E - [Principle of Least Knowledge (Law of Demeter)](#11-principle-of-least-knowledge-law-of-demeter) - [Document Assumptions and Decisions](#12-document-assumptions-and-decisions) - [Continuous Integration and Testing](#13-continuous-integration-and-testing) -5. [Writing Good and Thorough Documentation](#writing-good-and-thorough-documentation) -6. [Licensing](#licensing) -7. [Attribution](#attribution) +6. [Writing Good and Thorough Documentation](#writing-good-and-thorough-documentation) +7. [Licensing](#licensing) +8. [Attribution](#attribution) ## Filing Issues @@ -49,6 +50,52 @@ External contributions will be welcome soon, and they are greatly appreciated! E the problem, feature request, or documentation issue. The NV-Ingest team will review and triage these issues, and if appropriate, schedule them for a future release. +## Developer Certificate of Origin (DCO) + +We require that all contributors "sign-off" on their commits. This certifies that the contribution is your original +work, or you have rights to submit it under the same license, or a compatible license. + +Any contribution which contains commits that are not signed off are not accepted. + +To sign off on a commit, use the `--signoff` (or `-s`) option when you commit your changes: + +```bash +git commit --signoff --message "Add cool feature." +``` + +This appends the following text to your commit message: + +```text +Signed-off-by: Your Name +``` + +### Full text of the Developer Certificate of Origin + +```text +Developer Certificate of Origin +Version 1.1 + +Copyright (C) 2004, 2006 The Linux Foundation and its contributors. +1 Letterman Drive +Suite D4700 +San Francisco, CA, 94129 + +Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. + + +Developer's Certificate of Origin 1.1 + +By making a contribution to this project, I certify that: + +(a) The contribution was created in whole or in part by me and I have the right to submit it under the open source license indicated in the file; or + +(b) The contribution is based upon previous work that, to the best of my knowledge, is covered under an appropriate open source license and I have the right under that license to submit that work with modifications, whether created in whole or in part by me, under the same open source license (unless I am permitted to submit under a different license), as indicated in the file; or + +(c) The contribution was provided directly to me by some other person who certified (a), (b) or (c) and I have not modified it. + +(d) I understand and agree that this project and the contribution are public and that a record of the contribution (including all personal information I submit with it, including my sign-off) is maintained indefinitely and may be redistributed consistent with this project or the open source license(s) involved. +``` + ## Cloning the repository ```bash @@ -489,4 +536,4 @@ Portions adopted from - [https://github.com/nv-morpheus/Morpheus/blob/branch-24.06/CONTRIBUTING.md](https://github.com/nv-morpheus/Morpheus/blob/branch-24.06/CONTRIBUTING.md) - [https://github.com/pytorch/pytorch/blob/master/CONTRIBUTING.md](https://github.com/pytorch/pytorch/blob/master/CONTRIBUTING.md) -- [https://github.com/dask/dask/blob/master/docs/source/develop.rst](https://github.com/dask/dask/blob/master/docs/source/develop.rst) +- [https://github.com/dask/dask/blob/master/docs/source/develop.rst](https://github.com/dask/dask/blob/master/docs/source/develop.rst) \ No newline at end of file diff --git a/contributing.md b/contributing.md deleted file mode 100644 index 1f549469e..000000000 --- a/contributing.md +++ /dev/null @@ -1,492 +0,0 @@ -# Contributing to NV-Ingest - -External contributions will be welcome soon, and they are greatly appreciated! Every little bit helps, and credit will always be given. - -## Table of Contents - -1. [Filing Issues](#filing-issues) -2. [Cloning the Repository](#cloning-the-repository) -3. [Code Contributions](#code-contributions) - - [Your First Issue](#your-first-issue) - - [Seasoned Developers](#seasoned-developers) - - [Workflow](#workflow) - - [Common Processing Patterns](#common-processing-patterns) - - [traceable](#traceable---srcnv_ingestutiltracingtaggingpy) - - [nv_ingest_node_failure_context_manager](#nv_ingest_node_failure_context_manager---srcnv_ingestutilexception_handlersdecoratorspy) - - [filter_by_task](#filter_by_task---srcnv_ingestutilflow_controlfilter_by_taskpy) - - [Adding a New Stage or Module](#adding-a-new-stage-or-module) - - [Common Practices for Writing Unit Tests](#common-practices-for-writing-unit-tests) - - [General Guidelines](#general-guidelines) - - [Mocking External Services](#mocking-external-services) - - [Submodules, Third Party Libraries, and Models](#submodules-third-party-libraries-and-models) - - [Submodules](#submodules) - - [Models](#models) -4. [Architectural Guidelines](#architectural-guidelines) - - [Single Responsibility Principle (SRP)](#1-single-responsibility-principle-srp) - - [Interface Segregation Principle (ISP)](#2-interface-segregation-principle-isp) - - [Dependency Inversion Principle (DIP)](#3-dependency-inversion-principle-dip) - - [Physical Design Structure Mirroring Logical Design Structure](#4-physical-design-structure-mirroring-logical-design-structure) - - [Levelization](#5-levelization) - - [Acyclic Dependencies Principle (ADP)](#6-acyclic-dependencies-principle-adp) - - [Package Cohesion Principles](#7-package-cohesion-principles) - - [Common Closure Principle (CCP)](#common-closure-principle-ccp) - - [Common Reuse Principle (CRP)](#common-reuse-principle-crp) - - [Encapsulate What Varies](#8-encapsulate-what-varies) - - [Favor Composition Over Inheritance](#9-favor-composition-over-inheritance) - - [Clean Separation of Concerns (SoC)](#10-clean-separation-of-concerns-soc) - - [Principle of Least Knowledge (Law of Demeter)](#11-principle-of-least-knowledge-law-of-demeter) - - [Document Assumptions and Decisions](#12-document-assumptions-and-decisions) - - [Continuous Integration and Testing](#13-continuous-integration-and-testing) -5. [Writing Good and Thorough Documentation](#writing-good-and-thorough-documentation) -6. [Licensing](#licensing) -7. [Attribution](#attribution) - -## Filing Issues - -1. **Bug Reports, Feature Requests, and Documentation Issues:** Please file - an [issue](https://github.com/NVIDIA/nv-ingest/issues) with a detailed - description of - the problem, feature request, or documentation issue. The NV-Ingest team will review and triage these issues, - and if appropriate, schedule them for a future release. - -## Cloning the repository - -```bash -DATASET_ROOT=[path to your dataset root] -MODULE_NAME=[] -NV_INGEST_ROOT=[path to your NV-Ingest root] -git clone https://github.com/NVIDIA/nv-ingest.git $NV_INGEST_ROOT -cd $NV_INGEST_ROOT -``` - -Ensure all submodules are checked out: - -```bash -git submodule update --init --recursive -``` - -## Code Contributions - -### Your First Issue - -1. **Finding an Issue:** Start with issues - labeled [good first issue](https://github.com/NVIDIA/nv-ingest/labels/bug). -2. **Claim an Issue:** Comment on the issue you wish to work on. -3. **Implement Your Solution:** Dive into the code! Update or add unit tests as necessary. -4. **Submit Your Pull Request: - ** [Create a pull request](https://github.com/NVIDIA/nv-ingest/pulls) once your - code is ready. -5. **Code Review:** Wait for the review by other developers and make necessary updates. -6. **Merge:** After approval, an NVIDIA developer will approve your pull request. - -### Seasoned Developers - -For those familiar with the codebase, please check -the [project boards](https://github.com/orgs/NVIDIA/projects/48/views/1) for -issues. Look for unassigned issues and follow the steps starting from **Claim an Issue**. - -### Workflow - -1. **NV-Ingest Foundation**: Built on top - of [RAY](https://docs.ray.io/en/latest/serve/architecture.html). - -2. **Pipeline Structure**: Designed around a pipeline that processes individual jobs within an asynchronous execution - graph. Each job is processed by a series of stages or task handlers. - -3. **Job Composition**: Jobs consist of a data payload, metadata, and task specifications that determine the processing - steps applied to the data. - -4. **Job Submission**: - - - A job is submitted as a JSON specification and converted into - a [ControlMessage](https://github.com/nv-morpheus/Morpheus/blob/branch-24.06/docs/source/developer_guide/guides/9_control_messages.md), - with the payload consisting of a cuDF dataframe. - - For example: - ```text - document_type source_id uuid metadata - 0 pdf somefile 1234 { ... } - ``` - - The `metadata` column contents correspond to - the [schema-enforced metadata format of returned data](docs/docs/extraction/content-metadata.md). - -5. **Pipeline Processing**: - - - The `ControlMessage` is passed through the pipeline, where each stage processes the data and metadata as needed. - - Subsequent stages may add, transform, or filter data as needed, with all resulting artifacts stored in - the `ControlMessage`'s payload. - - For example, after processing, the payload may look like: - ```text - document_type source_id uuid metadata - 0 text somefile abcd-1234 {'content': "The quick brown fox jumped...", ...} - 1 image somefile efgh-5678 {'content': "base64 encoded image", ...} - 2 image somefile xyza-5618 {'content': "base64 encoded image", ...} - 3 image somefile zxya-5628 {'content': "base64 encoded image", ...} - 4 status somefile kvq9-5600 {'content': "", 'status': "filtered", ...} - ``` - - A single job can result in multiple artifacts, each with its own metadata element definition. - -6. **Job Completion**: - - Upon reaching the end of the pipeline, the `ControlMessage` is converted into a `JobResult` object and pushed to - the ephemeral output queue for client retrieval. - - `JobResult` objects consist of a dictionary containing: - 1. **data**: A list of metadata artifacts produced by the job. - 2. **status**: The job status as success or failure. - 3. **description**: A human-readable description of the job status. - 4. **trace**: A list of timing traces generated during the job's processing. - 5. **annotations**: A list of task annotations generated during the job's processing. - -### Updating Dependencies - -- Dependencies are managed with `uv` and project-local `pyproject.toml` files. -- Dependencies are stored in package definitions: - 1. **Service Dependencies** `src/pyproject.toml`. - 2. **Client Dependencies** `client/pyproject.toml`. - -- To update dependencies: - - Create a clean environment using `uv venv`. - - Update dependencies in the relevant `pyproject.toml` and validate the changes. - - Recreate the environment and install via `uv pip`. - - For example: - ```bash - uv venv .venv - source .venv/bin/activate - uv pip install -e ./src -e ./client -e ./api - ``` - -### Common Processing Patterns - -In NV-Ingest, decorators are used to enhance the functionality of functions by adding additional processing logic. These -decorators help ensure consistency, traceability, and robust error handling across the pipeline. Below, we introduce -some common decorators used in NV-Ingest, explain their usage, and provide examples. - -#### `traceable` -> `src/nv_ingest/util/tracing/tagging.py` - -The `traceable` decorator adds entry and exit trace timestamps to a `ControlMessage`'s metadata. This helps in -monitoring and debugging by recording the time taken for function execution. - -**Usage:** - -- To track function execution time with default trace names: - ```python - @traceable() - def process_message(message): - pass - ``` -- To use a custom trace name: - ```python - @traceable(trace_name="CustomTraceName") - def process_message(message): - pass - ``` - -#### `nv_ingest_node_failure_context_manager` -> `src/nv_ingest/util/exception_handlers/decorators.py` - -This decorator wraps a function with failure handling logic to manage potential failures involving `ControlMessages`. It -ensures that failures are managed consistently, optionally raising exceptions or annotating the `ControlMessage`. - -**Usage:** - -- To handle failures with default settings: - ```python - @nv_ingest_node_failure_context_manager(annotation_id="example_task") - def process_message(message): - pass - ``` -- To handle failures and allow empty payloads: - ```python - @nv_ingest_node_failure_context_manager(annotation_id="example_task", payload_can_be_empty=True) - def process_message(message): - pass - ``` - -#### `filter_by_task` -> `src/nv_ingest/util/flow_control/filter_by_task.py` - -The `filter_by_task` decorator checks if the `ControlMessage` contains any of the specified tasks. Each task can be a -string of the task name or a tuple of the task name and task properties. If the message does not contain any listed task -and/or task properties, the message is returned directly without calling the wrapped function, unless a forwarding -function is provided. - -**Usage:** - -- To filter messages based on tasks: - ```python - @filter_by_task(["task1", "task2"]) - def process_message(message): - pass - ``` -- To filter messages based on tasks with specific properties: - ```python - @filter_by_task([("task", {"prop": "value"})]) - def process_message(message): - pass - ``` -- To forward messages to another function. This is necessary when the decorated function does not return the message - directly, but instead forwards it to another function. In this case, the forwarding function should be provided as an - argument to the decorator. - ```python - @filter_by_task(["task1", "task2"], forward_func=other_function) - def process_message(message): - pass - ``` - -#### `cm_skip_processing_if_failed` -> `morpheus/utils/control_message_utils.py` - -The `cm_skip_processing_if_failed` decorator skips the processing of a `ControlMessage` if it has already failed. This -ensures that no further processing is attempted on a failed message, maintaining the integrity of the pipeline. - -**Usage:** - -- To skip processing if the message has failed: - ```python - @cm_skip_processing_if_failed - def process_message(message): - pass - ``` - -### Adding a New Stage or Module - -#### TODO(Devin): Add details about adding a new stage or module once we have router node functionality in place. - -### Common Practices for Writing Unit Tests - -Writing unit tests is essential for maintaining code quality and ensuring that changes do not introduce new bugs. In -this project, we use `pytest` for running tests and adopt blackbox testing principles. Below are some common practices -for writing unit tests, which are located in the `[repo_root]/tests` directory. - -#### General Guidelines - -1. **Test Structure**: Each test module should test a specific module or functionality within the codebase. The test - module should be named `test_.py`, and reside on a mirrored physical path to its corresponding test - target to be easily discoverable by `pytest`. - - 1. Example: `nv_ingest/some_path/another_path/my_module.py` should have a corresponding test file: - `tests/some_path/another_path/test_my_module.py`. - -2. **Test Functions**: Each test function should focus on a single aspect of the functionality. Use descriptive names - that clearly indicate what is being tested. For example, `test_function_returns_correct_value` - or `test_function_handles_invalid_input`. - -3. **Setup and Teardown**: Use `pytest` fixtures to manage setup and teardown operations for your tests. Fixtures help - in creating a consistent and reusable setup environment. - -4. **Assertions**: Use assertions to validate the behavior of the code. Ensure that the tests cover both expected - outcomes and edge cases. - -#### Mocking External Services - -When writing tests that depend on external services (e.g., databases, APIs), it is important to mock these dependencies -to ensure that tests are reliable, fast, and do not depend on external factors. - -1. **Mocking Libraries**: Use libraries like `unittest.mock` to create mocks for external services. The `pytest-mock` - plugin can also be used to integrate mocking capabilities directly with `pytest`. - -2. **Mock Objects**: Create mock objects to simulate the behavior of external services. Use these mocks to test how your - code interacts with these services without making actual network calls or database transactions. - -3. **Patching**: Use `patch` to replace real objects in your code with mocks. This can be done at the function, method, - or object level. Ensure that patches are applied in the correct scope to avoid side effects. - -#### Example Test Structure - -Here is an example of how to structure a test module in the `[repo_root]/tests` directory: - -```python -import pytest -from unittest.mock import patch, Mock - -# Assuming the module to test is located at [repo_root]/module.py -from module import function_to_test - - -@pytest.fixture -def mock_external_service(): - with patch('module.ExternalService') as mock_service: - yield mock_service - - -def test_function_returns_correct_value(mock_external_service): - # Arrange - mock_external_service.return_value.some_method.return_value = 'expected_value' - - # Act - result = function_to_test() - - # Assert - assert result == 'expected_value' - - -def test_function_handles_invalid_input(mock_external_service): - # Arrange - mock_external_service.return_value.some_method.side_effect = ValueError("Invalid input") - - # Act and Assert - with pytest.raises(ValueError, match="Invalid input"): - function_to_test(invalid_input) -``` - -## Submodules, Third Party Libraries, and Models - -### Submodules - -1. Submodules are used to manage third-party libraries and dependencies. -2. Submodules should be created in the `third_party` directory. -3. Ensure that the submodule is updated to the latest commit before making changes. - -### Models - -1. **Model Integration**: NV-Ingest is designed to be scalable and flexible, so running models directly in the pipeline - is discouraged. -2. **Model Export**: Models should be exported to a format compatible with Triton Inference Server or TensorRT. - - Model acquisition and conversion should be documented in `triton_models/README.md`, including the model name, - version, pbtxt file, Triton model files, etc., along with an example of how to query the model in Triton. - - Models should be externally hosted and downloaded during the pipeline execution, or added via LFS. - - Any additional code, configuration files, or scripts required to run the model should be included in - the `triton_models/[MODEL_NAME]` directory. -3. **Self-Contained Dependencies**: No assumptions should be made regarding other models or libraries being available in - the pipeline. All dependencies should be self-contained. -4. **Base Triton Container**: Directions for the creation of the base Triton container are listed in - the `triton_models/README.md` file. If a new model requires additional base dependencies, please update - the `Dockerfile` in the `triton_models` directory. - -## Architectural Guidelines - -To ensure the quality and maintainability of the NV-Ingest codebase, the following architectural guidelines should be -followed: - -### 1. Single Responsibility Principle (SRP) - -- Ensure that each module, class, or function has only one reason to change. - -### 2. Interface Segregation Principle (ISP) - -- Avoid forcing clients to depend on interfaces they do not use. - -### 3. Dependency Inversion Principle (DIP) - -- High-level modules should not depend on low-level modules, both should depend on abstractions. - -### 4. Physical Design Structure Mirroring Logical Design Structure - -- The physical layout of the codebase should reflect its logical structure. - -### 5. Levelization - -- Organize code into levels where higher-level components depend on lower-level components but not vice versa. - -### 6. Acyclic Dependencies Principle (ADP) - -- Ensure the dependency graph of packages/modules has no cycles. - -### 7. Package Cohesion Principles - -#### Common Closure Principle (CCP) - -- Package classes that change together. - -#### Common Reuse Principle (CRP) - -- Package classes that are used together. - -### 8. Encapsulate What Varies - -- Identify aspects of the application that vary and separate them from what stays the same. - -### 9. Favor Composition Over Inheritance - -- Utilize object composition over class inheritance for behavior reuse where possible. - -### 10. Clean Separation of Concerns (SoC) - -- Divide the application into distinct features with minimal overlap in functionality. - -### 11. Principle of Least Knowledge (Law of Demeter) - -- Objects should assume as little as possible about the structure or properties of anything else, including their - subcomponents. - -### 12. Document Assumptions and Decisions - -- Assumptions made and reasons behind architectural and design decisions should be clearly documented. - -### 13. Continuous Integration and Testing - -- Integrate code frequently into a shared repository and ensure comprehensive testing is an integral part of the - development cycle. - -Contributors are encouraged to follow these guidelines to ensure contributions are in line with the project's -architectural consistency and maintainability. - - -## Writing Good and Thorough Documentation - -As a contributor to our codebase, writing high-quality documentation is an essential part of ensuring that others can -understand and work with your code effectively. Good documentation helps to reduce confusion, facilitate collaboration, -and streamline the development process. In this guide, we will outline the principles and best practices for writing -thorough and readable documentation that adheres to the Chicago Manual of Style. - -### Chicago Manual of Style - -Our documentation follows the Chicago Manual of Style, a widely accepted standard for writing and formatting. This style -guide provides a consistent approach to writing, grammar, and punctuation, making it easier for readers to understand -and navigate our documentation. - -### Key Principles - -When writing documentation, keep the following principles in mind: - -1. **Clarity**: Use clear and concise language to convey your message. Avoid ambiguity and jargon that may confuse readers. -2. **Accuracy**: Ensure that your documentation is accurate and up-to-date. Verify facts, details, and code snippets - before publishing. -3. **Completeness**: Provide all necessary information to understand the code, including context, syntax, and examples. -4. **Consistency**: Use a consistent tone, voice, and style throughout the documentation. -5. **Accessibility**: Make your documentation easy to read and understand by using headings, bullet points, and short paragraphs. - -### Documentation Structure - -A well-structured documentation page should include the following elements: - -1. **Header**: A brief title that summarizes the content of the page. -2. **Introduction**: A short overview of the topic, including its purpose and relevance. -3. **Syntax and Parameters**: A detailed explanation of the code syntax, including parameters, data types, and return values. -4. **Examples**: Concrete examples that illustrate how to use the code, including input and output. -5. **Tips and Variations**: Additional information, such as best practices, common pitfalls, and alternative approaches. -6. **Related Resources**: Links to relevant documentation, tutorials, and external resources. - -### Best Practices - -To ensure high-quality documentation, follow these best practices: - -1. **Use headings and subheadings**: Organize your content with clear headings and subheadings to facilitate scanning and navigation. -2. **Use bullet points and lists**: Break up complex information into easy-to-read lists and bullet points. -3. **Provide context**: Give readers a clear understanding of the code's purpose, history, and relationships to other components. -4. **Review and edit**: Carefully review and edit your documentation to ensure accuracy, completeness, and consistency. - -### Resources - -For more information on the Chicago Manual of Style, refer to their -[online published version](https://www.chicagomanualofstyle.org/home.html?_ga=2.188145128.1312333204.1728079521-706076405.1727890116). - -By following these guidelines and principles, you will be able to create high-quality documentation that helps others -understand and work with your code effectively. Remember to always prioritize clarity, accuracy, and completeness, and -to use the Chicago Style Guide as your reference for writing and formatting. - - -## Licensing - -NV-Ingest is licensed under the NVIDIA Proprietary Software License -- ensure that any contributions are compatible. - -The following should be included in the header of any new files: - -```text -SPDX-FileCopyrightText: Copyright (c) 2024, NVIDIA CORPORATION & AFFILIATES. -All rights reserved. -SPDX-License-Identifier: Apache-2.0 -``` - -## Attribution - -Portions adopted from - -- [https://github.com/nv-morpheus/Morpheus/blob/branch-24.06/CONTRIBUTING.md](https://github.com/nv-morpheus/Morpheus/blob/branch-24.06/CONTRIBUTING.md) -- [https://github.com/pytorch/pytorch/blob/master/CONTRIBUTING.md](https://github.com/pytorch/pytorch/blob/master/CONTRIBUTING.md) -- [https://github.com/dask/dask/blob/master/docs/source/develop.rst](https://github.com/dask/dask/blob/master/docs/source/develop.rst) From ad96fc9c41a250c21f947a74709e576c359c0b49 Mon Sep 17 00:00:00 2001 From: Kurt Heiss Date: Tue, 24 Mar 2026 12:21:03 -0700 Subject: [PATCH 58/94] add contributing.md back to repository (#1709) --- docs/docs/extraction/contributing.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 docs/docs/extraction/contributing.md diff --git a/docs/docs/extraction/contributing.md b/docs/docs/extraction/contributing.md new file mode 100644 index 000000000..6a136c218 --- /dev/null +++ b/docs/docs/extraction/contributing.md @@ -0,0 +1,4 @@ +# Contributing to NV-Ingest + +External contributions to NV-Ingest will be welcome soon, and they are greatly appreciated! +For more information, refer to [Contributing to NV-Ingest](https://github.com/NVIDIA/nv-ingest/blob/main/CONTRIBUTING.md). From bcaf8f34b46870f037f476f90fc960e3945c058f Mon Sep 17 00:00:00 2001 From: Kurt Heiss Date: Tue, 24 Mar 2026 13:18:58 -0700 Subject: [PATCH 59/94] Kheiss/6000353 - update links to older RNs (#1712) --- docs/docs/extraction/releasenotes-nv-ingest.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/docs/extraction/releasenotes-nv-ingest.md b/docs/docs/extraction/releasenotes-nv-ingest.md index 7872dcd55..f744e0fb8 100644 --- a/docs/docs/extraction/releasenotes-nv-ingest.md +++ b/docs/docs/extraction/releasenotes-nv-ingest.md @@ -42,8 +42,8 @@ Highlights for the 26.03 release include: | [25.6.2](https://docs.nvidia.com/nemo/retriever/25.6.2/extraction/releasenotes-nv-ingest/) | [25.4.2](https://docs.nvidia.com/nemo/retriever/25.4.2/extraction/releasenotes-nv-ingest/) | [25.3.0](https://docs.nvidia.com/nemo/retriever/25.3.0/extraction/releasenotes-nv-ingest/) -| [24.12.1](https://docs.nvidia.com/nemo/retriever/25.3.0/extraction/releasenotes-nv-ingest/) -| [24.12.0](https://docs.nvidia.com/nemo/retriever/25.3.0/extraction/releasenotes-nv-ingest/) +| [24.12.1](https://docs.nvidia.com/nemo/retriever/25.3.0/extraction/releasenotes-nv-ingest/#release-24121) +| [24.12.0](https://docs.nvidia.com/nemo/retriever/25.3.0/extraction/releasenotes-nv-ingest/#release-2412) ## Related Topics From 486a0de59c1ae6eaf27cc000a05ea089e8aa17f1 Mon Sep 17 00:00:00 2001 From: Kurt Heiss Date: Tue, 24 Mar 2026 14:22:15 -0700 Subject: [PATCH 60/94] Kheiss/5966538 - document Python 3.12+ as a prerequisite for NeMo Retriever Library (#1715) removed inclusion of Python requirements in the support matrix --- docs/docs/extraction/prerequisites.md | 5 +- docs/docs/extraction/quickstart-guide.md | 4 + .../extraction/quickstart-library-mode.md | 2 +- docs/docs/extraction/support-matrix.md | 76 ------------------- 4 files changed, 8 insertions(+), 79 deletions(-) delete mode 100644 docs/docs/extraction/support-matrix.md diff --git a/docs/docs/extraction/prerequisites.md b/docs/docs/extraction/prerequisites.md index 3cb7b6d74..64c67faaf 100644 --- a/docs/docs/extraction/prerequisites.md +++ b/docs/docs/extraction/prerequisites.md @@ -16,12 +16,13 @@ Before you begin using [NeMo Retriever Library](overview.md), ensure the followi - [Docker Buildx](https://docs.docker.com/build/concepts/overview/#buildx) `>= 0.17` (Compose 2.40+ enforces this) - [CUDA Toolkit](https://developer.nvidia.com/cuda-downloads) (NVIDIA Driver >= `535`, CUDA >= `12.2`) - [NVIDIA Container Toolkit](https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html) -- [UV Python package and environment manager](https://docs.astral.sh/uv/getting-started/installation/) +- [Python](https://www.python.org/downloads/) `>= 3.12` — required to install and run the NeMo Retriever Library Python API, CLI, and related packages from PyPI (for example `pip` or `uv`). Older Python versions will fail dependency resolution without a clear error. +- [UV Python package and environment manager](https://docs.astral.sh/uv/getting-started/installation/) (optional; recommended for creating isolated environments) !!! note - You install Python later. + When you use UV, create the environment with Python 3.12 or later — for example, `uv venv --python 3.12`. This matches the `requires-python` metadata in the library packages. diff --git a/docs/docs/extraction/quickstart-guide.md b/docs/docs/extraction/quickstart-guide.md index 460a17355..1c03d0b03 100644 --- a/docs/docs/extraction/quickstart-guide.md +++ b/docs/docs/extraction/quickstart-guide.md @@ -105,6 +105,10 @@ h. Run the command `docker ps`. You should see output similar to the following. You can submit jobs programmatically in Python or using the [CLI](nv-ingest_cli.md). +!!! important "Python version" + + Install the client and CLI into an environment that uses Python 3.12 or later. The published packages require Python `>= 3.12`; using Python 3.10 or 3.11 typically fails with dependency resolution errors. See [Prerequisites](prerequisites.md) and [Support Matrix](support-matrix.md). + The following examples demonstrate how to extract text, charts, tables, and images: - **extract_text** — Uses [PDFium](https://github.com/pypdfium2-team/pypdfium2/) to find and extract text from pages. diff --git a/docs/docs/extraction/quickstart-library-mode.md b/docs/docs/extraction/quickstart-library-mode.md index 7afe7c8c5..32f69d714 100644 --- a/docs/docs/extraction/quickstart-library-mode.md +++ b/docs/docs/extraction/quickstart-library-mode.md @@ -4,4 +4,4 @@ NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. -Use the [Quick Start for NeMo Retriever Library](https://github.com/NVIDIA/NeMo-Retriever/blob/26.03/nemo_retriever/README.md) to set up and run the NeMo Retriever Library locally, so you can build a GPU‑accelerated, multimodal RAG ingestion pipeline that parses PDFs, HTML, text, audio, and video into LanceDB vector embeddings, integrates with Nemotron RAG models (locally or via NIM endpoints), which includes Ray‑based scaling with built‑in recall evaluation. \ No newline at end of file +Use the [Quick Start for NeMo Retriever Library](https://github.com/NVIDIA/NeMo-Retriever/blob/26.03/nemo_retriever/README.md) to set up and run the NeMo Retriever Library locally, so you can build a GPU‑accelerated, multimodal RAG ingestion pipeline that parses PDFs, HTML, text, audio, and video into LanceDB vector embeddings, integrates with Nemotron RAG models (locally or via NIM endpoints), which includes Ray‑based scaling with built‑in recall evaluation. Python 3.12 or later is required (see [Prerequisites](prerequisites.md)). diff --git a/docs/docs/extraction/support-matrix.md b/docs/docs/extraction/support-matrix.md deleted file mode 100644 index c38e93760..000000000 --- a/docs/docs/extraction/support-matrix.md +++ /dev/null @@ -1,76 +0,0 @@ -# Support Matrix for NeMo Retriever Library - -Before you begin using [NeMo Retriever Library](overview.md), ensure that you have the hardware for your use case. - -!!! note - - NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. - - -## Core and Advanced Pipeline Features - -The Nemo Retriever Library extraction core pipeline features run on a single A10G or better GPU. -The core pipeline features include the following: - -- llama-nemotron-embed-1b-v2 — Embedding model for converting text chunks into vectors. -- nemotron-page-elements-v3 — Detects and classifies images on a page as a table, chart or infographic. -- nemotron-table-structure-v1 — Detects rows, columns, and cells within a table to preserve table structure and convert to Markdown format. -- nemotron-graphic-elements-v1 — Detects graphic elements within chart images such as titles, legends, axes, and numerical values. -- nemotron-ocr-v1 — Image OCR model to detect and extract text from images. -- retrieval — Enables embedding and indexing into Milvus. - -Advanced features require additional GPU support and disk space. -This includes the following: - -- Audio extraction — Use [Riva](https://docs.nvidia.com/deeplearning/riva/user-guide/docs/index.html) for processing audio files. For more information, refer to [Audio Processing](audio.md). -- Advanced visual parsing — Use [nemotron-parse](https://docs.nvidia.com/nim/vision-language-models/latest/examples/nemotron-parse/overview.html), which adds state-of-the-art text and table extraction. For more information, refer to [Advanced Visual Parsing ](nemoretriever-parse.md). -- git — Use [nemotron-nano-12b-v2-vl](https://build.nvidia.com/nvidia/nemotron-nano-12b-v2-vl/modelcard) for experimental image captioning of unstructured images. - - !!! note - - While nemotron-nano-12b-v2-vl is the default VLM, you can configure and use other vision language models for image captioning based on your specific use case requirements. For more information, refer to [Extract Captions from Images](nv-ingest-python-api.md#extract-captions-from-images). - -- Reranker — Use [llama-3.2-nv-rerankqa-1b-v2](https://build.nvidia.com/nvidia/llama-3.2-nv-rerankqa-1b-v2) for improved retrieval accuracy. - - - -## Hardware Requirements - -NeMo Retriever Library supports the following GPU hardware. - -- [RTX Pro 6000 Blackwell Server Edition](https://www.nvidia.com/en-us/data-center/rtx-pro-6000-blackwell-server-edition/) -- [DGX B200](https://www.nvidia.com/en-us/data-center/dgx-b200/) -- [H200 NVL](https://www.nvidia.com/en-us/data-center/h200/) -- [H100 Tensor Core GPU](https://www.nvidia.com/en-us/data-center/h100/) -- [A100 Tensor Core GPU](https://www.nvidia.com/en-us/data-center/a100/) -- [A10G Tensor Core GPU](https://aws.amazon.com/ec2/instance-types/g5/) -- [L40S](https://www.nvidia.com/en-us/data-center/l40s/) -- [RTX PRO 4500 Blackwell](https://www.nvidia.com/en-us/products/workstations/professional-desktop-gpus/rtx-pro-4500/) - - -The following are the hardware requirements to run NeMo Retriever Library. - -|Feature | GPU Option | RTX Pro 6000 | B200 | H200 NVL | H100 | A100 80GB | A100 40GB | A10G | L40S | RTX PRO 4500 Blackwell | -|----------------|---------------------------|---------------|---------------|---------------|-------------|-------------|---------------|---------------|--------|------------------------| -| GPU | Memory | 96GB | 180GB | 141GB | 80GB | 80GB | 40GB | 24GB | 48GB | 32GB GDDR7 (GB203) | -| Core Features | Total GPUs | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | -| Core Features | Total Disk Space | ~150GB | ~150GB | ~150GB | ~150GB | ~150GB | ~150GB | ~150GB | ~150GB | ~150GB | -| Audio | Additional Dedicated GPUs | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1¹ | -| Audio | Additional Disk Space | ~37GB | ~37GB | ~37GB | ~37GB | ~37GB | ~37GB | ~37GB | ~37GB | ~37GB¹ | -| nemotron-parse | Additional Dedicated GPUs | Not supported | Not supported | Not supported | 1 | 1 | 1 | 1 | 1 | Not supported² | -| nemotron-parse | Additional Disk Space | Not supported | Not supported | Not supported | ~16GB | ~16GB | ~16GB | ~16GB | ~16GB | Not supported² | -| VLM | Additional Dedicated GPUs | 1 | 1 | 1 | 1 | 1 | Not supported | Not supported | 1 | Not supported³ | -| VLM | Additional Disk Space | ~16GB | ~16GB | ~16GB | ~16GB | ~16GB | Not supported | Not supported | ~16GB | Not supported³ | -| Reranker | With Core Pipeline | Yes | Yes | Yes | Yes | Yes | No* | No* | No* | No* | -| Reranker | Standalone (recall only) | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | - -\* GPUs with less than 80GB VRAM cannot run the reranker concurrently with the core pipeline. -To perform recall testing with the reranker on these GPUs, shut down the core pipeline NIM microservices -and run only the embedder, reranker, and your vector database. - -## Related Topics - -- [Prerequisites](prerequisites.md) -- [Release Notes](releasenotes-nv-ingest.md) -- [NVIDIA NIM for Vision Language Models Support Matrix](https://docs.nvidia.com/nim/vision-language-models/latest/support-matrix.html) -- [NVIDIA NVIDIA Riva Support Matrix](https://docs.nvidia.com/deeplearning/riva/user-guide/docs/support-matrix/support-matrix.html) From f07e881bedf118d19b6a5089f92cf2f7a2bfb79a Mon Sep 17 00:00:00 2001 From: Kurt Heiss Date: Wed, 25 Mar 2026 11:28:21 -0700 Subject: [PATCH 61/94] Aligns NeMo Retriever Library extraction docs with the current default pipeline by removing references to deprecated PDF extractors and obsolete OCR API usage left over from the NeMo Retriever Library transition. (#1727) --- docs/docs/extraction/cli-reference.md | 2 +- docs/docs/extraction/faq.md | 1 - docs/docs/extraction/nv-ingest_cli.md | 2 +- docs/docs/extraction/overview.md | 2 +- 4 files changed, 3 insertions(+), 4 deletions(-) diff --git a/docs/docs/extraction/cli-reference.md b/docs/docs/extraction/cli-reference.md index 5bee4f046..6ce311402 100644 --- a/docs/docs/extraction/cli-reference.md +++ b/docs/docs/extraction/cli-reference.md @@ -203,7 +203,7 @@ nemo-retriever \ To submit a .pdf file with both a splitting task and an extraction task, run the following code. !!! note - Currently, `split` only works for pdfium, nemotron-parse, and Unstructured.io. + Currently, `split` only works for pdfium and nemotron-parse. ```bash nemo-retriever \ diff --git a/docs/docs/extraction/faq.md b/docs/docs/extraction/faq.md index cd99cad9a..40b5ea376 100644 --- a/docs/docs/extraction/faq.md +++ b/docs/docs/extraction/faq.md @@ -87,7 +87,6 @@ Ingestor(client=client) extract_tables=True, extract_charts=True, extract_images=True, - paddle_output_format="markdown", extract_infographics=True, text_depth="page" ) diff --git a/docs/docs/extraction/nv-ingest_cli.md b/docs/docs/extraction/nv-ingest_cli.md index 718e656c2..5ab8cd095 100644 --- a/docs/docs/extraction/nv-ingest_cli.md +++ b/docs/docs/extraction/nv-ingest_cli.md @@ -65,7 +65,7 @@ nv-ingest-cli \ To submit a .pdf file with both a splitting task and an extraction task, run the following code. !!! note - Currently, `split` only works for pdfium, nemotron-parse, and Unstructured.io. + Currently, `split` only works for pdfium and nemotron-parse. ```bash nv-ingest-cli \ diff --git a/docs/docs/extraction/overview.md b/docs/docs/extraction/overview.md index 2404b1f10..83c94f415 100644 --- a/docs/docs/extraction/overview.md +++ b/docs/docs/extraction/overview.md @@ -28,7 +28,7 @@ NeMo Retriever Library is a microservice service that does the following: - Accept a JSON job description, containing a document payload, and a set of ingestion tasks to perform on that payload. - Allow the results of a job to be retrieved. The result is a JSON dictionary that contains a list of metadata describing objects extracted from the base document, and processing annotations and timing/trace data. -- Support multiple methods of extraction for each document type to balance trade-offs between throughput and accuracy. For example, for .pdf documents, extraction is performed by using pdfium, [nemotron-parse](https://build.nvidia.com/nvidia/nemotron-parse), Unstructured.io, and Adobe Content Extraction Services. +- Support multiple methods of extraction for each document type to balance trade-offs between throughput and accuracy. For example, for .pdf documents, extraction is performed by using pdfium and [nemotron-parse](https://build.nvidia.com/nvidia/nemotron-parse). - Support various types of pre- and post- processing operations, including text splitting and chunking, transform and filtering, embedding generation, and image offloading to storage. NeMo Retriever Library supports the following file types: From f6e5869bfd3498943b7e3e71d69cb39705799322 Mon Sep 17 00:00:00 2001 From: Kurt Heiss Date: Wed, 25 Mar 2026 11:29:03 -0700 Subject: [PATCH 62/94] Align nemotron-parse overview with three methods (NVBug 5965574); (#1725) --- docs/docs/extraction/nemoretriever-parse.md | 3 ++- docs/docs/extraction/quickstart-library-mode.md | 7 ------- 2 files changed, 2 insertions(+), 8 deletions(-) delete mode 100644 docs/docs/extraction/quickstart-library-mode.md diff --git a/docs/docs/extraction/nemoretriever-parse.md b/docs/docs/extraction/nemoretriever-parse.md index 56ebdc6a2..51fe136ed 100644 --- a/docs/docs/extraction/nemoretriever-parse.md +++ b/docs/docs/extraction/nemoretriever-parse.md @@ -4,11 +4,12 @@ For scanned documents, or documents with complex layouts, we recommend that you use [nemotron-parse](https://build.nvidia.com/nvidia/nemotron-parse). Nemotron parse provides higher-accuracy text extraction. -This documentation describes the following two methods +This documentation describes the following three methods to run [NeMo Retriever Library](overview.md) with nemotron-parse. - Run the NIM locally by using Docker Compose - Use NVIDIA Cloud Functions (NVCF) endpoints for cloud-based inference +- Run the Ray batch pipeline with nemotron-parse ([library mode](quickstart-library-mode.md)) !!! note diff --git a/docs/docs/extraction/quickstart-library-mode.md b/docs/docs/extraction/quickstart-library-mode.md deleted file mode 100644 index 32f69d714..000000000 --- a/docs/docs/extraction/quickstart-library-mode.md +++ /dev/null @@ -1,7 +0,0 @@ -# Deploy Without Containers (Library Mode) for NeMo Retriever Library - -!!! note - - NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. - -Use the [Quick Start for NeMo Retriever Library](https://github.com/NVIDIA/NeMo-Retriever/blob/26.03/nemo_retriever/README.md) to set up and run the NeMo Retriever Library locally, so you can build a GPU‑accelerated, multimodal RAG ingestion pipeline that parses PDFs, HTML, text, audio, and video into LanceDB vector embeddings, integrates with Nemotron RAG models (locally or via NIM endpoints), which includes Ray‑based scaling with built‑in recall evaluation. Python 3.12 or later is required (see [Prerequisites](prerequisites.md)). From 998f26b4d0576d28055b89cc880258a4a954c9cc Mon Sep 17 00:00:00 2001 From: Kurt Heiss Date: Wed, 25 Mar 2026 16:58:10 -0700 Subject: [PATCH 63/94] Kheiss/updates0325 (#1734) --- .../extraction/quickstart-library-mode.md | 7 ++ docs/docs/extraction/support-matrix.md | 76 +++++++++++++++++++ 2 files changed, 83 insertions(+) create mode 100644 docs/docs/extraction/quickstart-library-mode.md create mode 100644 docs/docs/extraction/support-matrix.md diff --git a/docs/docs/extraction/quickstart-library-mode.md b/docs/docs/extraction/quickstart-library-mode.md new file mode 100644 index 000000000..32f69d714 --- /dev/null +++ b/docs/docs/extraction/quickstart-library-mode.md @@ -0,0 +1,7 @@ +# Deploy Without Containers (Library Mode) for NeMo Retriever Library + +!!! note + + NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. + +Use the [Quick Start for NeMo Retriever Library](https://github.com/NVIDIA/NeMo-Retriever/blob/26.03/nemo_retriever/README.md) to set up and run the NeMo Retriever Library locally, so you can build a GPU‑accelerated, multimodal RAG ingestion pipeline that parses PDFs, HTML, text, audio, and video into LanceDB vector embeddings, integrates with Nemotron RAG models (locally or via NIM endpoints), which includes Ray‑based scaling with built‑in recall evaluation. Python 3.12 or later is required (see [Prerequisites](prerequisites.md)). diff --git a/docs/docs/extraction/support-matrix.md b/docs/docs/extraction/support-matrix.md new file mode 100644 index 000000000..70e0a5447 --- /dev/null +++ b/docs/docs/extraction/support-matrix.md @@ -0,0 +1,76 @@ +# Support Matrix for NeMo Retriever Library + +Before you begin using [NeMo Retriever Library](overview.md), ensure that you have the hardware for your use case. + +!!! note + + NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. + + +## Core and Advanced Pipeline Features + +The Nemo Retriever Library extraction core pipeline features run on a single A10G or better GPU. +The core pipeline features include the following: + +- llama-nemotron-embed-1b-v2 — Embedding model for converting text chunks into vectors. +- nemotron-page-elements-v3 — Detects and classifies images on a page as a table, chart or infographic. +- nemotron-table-structure-v1 — Detects rows, columns, and cells within a table to preserve table structure and convert to Markdown format. +- nemotron-graphic-elements-v1 — Detects graphic elements within chart images such as titles, legends, axes, and numerical values. +- nemotron-ocr-v1 — Image OCR model to detect and extract text from images. +- retrieval — Enables embedding and indexing into Milvus. + +Advanced features require additional GPU support and disk space. +This includes the following: + +- Audio extraction — Use [Riva](https://docs.nvidia.com/deeplearning/riva/user-guide/docs/index.html) for processing audio files. For more information, refer to [Audio Processing](audio.md). +- Advanced visual parsing — Use [nemotron-parse](https://docs.nvidia.com/nim/vision-language-models/latest/examples/nemotron-parse/overview.html), which adds state-of-the-art text and table extraction. For more information, refer to [Advanced Visual Parsing ](nemoretriever-parse.md). +- VLM — Use [nemotron-nano-12b-v2-vl](https://build.nvidia.com/nvidia/nemotron-nano-12b-v2-vl/modelcard) for experimental image captioning of unstructured images. + + !!! note + + While nemotron-nano-12b-v2-vl is the default VLM, you can configure and use other vision language models for image captioning based on your specific use case requirements. For more information, refer to [Extract Captions from Images](nv-ingest-python-api.md#extract-captions-from-images). + +- Reranker — Use [llama-3.2-nv-rerankqa-1b-v2](https://build.nvidia.com/nvidia/llama-3.2-nv-rerankqa-1b-v2) for improved retrieval accuracy. + + + +## Hardware Requirements + +NeMo Retriever Library supports the following GPU hardware. + +- [RTX Pro 6000 Blackwell Server Edition](https://www.nvidia.com/en-us/data-center/rtx-pro-6000-blackwell-server-edition/) +- [DGX B200](https://www.nvidia.com/en-us/data-center/dgx-b200/) +- [H200 NVL](https://www.nvidia.com/en-us/data-center/h200/) +- [H100 Tensor Core GPU](https://www.nvidia.com/en-us/data-center/h100/) +- [A100 Tensor Core GPU](https://www.nvidia.com/en-us/data-center/a100/) +- [A10G Tensor Core GPU](https://aws.amazon.com/ec2/instance-types/g5/) +- [L40S](https://www.nvidia.com/en-us/data-center/l40s/) +- [RTX PRO 4500 Blackwell](https://www.nvidia.com/en-us/products/workstations/professional-desktop-gpus/rtx-pro-4500/) + + +The following are the hardware requirements to run NeMo Retriever Library. + +|Feature | GPU Option | RTX Pro 6000 | B200 | H200 NVL | H100 | A100 80GB | A100 40GB | A10G | L40S | RTX PRO 4500 Blackwell | +|----------------|---------------------------|---------------|---------------|---------------|-------------|-------------|---------------|---------------|--------|------------------------| +| GPU | Memory | 96GB | 180GB | 141GB | 80GB | 80GB | 40GB | 24GB | 48GB | 32GB GDDR7 (GB203) | +| Core Features | Total GPUs | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | +| Core Features | Total Disk Space | ~150GB | ~150GB | ~150GB | ~150GB | ~150GB | ~150GB | ~150GB | ~150GB | ~150GB | +| Audio | Additional Dedicated GPUs | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1¹ | +| Audio | Additional Disk Space | ~37GB | ~37GB | ~37GB | ~37GB | ~37GB | ~37GB | ~37GB | ~37GB | ~37GB¹ | +| nemotron-parse | Additional Dedicated GPUs | Not supported | Not supported | Not supported | 1 | 1 | 1 | 1 | 1 | Not supported² | +| nemotron-parse | Additional Disk Space | Not supported | Not supported | Not supported | ~16GB | ~16GB | ~16GB | ~16GB | ~16GB | Not supported² | +| VLM | Additional Dedicated GPUs | 1 | 1 | 1 | 1 | 1 | Not supported | Not supported | 1 | Not supported³ | +| VLM | Additional Disk Space | ~16GB | ~16GB | ~16GB | ~16GB | ~16GB | Not supported | Not supported | ~16GB | Not supported³ | +| Reranker | With Core Pipeline | Yes | Yes | Yes | Yes | Yes | No* | No* | No* | No* | +| Reranker | Standalone (recall only) | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | + +\* GPUs with less than 80GB VRAM cannot run the reranker concurrently with the core pipeline. +To perform recall testing with the reranker on these GPUs, shut down the core pipeline NIM microservices +and run only the embedder, reranker, and your vector database. + +## Related Topics + +- [Prerequisites](prerequisites.md) +- [Release Notes](releasenotes-nv-ingest.md) +- [NVIDIA NIM for Vision Language Models Support Matrix](https://docs.nvidia.com/nim/vision-language-models/latest/support-matrix.html) +- [NVIDIA NVIDIA Riva Support Matrix](https://docs.nvidia.com/deeplearning/riva/user-guide/docs/support-matrix/support-matrix.html) From a6ef79ae8e2f18efbf5c62acd697ff992bbbda00 Mon Sep 17 00:00:00 2001 From: Kurt Heiss Date: Thu, 26 Mar 2026 10:14:32 -0700 Subject: [PATCH 64/94] removed duplication of the word NVIDIA (#1736) --- docs/docs/extraction/support-matrix.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs/extraction/support-matrix.md b/docs/docs/extraction/support-matrix.md index 70e0a5447..c8006f677 100644 --- a/docs/docs/extraction/support-matrix.md +++ b/docs/docs/extraction/support-matrix.md @@ -73,4 +73,4 @@ and run only the embedder, reranker, and your vector database. - [Prerequisites](prerequisites.md) - [Release Notes](releasenotes-nv-ingest.md) - [NVIDIA NIM for Vision Language Models Support Matrix](https://docs.nvidia.com/nim/vision-language-models/latest/support-matrix.html) -- [NVIDIA NVIDIA Riva Support Matrix](https://docs.nvidia.com/deeplearning/riva/user-guide/docs/support-matrix/support-matrix.html) +- [NVIDIA Riva Support Matrix](https://docs.nvidia.com/deeplearning/riva/user-guide/docs/support-matrix/support-matrix.html) From a07ac1dcf217f9dd940ceb2e97bab4f039f3a47a Mon Sep 17 00:00:00 2001 From: Kurt Heiss Date: Thu, 26 Mar 2026 10:21:23 -0700 Subject: [PATCH 65/94] removed reference to zipking (#1737) --- docs/docs/extraction/telemetry.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/docs/extraction/telemetry.md b/docs/docs/extraction/telemetry.md index fcdf6d876..b42c3b6aa 100644 --- a/docs/docs/extraction/telemetry.md +++ b/docs/docs/extraction/telemetry.md @@ -20,7 +20,7 @@ After OpenTelemetry and Zipkin are running, you can open your browser to explore After Prometheus is running, you can open your browser to explore metrics: -- **Docker** — Use http://$YOUR_DOCKER_HOST:9090/zipkin/ -- **Kubernetes** — Use http://$YOUR_K8S_OTEL_POD:9090/zipkin/ +- **Docker** — Use http://$YOUR_DOCKER_HOST:9090/ +- **Kubernetes** — Use http://$YOUR_K8S_OTEL_POD:9090/ ![](images/prometheus.png) From fd1353a0e48436a013a1eb9c1bd22260dce51f03 Mon Sep 17 00:00:00 2001 From: Kurt Heiss Date: Fri, 27 Mar 2026 13:32:23 -0700 Subject: [PATCH 66/94] Fixed bug 5966370 (#1744) --- docs/docs/extraction/quickstart-guide.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/docs/extraction/quickstart-guide.md b/docs/docs/extraction/quickstart-guide.md index 1c03d0b03..0f000198f 100644 --- a/docs/docs/extraction/quickstart-guide.md +++ b/docs/docs/extraction/quickstart-guide.md @@ -476,11 +476,11 @@ docker compose \ ## Specify MIG slices for NIM models -When you deploy the pipeline with NIM models on MIG‑enabled GPUs, MIG device slices are requested and scheduled through the `values.yaml` file for the corresponding NIM microservice. For IBM Content-Aware Storage (CAS) deployments, this allows NIM pods to land only on nodes that expose the desired MIG profiles [raw.githubusercontent](https://raw.githubusercontent.com/NVIDIA/nv-ingest/main/helm/README.md%E2%80%8B).​ +When you deploy the pipeline with NIM models on MIG‑enabled GPUs, MIG device slices are requested and scheduled through the `values.yaml` file for the corresponding NIM microservice. For IBM Content-Aware Storage (CAS) deployments, this allows NIM pods to land only on nodes that expose the desired MIG profiles [raw.githubusercontent](https://raw.githubusercontent.com/NVIDIA/nv-ingest/main/helm/README.md). To target a specific MIG profile—for example, a 3g.20gb slice on an A100, which is a hardware-partitioned virtual GPU instance that gives your workload a fixed mid-sized share of the A100’s compute plus 20 GB of dedicated GPU memory and behaves like a smaller independent GPU—for a given NIM, configure the `resources` and `nodeSelector` under that NIM’s values path in `values.yaml`. -The following example shows the pattern. Paths vary by NIM, such as `nvingest.nvidiaNim.nemoretrieverPageElements` instead of the generic `nvingest.nim` placeholder. For details refer to [catalog.ngc.nvidia](https://catalog.ngc.nvidia.com/orgs/nvidia/teams/nemo-microservices/helm-charts/nv-ingest)​. +The following example shows the pattern. Paths vary by NIM, such as `nvingest.nvidiaNim.nemoretrieverPageElements` instead of the generic `nvingest.nim` placeholder. For details refer to [catalog.ngc.nvidia](https://catalog.ngc.nvidia.com/orgs/nvidia/teams/nemo-microservices/helm-charts/nv-ingest). Set `resources.requests` and `resources.limits` to the name of the MIG resource that you want (for example, `nvidia.com/mig-3g.20gb`). ```shell nvingest: From c63daab5669c71a7227065b0ee2462732a2d6499 Mon Sep 17 00:00:00 2001 From: Kurt Heiss Date: Mon, 30 Mar 2026 08:30:29 -0700 Subject: [PATCH 67/94] Align production GPU examples with support matrix (NVBug 5965601) (#1728) --- docs/docs/extraction/prerequisites.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs/extraction/prerequisites.md b/docs/docs/extraction/prerequisites.md index 64c67faaf..3f7947f58 100644 --- a/docs/docs/extraction/prerequisites.md +++ b/docs/docs/extraction/prerequisites.md @@ -38,7 +38,7 @@ For additional hardware details, refer to [Support Matrix](support-matrix.md). - **System Memory**: At least 256 GB RAM - **CPU Cores**: At least 32 CPU cores -- **GPU**: NVIDIA GPU with at least 24 GB VRAM (e.g., A100, V100, or equivalent) +- **GPU**: NVIDIA GPU with at least 24 GB VRAM (e.g., A100, H100, L40S, or equivalent) !!! note From 9dc88b51efe4f7528cf76a27967862a40f7e03ff Mon Sep 17 00:00:00 2001 From: Kurt Heiss Date: Mon, 30 Mar 2026 10:24:21 -0700 Subject: [PATCH 68/94] Kheiss/5966722 (#1743) --- docs/docs/license.md | 23 +++++++++++++++++++++++ docs/mkdocs.yml | 5 ++++- 2 files changed, 27 insertions(+), 1 deletion(-) create mode 100644 docs/docs/license.md diff --git a/docs/docs/license.md b/docs/docs/license.md new file mode 100644 index 000000000..891d21e03 --- /dev/null +++ b/docs/docs/license.md @@ -0,0 +1,23 @@ +# License + +This page summarizes where to find licensing terms for the nv-ingest project, third-party components, and related NVIDIA software. + +## Apache License 2.0 + +The nv-ingest source code and documentation in this repository are licensed under the **Apache License, Version 2.0**, unless otherwise noted. + +- **Full text:** [LICENSE](https://github.com/NVIDIA/nv-ingest/blob/main/LICENSE) in the repository ([raw text](https://raw.githubusercontent.com/NVIDIA/nv-ingest/main/LICENSE)) + +## Third-party licenses + +The authoritative list in the repository is [THIRD_PARTY_LICENSES.md](https://github.com/NVIDIA/nv-ingest/blob/main/THIRD_PARTY_LICENSES.md). Contents: + +--8<-- "THIRD_PARTY_LICENSES.md:3" + +## NVIDIA NIM container images + +**NVIDIA NIM** container images and related deployment artifacts are distributed under terms that are separate from the Apache 2.0 license that applies to this repository’s source code. **NIM container images are subject to the [NVIDIA Software License Agreement](https://www.nvidia.com/en-us/agreements/enterprise-software/nvidia-software-license-agreement/)** (or the agreement linked from NVIDIA at the time you obtain the software). Review those terms before deploying or redistributing NIM-based workflows. + +## Contributing and license compatibility + +Contribution guidelines and notes on license compatibility are in **[CONTRIBUTING.md](https://github.com/NVIDIA/nv-ingest/blob/main/CONTRIBUTING.md)** in the repository. diff --git a/docs/mkdocs.yml b/docs/mkdocs.yml index 678ae4cfa..02b9aafed 100644 --- a/docs/mkdocs.yml +++ b/docs/mkdocs.yml @@ -96,6 +96,7 @@ nav: - Troubleshoot: extraction/troubleshoot.md - FAQ: extraction/faq.md - Contribute: extraction/contributing.md + - License: license.md plugins: @@ -138,7 +139,9 @@ markdown_extensions: - pymdownx.snippets: check_paths: true restrict_base_path: False - base_path: "." + base_path: + - . + - .. - pymdownx.emoji: emoji_index: !!python/name:material.extensions.emoji.twemoji emoji_generator: !!python/name:material.extensions.emoji.to_svg From 6c3c2a64a6cb0c9ccca66ea9952942b492c0b24f Mon Sep 17 00:00:00 2001 From: Kurt Heiss Date: Mon, 30 Mar 2026 10:31:42 -0700 Subject: [PATCH 69/94] Updated files per bugs 5970369, 5966307, and 5966925 (#1740) --- docs/docs/extraction/audio.md | 10 +++++----- docs/docs/extraction/nv-ingest-python-api.md | 2 +- docs/docs/extraction/python-api-reference.md | 2 +- docs/docs/extraction/quickstart-guide.md | 2 +- docs/docs/extraction/support-matrix.md | 8 ++++---- docs/docs/extraction/troubleshoot.md | 4 ++-- 6 files changed, 14 insertions(+), 14 deletions(-) diff --git a/docs/docs/extraction/audio.md b/docs/docs/extraction/audio.md index 4e2c749cf..d13d9c1c3 100644 --- a/docs/docs/extraction/audio.md +++ b/docs/docs/extraction/audio.md @@ -1,8 +1,8 @@ # Extract Speech with NeMo Retriever Library This documentation describes two methods to run [NeMo Retriever Library](overview.md) -with the [RIVA ASR NIM microservice](https://docs.nvidia.com/deeplearning/riva/user-guide/docs/index.html) -to extract speech from audio files. +with the [parakeet-1-1b-ctc-en-us ASR NIM microservice](https://docs.nvidia.com/nim/speech/latest/asr/deploy-asr-models/parakeet-ctc-en-us.html) +(`nvcr.io/nim/nvidia/parakeet-1-1b-ctc-en-us`) to extract speech from audio files. - Run the NIM locally by using Docker Compose - Use NVIDIA Cloud Functions (NVCF) endpoints for cloud-based inference @@ -22,12 +22,12 @@ Currently, you can extract speech from the following file types: [NeMo Retriever Library](overview.md) supports extracting speech from audio files for Retrieval Augmented Generation (RAG) applications. Similar to how the multimodal document extraction pipeline leverages object detection and image OCR microservices, -NeMo Retriever leverages the [RIVA ASR NIM microservice](https://docs.nvidia.com/deeplearning/riva/user-guide/docs/index.html) +NeMo Retriever leverages the [parakeet-1-1b-ctc-en-us ASR NIM microservice](https://docs.nvidia.com/nim/speech/latest/asr/deploy-asr-models/parakeet-ctc-en-us.html) to transcribe speech to text, which is then embedded by using the NeMo Retriever embedding NIM. !!! important - Due to limitations in available VRAM controls in the current release, the RIVA ASR NIM microservice must run on a [dedicated additional GPU](support-matrix.md). For the full list of requirements, refer to [Support Matrix](https://docs.nvidia.com/deeplearning/riva/user-guide/docs/support-matrix.html). + Due to limitations in available VRAM controls in the current release, the parakeet-1-1b-ctc-en-us ASR NIM microservice must run on a [dedicated additional GPU](support-matrix.md). For the full list of requirements, refer to [Support Matrix](support-matrix.md). This pipeline enables users to retrieve speech files at the segment level. @@ -43,7 +43,7 @@ Use the following procedure to run the NIM locally. !!! important - The RIVA ASR NIM microservice must run on a [dedicated additional GPU](support-matrix.md). Edit docker-compose.yaml to set the device_id to a dedicated GPU: device_ids: ["1"] or higher. + The parakeet-1-1b-ctc-en-us ASR NIM microservice must run on a [dedicated additional GPU](support-matrix.md). Edit docker-compose.yaml to set the device_id to a dedicated GPU: device_ids: ["1"] or higher. 1. To access the required container images, log in to the NVIDIA Container Registry (nvcr.io). Use [your NGC key](ngc-api-key.md) as the password. Run the following command in your terminal. diff --git a/docs/docs/extraction/nv-ingest-python-api.md b/docs/docs/extraction/nv-ingest-python-api.md index 106bdf76d..190460315 100644 --- a/docs/docs/extraction/nv-ingest-python-api.md +++ b/docs/docs/extraction/nv-ingest-python-api.md @@ -571,5 +571,5 @@ results = ingestor.ingest() - [Split Documents](chunking.md) - [Troubleshoot Nemo Retriever Extraction](troubleshoot.md) - [Advanced Visual Parsing](nemoretriever-parse.md) -- [Use NeMo Retriever Library with Riva for Audio Processing](audio.md) +- [Use NeMo Retriever Library with the Parakeet ASR NIM for Audio Processing](audio.md) - [Use Multimodal Embedding](vlm-embed.md) diff --git a/docs/docs/extraction/python-api-reference.md b/docs/docs/extraction/python-api-reference.md index 7feb020f1..46c1a1b16 100644 --- a/docs/docs/extraction/python-api-reference.md +++ b/docs/docs/extraction/python-api-reference.md @@ -663,5 +663,5 @@ results = ingestor.ingest() - [Split Documents](chunking.md) - [Troubleshoot NeMo Retriever Library](troubleshoot.md) - [Advanced Visual Parsing](nemoretriever-parse.md) -- [Use the NeMo Retriever Library with Riva for Audio Processing](audio.md) +- [Use the NeMo Retriever Library with the Parakeet ASR NIM for Audio Processing](audio.md) - [Use Multimodal Embedding](vlm-embed.md) diff --git a/docs/docs/extraction/quickstart-guide.md b/docs/docs/extraction/quickstart-guide.md index 0f000198f..f0ca7cbd1 100644 --- a/docs/docs/extraction/quickstart-guide.md +++ b/docs/docs/extraction/quickstart-guide.md @@ -393,7 +393,7 @@ You can specify multiple `--profile` options. | Profile | Type | Description | |-----------------------|----------|-------------------------------------------------------------------| | `retrieval` | Core | Enables the embedding NIM and (optional) GPU-accelerated Milvus. Omit this profile to use the default LanceDB backend. | -| `audio` | Advanced | Use [Riva](https://docs.nvidia.com/deeplearning/riva/user-guide/docs/index.html) for processing audio files. For more information, refer to [Audio Processing](audio.md). | +| `audio` | Advanced | Use the [parakeet-1-1b-ctc-en-us](https://docs.nvidia.com/nim/speech/latest/asr/deploy-asr-models/parakeet-ctc-en-us.html) ASR NIM (`nvcr.io/nim/nvidia/parakeet-1-1b-ctc-en-us`) for processing audio files. For more information, refer to [Audio Processing](audio.md). | | `nemotron-parse` | Advanced | Use [nemotron-parse](https://build.nvidia.com/nvidia/nemotron-parse), which adds state-of-the-art text and table extraction. For more information, refer to [Advanced Visual Parsing](nemoretriever-parse.md). | | `vlm` | Advanced | Use [llama 3.1 Nemotron 8B Vision](https://build.nvidia.com/nvidia/llama-3.1-nemotron-nano-vl-8b-v1/modelcard) for image captioning of unstructured images and infographics. This profile enables the `caption` method in the Python API to generate text descriptions of visual content. For more information, refer to [Use Multimodal Embedding](vlm-embed.md) and [Extract Captions from Images](nv-ingest-python-api.md#extract-captions-from-images). | diff --git a/docs/docs/extraction/support-matrix.md b/docs/docs/extraction/support-matrix.md index c8006f677..cb1a56eef 100644 --- a/docs/docs/extraction/support-matrix.md +++ b/docs/docs/extraction/support-matrix.md @@ -22,7 +22,7 @@ The core pipeline features include the following: Advanced features require additional GPU support and disk space. This includes the following: -- Audio extraction — Use [Riva](https://docs.nvidia.com/deeplearning/riva/user-guide/docs/index.html) for processing audio files. For more information, refer to [Audio Processing](audio.md). +- Audio extraction - parakeet-1-1b-ctc-en-us — Use the [Parakeet CTC English (en-US) ASR NIM](https://docs.nvidia.com/nim/speech/latest/asr/deploy-asr-models/parakeet-ctc-en-us.html) (`nvcr.io/nim/nvidia/parakeet-1-1b-ctc-en-us`) for processing audio files. For more information, refer to [Audio Processing](audio.md). - Advanced visual parsing — Use [nemotron-parse](https://docs.nvidia.com/nim/vision-language-models/latest/examples/nemotron-parse/overview.html), which adds state-of-the-art text and table extraction. For more information, refer to [Advanced Visual Parsing ](nemoretriever-parse.md). - VLM — Use [nemotron-nano-12b-v2-vl](https://build.nvidia.com/nvidia/nemotron-nano-12b-v2-vl/modelcard) for experimental image captioning of unstructured images. @@ -55,8 +55,8 @@ The following are the hardware requirements to run NeMo Retriever Library. | GPU | Memory | 96GB | 180GB | 141GB | 80GB | 80GB | 40GB | 24GB | 48GB | 32GB GDDR7 (GB203) | | Core Features | Total GPUs | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | | Core Features | Total Disk Space | ~150GB | ~150GB | ~150GB | ~150GB | ~150GB | ~150GB | ~150GB | ~150GB | ~150GB | -| Audio | Additional Dedicated GPUs | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1¹ | -| Audio | Additional Disk Space | ~37GB | ~37GB | ~37GB | ~37GB | ~37GB | ~37GB | ~37GB | ~37GB | ~37GB¹ | +| Audio (parakeet-1-1b-ctc-en-us) | Additional Dedicated GPUs | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1¹ | +| Audio (parakeet-1-1b-ctc-en-us) | Additional Disk Space | ~37GB | ~37GB | ~37GB | ~37GB | ~37GB | ~37GB | ~37GB | ~37GB | ~37GB¹ | | nemotron-parse | Additional Dedicated GPUs | Not supported | Not supported | Not supported | 1 | 1 | 1 | 1 | 1 | Not supported² | | nemotron-parse | Additional Disk Space | Not supported | Not supported | Not supported | ~16GB | ~16GB | ~16GB | ~16GB | ~16GB | Not supported² | | VLM | Additional Dedicated GPUs | 1 | 1 | 1 | 1 | 1 | Not supported | Not supported | 1 | Not supported³ | @@ -73,4 +73,4 @@ and run only the embedder, reranker, and your vector database. - [Prerequisites](prerequisites.md) - [Release Notes](releasenotes-nv-ingest.md) - [NVIDIA NIM for Vision Language Models Support Matrix](https://docs.nvidia.com/nim/vision-language-models/latest/support-matrix.html) -- [NVIDIA Riva Support Matrix](https://docs.nvidia.com/deeplearning/riva/user-guide/docs/support-matrix/support-matrix.html) +- [NVIDIA Speech NIM Microservices](https://docs.nvidia.com/nim/speech/latest/reference/support-matrix/index.html) diff --git a/docs/docs/extraction/troubleshoot.md b/docs/docs/extraction/troubleshoot.md index ca3cc6da4..6edc3c0a2 100644 --- a/docs/docs/extraction/troubleshoot.md +++ b/docs/docs/extraction/troubleshoot.md @@ -40,7 +40,7 @@ Before you change the `-u` setting, consider the following: - For `-u` we recommend 10,000 as a baseline, but you might need to raise or lower it based on your actual usage and system configuration. ```bash -ulimit -u 10,000 +ulimit -u 10000 ``` @@ -89,7 +89,7 @@ Before you change the `-n` setting, consider the following: - For `-n` we recommend 10,000 as a baseline, but you might need to raise or lower it based on your actual usage and system configuration. ```bash -ulimit -n 10,000 +ulimit -n 10000 ``` From 53262b452df8b97cd61ca9918d1b4e281059eeb1 Mon Sep 17 00:00:00 2001 From: Kurt Heiss Date: Mon, 30 Mar 2026 11:05:53 -0700 Subject: [PATCH 70/94] Align VLM caption model and MinIO defaults with runtime (#1739) Co-authored-by: sosahi --- docs/docs/extraction/nv-ingest-python-api.md | 4 ++-- docs/docs/extraction/python-api-reference.md | 8 ++++---- docs/docs/extraction/quickstart-guide.md | 2 +- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/docs/docs/extraction/nv-ingest-python-api.md b/docs/docs/extraction/nv-ingest-python-api.md index 190460315..ddf4b1aa7 100644 --- a/docs/docs/extraction/nv-ingest-python-api.md +++ b/docs/docs/extraction/nv-ingest-python-api.md @@ -372,7 +372,7 @@ You can use this to generate descriptions of unstructured images, infographics, !!! note - To use the `caption` option, enable the `vlm` profile when you start the NeMo Retriever Library services. The default model used by `caption` is `nvidia/llama-3.1-nemotron-nano-vl-8b-v1`. For more information, refer to [Profile Information in the Quickstart Guide](quickstart-guide.md#profile-information). + To use the `caption` option, enable the `vlm` profile when you start the NeMo Retriever Library services. The default model used by `caption` is `nvidia/nemotron-nano-12b-v2-vl`. For more information, refer to [Profile Information in the Quickstart Guide](quickstart-guide.md#profile-information). ### Basic Usage @@ -389,7 +389,7 @@ To specify a different API endpoint, pass additional parameters to `caption`. ```python ingestor = ingestor.caption( endpoint_url="https://integrate.api.nvidia.com/v1/chat/completions", - model_name="nvidia/llama-3.1-nemotron-nano-vl-8b-v1", + model_name="nvidia/nemotron-nano-12b-v2-vl", api_key="nvapi-" ) ``` diff --git a/docs/docs/extraction/python-api-reference.md b/docs/docs/extraction/python-api-reference.md index 46c1a1b16..b856daae8 100644 --- a/docs/docs/extraction/python-api-reference.md +++ b/docs/docs/extraction/python-api-reference.md @@ -464,7 +464,7 @@ You can use this to generate descriptions of unstructured images, infographics, !!! note - To use the `caption` option, enable the `vlm` profile when you start the NeMo Retriever Library services. The default model used by `caption` is `nvidia/llama-3.1-nemotron-nano-vl-8b-v1`. For more information, refer to [Profile Information in the Quickstart Guide](quickstart-guide.md#profile-information). + To use the `caption` option, enable the `vlm` profile when you start the NeMo Retriever Library services. The default model used by `caption` is `nvidia/nemotron-nano-12b-v2-vl`. For more information, refer to [Profile Information in the Quickstart Guide](quickstart-guide.md#profile-information). ### Basic Usage @@ -481,7 +481,7 @@ To specify a different API endpoint, pass additional parameters to `caption`. ```python ingestor = ingestor.caption( endpoint_url="https://integrate.api.nvidia.com/v1/chat/completions", - model_name="nvidia/llama-3.1-nemotron-nano-vl-8b-v1", + model_name="nvidia/nemotron-nano-12b-v2-vl", api_key="nvapi-" ) ``` @@ -570,11 +570,11 @@ The `store` task uses [fsspec](https://filesystem-spec.readthedocs.io/) for stor | Amazon S3 | `s3://` | `s3://my-bucket/extracted-images` | | Google Cloud Storage | `gs://` | `gs://my-bucket/images` | | Azure Blob Storage | `abfs://` | `abfs://container@account.dfs.core.windows.net/images` | -| MinIO (S3-compatible) | `s3://` | `s3://nemo-retriever/artifacts/store/images` (default) | +| MinIO (S3-compatible) | `s3://` | `s3://nv-ingest/artifacts/store/images` (default) | !!! tip - `storage_uri` defaults to the server-side `IMAGE_STORAGE_URI` environment variable (commonly `s3://nemo-retriever/...`). If you change that variable—for example to a host-mounted `file://` path—restart the NeMo Retriever Library runtime so the container picks up the new value. + `storage_uri` defaults to the server-side `IMAGE_STORAGE_URI` environment variable (commonly `s3://nv-ingest/...`). If you change that variable—for example to a host-mounted `file://` path—restart the NeMo Retriever Library runtime so the container picks up the new value. When `public_base_url` is provided, the metadata returned from `ingest()` surfaces that HTTP(S) link while still recording the underlying storage URI. Leave it unset when the storage endpoint itself is already publicly reachable. diff --git a/docs/docs/extraction/quickstart-guide.md b/docs/docs/extraction/quickstart-guide.md index f0ca7cbd1..98081dc94 100644 --- a/docs/docs/extraction/quickstart-guide.md +++ b/docs/docs/extraction/quickstart-guide.md @@ -395,7 +395,7 @@ You can specify multiple `--profile` options. | `retrieval` | Core | Enables the embedding NIM and (optional) GPU-accelerated Milvus. Omit this profile to use the default LanceDB backend. | | `audio` | Advanced | Use the [parakeet-1-1b-ctc-en-us](https://docs.nvidia.com/nim/speech/latest/asr/deploy-asr-models/parakeet-ctc-en-us.html) ASR NIM (`nvcr.io/nim/nvidia/parakeet-1-1b-ctc-en-us`) for processing audio files. For more information, refer to [Audio Processing](audio.md). | | `nemotron-parse` | Advanced | Use [nemotron-parse](https://build.nvidia.com/nvidia/nemotron-parse), which adds state-of-the-art text and table extraction. For more information, refer to [Advanced Visual Parsing](nemoretriever-parse.md). | -| `vlm` | Advanced | Use [llama 3.1 Nemotron 8B Vision](https://build.nvidia.com/nvidia/llama-3.1-nemotron-nano-vl-8b-v1/modelcard) for image captioning of unstructured images and infographics. This profile enables the `caption` method in the Python API to generate text descriptions of visual content. For more information, refer to [Use Multimodal Embedding](vlm-embed.md) and [Extract Captions from Images](nv-ingest-python-api.md#extract-captions-from-images). | +| `vlm` | Advanced | Use [Nemotron Nano 12B v2 VL](https://build.nvidia.com/nvidia/nemotron-nano-12b-v2-vl/modelcard) for image captioning of unstructured images and infographics. This profile enables the `caption` method in the Python API to generate text descriptions of visual content. For more information, refer to [Use Multimodal Embedding](vlm-embed.md) and [Extract Captions from Images](nv-ingest-python-api.md#extract-captions-from-images). | ### Example: Using the VLM Profile for Infographic Captioning From 1a91164d10143e47ac9a6960a4b1a7e054c3c966 Mon Sep 17 00:00:00 2001 From: Kurt Heiss Date: Mon, 30 Mar 2026 11:09:13 -0700 Subject: [PATCH 71/94] added licensing info to documentation (#1750) --- docs/docs/index.md | 1 + docs/docs/license.md | 13 +++++++++---- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/docs/docs/index.md b/docs/docs/index.md index 0349ea38f..04955e1f7 100644 --- a/docs/docs/index.md +++ b/docs/docs/index.md @@ -43,6 +43,7 @@ The following are some applications that use NVIDIA Nemo Retriever: ## Related Topics +- [License](license.md) - [NeMo Retriever Text Embedding NIM](https://docs.nvidia.com/nim/nemo-retriever/text-embedding/latest/overview.html) - [NeMo Retriever Text Reranking NIM](https://docs.nvidia.com/nim/nemo-retriever/text-reranking/latest/overview.html) - [NVIDIA NIM for Object Detection](https://docs.nvidia.com/nim/ingestion/object-detection/latest/overview.html) diff --git a/docs/docs/license.md b/docs/docs/license.md index 891d21e03..5fad129bb 100644 --- a/docs/docs/license.md +++ b/docs/docs/license.md @@ -2,15 +2,20 @@ This page summarizes where to find licensing terms for the nv-ingest project, third-party components, and related NVIDIA software. -## Apache License 2.0 +## License The nv-ingest source code and documentation in this repository are licensed under the **Apache License, Version 2.0**, unless otherwise noted. -- **Full text:** [LICENSE](https://github.com/NVIDIA/nv-ingest/blob/main/LICENSE) in the repository ([raw text](https://raw.githubusercontent.com/NVIDIA/nv-ingest/main/LICENSE)) +Reference links to the main license file in the GitHub repository: -## Third-party licenses +- [LICENSE](https://github.com/NVIDIA/nv-ingest/blob/main/LICENSE) (repository file on GitHub) +- [LICENSE (raw text)](https://raw.githubusercontent.com/NVIDIA/nv-ingest/main/LICENSE) (raw view for download or copy) -The authoritative list in the repository is [THIRD_PARTY_LICENSES.md](https://github.com/NVIDIA/nv-ingest/blob/main/THIRD_PARTY_LICENSES.md). Contents: +## Third-Party Licenses + +- **NeMo Retriever:** [Third Party License Notice](https://github.com/NVIDIA/NeMo-Retriever/blob/main/README.md#notices) in the NeMo Retriever README. + +The authoritative third-party list for this repository is [THIRD_PARTY_LICENSES.md](https://github.com/NVIDIA/nv-ingest/blob/main/THIRD_PARTY_LICENSES.md). Contents: --8<-- "THIRD_PARTY_LICENSES.md:3" From b5d7b9657b4607d38c447c0e5cd56298c973e3ff Mon Sep 17 00:00:00 2001 From: Kurt Heiss Date: Mon, 30 Mar 2026 11:25:34 -0700 Subject: [PATCH 72/94] updated quickstart guide file per 5966239 (#1751) --- docs/docs/extraction/quickstart-guide.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/docs/docs/extraction/quickstart-guide.md b/docs/docs/extraction/quickstart-guide.md index 98081dc94..4e8f29f1a 100644 --- a/docs/docs/extraction/quickstart-guide.md +++ b/docs/docs/extraction/quickstart-guide.md @@ -279,8 +279,7 @@ You should see output that indicates the document processing status followed by ``` None of PyTorch, TensorFlow >= 2.0, or Flax have been found. Models won't be available and only tokenizers, configuration and file/data utilities can be used. [nltk_data] Downloading package punkt_tab to -[nltk_data] /raid/jdyer/miniforge3/envs/nv-ingest- -[nltk_data] dev/lib/python3.10/site- +[nltk_data] /path/to/your/venv/lib/python3.12/site- [nltk_data] packages/llama_index/core/_static/nltk_cache... [nltk_data] Package punkt_tab is already up-to-date! INFO:nv_ingest_client.nv_ingest_cli:Processing 1 documents. From 4744677a20e61eef24412dc13ad7b86e68df3e7c Mon Sep 17 00:00:00 2001 From: Kurt Heiss Date: Mon, 30 Mar 2026 11:29:42 -0700 Subject: [PATCH 73/94] update support matrix to add footnotes --- docs/docs/extraction/support-matrix.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/docs/docs/extraction/support-matrix.md b/docs/docs/extraction/support-matrix.md index cb1a56eef..b109be691 100644 --- a/docs/docs/extraction/support-matrix.md +++ b/docs/docs/extraction/support-matrix.md @@ -64,6 +64,12 @@ The following are the hardware requirements to run NeMo Retriever Library. | Reranker | With Core Pipeline | Yes | Yes | Yes | Yes | Yes | No* | No* | No* | No* | | Reranker | Standalone (recall only) | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | +¹ Audio runs but requires runtime engine build — no pre-defined model profile. + +² Nemotron Parse fails to start on 32GB, pending engineering investigation. + +³ VLM fails to load on 32GB, 32GB is below the minimum threshold. + \* GPUs with less than 80GB VRAM cannot run the reranker concurrently with the core pipeline. To perform recall testing with the reranker on these GPUs, shut down the core pipeline NIM microservices and run only the embedder, reranker, and your vector database. From e8759e20a2cead8c52e9ac50ac20ceb1b72f6653 Mon Sep 17 00:00:00 2001 From: Kurt Heiss Date: Mon, 30 Mar 2026 11:39:41 -0700 Subject: [PATCH 74/94] update support matrix to add footnotes (#1752) --- docs/docs/extraction/support-matrix.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/docs/docs/extraction/support-matrix.md b/docs/docs/extraction/support-matrix.md index cb1a56eef..b109be691 100644 --- a/docs/docs/extraction/support-matrix.md +++ b/docs/docs/extraction/support-matrix.md @@ -64,6 +64,12 @@ The following are the hardware requirements to run NeMo Retriever Library. | Reranker | With Core Pipeline | Yes | Yes | Yes | Yes | Yes | No* | No* | No* | No* | | Reranker | Standalone (recall only) | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | +¹ Audio runs but requires runtime engine build — no pre-defined model profile. + +² Nemotron Parse fails to start on 32GB, pending engineering investigation. + +³ VLM fails to load on 32GB, 32GB is below the minimum threshold. + \* GPUs with less than 80GB VRAM cannot run the reranker concurrently with the core pipeline. To perform recall testing with the reranker on these GPUs, shut down the core pipeline NIM microservices and run only the embedder, reranker, and your vector database. From 29f787baf4f6cacb13885445a03ef55b9448a2fe Mon Sep 17 00:00:00 2001 From: Kurt Heiss Date: Tue, 31 Mar 2026 11:44:01 -0700 Subject: [PATCH 75/94] Kheiss/5966297update (#1758) --- docs/docs/extraction/benchmarking.md | 35 ++++++++++++++++------------ 1 file changed, 20 insertions(+), 15 deletions(-) diff --git a/docs/docs/extraction/benchmarking.md b/docs/docs/extraction/benchmarking.md index 30488fa60..8a18ce62a 100644 --- a/docs/docs/extraction/benchmarking.md +++ b/docs/docs/extraction/benchmarking.md @@ -5,7 +5,7 @@ A configurable, dataset-agnostic testing framework for end-to-end validation of ## Dataset Prerequisites -Before you run any benchmarking or evaluation tests, you must first download the benchmark datasets. The three primary datasets used in nv-ingest benchmarking and evaluations are the following: +Before you run any benchmarking or evaluation tests, you must first download the benchmark datasets. The three primary datasets used in nv-ingest benchmarking and evaluations include: - **Bo20** - 20 PDFs for quick testing - **Bo767** - 767 PDFs for comprehensive benchmarking @@ -13,7 +13,7 @@ Before you run any benchmarking or evaluation tests, you must first download the ### How to Download the Datasets -Use the [Digital Corpora Download Notebook](https://github.com/NVIDIA/nv-ingest/blob/main/evaluation/digital_corpora_download.ipynb) to download these datasets from the public Digital Corpora source. This notebook provides automated download functions that do the following: +Use the [Digital Corpora Download Notebook](https://github.com/NVIDIA/nv-ingest/blob/main/evaluation/digital_corpora_download.ipynb) to download these datasets from the public Digital Corpora source. This notebook provides automated download functions that enable the following: - Download PDFs directly from Digital Corpora's public repository. - Support all three dataset sizes (Bo20, Bo767, Bo10k). @@ -59,6 +59,8 @@ The framework uses a structured YAML file for all test configuration. Configurat #### Active Configuration +`api_version` `v2` is the default configuration. Use `v1` only when it is necessary to explicitly override this default value. + The `active` section contains your current test settings. Edit these values directly for your test runs: ```yaml @@ -68,16 +70,19 @@ active: test_name: null # Auto-generated if null # API Configuration - api_version: v1 # v1 or v2 + api_version: v2 # v1 or v2 pdf_split_page_count: null # V2 only: pages per chunk (null = default 32) # Infrastructure hostname: localhost readiness_timeout: 600 - profiles: [retrieval] + compose: + profiles: + - retrieval + - reranker # Required for recall evaluation # Runtime - sparse: true + sparse: false gpu_search: false embedding_model: auto @@ -109,7 +114,7 @@ Each dataset includes its path, extraction settings, and recall evaluator in one ```yaml datasets: bo767: - path: /raid/jioffe/bo767 + path: /datasets/nv-ingest/bo767 extract_text: true extract_tables: true extract_charts: true @@ -118,16 +123,16 @@ datasets: recall_dataset: bo767 # Evaluator for recall testing bo20: - path: /raid/jioffe/bo20 + path: /datasets/nv-ingest/bo20 extract_text: true extract_tables: true extract_charts: true extract_images: true - extract_infographics: false + extract_infographics: true recall_dataset: null # bo20 does not have recall earnings: - path: /raid/jioffe/earnings_conusulting + path: /datasets/nv-ingest/earnings_consulting extract_text: true extract_tables: true extract_charts: true @@ -159,7 +164,7 @@ uv run nv-ingest-harness-run --case=e2e --dataset=/custom/path |---------|------|--------|--------|--------|--------------|--------| | `bo767` | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | | `earnings` | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | -| `bo20` | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | +| `bo20` | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | | `financebench` | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | `single` | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | @@ -173,11 +178,11 @@ Settings are applied in order of priority: Example: ```bash -# YAML active section has api_version: v1 +# YAML active section has api_version: v2 # Dataset bo767 has extract_images: false # Override via environment variable (highest priority) -EXTRACT_IMAGES=true API_VERSION=v2 uv run nv-ingest-harness-run --case=e2e --dataset=bo767 -# Result: Uses bo767 path, but extract_images=true (env override) and api_version=v2 (env override) +EXTRACT_IMAGES=true API_VERSION=v1 uv run nv-ingest-harness-run --case=e2e --dataset=bo767 +# Result: Uses bo767 path, but extract_images=true (env override) and api_version=v1 (env override) ``` **Precedence Details:** @@ -211,7 +216,7 @@ EXTRACT_IMAGES=true API_VERSION=v2 uv run nv-ingest-harness-run --case=e2e --dat #### Infrastructure Options - `hostname` (string): Service hostname - `readiness_timeout` (integer): Docker startup timeout in seconds -- `profiles` (list): Docker compose profiles +- `compose.profiles` (list): Docker Compose profiles, nested under `compose` in YAML (loaded as top-level `profiles`) #### Runtime Options - `sparse` (boolean): Use sparse embeddings @@ -631,7 +636,7 @@ tools/harness/artifacts/__UTC/ Enable per-document element breakdown: ```bash -uv run nv-ingest-harness-run --case=e2e --doc-analysis +uv run nv-ingest-harness-run --case=e2e --dataset=bo767 --doc-analysis ``` **Sample Output:** From c5e1c22efe26968bb002edf23610fc542baf5c68 Mon Sep 17 00:00:00 2001 From: Kurt Heiss Date: Tue, 31 Mar 2026 13:05:21 -0700 Subject: [PATCH 76/94] Align VLM caption model, fix V2 ingest() example, document run_pipeline; misc README/Helm fixesUpdating files per bugs 5966185, 5966211, and 5966281 (#1742) Co-authored-by: sosahi --- .../extraction/quickstart-library-mode.md | 37 +++++++++++++++++++ docs/docs/extraction/v2-api-guide.md | 5 ++- 2 files changed, 40 insertions(+), 2 deletions(-) diff --git a/docs/docs/extraction/quickstart-library-mode.md b/docs/docs/extraction/quickstart-library-mode.md index 32f69d714..d86a1b9d0 100644 --- a/docs/docs/extraction/quickstart-library-mode.md +++ b/docs/docs/extraction/quickstart-library-mode.md @@ -5,3 +5,40 @@ NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. Use the [Quick Start for NeMo Retriever Library](https://github.com/NVIDIA/NeMo-Retriever/blob/26.03/nemo_retriever/README.md) to set up and run the NeMo Retriever Library locally, so you can build a GPU‑accelerated, multimodal RAG ingestion pipeline that parses PDFs, HTML, text, audio, and video into LanceDB vector embeddings, integrates with Nemotron RAG models (locally or via NIM endpoints), which includes Ray‑based scaling with built‑in recall evaluation. Python 3.12 or later is required (see [Prerequisites](prerequisites.md)). + +## `run_pipeline` + +The primary Python entry point for launching the Ray-based ingestion pipeline in library mode is `run_pipeline` in `nv_ingest.framework.orchestration.ray.util.pipeline.pipeline_runners`. + +```python +from nv_ingest.framework.orchestration.ray.util.pipeline.pipeline_runners import run_pipeline +``` + +### Parameters + +The following table matches the function signature in source (defaults and optionality). **None of these parameters are required** in the sense of having no default; omit them to use the defaults shown. + +| Parameter | Required | Type (default) | Description | +|-----------|----------|----------------|-------------| +| `pipeline_config` | No | `Optional[PipelineConfigSchema]` (`None`) | Validated pipeline configuration. If `None` and `libmode=True`, the default library-mode pipeline is loaded automatically. If `None` and `libmode=False`, a `ValueError` is raised—you must pass a configuration. | +| `block` | No | `bool` (`True`) | If `True`, the call blocks until the pipeline finishes. If `False`, returns immediately with a handle object (see [Return type](#return-type)). | +| `disable_dynamic_scaling` | No | `Optional[bool]` (`None`) | If set, overrides the same field from the pipeline configuration. | +| `dynamic_memory_threshold` | No | `Optional[float]` (`None`) | If set, overrides the same field from the pipeline configuration. | +| `run_in_subprocess` | No | `bool` (`False`) | If `True`, runs the pipeline in a separate Python subprocess (`multiprocessing.Process`). If `False`, runs in the current process. | +| `stdout` | No | `Optional[TextIO]` (`None`) | When using a subprocess, optional stream for child stdout; if `None`, stdout is discarded. | +| `stderr` | No | `Optional[TextIO]` (`None`) | When using a subprocess, optional stream for child stderr; if `None`, stderr is discarded. | +| `libmode` | No | `bool` (`True`) | If `True` and `pipeline_config` is `None`, loads the default library-mode pipeline. If `False`, `pipeline_config` must be provided. | +| `quiet` | No | `Optional[bool]` (`None`) | If `True`, reduces logging noise for library use. If `None`, defaults to `True` when `libmode=True`. | + +### Return type + +`run_pipeline` returns a **union** of three possible types, depending on `block` and `run_in_subprocess`: + +| Mode | Return type | Notes | +|------|-------------|--------| +| In-process, `block=True` | `float` | Elapsed time in seconds. | +| In-process, `block=False` | `RayPipelineInterface` | Handle to control the in-process pipeline (defined in `nv_ingest.framework.orchestration.ray.primitives.ray_pipeline`). | +| Subprocess, `block=False` | `RayPipelineSubprocessInterface` | Handle to control the subprocess-based pipeline (same module). **This is not** `RayPipelineInterface`; the two classes are separate implementations of `PipelineInterface`. Use `isinstance(..., RayPipelineSubprocessInterface)` when you launch with `run_in_subprocess=True` and `block=False`. | +| Subprocess, `block=True` | `float` | Returns `0.0` when blocking in subprocess mode. | + +For the authoritative contract (including raised exceptions), refer to the docstring on `run_pipeline` in `src/nv_ingest/framework/orchestration/ray/util/pipeline/pipeline_runners.py`. diff --git a/docs/docs/extraction/v2-api-guide.md b/docs/docs/extraction/v2-api-guide.md index 5aa87f1f6..a51152f41 100644 --- a/docs/docs/extraction/v2-api-guide.md +++ b/docs/docs/extraction/v2-api-guide.md @@ -42,9 +42,10 @@ ingestor = Ingestor( results = ingestor.files(["large_document.pdf"]) \ .extract(extract_text=True, extract_tables=True) \ .pdf_split_config(pages_per_chunk=64) \ # ← Step 2: Configure splitting - .ingest() + .ingest(return_full_response=True) # Full HTTP-style envelope per job (includes metadata) -print(f"Processed {results['metadata']['total_pages']} pages") +# ingest() returns a list with one entry per input file. Top-level metadata (e.g. total_pages) is only present when return_full_response=True. +print(f"Processed {results[0]['metadata']['total_pages']} pages") ``` ### CLI Usage From 21a756bc3ec550565dd8ec92c92b22d2a0dc5661 Mon Sep 17 00:00:00 2001 From: Kurt Heiss Date: Wed, 15 Apr 2026 11:44:40 -0700 Subject: [PATCH 77/94] Creating NRL only posting for GitHub --- docs/docs/extraction/audio.md | 2 +- docs/docs/extraction/chunking.md | 2 +- docs/docs/extraction/custom-metadata.md | 2 +- docs/docs/extraction/data-store.md | 12 ++++++------ docs/docs/extraction/environment-config.md | 2 +- docs/docs/extraction/faq.md | 8 ++++---- docs/docs/extraction/nemoretriever-parse.md | 2 +- docs/docs/extraction/nv-ingest_cli.md | 2 +- docs/docs/extraction/quickstart-guide.md | 4 ++-- docs/docs/extraction/support-matrix.md | 2 +- docs/docs/extraction/troubleshoot.md | 2 +- docs/docs/extraction/vlm-embed.md | 4 ++-- 12 files changed, 22 insertions(+), 22 deletions(-) diff --git a/docs/docs/extraction/audio.md b/docs/docs/extraction/audio.md index 9d664d0b2..6cfd4c14d 100644 --- a/docs/docs/extraction/audio.md +++ b/docs/docs/extraction/audio.md @@ -136,4 +136,4 @@ Instead of running the pipeline locally, you can use NVCF to perform inference b - [Support Matrix](support-matrix.md) - [Troubleshoot Nemo Retriever Extraction](troubleshoot.md) -- [Use the Python API](nv-ingest-python-api.md) +- [Use the Python API](python-api-reference.md) diff --git a/docs/docs/extraction/chunking.md b/docs/docs/extraction/chunking.md index 540b147ca..ab9e46f1a 100644 --- a/docs/docs/extraction/chunking.md +++ b/docs/docs/extraction/chunking.md @@ -106,6 +106,6 @@ If you are building the container yourself and want to pre-download this model, ## Related Topics -- [Use the Python API](nv-ingest-python-api.md) +- [Use the Python API](python-api-reference.md) - [NeMo Retriever Library V2 API Guide](v2-api-guide.md) - [Environment Variables](environment-variables.md) diff --git a/docs/docs/extraction/custom-metadata.md b/docs/docs/extraction/custom-metadata.md index 805aef628..9e9dee1bf 100644 --- a/docs/docs/extraction/custom-metadata.md +++ b/docs/docs/extraction/custom-metadata.md @@ -56,7 +56,7 @@ meta_df.to_csv(file_path) ### Example: Add Custom Metadata During Ingestion The following example adds custom metadata during ingestion. -For more information about the `Ingestor` class, see [Use the Python API](nv-ingest-python-api.md). +For more information about the `Ingestor` class, see [Use the Python API](python-api-reference.md). For more information about the `vdb_upload` method, see [Upload Data](data-store.md). ```python diff --git a/docs/docs/extraction/data-store.md b/docs/docs/extraction/data-store.md index 6b0d039ce..fd493519e 100644 --- a/docs/docs/extraction/data-store.md +++ b/docs/docs/extraction/data-store.md @@ -20,10 +20,10 @@ It does not store the embeddings for images. !!! tip "Storing Extracted Images" - To persist extracted images, tables, and chart renderings to disk or object storage, use the `store` task in addition to `vdb_upload`. The `store` task supports any fsspec-compatible backend (local filesystem, S3, GCS, etc.). For details, refer to [Store Extracted Images](nv-ingest-python-api.md#store-extracted-images). + To persist extracted images, tables, and chart renderings to disk or object storage, use the `store` task in addition to `vdb_upload`. The `store` task supports any fsspec-compatible backend (local filesystem, S3, GCS, etc.). For details, refer to [Store Extracted Images](python-api-reference.md#store-extracted-images). -NeMo Retriever Library supports uploading data by using the [Ingestor.vdb_upload API](nv-ingest-python-api.md). -Currently, data upload is not supported through the [CLI](nv-ingest_cli.md). +NeMo Retriever Library supports uploading data by using the [Ingestor.vdb_upload API](python-api-reference.md). +Currently, data upload is not supported through the [CLI](cli-reference.md). @@ -140,7 +140,7 @@ You can delete all collections by deleting that volume, and then restarting the !!! tip - When you use the `vdb_upload` method, the behavior of the upload depends on the `return_failures` parameter of the `ingest` method. For details, refer to [Capture Job Failures](nv-ingest-python-api.md#capture-job-failures). + When you use the `vdb_upload` method, the behavior of the upload depends on the `return_failures` parameter of the `ingest` method. For details, refer to [Capture Job Failures](python-api-reference.md#capture-job-failures). To upload to Milvus, use code similar to the following to define your `Ingestor`. @@ -179,7 +179,7 @@ For more information, refer to [Build a Custom Vector Database Operator](https:/ ## Related Topics -- [Use the NeMo Retriever Library Python API](nv-ingest-python-api.md) -- [Store Extracted Images](nv-ingest-python-api.md#store-extracted-images) +- [Use the NeMo Retriever Library Python API](python-api-reference.md) +- [Store Extracted Images](python-api-reference.md#store-extracted-images) - [Environment Variables](environment-config.md) - [Troubleshoot Nemo Retriever Extraction](troubleshoot.md) diff --git a/docs/docs/extraction/environment-config.md b/docs/docs/extraction/environment-config.md index 2c7be750b..5e5bb57d4 100644 --- a/docs/docs/extraction/environment-config.md +++ b/docs/docs/extraction/environment-config.md @@ -23,7 +23,7 @@ You can specify these in your .env file or directly in your environment. | `OTEL_EXPORTER_OTLP_ENDPOINT` | `http://otel-collector:4317`
| The endpoint for the OpenTelemetry exporter, used for sending telemetry data. | | `REDIS_INGEST_TASK_QUEUE` | `ingest_task_queue`
| The name of the task queue in Redis where tasks are stored and processed. | | `REDIS_POOL_SIZE` | - `50` (default)
- `100`
- `200`
| Maximum Redis connection pool size. Increase for high-concurrency workloads processing many documents in parallel. Default of 50 works well for most deployments. | -| `IMAGE_STORAGE_URI` | `s3://nv-ingest/artifacts/store/images`
| Default fsspec-compatible URI for the `store` task. Supports `s3://`, `file://`, `gs://`, etc. See [Store Extracted Images](nv-ingest-python-api.md#store-extracted-images). | +| `IMAGE_STORAGE_URI` | `s3://nv-ingest/artifacts/store/images`
| Default fsspec-compatible URI for the `store` task. Supports `s3://`, `file://`, `gs://`, etc. See [Store Extracted Images](python-api-reference.md#store-extracted-images). | | `IMAGE_STORAGE_PUBLIC_BASE_URL` | `https://assets.example.com/images`
| Optional HTTP(S) base URL for serving stored images. | diff --git a/docs/docs/extraction/faq.md b/docs/docs/extraction/faq.md index 40b5ea376..57b90fa4d 100644 --- a/docs/docs/extraction/faq.md +++ b/docs/docs/extraction/faq.md @@ -32,7 +32,7 @@ For more information, refer to [Data Upload](data-store.md). For images that `nemoretriever-page-elements-v3` does not classify as tables, charts, or infographics, you can use our VLM caption task to create a dense caption of the detected image. That caption is then be embedded along with the rest of your content. -For more information, refer to [Extract Captions from Images](nv-ingest-python-api.md#extract-captions-from-images). +For more information, refer to [Extract Captions from Images](python-api-reference.md#extract-captions-from-images). @@ -74,10 +74,10 @@ For examples of `*_ENDPOINT` variables, refer to [nv-ingest/docker-compose.yaml] See the [Profile Information](quickstart-guide.md#profile-information) section for information about the optional NIM components of the pipeline. -You can configure the `extract`, `caption`, and other tasks by using the [Ingestor API](nv-ingest-python-api.md). +You can configure the `extract`, `caption`, and other tasks by using the [Ingestor API](python-api-reference.md). To choose what types of content to extract, use code similar to the following. -For more information, refer to [Extract Specific Elements from PDFs](nv-ingest-python-api.md#extract-specific-elements-from-pdfs). +For more information, refer to [Extract Specific Elements from PDFs](python-api-reference.md#extract-specific-elements-from-pdfs). ```python Ingestor(client=client) @@ -93,7 +93,7 @@ Ingestor(client=client) ``` To generate captions for images, use code similar to the following. -For more information, refer to [Extract Captions from Images](nv-ingest-python-api.md#extract-captions-from-images). +For more information, refer to [Extract Captions from Images](python-api-reference.md#extract-captions-from-images). ```python Ingestor(client=client) diff --git a/docs/docs/extraction/nemoretriever-parse.md b/docs/docs/extraction/nemoretriever-parse.md index 51fe136ed..d0b106be5 100644 --- a/docs/docs/extraction/nemoretriever-parse.md +++ b/docs/docs/extraction/nemoretriever-parse.md @@ -110,4 +110,4 @@ Instead of running the pipeline locally, you can use NVCF to perform inference b - [Support Matrix](support-matrix.md) - [Troubleshoot Nemo Retriever Extraction](troubleshoot.md) -- [Use the Python API](nv-ingest-python-api.md) +- [Use the Python API](python-api-reference.md) diff --git a/docs/docs/extraction/nv-ingest_cli.md b/docs/docs/extraction/nv-ingest_cli.md index 5ab8cd095..21072f502 100644 --- a/docs/docs/extraction/nv-ingest_cli.md +++ b/docs/docs/extraction/nv-ingest_cli.md @@ -119,7 +119,7 @@ nv-ingest-cli \ !!! tip - The caption service uses a default VLM which you can override by selecting other vision-language models to better match your image captioning needs. For more information, refer to [Extract Captions from Images](nv-ingest-python-api.md#extract-captions-from-images). + The caption service uses a default VLM which you can override by selecting other vision-language models to better match your image captioning needs. For more information, refer to [Extract Captions from Images](python-api-reference.md#extract-captions-from-images). Alternatively, you can use an environment variable to set the API version: diff --git a/docs/docs/extraction/quickstart-guide.md b/docs/docs/extraction/quickstart-guide.md index 0077cd529..9784b1f39 100644 --- a/docs/docs/extraction/quickstart-guide.md +++ b/docs/docs/extraction/quickstart-guide.md @@ -103,7 +103,7 @@ h. Run the command `docker ps`. You should see output similar to the following. ## Step 2: Ingest Documents -You can submit jobs programmatically in Python or using the [CLI](nv-ingest_cli.md). +You can submit jobs programmatically in Python or using the [CLI](cli-reference.md). !!! important "Python version" @@ -394,7 +394,7 @@ You can specify multiple `--profile` options. | `retrieval` | Core | Enables the embedding NIM and (optional) GPU-accelerated Milvus. Omit this profile to use the default LanceDB backend. | | `audio` | Advanced | Use the [parakeet-1-1b-ctc-en-us](https://docs.nvidia.com/nim/speech/latest/asr/deploy-asr-models/parakeet-ctc-en-us.html) ASR NIM (`nvcr.io/nim/nvidia/parakeet-1-1b-ctc-en-us`) for processing audio files. For more information, refer to [Audio Processing](audio.md). | | `nemotron-parse` | Advanced | Use [nemotron-parse](https://build.nvidia.com/nvidia/nemotron-parse), which adds state-of-the-art text and table extraction. For more information, refer to [Advanced Visual Parsing](nemoretriever-parse.md). | -| `vlm` | Advanced | Use [Nemotron Nano 12B v2 VL](https://build.nvidia.com/nvidia/nemotron-nano-12b-v2-vl/modelcard) for image captioning of unstructured images and infographics. This profile enables the `caption` method in the Python API to generate text descriptions of visual content. For more information, refer to [Use Multimodal Embedding](vlm-embed.md) and [Extract Captions from Images](nv-ingest-python-api.md#extract-captions-from-images). | +| `vlm` | Advanced | Use [Nemotron Nano 12B v2 VL](https://build.nvidia.com/nvidia/nemotron-nano-12b-v2-vl/modelcard) for image captioning of unstructured images and infographics. This profile enables the `caption` method in the Python API to generate text descriptions of visual content. For more information, refer to [Use Multimodal Embedding](vlm-embed.md) and [Extract Captions from Images](python-api-reference.md#extract-captions-from-images). | ### Example: Using the VLM Profile for Infographic Captioning diff --git a/docs/docs/extraction/support-matrix.md b/docs/docs/extraction/support-matrix.md index b109be691..92898495a 100644 --- a/docs/docs/extraction/support-matrix.md +++ b/docs/docs/extraction/support-matrix.md @@ -28,7 +28,7 @@ This includes the following: !!! note - While nemotron-nano-12b-v2-vl is the default VLM, you can configure and use other vision language models for image captioning based on your specific use case requirements. For more information, refer to [Extract Captions from Images](nv-ingest-python-api.md#extract-captions-from-images). + While nemotron-nano-12b-v2-vl is the default VLM, you can configure and use other vision language models for image captioning based on your specific use case requirements. For more information, refer to [Extract Captions from Images](python-api-reference.md#extract-captions-from-images). - Reranker — Use [llama-3.2-nv-rerankqa-1b-v2](https://build.nvidia.com/nvidia/llama-3.2-nv-rerankqa-1b-v2) for improved retrieval accuracy. diff --git a/docs/docs/extraction/troubleshoot.md b/docs/docs/extraction/troubleshoot.md index 6edc3c0a2..a91fdba38 100644 --- a/docs/docs/extraction/troubleshoot.md +++ b/docs/docs/extraction/troubleshoot.md @@ -52,7 +52,7 @@ This happens because, by default, NeMo Retriever Library stores the results from If the total size of the results exceeds the available memory, the process fails. To resolve this issue, use the `save_to_disk` method. -For details, refer to [Working with Large Datasets: Saving to Disk](nv-ingest-python-api.md#work-with-large-datasets-save-to-disk). +For details, refer to [Working with Large Datasets: Saving to Disk](python-api-reference.md#work-with-large-datasets-save-to-disk). diff --git a/docs/docs/extraction/vlm-embed.md b/docs/docs/extraction/vlm-embed.md index 03d089e8c..a5a91c2dd 100644 --- a/docs/docs/extraction/vlm-embed.md +++ b/docs/docs/extraction/vlm-embed.md @@ -122,5 +122,5 @@ results = ingestor.ingest() - [Support Matrix](support-matrix.md) - [Troubleshoot Nemo Retriever Extraction](troubleshoot.md) -- [Use the Python API](nv-ingest-python-api.md) -- [Extract Captions from Images](nv-ingest-python-api.md#extract-captions-from-images) +- [Use the Python API](python-api-reference.md) +- [Extract Captions from Images](python-api-reference.md#extract-captions-from-images) From 31117dea9658c454c542beeca1b25e93300058ee Mon Sep 17 00:00:00 2001 From: Kurt Heiss Date: Thu, 16 Apr 2026 14:20:11 -0700 Subject: [PATCH 78/94] NRL centric GitHub pages --- .../extraction/agentic-retrieval-concept.md | 11 +++++++ docs/docs/extraction/audio.md | 2 +- docs/docs/extraction/choose-your-path.md | 32 +++++++++++++++++++ docs/docs/extraction/concepts.md | 27 ++++++++++++++++ docs/docs/extraction/embedding-nims-models.md | 7 ++++ docs/docs/extraction/evaluate-on-your-data.md | 17 ++++++++++ .../extraction-charts-infographics.md | 9 ++++++ .../docs/extraction/extraction-ocr-scanned.md | 9 ++++++ docs/docs/extraction/extraction-tables.md | 9 ++++++ docs/docs/extraction/getting-started-about.md | 14 ++++++++ .../extraction/hosted-nims-when-to-use.md | 14 ++++++++ .../how-to-use-this-documentation.md | 22 +++++++++++++ docs/docs/extraction/image-captioning.md | 9 ++++++ ...egrations-langchain-llamaindex-haystack.md | 22 +++++++++++++ docs/docs/extraction/key-features.md | 26 +++++++++++++++ docs/docs/extraction/production-checklist.md | 19 +++++++++++ .../published-metrics-comparisons.md | 9 ++++++ docs/docs/extraction/reranking.md | 18 +++++++++++ docs/docs/extraction/resources-links.md | 13 ++++++++ .../extraction/self-host-nims-when-to-use.md | 17 ++++++++++ .../extraction/semantic-hybrid-retrieval.md | 14 ++++++++ docs/docs/extraction/supported-file-types.md | 9 ++++++ .../docs/extraction/text-layout-extraction.md | 9 ++++++ docs/docs/extraction/vector-db-partners.md | 8 +++++ .../extraction/workflow-agentic-retrieval.md | 14 ++++++++ docs/docs/extraction/workflow-query-rerank.md | 13 ++++++++ docs/docs/extraction/workflow-video-ocr.md | 11 +++++++ 27 files changed, 383 insertions(+), 1 deletion(-) create mode 100644 docs/docs/extraction/agentic-retrieval-concept.md create mode 100644 docs/docs/extraction/choose-your-path.md create mode 100644 docs/docs/extraction/concepts.md create mode 100644 docs/docs/extraction/embedding-nims-models.md create mode 100644 docs/docs/extraction/evaluate-on-your-data.md create mode 100644 docs/docs/extraction/extraction-charts-infographics.md create mode 100644 docs/docs/extraction/extraction-ocr-scanned.md create mode 100644 docs/docs/extraction/extraction-tables.md create mode 100644 docs/docs/extraction/getting-started-about.md create mode 100644 docs/docs/extraction/hosted-nims-when-to-use.md create mode 100644 docs/docs/extraction/how-to-use-this-documentation.md create mode 100644 docs/docs/extraction/image-captioning.md create mode 100644 docs/docs/extraction/integrations-langchain-llamaindex-haystack.md create mode 100644 docs/docs/extraction/key-features.md create mode 100644 docs/docs/extraction/production-checklist.md create mode 100644 docs/docs/extraction/published-metrics-comparisons.md create mode 100644 docs/docs/extraction/reranking.md create mode 100644 docs/docs/extraction/resources-links.md create mode 100644 docs/docs/extraction/self-host-nims-when-to-use.md create mode 100644 docs/docs/extraction/semantic-hybrid-retrieval.md create mode 100644 docs/docs/extraction/supported-file-types.md create mode 100644 docs/docs/extraction/text-layout-extraction.md create mode 100644 docs/docs/extraction/vector-db-partners.md create mode 100644 docs/docs/extraction/workflow-agentic-retrieval.md create mode 100644 docs/docs/extraction/workflow-query-rerank.md create mode 100644 docs/docs/extraction/workflow-video-ocr.md diff --git a/docs/docs/extraction/agentic-retrieval-concept.md b/docs/docs/extraction/agentic-retrieval-concept.md new file mode 100644 index 000000000..d8b8fac04 --- /dev/null +++ b/docs/docs/extraction/agentic-retrieval-concept.md @@ -0,0 +1,11 @@ +# Agentic retrieval (concept) + +Agentic retrieval means **iterative, tool-driven** retrieval: an agent plans steps, issues searches, may refine filters, and optionally reranks until it has enough context to answer. + +NeMo Retriever Library focuses on document ingestion, embeddings, vector stores, hybrid search, and reranking. Orchestration frameworks call these building blocks from your application. + +**Related** + +- [Workflow: Agentic retrieval](workflow-agentic-retrieval.md) +- [Semantic and hybrid retrieval](semantic-hybrid-retrieval.md) +- Framework examples: [LangChain, LlamaIndex, Haystack](integrations-langchain-llamaindex-haystack.md) diff --git a/docs/docs/extraction/audio.md b/docs/docs/extraction/audio.md index 6cfd4c14d..6e577b1fd 100644 --- a/docs/docs/extraction/audio.md +++ b/docs/docs/extraction/audio.md @@ -22,7 +22,7 @@ Currently, you can extract speech from the following file types: [NeMo Retriever Library](overview.md) supports extracting speech from audio files for Retrieval Augmented Generation (RAG) applications. Similar to how the multimodal document extraction pipeline leverages object detection and image OCR microservices, -NeMo Retriever leverages the [parakeet-1-1b-ctc-en-us ASR NIM microservice](https://docs.nvidia.com/nim/speech/latest/asr/deploy-asr-models/parakeet-ctc-en-us.html) +NeMo Retriever Library uses the [parakeet-1-1b-ctc-en-us ASR NIM microservice](https://docs.nvidia.com/nim/speech/latest/asr/deploy-asr-models/parakeet-ctc-en-us.html) to transcribe speech to text, which is then embedded by using the NeMo Retriever embedding NIM. !!! important diff --git a/docs/docs/extraction/choose-your-path.md b/docs/docs/extraction/choose-your-path.md new file mode 100644 index 000000000..b5514ea20 --- /dev/null +++ b/docs/docs/extraction/choose-your-path.md @@ -0,0 +1,32 @@ +# Choose your path + +Use this page to pick documentation and deployment options that match your goal. + +## I want to run locally or embed the library + +1. [Prerequisites](prerequisites.md) and [Support matrix](support-matrix.md) +2. [Deploy (Library mode)](quickstart-library-mode.md) +3. [Use the Python API](python-api-reference.md) or [Use the CLI](cli-reference.md) + +## I want a Kubernetes / Helm deployment + +1. [Prerequisites](prerequisites.md) +2. [Deploy (Helm Chart)](helm.md) +3. [Environment variables](environment-config.md) and [Troubleshoot](troubleshoot.md) as needed + +## I want examples and notebooks + +1. [Jupyter Notebooks](notebooks.md) +2. [Integrate with LangChain, LlamaIndex, Haystack](integrations-langchain-llamaindex-haystack.md) + +## I need API details and keys + +1. [Get your API key](ngc-api-key.md) +2. [API reference](nemo-retriever-api-reference.md) and [V2 API guide](v2-api-guide.md) if applicable + +## I am tuning performance or cost + +1. [Benchmarking and performance](benchmarking.md) +2. [Telemetry](telemetry.md) +3. [Throughput is dataset-dependent](throughput-is-dataset-dependent.md) +4. [Evaluate on your data](evaluate-on-your-data.md) diff --git a/docs/docs/extraction/concepts.md b/docs/docs/extraction/concepts.md new file mode 100644 index 000000000..93d09430d --- /dev/null +++ b/docs/docs/extraction/concepts.md @@ -0,0 +1,27 @@ +# Concepts + +These terms appear throughout NeMo Retriever Library documentation. + +## Job + +A **job** is a unit of work you submit with a JSON description: a document payload (or reference) and a list of **ingestion tasks** to run on that payload. Results are retrieved as structured metadata and annotations. + +## Pipeline and tasks + +NeMo Retriever Library does **not** run one static pipeline on every document. You configure **tasks** such as parsing, chunking, embedding, storage, and filtering per job. Related topics: [Customize your pipeline](user-defined-functions.md), [user-defined stages](user-defined-stages.md). + +## Extraction metadata + +Output is typically a **JSON dictionary** listing extracted objects (text regions, tables, images, and so on), processing notes, and timing or trace data. Field-level detail is in the [metadata reference](content-metadata.md). + +## Embeddings and retrieval + +Optionally, the library can compute **embeddings** for extracted content and store vectors in a database such as [LanceDB](https://lancedb.com/) or [Milvus](https://milvus.io/) for downstream **semantic or hybrid search** in your application. + +## Deployment modes + +- **Library mode** — Run without the full container stack where appropriate ([quickstart](quickstart-library-mode.md)). +- **Helm / Kubernetes** — [Helm-based deployment](helm.md) for cluster operations. +- **Notebooks** — [Jupyter examples](notebooks.md) for experimentation and RAG demos. + +For a concise comparison, see [Choose your path](choose-your-path.md). diff --git a/docs/docs/extraction/embedding-nims-models.md b/docs/docs/extraction/embedding-nims-models.md new file mode 100644 index 000000000..1bcd8e50b --- /dev/null +++ b/docs/docs/extraction/embedding-nims-models.md @@ -0,0 +1,7 @@ +# Embedding NIMs and models + +Embeddings turn extracted text and multimodal content into vectors for semantic search. NeMo Retriever Library integrates with NVIDIA NIM microservices for embedding. Model names and compatibility vary by release; see the [Support matrix](support-matrix.md) and the [NVIDIA NIM catalog](https://build.nvidia.com/). + +For multimodal or VLM embeddings, see [Multimodal embeddings (VLM)](vlm-embed.md). + +After embedding, content is stored in a vector database; see [Vector databases](data-store.md). RAG-style collections are created and populated through your pipeline configuration and harness runs. For details, see [Benchmarking](benchmarking.md) and the [data store](data-store.md) documentation for your backend. diff --git a/docs/docs/extraction/evaluate-on-your-data.md b/docs/docs/extraction/evaluate-on-your-data.md new file mode 100644 index 000000000..34605ed66 --- /dev/null +++ b/docs/docs/extraction/evaluate-on-your-data.md @@ -0,0 +1,17 @@ +# Evaluate on your data + +Retrieval and ingestion performance **depend on your documents**, hardware, and pipeline settings. Use the following when measuring quality and throughput on **your** datasets. + +## Benchmarking and baselines + +Start with [Benchmarking](benchmarking.md) for methodology and baseline expectations. Combine with [Telemetry](telemetry.md) to observe production-like runs. + +## Throughput and dataset effects + +Read [Throughput is dataset-dependent](throughput-is-dataset-dependent.md) for why raw numbers from generic benchmarks may not match your corpus (layout complexity, file types, image density, and so on). + +## Operational tuning + +- [Resource scaling modes](scaling-modes.md) +- [Support matrix](support-matrix.md) for supported configurations +- [Troubleshoot](troubleshoot.md) when results or performance diverge from expectations diff --git a/docs/docs/extraction/extraction-charts-infographics.md b/docs/docs/extraction/extraction-charts-infographics.md new file mode 100644 index 000000000..032a0779c --- /dev/null +++ b/docs/docs/extraction/extraction-charts-infographics.md @@ -0,0 +1,9 @@ +# Charts and infographics + +Charts and infographic regions are classified as graphic elements and processed with the corresponding NVIDIA NIM workflows (for example, **yolox-graphic-elements** in current releases). Outputs use the same metadata schema as other extracted objects. + +**Related** + +- [What is NeMo Retriever Library?](overview.md) +- [Support matrix](support-matrix.md) +- [Multimodal embeddings (VLM)](vlm-embed.md) when you treat graphics as images for embedding diff --git a/docs/docs/extraction/extraction-ocr-scanned.md b/docs/docs/extraction/extraction-ocr-scanned.md new file mode 100644 index 000000000..3b895da18 --- /dev/null +++ b/docs/docs/extraction/extraction-ocr-scanned.md @@ -0,0 +1,9 @@ +# OCR and scanned documents + +Scanned PDFs and image-only pages rely on OCR and hybrid paths that combine native text extraction with OCR when needed. For extract methods such as `ocr` and `pdfium_hybrid`, see the [Python API reference](python-api-reference.md). + +**Related** + +- [Text and layout extraction](text-layout-extraction.md) +- [Nemotron Parse](nemoretriever-parse.md) +- [Throughput is dataset-dependent](throughput-is-dataset-dependent.md) diff --git a/docs/docs/extraction/extraction-tables.md b/docs/docs/extraction/extraction-tables.md new file mode 100644 index 000000000..941e0423c --- /dev/null +++ b/docs/docs/extraction/extraction-tables.md @@ -0,0 +1,9 @@ +# Tables + +NeMo Retriever Library detects tables as structured page elements, processes them through the appropriate NIMs, and exports formats suitable for downstream RAG (including Markdown-oriented representations where configured). Availability depends on pipeline and model configuration; see the [Support matrix](support-matrix.md). + +**Related** + +- [What is NeMo Retriever Library?](overview.md) for artifact classification +- [Nemotron Parse](nemoretriever-parse.md) for advanced visual parsing +- [Metadata reference](content-metadata.md) diff --git a/docs/docs/extraction/getting-started-about.md b/docs/docs/extraction/getting-started-about.md new file mode 100644 index 000000000..c652ffecc --- /dev/null +++ b/docs/docs/extraction/getting-started-about.md @@ -0,0 +1,14 @@ +# About getting started + +This section walks you from **access and prerequisites** through **first deployment** and **hands-on notebooks**. + +Typical order: + +1. [Get your API key](ngc-api-key.md) (NGC / API access as required by your workflow). +2. Confirm [Prerequisites](prerequisites.md) and the [Support matrix](support-matrix.md) for your OS, GPU, and software stack. +3. Deploy using one of: + - [Library mode](quickstart-library-mode.md) (without full stack containers where appropriate) + - [Helm Chart](helm.md) for Kubernetes environments +4. Explore [Jupyter Notebooks](notebooks.md) for end-to-end examples. + +If you are new to the product, read [What is NeMo Retriever Library?](overview.md), [Key features](key-features.md), and [Concepts](concepts.md) under **Introduction** first. diff --git a/docs/docs/extraction/hosted-nims-when-to-use.md b/docs/docs/extraction/hosted-nims-when-to-use.md new file mode 100644 index 000000000..99f4a83d2 --- /dev/null +++ b/docs/docs/extraction/hosted-nims-when-to-use.md @@ -0,0 +1,14 @@ +# When to use NVIDIA-hosted NIMs + +[NVIDIA-hosted NIMs](https://build.nvidia.com/) run inference on NVIDIA-managed infrastructure. You call models with API keys (see [Get your API key](ngc-api-key.md)) without operating GPU nodes yourself. + +Consider hosted NIMs when: + +- You want the fastest path to try models and iterate without installing drivers, containers, or the [NIM Operator](https://docs.nvidia.com/nim-operator/latest/index.html) on your own clusters. +- Latency to NVIDIA endpoints works for your region and use case. +- Your compliance and data policies allow document or query content in the hosted service (confirm with your security review). + +For more information, see the following pages: + +- [NVIDIA NIM catalog](https://build.nvidia.com/) +- [Compare deployment options](choose-your-path.md) diff --git a/docs/docs/extraction/how-to-use-this-documentation.md b/docs/docs/extraction/how-to-use-this-documentation.md new file mode 100644 index 000000000..84b6d221c --- /dev/null +++ b/docs/docs/extraction/how-to-use-this-documentation.md @@ -0,0 +1,22 @@ +# How to use this documentation + +Use the sections below as a reading order that matches how you run NeMo Retriever Library. + +## NeMo Retriever Library (local or embedded) + +Start with the [Introduction](overview.md), [Concepts](concepts.md), and [Get started](getting-started-about.md) pages. Then follow [Prerequisites](prerequisites.md), [Quickstart: Library mode](quickstart-library-mode.md), and either the [Python API](python-api-reference.md) or [CLI](cli-reference.md). For deeper topics, see [Core workflows](v2-api-guide.md) and [Multimodal extraction](supported-file-types.md). + +## Microservices, Helm, and production clusters + +Follow [Choose your deployment](choose-your-path.md), [Deploy (Helm Chart)](helm.md), [Environment variables](environment-config.md), and the [V2 API guide](v2-api-guide.md). For operations topics, see [Scaling modes](scaling-modes.md), [Ray logging](ray-logging.md), [Telemetry](telemetry.md), and [Benchmarking](benchmarking.md). + +## NVIDIA Blueprints and end-to-end RAG + +For solution-level patterns, read [End-to-end RAG with NVIDIA Blueprints](resources-links.md), including links to [NVIDIA AI Blueprints](resources-links.md). These docs cover ingestion, embedding, and retrieval primitives that Blueprints combine into full applications. + +## Related + +The following pages supplement this overview: + +- [About getting started](getting-started-about.md), for a step-by-step first deployment +- [Release notes](releasenotes-nv-ingest.md) diff --git a/docs/docs/extraction/image-captioning.md b/docs/docs/extraction/image-captioning.md new file mode 100644 index 000000000..33bc087ae --- /dev/null +++ b/docs/docs/extraction/image-captioning.md @@ -0,0 +1,9 @@ +# Image captioning + +Image captioning generates natural-language descriptions for unstructured image content. Retrieval can then use text embeddings over captions and visual embeddings where you configure them. + +**Related** + +- [Multimodal embeddings (VLM)](vlm-embed.md) +- [Metadata reference](content-metadata.md) +- [What is NeMo Retriever Library?](overview.md) diff --git a/docs/docs/extraction/integrations-langchain-llamaindex-haystack.md b/docs/docs/extraction/integrations-langchain-llamaindex-haystack.md new file mode 100644 index 000000000..32f762524 --- /dev/null +++ b/docs/docs/extraction/integrations-langchain-llamaindex-haystack.md @@ -0,0 +1,22 @@ +# Integrate with LangChain, LlamaIndex, and Haystack + +NeMo Retriever Library is commonly used **behind** retrieval-augmented generation (RAG) apps built with popular orchestration frameworks. + +## Jupyter examples (LangChain and LlamaIndex) + +The repository includes notebooks that demonstrate multimodal RAG patterns: + +- [Multimodal RAG with LangChain](https://github.com/NVIDIA/nv-ingest/blob/main/examples/langchain_multimodal_rag.ipynb) +- [Multimodal RAG with LlamaIndex](https://github.com/NVIDIA/nv-ingest/blob/main/examples/llama_index_multimodal_rag.ipynb) + +These are also linked from [Jupyter Notebooks](notebooks.md) and the [FAQ](faq.md). + +## Haystack + +Haystack-related extraction modes may appear in API tables as **deprecated** in favor of current pipeline options. For up-to-date integration patterns, prefer the Python API and CLI docs, and check [Release notes](releasenotes-nv-ingest.md) for migration notes. + +## Related + +- [Use the Python API](python-api-reference.md) +- [Use the CLI](cli-reference.md) +- [Split documents](chunking.md), [Upload data](data-store.md), [Filter search](custom-metadata.md) diff --git a/docs/docs/extraction/key-features.md b/docs/docs/extraction/key-features.md new file mode 100644 index 000000000..fe9003fbf --- /dev/null +++ b/docs/docs/extraction/key-features.md @@ -0,0 +1,26 @@ +# Key features + +NeMo Retriever Library is built for **accuracy**, **throughput**, and **flexible deployment** in enterprise retrieval pipelines. + +## Extraction and understanding + +- **Multimodal extraction** — Text, tables, charts, and infographics from documents and media formats supported by the [support matrix](support-matrix.md). +- **Multiple extraction backends** — Trade off throughput and accuracy per document type (for example PDF via pdfium and [nemotron-parse](https://build.nvidia.com/nvidia/nemotron-parse)). +- **Chunking and enrichment** — Splitting, transforms, filtering, embedding, and optional offload to storage. + +## Operations and scale + +- **High throughput** — Parallel extraction, embedding, and indexing designed for large document corpora. +- **Configurable pipelines** — Jobs are described as JSON; you choose tasks per payload rather than a single fixed pipeline. +- **Deployment options** — [Library mode](quickstart-library-mode.md), [Helm](helm.md), and [notebooks](notebooks.md) for different environments. + +## Enterprise-oriented behavior + +- **Composable services** — Use modules that fit your environment and security boundaries. +- **Clear metadata** — Structured JSON results with extraction metadata, annotations, and trace data for observability. + +## See also + +- [Concepts](concepts.md) — Core ideas (jobs, pipelines, metadata). +- [Choose your path](choose-your-path.md) — Pick a deployment and learning path. +- [Overview](overview.md) — Full product description. diff --git a/docs/docs/extraction/production-checklist.md b/docs/docs/extraction/production-checklist.md new file mode 100644 index 000000000..7e89500bb --- /dev/null +++ b/docs/docs/extraction/production-checklist.md @@ -0,0 +1,19 @@ +# Production checklist + +Use this checklist before you run NeMo Retriever Library in production. Pair it with [Troubleshoot](troubleshoot.md) and your internal security review. + +**Security and access** + +- [ ] API keys and secrets follow least privilege ([Get your API key](ngc-api-key.md), [Environment variables](environment-config.md)). +- [ ] Network policies match hosted versus self-hosted NIM choices ([When to use NVIDIA-hosted NIMs](hosted-nims-when-to-use.md), [When to self-host NIMs](self-host-nims-when-to-use.md)). + +**Operations** + +- [ ] Scaling model matches workload ([Scaling modes](scaling-modes.md)). +- [ ] Logging and Ray workers are observable ([Ray logging](ray-logging.md)). +- [ ] Telemetry is wired for your stack ([Telemetry](telemetry.md)). + +**Quality and capacity** + +- [ ] Benchmarks or load tests cover expected concurrency ([Benchmarking](benchmarking.md)). +- [ ] Dataset-specific throughput expectations are set ([Throughput is dataset-dependent](throughput-is-dataset-dependent.md)). diff --git a/docs/docs/extraction/published-metrics-comparisons.md b/docs/docs/extraction/published-metrics-comparisons.md new file mode 100644 index 000000000..ff85a0548 --- /dev/null +++ b/docs/docs/extraction/published-metrics-comparisons.md @@ -0,0 +1,9 @@ +# Published metrics and comparisons + +Published scores for parsing and retrieval components (including table-structure metrics such as TEDS where they apply) appear in NVIDIA papers, model cards, and product announcements. Treat published benchmarks as reference points, not guarantees on your own documents. Always [evaluate on your data](evaluate-on-your-data.md). + +**Starting points** + +- [NVIDIA NIM catalog](https://build.nvidia.com/) for model and NIM listings +- [Benchmarking](benchmarking.md) for how this repository measures recall and performance +- [Throughput is dataset-dependent](throughput-is-dataset-dependent.md) diff --git a/docs/docs/extraction/reranking.md b/docs/docs/extraction/reranking.md new file mode 100644 index 000000000..d594ff23c --- /dev/null +++ b/docs/docs/extraction/reranking.md @@ -0,0 +1,18 @@ +# Reranking + +A **reranker** model re-scores the top candidates from initial retrieval so the final top-K better matches the query. NeMo Retriever Library evaluation and deployments can integrate reranker NIMs (see the [Support matrix](support-matrix.md) for availability and GPU considerations). + +**When to enable reranking** + +Enable reranking when both of the following apply: + +- Recall at K from vector or hybrid search is acceptable, but ordering of the top results still needs improvement. +- Benchmarking shows measurable gains for your domain (see reranker modes in [Benchmarking](benchmarking.md)). + +**Configuration pointers** + +Reranker options appear in benchmarking and recall configurations. Start with [Benchmarking](benchmarking.md) and your vector store setup in [Vector databases](data-store.md). + +**Related** + +- [Workflow: Query and rerank](workflow-query-rerank.md) diff --git a/docs/docs/extraction/resources-links.md b/docs/docs/extraction/resources-links.md new file mode 100644 index 000000000..17e21372b --- /dev/null +++ b/docs/docs/extraction/resources-links.md @@ -0,0 +1,13 @@ +# Resources + +External pages for product context, catalogs, and solution blueprints. + +## Product and catalog + +- [NeMo Retriever — NVIDIA product information](https://www.nvidia.com/en-us/ai-data-science/products/nemo/) (landing context within the NeMo suite) +- [NVIDIA NIM catalog](https://build.nvidia.com/) — Browse NIM microservices relevant to ingestion, embedding, and reranking +- [Enterprise RAG — multimodal PDF data extraction blueprint](https://build.nvidia.com/nvidia/multimodal-pdf-data-extraction-for-enterprise-rag) + +## Open source + +- [OSS licences](../license.md) (optional reference for bundled or linked components) diff --git a/docs/docs/extraction/self-host-nims-when-to-use.md b/docs/docs/extraction/self-host-nims-when-to-use.md new file mode 100644 index 000000000..523ee2edb --- /dev/null +++ b/docs/docs/extraction/self-host-nims-when-to-use.md @@ -0,0 +1,17 @@ +# When to self-host NIMs + +Self-hosted NIMs run on your GPUs or air-gapped hardware, typically with Kubernetes and the [NIM Operator](https://docs.nvidia.com/nim-operator/latest/index.html). + +Consider self-hosting when: + +- You need an air gap, strict data residency, or customer data must not leave your network. +- You run at large scale where dedicated capacity can cost less than hosted API usage. +- You must meet latency or locality requirements that hosted regions cannot satisfy. + +**GPU sharing.** The NIM Operator supports time-slicing and MIG so multiple NIM workloads can share GPUs. A NIM used with NeMo Retriever Library does not always need a full dedicated GPU when the operator and GPU profile are set correctly. For scheduling and GPU partitioning, see the [NIM Operator documentation](https://docs.nvidia.com/nim-operator/latest/index.html). + +**Related** + +- [Deploy (Helm Chart)](helm.md) +- [Support matrix](support-matrix.md) +- [Compare deployment options](choose-your-path.md) diff --git a/docs/docs/extraction/semantic-hybrid-retrieval.md b/docs/docs/extraction/semantic-hybrid-retrieval.md new file mode 100644 index 000000000..0583fc676 --- /dev/null +++ b/docs/docs/extraction/semantic-hybrid-retrieval.md @@ -0,0 +1,14 @@ +# Semantic and hybrid retrieval + +**Semantic retrieval** uses dense embeddings to find content that is similar in meaning to a query. **Hybrid retrieval** combines dense vectors with sparse or lexical signals (for example, BM25-style full-text) and fuses ranked lists for better recall on keyword-heavy queries. + +In NeMo Retriever Library, use these resources: + +- [Concepts](concepts.md) for pipeline and search patterns +- [Vector databases](data-store.md) for LanceDB hybrid mode (dense, BM25, and RRF) and Milvus dense or sparse patterns +- [Environment variables](environment-config.md) for hybrid-related flags where documented +- [Custom metadata and filtering](custom-metadata.md) for filtering + +**Evaluation** + +For harnesses and metrics, see [Benchmarking](benchmarking.md). diff --git a/docs/docs/extraction/supported-file-types.md b/docs/docs/extraction/supported-file-types.md new file mode 100644 index 000000000..8eaf87b9a --- /dev/null +++ b/docs/docs/extraction/supported-file-types.md @@ -0,0 +1,9 @@ +# Supported file types and formats + +NeMo Retriever Library accepts multiple document and media types. A current list (including PDF, Office formats, HTML, images, audio, and video, some early access) appears in [What is NeMo Retriever Library?](overview.md) under supported file types. + +**Related** + +- [Troubleshoot](troubleshoot.md) for format-specific issues +- [Text and layout extraction](text-layout-extraction.md) +- [Speech and audio](audio.md) diff --git a/docs/docs/extraction/text-layout-extraction.md b/docs/docs/extraction/text-layout-extraction.md new file mode 100644 index 000000000..dba36953b --- /dev/null +++ b/docs/docs/extraction/text-layout-extraction.md @@ -0,0 +1,9 @@ +# Text and layout extraction + +For PDFs, NeMo Retriever Library typically uses **pdfium**-based extraction with configurable depth and paths. Scanned or mixed pages may use hybrid or OCR-oriented methods. For `extract_method` options such as `pdfium`, `pdfium_hybrid`, and `ocr`, see the [Python API reference](python-api-reference.md). + +**Related** + +- [What is NeMo Retriever Library?](overview.md) +- [OCR and scanned documents](extraction-ocr-scanned.md) +- [Chunking and splitting](chunking.md) diff --git a/docs/docs/extraction/vector-db-partners.md b/docs/docs/extraction/vector-db-partners.md new file mode 100644 index 000000000..a0dca2aa8 --- /dev/null +++ b/docs/docs/extraction/vector-db-partners.md @@ -0,0 +1,8 @@ +# Vector database partners + +NeMo Retriever Library integrates with vector databases used for RAG collections. Documentation here focuses on stores used in the library and harnesses, such as LanceDB and Milvus, and cuVS where it applies. See [Vector databases](data-store.md) and [Chunking and splitting](chunking.md). + +**Related** + +- [Embedding NIMs and models](embedding-nims-models.md) +- [NVIDIA NIM catalog](https://build.nvidia.com/) for embedding and retrieval-related NIMs diff --git a/docs/docs/extraction/workflow-agentic-retrieval.md b/docs/docs/extraction/workflow-agentic-retrieval.md new file mode 100644 index 000000000..77e2a6645 --- /dev/null +++ b/docs/docs/extraction/workflow-agentic-retrieval.md @@ -0,0 +1,14 @@ +# Workflow: Agentic retrieval + +**Agentic retrieval** describes patterns where a planner or tool-using agent queries retrieval systems in a loop (often combining multiple searches, filters, and rerankers) instead of sending a single static query. + +NeMo Retriever Library provides ingestion, embedding, storage, and retrieval building blocks (jobs, chunking, vector stores, hybrid search, reranking) that you orchestrate in application code or frameworks. + +**Where to go next** + +Use these pages together with your orchestration layer: + +- [Semantic and hybrid retrieval](semantic-hybrid-retrieval.md), [Custom metadata and filtering](custom-metadata.md), and [Reranking](reranking.md) +- [Agentic retrieval (concept)](agentic-retrieval-concept.md) +- [Benchmarking](benchmarking.md), which includes retrieval evaluation harnesses +- [Release notes](releasenotes-nv-ingest.md), which may mention agentic retrieval updates diff --git a/docs/docs/extraction/workflow-query-rerank.md b/docs/docs/extraction/workflow-query-rerank.md new file mode 100644 index 000000000..134ec19f4 --- /dev/null +++ b/docs/docs/extraction/workflow-query-rerank.md @@ -0,0 +1,13 @@ +# Workflow: Query and rerank + +After documents are [ingested](v2-api-guide.md), [chunked](chunking.md), and [indexed](data-store.md), applications run retrieval (semantic and optionally hybrid search) and optional reranking to improve top-K quality. + +Follow these steps: + +1. **Query.** Run searches against your vector store with filters as needed. See [Semantic and hybrid retrieval](semantic-hybrid-retrieval.md) and [Custom metadata and filtering](custom-metadata.md). +2. **Combine hybrid patterns.** Merge dense vectors with sparse or full-text signals where supported, such as LanceDB hybrid mode in [Vector databases](data-store.md). +3. **Rerank.** Apply a reranker NIM for a second-stage score on candidates. See [Reranking](reranking.md) and the [Support matrix](support-matrix.md) for reranker NIM options and GPU notes. + +**Bridge from extraction** + +Pipeline stages are summarized in [Concepts](concepts.md). Retrieval quality evaluation appears in [Benchmarking](benchmarking.md) and [Evaluate on your data](evaluate-on-your-data.md). diff --git a/docs/docs/extraction/workflow-video-ocr.md b/docs/docs/extraction/workflow-video-ocr.md new file mode 100644 index 000000000..e6dd1f4a6 --- /dev/null +++ b/docs/docs/extraction/workflow-video-ocr.md @@ -0,0 +1,11 @@ +# Workflow: Video processing with OCR + +For video assets, NeMo Retriever Library can combine audio or speech processing with visual text extraction when OCR applies to frames or derived images. + +For the audio and speech path, see [Speech and audio](audio.md) for RIVA ASR and related ingestion paths. + +For visual text and OCR, scanned or image-heavy content often uses OCR-oriented extract methods. See [OCR and scanned documents](extraction-ocr-scanned.md), [Text and layout extraction](text-layout-extraction.md), and [Nemotron Parse](nemoretriever-parse.md) for advanced visual parsing. + +Container formats and early-access video types are listed in [Supported file types and formats](supported-file-types.md). + +For end-to-end RAG stacks that include multimodal ingestion, see [End-to-end RAG with NVIDIA Blueprints](resources-links.md). From ebd9fd5bd71cf3980eb608cc9bb85a54e09b602f Mon Sep 17 00:00:00 2001 From: Kurt Heiss Date: Thu, 16 Apr 2026 14:25:00 -0700 Subject: [PATCH 79/94] ci(docs): add NRL GitHub Pages workflow, mkdocs config, and helper scripts Made-with: Cursor --- .github/workflows/nrl-docs-github-pages.yml | 102 ++++++++++ docs/mkdocs.nrl-github-pages.yml | 196 ++++++++++++++++++++ docs/overrides-nrl-staging/main.html | 13 ++ docs/scripts/print_nrl_mkdocs_nav.py | 48 +++++ docs/scripts/scan_non_nrl_doc_references.py | 74 ++++++++ 5 files changed, 433 insertions(+) create mode 100644 .github/workflows/nrl-docs-github-pages.yml create mode 100644 docs/mkdocs.nrl-github-pages.yml create mode 100644 docs/overrides-nrl-staging/main.html create mode 100644 docs/scripts/print_nrl_mkdocs_nav.py create mode 100644 docs/scripts/scan_non_nrl_doc_references.py diff --git a/.github/workflows/nrl-docs-github-pages.yml b/.github/workflows/nrl-docs-github-pages.yml new file mode 100644 index 000000000..787122022 --- /dev/null +++ b/.github/workflows/nrl-docs-github-pages.yml @@ -0,0 +1,102 @@ +# NeMo Retriever Library (NRL) documentation only — GitHub Pages staging / nightly. +# Does not run the full Docker + Sphinx pipeline (no nv-ingest / nv-ingest-api HTML API dump). +name: NRL documentation — GitHub Pages (staging) + +on: + push: + branches: + - main + paths: + - "docs/**" + - "nemo_retriever/**" + - ".github/workflows/nrl-docs-github-pages.yml" + schedule: + # Nightly (UTC): pick up doc changes even if no pushes + - cron: "0 7 * * *" + workflow_dispatch: + +permissions: + contents: read + pages: write + id-token: write + +concurrency: + group: pages-nrl-staging + cancel-in-progress: false + +jobs: + build: + name: Build NRL docs (staging) + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Configure Pages + id: pages + uses: actions/configure-pages@v5 + + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: "3.12" + cache: pip + cache-dependency-path: docs/requirements.txt + + - name: Install Python dependencies + run: | + python -m pip install --upgrade pip + pip install -r docs/requirements.txt + pip install -e ./nemo_retriever + + - name: Print NRL site navigation (pre-deploy) + run: python docs/scripts/print_nrl_mkdocs_nav.py + + - name: Write nav + scan summary for the workflow run + run: | + { + echo "### NRL GitHub Pages — site navigation" + echo + echo '```' + python docs/scripts/print_nrl_mkdocs_nav.py + echo '```' + echo + echo "### Non-NRL / legacy reference scan (excerpt)" + echo "Full report is attached as an artifact." + echo + echo '```' + python docs/scripts/scan_non_nrl_doc_references.py | head -n 120 + echo '```' + } >> "$GITHUB_STEP_SUMMARY" + + - name: Scan for non-NRL references (full report) + run: python docs/scripts/scan_non_nrl_doc_references.py | tee non-nrl-review.txt + + - name: Upload non-NRL scan artifact + uses: actions/upload-artifact@v4 + with: + name: non-nrl-content-review + path: non-nrl-review.txt + + - name: Build MkDocs (NRL only) + working-directory: docs + env: + SITE_URL: ${{ steps.pages.outputs.base_url }} + run: mkdocs build -f mkdocs.nrl-github-pages.yml --strict + + - name: Upload Pages artifact + uses: actions/upload-pages-artifact@v3 + with: + path: docs/site + + deploy: + name: Deploy to GitHub Pages + needs: build + runs-on: ubuntu-latest + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + steps: + - name: Deploy + id: deployment + uses: actions/deploy-pages@v4 diff --git a/docs/mkdocs.nrl-github-pages.yml b/docs/mkdocs.nrl-github-pages.yml new file mode 100644 index 000000000..dcdf99bf3 --- /dev/null +++ b/docs/mkdocs.nrl-github-pages.yml @@ -0,0 +1,196 @@ +# NeMo Retriever Library (NRL) only — GitHub Pages staging/nightly build. +# Does not include the broader NeMo Retriever suite landing page (docs/docs/index.md), +# full multi-package Sphinx API dumps, or legacy nv-ingest markdown aliases in the built site. +# +# Build: make nrl-github-pages OR mkdocs build -f mkdocs.nrl-github-pages.yml +# Optional: SITE_URL=https://owner.github.io/repo/ mkdocs build -f mkdocs.nrl-github-pages.yml + +site_name: NeMo Retriever (staging) +site_description: NeMo Retriever documentation — staging / nightly (not a production release) +site_url: !ENV [SITE_URL, 'https://example.invalid/'] + +theme: + name: material + custom_dir: overrides-nrl-staging + features: + - content.code.annotate + - navigation.tabs + - navigation.indexes + - navigation.instant + - navigation.path + - navigation.instant.prefetch + - navigation.top + - navigation.footer + - navigation.expand + - search.suggest + - search.highlight + - content.code.copy + font: + code: Roboto Mono + favicon: assets/images/favicon.png + language: en + # Visible on every page — staging / not a release build + announcement: | + **Staging (nightly):** NeMo Retriever documentation only. This site is not a production or release publication. + palette: + - media: "(prefers-color-scheme: light)" + scheme: light + primary: custom + accent: lime + toggle: + icon: material/weather-night + name: Switch to dark mode + - media: "(prefers-color-scheme: dark)" + scheme: dark + primary: custom + accent: lime + toggle: + icon: material/weather-sunny + name: Switch to light mode + icon: + logo: nvidia/nvidia-logo + repo: fontawesome/brands/github + +extra_css: + - assets/css/color-schemes.css + - assets/css/fonts.css + - assets/css/custom-material.css + - assets/css/jupyter-themes.css + +# Broader suite overview and legacy duplicate pages are excluded from the build (see exclude_docs). +nav: + - NeMo Retriever: + - "1. Introduction": + - "What is NeMo Retriever?": extraction/overview.md + - Key features: extraction/key-features.md + - Key concepts: extraction/concepts.md + - How to use this documentation: extraction/how-to-use-this-documentation.md + - Release notes: extraction/releasenotes-nv-ingest.md + - "2. Get started": + - About this section: extraction/getting-started-about.md + - Prerequisites: extraction/prerequisites.md + - "Hardware and support matrix": extraction/support-matrix.md + - "Quickstart: NeMo Retriever Library (local)": extraction/quickstart-library-mode.md + - "Quickstart: Kubernetes (Helm)": extraction/helm.md + - "Deploy (Docker Compose)": extraction/quickstart-guide.md + - "Authentication and API keys": extraction/ngc-api-key.md + - "3. Choose your deployment": + - Compare deployment options: extraction/choose-your-path.md + - When to use NVIDIA-hosted NIMs: extraction/hosted-nims-when-to-use.md + - When to self-host NIMs: extraction/self-host-nims-when-to-use.md + - "4. Core workflows": + - "Workflow: Document ingestion": extraction/v2-api-guide.md + - "Workflow: Build a searchable collection": + - "Vector databases and collections": extraction/data-store.md + - "Chunking and splitting": extraction/chunking.md + - "Workflow: Query and rerank": extraction/workflow-query-rerank.md + - "Workflow: Agentic retrieval": extraction/workflow-agentic-retrieval.md + - "Workflow: Audio or video to text": extraction/audio.md + - "Workflow: Video processing with OCR": extraction/workflow-video-ocr.md + - "End-to-end RAG with NVIDIA Blueprints": extraction/resources-links.md + - "5. Multimodal extraction": + - "Supported file types and formats": extraction/supported-file-types.md + - "Text and layout extraction": extraction/text-layout-extraction.md + - Tables: extraction/extraction-tables.md + - "Charts and infographics": extraction/extraction-charts-infographics.md + - "OCR and scanned documents": extraction/extraction-ocr-scanned.md + - "Nemotron Parse based parsing": extraction/nemoretriever-parse.md + - Image captioning: extraction/image-captioning.md + - "Metadata and content schema": extraction/content-metadata.md + - "Extraction limitations and quality": extraction/throughput-is-dataset-dependent.md + - "6. Embedding, indexing, and storage": + - "Embedding NIMs and models": extraction/embedding-nims-models.md + - "Multimodal embeddings (VLM)": extraction/vlm-embed.md + - Vector databases: extraction/data-store.md + - "Chunking and splitting": extraction/chunking.md + - "7. Retrieval and ranking": + - "Semantic and hybrid retrieval": extraction/semantic-hybrid-retrieval.md + - Reranking: extraction/reranking.md + - "Custom metadata and filtering": extraction/custom-metadata.md + - "Agentic retrieval (concept)": extraction/agentic-retrieval-concept.md + - "8. Deployment and operations": + - "Scaling: static and dynamic": extraction/scaling-modes.md + - "Ray and distributed ingest": extraction/ray-logging.md + - "Telemetry and observability": extraction/telemetry.md + - "Benchmarking and load testing": extraction/benchmarking.md + - Production checklist: extraction/production-checklist.md + - "9. Customize and extend": + - User-defined functions: extraction/user-defined-functions.md + - User-defined stages: extraction/user-defined-stages.md + - "NimClient and custom NIM endpoints": extraction/nimclient.md + - "10. Integrations and ecosystem": + - "NVIDIA AI Blueprints": extraction/resources-links.md + - "Framework integrations": extraction/integrations-langchain-llamaindex-haystack.md + - "Vector database partners": extraction/vector-db-partners.md + - "Starter kits": extraction/notebooks.md + - "11. Evaluation and benchmarks": + - "Benchmarking methodology": extraction/benchmarking.md + - "Recall and evaluation harnesses": extraction/benchmarking.md + - "Evaluate on your own documents": extraction/evaluate-on-your-data.md + - "Published metrics and comparisons": extraction/published-metrics-comparisons.md + - "12. Reference": + - "API guide": extraction/nemo-retriever-api-reference.md + - "HTTP API (V2)": extraction/v2-api-guide.md + - "Python API": extraction/python-api-reference.md + - "CLI reference": extraction/cli-reference.md + - Environment variables: extraction/environment-config.md + - "Metadata reference": extraction/content-metadata.md + - "13. Support and community": + - Troubleshooting: extraction/troubleshoot.md + - FAQ: extraction/faq.md + - Contributing: extraction/contributing.md + - Additional resources: + - "OSS licences": license.md + +plugins: + - search + - macros + - mkdocstrings: + handlers: + python: + options: + docstring_style: google + show_source: true + show_if_no_docstring: true + paths: + - ../nemo_retriever/src + - mkdocs-jupyter: + theme: auto + highlight_extra_classes: "jupyter-notebook" + - redirects: + redirect_maps: + extraction/index.md: extraction/overview.md + extraction/nv-ingest_cli.md: extraction/cli-reference.md + extraction/nv-ingest-python-api.md: extraction/python-api-reference.md + - site-urls + +markdown_extensions: + - attr_list + - md_in_html + - pymdownx.details + - pymdownx.superfences + - pymdownx.snippets: + check_paths: true + restrict_base_path: false + base_path: "." + - pymdownx.emoji: + emoji_index: !!python/name:material.extensions.emoji.twemoji + emoji_generator: !!python/name:material.extensions.emoji.to_svg + options: + custom_icons: + - overrides/.icons + - def_list + - admonition + - footnotes + +# MkDocs 1.6+: drop pages that are not part of the NRL-only site (still in repo for upstream parity). +exclude_docs: | + index.md + extraction/nv-ingest_cli.md + extraction/nv-ingest-python-api.md + +extra: + generator: false + +copyright: | + © Copyright 2023–2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. Staging documentation build. diff --git a/docs/overrides-nrl-staging/main.html b/docs/overrides-nrl-staging/main.html new file mode 100644 index 000000000..98138487f --- /dev/null +++ b/docs/overrides-nrl-staging/main.html @@ -0,0 +1,13 @@ +{# Staging GitHub Pages: no Adobe DTM / Hotjar; keep content and theme footer. #} +{% extends "base.html" %} + +{% block extrahead %} +{% endblock %} + +{% block content %} + {{ super() }} +{% endblock %} + +{% block footer %} + {{ super() }} +{% endblock %} diff --git a/docs/scripts/print_nrl_mkdocs_nav.py b/docs/scripts/print_nrl_mkdocs_nav.py new file mode 100644 index 000000000..e4c0a46ad --- /dev/null +++ b/docs/scripts/print_nrl_mkdocs_nav.py @@ -0,0 +1,48 @@ +#!/usr/bin/env python3 +"""Print the navigation tree from mkdocs.nrl-github-pages.yml for pre-deploy review.""" + +from __future__ import annotations + +import sys +from pathlib import Path + +from mkdocs.utils import yaml_load + +CONFIG = Path(__file__).resolve().parents[1] / "mkdocs.nrl-github-pages.yml" + + +def _walk(node, indent: int = 0) -> None: + pad = " " * indent + if isinstance(node, str): + print(f"{pad}- {node}") + return + if isinstance(node, list): + for item in node: + _walk(item, indent) + return + if isinstance(node, dict): + for key, val in node.items(): + if isinstance(val, str): + print(f"{pad}- {key}: {val}") + else: + print(f"{pad}- {key}") + _walk(val, indent + 1) + return + print(f"{pad}- {node!r}") + + +def main() -> int: + if not CONFIG.is_file(): + print(f"Missing config: {CONFIG}", file=sys.stderr) + return 1 + data = yaml_load(CONFIG.read_text(encoding="utf-8")) + nav = data.get("nav") + print(f"Config: {CONFIG.name}") + print("Navigation hierarchy (NRL GitHub Pages):") + print() + _walk(nav) + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/docs/scripts/scan_non_nrl_doc_references.py b/docs/scripts/scan_non_nrl_doc_references.py new file mode 100644 index 000000000..b22bbd74d --- /dev/null +++ b/docs/scripts/scan_non_nrl_doc_references.py @@ -0,0 +1,74 @@ +#!/usr/bin/env python3 +""" +Scan NRL doc sources for legacy naming and non-NRL references (manual review). + +This does not fail the build; it lists candidates for editorial cleanup. +""" + +from __future__ import annotations + +import re +import sys +from pathlib import Path + +DOCS_ROOT = Path(__file__).resolve().parents[1] / "docs" + +# Lines matching these patterns are reported (case-sensitive variants handled separately). +PATTERNS: list[tuple[str, re.Pattern[str]]] = [ + ("nv-ingest (substring)", re.compile(r"nv-ingest", re.IGNORECASE)), + ("NV-Ingest", re.compile(r"NV-Ingest")), + ("NVIDIA Ingest (rename note)", re.compile(r"NVIDIA Ingest")), + ("github.com/.../nv-ingest", re.compile(r"github\.com/[^/\s]+/nv-ingest")), + ("nvcr.io/.../nv-ingest", re.compile(r"nvcr\.io/[^\s)]+nv-ingest")), + ("nv_ingest (Python package)", re.compile(r"\bnv_ingest\b")), + ("NV_INGEST_", re.compile(r"NV_INGEST_")), + ("releasenotes-nv-ingest filename", re.compile(r"releasenotes-nv-ingest")), +] + + +def main() -> int: + if not DOCS_ROOT.is_dir(): + print(f"Missing docs tree: {DOCS_ROOT}", file=sys.stderr) + return 1 + + md_files = sorted(DOCS_ROOT.rglob("*.md")) + print("Non-NRL / legacy reference scan (informational)") + print(f"Root: {DOCS_ROOT}") + print(f"Files scanned: {len(md_files)}") + print() + + total = 0 + for path in md_files: + rel = path.relative_to(DOCS_ROOT) + try: + text = path.read_text(encoding="utf-8") + except OSError as e: + print(f"{rel}: read error: {e}", file=sys.stderr) + continue + lines = text.splitlines() + file_hits: list[str] = [] + for i, line in enumerate(lines, start=1): + for label, pat in PATTERNS: + if pat.search(line): + snippet = line.strip() + if len(snippet) > 160: + snippet = snippet[:157] + "..." + file_hits.append(f" L{i} [{label}] {snippet}") + break + if file_hits: + total += len(file_hits) + print(f"{rel}:") + print("\n".join(file_hits)) + print() + + print(f"Total flagged lines (may overlap patterns): {total}") + print() + print( + "Notes: Some hits are expected (historical rename notes, CLI compatibility, " + "environment variables, or container image names). Use this list for editorial review only." + ) + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) From 17f2504c5bd84b47d7a38c6d2ae86b8216b31504 Mon Sep 17 00:00:00 2001 From: Kurt Heiss Date: Thu, 16 Apr 2026 15:43:14 -0700 Subject: [PATCH 80/94] docs: add NVIDIA logo icon to NRL staging overrides for MkDocs build Made-with: Cursor --- docs/overrides-nrl-staging/.icons/nvidia/nvidia-logo.svg | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 docs/overrides-nrl-staging/.icons/nvidia/nvidia-logo.svg diff --git a/docs/overrides-nrl-staging/.icons/nvidia/nvidia-logo.svg b/docs/overrides-nrl-staging/.icons/nvidia/nvidia-logo.svg new file mode 100644 index 000000000..da235bf46 --- /dev/null +++ b/docs/overrides-nrl-staging/.icons/nvidia/nvidia-logo.svg @@ -0,0 +1,9 @@ + + + + + + + + + From 648b59793d77faa49f3fb5344fff14766fa709c7 Mon Sep 17 00:00:00 2001 From: Kurt Heiss Date: Thu, 16 Apr 2026 15:50:15 -0700 Subject: [PATCH 81/94] docs(nrl): emit site root index.html via redirect to Library overview Made-with: Cursor --- docs/mkdocs.nrl-github-pages.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/mkdocs.nrl-github-pages.yml b/docs/mkdocs.nrl-github-pages.yml index dcdf99bf3..610aecdc2 100644 --- a/docs/mkdocs.nrl-github-pages.yml +++ b/docs/mkdocs.nrl-github-pages.yml @@ -159,6 +159,8 @@ plugins: highlight_extra_classes: "jupyter-notebook" - redirects: redirect_maps: + # Suite docs/docs/index.md is excluded; still emit site/index.html (redirect to Library overview) + index.md: extraction/overview.md extraction/index.md: extraction/overview.md extraction/nv-ingest_cli.md: extraction/cli-reference.md extraction/nv-ingest-python-api.md: extraction/python-api-reference.md From 3eac3ca9ee3f2237dc46a037f668aff649213fde Mon Sep 17 00:00:00 2001 From: Kurt Heiss Date: Fri, 17 Apr 2026 09:24:48 -0700 Subject: [PATCH 82/94] Apply suggestion from @greptile-apps[bot] Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com> --- .github/workflows/nrl-docs-github-pages.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/nrl-docs-github-pages.yml b/.github/workflows/nrl-docs-github-pages.yml index 787122022..496fb5c9e 100644 --- a/.github/workflows/nrl-docs-github-pages.yml +++ b/.github/workflows/nrl-docs-github-pages.yml @@ -28,7 +28,7 @@ jobs: build: name: Build NRL docs (staging) runs-on: ubuntu-latest - steps: + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Checkout uses: actions/checkout@v4 From 14827109e63fa412827bb79927d0dd407d2888df Mon Sep 17 00:00:00 2001 From: Kurt Heiss Date: Fri, 17 Apr 2026 10:38:49 -0700 Subject: [PATCH 83/94] docs: NRL workflows, navigation, and rename note across extraction pages - Fix mkdocs.nrl-github-pages.yml so Workflow: Document ingestion targets workflow-document-ingestion.md (not the V2 API guide); add workflow and metadata schema pages. - Add workflow-document-ingestion.md, workflow pages, and multimodal-metadata-schema.md; update workflow cross-links. - Align quick start links and GitHub URLs with NeMo-Retriever; use Python and CLI Quick Start Guide labels; refresh quickstart-guide examples and MIG references. - Insert the standard NVIDIA Ingest (nv-ingest) rename note after the H1 on every extraction topic page for consistent messaging. Made-with: Cursor --- .../extraction/agentic-retrieval-concept.md | 5 + docs/docs/extraction/audio.md | 13 +- docs/docs/extraction/benchmarking.md | 5 + docs/docs/extraction/choose-your-path.md | 5 + docs/docs/extraction/chunking.md | 5 + docs/docs/extraction/cli-reference.md | 5 + docs/docs/extraction/concepts.md | 5 + docs/docs/extraction/contributing.md | 5 + docs/docs/extraction/custom-metadata.md | 5 + docs/docs/extraction/embedding-nims-models.md | 5 + docs/docs/extraction/evaluate-on-your-data.md | 5 + .../extraction-charts-infographics.md | 5 + .../docs/extraction/extraction-ocr-scanned.md | 5 + docs/docs/extraction/extraction-tables.md | 5 + docs/docs/extraction/getting-started-about.md | 9 +- docs/docs/extraction/helm.md | 4 + .../extraction/hosted-nims-when-to-use.md | 5 + .../how-to-use-this-documentation.md | 5 + docs/docs/extraction/image-captioning.md | 5 + ...egrations-langchain-llamaindex-haystack.md | 5 + docs/docs/extraction/key-features.md | 5 + .../extraction/multimodal-metadata-schema.md | 8 + .../nemo-retriever-api-reference.md | 5 + docs/docs/extraction/nemoretriever-parse.md | 14 +- docs/docs/extraction/ngc-api-key.md | 5 + docs/docs/extraction/notebooks.md | 24 +-- docs/docs/extraction/nv-ingest_cli.md | 5 + docs/docs/extraction/overview.md | 4 +- docs/docs/extraction/production-checklist.md | 5 + .../published-metrics-comparisons.md | 5 + docs/docs/extraction/quickstart-guide.md | 142 +++++++++--------- docs/docs/extraction/ray-logging.md | 5 + docs/docs/extraction/reranking.md | 5 + docs/docs/extraction/resources-links.md | 5 + .../extraction/self-host-nims-when-to-use.md | 5 + .../extraction/semantic-hybrid-retrieval.md | 5 + docs/docs/extraction/supported-file-types.md | 5 + .../docs/extraction/text-layout-extraction.md | 5 + .../throughput-is-dataset-dependent.md | 5 + docs/docs/extraction/v2-api-guide.md | 5 + docs/docs/extraction/vector-db-partners.md | 5 + .../extraction/workflow-agentic-retrieval.md | 5 + .../workflow-build-searchable-collection.md | 12 ++ .../extraction/workflow-document-ingestion.md | 18 +++ .../extraction/workflow-e2e-blueprints.md | 8 + docs/docs/extraction/workflow-query-rerank.md | 7 +- docs/docs/extraction/workflow-video-ocr.md | 5 + docs/mkdocs.nrl-github-pages.yml | 14 +- 48 files changed, 344 insertions(+), 108 deletions(-) create mode 100644 docs/docs/extraction/multimodal-metadata-schema.md create mode 100644 docs/docs/extraction/workflow-build-searchable-collection.md create mode 100644 docs/docs/extraction/workflow-document-ingestion.md create mode 100644 docs/docs/extraction/workflow-e2e-blueprints.md diff --git a/docs/docs/extraction/agentic-retrieval-concept.md b/docs/docs/extraction/agentic-retrieval-concept.md index d8b8fac04..5394dade3 100644 --- a/docs/docs/extraction/agentic-retrieval-concept.md +++ b/docs/docs/extraction/agentic-retrieval-concept.md @@ -1,5 +1,10 @@ # Agentic retrieval (concept) +!!! note + + NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. + + Agentic retrieval means **iterative, tool-driven** retrieval: an agent plans steps, issues searches, may refine filters, and optionally reranks until it has enough context to answer. NeMo Retriever Library focuses on document ingestion, embeddings, vector stores, hybrid search, and reranking. Orchestration frameworks call these building blocks from your application. diff --git a/docs/docs/extraction/audio.md b/docs/docs/extraction/audio.md index 6e577b1fd..82c74c0b1 100644 --- a/docs/docs/extraction/audio.md +++ b/docs/docs/extraction/audio.md @@ -1,5 +1,10 @@ # Extract Speech with NeMo Retriever Library +!!! note + + NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. + + This documentation describes two methods to run [NeMo Retriever Library](overview.md) with the [parakeet-1-1b-ctc-en-us ASR NIM microservice](https://docs.nvidia.com/nim/speech/latest/asr/deploy-asr-models/parakeet-ctc-en-us.html) (`nvcr.io/nim/nvidia/parakeet-1-1b-ctc-en-us`) to extract speech from audio files. @@ -7,10 +12,6 @@ with the [parakeet-1-1b-ctc-en-us ASR NIM microservice](https://docs.nvidia.com/ - Run the NIM locally by using Docker Compose - Use NVIDIA Cloud Functions (NVCF) endpoints for cloud-based inference -!!! note - - NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. - Currently, you can extract speech from the following file types: - `mp3` @@ -92,7 +93,7 @@ To generate one extracted element for each sentence-like ASR segment, include `e !!! tip - For more Python examples, refer to [NV-Ingest: Python Client Quick Start Guide](https://github.com/NVIDIA/nv-ingest/blob/main/client/client_examples/examples/python_client_usage.ipynb). + For more Python examples, refer to [Python Quick Start Guide](https://github.com/NVIDIA/NeMo-Retriever/blob/main/client/client_examples/examples/python_client_usage.ipynb). ## Use NVCF Endpoints for Cloud-Based Inference @@ -128,7 +129,7 @@ Instead of running the pipeline locally, you can use NVCF to perform inference b !!! tip - For more Python examples, refer to [NV-Ingest: Python Client Quick Start Guide](https://github.com/NVIDIA/nv-ingest/blob/main/client/client_examples/examples/python_client_usage.ipynb). + For more Python examples, refer to [Python Quick Start Guide](https://github.com/NVIDIA/NeMo-Retriever/blob/main/client/client_examples/examples/python_client_usage.ipynb). diff --git a/docs/docs/extraction/benchmarking.md b/docs/docs/extraction/benchmarking.md index 0fb0c07ae..1c7b34e91 100644 --- a/docs/docs/extraction/benchmarking.md +++ b/docs/docs/extraction/benchmarking.md @@ -1,5 +1,10 @@ # NV-Ingest Integration Testing Framework +!!! note + + NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. + + A configurable, dataset-agnostic testing framework for end-to-end validation of nv-ingest pipelines. This framework uses structured YAML configuration for type safety, validation, and parameter management. ## Dataset Prerequisites diff --git a/docs/docs/extraction/choose-your-path.md b/docs/docs/extraction/choose-your-path.md index b5514ea20..1f28b2cdc 100644 --- a/docs/docs/extraction/choose-your-path.md +++ b/docs/docs/extraction/choose-your-path.md @@ -1,5 +1,10 @@ # Choose your path +!!! note + + NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. + + Use this page to pick documentation and deployment options that match your goal. ## I want to run locally or embed the library diff --git a/docs/docs/extraction/chunking.md b/docs/docs/extraction/chunking.md index ab9e46f1a..4086dc7b9 100644 --- a/docs/docs/extraction/chunking.md +++ b/docs/docs/extraction/chunking.md @@ -1,5 +1,10 @@ # Split Documents +!!! note + + NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. + + Splitting, also known as chunking, breaks large documents or text into smaller, manageable sections to improve retrieval efficiency. After chunking, only the most relevant pieces of information are retrieved for a given query. Chunking also prevents text from exceeding the context window of the embedding model. diff --git a/docs/docs/extraction/cli-reference.md b/docs/docs/extraction/cli-reference.md index 6ce311402..46175a9a4 100644 --- a/docs/docs/extraction/cli-reference.md +++ b/docs/docs/extraction/cli-reference.md @@ -1,5 +1,10 @@ # CLI Reference +!!! note + + NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. + + After you install the Python dependencies, you can use the [NeMo Retriever Library](overview.md) command line interface (CLI). To use the CLI, use the `nemo-retriever` command. diff --git a/docs/docs/extraction/concepts.md b/docs/docs/extraction/concepts.md index 93d09430d..5c4ddc617 100644 --- a/docs/docs/extraction/concepts.md +++ b/docs/docs/extraction/concepts.md @@ -1,5 +1,10 @@ # Concepts +!!! note + + NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. + + These terms appear throughout NeMo Retriever Library documentation. ## Job diff --git a/docs/docs/extraction/contributing.md b/docs/docs/extraction/contributing.md index 6a136c218..7c21d42f0 100644 --- a/docs/docs/extraction/contributing.md +++ b/docs/docs/extraction/contributing.md @@ -1,4 +1,9 @@ # Contributing to NV-Ingest +!!! note + + NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. + + External contributions to NV-Ingest will be welcome soon, and they are greatly appreciated! For more information, refer to [Contributing to NV-Ingest](https://github.com/NVIDIA/nv-ingest/blob/main/CONTRIBUTING.md). diff --git a/docs/docs/extraction/custom-metadata.md b/docs/docs/extraction/custom-metadata.md index 9e9dee1bf..f2ca25578 100644 --- a/docs/docs/extraction/custom-metadata.md +++ b/docs/docs/extraction/custom-metadata.md @@ -1,5 +1,10 @@ # Use Custom Metadata to Filter Search Results +!!! note + + NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. + + You can upload custom metadata for documents during ingestion. By uploading custom metadata you can attach additional information to documents, and use it for filtering results during retrieval operations. diff --git a/docs/docs/extraction/embedding-nims-models.md b/docs/docs/extraction/embedding-nims-models.md index 1bcd8e50b..b78512e7c 100644 --- a/docs/docs/extraction/embedding-nims-models.md +++ b/docs/docs/extraction/embedding-nims-models.md @@ -1,5 +1,10 @@ # Embedding NIMs and models +!!! note + + NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. + + Embeddings turn extracted text and multimodal content into vectors for semantic search. NeMo Retriever Library integrates with NVIDIA NIM microservices for embedding. Model names and compatibility vary by release; see the [Support matrix](support-matrix.md) and the [NVIDIA NIM catalog](https://build.nvidia.com/). For multimodal or VLM embeddings, see [Multimodal embeddings (VLM)](vlm-embed.md). diff --git a/docs/docs/extraction/evaluate-on-your-data.md b/docs/docs/extraction/evaluate-on-your-data.md index 34605ed66..213e5b973 100644 --- a/docs/docs/extraction/evaluate-on-your-data.md +++ b/docs/docs/extraction/evaluate-on-your-data.md @@ -1,5 +1,10 @@ # Evaluate on your data +!!! note + + NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. + + Retrieval and ingestion performance **depend on your documents**, hardware, and pipeline settings. Use the following when measuring quality and throughput on **your** datasets. ## Benchmarking and baselines diff --git a/docs/docs/extraction/extraction-charts-infographics.md b/docs/docs/extraction/extraction-charts-infographics.md index 032a0779c..45334e5fc 100644 --- a/docs/docs/extraction/extraction-charts-infographics.md +++ b/docs/docs/extraction/extraction-charts-infographics.md @@ -1,5 +1,10 @@ # Charts and infographics +!!! note + + NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. + + Charts and infographic regions are classified as graphic elements and processed with the corresponding NVIDIA NIM workflows (for example, **yolox-graphic-elements** in current releases). Outputs use the same metadata schema as other extracted objects. **Related** diff --git a/docs/docs/extraction/extraction-ocr-scanned.md b/docs/docs/extraction/extraction-ocr-scanned.md index 3b895da18..f5d79a988 100644 --- a/docs/docs/extraction/extraction-ocr-scanned.md +++ b/docs/docs/extraction/extraction-ocr-scanned.md @@ -1,5 +1,10 @@ # OCR and scanned documents +!!! note + + NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. + + Scanned PDFs and image-only pages rely on OCR and hybrid paths that combine native text extraction with OCR when needed. For extract methods such as `ocr` and `pdfium_hybrid`, see the [Python API reference](python-api-reference.md). **Related** diff --git a/docs/docs/extraction/extraction-tables.md b/docs/docs/extraction/extraction-tables.md index 941e0423c..d061c9451 100644 --- a/docs/docs/extraction/extraction-tables.md +++ b/docs/docs/extraction/extraction-tables.md @@ -1,5 +1,10 @@ # Tables +!!! note + + NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. + + NeMo Retriever Library detects tables as structured page elements, processes them through the appropriate NIMs, and exports formats suitable for downstream RAG (including Markdown-oriented representations where configured). Availability depends on pipeline and model configuration; see the [Support matrix](support-matrix.md). **Related** diff --git a/docs/docs/extraction/getting-started-about.md b/docs/docs/extraction/getting-started-about.md index c652ffecc..c0cca7f16 100644 --- a/docs/docs/extraction/getting-started-about.md +++ b/docs/docs/extraction/getting-started-about.md @@ -1,5 +1,10 @@ # About getting started +!!! note + + NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. + + This section walks you from **access and prerequisites** through **first deployment** and **hands-on notebooks**. Typical order: @@ -7,8 +12,8 @@ Typical order: 1. [Get your API key](ngc-api-key.md) (NGC / API access as required by your workflow). 2. Confirm [Prerequisites](prerequisites.md) and the [Support matrix](support-matrix.md) for your OS, GPU, and software stack. 3. Deploy using one of: - - [Library mode](quickstart-library-mode.md) (without full stack containers where appropriate) - - [Helm Chart](helm.md) for Kubernetes environments + - [Library mode](quickstart-library-mode.md) (without full stack containers where appropriate) + - [Helm Chart](helm.md) for Kubernetes environments 4. Explore [Jupyter Notebooks](notebooks.md) for end-to-end examples. If you are new to the product, read [What is NeMo Retriever Library?](overview.md), [Key features](key-features.md), and [Concepts](concepts.md) under **Introduction** first. diff --git a/docs/docs/extraction/helm.md b/docs/docs/extraction/helm.md index 0983a382e..2cc890059 100644 --- a/docs/docs/extraction/helm.md +++ b/docs/docs/extraction/helm.md @@ -2,6 +2,10 @@ # Deploy With Helm for NeMo Retriever Library +!!! note + + NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. + To deploy [NeMo Retriever Library](overview.md) by using Helm, refer to [NV-Ingest Helm Charts](https://github.com/NVIDIA/NeMo-Retriever/blob/26.03/helm/README.md). !!! note "Air-gapped environments" diff --git a/docs/docs/extraction/hosted-nims-when-to-use.md b/docs/docs/extraction/hosted-nims-when-to-use.md index 99f4a83d2..f2234b0d4 100644 --- a/docs/docs/extraction/hosted-nims-when-to-use.md +++ b/docs/docs/extraction/hosted-nims-when-to-use.md @@ -1,5 +1,10 @@ # When to use NVIDIA-hosted NIMs +!!! note + + NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. + + [NVIDIA-hosted NIMs](https://build.nvidia.com/) run inference on NVIDIA-managed infrastructure. You call models with API keys (see [Get your API key](ngc-api-key.md)) without operating GPU nodes yourself. Consider hosted NIMs when: diff --git a/docs/docs/extraction/how-to-use-this-documentation.md b/docs/docs/extraction/how-to-use-this-documentation.md index 84b6d221c..decc8c052 100644 --- a/docs/docs/extraction/how-to-use-this-documentation.md +++ b/docs/docs/extraction/how-to-use-this-documentation.md @@ -1,5 +1,10 @@ # How to use this documentation +!!! note + + NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. + + Use the sections below as a reading order that matches how you run NeMo Retriever Library. ## NeMo Retriever Library (local or embedded) diff --git a/docs/docs/extraction/image-captioning.md b/docs/docs/extraction/image-captioning.md index 33bc087ae..7263e1e83 100644 --- a/docs/docs/extraction/image-captioning.md +++ b/docs/docs/extraction/image-captioning.md @@ -1,5 +1,10 @@ # Image captioning +!!! note + + NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. + + Image captioning generates natural-language descriptions for unstructured image content. Retrieval can then use text embeddings over captions and visual embeddings where you configure them. **Related** diff --git a/docs/docs/extraction/integrations-langchain-llamaindex-haystack.md b/docs/docs/extraction/integrations-langchain-llamaindex-haystack.md index 32f762524..b12d0d837 100644 --- a/docs/docs/extraction/integrations-langchain-llamaindex-haystack.md +++ b/docs/docs/extraction/integrations-langchain-llamaindex-haystack.md @@ -1,5 +1,10 @@ # Integrate with LangChain, LlamaIndex, and Haystack +!!! note + + NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. + + NeMo Retriever Library is commonly used **behind** retrieval-augmented generation (RAG) apps built with popular orchestration frameworks. ## Jupyter examples (LangChain and LlamaIndex) diff --git a/docs/docs/extraction/key-features.md b/docs/docs/extraction/key-features.md index fe9003fbf..cdcc07b45 100644 --- a/docs/docs/extraction/key-features.md +++ b/docs/docs/extraction/key-features.md @@ -1,5 +1,10 @@ # Key features +!!! note + + NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. + + NeMo Retriever Library is built for **accuracy**, **throughput**, and **flexible deployment** in enterprise retrieval pipelines. ## Extraction and understanding diff --git a/docs/docs/extraction/multimodal-metadata-schema.md b/docs/docs/extraction/multimodal-metadata-schema.md new file mode 100644 index 000000000..66c01b4da --- /dev/null +++ b/docs/docs/extraction/multimodal-metadata-schema.md @@ -0,0 +1,8 @@ +# Metadata and content schema (multimodal extraction) + +!!! note + + NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. + + +Extracted objects follow the schema and field descriptions in the [Metadata reference](content-metadata.md). Use that page for tables, types, and per-field notes. diff --git a/docs/docs/extraction/nemo-retriever-api-reference.md b/docs/docs/extraction/nemo-retriever-api-reference.md index 7e4f2c0e0..c8bbaceab 100644 --- a/docs/docs/extraction/nemo-retriever-api-reference.md +++ b/docs/docs/extraction/nemo-retriever-api-reference.md @@ -1,5 +1,10 @@ # NeMo Retriever API Reference +!!! note + + NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. + + ::: nemo_retriever.ingestor ::: nemo_retriever.retriever diff --git a/docs/docs/extraction/nemoretriever-parse.md b/docs/docs/extraction/nemoretriever-parse.md index d0b106be5..fffd356d1 100644 --- a/docs/docs/extraction/nemoretriever-parse.md +++ b/docs/docs/extraction/nemoretriever-parse.md @@ -1,5 +1,10 @@ # Advanced Visual Parsing with Nemotron Parse +!!! note + + NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. + + For scanned documents, or documents with complex layouts, we recommend that you use [nemotron-parse](https://build.nvidia.com/nvidia/nemotron-parse). Nemotron parse provides higher-accuracy text extraction. @@ -11,11 +16,6 @@ to run [NeMo Retriever Library](overview.md) with nemotron-parse. - Use NVIDIA Cloud Functions (NVCF) endpoints for cloud-based inference - Run the Ray batch pipeline with nemotron-parse ([library mode](quickstart-library-mode.md)) -!!! note - - NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. - - ## Limitations Currently, the limitations to using `nemotron-parse` with NeMo Retriever Library are the following: @@ -61,7 +61,7 @@ Use the following procedure to run the NIM locally. !!! tip - For more Python examples, refer to [NV-Ingest: Python Client Quick Start Guide](https://github.com/NVIDIA/nv-ingest/blob/main/client/client_examples/examples/python_client_usage.ipynb). + For more Python examples, refer to [Python Quick Start Guide](https://github.com/NVIDIA/NeMo-Retriever/blob/main/client/client_examples/examples/python_client_usage.ipynb). ## Using NVCF Endpoints for Cloud-Based Inference @@ -102,7 +102,7 @@ Instead of running the pipeline locally, you can use NVCF to perform inference b !!! tip - For more Python examples, refer to [NV-Ingest: Python Client Quick Start Guide](https://github.com/NVIDIA/nv-ingest/blob/main/client/client_examples/examples/python_client_usage.ipynb). + For more Python examples, refer to [Python Quick Start Guide](https://github.com/NVIDIA/NeMo-Retriever/blob/main/client/client_examples/examples/python_client_usage.ipynb). diff --git a/docs/docs/extraction/ngc-api-key.md b/docs/docs/extraction/ngc-api-key.md index 8e205aca7..2c2061b7b 100644 --- a/docs/docs/extraction/ngc-api-key.md +++ b/docs/docs/extraction/ngc-api-key.md @@ -1,5 +1,10 @@ # Generate Your NGC Keys +!!! note + + NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. + + NGC contains many public images, models, and datasets that can be pulled immediately without authentication. To push and pull custom images, you must generate a key and authenticate with NGC. diff --git a/docs/docs/extraction/notebooks.md b/docs/docs/extraction/notebooks.md index b7748a01a..842a2e341 100644 --- a/docs/docs/extraction/notebooks.md +++ b/docs/docs/extraction/notebooks.md @@ -1,33 +1,33 @@ # Notebooks for NeMo Retriever Library -To get started using [NeMo Retriever Library](overview.md), you can try one of the ready-made notebooks that are available. - !!! note NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. +To get started using [NeMo Retriever Library](overview.md), you can try one of the ready-made notebooks that are available. + ## Dataset Downloads for Benchmarking -If you plan to run benchmarking or evaluation tests, you must download the [Benchmark Datasets (Bo20, Bo767, Bo10k)](https://github.com/NVIDIA/nv-ingest/blob/main/evaluation/digital_corpora_download.ipynb) from Digital Corpora. This is a prerequisite for all benchmarking operations. +If you plan to run benchmarking or evaluation tests, you must download the [Benchmark Datasets (Bo20, Bo767, Bo10k)](https://github.com/NVIDIA/NeMo-Retriever/blob/main/evaluation/digital_corpora_download.ipynb) from Digital Corpora. This is a prerequisite for all benchmarking operations. ## Getting Started To get started with the basics, try one of the following notebooks: -- [NV-Ingest: CLI Client Quick Start Guide](https://github.com/NVIDIA/nv-ingest/blob/main/client/client_examples/examples/cli_client_usage.ipynb) -- [NV-Ingest: Python Client Quick Start Guide](https://github.com/NVIDIA/nv-ingest/blob/main/client/client_examples/examples/python_client_usage.ipynb) -- [How to add metadata to your documents and filter searches](https://github.com/NVIDIA/nv-ingest/blob/main/examples/metadata_and_filtered_search.ipynb) -- [How to reindex a collection](https://github.com/NVIDIA/nv-ingest/blob/main/examples/reindex_example.ipynb) +- [CLI Quick Start Guide](https://github.com/NVIDIA/NeMo-Retriever/blob/main/client/client_examples/examples/cli_client_usage.ipynb) +- [Python Quick Start Guide](https://github.com/NVIDIA/NeMo-Retriever/blob/main/client/client_examples/examples/python_client_usage.ipynb) +- [How to add metadata to your documents and filter searches](https://github.com/NVIDIA/NeMo-Retriever/blob/main/examples/metadata_and_filtered_search.ipynb) +- [How to reindex a collection](https://github.com/NVIDIA/NeMo-Retriever/blob/main/examples/reindex_example.ipynb) For more advanced scenarios, try one of the following notebooks: -- [Build a Custom Vector Database Operator](https://github.com/NVIDIA/nv-ingest/blob/main/examples/building_vdb_operator.ipynb) -- [Try Enterprise RAG Blueprint](https://github.com/NVIDIA/nv-ingest/blob/main/deploy/pdf-blueprint.ipynb) -- [Evaluate bo767 retrieval recall accuracy with NV-Ingest and Milvus](https://github.com/NVIDIA/nv-ingest/blob/main/evaluation/bo767_recall.ipynb) -- [Multimodal RAG with LangChain](https://github.com/NVIDIA/nv-ingest/blob/main/examples/langchain_multimodal_rag.ipynb) -- [Multimodal RAG with LlamaIndex](https://github.com/NVIDIA/nv-ingest/blob/main/examples/llama_index_multimodal_rag.ipynb) +- [Build a Custom Vector Database Operator](https://github.com/NVIDIA/NeMo-Retriever/blob/main/examples/building_vdb_operator.ipynb) +- [Try Enterprise RAG Blueprint](https://github.com/NVIDIA/NeMo-Retriever/blob/main/deploy/pdf-blueprint.ipynb) +- [Evaluate bo767 retrieval recall accuracy with NeMo Retriever Library and Milvus](https://github.com/NVIDIA/NeMo-Retriever/blob/main/evaluation/bo767_recall.ipynb) +- [Multimodal RAG with LangChain](https://github.com/NVIDIA/NeMo-Retriever/blob/main/examples/langchain_multimodal_rag.ipynb) +- [Multimodal RAG with LlamaIndex](https://github.com/NVIDIA/NeMo-Retriever/blob/main/examples/llama_index_multimodal_rag.ipynb) diff --git a/docs/docs/extraction/nv-ingest_cli.md b/docs/docs/extraction/nv-ingest_cli.md index 21072f502..2b4313a77 100644 --- a/docs/docs/extraction/nv-ingest_cli.md +++ b/docs/docs/extraction/nv-ingest_cli.md @@ -1,5 +1,10 @@ # Use the NV-Ingest Command Line Interface +!!! note + + NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. + + After you install the Python dependencies, you can use the [NV-Ingest](overview.md) command line interface (CLI). To use the CLI, use the `nv-ingest-cli` command. diff --git a/docs/docs/extraction/overview.md b/docs/docs/extraction/overview.md index ed1c7b206..bc2ca6174 100644 --- a/docs/docs/extraction/overview.md +++ b/docs/docs/extraction/overview.md @@ -1,8 +1,6 @@ # What is NeMo Retriever Library? -NeMo Retriever Library is a scalable, performance-oriented document content and metadata extraction microservice. -NeMo Retriever Library uses specialized NVIDIA NIM microservices -to find, contextualize, and extract text, tables, charts and infographics that you can use in downstream generative applications. +NIVIDIA NeMo Retriever Library (NRL) is a scalable, performance-oriented framework for document content and metadata extraction. It supports both NVIDIA NIM microservices and a wide range of models to find, contextualize, and extract text, tables, charts, and infographics for use in downstream generative and retrieval-augmented applications. !!! note diff --git a/docs/docs/extraction/production-checklist.md b/docs/docs/extraction/production-checklist.md index 7e89500bb..191d2baf6 100644 --- a/docs/docs/extraction/production-checklist.md +++ b/docs/docs/extraction/production-checklist.md @@ -1,5 +1,10 @@ # Production checklist +!!! note + + NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. + + Use this checklist before you run NeMo Retriever Library in production. Pair it with [Troubleshoot](troubleshoot.md) and your internal security review. **Security and access** diff --git a/docs/docs/extraction/published-metrics-comparisons.md b/docs/docs/extraction/published-metrics-comparisons.md index ff85a0548..0bd170e38 100644 --- a/docs/docs/extraction/published-metrics-comparisons.md +++ b/docs/docs/extraction/published-metrics-comparisons.md @@ -1,5 +1,10 @@ # Published metrics and comparisons +!!! note + + NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. + + Published scores for parsing and retrieval components (including table-structure metrics such as TEDS where they apply) appear in NVIDIA papers, model cards, and product announcements. Treat published benchmarks as reference points, not guarantees on your own documents. Always [evaluate on your data](evaluate-on-your-data.md). **Starting points** diff --git a/docs/docs/extraction/quickstart-guide.md b/docs/docs/extraction/quickstart-guide.md index 9784b1f39..88461b77d 100644 --- a/docs/docs/extraction/quickstart-guide.md +++ b/docs/docs/extraction/quickstart-guide.md @@ -1,26 +1,31 @@ # Deploy With Docker Compose (Self-Hosted) for NeMo Retriever Library +!!! note + + NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. + + This guide helps you get started using [NeMo Retriever Library](overview.md) in self-hosted mode. ## Step 1: Start Containers -Use the provided [docker-compose.yaml](https://github.com/NVIDIA/nv-ingest/blob/main/docker-compose.yaml) to start all needed services with a few commands. +Use the provided [docker-compose.yaml](https://github.com/NVIDIA/NeMo-Retriever/blob/main/docker-compose.yaml) to start all needed services with a few commands. !!! warning NIM containers on their first startup can take 10-15 minutes to pull and fully load models. -If you prefer, you can run on Kubernetes by using [our Helm chart](https://github.com/NVIDIA/nv-ingest/blob/main/helm/README.md). Also, there are [additional environment variables](environment-config.md) you can configure. +If you prefer, you can run on Kubernetes by using [our Helm chart](https://github.com/NVIDIA/NeMo-Retriever/blob/main/helm/README.md). Also, there are [additional environment variables](environment-config.md) you can configure. a. Git clone the repo: - `git clone https://github.com/nvidia/nv-ingest` + `git clone https://github.com/NVIDIA/NeMo-Retriever` b. Change the directory to the cloned repo by running the following code. - `cd nv-ingest`. + `cd NeMo-Retriever`. c. [Generate API keys](ngc-api-key.md) and authenticate with NGC with the `docker login` command. @@ -58,7 +63,7 @@ f. Start core services. By default, the pipeline uses **LanceDB** as the vector !!! tip - By default, we have [configured log levels to be verbose](https://github.com/NVIDIA/nv-ingest/blob/main/docker-compose.yaml). It's possible to observe service startup proceeding. You will notice a lot of log messages. Disable verbose logging by configuring `NIM_TRITON_LOG_VERBOSE=0` for each NIM in [docker-compose.yaml](https://github.com/NVIDIA/nv-ingest/blob/main/docker-compose.yaml). + By default, we have [configured log levels to be verbose](https://github.com/NVIDIA/NeMo-Retriever/blob/main/docker-compose.yaml). It's possible to observe service startup proceeding. You will notice a lot of log messages. Disable verbose logging by configuring `NIM_TRITON_LOG_VERBOSE=0` for each NIM in [docker-compose.yaml](https://github.com/NVIDIA/NeMo-Retriever/blob/main/docker-compose.yaml). !!! tip @@ -86,19 +91,19 @@ h. Run the command `docker ps`. You should see output similar to the following. ``` CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES - 1b885f37c991 nvcr.io/nvidia/nemo-microservices/nv-ingest:... "/usr/bin/tini -- /w…" 7 minutes ago Up 7 minutes (healthy) 0.0.0.0:7670... nv-ingest-nv-ingest-ms-runtime-1 + 1b885f37c991 nvcr.io/nvidia/nemo-microservices/... "/usr/bin/tini -- /w…" 7 minutes ago Up 7 minutes (healthy) 0.0.0.0:7670... nemo-retriever-ms-runtime-1 14ef31ed7f49 milvusdb/milvus:v2.5.3-gpu "/tini -- bash -c 's…" 7 minutes ago Up 7 minutes (healthy) 0.0.0.0:9091... milvus-standalone - dceaf36cc5df otel/opentelemetry-collector-contrib:... "/otelcol-contrib --…" 7 minutes ago Up 7 minutes 0.0.0.0:4317... nv-ingest-otel-collector-1 - 5bd0b48eb71b nvcr.io/nim/nvidia/nemoretriever-graphic-ele... "/opt/nvidia/nvidia_…" 7 minutes ago Up 7 minutes 0.0.0.0:8003... nv-ingest-graphic-elements-1 - daf878669036 nvcr.io/nim/nvidia/nemoretriever-ocr-v1:1.2.1 "/opt/nvidia/nvidia_…" 7 minutes ago Up 7 minutes 0.0.0.0:8009... nv-ingest-ocr-1 - 216bdf11c566 nvcr.io/nim/nvidia/nemoretriever-page-elements-v3:1.7.0 "/opt/nvidia/nvidia_…" 7 minutes ago Up 7 minutes 0.0.0.0:8000... nv-ingest-page-elements-1 - aee9580b0b9a nvcr.io/nim/nvidia/llama-3.2-nv-embedqa-1b-v2:1.10.0 "/opt/nvidia/nvidia_…" 7 minutes ago Up 7 minutes 0.0.0.0:8012... nv-ingest-embedding-1 - 178a92bf6f7f nvcr.io/nim/nvidia/nemoretriever-table-struc... "/opt/nvidia/nvidia_…" 7 minutes ago Up 7 minutes 0.0.0.0:8006... nv-ingest-table-structure-1 - 7ddbf7690036 openzipkin/zipkin "start-zipkin" 7 minutes ago Up 7 minutes (healthy) 9410/tcp... nv-ingest-zipkin-1 + dceaf36cc5df otel/opentelemetry-collector-contrib:... "/otelcol-contrib --…" 7 minutes ago Up 7 minutes 0.0.0.0:4317... nemo-retriever-otel-collector-1 + 5bd0b48eb71b nvcr.io/nim/nvidia/nemoretriever-graphic-ele... "/opt/nvidia/nvidia_…" 7 minutes ago Up 7 minutes 0.0.0.0:8003... nemo-retriever-graphic-elements-1 + daf878669036 nvcr.io/nim/nvidia/nemoretriever-ocr-v1:1.2.1 "/opt/nvidia/nvidia_…" 7 minutes ago Up 7 minutes 0.0.0.0:8009... nemo-retriever-ocr-1 + 216bdf11c566 nvcr.io/nim/nvidia/nemoretriever-page-elements-v3:1.7.0 "/opt/nvidia/nvidia_…" 7 minutes ago Up 7 minutes 0.0.0.0:8000... nemo-retriever-page-elements-1 + aee9580b0b9a nvcr.io/nim/nvidia/llama-3.2-nv-embedqa-1b-v2:1.10.0 "/opt/nvidia/nvidia_…" 7 minutes ago Up 7 minutes 0.0.0.0:8012... nemo-retriever-embedding-1 + 178a92bf6f7f nvcr.io/nim/nvidia/nemoretriever-table-struc... "/opt/nvidia/nvidia_…" 7 minutes ago Up 7 minutes 0.0.0.0:8006... nemo-retriever-table-structure-1 + 7ddbf7690036 openzipkin/zipkin "start-zipkin" 7 minutes ago Up 7 minutes (healthy) 9410/tcp... nemo-retriever-zipkin-1 b73bbe0c202d minio/minio:RELEASE.2023-03-20T20-16-18Z "/usr/bin/docker-ent…" 7 minutes ago Up 7 minutes (healthy) 0.0.0.0:9000... minio - 97fa798dbe4f prom/prometheus:latest "/bin/prometheus --w…" 7 minutes ago Up 7 minutes 0.0.0.0:9090... nv-ingest-prometheus-1 + 97fa798dbe4f prom/prometheus:latest "/bin/prometheus --w…" 7 minutes ago Up 7 minutes 0.0.0.0:9090... nemo-retriever-prometheus-1 f17cb556b086 grafana/grafana "/run.sh" 7 minutes ago Up 7 minutes 0.0.0.0:3000... grafana-service - 3403c5a0e7be redis/redis-stack "/entrypoint.sh" 7 minutes ago Up 7 minutes 0.0.0.0:6379... nv-ingest-redis-1 + 3403c5a0e7be redis/redis-stack "/entrypoint.sh" 7 minutes ago Up 7 minutes 0.0.0.0:6379... nemo-retriever-redis-1 ``` ## Step 2: Ingest Documents @@ -121,7 +126,7 @@ The following examples demonstrate how to extract text, charts, tables, and imag !!! tip - For more Python examples, refer to [NV-Ingest: Python Client Quick Start Guide](https://github.com/NVIDIA/nv-ingest/blob/main/client/client_examples/examples/python_client_usage.ipynb). + For more Python examples, refer to the [Python Quick Start Guide](https://github.com/NVIDIA/NeMo-Retriever/blob/main/client/client_examples/examples/python_client_usage.ipynb). ```python @@ -258,15 +263,15 @@ image_caption:[] ``` -### Using the `nv-ingest-cli` +### Using the CLI !!! tip - There is a Jupyter notebook available to help you get started with the CLI. For more information, refer to [CLI Client Quick Start Guide](https://github.com/NVIDIA/nv-ingest/blob/main/client/client_examples/examples/cli_client_usage.ipynb). + There is a Jupyter notebook available to help you get started with the CLI. For more information, refer to the [CLI Quick Start Guide](https://github.com/NVIDIA/NeMo-Retriever/blob/main/client/client_examples/examples/cli_client_usage.ipynb). ```shell -nv-ingest-cli \ +nemo-retriever \ --doc ./data/multimodal_test.pdf \ --output_directory ./processed_docs \ --task='extract:{"document_type": "pdf", "extract_method": "pdfium", "extract_tables": "true", "extract_images": "true", "extract_charts": "true"}' \ @@ -282,47 +287,47 @@ None of PyTorch, TensorFlow >= 2.0, or Flax have been found. Models won't be ava [nltk_data] /path/to/your/venv/lib/python3.12/site- [nltk_data] packages/llama_index/core/_static/nltk_cache... [nltk_data] Package punkt_tab is already up-to-date! -INFO:nv_ingest_client.nv_ingest_cli:Processing 1 documents. -INFO:nv_ingest_client.nv_ingest_cli:Output will be written to: ./processed_docs +INFO:retriever_client.cli:Processing 1 documents. +INFO:retriever_client.cli:Output will be written to: ./processed_docs Processing files: 100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████| 1/1 [00:02<00:00, 2.34s/file, pages_per_sec=1.28] -INFO:nv_ingest_client.cli.util.processing:message_broker_task_source: Avg: 2.39 ms, Median: 2.39 ms, Total Time: 2.39 ms, Total % of Trace Computation: 0.06% -INFO:nv_ingest_client.cli.util.processing:broker_source_network_in: Avg: 9.51 ms, Median: 9.51 ms, Total Time: 9.51 ms, Total % of Trace Computation: 0.25% -INFO:nv_ingest_client.cli.util.processing:job_counter: Avg: 1.47 ms, Median: 1.47 ms, Total Time: 1.47 ms, Total % of Trace Computation: 0.04% -INFO:nv_ingest_client.cli.util.processing:job_counter_channel_in: Avg: 0.46 ms, Median: 0.46 ms, Total Time: 0.46 ms, Total % of Trace Computation: 0.01% -INFO:nv_ingest_client.cli.util.processing:metadata_injection: Avg: 3.52 ms, Median: 3.52 ms, Total Time: 3.52 ms, Total % of Trace Computation: 0.09% -INFO:nv_ingest_client.cli.util.processing:metadata_injection_channel_in: Avg: 0.16 ms, Median: 0.16 ms, Total Time: 0.16 ms, Total % of Trace Computation: 0.00% -INFO:nv_ingest_client.cli.util.processing:pdf_content_extractor: Avg: 475.64 ms, Median: 163.77 ms, Total Time: 2378.21 ms, Total % of Trace Computation: 62.73% -INFO:nv_ingest_client.cli.util.processing:pdf_content_extractor_channel_in: Avg: 0.31 ms, Median: 0.31 ms, Total Time: 0.31 ms, Total % of Trace Computation: 0.01% -INFO:nv_ingest_client.cli.util.processing:image_content_extractor: Avg: 0.67 ms, Median: 0.67 ms, Total Time: 0.67 ms, Total % of Trace Computation: 0.02% -INFO:nv_ingest_client.cli.util.processing:image_content_extractor_channel_in: Avg: 0.21 ms, Median: 0.21 ms, Total Time: 0.21 ms, Total % of Trace Computation: 0.01% -INFO:nv_ingest_client.cli.util.processing:docx_content_extractor: Avg: 0.46 ms, Median: 0.46 ms, Total Time: 0.46 ms, Total % of Trace Computation: 0.01% -INFO:nv_ingest_client.cli.util.processing:docx_content_extractor_channel_in: Avg: 0.20 ms, Median: 0.20 ms, Total Time: 0.20 ms, Total % of Trace Computation: 0.01% -INFO:nv_ingest_client.cli.util.processing:pptx_content_extractor: Avg: 0.68 ms, Median: 0.68 ms, Total Time: 0.68 ms, Total % of Trace Computation: 0.02% -INFO:nv_ingest_client.cli.util.processing:pptx_content_extractor_channel_in: Avg: 0.46 ms, Median: 0.46 ms, Total Time: 0.46 ms, Total % of Trace Computation: 0.01% -INFO:nv_ingest_client.cli.util.processing:audio_data_extraction: Avg: 1.08 ms, Median: 1.08 ms, Total Time: 1.08 ms, Total % of Trace Computation: 0.03% -INFO:nv_ingest_client.cli.util.processing:audio_data_extraction_channel_in: Avg: 0.20 ms, Median: 0.20 ms, Total Time: 0.20 ms, Total % of Trace Computation: 0.01% -INFO:nv_ingest_client.cli.util.processing:dedup_images: Avg: 0.42 ms, Median: 0.42 ms, Total Time: 0.42 ms, Total % of Trace Computation: 0.01% -INFO:nv_ingest_client.cli.util.processing:dedup_images_channel_in: Avg: 0.42 ms, Median: 0.42 ms, Total Time: 0.42 ms, Total % of Trace Computation: 0.01% -INFO:nv_ingest_client.cli.util.processing:filter_images: Avg: 0.59 ms, Median: 0.59 ms, Total Time: 0.59 ms, Total % of Trace Computation: 0.02% -INFO:nv_ingest_client.cli.util.processing:filter_images_channel_in: Avg: 0.57 ms, Median: 0.57 ms, Total Time: 0.57 ms, Total % of Trace Computation: 0.02% -INFO:nv_ingest_client.cli.util.processing:table_data_extraction: Avg: 240.75 ms, Median: 240.75 ms, Total Time: 481.49 ms, Total % of Trace Computation: 12.70% -INFO:nv_ingest_client.cli.util.processing:table_data_extraction_channel_in: Avg: 0.38 ms, Median: 0.38 ms, Total Time: 0.38 ms, Total % of Trace Computation: 0.01% -INFO:nv_ingest_client.cli.util.processing:chart_data_extraction: Avg: 300.54 ms, Median: 299.94 ms, Total Time: 901.62 ms, Total % of Trace Computation: 23.78% -INFO:nv_ingest_client.cli.util.processing:chart_data_extraction_channel_in: Avg: 0.23 ms, Median: 0.23 ms, Total Time: 0.23 ms, Total % of Trace Computation: 0.01% -INFO:nv_ingest_client.cli.util.processing:infographic_data_extraction: Avg: 0.77 ms, Median: 0.77 ms, Total Time: 0.77 ms, Total % of Trace Computation: 0.02% -INFO:nv_ingest_client.cli.util.processing:infographic_data_extraction_channel_in: Avg: 0.25 ms, Median: 0.25 ms, Total Time: 0.25 ms, Total % of Trace Computation: 0.01% -INFO:nv_ingest_client.cli.util.processing:caption_ext: Avg: 0.55 ms, Median: 0.55 ms, Total Time: 0.55 ms, Total % of Trace Computation: 0.01% -INFO:nv_ingest_client.cli.util.processing:caption_ext_channel_in: Avg: 0.51 ms, Median: 0.51 ms, Total Time: 0.51 ms, Total % of Trace Computation: 0.01% -INFO:nv_ingest_client.cli.util.processing:embed_text: Avg: 1.21 ms, Median: 1.21 ms, Total Time: 1.21 ms, Total % of Trace Computation: 0.03% -INFO:nv_ingest_client.cli.util.processing:embed_text_channel_in: Avg: 0.21 ms, Median: 0.21 ms, Total Time: 0.21 ms, Total % of Trace Computation: 0.01% -INFO:nv_ingest_client.cli.util.processing:store_embedding_minio: Avg: 0.32 ms, Median: 0.32 ms, Total Time: 0.32 ms, Total % of Trace Computation: 0.01% -INFO:nv_ingest_client.cli.util.processing:store_embedding_minio_channel_in: Avg: 1.18 ms, Median: 1.18 ms, Total Time: 1.18 ms, Total % of Trace Computation: 0.03% -INFO:nv_ingest_client.cli.util.processing:message_broker_task_sink_channel_in: Avg: 0.42 ms, Median: 0.42 ms, Total Time: 0.42 ms, Total % of Trace Computation: 0.01% -INFO:nv_ingest_client.cli.util.processing:No unresolved time detected. Trace times account for the entire elapsed duration. -INFO:nv_ingest_client.cli.util.processing:Processed 1 files in 2.34 seconds. -INFO:nv_ingest_client.cli.util.processing:Total pages processed: 3 -INFO:nv_ingest_client.cli.util.processing:Throughput (Pages/sec): 1.28 -INFO:nv_ingest_client.cli.util.processing:Throughput (Files/sec): 0.43 +INFO:retriever_client.processing:message_broker_task_source: Avg: 2.39 ms, Median: 2.39 ms, Total Time: 2.39 ms, Total % of Trace Computation: 0.06% +INFO:retriever_client.processing:broker_source_network_in: Avg: 9.51 ms, Median: 9.51 ms, Total Time: 9.51 ms, Total % of Trace Computation: 0.25% +INFO:retriever_client.processing:job_counter: Avg: 1.47 ms, Median: 1.47 ms, Total Time: 1.47 ms, Total % of Trace Computation: 0.04% +INFO:retriever_client.processing:job_counter_channel_in: Avg: 0.46 ms, Median: 0.46 ms, Total Time: 0.46 ms, Total % of Trace Computation: 0.01% +INFO:retriever_client.processing:metadata_injection: Avg: 3.52 ms, Median: 3.52 ms, Total Time: 3.52 ms, Total % of Trace Computation: 0.09% +INFO:retriever_client.processing:metadata_injection_channel_in: Avg: 0.16 ms, Median: 0.16 ms, Total Time: 0.16 ms, Total % of Trace Computation: 0.00% +INFO:retriever_client.processing:pdf_content_extractor: Avg: 475.64 ms, Median: 163.77 ms, Total Time: 2378.21 ms, Total % of Trace Computation: 62.73% +INFO:retriever_client.processing:pdf_content_extractor_channel_in: Avg: 0.31 ms, Median: 0.31 ms, Total Time: 0.31 ms, Total % of Trace Computation: 0.01% +INFO:retriever_client.processing:image_content_extractor: Avg: 0.67 ms, Median: 0.67 ms, Total Time: 0.67 ms, Total % of Trace Computation: 0.02% +INFO:retriever_client.processing:image_content_extractor_channel_in: Avg: 0.21 ms, Median: 0.21 ms, Total Time: 0.21 ms, Total % of Trace Computation: 0.01% +INFO:retriever_client.processing:docx_content_extractor: Avg: 0.46 ms, Median: 0.46 ms, Total Time: 0.46 ms, Total % of Trace Computation: 0.01% +INFO:retriever_client.processing:docx_content_extractor_channel_in: Avg: 0.20 ms, Median: 0.20 ms, Total Time: 0.20 ms, Total % of Trace Computation: 0.01% +INFO:retriever_client.processing:pptx_content_extractor: Avg: 0.68 ms, Median: 0.68 ms, Total Time: 0.68 ms, Total % of Trace Computation: 0.02% +INFO:retriever_client.processing:pptx_content_extractor_channel_in: Avg: 0.46 ms, Median: 0.46 ms, Total Time: 0.46 ms, Total % of Trace Computation: 0.01% +INFO:retriever_client.processing:audio_data_extraction: Avg: 1.08 ms, Median: 1.08 ms, Total Time: 1.08 ms, Total % of Trace Computation: 0.03% +INFO:retriever_client.processing:audio_data_extraction_channel_in: Avg: 0.20 ms, Median: 0.20 ms, Total Time: 0.20 ms, Total % of Trace Computation: 0.01% +INFO:retriever_client.processing:dedup_images: Avg: 0.42 ms, Median: 0.42 ms, Total Time: 0.42 ms, Total % of Trace Computation: 0.01% +INFO:retriever_client.processing:dedup_images_channel_in: Avg: 0.42 ms, Median: 0.42 ms, Total Time: 0.42 ms, Total % of Trace Computation: 0.01% +INFO:retriever_client.processing:filter_images: Avg: 0.59 ms, Median: 0.59 ms, Total Time: 0.59 ms, Total % of Trace Computation: 0.02% +INFO:retriever_client.processing:filter_images_channel_in: Avg: 0.57 ms, Median: 0.57 ms, Total Time: 0.57 ms, Total % of Trace Computation: 0.02% +INFO:retriever_client.processing:table_data_extraction: Avg: 240.75 ms, Median: 240.75 ms, Total Time: 481.49 ms, Total % of Trace Computation: 12.70% +INFO:retriever_client.processing:table_data_extraction_channel_in: Avg: 0.38 ms, Median: 0.38 ms, Total Time: 0.38 ms, Total % of Trace Computation: 0.01% +INFO:retriever_client.processing:chart_data_extraction: Avg: 300.54 ms, Median: 299.94 ms, Total Time: 901.62 ms, Total % of Trace Computation: 23.78% +INFO:retriever_client.processing:chart_data_extraction_channel_in: Avg: 0.23 ms, Median: 0.23 ms, Total Time: 0.23 ms, Total % of Trace Computation: 0.01% +INFO:retriever_client.processing:infographic_data_extraction: Avg: 0.77 ms, Median: 0.77 ms, Total Time: 0.77 ms, Total % of Trace Computation: 0.02% +INFO:retriever_client.processing:infographic_data_extraction_channel_in: Avg: 0.25 ms, Median: 0.25 ms, Total Time: 0.25 ms, Total % of Trace Computation: 0.01% +INFO:retriever_client.processing:caption_ext: Avg: 0.55 ms, Median: 0.55 ms, Total Time: 0.55 ms, Total % of Trace Computation: 0.01% +INFO:retriever_client.processing:caption_ext_channel_in: Avg: 0.51 ms, Median: 0.51 ms, Total Time: 0.51 ms, Total % of Trace Computation: 0.01% +INFO:retriever_client.processing:embed_text: Avg: 1.21 ms, Median: 1.21 ms, Total Time: 1.21 ms, Total % of Trace Computation: 0.03% +INFO:retriever_client.processing:embed_text_channel_in: Avg: 0.21 ms, Median: 0.21 ms, Total Time: 0.21 ms, Total % of Trace Computation: 0.01% +INFO:retriever_client.processing:store_embedding_minio: Avg: 0.32 ms, Median: 0.32 ms, Total Time: 0.32 ms, Total % of Trace Computation: 0.01% +INFO:retriever_client.processing:store_embedding_minio_channel_in: Avg: 1.18 ms, Median: 1.18 ms, Total Time: 1.18 ms, Total % of Trace Computation: 0.03% +INFO:retriever_client.processing:message_broker_task_sink_channel_in: Avg: 0.42 ms, Median: 0.42 ms, Total Time: 0.42 ms, Total % of Trace Computation: 0.01% +INFO:retriever_client.processing:No unresolved time detected. Trace times account for the entire elapsed duration. +INFO:retriever_client.processing:Processed 1 files in 2.34 seconds. +INFO:retriever_client.processing:Total pages processed: 3 +INFO:retriever_client.processing:Throughput (Pages/sec): 1.28 +INFO:retriever_client.processing:Throughput (Files/sec): 0.43 ``` ## Step 3: Inspecting and Consuming Results @@ -349,7 +354,7 @@ multimodal_test.pdf.metadata.json For the full metadata definitions, refer to [Content Metadata](content-metadata.md). -We also provide a script for inspecting [extracted images](https://github.com/NVIDIA/nv-ingest/blob/main/src/util/image_viewer.py). +We also provide a script for inspecting [extracted images](https://github.com/NVIDIA/NeMo-Retriever/blob/main/src/util/image_viewer.py). First, install `tkinter` by running the following code. Choose the code for your OS. @@ -380,7 +385,7 @@ python src/util/image_viewer.py --file_path ./processed_docs/image/multimodal_te !!! tip - Beyond inspecting the results, you can read them into things like [llama-index](https://github.com/NVIDIA/nv-ingest/blob/main/examples/llama_index_multimodal_rag.ipynb) or [langchain](https://github.com/NVIDIA/nv-ingest/blob/main/examples/langchain_multimodal_rag.ipynb) retrieval pipelines. Also, checkout our [Enterprise RAG Blueprint on build.nvidia.com](https://build.nvidia.com/nvidia/multimodal-pdf-data-extraction-for-enterprise-rag) to query over document content pre-extracted with the retriever pipeline. + Beyond inspecting the results, you can read them into things like [llama-index](https://github.com/NVIDIA/NeMo-Retriever/blob/main/examples/llama_index_multimodal_rag.ipynb) or [langchain](https://github.com/NVIDIA/NeMo-Retriever/blob/main/examples/langchain_multimodal_rag.ipynb) retrieval pipelines. Also, checkout our [Enterprise RAG Blueprint on build.nvidia.com](https://build.nvidia.com/nvidia/multimodal-pdf-data-extraction-for-enterprise-rag) to query over document content pre-extracted with the retriever pipeline. @@ -421,7 +426,7 @@ Ensure the same image tags and `docker-compose.yaml` version are used in both en ## Docker Compose override files -The default [docker-compose.yaml](https://github.com/NVIDIA/nv-ingest/blob/main/docker-compose.yaml) might exceed VRAM on a single GPU for some hardware. Override files reduce per-service memory, batch sizes, or concurrency so the full pipeline can run on the available GPU. To use an override, pass a second `-f` file after the base compose file; Docker Compose merges them and the override takes precedence. +The default [docker-compose.yaml](https://github.com/NVIDIA/NeMo-Retriever/blob/main/docker-compose.yaml) might exceed VRAM on a single GPU for some hardware. Override files reduce per-service memory, batch sizes, or concurrency so the full pipeline can run on the available GPU. To use an override, pass a second `-f` file after the base compose file; Docker Compose merges them and the override takes precedence. | Override file | GPU target | |---------------|------------| @@ -475,11 +480,11 @@ docker compose \ ## Specify MIG slices for NIM models -When you deploy the pipeline with NIM models on MIG‑enabled GPUs, MIG device slices are requested and scheduled through the `values.yaml` file for the corresponding NIM microservice. For IBM Content-Aware Storage (CAS) deployments, this allows NIM pods to land only on nodes that expose the desired MIG profiles [raw.githubusercontent](https://raw.githubusercontent.com/NVIDIA/nv-ingest/main/helm/README.md). +When you deploy the pipeline with NIM models on MIG‑enabled GPUs, MIG device slices are requested and scheduled through the `values.yaml` file for the corresponding NIM microservice. For IBM Content-Aware Storage (CAS) deployments, this allows NIM pods to land only on nodes that expose the desired MIG profiles [raw.githubusercontent](https://raw.githubusercontent.com/NVIDIA/NeMo-Retriever/main/helm/README.md). To target a specific MIG profile—for example, a 3g.20gb slice on an A100, which is a hardware-partitioned virtual GPU instance that gives your workload a fixed mid-sized share of the A100’s compute plus 20 GB of dedicated GPU memory and behaves like a smaller independent GPU—for a given NIM, configure the `resources` and `nodeSelector` under that NIM’s values path in `values.yaml`. -The following example shows the pattern. Paths vary by NIM, such as `nvingest.nvidiaNim.nemoretrieverPageElements` instead of the generic `nvingest.nim` placeholder. For details refer to [catalog.ngc.nvidia](https://catalog.ngc.nvidia.com/orgs/nvidia/teams/nemo-microservices/helm-charts/nv-ingest). +The following example shows the pattern. Paths vary by NIM, such as `nvingest.nvidiaNim.nemoretrieverPageElements` instead of the generic `nvingest.nim` placeholder. For details refer to the [Helm chart README](https://github.com/NVIDIA/NeMo-Retriever/blob/main/helm/README.md) and the chart listing on [NGC](https://catalog.ngc.nvidia.com/orgs/nvidia/teams/nemo-microservices/containers). Set `resources.requests` and `resources.limits` to the name of the MIG resource that you want (for example, `nvidia.com/mig-3g.20gb`). ```shell nvingest: @@ -495,10 +500,11 @@ nvingest: nvidia.com/gpu.product: A100-SXM4-40GB-MIG-3g.20gb ``` Key points: -* Use the appropriate NIM‑specific values path (for example, `nvingest.nvidiaNim.nemoretrieverPageElements.resources`) rather than the generic `nvingest.nim` placeholder. -* Set `resources.requests` and `resources.limits` to the desired MIG resource name (for example, `nvidia.com/mig-3g.20gb`). -* Use `nodeSelector` (or tolerations/affinity, if you prefer) to target nodes labeled with the corresponding MIG‑enabled GPU product (for example, `nvidia.com/gpu.product: A100-SXM4-40GB-MIG-3g.20gb`). -This syntax and structure can be repeated for each NIM model used by CAS, ensuring that each NV-Ingest NIM pod is mapped to the correct MIG slice type and scheduled onto compatible nodes. + + * Use the appropriate NIM‑specific values path (for example, `nvingest.nvidiaNim.nemoretrieverPageElements.resources`) rather than the generic `nvingest.nim` placeholder. + * Set `resources.requests` and `resources.limits` to the desired MIG resource name (for example, `nvidia.com/mig-3g.20gb`). + * Use `nodeSelector` (or tolerations/affinity, if you prefer) to target nodes labeled with the corresponding MIG‑enabled GPU product (for example, `nvidia.com/gpu.product: A100-SXM4-40GB-MIG-3g.20gb`). +This syntax and structure can be repeated for each NIM model used by CAS, ensuring that each NeMo Retriever Library NIM pod is mapped to the correct MIG slice type and scheduled onto compatible nodes. !!! important diff --git a/docs/docs/extraction/ray-logging.md b/docs/docs/extraction/ray-logging.md index 524674bae..5a431a607 100644 --- a/docs/docs/extraction/ray-logging.md +++ b/docs/docs/extraction/ray-logging.md @@ -1,5 +1,10 @@ # Configure Ray Logging +!!! note + + NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. + + [NeMo Retriever Library](overview.md) uses [Ray](https://docs.ray.io/en/latest/index.html) for logging. You can use environment variables for fine-grained control over [Ray's logging behavior](https://docs.ray.io/en/latest/ray-observability/user-guides/configure-logging.html). In addition, NeMo Retriever Library provides preset configurations that you can use to quickly update Ray logging behavior. diff --git a/docs/docs/extraction/reranking.md b/docs/docs/extraction/reranking.md index d594ff23c..5c7c4875d 100644 --- a/docs/docs/extraction/reranking.md +++ b/docs/docs/extraction/reranking.md @@ -1,5 +1,10 @@ # Reranking +!!! note + + NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. + + A **reranker** model re-scores the top candidates from initial retrieval so the final top-K better matches the query. NeMo Retriever Library evaluation and deployments can integrate reranker NIMs (see the [Support matrix](support-matrix.md) for availability and GPU considerations). **When to enable reranking** diff --git a/docs/docs/extraction/resources-links.md b/docs/docs/extraction/resources-links.md index 17e21372b..d2cfb826a 100644 --- a/docs/docs/extraction/resources-links.md +++ b/docs/docs/extraction/resources-links.md @@ -1,5 +1,10 @@ # Resources +!!! note + + NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. + + External pages for product context, catalogs, and solution blueprints. ## Product and catalog diff --git a/docs/docs/extraction/self-host-nims-when-to-use.md b/docs/docs/extraction/self-host-nims-when-to-use.md index 523ee2edb..e7ab3c000 100644 --- a/docs/docs/extraction/self-host-nims-when-to-use.md +++ b/docs/docs/extraction/self-host-nims-when-to-use.md @@ -1,5 +1,10 @@ # When to self-host NIMs +!!! note + + NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. + + Self-hosted NIMs run on your GPUs or air-gapped hardware, typically with Kubernetes and the [NIM Operator](https://docs.nvidia.com/nim-operator/latest/index.html). Consider self-hosting when: diff --git a/docs/docs/extraction/semantic-hybrid-retrieval.md b/docs/docs/extraction/semantic-hybrid-retrieval.md index 0583fc676..c70dff68c 100644 --- a/docs/docs/extraction/semantic-hybrid-retrieval.md +++ b/docs/docs/extraction/semantic-hybrid-retrieval.md @@ -1,5 +1,10 @@ # Semantic and hybrid retrieval +!!! note + + NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. + + **Semantic retrieval** uses dense embeddings to find content that is similar in meaning to a query. **Hybrid retrieval** combines dense vectors with sparse or lexical signals (for example, BM25-style full-text) and fuses ranked lists for better recall on keyword-heavy queries. In NeMo Retriever Library, use these resources: diff --git a/docs/docs/extraction/supported-file-types.md b/docs/docs/extraction/supported-file-types.md index 8eaf87b9a..729147b7e 100644 --- a/docs/docs/extraction/supported-file-types.md +++ b/docs/docs/extraction/supported-file-types.md @@ -1,5 +1,10 @@ # Supported file types and formats +!!! note + + NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. + + NeMo Retriever Library accepts multiple document and media types. A current list (including PDF, Office formats, HTML, images, audio, and video, some early access) appears in [What is NeMo Retriever Library?](overview.md) under supported file types. **Related** diff --git a/docs/docs/extraction/text-layout-extraction.md b/docs/docs/extraction/text-layout-extraction.md index dba36953b..760b1f78f 100644 --- a/docs/docs/extraction/text-layout-extraction.md +++ b/docs/docs/extraction/text-layout-extraction.md @@ -1,5 +1,10 @@ # Text and layout extraction +!!! note + + NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. + + For PDFs, NeMo Retriever Library typically uses **pdfium**-based extraction with configurable depth and paths. Scanned or mixed pages may use hybrid or OCR-oriented methods. For `extract_method` options such as `pdfium`, `pdfium_hybrid`, and `ocr`, see the [Python API reference](python-api-reference.md). **Related** diff --git a/docs/docs/extraction/throughput-is-dataset-dependent.md b/docs/docs/extraction/throughput-is-dataset-dependent.md index 399d116c8..338c8ce1e 100644 --- a/docs/docs/extraction/throughput-is-dataset-dependent.md +++ b/docs/docs/extraction/throughput-is-dataset-dependent.md @@ -1,5 +1,10 @@ # Why Throughput Is Dataset-Dependent +!!! note + + NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. + + A single headline metric can drastically misrepresent system efficiency. The amount of compute that you need to process a dataset depends far more on its content and how your pipeline operates than on its disk size. This documentation explains why, and offers you better ways to measure and report throughput. diff --git a/docs/docs/extraction/v2-api-guide.md b/docs/docs/extraction/v2-api-guide.md index a51152f41..9ad7a0558 100644 --- a/docs/docs/extraction/v2-api-guide.md +++ b/docs/docs/extraction/v2-api-guide.md @@ -1,5 +1,10 @@ # NeMo Retriever Library V2 API Guide: PDF Pre Splitting +!!! note + + NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. + + > **TL;DR:** V2 API automatically splits large PDFs into chunks for faster parallel processing. > > **Python:** Enable with `message_client_kwargs={"api_version": "v2"}` and configure chunk size with `.pdf_split_config(pages_per_chunk=64)`. diff --git a/docs/docs/extraction/vector-db-partners.md b/docs/docs/extraction/vector-db-partners.md index a0dca2aa8..57aaf112e 100644 --- a/docs/docs/extraction/vector-db-partners.md +++ b/docs/docs/extraction/vector-db-partners.md @@ -1,5 +1,10 @@ # Vector database partners +!!! note + + NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. + + NeMo Retriever Library integrates with vector databases used for RAG collections. Documentation here focuses on stores used in the library and harnesses, such as LanceDB and Milvus, and cuVS where it applies. See [Vector databases](data-store.md) and [Chunking and splitting](chunking.md). **Related** diff --git a/docs/docs/extraction/workflow-agentic-retrieval.md b/docs/docs/extraction/workflow-agentic-retrieval.md index 77e2a6645..2d68b150d 100644 --- a/docs/docs/extraction/workflow-agentic-retrieval.md +++ b/docs/docs/extraction/workflow-agentic-retrieval.md @@ -1,5 +1,10 @@ # Workflow: Agentic retrieval +!!! note + + NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. + + **Agentic retrieval** describes patterns where a planner or tool-using agent queries retrieval systems in a loop (often combining multiple searches, filters, and rerankers) instead of sending a single static query. NeMo Retriever Library provides ingestion, embedding, storage, and retrieval building blocks (jobs, chunking, vector stores, hybrid search, reranking) that you orchestrate in application code or frameworks. diff --git a/docs/docs/extraction/workflow-build-searchable-collection.md b/docs/docs/extraction/workflow-build-searchable-collection.md new file mode 100644 index 000000000..0de5e6263 --- /dev/null +++ b/docs/docs/extraction/workflow-build-searchable-collection.md @@ -0,0 +1,12 @@ +# Workflow: Build a searchable collection + +!!! note + + NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. + + +After [document ingestion](workflow-document-ingestion.md), configure [chunking](chunking.md) and your [vector database](data-store.md) so extracted content is embedded, indexed, and ready for search. + +Technical detail for storage and chunking is in the **Embedding, indexing, and storage** section of the navigation ([Vector databases](data-store.md), [Chunking and splitting](chunking.md)). + +**Next:** [Workflow: Query and rerank](workflow-query-rerank.md). diff --git a/docs/docs/extraction/workflow-document-ingestion.md b/docs/docs/extraction/workflow-document-ingestion.md new file mode 100644 index 000000000..47f19fc3d --- /dev/null +++ b/docs/docs/extraction/workflow-document-ingestion.md @@ -0,0 +1,18 @@ +# Workflow: Document ingestion + +!!! note + + NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. + + +**Document ingestion** is the step where NeMo Retriever Library reads your files (PDFs, Office documents, images, and other [supported formats](supported-file-types.md)), runs extraction and optional enrichment, and returns structured content you can chunk, embed, and index. + +Follow these steps: + +1. **Choose how you call the library.** Use the [Python API](python-api-reference.md) or [CLI](cli-reference.md) from application code, or run a deployment (for example [Quickstart: NeMo Retriever Library (local)](quickstart-library-mode.md), [Deploy (Docker Compose)](quickstart-guide.md), or [Quickstart: Kubernetes (Helm)](helm.md)) and send jobs over the network. +2. **Use the V2 processing pipeline.** Parallel PDF handling and the default ingest path are described in the [HTTP API (V2)](v2-api-guide.md) and [API guide](nemo-retriever-api-reference.md). Set `message_client_kwargs={"api_version": "v2"}` when using the client if you need to be explicit. +3. **Tune extraction for your content.** See [Multimodal extraction](supported-file-types.md) for formats, [Text and layout extraction](text-layout-extraction.md), [Tables](extraction-tables.md), [OCR](extraction-ocr-scanned.md), and related topics in the navigation. + +Pipeline concepts and stage overview appear in [Key concepts](concepts.md). + +**Next:** [Workflow: Build a searchable collection](workflow-build-searchable-collection.md). diff --git a/docs/docs/extraction/workflow-e2e-blueprints.md b/docs/docs/extraction/workflow-e2e-blueprints.md new file mode 100644 index 000000000..e96830063 --- /dev/null +++ b/docs/docs/extraction/workflow-e2e-blueprints.md @@ -0,0 +1,8 @@ +# Workflow: End-to-end RAG with NVIDIA Blueprints + +!!! note + + NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. + + +For NVIDIA AI Blueprint links, solution cards, enterprise RAG resources, and related product landing pages, see [NVIDIA AI Blueprints and product links](resources-links.md). diff --git a/docs/docs/extraction/workflow-query-rerank.md b/docs/docs/extraction/workflow-query-rerank.md index 134ec19f4..e7c5e2d53 100644 --- a/docs/docs/extraction/workflow-query-rerank.md +++ b/docs/docs/extraction/workflow-query-rerank.md @@ -1,6 +1,11 @@ # Workflow: Query and rerank -After documents are [ingested](v2-api-guide.md), [chunked](chunking.md), and [indexed](data-store.md), applications run retrieval (semantic and optionally hybrid search) and optional reranking to improve top-K quality. +!!! note + + NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. + + +After documents are [ingested](workflow-document-ingestion.md), [chunked](chunking.md), and [indexed](data-store.md), applications run retrieval (semantic and optionally hybrid search) and optional reranking to improve top-K quality. Follow these steps: diff --git a/docs/docs/extraction/workflow-video-ocr.md b/docs/docs/extraction/workflow-video-ocr.md index e6dd1f4a6..fe87f2b44 100644 --- a/docs/docs/extraction/workflow-video-ocr.md +++ b/docs/docs/extraction/workflow-video-ocr.md @@ -1,5 +1,10 @@ # Workflow: Video processing with OCR +!!! note + + NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. + + For video assets, NeMo Retriever Library can combine audio or speech processing with visual text extraction when OCR applies to frames or derived images. For the audio and speech path, see [Speech and audio](audio.md) for RIVA ASR and related ingestion paths. diff --git a/docs/mkdocs.nrl-github-pages.yml b/docs/mkdocs.nrl-github-pages.yml index 610aecdc2..30a574abe 100644 --- a/docs/mkdocs.nrl-github-pages.yml +++ b/docs/mkdocs.nrl-github-pages.yml @@ -79,15 +79,13 @@ nav: - When to use NVIDIA-hosted NIMs: extraction/hosted-nims-when-to-use.md - When to self-host NIMs: extraction/self-host-nims-when-to-use.md - "4. Core workflows": - - "Workflow: Document ingestion": extraction/v2-api-guide.md - - "Workflow: Build a searchable collection": - - "Vector databases and collections": extraction/data-store.md - - "Chunking and splitting": extraction/chunking.md + - "Workflow: Document ingestion": extraction/workflow-document-ingestion.md + - "Workflow: Build a searchable collection": extraction/workflow-build-searchable-collection.md - "Workflow: Query and rerank": extraction/workflow-query-rerank.md - "Workflow: Agentic retrieval": extraction/workflow-agentic-retrieval.md - "Workflow: Audio or video to text": extraction/audio.md - "Workflow: Video processing with OCR": extraction/workflow-video-ocr.md - - "End-to-end RAG with NVIDIA Blueprints": extraction/resources-links.md + - "Workflow: End-to-end RAG with NVIDIA Blueprints": extraction/workflow-e2e-blueprints.md - "5. Multimodal extraction": - "Supported file types and formats": extraction/supported-file-types.md - "Text and layout extraction": extraction/text-layout-extraction.md @@ -96,7 +94,7 @@ nav: - "OCR and scanned documents": extraction/extraction-ocr-scanned.md - "Nemotron Parse based parsing": extraction/nemoretriever-parse.md - Image captioning: extraction/image-captioning.md - - "Metadata and content schema": extraction/content-metadata.md + - "Metadata and content schema": extraction/multimodal-metadata-schema.md - "Extraction limitations and quality": extraction/throughput-is-dataset-dependent.md - "6. Embedding, indexing, and storage": - "Embedding NIMs and models": extraction/embedding-nims-models.md @@ -112,7 +110,6 @@ nav: - "Scaling: static and dynamic": extraction/scaling-modes.md - "Ray and distributed ingest": extraction/ray-logging.md - "Telemetry and observability": extraction/telemetry.md - - "Benchmarking and load testing": extraction/benchmarking.md - Production checklist: extraction/production-checklist.md - "9. Customize and extend": - User-defined functions: extraction/user-defined-functions.md @@ -124,8 +121,7 @@ nav: - "Vector database partners": extraction/vector-db-partners.md - "Starter kits": extraction/notebooks.md - "11. Evaluation and benchmarks": - - "Benchmarking methodology": extraction/benchmarking.md - - "Recall and evaluation harnesses": extraction/benchmarking.md + - "Benchmarking methodology and evaluation harnesses": extraction/benchmarking.md - "Evaluate on your own documents": extraction/evaluate-on-your-data.md - "Published metrics and comparisons": extraction/published-metrics-comparisons.md - "12. Reference": From 286921bb7a335936ea13baa05ee9d77f321994e4 Mon Sep 17 00:00:00 2001 From: Kurt Heiss Date: Fri, 17 Apr 2026 10:44:49 -0700 Subject: [PATCH 84/94] docs: fix broken internal links and anchors for MkDocs NRL build - Point environment and troubleshooting links to environment-config.md and troubleshoot.md. - In user-defined-functions, link to content-metadata, multimodal-metadata-schema, nimclient.md, and GitHub default_pipeline.yaml. - Add explicit HTML anchors in content-metadata.md so schema table fragment links resolve without macro/attr_list issues. Made-with: Cursor --- docs/docs/extraction/chunking.md | 2 +- docs/docs/extraction/content-metadata.md | 14 +++++++++++++- docs/docs/extraction/scaling-modes.md | 2 +- docs/docs/extraction/user-defined-functions.md | 6 +++--- 4 files changed, 18 insertions(+), 6 deletions(-) diff --git a/docs/docs/extraction/chunking.md b/docs/docs/extraction/chunking.md index 4086dc7b9..899a42f63 100644 --- a/docs/docs/extraction/chunking.md +++ b/docs/docs/extraction/chunking.md @@ -113,4 +113,4 @@ If you are building the container yourself and want to pre-download this model, - [Use the Python API](python-api-reference.md) - [NeMo Retriever Library V2 API Guide](v2-api-guide.md) -- [Environment Variables](environment-variables.md) +- [Environment variables](environment-config.md) diff --git a/docs/docs/extraction/content-metadata.md b/docs/docs/extraction/content-metadata.md index 5a55b9e6a..f69baca25 100644 --- a/docs/docs/extraction/content-metadata.md +++ b/docs/docs/extraction/content-metadata.md @@ -164,7 +164,10 @@ Describes the structural location of content within a document. | `span` | `int` | `-1` | Span identifier within a line, for finer granularity. | | `nearby_objects` | `NearbyObjectsSchema` | `NearbyObjectsSchema()` | Information about objects (text, images, structured data) near the current content. See [NearbyObjectsSchema](#nearbyobjectsschema). | + + ### `NearbyObjectsSchema` (Currently Unused) + Container for different types of nearby objects. | Field | Type | Default Value | Description | @@ -173,7 +176,10 @@ Container for different types of nearby objects. | `images` | `NearbyObjectsSubSchema` | `NearbyObjectsSubSchema()` | Nearby image objects. | | `structured` | `NearbyObjectsSubSchema` | `NearbyObjectsSubSchema()` | Nearby structured data objects (e.g., tables). | + + ### `NearbyObjectsSubSchema` + Describes a list of nearby objects of a specific type. | Field | Type | Default Value | Description | @@ -243,7 +249,10 @@ Specific metadata for audio content. | `audio_transcript` | `str` | `""` | Transcript of the audio content. | | `audio_type` | `str` | `""` | Type or format of the audio (e.g., `mp3`, `wav`). | + + ### `ErrorMetadataSchema` (Currently Unused) + Metadata describing errors encountered during processing. | Field | Type | Default Value | Description | @@ -253,7 +262,10 @@ Metadata describing errors encountered during processing. | `source_id` | `str` | `""` | Identifier of the source item that caused the error, if applicable. | | `error_msg` | `str` | *Required* | The error message. | + + ### `InfoMessageMetadataSchema` (Currently Unused) + Informational messages related to processing. | Field | Type | Default Value | Description | @@ -374,4 +386,4 @@ For the full file, refer to the [data folder](https://github.com/NVIDIA/nv-inges ## Related Topics -- [Environment Variables](environment-variables.md) +- [Environment variables](environment-config.md) diff --git a/docs/docs/extraction/scaling-modes.md b/docs/docs/extraction/scaling-modes.md index 8fc4684a1..b9d34cb1a 100644 --- a/docs/docs/extraction/scaling-modes.md +++ b/docs/docs/extraction/scaling-modes.md @@ -102,4 +102,4 @@ Open `docker-compose.yaml` and locate: - [Prerequisites](prerequisites.md) - [Support Matrix](support-matrix.md) -- [Troubleshooting](troubleshooting.md) +- [Troubleshooting](troubleshoot.md) diff --git a/docs/docs/extraction/user-defined-functions.md b/docs/docs/extraction/user-defined-functions.md index aef2c09c3..5dc7a639a 100644 --- a/docs/docs/extraction/user-defined-functions.md +++ b/docs/docs/extraction/user-defined-functions.md @@ -264,7 +264,7 @@ def enhance_metadata(control_message: IngestControlMessage) -> IngestControlMess return control_message ``` -> **📖 For detailed metadata schema documentation, see:** [metadata_documentation.md](metadata_documentation.md) +> **📖 For detailed metadata schema documentation, see:** [Content metadata reference](content-metadata.md) and [Metadata and content schema](multimodal-metadata-schema.md). ### UDF Targeting @@ -304,7 +304,7 @@ UDFs can be executed at different stages of the pipeline by specifying the `targ - `broker_response` - Response message handling - `otel_tracer` - OpenTelemetry tracing -> **Note:** For the complete and up-to-date list of pipeline stages, see the [default_pipeline.yaml](../../../config/default_pipeline.yaml) configuration file. +> **Note:** For the complete and up-to-date list of pipeline stages, see the [`default_pipeline.yaml`](https://github.com/NVIDIA/NeMo-Retriever/blob/main/config/default_pipeline.yaml) configuration file in the NeMo Retriever repository. #### Target Stage Selection Examples @@ -537,7 +537,7 @@ For detailed guidance on creating custom NIM integrations, including: - Error handling and debugging - Performance best practices -See the comprehensive [**NimClient Usage Guide**](nimclient_usage.md). +See [**NimClient and custom NIM endpoints**](nimclient.md). ### Error Handling From 97f4e4909968bd7a632997104e1b1bbdf797293d Mon Sep 17 00:00:00 2001 From: Kurt Heiss Date: Fri, 17 Apr 2026 11:17:13 -0700 Subject: [PATCH 85/94] docs: update internal links for clarity in reranking documentation - Replace "see" with "refer to" for consistency in linking to the Support matrix and Benchmarking documentation. --- docs/docs/extraction/reranking.md | 4 +- docs/scripts/replace_see_with_refer_to.py | 121 ++++++++++++++++++++++ 2 files changed, 123 insertions(+), 2 deletions(-) create mode 100644 docs/scripts/replace_see_with_refer_to.py diff --git a/docs/docs/extraction/reranking.md b/docs/docs/extraction/reranking.md index 5c7c4875d..86d20ffc7 100644 --- a/docs/docs/extraction/reranking.md +++ b/docs/docs/extraction/reranking.md @@ -5,14 +5,14 @@ NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. -A **reranker** model re-scores the top candidates from initial retrieval so the final top-K better matches the query. NeMo Retriever Library evaluation and deployments can integrate reranker NIMs (see the [Support matrix](support-matrix.md) for availability and GPU considerations). +A **reranker** model re-scores the top candidates from initial retrieval so the final top-K better matches the query. NeMo Retriever Library evaluation and deployments can integrate reranker NIMs (refer to the [Support matrix](support-matrix.md) for availability and GPU considerations). **When to enable reranking** Enable reranking when both of the following apply: - Recall at K from vector or hybrid search is acceptable, but ordering of the top results still needs improvement. -- Benchmarking shows measurable gains for your domain (see reranker modes in [Benchmarking](benchmarking.md)). +- Benchmarking shows measurable gains for your domain (refer to reranker modes in [Benchmarking](benchmarking.md)). **Configuration pointers** diff --git a/docs/scripts/replace_see_with_refer_to.py b/docs/scripts/replace_see_with_refer_to.py new file mode 100644 index 000000000..529856d38 --- /dev/null +++ b/docs/scripts/replace_see_with_refer_to.py @@ -0,0 +1,121 @@ +#!/usr/bin/env python3 +"""Replace instructional 'see' with 'refer to' in docs/docs/extraction/*.md.""" +from __future__ import annotations + +from pathlib import Path + +EXTRACTION = Path(__file__).resolve().parents[1] / "docs" / "extraction" + +# Keep these phrases verbatim (do not replace inner 'see'). +KEEP = [ + "You should see", + "you should see", + "might see errors", + "might see an error", + "might see log messages", + "For example, you might", + "When you run a job you might", + "In rare cases, when you run a job you might", + "the embedding service might fail to start and you might see", +] + + +def protect(s: str) -> tuple[str, dict[str, str]]: + tokens: dict[str, str] = {} + out = s + for i, phrase in enumerate(KEEP): + key = f"\0KEEP{i}\0" + if phrase in out: + out = out.replace(phrase, key) + tokens[key] = phrase + return out, tokens + + +def restore(s: str, tokens: dict[str, str]) -> str: + for k, v in tokens.items(): + s = s.replace(k, v) + return s + + +def transform(s: str) -> str: + s, tok = protect(s) + # Longer patterns first + reps: list[tuple[str, str]] = [ + ("For more information, see the following pages:", "For more information, refer to the following pages:"), + ("For more information, see the", "For more information, refer to the"), + ("For more information, see ", "For more information, refer to "), + ("For code examples, see the", "For code examples, refer to the"), + ("For detailed metadata schema documentation, see:**", "For detailed metadata schema documentation, refer to:**"), + ("For the complete and up-to-date list of pipeline stages, see the", "For the complete and up-to-date list of pipeline stages, refer to the"), + ("For advanced usage patterns, see the existing", "For advanced usage patterns, refer to the existing"), + ("For scheduling and GPU partitioning, see the", "For scheduling and GPU partitioning, refer to the"), + ("For details, see ", "For details, refer to "), + ("For a concise comparison, see ", "For a concise comparison, refer to "), + ("For harnesses and metrics, see ", "For harnesses and metrics, refer to "), + ( + "For guidance on choosing between static and dynamic scaling modes, and how to configure them in `docker-compose.yaml`, see ", + "For guidance on choosing between static and dynamic scaling modes, and how to configure them in `docker-compose.yaml`, refer to ", + ), + ("For more, see ", "For more, refer to "), + ("deeper topics, see ", "deeper topics, refer to "), + ("For operations topics, see ", "For operations topics, refer to "), + ( + "Documentation here focuses on stores used in the library and harnesses, such as LanceDB and Milvus, and cuVS where it applies. See ", + "Documentation here focuses on stores used in the library and harnesses, such as LanceDB and Milvus, and cuVS where it applies. Refer to ", + ), + ( + "For NVIDIA AI Blueprint links, solution cards, enterprise RAG resources, and related product landing pages, see ", + "For NVIDIA AI Blueprint links, solution cards, enterprise RAG resources, and related product landing pages, refer to ", + ), + ("For the audio and speech path, see ", "For the audio and speech path, refer to "), + ( + "For visual text and OCR, scanned or image-heavy content often uses OCR-oriented extract methods. See ", + "For visual text and OCR, scanned or image-heavy content often uses OCR-oriented extract methods. Refer to ", + ), + ("For end-to-end RAG stacks that include multimodal ingestion, see ", "For end-to-end RAG stacks that include multimodal ingestion, refer to "), + ("3. **Tune extraction for your content.** See ", "3. **Tune extraction for your content.** Refer to "), + ("1. **Query.** Run searches against your vector store with filters as needed. See ", "1. **Query.** Run searches against your vector store with filters as needed. Refer to "), + ("3. **Rerank.** Apply a reranker NIM for a second-stage score on candidates. See ", "3. **Rerank.** Apply a reranker NIM for a second-stage score on candidates. Refer to "), + ("For more information about other profiles, see ", "For more information about other profiles, refer to "), + ("Python 3.12 or later is required (see [Prerequisites]", "Python 3.12 or later is required (refer to [Prerequisites]"), + ("(see [Return type]", "(refer to [Return type]"), + ("(see below)", "(refer to below)"), + ("(see `recall_utils.py`)", "(refer to `recall_utils.py`)"), + ("- **Configuration**: See `config.py`", "- **Configuration**: Refer to `config.py`"), + ("- **Test utilities**: See `interact.py`", "- **Test utilities**: Refer to `interact.py`"), + ("- **Docker setup**: See project root README", "- **Docker setup**: Refer to project root README"), + ("- **API documentation**: See `docs/`", "- **API documentation**: Refer to `docs/`"), + ("# Create a custom model interface (see examples below)", "# Create a custom model interface (refer to examples below)"), + ("(see all duplicate messages)", "(refer to all duplicate messages)"), + ("## See also", "## Related topics"), + ("See [**NimClient", "Refer to [**NimClient"), + ("See the [Profile Information]", "Refer to the [Profile Information]"), + ("See the [", "Refer to the ["), + ("See [", "Refer to ["), + (", see [", ", refer to ["), + ("; see [", "; refer to ["), + (": see [", ": refer to ["), + (". See [", ". Refer to ["), + ("(see the [", "(refer to the ["), + ("(see [", "(refer to ["), + ("; see the [", "; refer to the ["), + ("; see [", "; refer to ["), + (" see [", " refer to ["), + ("see the [", "refer to the ["), + ] + for old, new in reps: + s = s.replace(old, new) + return restore(s, tok) + + +def main() -> None: + for path in sorted(EXTRACTION.glob("*.md")): + raw = path.read_text(encoding="utf-8") + updated = transform(raw) + if raw != updated: + path.write_text(updated, encoding="utf-8", newline="\n") + print(path.name) + + +if __name__ == "__main__": + main() From 5718b9988a309250bc01e45669592cea410e065e Mon Sep 17 00:00:00 2001 From: Kurt Heiss Date: Fri, 17 Apr 2026 11:55:10 -0700 Subject: [PATCH 86/94] docs: replace instructional 'see' with 'refer to' in extraction topics - Update cross-references and table notes to use refer to / Refer to for consistency. - Rename 'See also' to 'Related topics' in key-features.md. - Remove temporary docs/scripts/replace_see_with_refer_to.py helper. Made-with: Cursor --- docs/docs/extraction/audio.md | 6 - docs/docs/extraction/benchmarking.md | 10 +- docs/docs/extraction/concepts.md | 2 +- docs/docs/extraction/content-metadata.md | 24 ++-- docs/docs/extraction/custom-metadata.md | 6 +- docs/docs/extraction/data-store.md | 2 +- docs/docs/extraction/embedding-nims-models.md | 6 +- docs/docs/extraction/environment-config.md | 2 +- .../docs/extraction/extraction-ocr-scanned.md | 2 +- docs/docs/extraction/extraction-tables.md | 2 +- docs/docs/extraction/faq.md | 4 +- .../extraction/hosted-nims-when-to-use.md | 4 +- .../how-to-use-this-documentation.md | 4 +- docs/docs/extraction/key-features.md | 2 +- docs/docs/extraction/nimclient.md | 4 +- docs/docs/extraction/prerequisites.md | 2 +- docs/docs/extraction/quickstart-guide.md | 6 +- .../extraction/quickstart-library-mode.md | 4 +- docs/docs/extraction/ray-logging.md | 2 +- .../extraction/self-host-nims-when-to-use.md | 2 +- .../extraction/semantic-hybrid-retrieval.md | 2 +- .../docs/extraction/text-layout-extraction.md | 2 +- .../docs/extraction/user-defined-functions.md | 8 +- docs/docs/extraction/vector-db-partners.md | 2 +- .../extraction/workflow-document-ingestion.md | 2 +- .../extraction/workflow-e2e-blueprints.md | 2 +- docs/docs/extraction/workflow-query-rerank.md | 4 +- docs/docs/extraction/workflow-video-ocr.md | 6 +- docs/scripts/replace_see_with_refer_to.py | 121 ------------------ 29 files changed, 59 insertions(+), 186 deletions(-) delete mode 100644 docs/scripts/replace_see_with_refer_to.py diff --git a/docs/docs/extraction/audio.md b/docs/docs/extraction/audio.md index 82c74c0b1..c5696c876 100644 --- a/docs/docs/extraction/audio.md +++ b/docs/docs/extraction/audio.md @@ -1,10 +1,5 @@ # Extract Speech with NeMo Retriever Library -!!! note - - NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. - - This documentation describes two methods to run [NeMo Retriever Library](overview.md) with the [parakeet-1-1b-ctc-en-us ASR NIM microservice](https://docs.nvidia.com/nim/speech/latest/asr/deploy-asr-models/parakeet-ctc-en-us.html) (`nvcr.io/nim/nvidia/parakeet-1-1b-ctc-en-us`) to extract speech from audio files. @@ -18,7 +13,6 @@ Currently, you can extract speech from the following file types: - `wav` - ## Overview [NeMo Retriever Library](overview.md) supports extracting speech from audio files for Retrieval Augmented Generation (RAG) applications. diff --git a/docs/docs/extraction/benchmarking.md b/docs/docs/extraction/benchmarking.md index 1c7b34e91..bc896092e 100644 --- a/docs/docs/extraction/benchmarking.md +++ b/docs/docs/extraction/benchmarking.md @@ -459,7 +459,7 @@ All datasets use **multimodal-only** evaluation: **Other datasets** (finance_bench, earnings, audio): - Ground truth files must be obtained separately (not in public repo) - Set `ground_truth_dir` to point to your ground truth directory -- Dataset-specific evaluators are extensible (see `recall_utils.py`) +- Dataset-specific evaluators are extensible (refer to `recall_utils.py`) ### Configuration @@ -854,9 +854,9 @@ EXTRACT_IMAGES=true uv run nv-ingest-harness-run --case=e2e --dataset=bo767 ## Additional Resources -- **Configuration**: See `config.py` for complete field list and validation logic -- **Test utilities**: See `interact.py` for shared helper functions -- **Docker setup**: See project root README for service management commands -- **API documentation**: See `docs/` for API version differences +- **Configuration**: Refer to `config.py` for complete field list and validation logic +- **Test utilities**: Refer to `interact.py` for shared helper functions +- **Docker setup**: Refer to project root README for service management commands +- **API documentation**: Refer to `docs/` for API version differences The framework prioritizes clarity, type safety, and validation to support reliable testing of nv-ingest pipelines. diff --git a/docs/docs/extraction/concepts.md b/docs/docs/extraction/concepts.md index 5c4ddc617..a364d2b1b 100644 --- a/docs/docs/extraction/concepts.md +++ b/docs/docs/extraction/concepts.md @@ -29,4 +29,4 @@ Optionally, the library can compute **embeddings** for extracted content and sto - **Helm / Kubernetes** — [Helm-based deployment](helm.md) for cluster operations. - **Notebooks** — [Jupyter examples](notebooks.md) for experimentation and RAG demos. -For a concise comparison, see [Choose your path](choose-your-path.md). +For a concise comparison, refer to [Choose your path](choose-your-path.md). diff --git a/docs/docs/extraction/content-metadata.md b/docs/docs/extraction/content-metadata.md index f69baca25..88f09399e 100644 --- a/docs/docs/extraction/content-metadata.md +++ b/docs/docs/extraction/content-metadata.md @@ -108,15 +108,15 @@ The `MetadataSchema` is the primary container for all metadata. It includes the | `content` | `str` | `""` | The actual textual content extracted from the source. | | `content_url` | `str` | `""` | URL pointing to the location of the content, if applicable. | | `embedding` | `Optional[List[float]]` | `None` | Optional numerical vector representation (embedding) of the content. | -| `source_metadata` | `Optional[SourceMetadataSchema]` | `None` | Metadata about the original source of the content. See [SourceMetadataSchema](#sourcemetadataschema). | -| `content_metadata` | `Optional[ContentMetadataSchema]` | `None` | General metadata about the extracted content itself. See [ContentMetadataSchema](#contentmetadataschema). | -| `audio_metadata` | `Optional[AudioMetadataSchema]` | `None` | Specific metadata for audio content. Automatically set to `None` if `content_metadata.type` is not `AUDIO`. See [AudioMetadataSchema](#audiometadataschema). | -| `text_metadata` | `Optional[TextMetadataSchema]` | `None` | Specific metadata for text content. Automatically set to `None` if `content_metadata.type` is not `TEXT`. See [TextMetadataSchema](#textmetadataschema). | -| `image_metadata` | `Optional[ImageMetadataSchema]` | `None` | Specific metadata for image content. Automatically set to `None` if `content_metadata.type` is not `IMAGE`. See [ImageMetadataSchema](#imagemetadataschema). | -| `table_metadata` | `Optional[TableMetadataSchema]` | `None` | Specific metadata for tabular content. Automatically set to `None` if `content_metadata.type` is not `STRUCTURED`. See [TableMetadataSchema](#tablemetadataschema). | -| `chart_metadata` | `Optional[ChartMetadataSchema]` | `None` | Specific metadata for chart content. See [ChartMetadataSchema](#chartmetadataschema). | -| `error_metadata` | `Optional[ErrorMetadataSchema]` | `None` | Metadata describing any errors encountered during processing. See [ErrorMetadataSchema](#errormetadataschema). | -| `info_message_metadata` | `Optional[InfoMessageMetadataSchema]` | `None` | Informational messages related to the processing. See [InfoMessageMetadataSchema](#infomessagemetadataschema). | +| `source_metadata` | `Optional[SourceMetadataSchema]` | `None` | Metadata about the original source of the content. Refer to [SourceMetadataSchema](#sourcemetadataschema). | +| `content_metadata` | `Optional[ContentMetadataSchema]` | `None` | General metadata about the extracted content itself. Refer to [ContentMetadataSchema](#contentmetadataschema). | +| `audio_metadata` | `Optional[AudioMetadataSchema]` | `None` | Specific metadata for audio content. Automatically set to `None` if `content_metadata.type` is not `AUDIO`. Refer to [AudioMetadataSchema](#audiometadataschema). | +| `text_metadata` | `Optional[TextMetadataSchema]` | `None` | Specific metadata for text content. Automatically set to `None` if `content_metadata.type` is not `TEXT`. Refer to [TextMetadataSchema](#textmetadataschema). | +| `image_metadata` | `Optional[ImageMetadataSchema]` | `None` | Specific metadata for image content. Automatically set to `None` if `content_metadata.type` is not `IMAGE`. Refer to [ImageMetadataSchema](#imagemetadataschema). | +| `table_metadata` | `Optional[TableMetadataSchema]` | `None` | Specific metadata for tabular content. Automatically set to `None` if `content_metadata.type` is not `STRUCTURED`. Refer to [TableMetadataSchema](#tablemetadataschema). | +| `chart_metadata` | `Optional[ChartMetadataSchema]` | `None` | Specific metadata for chart content. Refer to [ChartMetadataSchema](#chartmetadataschema). | +| `error_metadata` | `Optional[ErrorMetadataSchema]` | `None` | Metadata describing any errors encountered during processing. Refer to [ErrorMetadataSchema](#errormetadataschema). | +| `info_message_metadata` | `Optional[InfoMessageMetadataSchema]` | `None` | Informational messages related to the processing. Refer to [InfoMessageMetadataSchema](#infomessagemetadataschema). | | `debug_metadata` | `Optional[Dict[str, Any]]` | `None` | A dictionary for storing any arbitrary debug information. | | `raise_on_failure` | `bool` | `False` | If `True`, indicates that processing should halt on failure. | @@ -147,7 +147,7 @@ General metadata about the extracted content. | `type` | `ContentTypeEnum` | *Required* | The type of the extracted content (e.g., `TEXT`, `IMAGE`, `AUDIO`). Uses `ContentTypeEnum`. | | `description` | `str` | `""` | A description of the extracted content. | | `page_number` | `int` | `-1` | Page number from which the content was extracted, if applicable (e.g., for PDFs). | -| `hierarchy` | `ContentHierarchySchema` | `ContentHierarchySchema()` | Hierarchical information about the content's location within the source. See [ContentHierarchySchema](#contenthierarchyschema). | +| `hierarchy` | `ContentHierarchySchema` | `ContentHierarchySchema()` | Hierarchical information about the content's location within the source. Refer to [ContentHierarchySchema](#contenthierarchyschema). | | `subtype` | `Union[ContentTypeEnum, str]` | `""` | A more specific subtype for the content (e.g., if `type` is `IMAGE`, `subtype` could be `diagram`). | | `start_time` | `int` | `-1` | Start time in milliseconds for time-based media (e.g., audio, video). | | `end_time` | `int` | `-1` | End time in milliseconds for time-based media. | @@ -162,7 +162,7 @@ Describes the structural location of content within a document. | `block` | `int` | `-1` | Identifier for a block of content (e.g., paragraph, section). | | `line` | `int` | `-1` | Line number within a block, if applicable. | | `span` | `int` | `-1` | Span identifier within a line, for finer granularity. | -| `nearby_objects` | `NearbyObjectsSchema` | `NearbyObjectsSchema()` | Information about objects (text, images, structured data) near the current content. See [NearbyObjectsSchema](#nearbyobjectsschema). | +| `nearby_objects` | `NearbyObjectsSchema` | `NearbyObjectsSchema()` | Information about objects (text, images, structured data) near the current content. Refer to [NearbyObjectsSchema](#nearbyobjectsschema). | @@ -172,7 +172,7 @@ Container for different types of nearby objects. | Field | Type | Default Value | Description | |--------------|------------------------|------------------------------|--------------------------------------------------------------------------| -| `text` | `NearbyObjectsSubSchema` | `NearbyObjectsSubSchema()` | Nearby textual objects. See [NearbyObjectsSubSchema](#nearbyobjectssubschema). | +| `text` | `NearbyObjectsSubSchema` | `NearbyObjectsSubSchema()` | Nearby textual objects. Refer to [NearbyObjectsSubSchema](#nearbyobjectssubschema). | | `images` | `NearbyObjectsSubSchema` | `NearbyObjectsSubSchema()` | Nearby image objects. | | `structured` | `NearbyObjectsSubSchema` | `NearbyObjectsSubSchema()` | Nearby structured data objects (e.g., tables). | diff --git a/docs/docs/extraction/custom-metadata.md b/docs/docs/extraction/custom-metadata.md index f2ca25578..930c8001a 100644 --- a/docs/docs/extraction/custom-metadata.md +++ b/docs/docs/extraction/custom-metadata.md @@ -61,8 +61,8 @@ meta_df.to_csv(file_path) ### Example: Add Custom Metadata During Ingestion The following example adds custom metadata during ingestion. -For more information about the `Ingestor` class, see [Use the Python API](python-api-reference.md). -For more information about the `vdb_upload` method, see [Upload Data](data-store.md). +For more information about the `Ingestor` class, refer to [Use the Python API](python-api-reference.md). +For more information about the `vdb_upload` method, refer to [Upload Data](data-store.md). ```python from nv_ingest_client.client import Ingestor @@ -181,5 +181,5 @@ print(f"{q_results}") ## Related Content -- For a notebook that uses the CLI to add custom metadata and filter query results, see [metadata_and_filtered_search.ipynb +- For a notebook that uses the CLI to add custom metadata and filter query results, refer to [metadata_and_filtered_search.ipynb ](https://github.com/NVIDIA/nv-ingest/blob/main/examples/metadata_and_filtered_search.ipynb). diff --git a/docs/docs/extraction/data-store.md b/docs/docs/extraction/data-store.md index fd493519e..2ac5e5d2b 100644 --- a/docs/docs/extraction/data-store.md +++ b/docs/docs/extraction/data-store.md @@ -62,7 +62,7 @@ vdb.run(results) docs = vdb.retrieval(queries, top_k=10) ``` -When using the `Ingestor` with `vdb_upload`, the backend defaults to LanceDB unless you configure Milvus (see [Upload to Milvus](#upload-to-milvus)). +When using the `Ingestor` with `vdb_upload`, the backend defaults to LanceDB unless you configure Milvus (refer to [Upload to Milvus](#upload-to-milvus)). ### Test harness configuration diff --git a/docs/docs/extraction/embedding-nims-models.md b/docs/docs/extraction/embedding-nims-models.md index b78512e7c..55a17e57d 100644 --- a/docs/docs/extraction/embedding-nims-models.md +++ b/docs/docs/extraction/embedding-nims-models.md @@ -5,8 +5,8 @@ NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. -Embeddings turn extracted text and multimodal content into vectors for semantic search. NeMo Retriever Library integrates with NVIDIA NIM microservices for embedding. Model names and compatibility vary by release; see the [Support matrix](support-matrix.md) and the [NVIDIA NIM catalog](https://build.nvidia.com/). +Embeddings turn extracted text and multimodal content into vectors for semantic search. NeMo Retriever Library integrates with NVIDIA NIM microservices for embedding. Model names and compatibility vary by release; refer to the [Support matrix](support-matrix.md) and the [NVIDIA NIM catalog](https://build.nvidia.com/). -For multimodal or VLM embeddings, see [Multimodal embeddings (VLM)](vlm-embed.md). +For multimodal or VLM embeddings, refer to [Multimodal embeddings (VLM)](vlm-embed.md). -After embedding, content is stored in a vector database; see [Vector databases](data-store.md). RAG-style collections are created and populated through your pipeline configuration and harness runs. For details, see [Benchmarking](benchmarking.md) and the [data store](data-store.md) documentation for your backend. +After embedding, content is stored in a vector database; refer to [Vector databases](data-store.md). RAG-style collections are created and populated through your pipeline configuration and harness runs. For details, refer to [Benchmarking](benchmarking.md) and the [data store](data-store.md) documentation for your backend. diff --git a/docs/docs/extraction/environment-config.md b/docs/docs/extraction/environment-config.md index 5e5bb57d4..1f8346bdf 100644 --- a/docs/docs/extraction/environment-config.md +++ b/docs/docs/extraction/environment-config.md @@ -23,7 +23,7 @@ You can specify these in your .env file or directly in your environment. | `OTEL_EXPORTER_OTLP_ENDPOINT` | `http://otel-collector:4317`
| The endpoint for the OpenTelemetry exporter, used for sending telemetry data. | | `REDIS_INGEST_TASK_QUEUE` | `ingest_task_queue`
| The name of the task queue in Redis where tasks are stored and processed. | | `REDIS_POOL_SIZE` | - `50` (default)
- `100`
- `200`
| Maximum Redis connection pool size. Increase for high-concurrency workloads processing many documents in parallel. Default of 50 works well for most deployments. | -| `IMAGE_STORAGE_URI` | `s3://nv-ingest/artifacts/store/images`
| Default fsspec-compatible URI for the `store` task. Supports `s3://`, `file://`, `gs://`, etc. See [Store Extracted Images](python-api-reference.md#store-extracted-images). | +| `IMAGE_STORAGE_URI` | `s3://nv-ingest/artifacts/store/images`
| Default fsspec-compatible URI for the `store` task. Supports `s3://`, `file://`, `gs://`, etc. Refer to [Store Extracted Images](python-api-reference.md#store-extracted-images). | | `IMAGE_STORAGE_PUBLIC_BASE_URL` | `https://assets.example.com/images`
| Optional HTTP(S) base URL for serving stored images. | diff --git a/docs/docs/extraction/extraction-ocr-scanned.md b/docs/docs/extraction/extraction-ocr-scanned.md index f5d79a988..8f6de170a 100644 --- a/docs/docs/extraction/extraction-ocr-scanned.md +++ b/docs/docs/extraction/extraction-ocr-scanned.md @@ -5,7 +5,7 @@ NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. -Scanned PDFs and image-only pages rely on OCR and hybrid paths that combine native text extraction with OCR when needed. For extract methods such as `ocr` and `pdfium_hybrid`, see the [Python API reference](python-api-reference.md). +Scanned PDFs and image-only pages rely on OCR and hybrid paths that combine native text extraction with OCR when needed. For extract methods such as `ocr` and `pdfium_hybrid`, refer to the [Python API reference](python-api-reference.md). **Related** diff --git a/docs/docs/extraction/extraction-tables.md b/docs/docs/extraction/extraction-tables.md index d061c9451..2c381fe44 100644 --- a/docs/docs/extraction/extraction-tables.md +++ b/docs/docs/extraction/extraction-tables.md @@ -5,7 +5,7 @@ NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. -NeMo Retriever Library detects tables as structured page elements, processes them through the appropriate NIMs, and exports formats suitable for downstream RAG (including Markdown-oriented representations where configured). Availability depends on pipeline and model configuration; see the [Support matrix](support-matrix.md). +NeMo Retriever Library detects tables as structured page elements, processes them through the appropriate NIMs, and exports formats suitable for downstream RAG (including Markdown-oriented representations where configured). Availability depends on pipeline and model configuration; refer to the [Support matrix](support-matrix.md). **Related** diff --git a/docs/docs/extraction/faq.md b/docs/docs/extraction/faq.md index 57b90fa4d..045d6645b 100644 --- a/docs/docs/extraction/faq.md +++ b/docs/docs/extraction/faq.md @@ -12,7 +12,7 @@ This documentation contains the Frequently Asked Questions (FAQ) for [NeMo Retri You can use the CLI or Python APIs to perform extraction only, and then consume the results. Using the Python API, `results` is a list object with one entry. -For code examples, see the Jupyter notebooks [Multimodal RAG with LlamaIndex](https://github.com/NVIDIA/nv-ingest/blob/main/examples/llama_index_multimodal_rag.ipynb) +For code examples, refer to the Jupyter notebooks [Multimodal RAG with LlamaIndex](https://github.com/NVIDIA/nv-ingest/blob/main/examples/llama_index_multimodal_rag.ipynb) and [Multimodal RAG with LangChain](https://github.com/NVIDIA/nv-ingest/blob/main/examples/langchain_multimodal_rag.ipynb). @@ -71,7 +71,7 @@ For examples of `*_ENDPOINT` variables, refer to [nv-ingest/docker-compose.yaml] ## What parameters or settings can I adjust to optimize extraction from my documents or data? -See the [Profile Information](quickstart-guide.md#profile-information) section +Refer to the [Profile Information](quickstart-guide.md#profile-information) section for information about the optional NIM components of the pipeline. You can configure the `extract`, `caption`, and other tasks by using the [Ingestor API](python-api-reference.md). diff --git a/docs/docs/extraction/hosted-nims-when-to-use.md b/docs/docs/extraction/hosted-nims-when-to-use.md index f2234b0d4..93843c07a 100644 --- a/docs/docs/extraction/hosted-nims-when-to-use.md +++ b/docs/docs/extraction/hosted-nims-when-to-use.md @@ -5,7 +5,7 @@ NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. -[NVIDIA-hosted NIMs](https://build.nvidia.com/) run inference on NVIDIA-managed infrastructure. You call models with API keys (see [Get your API key](ngc-api-key.md)) without operating GPU nodes yourself. +[NVIDIA-hosted NIMs](https://build.nvidia.com/) run inference on NVIDIA-managed infrastructure. You call models with API keys (refer to [Get your API key](ngc-api-key.md)) without operating GPU nodes yourself. Consider hosted NIMs when: @@ -13,7 +13,7 @@ Consider hosted NIMs when: - Latency to NVIDIA endpoints works for your region and use case. - Your compliance and data policies allow document or query content in the hosted service (confirm with your security review). -For more information, see the following pages: +For more information, refer to the following pages: - [NVIDIA NIM catalog](https://build.nvidia.com/) - [Compare deployment options](choose-your-path.md) diff --git a/docs/docs/extraction/how-to-use-this-documentation.md b/docs/docs/extraction/how-to-use-this-documentation.md index decc8c052..438b6cfa0 100644 --- a/docs/docs/extraction/how-to-use-this-documentation.md +++ b/docs/docs/extraction/how-to-use-this-documentation.md @@ -9,11 +9,11 @@ Use the sections below as a reading order that matches how you run NeMo Retrieve ## NeMo Retriever Library (local or embedded) -Start with the [Introduction](overview.md), [Concepts](concepts.md), and [Get started](getting-started-about.md) pages. Then follow [Prerequisites](prerequisites.md), [Quickstart: Library mode](quickstart-library-mode.md), and either the [Python API](python-api-reference.md) or [CLI](cli-reference.md). For deeper topics, see [Core workflows](v2-api-guide.md) and [Multimodal extraction](supported-file-types.md). +Start with the [Introduction](overview.md), [Concepts](concepts.md), and [Get started](getting-started-about.md) pages. Then follow [Prerequisites](prerequisites.md), [Quickstart: Library mode](quickstart-library-mode.md), and either the [Python API](python-api-reference.md) or [CLI](cli-reference.md). For deeper topics, refer to [Core workflows](v2-api-guide.md) and [Multimodal extraction](supported-file-types.md). ## Microservices, Helm, and production clusters -Follow [Choose your deployment](choose-your-path.md), [Deploy (Helm Chart)](helm.md), [Environment variables](environment-config.md), and the [V2 API guide](v2-api-guide.md). For operations topics, see [Scaling modes](scaling-modes.md), [Ray logging](ray-logging.md), [Telemetry](telemetry.md), and [Benchmarking](benchmarking.md). +Follow [Choose your deployment](choose-your-path.md), [Deploy (Helm Chart)](helm.md), [Environment variables](environment-config.md), and the [V2 API guide](v2-api-guide.md). For operations topics, refer to [Scaling modes](scaling-modes.md), [Ray logging](ray-logging.md), [Telemetry](telemetry.md), and [Benchmarking](benchmarking.md). ## NVIDIA Blueprints and end-to-end RAG diff --git a/docs/docs/extraction/key-features.md b/docs/docs/extraction/key-features.md index cdcc07b45..51fd07605 100644 --- a/docs/docs/extraction/key-features.md +++ b/docs/docs/extraction/key-features.md @@ -24,7 +24,7 @@ NeMo Retriever Library is built for **accuracy**, **throughput**, and **flexible - **Composable services** — Use modules that fit your environment and security boundaries. - **Clear metadata** — Structured JSON results with extraction metadata, annotations, and trace data for observability. -## See also +## Related topics - [Concepts](concepts.md) — Core ideas (jobs, pipelines, metadata). - [Choose your path](choose-your-path.md) — Pick a deployment and learning path. diff --git a/docs/docs/extraction/nimclient.md b/docs/docs/extraction/nimclient.md index 4f1d29c17..ca910a36b 100644 --- a/docs/docs/extraction/nimclient.md +++ b/docs/docs/extraction/nimclient.md @@ -12,7 +12,7 @@ The NimClient architecture consists of two main components: 1. **NimClient**: The client class that handles communication with NIM endpoints via gRPC or HTTP protocols 2. **ModelInterface**: An abstract base class that defines how to format input data, parse output responses, and process inference results for specific models -For advanced usage patterns, see the existing model interfaces in `api/src/nv_ingest_api/internal/primitives/nim/model_interface/`. +For advanced usage patterns, refer to the existing model interfaces in `api/src/nv_ingest_api/internal/primitives/nim/model_interface/`. ## Quick Start @@ -23,7 +23,7 @@ For advanced usage patterns, see the existing model interfaces in `api/src/nv_in from nv_ingest_api.util.nim import create_inference_client from nv_ingest_api.internal.primitives.nim import ModelInterface -# Create a custom model interface (see examples below) +# Create a custom model interface (refer to examples below) model_interface = MyCustomModelInterface() # Define endpoints (gRPC, HTTP) diff --git a/docs/docs/extraction/prerequisites.md b/docs/docs/extraction/prerequisites.md index 3f7947f58..43f81bc06 100644 --- a/docs/docs/extraction/prerequisites.md +++ b/docs/docs/extraction/prerequisites.md @@ -60,7 +60,7 @@ For production deployments processing large volumes of documents, consider: - Additional CPU cores for improved parallel processing - Multiple GPUs for distributed processing workloads -For guidance on choosing between static and dynamic scaling modes, and how to configure them in `docker-compose.yaml`, see [Scaling Modes](scaling-modes.md). +For guidance on choosing between static and dynamic scaling modes, and how to configure them in `docker-compose.yaml`, refer to [Scaling Modes](scaling-modes.md). diff --git a/docs/docs/extraction/quickstart-guide.md b/docs/docs/extraction/quickstart-guide.md index 88461b77d..6373d052c 100644 --- a/docs/docs/extraction/quickstart-guide.md +++ b/docs/docs/extraction/quickstart-guide.md @@ -53,13 +53,13 @@ e. Make sure that NVIDIA is set as your default container runtime before you run `sudo nvidia-ctk runtime configure --runtime=docker --set-as-default` -f. Start core services. By default, the pipeline uses **LanceDB** as the vector database (embedded, in-process); no extra Docker profile is required. If you want to use **Milvus** instead, start with the retrieval profile. This example uses the retrieval profile to run Milvus. For more information about other profiles, see [Profile Information](#profile-information). +f. Start core services. By default, the pipeline uses **LanceDB** as the vector database (embedded, in-process); no extra Docker profile is required. If you want to use **Milvus** instead, start with the retrieval profile. This example uses the retrieval profile to run Milvus. For more information about other profiles, refer to [Profile Information](#profile-information). `docker compose --profile retrieval up` !!! tip "LanceDB (default)" - To use the default LanceDB backend, you can run `docker compose up` without `--profile retrieval`. LanceDB runs in-process and does not require Milvus, etcd, or MinIO. For details, see [Data Upload](data-store.md). + To use the default LanceDB backend, you can run `docker compose up` without `--profile retrieval`. LanceDB runs in-process and does not require Milvus, etcd, or MinIO. For details, refer to [Data Upload](data-store.md). !!! tip @@ -112,7 +112,7 @@ You can submit jobs programmatically in Python or using the [CLI](cli-reference. !!! important "Python version" - Install the client and CLI into an environment that uses Python 3.12 or later. The published packages require Python `>= 3.12`; using Python 3.10 or 3.11 typically fails with dependency resolution errors. See [Prerequisites](prerequisites.md) and [Support Matrix](support-matrix.md). + Install the client and CLI into an environment that uses Python 3.12 or later. The published packages require Python `>= 3.12`; using Python 3.10 or 3.11 typically fails with dependency resolution errors. Refer to [Prerequisites](prerequisites.md) and [Support Matrix](support-matrix.md). The following examples demonstrate how to extract text, charts, tables, and images: diff --git a/docs/docs/extraction/quickstart-library-mode.md b/docs/docs/extraction/quickstart-library-mode.md index d86a1b9d0..8617f8aed 100644 --- a/docs/docs/extraction/quickstart-library-mode.md +++ b/docs/docs/extraction/quickstart-library-mode.md @@ -4,7 +4,7 @@ NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. -Use the [Quick Start for NeMo Retriever Library](https://github.com/NVIDIA/NeMo-Retriever/blob/26.03/nemo_retriever/README.md) to set up and run the NeMo Retriever Library locally, so you can build a GPU‑accelerated, multimodal RAG ingestion pipeline that parses PDFs, HTML, text, audio, and video into LanceDB vector embeddings, integrates with Nemotron RAG models (locally or via NIM endpoints), which includes Ray‑based scaling with built‑in recall evaluation. Python 3.12 or later is required (see [Prerequisites](prerequisites.md)). +Use the [Quick Start for NeMo Retriever Library](https://github.com/NVIDIA/NeMo-Retriever/blob/26.03/nemo_retriever/README.md) to set up and run the NeMo Retriever Library locally, so you can build a GPU‑accelerated, multimodal RAG ingestion pipeline that parses PDFs, HTML, text, audio, and video into LanceDB vector embeddings, integrates with Nemotron RAG models (locally or via NIM endpoints), which includes Ray‑based scaling with built‑in recall evaluation. Python 3.12 or later is required (refer to [Prerequisites](prerequisites.md)). ## `run_pipeline` @@ -21,7 +21,7 @@ The following table matches the function signature in source (defaults and optio | Parameter | Required | Type (default) | Description | |-----------|----------|----------------|-------------| | `pipeline_config` | No | `Optional[PipelineConfigSchema]` (`None`) | Validated pipeline configuration. If `None` and `libmode=True`, the default library-mode pipeline is loaded automatically. If `None` and `libmode=False`, a `ValueError` is raised—you must pass a configuration. | -| `block` | No | `bool` (`True`) | If `True`, the call blocks until the pipeline finishes. If `False`, returns immediately with a handle object (see [Return type](#return-type)). | +| `block` | No | `bool` (`True`) | If `True`, the call blocks until the pipeline finishes. If `False`, returns immediately with a handle object (refer to [Return type](#return-type)). | | `disable_dynamic_scaling` | No | `Optional[bool]` (`None`) | If set, overrides the same field from the pipeline configuration. | | `dynamic_memory_threshold` | No | `Optional[float]` (`None`) | If set, overrides the same field from the pipeline configuration. | | `run_in_subprocess` | No | `bool` (`False`) | If `True`, runs the pipeline in a separate Python subprocess (`multiprocessing.Process`). If `False`, runs in the current process. | diff --git a/docs/docs/extraction/ray-logging.md b/docs/docs/extraction/ray-logging.md index 5a431a607..27f3b1168 100644 --- a/docs/docs/extraction/ray-logging.md +++ b/docs/docs/extraction/ray-logging.md @@ -89,7 +89,7 @@ This log level uses the following settings: - **Import Warnings** – Enabled - **Usage Stats** – Enabled - **Storage** – 20GB total (512MB × 40 files) -- **Deduplication** – Disabled (see all duplicate messages) +- **Deduplication** – Disabled (refer to all duplicate messages) - **Encoding** – JSON with function names and line numbers diff --git a/docs/docs/extraction/self-host-nims-when-to-use.md b/docs/docs/extraction/self-host-nims-when-to-use.md index e7ab3c000..0acaba1d7 100644 --- a/docs/docs/extraction/self-host-nims-when-to-use.md +++ b/docs/docs/extraction/self-host-nims-when-to-use.md @@ -13,7 +13,7 @@ Consider self-hosting when: - You run at large scale where dedicated capacity can cost less than hosted API usage. - You must meet latency or locality requirements that hosted regions cannot satisfy. -**GPU sharing.** The NIM Operator supports time-slicing and MIG so multiple NIM workloads can share GPUs. A NIM used with NeMo Retriever Library does not always need a full dedicated GPU when the operator and GPU profile are set correctly. For scheduling and GPU partitioning, see the [NIM Operator documentation](https://docs.nvidia.com/nim-operator/latest/index.html). +**GPU sharing.** The NIM Operator supports time-slicing and MIG so multiple NIM workloads can share GPUs. A NIM used with NeMo Retriever Library does not always need a full dedicated GPU when the operator and GPU profile are set correctly. For scheduling and GPU partitioning, refer to the [NIM Operator documentation](https://docs.nvidia.com/nim-operator/latest/index.html). **Related** diff --git a/docs/docs/extraction/semantic-hybrid-retrieval.md b/docs/docs/extraction/semantic-hybrid-retrieval.md index c70dff68c..9c55f4543 100644 --- a/docs/docs/extraction/semantic-hybrid-retrieval.md +++ b/docs/docs/extraction/semantic-hybrid-retrieval.md @@ -16,4 +16,4 @@ In NeMo Retriever Library, use these resources: **Evaluation** -For harnesses and metrics, see [Benchmarking](benchmarking.md). +For harnesses and metrics, refer to [Benchmarking](benchmarking.md). diff --git a/docs/docs/extraction/text-layout-extraction.md b/docs/docs/extraction/text-layout-extraction.md index 760b1f78f..7cd7c78c1 100644 --- a/docs/docs/extraction/text-layout-extraction.md +++ b/docs/docs/extraction/text-layout-extraction.md @@ -5,7 +5,7 @@ NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. -For PDFs, NeMo Retriever Library typically uses **pdfium**-based extraction with configurable depth and paths. Scanned or mixed pages may use hybrid or OCR-oriented methods. For `extract_method` options such as `pdfium`, `pdfium_hybrid`, and `ocr`, see the [Python API reference](python-api-reference.md). +For PDFs, NeMo Retriever Library typically uses **pdfium**-based extraction with configurable depth and paths. Scanned or mixed pages may use hybrid or OCR-oriented methods. For `extract_method` options such as `pdfium`, `pdfium_hybrid`, and `ocr`, refer to the [Python API reference](python-api-reference.md). **Related** diff --git a/docs/docs/extraction/user-defined-functions.md b/docs/docs/extraction/user-defined-functions.md index 5dc7a639a..4dfaa0aec 100644 --- a/docs/docs/extraction/user-defined-functions.md +++ b/docs/docs/extraction/user-defined-functions.md @@ -151,7 +151,7 @@ The DataFrame payload contains the extracted content and metadata for processing | `source_type` | `str` | Source type identifier | | `source_file` | `str` | Path or identifier of the source file | | `id` | `str` | Unique identifier for this content piece | -| `metadata` | `dict` | Rich metadata structure (see below) | +| `metadata` | `dict` | Rich metadata structure (refer to below) | | `content` | `str` | The actual extracted content | #### Example DataFrame Access @@ -264,7 +264,7 @@ def enhance_metadata(control_message: IngestControlMessage) -> IngestControlMess return control_message ``` -> **📖 For detailed metadata schema documentation, see:** [Content metadata reference](content-metadata.md) and [Metadata and content schema](multimodal-metadata-schema.md). +> **📖 For detailed metadata schema documentation, refer to:** [Content metadata reference](content-metadata.md) and [Metadata and content schema](multimodal-metadata-schema.md). ### UDF Targeting @@ -304,7 +304,7 @@ UDFs can be executed at different stages of the pipeline by specifying the `targ - `broker_response` - Response message handling - `otel_tracer` - OpenTelemetry tracing -> **Note:** For the complete and up-to-date list of pipeline stages, see the [`default_pipeline.yaml`](https://github.com/NVIDIA/NeMo-Retriever/blob/main/config/default_pipeline.yaml) configuration file in the NeMo Retriever repository. +> **Note:** For the complete and up-to-date list of pipeline stages, refer to the [`default_pipeline.yaml`](https://github.com/NVIDIA/NeMo-Retriever/blob/main/config/default_pipeline.yaml) configuration file in the NeMo Retriever repository. #### Target Stage Selection Examples @@ -537,7 +537,7 @@ For detailed guidance on creating custom NIM integrations, including: - Error handling and debugging - Performance best practices -See [**NimClient and custom NIM endpoints**](nimclient.md). +Refer to [**NimClient and custom NIM endpoints**](nimclient.md). ### Error Handling diff --git a/docs/docs/extraction/vector-db-partners.md b/docs/docs/extraction/vector-db-partners.md index 57aaf112e..a29d88617 100644 --- a/docs/docs/extraction/vector-db-partners.md +++ b/docs/docs/extraction/vector-db-partners.md @@ -5,7 +5,7 @@ NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. -NeMo Retriever Library integrates with vector databases used for RAG collections. Documentation here focuses on stores used in the library and harnesses, such as LanceDB and Milvus, and cuVS where it applies. See [Vector databases](data-store.md) and [Chunking and splitting](chunking.md). +NeMo Retriever Library integrates with vector databases used for RAG collections. Documentation here focuses on stores used in the library and harnesses, such as LanceDB and Milvus, and cuVS where it applies. Refer to [Vector databases](data-store.md) and [Chunking and splitting](chunking.md). **Related** diff --git a/docs/docs/extraction/workflow-document-ingestion.md b/docs/docs/extraction/workflow-document-ingestion.md index 47f19fc3d..e60041651 100644 --- a/docs/docs/extraction/workflow-document-ingestion.md +++ b/docs/docs/extraction/workflow-document-ingestion.md @@ -11,7 +11,7 @@ Follow these steps: 1. **Choose how you call the library.** Use the [Python API](python-api-reference.md) or [CLI](cli-reference.md) from application code, or run a deployment (for example [Quickstart: NeMo Retriever Library (local)](quickstart-library-mode.md), [Deploy (Docker Compose)](quickstart-guide.md), or [Quickstart: Kubernetes (Helm)](helm.md)) and send jobs over the network. 2. **Use the V2 processing pipeline.** Parallel PDF handling and the default ingest path are described in the [HTTP API (V2)](v2-api-guide.md) and [API guide](nemo-retriever-api-reference.md). Set `message_client_kwargs={"api_version": "v2"}` when using the client if you need to be explicit. -3. **Tune extraction for your content.** See [Multimodal extraction](supported-file-types.md) for formats, [Text and layout extraction](text-layout-extraction.md), [Tables](extraction-tables.md), [OCR](extraction-ocr-scanned.md), and related topics in the navigation. +3. **Tune extraction for your content.** Refer to [Multimodal extraction](supported-file-types.md) for formats, [Text and layout extraction](text-layout-extraction.md), [Tables](extraction-tables.md), [OCR](extraction-ocr-scanned.md), and related topics in the navigation. Pipeline concepts and stage overview appear in [Key concepts](concepts.md). diff --git a/docs/docs/extraction/workflow-e2e-blueprints.md b/docs/docs/extraction/workflow-e2e-blueprints.md index e96830063..40be3ed50 100644 --- a/docs/docs/extraction/workflow-e2e-blueprints.md +++ b/docs/docs/extraction/workflow-e2e-blueprints.md @@ -5,4 +5,4 @@ NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. -For NVIDIA AI Blueprint links, solution cards, enterprise RAG resources, and related product landing pages, see [NVIDIA AI Blueprints and product links](resources-links.md). +For NVIDIA AI Blueprint links, solution cards, enterprise RAG resources, and related product landing pages, refer to [NVIDIA AI Blueprints and product links](resources-links.md). diff --git a/docs/docs/extraction/workflow-query-rerank.md b/docs/docs/extraction/workflow-query-rerank.md index e7c5e2d53..232e9411e 100644 --- a/docs/docs/extraction/workflow-query-rerank.md +++ b/docs/docs/extraction/workflow-query-rerank.md @@ -9,9 +9,9 @@ After documents are [ingested](workflow-document-ingestion.md), [chunked](chunki Follow these steps: -1. **Query.** Run searches against your vector store with filters as needed. See [Semantic and hybrid retrieval](semantic-hybrid-retrieval.md) and [Custom metadata and filtering](custom-metadata.md). +1. **Query.** Run searches against your vector store with filters as needed. Refer to [Semantic and hybrid retrieval](semantic-hybrid-retrieval.md) and [Custom metadata and filtering](custom-metadata.md). 2. **Combine hybrid patterns.** Merge dense vectors with sparse or full-text signals where supported, such as LanceDB hybrid mode in [Vector databases](data-store.md). -3. **Rerank.** Apply a reranker NIM for a second-stage score on candidates. See [Reranking](reranking.md) and the [Support matrix](support-matrix.md) for reranker NIM options and GPU notes. +3. **Rerank.** Apply a reranker NIM for a second-stage score on candidates. Refer to [Reranking](reranking.md) and the [Support matrix](support-matrix.md) for reranker NIM options and GPU notes. **Bridge from extraction** diff --git a/docs/docs/extraction/workflow-video-ocr.md b/docs/docs/extraction/workflow-video-ocr.md index fe87f2b44..c4f2d6efe 100644 --- a/docs/docs/extraction/workflow-video-ocr.md +++ b/docs/docs/extraction/workflow-video-ocr.md @@ -7,10 +7,10 @@ For video assets, NeMo Retriever Library can combine audio or speech processing with visual text extraction when OCR applies to frames or derived images. -For the audio and speech path, see [Speech and audio](audio.md) for RIVA ASR and related ingestion paths. +For the audio and speech path, refer to [Speech and audio](audio.md) for RIVA ASR and related ingestion paths. -For visual text and OCR, scanned or image-heavy content often uses OCR-oriented extract methods. See [OCR and scanned documents](extraction-ocr-scanned.md), [Text and layout extraction](text-layout-extraction.md), and [Nemotron Parse](nemoretriever-parse.md) for advanced visual parsing. +For visual text and OCR, scanned or image-heavy content often uses OCR-oriented extract methods. Refer to [OCR and scanned documents](extraction-ocr-scanned.md), [Text and layout extraction](text-layout-extraction.md), and [Nemotron Parse](nemoretriever-parse.md) for advanced visual parsing. Container formats and early-access video types are listed in [Supported file types and formats](supported-file-types.md). -For end-to-end RAG stacks that include multimodal ingestion, see [End-to-end RAG with NVIDIA Blueprints](resources-links.md). +For end-to-end RAG stacks that include multimodal ingestion, refer to [End-to-end RAG with NVIDIA Blueprints](resources-links.md). diff --git a/docs/scripts/replace_see_with_refer_to.py b/docs/scripts/replace_see_with_refer_to.py deleted file mode 100644 index 529856d38..000000000 --- a/docs/scripts/replace_see_with_refer_to.py +++ /dev/null @@ -1,121 +0,0 @@ -#!/usr/bin/env python3 -"""Replace instructional 'see' with 'refer to' in docs/docs/extraction/*.md.""" -from __future__ import annotations - -from pathlib import Path - -EXTRACTION = Path(__file__).resolve().parents[1] / "docs" / "extraction" - -# Keep these phrases verbatim (do not replace inner 'see'). -KEEP = [ - "You should see", - "you should see", - "might see errors", - "might see an error", - "might see log messages", - "For example, you might", - "When you run a job you might", - "In rare cases, when you run a job you might", - "the embedding service might fail to start and you might see", -] - - -def protect(s: str) -> tuple[str, dict[str, str]]: - tokens: dict[str, str] = {} - out = s - for i, phrase in enumerate(KEEP): - key = f"\0KEEP{i}\0" - if phrase in out: - out = out.replace(phrase, key) - tokens[key] = phrase - return out, tokens - - -def restore(s: str, tokens: dict[str, str]) -> str: - for k, v in tokens.items(): - s = s.replace(k, v) - return s - - -def transform(s: str) -> str: - s, tok = protect(s) - # Longer patterns first - reps: list[tuple[str, str]] = [ - ("For more information, see the following pages:", "For more information, refer to the following pages:"), - ("For more information, see the", "For more information, refer to the"), - ("For more information, see ", "For more information, refer to "), - ("For code examples, see the", "For code examples, refer to the"), - ("For detailed metadata schema documentation, see:**", "For detailed metadata schema documentation, refer to:**"), - ("For the complete and up-to-date list of pipeline stages, see the", "For the complete and up-to-date list of pipeline stages, refer to the"), - ("For advanced usage patterns, see the existing", "For advanced usage patterns, refer to the existing"), - ("For scheduling and GPU partitioning, see the", "For scheduling and GPU partitioning, refer to the"), - ("For details, see ", "For details, refer to "), - ("For a concise comparison, see ", "For a concise comparison, refer to "), - ("For harnesses and metrics, see ", "For harnesses and metrics, refer to "), - ( - "For guidance on choosing between static and dynamic scaling modes, and how to configure them in `docker-compose.yaml`, see ", - "For guidance on choosing between static and dynamic scaling modes, and how to configure them in `docker-compose.yaml`, refer to ", - ), - ("For more, see ", "For more, refer to "), - ("deeper topics, see ", "deeper topics, refer to "), - ("For operations topics, see ", "For operations topics, refer to "), - ( - "Documentation here focuses on stores used in the library and harnesses, such as LanceDB and Milvus, and cuVS where it applies. See ", - "Documentation here focuses on stores used in the library and harnesses, such as LanceDB and Milvus, and cuVS where it applies. Refer to ", - ), - ( - "For NVIDIA AI Blueprint links, solution cards, enterprise RAG resources, and related product landing pages, see ", - "For NVIDIA AI Blueprint links, solution cards, enterprise RAG resources, and related product landing pages, refer to ", - ), - ("For the audio and speech path, see ", "For the audio and speech path, refer to "), - ( - "For visual text and OCR, scanned or image-heavy content often uses OCR-oriented extract methods. See ", - "For visual text and OCR, scanned or image-heavy content often uses OCR-oriented extract methods. Refer to ", - ), - ("For end-to-end RAG stacks that include multimodal ingestion, see ", "For end-to-end RAG stacks that include multimodal ingestion, refer to "), - ("3. **Tune extraction for your content.** See ", "3. **Tune extraction for your content.** Refer to "), - ("1. **Query.** Run searches against your vector store with filters as needed. See ", "1. **Query.** Run searches against your vector store with filters as needed. Refer to "), - ("3. **Rerank.** Apply a reranker NIM for a second-stage score on candidates. See ", "3. **Rerank.** Apply a reranker NIM for a second-stage score on candidates. Refer to "), - ("For more information about other profiles, see ", "For more information about other profiles, refer to "), - ("Python 3.12 or later is required (see [Prerequisites]", "Python 3.12 or later is required (refer to [Prerequisites]"), - ("(see [Return type]", "(refer to [Return type]"), - ("(see below)", "(refer to below)"), - ("(see `recall_utils.py`)", "(refer to `recall_utils.py`)"), - ("- **Configuration**: See `config.py`", "- **Configuration**: Refer to `config.py`"), - ("- **Test utilities**: See `interact.py`", "- **Test utilities**: Refer to `interact.py`"), - ("- **Docker setup**: See project root README", "- **Docker setup**: Refer to project root README"), - ("- **API documentation**: See `docs/`", "- **API documentation**: Refer to `docs/`"), - ("# Create a custom model interface (see examples below)", "# Create a custom model interface (refer to examples below)"), - ("(see all duplicate messages)", "(refer to all duplicate messages)"), - ("## See also", "## Related topics"), - ("See [**NimClient", "Refer to [**NimClient"), - ("See the [Profile Information]", "Refer to the [Profile Information]"), - ("See the [", "Refer to the ["), - ("See [", "Refer to ["), - (", see [", ", refer to ["), - ("; see [", "; refer to ["), - (": see [", ": refer to ["), - (". See [", ". Refer to ["), - ("(see the [", "(refer to the ["), - ("(see [", "(refer to ["), - ("; see the [", "; refer to the ["), - ("; see [", "; refer to ["), - (" see [", " refer to ["), - ("see the [", "refer to the ["), - ] - for old, new in reps: - s = s.replace(old, new) - return restore(s, tok) - - -def main() -> None: - for path in sorted(EXTRACTION.glob("*.md")): - raw = path.read_text(encoding="utf-8") - updated = transform(raw) - if raw != updated: - path.write_text(updated, encoding="utf-8", newline="\n") - print(path.name) - - -if __name__ == "__main__": - main() From a43263c8078b596c32e637108cbbfbb2f7dd56b0 Mon Sep 17 00:00:00 2001 From: Kurt Heiss Date: Mon, 20 Apr 2026 08:51:38 -0700 Subject: [PATCH 87/94] NRL only doc updates --- .../extraction/agentic-retrieval-concept.md | 2 +- docs/docs/extraction/benchmarking.md | 94 +++++++++---------- docs/docs/extraction/choose-your-path.md | 2 +- docs/docs/extraction/chunking.md | 2 +- docs/docs/extraction/cli-reference.md | 8 +- docs/docs/extraction/concepts.md | 2 +- docs/docs/extraction/content-metadata.md | 4 +- docs/docs/extraction/contributing.md | 8 +- docs/docs/extraction/custom-metadata.md | 8 +- docs/docs/extraction/data-store.md | 10 +- docs/docs/extraction/embedding-nims-models.md | 2 +- docs/docs/extraction/environment-config.md | 6 +- docs/docs/extraction/evaluate-on-your-data.md | 2 +- .../extraction-charts-infographics.md | 2 +- .../docs/extraction/extraction-ocr-scanned.md | 2 +- docs/docs/extraction/extraction-tables.md | 2 +- docs/docs/extraction/faq.md | 8 +- docs/docs/extraction/getting-started-about.md | 2 +- docs/docs/extraction/helm.md | 4 +- .../extraction/hosted-nims-when-to-use.md | 2 +- .../how-to-use-this-documentation.md | 4 +- docs/docs/extraction/image-captioning.md | 2 +- ...egrations-langchain-llamaindex-haystack.md | 8 +- docs/docs/extraction/key-features.md | 2 +- .../extraction/multimodal-metadata-schema.md | 2 +- .../nemo-retriever-api-reference.md | 2 +- docs/docs/extraction/nemoretriever-parse.md | 2 +- docs/docs/extraction/ngc-api-key.md | 2 +- docs/docs/extraction/nimclient.md | 2 +- docs/docs/extraction/notebooks.md | 2 +- docs/docs/extraction/nv-ingest-python-api.md | 14 +-- docs/docs/extraction/nv-ingest_cli.md | 38 ++++---- docs/docs/extraction/overview.md | 4 +- docs/docs/extraction/prerequisites.md | 2 +- docs/docs/extraction/production-checklist.md | 2 +- .../published-metrics-comparisons.md | 2 +- docs/docs/extraction/python-api-reference.md | 6 +- docs/docs/extraction/quickstart-guide.md | 2 +- .../extraction/quickstart-library-mode.md | 2 +- docs/docs/extraction/ray-logging.md | 2 +- ...easenotes-nv-ingest.md => releasenotes.md} | 22 ++--- docs/docs/extraction/reranking.md | 2 +- docs/docs/extraction/resources-links.md | 2 +- docs/docs/extraction/scaling-modes.md | 10 +- .../extraction/self-host-nims-when-to-use.md | 2 +- .../extraction/semantic-hybrid-retrieval.md | 2 +- docs/docs/extraction/support-matrix.md | 4 +- docs/docs/extraction/supported-file-types.md | 2 +- docs/docs/extraction/telemetry.md | 2 +- .../docs/extraction/text-layout-extraction.md | 2 +- .../throughput-is-dataset-dependent.md | 2 +- docs/docs/extraction/troubleshoot.md | 2 +- .../docs/extraction/user-defined-functions.md | 18 ++-- docs/docs/extraction/user-defined-stages.md | 2 +- docs/docs/extraction/v2-api-guide.md | 6 +- docs/docs/extraction/vector-db-partners.md | 2 +- docs/docs/extraction/vlm-embed.md | 2 +- .../extraction/workflow-agentic-retrieval.md | 4 +- .../workflow-build-searchable-collection.md | 2 +- .../extraction/workflow-document-ingestion.md | 2 +- .../extraction/workflow-e2e-blueprints.md | 2 +- docs/docs/extraction/workflow-query-rerank.md | 2 +- docs/docs/extraction/workflow-video-ocr.md | 2 +- docs/docs/license.md | 12 +-- 64 files changed, 192 insertions(+), 192 deletions(-) rename docs/docs/extraction/{releasenotes-nv-ingest.md => releasenotes.md} (86%) diff --git a/docs/docs/extraction/agentic-retrieval-concept.md b/docs/docs/extraction/agentic-retrieval-concept.md index 5394dade3..32d4d623a 100644 --- a/docs/docs/extraction/agentic-retrieval-concept.md +++ b/docs/docs/extraction/agentic-retrieval-concept.md @@ -2,7 +2,7 @@ !!! note - NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. + This documentation describes NeMo Retriever Library. Agentic retrieval means **iterative, tool-driven** retrieval: an agent plans steps, issues searches, may refine filters, and optionally reranks until it has enough context to answer. diff --git a/docs/docs/extraction/benchmarking.md b/docs/docs/extraction/benchmarking.md index bc896092e..eae7b7435 100644 --- a/docs/docs/extraction/benchmarking.md +++ b/docs/docs/extraction/benchmarking.md @@ -1,16 +1,16 @@ -# NV-Ingest Integration Testing Framework +# NeMo Retriever Library integration testing framework !!! note - NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. + This documentation describes NeMo Retriever Library. -A configurable, dataset-agnostic testing framework for end-to-end validation of nv-ingest pipelines. This framework uses structured YAML configuration for type safety, validation, and parameter management. +A configurable, dataset-agnostic testing framework for end-to-end validation of NeMo Retriever Library pipelines. This framework uses structured YAML configuration for type safety, validation, and parameter management. ## Dataset Prerequisites -Before you run any benchmarking or evaluation tests, you must first download the benchmark datasets. The three primary datasets used in nv-ingest benchmarking and evaluations include: +Before you run any benchmarking or evaluation tests, you must first download the benchmark datasets. The three primary datasets used in NeMo Retriever Library benchmarking and evaluations include: - **Bo20** - 20 PDFs for quick testing - **Bo767** - 767 PDFs for comprehensive benchmarking @@ -18,7 +18,7 @@ Before you run any benchmarking or evaluation tests, you must first download the ### How to Download the Datasets -Use the [Digital Corpora Download Notebook](https://github.com/NVIDIA/nv-ingest/blob/main/evaluation/digital_corpora_download.ipynb) to download these datasets from the public Digital Corpora source. This notebook provides automated download functions that enable the following: +Use the [Digital Corpora Download Notebook](https://github.com/NVIDIA/NeMo-Retriever/blob/main/evaluation/digital_corpora_download.ipynb) to download these datasets from the public Digital Corpora source. This notebook provides automated download functions that enable the following: - Download PDFs directly from Digital Corpora's public repository. - Support all three dataset sizes (Bo20, Bo767, Bo10k). @@ -34,26 +34,26 @@ Use the [Digital Corpora Download Notebook](https://github.com/NVIDIA/nv-ingest/ Before you use this documentation, you need the following: - Docker and Docker Compose are running -- A Python environment with nv-ingest-client installed +- A Python environment with the NeMo Retriever Library client and harness dependencies installed - The [benchmark datasets are downloaded](#dataset-prerequisites) ### Run Your First Test ```bash -# 1. Navigate to the nv-ingest-harness directory +# 1. Navigate to the tools/harness directory cd tools/harness # 2. Install dependencies uv sync # 3. Run with a pre-configured dataset (assumes services are running) -uv run nv-ingest-harness-run --case=e2e --dataset=bo767 +uv run python -m nv_ingest_harness.cli.run --case=e2e --dataset=bo767 # Or use a custom path that uses the "active" configuration -uv run nv-ingest-harness-run --case=e2e --dataset=/path/to/your/data +uv run python -m nv_ingest_harness.cli.run --case=e2e --dataset=/path/to/your/data # With managed infrastructure (starts/stops services) -uv run nv-ingest-harness-run --case=e2e --dataset=bo767 --managed +uv run python -m nv_ingest_harness.cli.run --case=e2e --dataset=bo767 --managed ``` ## Configuration System @@ -119,7 +119,7 @@ Each dataset includes its path, extraction settings, and recall evaluator in one ```yaml datasets: bo767: - path: /datasets/nv-ingest/bo767 + path: /datasets/nemo-retriever/bo767 extract_text: true extract_tables: true extract_charts: true @@ -128,7 +128,7 @@ datasets: recall_dataset: bo767 # Evaluator for recall testing bo20: - path: /datasets/nv-ingest/bo20 + path: /datasets/nemo-retriever/bo20 extract_text: true extract_tables: true extract_charts: true @@ -137,7 +137,7 @@ datasets: recall_dataset: null # bo20 does not have recall earnings: - path: /datasets/nv-ingest/earnings_consulting + path: /datasets/nemo-retriever/earnings_consulting extract_text: true extract_tables: true extract_charts: true @@ -154,13 +154,13 @@ datasets: **Usage:** ```bash # Single dataset - configs applied automatically -uv run nv-ingest-harness-run --case=e2e --dataset=bo767 +uv run python -m nv_ingest_harness.cli.run --case=e2e --dataset=bo767 # Multiple datasets (sweeping) - each gets its own config -uv run nv-ingest-harness-run --case=e2e --dataset=bo767,earnings,bo20 +uv run python -m nv_ingest_harness.cli.run --case=e2e --dataset=bo767,earnings,bo20 # Custom path still works (uses active section config) -uv run nv-ingest-harness-run --case=e2e --dataset=/custom/path +uv run python -m nv_ingest_harness.cli.run --case=e2e --dataset=/custom/path ``` **Dataset Extraction Settings:** @@ -186,7 +186,7 @@ Example: # YAML active section has api_version: v2 # Dataset bo767 has extract_images: false # Override via environment variable (highest priority) -EXTRACT_IMAGES=true API_VERSION=v1 uv run nv-ingest-harness-run --case=e2e --dataset=bo767 +EXTRACT_IMAGES=true API_VERSION=v1 uv run python -m nv_ingest_harness.cli.run --case=e2e --dataset=bo767 # Result: Uses bo767 path, but extract_images=true (env override) and api_version=v1 (env override) ``` @@ -250,13 +250,13 @@ Configuration is validated on load with helpful error messages. ```bash # Run with default YAML configuration (assumes services are running) -uv run nv-ingest-harness-run --case=e2e --dataset=bo767 +uv run python -m nv_ingest_harness.cli.run --case=e2e --dataset=bo767 # With document-level analysis -uv run nv-ingest-harness-run --case=e2e --dataset=bo767 --doc-analysis +uv run python -m nv_ingest_harness.cli.run --case=e2e --dataset=bo767 --doc-analysis # With managed infrastructure (starts/stops services) -uv run nv-ingest-harness-run --case=e2e --dataset=bo767 --managed +uv run python -m nv_ingest_harness.cli.run --case=e2e --dataset=bo767 --managed ``` ### Dataset Sweeping @@ -265,7 +265,7 @@ Run multiple datasets in a single command - each dataset automatically gets its ```bash # Sweep multiple datasets -uv run nv-ingest-harness-run --case=e2e --dataset=bo767,earnings,bo20 +uv run python -m nv_ingest_harness.cli.run --case=e2e --dataset=bo767,earnings,bo20 # Each dataset runs sequentially with its own: # - Extraction settings (from dataset config) @@ -273,13 +273,13 @@ uv run nv-ingest-harness-run --case=e2e --dataset=bo767,earnings,bo20 # - Results summary at the end # With managed infrastructure (services start once, shared across all datasets) -uv run nv-ingest-harness-run --case=e2e --dataset=bo767,earnings,bo20 --managed +uv run python -m nv_ingest_harness.cli.run --case=e2e --dataset=bo767,earnings,bo20 --managed # E2E+Recall sweep (each dataset ingests then evaluates recall) -uv run nv-ingest-harness-run --case=e2e_recall --dataset=bo767,earnings +uv run python -m nv_ingest_harness.cli.run --case=e2e_recall --dataset=bo767,earnings # Recall-only sweep (evaluates existing collections) -uv run nv-ingest-harness-run --case=recall --dataset=bo767,earnings +uv run python -m nv_ingest_harness.cli.run --case=recall --dataset=bo767,earnings ``` **Sweep Behavior:** @@ -293,10 +293,10 @@ uv run nv-ingest-harness-run --case=recall --dataset=bo767,earnings ```bash # Override via environment (useful for CI/CD) -API_VERSION=v2 EXTRACT_TABLES=false uv run nv-ingest-harness-run --case=e2e +API_VERSION=v2 EXTRACT_TABLES=false uv run python -m nv_ingest_harness.cli.run --case=e2e # Temporary changes without editing YAML -DATASET_DIR=/custom/path uv run nv-ingest-harness-run --case=e2e +DATASET_DIR=/custom/path uv run python -m nv_ingest_harness.cli.run --case=e2e ``` ## Test Scenarios @@ -482,23 +482,23 @@ recall: ```bash # Evaluate existing bo767 collections (no reranker) # recall_dataset automatically set from dataset config -uv run nv-ingest-harness-run --case=recall --dataset=bo767 +uv run python -m nv_ingest_harness.cli.run --case=recall --dataset=bo767 # With reranker only (set reranker_mode in YAML recall section) -uv run nv-ingest-harness-run --case=recall --dataset=bo767 +uv run python -m nv_ingest_harness.cli.run --case=recall --dataset=bo767 # Sweep multiple datasets for recall evaluation -uv run nv-ingest-harness-run --case=recall --dataset=bo767,earnings +uv run python -m nv_ingest_harness.cli.run --case=recall --dataset=bo767,earnings ``` **E2E + Recall (fresh ingestion):** ```bash # Fresh ingestion with recall evaluation # recall_dataset automatically set from dataset config -uv run nv-ingest-harness-run --case=e2e_recall --dataset=bo767 +uv run python -m nv_ingest_harness.cli.run --case=e2e_recall --dataset=bo767 # Sweep multiple datasets (each ingests then evaluates) -uv run nv-ingest-harness-run --case=e2e_recall --dataset=bo767,earnings +uv run python -m nv_ingest_harness.cli.run --case=e2e_recall --dataset=bo767,earnings ``` **Dataset configuration:** @@ -546,7 +546,7 @@ The easiest way to test multiple datasets is using dataset sweeping: ```bash # Test multiple datasets - each gets its native config automatically -uv run nv-ingest-harness-run --case=e2e --dataset=bo767,earnings,bo20 +uv run python -m nv_ingest_harness.cli.run --case=e2e --dataset=bo767,earnings,bo20 # Each dataset runs with its pre-configured extraction settings # Results are organized in separate artifact directories @@ -557,7 +557,7 @@ uv run nv-ingest-harness-run --case=e2e --dataset=bo767,earnings,bo20 To sweep through different parameter values: 1. **Edit** `test_configs.yaml` - Update values in the `active` section -2. **Run** the test: `uv run nv-ingest-harness-run --case=e2e --dataset=` +2. **Run** the test: `uv run python -m nv_ingest_harness.cli.run --case=e2e --dataset=` 3. **Analyze** results in `artifacts/_/` 4. **Repeat** steps 1-3 for next parameter combination @@ -565,18 +565,18 @@ Example parameter sweep workflow: ```bash # Test 1: Baseline V1 vim test_configs.yaml # Set: api_version=v1, extract_tables=true -uv run nv-ingest-harness-run --case=e2e --dataset=bo767 +uv run python -m nv_ingest_harness.cli.run --case=e2e --dataset=bo767 # Test 2: V2 with 32-page splitting vim test_configs.yaml # Set: api_version=v2, pdf_split_page_count=32 -uv run nv-ingest-harness-run --case=e2e --dataset=bo767 +uv run python -m nv_ingest_harness.cli.run --case=e2e --dataset=bo767 # Test 3: V2 with 8-page splitting vim test_configs.yaml # Set: pdf_split_page_count=8 -uv run nv-ingest-harness-run --case=e2e --dataset=bo767 +uv run python -m nv_ingest_harness.cli.run --case=e2e --dataset=bo767 # Test 4: Tables disabled (override via env var) -EXTRACT_TABLES=false uv run nv-ingest-harness-run --case=e2e --dataset=bo767 +EXTRACT_TABLES=false uv run python -m nv_ingest_harness.cli.run --case=e2e --dataset=bo767 ``` **Note**: Each test run creates a new timestamped artifact directory, so you can compare results across sweeps. @@ -586,7 +586,7 @@ EXTRACT_TABLES=false uv run nv-ingest-harness-run --case=e2e --dataset=bo767 ### Attach Mode (Default) ```bash -uv run nv-ingest-harness-run --case=e2e --dataset=bo767 +uv run python -m nv_ingest_harness.cli.run --case=e2e --dataset=bo767 ``` - **Default behavior**: Assumes services are already running @@ -598,7 +598,7 @@ uv run nv-ingest-harness-run --case=e2e --dataset=bo767 ### Managed Mode ```bash -uv run nv-ingest-harness-run --case=e2e --dataset=bo767 --managed +uv run python -m nv_ingest_harness.cli.run --case=e2e --dataset=bo767 --managed ``` - Starts Docker services automatically @@ -610,10 +610,10 @@ uv run nv-ingest-harness-run --case=e2e --dataset=bo767 --managed **Managed mode options:** ```bash # Skip Docker image rebuild (faster startup) -uv run nv-ingest-harness-run --case=e2e --dataset=bo767 --managed --no-build +uv run python -m nv_ingest_harness.cli.run --case=e2e --dataset=bo767 --managed --no-build # Keep services running after test (useful for multi-test scenarios) -uv run nv-ingest-harness-run --case=e2e --dataset=bo767 --managed --keep-up +uv run python -m nv_ingest_harness.cli.run --case=e2e --dataset=bo767 --managed --keep-up ``` ## Artifacts and Logging @@ -641,7 +641,7 @@ tools/harness/artifacts/__UTC/ Enable per-document element breakdown: ```bash -uv run nv-ingest-harness-run --case=e2e --dataset=bo767 --doc-analysis +uv run python -m nv_ingest_harness.cli.run --case=e2e --dataset=bo767 --doc-analysis ``` **Sample Output:** @@ -822,7 +822,7 @@ The framework is dataset-agnostic and supports multiple approaches: **Option 1: Use pre-configured dataset (Recommended)** ```bash # Dataset configs automatically applied -uv run nv-ingest-harness-run --case=e2e --dataset=bo767 +uv run python -m nv_ingest_harness.cli.run --case=e2e --dataset=bo767 ``` **Option 2: Add new dataset to YAML** @@ -837,17 +837,17 @@ datasets: extract_infographics: false recall_dataset: null # or set to evaluator name if applicable ``` -Then use: `uv run nv-ingest-harness-run --case=e2e --dataset=my_dataset` +Then use: `uv run python -m nv_ingest_harness.cli.run --case=e2e --dataset=my_dataset` **Option 3: Use custom path (uses active section config)** ```bash -uv run nv-ingest-harness-run --case=e2e --dataset=/path/to/your/dataset +uv run python -m nv_ingest_harness.cli.run --case=e2e --dataset=/path/to/your/dataset ``` **Option 4: Environment variable override** ```bash # Override specific settings via env vars -EXTRACT_IMAGES=true uv run nv-ingest-harness-run --case=e2e --dataset=bo767 +EXTRACT_IMAGES=true uv run python -m nv_ingest_harness.cli.run --case=e2e --dataset=bo767 ``` **Best Practice**: For repeated testing, add your dataset to the `datasets` section with its native extraction settings. This ensures consistent configuration and enables dataset sweeping. @@ -859,4 +859,4 @@ EXTRACT_IMAGES=true uv run nv-ingest-harness-run --case=e2e --dataset=bo767 - **Docker setup**: Refer to project root README for service management commands - **API documentation**: Refer to `docs/` for API version differences -The framework prioritizes clarity, type safety, and validation to support reliable testing of nv-ingest pipelines. +The framework prioritizes clarity, type safety, and validation to support reliable testing of NeMo Retriever Library pipelines. diff --git a/docs/docs/extraction/choose-your-path.md b/docs/docs/extraction/choose-your-path.md index 1f28b2cdc..f39f4900b 100644 --- a/docs/docs/extraction/choose-your-path.md +++ b/docs/docs/extraction/choose-your-path.md @@ -2,7 +2,7 @@ !!! note - NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. + This documentation describes NeMo Retriever Library. Use this page to pick documentation and deployment options that match your goal. diff --git a/docs/docs/extraction/chunking.md b/docs/docs/extraction/chunking.md index 899a42f63..50d548e10 100644 --- a/docs/docs/extraction/chunking.md +++ b/docs/docs/extraction/chunking.md @@ -2,7 +2,7 @@ !!! note - NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. + This documentation describes NeMo Retriever Library. Splitting, also known as chunking, breaks large documents or text into smaller, manageable sections to improve retrieval efficiency. diff --git a/docs/docs/extraction/cli-reference.md b/docs/docs/extraction/cli-reference.md index 46175a9a4..51164b358 100644 --- a/docs/docs/extraction/cli-reference.md +++ b/docs/docs/extraction/cli-reference.md @@ -2,14 +2,14 @@ !!! note - NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. + This documentation describes NeMo Retriever Library. After you install the Python dependencies, you can use the [NeMo Retriever Library](overview.md) command line interface (CLI). To use the CLI, use the `nemo-retriever` command. !!! note "Command name" - Depending on your installation (NeMo Retriever Library vs. nv-ingest-client), you invoke the CLI by using `nemo-retriever` or `nv-ingest-cli`. Both expose the same options and behavior. The following sections use `nemo-retriever` for consistency with the examples. + Install the NeMo Retriever Library client package, then invoke the CLI with `nemo-retriever`. The examples in this page use that command name. To check the version of the CLI that you have installed, run the following command. @@ -56,7 +56,7 @@ The following table lists all CLI options. | `--collect_profiling_traces` | — | flag | false | No | After the run, fetch Zipkin traces for submitted jobs and write them under `output_directory`. | | `--zipkin_host` | — | string | `localhost` | No | Host for Zipkin API (used when `--collect_profiling_traces` is set). | | `--zipkin_port` | — | int | `9411` | No | Port for Zipkin API. | -| `--version` | — | flag | — | No | Print nv-ingest and nv-ingest-cli versions and exit. | +| `--version` | — | flag | — | No | Print NeMo Retriever Library client and CLI version information and exit. | @@ -113,7 +113,7 @@ Running with `--fail_on_error` causes the process to exit on the first job failu ## Complete --help Output -The following is the standard help output for the CLI (equivalent to `nemo-retriever --help` or `nv-ingest-cli --help`). Use it as a quick reference when you cannot run the command locally. +The following is the standard help output for the CLI (equivalent to `nemo-retriever --help`). Use it as a quick reference when you cannot run the command locally. ```text Usage: nemo-retriever [OPTIONS] diff --git a/docs/docs/extraction/concepts.md b/docs/docs/extraction/concepts.md index a364d2b1b..31e778dec 100644 --- a/docs/docs/extraction/concepts.md +++ b/docs/docs/extraction/concepts.md @@ -2,7 +2,7 @@ !!! note - NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. + This documentation describes NeMo Retriever Library. These terms appear throughout NeMo Retriever Library documentation. diff --git a/docs/docs/extraction/content-metadata.md b/docs/docs/extraction/content-metadata.md index 88f09399e..332f75f1c 100644 --- a/docs/docs/extraction/content-metadata.md +++ b/docs/docs/extraction/content-metadata.md @@ -10,7 +10,7 @@ Metadata can be extracted from a source or content, or generated by using models !!! note - NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. + This documentation describes NeMo Retriever Library. @@ -294,7 +294,7 @@ The following enums are used by this schema: The following is an example JSON representation of metadata. This is an example only, and does not contain the full metadata. -For the full file, refer to the [data folder](https://github.com/NVIDIA/nv-ingest/blob/main/data/multimodal_test.json). +For the full file, refer to the [data folder](https://github.com/NVIDIA/NeMo-Retriever/blob/main/data/multimodal_test.json). ```json { diff --git a/docs/docs/extraction/contributing.md b/docs/docs/extraction/contributing.md index 7c21d42f0..eb4a02e27 100644 --- a/docs/docs/extraction/contributing.md +++ b/docs/docs/extraction/contributing.md @@ -1,9 +1,9 @@ -# Contributing to NV-Ingest +# Contributing to NeMo Retriever Library !!! note - NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. + This documentation describes NeMo Retriever Library. -External contributions to NV-Ingest will be welcome soon, and they are greatly appreciated! -For more information, refer to [Contributing to NV-Ingest](https://github.com/NVIDIA/nv-ingest/blob/main/CONTRIBUTING.md). +External contributions will be welcome soon, and they are greatly appreciated! +For more information, refer to [Contributing to NeMo Retriever](https://github.com/NVIDIA/NeMo-Retriever/blob/main/CONTRIBUTING.md). diff --git a/docs/docs/extraction/custom-metadata.md b/docs/docs/extraction/custom-metadata.md index 930c8001a..51a132d21 100644 --- a/docs/docs/extraction/custom-metadata.md +++ b/docs/docs/extraction/custom-metadata.md @@ -2,7 +2,7 @@ !!! note - NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. + This documentation describes NeMo Retriever Library. You can upload custom metadata for documents during ingestion. @@ -68,7 +68,7 @@ For more information about the `vdb_upload` method, refer to [Upload Data](data- from nv_ingest_client.client import Ingestor hostname="localhost" -collection_name = "nv_ingest_collection" +collection_name = "nemo_retriever_collection" sparse = True ingestor = ( @@ -150,7 +150,7 @@ The following example uses a filter expression to narrow results by department. from nv_ingest_client.util.milvus import nvingest_retrieval hostname="localhost" -collection_name = "nv_ingest_collection" +collection_name = "nemo_retriever_collection" sparse = True top_k = 5 model_name="nvidia/llama-3.2-nv-embedqa-1b-v2" @@ -182,4 +182,4 @@ print(f"{q_results}") ## Related Content - For a notebook that uses the CLI to add custom metadata and filter query results, refer to [metadata_and_filtered_search.ipynb -](https://github.com/NVIDIA/nv-ingest/blob/main/examples/metadata_and_filtered_search.ipynb). +](https://github.com/NVIDIA/NeMo-Retriever/blob/main/examples/metadata_and_filtered_search.ipynb). diff --git a/docs/docs/extraction/data-store.md b/docs/docs/extraction/data-store.md index 2ac5e5d2b..4e714a66b 100644 --- a/docs/docs/extraction/data-store.md +++ b/docs/docs/extraction/data-store.md @@ -4,7 +4,7 @@ Use this documentation to learn how [NeMo Retriever Library](overview.md) handle !!! note - NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. + This documentation describes NeMo Retriever Library. ## Overview @@ -50,7 +50,7 @@ from nv_ingest_client.util.vdb.lancedb import LanceDB vdb = LanceDB( uri="lancedb", # Path to LanceDB database directory - table_name="nv-ingest", # Table name + table_name="nemo-retriever", # Table name index_type="IVF_HNSW_SQ", # Index type (default) hybrid=False, # Enable hybrid search (BM25 FTS + vector) ) @@ -79,10 +79,10 @@ Or via environment variables: ```bash # Switch to Milvus -VDB_BACKEND=milvus uv run nv-ingest-harness-run --case=e2e --dataset=bo767 +VDB_BACKEND=milvus uv run python -m nv_ingest_harness.cli.run --case=e2e --dataset=bo767 # Enable LanceDB hybrid search -HYBRID=true uv run nv-ingest-harness-run --case=e2e --dataset=bo767 +HYBRID=true uv run python -m nv_ingest_harness.cli.run --case=e2e --dataset=bo767 ``` @@ -173,7 +173,7 @@ NeMo Retriever Library does not provide connections to other data sources. NVIDIA makes no claim about accuracy, performance, or functionality of any vector database except Milvus. If you use a different vector database, it's your responsibility to test and maintain it. -For more information, refer to [Build a Custom Vector Database Operator](https://github.com/NVIDIA/nv-ingest/blob/main/examples/building_vdb_operator.ipynb). +For more information, refer to [Build a Custom Vector Database Operator](https://github.com/NVIDIA/NeMo-Retriever/blob/main/examples/building_vdb_operator.ipynb). diff --git a/docs/docs/extraction/embedding-nims-models.md b/docs/docs/extraction/embedding-nims-models.md index 55a17e57d..48410f9d8 100644 --- a/docs/docs/extraction/embedding-nims-models.md +++ b/docs/docs/extraction/embedding-nims-models.md @@ -2,7 +2,7 @@ !!! note - NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. + This documentation describes NeMo Retriever Library. Embeddings turn extracted text and multimodal content into vectors for semantic search. NeMo Retriever Library integrates with NVIDIA NIM microservices for embedding. Model names and compatibility vary by release; refer to the [Support matrix](support-matrix.md) and the [NVIDIA NIM catalog](https://build.nvidia.com/). diff --git a/docs/docs/extraction/environment-config.md b/docs/docs/extraction/environment-config.md index 1f8346bdf..db776e348 100644 --- a/docs/docs/extraction/environment-config.md +++ b/docs/docs/extraction/environment-config.md @@ -5,7 +5,7 @@ You can specify these in your .env file or directly in your environment. !!! note - NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. + This documentation describes NeMo Retriever Library. ## General Environment Variables @@ -17,13 +17,13 @@ You can specify these in your .env file or directly in your environment. | `INGEST_LOG_LEVEL` | - `DEBUG`
- `INFO`
- `WARNING`
- `ERROR`
- `CRITICAL`
| The log level for the ingest service, which controls the verbosity of the logging output. | | `MESSAGE_CLIENT_HOST` | - `redis`
- `localhost`
- `192.168.1.10`
| Specifies the hostname or IP address of the message broker used for communication between services. | | `MESSAGE_CLIENT_PORT` | - `7670`
- `6379`
| Specifies the port number on which the message broker is listening. | -| `MINIO_BUCKET` | `nv-ingest`
| Name of MinIO bucket, used to store image, table, and chart extractions. | +| `MINIO_BUCKET` | `nemo-retriever`
| Name of MinIO bucket, used to store image, table, and chart extractions. | | `NGC_API_KEY` | `nvapi-*************`
| An authorized NGC API key, used to interact with hosted NIMs. To create an NGC key, go to [https://org.ngc.nvidia.com/setup/api-keys](https://org.ngc.nvidia.com/setup/api-keys). | | `NIM_NGC_API_KEY` | — | The key that NIM microservices inside docker containers use to access NGC resources. This is necessary only in some cases when it is different from `NGC_API_KEY`. If this is not specified, `NGC_API_KEY` is used to access NGC resources. | | `OTEL_EXPORTER_OTLP_ENDPOINT` | `http://otel-collector:4317`
| The endpoint for the OpenTelemetry exporter, used for sending telemetry data. | | `REDIS_INGEST_TASK_QUEUE` | `ingest_task_queue`
| The name of the task queue in Redis where tasks are stored and processed. | | `REDIS_POOL_SIZE` | - `50` (default)
- `100`
- `200`
| Maximum Redis connection pool size. Increase for high-concurrency workloads processing many documents in parallel. Default of 50 works well for most deployments. | -| `IMAGE_STORAGE_URI` | `s3://nv-ingest/artifacts/store/images`
| Default fsspec-compatible URI for the `store` task. Supports `s3://`, `file://`, `gs://`, etc. Refer to [Store Extracted Images](python-api-reference.md#store-extracted-images). | +| `IMAGE_STORAGE_URI` | `s3://nemo-retriever/artifacts/store/images`
| Default fsspec-compatible URI for the `store` task. Supports `s3://`, `file://`, `gs://`, etc. Refer to [Store Extracted Images](python-api-reference.md#store-extracted-images). | | `IMAGE_STORAGE_PUBLIC_BASE_URL` | `https://assets.example.com/images`
| Optional HTTP(S) base URL for serving stored images. | diff --git a/docs/docs/extraction/evaluate-on-your-data.md b/docs/docs/extraction/evaluate-on-your-data.md index 213e5b973..edede12fa 100644 --- a/docs/docs/extraction/evaluate-on-your-data.md +++ b/docs/docs/extraction/evaluate-on-your-data.md @@ -2,7 +2,7 @@ !!! note - NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. + This documentation describes NeMo Retriever Library. Retrieval and ingestion performance **depend on your documents**, hardware, and pipeline settings. Use the following when measuring quality and throughput on **your** datasets. diff --git a/docs/docs/extraction/extraction-charts-infographics.md b/docs/docs/extraction/extraction-charts-infographics.md index 45334e5fc..1e2814c70 100644 --- a/docs/docs/extraction/extraction-charts-infographics.md +++ b/docs/docs/extraction/extraction-charts-infographics.md @@ -2,7 +2,7 @@ !!! note - NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. + This documentation describes NeMo Retriever Library. Charts and infographic regions are classified as graphic elements and processed with the corresponding NVIDIA NIM workflows (for example, **yolox-graphic-elements** in current releases). Outputs use the same metadata schema as other extracted objects. diff --git a/docs/docs/extraction/extraction-ocr-scanned.md b/docs/docs/extraction/extraction-ocr-scanned.md index 8f6de170a..21eabb10b 100644 --- a/docs/docs/extraction/extraction-ocr-scanned.md +++ b/docs/docs/extraction/extraction-ocr-scanned.md @@ -2,7 +2,7 @@ !!! note - NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. + This documentation describes NeMo Retriever Library. Scanned PDFs and image-only pages rely on OCR and hybrid paths that combine native text extraction with OCR when needed. For extract methods such as `ocr` and `pdfium_hybrid`, refer to the [Python API reference](python-api-reference.md). diff --git a/docs/docs/extraction/extraction-tables.md b/docs/docs/extraction/extraction-tables.md index 2c381fe44..ec01624ca 100644 --- a/docs/docs/extraction/extraction-tables.md +++ b/docs/docs/extraction/extraction-tables.md @@ -2,7 +2,7 @@ !!! note - NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. + This documentation describes NeMo Retriever Library. NeMo Retriever Library detects tables as structured page elements, processes them through the appropriate NIMs, and exports formats suitable for downstream RAG (including Markdown-oriented representations where configured). Availability depends on pipeline and model configuration; refer to the [Support matrix](support-matrix.md). diff --git a/docs/docs/extraction/faq.md b/docs/docs/extraction/faq.md index 045d6645b..00f8dddc9 100644 --- a/docs/docs/extraction/faq.md +++ b/docs/docs/extraction/faq.md @@ -4,7 +4,7 @@ This documentation contains the Frequently Asked Questions (FAQ) for [NeMo Retri !!! note - NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. + This documentation describes NeMo Retriever Library. @@ -12,8 +12,8 @@ This documentation contains the Frequently Asked Questions (FAQ) for [NeMo Retri You can use the CLI or Python APIs to perform extraction only, and then consume the results. Using the Python API, `results` is a list object with one entry. -For code examples, refer to the Jupyter notebooks [Multimodal RAG with LlamaIndex](https://github.com/NVIDIA/nv-ingest/blob/main/examples/llama_index_multimodal_rag.ipynb) -and [Multimodal RAG with LangChain](https://github.com/NVIDIA/nv-ingest/blob/main/examples/langchain_multimodal_rag.ipynb). +For code examples, refer to the Jupyter notebooks [Multimodal RAG with LlamaIndex](https://github.com/NVIDIA/NeMo-Retriever/blob/main/examples/llama_index_multimodal_rag.ipynb) +and [Multimodal RAG with LangChain](https://github.com/NVIDIA/NeMo-Retriever/blob/main/examples/langchain_multimodal_rag.ipynb). @@ -61,7 +61,7 @@ For production environments, you should use the provided Helm charts. For [libra For advanced scenarios, you might want to use library mode with self-hosted NIM instances. You can set custom endpoints for each NIM. -For examples of `*_ENDPOINT` variables, refer to [nv-ingest/docker-compose.yaml](https://github.com/NVIDIA/nv-ingest/blob/main/docker-compose.yaml). +For examples of `*_ENDPOINT` variables, refer to [docker-compose.yaml](https://github.com/NVIDIA/NeMo-Retriever/blob/main/docker-compose.yaml). diff --git a/docs/docs/extraction/getting-started-about.md b/docs/docs/extraction/getting-started-about.md index c0cca7f16..01f1fe4db 100644 --- a/docs/docs/extraction/getting-started-about.md +++ b/docs/docs/extraction/getting-started-about.md @@ -2,7 +2,7 @@ !!! note - NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. + This documentation describes NeMo Retriever Library. This section walks you from **access and prerequisites** through **first deployment** and **hands-on notebooks**. diff --git a/docs/docs/extraction/helm.md b/docs/docs/extraction/helm.md index 2cc890059..0097b0ac4 100644 --- a/docs/docs/extraction/helm.md +++ b/docs/docs/extraction/helm.md @@ -4,9 +4,9 @@ !!! note - NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. + This documentation describes NeMo Retriever Library. -To deploy [NeMo Retriever Library](overview.md) by using Helm, refer to [NV-Ingest Helm Charts](https://github.com/NVIDIA/NeMo-Retriever/blob/26.03/helm/README.md). +To deploy [NeMo Retriever Library](overview.md) by using Helm, refer to [NeMo Retriever Helm charts](https://github.com/NVIDIA/NeMo-Retriever/blob/26.03/helm/README.md). !!! note "Air-gapped environments" diff --git a/docs/docs/extraction/hosted-nims-when-to-use.md b/docs/docs/extraction/hosted-nims-when-to-use.md index 93843c07a..02e1a249d 100644 --- a/docs/docs/extraction/hosted-nims-when-to-use.md +++ b/docs/docs/extraction/hosted-nims-when-to-use.md @@ -2,7 +2,7 @@ !!! note - NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. + This documentation describes NeMo Retriever Library. [NVIDIA-hosted NIMs](https://build.nvidia.com/) run inference on NVIDIA-managed infrastructure. You call models with API keys (refer to [Get your API key](ngc-api-key.md)) without operating GPU nodes yourself. diff --git a/docs/docs/extraction/how-to-use-this-documentation.md b/docs/docs/extraction/how-to-use-this-documentation.md index 438b6cfa0..889584aa7 100644 --- a/docs/docs/extraction/how-to-use-this-documentation.md +++ b/docs/docs/extraction/how-to-use-this-documentation.md @@ -2,7 +2,7 @@ !!! note - NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. + This documentation describes NeMo Retriever Library. Use the sections below as a reading order that matches how you run NeMo Retriever Library. @@ -24,4 +24,4 @@ For solution-level patterns, read [End-to-end RAG with NVIDIA Blueprints](resour The following pages supplement this overview: - [About getting started](getting-started-about.md), for a step-by-step first deployment -- [Release notes](releasenotes-nv-ingest.md) +- [Release notes](releasenotes.md) diff --git a/docs/docs/extraction/image-captioning.md b/docs/docs/extraction/image-captioning.md index 7263e1e83..2ab11998f 100644 --- a/docs/docs/extraction/image-captioning.md +++ b/docs/docs/extraction/image-captioning.md @@ -2,7 +2,7 @@ !!! note - NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. + This documentation describes NeMo Retriever Library. Image captioning generates natural-language descriptions for unstructured image content. Retrieval can then use text embeddings over captions and visual embeddings where you configure them. diff --git a/docs/docs/extraction/integrations-langchain-llamaindex-haystack.md b/docs/docs/extraction/integrations-langchain-llamaindex-haystack.md index b12d0d837..1f5f7dd8b 100644 --- a/docs/docs/extraction/integrations-langchain-llamaindex-haystack.md +++ b/docs/docs/extraction/integrations-langchain-llamaindex-haystack.md @@ -2,7 +2,7 @@ !!! note - NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. + This documentation describes NeMo Retriever Library. NeMo Retriever Library is commonly used **behind** retrieval-augmented generation (RAG) apps built with popular orchestration frameworks. @@ -11,14 +11,14 @@ NeMo Retriever Library is commonly used **behind** retrieval-augmented generatio The repository includes notebooks that demonstrate multimodal RAG patterns: -- [Multimodal RAG with LangChain](https://github.com/NVIDIA/nv-ingest/blob/main/examples/langchain_multimodal_rag.ipynb) -- [Multimodal RAG with LlamaIndex](https://github.com/NVIDIA/nv-ingest/blob/main/examples/llama_index_multimodal_rag.ipynb) +- [Multimodal RAG with LangChain](https://github.com/NVIDIA/NeMo-Retriever/blob/main/examples/langchain_multimodal_rag.ipynb) +- [Multimodal RAG with LlamaIndex](https://github.com/NVIDIA/NeMo-Retriever/blob/main/examples/llama_index_multimodal_rag.ipynb) These are also linked from [Jupyter Notebooks](notebooks.md) and the [FAQ](faq.md). ## Haystack -Haystack-related extraction modes may appear in API tables as **deprecated** in favor of current pipeline options. For up-to-date integration patterns, prefer the Python API and CLI docs, and check [Release notes](releasenotes-nv-ingest.md) for migration notes. +Haystack-related extraction modes may appear in API tables as **deprecated** in favor of current pipeline options. For up-to-date integration patterns, prefer the Python API and CLI docs, and check [Release notes](releasenotes.md) for migration notes. ## Related diff --git a/docs/docs/extraction/key-features.md b/docs/docs/extraction/key-features.md index 51fd07605..14911dfb8 100644 --- a/docs/docs/extraction/key-features.md +++ b/docs/docs/extraction/key-features.md @@ -2,7 +2,7 @@ !!! note - NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. + This documentation describes NeMo Retriever Library. NeMo Retriever Library is built for **accuracy**, **throughput**, and **flexible deployment** in enterprise retrieval pipelines. diff --git a/docs/docs/extraction/multimodal-metadata-schema.md b/docs/docs/extraction/multimodal-metadata-schema.md index 66c01b4da..fd68ff7af 100644 --- a/docs/docs/extraction/multimodal-metadata-schema.md +++ b/docs/docs/extraction/multimodal-metadata-schema.md @@ -2,7 +2,7 @@ !!! note - NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. + This documentation describes NeMo Retriever Library. Extracted objects follow the schema and field descriptions in the [Metadata reference](content-metadata.md). Use that page for tables, types, and per-field notes. diff --git a/docs/docs/extraction/nemo-retriever-api-reference.md b/docs/docs/extraction/nemo-retriever-api-reference.md index c8bbaceab..de30da043 100644 --- a/docs/docs/extraction/nemo-retriever-api-reference.md +++ b/docs/docs/extraction/nemo-retriever-api-reference.md @@ -2,7 +2,7 @@ !!! note - NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. + This documentation describes NeMo Retriever Library. ::: nemo_retriever.ingestor diff --git a/docs/docs/extraction/nemoretriever-parse.md b/docs/docs/extraction/nemoretriever-parse.md index fffd356d1..5b5da7b8e 100644 --- a/docs/docs/extraction/nemoretriever-parse.md +++ b/docs/docs/extraction/nemoretriever-parse.md @@ -2,7 +2,7 @@ !!! note - NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. + This documentation describes NeMo Retriever Library. For scanned documents, or documents with complex layouts, diff --git a/docs/docs/extraction/ngc-api-key.md b/docs/docs/extraction/ngc-api-key.md index 2c2061b7b..9ff911149 100644 --- a/docs/docs/extraction/ngc-api-key.md +++ b/docs/docs/extraction/ngc-api-key.md @@ -2,7 +2,7 @@ !!! note - NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. + This documentation describes NeMo Retriever Library. NGC contains many public images, models, and datasets that can be pulled immediately without authentication. diff --git a/docs/docs/extraction/nimclient.md b/docs/docs/extraction/nimclient.md index ca910a36b..59044cc23 100644 --- a/docs/docs/extraction/nimclient.md +++ b/docs/docs/extraction/nimclient.md @@ -5,7 +5,7 @@ This documentation demonstrates how to create custom NIM integrations for use in !!! note - NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. + This documentation describes NeMo Retriever Library. The NimClient architecture consists of two main components: diff --git a/docs/docs/extraction/notebooks.md b/docs/docs/extraction/notebooks.md index 842a2e341..36a92b25f 100644 --- a/docs/docs/extraction/notebooks.md +++ b/docs/docs/extraction/notebooks.md @@ -2,7 +2,7 @@ !!! note - NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. + This documentation describes NeMo Retriever Library. To get started using [NeMo Retriever Library](overview.md), you can try one of the ready-made notebooks that are available. diff --git a/docs/docs/extraction/nv-ingest-python-api.md b/docs/docs/extraction/nv-ingest-python-api.md index f0c5092ba..d7167d7ec 100644 --- a/docs/docs/extraction/nv-ingest-python-api.md +++ b/docs/docs/extraction/nv-ingest-python-api.md @@ -4,11 +4,11 @@ The [NeMo Retriever Library](overview.md) Python API provides a simple and flexi !!! note - NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. + This documentation describes NeMo Retriever Library. !!! tip - There is a Jupyter notebook available to help you get started with the Python API. For more information, refer to [Python Client Quick Start Guide](https://github.com/NVIDIA/nv-ingest/blob/main/client/client_examples/examples/python_client_usage.ipynb). + There is a Jupyter notebook available to help you get started with the Python API. For more information, refer to [Python Client Quick Start Guide](https://github.com/NVIDIA/NeMo-Retriever/blob/main/client/client_examples/examples/python_client_usage.ipynb). ## Summary of Key Methods @@ -478,11 +478,11 @@ The `store` task uses [fsspec](https://filesystem-spec.readthedocs.io/) for stor | Amazon S3 | `s3://` | `s3://my-bucket/extracted-images` | | Google Cloud Storage | `gs://` | `gs://my-bucket/images` | | Azure Blob Storage | `abfs://` | `abfs://container@account.dfs.core.windows.net/images` | -| MinIO (S3-compatible) | `s3://` | `s3://nv-ingest/artifacts/store/images` (default) | +| MinIO (S3-compatible) | `s3://` | `s3://nemo-retriever/artifacts/store/images` (default) | !!! tip - `storage_uri` defaults to the server-side `IMAGE_STORAGE_URI` environment variable (commonly `s3://nv-ingest/...`). If you change that variable—for example to a host-mounted `file://` path—restart the runtime so the container picks up the new value. + `storage_uri` defaults to the server-side `IMAGE_STORAGE_URI` environment variable (commonly `s3://nemo-retriever/...`). If you change that variable—for example to a host-mounted `file://` path—restart the runtime so the container picks up the new value. When `public_base_url` is provided, the metadata returned from `ingest()` surfaces that HTTP(S) link while still recording the underlying storage URI. Leave it unset when the storage endpoint itself is already publicly reachable. @@ -520,18 +520,18 @@ ingestor = ingestor.store( ```bash # Set DATASET_ROOT before starting services -export DATASET_ROOT=/raid/my-project/nv-ingest-data +export DATASET_ROOT=/raid/my-project/nemo-retriever-data docker compose up -d ``` ```python -# Now /workspace/data maps to /raid/my-project/nv-ingest-data +# Now /workspace/data maps to /raid/my-project/nemo-retriever-data ingestor = ingestor.store( structured=True, images=True, storage_uri="file:///workspace/data/extracted-images" ) -# Files save to /raid/my-project/nv-ingest-data/extracted-images on host +# Files save to /raid/my-project/nemo-retriever-data/extracted-images on host ``` For more information on environment variables, refer to [Environment Variables](environment-config.md). diff --git a/docs/docs/extraction/nv-ingest_cli.md b/docs/docs/extraction/nv-ingest_cli.md index 2b4313a77..12a28d873 100644 --- a/docs/docs/extraction/nv-ingest_cli.md +++ b/docs/docs/extraction/nv-ingest_cli.md @@ -1,38 +1,38 @@ -# Use the NV-Ingest Command Line Interface +# Use the NeMo Retriever Library command line interface !!! note - NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. + This documentation describes NeMo Retriever Library. -After you install the Python dependencies, you can use the [NV-Ingest](overview.md) command line interface (CLI). -To use the CLI, use the `nv-ingest-cli` command. +After you install the Python dependencies, you can use the [NeMo Retriever Library](overview.md) command line interface (CLI). +To use the CLI, use the `nemo-retriever` command. To check the version of the CLI that you have installed, run the following command. ```bash -nv-ingest-cli --version +nemo-retriever --version ``` To get a list of the current CLI commands and their options, run the following command. ```bash -nv-ingest-cli --help +nemo-retriever --help ``` !!! tip - There is a Jupyter notebook available to help you get started with the CLI. For more information, refer to [CLI Client Quick Start Guide](https://github.com/NVIDIA/nv-ingest/blob/main/client/client_examples/examples/cli_client_usage.ipynb). + There is a Jupyter notebook available to help you get started with the CLI. For more information, refer to [CLI Client Quick Start Guide](https://github.com/NVIDIA/NeMo-Retriever/blob/main/client/client_examples/examples/cli_client_usage.ipynb). ## Examples -Use the following code examples to submit a document to the `nv-ingest-ms-runtime` service. +Use the following code examples to submit a document to the **ingestion runtime** service. -Each of the following commands can be run from the host machine, or from within the `nv-ingest-ms-runtime` container. +Each of the following commands can be run from the host machine, or from within the ingestion runtime container. -- Host: `nv-ingest-cli ...` -- Container: `nv-ingest-cli ...` +- Host: `nemo-retriever ...` +- Container: `nemo-retriever ...` ### Example: Text File With No Splitting @@ -44,7 +44,7 @@ To submit a text file with no splitting, run the following code. You receive a response that contains a single document, which is the entire text file. The data that is returned is wrapped in the appropriate [metadata structure](content-metadata.md). ```bash -nv-ingest-cli \ +nemo-retriever \ --doc ./data/test.pdf \ --client_host=localhost \ --client_port=7670 @@ -56,7 +56,7 @@ nv-ingest-cli \ To submit a .pdf file with only a splitting task, run the following code. ```bash -nv-ingest-cli \ +nemo-retriever \ --doc ./data/test.pdf \ --output_directory ./processed_docs \ --task='split' \ @@ -73,7 +73,7 @@ To submit a .pdf file with both a splitting task and an extraction task, run the Currently, `split` only works for pdfium and nemotron-parse. ```bash -nv-ingest-cli \ +nemo-retriever \ --doc ./data/test.pdf \ --output_directory ./processed_docs \ --task='extract:{"document_type": "pdf", "extract_method": "pdfium"}' \ @@ -96,7 +96,7 @@ This allows you to control how many pages are included in each PDF chunk during Smaller chunks provide more parallelism but increase overhead, while larger chunks reduce overhead but limit concurrency. ```bash -nv-ingest-cli \ +nemo-retriever \ --doc ./data/test.pdf \ --output_directory ./processed_docs \ --task='extract:{"document_type": "pdf", "extract_method": "pdfium", "extract_text": "true"}' \ @@ -111,7 +111,7 @@ nv-ingest-cli \ To invoke image captioning and control reasoning: ```bash -nv-ingest-cli \ +nemo-retriever \ --doc ./data/test.pdf \ --task='extract:{"document_type": "pdf", "extract_method": "pdfium", "extract_images": "true"}' \ --task='caption:{"prompt": "Caption the content of this image:", "reasoning": true}' \ @@ -131,7 +131,7 @@ Alternatively, you can use an environment variable to set the API version: ```bash export NV_INGEST_API_VERSION=v2 -nv-ingest-cli \ +nemo-retriever \ --doc ./data/test.pdf \ --output_directory ./processed_docs \ --task='extract:{"document_type": "pdf", "extract_method": "pdfium", "extract_text": "true"}' \ @@ -147,7 +147,7 @@ To submit a dataset for processing, run the following code. To create a dataset, refer to [Command Line Dataset Creation with Enumeration and Sampling](#command-line-dataset-creation-with-enumeration-and-sampling). ```shell -nv-ingest-cli \ +nemo-retriever \ --dataset dataset.json \ --output_directory ./processed_docs \ --task='extract:{"document_type": "pdf", "extract_method": "pdfium"}' \ @@ -159,7 +159,7 @@ nv-ingest-cli \ Submit a PDF file with extraction tasks and upload extracted images to MinIO. ```bash -nv-ingest-cli \ +nemo-retriever \ --doc ./data/test.pdf \ --output_directory ./processed_docs \ --task='extract:{"document_type": "pdf", "extract_method": "pdfium"}' \ diff --git a/docs/docs/extraction/overview.md b/docs/docs/extraction/overview.md index bc2ca6174..8eb8cffea 100644 --- a/docs/docs/extraction/overview.md +++ b/docs/docs/extraction/overview.md @@ -4,7 +4,7 @@ NIVIDIA NeMo Retriever Library (NRL) is a scalable, performance-oriented framewo !!! note - NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. + This documentation describes NeMo Retriever Library. NeMo Retriever Library enables parallelization of splitting documents into pages where artifacts are classified (such as text, tables, charts, and infographics), extracted, and further contextualized through optical character recognition (OCR) into a well defined JSON schema. From there, NeMo Retriever Library can optionally manage computation of embeddings for the extracted content, @@ -12,7 +12,7 @@ and optionally manage storing into a vector database ([LanceDB](https://lancedb. !!! note - Cached and Deplot are deprecated. Instead, NeMo Retriever Library now uses the yolox-graphic-elements NIM. With this change, you should now be able to run NeMo Retriever Library on a single 24GB A10G or better GPU. If you want to use the old pipeline, with Cached and Deplot, use the [NeMo Retriever Library 24.12.1 release](https://github.com/NVIDIA/nv-ingest/tree/24.12.1). + Cached and Deplot are deprecated. Instead, NeMo Retriever Library now uses the yolox-graphic-elements NIM. With this change, you should now be able to run NeMo Retriever Library on a single 24GB A10G or better GPU. If you want to use the old pipeline, with Cached and Deplot, use the [NeMo Retriever Library 24.12.1 release](https://github.com/NVIDIA/NeMo-Retriever/tree/24.12.1). diff --git a/docs/docs/extraction/prerequisites.md b/docs/docs/extraction/prerequisites.md index 43f81bc06..e76c94dea 100644 --- a/docs/docs/extraction/prerequisites.md +++ b/docs/docs/extraction/prerequisites.md @@ -4,7 +4,7 @@ Before you begin using [NeMo Retriever Library](overview.md), ensure the followi !!! note - NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. + This documentation describes NeMo Retriever Library. diff --git a/docs/docs/extraction/production-checklist.md b/docs/docs/extraction/production-checklist.md index 191d2baf6..809d4fc18 100644 --- a/docs/docs/extraction/production-checklist.md +++ b/docs/docs/extraction/production-checklist.md @@ -2,7 +2,7 @@ !!! note - NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. + This documentation describes NeMo Retriever Library. Use this checklist before you run NeMo Retriever Library in production. Pair it with [Troubleshoot](troubleshoot.md) and your internal security review. diff --git a/docs/docs/extraction/published-metrics-comparisons.md b/docs/docs/extraction/published-metrics-comparisons.md index 0bd170e38..2e289ab6e 100644 --- a/docs/docs/extraction/published-metrics-comparisons.md +++ b/docs/docs/extraction/published-metrics-comparisons.md @@ -2,7 +2,7 @@ !!! note - NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. + This documentation describes NeMo Retriever Library. Published scores for parsing and retrieval components (including table-structure metrics such as TEDS where they apply) appear in NVIDIA papers, model cards, and product announcements. Treat published benchmarks as reference points, not guarantees on your own documents. Always [evaluate on your data](evaluate-on-your-data.md). diff --git a/docs/docs/extraction/python-api-reference.md b/docs/docs/extraction/python-api-reference.md index 6853c8968..2911ae3b0 100644 --- a/docs/docs/extraction/python-api-reference.md +++ b/docs/docs/extraction/python-api-reference.md @@ -4,7 +4,7 @@ The [NeMo Retriever Library](overview.md) Python API provides a simple and flexi !!! note - NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. + This documentation describes NeMo Retriever Library. !!! tip @@ -570,11 +570,11 @@ The `store` task uses [fsspec](https://filesystem-spec.readthedocs.io/) for stor | Amazon S3 | `s3://` | `s3://my-bucket/extracted-images` | | Google Cloud Storage | `gs://` | `gs://my-bucket/images` | | Azure Blob Storage | `abfs://` | `abfs://container@account.dfs.core.windows.net/images` | -| MinIO (S3-compatible) | `s3://` | `s3://nv-ingest/artifacts/store/images` (default) | +| MinIO (S3-compatible) | `s3://` | `s3://nemo-retriever/artifacts/store/images` (default) | !!! tip - `storage_uri` defaults to the server-side `IMAGE_STORAGE_URI` environment variable (commonly `s3://nv-ingest/...`). If you change that variable—for example to a host-mounted `file://` path—restart the NeMo Retriever Library runtime so the container picks up the new value. + `storage_uri` defaults to the server-side `IMAGE_STORAGE_URI` environment variable (commonly `s3://nemo-retriever/...`). If you change that variable—for example to a host-mounted `file://` path—restart the NeMo Retriever Library runtime so the container picks up the new value. When `public_base_url` is provided, the metadata returned from `ingest()` surfaces that HTTP(S) link while still recording the underlying storage URI. Leave it unset when the storage endpoint itself is already publicly reachable. diff --git a/docs/docs/extraction/quickstart-guide.md b/docs/docs/extraction/quickstart-guide.md index 6373d052c..f27c065f5 100644 --- a/docs/docs/extraction/quickstart-guide.md +++ b/docs/docs/extraction/quickstart-guide.md @@ -2,7 +2,7 @@ !!! note - NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. + This documentation describes NeMo Retriever Library. This guide helps you get started using [NeMo Retriever Library](overview.md) in self-hosted mode. diff --git a/docs/docs/extraction/quickstart-library-mode.md b/docs/docs/extraction/quickstart-library-mode.md index 8617f8aed..ce932e4a1 100644 --- a/docs/docs/extraction/quickstart-library-mode.md +++ b/docs/docs/extraction/quickstart-library-mode.md @@ -2,7 +2,7 @@ !!! note - NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. + This documentation describes NeMo Retriever Library. Use the [Quick Start for NeMo Retriever Library](https://github.com/NVIDIA/NeMo-Retriever/blob/26.03/nemo_retriever/README.md) to set up and run the NeMo Retriever Library locally, so you can build a GPU‑accelerated, multimodal RAG ingestion pipeline that parses PDFs, HTML, text, audio, and video into LanceDB vector embeddings, integrates with Nemotron RAG models (locally or via NIM endpoints), which includes Ray‑based scaling with built‑in recall evaluation. Python 3.12 or later is required (refer to [Prerequisites](prerequisites.md)). diff --git a/docs/docs/extraction/ray-logging.md b/docs/docs/extraction/ray-logging.md index 27f3b1168..9e4add405 100644 --- a/docs/docs/extraction/ray-logging.md +++ b/docs/docs/extraction/ray-logging.md @@ -2,7 +2,7 @@ !!! note - NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. + This documentation describes NeMo Retriever Library. [NeMo Retriever Library](overview.md) uses [Ray](https://docs.ray.io/en/latest/index.html) for logging. diff --git a/docs/docs/extraction/releasenotes-nv-ingest.md b/docs/docs/extraction/releasenotes.md similarity index 86% rename from docs/docs/extraction/releasenotes-nv-ingest.md rename to docs/docs/extraction/releasenotes.md index d89a3148e..82275fd27 100644 --- a/docs/docs/extraction/releasenotes-nv-ingest.md +++ b/docs/docs/extraction/releasenotes.md @@ -4,7 +4,7 @@ This documentation contains the release notes for [NeMo Retriever Library](overv !!! note - NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. + This documentation describes NeMo Retriever Library. ## 26.03 Release Notes (26.3.0) @@ -14,7 +14,7 @@ To upgrade the Helm charts for this release, refer to the [NeMo Retriever Librar Highlights for the 26.03 release include: -- NV-Ingest GitHub repo renamed to NeMo-Retriever +- Legacy ingestion repository consolidated under NeMo-Retriever - NeMo Retriever Extraction pipeline renamed to NeMo Retriever Library - NeMo Retriever Library now supports two deployment options: - A new no-container, pip-installable in-process library for development (available on PyPI) @@ -35,15 +35,15 @@ Highlights for the 26.03 release include: ## Release Notes for Previous Versions -| [26.1.2](https://docs.nvidia.com/nemo/retriever/26.1.2/extraction/releasenotes-nv-ingest/) -| [26.1.1](https://docs.nvidia.com/nemo/retriever/26.1.1/extraction/releasenotes-nv-ingest/) -| [25.9.0](https://docs.nvidia.com/nemo/retriever/25.9.0/extraction/releasenotes-nv-ingest/) -| [25.6.3](https://docs.nvidia.com/nemo/retriever/25.6.3/extraction/releasenotes-nv-ingest/) -| [25.6.2](https://docs.nvidia.com/nemo/retriever/25.6.2/extraction/releasenotes-nv-ingest/) -| [25.4.2](https://docs.nvidia.com/nemo/retriever/25.4.2/extraction/releasenotes-nv-ingest/) -| [25.3.0](https://docs.nvidia.com/nemo/retriever/25.3.0/extraction/releasenotes-nv-ingest/) -| [24.12.1](https://docs.nvidia.com/nemo/retriever/25.3.0/extraction/releasenotes-nv-ingest/#release-24121) -| [24.12.0](https://docs.nvidia.com/nemo/retriever/25.3.0/extraction/releasenotes-nv-ingest/#release-2412) +| [26.1.2](https://docs.nvidia.com/nemo/retriever/26.1.2/extraction/releasenotes/) +| [26.1.1](https://docs.nvidia.com/nemo/retriever/26.1.1/extraction/releasenotes/) +| [25.9.0](https://docs.nvidia.com/nemo/retriever/25.9.0/extraction/releasenotes/) +| [25.6.3](https://docs.nvidia.com/nemo/retriever/25.6.3/extraction/releasenotes/) +| [25.6.2](https://docs.nvidia.com/nemo/retriever/25.6.2/extraction/releasenotes/) +| [25.4.2](https://docs.nvidia.com/nemo/retriever/25.4.2/extraction/releasenotes/) +| [25.3.0](https://docs.nvidia.com/nemo/retriever/25.3.0/extraction/releasenotes/) +| [24.12.1](https://docs.nvidia.com/nemo/retriever/25.3.0/extraction/releasenotes/#release-24121) +| [24.12.0](https://docs.nvidia.com/nemo/retriever/25.3.0/extraction/releasenotes/#release-2412) ## Related Topics diff --git a/docs/docs/extraction/reranking.md b/docs/docs/extraction/reranking.md index 86d20ffc7..65badf87b 100644 --- a/docs/docs/extraction/reranking.md +++ b/docs/docs/extraction/reranking.md @@ -2,7 +2,7 @@ !!! note - NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. + This documentation describes NeMo Retriever Library. A **reranker** model re-scores the top candidates from initial retrieval so the final top-K better matches the query. NeMo Retriever Library evaluation and deployments can integrate reranker NIMs (refer to the [Support matrix](support-matrix.md) for availability and GPU considerations). diff --git a/docs/docs/extraction/resources-links.md b/docs/docs/extraction/resources-links.md index d2cfb826a..7fc8a80a0 100644 --- a/docs/docs/extraction/resources-links.md +++ b/docs/docs/extraction/resources-links.md @@ -2,7 +2,7 @@ !!! note - NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. + This documentation describes NeMo Retriever Library. External pages for product context, catalogs, and solution blueprints. diff --git a/docs/docs/extraction/scaling-modes.md b/docs/docs/extraction/scaling-modes.md index b9d34cb1a..adfba617e 100644 --- a/docs/docs/extraction/scaling-modes.md +++ b/docs/docs/extraction/scaling-modes.md @@ -7,7 +7,7 @@ This guide covers how resource scaling modes work across stages in [NeMo Retriev !!! note - NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. + This documentation describes NeMo Retriever Library. @@ -18,7 +18,7 @@ This guide covers how resource scaling modes work across stages in [NeMo Retriev ## Configure (docker-compose) -Edit `services > nv-ingest-ms-runtime > environment` in `docker-compose.yaml`. +Edit the **ingestion runtime** service’s `environment` in `docker-compose.yaml` (the service that exposes the NeMo Retriever Library API; in the reference compose file this is the `*-ms-runtime` service for ingestion). ### Select mode @@ -35,7 +35,7 @@ Example (Static): ```yaml services: - nv-ingest-ms-runtime: + ingestion-ms-runtime: environment: - INGEST_DISABLE_DYNAMIC_SCALING=true - INGEST_STATIC_MEMORY_THRESHOLD=0.85 @@ -45,7 +45,7 @@ Example (Dynamic): ```yaml services: - nv-ingest-ms-runtime: + ingestion-ms-runtime: environment: - INGEST_DISABLE_DYNAMIC_SCALING=false - INGEST_DYNAMIC_MEMORY_THRESHOLD=0.80 @@ -91,7 +91,7 @@ services: Open `docker-compose.yaml` and locate: -- `services > nv-ingest-ms-runtime > environment`: +- `services > > environment` (use the runtime service name from your compose file): - `INGEST_DISABLE_DYNAMIC_SCALING` - `INGEST_DYNAMIC_MEMORY_THRESHOLD` - `INGEST_STATIC_MEMORY_THRESHOLD` diff --git a/docs/docs/extraction/self-host-nims-when-to-use.md b/docs/docs/extraction/self-host-nims-when-to-use.md index 0acaba1d7..452f32d49 100644 --- a/docs/docs/extraction/self-host-nims-when-to-use.md +++ b/docs/docs/extraction/self-host-nims-when-to-use.md @@ -2,7 +2,7 @@ !!! note - NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. + This documentation describes NeMo Retriever Library. Self-hosted NIMs run on your GPUs or air-gapped hardware, typically with Kubernetes and the [NIM Operator](https://docs.nvidia.com/nim-operator/latest/index.html). diff --git a/docs/docs/extraction/semantic-hybrid-retrieval.md b/docs/docs/extraction/semantic-hybrid-retrieval.md index 9c55f4543..eae94123a 100644 --- a/docs/docs/extraction/semantic-hybrid-retrieval.md +++ b/docs/docs/extraction/semantic-hybrid-retrieval.md @@ -2,7 +2,7 @@ !!! note - NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. + This documentation describes NeMo Retriever Library. **Semantic retrieval** uses dense embeddings to find content that is similar in meaning to a query. **Hybrid retrieval** combines dense vectors with sparse or lexical signals (for example, BM25-style full-text) and fuses ranked lists for better recall on keyword-heavy queries. diff --git a/docs/docs/extraction/support-matrix.md b/docs/docs/extraction/support-matrix.md index 92898495a..22ef162b9 100644 --- a/docs/docs/extraction/support-matrix.md +++ b/docs/docs/extraction/support-matrix.md @@ -4,7 +4,7 @@ Before you begin using [NeMo Retriever Library](overview.md), ensure that you ha !!! note - NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. + This documentation describes NeMo Retriever Library. ## Core and Advanced Pipeline Features @@ -77,6 +77,6 @@ and run only the embedder, reranker, and your vector database. ## Related Topics - [Prerequisites](prerequisites.md) -- [Release Notes](releasenotes-nv-ingest.md) +- [Release Notes](releasenotes.md) - [NVIDIA NIM for Vision Language Models Support Matrix](https://docs.nvidia.com/nim/vision-language-models/latest/support-matrix.html) - [NVIDIA Speech NIM Microservices](https://docs.nvidia.com/nim/speech/latest/reference/support-matrix/index.html) diff --git a/docs/docs/extraction/supported-file-types.md b/docs/docs/extraction/supported-file-types.md index 729147b7e..3a9dde0f8 100644 --- a/docs/docs/extraction/supported-file-types.md +++ b/docs/docs/extraction/supported-file-types.md @@ -2,7 +2,7 @@ !!! note - NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. + This documentation describes NeMo Retriever Library. NeMo Retriever Library accepts multiple document and media types. A current list (including PDF, Office formats, HTML, images, audio, and video, some early access) appears in [What is NeMo Retriever Library?](overview.md) under supported file types. diff --git a/docs/docs/extraction/telemetry.md b/docs/docs/extraction/telemetry.md index b42c3b6aa..8e2f75063 100644 --- a/docs/docs/extraction/telemetry.md +++ b/docs/docs/extraction/telemetry.md @@ -4,7 +4,7 @@ You can view telemetry data for [NeMo Retriever Library](overview.md). !!! note - NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. + This documentation describes NeMo Retriever Library. ## OpenTelemetry diff --git a/docs/docs/extraction/text-layout-extraction.md b/docs/docs/extraction/text-layout-extraction.md index 7cd7c78c1..173b46521 100644 --- a/docs/docs/extraction/text-layout-extraction.md +++ b/docs/docs/extraction/text-layout-extraction.md @@ -2,7 +2,7 @@ !!! note - NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. + This documentation describes NeMo Retriever Library. For PDFs, NeMo Retriever Library typically uses **pdfium**-based extraction with configurable depth and paths. Scanned or mixed pages may use hybrid or OCR-oriented methods. For `extract_method` options such as `pdfium`, `pdfium_hybrid`, and `ocr`, refer to the [Python API reference](python-api-reference.md). diff --git a/docs/docs/extraction/throughput-is-dataset-dependent.md b/docs/docs/extraction/throughput-is-dataset-dependent.md index 338c8ce1e..dc3349e92 100644 --- a/docs/docs/extraction/throughput-is-dataset-dependent.md +++ b/docs/docs/extraction/throughput-is-dataset-dependent.md @@ -2,7 +2,7 @@ !!! note - NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. + This documentation describes NeMo Retriever Library. A single headline metric can drastically misrepresent system efficiency. diff --git a/docs/docs/extraction/troubleshoot.md b/docs/docs/extraction/troubleshoot.md index a91fdba38..9d7835732 100644 --- a/docs/docs/extraction/troubleshoot.md +++ b/docs/docs/extraction/troubleshoot.md @@ -4,7 +4,7 @@ Use this documentation to troubleshoot issues that arise when you use [NeMo Retr !!! note - NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. + This documentation describes NeMo Retriever Library. ## Can't process long, non-language text strings diff --git a/docs/docs/extraction/user-defined-functions.md b/docs/docs/extraction/user-defined-functions.md index 4dfaa0aec..fb6e5061a 100644 --- a/docs/docs/extraction/user-defined-functions.md +++ b/docs/docs/extraction/user-defined-functions.md @@ -5,7 +5,7 @@ This guide covers how to write, validate, and submit UDFs using both the CLI and !!! note - NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. + This documentation describes NeMo Retriever Library. ## Quickstart @@ -40,7 +40,7 @@ The CLI supports all UDF function specification formats. Here are examples of ea #### Inline Function String ```bash # Submit inline UDF function -nv-ingest-cli \ +nemo-retriever \ --doc /path/to/document.pdf \ --output-directory ./output \ --task 'udf:{"udf_function": "def my_processor(control_message): print(\"Processing...\"); return control_message", "udf_function_name": "my_processor", "target_stage": "text_embedder", "run_before": true}' @@ -49,7 +49,7 @@ nv-ingest-cli \ #### Module Path with Colon (Recommended) ```bash # Submit UDF from importable module (preserves all imports and context) -nv-ingest-cli \ +nemo-retriever \ --doc /path/to/document.pdf \ --output-directory ./output \ --task 'udf:{"udf_function": "my_package.processors:enhance_metadata", "target_stage": "text_embedder", "run_after": true}' @@ -58,7 +58,7 @@ nv-ingest-cli \ #### File Path ```bash # Submit UDF from file path -nv-ingest-cli \ +nemo-retriever \ --doc /path/to/document.pdf \ --output-directory ./output \ --task 'udf:{"udf_function": "my_file.py:my_custom_processor", "target_stage": "text_embedder", "run_before": true}' @@ -67,7 +67,7 @@ nv-ingest-cli \ #### Legacy Import Path (Limited) ```bash # Submit UDF using legacy dot notation (function only, no imports) -nv-ingest-cli \ +nemo-retriever \ --doc /path/to/document.pdf \ --output-directory ./output \ --task 'udf:{"udf_function": "my_package.processors.basic_processor", "target_stage": "text_embedder", "run_after": true}' @@ -310,9 +310,9 @@ UDFs can be executed at different stages of the pipeline by specifying the `targ ```bash # CLI examples for different target stages -nv-ingest-cli --doc file.pdf --task 'udf:{"udf_function": "processor.py:validate_input", "target_stage": "pdf_extractor", "run_before": true}' -nv-ingest-cli --doc file.pdf --task 'udf:{"udf_function": "processor.py:extract_custom", "target_stage": "text_embedder", "run_after": true}' -nv-ingest-cli --doc file.pdf --task 'udf:{"udf_function": "processor.py:enhance_output", "target_stage": "embedding_storage", "run_before": true}' +nemo-retriever --doc file.pdf --task 'udf:{"udf_function": "processor.py:validate_input", "target_stage": "pdf_extractor", "run_before": true}' +nemo-retriever --doc file.pdf --task 'udf:{"udf_function": "processor.py:extract_custom", "target_stage": "text_embedder", "run_after": true}' +nemo-retriever --doc file.pdf --task 'udf:{"udf_function": "processor.py:enhance_output", "target_stage": "embedding_storage", "run_before": true}' ``` ```python @@ -940,6 +940,6 @@ def debug_udf(control_message: IngestControlMessage) -> IngestControlMessage: ## Related Topics -- [NV-Ingest UDF Examples](https://github.com/NVIDIA/nv-ingest/blob/release/26.1.2/examples/udfs/README.md) +- [NeMo Retriever UDF examples](https://github.com/NVIDIA/NeMo-Retriever/blob/release/26.1.2/examples/udfs/README.md) - [User-Defined Stages for NeMo Retriever Library](user-defined-stages.md) - [NimClient Usage](nimclient.md) diff --git a/docs/docs/extraction/user-defined-stages.md b/docs/docs/extraction/user-defined-stages.md index 247a27eb0..4b041f5a3 100644 --- a/docs/docs/extraction/user-defined-stages.md +++ b/docs/docs/extraction/user-defined-stages.md @@ -8,7 +8,7 @@ and operate on a well-defined DataFrame payload and metadata structure. !!! note - NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. + This documentation describes NeMo Retriever Library. To add user-defined stages to your pipeline, you need the following: diff --git a/docs/docs/extraction/v2-api-guide.md b/docs/docs/extraction/v2-api-guide.md index 9ad7a0558..3b7b25643 100644 --- a/docs/docs/extraction/v2-api-guide.md +++ b/docs/docs/extraction/v2-api-guide.md @@ -2,7 +2,7 @@ !!! note - NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. + This documentation describes NeMo Retriever Library. > **TL;DR:** V2 API automatically splits large PDFs into chunks for faster parallel processing. @@ -56,7 +56,7 @@ print(f"Processed {results[0]['metadata']['total_pages']} pages") ### CLI Usage ```bash -nv-ingest-cli \ +nemo-retriever \ --api_version v2 \ --pdf_split_page_count 64 \ --doc large_document.pdf \ @@ -120,7 +120,7 @@ PDF_SPLIT_PAGE_COUNT=64 ```yaml # docker-compose.yaml (already configured) services: - nv-ingest-ms-runtime: + ingestion-ms-runtime: environment: - PDF_SPLIT_PAGE_COUNT=${PDF_SPLIT_PAGE_COUNT:-32} ``` diff --git a/docs/docs/extraction/vector-db-partners.md b/docs/docs/extraction/vector-db-partners.md index a29d88617..1b7899fa8 100644 --- a/docs/docs/extraction/vector-db-partners.md +++ b/docs/docs/extraction/vector-db-partners.md @@ -2,7 +2,7 @@ !!! note - NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. + This documentation describes NeMo Retriever Library. NeMo Retriever Library integrates with vector databases used for RAG collections. Documentation here focuses on stores used in the library and harnesses, such as LanceDB and Milvus, and cuVS where it applies. Refer to [Vector databases](data-store.md) and [Chunking and splitting](chunking.md). diff --git a/docs/docs/extraction/vlm-embed.md b/docs/docs/extraction/vlm-embed.md index a5a91c2dd..941b727ad 100644 --- a/docs/docs/extraction/vlm-embed.md +++ b/docs/docs/extraction/vlm-embed.md @@ -10,7 +10,7 @@ The model supports images that contain text, tables, charts, and infographics. !!! note - NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. + This documentation describes NeMo Retriever Library. ## Configure and Run the Multimodal NIM diff --git a/docs/docs/extraction/workflow-agentic-retrieval.md b/docs/docs/extraction/workflow-agentic-retrieval.md index 2d68b150d..b7aa51021 100644 --- a/docs/docs/extraction/workflow-agentic-retrieval.md +++ b/docs/docs/extraction/workflow-agentic-retrieval.md @@ -2,7 +2,7 @@ !!! note - NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. + This documentation describes NeMo Retriever Library. **Agentic retrieval** describes patterns where a planner or tool-using agent queries retrieval systems in a loop (often combining multiple searches, filters, and rerankers) instead of sending a single static query. @@ -16,4 +16,4 @@ Use these pages together with your orchestration layer: - [Semantic and hybrid retrieval](semantic-hybrid-retrieval.md), [Custom metadata and filtering](custom-metadata.md), and [Reranking](reranking.md) - [Agentic retrieval (concept)](agentic-retrieval-concept.md) - [Benchmarking](benchmarking.md), which includes retrieval evaluation harnesses -- [Release notes](releasenotes-nv-ingest.md), which may mention agentic retrieval updates +- [Release notes](releasenotes.md), which may mention agentic retrieval updates diff --git a/docs/docs/extraction/workflow-build-searchable-collection.md b/docs/docs/extraction/workflow-build-searchable-collection.md index 0de5e6263..0bb409e87 100644 --- a/docs/docs/extraction/workflow-build-searchable-collection.md +++ b/docs/docs/extraction/workflow-build-searchable-collection.md @@ -2,7 +2,7 @@ !!! note - NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. + This documentation describes NeMo Retriever Library. After [document ingestion](workflow-document-ingestion.md), configure [chunking](chunking.md) and your [vector database](data-store.md) so extracted content is embedded, indexed, and ready for search. diff --git a/docs/docs/extraction/workflow-document-ingestion.md b/docs/docs/extraction/workflow-document-ingestion.md index e60041651..55516fe4c 100644 --- a/docs/docs/extraction/workflow-document-ingestion.md +++ b/docs/docs/extraction/workflow-document-ingestion.md @@ -2,7 +2,7 @@ !!! note - NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. + This documentation describes NeMo Retriever Library. **Document ingestion** is the step where NeMo Retriever Library reads your files (PDFs, Office documents, images, and other [supported formats](supported-file-types.md)), runs extraction and optional enrichment, and returns structured content you can chunk, embed, and index. diff --git a/docs/docs/extraction/workflow-e2e-blueprints.md b/docs/docs/extraction/workflow-e2e-blueprints.md index 40be3ed50..aa4d6c0f0 100644 --- a/docs/docs/extraction/workflow-e2e-blueprints.md +++ b/docs/docs/extraction/workflow-e2e-blueprints.md @@ -2,7 +2,7 @@ !!! note - NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. + This documentation describes NeMo Retriever Library. For NVIDIA AI Blueprint links, solution cards, enterprise RAG resources, and related product landing pages, refer to [NVIDIA AI Blueprints and product links](resources-links.md). diff --git a/docs/docs/extraction/workflow-query-rerank.md b/docs/docs/extraction/workflow-query-rerank.md index 232e9411e..9f216c30f 100644 --- a/docs/docs/extraction/workflow-query-rerank.md +++ b/docs/docs/extraction/workflow-query-rerank.md @@ -2,7 +2,7 @@ !!! note - NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. + This documentation describes NeMo Retriever Library. After documents are [ingested](workflow-document-ingestion.md), [chunked](chunking.md), and [indexed](data-store.md), applications run retrieval (semantic and optionally hybrid search) and optional reranking to improve top-K quality. diff --git a/docs/docs/extraction/workflow-video-ocr.md b/docs/docs/extraction/workflow-video-ocr.md index c4f2d6efe..583e9f7bd 100644 --- a/docs/docs/extraction/workflow-video-ocr.md +++ b/docs/docs/extraction/workflow-video-ocr.md @@ -2,7 +2,7 @@ !!! note - NVIDIA Ingest (nv-ingest) has been renamed NeMo Retriever Library. + This documentation describes NeMo Retriever Library. For video assets, NeMo Retriever Library can combine audio or speech processing with visual text extraction when OCR applies to frames or derived images. diff --git a/docs/docs/license.md b/docs/docs/license.md index b50c196ac..8509b7e60 100644 --- a/docs/docs/license.md +++ b/docs/docs/license.md @@ -1,21 +1,21 @@ # License -This page summarizes where to find licensing terms for the nv-ingest project, third-party components, and related NVIDIA software. +This page summarizes where to find licensing terms for the NeMo Retriever project, third-party components, and related NVIDIA software. ## License -The nv-ingest source code and documentation in this repository are licensed under the **Apache License, Version 2.0**, unless otherwise noted. +The NeMo Retriever source code and documentation in this repository are licensed under the **Apache License, Version 2.0**, unless otherwise noted. Reference links to the main license file in the GitHub repository: -- [LICENSE](https://github.com/NVIDIA/nv-ingest/blob/main/LICENSE) (repository file on GitHub) -- [LICENSE (raw text)](https://raw.githubusercontent.com/NVIDIA/nv-ingest/main/LICENSE) (raw view for download or copy) +- [LICENSE](https://github.com/NVIDIA/NeMo-Retriever/blob/main/LICENSE) (repository file on GitHub) +- [LICENSE (raw text)](https://raw.githubusercontent.com/NVIDIA/NeMo-Retriever/main/LICENSE) (raw view for download or copy) ## Third-Party Licenses - **NeMo Retriever:** [Third Party License Notice](https://github.com/NVIDIA/NeMo-Retriever/blob/main/README.md#notices) in the NeMo Retriever README. -The authoritative third-party list for this repository is [THIRD_PARTY_LICENSES.md](https://github.com/NVIDIA/nv-ingest/blob/main/THIRD_PARTY_LICENSES.md). Contents: +The authoritative third-party list for this repository is [THIRD_PARTY_LICENSES.md](https://github.com/NVIDIA/NeMo-Retriever/blob/main/THIRD_PARTY_LICENSES.md). Contents: --8<-- "../THIRD_PARTY_LICENSES.md:3" @@ -25,4 +25,4 @@ The authoritative third-party list for this repository is [THIRD_PARTY_LICENSES. ## Contributing and license compatibility -Contribution guidelines and notes on license compatibility are in **[CONTRIBUTING.md](https://github.com/NVIDIA/nv-ingest/blob/main/CONTRIBUTING.md)** in the repository. +Contribution guidelines and notes on license compatibility are in **[CONTRIBUTING.md](https://github.com/NVIDIA/NeMo-Retriever/blob/main/CONTRIBUTING.md)** in the repository. From 22476ee934954335f18cc84c9f3487f63f0a1285 Mon Sep 17 00:00:00 2001 From: Kurt Heiss Date: Mon, 20 Apr 2026 12:50:25 -0700 Subject: [PATCH 88/94] Update docs/mkdocs.nrl-github-pages.yml Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com> --- docs/mkdocs.nrl-github-pages.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/mkdocs.nrl-github-pages.yml b/docs/mkdocs.nrl-github-pages.yml index 30a574abe..b773cebe9 100644 --- a/docs/mkdocs.nrl-github-pages.yml +++ b/docs/mkdocs.nrl-github-pages.yml @@ -65,7 +65,7 @@ nav: - Key features: extraction/key-features.md - Key concepts: extraction/concepts.md - How to use this documentation: extraction/how-to-use-this-documentation.md - - Release notes: extraction/releasenotes-nv-ingest.md + - Release notes: extraction/releasenotes.md - "2. Get started": - About this section: extraction/getting-started-about.md - Prerequisites: extraction/prerequisites.md From 4e3001ca2d4b6d63e8d098c918d39132c4e7ea97 Mon Sep 17 00:00:00 2001 From: Kurt Heiss Date: Mon, 20 Apr 2026 12:50:57 -0700 Subject: [PATCH 89/94] Update docs/docs/extraction/overview.md Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com> --- docs/docs/extraction/overview.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs/extraction/overview.md b/docs/docs/extraction/overview.md index 8eb8cffea..bf9476657 100644 --- a/docs/docs/extraction/overview.md +++ b/docs/docs/extraction/overview.md @@ -1,6 +1,6 @@ # What is NeMo Retriever Library? -NIVIDIA NeMo Retriever Library (NRL) is a scalable, performance-oriented framework for document content and metadata extraction. It supports both NVIDIA NIM microservices and a wide range of models to find, contextualize, and extract text, tables, charts, and infographics for use in downstream generative and retrieval-augmented applications. +NVIDIA NeMo Retriever Library (NRL) is a scalable, performance-oriented framework for document content and metadata extraction. It supports both NVIDIA NIM microservices and a wide range of models to find, contextualize, and extract text, tables, charts, and infographics for use in downstream generative and retrieval-augmented applications. !!! note From a494070c7014f5581d45de4a00be8c247ca71e2b Mon Sep 17 00:00:00 2001 From: Kurt Heiss Date: Tue, 21 Apr 2026 09:22:35 -0700 Subject: [PATCH 90/94] Updating file for helm removal and reintroduction of docker compose --- docs/docs/extraction/choose-your-path.md | 2 +- docs/docs/extraction/concepts.md | 2 +- docs/docs/extraction/contributing.md | 147 +++++++++++++++++- docs/docs/extraction/getting-started-about.md | 3 +- docs/docs/extraction/helm.md | 13 -- .../how-to-use-this-documentation.md | 2 +- docs/docs/extraction/key-features.md | 2 +- docs/docs/extraction/notebooks.md | 2 +- docs/docs/extraction/overview.md | 2 +- docs/docs/extraction/prerequisites.md | 2 +- docs/docs/extraction/quickstart-guide.md | 2 +- docs/docs/extraction/releasenotes.md | 2 +- .../extraction/self-host-nims-when-to-use.md | 2 +- docs/docs/extraction/troubleshoot.md | 2 +- .../extraction/workflow-document-ingestion.md | 2 +- 15 files changed, 159 insertions(+), 28 deletions(-) delete mode 100644 docs/docs/extraction/helm.md diff --git a/docs/docs/extraction/choose-your-path.md b/docs/docs/extraction/choose-your-path.md index f39f4900b..9db21bc2c 100644 --- a/docs/docs/extraction/choose-your-path.md +++ b/docs/docs/extraction/choose-your-path.md @@ -16,7 +16,7 @@ Use this page to pick documentation and deployment options that match your goal. ## I want a Kubernetes / Helm deployment 1. [Prerequisites](prerequisites.md) -2. [Deploy (Helm Chart)](helm.md) +2. [Deploy (Helm chart)](https://github.com/NVIDIA/NeMo-Retriever/blob/main/helm/README.md) 3. [Environment variables](environment-config.md) and [Troubleshoot](troubleshoot.md) as needed ## I want examples and notebooks diff --git a/docs/docs/extraction/concepts.md b/docs/docs/extraction/concepts.md index 31e778dec..096206227 100644 --- a/docs/docs/extraction/concepts.md +++ b/docs/docs/extraction/concepts.md @@ -26,7 +26,7 @@ Optionally, the library can compute **embeddings** for extracted content and sto ## Deployment modes - **Library mode** — Run without the full container stack where appropriate ([quickstart](quickstart-library-mode.md)). -- **Helm / Kubernetes** — [Helm-based deployment](helm.md) for cluster operations. +- **Helm / Kubernetes** — [Helm-based deployment](https://github.com/NVIDIA/NeMo-Retriever/blob/main/helm/README.md) for cluster operations. - **Notebooks** — [Jupyter examples](notebooks.md) for experimentation and RAG demos. For a concise comparison, refer to [Choose your path](choose-your-path.md). diff --git a/docs/docs/extraction/contributing.md b/docs/docs/extraction/contributing.md index eb4a02e27..5ae47d82d 100644 --- a/docs/docs/extraction/contributing.md +++ b/docs/docs/extraction/contributing.md @@ -4,6 +4,149 @@ This documentation describes NeMo Retriever Library. +External contributions will be welcome soon, and they are greatly appreciated. For repository policy, coding standards, and the contribution process, refer to **[Contributing to NeMo Retriever](https://github.com/NVIDIA/NeMo-Retriever/blob/main/CONTRIBUTING.md)** on GitHub. -External contributions will be welcome soon, and they are greatly appreciated! -For more information, refer to [Contributing to NeMo Retriever](https://github.com/NVIDIA/NeMo-Retriever/blob/main/CONTRIBUTING.md). +The sections below describe how to configure your machine and Git remotes so you can work on documentation (or code) against **[NVIDIA/NeMo-Retriever](https://github.com/NVIDIA/NeMo-Retriever)** using a fork and a separate publishing clone. + +--- + +## Set up your writing and development environment + +### SSH authentication (one time for each computer) + +1. **Create an SSH key** on your computer. Follow steps 1–3 in [Generating a new SSH key and adding it to the ssh-agent](https://docs.github.com/en/authentication/connecting-to-github-with-ssh/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent). (You only need the key-generation steps; you can skip configuring ssh-agent if your organization prefers not to use it.) + +2. **Add the public key to GitHub** using [Adding a new SSH key to your GitHub account](https://docs.github.com/en/authentication/connecting-to-github-with-ssh/adding-a-new-ssh-key-to-your-github-account). + +### Commit signing for GitHub (one time for each computer) + +1. **Create a GPG key** following [Generating a new GPG key](https://docs.github.com/en/authentication/managing-commit-signature-verification/generating-a-new-gpg-key). + +2. **Tell Git which key to use:** + + ```bash + git config --global user.signingkey YOUR_KEY_ID + ``` + +3. **Sign every commit by default (recommended if your org requires signed commits):** + + ```bash + git config --global commit.gpgsign true + ``` + +4. **Optional — sign a single commit:** + + ```bash + git commit -S -m "your message" + ``` + + or + + ```bash + git commit --gpg-sign -m "your message" + ``` + +5. **Optional — skip signing for one commit:** + + ```bash + git commit --no-gpg-sign -m "Unsigned commit" + ``` + +--- + +## Set up your writing and development clone (fork) + +You do day-to-day work in a clone of **your fork**, with `upstream` pointing at NVIDIA’s repo. + +1. **Get access** to **[https://github.com/NVIDIA/NeMo-Retriever](https://github.com/NVIDIA/NeMo-Retriever)** (and permission to fork it, per your organization). + +2. **Create a fork** + + - Open the **Fork** menu, then choose **Create a new fork**. + - Accept the default repository name (`NeMo-Retriever`) unless your org requires another name. + - **Deselect** “Copy the main branch only” if you need other branches locally; you can recover later with `git fetch upstream --tags` (see below). + - Click **Create fork**. + +3. **Clone the fork** onto your machine: + + - Pick a parent folder, for example `C:\_work\NeMo-Retriever-fork` or `C:\_repositories\NeMo-Retriever-fork`. + - Open a terminal in that folder, then clone: + + ```bash + git clone git@github.com:/NeMo-Retriever.git + ``` + + - Enter the repository directory (default folder name is usually `NeMo-Retriever`): + + ```bash + cd NeMo-Retriever + ``` + + - **Add NVIDIA’s repo as `upstream`:** + + ```bash + git remote add upstream https://github.com/NVIDIA/NeMo-Retriever.git + ``` + + - If the fork was created with **only** the default branch, fetch the rest from upstream when needed: + + ```bash + git fetch upstream --tags + ``` + +Confirm remotes: + +```bash +git remote -v +``` + +You should see `origin` pointing at your fork and `upstream` at `NVIDIA/NeMo-Retriever`. + +--- + +## Set up your publishing clone (canonical repo) + +Some workflows use a **second clone** of the **official** repository (not your fork) for publishing or internal automation. + +1. Choose a **different** directory from your fork clone. On Windows, your team may require this clone inside **WSL**; follow internal guidance. + +2. Clone NVIDIA’s repository: + + ```bash + git clone git@github.com:NVIDIA/NeMo-Retriever.git + ``` + +After setup you typically have **two** working copies: one from your fork (with `upstream` configured) and one straight from `NVIDIA/NeMo-Retriever`. + +--- + +## Make a documentation change + +### Target branches + +Decide where the change lands: + +- **`main` only** +- A **release** branch only (for example `release/25.9.0`) +- **Both** `main` and a release branch — commit to `main` first, then [cherry-pick](https://git-scm.com/docs/git-cherry-pick) the commits onto the release branch. + +### Keep your fork and local clone in sync with NVIDIA + +From your **fork** clone, on each branch you care about (example uses `main`; substitute `develop` or a release branch as needed): + +```bash +git checkout main +git fetch upstream +git merge upstream/main +git push origin main +``` + +Use a **space** between the remote name and the branch: `git push origin main`. (`git push origin/main` is invalid and Git will report an error.) + +Repeat `checkout` / `fetch` / `merge` / `push` for every branch you maintain (`main`, `develop`, release branches, and so on). + +--- + +## Related + +- [Contributing to NeMo Retriever](https://github.com/NVIDIA/NeMo-Retriever/blob/main/CONTRIBUTING.md) — authoritative contribution guidelines in the repository diff --git a/docs/docs/extraction/getting-started-about.md b/docs/docs/extraction/getting-started-about.md index 01f1fe4db..6342c4cc6 100644 --- a/docs/docs/extraction/getting-started-about.md +++ b/docs/docs/extraction/getting-started-about.md @@ -13,7 +13,8 @@ Typical order: 2. Confirm [Prerequisites](prerequisites.md) and the [Support matrix](support-matrix.md) for your OS, GPU, and software stack. 3. Deploy using one of: - [Library mode](quickstart-library-mode.md) (without full stack containers where appropriate) - - [Helm Chart](helm.md) for Kubernetes environments + - [Docker Compose (self-hosted)](quickstart-guide.md) for the reference microservices stack in containers + - [Helm chart](https://github.com/NVIDIA/NeMo-Retriever/blob/main/helm/README.md) for Kubernetes environments 4. Explore [Jupyter Notebooks](notebooks.md) for end-to-end examples. If you are new to the product, read [What is NeMo Retriever Library?](overview.md), [Key features](key-features.md), and [Concepts](concepts.md) under **Introduction** first. diff --git a/docs/docs/extraction/helm.md b/docs/docs/extraction/helm.md deleted file mode 100644 index 0097b0ac4..000000000 --- a/docs/docs/extraction/helm.md +++ /dev/null @@ -1,13 +0,0 @@ - - -# Deploy With Helm for NeMo Retriever Library - -!!! note - - This documentation describes NeMo Retriever Library. - -To deploy [NeMo Retriever Library](overview.md) by using Helm, refer to [NeMo Retriever Helm charts](https://github.com/NVIDIA/NeMo-Retriever/blob/26.03/helm/README.md). - -!!! note "Air-gapped environments" - - For deploying in an air-gapped environment, refer to the [NVIDIA NIM Operator documentation on Air-Gapped Environments](https://docs.nvidia.com/nim-operator/latest/air-gap.html), which explains how to deploy NIMs when your cluster has no internet or NGC registry access. diff --git a/docs/docs/extraction/how-to-use-this-documentation.md b/docs/docs/extraction/how-to-use-this-documentation.md index 889584aa7..44b94d579 100644 --- a/docs/docs/extraction/how-to-use-this-documentation.md +++ b/docs/docs/extraction/how-to-use-this-documentation.md @@ -13,7 +13,7 @@ Start with the [Introduction](overview.md), [Concepts](concepts.md), and [Get st ## Microservices, Helm, and production clusters -Follow [Choose your deployment](choose-your-path.md), [Deploy (Helm Chart)](helm.md), [Environment variables](environment-config.md), and the [V2 API guide](v2-api-guide.md). For operations topics, refer to [Scaling modes](scaling-modes.md), [Ray logging](ray-logging.md), [Telemetry](telemetry.md), and [Benchmarking](benchmarking.md). +Follow [Choose your deployment](choose-your-path.md), [Deploy (Helm chart)](https://github.com/NVIDIA/NeMo-Retriever/blob/main/helm/README.md), [Environment variables](environment-config.md), and the [V2 API guide](v2-api-guide.md). For operations topics, refer to [Scaling modes](scaling-modes.md), [Ray logging](ray-logging.md), [Telemetry](telemetry.md), and [Benchmarking](benchmarking.md). ## NVIDIA Blueprints and end-to-end RAG diff --git a/docs/docs/extraction/key-features.md b/docs/docs/extraction/key-features.md index 14911dfb8..fa1d21ec7 100644 --- a/docs/docs/extraction/key-features.md +++ b/docs/docs/extraction/key-features.md @@ -17,7 +17,7 @@ NeMo Retriever Library is built for **accuracy**, **throughput**, and **flexible - **High throughput** — Parallel extraction, embedding, and indexing designed for large document corpora. - **Configurable pipelines** — Jobs are described as JSON; you choose tasks per payload rather than a single fixed pipeline. -- **Deployment options** — [Library mode](quickstart-library-mode.md), [Helm](helm.md), and [notebooks](notebooks.md) for different environments. +- **Deployment options** — [Library mode](quickstart-library-mode.md), [Helm](https://github.com/NVIDIA/NeMo-Retriever/blob/main/helm/README.md), and [notebooks](notebooks.md) for different environments. ## Enterprise-oriented behavior diff --git a/docs/docs/extraction/notebooks.md b/docs/docs/extraction/notebooks.md index 36a92b25f..e839278d6 100644 --- a/docs/docs/extraction/notebooks.md +++ b/docs/docs/extraction/notebooks.md @@ -37,4 +37,4 @@ For more advanced scenarios, try one of the following notebooks: - [Support Matrix](support-matrix.md) - [Deploy Without Containers (Library Mode)](quickstart-library-mode.md) - [Deploy With Docker Compose (Self-Hosted)](quickstart-guide.md) -- [Deploy With Helm](helm.md) +- [Deploy with Helm](https://github.com/NVIDIA/NeMo-Retriever/blob/main/helm/README.md) diff --git a/docs/docs/extraction/overview.md b/docs/docs/extraction/overview.md index bf9476657..c5c418d7f 100644 --- a/docs/docs/extraction/overview.md +++ b/docs/docs/extraction/overview.md @@ -66,6 +66,6 @@ NeMo Retriever Library does not do the following: - [Support Matrix](support-matrix.md) - [Deploy Without Containers (Library Mode)](quickstart-library-mode.md) - [Deploy With Docker Compose (Self-Hosted)](quickstart-guide.md) -- [Deploy With Helm](helm.md) +- [Deploy with Helm](https://github.com/NVIDIA/NeMo-Retriever/blob/main/helm/README.md) - [Notebooks](notebooks.md) - [Enterprise RAG Blueprint](https://build.nvidia.com/nvidia/multimodal-pdf-data-extraction-for-enterprise-rag) diff --git a/docs/docs/extraction/prerequisites.md b/docs/docs/extraction/prerequisites.md index e76c94dea..6fc319635 100644 --- a/docs/docs/extraction/prerequisites.md +++ b/docs/docs/extraction/prerequisites.md @@ -76,4 +76,4 @@ Ensure your deployment environment meets these specifications before running the - [Troubleshooting](troubleshoot.md) - [Deploy Without Containers (Library Mode)](quickstart-library-mode.md) - [Deploy With Docker Compose (Self-Hosted)](quickstart-guide.md) -- [Deploy With Helm](helm.md) +- [Deploy with Helm](https://github.com/NVIDIA/NeMo-Retriever/blob/main/helm/README.md) diff --git a/docs/docs/extraction/quickstart-guide.md b/docs/docs/extraction/quickstart-guide.md index f27c065f5..73907474c 100644 --- a/docs/docs/extraction/quickstart-guide.md +++ b/docs/docs/extraction/quickstart-guide.md @@ -516,6 +516,6 @@ This syntax and structure can be repeated for each NIM model used by CAS, ensuri - [Prerequisites](prerequisites.md) - [Support Matrix](support-matrix.md) - [Deploy Without Containers (Library Mode)](quickstart-library-mode.md) -- [Deploy With Helm](helm.md) +- [Deploy with Helm](https://github.com/NVIDIA/NeMo-Retriever/blob/main/helm/README.md) - [Notebooks](notebooks.md) - [Enterprise RAG Blueprint](https://build.nvidia.com/nvidia/multimodal-pdf-data-extraction-for-enterprise-rag) diff --git a/docs/docs/extraction/releasenotes.md b/docs/docs/extraction/releasenotes.md index 82275fd27..1f26ac85e 100644 --- a/docs/docs/extraction/releasenotes.md +++ b/docs/docs/extraction/releasenotes.md @@ -50,4 +50,4 @@ Highlights for the 26.03 release include: - [Prerequisites](prerequisites.md) - [Deploy Without Containers (Library Mode)](quickstart-library-mode.md) - [Deploy With Docker Compose (Self-Hosted)](quickstart-guide.md) -- [Deploy With Helm](helm.md) +- [Deploy with Helm](https://github.com/NVIDIA/NeMo-Retriever/blob/main/helm/README.md) diff --git a/docs/docs/extraction/self-host-nims-when-to-use.md b/docs/docs/extraction/self-host-nims-when-to-use.md index 452f32d49..5d078c2b2 100644 --- a/docs/docs/extraction/self-host-nims-when-to-use.md +++ b/docs/docs/extraction/self-host-nims-when-to-use.md @@ -17,6 +17,6 @@ Consider self-hosting when: **Related** -- [Deploy (Helm Chart)](helm.md) +- [Deploy (Helm chart)](https://github.com/NVIDIA/NeMo-Retriever/blob/main/helm/README.md) - [Support matrix](support-matrix.md) - [Compare deployment options](choose-your-path.md) diff --git a/docs/docs/extraction/troubleshoot.md b/docs/docs/extraction/troubleshoot.md index 9d7835732..9b65100bb 100644 --- a/docs/docs/extraction/troubleshoot.md +++ b/docs/docs/extraction/troubleshoot.md @@ -133,4 +133,4 @@ ERROR 2025-04-24 22:49:44.434 nimutils.py:68] } - [Prerequisites](prerequisites.md) - [Deploy Without Containers (Library Mode)](quickstart-library-mode.md) - [Deploy With Docker Compose (Self-Hosted)](quickstart-guide.md) -- [Deploy With Helm](helm.md) +- [Deploy with Helm](https://github.com/NVIDIA/NeMo-Retriever/blob/main/helm/README.md) diff --git a/docs/docs/extraction/workflow-document-ingestion.md b/docs/docs/extraction/workflow-document-ingestion.md index 55516fe4c..82f2fd941 100644 --- a/docs/docs/extraction/workflow-document-ingestion.md +++ b/docs/docs/extraction/workflow-document-ingestion.md @@ -9,7 +9,7 @@ Follow these steps: -1. **Choose how you call the library.** Use the [Python API](python-api-reference.md) or [CLI](cli-reference.md) from application code, or run a deployment (for example [Quickstart: NeMo Retriever Library (local)](quickstart-library-mode.md), [Deploy (Docker Compose)](quickstart-guide.md), or [Quickstart: Kubernetes (Helm)](helm.md)) and send jobs over the network. +1. **Choose how you call the library.** Use the [Python API](python-api-reference.md) or [CLI](cli-reference.md) from application code, or run a deployment (for example [Quickstart: NeMo Retriever Library (local)](quickstart-library-mode.md), [Deploy (Docker Compose)](quickstart-guide.md), or [Quickstart: Kubernetes (Helm)](https://github.com/NVIDIA/NeMo-Retriever/blob/main/helm/README.md)) and send jobs over the network. 2. **Use the V2 processing pipeline.** Parallel PDF handling and the default ingest path are described in the [HTTP API (V2)](v2-api-guide.md) and [API guide](nemo-retriever-api-reference.md). Set `message_client_kwargs={"api_version": "v2"}` when using the client if you need to be explicit. 3. **Tune extraction for your content.** Refer to [Multimodal extraction](supported-file-types.md) for formats, [Text and layout extraction](text-layout-extraction.md), [Tables](extraction-tables.md), [OCR](extraction-ocr-scanned.md), and related topics in the navigation. From 34f873cae6c2a87c982a05bc2b30829957cef189 Mon Sep 17 00:00:00 2001 From: Kurt Heiss Date: Tue, 21 Apr 2026 09:44:39 -0700 Subject: [PATCH 91/94] update file per Greptile --- docs/docs/extraction/concepts.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/docs/extraction/concepts.md b/docs/docs/extraction/concepts.md index 096206227..9c79337db 100644 --- a/docs/docs/extraction/concepts.md +++ b/docs/docs/extraction/concepts.md @@ -26,6 +26,7 @@ Optionally, the library can compute **embeddings** for extracted content and sto ## Deployment modes - **Library mode** — Run without the full container stack where appropriate ([quickstart](quickstart-library-mode.md)). +- **Docker Compose (self-hosted)** — [Container stack quickstart](quickstart-guide.md) for running the full microservices pipeline locally. - **Helm / Kubernetes** — [Helm-based deployment](https://github.com/NVIDIA/NeMo-Retriever/blob/main/helm/README.md) for cluster operations. - **Notebooks** — [Jupyter examples](notebooks.md) for experimentation and RAG demos. From daed3bc3739276ab8bc2d6f79389b0dc1f2beeba Mon Sep 17 00:00:00 2001 From: Kurt Heiss Date: Tue, 21 Apr 2026 09:45:32 -0700 Subject: [PATCH 92/94] update file per Greptile review --- docs/docs/extraction/quickstart-guide.md | 14 ++------------ 1 file changed, 2 insertions(+), 12 deletions(-) diff --git a/docs/docs/extraction/quickstart-guide.md b/docs/docs/extraction/quickstart-guide.md index 73907474c..f7c9cb52e 100644 --- a/docs/docs/extraction/quickstart-guide.md +++ b/docs/docs/extraction/quickstart-guide.md @@ -436,17 +436,7 @@ The default [docker-compose.yaml](https://github.com/NVIDIA/NeMo-Retriever/blob/ For RTX Pro 6000 Server Edition and other GPUs with limited VRAM, use the override that best matches your GPU memory (for example, `docker-compose.l40s.yaml` or `docker-compose.a10g.yaml`). -### Example: Using the VLM Profile for Infographic Captioning - -Infographics often combine text, charts, and diagrams into complex visuals. Vision-language model (VLM) captioning generates natural language descriptions that capture this complexity, making the content searchable and more accessible for downstream applications. - -To use VLM captioning for infographics, start NeMo Retriever Library with both the `retrieval` and `vlm` profiles by running the following code. -```shell -docker compose \ - -f docker-compose.yaml \ - --profile retrieval \ - --profile vlm up -``` +For the VLM profile and infographic captioning, see the example under [Profile Information](#profile-information) (add `-f docker-compose..yaml` as needed when using an override file). ### Example with A100 40GB @@ -480,7 +470,7 @@ docker compose \ ## Specify MIG slices for NIM models -When you deploy the pipeline with NIM models on MIG‑enabled GPUs, MIG device slices are requested and scheduled through the `values.yaml` file for the corresponding NIM microservice. For IBM Content-Aware Storage (CAS) deployments, this allows NIM pods to land only on nodes that expose the desired MIG profiles [raw.githubusercontent](https://raw.githubusercontent.com/NVIDIA/NeMo-Retriever/main/helm/README.md). +When you deploy the pipeline with NIM models on MIG‑enabled GPUs, MIG device slices are requested and scheduled through the `values.yaml` file for the corresponding NIM microservice. For IBM Content-Aware Storage (CAS) deployments, this allows NIM pods to land only on nodes that expose the desired MIG profiles (see the [Helm chart README](https://github.com/NVIDIA/NeMo-Retriever/blob/main/helm/README.md)). To target a specific MIG profile—for example, a 3g.20gb slice on an A100, which is a hardware-partitioned virtual GPU instance that gives your workload a fixed mid-sized share of the A100’s compute plus 20 GB of dedicated GPU memory and behaves like a smaller independent GPU—for a given NIM, configure the `resources` and `nodeSelector` under that NIM’s values path in `values.yaml`. From 43934809358cc8a042a372b376b50f3f47793404 Mon Sep 17 00:00:00 2001 From: Kurt Heiss Date: Tue, 21 Apr 2026 12:48:54 -0700 Subject: [PATCH 93/94] Removed superfluous note from all touched files --- docs/docs/extraction/agentic-retrieval-concept.md | 5 ----- docs/docs/extraction/benchmarking.md | 5 ----- docs/docs/extraction/choose-your-path.md | 5 ----- docs/docs/extraction/chunking.md | 5 ----- docs/docs/extraction/cli-reference.md | 5 ----- docs/docs/extraction/concepts.md | 5 ----- docs/docs/extraction/content-metadata.md | 5 ----- docs/docs/extraction/contributing.md | 4 ---- docs/docs/extraction/custom-metadata.md | 5 ----- docs/docs/extraction/data-store.md | 4 ---- docs/docs/extraction/embedding-nims-models.md | 5 ----- docs/docs/extraction/environment-config.md | 4 ---- docs/docs/extraction/evaluate-on-your-data.md | 5 ----- docs/docs/extraction/extraction-charts-infographics.md | 5 ----- docs/docs/extraction/extraction-ocr-scanned.md | 5 ----- docs/docs/extraction/extraction-tables.md | 5 ----- docs/docs/extraction/faq.md | 5 ----- docs/docs/extraction/getting-started-about.md | 5 ----- docs/docs/extraction/hosted-nims-when-to-use.md | 5 ----- docs/docs/extraction/how-to-use-this-documentation.md | 5 ----- docs/docs/extraction/image-captioning.md | 5 ----- .../integrations-langchain-llamaindex-haystack.md | 5 ----- docs/docs/extraction/key-features.md | 5 ----- docs/docs/extraction/multimodal-metadata-schema.md | 5 ----- docs/docs/extraction/nemo-retriever-api-reference.md | 5 ----- docs/docs/extraction/nemoretriever-parse.md | 5 ----- docs/docs/extraction/ngc-api-key.md | 5 ----- docs/docs/extraction/nimclient.md | 3 --- docs/docs/extraction/notebooks.md | 5 ----- docs/docs/extraction/nv-ingest-python-api.md | 3 --- docs/docs/extraction/nv-ingest_cli.md | 5 ----- docs/docs/extraction/overview.md | 3 --- docs/docs/extraction/prerequisites.md | 6 ------ docs/docs/extraction/production-checklist.md | 5 ----- docs/docs/extraction/published-metrics-comparisons.md | 5 ----- docs/docs/extraction/python-api-reference.md | 3 --- docs/docs/extraction/quickstart-guide.md | 5 ----- docs/docs/extraction/quickstart-library-mode.md | 4 ---- docs/docs/extraction/ray-logging.md | 5 ----- docs/docs/extraction/releasenotes.md | 3 --- docs/docs/extraction/reranking.md | 5 ----- docs/docs/extraction/resources-links.md | 5 ----- docs/docs/extraction/scaling-modes.md | 5 ----- docs/docs/extraction/self-host-nims-when-to-use.md | 5 ----- docs/docs/extraction/semantic-hybrid-retrieval.md | 5 ----- docs/docs/extraction/support-matrix.md | 4 ---- docs/docs/extraction/supported-file-types.md | 5 ----- docs/docs/extraction/telemetry.md | 4 ---- docs/docs/extraction/text-layout-extraction.md | 5 ----- docs/docs/extraction/throughput-is-dataset-dependent.md | 5 ----- docs/docs/extraction/troubleshoot.md | 4 ---- docs/docs/extraction/user-defined-functions.md | 4 ---- docs/docs/extraction/user-defined-stages.md | 4 ---- docs/docs/extraction/v2-api-guide.md | 5 ----- docs/docs/extraction/vector-db-partners.md | 5 ----- docs/docs/extraction/vlm-embed.md | 4 ---- docs/docs/extraction/workflow-agentic-retrieval.md | 5 ----- .../docs/extraction/workflow-build-searchable-collection.md | 5 ----- docs/docs/extraction/workflow-document-ingestion.md | 5 ----- docs/docs/extraction/workflow-e2e-blueprints.md | 5 ----- docs/docs/extraction/workflow-query-rerank.md | 5 ----- docs/docs/extraction/workflow-video-ocr.md | 5 ----- 62 files changed, 291 deletions(-) diff --git a/docs/docs/extraction/agentic-retrieval-concept.md b/docs/docs/extraction/agentic-retrieval-concept.md index 32d4d623a..d8b8fac04 100644 --- a/docs/docs/extraction/agentic-retrieval-concept.md +++ b/docs/docs/extraction/agentic-retrieval-concept.md @@ -1,10 +1,5 @@ # Agentic retrieval (concept) -!!! note - - This documentation describes NeMo Retriever Library. - - Agentic retrieval means **iterative, tool-driven** retrieval: an agent plans steps, issues searches, may refine filters, and optionally reranks until it has enough context to answer. NeMo Retriever Library focuses on document ingestion, embeddings, vector stores, hybrid search, and reranking. Orchestration frameworks call these building blocks from your application. diff --git a/docs/docs/extraction/benchmarking.md b/docs/docs/extraction/benchmarking.md index eae7b7435..c3c7d3c30 100644 --- a/docs/docs/extraction/benchmarking.md +++ b/docs/docs/extraction/benchmarking.md @@ -1,10 +1,5 @@ # NeMo Retriever Library integration testing framework -!!! note - - This documentation describes NeMo Retriever Library. - - A configurable, dataset-agnostic testing framework for end-to-end validation of NeMo Retriever Library pipelines. This framework uses structured YAML configuration for type safety, validation, and parameter management. ## Dataset Prerequisites diff --git a/docs/docs/extraction/choose-your-path.md b/docs/docs/extraction/choose-your-path.md index 9db21bc2c..1d02ab367 100644 --- a/docs/docs/extraction/choose-your-path.md +++ b/docs/docs/extraction/choose-your-path.md @@ -1,10 +1,5 @@ # Choose your path -!!! note - - This documentation describes NeMo Retriever Library. - - Use this page to pick documentation and deployment options that match your goal. ## I want to run locally or embed the library diff --git a/docs/docs/extraction/chunking.md b/docs/docs/extraction/chunking.md index 50d548e10..6cdbd1560 100644 --- a/docs/docs/extraction/chunking.md +++ b/docs/docs/extraction/chunking.md @@ -1,10 +1,5 @@ # Split Documents -!!! note - - This documentation describes NeMo Retriever Library. - - Splitting, also known as chunking, breaks large documents or text into smaller, manageable sections to improve retrieval efficiency. After chunking, only the most relevant pieces of information are retrieved for a given query. Chunking also prevents text from exceeding the context window of the embedding model. diff --git a/docs/docs/extraction/cli-reference.md b/docs/docs/extraction/cli-reference.md index 51164b358..ed07d1277 100644 --- a/docs/docs/extraction/cli-reference.md +++ b/docs/docs/extraction/cli-reference.md @@ -1,10 +1,5 @@ # CLI Reference -!!! note - - This documentation describes NeMo Retriever Library. - - After you install the Python dependencies, you can use the [NeMo Retriever Library](overview.md) command line interface (CLI). To use the CLI, use the `nemo-retriever` command. diff --git a/docs/docs/extraction/concepts.md b/docs/docs/extraction/concepts.md index 9c79337db..f2f85e433 100644 --- a/docs/docs/extraction/concepts.md +++ b/docs/docs/extraction/concepts.md @@ -1,10 +1,5 @@ # Concepts -!!! note - - This documentation describes NeMo Retriever Library. - - These terms appear throughout NeMo Retriever Library documentation. ## Job diff --git a/docs/docs/extraction/content-metadata.md b/docs/docs/extraction/content-metadata.md index 332f75f1c..7f549cf51 100644 --- a/docs/docs/extraction/content-metadata.md +++ b/docs/docs/extraction/content-metadata.md @@ -8,11 +8,6 @@ The definitions used in this documentation are the following: Metadata can be extracted from a source or content, or generated by using models, heuristics, or other methods. -!!! note - - This documentation describes NeMo Retriever Library. - - ## Source File Metadata diff --git a/docs/docs/extraction/contributing.md b/docs/docs/extraction/contributing.md index 5ae47d82d..6d018b4c3 100644 --- a/docs/docs/extraction/contributing.md +++ b/docs/docs/extraction/contributing.md @@ -1,9 +1,5 @@ # Contributing to NeMo Retriever Library -!!! note - - This documentation describes NeMo Retriever Library. - External contributions will be welcome soon, and they are greatly appreciated. For repository policy, coding standards, and the contribution process, refer to **[Contributing to NeMo Retriever](https://github.com/NVIDIA/NeMo-Retriever/blob/main/CONTRIBUTING.md)** on GitHub. The sections below describe how to configure your machine and Git remotes so you can work on documentation (or code) against **[NVIDIA/NeMo-Retriever](https://github.com/NVIDIA/NeMo-Retriever)** using a fork and a separate publishing clone. diff --git a/docs/docs/extraction/custom-metadata.md b/docs/docs/extraction/custom-metadata.md index 51a132d21..f2d464445 100644 --- a/docs/docs/extraction/custom-metadata.md +++ b/docs/docs/extraction/custom-metadata.md @@ -1,10 +1,5 @@ # Use Custom Metadata to Filter Search Results -!!! note - - This documentation describes NeMo Retriever Library. - - You can upload custom metadata for documents during ingestion. By uploading custom metadata you can attach additional information to documents, and use it for filtering results during retrieval operations. diff --git a/docs/docs/extraction/data-store.md b/docs/docs/extraction/data-store.md index 4e714a66b..1646ed4d3 100644 --- a/docs/docs/extraction/data-store.md +++ b/docs/docs/extraction/data-store.md @@ -2,10 +2,6 @@ Use this documentation to learn how [NeMo Retriever Library](overview.md) handles and uploads data. -!!! note - - This documentation describes NeMo Retriever Library. - ## Overview diff --git a/docs/docs/extraction/embedding-nims-models.md b/docs/docs/extraction/embedding-nims-models.md index 48410f9d8..949ccc56b 100644 --- a/docs/docs/extraction/embedding-nims-models.md +++ b/docs/docs/extraction/embedding-nims-models.md @@ -1,10 +1,5 @@ # Embedding NIMs and models -!!! note - - This documentation describes NeMo Retriever Library. - - Embeddings turn extracted text and multimodal content into vectors for semantic search. NeMo Retriever Library integrates with NVIDIA NIM microservices for embedding. Model names and compatibility vary by release; refer to the [Support matrix](support-matrix.md) and the [NVIDIA NIM catalog](https://build.nvidia.com/). For multimodal or VLM embeddings, refer to [Multimodal embeddings (VLM)](vlm-embed.md). diff --git a/docs/docs/extraction/environment-config.md b/docs/docs/extraction/environment-config.md index db776e348..4f45008f4 100644 --- a/docs/docs/extraction/environment-config.md +++ b/docs/docs/extraction/environment-config.md @@ -3,10 +3,6 @@ The following are the environment variables that you can use to configure [NeMo Retriever Library](overview.md). You can specify these in your .env file or directly in your environment. -!!! note - - This documentation describes NeMo Retriever Library. - ## General Environment Variables diff --git a/docs/docs/extraction/evaluate-on-your-data.md b/docs/docs/extraction/evaluate-on-your-data.md index edede12fa..34605ed66 100644 --- a/docs/docs/extraction/evaluate-on-your-data.md +++ b/docs/docs/extraction/evaluate-on-your-data.md @@ -1,10 +1,5 @@ # Evaluate on your data -!!! note - - This documentation describes NeMo Retriever Library. - - Retrieval and ingestion performance **depend on your documents**, hardware, and pipeline settings. Use the following when measuring quality and throughput on **your** datasets. ## Benchmarking and baselines diff --git a/docs/docs/extraction/extraction-charts-infographics.md b/docs/docs/extraction/extraction-charts-infographics.md index 1e2814c70..032a0779c 100644 --- a/docs/docs/extraction/extraction-charts-infographics.md +++ b/docs/docs/extraction/extraction-charts-infographics.md @@ -1,10 +1,5 @@ # Charts and infographics -!!! note - - This documentation describes NeMo Retriever Library. - - Charts and infographic regions are classified as graphic elements and processed with the corresponding NVIDIA NIM workflows (for example, **yolox-graphic-elements** in current releases). Outputs use the same metadata schema as other extracted objects. **Related** diff --git a/docs/docs/extraction/extraction-ocr-scanned.md b/docs/docs/extraction/extraction-ocr-scanned.md index 21eabb10b..20333458b 100644 --- a/docs/docs/extraction/extraction-ocr-scanned.md +++ b/docs/docs/extraction/extraction-ocr-scanned.md @@ -1,10 +1,5 @@ # OCR and scanned documents -!!! note - - This documentation describes NeMo Retriever Library. - - Scanned PDFs and image-only pages rely on OCR and hybrid paths that combine native text extraction with OCR when needed. For extract methods such as `ocr` and `pdfium_hybrid`, refer to the [Python API reference](python-api-reference.md). **Related** diff --git a/docs/docs/extraction/extraction-tables.md b/docs/docs/extraction/extraction-tables.md index ec01624ca..32fcd9a08 100644 --- a/docs/docs/extraction/extraction-tables.md +++ b/docs/docs/extraction/extraction-tables.md @@ -1,10 +1,5 @@ # Tables -!!! note - - This documentation describes NeMo Retriever Library. - - NeMo Retriever Library detects tables as structured page elements, processes them through the appropriate NIMs, and exports formats suitable for downstream RAG (including Markdown-oriented representations where configured). Availability depends on pipeline and model configuration; refer to the [Support matrix](support-matrix.md). **Related** diff --git a/docs/docs/extraction/faq.md b/docs/docs/extraction/faq.md index 00f8dddc9..14d42d417 100644 --- a/docs/docs/extraction/faq.md +++ b/docs/docs/extraction/faq.md @@ -2,11 +2,6 @@ This documentation contains the Frequently Asked Questions (FAQ) for [NeMo Retriever Library](overview.md). -!!! note - - This documentation describes NeMo Retriever Library. - - ## What if I already have a retrieval pipeline? Can I just use NeMo Retriever Library? diff --git a/docs/docs/extraction/getting-started-about.md b/docs/docs/extraction/getting-started-about.md index 6342c4cc6..2f0a2a56f 100644 --- a/docs/docs/extraction/getting-started-about.md +++ b/docs/docs/extraction/getting-started-about.md @@ -1,10 +1,5 @@ # About getting started -!!! note - - This documentation describes NeMo Retriever Library. - - This section walks you from **access and prerequisites** through **first deployment** and **hands-on notebooks**. Typical order: diff --git a/docs/docs/extraction/hosted-nims-when-to-use.md b/docs/docs/extraction/hosted-nims-when-to-use.md index 02e1a249d..58a467c49 100644 --- a/docs/docs/extraction/hosted-nims-when-to-use.md +++ b/docs/docs/extraction/hosted-nims-when-to-use.md @@ -1,10 +1,5 @@ # When to use NVIDIA-hosted NIMs -!!! note - - This documentation describes NeMo Retriever Library. - - [NVIDIA-hosted NIMs](https://build.nvidia.com/) run inference on NVIDIA-managed infrastructure. You call models with API keys (refer to [Get your API key](ngc-api-key.md)) without operating GPU nodes yourself. Consider hosted NIMs when: diff --git a/docs/docs/extraction/how-to-use-this-documentation.md b/docs/docs/extraction/how-to-use-this-documentation.md index 44b94d579..7247e87dc 100644 --- a/docs/docs/extraction/how-to-use-this-documentation.md +++ b/docs/docs/extraction/how-to-use-this-documentation.md @@ -1,10 +1,5 @@ # How to use this documentation -!!! note - - This documentation describes NeMo Retriever Library. - - Use the sections below as a reading order that matches how you run NeMo Retriever Library. ## NeMo Retriever Library (local or embedded) diff --git a/docs/docs/extraction/image-captioning.md b/docs/docs/extraction/image-captioning.md index 2ab11998f..33bc087ae 100644 --- a/docs/docs/extraction/image-captioning.md +++ b/docs/docs/extraction/image-captioning.md @@ -1,10 +1,5 @@ # Image captioning -!!! note - - This documentation describes NeMo Retriever Library. - - Image captioning generates natural-language descriptions for unstructured image content. Retrieval can then use text embeddings over captions and visual embeddings where you configure them. **Related** diff --git a/docs/docs/extraction/integrations-langchain-llamaindex-haystack.md b/docs/docs/extraction/integrations-langchain-llamaindex-haystack.md index 1f5f7dd8b..3eb2ea229 100644 --- a/docs/docs/extraction/integrations-langchain-llamaindex-haystack.md +++ b/docs/docs/extraction/integrations-langchain-llamaindex-haystack.md @@ -1,10 +1,5 @@ # Integrate with LangChain, LlamaIndex, and Haystack -!!! note - - This documentation describes NeMo Retriever Library. - - NeMo Retriever Library is commonly used **behind** retrieval-augmented generation (RAG) apps built with popular orchestration frameworks. ## Jupyter examples (LangChain and LlamaIndex) diff --git a/docs/docs/extraction/key-features.md b/docs/docs/extraction/key-features.md index fa1d21ec7..8c0d6c7d7 100644 --- a/docs/docs/extraction/key-features.md +++ b/docs/docs/extraction/key-features.md @@ -1,10 +1,5 @@ # Key features -!!! note - - This documentation describes NeMo Retriever Library. - - NeMo Retriever Library is built for **accuracy**, **throughput**, and **flexible deployment** in enterprise retrieval pipelines. ## Extraction and understanding diff --git a/docs/docs/extraction/multimodal-metadata-schema.md b/docs/docs/extraction/multimodal-metadata-schema.md index fd68ff7af..90a4cd640 100644 --- a/docs/docs/extraction/multimodal-metadata-schema.md +++ b/docs/docs/extraction/multimodal-metadata-schema.md @@ -1,8 +1,3 @@ # Metadata and content schema (multimodal extraction) -!!! note - - This documentation describes NeMo Retriever Library. - - Extracted objects follow the schema and field descriptions in the [Metadata reference](content-metadata.md). Use that page for tables, types, and per-field notes. diff --git a/docs/docs/extraction/nemo-retriever-api-reference.md b/docs/docs/extraction/nemo-retriever-api-reference.md index de30da043..7e4f2c0e0 100644 --- a/docs/docs/extraction/nemo-retriever-api-reference.md +++ b/docs/docs/extraction/nemo-retriever-api-reference.md @@ -1,10 +1,5 @@ # NeMo Retriever API Reference -!!! note - - This documentation describes NeMo Retriever Library. - - ::: nemo_retriever.ingestor ::: nemo_retriever.retriever diff --git a/docs/docs/extraction/nemoretriever-parse.md b/docs/docs/extraction/nemoretriever-parse.md index 5b5da7b8e..23cd5f0d9 100644 --- a/docs/docs/extraction/nemoretriever-parse.md +++ b/docs/docs/extraction/nemoretriever-parse.md @@ -1,10 +1,5 @@ # Advanced Visual Parsing with Nemotron Parse -!!! note - - This documentation describes NeMo Retriever Library. - - For scanned documents, or documents with complex layouts, we recommend that you use [nemotron-parse](https://build.nvidia.com/nvidia/nemotron-parse). Nemotron parse provides higher-accuracy text extraction. diff --git a/docs/docs/extraction/ngc-api-key.md b/docs/docs/extraction/ngc-api-key.md index 9ff911149..8e205aca7 100644 --- a/docs/docs/extraction/ngc-api-key.md +++ b/docs/docs/extraction/ngc-api-key.md @@ -1,10 +1,5 @@ # Generate Your NGC Keys -!!! note - - This documentation describes NeMo Retriever Library. - - NGC contains many public images, models, and datasets that can be pulled immediately without authentication. To push and pull custom images, you must generate a key and authenticate with NGC. diff --git a/docs/docs/extraction/nimclient.md b/docs/docs/extraction/nimclient.md index 59044cc23..a5976f465 100644 --- a/docs/docs/extraction/nimclient.md +++ b/docs/docs/extraction/nimclient.md @@ -3,9 +3,6 @@ The `NimClient` class provides a unified interface for connecting to and interacting with NVIDIA NIM Microservices. This documentation demonstrates how to create custom NIM integrations for use in [NeMo Retriever Library](overview.md) pipelines and User Defined Functions (UDFs). -!!! note - - This documentation describes NeMo Retriever Library. The NimClient architecture consists of two main components: diff --git a/docs/docs/extraction/notebooks.md b/docs/docs/extraction/notebooks.md index e839278d6..90c64a4ff 100644 --- a/docs/docs/extraction/notebooks.md +++ b/docs/docs/extraction/notebooks.md @@ -1,10 +1,5 @@ # Notebooks for NeMo Retriever Library -!!! note - - This documentation describes NeMo Retriever Library. - - To get started using [NeMo Retriever Library](overview.md), you can try one of the ready-made notebooks that are available. ## Dataset Downloads for Benchmarking diff --git a/docs/docs/extraction/nv-ingest-python-api.md b/docs/docs/extraction/nv-ingest-python-api.md index d7167d7ec..7d5df429f 100644 --- a/docs/docs/extraction/nv-ingest-python-api.md +++ b/docs/docs/extraction/nv-ingest-python-api.md @@ -2,9 +2,6 @@ The [NeMo Retriever Library](overview.md) Python API provides a simple and flexible interface for processing and extracting information from various document types, including PDFs. -!!! note - - This documentation describes NeMo Retriever Library. !!! tip diff --git a/docs/docs/extraction/nv-ingest_cli.md b/docs/docs/extraction/nv-ingest_cli.md index 12a28d873..b85a477f8 100644 --- a/docs/docs/extraction/nv-ingest_cli.md +++ b/docs/docs/extraction/nv-ingest_cli.md @@ -1,10 +1,5 @@ # Use the NeMo Retriever Library command line interface -!!! note - - This documentation describes NeMo Retriever Library. - - After you install the Python dependencies, you can use the [NeMo Retriever Library](overview.md) command line interface (CLI). To use the CLI, use the `nemo-retriever` command. diff --git a/docs/docs/extraction/overview.md b/docs/docs/extraction/overview.md index c5c418d7f..3d961da40 100644 --- a/docs/docs/extraction/overview.md +++ b/docs/docs/extraction/overview.md @@ -2,9 +2,6 @@ NVIDIA NeMo Retriever Library (NRL) is a scalable, performance-oriented framework for document content and metadata extraction. It supports both NVIDIA NIM microservices and a wide range of models to find, contextualize, and extract text, tables, charts, and infographics for use in downstream generative and retrieval-augmented applications. -!!! note - - This documentation describes NeMo Retriever Library. NeMo Retriever Library enables parallelization of splitting documents into pages where artifacts are classified (such as text, tables, charts, and infographics), extracted, and further contextualized through optical character recognition (OCR) into a well defined JSON schema. From there, NeMo Retriever Library can optionally manage computation of embeddings for the extracted content, diff --git a/docs/docs/extraction/prerequisites.md b/docs/docs/extraction/prerequisites.md index 6fc319635..35a136a0e 100644 --- a/docs/docs/extraction/prerequisites.md +++ b/docs/docs/extraction/prerequisites.md @@ -2,12 +2,6 @@ Before you begin using [NeMo Retriever Library](overview.md), ensure the following software and hardware prerequisites are met. -!!! note - - This documentation describes NeMo Retriever Library. - - - ## Software Requirements - Linux operating systems (Ubuntu 22.04 or later recommended) diff --git a/docs/docs/extraction/production-checklist.md b/docs/docs/extraction/production-checklist.md index 809d4fc18..7e89500bb 100644 --- a/docs/docs/extraction/production-checklist.md +++ b/docs/docs/extraction/production-checklist.md @@ -1,10 +1,5 @@ # Production checklist -!!! note - - This documentation describes NeMo Retriever Library. - - Use this checklist before you run NeMo Retriever Library in production. Pair it with [Troubleshoot](troubleshoot.md) and your internal security review. **Security and access** diff --git a/docs/docs/extraction/published-metrics-comparisons.md b/docs/docs/extraction/published-metrics-comparisons.md index 2e289ab6e..ff85a0548 100644 --- a/docs/docs/extraction/published-metrics-comparisons.md +++ b/docs/docs/extraction/published-metrics-comparisons.md @@ -1,10 +1,5 @@ # Published metrics and comparisons -!!! note - - This documentation describes NeMo Retriever Library. - - Published scores for parsing and retrieval components (including table-structure metrics such as TEDS where they apply) appear in NVIDIA papers, model cards, and product announcements. Treat published benchmarks as reference points, not guarantees on your own documents. Always [evaluate on your data](evaluate-on-your-data.md). **Starting points** diff --git a/docs/docs/extraction/python-api-reference.md b/docs/docs/extraction/python-api-reference.md index 2911ae3b0..bb21e99f7 100644 --- a/docs/docs/extraction/python-api-reference.md +++ b/docs/docs/extraction/python-api-reference.md @@ -2,9 +2,6 @@ The [NeMo Retriever Library](overview.md) Python API provides a simple and flexible interface for processing and extracting information from various document types, including PDFs. -!!! note - - This documentation describes NeMo Retriever Library. !!! tip diff --git a/docs/docs/extraction/quickstart-guide.md b/docs/docs/extraction/quickstart-guide.md index f7c9cb52e..9b1a3a9b2 100644 --- a/docs/docs/extraction/quickstart-guide.md +++ b/docs/docs/extraction/quickstart-guide.md @@ -1,10 +1,5 @@ # Deploy With Docker Compose (Self-Hosted) for NeMo Retriever Library -!!! note - - This documentation describes NeMo Retriever Library. - - This guide helps you get started using [NeMo Retriever Library](overview.md) in self-hosted mode. diff --git a/docs/docs/extraction/quickstart-library-mode.md b/docs/docs/extraction/quickstart-library-mode.md index ce932e4a1..bda5a4414 100644 --- a/docs/docs/extraction/quickstart-library-mode.md +++ b/docs/docs/extraction/quickstart-library-mode.md @@ -1,9 +1,5 @@ # Deploy Without Containers (Library Mode) for NeMo Retriever Library -!!! note - - This documentation describes NeMo Retriever Library. - Use the [Quick Start for NeMo Retriever Library](https://github.com/NVIDIA/NeMo-Retriever/blob/26.03/nemo_retriever/README.md) to set up and run the NeMo Retriever Library locally, so you can build a GPU‑accelerated, multimodal RAG ingestion pipeline that parses PDFs, HTML, text, audio, and video into LanceDB vector embeddings, integrates with Nemotron RAG models (locally or via NIM endpoints), which includes Ray‑based scaling with built‑in recall evaluation. Python 3.12 or later is required (refer to [Prerequisites](prerequisites.md)). ## `run_pipeline` diff --git a/docs/docs/extraction/ray-logging.md b/docs/docs/extraction/ray-logging.md index 9e4add405..3db3b07ef 100644 --- a/docs/docs/extraction/ray-logging.md +++ b/docs/docs/extraction/ray-logging.md @@ -1,10 +1,5 @@ # Configure Ray Logging -!!! note - - This documentation describes NeMo Retriever Library. - - [NeMo Retriever Library](overview.md) uses [Ray](https://docs.ray.io/en/latest/index.html) for logging. You can use environment variables for fine-grained control over [Ray's logging behavior](https://docs.ray.io/en/latest/ray-observability/user-guides/configure-logging.html). In addition, NeMo Retriever Library provides preset configurations that you can use to quickly update Ray logging behavior. diff --git a/docs/docs/extraction/releasenotes.md b/docs/docs/extraction/releasenotes.md index 1f26ac85e..6aad51833 100644 --- a/docs/docs/extraction/releasenotes.md +++ b/docs/docs/extraction/releasenotes.md @@ -2,9 +2,6 @@ This documentation contains the release notes for [NeMo Retriever Library](overview.md). -!!! note - - This documentation describes NeMo Retriever Library. ## 26.03 Release Notes (26.3.0) diff --git a/docs/docs/extraction/reranking.md b/docs/docs/extraction/reranking.md index 65badf87b..83db53894 100644 --- a/docs/docs/extraction/reranking.md +++ b/docs/docs/extraction/reranking.md @@ -1,10 +1,5 @@ # Reranking -!!! note - - This documentation describes NeMo Retriever Library. - - A **reranker** model re-scores the top candidates from initial retrieval so the final top-K better matches the query. NeMo Retriever Library evaluation and deployments can integrate reranker NIMs (refer to the [Support matrix](support-matrix.md) for availability and GPU considerations). **When to enable reranking** diff --git a/docs/docs/extraction/resources-links.md b/docs/docs/extraction/resources-links.md index 7fc8a80a0..17e21372b 100644 --- a/docs/docs/extraction/resources-links.md +++ b/docs/docs/extraction/resources-links.md @@ -1,10 +1,5 @@ # Resources -!!! note - - This documentation describes NeMo Retriever Library. - - External pages for product context, catalogs, and solution blueprints. ## Product and catalog diff --git a/docs/docs/extraction/scaling-modes.md b/docs/docs/extraction/scaling-modes.md index adfba617e..d0026bcf5 100644 --- a/docs/docs/extraction/scaling-modes.md +++ b/docs/docs/extraction/scaling-modes.md @@ -5,11 +5,6 @@ This guide covers how resource scaling modes work across stages in [NeMo Retriev - **Static scaling**: Each pipeline stage runs a fixed number of replicas based on heuristics (memory-aware). Good for consistent latency; higher steady-state memory usage. - **Dynamic scaling**: Only the source stage is fixed; other stages scale up/down based on observed resource pressure. Better memory efficiency; may briefly pause to spin replicas back up after idle periods. -!!! note - - This documentation describes NeMo Retriever Library. - - ## When to choose which diff --git a/docs/docs/extraction/self-host-nims-when-to-use.md b/docs/docs/extraction/self-host-nims-when-to-use.md index 5d078c2b2..6f6a88265 100644 --- a/docs/docs/extraction/self-host-nims-when-to-use.md +++ b/docs/docs/extraction/self-host-nims-when-to-use.md @@ -1,10 +1,5 @@ # When to self-host NIMs -!!! note - - This documentation describes NeMo Retriever Library. - - Self-hosted NIMs run on your GPUs or air-gapped hardware, typically with Kubernetes and the [NIM Operator](https://docs.nvidia.com/nim-operator/latest/index.html). Consider self-hosting when: diff --git a/docs/docs/extraction/semantic-hybrid-retrieval.md b/docs/docs/extraction/semantic-hybrid-retrieval.md index eae94123a..a02d9f082 100644 --- a/docs/docs/extraction/semantic-hybrid-retrieval.md +++ b/docs/docs/extraction/semantic-hybrid-retrieval.md @@ -1,10 +1,5 @@ # Semantic and hybrid retrieval -!!! note - - This documentation describes NeMo Retriever Library. - - **Semantic retrieval** uses dense embeddings to find content that is similar in meaning to a query. **Hybrid retrieval** combines dense vectors with sparse or lexical signals (for example, BM25-style full-text) and fuses ranked lists for better recall on keyword-heavy queries. In NeMo Retriever Library, use these resources: diff --git a/docs/docs/extraction/support-matrix.md b/docs/docs/extraction/support-matrix.md index 22ef162b9..90876957b 100644 --- a/docs/docs/extraction/support-matrix.md +++ b/docs/docs/extraction/support-matrix.md @@ -2,10 +2,6 @@ Before you begin using [NeMo Retriever Library](overview.md), ensure that you have the hardware for your use case. -!!! note - - This documentation describes NeMo Retriever Library. - ## Core and Advanced Pipeline Features diff --git a/docs/docs/extraction/supported-file-types.md b/docs/docs/extraction/supported-file-types.md index 3a9dde0f8..8eaf87b9a 100644 --- a/docs/docs/extraction/supported-file-types.md +++ b/docs/docs/extraction/supported-file-types.md @@ -1,10 +1,5 @@ # Supported file types and formats -!!! note - - This documentation describes NeMo Retriever Library. - - NeMo Retriever Library accepts multiple document and media types. A current list (including PDF, Office formats, HTML, images, audio, and video, some early access) appears in [What is NeMo Retriever Library?](overview.md) under supported file types. **Related** diff --git a/docs/docs/extraction/telemetry.md b/docs/docs/extraction/telemetry.md index 8e2f75063..645ac9c11 100644 --- a/docs/docs/extraction/telemetry.md +++ b/docs/docs/extraction/telemetry.md @@ -2,10 +2,6 @@ You can view telemetry data for [NeMo Retriever Library](overview.md). -!!! note - - This documentation describes NeMo Retriever Library. - ## OpenTelemetry diff --git a/docs/docs/extraction/text-layout-extraction.md b/docs/docs/extraction/text-layout-extraction.md index 173b46521..3d3cb0926 100644 --- a/docs/docs/extraction/text-layout-extraction.md +++ b/docs/docs/extraction/text-layout-extraction.md @@ -1,10 +1,5 @@ # Text and layout extraction -!!! note - - This documentation describes NeMo Retriever Library. - - For PDFs, NeMo Retriever Library typically uses **pdfium**-based extraction with configurable depth and paths. Scanned or mixed pages may use hybrid or OCR-oriented methods. For `extract_method` options such as `pdfium`, `pdfium_hybrid`, and `ocr`, refer to the [Python API reference](python-api-reference.md). **Related** diff --git a/docs/docs/extraction/throughput-is-dataset-dependent.md b/docs/docs/extraction/throughput-is-dataset-dependent.md index dc3349e92..399d116c8 100644 --- a/docs/docs/extraction/throughput-is-dataset-dependent.md +++ b/docs/docs/extraction/throughput-is-dataset-dependent.md @@ -1,10 +1,5 @@ # Why Throughput Is Dataset-Dependent -!!! note - - This documentation describes NeMo Retriever Library. - - A single headline metric can drastically misrepresent system efficiency. The amount of compute that you need to process a dataset depends far more on its content and how your pipeline operates than on its disk size. This documentation explains why, and offers you better ways to measure and report throughput. diff --git a/docs/docs/extraction/troubleshoot.md b/docs/docs/extraction/troubleshoot.md index 9b65100bb..7304bd16d 100644 --- a/docs/docs/extraction/troubleshoot.md +++ b/docs/docs/extraction/troubleshoot.md @@ -2,10 +2,6 @@ Use this documentation to troubleshoot issues that arise when you use [NeMo Retriever Library](overview.md). -!!! note - - This documentation describes NeMo Retriever Library. - ## Can't process long, non-language text strings diff --git a/docs/docs/extraction/user-defined-functions.md b/docs/docs/extraction/user-defined-functions.md index fb6e5061a..ed105d275 100644 --- a/docs/docs/extraction/user-defined-functions.md +++ b/docs/docs/extraction/user-defined-functions.md @@ -3,10 +3,6 @@ User-Defined Functions (UDFs) allow you to inject custom processing logic into the [NeMo Retriever Library](overview.md) pipeline at specific stages. This guide covers how to write, validate, and submit UDFs using both the CLI and the Python client interface. -!!! note - - This documentation describes NeMo Retriever Library. - ## Quickstart diff --git a/docs/docs/extraction/user-defined-stages.md b/docs/docs/extraction/user-defined-stages.md index 4b041f5a3..bac451386 100644 --- a/docs/docs/extraction/user-defined-stages.md +++ b/docs/docs/extraction/user-defined-stages.md @@ -6,10 +6,6 @@ By following these steps, your Lambda stages are robust, signature-validated, plug-and-play for your RayPipeline, and operate on a well-defined DataFrame payload and metadata structure. -!!! note - - This documentation describes NeMo Retriever Library. - To add user-defined stages to your pipeline, you need the following: diff --git a/docs/docs/extraction/v2-api-guide.md b/docs/docs/extraction/v2-api-guide.md index 3b7b25643..5c45adb13 100644 --- a/docs/docs/extraction/v2-api-guide.md +++ b/docs/docs/extraction/v2-api-guide.md @@ -1,10 +1,5 @@ # NeMo Retriever Library V2 API Guide: PDF Pre Splitting -!!! note - - This documentation describes NeMo Retriever Library. - - > **TL;DR:** V2 API automatically splits large PDFs into chunks for faster parallel processing. > > **Python:** Enable with `message_client_kwargs={"api_version": "v2"}` and configure chunk size with `.pdf_split_config(pages_per_chunk=64)`. diff --git a/docs/docs/extraction/vector-db-partners.md b/docs/docs/extraction/vector-db-partners.md index 1b7899fa8..057122ab8 100644 --- a/docs/docs/extraction/vector-db-partners.md +++ b/docs/docs/extraction/vector-db-partners.md @@ -1,10 +1,5 @@ # Vector database partners -!!! note - - This documentation describes NeMo Retriever Library. - - NeMo Retriever Library integrates with vector databases used for RAG collections. Documentation here focuses on stores used in the library and harnesses, such as LanceDB and Milvus, and cuVS where it applies. Refer to [Vector databases](data-store.md) and [Chunking and splitting](chunking.md). **Related** diff --git a/docs/docs/extraction/vlm-embed.md b/docs/docs/extraction/vlm-embed.md index 941b727ad..fdce43257 100644 --- a/docs/docs/extraction/vlm-embed.md +++ b/docs/docs/extraction/vlm-embed.md @@ -8,10 +8,6 @@ The model can embed documents in the form of an image, text, or a combination of Documents can then be retrieved given a user query in text form. The model supports images that contain text, tables, charts, and infographics. -!!! note - - This documentation describes NeMo Retriever Library. - ## Configure and Run the Multimodal NIM diff --git a/docs/docs/extraction/workflow-agentic-retrieval.md b/docs/docs/extraction/workflow-agentic-retrieval.md index b7aa51021..63ccc1040 100644 --- a/docs/docs/extraction/workflow-agentic-retrieval.md +++ b/docs/docs/extraction/workflow-agentic-retrieval.md @@ -1,10 +1,5 @@ # Workflow: Agentic retrieval -!!! note - - This documentation describes NeMo Retriever Library. - - **Agentic retrieval** describes patterns where a planner or tool-using agent queries retrieval systems in a loop (often combining multiple searches, filters, and rerankers) instead of sending a single static query. NeMo Retriever Library provides ingestion, embedding, storage, and retrieval building blocks (jobs, chunking, vector stores, hybrid search, reranking) that you orchestrate in application code or frameworks. diff --git a/docs/docs/extraction/workflow-build-searchable-collection.md b/docs/docs/extraction/workflow-build-searchable-collection.md index 0bb409e87..9f67ac1ca 100644 --- a/docs/docs/extraction/workflow-build-searchable-collection.md +++ b/docs/docs/extraction/workflow-build-searchable-collection.md @@ -1,10 +1,5 @@ # Workflow: Build a searchable collection -!!! note - - This documentation describes NeMo Retriever Library. - - After [document ingestion](workflow-document-ingestion.md), configure [chunking](chunking.md) and your [vector database](data-store.md) so extracted content is embedded, indexed, and ready for search. Technical detail for storage and chunking is in the **Embedding, indexing, and storage** section of the navigation ([Vector databases](data-store.md), [Chunking and splitting](chunking.md)). diff --git a/docs/docs/extraction/workflow-document-ingestion.md b/docs/docs/extraction/workflow-document-ingestion.md index 82f2fd941..e7cff6ff4 100644 --- a/docs/docs/extraction/workflow-document-ingestion.md +++ b/docs/docs/extraction/workflow-document-ingestion.md @@ -1,10 +1,5 @@ # Workflow: Document ingestion -!!! note - - This documentation describes NeMo Retriever Library. - - **Document ingestion** is the step where NeMo Retriever Library reads your files (PDFs, Office documents, images, and other [supported formats](supported-file-types.md)), runs extraction and optional enrichment, and returns structured content you can chunk, embed, and index. Follow these steps: diff --git a/docs/docs/extraction/workflow-e2e-blueprints.md b/docs/docs/extraction/workflow-e2e-blueprints.md index aa4d6c0f0..9935e7f66 100644 --- a/docs/docs/extraction/workflow-e2e-blueprints.md +++ b/docs/docs/extraction/workflow-e2e-blueprints.md @@ -1,8 +1,3 @@ # Workflow: End-to-end RAG with NVIDIA Blueprints -!!! note - - This documentation describes NeMo Retriever Library. - - For NVIDIA AI Blueprint links, solution cards, enterprise RAG resources, and related product landing pages, refer to [NVIDIA AI Blueprints and product links](resources-links.md). diff --git a/docs/docs/extraction/workflow-query-rerank.md b/docs/docs/extraction/workflow-query-rerank.md index 9f216c30f..7c4a2620b 100644 --- a/docs/docs/extraction/workflow-query-rerank.md +++ b/docs/docs/extraction/workflow-query-rerank.md @@ -1,10 +1,5 @@ # Workflow: Query and rerank -!!! note - - This documentation describes NeMo Retriever Library. - - After documents are [ingested](workflow-document-ingestion.md), [chunked](chunking.md), and [indexed](data-store.md), applications run retrieval (semantic and optionally hybrid search) and optional reranking to improve top-K quality. Follow these steps: diff --git a/docs/docs/extraction/workflow-video-ocr.md b/docs/docs/extraction/workflow-video-ocr.md index 583e9f7bd..92c69e8e9 100644 --- a/docs/docs/extraction/workflow-video-ocr.md +++ b/docs/docs/extraction/workflow-video-ocr.md @@ -1,10 +1,5 @@ # Workflow: Video processing with OCR -!!! note - - This documentation describes NeMo Retriever Library. - - For video assets, NeMo Retriever Library can combine audio or speech processing with visual text extraction when OCR applies to frames or derived images. For the audio and speech path, refer to [Speech and audio](audio.md) for RIVA ASR and related ingestion paths. From d4b50db2473f154b43393a2b61ceffeccf29b458 Mon Sep 17 00:00:00 2001 From: Kurt Heiss Date: Tue, 21 Apr 2026 15:09:09 -0700 Subject: [PATCH 94/94] update extraction/images/overview-extraction.png --- .../extraction/images/overview-extraction.png | Bin 249354 -> 442170 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/docs/extraction/images/overview-extraction.png b/docs/docs/extraction/images/overview-extraction.png index 31f71f21499a5bebda337bb5263cf0e7176b09f9..488200d592f420801052a13fba51a5f40b220ba4 100644 GIT binary patch literal 442170 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

r&gDr_p}(@`X+) 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%0D`}VTb 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 z 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⁢sUGFss0PUn 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%0DXxSV1*Iu2Zkl78 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 W(CN3+7p!SLDSz+L-Ml-GU;Hoab`t~u literal 249354 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

    Yn=wu41`cQEv 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 @YYx2_4DJFo` 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�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