diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..4f40ecc --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +kubeconfig.yaml +release-*/ +.ipynb* +__pycache__ \ No newline at end of file diff --git a/PinnedImages/PinnedImages.ipynb b/PinnedImages/PinnedImages.ipynb new file mode 100644 index 0000000..512f62d --- /dev/null +++ b/PinnedImages/PinnedImages.ipynb @@ -0,0 +1,389 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 3, + "id": "239df27d-b4b8-4ff6-9a01-48f744e30000", + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "import numpy as np\n", + "import datetime as dt\n", + "import json\n", + "import matplotlib\n", + "import matplotlib.pyplot as plt\n", + "from datetime import datetime\n", + "from basic_units import minutes" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "cb5e70dc-db9d-4305-a646-9b93bd5b5090", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Feature was applied at:2024-08-30 12:26:09\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAACVcAAAPGCAYAAADtVziSAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOzdeZjVZfk/8PdhGDZhQJRFXMDcl8Q1JUVFSVwyTf26VCpoLqVouXwtSwQzd0szcMEKtdxQyw3MFfcV0ZCvmhqoIIoriCTMcn5/6MyPcQ4KzuiwvF7XxTWc5zznc+7PfQ52pW/up1AsFosBAAAAAAAAAACgnhbNXQAAAAAAAAAAAMDiSLgKAAAAAAAAAACgBOEqAAAAAAAAAACAEoSrAAAAAAAAAAAAShCuAgAAAAAAAAAAKEG4CgAAAAAAAAAAoAThKgAAAAAAAAAAgBKEqwAAAAAAAAAAAEoQrgIAAAAAAAAAAChBuAoAAABY5g0cODC9evVq7jK+UK9evTJw4MDmLoOvSKnvYaFQyNChQ5vsPcaNG5dCoZBx48Z96Wt8Fd/Dpr5PAAAAgKYiXAUAAAAstUaNGpVCoVD3q02bNll77bVz9NFH56233mru8hqtNihzww03NHcpTWbKlCkZNGhQ1lhjjbRp0ybdu3fPtttum1NPPfVLXW/MmDFCO1/CI488kqFDh+aDDz5o7lIAAAAAmlXL5i4AAAAA4Kt22mmnZfXVV8/HH3+chx56KBdffHHGjBmT5557Lu3atcvIkSNTU1PT3GUu815++eVsscUWadu2bQ455JD06tUr06dPz9NPP52zzz47w4YNW+RrjhkzJsOHD19iA1b//e9/07Ll1/+v8B555JEMGzYsAwcOTKdOneo99+KLL6ZFi6b9O5vNdZ8AAAAAX8S/sQAAAACWervssks233zzJMmPf/zjrLDCCvnd736Xm2++OQcccEDKy8ubu0SS/P73v8/s2bPzzDPPpGfPnvWemzFjRrPV1ZzatGnT3CU00Lp16ya/5uJ4nwAAAABxLCAAAACwLNphhx2SJJMnT06SDBw4ML169ap7fsqUKSkUCjnvvPNy2WWXZY011kjr1q2zxRZb5Mknn6x3rYEDB6Z9+/aZNm1a9txzz7Rv3z5dunTJCSeckOrq6np7a2pqcsEFF2SDDTZImzZt0q1btxxxxBF5//336+0rFos5/fTTs8oqq6Rdu3bp169fJk2atFD3NnTo0BQKhfz73//Oj370o3Ts2DFdunTJKaeckmKxmNdffz177LFHKioq0r1795x//vn1Xj9v3rwMGTIkm222WTp27Jjlllsuffv2zX333dfgvd59990ceOCBqaioSKdOnXLwwQfn2WefTaFQyKhRo+rtfeGFF7LPPvukc+fOadOmTTbffPPccsst9fa88sorWWWVVRoEq5Kka9euDdbGjh2bvn37ZrnllkuHDh2y22671evTwIEDM3z48CSpdzzk57n55puz2267pUePHmndunXWWGON/OY3v2nwWW6//fbZcMMNM378+Hz7299O27Zts/rqq+eSSy6pt6/26MbrrrsuJ598crp3757lllsu3/ve9/L6669/bi21dX926ta0adNyyCGHpFu3bmndunU22GCD/PnPf27w2qlTp2bPPffMcsstl65du+bnP/955s6d+4XvOXTo0Jx44olJktVXX72ub1OmTEmS9OrVKwMHDqzbX3v85kMPPZRjjjkmXbp0SadOnXLEEUdk3rx5+eCDD3LQQQdl+eWXz/LLL5///d//TbFY/Nz7rP0ev/zyy3XTszp27JhBgwZlzpw59V773//+N8ccc0xWXHHFdOjQId/73vcybdq0Btf88MMP87Of/Sy9evVK69at07Vr13znO9/J008//YU9AQAAAJZdJlcBAAAAy5xXXnklSbLCCit87r6rr746H374YY444ogUCoWcc8452WuvvfKf//yn3rSr6urqDBgwIFtuuWXOO++83H333Tn//POzxhpr5Cc/+UndviOOOCKjRo3KoEGDcswxx2Ty5Mn54x//mAkTJuThhx+uu+aQIUNy+umnZ9ddd82uu+6ap59+OjvttFPmzZu30Pe43377Zb311stZZ52V22+/Paeffno6d+6cSy+9NDvssEPOPvvs/O1vf8sJJ5yQLbbYIttuu22SZNasWbn88stzwAEH5LDDDsuHH36YP/3pTxkwYECeeOKJbLzxxsmnQbHdd989TzzxRH7yk59k3XXXzc0335yDDz64QS2TJk3K1ltvnZVXXjm/+MUvstxyy+X666/PnnvumRtvvDHf//73kyQ9e/bM3XffnXvvvbcuALcgV111VQ4++OAMGDAgZ599dubMmZOLL74422yzTSZMmJBevXrliCOOyBtvvJG77rorV1111UL1bdSoUWnfvn2OO+64tG/fPvfee2+GDBmSWbNm5dxzz6239/3338+uu+6afffdNwcccECuv/76/OQnP0mrVq1yyCGH1Nv729/+NoVCISeddFJmzJiRCy64IP37988zzzyTtm3bLlRtSfLWW29lq622SqFQyNFHH50uXbpk7NixOfTQQzNr1qz87Gc/Sz4NHO2444557bXXcswxx6RHjx656qqrcu+9937he+y1117597//nWuuuSa///3vs+KKKyZJunTp8rmvGzx4cLp3755hw4blsccey2WXXZZOnTrlkUceyWqrrZYzzjgjY8aMybnnnpsNN9wwBx100BfWsu+++2b11VfPmWeemaeffjqXX355unbtmrPPPrtuz8CBA3P99dfnwAMPzFZbbZX7778/u+22W4NrHXnkkbnhhhty9NFHZ/3118+7776bhx56KM8//3w23XTTL6wFAAAAWEYVAQAAAJZSf/nLX4pJinfffXfx7bffLr7++uvFa6+9trjCCisU27ZtW5w6dWqxWCwWDz744GLPnj3rXjd58uRikuIKK6xQfO+99+rWb7755mKS4q233lq3dvDBBxeTFE877bR6773JJpsUN9tss7rHDz74YDFJ8W9/+1u9fXfccUe99RkzZhRbtWpV3G233Yo1NTV1+04++eRikuLBBx9ct3bfffcVkxRHjx5dt3bqqacWkxQPP/zwurWqqqriKqusUiwUCsWzzjqrbv39998vtm3btt41q6qqinPnzq1X4/vvv1/s1q1b8ZBDDqlbu/HGG4tJihdccEHdWnV1dXGHHXYoJin+5S9/qVvfcccdi9/85jeLH3/8cd1aTU1N8dvf/nZxrbXWqlt77rnnim3bti0mKW688cbFY489tviPf/yj+NFHH9Wr58MPPyx26tSpeNhhh9Vbf/PNN4sdO3ast37UUUcVF+Vfgc2ZM6fB2hFHHFFs165dvfq32267YpLi+eefX7c2d+7c4sYbb1zs2rVrcd68ecXifJ/RyiuvXJw1a1bd3uuvv76YpHjhhRfWrX32e1j8ZLxT8dRTT617fOihhxZXWmml4jvvvFNv3/7771/s2LFjXf0XXHBBMUnx+uuvr9vz0UcfFddcc81ikuJ99933uX0499xzi0mKkydPbvBcz549631nav+cDRgwoN53tk+fPsVCoVA88sgj69Zqv4vbbbfd595n7fd4/u9csVgsfv/73y+usMIKdY/Hjx9fTFL82c9+Vm/fwIEDG1yzY8eOxaOOOupz7xsAAADgsxwLCAAAACz1+vfvny5dumTVVVfN/vvvn/bt2+fvf/97Vl555c993X777Zfll1++7nHfvn2TJP/5z38a7D3yyCPrPe7bt2+9faNHj07Hjh3zne98J++8807dr8022yzt27evO3bv7rvvzrx58zJ48OB6R9jVTiRaWD/+8Y/rfl9WVpbNN988xWIxhx56aN16p06dss4669Srs6ysLK1atUo+nU713nvvpaqqKptvvnm949PuuOOOlJeX57DDDqtba9GiRY466qh6dbz33nu59957s+++++bDDz+su+933303AwYMyEsvvZRp06YlSTbYYIM888wz+dGPfpQpU6bkwgsvzJ577plu3bpl5MiRdde866678sEHH+SAAw6o18uysrJsueWWJY8wXFjzT5Gqrbdv376ZM2dOXnjhhXp7W7ZsmSOOOKLucatWrXLEEUdkxowZGT9+fL29Bx10UDp06FD3eJ999slKK62UMWPGLHRtxWIxN954Y3bfffcUi8V69z5gwIDMnDmz7jMaM2ZMVlpppeyzzz51r2/Xrl0OP/zwRezIwjv00EPrfWe33HLLBt+52u9iqT9DpZT6c/Xuu+9m1qxZyaffwyT56U9/Wm/f4MGDG1yrU6dOefzxx/PGG28s4p0BAAAAyzLHAgIAAABLveHDh2fttddOy5Yt061bt6yzzjpp0eKL/87ZaqutVu9xbdDq/fffr7fepk2bBkemLb/88vX2vfTSS5k5c2a6du1a8r1mzJiRJHn11VeTJGuttVa957t06VIv6LWotXfs2DFt2rSpO+Jt/vV333233toVV1yR888/Py+88EIqKyvr1ldfffW637/66qtZaaWV0q5du3qvXXPNNes9fvnll1MsFnPKKafklFNOKVnrjBkz6oJua6+9dq666qpUV1fn//7v/3LbbbflnHPOyeGHH57VV189/fv3z0svvZQkCzw6sKKi4nN783kmTZqUX//617n33nvrAjy1Zs6cWe9xjx49stxyy9VbW3vttZMkU6ZMyVZbbVW3/tnPs1AoZM0118yUKVMWura33347H3zwQS677LJcdtllJffM/z1ac80164WdkmSdddZZ6PdbVKW+c0my6qqrNlj/7J+hhb3m/H8GKyoq8uqrr6ZFixb1vpsp8T1MknPOOScHH3xwVl111Wy22WbZddddc9BBB+Ub3/jGQt4hAAAAsCwSrgIAAACWet/61rey+eabL/LrysrKSq5/corZF++bX01NTbp27Zq//e1vJZ//bDirsUrVtDD389e//jUDBw7MnnvumRNPPDFdu3ZNWVlZzjzzzLzyyiuLXEdNTU2S5IQTTsiAAQNK7ikVhCkrK8s3v/nNfPOb30yfPn3Sr1+//O1vf0v//v3rrnnVVVele/fuDV7bsuWX+1deH3zwQbbbbrtUVFTktNNOyxprrJE2bdrk6aefzkknnVT3vs2l9v1/9KMf5eCDDy65Z6ONNvqaq/r/FvT9KrX+2T9Di3rNhX39/Pbdd9/07ds3f//733PnnXfm3HPPzdlnn52bbropu+yyyyJfDwAAAFg2CFcBAAAAfA3WWGON3H333dl6663rHT33WT179kw+nXQ1/0Sdt99+e6Gn/TTGDTfckG984xu56aab6k09OvXUUxvUed9992XOnDn1ple9/PLL9fbV3kN5eXn69+//pWqqDcZNnz49+bSXSdK1a9cvvOZnJzd9nnHjxuXdd9/NTTfdlG233bZuffLkySX3v/HGG/noo4/qTa/697//nSTp1atXvb2107ZqFYvFvPzyy4sUhurSpUs6dOiQ6urqL7zvnj175rnnnkuxWKzXgxdffHGh3mtR+tacevbsmZqamkyePLnedLDPfg9rrbTSSvnpT3+an/70p5kxY0Y23XTT/Pa3vxWuAgAAABboi+ffAwAAANBo++67b6qrq/Ob3/ymwXNVVVX54IMPkiT9+/dPeXl5LrroonrTeS644IKvpc7aSUHzv/fjjz+eRx99tN6+AQMGpLKyMiNHjqxbq6mpyfDhw+vt69q1a7bffvtceumldeGo+b399tt1v3/wwQfrHUNYa8yYMcl8R9oNGDAgFRUVOeOMM0run/+atcGn2v4u6r3PmzcvI0aMKLm/qqoql156ab29l156abp06ZLNNtus3t4rr7wyH374Yd3jG264IdOnT1+kUE9ZWVn23nvv3HjjjXnuuecaPD//fe+666554403csMNN9StzZkzZ4HHCX7WovStOdVOQ/vsZ3TRRRfVe1xdXd3gWMeuXbumR48emTt37tdQKQAAALCkMrkKAAAA4Guw3Xbb5YgjjsiZZ56ZZ555JjvttFPKy8vz0ksvZfTo0bnwwguzzz77pEuXLjnhhBNy5pln5rvf/W523XXXTJgwIWPHjs2KK674ldf53e9+NzfddFO+//3vZ7fddsvkyZNzySWXZP3118/s2bPr9u2555751re+leOPPz4vv/xy1l133dxyyy157733ks9MPho+fHi22WabfPOb38xhhx2Wb3zjG3nrrbfy6KOPZurUqXn22WeTJGeffXbGjx+fvfbaq26i09NPP50rr7wynTt3zs9+9rMkSUVFRS6++OIceOCB2XTTTbP//vunS5cuee2113L77bdn6623zh//+MckqQs5HXPMMRkwYEDKysqy//77l7z3b3/721l++eVz8MEH55hjjkmhUMhVV121wCPoevTokbPPPjtTpkzJ2muvneuuuy7PPPNMLrvsspSXl9fb27lz52yzzTYZNGhQ3nrrrVxwwQVZc801c9hhhy3S53PWWWflvvvuy5ZbbpnDDjss66+/ft577708/fTTufvuu+v6f9hhh+WPf/xjDjrooIwfPz4rrbRSrrrqqnpTxj5Pbd9+9atfZf/99095eXl23333elO6FgebbbZZ9t5771xwwQV59913s9VWW+X++++vmyBW+z388MMPs8oqq2SfffZJ79690759+9x999158sknc/755zfzXQAAAACLM+EqAAAAgK/JJZdcks022yyXXnppTj755LRs2TK9evXKj370o2y99dZ1+04//fS0adMml1xySV2Q5s4778xuu+32ldc4cODAvPnmm7n00kvzz3/+M+uvv37++te/ZvTo0Rk3blzdvrKystx+++059thjc8UVV6RFixb5/ve/n1NPPTVbb7112rRpU7d3/fXXz1NPPZVhw4Zl1KhReffdd9O1a9dssskmGTJkSN2+k08+OVdffXXuv//+/O1vf8ucOXOy0korZf/9988pp5yS1VdfvW7vD37wg/To0SNnnXVWzj333MydOzcrr7xy+vbtm0GDBtXt22uvvTJ48OBce+21+etf/5pisbjAcNUKK6yQ2267Lccff3x+/etfZ/nll8+PfvSj7LjjjnUTkua3/PLL54orrsjgwYMzcuTIdOvWLX/84x9LBqZOPvnk/Otf/8qZZ56ZDz/8MDvuuGNGjBix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Q/r27Ztbbrlloe9tcWZyFQAAAAAAAADAIpp1551564wzU/Xmm3VrLbt3T7eTf5mKnXZq1toWxfPPP58hQ4akX79++f73v5927drlueeeyzXXXJMxY8bk6aefTs+ePev2H3zwwbn++uuz0UYbZdCgQWndunVef/313HfffXnyySfTu3fv7Lnnnvnggw9y8803Z4899sjGG2/cpDU3JqTVFP79739nm222ydtvv53dd989G2ywQZ577rn8+c9/zq233poHHngg3bt3b/C6Aw44IE888UR22WWXlJWV5frrr89RRx2V8vLyHHbYYQv9/k8++WTOOeec9OvXL0cccUQmTJiQf/zjH5k4cWKee+65tGnTpm7v6NGjc8ABB6R169bZb7/90rVr19x555057bTT8s9//jPjxo2rt//KK6/MwQcfnIqKihx44IHp1KlTbrvttvTv3z/z5s1Lq1at6tUyd+7c7Lzzzhk3blw23njjHHrooamsrMztt9+ePfbYIxdddFGOPvroL93rxYFwFQAAAAAAAADAIph1552ZduzPkmKx3nrVW299sn7hBUtMwGq99dbL9OnT07lz5yRJTU1NZs2alfHjx2ennXbK6aefnpEjRyafTrkaPXp0Nttsszz++OMpKyuru051dXU+/PDDJKkXrtpzzz0zcODARtdZVVWVyy67LEnyrW99q9HXa4wjjzwyb7/9di699NIcfvjhdesjRozIUUcdlaOOOio33nhjg9dNnTo1zz33XCoqKpIkxx57bDbccMOcf/75ixSuGjNmTK699trst99+dWsHHXRQrrrqqvzjH//I/vvvnySZNWtWDjvssLRs2TKPPvpoNtpooyTJGWeckR/84Ae57rrrcu655+aUU06p2z948OAst9xyefLJJ7P22msnSX7729+mf//+mT59er2gXZKcdtppGTduXE455ZQMGzasLvj24YcfZocddsjxxx+fvfbaKz169FikHi9OHAsIAAAAAAAAALCQitXVeeuMMxsEqz558pO1t844c4k5IrBjx451war59evXLxtssEHuvvvuurVCoZBisZg2bdqkRYv6kZOysrJ06tSpyeq6++67M3To0AwdOjSDBw/O+uuvn3vvvTerr756s05Ceu2113Lfffdl/fXXbxCIOvLII7Puuuvm3nvvzdSpUxu89swzz6wLViXJOuusk6233jovvvhiXTBtYWy77bb1glVJcsghhyTzHZmYT4/3mzlzZg455JC6YFWStGjRIuecc05atmxZ70jFf/zjH5k1a1YOOeSQumBVPj2S8be//W2DOmpqanLxxRdnjTXWqBesSpIOHTpkyJAhmTdvXm666aaFvrfFkclVAAAAAAAAAAALac5T4+sdBdhAsZiqN9/MnKfGZ7ktm3fC0sIaN25cLrjggjz++ON55513UlVVVffc/MfAVVRUZNddd82YMWOy6aab5n/+53+y/fbbZ4sttkh5eXmT1nTPPffknnvuSZK0bt06vXr1ynHHHZdf/vKXJcNgX5dnnnkmSbLddts1OJ6wRYsW2XbbbfPCCy9k4sSJWX/99es9v9lmmzW43iqrrJIk+eCDD9KhQ4eFquGLrlNrwoQJSZLtt9++wf7VVlst3/jGN/Lvf/87H374YTp06JBnn302SdK3b98G+/v06ZOWLevHjF588cW8//776dGjR4YNG9bgNW+//XaS5IUXXlio+1pcCVcBAAAAAAAAACykqk8DI021r7mNHj06++23X9q3b58BAwakZ8+eKSsrS5s2bXLFFVfk1VdfbbD/jDPOyNVXX51f/epXyaehq0GDBuWMM85Iu3btmqSuM888M7/4xS+a5FpNadasWUmSbt26lXx+pZVWSj49Fu+z5p9aVas2sFS9CJPOFvY6C1Prv//978yaNSsdOnTIzJkzkyRdu3ZtsLesrCwrrLBCvbX33nsvSTJp0qRMmjRpgfV+9NFHC3lniyfhKgAAAAAAAACAhdSyS5cm3dfchg4dmjZt2mT8+PFZa621UlNTk1mzZqWioiLXXXddg/3t2rXL6aefntNPPz2TJ0/Offfdl0suuSQXXnhh/vvf/+bSSy/92mqvPZpw/klbtWqDQk2tNtj01ltvlXz+zU+nmi3sFKqv0sLWWruvY8eOSZIZM2Y02FtdXZ133303K6+8coPr77333rnhhhu+gjtYPLRYiD0AAAAAAAAAACRpt/lmadm9e/KZI+HqFApp2b172m3e8Oi2xdErr7yS9dZbL2uttVa99enTp+c///nP57529dVXzyGHHJL7778/7du3zy233FL3XFlZWbKIE5kW1fLLL58kmTZtWoPnao/Ea2obb7xxkuSBBx5IsVis91yxWMwDDzyQJPnmN7/5lbz/othkk02ST499/KzXX389r7zySr7xjW/UBcF69+6dJHnwwQcb7H/00UcbhNjWW2+9VFRU5KmnnkplZeVXdBfNT7gKAAAAAAAAAGAhFcrK0u3kX3764DMBq08fdzv5lyl8Gi5a3PXs2TMvv/xyvelGH3/8cX760582CMy8/fbbee655xpc4/3338/cuXPTpk2burXOnTsnn4Z4viqbbbZZCoVCrr322nz88cd16y+99FIuvPDCr+Q9V1tttfTr1y+TJk3Kn//853rPXXbZZXn++eezww47ZJVVVvlK3n9R7LHHHunYsWP+8pe/1Du2r1gs5qSTTkpVVVUGDhxYb39FRUX+/Oc/59///nfdemVlZX796183uH7Lli3zk5/8JK+++mpOOOGEkgGr5557ruQkrCWJYwEBAAAAAAAAABZBxU47JRdekLfOODNVnx6tliQtu3VLt5N/+cnzi4GJEyfWC8/Mb911180vfvGLDB48OIMHD84mm2ySffbZJ5WVlbnzzjtTKBTSu3fvPPvss3WvmTZtWjbZZJP07t07G220UVZeeeW8++67ufnmm1NZWZkTTjihbm+fPn3Stm3bXHDBBXn//ffT5dNjEkuFdL6sHj165IADDsjVV1+dzTbbLDvvvHNmzJiRv//979l5551z4403Ntl7ze/iiy/ONttsk8MOOyy33npr1l9//UyaNCm33HJLunTpkuHDh38l77uoKioqMnLkyBxwwAHZcssts99++6VLly65++67M378+HzrW9/KiSeeWLe/Y8eO+cMf/pCBAwdmiy22yP7775+OHTvmtttuS9u2bbPSSis1eI9hw4bl6aefzh/+8Ifcfvvt2XbbbdO1a9dMmzYtEydOzLPPPptHH300Xbt2/ZrvvukIVwEAAAAAAAAALKKKnXZKhx13zJynxqfq7bfTskuXtNt8s8VqYtUbb7yRK664ouRz2223XX7xi1/kqKOOSnl5eS666KKMHDkynTp1yne+852ce+652W+//eq9plevXhk6dGjuvffe3H333Xn33Xez4oorZtNNN82xxx6bnXfeuW5v586dc8MNN2To0KEZOXJk/vvf/yZNHK5KkssvvzwrrrhirrvuugwfPjzrrLNOLrvssvTo0eMrC1ets846eeqppzJs2LDccccduf3229OlS5cMGjQop556alZdddXMmjXrK3nvRfU///M/6d69e84888zcdNNNmTNnTnr16pVTTjklJ510Ur1pY0ly8MEHp2PHjjn99NNzxRVXpGPHjvne976Xc845p+6Ywfm1bt06Y8eOzZ/+9KdceeWVufHGGzN37tx069Yt66+/fo488sjF4ojExhCuAgAAAAAAAAD4EgplZVluy281dxkN9OrVK8VicaH2FgqFHHHEETniiCOSJDU1NZk1a1YqKioybty4ens7deqUU089NaeeeupCXXvXXXfNrrvuuki1Dxw4cIHTtkpp27ZtLrzwwpLHAJbqwZQpUxr9nvn0OMXPHgtYq6ampt7jz/ZxfqNGjcqoUaMW6j233377BX6un/eZ9+3bN3379l2o90iSPffcM3vuuWeD9VK9S5KysrIcfvjhOfzwwxf6PZYkLZq7AAAAAAAAAAAAgMWRcBUAAAAAAAAAAEAJwlUAAAAAAAAAAAAlCFcBAAAAAAAAAACUIFwFAAAAAAAAAABQgnAVAAAAAAAAAABACcJVAAAAAAAAAAAAJQhXAQAAAAAAAAAAlCBcBQAAAAAAAAAAUIJwFQAAAAAAAAAAQAnCVQAAAAAAAAAAACUIVwEAAAAAAAAAAJQgXAUAAAAAAAAAAFCCcBUAAAAAAAAAACzAqFGjUigUMmrUqOYupVltv/32KRQKzV3G1064CgAAAAAAAABgKTJlypQUCoV6v8rLy7Pyyitn3333zVNPPdXcJTZa7T0OHDiwuUthESyJQbWWzV0AAAAAAAAAAABNb4011siPfvSjJMlHH32U8ePHZ/To0fnHP/6Ru+++O9tuu21zlwiLPeEqAAAAAAAAAIAvqVgsZtK7k7LBChssdkemrbnmmhk6dGi9tbPOOiu//OUvc8opp+T+++9vttpgSeFYQAAAAAAAAACAL+m2/9yWA24/ILf957bmLmWhHHrooUmS8ePHN3hu3rx5+f3vf5/tttsuHTp0SIcOHdK3b9/ccsstDfYOHDgwhUIh//nPf3LOOedkrbXWSps2bbL66qvntNNOS2VlZcn3/8tf/pItt9wy7du3T/v27bPllluWPCJu3LhxKRQKGTp0aB555JHstNNO6dSpU92RcquvvnqS5Iorrqh3/OG4cePqrlEsFvPnP/85W2+9dSoqKtKuXbtsvvnm+fOf/1yytvfeey9HHnlkunXrlnbt2mWLLbbI3//+90Xo7v/39ttv54QTTsg666yTtm3bpnPnztlyyy1z3nnnNdh76623pl+/funYsWPatm2b3r1753e/+12qqqrq7Zv/KMTnn38+3/3ud9OpU6csv/zyOeCAA/LOO+8kSR599NHsuOOOqaioyPLLL58f//jH+eijjxbY34ceeijbb799OnTokE6dOmXvvffOyy+/vEj3e/PNN2fHHXfM8ssvnzZt2mTDDTfMeeedl+rq6ro9AwcOzKBBg5IkgwYNqve5ze/DDz/Mqaeemg022CBt27ZNp06dMmDAgDz00EOLVFNTMbkKAAAAAAAAAOBLqKqpyvBnhidJRjwzIrusvktatlgyohgtW9avc+7cudl5550zbty4fPOb38whhxySqqqq3H777dljjz1y0UUX5eijj25wnZ/97Gd5+OGHs++++6Z9+/a59dZbc+qpp+Zf//pXbrjhhnp7jznmmFx00UVZeeWV60JeN954YwYNGpQJEybkwgsvbHD9Rx55JGeccUb69euXww8/PK+99lo23njjHHvssbnwwgvTu3fv7LnnnnX7e/XqlXwarPrhD3+Ya665JmuttVZ+8IMfpFWrVrnrrrty6KGH5v/+7//qBZ3mzJmT7bffPhMnTkyfPn2y3Xbb5fXXX89+++2XnXbaaZF6++KLL2aHHXbIm2++mW222SZ77rlnPvroo0yaNClnnHFGTjjhhLq9v/vd73L88cenc+fO+cEPfpDlllsut9xyS44//vg8+OCDuemmmxqEjyZPnpxvf/vb2XzzzfPjH/84Tz31VK699tq8/vrrOeuss7LTTjvlO9/5Tg4//PCMGzcuf/rTn1JTU1MyVPbYY4/lzDPPzM4775zBgwdn0qRJ+fvf/54HH3wwjz32WL7xjW984f3+8pe/zFlnnZWVV145e+21Vzp27JgHH3wwJ554Yh5//PGMHj06SbLnnnvmgw8+yM0335w99tgjG2+8cYNrvffee9l2220zadKkbL311jnyyCMza9as3HzzzenXr19Gjx5d7/P+OiwZf6IBAAAAAAAAABYzYyePzbTZ05IkU2dPzdjJY7P7Grs3d1mf6/LLL0+SbLPNNvXWTzvttIwbNy6//vWvc9xxx6Vjx45p0aJFPvzww+ywww45/vjjs9dee6VHjx71XvfYY4/l2WefzSqrrJIk+e1vf5vvfOc7ufHGG3PjjTdm7733TpI88MADueiii7Leeuvl0UcfTceOHZMkQ4cOzVZbbZU//OEP2WeffdK3b99617/rrrvy5z//uW7iUa2f/exnufDCC7Pxxhs3OPqw9j6vueaaDBo0KJdeemnKy8uTT6dz7bPPPjn//PNzwAEHZLPNNkuSnHPOOZk4cWIOO+ywXHbZZXXXOfDAA7PzzjsvUo8POuigvPnmm7nkkktyxBFH1Htu6tSpdb9/5ZVXctJJJ6Vr16556qmnsuqqq9b1sH///vnHP/6Rv/71rznwwAPrXeOBBx7IBRdckGOPPTb5NEj23e9+N2PGjMnuu++ea665JnvssUeSpLKyMptvvnmuuuqqnHnmmenWrVu9a/3zn/9sUOell16aI488Mscee2xuvfXWz73Xu+66K2eddVYGDBiQG2+8Mcstt1xdTT/96U9zySWX1H0P5g9X7bnnnhk4cGCD69UGvEaOHJkf//jHdetnnnlmNt988xx++OHZeeed06ZNm4X4JJqGYwEBAAAAAAAAABZR7dSqQj6ZKlRIISOeGZGqmqovfO3X5eWXX87QoUMzdOjQnHjiidlhhx1y8sknp1u3bjn33HPr9tXU1OTiiy/OGmuskaFDh9ablNShQ4cMGTIk8+bNy0033dTgPY499ti6YFWStGrVKr/97W+TpN5xf1dccUXyaZiqNliVJMsvv3xOPfXUBvtrbbrppg2CVQvjj3/8Y5ZbbrkMHz68Llj12fquueaauvUrr7wyrVq1ymmnnVbvOgMGDMiOO+640O/7xBNP5Kmnnsq3v/3tHHbYYQ2en79XV199daqqqnL88cfXBauSpHXr1jn77LOTBfRkjTXWyDHHHFP3uFAoZP/990+SbLLJJnXBqiQpLy/PPvvsk6qqqvzf//1fg2utvfbaDeo87LDDstZaa+X222/P22+//bn3+8c//jFJctlll9UFq2prOuuss1IoFOr1+fO88847ue6667LDDjvUC1YlSdeuXXPiiSfm7bffzt13371Q12sqJlcBAAAAAAAAACyi+adWJUkxxcVuetUrr7ySYcOG1Vvr3r17Hnzwway55pp1ay+++GLef//99OjRI6eddlrmzp2b1q1b14WsagM2L7zwQoP3+OykqSTp06dPWrZsmQkTJtSt1f5+++23b7C/X79+SZJnnnmmwXNbbLHFIt1zPj3ib+LEienRo0ddSGl+lZWV9e5n1qxZmTx5ctZff/107969wf6+ffvmnnvuWaj3fuKJJ5L57unzfF5P+vTpkzZt2pTsyUYbbdTgqMCVVlopSUoetVf73BtvvNHgua233jotWtSfzdSiRYtsvfXWeemll/Lss8+mf//+C7yHxx57LMstt1zJIweTpG3btiW/N6U8+eSTqa6uzty5c0tOI3vppZeSTz+37373uwt1zaYgXAUAAAAAAAAAsAjmn1pVTLFuvXZ61S6r75KWLZo/kjFgwIDccccdyacBqSuuuCInnXRSvve97+WJJ55I+/btkyTvvfdekmTSpEmZNGnSAq/30UcfNVj77DFzSVJWVpYVVlghM2fOrFubNWtWWrRokS5dupS8RqFQyKxZsxbq+l/k/fffT7FYzLRp0xqEy+ZXez+179u1a9eS+xalhtp7/uzxiaXUvm+p6xcKhXTr1i3Tpk1r8FxFRUWDtZYtW37hc7Whsvkt6N5q1+f/DEt57733UlVVtVB9/iK138OHH344Dz/8cKOv11QcCwgAAAAAAAAAsAhqp1bNH6zKZ6ZXLW66dOmSE044ISeffHKef/75/PrXv657rjaQs/fee6e6ujrvv/9+qqurUywW6/36y1/+0uC6b731VoO16urqvPvuu/WO/6uoqEhNTU3JY+ZmzJiRYrFYMhj02QlNC6P2OptttlmDe5j/13333Vdv/4wZM0per9Q9LkinTp2SBUyJWlCdpa5fLBbz1ltvlexJU1rQvdWuz/8ZllJRUZEVVljhc/s8efLkhaql9l6PP/74z71e7TGSXxfhKgAAAAAAAACAhTT/1KpSaqdXVdVUfe21LYyTTz45PXr0yIgRIzJlypQkyXrrrZeKioo89dRTJacbfZ4HH3ywwdqjjz6aqqqqbLLJJnVrtb8fN25cg/21a6WOtFuQsrKy5NMg12d16NAh6623Xp5//vl88MEHX3itioqKrL766nn55Zfz5ptvNni+1D0uyLe+9a0kqQtufZ7P68njjz+ejz/+eJF68mU8/PDDqampqbdWU1OTRx55JIVCIb179/7c12+55ZZ59913647s+yKf97ltscUWKRQKefTRRxfpHr5qwlUAAAAAAAAAAAtpwowJJadW1aqdXjVhxoSvvbaF0bZt25x00kmprKzMb37zm+TTY+N+8pOf5NVXX82JJ55YMmD13HPPlZzsdOGFF2bq1Kl1j+fNm5df/epXSZKBAwfWrR988MFJkmHDhtU7/m/mzJl1R8rV7lkYyy+/fAqFQl5//fWSzx9zzDGZM2dODjvssJLHyE2ePLkuXJYkBx54YObNm5chQ4bU23fnnXfmnnvuWei6tthii2yxxRZ55JFHMnLkyAbPz3/M3w9+8IO0bNkyv/vd7+pNupo3b15OOumk5DM9/Cr8+9//blDnyJEj8+9//zu77bZbyWMc53fMMcckSQ455JC8++67DZ5/88038/zzz9c97ty5c5KU/Ny6d++efffdN4888kjOPffcFIsN/4w9/vjjmTNnziLcYeM16wGfQ4cObXDm4jrrrJMXXnghSfLxxx/n+OOPz7XXXpu5c+dmwIABGTFixJc6TxMAAAAAAAAAoLF6d+md87Y7L/Oq5y1wT6uyVund5fMn/jSnww8/PGeffXauvPLKnHzyyVljjTUybNiwPP3007noooty2223Zbvttku3bt0ybdq0TJw4Mc8++2weffTRdO3atd61ttpqq/Tu3Tv77bdflltuudx666158cUXs9dee2Xvvfeu27fttttm8ODBueiii7Lhhhtm7733TrFYzI033pipU6fmmGOOybbbbrvQ99C+fftsscUWeeCBB3LggQdmrbXWSosWLXLggQemZ8+eOeKII/LYY4/liiuuyMMPP5z+/funR48eeeutt/LCCy/k8ccfz9VXX51evXolSf73f/83N910U0aOHJlJkyZl2223zeuvv57rr78+u+22W26//faFru2qq65Kv379cuSRR+Zvf/tb+vTpk48//jiTJk3KhAkT6kJIa6yxRs4+++wcf/zx2WijjbLvvvvW6+Eee+yRH/3oRwv9vl/GgAEDcswxx2TMmDHZYIMNMmnSpNx6661ZccUVc+GFF37h63feeeeccsop+c1vfpM111wzO++8c3r27Jl33303L7/8ch588MGcfvrpWW+99ZIkffr0Sdu2bXPBBRfk/fffrwtv1R5TOWLEiLz44ov53//931x11VXp06dPOnXqlNdffz1PPfVUXnrppUyfPj3t2rX7Svsyv2YNVyXJBhtskLvvvrvuccuW/7+kn//857n99tszevTodOzYMUcffXT22muvPPzww81ULQAAAAAAAACwLGtV1ioDeg1o7jIapU2bNvnlL3+ZwYMHZ9iwYbnyyivTunXrjB07NiNHjsyoUaNy0003Ze7cuenWrVvWX3/9HHnkkfnmN7/Z4FoXXHBBRo8encsvvzyvvfZaVlpppQwdOjS//OUvG+z9wx/+kE022SQXX3xxLrvssuTT3Mhpp52WQYMGLfJ9XHXVVfn5z3+e2267LTNnzkyxWMw222yTnj17plAoZNSoUdl1110zcuTI3HbbbZk9e3a6du2atdZaK+edd1769+9fd63lllsu999/f375y1/m73//e55++ulssMEGue666zJz5sxFClettdZaGTduXIYPH57bbrstF1xwQdq3b5+11lqrLkRU67jjjsuaa66Z3/3ud/nrX/+aefPmZe21187555+fY445JoVC6eMnm8pWW22VX//61/n1r3+dP/zhDykrK8uee+6Zc845J9/4xjcW6hqnnXZatt122/zhD3/IPffckw8++CArrLBCVl999QwdOjQ//OEP6/Z27tw5N9xwQ4YOHZqRI0fmv//9bzJfuKpz58555JFH8sc//jHXXXdd/va3v6Wmpibdu3dP7969c8opp2TFFVf8irpRWrOHq1q2bJnu3bs3WJ85c2b+9Kc/5eqrr84OO+yQJPnLX/6S9dZbL4899li22mqrZqgWAACAZVHt+OlSY6gBAAAAYHHTq1evL/x3WUcffXSOPvroemtlZWU5/PDDs//++6eioiItWrT4wvdq0aJFTjrppLpj7L7IoEGDFipItf3223/hPay99tpfGHrad999s++++y5UbZ07d86ll16aSy+9tMFzi3o8X9euXfP73/9+oaY/fe9738v3vve9L9z3eZ/r5/Vr4MCBn1v/Nttsk3Hjxn3h+3/env79+9cLq32eXXfdNbvuuusCn2/btm1OPPHEnHjiiQt1va9as4erXnrppfTo0SNt2rRJnz59cuaZZ2a11VbL+PHjU1lZWa/x6667blZbbbU8+uijCwxXzZ07N3Pnzq17XHtOZ2VlZckzQVk81H42PqMvTw8bTw8bTw+bhj42nh42nh42DX1sPD1sPD1sGmNfGVv3c9c1F/x/+lkw38XG08PG08OmoY+Np4eNp4dNQx8bTw8bTw8bTw+bhj42nh42nh42jdr+VVVVpVgspqamJjU1Nc1d1hJl/r9o+Hm9q92nxw0tbA+bU21di3ONX1ZNTU2KxWIqKytTVla2wH0L+8/bQrEZ/9rt2LFjM3v27KyzzjqZPn16hg0blmnTpuW5557LrbfemkGDBtULSiXJt771rfTr1y9nn312yWsOHTo0w4YNa7B+9dVXf63nLQIAAAAAAAAAzaP2FK1VV101rVq1au5ylko//elPc8011+TZZ5/Naqut1tzlsIgeeuih7L777jnppJPyi1/8ornLaVLz5s3L66+/njfffDNVVVUL3Ddnzpz84Ac/yMyZM1NRUbHAfc06uWqXXXap+/1GG22ULbfcMj179sz111+ftm3bfqlr/vKXv8xxxx1X93jWrFlZddVVs9NOO31uI2helZWVueuuu/Kd73wn5eXlzV3OEkkPG08PG08Pm4Y+Np4eNp4eNg19bDw9bDw9bLyxk8fmrEfPykmdTsrZH5ydX/T5RXZZfZeFeCXz811sPD1sPD1sGvrYeHrYeHrYNPSx8fSw8fSw8fSwaehj4+lh4+lh06jt47e//e1Mnz497du3T5s2bZq7rCVKsVjMhx9+mA4dOqRQKCxwX+33tH379vIYn7GwPWxOtQOKWrduvdR9fh9//HHatm2bbbfd9nP//NeehvdFmv1YwPl16tQpa6+9dl5++eV85zvfybx58/LBBx+kU6dOdXveeuutdO/efYHXaN26dVq3bt1gvby83P8ALQF8To2nh42nh42nh01DHxtPDxtPD5uGPjaeHjaeHn45VTVVGTFxRCrz6Vj+VObiiRdn1zV3TcsWi9X/pV5i+C42nh42nh42DX1sPD1sPD1sGvrYeHrYeHrYeHrYNPSx8fSw8fSwabRs2TKFQiEtWrRIixYtmrucJUrtEXG1/VuQK664IldcccXXWNmSY2F72Jx22GGHNONhd1+pFi1apFAofOE/Txf2n7WL1Sc4e/bsvPLKK1lppZWy2Wabpby8PPfcc0/d8y+++GJee+219OnTp1nrBAAAYNkwdvLYTJs9LcV88i8Ziilm6uypGTt5bHOXBgAAAADA16BZw1UnnHBC7r///kyZMiWPPPJIvv/976esrCwHHHBAOnbsmEMPPTTHHXdc7rvvvowfPz6DBg1Knz59stVWWzVn2QAAACwDqmqqMvyZ4Smk/tjuQgoZ8cyIVNVUNVttAAAAAAB8PZr1DIOpU6fmgAMOyLvvvpsuXbpkm222yWOPPZYuXbokSX7/+9+nRYsW2XvvvTN37twMGDAgI0aMaM6SAQAAWEbUTq36rPmnV+2+xu7NUhsAAAAAAF+PZg1XXXvttZ/7fJs2bTJ8+PAMHz78a6sJAAAA5p9aVXsk4Pxqp1ftsvouadmiWf+vNQAAAAAAX6FmPRYQAAAAFkcTZkzItNnTSgarMt/0qgkzJnzttQEAAAAA8PXx12sBAADgM3p36Z3ztjsv86rnJUmK1cUUny9mSJ8hKZQVkiStylqld5fezVwpAAAAAABfJeEqAAAA+IxWZa0yoNeAuseVlZUZ8/yY7LL6LikvL2/W2gAAAAAA+Po4FhAAAAAAAAAAAKAE4SoAAAAAAAAAAFiMDRw4MIVCIVOmTKlbmzJlSgqFQgYOHPi1vu+yRrgKAAAAAAAAAGApUhu6+bxfH3zwwVdex7hx41IoFDJ06NCv/L3gq9KyuQsAAAAAAAAAAKDprbHGGvnRj35U8rk2bdp87fXQtFZeeeU8//zz6dixY3OXslQTrgIAAAAAAAAAWAqtueaapkYtxcrLy7Puuus2dxlLPccCAgAAAAAAAAAsw/71r39l//33z0orrZQ2bdrkm9/8Zo455pi8++67Dfb++c9/zh577JFevXqlTZs26dy5cwYMGJD77ruv3r6hQ4emX79+SZJhw4bVO5JwypQpSZLtt98+hUKhZE0DBw6stzdJRo0alUKhkFGjRuXWW2/N1ltvnQ4dOqRXr151e+bNm5ff/e532XTTTbPccsulQ4cO6du3b2655ZaF7sfMmTNz9tlnZ7vttkuPHj3SqlWr9OjRIwcddFBeeeWVBvuHDh2aQqGQcePG5U9/+lN69+6d7t27Z9VVV83Pf/7zfPjhh/X21x7bOHDgwEyaNCm77bZbOnXqlPbt22ennXbK+PHjF6rO+a/zWR9++GFOPfXUbLDBBmnbtm06deqUAQMG5KGHHip5rUmTJuW73/1uOnTokI4dO2bXXXfNc889t9A9W5qZXAUAAAAAAAAALBOKxWTOnOau4ou1a5csIHPU5G655Zbsu+++adGiRfbYY4+sssoq+de//pXhw4fnzjvvzOOPP57ll1++bv9RRx2V3r17p3///unSpUumTZuWf/zjH+nfv39uuumm7LHHHsmnwakpU6bkiiuuyHbbbZftt9++7hqdOnVqVM2jR4/OnXfeme9+97v56U9/mlmzZiVJ5s6dm5133jnjxo3LxhtvnEMPPTSVlZW5/fbbs8cee+Siiy7K0Ucf/YXXf/755zNkyJD069cv3//+97PccsvlhRdeyNVXX53bb789Tz/9dHr27Nngdb/73e9yzz33ZN99982OO+6Yhx56KBdccEEee+yxPPDAAykvL6+3/z//+U+23nrrbLrppvnJT36SV199NaNHj862226be++9N1tuueWX6s97772XbbfdNpMmTcrWW2+dI488MrNmzcrNN9+cfv36ZfTo0dlzzz3r9j/33HPZeuutM3v27Oy1115Za6218sQTT2TrrbdO7969v1QNSxPhKgAAAAAAAABgmTBnTtK+fXNX8cVmz06WW67x13n55ZdLHgu48847Z6uttsq7776bAw88MCuuuGIefvjh9OzZMzU1NZk1a1bGjBmTH/7whxkyZEguuuiiutf+3//9X1ZfffV615s+fXo233zznHjiifXCVUlyxRVXZPvtt2/S4wnvuOOO/POf/0z//v3rrZ922mkZN25cTjnllLppWfl0itMOO+yQ448/PnvttVd69Ojxuddfb731Mn369HTu3Lne+n333Zf+/fvn9NNPz8iRIxu87p///GeefPLJbLjhhpk1a1Y6dOiQgw46KFdffXX+8Ic/5Pjjj6+3/8EHH8wvfvGLnHnmmXVrBx98cHbeeeccdthh+de//vWl+jN48OBMmjQpI0eOzI9//OO69TPPPDObb755Dj/88Oy8885p06ZNkuToo4/OrFmz8te//jU//OEP6/affPLJ9WpbVjkWEAAAAAAAAABgKfTKK69k2LBhDX499thjSZIrr7wys2bNyplnntlgEtP++++fTTfdNNdee2299c8Gq5JkpZVWyt57752XXnopr7766ld8V8kee+zRIFhVU1OTiy++OGussUa9YFWSdOjQIUOGDMm8efNy0003feH1O3bs2CBYlST9+vXLBhtskLvvvrvk6w466KBstNFGdY8LhULOOOOMlJWVZdSoUQ32d+rUKb/61a/qrQ0YMCA77rhjJk6cuNDHA87vnXfeyXXXXZcddtihXrAqSbp27ZoTTzwxb7/9dt09vPbaa7n//vuz0UYb1QtW5dNwVWOnjC0NTK4CAAAAAAAAAJYJ7dp9MhVqcdeuXdNcZ8CAAbnjjjsW+HxtyOrxxx/PK6+8kiQpFouZO3duWrdunY8//jjvvPNO3nnnnay44orJp0fZnXnmmbn33nszbdq0zJ07t94133jjjZJH5jWlb33rWw3WXnzxxbz//vvp0aNHhg0b1uD5t99+O0nywgsvLNR7jBs3LhdccEEef/zxvPPOO6mqqqp7rlWrViVf07dv3wZrPXv2zKqrrppJkyZl3rx59V67ySabpH2JUWp9+/bNPffckwkTJmSzzTZbqHprPfnkk6murs7cuXNLTgt76aWXkk/78N3vfjfPPvtskmSbbbZpsLd9+/bZeOONM27cuEWqYWkjXAUAAAAAAAAALBMKhaY5bm9p8d577yVJhg8f/rn7Pvroo6y44op5+eWX861vfSuzZs1Kv379svvuu6eioiItWrTIuHHjcv/99zcIW30VunXr1mCt9l4mTZqUSZMmLfC1H3300Rdef/To0dlvv/3Svn37DBgwIL169Uq7du1SKBQyatSoBU7nKlVX7fqUKVPy4YcfZoUVVlio/Ukyc+bML6z1s2r78PDDD+fhhx9e4L7aPtS+R9euXT+3lmWZcBUAAA0Ui8V6PwEAAAAAgKVPRUVFkmTixInZcMMNk0+P15s1a1ZdaGp+v//97/P+++/nqquuyo9+9KN6zx155JG5//77F+n9a69fVVWVli3rR1g+L1g0/5F/n72XvffeOzfccMMi1fFZQ4cOTZs2bTJ+/PistdZa9Z777DGJ83vrrbcWuF4oFNKhQ4eF3p9PjydcVLV9OP7443Peeed94f7a95gxY8bn1rIsa7EQewAAWMbcMeWOej8BAAAAAIClz5ZbbpkkefTRRxdqf+3RgXvssUe99WKxWHJKUllZWZKkurq65PWWX375JMm0adPqrdfU1NQdV7ew1ltvvVRUVOSpp55KZWXlIr32s1555ZWst956DYJV06dPz3/+858Fvu7BBx9ssPbqq6/m9ddfzwYbbNDgOMEJEyZkdolzKmuvs8kmmyxy7VtssUUKhcJCf6a9e/dOkjz00EMNnps9e3aeeeaZRa5haSNcBQBAPVU1VRk5cWSS5PKJl6eqpuoLXwMAAAAAACx5Bg0alA4dOuRXv/pVyaP05syZk8cee6zucc+ePZMSQZyzzjorzz33XIPXd+7cOUny+uuvl3z/LbbYIkkyatSoeuu/+93vMnny5EW6l5YtW+YnP/lJXn311ZxwwgklA1bPPffcAic0za9nz555+eWX601t+vjjj/OTn/zkc4NbV155Zf71r3/VPS4Wizn55JNTXV2dgQMHNtj/wQcf5Le//W29tX/+85+55557suGGG2azzTb7wlo/q3v37tl3333zyCOP5Nxzzy15Ssnjjz+eOXPmJElWW221bLvttvnXv/6Vv/3tb/X2nXHGGfnggw8WuYaljWMBAQCoZ+zksZk+e3rSKXlj9hsZO3lsdl9j9+YuCwAAAAAAaGJdunTJNddck//5n/9J7969s/POO2edddbJhx9+mDfeeCMPPPBAvv3tb+eOOz456eLII4/MX/7yl+y9997Zd999s8IKK+Sxxx7L008/nd122y233357veuvu+666dGjR6699tq0bt06q6yySgqFQgYPHpyOHTtm0KBBOeecczJ06NA888wzWWONNfLUU0/lueeey3bbbbfIxwwOGzYsTz/9dP7whz/k9ttvz7bbbpuuXbtm2rRpmThxYp599tk8+uij6dq16+deZ/DgwRk8eHA22WST7LPPPqmqqspdd92VYrGY3r17L3Cq1oABA9KnT5/st99+qaioyMMPP5ynnnoqW221VQYPHtxgf9++fXPxxRfn8ccfz1ZbbZUpU6Zk9OjRadu2bS6//PJFuvf5jRgxIi+++GL+93//N1dddVX69OmTTp065fXXX89TTz2Vl156KdOnT0+7du2SJMOHD8/WW2+dgw46KP/4xz+y1lpr5YknnsiTTz6Zvn37lpzItSwxuQoAgDpVNVUZ/szwFPLJWeWFFDLimRGmVwEAAAAAwFJqt912y4QJEzJw4MA899xz+eMf/5jRo0fntddey6BBg/Kb3/ymbu8mm2ySO++8M5tuumluuumm/PnPf06nTp3y8MMPZ/PNN29w7bKystx0003Zaqutcs0112TIkCE55ZRT8v777ydJunXrlvvuuy877rhj7rzzzowcOTKdOnXKY489ll69ei3yvbRu3Tpjx47NpZdemu7du+fGG2/MBRdckAceeCArrbRSLr744nzzm9/8wuscddRRueSSS9K5c+eMHDkyf//737Pddtvl0UcfTadOnRb4uuOOOy4XXnhhnnjiiVxyySWZNm1ajj322Nx5550NjgRMkm984xt5+OGH07Zt2wwfPjy33HJLtt9++zz44IN1RzZ+GZ07d84jjzySc845J61atcrf/va3XHTRRXnssceywQYb5Morr8yKK65Yt3/D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gDyUqwAAAAAAAAAAAPJQrgIAAAAAAAAAAMhDuQoAAAAAAAAAACAP5SoAAAAAAAAAAIA8lKsAAAAAAAAAAADyUK4CAAAAAAAAAADIQ7kKAAAAAAAAAAAgD+UqAAAAAAAAAACAPJSrAAAAAAAAAAAA8lCuAgAAAAAAAAAAyEO5CgAAAAAAAAAAIA/lKgAAAAAAAAAAgDyUqwAAAAAAAAAAAPJQrgIAAAAAAAAAAMhDuQoAAAAAAAAAACAP5SoAAAAAAAAAAIA8lKsAAAAAAAAAAADyUK4CAAAAAAAAAADIQ7kKAAAAAAAAAAAgD+UqAAAAAAAAAACAPJSrAAAAAAAAAAAA8lCuAgAAAAAAAAAAyEO5CgAAAAAAAAAAIA/lKgAAAAAAAAAAgDyUqwAAAAAAAAAAAPJQrgIAAAAAAAAAAMhDuQoAAAAAAAAAACAP5SoAAAAAAAAAAIA8lKsAAAAAAAAAAADyUK4CAAAAAAAAAADIQ7kKAAAAAAAAAAAgD+UqAAAAAAAAAACAPJSrAAAAAAAAAAAA8lCuAgAAAAAAAAAAyEO5CgAAAAAAAAAAIA/lKgAAAAAAAAAAgDyUqwAAAAAAAAAAAPJQrgIAAAAAAAAAAMhDuQoAAAAAAAAAACAP5SoAAAAAAAAAAIA8lKsAAAAAAAAAAADyUK4CAAAAAAAAAADIQ7kKAAAAAAAAAAAgD+UqAAAAAAAAAACAPJSrAAAAAAAAAAAA8lCuAgAAAAAAAAAAyEO5CgAAAAAAAAAAIA/lKgAAAAAAAAAAgDyUqwAAAAAAAAAAAPJQrgIAAAAAAAAAAMhDuQoAAAAAAAAAACAP5SoAAAAAAAAAAIA8lKsAAAAAAAAAAADyUK4CAAAAAAAAAADIQ7kKAAAAAAAAAAAgD+UqAAAAAAAAAACAPJSrAAAAAAAAAAAA8lCuAgAAAAAAAAAAyEO5CgAAAAAAAAAAIA/lKgAAAAAAAAAAgDyUqwAAAAAAAAAAAPJQrgIAAAAAAAAAAMhDuQoAAAAAAAAAACAP5SoAAAAAAAAAAIA8lKsAAAAAAAAAAADyUK4CAAAAAAAAAADIQ7kKAAAAAAAAAAAgD+UqAAAAAAAAAACAPJSrAAAAAAAAAAAA8lCuAgAAAAAAAAAAyEO5CgAAAAAAAAAAIA/lKgAAAAAAAAAAgDyUqwAAAAAAAAAAAPJQrgIA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AAAtQ1nWA7Dpef/99+P222+PJ554IubOnRslJSWxzTbbxFFHHRUHH3xw1uMVlYaGhigpWbUj2dDQEG+99Vb07Nkzk7mKwdy5c+NrX/taPP3007HPPvvEX//61zjuuONi7NixERGx/fbbx6OPPhrdu3fPetSidOutt8bRRx8dHTp0yHoU4FNaunRpTJkypdlz9Oc///nI5XJZj8YmpL6+PkpLS5u2n3nmmVixYkX0798/ysvLM52NTcu8efPimWeeiXnz5kVERLdu3WLvvfeObt26ZT0aAAAAAAAbiJWr2KBee+216NOnT4wYMSIeeuiheOCBByKXy8Wzzz4bgwcPjq9//etRV1eX9ZgtXk1NTXz961+Ptm3bRteuXWPkyJHNVmBauHBh9O7dO9MZW7qf/exnkSRJ3H333dG9e/f40pe+FDU1NfHmm2/Gv/71r+jcuXNccsklWY9ZtL773e/GnDlzsh6jKC1dujRuueWWOPfcc+OGG26If//731mP1OKtWLGi2Wpzr7/+epx77rlx3HHHxc9//vOYNWtWpvMVi4aGhvjpT38aXbp0iQMPPDCGDRsWxxxzTOy5557Ru3fvuO+++7IesegkSRKPPPJI3HTTTXH//fdbFXEtzJ07N/bdd9+orKyMgQMHxqJFi+JLX/pS9O/fPw444IDYZZddYu7cuVmPWdTefPPNOPHEE7Meo8VbunRpfOtb34qtttoqvvrVr8bIkSNj5MiR8dWvfjW22mqrOO6442LZsmVZj1lU5syZE+edd15885vfjDPPPDNmzJiR9UhFYe7cufGHP/whxo4dGytXrmy2b+nSpXHhhRdmNlsxmT59etxyyy1Nx92MGTPi1FNPjRNPPDEefvjhrMcrSrNmzYoHH3ww/vGPf2Q9StGYO3dujBw5Mg466KDo06dP7LzzznHEEUfEzTffvMqq2qze+++/H7/97W/jxBNPjCFDhsThhx8eP/zhD2PChAlZj7ZRWLRoUfzud7/LeowW7/33348nnngiXnrppVX2LV++XIZrYcyYMXHCCSfELbfcEhERd9xxR/Tp0ye22WabOO+887Ieb6Pgtd+a/fKXv4zZs2dnPUbRc669fjjfXjeTJk2K6667LkaMGBEjRoyI6667LiZNmpT1WBsF54lr5/7774+RI0fGk08+GRERDz/8cBx22GHxxS9+MX7zm99kPR5pJbABDRkyJPne976XNDQ0JEmSJP/93/+dDBkyJEmSJHnllVeSXr16Jeedd17GU7Z8P/rRj5Iddtgh+fOf/5zcdNNNydZbb50cfvjhyYoVK5IkSZJ58+YluVwu6zFbtO7duycTJ05MkiRJ/v3vfye5XC556KGHmvZPmDAh2WabbTKcsDhsttlmeb9yuVzSoUOHpm1Wr0+fPsm///3vJEmS5I033kh69eqVdOjQIdlzzz2TTp06JV26dElmzpyZ9Zgt2sCBA5M///nPSZIkyRNPPJFUVlYmn/vc55Jjjjkm2X333ZM2bdokTz31VNZjtng/+9nPkj59+iT33Xdf8uCDDyb7779/cvnllyfTp09PfvGLXySVlZXJAw88kPWYLdqQIUOSd999N0k+fG7Ze++9k1wul3Tu3DkpKSlJdtxxx2TBggVZj9miHXfcccmAAQOSe++9NznmmGOSAQMGJPvtt1/y1ltvJbNnz0722Wef5Pvf/37WYxa1adOmJSUlJVmP0eKddNJJyfbbb5+MGzcuqaura7q9rq4ueeCBB5Iddtgh+c53vpPpjC1d69atm37m/fOf/0w6dOiQbLfddsnXvva1ZMcdd0zatGmTPP/881mP2aJNmjQp6dixY1JVVZW0bt062W677ZJ//OMfTfvnzZvn8bwWqqurk4qKiqRTp05Jq1atkurq6qRz587JIYcckhx00EFJaWlpMmHChKzHbNFOPfXU5L333kuSJEmWLVuWfOUrX0lKSkqSXC6XlJSUJAceeGDTfvJ79tlnkw4dOiT9+vVL9t1336S0tDQ57rjjkmOOOSbp2LFjMmDAgKSmpibrMVu8V199Ndl6662TLl26JD169EhyuVxy+OGHJ3vvvXdSWlqafO1rX0tqa2uzHrOoOVdcs5dffjnZeuutm34G7r///smcOXOa9nt+XrNrrrkmadu2bfLlL3856d69e3LxxRcnm2++eXLxxRcnF1xwQVJVVZX8+te/znrMoufxvGa5XC4pLS1NDjnkkORPf/pT0+9XWHvOtQvD+XZ68+fPT/bdd98kl8slW2+9dbLXXnsle+21V9Nz9r777pvMnz8/6zGLmueVNRs9enRSVlaW9OvXL6mqqkp+//vfJ+3bt0++853vJN/73veS1q1bJ9dee23WY5KCchUbVJs2bZJXXnmlaXvFihVJeXl58s477yRJkiR//etfk169emU4YXHo2bNn8sgjjzRtL1y4MNlrr72SQYMGJcuXL/cifi20atUqeeONN5q227Ztm7z66qtN27Nnz05at26d0XTFo127dsnhhx+e3HrrrU1ft9xyS1JaWppccsklTbexerlcrumk/pvf/GYyYMCApnLGe++9lxxyyCHJsccem/GULVtVVVXTc8vAgQOTH//4x832//znP0/22WefjKYrHt27d08ef/zxpu233noradeuXbJ8+fIkSZLkwgsvTPr375/hhC3fRx/Pp556arLTTjs1lSPffPPNpF+/fskpp5yS8ZQtm/Jzevfcc88nfl1zzTXOE9dCx44dkyeffHK1+5944omkY8eOG3SmYvPRn4lDhw5NjjjiiKZfeNfX1yff+MY3ki996UsZT9myHXLIIcm3v/3tpL6+PqmpqUlOPfXUZPPNN0+ee+65JPHL27XWv3//5Nxzz02SJEluv/32ZLPNNkvOOeecpv1nn312cuihh2Y4YctXUlLS9HgeMWJEstVWWyUPP/xwsnTp0uSJJ55Itt122+Tss8/OeswWbZ999knOP//8pu3f//73yd57750kSZL85z//SXbbbbfkRz/6UYYTFgcf2kxv8eLFn/j197//3XPLGhx11FHJ4YcfnixcuDB59dVXk8MPPzzp3bt3Mnv27CTx/LxWdtxxx+SPf/xjkiRJ8txzzyVlZWXJmDFjmvaPGTMm6devX4YTFgev/dLL5XLJLbfckgwdOjQpLy9PNt988+T0009PXnzxxaxHKxrOtQvD+XZ6X/nKV5L+/fsnM2bMWGXfjBkzkgEDBiRf/epXM5mtWDhPTG+nnXZKfvOb3yRJkiQPP/xw0qpVq2TUqFFN+2+55ZakT58+GU5IWspVbFBbbLFFMmXKlKbtRYsWJblcrunTeTNnzkwqKysznLA4tG7depWVbGpqapL+/fsnBx10UDJz5kxPcGvQs2fP5Jlnnmna/tnPfta0elDyYQP7M5/5TEbTFY9XX3012XPPPZPjjz++2ScnysrKkn/+85+ZzlYsPvqLx2222SYZP358s/1PPvlk0qNHj4ymKw5t27ZNpk+fniRJknTt2jWZNm1as/2vvfZa0q5du4ymKx7t27dPXn/99abt+vr6pKysLJk7d26SfLjqSJs2bTKcsOX76OP5s5/9bHLPPfc02//QQw8lvXv3zmi64qD8nF7jpxpzudxqv5wnrllVVVXy7LPPrnb/pEmTkqqqqg06U7H56M/EHj16NCvwJh/+Iq179+4ZTVccNttss+Tll19udttll12WbLbZZsmkSZP88nYtVVVVNT2XNJ7fNBbUkiRJXnzxxaRr164ZTtjyffTxvMsuuyS33XZbs/333HNPssMOO2Q0XXFo3br1Kufa5eXlybx585IkSZLx48cnW2yxRYYTFgcf2kyv8VxwdV/OFdesS5cuyQsvvNC03dDQkJxyyilJz549k9dff93z81po3bp1UxktSZKksrKy2eqcr776qg8yrAWv/dL76DnO/Pnzk8svvzzZcccdk5KSkmTPPfdMfvOb31hZcg2caxeG8+302rVr1+zY+7jJkyf7HcEaOE9M7+PnOOXl5c0Ku7NmzfI7liJXkvVlCdm0HHrooTF8+PCYMWNGzJo1K0455ZTYbbfdon379hER8cYbb0SXLl2yHrPF69mzZ0yfPr3Zbe3bt4/x48fH+++/H0cffXRmsxWL3XbbLSZOnNi0/d///d/RqVOnpu0nnngiPve5z2U0XfHYbrvt4qmnnopu3brFbrvt1nQNYT6dXC4XERHLly+P7t27N9u35ZZbxsKFCzOarDjsvffecd9990VExLbbbhvPP/98s/3Tpk1r9vgmv1133TVuv/32pu0777wz2rVrF926dYuIiIaGhqisrMxwwuLQ+HhetGhRbLvtts32bbfddjFnzpyMJisOXbp0iblz5zZt/+AHP2j2+F20aFG0bds2o+mKQ/fu3eOuu+6KhoaGvF/PPfdc1iMWhS996Uvx3e9+N6ZOnbrKvqlTp8app54aRxxxRCazFYtcLtf0M7GkpCQ6dOjQbH/Hjh1j0aJFGU1XPJYvX95s++yzz45zzjknBg0aFE899VRmcxWbjx6LrVq1anY8tm/fPhYvXpzhdMWhMcN58+at8lq5b9++8eabb2Y0WXH4+DnO/Pnzo66uLqqqqiIiYvvtt4///Oc/GU5YHDp27Bjvvfde0/ayZcuirq4uKioqIiLic5/7XLOcWVX79u3jsssui4cffjjv129+85usR2zx3n///SgrK2vazuVy8atf/SqOOOKIGDhwYLzyyiuZzlcM2rRpE0uXLm3a7ty5c7Rr167Zferq6jKYrLh47VdYXbp0iZ/+9Kcxffr0ePTRR2OnnXaKH//4x6u8V8uqnGsXhvPtdCorK6Ompma1+9977z3vba+B88T0Nt9885g9e3ZERMyZMyfq6urijTfeaNo/e/Zsv6sqcmVrcR8omCuuuCKGDh0aO+20U+RyuejRo0fcfffdTfsXLlwYZ511VqYzFoNBgwbFLbfcEocddliz29u1axcPPPBAHHrooZnNVizuueeeT9y/5557xsCBAzfYPMWsrKwsLr/88hg8eHAMGzYsvvnNbza9EGDtHHzwwVFWVhY1NTXx8ssvxy677NK0b/bs2bH55ptnOl9Ld/HFF8eQIUNi6dKlceyxx8ZPfvKTePXVV6NPnz7x8ssvx/XXXx8jRozIeswW78ILL4zDDz887r333mjVqlU89dRTceWVVzbtHzduXOy+++6ZzlgM/uu//isqKyujtrY2Zs2aFTvvvHPTvnnz5kXHjh0zna+layw/77XXXhEflp8/Svl5zfr16xdTpkyJoUOH5t2fy+UiSZINPlexueGGG2LYsGHRr1+/2GyzzZo+ALJgwYJ49913Y/DgwXHDDTdkPWaLliRJ7LDDDpHL5WLJkiXxwgsvNHv8vvbaa00FXvLbZZdd4qmnnlrl596ZZ54ZDQ0Nceyxx2Y2WzHp1atXvPrqq02l54kTJ0bPnj2b9r/xxht+abYWfvGLX0SbNm2ipKQk5syZ0+wc59///rfy8xocddRRccopp8SVV14ZlZWVcdFFF8XAgQOjdevWERHx8ssvx5Zbbpn1mC1e44c2R48eHZWVlTFixAgf2vyUPv/5z0dErPY9r44dOzpXXIMdd9wxJk+eHH369Gl2e+O54ZFHHpnRZMVjxx13jBdeeKEpw48XBmbMmBG9evXKaLri4bVfeqt7D3u//faL/fbbL66//vq44447NvhcxcS5duE4307nmGOOiRNOOCGuueaaOPjgg5s+xFBTUxMTJkyI4cOHew29Bs4T0xs6dGicdNJJccIJJ8S9994bxx9/fPzkJz+JkpKSyOVycdZZZ8WgQYOyHpMUlKvYoLp06RITJ06MV199NVasWBE77rhjs0/6fPWrX810vmJxwQUXrHbli/bt28eDDz7okykpNf5Sl7V30EEHxXPPPRcnn3xytG3bNkpLS7MeqSicd955zbY//km9++67L/bbb78NPFVx6d+/f1RXV8fw4cPjmWeeiYiISy65JCIitthiizj//PPj9NNPz3jKlu/ggw+OZ555Ju68885YsWJF/PznP29W1j3zzDPjzDPPzHTGlu6EE05o+t9Dhw6NZcuWNdv/f//3f7HbbrtlMFnxUH5O76yzzmr2KfCP22677eKRRx7ZoDMVo8022yyqq6tjxowZMXHixJg3b15ERHTr1i369+8fO+64Y9Yjtni33HJLs+3tttuu2fbTTz9txd01OP744+Oxxx6LU045ZZV9P/3pTyNJkhg9enQmsxWTU089Nerr65u2P/pBhoiI6urqOOiggzKYrHjsv//+8fLLL0dExE477dT0SdxGY8eObfbLH1Z18cUXx9y5c+OII46I+vr66N+/f/zhD39o2p/L5eKyyy7LdMZi4EOb6Q0bNizef//91e7v1q3bKu9T0NzRRx8dt99+exx33HGr7LvhhhuioaHB8/MaXH755Z9YEnjjjTfie9/73gadqRh57ZfemkoCVVVVcfLJJ2+weYqRc+3CcL6d3tVXXx0NDQ3xjW98o9nKpitXroyysrI46aST4qqrrsp6zBbNeWJ6l19+eaxcuTL+9Kc/xYABA+J//ud/4vrrr4+hQ4dGbW1tDBw40Ou+IpdLVAwBVrFo0aK477774vjjj896FOBTWLhwYcycOTMaGhqie/fuPulIi7J06dIoLS2NVq1aZT0KAEDBzJw5MyoqKmKrrbbKepQWb/ny5VFXV7fKh2r4dFb3oU0AgI2R8+21V1NTE1OmTGn2Ibl+/fo1rWQFWVi+fHnU1tY2rbhL8VKuokV5880347zzzovf/va3WY/S4t1///0xadKkGDx4cOyzzz7x8MMPx1VXXRUNDQ3x5S9/Ob773e9mPWJRe/755+Pzn/98s09dsHpLly6NKVOmxNy5c6OkpCS23Xbb2H333V0eMKUkSWTIBtfQ0BAlJSV5b3/rrbeaLe0N68O///3veOGFF6Jv377RqVOneOedd+Lmm2+OFStWxNe+9rVVLr8B68Mvf/nL+OpXvxpbb7111qNsVFasWBFvvfVWbLXVVlFZWZn1OAAAAAAAa2XV35xBhv7zn//E//7v/2Y9Rov361//Oo4++ugYO3ZsHHbYYfGHP/whjjrqqNhyyy2jV69eccYZZ8R1112X9ZgtWk1NzSd+vffee1mPWBQaGhripz/9aXTp0iUOPPDAGDZsWBxzzDGxxx57RO/eveO+++7LesQWb8WKFXHmmWfG/vvvH5dffnnEh5eMaNeuXbRv3z6GDRsWNTU1WY/Zov3whz+Mv//971mPUfRqamri61//erRt2za6du0aI0eObFYwXbhwYfTu3TvTGYvNnDlz4rzzzotvfvObceaZZ8aMGTOyHqnFmzRpUmy77bZx8MEHx3bbbRdTpkyJvfbaK26++eb43e9+F/369XPp47Xw/PPPx8UXXxw33nhjvPPOO8321dTUxIknnpjZbMXirLPOim233TYOPfTQuOOOO2LlypVZj1R0br311pg4cWLEh5/QO+mkk6Jt27axww47RLt27eKUU06JFStWZD1mizZp0qRmz8X3339/DBw4MLbccsvYY4894ne/+12m8xUTPxfTcb5dGM8//3wcf/zxsc0220Tr1q2jbdu2seuuu8YvfvELr/kK5M033/R4Xgvvv/9+PPHEE/HSSy+tsm/58uWeX9ZgwYIFzbanTZsWJ5xwQuyzzz7x1a9+NR599NHMZttYPP/881FaWpr1GEVhzJgxccIJJzRdkvuOO+6IPn36xDbbbOPSTWvppZdeitNOOy1233336N69e3Tv3j123333OO200/L+nKS5XXfdNS666KJ48803sx6l6L3zzjtxxRVXxNFHHx39+/eP/v37x9FHHx1XXnllLFy4MOvxioJznMJaunRp3HLLLXHuuefGDTfcEP/+97+zHqkozJ07N/7whz/E2LFjV3k/cenSpXHhhRdmNhvpWbmKDeree+/9xP0zZ86Mn/zkJ1YLWoOdd945zjjjjDj55JPjkUceicMOOyx++ctfxmmnnRbx4S8yrrjiCif/n6CkpOQTVwRqXDHIsfjJzj777Lj33nvjiiuuiFatWsVFF10Uhx9+eBx55JFx2223xRVXXBH33ntvDBo0KOtRW6zhw4fHHXfcEccee2yMHTs2DjzwwLj//vvj0ksvjZKSkhg5cmQMGTIkrr/++qxHbbEaH8/bbrttnHTSSXHCCSdEt27dsh6r6Jx++ukxbty4uOSSS+Ldd9+Niy++OHbZZZe46667oqKiIubPnx/du3ePhoaGrEdtsdq0aROzZ8+Ozp07x0svvRQDBgyIzp07x+677x4vvvhivPHGGzFx4sT43Oc+l/WoLdahhx4avXr1iquvvjp+/etfx3XXXRdf/OIX46abboqIiBNPPDEWLVoUd999d9ajtljjx4+PI444Irbffvt47733YunSpfHnP/85DjzwwIiImD9/fmyxxRbOcdagpKQkfvvb38Zf//rXGDt2bFRVVcW3vvWt+M53vhO77LJL1uMVhW222SZuv/322HvvveOss86Kv/zlL3H11VdHnz594uWXX46f/vSnMXTo0LjiiiuyHrXFKi0tjblz50aXLl3ivvvui6OOOiq+9a1vxd577x1Tp06NW2+9Ne688844+uijsx61RfNzMT3n2+k98MADcfTRR8dhhx0WrVu3jrvuuitOPPHEaNu2bfzf//1fJEkSTzzxhFxTsgr5mr3yyisxaNCgeOONNyKXy8W+++4bf/rTn6J79+4RfiaulY8+Pz/11FNxwAEHxIABA2KvvfaKadOmxSOPPBITJkyI/fffP+tRi9bzzz8fu+++u/cf1uDaa6+Nn//85zF48OCYOHFifP/7349rrrkmfvzjH0d9fX388pe/jCuvvNIVLj5BdXV1HHXUUfH5z38+Bg8eHF27do348Gfhgw8+GFOmTIl77rknBg8enPWoLVZJSUl06tQp3n333TjkkEPi5JNPjqFDh7ps76f07LPPxuDBg6NNmzZxyCGHNDsWJ0yYEMuWLYsHHngg9thjj6xHbbHynePcfvvtscUWW0Q4x1krO+20UzzxxBPRqVOnePPNN2P//fePRYsWxQ477BCvv/56lJWVxdNPP+0D2J/g2WefjUGDBkVDQ0PU1tbGlltuGX/9619j5513jnAcbhSUq9igGt+Q+6TDTqFlzdq0aRMzZsxoujRTRUVFPPfcc02/6PnXv/4VO++8cyxdujTjSVuuDh06xLnnnht777133v2vvvpqfO9733MsrsEWW2wRd9xxR+y3334REfH222/HjjvuGO+8805UVlbGRRddFNXV1fHUU09lPWqL1bNnz/jtb38bhxxySMycOTO23377uOuuu2Lo0KEREfHggw/GySefHP/617+yHrXFKikpiQcffDDuu++++OMf/xiLFy+OIUOGxMknnxyHHXZY3kvcsaqtt946/vd//zcOOOCAiA8/LXX44YdHx44d49577413333Xif8alJSUxLx586JLly5x1FFHRUNDQ9x1111RVlYWDQ0N8c1vfjOWLFliVb9P0KlTp3jyySejT58+UVtbG61atYqJEyfGXnvtFRERzz33XBx55JHx1ltvZT1qizVgwIA48MAD45JLLokkSeLKK6+Miy66KP785z/HF7/4RS/i19JHH88LFiyIW2+9NW655ZZ45ZVXol+/fnHyySfHN77xjWjfvn3Wo7ZYrVq1ildeeSV69uwZn/3sZ5vKko0ef/zxOO6442L27NmZztmSffQ43G+//WLfffeNyy67rGn/pZdeGvfdd1/TCmHk5+dies6309t9993je9/7XpxyyikRH77O+9GPfhTTp0+P2traGDJkSPTo0aNp5RHy86HN9I4++uiora2NW2+9Nd59990444wz4qWXXopHH300evbs6WfiWvjo8/OgQYOiR48ecfPNNzftP+OMM+LFF1+MCRMmZDpnS/blL3/5E/cvXrw4Hn30UcfhGvTp0yd+8YtfxLBhw2Lq1Kmx1157xejRo+Okk06KiIibb745fvWrX8XkyZOzHrXF6tu3bwwdOnS1q4icf/75cdddd8ULL7ywwWcrFiUlJfHWW2/FpEmT4re//W1UV1fHZpttFscff3ycdNJJ0adPn6xHLApf+MIXom/fvjF69OhVFgVIkiROOeWUeOGFF7z2+wTOcdL76DnOt771rZg1a1aMHTs2OnToEEuWLImjjz46OnfuHLfddlvWo7ZYhx56aPTo0SPGjBkTS5cujZ/97Gdx5513xoMPPhi7776743BjkMAGtMUWWyR//etfV7t/6tSpSUlJyQadqRhttdVWyeOPP54kSZK8/fbbSS6XS/72t7817X/00UeTrbbaKsMJW74DDjggufzyy1e7f9q0aUkul9ugMxWj9u3bJ6+//nrTdn19fVJWVpbMnTs3SZIk+ec//5m0adMmwwlbvtatWyezZ89u2i4vL0/+8Y9/NG3PmjVLhmuQy+WS+fPnJ0mSJCtXrkzuuOOOZPDgwUlpaWmyxRZbJOecc07y6quvZj1mi9e6detk5syZzW6rqalJ+vfvnxx00EHJzJkzPUevwUePxR49ejQ9Vzd67rnnku7du2c0XXFo27ZtMmvWrKbtdu3aNXuemT17dtKqVauMpisOVVVVyWuvvdbstj/+8Y9J27Ztk/vuuy+ZN2+ex/Ja+Ojj+aMef/zx5IQTTkjatm2btG3bNpPZisXWW2+dPPzww0mSJMmWW26ZPPvss832v/TSSzJcg48eh126dEkmT57cbP+MGTOSjh07ZjRd8fBzMT3n2+m1atWq2TlOQ0NDUl5ensyZMydJPnx+6dy5c4YTFodcLpeUlJQkuVxutV8ez5+sS5cuyQsvvNC03dDQkJxyyilJz549k9dff93PxLXw0Z+J3bt3TyZOnNhs/z/+8Y/kM5/5TEbTFYeysrJkyJAhyX/913/l/TryyCMdh2vh4+8pVlZWNntP8dVXX3WuuAatWrVKZsyYsdr9M2bM8B7EGnz8tfOcOXOSSy+9NNl+++2TkpKSpH///snNN9+c6YzFoFWrVsn06dNXu3/69OmOxTVwjpPeRx/P22yzTTJ+/Phm+5988smkR48eGU1XHDbbbLPk5ZdfbnbbZZddlmy22WbJpEmTHIcbAR8tY4Pq169fTJkyZbX717SqFR8YOnRonHTSSXHJJZfE0UcfHccff3z85Cc/iXHjxsUDDzwQP/zhD12GbQ2GDRsWrVq1Wu3+bt26uS79Wth1113j9ttvb9q+8847o127dk2XMmhoaIjKysoMJ2z5evbs2fSJk2effTZyuVxMmjSpaf8zzzwTW265ZYYTFpfy8vL4+te/HuPGjYuZM2fGySefHH/84x/js5/9bNajtXg9e/aM6dOnN7utffv2MX78+Hj//fddcmgt5HK5pk+XlZSURIcOHZrt79ixYyxatCij6YpDjx49YubMmU3bH71ESXx4zfrPfOYzGU1XHCorK+Pdd99tdtuwYcNizJgxccwxx7ik4lpa3eWj99tvv7j11ltjzpw5cc0112zwuYrJN7/5zTj33HPj3XffjeOOOy4uvPDCWLJkSURELFu2LM4///zYZ599sh6zxXvppZfihRdeiNatW+e9NE5dXV0mcxUTPxcLy/n2utlyyy3j5Zdfbtp+/fXXo6GhITbffPOIiNhqq62afkayet27d4+77rorGhoa8n4999xzWY/Y4r3//vvNLtWUy+XiV7/6VRxxxBExcODAeOWVVzKdr1i89957UVNTE61atVrlfa9WrVrFsmXLMputGPTp0ye+8pWvxC233JL364ILLsh6xKLQpk2bZleu6Ny5c7Rr167ZfZwrfrJevXrF3/72t9Xu/9vf/hZbb731Bp2p2Hz8tXP37t1jxIgR8corr8SECRNi2223jR/96EeZzVcsunXr1ux3Ah83adKkpksFkp9znMJofEwvX7682Xuy8eFrmoULF2Y0WfFYvnx5s+2zzz47zjnnnBg0aJCr/GwEXPSWDeqss876xEvVbbfddvHII49s0JmK0eWXXx4rV66MP/3pTzFgwID4n//5n7j++utj6NChUVtbGwMHDmx2uQhWdfLJJ3/i/q5duypXrYULL7wwDj/88Lj33nujVatW8dRTT8WVV17ZtH/cuHGx++67ZzpjS3fKKafEf/3Xf8WYMWNiypQpcdVVV8U555wTM2bMiJKSkvjVr34VP/nJT7Iesyj17Nkzzj///DjvvPPioYceynqcFm/QoEFxyy23xGGHHdbs9nbt2sUDDzwQhx56aGazFYskSWKHHXaIXC4XS5YsiRdeeCE+97nPNe1/7bXXmsqn5PeNb3wjFixY0LR9+OGHN9t/7733Nl0ikPx22223eOSRR6Jfv37Nbv/GN74RSZLECSeckNlsxWRNH/ioqqpa4/nkpu68886Lf/zjH7HNNtvEHnvsEX//+9+ja9euseWWW8acOXNi8803jwcffDDrMVu8gw8+uOl4fPLJJ2PPPfds2jd16tSmS8Wzen4urj/Ot9fe8ccfH9/5znfi3HPPjcrKyrj66qvjyCOPjIqKioiImDZtWvTu3TvrMVu8xg9tDh06NO9+H9pcsx133DEmT568ymWabrjhhoiIOPLIIzOarLjssMMOER+eM06ePLnZe1///Oc/Y4sttshwupavX79+8dxzzzVdvu7jKisrneOshR133DFeeOGFpsfzm2++2Wz/jBkzolevXhlNVxwuvPDCGDZsWDz66KNxyCGHNJVX5s+fHxMmTIhx48a5/NUafNLz7gEHHBAHHHBA1NTUbNCZitGZZ54Z3/3ud2PKlClx8MEHr3Is3nTTTXHVVVdlPWaL5hynMA4++OAoKyuLmpqaePnll2OXXXZp2jd79uymD4eQ3y677BJPPfVUs98JxIeP8YaGhjj22GMzm43CyCVeccJGY/ny5VFbWxvt27fPehQ2Ic8//3zceeedsWLFihg8eLACxjq47bbbYuLEiTFgwIA49thj49FHH42RI0fGsmXL4ogjjohf/OIXUVJiscnV6d27d0yePNmJfUqLFi2KOXPmxM4775x3/3vvvRfPPfdcDBw4cIPPViz+93//t9n2Zz/72fjCF77QtH3RRRfFokWL4uqrr85guo3DsmXLorS01KqIn+Duu++Oxx9/fLWrKt12221x0003+UADG8y4cePivvvui5kzZ0ZDQ0N079499tlnnxg2bFi0bds26/FatNmzZzfbbteuXbPznd/97ncRH5Y2WD0/F9Nzvp1eXV1dnHvuufGHP/yh6bXzdddd17Qi56RJk2L58uWx//77Zz1qi/b3v/89li5dGl/84hfz7l+6dGlMnjzZa5ZPcNlll8Xf//73GDt2bN79p512WowePTrvaol84LHHHmu23b1796ayVUTEddddFytXroyzzjorg+mKw4oVK6K+vj7atGmT9ShF7cknn4y2bdvGbrvtlnf/jTfeGA0NDfGDH/xgg89WTJ566qm4/vrrY+LEiTFv3ryID1cR6t+/f5x++unRv3//rEds0b797W/H9ddf73dSBXDHHXfENddcE1OmTIn6+vqIiCgtLY1+/frF8OHD4+tf/3rWI7ZoznHS+/jKkV/4whdi8ODBTdtnnXVWvPXWW82uZkNzY8aMicceeyx+//vf591/+eWXx+jRo2PWrFkbfDYKQ7kKNhJPPvlk7LHHHn7Z+Cm8//77MWXKlOjUqVPstNNOzfYtX7487rzzTr+oAAAAAAAAYL2rra2Nd955JyIiPvOZz0R5eXnWIwHwIctg0KK8/vrrcdBBB2U9RlEaMmRIvP3221mPUTReeeWV6NOnT+y///6x6667xsCBA2Pu3LlN+xcvXhzf/va3M52xWO26666rLEMNG9rtt9/+iZehJb/3338/nnjiiXjppZdW2bd8+fKmFTJYe//93/8d7777btZjFJW5c+fGH/7whxg7dmysXLmy2b6lS5fGhRdemNlsxeq0005remOOwnjzzTfjxBNPzHoMNkGHH354s9ctrBs/F2kJnCfCxsPzSmHV1dXFG2+8kfUYRcmxSEvgOEynvLw8/l97dx4dRZm3ffzqDoQlCwERSBASEMREGEJQmIADIkvYBJRNQBgRVCIMyKLoOKwqi8BkBgPqSKI4igsqw6IIyPLwACJjNAFlESRsKkGEgIQ1Sb1/vNiahwTSqe6urvD9nMMZ6TvHc/mbqyrVyd1V4eHhCg8PZ2MVAPgZNlfBr5w5c+aKWyujeLgJnXvGjx+vhg0b6tixY9qzZ49CQkLUsmVL3rh7wIEDB3Tp0iWrY5Qau3btUt26da2OYTuPPvqosrKyrI5hK2w69Y5p06bpxIkTVsewjf/+97+KiYnR8OHD1atXL91222365ptvXOtnzpy54hbVuLY333xTp0+ftjpGqXLixIkrHgUK92RkZCggIMDqGLazceNGnTt3zuoYtsd50bP4oFzJcJ1YMhkZGXruuec0f/78K35xe/r0aTY/FwMz9Dy+r3jWN998ozp16lgdw5boovs+/vhjDR06VE8++aR27dpVYO3kyZNc45QAPfQ8rrfNY4bFw3Wid/H7PvsrY3UAXF/mzp171XXuvARf2bJliz799FNVrVpVVatW1fLly/XYY4/pT3/6k9avX6+goCCrIwKSpIsXL+rgwYNWx7AdNpy679dNp1988YWys7P1+OOPq2XLltqwYYNq165tdTzboovu+etf/6p7771XCxYsUE5OjsaPH6/WrVtrzZo1atKkidXxbIseum/ZsmVXXd+/f7/PspRmdBNWoXuexQflSoYeum/16tW65557VL9+ff3yyy+aOHGiFi9erDZt2kiX78S7cOFCpaamWh3VbzFD7+B4hr+gi+5ZtGiRBg0apI4dO2rPnj168cUXtWDBAg0YMEC6/HNZrnHcRw89j+tt85jhtXGd6H38vs/+2FwFn3r88ccVHh6uwMDAQtf/76NfUHyvvPKKqlevbnUM2zh37pzKlPntFOhwOPTSSy9pxIgRat26tRYtWmRpPjv705/+pAoVKlgdwzbGjBlz1fWffvrJZ1lwfWPTKfxBWlqa5s2bJ6fTqZCQEM2fP1+1a9dW27ZttWrVKjb6wWd69Oghh8Nx1R8KOxwOn2aym/vuu++q66dOnWKGJRAZGcmjIeBzfFAO/mLy5MkaN26cnn/+eRmGoVmzZqlbt25avHixOnbsaHU8W2CG8AdxcXFXXecunfCVWbNm6e9//7tGjhwpSXrvvff00EMP6fz58xoyZIjV8XAd4XrbPGZoHteJ5vH7vtLPYbCFGD5Up04dzZw5U3369Cl0PT09XU2bNlVeXp7Ps5UGGzZsUPPmzdnYUgzNmjXTX/7yFw0cOPCKtREjRuitt97S6dOn6SK8LiAgQLGxsQoNDS10/cyZM/ryyy/pops2bdqkO+64Q+XKlbM6im2Ehobq888/V3R0dIHXR4wYoaVLl2rRokW666676KKbDh8+rJo1a8rp5GncxVGlShVt2LBBf/jDHwq8Pnv2bD3//PNKTU1Vr1696CG8rmbNmpo/f766d+9e6DrvW66t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6NAhRUZGasiQIapTp47VMf0ec/S87OxsLV682DXD3r17q1KlSlbH8msffPCBOnXqpIoVK1odpVTihgrFd/z4ca6nvWTw4MF6/vnnFRERYXUUW7p06ZIOHDigatWq8T2lNDAAH3I6nYX+cTgcBf4XV+d0Oo2srCzDMAwjNTXVKF++vDFx4kTjo48+Mp577jkjKCjIePXVV62O6dfCw8ONzZs3G4ZhGEePHjUcDoexevVq1/qmTZuMmjVrWpjQvoKDg43vvvvO6hi2cebMGWPAgAFGQECAUaZMGaNatWpGtWrVjDJlyhgBAQHGAw88YOTk5Fgd068xQ8/4/feWZcuWGU6n0xg0aJAxb948Y+jQoUaZMmWMDz/80OqYfo0umtezZ0+jdevWxvLly40+ffoYLVu2NO666y7jyJEjxg8//GAkJCQYPXr0sDqmraWnp3O9XQycE807c+aM0atXL8PhcLje59WoUcMICAgwgoODjeTkZKsj2hLX2u7bvXu3ERkZaTidTqNevXrG/v37jaZNmxpBQUFGxYoVjapVqxrffvut1TH92qlTp674k52dbZQtW9b4/PPPXa+haPTQMzIyMozw8HDD6XQaDRs2NA4dOmQ0bNjQCAoKMoKDg43KlSsb27ZtszqmX8vLyzOeeOIJo2LFigV+LutwOIzIyEhj2bJlVkf0e4mJicYvv/xiGIZhnD171ujZs2eBn2u3adPGtY7CtW7d2li8eLFhXP4ZbLly5Yw//OEPRt++fY0mTZoYFStWNLZs2WJ1TL/HHM279957XTP8+uuvjapVqxo33nij0bx5c6N69epGjRo1jJ07d1od0685HA4jNDTUePjhh42tW7daHce23n33XePChQuuv7/44otG7dq1DafTadxwww3GlClTLM1nB06n07j77ruNt956yzh//rzVcWwpIyOj0D9ly5Y1lixZ4vo7ijZz5kzj7NmzhmEYRm5urjF27FgjMDDQcDqdRpkyZYzBgwcbFy9etDomTGBzFXyqZs2aRpcuXYx169YZGzZsMDZs2GCsX7/eCAgIMF577TXXa7g6h8Ph+mVPs2bNjBdeeKHA+vz5840mTZpYlM4eKlasaBw4cMD197Jlyxo7duxw/X3//v1GUFCQRensjV/4uGfIkCFG/fr1jU8++cTIzc11vZ6bm2usWrXKuOWWW4yhQ4damtHf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rZPT6dR///tfLVq0yOqYfi02Nla1atUq8jomIyNDU6ZM8XkuO+KcaM4dd9yhf/7zn0pOTpYk/fOf/9SNN96oG2+8Ubr8y93g4GCLU/o/rrXNi4iI0KFDh1zH7AsvvKBq1aq51n/66SdVrlzZwoT+79cPyr300ktq1qyZZs+erX79+lkdy1booWc0bdpUM2fO1JQpU5SSkqI6deooOTnZtTn/xRdfVMOGDa2O6dcaNWqkt99+W88884wk6b333lNwcLBq1KghXf7ASLly5SxO6f8mTJigihUryul06ocfftBtt93mWvv5558VFBRkaT5/99xzz6lTp07KyclRv379NHbsWO3du1fR0dHas2eP5s6dq6efftrqmH6POZo3YcIEDRo0SGXLltXIkSM1evRo/fzzz64ZTpo0SQMHDrQ6pl8r7EP+5cuX18CBAzVw4EDt27dPr732miXZ7OaTTz5RpUqVuKFCCRU2n/j4eMXHx2vu3Ll65513XNeMKFxgYKD+8Y9/aOXKlerWrZsee+wxjR8/3upYtvPqq68qODhYgYGBOnHiRIG1X375hWttm3MYv/60GLDAxYsX9dRTT2n9+vX68MMP2cHuIStWrFDZsmWVkJBgdRSUcitXrlSPHj0UFxenhIQEVa9eXZKUlZWlNWvWKC0tTUuXLqWLV3Hy5En1799fq1atUuXKlV0/YD927Jiys7OVkJCgRYsWcYeCq2CGnvF/P50XHBysG264wfX3N954Q5L4hM9V0EXPOHDggNLS0tS0aVNFRUUpKytL8+bN09mzZ9WlSxe1adPG6oh+bdq0abp06ZImTZpU6Prhw4c1ceJEfrh5DZwTzfvyyy/Vvn17BQYGKjAwUEePHtXChQt1//33S5LmzZunbdu2aeHChVZH9Vtca3vGsGHDdPvtt2vo0KGFrs+YMUP/+7//q48++sjn2exo586d6t+/v2JiYrR48WJlZGSwya8Y6KFn/Pe//1WnTp108uRJ3XDDDVq/fr2GDBmigwcPyul06uTJk1q+fLnatm1rdVS/tXbtWnXp0kWNGzdW+fLltWXLFs2aNUuPP/64JGn27NlauXKl1q5da3VUv/Xrnft+NWDAgALH9nPPPadPP/1UGzZssCihPXz22WcaM2aMPv/88wKvR0REuJ44gGtjjuZ98MEHevzxx/XDDz/o978uLVeunIYNG6bZs2crICDA0oz+zOl06ujRowU2jcN9TmfBB009++yzro3QkpSSkqJ58+bpyy+/tCCdPdBFz8rKytLgwYN15swZffbZZ7zvK6aoqKgC14mjRo1yXWfr8gcP33nnHX322WcWJYRZbK4CcF06fvy4qlatanUM22vcuLG6d++uqVOnFro+efJkffjhh9q+fbvPs9nN7t27C70jwa233mp1NNtghvAXdBEA/r8ff/xRK1as0IULF3T33Xfzgzg3ca3tG5mZmSpfvnyBR7Th6vignOfRw+LLycnR7t271aBBAwUHB+v8+fN66623dO7cObVv314NGjSwOqLfy8jI0HvvvacLFy4oISFB7du3tzpSqbJ//34FBgbqpptusjqKLfz000/av3+/8vPzFR4e7nr8ENzDHM3Jy8vTl19+WWCGTZs2VUhIiNXR/N7BgwdVu3Zt7qrkZdxQ4dp+/TAXdwXyrLlz52r9+vV68cUXubbxgK1bt6pcuXJXPPUC9sHmKliuUaNG+vjjj1WrVi2ro9gac3RPQECAWrduraFDh6pnz55ccJVQhQoVlJ6eXuQPL/fs2aPY2FidO3fO59kAlMzRo0f1+eefF9gY1Lx5c9djIgBfoIcAwLW2Nx05ckQRERFXfEIc8CV6CJQeHM/mMUPPYI7wB/QQAFBa8Z0Nljtw4IAuXbpkdQzbY47uMQxD5cqV0+DBgxUeHq6//OUvSk9PtzqW7URFRV31sQUfffSRIiMjfZqptDl58qTr0UMoGWZYPDk5OXrggQd00003qVevXpo4caImTpyoXr166aabbtLAgQN19uxZq2PaGl28NnroffSweC5duqQnn3xS9erVU7NmzZSamlpgPSsri0dDmEQXr41rbe+JiYnRgQMHrI5hK4ZhKDMzU7m5udLlu1e9++67euONN3T8+HGr49kSPfScu++++4pH+sI9zNAcjmfzmKFnMEf3XLhwocDvVL777js988wzGjhwoP72t78pMzPT0nx2RQ/d98EHH/DzLpOYoWdkZGQoNTVV+/fvlyR98803euyxxzRs2DCtWrXK6ni2sW7dOk2dOlWJiYkaPny45syZo71791odCx7AnatguZCQEGVkZKhu3bpWR7E15uieX5+/7HQ6tXDhQqWmpmr37t2KjY3V0KFDNWDAAIWGhlod0+8tXrxY/fv3V6dOndSuXTtVr15duvwLx7Vr1+qTTz7RokWL1LNnT6uj2lZGRobi4uKUl5dndRTbYobFM3ToUG3cuFEvvvii2rVr59o0kJeXp7Vr1+ovf/mLWrVqpVdffdXqqLZFF6+NHnofPSyeyZMn6+WXX9a4ceOUnZ2t5ORk9e3bV6+88op0+VonPDxc+fn5Vke1Lbp4bVxrew/vn92zZ88eJSQk6PDhw6pbt65Wr16t3r17a/fu3TIMQxUrVtSWLVtUv359q6PaCj1037Jlywp9/b777tM///lP193cu3Xr5uNk9sEMvYPj2Txm6BnM0T133XWXRowYoV69emnz5s1q27atGjRooOjoaH377bfas2ePPv30U8XHx1sd1VboofucTqdCQkLUt29fDRkyRM2bN7c6ku0wQ/M+/PBD9enTR2FhYbpw4YKWLFmi3r176/bbb1dAQIA+/fRTvfHGG+rfv7/VUf3WsWPHdM899+iLL76Q0+lUfn6+mjRpou+//14//fSTxowZoxdeeMHqmDCBzVWwXOfOnZWSkqLw8HCro9gac3TPr5urqlWr5nrts88+04IFC7R48WLl5eWpZ8+efJq+GLZs2aK5c+fqs88+K/D4pvj4eI0aNYo3n9dw+vTpq65v375drVu35hePV8EMPaNy5cr66KOP1KJFi0LXN2/erK5du+rkyZM+z2YXdNE8emgePfSM+vXrKykpSV27dpUk7du3T506ddKdd96p1NRUHTt2TBEREczxKuiiZ3Ct7R38wsc9PXr0kGEYeu6555SamqpVq1bplltu0eLFi5Wfn6/evXurUqVK+ve//211VFuhh+5zOp1yOBy62o+zHQ4H31uughl6B8ezeczQM5ijeypVqqQvvvhC9evX11133aW4uDj9/e9/d61PmDBB69ev16ZNmyzNaTf00H1Op1NTpkzRkiVLlJ6erpiYGA0dOlQDBw7UDTfcYHU8W2CG5jVt2lT33XefnnnmGb3zzjtKTEzUmDFjNGHCBEnSnDlz9Oabb+qrr76yOqrfuv/++3XhwgUtXLhQ5cqV07hx43T69GktXLhQ69atU58+fTRhwgSNGjXK6qgoITZXAbguBQQE6McffyywuepXOTk5euedd5SamqrNmzdbkg/Xj19/sFkUwzD4weY1MEPPqFSpktauXavbb7+90PX//ve/ateunU6dOuXzbHZBF82jh+bRQ8+oWLGidu7cqaioKNdr33//ve6++27dcccdeuGFF1SrVi3meBV0Ef5s+vTpSkxMVFhYmNVRbKFatWpavXq1YmNjlZOTo5CQEG3cuFF33nmndHkTYL9+/XikmJvoofs6deqkgIAApaamFvh5TtmyZZWRkaGYmBhL89kBM/QOjmfzmKFnMEf3BAcH64svvtCtt96qGjVqaNWqVWrcuLFr/bvvvlNsbKx++eUXS3PaDT103+9vBpCWlqaUlBS9/fbbOnfunLp166aHH35Y7du3tzqmX2OG5gUHB+vrr79WVFSUDMNQuXLllJaWpkaNGkmS9u/fr8aNG3NOvIpKlSppy5Ytuu2226TLv2+uXLmyjh8/rtDQUL355pt67rnntHv3bqujooTKWB0A15+LFy/qP//5zxWfvG3RooW6d++uwMBAqyPaAnM052r7SoOCgjRkyBANGTLEp5lKixkzZmjYsGG8eSqmkJAQPfPMM0Xepnbv3r169NFHfZ7LTpihZ3Tt2lWPPPKIUlJS1KRJkwJrX331lRITE3XPPfdYls8O6KJ59NA8eugZNWrU0HfffVdgc1XNmjW1fv16tWnTRg8++KCl+eyALnoH19qe8fTTT1sdwVbOnDmjKlWqSJffLwcFBRW4a3atWrWUlZVlYUJ7oofuW7lypZKSknT77bdr/vz5rjtMoviYoXdwPJvHDD2DObqnefPmWr58uW699VbdfPPNysjIKLC5Kj093XUNhOKjh+Y0bdpUTZs21d///nctXrxYqamp6tixo2rXrq3MzEyr49kCMyyZkJAQ/fzzz4qKilJ2drZyc3P1888/u9Z//vlnBQcHW5rR35UrV67ABw2dTqfy8vKUm5srSWrRooUOHDhgYUKYxeYq+NS+ffuUkJCgH374Qc2bN1f16tWly78se/nll3XTTTdp5cqVqlevntVR/RpzNO+1115TpUqVrI5RKk2bNs31XGZcW1xcnCSpdevWha6HhYVddTMgmKGnJCcnq3///mratKkqV67s+hTzsWPHlJ2drYSEBCUnJ1sd06/RRfPooXn00DPuvvtuLVq0SG3bti3wekREhNatW6e77rrLsmx2QRe9g2vtktm5c6eSk5MLfbziiBEjuFPLNUREROjQoUOqXbu2JOmFF14ocMebn376SZUrV7YwoT3QQ88YPXq02rRpowEDBmj58uVKSkqyOpLtMEPzOJ7NY4aewRzNee6559SpUyfl5OSoX79+Gjt2rPbu3avo6Gjt2bNHc+fOZaNQMdBD8wq763P58uU1cOBADRw4UPv27dNrr71mSTa7YIbmtWvXTsOHD9df/vIXvfvuu+rQoYOefvppvfbaa3I4HHriiSdcdy9G4e68805NnDhRCxcuVGBgoP7617+qbt26ro26vHe2PzZXwacSExPVqFEjffXVVwoNDS2wdvr0aQ0aNEjDhw/XqlWrLMtoB8zRvD//+c9WRyi1+CWZe/r3769z584VuV6jRg1NmjTJp5nshhl6RuXKlbVy5Urt3r270B+G3HrrrVZH9Ht00Tx6aB499IwJEyYUeYvumjVr6n/+53+0Zs0an+eyE7roHVxru2/lypXq0aOH4uLi1L17d9eHk7KysrRmzRrFxcVp6dKlSkhIsDqq32rXrp12797t+kF6YmJigfXVq1e7NlSicPTQs2JjY/XFF19o9OjRio2N5dxYAsyw5DiezWOGnsEczYuPj9fKlSs1ZswYff7555Kk559/Xrq8uXzy5MkaNWqUxSn9Gz30jGt9H65Xr56rmygcMzRv9uzZGjhwoIYNG6aWLVvq3Xff1d/+9jfFxMTI4XDo5ptvVkpKitUx/drs2bPVoUMHhYWFyeFwKCgoSIsXL3at79q1i7vh25zD4J0TfKhixYratm2bGjZsWOj6jh071Lx5c509e9bn2eyEOXpHo0aN9PHHH6tWrVpWR7G1kJAQZWRkqG7dulZHAQAAAEoVrrXd17hxY3Xv3l1Tp04tdH3y5Mn68MMPtX37dp9nKy0yMzNVvnz5Ao8KREH00HuWLVum9evX6+mnny5wRzUUHzN0D8ezeczQM5ijZ/3000/av3+/8vPzFR4eXuAR8SgaPfSMgwcPqnbt2oXefQnFwwy9Z//+/Tp79qxuvfVWlSnDfXuu5ezZs9q8ebMuXLigP/7xj6patarVkeBBTqsD4PoSFhZ21WeJHjhwgMcbFANz9I4DBw7o0qVLVsewvZ07d/Lm06QjR44oPz/f6hi2xgw97+TJk3rjjTesjmE7dNGz6GHJ0EPPo4slQxfN41rbfd9++60GDBhQ5Hq/fv20d+9en2YqDX5/PNepU4eNVddAD70nLi5Os2fPZlOQCczQPRzP5jFDz2COnnXjjTeqefPmqlWrlutRyLg2eugZkZGRV2wK4v2ze5ihdxw5ckRRUVFq2LAhG6uKqWLFimrfvr26du2qqlWr0sNShs1V8KmhQ4dq0KBBSkpK0vbt25WVlaWsrCxt375dSUlJevDBB/XII49YHdPvMUf4m9zcXGVkZGjVqlXauXOnduzYwUY1E2JiYq66gRLXxgw979ChQxo8eLDVMWyHLnoWPSwZeuh5dLFk6GLJcK1tTlRUlD766KMi1z/66CNFRkb6NFNpwPHsHnroPTExMTp48KDVMWyNGbqH49k8ZugZzNE7uMZxDz30HrpoHjM0jxmaxwxLF7YYwqemTp2qoKAgzZo1S2PHjnXtIjYMQzVq1ND48eP15JNPWh3T7zFH7/jTn/6kChUqWB3DVvLz8zVx4kTNmzdPp06dKrBWqVIljRgxQlOmTJHTyV5ed/DEXvOYoftOnz591fVffvnFZ1lKE7roHnroHfTQfXTRO+iie7jW9oypU6eqf//+2rBhg9q1a6fq1atLkrKysrR27Vp98sknWrRokdUxbYfj2T300HvoonnM0D0cz+YxQ89gjt7BOdE99NB76KJ5zNA8ZmgeMyxd2FwFnxs/frzGjx+vzMxMHT16VJJUo0YN1alTx+potsIcPe/jjz+2OoLtPPXUU3r99dc1Y8YMJSQkFHjztHr1ak2YMEEXL17UzJkzrY4K4BrCwsKu+kx6wzB4Zj28jh7CX9BF+AOutT2jd+/eqlmzpubOnas5c+YUeP8cHx+vDRs2KD4+3uqYKOXoIVB6cDybxww9gznCH9BDAMD1hM1VsEydOnVUp04dbd68WREREVbHsS3mWHIXL17Uf/7zH3322WcFLvpbtGih7t27KzAw0OqIfu+NN97Qv//9byUkJBR4PSoqSo888ogiIyM1aNAgfuHjpr/+9a+qUqWK1TFsjRm6LyQkRM8884yaN29e6PrevXv16KOP+jyX3dFF99BD76CH7qOL3kEX3cO1tue0aNFCLVq0sDpGqcLx7D566B100Txm6D6OZ/OYoWcwR8/jnOg+eugddNE8ZmgeMzSPGZYuDoN7kcFioaGhSk9PV926da2OYmvM0T379u1TQkKCfvjhBzVv3rzAp8A///xz3XTTTVq5cqXq1atndVS/FhQUpK1bt6pRo0aFrm/fvl0tRRNErQAAJqhJREFUWrTQmTNnfJ4NgHvatGmjTp06FflY2YyMDDVp0kT5+fk+z4brBz2Ev6CL8Adca3vPjBkzNGzYMIWFhVkdBdcxegiUHhzP5jFDz2CO8Af0EABQWjmtDgCwv88zmKN7EhMT1ahRI2VlZWnDhg1699139e6772rDhg3KysrSbbfdpuHDh1sd0+/dddddGjdunI4fP37F2vHjxzV+/HjdddddlmSzk507d+qxxx5TkyZNFB4ervDwcDVp0kSPPfaYdu7caXU8W2CG5vXv31/ly5cvcr1GjRqaNGmSTzPZEV00hx56Bj00jy56Bl00h2tt75k2bZpOnDhhdQxb4Xj2PHpYMnTRPGboeRzP5jFDz2CO7uOc6Hn0sGToonnM0DxmaB4zLN24cxUsFxISooyMDO64ZBJzdE/FihW1bds2NWzYsND1HTt2qHnz5jp79qzPs9nJ4cOH1blzZ+3evVuNGjUqcAewHTt2KCYmRitWrFCtWrWsjuq3Vq5cqR49eiguLk4JCQkFZrhmzRqlpaVp6dKlVzwOBr9hhvAXdBH+gB7CX9BF87jW9h7eP7uH49k76KH76KJ5zNA7OJ7NY4aewRzdwznRO+ih++iieczQPGZoHjMs/dhcBcstWrRI3bt3V1BQkNVRbI05uiciIkL/+te/1LVr10LXly9frkcffVQ//PCDz7PZTX5+vlatWqWtW7fq6NGj0uW7OcTHx6tDhw5yOrlJ4tU0btxY3bt319SpUwtdnzx5sj788ENt377d59nsghl6z5EjRxQREcFxXEx00TvooXvooffQRffQRc/gWts7+IWPezievYMeuo8umscMvYPj2Txm6BnM0T2cE72DHrqPLprHDM1jhuYxw9KPzVWw1IULFyRJ5cqVszqKrTFH902cOFHJycmaMGGC2rZtW2D38Nq1a/Xcc8/pL3/5iyZPnmx1VJRyFSpUUHp6uho0aFDo+p49exQbG6tz5875PJtdMEPvCQ0NVXp6Oj8MKSa66B300D300HvoonvoIvzZ4cOHVbNmTTanFRPHs3fQQ/fRRfOYoXdwPJvHDD2DObqHc6J30EP30UXzmKF5zNA8Zlj68Z0NPrdmzRp17txZlStXVsWKFVWxYkVVrlxZnTt31qeffmp1PNtgjuZMnTpV48eP16xZsxQbG6uIiAhFREQoNjZWs2bN0vjx49lY5QE5OTnauHGj1TH8WlRUlD766KMi1z/66CNFRkb6NJPdMEPvYQ++e+iid9BD99BD76GL7qGL3se1tntyc3OVkZGhVatWaefOndqxY4cuXbpkdSxb4Hj2HHpoDl00jxl6DsezeczQM5hjyXFO9Bx6aA5dNI8ZmscMzWOGpV8ZqwPg+rJw4UINHTpUvXr1UlJSUoG7Ba1evVqdO3dWSkqKBg4caHVUv8YcPWP8+PEaP368MjMzCzxio06dOlZHKzX27dunNm3aKC8vz+oofmvq1Knq37+/NmzYoHbt2l1xF7VPPvlEixYtsjqmX2OG8Bd0Ef6AHsJf0EXv41q7ePLz8zVx4kTNmzdPp06dKrBWqVIljRgxQlOmTOGT9VfB8WwePfQMumgeMzSP49k8ZugZzNE8zonm0UPPoIvmMUPzmKF5zPA6YAA+VL9+fSM5ObnI9Xnz5hn16tXzaSY7Yo7esWnTJuP8+fNWxyhV0tPTDafTaXUMv7d582ajb9++Ru3atY3AwEAjMDDQqF27ttG3b19jy5YtVsezBWboHdOmTTNOnjxpdQxboYueRw/dRw+9gy66jy56F9faxfPEE08YN954o/Hyyy8bmZmZxtmzZ42zZ88amZmZxiuvvGJUq1bNePLJJ62O6fc4ns2hh55DF81jhuZwPJvHDD2DOXoG50Rz6KHn0EXzmKF5zNA8Zli6OQyebQAfKl++vDIyMnjWqEnM0TtCQ0OVnp6uunXrWh3FNqpUqXLV9by8PJ05c4ZP0wMAAABu4lrbM2rUqKGFCxcqISGh0PVVq1Zp0KBBysrK8nk2XD/oIVB6cDybxww9gznCH9BDAMD1hPswwqduu+02paSkFLmempqqmJgYn2ayI+boHew1dd+FCxf00EMPKSkpqdA/Y8eOtTqiLc2YMUPZ2dlWx7A1ZlgyO3fu1GOPPaYmTZooPDxc4eHhatKkiR577DHt3LnT6ni2RBfdRw89jx6WDF30PLroHq61PeOXX35RREREkevh4eHKycnxaabSgOPZPfTQe+iieczQPRzP5jFDz2CO3sE50T300HvoonnM0DxmaB4zLF24cxV8asOGDeratavq1q1b6LNG9+/fr48++kitWrWyOqpfY47eERISooyMDO5c5YaWLVuqT58+GjVqVKHrGRkZiouL49P0buIuauYxQ/etXLlSPXr0UFxcnBISEgp8b1mzZo3S0tK0dOnSIj+JhsLRRffQQ++gh+6ji95BF93DtbZndOnSRbm5uXrrrbdUtWrVAmvHjx/XwIEDFRAQoBUrVliW0Y44nt1DD72HLprHDN3D8WweM/QM5ugdnBPdQw+9hy6axwzNY4bmMcPSpYzVAXB9ueuuu/T111/rpZde0tatW3X06FHp8q1DO3XqpGHDhikqKsrqmH6POXrHK6+84vrFGYqnS5cuV91xXaVKFQ0aNMinmUoD9j2bxwzd99RTT2n8+PGaOnXqFWuTJ0/W5MmT9cQTT7CRwE100T300DvoofvoonfQRfdwre0ZL7/8sjp37qzw8HA1atSowGbJHTt2KCYmhl/2lADHs3vooffQRfOYoXs4ns1jhp7BHL2Dc6J76KH30EXzmKF5zNA8Zli6cOcqALj8yA1JKleunNVRAO6i5gHM0H0VKlRQenq6GjRoUOj6nj17FBsbq3Pnzvk8m53RRffQQ++gh+6ji95BF2GV/Px8rVq16ooPJ8XHx6tDhw5yOp1WR7Qdjmf30UPvoIvmMUP3cTybxww9gzl6HudE99FD76CL5jFD85ihecywdGFzFYDr1po1a5SUlKTPPvtMp0+fli7fnjE+Pl5jxoxRu3btrI6I69Thw4dVs2ZN3niawAzdFx0drYcfflhjxowpdP3vf/+7/vWvf2n37t0+z2ZndNE99NA76KH76KJ30EWg9OB4hr+gi+YxQwD4DedE+Au6aB4zNI8ZmscMSxceCwi/kpGRobi4OOXl5VkdxdaY47UtXLhQQ4cOVa9evZSUlFTgdrWrV69W586dlZKSooEDB1od1XZ4fnDJ5Obm6ptvvnF9uufEiROKiYlR2bJlrY5mG8zQnKlTp6p///7asGGD2rVrV+C8uHbtWn3yySdatGiR1TFtgS6WHD30HHpoDl30HLroWVxre15OTo7S0tLUqlUrq6P4PY5n76GH7qGL5jFD7+F4No8ZegZzLD7Oid5DD91DF81jhuYxQ/OYYSlmAH4kPT3dcDgcVsewPeZ4bfXr1zeSk5OLXJ83b55Rr149n2YqLYKDg43vvvvO6hi2kZeXZzzzzDNGWFiY4XA4CvwJCwsz/va3vxl5eXlWx/RrzNBzNm/ebPTt29eoXbu2ERgYaAQGBhq1a9c2+vbta2zZssXqeH6PLnoGPTSHHnoOXTSHLnoH19qel56ebjidTqtj+DWOZ++jh8VDF81jht7H8WweM/QM5nhtnBO9jx4WD100jxmaxwzNY4alH3eugk/dd999V10/deqUHA6Hz/LYFXM079ChQ1d97F/btm01duxYn2bC9empp57S66+/rhkzZighIeGKu6hNmDBBFy9e1MyZM62O6reYoee0aNFCLVq0sDqGbdFFz6CH5tBDz6GL5tBFoPTgeIa/oIvmMUMA+A3nRPgLumgeMzSPGZrHDEs/h2EYhtUhcP0oW7as2rdv7zqZ/F8nTpzQihUreJzdNTBH85o2baq2bdvqhRdeKHR9/Pjx+vTTT5WWlubzbHaXmJioZ599VlWrVrU6ii3UqFFDCxcuVEJCQqHrq1at0qBBg5SVleXzbHbBDL1nxowZGjZsmMLCwqyOYgt00TvooXvooffQRffQRe/gWtt9VapUuep6Xl6ezpw5w/vnq+B4No8eegZdNI8ZmsfxbB4z9AzmaB7nRPPooWfQRfOYoXnM0DxmWPpx5yr4VHR0tHr27KkhQ4YUup6enq4VK1b4PJfdMEfz5syZo65du+qTTz5Ru3btCuweXrt2rfbv36+PPvrI6pi29NJLL1kdwVZ++eUXRUREFLkeHh6unJwcn2ayG2boPdOmTVOfPn3YSFBMdNE76KF76KH30EX30EXv4FrbfRcuXFBiYqIaNWpU6PrBgwc1ZcoUn+eyE45n8+ihZ9BF85iheRzP5jFDz2CO5nFONI8eegZdNI8ZmscMzWOGpR93roJPDR48WBUrVtS8efMKXd+1a5c6d+6szMxMn2ezE+boGQcOHNBLL72krVu36ujRo9LlXcXx8fEaNmyYoqKirI5oK2vXrlVSUpJ27dolXd4E+Pjjj1/18YuQunTpotzcXL311ltX3IHg+PHjGjhwoAICAtgweRXM0HtCQkKUkZGhunXrWh3FFuiid9BD99BD76GL7qGLnsW1dsm1bNlSffr00ahRowpdz8jIUFxcHJ+mvwqOZ/PooWfQRfOYoXkcz+YxQ89gjuZxTjSPHnoGXTSPGZrHDM1jhqUfd66CT7388stXvYiKjo5mQ1AxMEfPiIqK4rm2HjJ//nyNGjVKvXr1cr2R2rp1qzp37qykpCQNHz7c6oh+6+WXX1bnzp0VHh6uRo0aFbiL2o4dOxQTE8OF1jUwQ/gLugh/QA/hL+ii53CtbU6XLl2UnZ1d5HqVKlU0aNAgn2ayG45n8+ihZ9BF85iheRzP5jFDz2CO5nFONI8eegZdNI8ZmscMzWOGpR93rgIAmHbTTTfpqaee0ogRIwq8Pm/ePE2bNk3ff/+9ZdnsID8/X6tWrSr0LmodOnSQ0+m0OqLfY4becfjwYdWsWZP5uYEueh49dB899A666D666Blca8MfcDzDX9BF85ghAPyGcyL8BV00jxmaxwzNY4alG5urYLkuXbpowYIFCg8PtzqKrTFHz+J2te4JDg5Wenq66tWrV+D1vXv3qkmTJjpz5oxl2QC4Jzc3V998802BC/+YmBiVLVvW6mi4jtBD+Au6CH/AtTYAAAAAAABgLbbGwXIbN27UuXPnrI5he8zR89h7WnzdunXTkiVLrnh96dKl6tq1qyWZSoucnBxt3LjR6hi2xgyLJz8/X3/729904403qkmTJurUqZM6deqkJk2aqFq1apowYYLy8/OtjmlrdPHa6KH30cPioYveRxeLj2ttzwsNDdX+/futjlFqcDyXDD30PLpoHjMsGY5n85ihZzBHz+KcWDL00PPoonnM0DxmaB4ztL8yVgcAACvcd999V10/deqUHA6Hz/LYXUxMjJ5//nlt2LBB8fHxkqStW7dq8+bNGjt2rObOnev62pEjR1qY1H727dunNm3acBc1E5hh8Tz11FN6/fXXNWPGDCUkJBR4Hvjq1as1YcIEXbx4UTNnzrQ6qm3RxWujh95HD4uHLnofXSw+rrU9jw/SeBbHc8nQQ8+ji+Yxw5LheDaPGXoGc/QszoklQw89jy6axwzNY4bmMUP7Y3MVLBcZGcljNTyAObpn+fLlat++vesXZf8X39jck5KSosqVK2vnzp3auXOn6/WwsDClpKS4/u5wOPiFD+Cn3njjDf373/9WQkJCgdejoqL0yCOPKDIyUoMGDWIjAbyKHsJf0EX4E661AQAAAAAAAGuxuQqW+/rrr62OUCowR/dER0erZ8+eGjJkSKHr6enpWrFihc9z2VVmZqbVEWyrSpUqV11no9+1MUPP+OWXXxQREVHkenh4uHJycnyayW7oonn00Dx66Bl00Ty66Dlca3veAw88oNDQUKtj2AbHs3fQQ/fRRfOYoXdwPJvHDD2DObqHc6J30EP30UXzmKF5zNA8Zlj6OQzuzwiLnDx5UikpKdq1a5d0ebPLQw89dM0TDwpijiUzePBgVaxYUfPmzSt0fdeuXercuTO/yLiKMWPG6Nlnn1VQUJDGjBlT5Nc5HA7NmTPHp9nsJCgoSImJiWrUqFGh6wcPHtSUKVO46LoKZugZXbp0UW5urt566y1VrVq1wNrx48c1cOBABQQEsPH0KuiiefTQPHroGXTRPLpoDtfa8Cccz/AXdNE8ZggAv+GcCH9BF81jhuYxQ/OYYenH5ipYYuPGjerWrZtCQ0N1++23S5LS0tKUnZ2t5cuXq1WrVlZHtAXmWHIXLlxQXl6eKlasaHUU22rTpo2WLFmisLAwtWnTpsivczgcWrdunU+z2UnLli3Vp08fjRo1qtD1jIwMxcXFcbF1FczQMw4fPqzOnTtr9+7datSokeuxqVlZWdqxY4diYmK0YsUK1apVy+qofosumkcPzaOHnkEXzaOL5nCt7R1r165VUlJSgQ8nPf7442rXrp3V0fwax7Nn0cOSo4vmMUPP4ng2jxl6BnMsGc6JnkUPS44umscMzWOG5jHD0o/HAsISw4cPV58+ffTSSy8pICBAunwrvMcee0zDhw/Xjh07rI5oC8yx5MqVK2d1BNtbv359of8M93Tp0kXZ2dlFrlepUkWDBg3yaSa7YYaeUatWLWVkZGjVqlXaunWrjh49Kklq1qyZpk2bpg4dOsjpdFod06/RRfPooXn00DPoonl00RyutT1v/vz5GjVqlHr16uX6QefWrVvVuXNnJSUlafjw4VZH9Fscz55DD82hi+YxQ8/heDaPGXoGcyw5zomeQw/NoYvmMUPzmKF5zLD0485VsESFChWUnp6uBg0aFHh9z549io2N1blz5yzLZifM0bO6dOmiBQsWKDw83OooAAAAAAAPuummm/TUU09pxIgRBV6fN2+epk2bpu+//96ybLh+0EOg9OB4No8ZegZzhD+ghwCA6wEftYUl4uLiXLcG/b1du3apcePGlmSyI+boWRs3bmRDGgAUIScnRxs3brQ6Bq5z9BD+gi4C9pOdna2OHTte8XqHDh106tQpSzLh+kMPgdKD49k8ZugZzBH+gB4CAK4HbK6CJUaOHKlRo0Zp9uzZ2rRpkzZt2qTZs2dr9OjRGj16tLZv3+76g6IxR6B0Cg0N1f79+62OYWvM0PP27dunNm3aWB3DduiiZ9HDkqGHnkcXS4YuwkrdunXTkiVLrnh96dKl6tq1qyWZ7IzjuWTooefRRfOYYclwPJvHDD2DOXoW58SSoYeeRxfNY4bmMUPzmGHpUsbqALg+9evXT5L05JNPFrrmcDhkGIYcDofy8vIsSGgPzNGzIiMjVbZsWatjAOKJveYxQ/gLugh/QA/hL+girBQTE6Pnn39eGzZsUHx8vCRp69at2rx5s8aOHau5c+e6vnbkyJEWJrUHjueSoYeeRxfNY4Ylw/FsHjP0DOboWZwTS4Yeeh5dNI8ZmscMzWOGpYvD4P9RWODgwYPF/trIyEivZrEz5giUTiEhIcrIyFDdunWtjmJbzNB9VapUuep6Xl6ezpw5w2ZdN9FF99BD76CH7qOL3kEXYaU6deoU6+scDgefKi0GjueSoYeeRxfNY4Ylw/FsHjP0DOboWZwTS4Yeeh5dNI8ZmscMzWOGpQt3roIl2OjjGczRM06ePKmUlBTt2rVLkhQdHa2HHnromr9UA7zlgQceUGhoqNUxbI0Zuu/ChQtKTExUo0aNCl0/ePCgpkyZ4vNcdkcX3UMPvYMeuo8uegddhJUyMzOtjlCqcDyXDD30PLpoHjMsGY5n85ihZzBHz+KcWDL00PPoonnM0DxmaB4zLF24cxV8ZtmyZerUqZPKli2rZcuWXfVru3Xr5rNcdsMcPWvjxo3q1q2bQkNDdfvtt0uS0tLSlJ2dreXLl6tVq1ZWRwQAn2jZsqX69OmjUaNGFbqekZGhuLg47tICr6KH8Bd0ESgdxowZo2effVZBQUEaM2ZMkV/ncDg0Z84cn2bD9YMeAqUHx7N5zNAzmCP8AT0EAFxvuHMVfKZHjx46evSoqlWrph49ehT5dQ6Hg19SXAVz9Kzhw4erT58+eumllxQQECBdfszLY489puHDh2vHjh1WR8R1ZO3atUpKSipwF7XHH39c7dq1szqabTDDkuvSpYuys7OLXK9SpYoGDRrk00x2RhdLhh56Fj0sObroWXQRVvnqq6906dIl1z8XxeFw+DCVvXE8u48eegddNI8Zuo/j2Txm6BnM0fM4J7qPHnoHXTSPGZrHDM1jhqUTd64CcF2rUKGC0tPT1aBBgwKv79mzR7GxsTp37pxl2XB9mT9/vkaNGqVevXopPj5ekrR161a9//77SkpK0vDhw62O6PeYIfwFXYQ/oIfwF3QRKD04nuEv6KJ5zBAAfsM5Ef6CLprHDM1jhuYxw1LMACx2+PBhIy8vz+oYtsccS6ZFixbGkiVLrnh9yZIlRvPmzS3JhOtTzZo1jRdffPGK15OTk42IiAhLMtkNM4S/oIvwB/QQ/oIuAqUHxzP8BV00jxkCwG84J8Jf0EXzmKF5zNA8Zlh6Oa3e3AXExMTowIEDVsewPeZYMiNHjtSoUaM0e/Zsbdq0SZs2bdLs2bM1evRojR49Wtu3b3f9AbwpOztbHTt2vOL1Dh066NSpU5Zkshtm6HmhoaHav3+/1TFshy56Fj0sGXroeXSxZOgiUHpwPMNf0EXzmCEA/IZzIvwFXTSPGZrHDM1jhqUXm6tgOZ5M6RnMsWT69eunw4cP68knn1SrVq3UqlUrPfnkkzp48KD69eunJk2aKDY2Vk2aNLE6Kkq5bt26acmSJVe8vnTpUnXt2tWSTHbDDD2P7y0lQxc9ix6WDD30PLpYMnQRKD04nuEv6KJ5zBAAfsM5Ef6CLprHDM1jhuYxw9KrjNUBAMBKmZmZVkcApMt3n3v++ee1YcOGAs9g3rx5s8aOHau5c+e6vnbkyJEWJvVfzBD+gi7CH9BD+Au6CJQeHM/wF3TRPGYIAL/hnAh/QRfNY4bmMUPzmGHp5TD4+C0sNn36dCUmJiosLMzqKLbGHAF7q1OnTrG+zuFw8EiiIjBDz0tMTNSzzz6rqlWrWh3FVuiiZ9HDkqGHnkcXS4YuAqUHxzP8BV00jxkCwG84J8Jf0EXzmKF5zNA8Zlh6sbkKPrd161YtX75cFy9eVNu2bQt95iiujTmW3LJly9SpUyeVLVtWy5Ytu+rXduvWzWe5AAAAAAAAAAAAAACAf2FzFXzq/fffV9++fVWhQgWVLVtWp0+f1syZMzVu3Diro9kKczTH6XTq6NGjqlatmpxOZ5Ff53A4lJeX59NsuL6MGTNGzz77rIKCgjRmzJgiv87hcGjOnDk+zWYXzNA71q5dq6SkJO3atUuSFB0drccff1zt2rWzOprfooueRw/dRw+9gy66jy4CpQfHM/wFXTSPGQLAbzgnwl/QRfOYoXnM0DxmeH0oY3UAXF+mT5+uhx9+WPPmzVNAQICmT5+uadOmsSnITczRnPz8/EL/GfC1r776SpcuXXL9c1EcDocPU9kLM/S8+fPna9SoUerVq5dGjRolXb5bYufOnZWUlKThw4dbHdEv0UXPooclQw89jy6WDF0ESg+OZ/gLumgeMwSA33BOhL+gi+YxQ/OYoXnM8PrAnavgU8HBwUpPT1e9evUkSRcvXlRQUJC+//57VatWzep4tsEcvePIkSOKiIi46t2sAKC0u+mmm/TUU09pxIgRBV6fN2+epk2bpu+//96ybLh+0EP4C7oIAAAAAAAAAGAHAXzq7NmzCg0Ndf09MDBQ5cuX15kzZyzNZTfM0TtiYmJ04MABq2MAgKWys7PVsWPHK17v0KGDTp06ZUkmXH/oIfwFXQQAAAAAAAAA8FhA+NyCBQsUHBzs+ntubq5ef/11Va1a1fXayJEjLUpnH8zR87iRHwBI3bp105IlS/TEE08UeH3p0qXq2rWrZblwfaGH8Bd0EQAAAAAAAADAYwHhU1FRUdd8lqjD4dD+/ft9lsmOmKN3hISEKCMjQ3Xr1rU6CgBY5rnnntPs2bPVsmVLxcfHS5K2bt2qzZs3a+zYsQXunMgmXngLPYS/oIsAAAAAAAAAADZXAcBl06dPV2JiosLCwqyOAgCWqVOnTrG+jk288CZ6CH9BFwEAAAAAAAAAbK6CT61bt04jRozQ1q1bC3zKW5JOnTqlFi1a6OWXX9af/vQnyzLaAXP0jK1bt2r58uW6ePGi2rZtq44dO1odCQAAAAAAAAAAAAAA+BE2V8GnunXrpjZt2mj06NGFrs+dO1fr16/XkiVLfJ7NTpijee+//7769u2rChUqqGzZsjp9+rRmzpypcePGWR0NAHxuzJgxevbZZxUUFKQxY8YU+XUOh0Nz5szxaTZcP+gh/AVdBAAAAAAAAAD8XhmrA+D6kpGRoZkzZxa53qFDB82ePdunmeyIOZo3ffp0Pfzww5o3b54CAgI0ffp0TZs2jc1VAK5LX331lS5duuT656I4HA4fpsL1hh7CX9BFAAAAAAAAAMDvcecq+FT58uX19ddfq169eoWu79u3T40aNdK5c+d8ns1OmKN5wcHBSk9Pd83w4sWLCgoK0vfff69q1apZHQ8AAAAAAAAAAAAAAPgBp9UBcH2pWbOmvv766yLXt2/frvDwcJ9msiPmaN7Zs2cVGhrq+ntgYKDKly+vM2fOWJoLAAAAAAAAAAAAAAD4Dx4LCJ/q3LmzJkyYoI4dO6p8+fIF1s6dO6dJkyapa9euluWzC+boGQsWLFBwcLDr77m5uXr99ddVtWpV12sjR460KB0AAAAAAAAAAAAAALAajwWET2VlZSkuLk4BAQEaMWKEGjRoIEnavXu35s2bp7y8PH355ZeqXr261VH9GnM0LyoqSg6H46pf43A4tH//fp9lAgAAAAAAAAAAAAAA/oXNVfC5gwcPKjExUatWrdKv9XM4HEpISNC8efNUp04dqyPaAnMEAAAAAAAAAAAAAADwLjZXwTInT57Uvn37ZBiG6tevr8qVK1sdyZaYY8msW7dOI0aM0NatWxUaGlpg7dSpU2rRooVefvll/elPf7IsIwAAAAAAAAAAAAAAsBabqwBcl7p166Y2bdpo9OjRha7PnTtX69ev15IlS3yeDQAAAAAAAAAAAAAA+Aen1QEAwAoZGRnq2LFjkesdOnRQWlqaTzMBAAAAAAAAAAAAAAD/wuYqANelrKwslS1btsj1MmXK6KeffvJpJgAAAAAAAAAAAAAA4F/YXAXgulSzZk19/fXXRa5v375d4eHhPs0EAAAAAAAAAAAAAAD8C5urAFyXOnfurAkTJuj8+fNXrJ07d06TJk1S165dLckGAAAAAAAAAAAAAAD8g8MwDMPqEADga1lZWYqLi1NAQIBGjBihBg0aSJJ2796tefPmKS8vT19++aWqV69udVQAAAAAAAAAAAAAAGARNlcBuG4dPHhQiYmJWrVqlX49FTocDiUkJGjevHmqU6eO1REBAAAAAAAAAAAAAICF2FwF4Lp38uRJ7du3T4ZhqH79+qpcubLVkQAAAAAAAAAAAAAAgB9gcxUAAAAAAAAAAAAAAAAAFMJpdQAAAAAAAAAAAAAAAAAA8EdsrgIAAAAAAAAAAAAAAACAQrC5CgAAAAAAAAAAAAAAAAAKweYqAAAAAAAAAAAAAAAAACgEm6sAAAAAAAAASVFRUfrHP/5hdQwAAAAAAAD4ETZXAQAAAAAAwDYefPBBORwOzZgxo8Dr//nPf+RwOCzLBQAAAAAAgNKJzVUAAAAAAACwlfLly2vmzJk6efKk1VEAAAAAAABQyrG5CgAAAAAAALbSrl071ahRQ9OnTy/yaz744APddtttKleunKKiojRnzpwC68eOHdM999yjChUqqE6dOnrrrbeu+HdkZ2dr6NChuvHGGxUaGqq7775bGRkZXvlvAgAAAAAAgH9icxUAAAAAAABsJSAgQNOmTdOLL76oI0eOXLGelpamPn366P7779eOHTs0efJkTZgwQa+//rrrax588EEdPnxY69ev1/vvv6/58+fr2LFjBf49vXv31rFjx7Ry5UqlpaUpLi5Obdu21YkTJ3zy3wkAAAAAAADrlbE6AAAAAAAAAOCue++9V7GxsZo0aZJSUlIKrP39739X27ZtNWHCBEnSLbfcop07d2rWrFl68MEH9e2332rlypXatm2b7rjjDklSSkqKoqOjXf+OTZs2adu2bTp27JjKlSsnSZo9e7b+85//6P3339cjjzzi0/9eAAAAAAAAWIM7VwEAAAAAAMCWZs6cqYULF2rXrl0FXt+1a5datmxZ4LWWLVtq7969ysvL065du1SmTBk1bdrUtX7rrbcqLCzM9feMjAydOXNGN9xwg4KDg11/MjMz9d133/ngvw4AAAAAAAD+gDtXAQAAAAAAwJZatWqlhIQEPf3003rwwQc9+u8+c+aMwsPDtWHDhivWfr8JCwAAAAAAAKUbm6sAAAAAAABgWzNmzFBsbKwaNGjgei06OlqbN28u8HWbN2/WLbfcooCAAN16663Kzc1VWlqa67GAe/bsUXZ2tuvr4+LidPToUZUpU0ZRUVE+/C8CAAAAAACAP+GxgAAAAAAAALCtRo0aacCAAZo7d67rtbFjx2rt2rV69tln9e2332rhwoVKTk7WuHHjJEkNGjRQx44d9eijj+rzzz9XWlqahg4dqgoVKrj+He3atVN8fLx69Oih1atX68CBA9qyZYueeeYZffHFF5b8twIAAAAAAMD32FwFAAAAAAAAW5s6dary8/Ndf4+Li9N7772nd955Rw0bNtTEiRM1derUAo8OfO211xQREaHWrVvrvvvu0yOPPKJq1aq51h0Ohz7++GO1atVKgwcP1i233KL7779fBw8eVPXq1X3+3wgAAAAAAABrOAzDMKwOAQAAAAAAAAAAAAAAAAD+hjtXAQAAAAAAAAAAAAAAAEAh2FwFAAAAAAAAAAAAAAAAAIVgcxUAAAAAAAAAAAAAAAAAFILNVQAAAAAAAAAAAAAAAABQCDZXAQAAAAAAAAAAAAAAAEAh2FwFAAAAAAAAAAAAAAAAAIVgcxUAAAAAAAAAAAAAAAAAFILNVQAAAAAAAAAAAAAAAABQCDZXAQAAAAAAAAAAAAAAAEAh2FwFAAAAAAAAAAAAAAAAAIVgcxUAAAAAAAAAAAAAAAAAFOL/AXjM5+s//uZnAAAAAElFTkSuQmCC", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "with open('data.json') as file:\n", + " data = json.load(file)\n", + "\n", + "applied_at = datetime.strptime('2024-08-30 12:26:09','%Y-%m-%d %H:%M:%S')\n", + "print(f\"Feature was applied at:{applied_at}\" )\n", + "\n", + "df = pd.DataFrame(data['data'])\n", + "df['date_reported'] = round((pd.to_datetime(df['date_reported']) - applied_at).dt.total_seconds() / 60.0, 2)\n", + "df['date_last_pull'] = round((pd.to_datetime(df['date_last_pull']) - applied_at).dt.total_seconds() / 60.0, 2)\n", + "\n", + "fig, ax = plt.subplots()\n", + "plt.grid(True)\n", + "plt.xlabel('Node')\n", + "plt.ylabel('Minutes')\n", + "\n", + "ax.scatter(df['node'], df['date_last_pull'], c='tab:red', label=\"Last Pull on node\", yunits=minutes, marker=\"o\")\n", + "ax.scatter(df['node'], df['date_reported'], c='tab:green', label=\"Reported complete\", yunits=minutes, marker=\"^\")\n", + "ax.set_title('PinnedImageSet applied timings')\n", + "\n", + "plt.axhline(y=0, color='b', linestyle='-', label=\"Feature applied\")\n", + "\n", + "plt.ylim(top=df['date_reported'].max() + 5)\n", + "plt.ylim(bottom=-2.5)\n", + "\n", + "for tick in ax.get_xticklabels():\n", + " tick.set_rotation(90)\n", + "fig.align_xlabels()\n", + "fig.set_figwidth(30)\n", + "fig.set_figheight(10)\n", + "plt.legend(fontsize=14)\n", + "\n", + "plt.show()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "99d56c0e-8d1a-4f30-94bc-2ad7c8462555", + "metadata": {}, + "outputs": [], + "source": [ + "x = [\"Install Time\", \"Scale Time\"]\n", + "y = [round((datetime.strptime(\"2024-08-30 00:47:02\", \"%Y-%m-%d %H:%M:%S\") - datetime.strptime(\"2024-08-30 00:00:00\", \"%Y-%m-%d %H:%M:%S\")).total_seconds() / 60.0, 2),\n", + " round((datetime.strptime(\"2024-08-30 00:15:37\", \"%Y-%m-%d %H:%M:%S\") - datetime.strptime(\"2024-08-30 00:00:00\", \"%Y-%m-%d %H:%M:%S\")).total_seconds() / 60.0, 2)]\n" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "0161bca8-2032-4d1b-8c63-ee0a3e01f20a", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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oUJHyN15550XXMdms2nhwoWXMhMAAMBFqVDILF68WPXq1VPbtm11mX/YCQAAGKBCITNmzBgtXbpU+/fv1x133KFhw4YpIiKi6qYDAAA4jwp9/PqFF15QRkaGHn74Ya1atUpxcXEaPHiw1q5dyx4aAABQ7Sp8Hhl/f38NHTpU69at0549e3TllVdq7NixSkhIUF5eXtVMCQAAUIZLOiGel5eXbDabLMtSSUnJRdwDAADAdSocMgUFBVq6dKl69uypJk2aaNeuXXr++ed14MABBf/y5XoAAADVoUIH+44dO1bLli1TXFyc7rzzTi1dulS1atWquukAAADOo0JfGunl5aX4+Hi1bdtWNput3PVWrFjhqvkuGV8aCVze+NJI4PJ0sb+/K/TqHz58+HkDBgAAoDpV+IR4AAAAnuKSPrUEAADgToQMAAAwlltDZtasWerQoYNCQkJUu3ZtDRgwQPv27XNaJz8/X+PGjVNkZKSCg4OVlJSkrKwst80MAAA8h1tDJi0tTePGjdMnn3yidevWqaioSDfeeKNOnjzpWOf+++/XqlWrtHz5cqWlpenQoUMaNGiQO8cGAAAeokIfv65qhw8fVu3atZWWlqYuXbooNzdXUVFRWrJkiW655RZJ0t69e9W8eXOlp6fr2muvveA2+fg1cHnj49fA5elif3971DEyubm5kuT4Ru3t27erqKhIPXr0cKzTrFkzxcfHKz09vcxtFBQUyG63O10AAMDlyWNCprS0VBMnTlSnTp3UsmVLSVJmZqb8/PwUHh7utG50dLQyMzPL3M6sWbMUFhbmuMTFxVXL/AAAoPp5TMiMGzdOu3fv1rJlyy5pO5MmTVJubq7jcvDgQZfNCAAAPItHvLF877336r333tPGjRsVGxvrWB4TE6PCwkLl5OQ47ZXJyspSTExMmdvy9/eXv79/tcwNAADcy617ZCzL0r333qu3335bH3zwgerXr+90e/v27eXr66vU1FTHsn379unAgQNKTEx0w8QAAMCTuHWPzLhx47RkyRK98847CgkJcRz3EhYWpsDAQIWFhWnUqFFKTk5WRESEQkNDdd999ykxMfGiPrEEAAAub24NmRdffFGS1LVrV6flixYt0siRIyVJc+fOlZeXl5KSklRQUKBevXpp/vz5bpkXAAB4Fo86j0xV4DwywOWN88gAlycjzyMDAABQEYQM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D2vMmDGKj4+Xv7+/YmJi1KtXL23atMndo0mSNmzYcN7Xns1m04YNG7R161bdfffd7h4XHsCIj18D1W3r1q0q+eULQT/++GMlJSVp3759jjOPBgYGKjg4WMHBwW6eFKiYpKQkFRYW6tVXX1WDBg2UlZWl1NRUHT161N2jSZI6duyojIwMx/UJEybIbrdr0aJFjmURERHy8/Nz04TwNOyRQbXr2rWrxo8fr4cfflgRERGKiYnR9OnTHbdblqXp06c7/mKsW7euxo8f77jvDz/8oPvvv9/x15kkHT16VEOHDtUVV1yhGjVqqFWrVlq6dGmlZ4yKilJMTIxiYmIUEREhSapdu7ZjWVhY2DlvLZ3Z8/T4448rOjpa4eHhSklJUXFxsR566CFFREQoNjbW6QeyJB08eFCDBw9WeHi4IiIi1L9/f33//feVnh0oT05Ojj766CM9+eSTuuGGG1SvXj1dffXVmjRpkn7/+987rXfPPfcoOjpaAQEBatmypd577z2pkq+1goICPfjgg7riiisUFBSka665Rhs2bChzXT8/P8frLCYmRoGBgY49R2cufn5+5+yZtdlsWrBggW666SbVqFFDzZs3V3p6ur755ht17dpVQUFB6tixo7799lunx3vnnXfUrl07BQQEqEGDBpoxY4aKi4sv8V8a1YmQgVu8+uqrCgoK0ubNm/XUU08pJSVF69atkyS99dZbmjt3rhYsWKCvv/5aK1euVKtWrSRJK1asUGxsrFJSUpSRkeH4yy0/P1/t27fX6tWrtXv3bt1999364x//qC1btlTr8/rggw906NAhbdy4UXPmzNG0adN00003qWbNmtq8ebNGjx6te+65Rz/++KMkqaioSL169VJISIg++ugjbdq0ScHBwerdu7cKCwurdXZc/s7sRVy5cqUKCgrKXKe0tFR9+vTRpk2b9MYbb2jPnj164okn5O3tLVXytXbvvfcqPT1dy5Yt0+eff65bb71VvXv31tdff+3S5zdz5kwNHz5cO3bsULNmzfSHP/xB99xzjyZNmqRt27bJsiynk6t+9NFHGj58uCZMmKA9e/ZowYIFWrx4sR577DGXzoUqZgFVbMSIEVb//v0d16+//nrruuuuc1qnQ4cO1iOPPGJZlmU988wzVpMmTazCwsIyt1evXj1r7ty5F3zcfv36WQ888IDT406YMKHC2/nwww8tSdbx48edlk+bNs266qqrnJ5nvXr1rJKSEseypk2bWp07d3ZcLy4utoKCgqylS5dalmVZr7/+utW0aVOrtLTUsU5BQYEVGBhorV279oKzARX173//26pZs6YVEBBgdezY0Zo0aZK1c+dOx+1r1661vLy8rH379l30Ns/3Wvvhhx8sb29v66effnK6T/fu3a1JkyZdcNu//vlxxq9fv5KsyZMnO66np6dbkqyFCxc6li1dutQKCAhwmuHxxx932u7rr79u1alT5yKeNTwFe2TgFq1bt3a6XqdOHWVnZ0uSbr31Vp0+fVoNGjTQXXfdpbfffvuCu3pLSko0c+ZMtWrVShEREQoODtbatWt14MCBKn0ev3bllVfKy+t/L6vo6GjH3iRJ8vb2VmRkpOO57ty5U998841CQkIcfy1HREQoPz//nF3ggCskJSXp0KFDevfdd9W7d29t2LBB7dq10+LFiyVJO3bsUGxsrJo0aVLm/Sv6Wtu1a5dKSkrUpEkTx//Hg4ODlZaW5vL/j5/9c+XM9/Gd/fqLjo5Wfn6+7Ha79MvrLyUlxWmuu+66SxkZGTp16pRLZ0PV4WBfuIWvr6/TdZvNptLSUklSXFyc9u3bp/Xr12vdunUaO3asZs+erbS0tHPud8bs2bP17LPPat68eWrVqpWCgoI0ceLEan97pqzndb7nmpeXp/bt2+uf//znOduKioqq4mnxWxUQEKCePXuqZ8+emjJliv70pz9p2rRpGjlypAIDA89734q+1vLy8uTt7a3t27c73p46w9UHy5/9Wjtz/FxZy85+/c2YMUODBg06Z1sBAQEunQ1Vh5CBRwoMDNTNN9+sm2++WePGjVOzZs20a9cutWvXTn5+fo5PFJ2xadMm9e/fX8OGDZN++UH11VdfqUWLFm56BhenXbt2evPNN1W7dm3HJ6KA6taiRQutXLlS+mWvxo8//qivvvqqzL0yFX2ttW3bViUlJcrOzlbnzp2r+JlUTLt27bRv3z41atTI3aPgEvDWEjzO4sWLtXDhQu3evVvfffed3njjDQUGBqpevXrSL+d42bhxo3766ScdOXJEktS4cWOtW7dOH3/8sb788kvdc889ysrKcvMzubDbb79dtWrVUv/+/fXRRx9p//792rBhg8aPH+84IBhwlaNHj6pbt25644039Pnnn2v//v1avny5nnrqKfXv31+SdP3116tLly5KSkrSunXrtH//fq1Zs0bvv/++VInXWpMmTXT77bdr+PDhWrFihfbv368tW7Zo1qxZWr16dbU997JMnTpVr732mmbMmKEvvvhCX375pZYtW6bJkye7dS5UDCEDjxMeHq5XXnlFnTp1UuvWrbV+/XqtWrVKkZGRkqSUlBR9//33atiwoePtl8mTJ6tdu3bq1auXunbtqpiYGJeehK+q1KhRQxs3blR8fLwGDRqk5s2ba9SoUcrPz2cPDVwuODhY11xzjebOnasuXbqoZcuWmjJliu666y49//zzjvXeeustdejQQUOHDlWLFi308MMPO/aCVua1tmjRIg0fPlwPPPCAmjZtqgEDBmjr1q2Kj4+v8ud8Pr169dJ7772n//73v+rQoYOuvfZazZ071/FHE8xgs34+2hsAAMA47JEBAADGImQAAICxCBkAAGAsQgYAABiLkAEAAMYiZAAAgLEIGQAAYCxCBoDRFi9erPDwcHePAcBNCBkA1S49PV3e3t7q169fhe6XkJCgefPmOS0bMmSIvvrqKxdPCMAUhAyAardw4ULdd9992rhxow4dOnRJ2woMDFTt2rVdNhsAsxAyAKpVXl6e3nzzTY0ZM0b9+vXT4sWLnW5ftWqVOnTooICAANWqVUsDBw6UJHXt2lU//PCD7r//ftlsNtlsNqmct5ZefPFFNWzYUH5+fmratKlef/11p9ttNpv+/ve/a+DAgapRo4YaN26sd999t8qfOwDXI2QAVKt//etfatasmZo2baphw4bpH//4h8585dvq1as1cOBA9e3bV5999plSU1N19dVXS5JWrFih2NhYpaSkKCMjQxkZGWVu/+2339aECRP0wAMPaPfu3brnnnt0xx136MMPP3Rab8aMGRo8eLA+//xz9e3bV7fffruOHTtWDf8CAFyJL40EUK06deqkwYMHa8KECSouLladOnW0fPlyde3aVR07dlSDBg30xhtvlHnfhIQETZw4URMnTnQsW7x4sSZOnKicnBzH9q+88kq9/PLLjnUGDx6skydPavXq1dIve2QmT56smTNnSpJOnjyp4OBgrVmzRr17967ifwEArsQeGQDVZt++fdqyZYuGDh0qSfLx8dGQIUO0cOFCSdKOHTvUvXv3S3qML7/8Up06dXJa1qlTJ3355ZdOy1q3bu3476CgIIWGhio7O/uSHhtA9fNx9wAAfjsWLlyo4uJi1a1b17HMsiz5+/vr+eefV2BgYLXN4uvr63TdZrOptLS02h4fgGuwRwZAtSguLtZrr72mZ555Rjt27HBcdu7cqbp162rp0qVq3bq1UlNTy92Gn5+fSkpKzvs4zZs316ZNm5yWbdq0SS1atHDZcwHgOdgjA6BavPfeezp+/LhGjRqlsLAwp9uSkpK0cOFCzZ49W927d1fDhg112223qbi4WP/5z3/0yCOPSL8cI7Nx40bddttt8vf3V61atc55nIceekiDBw9W27Zt1aNHD61atUorVqzQ+vXrq+25Aqg+7JEBUC0WLlyoHj16nBMx+iVktm3bpoiICC1fvlzvvvuu2rRpo27dumnLli2O9VJSUvT999+rYcOGioqKKvNxBgwYoGeffVZPP/20rrzySi1YsECLFi1S165dq/T5AXAPPrUEAACMxR4ZAABgLEIGAAAYi5ABAADGImQAAICxCBkAAGAsQgYAABiLkAEAAMYiZAAAgLEIGQAAYCxCBgAAGIuQAQAAxiJkAACAsf4fL8kOOH+moRMAAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# plot\n", + "fig, ax = plt.subplots()\n", + "\n", + "bar_colors = ['tab:red', 'tab:blue']\n", + "p = ax.bar(x, y, width=1, edgecolor=\"white\", linewidth=0.7, yunits=minutes, color=bar_colors)\n", + "ax.bar_label(p, label_type='center')\n", + "ax.set_xlabel('Action')\n", + "ax.set_ylabel('Minutes')\n", + "ax.set_title('Install')\n", + "\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "76ada7e7-6a9d-4c23-944e-cbb46314f16d", + "metadata": {}, + "outputs": [], + "source": [ + "x = [\"IPI\", \"PinnedImageSet 3N*\", \"PinnedImageSet 24N\"]\n", + "y = [round((datetime.strptime(\"2024-08-30 08:34:00\", \"%Y-%m-%d %H:%M:%S\") - datetime.strptime(\"2024-08-30 07:31:07\", \"%Y-%m-%d %H:%M:%S\")).total_seconds() / 60.0, 2),\n", + " round((datetime.strptime(\"2024-08-29 13:29:37\", \"%Y-%m-%d %H:%M:%S\") - datetime.strptime(\"2024-08-29 12:02:32\", \"%Y-%m-%d %H:%M:%S\")).total_seconds() / 60.0, 2),\n", + " round((datetime.strptime(\"2024-08-30 19:39:50\", \"%Y-%m-%d %H:%M:%S\") - datetime.strptime(\"2024-08-30 18:37:39\", \"%Y-%m-%d %H:%M:%S\")).total_seconds() / 60.0, 2)]\n", + "\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "39152156-7f23-4f30-aa3f-bea88a8ba9b0", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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qWHDhvL29pbD4dCkSZPUt29fSVJqaqokKTo62m296Oho17K/mjJliiZMmHARqgcAAJ7m0RmZt99+W2+88YbefPNNrV+/XvPnz9dTTz2l+fPnl3nMUaNGKTMz0/XYt29fudYMAAAqDo/OyIwcOVIPP/yw61yXpKQk7dmzR1OmTNGAAQMUExMjSUpLS1NsbKxrvbS0NDVr1qzEMf38/OTn53eRXgEAAPAkj87I5ObmysvLvQRvb285nU5JUkJCgmJiYrR06VLX8qysLK1Zs0atW7e+6PUCAICKxaMzMt27d9ekSZNUs2ZNNWnSRBs2bNC0adM0aNAgSZLNZtPw4cP12GOPqV69ekpISNCYMWMUFxennj17erJ0AABQAXg0yDz77LMaM2aM7rnnHh06dEhxcXH6v//7P40dO9bV58EHH1ROTo7uuusuZWRkqG3btlqyZIn8/f09WToAAKgAbObPt9GthLKyshQaGqrMzEyFhIR4uhzgrJxwOJX4yKeeLgOVzI5J18rHm1+mgTWc7fs3RzQAALAsggwAALAsggwAALAsggwAALAsggwAALAsggwAALAsggwAALAsggwAALAsggwAALAsggwAALAsggwAALAsggwAALAsggwAALAsggwAALAsggwAALAsggwAALAsggwAALAsggwAALAsggwAALAsggwAALAsggwAALAsggwAALAsggwAALAsggwAALAsggwAALAsggwAALAsggwAALAsggwAALAsggwAALAsggwAALAsggwAALAsggwAALAsggwAALAsggwAALAsggwAALAsggwAALAsggwAALAsggwAALAsggwAALAsggwAALAsggwAALAsggwAALAsggwAALAsggwAALAsggwAALAsggwAALAsggwAALAsggwAALAsggwAALAsggwAALAsggwAALAsggwAALAsggwAALAsggwAALAsggwAALAsggwAALAsggwAALAsggwAALAsggwAALAsggwAALAsggwAALAsggwAALAsggwAALAsH08XYGXOvHzZfNmFuABsfMYAgLPBu/B5sPn66JemSZ4uA5VQvZ9+8nQJAGAJBBkA+JsoMgWS09fTZaCSOeE8IX8ff49tnyADAH8Tvl6+av5ac0+XgUpmw20bPLp9vogHAACWRZABAACWRZABAACW5fEgs3//fvXr10+RkZEKCAhQUlKS1q5d61pujNHYsWMVGxurgIAAJScna/v27R6tGQAAVAweDTLp6elq06aNfH199emnn2rLli16+umnFR4e7urzxBNPaObMmXrhhRe0Zs0aBQUFqUuXLsrPz/dk6QAAoALw6FVLU6dOVXx8vObOnetqS0hIcP3bGKMZM2Zo9OjR6tGjhyTp1VdfVXR0tN5//33dfPPNHqkbAABUDB6dkfnwww/VsmVL9e7dW1FRUWrevLnmzJnjWr5r1y6lpqYqOTnZ1RYaGqorrrhCq1atKnHMgoICZWVluT0AAEDl5NEgs3PnTs2ePVv16tXTZ599psGDB2vYsGGaP3++JCk1NVWSFB0d7bZedHS0a9lfTZkyRaGhoa5HfHz8RXglAADAEzwaZJxOpy677DJNnjxZzZs311133aU777xTL7zwQpnHHDVqlDIzM12Pffv2lWvNAACg4vBokImNjVXjxo3d2ho1aqS9e/dKkmJiYiRJaWlpbn3S0tJcy/7Kz89PISEhbg8AAFA5eTTItGnTRlu3bnVr27Ztm2rVqiWdPPE3JiZGS5cudS3PysrSmjVr1Lp164teLwAAqFg8etXSiBEjdNVVV2ny5Mnq06ePvv/+e7300kt66aWXJEk2m03Dhw/XY489pnr16ikhIUFjxoxRXFycevbs6cnSAQBABeDRIHP55Zfrvffe06hRozRx4kQlJCRoxowZ6tu3r6vPgw8+qJycHN11113KyMhQ27ZttWTJEvn7e+6XNgEAQMXg8V+/vv7663X99deXutxms2nixImaOHHiRa0LAABUfB7/iQIAAICyIsgAAADLIsgAAADLIsgAAADLIsgAAADLIsgAAADLIsgAAADLIsgAAADLIsgAAADLIsgAAADLIsgAAADLIsgAAADLIsgAAADLIsgAAADLIsgAAADLIsgAAADLIsgAAADLIsgAAADLIsgAAADLIsgAAADLIsgAAADLIsgAAADLIsgAAADLIsgAAADLIsgAAADLIsgAAADLIsgAAADLKlOQWbJkib799lvX81mzZqlZs2a69dZblZ6eXp71AQAAlKpMQWbkyJHKysqSJG3evFn333+/rrvuOu3atUspKSnlXSMAAECJfMqy0q5du9S4cWNJ0jvvvKPrr79ekydP1vr163XdddeVd40AAAAlKtOMjN1uV25uriTpyy+/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srKyyr0+c+KEsh2Och8XyMrKkrMg19NloJLJysqSI4+/WShfWVlZ8vEq/zhx6n3bGHPafhU6yJTFlClTNGHChGLt8fHxHqkHKJOIcE9XgEoocoanK0BlFDk48oKOf/z4cYWGhpa6vEIHmapVq8rb21tpaWlu7WlpaYqJiSlxnVGjRiklJcX13Ol06tixY4qMjJTNZrvgNaNkWVlZio+P1759+xQSEuLpclBJcFzhQuC4qhiMMTp+/Lji4uJO269CBxm73a4WLVpo6dKl6tmzp3QymCxdulRDhw4tcR0/Pz/5+fm5tYWFhV2UenFmISEh/GFAueO4woXAceV5p5uJOaVCBxlJSklJ0YABA9SyZUu1atVKM2bMUE5OjgYOHOjp0gAAgIdV+CDzr3/9S4cPH9bYsWOVmpqqZs2aacmSJcVOAAYAAH8/FT7ISNLQoUNL/SoJ1uDn56dx48YV+9oPOB8cV7gQOK6sxWbOdF0TAABABVWhb4gHAABwOgQZAABgWQQZAABgWQQZoBK4/fbbXfda8rT27dtr+PDhni4D5YDjClZAkEG5+vMfvttvv102m002m012u12JiYmaOHGiTpw4IUlavny5bDabMjIyPFx1xXemffnMM89o3rx5ni6zRFZ7A5ozZ44uvfRSBQcHKywsTM2bN9eUKVPOev3du3fLZrNp48aNp+139OhRde3aVXFxcfLz81N8fLyGDh3q9rtw8+bNk81mU9euXd3WzcjIkM1m0/Lly93aly9frvHjx591rRxXF8/FOq42bdqkW265RfHx8QoICFCjRo30zDPPlNp/5cqV8vHxUbNmzdzaTx0bjz/+uFv7+++/X+Hukk+QwQXVtWtXHTx4UNu3b9f999+v8ePH68knn/R0WZZ0un0ZGhrKHazLwX/+8x8NHz5cw4YN08aNG7Vy5Uo9+OCDys7OLvdteXl5qUePHvrwww+1bds2zZs3T19++aXuvvtut34+Pj768ssvtWzZslLHeuGFF3To0CHX88LCQj399NMqKio6Yx0cVxfexTyu1q1bp6ioKL3++uv66aef9Mgjj2jUqFF67rnnivXNyMhQ//791alTpxLH8vf319SpU5Wenl7udZYnggwuKD8/P8XExKhWrVoaPHiwkpOT9eGHH3q6LEs63b7861cA7du317Bhw/Tggw8qIiJCMTExxT6p22w2vfzyy/rnP/+pwMBA1atXr9j/zY8//qhrr71WwcHBio6O1m233aYjR464lufk5Kh///4KDg5WbGysnn766TO+jtq1a+uxxx5zrVerVi19+OGHOnz4sHr06KHg4GBdcsklWrt2rWudo0eP6pZbblH16tUVGBiopKQkLViwwG3c48ePq2/fvgoKClJsbKymT59e7FN7QUGBHnjgAVWvXl1BQUG64oor3GY1PvzwQ/Xp00d33HGHEhMT1aRJE91yyy2aNGmS27ZefvllNWrUSP7+/mrYsKGef/5517KEhARJUvPmzWWz2dS+ffsS90N4eLgGDx6sli1bqlatWurUqZPuueceffPNN279goKCNGjQID388MOl7tP4+HjdcMMNeu+99/TTTz+pY8eO0sn/4zPhuKpcx9WgQYP0zDPPqF27dqpTp4769eungQMH6t133y3W9+6779att96q1q1blzhWcnKyYmJizmnmyBMIMrioAgICVFhY6OkyKoUz7cv58+crKChIa9as0RNPPKGJEyfqiy++cOszYcIE9enTR//73/903XXXqW/fvjp27Jh08tNax44d1bx5c61du1ZLlixRWlqa+vTp41p/5MiRWrFihT744AN9/vnnWr58udavX3/G2qdPn642bdpow4YN6tatm2677Tb1799f/fr10/r161W3bl31799fp25zlZ+frxYtWujjjz/Wjz/+qLvuuku33Xabvv/+e9eYKSkpWrlypT788EN98cUX+uabb4rVMnToUK1atUoLFy7U//73P/Xu3Vtdu3bV9u3bJUkxMTFavXq19uzZU2rtb7zxhsaOHatJkybp559/1uTJkzVmzBjNnz9fklw1ffnllzp48GCJbyAlOXDggN599121a9eu2LLx48dr8+bNWrx4cYnrduvWTZ999pk+//xzffLJJ3r22Wd1//33y8fn3O95ynFVuY4rScrMzFRERIRb29y5c7Vz506NGzeu1PW8vb01efJkPfvss/rtt9/OensXnQHK0YABA0yPHj2K/dvpdJovvvjC+Pn5mQceeMAYY8yyZcuMJJOenu7Rmq3gTPvyz8uNMaZdu3ambdu2bmNcfvnl5qGHHnI9l2RGjx7tep6dnW0kmU8//dQYY8yjjz5qOnfu7DbGvn37jCSzdetWc/z4cWO3283bb7/tWn706FETEBBg7rvvPrda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A4BKJCcnR9WrV9fTTz+tO+64w9PloJLguKp4+GoJQKWwYcMG/fLLL2rVqpUyMzM1ceJESSr1kytwNjiuKj6CDIBK46mnntLWrVtlt9vVokULffPNN6pataqny4LFcVxVbHy1BAAALIuTfQEAgGURZAAAgGURZAAAgGURZAAAgGURZAB4hM1m0/vvv+/pMgBYHEEGwAWRmpqqe++9V3Xq1JGfn5/i4+PVvXt3LV26tNy3tXz5ctlsNmVkZJT72AAqNu4jA6Dc7d69W23atFFYWJiefPJJJSUlqaioSJ999pmGDBmiX375xdMllsgYI4fDwa+0AxbCjAyAcnfPPffIZrPp+++/V69evVS/fn01adJEKSkpWr16dbH+Jc2obNy4UTabTbt375Yk7dmzR927d1d4eLiCgoLUpEkTffLJJ9q9e7c6dOggSQoPD5fNZtPtt98unfw14ylTpighIUEBAQG69NJLtXjx4mLb/fTTT9WiRQv5+fnp22+/1aZNm9ShQwdVqVJFISEhatGihdauXXsR9hyAc8XHDgDl6tixY1qyZIkmTZqkoKCgYsvDwsLKNO6QIUNUWFior7/+WkFBQdqyZYuCg4MVHx+vd955R7169dLWrVsVEhKigIAASdKUKVP0+uuv64UXXlC9evX09ddfq1+/fqpWrZratWvnGvvhhx/WU089pTp16ig8PFzXXHONmjdvrtmzZ8vb21sbN26Ur6/veewVABcKQQZAudqxY4eMMWrYsGG5jrt371716tVLSUlJkuT2C9ARERGSpKioKFdQKigo0OTJk/Xll1+qdevWrnW+/fZbvfjii25BZuLEifrHP/7htq2RI0e6XkO9evXK9bUAKD8EGQDl6kL96smwYcM0ePBgff7550pOTlavXr10ySWXlNp/x44dys3NdQsoklRYWKjmzZu7tbVs2dLteUpKiv7973/rtddeU3Jysnr37q26deuW8ysCUB44RwZAuapXr55sNts5ndDr5fX7n6I/h6CioiK3Pv/+97+1c+dO3Xbbbdq8ebNatmypZ599ttQxs7OzJUkff/yxNm7c6Hps2bLF7TwZScW+Ahs/frx++ukndevWTV999ZUaN26s995776xfD4CLhyADoFxFRESoS5cumjVrlnJycootL+kS6WrVqkmSDh486GrbuHFjsX7x8fG6++679e677+r+++/XnDlzJEl2u12S5HA4XH0bN24sPz8/7d27V4mJiW6P+Pj4M76O+vXra8SIEfr888914403au7cuWe9DwBcPAQZAOVu1qxZcjgcatWqld555x1t375dP//8s2bOnOk6X+XPToWL8ePHa/v27fr444/19NNPu/UZPny4PvvsM+3atUvr16/XsmXL1KhRI0lSrVq1ZLPZ9NFHH+nw4cPKzs5WlSpV9MADD2jEiBGaP3++fv31V61fv17PPvus5s+fX2rteXl5Gjp0qJYvX649e/Zo5cqV+uGHH1zbAlDBGAC4AA4cOGCGDBliatWqZex2u6levbq54YYbzLJly4z5/Tsk895777n6f/vttyYpKcn4+/ubq6++2ixatMhIMrt27TLGGDN06FBTt25d4+fnZ6pVq2Zuu+02c+TIEdf6EydONDExMcZms5kBAwYYY4xxOp1mxowZpkGDBsbX19dUq1bNdOnSxaxYscIYY8yyZcuMJJOenu4ap6CgwNx8880mPj7e2O12ExcXZ4YOHWry8vIu2r4DcPZs5kKdmQcAAHCB8dUSAACwLIIMAACwLIIMAACwLIIMAACwLIIMAACwLIIMAACwLIIMAACwLIIMAACwLIIMAACwLIIMAACwLIIMAACwLIIMAACwrP8PvCDLiD5yZbIAAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# plot\n", + "fig, ax = plt.subplots()\n", + "\n", + "bar_colors = ['tab:red', 'tab:blue', 'tab:green']\n", + "p = ax.bar(x, y, width=1, edgecolor=\"white\", linewidth=0.7, yunits=minutes, color=bar_colors)\n", + "ax.bar_label(p, label_type='center')\n", + "ax.set_xlabel('Clusters')\n", + "ax.set_ylabel('Minutes')\n", + "ax.set_title('Upgrade')\n", + "\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "eaaee37d-a4a3-4836-8f07-eb8b286719ac", + "metadata": {}, + "outputs": [], + "source": [ + "clusters = [\"PinnedImageSet 3N\", \"PinnedImageSet 24N\"]\n", + "\n", + "node_times = {\n", + " 'Masters': [round((datetime.strptime(\"2024-08-28 08:36:34\", \"%Y-%m-%d %H:%M:%S\") - datetime.strptime(\"2024-08-28 08:22:06\", \"%Y-%m-%d %H:%M:%S\")).total_seconds() / 60.0, 2),\n", + " round((datetime.strptime(\"2024-08-30 12:41:09\", \"%Y-%m-%d %H:%M:%S\") - datetime.strptime(\"2024-08-30 12:26:09\", \"%Y-%m-%d %H:%M:%S\")).total_seconds() / 60.0, 2)],\n", + " 'Workers': [round((datetime.strptime(\"2024-08-28 08:30:38\", \"%Y-%m-%d %H:%M:%S\") - datetime.strptime(\"2024-08-28 08:22:06\", \"%Y-%m-%d %H:%M:%S\")).total_seconds() / 60.0, 2),\n", + " round((datetime.strptime(\"2024-08-30 13:15:34\", \"%Y-%m-%d %H:%M:%S\") - datetime.strptime(\"2024-08-30 12:26:09\", \"%Y-%m-%d %H:%M:%S\")).total_seconds() / 60.0, 2)],\n", + "}\n" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "af2485fb-0586-4aa6-9559-c7f21d8a9da1", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAosAAAHrCAYAAACn9tfQAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAABUCklEQVR4nO3dd1xW9f//8efFRhAQBQEF995aKrknmjvLjyPF0TKcqCWfjwMcoTY0G9bHSutTamlpZrkytXJlrjRz5spcOUAcQHB+f3zl+nkJR5GAC+Fxv92uW13nvM/7vK7rguOT9znnfVkMwzAEAAAAZMDB3gUAAAAg7yIsAgAAwBRhEQAAAKYIiwAAADBFWAQAAIApwiIAAABMERYBAABgirAIAAAAU4RFAAAAmCIsAnZksVgUHR1t7zLypejoaFkslixtm9c/l/nz58tisej48eP2LuWu+vfvr9KlS9u7DAD/EGER+IfS/uG2WCz68ccf0603DEPBwcGyWCzq2LFjrte3efNmRUdH68qVK7m+b9yf48ePW3+WLBaLHB0dFRISom7dumn37t32Li9bWCwWDRkyxN5lZJuEhARNnDhR1atXl4eHh4oWLaratWtr+PDh+vPPP++7v/379ys6OjrP/yGAgsXJ3gUA+YWbm5sWLFigxo0b2yzfuHGj/vjjD7m6uqbb5saNG3Jyytlfw82bNysmJkb9+/eXj49Pju4rv8iNz+VuevXqpUcffVQpKSn67bffNGfOHK1cuVJbt25V7dq11bdvX/Xs2TPDnynknuTkZDVt2lQHDhxQeHi4hg4dqoSEBP36669asGCBunXrpqCgoPvqc//+/YqJiVHz5s0ZlUWeQVgEssmjjz6qxYsXa/bs2TZBY8GCBapXr57++uuvdNu4ubnlcpXIDHt/LnXr1tWTTz5pfd6oUSN17txZc+bM0bvvvitHR0c5OjratUZIy5Yt065du/TJJ5+od+/eNutu3ryppKQku9UGZCdOQwPZpFevXrp48aLWrl1rXZaUlKQlS5ak+4ckzZ3XxqVdZ3fkyBHrSKC3t7cGDBig69evW9ulna6cP3/+XfuMjo7WmDFjJEllypSxnt68/RTXxx9/rHr16snd3V2+vr7q2bOnTp06ZdPn4cOH1b17dwUEBMjNzU0lS5ZUz549FRcXd9f35IcfftATTzyhkJAQubq6Kjg4WCNHjtSNGzds2vXv31+enp76/fffFRYWJg8PDwUFBWnSpEkyDCPd637llVc0c+ZMlSpVSu7u7mrWrJn27dt311qaNWumWrVqZbiuUqVKCgsLy/A91H18Lro1Kjls2DAVK1ZMhQsXVufOnXX69Ol/dB1ky5YtJUnHjh2TTK5ZLF26tDp27Kgff/xR9evXl5ubm8qWLauPPvrIpq+0bTdt2qTIyEj5+fnJw8ND3bp104ULF9Lte+XKlWrSpIk8PDxUuHBhdejQQb/++mu6dsuWLVP16tXl5uam6tWra+nSpZl6bRs2bJDFYtFnn32mmJgYlShRQoULF9bjjz+uuLg4JSYmasSIEfL395enp6cGDBigxMREmz7mzZunli1byt/fX66urqpatarmzJmTbl+pqamKjo5WUFCQChUqpBYtWmj//v0qXbq0+vfvb9P2ypUrGjFihIKDg+Xq6qry5ctr+vTpSk1NtbY5evSodCvM38nNzU1eXl42yw4cOKDHH39cvr6+cnNz00MPPaTly5db18+fP19PPPGEJKlFixbW39cNGzZk6r0Ecgoji0A2KV26tEJDQ7Vw4UK1b99euvUPbVxcnHr27KnZs2dnuq8ePXqoTJkyio2N1c6dO/Xee+/J399f06dPv6+aHnvsMR06dEgLFy7UzJkzVaxYMUmSn5+fJGnq1KkaP368evTooaeeekoXLlzQG2+8oaZNm2rXrl3y8fFRUlKSwsLClJiYqKFDhyogIECnT5/WihUrdOXKFXl7e5vuf/Hixbp+/boGDx6sokWL6qefftIbb7yhP/74Q4sXL7Zpm5KSonbt2qlhw4aaMWOGVq1apYkTJ+rvv//WpEmTbNp+9NFHunr1qiIiInTz5k29/vrratmypfbu3avixYtnWEvfvn319NNPa9++fapevbp1+fbt23Xo0CGNGzfunu9nZj6X/v3767PPPlPfvn3VsGFDbdy4UR06dLhn33eTFkqKFi1613ZHjhzR448/rkGDBik8PFwffPCB+vfvr3r16qlatWo2bYcOHaoiRYpo4sSJOn78uGbNmqUhQ4bo008/tbb53//+p/DwcIWFhWn69Om6fv265syZo8aNG2vXrl3W06Rr1qxR9+7dVbVqVcXGxurixYsaMGCASpYsmenXGBsbK3d3d40dO1ZHjhzRG2+8IWdnZzk4OOjy5cuKjo7W1q1bNX/+fJUpU0YTJkywbjtnzhxVq1ZNnTt3lpOTk7766is9//zzSk1NVUREhLVdVFSUZsyYoU6dOiksLEx79uxRWFiYbt68aVPL9evX1axZM50+fVrPPvusQkJCtHnzZkVFRenMmTOaNWuWJKlUqVLSrZ/HcePG3fWGql9//VWNGjVSiRIlNHbsWHl4eOizzz5T165d9fnnn6tbt25q2rSphg0bptmzZ+vf//63qlSpIknW/wJ2YwD4R+bNm2dIMrZv3268+eabRuHChY3r168bhmEYTzzxhNGiRQvDMAyjVKlSRocOHWy2lWRMnDjR+nzixImGJGPgwIE27bp162YULVrU+vzYsWOGJGPevHnp6rmzz5dfftmQZBw7dsym3fHjxw1HR0dj6tSpNsv37t1rODk5WZfv2rXLkGQsXrz4vt+btPfhdrGxsYbFYjFOnDhhXRYeHm5IMoYOHWpdlpqaanTo0MFwcXExLly4YPO63d3djT/++MPadtu2bYYkY+TIkdZlae9lmitXrhhubm7Giy++aFPPsGHDDA8PDyMhIcG6LKufy44dOwxJxogRI2za9e/fP12fGUl7fTExMcaFCxeMs2fPGhs2bDDq1KljSDI+//xzw7jtZ+72z7RUqVKGJOP777+3Ljt//rzh6upqjBo1yrosbdvWrVsbqamp1uUjR440HB0djStXrhiGYRhXr141fHx8jKefftqmxrNnzxre3t42y2vXrm0EBgZatzUMw1izZo0hyShVqpTN9pKMiIgI6/P169cbkozq1asbSUlJ1uW9evUyLBaL0b59e5vtQ0ND0/WZ0c9ZWFiYUbZsWZu6nZycjK5du9q0i46ONiQZ4eHh1mWTJ082PDw8jEOHDtm0HTt2rOHo6GicPHnSut9KlSpZX2f//v2N999/3zh37ly6elq1amXUqFHDuHnzpnVZamqq8cgjjxgVKlSwLlu8eLEhyVi/fn26PgB74TQ0kI169OihGzduaMWKFbp69apWrFhhegr6bp577jmb502aNNHFixcVHx+fbbV+8cUXSk1NVY8ePfTXX39ZHwEBAapQoYLWr18vSdaRw9WrV6c75Xov7u7u1v+/du2a/vrrLz3yyCMyDEO7du1K1/72u2TT7ppNSkrSt99+a9Oua9euKlGihPV5/fr11aBBA33zzTemtXh7e6tL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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "x = np.arange(len(clusters)) # the label locations\n", + "width = 0.25 # the width of the bars\n", + "multiplier = 0\n", + "\n", + "fig, ax = plt.subplots(layout='constrained')\n", + "\n", + "for attribute, measurement in node_times.items():\n", + " offset = width * multiplier\n", + " rects = ax.bar(x + offset, measurement, width, label=attribute)\n", + " ax.bar_label(rects, padding=3)\n", + " multiplier += 1\n", + "\n", + "# Add some text for labels, title and custom x-axis tick labels, etc.\n", + "ax.set_ylabel('Minutes')\n", + "ax.set_xlabel('Cluster')\n", + "ax.set_title('Minutes applying PinnedImageSet')\n", + "ax.set_xticks(x + (width/2), clusters)\n", + "ax.legend(loc='upper left', ncols=3)\n", + "ax.set_ylim(0, 50)\n", + "\n", + "plt.show()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 149, + "id": "7a473aa0-3bbe-4c05-afe7-54dd7605d582", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'1': (72.1, 56.75, 68.92, 60.4), '2': (64.02, 59.18, 77.77, 62.42), '3': (62.82, 58.62, 68.28, 62.75)}\n" + ] + } + ], + "source": [ + "clusters = [\"3 Nodes\", \"3 Nodes PinnedImageSet\", \"24 Nodes\", \"24 Nodes PinnedImageSet\"]\n", + "\n", + "node_times = {\n", + " '1': (\n", + " round((datetime.strptime(\"2024-09-06 10:41:52\", \"%Y-%m-%d %H:%M:%S\") - datetime.strptime(\"2024-09-06 09:29:46\", \"%Y-%m-%d %H:%M:%S\")).total_seconds() / 60.0, 2),\n", + " round((datetime.strptime(\"2024-09-11 09:25:52\", \"%Y-%m-%d %H:%M:%S\") - datetime.strptime(\"2024-09-11 08:29:07\", \"%Y-%m-%d %H:%M:%S\")).total_seconds() / 60.0, 2),\n", + " round((datetime.strptime(\"2024-09-06 22:00:57\", \"%Y-%m-%d %H:%M:%S\") - datetime.strptime(\"2024-09-06 20:52:02\", \"%Y-%m-%d %H:%M:%S\")).total_seconds() / 60.0, 2),\n", + " round((datetime.strptime(\"2024-09-12 15:03:44\", \"%Y-%m-%d %H:%M:%S\") - datetime.strptime(\"2024-09-12 14:03:20\", \"%Y-%m-%d %H:%M:%S\")).total_seconds() / 60.0, 2)\n", + " ),\n", + " '2': (\n", + " round((datetime.strptime(\"2024-09-06 13:54:21\", \"%Y-%m-%d %H:%M:%S\") - datetime.strptime(\"2024-09-06 12:50:20\", \"%Y-%m-%d %H:%M:%S\")).total_seconds() / 60.0, 2),\n", + " round((datetime.strptime(\"2024-09-11 21:08:04\", \"%Y-%m-%d %H:%M:%S\") - datetime.strptime(\"2024-09-11 20:08:53\", \"%Y-%m-%d %H:%M:%S\")).total_seconds() / 60.0, 2),\n", + " round((datetime.strptime(\"2024-09-09 09:33:28\", \"%Y-%m-%d %H:%M:%S\") - datetime.strptime(\"2024-09-09 08:15:42\", \"%Y-%m-%d %H:%M:%S\")).total_seconds() / 60.0, 2),\n", + " round((datetime.strptime(\"2024-09-12 23:42:01\", \"%Y-%m-%d %H:%M:%S\") - datetime.strptime(\"2024-09-12 22:39:36\", \"%Y-%m-%d %H:%M:%S\")).total_seconds() / 60.0, 2)\n", + " ),\n", + " '3': (\n", + " round((datetime.strptime(\"2024-09-06 16:19:19\", \"%Y-%m-%d %H:%M:%S\") - datetime.strptime(\"2024-09-06 15:16:30\", \"%Y-%m-%d %H:%M:%S\")).total_seconds() / 60.0, 2),\n", + " round((datetime.strptime(\"2024-09-12 09:02:44\", \"%Y-%m-%d %H:%M:%S\") - datetime.strptime(\"2024-09-12 08:04:07\", \"%Y-%m-%d %H:%M:%S\")).total_seconds() / 60.0, 2),\n", + " round((datetime.strptime(\"2024-09-09 12:40:53\", \"%Y-%m-%d %H:%M:%S\") - datetime.strptime(\"2024-09-09 11:32:36\", \"%Y-%m-%d %H:%M:%S\")).total_seconds() / 60.0, 2),\n", + " round((datetime.strptime(\"2024-09-16 12:16:56\", \"%Y-%m-%d %H:%M:%S\") - datetime.strptime(\"2024-09-16 11:14:11\", \"%Y-%m-%d %H:%M:%S\")).total_seconds() / 60.0, 2)\n", + " ),\n", + "}\n", + "\n", + "\n", + "print(node_times)" + ] + }, + { + "cell_type": "code", + "execution_count": 186, + "id": "bb1ac5e4-d036-4e3a-9236-9d3b03d17a7f", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAB9sAAAHrCAYAAABvtf3aAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAACSGUlEQVR4nOzdeXhN1/7H8c+JjESCCBEymedZjW211FC0htIaWlOraiwdDDXPWi3XXK5GXVW0FU21ocYoNYeiiCkRFwlBEiSSSM7vjxvn51RCTiRO8H49z3lu9tprr/1dabhxPmftZTAajUYBAAAAAAAAAAAAAIBMs7F2AQAAAAAAAAAAAAAAPGkI2wEAAAAAAAAAAAAAsBBhOwAAAAAAAAAAAAAAFiJsBwAAAAAAAAAAAADAQoTtAAAAAAAAAAAAAABYiLAdAAAAAAAAAAAAAAALEbYDAAAAAAAAAAAAAGAhwnYAAAAAAAAAAAAAACxE2A4AAAAAAAAAAAAAgIUI2wEAAAAAzzyDwaBx48ZZuwxk0bhx42QwGMzafH191aNHD6vVBAAAAAB4+hG2AwAAAACeCkuXLpXBYJDBYNCOHTvuO280GuXl5SWDwaDWrVs/9vr+/PNPjRs3TjExMY/93o0bN1blypXTPRcdHc2HDQAAAAAAyAJbaxcAAAAAAEB2cnR01IoVK9SoUSOz9uDgYP33v/+Vg4PDfdckJCTI1jZn/4n8559/avz48erRo4cKFCiQo/eCFBoaKhsb1hgAAAAAAHIO/+oEAAAAADxVXn31Vf3www+6c+eOWfuKFStUq1YteXh43HeNo6NjjoftuN+tW7dybGwHBwfZ2dnl2PgAAAAAABC2AwAAAACeKp07d9bVq1e1ceNGU1tSUpJ+/PFHdenSJd1r/vkY9bt7gJ8+fdq0Et3V1VU9e/ZUfHy8qV94eLgMBoOWLl36wDHHjRunTz75RJLk5+dnetx9eHi4qf/y5ctVq1YtOTk5qVChQnrrrbd0/vx5szFPnTqlDh06yMPDQ46OjipRooTeeustxcbGPtL37J/uzv/EiRPq1KmTXFxc5ObmpsGDB+v27dtmfRMSEjRo0CAVLlxY+fPn12uvvaYLFy5k+D09duyYunTpooIFC5qePnD48GH16NFDJUuWlKOjozw8PNSrVy9dvXr1vtp27NihOnXqyNHRUaVKldLXX3+d7hz+uWf73W0Gdu7cqaFDh8rd3V358uVTu3btdOXKFbNrU1NTNW7cOHl6eipv3rx66aWXdOzYMfaBBwAAAACY4WP7AAAAAICniq+vr+rXr6/vv/9eLVu2lCQFBQUpNjZWb731lmbPnp3psTp16iQ/Pz9NnTpVISEh+ve//60iRYpo+vTpFtXUvn17nTx5Ut9//71mzpypwoULS5Lc3d0lSZMnT9bo0aPVqVMnvfvuu7py5YrmzJmjF154QQcPHlSBAgWUlJSk5s2bKzExUQMHDpSHh4cuXLigdevWKSYmRq6urhbVlNn5+/r6aurUqdq9e7dmz56t69eva9myZaY+PXr00OrVq/X222+rXr16Cg4OVqtWrTIcs2PHjipTpoymTJkio9EoSdq4caPOnj2rnj17ysPDQ3///bcWLVqkv//+W7t375bBYJAkHTlyRM2aNZO7u7vGjRunO3fuaOzYsSpatGim5zRw4EAVLFhQY8eOVXh4uGbNmqUBAwZo1apVpj4jRozQ559/rjZt2qh58+b666+/1Lx58/s+aAAAAAAAeLYRtgMAAAAAnjpdunTRiBEjlJCQICcnJ3333Xd68cUX5enpadE4NWrU0JIlS0zHV69e1ZIlSywO26tWraqaNWvq+++/V9u2beXr62s6d+7cOY0dO1aTJk3SyJEjTe3t27dXjRo1NH/+fI0cOVLHjh1TWFiYfvjhB73xxhumfmPGjLGoFkv4+fnp559/liT1799fLi4umj9/vj7++GNVrVpVISEhWr16tT788EPNnDlTktSvXz/17NlTf/31V7pjVqtWTStWrDBr69evnz766COztnr16qlz587asWOHnn/+eSltrkajUX/88Ye8vb0lSR06dFCVKlUyPSc3Nzf9/vvvpgA/NTVVs2fPVmxsrFxdXRUVFaWvvvpKbdu2VUBAgOm68ePHm63UBwAAAACAx8gDAAAAAJ46nTp1UkJCgtatW6cbN25o3bp1GT5C/kH69u1rdvz888/r6tWriouLy7Za16xZo9TUVHXq1EnR0dGml4eHh8qUKaOtW7dKkmnl+oYNG8weZZ+T+vfvb3Y8cOBASdJvv/0mSVq/fr2UFpan1y89//yeSpKTk5Pp69u3bys6Olr16tWTJIWEhEiSUlJStGHDBrVt29YUtEtShQoV1Lx580zPqU+fPqagXWn/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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "x = np.arange(len(clusters)) # the label locations\n", + "width = 0.30 # the width of the bars\n", + "multiplier = 0\n", + "bar_colors = ['sandybrown','chocolate', 'sandybrown', 'chocolate' ]\n", + "\n", + "fig, ax = plt.subplots(layout='constrained')\n", + "\n", + "for attribute, measurement in node_times.items():\n", + " offset = width * multiplier\n", + " rects = ax.bar(x + offset, measurement, width, label=attribute, color=bar_colors, edgecolor='black')\n", + " ax.bar_label(rects, padding=3)\n", + " multiplier += 1\n", + "\n", + "# Add some text for labels, title and custom x-axis tick labels, etc.\n", + "ax.set_ylabel('Minutes')\n", + "ax.set_xlabel('Cluster')\n", + "ax.set_title('Minutes Upgrading')\n", + "ax.set_xticks(x + (width), clusters)\n", + "# ax.legend(loc='upper left', ncols=3)\n", + "ax.set_ylim(0, 85)\n", + "fig.set_figwidth(20)\n", + "\n", + "# Averages\n", + "\n", + "runs = len(node_times)\n", + "sums = [0,0,0,0]\n", + "avgs = []\n", + "for attribute, measurement in node_times.items():\n", + " sums[0] = sums[0]+measurement[0]\n", + " sums[1] = sums[1]+measurement[1]\n", + " sums[2] = sums[2]+measurement[2]\n", + " sums[3] = sums[3]+measurement[3]\n", + "\n", + "avgs.append(round(sums[0]/runs, 2))\n", + "avgs.append(round(sums[1]/runs, 2))\n", + "avgs.append(round(sums[2]/runs, 2))\n", + "avgs.append(round(sums[3]/runs, 2))\n", + "\n", + "\n", + "ax.axhline(y=avgs[0], color='r', linestyle='-', xmin = 0.046, xmax = 0.255)\n", + "ax.text(0.85, avgs[0]+0.9, str(avgs[0]), ha='right', va='center', weight=\"bold\")\n", + "ax.axhline(y=avgs[1], color='r', linestyle='-', xmin = 0.28, xmax = 0.487)\n", + "ax.text(1.85, avgs[1]+0.9, str(avgs[1]), ha='right', va='center', weight=\"bold\")\n", + "ax.axhline(y=avgs[2], color='r', linestyle='-', xmin = 0.513, xmax = 0.721)\n", + "ax.text(2.85, avgs[2]+0.9, str(avgs[2]), ha='right', va='center', weight=\"bold\")\n", + "ax.axhline(y=avgs[3], color='r', linestyle='-', xmin = 0.745, xmax = 0.954)\n", + "ax.text(3.85, avgs[3]+0.9, str(avgs[3]), ha='right', va='center', weight=\"bold\")\n", + "\n", + "plt.show()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 187, + "id": "337155e9-866f-49ca-83aa-6d1fa11145c7", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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xtkWdmkRERFRuxS4bDilVwF03UBtJIlkWodhCCTTOmojSei6gVN6FaDAZb6Ehy08RERE1C6SJGF0/25ojKWwpTaCUDy1r/tKQJYlnNSrAKP7dzPlqummaeG5++67IUkSbrrppuy2sWPHQpKknJ/rrrsur3ESERF1ZQGvHReeVIqJQ0rQr7sbpQV29OvuxsQhJbjwxFJTrqMFs7TwrFy5En/84x8xYsSIVvuuueYaLFy4MHvb6XQe4+iIiIhofwGvHeMGqziloiA707LfaTVly06LvLfwRKNRXHHFFXj88cdRUFDQar/T6URJSUn2x+v15iVOIiIiOn7lPeGZNWsWzj//fEyYMKHN/U8//TS6deuGYcOGYe7cuYjH4196Pk3TEA6Hc36IiIio49SGk3h7Ux1eWrsHL6/bg5fW7sHbm+pQG07mO7SDymuX1jPPPINPPvkEK1eubHP/5ZdfjoqKCpSWlmLt2rW47bbbsHnzZvzzn/886DkXLVqEBQsWHMWoiYiIuq7acBLLN9chlEgh4LHDblWQTOuorIugPqph7MBiU9bxSEIIkY8H3rVrF772ta/h9ddfz9bujB07FieddBIeeOCBNu/z1ltvYfz48di6dSv69u3b5jGapkHT/jfDYzgcRnl5OUKhELvDiIiIjoAQAm9vqkNlXQS9i1w5NTtCCGxviKFvsQfnDCo+4nqecDgMn8/XYZ/feWvhWbVqFWpra3HKKadkt+m6jnfeeQcPPfQQNE2Doig59znttNMA4EsTHlVVoarqUY6eiIio6wnG06gKxhHw2CEgUBvWkEjrcFgVFHtsCHjsqArGEYynTTcXT94SnvHjx2PdunU522bOnIlBgwbhtttua5XsAMDq1asBAD169DhmcRIREVEzLWMgpRuoiySxZncINeEk0roBqyKjxGvHiT19kGQJWsbId6it5C3h8Xg8GDZsWM42l8uFoqIiDBs2DJWVlVi6dCnOO+88FBUVYe3atbj55psxZsyYNoevExER0dGlWmQ0RFP4eHsjkmkdRS4VqlWGljawoyGGveEkvta7EKol72OiWjHFPDxtsdlseOONN/DAAw8gFouhvLwc06ZNw+23357v0IiIiLokr13B7qY4muIp9OvmgryvN8apyrBbJGytj2F3Uxxee+temnwzVcKzfPny7L/Ly8uxYsWKvMZDRERE/7Oz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f/bfLperzfvbbDb069cPADBy5EisXLkSDz74IP74xz8e8mtBHWfs2LH405/+hDVr1sBqtWLQoEEYO3Ysli9fjqamJpx99tmHdL6D/f7PO+88/OUvf8H777+PcePGZbdHo1EsWLAAF198cav72O32rzxvSUkJSkpKMGjQIBQWFuKss87CL37xC/To0eOQ4qYjc7xfnwBg9uzZeOmll/DOO++gZ8+e2e1vvfUWKisrc84DANOmTcNZZ53V5mNSxzjer08bN27E+PHjce211+L222/Pbo9EIvj444/x6aefYvbs2cC+vw0hBCwWC1577bWcOL5Mp0x4DsV7772HM844Az/84Q+z2/b/ltPi5JNPxsknn4y5c+di1KhRWLp0KU4//XTYbLacrBgATjnlFNTU1MBisaB3795HHKNhGNA07YjPQ0fmrLPOQiQSwf3335+9eIwdOxZ33303mpqacMsttwAABg8ejPfeey/nvu+99x4GDBgARVG+8nGuv/56DBs2DBdeeCFefvnl7GOdcsop2Lx5czYZPhKGYQAA31cmZ7brkxACN9xwA55//nksX74cffr0ydn/05/+FN///vdztg0fPhz3338/LrjggkN6LDo0x/P1acOGDRg3bhymT5+OX/7ylzn7vF4v1q1bl7PtkUcewVtvvYXnnnuu1Xvwy3T5hKd///548sknsWzZMvTp0wdPPfUUVq5cmX0Rt23bhsceewwXXnghSktLsXnzZmzZsgVXXnklAKB3797Ytm0bVq9ejZ49e8Lj8WDChAkYNWoUpk6dinvvvRcDBgzAnj178PLLL+Ob3/zmlzbpzZ07F1OmTEGvXr0QiUSwdOlSLF++HMuWLTtmrwm1raCgACNGjMDTTz+dHTI5ZswYXHLJJUin09k//FtuuQWnnnoq7rzzTnznO9/B+++/j4ceegiPPPJIux/rhhtugK7r+MY3voFXXnkFo0ePxh133IFvfOMb6NWrF771rW9BlmWsWbMG69evx1133XXQc/3nP//B3r17ceqpp8LtdmPDhg348Y9/jDPPPLNDEnI6esx2fZo1axaWLl2KF198ER6PBzU1NQAAn88Hh8ORbUU8UK9evQ7pg4kO3fF6fVq/fj3GjRuHSZMmYc6cOdn3lKIoKC4uhizLGDZsWM59AoEA7HZ7q+1f6ZCrfkzu7LPPFjfeeGPOtoqKCnH//ffnbGsppEsmk2LGjBnC5/MJv98vrr/+evHTn/40WxBVU1Mjpk6dKnr06JEdwnfHHXcIXdeFEEIkk0kxbdo04ff7c4Z9hsNhccMNN4jS0lJhtVpFeXm5uOKKK8TOnTuF+JKiq6uuukpUVFQIm80miouLxfjx48Vrr7121F4vOjQ33nijACA+++yz7LYTTzxRlJSU5BzXMuzTarWKXr16ZYsJW7T1njxw2KcQQvzmN78RHo9HvPfee0IIIV599VVxxhlnCIfDIbxer/j6178uHnvssezxbRWIvvXWW2LUqFHC5/MJu90u+vfvL2677TbR1NTUQa8Ktdfxfn06cJj7gcPd28Ki5WPneLw+zZs3r833VEVFxUGf5+EWLUv7giAiIiLqtDrlKC0iIiKi/THhISIiok6PCQ8RERF1ekx4iIiIqNNjwkNERESdHhMeIiIi6vSY8BAREVGnx4SHiDql3r17cxFLIspiwkNEeTNjxgxIkoS77747Z/sLL7yQXUSTiKgjMOEhoryy2+2455570NTUlO9QiKgTY8JDRHk1YcIElJSUYNGiRQc95h//+AeGDh0KVVXRu3dv/OY3v8nZX1tbiwsuuAAOhwN9+vTB008/3eocwWAQ3//+91FcXAyv14tx48ZhzZo1R+U5EZH5MOEhorxSFAW/+tWv8Pvf/x67d+9utX/VqlW45JJLcOmll2LdunWYP38+fvGLX2DJkiXZY2bMmIFdu3bh7bffxnPPPYdHHnkEtbW1Oef59re/jdraWrzyyitYtWoVTjnlFIwfPx6NjY3H5HkSUX5Z8h0AEdE3v/lNnHTSSZg3bx6eeOKJnH2//e1vMX78ePziF78AAAwYMAAbN27EfffdhxkzZuDzzz/HK6+8go8++ginnnoqAOCJJ57A4MGDs+d499138dFHH6G2thaqqgIAfv3rX+OFF17Ac889h2uvvfaYPl8iOvbYwkNEpnDPPffgz3/+Mz777LOc7Z999hnOPPPMnG1nnnkmtmzZAl3X8dlnn8FisWDkyJHZ/YMGDYLf78/eXrNmDaLRKIqKiuB2u7M/27ZtQ2Vl5TF4dkSUb2zhISJTGDNmDCZNmoS5c+dixowZHXruaDSKHj16YPny5a327Z8YEVHnxYSHiEzj7rvvxkknnYSBAwdmtw0ePBjvvfdeznHvvfceBgwYAEVRMGjQIGQyGaxatSrbpbV582YEg8Hs8aeccgpqampgsVjQu3fvY/iMiMgs2KVFRKYxfPhwXHHFFfjd736X3XbLLbfgzTffxJ133onPP/8cf/7zn/HQQw/h1ltvBQAMHDgQkydPxg9+8AN8+OGHWLVqFb7//e/D4XBkzzFhwgSMGjUKU6dOxWuvvYbt27fj//2//4ef//zn+Pjjj/PyXIno2GLCQ0SmsnDhQhiGkb19yimn4O9//zueeeYZDBs2DHfccQcWLlyY0+21ePFilJaW4uyzz8bFF1+Ma6+9FoFAILtfkiT85z//wZgxYzBz5kwMGDAAl156KXbs2IHu3bsf8+dIRMeeJIQQ+Q6CiIiI6GhiCw8RERF1ekx4iIiIqNNjwkNERESdHhMeIiIi6vSY8BAREVGnx4SHiIiIOj0mPERERNTpMeEhIiKiTo8JDxEREXV6THiIiIio02PCQ0RERJ0eEx4iIiLq9P4/aNMKSRoEGDUAAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "with open('time_applying.json') as file:\n", + " data = json.load(file)\n", + "\n", + "df = pd.DataFrame(data['data'])\n", + "df['minutes'] = round((pd.to_datetime(df['date_reported']) - pd.to_datetime(df['date_applied'])).dt.total_seconds() / 60.0, 2)\n", + "df['combo'] = df['node']+df['worker_count']\n", + "\n", + "X=df['combo'].astype(\"string\") ## Read as string\n", + "y=df['minutes']\n", + "plt.scatter(X,y, alpha=0.3)\n", + "plt.title ('Time spend applying PinnedImageSet')\n", + "plt.xlabel('Node')\n", + "plt.ylabel('Minutes')\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "f4ca750e-3e53-4814-986e-197720658265", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/PinnedImages/basic_units.py b/PinnedImages/basic_units.py new file mode 100644 index 0000000..f9a94bc --- /dev/null +++ b/PinnedImages/basic_units.py @@ -0,0 +1,386 @@ +""" +.. _basic_units: + +=========== +Basic Units +=========== + +""" + +import math + +from packaging.version import parse as parse_version + +import numpy as np + +import matplotlib.ticker as ticker +import matplotlib.units as units + + +class ProxyDelegate: + def __init__(self, fn_name, proxy_type): + self.proxy_type = proxy_type + self.fn_name = fn_name + + def __get__(self, obj, objtype=None): + return self.proxy_type(self.fn_name, obj) + + +class TaggedValueMeta(type): + def __init__(self, name, bases, dict): + for fn_name in self._proxies: + if not hasattr(self, fn_name): + setattr(self, fn_name, + ProxyDelegate(fn_name, self._proxies[fn_name])) + + +class PassThroughProxy: + def __init__(self, fn_name, obj): + self.fn_name = fn_name + self.target = obj.proxy_target + + def __call__(self, *args): + fn = getattr(self.target, self.fn_name) + ret = fn(*args) + return ret + + +class ConvertArgsProxy(PassThroughProxy): + def __init__(self, fn_name, obj): + super().__init__(fn_name, obj) + self.unit = obj.unit + + def __call__(self, *args): + converted_args = [] + for a in args: + try: + converted_args.append(a.convert_to(self.unit)) + except AttributeError: + converted_args.append(TaggedValue(a, self.unit)) + converted_args = tuple([c.get_value() for c in converted_args]) + return super().__call__(*converted_args) + + +class ConvertReturnProxy(PassThroughProxy): + def __init__(self, fn_name, obj): + super().__init__(fn_name, obj) + self.unit = obj.unit + + def __call__(self, *args): + ret = super().__call__(*args) + return (NotImplemented if ret is NotImplemented + else TaggedValue(ret, self.unit)) + + +class ConvertAllProxy(PassThroughProxy): + def __init__(self, fn_name, obj): + super().__init__(fn_name, obj) + self.unit = obj.unit + + def __call__(self, *args): + converted_args = [] + arg_units = [self.unit] + for a in args: + if hasattr(a, 'get_unit') and not hasattr(a, 'convert_to'): + # If this argument has a unit type but no conversion ability, + # this operation is prohibited. + return NotImplemented + + if hasattr(a, 'convert_to'): + try: + a = a.convert_to(self.unit) + except Exception: + pass + arg_units.append(a.get_unit()) + converted_args.append(a.get_value()) + else: + converted_args.append(a) + if hasattr(a, 'get_unit'): + arg_units.append(a.get_unit()) + else: + arg_units.append(None) + converted_args = tuple(converted_args) + ret = super().__call__(*converted_args) + if ret is NotImplemented: + return NotImplemented + ret_unit = unit_resolver(self.fn_name, arg_units) + if ret_unit is NotImplemented: + return NotImplemented + return TaggedValue(ret, ret_unit) + + +class TaggedValue(metaclass=TaggedValueMeta): + + _proxies = {'__add__': ConvertAllProxy, + '__sub__': ConvertAllProxy, + '__mul__': ConvertAllProxy, + '__rmul__': ConvertAllProxy, + '__cmp__': ConvertAllProxy, + '__lt__': ConvertAllProxy, + '__gt__': ConvertAllProxy, + '__len__': PassThroughProxy} + + def __new__(cls, value, unit): + # generate a new subclass for value + value_class = type(value) + try: + subcls = type(f'TaggedValue_of_{value_class.__name__}', + (cls, value_class), {}) + return object.__new__(subcls) + except TypeError: + return object.__new__(cls) + + def __init__(self, value, unit): + self.value = value + self.unit = unit + self.proxy_target = self.value + + def __copy__(self): + return TaggedValue(self.value, self.unit) + + def __getattribute__(self, name): + if name.startswith('__'): + return object.__getattribute__(self, name) + variable = object.__getattribute__(self, 'value') + if hasattr(variable, name) and name not in self.__class__.__dict__: + return getattr(variable, name) + return object.__getattribute__(self, name) + + def __array__(self, dtype=object, copy=False): + return np.asarray(self.value, dtype) + + def __array_wrap__(self, array, context=None, return_scalar=False): + return TaggedValue(array, self.unit) + + def __repr__(self): + return f'TaggedValue({self.value!r}, {self.unit!r})' + + def __str__(self): + return f"{self.value} in {self.unit}" + + def __len__(self): + return len(self.value) + + if parse_version(np.__version__) >= parse_version('1.20'): + def __getitem__(self, key): + return TaggedValue(self.value[key], self.unit) + + def __iter__(self): + # Return a generator expression rather than use `yield`, so that + # TypeError is raised by iter(self) if appropriate when checking for + # iterability. + return (TaggedValue(inner, self.unit) for inner in self.value) + + def get_compressed_copy(self, mask): + new_value = np.ma.masked_array(self.value, mask=mask).compressed() + return TaggedValue(new_value, self.unit) + + def convert_to(self, unit): + if unit == self.unit or not unit: + return self + try: + new_value = self.unit.convert_value_to(self.value, unit) + except AttributeError: + new_value = self + return TaggedValue(new_value, unit) + + def get_value(self): + return self.value + + def get_unit(self): + return self.unit + + +class BasicUnit: + def __init__(self, name, fullname=None): + self.name = name + if fullname is None: + fullname = name + self.fullname = fullname + self.conversions = dict() + + def __repr__(self): + return f'BasicUnit({self.name})' + + def __str__(self): + return self.fullname + + def __call__(self, value): + return TaggedValue(value, self) + + def __mul__(self, rhs): + value = rhs + unit = self + if hasattr(rhs, 'get_unit'): + value = rhs.get_value() + unit = rhs.get_unit() + unit = unit_resolver('__mul__', (self, unit)) + if unit is NotImplemented: + return NotImplemented + return TaggedValue(value, unit) + + def __rmul__(self, lhs): + return self*lhs + + def __array_wrap__(self, array, context=None, return_scalar=False): + return TaggedValue(array, self) + + def __array__(self, t=None, context=None, copy=False): + ret = np.array(1) + if t is not None: + return ret.astype(t) + else: + return ret + + def add_conversion_factor(self, unit, factor): + def convert(x): + return x*factor + self.conversions[unit] = convert + + def add_conversion_fn(self, unit, fn): + self.conversions[unit] = fn + + def get_conversion_fn(self, unit): + return self.conversions[unit] + + def convert_value_to(self, value, unit): + conversion_fn = self.conversions[unit] + ret = conversion_fn(value) + return ret + + def get_unit(self): + return self + + +class UnitResolver: + def addition_rule(self, units): + for unit_1, unit_2 in zip(units[:-1], units[1:]): + if unit_1 != unit_2: + return NotImplemented + return units[0] + + def multiplication_rule(self, units): + non_null = [u for u in units if u] + if len(non_null) > 1: + return NotImplemented + return non_null[0] + + op_dict = { + '__mul__': multiplication_rule, + '__rmul__': multiplication_rule, + '__add__': addition_rule, + '__radd__': addition_rule, + '__sub__': addition_rule, + '__rsub__': addition_rule} + + def __call__(self, operation, units): + if operation not in self.op_dict: + return NotImplemented + + return self.op_dict[operation](self, units) + + +unit_resolver = UnitResolver() + +cm = BasicUnit('cm', 'centimeters') +inch = BasicUnit('inch', 'inches') +inch.add_conversion_factor(cm, 2.54) +cm.add_conversion_factor(inch, 1/2.54) + +radians = BasicUnit('rad', 'radians') +degrees = BasicUnit('deg', 'degrees') +radians.add_conversion_factor(degrees, 180.0/np.pi) +degrees.add_conversion_factor(radians, np.pi/180.0) + +secs = BasicUnit('s', 'seconds') +hertz = BasicUnit('Hz', 'Hertz') +minutes = BasicUnit('min', 'minutes') + +secs.add_conversion_fn(hertz, lambda x: 1./x) +secs.add_conversion_factor(minutes, 1/60.0) + + +# radians formatting +def rad_fn(x, pos=None): + if x >= 0: + n = int((x / np.pi) * 2.0 + 0.25) + else: + n = int((x / np.pi) * 2.0 - 0.25) + + if n == 0: + return '0' + elif n == 1: + return r'$\pi/2$' + elif n == 2: + return r'$\pi$' + elif n == -1: + return r'$-\pi/2$' + elif n == -2: + return r'$-\pi$' + elif n % 2 == 0: + return fr'${n//2}\pi$' + else: + return fr'${n}\pi/2$' + + +class BasicUnitConverter(units.ConversionInterface): + @staticmethod + def axisinfo(unit, axis): + """Return AxisInfo instance for x and unit.""" + + if unit == radians: + return units.AxisInfo( + majloc=ticker.MultipleLocator(base=np.pi/2), + majfmt=ticker.FuncFormatter(rad_fn), + label=unit.fullname, + ) + elif unit == degrees: + return units.AxisInfo( + majloc=ticker.AutoLocator(), + majfmt=ticker.FormatStrFormatter(r'$%i^\circ$'), + label=unit.fullname, + ) + elif unit is not None: + if hasattr(unit, 'fullname'): + return units.AxisInfo(label=unit.fullname) + elif hasattr(unit, 'unit'): + return units.AxisInfo(label=unit.unit.fullname) + return None + + @staticmethod + def convert(val, unit, axis): + if np.iterable(val): + if isinstance(val, np.ma.MaskedArray): + val = val.astype(float).filled(np.nan) + out = np.empty(len(val)) + for i, thisval in enumerate(val): + if np.ma.is_masked(thisval): + out[i] = np.nan + else: + try: + out[i] = thisval.convert_to(unit).get_value() + except AttributeError: + out[i] = thisval + return out + if np.ma.is_masked(val): + return np.nan + else: + return val.convert_to(unit).get_value() + + @staticmethod + def default_units(x, axis): + """Return the default unit for x or None.""" + if np.iterable(x): + for thisx in x: + return thisx.unit + return x.unit + + +def cos(x): + if np.iterable(x): + return [math.cos(val.convert_to(radians).get_value()) for val in x] + else: + return math.cos(x.convert_to(radians).get_value()) + + +units.registry[BasicUnit] = units.registry[TaggedValue] = BasicUnitConverter() diff --git a/PinnedImages/data.json b/PinnedImages/data.json new file mode 100644 index 0000000..b36abd3 --- /dev/null +++ b/PinnedImages/data.json @@ -0,0 +1,27 @@ +{"data": [{"node": "CP-ip-10-0-4-119", "date_reported": "2024-08-30 12:55:39", "date_last_pull": "2024-08-30 12:55:34.341583069"}, +{"node": "CP-ip-10-0-54-82", "date_reported": "2024-08-30 12:59:48", "date_last_pull": "2024-08-30 12:59:48.818899738"}, +{"node": "CP-ip-10-0-78-213", "date_reported": "2024-08-30 13:00:25", "date_last_pull": "2024-08-30 13:00:25.781223134"}, +{"node": "ip-10-0-1-94", "date_reported": "2024-08-30 12:43:20", "date_last_pull": "2024-08-30 12:52:38.980174844"}, +{"node": "ip-10-0-10-185", "date_reported": "2024-08-30 12:41:32", "date_last_pull": "2024-08-30 12:41:31.908352572"}, +{"node": "ip-10-0-100-76", "date_reported": "2024-08-30 13:10:38", "date_last_pull": "2024-08-30 12:41:37.373057338"}, +{"node": "ip-10-0-105-229", "date_reported": "2024-08-30 13:14:12", "date_last_pull": "2024-08-30 12:41:36.899732492"}, +{"node": "ip-10-0-106-55", "date_reported": "2024-08-30 13:07:02", "date_last_pull": "2024-08-30 12:41:35.331967748"}, +{"node": "ip-10-0-108-233", "date_reported": "2024-08-30 13:08:51", "date_last_pull": "2024-08-30 12:41:40.102396364"}, +{"node": "ip-10-0-111-21", "date_reported": "2024-08-30 13:12:24", "date_last_pull": "2024-08-30 12:41:34.100906413"}, +{"node": "ip-10-0-125-170", "date_reported": "2024-08-30 13:15:57", "date_last_pull": "2024-08-30 12:41:33.108862596"}, +{"node": "ip-10-0-19-165", "date_reported": "2024-08-30 12:44:16", "date_last_pull": "2024-08-30 12:43:55.399000634"}, +{"node": "ip-10-0-3-52", "date_reported": "2024-08-30 12:45:14", "date_last_pull": "2024-08-30 12:44:33.764803400"}, +{"node": "ip-10-0-31-23", "date_reported": "2024-08-30 12:43:57", "date_last_pull": "2024-08-30 12:43:57.045098611"}, +{"node": "ip-10-0-34-175", "date_reported": "2024-08-30 12:47:22", "date_last_pull": "2024-08-30 12:41:35.393525125"}, +{"node": "ip-10-0-37-99", "date_reported": "2024-08-30 12:49:12", "date_last_pull": "2024-08-30 12:41:35.021965121"}, +{"node": "ip-10-0-48-219", "date_reported": "2024-08-30 12:45:35", "date_last_pull": "2024-08-30 12:41:33.289663599"}, +{"node": "ip-10-0-49-221", "date_reported": "2024-08-30 12:43:48", "date_last_pull": "2024-08-30 12:41:39.145650080"}, +{"node": "ip-10-0-58-52", "date_reported": "2024-08-30 12:50:59", "date_last_pull": "2024-08-30 12:41:37.206940345"}, +{"node": "ip-10-0-6-113", "date_reported": "2024-08-30 12:41:40", "date_last_pull": "2024-08-30 12:41:40.842272388"}, +{"node": "ip-10-0-62-31", "date_reported": "2024-08-30 12:52:47", "date_last_pull": "2024-08-30 12:41:37.147783070"}, +{"node": "ip-10-0-66-207", "date_reported": "2024-08-30 13:00:25", "date_last_pull": "2024-08-30 12:41:37.040154898"}, +{"node": "ip-10-0-71-73", "date_reported": "2024-08-30 13:02:07", "date_last_pull": "2024-08-30 12:41:39.868638546"}, +{"node": "ip-10-0-75-105", "date_reported": "2024-08-30 13:05:15", "date_last_pull": "2024-08-30 12:41:33.260423643"}, +{"node": "ip-10-0-77-120", "date_reported": "2024-08-30 12:58:33", "date_last_pull": "2024-08-30 12:41:43.080934052"}, +{"node": "ip-10-0-84-251", "date_reported": "2024-08-30 12:54:33", "date_last_pull": "2024-08-30 12:41:44.379636882"}, +{"node": "ip-10-0-95-128", "date_reported": "2024-08-30 12:56:48", "date_last_pull": "2024-08-30 12:41:33.604028822"}]} \ No newline at end of file diff --git a/PinnedImages/time_applying.json b/PinnedImages/time_applying.json new file mode 100644 index 0000000..324400e --- /dev/null +++ b/PinnedImages/time_applying.json @@ -0,0 +1,102 @@ +{"data": [ + {"node": "master", "worker_count": "3", "date_reported": "2024-09-10 16:31:16", "date_applied": "2024-09-10 16:02:09"}, + {"node": "master", "worker_count": "3", "date_reported": "2024-09-10 16:36:21", "date_applied": "2024-09-10 16:02:09"}, + {"node": "master", "worker_count": "3", "date_reported": "2024-09-10 16:36:25", "date_applied": "2024-09-10 16:02:09"}, + {"node": "worker", "worker_count": "3", "date_reported": "2024-09-10 16:17:56", "date_applied": "2024-09-10 16:02:09"}, + {"node": "worker", "worker_count": "3", "date_reported": "2024-09-10 16:18:02", "date_applied": "2024-09-10 16:02:09"}, + {"node": "worker", "worker_count": "3", "date_reported": "2024-09-10 16:21:52", "date_applied": "2024-09-10 16:02:09"}, + {"node": "master", "worker_count": "3", "date_reported": "2024-09-11 18:53:04", "date_applied": "2024-09-11 18:21:57"}, + {"node": "master", "worker_count": "3", "date_reported": "2024-09-11 18:51:09", "date_applied": "2024-09-11 18:21:57"}, + {"node": "master", "worker_count": "3", "date_reported": "2024-09-11 18:51:32", "date_applied": "2024-09-11 18:21:57"}, + {"node": "worker", "worker_count": "3", "date_reported": "2024-09-11 18:35:12", "date_applied": "2024-09-11 18:21:57"}, + {"node": "worker", "worker_count": "3", "date_reported": "2024-09-11 18:35:13", "date_applied": "2024-09-11 18:21:57"}, + {"node": "worker", "worker_count": "3", "date_reported": "2024-09-11 18:34:47", "date_applied": "2024-09-11 18:21:57"}, + {"node": "master", "worker_count": "3", "date_reported": "2024-09-12 07:02:59", "date_applied": "2024-09-12 06:28:40"}, + {"node": "master", "worker_count": "3", "date_reported": "2024-09-12 06:58:44", "date_applied": "2024-09-12 06:28:40"}, + {"node": "master", "worker_count": "3", "date_reported": "2024-09-12 07:04:12", "date_applied": "2024-09-12 06:28:40"}, + {"node": "worker", "worker_count": "3", "date_reported": "2024-09-12 06:43:32", "date_applied": "2024-09-12 06:28:40"}, + {"node": "worker", "worker_count": "3", "date_reported": "2024-09-12 06:43:33", "date_applied": "2024-09-12 06:28:40"}, + {"node": "worker", "worker_count": "3", "date_reported": "2024-09-12 06:46:32", "date_applied": "2024-09-12 06:28:40"}, + {"node": "master", "worker_count": "24", "date_reported": "2024-09-12 12:31:29", "date_applied": "2024-09-12 11:57:07"}, + {"node": "master", "worker_count": "24", "date_reported": "2024-09-12 12:26:39", "date_applied": "2024-09-12 11:57:07"}, + {"node": "master", "worker_count": "24", "date_reported": "2024-09-12 12:32:04", "date_applied": "2024-09-12 11:57:07"}, + {"node": "worker", "worker_count": "24", "date_reported": "2024-09-12 12:15:46", "date_applied": "2024-09-12 11:57:07"}, + {"node": "worker", "worker_count": "24", "date_reported": "2024-09-12 12:37:48", "date_applied": "2024-09-12 11:57:07"}, + {"node": "worker", "worker_count": "24", "date_reported": "2024-09-12 12:43:07", "date_applied": "2024-09-12 11:57:07"}, + {"node": "worker", "worker_count": "24", "date_reported": "2024-09-12 12:39:34", "date_applied": "2024-09-12 11:57:07"}, + {"node": "worker", "worker_count": "24", "date_reported": "2024-09-12 12:41:21", "date_applied": "2024-09-12 11:57:07"}, + {"node": "worker", "worker_count": "24", "date_reported": "2024-09-12 12:46:33", "date_applied": "2024-09-12 11:57:07"}, + {"node": "worker", "worker_count": "24", "date_reported": "2024-09-12 12:14:06", "date_applied": "2024-09-12 11:57:07"}, + {"node": "worker", "worker_count": "24", "date_reported": "2024-09-12 12:15:18", "date_applied": "2024-09-12 11:57:07"}, + {"node": "worker", "worker_count": "24", "date_reported": "2024-09-12 12:11:38", "date_applied": "2024-09-12 11:57:07"}, + {"node": "worker", "worker_count": "24", "date_reported": "2024-09-12 12:13:27", "date_applied": "2024-09-12 11:57:07"}, + {"node": "worker", "worker_count": "24", "date_reported": "2024-09-12 12:24:16", "date_applied": "2024-09-12 11:57:07"}, + {"node": "worker", "worker_count": "24", "date_reported": "2024-09-12 12:16:35", "date_applied": "2024-09-12 11:57:07"}, + {"node": "worker", "worker_count": "24", "date_reported": "2024-09-12 12:21:59", "date_applied": "2024-09-12 11:57:07"}, + {"node": "worker", "worker_count": "24", "date_reported": "2024-09-12 12:14:47", "date_applied": "2024-09-12 11:57:07"}, + {"node": "worker", "worker_count": "24", "date_reported": "2024-09-12 12:18:29", "date_applied": "2024-09-12 11:57:07"}, + {"node": "worker", "worker_count": "24", "date_reported": "2024-09-12 12:20:10", "date_applied": "2024-09-12 11:57:07"}, + {"node": "worker", "worker_count": "24", "date_reported": "2024-09-12 12:33:42", "date_applied": "2024-09-12 11:57:07"}, + {"node": "worker", "worker_count": "24", "date_reported": "2024-09-12 12:30:08", "date_applied": "2024-09-12 11:57:07"}, + {"node": "worker", "worker_count": "24", "date_reported": "2024-09-12 12:26:35", "date_applied": "2024-09-12 11:57:07"}, + {"node": "worker", "worker_count": "24", "date_reported": "2024-09-12 12:35:29", "date_applied": "2024-09-12 11:57:07"}, + {"node": "worker", "worker_count": "24", "date_reported": "2024-09-12 12:31:56", "date_applied": "2024-09-12 11:57:07"}, + {"node": "worker", "worker_count": "24", "date_reported": "2024-09-12 12:28:22", "date_applied": "2024-09-12 11:57:07"}, + {"node": "worker", "worker_count": "24", "date_reported": "2024-09-12 12:11:46", "date_applied": "2024-09-12 11:57:07"}, + {"node": "worker", "worker_count": "24", "date_reported": "2024-09-12 12:44:51", "date_applied": "2024-09-12 11:57:07"}, + {"node": "master", "worker_count": "24", "date_reported": "2024-09-12 17:26:37", "date_applied": "2024-09-12 16:57:23"}, + {"node": "master", "worker_count": "24", "date_reported": "2024-09-12 17:25:56", "date_applied": "2024-09-12 16:57:23"}, + {"node": "master", "worker_count": "24", "date_reported": "2024-09-12 17:26:15", "date_applied": "2024-09-12 16:57:23"}, + {"node": "worker", "worker_count": "24", "date_reported": "2024-09-12 17:47:28", "date_applied": "2024-09-12 16:57:23"}, + {"node": "worker", "worker_count": "24", "date_reported": "2024-09-12 17:40:19", "date_applied": "2024-09-12 16:57:23"}, + {"node": "worker", "worker_count": "24", "date_reported": "2024-09-12 17:38:36", "date_applied": "2024-09-12 16:57:23"}, + {"node": "worker", "worker_count": "24", "date_reported": "2024-09-12 17:42:06", "date_applied": "2024-09-12 16:57:23"}, + {"node": "worker", "worker_count": "24", "date_reported": "2024-09-12 17:43:54", "date_applied": "2024-09-12 16:57:23"}, + {"node": "worker", "worker_count": "24", "date_reported": "2024-09-12 17:10:34", "date_applied": "2024-09-12 16:57:23"}, + {"node": "worker", "worker_count": "24", "date_reported": "2024-09-12 17:13:17", "date_applied": "2024-09-12 16:57:23"}, + {"node": "worker", "worker_count": "24", "date_reported": "2024-09-12 17:09:36", "date_applied": "2024-09-12 16:57:23"}, + {"node": "worker", "worker_count": "24", "date_reported": "2024-09-12 17:08:58", "date_applied": "2024-09-12 16:57:23"}, + {"node": "worker", "worker_count": "24", "date_reported": "2024-09-12 17:11:21", "date_applied": "2024-09-12 16:57:23"}, + {"node": "worker", "worker_count": "24", "date_reported": "2024-09-12 17:17:33", "date_applied": "2024-09-12 16:57:23"}, + {"node": "worker", "worker_count": "24", "date_reported": "2024-09-12 17:24:46", "date_applied": "2024-09-12 16:57:23"}, + {"node": "worker", "worker_count": "24", "date_reported": "2024-09-12 17:15:45", "date_applied": "2024-09-12 16:57:23"}, + {"node": "worker", "worker_count": "24", "date_reported": "2024-09-12 17:19:21", "date_applied": "2024-09-12 16:57:23"}, + {"node": "worker", "worker_count": "24", "date_reported": "2024-09-12 17:23:00", "date_applied": "2024-09-12 16:57:23"}, + {"node": "worker", "worker_count": "24", "date_reported": "2024-09-12 17:21:08", "date_applied": "2024-09-12 16:57:23"}, + {"node": "worker", "worker_count": "24", "date_reported": "2024-09-12 17:27:54", "date_applied": "2024-09-12 16:57:23"}, + {"node": "worker", "worker_count": "24", "date_reported": "2024-09-12 17:29:46", "date_applied": "2024-09-12 16:57:23"}, + {"node": "worker", "worker_count": "24", "date_reported": "2024-09-12 17:31:28", "date_applied": "2024-09-12 16:57:23"}, + {"node": "worker", "worker_count": "24", "date_reported": "2024-09-12 17:13:28", "date_applied": "2024-09-12 16:57:23"}, + {"node": "worker", "worker_count": "24", "date_reported": "2024-09-12 17:36:49", "date_applied": "2024-09-12 16:57:23"}, + {"node": "worker", "worker_count": "24", "date_reported": "2024-09-12 17:35:11", "date_applied": "2024-09-12 16:57:23"}, + {"node": "worker", "worker_count": "24", "date_reported": "2024-09-12 17:33:18", "date_applied": "2024-09-12 16:57:23"}, + {"node": "worker", "worker_count": "24", "date_reported": "2024-09-12 17:45:39", "date_applied": "2024-09-12 16:57:23"}, + {"node": "master", "worker_count": "24", "date_reported": "2024-09-13 15:34:09", "date_applied": "2024-09-13 15:04:33"}, + {"node": "master", "worker_count": "24", "date_reported": "2024-09-13 15:39:33", "date_applied": "2024-09-13 15:04:33"}, + {"node": "master", "worker_count": "24", "date_reported": "2024-09-13 15:38:13", "date_applied": "2024-09-13 15:04:33"}, + {"node": "worker", "worker_count": "24", "date_reported": "2024-09-13 15:43:21", "date_applied": "2024-09-13 15:04:33"}, + {"node": "worker", "worker_count": "24", "date_reported": "2024-09-13 15:50:35", "date_applied": "2024-09-13 15:04:33"}, + {"node": "worker", "worker_count": "24", "date_reported": "2024-09-13 15:52:32", "date_applied": "2024-09-13 15:04:33"}, + {"node": "worker", "worker_count": "24", "date_reported": "2024-09-13 15:46:58", "date_applied": "2024-09-13 15:04:33"}, + {"node": "worker", "worker_count": "24", "date_reported": "2024-09-13 15:22:50", "date_applied": "2024-09-13 15:04:33"}, + {"node": "worker", "worker_count": "24", "date_reported": "2024-09-13 15:21:19", "date_applied": "2024-09-13 15:04:33"}, + {"node": "worker", "worker_count": "24", "date_reported": "2024-09-13 15:19:14", "date_applied": "2024-09-13 15:04:33"}, + {"node": "worker", "worker_count": "24", "date_reported": "2024-09-13 15:23:46", "date_applied": "2024-09-13 15:04:33"}, + {"node": "worker", "worker_count": "24", "date_reported": "2024-09-13 15:21:46", "date_applied": "2024-09-13 15:04:33"}, + {"node": "worker", "worker_count": "24", "date_reported": "2024-09-13 15:18:59", "date_applied": "2024-09-13 15:04:33"}, + {"node": "worker", "worker_count": "24", "date_reported": "2024-09-13 15:22:22", "date_applied": "2024-09-13 15:04:33"}, + {"node": "worker", "worker_count": "24", "date_reported": "2024-09-13 15:29:35", "date_applied": "2024-09-13 15:04:33"}, + {"node": "worker", "worker_count": "24", "date_reported": "2024-09-13 15:24:12", "date_applied": "2024-09-13 15:04:33"}, + {"node": "worker", "worker_count": "24", "date_reported": "2024-09-13 15:21:11", "date_applied": "2024-09-13 15:04:33"}, + {"node": "worker", "worker_count": "24", "date_reported": "2024-09-13 15:26:02", "date_applied": "2024-09-13 15:04:33"}, + {"node": "worker", "worker_count": "24", "date_reported": "2024-09-13 15:27:50", "date_applied": "2024-09-13 15:04:33"}, + {"node": "worker", "worker_count": "24", "date_reported": "2024-09-13 15:32:43", "date_applied": "2024-09-13 15:04:33"}, + {"node": "worker", "worker_count": "24", "date_reported": "2024-09-13 15:34:31", "date_applied": "2024-09-13 15:04:33"}, + {"node": "worker", "worker_count": "24", "date_reported": "2024-09-13 15:36:16", "date_applied": "2024-09-13 15:04:33"}, + {"node": "worker", "worker_count": "24", "date_reported": "2024-09-13 15:39:48", "date_applied": "2024-09-13 15:04:33"}, + {"node": "worker", "worker_count": "24", "date_reported": "2024-09-13 15:41:35", "date_applied": "2024-09-13 15:04:33"}, + {"node": "worker", "worker_count": "24", "date_reported": "2024-09-13 15:38:00", "date_applied": "2024-09-13 15:04:33"}, + {"node": "worker", "worker_count": "24", "date_reported": "2024-09-13 15:48:46", "date_applied": "2024-09-13 15:04:33"}, + {"node": "worker", "worker_count": "24", "date_reported": "2024-09-13 15:45:12", "date_applied": "2024-09-13 15:04:33"} +] +} \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..431431a --- /dev/null +++ b/README.md @@ -0,0 +1,122 @@ +

