{"id":9558,"date":"2023-01-24T19:00:00","date_gmt":"2023-01-24T17:00:00","guid":{"rendered":"https:\/\/u-labs.de\/portal\/?p=9558"},"modified":"2023-01-24T13:33:24","modified_gmt":"2023-01-24T11:33:24","slug":"websphere-java-anwendung-reverse-engineering-analysieren-java-code-hinter-der-connections-atom-api-fuer-communitys","status":"publish","type":"post","link":"https:\/\/u-labs.de\/portal\/websphere-java-anwendung-reverse-engineering-analysieren-java-code-hinter-der-connections-atom-api-fuer-communitys\/","title":{"rendered":"(WebSphere) Java-Anwendung per Reverse Engineering analysieren: Java-Code hinter der Connections Atom-API f\u00fcr Communitys"},"content":{"rendered":"<p>Dieser Beitrag zeigt, wie man den Code einer auf WebSphere laufenden propriet\u00e4ren Java-Anwendung analysieren kann. Der Anwendungsfall ist hierf\u00fcr die Communitys-Anwendung von HCL Connections, mit dem Ziel, mehr \u00fcber die Funktionsweise der Atom-API zu erfahren.<\/p>\n<h2 class=\"wp-block-heading\">Ausgangslage: Eine fehlerhafte Dokumentation<\/h2>\n<p>Mein Vorhaben war recht simpel: Eine Community automatisiert per API anlegen, damit dies in Drittanbieter-Software eingebunden werden konnte. <a href=\"https:\/\/ds-infolib.hcltechsw.com\/ldd\/lcwiki.nsf\/xpAPIViewer.xsp?lookupName=HCL+Connections+7.0+API+Documentation#action=openDocument&amp;res_title=Creating_communities_programmatically_70&amp;content=apicontent\" title=\"In der Dokumentation findet sich dazu ein Artikel inklusive Beispiel des Atom-Dokumentes\" target=\"_blank\" rel=\"nofollow\">In der Dokumentation findet sich dazu ein Artikel inklusive Beispiel des Atom-Dokumentes<\/a>. Beschrieben sind die Felder <strong>author<\/strong> und <strong>contributor<\/strong> dort nicht, allerdings <a href=\"https:\/\/ds_infolib.hcltechsw.com\/ldd\/lcwiki.nsf\/xpAPIViewer.xsp?lookupName=HCL+Connections+7.0+API+Documentation#action=openDocument&amp;res_title=Community_member_entry_content_70&amp;content=apicontent\" title=\"enth\u00e4lt dieser Artikel mehr informationen\" target=\"_blank\" rel=\"nofollow\">enth\u00e4lt dieser Artikel mehr Informationen \u00fcber <strong>contributor<\/strong><\/a>. Jedoch wird per API lediglich die Community mit dem Nutzer als Eigent\u00fcmer angelegt, der sich f\u00fcr die API-Anfrage authentifiziert. Eine ganze Reihe an abge\u00e4nderten Tests \u00e4ndert daran nichts und f\u00fchrt auch zu keinen Fehlern, die m\u00f6glicherweise weitere Hinweise liefern. Es scheint, als w\u00fcrden diese beiden Felder an dieser Stelle schlichtweg ignoriert.<\/p>\n<p><img decoding=\"async\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAt4AAAHfCAIAAADoQkgwAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAgAElEQVR4nOzdd1wT9\/848PdlQAKGHfYoqAwFBGTJUhBcdVSto060rk+dHz9a22od1Wqr1WrrttZdq9Zt3RNliQOQKSCCbBJENln3++Pd3i\/fBELEkAR9PR\/8cdx43\/sud7lX3usIn0mrEQDgg\/H4yCpNZ+HD0nvyGk1nAYBOhiBJUtN5AAAAAAD4B03TGQAAAAAA+P8gNAEAAACAFoHQBAAAAABaBEITAAAAAGgRCE0AAAAAoEUgNAEAAACAFoHQBAAAAABaBEITAAAAAGgRCE0AAAAAoEUgNAEAAACAFoHQBAAAAABaBEITAAAAAGgRCE0AAAAAoEUgNAEAAACAFmFoOgMqU11dXfOmpra2tq6urqGxoamxSSAQCIVCkUhEkiRCiCAIBoPBZDJ1dHRYbJYeW69Lly4cDsfA0MDIyEjT2QcAAAAAQggR+LHdGQkEgvLy8sqKSj6fz+fz3+VACIIwNTU1NTXlmnMtLCx0dHRUmE8AAAAAKK\/zhSY1NTVFRUUlxSWVlZUdtAsul2ttY21ra2tgYNBBuwAAAABAizpNaCIQCPLz8wsLCnk8ntp2amZmZu9g7+joCOUoAAAAgHp0gtCEz+fn5uS+ePFCg3lwcnLq1r2bqampBvMAAAAAfAi0OjQpKyvLzsouKSnRdEb+YW1t7eLqYmlpqemMAAAAAO8tLQ1NKisrM9IztCcokWZtbd2jZw8ul6vpjAAAAADvIa0LTRobG1NTUjVbfaMMJycnz16ebDZb0xkBAAAA3ivaFZpkZ2enJKeIxWJNZ0QpdDq9l1cvFxcXTWcEAAAAeH9oS2hSU1Pz+PHjstIyTWfkrVlaWfbu3Ru6GQMAAAAqoRWhSV5uXlJSkjbkpH0IgvDz8+varaumMwIAAAB0epoPTZIeJuXm5mo2DyrRrVs3P38\/TecCAAAA6Nw0GZrU19fHx8V33KCu6sflcvsE9dHX19d0RgAAAIDOSmOhSWVlZVxsXENDg0b23nH09PSCgoOgazEAAADQPpoJTYqLiu\/fv6\/xuqQOQhBEaGioja2NpjMCAAAAdD4aCE0KCwpjY2PVvFP1Cw4Otnew13QuAAAAgE6Gpub9fSBxCUIoNja2sKBQ07kAAAAAOhm1hibFRcUfSFyCxcbGFhcVazoXAAAAQGeivtCksrLy\/v37atudlrh\/\/\/771AUJAAAA6GhqCk3q6+vjYuPe13avCpAkGRcbV19fr+mMAAAAAJ2DmkKT+Lj496+fsJIaGhri4+I1nQsAAACgc1BHaJL0MOkDr9SorKxMepik6VwAAAAAnUCHhyZ5uXnvxzj07yg3NzcvN0\/TuQAAAAC0XceGJjU1NUlJUFrwj6SkpJqaGk3nAgAAANBqHRuaPH78+ANs+toakiQfP36s6VwAAAAAWq0DQ5Ps7Oyy0rKOS78zKisty87O1nQuAAAAAO3VUaFJY2NjSnJKByXeqaUkpzQ2Nmo6FwAAAICW6qjQJDUlVSwWd1DinZpYLE5NSdV0LgAAAAAt1SGhSWVl5YsXLzoi5ffDixcvPvDe1AAAAEBrOiQ0yUjP6Ihk3ydwigAAAIAWqT40KSsrKykpUXmy75mSkpKyMmgjDAAAAMhSfWiSnaX5HigkSVKdlgkp8ks1qCNO1Pnz5wk5enp69vb2o0ePvnjxosr32KaGhobvv\/8+MDDQzMyMxWI5ODiMHj36r7\/+Un9OFDt8+PCgQYOsra11dXWtrKz69ev3yy+\/fLBvV0AINTc3U5cQ9RKokpKS2NjY2NjYd+xoduvWrfn\/evLkifSimpqaJUuWBAQEdOnSxc7ObtasWfn5+e+yLwBAp0Oo9iHN5\/OvX7uuwgTbgSRJHIWQJCkRS0RiET5GgiAYdAaNTqOWUsGKpgwYOMDU1FSFCZ4\/f\/6TTz5RsMKUKVN+\/\/13Op2uwp0qkJSUNGnSpOfPn8svCgsLO336tJmZmXpyokBZWdn06dOvXLkiv8jBweHUqVN+fn7qz5XGNTc3s1gsPF1XV6evr48Q2rZt26JFixBC48ePP378ePtSbmhocHV1ffXqFf73zz\/\/HDduHJ5+9uzZxx9\/TC3CjI2Nr1y5EhAQ0L7dAQA6HYZqk8vN0fCY9FTAIRKJ6HS6uaW5hbmFnr4eQqihvqG8opxXyROJRAwGgyAIjUcnuTm5qg1NpIWEhCCESJIsKioqKCjAMw8fPty3b9\/p06d30E6lPXjwIDw8XCQS4X8ZDIadnV1ZWRnuOx0TExMZGZmYmKirq6uGzLSmurrax8entLSUmmNvb19TU1NdXY0QKigoGDBgQHx8vKurq+byqBkEQeBLCCFEo6myeHXdunUywQcmFounTZuGF3l5eYWFhT158uTBgwevX7\/+9NNPs7KycHgEAHjvqfIbRyAQaLxjDg44hEKhhaVFRP+IqAFRvbx6de\/evXv37r28ekUNiIroH2FhaSEUCjUelyCEXrx4IRAIOiJlBoNx\/\/79+\/fvP3jw4OXLl3l5eR4eHnjRmjVrmpubO2Kn0iQSyYIFC3Bc0qVLl6NHj9bU1Lx48eLNmze\/\/PILftSlpKRs3bq1o3Oi2OrVq3FcQhDE119\/zefzCwoKXr9+ff36dVyiU11d\/d\/\/\/vcd9yKRSNq3oQZrHnV0dO7\/i81mI4Sam5uFQiFeKhaLm5ub23FcOTk5mzdvptPpdnZ2MosuX76Mh0sOCgpKSkratm3b\/fv3Z86ciRAqKio6efLkux4SAKCTUGVoovEqYfw9LhaLuzt3j4iIsLS0rKmuefbsWXx8fHx8\/LNnz2qqaywtLSMiIro7d8fDrmi80Yl6TpqTk9O1a9eYTCZCqLCw8ODBg9SioqKiBQsWeHp6GhoaGhsbe3h4zJ8\/H4eYJEna29vj1gYbNmyQTjAyMhLP37NnT4t7PHTo0NOnT\/H0pUuXJk6ciB9vTCZz\/vz5CxcuxItOnTqlTE6oNPFOhw0b1tzcvHjxYgsLi99\/\/x0vbWhoWLFiRd++fQ0NDe3s7IYPH37nzh3Fp+X58+c7duzA06tXr16\/fr2JiQn+Nyoqav\/+\/Xj62rVr0i8\/ysrKmj59uq+vL4fDcXNzGzNmjEwjnpSUFJxPR0fHx48f+\/r60ul0S0vLTz\/9NCUlBSF09uzZjz\/+mMvl2trajhs3TvoYR44cibfdv3\/\/smXLDA0NmUymv7\/\/2rVrSZLk8\/kLFizo1asXh8Px8vLau3cvdQHHxsbiDd3c3KQzI50gnjNt2jQ8Z\/PmzYmJiePHj3dwcOByuf3794+NjaU2lG9rYmZmtnTpUuqDY7FYx48f379\/P17HwMBAOs5+8OABnm9jYyMdwSxYsEAgECxYsMDFxUXm40hOTsYT06dPZzAY1Pp4QvqiBQC831RZoVNYUKjC1N4WLgURCoV2dnaBgYEIodSU1KysLOmWjJkZma6urh6eHoGBgU2NTa9evWIymZotPiksKJT\/ju4IVlZWn3zyCQ4FHj16NHv2bITQ8+fP\/fz8pJ+71dXVaWlpf\/zxx8OHD7t27frZZ59t3LgRIXTp0qWvv\/4ar9PQ0PDgwQOEEIPBGD16dIu7O3HiBJ6IjIzs27evzNJFixYZGhoihHR0dPCcNnMik8KkSZNwW1r8bM7NzR0xYkRGxj9dsmtqaoqKii5evLh69epVq1a1dk7OnDmDy3WMjY3li0aGDh26du1aHMLW19cbGBgghHbu3Pm\/\/\/2vqakJr5OVlZWVlfXXX3999tlnhw4dwsEfhc\/n9+\/f\/82bNwih8vLy06dP37t3b+bMmdJx3smTJx88eJCRkYFPCGX16tVFRUV4OikpKSkp6eXLlwkJCdQxpqSkzJ49+82bN1S48Lbi4uK++eYbKp64ffv2nTt3YmNj+\/Tpo3wio0eP\/uKLLwQCQW1t7b1796KiovD8a9eu4YkxY8ZQ9UFnz569evWqtbX1mjVrRo0aJZNUcXExnjA2NqZmcrlcPNFiiyUAwHtJZaUmNTU1PB5PVam1A0EQEomExWJ5+3gjhJKfJj99+lQoFLKkCIXCp0+fJj9NRgh5+3izWCyJRKLZah0ej6e21xH36tULT+Tk5OCJL774Au\/d09Nz6dKls2bNsrGxQQhVVVVt2rQJIfTZZ5\/hNRMSEqjP9+7du7hKKCIiorV2rI8ePcIT1LNKmr29\/apVq1atWkWFO23mRFpCQoJMH585c+bgZ\/agQYN27dq1ZMkS3IRz9erV58+fb+2EUJkMDAzkcDgyS2k02ooVK3A+raysEEKPHz+eP38+jku8vLwWLVr08ccf45WPHz++ZcsWmRRqa2vr6uoGDRrk6+uL5\/B4vA0bNrDZ7GHDhlHFGyUlJUeOHJHZtqioyMnJacSIEVTI8vvvv2dkZPTo0ePjjz\/GRVAIoR9\/\/LG1o2vTmTNncE4GDBiAoweSJFevXt3a+rW1tVQF3Pjx40mSnDhxopGR0eDBg\/HMS5cuUStToQnVxLWxsRHHf1u3bpU\/2wihbt264QnpPjvUq8srKipggGkAPhAqC02oX3iagotMbO1sjYyMKioqMtIzmEwmjUYjSVIikUgkEpIkaTQak8nMSM+oqKgwMjKytbMVCoUab3GitlNnbW2NJ3Bo0tTUhAs\/9PX14+LiNm7cuGfPnl9++QWvg6sevLy88BNUIpFQfVjknzoyxGJxVVUVnnZ0dGwzY8rkRBqPxxs+fHhSUlJZWdnYsWNv3rx569YthJC\/v\/\/ly5fnzJmzadOm3bt345VXrlzZ2n4rKiqUzyRCaPHixbhuYty4cY8ePfr5558vXbq0b98+vHTt2rXUUVPOnDlz5cqVpKSkOXPm4Dk0Gu3evXsXLlzIyMgYOHAgnkmVhVACAwMzMzPPnTuXnp5O9agaMWLEs2fPLl26dPv2bTyHz+dTR\/G2HBwcsrOzL1y4cO3atZ07d+KZqalv\/RaFCRMm4AmqYovP5+NWI\/b29rgIEyG0YcOGgoKCqKioMWPGtJhOcHAwnti2bdvZs2fr6upiY2Opuj+JRKK2IB4AoFkqC01KijU8zJpEImEwGObm5iRJ5ufni0QiHJegf4c2QQjh6EQkEuXn55MkaW5uzmAw2t1EUVXUduqoIAxPsFispqYmkiTr6upYLFZOTs6ZM2d+\/vlnvA5VZ0E9eKjfxDg0YTKZI0eObHFH0iPHUI0GFFAyJxQLC4sTJ074+vpaWFhwOJy7d+\/i+aNGjRIIBM3Nzc3NzcOGDcNP9NTU1PLy8tbyqXwmxWJxYmIint60aRMVLsyYMQNHb\/X19VRrCczQ0HD48OF4OiIiAk\/06NGD6o3cv39\/PCH\/xsexY8fi2i4bGxuqym\/y5Mm4eCMwMFBPT6+1bZU0efJkCwsLPE2VfLRjJMBhw4Z16dIFIZSfn5+ZmYkQunHjBr6txo4diy+2vLy8jRs36urqUo175PXp02fEiBEIobq6ulGjRnE4nJCQEKohDoPBkKnzAgC8r1QTmggEAo2\/FIYkSSaTiQuKX1e9ptFp8pU1uNKHRqe9rnqNEOJwOLitiWZy\/K\/KysoO6qcjgxqllyo5F4vF27dv79u3r76+vrOz8+jRo+Pj42W2oup0rl27JhQKCwoK8HBbAwcOlG4TII3BYBgZGeFpqt+yYsrkhOLh4UENuYGk6qe++uorqvLO1NSUKv9vra0xVRulTCbz8vJwNZa5ublM75LevXvjCfxgpkhXW1DtLagzgxR2ysVNW9q3rZKkU3uXfrlsNpsaTQfHr1S52vjx4\/HEwoULm5ubly1b1r17dwVJ7d+\/f8iQIdJz\/vOf\/+AJS0tL1fZhBgBoLdXc6q39KlUrEhEEgb+8RGKRgmoagiBEYhFCiEajEQSBND8wrJpOIFVWTz0eRo4cOX\/+\/JiYmJ49e27YsOHmzZs3btyQ2apr167+\/v4IoTdv3jx48KDN2hzMx8cHT0h3+qCkpKSEh4eHh4cPHjwYh4bK5IQiHZcghNps5IQboirIZFJSknx0KBQKBwwYgPOZmZkpPb6wzJrUI1M9IaYWkilau379OkKoa9euVNCGL5vvvvuO6vVz8+ZNvGj8+PFU82FTU9NLly7dvXt348aNq1evjomJWb58OV6Em\/sAAD4EqumhU1mh+ffoEjRCLBbjwn99ff3q19UtRid44BP8G7GpqUksFhM0Dbc1QQhVVlTKD\/OgWuXl5WfPnsXT+IHx8OFD3DjAysrq4cOHuIaixUajEyZMePjwIULo0qVLL1++RAixWCxc9t6aTz\/9FLeHOHPmDG68Kb300KFDuBYmPDycIAjlc9IiZ2dnvK8jR45MmjRJya0QQiNHjly9erVEIikpKTlw4ADutUS5cuUKDo9YLJaTkxOdTtfR0REIBOXl5cXFxbiVLobbVSCEevbsqfzeO4hM\/Zd8dVhHiIqKMjMz4\/F4sbGxd+\/exeVzioNXeY2Njbg1iY+PD9Wri+rqRUU5AID3nmpKTfh8vkrSeRcEQTQ3N1fxq\/BQCmKxGEch0uvgfsJisdjG2oYgiCp+FR68QVN5pnT0CXz16tWQIUPwb3o7O7tp06YhhPLy8vBSfX19qoMGNUyItHHjxuEVzp8\/jxucDh48uMVOFpSZM2ficEQikURFRd2\/fx\/PF4vFO3bs2LZtG\/4Xl94rn5MWeXt74wmqRAchVFRUNHv27JkzZ86dO5caKEyGu7v7jBkz8PSCBQv27t1LjV17+\/ZtPNgXQqh\/\/\/66uroMBoNqI7Js2TKqidJvv\/2Wnp6OEGKxWFRO1I+qnHr16hXVzzY9PR23L1Y5mc4yDAYDN24Vi8X\/+9\/\/8Ezp0GTBggWL\/i8qFh88eDAevCQmJsbS0tLS0tLf3x+nX1dXR\/XPUhwKAwDeJ6opNdGG0AQhRKfTi0uKe7r3tLe3z8vLq6yopIbNwHD4Ym5hbu9gLxKJikuK1fY2GcVUfgLFYnF4eDhCiCTJkpKS3NxcKkpbvXo1HhveyckJz8nNzQ0LCwsKCrp\/\/z7VwkP62WNpaRkeHn7r1i0qhmjzBzGDwdi2bdvAgQNxmURYWJiJiYmDg0N+fj4eAx4hFBoail\/IonxOWjR16tSffvopJyfn6NGjtbW1gwcPxt1xcROThQsXygw3Im3dunWnT5\/m8\/kCgWD27NmLFi1ycXGpqKig2uVwuVyqs8+WLVv69OkjkUiOHTuWnZ0dHh6Oe7jgpStWrKAG4VC\/rl276uvr19fXi8XiwMDAAQMG1NTU3Lp1S7V1TFSTlNjY2H379vXv35\/67CZMmLBr1y70b9dfV1dXT09PasPNmzfLJJWWlobHpJ86dSq+nIKDg01MTKqqqrKysuzs7Pz9\/R89eoQHO\/Hy8qJ6MwEA3nsqKDWprq5Wc0tSqt8NnsYdgwmCYDKZvEpeTk4Om80ODAw0NjEWCARisRh3HhaLxQKBwNjEODAwkM1m5+Tk8Cp5TCYTF67gRKSTVfMRUQ9sVSV49+7du3fv3rt3LycnhzqcyZMnT506FU\/7+\/uHhYXh6QcPHmzcuDEhIYHqdJOTk0MNgYWkGhMghPT09IYOHdpmHiIjI+\/cuePg4ID\/raqqevr0KXWYkZGRJ0+exF1j3ion8nR1dQ8ePIg7m5w\/f37OnDnfffcdjkvGjh2Lh4xrDZfLffLkCVV90NjYmJycTMUlzs7O586ds7W1xf\/6+\/v\/\/PPPOLB79OjRpk2bqLhk\/PjxX375ZZvnpOMwGIwVK1bg6devX584ceLKlSvm5uZvNX5amwIDA3GxVklJyaxZs6SbKgcHB9vb21P\/Ug1gldelS5djx47hOLK0tPT8+fP4c8cdsrShdBMAoB4qCE1q3qhvsAEqeiBJErcUYTAYOLzAL\/hgMpipKaklJSUmJiZRUVHuHu4cDkeXpavL0uVwOO4e7lFRUSYmJiUlJakpqUwGUygU4jodJpPJYDBwaxXpdxer7dA67jSyWCwbG5uRI0deuHDh8OHDVEERQRDnzp37z3\/+4+DgYGJiMmjQoEuXLv3222\/40dvU1CQ9CP2oUaOoIqhhw4Yp2aEjLCwsJSVlxYoV3t7eRkZGXbp08fb2Hjdu3OXLl2\/cuGFpadmOnLQoKCgoPT19wYIFfn5++vr6dnZ2gwcPvnjx4p9\/\/ilTcibP3t7+9u3bu3btCg8PNzc319XVdXFxGTZs2I4dO9LT04OCgqRXXrBgQXJycnR0tI+PD+5MNGrUqAsXLhw\/flxB2Yx6LFu2bP\/+\/T4+Pl26dHFzc5sxY0ZcXBzVPVgl3N3d9+\/f7+LiwmKx7O3tpV9OSRCEdDgyduzYdqQ\/aNCgtLS0CRMmdOvWjcViOTo6zp8\/Pzk52dnZWQW5BwB0ErKtMdohPS29HcM0tQMVMQiFQjabbWtryzXncjgcGo3W1NRUxasqLinm8Xg0Gk1XV9fbxxt3kZVIJLW1tQghvCZCKDc39+mTp\/jlZGZmZjbWNiZmJnhk2Nra2sqKyqKiosbGRvykUdsw9p6enj3dNd+IUoFBgwbhxhxnzpxpbUQT8CFLSEjAhTSenp7yA+UBAICSVNDWpK6u7t0TUQYuLBGJRB999JFnL0\/pURkQQnZ2dm493XKe56SlpTU1NT1MeFjwssDR0dHSyhI32GxqaiorLcvPzy8vKxdLxDo6Ou7u7t2du0v\/qrawsOjWrVv16+rU1NSXL18yGAy1FSOr7TS2D0mSeNRaDodDDc8FgLTCwn\/eovW2fXMAAECaCkKThsaGtld6Z9Tb+9x6uPn5+REEUVJcUlhYWFVVJSEl+nr61jbWTk5OPd17GhgaxMfFC4XCkpKS0tJSOp2uo6uDEBI0C8RiMR4QVldXNygoCA9Un52dXVJcUt9QTyNoJiYm9vb21jbWoWGhLDYrMyNTR0dHPQUn6jmN7ZCfn\/\/s2bPTp0\/jfiijRo2SGVYEgGvXrhUVFX377bdIrmYHAADelgpCk6ZGdQyc8M8rcmxtfXx8SJJ88vhJZmamWCzGLSdeV70uKCjIf5EfEBhgZ2fX6NWYmJiIR3olSRLnkCAIOp2O0\/Hy8rK1s339+nViQmJZWRmejxCqrKzMzc11c3Pz9vH28fGpraktLi5WTxsC9ZzGdoiLi6MGC6HT6dQ7TQCgzJs3Lzc3F09\/8sknVLcdAABoBxU0g1XDCJg4wmAymb28ejEYjNTU1GfPnuHCDzqdTqfTGQwGi8UqKyuLi41rbGzs7tzdysoKZwwPEfvPwK8ICQQCKyur7s7dGxsb42LjysrKWCwWg8HA6ejq6tJotGfPnqWmpjIYjF5evaj4pqOPUWsHEmUymUwm09DQMCws7ObNmxocugNoLT09PR0dHUdHx\/\/+979Hjx7VdHYAAJ2bCkpNWhvPSoUIghAIBLhHAL+Kn52VjXvlUG\/JwaEDi8WqqKh4\/vx5r1697O3tS0tLZepi8L\/29vYEQTx\/\/ryiooLNZuPIA6+GE2QymdlZ2Xb2dqamppaWloWFhW328nh3ajiN7TN27Nj29bYAHw5o9AoAUCEVlJpQA2h2HDyEq6mZKUEQxUXFDQ0NdDpdOuygxibR0dEpeFlAkqSFhYUuS1d+NFhdlq6FhQVJkgUvC3R0dKgxUaTTodPpDQ0NxUXFBEGYmpnigWU7+hjVcBoBAAAA7aeC0EQNlR0kSdIZdFzCUVtTS6PR5Jum4neGIYQaGxubmpr09fXpNLp8aEKn0fX19ZuamvCr5KmtpNPBTWVra2pJkmSz2XSGbDoddIwdvQsAAABA+8FLxgEAAACgRVQQmqihsoMgCLFI3NjYSBAEx4CDW4TIl4jgOWw2m8Vi1dfXiyWyFTEEQYgl4vr6ehaLxWazpbeSTge3YuEYcAiCaGxsFIvUUaED43ADAAAASCWhCX4NSofC7T\/4PD5Jkja2Nnp6ejIvFsbxBI1GEwgEDh85EARRXl7e3CT7VmGCIJqbmsvLywmCcPjIQSAQ4J47MumIxWI9PT0bWxuSJPk8Pm7X0tHHqIbTCAAAAGg\/FYQmahj2A\/ccLisr4\/P5piamLq4uQqEQtwjBK+AmI01NTebm5s7OziRJFhYWttgehVrk7Oxsbm7e1NQk3dwEt2IRCoUuri6mJqZ8Pr+srAz3H+7oY9T4G1gAAAAAbaCC0EQNHWtx9CAUClOSU0Qikaenp4eHh0QiaW5uFovFYrFYJBI1NTVZWloGBQex2eyc5zmlpaUtPuyZTGZpaWnO8xw2mx0UHGRpadnU1CQSiXA6+MU6Hh4enp6eIpEoJTlFKBTKN5XtCGo4jQAAAID2U0ElAovNQtXvnkwbcMFJUVHRkydP\/Pz8evv2trKy+megeolEX\/+fgeqZTOarV6+ePn2Kyz\/Q\/23DgefQaLSnT5\/q6enZ2tn2j+z\/4sWLkuKS+vp6Gu3\/D1RPkuSTJ0+KiorUNlA9iw2jvwMAAACqePNwYkLiixcvVJKbNil4vR9CSCAQ5OTkPEt9JhaLW+xgjKRaudLpdA9Pj+7du8sXV2jk9X5OTk4BgQHq2RcAAACgtVRQatKlS5d3T6RNOKQgCEJHR6egoKCiosLWztaca96F04VGozU3NfP5\/OLi4kpeJZPBbLPhKl7h8ePHhQWFNjY2pqamuixdiURSV1tXUVlR9KqosbERl5dQu+7oA1TPaQQAAAC0nApCEw6H8+6JKEYFB2KxGPccbmhoSHuWxmAw8Ij1uJkInU5nMpi4dQh+Y590nQ41jYteSJKkEbSysrLi4mL8Lh7cAFYkEuno6OCh8Wk0GpVOR0cnajiNAAAAgPZTQWhiYGjw7okoQHXoJUmSw+Gw9dgIIQIRBI0gSZKU\/BNw\/PMvSRKIEIqENW9qRCKRdI9cHFvgmSamJkwGk0T\/lMSQkn9GNyFo\/\/6LSIRQY0NjbW0tDnQ6Ojrp6NMIAAAAdAoqCE2MjIzkB0BTIRyXsPXY3t7elpaWbD02gdoIEYRC4Zs3b9Kepb169YrBYFDlJSKRyM7Ozt3D3Qiy0MEAACAASURBVNDQsM3OuiQiGxsay8rKkp8m47f2qOyQ5BAEId90BgAAAPgAqWaYL1NTUx6Pp5KkZOCogslkhoWFcbncpqYmXiVPcekFSZI6TB0zM7OQ0JCYezFFRUU4ChEKhba2tiGhIQwG4031G4FQ0GY6HA7HycmpC6fLnVt3xGIx6rAxW01NTTsiWQAAAKDT0fbQBLf5cHRy5HK5FeUV8fHxtbW1bRSakIjBYLj1cOvVq5eLi0tZWRmObxgMhouLC4PBSElJyczIFIlEbabD4XD69OljbmFu72D\/PPt5xw09AqEJAAAAgKnm9X5cc65K0pGHO\/qamZqRJJn3Io\/H4zEYDDqNruiPTheJRFmZWQKBwMjYiM1mSyQSiUTCZrONjI0EAkFWZpZIJKLTFSZCozMYDB6Pl\/cijyRJM1Mz3Py2gw6z404gAAAA0LmoptTEwsJCJenII0lSIpHg4gqZZq0K0Gg0PLork\/n\/OxLT6XQmk4nnUyPcK8ZgMEQiEUKIqcOUSCQd156m404gAAAA0LmoptRER0eHy+2Q3\/3\/9KD5d1AT9G\/rE8Wk+wlT21LTb5uITAZUjsvlwij1AAAAAKaa0AQhZG1jraqk5EnHBMrEB9Q60vGEzLTKd9puHXrqAAAAgM5FZaGJra2tqpJSgHgbSK50RLogRPlEOpp6Th0AAADQKaimrQlCyMDAwMzMrCP66eDRzxBC+PXCSInqGGqAeZk2JbhRbXNzM1KiIIQgCPxSYpwHKhuqZWZmZmAAg60BAAAA\/1BZaIIQsnewV3logkd3xV1szM3NEUJ4FNc2t0L\/Noal4hiSJHED2K7duiJlQhNECEVCc3NziUSCJIhQxasQ5dk72Ks8TQAAAKDzUmVo4ujo+OTxExUmiP4NIHR0dWg0Wo8ePXr06PFWm4slYkLqTTo6ujp0Gj00NPRts6Gjq4P+bVf7ttsq5ujoqNoEAQAAgE5NlaGJjo6Ok5PTixcvVJgmSZJ0Or2stEwkEkkkEhpBQ1JVPK3BJRwEQeDX9eFqHZFIlJ+Xz2Qy8SJlEkEISUgJjUbjVfLafJtxOzg5OUHfHAAAAECaiosB+Hz+9WvXVZggDiMEAoFEIkHKdfql4BIXXV1dqkksbmXSjkRoNJqOjo7K3\/A3YOAAGAcWAAAAkKbKUhOEkKmpqbW1dUlJiaoSxHUourq67U4BD2eCk2Kz2e1OR+WjwVpbW0NcAgAAAMhQcWiCEHJxdVFhaIJU0cKDCineJR2VdyR2cXVRbYIAAADAe0Bl45pQLC0tra1hDLE2WFtbW1paajoXAAAAgNZRfWiCEOrR8+360XyA4BQBAAAALeqQ0ITL5To5OXVEyu8HJyenDnrlEAAAANDZdUhoghDy7OVJp9M7KPFOjU6ne\/by1HQuAAAAAC3VUaEJm83u5dWrgxLv1Hp59XqXjkIAAADA+62jQhOEkIuLi6UVtPT8PyytLF1coGMOAAAA0KoODE0QQr1791bPy3s7BYIgevfurelcAAAAAFqtY0MTAwMDPz+\/Dt1FJ+Ln5wcvGQYAAAAU69jQBCHUtVvXbt26dfRetF+3bt3wG48BAAAAoECHhyYIIT9\/vw+8ryyXy\/Xzh9IjAAAAoG0qfr1fa+rr62\/euNnQ0KCGfWkbPT29yKhIfX19de60trb2xIkTKSkpTU1NTk5O\/fv39\/f3x4tEItGZM2cePXpUWVlpamrav3\/\/QYMGEQRRVFS0bNmygwcPMplMvOabN2+++OKL7du3Z2Zm7t27d\/\/+\/bhD+IMHD3bt2rV+\/XoHBweEUHl5+eLFi9evX3\/r1q1bt25JZ4NGox05cqS5uXn69OnUTCaTaWdnN3nyZGdnZ4TQsmXLioqK8CI9Pb2ePXtGR0cbGRlt377d0NBw8uTJ1IaHDh1qamqaPXt2Wlrahg0b5s2b16dPH2rpxIkTt2zZYmFhsWHDBjc3t08++QTPT0lJ2bp164IFC65evZqWliZzory9vWfOnPnFF1\/IzB8zZgyVgmqdOnXq77\/\/3rhxo7m5OZ6TmZm5c+fOX3\/9FZ\/wFnOCz+369eup+Q8fPjx27Ni2bdsQQj\/99JODg8OYMWMQQkKh8MqVKw8ePKisrDQwMPD29h41ahSuSTx37lxmZubXX3+NU+DxeGvWrAkJCRk3btySJUtKS0ul9+vu7o7X\/PzzzxcvXpyTk3Pq1CmZvOnq6v7++++tbavgSN\/pDLauxcv+3LlzreUcIXTo0KHr168vWrTIz8\/v+fPna9askU923bp1f\/\/9d2tXI0IoKSnp\/PnzJSUlJiYmLi4ukyZNku6Ft2zZsuLi4p07d1L1ua19EN7e3u3LgMyB4Dm5ublr1qw5cuSITGrSV0trOb98+fKjR49Wrlyp4Jp8+vTpTz\/9RM3U09NzdXWdNm2aiYlJaWnpkiVL9u3bp6enh5fW1dXNnj1727ZtJiYmkydPjoiI+Pzzz6UPMCQkpF+\/fvLHrkHZ2dmurq4IIUdHxxcvXiCEJBKJgYFBfX09QojH4x09enTRokUrVqyorq7evn27fAoikYhOp2dmZq5cuTIpKen169eurq5ffPHF1KlT8QpsNlskEgmFQumtUlJSvLy8QkJC7t+\/HxsbGxISIpNsdHT0gQMHwsPD7969i+dwuVw3N7cNGzYEBQUhhBRsNXjw4KtXr1IzWSxWnz59Dh48aG9v3\/4z1Trpe4ogCC6XO2LECPxBX7x4MS0tjboLKIWFhX\/99Zfq36HTIn19\/aDgoFs3b6knEtIeBEEEBQepOS5BCO3cuZNOp8+fP9\/GxiYnJ2f37t0MBsPHxwchtHnz5vr6+ujoaC6Xm5eXd+TIEYlE8vHHHytIzdXVVSgUFhYWOjo6IoTS09MJgkhLS8OhSW5uLpvNxld2nz59oqOjW0xkzZo1eGz+hoaGv\/76a+vWrb\/++iuOdSZNmhQaGkqSZGVl5c6dOw8dOrRw4cI2j\/Ho0aNeXl6Ke2JnZ2dv27Zt1qxZ3t7erq6uYrEYIXT48GEajTZp0iSEEJ1OFwgECKHvv\/\/ezMyM2lBHR6fNDLSbUCg8fPjwkiVLWlz6jjk5cOBAWlraxIkTHR0dq6qqTp069cMPP6xZs4aKOLE3b96sX7++d+\/e48aNw3OmTp2Kv9cwmXGJhgwZEhkZiRBKSEi4fPnyd999J720tW0VH6nKtXjZK8g5SZKJiYlmZmaJiYl+fn5du3bds2cPQuj169dfffXVxo0bDQ0NEUKKr7Hnz5\/v2rVr8uTJ3t7eAoHg9OnTP\/7447fffotPQnFxcUlJibGxcVJSUv\/+\/eU3l\/4gxGJxOzIgfyBKni7FOZfW2jVpYGCwadMmnIGqqqrdu3cfPnx40aJFbe76zp07\/fr169q1c9Rx5+fnV1RUmJubZ2Rk4LhEhp+fH\/4+uXPnTnFxcVRUlIWFBUKIIIgbN24MHz68ubm5d+\/e3bt3j4+Pj46Ozs3NXbt2rfIZsLKykr54pH+SDRkyxNjYuKCgICYmJiws7NmzZ25ubm1uNWDAAHNzc4lEkpSUdOfOnS+\/\/PLPP\/9UPj9vhSCI3bt3I4REIlF6evqePXscHBzwo0RecnLytm3bBg8erKbQBCHE5XJDQ0NjYmLUtkdtEBoaqv7KLKFQ+OzZs\/Xr1+NwwcvLa8CAATExMT4+PklJSS9fvty6dSt+mTOXyyVJ8o8\/\/hgyZIiCBE1MTMzNzXNycqjQJDQ0NC0tDQc0ubm5zs7OuCsWk8ns0qVLi4no6+vjRV26dPn0009jY2MrKytxsMJms\/EiDocTFRV1+vTpNo\/RzMzMzMzs9OnT+BuhRQUFBT\/99NOUKVPwPUl9vzOZTDqdTuUThyZdunRpLecq5+Xl9fz588ePH7fYY+tdcpKSkpKQkLBlyxYjIyOEkLm5+Zdffrlo0aLHjx8HBgZSq9XX1\/\/www\/du3enfr0hhFgsloL96ujo4AcSm82m0Wgya7a2reIjVS0Fl31rOc\/MzGxubp42bdquXbuEQiF19b7VJZGcnOzh4REeHo7\/nTFjxpw5c4qKinDgnpCQ0LNnTwcHh8TERPnQROaDoC7Lt70m5Q9Ema0U51xaazkhCIKaz+FwBg4cKF9A1aLg4OADBw6sXbtW+7twGhsbv379OjExcdiwYUlJSQRBGBoaVldXS68zZcqUKVOmIISGDRtWXFy8fPnyvn37IoRwsVZzc\/PFixfxt2VJSUmfPn02bty4ZMkSHHcqo1evXvKlX9j69et79eqFENqwYcM333yzfv16ak0FW61cuTI4OBgh9PTpUx8fnydPniiZk3aQvkiCg4NxKV2LoYlAIDhw4MC4ceMGDRqkjrYmFBtbG3w6PhDBwcE2tjbq3y+TyTQzM7t27VpdXR2eM2rUKPxT5uHDh6GhoTguwfz9\/VetWtVmmq6urrm5uQih8vLy+vr64cOHZ2Vl4XLIvLy89g3W0mJ\/JYIgcNlGm6Kjo2\/evPnq1asWl5aVlf3www+jRo3StlJihJCBgcG4ceMOHz6Mn0AqlJCQEB4ejuMSTFdXd\/Xq1bjuDGtubv7pp58sLCxmz57d0Q+GjjtSeQou+9YkJib27t3by8uLIIjk5OT27dfS0jIzMzMjI4PKxv79+6mne0JCQmBgoK+vb0ZGRk1NjfSGKvwg2ncginPeDgRBGBsbK7Pm8OHD6+rqZOp\/tZOTkxMujkIIJSUlOTs7S99fij18+DA\/P3\/IkCFUsbS1tXVycvKLFy9UPvDmvHnzaDQaVcWjJFyPQRW0dCixWPzs2bPa2trWdpeVldXU1BQVFYUQUl+pCWbvYI8Qio2NVfN+1S84OBgfrEZ8\/vnnBw4cmDdvnouLi4eHR0hICL6diouLe\/bsKb0mnU6XLqptrTrG1dX1\/PnzCKH09HQ3NzcrKysDA4OcnBxnZ+eXL19SRRcxMTHSBWPdunWjKhobGhpwY6OGhobTp08HBARQ9dDNzc0NDQ0kSfJ4vJs3byp5n9jZ2UVFRf3+++8rV66U+Wbn8\/kbNmyor6\/v0UPZ1yjKVCEtW7bM07MD3ycQERFx9+7dc+fOjR07VoU5efXq1aBBg\/C0RCJpampCCHE4HKqIXiQSbd26NScnZ8qUKTTa\/\/llsmfPHlybgA0fPpyq62mTgm0VHKnKtXbZt0gikTx8+HDWrFlMJtPLy+utqkKkBQQE5OTkrF+\/nsvlenh4+Pj4eHl54UWvXr0qLy\/39fXV19c3MDB49OhRREQEXqTgg3hb7T4QBTmX0do1SZIkvqlxhc7169eV\/CWgq6s7derUXbt2+fv7a\/mQCgRBBAYGUqFJQECA8mX\/6enpCCEPDw\/87\/Hjx69fv46nv\/nmm+7duyuZztWrV6W\/4u7evYtLZaRxOBwul1tcXIzvesVbff\/99xYWFvjKMTU17dAqV4lEMnHiROrfYcOGmZiYtLhmSUmJjY0N\/rJSd2iCELJ3sKfT6ffv339f250QBBEaGqqR8hKKh4fHpk2b8vLyUlNT8YMhOjo6JCREIpEo3vDXX3+lKpLfvHnz5Zdf4mlXV9e9e\/fW1tampaXh4MbDwyMtLU1HR4dGo1GlczJtTaS\/c1euXElN6+npSVe1Hj58+PDhwwghJpPp6uoq3WZWsdGjRy9ZsuT+\/fthYWHS82\/fvj1p0qTKyso9e\/asXbtWmdc5ydSmd\/TLBAiCmD59+po1a0JDQ1WYkzdv3lBFYtnZ2evWrcPT3t7e+NsnKyvLz89v\/vz5e\/bs8fb2lq5tlGkv8lZtXBRsq+BIVa61y77FlTMyMoRCIX5s+Pr67tu3T\/mqEGm6urqff\/756NGjnz17lpycvGXLFldX14ULF+rr6yckJLi7u+PS7N69eycmJlKhiYIP4m21+0AU5FxmzdauyZqampkzZ1Lzu3btKnMnKuDt7e3i4nL8+HGqJa\/WCgwM3LhxY2NjY2pq6rRp05QPTTgcDkKotrYW\/\/vw4cODBw\/i6RkzZigfmsi0GsENWeTJ\/EJTsNWVK1eo6aCgoA4tNaHampAkWV5evnXrVhMTkwEDBsivKR0SaCA0QQjZ2Nr0j+wfFxv3\/vXZ0dPTCwoO0mxnaR6PV15e3rNnT2dnZ2dn59GjR588efLgwYPBwcE2NjYlJSXSKzc2Nm7cuHHWrFn4Xw6HQ32pSVesWFhYGBkZ5eTkZGRk4K4r7u7uV65cMTQ07Nq1K7WJgrYmP\/30k5WVFUKopqbm2LFj27dvpx6cM2fObPHHlkzwKh\/LslisSZMmHTp0SKYpQ79+\/QYPHtzc3Lxs2bILFy6MHDmy9bP1D3W2NcEcHR379u178ODBESNGKJOTNs8GQsjS0rKoqAj\/aHZzczt27BhC6MaNGykpKXgFGxubefPmMRiMxMTE3377Tbp5vOK2Joop3ra1I1UtBZd9i9UliYmJjY2N0q1tkpOTFZQ3tHb+U1JSHBwcjIyMQkNDQ0NDq6qqvv7667t373788ccJCQllZWXUT0aCIGpqanAhgYIP4m0z8LYHQlGQc5k1W7smDQ0Nd+7ciaeLi4t37Njx119\/UccrneEWL9cpU6Z8+eWXVGMXrRUYGFhTU3PixAmBQBAQEKD8hviRf+fOHZIkCYL4+eeff\/7557lz51InTUkKWo1Q6urqKisrbWxsWCxWm1s9ePAgODi4vr5+7ty5hw4d2rdvnzJXYPvINEgKDg5++vRpi6GJjY3NuXPnxGIxnU5Xa1sTaVwuNzIq8j0b70RLDqqkpGT79u0ikQj\/SxCEt7e3RCIhSdLHx+fevXuNjY3Uyo8fPy4oKKC6dyrg5uaG7zE7OzuEUM+ePfPz81NSUt62oYmBgUFkZGRhYaHi1czMzCoqKqTnlJaWyuczMDDQ3t5epvEd\/gh0dXVnzJhx7ty51tqjaNzYsWMLCgoePnzY5ppcLpfP50sHi2VlZfJnw9fX99atW9KfL0Lo0aNH1LSxsTGDwUAIRUdH5+fn3759+50OQGnKH2m7Kbjs5VcWi8UPHz5csGDBsX\/hUo3WEldwNZ45cyYhIYGab2Ji8tFHH0kkkoKCgvLy8p07d+L0jxw5oq+vT30Wb\/tBtJaBtz0Qaa3lXJlt5dnY2AQEBOB7zcTEhCAI6QyXlpYyGAyZlii4K+nvv\/+uZPMyTfHz86PRaL\/++iuLxXqrel4fHx8fH5+MjIwffvgBz0lNTT1+\/HhHZHLnzp1isVi+okcBfX19HIZSwzeoAUEQVJWTDBcXFx0dHdwCSWOhCUJIX18\/MiryvRkrtlu3buofv6RFPXv25HA427Zty8\/Pf\/PmTV5e3rFjx\/r06UOj0YKDg21tbdetW5eens7j8eLj4\/FvWWWqPFxdXZ88edKzZ0\/8G5TD4dja2qakpOCu\/5hIJGr4v1r8puNwOGKxWHHTyD59+qSlpZ08eTI\/P7+8vPz06dM5OTnS3Uwo0dHRrTX+cnd3Dw4O3rt3b5tfuI2NjdLZbm5uVry+Sujr60+YMOHmzZtt5sTFxUVfX3\/79u1paWlVVVWxsbEXL16UL2qKjIw0NTVdt25dSkpKVVXVixcvtm\/fLtObADMwMJgyZcoff\/zB5\/PxHIFAIPPZKX8gbW7b4pGqloLLXn7l9PR0gUAg3bTC39\/\/yZMnMiNMUBRcjVFRUWfOnImJieHxeHw+\/9q1a7m5uX5+fgkJCa6urlQvDBqN5uvrKx80yH8Qb5UBxQeC24JQZO641nIuv3cl7w4Oh4M\/el1d3YCAgH379sXHx\/P5\/IyMjP3794eFhcl\/zwwdOlQoFObk5OB\/SZKMj4\/n8Xj43+zs7OfPn+NpHo8nHUipk4GBQY8ePZ48eeLj4\/NWVX4EQezYsYPD4XzzzTceHh79+\/cPCAjAhccUsVg8TcqZM2fk03n27Jn0OsuWLaMWrVy5Mjo6OiIi4quvvqLT6cuXL1dmKwqOj1uLFVSCugjr6+vz8\/NjY2Opxjcyzws6nR4dHX38+PEzZ85opkJHmp+\/n4mJSVJSUudtekIQhJ+fn\/aMQ0+n09esWYMrTfh8vrGxcUBAAFWp8eWXX546dWr\/\/v2vX7\/mcrljxoxpsWxNHg5BpBuWuru7FxYWSteYxsXFxcXFSW+1Zs0aXMoijcvl0un0hIQEBTXTDg4Oy5Yt++uvv27cuIGbsyxfvlzmrsasrKyGDBmCW+nKmzhx4pdffvn3338PGzZMwdF99dVX0v96enq2eCerXGho6J07d6jv4tZyoqur+\/XXX584cWLXrl2NjY1WVlbTpk2T7+9Gp9NXrFhx9uzZ48ePV1ZW2tra9u\/ff\/z48Tdu3JDfdUhISFxc3G+\/\/YaP9MCBAwcOHKCWMplMql68TcpsK3+kqqX4speRmJjo7e0t3VXNx8dn7969KSkpvr6+8usruBpDQkL09PQuXbp09OhRgiAcHByWLl1qaWmZkJAg0yff39\/\/p59+kumng+Q+iBa1loFLly61diBGRkYkSUq3BfH395du0NpazuX3ruTdYW1tXVBQUFpaamVlNXPmzLNnz548efL169cmJiYhISEt3oAMBiM6OpoqVCBJcvv27fPmzcNNW\/7++286nY77l2VnZ+\/cubPFHydqEBgYmJaW9la1OdSGjx49+vrrr+Pj49+8eTNx4sSff\/75008\/pWJWkiSlbxZbW1v54V6Ki4ul1+nWrduPP\/6Ipy9cuIAQMjU1DQkJwaNNKrMVBX85x8TEiEQiHKaonPRFqK+v7+vrS9UYZmVlSV+f0dHRUVFRq1at+uuvv9Q0GmybampqHj9+XFZapumMvDVLK8vevXtreSNzAAAAoLPQltAEy87OTklO0fJ6RwqdTu\/l1at9Q3oAAAAAoEXaFZoghBobG1NTUvELC7SZk5OTZy\/Pju5iCgAAAHxotC40wSorKzPSM2S6uWoJa2vrHj17aLwbDgAAAPBe0tLQBCsrK8vOytaeAMXa2trF1aXFZmIAAAAAUAmtDk0wPp+fm5Or2SoeJyenbt27mZqaajAPAAAAwIegE4QmmEAgyM\/PLywo7LjOh\/LMzMzsHewdHR3f9sX0AAAAAGifThOaUGpqaoqKikqKSyorKztoF1wu19rG2tbWFroEAwAAAGrW+UITikAgKC8vr6yo5PP5fD7\/XQ6EIAhTU1NTU1OuOdfCwgLKSAAAAABN6cShiYzq6uqaNzW1tbV1dXUNjQ1NjU0CgUAoFIpEInyMBEEwGAwmk6mjo8Nis\/TYel26dOFwOAaGBgrenA4AAAAAdXp\/QhMAAAAAvAc0+Xo\/AAAAAAAZEJoAAAAAQItAaAIAAAAALQKhCQAAAAC0CIQmAAAAANAiEJoAAAAAQItAaAIAAAAALQKhCQAAAAC0CIQmAAAAANAiEJoAAAAAQItAaAIAAAAALQKhCQAAAAC0CIQmAAAAANAiDE1nAAAAANAuEV\/f0XQWNOD2hnBNZ+EfjOzsbE3nAQD14XA4ms4CAABoo5KSEk1n4R8MNput6TwAoD5wwQMAQIu05+uRKC0t1XQeAFAfAwMDTWcBAACAIgwmk6npPACgPnDBAwCAlmMwGNASFnxA4IIHAAAtxyAIQtN5AEB94IIHAAAtB+OaAAAAAECLQGgCAAAAAC0CoQkAAAAAtAiEJgAAAADQIhCaAAAAAECLQGgCAAAAAC0CoQkAajJnzpyof8XExFDzMzMzqfkff\/wxnjl37tyoqKhvvvkG\/xsbG7tly5YtW7Youa\/ExEScYGZmpvy\/b4vKYVxcXDs2BwCAtwKhCQAakJ6eTk1nZGS0uX5OTs6VK1euXLnSkZkCAACtACNjAqABaWlp1HSLocn8+fMbGxtV9cYfV1fXjRs3IoTs7e1VkiAAAHQcCE0AUCtTU9O6urrc3NympiYWi4X+DU1sbGyKi4up1X799dfnz5\/7+fmtX79+yZIlKSkpeH5UVNTChQuHDh2KEEpOTv79999fvXrl6ek5Y8aM6dOnI4SWL1\/er18\/mZ1mZWWtWLECIfTLL7+4ubkhhBobGw8cOJCcnFxSUmJhYREVFTV69GjqBUMikejgwYMPHjyor6\/38fEZMGCATIIKNr9+\/fqmTZsQQgcPHvz7778vX768fft2W1tbVZ9IAMB7C0ITANSKwWC4urqmpKQ8f\/7c09OzsrKSx+OZmZmZm5tLhybS3N3deTweXhocHGxpaYkQevz48ddff02SJEIoLi4uLy9P+Tw0NDR88cUXOEE6nV5YWLh\/\/\/7k5OT169fTaDSSJJcvX\/7kyRO88u3bt5OTk5XfnFrt3Llz586dQwjhTAIAgJKgrQkA6ubu7o7+rdPBRSY9e\/ZUsH50dDRVELJ69WpfX1+BQLBt2zaSJK2trX\/++ed169Y1Nzcrn4ETJ04UFxdzOJy9e\/devnz5v\/\/9L0Lo8ePHV69eRQjFxMTguGTIkCF79uxZuHBhTU2N8ptTLly4EBoaOnbsWA6Ho3zeAAAAQhMA1A2HJrglLO4yozg0kZeVlVVaWooQ+s9\/\/uPu7h4QEDB79mzlN7916xZCKCoqytHRkUajDR482MLCAiF09+5dhBBubGtra7tw4UInJ6ehQ4fi+iMlN6fMnDlz5cqVM2fONDIyequjAwB84KBCBwB1c3NzIwgiIyODJEmq1CQ+Pl75FF6+fIkncJSDEPLx8VFyW6FQWFFRgRA6c+bMmTNnpBfhOppXr14hhDw9PanaGW9vb1w1o8zmlN69eyt\/RAAAQIHQBAB109fXd3R0fPHiRW5ubm5uLovF6tq161ul0NTUhCfodDqeoFqwtkkoFOLGH46OjlZWVtR8giBws9z6+nqEkHSrETabrfzmFF1d3bc4JAAA+BeEJgBogLu7+4sXL86fPy8UCnv27ElFGEqytrbGE1lZWd7e3gihZ8+eKbmtnp6esbHx69evg4ODp06dimc2NTWJxWKCIBBCVlZWubm5qampJEniOdJdndvcHAAA3hG0NQFAoY57nwAAIABJREFUA3DjEtxo460amlRWViKEevXqpaenhxDasWPH8+fPnz59umPHDuUT6dOnD0LoypUrL168kEgkycnJY8eO\/eSTTw4fPowQ8vT0RAgVFhb++uuvhYWFN2\/ePHnypPKbAwDAO4JSEwA0ALcREYlESKq9iAJU1cnUqVMXLlw4cODASZMm7d27t6CgYO7cuQghQ0ND5fc+bdq0xMREPp8\/e\/ZsBoOBs9GtW7eJEycihEaNGnXx4kWhUHjx4sWLFy8ihAwMDKgqpDY3BwCAdwSlJgBogLm5ubm5OUKIIAg8BppiERERERERenp6urq6uA3HmDFjlixZ0r17dz09PR8fHzzKmZKMjIz27t07ePBgGxsbOp1ub28fHR29efNm3MvXwsJi3759kZGRFhYWhoaGYWFhX331lfKbAwDAOyLevHmj6TwAoD6qGvpds+rr68vKyhBClpaW+vr6CKH8\/PxZs2YhhLZu3fq2XZEBAECrQIUOAJ0Pn8+fM2cOQqh3796LFy8mSXLXrl0IIUNDw27dumk6dwAA8E6g1AR8WN6PUhOE0JEjR44ePSqRSKg5HA7n22+\/xR12AACg84LQBHxY3pvQBCFUVFQUFxdXXl6uq6tra2vbt29fXLkDAACdGoQm4MPyPoUmAADwXoIeOgAAAADQIhCaAAAAAECLQGgCAAAAAC0CoQkAAAAAtAiEJgCoQ3l5eY8ePVatWiU9c+3atT169CgpKUlNTR07dixCKDc3d\/Pmza0lMn\/+\/Nu3byOEvL29Gxsb29zpDz\/88Mcff7xVPpVJuba2tkePHrW1tQihoKCg6urqt9pFa5qbmzdt2jR48ODevXuPHj363r17Kkm23ahTgYeQaQfq8+oIubm5w4cPV7BCUFCQu7u7h4eHh4dHVFSUzIuQtBZ10Sp5kcubNWvWu188AQEB+ApXrB23WGt+++03Jcd0HjVqVG5urpLJXrx4cdmyZe+Qr3Zq8\/qUJ30GYMg1ANSEwWDcu3dPLBbj9wyTJHn37l0mk4kQcnJy+vbbbxFCNTU1qampbSa1e\/duHR0dleRKIBBIJ9VxKcsTCoX48LHFixczmcy9e\/dyudwHDx4sW7bswIEDyozi30GoUxEbG6upPLyjEydO9OzZUyAQXL9+\/auvvurdu3fXrl1bW1kkEtFoNBpNW36vtvtSXLx4sYWFhcrz09GGDBkiFAo1nQtNXgbSZ0BbrkIA3ns6Ojqurq5JSUn436dPnzo6OrJYLIRQQUHB2rVrq6urly1blpaWtnTpUoTQ33\/\/HRkZOWDAgF9++WXSpEnSSc2dO1cgECCEjh49GhUVNWDAgM2bN5MkiRAqKSmZPn16nz59Zs6cyePx8PqlpaUzZ84MCgqaPn16WloaQujw4cObN2+eM2fOjz\/+KJ\/yH3\/8sWrVqrFjx4aEhMydO7e8vFzBcV25cmX48OEDBw48duyYfMryOZw\/f\/6pU6eGDh168+ZNKpH4+Pjs7OxNmzbZ2dmxWKzIyMjo6Oj4+HiEUE5OzoQJEwICAsaPH5+ZmYkQys3NHT16ND7MCRMmxMXFffbZZ3379t27d2+bS588eUKdzNTUVDzd4vHiU\/HFF1+IxeLhw4cXFBT06dNHLBYjhBoaGnx9fWVGXjhy5EhkZKSvr+\/48ePz8\/OlF\/3555\/h4eH+\/v7z5s2TflEiQqi4uHjGjBmBgYHBwcHU66M9PDzwjhBC3t7eePry5cuDBg0KDQ1dvXp1c3MzQogkyS1btkRGRn722WeJiYmtfUA6OjpDhw61trbOzs5ubm5es2ZNWFjYqFGjLly4gFcICAi4ceNGeHh4VVWVfFZbPP8TJ05cunRpSEgItesWUw4KCjp06FB4ePjAgQMVlC60eNFSF3lSUtLIkSPDwsIWL14sP9qF\/NJffvkFx\/ct7l3+tmox51hzc\/PKlStDQ0P9\/f0XLVqETwiV2xkzZii4xRTfRJWVlZ9\/\/rmfn19kZOSNGzcQQteuXcMlW4sWLdq1a1dUVFRYWNh3332HP\/3ExMThw4eHhISsXbsWv1CzRQkJCSNHjvT19R04cCBVYtfQ0LBw4cI+ffp89tlnVHGL\/I0pfRlQCbZ4FPKXBHrL67PFS4g6A1lZWRCaAKA+AwcOvH79Op6+fv36wIEDpZcaGRn9+OOP7u7umzZtKioq+vHHH3\/77bdTp061VjodGxt7+PDhI0eOnD17NiUl5dChQwihr776ytXVNSYmZurUqVevXsVrLl68OCAg4MGDB5MmTZo\/fz4uqT516tTnn3++YsWKFhM\/ffr06tWrb926JRKJTpw4oeCgHj16dPbs2e++++6HH37AzxIq5RZziBD6888\/d+\/ePXjwYCqRhw8fRkRESBeizJkzZ\/r06SKRaP78+SNHjsQRxvz58\/H3cmZm5oQJE+7cuUOS5PLly3fv3r1v377du3fjh4fipW91vDt37qTT6RcuXHBwcDA3N8fPvAcPHvTq1Uv6bc8lJSWbN2\/etWtXXFycm5sbdaQIIT6fv3Hjxv3799+5c+f169f4Zc6UHTt2WFtb371798iRI\/v376cedTLy8vI2bNiwc+fOc+fOZWdn4wdtXl6ehYXFjRs3QkJCfv3119YOTSgUXrt2rbi42MnJaefOnZWVldevX9+6devmzZupIrpbt25dvXqVIAiZrLZ2\/p8+ferh4XH\/\/v2wsDC869ZSfvr06Y0bN77\/\/vsNGzbgy0NeixctVl1dPW\/evBUrVty5c8fKyuqbb75Rfqn83lu8rVrLOULoypUraWlpFy5cuHHjRlFREX7YK3+LKbiJdu\/ebWdnFxsbu3Tp0vXr18tk+\/z58ydPnjx79uyNGzeSkpJqamoWLlw4f\/78u3fvGhkZKajNWbFixeTJkxMSEubNm0dVDd+6dWvo0KExMTGhoaH4vRat3Zj4MjAzM5NOU+YoWrwk2nF9yl9CmFAonDdvHoQmAKhPRETEnTt38Ojyt2\/fjoiIaG3N69evR0VFffTRR4aGhuPHj29xnYsXL44ePRq\/4W\/cuHF\/\/\/13dXV1amrqggULmExmSEhIQEAAQujVq1e5ubmTJk2i0WgRERFsNvvx48cIIV9fXz8\/P4IgWkzcw8OjR48eurq6\/fr1U1zpPnr0aDqdHhAQoK+v39DQIJ2yfA7xJiNGjLC1tZVOpKioiMvlyieenZ1NkuSYMWPodPqIESNYLBb+SWpmZta\/f38Wi+Xv7z9gwABDQ0NnZ2cjIyP8g0\/x0nYfb79+\/WJiYhBCt27dioqKkl7E5XJv3brVvXv3xsZGBoNRV1dHLWKz2QwGIyMjg8FgHDt2bMyYMdIbLl26dPny5Uwms7m5mcFgtLbrq1evDh061MnJydTUdN26dV5eXgghBoMxcuRIgiAiIyNb3HDChAleXl4+Pj7r1q375ptvXF1dL168+Pnnn7NYLHt7+\/Dw8GvXruE1p06dqq+vL5\/V1s4\/k8n89NNPCYIYMGAA3nVrKY8ZM4bBYPj6+hoaGuLLQ0aLFy3l1q1b7u7uvXv3ptPpU6ZMuXfvXn19vZJL5ffe4m3VWs4RQlFRUYcOHTI2Nq6vr2exWHV1ddK5DQ0NVXyLKbiojI2Ni4uLS0pKBg4ceOfOHZlzMnDgQGNjY1NTU19f35qamoSEBGdn56ioKAaDMXv2bDab3eJFghA6duzYyJEjcfhI7RE3NmIymbNnz66oqHj16lVrNya+DGTSlDmKFi+Jdlyf8pcQlpycbGhoCG1NAFAfQ0PD7t27P378mM1mW1lZmZqatrZmRUUFVV\/eWsV5aWnpo0eP8NcKQRAWFhY8Hs\/MzAxXEiGE8OO\/rKxMJBLhZrYEQTCZTFx+q7g+3sXFBU\/gljEKuLq6yqxJpSyfQzzf3NxcJhErK6vKykrpOQUFBdnZ2bq6ulZWVtRMa2vrioqKLl26cDgcHFTR6XRjY2OZDCheSsHnQfnj7dev37p16+bOnRsTE7NkyRLpRQRB7N+\/H\/\/i1NfXl\/5k9fT0vv\/++3379q1YsSIkJGTFihWWlpbU0qKionXr1lVVVTk7O7e4a5zJsrIyZ2dnPAe3F8nNzXVwcNDT01OQ5z\/++EP6NdQkSZaXl69cuZIgCHx++vfvjxfhj0Y+qzwer8Xzb2Njg3eNGyUoSJk6sa01X2jxoqWUlZVlZmbiBpUEQXTt2rWhoYF6fLa4VHpzmb3L31YKco4QampqWrVqVXp6ur29PX58vtUtpuCimjx5ckVFxWeffcbhcKZPny7z80NmQx6PR50WHR0d+duHEhsbu2\/fPiaT6ejoSM20tramUrOysuLxeK3dmC1+J8hnRv6SaMf1KXMJUcrKymxsbCA0AUCtBg4cePXqVX19fZnaHBkmJiYVFRV4WuaZTTEzMxszZszQoUMRQtXV1Twej8vl8vn85uZmXV1dhFBGRoaLi4upqamlpSVViZ6ZmWlvb\/\/q1avWykswxUulyT9yqG3lc9jaJviX\/dKlS6k6nT\/++KOmpmbSpEllZWXUauXl\/4+9+w6I4vj\/Bj57jXb0owmCCIIiqCiIAoKFYu8VifVnsHeNLdbYJSrWxBijJvZgJVIU7GJBBQsoCApIl3a0gyvPH5vcl4c7EI3CEt+vv+52Z2c\/O7O797nZOchWOrjyUeT\/EzE5OVkx5jq0b98+MzMzJCTEysqqRhhhYWH37t0LDg7W0dG5cOECPbhCKy4utrGxOXXqVEFBwaZNmw4cOEBPeaYtXrz422+\/HTx4MEVR1U8JqVTKZrPfvXtHPwQRCATy8+H58+f005n695H8GPX09A4ePEh\/tqWlpcnnmdI9ohjq0KFDlbZ\/jV3XUfMHKT1p5Wv19fW9vLzWrl1LCJFIJHFxcdVbvu61ihQvq7ojDwoK0tfXDwsL4\/F49KPP+l9i58+fr6ODcnNzlyxZsnr16gcPHsyaNat6PkQUmtfAwODdu3f0a6FQmJ6eXlud69atO3PmjJWVVVZWFp0qEUIyMzPpFxKJJCcnx9jYuP4XpmIwAoFA8ZT4hPOztrV0VXigA9CgevXqFRUVFRER4eXlpbQA\/VHUq1ev8PDwtLS0kpKS2n726eXldfDgwdzc3KKiokWLFoWHh2tra7dr12737t0SieTBgwcJCQmEkBYtWnC53JMnT0okkuvXr0+YMOFjP9I+mWKEtZXs3r17ixYtFixYkJ6eXl5eHhIScvr06TFjxtja2spksuDgYJlMFhISIhQKqw8DfAI+nx8fH5+ZmSkSic6ePVvPrehOYbFYHh4egYGBin1XWFiopaWloaEhFApPnTpV\/acWqamp33zzzcuXLzU0NPh8fo35LoWFhSYmJhRF0d1Nb8jn8+lpDSdOnKCLeXt7X7hwITU1tbCwcOPGjRkZGZ92+N7e3tu3b6+oqEhLS\/P3909NTa2+VjHU+rd\/3TVX9\/jx4+LiYvlbpSetnKenZ2RkZGxsbFVV1Z49e4KCguq\/VpHSy6qOyAsLCwUCAY\/HS0lJiYyMrKqq+lyX2LZt2\/bt21dRUWFgYCCVSmubhUPr0qXLy5cvIyMjpVLpsWPH6Ny6tLT00aNH1f\/3eGFhIY\/HEwgEEonk0KFD8pMwLi6Ofo588ODB5s2bN2vWrP4XpiKlp8TnOj8JIR06dMjIyEBqAtCgdHR0LC0tdXV1lY7KWllZFRQUzJ4928rKas6cOf7+\/n5+fh4eHvTIZw29e\/f29fUdNWpUnz59jI2Np0yZQgjZuHHj06dP3d3d9+7dO27cOEIIi8XauXNnSEiIm5vbjz\/+GBQUpLS2L0FphLXZuXOngYHB+PHju3XrdujQoe3bt7dr147D4QQFBZ0+fdrV1fXIkSO7du36l79tbtWq1dixY\/38\/Nzc3KytreuzSffu3X19fekbvaenZ15enmJqMnDgQHqewbRp00aPHv348WP574\/s7e2HDBkyceLEbt26paWlzZkzp\/qGS5cuXbx4cd++fem\/bUN\/NV+yZMmePXtcXFzevHlDnyd2dnazZ8+ePHly3759LSwsxo4d+2mHT8+C9PLyGjdu3JQpU5ydnauvVQy1\/u1fd83VTZo06fHjx9WXKJ60ciYmJj\/88MPy5cvd3d1jY2PXr19f\/7WKlF5WdUQ+derUsLCwXr167dixIyAg4MCBA5mZmZ\/lEluwYEF0dLSHh8eUKVMWLVpkampaR2FNTc3t27dv377d09MzMzPTzc2NEPL69Wt\/f3\/6tzC0Vq1aDRo0qHfv3sOHD7e1tTU1NaX\/TIiHh8ehQ4fc3Nxu375NL\/moC7MGpafE5zo\/CSFqamq7du3Cfx6Gr0tT+c\/Dr169On\/+\/MKFCymK2rBhg76+fkBAQGMHBeTu3bvbtm37888\/GzuQJiwqKsrAwMDe3r7hd\/0fu6z27t0bEBDwwdlgTRHmmgAwkZWVFYvFGjVqlFgsbteu3YQJExo7IiAVFRWnTp3y8fFp7ECatvT0dE9Pz0bZ9X\/pssrNzbW0tPxP5iWEEIyawNelqYyaAAONGjVKTU1t586d1f+iCQB8dkhN4OuC1AQAgOEwDRYAAAAYBKkJAAAAMAhSEwAAAGAQpCYAAADAIEhNAAAAgEGQmgAAAACDIDUBAAAABkFqAgAAAAyC1AQAAAAYBKkJAAAAMAhSEwAAAGAQpCYAAADAIEhNAAAAgEGQmgAAAACDIDUBAAAABkFqAgAAAAyC1AQAAAAYBKkJAAAAMAhSE4AGcu\/ePYqiKIqaNWsWvWTFihX0kpCQkJiYGIqiNm\/eTAiZN2\/esGHD6qhqwIABampqhJDAwECKou7du\/fBvf\/0008URYWFhX2OQ1Hi2LFjdnZ2DtWsWLGCEOLo6FheXq50k1mzZkVGRn6w5sjIyLlz537mcAGAwTiNHQDAVyc6Opp+UT2laNas2erVq93d3QkhDx8+TEhIqE9Vrq6uq1evNjMz+xJxfqxevXrt2rWrxsL9+\/fzeLxGiQcAmiiMmgA0KDMzs9jY2PLycplM9uDBg+bNm9PLMzIyVq9efevWrWnTpt26dSsvL69Vq1aEkPT0dG9vb319\/VWrVvH5\/G+++aZ6bXfu3Fm9enV6ejoh5PDhw7a2tpqamv369Xv\/\/j0hRCaTrVq1ysjIqG3btjExMfKtFEuuWbOGoqgjR47Y2dnFxsZ+xuOdMWNGZWXlsWPHVq1aNXLkSHd39xkzZmRnZ1cvEx0dPWTIECcnJ19fX3ocRSQSrVy50tXVddCgQY8fP6aLTZ48+e7du\/Trb7\/9ls7wXF1dDx8+3KNHD19f32PHjhFCpFJpYGBgt27dhg8fvnr16qCgILrCNWvWeHh4DB069MKFC4SQpKSksWPHLlq0yN3dfcyYMfUZeQKAhoHUBKBBde3ataqqKiYmJiEhoaioqEuXLjUKrF+\/3snJSVdX99q1a4SQyZMn37x5c+bMmZcuXSotLa2t2jt37kyYMKFNmzbr1q27ffv2hAkTCCFHjx5du3atk5PToEGDDh06VEdJ2ty5cw0NDTU1NT\/zMRNCCPnzzz9Xr1599epVsVh88uTJ6qtWrFjxzTffREdHz5w5MzAwkBBy4MCBN2\/ehIaG7t69+9KlS3XX\/Pjx44iIiPXr12\/cuLGysvLSpUuPHj0KDQ3dsGFDSEgIXWbv3r25ubnh4eE7duwIDAyMi4ujN3RwcLh586aHh4fieA8ANBY80AFoUEZGRtbW1tHR0QKBQFtbu02bNjUK6OnpqaqqstlsU1PTzMzM8PBwPz+\/NWvW9O\/fv3PnzrVVe+TIEULI999\/b2xsHB0dffLkyXfv3v32229cLvfkyZN8Pj8hIeHs2bO1laQrWb9+\/bRp0z750K5everg4CB\/u2DBgup5j4ODg52dHSGke\/fuycnJ1Tf8448\/DA0NRSIRIUQoFBJCwsPDV6xYoaWlpaWlNXr06Pj4+Dr2O2LECA6H4+TkpK2tXVZW9tdff40bN05DQ8PGxqZHjx50mYsXLwYGBqqqqpqbm\/fo0SMsLGzIkCFcLnf48OEURfn4+ISGhn7ygQPA54XUBKChde3alU5NXFxcWKy6Ri5TUlIIIe3btyeEODo6stns2kqmpqYSQpycnORLXr9+\/ebNGxsbGz6fTwhxdnamUxOlJekXbm5u\/+KwlM81kbO1taVfKB7F7du3Dxw4wOVyLS0t6SV5eXnyCTSmpqZ1pybymunGzMnJMTIyopcYGhoSQmQyWXZ29sqVK+lJx3SodM3q6uryDQGAIZCaADQ0V1fXdevWGRoaDho0qLYyMpmM\/PPJSn8wP3\/+XCKR1Fbe0NCQx+OVlZWx2ezS0tKSkhJ9fX2BQPDkyZPS0lINDY3nz5\/XUTIqKoooSxo+IzonUJSbm7tu3bozZ85YWVllZWWNHDmSEGJgYPDu3btmzZqRfw6fRjcLIaTGuEt1enp6OTk58spNTU0pitLT0zt48CDdnmlpaTweTygU1hYSADQufFcAaGiurq4ZGRmxsbGKE01ofD6\/sLAwPDzcysqqXbt2p06d2rBhQ92PWkaMGFFZWTl9+vQ\/\/vijQ4cOzs7OEonE29u7qqqKfh505syZOkp+\/oOst8LCQh6PJxAIJBLJoUOHqqqqCCE+Pj579uwpKSnJysoKDw+nS2poaFy7dk0qld64cSMjI6O2Cn18fH7\/\/ffy8vLXr1\/T83UIId7e3tu3b6+oqEhLS\/P396eHjgCAmZCaADQ0e3t7eqqpi4uL0gJTp041NTVdtmwZRVEnT550cHDYsmWLq6sr\/fRBqX79+gUFBV25cmXq1KktW7a8cuWKiorKwoULx48ff+vWrWPHjvn5+dVR8rMcV2RkZIcOHTp06ODo6Ojo6DhkyJD6bNWqVatBgwb17t17+PDhtra2pqamW7dunTx5spmZma+v77fffiufsDJlypSEhAQ3N7fNmzfXltURQoYNG2ZjY+Pt7b1hwwYvLy\/6D8DMnz9fJpN5eXmNGzduypQpzs7On+OIAeCLoIqKiho7BoCGo6Wl1dghfISKiop58+aZmJjMmTMnIiJixIgRa9asWblyZWPHxWiXL18uKysbNmxYZWWlv7\/\/kiVLOnbs2NhBAcBHQGoCX5emlZoQQn7++ecVK1bk5ubyeLyRI0f+9NNPdYydACEkLy9vy5Yt9NzeoUOHjh07trEjAoCPg9QEvi5NLjWhFRUVaWpq4ockAPA1wC90AJoAbW3txg4BAKCB4EsYAAAAMAhSEwAAAGAQpCYAAADAIEhNAAAAgEGQmgAAAACD4Bc6AA2h59Koxg7hI0Ru7NHYIQDA1wupCQDU1LQSKQD4j8GfXIOvSxP9k2sAAF8PzDUBAAAABkFqAgAAAAyC1AQAAAAYBKkJAAAAMAhSEwAAAGAQpCYAAADAIEhNAAAAgEGQmgAAAACDIDUBAAAABkFqAgAAAAyC1AQAAAAYBKkJAAAAMAhSEwAAAGAQpCYAAADAIEhNAAAAgEGQmgAAAACDIDUBAAAABkFqAgAAAAyC1AQAAAAYBKkJAAAAMAhSEwAAAGAQpCYAAADAIEhNAAAAgEGQmgAAAACDIDUBAAAABkFqAgAAAAyC1AQAAAAYBKkJAAAAMAhSEwAAAGAQpCYAAADAIJzGDgDgK9JzaVRjhwCfR+TGHnWsRUc3CehExkJqAtCg6r4bQpNQnw8tdDTDoROZDA90AAAAgEGQmgAAAACDIDUBAAAABkFqAgAAAAyC1AQAAAAYBKkJAAAAMAhSEwAAAGAQpCYAAADAIEhNAAAAgEGQmgAAAACDIDUBAAAABkFqAtA05BWLei6N+vHsy+oLd55\/1XNpVHZhRXxa8bQ9Dwkhb7JLf778urZKVh59evtFHiGk9\/fXKyolH9zpnktJ5+6++6g4B6+7VVxWVX3J8eup+\/+qNaT6yMyv+L+d9w+GJxNC9lxK\/P7o081n4recif83dTJWU+loRXV39MA1N0srxA0TSaNrKp1Yz5o\/wdXY7CtPssmnXv74934ATQabRUUn5EmlNiwWRQiRycjd+DwOm0UIsTBUnzPQhhBSUiGOTy\/+YFWbJrbjcT7PN5MqsZRbZ1U92xtWiWX\/Zhe3X+S2t9Sd7NOSEDKkq1mlWMpmUf+mQob7ajv6v6RJdOJnrFlOIpVRFJWZXyGRykj9zgrFUwupCUCTweWwrEw0Y1MKHa10CSHPU4vMDTXKRMWEkPS88p0XXm2e2H7DyReFJZXrT7xYPtruamz2L2HJLIr06mAcm1ywM6CjvKrlh5\/+udxNlccOvpN+5lYaRRFPe8Mpva0oimQXiraciU\/KENqaaWmpc0z11QghOUWibX8mvHontDbhT+nd0tZM68\/b6e+FopSsUmNd1TmDbKrHGRWXc\/7uu0qxdLi72eCuZtef5uYLK6f2tVr9x7OWJvzQh5mVYql7W4PZA1pFPc356Z9vVO+Fleu+sU\/OKq2skkzyaUkIOX49tbxS0sla9\/j1VIlUqs3nsiiqxtpJ3pYl5eJNp+OfvS10aKFTUSkZ092io5VubErh7guJ+SWV7VvqzBtko6nOPXf3XXJWSWKGMLugws5ce84gGwNtlYbquo\/TJDpasWQdHc36J5WsFEt3XUi8E59bWSXt1Epv6Ug7FS6rnpE0oR4kTaQT6ZpDY7KeJBekZJcWlFS62QkcrXT\/iHpLZGRaP+surfW3BSeoctk3nuWKqiQutvrzhtiq8djCcvH2cy8fJRVoqXPG97Ls1cGIEDJgzc3Fw1rvOP9yRv9WwbfTCCEaKmypjNBnRaVYuudS4q3nefqavBHdmns7Gr\/OLNl9KdHeQvvBq\/z9M52qX7N4oAPQlHg6GFx\/mku\/vvEs18PeoPpaLXXuslF2ts21lo+2y8yv2Hspacuk9vtnOt9LyFNa28PE\/D9vp+0M6HhgducXacVnbqcRQjademHdjH9muftw9+ZRcX\/va+2xZ45WusEr3Ie4mq38\/Rk9Mn+Rt9X1AAAgAElEQVTpfsZoT\/PZA21qVBubUvjLHOcFQ213X0qqEkurrwp\/lLVvhtOB2Z1vPst9klLYq73RqaWup5a6zh5oY26g1slaTzHI9pY6ozzMe3cyGdezhdKj2PdXUjN9tT+Xu7u3NYhJKiCEFJdVrTjydPYgm9NLXQ21VTedSaBL\/vUgY95g2xNLXMVS2cX7GXW0c6NjfkcrLSlXo6Ply6PichLSi3+d63LsO9fM\/Ar6gUX9I2lCPUiaQifK3X+Vv3Vyh0PzXK7F5VyPyzk0t\/NgV9OTN1LptVdjs7dO7nBiiauwXHz4SgohZG9IogqXdXqp60o\/+6CLiam5ZXTJ2y\/yji7s2rO90VC35oO6mg13by7fxZGrb94XVx5b3HXVWPufL7+OTysmhLxMK9ZQ5eye1qnGNYvUBKApcbMzuBOfJ5URQsjtF7ludga1lbzxLMfD3qC5QF1TjTOwi6nSMhGPs\/o6NTPQVlFXYQ90aXb1SXZxWdWLtOJJ3i25bKqzjV5HKx1CSEZ++Zvs0qGuZiyKuNkJVLjsuDdFhJB2LXTaW+pQCo9W+jqZsFiUo5Wuhgq7\/P9\/kt3dwVBbg6vL57az1Ckp\/\/vDLK9YtOP8y+Wj26pwP+WOFBWXM7a7BZtF+XY0FmipEEJuv8hrbabp0EKbxaKGu5tFJ7wvE0kIIa2ba9mYavI4rK6t9eV7ZyaGd3RtJeWUdjQhpFtbgx3fOmprcMtEYhUuq7RC\/FGRNKEeJIzvxOq6tNY31FbR1+RZmfD7ODVjsSgXW\/3swgp6bZ9OJhaG6mo89iQfSzrZuvE0d5J3Sy6HZW3C79HO8Nbzv7Oi4e7N1VXYtcU\/2tNchcsy1Vfr2kZw\/WkOIYTDYY3sZs5hUzWuWTzQAWhKNNU4lsYaT98UqnLZhjqqunxubSXzikWCf4a76Q9sRTlForiUwqux2YQQihCBtkq+sFJPkydPEYx11QghuUUisURGT9yjCOGyKZlMRgipbTjdupkm\/YKlMCOkpTGffsH+JwmRysj6ky9GdTO3NuHXrEhW5yNqmYwQUlohrhJLtTX+bgd9LRX6uBIzSibtuE8H3MJQnc6Q5Htn1XaHZgyGd3RtJeUUO5omqpIGBie8eic0FajR3+Y\/KpIm1IOE8Z1YI1T6BYuidPhcQkj16VxGuqr0CxM9tfdCUUWlpKJKIo\/TSEc1t0j0d\/C17EUmI3nFosDgBIr6u+fc2hoQQvQ1efR+alyzSE0AmhhPe8NrcTnqKmxPe8M6iunwee+L\/75fvBdWKi2jy+f1d25GPycuLqvKF1bqaaoUCCsrxVJ6clxihtDKhK\/L5xloq\/w6tzO9VWJGiam+WmZ+Zm2fDnVMUVXc5Ni1t2wWVX3gV\/4Zl5pbZqCjWqN8jbXqKhwWiyouq9JS5xJCCoQiQogun9utrcGCobaEEIlUlpBWrK\/JU7p3JmNyRystmZ5XLi9QW1MfikjW0+T9sagLl8Pa+mcCIaT+kYQ\/ympaPUiY3Yn1Jx8+yS6o0OXzVHlsFS77vVBEZye5RSL6+iK1X\/sURXQ0uFsnOwq0eISQzPxyDptVXFb1T6JS85rFAx2AJsa9reBOfN7N57nubZWPD1dWSQkh7nYGN57lZuSXl4okl2p5Ku\/R1uDE9dT3wkphufiHEy9uPMvVUue0Mdf6LSJFKpXFphQmZZYQQswE6lwO6+K9DKlUFp3wfsGBx5\/rEyI+rfjsnfSlI+3kFaqrsGOS8isqJTlForsJ72uUV1xLUaRbW8GJ66lSGbn6JDu3WEQI6dJacPtF7ovU4iqJ7PDVNwfDUz5PuA2LyR39yadEUVmVHp\/H5bDScstuv8gTS6QNfMo1MCZ3Yv2FxWSm55VXVEl\/jUihD8SjrcGhiBSxRJaSXRoZm+1qJ1B2aP\/fw9xubQ1\/CXstqpJmvC+fvf9RRn559bU1rlmMmgA0MVrqXHMD9YpKCf39owYLQ42isqpVvz9b428\/2aflnP2PNNW5ng6GL1KLFAt7Ohimvy+fvuehqErqbifw625OCFkyos3m0\/FD19+yMtEc7tacEMKiyJqx9j+efXkg7LWBlsoaf3s1nvLHyR\/r3N308krJzH0xhBCKkDGe5l4djONSCv223JVIZV1a17zfyddKZTLXNn\/f62f0t9l46sXw9be6tzO0NuGrctmG2iqLhrfZcib+vbCytZnmdyNaf5ZoGxiTO\/qTTwn\/Hi3Wn3geGpNp21zLv4fFseupbnaChjzlGhiTO7H+3NsarD3+LKdQ1Mlad7KPJSFkev9W288ljNh4m6\/KmdG\/laWRRo1N7C20fzjxXFvjf0c9pY9V0PmXYzbf4bBZY7pbtLfUeZ1ZIl9b45qlioqUNAHAf5WWllYj7r3n0qjIjT0aZl\/JWaXhjzID+lhTFNl9MVGHz\/PvYdEwu25gh6++6WSta2+hnVskmrkv5tA8l9om4n0uH+xHdDTzoRPraVtwgl1z7b7OJg25U4yaAPw3tTBUZ7Go6XsfiiUyO3Otkd2af3ibpsmpld7vkW\/yikQqPNbSkW2+dF7CNF9PR\/+HoRNrQGoC8N\/EYlHf9rZq7CgaQltzrY0T2jV2FI3m6+no\/zAmd2L\/zqZa6g2dKiA1AQAAAOVam2k2\/E7xCx0AAABgEKQmAAAAwCBITQAAAIBBkJoAAAAAgyA1AQAAAAZBagIAAAAMgtQEAAAAGASpCQAAADAIUhMAAABgEKQmAAAAwCBITQAAAIBB8D90ABpUz6VRjR0CNAR09H8AOrGxUEVFRY0dA0DD0dLSauwQAACgLnigAwAAAAyC1AQAAAAYBKkJAAAAMAhSEwAAAGAQpCYAAADAIEhNAAAAgEGQmgAAAACDIDUBAAAABkFqAgAAAAyC1AQAAAAYBKkJAAAAMAhSEwAAAGAQpCYAAADAIEhNAAAAgEGQmgAAAACDIDUBAAAABkFqAgAAAAyC1ASgIWRnZ9vZ2a1atar6wnXr1tnZ2WVkZMTFxY0cOZIQkpSUFBgYWFsls2bNioyMJIQ4OjqWl5d\/cKebNm06duzYR8Xp6upaWFhYfckvv\/yydevWj6qkhvT09MGDB+\/cuZMOadasWcuWLVu+fPm\/qbNhyPvlc5k6depnrC0kJOTixYvkI\/to7ty54eHhnzGM6h49ejRu3LjOnTt7eHisXLlSKBR+oR3Vh7z75A1VN8WW+ewnQG0iIyO9vb1v3LhBCBk6dOiRI0e8vLzOnTv3JfZ18eJFOzu7kJCQ6gsHDBjg7e1Nqp1LdTeai4uLUCisf\/sMHTo0KSmp\/kFy6l8UAP4NDodz\/fp1iUTCZrMJITKZ7Nq1a1wulxDSsmXL77\/\/nhBSXFwcFxf3war279\/P4\/E+S1SVlZV1V9W3b9+qqqp\/s4vIyEhnZ+c5c+YQQvz8\/CorK+kWYD55v3wut2\/f\/oy1paWlSSQS8jn66NPUOHmePXs2Y8aM1atXd+vWraCgYPPmzStXrty+fXvDB0aTd5+8oT65hi8tODh48eLFHh4ehJB169YJBIL27dubmZl9od2pqamFhYX169ePfpucnJyRkaGnp0eqnUv1abTP2z5VVVX0\/ZBg1ASgwfB4vNatWz948IB++\/jxY0tLS1VVVULI27dv161bV1hY+N133z179mzRokWEkJCQEC8vLx8fn6CgIH9\/\/+pVzZgxo7KykhDy+++\/e3t7+\/j4BAYGymQyQkhGRsakSZO6du06ZcqUvLw8unxmZuaUKVNcXV0nTZr07NkzQsiRI0cCAwOnTp26efPmGnFevnx54MCBvr6+f\/zxByEkLCzs1KlThJC5c+fu27fP29vbw8Nj7dq1EokkJCSkxz\/s7e2joqL2798fFBRE1\/PLL78EBQU9fPjwl19+uXTp0r59+\/bv33\/u3Dlra2tLS8urV6\/SJYuLi2fOnNm1a9eZM2dOnjw5OjqaEPLgwYMhQ4Z4eHjMnz+\/qKiIEHLs2LFVq1aNHDnS3d19xowZ2dnZShv50aNH8raKi4ujXx87dmzu3Ln9+vXr0qXLsmXLLly40K9fv759+16\/fr36thKJZPXq1a6urq6urrt27ZL3C71WsanlRCLRypUru3Xr1rlz57lz51ZUVBBCJk+efPfuXbrAt99+Gx0dPX36dIlEMnDgwKqqqsTERD8\/PxcXl9GjR8fHxxNCkpKShg0bRvedn5\/fnTt3xowZ4+np+fPPP9OVHD161MvLy8nJafTo0SkpKTdv3vz999+PHz9+5MgReR\/FxMQMGjTIyclp5MiRycnJhJCioqI5c+Z07dp1yJAh8nMvKSlpzJgx3bt3X7NmTY2PnxEjRtAd6uLiMmzYMEKIg4ODvIyjo6NEIklISBg\/fvzOnTv9\/Pyqb7tx48YFCxb4+vqqq6ubmpquXbv2zZs3paWl9FnUp08fV1fXOXPmFBQU0KfTmjVrunfv7urqeuTIka1bt\/bs2fObb75JS0v74FrFtiWEuLq6Hj58uEePHr6+vvRgId191Rtq+fLlR44coTfcuXPnli1bapw\/NVpGfgIonn7v3r2Tn\/wdO3akryPFtlq\/fj1dplu3bnZ2diUlJYrBHzp0KDo6etOmTTdv3pw8eXJxcbGRkVH79u2XLl1KH5rSW4HiCal4hda8PP7h6Oj45MmTsrIy+m14eLinpyf9mj6Xqjea0iuUJm8fkUi0Zs0aDw+PoUOHXrhwgV577969gQMHuru7r1u3TiwW0wsVL+1Zs2adPn26f\/\/+V65ckdeM1ASg4fj6+spHjMPDw319fauv1dHR2bx5s729\/datW9PT0zdv3vzLL7+cPn26xieo3O3bt48cOXL06NGzZ8\/GxsYePnyYELJkyZLWrVvfuHFj\/PjxoaGhdMn58+e7uLjcunXL399\/1qxZ9DD76dOnJ0+evGLFihrVPnz48OzZs2vXrt20aROdAMmdP3\/+1KlTZ8+ejYiIePDgQb9+\/aKioqKiopYvX96iRYuuXbsqBunk5DRx4sShQ4dOmzZN6VFs2bLFzMzs5s2bXl5e9C27sLBw5syZK1asiIqKMjExWbZsGV3yzz\/\/XL169dWrV8Vi8cmTJ+tqaAW3bt365ZdfLl68GBoaGhoaeuHChbFjx\/7666\/Vy1y5cuXp06eXL18+ffr00aNH37x5I1+ltKnlLl++\/OzZswsXLkRERKSnp9MP3RTt3buXzWZfuHCBoqhZs2YNGTKEzj9mzZpF37jj4+P9\/PyioqJkMtny5cv3799\/4MCB\/fv3V1RUZGRkBAYG7tu3786dO23atDl8+HC3bt38\/f3HjBkzbtw4+S7WrFkzadKku3fvduzYcf\/+\/YSQtWvXmpiY3LhxY9KkSbNmzaI\/ri5evEiniaGhoffv368e5OnTp6OiosLDwy0sLGokxNU9e\/aMz+cfP35cvqSysjI2NpZ+KEDT0dE5e\/ashoZGamrqqlWrtmzZcv36dV1d3Y0bN9IF4uPjw8LC1q1bt2nTJj09vfDwcENDQ\/kHW91rlXr8+HFERMT69es3btwoP3WrN1T37t3lV1NkZKSXl1eNGupomRqnn6mpKX3y\/\/HHH3w+f\/jw4UpDWr58OV2sb9++gwcP5vP5imUmTpzo7OxMZ7eKa5XeCmo7IWtcobU1FJfLdXNzk9cWERFRveNqNJriFapo7969ubm54eHhO3bsCAwMjIuLKy4unjNnzqxZs65du6ajo0M\/zant0j5x4sT+\/fv79OkjrxCpCUDD6dmzZ1RUlFQqJYRERkb27NmztpLh4eHe3t4tWrTQ1tYePXq00jIXL14cNmyYsbGxhobGqFGjQkJCCgsL4+LiZs+ezeVy3d3dXVxcCCFpaWlJSUn+\/v4sFqtnz55qamoxMTGEECcnJ2dnZ4qialQ7bNgwNpvt4uKioaEh\/15F8\/X11dXV1dfXd3JyKi4uphdmZ2evXbt227Zt9AjQxwoNDQ0ICOBwOIMHDzYyMiKEXL161d7evlOnTmw2e9y4cdevX6e\/eTs4ONjZ2amoqHTv3v1jJzF4enqamJgYGBjY2toOHTqUzWZ7eHhkZGRUL6Orq1tUVJSYmGhiYnL\/\/v0WLVrIVyk2dfUNvb29Dx8+rKurW1paqqqqWlJSUncwL1++lMlkI0aMYLPZgwYNUlVVpYeyBAJBr169VFVVO3fu7OPjo62tbWNjo6Ojk5+fb2BgcPXq1VatWpWXl3M4nNp2oaOjk5iYWFJSsmTJki1btojF4oiIiJkzZ3K53AEDBqxYsYIeq\/f19dXW1tbR0XF2dlbakkFBQWZmZkOGDKntELhc7sSJE+XD74SQzMxMNputra2tWPjq1ave3t4ODg5cLnf27Nnh4eH0t\/zBgwerqKjQTzGGDx\/O4XBcXV3lnVL3WqVGjBjB4XCcnJy0tbVrnLo0V1fX2NjYsrKy1NTUgoKCDh061ChQR8soPf0kEsnChQunT59uZWVVR2A3bty4fv36p82vUnorqO2EVHqFKuXr6xsWFkYISU9PF4vFlpaWtZVUvEIVXbx4cfLkyaqqqubm5j169AgLC4uOjraxsfH29uZwOAEBAWpqaqT2S3vQoEE1nl5hrglAw9HW1m7VqlVMTIyampqJiYm+vn5tJXNycuR3gdpuB5mZmQ8fPqTvShRFGRkZ5eXlCQQCeYpAX+1ZWVlisZierUZRFJfLpT8Yaqu2devW9AvFGSG2trY1Vkml0sWLF0+aNEm+lVyNpx5K1wqFwsrKSl1dXXqhgYEBHXB8fPzAgQPpgK2srOiPGcW91616AFpaWvJt6WfqipU4OzsPHz582bJlxcXFAwYMWLx4sXyVYlNX37CiomLVqlXPnz83NzevT86Ul5dnYmIif9usWbOcnBw+n6+pqUlnimw2W94mdJwURR08eDA0NFQgEGhoaNR25qxYseLHH3\/s2bOnjY3NwoULzc3N1dXV5d\/U+\/fvT7+QdxaLpeTb6d27dy9fvnz27FnFVfImNTAwqLGtkZGRWCwuKiqqnp2EhIQ4OjpWP149PT2KouiRfLoki8WS5zTVO6XutUrJzxClx0UI0dDQaN++fXR09Nu3b3v16qVYrI6WUXr67dmzR0dHR+mXB3lb5eXlff\/990FBQRoaGnXHr5TSW0FtJ2T9rxE3N7eVK1eWl5eHh4f7+PjUVkzpFVqDTCbLzs5euXIlRVH0CdyrV6+8vDx5tsHj8QwNDUntlza9tjqkJgANytfXNzQ0VENDo8bTnBr09PRycnLo17m5uUrLCASCESNG0J83hYWFeXl5BgYG79+\/F4lEKioqhJAXL17Y2trq6+sbGxtXHyc3NzdPS0tTHC+h1XZbJ4QobvLzzz9zOJzx48fLl9BjQoSQlJQUY2PjGuVrrOXz+SwWq7CwUEdHhxBCT47R19f38vJau3YtIUQikcTFxdE3xNoCrm0X9GSL+svKyho+fPjUqVOTk5MXLlwYGRkpv7cqNnX1DYOCgvT19cPCwng8XvUHZPIPpxqRCASCrKws+dvs7Gyld\/zqwsLC7t27FxwcrKOjc+HCBfqnHDVIJBKxWLx\/\/36RSHTq1Km1a9cGBweXlpaWl5fT31kPHTo0ePBgUmcXFxQULFu2bMuWLZqamvKFUqmUzWa\/e\/dO\/pREsS9UVVXbtGkTHh4+YsQIeklhYeHixYvDw8MFAoG8BQoLC6VSqTxT\/GS1te0Hde\/e\/caNG0lJSTNmzFBc+1En\/8OHD4ODg4ODg6svrNFWMplsyZIlY8aMad++fT2Dr7FW6a2gthOyntcIIYTL5Xbt2vXGjRsRERHV54LUoPQKrYGiKD09vYMHD9IZRlpaGo\/Hi4uLe\/fuHV1AKBSmp6eT2i9txWbHAx2ABtWrV6+oqKiIiAjF59w0+o7Wq1ev8PDwtLS0kpISeoajIi8vr4MHD+bm5hYVFS1atCg8PFxbW7tdu3a7d++WSCQPHjxISEgghLRo0YLL5Z48eVIikVy\/fn3ChAn1v3\/VLTY29tixY5s2bZJXyOfz7969W1ZWlpmZee3atRrlFddSFEUfhVQqvXTpEj251dPTMzIyMjY2tqqqas+ePfJ5tYqys7NfvnxZYxfx8fGZmZkikUjp9\/46XL58+bvvvsvJydHX1+dwONV\/nq3Y1NU3LCwsFAgEPB4vJSUlMjKSfmiioaFx7do1qVR648aN6o8hKisrbW1tZTJZcHCwTCYLCQkRCoVt27atO7bCwkItLS0NDQ2hUHjq1Cn573FEIpG8DEVR48ePv3LlCj3oUlFRweVyPTw89u\/fL5FIwsLCDhw4UD3hUGr58uWDBg1ydnaWL+Hz+fTsmRMnTtS97bJlywIDA0NDQ8vLy9PS0hYuXOjh4WFqatqzZ88rV67Ex8eLxeKgoCClwxUfpba2rYO8oTw9PSMiIpKTkzt37vxvYigqKvruu+9++OEHehCOpthWv\/32m0gkmjJlSj2DV1yr9FZQ9wlZ3ePHj2sbyfP19T169GhxcbG1tbXSAiKRSOkVqsjb23v79u0VFRVpaWn+\/v6pqaldunR5+fJlZGSkVCo9duwY\/YWh\/pc2UhOABqWjo2Npaamrq6s4hkkIsbKyKigomD17tpWV1Zw5c\/z9\/f38\/Dw8PNTV1RUL9+7d29fXd9SoUX369DE2NqZvfxs3bnz69Km7u\/vevXvpCZIsFmvnzp0hISFubm4\/\/vhjUFCQ0to+wfHjx8vKysaMGePl5eXt7X3y5MkBAwaYmJj4+PgMHTqUniVQXfW1PXr0oBcuXbo0ISHBw8PjyZMnrVu3ph91\/fDDD8uXL3d3d4+NjV2\/fn1tAVy8eLHGbxdbtWo1duxYPz8\/Nze32m64tRk1apSqqmq\/fv369etnb28\/YMAA+SqlTS03derUsLCwXr167dixIyAg4MCBA\/RPohISEtzc3DZv3tylSxe6ZPfu3X19fWUyWVBQ0OnTp+mfn+zateuDPwUfOHAgPVVo2rRpo0ePfvz48ZUrVzp27Hju3LlDhw7RZVgs1rp16+jd\/frrr5s2bSKErFmz5tWrV+7u7rt27dq+fTuHU9dIeVpa2rVr186fP093KP3j0iVLluzZs8fFxeXNmzdKT1q5jh07bt++\/bfffuvWrds333xjampKx2BhYbFy5cr58+d7enrm5eUpzrz+WErbtu7A5A1lbm6uo6Pj6en5L3\/BfuXKlZycnNWrV9NtRc\/oVGyro0ePvn792tfXly6WkJBQd\/DytVu3bnV1dSWEKL0V1H1CVjdp0qTY2Filq9zc3BISEmpMgJWTN5riFapYeP78+TKZzMvLa9y4cVOmTHF2dtbU1Ny+ffv27ds9PT0zMzPd3NwIIfW\/tP9+5gfwlfj3I8kN49WrV+fPn1+4cCFFURs2bNDX1w8ICGjsoL6IPXv2uLq6Ojo6Zmdnjx49+tKlSx\/1SH7Xrl2zZs36cuHBf4+\/v\/+kSZPqmITOKI1+K\/iXV+inwVwTACaysrJisVijRo0Si8Xt2rWbMGFCY0f0pbi5ue3fvz87O1tVVXXTpk0fddejx4e+XGzwHyMWixMTExMTE+kv8U1Co98K\/s0V+skwagJfl6YyagIAn92VK1fWrl07e\/bs2v4MCTAEUhP4uiA1AQBgOEyDBQAAAAZBagIAAAAMgtQEAAAAGASpCQAAADAIUhMAAABgEKQmAAAAwCBITQAAAIBBkJoAAAAAgyA1AQAAAAZBagIAAAAMgtQEAAAAGASpCQAAADAIUhMAAABgEKQmAAAAwCBITQAAAIBBkJoAAAAAgyA1AQAAAAZBagIAAAAMgtQEAAAAGASpCQAAADAIUhMAAABgEKQmAAAAwCBITQAaVGRkZGFh4UdtEh8fHx8f\/4XioZ09e7a2Vb\/++mt5eXndJTMyMqZOnTp9+vTp06fPnDlz\/fr1SUlJXyTQf\/z0009SqfSL7gIAGgtSE4AGIpVKExISzp8\/LxKJ6r9VVlbWmTNncnNzv1BUlZWVV69evXv3rtK1KSkpfD5fTU3tgyVVVFT27t27d+\/ezZs3t2rV6ueff5bJZHXsVywW\/5uw7e3t79y5829qAADG4jR2AABfi8OHD6elpVVVVdV\/k6ioqJs3b+bn5yuu+uuvv3JyciZMmEAISUlJ2b9\/\/6ZNmzIzM3\/\/\/ffMzExjY2M\/P7\/mzZtfu3YtPT09LS0tPz\/f0tJyzJgxurq68krEYvHmzZvrCOnChQtjx46tT0k5DQ0NLy+vyMhIoVCopqZ2+vTpJ0+eaGtre3l5ubi4pKennzp1ysrK6vnz58uWLbtx48Zff\/1VUVFha2s7efJkHo+XkZFRn0Po3Lnz5s2bu3btymaz69+eANAkYNQEoIFMnDhx5cqVfD6\/\/pv06NFj5cqV9vb2iqs6dOjw7NkzemQiNjbWyclJJpPt27fP1dU1MDDQ09Nz3759EomEEHL79u2xY8du2LBBKpXevHmzeiUcDuf777+fMWOG0r2XlpZmZGQIBIIPlqyuvLw8KipKQ0ODz+eHhIQUFRWtX7\/+22+\/DQ4OTklJIYS8efNGTU3tu+++EwqFp0+fnjt37qZNm0pKSu7fvy+VSut5CFwuV1NTMzk5uf6NCQBNBVITgCapWbNmampq9If9kydPnJ2d09LSZDKZu7s7i8Xq0qULj8d7+\/YtIcTS0tLc3JzL5To4OJSVldV\/F6mpqYaGhvUsLBKJZs6cOXPmzAULFjx9+jQgIIDFYt27d8\/Hx4fL5RoYGLRr1+7Ro0eEEA6H4+3tzWazeTwem81OTU1ls9mLFi1yd3f\/qEMwMjJ68+bNx7QZADQNeKAD0Phu374dGhpKCBk8eHCnTp3quVWHDh2ePn3K5\/PFYnGLFi2ePn2qp6cnX6uvr19UVEQIMTU1pZewWB\/3VaSkpERfX7+ehVVUVHbu3Fl9iUwmKyws\/P333ymKkgdMCNHW1qaXqKiojB8\/PjQ09MiRI23bth09enRxcXH9D0EgEOiDZFcAACAASURBVBQXF3\/UEQFAk4DUBKDxubm5ubm5fexWjo6Ox44dU1NTc3Z2JoRoaWkVFBTI1xYUFGhpaRUVFckzg4+loqIiFAo\/bVtCCEVRfD5\/zpw5Ojo6hJC8vDw2m11aWiqPp6yszNTUdOnSpSUlJadPnw4NDXV1da3\/IdBzWT45PABgLDzQAWiqLC0ti4uLb926RacmzZs3l8lkd+7ckclkDx48KC8vt7Cw+Df1m5iYZGdn\/5saHB0dz507V1VVlZubu3Xr1hq\/M8rNzd22bVt6erqqqqqqqmplZeVHHUJOTo6xsfG\/CQ8AmAmjJgBNFUVR7du3T0pKatasGSGExWJNnTr12LFjZ86cMTQ0nDZtGofzry5wAwMDDodTUVGhqqr6aTUMHTr0+PHjy5YtY7PZvr6+NjY26enp8rUWFhaurq7bt2+XSqWWlpbjx4\/\/qEPIzs62tbX9tMAAgMko+lEuwFdCS0ursUNoSu7evVteXt6zZ8\/GDqSmly9fxsXFjRgxorEDAYDPDw90AKBWXbp0iY+Pr\/uPpzWKW7du9enTp7GjAIAvAqMm8HXBqMnHys7O1tHRUVFRaexA\/j+pqanm5uaNHQUAfBFITeDrgtQEAIDh8EAHAAAAGASpCQAAADAIUhMAAABgEKQmAAAAwCBITQAAAIBBkJoAAAAAgyA1AQAAAAZBagIAAAAMgtQEAAAAGASpCQAAADAIUhMAAABgEKQmAAAAwCBITQAAAIBBkJoAAAAAgyA1AQAAAAZBagIAAAAMgtQEAAAAGASpCQAAADAIUhMAAABgEKQmAA0kOTl569atixYtWrNmzblz52Qy2UdtPmfOnC8U2Md6+\/btjh076ll4w8kXU3c\/lP5zrBnvy7\/ZFv0looqJiamx5NnbIq9lUQPW3Oy\/+saoTXf2hiSJJR\/X5g2stEI8atOdz1Xbt0EPMt6Xf9QmabllPZdG\/RH1Vr5EIpUNWHNzzR\/PCCHzDzx+9U5Ydw29v79OCDl89c2pm2kf3N2eS0l\/PcysvmTAmps1ytRnp\/+SVEYWHnyy49wrQsi6488PhL6euvthjcC+tM\/b9f8BSE0AGoJYLN63b5+Xl9fmzZtnzpyZlZV16dKlD24lkUhOnDhBv164cOEXjvFLSc4q+etBRqPs2tKYf3FVt0urPfbNcErNKd118ZXSYmKJLOiC8lVfG1Uu69aLXPnbuJRCyT955fwhthaG6vVpq\/6dm3k7Gn2WeOidfpaqapOUIZRIZHMH2xBCvu1jNdSt+fLRdt3sBLWVj4rLefy64IuGBEhNABpCfn6+WCxu3749i8XS19cfMGDAB0dNJBKJTCZ79OgR\/bZ58+YfLP95Yv3chrqaHYpIEZaLGzEGPU3e4uFtrjzOLi6rUlwrk8luPMtVXP4V0tNSEUtkuUUi+u3tF3nONnr0azOBugqXXZ+20tfk6fJ5nyUeeqefparalFdK+Goc+rWRjqq+Jq+5QF1TnVtb+aTMkvS8jxuOUsTwAbxGx2nsAAC+CgYGBurq6nv37u3Ro4eNjY2pqampqSkh5P3790ePHs3MzNTU1Bw5cqSNjU1KSkpERISqqqqqqmpRUVFpaenevXunT58+Z86cnTt3isXiM2fOPHnyRE1Nzd3dvVevXtXLDx06tMbat2\/fnjt3jhCSnZ1tbGzs5+cnEPzv6+CePXuaN28eExMjkUg8PDx8fHwqKiqOHj2alJQklUq7du06dOhQQsjz58\/PnDlTXl7epk2bMWPGEEKqqqoOHz78+vVrgUBA13np0qX09PSpU6cqHrt1M01RlfRQRPLsgTbyhW9zygKDE969L1Phsqf0turRzvDVO+Hui4mVYmluUUVHKz07C61zd97xOKyFw1rbmmnmFol+PPvy1TuhiZ7qBC9Lp1Z6H9sFepq8ZnpqqbllLY3524ITnqYUSqSy3p1Mvu1jteFUfHFZ1fIjT9f52w9ad+viqm6EkFfvhPv\/SvpxiuOyw3G6fN6DV\/kURQL6WIfGZKbmlLrZGcwa2Erpjm49zzsQ+lpYXmWgrfLdCLuWxhqnbqZlvC9\/9rawpFzsaKW7YKgth\/2\/r4VXnmQfikimCNWrw98jDYoHe+pmWkJa8at3wjKReEQ386yC8vuv8k311db6O6ir\/O+TOzGjJDA4oaCksqOVbqVYSggpE0lqHGxFlXTvpcQnyQXqKpwR7s3lO5VzsxPcic8b1MWUEHL\/1fvRHhYPXr0nhMw\/8HhqX+vj11Pptlo\/zuHYtbcXot9pqnFbmWo201fz72FB13D46hs1Hntkt+aKB1JUWrUtOCEhrdhUX01bg2dprPH\/7VsmO3kj9crjbIpF\/s+nZWdbfXqnhJBfwpIJIWm5pc0NNOYNtpFIyfIjcfRGGe\/L149zePa2SFuDN8zNjBCy\/HDcSA\/z9pY6D17l776YKJXJ3OwErzNLtk7uUCMkhxY6O869fC+s\/Pnyaw6b+mANoz0twh9l8diUvhbPtY2A\/PMs5uz33bhsatj62\/2cTSb5tLz8MDM64f2gLqZn76av+8aBEHLqZlp5pWR8rxZ+W+6OcG9+7WnOzoCO9en6jzzN\/yMwagLQECiKWr58uZmZ2ZkzZ+bNm3fw4MGioiJCyG+\/\/WZvb7958+YxY8YcOHBAJBIRQp4\/f96zZ8+RI0dOnDhRQ0Nj+vTp8noiIiJKS0tXr149f\/78+\/fv0xMs5OWVro2Pjx80aND69et1dXXv3r1bI7C0tLTVq1fPnTv34sWLYrE4ISFBQ0Nj48aNa9euvXv3rlAoFAqFv\/7669SpU3\/44YfKyso7d+4QQl6\/fu3p6bl27VotLS26Tg8PjxEjRtR2+JN8Wl5\/mpOcVSpfEv4os3cnkz+Xu68YbXfkagq9MCG9eNkou+PfuT5JLnidWfLrvM49OxhdvPeOELLlTLxTK71TS10XDG29\/uSL7MKKT+gFbT43X1j5KKlAS417Yonr0YVdQmMyC0sql41so6XOXT\/OoY5tj3\/XdZSH+abTL2YNbPXbfJfIuOycf4YWajh7N33l2LbBK9w9HQwv3HtHL7wTn7v9245HF3ZJSBc+fVMkL5yeV77j3MtNE9sfWdgl55+DUnqwqbml+2c6bf2\/DgdCX9uZa\/+xqCuXzbr9Ik9elVQqW\/3H02FuzU8ucW1nqZOaW0YIUTzYq0+y8oWVv81zWTy8TWRcjmL87nYGt57nEkJeZ5YY66rJRxRo8raKTSm88iT7t\/kuW\/+vw5Nk5Q84FA9k319JOhq8k0vd5g1pfTfhfY3y9FDCgTnOQ7qa\/XEttfqqh4n5E70tjy12NdRWCY3JMhOoHZ7vcni+i193C4cW2h2tlXyEl1aIN5x6sWFCu9\/mu8in3dQIqbC0cu5g2\/aWOt\/2sapPDZ2sdX06Go\/2tKDzEkKIhirH2oT\/IrUoLa+Mx6GeJBcSQp4kF3Rpra+0TYrLqrgc1s6AjvXv+q8QRk0AGoi6uvrgwYMHDx6ck5Nz4cKFn376af78+SkpKXTmYWVlpaGhkZ6ezmKxTExMzMzMlFYSHx8vFAp37dpFCBEKha9fv9bT05OXV1wrEAhMTExatGhBCGnZsmVWVlaNCrt27UpRlEAg4PP5EomkQ4cOAoEgOjo6IyOjrKysqqrq7du3pqamRkZGhJCJEydKJJKsrCx5nVZWVjk5OYQQLS2tOo5dU40z0bvlrguvFg5rTS+Z7GsVm1xwPvrdk+RCUZWUXtimuZa5gTohxMJIw9vRmM2ibE0141OLpFLZk+TC8krJ9ac5FEXEElliRomRjurHdkFRaZWeJs\/eQttETzX8Udab7NKSCrFILNX40IZeHYzYLMrGVNPeQru5QJ0Q0lygLiyrMtRWUSy87huHJ8kFMYkFt17ktfhnnoSbnYGmGocQYmPKlx8vIeRJckGHlrp0nX2cTB69LlB6sHQNfDUOX43P47C8OxixKNKqGb\/686l3+eUl5eJe7Q0JIb06GNEzQtzbCmocrEMLnd8iUvaGJHVqpbfW314xfutm\/MyCipJy8e0XeW61T7m4\/\/K9WxuBKo+tymN3a2ugWEDpgTxMzN80oT2LIhaG6vYW2opb+XQ0IYTYW2jLszpaC0ONNs21CCF2FtqpOWX0wmdvi45de7trakcOm1Ks6kVqsZm+mqm+Gt22wXfSlYakqVbr56BiDUqLubQWPEoqMNRR6d\/Z9Nzd9IoqaWxyYUAf6zfZpYqFxRKZt6MxqXfX0+d5QEAAIeSnn36S16O45L8EqQlAQ7h9+3ZsbCydhRgaGvr5+S1YsEAsFhNCKOrvuyqLxaInoKiq1vqhq6qq2r9\/fxsbG0JIRUUFRVEZGRny8oprs7KyNDU16wiMz+dXf3v16tWYmJju3bu7urrGx8cTQiQSCYfz942iqqqqvLycEKKtreRDpW59nZtdup8R9c\/X9JVHn6qrsHu0N\/qmp8WKI0\/\/aYH\/fcDwOP8b02WxKHUV9s6AjmwWRQgpLK3iq370vaugpCozv9zcQP3MrbTrT3MGdTXr7WQSk1TrfMbqk2PkgXE5HxhpLhVJAoIeeHUw6mClq6XOiUsppJfr1DL3gqII658q+WpcUsvBBt9Jl8fAYlHVG+p\/QVKU\/Fzisik1HpsQoniw5gbqB+e6PErKvxuft\/+vpINznKs\/XaJ1sdW\/9\/L9nfi8H8Y5vEgtVhq5RCpjc\/7eXZlIrDg5Q+mBsChC\/bM3xZyAzaJ0+coneWgrLM8uFG06Fb9unIOWwq7pvpNIZfIGKRVJagvpeWoRUVBbDUq52OpvP5tgoqc2sItpUqYw\/FGmDp+np8mrnpqUlFex2Sz6GFW4LFLvrqcL\/PTTTwEBAQEBAXQu8t\/OSwge6AA0DFtb25cvX8bFxclkMqlUeuPGDSsrK1VVVQsLC\/qBSHJyclFRkeJgiVQqrf62bdu2ERERYrG4tLR0y5YthYWF9V9bH8+fP\/f09OzcuXN5eXl2drZUKrW2tk5JScnLy5NIJMePH1d8JEQTCoX5+fl11MyiyOyBNsevvSWEyGTkQWL+\/\/W2cm6l9yS5UCr98JTAjta6J66nymTk1TvhvJ8ff+xxFZVWbfszvlcHIy117v1X+QO7mHl1MCqtEKflldF7p3+HQlFUpViallcmk5GwmHr9fPRNdik9q4P2NruUosh4L8tWzfiPkgok0jo2JYSQDi11HyUV0A8LLt1\/928O1kRXVUOVfe1pLiHkxrPcwtIqQojiwR65+uZQRLKbnSCgj1VJuTirQMljKfe2BmfvplMUEWgpGRai28qpld7tF3miKqmwXHzvpfKuVzyQjtZ6F6LfyWQkq6DiQWJdJ0zdKiolK47ETetnbWn095gXj8t+mV4sk5HU3LLnqcWEkDbNtVJzyzLzK6QyIs+J62jbetYgbwG5lsYa74WVz94W2ZppdbTS+yPqLf00h8dlpWSVVomlFZUSul+q+9iulycl\/\/m8hGDUBKBhCASCefPmnTlz5ujRoxRFtWzZcuLEiYSQCRMmHD16NDw8XENDIyAgoMZ4CYfDMTY23r59+7x58+gl3bp1y87O\/v7772UymY+Pj5GRUUpKiry84tq3b9+Sj+Hr63v+\/Pm\/\/vrL2tq6c+fOJ06cmDlz5oQJE3bv3l1WVmZtbe3l5aX4VIgQcv369dqmwcrZmWt5Ohg8fVNEUWRaX+slh2IJIb07GWtrcI9fT+1krVvHtrMH2mz9M2Hkxtvqqpx5g22UDuArSskqGbzulkwmU+WxPR0Mv+1tRQgZ42n+a3jy71FvHFpoe3UwCrqQuHFCO3MDjQW\/PAn8vw7\/59Ny6W9xokpJfWYgSqWySTvuH5jtbGXy9+CTrZlmR2vdCdvvqXJZ\/Ts3+z3qbW3zMGim+mpzBtku\/jWWokgfJxNVHvuTD5bFolb52QcGJxwIe21vod3RSlfpwS4c1vqHE89HbLyjymUNd29uJlBTrKpdC+30vLLh7uaKq7gclrytenYwGh8Ybayr6tRKV+ljEcUDmdrXetufCaM33zHSUe3dyaQ+x6XUlSfZqTmlB8OTD4YnU4SM6Gbu7WgUGPxy9OY7KlxWe0ttQoi2BnfZKLtFvz5R5bK6tBa8e1+uNCR5nXQNYzbfUVNh02ej0hrsmmvtuphooK1S\/WmXUyu99LwyLptytNLdfu5ll9YCQkhrM632LXW+2RYtlsraW+rUOIRP6Hp67IT81\/MSQghFz8UD+ErUPSUCmq6YmJhOnTo1\/H5DYzI72+jraX6e38o2IS\/ThQ8S8\/17WEilsoUHn0zyaal07kgjqqiU7L6UOGegDZfD+jUihcdhyX9D1GA1wKfBqAkAwCeSyQhFUV9hXkIIaWmsERqTOWtfjFgqc7czYFpeQghR5bFbGvMX\/xpbKZaaCdTmDrZt+Brg02DUBL4uGDX5r2qsURMA+OwwDRYAAAAYBKMm8HXBqAkAAMNh1AQAAAAYBKkJAAAAMAhSEwAAAGAQpCYAAADAIEhNAAAAgEGQmgAAAACDIDUBAAAABkFqAgAAAAyC1AQAAAAYBKkJAAAAMAhSEwAAAGAQTmMHAAC1ys8vSExMfPs2NTMz8\/379yUlQpGokhCiosLj8zX19fVNTEwsLMxbtWqlp6fb2MECAHwe+Pd+8HVpEv\/er6Sk5N69+48ePXrz5m09N2nRwqJjx44uLp35fP4XjQ0A4EtDagJfF4anJvn5BVeuXL1+\/bpMJqMoihBCv5C\/lZPJZISQGgsJIZ6enl5evTCIAgBNF1IT+LowOTW5fDn00qUQ+jWdebBY\/5sNJpVKyT+5iDxrIf\/kLjWq6t+\/X58+vRskagCAzwzTYAEaX2pq6tat2+R5CY2iqIoKUVlZWXl5eUVFBYvF4nA4UqlELBaLRKKysvKqqiqKouj0hU5T5C5dCtm6dVtqauonh5RXLOq5NOrHsy+rL9x5\/lXPpVHZhRWfUKH\/tuhxgdHVl1x7mtNzaVTYo6z6V7L0t7hP2DUANC2YBgvQyO7du3\/kyFH5W3oUhMViVVZWtWljq6qqpqOjbWJioqeny2KxRCKRTCYrL69ISUlJSnqdnZ0tk8lUVVWJwvDJmzdvN2\/eOm7cNy4unT8tMDaLik7Ik0ptWCx6kIbcjc\/jsD\/9+0xekSg5q7SlsQb99sazXFXux9X2IDH\/g2WqxFIuB1+6AJowpCYAjenq1cjg4LPyt3R6QVGUUChs29bO39+PzebQYyJSqVQmk9FjJBRFtW1rV1ZWlpycfP\/+g8TEJA6Hw2KxFB\/uHDlytKSkpFevnp8QG5fDsjLRjE0pdLTSJYQ8Ty0yN9QoExXTa4PvpJ++lVZcWtXCSGPJiDbNDdQvP8wMf5y1fYqjVEam7X440duyS2v96hV2aS24\/jSnpbElIeT\/tXfv0VFUeR7Af1Xd1Z1+5f0k2RAimgx5ASrBJtCuG2fwBYIYPS5HEIweNboOK0dB5+AoKiu7IpzlyJzRPcLsUWAQ0Q3iY3gEzAiojEBeECKQQEinE4j97uquqv2joCcTku4OiZ1Cvp+\/OvW4fYt\/+Pa9v3uLD4hHT\/YUjYmXT5W\/uOfLVy1yBpr+u5rPfj+NiN7+5PjeOhsRzZyc+cjtY15cf0QUpQVvH\/zD0zc3tP703582n3fyJbnxv515g0nPfVR7ptvhO9nhSk+I+beZN1zB8wKAQuC3BcCI6TeXSJLk8XgmTy6tqLg\/EBDcbrfH4\/V6vTzvl6dyfD6f1+v1eDwqlaqgoGD+\/Hn33TeLZVlBEOTb+3zL1q0f79y568p6aClKqTlqkz\/vrbNNK0yRP1t7vH\/Y0fL6vOJtvysbO8q0pbaNiKbfmCEI0s7D1v87cDYjMaZPLiGiaUUpNUc75c\/fNZ8fn5ugGXh4Y199V9MZ+5+em7yu6qaPas+c6XK\/Nq+YZZn\/eXaSxxd4acPRZ2be8Ocl5tS4mBVbmuRbqg+2P2jJfmYGcgnA1Q3RBGBkHDhwsHcuISI5WAiCMHPmjPvvn8NxnCiKKpWKZVmGYRiG5Ike5hJJkrxer8\/nmzRp0n33zaYBSmKJaOvWjw8cOHgFnZwyLuWvjV2iRERU22CbMu5iNEk0aTc+bx6TZvDwolrFuLwBImIY+u2svD\/uaNlYc7rqnusvb21Uoi5GozpldRHR3qN\/Dzr9ijNwDk\/gpNWVGh9T\/fLUrGR98FRtQ1d+lqkoJ45lmTllWfubut0+gYiKc+JLxsT39w8AAFcTTOgAjIDW1tbe9SV0KVX4fL677rpj6tQyh8MhB5HLFwn3Xp4jX+BwOCZMKLFarV999Re9Xi+K4uUBZcOGP2VkpGdnZw+qnyadeky64eipnhhOlRofk2Dk5OMsQxv3nt5zpDPRpNFp1Immi8fHpBkyk\/VxBi45Vttvg5ai1Jo6W1ay\/lDL+Wdn5X35t35qYOVhn5Ix8XfdPOo\/\/tzg8ARun5D+xJ3XBctcOn\/yNbc7F7x9kIgYopxUvYcXiCglrv8vBYCrC6IJwAjYtGlznyNyLsnNzTWbzU6nc6Bc0vt66lUz63Z7pkwx19fXd3baOI4b6EsXL35usF21FKbuOdKp16oshanBg3uOdv7QcuGPz9wcq+e++lvHgWPd8vHDJ3t6nHybzfVjhzM3vZ\/N3yyFKS9tODrun2LHZcf1qYEVJWKJOi54\/QGRiGx23503Zcz959GtNvfyD+trG7osRRc7kGDkphak\/PvsPCISRKmpzZ5k0hARxksAfhkwoQMQbTt2fD7QNq9m82S1Wt17m7V+c0lQ8DJBEPR6\/U033RQICAPdcurU6R07Ph9sb8sKkv\/a2LWv3lZW8Pf5F7vbb9Rxeq3a5Q1UH2z3ByQi8gvS29uOPXtv3oJf567+5Hi\/rY1K0qnVzP\/uPjWtV9AhIoNWVdvQRUSf7j8rH9l92PrG5oYuO59g1KhUjNcvysf9AXFyfnJtg62h1e4XpPU7T7335cnBPhQAKBmiCUBUnT9\/oc\/+JUEMw9jtjuB0TOhQ0udGhmFEUUxOTmbZfiphg6qrt58\/f2FQHY7Vc9kp+jg9lxyrCR789YR0hqEHVtQuef\/IjNLM+tafvq63baw5nZcVW5QT95uJGX5B+nKADUsshalNbfY+RbJP3X39+r+cvOf3+9q63EmxWiK6pzRTy6nmv7V\/3n\/tz8uKLR+fRkS35Cf968r9CUbN4jm\/enNL4+zlXze2\/vT8\/fmDeiIAUDjsBgvXlhHfDXbz5i01NTWXH2cYxuv1jh6dXVn5qN\/vp3\/cCjY0SZIkSdJqtU1Nx9av36DT6UKkE4vFUlEx58o6DwAQBRg1AYgep9PZby6hS1UjKpUqknmcPoIXi6JIFObGmpoap9MZeeMAAFGGaAIQPWFX8IYY7QiLYRhRFC4tcBlSNwAARhCiCUD0HDp0aKBTvete5QmayJsNLuQJBAKRDLeE6AYAwIhDNAGIkvPnLwy0MIcuTuiwPM\/LS2yuYEJHkiSe90cSa06dOj3YYlgAgKhBNAGIkubm5hBnJUniOHVnp+3s2bMcx13ZqIndbh+WzgAAjCBEE4AoOX26NfQFLMs6nc4zZ9rkrU0G1bgkSUSSw+GQB13C3h62MwAAIwXRBCBKzp07F+IswzA8z48de11xcbHX6x3UhA5dXHvMT5\/+m5KSIq\/XG3bhcejOAACMIEQTgCjp7u4OcZZhGL\/fX1BQmJycLL9DOPKW5b3qRVGIjY3Nzc0VBHGInQEAGEGIJgBR4nQ6QpyVl+d4vR55lc1ga03k6wVBkLdrG2JnZGazubCwsKiX9vb2d999d+XKlZH3rV9vvfXW8eMXd7KfPXv2hg0bysvLt23bNsRmAeCXAa\/3A4gSn48PcVZeldPV1UVEkiTJ7\/aLfOzkUpSR7HY7w4SPNaE7E7Rly5b8\/H\/YBv7OO++MMP2EUF9fP3XqVPnzq6++mpycXFJSkpWVNcRmeZ7XaDThrwMAZcOoCYAiSJKkUqk6O20ej0euFIlw7CS4PIdhGL8\/YLVaWVY1lK3bQvviiy82b95MRHa7vaqq6pZbbqmqqlq4cOH+\/fuJ6Ntvv501a9a0adMWLVokvwTjgw8+WLZsWUVFRVlZ2VNPPWW1Wt95550ffvhh6dKlhw4dWrhwod1uT0tLKykpWbJkidyI2Wx+4403zGbz7bffvmfPnqqqKrlBURSJ6Ny5c5WVlWazecGCBXV1dUTU1NQ0b9681atXP\/TQQz\/TUwNANCGaAESJVhvqB70kSRzH2Wy21tZWnU4nimKEoybBd\/tptdqODuvZs+0ajSZsNAndmUi8+eabWVlZ+\/btKy8v\/+abb4iop6enqqrqpZde2r17d0ZGxtKlS+UrP\/roo5dffnnnzp2BQGDTpk1PPPHE+PHjX3\/99YkTJ4Z4qNra2vLy8ieffPKxxx7bvn17XV3dd999R0SLFi0qLS39+uuv586d+\/TTTzscDiKqq6szGo0ffvjhEB8KAJQA0QQgSoxGU4izwbcNb9\/+WUdHh7y1SST7p8nXqFQqj8f72Wc7eJ6PZMe20J0JmjNnTrDQpLS0tPepzz\/\/\/PHHH1er1ffee29aWhoR7dy5s7Cw8MYbb1SpVA8\/\/HBNTY3L5SKioqKicePGabXaW2+9VU4SYVVUVDAMU1ZWlpeXV1xcbDKZJk6c2N7e3tbWduLEiblz57Ise9ttt+l0uu+\/\/56IOI575JFHOI6LpHEAUDjUmgBESVJSUuh1MfLASWenbePGTZWVjwZf9Rf6luCN27Z9cuLECYPBIIpi2GiSlJQUSZ8vrzWRORwOnucTEhLkP1NSUoioo6OjsbFxxowZRMQwzHXXXed2u4koLy9PvkylUkXypXTpBdEsyyYmJspH5Emujo6OQCBQUVEhf0Vwb7qUlJTIX9QMAAqHaAIQJRkZGcFlKf2S52V0Ot25cx0tLT8WFo7zen3U68XCA92iVqt7enqOH2+OiYmJcBooIyPjroHG1gAABclJREFUCh4hyGg0sizb09MTHx9PRHL1blJSUnl5+SuvvEJEgiAcOXJEjiyRpCsi+vHHH8N+b1JSUnp6+qeffir\/2djYmJ2d3dbWNthtYABAyfA7AyBKRo\/ODnuN\/F+sKIr19Q1EjCSFeRexfFatVre1tbndbnldz3B1JnQ\/y8vL33vvPVEUq6urrVYrEVksll27dh0+fNjv969du3bNmjUhWvD5fERkMBj27NkjiuLevXvb29vDfm9OTg7HcZs2bRIEoaamZv78+QglAL88GDUBiJLrr78+ksskSdJoNC0tLd3d3XFxcYFAIPRAiHy2ufnEoDZqi7AzDzzwQLAIhohWrFgRPLVkyZIXXnhh2rRp06dPz8\/P1+l0GRkZy5cvf\/HFF202W2Fh4WuvvTZQs2azeenSpatWraqsrFy5cuWUKVOSk5PNZnPY\/rAsu3r16mXLlq1atSotLW3NmjV6vT6SBwGAqwgjL\/ADuEbIRQwjZeXK\/wzx8mGZvKmJx+OZNeveyZNL3W53iBINeTanu\/v8u+++5\/P5Iqy3yMkZvXjxc4Pr+mXWrl1rNpsnTJhgtVoffPDB6upqg8EwxDYBAAijJgDRNHHixLDRJDinY7fbWfbinM5AwyGSJGk0XGNjg91u1+v1kRTAyt24gs73MWXKlHXr1lmt1piYmBUrViCXAMBwQTQBiJ7S0klbt34c4cXBqZwQ0YRhGEliXC4PUagEc3k3IuxDCOPHj1+3bt3Q2wEA6ANlsADRYzQaLRZL2MvkOR2e50VRYpiwgWNwG79aLBaj0TioWwAAognRBCCqysv\/JfQFci4RRcnlcsk7roVYdCOPlPC8TxAEudAk7C5tYTsAADCyEE0AoioxMeHuu++6\/HjwVTgqlcrn82m1mvz8fDl5hN7XJBAI5Obmmkwml8sliiLLssFi2Mszyt1335WYmDB8TwMAMPxQawIQbXfcMb2urq5PPay8JQnP+3g+kJGRPmvWzDFjxni93rDRhOf54uKi9PS0Xbt2nzjR4nK55G1SVSpV8AWBcsTJyRl9xx3Tf\/bHAwAYGiwehmvLyC4eDmptbV2x4s1g7PD7\/X6\/X6PRZGZmFhYWFhcXmUxGr9crLxsOW98qiiLHcSzLdHV1t7ScbGpqamtrczqdLMtqNJrgRM\/zzy\/Ozh7STmsAAFGAaALXFoVEEyI6ePDb999fz\/M8ESUnJ+Xn548b96vMzMyYGK3Px8u1I8FZnoEaCV4gl5hwHKdWqwVB6Orqam5uOXbs2JkzZ1wuF8uylZWPDsvCHACAnxuiCVxblBNNiGjXrt2HDx8uKCgYO3ZsbKxJEAS\/3x+sLwmbS2R9Ckrk29VqtVqtDgQCNputpaVl1KjMSZNu\/hmfBABg+CCawLVFUdGEiNxut9vt4nm\/IAhENKhQ0sdAGSUuLk6n0w1jnwEAflYogwUYSXq9XpIkr\/dCcPom8p3T+gjeJbcjNxgbG4tcAgBXF0QTgBFmMBg0Gs2FCxf8fv+wNChnFI1GEx8fz3HcsLQJABA12NcEYORxHJeamjqMk02xsbEpKSnIJQBwNcKoCYBSmEwmvV7vcDhcLtcVN2IwGEwmU4iXFQMAKBzKYOHaorQy2H6Jouh2uz0ej7y0OBIajUan0+n1+uBWsAAAVymMmgAoDsuyRqPRaDQKguDz+XieDwQCgUBAFMXg4h2WZeUVwhqNRqvVYpgEAH4xEE0AlEulUun1er1eP9IdAQCIHoz9AgAAgIIgmgAAAICCIJoAAACAgiCaAAAAgIIgmgAAAICCIJoAAACAgiCaAAAAgIIgmgAAAICCIJoAAACAgiCaAAAAgIIgmgAAAICCIJoAAACAgiCaAAAAgIIgmgAAAICCIJoAAACAgiCaAAAAgIIgmgAAAICCIJoAAACAgiCaAAAAgIIgmgAAAICCIJoAAACAgiCaAAAAgIIgmgAAAICCIJoAAACAgiCaAAAAgIL8P+Eq6eVS9yOsAAAAAElFTkSuQmCC\" alt=\"\"><\/p>\n<p>Da es sich um propriet\u00e4re Software handelt, kann man leider nicht mal eben einen Blick in den Quellcode werfen und ggf. sogar mit Debugging weitere Informationen ermitteln. Bei Java mit seinem Bytecode haben wir jedoch den gro\u00dfen Vorteil, dass sich dieser recht leicht dekompilieren l\u00e4sst. Dies hat zwar auch seine Nachteile. So k\u00f6nnen wir den Code nicht einfach ver\u00e4ndern und es gehen Informationen wie etwa die Bezeichnungen von Variablen verloren. Doch es bleibt die einzige M\u00f6glichkeit, mehr \u00fcber die Funktion zu erfahren. Immerhin erh\u00e4lt man dadurch wieder Java-Code und muss nicht mit Assembler hantieren, was bei einem Projekt dieser Gr\u00f6\u00dfe zu einer sinnvollen praktikablen Fehleranalyse v\u00f6llig unrealistisch sein d\u00fcrfte.<\/p>\n<p>M\u00f6glicherweise muss der Code aber auch nicht ver\u00e4ndert werden &#8211; sondern es gen\u00fcgt bereits ein Java-Namensraum, \u00fcber den sich das Trace-Logging in WebSphere aktivieren l\u00e4sst. Bei den bisherigen Versuchen meldet sich eine Klasse namens <strong>MemberProfile<\/strong> im <strong>SystemOut.log<\/strong> des <strong>InfraClusters<\/strong> zu Wort, jedoch ohne Namensraum. Diesen k\u00f6nnen wir anhand des Java-Codes ermitteln.<\/p>\n<h2 class=\"wp-block-heading\">Export der EAR-Datei<\/h2>\n<p>Zun\u00e4chst m\u00fcssen wir die Ear-Datei herunterladen. Ein sogenanntes <strong>Enterprise Archive<\/strong> ist im Grunde ein ZIP-Archiv mit den kompilierten Class-Dateien sowie weiteren Metadaten zur Java-Anwendung. Auch JSPs sind dabei. Da diese nicht kompiliert werden, kann man sie ohne Decompiler analysieren und mit jedem Texteditor ver\u00e4ndern. Interessant ist hier vor allem die Ear-Datei der Communitys-Anwendung &#8211; dar\u00fcber laufen auch die Atom-APIs. Man kann sie in der <strong>WebSphere ISC unter Applications &gt; Application Types &gt; WebSphere enterprise applications<\/strong> anhaken und per <strong>Export<\/strong> herunterladen:<\/p>\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/10\/image.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"308\" src=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/10\/image-1024x308.png\" alt=\"\" class=\"wp-image-9559\" srcset=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/10\/image-1024x308.png 1024w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/10\/image-300x90.png 300w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/10\/image-768x231.png 768w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/10\/image-70x21.png 70w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/10\/image.png 1525w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n<h2 class=\"wp-block-heading\">Analyse mit dem Java Decompiler <em>JD-GUI<\/em><\/h2>\n<p>Die Ear-Datei k\u00f6nnte man mit jedem beliebigen Archivprogramm entpacken. Das ist jedoch wenig zielf\u00fchrend: Sie enth\u00e4lt Gro\u00dfteils weitere War- und Jar-Dateien der einzelnen Komponenten. Auch das sind gepackte Java-Anwendungen. Ein Teil der Inhalte sind direkt lesbar, etwa die JSPs. Das Layout ist jedoch wenig hilfreich, wir ben\u00f6tigen den Bytecode in den Class-Dateien.<\/p>\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/10\/image-1.png\"><img loading=\"lazy\" decoding=\"async\" width=\"862\" height=\"503\" src=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/10\/image-1.png\" alt=\"\" class=\"wp-image-9560\" srcset=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/10\/image-1.png 862w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/10\/image-1-300x175.png 300w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/10\/image-1-768x448.png 768w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/10\/image-1-70x41.png 70w\" sizes=\"auto, (max-width: 862px) 100vw, 862px\" \/><\/a><\/figure>\n<p>Statt das Archiv zu entpacken, wird ein Programm zum dekopilieren ben\u00f6tigt. Es macht den Bytecode wieder lesbar. Ein solches quelloffenes Tool ist <a href=\"https:\/\/java-decompiler.github.io\/\" title=\"der Java Decompiler\" target=\"_blank\" rel=\"nofollow\">der Java Decompiler<\/a>. Man kann ihn in die Entwicklungsumgebung Eclipse integrieren, oder in Form von JD-GUI als eigenst\u00e4ndige Anwendung nutzen &#8211; wir werden von letzterem Gebrauch machen. Die Software hat eine lange Geschichte. Bereits zu U-Hacks Zeiten kam sie zur Analyse des Knuddels-Applets zum Einsatz. Ihr k\u00f6nnt entweder die fertigen Pakete\/Binaries herunterladen, oder die portable Jar-Datei. Hierf\u00fcr ist lediglich Java in mindestens Version 1.8 n\u00f6tig:<\/p>\n<div class=\"wp-block-syntaxhighlighter-code \">\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\njava -jar ~\/Downloads\/jd-gui-1.6.6.jar\n<\/pre>\n<\/div>\n<p>Das zuvor heruntergeladene <strong>Communities.ear<\/strong> Archiv per Drag &amp; Drop hinein ziehen. Im linken Bereich werden alle Inhalte sichtbar. Es ist von Vorteil, sich mit der grundlegenden Struktur von Java-Anwendungen bereits auszukennen. Ansonsten wird man etwas l\u00e4nger ben\u00f6tigen, um diese herauszufinden.<\/p>\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/10\/java-decompiler-cnx.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"550\" src=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/10\/java-decompiler-cnx-1024x550.png\" alt=\"\" class=\"wp-image-9561\" srcset=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/10\/java-decompiler-cnx-1024x550.png 1024w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/10\/java-decompiler-cnx-300x160.png 300w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/10\/java-decompiler-cnx-768x413.png 768w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/10\/java-decompiler-cnx-1536x825.png 1536w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/10\/java-decompiler-cnx-2048x1100.png 2048w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/10\/java-decompiler-cnx-70x38.png 70w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n<h2 class=\"wp-block-heading\">Wo ist die API?<\/h2>\n<p>Sp\u00e4testens wenn man bei der Anwendungslogik angelangt ist, wird der Umfang klar. Schlie\u00dflich ist darin nicht nur die API enthalten &#8211; sondern auch der Code f\u00fcr die Communitys selbst. Eine erste Orientierung bietet <strong>application.xml<\/strong> im <strong>META-INF<\/strong> Ordner. Sie enth\u00e4lt eine Zuordnung der Pfad-Pr\u00e4fixe zu den jeweiligen Modulen. Die weiter unten definierten Komponenten wie etwa die Anwendungsrollen aus der ISC sind an dieser Stelle wenig hilfreich. Interessant: Alles im Pr\u00e4fix <strong>\/communities<\/strong> wird zu <strong>comm.web.war<\/strong> geleitet. Ausgenommen sind nur zwei Unterpfade, die mit der API wenig zu tun haben. Daher schaue ich mir <strong>comm.web.war<\/strong> genauer an.<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><a href=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/10\/image-2.png\"><img loading=\"lazy\" decoding=\"async\" width=\"838\" height=\"326\" src=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/10\/image-2.png\" alt=\"\" class=\"wp-image-9562\" srcset=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/10\/image-2.png 838w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/10\/image-2-300x117.png 300w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/10\/image-2-768x299.png 768w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/10\/image-2-70x27.png 70w\" sizes=\"auto, (max-width: 838px) 100vw, 838px\" \/><\/a><\/figure>\n<\/div>\n<p>In <strong>WEB-INF\/jsps\/atom\/error<\/strong> sind wir der API schon recht nahe: Dort liegt die Fehlerseite, die bei fehlerhaften Anfragen den Statuscode und einen Infotext anzeigt. Durch eine Testanpassung mit einer bewussten fehlerhaften XML-Anfrage l\u00e4sst sich das best\u00e4tigen:<\/p>\n<div class=\"wp-block-syntaxhighlighter-code \">\n<pre class=\"brush: xml; title: ; notranslate\" title=\"\">\n&lt;error xmlns=&quot;http:\/\/www.ibm.com\/xmlns\/prod\/sn&quot;&gt;\n\t&lt;danielWasHere&gt;true&lt;\/danielWasHere&gt;\n\t&lt;code&gt;400&lt;\/code&gt;\n\t&lt;message&gt;\n\t\t\t\tInvalid member entry.\n\t&lt;\/message&gt;\n \t&lt;trace&gt;\n\t&lt;\/trace&gt;\n&lt;\/error&gt;\n<\/pre>\n<\/div>\n<p>Wir sind also auf dem richtigen Weg. Ansonsten befindet sich im <strong>directory<\/strong> Ordner von <strong>jsps<\/strong> eine Reihe an Templates, welche die XML-Antworten generieren: <strong>community.jsp<\/strong> beispielsweise f\u00fcr eine einzige Community. Darin sind auch Filter enthalten. So wird beispielsweise die E-Mail Adresse f\u00fcr Externe ausgeblendet, damit diese sich per API keine Liste aller Mitarbeiter bzw. sogar externer (Konkurrenz-) Partner generieren k\u00f6nnen. Das <strong>html<\/strong> Verzeichnis enth\u00e4lt ebenfalls JSPs, allerdings f\u00fcr das Web. Etwa die Startseite mit den verschiedenen Layouts. Interessant, aber all diese Ansichten helfen uns nicht weiter &#8211; wir brauchen die Anwendungslogik.<\/p>\n<p>In dieser Hinsicht befindet sich nichts relevantes in diesem Modul. Daher habe ich den Unterordner <strong>lib<\/strong> angeschaut &#8211; vermutlich wurde Layout und Logik getrennt, was \u00fcblich und sinnvoll ist. Mehrere mit <strong>comm.*<\/strong> startende Jar-Dateien fallen auf, da <strong>comm<\/strong> offensichtlich als Abk\u00fcrzung f\u00fcr Communitys verwendet wurde. Nur <strong>com<\/strong> w\u00e4re logischer, steht allerdings ohne Pr\u00e4fix in Konflikt mit dem <strong>com<\/strong>mercial Namensraum.<\/p>\n<p>Jedenfalls klingt <strong>comm.api.jar<\/strong> zielf\u00fchrend. In <strong>com.ibm<\/strong> gefolgt von <strong>lconn.comm<\/strong> und <strong>data<\/strong> finden sich verschiedene Models\/DTOs, etwa <strong>CommunityValues<\/strong> &#8211; allerdings ohne Logik. Sonst gibt es nur <strong>tango<\/strong>, der wenig vielversprechend klingt, aber andererseits auch die Frage aufwirft, was da wohl drin liegt. Einiges wie sich zeigt, <strong>config<\/strong> enth\u00e4lt mit dem <strong>ConfigManager<\/strong> jene Klasse, um die Anwendungsspezifische XML-Datei im <strong>LotusConnections-config<\/strong> Ordner zu parsen. Thematisch passender wirkt <strong>Community<\/strong> in <strong>data<\/strong>, dies scheint das Model einer Community zu sein. Richtig interessant wird es im Ordner <strong>service<\/strong>: In der unscheinbaren Klasse <strong>TangoService<\/strong> liegt eine Schnittstelle, die Methoden wie <strong>createCommunity<\/strong> oder <strong>updateCommunity enth\u00e4lt:<\/strong><\/p>\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/10\/image-3.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"560\" src=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/10\/image-3-1024x560.png\" alt=\"\" class=\"wp-image-9563\" srcset=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/10\/image-3-1024x560.png 1024w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/10\/image-3-300x164.png 300w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/10\/image-3-768x420.png 768w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/10\/image-3-1536x841.png 1536w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/10\/image-3-70x38.png 70w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/10\/image-3.png 1769w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n<p>\u00dcbrigens ist <strong>AntiVirusFilter<\/strong> in <strong>util<\/strong> f\u00fcr das senden von Dateien an einen Virenscanner zust\u00e4ndig. Eine Klasse die man nicht unbedingt hier erwartet, da die Konfiguration daf\u00fcr in der LCC liegt und nicht in Communitys.<\/p>\n<p>Was die API angeht, sehe ich keine Implementierung und schaue daher weiter in <strong>comm.web.jar<\/strong>, in dem sich mit <strong>tango.web<\/strong> ein bekannter Namensraum findet. Hier gibt es ein Unterpaket <strong>atom<\/strong> mit einer Klasse <strong>AtomParser<\/strong>. Parst dieser eine Community als Atom-Feed oder anders herum? Es handelt sich um letzteres, also genau die Richtung, welche wir bei einer schreibenden Anfrage ben\u00f6tigen:<\/p>\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/10\/image-4.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"787\" src=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/10\/image-4-1024x787.png\" alt=\"\" class=\"wp-image-9564\" srcset=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/10\/image-4-1024x787.png 1024w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/10\/image-4-300x230.png 300w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/10\/image-4-768x590.png 768w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/10\/image-4-70x54.png 70w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/10\/image-4.png 1259w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n<p>Die Methode <strong>convertEntry2Community<\/strong> wird hierbei aufgerufen. Sie erh\u00e4lt ein <strong>Entry<\/strong> Objekt &#8211; eine Schnittstelle, die Getter- und Setter einer per API erhaltene Community beschreibt. Dies liegt allerdings in einem ganz anderen Namensraum, der <strong>org.apache.abdera.model<\/strong> hei\u00dft. Dass wir dort richtig sind, l\u00e4sst sich \u00fcbrigens ebenfalls verifizieren: Zu Beginn wird gepr\u00fcft, ob der Community-Eintrag (<strong>&lt;entry&gt;<\/strong>) g\u00fcltig ist. Falls nicht, wird eine Exception mit dem Bezeichner <strong>atom.parser.invalidCommunityEntryType<\/strong> geworfen. Den Text k\u00f6nnt ihr in den Properties nachlesen. Um ihn zu provozieren, gen\u00fcgt es, statt <strong>&lt;entry&gt;<\/strong> beispielsweise <strong>&lt;entry1&gt;<\/strong> zu senden. Dann erhalten wir besagten Text <em>Invalid Community Entry<\/em>. Die Exception wird in <strong>AtomExceptionHandler<\/strong> abgefangen, f\u00fcr andere Fehler setzt dieser Handler den Schl\u00fcssel aus den Properties sowie den Statuscode.<\/p>\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/10\/image-6.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1019\" height=\"446\" src=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/10\/image-6.png\" alt=\"\" class=\"wp-image-9566\" srcset=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/10\/image-6.png 1019w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/10\/image-6-300x131.png 300w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/10\/image-6-768x336.png 768w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/10\/image-6-70x31.png 70w\" sizes=\"auto, (max-width: 1019px) 100vw, 1019px\" \/><\/a><\/figure>\n<h3 class=\"wp-block-heading\">Was haben wir gelernt?<\/h3>\n<p>Schaut man sich die komplette Methode genauer an, lassen sich zwei Erkenntnisse daraus gewinnen:<\/p>\n<ol class=\"wp-block-list\">\n<li>Es k\u00f6nnen ein paar weitere Eigenschaften gesetzt werden, die im Wiki-Artikel der Doku nicht vermerkt sind. Zum Beispiel, ob die Mitglieder E-Mails versenden d\u00fcrfen. <\/li>\n<li>Besitzt <strong>Entry<\/strong> zwei Methoden f\u00fcr die in der Doku angegebenen Eigenschaften <strong>getAuthors() <\/strong>und <strong>getContributors()<\/strong>, die jedoch nirgendwo im Code genutzt werden: <\/li>\n<\/ol>\n<p>Ersteres ist positiv, da man diese Dinge beim h\u00e4ndischen Erstellen per Web ebenfalls angeben kann:<\/p>\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/10\/image-5.png\"><img loading=\"lazy\" decoding=\"async\" width=\"919\" height=\"960\" src=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/10\/image-5.png\" alt=\"\" class=\"wp-image-9565\" srcset=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/10\/image-5.png 919w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/10\/image-5-287x300.png 287w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/10\/image-5-768x802.png 768w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/10\/image-5-67x70.png 67w\" sizes=\"auto, (max-width: 919px) 100vw, 919px\" \/><\/a><\/figure>\n<p>Im Code werden diese Werte beispielsweise wie folgt abgerufen:<\/p>\n<div class=\"wp-block-syntaxhighlighter-code \">\n<pre class=\"brush: java; title: ; notranslate\" title=\"\">\nString str10 = parseElementStrVal(paramEntry.getExtension(QN_CONNECTIONS_MEMBER_EMAIL_PRIVILEGES));\n<\/pre>\n<\/div>\n<p>Die Konstanten findet ihr in der Schnittstelle AtomConstants. Dort ist neben dem Attributsname auch der korrekte Namensraum angegeben:<\/p>\n<div class=\"wp-block-syntaxhighlighter-code \">\n<pre class=\"brush: java; title: ; notranslate\" title=\"\">\npublic static final QName QN_CONNECTIONS_MEMBER_EMAIL_PRIVILEGES = new QName(&quot;http:\/\/www.ibm.com\/xmlns\/prod\/sn&quot;, &quot;memberEmailPrivileges&quot;, &quot;snx&quot;);\n<\/pre>\n<\/div>\n<p>Wenn man sich \u00fcber die Werte unsicher ist, weil es z.B. nicht offensichtliche boolische Angaben sind wie in diesem Falle, hilft es, sich die aufgerufenen Methoden genauer anzuschauen. Oft enthalten diese Validierungscode, Mappings auf Enums oder geben anderweitig Hinweise darauf, welche Werte zul\u00e4ssig sind. Hier ist dies folgende Hilfsmethode, die aus den Zeichenketten eine passende Konstante erzeugt:<\/p>\n<div class=\"wp-block-syntaxhighlighter-code \">\n<pre class=\"brush: java; title: ; notranslate\" title=\"\">\n  public static Community.MailPrivileges toMailPrivileges(String paramString) {\n    Community.MailPrivileges mailPrivileges = null;\n    if (paramString != null)\n      if (paramString.equalsIgnoreCase(&quot;canEmailEntireCommunity&quot;)) {\n        mailPrivileges = Community.MailPrivileges.MEMBERS_FULL_PRIVILEGES;\n      } else if (paramString.equalsIgnoreCase(&quot;canEmailOwnersOnly&quot;)) {\n        mailPrivileges = Community.MailPrivileges.MEMBERS_MAIL_OWNERS_ONLY;\n      } else if (paramString.equalsIgnoreCase(&quot;emailNotAllowed&quot;)) {\n        mailPrivileges = Community.MailPrivileges.MEMBERS_CANT_MAIL;\n      }  \n    return mailPrivileges;\n  }\n<\/pre>\n<\/div>\n<p>Hier sind also die Werte <strong>canEmailEntireCommunity<\/strong>, <strong>canEmailOwnersOnly<\/strong> und <strong>emailNotAllowed<\/strong> m\u00f6glich. Sie entsprechenden den drei Auswahlfeldern in den Web-Einstellungen.<\/p>\n<p>Generell k\u00f6nnen wir nat\u00fcrlich die Namensr\u00e4ume nutzen, um f\u00fcr diese das Log Level auf Maximum zu erh\u00f6hen. Die Eintr\u00e4ge finden sich dann in der trace.log Datei.<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><a href=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/10\/image-7.png\"><img loading=\"lazy\" decoding=\"async\" width=\"649\" height=\"398\" src=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/10\/image-7.png\" alt=\"\" class=\"wp-image-9567\" srcset=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/10\/image-7.png 649w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/10\/image-7-300x184.png 300w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/10\/image-7-70x43.png 70w\" sizes=\"auto, (max-width: 649px) 100vw, 649px\" \/><\/a><\/figure>\n<\/div>\n<p>Auf den ersten Blick bietet die <strong>communityAdmin.py<\/strong> eine weitere Alternative. Jython wird in Connections eingesetzt, um Java-Methoden aus Python-Skripten heraus aufrufen zu k\u00f6nnen. Man kann eine Reihe an administrativen Operationen \u00fcber Python bzw. die wsadmin-Konsole durchf\u00fchren. In <strong>createCommunity.py <\/strong>befindet sich auch eine Methode zum Anlegen von Communitys:<\/p>\n<div class=\"wp-block-syntaxhighlighter-code \">\n<pre class=\"brush: python; title: ; notranslate\" title=\"\">\nparms=&#x5B;communityName, ownerName, memberRole, eAddrs, orgId]\nsig = &#x5B;&quot;java.lang.String&quot;, &quot;java.lang.String&quot;, &quot;java.lang.Integer&quot;, &quot;java.util.HashSet&quot;, &quot;java.lang.String&quot;]\t\t       \t\t\nrc = AdminControl.invoke_jmx(self.getMBeanName(), &quot;createCommunityWithEmail&quot;, parms, sig)\nprint &quot;createCommunity request processed&quot;\n<\/pre>\n<\/div>\n<p>In der Java-Anwendung gibt es daf\u00fcr verschiedene Service-Klassen. In diesem Falle ist das etwa <strong>CommunitiesAdminService<\/strong> im Namensraum <strong>com.ibm.tango.internal.service.admin.mbean<\/strong>. Diese Methode scheint dem Code nach die Mitglieder zu ber\u00fccksichtigen und sauber zur Community hinzuzuf\u00fcgen &#8211; in den Parametern lassen sich Eigent\u00fcmer und Mitglieder angeben. Leider ist diese Methode nicht direkt per Web erreichbar. <\/p>\n<h2 class=\"wp-block-heading\">Wie legen wir nun eine Community mit Mitgliedern an?<\/h2>\n<p>Leider hat all das nicht zum Erfolg gef\u00fchrt: Der hinzuzuf\u00fcgende Benutzer taucht nirgendwo auf. Auch das angeben von ung\u00fcltigen Nutzern f\u00fchrt zu keinem Fehler. Offensichtlich handelt es sich um einen Softwarefehler, der diese Felder gar nicht auswertet. Als \u00dcbergangsl\u00f6sung bleibt daher nur, die Nutzer nachtr\u00e4glich hinzuzuf\u00fcgen. Daf\u00fcr gibt es in <strong>comm.web.jar &gt; com.ibm &gt; tango.web &gt; ui &gt; actions<\/strong> weitere Klassen, die eine ganze Reihe von Funktionen abdecken. Relevant ist hier vor allem <strong>CommunityCreateAction<\/strong>. <\/p>\n<p>Zun\u00e4chst jedoch zur Erstellung an sich, die \u00fcber folgenden Body m\u00f6glich ist:<\/p>\n<div class=\"wp-block-syntaxhighlighter-code \">\n<pre class=\"brush: xml; title: ; notranslate\" title=\"\">\n&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;\n&lt;entry\n    xmlns=&quot;http:\/\/www.w3.org\/2005\/Atom&quot;\n    xmlns:app=&quot;http:\/\/www.w3.org\/2007\/app&quot;\n    xmlns:snx=&quot;http:\/\/www.ibm.com\/xmlns\/prod\/sn&quot;&gt;\n    &lt;title type=&quot;text&quot;&gt;U-Labs Community&lt;\/title&gt;\n    &lt;summary type=&quot;text&quot;&gt;ignored&lt;\/summary&gt;\n    &lt;content type=&quot;html&quot;&gt;Automatisch per API erstellte Beispiel-Community&lt;\/content&gt;\n    &lt;category term=&quot;community&quot; scheme=&quot;http:\/\/www.ibm.com\/xmlns\/prod\/sn\/type&quot;&gt;&lt;\/category&gt;\n    &lt;snx:communityType&gt;public&lt;\/snx:communityType&gt;\n&lt;\/entry&gt;\n<\/pre>\n<\/div>\n<div class=\"wp-block-syntaxhighlighter-code \">\n<pre class=\"brush: xml; title: ; notranslate\" title=\"\">\n$ curl -s -D - -k -X POST -u max:cnx -H &quot;Content-Type: application\/atom+xml&quot; --data &quot;@create-community.xml&quot; https:\/\/cnx7.u-labs.de\/communities\/service\/atom\/communities\/my\nHTTP\/1.1 201 Created\n...\nLocation: https:\/\/cnx7.u-labs.de\/communities\/service\/atom\/community\/instance?communityUuid=fcedd4f4-4a05-45e5-968a-3f3f3af234a8\n...\n<\/pre>\n<\/div>\n<p>Um ein Mitglied hinzuzuf\u00fcgen, wird die Id der Community ben\u00f6tigt. Die API liefert in der Regel die Adresse zum angelegten Objekt im <strong>Location<\/strong> Headerfeld, sodass ihr sie dort aus dem Parameter kopieren k\u00f6nnt. Anschlie\u00dfend f\u00fcgt ihr dies in den <strong>communityUuid<\/strong> Parameter der POST-Anfrage ein: <\/p>\n<div class=\"wp-block-syntaxhighlighter-code \">\n<pre class=\"brush: xml; title: ; notranslate\" title=\"\">\n&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;\n&lt;entry xmlns=&quot;http:\/\/www.w3.org\/2005\/Atom&quot; xmlns:app=&quot;http:\/\/www.w3.org\/2007\/app&quot; xmlns:opensearch=&quot;http:\/\/a9.com\/-\/spec\/opensearch\/1.1\/&quot; xmlns:snx=&quot;http:\/\/www.ibm.com\/xmlns\/prod\/sn&quot;&gt;\n    &lt;contributor&gt;\n        &lt;email&gt;user@u-labs.de&lt;\/email&gt;\n        &lt;snx:role xmlns:snx=&quot;http:\/\/www.ibm.com\/xmlns\/prod\/sn&quot; component=&quot;http:\/\/www.ibm.com\/xmlns\/prod\/sn\/communities&quot;&gt;member&lt;\/snx:role&gt;\n    &lt;\/contributor&gt;\n&lt;\/entry&gt;\n<\/pre>\n<\/div>\n<div class=\"wp-block-syntaxhighlighter-code \">\n<pre class=\"brush: xml; title: ; notranslate\" title=\"\">\n$ curl -s -D - -k -X POST -u max:cnx -H &quot;Content-Type: application\/atom+xml&quot; --data &quot;@add-members.xml&quot; https:\/\/cnx7u-labs.de\/communities\/service\/atom\/community\/members?communityUuid=fcedd4f4-4a05-45e5-968a-3f3f3af234a8\nHTTP\/1.1 201 Created\n...\n<\/pre>\n<\/div>\n<p>Die Community hat nun zwei Mitglieder:<\/p>\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/10\/image-8.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"514\" src=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/10\/image-8-1024x514.png\" alt=\"\" class=\"wp-image-9569\" srcset=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/10\/image-8-1024x514.png 1024w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/10\/image-8-300x151.png 300w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/10\/image-8-768x385.png 768w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/10\/image-8-70x35.png 70w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2022\/10\/image-8.png 1100w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n<p>Laut HCL-Dokumentation soll das Hinzuf\u00fcgen von Mitgliedern in der selben Anfrage m\u00f6glich sein, wie das Anlegen. In meinen Tests hat dies jedoch trotz einiger Versuche nicht funktioniert. Ein Blick auf den Code best\u00e4tigt, dass dies anscheinend nicht implementiert wurde.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Dieser Beitrag zeigt, wie man den Code einer auf WebSphere laufenden propriet\u00e4ren Java-Anwendung analysieren kann. Der Anwendungsfall ist hierf\u00fcr die Communitys-Anwendung von HCL Connections, mit dem Ziel, mehr \u00fcber die Funktionsweise der Atom-API zu erfahren. Ausgangslage: Eine fehlerhafte Dokumentation Mein Vorhaben war recht simpel: Eine Community automatisiert per API anlegen, damit dies in Drittanbieter-Software eingebunden &#8230;<\/p>\n","protected":false},"author":5,"featured_media":9572,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[765,61],"tags":[760,87,873],"class_list":["post-9558","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-hcl-connections","category-softwareentwicklung","tag-hcl-connections","tag-java","tag-websphere"],"_links":{"self":[{"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/posts\/9558","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/comments?post=9558"}],"version-history":[{"count":6,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/posts\/9558\/revisions"}],"predecessor-version":[{"id":10051,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/posts\/9558\/revisions\/10051"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/media\/9572"}],"wp:attachment":[{"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/media?parent=9558"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/categories?post=9558"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/tags?post=9558"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}