{ "cells": [ { "cell_type": "markdown", "id": "dc547e92", "metadata": {}, "source": [ "# Operators and Matrices" ] }, { "cell_type": "markdown", "id": "b89f0ae6", "metadata": {}, "source": [ "In this tutorial we explain how the hyperbolic graph structure generated by hypertiling can be used to construct lattice operators. You will learn how the standard (listed) neighbour format can be easily transferred into adjacency and degree matrices, convientinly encoded in scipy's sparse matrix format. This allows to construct discrete (finite-difference) representation of several second order differential operators, such as a Laplacian or Helmholtz operator, which even support variable (position dependent) weights and Dirichlet boundaries.." ] }, { "cell_type": "code", "execution_count": 5, "id": "91fe4d06", "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import scipy as sp\n", "import matplotlib.pyplot as plt" ] }, { "cell_type": "markdown", "id": "465c0d88", "metadata": {}, "source": [ "## Basic Usage" ] }, { "cell_type": "markdown", "id": "8dfeef33", "metadata": {}, "source": [ "Import tiling and graph conversion functions" ] }, { "cell_type": "code", "execution_count": 1, "id": "8ea0f680", "metadata": {}, "outputs": [], "source": [ "import hypertiling as ht" ] }, { "cell_type": "code", "execution_count": 2, "id": "00cad907", "metadata": {}, "outputs": [], "source": [ "T = ht.HyperbolicTiling(7,3,3)" ] }, { "cell_type": "markdown", "id": "5d2aecfb", "metadata": {}, "source": [ "Note that almost everything in this notebook can also be done using the `HyperbolicGraph` class instead of `HyperbolicTiling`" ] }, { "cell_type": "markdown", "id": "7778f557", "metadata": {}, "source": [ "Extract neighbours using the kernel-default method and convert to adjacency matrix" ] }, { "cell_type": "code", "execution_count": 3, "id": "bcca430e", "metadata": {}, "outputs": [], "source": [ "nbrs = T.get_nbrs_list()\n", "A = ht.operators.adjacency(nbrs)" ] }, { "cell_type": "markdown", "id": "4f1a940e", "metadata": {}, "source": [ "The sparse representation can be put back to a full matrix with the `todense()` function. We use it for plotting. As can be seen, the adjaceny matrix is indeed very sparse, and furthermore symmetric (due to the graph being undirected). Every connection is represented by yellow color." ] }, { "cell_type": "code", "execution_count": 6, "id": "363979fa", "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.matshow(A.todense()); plt.colorbar();" ] }, { "cell_type": "markdown", "id": "e54960e5", "metadata": {}, "source": [ "Similarly, we can construct a degree matrix, which contains the number of connections attached to each vertex. As we can see for central notes this is 7 (the parameter `p` of the tiling), whereas for boundary points it can be fewer than p." ] }, { "cell_type": "code", "execution_count": 7, "id": "b4945caf", "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZAAAAGVCAYAAADQcqd/AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8o6BhiAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAkJklEQVR4nO3dfWyV9f3/8dcR5YDSc7aKvftxqI2rdxRRW4fUu+JGtVGiYhxO59rdGPkKbKwxTjSGxjmOukhYwuzELCCZRP6YoJso1iCgIWSlk8CYc3XW9WzQNRLtaTs5HT2f3x/KmYcWep3rOj3nus55PpJP5FznuvlcnoQ378+tzxhjBABAik7LdgUAAN5EAAEA2EIAAQDYQgABANhCAAEA2EIAAQDYQgABANhCAAEA2EIAAQDYQgABANhCAAGAPHTuuefK5/ONKIsXL7Z8j9PHsX4AAJdqb2/X8PBw4vOf//xnzZs3T3fccYfle/hYTBEAsGzZMv3hD39QZ2enfD6fpWvIQAAgy44ePaqhoSHH9zHGjPjL3+/3y+/3n/K6oaEh/fa3v1Vzc7Pl4CERQAAgq44ePaqK8inq6R0e++QxTJkyRQMDA0nHVqxYoZaWllNet2XLFn366adqampK6Xk0YQFAFkWjUQWDQXV1lCtQYH9cU7Q/rorqfygSiSgQCCSOW8lAbrjhBk2cOFG///3vU3omGQgAuMBZUz4vdg1/kQoEAoGkADKWf/zjH3rzzTf10ksvpfxMhvECQB5bt26dioqKdNNNN6V8LRkIALhAXEZx2e9RsHNtPB7XunXr1NjYqNNPTz0cEEAAwAXiiivu8PpUvfnmm+ru7tb3v/99W88kgABAnqqvr5eTcVQEEABwgWFjNOzgL3Mn19pFAAEAF8hGH4hTjMICANhCBgIALhCX0bDHMhACCAC4AE1YAIC8QQYCAC7AKCwAgC3xL4qT6zPNE01YzzzzjCoqKjRp0iRVV1fr7bffznaVbGlpaRmxfWRJSUm2q2XJrl27NH/+fJWVlcnn82nLli1J3xtj1NLSorKyMk2ePFl1dXU6ePBgdio7hrHepampacTvdOWVV2ansmMIh8O64oorVFBQoKKiIt166616//33k87xym9j5V289NukaviLTnQnJdNcH0A2bdqkZcuW6ZFHHtG7776ra665Rg0NDeru7s521WyZMWOGDh8+nCgHDhzIdpUsGRwc1KxZs7RmzZpRv3/qqae0atUqrVmzRu3t7SopKdG8efPU39+f4ZqObax3kaQbb7wx6XfaunVrBmto3c6dO7V48WLt2bNHbW1tOnbsmOrr6zU4OJg4xyu/jZV3kbzz2+QF43Jf//rXzaJFi5KOXXjhheahhx7KUo3sW7FihZk1a1a2q+GYJLN58+bE53g8bkpKSswTTzyROHb06FETDAbNr3/96yzU0LoT38UYYxobG80tt9ySlfo41dvbaySZnTt3GmO8/duc+C7GePu3OZm+vj4jyez/S5HpipTYLvv/UmQkmb6+vozV3dUZyNDQkDo6OlRfX590vL6+Xrt3785SrZzp7OxUWVmZKioqdOedd+rDDz/MdpUc6+rqUk9PT9Lv5Pf7dd1113n2d9qxY4eKiop0/vnn695771Vvb2+2q2RJX1+fJKmwsFCSt3+bE9/lOK/+NmOJp6FkmqsDyMcff6zh4WEVFxcnHS8uLlZPT0+WamXf7NmztWHDBm3btk3PPfecenp6VFtbqyNHjmS7ao4c/y1y5XdqaGjQCy+8oO3bt+vpp59We3u7rr/+esVisWxX7ZSMMWpubtbVV1+tqqoqSd79bUZ7F8m7v02u8sQorBM3eTejbBzvBQ0NDYk/z5w5U3PmzNF5552n559/Xs3NzVmsWXrkyu+0cOHCxJ+rqqpUU1Oj8vJyvfrqq1qwYEEWa3ZqS5Ys0f79+/XOO++M+M5rv83J3sWrv40Vcfk0LPu/SdzBtXa5OgOZOnWqJkyYMOJfSr29vSP+ReVFZ511lmbOnKnOzs5sV8WR4yPJcvV3Ki0tVXl5uat/p6VLl+qVV17RW2+9pWnTpiWOe/G3Odm7jMYLv41VceO8ZJqrA8jEiRNVXV2ttra2pONtbW2qra3NUq3SJxaL6b333lNpaWm2q+JIRUWFSkpKkn6noaEh7dy5Myd+pyNHjigSibjydzLGaMmSJXrppZe0fft2VVRUJH3vpd9mrHcZjZt/m3zg+ias5uZm3XPPPaqpqdGcOXO0du1adXd3a9GiRdmuWsoeeOABzZ8/X9OnT1dvb68ef/xxRaNRNTY2ZrtqYxoYGNAHH3yQ+NzV1aV9+/apsLBQ06dP17Jly7Ry5UpVVlaqsrJSK1eu1Jlnnqm77rori7Ue3anepbCwUC0tLbr99ttVWlqqjz76SA8//LCmTp2q2267LYu1Ht3ixYu1ceNGvfzyyyooKEhkGsFgUJMnT5bP5/PMbzPWuwwMDHjqt0nVsMMmLCfX2pax8V4O/OpXvzLl5eVm4sSJ5vLLL08a1uclCxcuNKWlpeaMM84wZWVlZsGCBebgwYPZrpYlb731lpE0ojQ2NhpjPh8uumLFClNSUmL8fr+59tprzYEDB7Jb6ZM41bv85z//MfX19eacc84xZ5xxhpk+fbppbGw03d3d2a72qEZ7D0lm3bp1iXO88tuM9S5e+22sOj6Md/fBUrO/+//ZLrsPlmZ8GK/PmCwsoAIAkCRFo1EFg0HtPliqKQX2exUG+uOqnXFYfX19CgQCaazhybm+CQsA8kHc+BQ3DkZhObjWLgIIALiAF/tAXD0KCwDgXmQgAOACwzpNww7+TT+cxrpYRQABABcwDvtADH0gAJCf6AMZR7FYTC0tLTmxaBrv4l659D68C8abZ+aBHB8rnckxzuOFd3GvXHof3sUbjr/ba/srdJaDeSCD/XE1XNLFPBAAyDdx+RR30CgUZ0tbAIBXuC4DicfjOnTokAoKCpL2K4hGo0n/9TLexb1y6X14l/FjjFF/f7/Kysp02mnp+Xe4FzvRXRdADh06pFAodNLvT/Wd1/Au7pVL78O7jJ9IJDLmniVWDZvTNOxgl/HhLHRnj1sAeeaZZ/SLX/xChw8f1owZM7R69Wpdc801Y15XUFAgSfrHn85VYMqp/2fedv7MtNQVAFJxTP/VO9qa+PsqX41LANm0aZOWLVumZ555RldddZWeffZZNTQ06C9/+YumT59+ymuPN1sFppymwBgjEk73nZG2OgOAZV/8Yz+d2wJ/3onOlrZatWqVfvCDH+iHP/yhLrroIq1evVqhUEitra3j8TgA8Lz4F0uZ2C1ORnDZlfYnDg0NqaOjQ/X19UnH6+vrtXv37hHnx2IxRaPRpAIAcL+0B5CPP/5Yw8PDKi4uTjpeXFyc2KLyy8LhsILBYKK4rZMMADLheCe6k5Jp4/bEE9sGjTGjthcuX75cfX19iRKJRMarSgDgWvEvmqGclExLeyf61KlTNWHChBHZRm9v74isRJL8fr/8fn+6qwEAGGdpD1kTJ05UdXW12trako63tbWptrY23Y8DgJwwbHyOS6aNyzDe5uZm3XPPPaqpqdGcOXO0du1adXd3a9GiRZbvcdv5M8ccprvt0D7L97uh7FLL5wJApjnfUCpHJhIuXLhQR44c0WOPPabDhw+rqqpKW7duVXl5+Xg8DgA8L25OU9xBR3g8l2ai33///br//vvH6/YAgCxjNV4AcAEnkwjtNn/961//0ne+8x2dffbZOvPMM3XppZeqo6PD8vWuW0wRAPJRXHLUER5P8fxPPvlEV111lebOnavXXntNRUVF+vvf/66vfOUrlu9BAAGAPPTkk08qFApp3bp1iWPnnntuSvegCQsAXCBdEwlPXBrqZPvIv/LKK6qpqdEdd9yhoqIiXXbZZXruuedSqjMBBABcIF1LmYRCoaTlocLh8KjP+/DDD9Xa2qrKykpt27ZNixYt0o9+9CNt2LDBcp1pwgKAHBKJRBQIBBKfT7bSRzweV01NjVauXClJuuyyy3Tw4EG1trbqu9/9rqVnkYEAgAsc3w/ESZGkQCCQVE4WQEpLS3XxxRcnHbvooovU3d1tuc5kIADgAs63tE3t2quuukrvv/9+0rG//e1vKU349nQASWV5ks711ZbOq2yyPgYaALzqJz/5iWpra7Vy5Up961vf0h//+EetXbtWa9eutXwPTwcQAMgVztfCSu3aK664Qps3b9by5cv12GOPqaKiQqtXr9bdd99t+R4EEABwgbjxKe5kIqGNa2+++WbdfPPNtp9JJzoAwBYyEABwgbjDJqyc2JEQAJA658u5E0AAIC8Ny6dh2e8DcXKtXfSBAABsIQMBABegCQsAYMuwnDVDDaevKpblTQCxOsM88mitpfNCP9vtpDoA4Hl5E0AAwM1owgIA2JLpxRTTgVFYAABbyEAAwAXMl/b0sHt9phFAAMAFaMICAOQNMhAAcIFsLOfuFAEEAFwg0xtKpQNNWAAAW8hATmB1hjkz1gGkE01YAABb4jrN0aZQbCgFAHlq2Pg07CCLcHKtXfSBAABsIQMBABegDwQAYItxuBqvYSY6AMAryEAAwAWG5XO4IyFNWACQl+LGWT9G3KSxMhbRhAUAsIUMxCarM8y3Hdpn+Z43lF1qrzIAPI8tbQEAtsQdbijl5Fq7aMICANiS9gDS0tIin8+XVEpKStL9GADIKceXMnFSMm1cmrBmzJihN998M/F5woQJ4/EYAMgZ9IEcv+npp1vOOmKxmGKxWOJzNBodjyoBANJsXEJWZ2enysrKVFFRoTvvvFMffvjhSc8Nh8MKBoOJEgqFxqNKAOBqcfkS62HZKrnQiT579mxt2LBB27Zt03PPPaeenh7V1tbqyJEjo56/fPly9fX1JUokEkl3lQDA9cwXo7DsFpMLM9EbGhoSf545c6bmzJmj8847T88//7yam5tHnO/3++X3+9NdDQDwFC+uxjvuvS5nnXWWZs6cqc7OzvF+FAAgg8Y9gMRiMb333nsqLS0d70cBgGcdH4XlpGRa2puwHnjgAc2fP1/Tp09Xb2+vHn/8cUWjUTU2Nqb7UZ6QyvIkneurLZ1X2dRhszYA3MqLTVhpDyD//Oc/9e1vf1sff/yxzjnnHF155ZXas2ePysvL0/0oAEAWpT2AvPjii+m+JQDkPC+uhcViigDgAl5swmIxRQDIQ+lYt5AMBABcIBsZiNN1CwkgAOAC2QggqaxbOBqasAAgh0Sj0aTy5cVqT5TKuoWjIYAAgAs4WkjxS9lLKBRKWqA2HA6P+rxU1y0cDU1YAOACRs6G4pov/huJRBQIBBLHT7bWYKrrFo6GAOIiVmeYRx6ttXRe6Ge7nVQHQAalqw8kEAgkBRCr7KxbSBMWAMDWuoVkIADgApkehZWOdQsJIADgApkOIOlYt5AAAgB5KB3rFhJAAMAFvLgWFgEEAFzAGJ+MgyDg5Fq7GIUFALCFDAQAXID9QAAAttAHgoywOsOcGesAxhMBBABcwIud6AQQAHABLzZhMQoLAGALGQgAuABNWAAAW4zDJiwCCADkKSPJmDFPO+X1mUYfCADAFjIQAHCBuHzyMRMdAJAqOtHhKlZnmG87tM/yPW8ou9ReZQDkHAIIALhA3Pjk89hEQgIIALiAMQ5HYWVhGBajsAAAtpCBAIAL0IkOALDFiwGEJiwAgC1kIADgAozCAgDYwigsAEDeIAMBABf4PANx0omexspYRABBSsuTdK6vtnReZVOHzdoA+cmLo7AIIADgAkbO9vTwxH4gu3bt0vz581VWViafz6ctW7YkfW+MUUtLi8rKyjR58mTV1dXp4MGD6aovAMAlUg4gg4ODmjVrltasWTPq90899ZRWrVqlNWvWqL29XSUlJZo3b576+/sdVxYActXxJiwnJdNSbsJqaGhQQ0PDqN8ZY7R69Wo98sgjWrBggSTp+eefV3FxsTZu3Kj77rtvxDWxWEyxWCzxORqNplolAPA+D7ZhpXUYb1dXl3p6elRfX5845vf7dd1112n37tH3pgiHwwoGg4kSCoXSWSUAwDhJawDp6emRJBUXFycdLy4uTnx3ouXLl6uvry9RIpFIOqsEAN7gtPnKC01YVvh8yS9ijBlx7Di/3y+/3z8e1QAAz8j7meglJSWSNCLb6O3tHZGVAAC8La0BpKKiQiUlJWpra0scGxoa0s6dO1VbW5vORwFATsmLUVgDAwP64IMPEp+7urq0b98+FRYWavr06Vq2bJlWrlypyspKVVZWauXKlTrzzDN11113pbXiyA6rM8wjj1r7B0PoZ6MPrgDyjtN+DC8EkL1792ru3LmJz83NzZKkxsZGrV+/Xg8++KA+++wz3X///frkk080e/ZsvfHGGyooKEhfrQEAWZdyAKmrq5M5RW+Nz+dTS0uLWlpanNQLAPKKFzvRWQsLANwg3ycSAgDyBxkIALiAF5dzJwMBALcwDopD4XBYPp9Py5Yts3wNGQgAuEA2M5D29natXbtWl1xySUrXkYEAQB4bGBjQ3Xffreeee05f/epXU7qWAAIAbuCk+epLzVjRaDSpfHm7jNEsXrxYN910k775zW+mXGWasDAurM4wtzpjPZV7At7k+6I4uV4jtsRYsWLFSeflvfjii/rTn/6k9vZ2W08kgABADolEIgoEAonPJ1vtPBKJ6Mc//rHeeOMNTZo0ydazCCAA4AZpmkgYCASSAsjJdHR0qLe3V9XV1Yljw8PD2rVrl9asWaNYLKYJEyac8h4EEABwgwzPRP/GN76hAwcOJB373ve+pwsvvFA//elPxwweEgEEAPJSQUGBqqqqko6dddZZOvvss0ccPxkCCAC4QT4s5w4ASD83rMa7Y8eOlM5nHggAwBYyEABwAw8u504AAQA38GAfCE1YAABbyECQVaksT7Lt0D5L591Qdqm9ygBZ5DOfFyfXZxoBBADcgD4QAIAt9IEAAPIFGQgAuAFNWAAAWzwYQGjCAgDYQgYCAG7gwQyEAAIAbsAoLABAviADgWdYnWHeub567JMkVTZ1OKgNkF7MRAcA2OPBPhCasAAAthBAAAC20IQFAC7gk8M+kLTVxDoyEACALWQgAOAGHpwHQgABADfw4CgsAggAuIEHAwh9IAAAW8hAkHOszjCPPFpr6bxU9m0H7GImOgDAnnxowtq1a5fmz5+vsrIy+Xw+bdmyJen7pqYm+Xy+pHLllVemq74AAJdIOYAMDg5q1qxZWrNmzUnPufHGG3X48OFE2bp1q6NKAkDOM2koGZZyE1ZDQ4MaGhpOeY7f71dJSYntSgFAvvFiH8i4jMLasWOHioqKdP755+vee+9Vb2/vSc+NxWKKRqNJBQDgfmkPIA0NDXrhhRe0fft2Pf3002pvb9f111+vWCw26vnhcFjBYDBRQqFQuqsEAO53fCa6k5JhaR+FtXDhwsSfq6qqVFNTo/Lycr366qtasGDBiPOXL1+u5ubmxOdoNEoQAZB/PDgKa9yH8ZaWlqq8vFydnZ2jfu/3++X3+8e7GgCANBv3AHLkyBFFIhGVlpaO96MAwLO82ImecgAZGBjQBx98kPjc1dWlffv2qbCwUIWFhWppadHtt9+u0tJSffTRR3r44Yc1depU3XbbbWmtOOCU1RnmVmesp3JPYIR8aMLau3ev5s6dm/h8vP+isbFRra2tOnDggDZs2KBPP/1UpaWlmjt3rjZt2qSCgoL01RoAco3DDMQTAaSurk7GnLym27Ztc1QhAIA3sBYWALhBPjRhAQDGgQcDCPuBAABsIQMBABfw4jBeMhAAgC0EEACALQQQAHCDDO8H0traqksuuUSBQECBQEBz5szRa6+9ltI9CCAA4ALH+0CclFRMmzZNTzzxhPbu3au9e/fq+uuv1y233KKDBw9avged6MAYUlmeZNuhfZbOu6HsUnuVAcZw4p5KJ1uwdv78+Umff/7zn6u1tVV79uzRjBkzLD2LDAQA3CINzVehUChpj6VwODzmY4eHh/Xiiy9qcHBQc+bMsVxdMhAAcIM0TSSMRCIKBAKJw6faLuPAgQOaM2eOjh49qilTpmjz5s26+OKLLT+SAAIAOeR4p7gVF1xwgfbt26dPP/1Uv/vd79TY2KidO3daDiIEEABwgWxMJJw4caK+9rWvSZJqamrU3t6uX/7yl3r22WctXU8AAQA3cMFaWMYYxWIxy+cTQADABTKdgTz88MNqaGhQKBRSf3+/XnzxRe3YsUOvv/665XsQQAAgD/373//WPffco8OHDysYDOqSSy7R66+/rnnz5lm+BwEEANwgw01Yv/nNbxw87HMEEABwAxf0gaSKAAKkkdUZ5p3rqy2dV9nU4aA2wPgigACAC3hxPxACCAC4gQebsFgLCwBgCxkIALiBBzMQAggAuIAX+0BowgIA2EIGAgBuQBMWAMAOmrAAAHmDDATIAqszzCOP1lo6L5V92+FSNGEBAGwhgAAA7PB9UZxcn2n0gQAAbCEDAQA3oAkLAGAHw3gBAHmDDAQA3IAmLACAbVkIAk7QhAUAsIUMBHAxqzPMrc5YT+WeyCwvdqITQADADTzYB0ITFgDAlpQCSDgc1hVXXKGCggIVFRXp1ltv1fvvv590jjFGLS0tKisr0+TJk1VXV6eDBw+mtdIAkGuON2E5KZmWUgDZuXOnFi9erD179qitrU3Hjh1TfX29BgcHE+c89dRTWrVqldasWaP29naVlJRo3rx56u/vT3vlASBnmDSUDEupD+T1119P+rxu3ToVFRWpo6ND1157rYwxWr16tR555BEtWLBAkvT888+ruLhYGzdu1H333TfinrFYTLFYLPE5Go3aeQ8AQIY56gPp6+uTJBUWFkqSurq61NPTo/r6+sQ5fr9f1113nXbvHn3kRzgcVjAYTJRQKOSkSgDgSTnfhPVlxhg1Nzfr6quvVlVVlSSpp6dHklRcXJx0bnFxceK7Ey1fvlx9fX2JEolE7FYJALwr15uwvmzJkiXav3+/3nnnnRHf+XzJK9MbY0YcO87v98vv99utBgDkhnwZxrt06VK98soreuuttzRt2rTE8ZKSEkkakW309vaOyEoAAN6WUgAxxmjJkiV66aWXtH37dlVUVCR9X1FRoZKSErW1tSWODQ0NaefOnaqttT5TFgDyjRf7QFJqwlq8eLE2btyol19+WQUFBYlMIxgMavLkyfL5fFq2bJlWrlypyspKVVZWauXKlTrzzDN11113jcsLAEhteZJth/ZZOu+GskvtVQb2eLAJK6UA0traKkmqq6tLOr5u3To1NTVJkh588EF99tlnuv/++/XJJ59o9uzZeuONN1RQUJCWCgMA3CGlAGLM2CHO5/OppaVFLS0tdusEAHnHZ4x8Fv6OPdX1mcZiigDgBh5swmIxRQCALWQgAOAC7AcCALCHJiwAQL4gAwEAF6AJCwBgjwebsAggQJ6xOsO8c321pfMqmzoc1AbZEg6H9dJLL+mvf/2rJk+erNraWj355JO64IILLN+DPhAAcIFMr4VlZYfZsZCBAIAbpKkJ68RdXU+2ZcZYO8xaQQYCAC6RjuwjFAol7fIaDoctPfvEHWatIAMBgBwSiUQUCAQSn61s2DfaDrNWEEAAwA2M+bw4uV5SIBBICiBWnGqH2VMhgACAC2RrHsjxHWZ37dqVtMOsFQQQAMhDxhgtXbpUmzdv1o4dO0bsMGsFAQQA3CDDEwnH2mHWCkZhAYAL+OLOSypaW1vV19enuro6lZaWJsqmTZss34MMBMCorM4wjzxaa/meqezdjvFlZYfZsRBAAMANWAsLAGCHF1fjpQ8EAGALGQgAuEGaJhJmEgEEAFyAJiwAQN4gAwEAN2AUFgDADi82YRFAAMANPNiJTh8IAMAWMhAAjqSyPInVZU/ycckTmrAAAPZ4sBOdJiwAgC1kIADgAjRhAQDsiZvPi5PrM4wmLACALWQgAOAGHuxEJ4AAgAv45LAPJG01sY4mLACALWQgAOAGHlzKhAACIGOszjDfdmifpfNuKLvUfmVchmG8AAB7PNiJnlIfSDgc1hVXXKGCggIVFRXp1ltv1fvvv590TlNTk3w+X1K58sor01ppAED2pRRAdu7cqcWLF2vPnj1qa2vTsWPHVF9fr8HBwaTzbrzxRh0+fDhRtm7dmtZKA0Cu8RnjuGRaSk1Yr7/+etLndevWqaioSB0dHbr22msTx/1+v0pKSizdMxaLKRaLJT5Ho9FUqgQAuSH+RXFyfYY5Gsbb19cnSSosLEw6vmPHDhUVFen888/Xvffeq97e3pPeIxwOKxgMJkooFHJSJQBAhtgOIMYYNTc36+qrr1ZVVVXieENDg1544QVt375dTz/9tNrb23X99dcnZRlftnz5cvX19SVKJBKxWyUA8Kycb8L6siVLlmj//v165513ko4vXLgw8eeqqirV1NSovLxcr776qhYsWDDiPn6/X36/3241ACA3eHAUlq0AsnTpUr3yyivatWuXpk2bdspzS0tLVV5ers7OTlsVBAC4U0oBxBijpUuXavPmzdqxY4cqKirGvObIkSOKRCIqLS21XUkAyHm5PhN98eLF2rhxo15++WUVFBSop6dHkhQMBjV58mQNDAyopaVFt99+u0pLS/XRRx/p4Ycf1tSpU3XbbbeNywsAyD1WZ5h3rq+2dF5lU4eD2mRGzs9Eb21tlSTV1dUlHV+3bp2ampo0YcIEHThwQBs2bNCnn36q0tJSzZ07V5s2bVJBQUHaKg0AyL6Um7BOZfLkydq2bZujCgFAXsr1JiwAwPjwxT8vTq7PNPYDAQDYQgYCAG5AExYAwJZ8mUgIAEgvp8uRZGMpE/pAAAC2kIEAgBvQBwIAmWN1hnnk0VrL97S6b3vaGTnb08PtW9oCAHAcAQQAXCAb+4Hs2rVL8+fPV1lZmXw+n7Zs2ZLS9QQQAHADo//1g9gqqT9ycHBQs2bN0po1a2xVmT4QAMgh0Wg06fOpNu1raGhQQ0OD7WeRgQCAGzjKPv43gisUCikYDCZKOBwetyqTgQCAG8Ql+RxeLykSiSgQCCQOj+eW4QQQAMghgUAgKYCMJwIIALiAF5cyIYAAgBswEx0A4BUDAwP64IMPEp+7urq0b98+FRYWavr06WNeTwABkPNSWZ7EyrInw7Gj0pMvO6nSSFnIQPbu3au5c+cmPjc3N0uSGhsbtX79+jGvJ4AAgBtkIYDU1dXJOHgmAQQA3CBNw3gziYmEAABbyEAAwAUYxgsAsMeDw3hpwgIA2EIGAgBuEDeSz0EWEacJCwDykwebsFwXQI6PST6m/2Zlj18A+W04dnTMc+JfnONkDkUucF0A6e/vlyS9o61ZrgmAvJTCDPP+/n4Fg8E0PdhhBpKFf3G7LoCUlZUpEomooKBAPt//ZtVEo1GFQqERa917Ee/iXrn0PrzL+DHGqL+/X2VlZem8KU1YTp122mmaNm3aSb/P5Fr34413ca9ceh/eZXykL/PwLtcFEADIS3EjR81QjMICgDxl4p8XJ9dnmGcmEvr9fq1YsWJc9/fNFN7FvXLpfXgXjDefyfdxaACQRdFoVMFgUN8M/Z9OP81+gDwWj+nNSKv6+vrYEx0A8gp9IAAAWzw4jNczfSAAAHchAwEANzBymIGkrSaWEUAAwA1owgIA5AsyEABwg3hckoPJgPHMTyQkgACAG9CEBQDIF2QgAOAGHsxACCAA4AYenIlOExYAwBYyEABwAWPiMg6WZHdyrV0EEABwA2OcNUMxCgsA4BVkIADgBsZhJzqjsAAgT8Xjks9bW9oSQADADTyYgdAHAgCwhQwEAFzAxOMyDpqwGMYLAPmKJiwAQL4gAwEAN4gbyeetDIQAAgBuYIwcbShFExYAwCvIQADABUzcyDhowjI0YQFAnjIO90TPwjBemrAAII8988wzqqio0KRJk1RdXa23337b8rUEEABwARM3jkuqNm3apGXLlumRRx7Ru+++q2uuuUYNDQ3q7u62dL3PZKPhDAAgSYpGowoGg6rTLTrdd4bt+xwz/9UOvay+vj4FAgFL18yePVuXX365WltbE8cuuugi3XrrrQqHw2NeTx8IALjAMf3X0UT0Y/qvpM8D0pf5/X75/f4R5w8NDamjo0MPPfRQ0vH6+nrt3r3b0jMJIACQRRMnTlRJSYne6dnq+F5TpkxRKBRKOrZixQq1tLSMOPfjjz/W8PCwiouLk44XFxerp6fH0vMIIACQRZMmTVJXV5eGhoYc38sYI5/Pl3RstOzjy048f7R7nAwBBACybNKkSZo0aVJGnzl16lRNmDBhRLbR29s7Iis5GUZhAUAemjhxoqqrq9XW1pZ0vK2tTbW1tZbuQQYCAHmqublZ99xzj2pqajRnzhytXbtW3d3dWrRokaXrCSAAkKcWLlyoI0eO6LHHHtPhw4dVVVWlrVu3qry83NL1zAMBANhCHwgAwBYCCADAFgIIAMAWAggAwBYCCADAFgIIAMAWAggAwBYCCADAFgIIAMAWAggAwBYCCADAlv8Pf1Fc26DQ0qMAAAAASUVORK5CYII=\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "G = ht.operators.degree(nbrs)\n", "\n", "plt.matshow(G.todense()); plt.colorbar();" ] }, { "cell_type": "markdown", "id": "f0b0cd88", "metadata": {}, "source": [ "We are now prepared to build a Laplacian for our lattice ..." ] }, { "cell_type": "code", "execution_count": 8, "id": "052ddc21", "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "A = ht.operators.adjacency(nbrs)\n", "G = ht.operators.degree(nbrs)\n", "\n", "D = A - G\n", "\n", "plt.matshow(D.todense()); plt.colorbar();" ] }, { "cell_type": "markdown", "id": "c561af29", "metadata": {}, "source": [ "... as well as a Helmholtz operator containting a mass term. We also added weights for the Laplacian part. In case we want to use constant weights, it is enought to multiply them as a factor. For vertex-dependend weights the weight keyword provided by `operators.adjacency` and `operators.degree` can be used." ] }, { "cell_type": "code", "execution_count": 10, "id": "35dc2304", "metadata": {}, "outputs": [], "source": [ "w = 2 # weight\n", "m = 5 # mass" ] }, { "cell_type": "code", "execution_count": 11, "id": "39bcca34", "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZwAAAGVCAYAAADKTkfxAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8o6BhiAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAowUlEQVR4nO3df3AU933/8deB8SGEToUo6EeQhIIhTS2CY3AxKtiS+7WCMibFEA/UHRdah4aAPMGa2LVMGh0pQakBj6dxwHEyA3hipqQT/2BsEpBHBseljIVrbIpdCraILhaqCk50oBjJ6Pb7B+iaQ0La0+7tfe7u+Zj5jLnVZz/7WZ/R258f+16fZVmWAABIsFHJ7gAAIDMQcAAAniDgAAA8QcABAHiCgAMA8AQBBwDgCQIOAMATBBwAgCcIOAAATxBwAACeIOAAQIZ67bXXtHDhQhUVFcnn8+mFF15I6PUIOACQobq7uzVz5kw9+eSTnlzvOk+uAgAwTk1NjWpqajy7HgEHAJLs4sWL6u3tddyOZVny+Xwxx/x+v/x+v+O23UDAAYAkunjxospKx6ujs89xW+PHj9eFCxdijjU0NCgYDDpu2w0EHABIot7eXnV09qn1zVIFcka+rB4+H1HZrF8rFAopEAhEj5syupEIOABghOzxl8tI9V15lWYgEIgJOCZhlxoAwBOMcADAABFZishydH68Lly4oFOnTkU/t7a26ujRo5o4caJKSkpG3JdrIeAAgAEiiiji8Px4HTlyRFVVVdHPdXV1kqTly5drx44dDnozOAIOAGSoyspKWdbIR1XxIuAAgAH6LEt9Dn75OznXKwQcADBAMtZwvMYuNQCAJxjhAIABIrLUl+YjHAIOABiAKTUAAFzCCAcADMAuNQCAJyJXipPzTZcSU2pbt25VWVmZxo4dq1mzZulXv/pVsrs0IsFgUD6fL6YUFBQku1u2DPcqWsuyFAwGVVRUpKysLFVWVur48ePJ6ewwhruXFStWDPiebr311uR0dhiNjY265ZZblJOTo0mTJmnRokU6ceJETJ1U+W7s3EsqfTfx6ruyacBJMZ3xAWf37t1au3at1q1bp7feekvz589XTU2N2trakt21Ebnxxht15syZaDl27Fiyu2TLcK+ifeyxx/T444/rySefVEtLiwoKCnTnnXfq/PnzHvd0eHZeq7tgwYKY72nv3r0e9tC+gwcPas2aNTp8+LCampp06dIlVVdXq7u7O1onVb4bO/cipc53g0FYhvvTP/1Ta9WqVTHH/viP/9h65JFHktSjkWtoaLBmzpyZ7G44Jsl6/vnno58jkYhVUFBgff/7348eu3jxopWbm2s99dRTSeihfVffi2VZ1vLly62/+Iu/SEp/nOrs7LQkWQcPHrQsK7W/m6vvxbJS+7u5lq6uLkuS9c67k6zWUMGIyzvvTrIkWV1dXcm+pWsyeoTT29urN998U9XV1THHq6urdejQoST1ypmTJ0+qqKhIZWVlWrZsmT744INkd8mx1tZWdXR0xHxPfr9ft99+e8p+TwcOHNCkSZM0ffp0rVy5Up2dncnuki1dXV2SpIkTJ0pK7e/m6nvpl6rfzXAiLhTTGR1wzp49q76+PuXn58ccz8/PV0dHR5J6NXJz5szRM888o3379unHP/6xOjo6VFFRoXPnziW7a470fxfp8j3V1NTo2WefVXNzs7Zs2aKWlhbdcccd6unpSXbXhmRZlurq6jRv3jyVl5dLSt3vZrB7kVL3u8FlKbFLzefzxXy2LGvAsVRQU1MT/fOMGTM0d+5cTZ06VTt37oymBU9l6fI9LV26NPrn8vJyzZ49W6WlpXr55Ze1ePHiJPZsaLW1tXrnnXf0+uuvD/hZqn0317qXVP1u7IjIpz6N/DuJODjXK0aPcPLy8jR69OgB/yfW2dk54P/YUlF2drZmzJihkydPJrsrjvTvtEvX76mwsFClpaVGf08PPPCA9uzZo1dffVWTJ0+OHk/F7+Za9zKYVPhu7IpYzovpjA44119/vWbNmqWmpqaY401NTaqoqEhSr9zT09Oj9957T4WFhcnuiiNlZWUqKCiI+Z56e3t18ODBtPiezp07p1AoZOT3ZFmWamtr9dxzz6m5uVllZWUxP0+l72a4exmMyd8NBjJ+Sq2urk733XefZs+erblz5+rpp59WW1ubVq1aleyuxe1b3/qWFi5cqJKSEnV2dmrDhg0Kh8Navnx5srs2rOFeRbt27Vpt3LhR06ZN07Rp07Rx40aNGzdO9957bxJ7Pbih7mXixIkKBoNasmSJCgsLdfr0aT366KPKy8vT3XffncReD27NmjXatWuXXnzxReXk5ERHMrm5ucrKypLP50uZ72a4e7lw4UJKfTfx6nM4pebkXM8kcYecbT/84Q+t0tJS6/rrr7duvvnmmG2SqWTp0qVWYWGhNWbMGKuoqMhavHixdfz48WR3y5ZXX33VkjSgLF++3LKsy9tvGxoarIKCAsvv91u33XabdezYseR2+hqGupff//73VnV1tfXpT3/aGjNmjFVSUmItX77camtrS3a3BzXYfUiytm/fHq2TKt/NcPeSat+NXf3bog8dL7TeafvMiMuh44XGb4v2WVYKJOABgDQVDoeVm5urQ8cLNT5n5KscF85HVHHjGXV1dSkQCLjYQ/cYP6UGAJkgYvkUsRzsUnNwrlcIOABggExYwzF6lxoAIH0wwgEAA/RplPocjAH6XOxLohBwAMAAlsM1HIs1HACAHazhGKSnp0fBYDAtkvRxL+ZKp/vhXmCalHkOp3+vusl7zO3iXsyVTvfDvaSG/nv7xTtlynbwHE73+YhqvtBq9L8jptQAwAAR+RRxMOkU4RXTAABcZtwIJxKJqL29XTk5OTHv6wiHwzH/TGXci7nS6X64l8SxLEvnz59XUVGRRo1y5//bM2HTgHEBp729XcXFxdf8+VA/SzXci7nS6X64l8QJhULDvrPHrj5rlPosB8/hpMByfMICztatW7Vp0yadOXNGN954o5544gnNnz9/2PNycnIkSfP0ZV2nMUPWff6/j9nuz0vd2bbruumu7G7bdenj0Oz2kz4OjT469/GFPv3d/Hejv69gT0ICzu7du7V27Vpt3bpVf/Znf6Yf/ehHqqmp0bvvvquSkpIhz+2fRrtOY3Sdb+iAE4hjR8e4UaNt13VTIJs+usVuP+nj0Oije9x8TfflTQO8Yjpujz/+uO6//3597Wtf0+c//3k98cQTKi4u1rZt2xJxOQBIeZErqW1GWpzscPOK6z3s7e3Vm2++qerq6pjj1dXVOnTo0ID6PT09CofDMQUAkH5cDzhnz55VX1+f8vPzY47n5+dHXxn7hxobG5Wbmxstpi0KAoAX+jcNOCkjsXXrVpWVlWns2LGaNWuWfvWrX7l8Z/8nYWOwq+c2LcsadL6zvr5eXV1d0RIKhRLVJQAwVuTKtJiTEq/+9fZ169bprbfe0vz581VTU6O2trYE3GECAk5eXp5Gjx49YDTT2dk5YNQjSX6/X4FAIKYAABLP6/V21wPO9ddfr1mzZqmpqSnmeFNTkyoqKty+HACkhT7L57hIGrAmfq2Ep/Gut7shIdui6+rqdN9992n27NmaO3eunn76abW1tWnVqlW223j+v48Nu+35S0U32W5vX/tR23WTZVH2BVv1Xuge7+p13W4vUVKhn/QRI+X8BWyXH/y8eh28oaFBwWBwQP1419vdkJCAs3TpUp07d07f/e53debMGZWXl2vv3r0qLS1NxOUAIOVFrFGKOMg0ELmSaSAUCsUsTfj9/iHPs7ve7oaEZRpYvXq1Vq9enajmAQCDsLsWHu96uxvMf1IIADKAk4c+RzIdl4z1duOSdwJAJopI0YX/kZ4fLzfW2+NBwAGADOX1ejsBBwAMMNKHN//w/JHwcr2dgAMABnD+Phzzl+TN7yEAIC0wwgEAA2TC+3AIOABggEyYUjM24LzUnT3s2/ziSVczc5O9RbG3H9pqqx7pQYD0ZCfFVDgykk3IMDbgAEAmcZ5LjREOAMCGiOVTxMmDnw7O9Yr5IREAkBYY4QCAASIOp9ScPDTqFQIOABjA+esJCDgAABv65FOfg2dpnJzrFfNDIgAgLTDCAQADMKUGAPBEn5xNi/W515WEyZiAYzeDwNTd9l489P7Sp2zVIyMBEL9k/r2xc+3fd6fCr3fzZEzAAQCTMaUGAPBEJiTvNL+HAIC0wAgHAAxgOXwfjpUCz+EQcADAAEypAQDgEkY4AGCATHg9AQEHAAyQCS9gM7+HAIC0kDEjHLtPLtvNIGA3I8GWu35qq55k713qEtkLgHTElBoAwBMRjXL0EjVewAYAsKXP8qnPwSjFybleMT8kAgDSAiMcADAAazgAAE9YDrNFW2QaAADgMkY4AGCAPvkcvvGTKTUAgA0Ry9k6TMRysTMJwpQaAMATxo5w7sruViDb+3ho9yl+uxkEtk27wfa1F7UftVfPZkaCZCIbAhAfXjENAPBExOEL2Jyc6xXzQyIAIKm+973vqaKiQuPGjdMf/dEfjbgd1wNOMBiUz+eLKQUFBW5fBgDSSn9qGyclUXp7e3XPPffoG9/4hqN2EjKlduONN+qVV16Jfh49enQiLgMAacPkNZz169dLknbs2OGonYQEnOuuu872qKanp0c9PT3Rz+FwOBFdAoCMcPXvUL/fL7/fn6TexEpISDx58qSKiopUVlamZcuW6YMPPrhm3cbGRuXm5kZLcXFxIroEAEaLyBfNpzaicmXTQHFxcczv1MbGxiTf2f9xPeDMmTNHzzzzjPbt26cf//jH6ujoUEVFhc6dOzdo/fr6enV1dUVLKBRyu0sAYDzryi61kRbrSsAJhUIxv1Pr6+sHvd5g6+1XlyNHjrh6j65PqdXU1ET/PGPGDM2dO1dTp07Vzp07VVdXN6C+ScM9AEgWt7JFBwIBBQKBYevX1tZq2bJlQ9aZMmXKiPszmIQ/h5Odna0ZM2bo5MmTib4UAMCmvLw85eXleXrNhAecnp4evffee5o/f36iLwUAKcvkXWptbW366KOP1NbWpr6+Ph09elSSdMMNN2j8ePtZRVwPON/61re0cOFClZSUqLOzUxs2bFA4HNby5cvjauel7myNGzX0dupkpnixe2276Wokaeam1bbqvf3QVlv1SC8DpA6TX8D2ne98Rzt37ox+/uIXvyhJevXVV1VZWWm7HdcDzm9+8xv95V/+pc6ePatPf/rTuvXWW3X48GGVlpa6fSkAgAd27Njh+BkcKQEB51/+5V/cbhIA0l4m5FIjeScAGMDkKTW3kLwTAOAJRjgAYIBMGOEQcADAAJkQcJhSAwB4ghEOABggE0Y4BBwAMIAlZ1ubLfe6kjApHXCS+SS93WvHkw3BbgaBqbtX2ar3/tKnbNUjIwGQfJkwwmENBwDgiZQe4QBAusiEEQ4BBwAMkAkBhyk1AIAnGOEAgAEyYYRDwAEAA1iWT5aDoOHkXK8wpQYA8AQjHAAwAO/DAQB4gjUceMruE/92MwjYzUiw5a6f2qon2c+cQPYCAFcj4ACAATJh0wABBwAMkAlTauxSAwB4ghEOABiAKTUAgCcsh1NqBBwAgC2WJMvBW9RS4QVsrOEAADzBCAcADBCRTz4yDQAAEo1NA0l0V3a3AtlDz/hl6tPsdu/bbgaBbdNusH3tRe1H7dWzmZEgmTL1vx8gWYwNOACQSSKWT740f/CTgAMABrAsh7vUUmCbGrvUAACeYIQDAAZg0wAAwBOZEHCYUgMAeIKAAwAG6H89gZOSCKdPn9b999+vsrIyZWVlaerUqWpoaFBvb2/cbTGlBgAGMHWX2n/9138pEonoRz/6kW644Qb953/+p1auXKnu7m5t3rw5rrYIOACAa1qwYIEWLFgQ/fzZz35WJ06c0LZt2wg4AJCKLo9wnGwauPzPcDgcc9zv98vv9zvp2gBdXV2aOHFi3OcZG3Be6s7WuFGjk92NlGY3vYzddDWSNHPTalv13n5oq616pJcBLnNrl1pxcXHM8YaGBgWDQSddi/H+++/rBz/4gbZs2RL3uWwaAAADWC4USQqFQurq6oqW+vr6Qa8XDAbl8/mGLEeOHIk5p729XQsWLNA999yjr33ta3HfY9wB57XXXtPChQtVVFQkn8+nF154IebnlmUpGAyqqKhIWVlZqqys1PHjx+PuGAAgfoFAIKZcazqttrZW77333pClvLw8Wr+9vV1VVVWaO3eunn766RH1Le4pte7ubs2cOVN/8zd/oyVLlgz4+WOPPabHH39cO3bs0PTp07VhwwbdeeedOnHihHJyckbUSQBId14/+JmXl6e8vDxbdT/88ENVVVVp1qxZ2r59u0aNGtnkWNwBp6amRjU1NYP+zLIsPfHEE1q3bp0WL14sSdq5c6fy8/O1a9cuff3rXx9wTk9Pj3p6eqKfr17wAoCM8IfzYiM9PwHa29tVWVmpkpISbd68Wf/7v/8b/VlBQUFcbbm6htPa2qqOjg5VV1dHj/n9ft1+++06dOjQoOc0NjYqNzc3Wq5e8AIAJM/+/ft16tQpNTc3a/LkySosLIyWeLkacDo6OiRJ+fn5Mcfz8/OjP7tafX19zAJXKBRys0sAkBquTKmNtChBmQZWrFghy7IGLfFKyLZony/2xi3LGnCsXyL2iANAqjE104CbXB3h9M/nXT2a6ezsHDDqAQBkFlcDTllZmQoKCtTU1BQ91tvbq4MHD6qiosLNSwFAWnEyneZ0h5tX4p5Su3Dhgk6dOhX93NraqqNHj2rixIkqKSnR2rVrtXHjRk2bNk3Tpk3Txo0bNW7cON17772udjxVJPNJervXtpuRQLKfQWDq7lW26r2/9Cnb1yYrAdKa03WYdAw4R44cUVVVVfRzXV2dJGn58uXasWOHHn74YX388cdavXq1fvvb32rOnDnav38/z+AAQIaLO+BUVlYOuTvB5/MpGAy6mrsHANJdJmwaMDZ5JwBkFEMf/HQTyTsBAJ5ghAMABvA6l1oyEHAAwBQpMC3mBAEHAAyQCSMc1nAAAJ5ghAMAJsiAXWoEHMTF7tP+djMI2M1IIElb7vqprXp2MyeQuQBm8V0pTs43G1NqAABPMMIBABMwpQYA8EQGBBym1AAAnmCEAwAm4PUEAAAvZEK2aKbUAACeYIQDACbIgE0DBBwAMEEGrOEwpQYA8ISxI5y7srsVyB46HpKaxFx2vxu76Wokadu0G2zVW9R+1F49mylwkon/xjOHz7pcnJxvOmMDDgBkFNZwAACeYA0HAAB3MMIBABMwpQYA8EQGBBym1AAAnmCEAwAmyIARDgEHAEzALjUAANxh7Ajnpe5sjRs1OtndQILF87S/3QwCMzettlXv7Ye22qrH0/7wApkGAADeyIA1HKbUAABD+spXvqKSkhKNHTtWhYWFuu+++9Te3h53OwQcAMCQqqqq9LOf/UwnTpzQz3/+c73//vv66le/Gnc7TKkBgAF8criG41pPBnrwwQejfy4tLdUjjzyiRYsW6ZNPPtGYMWNst0PAAYA0Eg6HYz77/X75/X7X2v/oo4/07LPPqqKiIq5gIzGlBgBm6H8Ox0mRVFxcrNzc3GhpbGx0pXt///d/r+zsbH3qU59SW1ubXnzxxbjbIOAAgAksF4qkUCikrq6uaKmvrx/0csFgUD6fb8hy5MiRaP2HHnpIb731lvbv36/Ro0frr//6r2VZ8c0BMqUGACZwaVt0IBBQIBAYtnptba2WLVs2ZJ0pU6ZE/5yXl6e8vDxNnz5dn//851VcXKzDhw9r7ty5trtIwAGADNQfQEaif2TT09MT13kEHCT1Sfp4rm03K4HdDAJTd6+yVe/9pU/ZqieRlQAjZ2qmgTfeeENvvPGG5s2bpwkTJuiDDz7Qd77zHU2dOjWu0Y3EGg4AmMGlNRy3ZWVl6bnnntOf//mf63Of+5z+9m//VuXl5Tp48GDcu9/iDjivvfaaFi5cqKKiIvl8Pr3wwgsxP1+xYsWAhadbb7013ssAAAwwY8YMNTc369y5c7p48aJaW1u1bds2feYzn4m7rbgDTnd3t2bOnKknn3zymnUWLFigM2fORMvevXvj7hgAZBRDRzhuinsNp6amRjU1NUPW8fv9KigoGHGnACDTmLqG46aErOEcOHBAkyZN0vTp07Vy5Up1dnZes25PT4/C4XBMAQCkH9cDTk1NjZ599lk1Nzdry5Ytamlp0R133HHN7XONjY0xT8UWFxe73SUAMJ9LmQZM5vq26KVLl0b/XF5ertmzZ6u0tFQvv/yyFi9ePKB+fX296urqop/D4TBBB0DmyYD34ST8OZzCwkKVlpbq5MmTg/7c7cRyAAAzJTzgnDt3TqFQSIWFhYm+FACkrEzYNBB3wLlw4YJOnToV/dza2qqjR49q4sSJmjhxooLBoJYsWaLCwkKdPn1ajz76qPLy8nT33Xe72nHgWuw+7W83g4DdjASStOWun9qqZzdrApkLMghTagMdOXJEVVVV0c/96y/Lly/Xtm3bdOzYMT3zzDP63e9+p8LCQlVVVWn37t3Kyclxr9cAkG4cjnDSMuBUVlYOmZJ63759jjoEAEhPJO8EABMwpQYA8EQGBByyRQMAPMEIBwAMkAnbohnhAAA8QcABAHiCKTUAMEEGbBog4ACAATJhDcfYgHNXdrcC2UPP+JH2A07Y/e/HbroaSdo27QZb9Ra1H7VXz2YKnGTi7yHsMjbgAEDGSYFRihMEHAAwQQas4bBLDQDgCUY4AGAANg0AALyRAVNqBBwAMEAmjHBYwwEAeIIRDgCYgCk1AIAnCDjJ81J3tsaNGp3sbgBxPe1vN4PAzE2rbdV7+6GtturxtD9SgbEBBwAySSZsGiDgAIAJMmBKjV1qAABPMMIBABNkwAiHgAMABsiENRym1AAAniDgAIAJLBdKgvX09Oimm26Sz+fT0aNH4z6fgAMABuifUnNSEu3hhx9WUVHRiM8n4AAAhvWLX/xC+/fv1+bNm0fcBpsGkDKS9TR9PNe1m5XAbgaBqbtX2ar3/tKnbNWTyEpgLJd2qYXD4ZjDfr9ffr/fQcPS//zP/2jlypV64YUXNG7cuBG3wwgHAEzg0hpOcXGxcnNzo6WxsdFZtyxLK1as0KpVqzR79mxHbTHCAQAD+K4UJ+dLUigUUiAQiB6/1ugmGAxq/fr1Q7bZ0tKiQ4cOKRwOq76+3kHvLiPgAEAaCQQCMQHnWmpra7Vs2bIh60yZMkUbNmzQ4cOHBwSu2bNn66/+6q+0c+dO230j4ACACTzONJCXl6e8vLxh6/3zP/+zNmzYEP3c3t6uL33pS9q9e7fmzJkT1zUJOABgAFMzDZSUlMR8Hj/+8qaTqVOnavLkyXG1xaYBAIAnGOEAgAlSJHnnlClTZFkjuxgBBwBMkQIJOJ1gSg0A4AlGOEAS2H3a324GAbsZCSRpy10/tVXPbtYEMhe4w9RNA24i4ACACVJkDccJptQAAJ6IK+A0NjbqlltuUU5OjiZNmqRFixbpxIkTMXUsy1IwGFRRUZGysrJUWVmp48ePu9ppAEg3qfB6AqfiCjgHDx7UmjVrdPjwYTU1NenSpUuqrq5Wd3d3tM5jjz2mxx9/XE8++aRaWlpUUFCgO++8U+fPn3e98wCQNlLgBWxOxbWG88tf/jLm8/bt2zVp0iS9+eabuu2222RZlp544gmtW7dOixcvliTt3LlT+fn52rVrl77+9a8PaLOnp0c9PT3Rz1en1gYApAdHazhdXV2SpIkTJ0qSWltb1dHRoerq6mgdv9+v22+/XYcOHRq0jcbGxphU2sXFxU66BAApiSm1IViWpbq6Os2bN0/l5eWSpI6ODklSfn5+TN38/Pzoz65WX1+vrq6uaAmFQiPtEgCkLqbUrq22tlbvvPOOXn/99QE/8/li3+pgWdaAY/3ceBsdAKQ8tkUP7oEHHtCePXv06quvxmQLLSgokKQBo5nOzs4Box4AQGaJK+BYlqXa2lo999xzam5uVllZWczPy8rKVFBQoKampuix3t5eHTx4UBUVFe70GADSUCas4cQ1pbZmzRrt2rVLL774onJycqIjmdzcXGVlZcnn82nt2rXauHGjpk2bpmnTpmnjxo0aN26c7r333rg6dld2twLZQ8dDUmog3dn9b9xuuhpJ2jbtBlv1FrUftVfPZgqcZEqJ3xUZMKUWV8DZtm2bJKmysjLm+Pbt27VixQpJ0sMPP6yPP/5Yq1ev1m9/+1vNmTNH+/fvV05OjisdBgCkprgCjp13IPh8PgWDQQWDwZH2CQAyjs+y5Bvhe2b6zzcdyTsBwAQZMKVG8k4AgCcY4QCAAXgfDgDAG0ypAQDgDkY4AGAAptQAAN7IgCk1YwPOS93ZGjdqdLK7AaSEeJ72t5tBYOam1bbqvf3QVtvXTokn/pEwxgYcAMgkTKkBALzBlBoAwCupMEpxgm3RAABPMMIBABNY1uXi5HzDEXAAwACZsGmAKTUAgCcY4QCACdilBgDwgi9yuTg533QEHMBFyXqSPp7r2s1KYDeDwNTdq2xf+/2lT9mqR0aC9ETAAQATMKUGAPACu9QAABlvypQp8vl8MeWRRx6Jux1GOABgAsMf/Pzud7+rlStXRj+PHx//OhsBBwAMYPqUWk5OjgoKChy1wZQaAKSRcDgcU3p6elxp95/+6Z/0qU99SjfddJO+973vqbe3N+42GOEAgAlc2qVWXFwcc7ihoUHBYNBBw9I3v/lN3XzzzZowYYLeeOMN1dfXq7W1VT/5yU/iaoeAAwAGcGtKLRQKKRAIRI/7/f5B6weDQa1fv37INltaWjR79mw9+OCD0WNf+MIXNGHCBH31q1+NjnrsIuAAgAlc2jQQCARiAs611NbWatmyZUPWmTJlyqDHb731VknSqVOnCDgAgKHl5eUpLy9vROe+9dZbkqTCwsK4ziPgABiU3fQydtPVSPbT4Gy566e26tlN05MKqXJM3aX27//+7zp8+LCqqqqUm5urlpYWPfjgg/rKV76ikpKSuNoi4ACACQxNbeP3+7V7926tX79ePT09Ki0t1cqVK/Xwww/H3RYBBwBwTTfffLMOHz7sSlsEHAAwgKlTam4i4ACACSLW5eLkfMORaQAA4AlGOABgAkM3DbiJgAMABvDJ4RqOaz1JHKbUAACeYIQDACYw/H04bjA24NyV3a1AtvcDsFR4IhkwSTx/Z+xmENg27QZb9Ra1H7VXz2ZGArvCkYir7UlsiwYAeCUDNg3ENYRobGzULbfcopycHE2aNEmLFi3SiRMnYuqsWLFiwLuv+zOLAgAyV1wB5+DBg1qzZo0OHz6spqYmXbp0SdXV1eru7o6pt2DBAp05cyZa9u7d62qnASDd+CzLcTFdXFNqv/zlL2M+b9++XZMmTdKbb76p2267LXrc7/fbfvd1T09PzCtQw+FwPF0CgPQQuVKcnG84R6vyXV1dkqSJEyfGHD9w4IAmTZqk6dOna+XKlers7LxmG42NjcrNzY2Wq1+PCgBIDyMOOJZlqa6uTvPmzVN5eXn0eE1NjZ599lk1Nzdry5Ytamlp0R133BEzivlD9fX16urqipZQKDTSLgFAymJKbQi1tbV655139Prrr8ccX7p0afTP5eXlmj17tkpLS/Xyyy9r8eLFA9rx+/3XfOc2AGSMDNilNqKA88ADD2jPnj167bXXNHny5CHrFhYWqrS0VCdPnhxRBwEA6SGugGNZlh544AE9//zzOnDggMrKyoY959y5cwqFQnG/+xoAMgqZBmKtWbNGu3bt0osvvqicnBx1dHRIknJzc5WVlaULFy4oGAxqyZIlKiws1OnTp/Xoo48qLy9Pd999d1wde6k7W+NGjY7rHABms/vEv90MAjM3rbZV7+2HttqqJ9nLnPD77j7b7dlFpoGrbNu2TZJUWVkZc3z79u1asWKFRo8erWPHjumZZ57R7373OxUWFqqqqkq7d+9WTk6Oa50GAKSeuKfUhpKVlaV9+/Y56hAAZCSm1AAAXvBFLhcn55uO9+EAADzBCAcATMCUGgDAEzz4CQDwgtP0NKmQ2oY1HACAJxjhAIAJWMMBkG7sPEmf7GvbzUhgN4PA1N2rbNWTpPeXPjVsnXAkAXuQLTl7p4358YYpNQCANxjhAIABMmHTAAEHAExgyeEajms9SRim1AAAnmCEAwAmYJcaAMATEUk+h+cbjik1AIAnCDgAYID+XWpOSiK9/PLLmjNnjrKyspSXl6fFixfH3QZTagBgAoPXcH7+859r5cqV2rhxo+644w5ZlqVjx47F3Q4BBwBwTZcuXdI3v/lNbdq0Sffff3/0+Oc+97m428qYgGM3VUYy034AiI/dv6920tX0s5MGJ3LxoqRv227TFpdGOOFwOOaw3++X3+8fcbP/8R//oQ8//FCjRo3SF7/4RXV0dOimm27S5s2bdeONN8bVFms4AGCC/oDjpEgqLi5Wbm5utDQ2Njrq1gcffCBJCgaD+va3v62XXnpJEyZM0O23366PPvoorrYIOABggogLRVIoFFJXV1e01NfXD3q5YDAon883ZDly5IgiVxKVrlu3TkuWLNGsWbO0fft2+Xw+/eu//mtct5gxU2oAkAkCgYACgcCw9Wpra7Vs2bIh60yZMkXnz5+XJP3Jn/xJ9Ljf79dnP/tZtbW1xdU3Ag4AGMDr5J15eXnKy8sbtt6sWbPk9/t14sQJzZs3T5L0ySef6PTp0yotLY3rmgQcADCBoduiA4GAVq1apYaGBhUXF6u0tFSbNm2SJN1zzz1xtUXAAQAMadOmTbruuut033336eOPP9acOXPU3NysCRMmxNUOAQcATBCxJJ+DUUokcQ9+jhkzRps3b9bmzZsdtUPAAQATGDql5ibjAo515V/axxf6XG3X7jvIf9/t7nUBxM/tv69225P6H+q0V8dKgV/yJjEu4PRvwfu7+e8muScAMpP9DALnz59Xbm6uS9d1OMJJgVd+GhdwioqKFAqFlJOTI5/v/14OEQ6HVVxcrFAoZGuPucm4F3Ol0/1wL4ljWZbOnz+voqIiNxtlSs1ro0aN0uTJk6/5c7sPNaUC7sVc6XQ/3EtiuDeyyRzGBRwAyEgRS46mxRK4S80tBBwAMIEVuVycnG+4lEne6ff71dDQ4CjNtim4F3Ol0/1wLzCNz2JfHwAkTTgcVm5urv5f8Td03aiRB9RLkR69Etqmrq4uY9a5rsaUGgCYgDUcAIAnMmBbdMqs4QAAUhsjHAAwgSWHIxzXepIwBBwAMAFTagAAuIMRDgCYIBKR5ODhzTgyYicLAQcATMCUGgAA7mCEAwAmyIARDgEHAEyQAZkGmFIDAHiCEQ4AGMCyIrIcvGLAybleIeAAgAksy9m0WAqs4TClBgDwBCMcADCB5XDTQAqMcAg4AGCCSETypfcrpgk4AGCCDBjhsIYDAPAEIxwAMIAVichyMKXGtmgAgD1MqQEA4A5GOABggogl+dJ7hEPAAQATWJYcvYAtBQIOU2oAAE8wwgEAA1gRS5aDKTUrBUY4BBwAMIEVkbMpNfO3RTOlBgC4pgMHDsjn8w1aWlpa4mqLEQ4AGMDUKbWKigqdOXMm5tg//MM/6JVXXtHs2bPjaouAAwAmMHRK7frrr1dBQUH08yeffKI9e/aotrZWPp8vrrYIOABggEv6xFGigUv6RJIUDodjjvv9fvn9fiddi7Fnzx6dPXtWK1asiPtcn5UKWxsAIE1dvHhRZWVl6ujocNzW+PHjdeHChZhjDQ0NCgaDjtvu9+Uvf1mStHfv3rjPZYQDAEk0duxYtba2qre313FblmUNmOa61ugmGAxq/fr1Q7bX0tISs07zm9/8Rvv27dPPfvazEfWPEQ4AZKCzZ8/q7NmzQ9aZMmWKxo4dG/38j//4j/rBD36gDz/8UGPGjIn7mgQcAMCwLMvS1KlTtXjxYm3evHlEbfAcDgBgWM3NzWptbdX9998/4jYY4QAAhnXvvffq17/+tf7t3/5txG0QcAAAnmBKDQDgCQIOAMATBBwAgCcIOAAATxBwAACeIOAAADxBwAEAeIKAAwDwBAEHAOAJAg4AwBMEHACAJ/4/FeqdXXrR/LUAAAAASUVORK5CYII=\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "A = ht.operators.adjacency(nbrs)\n", "G = ht.operators.degree(nbrs)\n", "I = ht.operators.identity(nbrs) # identical: sp.sparse.identity(len(T))\n", "\n", "H = w*(A - G) - m*I\n", "\n", "\n", "plt.matshow(D.todense()); plt.colorbar();" ] }, { "cell_type": "markdown", "id": "c21cf2bd", "metadata": {}, "source": [ "## Dirichlet boundary" ] }, { "cell_type": "code", "execution_count": 12, "id": "2b97d32a", "metadata": {}, "outputs": [], "source": [ "from hypertiling.graphics.svg import make_svg, draw_svg" ] }, { "cell_type": "markdown", "id": "b611b6e9", "metadata": {}, "source": [ "The operator functions provide the `boundary` keyword which takes a boolean array, encoding whether a vertex is considered a boundary vertex. For boundary points, the corresponding rows in the matrix are left empty, it therefore becomes non-symmetric. This way it is ensured that the boundary point act on their interiour neighbours, but stay themselves constant (Dirichlet boundary)" ] }, { "cell_type": "markdown", "id": "a4ac21ce", "metadata": {}, "source": [ "We use a helper function to determine at which maximal radial distance the lattice can be divded into a closed boundary and interiour bulk nodes" ] }, { "cell_type": "code", "execution_count": 13, "id": "99a78b51", "metadata": {}, "outputs": [], "source": [ "def radial_distance_polar(z):\n", " return np.abs(z)\n", "\n", "def establish_boundary(tiling, cutoff_radius):\n", " boundary = np.zeros(len(T)).astype(\"bool\")\n", " for j in range(len(T)):\n", " if radial_distance_polar(T.get_center(j)) > cutoff_radius:\n", " boundary[j] = True\n", " return boundary" ] }, { "cell_type": "code", "execution_count": 15, "id": "31e95f48", "metadata": {}, "outputs": [], "source": [ "T = ht.HyperbolicTiling(7,3,6)\n", "\n", "boundary = establish_boundary(T, cutoff_radius = 0.975)" ] }, { "cell_type": "markdown", "id": "975fe038", "metadata": {}, "source": [ "This is an example; boundary cells are plotted in black, bulk cells in white color" ] }, { "cell_type": "code", "execution_count": 16, "id": "dbc75421", "metadata": {}, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\n", "" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "svg = make_svg(T, boundary.astype(\"int\"), cmap=\"Greys\", edgecolor=\"grey\", lw=0.1)\n", "draw_svg(svg)" ] }, { "cell_type": "markdown", "id": "7b9b22de", "metadata": {}, "source": [ "## Helmholtz equation" ] }, { "cell_type": "markdown", "id": "ebe0911e", "metadata": {}, "source": [ "Now we are ready to solve a Helmholtz equation in the bulk region of a hyperbolic lattice" ] }, { "cell_type": "code", "execution_count": 18, "id": "3773b5ec", "metadata": {}, "outputs": [], "source": [ "T = ht.HyperbolicTiling(7,3,6)\n", "\n", "# locate boundary\n", "boundary = establish_boundary(T, cutoff_radius = 0.975)\n", "\n", "# extract neighbours\n", "nbrs = T.get_nbrs_list()\n", "\n", "# cut away boundary in one quadrant; those cells belong to the bulk region now\n", "for i in range(len(T)):\n", " if T.get_angle(i) < np.deg2rad(90):\n", " boundary[i] = False\n", "\n", "bulk = np.invert(boundary)\n", "\n", "# mass parameter\n", "m = 1\n", "\n", "# weights\n", "weights = [list(np.random.rand(len(nb))+5) for nb in nbrs] # some random weights between [4,5]" ] }, { "cell_type": "code", "execution_count": 19, "id": "d1dc681c", "metadata": {}, "outputs": [], "source": [ "# construct discrete differential operator\n", "A = ht.operators.adjacency(nbrs, weights, boundary=boundary) # Adjacency matrix\n", "G = ht.operators.degree(nbrs, weights, boundary=boundary) # Degree matrix \n", "D = A-G # Laplacian \n", "M = m*ht.operators.identity(nbrs, boundary=boundary) # Mass matrix\n", "B = sp.sparse.diags(boundary.astype(\"int\")) # Boundary matrix\n", "\n", "H = D - M + B # Helmholtzian" ] }, { "cell_type": "markdown", "id": "4a2da87b", "metadata": {}, "source": [ "Reminder: The boundary is included as trivial lines in the operator matrix; in some literature this approach is refered to as \"ghost cells\"; they are not updated but affect their bulk neighbours\n", "\n", "The right hand side of the resulting linear system thus carries precisely the Dirichlet boundary values for those sites" ] }, { "cell_type": "markdown", "id": "a92b1352", "metadata": {}, "source": [ "Now are ready to solve the linear system $Hx=y$, where $H$ is the differential operator, $x$ is the solution vector and $y$ is the right hand side (`rhs`). We use the GMRES solver (Generalized minimal residual method)." ] }, { "cell_type": "code", "execution_count": 20, "id": "98b773d0", "metadata": {}, "outputs": [], "source": [ "from scipy.sparse.linalg import gmres" ] }, { "cell_type": "code", "execution_count": 21, "id": "d46674c4", "metadata": {}, "outputs": [], "source": [ "rhs = boundary.astype(\"int\") # right hand side\n", "x0 = np.ones(len(T)) # initial guess\n", "\n", "sol, _ = gmres(H, rhs, x0=x0) # solve" ] }, { "cell_type": "markdown", "id": "c7e0c296", "metadata": {}, "source": [ "Boundary cells at angles between 90 and 360 degrees have been fixed to a value of 1 (dark blue), whereas all remaining cells (including the boundary between 0 and 90 degress) have been left free. The colormap is roughly symmetric, hence white cells have a value of 0 and dark red cells a value of -1." ] }, { "cell_type": "code", "execution_count": 22, "id": "fdb4c877", "metadata": {}, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\n", "" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "svg = make_svg(T, sol, cmap=\"RdBu\", edgecolor=\"white\", lw=0.1)\n", "draw_svg(svg)" ] }, { "cell_type": "markdown", "id": "6b61fcb8", "metadata": {}, "source": [ "## Laplace equation" ] }, { "cell_type": "markdown", "id": "279665bb", "metadata": {}, "source": [ "Now we model an electrostatic problem, where the boundary nodes are held to a fixed electric potential" ] }, { "cell_type": "code", "execution_count": 89, "id": "b3c0cd80", "metadata": {}, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\n", "" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "T = ht.HyperbolicTiling(3,7,6, center=\"vertex\")\n", "\n", "boundary = establish_boundary(T, cutoff_radius = 0.982)\n", "\n", "svg = make_svg(T, boundary.astype(\"int\"), cmap=\"Greys\", edgecolor=\"grey\", lw=0.1)\n", "draw_svg(svg)" ] }, { "cell_type": "code", "execution_count": 90, "id": "510fccf7", "metadata": {}, "outputs": [], "source": [ "# extract neighbours\n", "nbrs = T.get_nbrs_list(method=\"RO\")\n", "\n", "weights = [list(np.random.rand(len(nb))+5) for nb in nbrs] # some random weights between [4,5]" ] }, { "cell_type": "code", "execution_count": 91, "id": "811c5520", "metadata": {}, "outputs": [], "source": [ "# construct discrete differential operator\n", "A = ht.operators.adjacency(nbrs, weights, boundary=boundary) # Adjacency matrix\n", "G = ht.operators.degree(nbrs, weights, boundary=boundary) # Degree matrix \n", "D = A-G # Laplacian \n", "B = sp.sparse.diags(boundary.astype(\"int\")) # Boundary matrix\n", "\n", "H = D + B # Laplacian" ] }, { "cell_type": "markdown", "id": "6ac770e7", "metadata": {}, "source": [ "Build Dirichlet boundary and solve Laplace equation in the bulk" ] }, { "cell_type": "code", "execution_count": 96, "id": "94b5dfb7", "metadata": {}, "outputs": [], "source": [ "# some regions are fixed to a value of 1, some to a value of -1\n", "rhs = boundary.astype(\"int\")\n", "for i in range(len(T)):\n", " if boundary[i]:\n", " if T.get_angle(i) < np.deg2rad(150):\n", " rhs[i] = -1\n", " if np.deg2rad(180) < T.get_angle(i) < np.deg2rad(220):\n", " rhs[i] = -1\n", " \n", "x0 = np.ones(len(T)) # initial guess\n", "\n", "sol, _ = gmres(H, rhs, x0=x0, tol=1e-2) # solve" ] }, { "cell_type": "markdown", "id": "8e182803", "metadata": {}, "source": [ "Plot the result. This time we fixed the entire boundary to values of either -1 (red) or +1 (blue). In the interiour of the lattice, the Laplace equation provides a nice, smooth solution (electrostatic potential)." ] }, { "cell_type": "code", "execution_count": 97, "id": "919b45d0", "metadata": {}, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\n", "" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "svg = make_svg(T, sol, cmap=\"RdBu\", edgecolor=\"white\", lw=0.1)\n", "draw_svg(svg)" ] }, { "cell_type": "markdown", "id": "d430fb8a", "metadata": {}, "source": [ "## Refinement" ] }, { "cell_type": "code", "execution_count": 99, "id": "e8b74844", "metadata": {}, "outputs": [], "source": [ "T = ht.HyperbolicTiling(3,7,6, center=\"vertex\")\n", "\n", "T.refine_lattice(1)\n", "\n", "for i in range(len(T)):\n", " angle = np.angle(T.get_center(i))\n", " if angle > 0:\n", " T[i].angle = angle\n", " else:\n", " T[i].angle = angle + 2*np.pi\n", " \n", "boundary = establish_boundary(T, cutoff_radius = 0.982)" ] }, { "cell_type": "code", "execution_count": 100, "id": "b115b0a8", "metadata": {}, "outputs": [], "source": [ "# extract neighbours\n", "nbrs = T.get_nbrs_list(method=\"RO\", radius=0.3)\n", "\n", "weights = [list(np.random.rand(len(nb))+100) for nb in nbrs] # some random weights ~ 20" ] }, { "cell_type": "code", "execution_count": 118, "id": "94336321", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "7d15eebf", "metadata": {}, "outputs": [], "source": [ "# construct discrete differential operator\n", "A = ht.operators.adjacency(nbrs, weights, boundary=boundary) # Adjacency matrix\n", "G = ht.operators.degree(nbrs, weights, boundary=boundary) # Degree matrix \n", "D = A-G # Laplacian \n", "M = ht.operators.identity(nbrs, boundary=boundary) # Mass matrix\n", "B = sp.sparse.diags(boundary.astype(\"int\")) # Boundary matrix" ] }, { "cell_type": "code", "execution_count": 122, "id": "e1b4ad3b", "metadata": {}, "outputs": [], "source": [ "# some regions are fixed to a value of 1, some to a value of -1\n", "rhs = boundary.astype(\"int\")\n", "for i in range(len(T)):\n", " if boundary[i]:\n", " if np.deg2rad(14) < T.get_angle(i) < np.deg2rad(140):\n", " rhs[i] = -1\n", " if np.deg2rad(203) < T.get_angle(i) < np.deg2rad(261):\n", " rhs[i] = -1\n", " \n", "x0 = np.ones(len(T)) # initial guess" ] }, { "cell_type": "code", "execution_count": 119, "id": "a02f0495", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": 132, "id": "dd8b0a46", "metadata": {}, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\t\n", "\n", "\n", "" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "m = 1\n", "H = D - m *M + B # Helmholtzian\n", "\n", "sol, _ = gmres(H, rhs, x0=x0, tol=1e-2) # solve\n", "\n", "svg = make_svg(T, sol, cmap=\"RdBu\", edgecolor=\"white\", lw=0.1) # plot\n", "draw_svg(svg)" ] }, { "cell_type": "code", "execution_count": null, "id": "91a577d2", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "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.9.15" }, "toc": { "base_numbering": 1, "nav_menu": {}, "number_sections": true, "sideBar": true, "skip_h1_title": false, "title_cell": "Table of Contents", "title_sidebar": "Contents", "toc_cell": false, "toc_position": {}, "toc_section_display": true, "toc_window_display": false } }, "nbformat": 4, "nbformat_minor": 5 }