PinnedImageSet testing

+ +
+ +[![Status](https://img.shields.io/badge/status-active-success.svg)]() [![GitHub Issues](https://img.shields.io/github/issues/cloud-bulldozer/pinned-images-testing.svg)](https://github.com/cloud-bulldozer/pinned-images-testing/issues) [![GitHub Pull Requests](https://img.shields.io/github/issues-pr/cloud-bulldozer/pinned-images-testing.svg)](https://github.com/cloud-bulldozer/pinned-images-testing/pulls) [![License](https://img.shields.io/badge/license-apache%202.0-blue.svg)](/LICENSE) + +
+ +--- + +

Scripts and steps to ease PinnedImageSet feature +
+

+ +## Table of Contents + +- [About](#about) +- [Getting Started](#getting_started) +- [Folder Structure](#folder_structure) +- [Prerequisites](#prerequisites) +- [Running](#running) +- [Check the feature](#check_feature) +- [Upgrade](#upgrade) + +## About + +The PinnedImageSet feature main focus is to make upgrade process faster, by pre-downloading images to the nodes. + +To test what the impact on the process is we need to run a set of steps to meassure it. To automate most of the steps this repo contains a set of scripts that can make it easier and faster. + +## Getting Started + +Clone this repo: + +`git clone git@github.com:cloud-bulldozer/pinned-images-testing.git` + +### Folder structure + +#### root + +Here you will find basic information to the repository and the main scripts that we run to obtain data and results. + +- [pinned.sh](./pinned.sh) Applies PinnedImageSet feature to the cluster +- [upgrade.sh](./upgrade.sh) Applies upgrade to the cluster +- [transition-time.sh](./transition-time.sh) Display the `PinnedImageSetsProgressing` for each node +- [featuregate.yaml](./featuregate.yaml) CRD to enable gated features. +- [infra.mcp.yaml](./infra.mcp.yaml) CRD to create the Infra nodes MachinCOpnfigPool. +- [featuregate.yaml](./featuregate.yaml) CRD to enable gated features. + +#### templates + +- [pinned-images.yaml.template](pinned-images.yaml.template) Template that is used to generate the PinnedImageSet CRD. + +#### processed + +Files will be generated into this folder. + +- [check_images.sh](check_images.sh) Script that can be used to check if the images have been downloaded on each node + +#### PinnedImages + +Jupyter Notebook used to help with the creation of the graphs. + +#### example + +- [machineconfignode.infra.example.yaml](./machineconfignode.infra.example.yaml) CRD example file for machineconfignode for an Infra node + +#### extras + +Bits of code or small bash scripts to help out, not completelly related to the test + +### Prerequisites + +Have an OpenShift cluster created in AWS. + +The scritps will assume that the KUBECONFIG env var is set. + +### Running + +A step by step of how to run it: + +First go to `pinned.sh` and be sure to modify the versions that you want + +``` +export ocp_version_channel=${OCP_VERSION_CHANNEL:-candidate} +export ocp_version="4.17" +export rel=4.17.0-rc.2 +``` + +When you run the script, it will do the following steps + +- Do an `oc adm release extract` of this version `$rel` +- Install `dittybopper` on the cluster +- Lift Cluster protections and enable Gated Features +- Generate the `PinnedImagesSet` CRD and the `images.txt` in the `processed` folder +- Apply the PinnedImageSet CRD, print the start date, and wait for it to finish. + + +### Check the feature + +After the `pinned.sh` script is finished, you can check transition timmings for each node running the `transition-time.sh` script. + +You can also go into each node and use the `check_images.sh` script to see if all images where pulled and the logs for the pulled images. + +> Be sure to update the `check_images.sh` script and put the list of images in the `images.txt` file to the placehodler in the script. + + +### Upgrade + +When you have checked what you need to know of your cluster, you can go ahead and run the `upgrade.sh` script. This is based on the ROSA upgrade sccript, and should print out the timmings of the Upgrade. + +> Check the versions on that script + +``` +export ocp_version_channel=${OCP_VERSION_CHANNEL:-candidate} +export ocp_version="4.17" +export VERSION="4.17.0-rc.2" +``` + + + + diff --git a/example/machineconfignode.infra.example.yaml b/example/machineconfignode.infra.example.yaml new file mode 100644 index 0000000..c42f458 --- /dev/null +++ b/example/machineconfignode.infra.example.yaml @@ -0,0 +1,17 @@ +# Repeat one of this for each node. +apiVersion: machineconfiguration.openshift.io/v1alpha1 +kind: MachineConfigNode +metadata: + name: ip-10-10-10-10.us-west-2 # name of the node + ownerReferences: + - apiVersion: v1 + kind: Node + name: ip-10-10-10-10.us-west-2 # name of the node + uid: 47842fdf-b61c-4ba3-bcee-a6295a8ed16d # Obtained by inspecting the node +spec: + configVersion: + desired: rendered-infra-9146f139e590128383addd85021d1781 # Generated name of the MachineConfigPool for the infra nodes + node: + name: ip-10-10-10-10.us-west-2 # name of the node + pool: + name: infra # name of the MachineConfigPool diff --git a/extras/graphana graph b/extras/graphana graph new file mode 100644 index 0000000..0c34f06 --- /dev/null +++ b/extras/graphana graph @@ -0,0 +1,4 @@ +# Query to use in graphana to see disk Utilization + +sum(max by (device) (node_filesystem_size_bytes{instance=~"$_master_node", device=~"/.*"})) - sum(max by (device) (node_filesystem_avail_bytes{instance=~"$_master_node", device=~"/.*"})) or + sum (max by (volume) (windows_logical_disk_size_bytes{instance=~"$_master_node"})) - sum(max by (volume) (windows_logical_disk_free_bytes{instance=~"$_master_node"})) \ No newline at end of file diff --git a/featuregate.yaml b/featuregate.yaml new file mode 100644 index 0000000..d786629 --- /dev/null +++ b/featuregate.yaml @@ -0,0 +1,8 @@ +apiVersion: config.openshift.io/v1 +kind: FeatureGate +metadata: + annotations: + include.release.openshift.io/self-managed-high-availability: "true" + name: cluster +spec: + featureSet: TechPreviewNoUpgrade diff --git a/infra.mcp.yaml b/infra.mcp.yaml new file mode 100644 index 0000000..8b0aded --- /dev/null +++ b/infra.mcp.yaml @@ -0,0 +1,11 @@ +apiVersion: machineconfiguration.openshift.io/v1 +kind: MachineConfigPool +metadata: + name: infra +spec: + machineConfigSelector: + matchExpressions: + - {key: machineconfiguration.openshift.io/role, operator: In, values: [worker,infra]} + nodeSelector: + matchLabels: + node-role.kubernetes.io/infra: "" \ No newline at end of file diff --git a/pinned.sh b/pinned.sh new file mode 100755 index 0000000..a254381 --- /dev/null +++ b/pinned.sh @@ -0,0 +1,140 @@ +#!/bin/bash + +# Exit immediately if a command exits with a non-zero status +set -e +# Uncomment to enable debugging +set -x + +export ocp_version_channel=${OCP_VERSION_CHANNEL:-candidate} +export ocp_version="4.17" +export rel=4.17.0-rc.2 +export rel_dir=release-$rel +export tempalte_dir=templates +export processed_dir=processed +export work_dir=$(pwd) + +clone_and_install_dittybopper() { + rm -rf performance-dashboards + # Clone and install dittybopper + git clone --depth 1 https://github.com/cloud-bulldozer/performance-dashboards.git + cd performance-dashboards/dittybopper + ./deploy.sh + cd ../.. +} + +disable_cluster_protections() { + RESOURCE_NAME="sre-techpreviewnoupgrade-validation" # Enable Alpha features + API_GROUP="admissionregistration.k8s.io" + API_RESOURCE="validatingwebhookconfigurations" + + ( + OUTPUT=$(oc get $API_RESOURCE.$API_GROUP/$RESOURCE_NAME -o json) + + if echo "$OUTPUT" | jq '.items' &>/dev/null; then + echo "Resource found, deleting..." + oc delete $API_RESOURCE.$API_GROUP/$RESOURCE_NAME + else + echo "Resource not found" + fi + ) 2>&1 || true # If the subshell exits with a non-zero status (i.e., an error), we'll still continue running the script. +} + +oc adm upgrade channel ${ocp_version_channel}-${ocp_version} +rm -rf $rel_dir +rm -f $work_dir/$processed_dir/images.txt +oc adm release extract $rel --to=$rel_dir + +# Analize images +cd $rel_dir +# export IMAGES=$(cat image-references | jq -r '.spec.tags[].from.name' | sed 's/^/ - /; s/$/,/' | sed '$ s/,$//') +export IMAGES=$(cat image-references | jq -r '.spec.tags[].from.name' | sed 's/^/ - name: /') +cat image-references | jq -r '.spec.tags[] | "\(.from.name)"' >> $work_dir/$processed_dir/images.txt + + +# Build pinned images yamls +cd .. +export input="$tempalte_dir/pinned-images.yaml.template" +export output="$processed_dir/pinned-images.yaml" +envsubst <"$input" >"$output" + +clone_and_install_dittybopper + +disable_cluster_protections + +# Enable beta features +oc apply -f featuregate.yaml + +# Configuration +RETRY_DELAY=60 # Delay between retries in seconds +MAX_RETRIES=5 +COMMAND="oc apply -f $processed_dir/pinned-images.yaml --dry-run=server --validate" +continue="false" +retry_count=0 + +# Retry loop +while [[ "$continue" != "true" && $retry_count -lt $MAX_RETRIES ]]; do + # Validate Pinned image set + if $COMMAND; then + continue="true" + else + retry_count=$((retry_count + 1)) + echo "Command failed with exit code $?. Retrying ($retry_count/$MAX_RETRIES) in $RETRY_DELAY seconds..." + sleep $RETRY_DELAY + fi +done + +if [[ $retry_count -eq $MAX_RETRIES ]]; then + echo "Max retry count reached" + exit 1 +fi + +# Apply Pinned image set +date --rfc-3339=seconds +oc apply -f $output + +# oc get PinnedImageSet -o wide +oc project openshift-machine-config-operator +oc get pinnedimageset -o wide --all-namespaces +oc get all +oc get machineconfigpool -o wide + +sleep 60 +completed1="False" +skip1="False" +completed2="False" +skip2="False" +while [[ "$completed1" != "True" && "$completed2" != "True" ]]; do + completed1=$(oc get machineconfigpool master -o jsonpath='{.status.conditions[?(@.type=="Updated")].status}') + completed2=$(oc get machineconfigpool worker -o jsonpath='{.status.conditions[?(@.type=="Updated")].status}') + if [[ $completed1 = "True" && "$skip1" = "False" ]]; then + lasttransitiontime1=$(oc get machineconfigpool master -o jsonpath='{.status.conditions[?(@.type=="Updated")].lastTransitionTime}') + echo "Master Completion at: $lasttransitiontime1" + skip1="True" + fi + if [[ $completed2 = "True" && "$skip2" = "False" ]]; then + lasttransitiontime2=$(oc get machineconfigpool worker -o jsonpath='{.status.conditions[?(@.type=="Updated")].lastTransitionTime}') + echo "Worker Completion at: $lasttransitiontime2" + skip2="True" + fi + if [[ "$skip1" = "False" || "$skip2" = "False" ]]; then + echo "Sleeping for 60 seconds..." + sleep 60 + fi +done + + +## Login into etcd pod to disable feature gate +# oc -n openshift-etcd rsh $(oc -n openshift-etcd get pod --no-headers -o Name | grep etcd-ip | head -n 1) + +## Get the value +# etcdctl get /kubernetes.io/config.openshift.io/featuregates/cluster + +## Edit and set the value, upgrade generation remove spec +# etcdctl put /kubernetes.io/config.openshift.io/featuregates/cluster '{"apiVersion":"config.openshift.io/v1","kind":"FeatureGate","metadata":{"annotations":{"include.release.openshift.io/ibm-cloud-managed":"true","include.release.openshift.io/self-managed-high-availability":"true","include.release.openshift.io/single-node-developer":"true","release.openshift.io/create-only":"true"},"creationTimestamp":"2023-02-15T14:42:26Z","generation":3,"managedFields":[{"apiVersion":"config.openshift.io/v1","fieldsType":"FieldsV1","fieldsV1":{"f:metadata":{"f:annotations":{".":{},"f:include.release.openshift.io/ibm-cloud-managed":{},"f:include.release.openshift.io/self-managed-high-availability":{},"f:include.release.openshift.io/single-node-developer":{},"f:release.openshift.io/create-only":{}}},"f:spec":{}},"manager":"cluster-version-operator","operation":"Update","time":"2023-02-15T14:42:26Z"},{"apiVersion":"config.openshift.io/v1","fieldsType":"FieldsV1","fieldsV1":{"f:spec":{"f:featureSet":{}}},"manager":"kubectl-patch","operation":"Update","time":"2023-02-15T16:21:37Z"}],"name":"cluster","uid":"5db70a17-59ee-49c4-ae5e-8867214957c0"},"spec": {}}' + +## Check +# oc get featuregate -o yaml + +## Wait for machineconfigpools to get upgraded +# oc get machineconfigpool -o wide -w + diff --git a/processed/check_images.sh b/processed/check_images.sh new file mode 100755 index 0000000..799ab75 --- /dev/null +++ b/processed/check_images.sh @@ -0,0 +1,18 @@ +#!/bin/bash + +# Exit immediately if a command exits with a non-zero status +set -e +# Uncomment to enable debugging +# set -x + +# Substitute `` with the content of the images.txt file +cat < images.txt + +EOL + +while read -r image; do + crictl images --digests --no-trunc -o json | grep -q "${image}" || echo "${image} not found" +done < <(cat images.txt) + +# Get last pulled image time +journalctl -u crio |grep "Pulled image" | grep ocp-v4.0-art-dev@sha256 \ No newline at end of file diff --git a/templates/pinned-images.yaml.template b/templates/pinned-images.yaml.template new file mode 100644 index 0000000..981bb20 --- /dev/null +++ b/templates/pinned-images.yaml.template @@ -0,0 +1,24 @@ +# Seems options for nodeSelector are not developed yet + +# For control plane nodes: +apiVersion: machineconfiguration.openshift.io/v1alpha1 +kind: PinnedImageSet +metadata: + name: master-pinned-images + labels: + machineconfiguration.openshift.io/role: "master" +spec: + pinnedImages: +$IMAGES + +--- +# For worker nodes: +apiVersion: machineconfiguration.openshift.io/v1alpha1 +kind: PinnedImageSet +metadata: + name: worker-pinned-images + labels: + machineconfiguration.openshift.io/role: "worker" +spec: + pinnedImages: +$IMAGES \ No newline at end of file diff --git a/transition-time.sh b/transition-time.sh new file mode 100755 index 0000000..d47768a --- /dev/null +++ b/transition-time.sh @@ -0,0 +1,12 @@ +#!/bin/bash + +# Exit immediately if a command exits with a non-zero status +set -e +# Uncomment to enable debugging +set -x + + +while read -r node; do + oc get ${node} -o jsonpath='{.spec.node.name} {.status.conditions[?(@.type=="PinnedImageSetsProgressing")].status} {.status.conditions[?(@.type=="PinnedImageSetsProgressing")].lastTransitionTime} {.status.conditions[?(@.type=="PinnedImageSetsProgressing")].message}' +done < <(oc get machineconfignode --no-headers -o name) + diff --git a/upgrade.sh b/upgrade.sh new file mode 100755 index 0000000..0ed1ceb --- /dev/null +++ b/upgrade.sh @@ -0,0 +1,146 @@ +#!/bin/bash + +# Exit immediately if a command exits with a non-zero status +set -e +# Uncomment to enable debugging +set -x + + +export ocp_version_channel=${OCP_VERSION_CHANNEL:-candidate} +export ocp_version="4.17" +export VERSION="4.17.0-rc.2" +export _es_index=${ES_INDEX:-managedservices-timings} +export control_plane_waiting_iterations=${OCP_CONTROL_PLANE_WAITING:-100} +export waiting_per_worker=${OCP_WORKER_UPGRADE_TIME:-5} +export OCP_CLUSTER_NAME=$(oc get infrastructure.config.openshift.io cluster -o json 2>/dev/null | jq -r '.status.infrastructureName | sub("-[^-]+$"; "")') +export UUID="${UUID:-$(uuidgen | tr '[:upper:]' '[:lower:]')}" +export KUBECONFIG="${PWD}/kubeconfig.yaml" +export ES_SERVER="${ES_SERVER=}" +export _es_index="${ES_INDEX:-}" + +ocp_upgrade(){ + if [ ${ocp_version_channel} == "nightly" ] ; then + echo "ERROR: Invalid channel group. Nightly versions cannot be upgraded. Exiting..." + exit 1 + fi + echo "OCP Cluster: ${OCP_CLUSTER_NAME}" + echo "OCP Channel Group: ${ocp_version_channel}" + + if [ -z ${VERSION} ] ; then + echo "ERROR: No version to upgrade is given for the cluster ${OCP_CLUSTER_NAME}" + exit 1 + else + echo "INFO: Upgrading cluster ${OCP_CLUSTER_NAME} to ${VERSION} version..." + fi + + echo "INFO: Patching the 4.17 Admin Acks" + echo "INFO: Check if we need them" +# oc -n openshift-config patch cm admin-acks --patch '{"data":{"ack-4.12-kube-1.26-api-removals-in-4.13":"true"}}' --type=merge + + echo "INFO: Upgrading to 4.17 ${ocp_version_channel} Channel" + oc adm upgrade channel ${ocp_version_channel}-${ocp_version} + + echo "INFO: OCP Upgrade to 4.17 kick-started" + CURRENT_VERSION=$(oc get clusterversion | grep ^version | awk '{print $2}') + oc adm upgrade --to-image=quay.io/openshift-release-dev/ocp-release@sha256:1bab1d84ec69f8c7bc72ca5e60fda16ea49d42598092b8afd7b50378b6ede8ed --allow-not-recommended=true --allow-explicit-upgrade=true + + ocp_cp_upgrade_active_waiting ${VERSION} + if [ $? -eq 0 ] ; then + CONTROLPLANE_UPGRADE_RESULT="OK" + else + CONTROLPLANE_UPGRADE_RESULT="Failed" + fi + + WORKERS_UPGRADE_DURATION="250" + WORKERS_UPGRADE_RESULT="NA" + ocp_workers_active_waiting + if [ $? -eq 0 ] ; then + WORKERS_UPGRADE_RESULT="OK" + else + WORKERS_UPGRADE_RESULT="Failed" + fi + ocp_upgrade_index_results ${CONTROLPLANE_UPGRADE_DURATION} ${CONTROLPLANE_UPGRADE_RESULT} ${WORKERS_UPGRADE_DURATION} ${WORKERS_UPGRADE_RESULT} ${CURRENT_VERSION} ${VERSION} + exit 0 +} + +ocp_workers_active_waiting() { + start_time=$(date +%s) + WORKERS=$(oc get node --no-headers -l node-role.kubernetes.io/workload!="",node-role.kubernetes.io/infra!="",node-role.kubernetes.io/worker="" 2>/dev/null | wc -l) + # Giving waiting_per_worker minutes per worker + ITERATIONWORKERS=0 + VERSION_STATUS=($(oc get clusterversion | sed -e 1d | awk '{print $2" "$3" "$4}')) + while [ ${ITERATIONWORKERS} -le $(( ${WORKERS}*${waiting_per_worker} )) ] ; do + if [ ${VERSION_STATUS[0]} == $1 ] && [ ${VERSION_STATUS[1]} == "True" ] && [ ${VERSION_STATUS[2]} == "False" ]; then + echo "INFO: Upgrade finished for OCP, continuing..." + end_time=$(date +%s) + export WORKERS_UPGRADE_DURATION=$((${end_time} - ${start_time})) + return 0 + else + echo "INFO: ${ITERATIONWORKERS}/$(( ${WORKERS}*${waiting_per_worker} ))." + echo "INFO: Waiting 60 seconds for the next check..." + ITERATIONWORKERS=$((${ITERATIONWORKERS}+1)) + sleep 60 + fi + done + echo "ERROR: ${ITERATIONWORKERS}/$(( ${WORKERS}*${waiting_per_worker} )). Workers upgrade not finished after $(( ${WORKERS}*${waiting_per_worker} )) iterations. Exiting..." + end_time=$(date +%s) + export WORKERS_UPGRADE_DURATION=$((${end_time} - ${start_time})) + return 1 +} + +ocp_cp_upgrade_active_waiting() { + # Giving control_plane_waiting_iterations minutes for controlplane upgrade + start_time=$(date +%s) + ITERATIONS=0 + while [ ${ITERATIONS} -le ${control_plane_waiting_iterations} ]; do + VERSION_STATUS=($(oc get clusterversion | sed -e 1d | awk '{print $2" "$3" "$4}')) + if [ ${VERSION_STATUS[0]} == $1 ] && [ ${VERSION_STATUS[1]} == "True" ] && [ ${VERSION_STATUS[2]} == "False" ]; then + # Version is upgraded, available=true, progressing=false -> Upgrade finished + echo "INFO: OCP upgrade to $1 is finished for OCP, now waiting for OCP..." + end_time=$(date +%s) + export CONTROLPLANE_UPGRADE_DURATION=$((${end_time} - ${start_time})) + return 0 + else + echo "INFO: ${ITERATIONS}/${control_plane_waiting_iterations}. AVAILABLE: ${VERSION_STATUS[1]}, PROGRESSING: ${VERSION_STATUS[2]}. Waiting 60 seconds for the next check..." + ITERATIONS=$((${ITERATIONS} + 1)) + sleep 60 + fi + done + echo "ERROR: ${ITERATIONS}/${control_plane_waiting_iterations}. OCP Version is ${VERSION_STATUS[0]}, not upgraded to $1 after ${control_plane_waiting_iterations} iterations. Exiting..." + oc get clusterversion + end_time=$(date +%s) + export CONTROLPLANE_UPGRADE_DURATION=$((${end_time} - ${start_time})) + return 1 +} + +ocp_upgrade_index_results() { + METADATA=$(grep -v "^#" </dev/null | jq -r .status.networkType)", + "controlplane_upgrade_duration": "$1", + "workers_upgrade_duration": "$3", + "from_version": "$5", + "to_version": "$6", + "controlplane_upgrade_result": "$2", + "workers_upgrade_result": "$4", + "master_count": "$(oc get node -l node-role.kubernetes.io/master= --no-headers 2>/dev/null | wc -l)", + "worker_count": "$(oc get node --no-headers -l node-role.kubernetes.io/infra!="",node-role.kubernetes.io/worker="" 2>/dev/null | wc -l)", + "infra_count": "$(oc get node -l node-role.kubernetes.io/infra= --no-headers --ignore-not-found 2>/dev/null | wc -l)", + "total_node_count": "$(oc get nodes 2>/dev/null | wc -l)", + "ocp_cluster_name": "$(oc get infrastructure.config.openshift.io cluster -o json 2>/dev/null | jq -r .status.infrastructureName)", + "timestamp": "$(date +%s%3N)", + "cluster_version": "$5", + "cluster_major_version": "$(echo $5 | awk -F. '{print $1"."$2}')" +} +EOF +) + printf "Indexing installation timings to ${ES_SERVER}/${_es_index}" + echo $METADATA + # curl -k -sS -X POST -H "Content-type: application/json" ${ES_SERVER}/${_es_index}/_doc -d "${METADATA}" -o /dev/null + return 0 +} + +ocp_upgrade