{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "Author: Giulio Rossetti
\n", "Python version: >=3.7
\n", "Networkx version: >=2.3
\n", "Last update: 15/02/2021\n", "
\n", "\n", "\n", "# *Chapter 2: Basic Measures*\n", "\n", "``Networkx`` is a python library designed to provide support to analysis of complex networks.\n", "\n", "In this notebook are introduced some of the main features of the library and an overview of its functionalities.\n", "\n", "**Note:** this notebook is purposely not 100% comprehensive, it only discusses the basic things you need to get started.
A complete documentation (and tutorial) is available on the project [website](https://networkx.github.io/documentation/latest/)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Note 2:** textbooks approaching network analysis (practice and theory) using ``networkx`` are: \n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
\n", " \n", " \n", " \n", "
\n", " \"Complex Network Analysis in Python\"
\n", " Dmitry Zinoviev, The Pragmatic Programmer. 2018.\n", "
\n", " \"Firstcourse in network science\"
\n", " Menczer, Fortunato, and Davis. 2020.\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Installation\n", "To install ``networkx`` use the following command:\n", "\n", " pip install networkx" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Importing the library\n", "As a first step just import the ``networkx`` library." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "import networkx as nx\n", "import warnings\n", "import pandas as pd\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "import powerlaw\n", "warnings.filterwarnings('ignore')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In our example we will not only analyse graphs but also visualise them: for this reason we have to import also ``matplotlib``." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "%matplotlib inline " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Design our first graph\n", "\n", "``networkx`` provides support for several graph models. \n", "\n", "Among them:\n", "- undirected graphs, available through the ``Graph`` class\n", "- directed graphs, available through the ``DiGraph`` class\n", "\n", "In this brief tutorial we will focus only on undirected graphs." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can build a graph adding nodes as well as edges as follows:" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "g = nx.Graph()\n", "\n", "g.add_node(\"a\")\n", "g.add_edge(\"a\", \"b\")\n", "g.add_edge(\"a\", \"c\")\n", "g.add_edge(\"b\", \"c\")\n", "\n", "nx.draw(g ,with_labels=True)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Nodes and edges can also be easly removed" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "g.remove_node(\"a\")\n", "g.remove_edge(\"b\", \"c\")\n", "\n", "#re-draw the graph\n", "nx.draw(g, with_labels=True)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Reading a graph from file\n", "``networkx`` natively supports several network file formats.\n", "\n", "Among them one the most frequently used in online repository is the *edgelist* one." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "An edge list is a text file (usually saved as .csv) in which each line identifies an edge.
\n", "For instance, the triangle defined before can be described as:\n", "\n", " a,b\n", " b,c\n", " c,a" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To read edgelist file just write" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [], "source": [ "g = nx.read_edgelist(\"data/network.csv\", delimiter=\",\", nodetype=int)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Similarly a graph can be written to file using ``nx.write_edgelist(g, filename)``.\n", "\n", "For all the I/O methods refer to the [official documentation](https://networkx.github.io/documentation/latest/reference/readwrite/index.html)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Accessing nodes and edges\n", "Given a ``Graph`` object is it possible to iterate over its nodes with a simple ``for`` loop" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [], "source": [ "for n in g.nodes():\n", " # do something\n", " pass" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Following a similar rationale is it also possible to loop over the edge set" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [], "source": [ "for e in g.edges():\n", " # do something\n", " pass" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "All graph entities can be used to store additional attributes (weights, labels...). \n", "\n", "For furhter details refer to the [official documentation](https://networkx.github.io/documentation/latest/tutorial.html#adding-attributes-to-graphs-nodes-and-edges)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Network base statistics\n", "``networkx`` allows to manipulate nodes as well as edges, count them, and extract relevant global features." ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "2566" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "g.number_of_nodes()" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "8593" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "g.number_of_edges()" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "False" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "g.is_directed()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Degrees and Degree distribution\n", "Node degree can be easily obtained as follows:" ] }, { "cell_type": "code", "execution_count": 32, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "24" ] }, "execution_count": 32, "metadata": {}, "output_type": "execute_result" } ], "source": [ "g.degree(1) # degree for node 1" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Similarly the average degree can be computed with" ] }, { "cell_type": "code", "execution_count": 37, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "6.697583787996883" ] }, "execution_count": 37, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sum(dict(g.degree()).values())/float(len(g))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "An easy way to compute, and visualise, the degree distribution is the following" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "hist = nx.degree_histogram(g)\n", " \n", "plt.plot(range(0, len(hist)), hist, \".\")\n", "plt.title(\"Degree Distribution\")\n", "plt.xlabel(\"Degree\")\n", "plt.ylabel(\"#Nodes\")\n", "plt.loglog()\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "A more complete one instead is..." ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [], "source": [ "def plot_dist(G):\n", " M = nx.to_scipy_sparse_matrix(G)\n", " xmin = min([d[1] for d in G.degree()])\n", " indegrees = M.sum(0).A[0]\n", " degree = np.bincount(indegrees)\n", " fit = powerlaw.Fit(np.array(degree)+1, fit_method='KS')#, xmin=xmin, xmax=max(degree)-xmin,discrete=True)\n", " \n", " \n", " fig = plt.figure(figsize=(16, 6)) \n", " \"\"\" Plot Distribution \"\"\"\n", " plt.subplot(1, 3, 1)\n", " plt.plot(range(len(degree)),degree,'b.') \n", " plt.loglog()\n", " plt.xlim((min(degree), max(degree)))\n", " plt.xlabel('Degree')\n", " plt.ylabel('P(k)')\n", "\n", "\n", " \"\"\" Plot CDF \"\"\"\n", " plt.subplot(1, 3, 2)\n", " fit.plot_cdf()\n", " plt.xlabel(\"Degree\")\n", " plt.ylabel('CDF')\n", "\n", " \"\"\" Plot CCDF \"\"\"\n", " plt.subplot(1, 3, 3)\n", " fit.plot_ccdf()\n", " plt.ylabel('CCDF')\n", " plt.xlabel('Degree')\n", " plt.tight_layout()\n", " plt.show()" ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "Calculating best minimal value for power law fit\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAABHgAAAGoCAYAAAA99FLLAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8vihELAAAACXBIWXMAAAsTAAALEwEAmpwYAABlh0lEQVR4nO3deXxU9b3/8fcnGyEsYQtr2MMiorKEZUQ0FrVuuC8VdxGqrXZvf/Xeeu299parbW1rtSqKom3dtSpq1YpGRCObooACsgkJO1nYErJ9f39M0BgDZP/OmXk9H488zsyZc868w5nMGT7zXcw5JwAAAAAAAARXnO8AAAAAAAAAaBwKPAAAAAAAAAFHgQcAAAAAACDgKPAAAAAAAAAEHAUeAAAAAACAgEvwHaAxunTp4vr16+c7BgA0qyVLlux0zqX5zhHJuB4AiAVcD46M6wGAWHCo60EgCzxmNlnS5IyMDC1evNh3HABoVmb2he8Mka5fv35cDwBEPa4HR8b1AEAsONT1IJBdtJxzc5xz01NTU31HAQAAAAAA8C6QBR4AAAAAAAB8hQIPAAAAAABAwFHgAQAAAAAACDgKPAAAAAAAAAEXyAKPmU02s5lFRUW+owAAAAAAAHgXyAIPs2gBAAAAAAB8JZAFHgAAAAAAAHwlwXcAAACqM7M2kv4qqVRStnPuH54jAQAAABGPFjwAgGZnZg+b2XYzW15j/elmtsrM1pjZL6tWXyDpWefcNEnntHhYAAAAIIAo8AAAWsJsSadXX2Fm8ZLulXSGpGGSLjOzYZLSJW2q2qyiBTMCAAAAgUWBBwDQ7Jxz8yTl11g9VtIa59w651yppCclnSspV+Eij8R1CgAAAKiTQH5wZpp0AIgKvfRVSx0pXNjpJel5SRea2X2S5hxqZzObbmaLzWzxjh07mjcpAKDFmVkbM3vUzB40s8t95wGASBfIAk9Dp0nPyZFmzAgvAQDeWS3rnHNun3PuWufcjYcbYNk5N9M5l+mcy0xLS2vGmACApsKYbADQfAJZ4GmInBxp0iTp1lvDS4o8AOBdrqTe1e6nS9rsKQsANCvnnHIL9uv1FVt9R/FttiJsTLai4jL9+9NtzXV4AGgxMTNNena2VFoqVVSEl9nZUijkOxUAxLRFkgaZWX9JeZK+I2mK30gA0DT2lJTpk9wiLd1UqI82FmrppkLt3HtAkvTBLZPUPTXZc0I/nHPzzKxfjdVfjskmSWZWc0y2pTrMF9NmNl3SdEnq06dPvTP9NXuNHnp3veb94mT16tC63vsDQKSImQJPVpaUlBQu7iQlhe8DAFqGmT0hKUtSFzPLlXSbc26Wmd0k6XVJ8ZIeds6t8BgTABqkvKJSq7bt0dJNhVpaVcxZs2OvnAs/PqBLG504qItG9OmgEb07qEvbJL+BI09tY7KNk3S3pHvM7CwdZkw259xMSTMlKTMz09X3ya8K9dND767X7PfW6z/PGlbf3QEgYsRMgScUkubODbfcycqi9Q4AtCTn3GWHWP+qpFdbOA4ANJhzTluKSsLFnKqCzrK8IhWXhXsQdUxJ1IjeHXT2sT3DBZ30DkpNSfScOuIdckw2Sdc295P36tBaZx7TQ08u3KQfTBqkdsmcLwDBFDMFHilc1KGwAwAAgLqoqAyPm/P5tr1atW2PPq4q6mzfE+5qlRQfp2E92+vSMb01sqp1Tp9OKTKrrV6Bw/A+JtvUE/przseb9fTiXE09oX9LPjUANJmYKvAAAAAANVVUOm3M36/Pt+3R59v3frlcu2OvSsoqv9yuX+cUHT+ws0b07qARfTrqqB7t1Coh3mPyqOF9TLYRvTtoTL+Oenj+el0d6quE+JiZiwZAFAlkgcfMJkuanJGR4TsKAAAAAqK8olJf5Idb5KzZvkert+39spBTWv5VIadXh9bK6NpWoQGdNbhbO2V0a6uMrm3Vnq47jRbJY7JdP3GAvvu3JXp9xTaddWyPln56AGi0QBZ4nHNzJM3JzMyc5jsLAAAAIktZRaW+2LVPn1cVcFZv26M12/dq3Y59Kq34eiFncLe2mjioiwZ1batB3dopo2tbtW0VyI/IgRDJY7KdclQ39e2coofmr6PAAyCQuHoBAAAg8LbvLtEdr63SsrxCrd+5T2UVX02m1LtTaw3u2k4nDUnToK7tNLhbWw1Ma6s2FHKiRlO08I+PM103ob9ue2mFlnyRr9F9OzVdQABoAVzVAAAAEGg5a3fp5ic+0r4D5ZqQ0VmTjuoWbpHTtZ0Gdm2jlCQ+8ka7pmrhf3Fmuu7692o99O56CjwAAoerHQAAAAKpstLp/nlr9fvXV6lflzZ6fNo4De7WzncsBFhKUoKmjOujB95Zq4279qtP5xTfkQCgzhgeHgAAAIFTtL9M0/+2WHe+tkpnHtNDL910AsUdNImrQ/0UZ6aH31vvOwoA1AsteAAAABAIJWUVWrA+X++s2qFXl23Rrn0H9OvJw3T18f1kZr7jIUp0T03WOcf11NOLN+nHpw5WamtmTwMQDBR4AAAAEJGcc1qzfa/eWb1D76zeoYXr83WgvFJJCXEa17+T/nrqKI3q09F3TEShqRP76/mP8vTEwo264aSBvuMAQJ1Q4AEAAEDEKNpfpvfW7tS8qqLOlqISSdLAtDa6fFxfnTi4i8b176zWSfGekyKaHd0zVccP7KzZ723Q1BP6KzGekS0ARD4KPAAAAPCmotLpk9xCzVu9U++s3q6lmwpV6aR2yQk6IaOLfjApTScOTlOvDq19R0WMuX5if103e7FeXbZF547o5TsOABxRIAs8ZjZZ0uSMjAzfUQAAAFBPzjl9klukf36Up5c/2ayde0tlJh3bK1U3nZyhEwenaUTvDkqg1QTqqDn+f5A1uKsGpLXRg++u0znH9WScJwARL5AFHufcHElzMjMzp/nOAgAAgLrZuGu/Xliapxc+ytO6nfuUlBCnU47qqtOH99AJGV3UqU2S74gIqOb4/0FcnOn6EwboP/65TAvW52v8gM5NdWgAaBaBLPAAAAAgGAr2lerlZVv0wkd5WvJFgSRp/IBO+u5JA3T68B7MUISIdsGoXvrd6yv10LvrKfAAiHgUeAAAANCkSsoq9NbK7frnR3nKXrVdZRVOg7u11f87fajOGdGT8XQQGMmJ8bpyfF/95e01WrdjrwaktfUdCQAOiQIPAAAAGq2y0mnhhnz988M8vbp8i/aUlKtb+1a6dkJ/nTeil47q0Y4xTBBIV4b66f531unh99brN+cd4zsOABwSBZ4WlJMjZWdLWVlSKOQ7DQAAQON9vm2P/vlRnl5cull5hcVqkxSv04f30Hkje+r4gV0UH0dRB8GW1q6VzhvZU88uydVPTx2ijowVBSBCUeBpITk50qRJUmmplJQkzZ1LkQcAAATT9j0lemnpZr2wNE/L83YrPs40cVAX/eL0ITp1WDelJPERE9Fl6gkD9PTiXP1jwRe66VuDfMcBgFpx9W0h2dnh4k5FRXiZnU2BBwAABEf+vlLNW71Dz3+Up/mf71Clk45NT9V/nT1Mk4/rqbR2rXxHBJrNkO7tdOLgND2a84WmnThArRLifUcCgG+gwNNCsrLCLXcOtuDJyvKdCAAAoHbOOW3M369FGwq0eEO+Fm3I19od+yRJvTq01veyMnTeyJ7K6NrOc1IgzMwmS5qckZHRbM9x/Qn9ddXDC/XS0s26OLN3sz0PADQUBZ4WEgqFu2UxBg8AAIg05RWVWrl1jxZtyNfiDQVatCFf2/cckCSltk5UZt+Oumh0b43t30kje3dQHOPqIMI45+ZImpOZmTmtuZ5j4qAuGtKtnWbNX6+LRqczaDiAiEOBpwWFQhR2AACAf/tLy7V0Y2G4hc4X+frwiwLtK62QJKV3bK0JGV2U2a+jxvTrpIy0thR0AElmpqkT++sXz36i99bs0gmDuviOBABfQ4EHAAAgBry/ZqfmrtyuxRvytXzzblVUOplJQ7u314Wj05XZr5PG9OuoHqmtfUcFIta5I3rqztdW6cF311HgARBxAlngaYk+tgAAANHilU+26PuPf6hWCXEa0buDbjxpoDL7ddSovh3VPjnRdzwgMFolxOvqUF/94d+rtXrbHg3uxjhUACJHnO8ADeGcm+Ocm56amuo7CgAAQET7dPNu/eyZjzW6b0d9fNtpeuq7If3s20OUNaQrxR2gAS4f31etEuL08Pz1vqMAwNcEssADAACAI8vfV6ppjy1WautE3XfFKCUnMrUz0Fid2iTpwtHpev6jPO2oGowcACIBBR4AAIAolFdYrO/9Y4l27D2gB64cra7tkn1HAqLG1BP6q7S8Un//4AvfUQDgS4EcgwcAAADfVLCvVK8u36IXP9qshRvyZSb94eLjdFzvDr6jAVFlYFpbTRraVX/74AvdmDWQ1nEAIgIFHgAAgADbX1quNz/brhc/ytM7q3eovNJpYFob/fTUwTp3RC/16ZziOyIQlaZO7K8pDy7QPz/K02Vj+/iOAwAUeAAAAIKmrKJS8z/fqReX5umNT7dpf2mFeqQma+oJ/XXOiJ4a1qO9zMx3TKDF+JhlNzSgs47u2V6z5q/XpZm9FRfH3xwAvyjwAAAABMT2PSW65601evmTLcrfV6rU1ok6d0QvnTuip8b268R/MBGznHNzJM3JzMyc1lLPaWa6fmJ//fipj/XO6h06eWjXlnpqAKgVBR4AAIAAWLN9r65+eKF27D2g04Z103kjeunEwWlKSmDODMCXs47pqTv+tUoPzV9HgQeAdxR4AAAAItziDfm6/rHFSogzPXtDSMemd/AdCYCkpIQ4XX18P93x2kp9unm3hvVs7zsSgBjGVz4AAAAR7LXlW3X5QwvUMSVJz984geIOEGGmjO2jlKR4PTR/ne8oAGIcBR4AAIAItLWoRH96c7Vu/McSHdWjvZ678XhmxAIiUGpKoi7J7K05H2/Wtt0lvuMAiGF00QIAAIgQ23eX6F/Lt+rlTzZr0YYCSdLpR3fXHy8dodZJ8Z7TATiUayf006M5G/RYzgb9/NtDfccBEKMo8AAAAHi0c+8BvVZV1FmwPl/OSUO6tdNPTx2ss47toQFpbX1HBHAEfTu30WnDuunvH2zU90/OUEoS/80C0PJ45wEAAGhhBftK9dqKrXrlky16f+1OVTppYFob/eBbg3T2sT00qFs73xEB1NO0iQP0+optem5Jrq4M9fMdB0AMCmSBx8wmS5qckZHhOwoAAECdLVi3S3/NXqv31uxUeaVTv84p+l5Whs46toeGdm8nM/MdEUADje7bUcf17qBZ89fr8nF9FRfH3zOAlhXIAo9zbo6kOZmZmdN8ZwEAADiSykqn++et1e9fX6Vu7ZM1dWJ/TT62p47u2Z6iDhAlzEzXn9BfNz/xkd78bJtOO7q770gAYkwgCzwAAABBUbS/TD99Zqne/Gy7zj62h/7vwmPVthUfwYCmFCkt/M8Y3l29OrTWQ/PXU+AB0OKYJh0AAKCZLM8r0tn3vKvsVTv068nD9JfLRlLcAZqBc26Oc256amqq1xwJ8XG6dkI/LVyfr09yC71mARB7KPAAAAA0sbKKSj3y3npdcN/7Kq9weuq7IV0zoT/dsYAYcOmY3mrbKkEPvbvedxQAMYYCT0Dl5EgzZoSXAAAgMlRWOs35eLNOvesd/fecTzV+QGe9fPMJGt23o+9oAFpIu+REfWdMb72ybIs2Fxb7jgMghtBGOIBycqRJk6TSUikpSZo7VwqFfKcCACC2zf98p+54baWW5RVpSLd2eviaTJ08pCutdoAYdM2Efnrk/Q2a/f4G/ceZR/mOAyBGUOAJoOzscHGnoiK8zM6mwAMAgC/Lcot0x2srNX/NTvXq0Fp/uPg4nTeyl+KZIhmIWekdU3TG8O56YsFG/WDSIMbeAtAieKcJoKyscMudgy14srJ8JwIAIPas27FXd/17tV7+ZIs6piTqV2cdpSvG91VyYrzvaAAiwPUTB+jlT7bo6UWbdN0J/X3HARADKPAEUCgU7paVnR0u7tB6BwCAlrO5sFh3z/1czyzJVVJ8nG7+VoamnThA7ZMTfUcDEEFG9O6gzL4d9fB763VVqK8S4hn+FEDzosATUKEQhR0AAFrSzr0HdO/ba/SPDzZKkq4c31ffPzlDae1aeU4GIFJdP3GAbvj7Er3x6TadeUwP33EARDkKPDEkJ4dWPwAA1FfR/jLNfHetHnlvgw6UV+qiUen6wSmD1KtDa9/RAES4U4d1U59OKXro3XUUeAA0Owo8MYKZtwAAqJ/9peV65L0NeuCdtdpdUq7Jx/XUj08ZpAFpbX1HAxAQ8XGm6yb006/nfKolXxRodN+OviMBiGIUeGIEM28BAFA3B8or9PiCjbr37TXaubdUk4Z21U9OG6yje6b6jgYggC7O7K27/r1as+av0+i+o33HARDFKPDECGbeAgDg8MorKvX8h3n689zPlVdYrPEDOumBK4fyjTuARmnTKkFTxvXVzHlrtSl/v3p3SvEdCUCUosATI5h5CwCA2lVWOr2ybIv++O/VWrdzn47r3UF3XHisJmR0lpn5jgcgClxzfD899O46Pfzeet02+WjfcQBEKQo8MYSZtwAA+LqPNhboP/65XJ9t2a0h3dpp5pWjdeqwbhR2gIAxs8mSJmdkZPiOUqvuqcmafFxPPb1ok350ymCltk70HQlAFIrzHQAAAMCXXz63TPn7DujP3xmhV384Uacd3Z3iDhBAzrk5zrnpqamRO1bW1BP6a19phZ5cuNF3FABRigIPAACISXmFxVq1bY+mTRygc0f0UnwchR0AzWd4r1SFBnTW7Pc3qKyi0nccAFGIAg8AAIhJb6/cLknKGtLVcxIAseL6if21pahEry7b4jsKgChEgQcAAMSkt1duV59OKRqY1sZ3FAAx4uQhXTUgrY0eene9nHO+4wCIMoEs8JjZZDObWVRU5DsKAAAIoJKyCr23dqe+NbQrY+4AaDFxcaapJ/TXsrwiLVyf7zsOgCgTyAJPEAZRAwAAkStn3S6VlFUqa0ia7ygAYswFI9PVMSVRD81f7zsKgCgTyAIPAABAY2Sv3K7WifEaP6Cz7ygAYkzrpHhdMb6v3vxsm9bv3Oc7DoAoQoEHAADEFOec3lq1XRMyOis5Md53HAAx6MpQXyXGxelhWvEAaEIUeAAAQEyZ9/lObcov1qSjuvmOAiBGdW2XrHNH9NQzSzapYF+p7zgAogQFHgAAEDNKyip024vLNaBLG10wqpfvOABi2PUTB6ikrFKz39/gOwqAKEGBBwAAxIz7stdqw679uv284WqVQPcsAP4M6d5OZwzvrgfmrdWm/P2+4wCIAhR48A05OdKMGeElAADRYv3OfbrvnbU657iempDRxXccANCtZw+TyfQ/L3/qOwqAKJDgOwAiS06ONGmSVFoqJSVJc+dKoZDvVAAANFzR/jLNfn+DHn5vvVrFx+lXZx3lOxIASJJ6dmitH0wapDteW6m3Vm7Tt4YyNhiAhqMFD74mOztc3KmoCC+zs30nAgCgYXbuPaA7XlupCXe8pT++uVpj+nXSU98NqWv7ZN/RAOBLU0/or4FpbXTbSytUUlbhOw6AAKMFD74mKyvccudgC56sLN+JAACon61FJXpg3lo9sXCjDpRX6qxjeuj7J2foqB7tfUcDgG9ISojT7ecO15SHFui+7LX68amDfUcCEFAUePA1oVC4W1Z2dri4Q/csAEBQbMrfr/veWatnF+eqwjmdN6KXvnfyQA1Ma+s7GgAc1vEZXTT5uJ667521umBUL/Xt3MZ3JAABRIEH3xAKUdgBAASHc06Pvr9Bv3nlM8WZ6eLMdN1w0kD17pTiOxoA1NmvzjpKb6/crtteWqFHrhkjM/MdCUDAUOABAACBtb+0XLc8v0wvLt2sU47qqt+cd4y6pzLGDoDg6dY+WT86ZZB+88pnen3FNp0+vLvvSAAChkGWAQBAIG3YuU8X/PV9vfTxZv3stMGaeWUmxR0gRpnZZDObWVRU5DtKo1x9fD8N6dZOt7/8qfaXlvuOAyBgKPAAAIDAefPTbZp8z3xt3V2i2deO1U3fGqS4OLozALHKOTfHOTc9NTXVd5RGSYyP0+3nDVdeYbHueWuN7zgAAoYCDwAACIyKSqc/vLFK1z+2WH07p2jOTSfopMFpvmMBQJMZ27+TLhjVSw++u05rtu/1HQdAgFDgAQAAgVC4v1TXzV6kv7y1RhePTtezNxzPQMoAotItZxyl5MR4/fqlFXLO+Y4DICAo8AAAIpKZDTCzWWb2rO8s8G95XpHO/st85azdpd+ef4zuvOhYJSfG+44FAM0irV0r/ey0IZq/ZqdeWbbFdxwAAUGBBwAgSTKzH5rZcjNbYWY/asRxHjaz7Wa2vJbHTjezVWa2xsx+ebjjOOfWOeemNjQHosezS3J14X3vq6LS6ekbQpoyrg/TBwOIeleM76uje7bX7S9/qr0HGHAZwJFR4EGD5ORIM2aElwCCz8yGS5omaayk4ySdbWaDamzT1cza1ViXUcvhZks6vZbniJd0r6QzJA2TdJmZDTOzY8zs5Ro/XZvkF0Ogbdi5Tz95aql+9szHGt23o16++QSN6N3BdywAaBHxcabbzxuubbsP6M9vrvYdB0AAJPgOgODJyZEmTZJKS6WkJGnuXCkU8p0KQCMdJekD59x+STKzdySdL+nOatucJOlGMzvTOVdiZtOqtjmz+oGcc/PMrF8tzzFW0hrn3Lqq53hS0rnOuRmSzm5IaDObLGlyRkZtdSYE1aebd+uv2Wv06rItSoiP0/dPHqgfnzJYCfF8LwUgtozq01GXZvbWw+9t0EWje2tI93ZH3glAzOKTEuotOztc3KmoCC+zs30nAtAElks60cw6m1mKwkWb3tU3cM49I+k1SU+a2eWSrpN0ST2eo5ekTdXu51atq1VVlvsljTSzW2rbJlqmxUXYog35uvaRhTrz7neVvWqHpp84UPP/38n6+beHUtwBELP+3xlD1S45Qbe+uJwBlwEcFi14UG9ZWeGWOwdb8GRl+U4EoLGcc5+Z2R2S/i1pr6SPJX2jw79z7s6qljf3SRronKvP/K21DZpyyE+qzrldkm6ox/ERQM45Za/eofveXquFG/LVqU2SfnbaYF0Z6qfU1om+4wGAd53aJOkX3x6q//jnMr2wNE/nj0z3HQlAhKLAg3oLhcLdsrKzw8UdumcB0cE5N0vSLEkys98q3MLma8xsoqThkv4p6TZJN9XjKXL19VZB6ZI2NzQvgm/JF/m69YUV+nTLbvVITdZtk4fp0jG9lZLExxMAqO7SMb311KKN+t9XVmrSUd3UPpkCOIBvor0zGiQUkm65heIOEE0ODmxsZn0kXSDpiRqPj5T0oKRzJV0rqZOZ/aYeT7FI0iAz629mSZK+I+mlpsiO4NldUqYb/v6hiorLdOdFx+qdn5+sayf0p7gDALU4OODyrn0HdNcbDLgMoHYUeAAABz1nZp9KmiPp+865ghqPp0i62Dm31jlXKelqSV/UPIiZPSEpR9IQM8s1s6mS5JwrV7jFz+uSPpP0tHNuRfP9Oohkd72xWjv3HtB9V4zSJZm9lZTARxIAOJxj0zvo8nF99FjOBq3YXOQ7DoAIxNdkAABJknNu4hEef6/G/TKFW/TU3O6ywxzjVUmvNjQjosPyvCI9lrNBV47vq2PTO/iOAwCB8fPThurVZVv1Xy+u0DPfDSkurrbh7QDEKr4uAwAALaai0uk//7lMndq00k9PG+I7DgAESmpKon55xlAt+aJAz374jaHyAMQ4CjwAAKDFPL5woz7OLdKtZx/FLFkA0AAXjUrX6L4d9X//WqnC/aW+4wCIIBR4AABAi9i+p0R3vrZSEzI665zjevqOAwCBFBdnuv3c4SrcX6rfvb7KdxwAEYQCDwAAaBG/feUzHSir1P+cO1xmjBsBAA01rGd7XRXqp8cXbtQnuYW+4wCIEBR4AABAs3t/zU69sHSzbjhpgAamtfUdBwAC7yenDVaXtq106wvLVVHpfMcBEAEiqsBjZueZ2YNm9qKZneY7DxomJ0eaMSO8BAAgZ+0u/eipperTKUXfOznDdxwAiArtkxP1n2cepY9zi/Tkoo2+4wCIAM1e4DGzh81su5ktr7H+dDNbZWZrzOyXkuSce8E5N03SNZIube5saHo5OdKkSdKtt4aXFHkAIHaVVVTq96+v0pSHPlCbVgl64MrRSk6M9x0LAKLGuSN6alz/TrrztVXaufeA7zgAPGuJFjyzJZ1efYWZxUu6V9IZkoZJuszMhlXb5FdVjyNgsrOl0lKpoiK8zM72nQgA4MOm/P265IEc3fP2Gl00Kl0v33yCjurR3ncsAIgqZqbbzxuu/aXluuSBHK3Zvtd3JAAeNXuBxzk3T1J+jdVjJa1xzq1zzpVKelLSuRZ2h6R/Oec+bO5saHpZWVJSkhQfH15mZflOBABoaS99vFln/vldrdm2V3dfNlK/u/g4tWmV4DsWAESlwd3a6W9Tx6lof5nOu/c9vfnpNt+RAHjiawyeXpI2VbufW7XuZkmnSLrIzG6obUczm25mi81s8Y4dO5o/KeolFJLmzpVuvz28DIV8JwIAtKQ/vLFKP3jiI2V0a6tXfziR6dABoAWMH9BZL918gvp1SdH1jy3W3XM/VyUDLwMxx9fXabXNjeqcc3dLuvtwOzrnZkqaKUmZmZm8a0WgUIjCDgDEog079+m+7LU6d0RP/f7i45QYH1FzOQBAVOvVobWeveF43fL8Mt3179VasblIf7hkhNrSghKIGb4+eeVK6l3tfrqkzZ6yAACAJnDXv1crMT5O/3nWURR3ALQoM5tsZjOLiop8R/EqOTFed11ynH511lF687PtOv/e97Rh5z7fsQC0EF+fvhZJGmRm/c0sSdJ3JL3kKQsAAGikTzfv1ksfb9a1E/qpa7tk33EAxBjn3Bzn3PTU1FTfUbwzM10/cYAeu26sduw9oHPuma/sVdt9xwLQAlpimvQnJOVIGmJmuWY21TlXLukmSa9L+kzS0865Fc2dBQAANI8/vLFK7ZMT9N0TB/qOAgCQNCGji+bcdIJ6dmita2cv0n3Za+UcI1wA0azZO2Q65y47xPpXJb3akGOa2WRJkzMyMhoTDQAANIHFG/I1d+V2/fzbQ5Sakug7DgCgSu9OKXr+e8fr589+ojteW6nlm4v0u4uOVUoS4/IA0SiQHeRpggkAQGRwzunO11epS9tWunZCP99xAAA1pCQl6J7LRur/nT5Ury7bogv++r425e/3HQtAMwhkgQcAAESGeZ/v1ML1+br5Wxl8IwwAEcrMdGPWQD1yzRhtLizW5Hvm6701O33HAtDEKPAAAIAGqax0+t3rK5XesbUuG9vHdxwAwBFkDemql246QV3btdLVDy/Up5t3+44EoAlR4AEAAA3y2oqtWp63Wz8+ZbCSEvhIAQBB0K9LGz01PaT2rRN164vLVVnJwMtAtODTGAAAqLfyikr9/o1VGtS1rc4b2ct3HABAPXRsk6RbzhiqJV8U6Nklub7jAGgigSzwmNlkM5tZVFTkOwoAADHp+Q/ztG7HPv30tCGKjzPfcQAA9XThqHSN6ddRM/71mQr2lfqOA6AJBLLAwyxaAAD4c6C8Qn96c7WO691B3z66m+84AIAGiIsz3X7ecO0uKdedr6/0HQdAEwhkgQcAAPhz79trtbmoRL/49hCZ0XoHAIJqaPf2um5CPz2xcJM+3FjgOw6ARqLAAwAA6uyJhRt199zPdcHIXpqQ0cV3HABAI/3wlMHq3j5Zv/rncpVXVPqOA6ARKPAAAIA6eXXZFv3nP5cpa0ia7rjoWN9xAABNoG2rBP3X5GH6dMtu/e2DL3zHAdAIFHjQYnJypBkzwksAQLDM/3ynfvTkUo3q01H3XT5aifF8hACAaHHG8O46cXCa/vDGam3fXeI7DoAG4tMZWkROjjRpknTrreElRR4ACI6PNxVq+t8Wa0BaG826eoxaJ8X7jgQAaEJmpv8552iVVlTq9lc+8x0HQAMFssDDNOnBk50tlZZKFRXhZXa270QAgLpYs32vrnlkoTq3TdKj141Vakqi70gAgGbQr0sbfS9roOZ8vFnzP9/pOw6ABghkgYdp0oMnK0tKSpLi48PLrCzfiQAAR5JXWKwrZy1QfFyc/nbdOHVrn+w7EgCgGd1w0kD17Zyi/3pxuQ6UV/iOA6CeAlngQfCEQtLcudLtt4eXodBXjzE2DwBEnl17D+jKWQu090C5HrturPp1aeM7EgCgmSUnxuu/zzla63bu04Pz1vmOA6CeEnwHQOwIhb5e2JG+GpuntDTcsqdm8QcA0PL2HijXtbMXKa+gWH+bOk7Derb3HQkA0EKyhnTVmcd011/eWqNzR/RS704pviMBqCNa8MArxuYBgMhzz1trtDyvSPdOGaWx/Tv5jgMAaGG3nj1M8XGm215aIeec7zgA6ogCD7xibB4AiDzvrdmpMf066ZRh3XxHAQB40CO1tX58ymC9tXK7/v3pNt9xANQRBR54dbixeQAALW93SZlWbC7SOFruAEBMu2ZCPw3p1k4/f/YTzZq/XiVlDLoMRDoKPPAuFJJuuYXiDgBEgiVfFKjSSeMGdPYdBQDgUWJ8nP56xSgN79Vet7/8qb71+2w9tWijyisqfUcDcAgUeAAAwJcWrs9XQpxpZJ8OvqMAADwbmNZW/7h+vP5x/TiltU/W/3tumU774zy9/MlmVVYyNg8QaQJZ4DGzyWY2s6ioyHcUAACiysL1+TomPVUpSUy0CQAIm5DRRS9873jNvHK0EuJNNz3+kSbfM19vr9rOIMxABAlkgcc5N8c5Nz01NdV3FAAAokZxaYU+yS3UuP50zwIAfJ2Z6bSju+tfPzxRf7z0OO0uKdO1jyzSlbMWak9Jme94ABTQAg8AAGh6H20sUFmFY4BlAMAhxceZzh+Zrrk/ydKvJw/TB+t26ZpHFmnvgXLf0YCYR4EHAABIkhasz5eZNLpfR99RAAARLikhTtdM6K+7LxuppZsKdd0ji7S/lCIP4BMFHgAAIElasH6XhvVor/bJib6jAAAC4sxjeuhPl47Q4i/ydd3sRSouZTp1wBcKPAAAQAfKK/TRRsbfAQDU3+TjeuquS0Zowfp8Xf/YIpWUUeQBfKDAg4iUkyPNmBFeAgCa37LcIh0or9RYxt8BADTAeSN76XcXHaf31+7S9L8tocgDeMAcqIg4OTnSpElSaamUlCTNnSuFQr5TAUB0W7A+X5I0hvF3AAANdNHodFVWOv3iuU9049+X6P4rR6tVQrzvWEDMoAUPIk52dri4U1ERXmZn+04EANFvwfp8DeraVp3btvIdBQAQYJeM6a3fnn+M3l61Qxffn6M5H29WaXml71hATAhkCx4zmyxpckZGhu8oaAZZWeGWOwdb8GRl+U4EANGtvKJSSzbk6/xRvXxHAQBEgSnj+qhNq3jd9e/VuvmJj5TWrpWmjO2jKeP6qFv7ZN/xgKgVyBY8zrk5zrnpqampvqOgGYRC4W5Zt99O9ywAaAmfbtmtfaUVGssAywCAJnLuiF56+6dZeuTaMRres73+PPdzTfi/t3TT4x9qzfY9vuMBUSmQLXgQ/UIhCjsA0FIWVo2/M44BlgEATSguznTykK46eUhXbdi5T3//4As9tXiT5q/ZqcevH69hPdv7jghElUC24EHsYVYtAGg+H6zLV7/OKTSbBwA0m35d2uhXZw/TKzdPVOvEeF3+0AdauXW371hAVKHAg4h3cFatW28NLynyAEDTqax0WrQhn+nRAQAtok/nFD0xbbySEuJ0+YML9Pk2umsBTYUCDyIes2oBQPNZvX2PiorLGH8HANBi+nVpoyemjVdcnOmyBxdozfa9viMBUYECDyLewVm14uOZVQsAmtqCdYy/AwBoeQPS2uqJaeMlSVMe/EBrd1DkARqLAg8iHrNqAUDzWbg+Xz1Tk5XesbXvKADwNWY2wMxmmdmzvrOgeWR0bavHp41TRaXTaX+cpykPfqBH39+gLUXFvqMBgUSBB4EQCkm33EJxBwCaknNOC9aHx98xM99xAEQRM3vYzLab2fIa6083s1VmtsbMfnm4Yzjn1jnnpjZvUvg2uFs7vfD9CbrxpIHavueAbntphUIz3tK5976nv2av0Tpa9gB1xjTpAADEqPU792nn3gOMvwOgOcyWdI+kxw6uMLN4SfdKOlVSrqRFZvaSpHhJM2rsf51zbnvLRIVvvTul6GffHqKffXuI1mzfq9dXbNUbK7bqztdW6c7XVmlQ17b69tHdddHodPXr0sZ3XCBiUeABACBGLVhfNf7OAMbfAdC0nHPzzKxfjdVjJa1xzq2TJDN7UtK5zrkZks5u6HOZ2XRJ0yWpT58+DT0MIkRG17bK6Jqh75+coc2FxXpjxVa9tmKr/pq9Rve/s1ZXhfrph5MGKTUl0XdUIOLQRQsAgBi1cH2+urRN0gC+DQXQMnpJ2lTtfm7VulqZWWczu1/SSDO75VDbOedmOucynXOZaWlpTZcW3vXs0FrXTOivJ6eH9MEtk3RxZroeeX+9Tvr923r0/Q0qq6j0HRGIKIEs8JjZZDObWVRU5DsKAACBtZDxdwC0rNrebNyhNnbO7XLO3eCcG1jVygcxrGv7ZM244Fi9cvNEHdW9vW57aYVO/9M8vb2KnnzAQYEs8Djn5jjnpqempvqOAgBAIG3K36+8wmKN7Uf3LAAtJldS72r30yVt9pQFATWsZ3s9Pm2cZl45WhWVTtc+skhXPbxQq7ft8R0N8C6QBR4AANA4C78cf4cBlgG0mEWSBplZfzNLkvQdSS95zoQAMjOddnR3vfHjk/Srs47SRxsLdMaf39WvXlimXXsP+I4HeEOBBwCAGLRwfb7aJydoSLd2vqMAiEJm9oSkHElDzCzXzKY658ol3STpdUmfSXraObfCZ04EW1JCnK6fOEDv/PxkXT6uj55YuElZv8/WzHlrtfdAue94QItjFi0AAGLQwg3h8Xfi4hh/B0DTc85ddoj1r0p6tYXjIMp1apOk/zl3uK4c31e/eeUz/fbVlfrTm5/rjOE9dHFmusYx3hxiBAUeBFJOjpSdLWVlSaGQ7zQAECzbd5do/c59umxs7yNvDAABYGaTJU3OyMjwHQUeDerWTo9eN1ZLvijQM4s36eVPtui5D3PVp1OKLh6drgtHp6tnh9a+YwLNhgIPAicnR5o0SSotlZKSpLlzKfIAQH0sODj+Tn/G3wEQHZxzcyTNyczMnOY7C/wb3bejRvftqP+aPEyvLd+qZxbn6g//Xq273lytEzK66KLR6fr20d2VnBjvOyrQpCjwIHCys8PFnYqK8DI7mwIPANTHwvX5SkmK19E92/uOAgBAs0lJStAFo9J1wah0bcrfr2eW5Oq5Jbn64ZNLNahrW73w/Qlq04r/EiN6MMgyAicrK9xyJz4+vMzK8p0IAIJlwfpdGt23oxLi+RgAAIgNvTul6CenDta7vzhZ904ZpTU79uq/XmSMb0QXypUInFAo3C2LMXgAoP7y95Vq9ba9OndEL99RAABocXFxprOO7aFV2wbp7rmfa0JGZ10wKt13LKBJUOBBIIVCFHYAoCEWbQiPvzO2fyfPSQAA8OcH38rQB2t36VcvLFdm307q0znFdySg0WibjaiQkyPNmBFeAgAObeH6fCUlxOnY9FTfUQAA8CYhPk5/+s4IHSiv1JOLNvqOAzQJCjwIvIOzat16a3hJkQcADm3B+l0a2buDWiUwcwiA6GFmk81sZlFRke8oCJCeHVpr/IBOem35VjnnfMcBGo0CDwKvtlm1AADftLukTJ9u3q1xA5geHcDhmdlvq90+1WeWunDOzXHOTU9NpXUi6uf0o7tr3c59WrN9r+8oQKNR4EHgMasWANTN4g35qnTSOMbfAXBkp1e7fYe3FEAzO+3o7pKk11ds9ZwEaLxAFnhogonqDs6qdfvt4SWDLwNA7eZ8vEXtWiVodN+OvqMAABARurVP1qg+HfQaBR5EgUAWeGiCiZpCIemWWyjuILaZ2exqt6/2GAURqKi4TK8u26JzRvRUciLj7wA4oq5m9hMz+2m121/++A4HNKXTh3fX8rzd2pS/33cUoFHqVOAxs2Qzu8jM/mxmz5jZY2b2CzM7urkDAgDq7Lhqt3/oLQUi0ksfb9aB8kpdOqa37ygAguFBSe0kta12u/oPEDW+TTctRImEI21gZr+WNFlStqQFkrZLSpY0WNL/mVmypJ865z5pvpgAgDpg+gcc0tOLNmlo93Y6phetXwEcmXPuv31nAFpK385tNLxXe/3x36tVXFqhqRP7KyXpiP9VBiJOXV61i5xzvz7EY3eZWVdJfZouEgCggdLN7G5JVu32l5xzP/ATC759unm3luUV6bbJw2RmvuMACAgzO1nSTZKGVq36TNI9zrlsb6GAZvLXKaP1v69+qj/8e7X+9sEX+smpg3XR6HQlxAdyVBPEqCMWeJxzr0iSmfVzzm2o/piZjXHOLVK4VQ8AwK+fV7u92FsKRJynF29SUnyczhvRy3cUAAFhZmdJukfS/1T9mKRRkh42s5ucc6/6zAc0tT6dU/TAlZlavCFfv331M/3y+WV6aP56/fL0oZp0VFe+IEEg1Kfd2fNmNtk5lydJZnaSwm/6xzRLMqCBcnKk7OzwdOkMuoxY4px71HcGRJ4D5RV6YWmeTj26mzq2SfIdB0Bw/FzSec65j6utW2pmiyX9RVJEFXjMbLKkyRkZGb6jIOAy+3XSczcer9dXbNWdr63S9Y8t1tj+nXTLGUM1sg+zUCKy1ae92XclvWBm3c3sTEl/lnRm88QCGiYnR5o0Sbr11vAyJ8d3IqBlmdnVZvahme2r+llsZlf5zgV/3lixTYX7y3RpJoMrA6iX7jWKO5KkqnE3u3nIc1jMsoumZGY6fXgPvf7jE3X7ecO1bsdenf/X9/X9f3yoDTv3+Y4HHFKdW/A45xaZ2Q8kvSGpRNKpzrkdzZYMaIDsbKm0VKqoCC+zs2nFg9hRVcj5kaSfSPpQXzWn/52ZyTn3mMd48OTpxZvUq0NrnZDRxXcUAMFyuP/F8j9cxITE+DhdOb6vzh/ZSw/OW6eZ89bp9RVbdfm4Prp50iB1advKd0Tga+oyi9YcfX1mlhRJRZJmVf2H4ZzmCgfUV1aWlJQULu4kJYXvAzHke5LOrzFe2ltmdqGkJyVR4IkxuQX7NX/NTv3gW4MUF8fYAQDqZaCZvVTLepM0oKXDAD61bZWgH586WJeP66M/zf1cf1+wUc99mKcbThqg605gxi1Ejrq8En/f7CmAJhIKSXPnMgYPYlb7moPhS5JzboOZtfeQB549uyRXknTR6HTPSQAE0LmHeYz/HyAmdW2frN+ef4yum9Bfd762Ur9/Y7Uey2HGLUSOuhR45jnn3OE2MDM70jZASwmFKOwgZhU38DFEocpKp2cW52rCwC7q3SnFdxwAwfOppDTn3KfVV5rZ0WIGXcS4jK5tNfOqr8+4NWv+ev33uUfr+IF0iYY/dSkxvm1mN5tZn+orzSzJzL5lZo9Kurp54gEA6uEoM/uklp9lkob6DoeW9d7ancorLNYlYxhcGUCD/EVSWi3r0xWebAWIeQdn3Lr/ilEqKa/QlAcX6GfPfKz8faW+oyFG1aUFz+mSrpP0hJkNkFQgKVlSvMIDLv/RObe02RICAOrqOIVnNtlUY31fSZtbPg58enpxrlJbJ+q0YRE32Q2AYDjGOfdOzZXOudfN7A8+AgGR6OCMWycN7qq/vPW5Zs5bp7mfbdN/njVMF47qJTPGwEPLOWILHudciXPur865CZL6SJokaZRzrq9zbhrFHQCIGH+UtNs590X1H0n7qx5DjCjcX6rXV2zV+SN7KTkx3nccAMGU2MDHgJjUOilevzh9qF7+wQnq36WNfvbMx5ry4AKt27HXdzTEkCMWeMws2cx+ZGb3SLpW0g7nXGGzJwMA1Fc/59wnNVc65xZL6tfyceDLCx/lqbS8UhdnMrgygAb73MzOrLnSzM6QtM5DnsMys8lmNrOoqMh3FMS4od3b69kbjtdvzhuu5ZuLdPqf3tWf3/xcB8orfEdDDKhLF61HJZVJelfSmZKOlvTD5gwFAGiQ5MM81rrFUjSRqm7B/ykp1Tl3ke88QeGc01OLczW8V3sd3TPVdxwAwfUjSa+Y2SWSllSty5QUknS2r1CH4pybI2lOZmbmNN9ZgLg40xXj++q0Yd30Py9/qj++uVrZq7dr9rVjldqaBnBoPnUZZHmYc+4K59wDki6SNLGZMwEAGmaRmX3jg62ZTdVXH84Pycx+bGYrzGy5mT1hZocrGB3uOA+b2XYzW17LY6eb2SozW2NmvzzccZxz65xzUxuSIZYtz9utz7bs1qWZDK4MoFGcwuNwvqNwK9B+Vbevl0RTBKAOurZP1j1TRuneKaO0PK9IVzy0QIX7GYAZzacuLXjKDt5wzpUzSBQARKwfSfqnmV2ur3/bmiTp/MPtaGa9JP1A4aJ+sZk9Lek7kmZX26arpGLn3J5q6zKcc2tqHG62pHskPVbjOeIl3SvpVEm5ChekXlJ40P4ZNY5xnXOOaXgb4OnFm9QqIU7njOjlOwqAYPuTpP9wzj1SfaWZZVY9NtlDJiCQzjq2h1KS4vXdvy/RZQ8u0N+njlXntq18x0IUqksLnuPMbHfVzx5Jxx68bWa7mzsgAKBunHPbnHPHS/pvSRuqfv7bORdyzm2twyESJLU2swRJKfrmzFsnSXrxYMueqtZCd9eSY56k/FqOP1bSmqqWOaWSnpR0rnNumXPu7Bo/FHcaoKSsQi8szdMZw7vTBBxAYzGuG9CETh7aVQ9dlal1O/bqsgc/0I49B3xHQhSqyyxa8c659lU/7ZxzCdVut2+JkACAunPOve2c+0vVz1t13CdP0u8lbZS0RVKRc+6NGts8I+k1SU9WtRK6TtIl9YjWS1+fwj23al2tzKyzmd0vaaSZ3XKIbRhUs5rXlm/VnpJyXUL3LACNF1XjugGR4MTBaXrkmjHalF+s78zM0bbdJb4jIcrUpQVPxOEDPQA0LTPrKOlcSf0l9ZTUxsyuqLmdc+5OSSWS7pN0jnOuPnN/1tbH1x1qY+fcLufcDc65gc65ml24Dm4zxzk3PTWVwYQl6alFm9S7U2uNH9DZdxQAwdeocd0A1O74jC569Lqx2lpUorP/Ml8PzlunvQfKfcdClAhkgYcP9ADQ5E6RtN45t8M5VybpeUnH19zIzCZKGi7pn5Juq+dz5Eqq3rQkXd/sBoYG2rhrv3LW7dIlo3srLo7x8gA02o8kXWtm2Wb2h6qfg4MsM6Mu0Ahj+3fSU98NaVDXtvrfVz/T8TPm6g9vrNKuvXTbQuMEssADAGhyGyWNN7MUC4+mP0nSZ9U3MLORkh5UuKXPtZI6mdlv6vEciyQNMrP+Zpak8CDOLzVJeuiZJZtkJl2Ume47CoAo0ATjugE4jOG9UvX4tPF64fsTdPzALrrn7TWacMdbuu3F5dqUv993PARUXWbRAgBEOefcAjN7VtKHksolfSRpZo3NUiRd7JxbK0lmdrWka2oey8yekJQlqYuZ5Uq6zTk3q2omxpskva7wzFkPO+dWNNOvFFMqKp2eXZKrEwelqUcqQ2MAaDrOubclve07BxCtRvTuoPuvHK012/fqgXfW6vGFG/X3BRt1znE99d2TBmhod4a9Rd1R4EHUy8mRsrOlrKzw/YO3QyF/mYBI5Jy7TYfpduWce6/G/TKFW/TU3O6ywxzjVUmvNiImajHv8x3aUlSiW88e5jsKAABogIyubfW7i4/Tj08drFnz1+uJhRv1z4/yNGloV92QNVBj+nXyHREBQIEHUS0nR5o0SSotleLjJTOpvFxKSpLmzqXIAyA6PL1okzq1SdIpR3XzHQUAADRCzw6tdevZw3TTyRl6LOcLzX5/vS6+P0eZfTvq1rOH6bjeHXxHRARjDB5EtezscHGnokIqK/vqdmlp+DEACLpdew/ozc+26fyRvZSUwGUdQGxill1Em45tkvTDUwbpvV9+S7dNHqZNBft13exF2s7U6jgMPgkiqmVlhVvrxMdLiYlf3Y6PlzZuDLfwqYucHGnGjLpvDwAt5Z8f5amswumSzN5H3hgAohSz7CJapSQl6NoJ/fX3qeO0r7RcP3pqqSoqne9YiFAUeBDVQqFwV6zbbw+32Hn7bWnatHBXrQcfDHffOlLR5mA3r1tvrdv2ANBSnHN6evEmHde7g4Z0b+c7DgAAaCaDurXT/5wzXO+v3aW/vr3GdxxEKAo8iHqhkHTLLeFlKCT16RMeh6euXbWqd/OiaxeASLJ0U6FWb9urS2m9AwBA1Ls4M13njuipP765WgvX5/uOgwhEgQcxp3q3raSkr2bXqq56l6y6bA8APjy9OFetE+M1+bgevqMAAIBmZmb63/OPUZ9OKfrhkx+pYF+p70iIMMyihZhzsNvWoaZLrz7z1sHZtg63PQD4UFpeqTkfb9aZx/RQu+RE33EAAEALaNsqQfdMGaUL/vq+fvL0Ut13xWglJ8b7joUIQQsexKTq3bZqqq1L1uG2BwAfNhcWa++BcoUGdvYdBQAAtKDhvVJ16+RhenvVDp1y1zt6Y8VWOcfAy6DAA3wDXbIABEFeYbEkqVeH1p6TAACAlnbl+L56Ytp4pSTFa/rfluja2Yu0fuc+37HgGQUeoIbqM2/NnUurHQCRKbdgvyQpvSMFHgAAYlFoYGe98oOJ+tVZR2nxhgJ9+4/z9LvXV2p/abnvaPCEMXiAWhyccQsAIlVeQbHiTOqemuw7CgAA8CQxPk7XTxygc0b01P+9ulL3vr1W//wwT7eePUynD+8uM/MdES2IFjwAAARQbmGxurdPVmI8l3IAAGJd13bJuuvSEXrmhpDat07Ujf/4UFc9vFBrtu/1HQ0tiE+FAAAEUG5BsXrRPQsAAFQzpl8nvXzzCfr15GFauqlQZ/x5nmb86zPtO0C3rVhAgQcAgADKKyhWescU3zEAAECESYiP0zUT+uutn2bp3BG99MA76zTpD+98OX4fohcFHgAAAqa8olJbd5cwgxYAADiktHat9PuLj9OzN4S0a98BzZq/3nckNDMKPAAABMy2PQdUUenoogUAVcxsspnNLCoq8h0FiDiZ/TrpzGN66NnFuXTVinIUeIBqcnKkGTPCSwCIVLn5TJEOANU55+Y456anpqb6jgJEpKuP76c9B8r1/Ie5vqOgGTFNOlAlJ0eaNEkqLZWSkqS5c5kqHUBkyissliS6aAEAgDoZ2buDjk1P1ez3N+iK8X2ZPj1K0YIHqJKdHS7uVFSEl9nZvhMBQO3yCsIFnp4UeAAAQB2Yma4O9dPaHfs0f81O33HQTCjwAFWyssItd+Ljw8usLN+JAKB2uQXF6tK2lZIT431HAQAAAXH2cT3UuU2SHn1/g+8oaCYUeIAqoVC4W9btt9M9C0BkyyssZvwdAABQL60S4nXZ2D6au3K71u3Y6zsOmgEFHqCaUEi65RaKOwAiW15hMTNoAQCAertifF8lJ8Tr7L/M152vrVTBvlLfkdCEKPAAABAglZVOeQXFSmf8HQAAUE/dU5P18g9O0ClHddN976zVxDvf1l1vrFLR/jLf0dAEKPAAABAgO/ceUGlFJV20AABAgwxMa6u7Lxup1390ok4anKa731qjE+58S39+83PtLqHQE2QUeAAACJDcg1OkU+ABAACNMLhbO917+Sj964cTFRrQWX98c7Um3vG27n17jfYeKPcdDw1AgQcAgAA5OEV6rw4pnpMAAIBocFSP9pp5Vabm3HSCMvt21O9eX6WJd7yl+99Zq/2lFHqChAIPAAABkltACx4AAND0jklP1axrxuiF70/Qsekd9H//WqkT73xbD727TsWlFb7joQ4o8AAAECB5hfvVISVRbVsl+I4CAACi0IjeHfTodWP13I0hDe3eXr955TOd+Lu39ch761VSRqEnkkVMgcfMBpjZLDN71ncWAAAiVV5BsXoxgxYAAGhmo/t20t+vH6enpo/XgC5t9N9zPlXW77L1t5wNOlBOoScSNWuBx8weNrPtZra8xvrTzWyVma0xs19KknNunXNuanPmAQAg6HIp8AAAgBY0bkBnPfXdkB6fNk7pHVvr1hdX6JS73tHn2/b4joYamrsFz2xJp1dfYWbxku6VdIakYZIuM7NhzZwDaJCcHGnGjPDycOsAoCU455RXWKz0jgywDAAAWtbxA7vomRtCevS6sSopq9RF9+doyRcFvmOhmmbtwO+cm2dm/WqsHitpjXNunSSZ2ZOSzpX0aXNmAeorJ0eaNEkqLZWSkqS5c8Pra64LhfzmBBA7CveXaX9pBQMsAwAAL8xMJw1O0/M3Hq8rZy3Q5Q99oL9ePkrfGtrNdzTIzxg8vSRtqnY/V1IvM+tsZvdLGmlmtxxqZzObbmaLzWzxjh07mjsrYlh2driQU1ERXmZn174OAFrKlzNo0UULAAB41LtTip698XgN6tpO0x5bomeX5PqOBPkp8Fgt65xzbpdz7gbn3EDn3IxD7eycm+mcy3TOZaalpTVjTMS6rKxwK534+PAyK6v2dQDQUvIK90uS0mnBAwBfY2aTzWxmUVGR7yhAzOjStpWemD5eoQGd9bNnPtb976yVc853rJjmY47VXEm9q91Pl7TZQw7gsEKhcBes7OxwIedgV6za1gFASzjYgocCDwB8nXNujqQ5mZmZ03xnAWJJ21YJeviaMfrpMx/r//61Ujv3HNB/nHmU4uJqa9eB5uajwLNI0iAz6y8pT9J3JE3xkAM4olDom0Wc2tYBQEvIKyxWm6R4pbZO9B0FAABAkpSUEKc/XzpCndsk6aH567Vz7wHdedFxSkrw0WEotjX3NOlPSMqRNMTMcs1sqnOuXNJNkl6X9Jmkp51zK5ozBwAA0SC3IDyDlhnfigEAgMgRF2e6bfIw/fzbQ/TC0s26/rHF2neg3HesmNPcs2hddoj1r0p6taHHNbPJkiZnZGQ09BAAAAROXkExM2gBAICIZGb6/skZ6tI2Sbc8v0xTHlqgR64Zo05tknxHixmBbDPlnJvjnJuemprqOwoAAC0mr7CYGbQAAEBEu3RMHz1wZaZWbtmti+5/X7kF+31HihmBLPAAABBr9pSUqai4jBY8AAAg4p06rJv+NnWcdu45oEsf+ECbC4t9R4oJFHgAAAiAvEJm0AIAAMExtn8nPT5tvHYXl+mKWQu0a+8B35GiHgUeAAACIK9qinS6aAEAgKAY3itVs64Zo7yCYl39yELtKSnzHSmqUeABGiAnR5oxI7wEgJaQe7DAQwseAAAQIGP7d9L9V4zWyi17NPXRxSopq/AdKWpR4AHqKSdHmjRJuvXW8JIiD4CWkFdYrFYJcUpr28p3FAAAgHo5eWhX3XXpCC3akK/v/+NDlVVU+o4UlQJZ4DGzyWY2s6ioyHcUxKDsbKm0VKqoCC+zs30nAhAL8grCM2iZme8oAAAA9XbOcT11+7nDNXfldv3smY9VWel8R4o6gSzwME06fMrKkpKSpPj48DIry3ciALEgt7CY7lkAACDQrhjfVz//9hC9uHSzfj1nhZyjyNOUEnwHAIImFJLmzg233MnKCt8HgOaWV7Bfw4Z18x0DAACgUb6XNVC7i8v0wLx1Sm2dqJ+eNsR3pKhBgQdogFCIwg6AllNSVqGde0uZQQsAAASememXZwxVUXGZ/vLWGqW2TtT1Ewf4jhUVKPAAABDh8gqZQQsAAEQPM9P/nn+M9pSU6zevfKb2yYm6ZExv37ECjwIPYl5OTsO7WzVmXwCoqy+nSO+Q4jkJAABA04iPM/3x0hHaXVKmXz7/idq3TtDpw3v4jhVoFHgQ0w5OeV5aGh4wee7cuhdqGrMvANRHXlWBJ50WPAAAIIokJcTpgStH68pZC/WDJ5Zq1jUJmjgozXeswArkLFpMk46m0pgpz5kuHUBLySvcr4Q4U7f2yb6jAAAANKmUpAQ9fPUYDezaVtMeW6yctbt8RwqsQBZ4mCYdTaUxU54zXTqAlpJXUKzuqcmKjzPfUQAAAJpcakqi/j51rPp0StF1sxdp4fp835ECKZAFHqCpHJzy/Pbb69/FqjH7AkB95BYU0z0LAABEtc5tW+kf149Xzw7JuvaRhVryRYHvSIFDgQcxLxSSbrmlYQWaxuwLAHWVV1jMAMsAACDqpbVrpSemjVfX9sm65uGFWrqp0HekQKHAAwBABCstr9S23SVMkQ4AAGJC1/bJenzaOHVsk6SrZi3Q8jzG3q0rCjwAAESwrUUlqnTMoAUAAGJHj9TWenzaOLVLTtQVsxbo0827fUcKBAo8QDPIyZFmzAgvAaAxcgv3S5LSO1DgAQAAsSO9Y4qemDZerRPjdcWsBVq1dY/vSBGPAg/QxHJypEmTpFtvDS8p8gBojLyCYkmiixYAAIg5fTqHizyJ8abLH/pAa7bv9R0pogWywGNmk81sZlERffEQebKzpdJSqaIivMzO9p0IQJDlFhTLLNxUGQBQO/5/AESvfl3a6PFp4yWZpjz4gdbv3Oc7UsQKZIHHOTfHOTc9NTXVdxTgG7KypKQkKT4+vMzK8p0IQJDlFRarW7tkJSUE8pINAC2C/x8A0W1gWls9MW2cKiqdLpv5gb7YRZGnNnxaBJpYKCTNnSvdfnt4yRTqABojr6CY7lkAACDmDerWTv+YNk4Hyis05cEF2pS/33ekiEOBB2gGoZB0yy0UdwA0Xl5hsXoxwDIAAICGdm+vv00dpz0lZZry0AfaXFjsO1JEocADAECEqqh02lxYzBTpAAAAVYb3StXfrx+nwn1luuzBD7S1qMR3pIhBgQcAgAi1fU+JyisdXbQAAACqOTa9gx6dOla79pZqyoMfKH9fqe9IEYECDwAAEerLKdLpogUAAPA1o/p01MPXjNG6nfv01KJNvuNEhATfAYBokpMTnhb94MxZtd1mXB4AdZVbVeBJ75jiOQkAAEDkGdu/k4Z2b6f5a3boxqyBvuN4R4EHaCI5OdKkSVJpaXiKdDOpvPzrt5OSmFkLQN3lFdKCBwAA4HAmDuqiR9//QsWlFWqdFO87jleB7KJlZpPNbGZRUZHvKMCXsrPDxZ2KCqmsrPbbpaXh7QCgLnILitW5TVLMf1gBAAA4lImD0lRaUakF63f5juJdIAs8zrk5zrnpqampvqMAX8rKCrfQiY+XEhNrv52U9FWXLQA4ktyC/QywDAAAcBhj+3dSUkKc3v18p+8o3tFFC2gioVC4+xVj8ABoKnmFxRravZ3vGAAAABErOTFe4/p30ruf7/AdxTsKPEATCoW+XsA51G0AOBLnnDYXFmvS0K6+owAAAES0iYO66LevrtTWohJ1T032HcebQHbRAgAg2u3aV6qSskoGWAYAADiCiYPSJCnmW/FQ4AEAIAIxRToAAEDdDO3eTl3ator5cXgo8AAAEIHyqgo8DLIMAABweGamEwd10fw1O1VZ6XzH8YYCDwAAESivcL8kCjwAAAB1ceLgNOXvK9WnW3b7juINBR4AACJQbkGx2icnqH1you8oAAAAEW9CRhdJ0rwYHoeHAg8AABEor6BYvRh/BwAAoE7S2rXSsB7tNW81BR4AAZKTI82YEV4G6dgA6i6vsJgZtAAAAOph4uAuWvJFgfYdKPcdxYsE3wEA1E9OjjRpklRaKiUlSXPnSqFQ5B8bQN0555RbUKzxAzr7jgIAABAYJw5K0wPvrNOC9bv0raHdfMdpcYFswWNmk81sZlFRke8oQIvLzg4XYCoqwsvs7GAcG0Dd7S4u194D5UpngGUAAIA6G923o5IT4zRvdWxOlx7IAo9zbo5zbnpqaqrvKECLy8oKt66Jjw8vs7KCcWwAdZd7cAYtumgBAADUWXJivMb176x3Y3SgZbpoAQETCoW7TmVnhwswTdmFqjmPDaDu8gqKJTFFOgAAQH1NHNRFv3nls5gczzCQLXiAWBcKSbfc0jwFmOY8NoC6ya0q8KQzixYAAEC9ZA3pKkma8epnqqx0ntO0LAo8AABEmLzCYrVOjFfHlETfUQAAAAIlo2tb/fKMoXr5ky36zSufybnYKfLQRQsAgAiTV1CsXh1by8x8RwEAAAic7544QNt2l+jh99are2orTT9xoO9ILYICDwAAESa3cD8zaAEAADSQmenWs4Zp+54D+u2rK5XWrpXOH5nuO1azo4sWAAARJq8g9gYFBAAAaEpxcaa7LjlOoQGd9fNnPtG81dE/sxYFHgAAIsi+A+Uq2F/GDFoAAACN1CohXg9cNVqDurXTDX9fok9yC31HalYUeAAAiCB5hVVTpNOCBwAAoNHaJyfq0WvHqGNKkq59ZJE27NznO1KzocADAEAEyWOKdAAAgCbVtX2yHps6VpXO6epHFmrHngO+IzULCjwAAESQ3MKDBR5a8AAAADSVgWlt9fA1Y7R99wFdN3uR9h4o9x2pyVHgAQAgguQVFCspPk5pbVv5jgIAABBVRvbpqHsvH6lPt+zWjX9fotLySt+RmhQFHqAJ5ORIM2aEl0fa7sYbwz85Od+8X5/j1fU5G7tPU+wLoO5yC/arZ4dkxcWZ7ygAAABR51tDu2nGBcfo3c936hfPfqzKSuc7UpNJ8B0ACLqcHGnSJKm0VEpKkubOlUKh2rfLygpvJ0mzZoWXZWXh5SOPSG+/Hb59pOPV9Tkbu09T7AugfvIKi5lBCwAAoBldktlbO/Yc0O9eX6Vu7ZN1y5lH+Y7UJALZgsfMJpvZzKKiIt9RAGVnhwsfFRXhZXb2obc7WMyRwrer3z+4b12OV9fnbOw+TbEvgPrJKyhmBi0AAIBm9r2sgboq1FcPzFunh95d5ztOkwhkgcc5N8c5Nz01NdV3FEBZWeFWLfHx4WVW1qG3S0z86n5i4tfvH9y3Lser63M2dp+m2BdA3ZWUVWj7ngPMoAUAANDMzEy3TT5aZwzvrt+88ple+niz70iNRhctoJFCoXCXpezscOHjUF2XQqHwNo89Fr5/1VXhZfX7B/c90vHq+pyN3acp9gVQd1uKSiSJFjwAAAAtID7O9MdLR2jXvoX66dNL1blNkiZkdPEdq8HMueAOKJSZmekWL17sOwYANCszW+Kcy/SdI5JFy/Vg/uc7dcWsBXpy+niNH9DZdxwAEYbrwZFFy/UAQMsqKi7TJffnKK+wWE9OH6/hvSK7t9ChrgeB7KIFAEA0yi3YL4kWPABwkJmdZ2YPmtmLZnaa7zwAolNq60Q9et1YtU9O0DWPLNKm/P2+IzUIBR4AACJEXmGx4uNMPVKTfUcBgEYzs4fNbLuZLa+x/nQzW2Vma8zsl4c7hnPuBefcNEnXSLq0GeMCiHHdU5P12NSxKquo1FUPL9SuvQd8R6o3CjwAgIhkZgPMbJaZPes7S0vJKyhW9/bJSojn8gwgKsyWdHr1FWYWL+leSWdIGibpMjMbZmbHmNnLNX66Vtv1V1X7AUCzyejaTg9fk6nNhcW6bvYi7TtQ7jtSvfAJEgAgMxtiZkur/ew2sx818Fi1fmNb9Vh9vrVd55yb2pAMQZVbyBTpAKKHc26epPwaq8dKWlP1Hl8q6UlJ5zrnljnnzq7xs93C7pD0L+fchy39OwCIPaP7dtI9U0ZpWV6Rvv/4hyqrqPQdqc4o8AAA5Jxb5Zwb4ZwbIWm0pP2S/ll9GzPrambtaqzLqOVws1XjG9uqbRv6rW3MyCsoVnpHCjwAolovSZuq3c+tWncoN0s6RdJFZnZDbRuY2XQzW2xmi3fs2NF0SQHErFOHddP/nn+Mslft0C+fW6agTE7FNOkAgJomSVrrnPuixvqTJN1oZmc650rMbJqk8yWdWX0j59w8M+tXy3G//NZWkszs4Le2MySd3dS/RNCUV1Rq6+4S9aLAAyC6WS3rDvk/J+fc3ZLuPtwBnXMzJc2UwrNoNSodAFS5bGwfbd99QH98c7W6tW+lX5w+1HekI6IFDwCgpu9IeqLmSufcM5Jek/SkmV0u6TpJl9TjuPX61tbMOpvZ/ZJGmtkth9hmspnNLCoqqkeMyLR1d4kqKh1dtABEu1xJvavdT5e02VMWADisH0zK0JRxffTX7LWa/d5633GOiAIPAOBLZpYk6RxJz9T2uHPuTkklku6TdI5zbm99Dl/bIQ+1sXNul3PuBufcwKpWPrVtM8c5Nz01NbUeMSJTbkGxJCm9Y4rnJADQrBZJGmRm/auuOd+R9JLnTABQKzPT7ecO12nDuum/X/5Ur3yyxXekw6LAAwCo7gxJHzrnttX2oJlNlDRc4fF5bqvnsfnW9jDyqgo8dNECEC3M7AlJOZKGmFmumU11zpVLuknS65I+k/S0c26Fz5wAcDjxcaa7Lxup0X066sdPLVXO2l2+Ix0SBR4AQHWXqZbuWZJkZiMlPSjpXEnXSupkZr+px7H51vYw8grDBZ4eqcmekwBA03DOXeac6+GcS3TOpTvnZlWtf9U5N7iqheb/+s4JAEeSnBivh67OVN/OKZr+2GKt3VGfRuwthwIPAECSZGYpkk6V9PwhNkmRdLFzbq1zrlLS1ZJqDsRc6ze2ksS3toeXW7Bfae1aKTkx3ncUAAicaBqTDUBk6pCSpEevG6sK5zTznXW+49SKAg8AQJLknNvvnOvsnKv107Fz7j3n3LJq98uccw/Wsl2t39hWPca3toeQV8gU6QDQUNE0JhuAyNWzQ2udc1xPvfTxZu0uKfMd5xso8AAAEAHyCoqZQQsAACDCTRnXR8VlFXrxozzfUb6BAg8AAJ5VVjptLixhgGUAAIAId2x6Bw3v1V7/WLBRzh1yQlgvKPAAAODZjr0HVFpRyRTpAAAAATBlbF+t3LpHH20q9B3laxJ8BwCiXU6OlJ0tZWVJoVDD9+/cWdq169DHOdJ2teVobDYATSO3aor0dLpoAQAARLxzRvTU/77yqR5fsFGj+nT0HedLFHiAZpSTI02aJJWWSklJ0ty59SukHNz/wAGpslKKi5NatfrmcY60XW05pMZlA9B0Dk6RThctAACAyNe2VYLOHdlLzy3J1a1nDVNqSqLvSJIC2kWLaRARFNnZ4QJKRUV4mZ3dsP0rK8P3KytrP86RtqstR2OzAWg6uQX7JYlBlgEAAAJiytg+OlBeqec/yvUd5UuBLPAwDSKCIisr3DomPj68zMpq2P5xVX+pcXG1H+dI29WWo7HZADSdvIJidUxJVJtWNKwFgIbgC2AALW14r1Qd17uDHo+gwZb5JAk0o1Ao3PWpoePcVN//cGPwHGm7Q+VoTDYATSevsJjuWQDQCM65OZLmZGZmTvOdBUDsuHxsH/3iuU+0+IsCjenXyXccCjxAcwuFGlc8qev+R9qutscbmw1A08grKNaAtDa+YwAAAKAezj6uh25/OTzYciQUeALZRQsAgGjhnFNuQTFTpAMAAARMSlKCzh/VS68s26KCfaW+41DgAQDAp4L9ZSouq2CAZQAAgACaMq6PSssr9dyH/gdbpsADAIBHeQVMkQ4AABBUQ7u316g+HfT4Qv+DLVPgAQDAo4NTpKdT4AEAAAiky8f11bod+/TBunyvOSjwAADgUV5huAVPegfG4AEAAAiis47todTWiXp84UavOSjwAADgUW5Bsdq2SlD71kxsCQANZWaTzWxmUVGR7ygAYlByYrwuGNVLry3fol17D3jLQYEHAACPwjNotZaZ+Y4CAIHlnJvjnJuemprqOwqAGHX5uD4qq3B6dom/wZYp8AAA4FFeYTEzaAEAAARcRtd2Gtuvk55YuFGVlX4GW6bAAwCAR3kF+5lBCwAAIApMGddHG3btV866XV6enwIPAACe7C4p0+6SclrwAAAARIHTh3dXx5RE/WPBF16enwIPAACe5BVUzaDVkRm0AAAAgi45MV4XjkrXGyu2afuekhZ/fgo8AAB4crDAQxctAACA6HDZuD4qr3R6ZnHLD7ZMgQcAAE/yCqsKPHTRAgAAiAoD09oqNKCznlzU8oMtU+ABAMCT3IL9apUQpy5tk3xHAQAAQBOZMq6PNuUX6901O1v0eSnwAADgSV5hsXp1bC0z8x0FAAAATeTbR3dX5zZJeryFB1umwAMAgCd5BcV0zwKAJmBmk81sZlFRke8oAKCkhDhdlJmuNz/brm27W26wZQo8AAB4kltQzAxaANAEnHNznHPTU1NTfUcBAEnSZWP6qKLS6alFm1rsOSnwAADgQXFphXbtK1U6M2gBAABEnX5d2uiEjC56cuFGVbTQYMsUeAAA8IAZtAAAAKLb5eP6aHNRid5Zvb1Fno8CDwAAHnxZ4KEFDwAAQFQ6ZVg3pbVrpccXbGyR56PAAwCAB7kF+yWJLloAAABRKjE+Tpdkpuutldu1uerLveZEgQcAAA/yCoqVEGfq2i7ZdxQAAAA0k++M6SMntchgyxR4AADwIK+wWD06JCs+znxHAQAAQDPp3SlFJw5K01OLNqm8orJZn4sCDwAAHuQWFCu9A1OkAwAARLsp4/po6+4SvbWyeQdbpsADAIAHeQXFDLAMAAAQAyYN7apu7Vvp8YXNO9gyBR4AAFpYaXmltu0pYYp0AACAGJAQH6dLx/TRO6t3aFP+/mZ7Hgo8AAC0sC1FxXKOGbQAAABixXfG9JapeQdbpsADAEALyysIT5NJFy0AaBpmNtnMZhYVFfmOAgC16tmhtU4e0lVPLd6ksmYabJkCDwAALSy3MFzgYZBlAGgazrk5zrnpqampvqMAwCFNGddHO/Yc0NzPtjXL8SnwAADQwvIKimUmdU9N9h0FAAAALSRrSFf1TE3WPxY0z2DLEVPgMbM2ZvaomT1oZpf7zgMAQHPJLShW9/bJSkqImMswAAAAmll8nOnSMX307uc79cWufU1+/IQmP2I1ZvawpLMlbXfODa+2/nRJf5YUL+kh59z/SbpA0rPOuTlm9pSkfzRnNsC3nBwpO1vKypJCofD9xx4LP3bVVeHlwccPdbvmfiNHSrt2ffOxrVul7t2/Ou6dd0qbN0tTp0rTp389i3ToHKHQ4X+PZcuk556TLrzwm8etbd+ax6n+vEfavqaZM7967mOOqfvzAj7kFe5nBi0AAIAYdOmY3rr7rc/1xMJN+uUZQ5v02M1a4JE0W9I9kh47uMLM4iXdK+lUSbmSFpnZS5LSJS2r2qyimXMBXuXkSJMmSaWlUlKS9Kc/STffHL4vSbNmSXFxUnm5FB8vmX3zdm37SeH9WrWq/bFZs6TKSqmi6i9s4UJp7VrpL38JbxcfLzknlZV9M0dSkjR37tcLJtV/j4O5JOmNN75+3Nr2rfnvkZX1VdZHHpHefrvuxZmZM6Xvfver505MDP+eR3pewJe8wmKN6tPRdwwAAAC0sO6pyfrW0K56dskm/eTUwU3aortZ24Y75+ZJyq+xeqykNc65dc65UklPSjpX4WJP+pFymdl0M1tsZot37NjRHLGBZpedHS5mVFSEl88991VRRQrfPvj4oW7Xtp8ULmwc6rGysq+KOwc9//zXj3+oHKWl4dyH+j0OFndqO25t+9Y8TvXnPdL2NT333NfvH/w963scoKXsP1ChdsnN/R0LAAAAItFVob4KDeyi3SVlR964Hnx0/u8lqfrE77lV656XdKGZ3SdpzqF2ds7NdM5lOucy09LSmjcp0EyyssKtS+Ljw8sLLwy3OjkoMfGrxw91u7b9pHCLm0M9lpgY3re6Cy74+vEPlSMp6asuXLX9Hgk1/q9a/bi17VvzONWf90jb13ThhV+/f/D3rO9xAAAAAKC5TRyUpr9cNlJd2rZq0uP6+PrQalnnnHP7JF3b0mEAH0KhcNeh6uPEHHNMw8bgqb5fzTF4Dj52pDF4zjuvYWPw1Pw9ao7BU/24h+smFQqFt2voGDzTp4eXjMEDAAAAIFaZc655n8Csn6SXDw6ybGYhSb92zn276v4tkuScm1HfY2dmZrrFixc3YVoAiDxmtsQ5l+k7RyQL2vVg9O3/1hnHdNdvzjvGdxQAAcL14MiCdj0AgIY41PXARxetRZIGmVl/M0uS9B1JL3nIAQAAAAAAEBWatcBjZk9IypE0xMxyzWyqc65c0k2SXpf0maSnnXMr6nncyWY2s6ioqOlDAwAAAAAABEyzjsHjnLvsEOtflfRqI447R9KczMzMaQ09BgAAAAAAQLTw0UULAAAAAAAATYgCDwAAAIBAYwgHAKDAAwAAACDgnHNznHPTU1NTfUcBAG8o8AAAAAAAAAQcBR4AAAAAAICAC2SBhz62AAAAAAAAXwlkgYc+tgAAAAAAAF8JZIEHAAAAAAAAX6HAAwAAAAAAEHAUeAAAAAAAAALOnHO+MzSYme2Q9IWkVEm1jbhc2/ouknY2c7TDOVTWljpWXfepy3aH26Y+5+RQ6zlXdd/nSNs25Fwd6jHOVeP2aci56uucS6tnpphS7XpwUF3fa3y+dpvqdVvf4zTVdaCprgGR9J7i65zUZ5+GnpfGrudvpeHbNeXfSgeuB4fH9SDwr3GuB1wPDoe/la/W1X49cM4F/kfSzLqul7Q4ErO21LHquk9dtjvcNvU5J5yrxu9zpG0bcq4Oc144V57OFT+NPyc11/t87TbVua7vcZrqOtBU14BIek/xdU5a4rw0dj1/K01/Tup7Xrg+NO155zUejNc414OmPy9cD6Lzb+XgT7R00ZpTz/U+NWWmhhyrrvvUZbvDbVPfc8K5atw+R9q2IefqUI9xrhq3T2POFeouCO81TZWlvsdpqutAU10DOCf126eh5yXI12X+Vur2PKgdr/HGbx+Lr3GuB3V/npbE38oRjhPoLloNYWaLnXOZvnPgyDhXwcG5QlDx2o1MnJfIwzlBtOM1Hpk4L5GHcxLZoqUFT33M9B0Adca5Cg7OFYKK125k4rxEHs4Joh2v8cjEeYk8nJMIFnMteAAAAAAAAKJNLLbgAQAAAAAAiCoUeAAAAAAAAAKOAg8AAAAAAEDAUeABAAAAAAAIuJgu8JhZGzN71MweNLPLfefBoZnZADObZWbP+s6CIzOz86r+rl40s9N85wHqiutC5OH9PzLxPo9ox/Ug8nA9iExcDyJL1BV4zOxhM9tuZstrrD/dzFaZ2Roz+2XV6gskPeucmybpnBYPG+Pqc66cc+ucc1P9JIVU7/P1QtXf1TWSLvUQF/gS14XIw/t/ZOJ9HtGO60Hk4XoQmbgeBFfUFXgkzZZ0evUVZhYv6V5JZ0gaJukyMxsmKV3SpqrNKlowI8Jmq+7nCv7NVv3P16+qHgd8mi2uC5Fmtnj/j0Szxfs8ottscT2INLPF9SASzRbXg0CKugKPc26epPwaq8dKWlNV9S2V9KSkcyXlKvzmLUXhv0Wkq+e5gmf1OV8WdoekfznnPmzprEB1XBciD+//kYn3eUQ7rgeRh+tBZOJ6EFyx8mbVS19V4KXwG3YvSc9LutDM7pM0x0cwfEOt58rMOpvZ/ZJGmtktfqKhFof627pZ0imSLjKzG3wEA46A60Lk4f0/MvE+j2jH9SDycD2ITFwPAiDBd4AWYrWsc865fZKubekwOKxDnatdknjDiDyHOl93S7q7pcMA9cB1IfLw/h+ZeJ9HtON6EHm4HkQmrgcBECsteHIl9a52P13SZk9ZcHicq2DhfCGoeO1GHs5JZOK8INrxGo88nJPIxHkJgFgp8CySNMjM+ptZkqTvSHrJcybUjnMVLJwvBBWv3cjDOYlMnBdEO17jkYdzEpk4LwEQdQUeM3tCUo6kIWaWa2ZTnXPlkm6S9LqkzyQ97Zxb4TMnOFdBw/lCUPHajTyck8jEeUG04zUeeTgnkYnzElzmnPOdAQAAAAAAAI0QdS14AAAAAAAAYg0FHgAAAAAAgICjwAMAAAAAABBwFHgAAAAAAAACjgIPAAAAAABAwFHgAQAAAAAACLgE3wGAlmJmFZKWSUqUVC7pUUl/cs5Veg0GAGhRXA8AABLXA0QfCjyIJcXOuRGSZGZdJT0uKVXSbY09sJnFO+cqGnscAECL4HoAAJC4HiDK0EULMck5t13SdEk3WVi8mf3OzBaZ2Sdm9l1JMrM4M/urma0ws5fN7FUzu6jqsQ1m9l9mNl/SxWZ2mpnlmNmHZvaMmbWt2m60mb1jZkvM7HUz6+HtFwcAfA3XAwCAxPUA0YECD2KWc26dwn8DXSVNlVTknBsjaYykaWbWX9IFkvpJOkbS9ZJCNQ5T4pw7QdKbkn4l6RTn3ChJiyX9xMwSJf1F0kXOudGSHpb0v839uwEA6o7rAQBA4nqA4KOLFmKdVS1Pk3Tsweq7wk0zB0k6QdIzVf1wt5rZ2zX2f6pqOV7SMEnvmZkkJUnKkTRE0nBJ/65aHy9pS/P8KgCARuB6AACQuB4gwCjwIGaZ2QBJFZK2K/xGfrNz7vUa25x1hMPsO7ippH875y6rsf8xklY452pW9gEAEYLrAQBA4nqA4KOLFmKSmaVJul/SPc45J+l1STdWNZmUmQ02szaS5ku6sKqvbTdJWYc45AeSJphZRtX+KWY2WNIqSWlmFqpan2hmRzfn7wYAqDuuBwAAiesBogMteBBLWpvZUn01DeLfJN1V9dhDCvel/dDCbSV3SDpP0nOSJklaLmm1pAWSimoe2Dm3w8yukfSEmbWqWv0r59zqqmadd5tZqsJ/c3+StKLpfz0AQB1xPQAASFwPEGUsXJwEcChm1tY5t9fMOktaKGmCc26r71wAgJbF9QAAIHE9QOSiBQ9wZC+bWQeFB0a7nTdvAIhZXA8AABLXA0QoWvAAAAAAAAAEHIMsAwAAAAAABBwFHgAAAAAAgICjwAMAAAAAABBwFHgAAAAAAAACjgIPAAAAAABAwP1/ER5KoH0ui8UAAAAASUVORK5CYII=\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plot_dist(g)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Graph components\n", "``networkx`` allows to select node specific views of the original graph" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[306, 830, 1599, 273, 1988]" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "list(g.neighbors(0)) # obtain the list of neighobors for node 0" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "ego = nx.ego_graph(g, 0) # ego network of the node 0\n", "nx.draw(ego, with_labels=True)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Using the same rationale also connected components can be extracted" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "85" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "nx.number_connected_components(g)" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "comps = list(nx.connected_components(g)) # get a list of connected components (for decreasing size)\n", "comp_1 = nx.subgraph(g, comps[1]) # build a subgraph on the second component\n", "nx.draw(comp_1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Paths and Diameter\n", "Shortest paths can be extracted as well using the following syntax" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[0, 306, 30]" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "nx.shortest_path(g, source=0, target=30)" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "2" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "nx.shortest_path_length(g, source=0, target=30)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Moreover, the network diameter can be computed as follows" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "17" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ "nx.diameter(g.subgraph(comps[0])) # we compute the diameter on the giant component" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Triangles, density and clustering\n", "Other indexes that can be computed using the library are " ] }, { "cell_type": "code", "execution_count": 38, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.002611143776996835" ] }, "execution_count": 38, "metadata": {}, "output_type": "execute_result" } ], "source": [ "nx.density(g)" ] }, { "cell_type": "code", "execution_count": 39, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "4" ] }, "execution_count": 39, "metadata": {}, "output_type": "execute_result" } ], "source": [ "nx.triangles(g)[0] # count the triangles each node is involved in (and access the value of node 0)" ] }, { "cell_type": "code", "execution_count": 40, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.4" ] }, "execution_count": 40, "metadata": {}, "output_type": "execute_result" } ], "source": [ "nx.clustering(g)[0] # compute the local clustering coefficient for all nodes (and access the value for node 0)" ] }, { "cell_type": "code", "execution_count": 41, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.20063633264589634" ] }, "execution_count": 41, "metadata": {}, "output_type": "execute_result" } ], "source": [ "nx.average_clustering(g) # compute the global clustering coefficient" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "def read_net_w(filename):\n", " g = nx.Graph()\n", " with open(filename) as f:\n", " f.readline()\n", " for l in f:\n", " l = l.split(\",\")\n", " g.add_edge(l[0], l[1], weight=int(l[2]))\n", " return g\n", "g = read_net_w('')" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.7.4" } }, "nbformat": 4, "nbformat_minor": 4 }