diff --git a/.github/workflows/pytest.yml b/.github/workflows/pytest.yml index b322451..4fa8562 100644 --- a/.github/workflows/pytest.yml +++ b/.github/workflows/pytest.yml @@ -2,34 +2,34 @@ name: JUSTICE Unit Tests on: push: - branches: - - main + branches: [main] pull_request: - branches: - - main + branches: [main] jobs: - build: + test: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 with: - lfs: true # Enable Git LFS support + lfs: true - - name: Set up Python 3.9 - uses: actions/setup-python@v2 + - name: Set up Python + uses: actions/setup-python@v5 with: - python-version: 3.9 + python-version: "3.10" - name: Install Poetry run: | - curl -sSL https://install.python-poetry.org | python3 - - echo 'export PATH="$HOME/.local/bin:$PATH"' >> $GITHUB_ENV + python -m pip install --upgrade pip + python -m pip install "poetry==2.3.2" + poetry --version - name: Install dependencies run: | - poetry install + poetry config virtualenvs.in-project true + poetry install --no-interaction --no-ansi - name: Run Pytest env: diff --git a/.gitignore b/.gitignore index 50e5f05..b88ef7a 100644 --- a/.gitignore +++ b/.gitignore @@ -232,8 +232,13 @@ limitarian_analysis.py paper_data_figures_generator.ipynb paper_data_figures_generator_codeocean.ipynb reproducing_data_and_plots.py -figs/* ml_importance_plots/* +figs/* +solvers/moea/*.so +solvers/moea/*.dylib +solvers/moea/borgMOEA.py +third_paper_visualizations.ipynb +fourth_paper_analysis.ipynb # tests/verification_data/* #Mac .DS_Store diff --git a/CITATION.cff b/CITATION.cff new file mode 100644 index 0000000..74c1554 --- /dev/null +++ b/CITATION.cff @@ -0,0 +1,28 @@ +# This CITATION.cff file was generated with cffinit. +# Visit https://bit.ly/cffinit to generate yours today! + +cff-version: 1.2.0 +title: JUSTICE Integrated Assessment Modelling Framework +message: >- + If you use this software, please cite it using the + metadata from this file. +type: software +authors: + - given-names: Palok + family-names: Biswas + email: p.biswas.nl@gmail.com + affiliation: Delft University of Technology + orcid: 'https://orcid.org/0000-0003-3830-7203' +identifiers: + - type: doi + value: 10.5281/zenodo.15145121 + description: Zenodo +repository-code: 'https://github.com/pollockDeVis/JUSTICE' +keywords: + - integrated assessment model + - climate-economy + - deep uncertainty + - normative uncertainty +license: BSD-3-Clause +version: 0.2.0 +date-released: '2025-06-23' diff --git a/JUSTICE_example_run.ipynb b/JUSTICE_example_run.ipynb index afc63ad..9119723 100644 --- a/JUSTICE_example_run.ipynb +++ b/JUSTICE_example_run.ipynb @@ -29,7 +29,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 2, "metadata": {}, "outputs": [ { @@ -143,7 +143,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 3, "metadata": {}, "outputs": [ { @@ -171,7 +171,9 @@ " # A subset of climate ensembles containing 100 ensemble members sampled using Latin Hypercube Sampling (LHS)\n", " # climate_ensembles=[887, 899, 763, 4, 454, 728, 942, 543, 510, 913, 972, 384, 108, 899, 644, 607, 480, 260, 740, 177, 230, 531, 681, 468, 798, 835, 974, 401, 3, 517, 160, 151, 408, 274, 460, 541, 549, 377, 899, 278, 228, 972, 926, 116, 156, 189, 396, 414, 907, 284, 452, 510, 4, 636, 956, 859, 252, 785, 864, 299, 787, 894, 472, 254, 918, 924, 937, 95, 456, 599, 625, 485, 206, 694, 835, 376, 999, 30, 374, 729, 935, 816, 763, 136, 134, 114, 50, 533, 788, 745, 684, 510, 510, 763, 212, 364, 875, 731, 401, 476],\n", " stochastic_run=False, # @OPTIONAL: This is to run the FaIR model in stochastic mode. Default is True \n", - " )\n" + " # clustering=True, # @OPTIONAL: This is to enable clustering of climate ensembles. Default is False\n", + " # cluster_level=5,\n", + " )" ] }, { @@ -185,7 +187,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 4, "metadata": {}, "outputs": [], "source": [ @@ -203,7 +205,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 5, "metadata": {}, "outputs": [ { @@ -251,7 +253,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 6, "metadata": {}, "outputs": [], "source": [ @@ -273,83 +275,6 @@ "damage_cost_per_capita = datasets[\"damage_cost_per_capita\"]\n" ] }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAA0EAAAHWCAYAAACxAYILAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8ekN5oAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOydBbhbVdaGVymlBQaKFysyg7sPg7u7uxW34oO7w+BuhcGKuxaHAX6cwd1lirZIKaXN/7zZXdx9zz1xz/3e59lNbpqcHNlJ1reX9chkMhkTQgghhBBCiG7COI3eASGEEEIIIYSoJxJBQgghhBBCiG6FRJAQQgghhBCiWyERJIQQQgghhOhWSAQJIYQQQgghuhUSQUIIIYQQQohuhUSQEEIIIYQQolshESSEEEIIIYToVkgECSGEEEIIIboVEkFCiG7P0UcfbT169CjrtTPNNJOttdZaVduXjz/+OLsvV155ZdW2KUS92G677bKfCSGEaHYkgoQQbclHH31ke+65p80222w2wQQTZMdcc81le+yxh/33v/+1VgYjE6FUaHRnIXXdddfZWWedZc3M3XffbauttppNPvnk1qdPn+xcPeCAA+y7776zZqKYucZ47LHHGr2rQghRNOMW/1QhhGgNMC433XRTG3fccW3LLbe0+eef38YZZxx7++237dZbb7ULL7wwK5JmnHFGa0Uw7n/++ec//7733nvt+uuvtzPPPNOmmGKKPx9fYoklrDuLoNdff9322Wcfa0YQO//617+yc/Of//ynTTbZZPbSSy/ZeeedZ4MHD7aHH37YZp99dmsGrr766k5///vf/7YhQ4Z0eXzOOee0Sy+91MaMGVPnPRRCiNKRCBJCtBUffPCBbbbZZlmBgyE5zTTTdPr/U045xS644IKsKGpV1ltvvU5/f/3111kRxOPtGor066+/Zr157bAfXCsEEEL92muvtZ49e3YKJ1t++eVt4403zooihHy9+OWXX2zCCSfs8vhWW23V6e9nn302K4KSjwshRCvRulaAEEKkcOqpp2aNuUGDBnURQIBRuffee1v//v3zbuePP/6w4447zv72t79Z7969s+Li0EMPtZEjR6Y+/8EHH7QFFlggG9ZE2B0ep5jvv/8+u/o/77zz2l/+8hebeOKJbfXVV7dXX33VasU111xjCy+8sI0//vhZTwPi8LPPPuv0nOWWW87mmWeebIjgsssumzXwZ5llFrv55puz///444/b3//+9+w28Ew89NBDqflUeNk22WST7HER3jVw4ED77bffKtqnF1980ZZZZpnsPnHu4Y477rA111zTpp122ux14fpwnUaPHt3p9ffcc4998sknf4ZquTgkRJC/yb2KIZQrGdKVbz+YB0cddVT2XLEfzKeDDjoo5/yIOeaYY2zSSSe1Sy65pJMAgsUWWyzrGXrttdf+vAaEdTJnEGBJNt98c5t66qk7Hf99991nSy+9dFbQTDTRRNnz9cYbb3R6HWKLbbJosMYaa2Sfh9e02jlBnuN2+umn2/nnn29//etfs+dxlVVWyV73TCaTvX7TTz99dk6su+662c9KkmKOSQghSkEiSAjRdqFwGKYY7pWw44472pFHHmkLLbRQNswMgXDSSSdljfYk7733XnZVH1HDcxBarOSzWu58+OGHdvvtt2eLKJxxxhl24IEHZg1dtvvll19atTnhhBNsm222sVlnnTX7foSF4RnDmP/xxx87PfeHH37I7hfnDBGJUc9x3nDDDdlbjOSTTz45Ky432mgj++mnn7q8HwII0cPx8/xzzjnHdt5557L3ibwYzifCkvA/vCMuYjDe99tvPzv77LOzgorrdPDBB//52sMOOyz7OkIDCdlilJsflLYfhHuts846WcN+7bXXtnPPPTfrhWOeMA/ywVx55513ssY+gjENzpHPZWCbnHuEXQyi6K677speExdTHCsCgXOE1/OII46wN99805Zaaqkuwg+hv+qqq9pUU02VPZYNN9zQagUeLzywe+21l+2///5Zcc2cOfzww+3+++/PCj/mC8fDYkFMKcckhBBFkxFCiDZh2LBhGb7W1ltvvS7/98MPP2S++eabP8evv/765/8dddRR2dc5r7zySvbvHXfcsdM2DjjggOzjjzzyyJ+PzTjjjNnHbrnllk77Mc0002QWXHDBPx/77bffMqNHj+60vY8++ijTu3fvzLHHHtvpMbY3aNCgoo/7tNNOy76G18LHH3+c6dmzZ+aEE07o9LzXXnstM+6443Z6fNlll82+9rrrrvvzsbfffjv72DjjjJN59tln/3z8gQce6LJvfu7WWWedTu+1++67Zx9/9dVXy96niy66qMuxxtfN2WWXXTITTDBB9hw7a665ZvbaJGHf43PlPProo9nHuS20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GkWLoDNZMh7rCbrooos6hb7hAZppppmyjwshagMihqpv553XUQY7rgLH/xMWhwhyD82oUR0CaJJJzH78MQgjGp5S+AAPjnuIeN5qq5k99FDngghpEF6HUBJCCCGEaGsR9NFHH2Vvl19+ebv11ltt0kknreV+CSEiEDM0PiXMDdHCesPOO3f8P41Pqe5GeWsHYeO9fyafPPT5IcxtmmnMbrqp8/P++tcw7r238L4goiSAhBBCCBHTatKg5MIIjz76qASQEHWEggbrrBMEEA7Yq67qLIC+/95slVWCAIrzglzg9OsXBBDha4gpSmXHtfw32ii8Dg9QMZ2g2YYQQgghREyrLZCW1dbo888/tzvvvNM+/fRT+z0RN3PGGWdUa9+E6PZQ2W3NNUPeDhXd8OBQ8tp5//3w93vvdYS9+S1MPz2f1/CYf1S9NDbeoU02MbviiuBJyofKXwshhBAiH0SbtLUIevjhh22dddaxv/71r/b222/bPPPMYx9//HE2V2ihhRaqzV4K0Q355JPQ5PSdd8wmm8zsnnvMFl+84/+feirk9uDlwUM0enT4AnJBM/PMhLGG+4gi/z8E0DLLBBF04YWF90Plr4UQQghRCJqls2DbtuFwhxxyiB1wwAH22muvWZ8+feyWW26xzz77zJZddlnbeOONa7OXQnQzXnvNbIklggDq3z8InlgAEfpGTx8EEKFsCCAqv7kAmnHGDgEEE08c/g+xRGPUH34wu+224lZ0VP5aCCGEEIVotXahJYugt956y7bZZpvs/XHHHddGjBiRLZd97LHH2imnnFL2jpx88snZ8tv77LNP2dsQoh144gmzpZc2+/JLs7nnNnv66VC2Gghp22svs6226ghvI+9nyik7Sl9zHy8SUMmeULbhw4OYosHq5ZcHkZUP8ocKhcgJIYQQQsSeoLYWQRNOOOGfeUDTTDONffDBB3/+37ckMJTB888/bxdffLHNN998Zb1eiHbh9ttDkQMEzZJLmj35ZMjrgc8+M1t22Y4S2c7UU5t9803w3CBeuA8zzRSKKhDKttxyZptuGrxAlMkuVPygUIlsIYQQQog0G6JVKHl3F198cXuK2BwjIXsN23///e2EE06wHXbYIft/pfLzzz/blltuaZdeeqmqzoluDfk5G24YPDBUgxsypKPcJJXbSLl79tmOCnCUqsbr8/XXwdvD63wV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nU8++cRGjx4dv2b33Xe3iy66yDZu3FjjNa+99poNHjzY2rRpE69Wfc899zT550PT1PcBBxxQa/++6667aryG+q7sutY+e9VVV9lhhx1mu+yyi+2333529dVX27p162psZ9WqVXb66afbrrvuGm9n/PjxtmXLlhqv4VjefOqbc3fzOI5feumldvDBB8d13alTJ/vOd75jy5Ytq+59W9nhgKY0bNiwaOrUqdGSJUuihQsXRqeddlq03377RRs3bsy95rLLLou6desWPffcc9Err7wSHXfccdHxxx9fYzv6umo777//fq5s2rQp9/zf//73aNddd43GjRsXvf7669H9998ffeMb34iefvrpkn7erGtIff/iF7+I7rzzzrioXj/99NNa2zn11FOjI488MnrppZeiF154IerevXs0atSo3PPr1q2LunTpEo0ePTr+Xb/73e+iXXbZJZo8eXLJPiuKV9/7779/dNttt9XYv8NtUN+VX9eLFy+ORo4cGT3xxBPR8uXL4+P5IYccEp1zzjm5bWzZsiXq1atXNGTIkOjVV1+N/vKXv0R77bVXdOONN+Zew7G8+dS3cO5uHsfxyZMnR88//3z09ttvRwsWLIjOPPPMuN2mfbpa922CIJTcmjVr4oOidiZZu3Zt1Lp16+ixxx7LveaNN96IXzNv3rzcY/p5+vTpBbc7YcKE6Igjjqjx2HnnnRfv3Kic+g7NnDkzb6NYB0c9/vLLL+cee+qpp6IWLVpE7733XvzzpEmToo4dO0ZffPFF7jU33HBDdNhhhzXp50Hx69uDIAVLhVDf1VXX7tFHH4122mmnaPPmzfHPahi1bNkyWr16de41Dz74YNS+fftc3XIsbz71LZy7m2ddL1q0KH6NAuBq3bcZDoeS867yPfbYI75dsGCBbd682YYMGZJ7TY8ePeKu9Xnz5tX4vxoyt9dee9kxxxxjv/71rxXE557Ta8NtyLBhw2ptA+Wt74ZQnWkI3IABA3KPqW5btmxp8+fPz73mxBNPtJ122qlGfasL/9NPPy3qZ0DT1rfT8DcNie3Xr59NnDixxjAK6rs661qv0TDIVq1a5eqxd+/e1qVLlxr1uH79elu6dGnuNRzLm0d9O87dzauuP/vsM5s6daodeOCB8dDkat23a35LgSa2detWu/baa+2EE06wXr16xY+tXr06btio0RvSjqTn3G233WYnn3xyPNb02WeftbFjx8ZzRDQG2bcT7ny+De2AmzZtisexovz13RCqS40nDumkqgOyfyd0qwNwyOtfz3Xs2LEonwFNX9+i/VjjxFXHL774ot144432/vvv289//vP4eeq7+ur6o48+sttvv90uueSS3GOFjtP+XF2v4VheffUtnLubT11PmjTJJkyYEAdBmgv217/+NXdhqhr3bYIglJSuBi1ZssTmzJnT6P9700035e7rSrF2Ql0t9gMpmld9I1v1PW7cuNz9Pn36xCdWTcTVhF1NoEV11bUaNZogffjhh9utt95a8veHyqlvzt3Np65Hjx5tp5xySnyB6t5777Vzzz3X5s6dGyerqUYMh0PJXHnllfbkk0/azJkzrWvXrrnH9957b/vyyy9rZYxSdjg9V8ixxx5r7777rn3xxRe57aQzyulndc1zJaly6rshVJdr1qyp8ZiGRikbkX8nCtW3P4fqqe9C+7fqfOXKlfHP1Hf11PWGDRvs1FNPjTNNTZ8+3Vq3bp17riH1yLG8+dR3Ppy7q7euO3ToYIccckg8NPkPf/hDnB1OdV6t+zZBEJqcxv5qx9KOMmPGjFpDWo466qj4oPncc8/lHtM4f6VaHDhwYMHtLly4MB4C41eJ9dpwG6Ku2rq2gdLXd0OozhQUa76Y07bUTa8TqL9m9uzZ8XyysL7VRc/QqOqq70L7t+aA+bBI6rs66lo9AkOHDo178p544olaV4hVj4sXL65xkUP1qEaQehH8NRzLm0d958O5u3kcx6MkuVoumK3Kfbss6RiQKZdffnnUoUOHaNasWTVSZP7rX/+qkSJb6RhnzJgRp8geOHBgXJxScE6ZMiVOyfnWW2/FmaKUZvHmm2+ulXpx/PjxcXa5Bx54gDSbFVrf+lkpNFWnOgzNnj07/vnjjz+ukSK7X79+0fz586M5c+bEqVfDFNnKKqiUyRdccEGc1nPatGlx/ZMyufrq+8UXX4wzwyk164oVK6Lf/va3UadOnaIxY8bktkF9V35dK435scceG/Xu3TvOGBW+Jp1Gd+jQoXF96/isus6XRpdjefXXN+fu5lHXK1asiO644464ffaPf/wjmjt3bpwie4899og++OCDqt23CYLQ5NToyVeUk95pzYCxY8fGKXC1WmCqrgAABClJREFUg5x99tnxDhimR+7bt2/Utm3baLfddovXj/nVr34VffXVV7VS8Op1StF50EEH1fgdqJz6vuWWW+p9jRrICnpU50qxeeGFF0YbNmyolaJz0KBB0c477xztu+++0V133VXSz4ri1LfWnFBjSifhNm3aRD179oxPuJ9//nmN30V9V3Zdewr0fEVri7iVK1dGw4cPj9d50joi1113XY2Uyr4tjuXVX9+cu5tHXb/33nvxPtu5c+d4SZOuXbtG559/frRs2bIa26m2fbuF/ilPHxQAAAAAlB5zggAAAABkCkEQAAAAgEwhCAIAAACQKQRBAAAAADKFIAgAAABAphAEAQAAAMgUgiAAAAAAmUIQBAAAACBTCIIAAAAAZApBEACgYkRRZEOGDLFhw4bVem7SpEm2++6727vvvluW9wYAaD4IggAAFaNFixY2depUmz9/vk2ePDn3+Ntvv20TJkyw+++/37p27VrU37l58+aibg8AUPkIggAAFaVbt25233332fXXXx8HP+oduuiii2zo0KHWr18/Gz58uLVt29a6dOliF1xwgX300Ue5//v000/boEGD4h6jPffc08444wxbsWJF7vmVK1fGgdbvf/97O+mkk6xNmzb28MMPl+mTAgDKpUWkswsAABVmxIgRtm7dOhs5cqTdfvvttnTpUjviiCPs4osvtjFjxtimTZvshhtusC1bttiMGTPi//PHP/4xDnL69OljGzdutJtvvjkOfBYuXGgtW7aM7x944IF2wAEH2M9+9rM4qFIg9M1vfrPcHxcAUEIEQQCAirRmzZo46Pnkk0/i4GbJkiX2wgsv2DPPPJN7jeYHqefozTfftEMPPbTWNtRL1KlTJ1u8eLH16tUrFwT98pe/tGuuuabEnwgAUCkYDgcAqEidO3e2Sy+91Hr27Bn3Ci1atMhmzpwZD4Xz0qNHj/i1PuTtrbfeslGjRtlBBx1k7du3j3t8ZNWqVTW2PWDAgDJ8IgBApWhV7jcAAEAhrVq1iotoeNuZZ55pd999d63X+XA2Pb///vvblClTbJ999rGtW7fGPUBffvlljdfvtttuJfoEAIBKRBAEAKgK/fv3j4fFqXfHA6PQxx9/HA+LUwA0ePDg+LE5c+aU4Z0CACodw+EAAFXhiiuuiOcHabjbyy+/HA+B0/ygCy+80L766ivr2LFjnBHuoYcesuXLl8fJEsaNG1futw0AqEAEQQCAqqDhbXPnzo0DHqXL7t27t1177bVxOmxlflOZNm2aLViwIB4C96Mf/cgmTpxY7rcNAKhAZIcDAAAAkCn0BAEAAADIFIIgAAAAAJlCEAQAAAAgUwiCAAAAAGQKQRAAAACATCEIAgAAAJApBEEAAAAAMoUgCAAAAECmEAQBAAAAyBSCIAAAAACZQhAEAAAAwLLk/wFzJwihA8hwDgAAAABJRU5ErkJggg==", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Representative indexes: [ 693 397 922 529 300 712 157 463 602 553 538 846 942 800\n", - " 130 591 294 756 486 252 462 765 94 958 450 163 965 623\n", - " 490 160 703 527 759 419 696 174 47 478 726 343 960 263\n", - " 155 818 823 1000 292 732 541 135]\n", - "Representative indexes (1-based): [ 694 398 923 530 301 713 158 464 603 554 539 847 943 801\n", - " 131 592 295 757 487 253 463 766 95 959 451 164 966 624\n", - " 491 161 704 528 760 420 697 175 48 479 727 344 961 264\n", - " 156 819 824 1001 293 733 542 136]\n" - ] - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAA0EAAAHWCAYAAACxAYILAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8ekN5oAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOy9B5xke1nn/TuxcnWenhxuzhcuUUCQIKhIcEUFXSTo6qoruq4BWV2FXZfV9cO6+8qysq9iQPBVEBUUkKvkdJF8uTlMTh0rV534fn7POae6uqdnpnumZzo938ufc6q65tSpU6eq/r/zPM/vMeI4jqEoiqIoiqIoirJNMNd7BxRFURRFURRFUa4mKoIURVEURVEURdlWqAhSFEVRFEVRFGVboSJIURRFURRFUZRthYogRVEURVEURVG2FSqCFEVRFEVRFEXZVqgIUhRFURRFURRlW6EiSFEURVEURVGUbYWKIEVRFEVRFEVRthUqghRFUa4if/zHfwzDMHD48GFsdH7zN39T9vVSOHjwIL73e793zfaFx4v7wuOnKOvFWp/XiqKsHyqCFGUbTLizYds29uzZg9e+9rU4ceLEeu/ehuUf/uEfRABcDv/1v/5X/M3f/A02Go8//jj+3b/7d7jhhhtQLBZl3HLLLfiZn/kZfOMb38Bmn6AOnu/nG9tZSL3nPe/B7/3e72Ejwu8lvj/VahWdTuecvz/88MP99/B3f/d312UfFUXZOtjrvQOKolx53vKWt+DQoUPodrv4whe+IJPAz3zmM7j33nuRz+fXe/c2pAh6+9vffllCiCLoFa94BV7+8pcvuv/Vr341XvnKVyKXy+Fq86EPfQg/9EM/JGL4R37kR3DnnXfCNE088MAD+Ou//mu84x3vEJF04MABbEY4uW82m4vex/e+9734H//jf2B8fLx//zOe8QxsZxHEz/3P//zPYyPCc7PdbuODH/wgfvAHf3DR3/78z/9cvq/4PaYoinK5qAhSlG3Ad3/3d+PJT36yrP/4j/+4TAh/+7d/G3/3d393zkTjShLHsUxgCoUCtiuWZcm42jz66KMivihw/umf/gm7du1a9HeeD//7f/9vEUWblaWC8/Tp0yKCeD+jRFsRCgZG87bKfvDiwDOf+Ux535Z+N1HAvfjFL8b73/9+bGWCIEAURXBdd713RVG2NJv3105RlEvm27/92/sT40EYEWD0YnR0VK64UjhRKC2XYvepT30KP/mTP4mxsTFJX/nRH/1RzM3NLZs//9GPflS2RfHzB3/wB/K3+fl5uRq9b98+mfhcd911MhHnj/8gf/EXf4EnPelJqFQq8jy33347/uf//J+LHrOSbWU1JUyjeec734lrr71WHvuUpzwFX/rSlxal5DAKRAZTqDL47xlJ4Ovm6+G+ve9971u0P3x8q9XCn/zJn/T/Pbe7XE0Qj88111yz7Pv0bd/2bX3xmvHud79bnpPPzfeJwubYsWO4GL/zO78j+/Sud73rHAGUXYF/wxveIMfwYhO0//yf/3P/+PE9ftOb3oRer7fs4//xH/8RT3jCE+R8YtodI06DzM7O4hd/8RflfS2Xy/IeU7R//etfx5ViJcfwO77jO3DbbbdJiuBznvMcmeDzvMre609+8pN42tOeJtu48cYbcffddy9bT8XPFCfzfF08Z37u535u2UjGavbpy1/+Mp797GfLPvHYk7/9278VgbB79255X/j+8H0Kw3DRv//7v/97HDlypH9eZuLwfLVqn/jEJ+R+LleyHzwPfuM3fkOOFfeD59Mv//Ivn/f8WI4f/uEfxoc//GH5XGfwM8p0OP5tOVb7HcDPOD933PcXvvCFcqx5kYbHbO/evfI+vOxlL5Pz81LO60vZJ0Yys8/VfffdJ3//f/6f/we33nqr7OfIyIh8H1AMKopy+WgkSFG2IdlEhz+qGd/61rfkCixrht74xjeiVCrhL//yL+UqOq+8ft/3fd+ibbCuZHh4WCZ7Dz74oKRScXKVTZoy+LdXvepVIpj+zb/5NzJh5FVjTixZl8T79+/fj8997nP41V/9VZw6dapfs/Cxj31M/u3zn/98mTyQ+++/H5/97GdlMklWuq0MTiAajYY8lvtJcfCv/tW/wmOPPQbHceT+kydPynP/2Z/92TnHjgLspS99qaSTeZ4nIu0HfuAHJNWMk1DCf8eI21Of+lT8xE/8hNzHyc1yMD2NApKTPAqyDB5Lpi7+9//+3/v3/dZv/RZ+/dd/XSbV3P7U1JRMkjgR/epXvyrvx/ng/nESxon75cDnpbijWP4P/+E/4Itf/CLe+ta3yvvygQ98YNFjOWnl6/u3//bf4jWveY0IMB6rj3zkI/jO7/xOeQyPO2uneD9TNs+cOSNCme8pJ4Kc1K8lqzmGFPUUqRQk3D+e41xnWhYnt3xdnJTzPeLx4ESaYn0QPg+FBo8R38//9b/+l2z3T//0Ty9pn2ZmZkQkcj/+9b/+15icnOyLGIrIX/iFX5DlP//zP+M//af/hHq93j+H/uN//I+o1Wo4fvy4pAgSPvZSWG4/OLnnZ4Optjzvb775Znzzm9+U53rooYdWXCPHzyOPLYXF61//+v7n9qabbsJdd911zuNX+x3A94+f3Z/92Z8VkcPvAB775z3vefL99Su/8it45JFH5D2gQP+jP/qjVZ/Xq90nboPimMeNIohC+P/+3/8rFyZ4bmXimaKcn7nziUFFUVZBrCjKluVd73pXzI/53XffHU9NTcXHjh2L3/e+98UTExNxLpeT2xnPf/7z49tvvz3udrv9+6Ioip/xjGfE119//TnbfNKTnhR7nte//3d+53fk/r/927/t33fgwAG57yMf+cii/frP//k/x6VSKX7ooYcW3f/GN74xtiwrPnr0qNz+uZ/7ubharcZBEJz3Na50W48//rjsy9jYWDw7O9t/HPeX93/wgx/s3/czP/Mzct9ytNvtRbd5DG677bb4ec973qL7uU+vec1rzvn32fHj/pBarSbvxX/4D/9h0eN4PA3DiI8cOSK3Dx8+LK/nt37rtxY97pvf/GZs2/Y59w/C5+BzvvzlLz/nb3Nzc3JuZGPw9f3Gb/zGouPwta99TW7/+I//+KJt/OIv/qLc/8///M/nvPfvf//7F+3Hrl274ic+8Yn9+3i+hWG4aHs8Njwmb3nLWxbdx+3x+K2U//7f//uiY72aY/ic5zxH/u173vOe/n0PPPCA3GeaZvyFL3yhf/9HP/rRc/YtO3YvfelLFz3XT//0T8v9X//61y95n/7P//k/Fz0vyU/+5E/GxWJx0Wf6xS9+sbw3FzsvMz7+8Y/L/VxebD/+7M/+TI7Npz/96UX383F8/Gc/+9n4QvDzws8NecUrXiHfSYTnx86dO+M3v/nN/fOA7+2lfgfw+29+fr7/uF/91V+V+++8887Y9/3+/a961ati13UXHb+Vnter3Sd+z509e3bRY1/2spfFt9566wWPmaIol46mwynKNuAFL3gBJiYmJC2DVxUZ5WGaG9M+CK+G8soxr4YySjI9PS2DV3tf9KIXyZXPpW5yvGLJyEnGT/3UT0lKFYvRB+HVfW5jkL/6q7+SlDxGorLn4uB+Mn2HqXaEV8CZwsWozPlY6bYyeAV3MAKWpQYyIrESBuuZeEWfV9a5ja985Su4FLL0L0bdmI6T8f/9f/8fnv70p8sVZMKr4rzSzvdo8HXu3LkT119/PT7+8Y+f9zkYDTjfVX+mNvHcyEaWCrgc2XvLaMMgjAgRploNwijOYAQxS5tkdIP1OoRXvbM6JL5fPOe4n4wYXuoxPR+rPYbcD0Y6MrhPPCcZ4RiMqGXry51DdN0bhNGHwWO52n3i8Xrd6153wfMy+wzzvGREgil5a81y+8HPIo8NIzaDr4URFnKhc3QpjHQwKsPzhN9NXJ4v+rHa7wBGbYaGhs55/xjR4nfY4P2MGC397lvJeb3affr+7/9++fwNwnONUbvBdF1FUdYOTYdTlG0AJ7a0ROaEnakd/AEedCdj6gcn4EzJ4ViOs2fPSqpcBidoSyeMrDVZWlNAEbQUiiqmdSz90R98LvLTP/3TIg4oEvjczN3nZPG7vuu7Vr2tjExUZGSCaGk904XSyv7Lf/kv+NrXvraozuFS++lkwoypQp///Oel3oi1Wqy3GEyZ4evke7T0uGcMCtKlZClag85pGUw946SZaWicBF4IpuhRsDCtbhBO2Dlh498H4eOWHheeh4TnCf8dBQBTDGnKQGe6wRoW1tCsJas9hrxIsHT/OXleWjeVTaiXO4eWPhfTInkMs8/JaveJn4PlCuaZzvprv/ZrIhgy0ZvBz/1as9x+8LUwLXKln8UL8T3f8z1y3vJiAD9rTBXl+bRcf63L/Q7I3r+Vvq8rOa9Xu0/LfU8yLY+1Zkyr5XPy+49CkGnLiqJcPiqCFGUbwB/RrMCeNT7Petaz5MeU9ToUL1mhLvPfl0ZtMpZOfFfKck5wfD7mzrNgejmyCcWOHTtkAkRjBRZKczB3nlddWZeymm1lnM+ZbTAKcz4+/elPS80DazU4aafo4ySV+3Q5xcoveclLpPCZgo8iiEtOlHnFOoOvkxMvHoPlXsOFajs4meO+0hp5KdlV8NU0b70cwbeclTiFN2s/WJTOWgi+dtbcLDXJuFxWewzPd65czjm09Nitdp+W+zyxAJ/1J4xI0A6fQosF+4ykcSK9kuN4vvd0UJRebD/4PDS4eNvb3rbsv7mY6cYgvEjD2iB+zhlhu5Bd/Vp9B1zO+3q5+7Tc8WRUjd/RvPDCeiPWZvJ7h7Veb37zm1e9T4qiLEZFkKJsM/hDzyLt5z73ufj93/99MUHI3Mk4oWe6xkrglU5uI4NRBhb88gruxeAkjY9fyXPxajNFAgcnFowOMXrBiTOF2Wq2tVLONyHkJISTS4qywUgaRdBKt7EcTE9kAT5TaDiB5NVvptIMmgLwdXIyxivGSydQK4GmDf/v//v/4p577hFRfCnQXpvvAd97TtAyGEXiRHxpf6Eswjh4LFggTzJXMrqt8Tz6wz/8w0X/ltsb7O2zFlzuMbwUeKwGr/LzmPAYZq9/LfaJaWNMI2RqHQV6BiNrKz0vs4jooCMbWRrduxB8LXT1o5HJWghlXqhh5JqieDAtcbnnXevvgAuxkvN6rfaJ3w2MFHMwNY/CkEYaNFjQHm+KcnloTZCibENYB8KJMNOt6DjEiAvvo7igkFkK3aqWQptp3/f7t+mcRftkpq5dDKa0MfWLYmIpnIRxO4QTu0E4GbrjjjtkPUtFW+m2VjvxyP79UgHJic/g1XFGUJZzveI2lv77C8FJDl3pKFQ4keTtQTj54fPzCvDSK9O8vfRYLYVXpBltYsSFouVSrnZnAneps1V25T9zx8vg6xl0jGOaFl3RaC3MlCHC17T0uSkGl9ZhrAWXewwvhaU1VnQcI9nnZC32KYtgDP57TpgZNVjuvFwuPS5zLxysVeF5zs/5SuFnke8bXc2W0ul0pL5vNVAcMzrIizXZ+XK+513r74ALsZLzei32ael7zwtCtOPm+zz43asoyqWhkSBF2ab80i/9kqRb0VqXVq+crDFNjukstLJmdIiTZf6Qszh3ad8WTrJ4xZc/9kzZ4ISL/57pYit5bhozMPrB/jnsj8IJEu10GRmgsGAUgHbBNG1gYTXrM3hVmpNITjaySMRKt7UauA1Ce1qmB3KSySvRnORzws+aJF6lZl4/jxsjUsz/X7oN5vPz8Yzo8Er/heypsxoIpiTy+VgovXSSylokXgHma2JaIx/Pq/2ckNGogv/2fLDmhCl7tBxngT8tvu+8806ZUHEb/BtFZmaWsRx8PC2BOTHOUrAYWWLKEvdnMDJIGNn4sR/7MSnspoUyr+rznBqMnPF9YwoXi+yZCsj3jRbG5+uddDlc7jG8FLhtfiZ4zvCzxH5APHd4LNdqn3jcGMnhe8NzlkKdNu3LCVuel4w00tyCdTZMt2OUlb1oaMTB/eBnjmmJtH9fjYB49atfLamc/D6hCQJrVyikaMzA+7N+YSuF5yPrnC7GlfgOuBArOa/XYp9YA0RRxePI52G9FQUhv4eWWrErinIJXIaznKIoG5zM9vZLX/rSOX+j7ey1114rI7OgfvTRR+Mf/dEfFTtax3HiPXv2xN/7vd8rttpLt/nJT34y/omf+Il4ZGQkLpfL8Y/8yI/EMzMzi56DdrK05F2ORqMh1rTXXXed2NCOj4+LHffv/u7v9q23+bwvfOEL4x07dshj9u/fL7a/p06dWvW2lrPWzeD9tDTO4PH42Z/9WbHSpU314FflH/7hH4plOC2cb7rpJjkeS62kMzvlZz/72XGhUJC/ZXbZ57MiJjyG/NsLXvCC+HzQmvdZz3qW2O9ycB9o6f3ggw/GK+GRRx6Jf+qnfkqOVT6fl/3jNv7tv/23YoE9yHKvixbCtCo+dOiQnCP79u2TYz9oIzz43tM++o477ugfr7/6q79a9Dj+O9qD02KY+/LMZz4z/vznPy82zBxraZG9mmPI517Onvh85zSfh9tYeuzuu+8+sXuuVCryWfl3/+7fxZ1O55x/fzn7RGg//fSnP12O4e7du+Nf/uVf7lt3D9pbN5vN+Id/+Ifj4eFh+dugXTY//zz3+F5NTk7Gb3rTm+KPfexjy1pkn28/+Hn77d/+bfk7t8PXTDt9njO0kl6pRfb5ON/n+HK+AzIb8KXn5nLfnys9ry93n8gf/MEfyHcIbf35PPyu/qVf+qWLHkdFUVaGwf+7FPGkKMr2hJEjXrXnVdDVXNVVlO0EC/mZ4sZU0rWubVIURVEuH60JUhRFURRFURRlW6EiSFEURVEURVGUbYWKIEVRFEVRFEVRthVaE6QoiqIoiqIoyrZCI0GKoiiKoiiKomwrVAQpiqIoiqIoirKt2NTNUqMoks7NbBrG5nCKoiiKoiiKomxP4jhGo9GQJuVsuLxlRRAF0L59+9Z7NxRFURRFURRF2SAcO3YMe/fu3boiiBGg7IVWq9X13h1FURRFURRFUdaJer0uAZJMI2xZEZSlwFEAqQhSFEVRFEVRFMVYQZmMGiMoiqIoiqIoirKtUBGkKIqiKIqiKMq2QkWQoiiKoiiKoijbChVBiqIoiqIoiqJsK1QEKYqiKIqiKIqyrVARpCiKoiiKoijKtkJFkKIoiqIoiqIo2woVQYqiKIqiKIqibCtUBCmKoiiKoiiKsq1QEaQoiqIoiqIoyrZCRZCiKIqiKIqiKNsKFUGKoiiKoiiKomwrVAQpiqIoiqIoirKtsNd7BxRFURRFURRF2djEcYx2FGHGCzDjh5jzA9SDEK0wQoQYr949js2EiiBFURRFURRF2QJEcSzCZD4IMesHmPdDtMOo/3fDWEgFsw1DhmMasLg0kqVtAEHMEaMTRmiEIWrcnhegEy1saxADhjy3mT3BJkBFkKIoiqIoiqJc5agKhUZvQFT05YNBkUJBsrCUfwMgTP8NxUgziDAXJEInEz0UQGHMR14ZDBgYsi2MuTZGHQtV20LFslC2N1+FjYogRVEURVEURVlDGBVphpFEUGp+IMssQpOlkF0pscLoDoXKiGNjxLFQtqz+3+KB/fPjWERVsozhRxRmybpEhkwDedNExTJRofCR7dly/1ZARZCiKIqiKIqybeHkf9r3cdYLcLbnYy5IUsi6UuuSYGTDgAiELG1M1mEgRiyP5bb4b9tpncxKIivcLh/JbawE/ouCZaJomRixLQw7FobtRPBQpFC0GJsoLW29UBGkKIqiKIqibIv0sywiM+2losfzMeuHKxYgq4GpbENpytjQwODtsmWKkGEdzlLBwn2loIpipr8l67yPj2NqHP/NZqq92aioCFIURVEURVE2lgtZyHqXxIGMNS8szveiGN0okmUvTd2K09SuTMJIRCVOoiqJeFhZlKVoWdjh2tjhOhh3bRTNRKT063H620mESZI2lpgHZGltmbkAIzQcJcu8JLEiYke2BzgLlULKGqMiSFEURVEURbmqRKnzWD2k0FlwMmOhP28PGgasJTnTlEjMqGNj0rUx4ToifihYNIVse6EiSFEURVEURVlRhKYrUZhIIjHddOkxOpMW1vuDyyX38TGMnDCS07lIzQzrXqq2KTUuw2kKGQVMzjRk6ZpJ1CWr0c9qa6hj6FOWrCf3iW8Z63fAf3tu+pmyPVERpCiKoiiKopwTqZnxA5zo+jjZ82R9rSM0lCiMwLCgfzQVO4mjWbJubxEXMmVjoiJIURRFURRlm8PIzKleInhO9nyc7vnnFTyukUZkrHQpdsos8ke6TKI0jNbYyy0H6ma0wF9ZL1QEKYqiKIqibCFYqN9PU0vT0JiO1oujJC0ts3GOIqnDYT1OMwyXFTu78g525xxMuk7finmr9IlRtjcqghRFURRFUTZZbQ6bbk4NWDw3UutnRm9Yg3MpMA2Ngmd3zsWevCPNMTVSo2xV1lUEhWGI3/zN38S73/1unD59Grt378ZrX/ta/Nqv/ZoWrSmKoiiKsu1hNGdaxE6AKc8X4cPhxRevzUlS0hITAaagOf3lgoUzG2uyHocjb4mFgKJsC9ZVBP32b/823vGOd+BP/uRPcOutt+Jf/uVf8LrXvQ5DQ0N4wxvesJ67piiKoiiKsmaRm07qqhYMOKbJOpdyG/2/tcIkqsM+OUxXW67HDXvSjDu0eLYx7jr9hpwFCp3URU2jOIqyQUXQ5z73ObzsZS/Di1/8Yrl98OBBvPe978U999yz7ON7vZ6MjHq9ftX2VVEURVEU5WJipxaEON71cMYLJILDZp+ti9hBX4yyZYnYyXrasJknIzcUQoqibEIR9IxnPAPvfOc78dBDD+GGG27A17/+dXzmM5/B2972tmUf/9a3vhVvfvObr/p+KoqiKIqiLCd65lLRw3Gs60kE53zQaIApaUxTs8RJLXFL421Zpn9jqloW2aHgKVnWVX1dirIdMGJ+gteJKIrwpje9Cb/zO78Dy7KkRui3fuu38Ku/+qsrjgTt27cPtVoN1Wr1Ku65oiiKoijbCaayNYII80HQr9E50fXOcVUzYWBXzpFBAUNzgYptibDRyI2iXFmoDVhWsxJtsK6RoL/8y7/En//5n+M973mP1AR97Wtfw8///M+LQcJrXvOacx6fy+VkKIqiKIqiXAqsv6mnNTdMXeuGiY10T+pxosRaOk5spHuZxbTct7wRAYUNBc++vIu9eVfc1ViToyjKxmZdRdAv/dIv4Y1vfCNe+cpXyu3bb78dR44ckbS35USQoiiKoijKSojiWKyjaSHNxp9nPF9MBpbrh7NS8qYpUZ3MkCCJ+LjaN0dRNiHrKoLa7TbMJVdLmBbHNDlFURRFUZTV1Oac6SWC57Tn42zv/DbSrM2pOue6qWX20bKe3s6ZSR0P7aS5rijK1mBdRdBLXvISqQHav3+/pMN99atfFVOE17/+9eu5W4qiKIqibKCITieK0AljtMNQrKbbYSTrTGdj01DW6DB1bSk0GdiRczDpOtiZS5p/VlPho/0IFWV7s67GCI1GA7/+67+OD3zgAzh79qzUAr3qVa/Cf/pP/wmu665p8ZOiKIqiKBsD9sKhwQDrcihoOhxRnC6T2+10yRqd5frkLIXuahQ7kyJ6bFlS9GivHEXZPtRXoQ3WVQRdLiqCFEVRFGVzpKod7vRwqufLYO+cS6nHKVimuKwVTfMcG2kVPIqi1DeLO5yiKIqiKFsz0sOeOY91eni83ZOoz1JYXzNsW1JrQ3FTSEVOtp43jUT0cF3tpRVFWWNUBCmKoiiKctl1OzN+gONdH493ejja6cEfSDShgNmTc8VGmo5qO3K2iButy1EUZb1QEaQoiqIoykUJ41hqeOqpGUHdT5Y0J5j2/EWih1QsC9cUczhUyOFAwdXeOYqibChUBCmKoiiKsqi3Dmt2KHC4nBOxE6ARRBc0KKDtNCM8FD3XFnPSS0cjPYqibFRUBCmKoijKNjYtmPHDfgrbyZ6P7gV69dFyOjMj4HI4tZymKcGoY6kxgaIomwYVQYqiKIqyDU0LHm13RfwwnW1pRGfUtTBs2xhxLIw4thgYcNCRTaM7iqJsBVQEKYqiKMoWp+YHeDR1ajva9RAM1O+wvw4NC5jGtjfvYsJVq2lFUbY+KoIURVEUZYvV9bCe53TPl/Q2prnRuW0QprBR9NC4YH9eTQsURdl+qAhSFEVRlE0qdpjKRoEz7QX95awfLIr0EBMGducdXJMKHzUtUBRlu6MiSFEURVE2OK0gxFkvwFnPx7QfYCYVO0ttqQdT3CZdBztzjoifA/mcNB5VFEVRElQEKYqiKMoGMy440fNwrOPhjOeL+GmFi80LBsXOqGOLO9u4u7Cke5vW9SiKopwfFUGKoiiKsgEakT7a7uFbzY44tvH2IAYMcWqbcB0xLsjEDh3bVOwoiqKsHhVBiqIoirJOPXoY5bm32cH9zQ46A/15aFxAw4JdORc73ETwqHmBoijK2qEiSFEURVGuIkxtu7/ZFfEz5fn9+8uWhVvLBdxSLmDMsdS4QFEU5QqiIkhRFEVRrjBBFEuaG4XPY+0eIsT9mp7rinncVi7gQMHV1DZFUZSrhIogRVEURbkCNIMQx7qe1Po81umhN5DutjvnStTnxlJeXdsURVHWARVBiqIoirIG9T0zfiiubie6HD7mg8UNSiuWhZvLBRE/rPFRFEVR1g/9FlYURVGUVUL3ttM9PxE86XLQ2CBzdKOpwf6Ci+uLeezOOVrnoyiKskFQEaQoiqIoKzQ0eLjVk9qeox0PXrxY9DiGIW5ue/IO9oqzm4OcOropiqJsSFQEKYqiKMoF0txYz/PNRkdqezJDA1IwTRE7ezhyDiZzDiyN9CiKomwKVAQpiqIoyjJubnRy+5d6C3P+Qm3PzpwjqW2HCjlJddP0NkVRlM2JiiBFURRFGRA/32i2cc98C40wlPvypikW1rdVCphwnfXeRUVRFGUNUBGkKIqibHsofr7Z7OCL882++KGb21OHSri1UtDaHkVRlC2GiiBFURRl29IOI9zbaOMr9fYi8fO04TJuLxdgm5rupiiKshVREaQoiqJsK7wowuMdDw+3uni43UUQJ2YHZRE/JdxRLqr4URRF2eKoCFIURVG2PJ0wEpc3Ch9aXGfCh0y6Dp5YLeLmkkZ+FEVRtgsqghRFUZQtSTMI8Ui7J9Ee9vUZtLcetm3cUMrj+mJO+vmoy5uiKMr2QkWQoiiKsqUiPve3Onig1cXJro94QPjQ2Y2ih+Jn3FF7a0VRlEslinrw/Rp8f06WcexjdPSZ2EyoCFIURVE2Pad6Hr5ca+OhdhfhQKrb7pwrwue6Uh6jjv7kKYqyvYgiH2HYRhzT+CVCHDMmHrETNAyDrpdmekHIXHQ7joP033YQhi0EQQNBQNEzL4P3D2IYFkZGnrGpLi7pL4KiKIqyKYnjWAwOvlBr4kTXWxTxYV+fG0t5VGxrXfdRURTlSkOxMihQZASpWAlaV+x5LasAxxmB4wzBtodFaBnG5pEWm2dPFUVRFCXlaKeHz8w1caKXiB/LMHBzKY+7qiVM5rShqaIoG5co8iSSwpQyrifLnkRfJIVXotnJyG4v3B/1/30YNiUVLQib6d+Wh1EaihOJ0sh6enFItsuoUJRuP4sSRcnjTQeWmYdllWDbZdjOMBx7CA6XzhBMM4fNjIogRVEUZdMw6wf41GxDzA6IbRji7PbkaglljfooirKBUtCCoC5DhAqXQQ2BXzsnlWwtoCChMGFkxubSplBJBiM2yrmoCFIURVE2PN0wwufnm/hqoy01PyYM3FEp4NuGyyp+FEW5bKIogO/PwvOmpdif0RWmkkl0Jg7TWppQoiQJjKpk9S8GII8J08jOQnru+WA0xrRyIl76Q1LJsu0aMGAmN/l/ssJvPgOG6fYjNInwGYZpFjZVPc5GQEWQoiiKsmEJohjfaLbxubkmOlEy+bimkMNzRqsYd/UnTFGU1dcSMkrj+zPoeVPwetMifDx/dkDgXD40GbDtqoykZqaaRmh43xAsK79mz6VcGuv6C3Lw4EEcOXLknPt/+qd/Gm9/+9vXZZ8URVGU9YfRnm81OxL9qQd0NQLGHBvfMVrFNcXNnYeuKMrqCcOeFP8zrYyRFnEvi33EESM1HFHf/WyhliapcYmZnhZ1JQ2N/57/ZjlMK4+cOw7HGYVtVyTSYpquCJqkjiZzUFsQVFntTlZ3Y5oOTLOY/juNzGxk1lUEfelLX0IYJj9u5N5778V3fud34gd+4AfWc7cURVGUdaIVhvh6vYOvN9popr8PZcvC04ZLuLNSFAMERVG2HhQvCzbMi2tofAqfMKkDXBMMQyIyrjshI5fjchyWVVbhso1YVxE0MTGx6PZ/+2//Dddeey2e85znrNs+KYqiKFefMz0fX6m3cH9roc8Pxc9ThhLx45g6MVGUjYrUy8S+1NUk9TN+ukx6zZxzHx8bdtP+My2xcw6C5kXT0Sy7KGllWf2MYTDq4iS2zGm9TH85ELVhVIb/hgYBSYpaZcEhTdm2bJiEas/z8O53vxu/8Au/cF4V3uv1ZGTU6/WruIeKoijKWkKx81CrK2YHg31+2OD0rmoRN5TyGvlRlHWGIsXzzkrNTODT7ayBiKllqa2zWDufJ71stVCY2E5VbJgXamlY+J/cpphRlC0ngv7mb/4G8/PzeO1rX3vex7z1rW/Fm9/85qu6X4qiKMra0gpCfK3RxjcanX7KG6/dsrkpxc/uvE50FGU9BU+vx3EGnjeVRGhWgdTGSHTG6kdrkvu4bqf32VJ/I/1npAcNhU5V09GUq4oRJ1Vd686LXvQiuK6LD37wg+d9zHKRoH379qFWq6FarV6lPVUURVFWC39qTvZ8fLXexkPthZS3kmXhzkpBUt7U6lpR1j5NLbNsjuNkyfS0iOvSbLMzUIeTpqQtVz/jjEjNjDibOUNiz7zI2llMABJxoyJGWU+oDYaGhlakDTZEJIgOcXfffTf++q//+oKPy+VyMhRFUZTNI34ebvdwT62FU72FlLc9eRdPrGjKm6JcDhQxnjcrds9MV/O9OYRRJ0lTC3sidrCaa92p4Mm5O5DLcUyK+NE0NGUrsiFE0Lve9S7s2LEDL37xi9d7VxRFUZQ1gJGeB1pdfHG+iRk/qRewDQM3lwp4YrWIyZyz3ruoKJusr81sKnS4nJElRdBKkNQ0pqjRIMCgSYCbpqMVB9LRhuC6YxLZUZTtwLqLoCiKRAS95jWvgW2v++4oiqIol0EUx/hmsyPip5b298mbJp5QKeKuoaKkvynKdhc1maEADQa4DEMuOTzpZ5NEcuie1hbhcyF7aBoJuM6o9LZx3dG0t02SpsaGnFyqE5qinMu6qw6mwR09ehSvf/3r13tXFEVRlMvgSKeHj882MOX5crtoWXhytSj1PnlrocGgomx1GKGhuYDnT0vERupuwqbcT4GzqhS1gb42idAZ6wsepq5pqpqibFIR9MIXvjDtuKsoiqJsRma8AJ+ca+DRdrcf+fm24bL291G2DRQ53e7JdJyA581c9N/QLW3BYCAP08rByta5ZLqamRfB4zjDks6mKMoWEkGKoijK5qQdRvj8fBNfq7cRIRab6ydUi3jGcBkFjfwoWxRGcmhGQPvobu+UCB/2z1kKhYubm4DrjPUbdLJZZ1/kmDoFU5T1RD+BiqIoyqpND2h1TQHUjZIO79cV83j2SAVjrv6sKJuxRofW0bSMbvfrc8RlLcxqdjqSzsaITxi0zt2IYYiLWj6/G/n8HhTye8R0QFGUjYv+WimKoigrniw+0u5J6ttc6vg24Tp47mgFBwrqKKVs7HPX9+cWhvTFmUPg1xCEbSBOxPxKseySRHhoIU3Rk8/vVFc1RdlkqAhSFEVRLsqxrofPzDVwvJv0+qHL27NGyritXICpfX6UDQYjOt3uafR6HGdkiCHBBWDNjWkVkjqd/jKpy2EKm22XJaWNdtJ0XVMUZXOjIkhRFEU579Xzo10PX6y1xPkt6/Xz5GoJTx0uIWdq3Y+yvsRxhCCoJTU67KPjTYvwWa5GhzbRTuqoxnodxx6WJcWNabJWR6dEirKd0E+8oiiKck6vnwdbXXyp1sKZ1O7aMgzcXi7g6cNlVGztOaJceeI4lIhOEDTTWp0WgrAlNTlyf9gU+2k+bjkcdwT53E7k0kFrae2XoyhKhoogRVEURfCiCPc2OviXeqvf6NSh+KkUpd/PkKM/GcraRRlpMuD7s0n/nKDZFzjZbZoRrIQswsMaHS7zuUm47iQsS2t0FEU5P/qLpiiKss1phaG4vXFkbm9sdPrESlEsr4tqd61cJqzH6XROoNs7iV73lNhLR1ESZbwQhmHCskritEYzAlvWk9tMY2NqG+2n+ThFUZTVoCJIURRlm0KHN6a8favZQZA2rR5xbKn5ubVc0EanymVFejx/Bp32YXQ6R6SXDut3BqFwsaU2pwqLpgOpwKG4sSyaEJSkVsdQ4w1FUa4AKoIURVG2GWd6vpgdPNTqIkYifnblXDx1qITrijl1e1Muw5HtJNqp8GEtzyCOM4R8YR/yuV1iLU1TAq3RUZTNSxRF6Ha7aLfb8H0fu3btwmZCRZCiKMo2Yd4PpMcPxU/GNYUcnjJUwr68q1fclRVFeGhQ4Pvz8IP5ZOnPiSvbUkc2CpxCYR8KhQMoFg+K6FEUZRNGdT0PnU5HBgXP4JJCiFiWhZ07d26q3xEVQYqiKFscP4rxhfkmvlRvIYxjGDBwUykvkZ8dOWe9d0/ZgNBxLRE3tJ6eSZuMziPw5y9Yy0NjgmJhvwgfNhFl7x1FUdaPIAjQ6/VkyWgNlxxhGPYHhcz51vlvuX4+KH6KxaIMPs62N4+02Dx7qiiKoqyaE10PH5muYdYP5PaBQg7PHa1gwtXJqbIAU9c63ePodo6j2zslggdLanj6GIY0DZV+O/aQLGk/7bo71JFNUdYpWkOB02q1JEKTDd6miLlcDMNAPp9HoVDoj1KpJMInl8ttqujPICqCFEVRtiCM+Hx2rol7ai2p+ylbFp4/VsX1xc37g6WsHTQpYFNR1u+0O4fh9abOeYxpugPW0xQ8aZNRZ0hreRTlqqSehssOpqdR3GT1OFlNzvlwHEciNNngbcuyZJimecF1PpYCiOtbDRVBiqIoW9D17e+najjV8+T2beUCvmO0ioJaXWO7Gxe0O0f7jm1h2F0U3cm5E8jn96JQ2AvXHReHNhXMirJ2UMBktTUUMRQzg2NpmtqlRGuy1DSOLFpDIaOci4ogRVGULcR9zQ7unqmjF0XImyZeOD6EG0v59d4tZZ168/R6Z9HpHBPRw/VBTDOHQvEAioWDKBYPSO8dRVEuHdbQMCLDCM3gGBQ+jPCsVtxk0ZlsUNQwDY1jUPRsxWjNlURFkKIoyhaAouefZurS84fszbt48cQwqrb+KG51OKkKgjo8b0ZMDOjUxkEzAyyZcLm5CRQLB1AoHEQ+v0ubjCrKMp+nQQEzaCawnKnAoJlA5pR2IZiOxpoaRm1c1100+DcKmWyZpaVpRHYDiaCjR4/iyJEjkoM4MTGBW2+9VdSooiiKcvU50umJ+UE9CMX57RnDZTx9uKT9frYgYdjpi5xM9PjezHkd22hgkMvvSoXPfmlEqihKAkUL57LNZhONRkOWHBQ6lwoFC+fEFDnZGDQUYBRHRc0mE0GHDx/GO97xDvzFX/wFjh8/viicR/X67d/+7fiJn/gJfP/3f7+oVkVRFOXK0gpDMT/4eqMtt4dtG989MSRRIGXzEwQteN5ZSWPreWfh9c6e04A0gxEdhw5tDl3asrEDtl266vutKBvNWIDRHA6mo2WuaVmfm+XS0ziPpZDJRMtSQ4EsUjNoJDA4dB68OTDiFSQnvuENb8Cf/Mmf4EUvehFe8pKX4KlPfSp2794tJ8fs7CzuvfdefPrTnxaBxDf/Xe96F57ylKdc8Z2v1+sYGhpCrVZDtVq94s+nKIqyUZzfvlZv43PzTXTT9IsnVIp4zmgFrv74bmrHNtbvtNuPodM9Bt+bO/dBhgHHrg4InnERPHRtU8c2ZStDEZMJl0zUDI7lXNRWUn9DQVMul2VUKhVZsr5GhczmZDXaYEWRILpLPPbYYxgbGzvnbzt27MDznvc8Gb/xG7+Bj3zkIzh27NhVEUGKoijbiSiOcX+ri8/ONVALEuegSdfBc8eq2KfRn00JJ2k97wyazQfQaj2MMEiieoJhwHVGpY4n5+6QyE4uNy6GBoqyVdPTMhOBwX43F7OAvhiM4GR1N4NGApu9z41yFSJBGxWNBCmKsh3g1/Qj7R4+M9/EtJdMBNj35xkjZdxeLmjtzybE82bRbD2IVvNB+H6tf79l5VEqXY9C4QDy+T1yW1G2Cqy1WWoLnaWoXSg9LSNzQ6OYobDJRpautlxqGoeKnO1Dfa0jQYQn5sc+9jE897nPlXDh0if8xCc+IelyapCgKIqydhzrevjUbAMn054/tL1+2lAJT6yW4Jj6w76ZYD1Pq/UQms0HF9lVG6aNUvFalMs3inmBprUpmy16s1TYnG+spPcNRQuFDksuBiM2vE2hoyhrxYrPpne+8534u7/7O7z0pS89529UWv/rf/0vSYP7mZ/5mTXbOUVRlO3KtBfg03MNPNJOGlo6hoEnD5Xw5GoJeW16umlqfOji1ukclTqfbu/0gmW1YaJY2I9S+UaUitfANDWdUdm4MDrDi+GZgxqtoxnB4ZLiZjVJRRQ5g7bQmQGBpqcpG1YE/fmf/zl+/dd//bx///mf/3m85S1vURGkKIpyGbSCEJ+db+IbjQ5ixDBh4I5KQWyvS9rzZ0MThmxOegrd3in0uqfQ650+x7qavXkofMql67U5qbJhocBhlg9FTzYuVJNDE4EsRW1p75vleuEoykZgxWfiww8/jDvvvPO8f7/jjjvkMYqiKMqlmR7Q8e3Tc014ceL4dn0xj28fqWDM1UnDRoNXvtmMlEInEz3s27MURnjy+d0oFg/JYN8eRdlIqWyM5mS20RQ7FD8UQcsJncxBjZGbrBcOlxQ3Gr1RNhv2aorZpqamsH///mX/zr9dTnMpRVGU7Zz69tHpWr/uZ3fOFbtr7fez8SI97c7j6LSPoNM9utjJLcVxhqQ5aT63C7n8bnF3Yw8fRbna4ibri5OZDwwaEWRLPma5VDYKGjoDU/BwsOyBt9U2WtmWIujWW2/F3XffjSc96UnL/v0f//Ef5TGKoijKyuDk46v1Nj4510AQx8iZJp49UsGdlYJeVd1QtRCH0Wjch3b7ccTxQmE3DQxyuZ2S4pYtNcVNuZpQzLBGh1Ec1uwwqpMtKYRWAoUNa3EochjpoeDhUtPWlK3Ois/w17/+9fiFX/gFETrf+73fu+hvH/zgB/Fbv/VbeNvb3nYl9lFRFGXL0QpDfHiqhsc7SdrJoUIOLxofQkXrfjYEUeSh0bwf9drX4Pvz/fsdd1SMDOjilsvtgmnqRFG5OmKcwoaCJxtMXVsubS2DF1IGzQcGl4PrrOPRCI+yUuIgQtQNEHVDxN0AsRch9tmYFijcNIrNxIq/vX/iJ34Cn/rUp8Qd7qabbsKNN94o9z/wwAN46KGH8IM/+IPyGEVRFOXCnOx6+Luz82iEIWzDkNS3J1aKGv3ZAARBA7X619Go34soSiaYbE5aqdyCcvlmuO64vk/KFRM6WR+dwWahjPJweb6SA9bnMHLDJQfrdLKaHRU32+8cinshok4qUvwQCCLEYQwMZj32XSoNgKeIYchqcjv9fgtjxFGUiBxus5dtc/kIo2EayN84sqm+H1d1Cevd7363iKD3vOc9Inx4sCmG3vzmN4sIUhRFUS6S/tZo4xOzDYRxjFHHxkt3DGPCddZ717Dd3xe6utXqX0Or9SiQGlM4zjCqQ09ApXyzWlgrly1uGMnJRlaPk9XpZOsXsprO0tZYo0PRkw1NW9t8xFGcigwuo4Xb6d/7MkJWFkSFnB9RLNEYipHYSwVPJ0CcCR9u6wpj2CbMggUzb8NwLRiOKUt5AZtHA8GIV2Puvom7wiqKoqwnXhThH6fruL/Vkds3lPL4rvEhqQNS1i/q02Tz0sb9i5zdCoW9GBq6C4XCwU11VVPZOGlrnJdwjpKlrq2kSWgGRQ2jOVnfHNbqZOsa2bm6yBQ5EysrFBeMulCciEDpJcu4lwoWWU/vu0Kzb35lGXkbZoECxRTBYmS95bKvMy7jbMTJvvD/uKTIigHDMgDLSAQPt5ezYORT4WObW0Ib6OUDRVGUK8yU5+NDUzVMe770/WH625Oqmv62Hs1Le70zYnDQ7hyG15taZHJQLt+AavWJyOUm1nU/t8LEMWRko9NGr9OG126j127JetDtwvc8REEgfbD6E7D0EjIn+aZlwRhYyrppyd8MK1nKupk9zpR/HoYBojBExGUQIgx8hEHQX/I5+2YBAzNQbsOybVi2I88p646TDGthve/yN/CxDTwPjQbrc+qoN5potlroeT1EcnWf+8LJbvJcjmXBcWw4tgM37aeTy7lwcznkcnnkaDedz8PN5SW1SHbT4/HqojY7jfkoGniN6evkksdSZq1Gsms8NvK60tdi2zDT5eBrNG1Hlnwu7q/sa7rPPF6B10Pg+/IaQ9+T+7PjFg8eO74n6bb6x++c5+Fjlhxj20ne3yXfg/JaeF7I+ZF8brNJutzHSXp67vA94XvDbV7KedqPpLQYTfERtQMZcS9IxAzTyK4g8tJNIxEcFLjZoeg/bbz4Nh/Lx1DYuBZMRmBSwZMNg2IlS2lT1kYE3XPPPXjd614nVzhogvDKV75ypf9UURRlW7LU/a1kWXjJjmHsU+vrq2prTXc3ip5O+zDCsLvwR8NAPrcT5fJNKJVuhGXlsC1TtbwevE4nESrtFnw6i1E8cIIdhYjTSXeiVbIJKlN6ov42oiWT5sUFCFvkOEURvCCEH3Ik6z0KqyWX9Dn9zDk28q6NnJ2Ha1sigMylFz3iAOgGCLptsNqnhe2IkQgYEcPJOOfcob6LjGTEyUDEVCYj+Ru3YZgiskzLhi1Cy4ZF4UyxZSb3y4CZRGI40tQxnsciJmVJ8RPJeZ+d5xRaiQBPBHkm0CnMKe5EmKe3RbjzPscAKFDSJWfbMV+mHSM2Y0RmJLcpVuTfpDU5FPQiuikcU/HN18PnXAlyDKMIgZeIfhH/Im6jZB95jOS4pALVXDsjHj73Zruwt+J0OFpj/8f/+B/xxCc+EbfffjtmZmak6G490XQ4RVE2KjNegI/N1HCsm/T+ubaYx4vGqyKElCuL79fQaj0swqfbPdWv8clMDgrF/SgW2Lz0wJa2tOZEjhEZn31hsmhMu51EaAbWOfG7EthuDm6hiFyRowS3UICTy8PO5WA7rIPjxI+5O+k/4EV+FmJLNCJdyu2FSerC35KJava3ZDKZRiIsWyam/YjOQDRkcNLH56bQowlBj7U6qbV0r9eF1+uh1+1JVEdqds5Tr8PJKd3VpJdOpYqhoSqGhoeRyxcWokm2nQjFdDKaRXL43gS+ly59ibZk92XPlcZ25BhJZEcm3Hwt6aTbTm+b5oKIyAQFI0eB34/sJNGwLDqWTZKTPkHZNjjRTyb3NixxjnPlfbTcRFhkxy0jeY50W+HgxDtZDq73/yYRuXCRuDEjE0Y4sAwX3+4fh8VH/7LFtsSUrBiRHSG0Q0RWJOtcxoYorP5yPWtdRBQNRChFjMGQ/Q/9QM6bJOLp9y9OrAST73X/PF0svLL75BjwHFoSfUzO2eQ5uc7z4qkvewW2ZDocRc/evXsxOTkpBX10KlkLEXTixAn8yq/8Cj784Q/LNq+77jq8613vwpOf/OTL3raiKMrVxo9ifLHWxD21lpgfOIaBZ6v721WJ+LRaD4qtda97etHfaGtdLB5CsXBQevkw9W0zwMmM3+tKGhmjM2F/0pGmeHHCnC6zIROT9L7ViBuKExEqxaKIFcvipNfsC4t+2pJcsU7O4/5tTqZsB7brLgzHvaQUpSsFhQwtpduNpsw1Mve181pM8xyhgONYYkxA57VsSfHDmp2t+tnuu40xTUzskFnPMlDIn9XKSB1J5kAWi+NY7MTJLDMr5h+sQaEYpNuYCFtGEPjvEkEsZ9SAM0DmWmayAN8eqHGRupQYUZylB4ayHgbJMpmwZxHNJEWS98M1pLaFaWOsc6E4Hjx3LYfDlggQ39cFEeknQi4VqoOpglxm63y+JLKTKKdkwZRLfo7SqBE/U9nxHRCtyXMtfJ5FLPL7LRU46CY1pSshiVjZIpz5vH0BIymaiVDi9lm3xO+Zy8fYdNGgFYsgRoH+9b/+1xgZGcFrXvMaWV4uc3NzeOYzn4nnPve5IoImJibw8MMPr8m2FUVRrjaPt3u4e6aO+dTKltGf549WMORo+eWVwvNmUat/Fa3mg4giP7nTMFDI70WxdK0IH8cZwkaGk5JWbQ6tuTk052bRqdckQsMUtWyycjnwai4FDiMyFDm5QiJ2ktslmehvJMFy+U5/vUW9dC7WT4eTxMH+ORcam2mCt1JkAk6nsS7Fjo+wldXGcOkjDq5MaiMn5ra14CwmNS6sZ8mlxfepSBHB4mzPOpcFUTRw4YORQjFpSOroFtWwZXVXaaTwglHiII3OLbl40o8qpfdTtPajj3JRhIJuMHKUPGcS3d1crMod7tixYxJmYsPUteCNb3wjPvvZz+LTn/70Jf17TYdTFGUj0AxC/PNsAw+mzm8Vy8Lzxqq4vpjbkpOmjQDd3Obm75G0t6xYmxGfauU2lEo3wLZL2IjwanG7Po/WfCJ4KHwoes4vdgyJzLiD6VVpuorUOwymrjB1aTC1xXXWPO9/o8Cr7RQ2meU0ozqZ8KHd9HIsdVrLIjpMZ9usSP0K7ZFZ40Lb5GDBPrlvvSx1L4nrl0RhpGdMvPBYRncuYAAgtSosuGfhfSpWxDWMoiQr6k/7y6TBj6TXzKLeM0t60fB/UjOzPcWNcuVYjTZYV4vsW265BS960Ytw/PhxfPKTn8SePXvw0z/90/g3/+bfLPt4fuENXs3hC923b5+KIEVR1gUWRH+t0cZn5prosfAUBu6qFvGMkbJaX18het405kX8PNIXP8XSNRiq3oV8fveGEJ28iir1Nky36rTRadTRqc2jXa9JLc750tFKI6MoDY/ISGpoinDzdArbPucS06Oy3jkc/M1fup4tzwfPAYob9tBhulrWV2cz9tOhSBGb5W7SC4YpaVEnTHvCBPK3tYICxyzaMIsOzFK2dBIBpEJF2SSseU0QuxXz6slKWenjH3vsMbzjHe/AL/zCL+BNb3oTvvSlL+ENb3iDhJyZcreUt771rdKYVVEUZb053fPF+IBLsivn4oVjVezIbd6ryhuZXm8K8/NfTJqZppRK12F4+KlX3dKaKSrdZgOdZgPdRgPdVhOeWEAnDmusC7gQFDeJ2BlFaWQE5ZExifZsBAF3NWCkhvME1uUMjqyB6EqvzTKNjf10mMrGqE7WPJTzD/5tQwiY7kCUhtEWsV1OIjZJhGagpmZgybob+beM6FyEpI9LWi/D6AprZaRuZnGkJovcyH10Y87qa/hvcjST2B7nn6KsKhK0a9cu/NzP/ZwIE64vBzdz9913421vexue/exn41d/9VcvtlkROzRA+NznPte/jyKIYujzn//8OY/XSJCiKBvB+OCz8w38S60tzjx508S3j1RwR6VwrgWusgaNJ0+iVvuy9PYRDGNB/LjjV2UfmLpWnzqDxswMmrMzaTQnXlEdDmtv8qUyikPDKA4NoVgdluLr7dg8NGsgSgF0oakHxWDSQ2ehTmfpOsUPIzsbQThKTU0nQNjwZEQNP1muUZQmEzlSJ5P1g+HtdF0EzwY4DoqyJSNBn/jEJyRS85u/+Zu48847Rbjs3r1bvoRobnDfffeJaOEXEsXPT/7kT65oRymomBI3yM0334z3v//9yz6eX3zrbcutKMr25XjXw0ema5jzE+ODm0sFPHe0gpK9/ledtxJR5EmtT73+TWluKhgGyqUbMDz8ZLhXWPzQKal25jTmTp/E/JnT8JdxZKLIKVSqyJfLyJcrfcGTpbFtxiLhtRIEjOrMz8/3x3KmBJw/MHozOLKoDmt0NsqkXsSa1NNEiOiK5if9ZcQ8YMBA4Hw1NYyySHH/QHRGnM1kmdXRGItqbKRehqlpFDqM0LDPjKIoa86KRNCNN94owuTo0aP4q7/6KzEyYPSGX3Tj4+PSO+j//t//i+/+7u9eVQiaznAPPvjgovseeughHDhwYPWvRFEU5QpGfz4918BX6kn0h8YHLxwfwjVFvSiztq5ep9Bo3IdW66G+0xvtrMuVmzFUfSJcd/SKPDedkmhQMH/6JOZOn5Joz2Ckh4KnOrEDlbFxGRLNyanpBVPXGOXhXIDRncyNbano4XFiXQ6vzvLKLJfrcUFT0tM6qesZG2XSEU1MBBbWk3S1NC1N0teirPTsgkiforIDq+LKMKsurJKTiB9FUTYk62qMwLS3ZzzjGVLn84M/+IO45557xBThne98J37kR37kov9e3eEURbnSsObnQ1Pz/ejP7eUivmO0gjyv5iqXTRDQ0esBNJr3wffm+vfT1rpcuRXVyq1r2tCUvThYw8MUN3Fom01S3KQHxwDFoREM79yFkZ27UBmf2JIOaxeD0wMKHTqvcWSCh4Pr53NhYz8dip7h4WEZ/H2+WqYEmVvagsXzwPplpqdJ/YybRHb6pgGZkYCaByjKhmDTuMORD33oQ5JCx/5Ahw4dEpOE87nDLUVFkKIoV5L7mx1JfwviJPrzovEhHNLoz2XDxoXtzuNoNu5Du3Ok7/JmmLbU+1TKt62J0xv7YIgd9VwieDjatfllm4jabg5DOyYxPLkLwzt3Sw+d7QSnAhQ6TF9jNCczLjif0MlgjQ7T2GhGwEFjAv4er5UxgUxRaOXMaE1q/bxopJEcRnayCM+FYGqZVXRgFNLeM2LTnBoEZGYCVpa2lqWppelrKnIUZcOzqUTQ5aAiSFGUK2V9/em5Ju6pNeX2NYUcXjwxrNGfy4A/NZ43JRGfJhubhgsdyvP5XSiXb0a5fANMM3d5tTxnz6B29jTq01Po1OvLGhiw4R9NCsShbWhEIj00LthO6W20oqbQoejJTAuWs53mMWHqWtZXJ6vdyZaXEuGheBHBwv40rLORZSg1N+gLnQHRs8pZitThFNIITRapKdqwiqyv2X4RPUW5kkRRDK8dwPdCVEbzW88YQVEUZbvQDSP8/dQ8HuskdQ1PHyrjmSNldX67RFjbwxqfWv3r8HpT/fstu4SKCJ+bL7nWh8KqMTON2ZPHxciAkZ6loqfff2eIltTDKA6PoFCubKveO1lzUUZ4ODGg8OFEIQgWR8QYvclqdrKmohQ7lxPVoZAR17R6MqJ6D2H73EjcxZDITD9qMxDByYb0uEnEjtzWz6uirBlxFKPXCdBt+TJ6rYV1j816oxi2a+GuF22umn4VQYqiKCkzXoAPnJ2T+h/HMCT97eZyYb13a1Pi+3U0Gt9Eo3EvwjTqQ5ODYulaET+Fwn4YbFZyiZbV08eOYObYUfTaSbRusJaHaW0c5ZFRcWrbbjCik9XxMNpD8cPB6M8gjOJQ8HCwdod1PKznuSzBQ8c0ETy9RPS02Pfn3MeKYxpra1xL6mwoYmRkfWsGB0WP9rBRlEuC35khP5t+hMBPlnI7SHpSRWEs0RzWS3I9pj9IGCHw+PhQRE6vnQid82FaJty8Jdu1NpEZiIogRVEUAI+2u/j7qRp6UYSqbeHlO0YwqY1PV43nTWNu/kticZ3Nfm2nimrldlTE5ODSRGW7XsPMsSMifjoNprktOLeN7t6L4V27Rfi4+cI2ctPrLRI72fpyaW1Z/Q7FTiZ8GO1ZqeiRBp5MUesl9TeyZBPQXiBLMR/oLB/hodWzRbe0Sk6WdE6j+FEUZe2guMmiM91mukwH/3a5mJaBXNFBvuwgny5zRRv5kgOHzXo3YfR11SLo4MGDeP3rX4/Xvva12L9//5XZK0VRlKs4mbyn1pIaINpf78m7eNmOYZQ2QMf5zUTPm8b83BfRaj3Sv69Q2Idq9U4Ui4dWHfWJwhD1qbOYP3MK86dPicFBBp3aRnbvwfi+A2JiYF0l57H1NCyg/XQmcmhYwCVT3M4H63WYzpYZFlD0MLXtQhOVfupaw5NeOFEvSJYieoIV1eZQ3GRCR4QP13Nb9/1RlCv52WeEJgqSSA6jNEkEh1EaRmjCJEUtFTx+N7ioiLFsCxbNQWxDlib7VNHe3TLOWWd6GwcjPBQ6thki7nQQtduI2g1E821EJzvo8Tup3eaVEgy95CXYTKz6m+nnf/7n8cd//Md4y1veguc+97n4sR/7MXzf932fNjFVFGVT9v+h+9sDraQZ5p2VIp4/VoW1Ca9orRe93hTm5yl+Hu3fR4e34ZGnIbeKpqbSZLNRF8FD4UMBNOjiRhFFy2oKn5Hde7dsM1K6sWUObazb4XJp7U4GoziZWUFWw5ONixkWSBpM20dY8xDWmLrWQ9RcPnUtgx8LSVmTJp5MZ7MX0tpoREDLaI3wKMp5v+OYYtZr+5Je5nVDBL1QDAUoavxeKClqUbiQrrYaVxCms9lGCNcK4Zo+XHhwzRB5J4RjBjCiCDG/U70YyILFcbb9dCmPoSlJSHtNWQZeD/V2G3HaJuK8mIa8xs0UEbpkd7ivfOUrIobe+973ytWoH/7hH5YI0V133YWrhbrDKYpyqcz7Af7u7DzOeD5MGCJ+nlDdfvUjl0qvdxZz819Eu/VYcodhiPgZGX4q3BWKH58/rmfPSIPS2plT6LVbi/7O1DZGeih+hiZ3wnG35sU2RnVmZmYwPT0tv2dLf5Ypdmg9vVToMNqz0nS2qBsk5gQUPBQ+jR5iTrKWQFFjDbkwC04ibpjmkk/FDgWQ2kQrynkjNhQwidAJJEpDweN1AzES4G2KGwoNUGiI2AgW1hnZ5d+yz78sEiHEj3l/GDFsBLAiD3bUgxN14PgtuEEHlnllDZ8Nh26Lxf4wsvVCEWapCPfgwXU3nbmqFtm8avW///f/xq/8yq/I+u233443vOENeN3rXnfF1aCKIEVRLoWHWl18dLqGbhShYJp42eQI9uXd9d6tDQ9/Lrrd45if/xd0OkeTOw0D5dINGB5+Clx37KL/vjU3i7nTJyXiQ2e3QTc3prlVJ3ZgaDJpUlqoDm2qq4orhQYF/P2i8OFgPc8gFDv8TeOgWcFKa3f6jUKzwWJmTrya3rL9cwymxLBOZ8iFNZTW6+Q1dU3ZnlCEBI0mOlM1tOfa8DsBAi+A32WUJkAgImdgRDH1i6z3v8c4pY7jRNAEA+ImoLFAEl2xkURrHCuCZUSwzRi2GcHiMGIROUvHSr8GaSJilsow+Z1RKsHIuTBsWwYsGo/YSUg3tb8XBjduskeWxWLL1JCEFz/cBdHjbvzfyatikU3B84EPfADvete78LGPfQxPf/rTJTXu+PHjeNOb3oS7774b73nPey5184qiKFck/e2Tcw18tZ5MOnfnXLxkx7AYISjnJ44jtNqPojb/ZfR6ZwbEz42p+Dm/xXXg+2JfPXfqhIgfv5ukHmYUKtV+tKc6vmPL1vd0u13Mzc1hdnZWloNNSDkZoWHB2NgYxsfHJb3tfCJSeuzQkjYVOVHH7wseGhScD85zzLIDq5pbEDwlZ10iO1EcIYxCWKYF8xIcApXtC1O+RFBkgwIjFR6SypWtZ7fF0SxZz8RJ1GqL2OnW2ujMd9CpddFp+Oi0Q/QCCzEu/TNBwUJh41oRHJNiJ4JDwZNfWJePnGEk4oIixeXIJUuH33/8sDL31EiEigxT7s7uM3I5mKzxKxTSSEwhFT25LXnh6EphX0oaHIUP0+B4ZepHf/RH8T/+x//ATTfd1H8Ma4Se8pSnrPW+KoqiXDJnej4+NDWP2TSv+SlDJXz7SEXrfy5AELTQbN4vNte+X+vbXNPlbWjoLjjO0LL/LopCifRMHTmMuZPH5fagmxtT20ZS4ZMrlrAVIz2ZmQFreih6lkZ7WLND0cMxOjoKZ6DGScSORHB8sZiWJZuLMrLDdJoLQItpaRBaGBglB1aFV4TNcxvYhh46QUdGN+iiG3bRC3sw+Z+xMCzDEtFiG7b89vO2bdr9+8WGNw7hh35/e+2g3V+X2367/zw0ISHcdrYdx3TgWi7ydj5ZWgvLnJVbGHay5N+WiigKrCAKZPiRf846n1deU/r6OGHMnoPPyyVfz6UitW3pa+dx5LnA//ga+fqy15itb5YJa/b+8vhyZO/ZavZfBIrvI+aggBlc+umy10XU7iDqdpIi/E4XUaeNuNtF1OsB4cL5LzpHhokoNmSE6bJ/O8rWk8cEkQEvtGQsFjtcT6Ikdp7uZxYc15RhOybsdD0zDZC0NCs1G+ibCVCrJDlrJsUIhwgcip10Pbvf2Tzv/VZm1SKI4uY7v/M78Y53vAMvf/nLF31xZxw6dAivfOUr12ofFUVRLpkodX/77FwTEWKULQvfNT6EQ8WtWV+yFlGfTucIGo1vodV+XBx/iGnlxeZ6aOgJsKzishOc5twMpo8cxtTRw1JMm5EvVzCya48IH6a7mVvIeS9zb8t68XBQ/Cx1buOEh6ltFDwjIyOSppGluPFqtT/TQWu6hub0PDy6LgULE07+l2Wuy8QpZyLi6VswgbyFOGf010321WFKCwyZ8PPfM+rUPrNYkGSDf19P+PwUYqSDxVHC9YLihIKIQisTRlxmApDHlvtMYZUNCruW3xLxs9IqA76XmcDrP1/6XJkQ47YyAbecqMuWFCgUJZlgzcQlBVcmGDMRyXXXdPtChgRxsl2+jnPOk14Lfn0eRteD6QUw/RCmH8DyIzghYEeAHRpwYlNuu7EJW+43khHGsCLACtEX0vK8Rir4U0EstTXpOR/yvA0N9EKzL1qCiGLbRhRbiLiEwy668p6IoJUlXztr1/g+ZW4eHOm6bcCwHViuAyvnolDNIT+UR240B2PEQTxkwHd68v5yvyibYfJ9dxGZDmweu/RY8r3iMVypmMmEpMdzxu/2TQT4n+w/DDn3VrPN5eD7SAGeXXDgOu8bvJDB57DT80MuOpjuip6TEVxuj+c5z3c+B49VdryesnNzBUBWXRN05MgRHDiwMTrCak2QoigXMz/4h6kaTvSSSdYNpTy+c2wIRUtTcJZrbtps3odG4z4EQaN/fy6/E9XKbSiVrpeJwFJoZjB15HEZg/17nFweE/sPYvzAIZSGR7bMVU86tVHo8HeHg79Dy7m3WZYlZgYUPlkzUvbpYaRkvjeP+cYsmmfm0ZtqIpztiUkEJxgZkRnDy4XwcgF6+QC9XADfDWXEa3z6cjLECV3BKfQn5ZmAWpiUhrJ/XGaT7izqwnVO4LIJFrdTsJNRtIuL19O/cdLFiXe2zWwyzwkWJ26cVDEqtWg5cH82sVuOTABkE8os6sJ1kr22/qQ022bQ60/ILxe+Rh7HLFqSCZZsXGY59pphBKEIG6sXwOwFsNs9OK2eLO10aXUWUjfXisgyEVo5hEYOoZlDhBxCDjOfLI08YtNCZJuILRORZSFmw1w6kElup6ia9EXEgEWxki6tmNoItm3BcWzYjgXXceC6yXro+gjdHnpWF36UnFc8Dy4Fvr+ZUM6EBck+J4NidaXvu0QnzQXx2heyprsohZSfHX6GsgiuLAO+ptW/XwYFmOX0hTI/L3weEYIDoiq7YHG+Y/GTd/4ktnRN0EYRQIqiKOeDPzT3Njv455kGvDhCzjTxvNEKbi1fuE/Kdoz6tNuH0Wh8E+3Okb4rEaM+lfJNkva2nNMb63xmjh8V4VOfOrPI2GB0z15MHDiE4cld6+4StFawKenU1JS4t83NzyEIk4l/JgxiI0aumINbdOEWXNhMR3NNdOMumlETj7UfQ2uuBX+uA2M+QKmZQ76z+Oc3sCN0qr5cjXaH6bpkI2fZKA6knfUn7wOT+CxKlN3fv5qOqJ/yxX8/KEC4zokb17nkhGc9cHgl/zLIjsEg/Hxfap2RNKBNRVgmtPrrQSK6+J7zOA+mtGUT1ZJdQskpyXG9UEqdWCXHgWwze57B9aURuqWCzoIJpxfC6vmwuwFMRmi6PiLfk5Sx0O8h9jyEvgff7yHgCDxZhoGPIEiW4MUhpqOlwpGxiGQiz9dVhG1WYedtOEUHTq4Ap1yBmcvDdHMIbQc92PAMEwEMGYwF+DHQYxQnitHj62SUM2LaZQSft8MYPi2gJa0tLdDnf+n3chbJsrk/7FWTN+EUTDhFEzYjnk6MOAkzIXZChGaAXtyTib8XeXL8snOCEvm8ps7L/JHvIT8bRSf5fPCIkEwoc/sSAQx9ea+yiwOMiHCshixaN/hZHoyIyTkRLkTTVwuPaRZd5PnI97V/ASMVT36YHLMsTTSL6DTQWNG2s3M9iyxSRG02i+wViSCG7lf6olj0qSiKsl60wwj/OF3Dw+2u3N6bd/E940MYkoJThTDSw3Q3jiBo9u8vFPaiUrkNxeK1MNMrmhlhEKB29jSmjx3B7Inji3r4VCcmRfiM7d2/Zfr3MJ3tyOkjePTYozg9dVrqWbLJquEYMAsmrIIFs8L8/6S2ROC8pQvYvolc15ZRbLmotB2YksOWk0lm3s3DrrrI7SijODmMobFRDOeGL6seZbshYmcN51uSnsar+nYea43UvnheYokcRdKzJR+GyIldsoGY50ZkIw4LQFRF3OshksaUrIupS4PKfqPKTnfZ/jHnl348SMm5J1jpyDKCLRNmvgCzkIdZrsCqVmCUK4gLZfSMAnrIodsD6u3EJY1NOmkFfb6ncjlM4KLVfox45C24BRtu3kauYCNXspHjBYCiI7dXa9whAjONXGSiJRMUXOffBlMDsxozTuZXczEgS1PMIjD8XvBjP7koArq92XCMRLhmQ0SzlQjn5YR6tu+ZmMtESX898vqR0yyFTqK4Aymb2ZKva6Xz9oDPueQ4ZelthN9JBSu5YJJte6sYmqxoVvB7v/d7V35PFEVRLpPjXQ9/PzWPesD8eAPPHC6LAYK5ia5MXUk8bxbz819Cs/VgfxJlWXmUK7eiWrkVjjNyTsRn/tQJzJw4jvnTJ5OrxwOubhQ+4/sPIl8qYyvQ9Jp45MwjePjowzh1+hS6XiKkCQWPPWSjUClIlIdXciVFBQ5Kfh6Frotc10mET8eCFVmwMlMB04JbZZQoj9KOYRTGK7DHCtJ7R9ncUNSIMGk0ENbrCGt1hPUaojqFSwex76Xi59LSrc4Li/HZm4XOYKUiDPaMEncxpz/AJS2OxfJ4yZJpVfkc4lwefmCIDXS35YtLWrvuoTPtSQNPgJ/55dOrbNcSwwDLXjxMWq87JizLTJa8vcxjnCvQd4oTfxEa1pW9GJMZanBU3bUpxxjcd0ZZrhZ2KtIYAdturEgEveY1r7nye6IoinKJxKn5wWdS84MRx8ZLJoYxmdsaUYm1iPzMzn0OzeaC+Mnn96Bavf2cqI/f62L25AnMnjiG+TOnEkvaFDq5je7ei/EDB1EeGdtUaQ9L3buaflNGrVfDqflTOHnmJGrTNYQD/XRoMjC2Ywz7du3DrpFdGHKGUO0W4bQNxM0QUd0T17ZFF+Wpa8oDltRlF2bVhT2aTyypN+Ex2wrQeYyRFUZYRJTwdrrMmlXKGynrbGg5sORngHbLaTNL/vuo1UoGozKrgL1XKEAMK7MXM2BwaaX9WVggz/VBC2QRO6kVctavJZ8/J9008ENp0ul7IQI/QpiOIIgQdpMmnmzWSXEj/W88GnBcwBiDkbEShb+LYsVFvuzAYeSGKXJ5S0SOomxm7Mvte+B5i4uk1KBAUZSrSSsMxfzgcCfJn765VMB3jlelDmi7E0U+arUvY772ZcRpEXmxeAgjI09DLjfZf5zXaWPmxDFJc6udZY3Pwqw+X65ibO8+jO3Zh9LI6IafxDO1g8Km5tUkskOhw3x9rsvSb0pKSdSNELZChM0QYScRPkwxKbtl7Jrchev3XY8b9twgaW3+2TaCIx2E8z3EUQNLS4MZ0RHBU3Fhll1YZWfdevBsReJMnEjqWCpOWEeRpZjRPrnbS+yVuc7UMUkb60hPGBE/S+Yqa0nSoLIEs1qFVR2CNcRldaFvS2qTLBGay/heknQpL0Kr5aM320K3FaDX9tFrBRLFSSI3l7D/ppGknxUpeJxE9FQT0aNCR9nKrFoEsdfBr/zKr+Av//IvpdP1UpbagiqKolwpTvd8fODMHJphCMcw8PyxKm5T8wOBhgfTMx9H4CeObfn8boyOfTvyuZ1y2+t2xNxg5thR1KenFgmf0vCoiJ7Rvfsk7W2jHk9OCud6czjVPIXT7dM42z4rzmtLi+Wl6NiLE9HTDhG1I9hIcvTLVhnFShGTo5O4Zu812LtrL6zYhH+6Be/LM+jUF0+eTV4BZ7NRCp6Kmyw1re28ULhEtAyv1RDO1xB3OwOCJVlKqhgjLtkyZNQlkJ4wMR3zzld/cgliZaEppbOwXBKdSZbJSFLHBpYcDkVuqT8kKnOJnxExsohihF4k0RtGcyR6k0Zx/F4S3aHIoeDhfRfCzllwc1aShsb+Nnayzl432X1MQ8uWks5GW/UN+hlXlA0lgn75l38ZH//4x6VP0Ktf/Wq8/e1vx4kTJ/AHf/AH+G//7b9dmb1UFEVZwsOtrtT/0HFojOlvO4Yx4Wr6G1PfZmY/jVbzYblt22WMjn67WFxzQkpHtzOPP4r61NlFwqcyNiERn9Hd+5Avb9waHzoaHWscw+P1x3G8cXxZVybm6VfsCpyuA7QgwscMTXEwcvNu4nblOGJbTeOf8fFx5NwcgukO/Pvm0Jnupp3mk7Q2azgPe0chqeMpXl4Pj62CRGFYvM9IDFPMuM5lp5MInlT0hLRNXyMR04e9VTLBknNhUoTQtSzPRpT5hdQxppIxdSxLIaPouUrvHYWN1w7Q69BIIBlcl1Q0P01NS0VPdq6tiNRMIF9ykOMo2sgzilNKlhQ0iqJcoT5B+/fvx5/+6Z/iO77jOyT17Stf+Qquu+46/Nmf/Rne+9734h/+4R9wtdA+QYqy/eBX1lfqbXx8tiHuNYcKORFA2z39jXbX9fo3MDf3eUSRJ7UFQ9U7MTLydLnKfPLhB3DmsUcWNTEtj45jfN9+cXVjvc9Ghc5sh+uHcbh2WATQYE8PGhTsLO2UMWwOw2gZaNVa8rsw+PPGhor8vaDo4WAPH4Md5ee6SbrbVBuRtzBZt2hksLsMe0dxy0d6JFLWbieF/fUGokY9ETQ9FvUPCJz0NtdXJWxYIC9pYkNJET/rXQaEixTr23QCM6nak+VgIf/g7TQas5GgU1qn6aM130O75qFV64m5wGrEDVPSaBiQGQ2I6UAauclnYiddmpqipijr0yeIFtjXXHONrHPjmSX2s571LPzUT/3UajenKIqyYqI4xj/PNvDVenL1/85KES8Yq2579zemvjH643uz/Qan42PPgxGVcPQb38Tpxx7pW1pT7Eweuk7MDTaiqxsn5KzpmepMSXoboz0z3cWp13RjOjh0EAeqBzCeG8fs1CzOnDqDk7WTix5XLBYlyjM6Oiq/V+z7ETY8hHM9dB6dFgEUhwNCKWfB2VWSQUODrQQNADL3MoqcpU5msX/ejioXjsgwEsMIi9S+sJg/n9TGDA3DGs6ET2nDCZfVRnUSM4EkPY1RnW7TR6flyZLpassJHooVihaxgKb9c8GCk7MXpaeJ2End0jTCuE7wYknQA7wm0KsDvSbgtyU1E7zgws6rdJvjMNOlTfGeS5a0VOdy0N5e0ji9dPjJ9oNusmT/Hy6z5sj9951uKhT6NmC5C8/J9ex5s9vyHEG67S7gd5IRpEuf97XTv7WTxw3uf/Ycdrrvshy4zdeW2WDzGMi2uS2+hqXbT/9Gnrb+zVJXw6pFEAXQ448/LhGhm266SWqDnvrUp+KDH/ygpBYoiqJcCdhw74NT83g07f/zHaNVPLla3LYTB4qFbvcE5ufvQadzrN/kdHTk2+Ba1+DEfffj7GOPIkp/aOnmtuemWzG6e8+GmZDSxGCuO4fpzvSisVzH8/HCOA4NHZIxlh9Du92WVOwvnf5SvxaV5wJ/h8bGxmQUnDyC+S7C6R66j0whXObqPIUPoz3ORAHWCB23Nsf5RKeyxBCgKw5lUmuTLeW+TvL3TldqcmgWcEHYZLRcSiI27BOTY6SG9U65BYGTS8VONlhPs8k+f3z/Rch0k343XFLghEGcuKnRPS1dZulqF6vDIRQ0peEcSkM5FIdcWVIAbbbjcw78/qAw6NbTSS8n8ennU16bkfZqSifw0rspXfZvmwO3B/7GSXy2PRELqTiQSXVvYbLNZf95089vFuUVG0Y7HRQQzpLb9uLBfZUJPLfdSpYec2aXtwFfFdwXvj7uYyZwthOGkbwvm+icX7UIet3rXoevf/3reM5znoM3vvGNeMlLXoLf//3fh+/7eNvb3nZl9lJRlG1NL4rw12fmpA+QbRj4nolh3Fha+4aGmyXtrd1+DLXaV9DtnpL7DMNEtfoE5J2bceqhRzF15IN9a2vW+uy95TYMT+5a1wkZm/BNtadE5Mx0ZmQ525s9x8SAsGcFhc5EcQK7Sruwp7xHeljwsTTk+cZD31jUmJsRn127dmHH+ARszpdmuwjuraFRnzqnp6TJovBhN6nzGdt4ttVSKN9qJfU0tXlZlyaZ/caZadPMVVozEwoXupbRvWzQycyssEFmNUk32wJII8teKFEa6X3DZTooelZVg5NhGJKqRjMB2kMzNa1QdsVNTayjc9bVP494cmeTeF6J5xV7iV4k1t4yGR8UIdkkPbvNx3EMRhMkEpKKHi657dVVTWxeGAHJVZLBnjmMmGTHKYvo9AWbtxDdyQQUj1O8JKIqEZcscjQYeWHkKJ2Cy/GNF0eQJMqTRZLSdV4c4nMNvh8Uek4h2S6Xsp4uB29bdrptP91Ous2l0ansNgf3ic/Vfw5uj/vP9VxyjLLb2XKr1wQt5ciRI/jyl78sdUF33HEHriZaE6QoW59OGOH9Z+ZwqudJ3c+/mhzB3vzWSlVaCVHUQ6NxH2r1r/Ud3wzDQrl8M9Dbg+kjZzB38kT/x3Rox07svflWVCcmr/rkjD8rda+O063T/THbne13IB+EDUcZ5RkrjGGiMCHrI/mRRR3J2Yrh9OnTOHnyJDqdjtzH18Roz57de1CO8ghOJ3U9g+ltxCraEuGxhnPi6raRjA0YsQmmphCcPSvLcG5ODAVWnJrG6A3NAPLsJZNPGmbSDID1NtJfJl0vFhPL5vzWuHAg0ZyB9LTEQS0RPJnwuVD0htE+ihZJU8vbfYc0pqUlzT3Tkaat0XGNf1txlJDTKhETDcBLU4aWOff7UZPlIiacsGaREgoRRi245PaYtsWoDNc5Qb/ScLKeHwJcCoNcKg7Sq/7ZRFkEFZcDIkzuy26ngmtQqC1K+3JTkZBbPKkXwZBOshnlyaJPcvyMdNvBwAgvfJuP74uEYvKaZFlO0sEuBbFu7y1sn2SvZzBFbi2IB6JMct5sjO+ybVMTtJQDBw7IUBRFWWtaQYi/OjOHKc9H3jTxAztHsXObNUCl21ut9lU0Gt9KDA/StLdC7nr0pss4et8p9Npf7j9+eOfuRPyM77iq+8kUtpPNkzhSPyIGBuzHs5SKWxGhQ8FDscNRdsrLihIKqUajISlvZ8+eRZRGtmzblqjPZGUc9lyE4N4WOl5jcXrbaB7WaD5pUJq/7J+5NYHpaCJ4pqdT4TMlgmdZWCRfqUpNjVkuL7icpUu5zUaayzTM3EzwPc5soL0uRc25TT6TVLUsNW1hedHohGEgV7D7kRpGbcRBreRINOey0h55LlKISA0Jlw2gWwPas0BnDujMJxPiq0V2FV7SvwZSzjKhkgmRvlBJ1/s1KNbC1f1cNRE8+Wq6Xk1Egk62z4/YqV+lKIjYVW6M77StwCUdyS996Utikz34w5ShKXGKoqwFjSDEX56exawfoGRZ+IGdI9vKArvnTaM2/2U0Ww/1ry46zjDMYD/qx2OcOnUGcZykw1mOix0Hr8HkNdehWB26avvIBqQieuqHcaJ5Qmp8MhjJ2VHcgZ3FxLmNgyltF91ms4mpqSn5fWHdT0alUsHunbswEpcRnmwjfLzWb1rKFDd7ZxHOTta0XD0b5KXQLjqiNfSg6UCthmBmVtLaloPpaPaOHckYHYU1PCzpaVslNS0TOzQPEOe0euKgxoiN3wsQLYncXVJ6WhrVocDJU+i4PvJ2F2ZAkXI2ESqtBjDXXEhfytKamBrEXZAAAwWlMVDrkgqJ7D6JKiyTkrTs/pmpgEjTiAYim+lROU/EJF3y8Vk0gdEKtwQ4pWSZDYlglNY+2qAoK8API7QZhQ1D+GHS72rf6MW/4ze1CPqv//W/4td+7ddw4403YnJycZrFRkkxUBRlc0Ph877Ts6gFIao2BdAoRp3tcfWr0zmOWu3L4viW4diT8OtjOHu0hV5rwQGN9T4UPrS4tuwrf3wocpjadrRxFMfqx85xbSs5JRysJq5teyp7pBnpSptwZ8KH64O21jt27MCu0R3I1QwEj7bgefMLKU2TqfAZvTqGBoP1OlE9FTus3Ukd1i5Yp2MY4pRmT0zA3jGRLCcmtkyK2iLDjpa/YBWdLiU9jSI5c7ESIUFxH8GyYrh2BNuJYVsxLJtLXvCO6Ywt99npumVFsu4wMwrRQh1Drwu00kL6q5EiRpFCAZIrJ6lUjJoUR4HCSDLyw0mEQFGuMEEYodkL+qPVC9DochkipP29DMruZGmZBmzTTJcGbMuAQxt7fqdaC3+TbbPfVRCh5QUieNpceqHc7i1JOXVtEz/z3OuwmVj1r+b//J//E3/0R3+E1772tVdmjxRF2dac7HpigtCJIow4Nn5gcgRD20AAed4sZmc/g3b78f59RrADnekyzpxqIo7O9qM+EwcOYuc116M4NHzFRQ8NDM60z4hV9dJojwEDk6VJET0cNDNY6cUwRnkoeih+GP0ZFD60tB6vjKAaFhBPewiPNxeiPqzj2FuGs7ssEaAr3RDUP30G/okTCE6fkjS2ixkSiEX00FDfdECMCIaHYY+PS7POzc6CuxprcYL+eq+VmhDU6VjXHrDsTQrujaCNottGMe+jVPBRyPlwnBCOHcEyLxBV4Z94yq0mu4znIKMkWZF7NihWGJnpWwUz0mIPmARkzmPR4nqXwQLxrI6F21eRs3UilUEkwqHR9WXJib7UMCb/k/YMhOLA4gUNc5mR3k/fjV4QoutH6PkhukEogqG/9EN5PgqMBYGSnmLMdhMhYkjrBy4ty0yWA9+tfhSJOOF2Ot76OdHZpoGcY4qIogji69lMAZFVzyz4A/XMZz7zyuyNoijbmodbXfz91Dz8OJbaH5ogMBVuKxOGXczNfwH1+jdl8iV1r50x1E846NU586v3G5sy6sPmppbtXLH+PBQ8HOzRQwEULbmqXrSL2FfZh33VfbIsrMIRiKYGFD4cg8KHP5oUPmPlEQyHRcQzHsLTHgI0F9LgR/Nw91ZgjxeuWNSHjnrBmTPwjh2Df+KkCJ84WDLB4GQkc1UbcFgT4wH2xNmsQkecxtoIGvPozNXhtXtiNuBxiJ00BU8Enw1ls5qSfrF7GuVJXa1MMxaxU8x7KA1xmYge0QyMnBRGk8hJ37p4wCBgsOg9WVm83v9ben+/x0k6WB9DsaMpYptakHBi3/HT4VFQhPDCSE45ChKOTLNmIoSiIVnnxzSJaEifXdOQx4aMaqQpXM2ej2YvlKgJoycUFBsBCiiKo4WW1isXI+W8jXIuHXkbpZwNh82FBz42vHDFY8fnCMJEiAUhb0f9JVPbeKzke1eiQyZKro1izkLRtZJ1LnM2cjQM2USi57JF0L//9/8eb3/72/F7v/d7V2aPFEXZlj98X6y18Jm5plx9O1TI4aU7huFu4SuttLqu17+BufkvIgq7CMMAfr2AxskKwi5/VAIRO+P7D2LntdejNDyyps/vhZ6IHaa3ifBpnREb66Xk7Twmi5NiVb2/un9V0R7C9gkUPXR3o2tPBrcxMjKCsdIIhsIijFkP4Rn/HOHj7ChKH58rFfWhOYF39Bj8Y0fhHTuO2MtiTgk0InD27IGzZ3dStzM2BuMqpB5eMZiGJgX8s/DmptGenkNrton2fAftlomeb60s0GIzihPCdZNoTs4JkM8FyLuBGBEYJaaGTSaCZzBNjKJF2RRQeNQ7PupdH7VOIGKEEQ4KhsHY3XLlUcmEe9BPwRi4z+jXlCyOmCRRkvVy5C64Fip5G5W8g6JjJSlhS/Y5jCKENIOLEqHAdDNpphstLPnQvGMib1vIO5ZESnKyvnjJ1DP+l+l5IxVB2Xa4fYqS/nOl2yaWmUReKELKy4gRsYmnUOR3GBhFSoThWhBEMephiDMBBWSEgAYn6Zt2V7WEzcSqv8l/8Rd/ES9+8Ytx7bXX4pZbboHDxNwB/vqv/3ot909RlG3QBPWj0zXcz3x+AE+slvDc0cqi0P9WND2Ynrobvd4ZET/tWQ+tU0OAn5gauIUidl1/EyYPXQt7jSILjOgwuvN47XEcaxyTXj1LLastw5LePDQ0oPDhsupWV32lj4Y58/PzOHXqFKanp/sGOlkz03ERPgUYMz7CswEiJHVAjPDQ0Y2ix54orKnwESey+XmEdGfLHNqmps9pImrkc3D37oWTDqaybfgrnez50e/v0T13vdeEX5tBa7aB1ryHVsdFq+PADwaPb/pbbrliMpArWHDzJlwucxZyBQdO3oTDZc6GkXWdH+yDwgiMpJxtrTqnjQ4nxxQPgxNncW2+iJoIw1jSqpiixVqPljcoevxzaj6uJrlURFCYFJxUTMhEP5nMU6DIx5IRHn62KUJkubxAkTSztBamlLNEODCSkS3zroUWe7CFkaRi898wiuIaBhzT6C/ZpiGfRp1WQiZG2OqhG8Wy7UYY4WwYSOSF8PvFMQy45sLStfmcFkpcT59/8HuIv5vdKEIzDPF4z8N8K8S8H2AuCMVUiK+D4mSQZNumbC8n2zSTpQwTuey5TROOAQQx4EUR2lGEesARymilzamXwh5+W14EveENbxBnuOc+97nSo2HD/zgoirJhaQYh/ubsvPQA4tWq549V8YTq5nKXWQ1RFGB+/h7M176MiOJnro7mqQri3l4YYMf5Eey+4WaM7dsPc43SeRpeA/fP3I/7Z+9Hi71GllhW07WNgodLRnmsy3heRn0ofGhr3e0u1M6USiVMVscwEpVhzAaIpih80n4/nJiMJcLHmSjCcMw1SWuj4JH+O2kPnmB65pwoj8CJx85dcPfvg7N/v5gVrKvttPSYaQzYL2cj7TezqKFhukzrtMLQkEhOz7NldL1kvdNz4EmEh+KE/VbspDYmX0BhqITSWBXF8ZFkjBRhX+FaK+XicPLOGhLWpnTSQnQWurcXLRPhcmVqQmJ4DEsw2uBayOUsOI4J10rqP6RuxTh3MOIg9SyMPlBTc1OZU3e2ZSmxiuGkkQxGNELDQGhChm8Y8ECBFsOLuR+pgEg+rrDSyIaVPicn7mVO4tMJfD4VK7w/9ftDOCAcKBLmgxBngxC1Xge1ZojGeSb25yOXPl+2ZAuH5Kglz0Oxkwifc8XIpcLXiixatFzfqYtAMeaHFDGXvy+OYYhpUdm2RKBJ+uEmlAOrFkF/8id/gve///0SDVIURblUKHz+5sy8XMniD8jLdgxjf2Hrpsp0uycxNX03vN4sWrU5NM/EiJsHYSCH0tAIDtx+p/T4WYsLS2EU4kjjCO6buU9c3LKIj2u5fRODPeU94ua2FtDRjcKHKW9hOplglsB4dRRjqCJXB+JjLDTuJm7EnECNF5JUN9b42Obl1/KcPg3v8GH4p06L6In9tIv7AIZtwRobgz1OZ7bxxKGNF/OWZDRcVbp1oHEaaJwE6qeAxqm0W/syrWkCS8RMMmx4voOel5eITs+3EcYD0RkZaSF/0RHRkx8qozQxgtJYBaXhHIpVV5qCKpcPIw+Mnsy2PJxtdnGy0ZPbWRE8P9XZhNyIF6dYLQdTxRbmzoxqpJNYGlOk0QWJ/DD6kRbu22kB/eDIhIIU7TOKMtC2lSlVkvIl5VgmIstAwGEb8HgfG8daJvhJOvfTlOzXsk1gB+5iupeDZF8YXeB+ZH/2oxCeF8PrbYx6HP4OcVJPEcVJfna8vWwp68m+9hhBk9WVKQq+B9x+wTJRSJc8HtkRXBB8iejz++txX/AsFVM8lkXTxJBjYdi2MOzYshyyLRT5PBSr4qEYS1RHzBRYc5Vut5fe7q9n98eR7E8mMLnf3GYl3TaXBanLjBCGbWnkzR52MW3ecWXNetZdBLF4lalwiqIol8r9zQ4+Ml2TL/Vx18H37RiWL/CtSBA0MTv3WTQa96PbaKB2dg5RYx+McAL5Yhn7br0DE/sPrkn0gZEeCh+OwajP3spe3DJ6Cw4OHYTNSfEawCu5s7OzOH78uCwzivkiJt1RjPQKwBn+KIaLhc9kEfbY5Qsf9uTxjx5F7/HH4R85co5rm+HYqR112oNnfBzWyMj6RnnolkaRQ9FTP5msM9ozQBgZaHfz6EYVdKIyOn4RXT+PXuAuFjYcbARbHLgt7oGm9MvJFTlsGbxdGsrJ37YTYtcdxf0UJy5lQpnWXXCImxXPl4iTymSyygkwJ5i8wi1/TOeeLKpn0TgjMGdaPZxpe5hueZjpeJhpe2izoH+FV/4pDhJRshDVED3C54YhnxpOXGMa11kGTNuUSAyjJ65ryzrTxeQ+x4JtL06XWo7EkHyBC03feVmA+1ZNJ9QUBhLhkZdGEZaa9i0RZdl6lorHCzAy0b6IVuDrLrEA37JkyedcSBGLYSOAyUm3pL9xu0YiDEGxYoogEWGSTvJ7fK/EQCHZh8GoUTWdzPeXlokhK4CDDsKgiTBsIQw7UrcpR8ywYBoOTNOhoTsCuOjFDnzDhQ8HPmz0YkuOv9kXPAZyRpAMhLAY24o6iGIuPREOyfazEyJ57wzDlucyTCdZGg4iw0EgR4D7wXeFUa4YtogOX/Y15La59DsIu230oi46vJ3+LY58GIbVH65hI8fXZbowTBem4cq6aWW3swtDTK30EQYdhD0+RxuzUsPK47T4O5fH5+DBn8ZmYtW/hr/5m7+J3/iN38C73vUuFItbN21FUZS1hxMOmh98oZZM/K4t5vHiiSFJKdhqhGEP9fpXMT//ZbQbc6hPn0VQH4Lp3wHXLWPPrbdi13U3wLxM9zse05Otk7h3+l48VntMbhO6tt00ehNuGbsFQ7m1a6DqeR7OnDmDkydPLmpmOlIcwiSGUWxYSLwNwn6qG3v5rEXEJ2w04D3+eDJOnKBiWFzLs/8A3H17YU9OXn3Bw+Oe1t/Aa6TLVpLKRiOC9nQS9Vn6miIT9Wgn6uEkmv4w2n4JsV1MJkXippYOTjLYzyPPeh1b6nbcfNIkNFlP7t8IQodXkWf8QMa0F2DOD9AMkzQkCgQOybRKLYCZRsNJqjOQUpUJEREl/YhG+m/SQdEgfUxSscP0o4YXYL4XoJZaHfe8AJ4fwae7mBfB80NZpwBaCTLlzCIYaRoSxclyERC65xYKDobyFioF1p0Y0tOIPY9CpClfMbeXNGHlZDQzvFu6OXmvlxS7s4ajYBkomBHyRoScEcKlOIi7MBHIJkQkiAMYRQqfz4QXc+JuiliIYMrzM9028djjsYxRNCMUzBBVo4eK0UUJbZTQQhw1EQYthF4rueIfBwtOCHwNPELyejhBt2Fwu4ZN2YEQDkLDFgkQGK4sI3CSn0zEbUTg9N4xfHkdiH0RCVHgSeoqowsLEYYLw32gYOBEnM/PmjXZHxEUqbCQ2xbCqIuIYqHXFeHghW2cvcTeUv2PaP9Y8PucAtsHJcKFDfW3AAajiRRQORmbzSLbiLNfzBXyxCc+EY8++qi80IMHD55jjPCVr3xlVYLqzW9+86L72IT1gQceWNG/p9PQ0NAQarUaqtXqip9XUZSrDycrH56u4YHUAOFpQ2U8a6S8Zo41GwVeHavVv4ra/FfRqk2hPj2FoO3C8q+HhRExPNhz0y2XZXhAkwO6udHk4PH642JtnUEXt9vGb8M1Q9dcVn3POfbZtZoIH/b1yYwOuP0duRGM+xU44miXYFXcpJfPJGt8rMt6Xtb0iOg5fFiMDAahaYF78CDcQ4fg7N51ZUWP1OrUgebZRMzwmLN2pz+a/dqcCxHmRtAydqEeTKDeraLVzSOWqdQCNB4oVB0Uyi4KFUciOXRcc3LJ1ea1gqJhPgik6Dkppg7QCXriHCjpW5wsp/n+UozOyS5MWfI2J3ycbPOKe5u1BkGAWuBhzkvSYyJOaiNfrkJznUs/8OB5PgKfURkDccQJu4EoShPGuM7wB9hzhPlCplz1jyUkwlQqDhPgv5P3JXlcECRCJwjS/i6UKzK94bSfU+8ItiHPmLyd8v/psZTzxkBsJiIhe47kWGcOXklqGFPIGHXJucBQLsZIPsZILsR4zsOOXAtV1FGIa7Dj5U2OM3FCQUJhQqEQGLl06SKUq/4uKCNyhocCfOQND3mjB5MCIeotb8e2HZDzDwP9m9YWy8rDssqw7BIsqyBVTRRXFGHZ+dtfptGccyI6y+xzEkVKIy0iFrJoS/Ld2DeokahVmG4/EYSLnjP2F71uieqYjuyrZRZgyv4XYZnJ0pT703XTkdexeAQLr0M+q1mUKn2u7Ow37OQ5LD4Ht8/1Imy7DNPMbzjRsxptsOpI0Mtf/nKsJbfeeivuvvvuhR3azNajiqIsC91k/vbMPE70PLmi+sKxKm6rFLeo+PkKGrNn0ZiZQth1YAbXwjV2Y+e112HXDTcjd4kRdAodurpxsGkpJ6oZTHG7YeQGET/jhfE1e01ZXx9Gflj3k1FyCpgwhzHUycPy0jQOMRgowtlbgVV1L+mHkZPWiJbVJ05Ig1L/2PHF7m2MCuzaBfdQInzskbW1DT8Hip3ZR4HZx4Da8cSc4GJkfWpyFcROGb5RQsuvoNEto9nJozUXS8PRQXIlB0PjBVTG8iizH1L+wmJn4drl4uXS+4OYdQsx6n4PM90mZrw2ZrwOZr0e5n0frcBHLBOsQK7wc1K0ehKRkEzkFl6XHUZwfR8OLY97EbweZNC8gRN8Xj6lJOH0kSImWuY2xYjcJ5tdeEwSkUnkDCULp8YFI0bFoNiJkbciVN0QFTdE1Q1QdiMUnRhFJ0LB4XqEvBOx5l+iPOce3ySa4lNcpYKFERw+lEKK6VlFIxywf05ZMhdOIhCMPtj9iacRM3ITwTWSVNGk2mbgvFrkPX3+zXNynl195+BznftCov77yveY77XcXkasc0LNyblllUQE2FxaJZnoZvdx8ptEU+xUZHL/43Mm1smgcMieN1jmb0xkswaiNEkEaVAsLErTonDoi6CFc31hu6nglol9el5zXfbBS+9ntCwUYbAgEAow00m9eQmpwkmz02BADPGYGOn+ZtGntRMJmbCXGOUGEx+bkVW/40yFW9MdsG3s3LlzTbepKMrGYcYL8IGzc5ISwwJL9v85sIUMEDLxMz/3ZTRmTqMxO42ol4MZXI+ctRe7b7wRO6+7AU5udbbBfuTjZPMkjtSP4Gj9KOre4lSqnJUTg4NDQ4ekaSlND9Yq3S1raMoraRmMCow5QxgLyyi0F37YraItwsfdXVp11Occ0XPiJKKBJqrEcF24B/YnEZ8DB2AWVt6cddVEIVA7loiemUeB1vS5V6JLY0m/Gzb7lJGInV5URKfnotOJ0G366DZ8dJoewkU2w8k6U9oqo3lUx/MojYSIrHmc7hzFI90Gaqc7aPoe/DhEGNOql0sOFkgnjQ4Xi4TFooGT957USDDKcPFJEifzFTNAyQokzYoTfDeNIMr7w9SetA5Daj5CnpsmfLpyh4kgicNYgmBREEu/1MC3EIYuYjOPIE1Rcg0H+UJS45BzcijlXEkTs1nbYHIZwTJoZcxXGcIUkSFJZP0lB4wkfsI4CiUKH8fYCg3tpFmkm0PO4WSez5tLU6QWJtYL+WcZ8aKr4guTaE6geWU8WDSxzq6Qc1symU5FCCfTtl2RSAKFA9f5nMvByfKibaZX32OJ9CQRtOwK/GCK10IkIXdZk+ts4r44lWxzOQJmrz0RZBz5dduP7D26Ws+Xeu5dVcKQ6aQeer3eosH7+LcsO+AJT3gCNhOXHHb58pe/jPvvv78fzWGa3KXw8MMPY/fu3cjn8/i2b/s2vPWtb8X+/fuXfWx20DMGG+8pirLxONalA9yc2IQO2za+b3IE4669pcTP3Oy/oD59Cs3ZGcR+HmZwIwrOfuy57RZMXnOdNDxdKWxW+sj8IzhcOyzRnmDgii1//JjqRsGzt7xX+vlIbcEaEASB9POh8KHJwWCW9JBbxigqqHZzsPzk+fi0tLR295SloelqJmOs6/GPHYN3/Piyooft3p3JnUmD0r17JPJjXGbd1AVFD9PbKHzmjwJzh5Nmohl8XdXdwOg1wMhBoDwJzzPQrntoNzx0Zjx06h46TUZTzvN7ZBjIlYBCNUC+0oNdamEWDRzuNXGq1cXUvIm50FlGsGSTnct77dxK3uTnz8CIY2PUcTDi5DCay2PMLaLglOBHedS6FuY7HDFq3VCaV9LVjI0xaQjAnjFMw0xEQxb1GVxP0uVor51zk9dSLTgYL7sYK+UwxmXZxVDBkUaR25lEdCTCbD0n7srmht/bmRAZFCWD60srXpL3/uIj2z7bHnBkrp8XgjVxm41V1wTxR/KVr3wlPvGJT0jTO8KmeOwb9Bd/8ReYmJhY8bY+/OEPo9lsSh0Qe0uwPog2q/feey8qlcqKaoiI1gQpysbj8XYPf3N2Toqgd+dcvHxyWJx/Nju8UlurfRWzM19EbeokmnOzQFCAGRxCoXAIe2+8FRMHDq3Y8CAzNmAvn0fnH5Wr/hm0sB60tF6raE/2vPzupq0163z6P3IxULILGDUrGPEKsMOF12EWbRE+zq4yzJy1chc3SW07Bu/oMYRzcxcWPZOTa29Z7XeBzlw6aFIwC7SmgPZMIoQGcYuJ6Bm9VoRPaORRn+lg7kwdc2fn0Km3BtJ7FoZhhnAKAZyiDzfvw857CHMeOk6AudjCdOBiOnQxG7pLBI8htQhFO49xN4+qm0fFLsCxLNiGLamOHBQYiYNY0oOlX6sjUbokJU3qdsQUY6CHCR8jV6kN6Skz2/Qw2/Yw2+phtkVL5570nVkpnB+xrwv7xWQ9XjiKro1K3kY174jYGS25217sKJuXLLJBBi/yrOSCD/8tBUgmIJZb55KPW0jrS50KzyNIJCqbPl4asPq+iJSricnvk1xu0XBdRl0tGfz7+Pj4uqfpraYmaNUi6Id+6Ifw2GOP4U//9E9x8803y3333XcfXvOa1+C6667De9/73kvecf4gHzhwAG9729vwYz/2YyuKBO3bt09FkKJsMB5udfHBqXlJ4bmumMf3TgyLw9NmhhPdRuNbmJ76DObOHBbxY4QlET/lyvUifsb27l9xcT6jPpmd9aCxwWh+FNePXC/Ch81L1/oHhU1MaXDAOp9+Q9OYDkcOxqwqRoIictGCCGHzUvbzocObNZK76P7wJyWcnhYjA4oe//SppBq8v0HWDk3C2bs3ET47d66d6AmDRNi0ziYRHgodLunSdj7sHDC0Dxjam0R7KjvRbfdw5ugxTJ84g/p0A12/jU4YSpqZzzL7fIy4GCEsxAjzMYJCDN8x4BsmgtiAF2dOXAtkqUxMoSrYOezKF7G7WMWe4gh25nJi1Xsp73XAhoy0Zk6bZnb8dHih9Kjhep39a9qeRHPOBwXMSNHFaNmVZcGx+iJnUOxQ/Kz3JEdRLodMpPD7j4O1jxxc5xzzQpGPC0VPuF2OlURN1rKkhEJkUJQMrmfRmcGpfiak4osMbpvmZxyZ2NkMn/0raozwkY98RIwMMgFEbrnlFrz97W/HC1/4QlwOjCzdcMMNeOSRR5b9e/bGKoqycXmk3cXfnZ2XWoIbSokA4hXszQp/DFrtRzB99lOYPfVQEvmJ8rD8WzE0fCv23nzrqpqctv02vj71dXxr5lt9cwPHdET43Dx6M3YUd1yRH5pGo4GjR49K1Ed+EGPADIBRq4LRsIwS8jBCY0H4TLCnTylJd7uIgBUXt6kpeI8+it7DjyAcqCUi1lAVzr59cPfvF/FjrtX3OF8HRc7Mw0k6W+3E+R3aXOakjQDF0XQ5DpR3APkhhJGHZu0Uzj7+GKZOfAkzU13UIwuNyEY7stHJFRAMR4iGLMRDOZhOYrWbWBwn1sDMEZT72MND+nDQFYo9T2yM5fLYlc9j0nWwM+dIQ8MLvce0b256AZrdAM1egEbXl2hNJm4Gl0xXWyl8yuGCg5FSkqI2UnL6S43aKBsBigiKkCydi4MRDwqLwXE+BqMnZOm/47YodlZ5/b9PJhAuBvchEw+DQmJwOSgqBvd5UIjweCwVWxQ2FCicD6uZ2OWx6qPHN2SpLTbhfYPhw0uBqXG03371q199WdtRFGV9ONrp4YOpALq5VMD3TAxtagtsz5vB2TN34+zxr6E5N4M4tGAF16E6dCcO3PYEDO1YuakLoz1fO/s1PDD7QD/lbSQ/gjsn7sT1w9fDsa5Mjj6/Vw8fPizih8S9EOW4gIm4giGrAitij48F4cNaH3u0IM1NV2Jf3XvkERE/YW2hJsZgE8d9+8XIgH17aGW9ZojwOQOcvR+YejBJcVsa2SlPJgKnNIG4NI64UEVocALEJogtBH4LrfpJ1I8+hPpsC805H42Oi/nQwXzkoBNVEFUMxBMFGGNlmOUKJtwyht0kYkODD6abJc0c2bgwaazpDtzHv7Ph48UuAPhhhDP1Lk7Vujhb72G62cNcm7n8Kz8k/IzlHRMF15IITn/pWMi77FeTRHlGig5sa/Pl7SvrTyYismhHNgYn7GRpNGG5+yhEBkeWHpaNSxUoq4FigrXo2SgUCjIoLDifXU5cnO/1ZIPiJBMoHJsharLdWbUIet7znoef+7mfk7Q3GhoQ1vH8+3//7/H85z9/Vdv6xV/8RbzkJS+RFDimZ9B5jsr4Va961Wp3S1GUdeZMz8ffnJ2XGiCmwG1mAUQr1bn5e3Dq6D9h7vQJREEE09+Poeqd2H/rkzA8uWtFP3D8YTzePC6NTGl2kPWDmCxO4q7Ju3CwevCK/VCykSnFD+s4ackctXyMRCVM2qMos+5lIOJjT5ZgrzTic+YMeo88Cu/RRxDWG/2/GY6diJ5rrxUnN/My+iAt88RA4zQw9UAyOvMLf6Ot7eghhMO70SsU4NtMEWvAD2oI/G8hmKsjOEu3Nhuduotuw0G77qDl2+jEFppRHs2IVtYOUM0hnijBnhzBnuEhcTHck3exw3VE0KwFjOycrnVwcr6Lk/MdnG30EC7TuNMyDZRyNio5O3E9Y++gZUQO15muphMu5XKgoGH0JUsN4+DtLGWM4uRqwXOZ0ZJsUFBwbpgtKTSWO98HRUpGVq8yOCh6BlPFlO3LqkXQ7//+7+OlL32pNEplPQ45duwYbrvtNrz73e9e1baOHz8ugmdmZkYMFZ71rGfhC1/4wqrMFRRFWX9m/QDvOzOHXhRhX97FSyaGN60A6vXO4MSxv8PZY/ei12rCCMdRcu/CoSc+A6O7966oJmamO4OH5x4Wp7eGtyAU6OxG8bO7tPL0udXCCcuRI0fEbIbiJ2x4GPIL2FvYhWK+IEKH0R5n18qET8Qc+aNH4R05Au/I0UV9e1jLQ8GTu+5aSXWjnfWaEfSS3jy0qp55BOgOpNhZNsLhPehWKmgXTHT8swj8L0nLFeqJZs/G7HwBtVoO7fo4ui0HXmyxNz08drFnfxLbRlx1gKE8jKEycsMFHKgUcGMpj2sLOeQvU/QwwtPoBlKPM9Xs4XStKxEf3reUUs7C7uECdlbzGCs6GHIpgBZP9MT6gJO/9Gozc9tWew7FUYTA9xCw5sFLl7ydrgdeDyHvC3xxNZTh2LCcbN2B7Tgwbdo1WwNLS4Qqt89ogd/twu91EfDc6S978L2ePEZeD6+Yc4LL4eT66w5TfDjcHBw3J8+pAu/8ZJGVzBUssyweLKRfuszWsyhMJnZWEoHJoh2ZEBkUJMsV9C9XO5NFSgZHVsuSpYqpQFGuBqs2RiD8J6wLeuCBB+Q264Ne8IIXYCMXPymKcmWoByHee2pGlqx5+KFdo+JKtRmjP7Mzn8exRz+M+sxZIHLgBDdj/43Pw+4bb76o2xvT3Sh8Hp5/GHPdhRQt1vvcOHqjNDKl6cGVgpMfih9G1aMwEvFT6bnYW9yJcq4obm7u/gqc3WWYbKpyIWODmZlE9Bw+co6xgQifQ4cWhM9amRr0GonokXEsqfUZLOY1bfhD4+iU82i4PrxgTv5Mx7UTfh4ztTzq88MI6nmY0scoab7Yr93JO4irNuKKg6jqoFh1sSPnyDm7v+BiT85dlXkHa3HqXR+1ji9CRwRPl+tJDU/bO0/dQhxjyI0x6kQYtQIMG13YvSa6rRb8bkcEyMpIJ6ADwsgwrYH1tIdPFCJiLQQnxyve9saykxaBxDQlNxVLuXx//ZyOpTLBT15zNkR4DdRTyGTctBZEWLotCjCnUIDtXFqz38W7wYMfX5JYzVgqbs63XKtCfB6bLC1sMFWM4oRLihMVpJuPrAb0Yhe8VrSdIELUYwPkMFl6IeKAjcSYBA8Ubrxyv3Ebwh1uI6EiSFHWl3YY4S9OzWDGD6QHyat2jW5KG+xu9wyOPPJXmDrxLbkyboaTGB37Dlz7hGcgXy6f99+1/JZEeyh+zrbP9u9n/x6mul03fB0ODB0QIXSl4JVcRuMZWQ+DUMRPsWNjX2knqvnEyto9WBVra+M80Q2xsaaFdRbtWdK7xxodgXvgINyDB9ambw9/dljLI2YGqfBZWtvDOgQ3j165gm7RQcPpIIx6osdOB3kc9os4VduBYLYCt+bAjDhBS/sY0Qeh6qI4mkNlJI+R0QKGyy4qtomqZaEidT0rm5yKlXjbx9HpBk7O1HF6roX5ji/GBP0+OTLfTfvlpOscbDxasGKUjQAVo4tq1EEp7EiD0JWT7ePa/VQvRHVcWK6TiIDsNodtIwqDNFKURIa4zCJHgwJDRIb0D0oECy8WSBQnn5MGwSJeMtGSy/UvJvDf9aNQMpJoUba+nqKN0S23UICTL4gwyiJhjHzx2IgTGF+7FOwHiALWm/n9yBdTydqdDgI5Nsk7Z9qORB+5LdlOepyT29y+LUs+NovQLGeBLOcWRd1ggT6L8F0HOTaKZRQtjaQMir7lloNRmKweRkXOlYXR+TiIENOpkV9m/Y91us7jz68ximfWZYpglx+V5G/y+FgaFCPdzoIoCRB3w0UiRcTJwmmSbIfffdnSWnw7WU8fLBdRYnZHXhA8y6TuZnAb1ecv3+dzy7jDkX/6p3+SwVzzpWYIf/RHf3Qpm1QUZZPRDSO8/8ysCKCKZeEHd24+AUTb6zOnPomjD30InWYNiF0UrKfiurteLKlvy+FHPh6bf0wMDk42T/brfJiutLeyV4TPNcPXIGddOSdLTn7o9saoD7+HRfw0PRTaFvYWd2NotAKLTSkPViXys5zJAR3ceo89lkR7Tp5YEu2x4ezZK6KHdT7W5V5k4u8E7aqzpqQUPQO21TyGUeQjyOfgFQro5W203RiBSaHREtvpE708jviTONPeCcxV4Mw5cHxaewPDji1NOCcni9i1s4ydk0XkCs4lH1v+iD7w2Ek8cGwaR2eaqLV6MuldimvGKFkxiuko2Ynoye5zOG/JeolmmIBp2ciXyshXKsiXKyiUuSzDLRSTVLBlIhGJsIpkAixpTdFy6+Gi+0WUcNJrmbJNRjtk0m2u7ed0MMVtLeExT4RRMmQ9FUpMrWNq33IOEhRaPMZZqp7sVyoeEhGRRIsysbVYfPXkb90Wo3PN8+8be7UEITzuY0iXvmTJNEj+7XLg/vP7hJ8LHlHLNKVGjB9jrtvpkHWabzD6R2EGoNNPNVxIMeS6SSE3eJ+Vg20ZsB26GwJBuwWvWT9HlIoIDgPE6fmfRB6tvqiV6Fmawihil6JxFQ2i112QeAuCIeoGyXo3ROyf+3mXz+SgcJA3JBUQ2QUmnl9hLOKE24i9RKjICNKoyTohpyXFE/fvMrZjOKZcXDNcK+kXx5pEHgfb7Pc62iysWgSxWelb3vIWPPnJT8YuXhHcRC9WUZS1wY9ifODsHE73fBRMEz+wcxTVTWax22oewWMP/CXmzjwkk0sz2ol9h16KfTc/Sa7KLmW6My09fR6ae6hvbU12lnaKu9u1w9ei6CSGA1cKXhmm6KH4oQjir1rY9JFvmzhY2ImR0SFYeRu5Q0PniJ+sf0/vscfhPfYogumZRdumg1smepzdu+Wq9WXRrSe1PLOPJcKHNT6yHxHCqIMw7sLL59HLu+jmTPiFEuK+Q16AdmTipF/GiXgSp7vjMOcKcGdt5NohbMPAiGNhYtjFNfuHMLmvgvJw7pLSPXjlvjU/j+mpGTxw7CwePlXDyWaAMF7YlmnEGHdjjOdNTFRcjORNlB0TOSexuJWJYZb2NHClnVf25Wo704lKZeQofEplub3a385k+xZnyNIQdSOx1uJnUAzkikUZa81gTUzmeib1TKyRabfR63TgdTm6yeNS4eX5HnqeL1Eew3Rl4sfXT0fAfCq+GIkpU+AW8sl5wPeaV+SjAKEfJJE1Rrp8iq4kgiTiKwz6TXATsZOcR+cjEXfJZ2oQij2mVnKsGUynipLoAAVacpfcSNZF7SeBSx4DRgIHhRgjX0n9VxaBTIS+iHjavAcUDkm0IUqXEuXwIpm0076fTyHRXjk+SU3aopo1106i3Wk0RT5jWWSFu5dGYbJIiTzHIjWQCGQRy4gX6u8WNTdeGygk+t9XxpKIr+xDur8XirzYifAwczYMipKcBTOfipN8ep+dRpP41kWpAOKSwcQoe65kObjOZT9axHOc23aTbV/MOXQzsepfuf/zf/4P/viP/1htrBVlm8IGqH97dg7Hu57U/lAAjbmbp1dBrzuFI4/8Lc6e+Be5yonYwVDl2bjhrpeiWB1a9NgwCiXd7RvT38BUO7GYJhW3gptGb5Jan6p75VNxaXOdNTjlhEx+vFshhsMiJguTKI+WYOXsJO1t7+K0t6jVQveBB9C9736E84Ouagac3XuQu+ZQEu25XBvrzLp6+qFE/DTOyEQiDFnn0kAQdxPBU3QQFKsI2K8njUjw4uh8lMd8PIF5jGE6HkLNy8Op2TCnfORrvlhOjzomxqo5HNhTwcTeMoYmCjCXpPhJobjvJcX5AwX6/avbaQpWvdHE6fkuTrcCnO2ZmPd55T0r5ubzFHD9rmFcv2cMB3eNojo8tGmucG93eA6wVmbQ6SwbFDkXaoZ5Xvje2w54BmRnAWtkisXiolEqlSSt7FIK+0Om16XGFf16ogGBzciWTMwZKRowJJCMnDBOUhNZDyipeWlkK90el7LtIBVeXJfImifCwIQFM7bgGA5s04UFBzZsmKEFk+In7SFGJSKRRkmFTFIBs5RA3u47tIlAChAjgGekUd+Beb4IKS4HLjasBSKMrCRtkeucyPPz3L9YAQovil7ubxI9DREgiD34sYfICBFZEeJ+yqohx1tSF/n+08SDgs7mYK8fjsTBjuJPnsMyEFOfmsl2OCIjWY+Q3pcKV0mzTMWzZfN5nL4xSP9iXCrgEsVGUZN8fy930Ue+//g9R9HeSS48ybkjryExOrHz7hW7cLHZWPXMhV8sz3jGM67M3iiKsqFhmsffT9XweKcn/VD+1eQIJnObY2LIHjHHH/8wTh35JLwuHc4M5Kxrcejm78OOAzctujIfRAHun7kfXz37VTT9Zr/O59DQIdwyeoukvV3pKDgnNtPT09KCYJ7ihU5vTR9uz8CENYyJ0hgcpvwUbLj7KknNj73QHTw4dQqdb3wDvUcf7ae6Sf+e/fuRu+aaxMa6ULj8HW1NA2e+JX174s4swrAN359HENTRy9nwKkPwK2MIC2VpKMpsjBoqqJkTmMMYZuMK5uMiDDMPoxXCmPNkFBo+ilaAUcfGaKWInRNFjO8tY3R3SVJ4+BqZrtScnUFrbhadeg2dRh29TrufnpUJrEZgoO4bqAcm6rJuopVN6jjVc13kK3nsHqvg5v3juPWa3dhRLWimwwYja3Y52F9m0OEsEzp0OluJyOH7m1kvU7Rk9svLLTmyRpcUORQ8FzIKkIiCpEAlAqUvALjMnNPMgfoPRn2YvujSgCAvYkZSqbyFtKrI9xFxm95AmlUaMVkuYsBncWDAAV0bl3Fu5APyq3sPktQvCpgkmpDUJvVfddI/KBVEyUjrxig4eLsvoNL3h6+dS4oGplQxQsLoBaMPLtdNmaky0iTigcc1HnA5pLjzkpq1LMerL6xEhw1EwyWUhETkWDEiNxU7y76FvHPJMeVNJgFcJbfwwbRGcUpkRC0VwLI7afQyiyRmaZ0rqR/MIpaWjDRaRwHmJlG1pD4w+TvJUkcX1+8l92UpufysPPkl/wpbWgT9+I//ON7znvfg13/916/MHimKsiHhpPNjM3U82OpIA8iX7RjB3vwaWiJfIaLIw5kTnxLXt04ziYRY2IV9h16MfTc9dZHrWxRHYnJwz+l7+tbWBbuA28dvxy1jt1zxdDfCyRztrRn54XrUCRA1fQxHRewo7cHQcBkmba4nCpLyZo8lttckDgL0HnoInW98E0HaHJU4u3Yif8styF133drYWLdnk349Z+9D3DgFP6iL8PHCBrxSGf7EOPzKAUS2i46Rx7y5C7PYgVkMYyYqIsqupXsRjHkP9pwHtzaPUgSULQtl20Z1KIehoZyInrE9ZeSKjoiemWOPo3b2NGpnz0iUZxDON+cDA/O+hVrkoh45aMVMkeFV2iR/3SxayFk2CraNiaES9kxUcHC8iv1jRenFo1x5MtezQSGzkvXVRG+yZpiDbmdZ8T9FDwVMJnIuBZmM90KErB/pBcnnlKOdLGPWl2wS2ynJGqP4cAZSqnJ2uhxIrXIu0J8nFUR9k5BBkZQZAKRF/UmK2pLifAqgy7joICmAPUZ+e5LGmESBe1LLlNU0JRbh0cIk310wA3HpfpfPJ4YV/E1IzS8yUxAxBpH6sSS67Hd78HodBOnz8D5G8rK6syS6sxDhYR2V3JZI0cJ5J+YaQSIWuZ9iXS/CIlyU1rjaxMZE0CQpwkmKXyiikUJUnjcM4HF9DVMmN2N0adXf+LzC8s53vlMssu+44w75IhnkbW9721run6IoGyQF7iPTNdzX7Eg6wfdODONQ8coV/q8F/LGbnf4KDj/0t2jOnZIfXzMewuTuF+LQbd8hRbwLj41xuH4YXzz1Rcx2Z+W+klPCkyafJGlvNhtyXmH43Xr06FERQKEXIGp4MNsxduRGMFkZR852YVUcOLvK0uMns7nmvvunTon46T38MKJOtx/1yd14Iwp33AF7fHzNUt3iqQcR1o8iCOaTiE/YglcegbdzEn71JjTMEs6aBzFt7MJ0VEGXl5qzK7PMM28EyNfaGGqEKLQjlGxThA9Fju2YqI4XMLyjKKluhhWifvYMjt//sAifbnOh55K8RsOCVxzGrFXBTJjDbMA6gcR9iykwlKwcbCg6VnIxVnYxVsphtORiopJD3tlo1TVbC4oWpnKyfo2D6zzPl3M9WylL+8xwDjLocJYJnpzlwvDixDGL9R900ppn9MRHHPTgMTqTRU8yCzd5gkwVpDUlqeBZVC/BbXGbFxE58s+tJD2qTxY5kZFuLz6fMGENBsVJNrLbad0H7+Nt1mkwYpLVlshryJ5vQHzEi5+/7zq2QqfEC70nSaFaGuHC1UfqsgpFGSWMrMk2kxQ4G8ivQcR8FUgfJ7G1751jUtGPomV1h+LGmJhfLPTYYiPY5b/bJP1PRB3dH5kimaVKZg6Q2X2Z+EvCXtl2F/X0yuf7z5WcP5svcr7qX/ZvfOMbeMITniDr995775XYJ0VRNpgJwgen5vFouwtmVH/PxBBuKK0yh+Iq/4A0m4/g8fv/GvPTj8jVNCMuYGzsWbjm9hejUKksejwd3r5w6gs43Tott13LxV077sLtE7dfUWvrDF4RP3z4sER+wraPsNZDMXSxs7wTYzuGpdjX2VmCu7sEs7LgGhbMzaH34IMifsJavb89s1IW4ZO/+ebLS3ejsQENDeaPIJp5CEHzOPygBt+vIYp9BBQ+Y7vRq05gxtmFM+ZBnIjGUUeZWfSp3StgBjFGGwGG6iHytQDFGChwYsifnwJQHMqhPOIgVwhgGG10mycwdaSGo9+soddecJAjFDalkVGE1R2YNis43jEx30kn1CZrNCDRnB3VHHZU8rKcrOY1wnMVYLSm1WrJyEQP18/pwsFJfxjDYv8fChmm5bBnD5f2wLoMS1I+LXPhNv8uzmlZ1CFLB2uHInIir4uw20LrAgXla4XUmzBSwihJPklNNYsLSxEnK7Fh70dKFswFLleYLOzkOSubcKq6vZA0zVSA5YqlVf3bpCYyQqfNiBijTEw/TIQvMwgk7ZKD38FmAZZThJM3YdkGTJupn8lj+hcAaKgTRPA6dGoM+stWPYR3hre78nyhH4moftJ3La6r3eis+pfh4x//+JXZE0VRNhydMBIXuBNdT2qAXrpjBNds4AhQt3Mahx/+AKZOfh0Re4zEDiqlJ+G6O16O6vjO/uP4xX6ydVJqfo7Wj8p9jPYw7e2JO56IvJ2/KlfJ2duHDU79WhfBfA8Vs4C91YOo5spwxpJ0N2cHIyJJmkHYbKH38EPoPfjQonQ3aWB6zSHkb7hBan4uKS2BltXzRxHN0jnuW4iax6WOKgybiMIeYtOCXxmFv/M6+NVJ1PLX4mi8F0fCEXRpVJ2KHk5Rd5smJhsRCvMBzHmfDemS/WcxcOTDdgPYbheG0UK3XkP9DGu0lqdQHcLwjp2IquM4GRTwlek25ubZP0bsk8RB68B4CQfHitg/WsRwceOnaG4WJMro+yLUs7H0dta0k/cv/EOmZib1KnZsoWTlUUQOxTiHnOHCtRzYdLqjfr1oUChMR29lDx9A3KzyqUjJIilZvYlEThLXrME6nYWUroX1zBI5S+ESVy46cjEKswZCZaHAXeXJesMJf68dIKBL3YBLmkUXNovigXVkdH5MlhdypOS/pUDgtnyPERiuR8m6x3qeAVe/gUikbD99LnNgPREnaQAxTMQJt+11KEYC9DrJOg0fLgdDRBLT6Bg5yj4MKyBKLk5splrKNbk8xhf9kY98BH/4h3+I973vfWuxSUVR1plmEOJ9Z+Yw5fnImya+b3Lj1gDRgezY4x/CycOfTG1hTeTtm3DNLd+H8X3X9r+UM7e3r099XSyvCf9269itkvrGFLgrDb8v6fL22GOPoTPbRDDXlQni9cOHMFxO+vrk9lVgFpMoVNTroffgo+g+9BD84ycWfpBMA+7+A8jdcANyhw6uvtbH7yKePwJ/6psIZ+5DVD+GMGiKfbWkzBgGwkIFwfAk/PIIjOFr0SpchxPxTjzqlVAb6HfB8+NQzsVkM0Jx2kNruik5891OG16nAxhdWFYLttOGk4vQa0HGIG6+IIKHDn3FoWEUqlUEThGPz3v43OkGzj5Gp6M0NSMVPjdMlnFovITcJrNn30jwfGy32xK54TIzF/B6icCRCVU2EcrqPQYtdtO+KCz+d00HBcOV87lkF1ByiyJ4lk6KZDLnsGFSmnaWNYJMBUlibSyPXIiKpDfPSVdjz5LBtLG0d4mIlC1k5budEPGQTvApGrIlJ/1LSZzPBoe57O1su1EQS4TE64bJshPA74bopUKCz7UaJHoiYyF6QoES+InoWS8cuoUWLEkxlh4+RlIbRFEjkaF0GaViSpzy+DlOj1O4JJJquxYcNt4u2P1lrpA+h0vnOfYi2wY1QYM8/vjj0hyVltlTU1N4wQtesHZ7pijKujHnB/ir07OoBaHUa7xi5wgm3I3nAscJ2fzc1/DYfe9Dcz5JZ7OxF/uv+17suf6uvulBJ+jgW9Pfwr3T96IdtPuRnxtHbsQTdjwBQ7mrE8KfnZ3Fo48+ivrZeRE/bmDh2uF9mKiOIXegitz+ilytFoODRx+VVDfv8GFpsjdocsBan9y118JcZf+UqDUN7/inEJz5CqLaERE9SUOKhKBQRlDei3h4D6zRG+Hn92MaYzgdVnC4G6HRzvYjhmuYuLbo4pBvITfVwdlHT2K+VsfZdkcc2mzHQ74UoFBi1GfhBzVXLKNYraJQqYroyYQPc8t7QYgTcx08MNfB0UfamG4sWHqzd8rB8SJumKzgmgkVPpf6eaHAydLV6rM1NObq8LveQnPHzNFsYA7EFDTHciQ1zTXdhXUuzaQuhzVrfFwGoyUU8lbJkaVZ5pLF9vZlF8ErVzDy10uiCYyGJNGFZCliwVuYLCeW02nUIE2fyqIVIj7M5ddlMp6aJfCrR9KtwiRC0hc8FA/r6CphOSZcmkEsirxQhFE0pOllqUiIKCCCCANx0HMQkeCYcFwKBoqFZCniLHPHI2kvn0yciECR/lLp7QFhIhGpVHhwX91iJkpsuIx+LmkdsBLiaOE5KRaz95f7zujUVmTVIohhb0Z7GPX5zGc+Iykdv/u7v4sf+7EfQ/Vyu4orirLunOn5EgFqhyFGHBuvmBzBsLPxaip6vWkcfvh9OHv8q+KwY0RlTO76Llxzx3P7pgcznRl8Y+ob0uA0jJMJPKM9t43fJm5vdH67GnDCyYtGUyfOIpztwPCAfdVJ7BregcKBIRFAFD/B9LQ4u/UeeQRxL+nxQKzREeQpfK6/HtbQ6gQbi8C7x/4Z3pF/Rjz3KOL0OJAwV0RYnYA5dh3M0VvRye/HPEZwKnBwrOthrp4lHyU/8UyJPFjI4VBsIn+ijrNfPI7DM3X0WPsRhbDsGIWyj8qIDzdvojQ6isroOErDI6noqS7qteMFEU7VOvjm0TqOz7VxutYTG/ZB9owUcNPOCq7fURGDA2Vl8Le53WqjVafYqaMxW0N9vga/6/cFTyZ0aM1ccgsoOhXkSznk7SRljWLHlf4naYPEtAeKiBhJKaOzFy2Mae1s9h3FzJKTuIltU6HDiXy3FUjtRDaZlfq4gZqMJMUqiVRwmaVbZVEwmXgHSfRDUqh6SUqVCIV0nff1oyV8P1P6xgtLnrMvUtL7sroqeY40betCzTkHkT5Aq2y1tFo4+ZYIRCoeson94GmVCZQF4cA0s4X1QcEiZgKWISJBhEPehlOw4OZYe5MICAoJPu+FyEQcRRGPXTb6Ft1078zEzmBT1A2OwXMyFT3bhRXPbL785S+L8Hnve9+L6667Tpqlcn3v3r140YtepAJIUbYARzs9/M3ZefSiCJOug++fHEFpg11xp+vb2dOfwuEH/w7dZk0MrwvuE3DjE1+BoYld8gPFOh+mvB1rHOv/u4niBO6cuBPXDl0r3cavlvhhzc/ZE6cl8sMGp3R62zexC6WDI9LclCk8jPZ0vvZ1+MeP9/+tWS6L6MnfeAOs8fFVTyj95jF0HvlbRMc+h9hPcs+Y4hYN7YQ5+UR0xp+I2fwBTIcFnPHYMJRXfaNU8CSih9coJ1wb+/IuJjh5fuw0ph+fweNTTbGOlceYsUR8KiMmJg5MYHjHJMpj4ygODZ3jUOSHEU7MtEXwHJ/r4HS9e07axVDBkdqefTIKKG6iRrxXCrlqzhqbLErDQmQvQKfVQbfdQZe9cTrdZMk0xF4XPS9pgrkURtRKTgGlUhGVXBGVoSrKwxVYJXegqN9JamdYWyalM5tjEnc+OEHNBAMnrtnkX2o+WMPA/9LXKVf/0/VMLIguGVjn+8F0KqZReb00narN6ImPbstf1zSopax6T4xUJBQWC4MsDSpLMUv69SxEc/opVmkdTRa5WLTOJe2jsyhS1h/JMvrREYqebMnjvxZkImitxIjstxwHpp1trN/Hq0HM973dRlivI2w05IJdxLTnKEbp6U/DZmLFvy5Pe9rT8LM/+7P4whe+gBtvvPHK7pWiKFedh1tdfGhqHkEcy6T35TtGkN9gIXBaMj/6wJ/j7PGvS98HM5rA/mu+D/tuebL8eD8y9wi+cvYrC/U+MHBo+BDuHL8TO0s7r8pkjj8QTHs7duwYZs/OIJzvSp+fscII9u3eieqBceSuGYJhRug+8C10vv4NhGyGKjtsIHfdtcjfdhuc3btXbXAQRQHa01+C98iHpIePkTYNjfMVdHY9Aycnn48T1gSOd310KHg6nBwsmBIw0rPDtTEeRxjptVCYnkfzZB3zp5t4qLa4JD1XijCxt4pd109idNcucW1benx5LKaaPRyZaePwdAunaueKnkrext6RIvaOFET4UARtN2Si2PblPAlbPmLWJnT8RNS0u+h2O+j6HnqBh16YLL3wQgk4CRT7RSePUrEkYqc6OiSCxy5T8DgieK70VWpOfikOeq1ABEKW7pTVHyTGBKnQGEyx6guS5L4s5Wrp7ewqvDhUcd1PoyYDgxGVq40jkYYkDSorMj9HJCxTj7EUvl5OtJOIiAk7l0ZGsqVryt/5PJJYteTtTJzBlhEp0YL4ExEi20rqPtZKfGwUNksk5kohop89jNi0lqnVEaPAPA/SzwWX2e2sxxOtuDsdRO32wmi1RPhEFD7+uRYlbMuwZUXQ85//fIkEnT17VqJAjP5s9qtDiqIkfLPRxken65LicH0xL32AWHy+kb7Ea/PfxCP3vget2hQQ26gUn4GbnvIK5MplPDj3kIifWo+RIdZKO5LuxrS3q1Xvw/Qjfj9S/DSma2J1HXdCjBaGsXdyEkN7x5C7dgiIe2j/yxfRve++fsqbkcshf+stKNx+O6xLiKp7vWm0TvwTgiMfhz13Ki0iNxAOX4sju1+I+8pPwGk/psGWuGwRNrwdswyMBB6q3RbKrQas2hzqp+poN4ATbQthMCjCDFTG8pg8MIo9N+3GyK4dSQ+NJQRhhMMzbTw21RTx0+wF5xc9I0VUORHfZr8lEZts1ntyjoQ1D925FmqtBppeCy2vg47fXV7kZA0meRXaTZow5nN56YuTL+aRZ5+cYgH5YgGFUgFuOQ+TBgGr+CxzgsxUq6ytTL+vzAUezwl15nzFyEi36UtkhEsWn680xepKwok+i8UHXbYGaz6yyBBvyFxwSaQjS4Hi33htgtty0rSqbJkvMXriIFeyV11DkRSss9Fm8tySvsYUuQ30PaxsPGicQ1ESNZsSlclESl+sSET4CuQtGgbMcglWpSKtGIx8HmY+n7Sk2ERNU1csgj760Y/Kj/u73vUu/NRP/ZQUV/7QD/2Q/G27/YApylbinvkmPjmXNKG8vVzEC8erchV2Yzm//Q1OPPYpaRxnRCPYf+j7sf+Wp+Lh2iO454F70PCS/c9ZOdwxcYdYXV8Nm2tCa2D2+Dl+7Dg6M02Z3Jo+MFkew85dE6jsHIZ7qIq4M4fWZ/5ZDA+yJo3W8DAKd96B/E03rcrdjRMyz59BZ/Yb8E98Dsbpb8HqteUL3bByCCbuwv07vwtftXZJaiP8GEYMTEQ+RjsNDDfmkK/NwucPZwD02jZOty14HRtx7MgPHOuqCpU8hifLGNs7gl3XTaI0VDzvBO7YXBsPnG7g0akmegPpQI5lSITn4FgJB8aSSM92+c2QiTRTsJo+orqHsNFDWPfgtXuod5uo9ZqybPsdSTsTS2c6nRXTXjmujUKpiHyJoqaIfCEVPOmgIcFqj6WInF7ihpWlcPWL4Lm8AqKF6VP5siPpVVlUg/1I+j08B5znxJa3Xzif3u4LkgUhkt0WZy4WbmcuXWkBOp+H4iRbp6XxRj7vRPRcpTRdZX3TyChc4m4XUbeH2OvJxTBGaRh9kWgN16No0X2Lb0eIOm1EjaaInFUhqXyJPTySnMTUnTG9L+sRZFowC3kx3zGKRVmaxRKsakUu1JmVCozUeGgzY8TndDJbGR/72MdEEH3gAx/Avn378IpXvELGXXfdhatFvV7H0NAQarWa1iQpyirhR5/i50u1pF7kqUNlPHukvKEmCu3WYTz8rT/D/NQRmSTlrVtx05NfhU4R+PSJT2OqnfTKKdpFcXlj9IfNTq8GvBDEPj8nj56AN9dB2PDgGjZ2Viawc3gChb1DcHYXEZw6is7XvobgzNn+v3X27kXhCXfCPXhwxcebTUo73WPozn4L0ZmvwZo7AbuVRL7442XnxtHe9e342uizcG9UQpReyq+EHvbWplE9eQR2ryNXmgPPRLdto8doT5iHywl1Li8dwMvDJYztG8HozjIq4/nzXtHm+XNivoOHzjTw8Jkm2gPWsoz2XLejjGvGy9g9nIe9wdIq1wJORGKmWrGYnMtespT1boCoGyKmoGBmSRSh4bVQ6zZktP12Yu3MKA0n6HkL5ZGq/J5VKhWUSiUUCgUROf0oQTCQzpRFKAbSm/oCYuB2UjAfwe8mLl+Z2LmoyOmnp8mNC7avydLSkiL2JDUrX3T6oodL3reRvlcUZaVIipikkTGdjBd3Mrt4CR0uNAPmOqMy3W4qcLpJOlmzhaiZRmqazf4FsLVExEq5LMIE5RK8ooNOwUTbBTybjQVCRIwe245E7ym2LSMZvHCY+//Z+9NYS9LsLBh9Yo49733mPDln1pBZ89Dtnt2z3dhg42v+gMWV+AES4uoaXYSQfyEDYpAQQkhwMVjix4cEfICvP3/GtG3a3fTktruquqtrzjlPnnnY8xBzXD3rjdhnn5MnqzKzMrMqy2el3nwjYu8T845Yz7ue9SzTkZ7vTun13aLcuUVJBD/2MQgH0vgM64f98TwbmSR/+dxfxgdtd4IN7hoE5dZqtfAf/+N/FKnsn/zkJ0IJeVB2CIIO7dDuzjjS+oc7Xfykp/JBvjBVxcdr979Gzu1akoTYWP0jXLvwPxAMB9DSEmZnfhYnnvtpvLT9Ct7ceVMeuHxos7gpoz+kwD0IGwwGInawfn0VUcdDMohQtApYrM5hdmYG7oka9EII/8Lb8N9+G8lwNOZLs6ZP4dlnYc7MvOd24tiH593AaHgN/vZPoO9chdXZloiPWiHVh2owps5he+5T+NPC47gaZEVJwxD1fgcntlZQ6+6IDxtHGnyvgDSpQ9OLsOlkOy4My0K57qA+X5RWqNw6usDXBcUMLmz0cXGjh563S3Wjchvr9lDC+mi98JFxeilGEFG1jvQ1RnQGoQI4t8gziZIYXuhhFPkYBEPVSEG0WGCT9WsMifgUyyU0Gg1UK1XYRgnRKMVIaGShVGUnvSzPd7nXkRmO/JK+NU58L2Y0rkxmV0DLIQ3r0PY5wXR0WW6AjYqCbHSk857PYFEU1CmXfm9orqztRuc7TEIEzIfLpvNtcjtsuUPPdwLnb8cIVMJ2C4PWJobNTYzaO/BaOwg6LUT9LsLQQxiqSEt+vHljsV8j2zal4Q1N7YPkrUFDkibgP+4/z12cRtKHaYzQBEJTQ2hpiEwdEfO5TNJbSV01oZsUoLBgWDZMSs+zuLDlyLRusP6VgdS1ERVt+I4hz5de2MMgGIxLQLwf06DJdczFu9X+v7dvz+//jWf+xgMTHvpQgKBJe+WVVw4jQYd2aA8BAPqf2x282R/JQ+tnZ6p4unJn9Wbup41GK7j6zn/G9uo7Irtspidw9um/jH5Nx3dXvjt+yJ+bOodPHvkkilbxgYGfa9euYf3qCqIWaQwxam4Fi5U5TB+bg7NYQNRagf/mWwhXV8d/RxqB+/RTKDz11HvW9WG0p99/B6PBFUQ7b8PubMLqbEHni5jRHqMMw67DnHkSw+nn8HbxFF4PTanrxBFLr9vFbGcbx7fXMJWqnJIosKAZC0hRkxo9eT2P2qwCPbW5gjjEtzJGFjZ6nkR7LuwDPrapS8Tn8fmKUN4or/qwm0jftn1EOyNpFCvY/5bka9OLfPhJgBFC+AjgcToJEKWRyEdjUkJaAxzHQa1Wh2uWwHKiZMANO74An9sFOblQwK5IwITCViYooPJc1LyRKW6REsY8FQV4LNiHIOe+GZ3fftBDd7iFod+Fn0YI0gSpOIaUIM7AwmSjk8t6SxPLJkGERPWykXg2goEgUYAgBwbj5XEgf2fSKdcN6WXdUtNpb9MpeZ457Fw/18kRftUGGHhNDIc7GAQ9BHzu8oeQ06g46GRkjdP7C+JmjnR+LAQnnM7rTLGXY0MqDnYYh+oYEnUMeZt0vrUohh7E0EOWREilMQKjsW5RluSvUX0u1WBrlkTmnUSHHWswSdFlMr/nA6SR9fqIvRHCZCJnUSI8SjRAIj5KpSNX7xgX6qXKZh4dHU8zB9MykdgGEsdCbHPaRFSwERdt6QlaYhYcv8+/PYKxsl1G2SoLLZznmvcCrzPPZ96HcSiAcvI+4n1wK+M15fuWjetmuQmyMLitklmS5VPuzQI5f2ZA0IO2QxB0aId2ZxanqSjAXRh44Ovv5+dqOFd6MLVybif3Z2P9j3Dj4v+C1+8CqYNq6VM49vxX8Cetl0X2mlZ36vj88c/jaPnoA6O9Xbl0GWtXVsQ5ZgSgUajheOMIGqfnYBR8BNcuwHvnwm5tH8rMnjwpYgfs3407zYjPYHgR/e5bCJtvwdlZVcAnjqAbpETVYLpzSOeew1rlLC66i7gWaGhHrEESS42esNfBYnMDjwR9lOhwpYDpzCFNZ1kZaVw0tjzlYvZ4BVNHSu9aC6IzCrG0M8T15gA3mlQmi/cAnzMzJTw6X8Gp6eJHguqWUI2t6WXAx9sT5RHAY4YYGL6MuA5jD6PYlxyeVOSSMwWuCWqaYVhwLBcOHRCjAFNzkPiGyCofpDLAHJlS3UGhrGhkBCvmZJ4LE+Tvd06L0H4CcQKFAmTY0Ez7Juf2diwOffS7N9DvLqHXuYHecAs9v42e34WXhPDSCCGdzMyRNg0HllWAZRZgW2wl1ewyLLssvc3PDHuXspM51fnIu4oYeAj8HnyvBd9rw/c68PwOvKAHn/WyYg8R3W5NV3Lx7DmKz/VZpfG2pJdrN7E93ZYIALdHJzKMA4R+B/3BJvqDLXQHG+iPttH32kgjygXvixTSmeb5NPLm7JtnI5gwsgKaKUw69EmCIOwjDT11fXjvUTRDFL4ypS82imHnTjsjIeNGkGJkYGVyeT7wIQWJ1LojH4LOpQ2z9e6awXpSmglXNyWfiwNqscQ7gFg3EGYt5bp5PONtcb8MtR/cvzGCUFQzw/NgDEcw+iOY7IcezFEAwwtheDGMIIIVpTATBSJ12b42vobSdB0Jl91qW7mpAkxZCxFbrJemwXCZB6nBLjhwmINXcFC0bBRN/g4sRG5J6qpFpoPQdOEbNnzDgKcb8DQNvgZEaaxAhgze8drFcKHBAeCSzp2m0pwkQSGOYZNGahCMWkiYy2naiAwLsekg0k2EhoVA1xHqOoIkFICSAxgdWfQtTVCOI5TiEJXQQznw4PoDaJGnriMPP7/fnDJgZ82Z7CuqN2w5hhyASi2o7Lo7UQA7GELzOoDXBkZt1fs9dR3ZeK0/9bfwMGGDwwIMh3Zof0YsSlL8zlYbl4eeKIP9wlwdjxQfjHjAe9X96fbewPKV/xs7q9dU0c3kKE4+9stoNYDfvvG7Y/rDi/MvCv3tdukO78eiKMLStSVce+MSgqaqgTBF8HPkKBqnppCM1uH95H/tyfVh0qj7xBNwzp+HUS6/6/o9fx3dzqsY9N6G1VyFs7OCwqgP06zCdo5DLx5BZ+pJXCydxAVrHqtSGyaE327BHw4QDPqYGvbwSDTC0TiARXpgsQK7cAyBX0USEeaq6MD0YhnzZ6oo1ZyD9yWMpW7PUnMg4Kc13KtM5li6CBuQ7nZyugTrIQU+kivjRYiHEZI+hQoCUWcjCJo0zdIwLERoawNs9dvo9YdZnRlVUFLJGWswdRu26YiDbhksMurAMh0YMMaFJLlmOt5qSqmKFWu2gJ5SzUax5oiU8n0fPaXqmU/lvzUM+msY0GmnAz/aQZ/OfNDHUABKjCAbfdeUfrJQdNjosBmGLU4bgQudUTpIJp3RKEAUsT5RTyIg/F3frt1WajedWgFNuQOfJS2NwUDEsKdyxu6FGROOfA4ucmdPtuXdDHTyXdU0VAwHZeZbSFTCIGZWwIHCFByBh4+IYIoNWS9NnXt+d78+IO8Rh7QvzZB12tDhaARqXKarZZohzitLHcQsHBpFiBAgTAc3bYt5g/wnURtNhwUdBd1ESXNQdMoo6haKbgMlp4qSXYWV6Eg95r2MkHpDwBsg9YdS/0flzii5b6ZFhPEIYRwjkhYhIrWT00ksPWmeGvMIgwg6B23o1hMUMFpGqhv/MZpFZ597mLOdGeW0eC9kRUjHifwqIhNp/Okl8puL9F26WWKpz7keq1iFXXRRKLkomw7cjMaWr19dd0OBwhwI8lKPyEK4Bd0sv0fk4h082HHXxn2yCgCLe+f7mYOcfUD1QKP6Dfd71Hr37xmk3XFgy0KR930OjgMC4ltHiMb2AN7L99oevj0+tEM7tDu2MEnx25stXBv54rCwBtDp4sEO8YM0AoGN1d/H+vUfS/RHS8qolj6BhWc+ix+0X8ba2pp870jpCL5w/AtouI37vk8c+afU9cVX38ZgrSNRAdLezhw5geqsg3DzMvrf/NauKo+hwzlzRsCPdfz4uzqzdAyHw6vodH4Ev3cF7uYSqs01mLDg2LNA7XGs1p/AhepjuGDOYBRG8LsD+INleMOBgKSFOJBGpTcCn0KlilLjBFLMot/S4A2ScXRh9mQF86eqN9HdWKtnrUPQMxTQwzyfyXc2nZEjNVcoblR0W6i6D5VUL8UK8ro7CQHPMMvloSjAAb6JXLKyib4TYNvvYm1nG4NV1uhhtC0RAF6wyyjaRbjlImzLhZlFIWiT6mSkGubzed0VghxGeNyStXst6Jj01+Ft3sBGdwmd/ho6oybaYRe9aAhfHFYgEbqNig6o0W06bJROJt2JSc5ZEwcyy1ngNeSoOOlEHNUN+hgwIpIEu4nct2ECZCgAkcl130nGr2HaKLtTqBRnUSnOoVKcRqUwg6JVhsMoDh3bzJGLggECUq7CAcKwjyAYIgyHMh9EHgJStTJwFsQJ/GgkTjznFXEpFSda6E+6IcDUsUpw7ApcNqcC1yzAMQswoUFPY2gJ64yxjxBzW9w+94PblNwNtf4gSeCTOpQSPqixcV51i3l1rIti11AuTKFcmkW1chTlyjGUygvQ3KqKvuSRh6AP+P2JvnfzfKSuT5QDFZ5zy4bt1OC4UzDdGjSnAtglhnr3RpF4b0hUKNyN6LBnVIpRpIN6HolEiWyJCqRmCXFsIw5MxL6OmLlp232pD9MbDvcpkXEAzQXSKbVN3iN0mMfTIYyELYajwqW7kavxTaIBJQVq9RIT+6vQqzXo1SkY1bqaL1egFYrQCyVoLhP2SX/LolY5EOC5Cwa755ONx3grYwTOrQOFBlDI+uI0UJhS53byGc5jYbRDrlNvonV3p7ntHCDv3w7p2gQw7KlYOp4vTFyzSEXeCDbCvPG4Buo4eQ/xM7aDjPdavv/S13e3wzuWzxpe7/E5Ovjeg1y3TGxnvxHguTW1bjl3Wc/7UQYKMprkQ2aHdLhDO7Q/AwDo/7fZwvWRD1vT8UvzdZwoOB849a3Z/B7Wb3wXrfVVpLEGIz6LE49/DVv1AC9tviwhf9JdPrX4KTw5/eQD4Rn3+31c+Mlb2L66Lsnvjmnj1NxxzE5bCJffRrSyPP6uUavBfepJkbd+r1yfJPHR67+NbudHiAYbAn7c5hpsqwHTnkfTnsfbtSfwauE0uh6LSg4k2qN7Q8zHoYCe+SQQqluhWkNtdh7l6VlAq6K3HaG5NhjnlTglCwtnapg5Xt6j7BbGCa7vDETU4Oo2ncu9L+xG0ZIoD4EPa/i4HG19CIwgVXJ4WHOn7SvgM6FUt98kf6ZoQi9biF0NO6Me1ls72NraxrDvS8SHRoDBEfBysYbZ2WlUpopjICMyzwQ6bEY2In3QvlGxDSn8oI9RbxWDzg202lfR6t5Aa7CBVjzC6HZGWO+VkWZluig6NZTcOsqFGZSLbAQqsyi6dbgED6TOiGM2EiBFelcSeUhCD3HsIQ7VfBT5Agw46q6bLgzSyJwaKrUTKJTm7k29EJEzzJzd3DkU2l5OwcnyUuhg5tQeRnHew6RYaFag9abt5Q4onUSJBkTKgRealakACJ1ApyrUujBO4Ucx/IgALYEf7p3m5xK00EnnUoVg2bMW254eCQwtgakxlmEggoUoUxfkOiK2hMn27NNxr9QDI0WhjULoUQSD80kEM00E9JmMsKeJmo8jAScpIzrDEdLBQIphwhup6FG2btKnx9OMovL8SFI+oxKmJPPzXBuWCV2aJUn9FFtRyxhZsOQzyr2bti3LTWk2zFIBVqUMs1RUVDYeKyOWUqtJbVPSfrL9oPFcyXkUKpkGS9dFhv8mWi4d/3CwSxfMoppy7XivvMf7hL/d237ncP05EKLxHslBzvs1rju/7/k7yPOV+BvlNgjaeP+/X4uCDDxmvy9uN4+Gcjust/eQ1P+57zlBpIl861vfwuXLl/FX/spfEUlP1sngxsrvQQG5l3YIgg7t0N7d+EL57Y0WrmQA6C8tNHCUiZkfkPFx0+u9js2Nb2Jn+Qq8QQ96vIBq+eMonnsUL/V+gpanQvbHK8cl96dqVx9IrZ8rFy5j6Y0rQpGik3K0OofFqo1k/W0knYxGoGtwzp6F+9RTsI4efc+oj+etoT94G4P+O4DXFfDjtDbhWrMIzVlcdY7i5drTuJHWMez14PV7mIoCHIt9zMcBGmmEUrWO6tycAJ/K1CxGA6C52kdrfSjUrNyY70Pw05gv7nHKe16IV2908NpKZ09uD9XcTkwVVZsuouo+GHW9e5bDsz1SrekdKCygu6aAncTWEem60GT6gYfOsIdet49Wuy2gl5Ge3CzDRqlQw9zsDBaOVFB3OnD0LWz3rmN7sI5O0EU37EtkwBfnXyVG04FjxEamM+DDvAACiDGl5KBXLZ0Xp4KSO4VaeR714hzqxVlU3QYcJpEL8z/NckCi8aixivBQUCGUSE/CeeZm0GFkojm3T2BiODCYa2NXUaosoFhakIjWg0xcZvHcgR+jH0QY+JGA771O/O75z9WoxsykfLl2q+W7czzvYZRIpIiAgaCfjdvjtvLp/LPcqVZ57UoSfAxUMpBi7AMtuTNOMJIfA9fJ5ffTtCiE6Y1gekOYo6Hq85bNG9EBxXXvwhLDRFiqIChVEJar0kduEbHjIrILSAl8PoTKj7w+pOkyZ9E2NNWbBEicV1S7PI9JKVyn++4L3ju787y+Ak4JsOQ+UGArX58l2+E2NKEj8rN8eyZrYOUq2tm9oUphZdue2I+sJDFMWb9aH/v8WMbbY4Q5p/4dYPnx8N4Mk0QB5jhRIhl7joP7q3LbPqp2X0EQpWG/9rWvYWlpCb7v48KFCzhz5gx+9Vd/Veb/7b/9t3hQdgiCDu3Qbm18yP7OZhsXhx4sTcMvL0zh+AcIgIJgB1vb38DO6utob64DUQFmdB4zj72IS4UtXOtdk+9RzebTi5/G443H7/uDmo+/teVVXHjlTXg7HMmD5P2cLDowNt9B6qsaSixk6j75pBQ2ZYXsdwc+KxgMLmEwvIQ4GsIYduFu3YDb6wvlbaRP4YK1gD8tPIZlvwBv0Ec5DnEy9nAy8jFbLKBx5Ciqs/Oozs7CtB30Wz52VvoS8YmySAXNck1MLZYk56fc2BvdI93tR0ttUXXLX8Ss30MJ60fny0Jxe1hehLxOSS9EuDlEtDUUqeo9RqBjGxSiluYlKXrdAXr9Hjx/CC8cwg89JAfIvDpWAdPTM1hYmMVcLYYRvoXt1utY769gPR5iO2Ztpffv5JKiRbBTLy+gXjuJqcZZ1KvH0HCnHlhtq9sxOoCjIBZHajLSoECLAhSTIGAyUkBAw78fBBH6BD6Mak4A74+y0clm7pxjslGuWYOjMxE+hp1GqiAm68iEEZKIeWWqxaFKpE8j5smwcnGAJAykppftj2AR6IRqYEalwGTqfxlgk1QYEVJQ7jSFHlKLifamNAoWSNP0cR/pBiLmDjkukoKL1C0C7J0izDJFKYx9jr46Lj4uJp37MSjM7gle/3E/Xqac8T39xPT+n5ak5Ii6YQ4+1THnBby5zf333Z8V4zmwBHSpiMz7OQ8KYGm7gGsCdMlyXvPsHuA9Jr95idBxuwr4c/yIzwTpGTkD8BeeXcRHWhiBYOdjH/sYXn31VUxPT4+X/9Iv/RL++l//63e3x4d2aId2T40PqN/b6ggA4gvlL843PjAAlCQROp2XsLX5PTRXluBT/Sc8g1L1afRPFvBHg5eR9NSI1VPTT+HjCx8XIHQ/jU5tq9nCxR+9hfbytiT2FkwHJwtllDvXkO50xKGg0EHhuedE6EC3Dz5/aRpjNFoW0DMcXBK6kEYlndYGSu0dFCIDtj2LYeE4XjFm8cfGGaz4NpJBgBNxJmxQLGLm1GlMHzuBUl3lPQ27AdYvD7CzuikFLnNjngnV3Qh+KlPunqgPndVLW338aKmF1fYuJ570tudPNETV7WHJ7RlLVW8NEW6NbhIvCAwNI11DL0zR7/jwwhG8YIBR1uKMZiaFPJmfQ/UnyxW2QqFcRKliolxingcFKr6HpfY1/HC9iQFzGnKzi4A7i1JhCvPlo6gVplB1p1FgwjsTyemckVYllKNE8kyUg2qqeh5mAZpVhFVoSD7HBzmCTroWIzKMxhCksCdQGUqv5gdBfBNN8l4YR6DLLumFpjjTEmHJKWHMC8ksd4jH/Xh5Npq+73v5Es7zvlYj5rtO3J75CSeP2+Q+5X87HpnPnDlFw9rrYHL5ZIRoPKqupTAHfWi9DpJ2G3GrhajVQtxq76pF3o3ZWaswr6MgAzF6uSSDMFIYkzk0nM+KZJKSy+/cEwriAzJe15zyxsvxbpGOWxmfeYz+SQQwiwTmkR0/i/zl0ToFIHNFa3UNd6NHdPize4j3KCWvRVxCRVbyCODk+oOJyOPkMn43LzacRxlzoLpn2UR0c0/0ktMT6yPYkWNNU/gh27v/RnlcZnbf56AxH7jITfY94tS9G6R4GEsk3DEI+s53voPvf//7sPc5BKdOncLKysq93LdDO7RDu8sXyx9sd/HWYCTJ0VSBO/UB5QB53iq2tv4Qrc0raG+sAuEU7PgFaKcW8aq9gmFfJXoeqxzDZxY/g+nC7sDK/bJ2q41Lr76DnaUNKYRJJaKjThkzww2gc1lkj+lkFD/+cbjnzx0ob62Az1IW8bmCJFZKUVaviWJ7G8VRAtusw7QeQcvQ8Cf6EfwgXcSGZ0g9i0eiDp5AhNOnTmHu1BkUa3V5SQZehLVLbeysDDDq7SYhM/ekMV/C1NESqjOFm4AMR9tfX+ngxzfa4zo+fCE9vlDB88frmKt+8CqA72W8FnHHR9Rmbo8nqm2TNDdeF9/UMUhStEiHE5pVD73BDgbDJjQtAHQPie4j0gIkdgDTCQEnQGQGSEwPfc3DeuIj7UVA+4BcHCqhlecw03gECzPnsFA7hYXSAirMM/kAbOzI7XHqdildu/OTTtmEA5Ut4/fuBNzkORZ7c1bUvH5QLoux+zkbwU6ZzVW9iiJ8uB2kNI6RhkwMj+X3zXmZDlkc11ORHM9DQnW04QBxp4u404bXZwT5XUbh6fwSwDg2NMdReTS8z0wl4yx1pCZ7Ahnbgl4owqhkAIdAx/nghWzutQkQmQDBd2O8H13deGhyGO/GcqA3+dunjQcTJqhuzJHiOaEfMIwTiYqHBHMSqcmAvkTsVE+lS5H2p7KfRHkmAF0OLJmTRm0GqHX5LBvAlqTwRMQjFRGPPFr3kQZBCRExHw77bHl5WXKDDu3QDu2DMz74vtHs4bX+UEab/vwHJINNWli7/afY2fljtNaWMWwPYYRPwKicwvK8h63koigGM9/n00c/jdPV0/fdSep2urj0o7extbQuDje3N28UMOe3YPWXVE5AqYDiiy9Kzo84K3uOKYXvr6PffxuDwQWJ+NCMUQ+ldhPlQQhbK8E0jmFgp7is1/ASFvBmOoX+KBYZ2DPxAB8v2jj7xJOYOXEShmnJekl3W7/SQXtjOHb8paDpXFGobrX5wh6RAxpfXDdaQxE6eGe9Ky9HWtE28MyxOp45VhNn9ENLbxuEAnQIfNg4v9eX5Isb8Ewd/QQiGMHozsjroNdZwdDbRIQWfK2LkTGAp/vQrACGHUK3I+hmtBt4SW7WYaaUsMvCf24d9epxoafNzj6FufIRKeb4oKIzzUEwbqSPMSozDGLp73VUhiPeBCW8R9jz/ig5hurt3XnSuR52I4hJej3E3S7ibg/paCjJ/6qNlMxzGI6bcHru0ghcKJRiNBowGnWY0jcEwAioeQidw0O7P0ahIi9JMCLIyCiFmdSBRMR4p3CMiyquAnAyeiDndclzAiwYAjwC0n7jBN0wQi+K0c1aL0rQjUJ5Xio1wywspWJQu4VfDzAOnMq2LSCxWPuI0dFxFp7sqGQdSj06vtdI94xhUXGRuYhZxO1hsTt+Q/7Mz/wM/uW//Jf4d//u38k8f9xMLv37f//v4+d+7ufuxz4e2qEd2m06lv+71cOPugN50P3cbA2Plx48AIqiHjY3fx/d9iXsLC8hGTWgB0+hf6SIK+U1cUip+saaP8/MPnPfa/702l1c+vHb2Ly+hjQidQmYgYWFoA87XIampdBYGO+FF1B4+mlxWvYeTx+93hsCfsKwLctIdyt0O6j0QzihDpNy1nqKa5GGnyQLeENbwI5PAesUVhrhfOzjk/PTOPvIc6hMz8pzUyh56wOsXe6g39ylrklB0xMVNBaKMPeNbhL4rLRHuLDRw8XNvuRu5DZTcSTqc26h8qErYCpRnm4W5ekq4MNl489J2QiUJDBpbl4KDEgDUVBIpIu77SV0h8vw0i145gADcwDoMQzXh1lO4RZsOA7FDBqo2RWpaF6winAMFw57kUwuoZBJJhtUO7Lu7++D14vUM4IaRT+LsEPA0w/QGgbjqN17lgihDPuYr69oLmMKz74k7cmk6vxz/i0BDpc9zCa0uChSwCUIkLBR2aw/QDLoI+n3Eff6SLod6e+qVgsjN/z9kM5oGNAsE5rjQncd6TXXUVGaWlUBn1oNWqFwCHTug4m6IqNyzKlKwwnFtsyhl2lGGSkbr6Tjb3/djHx4GIYj9MIRWoGHbuihE/noBCH6BNHQEKVZ/SJpukRaTM2ASSl2ihloplKoEyU47m8iBUdHMVsi6o9qOpLITCgS4SqxKi9GqiBQBlBYkHc/aMmKvk4uZ0gnPzeJnJ/8POWNew9YWgJLS5XAiowHKdEGKTCbUtRFB0uv3rzN3WklQR+hoAUowEdRi1DSY5T1SJqrxXD0BC4FF/AkHia7Y+/jn//zfy7CCE888QQ8zxN1uIsXL2JmZgb/6T/9p/uzl4d2aIf2rsaXw/faffywoxL5vzpTxRNlcskfPP1tY+N/oL21hM7GFnT/UXjpFFaOBRgWWJcCOFM7g88e/SzKrFZ9H23Q6eHiy29jY4kS3HzpJJiKDSz4XbjoKvDjOig88wwKzz93E92ENYxYz4eUNyXHm8IcDVDrxSgMPFhGGV6cYGk4wpso4HV9AetaQyRzjTTF8djD40UHTx87isVTZ2AXlIw21ci2V/pYu0wqTTiO+kwfUzV9itV9IIzbaA5xabOPK9vMd9mr8PboXFnEDpj382FxxEitiFu+KLdFzZHIVu/me6QiQx0GCQJdE2rFkJx1U0dK5zNShRe90Q7avRX0/BUM4m0MjT5C04empzBZ6LxRRHlmHidmzuFY41HMF+dRc2oP5BwwgjNkfk0GcCR6k83nuTXMtRmFdEzefV2MvEyVHEyXbFQL5p6oDCM2DwOV7HYtBy3piJEYD8mIRTc9ATSTURkFcvbN5xGbOwA2BDB6tQqD9WZKrDVTULkzeW8p6plmZU2oah/e801HN0n4W2KLsum8D5UznOe0SQ5K5jzn4EAc7HxZDiR0WS/LFsTJSKi9nKasfxD76EUBelEkEYeAdKmUuTLqHBl8htKR1HaBAqeFpiURBUXNYg0nqp+pnCoWZTVE8IC5Nn4cSV0mP2FNphgj/vYZLREqF+CzpQb8VJdtq6iJ6nMztRQsEauiJmp/hJrJ/ZGixoQAzI1Rgh/DOMUg0TBMTYTjKMeDM14BAgfuN/dMWAhyVFlESMCXUp1kFIbDRarP9RN5jArcOFqMkrYLSMp6jFI2XdRiiSq9lyWM9mTbyvuIRWvlnKYCpOxsP8cmuY+2KFDqGnNNWUT5wyPwcrt21xLZ/+W//BcRR2AU6IUXXsCv/MqvoFB4sE7XoTrcoR3aLgD643Zf5r88VcULtdID349u9zVsb38TOytLGLVCpN55bNghto7SGTFkZP5zxz6H07XT93U/hp0BLr38Ftaurwi1jLSYRgwc8bso6AP1wmFy/HPPiuLbfsEDArlW608k50csiVHpR6j0AjhMSo2B1W4PlyMHPzGOYdVZRKg7QndbTEKcqxTw9MI85o8eQ7FaG683DhNsXu9i/UoXoZ/l7Vi6AJ+5fQVNmeNzbWeAy5sD6SdpUeS+PyLAp4zjjeKHRuiABUlFvW3HE0EDofUR8DDZfkQHhzxyYMQXLiu427o4bKFPBbcuvLCNYbqFXtTEIOzC03xAj/iWEsBqFDXY01WcOPkkTsw9KXlk0+70fXVYCW42ux42ez52suhNZxTeEU2NziHBTE41axRtTJV220cxl4EARwQCmk3EWYt2mgKA7pXlwEUvlaBXykogIGsiHsDfXsFGmvpIpEgshcNjpDISr/J+dgHCLiAQoKBJSdVxdEG5SRx553Vnkj2L6HqIEw8JwUMGIOJ4OG4s6Coj/6kuTqXELBhgkkKrqqitiirQYTfG28xNRM6TQLYVCVCIM0CgS/MyYKCagWCfM0+XmlCB26Mjmzu0k31Ow+L+BakubZCaGCYGBomBUfphujcz4JZJTSt7/8pwPO+OrqNi6qiZBqqmiaploWyyhDWrNakSuVREYwFbyadJI6G1hXmffZbfQ4wUOTpQMHQUDANF3UTBMFE0LZRMW8pVUMBiMvIj9DLCHYnoqHuN9+s44iOf5dGfBJoUSXZg6G4GQNg7MAzVq3m+2xS0yu/dvX06Xt94/ePt5N/j70Qfgxy1blI8d4tFy5UQEYkY5j4a+UdKIpu1NM6dO4ff/d3fxfnz5/FB2yEIOrQ/68af73daffxJRwGgL05V8bEHDID4kNzZ+d9oNV/B9vISwl4Jo8Fx3Jjy4M/zganj2ZlnRfXtfuZaeL0hLr/0NlauLUvuIkeNq1GMxaCLkhko6dXpKRSffx7OY4/dJHigwM8PMBrdyA4MqI9MVJtdpEGEtU4XNwY+3jKO4HrxFDr2tFDrFvUUTzaqePbIAhYWF2HZeyNKjHqsX+1g81pXgBDNLphS02f2eEWAUB7xYaTnzdWuRH4mlXwobX12tiztaKPwoVDhkbye/oRsdY8j0ClCL4Y3COGFCUbQEJopIs2HF3Ux8rsYBT34aRe+vo2BpsAOC+NOlIsRo+qdXbIxOzePk6efxvG5J3CksihUyvsV3VnveFjreNgg8On6AoJuZaSWjcGNbaLoqDwbWTYxX7Do4H7w1+v9mrgKFAnIBQLyfkTRAE/l3lAVrd2WnBuhG6WBAiB05sWhD4gAkNomIkZeXQO6Y0K3TegsvsnIjZ0V4SQNjdPsTUvNC/BhsVJzfE4lAiLrZySE22IuhCeRjDCOxlGEHCzkI+vjiALzMBg9YF0ltgmgwF+mcdMyusSkbOoYJYaAEU4PElOAQy8x0U/MOwIQejayb2bbYISAP38CqAAqArLXlLMtII1/nYE1NT1JCcv0rMewYVJ+b3eZkJ50OrWmKBuKg5sBM9K8KqYljY68JZGWTCKb4CCXyk5jJacudDA2LkskIX//NL+jFOE02DoBA6lllBU3UKDIgWmhyN4geLBRNNlbsKgeN4as+aHkoITbZ081tUj2IWQvICUS0GkYJmzdRNm0pVUsFxWTyx5ummhuBCFBEIivnvd5Y/Bit97Wbq+LkALPjTGe3t+ErhxF0vJ15dvIG+e5js9+9rMfXYlsy7KEAndoh3ZoH54coJwC90FEgJgvs7n5P9FtX8bOjetIBsewNShg/dgQWqOIulPDV058BfOl+fu2D/EoxNWXL+DapSuIqOYUBCgHARajHipWDI3+09GjQnmzT526ySEdjVbQbhP8LI+X1f0SqtttNJvr+Emni6XIxOXSY1hpnESk21g0dHxqpoHnjx3FwtzcTbK0UhR2x8P2cl8Km1KBh+aWbRx5pIbpo+VxBCcvZvr6amcP1Y1RAkZ8CHzmq86HwpEW2WoquG2NEG4xwZz0mxT+MIQ3jDAISWsZIUg66AQ76IUd9JMBRnYHsdNDYo+QWCHiSEMc2kgTjoiS8lWRej3VchVzM/M4sngGx46eQ8Wt3vPjJtikyEI7i+ps9wOsd0aSq3NQzRJeh7mKi9mKjXrRlkhO+SOQX7NH7KjfQbC9jKizg7DTQdDvI/WGiqrmjaR2TeoH0EQUKc9lyPMasryEJJY6THRGSW/yXBOjcgnDagX9ahm98gLalSr6piuA5FaWg40xIIhTGHEMw49gaKM9kQyCkySj7ghNCzrC1IafchtMHs8jPDkQ3R19n3Cjd/txngZHwFU/Rkl5tIhfFQBiKcCgmxl4UACNvalbqGkWDJ1RBkXLEkcyBw4STchH3hVVNz+n/J9J79wGc1CKWUSK8wQKBAOMLjDK4OpsGgo6P9ulSu0CRG4zk/3G7nSUtTxNnqCG0RDua8kg6NFRMQyUTYKSO5etvq0BlAz83c66JaocM2qx9weq/pQURkdWdrf7yfWHIx9efwRvMII3HMEf+QIqSKFT2yJQVPliuqHDMA3opgHDMmFYBgxT9QQN/C7/VloUSS2oKAgRTjTOy/tKFNvU9ZfjIzDJtiEghNuR+ayfoGvmQmWBHyDwfUQhCzNzfVLISdHA91sm1z1WYNB4XGPtblVyIf/8IJPaTlKVWU1nEX/O877lPnEfHxa747jV3/pbfwv/7J/9M/zmb/7mhyLsdWiH9mfR+BD6ZrOHl7sZAJqu4oXqgwVAjJgQAPVa62iurAOjx3DDC9A+q0Mrujg/dV5yf+5X9CeNEmy8fgMXXnsbw2AoI9NF38exZICqlUBzNDhnzqDwwguwFhb2/m0aYzi8ik73x/BGubS/hnpURXmrjbW1d/Bap4NWauNS5QksT51B3XLw0zNT+MSJo1iYmTnwhUswQOCzfaMv07mV6g6OPFIXsYP87xhtYD2fd9Z3i5nSuX5ysSrS1tPlD4ckbhLEiFseou2RtCRIEEeJ5DN5wxBDrw8v7aEdbaITttGHh4HbRFrsIHX7oLxBEpeQRCXYyZzkghWKFCeoolyawsLsImamZzA1NQXXvTdCBaSr5dS19jDMejXP6M6t+A+1goUjNRcLNRfzVRczZeehBTviaCYB4niAKBpgGPbR7TTR29rCaHsbo2YT4U4bcbuL2Isk6kAwsasEdYv16hpi20Jim1lfkN4vuBhVSvArRWmJRGtI+2LtmpxKY0OHgUI+Ei2e6+TKx/8pChJB6+SH+z6XdYyjILvJ8QQnRYlokDJkCFgQalIm463g0G7tFolkCC1MKRLuRiwmprkvmdQwt6aoTjqKuo6ioaNk5HQqQ/qKye3eGkAIfUiiPWr9uYyxolmpmkQEJbZESxTI4TIFCBjpTkTohc/BvO05h/lNnhWskYGa3UI14gArbCdhHbUOWWe4Ox0kGDKvLZtmkdeQUQBG3ei4i8+eIlVJLYrixaiCKvoDTaTTjV3wwM/FoVf7I4MqcYSYhWKzwrF05MfRizySEZMSGEu0ScQSMsDA66YOh9vUb4pqcBsy2JRJu+fHLtsIsnVHbFSevEf1cvIofV6A6l5adr3yW2oMRia/IveLBdMwJGqe9zw/e6mE2TNConK8vykUkU+r85zItVVg2WBel2bA0Eyhb1LQyGJkULdgG6bgAdvib/zhel7eMYr54Q9/iG984xv4gz/4Azz99NMolfY6Xr/1W791L/fv0A7t0PYZH1J/1FQqcLSvTtfwXFUl3T8I48Ox3XkJreb30dnaQG9jgHB4HtdIbXq8CsO28Pljn8f56ftDmRVJ6estXHjpDWx1tiX/QB/1cQI+Zq0Uuq3DPXdewA+lavcr13V7r4vaWxyp88cHfC2ZRnmrhdXl1/Bqp4ceTFwuP4X18qM4PzODv3DyOB6dnzvwAR/HCVprQ2wv99Dd9sbOB+VMpxdLmDleQbmhIjnc9ytbfbx0vYWVlhKK+DAVM5UX3zCSnB7VPMRDjlomUsOIVDffY+J/D514C81wHd3Ew8DoC+hBo420nCDR6nCwCDduoGSzVeGYTKDVpVgpAQ8bqQrv96VJULPWHmGrr/J2tvu+gJ13I3oT2BDwsDHSQ8BD8PNBSIqzBkcnitEK2ULseH10wmFG5YmF6sOeTpri70/ktAhvX3H6EYUw/BF0z4Ph+TBGIxi9IYy+B707gtkfQWdxkINMMxGUywjLZQSlIqJCEbHrIHZcxLaNxLYROzZi20HKwU/JnckpNVk+S5ZLQ7WshuWgahVQEdqRiihUDF16goWyoQBCLgssmQjjiIWSEZ6MWBAs5NOq5YCF1LGs6GUmI8zeNVg7RoEe5x5HMvJoRP57BgtxBgQJMdJRrOoIeTFSkTpPRCSEYEX9UYb5xpUyswRzXYMzBhLZZ3RYCXIoMhKrmi856Hm3feO/XWd2N5VeRcByzJlHtPK/4/lU91gQh9IIPPJpNa/6j7KR7eQ4zrjR2SeIllSkLOrBqA3FbRJed/4uMwAn51sof4psKfQ7zVCCETqFIHSYlgXLtGBZpkwLQOT1HxdPVYCU7xSp28NrH6lokUhp54BlDP4Unc3STdiGBduyYLLGlE1VQ12a2nke3S4okwiRRIyS3WnpFbB9L5OfE0GumSspatAo4GKo38SHgbVwu3bHT/x6vY5f/uVfvuc78k//6T/Fr/3ar+FXf/VXRYL70A7t0G428pv/x3YbFwaePAB/ZqaKZyoPDgCxNs7W1u+j37+M5soN+K0S+v1HcL3UQXKqIaP8P3vqZ6XA5P2wqONj+aVLuLR0BaE3QtLrYDb1cNQFHNuE+8QTAn6YGJ0bXxyj0XURbhiOro1BimEUUEtnUNrcwsa1l/Fap4suTFwrn8Nm9Rw+cew4/sbjj6J0QHSCD/pB28fWDUV3y3N9aCxmOnO8jMZCCUYWRaBU8jsbXfzwWgvbPVVFni/HxxfKeOFE4wMrZsqXetILsgKllLD2EA0jBKNIKbh5nA7hJR76aQftpImdcBsD+EidPlDrAJUR0loRBWMBZTwNKyqhZJRgG/bYsZienhbQ02g0biq0fac2DCIst0ZYbg1xozmS+joHGXNz6kUCHVvAjppW/YPK08npSFS8Yh2PXhyjFURoBgPseD3sBEP0gizBXpLsfZWYnBkL65peAGvkw/R8mH6gGpdlvVoWwggOdlBVtIN0KtJ1HOiUdm40YE3NwJ2dRXl2AeWZI6gUShLRIGhwsrySnKAljJeJ+XyQW1oWJSEAsbPIxe2e25yRc2vuzZ2bOKqMXngEJqQeZQBFmnIux1ShMZ3nDjci22C05L3V/5hITwAhhKeJKMY4F0fOl545wlnLZIkJSuhUC+1Jcm5iWZcAZFIPESFCjJCfTURJxHKpsfGJmYwSTQbVMnlmid5kVClKrBE80pHOpw0HtubK9/ibnqRlMTdSBZ8UABPnms8WOtWSJ6TAnBx3dvOMnWVuTqhehvSmZcKyLVi2DcvZ25vMEcvyWPJzx3UlORAhfY3XZExFi7NrrN4D+bSs3+V6bdiuBbvgwCkV7prdtEs/YyVS9ftQ5zM7rzx/dzm4paI9u/S2/L4dU9eyqNp4W+/D0jHNTYGjHCCJTQAdmX6IgM672R1f8f/wH/7DPd8JRpd+4zd+A88888w9X/ehHdpHxVhz4Lc3W1j2AqFF/LmZGs4/QBls5sxsbf8hRoMt7Ny4gbh7Ept9DevzA2gLUzhSWsDXTn0NRevegzI6HL23t3Dh9bex1d1C0uuiEPZxugBUHAvu08+gSJnrici0qu/zJnq91yUClFvBXUQ1qMBZu4Ht69/G650e2pqJpdJjWK0/hc+cOIW//tijcO2baXwEOzurfRE5GHZ3nW+naGHmWBnTx8pwS7t/x6rbb6118dK1lkQn8igEC5k+d7yOivtginLmJvQT1uvJFNyCpodgEArY8QZDDAdD+GGAIYbop3100y46aQ+xHgPOECgMgMYAqIUo1xYwW/kY3PQIkkEKI8kSwW0IrY1lE9iYoPp+oj1UyiPoYWHY5eZQcngmje9i0tbmKo7USpopsbdRZFXB92l0Clh8cDuMJFKjgAwTrpOb8iskJiMRG+WksvfjEHGeuJ+riSVeprw03ggqwwFm2k3Ue13U+n2UvQiWxzyYELqMJis1MaVkluWIqCQIaEYBKJaAIh0UU+SfUShBK5Zg1qZgT83AqddQmZ6Wfr8gyHvb+3d26EwlXoRkFCH1Sa9SFCuVDpM5dWPnWP5iT6rOeGIyfYd97nhO0sIOyoO4TyZy70mEABECLUSoJ+PpIGUkJVB1YcYUqYkDmjy+TARFYaPs4CbzMyQlSDnTY4d6fFlE/03+n7QcUOX7ObnPBxkBCBsHKRgF2d/n0zkAutvzNQZKpBVm9LWH3aEeA537QJ0dg1LeA/f5daFl9xqkPtZ73Peeh8AbIRgNEYxGMk0QevLp5/Aw2Qee1EOJbcpr//t//+/xj/7RP/qgd+fQDu1DaZ0wwn/faGEnjITm8YtzdZwoPJicETpwzeb30O3+BKN+D83lbaT981gatdE57UCrVvHk9JOS/8Pw/r02qo+tv3INF9cuY9TcQep1cNRJsVg2UTx/DsVPfGIc+eHDmSpv3e6PMRheyehCrMPjolJ4BJVegvjNV7Cxdh3LwxE6uoXl0iNYajyLF0+ewf/zsbMoWzc//Ql4KG+9s7Ib9SGvvXGkJApvlWl3j8Ox1fPxxmoXb6134WffZ00fFjN99nj9gcoiS+5B20e43MXo2haGzS56vT5GowB+QPUsHz1tiL42wlAP4Os+UtcDnIECPu4ARjHBdOUI5hqPo159DGY0jV6zh1FXUfp4NHSS5ubmpFUqlbtybChaQJCz2VPqbBs9T87lfr+NYIcUQkqEs79X55MDDWt+iFU/wKofYt0P4cuoNkHNKFMho/w3CxSqGi17poWqdrMxib+ox1K3ox4NMNXpYKrrodoJUOr4sCLmNLhyn+p6VuuI4xtsTMIuEdQUpbYNC3XqxYLUvFH1bkq78+7ufXg/bW9itBr9ThgZIcDxYyTSE/TEGfC5dR7W/TAKNERGishgtCRBqMcqYoJY/ctoSwStpDApvbfsvI27icjMxG9b/oaUKE2JDYgXdatTbpLqZO7mqEysL6fTTYKCvM+jJDkwyRsBCFsORtjn0zk4yXNiJvd7v+XbyKfz6Mr9tnyfHra8kQ+7MXfKHzAPdaDaIOuHA4mS8b6iKXEFJeKgRBfMbFne8z5TRYIpwqBof4ym+grojEbCwCDgkd/9PiN18MRTzz5UoPaOQdDp06ff9QCvXLlyx0ILP//zP4+vfOUr7wmCfN+XNimDd2iH9lG3TT8UAMQK1lTs+eWFBmYPiFLcz+hPGHTQ3dpEf91CMDqHq/Em/HN1GK6Nnz7203hi+ol7vu2ERSff3MalCxextnkDSa8NV/dwtmRg6swZlD79aZgzM+q7SYTB4IIIHQT+1ngdrruIin0KzvoaBi/9Pi61drARp+gaBSxVn8b69FN44tgp/J2zpzDl3EzT6rd8rF5sob0x3F1n2cLcyapEfkx71/nuDEO8vd7FOxs9yU3JrVqw8MKJOp5crD3QJHsKGoQ3mhi8fhntlSZaHSbHpxghRF/3MDR8jEwfgT1QER53iFJZw7Gqg3p5BvXKo2jUT6BWP4NiYRZbW1vY2NhA83qLd6Vsg84Woz0LCwtClb4T54aS1AJ4sjo8bM0+ZZRv9paZt3N8SoEeSoTfTZRHRi/TFD7rFSUJBnGCfhSjHcUyuLBNmlqogAzzxaJ4IKICadxDBX1M6aFUSWchQsuYUC+TmuscCM4llpmbYsFKTNijFK6XwOpG0Nsh0PLIjZNaGxoyyiZvIVuHOTsLc3oG5lQDBs8la94Q/NxHYCPOcJgooDKKFHjJaWN5QjyjK7k6Vx61EYWo298OKWEBAoRmAl+LEKQkcsUqF4iAIlOcEyrX+FB3j3l8+PnExHdyuhbXwno6jMxwfeoA8x24xY5Nai3f8iTto5VJPsTELGmAti3RTzYOBuzvSbO6k2vIc/JuIOb92v1c98NoqoCzB6/fQzAcIqTSWpAPvqSZwIICCZNNO2AZv8dILyMlXCcBg5pW64woJ51NM3Ky33a3pe8FKJnQQw5gY4o6+L5sIw4PpgTfb7McF3ahANstwCoUpZcaRhKpfjjsjt8kf/tv/+0981TX+NGPfoSvf/3r+Lt/9+/e0br+83/+z3jllVeEDnc79k/+yT/Br//6r9/RNg7t0B5muz7y8X9ttmU0esa28JfmG6I69ECiP63vo9t5FVEYoLWyjbB1DN2hhuuFLaSPT6HsVIT+dq/lr0lvCa73sH1hFReWL2CwvQnEfcw7KU7Nz6H2+Z+GfeLEOEeJUR9GqViwkEbJ2nL5HCrxDIK3/wTta9/A+nCEtm6ibVVxrXYO/YVn8LHjx/ArR49ginVHDgA/Kxda6Gxm4EfTRNmN4Kc6s+uUUtL6wkZPwM9qe7d8ABO1z8yW8dTRKk5M7SrC3W+Tl2PTg3dpBe3Xr2Jrq4VewCKlEXrmCB1niFF1iMK0jqnpMk7NHMFs/Qga1WNolI/CsnZzk1j7YXt7G9evbaPZvDAeTaQxt2d+fh6zdNxvg0efR3jWu57U4qEyHtXbDnKkGTGjJLiSpXawWC+Iat67GavLE8gQxPQiApxYQM5QqsMn8jnBz9g5Hp8v5g4MEUdDRHFfQE8JPSwYHuYMH3OOj7oeqir0ZgWmVZVeRwG6l0Jj5ddhDI1KgJQLp8x2b4SEEtPhrvDFrjlCbTGmGrDm5mDOz8Ocm4c5M30XNLXbBzmpx+iMoqIR8EgbZvS0iUR7lditpK53rw0jBbrkffA+Vik0eV5J9o/CUzqQmEBoJPBT0sFC6b0kgAdP0cWo+EWlryyHI0cgTCCXlqtO6SZMOn+TeSe5tO9+UzoRN5kkjGeJ7ipSYktSus4ik5neVZZaLsIEsn5xQDMFbVEUyyWFd9c5qT6W08c4zVHzKExERCTiAEQQY9BP0AlU9DhjuCnLjoXRZOYN5v3ktG4yEpQlm2e5S8wtlNQWRt4kQT9bznlZlgHVjKIlxyWNAxZ71y0yz4YmAi6SWpPl6ci2iHNjOtpKCVKOx6fTHUjOTRLGSuWNstB5fRnKRZuTx6HDsNQx5Nu8necgJaXp2EvzFFiIo1DlFzHvh5G4OFbXSoDIXoAiUQ7ZL0Y0lAIdxrlKSrLaHw4RDAfwhgPV9/uyjYfZTNuBUyzBKZXgFkuws2kKMKgiwHnuVDTOmUpiKnfyPopUxIg9z69Ej2J1Xk0TJiOOAnaKqi8UYLmMWj88YOeeFEt9N/vX//pf46WXXrrtnKEbN27gYx/7GP7wD/9wnAv0hS98Ac8999wthREOigQdP378sFjqoX0k7c3+CP9zqyOO23HXxl+ca8ClEst9NkpHb29/U/Joht0OOssp4uEJrI62sL2YQp+tYLG8iJ85+TP3NP9HRuPWBhhc3MG11etYXbuKZNiFYwY4W3Zw5FOfQuG558RZJCWp0/mRNAI2Gp3TauUpGNseBq9/C1sbV9CEhqFuYNuZx+rMs9AXn8Jnji/i+UZV5G33W7/lYeVCewx+6ECwps/iI3WJAOUO/dXtAd5a7+Hq1mAcueD7nZEKyluzvs+DpLxxBD9c6aL/2iVsXltBq+tLMv5ID9B2PPRnfEyfmcVjjz+BE40TqDv1mxwSEXsYDLCzsyONz9fJ10OxWBTgw1Zg3sm7GKNiK+2RgB0CH1LaJou/ThaBJdAh4JkT4OMI4Hk3Z4n7xBydpdEuZa0dHVzUVCqhZxQ2RWUj8PJhpR6cdCCtrMeoGyEaeoBpI0BBT+Recpw52M487KAMbSdCst1B3GoiajaR9Ae7EsTvYkJTK1cksmPOzSrgMzsLbZ84BIs79oIeukEXXb+LftgXGeIgYvFP5lvpMGMdeqJDjzVYqSGRJuZhWYkhnxuxDjM15HOd3401aHS+s6RwVUBSSQFzmkpfXuRhGI0wgIc+M8GSAGHEzymSqyI0SpUqS7fPnHdxrKXqvbYnX4l1bfgllZSeCNhhYUXug5YaqlFsN1OTyyXKdq/33utORS3W2jEp6kCApBkCjgQkmZToJahR6lvKqVcSzBrlvkVVLXPiuT9ZHaNd6tuuIhcBGGv7EICNQRhlhfPCoxlgERDB50amFpaDjhyMjO87iX4p8QJuU9S8suOUY9BZY+j9DYwoZ5X3NZP/SaPLGuczsQXps8Kqu8tyWl6+jLQ8nqcASRQgCkaIguG4j0NPPpP1vpvJfZHJlcu9kU0LkFVNwInU1lFgBQK2CXBYS4cAS0VH8tyoMTDL5yWNbDc3LBdWUMejntcK/O0FgbtgcFJeOhPRyNbNa2mYBRgWxR8sScAhu1XAl/oylUpUPl82TXnwvAk/lMskcqRJlITAxLBdKaBtUpTEsKEbFjTet+yhy3bZeD+oXC+RIpFtMLqstqOkyCHPpgzsUWHOdmTdFmmxuqWAK4FOyF6BcvYEs9zG+Bxlva7vglZpBK1yffaC8rESIsHxxD0/uX72/M7MsV1RooehWOo9A0GkwRHA3C5F7bd/+7fxS7/0SzKKkBsfnDlflGBn8rP3e6CHdmgPi/En+aedAb7dUsn850oFEUFgdOF+GkfEd3a+jX7/HRk16252MFybxsh3cD1Zh3+2Bq1g4dnZZ/HJI5+8p/k/0c4I3sU2tjY2cHnpbXjdJqCNMGMDj517HLXPf17yfkQeu/+mRKk4ek+z7RlUik8juHAJrXe+heaog45mItINbJTPYOvox3Hy5Hm8ODOFM0VHRCX2W6/pYfXiAeDn0fpY6IDSyz9ZbktdHybr50bn/dyCqu3zXhGLe2nxIJTz5i9vYfOty2hutTHwE4RajK4xQrvqwT1bwRNPP4tzC48dCFg5Mt9qtdBsNqVNDjLRmNuTCxywHMKtwAkV26jUdqM5xFJzOBaB2B/hWaiq+jusw0PAczuS1LzmTYoj+AGujwKpRTWcpJHIi9lHASNUtR6KGMBOCHB6sNIBCloEV0tgawkcLZH8nMnDMMwiHHseDgGPPQtz5CBZbyNcW0W0uoq4uyuqsSdaQke4VIBWLkOrFFVfLgmNTauUoVGkYyJqq1TWkjHQ6ZBi6qvpcOjBHpmwAwNmaMAKshYS+Cgp6b1BrFz2dlcWOXfoduV0d+eZC+MzJ4YSyEzcp8qYKI8pSWo5mHh3nUpOeddbnKwtMhZZ3nMvZEAmc65ldJ7S2fruSL1tOAJaFNCgE5zXraGwBPclEuUzAhaCtExpWO3bvTQ9nWjZPCa2JRdWTRtQdVDyJlLHGeibBDuUkw7DgQIP0QBhzALJlMsPkWrKOaZnLudIaE0GTEol6wVYhgubTXdh6Q5MzYaZWiL2kIQhUoprRCHimACBdZ8oskHwE2X0QdZyUU6yAA2pg5QXdlX1XSTqNXb6s2hSLkZxK8ukuxmJmgQTdJI5LQpwE0pvgiX2RKx2I1d3mhDG82OYNnTThmHYMvA1rgeVyUqr+3sX+I37rAk4FLCyFwQKWLcIUIowpS/AsAuw7KKs+9D2Wg6aktu4jhyI+NjPncIHbXeCDe7ZG/u//bf/JhKot2tf/vKX8dprr+1Z9tf+2l/DuXPn8Pf+3t97TwB0aIf2UTQ6L9/Y6eLHPeWMf7xWwucbd5dkfrumgMXbaDa/LfQy8ow7N3QE7VNYH2xhvdGGdmIaZaeMLx3/Eo5Xj9+zbcf9AP7FNgbrHVxeuYDtrWWADqwV4+zsDI598YuwT6mHKgUPdnb+N3xf5aNYVh1F60m0XnsLa9f+v+gnPjxNR2CVsTnzDKJTn8LzJ07jqUpR6pMcZAJ+SHvbGh0IfvgSv7jRw49vtEWhbDKCQeBz7khFlMkehJG2FLU8DFY20bpyA73NNvrdITyPtSOAke6j7Y7gLUQ4/fRj+OnHn8dcaW7vOtIUw+FwHO3hS2JyHIzPXeb2UNKa7VbFS1mMlJGeHPQw0jNpHNVcqDlYqBUE+LBVC+8e4aFDzno57ZAtQjOKhd624ZNSleyhsGlxH7N6GzPYQSPdwhR6cPSJRN3JnA2JGigamzRD9bx/LKsBzU8QLC8jXF6Gt/QWkl5fbQepqHuN4hEGVRvtmolmMUHbTRCWWTeHo8XcJgf+Jgb/+NPdTSHbe15iDbZnwvENOOw9C0dGRehBBUbMKI6JOMrpTlQeY/I+81yY2C/lDCUZX/UJYi2rG8Jelqsm8soyokxfPqtCnznvjMLosGDTGczAiW26cK0CHPZOEcWikgsWyWKOPIvjTr8824fMyZRIh8g3M8KkwCG36jikodkoFVyUikWUCyW4BdYwoQQynelMInqC0jR5b/Ce9GMfo2iEYTjEKPAwCkcYBEN4Iac9WeaHnqqlRFAs0SYdBvsohh7HCufEMQyO8kvEh2CP9J8sWZx4h8UzWYuJam5sCEV6OiG9T9MRyt+ogf6sRJOsA8wfC0OOJFAGUopKEpCoGiqqEQiameOtgAIjcnTSUwQB8F6ZHJM+p6zX3Oe1caGAyV0pZgmDTEhRS/4WmLtGSKfqOEk0iopyMi1TMGwbhmNB433tGkCBxXB1xLYmFMdAjxAxEpJJfJu6DYeNoE0zpHc0B64+2WzYsKAlGqIgUi1ULQ54Inlf8T6zYTqUwHaEZsUoh0T1JqM5WURCFVo9gCJIemCkIiCqpVLLZ3KePX9bEimaWJ+AO4t1fIyszyMjalqoZBLty2TAJeKyGwFhH+XzjLrw/tj3rBP8KwVjd4Flvm05nnT/8WT7z2hmqOTGJ49jrCA4QRPl+ri/pDhOHkMe0dmNft1MeYx5biajR5S/zOmRB9yb3OfdCBJ7/r52RT0eFrtjEPT888/f9LBaX1+XpNl/82/+zW2vhyOMTz311J5lHGnki3f/8kM7tD8LxgKB/2OrjYtDVQPoi1MVvFgr3d9thh1sb/8RRqMlebn5XaB9pQ7PN3Ddu47BqSL0xjTO1s9KAVTXdO8Zfcu/3Eaw0sPa9jKu3biAMOxCNwIs1op49HOfQ+npp8U5otQ11ekI1GisOl8wz6H5xhKuLv0HjCg7rGkInRo2j34S8+c/h6/NzOAYX+gHPIz5MmmuDbBxtSu1fvIHOoUOjpD2VrLEyf/htSZevdFGz4vGjv2Z2RKePVYXRbL7XdQ0DX14myvYvHYFraUmvK0I3pD8fHpuTMFPBfgMTB9eOcTMYzP45HOfwem50zLaPmmkueXP6dFodNNzNy9eytGzgwag+EImrY2Ah415PfvpbVRsY/4T22LdhXMA8DwI6LCnOEGHuQYHvG45qqulQ0yhgzlsYCZdxYw+kjwdMXECdFj2LBx7BpY1pUCPVYVlshhrQY0csyp8t4u42ULcbiPYWsJwawtRuyWRh7HTnXjo1izs1HT0pgrwp2tID6A25pGBXFVMaGihDjPQYYSM6GjS64EGyzNgjUyJ7pjiFPK+TqVSPZunsYWINF9ya+jMppaGlPst9xkLlO5u+yB/mEslN0NG8LMijKSJaboAGYeJ+0zWLxRQKLgoFF2UykU4BdZMMWA5quW1rd53knmvJ2qSXn8T7WZfks7ZbpV7MY4gTYAiEdrIaHf8vKjrKGYOv67z2ViSBHFJOJeesIL3kJISz67UXRyDKh5KSqI0kbqm3LkCgCS3CcoxXImMmCUTtmnDLVVQqtRQqTZQq07DLZbVtWBCe5aPwuMf+UMM/T6G/kDayB/AC0bw/CG82EcQ+0o4Qi6yAVgGdAIDAhXbgkmxBceBwVwnRteEXsh8LUV7zKOVBPGkPOZu7P70qXHdHqkTxCW8NgdcH1ECxF0bfyuMRLMVigUUzaI0i7QuglCEGKQjRdnMW0jwH8p03vOYhHqJXVDPZ51ruPJuKpi8twsyzWVFk60s3znwXcAachnQHoQ9tCP2FJAZYjQcZdc8VhG1LF+tYBRkO7INN9umWUCdy3g/3CKaJIVoSTclzTUOEMl9pXLmeGykZI4jpSw6zOKnugvHYNHW9xbWYGQuGgww7O5g2NnBsLsNb7uNkLRGUh1JuWMhVdOSemG8d0zLheMWUeRzwC2h4JQlL1Sj8BLz3MJYgCsLAIOKcGyjIWIq0fXb8LdaCAZdhP4Qge/Jc1L71D/Ew2R3DIJ+8Rd/cc/F4EOKybHM52EU59AO7dDu3Ji8/dsbLayw8KGm4edm63i8dP8KaEr9k+6raLa+pyR+E2CwXkZv1cHmcAtrVgt4chZuoYjPHf0cHms8dk9Gd3LRA/96B/1OBxevvo7uYBOaEaDi6jj//Mcw+5nPQHccoTcw56fV+oHK+5Fq8MexfcnHlWu/jYDKXRyhK9YRnP4cTj7xBXy1dnCuD80fRSJzvbXUQ+THtwQ/L11r4qXrLRE9yItuPn20hqeO1VC9X3V96Ij0N9DffAdLV99Ba9mD37KRjFwgstVwNTSEWoqBMULkJLBmDMwen8Pz557C4pGTN718OTJKYYPl5WWJ+Ew+syejPQfl9/T9COudEdY7PtY6I1Fu47mZNKreHW8UcHK6JMptk4ptjE5sBaFEcTYz1bV3Azq5GYhQxghl9FBKWyjGO6ilTTQM1sba/R4jOYXCcVH/s+052PaU5LE0vSa2+k0Mlq7D39pA2ukibXeRMr+pN1A0mUwemb2ajuDVChjN1eDNV+HNzCDNABzv+SlnClP2NOp+A6VeCU7fJlMTsceCnLmamko4ZkRCYiVC78ryauiYkuqV0tELMcJQKIsENwkTt21VlNJg4r6li0NSqZTguAQsDhzXFsDiuJYke0vuC3NlGKkR0LCbqH8nv9EcrIicbr+PzkZ/rFpFYPGuxJcDaDEUUGEiOyV07ybJXOhMWZL2+zVGFKhUJQncbA7BCvNRzD1ywGr0PSvuKSP8KjmcYIXT7AWETwAxFT0wYRe5foLIIuxiUbZxr0fARegkc/xzCt7drMOLPQFDdPjZVC7YcDxNx5z3KY1Fjul4s9HR5zyde/YC/DPlL/4NBw7o0AvYitX6CSC47rzPQUzH70j7IIz7zP1nz/PIc8rmR5S7T2B4IQwWHh4FMEaq17Pnv4oWqpALf7NN00Bi6khMA+m4V8vy82cxIhnE0ARAeEh9DwhY0DiCHsbQ2QcRtAPyJLmNlKCZkRveo+wJtC0bpumMQZIep9AYjfR9JIM+4gHVLN//b0dn3lq+jex+p+XPTYI3RjMPMv4+nkmSh0oC/Z7lBH0QdpgTdGgflRpA/22jJY4iawD9xfmGCCHcL2NkZWvrDyX6IxbXsHPBQq/r41rvGgaLDvSjdaG9ffH4F1GxK/dM9MC/1EY09HD92ttY2bmGVPdg6AnOnDmDs1/9Csx6fUx9ozhDEGzLvKE30Fyp4sblH8MeLStM4FaQPPJ5PPnMl3GyVD7QAeF2ezseNq51ReY6T162C6Yovc2eqMjoN4uaMt+HRU2H2cuvUbTw8dNTeHyeFKr78FAn8mxdRXf1x7hy5Q1srjlI21MwglIGelQXEneVDBQWXMycmMXRU4+gPjdzy0gUcysZ9aH4TB714bkh4KGoASM+k4puPHaCnEnQk0e/Jo1CDwQ7ebSnVtiNtA2iGDf8AMueAj4EQJSjPsgsTUPdNFA1IpRSgp02Csk2CvEmnLizn0UixqgOc3YK7jEUCidgGFW0/BbWe6vYWHoLneuXEW1twm4NYfW9W59yy0BYcRGVXQS1Ivx6CUGjiNSxZZS67jTQMKZQCeoodAqwWjqipo+o7cloKqNEXuJloEaNTCsqFe8ZlXLPAIQ4TTk9SSqta9BsA7qtksKplEXKWbVWQa1RQbVekYgcxSfutmp9bnTq8oiDREkopet58KSOSF9Aj0wP+gg52k5KTJJkfZ5PdMCKJ+tz5ov2yVlr2VmISB2yC0idAmKziNB0pQWmi5Q5HswroTNNOV0kmdw4IwaqppJIj+sUEVDLzaxepKlzXtFu2IssuakSzTWL67WQMgrKCDILAydqX9hL/lNeL4XrIJ0ny3uxSCOimpyhwzazaZPzGqx90/nvjs+WKFs/aYscJGDzxz0Bt1KK5LbynttwTDYDjqXDzihSHyYTFbbhEMlgsNsPBkL/Y0SVN4ioGVL6mypslgmN9+3EdP45aZmU5R+lAUYgvdTHMFTRLxYUFsAcxzDDBFaYwgjVdN44T0BhsN6a5ALu5roJ7ZM5bxpz3WKEWoJAi+HLfCh5cEILJUAhWzFOoMcZ6CHgYe9HsDMhDJu5X4YtvRKvUOAzpwDK7z2LVOXRKdXU9O0403LvCRhT+WUi6qHpE4My+QCNAmp35KGTuenaIq1vlSuwyjWhF5oUZNANEZ/gNWTtnyQMZD4MvCyS6iHNaKQ8Txp/w9kzjEAvKtiIXWvcEteGVanBqVThuhU4hQqKxQo+duQTIl7ykc0J4ojT2tqaFMSbNPLLuUzJXh7aoR3a7dYAIgCipG/VNPDL81OYuQeV7m9l/cFFob9J0q5mIOkfw8Y7A2z2N7ESb0A7Pwe3VsGnFz8ttX/uxchmTKWyt5uIOz5a68u4tPwWvLQLGBFmZqbx5Fe+gkqW98Ok4lbre+j13pJ5TbMQto/gjbevQ+//Maw0hMmH+smP4+zzfwHHawfnIZLTzMKmpLyNehM1e2YKmDtVRWOeSbCaAIBXlloS/Rlk0SE69584M4XzC9X745z4fUQrL+HSxe9haUlD3JqG5Z2FnjKJwIDu2NCqLkrHpzH/yDHMHGmgWLXf81pQ5GBlZUUa5a1plAY+evQoFhcXRSqYxgjXtc2+5PSstEaSz7O/Ng83NU1FvkzEgG2qyBep4q63ohhvDjwse0qooBXeDJqYczLnmJizTNQNP4vsbMOMthAGm4iDAySk6QhbddjOHBzS26jQZs8Cmo3t0TauDNawvvIttC6/DXNlE4WNDnQ/ovC0NI5Uu3YZRqUKa3YWOuvt1GuizmZUa9DsEhAZ0NhCA2lIlKnD9A3EmyHCpgewxpPvoxd3MIxHGCVsntCTdNLFSqQm5YDGhGUVpFK8nnHxbdKVZLmV5dSo6bxuDIEOG5fRWEdk2G6js7KMZVLIBkN4rFUSxUKVY3RJIiSS/L1b6FIlhU8qaOXiCFnCeq6AlUXmxFmnjLM47gr0yLcsB3CKgO0ClEgXZ5b5TvsuzHsZHR/TVuuzC0IBO9C4UQkUxXdQrOe97BY0rvtgBDP8HfBc3uSgpikMfwRzNIQ1GsAIfGiMJDHSxNF9aYZqVLk0TOkNx4bl2LDZ5N4xoHO0PQiRBj716gGuK5vWWqzmPQABAABJREFU/AAIfWi+Dy0MZLkWRSoqKEVWCRCzYqu2KfcjpZKt7N40padkQs79Y0RB3ffxcIB46KlcM1FNU/dP/ozIgaPyjzMwSZAnEUq1fFx4dsLsrNXe19m/s1zxXIwkj3TlIiIiGUGwW1XCF0LDZNHhckkKE4u4CfMhM+W4TP1BfodpBiRSXhv2E/NCcSOw4+E7DjTXhuEWYRVLsNgXSjDdAjR+xsjhQbmq8nuPBZBwvVTM84OhgJUw8scUTd43sEzojgu32kChOoUim31rAZt3PVcpQX0kOZCMDjJKlqtJ0nLlRFL/OGDE6ODDlPtzK7tjb+tWgSOqClEv/9AO7dDuvAYQi5/+8n2sAUT1LIoK5ODCNKfQXWpg88YmrnWvYlAD9EeO4lj9BL5w/AuoOe/vVUVjfRLvchvhcg9Bt4trV17DerAB6AGcoovzn/5pLL74ooTOqXzU6bwkxU5JzxP3zJ/D1Xd89Fvfgx22YZgWCvOP4ZGP/SUcmT9z4Da9foiN611s3+hJwieNjikpb4z8EEzI98IYP7nekZwfUr9yetcnTk/h/JGqvMzvuXkdNC99A++88zJ2Vqbgdo9Dj5VkKl+Q5kwNs48v4sj5eZQbt/+CYbSHlDcOTuWDUHS2WT6ARUzpCDGf551rmyJkwHo9+63kGCJicISAp6rkqjlSTcenKwIFMS50BljzlSz1pFABjU7FrG3imGtj3kpQT5sosqBusA5/sKFAN0Fu1tQf6bCtBmyHuTxzMKwphFoR/chDM+ij7/XR7VzEzvD76K/dgLvWQmG9Dac1QI0J75qOslVCeWoK1dOPoX70NKz6IiK3iiCx4A9D+MNIaJDBWgTvaqyoKFECLQqgR6lMJ4GPQcgITzAGPKEWCqgxKiaMoiV5HnbZRqVakXxWnl++7whk2LMR7LwbJW04HGF7u4krl69jZ3sTnZ1NdFs7GDI6E0YISL3KJdEkTSNT+ZL1qXo2almWJ5PPj6cn82BUzRswKpKDE6eA1LIpp4jEspGaJlI6UUYKx0xg6xFsMwGDnirXns4hR8MZ8VOSwczHk+UaqWRqO8pPzEBXNtJdsAwUbF2ih66ZwjFi2EYAWw+yRG7uJ+lpRcnZijNJawIz0hoJ2AICNs5z+QRwm/ycER5xuiUqtNcxNxNGEDxYgQcz8GVeJ10oouPKuihq5D5WdWApxqaaZiAQ6qmOCGqaUt8S1smcYa6n6HswfU9AjxX4cIIRHH8IK4tSSWJ/dm5UfdndPs6O4wA21E120N2U/9n9pPEQsEW2i9gtIHJcxE4RMYE7gRzvOQpPJFEWNYigBSqKYKQxLCSw00TOhZkw0pfIsnxaCR8YImeeFTFCajtI6UOyJx3atuV+5bTcr5YDzWJeDhtTpRTwYpRQtocUVprAVIWUBEQIuON15jR/K7wmjFIViwrssBWL0AoZaBegQ1rnEEnoqeidyK5bgOEApiMDVe/b5D6keiAFFLJzwPVKz/y/vVe9fFsXjDevBwy2AL8HBH0gGLA4kPqM68yPIW/G7rSWqTdaRhVVu3rwPocDtc7+Trb+bBtxCCTZIMRTv4yPJAj6V//qX0nPh81v/uZvolzevSx88X77298+zAk6tEO7TXuLNYBYdyS9/zWAfH8Lm5u/hzBsy4PQ0R7D2msjrO5cxlL/BnB6CvbiND5z9DN4cvrJ9z26M6a+XWzLiGLz2iVcaV6CZwyh2TqOnnsST3zpS8KjT5IQ7fYraHdeHjvKWlLF5jUHq2tX4I6uw9E1uPUZHHnm5/DoY585sEAb6/usXmqjvb4ry8W6PgQ+M8fLMuopIi4dD6+tdPDOelccqlzp7ROnp/HE4n0AP1Rj234bly/9IZYvbyBZPwJn+ARcMDm1AHO6jrlzi1h46ohEqW733POZy+g7gQ8lrnMnlM/lEydOSJ4mwc4fX23hwkYf3X2S1dNlG0frBRxtFCTaY9g6OlEieTvXwwg/avaEnskIT3TAwBfz1uZtC4uuhUULmMI64K9gNLqBsNMS1as9UItOk1EVkBPoRfhwMEgMAR/9YRf9YFXyCcSSBHZ7KGDH3e6huNFB2Y/E+SlbFVTKx1A9chK10+eRTC1iZDUw6AS41vIRbUTQoqZQZzSfjlCIyFdUtpjyyxzZ1OJxY0K2jAyTsuYaMIsmCuUiCk4Eqxij4EZw3T5sh6OxPvpDD9tLAaJIA/2qKCKA15RPEym2jjSZzlSkGIEZqcKPKkqTgfzJ24QOX9FF6lgwHI7UG7As0q8UiB/X9RA8lI2272tSd4YOOPNdRNlNgSTSyHQthq034ZipAiVmMu4zcbE7MoIgw6A4iAvDYNFEVzlw2fGxcHEUD5EMe0h2+kgJvPs+gr4PcNCBEvO5gpbk2HAwgE6YUqiTdbJmi1lQPbdlsn6LSK4phzWXqeZIfBCo3Ajfl4gGKVxcdq9MRRSUQAif2bx8eTTEcDVoBZ5ARvZq6ngYUahUxMEWihi/mEcS1M0hQEzoin6gcrH8ADGjCaytxHPDY2UhVokaONm0rSIIXEaRBCvLJ7NVRIk5IaRCRikjVRo4DhSIAAfghzGCIBEKpCi0MZIhlFsNiW4gsSwkTJp3DNhOCteIUUmHcNMhnHgEO+5DZ0SFAg8EpQIQTQSpBS814KUmYhQQ6RYCzUJXM5FoJmLWr5mcFp2+rLaaSO6l0NMYZhrAjD2YCQGrDzPswvR9mF0fmogTpNCEPqnAaEImg2YhHm/DQqTbSHjvWFSYc6EzN8xkdE0JMAjoJB2u2YSxsSxOvBYMoAVd6EEfZtAF4uAmQXgV4VLgmr8t3XSgi7gAt8NpVRNIMx2he8o9EAfQCEqEZjZSfewDURYdlAGNXZrp3m3Y6hhYZ8jMtsP1Z+vOKp8q8MFtBH2kfk/uLQHZGRWUx8tvT0bulHDKwdE6CFCyM4DEXNSsJlJ2HO9pD6HE+G3nBJ0+fVr669ev49ixY3sUhDgKdurUKfyDf/AP8IlPfAIPyg5zgg7tYbSXOwP8UVNJ6j5eKuDn7lMNIMmH6b+Bne1viawwk8kxehw3XruGa+2r2Em7MM4vYHH+NL504kv3JPqTBDG8N3cQbg0RbGzi2vIb2EybgB6hOD+Pp778ZcwePy7OYK/3BtrtP5UcJfXHBfQ26rh0fQPm8B3YiQ+nWETjzMfx2HN/HqVi/abj6257WLvURnc7c6CZbzKnKG+1WQUqGPV5a62L11e72J6QcmaRzhdONKS+z70EP344xNrGq1hdexnry1cRb9RQbR2FERRllM9xK7AXZnD8xVOYf3RK5EVvx1h0krV8qPBGADRJPWaeDyM/sVXExc0+Lqz30BruAh/b1HF2toQjUxz1NNFFItGdXJmN0chbGUe1G5aJWcvEomNh3gaqySYCAT1LKm9r4jVC2okPE6PURT+10I4hgMqLD3BKSR8aBXB2+nCbfRRaI1S6IRyYIt3sMCmb9ItiDc7CKUSNRXjFOQw8HcNeKFLIBsHO0Efg9RGwTouorEUSzaF09J6CiQQUFkeDmWBCNJciNSLYpRSOG8G0h/CTAfpehHYzQGfHx7ATwBuwXsv7kMfKTKd0dMkSgF6ullCfrmN6poGpah31EutMFVVdFDp4jIiykKQUeFW9Kvrqi5T95HxChcR8JPa99kEnrZGFGwlebBg6ewea5gCjEOmA4MVDEnGdrE2TNdmGSiRX1y5bIc8LGwUiCHAIuPs+UgKevJ6WRKwYVVKj3KrgJHNmwtuvISMOHKNTdhadyvKKMrUwtUvKqVYFNROVSOSa0Cg+oSuda6EuZg6lrAcEKQRhBeiaAnYiy5ZqQkuSY8tQp6qFxPvHgFags61ljT/tGIYZQddIUetL5FecxzyJXCIe1oSTaQFU29w3Ik+askRapAAW0bWfOaF0pIcT/W04pQfeAMyZMrI+a9wW18ttZQIJd2qSn5PnYe3rVW5WctNn40s7/m838jUGCZlvrvLNeDkmImv5+jO6572KjPH8R/w9yP4QpEXS7q0p9UcCu9v7tgIzQscUILQvwphJWUe6i8AoZq0k4FOAFp+1aQAjCQRw2iCNOBSKuQ0lPJNTGydpjiIrL3WCmH+lIzSLiIwCfF2t39dcRKStM5tPN/EzX/zKnY+qPEzFUr/4xS/it37rt9BoNPBB2yEIOrSHzf6k3R8XQX2hWsKXpu5PDSA6SNs730S/p2SlXfcEBqvTuHHxEi63L2FUN2A+Oo+fOvZJvDj/4j3Zh2h7hNGbO4jaffSuXMDl0TUMtBGMUhHHX3wRj3/840IZGgwvodX8vopMcV9DA52tKVxYGcAcXkQ5bIrSUnnuBE4/94uYP/L4TdvqbA2x/HZrj8Q16/sceaSGQtkWgMScl9dXOri40R+/cPkCeXS+jKeO1iQSci+O2w/6WNt8Datbb2CleQndrRbKrSOo9BZgexUgNWCbBVilGqpnj2DxhaOoL94eb5vAh4AnBz5S2yQzUrIodGBXp7DSjXFho7eH6sZjPT1bQq3uwi/ouOaHB+bu5MactLppomEZAnqmLANTlomy5iPw10WswvfX4PsbGW1LGfnpo9RAL3XRjHRscDR7gpaVG12aiuai3k1Q7YQotj0UmkNYQSxKVKI8RX041qmAibg8hag0Bb88B8+uIZEilsy5iKGNfIx6O/DDLkbow8cImpEoR5e1e6wEMGOkZgLLTVUrpJKuYlKkwNBkH4PURD/S0WqnAnp6LeYEDaEHoaKCMV9A5IdJdTNEcYxqYJJTwfoYpONktTK4XtbKMLNpi9MWKTuUIXclOlcpVWFZqmYRAci9NF4TBYgIhlQFe/V6V0U0EWnAIEDaHyLu9ZFQrrrXk7pIoi7V7yuH/922IeCC4IUAjcppque8bCe77lS9kgTrJIbpmBJdMG1K9MbQeZ0Eu8jYfhZlkapHEmWQmkdSyFWtm70ChJlClyhP7Na/UYCWKnn8OJH163oM3UxAQpvk1typSdFRAi4XmlVUAMkqqqKj/Jgj8OFIBpekMT1fzocCdvm5Udn4qk6QrmXgU7+55/1110a6o1CqVE6h9EIJi3bbnbh5fC6xsLJTBiiKI31Z9QRtuUodzwEHNvY0Rib8XXpUvmxyXq6HApNj9EMgZhXU+vf0/MEWdqli46btrjfbNmlsUeBJrmHkjxAFIyShryiVzMkagy3KzxeRWGVoThm6U4LhVmAWGzCKdVhF/kYd+W0z70u1VJ7FgT+S5nuekp4OfCUswGgzc7RiXyJAck/rDiJdAdtU8gaZA8RokYvEsBFrlpLAFwATq/VHsYgVxKEn+54wgh16MJIQRhpKr35nqoZVHv0KM8ATGAWkrP1EAQ4+hySHk89o1hvaCzz3WKqicTlIyrcnv0+q6WmWgKqYx/Mu7y2Cpv/3lx/FB233FQR9mOwQBB3aw2Q/7AzwrSwC9NlGBZ+s3V0C43tZEOxgg/S3oCkvjErxeay+3sfy6iVc7V5DeqKO0qlFfPXUV3G88v4Ln6ZxCv9SC/5SF+H6OnZWLuIqNhCbQPHECTz5+c9jbn4enreGZvO74kzT+P5qbdbw1noCc3gVU/6aUArK1TqOnP8STj7204qLPWGDjo/lt5rj4qYsADd7ooqFszU4BRPDIMKbq10BP5ORENaweWqxKvk+zFN4PxZ5Hayt/xhLm69hpXMZ271NOP0pVDpHUOnPwgpKIi/qmAXYrLsw3UDj/DxmnpwWgPZeRoGDHPgw8jMJfChnXa5PwTfK2PQ0KeCa5zTlL6HjU0WU6g5818BSGGI4ETEiEKHwxhHHwjQFCywFfGqmAUvXJDcrCLbgBxsI/C34/rrUkpqM8lAKdxin6KUOtiOgGXPkeu9xMXl2rjCLmchFrRmg3PYl0pO2uuKsS3HBgIX5YkRhiqhQQ1hoICg0kNamkRar6mXLIpeUmvUC+IMWgrCFYdLBKB1AM0gpSZES8Dgx7CKQFth0xLqOgKOWkQbPT+FLi6UPg0TqX2hhCF0aHWVGCigJSzEDB2XXRXV6BtML85idn8PszBRqVVWzixG4vIZNLk0tCehS1f726YwUr+C1vqnvK7lbKfaZMN8igZEm0AkAKV/LUVqpW6J6GRmWlWa5EBKZiRT1yvekxofQw/wsCkoHOXdao9x59ZFm0zrBiqR+5HkKUuUxqyWj7XVERTpa1TXSdCq1sRBlLHlUetGGUbBV3sf7NIE7ktzO6BdBRg40VHFWVcQmz6Hi9rKoDYtxyjIqlSnBBjp1AtwyAJcy0sbIWjRCGg2RRp6Mmt/WfolDbSMxVd5KYruqWQXVm9buuRKBhKwJQGQ+DadD6FLI1JLGe5DzAox0K5NJVlS1XEyB0yKvTkZOBkqk6KhekAgfe1IIpeklmEYROu+SMTCK94IkGsGGnKPSQ0lr+qia0MuzHLiQyoMsM8G8RsH+usqNmlAeZLsVs4HRHAKhHNwF2fq4/j3zkVoW8DnFRDkqNk5sK9+ubJPPv0xhkf3pmfvj13yoQBCTcH/nd34HS0ukQuylOPyLf/Ev8KDsEAQd2sNIgftMvYJPN24r1fGOjcIH2zt/JKOQhllC0fw4rr50EVe3LmE92ILx+AKOHn8EXz35VZQ5uvc+Le4FGL2xjWinD+/yFawPr2NF68Co1zD99NN46vnnYZohWq3vo99/R/4m9AI0t2t4fbMAc3QN86Ml2LaDarWC+bOfxLHHvwjD3ft7DkYRlt9pYXu5r+RZdU0ob0fO1mC7Jja6Hl653hIqWF7EkxSwx+YrUuNnvurc/YOZleo338D1jR/j+s47WB6syYuh2DmCcvcIKoMZuInKZbDNogI+s3UUTlTQeKyBSkbLezcj0GFuD6WtWdtnEvgwKoZCDQOtiPVhiuZgL+2JL6Uj9QJKNQdeUceNMNpDb6Ps+pmig7NFB6dYeyZzShk18P1Niez4wRYC6VtS0C+v/ZEX9gs0B/3URjvWEWplJBpHhHePqeE2sFBcwEJSwUwrhrPZQbi6iqjbQ+hFCP0YYRAj8ll53kVSmUJSm1GApzolSdgJHXDmAMSkng0RUxGJdUfiPkbJQCIEQgIxUkRmjNAxEJUq8JmT4BnwCHp98vA5Gh1KsvZN/JiJfeZL3bEIVnWUXRtTM9OYnptBtV6D7hbgBQGGwyE8z7vpPXcry9XgclCUCyVINXsZjVXgh3kbVPbSu13ovZ70ZmcHRr8LIxiNcyByZao8h2K/qTHhTF9N5JuzOjbC/5eYicq7kPyBQACKZqaAw0R05pyw6ePp1N4VdhBwR7VCY6LPjovzk8e4XxBCMjfsCmKngtjKWwmRWZLRZAohMDGBjhMlokWCWpyrREDCON9Bogd01CejCbyuWT7RhHCEREQYwWAEgb1EE7J5Tt9m7RKCozjsIg7aiIIWkrCLKOggDnsCxES9nuuyK6I2uCeqMwFAFMXQyAAX88j6iOIeomhvy3Mh77dx30yjDIOAyOA+7zZGqvJ8NUWB9CSvK05GigJJCXg2iWoxKurIcZpmCYaRN8q7q/VznpG0Q/uzZSnfzR8Cxbj7KpH9jW98A7/wC78gdT3efvttPPXUU7h27Zoc/AsvvPB+9vvQDu0jaa90dwHQp+rl+wKA+JLd2fm25NnQWEgSg8fw5g9exqXmJQysAOZzx/HciY/jk0c+ecuq1rdrlOINlrrwWPdnaxv+9Su4rq2iSQWoEydx/Nln8cgjZ9DtvYxO+2V5iQaeh82tIl5vHoExXMGx4UtwbBuN6WksnH4eRx7/CvTS9J7tMGKwermNjSsdSTKnTS2WcexcQ2r9XNnu45XX2kJ9y41yzk8t1vDYQlkUzu7KogDB+o9xeem7eKf5NlbpAIUmip1FTHU+jpo3j6JRhmMV4VRKMBwX9nwRpZM11EjJqyo++XvZQTV9RLHWsOGbZXRSF1sDDemAnwS78tUVB5WKLYn8nmNgxQ8RkJKUDfZXDAOPllw8UnREsY3uXxDuwB9cRGu0gp3+JfS9DYzCoQI5rGQuoCdSNA6thEgvI9Ir0qeS9K0UalkMcK44J6Bn3p3FVDeFdmMNwbWr8Dd3MBzFaHuRANcwSBFX64hrNURzVUSVslQVT8lJ1xh5WEbau4TIZ0J4giANEYgU9K7aWKKnCKwEoWXBd8voxjYSX4PBa75GJzIegwxGhpQzrcQbREXW3lVwY+FRJ+9dJhvbkh/C0XWCkzbb5taB14qOfg5wpGbIxHbz/eWyca6W8FBCBXaGQ+j9vgAet9cSwGP5A5gIJQmcNBRWIyEXX6hTdqacxUKJWa0hXviEka9ccUymJQtGRWLEOR+rJKje1JEyB8oyAYc1ergVlfMQGwVp5PfLdMb1V8uzfIhMrU4lpKt8GwXOCFYIrjJ6EZfqJhLdViDHcEV6fK9qNW/O3Zy8W51jSonnzbYrarowucy+r8UYdUYEnSlYzsHy+/faCDJCAiICr7g/Bh8CPDJT+U/muGeNGYkUZflQCsBQsGCkAIz0Spwijvoqfyz2EDwgwEWTfDMBScUx+FLzjEyp5UppUMnuS1RO6IU393n+1+Q5UJEuRh0ensKctzIl3a2EG+Tnm+VE3ek6/CTFIE4wShKMst6TPkXAIqYcIMkUHLMALvicZO02ieZkkWbVss9YJyiFKIJ6Sar6bN0s8s42yHra3zyxt3zOh93uOBL0Uz/1U/hzf+7P4dd//ddFKvTVV1+V+kC/8iu/gq997Wv4m3/zb+JB2WEk6NA+7Pbj7hB/uKPoRJ+olfG5xsFFPd+PcSR/c/PrY/W3WvVjaF83cOHNV3ClcwXxlIvC+eP48qmv4Ez9YGnpO7FkFEn0J9zsI7h2DV53FVf0LYxKLtyzZ/HoU09hagrYaf4RQkYWvBHWtgz8uHUU+mgbZ/pvoWAbmK5UcPTYecw+/mVotaN7txEn2FrqY+ViC1FWv6c85eLEE1Mo1ByhvP3wWhOdTPWMD/XHF8oidDBXde/+4EYttK58E68tfwcXRlvw4xR2ewG17hnM+IsoGRWpQ2OZLsyCCXexjMqZKqqnajA4mn6btr+mDykK/SCBZ1bQTKmeltcF4ssrlfo0xbINs2QiKZjoH5BMy5yex4ouHiu5ImBAD5VqbawNtdV9EzuDZXT9LobRYJwioAAPwU4OejiC60qUsGypVrJL0lM2lRGfYmQgXFqCd+UqBheuwu8MBfD4VECLAgE6YZWtiLBcgFlIYZtM8I6RRAniIEEQpFJMchLsxKmGSNMRkspmmggsB32LUQMLRphCHw2QdJvCmSeHXiR3qXpmWyhWyihT1a1YgOlQWcyEblnQRZnr9p0knnNSDlm4lEp7rOfD3CuHwKa1jbS5gbi9jZRV4LMaIQnVyAL2HmKZ9tU8o0cSxWBleEamAugJla5IGVN0LaPswqy4MCouzFoRxtQMjPo0tEI5k8qdkM7Nnb28bkk2LQUWs3pCSdZHlJxOCZpIVSSdiqpiVWhuBbpblQiGMRGxmozqqNWmco+yMVdhP20vb/nnk5HLyXM5ud7928q3Mbme271Ged0ltv1UxN06SnmtpL3T+b7kgDav4zQGytk6Pwwj2vfKSHONJQpFkDXcJ6qhVAtFap1FPBnlkUgWQQal+m3JnfNSiKM7ikNpaTxCmmQtHvHFAC3pQ0uGkk/CQreWFL6lHtyd5cpzvCtI9T2NpEHe0/ndr6KgHPCwYZkFOIYLh5F4swjHLMO1SnCMEmxG6A0XFuvcZPvgxyGG0QijyMMoDjAIR+hK89GPIvTjVIBDxNxEKJqsZThSdNTWqWJoCw3MZjRT02BnACLvuRkWiyaTTPokhU/BGIKImGBCTfMzAoz9kg5cgyoQnAGTTKAgX0Zwos4TC/WmCoww0vwBZ7do0PD/OTWfCTd8ROlwBD4//vGPcfbsWRFH+O53v4snn3xSwNAv/uIvSlToQdkhCDq0D7P9pDfE728rAPTxWgmfb9xbEQS+uCgt3Wr9QEZmSUWo1z6PpVeu4u1rP8ZKfxX6yWnMPvoIvnb6a6i79fe5vRTh6gDehRai7R0Z+R9gE5dZ+PToIgrM/3nyPFK8LdGfKAiwtDHEjzpnEPseHuu+jqoZY65awbGF02g89hVo02duAj+bSz2sX+6IY02jktbx81OozhbwzkYfP7iyMwY/zO955lgNzx6vo+zcfXJxMtjGtQv/N15f+QGWwy7gu6jtPIGZ4Vk09CkU7IqqT1G0UDxRRvWRBkrHykIRuhMjtYp04lVSxaIY7VGAlg909CpQqCPWKFUdw0cKp2xBK5rSOwccW9kwJLfnqGvjmGthwSbwSeF5K0I93Gi/iu3hKtpeCz6Tdal4pFcR6mXY9hzqpVNoFBZEFbDEejsZ8KFIwR5qUxDAW1rG4NISvKtL8Nc24A8D+CNSZQLERoqgXkbYqCOanoJdSWBokeTdEPCMRsz9yfIyYKiaMImkrCM0TIS2i5FZEOATM08jCpB4Q8AbIB31pFikIcK6FFBIUS44qE3VUajVYVeqAnoIXHKnmE5tnrMjClNZm3zV5c5wHt3J/5aAh7k44Y1LCC++hujaBUQba0j6nd3ciTs01jYxWDSx7AjYMQgMZxdgzB+FVl0ASjNAkW3qoczFkKjUvojYJBVwv9EhpMNGymaWxaPy3AniwhAxASSTw31/DLZYh5CN0wcBrvcy/gWvXsj6P9k0CYc0RRnMXWpFj3F0HUXbluY6ChjlICmvCTWmOHJEPIrRo/McRugFofR0pkfMl5QYLgUyKJBiqmKovOcsCyXbQoGAThxqOtFZL/esAgOi/pU5vBwQoQPNnudPnOoJh1pdj+y6ZEVBGUTkaH7uPO8f6edyLVs/t8f1DfNIgjjsmdrebd8Q3AcKRARZHhfztwIBRnqaRT1TXwYEEv5j5FvijPyFG6IypmCTEpQY68Ix2jXukwkBkNs1dbcxWry/OPSdG58vzN+yMwEVKg0yQqlqa4lqoUTn1L7m+6xKgOXqilkeWzbAQeXEybpcSvnwzvdM7l1DR0HX4eoaCtk07wGaKMllynKRXHPeOxmgEuCmQJv0GZDjX5JGzXIV+XpJsy4ZaltFwxhPl1lX6SECQXfsNXCELOdHHzlyBJcvXxYQRCOX/dAO7dCA13tD/MG2osC9WL33AIhc8s3N3xeHl1YqP4qi+Tze+Pb38Pbaa+hEPRhPHMETj34Mnzv2OVHeer+5P947TYTbQ4kCxM1VNK1tLNkarNPnUZmbw7lzJ9HrfwOj4SpWt1r4YWsRHe8Izndfw6w2wMJUBcenF1B77EvA/FN7hgZjRn6u97B2uSM5JDTS3Y48Upc6P5e3B/idP1lCcxCMi3t+7NSU5PswEfRubdRdxVtv/xZeX38JfSr7DKqYbn0WR7yzqNgNOEUHpmOgdLyC+rkpFI9XVHL4HVq/3xfK28bGBvpeiK2+j1ZgIClOYViooM1EVNIVygaqtSJmSnyh5k6ahinbxLxtSlHdOdsUcYNSVqZAaBD+Gra238Z66xXsEPj4LQQxJaKp6jONuDCLo/Wncap2FkfKRw4shsf1EHi2NzYxvL4Gb3kVwfIKgvU1xFQqGks2h4iKDsK5BtKFRVhHXJgmiyUm0L0Iw6aOOHEQJ4aAHeZP0WkLdROeZsDX6Lgx18in0gXgr0ELOJLMgpp8iWtw2Uu+COBUDLjVGpxqHW69gcbsnLzYOCDHRgB0t/QoceCb24iuv4lo6RJ61y8hXL1xgPywBqNEEFOGXq1Cd6kaZgnNTDPZW9DsrJdmSx0XRnQ0pwBRbeAghFsDCo0PJdghXSantZDqkpXD2eNm5hSa3HEWKd2sl/ok2XqGfiTr6gtVJt5dbzYKfntmw7QcmLYGu7rrvCtRAdaAYt4QI18EIlSTyzXxqPynyKNh5uDl8FVRxzLQJmp6iVB7cxqjADFRVuOIBREBATgF37sqmjHW3VOWZADn/RidYIIq0zRgGrvROT5ncgCvnOf0XXu5Pnl+lkjCq1yufF3v1+hciwNsaDItqmbcuoAYBaDoNEthW0ZuWDfoALAhUd+s5ZaX+RUAum+bBIQOHfAsIpLDIoETHISRHEZS/XyEsQ8/9oTam+c0SlHa7PvyLz9XVE8Xh15HwTBQNi1ULUeeqyxaXiQblYpsqS/0wiAaIYjZvAxAaOPoVJhFXkPmTEYqWmVKFCyVXqJiWgIna7b0sSwnQVVJePBeyGSuUx1JyggulfGKSDUXqc7pguRjplQtJBBjXTBKXac+XM2DlXowUpXPJbRIKtaJoIkCbCpvi1RE1s4jRZER4Ul64p09l/gu4DXY5b3yflUCMg+L3TEI+uQnPynRn/Pnz+Pnfu7n8Hf+zt/Ba6+9JrLZ/OzQDu3Pur3ZH+Hr21154D5fLeGL91AGmyNL3d5raDW/Jw8gjjxNT38BfruEP/mj38PFnXcQsuj2c6fwhce/ivPT59/f9sIYHoHJcg9Rq41w6RqSZAcrVgc7M1Nwjh3DzNwcjh830Wz+Fvr9Nv54LcVb/tN4tHMFTwev4Wi9ilP1Eyid/jRw/BOqPsZ+8HOpg9DfB36OlXCtNcIf/vAGtrL6Poz8fPxUA88cq4vwwd2YFwxw/cZ3cenGd3GjfUVGcs3eDI60PouF+DTKdk1ybZyGi/rT06g91pAClndqudgBKW9rG1vY7vsCfnzWcSjNYcty0UGKSlHHzDSpVyqCQdU25vHM2RbmHRMzljUexcvNDzpYbr+DVu8ddAbM79lGP+gh5oijZsI3ppAWj+BY/VmcqT+C49XjYyAsYMfvod/porfVxPDaGjzm9KxvAc0daP5wnGMgbh6dRtdFulCDtjAD/UgRVlWDFTgIBgX0dzR4HmtgalKQkY2AjkKxfhrBp2MSDaFFlI8NJV/HNjQUVU4+bFNjkXgZJTfdAuxiCYVKddwac/MolUl3K8sg3LsCHjrYIQtlDpEOOkKfSzptJIOetHQ4EDnoZDhA3Okg6XSQHlBvRXdtWEePwTr1KMwTj8A89gi0yuyee/d+WpqNwAYpwfHuCO3B373FOiam+bc5CBkewOUnUMkjCQ/CCKLo3E7up8qJ2I1o5PvN5t2Em7Ss5s67Xw9+OvkNRVlS0RZO59uUzKdsNNyLY3hhhJCFRyfAURxNAiWVAM4joHPOAQtX01AyDWll00SR04YaNbd4HJRADkP4eQtCjKIQIWmgISmBCrxFWbQql3TOAYJBZ1qOR2Xo5b2dLTcnIlqTxiiLxsicZWeNxT4taKZJvXhVk0iUBtV2uK82mQWknFLiPElgCK1TRfryKCsphDmN8CA6ISaupyiSZdOT93MeqRqrHmqQ+4LXiIMh94JWxWdZSGBEwYtsXwqmKzXI7mbwRNQtmWsVDzJ64UQfDxBHA4mCjSM6meqkiuxQzzGLcElxYZULpeiJXrZeFWEXmJiSUrurzvlulrxbxh3piu9lmjbOs8pzuHJQJJE97h9rhWU1w7ifk3lrahUGTp/+f+Fhsjumw125ckVGNZ955hkMBgMBQd///vfx6KOPijLcyZMn8aDskA53aB82e6s/wv/Yomub4tlKEV+drt4zAMSilFvb34Dvrcu86x7BzMxXsXZhCT96+Y+w1F0C6kVMPfsYvvboz2OmMHPX2+LoaLjah3+5jbg/QrB0A0lvFaHVwVULCI6fgFGt4MSJY6hUr6PXfQ1XN7v4VnsB5sjFs90f42TRwKONOirHngXOfIFD+uP1x1GCTYn8tMc5P07Rkjo/jcUSruwM8fL1lqi+0Qh4mO/zwsn6HYsd8BG32V/F0tpLuLH+I2y0ryAlpz3R4bSPYLHzLOZwAkW7Ks5Acb6IqefnUD5Vu6sRVCqKUexgaWUVG80+dgY+ul4kSlltt4Et3YJTtTEzXUC14qBgGjjh2jhddHC64EhuT24cyWyNWtgeXEdrcBn9wXUMvWWEYWuP88u8j8CYgmYfxWLjOZytP4JjlWMwmayeBJIb1Nq+iua1dfQvbguoNTodGP3+XjlgJuVS1XeqAH22AGOhCP1IGajUEPYL8FoWOs0Yw34CL0zhU4ku4mi6orUECSlAA/hBT8COjBqbGgqWjqJjosj8nVIJhWoVxWoNpVpdWmVqCqVq7c6S3lkhvb2C6MYFRCxKu7mGqLmDZOAj8e+guCkpcY0azIWjsE6chfXIM9CPPQbNvLd1fPbfkwQfrSgW+iOL1nbZcz6MJYJy70o/3r4RGHAknBQa/YAClvmov6LUKNCQg4c8QqTWQaqMAgFCkzF1FIU+YwhlhsDgVs/FSQConOcswpA5sEHmQKuIQ6aAlznQAhay3AxxpCen88KPt2EifCH7wO1QsENtjybiFbkGBUgPUpSju3HYCahI8yNNli2n/DFHKgdcOfB4r0Yj0JpsXM/d0AffrzGylQOiSXCUT0/miOXRq5xemNMqD5qm7c8zU1E0KtY9/AIJuTHqniSjDBQpYCS9gBA1r/K4mLvGGlmFcdFjlc/ljhUKVVHVSMDLLlDbC9qieHDXRXLH6oxSj8zA6VN/Cx+03becIP4gv/e97wkAqtffX37BvbBDEHRoHyZ7Z+DhdzfbQhF4plLEz9wjAMQHYrv9p+h0qLLGQoA2GlOfRsF6DG//6Xfx6oUfoOntQD/awCPP/hS+dOpLktdxtxa1faG+xR0P4foGovUl6FYbbX2EG1PT0I4swHIcnD27gDj5AXqdFXx/LcJr/hk80l3DU+E1PDE7hbn6HLTH/xwwdWYv+LnWxdqVzh7ws/hoHaX5At5c6+LHN9roZZQ4Sug+d7yBF082REzhdm0YDHBj6w3cWH8FSztvwRtuZxxtQBuVsdA9h7nR46jq07BYyE7XUDpRwczzc3CP3HmdAz4bWdfn0vVlXF/dRGsYyDFQ82voVLBt15BWigJ8Gg1XIlpniy6eLLs4VXDEOeOjuON3cKO3hM3uRTT7l6Smkpl0oad7ZbHlnWNU4brHUS6dwXTlURyrnMC0Oy37TrrkoH8F22vXsXN5BcHbbWg3tmEM+tnfa1JjybR1WPUirKPTsI5MIZ5pYORWMOylGLYCdNs+Rv1IpK3DKFZFA5nLITrBBGkEQQN4YRcFW0elYKFWtFEtuiJ5XpuZQ212FqV6I4vsVGCwdsrdWBQgbV5DdPlVhBdfR7C8jKg9PADsZHVtDAuaW4BeKkMvFqEzilQsQS9VoBVLMBozMGaOQJ9ZhObenmIjrxFzJIIJx5jOOel+OTggINgPEPjdPPqSAx06+bdjBBVMwmYOx63uSuWWH7A8W8z7i846ufsqX0Dbw+PPwQrBwqF9dCzNI1ATuVWTwhb8LFc5zG1SMGJ/n+fW8fu3EssYqyM+QMvFMvZHpiaX5WIX6vm4Fyzm5ygXA5k8jlzg46B17m+TuXCT4C2Xx9/f5+vPgWAO7Lj+/HzfjeXXZxIE58dxEGhMZV9HiKKBKBQqcDRUBZezIsg5qFIAyx33FM74oHOAHqgwAhNH33rrLZw+fRoftB2CoEP7sNgbpMBtdeSR8VS5gK/N1O7Jg2E0Wsb29jeU8huAYukMZqa/gP7OAC9/5+u4sPmWyAqbj87hM899Dc/OPnv3D04Wk7zYQrA2QNLrIli6BsRbSM0B1qtl7MzNiTPJPIwTJ5jn8sdY2WriG60GhsEMnm+/jicLAc5NN2AvPgc88lUgG00n+Nm41hXBgyjYC36MKRuvLncEALFYmxynbYjYAUUPivbtUdG6g01cXf4Brmz+GOudq2OaE59wtlfF4vAx1IePopLOwCLXmi8F20D5VBUzL87DnrozVTkBLZ0u3rh0HZdvrGKrO0QviMRJHlpFtK0K9KkGGo0ipqjQJyIGFp4sF0TFjYmmXMfGcAMXdl7DSutHiLwVWElb6sTkxmiOy5pP7hGUSycxVXoEs9XHUHGm9ihiBcEmOizeuryM9o02gotdmGtbMDttoWRomgOTCfozU0jmp+HXyug6Dnp+jH5nBH9EtbMUmtRS1JQTn+8D67oI9z2GF5Pu0UexYAjgqZdcAT312TnU5xdQmZ5FeWoKdqF4978B1ooZtZEOthEvv43w0psIrl9DuEOp8vzckDtThFZuwFw8DvPIcZgLJ2FML0CvVuReZX7O3RopYpt+hM0gxEYQoRlGdwRe3ssIXCqmLsVqWbSWBWvzxmjgWGnqQ+ZgvB+TiKE4ZWk2gv3hy406tLu3XDo+B1uToGt/lCsHApNgYD8g2D+fA4sxLTFJbltV8EFZfhzvNwI3CexyUMQ+B0qT53sSvOXT72U5ILIngN1+IDl5LJNKkWNg7bH5iEPW1lJSIz/9s1/EB233VRiBdYFIifswgKBDO7QPg/2wM8C3sjpAdHB/9h4AIEqaNlvfRa/7uswbZlFyf4ruGVx/41X86Ut/iPXBOjQ6oc+cx8+c//OS8H7XNX9u9OCzFs/IR3jjBuLODehOH0HZwPLiKYzKZaGaHD06h3LlMlo77+CHa0O85J/E3CDEp4c/xDMzFcyXp6E9/jVg/snxulnglIVOc8EDp2Rh8ZEaRkUDf7zSwZUL/TG1a6bi4PnjdZxbqMC8DcGDfucG3rn6v3B56zVsD9bHCRLspsJZzAZPoTY4jUJUh6Exh4BUbA1uw0X18QZq5xsw3DtzlLuDEX5y8TreurqElZ0ORpFSuvJ0C16hAWtmBvXZCh6vuai6Sr3tTMHBo0VH8gX44trxdvDy9o+wvPMDAT5m2ofOGpaahopVRsWdQp2At/IY6uWzoubG+iW5xTGpM+vodzfQ2d5Aa2sbg60A8VIX1sYmzFYTBT7eWX2+UEM4NY3uXBVbpSoGowjRIAbaA2iUy554VxuJDgsGWFkoRoJI9LRG0OwIbkFHpeigVqzCsafglqsCempz86jOzqmirndizDPw2iJLzpb2txFvrCDaXEO8s42oO5KWeBMvdNOFNrUI+8w5WI8/C+vUWRiNxvv6vVGyllQ0UtO2ghCbQYQNP0T/XUa08+gM8xeYryV1NqQ8j8qtEOEA0sMkeVl9XyIwhgI9Odhhovd+kMD8EEptp5qGkCsZU54UaKDk990eL6W0Q99TzfPH05HH3kcckSaqKEiUGRcZbcuCYVgwLM5b+5bzHsvV9xIkUazyW1hgdjRC4I/G06E3km1MZitRwtykg2dTAMGWuk3sLYu9A8Pe/cyUZapxP+QcTIBEkcKmgxyFUjuKxyrT0qvGabVdFn81Rd2R08Z43Y4c292eX4m8ZMfPlvAeF/oco642LNeV38lHFfzxvOWRBubv3Y7lEuaTtL67jXpMRqb295OUunwfJ9t+AMDBJ1W/R0XTZBvRLgCYjIAR4OXAY1KSffK8CJCTf3xW6Cqann13kvZHifuYxZI1Db4fwde8rBqyeqYohfxdMQyGn9OYLRE5Qfac57Q53qKShYgoIMJzIKdZhZYVm20izJxNq0uRLRdRvnz9Ilmo+v3XX1cRsIdp4OaOI0Ff//rX8Wu/9mv4h//wH+LFF1+86UZ/kBGZw0jQoX2Qxp/Ot1t9/Gmnf89ksLnOweAidpr/OwtHA5XqU5hqfFboYy9/53/itSsvwYtG0BdqePJjn8NnT/y0FLC8G4t2RvDeaSHuB4i2thCuXYVuNgE9ROvEcaxVKkizJNgTJ4pI01ewvrWKb+wUsRkdw5PtK3jB2MGTM1NwG8eAJ35BqV8B6GyNcOOtJoYdfxz5WXi0jh0zwY9utLHZ3U3jPD1Tkpyf41OF9zx/jPDcuPZNvLb0LSz1bky8cDTM6ScwFz2LSu8kbK8IPfNjBfjUbJRO10TowJpy7+g6Ue3qhxdv4OULV7GxtS3J06RB0VGNilXYBALzDRybLuFk0R3LVs9QPSyjRrT8Fi4138K17e8jGF2BFfdk3Xwh1t0GZiuPYLH+HCrlRwT0MPk0ijoSBQyCFkaDLvqtvkRtRp0U/sAEax+a7RasrS1YOzvQY0MSnjXTgF8pojc/jWW3it4wEbUrO6GTnkJn8jNM2KkOi1EeLYamJxAxIjeFWQBc24BrcgSW1DkTpUYD5foUSo0p1OYW4BSL733i+OIcNYFhMwM7TaS9bUSbq4ibO4h7HqKeh7jvIR4Ge7P8mZRrudCKdZjHT8N+7GlYZ8/DnJ29Ze0f5owwgqNUyahOFo8FASblhPOe4PVWggO0hkVVPqXIR2W+PEqzX6jijmTmfQ9evwev31dt0BvPR8G7FxPNTdcNVQtJz4CR0HDo2CvKj3LElPKZOFdMwM9AzkfNVH2b3WN+3+sj9TAHXhkwsjjPkfGJEXiWAGDNKvaq+VITTZzF9zCCOFKKLbcw0buwXIIwS1FGxfnMKFWkbJHaFIWIJZLCkfdQgJ3i+ObJW4oYKeuwdpvJ+Qw8mrZavyy3uEwBWQGQdPQzYMzi1gJcOdIfBYgDqvGpbaloBNdlq204GThl79hyTFz33YA9uWfJCGCuIZ1u9tKU833zBVPPdxltYK6Z9LvLxp/RuG62IJGIMvskYJ81f2L+ACdfNmdo40LGnJZtcF7nLisBDZ5LUW8jAFGyedLfrrdNhUIKc0QJG4VmqIKopkXVMFuRgCtosDiYYJhSC0ka5yX6f/NzSu5dAUOxrD/MtxGHCLks70UNVLEBeCwWI0estaTv9pZhwZb7yIRhsxmo/9TxOy4d8VDR4SZ5hJMnOEd/D5IPegiCDu2DMlKF/mC7g9f7SnWF4Oen6reXV3ArYx7H9vY3MRxelXnLbmBm+ssoFI5ia/k6vvOt38KN1pI8fEvnTuLLL/4CTtfuLiKb+JGAn3BjiGQwQHDjKhCsQ7NGiKcbWDl6FL3s0VCvMwq1Cm90Ca+t9vF9/yhKIwcf67+B5+o2jpdL0E5+Cjj1OcnF8AYhrr++g86mAnGGpWPmdBXrZoqfrHTQ93fzfc4fqeL5Ew1Mld4bxEXDHVx85//CqyvfRzMcqIWahnnnLI5oP4VS9wSMjg4jo9sJ8KnakusjwGe2eEdCByzm+aOlHXz7rSui8BaGuw4qc0rsuTmcOLWI83M1nCw4AnxyUYMc9GwNt7DWX8Za+8cIvSXYcQsa87pY1NatY776JI5PfwKuPYMo7kjhW7bAb2PUBbyehVHXkj4OlJqQPhgIxc3sdGG2euD7hs5ZoumISw6a09O44VbRDXWYAVAk8EljWHGKUmLCpQyvo0EvpDBYyLQIWCYdSYgj5pTKKJQrcMtluOWKgB7Ov2fRUTp//Q2gtwb0N5F21xCvLSFs9hTI6XuI+j6SkZI5F2PuDhGX5Uqvlaow547AWDgOc34R5swMzLk5pWS1z5iPsx6EWPUCrPkhdsII7ZDxqzsXFGB+DAEOQSsBz5xjYdrUkAhQUQAlGA2VsxvuB2u3uKcmJeCFOqKcytsBIgSd+SjxvXDs9+wWI1i5001nldEJOvqOKw5t7rhKNEUcbeVs5063OOJZlIUO3zjXjo6xqcAZ1y/bcF2hRUqfzUsBW45oU9ggO585iNg7Pwky/N1lt3P+MpCoAAXV0IxxFEuOTQq80tEltSqS68N1c9m9MEaWeD4JPuQaMpcu8BAGqjDpXalqZ3rljCBoibbbZ9O3vO2zbaWaKvgibu3E9tXfch3Z+hMNekLnXdudzrdxu7sqK1PPYA7ISOTNykC6RBTV9RFQkgmrpGEGeuJkfG0m6ZPjqER2SFoG+nebnkX3smufTee/wzxyyFUxQsfG+1em8/s55HLS7DIgk0Vgtcl1c5qKb3u2nbd8m7vUzzSj7aWyTp59KnimSDR1H/DZLdsZUwDZG9BZuFYAvooa8W/H1ywDegJ6eY5tXdaXaDEiUAUvQpSyCHco21L1kXQVWSVoJRjOwLbBKK/8JnUFMiXqI8WeMtCY1Wq2DNlOKpctksLYISXKWTA6O2e0I488jo80He6b3/zm+9m3Qzu0h944ekwBhCsjX0ZhfnamiqcqtzEqfgvjS7Lb+8lY9poPo1r9Y6jXPi4vp9f+9H/jT175AwzCAbSyizOf+CS+/NjPokDn8U63xUTulT68S22pdB8xubx1HbrTg1Yy0T//NG7QaaMsqqFjfj6Eaf4Jrq008d1OEevJOTzSXcfH07fxzEIDpfIUcO7PA42Tsu6NKx0sv92Soqd8ONeOlrDpAL+72hzn+7DGz7PHmO9Tvy2xg9FgC2+89d/x+uofYxgrB5o1Ds6WP4tp70Xo6xrMYSgqZ5oWi/Ja+XgF1UfrsOdL0O5QSnulPcL/fOsGXr94GUGPuVjq5WM6FhoLC3jqsZN45ugcjru2UJzk+gVdbPZW8PpwE5ujTWwPN4BwE3a8I8BHT2MUSHWzq5gtn8aJmU/DsWrw/RX0u6+gHfURejr6TQeDHQder44k0YDEgD7wYbTacDodWIOWABolxQXoJQOBbWOrVMdyoYZOaqOQ6Cj1NUxl8raV1EDFLsBtaLBqgFEwUGzUUajU4JZKAnTyxhfkbZuAnnWgvSQt2byKcLOJsDUUwYKok4kWSESHQIf1cupAqQC90oAxvwhjeh7m9JRQ2oypKREvuFWErhfFWPEDrHohVv1QKGsHAR5K7TLJn8Vk86R/pUimFMJYe0RqEWU9KWqs5UGgM2g10V/eQbO5g+V26545xXtNg1MsZSCzDLeUn/8y7EJBRtAnAaeMU+aUGXGs6LipJvPZdL5cnLfMmVK1ZujA6eNow63oXkmSyu9W0W0IxJR4xvultkjeAutgeTG8Pvcz3KVO2ZYAo0JFv+1tqePMClFmdX6UUpY+Bjx0Ig/ajzy6oABFNjKfU2jl+ajofAR8UehL9IXARcBYGGRRZ+VUmlIg0xSarSH/TBipAT0xWKAIqReraANXnmtYF9U5lmOgZHPujGcj/eKQixwxwSUBCltOo1JUSFUHiI45gQW905yvlB0n/4nznW9HAYpJh1zdJ0p5br+NQYQ4yLsRR7knpXipooiR+ji+57h+6bMcn/x3w8PgMvl3h/cNa+aw6aqn05+Dq90vqRI1GosxT4BEub8yYLgfvI3XmbXESHannQSpkSLR1TJZzyRi3AdEeVAyPQlCJ4Gm4MvdY5B17r/FbyM4m0cH1bNBxZgIHkW2nRQ9PwPX78N0Ro+yyKcAJTsbmOTvdxwh9N81Ws3f3YcBBN2J3XEk6MNkh5GgQ3vQxtyB39poSe4Ana2/MFfHI8U7zIWYMFKdtrb+17joqZK9/hJsewbDXhff+l//Jy4tvymjR/bxWXzpc7+Mx6YevyvHRAqevtVE1PERt1sIly9D07agGRG0s2exPDuDVl9R+4rFFNMzS+h1lvCDbeDt5ARKno0XRu/g+WKI0ywaufAk8OjPyij+qBfg6qvb6LeUGIFTt9Gqmnij2R+Dn+myjY+dnMJj8+Xbyvdp91bxk7f+K95ee0lC87JfhTmcLf0s6ttnoW35MMJknGdEaevauSk4R8vQ70BJjhZEMb57o4VvvrOCjZUlmJ6iqpkma/g08MK50/jso6dQd2yRrWY+1mp/FZvDTWyNtuCFIxjpSEQN7Lgtim7cg5JVRNEqoVFcxEL9BRScGfjBNoaDiyJzGgwN9Hcc9LYdjLplxImNdBBC32nC6uyg4DVhsiSfDTAlSKSVE6BdKGPHKaFZqCAwiyhCRzGG1PMw4wQ1mKi5DgpVA3olRnG+gemjJ9BYPCoqbXfl2EaBivR0VwT0pDvXEG62EGz3Ee70EXVGKrJDKXS7BNhlJVpw9JREdAh0zKkM7Lg3/2Z4bKMkFbloKqgxqtOOVHSH+TrDA1gGlFym2MSiY6PBmktxAJfy5xzh52i/OJa7oGHXaYvFueVL3R8OJNpzEI2JI/qialeuSETDFJoPa3+o+/fA1+dBjmUeHSkUBACliQZ/FEnU1O+OMNrpwW8PEHqkHcXiYMroszj07DUVzbAZ0TCgk3piMZfFkBpWkq/j0HEhFTIb0RXVPEX/if0Q4WCEcOAhGAaIBj6CUYhoxPwVOlFUAFRRnd2dJrVSV+u2sm0L5cWUAQFulyCGjjijvdweKVNsft9X2xqFCIYhUj+GFsXQeVziB2YgTWhEjAZmuTn5NrhuNteCUXBgFiyYRdLGSOPi+VAUOPHJsyI/jCTIuSPFyed+ZPSmSdpTNpo+/tssz0JRPtkUGJMmGti3+TuRBHUFcOJIgb5EIhy7AQwtW79h7t3Wnf4WVXRFh0a5QOl1aJYCvDc52IKfMz3zjAqWVTkd566I86yn4wiN5pjy/NSk6Xum5XodePgT25DIF6+Fcs5VHyDyGWnh/R2OG1kNco8zysD6RbyXHNLqVMQizz+bzPvKewGqB0QSJceNOTrZfJ7jlkdW2fN3LDRERuuynr9vh4MQEhFVkaQcMArQ2BeRvNX0JBghsBC64P6IJO/1jIaYg0kFIFVU6k6inpMm1M0s78zOenlW5flGB0Rbo4ADi+mdF/il5LnryjbH1FzdwKOf+DQ+aLuvdDjad77zHfzGb/yGCCT81//6X3H06FH8H//H/yFiCZ/97GfxoOwQBB3agzTSbn57sy05B3S+/uJcHYuuffdFT7uvotn6PtIkkqKnjanPoFp5Rh741y+/gT/61n9Dd9gCTAPHXngOP/v8L6Fs3znlji8+ih4E1zpIWARw+TqS7lWhvpn1Grznn8OVDnNP+MCNMT3dgam9g9e2PLwcLCCMpvH4cBU/pa3h8UYVJaegwM/CUzJ6vHapjdWLbdkOX/T9hoU3hkNk+ASzFQefOD2FR+bK7/nCJ8C4uvETvHnl61jdflNFGwigios4Xfh5uKuLMNosupmqmj4NR6hu5bN16NU7l+q83Brg65e38fK1TaCzAdfrih9RKVp4/NRRfOmZx3F8qiFg50bvBlb6KwKAyMvW0ghW0oEVt+EkHZQZcbBKKGWt4s6hVHoEllkXsDscXUEYdBEMTPR2bHQ2XIz6VYSBDa3ZhdveRGG0BScZQFK89BRBnGIEA91iBe1iGR2nhMgtw4UBJ0phMicgjuAmGqqagZpD4KMjKUcozU9j+vhxTB09Drd0m/cNR3C9Tpa/k4kWZOIFSWcTUVMBnrA5QNgeqiiPWxs30tisxUVYCwsw5+dvEi3g64b5Ogrk7AKcTgZ2mKtzK+P4J6lqi7aJRuih0mtD67Qx6pE62H3f+S6S91RvoDw1jWKtDsOsIUlsASv+gCDCQyzOdaRyh43cEc8iJtm8TMvIuXBioDG6MPQQ9oYIeiN4PR/hMEBKahQFED6AOi4HmoATNe6dj37f/GvSbjGX1c7hqHiWCyEJ4BLFUGvUmYuWUbJY1DNNNTBzQuV4397vViVxEzhlkQk5x/n+qwhFHuVRTRX7zb0cyR2aTAAXWhFDqvk1U6BMXUs9KyyqImnj65rlH7HQMyPmkfSKhinFihn1yCIwDBaQDiZFs7K8LY1URwJpcYqZkE8wqcuAi0WAJ4en6KmpznOk8GxMMEtnVih8QBTSOc+Oc0z5Uocm8vcErqYmoNEgmBVAu7c3s56nP8nAW+jH0gIvGk/LZ9yJbFvcjqzfytaR9eNldrZ+6Q3VczkB23tQktXxEeQQUBKE7AonTNrkdu9FDgqPL6BoTMDcKEbOuE0FOvccWw44bxn1jCTKJtTSAyKSd2K5UAojkqRsitBHFv1UgyMKVAmt1XFu2h7P31h0gs+pA/Y7nQSUYzDHPLBMdS+XCM/orLIt2/lQix/cVzrcf//v/x1/9a/+VfzKr/wKXnnlFVHFoHFj//gf/2P83u/93t3v+aEd2ofUWAT169sdSaJmgvT/Y76xp6jlnRgLXaroz6rMFwrHMTPzFVhWVR523/vu7+C1N74vCjFmvYzPfOEv4tljL9519Gf0xjbiXoi41US4ehGatg3dSWE//QzWZqaxtrkp37WsHur167jaauJPB1W0k5M4OhziE/GreLrmYNqpQ5t9HHjkK+LwDto+rr66hWFXUdTCooELeoR2X+UCzVddfOLMFM7MvHvdHUZ5lpoXcXn5u7i2+ROEwx152fJvTpRP4mTh54HlOehXPGiJJy/X0tESGs/MoHCiekd0N+aRXOl7+P5yCy/faGGz3Udp0ERh1JYcpcWpIl44ewKfPP8ohvoQF1pv4ltvXhEqIvfJSIdw4jbK2hBTBql9jPRMoWgeE544I3iWSXEMR4rR9XtvIvRDyesZdix0NurwBmUEgQNtGKPQXEO1uwwHI5hFC1FRxzA00XGL2CmUMSzXELtlWFECK4hQCyOY/RAlLUERBspGAaWyAb2YIixEKB5pYPrYCWm3FC6gYhXP8QTAGQMev6tGcYc+4r6vhAuYz5MJGEglVUZ63HngSE3kqK3jx2EdOw772FGhs+UvVgKd7aEvuTrbQSR9iyD8PcbdKoYhktG5dHQFKexBF2a7idHyNnrbW/Cj8MDq6Cqhncnlxr78gFw8QI1WclooHxbrXZBiUkQcmxi2RugutbC2vYW4fx3JcIiUo7u3ITl7p2ZoCRwjhmUlcAoGnIoDq0AVNOWsyKA9owukqUlkgVGszDlkVEuc1oxeFTNPkX+jQEVuOVOKvW2bsLKcAOn//+z9Z6wsWXodiK7wEenz+HO9qVvmlq92Ve0tjTgjkuKTZiRBBB74hMFAEmRAAdIPSaQEiYAEPAgaQJQAQoKGEKUnQ47UM002yWZ3k00121ZXl7/eH58+M3zEw/p2RJ4855q6t7qqurv6fhf77sg850RERkRG7LXX+tZnqGRqg7k8ZRHQWeVPpuYguG7VUpW/Idub6QusIYPjgkHhzL4wOjLI5iCShhtQ4J45/0UlVg7mZN0xcyIxBZnScyAasYZLiizmcVCgSclE+belCkwgVSGVUpJYjXkQBqWYlMkVTU+hF3kY/JvyWLHPch1JQlt4HWmm+t0Dsfe8FYf0JoTIvTD1bE8zKIMqfjkp1ptkqnE7Iqwj+yKgyFKW7uIAWDAfUpWW4CO7eVlOULFzwgKVbJCSyqEwSJF8OmN3WV6z5++IxK2wHOPgvWBJZbl4TcQlQL1My1Eobe+6StMI7vsbXfczgGKXQSuv44Ktuscg6CNbaRFM2gRdCnix32X11Inj94msZxwpgMflKEinpRvuJmY/g2zH4v2EOTdqmYc0TXy5hpMCzCl2sGAJ+T2eASjctylQJXCdLpegVZnTGKY9fS2nLMoRTghcmXM4mYLWXfC6d4KFgF4AHY9PCSJttazep9GFC7tSsLvFfYD7yuPjj1LEsp3h9PixyfdYgJmGZ378KH6Y4p6ZoKeffhp/82/+Tfz8z/+81At54YUXcOLECTz//PP4yZ/8SamU/k7FfSbofrzdwa/H/+iNpDFY4PKnFpuSV/BmYjh8Gds7X5qyP3NzH0G9/pjcCLe31/D53/11bO8QHGlYePAB/NRH/wJahdvaPdteXxogvNiX3B9hf0YXoFuhzM7juWdxdnsbk4mqSF2vr6Ofr+FP+h428znUQgfvCy/iPV6Aw1UPRmUOOPUZYP6k3Ayvn+1h4+JAHmKJBtyoAFc5E898DMfARx9cxEPLt3fK40zpte55nLv2FVzceAFRUcyUUddtPNR+BEvuj2F8oQqtE0i+D2/+jUM1tJ9ahL1auyuTA56/Tpzi3MjHN9b6eHltgE4/IBKF53dR8XuYr5g43qrgiSMrOHrsMNbSNby686rYWPPzke2p5H0smjkapoWG3YBj2OLeRibENKpShwei5afkQ4M/sDHumxjt6PCHJpLEQxI7QGzB666jNr6OStyHUXXhZxr6UYLtah3DehOxV4WZZLCjFHaaC9ipaCbqpoO6SZtdHamTILETaDUD9ZUltJZWMHfwkEg6bgrWS+pdBrqXlJRtvC2jWnGDmkQCcAh4xKWNjfWCWGncpFmBOzUtgFWBMb+omJ6DB6UZxX2XNtM0KbhemBSw3Y7VITPQLOritOi2xkK1aQQvCuGEPvLARziZIKJMbUypmrKfnw3Ofnr1NkynCcOsAhrrPjlIE206kCplORxccSpdBnhFXoQAPcpzyMSEIbIgQD7xkRWTegwOYl0zUUDFSNWglsndBeiWwTcHbyqZpAANKpF4SkbwPsHEYwKQqgWnwnwgDV41g+1m0E3m3sXQ0glyf4QsoAuWgSw1JB8wl8E4/fws5LR4F493NhM5e5nH1NUyB9U5c9R2B+55qvOyLBKeOaBlEai4QDVFvy/oEsi2+0Z54jj4NdW1LgPooi+tjXWCD7oMskSwDx1jaJoP3UygmfzZG35dZbAu15pZXH/MIzMd5IaLPDfk8xCw5AlBEI9/aemrZu3VIL0Af5R48f2iJ/Mkx0ROmK7OE48PzxvXx8EpwRavh4mPeET5YCgSxUQGr7MHIydBD9MxCtmeCctzROapuw4021YytYJhyeNEmD+5zmidPfGRyr2Xk0CzwIifTwG0cjtita4pFo0gjsCKy+V7e5JRyrSVnIBLradc5+5rBfpmX0s5zGKd+4GcAnPC2U3PYbl+rjudXadmIDNdZKaNjPdIw0KmW8g0ExmvXTJsBYiSVnx3CO52gZ3K9VKmbvwryvVmTmzRuM40J7ArwFcJygqjgbsNOXq8J8Sx5G6aPL7SeOC5bhMp90IA8l2v9kcyNF3D+37q+LubCXr99dfx0Y9+9Kb3ucFeTxV0vB/3490QtNsl+/Pq2J9aYH+0XZcZ03sNDo53dr6E4fCVm9gfDta+9d0v4Wt//DlxXNFtC8985Cfw3COfEHeYew3aXfuv7CDth0h2OkjWzkLTd4T98Z56Gp0DB3DxyhWkKan1DWTeNXxxYOJatgwzqeFJfwsfNc/h+EIFttEA6Px2+Flk0LF5oY/rZ7pqNpoOaCZw3mBSr7JNfepIC8+emINzC5aMErIb/Us4d+WPcGHjOwjGm1PgU9UtPNA8gWNLHwD8R9E7E2LSC6DnHETpaBxuYO6ZRWV08AbHn8YVl/0I58cBnl/v4/LWGL1eKDICMw7QDPpYzCc42HBw9OACluaaqCxVcCO/gW9d/YYkKZvZEPWsgxUrw1ylhrrZQpZOkGY+tLSPKNNhGnUYuiOykWEnw7hjYNzzEE4Uq5CmFpB7QG6hEmyj1b+Mqk8WzoZv6diKdPQyE71mG7FTEdBTi3PU4gQN00XDclDzbOR2LoDHaNlwFhuozLdRbbVEssWE+lsej2gMbL2uGo0L8kwYnXhnjIS5J2QGQw5E7GKgWQfMRaDlAfNKqmO052DMMY+H/ZxYUxv1upx3MjssIrq23cd1OrNFiZIizQRz5toEOshQTyJp1ciHHfhIfAVyCHYovSDMuRnq7IZFhzEBPA1AayAKLbk+6GyYTXaQ+b5ia2KVD1QOpO4mOPizjVSaW4lRcWPUWoDXIO7Lodu5AipaAo2Z0CVwkEFZMZiTZQIDKURF4VchESPQGAOxz9GwDNyz2ETmm8j6JuLYQsjXkYssvbu6KpKNfc9p5rvgRicgsRPVm6kCKbYG3bVU3odcTswpilQeWJGP96ZDtFMKRMu1xmNF9ML1EqAnbAX4JNKgdXw43LuKGfjxtlfY8VygwZw27m+t2GcCUTUQF2DKGXyCPjlGYXGshkC8BSS+ei+c+T5YtlrvPMEdDULayK1DyHNLAG+W6FKgmMWKBdyVzFpp9ywsmwKiCuDtYgIlJSQAVi5vAr7pnE2ns4CSy2CmJwgjGBvd0m5ao6TKsaE5HjRKnhwbuuNMJYMiLSRlx3w7P1Dr9Llev8hBYxTnjqufuXSEyNoHnBQJQjCnvofaDLi7m8dsyeTNAjKCSQKwlCBMALRF7dzU1IEH18xi6GkIIwmkmUhg8bvxRtulC6dTQW57yCxXNW7DdJAaltoHIesUYNXzDIYmEEoKYOtZIjJqvViWS4r7RhdB3UQmzRIQmXP/dQu5acmzV8r08P6h5nQUKJU7TQZTS2BkMYwsgpnxc0WSS2ogEUknmbqcwFQr1s99JYjUuW5DLRPkiYthNmWw5JooWCqLgJ9MF0ExEjlmss08VgC9tCP/IYt7BkErKys4d+4cjh07tuf9r3zlK8II3Y/78W4I5v38t82ezGxz5vrTCw08+SYd4KKog83N30YUbcsdpd16Fq3W++TB5odjfO73fh3XLr4mv1tfWsZP/vjPY7V18M0XPRXntxDxFcp5LkEzA1iL83A/+jGc6+xg+9IlJMkAcX4JZ/UYZ0ctIKvgsB/hx7TX8EjbhqvXgPkHgFOfRu620Fkb49qrXYRMcmaRUuS4YCYYWeoBfKjt4RMPL2Gh5ty0X4PJDl659Pt4fe3rGA9Z0FTdXD3dxMn6UZxcfT9q1fdih2TFN/rQx30ZQvLGWztSx/x7l2Ev3Ll+EPNLzk5CnBn5eG1rhO2Oj24vEJ03J0vn0wmW0yFWnRQH51y4dgu5myNtJngxexFBh4ArhJNsYF4bY9GtoWE4yNIB0ug6orQKy2rDMpcRBCmG28rJzR80EI4JdKjzYbK/LQ9b00zQyLZRj9ZRHRM0pmB90s0YmOQZes06/NaS2FbXMw2t2MCC3RDwwyRnc96FvVSDd3AO1fm2AJ43dG7jQFuAz2uK9SFLNwwQrvUQ7VDrbqvcHWcFaPE8afJwFMMCOrQR7Ih5wRz0eh1RYQSyETNnJ8VWEGNzsC2yNgKh/UHZWjsK0AzHaE6G8EYDhMPdXB2Oh/q3um5FZkM5hqfkaYYD3WAdJwfQbGSJi3AQId4eF6BnS3oOmB0zRcVIYBucsU5hOmrwIQwAB6pytbKSeSE7meZ2aDBsTZFcdg7LzWHYEUxjAl2u6d1gTY6YoF8kHxy/G8qxSwqjqjodMvgUeVaZhE0QxvfIxNjIk4oCP7xGDA6EOchxkGgmIstCbJkIcxOJaSGxDGSU19BUz8yZPgLLIFDLYZuQ3qSsi5+LYELoEDW4UsvKPVAGzibPcWFvy1y+/exeybiQgbldCDCJqFVToIigZXbwX+rhZHafci67ABAF6OF27sZeXdYfzACjGYDEa5t9CTDK1/wb7WYQSvZN7Qt7s3AVUVIyOUbc5zTe3QbXV34Wbp+NktGZmKYS4U2EHLfolsDubauoIrlHFbrtAAvFubAWpc95TjSrAOsqJ0jq3/DamR7f8vj3prlVCgyRrXMAq12c4wpyrpNsJZm6zJBcNwFcPosdF+CLkxSlzI7MWKEcYI7UlM0pJXX73yuZosJAQJgbWpoT3JUMG1ldSfJnFKBazBrewIGtuPR5L9Qr3lSSyJB1FiBSXTMp9MkQmAzfcjD+Vl8L+zDoTSFFnbFvH8hgFsCXIFiMVeRYx8LQT4/DTJSHWBwDdQ2NJ0/jXQ2C/vJf/sv463/9r+Pf/Jt/IzfZGzdu4Ktf/Sp+8Rd/EX/v7/29t2cv78f9eAeDs9p0gKMzFW10//RSS+rAvJkYjc5ge/v3hQkyzAqWFn9CWCDGhRuv4fd+9zcQDAeShPvQU8/ik8/9rBQgu9dIxzGCV3aQ9AIk2ztI1s5BMxT7U3nP+5A98jBeePVVTCYjjCaXcUPv4FW9ijSvifTtJ9LreF8tRJWDIw6UKX1bOIVhJ8DVb61NXd9C5LhiZdikXIaWz64p0rdT+00P8hw7G9/FN85+Fhc7r0miKMPRTZyoHcYDB96PpeXn0Nm00X2lg95WB3oqggmZcaodI/OzBHvu9jbgnTjBmXGAM2Mf5zoT7HR8dDosMJrKeVvSgRXDxyFjgqbNxIgY42SMHbuDsTcGuOpIyd3m8h0sW0C7WoGZW0jiDWSowTDaSNMF9HcyDDtt+N0monFDMTyS3KA+s1PVUfdStNM+vFEH8fY2gijDKIjQGfuItBz9Vgvj1TkYmoFaBizBxYJbRdP04LQqcA+10Di5gsbhFeUc9EbBgRrZtNEW0LkAdC8ip92uAJ8+wi5zRypA5RBQ50BUg7V6ANaBVZhLyzDm5+BXquilmeTqKDe2FINxgl5vC/4dmBRH09BKY9T9MeqjLrzuNrQZ2Rofk2MZZyr9u27SmlkBHI1SOwIcAYy2AEiRIvkx0r4ayKg2QkbzgIkqQGnpKTwrQcWK4dUCeNoQdlWHWeE4XknLdDI2MkOeF9KbspDhG7twEez4UYrRREdXm0MvbGEwqSGKXeipAyM1oafFoLGYhZ3OxpLsUGZdNLwSyZJRFpXUDZnhjR0TSa4hYEHkHBimOUJTR2RpCG32ugwi9u6UVozn9r5vmzo8y0DFNsRmXi2bsuxQ98/EeObm0IZaJzOVi0tjyBamqk9ShPEIUTpAGKv3BMBxvzVM1+8W61bbqsKzGqhU1HbtwgziVsF1BXGGySSGH6dybNkzDF2Tv606JmquiarkDxU26vfu/P/WBK93AUQTxaRKP1HAS+SDBJlFkhTDtAsAqUDtLsAswSWBhrYL5GYBF9cfjdT6p8sFY3grq2PlxFGAEGMv4BM6JJlphcufgNdbc6zfE6C7RdzE1PF4WAWbVq0ArUoBjFvq2AgwLaWdZf0eBXIUSzjb51Mp5p5GAFaC7cIQQOSupbyV9xACMNpHU+bK86ucDtRA3/MU8+V5xaD/9iZHIq0ly1yAuim4IwM9s6xmSQoHwjJfSnK9ZqR6s68LZk3WzVbc+2ZZNvbys9KYYv+xZ64XP4NXQe7aiBwDkQmEeopQU852YC2fYt1anABRDD1KoXM5jKAnnDgCNF+fKcKqwDH7DFlRuFW12MjlfhVZQGTmiFiXiAoK3cJPA+/unCD+Og0QfuVXfkXyCRiO4wgI+kf/6B/hnYz7OUH3462Oy36I/77Zk3wGJmbTAGGe06/3GHmeotP5Cvr978hr1zsoAMg0a3Kz+OI3P4tXv/FHctN2KzV86tP/Kx44+tibY38uD8T9jbM00eVLyP0r4vxmLS2i/qlPYitJcObMGYThDq4OLuF1z8GEcqekig9GXXzG3cGcW0gejjwLHHkOVDdcfa2D7poqSjpJMmy5wDVdzTLTROC9x+bwnqNtWLPOPKyZc/0b+MZr/xVnRlenlqaHKst49MAHcPTIRzEOW9h5pYPxxQEM1vcptMRey0HjwTbqD7Zh1u3bGhu8PvbxwtDHpZGP7W0fW9sTGdgxx2TO1LFiplg1mF+xiRQjjOIR/MyH0TJgtpQNq575aGljLJsRGqwho0WIo236WcEw5xHHDsZDA/31FQS9BSR+rczmhmVZqNZdzC17mLMCOKMORpevYrCxhf44wIQPxiRCZBgYNlvwK7TsdlBNctR1B3NWFS3TQ7VRR+3kMtqPHYEzdwfnPB5DGhgQ7NCimm28pcwMSnefgWJ8wi6dqWpAZUENxgwd9uHDcB54AMGhw7iuGcJurocxunGK6A1qS3i6jpoGVOIQXuijHozhDXrIu9tSNLPcPeaJMUGWBgOGyWNF5o7MTgWGZgKSE8GHMB/2xYO+fM0HM3IBDjfnI6Rw8gk8fQivoRXkRQzdSRA6JoIkR5CkMsCnfJVOXUX+toQqdlgUSqQhwszgK6GUUXcxyVyMogbGcR152oCReHBjxSCWwfURWBBUyAyrJqVgkKocfQEv7HPmKtChulhODQ3ETYmhwE5kUqqze54JBggE6gUYIIApHZz4mYICnLAFBYggI/WDEgRaAsJobc3PLqV4singudvRBU9P1TanoKg8HjX2PD4ESo65917zbowS0BT10KYD/mmi012ug39PEEdQJY3LBcCbvibgmpF3So4XpVnOzYBO+YkX4CpWDFwJ5mRdBWC8HYh7u0NqkFULYFTdbQKQZsFTwRqWjGYBTtPYxyToYRINMEl8TNIQYZ6KhIxSNzAnzXSgWbTPrsKwa6rxtcZr35DJjnKZEWURojSSPk5jhFxnGqr30kiWkzyZPiMpF+dkhbgrSpHUwmVRKxrfz9kAnU6ByBAiRYjddZelJO45slwAkR4l0ONUASQWQi7uY7mpI7UtZI6J1CmO4y2C+/6/Pfm/vSkZ/w+VRTYjiiKRxY1GI5w+fRq12r1b936vcR8E3Y+3Ms6OA3x2qydSn4OujZ9ZakuRxXuNJBmJ/K10f2u13ot2+zlhe7rjHfy33/u36F+9Jj87eOgB/OSP/Tyq1Xu/ftNBCP+VDtJhiGRrC8naeWhmR+Qv1fe/H86TT+Ls+fO4ceMatgYXcCYcYYOSPsPGiSDDz5kbOOIVM+RzJ4T9ic0mbpzpYfPyQJK8h0GCTTPDBpVeRUL4Qyt1fPjUAhruXsZqsvUavv3Sb+Cl/jmZVedg88TCo3jfgz+NZvNBbF3oo/dyB9nWRCyuGZZroHqojvbpeTgHaiLJuFWwLtN3hz5eHk6w1Q+wuTWRPB8CGILUJUvHgtlDMrmKINjBOBnJw4WFQc22CbNuomHpWLGAljaBi4lop+OkhyTpQ9dbSNM6JmNguLWKsHdIMT7QYNs2qtUK5lcbWFxwYIy30bt4AYMLlzDoDhBwZjBhtfkEk2oNY+bNsK6MYcFNcjQ0Dy3LRV134XkeqkcXMPfoMVQOzd2soeZMItkdygZHmwXg2dwjpRHHrL4vBUnjSY5kTJ24DVQJfHh+ddhHjsI6eQKdA4dwMQXO+SG2WZdjNkTFlKGap6hnqTInSAqDgiiAE0yQj0eIiIjLP+EgN6ZDUCoGELpVB7Q6LLsOU3OgBcXsK2UqQQBEASwtgWXcDG7MPIaZBzByavIjGI5yV5KaSFYO3UphGAn0ioHYtjCOU4yCBKMwwSRK4Os1TOw5TKx5TKw2IqOK2PCQapYULzSZp5YS8GqgUZiZAmaWw0hzmOlMPwMqOKgn41FxTFQqFmoLFVTaLtyGDaNqQ3eLmil6YZNM+/kkE8ASpRnCmP0ucJH3C4cmMioEObODfLIt95TEnavtlSBjwj5in0zZlrAAhOKCxcFSMQPuGDocS5d9IJPEvL39ywRlqqYoAVgGP+ax3mVxuMxGcFZ+rjcKbrNiKaDkFp+X+0YmahSqcyr3i7sIroNgqFqwX1wf93l2v8VKumjq8+99zXOsPrM6HjaL6pJ95noL0MX1300ts9sFwfiEgJXXV8HK3eu5vpeg0QzdRPdHOaAuB9V3EyxT4Cc+giTY07NxkF3m/vFa5MC9XL+AAJZ0zVMYCXNuIphpDD2JYKRFS0IYKXNV6FvBa5QMQowkT0WxpiYXckQoWyYTNTFBQxZJvqaoCkQWx3y1SCYrCBDMAigYhUzV4D7JtJZ6TyYvuC7mR0L1BDqTPEHwZsEDJ1Qo/yR4ZBNmqwCMRf5RUaypYHFmrNvL6RoBn/tYruk6i75kzO4Usl7eV3NUdQcVw4Fn0AXShWaylo8nMkOeK563PQ2qmK782/+z4hyzOLtruvAM1Tums7vMbVHRYDhyHXy/4x0BQYyrV1lbHjh8WMl73um4D4Lux1tpgf25rb7Uenio6uFPLTTlwXWv4fvXsLn120iTiVjvLi7+GKrVk/Kzc5uv43d/+9cRD0ZCG7/v/Z/B+977mXt+MLIoIF3foisDoeGjK5eQB1dV7s/KEuqf+hTiSgUvv/wytrtreG3rPK5YBqK6jUrq4s9kXbzXG8Gk7pl2x6c+g6z9ADYuDXHjXE8SInuTCOtZik5NB1xDZsAJft53rI35fXk/0WQHL7zwf+I7G99CzAexbuDA8pN49vT/gnq+jM2XdzA+04U+nmF92i6aDynWx6hat2V9zkwCvDCc4Cqtlnd8rG+MkUcplm0Li7aJpuMDwXn4w+uIi+RqqevQMDG31MahdgsLRoRK1kMWbwjgYc0eOuIhrwhrEkxsjLtzCPtHEQ3nkeemsNuVSgVLB9qYWzAxXr+M7pmzGFy6gtCfCOjJWVFe1zCu1xDXG0CF9XtMtHRPAE/VsOFqNizbhrfaQvPhg2g8sCr2wbsnM1esjsjZLgH9a2qmtfxxmiEZ+EgGrC2jI5loSENtd6aTeQ+FJMI6cgT6yZO4sXwAF5IMF/xoWmCU9sbReIxW6EvOTmM8QDUYw41DGZCoZ3RpVbtrV8umEmRZ4K8CTfdgWlUBPAYdteioxvwcMkRGLG5qbDYC2PkYZjqGlscCcEpwkxu8RlLklobMMpHaBlImHBdmJBzIJrSQzXLEaYZxAozNNsYEOwXoGVtzsN0Klh0L86yRlOZwMsCOM+hRBsywEKoOjXJxU8UhlfSN1zRZF37PnYolTKTXcmE2HRisOeXtFmm8HzcHz00JiNiXx5THk+CklOkRoOwPAZBMDhc5F+DHmYBbTrqwH88sj4JY+riYOLnXkOsazGOLpfGVuiKKwXwx+66yuwrAAB2ebaHu2Kg7FmquIz3BIq8ZXkN+HGEcBRhFPsax6gfBEMN4gknMOmk+OLTPONvP1HZNh2uZqFgWPIvSRQtV20bNdlBzbDQcBy7ty3VLBpLcbzIFe2RIWTxlEoIkhE/GOY3kZ+I/cRvZJz8d18l9MDVzulyeBw502d8OTP3AhnyZyUyVLdrb82fTXLAZ8CFywlngwdwjBxW7KrXeKhzw0wkxpXNjBE2Yo13WiM93GgvJmeUxBM8VIYRaZtiaARs6bI3NgKXpcDRDml30ZU6hnDGy1sXH4jq5LsUNKRuUqXECi7jqhoA+h+vPASdLYCcxKpoOq2CibhkiI3R3GTOrsldWOH2vMDIpGR1hJ4ucwD25gczLS2YMYgzgwFN4V4OgJEnwy7/8y/gX/+JfCAvEIAv01/7aX8M/+Af/QKQi71TcB0H3462IF4cTfH57ILebx2oefnyhec8OcPwa9QffRqfzP+RGy3oxy8s/Bctqyc/++MwX8e0v/zbyMEa90sJP/sTPY/XgiXuWvsVrY2V8EMSI19aQbrPoaR+6raHygWfhPfUkdjodvPrqK7jauYRX+zvoN21kjoMPRAl+2uuhYRZf+YPPID/+MXQ2E1x7rSvV63fGtDiOMGiaQM2Uh+qjBxt4z5E5NCt7v9tJEuGV138L37rwO/B5Q9Q0LMw/hOdO/3m0tcNY/9Ymgot9GIXLDOsR0Oig/dgCnFXaSt/6GNN57LvDCV4e+RjRhWxrgs3NMWrQsGJbaNucTd9BMHwdfn9nKiegVe3BAwdx6sA85s0JYv+MsHFpMkIcD5GklB54kicT+h6i4Sqi0QrCwQKQuXBcF9VKBe3FJqpzFnpXz6B/9izC69eQRwGymEm4PkLXRdSoIa3WYFaaaBtVNDQXFd2Bp1mqanfdg7fSRP3EMiqH5mFQQjAbtKlefxHYfAUIdjX7Kc9rN0Ts2yoHfEwKY8ZVqwij2YCxtIR4YRGD9jzWGk1cSTKxphbTAuZ3M2F4NMTcsItWdwvz4zG0QNVfIbApwQ7tlnXNhm6yvo6jJB6WWiaLYjJ1lDk740kBeCZwjRiemcDTJ3DzHpykD02LkNopUroFWhoS25I8mNQypHBuCW5mHzgiSTMqiKV5is3Rvel77AOzAcs0sOjZOGgaWNJ0zKUa7IASuzsUV6Xssax0z55FDlk3pHyPM/Nknhz+zLh9XkvGAq8pJmkmy3FGxyc1u0wHPMkF0jRYZBg0DbauwyY7se8ewnVFeS7rmbaMIE/16j21nZCMlThmqW1wmT1z3RyCtlv07i3elznporgntx1l/DyZ9GwhZ8OL5UkSIUhDxMVA2KCLlpbBIotEYGMYxXoN2Q++tlh3qbguORAvZT6l7GcUj9GLRhhEEwziMUbRGL4M4mOBIrvHTq2LOYM8fqZu7pEYqQG7TlUlItbz4fWUaspiOk+RkBkoUrTZZ4gE8JBlIBApy8TweMqgdYYlYk9AFxdsHhmu2ykORV5ZpK9nbwAWZJvFsb9bBSMB42w+l1w3QhAXhVLJ8Mn+334d5d8zF4zLzL0i88VGOSFfi3N7waAZ+7ZDsEmSj0NsZDb03Jb7g6E5sDQWAFXrVsymCdfiPucikWbP418CKoIrAjkBWcV1VfYlw8BzTeBXnnPbsHebrnr+nD0BnCq2WxaHLRhZrnf/NskKzrzP3y23I02j/NRBxWSttwpcMWO5h+c+gUCZy1U2sZ1n7hiBliq8O2WHZl0ky5+R1ZrK8krTjzJPrGgzk2J3dxGRSSryrrgdMTEJbmmH/5YHt/mxv413tUU2wc5v/uZv4p/+03+K5557Tt6jMcIv/dIvYWdnB7/6q7/65vf8ftyPdzi+PRjjCztqEEr3t8/MN+559jdJhtja+j34vmJGa7WHsbDwSakDxIHA577xn3H5W98SqdOBhaP4Uz/1/0a10bq3bXQDBLSmHkRI+z3E1y4C+SZ0J4J16BBqH/8Y9GYTFy9dwrkLZ/Dy1nlcTxKE8y5a0PEXsh4eroUiyUNlHnjoJzHMFnHlT3Yw7AbYHkW4MQ4xaZnI5x3YloEnDjXxzJG2SERmgw+UM9f+GN989T9hWDgoNauL+MDpP4/D7ffgxp+s4/LZMyJ549CSUqLGQ200T8/DrN2c68OH2HZhckCHN0rffD8W8ENjhgXTxBOeC9sM4dmX4Q/PoLsdyd/xIbq6sIKHD7cw723BH38Lwc4m1qMxkpRyFA72XSSph9Qn6DmMeLSI2G8IU+e6LubbHppzdTRWa+gNtrD+0teQ/M4ZYTeyYCjAJ6q4iFoN5K3DqHstLKOCuu6J5MDxKrArFTjLdVQPL8A70IJes26+jsIRsPkqsPEiMNxQnz3LEPcIegjKyPQ4Yp87zWqhpL3iIV9YxGh+Ab32PLabLWwZpoDFaS2eUSAgOZyMYI+HaHW3Md/vojacIB4nCP0YvlWFW12E5dXgUdpF8JNr0DjDXiTmsjcCSli60CJfDYLFPjqBnU9g531Yeh95TjV6gsTMEbg2Oo4FnwNVmYXkOdYQmlWEZgOBUS+kagrUEOxkVg2GU4Xt2HApxRKZloGapavXTMxPADdOUY9zOH6KfBxLrl1pD61M5TTodQtGgwnO5p52L0V0aas+SjIx22DbKVsYyIx7lkdS20vmeXPWTFE5Gvw+qWUR4qjvl0iPyvwANZjlQIwD/5ysANcjA0MuR8hyWtXzZ8XPxVlOzSezAOjuNCW3R3ZKrV8tF4Kf4j0OsGZ/hwN1biellCgNkVICmvqI0wmS1JcWFz2lSSVLUg7iZj+niI4KqU/Zz4K0cmDKYTAvKRaWFpmb5DrQdKGUAO3Wtdm/Xka5TqsAltbM8v73WViWX7P9U69iJFawf1nOOi9qe4ZuwyQLUsjE1PlRZhZM/+a+chBNqV7AgrxJehM4KiddDA6kDQMeZUEcTNsumk4NLbeOOa8my5QK0eiGboKjOBajlKEwWyEGYYRRGGEYhhiHISb8DvJ8MdujGLTz3OoCAk0p8muInMmCwQaCBhsGmSOe85zfvX3Au+QTOOkR8xwQEirAKNexnGN1LJCr80CW18LNLOh+Y/ZbWdrzTwiORK5YmGnUKC/lsquMNmTZMUQiWcoYxYExzeU4x8WxFmDKxtpNVBxomsjlJFeG9weuyzLh2grYvRWsbSk35X5QykgQuQsc961fzDDmANbQeztjyrqUDFfRGAKmyO4Uzo+SB2rdIU9sNkeszOMqDDnK5bJXhbFuBleSL2bvGoKIGqEwtfghZM7vmQkiuvqP//E/SmHU2fjc5z6HP//n/7wgr3cq7jNB9+N7iW/0x/hSR93K39uo4uNzty/ueavgV2c0fh07O19GlgaSdD0vxU8fl/V0/A7+25f+TwzOXZIHzemT78HHP/3npCrz3UYWJAjOdhGvs3J9iPjaFWQjGh9MYNSqqH74Q3BOnZIcvVdffRWvX3sdL2/fwNDVEbdcPBeF+FlvjIpZ3DCPPod45QO4+voAG1cG2ByEWBsGCFoW8jkbrmPi6SMtPHW4JQ+z2aAU48zWS/j2a/8Fwy5BWI6q6eG9D/wUTp34n7DzUg/d5zehhepR6c65mHtiEY0HWzfNtPPY3QhjnJ0EODsOxYmPs5DdboCtrQnMUEne6qwZafRhuVeRj64j7alEUs9wcXC+guOLfeTpywhDWjGzXlEis8NAFVl8APHoAUSjJUSjOky9IjI323Gkb83XUJl30csjbJx9HZOXXoK9vY48GCEPhkhtE+HiAtBeRNNuo51X0XCqqFUbAnrcdgPeoTashQrMOffmQbdoZrpK6kbbakrdRI6VI+5MEA4chD0duRgJFMeHD/qFBQwWltBtt7HZnMO67aC/f+pXcnMipFGIahyhMu6jsr2Jen8EaxQgHCdSpNGptuGYNTiaB4uueekIVjyCxToPUgSRM/4sEhhBz1RuE7X2mcxIhmpgbpGNypDQdcizBfSEzJcoqlP6VrPIy5lDUlmC21pAtTGHhufucS8rc0LcMveEA7NJgmwSI/PZs/ZILD1/dqsguDEKudqkaqDnGuimytVuROlcmoqMUgZshfSttPNWbEBZm0QNlClhCdIEYRogIyBJA6kFlRIUsNF2mteylsGjSYOWgUbXFFDReJtub2Ufk6koXt8pdNYkyQPo6RjIJ0DmIy9qULEAL4GRgCHhNYq6L9BkICj1ULjtsp9ZLvclu8M+8F1WvJHCmDSjmOnpISfOdiIJ0wTQ8t2Ue8z6K3K8xIxbtqk4vamYR+5/HIxzwM7BtAIZzK1x4OgWKixwa5jwNDJJnBjXENEtL9Olj1h9JDcFeOWUJ5V1eYptMEFbflYM3FUiuQKkBAol8BPQIJIyAgQyGGpZAcbiKNzmFBEUCcslzBflS3RCzGFTgapT4sRlWpTTZt1mhRaxIeY1xwmJccHw8TpkH82wQIqhK9k8MmkaKroOz9Al91SeCkkOLctlYqI4AjPGHtzm9EIuqSa51gk4CRjI7qqJn1zAW8r8MOZvUUIdphgX+WMCOATU3Tz844REtQAwbJwQYwkimoAIuC0MSLj+OE6RMP+N678HI4y3y6CjzOtiwW5+Bi4LC2bs5rvxfiA5dFFxPCi5LOSXbLc6Jtpt3RJLYFeAvuI+x22VboyqTwtQx2On2GT23BZ/l9835qi5xWQQz4G6VxrCsN3NuETYXl57PM/FZ+LnVIaPysyovA+XbpIu2fHbrZugq3CLnDJX+7ZX5gmWTCV//QBrzb2bmSAOHvbXCGIcP35cEojvx/34QQ9+eb/aG+OPe6qo23OtGj7UuoM71y0ijvvY3v4D+P4Vee04S1hc/HHYtpoVOrdzFr/3hd9AtNGFpdt49pkfw9Mf+KSqln03+0hJzKUBoksD8elPNjaQbJ2HZvShuzm8J55C5QPvh27bwsB+9+UX8eLaGVybjBA2bXkI/H+yCR6pMjdJsT/5w/8Ttno1XPnSGq7vTHCj5yOsm8iPVVCr2njmaBuPH2zKQ2M2htEQL29+F69c/gKCnXNyc2SNn6dX349Hn/hLGN0ALv6nC8gGoXLRqlpYfP8ymg/P75G88YZ/LYjwesH4cKDACIIEO9s+kn6EuqbhQdNEaAUwnQ2kzhW40RjxWgQt1dAyHaw0AsxVX0GODfQ7sTBTcivLV5D4JxANTyL1F2DkCvRUPRt2i+DHRGPBg92y0UWGK1evY/ClV+BdOgNt0oc5GYicIWrVkR49Bae6gMNaE8v1RdSbbTjVGpz5GqxFD+Zi5Wa2hzNnNDEYrAHDG6pI6YzUjbk9QVdH2GP+y7yasbOoxHPQWzmA64vLuDi3hM6MpJjsTjKeIA5Dyd+phj6qwQjOgDk9AVw/RBamiPwEUZBK4T54CoBYkYbKuIeKvgYz7iCdbCGNxshiJjpHELcAylfo/EOQapvIOeBxTOS8Lmh8Qf148RkzzRCgM7YXBPQYzRVU51aw0KzjaN3BYp15E3tnkHkdC7gZx0i7vgCeQMDO7YFOGZSp6ZRg1i2MaiY6ro5NLcdGFGM9GGHcHQtoyIThIHhQ+RdMDlYDdMVo7C/iWu6d/GTKTnCAm6GhJ2jqMVpmjJYdo6GHqEvCtQ0/hcjVQjKMMpueItOKmXtmB9CONo9FThZlibBLHBiwxZLPQTaIP+NgUVc1hNjnrK3CQoUcpNGBxJuOPfhVVAMYBUxYyV5qILERALBeEOsiSZ4D2QN+FxSTxIExk8OV/IcDesr1CEAISths2Joty7bmwAblRrYwpBz06FI8MoFOR0iN+XzMO6H+XwHDBDrCnABGNYIvOW8CFDJWjYHNQpEsDsnjI8CJx18qPRafIVJFaIuTQpAV5AaCzECQ6/D3L+cG/EyXPoSNVGzWi6wJRZ0VKyoYEK1gPQTKsWhl4cRFloxFIgXSGoi5twLeTIyKnqBOsWolsCsbGTduq2DOeL1JfSj2RQ5QxsF0kY9SfDh/dj26YnQ0acX63q7gKI+T+BWee0sAXlMcMZXTmKprpZg/Hj4aEvhZju00E5v89JZub9pNlWa4Gbml8CMTLbFGm6IEVY6hgDJVcysSwFSWeS3uL3INa1LHiwC5LL7JxmuZjfLFspavrCdJ5R4pstRQgzmakajyb9/gwPIeIMCeklCaJlAOyG0Vl1JpqKHkr0q6OSuDLVnKO29LAWH5Zhb3Azk8cm8q7MWLP1Ws3Ox2CMxLcFQAo8JghSFmLJTTMo+uyM+T/S+aLGe7rKzUNitktjxzJt0pbWXUUrcNNF0LNQFHCizJeSE7Rqv7SIHEXhij5ycYhHSlo8GEOoayfkPD//en7t3l9vsZ9wyC/upf/atihf1v/+2/lQEGIwxD/ON//I/lZ/fjfvwgB2+8f9Qd4Wt9lc/2kXYdz7bu3tmQD7p+/3l0e1+TBx0fYK32B9BqPlPITzJ89dJX8K0vfw75MEDdaeBTH/9zOPrg3d0YJBl2YyLsT0YHrsFAXN+QrEO3EqnxUvvYx2AuLIjmmQ6N33r9BbyyfQ1jWmYueng6j/BnnQB1g1piXXJ/xgsfxoUXurh49Rqud32x680Oe2jOe3jfsTk8slrf44ZEYHFpcAmvbL6Aa+vfRk4WIwlR12080X4Epx//C4iTVVz97RsICxttMiHtJxaw+N7lafL/7YAPZ47GgwhZLwL8BAcMFmAdI0r7mLibaM0NYUYJws0QemJh2bBRszbQqF2EYQ4RCNvEbRxGFj0GLXgcuV+FBSYxuzBrnFEGqi0HlXkHE1vDZpLg9ctrCL9+AbVr52F1N+GFYxiRL9O84YFF5PMH0DbmsFJdxML8Crx6QxLlrQM1WMsV6KU0kIMGSgEHN4DhmuppcDCjuxat+jhGNHYQdnIkYaOoKwIkloWdQ0dw+dARnGm01ex6EiPyJ4g7PrzJGJXhEO5oiFoQSjPoNsV8Hg7wOJvI5GmnIs5srrBmFipJhMqoCzu9BIyvIxlvI07G8OsuspqDfMFB7jUF6MxKF1g5PNFdkaqxkGJmV5HZDWnMezIrbVTqLRyoOmhVbCzUbJmx3HPtUkLSD6XWT9oLkQ7pFKdmIssoBwFiL83e0VVdC0dH4OiY2GXT4GsaxkmKPvO5xhOkAyYjly0Q5qJpxAJaCF6qVgJPS2UAribKy1KQZQJ8Wd1HLUtBXnAAlaJKFiO3ECcOukGGzigVM45OEGCUTjDOxvLdfqNQltyqPpCSeZVmDKZc86XwQtyWdA+e5klf0SvKfUl34RS5F2RRplKl294wZtRlN91LyqKxGvKE2771rC+vWPr/7XoA3jlk8KqlLIEC06JkiMxsaTaAgo3QESYa4pjATjFDd1qfaebgHKrF9ZkpqmaKup7AMFLoZgRN5702hqZNkGfB9ENzMFkMi/ccBsV23eUHKl0PKeHMFbALM6Poi9cEXeXPckNAFDkgQihLY5lQ1ZMt5DUovb57LTLIEkblunh8cgXmAliI4CHUPERwEOQWoryoQTYF8erKNYWtK6Ebc9MUM0k4J+wmlzTK/9S7CQxEsOQ1AViomRgU4I4g7Cb5kuAhfmcJUkrZJsEj4WYMS5WOkb3hp49hIs2V9XxWAjwO0Dl6v0M5UYv3AeYHFieNu2HfhvHIb1PYs+Qb0oKVYp4jmQmCoynQinNxoVMOcuW2Cv2jKuglkkqLIKOos0UX0Vnpm7gs0qAmntnODAvGunR8n98xAj0p6loUEJVJQOZdGbvgzpgBeeXnk8ku+d6ksv4kUYyeSL7F+U6Bl1K+KcyoTOKo76+wc4WZgmHo8nnI4FnMfSzz0gjwZH8zxBHlfre+n5VuegrYFcd4CqzKPd4N0yzsvPk35STEu1kO97M/+7P4whe+IADoySeflPdeeOEFkeN86lOf2vO7zB16O+O+HO5+3EvwUv+DzlDygBifnGvgPc3qXf99EK4L+xOFW/La8w5J7o/Fytn8eRLgcy/8Fq5+81vM3sVq8xA+/WN/AXMrB+7a8jp4vYukF0otlXjtCrL+BWhmCKPqofrBD8J5+GG54bBG1/MvvoBvXHoJa+MhIs7yNUz8WcR40vXlhkmnl+Tkn8K1rRZefmkbVztjSYLOFx1UD1Tw7IkFnD7Q2OPe1Ak6eHXnVby+/i0ElLyR2cgyHDRreLx+BMdO/SmktdNY/5MNjC70laZI01A50cTqhw7ALur7cPD63ZEvBgcD1hsoI85gDhL4vQBaQl18H72wB9PpYqkdYK6eIA8z5Ds5qpEDLxsC8TXUqjfgVVhUlvu6AuSn4eQfhBG2kcdKm88wLF3YnqRioKNnuD4M0Ll8A96Ny6hcPw+rt408pGtZBF3LELcaSOaX4dZXsWjOYWXuAGrtOVgVF9ZKBfaBGnQ6hTHZlUBncF3J2gpQuOf64oPIz5EELqIhkAw5gHCnMgJq2rdXD+DSoaM4P78slrD+cIBJbwD0epjv9dAa+WiMJjBnHlC6YcFyqjCdGkxJDrZg5CasXINDaVvQhRkPAX8N2WgdyaSL1NORtqvI2lXkVQepXYPTXkW1vQq7Nge31oZVqcOwq7DcKizbErbhdu5S+0MG9n4iOWq8Xgl+smEkM6mUAfliIqAS8AMCXEfH0NYxsjWETo7AZlMsyjQ/ZmYGfToAk1yZRAaTLT3GvBFh3gjRyieoZZzdryJlzldii014llnCqsjsejHPLAXj6bKVJ6oHWRnuK/M+EnH2GrM2SHZrsMPjYRiUdZnKEtZwpX6HlmlqwKN0a7s1PWb7YplJ2K7myt/W7TqqTlVJM2172rOZJnM/isR7zsJzUJRQ4plOl2/Xyt+5U/CzcBts8pmK5fI1t61AW75n3XEcT5e5X/ca5bZK4ySZICArxnpR97g+9Rly6DpBUSyDPnXNqv1WAz51a2Kei6pfqU17YdhMnlNlX012jeszzUx6AV5sBQum6WR0ooJtvLWVMgf/ak6Z9z8HeW5JkyGlyJ14DFLFqtG0gdLHQoJ5qyC4I3wqjwzBjzK5uMcDX6aDgEV69wG8XEdaMGIyKUC3PmRwNCX7pATUnUpACXxvvX4eZ0pBpyARFmLNUw2OALtIc4S5I+NGgJfJlrRp4/dUAUqacRDsKRjHnERZLno19Cfg4n6rHERKKLnekEb7uYEoZ38PdZWEBQY8LUNF50RKInXjeBzIwvDcEgYKgCXwk+2Z8DMU97m9bLOYV5A9ugWoM0vjFOnVdSE5UVNHOAVo+JwOafJAJooSOoIXTjIlCpBR5iisWQGqpqDHovmFIRJLMn7sWeuNPbdNIMN7Mtkb1lcbszi0NOXIWIIkAUosoFpcc9yOZRmwbV1Maig7bLom2q6FumWKzJOfh6zYB+9RVfNDJ4drtVr4uZ/7uT3vvVmLbJoosF26dEleP/roo/j7f//v35RvdD/ux/cavMH83s5ABuWc3/jMQkOMEO7qb7MQ3e6foD94Qe5YuuFK7k+t9sj0y74x3sDnvvr/w+C1izJz8+DBx/HRH/tz8Gr1N14/K7if6yFeG6mB9PYm0s3XAV25vrmPPYbqs89Cd115wNOa/isvfgOvbF2VfIZozsUTZoKfc2O0NDWfm8+fwk79Y3jpa32cX7sqN7isaaFyuIb3P7iAxw40pswPc30u9C7gle2XsLb5kpJyBQNUdQsP2Qt4pPUAmkc+hKT2MLa+20HvlbMy48UwV6oCfmorCkz24wRf64/x0sif5mJQhtMMgaDjY7PbFdDTC3pIWay0HePUagjXzlFFFbVhG0mni8y/gSjahFnpojk/kIRg5I/AwSdgZ6eQ+9au/MDU4LYdTCo61pDiercP7ew6qtcuoHLjApb7OzCSAGYuGRNImnUk7RVYrYOYN5pYqi+jNbcAl25vc+6U9dGiPrD9AnDxPNC/epO7DnMTkqSOeGIiHuSI+xwkqQRvPhTD3MJI09BrL+DKgUO4duAQEtOCP+hLjSFjextz3SEOj8aoxxzQabDcBuzqMiyddrmmOHDZBGzhGBhsIScDkkygJUPk8QQpc5eCIZI8RNaqIF0m8DmM3HGBuWOorp7CwpFHsLK0ckur4ruJnAxUIWkTadsoQtBjUdhk6mrml7kQRo5RJcWokmDkxfDtGJFeABsxAeB8ew47yeCkmcyac5AlTS9a8R6lVFaewEsDWJmNNKkgClwEQQNBehABB5vIMcpGGKZDBNkIQR4gyAIpjhvmqhjh3Vr+cqBOowbP8bBQXcByfRkrjRUs1Zcw782jbt0+Z7Ac1O9vsyCKAICtBDlvR3CbBBUlGCj3rQQ/3Pb3MkBRACPbA4rKZUbJgpWftQQ+/Py3Wx//lmBof+N6y75c5ueTnDoxzCLIuHc3Wh6WwgPkroOfgyCV8kNdV+YVPL2UMLIvj/m9rEuBX14XGSyLzFpRF0sng1funGIulcyPM/rCcRYMCm20ebwJXstzK5ljAuzIbUmem+S4Bahlgcp1Y5+xqOnt91fkejprvtSll2Y4YtSgwCbryoTFugJYaQAnC0UiSJAHqInGW6/87o/7FFvcY66R5PvBFafJBBXEulvwaIpDIWRiXp5FHi6bQCvB6D0YqMnxMTxoJtdPwOch0xTrxt0lU0guzswVH0dJqMhCC2MUZbSS7xqcMA+O+WwmJal0d3OQaA4SOIhhy7LINoV35HkgE0imiyUJfNg5yxJMoOcE1xOV35jSca6A0iJxLc4l992hmUz5mrJStY2Ix4tAVral7lX8HLaCs3LMkI2Ka0ldWzmdV6W4KoHf/4wfpvie6gR9r/HZz35Wbo6nTp2SG8i/+3f/Dv/sn/0zPP/88wKI3ijuM0H3424BEGsAvTr25Rb4k4tNPFq7u+S9yeQitre/KA5wpfPb/PxHYBgKQPG6fX792/gfX/ks0vUebMPB+x79GJ7+0GdgmHd+QFPSFF0dILw4QM4k1dEQycY55OENaCwoubyE2sc+Dmt5qdiXCb7ywrfwzYuvoOePkNo6nJaJP2umeMIp2B/Dgr/6Sbx6bRGvnO+gM46Qs/DfoQre//iSGB6UVde7QRcvbr+IM1svImL+ynAdWhbjqFnHaWcBR1afgXbwvYiieXRe2MHwUl/kWBJNB0vPrWLuRFMGPl2Cn95YbK1F2w1gyTBRmyS4traNS90NMYog4GrXEqzMhZhrpDhQW8Gy2YZ/bR2b184hjDbk5l2pTtBq9WFZFZjae+DhE9CCeeS0ByqeiamlYewZ2DQybI4DeFs3ULn8GqrXzsMY99XDJ0ugmwaidgtZaxFOcwVz5jwW6guoNJoCfAzPhrVaFfBjOLkyMaB9NY/J7PmyqkjSOuKRiXiYIe6yXpB6alJPTqvjoW6gM7+AjflFdBeWEMzNyfU37vUx3OnBIfDpDLA0maCaJDCdKipuC1XOlLOi+2AHCLrIhUrykfO9hEn0oRR3ZV4Dc3Wmreogq7vIPRtaYxne8im0Dz2M5cMn4dyLAQeTd5mvM44QDiOE4xjJJBY5Xxqq/JKQjUU0ed1ylhIJxm6KoZdg6IYYOBMERoiakaCtxyJVq2opXI2P8QhuHsNhgVTOpjPpPlOz5WxZRrmYgTQzkSYG0lQ1vk+TCw4OCGgG6UAAzzAfIjACBHoAnUnPhjFlMm4V/N4zN0Ysd3VluUvnLraKXcF8bR5tr42W00LDvtkhUh6TlO8ou7EiSb1MVr93UCEghW5dbFG62wsFULBLnElWAn6RGMly0YvdN7/Hd5k0/W6Jkj0qwV7Zl2xSCcJKsLd/uZQGzbJnJZC7FQC7V6ZKJjIK8FeCTv59CfRKsPhOBPejZBjLVr6nQCrZNO6z+nwlwCKTSjnWLBNYguoS0MuEwb51q2OrXAjLwXE2C7xSXwATwdOePCrJq+K6C2dDkeupZWV4sfta7aeS66mJFTXBkpXrlm3vZejvOvjZBOx5MHQPmm7tc3NUEzl0WPy+OUD8gIem6Th+/K/96BRLfTtibm5OgNAv/MIvvOHv3gdB9+ONgmzEZzd74kJGhuanlpp4uPrGAIh5B9s7X8J4dFZem1YDC/OfQKVybI9hwO+f/TyufuObkv/TdufwkQ/+aRw7/eQbDkySToDgtY4MMvMkRrp1FenOGWhmDM11UH32ObiPnhYjBT5EX754EV/4zlexPthWtRBaFp6yE/x01UBDm6h9bhzFJXwQ335phPV+gIy7sODg0ScW8dwDC+KUw6/72ngN39n8Di5tvqAkXpMd1DULj9hzeKR2ENVDH0C+9AT8jRzdF7cxWhuLzl/UJXUbrccXsPrEggw+d6IEX++P8MoomIKfZcOE2wvw6rVruDpYl8KBzBtYbkc4spjj1NwBNCkXGHSwdu0MOjsdeXhyZst1Q7TaE1TcI/CMD8GMH0cyIeujgqUOh46O61qCQZbC6W6hcu4F1C6/DscfShK22PVaFqJ2G/rcMir1g1isLKFJp7RaDbbnSW6PuVQRkwOj5UAbXgfWv6ssrMu6DKwp4q0iCmqIBkC01kEehvI5BfCkKQaGhe35BWwvLMJfWkbYaiOKYwSjCYL+CHa/B6fTRWswxnwYws4ouXFRcevKSHr7mtp2NIKdTqTR7yn3CHJsBXSKZa1iw6pYMGwP8FrQvSbs1gqq84fQXjmKSu32tutkaTbCGNu06O0FCAYR8kks+VjaJIEeqBl2SU/eMzhRryMrQ2Bn8O0EvhUL6NEqIZo0EDAiNPIA1XSCSjqGIRKkKtLEQ5IYiGMOXpg/6hY9B0y3Biuqnk0kTI6f+5ikBFaBtEiPlGyvYBnK7xjrh8y782g4DdSsmmp2DVWrKhXM2Qh67vSdJLgh46Xc6grHutLAgeCE7Xa1Y0owVAKWwnN59n3JPZccBQV8JHH/LXjyykciMJq2AjBJXobKSZrmlhQAbtoXgGsK7GZAnuTJl2BrZv1MCpHlfe/z9W6lRxICzFsrPivXGxevp7PS6rjIeop6TVLDqajl9IMC7maZKgKjkolilGCglPqVy3fab66LOdRcH/v9rQRK+2WNs7lms/1uvocCgrOA8J2OWdA1K/Hc33is7vbclgxb+VnvTqqbFaAr2NMTyJRRsh+67sKgvFVes06Qfg/rVy6SStqolksZL5+Wyvhi1gRjxmijyMtS60tnWgHqyLKVjpWZMn5RzJtyjlRFXwuLfsqj+RmMCgz5PBVhqKZgrvhMar/V+va3dGb9artsM1QpnR7lOLmyDaphym1xeRao1msP4/sdb6scjk5UlKx98YtfxObm5k1fuE6n86ZneP7zf/7PGI/H0/pD+6O8Ucx+0PtxP24XzE/475tdXPBDSfT76aUWTlY4ELtz0PFtc+vzUhWaX/5m82m0W+9XlHHxYHyt8xr+8Lu/g+C1a9CSHMfnH8BHPvFn0F69c/5PFqUIz3YR3aBcIEfa3UbCgpnZgDUr4Z5+BNXnnoNeUUzT1mCIz379D3H++kXEcYDUNXConuOn6xaO6T70PESuW9hpfgxfO9fA5fUd0QzndQsHH2nj44+vYKHmSJ7D+d55fGfjeWxsvyI5LVo0Etbn8coxHFp4BNrB9yCrnsDwwhDdr61j0lW1Z3IO5hY8sbtePNWCYepSUPVr22Ocm4RTPfRByjx6Ib598SyuD9eF9ak4GU4djPHYYhVLuQ4n2EH/3O/jam+CEQuBFlIl1wUWFipoVT4MM3oGyUiZVYjVMU0ULGDDyLBFJXjoo/bat3Ho3AvwRh1V1JEDTdtCurgKc/4w5pdOYt5eFEc3gh6x7K2YsJYqAn6MugWNxgbb3wbOvQRMdu9budVAGM0j2EwRb/WQ5wMMk0xym3q6gY3FZQyXljBsL6Bv2AjGPoKJD+fiGrz+a6iNJ1gMQzQimv6qSX3K2yo0GYhCWFuXgfE63KQHiw9nU0fWqsJcqMKdo8V0FVZtDma1DavWhl2dg1Ofg1WdA9xmUTj1zoMBytOuBBEuTwKpt5Tt+Kj2JnDG4fRBrey6d8FOoqeIWOzUzZCySI9D1imB5sSwzQweUswjhJv5qFCSR6362EMU2UjTKnIcwhiUjCnDnDJKi18OfnhAYi1GrMeIECEs/omMrZCysTYOB3kls8NWKf4R2Cx4C5i35zCHNubRRDWtSK5ZPizYlJJJoccT84AwlvwrtTMzCwIACjYmvHt73wJT7F4vJXB4E5P8CgQURV0LYDHr4S3AQVlJSS/gItkFUbIfJbB6i4PmZgjegQKLtwhxBZspcjs9PrO9XQCwkokrjxtjCu523c9kAC0JDjMgjMf7DoCrZHbeqiLwJUNUrd45F3VWSnm3g/8yZpmn27Fbs6BuFmjwuzabJ1ayWrOAq2TPZtelJIpKtsgx3J1iP0tXvp4FcSWwm52j3/83s6CrXJ4FX47TkHzdO05+FJ8njskGjqfMXzmuLaWL5TWgQK5eAI27k9P/sEa+JzfyB2NS4u2IewZBf+kv/SVxpCJTs7y8/D0fmBdffFFATxAEqNVq+K3f+i2cPn36lr/7K7/yK/jlX/7l72l79+NHIzjz/X9tdHE9jCRZ72eW2zjm7R2c7Q8OCJn70+t/Sx6alj2HpcUfF/vrMsbxGF+89AVcfOHbyNZ6qFo1PHbqPXjqw5+BW7u9y5w8JG6MEZ7rIosy5L6PZPMMsslVcXAyF+dR+/jHYa2uyu/ThvfzL7+Ib770DQT+QCThzVaGT3k6nqmZcLKeDPQm7jF8s/MkXn05QBgPkFs6mg808bH3HsSxeXWTZr7P1298FZ3tV4X5MZIQD1ktPNl4GO0D70V+8D1IowaGZ7ron7sAfxip2memDv1gDUtPLWL+UF0GGJeDCF/bGuNKsDsZcZwPib6Pr58/i2sDBX7qlQSn2iOccnzMxwNoW31MogBr/QSTiXIO4sxSo+5iZe4UKvrjCHrzQEjVdFFixwS2jQw3WPGbNTo2rmLhxT9Ga+0izDSWuge0dE4XllA58iCWVh9F056bgh4G68mIpfUSnd1yaP0rwPp54JXze+yrc91EYhxA0LMQXuc52hLQQ6ZrrdbAxsoSthttdCwPgR8g3xmhcekVtMIIK1GIZhSJ4xGD27ZMF7bjifTLGPVhDC/D9LfgJgPRcGdVB+aBOuoHj6B+/AE0lw/Dbq0C9RWguqQK091DEPSshbE48V0bTDDZ8lHpjgT4NGI128e05ArrAtkxdDcAnBCaHUFzQhhWAMOIVOUZukblNvLcRpZbSAIdcaQhSZiLUEWGOYzAXDdnev9n4mylUpHBne3aCLQAPnwECDDJJxinYwyiAXxWRb9DuHBFukawI4yOUUULTcynTbSTOpzAQtaJxTlRBYHUrZPL7zVkjOyaApZpzT3tnRmAUjA9d2RVZhmVUt4m7OQMg1IyILeQ0hGYseYVWWD9NszCVJ5XsC2ynZJtKV4LWFJFhlTsZ6vuwF7JwSjXlcz0hQtW+Vq2WQIzuf4VECkdwvawRVPAUfwq95E1RkopIO+LZMuK45fzHL8DIEwAlzVzTpwCdPG8k50iM8XPQgOGwlFMaouW53ym33+sSq9zxXop4CbrLkHcjCPnbNwuh+puggChBALvRJQAaD/oKpmt2TZrrPFGJh632s5srt3shPjtYnYipVzm92m/1O9ug+sg0Jo1NZl9PZt3V4Kp/Xl6s62cHNpvUvJ25g3ebWh3wYq9G+Ke5XD1eh1f+cpXps5w32vwi3HlyhWhrf7Lf/kv+LVf+zV8+ctfviUQuhUTRFOG+3K4+zEbvTjBf93oSuV3Fqb72eU2Drn2G9b92dz6HYTBuryuNx7D/NxHpegeg1+TM90z+MMzX4D/8mVgEuFg/RCeeeYTOPrYk5KceqeCp/4rO0h2mFCYIt1ZQ7L1MjQ9gmbbqH7g/XCfeEJJ3/Ic31jfxO9//UsY7NyQeh+uk+C9deDjrQbqeU8GiRFqeHHyNL5ztSqmBywk6Ky4+MD7D+LJIy0ZaFwZXsHXbvwJtml20L8CO03xuDOPx6sHUaHkbflpRDvA8PUuBtdHkgfCSFwT9tE6lp9YQHOxgk6c4pWRj1fG/tTpjdLChzwbRn+Cr5w5hyuDdZHpVZwYB2obeMjawZIeisNSFA0x6GvwgxpMsyJFSxvVObSckzCiE9BEJlWYbLk6ehZwJYkw4fgtiVF5/VtYPPtteL0tqRTPB0daq6H6wKNYOfEezLtL0AvQIO6nLUfq+FhtHXq0Lp9d3NyG63vNDWjr6q0iGDgI1gMk3Z58vm0CH9PBpfYKrtfnVKHSYIwFP8BcyBaKkQHvnNyuYdqsrw6dOT7+EPZoC0bYh5lOYKU+TCYhF2yPu9RA4+gK2icfRe3gI9DmTihm5w7Ba48ORKM0lWKMo6IwKBuv9W6YIOoFqPZGqHZHwvYQ9DhahGoewdEnML0uEq+P0AYSghxUp9K0/f2dHn58OEvtpWpVmuM5CI0QI4zQCTvY8rck96s0I8in1keFdWzKtF4LVb2CmkYrjAqqWgXV3EM1V72XOjBYM0cq3L9BHSHP3DNYlWXRQxa/dJMF8MwKZ9iAch0lKCEQCScT+KMBoslElpMoFBvzLKVjmA6DgxU5/+wNGJwpNi0phsye7/P32Lg+/p0U9A0DqfukGpcDJNPlEElEULe7n5L4XmzDtGwYtiU9tyOvZdlSffk+96E0YShQRxLHyCi1ovxW+gQp2QC24n1hxkq5F1kANtvZ7R0HluPIMj/f3YTM6nMgKIPOYnviSpCrdcr+7q5PAESRJzUFSPuBUsSfqfcL54C9duFlYdGiyGjh61zkWxXWzCVY/T4Grz0B2XLtKoAkMsaZIpbTIdrUJKBYECyxazNdrm+PLHJWbngbwPVOhmJd4ptYH7GCvg1DVDoWzv5NuZ5bMVyzssK7DW6nZHxmcwtLdqvc53ciSvZxltkq92tWejkLtO7kGjnL8O1nzuw3KVO8VZT7Ioz/uzkn6H3vex/+j//j/8Czzz6LtyM+/elP4+TJk/jX//pfv+Hv3s8Juh/7gzPh/22zJ0UNG6aBn1uew4J95y/laPS6WF9TD0ttMG2va7UH97A/X7ryJVw88wLSC9uoGB4eXHoYT37w02itKObmdhGvj+G/1lEP9PEQyforyKNNeTY7J0+g+tGPwqjV5CZ/bhLg//nO17Bx7iWkcQBLS/FALcCPLSxgVR9KvZM41fHq+HE8v76MfqBuykbLxpPvWcH7H16UQqfXhtfw9fWvY33rFaBzAVYS4UlnAU82jsM5+mFkc6cR3QjQf7WD4eYEMfNBNA1xzUL1gTZWT89Bq1t4bexLrg+lb2UQVD5ccaH3hviD187gSn9TBry2GeFAbR2P2BtYoX2tFiFNBhiP6wjDOQE/WWzCMxfRMB+EZx6U9XEMEjoa+hawltNtrHC16m9j7tWvYuHS67AjX9VU4IPx4CEsP/ocVhYfhjnjDCWMz4IJy92BPrkG9Cg527o5gdVtIvUOSe2eaHOM6PoaBnGCnTjBRpTienMRl+tz2OTgNomw7PtYHk/QmKiiswa1z1kGLQzgDXdQSUewMwV2rHQiOUmMnIVHaw7s+RoqizVUjx5H+8hpOMsPAo1D8lluug6TFOssBBrGAsaGRd4R36elqTgThgHssQ9nEsKZxHAnMRw/kSKvNhKw0ohH1yOrh8TpInR1JA5ZvHkAlIao70L5UNyfz7D/NZfLB3FqpBhkA7FRZ9v2t8XljwPcaZI/B6ZJDis10EYTjayKel5DXa+joddR12twtHubodZdA3rNhlG1oBeNy5KHInVpUoSsrxQEAlT4WtVXKaLMKaD7kgyO1QCLA2B5cCexgI/I9xGMh/AHAwSjIbI9NZ9UFRwpifjuVIXcc8wCPoK0KatFrFsCrAL07JXW3DoI9izXLZoHm71T9K4Hy3Wm77+R6czdxJRNE9BVXLu8T1MaScAVpmq5YNimzJsqlqKuA2HPCoZwfz4Wa+XwmJTsINddArlStvkOxiwbVeZfTdm/Mm9MTOX2sX4lo6XSUKYM4n55omK49uZ47ZErvsNRGl7MmmeUoOtW9vB3I5ubzeXan9c1a9hRgrpZFmpW2jgrL9xvc//9Cn2GQSyB0n4Z5J1aCYA+8pGP4F2dE/Qv/+W/xN/5O39H8oIee+yxm7Sy3ysY4YG8G5rzftyP/UH769/fGYgZwrJtCQNU31fQcTYIenZ2/hDD4cvy2nVXsbj4E7Csxh72548ufRmT168C2yMcrB3AwyeewUMf+JA8rG8XfOAFr3cQrY2R8yaxeRlp5zVoRgqjVkXtYx+Fc/Kk/C5Bxu9evoTXv/PHSIbMcUlx0BrjEwstPFKzYWUDkIB5pXsY39w+gUHE71wGrWri4acW8aEnVlCxTayN1gT8XO+eE/Bj+j08Zs/j6fmj8I5/DGnzUUyujjH81nUMt3zEfMibOpJ5F82H57BwsoUbeobfG01wvqsMAErW50TFwSnXwsVrV/E7z1/E+oi5MjTQDHGkuo7HqhtYNvl8ZALqBL4/jzB4BGnCGf0KjGQVS5XTcK0a4jTH0AQ6Zo4N5mzwJkt3PH8I9/rrWLz0KprrV2GKlATQPBeVhx/D4cc+iroxP50R5Qyq1QxgGVdgBJeAq5s3g57KHPLKKuLAQdTPEF3oYLR9SUAGWzeIseXUcLWximu1BrI0wfJkjMf6QzRGAwE9ehSiHXRRTcaw0zGsjICHToO5zK6aNQdmw4PdXIbTrsJZXoW7fBje3AEY9WWgtqRyeWavjzzHZpTgoh+KjI3Ah0xPnsVIUrrO+bD8CO4kgjeJ0Z4kqIUpKglNgYt6GnkqDnhWHsPQfMR2H4Grwfc8TEyCnpMwTRsLrZYw+GRuKFkjqNk/68f9oVRtFI+k0fSDbRAOMBgNMAwGCCPWr5oFPKq5uY15fQ7zRnva1429tSL2zEzPJNNPB4x7ZGL7ku+LGWyCm0F3G5vr19HprKPf2cJk2BcAlIqDk6rXoUGHwcGHZkidD9WrZYOsSrFc0gPMl0vyFEkWI0rZIkSsI5THiB0gs3WRmYKTKVL00JCCprZmgRygI9wW6zYZMHMdRqbDzDTomaoiz0KNciwooxPplVkMHk3JB6PZANefmxp0Gj84Hizbhqs78KR4qi1No32+sCiRsEV7lyOkxXtJ8R5fq1l2NXpVTJVirkrWau+yJWYnJcqbri9S7JRqIWJeByLZUyDnXkK2U+wHtyPrDJmnxgFqinAylvZGUbJjZKj0knUrZsbJnqtetdllNgHBZV0kwxT3SDJRFptTsl0uzLbq5Xw4rux3OSDkPehWg3teo3KMyOwxvyQt2AjKnjiwZHFjh4nlrJicK1BUgK4p+JpK6covz/S/wuiieF0ul98znmsCtFkZYwnwSrke94e1Zt+hEIlpyUYJWNqVlU5lmDM5cELolUYdYuZRzECUUlOZzJiRcZbyxP33DOaRWTpcywHc2xRhlTw+5gPyWo6m50GZehR5ZAS4pUsji5CaGmzLQ6Ne293Wm3GHLD8jY8ZhsrSfvxWrtb9emDq+N+dxzeZy8X4nLBrvcbdwQYz2yRSZlsL2ZqM0Dvlhyh96U3WCiLI++clP7nm//OD3gmT/7t/9u1IT6MiRIxgOh/iN3/gNfOlLX8LnP//5e92t+/EjHJSQfakzxLeKIqgPVT38xEJDipLdLsJwC5tbv4046sqNtdV8L9rtZ6dSILI/X776ZVy49iqy19bhpRZOLD6GR575IFZPqYKld3J+81/eERlcNiT78zLyZEsGgt7jj6NC4wPbFinTl3e6+OaLf4Lw2jloaYIFjPFU08QHlxZRy4ZiVfryZgPf2nkYvaQpDwvDM/HAEwt49sllNFwLlwaX8J3L38Ha8CrQuwp9uIZHrTaeaZ5G9chzSBffj8llH8NvXsdwW4Gf1DYQL1cx/0gb+aEqXo8jfLbTlQKXZaw4Fh6uOPDiHfzxhZfw/1zaxkRcsngDn+Cgt4WnG1tYtlnXguyDjzhewGh4FGHAwqFVePpRrNROAZqDAXJc0WJsO7kM/jhYSUcdeFuXMXfjLBrr1+H6/vT5bi0sYPGJD2D52HthJMVkC6vLeyFs9zrM6DVonf7eg1+ZR944hCRrIO5nCK9vY3j9CgZRLDWMemEin6Hn1rBRX8T6QhOhASxNfDx4/TqavQ6MJEFrsoN2NoKXjYXh4RjYckxYixW47Rbc9gFUFlpwVo9Ab64C1UWgtqx6075t3s4lP5R20Y8wSlhfZYg0GUMLRqgOfCxNAsxPMtSCHFamQI6U6qOtNJ3aeH0ZOWIrReroiBwDvm0jM3ltHJV6Su1mE+12W+7VBD+ltIP35u5gB9c6l9AZdTAMBxiFI4yiEYbxSGbv9+S5zPbyrNbR1BuY01tosxktzHttVDRPrskyj4ZET2YmiI0YiRGKq1umZ0VhxEwmKUQWlvBhzmMQIwnUcirvRVMmgQPu8WAH40EH/rCPOFGSUhkdCVNTDBY5dufMu4AqQyy4pUitNA64jeKXeCyY0KEGVEo/qYAJXANwC3kdJzgsV4rk7rmLcF26icg0EYkElhsnU/o95iWJAwhvTLSdvPWv0OWOuVIVq4KqSWt1ZRRRtebQKN6viNx072O9FHu8VQMTmRXmgCosmLdCWqeuE5UXJEDHIuCy9gCf2+U3KZngrjyQrF4U+Hv6OPARBbRB5oAtFQDB7d9z8L5D9u8e/4wDYgIlk4DINJXEj/uRqJ7X6xT0vEHwmBBw2V4FdqWieteDU6koQMYaLtP8EsrB9oK5m5eVsccuqFU95ZEykC/yr6ZsVGmmURpvFOlcAjJmJywIisuBfom1psxWIUvcI1fclSxK7itXHWUA2/cpBDQV+WjqA5QGI/lb584ooIv3GnU/URVqi3sntzV7L+X7+za9yyoWoM7U4XK8wO8MnyflxJFbgL8SjJfgVo5/hnw8O0kV3Ia1ZG2jqlqfrQMVDZmes6oUYhaS5sRkxrII6e7EEqXfuQ6ddalyDUbRc6JHNUhP0PXDFvcMgv7iX/yLgjIJWL5XYwS6y/38z/881tbWhLp64oknBAB95jOfedPrvB8/WsGB5f+91ZOBJeNDrTqea1XvWNRwMPwuOjt/JEYIhlkV8wPPO7yX/bn2R/CvrCO/1MGB6iqOHTqFh5/9CGpznGG/dfDGGpzpIro+khyIZPM60p1XoBkRzGYdtU99Gvahg2La8NXtPr569QwGr30TGI/RzCc4ZkX4+KEDOGAOkcR9vLpu4js7D2E7X5XCnKZn4uEnF/HsUytwbA3neufw25efR8ffAcab0LuX8bBexXtqp1BfeBjZoU/AXzcw/vIm+lsTRH6CxDMRH6ihfqqJwZKN340idDu96WeoGwYeqjpooYOrO6/gN797A9c7GuJEyQssLcKpagdPtzbRMJlEP4HrRjDNBexsH8egmyEOarBxCIuVk/AzCxdzDR0roZZODWC6a6gM19FYu4Dm5joqIzXq4/3f8lzUTz6I5dMfQqV6UA0MWVYGCSxnEzZehhFv0StbBXOB5k8h9Q4iHmgI17bQf/4K+sOx5Mp0wxhBnGJiOtiuNdGZq6Fb8VBJM7SDACc3NlAddGFEIeYmO5jP+qimfalW7jU81A80UV88CHdpDsbqMWjNA0BtRbE7Xvu2Lm1RlonEbitKxJr6Gu2pIw6SAsRJH3HUQ6U/wLHBBCvDFPVJBpsF+2RgT8BnIzNMpLaJwLaRODZS9qzHUTzMeY17nifsDk1lCHrIxJdJ1UkQY+3aFVxbP4drO5eEKYzSssbFbhL7dEpZqqa7KldHr6KhVVHTq6gZHurw0LArMB0gNgKE2hATXMFW/h308x2Mgj6GgyGGkxFCyitDPpRLuZHKvxCzNkkiv4vih7OHdfZ3TcD2TFQ8C/WKjbrnwHNY88eAyQGjAC1WRM8Q56nUb+JwN85DRDllhXydI5LBQFGckFlpmg4vByo5UE9MVCeW2MazYLBNBgm6gCH+dSpudgNMdB2+5cA3HUwMG75hqPd0HRPkCMQqd28QSNKum0CFvWVYqi+aTCQKK5UIM0d7efacyQ3TUBqliHcKWoZLPST2hj3dnswIiwW62iuuU4Y4xUBHmF3un2EJ4CKgUiBrtxFoyfqKfCGIQcb3FpIcXqzvTuYyewDTDPgqc5p4oZQ5WPq0pwRS3/O+kkCqv1V5WvGUkRIARuYrKPoid6vMlyIgY7vz59GneVlkmtSANZNtEMwJYCpYtGA8wtsdArhEWlhIDZ1ymXlYtNynlLEogprx+MZI/RjJIJJjqxjHeHoMGMI+lDliZV+jXNGdYbtMYbtKsDTN9SLLJYCgcPErmbVCalcO8uULN10u2szAX4GMXaMOARuzRh7cbsEscbu3PV8l4CtNK2bs5RV7VrBr+40vypzFAnSwbtqbDSVDVN/DItnrLY2962fcfDy0IjPUliVCgzeR26N9/+R8bzbuOSeID1wWM33ooYfw/Y77OUE/2kHjg9/c6EqhTjrA/eRiCw9Vby9Ro4//1tbvSQFURqVyHIuLnxFPfUaQBPji1S/iwtZZpGc24I2A443jOHLiYZx4zweKh/6tI9n24b9K9oe1RsZI1l5DHq2J8xvr/VQ//GEWUsB3hhN8aXMDm2e/jnTtBmrpBKv5GM8sL+LJJm+yAc6v5Xhp+yg28+NIWefENfHI44t4/3tWEGKMV3Zeweud1zGhhXcwgN27gtOZKXk/1eoSssOfRDiYR3B5KODHH0QCfqI5Fzhex9V5Cxc421589XnsTlZstNHFZHwRL6xdxeUtDTt9A1EUy82/pWt4cm6IR5o3YOgBTDMQ8FOpLGLQn8e1ywniSRNatgTDOIBxVsOwaiBvW6rI3M51VCYbqG5eRbOzjWq3K7k1tC73CHyOncT8w8+guvggSaYichjaCJZ1GXb6CjQtmQE+DyB1DyPcSTA8cx6bV9ex7UfoRAmCOEGY5ug1mthpNNGvq5o8TT9E3fdR88fQogB6TJnZDubSAeppH6z17bUraB5dQOuBw7COnoY2dxxoHLgJ8PC2STDbTVL0KauLE+n7cSrvMSeNTx7WkKDVOhmfLBxguTfE4X6I+UEKL2LxUz5oPOSai9SxEJOB4GCi7cL0LNi3qLcxW/BwmjxNqVRniK0b53B1/Qyu9a5iLdhAmE7ErY/nmjN9nL2rajYqmglXp6yLTZdcL1On1CtHptGNL0Wms08QIIKv0YWNs4PFzHGYI2eLVC+vCXr2uqoWMjQK1AhPCrilVI5F4UU1+8le9PMmi5rSFY3vUUuvoeHYaFXrmG8uYq6xCNdrAXYVsKqKdSuZHo6q2JIQiCdA7Bf9BIiKnj+7m+A1ZlUA01VsEoMANY3Ueu9iPXQcTC0PicnZeAsWpXnFdT0FomqUVvwBp1NZI8dRZhlOQ2SUudtEaHsYGyYmyAQYkamWloz3vCawebujZKRmG538CLR4vhkEctI44N+3zN8r6zfV7bo0roMA7Ac1SuBVmlmQ/aF0UOR0IqtT8jwCglI290YsmjBbPttEmW8Uy+V2CNRKOaPUg7kJ4JXv7SbylzlYpfHFG882vH0xzfHaB74ImCRHpjxuhe20yBjLnJqSZSuX04Lt4nolX1HJGMWYhPbVsm5nl0UzjL05XwRJpfxMWBH9lnI2bnMW+JbW0LKNwsRD2JRpbbHdXLJyGyVzPl23cRsXxpl7t+xb8bc3OT3O5maV9cVKqXgJGku54UyeltTcKvImb3KtLNaXl60EkdPXKv/tJjbtVo6P++qT6bU712T7oTdG+OhHPyr5QDQw+H7HfRD0oxuX/RD/fbMn8i0aIPzsUhtLzu1Biu9fw9bW55EkI7nhzs19GI3GU9Mv69ZkC5+/9Hn0tjaQv76OVWsZBxsHceLp92Hp+MnbP9TiVLE/rPvD2b7tNaRbL4nzm17xUPvEJ+GcOC55P5/f6uPi2muYnP0O3PEIy/kAR70KPnK4DTfq4eJmijMbS1jPTyG0mqgU4OfJpxdw3b+MVzuv4sbohtpwNEFlcANPxDkedebhmC6yAx9ElDyI4OoYox0fo06ImHKppoPBARcXly309N2v+6ptYdUcIQsu4kLvPK5v57iyYWAwVjdJN3dwrBbjsXYHK5UbME0NjqsAUMVbRBzO4cK5FKNeE2kyjySrITAWkbQrSOsa0L0Ob3Addn8Tc90dVHd2YNBK2jCEuWgcPoz2I8/AnT+JzDd3Hx4Jt7EFWz8LQ1vfxR71ZWTt0wj7Jjovn8X181ewNYnQCUKkaYJBrYadegOdegOkLBpBgLo/QX00kLwei9dK1EcrnaCWTeAyv0fP4TVcNI7Mo/3gEVin3gMsPQI0Du7mRrDAbBgLq0M2Zztmn0ylg1K9PA2KiuXsWTiPZgkjLAY+Focp5nsJGsMcpvwNQXcVGQvNtRrwVhvwlqqoejmqtiYGBxrpE5F90TI42c0bCAoJSkj9dojtSQc7YRfrwTauJVsYIhC2QzEgKVItRdUw4FkmXM+A4RCM6EUJnSLhWZK+i0GCDDbK4pnFQz2hXXJRdidlonfBNhgObFqBmx4cy4NtMt+ohlpjDrXWnBRvtTzmt6gZ4qkTmEil6FxmSF7VLhAoemkz4IBg5B4tw28blCuVwIhFceliJzoiCzAoO3GK7b1B4n0SAUFftbDop42Vdd84r4WbjRMdcWIgSdnrSFMdaUbmoGT7KDMvQWMus/a6V4deacCo1KFXmzCqLehsXgORHgtbNM1rYo6TVLkna1vkKMkUN0d8PK+0+1YTwzwUKXMSmBuVRTIpxGK1fjrBJB9jko2RaLFSFL7JKOrxqm3zMxqis4GuKVt0AiIWuiWoKgFSucxr7kcx3myOhQAuSkpnJIbSQkoMlZRRABPvL/yuF0nwuy6HRS8OhOV3dtepbcqeCWibcTgMgnvOFXuro5QbTvO7CLxEjlmAxYLZkty5ohfgE7+RrFXldgnYch2RMJYAj8viFFnmp6Uqz02MY0rzAILUwimRx13lHRHMMXeR8kND1jHrmqjA3V5mcX+Uckxh7WZy+eS9ImeQrFkpkSzPp1WweJKvZjtTgPdGMQXzlKoSsBeMKj/P/KEj+H7H2wqCWND0l37pl/C3//bfxuOPP36TMQIlbe9U3AdBP5rxncEEX9gZiOzlgGPjZ5ZaqN7GAIGzaL3e19HtfV3V/rFaWFr6yWntH17+BBd/ePUPkVzfgXlliJPNk1iYW8GDz34Y1Vb71uvNcsTXRwjO99RszWSCeOM15MENGaw4D5xE7WMfAzwPX+2N8JXtLWxf/BqMa9ewlPSxiAzPrK7iqN3Hla0IFzda2EwfwNBeRr3i4JHTCzhy2sS5yRmR53FQw9CiMQ77Y5yOQhw1aqLBzeYfR6Q9hWgzxbgbYLAdIDI0jBs2tto2Lq9a8Kvq+FDac8RJ4SZXsD08i63hAJfXgetbJpJQR0Vz0TQ1PNjo40T7KhZqgOPSSWcIXU9hmXNIwiquXwG2N1oIwzbGrCHjLEJbXkTmprC3zsHtX0Ot30VjextOvw/bslBrNMRNr/3IUzBbR5ClVaHoZUQWTWCgA8u8Bku/At0saHXDRL54GhFW0H35Oq5+91WsjwJ0KVVJY+zUalhrL2JQb6IexWgNe2iP+3CzFLVoglo0RhUhKlkAN/fh6Kz/ZMKbq6B+oI3K4WWYJ56Atvwo0Do6dW2jaQJNCy5OQlz2IwEVrKCdpmNhFFkhnFW1nWwALxuhkgaoRxGa4wzVSY7qWIPlW9AyDt7tAvhUkLsVuIseavPAXDNCJe2Ki10+7CINDGSRiTS0kCSGDIqF0UoidOGjjwkGCNDXuOzD1xTDk1KIQdCjpcgM2pS7qHhVOI0qXK2GSlqDF1kwJxm0IFH6bVb3nl7NpeNZMfDe874ms/umTkbHLHoDjleBW2/Ak1aHW2vAazTgVqp3/SD9QQx+r6MgQThJEPoJoqLna8mlo4FHMUOqHOfUsSuXxZGa75F1y0JoWSSAVvLfErLRHDwQi9Ftqdzq7qzwNNeJ1drJNkkLVF/cA24bHOAZDnSHNto2dD6bySoZthRU5nZoG5HlBFvldsvirIVRhLBqt5nwKRgeGkakWiyAKNFY8jZCrJEnTBUTxUnqzJAcAoIdPWOvQ5Ne5XASlJVgixLNnBclARGbyT5T/cyyZRuoMQ/Kq6BeqaFRqaPuVmHTol5TSeDCPJbM3Qzhxm2L5FCz5RrmzDyBl7icFefvfrx1sct2BTf1HJSrXCqVjC8gIc+m0kVhhop+9j0ui6CrBBTprhyyBGOlycb3FpoAD4IEicJe/k3ln73FIUW/C/aMF26ZF/ZWgU7DsncZtZL1KrZTGqPMgqr9QZD27J/5X/CuBkG3KuJUJmndqzHC9xr3QdCPVvDh+cXOEN8uDBBO1zz8+HxTZDy3q/1D+VsQXJfX9fojmJ//OHRdzSjyIfyH1/4Qr229iuzcJhp9Hcebx7F67BROvOd9t7VhTXZ8YX/SEWc+MiQ760g3X1Tsj+eK7bVz6pTIoj632cO5rQsYnP8m5js7WM76OOC28dS8gV5/hKsbNWxHx9FzDqFeq+HkqQaqJ0Y4G7wm7JREnqMeBXg4iqTVi/3PWg8hMp5BtK0jGEYYbPuga/agYeG6p+P6AQfxnCU3sYZh4Kg1gj95Bdf7l7DTDXFpXcdOz0FFo4WxgXnbx8n2Gh5aDtGsurBt5jT4hQ67iXBioLtpYmNjDoNxBaMwR+rWYB48gtzM0Oydh9G5hsbWJmrr67CzDPVGEwvLy2icfAjm4nHAWChyRSLA70FPu7DM62JtbTjFjZwDEoKk1ikMrkW4/CcvYm1tE9shC8KG6LoubiwsY1htohWOsTzYxvxkjGY4RC0LUUeIuhbA1im90eE2PHgLNTjzVVjzLZiHH4K2cEKBnuqCbI9ggvbql/wIF/wQ2yEdc0YiY4vjIfSkg2baRz0fo5qOUQt9NCYpLN+BGbqwwjr0hMVpec1YdAYAclVHxqpm8OoBmvUBGsY2NDp5hQ5C30J/omMUaJjEQAc+OlqAjjZBX59gqPmYaMWDlzOLWobMyJBpuTIa0DNYlg3X8uC6FXj1Nhb1BbQjD+4YMIeJci7blyjPKGcaSzlPWetmWvemlJpQ4jPNIVDtrbIofqtASwlSkpizoRmSOEMasZZIkZhdymAKm+up+qzIRcgoJYxSATls76h1sbiG6bAdOpSx1hDrD1HqJByZ2hcZzOdq0OiPkAZjZHTECybIKM2KAqRhcLMz4l2GQSZGz6TnBA50C7lI8lzktLY3PKSai0xTZhHfExW077OXVuYCiEoGK40QFj1BEpktgqbbr2dG5lT2JdN1i+CMO4ESgZPKf7Lh2Mwtc1FxHVQJtNwKTKs4H5YOszgv5TLlmpkkuKvricvCjhTXXpJkci2WvyPHufz7oudrnnued+kt1oH6/llKvxtCLKfpjjhTh6sESJQwlgN3MY4o6m2V7Mi0BlZpJrF/3QUQEOZrH7iLir40x+D3diqTLFvhaCiuhGIrX8gASwmgmFwUjM6MI6OAu8KR8a5t66VmGPO9VF9+JsV6Fa6SJUsU3Vyb7F4ZN/k8xXPk9Ec/+X2fVHhbQdDly5fv+POjR4/inYr7IOhHJ+IsFwME1tJhfLhdx7PNWxsg8JIeDl9Cp/NHMntP0DO/8AnUaw9Pf4f1TSh/2+6tI311DQexgNX6ARx74hmsnnro1pTzJEZwtod4UyWtZJMhks1Xkfsb07o/ZH+0SgXfHfn4wtYO1q99G7hyDgcnHcwhx8lGG/Wkg42dCrrjg+g4x1BtzmP5oIH0yAaupOclKZqhZymOp8DpyRCH0mK2UtORNk4j0h9DvGMg8mNhfiZxhl7NwmXaTq84SA8wl0HDgmVgWdtGr/9dXO9exWYnwtUNB0k4j4bBxO8Ei9UeHlv1cWpJg+tQS02ba87S2YjGBvxhjHCyiI2teWx2U0w4G+7aMFcPwrJMzA0uIu/eQG1zE7W1NTjQML+4jMVjx+AcOgW9dhg5bb3DgQAfLdqBZW3Cqo9huGHhXGMCrWPIm8cw2ASufOc81s+dx/bEh5+ECNIE1+cXsTm/hHoc4GhnDQf722hqEZaNCFUtBOsM2p4FZ64Gq1WBNV+HeeAo9PnDQH0FqBcuboWkYydOcT2MhO25ElD+EyNOeojCDoJgG/W4g4Wki4W0g7kohD12YU3mYAV1GKHHpA8gM2Ays4fGZLSttnxYXgjHi1CpRXBdSh6AMDCxM9YxnBjwfQs+DPT0GDuGjx19hB1jiLERIjVzJAQ60jgLrgrneQ4NCmhY4KGqeahrHmqZBzezYMcadD+FMUkkgX//Q6o+vyCGHtXWnLA1TqV614UufxCCzAsHlwQ6wThGMIr39G81aOEg1KmYcDxTTBi4zOvKdotBscGKXWrwOwukRM9fDopnXnMgLHlPHPyWzdKmg14O2nPW0mFpiBmLWRZSlnYX50oGUsEQ2aiLdDJA5vsClpD40OIJNDHEUK56hkbHO9qqp9ApvaQWjgOsN5hBV8pJDalZR2q1itZAajaQGTXkhqtkhDoHePy8HOypXC/D4kBQg158fi4zeJwELJAZSwoQIUA23QUUcYqQFvL+GJMgwCT04QchQtr7ptHU4IG9LBdDmjIJvOwFSFEOLOjyzoM0Hv8yb4kgySzMJcqmLNbV+Z9uRYwnir7YJ3KCygTDFDkf13PHLYtJRAGSSjezmeOvWnFtFdcfj2FZ44fHVTGSzO9Tx5kASwEuMvo6DAFcahv8PfVcKdhMKiSF7VTng4xlJj0nFUrb6GIbwn5ymwrMzYLEKcgTwPjDywz/oIS6jzAvTYEsqYVWOBayzQKdN7X+jN8zJQksc9IEGBWFbMW8ZCrRmynI/AMyGfaOgqAfpLgPgn40Ikgz/OZmF9eDCKam4U/dwQAhjntS+NT3r8pr1z0g5geUwZVxoXcBf3D1DxDs9KCf2caJylHM1Rfx0HMfRnNp5aZ1Uu4WXuwjujoskiEjpN1LSHfOyMypsD8f+SicB09hkmX43e0BXtq+is7lb6C1voEDcRcto4lDToJokKE3WELHOApn7hCq8xHGq1fQdbamKpQ2DJyOMzw46omISvbBqiCtPoUoPoa4DxkYDHcCDIMUm1UDl7Uc3UUb2eEKYOtYtTU002tY234eW/1NbGyH2Ow3oUULaBkaXNPH8fkQTx1KsdoiXlIDINoTRxyoDyOEzCcPD2NtaxEb3RFiI0XOwpWteTSrHlqDS0i6m6gU4IeJ9mR9Fo6dhHv0McBcQN7vAJMdaEEXhjOCXR/DrPrQOBipLyNvH0dormL78gTXXjmD3oUL6Pk+/JSVwEP0HAdriytILQuHuhs40dvAATPEojaGZ2nwWJB0sQFroQZrdRX66gPKwU0Az5KAKwJo5dRW5PWwMCpd40SzHSCKewJ6EG5hPt7BfLCGxWgHjaELa7gAy2/CSaqwNLIqGiwOLFg2xkngVEJoTojAniBACD/REEYawtRCnLpIExtpbCHkUFPX0TF8bOsDbOlddK0BckeD5TlwLBcOTDS1Ktp5Da28hkZWQTVzoHMgeJcyDz6UGguLqC8uobm4jGq7LTOQPwih2AzO1NLauBjoRhniKJXBrvQcAJOVIZMTq/c4CLtTcKDnVKzpbPrszL0aq+4d5Mk704GfAj3y+1oKMw1gxD7y8RjZeIyU/UgtC0gpNVbU5jMBnvp/W/Uwy/eK92m7XX52zhAHAfIgRE72pux5XlmM+A6PYY0zxgRDHOSwdxy1TTJ5JVCabVKDp7A3Vvo8tSLJ/aA7l+jykLP42PS9lDdPJcPLYmh5KE3XKOnzoWUT6NlIJLGSVP4mZ3plQGV7gF1TrTKnTEe8ObXMelp3eb2WAKoEospEoDhmhUxRBvmF9E38u/JEcp3CJIQfBRjSIj4cYeCPMArGArTYi6NhQmtplTeFlHl05TLz4rjy0uGD6IMXYinnm5H2zeRg8m+MzISnVaQ58ODkLuzchZlZMHPK+n4wvqtvZYjJiVl8L0tAVnw/p4hw5vypIsZq8mD/8nSCoJShloCPoJugrwDYYrRCUCbvlT9TExFlvk4J8lSv7juz9yVeW2WoSYzdiQyue8ro7bnfFPeYGYmlsISyPdXPvp7me5X3p6KobWkMo46d6gkmuQ/lZIIQnsUEDPdVPkfZzyxzMoH3Xf6evm/dOpdLllM+l5qcke0UDnki7s1vtw0eP963WfRV5XIef3IR73oQ9Ou//uv4V//qX+HixYv46le/KuzPP//n/xzHjx/HT//0T+Odivsg6N0fdOD6T+sdGcDSwepnlts47N6cIMvk9F7/2+h1vybLtL6dm/tgYX5QJENmKb629jU8v/k88rU+KlcDnGieQHt+GQ998CNwq7Vb5v2EF3pS84BTb9loE8nai0AWyAjKe/wxVD7wAeiuKyzV72x1cGP9ZQRXX8PB7ibm0wh1o425tIfJYBHDaAHx3HGYrQzD5SuI52jUQBZBxwN6BacnIyyPe7uuX5UVRPaTiMeLSP0McZhg1A3RizPcsDVcRgp/3kF6tArdM3HQTmCF53Bl43n0Bj10+qwNswAtbqFlpfDsFA8tp3j6cIyWy4eEK0n8/igUxicYR4jCOQxGR3Bju4FR0kNqxbSEguk6WG1UYPeuI+rvoLK5JeCnwoKcy8uYP3oczpHTyJMq0FsHJtvQ9Qh2YyisD+vIZM1jmFiH0et5uH7+BrYvXkSwdQMjgh6pDxNjZFnYnFtE6jiYG3dxrLuGg0aIA4aPuqPBW6zDWmzAPnwQxpFHoLWOAK3DMoAaJSk2ohgbYYLNwsSgJ1apnJ1lRW9lWhCFfSRRF414C+1gEwvhGlpRH+6wBXt0ENVwCRXdkVoNmp5Kvk3gxhi7tNvOEBg5olRHFhvQYhNWSv6rqE9T5Fmw3sIAI/QxwKa+g64zhCbMggvHtKFHOZqJi0Zgoxk6mNMaU3etN5I7lAmzrC/iVKtwa3XU2nPSf7+kCHwoCkMzjhGyMY+GgIY1gAhyQs5gvsk5N00TJsatWcLMuFYGKwthJWMYwQD5eKIKQRZJyNIX8hE1yJiin6luSgwnWFA0CMXRMacP/PczCC5KAwgOCAlKfqCCVBCZzUjAkEYmiUYJOfOW/AJAKaMJVXByt4nhRrJbrFS5WRlSW0WWafjgsNnQG23ozXlozSXobbZVaLUFBZDegWubLI4UCo4GUiyYxYMJnPzUnwIoyvfK75lYjRB08g4wk5fE97gu+dvC7nzXovgWRzcH7NxBXWugqtPR0lbrFfBOZ8HCSbFwhpPBv65LTpRNWazhSgFfEzY83WPJ4GLSYR+7ViwrAFm4nBWOYyWbNDsoFpfGYllSHwhKZtio2UH3nvUz3/OHd479fryJ4PX5vp86ju933As2uGdNxK/+6q+KO9zf+Bt/A//4H//jaQ4Qa1QQCL2TIOh+vLuDM/X/dUMBIDpc/b+Wb+0AFwQ3hP2Joh15zZo/Cwuf3MP+0D72dy/9Lm4MryM7v4WlgYeD7QexfPQETrzn/TfJg+JtH+HZIu9HZnJHSNZeQjZWjI21uiK5P9bSkgC1L2718EJnA9vXvoXK2lU8ON6BlbDWioaqn6A7OgbfW0a0WoW/eBH5gQk0M0fLcPFYbuHhwQ6cuKs2rhtIG48gwsOI+y7yAaVAIYb9EGtJhqu2hi0rQ9K0kR2tw2nYOGQMkIxewYXLr0jh4SFzTUar0KIGltwEbiXFQ0sZnjgQYqFeR44KgkkX/e1tTAYEPhqG4yPY7h1CP64gNjpInR3oVR0t00DbSqGNbyC6PIGxuYWltXU0XFdYn/bBQ7AOPYI8dpBv3AD8czDsGPZiH3rbwMR9AFv5KravhVj/2kWMNv8A42EHkSS2xsiyBCO3gmGzhcS1UQ9HeHzrIlb0AAcNH61qDm+pAefAIpyjB6EffBxYPo28toKNWBkYrPVjbGxuYlQk2WYF2ImTMaKgByPuop4Q9PRQDbncRzPpwUgBe7wKZ3wUjXgRjm4isXL4dRNrmoaBHSPl4JRJ1UkdeqRN62KWVyIBVmBEmBgTDG0fI2uCkekjNGJxWKKczTEaWI4q0IMUzZ6FZuxhQWvCYWVROecQEO41mvBqddiVqoCc0tmotICVhNjvp94+UrK0cBKrXJwC9ARjOgXdHYhQs48GrCIfgjORTHqXWWKpaZhAZw2vPIFBYwF/BIwGyIYDZFsDpP2Bko997yVKbwrNdaBXqzBqNen1atlzkoH5MAWAInPCuincD1oZs3E5LnomKhdV3VVBVgO660F3HSnESjaHEyeK1VFmBmSR9hxv5glwXQRqZIzYM6k8jHbfZ2OScrksr4t6LjJIpdSttOyl/TZNAViAkfVQTMVozbwv2y3AZMlcMe9IeqmPI2WMp07opb/C7pdhVla3m4s1m2+QZ2SfIjF8SOMAGNFynHbmveJvr918XiwTumtDr9ahVZvQam3otTa0+pzKUyrd/QxKgtRAfeowWEp6yNBZ/LzmlLnTPU+axnPjucq2mUWBnaa0t6AM0jQoc5bCxCXAigbTZfYESjSY6GALnbzMB33z23NNd6/LXnXWca8Bz/Te1gkT5SC2HxztZShEXjfDyvI/Ye+mkj7VytdlvpeSAO7KTksJX8mwzEr6bsXElOzKLAtCNmc2P4uS1Vk2hzmGpWxzz+eaWS6luQr7KVAprFTBRO1hYQqmZWqQOSOt3b/vt3pdxlRqu++z7DI7uyxVue4pI5XMfJ497M6uAUwZpZRVNbVeYcRmtst9eLNuht+vuGcm6PTp0/gn/+Sf4Gd+5mekGvkLL7yAEydO4KWXXsLHP/5xbG9v452K+0zQuzdYbPK/bCgJnKfr+F9X57Fg7wUqWRai0/kfGAxflLsIWY25+Y+hVt2b03NteA2/d5n1gYbQXtvEUW0FbXcOR594GgcefHjP76ajSPJ+WPdHgrkxvfOI1yl9g9heVz/4QTgPq/yiV8cBvrC9g42dMxjfeB0rmxtohj60pIED8JGNFhBlDYzbCxgvDIEjI2heiqNWE49HMQ73N6AVg4bcqiKtUfJ2VMYD/Ez+KMbWIMSVPMMVAwiYP7DgID3kod7QUUuuobP1bez0N+BTRhbZCMeHoMV1NN0Yjg08sJjgyQMRFuptpFmEYXcTk36I8SjGJKhhp38MvfERpDUTsd5FnvRRM1LY0RA2nZuSGFYUKeZnp4N2pYLFAwdRW1yGefBhIDSB3g0gHAr4MZs9TOqL2M4ewMalCbbWzmO8cQl+5Iujm9SDMDQMag3ELkVgGeb8EVajEZbMBIuaj7qZwJuvwTnYhnN4Gfrhx8W6OqgfwqUwljyei36EES1Bwx1EQUfYnTgeoJJ00Eh6qMd91JI+GukILmJVqSZ1YIRt2ME8avE8nLiJ1DIROSYmmYaIsjUOCsXBt6jFoOmSF0BLaAKaiRdh7AQYmmOMCHy0iVhRZ/THKos3il1pBDvWUYkMzGV1LOotVKEGHpwNr88toLm8gvr8orA4ZHjeqdg/M6zkIDOykH2DFv5u5Kt6HXcKDiKcqgmStZaewMhjGEkIkzkozM9LQzGGAAfutFaVAX45yOe1dpfGOhws1aowGk0YzQZ0MmCUookEjAN8Vm8vZGDlI65IqigfeUqyZiv2oQA6+4HI/dgNOW6U9fFcsehn0Yucjiya0Ajq2lbH1gJK4FFKB01TAUaeeznvgVr2fWSTCbJBB3l/G1l/B9mwi2xEu3HWd6Lxw924fokGboaRLd3vjAIoqZwlBZi4fzR78JQrHv+a4LRS2W3VioBVkTrOfBaVPKOkhXtkhQTB8l4BgvldZ+FQAb8KBAvoknWr6618/tDOfBYYkW0qc5wo5ZPk+SL3iT2VDXyff1cW0hWmKlVM1RsFGSsCJTJIzFsq6zSVNZ0oHZRtSJ0i5RLJvCbmSRFAlQCLluYluOLP7sfbH9M8yLfR2TAnwJSFXQniD0u8rUwQJXBPP/30Te87joPx+I1rI9yP+/FGkWQ5/q/NngAgSuD+3MrcTQBoMrkk7A/duxj1+mmp/VMWPmXw4fHtzW/j62tfRzb04Zzt44R3HFWvgQef/RDaKwf2WuNe6iO8OChuMHzgbyK69B1xMuMNYFb6xpyS39/p4Vz3Mvqbr8FbX8PJ/g7ioAIn97CY6ggnBxF6VfTaFvJjW8BcgKOGh/cHKZa6V3a3XV1FbD+FaDSPdEs99Pq9EFcnES7lGbZZB9LQkS27MA7aaDp9xMPvYvP867g0GgkbmyY1xOPT0HIP804Iq5rg5HyCJw8mWKjVEUUJdtavYNgLMBqn6I9W0BkcR2QvI22YyGpdeJNN1IIBUn8oD3GTtWWGQ9Q2t9EOI7Tn59F69DFY9Ras1VNAqANrN6R4pG5H0Nt99L0VXO89jcsvnMfo+m9JQVfKE6VgtWlg3KwJ69FKYzyRDrEQdTGnR2hYE5nQteZqsBdXYB+cg3GEwOc0ktZxnA0TvDrycf7iVUTjTfiTDQRBB1ncx1yyjeWkh3Y2RCsfCajSchNIPSCpwIlOwMnmYGRt6HkVmW6CPg1djpM4G5zralbMyJCYGTzLQ50P9moDlYUmeu4I19I1XIquY9PfQEgw5yvnnrLeBPFSHRU0tCqadNvT2rJMeYqMy2xTgE5tfgGtpRXUFxbfEXMCzl5O+hHGvRDjfihmAuKkdocK6ncjS7NoWZxHsFIfFmsiRSMY/gDa9kCkZdPChEXI+b+XzTgFO8K+VofRVGDHaDSgc7levyvDgPvx1oUMtpgMTbBefwspkjuE5IkQcDE3q7+JvLeJfLCNbLCDfNRBPu4jp304zWTE3KEcHM7YvpdYmLPnaYQ8JXBT8rzMpySSMk1qkumG50mB25S1ogiO2N7GIq7CcM2ALtvzsOg4WOIxliKiygp52qaJbDMyz9mf8XZja4hNDWMjwcRIMdIjDHN/ykJR3kdpHsFOWWT3rQqCpIbd2MNAzdZ6ervZpx+VeCcAiSZW/7KEd3Pc81OEeT/f+c53bnKB+53f+R088sgjb+W+3Y8fwaBV8We3elIMlTVtfm6fBC5NA3Q6f4jh8FV5bVoNLC58Cp63t0AXb/Z/cOUPcH10HdnmAO1rGY7UHkCt0cLDH/qY1DeZrnMQwn9lB+lQzZ5pZoD46vPI+orVpPSNrm/m4iK6cYKvbHTxYm8N/e7riHbWcXBzDdpAQ5i0cAQBTH8OPkz02xWEBzTgSA8HbQsfmKRYDTbURlnfp/EIQkreei7yPm1VE6x1A1wMYlzRMsSmjtzUka7YcJYnSPzn0b/xOjYmE/ldhpuuQg8Piw686rGWT4jjcxGeOphhoVaFP+li89oVdHd8DCYmuoNjGIcnkTYbyA6ZaGZbwPZFJKMewjBEZLBWENDqdjE/HGPO89A6fASO48JYXIHROsSDC6xfl2KTuhUiawywbR3C1Z3DuPy1FzDZ+mPEWia1UmLLxKRSQ8XQccRIcSwfYt6M4CUjEK+a7SqsuQas9grMhXloSw8C8w8gnTuOyzHwar+P119/BcPBdYwmG/DjIbx0hOV0BytZBwtZH3puIskagDGPXD+JLJ+DntWg01QgNRFqHIAbMJiYnOrQWYySYx4jQ2SnMF0LTaeOmlNHa3EBcTvHFe0Gvtp7AZd3LmAyGkhRuDJorUsDg5bWEqDTMKqowYPteCpHx/NgVyriwqbq6Kj2dtfPIXifDAvAUzQyibdzT7spYVkSyDMYSKGLFI3MTQw9CYXB0YMRdA4613oij7pp+/vUOyIt4+DO42y6M5V+aWRenPI1k/l3AY80zo7/ENcauh9vXcgMdCFZw8ICtSi3/kXJEE926ykJKJppLIzLArYskktmKRqp5nfltYCtOEXGvDWComCCPByo5Zx1lhzkHC5ptvS5VkgKKU8lS0RZIUGLVUgLKT8S6SonWGiDTCmSgZzuXn4grJeSLiYi72R7q4PfoFrRVslguWSkeCxbyJwlRCYQGzliMj90gpA8rhhaksGgo6H4Okhp5cLGmcWXc/k7NgKsiZ4IyBoZsbxOXQs7to9t89aKIDJOLIorxZZ1suu21G/i+3cKqfGkW+r3DUv+tmJVBFyx58/ux/14W0HQP/yH/xC/+Iu/iL/1t/4W/spf+SsISIPnOb7+9a/jP/yH/4Bf+ZVfwa/92q+9qZ24H/eDwWTLz231xWCALnA/u9zCgRkThMnkIra2fx9pMpGZr2bjSbTbz03r/jB4TbK46B9d/yNJYNUud3G4X8NCbRFzqwdw6gMfmsqOODNI04Po8kBNIGoZ8vElhJdfVtI3ur596EMifZO8n+0+nu/tYDA4j1H3GhY3rsPZCRGEDSxrAdryVFnAxNUwXKwjPR5gccHCc4GBQzubagbMMJG2nkGYPIhkR7E+vSDE1UGAS0GCjqkhszQkto50MUDsXkQweh3x2bHIIRgNowkbh5FmywjzGJo9gAZfwM/TB4G5motxfwfXL2yiw+KpEwf94Wn42Qnk8xU05gw0h5fQv3pB2Ns0z8SYoZ0mWBlMsJSkaM/Nw1s+IINUc+UYdLOKvD8Crl1UshTDR1yZYEs/ggvrC1g/9zyi4abIM5jPMakSAFTxuJ3i4WwEO+6LAsWaq8Kcq8OaW4HRqEFrHwPaR5G3jqDnzOPaZILL3U2cu/oN9EfrGNOuOgthpxMcTjelVbUEIVpIrFVsuKcRZXXUEhf1oYPq0BGgYyRsCvQwEjuD5hgwKhYcz4FnVVCxK6g06zDaDtbtHbw2eB3ntj+PzavrUv+hHNJ7moMDxiqW7AUs11ex2FiWvB2aEBD0EPCU1cLfzig19lLPJlA1bcqCngQ/ZHz2y9WkSngawtNDuAjgIAC96sjiaL5yJhMZWpHP8kYxu3YCHKNFhqYJvdGA0WwV0rSakvx8H/OX7sePWMi9tZC73WvwOUHrfr8L3aebpXK0pLELkug234J7yEab3SWnVrjhHURu1pFpHrLMQZZZyMIY2cTfzfFivnVhWDCTODLNHbnt+5TNsS4OwRYnb8h6Sa7aCNlwNN0V3hkpXvveBWxqTWSWKMWL0jEiPUNo5vCZX2lmGBspAj1Byok9y0BgGpjQHU4eu/m0ifRqpi+XpWAnc73IgEivIzMNZJZqluPBqzTgVZuoVlqouQ2Z1BLApe8CJ/aU9TE/i03Vp6ITaYDQHyFiDS7W3AoTkam7bg1epSnrrlRbsNzKfSbrXRZ3nRPEAk9ra2tYWlrCv//3/x6/9Eu/hPPnz8vPDhw4gF/+5V/GL/zCL+CdjPs5Qe+e4GX4uzsDfHc4gaFp+JmlNk5U1O2ZifPd7h+j3/+OvLbsNhYXPi3217PBxNIvX/uyWGDnYYzqRR9H8kXRPR98+FEcefSJ6Qxz0gsRkP0Zk/3hLOIA8ZVvIg9UDSD30dOoPvccItvBNwdjfL3Xx2B0BYPuBTS2rsNZn8AfV9HWMyxmCSyf8pwUk0YN4+MWmkdMfMCs4IHN89BEDqYjbb5HgZ9+LjlPG+MQlyYxboQJJpYuYCSwfISNG/D1V6FFw2n+Qsts4aB3FK51AmvjCIOghzQZSoHDE3MRnjigoV2xMehsYmd7hP4gxHBSxWj8EALzGIwFD0ebPvTtS7h+7TL8SCWWc9i+nGY4EUVY4IOkWlEuR615GI0FaJGGfNhRM6nUphtDeaitaYfw+pUBhldeRhINirymFONmA6sNBx9MO2hqY1gsULpQg71Qh1GrAM1DCvQ0D6Ojubg26OLKoIMroy62Jn2E8RhhFiLKY1hZhAPZDg5mW6jmEXxzAQN3DrHTRCuoYX6nivrAhRUZMBMDds76HSZ0m0noBkzPhkUnNseBS21/1ZKWujnWonVcm1zG1d5lXO5cxMQfTqU0fMi1tQYOVw7j1MrDOLJyUnJ3CHTeziCAUWYDqh6OGBD48RTwUMJ2J3c1/sRIYzj5BG7chzXegT3agpkn92SqJTPczGNgorjMHKukcYIbo0Wg0xRZGgHy/bgf79rg/YDsUdADQjJHYyAaql5ylEr3s10DhmkOUilbIyvF3w+HiqW6U9iVAiAVrcxVoiSOvbQi34k24uXPTM4uVW4JABXDFSNnzhUnroueOViSz8UCojTCkO99mbdVmmaovDp5Zsp2VR6UrId5XKVxRqDWRQBXgq5bBXOLWPyWOUySd5Qz34j5R6zvdGd5Lp+N/PsyX4nMlQIwKm/qps9NoESARKBkm9ILgGLtJlpFJxn0KIGepNDiVIGtuxwHW04FpkvpYg1OpQbHq8OtNuBWGrBNB6ahakExN4wFjnl8pacJUNGXx53PWgI4y3JnLPeV1f2UHRd7fOayFewicx75+ZiDVhimlFb7+01SmHOp8fdpqW/ta7O2+pY1Y8NvifU+uE3Jc4v3Gr+UeXyFzT+3Mw3dQO0jH8a70iKbVozr6+sCgsqYTCYYjUZ73nsn4z4IencEL8Evdob41mAsN4X/eWm3DhBzfjY2/m+E4aa8bjafQrv9Iej76PMrgyv44tUvir4574yxesPCsr0gBcROvuf9WDhyTG0ryRCe76maPzLBlCLpvI50QwF6o91G/RMfh7Z6AN8ZTvAnvSF6k3X0u2dh71yHe70Pf+CCV9tCFsKNPNiUW3kOBgfrcB4w8L7lY3hk4yyMkdrn1DmBIHsGiW9jmKS4NghwJYixndJVDJhEI4TWNsaVc9BNVXi1BD4nmydxcvE0tgMdL6+tYTTZkQKwjpnhoaUITx6swkKKzuZ1bG9PMJxEmPgtjCaPIPSOonXAwTG7j8nV13F9ewfj4oZlQ8NRaDiVZWhSrlQ86EwOcKlTC6iZD5WLTBYjscboOW1cDedx/sI5OV55FkLPEmQ6EM218WAVeE+8jspyFd7hOZhzVWheSxUqdVsYaDYuj8c4M+zj7MRHL0sR5RES8KHIPJ5M8nrm8wHm0YOTZZhYLUzcOeReEwv9BhY2q2gNKvASFzYlEgbd12zYVVdYHnPOhdFyoHkGEiNFmPnYDNexNriOtdENbIw30GEu0b4K9LZm45C3ipOLD+GhA49icfWwsDxv5zXP/BzanY+6gfSUrt2NpSxPlamTvUtg0nQgGcP0e7D7mzAjZbm+5/crHoz2nAAYmglMXckKU4Cb6szcZ3Dux/146yP2lfzuVo0Sve816O5nFnlMTkNZirtlXzSCpbfZEU4G4ARb0gi4JgpwcaAuA+nC2bC0gBdAx3pOxt76ViUAk5ysXDFjZLnEAp/slhr8x8FEWJwwoBPoGFFCNioqAFdUACgFumZvr5zsohkEC9/qmiE1mijThWUDjoVMyxGHAdLAR0J2qHBCfjtC6oXrhirGq5mwCpmgkgBaMKRA7679OnuOlaRoMxUCxecTYJkVYLEAjPyMUuCX69d2C/6yaW9xvg8B9ML//r/jXWuMsJ8GrFQq0u7H/fhe4n/0RgKAGD+x0JgCoDDcwPrGZ5EmY+iGi8WFz6BaPbHnbzmr9NW1r+Kl7ZdE+uNdC3B41ETVqaLamsODz31YpEuMpBNI7g+TYVX0EZ7/OhAFUqOj8t73wn36abwaxPjj61vo+F0MemeQ7FyDc62DpGcgyzwcSH14sYWaxkGkhuFcE8bDNXzwwYfxyKgH68JXVU2hvILA/BDi8QIGSYYr/gRX/Bg7UYZeMkEc9uHb15HXrwCuzyozmLPm8OD8g3j8wONw3Dq+ffk8Pv/aGUR8gFIK56Z4dCXH6dU5hIMBNi6dR7fHKuoJgnAJ4+gRJI3DOHbSwVK8ju3LZ3Gu18c4VHUtqpqOY5qOBzUNFduRQbduMi/GgZa7yCY5YtqB0xVMG2PkerhmtnH2hoZw6wyM0Q60PBHwE9s27IU2nnRCPGBvwjsyD+fgg1L7gzOZiWbhtZGPl3rXcS7fxLamI8kjcVFj6MjEyKCVD9DMR6jkNCaowjcr6HsPwbJqWNiu4fiVGhaGDZYWhG244tCmVwyY8y6slSqSWoYon2AU9tEZnsPaZRoYbKGT9dHLR+JytD9c3cVKdQUHWodwYvkhnDz0yE11ot7KIIsjgIe5OgQ9vXBPMT6GWIsmEWwthqXFsBGJbM1IfBiRD50GFOEYWnSHGWVali4swFpZgbm8AmtlWaRq9yUc9+N+fJ+jNFpo7FUwSJAl2g+MyDaJ1Tmd99Iiv4k9ZXJFX+ZBqYI9QDpUrFMxAXdLoETr7xIglQYQwioVbI+sv9huuU3+jGCFmmY66pG1ItBy6oDp7M3hIpBwHJl0eadjynzNWMqXLpSiZCCbhAym7cGcWtTPTADd5j7J9YbRBKNxF5NxD2O2URfBZAB/MkA4HiDwaVIU7dpkU/qn62JqxKb8/8ncKTt6MTviOCGOJA9LSzPobGSm4hR6nKh7fjyExhwt1thiH1O5kiM3KJ03FeM126YyQQs5zw1zu8h4JUV+J9efpDDSDE5qwM0MOLkOO2XTYGWa9AK0eD4NA7lhIOP+mhpSMmuWgdQ2kFg6Er7H45opxcFH8MMV98QEEVm90cO00+ngnYr7TNAPf3yjP8aXOiop9FNzDTzTrMryaHwWW1u/KzUlbHsey8t/Gpa19xyvj9fxhStfQD/sI59EWLluYClvyczOgVMP48jjT0ldlTzOEJztIrqu9NCakSHrnUF8/ay8puFB/dOfwo1qHX/QGWKD1cNHFzBavwjzxg7QyWDHGtpZgGoCNDUHjq1j3Kyj9vgRPPnowzieAfr5PwDG28jpDJfS9OAR9DMdV/0IV9MUG+MYO34PcbAFeGvIWpvInAgtu4VHFx/FU4eewur8Is5vnMPXz1/EhW1KtNRnXaqneOZwC0u2hv7ONezsrGNE6RSZreAQxvlpWIsH8dABDV7nMtauXsLOaIIxq9FrGmpZDj56HzQt1FjJPhzAdHToVgVJ1lK1AeIMcZZj5Nq4DBvnt3qIu9dgjzvQslRkfQQ/abWGpbaH91p9zC8YcI/Mw6qq+0KqWzjjG/ij3MEZ3cFEKqZnyKRiu4YmhmjnPTTyALaeIzdrSO06MrsmrM7/v73/gJYlPeu70V/l6hx2ziefyUEzikgCBYREsGW41zbmgo3xMibZWDaw8FomrmWBcfxYxga+ZXHXtU0wWMAHKIDSaKSR0Iw04czMyXHnvTun6op3vbV37zlngjQjnZmTnt+oVF3d1XW699sV/vU8z//JDGyKDYfZRpVKv4CrWgYazu7J1cCczhFVlONRi3Z7m3pzg62wznbcpJa06CXPGRiou4gqEug4GaZyU0wXZpmrLLIwtp+x0sRVL76/PJ1tr5dOP0wjPF73yhqC2A9g0MUNu7hxF9dvY/tNTFQTypfxj6m+GZnsjmNapZJOqfAZHxebZ0G4lVCXcCrtTpk+qJtlahq2wWvtTruPlRHEq9G8VF1oK0GlxJUSReljFYHaFUnqsRJQtwiX24rvNdL9Kgd1VZs0sjhXdcwqrV9ltChn1ZF7306tlZ+mAKrH6j0j1LZHJhN7ZhOjGijdSiNCXrTT5FfNRzbqX5UkSUWZEnHqXPNyUd/1n9z7T7hpI0Gq7kdtWBCuBk90+nsC6K2VQiqAUqOA1qM06p9Pn89m9zE5+V50/bm7TeoA89jGYzy68Wi6vlMPmN/IUjBzaWPJQ69/M9XZub2mp96zNWJvJ/qgWT38U1/Yqf3RNbIPvp74vvv4i1af42vbeIMV6munSJY30Rs+eAmlaEgpgqJuUbA0olKJ8dfdwbfedz9F1Y/h7Kdg+1R688zvTzDkfppGmUtDn7UkZrnjsdVtEg+3sawtkul1nILB7RN388DCA+yfXGLgLfPEhWf4k69sU+vtGlNqCYcm89w5UcIa1Nm4+CTHBgO8QKWoGXjhPvrWnczeNs992QG9C8dZ+/Ia3aGf1vykokM3GAsjDtoWVSVihluo3uOxPc0wyBH2YoIkpqW7nI8STrVr6N2zOL1GanDgxhGGOqhnMxQLBQ5nYg5kumTnbJyJcfSwRay1qfWzPJrk+WvdYdWyUX4E6i9uEDCuNShpygZbmSvliZ05zMTBHVjkhxnGO2Wq7RwZz8YJTIy0tkflfKlULpOkajAseLSiDZq1DeqtJutJjc24QTfppznPlutiu1mq7nhqgjFXWWC2tMB0fpqqW93rgfGNoowJ0uagqbDZETnerth5qWahadXAYIAV9HD8Fk5/G2fYwjWfV6ujyggsc8doIF9I09h23NV2+4qMprS5oyvRHUEQdqI3SoioSdUSvRQqojMSRqlIau8IJtWodrfmMz1apVGfUQ2SSlEzdmueol2xNbiyzklN3a2d6aU+n517LnI0ih7tNrdNH381d7fUpch84XvU/Do8Bqbpamlex8tjlJqmTBxeLqP+UV9LYH01oaYE0SAcpHbp6TzsMwh25+EgndLImqpo3k2pU9PIze/5qXWj52/aZqkvVhN0rZFI0I3L4+0+f1lrpY/fUMrz9ko+7SezXfsE3c7x9Pli6V7Gqm9Pm1WOUL0OVOPTtd5a2uthat1ksptJd77i+GTq/uZks8T9II3+BJs7kQHNhrh1iuDCzraNsSr5d72LZzIFHmp06Pkt1lefxb+0ilFvY/VD8kHEeByT0y0qho5bqDL/4P3c+cADmEEDLnweNp9Jzw1Bt8Awuo26PcclP2GLmAv9Phv1BklQx9VaBGOblGYc3nrwrTyw+ABJVKPWPM7jFy5wbE2n5+98T8dyuGN6gkUroVN/hnZ3lYEqik8SwqhE3ziKPXY7B6ezjPvbrJ09zVa9zjBUxaIqH1ijmEBuOGTWMJhX6YR+M+2BEduLBIFJEGu04yzLYchpr07YWyPba6WRHl3lEe/WkpSLeQ5kEpYKAW4pwZ5wMbUOidemr+c4r03w15rJs06WhukQalpqozphdJm2A/KujUGZnBI7cYVKUKTkZcl6DnZgoqtMjqFKC9tNITASYj0myIf0831aw600FXA7abEWb7ORNIhM0tQ1J5fDyWSZLs0yV5hnNj+bTlerYZ/qsdNrDOnUPDoNLxU9/l4q5QtRuep6HGARpGlsZtBLe+cYnRpu0sdMo2K7aFpqCW7NzGCMj+84q6maHWVMcQOdQARBuIVRAkiJocuFlVq+/PFlUYurSpraVwQ7v+O6N4o6jYSWmtRrL+d4uhdNG1xmcqH6LmV3BJcck28oXhVjhMvd4a4XRATdmDza6vGp3QjQ64o53lktEMdeaoDgeavpnajxsW+mWLznivedb53nk5c+mYZzzUHM0lqGQqTqhzQW7riL+dvvSt1Lh+da+Bc7aW5u2kfOHTA8+QWSXjc9mGXuv4/B/Q/wl60ey4MBte1zbJ45i7m9jT3sU+jDVBKT0QyqpsVYocK+++9j6cH7MXsXYflRqJ8liTX8Vp5hsJ9tZ4GV2KKexJzze6xu1dCDBtm4R1huMH4wwzcffTu3T+6j232GzfoJnljxObXl4kcaum5RzI5xuFgiN7hIt3MMLxgQpV2bDYYskhTuZGl2kcmkQWvlLJubW/RVxEfdrUk7OptkghC3PyBHwr6gSba3RZyZIjAXCGOdXuiwHVmc85Xb3YWdiE+kuugkGLqW2j1XS3kO5WCqDHamh11Sd7f6JIMmw8RiW5/gSSPL047DWaeMp5uE6nxhJExbA6ZdncVwkflohqpXIB9nsROLuB8RD4LUkS9WTjma+twRoRbiW0P6Ro+h2SeyI4b4bCR1NuI621oHK5fZFT558tki+4r72Ffax1x+LnX/uxqodMBO3dubVJ+dy3vsqJozlV9uRKpuR9XrDNNGoeawh6nSCwPlbLjzm3s+KkXNnJpKRY81O4M5Pb3jwCMIgnCzoi4vVZpeKoh2hZFKy1ORJ5WSdXlfp6+2DbXO3ntUfc+LO9C9uHW6fdmkXNaM53pHpdvd3fZLXQqr9dN6ruxzgmtPeF0mwlQkR/qbXRe8Zu5w1xoRQTcW6qf2uWaXR5o7tTlvLOV5WyVPEDRY3/gTwqCd9vyZnHxfmgZ3eej2i2tf5PGtHYvsYlNjflO5slmpbbGK/hQnJglWe6nzWzzcSX0zSiZR/ST+qad3lstlsu96J1/OFPlCq0unV+fc6ROEq2tkvS2yPZ25KCGHRsF2WMiW2X/37cy8/j7s1klYeSztHxGHBn67QM9fZMOeZS2xaRFxNu6yttnAGrZS8UNuwPRted55z9uZzxdotb/Mev0sx9ZsTtcc4sTAsipUnXEmGGD1nyAIVwl3+wFFeoHAuY3Z+buZNgKGGxdYW12lOxym4kjlG6toiMr/1TodzG43FTTTgzoT/W3i7ByBtUAQ6bRDh00/YG2wht9dwQ59jLRhqIGTyzJeyHB4zGI838ayO1iuapqnDBKGdLU8daPMsuFy2nE4mS2xYRRT4aOcfDJmwowdcBezHA33MTEok9FdEj9m2OwStjyiICBMAsJ41w3OjAjdkNDZmXw9oJl0qNOh7fh07WFauJr24XEzabfx/aX96TSTm0lTDr6h32KcpClsqr9OdyR6WjvFs2kKwGBA1OthBgOy9HCjNrbXxjbCKyM6z0M1CDUKBfRCIY3uqGiPUa3u1OrICVIQBOEbIxVFwXMNb9PI02g+ikR1vr4aqD3r8V2DCPXvvNJeVSq1T23n8j5Oe/P0C7zwNYW6macmJbi+5lxFp/TLzDG83dTEy+aBcrQbPmejrt6rsiTUey/flvUNRrvSv5O/8++qz5JTTY1vQhF0PSIi6MYhUn2Atlsc6+6kp31TucCbyzk87xIbG39BHA8xrSLTU9+FbT+3E6l81Y+c+wgb/Y30TvzCVo5qy0xzVCvTsxx6w5vRBuCdaBC1d4rPVR2J7nYYPP4ISX/HdS5z7z30H3iQjzT7rKmGnBdPs33uAnklCPyIBU+njEbWtJhzSxw5ssDcg3did0/D2hOpHWfk2XidCvVogXVrgq1Ip8GQZ2nQanQp9PpkkwGGEzF/Z4V3PPgWpjJZGo0vsFo7yxNrGc7XbXSjiG1NkotdCt4ZMvHTxOxYpKpCxNBeZGzqXmZzFaitsHrpIu2BR7Br0elkc5TGxhnP5midv4BXr5EEHtlugwWvgZ6dJ7TnGEYG7cBhy+vS6J4n8mrouoZlGLi2zXg1y6GxkKn8NpbTh3iArxrIRtDRczRMl0uOw5lckWWryKauHN+UW4yq1zGoWjF3m2O8PtjPlFfGxSX0fQZbTfxWn9D3iPSI2IjTepfQCveET5CHXiakZXk0tR4drY9h21jKpW43/XE8M74nfMbcsa8rTSxWYqcXMOgEDLp+OlcmBaquZ9RzZ1SzE7XbmP0W7qBGRuuTswMsXRW4Prc95SC00ydHCZ3i8+aFHYtVQRAE4dqibiYGvRdGfNSFuhI6o8jQaJ6KhOfVJinHPbUNZWGuIlqp6LpMfO3Ne6+O6cRrhaaD5e4KopE4Un3xdnor7Qgt9ffbjdyNHofPi+IpsfW2f8FNa4wgCF8Pgyjm/9lqcmEwREfj3eNF7sln6HSeYrv2mTS07bozTE19J4bxnOW66ufy52f/nI7fwQo0DmyUyQx2mtAt3Hk3s/tvY3iySbC+IyA0U8eaMhmefgzvwvm96E/uHd/CE/kyn91ssba5ztlTp3GalygOW0wMTKYjg7xpUrSy3DZT4cjrD+EGK3D899J6H7+bodOdY1ObZVkr0AkDVuI6p7QWYbvHWC9iOhniuBYLR6Z4x1veRNV1aDa/yIn1Ezyx6nK6VsY0x7CsSbRuj3L0JCX7XHqASZ3T7Bz56l3MVw5gd9qsnjvNqV4PL9g5wNiuS3ViisX9+6n4ARtPP8P61rPEXg+912TG75PPzRIWD+GFJu2ewfagQ6/3NEHY2RE+GYdi2eXI+IClwkU0SzWbg24IPd+gbro0MhbLlQLLbolVo0pTy6OpkJFqzmbYuKbOYT3P2+P9HPCqOIm9I3waTTrNVULVF8JQrjIJiZ2QZDTs6RzJlEMv59PQu9SSJs1gJx1yB4sMpTTaM5ubTc0MFguL6fIr7bvTbyuh46eObErwKIe2y1Pa0nVVc76B6tnRw/K72L1tMlGHnBVgKcGWHaWvzabOgUaljKmahJbLqUGB1OxcO5SoHQQRfT9K6+RUDZxi5/pDRfF23JJUaqepP3+u7/ZY0veeVzcF1G8nVGJZOS0GUTr31ePdeVqXvbvNtIWJpuFYBlnLIGMbOObXV5wsCMKriNrZVV3QN1p3ZOxair9swaVS66LnGua+5Hw3ejQSGkpQKJMKFcFRgiuN5gxeYu499x1T0wgVRXJefJ5GanZTD/emXRfBYGSKkbo6fWP9qlIjDeu5eqobBIkECa8q237IH282aAQhtqanjVD3uRrbtU/tGSDk87cxPv6uKxqgrnZX0wiQsnLM9Q32r+cwIw3Tdjj04JvJejn8C20S5Zuv0rpmciS9iwy+/NdpV+O078/rHmB47718tNnj+FaDZ0+dwtteoTpYpeTHzA9MKoaFa9rM5hzuv6NMJd9DU6lkoUG/mafmzbKcjLEWq0anPc64Xdb0FsWWT6WbpKKgmqty+LZFHnjgNlwnptn8ErXG0zy5ZvPspotmVvGG4+jdbWb1pym7tZ0vaerYhQVmJ26jGLhsXDhPo9Ohrzo/q5ctm2ypzNzSEvOTU2Q2Nrjw+ONc2t4i6HdIhj1KaEy4kxjGGH0lfgKdlqd6GFwkRNlQa9gZk9nJmKOVNVwnYBBAP4xp6xqNrEs9Z3MxW2TdHGPbGMdTDfd0SDTVZ8BlxsxyhzHBvdE4i/0MZqTj9/t4nTaDdpfQH6IlWip81PHcLGbIHhjDX3JYt+osd5apebvf+TIqbiUVPTP5mTTF7ZWIHt8LU8OCXmtIr+nTb1/ZdyeN7qheEZ6HFgyx4wF21McatlPh4xhXRnlUkzdzZgZ7YQFrfgFzQtLXXi7qFBJEO+JEiQg1Vw6GSkCoerWdaWc9NU/r3HYfj15XZ6HRejvLz62rtqcEjxI+XnB1GxYqQaNQ/+bXi9pEZlcQudaOKLKMnck0NCwlvlR2zei7cdl3VDXYly0buo5r6Tim2pZ6bOxtO6u2bxqpcBMEQbgqROFlomtks66WRzba2mU9ol7EoW80v45s0CUdTrguON33+PPNFn4SUzIN3j9Zoay12Nj8CIFfT68eqpW3UCo9cMWd1FONU2n/H2UDWW4YzG9l0m7OuXKFQ0ffQHxxuNfw1Kw4GJWQwZceJtzaTp+zZmfJfss384Tp8omNJs+cOcvayjLlwQplv8PSwKAau2m/nKxlcd9MwoF55ezlEQ5N6vUS64MZLlCiHkU09AGnc238qM14Q1lmW5QzZWZK0xw5ssS+o5OYzpBW6yvUm0/y7IbJU+suERU6/SpxZ5MD7jNUXRX90DAyDtXqISadWdqrDWqNOh3PTy+EDMMkUyoxOTOXRn2qvk9w/AQXnnic5W4rbdiWxBGulWHSGsfVinRCk46v0/dq9AYrJJqHpSl3PY2FyS6zxRZelNANQ3q2xnbWoZa3WM1MsWlPsW1UiAyLRFldmgXyWpmDepk7oxJH/Qz5obrxNMAf9PEHAwa9TtqBW4t3+iCo/6kUvcx8Fe1wgfPuGqdap9P+BpejrKqVe9t8fj4VPhkltl6BNbUSPa3tAe2tQRrtuTyqo9LZVNNbJxlgB91U7Diaj2NEmM9LaRvV7lhTU5iTk1hzc2mPnZu5v04aKXueMHnu4vsyARLvvKYiI2GkxE28+3gnMqJEyEiUeGp5V5iodV4rLhcdSmik91LTn+HOb3EU2Yl2v0P8IssvtV0lPpSIsU19b65Q74lU/0i1nfRvufN3GD6v4e1r9d2zjjp27QijHYFkpo9Hy7ax89nTSf2NbqA7s4IgCN8IIoKEa4r6ST3S7PG5ZiddXnBtvmuiTNB7PO3/kyQxhpljcuK9ZDLzV7xPmR88svpI+nhq22Gq4aQ9YyZm9jGTO0i0vXN3QncN7H05/DNP4h07ttPcy3XIf9M3sb3/IH++1uBLZy9xYfkShrfN5GCDJT9kysul4sc0dOYLMW/Y1yfjaASey8ZWnouDaS7qBbpJwJrTZyXbwvK6zPVcqmaVqcIUk6oPzf4xJvcV0K0m7faTtNrPcmLL4sm1DF5UpNmqEvW2OZQ/waTbRNM1coUyk6X9GB2brc06bW+IH0ap6UimUKQyOcW+g4eYyOeJTp2j9fnPs716gRXV4EylzZkWlpVj2hzDjjN0YhvPT/D66/T9DTSGuBZUx2MWxpsYhkc3CvHsmEbOolVwWcnNsG5Ps2WOkRgujlkmwxjjVDjiF1hq+0wOfBgqQTgkUPNox8gg0RL0WEcPdQwVQSvkyZSK2AerrJXrPDs4yWb/uU7lqmnbUnEpdXJTLm5ZlW/8Cu2p20r0qIhPc5g2I437feJul6Tfxw46ad+djBGQsYJU8FxxrWfoO/U7u6lsajJVY1GV1qZ67dxkF4bqwrzR96l1fWo9n/YgoDcM6Q7DNIqiRMCriUoXUxfoowiGugBXz6loiwpeqL/36LGaj9LM0mk3zezKdXeeUxf1VzMaooSMEkUjcZT2GjOVoFKf6ZVtV/1N1d99FKUaCSOVpjcSkWoaZYiMvmMq2i7//rvLKqI2Epuj+Wj7Snh+vYy+24v//cE2jStEkxKAOcck5xjkHTOd1LKk/gmCcL0jIki4ZvhxzEe2W5zs7eSs3l/M8dZCSH37k3jeSvpcNrs/TX8zzeeag6moz8MrD3Ns+1haw7Gw4TLWcdK7u/Pjt1NmfC/1zVoooFGj97mHiXs70QbntqN4r38DH2sO+Pjx86yurxEHHca9LZaCGouDEllsXENdqMU8ON1kaSLBD0qsrma5OJzkvFGgp4UsZ/o0M9uMhQmzgwmmsjOMZcbIZ7NM7StSndcZ+qfodo/jDWucrdk8vpahNShTbxaJ+3UOFU8xm21gmhrFYoWJ7AK99YRmt5dGfdRO5+YL5MsVFg4cZHpyCm25RusLj9A/9hhdr8GmbdKzHOVTjWkXKFNBj7L4kUGiuj73VhgE2xh6SCGbUJ3wqeTrDLUI3wjpuTrtcob10jjLzjwb1iy6WSXLGJmwQqnvsK/jM9fzKPf6xMGOE46q6YmsKBU+Ks1NiR43US5tWexMJo36OFNFauUuJ8xznO+eT8dPoS6QlOg5Wj3KUmHpZbm4qYvSnXqeIf2Wn7q0dRte+rwSO8qwIGp3MPtNcsYgrd3J2f6eS5vqZ2RUx66o3Ul77hSLN1xKmzocp7Uo0ZUX0c89Vq8/F40ZXRy3vYDOSzRr/WoXw8+/EFfiQr2u6mXUNErpUnU0jhI35ijtS98RJir9a3f+9YgI4eUzSg3s++He2O9MOyJ37/cQROlvRYmxbyTN78VQIilnG6kgKrgq+mReIZ7UXP1uno/6Xajfh1pH/X5ytilpfYIgvCqICBKuCc1A1f802fIDDE3jXdU8i/GzNBtfTBuhql441erbKBTuuuJiKYgD/urCX3GudQ7CmP1rOUqejR4ZLBXvIGuV9lLfrAWXwaOfwz97bs/4IHnrW/njKOEjz15ic3sbLRpQDFocCi9yaJjDHpR20qJMWCq0eXCmQWJOs7qSYXVQ4ZxdoanDpXwfv1RjKXSY8/Yz4UyQtXK4OYup/Tky1Q36/eMMvEv4YcLpbYdnNrKsNcZotVz0sM7h0hnmc3Vs26BaqTBmzdFYCWn2B3Q9H9NxyVeqTM7NMzk+g9XXaXzhC/iPP4zRXmOYDNnIFuhmc2i2cmqp4iZ5nDCLGcZE/U16wRZh0sY1EwrlhEqpjpHxGJoxiRXSyzvUKwVWCvNsOwfpaHNk43GMXg67C/OdHvt6QybS+oqE2IoJ7TDtz2NkHXJmEUf19onstAbLclx0w0DLGrQKfc7ZK5wMzuArl5hdlHvbbWO3cbh8+KtGfFTdTm9X7CgTg5GRQSp4fD8VtenU7aF7HXL6c6LHNmI0x8GamU4NC1Qqm5rr+fwNc/GtDrdtL6TWHVLv+ek0itSM7vh/IxEbdce+mrMZy9uUszZ5Z+eCNZ1sM43MCLcG6remfktKVCsRrf57sTostY4S1ypVMp2inZou9bvs7U6dYXhVU//U7pqzTfLuTpRJzYvpYysVV2pSr4tQEgThlSIiSHjNUc5vf7rZxItjcobBe8sBdvvT+P5OnU4ms8j4+DuxdgXNiEE44C/O/kVqga37MQdX8+QCC8fPMF84gpsppK5vzpEyUf0C/UceSQve09vW997DHxTyfOTMFs1mL63pyUdtbosvcnto4XRmiBMPw4gpuj4PjK9Rzrisbo1T65U4b1fYNm1W8wP88Tp3auNM95aoWBUMzSBTtBlbHGJmz9IfnCKOA/q+xjObLsdWJtmsF+h2Ihxzm0OlCyzkmuSyBmPVCmVm2Lq0I356fpA2+iyMT1CtzuBoZTpPnUJ/5iGczdMYUY+hBtu5Ap1imciuEhllnNilNDRxvB79YJt+UsdSdS75mHyhTa7QI7BVaqFP5Gq0yjm2yhPU8kfZTJYIhxPo3SxJ32BmMORoP2DOD0msiNCJsMYyuFNFctkKrhJZA4NkcPmFToKfjdnOtrhor3MxWk4F64icleNw5TBHKkde1MJaHVqUyFE9ePpNFeEZMmh5xN7OpEwLYm/XvMAfpPU8rhnhmiFZK8A2InTbSpuLWvPzWHPz171hwci9rLd7t743jNKLyZHgqfeG6QXn1yJ1L9u9c55GZdRd9t2ojLrbntZ+qJq23RSx3K74UWlogvBqoATSKL1S/b67nppHBLuRyzT6tCu4nk+aergbyVRC/+VEqFR0UqXjFV0rFUmpMNoV8+p5Nc86O/VPN8pNEEEQXn1EBAmvGern81i7z6frnfRO47St83brBFHv8bROxzBcqmPfTD539AUnqtawxZ+d/bN0bg0SDqzmyEQW+UGJmcrBtFGmWXawFyx6j3yWYHk5fZ9XLfB/Zif58+2YXifESDxycYe79Uvc4yeY7SW8YICu+7hOwkJum0PZOlvdRTq9Eit2mTW7wGbex59qcJ8zx2Rrkaym2qSCkwspzm6iZ08RhTtWzvW+wRMrVZ64MEGrZREGPYruFgdLl5gt9KlUbCbKVax+hc1U/HgMgjCt9SlUJ8g4E3Q2YuwTn6N46cs4/TrEASERW+UKjdI8gTNJiEsuMJgcJMRBl25SI4jqmPmQYqFPttBFz8QYRohhBnSLLq3qGK3yETbCeTYHs8S9LAwc3BgODwIOD4ZkrBBrIkdh3wSl+RmyZiGtrwo2+3smE4qIiLbbZz1T46x5iSaXW1mTmhmodLcj1SOps9vzx1SJANV8tL7con6+jtfoEvcHqXlBamDg+1h6lH4eJXZGU+rUptKuxsZ2IjyTyrRgIl3WjGt7Ya++k7roG6UfqQvBVOiouVpOU5F2LghVNOdrHVGVwKmoaE3OppK1KWZ20opGRe07qWXXr9AThG90f+rv7j8qhVOJKiWoOrspnZ3d5VeSyqduDKh0u530TXXDYCeFc3QjQT2f7lu7Nw2y6gbCbr2T1DkJws2FiCDhmjRAPWL3uDv6LOwKB2V9PTb2tit6/1xugf2x8x9LI0GZDuxbz5IJHUqDMSan92PZNva+Eom/Su+hh1Lb63bU5+OTZT6sTdAbGOiJR54+99ur3DccoDX34Q0jYq2XWlVXMm2WjBWC4Tg9b4am4XLRGWezDNFsmwcqi1S35jGGVirgDLtDfvosVv5Smq6h9oxLjQwPn1rkzJqDN4gxjSbj2Q32FzdZGAsZH3cZy0zQXXfYWg9oD4ZpUbSyts6VxzG1MdqXOpRO/BWV9afRgz5apGwOItbH97FRPUholFP/3OIQyj54UZNBuIaW7VMqdCiV+xjZBNPw0a2AfjbHsDJOOzvHWrTAJW+ewaCA7ufR0JnwQ456PvtcyC9WKB6YoTQ1he5rBBu9tK/SSPio792P+tQybVacTS5Yq0SqV84uqimtsq9eKCykk2pg+vwLBpXi1tzsUTuxRu3MJkGjRdRV3brV+xNylp+KnkwqeALsnP2cUcFlNTypYcE1dGhTgmaj7bHVHdLsq7EM9mptXkmK2vMdvNRdayV2xvJOKnxKGUvSfAThZdx4UAIpFUa7+6GKrKY3JNJoVJRGp75RlHgapYwWdud7aXqjZUdSSQXhRkFEkPCaGCCo9LdzA9UjJuJ+4zT7wid2evaYBcbH35EaIDwf9XNT5gcPrz6cPi42NBa2smQ8l2o4ydjsEmbGwj1SYnDsiwyPn0ibpT6Cz/8eO8JmnMdIfPKGx4OZde4f1Ekai/h9l1BrYVo+ObvDGKvkIptBcBBfM1h1x1mpZGCpz4Oz+1Px422ru/YRUbJNYeYs2bHt9POHicZjF5b44skSG/UEnT6m1WA2t86hsS77ptWdfA1tUKKx6tLuQne3t0+2VCFXGCfwS/RWm0yc+cSO+PE76JFHZOpcnLqLreJB1ZETM4pwYx3bD0iCdSJrg/FCm/zYADMXYpo+mqETZosMs2PUnBlW/WnWg2ma0Th6qKJXBk4cczCIubPgsLBvnPLhWdxCgUQ5Va338Fe6RLu20lES0QpabGYaaX1PI9shuSzwUHJKabNSJXqUq5v1vC7aafF+P6R5YZvt4ys0L9YJW22ScMe9SllSF+whpZJOaaaIPVFNjQvMagWjUkHPvHxr7FcDlZaj6nJGKWpK+Gx2hqno+WqpOekdZGf3TvKeJfHOPGebe3eZlQASkSMIrz4j45AgTPZS8kYGInuGIvFOrdNzZhKjSO4r6zul9u2ROFJpp6Nmu6r+9XIXROOy55WZSMHdqXPKS42TILwmiAgSXlV6UcT/2WiwPgxIwiZv1h5lTq+nrxWL91CtvgVdd17wPlVI/9DyQ5xsnEwvpGe2HSbqDrlOloo1RWVmDquSwZrV6H7qr/BqmzxdX+aPc/M8Pn4QjZiiEfD60jb3d1eJtqeIBiXCuE2kd8laLdx4gyo6cXKYGIO6XWF5rAgHEt68/yCV5jzb53tEUYA/XMMdu0BlvolhJtR6Wb5w4gCPn7foKxMDq4Vj1VkqNbhrzmO2FGCFFp2tDJ12no6348Jk2jbZYoVsboJuJ8dgbZuZ8yrycwx92MGIPHzL5vz062nkF9CVXFInzgQyKhWQi1SLa+SrA4ycShcDzbDxnSJ9s8SaucR6sp/1eJpBUoTESl3zlPPakm5wVznDnfsnKS1NopvGTkF0a0iw0iXY6KeueqqWp+E3WHdqXHTWaOc9EvUBdq2sVe+eheJOtKdoX7kvKWvqbnNIZ7VB6+I27Us1hrV2WtczQtXvlPIxY/vHKB1ZwFlaxLgG+6S62NlLrxkG6Txd3r2jrFJw1IXQS1HJWkwV3dRUQKWpqahNMWPJBYwg3ISoGyJKDKljxU79XkBXzXePFSo1T82vhr28Ekmj2iZV56SOL2qeHmN2654k2iQI3zgigoRXjUYQ8kcbDeq+6iVzgW82nmDC9LGsMuPj7yaTmXvR9231t/j4hSGSUOkAAErUSURBVI+n9T8EEfvX81TaLtlmlkplhuLEJPZikWS4Su/hz7LRWeeheoePzt5HrVCmYEa8oVrn9cMLBKtFwt4Eod8n0JpYRg2HOpVEx9GXSPQcXbvA2niBzNESrztwgMpghuXjTYYDj6G3hpG9xNi+JqYbcXZ7nEeemeXshkaY9LGsBlm7yW2TPe6Z6ZI3hgzqLt1OmW7PxgsjTMvGLRSx7QJoZVpNh2h7hcVLn6C0psRPDzMeMnCyXBx/Pd3CPKExEj8RhWidcfcY5WoTKwdGohFZLoFdoW1NsKLfzno8x7o2TkQGwzTRTRPLMDiQz3B0vMRt0xWKY5m0B5EiVkXKaz2C1S5RN0gbmjaHTdbZ5nx2lXZpQGQme9Ge/cX97CvtYzo3naa9jfB7Pq1L27RX6nRWm3S3uoTdXpqSOEIjIWOHVKbzjB2ZoXB4Yafh6KtsWqDSZJSYUf1wmoMgnbf6KlUmeEUOVqqGQKWoVXMWEwWHyYKbzsVYQBCEy1GXSCpyNLq5osSSWk5d9nab5yqRNGqo+9zjnR5SO+l8X7vGaeSY59o7DXvVschVpkC7UaeRQcrIul5FmUbrjeZSSygIiAgSXh02hgF/uNGg43fRvZN8q3OGkhFSKt1PpaKiP+YL3qP6x3xl8yt8af1L6ePMQGdpJUOpk8PtZqjOzJOfHMM5UsR7/BGazz7JU1sXeDgZ45H994Jlckely3faZ/Av6AwaE8SDiECvo1vbZJMWWSyKxjRYFbpOnvZClfk7Frlr3xGMgcOFp2u0a91U/MTaKmP7WugFnxNr03z55DQXaxGJ3kzFTzHT4+6pDrdV6sSDhEGnQqdTYuAnGJaFnS2iGVnCqIDXd/GGJpXmU8wtP0Ru82xa82MmAQ23xGrldUT5Bfp2gqYnaQ1TWb/I/uITZMqkDnShXcAzy9S1g6xoR9NePnWrgmZaaVRH/ZvFnMuhUobDYzn2jxWwVahoF9VTKawNCFZ7hNsD4jimM2yz7de46K5TK3XxsoFSLUxmJzlQOsD+0n4qboUkCAhqdXorSvA0aG90UlMDr+en9TyXo1LcsnZIYTxLcWE32rMwj+68MOJ3tVAXGPX+c+lqm6pep/O13dWUwEnTT3Zz+dO7r87OnVa1rF6TYmhBEF5rMwiVcqsEkao1HNUctgdh+lg17v1GUSm5OxbjOyl4xd3Ho+NgTmzyhVuAtogg4Wqz6vn87/U6XW8T1z/Fe7JrFC2biYlvfdHaH4WK+nzi4idY763vpL918kytmOSbOeWBxtjCItmFKuZ4ROuvPsqF5Wd5YqPFQxN3cnpuH+MufMfEJaYvbNDZGiPsmGhancSukdPamNgUrTKmOcOwMoZ1ZIm777uDsWIVrxewcqLB9nITz1vDD9epzLUJS0OOL09z8twka52Q0Khh2w2qWY97JmosOpuEXpled4xOzwbdxHTzBLHLMMwRDLP4oUMh3mJ64/NMrH4Fq9XAiIepzcBmdoyt8v04mVnabkKkR+jJgJJ9iSMTz5B1dHwzh28s0LDuZc09woo9Rdu20Q0zrf/RXYOJnMPhSo7D4zlmXfuKC3b1t4w7fmpwoCI/sSog9rvUvQbr2hZbpRbtskdsJGnER/XuOZzfR74dEGxs0l/ZoLncolXz6fkm0eUFQbtRHteBfMWhMFWgtDhOdmEKa3z8VTEuUCkpo+hOreenPXS2uz6Nnv+iFwbqTmgpa6Upa+WMteewNjrRO6ZEcwRBuHFI2wn4O1Ej1QxZ9Wm6fK6Og6q+SR0r1eORHfkwiPDCV9YYd2Sprwxb1LFSRY9G7noju3H9sibK6tSjokyjekcltOQmknA9c8OIoA9+8IP8n//zfzh+/DiZTIa3vOUt/Oqv/ipHjx59We8XEfTasOz5/NH6No3uWarxCt+a26CcnWdi4j2YZv4F66uf1DO1Z/jc6ucI4xArMTi8WaZwycTp22QLZaoLC2RuHyPaPsvqJ/6cp9cvcGKQ4zOHXsegPMadE0O+LXiazkkNr5NH93qY7iaO0cdMu48XyeX2Y8zNs+919zO/fy5NCxt0fdbPtNi4sIU3WGfob5Eb69Mr+pxZnmB1fYy1QUBgbOPYLUrukLvHNli0G/jeNM1WiSAywcgyCB2GgUMYqe+YoxhtM956lKmNx8jUtjBUvyJiBrrNSmGOXvEeyvYkbTvAM1TD2D45d4ODlTMU3BjfPUzffQsXCvdw0c7R0Ug/s5ZRQstkoZThSDXLwaxL2boyqqYiPlHDI9gaEG71iVWtS9Cj4dXZCmtsF9q0Kx5DVzmwuRzMLLB/kKe8OSBY36Cz3qEztOj6Kp3vuW1rpoGZy1IYz6SCpzBbobg4gV0uXLWTnDqJp3c7d+9+ju6EjlyfVHrJS6FOzjvpak5aq5PW64i7miAIwpVmNeHOzaQ9q/Hn2Y5frdomhYomjaLqKtJUvDz6pGooHTM9dgvCteCGEUHvfe97+bt/9+/y+te/njAM+Vf/6l9x7NgxnnnmGXK53Nd8v4igV5+LgyF/uLZOo3OSKa3Gt+a3may+kXLpAbTL6khG9IIen7r0KS62L6bLE36BfaeyuHULPTZSq+ZKWjifof75T3Dysc9warvHM9l5Hjt8H6Vyjm+ZWGH+5Fm6m3mCTkJRq6O77bS/TKTnKRQPM33X/Rx53b04ZTf9d7qNISuntti6tMLQ3yYM2lhFn207YnmjSrteYTXwGBo1Mk6LvONztLjOfrdHMJim3swzjG0GYQYvsEnIYWhZCv4WE/3Hmao9Tra+hd5VqWIJQ92kbhXZLOzDyh6gbFXoWyE9y0PT+7juNtPFVaYKJnruDWyV38lxq8pFPUZ3TPSsiZ21OFDOcDiX4UDGIfO8fO5ENR5UqW6bg535cEjbb9MatmmGTRrZbhrx6RV8LHQWwiKLbYfJzSH+RjMVPB3fpudbabRHs22MXA49n6MwXaK6b4zyQoVcydmrK/pGUCfYzY7HatNLU9hSm2kvSF2ZvhbqhKlOnuOqf07eSRt/jufttGBYBI8gCMI3hrrUU5GltNntrllM6qgX7rjp+ZGyHE92Mg2SnfYJaj5qAK2O42r+cm3JVcRolJKsHud2m9um810nTVXvdHkEShBuKRH0fLa2tpicnOQzn/kMb3/727/m+iKCXl0uDIb8wcp5Wp1TzBgd3lvsMjv1PjKZ+Rdd/3TjNJ9Z/gzDaIie6NyxOUX5jI4RGKmRwNihfZRet8CwcZFTf/a7nL60zEbP4q8X72Jj8TYOTEW81XsCjg/xejaZbkje3SS2PRLdwiwc4N5v+nbm7zmYCgn1021udrnw7Bnq6xsEQZMkiYkyIeuBRr1ZZdDPsx73GOg1XKdDzvY5mF/nYMbH605Qb+bohy6DwCVMTMwkQ9GvMzV8gqnOMdxGDb0VKF9phrpNU8+zlZ0kyC5SdafJWhki3adjDgjtLrZbp5DvsVCu4I6/kzPuPTytQzurY+RtDCV88i535TPszzhYz7vAj4ch4dZgJ+JTG6Rpbu1hKxU+Ldp0C0O6xSE9p482GLAwyLHQ0JnYjvB9e0/4qGiPns2kDm16oYBTKVKZL1OazFCayGDa33jKmDqJrrcGqehZb+0In5fKa1fpFMoFaXSncM8hafcOomvJSVAQBOF6R6XkqfqmK6NOowj/Tn3T19O/KRVDaVrezpQ2uTW1K5fTaWe9vfYEu6l9IqSEr0cbvLCS/RqiPrCiWq2+6OvD4TCdLv+iwqvD2Z7H7196hk7/Egtmn2+vwtz03017AD0fL/T47MpnOdU4lS6PDwscPlHGbuwckLJjFabecjvJhM7TH/3/cvHRR9lqa6xaVb50z4Nk5+Z4Y2mZ206dwt808HsOM0EPrbBBpCdEmQlue/Pf4PY3vg7dMojjiNWzp7h4/ALtWj3t9eNFGq0E6sMs4XaefmyzkbTwjPNksl2qhs9SZouDmQivXeHsepZ+4OInLnqi4QQRC/2/ZtZ/glxzG6MVwgB8QwmfCo1MmX5mklJ2mqnsBLaWYMUD2m6dXqaLme2SdWC+uoQ9/i6esSY46WrEeQs9b1GwjFT43FdUduDP7XbpXbdusCN8tvt4jW5aS6VEj4r69C2PTrZHx23QixqUPZ3pbZPptkUxKKfper3A4rRvkTjZVPAYMwWyxSKFyUIqesqTWbKlK+uKXinqLqCK8my0h6nYUZM66T0fdcdvpuQyU8qk0ZyRzbTU6QiCINz4KIe6oppcVR/64j3fRq54o6jTqD+Tmo+WVdNbJZZGt+F3ejuprIGX37vpcpQ4UsJICSI1VxGokUgaRZ0ur3VSj9U5UdVSJbuRLzVXr40EmKqBEmF1c3PdRIKUq9Xf+Bt/g2azycMPP/yi6/zCL/wCv/iLv/iC5yUSdHU52e3we+cfx/NrLFp9/ubUOFPj70DXX1gUf6lziU9e/GSaBqdFGveuL1A6m5bKoBkG4/fux7p3kmePf5qNj/wl7c2Arm/y7PxRVo48yOREzG29Y4yfbNHva2Q7GebsC/TcPpFh4yzey5ve991Uxqt43iZr55/h4rMbeJ2YINZo9gxaqilqmMMgkwqhzWSLyG7iOj1MAuacGgecmH69SK2ran2yxImOkei4/U32Db7AtHcWq+WjdxKCxKJlFGjpBXpukXx2nHxxnpzukI2HWEZAK9unnhmAE6SudOOlwzD5Ro5nbVbzO1EfzdYZty3uL2S5I+9i79pH79X3bKtUtx7tdnNH+HhNel6bvt6lbdRpsUXsd5nxs8xEZcrDKvg5BqFFP7DAdtGLRYxiIRU/dj6zJ3qKExmsVxjtUWkPKn1NpbEpVzZlTNDoB+lcncyejzo3qNS12ZLLdMlltpShnLXkpCEIgiB8TdTl58jo4YUNb1WT28ueC+Pdx0kqnpSoUoKq57/8FL1XijqVvWhzbEeZROwIrlGqnzTJvn64IdPhfuRHfoSPfOQjqQCan59/2ZGghYUFEUFXkWPNDf7gwuOE0YB99oD/18LtVIr3vuDCVv1sHt14lEfXH91xfmuXOXxmDK0TpK+bY1m0N09wsn+cxqe+SHKySX+o08lWefKOt2AvzVEyznPbhQsYGwMCz2V2EFHOnqClHMhyZWYefA93veFNDP0zrJ9/lrXTHoOORcszaHQcBnEW3XDBcGjEbZrmNrHVwjJ8tHjIYqbJggHNrQKtQY5h7KKpOz5BQqF3msPeXzM23MJoJtDX6Bo5GmaFoeFiZQtkSgsU7DFycUDGCDEzAduZLjU7JrZLaNY05Bfxphe5MJZnmDHRnZ07R4eyDvcXsyxe5uwWdf20gelgpUWjsUm9vUFzUCcIBnS1Ji1tm67ZooTDVFSmMhzDHVbSGiXfyqNnc+i5LHp2ZzIzNvmKS6HqUBzPklPRnq9xEFZCp7XbX0f12VE9dpoDf6d+Z/DVe1kogbNjTrDTV2ey6EiERxAEQbimKBGkshW6Ktq0K4zUvHtZ1EmJKNVdIW0mnvZy2nmvOj2nUSH1n7ZT26qE2SsVVuq9SgiNok6Gijbpl0eeVIPznejT6DWV3qfWV+niI+e9rLVTOyU9n24hEfTjP/7j/Mmf/AkPPfQQ+/e/uN3yiyE1QVeXx7ZO8MfLJ4iSmMNuyN/Z/2ayL9L8dBAO+KsLf5VGgZyByd3ri+RXE5IwIjBCOoc1Tk/V8Z68hPPYKkE/ScXK+fk7WL37fjL5NtP1C8xcqBEPQtxemf2cI8rW6Jsu9uxhFt/4rUzNhGytP87qcZ16zaHWteh28qA76BmXSIvpmxvU9S0ifQBxgKmFLLodxsKYRl3198kTJVZaKxR4AbOdr3A4OEbR76G3VA2OQdMs0dMLKF9oqzBBNrdAKbFwzZCsk5DkI7YyMVtmkcgco+0WGRSLtKdn8MbK6LsRl7xhcOduyltxVxwk6m7WapfusfNsLy9T79fSGh+fIR2rRdtqERp9xqNKKnpK8SyJNUZk5dKaHi2TQc+ohqg6TtaiUHXJV51U/GQKXz3qou6ejXrsbKup61PvffU+OyP76Z1GovbeXAkgaSQqCIIg3Eq9nfqXCSkltJTAGqRRqGjvdWUYcbWvpHfqnnZE1aghrnrONpTI0lXrv7Sdn/p3Ryl9z0ddHqj35HYjWJnR9sybO2rVvlFqgpT++omf+Ak+/OEP8+lPf/oVCSDh6qFqaj638ggf2dxOd6o78w7/7/3vxrZeaH+90dvgY+c/Rs/rMbVV5LaNaWgO8eIh67ktLtzm0W1GuL97CacxwDCytKrTnLj7fuJJm4p/lsWT6ziNHpqfY6pvs8/9Alu2Q5ItkT/8JhbvOoRhPMapJ33OHC+y1c4Q9vMYhoOes9CtFn3jBJtJnyAJ0yOBFQdMJj2yPYPB5jiXsIkTjSCIoV/jUPdRDuhncIcBWksjiBzaZpkwkwXbwS0tULInKegJeVfHylnEpRwbboEV06XuZmlZGt1cDm12Fq1QTAVIRtc5mHW4I5dhKWOnd3sUwUaT/hPnqJ1ZZru9SSPppaJNCZ96djvtHzRl7ueocR8O02hudkfs7PbhUWIkW7R3RE9lR/jY7lffXVUq21rTY7U1SOeqseiLRXZU7rTqsaMEjqrXUQJnNFd51JLOJgiCINzKKJEwcrf7Wowc9EZCSdmVq3OviiqpU/BO5Gk0Pbesok2qfmrHfW8nxU+9fxSJUpPK0rjaXB61yowEkhJalp4KLiWS1GN1PXN5nGQkukYOgiPxdbmphaoJvpGuIa6pCPqxH/sx/tf/+l9pFKhQKLC+vp4+rxSc6hskvPr4/jafvPgwD+16TDxYneb9i69H11941//p7adTA4RM2+S21WmmlLNat8E6G1yYqrE9NobxUIOZ5W1cPUPXGufJo7fTPjyPyTZzy2tUt/u4Q42MN8FSdJ5S/hwbTgmjOo1z+A1ML3r0u4/w5FfGWF+voHl5dBzMnBInJ6lb66z4OlGsE4YJRuRTDX0y/SxhPEU90VBR7HAYUu6e5fbgKebNTcxhgtbWGep5OlYlPQpEmRxWcZExe4J8RieXcTFLE0TjFU5UspwN+jSI6CcJWi6PMTWDXihSsszU0lr181HpbkqwJHFMsLbB4Nh5OqfWqbUa1LU+nhbiGz71TBO/5FJ1D3KEd5OzJtGN5/7GhqXvprYp0eOQqzgYXyUcrg6cm+3hnlnBWmvwokYF6gA+VXJTu+mJvMN43kkFz818F0gQBEEQXivU+XTHpe4bv6RWAkPVPvUvizQpa3NlYZ42yN0VR0p87KTyqUQ+9RlebFvqWmFXXKlt+aoB707UasesIlJXgVwt1Gf5p+86xI3ENU2Heym1+KEPfYh/8A/+wdd8v6TDff3EcUij9RU+unqCp4d5NM3kmyYP877ZIy8YlyiO0sanz64/zeRagflGFaM+pDbc4oJ9iZX5It0Nk6On18gOYRDB8twsa6+7Hc9oMr25yWQ9oODF2MM81aHPUedRelmNhp2DmTtwF6eoVNd59lSB88dLaIMCRuBgZjrki19m0+iyHJZR9fkqumOGUAkSHC9DjEGk7rqEIYX+GovDk8zr65SMAXoX4r7F0Mgz0PLgJ4S5Am5piTF7nFLOwimOY87M0Ti8yF9rHS5ubuy61JCKH3N6jvnxaip6DmQdxpW7WxQRbm7iL68wPLuBt9Kk4Yc08OhqQ2ItoZ3zqJUj8vlFpjhCRR/f+9sq0VMc37Gr/mqpbeqOkarfqfd8al2fWm+Yih9V1/NiByDVWHSmvGNSoMwKlAX1jXRXRhAEQRCEV4dR1EoJoMFump96PAwivFCJpJ3olJpfzugyYuSqN3LYU4SqhUgUp2Ls//OmJa41N1Q6nPDa0++fY3XrIf6yZXMpzGNZFd47ewdvqj53kX65/fXHL3yc5vIW+1fHKQ8y9LY2WdNWOZfpspZb4NCTTQ5vbNKPYjYreU7ff4TtEszUznC4GVMahNhDm4xvcUQ7QaW0zIpdYJAbI5o5Sn5ySM2v88hfTqM1ipi+i2m0KU9+hk2zxxf6YwyDfNqfwAgtSkOLTGyoVm6EYY9Cb50F7wwzZp2SPUS31ZfUib0cXXIEWCTDhKBYpDyxRDUzQSGXxZpagn0LXDwywxeba9RWTqkjRPq97UKR/fv2cfvUBPv0BKteJzx3iXB7m8bmNsF2j2Bo0o6gjU9L80gMjWFGY7scEpSKjCV3cp+2iKXtpLjlyg6lyeyO8Clf2aBUfbc9sdMbpnM1NXrBS5oVqIiOMipQBgXTqWGBK126BUEQBEF41aNWNwPXhTHC14tEgl4Zvl+nXv8sy50VPtGboEOWQnaJ988e5Gj+hemHDa/BR07/Be75hELNxmwHdLs1zurrnDdz5KMKB8+cJwxCgozOuaOznN5XZbYds6/mU/GGOEMDJ3JYitdZdJ+imzdZpkQ0tsSwUqDvJpy7VEG7VMYaZjETn1L5cXqF8zzdmaDtmwSRix66lHydPH2cqE2ht8Gcf4kZo0nJ9jH1hNg3iYYmw4HNMHJIBgmRrqOVJhgr7qOaGyMzNo4xu5/eoSWenbB5srGBv7ZKEgbpXYzpbJb7qmUOBT5JrZaKnrjbJYkN4tCmE2p044QOPn0jQnNsfFenlvPpZ00KzDBnLJJXRguqR1LRpjqbpzqbw1V1RnGS2k9vd4fU08jOjthReb8vJXaUsBnL7RgUjKVpbTvCR4wKBEEQBEEQbsBIkPDaEEVDms2/ptV+nDNDl4cHsxjOLPP5ed4/NcG088L+PxfbF/ns05+icsEh7vlE9RYb0RbHgxZ9Z4YDl9rk2qcYODH1OZdjdx+mHGZ487kB494AOwA3dpkLWyw4n8UqDDlPlY47Sb8ySd3UWWnmMS+Wsbt5rCQmnzmJPvY4T/ULrG9P40dZQr/AROQzEa9TGNaY89eZ02qUHQ8zkxAmBv4wg9ewGPoOeDEEMaFrkBufoVLcT6lUwZmZJ5ndx9rsBF8pG6z2m0QnjhN3O7i+z0wYcLfvMe15aTTMU3okshmGBs0ow8A06FgRkQuxYeNZFnXHY2BpZMwKc+YiZa2avldFfMpTWaozOQJLY73lcXqlyXp7x6zgpaw3VSHijthxdgTPrugRswJBEARBEISri4igmxgV5Ot2n6Fe/xzDcMAXB1VOJ4tkC4vsz5f4zoky2ecV36v3PLH+OKcef4rSusFg0MLqhBwL1lj3EnL6NHdcXCEwPJrlmFNHjxDmZ3ndWofJYQsriMjEOtNhn1n7EYrlOhtGlRVtiU6+ypqWp9Yvom9VyDaKWIlO1lzBLj/B6djjXH0KP87g+WUqwYAD4Ukm/RpLbDBr1TByEZFuMIwydOoOYUdDKZZE2T4bMXauSHlmgfLYEo4yaphdol2Z4sR4nieLOgOvS/D0KahtU+53mR56HNV1Jk0TDZ0kdum7JdoYdPSQvh4RawZhHNPSPVqGh+FYlJ1pDhgzZPVcmtam6nuU8MmNuWx6PifrfS4+tZpGeV4ssqNMCpTQqeZHYschZ0t3akEQBEEQhNcCEUE3KZ63Rq32GYbDDVqRyWeGB+nbBylYFd5UzvGWcn7PznlEGId87sRDNJ9YIW4P8L2EbqfNs70aiZZlZmBSaJ+llw2pTYyzsng3h5oes+06duCTjSPGwwGT1jEmqpt0nAKPh4usm1WWkzF6nRL2YIxcq4Ad6WSNDSz3NOv2KscHEwzicQbDKpkg5L7gJDNRk0P6MtP2Bpqp0zeK9BoO8bayvY4hRskW7IxLcWyO8uxB7MoM5tQcg2yV5VyR42WD88aAsLVMdOISbm2LuWDIWBQwZ5jMZrPYpTk6ZoZ2mNBKPPpDjzAM8KKAOl0i1yKTrTJh7uOAPo5lW3tObmbBpEXMRsfnia0W62c2UjODEepPnJoVlHZqdlTtjrKmFnc2QRAEQRCEa4eIoJsMZRRQbzxMt3M8XT4Xlng0uQc9O03RMPiOiTL7s84L3tcb9njokY/TO1Nj4PdxByYnGmvU/YicXmSi3iA2e3RLFhcW7qdslHjrZotMOCSTeFSjAWP6SabLq8RZhyf8Wc4HE6zEU4ReAdsfo+xVcMMYi3VMa4Wue4lnkyxNb4mBX0ELNG4PL7IYbnGQZebMVXBsev0K/TUTrRmTxFEq3hzbojAxydjSIazxI1CdpetW2NAsLlkRF6whzXCZ8GwLs99hrFVnzPdSoVYtVzi47wiJW6He6rLdqdHr1AmVU0oypOV46IUcJXeaI+b9FDNFClUHo2AxtDQ6xJzr+axvNmicD17UsGBpLJtO85Ws1O4IgiAIgiBcZ4gIuokanrbbT9JofIE49gkTeEq7j9PGfnTdYt610/S3gvnCC/KVjUs88um/wmt0ScKEXmvIsfYaZmJRDU2K/WX8rEknM81g/DaOhgOqwxpO1KOitSknF5jMXMQpGhzzpzjVmWIrniYIS9jhGLlhHtcfYGqn0Kw6Q2eLZw2d9WiegV8mCiwOhGscClY4wAoL+iV012HQLTE8nRANNTRdx9Z1cuN5Jg4exl54kDA3TT12qA0j1gchG9EGNb1PpCwc45iZfodCu0EuibBKRfJjCyzMHsJve5zd3KTZWyfwYwaxTzPjYVaLVO393JdfwMpn8B2Nrplwyg+pdbp49R3b7Oej6nZmShlmyy5z5UzaiFQQBEEQBEG4fhERdBMwGCxTq30a36+ly545wyPJg9TjTOrj/qZSnm+qvDD9beD1+czDH6N2ZiXtBTT0Eta2WwzCEDc2qQ4aaFZEP5elWzxCMVvkUNjEDXrkzW2K+ioTnMUuwml9ljPNSWrRFIOgghG4lHoOVtTBtC+iOT18p8Z5ZYgQT+INS/i+y3y0zVH/IgeTi+zTL2FkbQbtEsGpmDAwiE0bN2cwdmiR8tLr6BtzrIcOtU5Eu9OjlmlTy0YMzCSN8hwa9JkIPDQdwmwGY/IAmu6Qx4K2z7OPP43vBwRRTNPtE5cyZKxZ5p15gqxDw4ALcUjS60Lvyr+z+vPtGBaopqM2k0U3TXOTSI8gCIIgCMKNhYigG5goGlCrPUS3u5P6Zhgu25m38HB/Aj9JyOj6i6a/1ft1nnjqSyw/c4rEiwjChO3ekFajh4FOzu9RjTr03TxJMklQPcyi06cSbuEa2+TNFYr+BfIZj4vGFKudcTaDGTpBGStIKAwSbK2L7m5hZIf4ToNlR+NiMEffKxIHJrNRg4PeCQ5znv3aMlbBZNApET4VEQYmkWFju1DdfwBn4nVsG5Oc8WwGuk7fCtgqRjQyEZOWzutyGfaXCliWyWq/Rz8MifsBXruDselB0KUTRMRRQtf2aLoJiTlG1roN387SzRps2cogIkrrjED56BuM553UsEAJnpGRgfk8IwlBEARBEAThxkNE0A1Kr3ea7e1PpkJIhSiy+bt5krt5oqtqVBLmXJvvuiz9TZkenG2e4cyp47RObuB3BwRBTCOM2O6GmP0hxD7VsI6u2wySMRJjP2a1zD69jhM1yNjncDqXyOkdGnaJc/0Z1v0ZGmEZLYjJhUNc3cDMt9CMCM/tcNEyWPaXGPayGAFMhU0ODS9ye3yWRXMdI2vh9YoMj0WEQ50QG1uPGZudRl/6ZjadSeqGRWxAs2TSnHCYmsjzlrEyh6cnybsO6+vrXDh7ntb6Np1Gi2HXw0w07MQgQqen+2xbPgO7gG4fws6OQdGis9tYVLm1Te9GdaZ3DQykkZggCIIgCMLNi1zp3WCoeh/l+tbpPJMuW3YVp/IuPt5yWBvu2DG/sZTnrbvpb6rh6TPbT3Px0jnciwm9Wpu+79OLYJUIs+GTBH3spEklGuInJazhGMOxg4wVPcbDNWzrLFrvDEarQ+wYbCXTbHfGWQ8qeIGDayRkDAvTDUn0iG5mwHnDYmO4CB0TIwiZCTY56l/gLs4wbTZIShmGnQrJsSGhlxAo8aNFTM5Pox34FtbtGVrZLGRcGrN57KOT3D+W50jWxTV0Qj/kwvGzfObY0zTrDfzBMBV6WcPB0Rx8LWbN7NExcuiZRXKFadyCBYZG1jZSw4L5Soa5Sia1qBZrakEQBEEQhFsHEUE3EL6/zcbmRwj8ehr9KZceoO3czx9sd9Lifnc3/W3RNTjdPMXT209T39yisuyg1QZsegP82OScM8QfaGRUupjRY5IextBGi2ewzEX8+QoHrBqutkxiPMFwrUfRCIitAr1BlovRJO2khGk5FDMmlq6n4qKViTiXuDS9KTQvxgx9ZsNV7otOc7t2gVwuwsuVGdQn4fEuoecTYOHoCZOzU2gH38FWaT/NbB4tm6UzlaV0qMJ7JotpQ9dwELD21CWeffpp1jZW6A8HxEmc9vexdRvfMqgZCUHGQs9Pk8tPUciYOLbBQiXLQjXLQiWTprWJ6BEEQRAEQbh1ERF0g9DtnmRr+y9J4hDDzDEx/h6O+VUe2myTkDBlW7yzYnKp+WU+XX8WvzGguGxTqOk0h30GScJ522OFHuN1KGt9ipaH0wjRkwp2PEWvPE9xLGKKsyTGl+k1Nsn1E8qWRhTm2AzKrGnTxG4GV3NxsNFNnY7jcc43aDULqbucco07HC/zpvgZ5pwG/liVIJqkc6lH8uSAMNCJsXGNmOrMLPp938FW6QBNxwXTpFN1UvHz3tkyhSDh4pfO85cnz7JZW6MRtIjjGNWKJ9ZhaOsEuRJJYZxMYYZMJkfVNZksOGm0Z7GaTR9LXx5BEARBEARhhIig65wkSWg0HqHZ/FK6nMksUB7/Nj7e8DnZ66jyH2bMPuXhKf74+Gn8pkdpxWaiUWQYmNTjPuftJsfdLSpdh0N+iGVH5NZ7ZP0Mhr4P355iMFlg1t7C4St4yQniFYNxlS6Hie/bnDfnaTsVoJCmmym76g4RZ/2QVieDniQU4zb3xqd5k30GM59jGGZob2lwyiPue4SJiZUY5GydysFDJG/+u6zbkzQS1fI0oVOyyR+u8M7ZEvHFDo/9/iM0VldoBHW8xE//FkM9JHAtotIE5sQ+ZsdnmCxm0oakalImBnnHlEiPIAiCIAiC8JKICLqOieMhm5sfo98/ly6XSvfjlt7CH242WfcC2n6Tgn+Ctc5pzrX7VDcyHOjMEQV56kGd8+4yx3KrWFjc1nEwkoRCzafcisDaR2yM06uUyZX6TCaPoptfxmsMyTegbHqq4oiGXeRSZhovngJccjr0fHh2qNFOTGwC5uJt3qif4lC2RRzoDFsZ/LMeUX9IHGgYiYFrQmG8QvHN76J12ztZ6eg0gzAVcZ2SRe5AiTtyLhtfWeFTf/JF/H6dPn282MPTQ3zXxK1WOXDkLo4uHmSi6KRW1crUQBAEQRAEQRBeCSKCrlOCoMH6xp+l9T+aZjA+/i5C9zC/u97gfLfGevs8E72nabS3mGpXONq6ncgrUotbXLRPcGxshYHrszSsUGmYjDdjspuqlmiCxJzBz2RJxqFqHSfvfIXI3yS+4DAd+VjKBtqyuJidZFPbRxiVcLSYcGByPDDZJiLDgIM0uNdaYTFuknQDhpd8woFBMgQzMcg6BgXlUPfAG/HvfhdbYYkLLZ9hXflQx7SKNt5UhkwvZvOTJ6g3NkjiHgEBvbhP1wnIVIrctf8gr7/7biYmJiTCIwiCIAiCIHzDiAi6Dun3z7O5+dE0EqTqf6amvpMWY/z/Li7zbP0czfYyc50TlPouR5sPkgwKNGKfVes0T+TOUc93KeslHtiYZawWYG5sovk2mnUHieXQH7fI5S9Rdr+CkazirznkmgZjTg/NtfByJifNo3TCWYxIwxxYrHpZ1kyPDC0Oam3u0daZ9zbQ1j18zyYZ6pixQz5rU5ifpHD0dvq3v5kta5rzzYjhdgSJl/Yv2sqbNF0dY61L/plTmMMWOkOiJGGgD/CyEVNzU9w3McvBAweZmZlBV+YLgiAIgiAIgnAVEBF0HaFqXlrtL1Ovf04t4LozTE5+OxeGOv/l9Fc4VTuP7jW5vbfCPfW7cHoVWnFIV6/xleKzXCxuY1kOD27sZ3o1JGxtYXSHmOYiup1nUDawxteZz34FS4mfLYd4w2HS9MnkwMxHXLLnuBAfIfFd8E1avQoreoBlbTOvDzicbHKocQGjnxD4FrqXI+daFBYnyC0dpHf7A6znZznZc0iaIUE0ZBhG1E3YsjQCP2b87AaVfh079kCP0Q0I3RBKBvOTi+SdfCp8Dhw4gG3b13pYBEEQBEEQhJsMEUHXCVHksb39V/R6Z9LlQuEOxsbewWc2L/HfTj5Js98mF3Z4W81grvlm+kFEXxtwzDnDseJJbMvmaLPK4ZU8w36XpNnGTcrozhJhVsOaXmGx+ARGvE6wbTNcz5AnoZobYBVDho7LE7yOtjdFPHQYDApsxzahucWE5bFEg9u2z2IPEqKBgxZrVCbHKc0t0jt0B5fGFtkMS+itiKARE4Q9vDimbRn4SUyu3mLCr+NGA0w9xjR07KxOWNWxqlnGrTyWYZHNZjly5AiVijJhEARBEARBEISrj4ig6wDPW2Nz66OEQRtN06mOvR07c4T/6/GP89HNetoLZ9z3eMfaPG7PphN5rGhNHil/BdOO2ecX2L9SxmzGRK062aEO9gJYBs74eRYmniShTlCz6K8XcUON6UKXTCkituGiMc/y4ADDQRnPz9INCnh6g1x2i8mkw13bZ8j1fKK+hm1nKO1bQJs/yInxec67s9heBu1SSBwPMKKEQIMgjNCHdcpJlyw+ujYSPiZm3iC/v4pTKDBoeWkETKW7LS4uppNhGNd6SARBEARBEISbGBFB1zr9rfUY9cYjkMSYVpHJifdxbGOF//sLv8PZKKey4jjYy/HG5QlCb0Az8niqtMxW4TyLoU2uZTFeK2LV+9idPug5TDtLqXiR8tzTYDUZdi26K1WcQGe+0iZb8kmshIZe4Ez/DtqtaYaBixflGMYhZnaV6bDHXZunqfZ6JAMDK1cif2iJ1bE5PjO2SC8zy6RnYPUSjNDHChPi0EPTO2T0HmYcpGlupqlj2iZkdQpzZWYP7iOXKXL+zHn6zUH6d6hWqxw+fDiNAgmCIAiCIAjCq42IoGtEFPXZ3Po4g/6FdDmXP4JvHOX//sIf8fmOz7Y5hh5luKOW57aVAYOoQ9NOODN+GktvMp1kKXWL5JZD7EYdI4pxjTzj9haFhWeIix2GfYvmhUkM32BhrE6hOMC0Qvqhy7P9+6n1FxhGGYLEIYpNErtBLuhw9+YZZrotor5Bkh9juLDAydIEF+eO4GZnqQ4Siq2EfBCRSQYkeptY66NZEbqhYVo6um1jVC3KcxNMz88zMzlPt93l/PnzXGqupt/ZcRwOHTokrm+CIAiCIAjCa4qIoGvAYHCJza2PEYW91P46V3gjnz13gS+u/jbnjRkaxiS2V+XuSwFLzRa+blErJDTyx3GtId3YZOJcjuJGi8ygT0ZzmNI7lKa/RDDdpTd0aF6aIRmaHKisMZbrYegRgyDDU/U3sjbczzBxiTBIsIn1DknY4o6tCyy2t4gHOoP8BN25OTbHJlmeO0LBnmbBA7cTMxb42FqPgdbGN3xMy8CwdXTXwJ3OU52dYm5hH5V8NRU3zWaTp596mkajkX5/lfo2Pz/P0tISpik/QUEQBEEQBOG1Ra5AX0OSJKbR/CLN5pdS9ze0PCcaBT5/7P+hHfqcNxfphFM43Syv3xgw0YsInQyUQxruM2yrqEvD5eDZiHJrEycKGdNDZkqP4y/1aWgZ2rVZtGHMgdwG49UuGOB7WY4P7udicBhfswg1nQSNIPKIvXVu8y6x0NwGT6NXmGKwNM9GZZzVuaNM2lMc8cEdRJT9LnHSTm2sA1eluenkchkKsxUmFueYm1vCtdzd75qkoufixYtXiB/l+qbqflx3Zz1BEARBEARBeK0REfQaEYYdNjc/huetEIQBl5rw+Y0LdMIBnVDnrH6UQafKpO9y/2afsUAnVyrSLtb4SvJlGsOE6eUsi6tt8p6Xmg0s2BfRFptsVx36wypaN2JJ22C82EvT0oJhlYv9uzgXHWBgWASGRhRHDL0+jt/gtt4KU+0GWmzjFecZzM6wXq7SXrydcWOKO7yITNejOOwQ0KefCTAzOq7rkJ0tMX1gkYX5/djGczbWURSxvr7OysoKvV5vT/xMT0+nkR8RP4IgCIIgCMK1RkTQa0C/f46trY/jeR1W6hs8XotY7scEQ4+teIpL9p3YYZb9Q5N7az5zRgFrzOYr5rOcCY4TdfLcdjFmolkjE3pMsEVlYp3mIZtQswm2TcbDLrOZDrpuEnlTbA0OcJpDNHQLX9cJwwDfH1Dob3NHe43xYZ/IKTOcvBM/V6Q9MU5r6ggVxhjzQvLDBrlhn9AcMiiEmBmDYqnA5KEF9h06gutmrviOnuelwmdtbY0gCNLnVKqbEj8q9S2TuXJ9QRAEQRAEQbhWiAh6FUmSiHr982xvf5HV2iqnG5scbzr0vYRhlGXVfpC6NcFk4LLg6byxBRNOgYu2x4ngS1zyt6jWK+xfa1Hse+SjJrP2MuGRgMZYQn9bp9BPOJhpYJk2eNP0w2meCY+wSo4wSQgjHz/wmG2us7+7TdawiIuzhPsmiG2L2vgsvfJ+8kGemX6f4mCLbOATZgKG4xFGxqA6O8nSkSNMzsymUZ3L6Xa7XLp0ic3NTeI4Tp9Tgmdubi5NfZOaH0EQBEEQBOF6Q65QXyWCoMWl5T/m0sqTnG+c5Xw3YbVTJIgzNDjASm6BolHgQOxwey/mDS1omRHP+tsci7/AIHDYXyswu7VF1h9SYY3x8Q06RxMGvotx0eWw0yXn6BjDcQZBmWPDo1zSxgj1mFDzYNhlsbHJfDgkX53AWNyHn2g0CmW2C3OY9hQFP6ZQ71McruEmEWE+ZDgZYeYdZvcvcfDo7WRyuSu+26jeR4mfer2+93y5XE6jPmNjYy8QS4IgCIIgCIJwvSAi6CrR7V5K634Uvt/h5IkPc652kprf4lKvSs2bohfMs11YJMyWmQtsJgYGb9sOqfoxF42QDe8iT1vHKXVmWdreZqzVpBA2mHCWMfb1qE+a+Ft5ZoY+E2Yfc5jDG+Y55t/GaX2eyAoJkj4Zv8Nhr8eRQh7z0BE6QcyaZrFZncPIz1KIdCYGfXKdDQqRhm7HhOUYLxeRnSpx4MjB1N1NN14oZJT4OXfuHK1WK11W7m/K4nphYYFisfia/90FQRAEQRAE4ZUiIugq8Zef+b/oDU6nj2Ni2nTpBCanG4dp+wv09TKN4jhFciz0XW7vatxTD6kZISfiFueDJ2g6DjPtaWY2lykOBlRZplzapn8koa1lsM87HDV65CITf1DheHiIZzjM0A7Rkw6leMARQ2e2WqE+KHI6Sth2JkmmZsljMadS6upN8rGOYWqEhQQ/E2KXXcrz4+w7coRiqfyi30/ZXKseP893elORH2lyKgiCIAiCINxIiAi6Sqw1tmjGO9GRBKj1q5yvHyUgT6tYRstNsT8pMR7ZPLgVkPN9jlOj0TzJVm6Iro8x32gxUbtIJdimpK/gzHi0lkyGm3nmOz4zRpfAK7GaTPPl8H56toFjdJjHp2yYuEOHtp9wIVdgODdN1nJZ6KvGph65JMRUwievE7gR5nieibkJZpaWyI+XXrJZqar5OXPmzF7am9hcC4IgCIIgCDc6IoKuEvX+fZzcOpQ+DoF2EtNzMviVRebMMapJhsVuxB31Puf1Oif7zxAlEc3iOE6UMLm1TLlTZyJeJuN0iQ6GNDM57NMO9yZ1THI0mOd4fBdrTGO7TaaSIXoCZqTRNFw6c+NknCJzvkV5oJHxNCxdJ8pAmE3QZvNML80ws7iAlXdfUvgofN9P096U25uqAVLrjmyuxelNEARBEARBuJEREXSVuGBpLGec9HGs6fiZWSadcaaSDAUf7q0P6Pl1HvOeIB/CID+HZ8QU+3XGNpepehuUtU3sSsBgv0XQrLCw2mXG7NEyZ1lJpjjr302oexSMNRJNJ9I1BvkiTqHKTFLgTt/BiXVMXSO2E5KigbVYZPbgPONzMxjO1x5u1edHWV1fuHCBMFRyjrTm58CBA5L2JgiCIAiCINwUiAi6SgSDaUqlfPpYQ6eiZ3Fjg0Ntn1K/wYXwaQpBjJ45wpoxhKjF1OYqlcYlJuJNbMtHm03olzNkzuncxRaBM866vsiGf5BNb5Ig0wQ7xrcMzGyBMXeKhaiMG+qYKqpjaWgli8z+MlO3L1GcHEMzXjraczkq2rO9vZ2mvg0Gg/S5QqHAoUOHUtc3QRAEQRAEQbhZEBF0lZhJShTYEUGK6iBkqd2grZ+hFffBXGLFBF+rk2vVqG6dZmK4QUb3sfMJ8T6NuG2z71yfgqvTsA7jR0VWWkdpmDF+oU7kgpMpctTexyQ5LDQMU8csumQPVJi6ez/ueP6rprm9GO12m7Nnz+6ZHti2nUZ+pqamxOpaEARBEARBuOkQEXSVOBwtk6+N0sU0+oZHjxZBkqNljtNPGhh+m4mtU4y3liknHoauYU+GxGWd/DLM6B3axXlaUY5Wb45L3hz9Qp0wl2C7Rfabc8wbFRzdwM44ZPdVmbp3P+7c12dN3el0Usc3FQFSKMGjrK6V6YE0ORUEQRAEQRBuVq7ple5DDz3Er/3ar/HYY4+lBfgf/vCHef/738+NSFyw2Y629pa1KKFBlU48IIhWyLYvMr1+inI4wAacQog+H6HXbCbXA7RiiW64SOJlON2/nYbhEU5ukclUGTPKLJhVJp0S2WqRsbvmyd0xieG+8uFTaW+1Wi1tdKpsr9PPqmlMTk6yf/9+MT0QBEEQBEEQbnquqQjq9Xrce++9/MN/+A/57u/+bm5kTA8Gw0L6OEJnS4OhEkX+KvMrz1Dpdcmqsh0zxloYksQu2bpLPuugBUX0AawM57nkTxJXuziFMiVjmoLuciQ3T3VmgrH7F3D2l192nc/lKJOD9fV1lpeX92p+RuJHOb7lcrmr/jcRBEEQBEEQhOuRayqC3ve+96XTzcC53ir9aLcmKIkZahtMrD/NVL1GPkmUZwHOeEAw5mIMqowTYWo68cCmEZS55O0jzJq4MxlMo4yjmSwUJjmy7zCl++awZ/Nfl/hRQnN1dTUVQCO3N5XqNjs7y9zcnPT6EQRBEARBEG45bqjCj+FwmE6XF/RfL2QbDxMFXvrYiGFp06cYRriJhlVKiOZz6IMqC60mZtQj0vK0owLL/lF67jT5JQNTj3EMk2Iuz50H7mD6/iWs6Rya/srETxzHaZ2PEj8jswOFSnWbn59P+/1IzY8gCIIgCIJwq3JDXQl/8IMf5Bd/8Re5Hjnc7DJoBnvLBjqmqtmZy+CGeSqbmxhcItFKeMkEF8LbaDqHmZjMkDGHRHZEOZNhamaSO95wL5nZ4it2efM8L62tUtNILKptjI2NpZGfarX6ircpCIIgCIIgCDcbN5QI+tmf/Vk+8IEPXBEJUm5m1wPu1AKasZY+TtRk6ti6RbVew9IaaHqZQKtwIbmdlnsX84US44UhnjXAsjNYBYcj993B3JHFV2RLrYwOVLRHRX1U9Ectj2yuZ2ZmUvEjKW+CIAiCIAiCcIOKIMdx0ul6JPaz6L6VPtaIGA/bWHqMphcYmJNc0u6h79zHXLHA4WmLDjV8LcQt5JhYmubonbe9Ime2KIrY2NhIXd76/f7e86qxqRI+ExMT0uNHEARBEARBEG50EXQ94/hNKuZz9TeJ5jCw5lkxH2Do3st0qch98xkGSZ1avIVRtMmVixw+fDh1aHu5aWoqzU1FfVZWVgiCnfQ7Vd+jGpsq8ZPPP9ewVRAEQRAEQRCE60wEdbtdTp8+vbd87tw5Hn/88bR2RTXsvJFoVN9GRz+4u6TR16YJnLuZKRc4MJslzHTZiNdIsjqWmUsFy4EDB7CsnejRy6n3uXDhQurypowPFCrNTRkdqLQ3MToQBEEQBEEQhJfHNb1yfvTRR3nHO96xtzyq9/n7f//v8zu/8zvcSEztexeNS9295WlLZ2Eqi72gsepv4mtR+ucuFYscOnSIUqn0srbr+z4XL15MIz8j8VMsFtNaqPHxcUl5EwRBEARBEIQbSQR9y7d8y14h/43OfQ9M4+3fschWxPmYNW+dVWXjre1EbVTk5+WmvqmePqqxqar5GfX3UcJJbUPV/QiCIAiCIAiC8PUhOVRXibbbpZVr7ZkW1Dfr6WPDMNLUPhW5UY+/Fuq9quZHRX9UFEih6nyU+BGLa0EQBEEQBEH4xhERdJVQdt1bW1tXPKeaku7fv/9lWVSrVDdV73P+/Pm9Hj/KLU69/5UYJwiCIAiCIAiC8NUREXSVUILn8jof9bhQKLxsq2sV+RkMBulzygZ837596Tal5kcQBEEQBEEQri4igq4SY2Njr2h9JXhU2tva2tqe1bVqcKpS55Rz3MtJnRMEQRAEQRAE4ZUjIug1RKW8NRqNVPzUarU9UwiVLjc3N5eKH7G6FgRBEARBEIRXF7nifpVRQqfT6aQpb5ubm3tmB4pKpZL2+VGGB5L2JgiCIAiCIAivDSKCXiVUupsSPmrq9/t7z6uUN2V0oKI+uVzumn5GQRAEQRAEQbgVERF0lTh9+nSa6jZKe7tc+Kgoj2psqowOVPRHoj6CIAiCIAiCcO0QEXSVULbW3W53b1lZWqumplNTU0xMTEitjyAIgiAIgiBcJ8iV+VViaWmJmZmZveVsNvuy+gMJgiAIgiAIgvDaIiLoKpHP56/1RxAEQRAEQRAE4WUgxSmCIAiCIAiCINxSiAgSBEEQBEEQBOGWQkSQIAiCIAiCIAi3FCKCBEEQBEEQBEG4pRARJAiCIAiCIAjCLYWIIEEQBEEQBEEQbilEBAmCIAiCIAiCcEshIkgQBEEQBEEQhFsKEUGCIAiCIAiCINxSiAgSBEEQBEEQBOGWQkSQIAiCIAiCIAi3FCKCBEEQBEEQBEG4pRARJAiCIAiCIAjCLYWIIEEQBEEQBEEQbilMbmCSJEnn7Xb7Wn8UQRAEQRAEQRCuISNNMNIIN60I6nQ66XxhYeFafxRBEARBEARBEK4TjVAqlb7qOlrycqTSdUocx6yurlIoFNA07Vp/HOFVVPVK6F66dIlisXitP47wKiPjfesgY31rIeN96yBjfWvRvo7GW8kaJYBmZ2fRdf3mjQSpLzc/P3+tP4bwGqF2rGu9cwmvHTLetw4y1rcWMt63DjLWtxbF62S8v1YEaIQYIwiCIAiCIAiCcEshIkgQBEEQBEEQhFsKEUHCdY/jOPz8z/98OhdufmS8bx1krG8tZLxvHWSsby2cG3S8b2hjBEEQBEEQBEEQhFeKRIIEQRAEQRAEQbilEBEkCIIgCIIgCMIthYggQRAEQRAEQRBuKUQECYIgCIIgCIJwSyEiSHjV+eAHP8jrX/96CoUCk5OTvP/97+fEiRNXrON5Hj/2Yz/G2NgY+Xye7/me72FjY+OKdTRNe8H0e7/3e1es8+lPf5rXve51qUPJoUOH+J3f+Z3X5DsKr2y8f+u3fotv+ZZvSZuqqXFsNpsv2E69Xuf7vu/70nXK5TI/9EM/RLfbvWKdJ598kre97W24rpt2q/63//bfvurfT3h1xnvfvn0v2L9/5Vd+5Yp1ZLyv77FW++xP/MRPcPToUTKZDIuLi/zTf/pPabVaV2zn4sWLfMd3fAfZbDbdzk/91E8RhuEV68ix/OYZbzl33xzH8R/+4R/m4MGD6VhPTEzwN//m3+T48eM39r6t3OEE4dXk277t25IPfehDybFjx5LHH388+fZv//ZkcXEx6Xa7e+v8k3/yT5KFhYXkE5/4RPLoo48mb3rTm5K3vOUtV2xH/VzVdtbW1vamwWCw9/rZs2eTbDabfOADH0ieeeaZ5Nd//dcTwzCSj370o6/p973VeTnj/R//439MPvjBD6aTGtdGo/GC7bz3ve9N7r333uQLX/hC8tnPfjY5dOhQ8r3f+717r7darWRqair5vu/7vvTf+t3f/d0kk8kkv/mbv/mafVfh6o330tJS8ku/9EtX7N+Xb0PG+/of66eeeir57u/+7uRP//RPk9OnT6fH88OHDyff8z3fs7eNMAyTu+66K3n3u9+dfOUrX0n+4i/+IhkfH09+9md/dm8dOZbfPOOtkHP3zXEc/83f/M3kM5/5THLu3LnkscceS77ru74rvW5T+/SNum+LCBJeczY3N9ODotqZFM1mM7EsK/nf//t/763z7LPPpus88sgje8+p5Q9/+MMvud2f/umfTu68884rnvs7f+fvpDu3cP2M9+V86lOfetGLYnVwVM9/6Utf2nvuIx/5SKJpWrKyspIu/8Zv/EZSqVSS4XC4t87P/MzPJEePHn1Vv49w9cd7JIKUWHopZLxvrLEe8Qd/8AeJbdtJEATpsrow0nU9WV9f31vnv/7X/5oUi8W9sZVj+c0z3go5d9+cY/3EE0+k6ygBfKPu25IOJ7zmjELl1Wo1nT/22GMEQcC73/3uvXVuu+22NLT+yCOPXPFelTI3Pj7OG97wBv77f//vSsTvvabWvXwbim/7tm97wTaEazveLwc1ZioF7sEHH9x7To2trut88Ytf3Fvn7W9/O7ZtXzHeKoTfaDSu6ncQXt3xHqHS31RK7P3338+v/dqvXZFGIeN9Y461WkelQZqmuTeOd999N1NTU1eMY7vd5umnn95bR47lN8d4j5Bz98011r1ejw996EPs378/TU2+UfftK3+lgvAqE8cxP/mTP8k3fdM3cdddd6XPra+vpxc26qL3ctSOpF4b8Uu/9Eu8853vTHNNP/7xj/OjP/qjaY2IykEebefynW+0DbUDDgaDNI9VuPbj/XJQY6nyiS9HnVTVAXn0m1BzdQC+nNH4q9cqlcpV+Q7Cqz/eCrUfqzxxNcaf//zn+dmf/VnW1tb4D//hP6Svy3jfeGO9vb3NL//yL/OP//E/3nvupY7To9e+2jpyLL/xxlsh5+6bZ6x/4zd+g5/+6Z9ORZCqBfvLv/zLvRtTN+K+LSJIeE1Rd4OOHTvGww8//Irf+6//9b/ee6zuFKudUN0tHh1IhZtrvIVba7w/8IEP7D2+55570hOrKsRVBbuqgFa4scZaXdSoAuk77riDX/iFX3jNP59w/Yy3nLtvnrH+vu/7Pr71W781vUH17/7dv+Nv/+2/zec+97nUrOZGRNLhhNeMH//xH+fP/uzP+NSnPsX8/Pze89PT0/i+/wLHKOUOp157Kd74xjeyvLzMcDjc287zHeXUsgrNy52k62e8Xw5qLDc3N694TqVGKTei0W/ipcZ79Jpw44z3S+3faszPnz+fLst43zhj3el0eO9735s6TX34wx/Gsqy9117OOMqx/OYZ7xdDzt037liXSiUOHz6cpib/4R/+YeoOp8b8Rt23RQQJrzoq91ftWGpH+eQnP/mClJYHHnggPWh+4hOf2HtO5fkrq8U3v/nNL7ndxx9/PE2BGd0lVutevg2FCtV+tW0Ir/14vxzUmClRrOrFRqhtqTC9OoGO1nnooYfSerLLx1uF6CU16sYa75fav1UN2CgtUsb7xhhrFRF4z3vek0by/vRP//QFd4jVOD711FNX3ORQ46guglQUYbSOHMtvjvF+MeTcfXMcx5Mdc7U9MXtD7tvXxI5BuKX4kR/5kaRUKiWf/vSnr7DI7Pf7V1hkKzvGT37yk6lF9pvf/OZ0GqEsOH/7t387teQ8depU6hSlbBZ/7ud+7gXWiz/1Uz+Vusv9l//yX8Rm8zodb7WsLDTVmKrD0EMPPZQu12q1Kyyy77///uSLX/xi8vDDD6fWq5dbZCtXQWWZ/P3f//2prefv/d7vpeMvlsk33nh//vOfT53hlDXrmTNnkv/xP/5HMjExkfzAD/zA3jZkvK//sVY25m984xuTu+++O3WMunyd59vovuc970nHWx2f1Vi/mI2uHMtv/PGWc/fNMdZnzpxJ/s2/+Tfp9dmFCxeSz33uc6lFdrVaTTY2Nm7YfVtEkPCqoy56XmxSnvQjVM+AH/3RH00tcNUO8rf+1t9Kd8DL7ZHvu+++JJ/PJ7lcLu0f89/+239Loih6gQWvWk9ZdB44cOCKf0O4fsb753/+57/mOuoCWYkeNebKYvMHf/AHk06n8wKLzre+9a2J4zjJ3Nxc8iu/8iuv6XcVrs54q54T6mJKnYRd101uv/329ITred4V/5aM9/U91iML9BebVG+REefPn0/e9773pX2eVB+Rf/Ev/sUVlsqjbcmx/MYfbzl33xxjvbKyku6zk5OTaUuT+fn55O/9vb+XHD9+/Irt3Gj7tqb+79rEoARBEARBEARBEF57pCZIEARBEARBEIRbChFBgiAIgiAIgiDcUogIEgRBEARBEAThlkJEkCAIgiAIgiAItxQiggRBEARBEARBuKUQESQIgiAIgiAIwi2FiCBBEARBEARBEG4pRAQJgiAIgiAIgnBLISJIEARBEARBEIRbChFBgiAIwnVDkiS8+93v5tu+7dte8Npv/MZvUC6XWV5eviafTRAEQbh5EBEkCIIgXDdomsaHPvQhvvjFL/Kbv/mbe8+fO3eOn/7pn+bXf/3XmZ+fv6r/ZhAEV3V7giAIwvWPiCBBEAThumJhYYH//J//M//yX/7LVPyo6NAP/dAP8Z73vIf777+f973vfeTzeaampvj+7/9+tre399770Y9+lLe+9a1pxGhsbIzv/M7v5MyZM3uvnz9/PhVav//7v883f/M347ou//N//s9r9E0FQRCEa4WWqLOLIAiCIFxnvP/976fVavHd3/3d/PIv/zJPP/00d955J//oH/0jfuAHfoDBYMDP/MzPEIYhn/zkJ9P3/NEf/VEqcu655x663S4/93M/lwqfxx9/HF3X08f79+9n3759/Pt//+9TUaWE0MzMzLX+uoIgCMJriIggQRAE4bpkc3MzFT31ej0VN8eOHeOzn/0sH/vYx/bWUfVBKnJ04sQJjhw58oJtqCjRxMQETz31FHfdddeeCPpP/+k/8c/+2T97jb+RIAiCcL0g6XCCIAjCdcnk5CQ//MM/zO23355GhZ544gk+9alPpalwo+m2225L1x2lvJ06dYrv/d7v5cCBAxSLxTTio7h48eIV237wwQevwTcSBEEQrhfMa/0BBEEQBOGlME0znRQqve27vuu7+NVf/dUXrDdKZ1OvLy0t8du//dvMzs4Sx3EaAfJ9/4r1c7nca/QNBEEQhOsREUGCIAjCDcHrXve6NC1ORXdGwuhyarVamhanBNDb3va29LmHH374GnxSQRAE4XpH0uEEQRCEG4If+7EfS+uDVLrbl770pTQFTtUH/eAP/iBRFFGpVFJHuN/6rd/i9OnTqVnCBz7wgWv9sQVBEITrEBFBgiAIwg2BSm/73Oc+lwoeZZd9991385M/+ZOpHbZyflPT7/3e7/HYY4+lKXD//J//c37t137tWn9sQRAE4TpE3OEEQRAEQRAEQbilkEiQIAiCIAiCIAi3FCKCBEEQBEEQBEG4pRARJAiCIAiCIAjCLYWIIEEQBEEQBEEQbilEBAmCIAiCIAiCcEshIkgQBEEQBEEQhFsKEUGCIAiCIAiCINxSiAgSBEEQBEEQBOGWQkSQIAiCIAiCIAi3FCKCBEEQBEEQBEG4pRARJAiCIAiCIAgCtxL/f7IyR9I6DIewAAAAAElFTkSuQmCC", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "# Plot the temperature data\n", - "plt.figure(figsize=(10, 5))\n", - "plt.plot(time_horizon.model_time_horizon, temp, label='Global Temperature', color='blue')\n", - "plt.title('Global Temperature Over Time')\n", - "plt.xlabel('Year')\n", - "plt.ylabel('Temperature Anomaly (°C)')\n", - "plt.show()\n", - "\n", - "summaries = temp[-1, :]\n", - "\n", - "N = 50 # number of members you want\n", - "quantile_indexes = np.argsort(summaries)\n", - "representative_indexes = []\n", - "\n", - "for i in range(N):\n", - " start = int(i * (1001 / N))\n", - " end = int((i+1) * (1001 / N))\n", - " idx_in_quantile = np.random.choice(quantile_indexes[start:end])\n", - " representative_indexes.append(idx_in_quantile)\n", - "\n", - "representative_indexes = np.array(representative_indexes)\n", - "print(\"Representative indexes:\", representative_indexes)\n", - "\n", - "# Print indexes but by adding 1 to each index for better readability\n", - "print(\"Representative indexes (1-based):\", representative_indexes + 1)\n", - "\n", - "# Now plot the subset of representative members\n", - "plt.figure(figsize=(10, 5))\n", - "for idx in representative_indexes:\n", - " plt.plot(time_horizon.model_time_horizon, temp[:, idx], label=f'Member {idx}', alpha=0.5)\n", - "plt.title('Representative Global Temperature Members')\n", - "plt.xlabel('Year')\n", - "plt.ylabel('Temperature Anomaly (°C)')\n", - "plt.show()\n" - ] - }, { "cell_type": "markdown", "metadata": {}, @@ -571,6 +496,88 @@ " scenario_data[scenarios] = model.evaluate()\n" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Selecting a subset of FaIR Ensemble Members " + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA0EAAAHWCAYAAACxAYILAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8ekN5oAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOydBbhbVdaGVymlBQaKFysyg7sPg7u7uxW34oO7w+BuhcGKuxaHAX6cwd1lirZIKaXN/7zZXdx9zz1xz/3e59lNbpqcHNlJ1reX9chkMhkTQgghhBBCiG7COI3eASGEEEIIIYSoJxJBQgghhBBCiG6FRJAQQgghhBCiWyERJIQQQgghhOhWSAQJIYQQQgghuhUSQUIIIYQQQohuhUSQEEIIIYQQolshESSEEEIIIYToVkgECSGEEEIIIboVEkFCiG7P0UcfbT169CjrtTPNNJOttdZaVduXjz/+OLsvV155ZdW2KUS92G677bKfCSGEaHYkgoQQbclHH31ke+65p80222w2wQQTZMdcc81le+yxh/33v/+1VgYjE6FUaHRnIXXdddfZWWedZc3M3XffbauttppNPvnk1qdPn+xcPeCAA+y7776zZqKYucZ47LHHGr2rQghRNOMW/1QhhGgNMC433XRTG3fccW3LLbe0+eef38YZZxx7++237dZbb7ULL7wwK5JmnHFGa0Uw7n/++ec//7733nvt+uuvtzPPPNOmmGKKPx9fYoklrDuLoNdff9322Wcfa0YQO//617+yc/Of//ynTTbZZPbSSy/ZeeedZ4MHD7aHH37YZp99dmsGrr766k5///vf/7YhQ4Z0eXzOOee0Sy+91MaMGVPnPRRCiNKRCBJCtBUffPCBbbbZZlmBgyE5zTTTdPr/U045xS644IKsKGpV1ltvvU5/f/3111kRxOPtGor066+/Zr157bAfXCsEEEL92muvtZ49e3YKJ1t++eVt4403zooihHy9+OWXX2zCCSfs8vhWW23V6e9nn302K4KSjwshRCvRulaAEEKkcOqpp2aNuUGDBnURQIBRuffee1v//v3zbuePP/6w4447zv72t79Z7969s+Li0EMPtZEjR6Y+/8EHH7QFFlggG9ZE2B0ep5jvv/8+u/o/77zz2l/+8hebeOKJbfXVV7dXX33VasU111xjCy+8sI0//vhZTwPi8LPPPuv0nOWWW87mmWeebIjgsssumzXwZ5llFrv55puz///444/b3//+9+w28Ew89NBDqflUeNk22WST7HER3jVw4ED77bffKtqnF1980ZZZZpnsPnHu4Y477rA111zTpp122ux14fpwnUaPHt3p9ffcc4998sknf4ZquTgkRJC/yb2KIZQrGdKVbz+YB0cddVT2XLEfzKeDDjoo5/yIOeaYY2zSSSe1Sy65pJMAgsUWWyzrGXrttdf+vAaEdTJnEGBJNt98c5t66qk7Hf99991nSy+9dFbQTDTRRNnz9cYbb3R6HWKLbbJosMYaa2Sfh9e02jlBnuN2+umn2/nnn29//etfs+dxlVVWyV73TCaTvX7TTz99dk6su+662c9KkmKOSQghSkEiSAjRdqFwGKYY7pWw44472pFHHmkLLbRQNswMgXDSSSdljfYk7733XnZVH1HDcxBarOSzWu58+OGHdvvtt2eLKJxxxhl24IEHZg1dtvvll19atTnhhBNsm222sVlnnTX7foSF4RnDmP/xxx87PfeHH37I7hfnDBGJUc9x3nDDDdlbjOSTTz45Ky432mgj++mnn7q8HwII0cPx8/xzzjnHdt5557L3ibwYzifCkvA/vCMuYjDe99tvPzv77LOzgorrdPDBB//52sMOOyz7OkIDCdlilJsflLYfhHuts846WcN+7bXXtnPPPTfrhWOeMA/ywVx55513ssY+gjENzpHPZWCbnHuEXQyi6K677speExdTHCsCgXOE1/OII46wN99805Zaaqkuwg+hv+qqq9pUU02VPZYNN9zQagUeLzywe+21l+2///5Zcc2cOfzww+3+++/PCj/mC8fDYkFMKcckhBBFkxFCiDZh2LBhGb7W1ltvvS7/98MPP2S++eabP8evv/765/8dddRR2dc5r7zySvbvHXfcsdM2DjjggOzjjzzyyJ+PzTjjjNnHbrnllk77Mc0002QWXHDBPx/77bffMqNHj+60vY8++ijTu3fvzLHHHtvpMbY3aNCgoo/7tNNOy76G18LHH3+c6dmzZ+aEE07o9LzXXnstM+6443Z6fNlll82+9rrrrvvzsbfffjv72DjjjJN59tln/3z8gQce6LJvfu7WWWedTu+1++67Zx9/9dVXy96niy66qMuxxtfN2WWXXTITTDBB9hw7a665ZvbaJGHf43PlPProo9nHuS20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GkWLoDNZMh7rCbrooos6hb7hAZppppmyjwshagMihqpv553XUQY7rgLH/xMWhwhyD82oUR0CaJJJzH78MQgjGp5S+AAPjnuIeN5qq5k99FDngghpEF6HUBJCCCGEaGsR9NFHH2Vvl19+ebv11ltt0kknreV+CSEiEDM0PiXMDdHCesPOO3f8P41Pqe5GeWsHYeO9fyafPPT5IcxtmmnMbrqp8/P++tcw7r238L4goiSAhBBCCBHTatKg5MIIjz76qASQEHWEggbrrBMEEA7Yq67qLIC+/95slVWCAIrzglzg9OsXBBDha4gpSmXHtfw32ii8Dg9QMZ2g2YYQQgghREyrLZCW1dbo888/tzvvvNM+/fRT+z0RN3PGGWdUa9+E6PZQ2W3NNUPeDhXd8OBQ8tp5//3w93vvdYS9+S1MPz2f1/CYf1S9NDbeoU02MbviiuBJyofKXwshhBAiH0SbtLUIevjhh22dddaxv/71r/b222/bPPPMYx9//HE2V2ihhRaqzV4K0Q355JPQ5PSdd8wmm8zsnnvMFl+84/+feirk9uDlwUM0enT4AnJBM/PMhLGG+4gi/z8E0DLLBBF04YWF90Plr4UQQghRCJqls2DbtuFwhxxyiB1wwAH22muvWZ8+feyWW26xzz77zJZddlnbeOONa7OXQnQzXnvNbIklggDq3z8InlgAEfpGTx8EEKFsCCAqv7kAmnHGDgEEE08c/g+xRGPUH34wu+224lZ0VP5aCCGEEIVotXahJYugt956y7bZZpvs/XHHHddGjBiRLZd97LHH2imnnFL2jpx88snZ8tv77LNP2dsQoh144gmzpZc2+/JLs7nnNnv66VC2Gghp22svs6226ghvI+9nyik7Sl9zHy8SUMmeULbhw4OYosHq5ZcHkZUP8ocKhcgJIYQQQsSeoLYWQRNOOOGfeUDTTDONffDBB3/+37ckMJTB888/bxdffLHNN998Zb1eiHbh9ttDkQMEzZJLmj35ZMjrgc8+M1t22Y4S2c7UU5t9803w3CBeuA8zzRSKKhDKttxyZptuGrxAlMkuVPygUIlsIYQQQog0G6JVKHl3F198cXuK2BwjIXsN23///e2EE06wHXbYIft/pfLzzz/blltuaZdeeqmqzoluDfk5G24YPDBUgxsypKPcJJXbSLl79tmOCnCUqsbr8/XXwdvD63wV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nU8++cRGjx4dv2b33Xe3iy66yDZu3FjjNa+99poNHjzY2rRpE69Wfc899zT550PT1PcBBxxQa/++6667aryG+q7sutY+e9VVV9lhhx1mu+yyi+2333529dVX27p162psZ9WqVXb66afbrrvuGm9n/PjxtmXLlhqv4VjefOqbc3fzOI5feumldvDBB8d13alTJ/vOd75jy5Ytq+59W9nhgKY0bNiwaOrUqdGSJUuihQsXRqeddlq03377RRs3bsy95rLLLou6desWPffcc9Err7wSHXfccdHxxx9fYzv6umo777//fq5s2rQp9/zf//73aNddd43GjRsXvf7669H9998ffeMb34iefvrpkn7erGtIff/iF7+I7rzzzrioXj/99NNa2zn11FOjI488MnrppZeiF154IerevXs0atSo3PPr1q2LunTpEo0ePTr+Xb/73e+iXXbZJZo8eXLJPiuKV9/7779/dNttt9XYv8NtUN+VX9eLFy+ORo4cGT3xxBPR8uXL4+P5IYccEp1zzjm5bWzZsiXq1atXNGTIkOjVV1+N/vKXv0R77bVXdOONN+Zew7G8+dS3cO5uHsfxyZMnR88//3z09ttvRwsWLIjOPPPMuN2mfbpa922CIJTcmjVr4oOidiZZu3Zt1Lp16+ixxx7LveaNN96IXzNv3rzcY/p5+vTpBbc7YcKE6Igjjqjx2HnnnRfv3Kic+g7NnDkzb6NYB0c9/vLLL+cee+qpp6IWLVpE7733XvzzpEmToo4dO0ZffPFF7jU33HBDdNhhhzXp50Hx69uDIAVLhVDf1VXX7tFHH4122mmnaPPmzfHPahi1bNkyWr16de41Dz74YNS+fftc3XIsbz71LZy7m2ddL1q0KH6NAuBq3bcZDoeS867yPfbYI75dsGCBbd682YYMGZJ7TY8ePeKu9Xnz5tX4vxoyt9dee9kxxxxjv/71rxXE557Ta8NtyLBhw2ptA+Wt74ZQnWkI3IABA3KPqW5btmxp8+fPz73mxBNPtJ122qlGfasL/9NPPy3qZ0DT1rfT8DcNie3Xr59NnDixxjAK6rs661qv0TDIVq1a5eqxd+/e1qVLlxr1uH79elu6dGnuNRzLm0d9O87dzauuP/vsM5s6daodeOCB8dDkat23a35LgSa2detWu/baa+2EE06wXr16xY+tXr06btio0RvSjqTn3G233WYnn3xyPNb02WeftbFjx8ZzRDQG2bcT7ny+De2AmzZtisexovz13RCqS40nDumkqgOyfyd0qwNwyOtfz3Xs2LEonwFNX9+i/VjjxFXHL774ot144432/vvv289//vP4eeq7+ur6o48+sttvv90uueSS3GOFjtP+XF2v4VheffUtnLubT11PmjTJJkyYEAdBmgv217/+NXdhqhr3bYIglJSuBi1ZssTmzJnT6P9700035e7rSrF2Ql0t9gMpmld9I1v1PW7cuNz9Pn36xCdWTcTVhF1NoEV11bUaNZogffjhh9utt95a8veHyqlvzt3Np65Hjx5tp5xySnyB6t5777Vzzz3X5s6dGyerqUYMh0PJXHnllfbkk0/azJkzrWvXrrnH9957b/vyyy9rZYxSdjg9V8ixxx5r7777rn3xxRe57aQzyulndc1zJaly6rshVJdr1qyp8ZiGRikbkX8nCtW3P4fqqe9C+7fqfOXKlfHP1Hf11PWGDRvs1FNPjTNNTZ8+3Vq3bp17riH1yLG8+dR3Ppy7q7euO3ToYIccckg8NPkPf/hDnB1OdV6t+zZBEJqcxv5qx9KOMmPGjFpDWo466qj4oPncc8/lHtM4f6VaHDhwYMHtLly4MB4C41eJ9dpwG6Ku2rq2gdLXd0OozhQUa76Y07bUTa8TqL9m9uzZ8XyysL7VRc/QqOqq70L7t+aA+bBI6rs66lo9AkOHDo178p544olaV4hVj4sXL65xkUP1qEaQehH8NRzLm0d958O5u3kcx6MkuVoumK3Kfbss6RiQKZdffnnUoUOHaNasWTVSZP7rX/+qkSJb6RhnzJgRp8geOHBgXJxScE6ZMiVOyfnWW2/FmaKUZvHmm2+ulXpx/PjxcXa5Bx54gDSbFVrf+lkpNFWnOgzNnj07/vnjjz+ukSK7X79+0fz586M5c+bEqVfDFNnKKqiUyRdccEGc1nPatGlx/ZMyufrq+8UXX4wzwyk164oVK6Lf/va3UadOnaIxY8bktkF9V35dK435scceG/Xu3TvOGBW+Jp1Gd+jQoXF96/isus6XRpdjefXXN+fu5lHXK1asiO644464ffaPf/wjmjt3bpwie4899og++OCDqt23CYLQ5NToyVeUk95pzYCxY8fGKXC1WmCqrgAABClJREFUg5x99tnxDhimR+7bt2/Utm3baLfddovXj/nVr34VffXVV7VS8Op1StF50EEH1fgdqJz6vuWWW+p9jRrICnpU50qxeeGFF0YbNmyolaJz0KBB0c477xztu+++0V133VXSz4ri1LfWnFBjSifhNm3aRD179oxPuJ9//nmN30V9V3Zdewr0fEVri7iVK1dGw4cPj9d50joi1113XY2Uyr4tjuXVX9+cu5tHXb/33nvxPtu5c+d4SZOuXbtG559/frRs2bIa26m2fbuF/ilPHxQAAAAAlB5zggAAAABkCkEQAAAAgEwhCAIAAACQKQRBAAAAADKFIAgAAABAphAEAQAAAMgUgiAAAAAAmUIQBAAAACBTCIIAAAAAZApBEACgYkRRZEOGDLFhw4bVem7SpEm2++6727vvvluW9wYAaD4IggAAFaNFixY2depUmz9/vk2ePDn3+Ntvv20TJkyw+++/37p27VrU37l58+aibg8AUPkIggAAFaVbt25233332fXXXx8HP+oduuiii2zo0KHWr18/Gz58uLVt29a6dOliF1xwgX300Ue5//v000/boEGD4h6jPffc08444wxbsWJF7vmVK1fGgdbvf/97O+mkk6xNmzb28MMPl+mTAgDKpUWkswsAABVmxIgRtm7dOhs5cqTdfvvttnTpUjviiCPs4osvtjFjxtimTZvshhtusC1bttiMGTPi//PHP/4xDnL69OljGzdutJtvvjkOfBYuXGgtW7aM7x944IF2wAEH2M9+9rM4qFIg9M1vfrPcHxcAUEIEQQCAirRmzZo46Pnkk0/i4GbJkiX2wgsv2DPPPJN7jeYHqefozTfftEMPPbTWNtRL1KlTJ1u8eLH16tUrFwT98pe/tGuuuabEnwgAUCkYDgcAqEidO3e2Sy+91Hr27Bn3Ci1atMhmzpwZD4Xz0qNHj/i1PuTtrbfeslGjRtlBBx1k7du3j3t8ZNWqVTW2PWDAgDJ8IgBApWhV7jcAAEAhrVq1iotoeNuZZ55pd999d63X+XA2Pb///vvblClTbJ999rGtW7fGPUBffvlljdfvtttuJfoEAIBKRBAEAKgK/fv3j4fFqXfHA6PQxx9/HA+LUwA0ePDg+LE5c+aU4Z0CACodw+EAAFXhiiuuiOcHabjbyy+/HA+B0/ygCy+80L766ivr2LFjnBHuoYcesuXLl8fJEsaNG1futw0AqEAEQQCAqqDhbXPnzo0DHqXL7t27t1177bVxOmxlflOZNm2aLViwIB4C96Mf/cgmTpxY7rcNAKhAZIcDAAAAkCn0BAEAAADIFIIgAAAAAJlCEAQAAAAgUwiCAAAAAGQKQRAAAACATCEIAgAAAJApBEEAAAAAMoUgCAAAAECmEAQBAAAAyBSCIAAAAACZQhAEAAAAwLLk/wFzJwihA8hwDgAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Representative indexes: [229 19 810 57 745 508 679 776 502 667 351 547 566 800 130 574 301 659\n", + " 870 807 462 842 767 779 864 283 242 717 260 249 637 535 361 7 660 453\n", + " 858 75 499 6 192 505 867 945 970 760 454 342 220 124]\n", + "Representative indexes (1-based): [230 20 811 58 746 509 680 777 503 668 352 548 567 801 131 575 302 660\n", + " 871 808 463 843 768 780 865 284 243 718 261 250 638 536 362 8 661 454\n", + " 859 76 500 7 193 506 868 946 971 761 455 343 221 125]\n" + ] + }, + { + "data": { + "image/png": "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uoSpXgTd0dFR+Hy+1T4cusRY78bBWjcW1rtxsNaNJbuG6i1ijQhAiUQCsixv3JEg8eRaW1tX+zDoMhEn1mqfXHT5sN6Ng7VuLKx342CtG4tvjdT7fxsBWsTGCERERERE1FAYgoiIiIiIqKEwBNGa53A48PWvf936Shsf6904WOvGwno3Dta6sTjWab3XdWMEIiIiIiKiXxZHgoiIiIiIqKEwBBERERERUUNhCCIiIiIioobCEERERERERA2FIYguuUceeQTXXHMNvF4vYrEY7r33Xpw9e3bZNuVyGV/60pcQDofh8Xhw//33I5lMLttGkqSLbk8++eSybV544QXs3bvX6lCyefNmfO9737ssz5F+uXp/5zvfwc0332wtqibqOD8/f9F+UqkUHnjgAWubQCCAz3/+88jn88u2eeutt3DTTTfB6XRaq1X/xV/8xSV/fnRp6t3Z2XnR+f2tb31r2Tas99qutThnf/d3fxc9PT1wuVxob2/H7/3e7yGTySzbz8jICD784Q9D0zRrP1/5yldQr9eXbcPX8o1Tb753b4zX8S984QvYtGmTVetoNIqPfvSjOHPmzPo+t0V3OKJL6c477zSfeOIJ88SJE+bRo0fNX/3VXzXb29vNfD6/tM1v/dZvmW1tbeazzz5rvv766+Z1111nfuADH1i2H/HPVexncnJy6VYqlZZ+fv78eVPTNPPBBx80T506ZX772982FUUxn3nmmcv6fBvd+6n33/zN35iPPPKIdRN1TafTF+3nrrvuMq+44grzlVdeMV966SVz8+bN5ic/+cmln2cyGbOpqcl84IEHrL/r+9//vulyuczHH3/8sj1XWrl6d3R0mN/4xjeWnd8X7oP1Xvu1Pn78uHnfffeZTz/9tNnf32+9nm/ZssW8//77l/ZRr9fNnTt3mrfddpv55ptvmj/60Y/MSCRiPvzww0vb8LV849Rb4Hv3xngdf/zxx80XX3zRHBwcNI8cOWLec8891uc2cU6v13ObIYguu+npaetFUZxMwvz8vKmqqvkf//EfS9ucPn3a2ubQoUNLj4n7Tz311Hvu96GHHjJ37Nix7LFPfOIT1slNa6feF3r++eff9UOxeHEUjx8+fHjpsR//+MemJEnm+Pi4df+xxx4zg8GgWalUlrb56le/avb09FzS50MrX+/FECTC0nthvddXrRf9+7//u2m3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goiIaE2anp62Qk8qlbLCzYkTJ/DSSy/hJz/5ydI24vogMXJ09uxZbN269aJ9iFGiaDSK48ePY+fOnUsh6G//9m/x+7//+5f5GRER0VrB6XBERLQmxWIxfOELX8C2bdusUaFjx47h+eeft6bCLd56e3utbRenvPX19eGTn/wkuru74fP5rBEfYWRkZNm+r7766lV4RkREtFbYVvsAiIiI3ovNZrNugpjeds899+DP//zPL9pucTqb+HlHRwe++93vIpFIwDAMawSoWq0u297tdl+mZ0BERGsRQxAREa0Le/futabFidGdxWB0obm5OWtanAhAN910k/XYgQMHVuFIiYhoreN0OCIiWhe+9KUvWdcHieluhw8ftqbAieuDPvvZz0LXdQSDQasj3He+8x309/dbzRIefPDB1T5sIiJagxiCiIhoXRDT215++WUr8Ih22bt27cKXv/xlqx226Pwmbk8++SSOHDliTYH7gz/4Azz66KOrfdhERLQGsTscERERERE1FI4EERERERFRQ2EIIiIiIiKihsIQREREREREDYUhiIiIiIiIGgpDEBERERERNRSGICIiIiIiaigMQURERERE1FAYgoiIiIiIqKEwBBERERERUUNhCCIiIiIioobCEERERERERGgk/x+wHfgd6ljSvgAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Plot the temperature data\n", + "plt.figure(figsize=(10, 5))\n", + "plt.plot(time_horizon.model_time_horizon, temp, label='Global Temperature', color='blue')\n", + "plt.title('Global Temperature Over Time')\n", + "plt.xlabel('Year')\n", + "plt.ylabel('Temperature Anomaly (°C)')\n", + "plt.show()\n", + "\n", + "summaries = temp[-1, :]\n", + "\n", + "N = 50 # number of members you want\n", + "quantile_indexes = np.argsort(summaries)\n", + "representative_indexes = []\n", + "\n", + "for i in range(N):\n", + " start = int(i * (1001 / N))\n", + " end = int((i+1) * (1001 / N))\n", + " idx_in_quantile = np.random.choice(quantile_indexes[start:end])\n", + " representative_indexes.append(idx_in_quantile)\n", + "\n", + "representative_indexes = np.array(representative_indexes)\n", + "print(\"Representative indexes:\", representative_indexes)\n", + "\n", + "# Print indexes but by adding 1 to each index for better readability\n", + "print(\"Representative indexes (1-based):\", representative_indexes + 1)\n", + "\n", + "# Now plot the subset of representative members\n", + "plt.figure(figsize=(10, 5))\n", + "for idx in representative_indexes:\n", + " plt.plot(time_horizon.model_time_horizon, temp[:, idx], label=f'Member {idx}', alpha=0.5)\n", + "plt.title('Representative Global Temperature Members')\n", + "plt.xlabel('Year')\n", + "plt.ylabel('Temperature Anomaly (°C)')\n", + "plt.show()\n" + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -601,7 +608,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "metadata": {}, "outputs": [ { @@ -613,7 +620,7 @@ } ], "source": [ - "from analysis.analyzer import run_optimization_adaptive\n", + "from run_optimization import run_optimization_adaptive\n", "import numpy as np\n", "import random\n", "from justice.util.enumerations import Optimizer\n", diff --git a/README.md b/README.md index 64c15d4..1602a2a 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,7 @@ ![GitHub Actions build status](https://github.com/pollockDeVis/JUSTICE/actions/workflows/pytest.yml/badge.svg?event=push) [![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.15145122.svg)](https://doi.org/10.5281/zenodo.15145122) +

JUSTICE Logo

@@ -12,7 +13,9 @@ JUSTICE is designed to explore the influence on distributive justice outcomes du ### JUSTICE Overview -Flowchart of JUSTICE +

+ JUSTICE Framework +

### Documentation @@ -25,34 +28,23 @@ JUSTICE is developed by the [HIPPO Lab](https://www.tudelft.nl/ai/hippo-lab) at TU Delft Logo

+# Citation -### Installation -Create and activate a virtual environment and install as a package using - -``` -pip install . -``` - -### Running JUSTICE MOMARL - -#### Training - -JUSTICE-MOMARL can train multi-agent and multi-objective policies and currently support optimising for two objectives. JUSTICE-MOMARL converts the multi-objective training into a single objective by generating various policies with different weight combinations that weight each objective. The entire training process generates **100 different weight combinations** and trains each policy by linearising and normalising the reward and using **Multi Agent Proximal Policy Optimization (MAPPO)** as the reinforcement learning algorithm. +To cite this code, please use the information in [CITATION.cff](CITATION.cff) and the following bibtex entry: -Instead of training all the 100 weights together, we divide the training into batches and train a subset of weight combinations in each batch. For example, in order to train the first 10 uniform weight combnations, balancing the global economic output and inverse global temperature reward functions, run the following: - -```bash -python train.py --start_uniform_weight 0 --end_uniform_weight 10 --env-config.rewards "global_economic_output" "inverse_global_temperature" --seed= --base_save_path="Path where results are saved" ``` - -You can view the additional argument to modify the JUSTICE modules and the RL hyperparameters by looking at the `Args` and `EnvConfig` dataclasses in `rl/args.py`. - -This script will save the checkpoints, pickled configs and multi-objective vectorised returns for trained policies for each weight combination in the base_save_path provided. - -#### Evaluation -Once models have been trained for different weight combinations and the checkpoints for each of them are saved, you can run the evaluation for one specific weight combination and for one evaluation seed by running: - -```bash -python eval.py --checkpoint_path="Absolute path to the checkpoint for policy" --seed=0 --output_path="Directory where evaluation results are saved"" +@inproceedings{ijcai2025p1064, +title = {Exploring Equity of Climate Policies Using Multi-Agent Multi-Objective Reinforcement Learning}, +author = {Biswas, Palok and Osika, Zuzanna and Tamassia, Isidoro and Whorra, Adit and Zatarain-Salazar, Jazmin and Kwakkel, Jan and Oliehoek, Frans A. and Murukannaiah, Pradeep K.}, +booktitle = {Proceedings of the Thirty-Fourth International Joint Conference on +Artificial Intelligence, {IJCAI-25}}, +publisher = {International Joint Conferences on Artificial Intelligence Organization}, +editor = {James Kwok}, +pages = {9573--9581}, +year = {2025}, +month = {8}, +note = {AI and Social Good}, +doi = {10.24963/ijcai.2025/1064}, +url = {https://doi.org/10.24963/ijcai.2025/1064}, +} ``` -The evaluation script will run the MOMARL policy in the JUSTICE simulation and save the evolution of various economic and climate metrics over time where the Emission Control Rate and Savings Rates are set by the trained policy in each time step. \ No newline at end of file diff --git a/analysis/analyzer.py b/analysis/analyzer.py deleted file mode 100644 index 3a06561..0000000 --- a/analysis/analyzer.py +++ /dev/null @@ -1,590 +0,0 @@ -""" -This module contains the uncertainty analysis for the JUSTICE model using EMA Workbench. -""" - -import functools -import datetime -import numpy as np -import os -import random -from justice.util.enumerations import * -import json - -from solvers.moea.borgMOEA import BorgMOEA -from ema_workbench.em_framework.optimization import EpsNSGAII - -# Suppress numpy version warnings -import warnings - -warnings.filterwarnings("ignore") - -# EMA -from ema_workbench import ( - Model, - RealParameter, - ArrayOutcome, - ScalarOutcome, - CategoricalParameter, - ema_logging, - MultiprocessingEvaluator, - SequentialEvaluator, - MPIEvaluator, - Constant, - Scenario, -) -from ema_workbench.util.utilities import save_results, load_results -from ema_workbench.em_framework.optimization import ( - ArchiveLogger, - EpsilonProgress, - # HyperVolume, -) - -# JUSTICE -# Set this path to the src folder -# export PYTHONPATH=$PYTHONPATH:/Users/palokbiswas/Desktop/pollockdevis_git/JUSTICE/src -# from src.util.enumerations import Scenario -from justice.util.EMA_model_wrapper import ( - model_wrapper, - model_wrapper_emodps, - model_wrapper_static_optimization, -) -from justice.util.model_time import TimeHorizon -from justice.util.data_loader import DataLoader - -from justice.util.enumerations import WelfareFunction, get_welfare_function_name -from config.default_parameters import SocialWelfareDefaults - -SMALL_NUMBER = 1e-9 # Used to avoid division by zero in RBF calculations - - -def run_optimization_adaptive( - config_path, - nfe=None, - # population_size=100, # Default population size. For local machine, use smaller values like 5 or less - swf=0, - seed=None, - datapath="./data", - filename=None, - folder=None, - economy_type=Economy.NEOCLASSICAL, - damage_function_type=DamageFunction.KALKUHL, - abatement_type=Abatement.ENERDATA, - optimizer=Optimizer.EpsNSGAII, - evaluator=Evaluator.SequentialEvaluator, -): - - # Load configuration from file - with open(config_path, "r") as file: - config = json.load(file) - - start_year = config["start_year"] - end_year = config["end_year"] - data_timestep = config["data_timestep"] - timestep = config["timestep"] - emission_control_start_year = config["emission_control_start_year"] - n_rbfs = config["n_rbfs"] - n_inputs = config["n_inputs"] - epsilons = config["epsilons"] - temperature_year_of_interest = config["temperature_year_of_interest"] - reference_ssp_rcp_scenario_index = config["reference_ssp_rcp_scenario_index"] - - stochastic_run = config["stochastic_run"] - - # Check if climate_ensemble_members is in the config, if not set it to None - if "climate_ensemble_members" in config: - climate_ensemble_members = config["climate_ensemble_members"] - else: - climate_ensemble_members = None - - social_welfare_function = WelfareFunction.from_index(swf) - social_welfare_function_type = social_welfare_function.value[ - 0 - ] # Gets the first value of the tuple with index 0 - - model = Model("JUSTICE", function=model_wrapper_emodps) - - # Instantiate classes and compute derived parameters - data_loader = DataLoader() - time_horizon = TimeHorizon( - start_year=start_year, - end_year=end_year, - data_timestep=data_timestep, - timestep=timestep, - ) - emission_control_start_timestep = time_horizon.year_to_timestep( - year=emission_control_start_year, timestep=timestep - ) - temperature_year_of_interest_index = time_horizon.year_to_timestep( - year=temperature_year_of_interest, timestep=timestep - ) - - # Define constants, uncertainties and levers - model.constants = [ - Constant("n_regions", len(data_loader.REGION_LIST)), - Constant("n_timesteps", len(time_horizon.model_time_horizon)), - Constant("emission_control_start_timestep", emission_control_start_timestep), - Constant("n_rbfs", n_rbfs), - Constant("n_inputs_rbf", n_inputs), - Constant("n_outputs_rbf", len(data_loader.REGION_LIST)), - Constant("social_welfare_function_type", social_welfare_function_type), - Constant("economy_type", economy_type.value), - Constant("damage_function_type", damage_function_type.value), - Constant("abatement_type", abatement_type.value), - Constant( - "temperature_year_of_interest_index", temperature_year_of_interest_index - ), - Constant("stochastic_run", stochastic_run), - Constant("climate_ensemble_members", climate_ensemble_members), - ] - - # Speicify uncertainties - model.uncertainties = [ - CategoricalParameter( - "ssp_rcp_scenario", - ( - 0, - 1, - 2, - 3, - 4, - 5, - 6, - 7, - ), # TODO should have a configuration file for optimizations - ), # 8 SSP-RCP scenario combinations - ] - - # Set the model levers, which are the RBF parameters - # These are the formula to calculate the number of centers, radii and weights - - centers_shape = ( - n_rbfs * n_inputs - ) # centers = n_rbfs x n_inputs # radii = n_rbfs x n_inputs - weights_shape = ( - len(data_loader.REGION_LIST) * n_rbfs - ) # weights = n_outputs x n_rbfs - - centers_levers = [] - radii_levers = [] - weights_levers = [] - - for i in range(centers_shape): - centers_levers.append( - RealParameter(f"center {i}", -1.0, 1.0) - ) # TODO should have a configuration file for optimizations - radii_levers.append( - RealParameter(f"radii {i}", SMALL_NUMBER, 1.0) - ) # Changed from 0 to SMALL_NUMBER to avoid division by zero in RBF calculations - - for i in range(weights_shape): - weights_levers.append( - RealParameter(f"weights {i}", SMALL_NUMBER, 1.0) - ) # Probably this range determines the min and max values of the ECR - - # Set the model levers - model.levers = centers_levers + radii_levers + weights_levers - - model.outcomes = [ - ScalarOutcome( - "welfare", - variable_name="welfare", - kind=ScalarOutcome.MINIMIZE, - ), - # ScalarOutcome( - # "years_above_temperature_threshold", - # variable_name="years_above_threshold", - # kind=ScalarOutcome.MINIMIZE, - # ), - ScalarOutcome( - "fraction_above_threshold", - variable_name="fraction_above_threshold", - kind=ScalarOutcome.MINIMIZE, - ), - # NOTE : Temporarily commented out for bi-objective optimization - # ScalarOutcome( - # "welfare_loss_damage", - # variable_name="welfare_loss_damage", - # kind=ScalarOutcome.MAXIMIZE, - # ), - # ScalarOutcome( - # "welfare_loss_abatement", - # variable_name="welfare_loss_abatement", - # kind=ScalarOutcome.MAXIMIZE, - # ), - ] - - reference_scenario = Scenario( - "reference", - ssp_rcp_scenario=reference_ssp_rcp_scenario_index, - ) - - # Add social_welfare_function.value[1] to the filename - filename = f"{social_welfare_function.value[1]}_{nfe}_{seed}.tar.gz" - date = datetime.datetime.now().strftime("%Y_%m_%d_%H_%M_%S") - - directory_name = os.path.join( - datapath, f"{social_welfare_function.value[1]}_{date}_{seed}" - ) - # Create a directory inside ./data/ with name output_{date} to save the results - os.makedirs(directory_name, exist_ok=True) - # Set the directory path to a variable - - convergence_metrics = [ - ArchiveLogger( - directory_name, - [l.name for l in model.levers], - [o.name for o in model.outcomes], - base_filename=filename, - ), - EpsilonProgress(), - ] - algorithm = None - if optimizer == Optimizer.EpsNSGAII: - algorithm = EpsNSGAII - elif optimizer == Optimizer.BorgMOEA: - algorithm = BorgMOEA - - if evaluator == Evaluator.MPIEvaluator: - with MPIEvaluator(model) as evaluator: # Use this for HPC - results = evaluator.optimize( - searchover="levers", - nfe=nfe, - epsilons=epsilons, - reference=reference_scenario, - convergence=convergence_metrics, - # population_size=population_size, - algorithm=algorithm, - ) - elif evaluator == Evaluator.MultiprocessingEvaluator: - with MultiprocessingEvaluator(model) as evaluator: - results = evaluator.optimize( - searchover="levers", - nfe=nfe, - epsilons=epsilons, - reference=reference_scenario, - convergence=convergence_metrics, - # population_size=population_size, - algorithm=algorithm, - ) - else: - - # with MPIEvaluator(model) as evaluator: # Use this for HPC - with SequentialEvaluator(model) as evaluator: # Use this for local machine - results = evaluator.optimize( - searchover="levers", - nfe=nfe, - epsilons=epsilons, - reference=reference_scenario, - convergence=convergence_metrics, - # population_size=population_size, # NOTE set population parameters for local machine. It is faster for testing - algorithm=algorithm, - ) - - -####################################################################################################################################################### -# Deprecated -####################################################################################################################################################### - - -def run_optimization_static(nfe=5000, filename=None, folder=None): - - # TODO: Update this model wrapper. [Deprecated] - - model = Model("JUSTICE", function=model_wrapper_static_optimization) - - # Define constants, uncertainties and levers - model.constants = [ - Constant("n_regions", len(data_loader.REGION_LIST)), - Constant("n_timesteps", len(time_horizon.model_time_horizon)), - Constant("elasticity_of_marginal_utility_of_consumption", 1.45), - Constant("pure_rate_of_social_time_preference", 0.015), - ] - - # Speicify uncertainties - model.uncertainties = [ - CategoricalParameter( - "ssp_rcp_scenario", (0, 1, 2, 3, 4, 5, 6, 7) - ), # 8 SSP-RCP scenario combinations - CategoricalParameter("inequality_aversion", (0.0, 0.5, 1.45, 2.0)), - # Add Discount rate as a RealParameter Uncertainty - # RealParameter("pure_rate_of_social_time_preference", 0.0001, 0.020), - ] - - # Set the model levers, which are the RBF parameters - - ecr_levers = [] - for i in range(len(data_loader.REGION_LIST)): - for j in range(len(time_horizon.model_time_horizon)): - ecr_levers.append( - RealParameter(f"emissions_control_rate {i} {j}", 0.00, 1.0) - ) - - # Set the model levers - model.levers = ecr_levers - - model.outcomes = [ - ScalarOutcome( - "mean_welfare_utilitarian", - variable_name="welfare_utilitarian", - kind=ScalarOutcome.MAXIMIZE, - ), - ] - - reference_scenario = Scenario( - "reference", - ssp_rcp_scenario=2, - inequality_aversion=0.0, - ) - - convergence_metrics = [ - ArchiveLogger( - "./data/output", - [l.name for l in model.levers], - [o.name for o in model.outcomes], - base_filename="JUSTICE_dps_archive.tar.gz", - ), - EpsilonProgress(), - ] - - with SequentialEvaluator(model) as evaluator: - results = evaluator.optimize( - searchover="levers", - nfe=nfe, - epsilons=[0.01] * len(model.outcomes), # * len(model.outcomes) - reference=reference_scenario, - convergence=convergence_metrics, - ) - - -####################################################################################################################################################### - - -def perform_exploratory_analysis(number_of_experiments=10, filename=None, folder=None): - # TODO: Update this model wrapper. [Deprecated] - # Instantiate the model - model = Model("JUSTICE", function=model_wrapper) - model.constants = [ - Constant("n_regions", len(data_loader.REGION_LIST)), - Constant("n_timesteps", len(time_horizon.model_time_horizon)), - ] - - # Speicify uncertainties - model.uncertainties = [ - CategoricalParameter( - "ssp_rcp_scenario", (0, 1, 2, 3, 4, 5, 6, 7) - ), # 8 SSP-RCP scenario combinations - RealParameter("elasticity_of_marginal_utility_of_consumption", 0.0, 2.0), - RealParameter( - "pure_rate_of_social_time_preference", 0.0001, 0.020 - ), # 0.1 to 3% in RICE50 gazzotti2 - RealParameter("inequality_aversion", 0.0, 2.0), # 0.2 -2.5 - ] - - # Set model levers - has to be 2D array of shape (57, 286) 57 regions and 286 timesteps - - # TODO temporarily commented out - # sr_levers = [] - # ecr_levers = [] - # for i in range(len(data_loader.REGION_LIST)): - # for j in range(len(time_horizon.model_time_horizon)): - # sr_levers.append(RealParameter(f"savings_rate {i} {j}", 0.05, 0.5)) - # ecr_levers.append( - # RealParameter(f"emissions_control_rate {i} {j}", 0.00, 1.0) - # ) - - # model.levers = sr_levers + ecr_levers - - # Specify outcomes #All outcomes have shape (57, 286, 1001) except global_temperature which has shape (286, 1001) - model.outcomes = [ - ArrayOutcome( - "mean_net_economic_output", - function=functools.partial(np.mean, axis=2), - variable_name="net_economic_output", - ), - ArrayOutcome( - "5p_net_economic_output", - function=functools.partial(np.percentile, q=5, axis=2), - variable_name="net_economic_output", - ), - ArrayOutcome( - "95p_net_economic_output", - function=functools.partial(np.percentile, q=95, axis=2), - variable_name="net_economic_output", - ), - ArrayOutcome( - "mean_consumption_per_capita", - function=functools.partial(np.mean, axis=2), - variable_name="consumption_per_capita", - ), - ArrayOutcome( - "5p_consumption_per_capita", - function=functools.partial(np.percentile, q=5, axis=2), - variable_name="consumption_per_capita", - ), - ArrayOutcome( - "95p_consumption_per_capita", - function=functools.partial(np.percentile, q=95, axis=2), - variable_name="consumption_per_capita", - ), - ArrayOutcome( - "mean_emissions", - function=functools.partial(np.mean, axis=2), - variable_name="emissions", - ), - ArrayOutcome( - "5p_emissions", - function=functools.partial(np.percentile, q=5, axis=2), - variable_name="emissions", - ), - ArrayOutcome( - "95p_emissions", - function=functools.partial(np.percentile, q=95, axis=2), - variable_name="emissions", - ), - ArrayOutcome( - "mean_economic_damage", - function=functools.partial(np.mean, axis=2), - variable_name="economic_damage", - ), - ArrayOutcome( - "5p_economic_damage", - function=functools.partial(np.percentile, q=5, axis=2), - variable_name="economic_damage", - ), - ArrayOutcome( - "95p_economic_damage", - function=functools.partial(np.percentile, q=95, axis=2), - variable_name="economic_damage", - ), - ArrayOutcome( - "mean_abatement_cost", - function=functools.partial(np.mean, axis=2), - variable_name="abatement_cost", - ), - ArrayOutcome( - "5p_abatement_cost", - function=functools.partial(np.percentile, q=5, axis=2), - variable_name="abatement_cost", - ), - ArrayOutcome( - "95p_abatement_cost", - function=functools.partial(np.percentile, q=95, axis=2), - variable_name="abatement_cost", - ), - ArrayOutcome( - "mean_disentangled_utility", - function=functools.partial(np.mean, axis=2), - variable_name="disentangled_utility", - ), - ArrayOutcome( - "5p_disentangled_utility", - function=functools.partial(np.percentile, q=5, axis=2), - variable_name="disentangled_utility", - ), - ArrayOutcome( - "95p_disentangled_utility", - function=functools.partial(np.percentile, q=95, axis=2), - variable_name="disentangled_utility", - ), - ArrayOutcome( - "mean_consumption", - function=functools.partial(np.mean, axis=2), - variable_name="consumption", - ), - ArrayOutcome( - "5p_consumption", - function=functools.partial(np.percentile, q=5, axis=2), - variable_name="consumption", - ), - ArrayOutcome( - "95p_consumption", - function=functools.partial(np.percentile, q=95, axis=2), - variable_name="consumption", - ), - # ArrayOutcome("consumption", function=functools.partial(np.mean, axis=2)), - # ArrayOutcome("welfare_utilitarian"), # (286, 1001) #, function=get_mean_2D - # ArrayOutcome("consumption_per_capita", function=apply_statistical_functions), - # ArrayOutcome("emissions", function=apply_statistical_functions), - ArrayOutcome( - "mean_global_temperature", - function=functools.partial(np.mean, axis=1), - variable_name="global_temperature", - ), # (286, 1001) - ArrayOutcome( - "5p_global_temperature", - function=functools.partial(np.percentile, q=5, axis=1), - variable_name="global_temperature", - ), # (286, 1001) - ArrayOutcome( - "95p_global_temperature", - function=functools.partial(np.percentile, q=95, axis=1), - variable_name="global_temperature", - ), - ArrayOutcome( - "mean_welfare_utilitarian", - function=functools.partial(np.mean, axis=1), - variable_name="welfare_utilitarian", - ), # (286, 1001) - ArrayOutcome( - "5p_welfare_utilitarian", - function=functools.partial(np.percentile, q=5, axis=1), - variable_name="welfare_utilitarian", - ), # (286, 1001) - ArrayOutcome( - "95p_welfare_utilitarian", - function=functools.partial(np.percentile, q=95, axis=1), - variable_name="welfare_utilitarian", - ), # (286, 1001) - # (286, 1001) - # ArrayOutcome("economic_damage", function=apply_statistical_functions), - # ArrayOutcome("abatement_cost", function=apply_statistical_functions), - # ArrayOutcome("disentangled_utility", function=apply_statistical_functions), - ] - - with MultiprocessingEvaluator(model) as evaluator: - results = evaluator.perform_experiments( - scenarios=number_of_experiments, - reporting_frequency=100, # policies=2,TODO temporarily commented out - ) - - if filename is None: - file_name = f"optimal_open_exploration_{number_of_experiments}.tar.gz" - - if folder is None: - target_directory = os.path.join(os.getcwd(), "data/output", file_name) - else: - target_directory = os.path.join(folder, file_name) - - save_results(results, file_name=target_directory) - - -if __name__ == "__main__": - seeds = [ - 9845531, - 1644652, - 3569126, - 6075612, - 521475, - ] - - config_path = "analysis/normative_uncertainty_optimization.json" # This loads the config used in the Paper - - ema_logging.log_to_stderr(ema_logging.INFO) - - seed = seeds[4] - random.seed(seed) - np.random.seed(seed) - # perform_exploratory_analysis(number_of_experiments=10, filename=None, folder=None) - # run_optimization_adaptive( - # n_rbfs=4, n_inputs=2, nfe=5, swf=4, filename=None, folder=None, seed=seed - # ) - run_optimization_adaptive( - config_path=config_path, - nfe=5, - swf=0, - seed=seed, - datapath="./data", - optimizer=Optimizer.EpsNSGAII, - population_size=2, # Optimizer.BorgMOEA, - evaluator=Evaluator.SequentialEvaluator, - ) diff --git a/analysis/hpc_run.py b/analysis/hpc_run.py index 5804958..d86a8ce 100644 --- a/analysis/hpc_run.py +++ b/analysis/hpc_run.py @@ -1,25 +1,139 @@ -from analysis.analyzer import run_optimization_adaptive +from run_optimization import run_optimization_momadps, run_single_agent_momadps import sys import random import numpy as np from justice.util.enumerations import Optimizer, Evaluator -config_path = "analysis/normative_uncertainty_optimization.json" # This loads the config used in the Paper +CONFIG_PATH = "analysis/momadps_config.json" +NASH_PROFILES_PATH = "pareto_nash_profiles.csv" +POLICY_BANK_PATH = "COMBINED_MOMA_epsilon_nondominated_set.csv" if __name__ == "__main__": - nfe = int(sys.argv[1]) if len(sys.argv) > 1 else 5 # default value 5 - swf = int(sys.argv[2]) if len(sys.argv) > 2 else 0 # default value 0 - seed = int(sys.argv[3]) if len(sys.argv) > 3 else 5000 # default value 5000 + nfe = int(sys.argv[1]) if len(sys.argv) > 1 else 5 + swf = int(sys.argv[2]) if len(sys.argv) > 2 else 0 # unused, keep for compatibility + seed = int(sys.argv[3]) if len(sys.argv) > 3 else 5000 + scenario_index = int(sys.argv[4]) if len(sys.argv) > 4 else 2 + policy_index = int(sys.argv[5]) if len(sys.argv) > 5 else 0 + variable_macro_index = int(sys.argv[6]) if len(sys.argv) > 6 else 0 + population_size = int(sys.argv[7]) if len(sys.argv) > 7 else 100 - # Setting the seed random.seed(seed) np.random.seed(seed) - run_optimization_adaptive( - config_path=config_path, + + run_single_agent_momadps( + config_path=CONFIG_PATH, + nash_profiles_path=NASH_PROFILES_PATH, + policy_bank_path=POLICY_BANK_PATH, + policy_index=policy_index, + variable_macro_index=variable_macro_index, nfe=nfe, - swf=swf, seed=seed, datapath="./data", - optimizer=Optimizer.BorgMOEA, # Optimizer.BorgMOEA, Optimizer.EpsNSGAII + optimizer=Optimizer.MMBorgMOEA, + population_size=population_size, + reference_ssp_rcp_scenario_index=scenario_index, evaluator=Evaluator.SequentialEvaluator, + epsilons=[1e-3, 1e-3], ) + + +################ + +# from run_optimization import run_optimization_adaptive +# import sys +# import random +# import numpy as np +# from justice.util.enumerations import Optimizer, Evaluator + +# config_path = "analysis/normative_uncertainty_optimization.json" # This loads the config used in the Paper + +# if __name__ == "__main__": +# nfe = int(sys.argv[1]) if len(sys.argv) > 1 else 5 # default value 5 +# swf = int(sys.argv[2]) if len(sys.argv) > 2 else 0 # default value 0 +# seed = int(sys.argv[3]) if len(sys.argv) > 3 else 5000 # default value 5000 +# scenario_index = int(sys.argv[4]) if len(sys.argv) > 4 else 2 # default value 2 + +# # Setting the seed +# random.seed(seed) +# np.random.seed(seed) +# run_optimization_adaptive( +# config_path=config_path, +# nfe=nfe, +# swf=swf, +# seed=seed, +# datapath="./data", +# optimizer=Optimizer.MMBorgMOEA, # Optimizer.BorgMOEA, Optimizer.EpsNSGAII +# population_size=100, +# reference_ssp_rcp_scenario_index=scenario_index, +# evaluator=Evaluator.SequentialEvaluator, +# ) + + +###################### + +# from analyzer import run_optimization_momadps +# import sys +# import random +# import numpy as np +# from justice.util.enumerations import Optimizer, Evaluator + +# config_path = "analysis/momadps_config.json" # This loads the config used in the Paper + +# if __name__ == "__main__": +# nfe = int(sys.argv[1]) if len(sys.argv) > 1 else 5 # default value 5 +# swf = int(sys.argv[2]) if len(sys.argv) > 2 else 0 # default value 0 +# seed = int(sys.argv[3]) if len(sys.argv) > 3 else 5000 # default value 5000 +# scenario_index = int(sys.argv[4]) if len(sys.argv) > 4 else 2 # default value 2 + +# # Setting the seed +# random.seed(seed) +# np.random.seed(seed) +# run_optimization_momadps( +# config_path=config_path, +# nfe=nfe, +# seed=seed, +# datapath="./data", +# optimizer=Optimizer.MMBorgMOEA, # Optimizer.BorgMOEA, Optimizer.EpsNSGAII +# population_size=100, +# reference_ssp_rcp_scenario_index=scenario_index, +# evaluator=Evaluator.SequentialEvaluator, +# ) + +####################################################### + +# from analyzer import run_optimization_momadps, run_single_agent_momadps +# import sys +# import random +# import numpy as np +# from justice.util.enumerations import Optimizer, Evaluator + +# CONFIG_PATH = "analysis/momadps_config.json" +# REFERENCE_SET_PATH = "data/temporary/MOMA_DATA/200k/MOMA_reference_set.csv" + +# if __name__ == "__main__": +# nfe = int(sys.argv[1]) if len(sys.argv) > 1 else 5 +# swf = int(sys.argv[2]) if len(sys.argv) > 2 else 0 # unused, keep for compatibility +# seed = int(sys.argv[3]) if len(sys.argv) > 3 else 5000 +# scenario_index = int(sys.argv[4]) if len(sys.argv) > 4 else 2 +# policy_index = int(sys.argv[5]) if len(sys.argv) > 5 else 0 +# variable_macro_index = int(sys.argv[6]) if len(sys.argv) > 6 else 0 +# population_size = int(sys.argv[7]) if len(sys.argv) > 7 else 100 + +# random.seed(seed) +# np.random.seed(seed) + +# run_single_agent_momadps( +# config_path=CONFIG_PATH, +# reference_set_path=REFERENCE_SET_PATH, +# policy_index=policy_index, +# variable_macro_index=variable_macro_index, +# nfe=nfe, +# seed=seed, +# datapath="./data", +# optimizer=Optimizer.MMBorgMOEA, +# population_size=population_size, +# reference_ssp_rcp_scenario_index=scenario_index, +# evaluator=Evaluator.SequentialEvaluator, +# epsilons=[1e-3, 1e-3], +# ) +####################################################### diff --git a/analysis/hpc_slurm_scripts/mm_borg_exclusive.sh b/analysis/hpc_slurm_scripts/mm_borg_exclusive.sh new file mode 100644 index 0000000..c6bc780 --- /dev/null +++ b/analysis/hpc_slurm_scripts/mm_borg_exclusive.sh @@ -0,0 +1,35 @@ +#!/bin/bash +#SBATCH --job-name=ExBorg +#SBATCH --partition=compute-p2 +#SBATCH --time=00:10:00 +#SBATCH --nodes=1 +#SBATCH --ntasks=61 # 5 islands, 11 workers each -> 61 ranks +#SBATCH --cpus-per-task=1 +#SBATCH --exclusive +#SBATCH --mem=0 +#SBATCH --account=research-tpm-mas +#SBATCH --output=logs/%x-%j.out +#SBATCH --error=logs/%x-%j.err + +module load 2025 +module load openmpi +module load miniconda3 +source "$(conda info --base)/etc/profile.d/conda.sh" +conda activate justice311 + +export OMP_NUM_THREADS=1 +export MKL_NUM_THREADS=1 +export OPENBLAS_NUM_THREADS=1 +export NUMEXPR_NUM_THREADS=1 + +cd "$SLURM_SUBMIT_DIR" +mkdir -p logs + +export BORG_ISLANDS=5 + +nfe=2000 +myswf=0 +seed=100 +scenario_index=2 + +mpirun -np "$SLURM_NTASKS" python hpc_run.py "$nfe" "$myswf" "$seed" "$scenario_index" \ No newline at end of file diff --git a/analysis/hpc_slurm_scripts/mm_justice.sh b/analysis/hpc_slurm_scripts/mm_justice.sh new file mode 100644 index 0000000..462a157 --- /dev/null +++ b/analysis/hpc_slurm_scripts/mm_justice.sh @@ -0,0 +1,37 @@ +#!/bin/bash +#SBATCH --job-name="200kMM" +#SBATCH --partition=memory +#SBATCH --time=30:00:00 +#SBATCH --ntasks=45 +#SBATCH --cpus-per-task=1 +#SBATCH --mem-per-cpu=16G +#SBATCH --account=research-tpm-mas +#SBATCH --output=logs/%x-%j.out +#SBATCH --error=logs/%x-%j.err # <- add an explicit error log + +module load 2025 +module load openmpi + + +source /scratch/$USER/.conda/etc/profile.d/conda.sh +conda activate justice311 + +# Prevent threaded BLAS from oversubscribing +export OMP_NUM_THREADS=1 +export MKL_NUM_THREADS=1 +export OPENBLAS_NUM_THREADS=1 +export NUMEXPR_NUM_THREADS=1 + +cd "$SLURM_SUBMIT_DIR" +mkdir -p logs # <- ensure logs dir exists + +# MS: 1 master + 1 worker (BORG_ISLANDS env not used by MSBorgMOEA, but harmless) N islands each with K workers, request N*(K+1) + 1 MPI nodes when submitting the job +export BORG_ISLANDS=4 + +# Per-run args +nfe=200000 +myswf=0 +seed=555 +scenario_index=2 + +mpirun -np "$SLURM_NTASKS" python hpc_run.py "$nfe" "$myswf" "$seed" "$scenario_index" \ No newline at end of file diff --git a/analysis/hpc_slurm_scripts/run_single_agent_array.sh b/analysis/hpc_slurm_scripts/run_single_agent_array.sh new file mode 100644 index 0000000..a8b180e --- /dev/null +++ b/analysis/hpc_slurm_scripts/run_single_agent_array.sh @@ -0,0 +1,51 @@ +#!/bin/bash +#SBATCH --job-name="SingleAgent_MOMA" +#SBATCH --partition=memory +#SBATCH --time=00:10:00 +#SBATCH --ntasks=45 +#SBATCH --cpus-per-task=1 +#SBATCH --mem-per-cpu=16G +#SBATCH --account=research-tpm-mas +#SBATCH --output=logs/%x-%j.out +#SBATCH --error=logs/%x-%j.err +#SBATCH --array=0-4 # one task per macro agent (0..4) + +module load 2025 +module load openmpi + +source /scratch/$USER/.conda/etc/profile.d/conda.sh +conda activate justice311 + +export OMP_NUM_THREADS=1 +export MKL_NUM_THREADS=1 +export OPENBLAS_NUM_THREADS=1 +export NUMEXPR_NUM_THREADS=1 + +cd "$SLURM_SUBMIT_DIR" +mkdir -p logs + +export BORG_ISLANDS=4 + +# Base run parameters +nfe=200 +myswf=0 +seed=4444 +scenario_index=2 +policy_index=0 # <-- row index in pareto_nash_profiles.csv (was MOMA_reference_set.csv) +pop_size=100 + +# Each array task gets its macro index from SLURM_ARRAY_TASK_ID +macro_index=${SLURM_ARRAY_TASK_ID} + +echo "Starting single-agent Nash verification run:" +echo " nfe = $nfe" +echo " seed = $seed" +echo " scenario_index = $scenario_index" +echo " policy_index = $policy_index (row in pareto_nash_profiles.csv)" +echo " variable_macro_idx= $macro_index" +echo " population_size = $pop_size" +echo " MPI tasks = $SLURM_NTASKS" + +mpirun -np "$SLURM_NTASKS" python hpc_run.py \ + "$nfe" "$myswf" "$seed" "$scenario_index" \ + "$policy_index" "$macro_index" "$pop_size" diff --git a/analysis/momadps_config.json b/analysis/momadps_config.json new file mode 100644 index 0000000..d243fd6 --- /dev/null +++ b/analysis/momadps_config.json @@ -0,0 +1,78 @@ +{ + "start_year": 2015, + "end_year": 2300, + "data_timestep": 5, + "timestep": 1, + "emission_control_start_year": 2025, + "n_inputs": 3, + "epsilons": [ + 10, + 10, + 10, + 10, + 10, + 0.01 + ], + + "min_temperature": 0.5, + "max_temperature": 5.0, + "min_temperature_change": -0.5, + "max_temperature_change": 2.0, + "consumption_min": 20.0, + "consumption_max": 3500.0, + + "climate_ensemble_members" : [ + 694, + 398, + 923, + 530, + 301, + 713, + 158, + 464, + 603, + 554, + 539, + 847, + 943, + 801, + 131, + 592, + 295, + 757, + 487, + 253, + 463, + 766, + 95, + 959, + 451, + 164, + 966, + 624, + 491, + 161, + 704, + 528, + 760, + 420, + 697, + 175, + 48, + 479, + 727, + 344, + 961, + 264, + 156, + 819, + 824, + 1001, + 293, + 733, + 542, + 136 + ], + "stochastic_run": 0, + "temperature_year_of_interest": 2100 +} \ No newline at end of file diff --git a/analysis/normative_uncertainty_optimization.json b/analysis/normative_uncertainty_optimization.json index b1f58dd..c90a45a 100644 --- a/analysis/normative_uncertainty_optimization.json +++ b/analysis/normative_uncertainty_optimization.json @@ -6,11 +6,11 @@ "emission_control_start_year": 2025, "n_rbfs": 4, "n_inputs": 2, - "reference_ssp_rcp_scenario_index": 2, "epsilons": [ - 0.0001, - 0.01 + 0.00001, + 0.001 ], + "reference_ssp_rcp_scenario_index": 2, "climate_ensemble_members" : [ 694, 398, diff --git a/data/input/region_to_macro_5.npy b/data/input/region_to_macro_5.npy new file mode 100644 index 0000000..ce3b31c Binary files /dev/null and b/data/input/region_to_macro_5.npy differ diff --git a/docs/diagrams/JUSTICE.svg b/docs/diagrams/JUSTICE.svg new file mode 100644 index 0000000..89968f4 --- /dev/null +++ b/docs/diagrams/JUSTICE.svg @@ -0,0 +1,167 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Damage + Economy + Abatement + Social Welfare Function + Climate + Kalkuhl + RICE50+ + EnerData + FaIR + Utilitarian + Prioritarian + Sufficientarian + Egalitarian + + + \ No newline at end of file diff --git a/docs/rl_docs.md b/docs/rl_docs.md new file mode 100644 index 0000000..f2c38ee --- /dev/null +++ b/docs/rl_docs.md @@ -0,0 +1,33 @@ +### Installation + +Create and activate a virtual environment and install as a package using + +``` +pip install . +``` + +### Running JUSTICE MOMARL + +#### Training + +JUSTICE-MOMARL can train multi-agent and multi-objective policies and currently support optimising for two objectives. JUSTICE-MOMARL converts the multi-objective training into a single objective by generating various policies with different weight combinations that weight each objective. The entire training process generates **100 different weight combinations** and trains each policy by linearising and normalising the reward and using **Multi Agent Proximal Policy Optimization (MAPPO)** as the reinforcement learning algorithm. + +Instead of training all the 100 weights together, we divide the training into batches and train a subset of weight combinations in each batch. For example, in order to train the first 10 uniform weight combnations, balancing the global economic output and inverse global temperature reward functions, run the following: + +```bash +python train.py --start_uniform_weight 0 --end_uniform_weight 10 --env-config.rewards "global_economic_output" "inverse_global_temperature" --seed= --base_save_path="Path where results are saved" +``` + +You can view the additional argument to modify the JUSTICE modules and the RL hyperparameters by looking at the `Args` and `EnvConfig` dataclasses in `rl/args.py`. + +This script will save the checkpoints, pickled configs and multi-objective vectorised returns for trained policies for each weight combination in the base_save_path provided. + +#### Evaluation + +Once models have been trained for different weight combinations and the checkpoints for each of them are saved, you can run the evaluation for one specific weight combination and for one evaluation seed by running: + +```bash +python eval.py --checkpoint_path="Absolute path to the checkpoint for policy" --seed=0 --output_path="Directory where evaluation results are saved"" +``` + +The evaluation script will run the MOMARL policy in the JUSTICE simulation and save the evolution of various economic and climate metrics over time where the Emission Control Rate and Savings Rates are set by the trained policy in each time step. diff --git a/justice/model.py b/justice/model.py index 61dac1e..8ee8463 100644 --- a/justice/model.py +++ b/justice/model.py @@ -98,8 +98,8 @@ def __init__( damage_function_type=DamageFunction.KALKUHL, abatement_type=Abatement.ENERDATA, social_welfare_function=WelfareFunction.UTILITARIAN, - clustering = False, - cluster_level = None, + clustering=False, + cluster_level=None, **kwargs, ): # If already initialized, do not repeat heavy initialization. @@ -128,45 +128,46 @@ def __init__( # Load the datasets by instantiating the DataLoader class self.data_loader = DataLoader() self.region_list = self.data_loader.REGION_LIST - + if self.clustering: if self.cluster_level == 12: with open("data/input/rice_12_regions_dict.json") as f: rice_json = json.load(f) elif self.cluster_level == 5: - with open("data/input/5_regions.json") as f: + with open("data/input/R5_regions.json") as f: rice_json = json.load(f) else: raise ValueError("Cluster level not supported") - + with open("data/input/rice50_regions_dict.json") as f: rice_50_json = json.load(f) self.clusters = list(rice_json.keys()) - + region_list = self.region_list.tolist() region_to_index = {region: idx for idx, region in enumerate(region_list)} - cluster_to_index = {cluster: idx for idx, cluster in enumerate(self.clusters)} + cluster_to_index = { + cluster: idx for idx, cluster in enumerate(self.clusters) + } - #create a mapping from region to cluster + # create a mapping from region to cluster self.country_to_cluster = {} for region, country_codes in rice_50_json.items(): - region_index = region_to_index.get(region) + region_index = region_to_index.get(region) for code in country_codes: for cluster, cluster_codes in rice_json.items(): if code in cluster_codes: - cluster_index = cluster_to_index[cluster] + cluster_index = cluster_to_index[cluster] self.country_to_cluster[region_index] = cluster_index break # Break the loop as soon as we find a match for efficiency - #create an inverse mapping from cluster to region + # create an inverse mapping from cluster to region self.cluster_to_country = {} for region, cluster in self.country_to_cluster.items(): if cluster not in self.cluster_to_country: self.cluster_to_country[cluster] = [] self.cluster_to_country[cluster].append(region) - # Instantiate the TimeHorizon class # TODO: Need to do the data slicing here for different start and end years self.time_horizon = TimeHorizon( @@ -471,7 +472,10 @@ def stepwise_run( elif not self.clustering: self.savings_rate[:, timestep] = savings_rate else: - for key, value in self.country_to_cluster.items(): #[('region', 'cluster')] + for ( + key, + value, + ) in self.country_to_cluster.items(): # [('region', 'cluster')] self.savings_rate[key, timestep] = savings_rate[value] savings_rate = self.savings_rate[:, timestep] @@ -480,15 +484,20 @@ def stepwise_run( emission_control_rate = np.tile( emission_control_rate[:, np.newaxis], (1, self.no_of_ensembles) ) - + if not self.clustering: self.emission_control_rate[:, timestep, :] = emission_control_rate else: - for key, value in self.country_to_cluster.items(): #[('region', 'cluster')] - self.emission_control_rate[key, timestep, :] = emission_control_rate[value] + for ( + key, + value, + ) in self.country_to_cluster.items(): # [('region', 'cluster')] + self.emission_control_rate[key, timestep, :] = emission_control_rate[ + value + ] emission_control_rate = self.emission_control_rate[:, timestep, :] - + self.emission_control_rate[:, timestep, :] = emission_control_rate gross_output = self.economy.run( diff --git a/justice/util/EMA_model_wrapper.py b/justice/util/EMA_model_wrapper.py index 0679355..40e851b 100644 --- a/justice/util/EMA_model_wrapper.py +++ b/justice/util/EMA_model_wrapper.py @@ -14,8 +14,10 @@ fraction_of_ensemble_above_threshold, ) +from justice.util.regional_configuration import aggregate_by_macro_region from justice.util.emission_control_constraint import EmissionControlConstraint + # Scaling Values max_temperature = 16.0 min_temperature = 0.0 @@ -52,7 +54,7 @@ def model_wrapper_emodps(**kwargs): rbf = RBF( n_rbfs=(n_inputs_rbf + 2), n_inputs=n_inputs_rbf, n_outputs=n_outputs_rbf - ) # n_inputs_rbf is a rule of thumb. Hasn't been verified yet for complex models + ) # n_inputs_rbf +2 is a rule of thumb. centers_shape, radii_shape, weights_shape = rbf.get_shape() @@ -156,11 +158,6 @@ def model_wrapper_emodps(**kwargs): # Calculate the mean of ["welfare"] over the 1000 ensembles welfare = np.abs(datasets["welfare"]) - # Get the years above temperature threshold - # years_above_threshold = years_above_temperature_threshold( - # datasets["global_temperature"], 2.0 - # ) - # Calculate the fraction of ensemble above the temperature threshold temperature, temperature_year_index, threshold fraction_above_threshold = fraction_of_ensemble_above_threshold( temperature=datasets["global_temperature"], @@ -168,27 +165,467 @@ def model_wrapper_emodps(**kwargs): threshold=2.0, ) - # TODO: Temporarily commented out for bi-objective optimization + return ( + welfare, + fraction_above_threshold, + ) - # Transform the damage cost per capita to welfare loss value - # _, _, _, welfare_loss_damage = model.welfare_function.calculate_welfare( - # datasets["damage_cost_per_capita"], welfare_loss=True - # ) - # welfare_loss_damage = np.abs(welfare_loss_damage) - # # Transform the abatement cost to welfare loss value - # _, _, _, welfare_loss_abatement = model.welfare_function.calculate_welfare( - # datasets["abatement_cost_per_capita"], welfare_loss=True - # ) - # welfare_loss_abatement = np.abs(welfare_loss_abatement) +################################################################################################################################ +# --- Normalization helper --------------------------------------------------------- +def _compute_inverse_range(min_value: float, max_value: float) -> float: + span = max_value - min_value + if span <= 0: + raise ValueError( + f"Invalid normalization bounds: min={min_value}, max={max_value}" + ) + return 1.0 / span + + +def _extract_vector(kwargs_dict, prefix, size, macro_idx): + """Pull a flat vector of length `size` from kwargs named `{prefix} {macro_idx} {i}`.""" + vector = np.empty(size, dtype=float) + for i in range(size): + vector[i] = kwargs_dict.pop(f"{prefix} {macro_idx} {i}") + return vector + + +# --- MOMA Wrapper ---------------------------------------------------------------------- +def model_wrapper_momadps(**kwargs): + scenario = kwargs.pop("ssp_rcp_scenario") + social_welfare_function_type = kwargs.pop("social_welfare_function_type") + + economy_type = Economy.from_index(kwargs.pop("economy_type")) + damage_function_type = DamageFunction.from_index(kwargs.pop("damage_function_type")) + abatement_type = Abatement.from_index(kwargs.pop("abatement_type")) + stochastic_run = kwargs.pop("stochastic_run") + + n_regions = kwargs.pop("n_regions") + n_timesteps = kwargs.pop("n_timesteps") + emission_control_start_timestep = kwargs.pop("emission_control_start_timestep") + + n_inputs_rbf = kwargs.pop("n_inputs_rbf") # should be 3 + n_outputs_rbf = kwargs.pop("n_outputs_rbf") + temperature_year_of_interest_index = kwargs.pop( + "temperature_year_of_interest_index" + ) + climate_ensemble_members = kwargs.pop("climate_ensemble_members") + + # Normalization parameters (all provided via config) + min_temperature = kwargs.pop("min_temperature") + max_temperature = kwargs.pop("max_temperature") + min_temperature_change = kwargs.pop("min_temperature_change") + max_temperature_change = kwargs.pop("max_temperature_change") + consumption_min = kwargs.pop("consumption_min") + consumption_max = kwargs.pop("consumption_max") + + inv_temperature_range = _compute_inverse_range(min_temperature, max_temperature) + inv_temperature_change_range = _compute_inverse_range( + min_temperature_change, max_temperature_change + ) + inv_consumption_range = _compute_inverse_range(consumption_min, consumption_max) + + # Macro-region setup + region_to_macro = np.asarray(kwargs.pop("region_to_macro"), dtype=np.intp) + n_macro_regions = kwargs.pop("n_macro_regions") + + macro_region_counts = np.bincount( + region_to_macro, minlength=n_macro_regions + ).astype(float) + macro_region_counts = macro_region_counts[:, None] # For broadcasting + + # RBF instantiation: one per macro region, each with its own parameter block + rbf_template = RBF( + n_rbfs=(n_inputs_rbf + 2), n_inputs=n_inputs_rbf, n_outputs=n_outputs_rbf + ) + centers_shape, radii_shape, weights_shape = rbf_template.get_shape() + centers_len, radii_len, weights_len = ( + centers_shape[0], + radii_shape[0], + weights_shape[0], + ) + + macro_rbfs = [] + for macro_idx in range(n_macro_regions): + centers = _extract_vector(kwargs, "center", centers_len, macro_idx) + radii = _extract_vector(kwargs, "radii", radii_len, macro_idx) + weights = _extract_vector(kwargs, "weights", weights_len, macro_idx) + + rbf = RBF( + n_rbfs=(n_inputs_rbf + 2), n_inputs=n_inputs_rbf, n_outputs=n_outputs_rbf + ) + decision_vars = np.concatenate((centers, radii, weights)) + rbf.set_decision_vars(decision_vars) + macro_rbfs.append(rbf) + + emission_constraint = EmissionControlConstraint( + max_annual_growth_rate=0.04, + emission_control_start_timestep=emission_control_start_timestep, + min_emission_control_rate=0.01, + ) + + # --- Singleton JUSTICE handling ------------------------------------------------- + if not hasattr(model_wrapper_momadps, "justice_instance"): + model_wrapper_momadps.justice_instance = JUSTICE( + scenario=scenario, + economy_type=economy_type, + damage_function_type=damage_function_type, + abatement_type=abatement_type, + social_welfare_function_type=social_welfare_function_type, + stochastic_run=stochastic_run, + climate_ensembles=climate_ensemble_members, + ) + else: + model_wrapper_momadps.justice_instance.reset_model() + + model = model_wrapper_momadps.justice_instance + no_of_ensembles = model.__getattribute__("no_of_ensembles") + + # --- Policy buffers ------------------------------------------------------------- + regional_emission_control_rate = np.zeros( + (n_regions, n_timesteps, no_of_ensembles), dtype=float + ) + constrained_emission_control_rate = np.zeros_like(regional_emission_control_rate) + macro_emission_control_rate = np.zeros( + (n_macro_regions, n_timesteps, no_of_ensembles), dtype=float + ) + + # Feedback state + previous_temperature = np.zeros(no_of_ensembles, dtype=float) + previous_temperature_change = np.zeros(no_of_ensembles, dtype=float) + + # Temporary buffer reused for RBF inputs + rbf_input_buffer = np.empty((n_inputs_rbf, no_of_ensembles), dtype=float) + + # Storage for macro-level consumption history + macro_consumption_per_capita_history = np.zeros( + (n_macro_regions, n_timesteps, no_of_ensembles), dtype=float + ) + + population = model.economy.get_population() # Getting population from the model + population = aggregate_by_macro_region( + population, region_to_macro + ) # Aggregating to macro regions + # --- Simulation loop ------------------------------------------------------------ + for timestep in range(n_timesteps): + constrained_emission_control_rate[:, timestep, :] = ( + emission_constraint.constrain_emission_control_rate( + regional_emission_control_rate[:, timestep, :], + timestep, + allow_fallback=False, + ) + ) + + model.stepwise_run( + emission_control_rate=constrained_emission_control_rate[:, timestep, :], + timestep=timestep, + endogenous_savings_rate=True, + ) + datasets = model.stepwise_evaluate(timestep=timestep) + + global_temperature = datasets["global_temperature"][timestep, :] + + consumption = datasets["consumption"][:, timestep, :] + consumption = consumption * 1e3 + + # Temperature and rate of change (shared inputs) + if timestep == 0: + temperature_change = np.zeros_like(global_temperature) + previous_temperature = global_temperature.copy() + previous_temperature_change = temperature_change.copy() + elif timestep % 5 == 0: + temperature_change = global_temperature - previous_temperature + previous_temperature = global_temperature.copy() + previous_temperature_change = temperature_change.copy() + else: + temperature_change = previous_temperature_change + + rbf_input_buffer[0, :] = np.clip( + (global_temperature - min_temperature) * inv_temperature_range, 0.0, 1.0 + ) + rbf_input_buffer[1, :] = np.clip( + (temperature_change - min_temperature_change) + * inv_temperature_change_range, + 0.0, + 1.0, + ) + + # Aggregate consumption to macro level, normalize, and store full history + aggregated_consumption = aggregate_by_macro_region( # Use consumption here + consumption, region_to_macro + ) + + aggregated_consumption_per_capita = ( + aggregated_consumption / population[:, timestep, :] + ) + + macro_consumption_per_capita_history[:, timestep, :] = ( + aggregated_consumption_per_capita + ) + + normalized_aggregated_consumption_per_capita = ( + np.clip( # TODO Check this normalization + (aggregated_consumption_per_capita - consumption_min) + * inv_consumption_range, + 0.0, + 1.0, + ) + ) + + # RBFs observe current step signals and set emissions for next step + if timestep < n_timesteps - 1: + for macro_idx, rbf in enumerate(macro_rbfs): + rbf_input_buffer[2, :] = normalized_aggregated_consumption_per_capita[ + macro_idx, : + ] + macro_output = rbf.apply_rbfs(rbf_input_buffer) + macro_emission_control_rate[macro_idx, timestep + 1, :] = macro_output + + regional_emission_control_rate[:, timestep + 1, :] = ( + macro_emission_control_rate[region_to_macro, timestep + 1, :] + ) + + datasets = model.evaluate() + + spatially_disaggregated_welfare = ( + model.welfare_function.calculate_spatially_disaggregated_welfare( + macro_consumption_per_capita_history + ) + ) + + fraction_above_threshold = fraction_of_ensemble_above_threshold( + temperature=datasets["global_temperature"], + temperature_year_index=temperature_year_of_interest_index, + threshold=2.0, + ) return ( - welfare, - fraction_above_threshold, - # years_above_threshold, - # welfare_loss_damage, - # welfare_loss_abatement, - ) # , + float(spatially_disaggregated_welfare[0]), + float(spatially_disaggregated_welfare[1]), + float(spatially_disaggregated_welfare[2]), + float(spatially_disaggregated_welfare[3]), + float(spatially_disaggregated_welfare[4]), + float(fraction_above_threshold), + ) + + +# ---------------------------MOMA Single Agent----------------------------------------------------------------# + + +def model_wrapper_momadps_single_agent(**kwargs): + """ + Variant of the MOMADPS wrapper for single-agent re-optimization. + Only the RBF of `variable_macro_index` is free to change; all others are fixed + to a prior (Pareto-Nash) solution supplied via fixed_centers/radii/weights. + """ + scenario = kwargs.pop("ssp_rcp_scenario") + social_welfare_function_type = kwargs.pop("social_welfare_function_type") + + economy_type = Economy.from_index(kwargs.pop("economy_type")) + damage_function_type = DamageFunction.from_index(kwargs.pop("damage_function_type")) + abatement_type = Abatement.from_index(kwargs.pop("abatement_type")) + stochastic_run = kwargs.pop("stochastic_run") + + n_regions = kwargs.pop("n_regions") + n_timesteps = kwargs.pop("n_timesteps") + emission_control_start_timestep = kwargs.pop("emission_control_start_timestep") + + n_inputs_rbf = kwargs.pop("n_inputs_rbf") + n_outputs_rbf = kwargs.pop("n_outputs_rbf") + temperature_year_of_interest_index = kwargs.pop( + "temperature_year_of_interest_index" + ) + climate_ensemble_members = kwargs.pop("climate_ensemble_members") + + # Normalization parameters + min_temperature = kwargs.pop("min_temperature") + max_temperature = kwargs.pop("max_temperature") + min_temperature_change = kwargs.pop("min_temperature_change") + max_temperature_change = kwargs.pop("max_temperature_change") + consumption_min = kwargs.pop("consumption_min") + consumption_max = kwargs.pop("consumption_max") + + inv_temperature_range = _compute_inverse_range(min_temperature, max_temperature) + inv_temperature_change_range = _compute_inverse_range( + min_temperature_change, max_temperature_change + ) + inv_consumption_range = _compute_inverse_range(consumption_min, consumption_max) + + # Macro-region setup + region_to_macro = np.asarray(kwargs.pop("region_to_macro"), dtype=np.intp) + n_macro_regions = kwargs.pop("n_macro_regions") + + # Which macro region is being (re)optimized + variable_macro_index = kwargs.pop("variable_macro_index") + + # Fixed RBF parameters from the Pareto-Nash solution (constants) + fixed_centers = np.asarray(kwargs.pop("fixed_centers"), dtype=float) + fixed_radii = np.asarray(kwargs.pop("fixed_radii"), dtype=float) + fixed_weights = np.asarray(kwargs.pop("fixed_weights"), dtype=float) + + macro_region_counts = np.bincount( + region_to_macro, minlength=n_macro_regions + ).astype(float) + macro_region_counts = macro_region_counts[:, None] + + # RBF parameter shapes + rbf_template = RBF( + n_rbfs=(n_inputs_rbf + 2), n_inputs=n_inputs_rbf, n_outputs=n_outputs_rbf + ) + centers_shape, radii_shape, weights_shape = rbf_template.get_shape() + centers_len, radii_len, weights_len = ( + centers_shape[0], + radii_shape[0], + weights_shape[0], + ) + + # Build the RBF set: only one macro uses lever values; others use fixed + macro_rbfs = [] + for macro_idx in range(n_macro_regions): + if macro_idx == variable_macro_index: + centers = _extract_vector(kwargs, "center", centers_len, macro_idx) + radii = _extract_vector(kwargs, "radii", radii_len, macro_idx) + weights = _extract_vector(kwargs, "weights", weights_len, macro_idx) + else: + centers = fixed_centers[macro_idx] + radii = fixed_radii[macro_idx] + weights = fixed_weights[macro_idx] + + rbf = RBF( + n_rbfs=(n_inputs_rbf + 2), n_inputs=n_inputs_rbf, n_outputs=n_outputs_rbf + ) + decision_vars = np.concatenate((centers, radii, weights)) + rbf.set_decision_vars(decision_vars) + macro_rbfs.append(rbf) + + emission_constraint = EmissionControlConstraint( + max_annual_growth_rate=0.04, + emission_control_start_timestep=emission_control_start_timestep, + min_emission_control_rate=0.01, + ) + + # JUSTICE singleton handling + if not hasattr(model_wrapper_momadps_single_agent, "justice_instance"): + model_wrapper_momadps_single_agent.justice_instance = JUSTICE( + scenario=scenario, + economy_type=economy_type, + damage_function_type=damage_function_type, + abatement_type=abatement_type, + social_welfare_function_type=social_welfare_function_type, + stochastic_run=stochastic_run, + climate_ensembles=climate_ensemble_members, + ) + else: + model_wrapper_momadps_single_agent.justice_instance.reset_model() + + model = model_wrapper_momadps_single_agent.justice_instance + no_of_ensembles = model.no_of_ensembles + + # Buffers + regional_emission_control_rate = np.zeros( + (n_regions, n_timesteps, no_of_ensembles), dtype=float + ) + constrained_emission_control_rate = np.zeros_like(regional_emission_control_rate) + macro_emission_control_rate = np.zeros( + (n_macro_regions, n_timesteps, no_of_ensembles), dtype=float + ) + + previous_temperature = np.zeros(no_of_ensembles, dtype=float) + previous_temperature_change = np.zeros(no_of_ensembles, dtype=float) + + rbf_input_buffer = np.empty((n_inputs_rbf, no_of_ensembles), dtype=float) + macro_consumption_per_capita_history = np.zeros( + (n_macro_regions, n_timesteps, no_of_ensembles), dtype=float + ) + + population = model.economy.get_population() + population = aggregate_by_macro_region(population, region_to_macro) + + # Simulation loop + for timestep in range(n_timesteps): + constrained_emission_control_rate[:, timestep, :] = ( + emission_constraint.constrain_emission_control_rate( + regional_emission_control_rate[:, timestep, :], + timestep, + allow_fallback=False, + ) + ) + + model.stepwise_run( + emission_control_rate=constrained_emission_control_rate[:, timestep, :], + timestep=timestep, + endogenous_savings_rate=True, + ) + datasets = model.stepwise_evaluate(timestep=timestep) + + global_temperature = datasets["global_temperature"][timestep, :] + consumption = datasets["consumption"][:, timestep, :] * 1e3 + + if timestep == 0: + temperature_change = np.zeros_like(global_temperature) + previous_temperature = global_temperature.copy() + previous_temperature_change = temperature_change.copy() + elif timestep % 5 == 0: + temperature_change = global_temperature - previous_temperature + previous_temperature = global_temperature.copy() + previous_temperature_change = temperature_change.copy() + else: + temperature_change = previous_temperature_change + + rbf_input_buffer[0, :] = np.clip( + (global_temperature - min_temperature) * inv_temperature_range, 0.0, 1.0 + ) + rbf_input_buffer[1, :] = np.clip( + (temperature_change - min_temperature_change) + * inv_temperature_change_range, + 0.0, + 1.0, + ) + + aggregated_consumption = aggregate_by_macro_region(consumption, region_to_macro) + aggregated_consumption_per_capita = ( + aggregated_consumption / population[:, timestep, :] + ) + macro_consumption_per_capita_history[:, timestep, :] = ( + aggregated_consumption_per_capita + ) + normalized_consumption = np.clip( + (aggregated_consumption_per_capita - consumption_min) + * inv_consumption_range, + 0.0, + 1.0, + ) + + if timestep < n_timesteps - 1: + for macro_idx, rbf in enumerate(macro_rbfs): + rbf_input_buffer[2, :] = normalized_consumption[macro_idx, :] + macro_output = rbf.apply_rbfs(rbf_input_buffer) + macro_emission_control_rate[macro_idx, timestep + 1, :] = macro_output + + regional_emission_control_rate[:, timestep + 1, :] = ( + macro_emission_control_rate[region_to_macro, timestep + 1, :] + ) + + datasets = model.evaluate() + + spatial_welfare = model.welfare_function.calculate_spatially_disaggregated_welfare( + macro_consumption_per_capita_history + ) + agent_welfare = float(spatial_welfare[variable_macro_index]) + + fraction_above_threshold = fraction_of_ensemble_above_threshold( + temperature=datasets["global_temperature"], + temperature_year_index=temperature_year_of_interest_index, + threshold=2.0, + ) + + return ( + agent_welfare, + float(fraction_above_threshold), + ) + + +################################################################################################################################## def model_wrapper(**kwargs): diff --git a/justice/util/borg_archive_processor.py b/justice/util/borg_archive_processor.py new file mode 100644 index 0000000..557d7e6 --- /dev/null +++ b/justice/util/borg_archive_processor.py @@ -0,0 +1,177 @@ +#!/usr/bin/env python3 +""" +Convert per-island CSV snapshots (mm_intermediate/mm_*) into tar.gz archives that +mimic the original EMA structure: a tmp/ folder containing selected CSV files. + +Usage: + python borg_archive_processor.py \ + --archive /path_to_data/mm_intermediate.zip \ + --base-name UTILITARIAN_50000_17 \ + --step 1000 \ + --output-dir /path/to/save/tars + + +If --archive points to a directory (e.g., mm_intermediate/) instead of a zip file, +the script works the same way. +""" + + +import argparse +import os +import shutil +import tarfile +import tempfile +import zipfile +from pathlib import Path + + +def parse_args(): + parser = argparse.ArgumentParser( + description="Package mm_* snapshots into tmp/ tarballs." + ) + parser.add_argument( + "--archive", + required=True, + help="Path to mm_intermediate.zip or an extracted mm_intermediate directory.", + ) + parser.add_argument( + "--base-name", + required=True, + help="Base name for outputs (e.g., UTILITARIAN_50000_17). " + "Each island tar will be {base-name}_{island}.tar.gz", + ) + parser.add_argument( + "--step", + type=int, + default=0, + help="Only keep CSV files whose numeric name is a multiple of this step. " + "Use 0 (default) to keep every CSV in the island folder.", + ) + parser.add_argument( + "--output-dir", + default=None, + help="Directory for the output tar.gz files. Default: same as the archive location.", + ) + return parser.parse_args() + + +def extract_if_needed(archive_path: Path) -> Path: + """If archive_path is a zip file, extract it to a temp dir and return the mm_intermediate folder. + Otherwise, assume it already points to the mm_intermediate directory.""" + if archive_path.is_file() and archive_path.suffix == ".zip": + temp_dir = Path(tempfile.mkdtemp(prefix="mm_intermediate_")) + with zipfile.ZipFile(archive_path, "r") as zf: + zf.extractall(temp_dir) + subdirs = [p for p in temp_dir.glob("*") if p.is_dir()] + if len(subdirs) == 1: + extracted_root = subdirs[0] + else: + extracted_root = temp_dir / "mm_intermediate" + return extracted_root + else: + return archive_path + + +def integer_basename(path: Path): + try: + return int(path.stem) + except ValueError: + return None + + +def select_csvs(csv_files, step): + """Always include the first CSV, then apply the step filter (if step > 0).""" + if not csv_files: + return [] + + selected = [] + first_csv = csv_files[0] + selected.append(first_csv) + + if step <= 0: + selected.extend(csv_files[1:]) + return selected + + for csv_file in csv_files[1:]: + nfe = integer_basename(csv_file) + if nfe is None: + continue + if nfe % step == 0: + selected.append(csv_file) + + # Ensure no duplicates and preserve ordering + seen = set() + unique_selected = [] + for csv_file in selected: + if csv_file not in seen: + unique_selected.append(csv_file) + seen.add(csv_file) + + return unique_selected + + +def package_mm_island(island_dir, output_dir, base_name, island_idx, step): + csv_files = sorted( + [f for f in island_dir.glob("*.csv") if integer_basename(f) is not None], + key=lambda f: integer_basename(f), + ) + if not csv_files: + print(f"[WARN] No numeric CSV files found in {island_dir}") + return None + + chosen = select_csvs(csv_files, step) + if not chosen: + print(f"[WARN] Step filter removed all CSVs in {island_dir}; nothing to pack.") + return None + + output_dir.mkdir(parents=True, exist_ok=True) + archive_name = f"{base_name}_{island_idx}.tar.gz" + tar_path = output_dir / archive_name + + with tempfile.TemporaryDirectory(prefix=f"tmp_mm_{island_idx}_") as tmp_root: + tmp_dir = Path(tmp_root) / "tmp" + tmp_dir.mkdir() + for csv_file in chosen: + shutil.copy2(csv_file, tmp_dir / csv_file.name) + with tarfile.open(tar_path, "w:gz") as tar: + tar.add(tmp_dir, arcname="tmp") + + print(f"[OK] {tar_path}") + return tar_path + + +def main(): + args = parse_args() + archive_path = Path(args.archive) + root = extract_if_needed(archive_path) + + if not root.exists(): + raise FileNotFoundError( + f"Folder {root} not found (archive may have no mm_intermediate folder)." + ) + + island_dirs = sorted( + [p for p in root.iterdir() if p.is_dir() and p.name.startswith("mm_")] + ) + if not island_dirs: + raise RuntimeError(f"No island subdirectories (mm_*) found under {root}") + + output_dir = Path(args.output_dir) if args.output_dir else archive_path.parent + + print(f"Processing {len(island_dirs)} island folders under {root}") + print(f"Step filter: {'all CSVs' if args.step <= 0 else f'every {args.step}'}") + + for island_dir in island_dirs: + suffix = island_dir.name.split("mm_")[-1] + package_mm_island( + island_dir=island_dir, + output_dir=output_dir, + base_name=args.base_name, + island_idx=suffix, + step=max(args.step, 0), + ) + print("Done.") + + +if __name__ == "__main__": + main() diff --git a/justice/util/enumerations.py b/justice/util/enumerations.py index caee4fe..e508ef8 100644 --- a/justice/util/enumerations.py +++ b/justice/util/enumerations.py @@ -36,7 +36,6 @@ class SSP(IntEnum): SSP5 = 4 -# TODO: Add the pretty strings in the tuple like (0, SSP.SSP1, "ssp119", "SSP1-RCP1.9") class Scenario(Enum): SSP119 = (0, SSP.SSP1, "ssp119", "SSP1-RCP1.9") SSP126 = (1, SSP.SSP1, "ssp126", "SSP1-RCP2.6") @@ -149,8 +148,9 @@ class Optimizer(Enum): """ EpsNSGAII = 0 - BorgMOEA = 1 + MMBorgMOEA = 1 MOMARL = 2 + MSBorgMOEA = 3 @staticmethod def from_index(index): @@ -197,4 +197,4 @@ def from_index(index): for enum in Rewards: if enum.value[0] == index: return enum - return None \ No newline at end of file + return None diff --git a/justice/util/feature_importance.py b/justice/util/feature_importance.py new file mode 100644 index 0000000..44c21ba --- /dev/null +++ b/justice/util/feature_importance.py @@ -0,0 +1,692 @@ +import json +from pathlib import Path +import numpy as np +import pandas as pd +import matplotlib.pyplot as plt + +from catboost import CatBoostRegressor, Pool +from sklearn.model_selection import KFold + +from justice.util.model_time import TimeHorizon +from justice.util.data_loader import DataLoader +from justice.util.visualizer import justice_region_aggregator + + +# ------------------------------- +# Aggregation helper (returning years, inclusive slicing) +# ------------------------------- +def aggregate_abated_emissions( + input_data_arrays, + region_mapping_path, + rice_region_dict_path, # kept for API compatibility + start_year, + end_year, + splice_start_year, + splice_end_year, + data_timestep=5, + timestep=1, +): + """ + Aggregate abated emissions to 12 regions and slice to [splice_start_year, splice_end_year] inclusively. + Returns: (aggregated_array, region_list, years_vector) + - aggregated_array shape: (12, T, S) regions x years x samples + - years_vector: numpy array of years of length T + """ + time_horizon = TimeHorizon( + start_year=start_year, + end_year=end_year, + data_timestep=data_timestep, + timestep=timestep, + ) + data_loader = DataLoader() + + with open(region_mapping_path, "r") as f: + region_mapping_json = json.load(f) + + # Often used internally by your stack; load to ensure availability + with open(rice_region_dict_path, "r") as f: + _ = json.load(f) + + last_agg = None + region_list = None + + for economic_data in input_data_arrays: + # Aggregate to 12 regions + region_list, economic_data_aggregated = justice_region_aggregator( + data_loader, region_mapping_json, economic_data + ) + + # Inclusive end-year slice (ensure 2100 is included if requested) + start_idx = time_horizon.year_to_timestep(splice_start_year, timestep=timestep) + end_idx = ( + time_horizon.year_to_timestep(splice_end_year, timestep=timestep) + 1 + ) # inclusive + + economic_data_aggregated = np.asarray(economic_data_aggregated)[ + :, start_idx:end_idx, : + ] + last_agg = economic_data_aggregated + + years = np.arange(splice_start_year, splice_end_year + 1, timestep) + return last_agg, region_list, years + + +# ------------------------------- +# Build long DataFrame (regional + global, keep samples) +# ------------------------------- +def build_long_dataframe( + base_path="data/temporary/NU_DATA/mmBorg/", + region_mapping_path="data/input/12_regions.json", + rice_region_dict_path="data/input/rice50_regions_dict.json", + years_of_interest=(2030, 2050, 2070, 2100), +): + """ + Build a long/tidy DataFrame with columns: + Optimization, Regret, Scenario, Welfare, Region, Year, Sample, AbatedEmission, Scope + Includes both Regional and Global (summed across regions) entries for selected years. + """ + scenario_list = ["SSP126", "SSP245", "SSP370", "SSP460", "SSP534"] + + with open(base_path + "min_regret_policy_indices.json", "r") as f: + policy_indices = json.load(f) + + baseline_path = Path(base_path) / "emissions_array_all_SSPs.npy" + baseline_emissions = np.load( + baseline_path + ) # shape expected: (src_regions, time, scenarios) + + rows = [] + + for reference_scenario, welfare_map in policy_indices.items(): + + for welfare_type, regret_map in welfare_map.items(): + + for scenario_index, scenario in enumerate(scenario_list): + + for regret in regret_map.keys(): + policy_idx = regret_map[regret] + folder_name = f"{welfare_type}_{reference_scenario}/ref_{reference_scenario}_{regret}_idx{policy_idx}" + path = Path(base_path) / folder_name + emissions_file = ( + path + / f"{welfare_type}_ref_{reference_scenario}_{regret}_idx{policy_idx}_emissions_idx{policy_idx}_{scenario}_emissions.npy" + ) + emissions_data = np.load( + emissions_file + ) # (src_regions, time, samples) + + # Abated emissions relative to baseline + abated_emissions = ( + baseline_emissions[:, :, scenario_index][:, :, np.newaxis] + - emissions_data + ) + + # Aggregate to 12 regions and slice years inclusively + region_agg_arr, region_list, agg_years = aggregate_abated_emissions( + input_data_arrays=[abated_emissions], + region_mapping_path=region_mapping_path, + rice_region_dict_path=rice_region_dict_path, + start_year=2015, + end_year=2300, + splice_start_year=2025, + splice_end_year=2100, # inclusive in helper + data_timestep=5, + timestep=1, + ) + # region_agg_arr: (12, T, samples) + + # Select only desired years + year_mask = np.isin(agg_years, years_of_interest) + if not np.any(year_mask): + continue + years_sel = agg_years[year_mask] + arr_sel = region_agg_arr[ + :, year_mask, : + ] # (12, len(years_sel), samples) + + n_regions, n_years, n_samples = arr_sel.shape + + # Regional rows + vals = arr_sel.reshape(-1) # flatten: region->year->sample + region_rep = np.repeat(region_list, n_years * n_samples) + year_rep = np.tile(np.repeat(years_sel, n_samples), n_regions) + sample_rep = np.tile(np.arange(n_samples), n_regions * n_years) + + rows.append( + pd.DataFrame( + { + "Optimization": reference_scenario, + "Regret": regret, + "Scenario": scenario, + "Welfare": welfare_type, + "Region": region_rep, + "Year": year_rep, + "Sample": sample_rep, + "AbatedEmission": vals.astype(np.float64), + "Scope": "Regional", + } + ) + ) + + # Global rows (sum across regions, per year and sample) + global_arr = arr_sel.sum(axis=0) # (n_years, n_samples) + g_vals = global_arr.reshape(-1) + g_year_rep = np.repeat(years_sel, n_samples) + g_sample_rep = np.tile(np.arange(n_samples), n_years) + + rows.append( + pd.DataFrame( + { + "Optimization": reference_scenario, + "Regret": regret, + "Scenario": scenario, + "Welfare": welfare_type, + "Region": "Global", + "Year": g_year_rep, + "Sample": g_sample_rep, + "AbatedEmission": g_vals.astype(np.float64), + "Scope": "Global", + } + ) + ) + + long_df = pd.concat(rows, ignore_index=True) + + # Optimize dtypes + for col in ["Optimization", "Regret", "Scenario", "Welfare", "Region", "Scope"]: + long_df[col] = long_df[col].astype("category") + long_df["Year"] = long_df["Year"].astype(np.int32) + long_df["Sample"] = long_df["Sample"].astype(np.int32) + + return long_df + + +# ------------------------------- +# Build cell-level datasets (raw/mean/median/P90 targets) +# ------------------------------- +def build_cell_level_targets( + long_df, years=(2030, 2050, 2070, 2100), target_stat="mean", scope="Global" +): + """ + Aggregate across 1001 samples to get one scalar target per cell, unless target_stat='raw' + in which case each sample is kept. + """ + assert scope in ("Global", "Regional") + stat = target_stat.lower() + if stat == "p50": + stat = "median" + + df = long_df[long_df["Year"].isin(years)].copy() + + if stat == "raw": + if scope == "Global": + df = df[df["Region"] == "Global"] + keep_cols = [ + "Year", + "Optimization", + "Regret", + "Scenario", + "Welfare", + "Sample", + "AbatedEmission", + ] + else: + df = df[df["Scope"] == "Regional"] + keep_cols = [ + "Year", + "Region", + "Optimization", + "Regret", + "Scenario", + "Welfare", + "Sample", + "AbatedEmission", + ] + df = df[keep_cols].rename(columns={"AbatedEmission": "Y"}) + for c in ["Optimization", "Regret", "Scenario", "Welfare"]: + df[c] = df[c].astype("category") + if scope == "Regional": + df["Region"] = df["Region"].astype("category") + df["Sample"] = df["Sample"].astype("category") + df["Year"] = df["Year"].astype(np.int32) + return df + + if scope == "Global": + df = df[df["Region"] == "Global"] + group_cols = ["Year", "Optimization", "Regret", "Scenario", "Welfare"] + else: + df = df[df["Scope"] == "Regional"] + group_cols = ["Year", "Region", "Optimization", "Regret", "Scenario", "Welfare"] + + if stat == "mean": + agg_df = ( + df.groupby(group_cols, observed=True)["AbatedEmission"].mean().reset_index() + ) + elif stat == "median": + agg_df = ( + df.groupby(group_cols, observed=True)["AbatedEmission"] + .median() + .reset_index() + ) + elif stat == "p90": + agg_df = ( + df.groupby(group_cols, observed=True)["AbatedEmission"] + .quantile(0.90) + .reset_index() + ) + else: + raise ValueError( + "target_stat must be one of: 'raw', 'mean', 'median' (or 'p50'), 'p90'" + ) + + agg_df = agg_df.rename(columns={"AbatedEmission": "Y"}) + # Ensure categoricals + for c in ["Optimization", "Regret", "Scenario", "Welfare"]: + agg_df[c] = agg_df[c].astype("category") + if scope == "Regional": + agg_df["Region"] = agg_df["Region"].astype("category") + agg_df["Year"] = agg_df["Year"].astype(np.int32) + return agg_df + + +# ------------------------------- +# CatBoost + SHAP with cross-validation and early stopping +# ------------------------------- +def _loss_for_stat(target_stat): + stat = target_stat.lower() + if stat in ("mean", "raw"): + return "RMSE" + if stat in ("median", "p50"): + return "Quantile:alpha=0.5" + if stat == "p90": + return "Quantile:alpha=0.9" + raise ValueError("Unknown target_stat") + + +def _metrics_for_stat(y_true, y_pred, target_stat): + """ + Compute evaluation metrics per fold. + - For mean/raw (RMSE): return {'RMSE': ..., 'R2': ...} + - For median/P90 (Quantile): return {'Pinball': ...} where alpha is 0.5 or 0.9 + """ + y_true = np.asarray(y_true, dtype=float) + y_pred = np.asarray(y_pred, dtype=float) + stat = target_stat.lower() + + def r2_score(y, yhat): + ss_res = np.sum((y - yhat) ** 2) + ss_tot = np.sum((y - np.mean(y)) ** 2) + return 0.0 if ss_tot <= 1e-12 else 1.0 - ss_res / ss_tot + + if stat in ("mean", "raw"): + rmse = float(np.sqrt(np.mean((y_true - y_pred) ** 2))) + r2 = float(r2_score(y_true, y_pred)) + return {"RMSE": rmse, "R2": r2} + + # Quantile pinball loss + alpha = 0.5 if stat in ("median", "p50") else 0.9 + e = y_true - y_pred + pinball = np.mean(np.maximum(alpha * e, (alpha - 1.0) * e)) + return {"Pinball": float(pinball)} + + +def _cat_indices(X, categorical_cols): + return [X.columns.get_loc(c) for c in categorical_cols] + + +def shap_values_mean_abs(model, X, categorical_cols): + """ + Mean absolute SHAP values per feature using CatBoost's SHAP. + """ + pool = Pool(X, cat_features=_cat_indices(X, categorical_cols)) + shap_vals = model.get_feature_importance(data=pool, type="ShapValues") + # shap_vals shape: (n_samples, n_features + 1); last column is expected value + shap_main = np.abs(shap_vals[:, :-1]) + means = shap_main.mean(axis=0) + return pd.Series(means, index=X.columns).sort_values(ascending=False) + + +def fit_catboost_cv_shap( + X, + y, + categorical_cols, + target_stat="mean", + cv_folds=5, + random_state=42, + params=None, +): + """ + Cross-validated CatBoost with early stopping. + - Trains a model per fold with eval_set for early stopping + - Collects SHAP importances on each validation fold, averages across folds + - Returns: + { + 'cv_metrics': list of dicts per fold, + 'cv_metrics_mean': dict of mean metrics, + 'best_iterations': list, + 'shap_cv_mean': Series, + 'model_full': fitted CatBoost on full data, + 'shap_full': Series + } + """ + if params is None: + params = dict( + depth=6, + learning_rate=0.05, + n_estimators=800, + l2_leaf_reg=3.0, + random_seed=random_state, + loss_function=_loss_for_stat(target_stat), + od_type="Iter", + od_wait=50, # early stopping patience + use_best_model=True, # keep best iteration wrt eval_set + verbose=False, + allow_writing_files=False, + ) + + k = min(cv_folds, max(2, len(X))) # ensure at least 2, at most N + kf = KFold(n_splits=k, shuffle=True, random_state=random_state) + + cv_metrics = [] + best_iters = [] + shap_series_list = [] + + cat_idx = _cat_indices(X, categorical_cols) + + for fold, (tr_idx, va_idx) in enumerate(kf.split(X), start=1): + X_tr, X_va = X.iloc[tr_idx], X.iloc[va_idx] + y_tr, y_va = y.iloc[tr_idx], y.iloc[va_idx] + + train_pool = Pool(X_tr, y_tr, cat_features=cat_idx) + valid_pool = Pool(X_va, y_va, cat_features=cat_idx) + + model = CatBoostRegressor(**params) + model.fit(train_pool, eval_set=valid_pool) + + # Evaluate on validation + yhat_va = model.predict(valid_pool) + fold_metrics = _metrics_for_stat(y_va.values, yhat_va, target_stat) + cv_metrics.append(fold_metrics) + + # Record best iteration if available + best_iter = getattr(model, "tree_count_", None) + if best_iter is None: + # Fallback: params n_estimators + best_iter = int(params.get("n_estimators", 800)) + best_iters.append(best_iter) + + # SHAP on validation fold, mean absolute + shap_series = shap_values_mean_abs(model, X_va, categorical_cols) + shap_series_list.append(shap_series) + + # Aggregate metrics + metric_keys = cv_metrics[0].keys() + cv_metrics_mean = { + k: float(np.mean([m[k] for m in cv_metrics])) for k in metric_keys + } + + # Average SHAP across folds (align by feature name) + shap_cv_df = pd.concat(shap_series_list, axis=1) + shap_cv_mean = shap_cv_df.mean(axis=1).sort_values(ascending=False) + + # Fit final model on full data using average best_iters (rounded) + avg_best = int( + np.clip(np.round(np.mean(best_iters)), 50, params.get("n_estimators", 800)) + ) + final_params = dict(params) + final_params["n_estimators"] = avg_best + # disable use_best_model and overfitting detector for the final fit + final_params["use_best_model"] = False + final_params.pop("od_type", None) + final_params.pop("od_wait", None) + + final_model = CatBoostRegressor(**final_params) + final_model.fit(Pool(X, y, cat_features=cat_idx)) # no eval_set for final fit + + # SHAP on full data for reference + shap_full = shap_values_mean_abs(final_model, X, categorical_cols) + + return { + "cv_metrics": cv_metrics, + "cv_metrics_mean": cv_metrics_mean, + "best_iterations": best_iters, + "shap_cv_mean": shap_cv_mean, + "model_full": final_model, + "shap_full": shap_full, + } + + +# ------------------------------- +# Plotting helpers +# ------------------------------- +def _normalize(s): + tot = float(s.sum()) + return s / tot if tot > 0 else s + + +def plot_bar_importance( + series, + title, + outfile=None, + normalized=True, + figsize=(6, 4), + rotate=0, + color="#4C78A8", +): + """ + If outfile ends with .csv/.json/.parquet, save the importance data to that file (no plot). + Otherwise, create a bar plot and save/show as before. + """ + s = series.copy() + if normalized: + s = _normalize(s) + + ext = str(outfile).lower() if outfile is not None else "" + is_csv = ext.endswith(".csv") + is_json = ext.endswith(".json") + is_parquet = ext.endswith(".parquet") + + if outfile is not None and (is_csv or is_json or is_parquet): + df = s.rename_axis("Feature").reset_index(name="Importance") + Path(outfile).parent.mkdir(parents=True, exist_ok=True) + print(f"Saving feature importance data to: {Path(outfile).resolve()}") + if is_csv: + df.to_csv(outfile, index=False) + elif is_json: + df.to_json(outfile, orient="records") + elif is_parquet: + df.to_parquet(outfile, index=False) + return df + + plt.figure(figsize=figsize) + plt.bar(s.index, s.values, color=color) + plt.ylabel( + "SHAP importance" + (" (normalized)" if normalized else " (mean |SHAP|)") + ) + plt.title(title) + if rotate: + plt.xticks(rotation=rotate, ha="right") + plt.tight_layout() + if outfile is not None: + Path(outfile).parent.mkdir(parents=True, exist_ok=True) + plt.savefig(outfile, dpi=200) + plt.close() + else: + plt.show() + return s + + +# ------------------------------- +# Pipeline per scope/year/stat (SHAP only) +# ------------------------------- +def run_ml_importance_for_scope( + cell_df, + scope="Global", + years=(2030, 2050, 2070, 2100), + target_stat="mean", + output_dir="ml_importance_plots", + cv_folds=5, + random_state=0, + model_params=None, + normalized_plots=True, + model_type="final", # "final" or "cv-mean" +): + """ + For the given scope (Global or Regional cell-level data), fit CatBoost models per year with CV. + """ + results = {} + target_name = f"Y_{target_stat.lower()}" + df = cell_df.copy() + df = df.rename(columns={"Y": target_name}) + + feature_cols = ["Optimization", "Regret", "Scenario", "Welfare"] + if target_stat.lower() == "raw": + feature_cols = feature_cols + ["Sample"] + categorical_cols = feature_cols[:] + + outbase = Path(output_dir) / scope.lower() / target_stat.lower() + outbase.mkdir(parents=True, exist_ok=True) + + print(f"Saving plots to: {outbase.resolve()}") + + for yr in years: + d = df[df["Year"] == yr].copy() + if d.empty: + continue + + year_results = {} + + if scope == "Global": + X = d[feature_cols].copy() + y = d[target_name].copy() + + res = fit_catboost_cv_shap( + X, + y, + categorical_cols, + target_stat=target_stat, + cv_folds=cv_folds, + random_state=random_state, + params=model_params, + ) + + year_results.update(res) + + if model_type == "cv-mean": + plot_bar_importance( + res["shap_cv_mean"], + title=f"{scope} {yr} — SHAP importance (CV mean, {target_stat})", + outfile=outbase / f"{scope.lower()}_{yr}_shap_cv.csv", + normalized=normalized_plots, + figsize=(6, 4), + ) + elif model_type == "final": + plot_bar_importance( + res["shap_full"], + title=f"{scope} {yr} — SHAP importance (final model, {target_stat})", + outfile=outbase / f"{scope.lower()}_{yr}_shap_full.csv", + normalized=normalized_plots, + figsize=(6, 4), + ) + + else: + year_results["regions"] = {} + for region, d_r in d.groupby("Region", observed=True): + X = d_r[feature_cols].copy() + y = d_r[target_name].copy() + if len(X) < 4: + continue + + res = fit_catboost_cv_shap( + X, + y, + categorical_cols, + target_stat=target_stat, + cv_folds=cv_folds, + random_state=random_state, + params=model_params, + ) + year_results["regions"][str(region)] = res + + safe_region = str(region).replace(" ", "_").replace("/", "_") + if model_type == "cv-mean": + plot_bar_importance( + res["shap_cv_mean"], + title=f"{region} {yr} — SHAP importance (CV mean, {target_stat})", + outfile=outbase / f"{safe_region}_{yr}_shap_cv.csv", + normalized=normalized_plots, + figsize=(6, 4), + ) + elif model_type == "final": + plot_bar_importance( + res["shap_full"], + title=f"{region} {yr} — SHAP importance (final model, {target_stat})", + outfile=outbase / f"{safe_region}_{yr}_shap_full.csv", + normalized=normalized_plots, + figsize=(6, 4), + ) + + results[yr] = year_results + + return results + + +# ------------------------------- +# Convenience runner for all stats and either scope (SHAP only) +# ------------------------------- +def run_all_ml_importance( + long_df, + years=(2030, 2050, 2070, 2100), + target_stats=("mean", "median", "p90"), + output_dir="ml_importance_plots", + cv_folds=5, + random_state=0, + model_params=None, + normalized_plots=True, + model_type="final", # "final" or "cv-mean" + scope="global", # or "regional" +): + """ + Build cell-level targets for each requested statistic and run CatBoost + SHAP + for either Global or Regional scope. + """ + all_results = {} + scope = scope.lower() + for stat in target_stats: + if scope == "regional": + regional_cells = build_cell_level_targets( + long_df, years=years, target_stat=stat, scope="Regional" + ) + regional_results = run_ml_importance_for_scope( + regional_cells, + scope="Regional", + years=years, + target_stat=stat, + output_dir=output_dir, + cv_folds=cv_folds, + random_state=random_state, + model_params=model_params, + normalized_plots=normalized_plots, + model_type=model_type, + ) + all_results[stat] = {"Regional": regional_results} + elif scope == "global": + global_cells = build_cell_level_targets( + long_df, years=years, target_stat=stat, scope="Global" + ) + global_results = run_ml_importance_for_scope( + global_cells, + scope="Global", + years=years, + target_stat=stat, + output_dir=output_dir, + cv_folds=cv_folds, + random_state=random_state, + model_params=model_params, + normalized_plots=normalized_plots, + model_type=model_type, + ) + all_results[stat] = {"Global": global_results} + else: + raise ValueError("scope must be either 'global' or 'regional'") + return all_results diff --git a/justice/util/output_data_processor.py b/justice/util/output_data_processor.py index 0866ad4..9a71c7a 100644 --- a/justice/util/output_data_processor.py +++ b/justice/util/output_data_processor.py @@ -114,6 +114,9 @@ def reevaluated_optimal_policy_variable_extractor( + variable_name ) + # Check if output directory exists, if not create it + if not path_to_output.exists(): + path_to_output.mkdir(parents=True, exist_ok=True) # Save it as npy file out_path = path_to_output / f"{output_file_name}.npy" np.save(out_path, processed_data) @@ -141,6 +144,8 @@ def reevaluate_optimal_policy( max_difference=2.0, min_difference=0.0, model_hard_reset=False, + reference_scenario=None, + regret_type=None, ): """ Function to generate data for the optimal policy. It runs JUSTICE on the optimal policy and saves the data as a pickle file. @@ -223,7 +228,20 @@ def reevaluate_optimal_policy( min_difference=min_difference, ) - output_file_name = output_file_name + "_idx" + str(rbf_policy_index) + if reference_scenario is not None and regret_type is not None: + print("Saving file as ", output_file_name) + output_file_name = ( + output_file_name + + "_ref_" + + reference_scenario + + "_" + + regret_type + + "_idx" + + str(rbf_policy_index) + ) + else: + print("Saving file as ", output_file_name) + output_file_name = output_file_name + "_idx" + str(rbf_policy_index) # Now save in hdf5 format with h5py.File(path_to_output + output_file_name + ".h5", "w") as f: @@ -261,7 +279,21 @@ def reevaluate_optimal_policy( max_difference=max_difference, min_difference=min_difference, ) - output_file_name = output_file_name + "_idx" + str(rbf_policy_index) + + if reference_scenario is not None and regret_type is not None: + print("Saving file as ", output_file_name) + output_file_name = ( + output_file_name + + "_ref_" + + reference_scenario + + "_" + + regret_type + + "_idx" + + str(rbf_policy_index) + ) + else: + print("Saving file as ", output_file_name) + output_file_name = output_file_name + "_idx" + str(rbf_policy_index) # Save as HDF5 file with h5py.File(path_to_output + output_file_name + ".h5", "w") as f: @@ -299,7 +331,20 @@ def reevaluate_optimal_policy( max_difference=max_difference, min_difference=min_difference, ) - output_file_name = output_file_name + "_idx" + str(rbf_policy_index) + if reference_scenario is not None and regret_type is not None: + print("Saving file as ", output_file_name) + output_file_name = ( + output_file_name + + "_ref_" + + reference_scenario + + "_" + + regret_type + + "_idx" + + str(rbf_policy_index) + ) + else: + print("Saving file as ", output_file_name) + output_file_name = output_file_name + "_idx" + str(rbf_policy_index) # Save as HDF5 file with h5py.File(path_to_output + output_file_name + ".h5", "w") as f: @@ -1398,7 +1443,6 @@ def compute_p90_regret_dataframe( raise ValueError( "No valid baseline data found in mapping for baseline_scenario and variable_of_interest." ) - # Sort list by median value median_list.sort(key=lambda x: x[1]) diff --git a/justice/util/pareto_nash_run.py b/justice/util/pareto_nash_run.py new file mode 100644 index 0000000..1f3585e --- /dev/null +++ b/justice/util/pareto_nash_run.py @@ -0,0 +1,619 @@ +import os +import json +import csv +import time +import numpy as np +import pandas as pd +from pathlib import Path +from itertools import product +import multiprocessing as mp +from typing import Any, Dict, List, Tuple, Optional + +from solvers.emodps.rbf import RBF + +from justice.util.enumerations import ( + Economy, + DamageFunction, + Abatement, + WelfareFunction, +) +from justice.model import JUSTICE +from justice.util.emission_control_constraint import EmissionControlConstraint +from justice.util.regional_configuration import ( + aggregate_by_macro_region, + build_macro_region_mapping, +) +from justice.objectives.objective_functions import fraction_of_ensemble_above_threshold +from justice.util.data_loader import DataLoader +from justice.util.model_time import TimeHorizon + + +# ------------------------ policy bank ------------------------ + + +def build_policy_bank_from_5row_csv( + policy_csv_path: str, + config_path: str, + n_agents: int = 5, +) -> Tuple[np.ndarray, Dict]: + with open(config_path, "r", encoding="utf-8") as f: + config = json.load(f) + + df = pd.read_csv(policy_csv_path) + if len(df) != 5: + raise ValueError( + f"Expected CSV to have exactly 5 rows (5 actions), got {len(df)}" + ) + + n_inputs = int(config["n_inputs"]) + rbf_template = RBF(n_rbfs=(n_inputs + 2), n_inputs=n_inputs, n_outputs=1) + centers_shape, radii_shape, weights_shape = rbf_template.get_shape() + centers_len, radii_len, weights_len = ( + centers_shape[0], + radii_shape[0], + weights_shape[0], + ) + decision_var_len = centers_len + radii_len + weights_len + + policy_bank = np.empty((n_agents, 5, decision_var_len), dtype=np.float64) + + for a in range(5): # action index = row index + row = df.iloc[a] + for i in range(n_agents): + centers = np.array( + [row[f"center {i} {j}"] for j in range(centers_len)], dtype=np.float64 + ) + radii = np.array( + [row[f"radii {i} {j}"] for j in range(radii_len)], dtype=np.float64 + ) + weights = np.array( + [row[f"weights {i} {j}"] for j in range(weights_len)], dtype=np.float64 + ) + policy_bank[i, a, :] = np.concatenate([centers, radii, weights]) + + return policy_bank, config + + +# ------------------------ multiprocessing worker ------------------------ + +_G: Dict[str, Any] = {} + + +def _init_worker( + policy_bank: np.ndarray, config: Dict, scenario: int, mapping_base_path: str +): + # prevent BLAS oversubscription inside each process + os.environ.setdefault("OMP_NUM_THREADS", "1") + os.environ.setdefault("MKL_NUM_THREADS", "1") + os.environ.setdefault("OPENBLAS_NUM_THREADS", "1") + + _G["policy_bank"] = policy_bank + _G["config"] = config + _G["scenario"] = scenario + _G["mapping_base_path"] = mapping_base_path + + # --- config values used repeatedly --- + start_year = config["start_year"] + end_year = config["end_year"] + data_timestep = config["data_timestep"] + timestep = config["timestep"] + emission_control_start_year = config["emission_control_start_year"] + + n_inputs = int(config["n_inputs"]) + temperature_year_of_interest = config["temperature_year_of_interest"] + stochastic_run = config["stochastic_run"] + climate_members = config.get("climate_ensemble_members") + + min_temperature = config["min_temperature"] + max_temperature = config["max_temperature"] + min_temperature_change = config["min_temperature_change"] + max_temperature_change = config["max_temperature_change"] + consumption_min = config["consumption_min"] + consumption_max = config["consumption_max"] + + _G["n_inputs"] = n_inputs + _G["temperature_year_of_interest"] = temperature_year_of_interest + _G["min_temperature"] = min_temperature + _G["max_temperature"] = max_temperature + _G["min_temperature_change"] = min_temperature_change + _G["max_temperature_change"] = max_temperature_change + _G["consumption_min"] = consumption_min + _G["consumption_max"] = consumption_max + + # --- mapping / regions (build once) --- + data_loader = DataLoader() + region_list = data_loader.REGION_LIST + n_regions = len(region_list) + + time_horizon = TimeHorizon( + start_year=start_year, + end_year=end_year, + data_timestep=data_timestep, + timestep=timestep, + ) + emission_start_ts = time_horizon.year_to_timestep( + year=emission_control_start_year, timestep=timestep + ) + temperature_year_index = time_horizon.year_to_timestep( + year=temperature_year_of_interest, timestep=timestep + ) + n_timesteps = len(time_horizon.model_time_horizon) + + r5_json = Path(mapping_base_path) / "R5_regions.json" + rice50_json = Path(mapping_base_path) / "rice50_regions_dict.json" + region_to_macro, macro_region_names = build_macro_region_mapping( + region_list=region_list, + r5_json_path=r5_json, + rice50_json_path=rice50_json, + ) + n_macro = len(macro_region_names) + if n_macro != 5: + raise RuntimeError(f"Expected 5 macro regions, got {n_macro}") + + _G["region_to_macro"] = region_to_macro + _G["n_regions"] = n_regions + _G["n_macro"] = n_macro + _G["n_timesteps"] = n_timesteps + _G["temperature_year_index"] = temperature_year_index + _G["emission_start_ts"] = emission_start_ts + + # --- instantiate model ONCE per worker --- + model = JUSTICE( + scenario=scenario, + economy_type=Economy.NEOCLASSICAL, + damage_function_type=DamageFunction.KALKUHL, + abatement_type=Abatement.ENERDATA, + social_welfare_function=WelfareFunction.UTILITARIAN, + stochastic_run=stochastic_run, + climate_ensembles=climate_members, + ) + _G["model"] = model + _G["no_of_ensembles"] = int(model.__getattribute__("no_of_ensembles")) + + # --- constraint (once) --- + _G["emission_constraint"] = EmissionControlConstraint( + max_annual_growth_rate=0.04, + emission_control_start_timestep=emission_start_ts, + min_emission_control_rate=0.01, + ) + + # --- precompute constants & preallocate buffers (once) --- + inv_temperature_range = 1.0 / (max_temperature - min_temperature) + inv_temperature_change_range = 1.0 / ( + max_temperature_change - min_temperature_change + ) + inv_consumption_range = 1.0 / (consumption_max - consumption_min) + + _G["inv_temperature_range"] = inv_temperature_range + _G["inv_temperature_change_range"] = inv_temperature_change_range + _G["inv_consumption_range"] = inv_consumption_range + + noE = _G["no_of_ensembles"] + _G["rbf_in"] = np.empty((n_inputs, noE), dtype=np.float64) + _G["prev_temp"] = np.zeros(noE, dtype=np.float64) + _G["prev_dtemp"] = np.zeros(noE, dtype=np.float64) + + _G["regional_ecr"] = np.zeros((n_regions, n_timesteps, noE), dtype=np.float64) + _G["constrained_ecr"] = np.zeros((n_regions, n_timesteps, noE), dtype=np.float64) + _G["macro_ecr"] = np.zeros((n_macro, n_timesteps, noE), dtype=np.float64) + _G["macro_cpc_hist"] = np.zeros((n_macro, n_timesteps, noE), dtype=np.float64) + + # region population is fixed conditional on scenario/config; compute once + _G["region_population"] = model.economy.get_population() + + +def _simulate_profile( + actions: Tuple[int, int, int, int, int], +) -> Tuple[Tuple[int, int, int, int, int], np.ndarray, float]: + """ + actions: (a0..a4) each in {0..4} + Returns: (actions, welfare_vec(5,), fraction_above_threshold) + """ + policy_bank = _G["policy_bank"] + model: JUSTICE = _G["model"] + + n_inputs = _G["n_inputs"] + region_to_macro = _G["region_to_macro"] + emission_constraint: EmissionControlConstraint = _G["emission_constraint"] + + n_regions = _G["n_regions"] + n_macro = _G["n_macro"] + n_timesteps = _G["n_timesteps"] + noE = _G["no_of_ensembles"] + + min_temperature = _G["min_temperature"] + min_temperature_change = _G["min_temperature_change"] + consumption_min = _G["consumption_min"] + + inv_temperature_range = _G["inv_temperature_range"] + inv_temperature_change_range = _G["inv_temperature_change_range"] + inv_consumption_range = _G["inv_consumption_range"] + + temperature_year_index = _G["temperature_year_index"] + + # --- reset model state (key change) --- + model.reset() + + # --- build RBFs for this profile (small overhead; could be further cached if needed) --- + macro_rbfs: List[RBF] = [] + for i in range(n_macro): + rbf = RBF(n_rbfs=(n_inputs + 2), n_inputs=n_inputs, n_outputs=1) + rbf.set_decision_vars(policy_bank[i, actions[i], :]) + macro_rbfs.append(rbf) + + # --- reuse buffers --- + regional_ecr = _G["regional_ecr"] + regional_ecr.fill(0.0) + constrained_ecr = _G["constrained_ecr"] + constrained_ecr.fill(0.0) + macro_ecr = _G["macro_ecr"] + macro_ecr.fill(0.0) + macro_cpc_hist = _G["macro_cpc_hist"] + macro_cpc_hist.fill(0.0) + + rbf_in = _G["rbf_in"] + prev_temp = _G["prev_temp"] + prev_temp.fill(0.0) + prev_dtemp = _G["prev_dtemp"] + prev_dtemp.fill(0.0) + + region_population = _G["region_population"] + + # --- run --- + for t in range(n_timesteps): + constrained_ecr[:, t, :] = emission_constraint.constrain_emission_control_rate( + regional_ecr[:, t, :], t, allow_fallback=False + ) + + model.stepwise_run( + emission_control_rate=constrained_ecr[:, t, :], + timestep=t, + endogenous_savings_rate=True, + ) + ds_t = model.stepwise_evaluate(timestep=t) + + temp = ds_t["global_temperature"][t, :] + cons = ds_t["consumption"][:, t, :] + + if t == 0: + dtemp = np.zeros_like(temp) + prev_temp[:] = temp + prev_dtemp[:] = dtemp + elif t % 5 == 0: + dtemp = temp - prev_temp + prev_temp[:] = temp + prev_dtemp[:] = dtemp + else: + dtemp = prev_dtemp + + rbf_in[0, :] = np.clip( + (temp - min_temperature) * inv_temperature_range, 0.0, 1.0 + ) + rbf_in[1, :] = np.clip( + (dtemp - min_temperature_change) * inv_temperature_change_range, 0.0, 1.0 + ) + + pop_t = region_population[:, t, :] + macro_pop = aggregate_by_macro_region(pop_t, region_to_macro) + macro_total_cons = aggregate_by_macro_region(cons, region_to_macro) + macro_cpc = (macro_total_cons / macro_pop) * 1e3 + macro_cpc_hist[:, t, :] = macro_cpc + + norm_macro_cpc = np.clip( + (macro_cpc - consumption_min) * inv_consumption_range, 0.0, 1.0 + ) + + if t < n_timesteps - 1: + for i, rbf in enumerate(macro_rbfs): + rbf_in[2, :] = norm_macro_cpc[i, :] + macro_ecr[i, t + 1, :] = rbf.apply_rbfs(rbf_in) + regional_ecr[:, t + 1, :] = macro_ecr[region_to_macro, t + 1, :] + + ds = model.evaluate() + + welfare_vec = model.welfare_function.calculate_spatially_disaggregated_welfare( + macro_cpc_hist + ) + welfare_vec = np.asarray(welfare_vec, dtype=np.float64) + + frac = fraction_of_ensemble_above_threshold( + temperature=ds["global_temperature"], + temperature_year_index=temperature_year_index, + threshold=2.0, + ) + + return actions, welfare_vec, float(frac) + + +# ------------------------ benchmark + full run ------------------------ + + +def benchmark_profiles( + policy_csv_path: str, + config_path: str, + scenario: int = 2, + mapping_base_path: str = "data/input", + n_samples: int = 20, + seed: int = 0, +) -> None: + """ + Runs n_samples profiles sequentially in THIS process to estimate time/profile. + Uses the same init/reset logic as workers. + """ + rng = np.random.default_rng(seed) + policy_bank, config = build_policy_bank_from_5row_csv( + policy_csv_path, config_path, n_agents=5 + ) + + _init_worker(policy_bank, config, scenario, mapping_base_path) + + samples = [tuple(rng.integers(0, 5, size=5).tolist()) for _ in range(n_samples)] + + t0 = time.perf_counter() + for a in samples: + _simulate_profile(a) + t1 = time.perf_counter() + + per = (t1 - t0) / n_samples + est_total = per * (5**5) + print(f"Benchmark: {n_samples} samples in {t1-t0:.3f}s") + print(f"Time/profile: {per:.4f}s") + print(f"Estimated time for 5^5=3125 profiles: {est_total/60:.2f} minutes") + + +def run_5pow5_payoff_table( + policy_csv_path: str, + config_path: str, + out_csv_path: str, + scenario: int = 2, + mapping_base_path: str = "data/input", + n_workers: Optional[int] = None, + chunksize: int = 8, +) -> None: + policy_bank, config = build_policy_bank_from_5row_csv( + policy_csv_path, config_path, n_agents=5 + ) + + profiles = list(product(range(5), repeat=5)) # 3125 + + out_path = Path(out_csv_path) + out_path.parent.mkdir(parents=True, exist_ok=True) + + header = [ + "a0", + "a1", + "a2", + "a3", + "a4", + "welfare_0", + "welfare_1", + "welfare_2", + "welfare_3", + "welfare_4", + "fraction_above_threshold", + ] + + # If you are on Linux and want faster startup, you can try "fork". + # "spawn" is safest cross-platform. + ctx = mp.get_context("spawn") + + if n_workers is None: + n_workers = max(1, mp.cpu_count() - 1) + + t0 = time.perf_counter() + completed = 0 + report_every = 100 + + with out_path.open("w", newline="") as f: + writer = csv.writer(f) + writer.writerow(header) + + with ctx.Pool( + processes=n_workers, + initializer=_init_worker, + initargs=(policy_bank, config, scenario, mapping_base_path), + ) as pool: + for actions, welfare_vec, frac in pool.imap_unordered( + _simulate_profile, profiles, chunksize=chunksize + ): + writer.writerow([*actions, *welfare_vec.tolist(), frac]) + completed += 1 + + if completed % report_every == 0: + t = time.perf_counter() - t0 + rate = completed / max(t, 1e-9) + eta = (len(profiles) - completed) / max(rate, 1e-9) + print( + f"{completed}/{len(profiles)} done | {rate:.2f} проф/s | ETA {eta/60:.1f} min" + ) + + t1 = time.perf_counter() + print(f"Finished {len(profiles)} profiles in {(t1-t0)/60:.2f} minutes") + + +def nondominated_mask(points: np.ndarray) -> np.ndarray: + """ + points: (m, k) array, all objectives assumed to be MAXIMIZED. + Returns mask of rows that are NOT Pareto-dominated by any other row. + """ + m = points.shape[0] + dominated = np.zeros(m, dtype=bool) + + # O(m^2 * k) but here groups are tiny (e.g., 5 actions), so it's fast. + for i in range(m): + if dominated[i]: + continue + ge = (points >= points[i]).all(axis=1) + gt = (points > points[i]).any(axis=1) + if np.any(ge & gt): + dominated[i] = True + return ~dominated + + +def infer_agent_count( + df: pd.DataFrame, + welfare_prefix: str = "welfare_", + action_prefix: str = "a", +) -> int: + """ + Infers n_agents from columns welfare_0..welfare_{n-1} or a0..a{n-1}. + """ + welfare_idx = [] + for c in df.columns: + if c.startswith(welfare_prefix): + suf = c[len(welfare_prefix) :] + if suf.isdigit(): + welfare_idx.append(int(suf)) + + action_idx = [] + for c in df.columns: + if c.startswith(action_prefix): + suf = c[len(action_prefix) :] + if suf.isdigit(): + action_idx.append(int(suf)) + + candidates = [] + if welfare_idx: + candidates.append(max(welfare_idx) + 1) + if action_idx: + candidates.append(max(action_idx) + 1) + + if not candidates: + raise ValueError( + "Could not infer number of agents from columns (no welfare_* or a* columns found)." + ) + + n_agents = max(candidates) + return n_agents + + +def pareto_nash_set( + payoff_csv_path: str, + fraction_col: str = "fraction_above_threshold", + minimize_fraction: bool = True, + welfare_prefix: str = "welfare_", + action_prefix: str = "a", + n_agents: Optional[int] = None, +) -> pd.DataFrame: + """ + Computes the Pareto–Nash set for an n-player game where each player's outcome is 2D: + [welfare_i (maximize), -fraction (maximize)] if minimize_fraction=True + + Returns a dataframe subset with boolean columns br_i and is_pareto_nash. + + Notes + ----- + Requires action columns a0..a{n-1} and welfare columns welfare_0..welfare_{n-1}. + """ + df = pd.read_csv(payoff_csv_path) + + if n_agents is None: + n_agents = infer_agent_count( + df, welfare_prefix=welfare_prefix, action_prefix=action_prefix + ) + + action_cols = [f"{action_prefix}{i}" for i in range(n_agents)] + welfare_cols = [f"{welfare_prefix}{i}" for i in range(n_agents)] + + missing = [ + c for c in action_cols + welfare_cols + [fraction_col] if c not in df.columns + ] + if missing: + raise ValueError(f"Missing required columns: {missing}") + + actions_arr = df[action_cols].to_numpy(dtype=np.int64) + welfare_arr = df[welfare_cols].to_numpy(dtype=np.float64) + + frac_raw = df[fraction_col].to_numpy(dtype=np.float64) + frac_obj = ( + -frac_raw if minimize_fraction else frac_raw + ) # convert to maximize objective + + br_masks: List[np.ndarray] = [] + + for i in range(n_agents): + others = [j for j in range(n_agents) if j != i] + keys = actions_arr[:, others] # (N, n_agents-1) + + # Fast grouping by "others": turn each key row into bytes + keys_struct = np.ascontiguousarray(keys).view( + np.dtype((np.void, keys.dtype.itemsize * keys.shape[1])) + ) + _, group_id = np.unique(keys_struct, return_inverse=True) + + br = np.zeros(len(df), dtype=bool) + + # iterate groups; each group contains all unilateral actions for player i + # (typically size = number of actions per player) + for gid in np.unique(group_id): + idx = np.where(group_id == gid)[0] + pts = np.column_stack([welfare_arr[idx, i], frac_obj[idx]]) + br[idx] = nondominated_mask(pts) + + df[f"br_{i}"] = br + br_masks.append(br) + + df["is_pareto_nash"] = np.logical_and.reduce(br_masks) + return df[df["is_pareto_nash"]].copy() + + +def main(): + policy_csv_path = ( + "data/temporary/MOMA_DATA/200k/COMBINED_MOMA_epsilon_nondominated_set.csv" + ) + config_path = "analysis/momadps_config.json" + mapping_base_path = "data/input" + + # 1) quick sequential benchmark (no multiprocessing) + benchmark_profiles( + policy_csv_path=policy_csv_path, + config_path=config_path, + scenario=2, + mapping_base_path=mapping_base_path, + n_samples=10, + seed=0, + ) + + # 2) full parallel run (5^5 profiles) + out_csv_path = "data/temporary/MOMA_DATA/200k/out/payoff_table_5x5x5x5x5.csv" + Path(out_csv_path).parent.mkdir(parents=True, exist_ok=True) + + run_5pow5_payoff_table( + policy_csv_path=policy_csv_path, + config_path=config_path, + out_csv_path=out_csv_path, + scenario=2, + mapping_base_path=mapping_base_path, + n_workers=4, # tune + chunksize=8, # tune + ) + + +if __name__ == "__main__": + # # Required on macOS/Windows when using "spawn" + # mp.freeze_support() + # # Optional: be explicit (recommended for reproducibility) + # mp.set_start_method("spawn", force=True) + + # main() + payoff_csv = "data/temporary/MOMA_DATA/200k/out/payoff_table_5x5x5x5x5.csv" + + pn = pareto_nash_set( + payoff_csv_path=payoff_csv, + minimize_fraction=True, # usually you want to minimize fraction above threshold + fraction_col="fraction_above_threshold", + welfare_prefix="welfare_", + action_prefix="a", + n_agents=None, # infer from columns + ) + + print("Pareto–Nash profiles:", len(pn)) + cols_to_show = [ + c for c in pn.columns if c.startswith("a") or c.startswith("welfare_") + ] + ["fraction_above_threshold"] + print(pn[cols_to_show].head()) + + # Save Pareto–Nash profiles to CSV + pn_out_path = "data/temporary/MOMA_DATA/200k/out/pareto_nash_profiles.csv" + pn.to_csv(pn_out_path, index=False) + print(f"Saved Pareto–Nash profiles to {pn_out_path}") diff --git a/justice/util/postprocessing_for_regret_calculations.py b/justice/util/postprocessing_for_regret_calculations.py new file mode 100644 index 0000000..b9c1fac --- /dev/null +++ b/justice/util/postprocessing_for_regret_calculations.py @@ -0,0 +1,111 @@ +# export PYTHONPATH=$PYTHONPATH:/Users/palokbiswas/Desktop/pollockdevis_git/JUSTICE/ +from justice.util.output_data_processor import process_scenario + +import os +import sys +import filecmp +import pandas as pd +from pathlib import Path +import multiprocessing as mp +from functools import partial +from justice.util.enumerations import WelfareFunction, SSP +from justice.util.output_data_processor import ( + process_scenario, + generate_reference_set_policy_mapping, + read_reference_set_policy_mapping, +) + +from justice.util.output_data_processor import ( + reevaluate_optimal_policy, + reevaluated_optimal_policy_variable_extractor, +) +from justice.util.model_time import TimeHorizon +from justice.util.data_loader import DataLoader + + +def process_scenario_parallel( + start_year, + end_year, + data_timestep, + timestep, + scenario_list, + social_welfare_function, + ssp, + base_path, +): + data_loader = DataLoader() + region_list = data_loader.REGION_LIST + + time_horizon = TimeHorizon( + start_year=start_year, + end_year=end_year, + data_timestep=data_timestep, + timestep=timestep, + ) + list_of_years = time_horizon.model_time_horizon + + sw_name = social_welfare_function.value[1] + ssp_name = ssp.name # str(ssp).split(".")[1] + path = base_path + sw_name + "_" + ssp_name + "/" + # path = os.path.join(base_path, ssp_name, "") + filename = f"{sw_name}_reference_set.csv" + csv_path = os.path.join(path, filename) + + loaded_df = pd.read_csv(csv_path) + policy_indices = list(range(len(loaded_df))) + + print(f"Loading data for {sw_name} from {csv_path}") + print("Selected policy-indices last 2 columns:") + print(loaded_df.iloc[policy_indices, -2:]) + + try: + mp.set_start_method("spawn") + except RuntimeError: + pass + + bound_process_scenario = partial( + process_scenario, social_welfare_function, path, policy_indices + ) + with mp.Pool(processes=len(scenario_list)) as pool: + pool.map(bound_process_scenario, scenario_list) + + +if __name__ == "__main__": + + # Get swf, ssp, base_dir from sys.argv or set default values + base_dir = sys.argv[1] if len(sys.argv) > 4 else "data/temporary/NU_DATA/mmBorg/" + swf_input = (sys.argv[2] if len(sys.argv) > 2 else "PRIORITARIAN").upper() + ssp_name = (sys.argv[3] if len(sys.argv) > 3 else "SSP1").upper() + + ssp = SSP[ssp_name] + + social_welfare_function = WelfareFunction[swf_input] + + scenario_list = ["SSP126", "SSP245", "SSP370", "SSP460", "SSP534"] + + print(f"Selected Social Welfare Function: {social_welfare_function}, SSP: {ssp}") + + ######################################## + + # Step 1: Parallel Scenario Processing Block which produces welfare and temperature data for all policies and scenarios and ensemble members + process_scenario_parallel( + start_year=2015, + end_year=2300, + data_timestep=5, + timestep=1, + scenario_list=scenario_list, + social_welfare_function=social_welfare_function, + ssp=ssp, + base_path=base_dir, + ) + ######################################## + # Step 2: Generate Mapping from policy index to objective values + mapping = generate_reference_set_policy_mapping( + swf=social_welfare_function, + data_root=Path(base_dir + social_welfare_function.value[1] + "_" + ssp.name), + scenario_list=scenario_list, + saving=True, + output_directory="mapping", + delete_loaded_files=True, # Set to True to delete the loaded files after processing + ) + ######################################## diff --git a/justice/util/reevaluate_optimal_policy.py b/justice/util/reevaluate_optimal_policy.py new file mode 100644 index 0000000..0bf32e9 --- /dev/null +++ b/justice/util/reevaluate_optimal_policy.py @@ -0,0 +1,119 @@ +import pandas as pd +from justice.util.output_data_processor import ( + reevaluate_optimal_policy, + reevaluated_optimal_policy_variable_extractor, +) +from justice.util.model_time import TimeHorizon +from justice.util.data_loader import DataLoader +from justice.util.enumerations import WelfareFunction, SSP +import json +import os + + +def reevaluate_policies_for_all_scenarios( + base_path="data/temporary/NU_DATA/mmBorg/", + scenario_list=["SSP126", "SSP245", "SSP370", "SSP460", "SSP534"], + policy_indices_dict_name="min_regret_policy_indices.json", + output_path=None, + start_year=2015, + end_year=2300, + data_timestep=5, + timestep=1, +): + + # Throw error if output_path is None + if output_path is None: + raise ValueError( + "output_path cannot be None. Please provide a valid output path." + ) + + start_year = 2015 + end_year = 2300 + data_timestep = 5 + timestep = 1 + + data_loader = DataLoader() + region_list = data_loader.REGION_LIST + + time_horizon = TimeHorizon( + start_year=start_year, + end_year=end_year, + data_timestep=data_timestep, + timestep=timestep, + ) + + list_of_years = time_horizon.model_time_horizon + + with open(base_path + policy_indices_dict_name, "r") as f: + loaded_min_regret_policy_indices = json.load(f) + + for scenario, ethical_data in loaded_min_regret_policy_indices.items(): + + for ethical_framing, regret_data in ethical_data.items(): + + for regret_type, policy_index in regret_data.items(): + + # ssp = SSP[scenario] + social_welfare_function = WelfareFunction[ethical_framing] + path = f"{base_path}/{ethical_framing}_{scenario}/" + # Print + print( + f"Reevaluating for: {ethical_framing}, ref scenario: {scenario}, Regret {regret_type} Policy Index: {policy_index}" + ) + # TODO: Temporarily commenting out reevaluation to just extract variables + reevaluate_optimal_policy( + input_data=[ + f"{social_welfare_function.value[1]}_reference_set.csv", + ], + path_to_rbf_weights=path, # reevaluation + path_to_output=output_path, # reevaluation + direction_of_optimization=[ + "min", + "min", + ], + rbf_policy_index=policy_index, # selected_indices[0], # This chooses policy for a particular rival framing. Can also set to the index directly + list_of_objectives=[ + "welfare", + "fraction_above_threshold", + ], + scenario_list=scenario_list, # [scenario], # This is only for a single scenario + reference_scenario=scenario, + regret_type=regret_type, + ) + + # ############################################################################################################ + variable_names_and_shapes = { + "global_temperature": 2, + "constrained_emission_control_rate": 3, + "emissions": 3, + } + input_data_name = f"{ethical_framing}_reference_set_ref_{scenario}_{regret_type}_idx{policy_index}.h5" + for variable_name, data_shape in variable_names_and_shapes.items(): + reevaluated_optimal_policy_variable_extractor( + scenario_list=scenario_list, # [scenario], # This is only for a single scenario + region_list=region_list, + list_of_years=list_of_years, + path_to_data=base_path, + path_to_output=base_path + f"/{ethical_framing}_{scenario}" + f"/ref_{scenario}_{regret_type}_idx{policy_index}", # TODO Change this later + variable_name=variable_name, + data_shape=data_shape, # 2 for temperature, 3 for rest + no_of_ensembles=1001, + input_data=[ + input_data_name, + ], + output_file_names=[ + f"{ethical_framing}_ref_{scenario}_{regret_type}_idx{policy_index}_{variable_name}", + ], + ) + + # Delete the hdf5 file + os.remove(base_path + "/" + input_data_name) + print(f"Deleted HDF5 file at location {input_data_name}") + + +if __name__ == "__main__": + + reevaluate_policies_for_all_scenarios( + output_path="data/temporary/NU_DATA/mmBorg/" # "/Volumes/justicedrive/NU_data_20_Oct/reevaluation/" + ) diff --git a/justice/util/regional_configuration.py b/justice/util/regional_configuration.py index 2fac37a..160c675 100644 --- a/justice/util/regional_configuration.py +++ b/justice/util/regional_configuration.py @@ -10,9 +10,10 @@ from collections import defaultdict import json -import pycountry # TODO Use this to get country names for ISO3 codes import pandas as pd import numpy as np +from pathlib import Path +from typing import Sequence def get_region_mapping( @@ -113,3 +114,77 @@ def justice_region_aggregator( aggregated_data[index, :, :] = np.sum(data[indices, :, :], axis=0) return aggregated_region_list, aggregated_data + + +def build_macro_region_mapping( + region_list: Sequence[str], + r5_json_path: Path, + rice50_json_path: Path, +) -> tuple[np.ndarray, tuple[str, ...]]: + """ + Build the `region_to_macro` index array and the ordered macro-region names. + + Parameters + ---------- + region_list: + Ordered list (or array) of 57 region identifiers corresponding to the + rows in `emis_control`. + r5_json_path: + Path to `R5_regions.json`. + rice50_json_path: + Path to `rice50_regions_dict.json`. + + Returns + ------- + region_to_macro: + Array of shape (57,) mapping each row index to a macro-region index. + macro_region_names: + Tuple of macro-region names in the same order as the aggregated axis. + """ + with open(r5_json_path) as f: + macro_region_def = json.load(f) + + with open(rice50_json_path) as f: + region_to_countries = json.load(f) + + # Fast lookup from country code -> macro-region index + macro_region_names = tuple(macro_region_def.keys()) + macro_code_to_index = { + code: idx + for idx, macro_name in enumerate(macro_region_names) + for code in macro_region_def[macro_name] + } + + region_to_index = {region: idx for idx, region in enumerate(region_list)} + region_to_macro = np.full(len(region_list), -1, dtype=np.intp) + + for region_name, country_codes in region_to_countries.items(): + region_idx = region_to_index.get(region_name) + if region_idx is None: + continue # or raise if this should never happen + + for code in country_codes: + macro_idx = macro_code_to_index.get(code) + if macro_idx is not None: + region_to_macro[region_idx] = macro_idx + break + + if (region_to_macro < 0).any(): + missing = np.where(region_to_macro < 0)[0] + raise ValueError( + "Some regions lack macro-region assignment: " + f"{missing.tolist()} – verify your JSON files." + ) + + return region_to_macro, macro_region_names + + +def aggregate_by_macro_region( + data: np.ndarray, + region_to_macro: np.ndarray, +) -> np.ndarray: + aggregated = np.zeros( + (region_to_macro.max() + 1,) + data.shape[1:], dtype=data.dtype + ) + np.add.at(aggregated, region_to_macro, data) + return aggregated diff --git a/justice/util/visualizer.py b/justice/util/visualizer.py index 9c6d23b..f0f59aa 100644 --- a/justice/util/visualizer.py +++ b/justice/util/visualizer.py @@ -20,11 +20,734 @@ from justice.util.data_loader import DataLoader from plotly.subplots import make_subplots from sklearn.preprocessing import MinMaxScaler - import json import pycountry import plotly.express as px import plotly.graph_objects as go +import re +from typing import Dict, List +from typing import Iterable +from matplotlib.collections import PatchCollection +from matplotlib.patches import Polygon +import matplotlib.colors as mcolors +import matplotlib.cm as cm +from matplotlib.colors import LinearSegmentedColormap + +import plotly.colors as pc +from matplotlib.patches import PathPatch +import matplotlib.path as mpath + +# ============================================================================= + + +def load_regional_uncertainty_shares( + base_dir: str, + stat: str = "raw", + model_type: str = "final", + years: Iterable[int] = (2030, 2050, 2070, 2100), + FEATURE_ORDER=["Scenario", "Regret", "Welfare", "Optimization", "Sample"], +) -> pd.DataFrame: + base = Path(base_dir) / "regional" / stat.lower() + if not base.exists(): + raise FileNotFoundError(f"Directory not found: {base}") + + kind = "shap_full" if model_type == "final" else "shap_cv" + pattern = re.compile(rf"^(?P.+)_(?P\d{{4}})_{kind}\.csv$") + + records = [] + for csv_path in base.glob("*.csv"): + m = pattern.match(csv_path.name) + if not m: + continue + + region_slug = m.group("region") + year = int(m.group("year")) + if year not in years: + continue + + df = pd.read_csv(csv_path) + if not {"Feature", "Importance"}.issubset(df.columns): + print(f"[warn] '{csv_path}' missing required columns. Skipping.") + continue + + s = df.set_index("Feature")["Importance"] + s = s.reindex(FEATURE_ORDER, fill_value=0.0) + total = s.sum() + if total <= 0: + continue + + shares = s / total + records.append( + { + "Region": region_slug, + "Year": year, + "Normative": float(shares[["Regret", "Welfare", "Optimization"]].sum()), + "Deep": float(shares["Scenario"]), + "Stochastic": float(shares["Sample"]), + "Scenario": float(shares["Scenario"]), + "Regret": float(shares["Regret"]), + "Welfare": float(shares["Welfare"]), + "Optimization": float(shares["Optimization"]), + "Sample": float(shares["Sample"]), + } + ) + + shares_df = pd.DataFrame(records) + if shares_df.empty: + raise ValueError("No valid regional CSVs found. Check paths/stat/model_type.") + return shares_df + + +# ============================================================================= +# 2. Ternary background + color mixing +# ============================================================================= +def mix_color( + normative, + deep, + stochastic, + base_colors=np.array( + [ + [1.0, 0.0, 1.0], # Normative → magenta + [1.0, 1.0, 0.0], # Deep → yellow + [0.0, 1.0, 1.0], # Stochastic→ cyan + ] + ), + as_hex=True, +): + weights = np.array([normative, deep, stochastic], dtype=float) + total = weights.sum() + if total <= 0: + raise ValueError("Normative + Deep + Stochastic must be positive.") + weights /= total + rgb = np.clip(weights @ base_colors, 0, 1) + return mcolors.to_hex(rgb) if as_hex else rgb + + +def quantize_simplex(n, d, s, scale=8): + """Snap (n, d, s) onto a discrete ternary lattice with step size 1/scale.""" + weights = np.array([n, d, s], dtype=float) + total = weights.sum() + if total <= 0: + raise ValueError("Normative + Deep + Stochastic must be positive.") + weights /= total + + scaled = weights * scale + base = np.floor(scaled) + remainder = scale - int(base.sum()) + + if remainder > 0: + frac = scaled - base + for idx in np.argsort(-frac): + if remainder == 0: + break + base[idx] += 1 + remainder -= 1 + elif remainder < 0: + frac = scaled - base + for idx in np.argsort(frac): + if remainder == 0: + break + base[idx] -= 1 + remainder += 1 + + snapped = base / scale + snapped /= snapped.sum() + return snapped + + +def barycentric_to_cartesian(normative, deep, stochastic): + x = stochastic + 0.5 * normative + y = (np.sqrt(3) / 2.0) * normative + return x, y + + +def build_triangular_mesh(scale): + bary_coords = [] + cart_coords = [] + idx_lookup = {} + idx = 0 + for i in range(scale + 1): + for j in range(scale + 1 - i): + k = scale - i - j + n = i / scale + d = j / scale + s = k / scale + bary_coords.append(np.array([n, d, s])) + cart_coords.append(barycentric_to_cartesian(n, d, s)) + idx_lookup[(i, j)] = idx + idx += 1 + + triangles = [] + for i in range(scale): + for j in range(scale - i): + p0 = idx_lookup[(i, j)] + p1 = idx_lookup[(i + 1, j)] + p2 = idx_lookup[(i, j + 1)] + triangles.append((p0, p1, p2)) + if i + j < scale - 1: + p3 = idx_lookup[(i + 1, j + 1)] + triangles.append((p1, p3, p2)) + return bary_coords, cart_coords, triangles + + +def draw_ternary_background( + scale=8, + base_colors=np.array( + [ + [1.0, 0.0, 1.0], # Normative → magenta + [1.0, 1.0, 0.0], # Deep → yellow + [0.0, 1.0, 1.0], # Stochastic→ cyan + ] + ), + ax=None, + annotate=False, +): + bary_coords, cart_coords, triangles = build_triangular_mesh(scale) + + if ax is None: + fig, ax = plt.subplots(figsize=(6.5, 6)) + else: + fig = ax.figure + + patches = [] + colors = [] + for tri in triangles: + verts = [cart_coords[idx] for idx in tri] + centroid = np.mean([bary_coords[idx] for idx in tri], axis=0) + face_color = mix_color(*centroid, base_colors=base_colors, as_hex=False) + patches.append(Polygon(verts)) + colors.append(face_color) + + if annotate: + cx, cy = barycentric_to_cartesian(*centroid) + ax.text( + cx, + cy, + f"{centroid[0]:.2f}\n{centroid[1]:.2f}\n{centroid[2]:.2f}", + ha="center", + va="center", + fontsize=6, + color="black", + ) + + pcoll = PatchCollection(patches, facecolors=colors, edgecolors="k", linewidths=0.3) + ax.add_collection(pcoll) + + boundary = np.array( + [ + barycentric_to_cartesian(0, 0, 1), + barycentric_to_cartesian(0, 1, 0), + barycentric_to_cartesian(1, 0, 0), + barycentric_to_cartesian(0, 0, 1), + ] + ) + ax.plot(boundary[:, 0], boundary[:, 1], color="black", linewidth=1.25) + + for i in range(1, scale): + t = i / scale + p1 = barycentric_to_cartesian(t, 0, 1 - t) + p2 = barycentric_to_cartesian(t, 1 - t, 0) + ax.plot([p1[0], p2[0]], [p1[1], p2[1]], color="white", alpha=0.6, linewidth=0.8) + p1 = barycentric_to_cartesian(0, t, 1 - t) + p2 = barycentric_to_cartesian(1 - t, t, 0) + ax.plot([p1[0], p2[0]], [p1[1], p2[1]], color="white", alpha=0.6, linewidth=0.8) + p1 = barycentric_to_cartesian(0, 1 - t, t) + p2 = barycentric_to_cartesian(1 - t, 0, t) + ax.plot([p1[0], p2[0]], [p1[1], p2[1]], color="white", alpha=0.6, linewidth=0.8) + + ax.text( + 0.5, np.sqrt(3) / 2 + 0.04, "Normative", ha="center", va="bottom", fontsize=12 + ) + ax.text(-0.04, -0.03, "Deep", ha="right", va="top", fontsize=12) + ax.text(1.04, -0.03, "Stochastic", ha="left", va="top", fontsize=12) + + ax.set_xlim(-0.05, 1.05) + ax.set_ylim(-0.05, np.sqrt(3) / 2 + 0.08) + ax.set_aspect("equal") + ax.axis("off") + return fig, ax + + +def add_regions_to_ternary( + ax, + df_year: pd.DataFrame, + scale: int = 8, + quantize: bool = True, + annotate: bool = False, + marker_size: float = 18, + jitter_strength: float = 0.02, + random_state: int = 0, +): + rng = np.random.default_rng(random_state) if jitter_strength > 0 else None + + for _, row in df_year.iterrows(): + n, d, s = row["Normative"], row["Deep"], row["Stochastic"] + if quantize: + n, d, s = quantize_simplex(n, d, s, scale=scale) + + weights = np.array([n, d, s], dtype=float) + if jitter_strength > 0: + noise = rng.normal(scale=jitter_strength, size=3) + weights = np.clip(weights + noise, 1e-6, None) + weights /= weights.sum() + + x, y = barycentric_to_cartesian(*weights) + ax.scatter( + x, + y, + s=marker_size, + marker="X", + color="black", + edgecolor="none", + ) + + if annotate: + label = row["Region"].replace("_", " ") + ax.text( + x, y, label, fontsize=4, ha="left", va="top" + ) # ha and va mean horizontalalignment and verticalalignment + + +# ============================================================================= +# 3. Choropleth helpers +# ============================================================================= +def hex_to_rgb(hex_color: str) -> str: + hex_color = hex_color.lstrip("#") + r = int(hex_color[0:2], 16) + g = int(hex_color[2:4], 16) + b = int(hex_color[4:6], 16) + return f"rgb({r},{g},{b})" + + +def build_choropleth( + df_year: pd.DataFrame, + region_to_iso_path: str, + scale: int = 8, + quantize: bool = True, + projection_type: str = "equal earth", +) -> go.Figure: + with open(region_to_iso_path, "r", encoding="utf-8") as f: + region_to_iso = json.load(f) + + rows = [] + missing_regions = [] + + for _, row in df_year.iterrows(): + label = row["Region"].replace("_", " ") + if label not in region_to_iso: + missing_regions.append(label) + continue + + n, d, s = row["Normative"], row["Deep"], row["Stochastic"] + if quantize: + n, d, s = quantize_simplex(n, d, s, scale=scale) + color_hex = mix_color(n, d, s, as_hex=True) + + for iso3 in region_to_iso[label]: + if iso3 == "ATA": + continue # skip Antarctica + rows.append( + { + "iso_a3": iso3, + "macro_region": label, + "Normative": n, + "Deep": d, + "Stochastic": s, + "color_hex": color_hex, + } + ) + + if missing_regions: + print("[warn] Regions missing in JSON:", ", ".join(missing_regions)) + + map_df = pd.DataFrame(rows) + if map_df.empty: + raise ValueError("No regions found for this year that match the JSON mapping.") + + unique_regions = map_df["macro_region"].unique() + region_to_idx = {reg: idx for idx, reg in enumerate(unique_regions)} + map_df["region_idx"] = map_df["macro_region"].map(region_to_idx) + + n_regions = len(unique_regions) + colorscale = [] + for region in unique_regions: + idx = region_to_idx[region] + start = idx / n_regions + end = (idx + 1) / n_regions + color_rgb = hex_to_rgb( + map_df.loc[map_df["macro_region"] == region, "color_hex"].iloc[0] + ) + colorscale.append([start, color_rgb]) + colorscale.append([end, color_rgb]) + + choropleth = go.Choropleth( + locations=map_df["iso_a3"], + z=map_df["region_idx"], + text=map_df["macro_region"], + hovertemplate="%{text}", + colorscale=colorscale, + showscale=False, + marker=dict(line=dict(color="rgba(255,255,255,0.7)", width=0.4)), + ) + + fig = go.Figure(data=choropleth) + fig.update_layout( + showlegend=False, + paper_bgcolor="#f8f8f8", + plot_bgcolor="#f8f8f8", + margin=dict(l=0, r=0, t=0, b=0), + geo=dict( + projection=dict(type=projection_type), + showframe=False, + showcoastlines=False, + bgcolor="#f8f8f8", + landcolor="#f8f8f8", + ), + ) + return fig + + +# ============================================================================= +# 4. Master routine +# ============================================================================= +def generate_uncertainty_visualizations( + base_dir: str, + region_mapping_path: str, + stat: str = "raw", + model_type: str = "final", + years: Iterable[int] = (2030, 2050, 2070, 2100), + ternary_scale: int = 8, + quantize: bool = True, + annotate_points: bool = False, + marker_size: float = 18, + jitter_strength: float = 0.02, + random_state: int = 0, + output_dir: str = "fig_ternary_choropleth", +): + shares_df = load_regional_uncertainty_shares( + base_dir=base_dir, + stat=stat, + model_type=model_type, + years=years, + ) + + output_base = Path(output_dir) + output_base.mkdir(parents=True, exist_ok=True) + + sns.set_theme(style="white") + + results = {} + last_map = None + for yr in years: + df_year = shares_df[shares_df["Year"] == yr] + if df_year.empty: + print(f"[warn] No data for year {yr}. Skipping.") + continue + + fig_tern, ax_tern = draw_ternary_background(scale=ternary_scale) + add_regions_to_ternary( + ax_tern, + df_year, + scale=ternary_scale, + quantize=quantize, + annotate=annotate_points, + marker_size=marker_size, + jitter_strength=jitter_strength, + random_state=random_state, + ) + ax_tern.set_title(f"Regional Uncertainty Composition — {yr}") + ternary_path = output_base / f"ternary_{yr}.svg" + fig_tern.savefig(ternary_path, dpi=300, bbox_inches="tight") + plt.close(fig_tern) + + fig_map = build_choropleth( + df_year, + region_to_iso_path=region_mapping_path, + scale=ternary_scale, + quantize=quantize, + ) + svg_map_path = output_base / f"choropleth_{yr}.svg" + fig_map.write_image(str(svg_map_path), format="svg", width=800, height=600) + + results[yr] = {"ternary": ternary_path, "choropleth": svg_map_path} + last_map = fig_map + + return last_map, results + + +def plot_grouped_stacked_feature_importance_from_csvs( + base_dir, + scope="global", + stat="mean", + model_type="final", + years=(2030, 2050, 2070, 2100), + region=None, + output_file=None, + normalized=True, + figsize=(9, 4), + bar_width=1.0, + legend_fontsize=9, + feature_colors=None, + feature_order=None, + group_map: Dict[str, List[str]] = None, + group_colors: Dict[str, str] = None, + # Default feature order and colors if no grouping is provided + FEATURE_ORDER=["Scenario", "Regret", "Welfare", "Optimization", "Sample"], + FEATURE_COLORS={ + "Scenario": "#8da0cb", + "Regret": "#b2e2e2", + "Welfare": "#66c2a4", + "Optimization": "#238b45", + "Sample": "#fc8d62", + }, + # Default colors for grouped bars; feel free to tweak + GROUP_COLORS={ + "Deep Uncertainty": "#8da0cb", + "Normative Uncertainty": "#238b45", + "Stochastic Uncertainty": "#fc8d62", + }, +): + """ + Builds a stacked bar chart with one bar per year from saved SHAP CSVs. + If `group_map` is provided, features are aggregated by group and the legend + shows entries like "Deep Uncertainty (Scenario)". + """ + # Ensure years are integers and not floats + years = [int(yr) for yr in years] + + year_order = list(years) + feature_order = feature_order if feature_order is not None else FEATURE_ORDER + feature_colors = feature_colors if feature_colors is not None else FEATURE_COLORS + + kind = "shap_full" if model_type == "final" else "shap_cv" + root = Path(base_dir) / scope.lower() / stat.lower() + if not root.exists(): + raise FileNotFoundError(f"Directory not found: {root}") + + def read_importance_csv(path: Path): + if not path.exists(): + return None + df = pd.read_csv(path) + if not {"Feature", "Importance"}.issubset(df.columns): + raise ValueError(f"{path} must contain 'Feature' and 'Importance' columns") + s = df.set_index("Feature")["Importance"] + return s.reindex(feature_order, fill_value=0.0) + + sns.set_theme(style="white") + + if group_map: + group_order = list(group_map.keys()) + label_map = { + group: f"{group} ({', '.join(group_map[group])})" for group in group_order + } + group_colors = group_colors if group_colors is not None else GROUP_COLORS + + def aggregate_by_group(df_row): + row = {"Year": df_row["Year"]} + for group, feats in group_map.items(): + missing = [f for f in feats if f not in df_row.index] + if missing: + raise KeyError( + f"Missing features {missing} required for group '{group}'" + ) + row[group] = df_row[list(feats)].sum() + return row + + def transform_df(df_plot): + records = [aggregate_by_group(row) for _, row in df_plot.iterrows()] + return ( + pd.DataFrame(records), + group_order, + group_colors, + label_map, + group_map, + ) + + else: + + def transform_df(df_plot): + return df_plot, feature_order, feature_colors, None, None + + def plot_df(raw_df, title=None, outfile=None): + df_plot = raw_df.copy() + df_plot["Year"] = pd.Categorical( + df_plot["Year"], categories=year_order, ordered=True + ) + df_plot = df_plot.sort_values("Year") + + df_stack, stack_order, colors_map, legend_labels, legend_features = ( + transform_df(df_plot) + ) + + fig, ax = plt.subplots(figsize=figsize) + x_pos = np.arange(len(df_stack)) + bottoms = np.zeros(len(df_stack)) + + for key in stack_order: + values = df_stack[key].to_numpy() + ax.bar( + x_pos, + values, + width=bar_width, + bottom=bottoms, + color=colors_map.get(key, "#999999"), + label=legend_labels[key] if legend_labels else key, + align="center", + ) + bottoms += values + + ax.set_xticks(x_pos) + ax.set_xticklabels([str(y) for y in df_stack["Year"]]) + ax.set_xlim(-0.5, len(df_stack) - 0.5) + ax.margins(x=0) + sns.despine(ax=ax, top=True, right=True, left=False, bottom=False) + ax.set_xlabel("") + ax.set_ylabel("Importance" + (" (normalized)" if normalized else "")) + if title: + ax.set_title(title) + + handles, labels = ax.get_legend_handles_labels() + unique = dict(zip(labels, handles)) + ordered_handles = [unique[lbl] for lbl in labels if lbl in unique] + ax.legend( + ordered_handles, + [lbl for lbl in labels if lbl in unique], + frameon=False, + fontsize=legend_fontsize, + ncol=1, + loc="upper left", + bbox_to_anchor=(1.02, 1.0), + borderaxespad=0.0, + ) + + if outfile: + print(f"[info] Saving figure to {outfile}") + Path(outfile).parent.mkdir(parents=True, exist_ok=True) + fig.savefig(outfile, dpi=300, bbox_inches="tight") + plt.close(fig) + else: + plt.show() + + return fig + + if scope.lower() == "global": + rows = [] + for yr in year_order: + fpath = root / f"global_{yr}_{kind}.csv" + s = read_importance_csv(fpath) + if s is None: + continue + rows.append( + {"Year": yr, **{feat: float(s[feat]) for feat in feature_order}} + ) + + if not rows: + raise FileNotFoundError( + f"No CSVs found for scope=global, stat={stat}, kind={kind} in {root}" + ) + + df_plot = pd.DataFrame(rows) + fig = plot_df(df_plot, outfile=output_file) + return {"data": df_plot, "figure": fig} + + pattern = re.compile(rf"^(?P.+)_(?P\d{{4}})_{kind}\.csv$") + files = [p for p in root.glob("*.csv") if p.is_file()] + region_set = set() + for p in files: + m = pattern.match(p.name) + if not m: + continue + yy = int(m.group("year")) + if yy in years: + region_set.add(m.group("region")) + + region_list = [region] if region else sorted(region_set) + if not region_list: + raise FileNotFoundError( + f"No regional CSVs found for stat={stat}, kind={kind} in {root}" + ) + + figs = {} + all_rows = [] + + for rgn in region_list: + rows = [] + for yr in year_order: + fpath = root / f"{rgn}_{yr}_{kind}.csv" + s = read_importance_csv(fpath) + if s is None: + continue + rows.append( + { + "Region": rgn, + "Year": yr, + **{feat: float(s[feat]) for feat in feature_order}, + } + ) + if not rows: + continue + + df_plot = pd.DataFrame(rows) + title = rgn.replace("_", " ") + out = None + if output_file: + outpath = Path(output_file) + out = str(Path(outpath.parent) / f"{outpath.stem}_{rgn}{outpath.suffix}") + + fig = plot_df(df_plot, title=title, outfile=out) + figs[rgn] = fig + all_rows.append(df_plot) + + df_all = pd.concat(all_rows, ignore_index=True) if all_rows else pd.DataFrame() + return {"data": df_all, "figure": figs} + + +def render_all_grouped_stacked_charts( + base_dir, + scope="global", + stat="mean", + model_type="final", + years=(2030, 2050, 2070, 2100), + output_dir=None, + normalized=True, + figsize=(9, 6), + legend_fontsize=9, + bar_width=1.0, + group_map: Dict[str, List[str]] = None, +): + if output_dir is not None: + Path(output_dir).mkdir(parents=True, exist_ok=True) + + kwargs = dict( + base_dir=base_dir, + stat=stat, + model_type=model_type, + years=years, + output_file=None if output_dir is None else "", + normalized=normalized, + figsize=figsize, + legend_fontsize=legend_fontsize, + bar_width=bar_width, + group_map=group_map, + ) + if scope.lower() == "global": + outfile = ( + None + if output_dir is None + else str(Path(output_dir) / f"global_{stat}_{model_type}_stacked.svg") + ) + kwargs["scope"] = "global" + kwargs["output_file"] = outfile + return plot_grouped_stacked_feature_importance_from_csvs(**kwargs) + else: + outfile = ( + None + if output_dir is None + else str(Path(output_dir) / f"regional_{stat}_{model_type}_stacked.svg") + ) + kwargs["scope"] = "regional" + kwargs["output_file"] = outfile + return plot_grouped_stacked_feature_importance_from_csvs(**kwargs) def plot_emission_control_rate( @@ -794,6 +1517,9 @@ def add_traces( if saving: filename = data_paths[0].split("/")[-1].split(".")[0] + "_" + output_name_suffix + # Check if output path exists + if not os.path.exists(output_path): + os.makedirs(output_path) # Save the plot fig.write_image(f"{output_path}/{filename}.svg") @@ -1616,24 +2342,6 @@ def visualize_tradeoffs( ].shape[0] print("Adjusted top indices:", top_indices) - # for file in input_data: - # df_type = concatenated_df[concatenated_df["type"] == file] - - # top_indices[file] = ( - # df_type[objective_of_interest] - # .nsmallest(int(df_type.shape[0] * top_percentage)) - # .index - # ) - # print(file, len(top_indices[file])) - - # Now within the top_indices, find the index with lowest years_above_temperature_threshold - # if temperature_filter: - # index = df_type.loc[top_indices[file]][ - # "years_above_temperature_threshold" - # ].idxmin() - # print(index) - # top_indices[file] = [index] - if scaling: # Printing min max values of the objectives print("Min and Max values of the objectives", list_of_objectives) @@ -1669,11 +2377,11 @@ def visualize_tradeoffs( # this is one of your highlighted solutions: file_color = color_mapping[_type] # make it thicker - lw = linewidth * 3 # or whatever factor you like + lw = linewidth * highlight_factor # or whatever factor you like break # gray lines at half‐opacity, best ones fully opaque - alpha_here = 0.2 if file_color == "gray" else 1.0 + alpha_here = alpha if file_color == "gray" else 1.0 else: file_color = color_mapping.get(row["type"], "green") @@ -1722,7 +2430,6 @@ def visualize_tradeoffs( os.makedirs(path_to_output) # Save the plot as svg plt.savefig(path_to_output + "/" + output_file_name, dpi=300) - # plt.savefig(path_to_output + "/" + output_file_name, dpi=300) # Show the plot plt.show() @@ -2354,6 +3061,8 @@ def plot_choropleth_2D_data( normalized_colorbar=False, tickvals=[0, 0.25, 0.5, 0.75, 1], ticktext=["0%", "25%", "50%", "75%", "100%"], + plot_saving_format="svg", + show_frame=False, ): # Assert if input_data list and output_titles list is None @@ -2473,28 +3182,56 @@ def plot_choropleth_2D_data( "x": 0.5, "y": 0.95, }, + # Remove the frame around the map + geo=dict(showframe=False), ) + + if show_frame: + fig.update_layout( + geo=dict(showframe=True, framecolor="black", framewidth=1) + ) else: - fig.update_layout(title_text="") + fig.update_layout( + title_text="", + geo=dict(showframe=False), + ) + + if show_frame: + fig.update_layout( + geo=dict(showframe=True, framecolor="black", framewidth=1) + ) # Policy index number filename = file.split(".")[0] - # filename = ( - # filename.split("_")[0] - # + filename.split("_")[1] - # + "_" - # + filename.split("_")[-1] - # ) + + # TODO: This is a hotfix - change this later + # filename = filename.split("_") + # # Keep index 0 to 5 and the last element and combine them to create the new filename string + # filename = "_".join(filename[0:6] + [filename[11]] + [filename[-1]]) + # print("Saving file: ", filename) output_file_name = filename if saving: - fig.write_image( - path_to_output - + "/" - + output_file_name - + str(year_to_visualize) - + ".svg" - ) + # Check if path to output exists + if not os.path.exists(path_to_output): + os.makedirs(path_to_output) + + if plot_saving_format == "png": + fig.write_image( + path_to_output + + "/" + + output_file_name + + str(year_to_visualize) + + ".png" + ) + else: + fig.write_image( + path_to_output + + "/" + + output_file_name + + str(year_to_visualize) + + ".svg" + ) return fig, processed_data_dict @@ -3446,9 +4183,6 @@ def plot_stacked_area_chart_with_baseline_emissions( # Concatenate the dataframes abaated_emissions and data but keep the similar region names together data = pd.concat([data, abated_emissions]) - # # Use string similarity to sort the regions - # data = data.reindex(sorted(data.index, key=lambda x: x.split("_")[0])) - # Shape of the data print("Region list: ", region_list) @@ -3469,10 +4203,6 @@ def plot_stacked_area_chart_with_baseline_emissions( color_discrete_sequence=colour_palette, groupnorm=groupnorm, category_orders={"variable": region_list}, - # pattern_shape=data.index, - # Pattern Shape sequence for only the abated emissions - # pattern_shape_sequence=["x", None, "x", None, "x", None, "x", None, "x", None, "x", None, "x", None, "x", None, "x", None], - # pattern_shape_sequence=["x"], ) if groupnorm is None: fig.update_layout(yaxis_range=[yaxis_lower_limit, yaxis_upper_limit]) @@ -4303,162 +5033,920 @@ def plot_regret_heatmap( return ax -# def plot_hypervolume( -# path_to_data="data/convergence_metrics", -# path_to_output="./data/plots/convergence_plots", -# input_data=[], # Provide the list of input data files with extension -# xaxis_title="Number of Function Evaluations", -# yaxis_title="Hypervolume", -# linewidth=3, -# colour_palette=px.colors.qualitative.Dark24, -# template="plotly_white", -# yaxis_upper_limit=0.7, -# title_x=0.5, -# width=1000, -# height=800, -# fontsize=15, -# saving=False, -# ): -# # Assert if input_data list is empty -# assert input_data, "No input data provided for visualization." - -# # Loop through the input data list and load the data -# for idx, file in enumerate(input_data): -# data = pd.read_csv(path_to_data + "/" + file) -# # Keep only nfe and hypervolume columns -# data = data[["nfe", "hypervolume"]] -# data = data.sort_values(by="nfe") - -# # Find the max nfe value -# nfe_max = data["nfe"].max() -# # Get title text from filename -# titletext = file.split("_")[0] -# # Convert the titletext from all uppercase to title case -# titletext = titletext.title() - -# fig = go.Figure( -# data=[ -# go.Scatter( -# x=data["nfe"], -# y=data["hypervolume"], -# fill="none", -# mode="lines", #'none', -# line=dict(color=colour_palette[idx], width=linewidth), -# showlegend=False, -# ) -# ] -# ) - -# # Set the chart title and axis labels -# fig.update_layout( -# title=dict(text=titletext), -# xaxis_title=xaxis_title, -# yaxis_title=yaxis_title, -# width=width, -# height=height, -# template=template, -# yaxis_range=[0, yaxis_upper_limit], -# title_x=title_x, -# font=dict(size=fontsize), -# ) - -# # Avoid zero tick in the y-axis - minor cosmetic change -# fig.update_yaxes(tickvals=(np.arange(0, yaxis_upper_limit, 0.1))[1:]) - -# # Save the figure -# if not os.path.exists(path_to_output): -# os.makedirs(path_to_output) - -# if saving: -# output_file_name = f"{titletext}_{nfe_max}_hypervolume_plot" -# fig.write_image(path_to_output + "/" + output_file_name + ".png") - -# return fig +def plot_regional_emissions_comparison_with_boxplots( + data_paths, # List of paths for the data + start_year, + end_year, + data_timestep, + timestep, + visualization_start_year, + visualization_end_year, + yaxis_range, + opacity, + plot_title, + xaxis_title, + yaxis_title, + template, + width, + height, + baseline_path=None, + colors=[ + "rgba(252, 141, 98, 0.8)", + "rgba(93, 105, 177, 0.8)", + "rgba(218, 165, 27, 0.8)", + "rgba(47, 138, 196, 0.8)", + "rgba(153, 201, 69, 0.8)", + ], + median_colors=[ + "rgba(252, 141, 98, 1)", + "rgba(93, 105, 177, 1)", + "rgba(218, 165, 27, 1)", + "rgba(47, 138, 196, 1)", + "rgba(153, 201, 69, 1)", + ], + baseline_color="gray", + fontsize=18, + column_widths=[0.8, 0.2], + output_path=None, + saving=False, + show_min_max=True, + region_dict=None, # NEW + region_name=None, # NEW + region_aggregation=False, # NEW + output_filename=None, +): + + # Set the time horizon + time_horizon = TimeHorizon( + start_year=start_year, + end_year=end_year, + data_timestep=data_timestep, + timestep=timestep, + ) + list_of_years = time_horizon.model_time_horizon + + data_loader = DataLoader() + + # --------------------------- + # Baseline (regional optional) + # --------------------------- + if baseline_path: + baseline = np.load(baseline_path) + if region_aggregation: + assert ( + region_dict is not None + ), "region_dict required if region_aggregation=True" + region_list, baseline = justice_region_aggregator( + data_loader=data_loader, region_config=region_dict, data=baseline + ) + # baseline shape: (regions, years, ensemble) or (regions, years) + if baseline.ndim == 3: + baseline = baseline.mean(axis=2) + + # select one region + if region_name is not None: + r_idx = region_list.index(region_name) + baseline = baseline[r_idx] + + # --- make sure baseline is 2D (years x ensemble) --- + baseline = np.asarray(baseline) + if baseline.ndim == 1: + baseline = baseline[:, None] # (years, 1) + elif baseline.shape[0] != len(list_of_years) and baseline.shape[1] == len( + list_of_years + ): + baseline = baseline.T + + # same as before + baseline = pd.DataFrame(baseline.T, columns=list_of_years) + baseline = baseline.loc[:, visualization_start_year:visualization_end_year] + baseline = baseline.T + baseline = baseline.mean(axis=1) -if __name__ == "__main__": + # --------------------------- + # Load the data and create dataframes + # --------------------------- + data_frames = [] + for path in data_paths: + filetype = os.path.splitext(path)[1] + if filetype == ".npy": + data = np.load(path) + elif filetype == ".pkl": + with open(path, "rb") as f: + data = pickle.load(f) + elif filetype == ".csv": + data = pd.read_csv(path) - fig, data = plot_choropleth( - variable_name="constrained_emission_control_rate", - path_to_data="data/reevaluation/only_welfare_temp/", # "data/reevaluation/balanced/", # "data/reevaluation", - path_to_output="./data/plots/regional/only_welfare_temp", - projection="natural earth", - # scope='usa', - year_to_visualize=2100, - input_data=[ - "UTILITARIAN_reference_set_idx16.pkl", - "PRIORITARIAN_reference_set_idx196.pkl", - "SUFFICIENTARIAN_reference_set_idx57.pkl", - "EGALITARIAN_reference_set_idx404.pkl", - ], - output_titles=[ - "Utilitarian", - "Prioritarian", - "Sufficientarian", - "Egalitarian", - ], - title="Mitigation Burden Distribution in ", - data_label="Emission Control Rate", - colourmap="OrRd", - legend_label="\n", - # scenario_list= ['SSP245'], - scenario_list=[ - "SSP119", - "SSP126", - "SSP245", - "SSP370", - "SSP434", - "SSP460", - "SSP534", - "SSP585", - ], # ['SSP119', 'SSP126', 'SSP245', 'SSP370', 'SSP434', 'SSP460', 'SSP534', 'SSP585'], - data_normalization=True, - saving=True, - show_colorbar=True, - show_title=False, + if region_aggregation: + assert ( + region_dict is not None + ), "region_dict required if region_aggregation=True" + region_list, data = justice_region_aggregator( + data_loader=data_loader, region_config=region_dict, data=data + ) + + # data shape: (regions, years, ensemble) + if region_name is not None: + r_idx = region_list.index(region_name) + data = data[r_idx] + + # original behaviour + if len(data.shape) == 3: + data = np.sum(data, axis=0) + + data = data.T + df = pd.DataFrame(data, columns=list_of_years).loc[ + :, visualization_start_year:visualization_end_year + ] + data_frames.append(df.T) + + # ---- rest of your code unchanged ---- + fig = make_subplots( + rows=1, cols=2, column_widths=column_widths, subplot_titles=[plot_title, " "] ) - ############################################################################################################ - # fig = plot_timeseries( - # path_to_data="data/reevaluation/only_welfare_temp/", # "data/reevaluation", # /balanced, # "data/reevaluation", - # path_to_output="./data/plots/regional/only_welfare_temp", # "./data/plots/regional", - # x_label="Years", - # y_label="Temperature Rise (°C)", - # variable_name="global_temperature", - # input_data=[ - # "UTILITARIAN_reference_set_idx16.pkl", - # "PRIORITARIAN_reference_set_idx196.pkl", - # # "UTILITARIAN_reference_set_idx51.pkl", - # # "UTILITARIAN_reference_set_idx51_idx62.pkl", - # # "PRIORITARIAN_reference_set_idx817.pkl", - # # "PRIORITARIAN_reference_set_idx817_idx59.pkl", - # # "UTILITARIAN_reference_set_idx88.pkl", - # # "PRIORITARIAN_reference_set_idx748.pkl", - # # "SUFFICIENTARIAN_reference_set_idx99.pkl", - # # "EGALITARIAN_reference_set_idx147.pkl", - # ], - # output_titles=[ - # "Utilitarian", - # "Prioritarian", - # # "Sufficientarian", - # # "Egalitarian", - # ], - # main_title="Global Temperature Rise - ", - # show_title=False, - # saving=True, - # yaxis_lower_limit=0, - # yaxis_upper_limit=6, - # alpha=0.1, - # linewidth=2.5, - # start_year=2015, - # end_year=2300, - # visualization_start_year=2025, - # visualization_end_year=2100, - # scenario_list=[ - # "SSP119", - # "SSP245", - # "SSP370", - # "SSP434", - # "SSP585", - # ], # ['SSP119', 'SSP126', 'SSP245', 'SSP370', 'SSP434', 'SSP460', 'SSP534', 'SSP585'], # # - # ) + for idx, emissions in enumerate(data_frames): + color = colors[idx] + median_color = median_colors[idx] + + max_percentile = np.percentile(emissions, 100, axis=1) + min_percentile = np.percentile(emissions, 0, axis=1) + p75 = np.percentile(emissions, 75, axis=1) + p25 = np.percentile(emissions, 25, axis=1) + + if show_min_max: + fig.add_trace( + go.Scatter( + x=emissions.index, + y=max_percentile, + mode="lines", + line=dict(color=color, width=0.5), + fill=None, + showlegend=False, + ), + row=1, + col=1, + ) + + fig.add_trace( + go.Scatter( + x=emissions.index, + y=min_percentile, + mode="lines", + line=dict(color=color, width=0.5), + fill="tonexty", + opacity=opacity * 0.01, + showlegend=False, + ), + row=1, + col=1, + ) + + fig.add_trace( + go.Scatter( + x=emissions.index, + y=p75, + mode="lines", + line=dict(color=color, width=0.5), + fill=None, + showlegend=False, + ), + row=1, + col=1, + ) + + fig.add_trace( + go.Scatter( + x=emissions.index, + y=p25, + mode="lines", + line=dict(color=color, width=0.5), + fill="tonexty", + opacity=opacity, + showlegend=False, + ), + row=1, + col=1, + ) + + fig.add_trace( + go.Scatter( + x=emissions.index, + y=emissions.median(axis=1), + mode="lines", + line=dict(color=median_color, width=2), + name=f"Median {idx+1}", + ), + row=1, + col=1, + ) + + last_year_data = emissions.iloc[-1] + filename = data_paths[idx].split("/")[-1].split(".")[0] + filename = filename.split("_")[0] + fig.add_trace( + go.Box( + y=last_year_data, + name=filename, + marker=dict(color=median_color), + width=0.1, + ), + row=1, + col=2, + ) + + if baseline_path: + fig.add_trace( + go.Scatter( + x=emissions.index, + y=baseline, + mode="lines", + line=dict(color=baseline_color, width=2, dash="dash"), + name="Baseline", + ), + row=1, + col=1, + ) + + fig.update_traces( + marker=dict(line=dict(width=0.3, color=baseline_color)), row=1, col=2 + ) + + fig.update_layout( + title=plot_title, + xaxis_title=xaxis_title, + yaxis_title=yaxis_title, + template=template, + height=height, + width=width, + ) + + fig.update_yaxes( + title_text=yaxis_title, range=yaxis_range, showgrid=False, row=1, col=1 + ) + fig.update_yaxes( + range=yaxis_range, showticklabels=False, showgrid=False, row=1, col=2 + ) + fig.update_xaxes(title_text=xaxis_title, showgrid=False, row=1, col=1) + fig.update_layout(font=dict(size=fontsize)) + fig.update_layout(xaxis=dict(domain=[0, 0.8]), xaxis2=dict(domain=[0.95, 1])) + + fig.update_xaxes( + showline=True, linewidth=1, linecolor="black", ticks="outside", row=1, col=1 + ) + fig.update_yaxes( + showline=True, linewidth=1, linecolor="black", ticks="outside", row=1, col=1 + ) + + if saving: + if output_filename is None: + filename = "_".join( + [os.path.splitext(os.path.basename(path))[0] for path in data_paths] + ) + fig.write_image(f"{output_path}/{filename}.svg") + else: + filename = "_".join( + [os.path.splitext(os.path.basename(path))[0] for path in data_paths] + ) + fig.write_image(f"{output_path}/{filename}_{output_filename}.svg") + + return fig + + +if __name__ == "__main__": + + fig, data = plot_choropleth( + variable_name="constrained_emission_control_rate", + path_to_data="data/reevaluation/only_welfare_temp/", # "data/reevaluation/balanced/", # "data/reevaluation", + path_to_output="./data/plots/regional/only_welfare_temp", + projection="natural earth", + # scope='usa', + year_to_visualize=2100, + input_data=[ + "UTILITARIAN_reference_set_idx16.pkl", + "PRIORITARIAN_reference_set_idx196.pkl", + "SUFFICIENTARIAN_reference_set_idx57.pkl", + "EGALITARIAN_reference_set_idx404.pkl", + ], + output_titles=[ + "Utilitarian", + "Prioritarian", + "Sufficientarian", + "Egalitarian", + ], + title="Mitigation Burden Distribution in ", + data_label="Emission Control Rate", + colourmap="OrRd", + legend_label="\n", + # scenario_list= ['SSP245'], + scenario_list=[ + "SSP119", + "SSP126", + "SSP245", + "SSP370", + "SSP434", + "SSP460", + "SSP534", + "SSP585", + ], # ['SSP119', 'SSP126', 'SSP245', 'SSP370', 'SSP434', 'SSP460', 'SSP534', 'SSP585'], + data_normalization=True, + saving=True, + show_colorbar=True, + show_title=False, + ) + + +def visualize_tradeoffs_colored( + input_data=[], + figsize=(15, 10), + set_style="whitegrid", + font_scale=1.8, + colourmap="bright", + linewidth=0.4, + alpha=0.1, + path_to_data="data/reevaluation/", + path_to_output="./data/plots/only_welfare_temp", + scaling=True, + feature_range=(0, 1), + column_labels=None, + legend_labels=None, + show_legend=False, + axis_rotation=30, + fontsize=12, + list_of_objectives=[ + "welfare_utilitarian", + "years_above_temperature_threshold", + "damage_cost_per_capita_utilitarian", + "abatement_cost_per_capita_utilitarian", + ], + direction_of_optimization=[ + "min", + "min", + "max", + "max", + ], + pretty_labels=[ + "Welfare", + "Years Above Temp Threshold", + "Welfare Loss Damage", + "Welfare Loss Abatement", + ], + default_colors=["red", "blue"], + top_percentage=0.1, + objective_of_interest="fraction_above_threshold", + show_best_solutions=False, + highlight_indices=None, + highlight_factor=3, + saving=False, + custom_colors=["#d62728", "#ff7f0e", "#a8d2e8", "#05417d"], +): + + sns.set_theme(font_scale=font_scale) + sns.set_style(set_style) + sns.set_theme(rc={"figure.figsize": figsize}) + + # Assertions + assert input_data, "Input data not provided" + assert path_to_data, "Path to reference set is not provided" + assert len(list_of_objectives) == len(direction_of_optimization) + + concatenated_df = pd.DataFrame() + + for file in input_data: + data = pd.read_csv(path_to_data + "/" + file) + data = data[list_of_objectives] + data = np.abs(data) + data["type"] = file + concatenated_df = pd.concat([concatenated_df, data], axis=0) + + concatenated_df.reset_index(drop=True, inplace=True) + + if scaling: + scaler = MinMaxScaler(feature_range=feature_range) + concatenated_df[list_of_objectives] = scaler.fit_transform( + concatenated_df[list_of_objectives] + ) + + for i, direction in enumerate(direction_of_optimization): + if direction == "min": + concatenated_df[list_of_objectives[i]] = ( + 1 - concatenated_df[list_of_objectives[i]] + ) + + # --- Custom colormap (red → orange → light blue → blue) --- + cmap = LinearSegmentedColormap.from_list("temp_scale", custom_colors) + norm = mcolors.Normalize( + vmin=concatenated_df[objective_of_interest].min(), + vmax=concatenated_df[objective_of_interest].max(), + ) + + limits = parcoords.get_limits(concatenated_df[list_of_objectives]) + limits.columns = pretty_labels + axes = parcoords.ParallelAxes(limits, rot=axis_rotation, fontsize=fontsize) + + # Adjust highlight indices if needed + top_indices = {} + if show_best_solutions and highlight_indices: + top_indices = highlight_indices.copy() + size_offset = 0 + for file in input_data: + if file in top_indices: + top_indices[file] = [i + size_offset for i in top_indices[file]] + size_offset += concatenated_df[concatenated_df["type"] == file].shape[0] + + for idx, row in concatenated_df.iterrows(): + file_color = cmap(norm(row[objective_of_interest])) + lw = linewidth + alpha_here = alpha + + if show_best_solutions and highlight_indices: + for _type, indices in top_indices.items(): + if idx in indices: + lw = linewidth * highlight_factor + alpha_here = 1.0 + break + + _sliced_data = pd.DataFrame(row[list_of_objectives].values).T + _sliced_data.columns = pretty_labels + + axes.plot( + _sliced_data, + color=file_color, + linewidth=lw, + alpha=alpha_here, + ) + + if saving: + output_file_name = ( + "tradeoffs_" + + "_".join([file.split("_")[0] for file in input_data]) + + "_" + + ".svg" + ) + if not os.path.exists(path_to_output): + os.makedirs(path_to_output) + plt.savefig(path_to_output + "/" + output_file_name, dpi=300) + + plt.show() + return concatenated_df + + +def _interp_hex_colors(colors, t): + """ + Interpolate along a list of HEX colors at position t in [0, 1]. + Returns a Plotly-compatible 'rgb(r,g,b)' string. + """ + t = float(np.clip(t, 0.0, 1.0)) + n = len(colors) + if n == 1: + r, g, b = pc.hex_to_rgb(colors[0]) + return f"rgb({r},{g},{b})" + + pos = t * (n - 1) + i = int(np.floor(pos)) + j = min(i + 1, n - 1) + w = pos - i + + c0 = np.array(pc.hex_to_rgb(colors[i]), dtype=float) + c1 = np.array(pc.hex_to_rgb(colors[j]), dtype=float) + c = (1.0 - w) * c0 + w * c1 + r, g, b = np.round(c).astype(int) + return f"rgb({r},{g},{b})" + + + + + +def plot_alluvial_plotly( + df, + objectives, + direction_of_optimization, + temperature_col="fraction_above_threshold", + bins=5, # int or dict like {"welfare_3": 3, "welfare_4": 3} + custom_colors=("#d62728", "#ff7f0e", "#9ecae1", "#08519c"), + title="Alluvial Trade‑offs (binned)", + bin_order="desc", # "desc": 0.8-1.0 at top (encouraged), "asc": 0.0-0.2 at top + drop_unused_bins=True, # removes empty middle bins per objective (recommended) +): + """ + Plot an alluvial/Sankey of binned objectives (Plotly). + + - Scales objectives to [0,1] and inverts those with direction "min" so 1=best. + - Bins each objective into uniform bins. `bins` can be: + * int: same number of bins for all objectives + * dict: per-objective bins, e.g. {"welfare_3": 3, "welfare_4": 3} + - Colors links by mean scaled temp score of policies in that flow. + """ + + df = df.copy() + + # Ensure objectives and temperature are numeric BEFORE scaling + cols_to_numeric = list(dict.fromkeys(objectives + [temperature_col])) + for c in cols_to_numeric: + df[c] = pd.to_numeric(df[c], errors="coerce") + + df = df.dropna(subset=cols_to_numeric) + if df.empty: + raise ValueError( + "After coercing to numeric and dropping NaNs, the dataframe is empty." + ) + + # ---- scale objectives to 0..1 ---- + scaler = MinMaxScaler() + df_scaled = df.copy() + df_scaled[objectives] = scaler.fit_transform(df_scaled[objectives]) + + # invert "min" objectives so that 1=best, 0=worst + for obj, direction in zip(objectives, direction_of_optimization): + if direction == "min": + df_scaled[obj] = 1.0 - df_scaled[obj] + + # numeric temperature score for coloring + if temperature_col in objectives: + temp_score = df_scaled[temperature_col].astype(float).values + else: + tmp = df_scaled[[temperature_col]].copy() + tmp[temperature_col] = MinMaxScaler().fit_transform(tmp[[temperature_col]]) + temp_score = tmp[temperature_col].astype(float).values + df_scaled["_temp_score"] = temp_score + + if bin_order not in ("asc", "desc"): + raise ValueError("bin_order must be 'asc' or 'desc'") + + # Helper to get bin count per objective + def _bins_for(obj): + if isinstance(bins, dict): + return int(bins.get(obj, 5)) + return int(bins) + + # ---- bin each objective into categories (possibly with different bin counts) ---- + for obj in objectives: + k = _bins_for(obj) + edges = np.linspace(0.0, 1.0, k + 1) + labels = [f"{edges[i]:.1f}-{edges[i+1]:.1f}" for i in range(k)] + + df_scaled[obj] = pd.cut( + df_scaled[obj], + bins=edges, + labels=labels, + include_lowest=True, + ) + + ordered_labels = labels if bin_order == "asc" else list(reversed(labels)) + df_scaled[obj] = df_scaled[obj].cat.reorder_categories( + ordered_labels, ordered=True + ) + + if drop_unused_bins: + df_scaled[obj] = df_scaled[obj].cat.remove_unused_categories() + + df_scaled = df_scaled.dropna(subset=objectives + ["_temp_score"]) + if df_scaled.empty: + raise ValueError("After binning, the dataframe is empty (check scaling/bins).") + + # ---- build nodes (use categories ACTUALLY PRESENT, in their ordered order) ---- + node_labels = [] + node_index = {} + for obj in objectives: + for lab in list(df_scaled[obj].cat.categories): + node_index[(obj, lab)] = len(node_labels) + node_labels.append(f"{obj}\n{lab}") + + # ---- build links (aggregate counts + mean temp_score) ---- + source, target, value, link_colors = [], [], [], [] + + for i in range(len(objectives) - 1): + left = objectives[i] + right = objectives[i + 1] + + grouped = ( + df_scaled.groupby([left, right], observed=True)["_temp_score"] + .agg(count="size", mean="mean") + .reset_index() + ) + + for _, row in grouped.iterrows(): + s = node_index[(left, row[left])] + t = node_index[(right, row[right])] + source.append(s) + target.append(t) + value.append(int(row["count"])) + + mean_val = float(np.clip(row["mean"], 0.0, 1.0)) + link_colors.append(_interp_hex_colors(list(custom_colors), mean_val)) + + fig = go.Figure( + data=[ + go.Sankey( + arrangement="perpendicular", # keep auto layout (less jumbled) #snap + node=dict( + pad=15, + thickness=15, + label=None, # node_labels, + color="lightgray", + ), + link=dict( + source=source, + target=target, + value=value, + color=link_colors, + ), + ) + ] + ) + + fig.update_layout(title=title, font_size=10) + return fig + + +def scale_and_orient_objectives( + df: pd.DataFrame, + objectives, + direction_of_optimization, + feature_range=(0, 1), + take_abs=True, +): + assert len(objectives) == len(direction_of_optimization) + + out = df.copy() + + missing = [c for c in objectives if c not in out.columns] + if missing: + raise KeyError(f"Missing objective columns in df: {missing}") + + for c in objectives: + out[c] = pd.to_numeric(out[c], errors="coerce") + + out = out.dropna(subset=objectives) + if out.empty: + raise ValueError( + "No rows left after converting objectives to numeric and dropping NaNs." + ) + + if take_abs: + out[objectives] = out[objectives].abs() + + scaler = MinMaxScaler(feature_range=feature_range) + out[objectives] = scaler.fit_transform(out[objectives]) + + for obj, direction in zip(objectives, direction_of_optimization): + if direction == "min": + out[obj] = 1.0 - out[obj] + + return out + + + + +def curved_parallel_coordinates_clustered( + df: pd.DataFrame, + objectives, + direction_of_optimization, + color_by, + columns_to_plot=None, # if None -> plot objectives; you can hide temperature axis here + labels=None, + bins=3, # int OR dict, e.g. {"welfare_3": 2, "welfare_4": 2, "default": 3} + jitter=0.0, # small jitter around bin centers (e.g. 0.01–0.03) or 0.0 + feature_range=(0, 1), + take_abs=False, + figsize=(12, 8), + alpha=0.25, + linewidth=1.0, + curvature=0.35, + highlight_indices=None, # ORIGINAL row indices from your CSV (e.g. [9,52,86]) + highlight_factor=3.5, + highlight_alpha=1.0, + custom_colors=("#d62728", "#ff7f0e", "#9ecae1", "#08519c"), + x_rotation=25, + title=None, + random_state=0, +): + """ + Same as before, but `bins` can now be: + - int: same bins for all plotted axes + - dict: per-axis bins with optional default, e.g. + bins={"welfare_0": 4, "welfare_3": 2, "welfare_4": 2, "default": 3} + + Each axis is binned on [0,1] into uniform-width bins, values snapped to bin centers. + """ + + if columns_to_plot is None: + columns_to_plot = list(objectives) + + if labels is None: + labels = list(columns_to_plot) + + if len(labels) != len(columns_to_plot): + raise ValueError("labels must have the same length as columns_to_plot") + + if len(objectives) != len(direction_of_optimization): + raise ValueError( + "objectives and direction_of_optimization must have the same length" + ) + + def _bins_for(colname: str) -> int: + if isinstance(bins, dict): + b = bins.get(colname, bins.get("default", 3)) + return int(b) + return int(bins) + + df0 = df.copy() + df0["_orig_index"] = df0.index # preserve original row index for highlighting + + # Ensure numeric for required cols + required_cols = list(dict.fromkeys(list(objectives) + [color_by])) + for c in required_cols: + if c not in df0.columns: + raise KeyError(f"Missing column in df: {c}") + df0[c] = pd.to_numeric(df0[c], errors="coerce") + + # Drop rows with NaNs in required cols + df0 = df0.dropna(subset=required_cols) + if df0.empty: + raise ValueError("No rows left after numeric coercion and dropping NaNs.") + + # Optional abs + if take_abs: + df0[objectives] = df0[objectives].abs() + + # Scale objectives to feature_range + scaler = MinMaxScaler(feature_range=feature_range) + df_scaled = df0.copy() + df_scaled[objectives] = scaler.fit_transform(df_scaled[objectives]) + + # Invert "min" objectives so 1=best + for obj, direction in zip(objectives, direction_of_optimization): + if direction == "min": + df_scaled[obj] = 1.0 - df_scaled[obj] + + # Ensure color_by is in [0,1] if it's not among objectives + if color_by not in objectives: + tmp_scaler = MinMaxScaler(feature_range=feature_range) + df_scaled[color_by] = tmp_scaler.fit_transform(df_scaled[[color_by]]) + + # ----------------------- + # Cluster/bin axes to plot (PER AXIS) + # ----------------------- + rng = np.random.default_rng(random_state) + df_clustered = df_scaled.copy() + clustered_cols = [] + + for col in columns_to_plot: + if col not in df_clustered.columns: + raise KeyError(f"columns_to_plot contains '{col}' which is not in df") + + b = _bins_for(col) + if b < 2: + raise ValueError(f"bins for '{col}' must be >= 2 (got {b}).") + + edges = np.linspace(0.0, 1.0, b + 1) + centers = (edges[:-1] + edges[1:]) / 2.0 + + vals = df_clustered[col].to_numpy(dtype=float) + vals = np.clip(vals, 0.0, 1.0) + + idx = np.digitize(vals, edges, right=False) - 1 + idx = np.clip(idx, 0, len(centers) - 1) + snapped = centers[idx] + + if jitter and jitter > 0: + snapped = snapped + rng.uniform(-jitter, jitter, size=snapped.shape) + snapped = np.clip(snapped, 0.0, 1.0) + + new_col = f"{col}__clustered_{b}bins" + df_clustered[new_col] = snapped + clustered_cols.append(new_col) + + # ----------------------- + # Plot curved coordinates + # ----------------------- + data = df_clustered[clustered_cols].to_numpy(dtype=float) + x = np.arange(len(clustered_cols), dtype=float) + + cmap = LinearSegmentedColormap.from_list("temp_scale", list(custom_colors)) + norm = mcolors.Normalize( + vmin=float(df_clustered[color_by].min()), + vmax=float(df_clustered[color_by].max()), + ) + + fig, ax = plt.subplots(figsize=figsize) + + # vertical axes + for xi in x: + ax.vlines(xi, 0, 1, color="black", linewidth=0.8, alpha=0.35) + + highlight_set = set(highlight_indices or []) + + for row_i in range(len(df_clustered)): + y = data[row_i, :] + + verts = [(x[0], y[0])] + codes = [mpath.Path.MOVETO] + + for k in range(len(clustered_cols) - 1): + x0, y0 = x[k], y[k] + x1, y1 = x[k + 1], y[k + 1] + dx = x1 - x0 + + c1 = (x0 + curvature * dx, y0) + c2 = (x1 - curvature * dx, y1) + + verts.extend([c1, c2, (x1, y1)]) + codes.extend([mpath.Path.CURVE4, mpath.Path.CURVE4, mpath.Path.CURVE4]) + + path = mpath.Path(verts, codes) + + base_color = cmap(norm(float(df_clustered.iloc[row_i][color_by]))) + + orig_idx = int(df_clustered.iloc[row_i]["_orig_index"]) + is_hi = orig_idx in highlight_set + + lw = linewidth * (highlight_factor if is_hi else 1.0) + a = highlight_alpha if is_hi else alpha + + patch = PathPatch( + path, + facecolor="none", + edgecolor=base_color, + lw=lw, + alpha=a, + capstyle="round", + joinstyle="round", + ) + ax.add_patch(patch) + + ax.set_xlim(x[0] - 0.3, x[-1] + 0.3) + ax.set_ylim(0, 1) + ax.set_xticks(x) + ax.set_xticklabels(labels, rotation=x_rotation, ha="right") + ax.set_ylabel("Clustered (binned) value in [0,1] (after inversion for 'min')") + + if title: + ax.set_title(title) + + ax.spines["top"].set_visible(False) + ax.spines["right"].set_visible(False) + + plt.tight_layout() + plt.show() + + return df_scaled, df_clustered, fig, ax + + + + + +def plot_colorbar_standalone( + df: pd.DataFrame, + color_by: str, + custom_colors=("#d62728", "#ff7f0e", "#9ecae1", "#08519c"), + figsize=(1.5, 5), + label=None, + orientation="vertical", + title=None, +): + """ + Plots a standalone colorbar matching the one used in + curved_parallel_coordinates_clustered(). + + Parameters + ---------- + df : The SAME df you pass to curved_parallel_coordinates_clustered + (before any internal scaling — i.e. your original df). + color_by : Same value as used in the main plot. + custom_colors : Same tuple as used in the main plot. + figsize : Figure size for the colorbar figure. + label : Colorbar label. Defaults to the column name. + orientation : "vertical" or "horizontal". + title : Optional figure title. + """ + # --- Replicate exactly what the main function does --- + series = pd.to_numeric(df[color_by], errors="coerce").dropna() + + cmap = LinearSegmentedColormap.from_list("temp_scale", list(custom_colors)) + norm = mcolors.Normalize(vmin=float(series.min()), vmax=float(series.max())) + + # --- Standalone figure with a single colorbar --- + fig, ax = plt.subplots(figsize=figsize) + ax.set_visible(False) # hide the axes entirely + + sm = plt.cm.ScalarMappable(cmap=cmap, norm=norm) + sm.set_array([]) # required by matplotlib + + cbar = fig.colorbar( + sm, + ax=ax, + orientation=orientation, + fraction=1.0, # fill the whole figure + pad=0.0, + ) + cbar.set_label(label if label is not None else color_by, fontsize=12) + + if title: + fig.suptitle(title, fontsize=13) + + plt.tight_layout() + plt.show() + + return fig, cbar diff --git a/justice/welfare/social_welfare_function.py b/justice/welfare/social_welfare_function.py index 76a87fb..6c47d25 100644 --- a/justice/welfare/social_welfare_function.py +++ b/justice/welfare/social_welfare_function.py @@ -188,6 +188,48 @@ def calculate_state_disaggregated_welfare(self, consumption_per_capita, **kwargs welfare, ) + def calculate_spatially_disaggregated_welfare( + self, consumption_per_capita, **kwargs + ): + """ + This method calculates the welfare. + """ + # Use np.maximum instead of np.where to be more efficient + consumption_per_capita = np.maximum(consumption_per_capita, SMALL_NUMBER) + + # Aggregate the states dimension + states_aggregated_consumption_per_capita = self.states_aggregator( + consumption_per_capita, + self.climate_ensembles, + self.risk_aversion, + ) + + # Get the discount rate array + discount_rate = self.calculate_discount_rate( + pure_rate_of_social_time_preference=self.pure_rate_of_social_time_preference, + model_time_horizon=self.model_time_horizon, + timestep=self.timestep, + ) + + # TODO: Change that -1 later + # Calculate the welfare disaggregated temporally + spatially_disaggregated_welfare = np.zeros_like( + states_aggregated_consumption_per_capita + ) + + # If data is 3D, we need to apply the discount rate across the first axis (regions) + spatially_disaggregated_welfare = ( + states_aggregated_consumption_per_capita - 1 + ) * discount_rate[None, :] + + # Calculate the welfare by summing across the temporal axis + spatially_disaggregated_welfare = np.sum( + spatially_disaggregated_welfare, + axis=1, + ) + + return spatially_disaggregated_welfare + def calculate_stepwise_welfare(self, consumption_per_capita, timestep): """ This method calculates the welfare. diff --git a/poetry.lock b/poetry.lock index 0d39170..448ae60 100644 --- a/poetry.lock +++ b/poetry.lock @@ -7,6 +7,7 @@ description = "Easily measure timing and throughput of code blocks, with beautif optional = false python-versions = ">=3.7, <4" groups = ["main"] +markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "about-time-4.2.1.tar.gz", hash = "sha256:6a538862d33ce67d997429d14998310e1dbfda6cb7d9bbfbf799c4709847fece"}, {file = "about_time-4.2.1-py3-none-any.whl", hash = "sha256:8bbf4c75fe13cbd3d72f49a03b02c5c7dca32169b6d49117c257e7eb3eaee341"}, @@ -14,31 +15,33 @@ files = [ [[package]] name = "absl-py" -version = "2.3.0" +version = "2.4.0" description = "Abseil Python Common Libraries, see https://github.com/abseil/abseil-py." optional = false -python-versions = ">=3.8" +python-versions = ">=3.10" groups = ["main"] +markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ - {file = "absl_py-2.3.0-py3-none-any.whl", hash = "sha256:9824a48b654a306168f63e0d97714665f8490b8d89ec7bf2efc24bf67cf579b3"}, - {file = "absl_py-2.3.0.tar.gz", hash = "sha256:d96fda5c884f1b22178852f30ffa85766d50b99e00775ea626c23304f582fc4f"}, + {file = "absl_py-2.4.0-py3-none-any.whl", hash = "sha256:88476fd881ca8aab94ffa78b7b6c632a782ab3ba1cd19c9bd423abc4fb4cd28d"}, + {file = "absl_py-2.4.0.tar.gz", hash = "sha256:8c6af82722b35cf71e0f4d1d47dcaebfff286e27110a99fc359349b247dfb5d4"}, ] [[package]] name = "alive-progress" -version = "3.2.0" +version = "3.3.0" description = "A new kind of Progress Bar, with real-time throughput, ETA, and very cool animations!" optional = false python-versions = "<4,>=3.9" groups = ["main"] +markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ - {file = "alive-progress-3.2.0.tar.gz", hash = "sha256:ede29d046ff454fe56b941f686f89dd9389430c4a5b7658e445cb0b80e0e4deb"}, - {file = "alive_progress-3.2.0-py3-none-any.whl", hash = "sha256:0677929f8d3202572e9d142f08170b34dbbe256cc6d2afbf75ef187c7da964a8"}, + {file = "alive-progress-3.3.0.tar.gz", hash = "sha256:457dd2428b48dacd49854022a46448d236a48f1b7277874071c39395307e830c"}, + {file = "alive_progress-3.3.0-py3-none-any.whl", hash = "sha256:63dd33bb94cde15ad9e5b666dbba8fedf71b72a4935d6fb9a92931e69402c9ff"}, ] [package.dependencies] about-time = "4.2.1" -grapheme = "0.6.0" +graphemeu = "0.7.2" [[package]] name = "annotated-types" @@ -47,6 +50,7 @@ description = "Reusable constraint types to use with typing.Annotated" optional = false python-versions = ">=3.8" groups = ["main"] +markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53"}, {file = "annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89"}, @@ -59,7 +63,7 @@ description = "Disable App Nap on macOS >= 10.9" optional = false python-versions = ">=3.6" groups = ["main"] -markers = "platform_system == \"Darwin\"" +markers = "(sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\") and platform_system == \"Darwin\"" files = [ {file = "appnope-0.1.4-py2.py3-none-any.whl", hash = "sha256:502575ee11cd7a28c0205f379b525beefebab9d161b7c964670864014ed7213c"}, {file = "appnope-0.1.4.tar.gz", hash = "sha256:1de3860566df9caf38f01f86f65e0e13e379af54f9e4bee1e66b48f2efffd1ee"}, @@ -67,19 +71,20 @@ files = [ [[package]] name = "asttokens" -version = "3.0.0" +version = "3.0.1" description = "Annotate AST trees with source code positions" optional = false python-versions = ">=3.8" groups = ["main"] +markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ - {file = "asttokens-3.0.0-py3-none-any.whl", hash = "sha256:e3078351a059199dd5138cb1c706e6430c05eff2ff136af5eb4790f9d28932e2"}, - {file = "asttokens-3.0.0.tar.gz", hash = "sha256:0dcd8baa8d62b0c1d118b399b2ddba3c4aff271d0d7a9e0d4c1681c79035bbc7"}, + {file = "asttokens-3.0.1-py3-none-any.whl", hash = "sha256:15a3ebc0f43c2d0a50eeafea25e19046c68398e487b9f1f5b517f7c0f40f976a"}, + {file = "asttokens-3.0.1.tar.gz", hash = "sha256:71a4ee5de0bde6a31d64f6b13f2293ac190344478f081c3d1bccfcf5eacb0cb7"}, ] [package.extras] -astroid = ["astroid (>=2,<4)"] -test = ["astroid (>=2,<4)", "pytest", "pytest-cov", "pytest-xdist"] +astroid = ["astroid (>=2,<5)"] +test = ["astroid (>=2,<5)", "pytest (<9.0)", "pytest-cov", "pytest-xdist"] [[package]] name = "autograd" @@ -88,6 +93,7 @@ description = "Efficiently computes derivatives of NumPy code." optional = false python-versions = ">=3.9" groups = ["main"] +markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "autograd-1.8.0-py3-none-any.whl", hash = "sha256:4ab9084294f814cf56c280adbe19612546a35574d67c574b04933c7d2ecb7d78"}, {file = "autograd-1.8.0.tar.gz", hash = "sha256:107374ded5b09fc8643ac925348c0369e7b0e73bbed9565ffd61b8fd04425683"}, @@ -107,6 +113,7 @@ description = "Python Box2D" optional = false python-versions = "*" groups = ["main"] +markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "box2d-py-2.3.5.tar.gz", hash = "sha256:b37dc38844bcd7def48a97111d2b082e4f81cca3cece7460feb3eacda0da2207"}, {file = "box2d_py-2.3.5-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:287aa54005c0644b47bf7ad72966e4068d66e56bcf8458f5b4a653ffe42a2618"}, @@ -117,196 +124,253 @@ files = [ [[package]] name = "certifi" -version = "2025.1.31" +version = "2026.2.25" description = "Python package for providing Mozilla's CA Bundle." optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" groups = ["main"] +markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ - {file = "certifi-2025.1.31-py3-none-any.whl", hash = "sha256:ca78db4565a652026a4db2bcdf68f2fb589ea80d0be70e03929ed730746b84fe"}, - {file = "certifi-2025.1.31.tar.gz", hash = "sha256:3d5da6925056f6f18f119200434a4780a94263f10d1c21d032a6f6b2baa20651"}, + {file = "certifi-2026.2.25-py3-none-any.whl", hash = "sha256:027692e4402ad994f1c42e52a4997a9763c646b73e4096e4d5d6db8af1d6f0fa"}, + {file = "certifi-2026.2.25.tar.gz", hash = "sha256:e887ab5cee78ea814d3472169153c2d12cd43b14bd03329a39a9c6e2e80bfba7"}, ] [[package]] name = "cffi" -version = "1.17.1" +version = "2.0.0" description = "Foreign Function Interface for Python calling C code." optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" groups = ["main"] -files = [ - {file = "cffi-1.17.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:df8b1c11f177bc2313ec4b2d46baec87a5f3e71fc8b45dab2ee7cae86d9aba14"}, - {file = "cffi-1.17.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8f2cdc858323644ab277e9bb925ad72ae0e67f69e804f4898c070998d50b1a67"}, - {file = "cffi-1.17.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:edae79245293e15384b51f88b00613ba9f7198016a5948b5dddf4917d4d26382"}, - {file = "cffi-1.17.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:45398b671ac6d70e67da8e4224a065cec6a93541bb7aebe1b198a61b58c7b702"}, - {file = "cffi-1.17.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ad9413ccdeda48c5afdae7e4fa2192157e991ff761e7ab8fdd8926f40b160cc3"}, - {file = "cffi-1.17.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5da5719280082ac6bd9aa7becb3938dc9f9cbd57fac7d2871717b1feb0902ab6"}, - {file = "cffi-1.17.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2bb1a08b8008b281856e5971307cc386a8e9c5b625ac297e853d36da6efe9c17"}, - {file = "cffi-1.17.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:045d61c734659cc045141be4bae381a41d89b741f795af1dd018bfb532fd0df8"}, - {file = "cffi-1.17.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:6883e737d7d9e4899a8a695e00ec36bd4e5e4f18fabe0aca0efe0a4b44cdb13e"}, - {file = "cffi-1.17.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:6b8b4a92e1c65048ff98cfe1f735ef8f1ceb72e3d5f0c25fdb12087a23da22be"}, - {file = "cffi-1.17.1-cp310-cp310-win32.whl", hash = "sha256:c9c3d058ebabb74db66e431095118094d06abf53284d9c81f27300d0e0d8bc7c"}, - {file = "cffi-1.17.1-cp310-cp310-win_amd64.whl", hash = "sha256:0f048dcf80db46f0098ccac01132761580d28e28bc0f78ae0d58048063317e15"}, - {file = "cffi-1.17.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a45e3c6913c5b87b3ff120dcdc03f6131fa0065027d0ed7ee6190736a74cd401"}, - {file = "cffi-1.17.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:30c5e0cb5ae493c04c8b42916e52ca38079f1b235c2f8ae5f4527b963c401caf"}, - {file = "cffi-1.17.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f75c7ab1f9e4aca5414ed4d8e5c0e303a34f4421f8a0d47a4d019ceff0ab6af4"}, - {file = "cffi-1.17.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a1ed2dd2972641495a3ec98445e09766f077aee98a1c896dcb4ad0d303628e41"}, - {file = "cffi-1.17.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:46bf43160c1a35f7ec506d254e5c890f3c03648a4dbac12d624e4490a7046cd1"}, - {file = "cffi-1.17.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a24ed04c8ffd54b0729c07cee15a81d964e6fee0e3d4d342a27b020d22959dc6"}, - {file = "cffi-1.17.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:610faea79c43e44c71e1ec53a554553fa22321b65fae24889706c0a84d4ad86d"}, - {file = "cffi-1.17.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:a9b15d491f3ad5d692e11f6b71f7857e7835eb677955c00cc0aefcd0669adaf6"}, - {file = "cffi-1.17.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:de2ea4b5833625383e464549fec1bc395c1bdeeb5f25c4a3a82b5a8c756ec22f"}, - {file = "cffi-1.17.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:fc48c783f9c87e60831201f2cce7f3b2e4846bf4d8728eabe54d60700b318a0b"}, - {file = "cffi-1.17.1-cp311-cp311-win32.whl", hash = "sha256:85a950a4ac9c359340d5963966e3e0a94a676bd6245a4b55bc43949eee26a655"}, - {file = "cffi-1.17.1-cp311-cp311-win_amd64.whl", hash = "sha256:caaf0640ef5f5517f49bc275eca1406b0ffa6aa184892812030f04c2abf589a0"}, - {file = "cffi-1.17.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:805b4371bf7197c329fcb3ead37e710d1bca9da5d583f5073b799d5c5bd1eee4"}, - {file = "cffi-1.17.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:733e99bc2df47476e3848417c5a4540522f234dfd4ef3ab7fafdf555b082ec0c"}, - {file = "cffi-1.17.1-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1257bdabf294dceb59f5e70c64a3e2f462c30c7ad68092d01bbbfb1c16b1ba36"}, - {file = "cffi-1.17.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da95af8214998d77a98cc14e3a3bd00aa191526343078b530ceb0bd710fb48a5"}, - {file = "cffi-1.17.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d63afe322132c194cf832bfec0dc69a99fb9bb6bbd550f161a49e9e855cc78ff"}, - {file = "cffi-1.17.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f79fc4fc25f1c8698ff97788206bb3c2598949bfe0fef03d299eb1b5356ada99"}, - {file = "cffi-1.17.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b62ce867176a75d03a665bad002af8e6d54644fad99a3c70905c543130e39d93"}, - {file = "cffi-1.17.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:386c8bf53c502fff58903061338ce4f4950cbdcb23e2902d86c0f722b786bbe3"}, - {file = "cffi-1.17.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4ceb10419a9adf4460ea14cfd6bc43d08701f0835e979bf821052f1805850fe8"}, - {file = "cffi-1.17.1-cp312-cp312-win32.whl", hash = "sha256:a08d7e755f8ed21095a310a693525137cfe756ce62d066e53f502a83dc550f65"}, - {file = "cffi-1.17.1-cp312-cp312-win_amd64.whl", hash = "sha256:51392eae71afec0d0c8fb1a53b204dbb3bcabcb3c9b807eedf3e1e6ccf2de903"}, - {file = "cffi-1.17.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f3a2b4222ce6b60e2e8b337bb9596923045681d71e5a082783484d845390938e"}, - {file = "cffi-1.17.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:0984a4925a435b1da406122d4d7968dd861c1385afe3b45ba82b750f229811e2"}, - {file = "cffi-1.17.1-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d01b12eeeb4427d3110de311e1774046ad344f5b1a7403101878976ecd7a10f3"}, - {file = "cffi-1.17.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:706510fe141c86a69c8ddc029c7910003a17353970cff3b904ff0686a5927683"}, - {file = "cffi-1.17.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:de55b766c7aa2e2a3092c51e0483d700341182f08e67c63630d5b6f200bb28e5"}, - {file = "cffi-1.17.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c59d6e989d07460165cc5ad3c61f9fd8f1b4796eacbd81cee78957842b834af4"}, - {file = "cffi-1.17.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd398dbc6773384a17fe0d3e7eeb8d1a21c2200473ee6806bb5e6a8e62bb73dd"}, - {file = "cffi-1.17.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:3edc8d958eb099c634dace3c7e16560ae474aa3803a5df240542b305d14e14ed"}, - {file = "cffi-1.17.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:72e72408cad3d5419375fc87d289076ee319835bdfa2caad331e377589aebba9"}, - {file = "cffi-1.17.1-cp313-cp313-win32.whl", hash = "sha256:e03eab0a8677fa80d646b5ddece1cbeaf556c313dcfac435ba11f107ba117b5d"}, - {file = "cffi-1.17.1-cp313-cp313-win_amd64.whl", hash = "sha256:f6a16c31041f09ead72d69f583767292f750d24913dadacf5756b966aacb3f1a"}, - {file = "cffi-1.17.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:636062ea65bd0195bc012fea9321aca499c0504409f413dc88af450b57ffd03b"}, - {file = "cffi-1.17.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c7eac2ef9b63c79431bc4b25f1cd649d7f061a28808cbc6c47b534bd789ef964"}, - {file = "cffi-1.17.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e221cf152cff04059d011ee126477f0d9588303eb57e88923578ace7baad17f9"}, - {file = "cffi-1.17.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:31000ec67d4221a71bd3f67df918b1f88f676f1c3b535a7eb473255fdc0b83fc"}, - {file = "cffi-1.17.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6f17be4345073b0a7b8ea599688f692ac3ef23ce28e5df79c04de519dbc4912c"}, - {file = "cffi-1.17.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0e2b1fac190ae3ebfe37b979cc1ce69c81f4e4fe5746bb401dca63a9062cdaf1"}, - {file = "cffi-1.17.1-cp38-cp38-win32.whl", hash = "sha256:7596d6620d3fa590f677e9ee430df2958d2d6d6de2feeae5b20e82c00b76fbf8"}, - {file = "cffi-1.17.1-cp38-cp38-win_amd64.whl", hash = "sha256:78122be759c3f8a014ce010908ae03364d00a1f81ab5c7f4a7a5120607ea56e1"}, - {file = "cffi-1.17.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b2ab587605f4ba0bf81dc0cb08a41bd1c0a5906bd59243d56bad7668a6fc6c16"}, - {file = "cffi-1.17.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:28b16024becceed8c6dfbc75629e27788d8a3f9030691a1dbf9821a128b22c36"}, - {file = "cffi-1.17.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1d599671f396c4723d016dbddb72fe8e0397082b0a77a4fab8028923bec050e8"}, - {file = "cffi-1.17.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ca74b8dbe6e8e8263c0ffd60277de77dcee6c837a3d0881d8c1ead7268c9e576"}, - {file = "cffi-1.17.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f7f5baafcc48261359e14bcd6d9bff6d4b28d9103847c9e136694cb0501aef87"}, - {file = "cffi-1.17.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:98e3969bcff97cae1b2def8ba499ea3d6f31ddfdb7635374834cf89a1a08ecf0"}, - {file = "cffi-1.17.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cdf5ce3acdfd1661132f2a9c19cac174758dc2352bfe37d98aa7512c6b7178b3"}, - {file = "cffi-1.17.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:9755e4345d1ec879e3849e62222a18c7174d65a6a92d5b346b1863912168b595"}, - {file = "cffi-1.17.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:f1e22e8c4419538cb197e4dd60acc919d7696e5ef98ee4da4e01d3f8cfa4cc5a"}, - {file = "cffi-1.17.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:c03e868a0b3bc35839ba98e74211ed2b05d2119be4e8a0f224fba9384f1fe02e"}, - {file = "cffi-1.17.1-cp39-cp39-win32.whl", hash = "sha256:e31ae45bc2e29f6b2abd0de1cc3b9d5205aa847cafaecb8af1476a609a2f6eb7"}, - {file = "cffi-1.17.1-cp39-cp39-win_amd64.whl", hash = "sha256:d016c76bdd850f3c626af19b0542c9677ba156e4ee4fccfdd7848803533ef662"}, - {file = "cffi-1.17.1.tar.gz", hash = "sha256:1c39c6016c32bc48dd54561950ebd6836e1670f2ae46128f67cf49e789c52824"}, +markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" +files = [ + {file = "cffi-2.0.0-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:0cf2d91ecc3fcc0625c2c530fe004f82c110405f101548512cce44322fa8ac44"}, + {file = "cffi-2.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f73b96c41e3b2adedc34a7356e64c8eb96e03a3782b535e043a986276ce12a49"}, + {file = "cffi-2.0.0-cp310-cp310-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:53f77cbe57044e88bbd5ed26ac1d0514d2acf0591dd6bb02a3ae37f76811b80c"}, + {file = "cffi-2.0.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:3e837e369566884707ddaf85fc1744b47575005c0a229de3327f8f9a20f4efeb"}, + {file = "cffi-2.0.0-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:5eda85d6d1879e692d546a078b44251cdd08dd1cfb98dfb77b670c97cee49ea0"}, + {file = "cffi-2.0.0-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:9332088d75dc3241c702d852d4671613136d90fa6881da7d770a483fd05248b4"}, + {file = "cffi-2.0.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:fc7de24befaeae77ba923797c7c87834c73648a05a4bde34b3b7e5588973a453"}, + {file = "cffi-2.0.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:cf364028c016c03078a23b503f02058f1814320a56ad535686f90565636a9495"}, + {file = "cffi-2.0.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e11e82b744887154b182fd3e7e8512418446501191994dbf9c9fc1f32cc8efd5"}, + {file = "cffi-2.0.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:8ea985900c5c95ce9db1745f7933eeef5d314f0565b27625d9a10ec9881e1bfb"}, + {file = "cffi-2.0.0-cp310-cp310-win32.whl", hash = "sha256:1f72fb8906754ac8a2cc3f9f5aaa298070652a0ffae577e0ea9bd480dc3c931a"}, + {file = "cffi-2.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:b18a3ed7d5b3bd8d9ef7a8cb226502c6bf8308df1525e1cc676c3680e7176739"}, + {file = "cffi-2.0.0-cp311-cp311-macosx_10_13_x86_64.whl", hash = "sha256:b4c854ef3adc177950a8dfc81a86f5115d2abd545751a304c5bcf2c2c7283cfe"}, + {file = "cffi-2.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2de9a304e27f7596cd03d16f1b7c72219bd944e99cc52b84d0145aefb07cbd3c"}, + {file = "cffi-2.0.0-cp311-cp311-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:baf5215e0ab74c16e2dd324e8ec067ef59e41125d3eade2b863d294fd5035c92"}, + {file = "cffi-2.0.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:730cacb21e1bdff3ce90babf007d0a0917cc3e6492f336c2f0134101e0944f93"}, + {file = "cffi-2.0.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:6824f87845e3396029f3820c206e459ccc91760e8fa24422f8b0c3d1731cbec5"}, + {file = "cffi-2.0.0-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:9de40a7b0323d889cf8d23d1ef214f565ab154443c42737dfe52ff82cf857664"}, + {file = "cffi-2.0.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:8941aaadaf67246224cee8c3803777eed332a19d909b47e29c9842ef1e79ac26"}, + {file = "cffi-2.0.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:a05d0c237b3349096d3981b727493e22147f934b20f6f125a3eba8f994bec4a9"}, + {file = "cffi-2.0.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:94698a9c5f91f9d138526b48fe26a199609544591f859c870d477351dc7b2414"}, + {file = "cffi-2.0.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:5fed36fccc0612a53f1d4d9a816b50a36702c28a2aa880cb8a122b3466638743"}, + {file = "cffi-2.0.0-cp311-cp311-win32.whl", hash = "sha256:c649e3a33450ec82378822b3dad03cc228b8f5963c0c12fc3b1e0ab940f768a5"}, + {file = "cffi-2.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:66f011380d0e49ed280c789fbd08ff0d40968ee7b665575489afa95c98196ab5"}, + {file = "cffi-2.0.0-cp311-cp311-win_arm64.whl", hash = "sha256:c6638687455baf640e37344fe26d37c404db8b80d037c3d29f58fe8d1c3b194d"}, + {file = "cffi-2.0.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:6d02d6655b0e54f54c4ef0b94eb6be0607b70853c45ce98bd278dc7de718be5d"}, + {file = "cffi-2.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8eca2a813c1cb7ad4fb74d368c2ffbbb4789d377ee5bb8df98373c2cc0dee76c"}, + {file = "cffi-2.0.0-cp312-cp312-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:21d1152871b019407d8ac3985f6775c079416c282e431a4da6afe7aefd2bccbe"}, + {file = "cffi-2.0.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:b21e08af67b8a103c71a250401c78d5e0893beff75e28c53c98f4de42f774062"}, + {file = "cffi-2.0.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:1e3a615586f05fc4065a8b22b8152f0c1b00cdbc60596d187c2a74f9e3036e4e"}, + {file = "cffi-2.0.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:81afed14892743bbe14dacb9e36d9e0e504cd204e0b165062c488942b9718037"}, + {file = "cffi-2.0.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:3e17ed538242334bf70832644a32a7aae3d83b57567f9fd60a26257e992b79ba"}, + {file = "cffi-2.0.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3925dd22fa2b7699ed2617149842d2e6adde22b262fcbfada50e3d195e4b3a94"}, + {file = "cffi-2.0.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:2c8f814d84194c9ea681642fd164267891702542f028a15fc97d4674b6206187"}, + {file = "cffi-2.0.0-cp312-cp312-win32.whl", hash = "sha256:da902562c3e9c550df360bfa53c035b2f241fed6d9aef119048073680ace4a18"}, + {file = "cffi-2.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:da68248800ad6320861f129cd9c1bf96ca849a2771a59e0344e88681905916f5"}, + {file = "cffi-2.0.0-cp312-cp312-win_arm64.whl", hash = "sha256:4671d9dd5ec934cb9a73e7ee9676f9362aba54f7f34910956b84d727b0d73fb6"}, + {file = "cffi-2.0.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:00bdf7acc5f795150faa6957054fbbca2439db2f775ce831222b66f192f03beb"}, + {file = "cffi-2.0.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:45d5e886156860dc35862657e1494b9bae8dfa63bf56796f2fb56e1679fc0bca"}, + {file = "cffi-2.0.0-cp313-cp313-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:07b271772c100085dd28b74fa0cd81c8fb1a3ba18b21e03d7c27f3436a10606b"}, + {file = "cffi-2.0.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d48a880098c96020b02d5a1f7d9251308510ce8858940e6fa99ece33f610838b"}, + {file = "cffi-2.0.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:f93fd8e5c8c0a4aa1f424d6173f14a892044054871c771f8566e4008eaa359d2"}, + {file = "cffi-2.0.0-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:dd4f05f54a52fb558f1ba9f528228066954fee3ebe629fc1660d874d040ae5a3"}, + {file = "cffi-2.0.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:c8d3b5532fc71b7a77c09192b4a5a200ea992702734a2e9279a37f2478236f26"}, + {file = "cffi-2.0.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:d9b29c1f0ae438d5ee9acb31cadee00a58c46cc9c0b2f9038c6b0b3470877a8c"}, + {file = "cffi-2.0.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6d50360be4546678fc1b79ffe7a66265e28667840010348dd69a314145807a1b"}, + {file = "cffi-2.0.0-cp313-cp313-win32.whl", hash = "sha256:74a03b9698e198d47562765773b4a8309919089150a0bb17d829ad7b44b60d27"}, + {file = "cffi-2.0.0-cp313-cp313-win_amd64.whl", hash = "sha256:19f705ada2530c1167abacb171925dd886168931e0a7b78f5bffcae5c6b5be75"}, + {file = "cffi-2.0.0-cp313-cp313-win_arm64.whl", hash = "sha256:256f80b80ca3853f90c21b23ee78cd008713787b1b1e93eae9f3d6a7134abd91"}, + {file = "cffi-2.0.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:fc33c5141b55ed366cfaad382df24fe7dcbc686de5be719b207bb248e3053dc5"}, + {file = "cffi-2.0.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c654de545946e0db659b3400168c9ad31b5d29593291482c43e3564effbcee13"}, + {file = "cffi-2.0.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:24b6f81f1983e6df8db3adc38562c83f7d4a0c36162885ec7f7b77c7dcbec97b"}, + {file = "cffi-2.0.0-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:12873ca6cb9b0f0d3a0da705d6086fe911591737a59f28b7936bdfed27c0d47c"}, + {file = "cffi-2.0.0-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:d9b97165e8aed9272a6bb17c01e3cc5871a594a446ebedc996e2397a1c1ea8ef"}, + {file = "cffi-2.0.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:afb8db5439b81cf9c9d0c80404b60c3cc9c3add93e114dcae767f1477cb53775"}, + {file = "cffi-2.0.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:737fe7d37e1a1bffe70bd5754ea763a62a066dc5913ca57e957824b72a85e205"}, + {file = "cffi-2.0.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:38100abb9d1b1435bc4cc340bb4489635dc2f0da7456590877030c9b3d40b0c1"}, + {file = "cffi-2.0.0-cp314-cp314-win32.whl", hash = "sha256:087067fa8953339c723661eda6b54bc98c5625757ea62e95eb4898ad5e776e9f"}, + {file = "cffi-2.0.0-cp314-cp314-win_amd64.whl", hash = "sha256:203a48d1fb583fc7d78a4c6655692963b860a417c0528492a6bc21f1aaefab25"}, + {file = "cffi-2.0.0-cp314-cp314-win_arm64.whl", hash = "sha256:dbd5c7a25a7cb98f5ca55d258b103a2054f859a46ae11aaf23134f9cc0d356ad"}, + {file = "cffi-2.0.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:9a67fc9e8eb39039280526379fb3a70023d77caec1852002b4da7e8b270c4dd9"}, + {file = "cffi-2.0.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:7a66c7204d8869299919db4d5069a82f1561581af12b11b3c9f48c584eb8743d"}, + {file = "cffi-2.0.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:7cc09976e8b56f8cebd752f7113ad07752461f48a58cbba644139015ac24954c"}, + {file = "cffi-2.0.0-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:92b68146a71df78564e4ef48af17551a5ddd142e5190cdf2c5624d0c3ff5b2e8"}, + {file = "cffi-2.0.0-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:b1e74d11748e7e98e2f426ab176d4ed720a64412b6a15054378afdb71e0f37dc"}, + {file = "cffi-2.0.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:28a3a209b96630bca57cce802da70c266eb08c6e97e5afd61a75611ee6c64592"}, + {file = "cffi-2.0.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:7553fb2090d71822f02c629afe6042c299edf91ba1bf94951165613553984512"}, + {file = "cffi-2.0.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:6c6c373cfc5c83a975506110d17457138c8c63016b563cc9ed6e056a82f13ce4"}, + {file = "cffi-2.0.0-cp314-cp314t-win32.whl", hash = "sha256:1fc9ea04857caf665289b7a75923f2c6ed559b8298a1b8c49e59f7dd95c8481e"}, + {file = "cffi-2.0.0-cp314-cp314t-win_amd64.whl", hash = "sha256:d68b6cef7827e8641e8ef16f4494edda8b36104d79773a334beaa1e3521430f6"}, + {file = "cffi-2.0.0-cp314-cp314t-win_arm64.whl", hash = "sha256:0a1527a803f0a659de1af2e1fd700213caba79377e27e4693648c2923da066f9"}, + {file = "cffi-2.0.0-cp39-cp39-macosx_10_13_x86_64.whl", hash = "sha256:fe562eb1a64e67dd297ccc4f5addea2501664954f2692b69a76449ec7913ecbf"}, + {file = "cffi-2.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:de8dad4425a6ca6e4e5e297b27b5c824ecc7581910bf9aee86cb6835e6812aa7"}, + {file = "cffi-2.0.0-cp39-cp39-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:4647afc2f90d1ddd33441e5b0e85b16b12ddec4fca55f0d9671fef036ecca27c"}, + {file = "cffi-2.0.0-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:3f4d46d8b35698056ec29bca21546e1551a205058ae1a181d871e278b0b28165"}, + {file = "cffi-2.0.0-cp39-cp39-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:e6e73b9e02893c764e7e8d5bb5ce277f1a009cd5243f8228f75f842bf937c534"}, + {file = "cffi-2.0.0-cp39-cp39-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:cb527a79772e5ef98fb1d700678fe031e353e765d1ca2d409c92263c6d43e09f"}, + {file = "cffi-2.0.0-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:61d028e90346df14fedc3d1e5441df818d095f3b87d286825dfcbd6459b7ef63"}, + {file = "cffi-2.0.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:0f6084a0ea23d05d20c3edcda20c3d006f9b6f3fefeac38f59262e10cef47ee2"}, + {file = "cffi-2.0.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:1cd13c99ce269b3ed80b417dcd591415d3372bcac067009b6e0f59c7d4015e65"}, + {file = "cffi-2.0.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:89472c9762729b5ae1ad974b777416bfda4ac5642423fa93bd57a09204712322"}, + {file = "cffi-2.0.0-cp39-cp39-win32.whl", hash = "sha256:2081580ebb843f759b9f617314a24ed5738c51d2aee65d31e02f6f7a2b97707a"}, + {file = "cffi-2.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:b882b3df248017dba09d6b16defe9b5c407fe32fc7c65a9c69798e6175601be9"}, + {file = "cffi-2.0.0.tar.gz", hash = "sha256:44d1b5909021139fe36001ae048dbdde8214afa20200eda0f64c068cac5d5529"}, ] [package.dependencies] -pycparser = "*" +pycparser = {version = "*", markers = "implementation_name != \"PyPy\""} [[package]] name = "charset-normalizer" -version = "3.4.1" +version = "3.4.6" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." optional = false python-versions = ">=3.7" groups = ["main"] -files = [ - {file = "charset_normalizer-3.4.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:91b36a978b5ae0ee86c394f5a54d6ef44db1de0815eb43de826d41d21e4af3de"}, - {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7461baadb4dc00fd9e0acbe254e3d7d2112e7f92ced2adc96e54ef6501c5f176"}, - {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e218488cd232553829be0664c2292d3af2eeeb94b32bea483cf79ac6a694e037"}, - {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:80ed5e856eb7f30115aaf94e4a08114ccc8813e6ed1b5efa74f9f82e8509858f"}, - {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b010a7a4fd316c3c484d482922d13044979e78d1861f0e0650423144c616a46a"}, - {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4532bff1b8421fd0a320463030c7520f56a79c9024a4e88f01c537316019005a"}, - {file = "charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:d973f03c0cb71c5ed99037b870f2be986c3c05e63622c017ea9816881d2dd247"}, - {file = "charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:3a3bd0dcd373514dcec91c411ddb9632c0d7d92aed7093b8c3bbb6d69ca74408"}, - {file = "charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:d9c3cdf5390dcd29aa8056d13e8e99526cda0305acc038b96b30352aff5ff2bb"}, - {file = "charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:2bdfe3ac2e1bbe5b59a1a63721eb3b95fc9b6817ae4a46debbb4e11f6232428d"}, - {file = "charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:eab677309cdb30d047996b36d34caeda1dc91149e4fdca0b1a039b3f79d9a807"}, - {file = "charset_normalizer-3.4.1-cp310-cp310-win32.whl", hash = "sha256:c0429126cf75e16c4f0ad00ee0eae4242dc652290f940152ca8c75c3a4b6ee8f"}, - {file = "charset_normalizer-3.4.1-cp310-cp310-win_amd64.whl", hash = "sha256:9f0b8b1c6d84c8034a44893aba5e767bf9c7a211e313a9605d9c617d7083829f"}, - {file = "charset_normalizer-3.4.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:8bfa33f4f2672964266e940dd22a195989ba31669bd84629f05fab3ef4e2d125"}, - {file = "charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:28bf57629c75e810b6ae989f03c0828d64d6b26a5e205535585f96093e405ed1"}, - {file = "charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f08ff5e948271dc7e18a35641d2f11a4cd8dfd5634f55228b691e62b37125eb3"}, - {file = "charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:234ac59ea147c59ee4da87a0c0f098e9c8d169f4dc2a159ef720f1a61bbe27cd"}, - {file = "charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd4ec41f914fa74ad1b8304bbc634b3de73d2a0889bd32076342a573e0779e00"}, - {file = "charset_normalizer-3.4.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eea6ee1db730b3483adf394ea72f808b6e18cf3cb6454b4d86e04fa8c4327a12"}, - {file = "charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c96836c97b1238e9c9e3fe90844c947d5afbf4f4c92762679acfe19927d81d77"}, - {file = "charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:4d86f7aff21ee58f26dcf5ae81a9addbd914115cdebcbb2217e4f0ed8982e146"}, - {file = "charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:09b5e6733cbd160dcc09589227187e242a30a49ca5cefa5a7edd3f9d19ed53fd"}, - {file = "charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:5777ee0881f9499ed0f71cc82cf873d9a0ca8af166dfa0af8ec4e675b7df48e6"}, - {file = "charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:237bdbe6159cff53b4f24f397d43c6336c6b0b42affbe857970cefbb620911c8"}, - {file = "charset_normalizer-3.4.1-cp311-cp311-win32.whl", hash = "sha256:8417cb1f36cc0bc7eaba8ccb0e04d55f0ee52df06df3ad55259b9a323555fc8b"}, - {file = "charset_normalizer-3.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:d7f50a1f8c450f3925cb367d011448c39239bb3eb4117c36a6d354794de4ce76"}, - {file = "charset_normalizer-3.4.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:73d94b58ec7fecbc7366247d3b0b10a21681004153238750bb67bd9012414545"}, - {file = "charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dad3e487649f498dd991eeb901125411559b22e8d7ab25d3aeb1af367df5efd7"}, - {file = "charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c30197aa96e8eed02200a83fba2657b4c3acd0f0aa4bdc9f6c1af8e8962e0757"}, - {file = "charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2369eea1ee4a7610a860d88f268eb39b95cb588acd7235e02fd5a5601773d4fa"}, - {file = "charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc2722592d8998c870fa4e290c2eec2c1569b87fe58618e67d38b4665dfa680d"}, - {file = "charset_normalizer-3.4.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ffc9202a29ab3920fa812879e95a9e78b2465fd10be7fcbd042899695d75e616"}, - {file = "charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:804a4d582ba6e5b747c625bf1255e6b1507465494a40a2130978bda7b932c90b"}, - {file = "charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:0f55e69f030f7163dffe9fd0752b32f070566451afe180f99dbeeb81f511ad8d"}, - {file = "charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:c4c3e6da02df6fa1410a7680bd3f63d4f710232d3139089536310d027950696a"}, - {file = "charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:5df196eb874dae23dcfb968c83d4f8fdccb333330fe1fc278ac5ceeb101003a9"}, - {file = "charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e358e64305fe12299a08e08978f51fc21fac060dcfcddd95453eabe5b93ed0e1"}, - {file = "charset_normalizer-3.4.1-cp312-cp312-win32.whl", hash = "sha256:9b23ca7ef998bc739bf6ffc077c2116917eabcc901f88da1b9856b210ef63f35"}, - {file = "charset_normalizer-3.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:6ff8a4a60c227ad87030d76e99cd1698345d4491638dfa6673027c48b3cd395f"}, - {file = "charset_normalizer-3.4.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:aabfa34badd18f1da5ec1bc2715cadc8dca465868a4e73a0173466b688f29dda"}, - {file = "charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22e14b5d70560b8dd51ec22863f370d1e595ac3d024cb8ad7d308b4cd95f8313"}, - {file = "charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8436c508b408b82d87dc5f62496973a1805cd46727c34440b0d29d8a2f50a6c9"}, - {file = "charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2d074908e1aecee37a7635990b2c6d504cd4766c7bc9fc86d63f9c09af3fa11b"}, - {file = "charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:955f8851919303c92343d2f66165294848d57e9bba6cf6e3625485a70a038d11"}, - {file = "charset_normalizer-3.4.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:44ecbf16649486d4aebafeaa7ec4c9fed8b88101f4dd612dcaf65d5e815f837f"}, - {file = "charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:0924e81d3d5e70f8126529951dac65c1010cdf117bb75eb02dd12339b57749dd"}, - {file = "charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:2967f74ad52c3b98de4c3b32e1a44e32975e008a9cd2a8cc8966d6a5218c5cb2"}, - {file = "charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:c75cb2a3e389853835e84a2d8fb2b81a10645b503eca9bcb98df6b5a43eb8886"}, - {file = "charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:09b26ae6b1abf0d27570633b2b078a2a20419c99d66fb2823173d73f188ce601"}, - {file = "charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:fa88b843d6e211393a37219e6a1c1df99d35e8fd90446f1118f4216e307e48cd"}, - {file = "charset_normalizer-3.4.1-cp313-cp313-win32.whl", hash = "sha256:eb8178fe3dba6450a3e024e95ac49ed3400e506fd4e9e5c32d30adda88cbd407"}, - {file = "charset_normalizer-3.4.1-cp313-cp313-win_amd64.whl", hash = "sha256:b1ac5992a838106edb89654e0aebfc24f5848ae2547d22c2c3f66454daa11971"}, - {file = "charset_normalizer-3.4.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f30bf9fd9be89ecb2360c7d94a711f00c09b976258846efe40db3d05828e8089"}, - {file = "charset_normalizer-3.4.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:97f68b8d6831127e4787ad15e6757232e14e12060bec17091b85eb1486b91d8d"}, - {file = "charset_normalizer-3.4.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7974a0b5ecd505609e3b19742b60cee7aa2aa2fb3151bc917e6e2646d7667dcf"}, - {file = "charset_normalizer-3.4.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc54db6c8593ef7d4b2a331b58653356cf04f67c960f584edb7c3d8c97e8f39e"}, - {file = "charset_normalizer-3.4.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:311f30128d7d333eebd7896965bfcfbd0065f1716ec92bd5638d7748eb6f936a"}, - {file = "charset_normalizer-3.4.1-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:7d053096f67cd1241601111b698f5cad775f97ab25d81567d3f59219b5f1adbd"}, - {file = "charset_normalizer-3.4.1-cp37-cp37m-musllinux_1_2_i686.whl", hash = "sha256:807f52c1f798eef6cf26beb819eeb8819b1622ddfeef9d0977a8502d4db6d534"}, - {file = "charset_normalizer-3.4.1-cp37-cp37m-musllinux_1_2_ppc64le.whl", hash = "sha256:dccbe65bd2f7f7ec22c4ff99ed56faa1e9f785482b9bbd7c717e26fd723a1d1e"}, - {file = "charset_normalizer-3.4.1-cp37-cp37m-musllinux_1_2_s390x.whl", hash = "sha256:2fb9bd477fdea8684f78791a6de97a953c51831ee2981f8e4f583ff3b9d9687e"}, - {file = "charset_normalizer-3.4.1-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:01732659ba9b5b873fc117534143e4feefecf3b2078b0a6a2e925271bb6f4cfa"}, - {file = "charset_normalizer-3.4.1-cp37-cp37m-win32.whl", hash = "sha256:7a4f97a081603d2050bfaffdefa5b02a9ec823f8348a572e39032caa8404a487"}, - {file = "charset_normalizer-3.4.1-cp37-cp37m-win_amd64.whl", hash = "sha256:7b1bef6280950ee6c177b326508f86cad7ad4dff12454483b51d8b7d673a2c5d"}, - {file = "charset_normalizer-3.4.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:ecddf25bee22fe4fe3737a399d0d177d72bc22be6913acfab364b40bce1ba83c"}, - {file = "charset_normalizer-3.4.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c60ca7339acd497a55b0ea5d506b2a2612afb2826560416f6894e8b5770d4a9"}, - {file = "charset_normalizer-3.4.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b7b2d86dd06bfc2ade3312a83a5c364c7ec2e3498f8734282c6c3d4b07b346b8"}, - {file = "charset_normalizer-3.4.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dd78cfcda14a1ef52584dbb008f7ac81c1328c0f58184bf9a84c49c605002da6"}, - {file = "charset_normalizer-3.4.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6e27f48bcd0957c6d4cb9d6fa6b61d192d0b13d5ef563e5f2ae35feafc0d179c"}, - {file = "charset_normalizer-3.4.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:01ad647cdd609225c5350561d084b42ddf732f4eeefe6e678765636791e78b9a"}, - {file = "charset_normalizer-3.4.1-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:619a609aa74ae43d90ed2e89bdd784765de0a25ca761b93e196d938b8fd1dbbd"}, - {file = "charset_normalizer-3.4.1-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:89149166622f4db9b4b6a449256291dc87a99ee53151c74cbd82a53c8c2f6ccd"}, - {file = "charset_normalizer-3.4.1-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:7709f51f5f7c853f0fb938bcd3bc59cdfdc5203635ffd18bf354f6967ea0f824"}, - {file = "charset_normalizer-3.4.1-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:345b0426edd4e18138d6528aed636de7a9ed169b4aaf9d61a8c19e39d26838ca"}, - {file = "charset_normalizer-3.4.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:0907f11d019260cdc3f94fbdb23ff9125f6b5d1039b76003b5b0ac9d6a6c9d5b"}, - {file = "charset_normalizer-3.4.1-cp38-cp38-win32.whl", hash = "sha256:ea0d8d539afa5eb2728aa1932a988a9a7af94f18582ffae4bc10b3fbdad0626e"}, - {file = "charset_normalizer-3.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:329ce159e82018d646c7ac45b01a430369d526569ec08516081727a20e9e4af4"}, - {file = "charset_normalizer-3.4.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:b97e690a2118911e39b4042088092771b4ae3fc3aa86518f84b8cf6888dbdb41"}, - {file = "charset_normalizer-3.4.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:78baa6d91634dfb69ec52a463534bc0df05dbd546209b79a3880a34487f4b84f"}, - {file = "charset_normalizer-3.4.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1a2bc9f351a75ef49d664206d51f8e5ede9da246602dc2d2726837620ea034b2"}, - {file = "charset_normalizer-3.4.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:75832c08354f595c760a804588b9357d34ec00ba1c940c15e31e96d902093770"}, - {file = "charset_normalizer-3.4.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0af291f4fe114be0280cdd29d533696a77b5b49cfde5467176ecab32353395c4"}, - {file = "charset_normalizer-3.4.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0167ddc8ab6508fe81860a57dd472b2ef4060e8d378f0cc555707126830f2537"}, - {file = "charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:2a75d49014d118e4198bcee5ee0a6f25856b29b12dbf7cd012791f8a6cc5c496"}, - {file = "charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:363e2f92b0f0174b2f8238240a1a30142e3db7b957a5dd5689b0e75fb717cc78"}, - {file = "charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:ab36c8eb7e454e34e60eb55ca5d241a5d18b2c6244f6827a30e451c42410b5f7"}, - {file = "charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:4c0907b1928a36d5a998d72d64d8eaa7244989f7aaaf947500d3a800c83a3fd6"}, - {file = "charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:04432ad9479fa40ec0f387795ddad4437a2b50417c69fa275e212933519ff294"}, - {file = "charset_normalizer-3.4.1-cp39-cp39-win32.whl", hash = "sha256:3bed14e9c89dcb10e8f3a29f9ccac4955aebe93c71ae803af79265c9ca5644c5"}, - {file = "charset_normalizer-3.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:49402233c892a461407c512a19435d1ce275543138294f7ef013f0b63d5d3765"}, - {file = "charset_normalizer-3.4.1-py3-none-any.whl", hash = "sha256:d98b1668f06378c6dbefec3b92299716b931cd4e6061f3c875a71ced1780ab85"}, - {file = "charset_normalizer-3.4.1.tar.gz", hash = "sha256:44251f18cd68a75b56585dd00dae26183e102cd5e0f9f1466e6df5da2ed64ea3"}, +markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" +files = [ + {file = "charset_normalizer-3.4.6-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:2e1d8ca8611099001949d1cdfaefc510cf0f212484fe7c565f735b68c78c3c95"}, + {file = "charset_normalizer-3.4.6-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e25369dc110d58ddf29b949377a93e0716d72a24f62bad72b2b39f155949c1fd"}, + {file = "charset_normalizer-3.4.6-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:259695e2ccc253feb2a016303543d691825e920917e31f894ca1a687982b1de4"}, + {file = "charset_normalizer-3.4.6-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:dda86aba335c902b6149a02a55b38e96287157e609200811837678214ba2b1db"}, + {file = "charset_normalizer-3.4.6-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:51fb3c322c81d20567019778cb5a4a6f2dc1c200b886bc0d636238e364848c89"}, + {file = "charset_normalizer-3.4.6-cp310-cp310-manylinux_2_31_armv7l.whl", hash = "sha256:4482481cb0572180b6fd976a4d5c72a30263e98564da68b86ec91f0fe35e8565"}, + {file = "charset_normalizer-3.4.6-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:39f5068d35621da2881271e5c3205125cc456f54e9030d3f723288c873a71bf9"}, + {file = "charset_normalizer-3.4.6-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:8bea55c4eef25b0b19a0337dc4e3f9a15b00d569c77211fa8cde38684f234fb7"}, + {file = "charset_normalizer-3.4.6-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:f0cdaecd4c953bfae0b6bb64910aaaca5a424ad9c72d85cb88417bb9814f7550"}, + {file = "charset_normalizer-3.4.6-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:150b8ce8e830eb7ccb029ec9ca36022f756986aaaa7956aad6d9ec90089338c0"}, + {file = "charset_normalizer-3.4.6-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:e68c14b04827dd76dcbd1aeea9e604e3e4b78322d8faf2f8132c7138efa340a8"}, + {file = "charset_normalizer-3.4.6-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:3778fd7d7cd04ae8f54651f4a7a0bd6e39a0cf20f801720a4c21d80e9b7ad6b0"}, + {file = "charset_normalizer-3.4.6-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:dad6e0f2e481fffdcf776d10ebee25e0ef89f16d691f1e5dee4b586375fdc64b"}, + {file = "charset_normalizer-3.4.6-cp310-cp310-win32.whl", hash = "sha256:74a2e659c7ecbc73562e2a15e05039f1e22c75b7c7618b4b574a3ea9118d1557"}, + {file = "charset_normalizer-3.4.6-cp310-cp310-win_amd64.whl", hash = "sha256:aa9cccf4a44b9b62d8ba8b4dd06c649ba683e4bf04eea606d2e94cfc2d6ff4d6"}, + {file = "charset_normalizer-3.4.6-cp310-cp310-win_arm64.whl", hash = "sha256:e985a16ff513596f217cee86c21371b8cd011c0f6f056d0920aa2d926c544058"}, + {file = "charset_normalizer-3.4.6-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:82060f995ab5003a2d6e0f4ad29065b7672b6593c8c63559beefe5b443242c3e"}, + {file = "charset_normalizer-3.4.6-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:60c74963d8350241a79cb8feea80e54d518f72c26db618862a8f53e5023deaf9"}, + {file = "charset_normalizer-3.4.6-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f6e4333fb15c83f7d1482a76d45a0818897b3d33f00efd215528ff7c51b8e35d"}, + {file = "charset_normalizer-3.4.6-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:bc72863f4d9aba2e8fd9085e63548a324ba706d2ea2c83b260da08a59b9482de"}, + {file = "charset_normalizer-3.4.6-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9cc4fc6c196d6a8b76629a70ddfcd4635a6898756e2d9cac5565cf0654605d73"}, + {file = "charset_normalizer-3.4.6-cp311-cp311-manylinux_2_31_armv7l.whl", hash = "sha256:0c173ce3a681f309f31b87125fecec7a5d1347261ea11ebbb856fa6006b23c8c"}, + {file = "charset_normalizer-3.4.6-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:c907cdc8109f6c619e6254212e794d6548373cc40e1ec75e6e3823d9135d29cc"}, + {file = "charset_normalizer-3.4.6-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:404a1e552cf5b675a87f0651f8b79f5f1e6fd100ee88dc612f89aa16abd4486f"}, + {file = "charset_normalizer-3.4.6-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:e3c701e954abf6fc03a49f7c579cc80c2c6cc52525340ca3186c41d3f33482ef"}, + {file = "charset_normalizer-3.4.6-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:7a6967aaf043bceabab5412ed6bd6bd26603dae84d5cb75bf8d9a74a4959d398"}, + {file = "charset_normalizer-3.4.6-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:5feb91325bbceade6afab43eb3b508c63ee53579fe896c77137ded51c6b6958e"}, + {file = "charset_normalizer-3.4.6-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:f820f24b09e3e779fe84c3c456cb4108a7aa639b0d1f02c28046e11bfcd088ed"}, + {file = "charset_normalizer-3.4.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:b35b200d6a71b9839a46b9b7fff66b6638bb52fc9658aa58796b0326595d3021"}, + {file = "charset_normalizer-3.4.6-cp311-cp311-win32.whl", hash = "sha256:9ca4c0b502ab399ef89248a2c84c54954f77a070f28e546a85e91da627d1301e"}, + {file = "charset_normalizer-3.4.6-cp311-cp311-win_amd64.whl", hash = "sha256:a9e68c9d88823b274cf1e72f28cb5dc89c990edf430b0bfd3e2fb0785bfeabf4"}, + {file = "charset_normalizer-3.4.6-cp311-cp311-win_arm64.whl", hash = "sha256:97d0235baafca5f2b09cf332cc275f021e694e8362c6bb9c96fc9a0eb74fc316"}, + {file = "charset_normalizer-3.4.6-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:2ef7fedc7a6ecbe99969cd09632516738a97eeb8bd7258bf8a0f23114c057dab"}, + {file = "charset_normalizer-3.4.6-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a4ea868bc28109052790eb2b52a9ab33f3aa7adc02f96673526ff47419490e21"}, + {file = "charset_normalizer-3.4.6-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:836ab36280f21fc1a03c99cd05c6b7af70d2697e374c7af0b61ed271401a72a2"}, + {file = "charset_normalizer-3.4.6-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:f1ce721c8a7dfec21fcbdfe04e8f68174183cf4e8188e0645e92aa23985c57ff"}, + {file = "charset_normalizer-3.4.6-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0e28d62a8fc7a1fa411c43bd65e346f3bce9716dc51b897fbe930c5987b402d5"}, + {file = "charset_normalizer-3.4.6-cp312-cp312-manylinux_2_31_armv7l.whl", hash = "sha256:530d548084c4a9f7a16ed4a294d459b4f229db50df689bfe92027452452943a0"}, + {file = "charset_normalizer-3.4.6-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:30f445ae60aad5e1f8bdbb3108e39f6fbc09f4ea16c815c66578878325f8f15a"}, + {file = "charset_normalizer-3.4.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:ac2393c73378fea4e52aa56285a3d64be50f1a12395afef9cce47772f60334c2"}, + {file = "charset_normalizer-3.4.6-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:90ca27cd8da8118b18a52d5f547859cc1f8354a00cd1e8e5120df3e30d6279e5"}, + {file = "charset_normalizer-3.4.6-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:8e5a94886bedca0f9b78fecd6afb6629142fd2605aa70a125d49f4edc6037ee6"}, + {file = "charset_normalizer-3.4.6-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:695f5c2823691a25f17bc5d5ffe79fa90972cc34b002ac6c843bb8a1720e950d"}, + {file = "charset_normalizer-3.4.6-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:231d4da14bcd9301310faf492051bee27df11f2bc7549bc0bb41fef11b82daa2"}, + {file = "charset_normalizer-3.4.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:a056d1ad2633548ca18ffa2f85c202cfb48b68615129143915b8dc72a806a923"}, + {file = "charset_normalizer-3.4.6-cp312-cp312-win32.whl", hash = "sha256:c2274ca724536f173122f36c98ce188fd24ce3dad886ec2b7af859518ce008a4"}, + {file = "charset_normalizer-3.4.6-cp312-cp312-win_amd64.whl", hash = "sha256:c8ae56368f8cc97c7e40a7ee18e1cedaf8e780cd8bc5ed5ac8b81f238614facb"}, + {file = "charset_normalizer-3.4.6-cp312-cp312-win_arm64.whl", hash = "sha256:899d28f422116b08be5118ef350c292b36fc15ec2daeb9ea987c89281c7bb5c4"}, + {file = "charset_normalizer-3.4.6-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:11afb56037cbc4b1555a34dd69151e8e069bee82e613a73bef6e714ce733585f"}, + {file = "charset_normalizer-3.4.6-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:423fb7e748a08f854a08a222b983f4df1912b1daedce51a72bd24fe8f26a1843"}, + {file = "charset_normalizer-3.4.6-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:d73beaac5e90173ac3deb9928a74763a6d230f494e4bfb422c217a0ad8e629bf"}, + {file = "charset_normalizer-3.4.6-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d60377dce4511655582e300dc1e5a5f24ba0cb229005a1d5c8d0cb72bb758ab8"}, + {file = "charset_normalizer-3.4.6-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:530e8cebeea0d76bdcf93357aa5e41336f48c3dc709ac52da2bb167c5b8271d9"}, + {file = "charset_normalizer-3.4.6-cp313-cp313-manylinux_2_31_armv7l.whl", hash = "sha256:a26611d9987b230566f24a0a125f17fe0de6a6aff9f25c9f564aaa2721a5fb88"}, + {file = "charset_normalizer-3.4.6-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:34315ff4fc374b285ad7f4a0bf7dcbfe769e1b104230d40f49f700d4ab6bbd84"}, + {file = "charset_normalizer-3.4.6-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5f8ddd609f9e1af8c7bd6e2aca279c931aefecd148a14402d4e368f3171769fd"}, + {file = "charset_normalizer-3.4.6-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:80d0a5615143c0b3225e5e3ef22c8d5d51f3f72ce0ea6fb84c943546c7b25b6c"}, + {file = "charset_normalizer-3.4.6-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:92734d4d8d187a354a556626c221cd1a892a4e0802ccb2af432a1d85ec012194"}, + {file = "charset_normalizer-3.4.6-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:613f19aa6e082cf96e17e3ffd89383343d0d589abda756b7764cf78361fd41dc"}, + {file = "charset_normalizer-3.4.6-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:2b1a63e8224e401cafe7739f77efd3f9e7f5f2026bda4aead8e59afab537784f"}, + {file = "charset_normalizer-3.4.6-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6cceb5473417d28edd20c6c984ab6fee6c6267d38d906823ebfe20b03d607dc2"}, + {file = "charset_normalizer-3.4.6-cp313-cp313-win32.whl", hash = "sha256:d7de2637729c67d67cf87614b566626057e95c303bc0a55ffe391f5205e7003d"}, + {file = "charset_normalizer-3.4.6-cp313-cp313-win_amd64.whl", hash = "sha256:572d7c822caf521f0525ba1bce1a622a0b85cf47ffbdae6c9c19e3b5ac3c4389"}, + {file = "charset_normalizer-3.4.6-cp313-cp313-win_arm64.whl", hash = "sha256:a4474d924a47185a06411e0064b803c68be044be2d60e50e8bddcc2649957c1f"}, + {file = "charset_normalizer-3.4.6-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:9cc6e6d9e571d2f863fa77700701dae73ed5f78881efc8b3f9a4398772ff53e8"}, + {file = "charset_normalizer-3.4.6-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ef5960d965e67165d75b7c7ffc60a83ec5abfc5c11b764ec13ea54fbef8b4421"}, + {file = "charset_normalizer-3.4.6-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:b3694e3f87f8ac7ce279d4355645b3c878d24d1424581b46282f24b92f5a4ae2"}, + {file = "charset_normalizer-3.4.6-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5d11595abf8dd942a77883a39d81433739b287b6aa71620f15164f8096221b30"}, + {file = "charset_normalizer-3.4.6-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7bda6eebafd42133efdca535b04ccb338ab29467b3f7bf79569883676fc628db"}, + {file = "charset_normalizer-3.4.6-cp314-cp314-manylinux_2_31_armv7l.whl", hash = "sha256:bbc8c8650c6e51041ad1be191742b8b421d05bbd3410f43fa2a00c8db87678e8"}, + {file = "charset_normalizer-3.4.6-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:22c6f0c2fbc31e76c3b8a86fba1a56eda6166e238c29cdd3d14befdb4a4e4815"}, + {file = "charset_normalizer-3.4.6-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7edbed096e4a4798710ed6bc75dcaa2a21b68b6c356553ac4823c3658d53743a"}, + {file = "charset_normalizer-3.4.6-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:7f9019c9cb613f084481bd6a100b12e1547cf2efe362d873c2e31e4035a6fa43"}, + {file = "charset_normalizer-3.4.6-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:58c948d0d086229efc484fe2f30c2d382c86720f55cd9bc33591774348ad44e0"}, + {file = "charset_normalizer-3.4.6-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:419a9d91bd238052642a51938af8ac05da5b3343becde08d5cdeab9046df9ee1"}, + {file = "charset_normalizer-3.4.6-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:5273b9f0b5835ff0350c0828faea623c68bfa65b792720c453e22b25cc72930f"}, + {file = "charset_normalizer-3.4.6-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:0e901eb1049fdb80f5bd11ed5ea1e498ec423102f7a9b9e4645d5b8204ff2815"}, + {file = "charset_normalizer-3.4.6-cp314-cp314-win32.whl", hash = "sha256:b4ff1d35e8c5bd078be89349b6f3a845128e685e751b6ea1169cf2160b344c4d"}, + {file = "charset_normalizer-3.4.6-cp314-cp314-win_amd64.whl", hash = "sha256:74119174722c4349af9708993118581686f343adc1c8c9c007d59be90d077f3f"}, + {file = "charset_normalizer-3.4.6-cp314-cp314-win_arm64.whl", hash = "sha256:e5bcc1a1ae744e0bb59641171ae53743760130600da8db48cbb6e4918e186e4e"}, + {file = "charset_normalizer-3.4.6-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:ad8faf8df23f0378c6d527d8b0b15ea4a2e23c89376877c598c4870d1b2c7866"}, + {file = "charset_normalizer-3.4.6-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f5ea69428fa1b49573eef0cc44a1d43bebd45ad0c611eb7d7eac760c7ae771bc"}, + {file = "charset_normalizer-3.4.6-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:06a7e86163334edfc5d20fe104db92fcd666e5a5df0977cb5680a506fe26cc8e"}, + {file = "charset_normalizer-3.4.6-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:e1f6e2f00a6b8edb562826e4632e26d063ac10307e80f7461f7de3ad8ef3f077"}, + {file = "charset_normalizer-3.4.6-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:95b52c68d64c1878818687a473a10547b3292e82b6f6fe483808fb1468e2f52f"}, + {file = "charset_normalizer-3.4.6-cp314-cp314t-manylinux_2_31_armv7l.whl", hash = "sha256:7504e9b7dc05f99a9bbb4525c67a2c155073b44d720470a148b34166a69c054e"}, + {file = "charset_normalizer-3.4.6-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:172985e4ff804a7ad08eebec0a1640ece87ba5041d565fff23c8f99c1f389484"}, + {file = "charset_normalizer-3.4.6-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:4be9f4830ba8741527693848403e2c457c16e499100963ec711b1c6f2049b7c7"}, + {file = "charset_normalizer-3.4.6-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:79090741d842f564b1b2827c0b82d846405b744d31e84f18d7a7b41c20e473ff"}, + {file = "charset_normalizer-3.4.6-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:87725cfb1a4f1f8c2fc9890ae2f42094120f4b44db9360be5d99a4c6b0e03a9e"}, + {file = "charset_normalizer-3.4.6-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:fcce033e4021347d80ed9c66dcf1e7b1546319834b74445f561d2e2221de5659"}, + {file = "charset_normalizer-3.4.6-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:ca0276464d148c72defa8bb4390cce01b4a0e425f3b50d1435aa6d7a18107602"}, + {file = "charset_normalizer-3.4.6-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:197c1a244a274bb016dd8b79204850144ef77fe81c5b797dc389327adb552407"}, + {file = "charset_normalizer-3.4.6-cp314-cp314t-win32.whl", hash = "sha256:2a24157fa36980478dd1770b585c0f30d19e18f4fb0c47c13aa568f871718579"}, + {file = "charset_normalizer-3.4.6-cp314-cp314t-win_amd64.whl", hash = "sha256:cd5e2801c89992ed8c0a3f0293ae83c159a60d9a5d685005383ef4caca77f2c4"}, + {file = "charset_normalizer-3.4.6-cp314-cp314t-win_arm64.whl", hash = "sha256:47955475ac79cc504ef2704b192364e51d0d473ad452caedd0002605f780101c"}, + {file = "charset_normalizer-3.4.6-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:659a1e1b500fac8f2779dd9e1570464e012f43e580371470b45277a27baa7532"}, + {file = "charset_normalizer-3.4.6-cp38-cp38-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f61aa92e4aad0be58eb6eb4e0c21acf32cf8065f4b2cae5665da756c4ceef982"}, + {file = "charset_normalizer-3.4.6-cp38-cp38-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f50498891691e0864dc3da965f340fada0771f6142a378083dc4608f4ea513e2"}, + {file = "charset_normalizer-3.4.6-cp38-cp38-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:bf625105bb9eef28a56a943fec8c8a98aeb80e7d7db99bd3c388137e6eb2d237"}, + {file = "charset_normalizer-3.4.6-cp38-cp38-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2bd9d128ef93637a5d7a6af25363cf5dec3fa21cf80e68055aad627f280e8afa"}, + {file = "charset_normalizer-3.4.6-cp38-cp38-manylinux_2_31_armv7l.whl", hash = "sha256:d08ec48f0a1c48d75d0356cea971921848fb620fdeba805b28f937e90691209f"}, + {file = "charset_normalizer-3.4.6-cp38-cp38-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:1ed80ff870ca6de33f4d953fda4d55654b9a2b340ff39ab32fa3adbcd718f264"}, + {file = "charset_normalizer-3.4.6-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:f98059e4fcd3e3e4e2d632b7cf81c2faae96c43c60b569e9c621468082f1d104"}, + {file = "charset_normalizer-3.4.6-cp38-cp38-musllinux_1_2_armv7l.whl", hash = "sha256:ab30e5e3e706e3063bc6de96b118688cb10396b70bb9864a430f67df98c61ecc"}, + {file = "charset_normalizer-3.4.6-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:d5f5d1e9def3405f60e3ca8232d56f35c98fb7bf581efcc60051ebf53cb8b611"}, + {file = "charset_normalizer-3.4.6-cp38-cp38-musllinux_1_2_riscv64.whl", hash = "sha256:461598cd852bfa5a61b09cae2b1c02e2efcd166ee5516e243d540ac24bfa68a7"}, + {file = "charset_normalizer-3.4.6-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:71be7e0e01753a89cf024abf7ecb6bca2c81738ead80d43004d9b5e3f1244e64"}, + {file = "charset_normalizer-3.4.6-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:df01808ee470038c3f8dc4f48620df7225c49c2d6639e38f96e6d6ac6e6f7b0e"}, + {file = "charset_normalizer-3.4.6-cp38-cp38-win32.whl", hash = "sha256:69dd852c2f0ad631b8b60cfbe25a28c0058a894de5abb566619c205ce0550eae"}, + {file = "charset_normalizer-3.4.6-cp38-cp38-win_amd64.whl", hash = "sha256:517ad0e93394ac532745129ceabdf2696b609ec9f87863d337140317ebce1c14"}, + {file = "charset_normalizer-3.4.6-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:31215157227939b4fb3d740cd23fe27be0439afef67b785a1eb78a3ae69cba9e"}, + {file = "charset_normalizer-3.4.6-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ecbbd45615a6885fe3240eb9db73b9e62518b611850fdf8ab08bd56de7ad2b17"}, + {file = "charset_normalizer-3.4.6-cp39-cp39-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c45a03a4c69820a399f1dda9e1d8fbf3562eda46e7720458180302021b08f778"}, + {file = "charset_normalizer-3.4.6-cp39-cp39-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:e8aeb10fcbe92767f0fa69ad5a72deca50d0dca07fbde97848997d778a50c9fe"}, + {file = "charset_normalizer-3.4.6-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:54fae94be3d75f3e573c9a1b5402dc593de19377013c9a0e4285e3d402dd3a2a"}, + {file = "charset_normalizer-3.4.6-cp39-cp39-manylinux_2_31_armv7l.whl", hash = "sha256:2f7fdd9b6e6c529d6a2501a2d36b240109e78a8ceaef5687cfcfa2bbe671d297"}, + {file = "charset_normalizer-3.4.6-cp39-cp39-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:4d1d02209e06550bdaef34af58e041ad71b88e624f5d825519da3a3308e22687"}, + {file = "charset_normalizer-3.4.6-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:8bc5f0687d796c05b1e28ab0d38a50e6309906ee09375dd3aff6a9c09dd6e8f4"}, + {file = "charset_normalizer-3.4.6-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:ee4ec14bc1680d6b0afab9aea2ef27e26d2024f18b24a2d7155a52b60da7e833"}, + {file = "charset_normalizer-3.4.6-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:d1a2ee9c1499fc8f86f4521f27a973c914b211ffa87322f4ee33bb35392da2c5"}, + {file = "charset_normalizer-3.4.6-cp39-cp39-musllinux_1_2_riscv64.whl", hash = "sha256:48696db7f18afb80a068821504296eb0787d9ce239b91ca15059d1d3eaacf13b"}, + {file = "charset_normalizer-3.4.6-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:4f41da960b196ea355357285ad1316a00099f22d0929fe168343b99b254729c9"}, + {file = "charset_normalizer-3.4.6-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:802168e03fba8bbc5ce0d866d589e4b1ca751d06edee69f7f3a19c5a9fe6b597"}, + {file = "charset_normalizer-3.4.6-cp39-cp39-win32.whl", hash = "sha256:8761ac29b6c81574724322a554605608a9960769ea83d2c73e396f3df896ad54"}, + {file = "charset_normalizer-3.4.6-cp39-cp39-win_amd64.whl", hash = "sha256:1cf0a70018692f85172348fe06d3a4b63f94ecb055e13a00c644d368eb82e5b8"}, + {file = "charset_normalizer-3.4.6-cp39-cp39-win_arm64.whl", hash = "sha256:3516bbb8d42169de9e61b8520cbeeeb716f12f4ecfe3fd30a9919aa16c806ca8"}, + {file = "charset_normalizer-3.4.6-py3-none-any.whl", hash = "sha256:947cf925bc916d90adba35a64c82aace04fa39b46b52d4630ece166655905a69"}, + {file = "charset_normalizer-3.4.6.tar.gz", hash = "sha256:1ae6b62897110aa7c79ea2f5dd38d1abca6db663687c0b1ad9aed6f6bae3d9d6"}, ] [[package]] @@ -316,6 +380,7 @@ description = "Clarabel Conic Interior Point Solver for Rust / Python" optional = false python-versions = ">=3.9" groups = ["main"] +markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "clarabel-0.11.1-cp39-abi3-macosx_10_12_x86_64.whl", hash = "sha256:c39160e4222040f051f2a0598691c4f9126b4d17f5b9e7678f76c71d611e12d8"}, {file = "clarabel-0.11.1-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:8963687ee250d27310d139eea5a6816f9c3ae31f33691b56579ca4f0f0b64b63"}, @@ -332,31 +397,15 @@ scipy = "*" [[package]] name = "click" -version = "8.1.8" -description = "Composable command line interface toolkit" -optional = false -python-versions = ">=3.7" -groups = ["main"] -markers = "python_version < \"3.11\"" -files = [ - {file = "click-8.1.8-py3-none-any.whl", hash = "sha256:63c132bbbed01578a06712a2d1f497bb62d9c1c0d329b7903a866228027263b2"}, - {file = "click-8.1.8.tar.gz", hash = "sha256:ed53c9d8990d83c2a27deae68e4ee337473f6330c040a31d4225c9574d16096a"}, -] - -[package.dependencies] -colorama = {version = "*", markers = "platform_system == \"Windows\""} - -[[package]] -name = "click" -version = "8.2.1" +version = "8.3.1" description = "Composable command line interface toolkit" optional = false python-versions = ">=3.10" groups = ["main"] -markers = "python_version >= \"3.11\"" +markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ - {file = "click-8.2.1-py3-none-any.whl", hash = "sha256:61a3265b914e850b85317d0b3109c7f8cd35a670f963866005d6ef1d5175a12b"}, - {file = "click-8.2.1.tar.gz", hash = "sha256:27c491cc05d968d271d5a1db13e3b5a184636d9d930f148c50b038f0d0646202"}, + {file = "click-8.3.1-py3-none-any.whl", hash = "sha256:981153a64e25f12d547d3426c367a4857371575ee7ad18df2a6183ab0545b2a6"}, + {file = "click-8.3.1.tar.gz", hash = "sha256:12ff4785d337a1bb490bb7e9c2b1ee5da3112e94a8622f26a6c77f5d2fc6842a"}, ] [package.dependencies] @@ -364,26 +413,28 @@ colorama = {version = "*", markers = "platform_system == \"Windows\""} [[package]] name = "cloudpickle" -version = "3.1.1" +version = "3.1.2" description = "Pickler class to extend the standard pickle.Pickler functionality" optional = false python-versions = ">=3.8" groups = ["main"] +markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ - {file = "cloudpickle-3.1.1-py3-none-any.whl", hash = "sha256:c8c5a44295039331ee9dad40ba100a9c7297b6f988e50e87ccdf3765a668350e"}, - {file = "cloudpickle-3.1.1.tar.gz", hash = "sha256:b216fa8ae4019d5482a8ac3c95d8f6346115d8835911fd4aefd1a445e4242c64"}, + {file = "cloudpickle-3.1.2-py3-none-any.whl", hash = "sha256:9acb47f6afd73f60dc1df93bb801b472f05ff42fa6c84167d25cb206be1fbf4a"}, + {file = "cloudpickle-3.1.2.tar.gz", hash = "sha256:7fda9eb655c9c230dab534f1983763de5835249750e85fbcef43aaa30a9a2414"}, ] [[package]] name = "cma" -version = "4.2.0" +version = "4.4.4" description = "CMA-ES, Covariance Matrix Adaptation Evolution Strategy for non-linear numerical optimization in Python" optional = false python-versions = "*" groups = ["main"] +markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ - {file = "cma-4.2.0-py3-none-any.whl", hash = "sha256:844dc93abaa427c5a37520586970c463dfce6f8aad5652e0fbd6e0229970f1ae"}, - {file = "cma-4.2.0.tar.gz", hash = "sha256:1868605e751f5dd9f1a4f8a9b7c8844a5abe8e93a729dc46be6c6c0550269b9f"}, + {file = "cma-4.4.4-py3-none-any.whl", hash = "sha256:edb6d02eb2aac2d54650f16a8f0c70711ff17445957de7c9de92ff7fd4b7ef38"}, + {file = "cma-4.4.4.tar.gz", hash = "sha256:632bd654b5dce04c0eaa3166679d3e4773ce7a79eab7934e7f363c341b9a8170"}, ] [package.dependencies] @@ -392,6 +443,7 @@ numpy = "*" [package.extras] constrained-solution-tracking = ["moarchiving"] plotting = ["matplotlib"] +statistical-tests = ["scipy"] [[package]] name = "colorama" @@ -400,7 +452,7 @@ description = "Cross-platform colored terminal text." optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" groups = ["main"] -markers = "platform_system == \"Windows\" or sys_platform == \"win32\"" +markers = "(sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\") and (platform_system == \"Windows\" or sys_platform == \"win32\")" files = [ {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, @@ -408,171 +460,86 @@ files = [ [[package]] name = "comm" -version = "0.2.2" +version = "0.2.3" description = "Jupyter Python Comm implementation, for usage in ipykernel, xeus-python etc." optional = false python-versions = ">=3.8" groups = ["main"] +markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ - {file = "comm-0.2.2-py3-none-any.whl", hash = "sha256:e6fb86cb70ff661ee8c9c14e7d36d6de3b4066f1441be4063df9c5009f0a64d3"}, - {file = "comm-0.2.2.tar.gz", hash = "sha256:3fd7a84065306e07bea1773df6eb8282de51ba82f77c72f9c85716ab11fe980e"}, + {file = "comm-0.2.3-py3-none-any.whl", hash = "sha256:c615d91d75f7f04f095b30d1c1711babd43bdc6419c1be9886a85f2f4e489417"}, + {file = "comm-0.2.3.tar.gz", hash = "sha256:2dc8048c10962d55d7ad693be1e7045d891b7ce8d999c97963a5e3e99c055971"}, ] -[package.dependencies] -traitlets = ">=4" - [package.extras] test = ["pytest"] [[package]] name = "contourpy" -version = "1.3.0" -description = "Python library for calculating contours of 2D quadrilateral grids" -optional = false -python-versions = ">=3.9" -groups = ["main"] -markers = "python_version < \"3.11\"" -files = [ - {file = "contourpy-1.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:880ea32e5c774634f9fcd46504bf9f080a41ad855f4fef54f5380f5133d343c7"}, - {file = "contourpy-1.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:76c905ef940a4474a6289c71d53122a4f77766eef23c03cd57016ce19d0f7b42"}, - {file = "contourpy-1.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:92f8557cbb07415a4d6fa191f20fd9d2d9eb9c0b61d1b2f52a8926e43c6e9af7"}, - {file = "contourpy-1.3.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:36f965570cff02b874773c49bfe85562b47030805d7d8360748f3eca570f4cab"}, - {file = "contourpy-1.3.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cacd81e2d4b6f89c9f8a5b69b86490152ff39afc58a95af002a398273e5ce589"}, - {file = "contourpy-1.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:69375194457ad0fad3a839b9e29aa0b0ed53bb54db1bfb6c3ae43d111c31ce41"}, - {file = "contourpy-1.3.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:7a52040312b1a858b5e31ef28c2e865376a386c60c0e248370bbea2d3f3b760d"}, - {file = "contourpy-1.3.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:3faeb2998e4fcb256542e8a926d08da08977f7f5e62cf733f3c211c2a5586223"}, - {file = "contourpy-1.3.0-cp310-cp310-win32.whl", hash = "sha256:36e0cff201bcb17a0a8ecc7f454fe078437fa6bda730e695a92f2d9932bd507f"}, - {file = "contourpy-1.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:87ddffef1dbe5e669b5c2440b643d3fdd8622a348fe1983fad7a0f0ccb1cd67b"}, - {file = "contourpy-1.3.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0fa4c02abe6c446ba70d96ece336e621efa4aecae43eaa9b030ae5fb92b309ad"}, - {file = "contourpy-1.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:834e0cfe17ba12f79963861e0f908556b2cedd52e1f75e6578801febcc6a9f49"}, - {file = "contourpy-1.3.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dbc4c3217eee163fa3984fd1567632b48d6dfd29216da3ded3d7b844a8014a66"}, - {file = "contourpy-1.3.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4865cd1d419e0c7a7bf6de1777b185eebdc51470800a9f42b9e9decf17762081"}, - {file = "contourpy-1.3.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:303c252947ab4b14c08afeb52375b26781ccd6a5ccd81abcdfc1fafd14cf93c1"}, - {file = "contourpy-1.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:637f674226be46f6ba372fd29d9523dd977a291f66ab2a74fbeb5530bb3f445d"}, - {file = "contourpy-1.3.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:76a896b2f195b57db25d6b44e7e03f221d32fe318d03ede41f8b4d9ba1bff53c"}, - {file = "contourpy-1.3.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:e1fd23e9d01591bab45546c089ae89d926917a66dceb3abcf01f6105d927e2cb"}, - {file = "contourpy-1.3.0-cp311-cp311-win32.whl", hash = "sha256:d402880b84df3bec6eab53cd0cf802cae6a2ef9537e70cf75e91618a3801c20c"}, - {file = "contourpy-1.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:6cb6cc968059db9c62cb35fbf70248f40994dfcd7aa10444bbf8b3faeb7c2d67"}, - {file = "contourpy-1.3.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:570ef7cf892f0afbe5b2ee410c507ce12e15a5fa91017a0009f79f7d93a1268f"}, - {file = "contourpy-1.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:da84c537cb8b97d153e9fb208c221c45605f73147bd4cadd23bdae915042aad6"}, - {file = "contourpy-1.3.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0be4d8425bfa755e0fd76ee1e019636ccc7c29f77a7c86b4328a9eb6a26d0639"}, - {file = "contourpy-1.3.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9c0da700bf58f6e0b65312d0a5e695179a71d0163957fa381bb3c1f72972537c"}, - {file = "contourpy-1.3.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:eb8b141bb00fa977d9122636b16aa67d37fd40a3d8b52dd837e536d64b9a4d06"}, - {file = "contourpy-1.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3634b5385c6716c258d0419c46d05c8aa7dc8cb70326c9a4fb66b69ad2b52e09"}, - {file = "contourpy-1.3.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:0dce35502151b6bd35027ac39ba6e5a44be13a68f55735c3612c568cac3805fd"}, - {file = "contourpy-1.3.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:aea348f053c645100612b333adc5983d87be69acdc6d77d3169c090d3b01dc35"}, - {file = "contourpy-1.3.0-cp312-cp312-win32.whl", hash = "sha256:90f73a5116ad1ba7174341ef3ea5c3150ddf20b024b98fb0c3b29034752c8aeb"}, - {file = "contourpy-1.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:b11b39aea6be6764f84360fce6c82211a9db32a7c7de8fa6dd5397cf1d079c3b"}, - {file = "contourpy-1.3.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:3e1c7fa44aaae40a2247e2e8e0627f4bea3dd257014764aa644f319a5f8600e3"}, - {file = "contourpy-1.3.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:364174c2a76057feef647c802652f00953b575723062560498dc7930fc9b1cb7"}, - {file = "contourpy-1.3.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:32b238b3b3b649e09ce9aaf51f0c261d38644bdfa35cbaf7b263457850957a84"}, - {file = "contourpy-1.3.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d51fca85f9f7ad0b65b4b9fe800406d0d77017d7270d31ec3fb1cc07358fdea0"}, - {file = "contourpy-1.3.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:732896af21716b29ab3e988d4ce14bc5133733b85956316fb0c56355f398099b"}, - {file = "contourpy-1.3.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d73f659398a0904e125280836ae6f88ba9b178b2fed6884f3b1f95b989d2c8da"}, - {file = "contourpy-1.3.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:c6c7c2408b7048082932cf4e641fa3b8ca848259212f51c8c59c45aa7ac18f14"}, - {file = "contourpy-1.3.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:f317576606de89da6b7e0861cf6061f6146ead3528acabff9236458a6ba467f8"}, - {file = "contourpy-1.3.0-cp313-cp313-win32.whl", hash = "sha256:31cd3a85dbdf1fc002280c65caa7e2b5f65e4a973fcdf70dd2fdcb9868069294"}, - {file = "contourpy-1.3.0-cp313-cp313-win_amd64.whl", hash = "sha256:4553c421929ec95fb07b3aaca0fae668b2eb5a5203d1217ca7c34c063c53d087"}, - {file = "contourpy-1.3.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:345af746d7766821d05d72cb8f3845dfd08dd137101a2cb9b24de277d716def8"}, - {file = "contourpy-1.3.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:3bb3808858a9dc68f6f03d319acd5f1b8a337e6cdda197f02f4b8ff67ad2057b"}, - {file = "contourpy-1.3.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:420d39daa61aab1221567b42eecb01112908b2cab7f1b4106a52caaec8d36973"}, - {file = "contourpy-1.3.0-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4d63ee447261e963af02642ffcb864e5a2ee4cbfd78080657a9880b8b1868e18"}, - {file = "contourpy-1.3.0-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:167d6c890815e1dac9536dca00828b445d5d0df4d6a8c6adb4a7ec3166812fa8"}, - {file = "contourpy-1.3.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:710a26b3dc80c0e4febf04555de66f5fd17e9cf7170a7b08000601a10570bda6"}, - {file = "contourpy-1.3.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:75ee7cb1a14c617f34a51d11fa7524173e56551646828353c4af859c56b766e2"}, - {file = "contourpy-1.3.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:33c92cdae89ec5135d036e7218e69b0bb2851206077251f04a6c4e0e21f03927"}, - {file = "contourpy-1.3.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a11077e395f67ffc2c44ec2418cfebed032cd6da3022a94fc227b6faf8e2acb8"}, - {file = "contourpy-1.3.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e8134301d7e204c88ed7ab50028ba06c683000040ede1d617298611f9dc6240c"}, - {file = "contourpy-1.3.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e12968fdfd5bb45ffdf6192a590bd8ddd3ba9e58360b29683c6bb71a7b41edca"}, - {file = "contourpy-1.3.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fd2a0fc506eccaaa7595b7e1418951f213cf8255be2600f1ea1b61e46a60c55f"}, - {file = "contourpy-1.3.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4cfb5c62ce023dfc410d6059c936dcf96442ba40814aefbfa575425a3a7f19dc"}, - {file = "contourpy-1.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:68a32389b06b82c2fdd68276148d7b9275b5f5cf13e5417e4252f6d1a34f72a2"}, - {file = "contourpy-1.3.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:94e848a6b83da10898cbf1311a815f770acc9b6a3f2d646f330d57eb4e87592e"}, - {file = "contourpy-1.3.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:d78ab28a03c854a873787a0a42254a0ccb3cb133c672f645c9f9c8f3ae9d0800"}, - {file = "contourpy-1.3.0-cp39-cp39-win32.whl", hash = "sha256:81cb5ed4952aae6014bc9d0421dec7c5835c9c8c31cdf51910b708f548cf58e5"}, - {file = "contourpy-1.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:14e262f67bd7e6eb6880bc564dcda30b15e351a594657e55b7eec94b6ef72843"}, - {file = "contourpy-1.3.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:fe41b41505a5a33aeaed2a613dccaeaa74e0e3ead6dd6fd3a118fb471644fd6c"}, - {file = "contourpy-1.3.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eca7e17a65f72a5133bdbec9ecf22401c62bcf4821361ef7811faee695799779"}, - {file = "contourpy-1.3.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:1ec4dc6bf570f5b22ed0d7efba0dfa9c5b9e0431aeea7581aa217542d9e809a4"}, - {file = "contourpy-1.3.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:00ccd0dbaad6d804ab259820fa7cb0b8036bda0686ef844d24125d8287178ce0"}, - {file = "contourpy-1.3.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8ca947601224119117f7c19c9cdf6b3ab54c5726ef1d906aa4a69dfb6dd58102"}, - {file = "contourpy-1.3.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:c6ec93afeb848a0845a18989da3beca3eec2c0f852322efe21af1931147d12cb"}, - {file = "contourpy-1.3.0.tar.gz", hash = "sha256:7ffa0db17717a8ffb127efd0c95a4362d996b892c2904db72428d5b52e1938a4"}, -] - -[package.dependencies] -numpy = ">=1.23" - -[package.extras] -bokeh = ["bokeh", "selenium"] -docs = ["furo", "sphinx (>=7.2)", "sphinx-copybutton"] -mypy = ["contourpy[bokeh,docs]", "docutils-stubs", "mypy (==1.11.1)", "types-Pillow"] -test = ["Pillow", "contourpy[test-no-images]", "matplotlib"] -test-no-images = ["pytest", "pytest-cov", "pytest-rerunfailures", "pytest-xdist", "wurlitzer"] - -[[package]] -name = "contourpy" -version = "1.3.1" +version = "1.3.2" description = "Python library for calculating contours of 2D quadrilateral grids" optional = false python-versions = ">=3.10" groups = ["main"] -markers = "python_version >= \"3.11\"" -files = [ - {file = "contourpy-1.3.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a045f341a77b77e1c5de31e74e966537bba9f3c4099b35bf4c2e3939dd54cdab"}, - {file = "contourpy-1.3.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:500360b77259914f7805af7462e41f9cb7ca92ad38e9f94d6c8641b089338124"}, - {file = "contourpy-1.3.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b2f926efda994cdf3c8d3fdb40b9962f86edbc4457e739277b961eced3d0b4c1"}, - {file = "contourpy-1.3.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:adce39d67c0edf383647a3a007de0a45fd1b08dedaa5318404f1a73059c2512b"}, - {file = "contourpy-1.3.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:abbb49fb7dac584e5abc6636b7b2a7227111c4f771005853e7d25176daaf8453"}, - {file = "contourpy-1.3.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a0cffcbede75c059f535725c1680dfb17b6ba8753f0c74b14e6a9c68c29d7ea3"}, - {file = "contourpy-1.3.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:ab29962927945d89d9b293eabd0d59aea28d887d4f3be6c22deaefbb938a7277"}, - {file = "contourpy-1.3.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:974d8145f8ca354498005b5b981165b74a195abfae9a8129df3e56771961d595"}, - {file = "contourpy-1.3.1-cp310-cp310-win32.whl", hash = "sha256:ac4578ac281983f63b400f7fe6c101bedc10651650eef012be1ccffcbacf3697"}, - {file = "contourpy-1.3.1-cp310-cp310-win_amd64.whl", hash = "sha256:174e758c66bbc1c8576992cec9599ce8b6672b741b5d336b5c74e35ac382b18e"}, - {file = "contourpy-1.3.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3e8b974d8db2c5610fb4e76307e265de0edb655ae8169e8b21f41807ccbeec4b"}, - {file = "contourpy-1.3.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:20914c8c973f41456337652a6eeca26d2148aa96dd7ac323b74516988bea89fc"}, - {file = "contourpy-1.3.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:19d40d37c1c3a4961b4619dd9d77b12124a453cc3d02bb31a07d58ef684d3d86"}, - {file = "contourpy-1.3.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:113231fe3825ebf6f15eaa8bc1f5b0ddc19d42b733345eae0934cb291beb88b6"}, - {file = "contourpy-1.3.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4dbbc03a40f916a8420e420d63e96a1258d3d1b58cbdfd8d1f07b49fcbd38e85"}, - {file = "contourpy-1.3.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a04ecd68acbd77fa2d39723ceca4c3197cb2969633836ced1bea14e219d077c"}, - {file = "contourpy-1.3.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c414fc1ed8ee1dbd5da626cf3710c6013d3d27456651d156711fa24f24bd1291"}, - {file = "contourpy-1.3.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:31c1b55c1f34f80557d3830d3dd93ba722ce7e33a0b472cba0ec3b6535684d8f"}, - {file = "contourpy-1.3.1-cp311-cp311-win32.whl", hash = "sha256:f611e628ef06670df83fce17805c344710ca5cde01edfdc72751311da8585375"}, - {file = "contourpy-1.3.1-cp311-cp311-win_amd64.whl", hash = "sha256:b2bdca22a27e35f16794cf585832e542123296b4687f9fd96822db6bae17bfc9"}, - {file = "contourpy-1.3.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:0ffa84be8e0bd33410b17189f7164c3589c229ce5db85798076a3fa136d0e509"}, - {file = "contourpy-1.3.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:805617228ba7e2cbbfb6c503858e626ab528ac2a32a04a2fe88ffaf6b02c32bc"}, - {file = "contourpy-1.3.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ade08d343436a94e633db932e7e8407fe7de8083967962b46bdfc1b0ced39454"}, - {file = "contourpy-1.3.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:47734d7073fb4590b4a40122b35917cd77be5722d80683b249dac1de266aac80"}, - {file = "contourpy-1.3.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2ba94a401342fc0f8b948e57d977557fbf4d515f03c67682dd5c6191cb2d16ec"}, - {file = "contourpy-1.3.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:efa874e87e4a647fd2e4f514d5e91c7d493697127beb95e77d2f7561f6905bd9"}, - {file = "contourpy-1.3.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:1bf98051f1045b15c87868dbaea84f92408337d4f81d0e449ee41920ea121d3b"}, - {file = "contourpy-1.3.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:61332c87493b00091423e747ea78200659dc09bdf7fd69edd5e98cef5d3e9a8d"}, - {file = "contourpy-1.3.1-cp312-cp312-win32.whl", hash = "sha256:e914a8cb05ce5c809dd0fe350cfbb4e881bde5e2a38dc04e3afe1b3e58bd158e"}, - {file = "contourpy-1.3.1-cp312-cp312-win_amd64.whl", hash = "sha256:08d9d449a61cf53033612cb368f3a1b26cd7835d9b8cd326647efe43bca7568d"}, - {file = "contourpy-1.3.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:a761d9ccfc5e2ecd1bf05534eda382aa14c3e4f9205ba5b1684ecfe400716ef2"}, - {file = "contourpy-1.3.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:523a8ee12edfa36f6d2a49407f705a6ef4c5098de4f498619787e272de93f2d5"}, - {file = "contourpy-1.3.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ece6df05e2c41bd46776fbc712e0996f7c94e0d0543af1656956d150c4ca7c81"}, - {file = "contourpy-1.3.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:573abb30e0e05bf31ed067d2f82500ecfdaec15627a59d63ea2d95714790f5c2"}, - {file = "contourpy-1.3.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a9fa36448e6a3a1a9a2ba23c02012c43ed88905ec80163f2ffe2421c7192a5d7"}, - {file = "contourpy-1.3.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ea9924d28fc5586bf0b42d15f590b10c224117e74409dd7a0be3b62b74a501c"}, - {file = "contourpy-1.3.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5b75aa69cb4d6f137b36f7eb2ace9280cfb60c55dc5f61c731fdf6f037f958a3"}, - {file = "contourpy-1.3.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:041b640d4ec01922083645a94bb3b2e777e6b626788f4095cf21abbe266413c1"}, - {file = "contourpy-1.3.1-cp313-cp313-win32.whl", hash = "sha256:36987a15e8ace5f58d4d5da9dca82d498c2bbb28dff6e5d04fbfcc35a9cb3a82"}, - {file = "contourpy-1.3.1-cp313-cp313-win_amd64.whl", hash = "sha256:a7895f46d47671fa7ceec40f31fae721da51ad34bdca0bee83e38870b1f47ffd"}, - {file = "contourpy-1.3.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:9ddeb796389dadcd884c7eb07bd14ef12408aaae358f0e2ae24114d797eede30"}, - {file = "contourpy-1.3.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:19c1555a6801c2f084c7ddc1c6e11f02eb6a6016ca1318dd5452ba3f613a1751"}, - {file = "contourpy-1.3.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:841ad858cff65c2c04bf93875e384ccb82b654574a6d7f30453a04f04af71342"}, - {file = "contourpy-1.3.1-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4318af1c925fb9a4fb190559ef3eec206845f63e80fb603d47f2d6d67683901c"}, - {file = "contourpy-1.3.1-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:14c102b0eab282427b662cb590f2e9340a9d91a1c297f48729431f2dcd16e14f"}, - {file = "contourpy-1.3.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:05e806338bfeaa006acbdeba0ad681a10be63b26e1b17317bfac3c5d98f36cda"}, - {file = "contourpy-1.3.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:4d76d5993a34ef3df5181ba3c92fabb93f1eaa5729504fb03423fcd9f3177242"}, - {file = "contourpy-1.3.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:89785bb2a1980c1bd87f0cb1517a71cde374776a5f150936b82580ae6ead44a1"}, - {file = "contourpy-1.3.1-cp313-cp313t-win32.whl", hash = "sha256:8eb96e79b9f3dcadbad2a3891672f81cdcab7f95b27f28f1c67d75f045b6b4f1"}, - {file = "contourpy-1.3.1-cp313-cp313t-win_amd64.whl", hash = "sha256:287ccc248c9e0d0566934e7d606201abd74761b5703d804ff3df8935f523d546"}, - {file = "contourpy-1.3.1-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:b457d6430833cee8e4b8e9b6f07aa1c161e5e0d52e118dc102c8f9bd7dd060d6"}, - {file = "contourpy-1.3.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cb76c1a154b83991a3cbbf0dfeb26ec2833ad56f95540b442c73950af2013750"}, - {file = "contourpy-1.3.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:44a29502ca9c7b5ba389e620d44f2fbe792b1fb5734e8b931ad307071ec58c53"}, - {file = "contourpy-1.3.1.tar.gz", hash = "sha256:dfd97abd83335045a913e3bcc4a09c0ceadbe66580cf573fe961f4a825efa699"}, +markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" +files = [ + {file = "contourpy-1.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ba38e3f9f330af820c4b27ceb4b9c7feee5fe0493ea53a8720f4792667465934"}, + {file = "contourpy-1.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:dc41ba0714aa2968d1f8674ec97504a8f7e334f48eeacebcaa6256213acb0989"}, + {file = "contourpy-1.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9be002b31c558d1ddf1b9b415b162c603405414bacd6932d031c5b5a8b757f0d"}, + {file = "contourpy-1.3.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8d2e74acbcba3bfdb6d9d8384cdc4f9260cae86ed9beee8bd5f54fee49a430b9"}, + {file = "contourpy-1.3.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e259bced5549ac64410162adc973c5e2fb77f04df4a439d00b478e57a0e65512"}, + {file = "contourpy-1.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ad687a04bc802cbe8b9c399c07162a3c35e227e2daccf1668eb1f278cb698631"}, + {file = "contourpy-1.3.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:cdd22595308f53ef2f891040ab2b93d79192513ffccbd7fe19be7aa773a5e09f"}, + {file = "contourpy-1.3.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:b4f54d6a2defe9f257327b0f243612dd051cc43825587520b1bf74a31e2f6ef2"}, + {file = "contourpy-1.3.2-cp310-cp310-win32.whl", hash = "sha256:f939a054192ddc596e031e50bb13b657ce318cf13d264f095ce9db7dc6ae81c0"}, + {file = "contourpy-1.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:c440093bbc8fc21c637c03bafcbef95ccd963bc6e0514ad887932c18ca2a759a"}, + {file = "contourpy-1.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6a37a2fb93d4df3fc4c0e363ea4d16f83195fc09c891bc8ce072b9d084853445"}, + {file = "contourpy-1.3.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b7cd50c38f500bbcc9b6a46643a40e0913673f869315d8e70de0438817cb7773"}, + {file = "contourpy-1.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d6658ccc7251a4433eebd89ed2672c2ed96fba367fd25ca9512aa92a4b46c4f1"}, + {file = "contourpy-1.3.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:70771a461aaeb335df14deb6c97439973d253ae70660ca085eec25241137ef43"}, + {file = "contourpy-1.3.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:65a887a6e8c4cd0897507d814b14c54a8c2e2aa4ac9f7686292f9769fcf9a6ab"}, + {file = "contourpy-1.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3859783aefa2b8355697f16642695a5b9792e7a46ab86da1118a4a23a51a33d7"}, + {file = "contourpy-1.3.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:eab0f6db315fa4d70f1d8ab514e527f0366ec021ff853d7ed6a2d33605cf4b83"}, + {file = "contourpy-1.3.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:d91a3ccc7fea94ca0acab82ceb77f396d50a1f67412efe4c526f5d20264e6ecd"}, + {file = "contourpy-1.3.2-cp311-cp311-win32.whl", hash = "sha256:1c48188778d4d2f3d48e4643fb15d8608b1d01e4b4d6b0548d9b336c28fc9b6f"}, + {file = "contourpy-1.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:5ebac872ba09cb8f2131c46b8739a7ff71de28a24c869bcad554477eb089a878"}, + {file = "contourpy-1.3.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:4caf2bcd2969402bf77edc4cb6034c7dd7c0803213b3523f111eb7460a51b8d2"}, + {file = "contourpy-1.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:82199cb78276249796419fe36b7386bd8d2cc3f28b3bc19fe2454fe2e26c4c15"}, + {file = "contourpy-1.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:106fab697af11456fcba3e352ad50effe493a90f893fca6c2ca5c033820cea92"}, + {file = "contourpy-1.3.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d14f12932a8d620e307f715857107b1d1845cc44fdb5da2bc8e850f5ceba9f87"}, + {file = "contourpy-1.3.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:532fd26e715560721bb0d5fc7610fce279b3699b018600ab999d1be895b09415"}, + {file = "contourpy-1.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f26b383144cf2d2c29f01a1e8170f50dacf0eac02d64139dcd709a8ac4eb3cfe"}, + {file = "contourpy-1.3.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:c49f73e61f1f774650a55d221803b101d966ca0c5a2d6d5e4320ec3997489441"}, + {file = "contourpy-1.3.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:3d80b2c0300583228ac98d0a927a1ba6a2ba6b8a742463c564f1d419ee5b211e"}, + {file = "contourpy-1.3.2-cp312-cp312-win32.whl", hash = "sha256:90df94c89a91b7362e1142cbee7568f86514412ab8a2c0d0fca72d7e91b62912"}, + {file = "contourpy-1.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:8c942a01d9163e2e5cfb05cb66110121b8d07ad438a17f9e766317bcb62abf73"}, + {file = "contourpy-1.3.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:de39db2604ae755316cb5967728f4bea92685884b1e767b7c24e983ef5f771cb"}, + {file = "contourpy-1.3.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:3f9e896f447c5c8618f1edb2bafa9a4030f22a575ec418ad70611450720b5b08"}, + {file = "contourpy-1.3.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:71e2bd4a1c4188f5c2b8d274da78faab884b59df20df63c34f74aa1813c4427c"}, + {file = "contourpy-1.3.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:de425af81b6cea33101ae95ece1f696af39446db9682a0b56daaa48cfc29f38f"}, + {file = "contourpy-1.3.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:977e98a0e0480d3fe292246417239d2d45435904afd6d7332d8455981c408b85"}, + {file = "contourpy-1.3.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:434f0adf84911c924519d2b08fc10491dd282b20bdd3fa8f60fd816ea0b48841"}, + {file = "contourpy-1.3.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:c66c4906cdbc50e9cba65978823e6e00b45682eb09adbb78c9775b74eb222422"}, + {file = "contourpy-1.3.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:8b7fc0cd78ba2f4695fd0a6ad81a19e7e3ab825c31b577f384aa9d7817dc3bef"}, + {file = "contourpy-1.3.2-cp313-cp313-win32.whl", hash = "sha256:15ce6ab60957ca74cff444fe66d9045c1fd3e92c8936894ebd1f3eef2fff075f"}, + {file = "contourpy-1.3.2-cp313-cp313-win_amd64.whl", hash = "sha256:e1578f7eafce927b168752ed7e22646dad6cd9bca673c60bff55889fa236ebf9"}, + {file = "contourpy-1.3.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:0475b1f6604896bc7c53bb070e355e9321e1bc0d381735421a2d2068ec56531f"}, + {file = "contourpy-1.3.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:c85bb486e9be652314bb5b9e2e3b0d1b2e643d5eec4992c0fbe8ac71775da739"}, + {file = "contourpy-1.3.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:745b57db7758f3ffc05a10254edd3182a2a83402a89c00957a8e8a22f5582823"}, + {file = "contourpy-1.3.2-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:970e9173dbd7eba9b4e01aab19215a48ee5dd3f43cef736eebde064a171f89a5"}, + {file = "contourpy-1.3.2-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c6c4639a9c22230276b7bffb6a850dfc8258a2521305e1faefe804d006b2e532"}, + {file = "contourpy-1.3.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cc829960f34ba36aad4302e78eabf3ef16a3a100863f0d4eeddf30e8a485a03b"}, + {file = "contourpy-1.3.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:d32530b534e986374fc19eaa77fcb87e8a99e5431499949b828312bdcd20ac52"}, + {file = "contourpy-1.3.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:e298e7e70cf4eb179cc1077be1c725b5fd131ebc81181bf0c03525c8abc297fd"}, + {file = "contourpy-1.3.2-cp313-cp313t-win32.whl", hash = "sha256:d0e589ae0d55204991450bb5c23f571c64fe43adaa53f93fc902a84c96f52fe1"}, + {file = "contourpy-1.3.2-cp313-cp313t-win_amd64.whl", hash = "sha256:78e9253c3de756b3f6a5174d024c4835acd59eb3f8e2ca13e775dbffe1558f69"}, + {file = "contourpy-1.3.2-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:fd93cc7f3139b6dd7aab2f26a90dde0aa9fc264dbf70f6740d498a70b860b82c"}, + {file = "contourpy-1.3.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:107ba8a6a7eec58bb475329e6d3b95deba9440667c4d62b9b6063942b61d7f16"}, + {file = "contourpy-1.3.2-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:ded1706ed0c1049224531b81128efbd5084598f18d8a2d9efae833edbd2b40ad"}, + {file = "contourpy-1.3.2-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:5f5964cdad279256c084b69c3f412b7801e15356b16efa9d78aa974041903da0"}, + {file = "contourpy-1.3.2-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:49b65a95d642d4efa8f64ba12558fcb83407e58a2dfba9d796d77b63ccfcaff5"}, + {file = "contourpy-1.3.2-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:8c5acb8dddb0752bf252e01a3035b21443158910ac16a3b0d20e7fed7d534ce5"}, + {file = "contourpy-1.3.2.tar.gz", hash = "sha256:b6945942715a034c671b7fc54f9588126b0b8bf23db2696e3ca8328f3ff0ab54"}, ] [package.dependencies] @@ -581,75 +548,77 @@ numpy = ">=1.23" [package.extras] bokeh = ["bokeh", "selenium"] docs = ["furo", "sphinx (>=7.2)", "sphinx-copybutton"] -mypy = ["contourpy[bokeh,docs]", "docutils-stubs", "mypy (==1.11.1)", "types-Pillow"] +mypy = ["bokeh", "contourpy[bokeh,docs]", "docutils-stubs", "mypy (==1.15.0)", "types-Pillow"] test = ["Pillow", "contourpy[test-no-images]", "matplotlib"] test-no-images = ["pytest", "pytest-cov", "pytest-rerunfailures", "pytest-xdist", "wurlitzer"] [[package]] name = "cvxpy" -version = "1.6.6" +version = "1.7.5" description = "A domain-specific language for modeling convex optimization problems in Python." optional = false python-versions = ">=3.9" groups = ["main"] -files = [ - {file = "cvxpy-1.6.6-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:5a23a18a1b88b008996b3cb696b8b64c315c44bd875b449658784f8a0b70aa02"}, - {file = "cvxpy-1.6.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:101fb9b433cc2e334d3596ad611fcc3e2fa5d484bb0c65eda9ee2d7213de05b2"}, - {file = "cvxpy-1.6.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ed5a3b2da9c47eddad2113327ac81689524ebb4ba174ea1f52117921541fd705"}, - {file = "cvxpy-1.6.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f0f3c6bd27f62036b5a23e24beab0491d2e1af330bafa2872484658323ed3ece"}, - {file = "cvxpy-1.6.6-cp310-cp310-win_amd64.whl", hash = "sha256:5d2aecceeac9f5b9297c26ea0080a8de0da94f2660103c6b2c996f6900fb9dab"}, - {file = "cvxpy-1.6.6-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:d9046f1481d0b518efe82c4c8fd29ad1e7878bd1c426a29a1d4b770e620dd12c"}, - {file = "cvxpy-1.6.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0ad3abd3dabe5ae5d4d88b53d62d13d53c3515dbbd4ffb3348df91eef6b23171"}, - {file = "cvxpy-1.6.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ca252631ff112684a9f06fbedeb4517148646e5a26577077130d35c69a3e8a61"}, - {file = "cvxpy-1.6.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eb67053bb3ffb886af17f198fe73f9f0c963865de47ed716af8728a1a2763507"}, - {file = "cvxpy-1.6.6-cp311-cp311-win_amd64.whl", hash = "sha256:200f969a171e7b7f6d682e51c9c595e7fec7014de551355a915aad16e9a824b2"}, - {file = "cvxpy-1.6.6-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:73b82adb9a32ac75d98b52b0520dfcea846e5d5fe7d84c539b101043d51d532b"}, - {file = "cvxpy-1.6.6-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:3b3e2b5db609434608c7f535ab483b055c3012ca02bb97b1cc76a97ef0ea9fef"}, - {file = "cvxpy-1.6.6-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9bf2c311becaac48ea566692c53dba9bd39f0c4dd10534945191e39fd398e7ee"}, - {file = "cvxpy-1.6.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:863535ba8d89806a8cfcd5cb7939aef7ec7c45a7109780af72ceda6090410887"}, - {file = "cvxpy-1.6.6-cp312-cp312-win_amd64.whl", hash = "sha256:0bc83872e7054434c9c242a1a154daacae4c57f2818c7edfefcbf69a0f628748"}, - {file = "cvxpy-1.6.6-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:9d7aa7ecf5409459aaa5f39ec4889a472314d5790f478c093b6ebe733b4e4bd3"}, - {file = "cvxpy-1.6.6-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:23eb8dad835c425630a5d6b249c8685bd5d9038ad564cf6317e9ae259046b654"}, - {file = "cvxpy-1.6.6-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:091bf83fb4b7d58ea73380325f654239be6e7f556f2546c1cb767c41bf6815e3"}, - {file = "cvxpy-1.6.6-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b461bd6cb9dd975ca5bf1ac86a3602036158eca7cdff8d824e8a7c30efe43f66"}, - {file = "cvxpy-1.6.6-cp313-cp313-win_amd64.whl", hash = "sha256:7790b15365411778acbe25d23368f4e2776f28f44c7cbb6059101072e40fc028"}, - {file = "cvxpy-1.6.6-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:060e09cdc0cb7044ee8b4fd736168ecda86edcf64af3f39ab579f59a36336ba3"}, - {file = "cvxpy-1.6.6-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:220711c4cef001804613eccdbe1d104ba2be705b47ba1f8dc073ebc542bc5ca5"}, - {file = "cvxpy-1.6.6-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3d011ca756ea13632a739431a59b3a0d17e36e8dab280059763c09c3d615662f"}, - {file = "cvxpy-1.6.6-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:845bb27ad6d7c8069e1fa769b638a0f07dfb4cbaa2f1e92dbc3c4ef5eb6cdeab"}, - {file = "cvxpy-1.6.6-cp39-cp39-win_amd64.whl", hash = "sha256:5d8a7a567823ea43b5e24f390bb298ebd905cfb3570b4feeed0bcb80815f1400"}, - {file = "cvxpy-1.6.6.tar.gz", hash = "sha256:b424f2416b2d8935628e1291e97d532ec34ae046246fe9d2d2d69115ff1ba701"}, +markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" +files = [ + {file = "cvxpy-1.7.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a9938ea90898da51b1129ba9c185cd774d83fdbea3eb0099cd86d47e37ed5297"}, + {file = "cvxpy-1.7.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f0a4818665c3231a5a35001c41f691471b35e2231295f85ddf6044f3982f2f88"}, + {file = "cvxpy-1.7.5-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bd50c29539fb39cc53de93a689e73019cd26c1b80fc29aba7a63cc0ae5ec7b01"}, + {file = "cvxpy-1.7.5-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8c05116b9633747857758ca105f2744a9c27bb9dbed771087e5712c4405f2517"}, + {file = "cvxpy-1.7.5-cp310-cp310-win_amd64.whl", hash = "sha256:3207a3cf7360d176fe7f1dfe172846d7a3befd9b1db604c0082e4fa242373aff"}, + {file = "cvxpy-1.7.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:0df3bc1aee0431ee6419cfc77fb7543ad7588150b9bb5d8ef44da7a76770ba1d"}, + {file = "cvxpy-1.7.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:86876084d1874c837b6dc9dad61ba1e873e979d06462fdc149a6ba0b067a8638"}, + {file = "cvxpy-1.7.5-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7633c2a369188aa0fa3df4a767267774257c9dba71ac8e5b9e8eefb17e2613f8"}, + {file = "cvxpy-1.7.5-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9f9d93892f0805a9fa1b0702ca4c6d3b8deb056ab0140a58f41b933fe8f28aae"}, + {file = "cvxpy-1.7.5-cp311-cp311-win_amd64.whl", hash = "sha256:911575f28ecd3fd913165354aad24ebfe264a59a1d86a2c0e296177c6a13092f"}, + {file = "cvxpy-1.7.5-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:6c397b86ef2109b99ec10d4fb144a826af840e1111167d307c52c96719ac5f57"}, + {file = "cvxpy-1.7.5-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:20bacc1781b5b168e0272688d8652cef7433a4d07dea2482e790e1bdcee4f46e"}, + {file = "cvxpy-1.7.5-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:573396b116cff9c46952c885d9c06db1fc7a6e4838feb2fcba2982d521140205"}, + {file = "cvxpy-1.7.5-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5926ca62e6998f160ecf4c4acc139eb0fe8c28453c904e1c3d7b93b5b40e4303"}, + {file = "cvxpy-1.7.5-cp312-cp312-win_amd64.whl", hash = "sha256:e8308b88b515567d7a5a5762c8e7c971692e1022a924613d808648916c20834b"}, + {file = "cvxpy-1.7.5-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:56718a649e7d7c593becb1d088d7c1c0f073df821e20baead80e3662a083a34f"}, + {file = "cvxpy-1.7.5-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:ca12e393acd83973ec56b5ac9194db403a4f99af451d4ea041f27b3e432acd8d"}, + {file = "cvxpy-1.7.5-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ae3d4b7498a1419689566fa6e20d9c5479c384ca950ee7403c51e70425059aa5"}, + {file = "cvxpy-1.7.5-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:13ed867017ebe3c6bf2e34aa108208237eb9d655b9897687af8c98ed282f7004"}, + {file = "cvxpy-1.7.5-cp313-cp313-win_amd64.whl", hash = "sha256:d71688a5725ee61666cc9cf456f048d0016ae96c206c1030af06f3ad803b5d22"}, + {file = "cvxpy-1.7.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:de23fad688520f099c476e70917a28e9162d58496c9f12d29bde01eb58b0d2e2"}, + {file = "cvxpy-1.7.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:e416efb52ff89e2dffa2079ccca8034b59f27d5414cf92674d89bfb89a6a61ad"}, + {file = "cvxpy-1.7.5-cp39-cp39-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:806d9f435a062cb05dfb63812738d973ce209e58df72fa424cf9bbae5320996e"}, + {file = "cvxpy-1.7.5-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0ad9e26897584b441c95ea824a0b6fc0f0ffd2260c1435e3c1f1183c28817142"}, + {file = "cvxpy-1.7.5-cp39-cp39-win_amd64.whl", hash = "sha256:c570d240ba63c1c6dcc34a40c405e1057ae7faade64691a3f25ba8ca3b534cb1"}, + {file = "cvxpy-1.7.5.tar.gz", hash = "sha256:4b512218001c27659e16fc914a2490038635874681032c3c3485ff1099b83f5d"}, ] [package.dependencies] clarabel = ">=0.5.0" -numpy = ">=1.21.6" -osqp = ">=0.6.2" -scipy = ">=1.11.0" +numpy = ">=1.22.4" +osqp = ">=1.0.0" +scipy = ">=1.13.0" scs = ">=3.2.4.post1" [package.extras] cbc = ["cylp (>=0.91.5)"] +cuopt = ["cuopt-cu12 (>=25.5)", "nvidia-cuda-runtime-cu12 (>=12.8,<13.0)"] cvxopt = ["cvxopt"] daqp = ["daqp"] diffcp = ["diffcp"] doc = ["sphinx", "sphinx-design", "sphinx-immaterial (>=0.11.7)", "sphinx-inline-tabs", "sphinxcontrib.jquery"] ecos = ["ecos"] ecos-bb = ["ecos"] -glop = ["ortools (>=9.7,<9.12)"] +glop = ["ortools (>=9.7,<9.15)"] glpk = ["cvxopt"] glpk-mi = ["cvxopt"] gurobi = ["gurobipy"] highs = ["highspy"] mosek = ["Mosek"] -pdlp = ["ortools (>=9.7,<9.12)"] +pdlp = ["ortools (>=9.7,<9.15)"] piqp = ["piqp"] proxqp = ["proxsuite"] qoco = ["qoco"] scip = ["PySCIPOpt"] scipy = ["scipy"] testing = ["hypothesis", "pytest"] -xpress = ["xpress"] +xpress = ["xpress (>=9.5)"] [[package]] name = "cycler" @@ -658,6 +627,7 @@ description = "Composable style cycles" optional = false python-versions = ">=3.8" groups = ["main"] +markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "cycler-0.12.1-py3-none-any.whl", hash = "sha256:85cef7cff222d8644161529808465972e51340599459b8ac3ccbac5a854e0d30"}, {file = "cycler-0.12.1.tar.gz", hash = "sha256:88bb128f02ba341da8ef447245a9e138fae777f6a23943da4540077d3601eb1c"}, @@ -674,6 +644,7 @@ description = "Distributed Evolutionary Algorithms in Python" optional = false python-versions = "*" groups = ["main"] +markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "deap-1.4.3-cp310-cp310-macosx_13_0_x86_64.whl", hash = "sha256:05be2be3a3f2922b83143c755b58e64d1795be7e35f962ad925e61f1eb498f15"}, {file = "deap-1.4.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3b8435f8e4400da6a69fecf4ffc93ac38d5a0439982cf7132168a052ab93800e"}, @@ -703,80 +674,88 @@ numpy = "*" [[package]] name = "debugpy" -version = "1.8.14" +version = "1.8.20" description = "An implementation of the Debug Adapter Protocol for Python" optional = false python-versions = ">=3.8" groups = ["main"] -files = [ - {file = "debugpy-1.8.14-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:93fee753097e85623cab1c0e6a68c76308cd9f13ffdf44127e6fab4fbf024339"}, - {file = "debugpy-1.8.14-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3d937d93ae4fa51cdc94d3e865f535f185d5f9748efb41d0d49e33bf3365bd79"}, - {file = "debugpy-1.8.14-cp310-cp310-win32.whl", hash = "sha256:c442f20577b38cc7a9aafecffe1094f78f07fb8423c3dddb384e6b8f49fd2987"}, - {file = "debugpy-1.8.14-cp310-cp310-win_amd64.whl", hash = "sha256:f117dedda6d969c5c9483e23f573b38f4e39412845c7bc487b6f2648df30fe84"}, - {file = "debugpy-1.8.14-cp311-cp311-macosx_14_0_universal2.whl", hash = "sha256:1b2ac8c13b2645e0b1eaf30e816404990fbdb168e193322be8f545e8c01644a9"}, - {file = "debugpy-1.8.14-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cf431c343a99384ac7eab2f763980724834f933a271e90496944195318c619e2"}, - {file = "debugpy-1.8.14-cp311-cp311-win32.whl", hash = "sha256:c99295c76161ad8d507b413cd33422d7c542889fbb73035889420ac1fad354f2"}, - {file = "debugpy-1.8.14-cp311-cp311-win_amd64.whl", hash = "sha256:7816acea4a46d7e4e50ad8d09d963a680ecc814ae31cdef3622eb05ccacf7b01"}, - {file = "debugpy-1.8.14-cp312-cp312-macosx_14_0_universal2.whl", hash = "sha256:8899c17920d089cfa23e6005ad9f22582fd86f144b23acb9feeda59e84405b84"}, - {file = "debugpy-1.8.14-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f6bb5c0dcf80ad5dbc7b7d6eac484e2af34bdacdf81df09b6a3e62792b722826"}, - {file = "debugpy-1.8.14-cp312-cp312-win32.whl", hash = "sha256:281d44d248a0e1791ad0eafdbbd2912ff0de9eec48022a5bfbc332957487ed3f"}, - {file = "debugpy-1.8.14-cp312-cp312-win_amd64.whl", hash = "sha256:5aa56ef8538893e4502a7d79047fe39b1dae08d9ae257074c6464a7b290b806f"}, - {file = "debugpy-1.8.14-cp313-cp313-macosx_14_0_universal2.whl", hash = "sha256:329a15d0660ee09fec6786acdb6e0443d595f64f5d096fc3e3ccf09a4259033f"}, - {file = "debugpy-1.8.14-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0f920c7f9af409d90f5fd26e313e119d908b0dd2952c2393cd3247a462331f15"}, - {file = "debugpy-1.8.14-cp313-cp313-win32.whl", hash = "sha256:3784ec6e8600c66cbdd4ca2726c72d8ca781e94bce2f396cc606d458146f8f4e"}, - {file = "debugpy-1.8.14-cp313-cp313-win_amd64.whl", hash = "sha256:684eaf43c95a3ec39a96f1f5195a7ff3d4144e4a18d69bb66beeb1a6de605d6e"}, - {file = "debugpy-1.8.14-cp38-cp38-macosx_14_0_x86_64.whl", hash = "sha256:d5582bcbe42917bc6bbe5c12db1bffdf21f6bfc28d4554b738bf08d50dc0c8c3"}, - {file = "debugpy-1.8.14-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5349b7c3735b766a281873fbe32ca9cca343d4cc11ba4a743f84cb854339ff35"}, - {file = "debugpy-1.8.14-cp38-cp38-win32.whl", hash = "sha256:7118d462fe9724c887d355eef395fae68bc764fd862cdca94e70dcb9ade8a23d"}, - {file = "debugpy-1.8.14-cp38-cp38-win_amd64.whl", hash = "sha256:d235e4fa78af2de4e5609073972700523e372cf5601742449970110d565ca28c"}, - {file = "debugpy-1.8.14-cp39-cp39-macosx_14_0_x86_64.whl", hash = "sha256:413512d35ff52c2fb0fd2d65e69f373ffd24f0ecb1fac514c04a668599c5ce7f"}, - {file = "debugpy-1.8.14-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4c9156f7524a0d70b7a7e22b2e311d8ba76a15496fb00730e46dcdeedb9e1eea"}, - {file = "debugpy-1.8.14-cp39-cp39-win32.whl", hash = "sha256:b44985f97cc3dd9d52c42eb59ee9d7ee0c4e7ecd62bca704891f997de4cef23d"}, - {file = "debugpy-1.8.14-cp39-cp39-win_amd64.whl", hash = "sha256:b1528cfee6c1b1c698eb10b6b096c598738a8238822d218173d21c3086de8123"}, - {file = "debugpy-1.8.14-py2.py3-none-any.whl", hash = "sha256:5cd9a579d553b6cb9759a7908a41988ee6280b961f24f63336835d9418216a20"}, - {file = "debugpy-1.8.14.tar.gz", hash = "sha256:7cd287184318416850aa8b60ac90105837bb1e59531898c07569d197d2ed5322"}, +markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" +files = [ + {file = "debugpy-1.8.20-cp310-cp310-macosx_15_0_x86_64.whl", hash = "sha256:157e96ffb7f80b3ad36d808646198c90acb46fdcfd8bb1999838f0b6f2b59c64"}, + {file = "debugpy-1.8.20-cp310-cp310-manylinux_2_34_x86_64.whl", hash = "sha256:c1178ae571aff42e61801a38b007af504ec8e05fde1c5c12e5a7efef21009642"}, + {file = "debugpy-1.8.20-cp310-cp310-win32.whl", hash = "sha256:c29dd9d656c0fbd77906a6e6a82ae4881514aa3294b94c903ff99303e789b4a2"}, + {file = "debugpy-1.8.20-cp310-cp310-win_amd64.whl", hash = "sha256:3ca85463f63b5dd0aa7aaa933d97cbc47c174896dcae8431695872969f981893"}, + {file = "debugpy-1.8.20-cp311-cp311-macosx_15_0_universal2.whl", hash = "sha256:eada6042ad88fa1571b74bd5402ee8b86eded7a8f7b827849761700aff171f1b"}, + {file = "debugpy-1.8.20-cp311-cp311-manylinux_2_34_x86_64.whl", hash = "sha256:7de0b7dfeedc504421032afba845ae2a7bcc32ddfb07dae2c3ca5442f821c344"}, + {file = "debugpy-1.8.20-cp311-cp311-win32.whl", hash = "sha256:773e839380cf459caf73cc533ea45ec2737a5cc184cf1b3b796cd4fd98504fec"}, + {file = "debugpy-1.8.20-cp311-cp311-win_amd64.whl", hash = "sha256:1f7650546e0eded1902d0f6af28f787fa1f1dbdbc97ddabaf1cd963a405930cb"}, + {file = "debugpy-1.8.20-cp312-cp312-macosx_15_0_universal2.whl", hash = "sha256:4ae3135e2089905a916909ef31922b2d733d756f66d87345b3e5e52b7a55f13d"}, + {file = "debugpy-1.8.20-cp312-cp312-manylinux_2_34_x86_64.whl", hash = "sha256:88f47850a4284b88bd2bfee1f26132147d5d504e4e86c22485dfa44b97e19b4b"}, + {file = "debugpy-1.8.20-cp312-cp312-win32.whl", hash = "sha256:4057ac68f892064e5f98209ab582abfee3b543fb55d2e87610ddc133a954d390"}, + {file = "debugpy-1.8.20-cp312-cp312-win_amd64.whl", hash = "sha256:a1a8f851e7cf171330679ef6997e9c579ef6dd33c9098458bd9986a0f4ca52e3"}, + {file = "debugpy-1.8.20-cp313-cp313-macosx_15_0_universal2.whl", hash = "sha256:5dff4bb27027821fdfcc9e8f87309a28988231165147c31730128b1c983e282a"}, + {file = "debugpy-1.8.20-cp313-cp313-manylinux_2_34_x86_64.whl", hash = "sha256:84562982dd7cf5ebebfdea667ca20a064e096099997b175fe204e86817f64eaf"}, + {file = "debugpy-1.8.20-cp313-cp313-win32.whl", hash = "sha256:da11dea6447b2cadbf8ce2bec59ecea87cc18d2c574980f643f2d2dfe4862393"}, + {file = "debugpy-1.8.20-cp313-cp313-win_amd64.whl", hash = "sha256:eb506e45943cab2efb7c6eafdd65b842f3ae779f020c82221f55aca9de135ed7"}, + {file = "debugpy-1.8.20-cp314-cp314-macosx_15_0_universal2.whl", hash = "sha256:9c74df62fc064cd5e5eaca1353a3ef5a5d50da5eb8058fcef63106f7bebe6173"}, + {file = "debugpy-1.8.20-cp314-cp314-manylinux_2_34_x86_64.whl", hash = "sha256:077a7447589ee9bc1ff0cdf443566d0ecf540ac8aa7333b775ebcb8ce9f4ecad"}, + {file = "debugpy-1.8.20-cp314-cp314-win32.whl", hash = "sha256:352036a99dd35053b37b7803f748efc456076f929c6a895556932eaf2d23b07f"}, + {file = "debugpy-1.8.20-cp314-cp314-win_amd64.whl", hash = "sha256:a98eec61135465b062846112e5ecf2eebb855305acc1dfbae43b72903b8ab5be"}, + {file = "debugpy-1.8.20-cp38-cp38-macosx_15_0_x86_64.whl", hash = "sha256:b773eb026a043e4d9c76265742bc846f2f347da7e27edf7fe97716ea19d6bfc5"}, + {file = "debugpy-1.8.20-cp38-cp38-manylinux_2_34_x86_64.whl", hash = "sha256:20d6e64ea177ab6732bffd3ce8fc6fb8879c60484ce14c3b3fe183b1761459ca"}, + {file = "debugpy-1.8.20-cp38-cp38-win32.whl", hash = "sha256:0dfd9adb4b3c7005e9c33df430bcdd4e4ebba70be533e0066e3a34d210041b66"}, + {file = "debugpy-1.8.20-cp38-cp38-win_amd64.whl", hash = "sha256:60f89411a6c6afb89f18e72e9091c3dfbcfe3edc1066b2043a1f80a3bbb3e11f"}, + {file = "debugpy-1.8.20-cp39-cp39-macosx_15_0_x86_64.whl", hash = "sha256:bff8990f040dacb4c314864da95f7168c5a58a30a66e0eea0fb85e2586a92cd6"}, + {file = "debugpy-1.8.20-cp39-cp39-manylinux_2_34_x86_64.whl", hash = "sha256:70ad9ae09b98ac307b82c16c151d27ee9d68ae007a2e7843ba621b5ce65333b5"}, + {file = "debugpy-1.8.20-cp39-cp39-win32.whl", hash = "sha256:9eeed9f953f9a23850c85d440bf51e3c56ed5d25f8560eeb29add815bd32f7ee"}, + {file = "debugpy-1.8.20-cp39-cp39-win_amd64.whl", hash = "sha256:760813b4fff517c75bfe7923033c107104e76acfef7bda011ffea8736e9a66f8"}, + {file = "debugpy-1.8.20-py2.py3-none-any.whl", hash = "sha256:5be9bed9ae3be00665a06acaa48f8329d2b9632f15fd09f6a9a8c8d9907e54d7"}, + {file = "debugpy-1.8.20.tar.gz", hash = "sha256:55bc8701714969f1ab89a6d5f2f3d40c36f91b2cbe2f65d98bf8196f6a6a2c33"}, ] [[package]] name = "decorator" -version = "5.2.1" +version = "4.4.2" description = "Decorators for Humans" optional = false -python-versions = ">=3.8" +python-versions = ">=2.6, !=3.0.*, !=3.1.*" groups = ["main"] +markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ - {file = "decorator-5.2.1-py3-none-any.whl", hash = "sha256:d316bb415a2d9e2d2b3abcc4084c6502fc09240e292cd76a76afc106a1c8e04a"}, - {file = "decorator-5.2.1.tar.gz", hash = "sha256:65f266143752f734b0a7cc83c46f4618af75b8c5911b00ccb61d0ac9b6da0360"}, + {file = "decorator-4.4.2-py2.py3-none-any.whl", hash = "sha256:41fa54c2a0cc4ba648be4fd43cff00aedf5b9465c9bf18d64325bc225f08f760"}, + {file = "decorator-4.4.2.tar.gz", hash = "sha256:e3a62f0520172440ca0dcc823749319382e377f37f140a0b99ef45fecb84bfe7"}, ] [[package]] name = "deprecated" -version = "1.2.18" +version = "1.3.1" description = "Python @deprecated decorator to deprecate old python classes, functions or methods." optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7" groups = ["main"] +markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ - {file = "Deprecated-1.2.18-py2.py3-none-any.whl", hash = "sha256:bd5011788200372a32418f888e326a09ff80d0214bd961147cfed01b5c018eec"}, - {file = "deprecated-1.2.18.tar.gz", hash = "sha256:422b6f6d859da6f2ef57857761bfb392480502a64c3028ca9bbe86085d72115d"}, + {file = "deprecated-1.3.1-py2.py3-none-any.whl", hash = "sha256:597bfef186b6f60181535a29fbe44865ce137a5079f295b479886c82729d5f3f"}, + {file = "deprecated-1.3.1.tar.gz", hash = "sha256:b1b50e0ff0c1fddaa5708a2c6b0a6588bb09b892825ab2b214ac9ea9d92a5223"}, ] [package.dependencies] -wrapt = ">=1.10,<2" +wrapt = ">=1.10,<3" [package.extras] dev = ["PyTest", "PyTest-Cov", "bump2version (<1)", "setuptools ; python_version >= \"3.12\"", "tox"] [[package]] name = "dill" -version = "0.3.9" +version = "0.4.1" description = "serialize all of Python" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" groups = ["main"] +markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ - {file = "dill-0.3.9-py3-none-any.whl", hash = "sha256:468dff3b89520b474c0397703366b7b95eebe6303f108adf9b19da1f702be87a"}, - {file = "dill-0.3.9.tar.gz", hash = "sha256:81aa267dddf68cbfe8029c42ca9ec6a4ab3b22371d1c450abc54422577b4512c"}, + {file = "dill-0.4.1-py3-none-any.whl", hash = "sha256:1e1ce33e978ae97fcfcff5638477032b801c46c7c65cf717f95fbc2248f79a9d"}, + {file = "dill-0.4.1.tar.gz", hash = "sha256:423092df4182177d4d8ba8290c8a5b640c66ab35ec7da59ccfa00f6fa3eea5fa"}, ] [package.extras] @@ -785,26 +764,33 @@ profile = ["gprof2dot (>=2022.7.29)"] [[package]] name = "docstring-parser" -version = "0.16" +version = "0.17.0" description = "Parse Python docstrings in reST, Google and Numpydoc format" optional = false -python-versions = ">=3.6,<4.0" +python-versions = ">=3.8" groups = ["main"] +markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ - {file = "docstring_parser-0.16-py3-none-any.whl", hash = "sha256:bf0a1387354d3691d102edef7ec124f219ef639982d096e26e3b60aeffa90637"}, - {file = "docstring_parser-0.16.tar.gz", hash = "sha256:538beabd0af1e2db0146b6bd3caa526c35a34d61af9fd2887f3a8a27a739aa6e"}, + {file = "docstring_parser-0.17.0-py3-none-any.whl", hash = "sha256:cf2569abd23dce8099b300f9b4fa8191e9582dda731fd533daf54c4551658708"}, + {file = "docstring_parser-0.17.0.tar.gz", hash = "sha256:583de4a309722b3315439bb31d64ba3eebada841f2e2cee23b99df001434c912"}, ] +[package.extras] +dev = ["pre-commit (>=2.16.0) ; python_version >= \"3.9\"", "pydoctor (>=25.4.0)", "pytest"] +docs = ["pydoctor (>=25.4.0)"] +test = ["pytest"] + [[package]] name = "ema-workbench" -version = "2.5.0" +version = "2.5.3" description = "Exploratory modelling in Python" optional = false python-versions = ">=3.9" groups = ["main"] +markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ - {file = "ema_workbench-2.5.0-py3-none-any.whl", hash = "sha256:fb4f163fe24530163ed6cd8250f443e96bcef1cc2e561d767a8291a3c68ab5c2"}, - {file = "ema_workbench-2.5.0.tar.gz", hash = "sha256:0a2feeeb53fbe87f4586106bd644bf52e216e9f29df0550012e90858a5682d7e"}, + {file = "ema_workbench-2.5.3-py3-none-any.whl", hash = "sha256:d616621d15db74ef773fe8a8b7d2ee3b83d6c8e190f51f60e3a2d612e2f84634"}, + {file = "ema_workbench-2.5.3.tar.gz", hash = "sha256:e5ce847c3631a421cd1d3052bf6862e0ca3a0d58d2745de1ec4fb7c995abff80"}, ] [package.dependencies] @@ -819,60 +805,48 @@ statsmodels = "*" tqdm = "*" [package.extras] -all = ["ema-workbench[cov,dev,docs,graph,jupyter,parallel]"] +all = ["ema_workbench[cov,dev,docs,graph,jupyter,parallel]"] cov = ["coverage", "coveralls", "pytest-cov"] -dev = ["ipyparallel", "jupyter-client", "pytest", "pytest-mock"] +dev = ["ipyparallel", "jupyter_client", "pytest", "pytest-mock"] docs = ["myst", "myst-parser", "nbsphinx", "pyscaffold", "readthedocs-sphinx-search", "sphinx", "sphinx-rtd-theme"] graph = ["altair", "graphviz", "pydot"] -jupyter = ["ipykernel", "ipython", "jupyter", "jupyter-client"] +jupyter = ["ipykernel", "ipython", "jupyter", "jupyter_client"] netlogo = ["jpype-1", "pynetlogo"] parallel = ["ipyparallel", "traitlets"] pysd = ["pysd"] -recommended = ["ema-workbench[dev,graph,jupyter]"] +recommended = ["ema_workbench[dev,graph,jupyter]"] simio = ["pythonnet"] -[[package]] -name = "eval-type-backport" -version = "0.2.2" -description = "Like `typing._eval_type`, but lets older Python versions use newer typing features." -optional = false -python-versions = ">=3.8" -groups = ["main"] -markers = "python_version == \"3.9\"" -files = [ - {file = "eval_type_backport-0.2.2-py3-none-any.whl", hash = "sha256:cb6ad7c393517f476f96d456d0412ea80f0a8cf96f6892834cd9340149111b0a"}, - {file = "eval_type_backport-0.2.2.tar.gz", hash = "sha256:f0576b4cf01ebb5bd358d02314d31846af5e07678387486e2c798af0e7d849c1"}, -] - -[package.extras] -tests = ["pytest"] - [[package]] name = "exceptiongroup" -version = "1.2.2" +version = "1.3.1" description = "Backport of PEP 654 (exception groups)" optional = false python-versions = ">=3.7" groups = ["main"] -markers = "python_version < \"3.11\"" +markers = "python_version == \"3.10\" and (sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\")" files = [ - {file = "exceptiongroup-1.2.2-py3-none-any.whl", hash = "sha256:3111b9d131c238bec2f8f516e123e14ba243563fb135d3fe885990585aa7795b"}, - {file = "exceptiongroup-1.2.2.tar.gz", hash = "sha256:47c2edf7c6738fafb49fd34290706d1a1a2f4d1c6df275526b62cbb4aa5393cc"}, + {file = "exceptiongroup-1.3.1-py3-none-any.whl", hash = "sha256:a7a39a3bd276781e98394987d3a5701d0c4edffb633bb7a5144577f82c773598"}, + {file = "exceptiongroup-1.3.1.tar.gz", hash = "sha256:8b412432c6055b0b7d14c310000ae93352ed6754f70fa8f7c34141f91c4e3219"}, ] +[package.dependencies] +typing-extensions = {version = ">=4.6.0", markers = "python_version < \"3.13\""} + [package.extras] test = ["pytest (>=6)"] [[package]] name = "executing" -version = "2.2.0" +version = "2.2.1" description = "Get the currently executing AST node of a frame, and other information" optional = false python-versions = ">=3.8" groups = ["main"] +markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ - {file = "executing-2.2.0-py2.py3-none-any.whl", hash = "sha256:11387150cad388d62750327a53d3339fad4888b39a6fe233c3afbb54ecffd3aa"}, - {file = "executing-2.2.0.tar.gz", hash = "sha256:5d108c028108fe2551d1a7b2e8b713341e2cb4fc0aa7dcf966fa4327a5226755"}, + {file = "executing-2.2.1-py2.py3-none-any.whl", hash = "sha256:760643d3452b4d777d295bb167ccc74c64a81df23fb5e08eff250c425a4b2017"}, + {file = "executing-2.2.1.tar.gz", hash = "sha256:3632cc370565f6648cc328b32435bd120a1e4ebb20c77e3fdde9a13cd1e533c4"}, ] [package.extras] @@ -885,6 +859,7 @@ description = "Finite-amplitude Impulse Response (FaIR) simple climate model" optional = false python-versions = ">=3.8, <4" groups = ["main"] +markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "fair-2.1.3-py3-none-any.whl", hash = "sha256:1ae7699ba76874a33b11934eb4deb769112e7b7d3b02b17a7b9fbb4631c15c38"}, {file = "fair-2.1.3.tar.gz", hash = "sha256:16060fcd79d9abfb202054c320f3faababf4d46e633390d16c95b2a4055d7e0d"}, @@ -913,6 +888,7 @@ description = "Notifications for all Farama Foundation maintained libraries." optional = false python-versions = "*" groups = ["main"] +markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "Farama-Notifications-0.0.4.tar.gz", hash = "sha256:13fceff2d14314cf80703c8266462ebf3733c7d165336eee998fc58e545efd18"}, {file = "Farama_Notifications-0.0.4-py3-none-any.whl", hash = "sha256:14de931035a41961f7c056361dc7f980762a143d05791ef5794a751a2caf05ae"}, @@ -920,119 +896,121 @@ files = [ [[package]] name = "filelock" -version = "3.18.0" +version = "3.25.2" description = "A platform independent file lock." optional = false -python-versions = ">=3.9" +python-versions = ">=3.10" groups = ["main"] +markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ - {file = "filelock-3.18.0-py3-none-any.whl", hash = "sha256:c401f4f8377c4464e6db25fff06205fd89bdd83b65eb0488ed1b160f780e21de"}, - {file = "filelock-3.18.0.tar.gz", hash = "sha256:adbc88eabb99d2fec8c9c1b229b171f18afa655400173ddc653d5d01501fb9f2"}, + {file = "filelock-3.25.2-py3-none-any.whl", hash = "sha256:ca8afb0da15f229774c9ad1b455ed96e85a81373065fb10446672f64444ddf70"}, + {file = "filelock-3.25.2.tar.gz", hash = "sha256:b64ece2b38f4ca29dd3e810287aa8c48182bbecd1ae6e9ae126c9b35f1382694"}, ] -[package.extras] -docs = ["furo (>=2024.8.6)", "sphinx (>=8.1.3)", "sphinx-autodoc-typehints (>=3)"] -testing = ["covdefaults (>=2.3)", "coverage (>=7.6.10)", "diff-cover (>=9.2.1)", "pytest (>=8.3.4)", "pytest-asyncio (>=0.25.2)", "pytest-cov (>=6)", "pytest-mock (>=3.14)", "pytest-timeout (>=2.3.1)", "virtualenv (>=20.28.1)"] -typing = ["typing-extensions (>=4.12.2) ; python_version < \"3.11\""] - [[package]] name = "fire" -version = "0.7.0" +version = "0.7.1" description = "A library for automatically generating command line interfaces." optional = false -python-versions = "*" +python-versions = ">=3.7" groups = ["main"] +markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ - {file = "fire-0.7.0.tar.gz", hash = "sha256:961550f07936eaf65ad1dc8360f2b2bf8408fad46abbfa4d2a3794f8d2a95cdf"}, + {file = "fire-0.7.1-py3-none-any.whl", hash = "sha256:e43fd8a5033a9001e7e2973bab96070694b9f12f2e0ecf96d4683971b5ab1882"}, + {file = "fire-0.7.1.tar.gz", hash = "sha256:3b208f05c736de98fb343310d090dcc4d8c78b2a89ea4f32b837c586270a9cbf"}, ] [package.dependencies] termcolor = "*" +[package.extras] +test = ["hypothesis (<6.136.0)", "levenshtein (<=0.27.1)", "pip", "pylint (<3.3.8)", "pytest (<=8.4.1)", "pytest-pylint (<=1.1.2)", "pytest-runner (<7.0.0)", "setuptools (<=80.9.0)", "termcolor (<3.2.0)"] + [[package]] name = "fonttools" -version = "4.57.0" +version = "4.62.1" description = "Tools to manipulate font files" optional = false -python-versions = ">=3.8" +python-versions = ">=3.10" groups = ["main"] -files = [ - {file = "fonttools-4.57.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:babe8d1eb059a53e560e7bf29f8e8f4accc8b6cfb9b5fd10e485bde77e71ef41"}, - {file = "fonttools-4.57.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:81aa97669cd726349eb7bd43ca540cf418b279ee3caba5e2e295fb4e8f841c02"}, - {file = "fonttools-4.57.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f0e9618630edd1910ad4f07f60d77c184b2f572c8ee43305ea3265675cbbfe7e"}, - {file = "fonttools-4.57.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:34687a5d21f1d688d7d8d416cb4c5b9c87fca8a1797ec0d74b9fdebfa55c09ab"}, - {file = "fonttools-4.57.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:69ab81b66ebaa8d430ba56c7a5f9abe0183afefd3a2d6e483060343398b13fb1"}, - {file = "fonttools-4.57.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:d639397de852f2ccfb3134b152c741406752640a266d9c1365b0f23d7b88077f"}, - {file = "fonttools-4.57.0-cp310-cp310-win32.whl", hash = "sha256:cc066cb98b912f525ae901a24cd381a656f024f76203bc85f78fcc9e66ae5aec"}, - {file = "fonttools-4.57.0-cp310-cp310-win_amd64.whl", hash = "sha256:7a64edd3ff6a7f711a15bd70b4458611fb240176ec11ad8845ccbab4fe6745db"}, - {file = "fonttools-4.57.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:3871349303bdec958360eedb619169a779956503ffb4543bb3e6211e09b647c4"}, - {file = "fonttools-4.57.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c59375e85126b15a90fcba3443eaac58f3073ba091f02410eaa286da9ad80ed8"}, - {file = "fonttools-4.57.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:967b65232e104f4b0f6370a62eb33089e00024f2ce143aecbf9755649421c683"}, - {file = "fonttools-4.57.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:39acf68abdfc74e19de7485f8f7396fa4d2418efea239b7061d6ed6a2510c746"}, - {file = "fonttools-4.57.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:9d077f909f2343daf4495ba22bb0e23b62886e8ec7c109ee8234bdbd678cf344"}, - {file = "fonttools-4.57.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:46370ac47a1e91895d40e9ad48effbe8e9d9db1a4b80888095bc00e7beaa042f"}, - {file = "fonttools-4.57.0-cp311-cp311-win32.whl", hash = "sha256:ca2aed95855506b7ae94e8f1f6217b7673c929e4f4f1217bcaa236253055cb36"}, - {file = "fonttools-4.57.0-cp311-cp311-win_amd64.whl", hash = "sha256:17168a4670bbe3775f3f3f72d23ee786bd965395381dfbb70111e25e81505b9d"}, - {file = "fonttools-4.57.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:889e45e976c74abc7256d3064aa7c1295aa283c6bb19810b9f8b604dfe5c7f31"}, - {file = "fonttools-4.57.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:0425c2e052a5f1516c94e5855dbda706ae5a768631e9fcc34e57d074d1b65b92"}, - {file = "fonttools-4.57.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:44c26a311be2ac130f40a96769264809d3b0cb297518669db437d1cc82974888"}, - {file = "fonttools-4.57.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:84c41ba992df5b8d680b89fd84c6a1f2aca2b9f1ae8a67400c8930cd4ea115f6"}, - {file = "fonttools-4.57.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:ea1e9e43ca56b0c12440a7c689b1350066595bebcaa83baad05b8b2675129d98"}, - {file = "fonttools-4.57.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:84fd56c78d431606332a0627c16e2a63d243d0d8b05521257d77c6529abe14d8"}, - {file = "fonttools-4.57.0-cp312-cp312-win32.whl", hash = "sha256:f4376819c1c778d59e0a31db5dc6ede854e9edf28bbfa5b756604727f7f800ac"}, - {file = "fonttools-4.57.0-cp312-cp312-win_amd64.whl", hash = "sha256:57e30241524879ea10cdf79c737037221f77cc126a8cdc8ff2c94d4a522504b9"}, - {file = "fonttools-4.57.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:408ce299696012d503b714778d89aa476f032414ae57e57b42e4b92363e0b8ef"}, - {file = "fonttools-4.57.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:bbceffc80aa02d9e8b99f2a7491ed8c4a783b2fc4020119dc405ca14fb5c758c"}, - {file = "fonttools-4.57.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f022601f3ee9e1f6658ed6d184ce27fa5216cee5b82d279e0f0bde5deebece72"}, - {file = "fonttools-4.57.0-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4dea5893b58d4637ffa925536462ba626f8a1b9ffbe2f5c272cdf2c6ebadb817"}, - {file = "fonttools-4.57.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:dff02c5c8423a657c550b48231d0a48d7e2b2e131088e55983cfe74ccc2c7cc9"}, - {file = "fonttools-4.57.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:767604f244dc17c68d3e2dbf98e038d11a18abc078f2d0f84b6c24571d9c0b13"}, - {file = "fonttools-4.57.0-cp313-cp313-win32.whl", hash = "sha256:8e2e12d0d862f43d51e5afb8b9751c77e6bec7d2dc00aad80641364e9df5b199"}, - {file = "fonttools-4.57.0-cp313-cp313-win_amd64.whl", hash = "sha256:f1d6bc9c23356908db712d282acb3eebd4ae5ec6d8b696aa40342b1d84f8e9e3"}, - {file = "fonttools-4.57.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:9d57b4e23ebbe985125d3f0cabbf286efa191ab60bbadb9326091050d88e8213"}, - {file = "fonttools-4.57.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:579ba873d7f2a96f78b2e11028f7472146ae181cae0e4d814a37a09e93d5c5cc"}, - {file = "fonttools-4.57.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6e3e1ec10c29bae0ea826b61f265ec5c858c5ba2ce2e69a71a62f285cf8e4595"}, - {file = "fonttools-4.57.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a1968f2a2003c97c4ce6308dc2498d5fd4364ad309900930aa5a503c9851aec8"}, - {file = "fonttools-4.57.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:aff40f8ac6763d05c2c8f6d240c6dac4bb92640a86d9b0c3f3fff4404f34095c"}, - {file = "fonttools-4.57.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:d07f1b64008e39fceae7aa99e38df8385d7d24a474a8c9872645c4397b674481"}, - {file = "fonttools-4.57.0-cp38-cp38-win32.whl", hash = "sha256:51d8482e96b28fb28aa8e50b5706f3cee06de85cbe2dce80dbd1917ae22ec5a6"}, - {file = "fonttools-4.57.0-cp38-cp38-win_amd64.whl", hash = "sha256:03290e818782e7edb159474144fca11e36a8ed6663d1fcbd5268eb550594fd8e"}, - {file = "fonttools-4.57.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7339e6a3283e4b0ade99cade51e97cde3d54cd6d1c3744459e886b66d630c8b3"}, - {file = "fonttools-4.57.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:05efceb2cb5f6ec92a4180fcb7a64aa8d3385fd49cfbbe459350229d1974f0b1"}, - {file = "fonttools-4.57.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a97bb05eb24637714a04dee85bdf0ad1941df64fe3b802ee4ac1c284a5f97b7c"}, - {file = "fonttools-4.57.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:541cb48191a19ceb1a2a4b90c1fcebd22a1ff7491010d3cf840dd3a68aebd654"}, - {file = "fonttools-4.57.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:cdef9a056c222d0479a1fdb721430f9efd68268014c54e8166133d2643cb05d9"}, - {file = "fonttools-4.57.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:3cf97236b192a50a4bf200dc5ba405aa78d4f537a2c6e4c624bb60466d5b03bd"}, - {file = "fonttools-4.57.0-cp39-cp39-win32.whl", hash = "sha256:e952c684274a7714b3160f57ec1d78309f955c6335c04433f07d36c5eb27b1f9"}, - {file = "fonttools-4.57.0-cp39-cp39-win_amd64.whl", hash = "sha256:a2a722c0e4bfd9966a11ff55c895c817158fcce1b2b6700205a376403b546ad9"}, - {file = "fonttools-4.57.0-py3-none-any.whl", hash = "sha256:3122c604a675513c68bd24c6a8f9091f1c2376d18e8f5fe5a101746c81b3e98f"}, - {file = "fonttools-4.57.0.tar.gz", hash = "sha256:727ece10e065be2f9dd239d15dd5d60a66e17eac11aea47d447f9f03fdbc42de"}, +markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" +files = [ + {file = "fonttools-4.62.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:ad5cca75776cd453b1b035b530e943334957ae152a36a88a320e779d61fc980c"}, + {file = "fonttools-4.62.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0b3ae47e8636156a9accff64c02c0924cbebad62854c4a6dbdc110cd5b4b341a"}, + {file = "fonttools-4.62.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c9b9e288b4da2f64fd6180644221749de651703e8d0c16bd4b719533a3a7d6e3"}, + {file = "fonttools-4.62.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:7bca7a1c1faf235ffe25d4f2e555246b4750220b38de8261d94ebc5ce8a23c23"}, + {file = "fonttools-4.62.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:b4e0fcf265ad26e487c56cb12a42dffe7162de708762db951e1b3f755319507d"}, + {file = "fonttools-4.62.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:2d850f66830a27b0d498ee05adb13a3781637b1826982cd7e2b3789ef0cc71ae"}, + {file = "fonttools-4.62.1-cp310-cp310-win32.whl", hash = "sha256:486f32c8047ccd05652aba17e4a8819a3a9d78570eb8a0e3b4503142947880ed"}, + {file = "fonttools-4.62.1-cp310-cp310-win_amd64.whl", hash = "sha256:5a648bde915fba9da05ae98856987ca91ba832949a9e2888b48c47ef8b96c5a9"}, + {file = "fonttools-4.62.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:40975849bac44fb0b9253d77420c6d8b523ac4dcdcefeff6e4d706838a5b80f7"}, + {file = "fonttools-4.62.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:9dde91633f77fa576879a0c76b1d89de373cae751a98ddf0109d54e173b40f14"}, + {file = "fonttools-4.62.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6acb4109f8bee00fec985c8c7afb02299e35e9c94b57287f3ea542f28bd0b0a7"}, + {file = "fonttools-4.62.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:1c5c25671ce8805e0d080e2ffdeca7f1e86778c5cbfbeae86d7f866d8830517b"}, + {file = "fonttools-4.62.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:a5d8825e1140f04e6c99bb7d37a9e31c172f3bc208afbe02175339e699c710e1"}, + {file = "fonttools-4.62.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:268abb1cb221e66c014acc234e872b7870d8b5d4657a83a8f4205094c32d2416"}, + {file = "fonttools-4.62.1-cp311-cp311-win32.whl", hash = "sha256:942b03094d7edbb99bdf1ae7e9090898cad7bf9030b3d21f33d7072dbcb51a53"}, + {file = "fonttools-4.62.1-cp311-cp311-win_amd64.whl", hash = "sha256:e8514f4924375f77084e81467e63238b095abda5107620f49421c368a6017ed2"}, + {file = "fonttools-4.62.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:90365821debbd7db678809c7491ca4acd1e0779b9624cdc6ddaf1f31992bf974"}, + {file = "fonttools-4.62.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:12859ff0b47dd20f110804c3e0d0970f7b832f561630cd879969011541a464a9"}, + {file = "fonttools-4.62.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9c125ffa00c3d9003cdaaf7f2c79e6e535628093e14b5de1dccb08859b680936"}, + {file = "fonttools-4.62.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:149f7d84afca659d1a97e39a4778794a2f83bf344c5ee5134e09995086cc2392"}, + {file = "fonttools-4.62.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:0aa72c43a601cfa9273bb1ae0518f1acadc01ee181a6fc60cd758d7fdadffc04"}, + {file = "fonttools-4.62.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:19177c8d96c7c36359266e571c5173bcee9157b59cfc8cb0153c5673dc5a3a7d"}, + {file = "fonttools-4.62.1-cp312-cp312-win32.whl", hash = "sha256:a24decd24d60744ee8b4679d38e88b8303d86772053afc29b19d23bb8207803c"}, + {file = "fonttools-4.62.1-cp312-cp312-win_amd64.whl", hash = "sha256:9e7863e10b3de72376280b515d35b14f5eeed639d1aa7824f4cf06779ec65e42"}, + {file = "fonttools-4.62.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:c22b1014017111c401469e3acc5433e6acf6ebcc6aa9efb538a533c800971c79"}, + {file = "fonttools-4.62.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:68959f5fc58ed4599b44aad161c2837477d7f35f5f79402d97439974faebfebe"}, + {file = "fonttools-4.62.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ef46db46c9447103b8f3ff91e8ba009d5fe181b1920a83757a5762551e32bb68"}, + {file = "fonttools-4.62.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:6706d1cb1d5e6251a97ad3c1b9347505c5615c112e66047abbef0f8545fa30d1"}, + {file = "fonttools-4.62.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:2e7abd2b1e11736f58c1de27819e1955a53267c21732e78243fa2fa2e5c1e069"}, + {file = "fonttools-4.62.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:403d28ce06ebfc547fbcb0cb8b7f7cc2f7a2d3e1a67ba9a34b14632df9e080f9"}, + {file = "fonttools-4.62.1-cp313-cp313-win32.whl", hash = "sha256:93c316e0f5301b2adbe6a5f658634307c096fd5aae60a5b3412e4f3e1728ab24"}, + {file = "fonttools-4.62.1-cp313-cp313-win_amd64.whl", hash = "sha256:7aa21ff53e28a9c2157acbc44e5b401149d3c9178107130e82d74ceb500e5056"}, + {file = "fonttools-4.62.1-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:fa1d16210b6b10a826d71bed68dd9ec24a9e218d5a5e2797f37c573e7ec215ca"}, + {file = "fonttools-4.62.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:aa69d10ed420d8121118e628ad47d86e4caa79ba37f968597b958f6cceab7eca"}, + {file = "fonttools-4.62.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bd13b7999d59c5eb1c2b442eb2d0c427cb517a0b7a1f5798fc5c9e003f5ff782"}, + {file = "fonttools-4.62.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:8d337fdd49a79b0d51c4da87bc38169d21c3abbf0c1aa9367eff5c6656fb6dae"}, + {file = "fonttools-4.62.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:d241cdc4a67b5431c6d7f115fdf63335222414995e3a1df1a41e1182acd4bcc7"}, + {file = "fonttools-4.62.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:c05557a78f8fa514da0f869556eeda40887a8abc77c76ee3f74cf241778afd5a"}, + {file = "fonttools-4.62.1-cp314-cp314-win32.whl", hash = "sha256:49a445d2f544ce4a69338694cad575ba97b9a75fff02720da0882d1a73f12800"}, + {file = "fonttools-4.62.1-cp314-cp314-win_amd64.whl", hash = "sha256:1eecc128c86c552fb963fe846ca4e011b1be053728f798185a1687502f6d398e"}, + {file = "fonttools-4.62.1-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:1596aeaddf7f78e21e68293c011316a25267b3effdaccaf4d59bc9159d681b82"}, + {file = "fonttools-4.62.1-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:8f8fca95d3bb3208f59626a4b0ea6e526ee51f5a8ad5d91821c165903e8d9260"}, + {file = "fonttools-4.62.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ee91628c08e76f77b533d65feb3fbe6d9dad699f95be51cf0d022db94089cdc4"}, + {file = "fonttools-4.62.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:5f37df1cac61d906e7b836abe356bc2f34c99d4477467755c216b72aa3dc748b"}, + {file = "fonttools-4.62.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:92bb00a947e666169c99b43753c4305fc95a890a60ef3aeb2a6963e07902cc87"}, + {file = "fonttools-4.62.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:bdfe592802ef939a0e33106ea4a318eeb17822c7ee168c290273cbd5fabd746c"}, + {file = "fonttools-4.62.1-cp314-cp314t-win32.whl", hash = "sha256:b820fcb92d4655513d8402d5b219f94481c4443d825b4372c75a2072aa4b357a"}, + {file = "fonttools-4.62.1-cp314-cp314t-win_amd64.whl", hash = "sha256:59b372b4f0e113d3746b88985f1c796e7bf830dd54b28374cd85c2b8acd7583e"}, + {file = "fonttools-4.62.1-py3-none-any.whl", hash = "sha256:7487782e2113861f4ddcc07c3436450659e3caa5e470b27dc2177cade2d8e7fd"}, + {file = "fonttools-4.62.1.tar.gz", hash = "sha256:e54c75fd6041f1122476776880f7c3c3295ffa31962dc6ebe2543c00dca58b5d"}, ] [package.extras] -all = ["brotli (>=1.0.1) ; platform_python_implementation == \"CPython\"", "brotlicffi (>=0.8.0) ; platform_python_implementation != \"CPython\"", "fs (>=2.2.0,<3)", "lxml (>=4.0)", "lz4 (>=1.7.4.2)", "matplotlib", "munkres ; platform_python_implementation == \"PyPy\"", "pycairo", "scipy ; platform_python_implementation != \"PyPy\"", "skia-pathops (>=0.5.0)", "sympy", "uharfbuzz (>=0.23.0)", "unicodedata2 (>=15.1.0) ; python_version <= \"3.12\"", "xattr ; sys_platform == \"darwin\"", "zopfli (>=0.1.4)"] +all = ["brotli (>=1.0.1) ; platform_python_implementation == \"CPython\"", "brotlicffi (>=0.8.0) ; platform_python_implementation != \"CPython\"", "lxml (>=4.0)", "lz4 (>=1.7.4.2)", "matplotlib", "munkres ; platform_python_implementation == \"PyPy\"", "pycairo", "scipy ; platform_python_implementation != \"PyPy\"", "skia-pathops (>=0.5.0)", "sympy", "uharfbuzz (>=0.45.0)", "unicodedata2 (>=17.0.0) ; python_version <= \"3.14\"", "xattr ; sys_platform == \"darwin\"", "zopfli (>=0.1.4)"] graphite = ["lz4 (>=1.7.4.2)"] interpolatable = ["munkres ; platform_python_implementation == \"PyPy\"", "pycairo", "scipy ; platform_python_implementation != \"PyPy\""] lxml = ["lxml (>=4.0)"] pathops = ["skia-pathops (>=0.5.0)"] plot = ["matplotlib"] -repacker = ["uharfbuzz (>=0.23.0)"] +repacker = ["uharfbuzz (>=0.45.0)"] symfont = ["sympy"] type1 = ["xattr ; sys_platform == \"darwin\""] -ufo = ["fs (>=2.2.0,<3)"] -unicode = ["unicodedata2 (>=15.1.0) ; python_version <= \"3.12\""] +unicode = ["unicodedata2 (>=17.0.0) ; python_version <= \"3.14\""] woff = ["brotli (>=1.0.1) ; platform_python_implementation == \"CPython\"", "brotlicffi (>=0.8.0) ; platform_python_implementation != \"CPython\"", "zopfli (>=0.1.4)"] [[package]] name = "fsspec" -version = "2025.5.1" +version = "2026.2.0" description = "File-system specification" optional = false -python-versions = ">=3.9" +python-versions = ">=3.10" groups = ["main"] +markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ - {file = "fsspec-2025.5.1-py3-none-any.whl", hash = "sha256:24d3a2e663d5fc735ab256263c4075f374a174c3410c0b25e5bd1970bceaa462"}, - {file = "fsspec-2025.5.1.tar.gz", hash = "sha256:2e55e47a540b91843b755e83ded97c6e897fa0942b11490113f09e9c443c2475"}, + {file = "fsspec-2026.2.0-py3-none-any.whl", hash = "sha256:98de475b5cb3bd66bedd5c4679e87b4fdfe1a3bf4d707b151b3c07e58c9a2437"}, + {file = "fsspec-2026.2.0.tar.gz", hash = "sha256:6544e34b16869f5aacd5b90bdf1a71acb37792ea3ddf6125ee69a22a53fb8bff"}, ] [package.extras] @@ -1040,12 +1018,12 @@ abfs = ["adlfs"] adl = ["adlfs"] arrow = ["pyarrow (>=1)"] dask = ["dask", "distributed"] -dev = ["pre-commit", "ruff"] +dev = ["pre-commit", "ruff (>=0.5)"] doc = ["numpydoc", "sphinx", "sphinx-design", "sphinx-rtd-theme", "yarl"] dropbox = ["dropbox", "dropboxdrivefs", "requests"] -full = ["adlfs", "aiohttp (!=4.0.0a0,!=4.0.0a1)", "dask", "distributed", "dropbox", "dropboxdrivefs", "fusepy", "gcsfs", "libarchive-c", "ocifs", "panel", "paramiko", "pyarrow (>=1)", "pygit2", "requests", "s3fs", "smbprotocol", "tqdm"] +full = ["adlfs", "aiohttp (!=4.0.0a0,!=4.0.0a1)", "dask", "distributed", "dropbox", "dropboxdrivefs", "fusepy", "gcsfs (>2024.2.0)", "libarchive-c", "ocifs", "panel", "paramiko", "pyarrow (>=1)", "pygit2", "requests", "s3fs (>2024.2.0)", "smbprotocol", "tqdm"] fuse = ["fusepy"] -gcs = ["gcsfs"] +gcs = ["gcsfs (>2024.2.0)"] git = ["pygit2"] github = ["requests"] gs = ["gcsfs"] @@ -1054,13 +1032,13 @@ hdfs = ["pyarrow (>=1)"] http = ["aiohttp (!=4.0.0a0,!=4.0.0a1)"] libarchive = ["libarchive-c"] oci = ["ocifs"] -s3 = ["s3fs"] +s3 = ["s3fs (>2024.2.0)"] sftp = ["paramiko"] smb = ["smbprotocol"] ssh = ["paramiko"] test = ["aiohttp (!=4.0.0a0,!=4.0.0a1)", "numpy", "pytest", "pytest-asyncio (!=0.22.0)", "pytest-benchmark", "pytest-cov", "pytest-mock", "pytest-recording", "pytest-rerunfailures", "requests"] test-downstream = ["aiobotocore (>=2.5.4,<3.0.0)", "dask[dataframe,test]", "moto[server] (>4,<5)", "pytest-timeout", "xarray"] -test-full = ["adlfs", "aiohttp (!=4.0.0a0,!=4.0.0a1)", "cloudpickle", "dask", "distributed", "dropbox", "dropboxdrivefs", "fastparquet", "fusepy", "gcsfs", "jinja2", "kerchunk", "libarchive-c", "lz4", "notebook", "numpy", "ocifs", "pandas", "panel", "paramiko", "pyarrow", "pyarrow (>=1)", "pyftpdlib", "pygit2", "pytest", "pytest-asyncio (!=0.22.0)", "pytest-benchmark", "pytest-cov", "pytest-mock", "pytest-recording", "pytest-rerunfailures", "python-snappy", "requests", "smbprotocol", "tqdm", "urllib3", "zarr", "zstandard"] +test-full = ["adlfs", "aiohttp (!=4.0.0a0,!=4.0.0a1)", "backports-zstd ; python_version < \"3.14\"", "cloudpickle", "dask", "distributed", "dropbox", "dropboxdrivefs", "fastparquet", "fusepy", "gcsfs", "jinja2", "kerchunk", "libarchive-c", "lz4", "notebook", "numpy", "ocifs", "pandas (<3.0.0)", "panel", "paramiko", "pyarrow", "pyarrow (>=1)", "pyftpdlib", "pygit2", "pytest", "pytest-asyncio (!=0.22.0)", "pytest-benchmark", "pytest-cov", "pytest-mock", "pytest-recording", "pytest-rerunfailures", "python-snappy", "requests", "smbprotocol", "tqdm", "urllib3", "zarr", "zstandard ; python_version < \"3.14\""] tqdm = ["tqdm"] [[package]] @@ -1070,6 +1048,7 @@ description = "Git Object Database" optional = false python-versions = ">=3.7" groups = ["main"] +markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "gitdb-4.0.12-py3-none-any.whl", hash = "sha256:67073e15955400952c6565cc3e707c554a4eea2e428946f7a4c162fab9bd9bcf"}, {file = "gitdb-4.0.12.tar.gz", hash = "sha256:5ef71f855d191a3326fcfbc0d5da835f26b13fbcba60c32c21091c349ffdb571"}, @@ -1080,14 +1059,15 @@ smmap = ">=3.0.1,<6" [[package]] name = "gitpython" -version = "3.1.44" +version = "3.1.46" description = "GitPython is a Python library used to interact with Git repositories" optional = false python-versions = ">=3.7" groups = ["main"] +markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ - {file = "GitPython-3.1.44-py3-none-any.whl", hash = "sha256:9e0e10cda9bed1ee64bc9a6de50e7e38a9c9943241cd7f585f6df3ed28011110"}, - {file = "gitpython-3.1.44.tar.gz", hash = "sha256:c87e30b26253bf5418b01b0660f818967f3c503193838337fe5e573331249269"}, + {file = "gitpython-3.1.46-py3-none-any.whl", hash = "sha256:79812ed143d9d25b6d176a10bb511de0f9c67b1fa641d82097b0ab90398a2058"}, + {file = "gitpython-3.1.46.tar.gz", hash = "sha256:400124c7d0ef4ea03f7310ac2fbf7151e09ff97f2a3288d64a440c584a29c37f"}, ] [package.dependencies] @@ -1095,85 +1075,102 @@ gitdb = ">=4.0.1,<5" [package.extras] doc = ["sphinx (>=7.1.2,<7.2)", "sphinx-autodoc-typehints", "sphinx_rtd_theme"] -test = ["coverage[toml]", "ddt (>=1.1.1,!=1.4.3)", "mock ; python_version < \"3.8\"", "mypy", "pre-commit", "pytest (>=7.3.1)", "pytest-cov", "pytest-instafail", "pytest-mock", "pytest-sugar", "typing-extensions ; python_version < \"3.11\""] +test = ["coverage[toml]", "ddt (>=1.1.1,!=1.4.3)", "mock ; python_version < \"3.8\"", "mypy (==1.18.2) ; python_version >= \"3.9\"", "pre-commit", "pytest (>=7.3.1)", "pytest-cov", "pytest-instafail", "pytest-mock", "pytest-sugar", "typing-extensions ; python_version < \"3.11\""] [[package]] -name = "grapheme" -version = "0.6.0" +name = "graphemeu" +version = "0.7.2" description = "Unicode grapheme helpers" optional = false -python-versions = "*" +python-versions = ">=3.7" groups = ["main"] +markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ - {file = "grapheme-0.6.0.tar.gz", hash = "sha256:44c2b9f21bbe77cfb05835fec230bd435954275267fea1858013b102f8603cca"}, + {file = "graphemeu-0.7.2-py3-none-any.whl", hash = "sha256:1444520f6899fd30114fc2a39f297d86d10fa0f23bf7579f772f8bc7efaa2542"}, + {file = "graphemeu-0.7.2.tar.gz", hash = "sha256:42bbe373d7c146160f286cd5f76b1a8ad29172d7333ce10705c5cc282462a4f8"}, ] [package.extras] -test = ["pytest", "sphinx", "sphinx-autobuild", "twine", "wheel"] +dev = ["pytest"] +docs = ["sphinx", "sphinx-autobuild"] [[package]] name = "grpcio" -version = "1.73.0" +version = "1.78.0" description = "HTTP/2-based RPC framework" optional = false python-versions = ">=3.9" groups = ["main"] -files = [ - {file = "grpcio-1.73.0-cp310-cp310-linux_armv7l.whl", hash = "sha256:d050197eeed50f858ef6c51ab09514856f957dba7b1f7812698260fc9cc417f6"}, - {file = "grpcio-1.73.0-cp310-cp310-macosx_11_0_universal2.whl", hash = "sha256:ebb8d5f4b0200916fb292a964a4d41210de92aba9007e33d8551d85800ea16cb"}, - {file = "grpcio-1.73.0-cp310-cp310-manylinux_2_17_aarch64.whl", hash = "sha256:c0811331b469e3f15dda5f90ab71bcd9681189a83944fd6dc908e2c9249041ef"}, - {file = "grpcio-1.73.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:12787c791c3993d0ea1cc8bf90393647e9a586066b3b322949365d2772ba965b"}, - {file = "grpcio-1.73.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2c17771e884fddf152f2a0df12478e8d02853e5b602a10a9a9f1f52fa02b1d32"}, - {file = "grpcio-1.73.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:275e23d4c428c26b51857bbd95fcb8e528783597207ec592571e4372b300a29f"}, - {file = "grpcio-1.73.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:9ffc972b530bf73ef0f948f799482a1bf12d9b6f33406a8e6387c0ca2098a833"}, - {file = "grpcio-1.73.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:ebd8d269df64aff092b2cec5e015d8ae09c7e90888b5c35c24fdca719a2c9f35"}, - {file = "grpcio-1.73.0-cp310-cp310-win32.whl", hash = "sha256:072d8154b8f74300ed362c01d54af8b93200c1a9077aeaea79828d48598514f1"}, - {file = "grpcio-1.73.0-cp310-cp310-win_amd64.whl", hash = "sha256:ce953d9d2100e1078a76a9dc2b7338d5415924dc59c69a15bf6e734db8a0f1ca"}, - {file = "grpcio-1.73.0-cp311-cp311-linux_armv7l.whl", hash = "sha256:51036f641f171eebe5fa7aaca5abbd6150f0c338dab3a58f9111354240fe36ec"}, - {file = "grpcio-1.73.0-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:d12bbb88381ea00bdd92c55aff3da3391fd85bc902c41275c8447b86f036ce0f"}, - {file = "grpcio-1.73.0-cp311-cp311-manylinux_2_17_aarch64.whl", hash = "sha256:483c507c2328ed0e01bc1adb13d1eada05cc737ec301d8e5a8f4a90f387f1790"}, - {file = "grpcio-1.73.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c201a34aa960c962d0ce23fe5f423f97e9d4b518ad605eae6d0a82171809caaa"}, - {file = "grpcio-1.73.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:859f70c8e435e8e1fa060e04297c6818ffc81ca9ebd4940e180490958229a45a"}, - {file = "grpcio-1.73.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e2459a27c6886e7e687e4e407778425f3c6a971fa17a16420227bda39574d64b"}, - {file = "grpcio-1.73.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:e0084d4559ee3dbdcce9395e1bc90fdd0262529b32c417a39ecbc18da8074ac7"}, - {file = "grpcio-1.73.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:ef5fff73d5f724755693a464d444ee0a448c6cdfd3c1616a9223f736c622617d"}, - {file = "grpcio-1.73.0-cp311-cp311-win32.whl", hash = "sha256:965a16b71a8eeef91fc4df1dc40dc39c344887249174053814f8a8e18449c4c3"}, - {file = "grpcio-1.73.0-cp311-cp311-win_amd64.whl", hash = "sha256:b71a7b4483d1f753bbc11089ff0f6fa63b49c97a9cc20552cded3fcad466d23b"}, - {file = "grpcio-1.73.0-cp312-cp312-linux_armv7l.whl", hash = "sha256:fb9d7c27089d9ba3746f18d2109eb530ef2a37452d2ff50f5a6696cd39167d3b"}, - {file = "grpcio-1.73.0-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:128ba2ebdac41e41554d492b82c34586a90ebd0766f8ebd72160c0e3a57b9155"}, - {file = "grpcio-1.73.0-cp312-cp312-manylinux_2_17_aarch64.whl", hash = "sha256:068ecc415f79408d57a7f146f54cdf9f0acb4b301a52a9e563973dc981e82f3d"}, - {file = "grpcio-1.73.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6ddc1cfb2240f84d35d559ade18f69dcd4257dbaa5ba0de1a565d903aaab2968"}, - {file = "grpcio-1.73.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e53007f70d9783f53b41b4cf38ed39a8e348011437e4c287eee7dd1d39d54b2f"}, - {file = "grpcio-1.73.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:4dd8d8d092efede7d6f48d695ba2592046acd04ccf421436dd7ed52677a9ad29"}, - {file = "grpcio-1.73.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:70176093d0a95b44d24baa9c034bb67bfe2b6b5f7ebc2836f4093c97010e17fd"}, - {file = "grpcio-1.73.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:085ebe876373ca095e24ced95c8f440495ed0b574c491f7f4f714ff794bbcd10"}, - {file = "grpcio-1.73.0-cp312-cp312-win32.whl", hash = "sha256:cfc556c1d6aef02c727ec7d0016827a73bfe67193e47c546f7cadd3ee6bf1a60"}, - {file = "grpcio-1.73.0-cp312-cp312-win_amd64.whl", hash = "sha256:bbf45d59d090bf69f1e4e1594832aaf40aa84b31659af3c5e2c3f6a35202791a"}, - {file = "grpcio-1.73.0-cp313-cp313-linux_armv7l.whl", hash = "sha256:da1d677018ef423202aca6d73a8d3b2cb245699eb7f50eb5f74cae15a8e1f724"}, - {file = "grpcio-1.73.0-cp313-cp313-macosx_11_0_universal2.whl", hash = "sha256:36bf93f6a657f37c131d9dd2c391b867abf1426a86727c3575393e9e11dadb0d"}, - {file = "grpcio-1.73.0-cp313-cp313-manylinux_2_17_aarch64.whl", hash = "sha256:d84000367508ade791d90c2bafbd905574b5ced8056397027a77a215d601ba15"}, - {file = "grpcio-1.73.0-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c98ba1d928a178ce33f3425ff823318040a2b7ef875d30a0073565e5ceb058d9"}, - {file = "grpcio-1.73.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a73c72922dfd30b396a5f25bb3a4590195ee45ecde7ee068acb0892d2900cf07"}, - {file = "grpcio-1.73.0-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:10e8edc035724aba0346a432060fd192b42bd03675d083c01553cab071a28da5"}, - {file = "grpcio-1.73.0-cp313-cp313-musllinux_1_1_i686.whl", hash = "sha256:f5cdc332b503c33b1643b12ea933582c7b081957c8bc2ea4cc4bc58054a09288"}, - {file = "grpcio-1.73.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:07ad7c57233c2109e4ac999cb9c2710c3b8e3f491a73b058b0ce431f31ed8145"}, - {file = "grpcio-1.73.0-cp313-cp313-win32.whl", hash = "sha256:0eb5df4f41ea10bda99a802b2a292d85be28958ede2a50f2beb8c7fc9a738419"}, - {file = "grpcio-1.73.0-cp313-cp313-win_amd64.whl", hash = "sha256:38cf518cc54cd0c47c9539cefa8888549fcc067db0b0c66a46535ca8032020c4"}, - {file = "grpcio-1.73.0-cp39-cp39-linux_armv7l.whl", hash = "sha256:1284850607901cfe1475852d808e5a102133461ec9380bc3fc9ebc0686ee8e32"}, - {file = "grpcio-1.73.0-cp39-cp39-macosx_11_0_universal2.whl", hash = "sha256:0e092a4b28eefb63eec00d09ef33291cd4c3a0875cde29aec4d11d74434d222c"}, - {file = "grpcio-1.73.0-cp39-cp39-manylinux_2_17_aarch64.whl", hash = "sha256:33577fe7febffe8ebad458744cfee8914e0c10b09f0ff073a6b149a84df8ab8f"}, - {file = "grpcio-1.73.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:60813d8a16420d01fa0da1fc7ebfaaa49a7e5051b0337cd48f4f950eb249a08e"}, - {file = "grpcio-1.73.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2a9c957dc65e5d474378d7bcc557e9184576605d4b4539e8ead6e351d7ccce20"}, - {file = "grpcio-1.73.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:3902b71407d021163ea93c70c8531551f71ae742db15b66826cf8825707d2908"}, - {file = "grpcio-1.73.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:1dd7fa7276dcf061e2d5f9316604499eea06b1b23e34a9380572d74fe59915a8"}, - {file = "grpcio-1.73.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:2d1510c4ea473110cb46a010555f2c1a279d1c256edb276e17fa571ba1e8927c"}, - {file = "grpcio-1.73.0-cp39-cp39-win32.whl", hash = "sha256:d0a1517b2005ba1235a1190b98509264bf72e231215dfeef8db9a5a92868789e"}, - {file = "grpcio-1.73.0-cp39-cp39-win_amd64.whl", hash = "sha256:6228f7eb6d9f785f38b589d49957fca5df3d5b5349e77d2d89b14e390165344c"}, - {file = "grpcio-1.73.0.tar.gz", hash = "sha256:3af4c30918a7f0d39de500d11255f8d9da4f30e94a2033e70fe2a720e184bd8e"}, +markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" +files = [ + {file = "grpcio-1.78.0-cp310-cp310-linux_armv7l.whl", hash = "sha256:7cc47943d524ee0096f973e1081cb8f4f17a4615f2116882a5f1416e4cfe92b5"}, + {file = "grpcio-1.78.0-cp310-cp310-macosx_11_0_universal2.whl", hash = "sha256:c3f293fdc675ccba4db5a561048cca627b5e7bd1c8a6973ffedabe7d116e22e2"}, + {file = "grpcio-1.78.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:10a9a644b5dd5aec3b82b5b0b90d41c0fa94c85ef42cb42cf78a23291ddb5e7d"}, + {file = "grpcio-1.78.0-cp310-cp310-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:4c5533d03a6cbd7f56acfc9cfb44ea64f63d29091e40e44010d34178d392d7eb"}, + {file = "grpcio-1.78.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:ff870aebe9a93a85283837801d35cd5f8814fe2ad01e606861a7fb47c762a2b7"}, + {file = "grpcio-1.78.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:391e93548644e6b2726f1bb84ed60048d4bcc424ce5e4af0843d28ca0b754fec"}, + {file = "grpcio-1.78.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:df2c8f3141f7cbd112a6ebbd760290b5849cda01884554f7c67acc14e7b1758a"}, + {file = "grpcio-1.78.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:bd8cb8026e5f5b50498a3c4f196f57f9db344dad829ffae16b82e4fdbaea2813"}, + {file = "grpcio-1.78.0-cp310-cp310-win32.whl", hash = "sha256:f8dff3d9777e5d2703a962ee5c286c239bf0ba173877cc68dc02c17d042e29de"}, + {file = "grpcio-1.78.0-cp310-cp310-win_amd64.whl", hash = "sha256:94f95cf5d532d0e717eed4fc1810e8e6eded04621342ec54c89a7c2f14b581bf"}, + {file = "grpcio-1.78.0-cp311-cp311-linux_armv7l.whl", hash = "sha256:2777b783f6c13b92bd7b716667452c329eefd646bfb3f2e9dabea2e05dbd34f6"}, + {file = "grpcio-1.78.0-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:9dca934f24c732750389ce49d638069c3892ad065df86cb465b3fa3012b70c9e"}, + {file = "grpcio-1.78.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:459ab414b35f4496138d0ecd735fed26f1318af5e52cb1efbc82a09f0d5aa911"}, + {file = "grpcio-1.78.0-cp311-cp311-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:082653eecbdf290e6e3e2c276ab2c54b9e7c299e07f4221872380312d8cf395e"}, + {file = "grpcio-1.78.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:85f93781028ec63f383f6bc90db785a016319c561cc11151fbb7b34e0d012303"}, + {file = "grpcio-1.78.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:f12857d24d98441af6a1d5c87442d624411db486f7ba12550b07788f74b67b04"}, + {file = "grpcio-1.78.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:5397fff416b79e4b284959642a4e95ac4b0f1ece82c9993658e0e477d40551ec"}, + {file = "grpcio-1.78.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:fbe6e89c7ffb48518384068321621b2a69cab509f58e40e4399fdd378fa6d074"}, + {file = "grpcio-1.78.0-cp311-cp311-win32.whl", hash = "sha256:6092beabe1966a3229f599d7088b38dfc8ffa1608b5b5cdda31e591e6500f856"}, + {file = "grpcio-1.78.0-cp311-cp311-win_amd64.whl", hash = "sha256:1afa62af6e23f88629f2b29ec9e52ec7c65a7176c1e0a83292b93c76ca882558"}, + {file = "grpcio-1.78.0-cp312-cp312-linux_armv7l.whl", hash = "sha256:f9ab915a267fc47c7e88c387a3a28325b58c898e23d4995f765728f4e3dedb97"}, + {file = "grpcio-1.78.0-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:3f8904a8165ab21e07e58bf3e30a73f4dffc7a1e0dbc32d51c61b5360d26f43e"}, + {file = "grpcio-1.78.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:859b13906ce098c0b493af92142ad051bf64c7870fa58a123911c88606714996"}, + {file = "grpcio-1.78.0-cp312-cp312-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:b2342d87af32790f934a79c3112641e7b27d63c261b8b4395350dad43eff1dc7"}, + {file = "grpcio-1.78.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:12a771591ae40bc65ba67048fa52ef4f0e6db8279e595fd349f9dfddeef571f9"}, + {file = "grpcio-1.78.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:185dea0d5260cbb2d224c507bf2a5444d5abbb1fa3594c1ed7e4c709d5eb8383"}, + {file = "grpcio-1.78.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:51b13f9aed9d59ee389ad666b8c2214cc87b5de258fa712f9ab05f922e3896c6"}, + {file = "grpcio-1.78.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:fd5f135b1bd58ab088930b3c613455796dfa0393626a6972663ccdda5b4ac6ce"}, + {file = "grpcio-1.78.0-cp312-cp312-win32.whl", hash = "sha256:94309f498bcc07e5a7d16089ab984d42ad96af1d94b5a4eb966a266d9fcabf68"}, + {file = "grpcio-1.78.0-cp312-cp312-win_amd64.whl", hash = "sha256:9566fe4ababbb2610c39190791e5b829869351d14369603702e890ef3ad2d06e"}, + {file = "grpcio-1.78.0-cp313-cp313-linux_armv7l.whl", hash = "sha256:ce3a90455492bf8bfa38e56fbbe1dbd4f872a3d8eeaf7337dc3b1c8aa28c271b"}, + {file = "grpcio-1.78.0-cp313-cp313-macosx_11_0_universal2.whl", hash = "sha256:2bf5e2e163b356978b23652c4818ce4759d40f4712ee9ec5a83c4be6f8c23a3a"}, + {file = "grpcio-1.78.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:8f2ac84905d12918e4e55a16da17939eb63e433dc11b677267c35568aa63fc84"}, + {file = "grpcio-1.78.0-cp313-cp313-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:b58f37edab4a3881bc6c9bca52670610e0c9ca14e2ea3cf9debf185b870457fb"}, + {file = "grpcio-1.78.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:735e38e176a88ce41840c21bb49098ab66177c64c82426e24e0082500cc68af5"}, + {file = "grpcio-1.78.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:2045397e63a7a0ee7957c25f7dbb36ddc110e0cfb418403d110c0a7a68a844e9"}, + {file = "grpcio-1.78.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:a9f136fbafe7ccf4ac7e8e0c28b31066e810be52d6e344ef954a3a70234e1702"}, + {file = "grpcio-1.78.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:748b6138585379c737adc08aeffd21222abbda1a86a0dca2a39682feb9196c20"}, + {file = "grpcio-1.78.0-cp313-cp313-win32.whl", hash = "sha256:271c73e6e5676afe4fc52907686670c7cea22ab2310b76a59b678403ed40d670"}, + {file = "grpcio-1.78.0-cp313-cp313-win_amd64.whl", hash = "sha256:f2d4e43ee362adfc05994ed479334d5a451ab7bc3f3fee1b796b8ca66895acb4"}, + {file = "grpcio-1.78.0-cp314-cp314-linux_armv7l.whl", hash = "sha256:e87cbc002b6f440482b3519e36e1313eb5443e9e9e73d6a52d43bd2004fcfd8e"}, + {file = "grpcio-1.78.0-cp314-cp314-macosx_11_0_universal2.whl", hash = "sha256:c41bc64626db62e72afec66b0c8a0da76491510015417c127bfc53b2fe6d7f7f"}, + {file = "grpcio-1.78.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:8dfffba826efcf366b1e3ccc37e67afe676f290e13a3b48d31a46739f80a8724"}, + {file = "grpcio-1.78.0-cp314-cp314-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:74be1268d1439eaaf552c698cdb11cd594f0c49295ae6bb72c34ee31abbe611b"}, + {file = "grpcio-1.78.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:be63c88b32e6c0f1429f1398ca5c09bc64b0d80950c8bb7807d7d7fb36fb84c7"}, + {file = "grpcio-1.78.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:3c586ac70e855c721bda8f548d38c3ca66ac791dc49b66a8281a1f99db85e452"}, + {file = "grpcio-1.78.0-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:35eb275bf1751d2ffbd8f57cdbc46058e857cf3971041521b78b7db94bdaf127"}, + {file = "grpcio-1.78.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:207db540302c884b8848036b80db352a832b99dfdf41db1eb554c2c2c7800f65"}, + {file = "grpcio-1.78.0-cp314-cp314-win32.whl", hash = "sha256:57bab6deef2f4f1ca76cc04565df38dc5713ae6c17de690721bdf30cb1e0545c"}, + {file = "grpcio-1.78.0-cp314-cp314-win_amd64.whl", hash = "sha256:dce09d6116df20a96acfdbf85e4866258c3758180e8c49845d6ba8248b6d0bbb"}, + {file = "grpcio-1.78.0-cp39-cp39-linux_armv7l.whl", hash = "sha256:86f85dd7c947baa707078a236288a289044836d4b640962018ceb9cd1f899af5"}, + {file = "grpcio-1.78.0-cp39-cp39-macosx_11_0_universal2.whl", hash = "sha256:de8cb00d1483a412a06394b8303feec5dcb3b55f81d83aa216dbb6a0b86a94f5"}, + {file = "grpcio-1.78.0-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:e888474dee2f59ff68130f8a397792d8cb8e17e6b3434339657ba4ee90845a8c"}, + {file = "grpcio-1.78.0-cp39-cp39-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:86ce2371bfd7f212cf60d8517e5e854475c2c43ce14aa910e136ace72c6db6c1"}, + {file = "grpcio-1.78.0-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:b0c689c02947d636bc7fab3e30cc3a3445cca99c834dfb77cd4a6cabfc1c5597"}, + {file = "grpcio-1.78.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:ce7599575eeb25c0f4dc1be59cada6219f3b56176f799627f44088b21381a28a"}, + {file = "grpcio-1.78.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:684083fd383e9dc04c794adb838d4faea08b291ce81f64ecd08e4577c7398adf"}, + {file = "grpcio-1.78.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:ab399ef5e3cd2a721b1038a0f3021001f19c5ab279f145e1146bb0b9f1b2b12c"}, + {file = "grpcio-1.78.0-cp39-cp39-win32.whl", hash = "sha256:f3d6379493e18ad4d39537a82371c5281e153e963cecb13f953ebac155756525"}, + {file = "grpcio-1.78.0-cp39-cp39-win_amd64.whl", hash = "sha256:5361a0630a7fdb58a6a97638ab70e1dae2893c4d08d7aba64ded28bb9e7a29df"}, + {file = "grpcio-1.78.0.tar.gz", hash = "sha256:7382b95189546f375c174f53a5fa873cef91c4b8005faa05cc5b3beea9c4f1c5"}, ] +[package.dependencies] +typing-extensions = ">=4.12,<5.0" + [package.extras] -protobuf = ["grpcio-tools (>=1.73.0)"] +protobuf = ["grpcio-tools (>=1.78.0)"] [[package]] name = "gymnasium" @@ -1182,6 +1179,7 @@ description = "A standard API for reinforcement learning and a diverse set of re optional = false python-versions = ">=3.7" groups = ["main"] +markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "gymnasium-0.28.1-py3-none-any.whl", hash = "sha256:7bc9a5bce1022f997d1dbc152fc91d1ac977bad9cc7794cdc25437010867cabf"}, {file = "gymnasium-0.28.1.tar.gz", hash = "sha256:4c2c745808792c8f45c6e88ad0a5504774394e0c126f6e3db555e720d3da6f24"}, @@ -1190,7 +1188,6 @@ files = [ [package.dependencies] cloudpickle = ">=1.2.0" farama-notifications = ">=0.0.1" -importlib-metadata = {version = ">=4.8.0", markers = "python_version < \"3.10\""} jax-jumpy = ">=1.0.0" numpy = ">=1.21.0" typing-extensions = ">=4.3.0" @@ -1215,6 +1212,7 @@ description = "Read and write HDF5 files from Python" optional = false python-versions = ">=3.9" groups = ["main"] +markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "h5py-3.13.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5540daee2b236d9569c950b417f13fd112d51d78b4c43012de05774908dff3f5"}, {file = "h5py-3.13.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:10894c55d46df502d82a7a4ed38f9c3fdbcb93efb42e25d275193e093071fade"}, @@ -1249,14 +1247,15 @@ numpy = ">=1.19.3" [[package]] name = "idna" -version = "3.10" +version = "3.11" description = "Internationalized Domain Names in Applications (IDNA)" optional = false -python-versions = ">=3.6" +python-versions = ">=3.8" groups = ["main"] +markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ - {file = "idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3"}, - {file = "idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9"}, + {file = "idna-3.11-py3-none-any.whl", hash = "sha256:771a87f49d9defaf64091e6e6fe9c18d4833f140bd19464795bc32d966ca37ea"}, + {file = "idna-3.11.tar.gz", hash = "sha256:795dafcc9c04ed0c1fb032c2aa73654d8e8c5023a7df64a53f39190ada629902"}, ] [package.extras] @@ -1264,14 +1263,15 @@ all = ["flake8 (>=7.1.1)", "mypy (>=1.11.2)", "pytest (>=8.3.2)", "ruff (>=0.6.2 [[package]] name = "imageio" -version = "2.37.0" -description = "Library for reading and writing a wide range of image, video, scientific, and volumetric data formats." +version = "2.37.3" +description = "Read and write images and video across all major formats. Supports scientific and volumetric data." optional = false -python-versions = ">=3.9" +python-versions = ">=3.10" groups = ["main"] +markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ - {file = "imageio-2.37.0-py3-none-any.whl", hash = "sha256:11efa15b87bc7871b61590326b2d635439acc321cf7f8ce996f812543ce10eed"}, - {file = "imageio-2.37.0.tar.gz", hash = "sha256:71b57b3669666272c818497aebba2b4c5f20d5b37c81720e5e1a56d59c492996"}, + {file = "imageio-2.37.3-py3-none-any.whl", hash = "sha256:46f5bb8522cd421c0f5ae104d8268f569d856b29eb1a13b92829d1970f32c9f0"}, + {file = "imageio-2.37.3.tar.gz", hash = "sha256:bbb37efbfc4c400fcd534b367b91fcd66d5da639aaa138034431a1c5e0a41451"}, ] [package.dependencies] @@ -1279,14 +1279,14 @@ numpy = "*" pillow = ">=8.3.2" [package.extras] -all-plugins = ["astropy", "av", "imageio-ffmpeg", "numpy (>2)", "pillow-heif", "psutil", "rawpy", "tifffile"] -all-plugins-pypy = ["av", "imageio-ffmpeg", "pillow-heif", "psutil", "tifffile"] -build = ["wheel"] +all-plugins = ["astropy", "av", "fsspec[http]", "imageio-ffmpeg", "numpy (>2)", "pillow-heif", "psutil", "rawpy", "tifffile"] +all-plugins-pypy = ["fsspec[http]", "imageio-ffmpeg", "pillow-heif", "psutil", "tifffile"] dev = ["black", "flake8", "fsspec[github]", "pytest", "pytest-cov"] docs = ["numpydoc", "pydata-sphinx-theme", "sphinx (<6)"] ffmpeg = ["imageio-ffmpeg", "psutil"] fits = ["astropy"] -full = ["astropy", "av", "black", "flake8", "fsspec[github]", "gdal", "imageio-ffmpeg", "itk", "numpy (>2)", "numpydoc", "pillow-heif", "psutil", "pydata-sphinx-theme", "pytest", "pytest-cov", "rawpy", "sphinx (<6)", "tifffile", "wheel"] +freeimage = ["fsspec[http]"] +full = ["astropy", "av", "black", "flake8", "fsspec[github,http]", "imageio-ffmpeg", "numpy (>2)", "numpydoc", "pillow-heif", "psutil", "pydata-sphinx-theme", "pytest", "pytest-cov", "rawpy", "sphinx (<6)", "tifffile"] gdal = ["gdal"] itk = ["itk"] linting = ["black", "flake8"] @@ -1297,115 +1297,86 @@ test = ["fsspec[github]", "pytest", "pytest-cov"] tifffile = ["tifffile"] [[package]] -name = "importlib-metadata" -version = "8.7.0" -description = "Read metadata from Python packages" -optional = false -python-versions = ">=3.9" -groups = ["main"] -markers = "python_version == \"3.9\"" -files = [ - {file = "importlib_metadata-8.7.0-py3-none-any.whl", hash = "sha256:e5dd1551894c77868a30651cef00984d50e1002d06942a7101d34870c5f02afd"}, - {file = "importlib_metadata-8.7.0.tar.gz", hash = "sha256:d13b81ad223b890aa16c5471f2ac3056cf76c5f10f82d6f9292f0b415f389000"}, -] - -[package.dependencies] -zipp = ">=3.20" - -[package.extras] -check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1) ; sys_platform != \"cygwin\""] -cover = ["pytest-cov"] -doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] -enabler = ["pytest-enabler (>=2.2)"] -perf = ["ipython"] -test = ["flufl.flake8", "importlib_resources (>=1.3) ; python_version < \"3.9\"", "jaraco.test (>=5.4)", "packaging", "pyfakefs", "pytest (>=6,!=8.1.*)", "pytest-perf (>=0.9.2)"] -type = ["pytest-mypy"] - -[[package]] -name = "importlib-resources" -version = "6.5.2" -description = "Read resources from Python packages" +name = "imageio-ffmpeg" +version = "0.6.0" +description = "FFMPEG wrapper for Python" optional = false python-versions = ">=3.9" groups = ["main"] -markers = "python_version == \"3.9\"" +markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ - {file = "importlib_resources-6.5.2-py3-none-any.whl", hash = "sha256:789cfdc3ed28c78b67a06acb8126751ced69a3d5f79c095a98298cd8a760ccec"}, - {file = "importlib_resources-6.5.2.tar.gz", hash = "sha256:185f87adef5bcc288449d98fb4fba07cea78bc036455dd44c5fc4a2fe78fed2c"}, + {file = "imageio_ffmpeg-0.6.0-py3-none-macosx_10_9_intel.macosx_10_9_x86_64.whl", hash = "sha256:9d2baaf867088508d4a3458e61eeb30e945c4ad8016025545f66c4b5aaef0a61"}, + {file = "imageio_ffmpeg-0.6.0-py3-none-macosx_11_0_arm64.whl", hash = "sha256:b1ae3173414b5fc5f538a726c4e48ea97edc0d2cdc11f103afee655c463fa742"}, + {file = "imageio_ffmpeg-0.6.0-py3-none-manylinux2014_aarch64.whl", hash = "sha256:1d47bebd83d2c5fc770720d211855f208af8a596c82d17730aa51e815cdee6dc"}, + {file = "imageio_ffmpeg-0.6.0-py3-none-manylinux2014_x86_64.whl", hash = "sha256:c7e46fcec401dd990405049d2e2f475e2b397779df2519b544b8aab515195282"}, + {file = "imageio_ffmpeg-0.6.0-py3-none-win32.whl", hash = "sha256:196faa79366b4a82f95c0f4053191d2013f4714a715780f0ad2a68ff37483cc2"}, + {file = "imageio_ffmpeg-0.6.0-py3-none-win_amd64.whl", hash = "sha256:02fa47c83703c37df6bfe4896aab339013f62bf02c5ebf2dce6da56af04ffc0a"}, + {file = "imageio_ffmpeg-0.6.0.tar.gz", hash = "sha256:e2556bed8e005564a9f925bb7afa4002d82770d6b08825078b7697ab88ba1755"}, ] -[package.dependencies] -zipp = {version = ">=3.1.0", markers = "python_version < \"3.10\""} - -[package.extras] -check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1) ; sys_platform != \"cygwin\""] -cover = ["pytest-cov"] -doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] -enabler = ["pytest-enabler (>=2.2)"] -test = ["jaraco.test (>=5.4)", "pytest (>=6,!=8.1.*)", "zipp (>=3.17)"] -type = ["pytest-mypy"] - [[package]] name = "iniconfig" -version = "2.1.0" +version = "2.3.0" description = "brain-dead simple config-ini parsing" optional = false -python-versions = ">=3.8" +python-versions = ">=3.10" groups = ["main"] +markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ - {file = "iniconfig-2.1.0-py3-none-any.whl", hash = "sha256:9deba5723312380e77435581c6bf4935c94cbfab9b1ed33ef8d238ea168eb760"}, - {file = "iniconfig-2.1.0.tar.gz", hash = "sha256:3abbd2e30b36733fee78f9c7f7308f2d0050e88f0087fd25c2645f63c773e1c7"}, + {file = "iniconfig-2.3.0-py3-none-any.whl", hash = "sha256:f631c04d2c48c52b84d0d0549c99ff3859c98df65b3101406327ecc7d53fbf12"}, + {file = "iniconfig-2.3.0.tar.gz", hash = "sha256:c76315c77db068650d49c5b56314774a7804df16fee4402c1f19d6d15d8c4730"}, ] [[package]] name = "ipykernel" -version = "6.29.5" +version = "7.2.0" description = "IPython Kernel for Jupyter" optional = false -python-versions = ">=3.8" +python-versions = ">=3.10" groups = ["main"] +markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ - {file = "ipykernel-6.29.5-py3-none-any.whl", hash = "sha256:afdb66ba5aa354b09b91379bac28ae4afebbb30e8b39510c9690afb7a10421b5"}, - {file = "ipykernel-6.29.5.tar.gz", hash = "sha256:f093a22c4a40f8828f8e330a9c297cb93dcab13bd9678ded6de8e5cf81c56215"}, + {file = "ipykernel-7.2.0-py3-none-any.whl", hash = "sha256:3bbd4420d2b3cc105cbdf3756bfc04500b1e52f090a90716851f3916c62e1661"}, + {file = "ipykernel-7.2.0.tar.gz", hash = "sha256:18ed160b6dee2cbb16e5f3575858bc19d8f1fe6046a9a680c708494ce31d909e"}, ] [package.dependencies] -appnope = {version = "*", markers = "platform_system == \"Darwin\""} +appnope = {version = ">=0.1.2", markers = "platform_system == \"Darwin\""} comm = ">=0.1.1" debugpy = ">=1.6.5" ipython = ">=7.23.1" -jupyter-client = ">=6.1.12" -jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" +jupyter-client = ">=8.8.0" +jupyter-core = ">=5.1,<6.0.dev0 || >=6.1.dev0" matplotlib-inline = ">=0.1" -nest-asyncio = "*" -packaging = "*" -psutil = "*" -pyzmq = ">=24" -tornado = ">=6.1" +nest-asyncio = ">=1.4" +packaging = ">=22" +psutil = ">=5.7" +pyzmq = ">=25" +tornado = ">=6.4.1" traitlets = ">=5.4.0" [package.extras] -cov = ["coverage[toml]", "curio", "matplotlib", "pytest-cov", "trio"] -docs = ["myst-parser", "pydata-sphinx-theme", "sphinx", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-spelling", "trio"] +cov = ["coverage[toml]", "matplotlib", "pytest-cov", "trio"] +docs = ["intersphinx-registry", "myst-parser", "pydata-sphinx-theme", "sphinx (<8.2.0)", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-spelling", "trio"] pyqt5 = ["pyqt5"] pyside6 = ["pyside6"] -test = ["flaky", "ipyparallel", "pre-commit", "pytest (>=7.0)", "pytest-asyncio (>=0.23.5)", "pytest-cov", "pytest-timeout"] +test = ["flaky", "ipyparallel", "pre-commit", "pytest (>=7.0,<10)", "pytest-asyncio (>=0.23.5)", "pytest-cov", "pytest-timeout"] [[package]] name = "ipyparallel" -version = "9.0.1" +version = "9.1.0" description = "Interactive Parallel Computing with IPython" optional = false -python-versions = ">=3.8" +python-versions = ">=3.10" groups = ["main"] +markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ - {file = "ipyparallel-9.0.1-py3-none-any.whl", hash = "sha256:cc0702e26af416a1c35c73eb6dbc3a6a2c49417cb24dda4511be85c9fe87ea64"}, - {file = "ipyparallel-9.0.1.tar.gz", hash = "sha256:2e592cad2200c5a94fbbff639bff36e6ec9122f34b36b2fc6b4d678d9e98f29c"}, + {file = "ipyparallel-9.1.0-py3-none-any.whl", hash = "sha256:dff90d758b6f999e5803306cd1900e15029655b475d780989d8b2bf338730213"}, + {file = "ipyparallel-9.1.0.tar.gz", hash = "sha256:ecc81a1bfd2681eb571e361839d5defcbeec583ae3ee0503bc83b066106b88cd"}, ] [package.dependencies] decorator = "*" -importlib-metadata = {version = ">=3.6", markers = "python_version < \"3.10\""} ipykernel = ">=6.9.1" ipython = ">=5" jupyter-client = ">=7" @@ -1426,15 +1397,15 @@ test = ["ipython[test]", "pytest", "pytest-asyncio", "pytest-cov", "testpath"] [[package]] name = "ipython" -version = "8.18.1" +version = "8.38.0" description = "IPython: Productive Interactive Computing" optional = false -python-versions = ">=3.9" +python-versions = ">=3.10" groups = ["main"] -markers = "python_version < \"3.11\"" +markers = "python_version == \"3.10\" and (sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\")" files = [ - {file = "ipython-8.18.1-py3-none-any.whl", hash = "sha256:e8267419d72d81955ec1177f8a29aaa90ac80ad647499201119e2f05e99aa397"}, - {file = "ipython-8.18.1.tar.gz", hash = "sha256:ca6f079bb33457c66e233e4580ebfc4128855b4cf6370dddd73842a9563e8a27"}, + {file = "ipython-8.38.0-py3-none-any.whl", hash = "sha256:750162629d800ac65bb3b543a14e7a74b0e88063eac9b92124d4b2aa3f6d8e86"}, + {file = "ipython-8.38.0.tar.gz", hash = "sha256:9cfea8c903ce0867cc2f23199ed8545eb741f3a69420bfcf3743ad1cec856d39"}, ] [package.dependencies] @@ -1443,59 +1414,60 @@ decorator = "*" exceptiongroup = {version = "*", markers = "python_version < \"3.11\""} jedi = ">=0.16" matplotlib-inline = "*" -pexpect = {version = ">4.3", markers = "sys_platform != \"win32\""} -prompt-toolkit = ">=3.0.41,<3.1.0" +pexpect = {version = ">4.3", markers = "sys_platform != \"win32\" and sys_platform != \"emscripten\""} +prompt_toolkit = ">=3.0.41,<3.1.0" pygments = ">=2.4.0" -stack-data = "*" -traitlets = ">=5" -typing-extensions = {version = "*", markers = "python_version < \"3.10\""} +stack_data = "*" +traitlets = ">=5.13.0" +typing_extensions = {version = ">=4.6", markers = "python_version < \"3.12\""} [package.extras] -all = ["black", "curio", "docrepr", "exceptiongroup", "ipykernel", "ipyparallel", "ipywidgets", "matplotlib", "matplotlib (!=3.2.0)", "nbconvert", "nbformat", "notebook", "numpy (>=1.22)", "pandas", "pickleshare", "pytest (<7)", "pytest (<7.1)", "pytest-asyncio (<0.22)", "qtconsole", "setuptools (>=18.5)", "sphinx (>=1.3)", "sphinx-rtd-theme", "stack-data", "testpath", "trio", "typing-extensions"] +all = ["ipython[black,doc,kernel,matplotlib,nbconvert,nbformat,notebook,parallel,qtconsole]", "ipython[test,test-extra]"] black = ["black"] -doc = ["docrepr", "exceptiongroup", "ipykernel", "matplotlib", "pickleshare", "pytest (<7)", "pytest (<7.1)", "pytest-asyncio (<0.22)", "setuptools (>=18.5)", "sphinx (>=1.3)", "sphinx-rtd-theme", "stack-data", "testpath", "typing-extensions"] +doc = ["docrepr", "exceptiongroup", "intersphinx_registry", "ipykernel", "ipython[test]", "matplotlib", "setuptools (>=18.5)", "sphinx (>=1.3)", "sphinx-rtd-theme", "sphinxcontrib-jquery", "tomli ; python_version < \"3.11\"", "typing_extensions"] kernel = ["ipykernel"] +matplotlib = ["matplotlib"] nbconvert = ["nbconvert"] nbformat = ["nbformat"] notebook = ["ipywidgets", "notebook"] parallel = ["ipyparallel"] qtconsole = ["qtconsole"] -test = ["pickleshare", "pytest (<7.1)", "pytest-asyncio (<0.22)", "testpath"] -test-extra = ["curio", "matplotlib (!=3.2.0)", "nbformat", "numpy (>=1.22)", "pandas", "pickleshare", "pytest (<7.1)", "pytest-asyncio (<0.22)", "testpath", "trio"] +test = ["packaging", "pickleshare", "pytest", "pytest-asyncio (<0.22)", "testpath"] +test-extra = ["curio", "ipython[test]", "jupyter_ai", "matplotlib (!=3.2.0)", "nbformat", "numpy (>=1.23)", "pandas", "trio"] [[package]] name = "ipython" -version = "9.2.0" +version = "9.10.0" description = "IPython: Productive Interactive Computing" optional = false python-versions = ">=3.11" groups = ["main"] -markers = "python_version >= \"3.11\"" +markers = "(sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\") and python_version >= \"3.11\"" files = [ - {file = "ipython-9.2.0-py3-none-any.whl", hash = "sha256:fef5e33c4a1ae0759e0bba5917c9db4eb8c53fee917b6a526bd973e1ca5159f6"}, - {file = "ipython-9.2.0.tar.gz", hash = "sha256:62a9373dbc12f28f9feaf4700d052195bf89806279fc8ca11f3f54017d04751b"}, + {file = "ipython-9.10.0-py3-none-any.whl", hash = "sha256:c6ab68cc23bba8c7e18e9b932797014cc61ea7fd6f19de180ab9ba73e65ee58d"}, + {file = "ipython-9.10.0.tar.gz", hash = "sha256:cd9e656be97618a0676d058134cd44e6dc7012c0e5cb36a9ce96a8c904adaf77"}, ] [package.dependencies] -colorama = {version = "*", markers = "sys_platform == \"win32\""} -decorator = "*" -ipython-pygments-lexers = "*" -jedi = ">=0.16" -matplotlib-inline = "*" +colorama = {version = ">=0.4.4", markers = "sys_platform == \"win32\""} +decorator = ">=4.3.2" +ipython-pygments-lexers = ">=1.0.0" +jedi = ">=0.18.1" +matplotlib-inline = ">=0.1.5" pexpect = {version = ">4.3", markers = "sys_platform != \"win32\" and sys_platform != \"emscripten\""} prompt_toolkit = ">=3.0.41,<3.1.0" -pygments = ">=2.4.0" -stack_data = "*" +pygments = ">=2.11.0" +stack_data = ">=0.6.0" traitlets = ">=5.13.0" typing_extensions = {version = ">=4.6", markers = "python_version < \"3.12\""} [package.extras] -all = ["ipython[doc,matplotlib,test,test-extra]"] +all = ["argcomplete (>=3.0)", "ipython[doc,matplotlib,terminal,test,test-extra]"] black = ["black"] -doc = ["docrepr", "exceptiongroup", "intersphinx_registry", "ipykernel", "ipython[test]", "matplotlib", "setuptools (>=18.5)", "sphinx (>=1.3)", "sphinx-rtd-theme", "sphinx_toml (==0.0.4)", "typing_extensions"] -matplotlib = ["matplotlib"] -test = ["packaging", "pytest", "pytest-asyncio (<0.22)", "testpath"] -test-extra = ["curio", "ipykernel", "ipython[test]", "jupyter_ai", "matplotlib (!=3.2.0)", "nbclient", "nbformat", "numpy (>=1.23)", "pandas", "trio"] +doc = ["docrepr", "exceptiongroup", "intersphinx_registry", "ipykernel", "ipython[matplotlib,test]", "setuptools (>=70.0)", "sphinx (>=8.0)", "sphinx-rtd-theme (>=0.1.8)", "sphinx_toml (==0.0.4)", "typing_extensions"] +matplotlib = ["matplotlib (>3.9)"] +test = ["packaging (>=20.1.0)", "pytest (>=7.0.0)", "pytest-asyncio (>=1.0.0)", "setuptools (>=61.2)", "testpath (>=0.2)"] +test-extra = ["curio", "ipykernel (>6.30)", "ipython[matplotlib]", "ipython[test]", "jupyter_ai", "nbclient", "nbformat", "numpy (>=1.27)", "pandas (>2.1)", "trio (>=0.1.0)"] [[package]] name = "ipython-pygments-lexers" @@ -1504,7 +1476,7 @@ description = "Defines a variety of Pygments lexers for highlighting IPython cod optional = false python-versions = ">=3.8" groups = ["main"] -markers = "python_version >= \"3.11\"" +markers = "(sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\") and python_version >= \"3.11\"" files = [ {file = "ipython_pygments_lexers-1.1.1-py3-none-any.whl", hash = "sha256:a9462224a505ade19a605f71f8fa63c2048833ce50abc86768a0d81d876dc81c"}, {file = "ipython_pygments_lexers-1.1.1.tar.gz", hash = "sha256:09c0138009e56b6854f9535736f4171d855c8c08a563a0dcd8022f78355c7e81"}, @@ -1520,6 +1492,7 @@ description = "Common backend for Jax or Numpy." optional = false python-versions = ">=3.7" groups = ["main"] +markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "jax-jumpy-1.0.0.tar.gz", hash = "sha256:195fb955cc4c2b7f0b1453e3cb1fb1c414a51a407ffac7a51e69a73cb30d59ad"}, {file = "jax_jumpy-1.0.0-py3-none-any.whl", hash = "sha256:ab7e01454bba462de3c4d098e3e585c302a8f06bc36d9182ab4e7e4aa7067c5e"}, @@ -1539,6 +1512,7 @@ description = "An autocompletion tool for Python that can be used for text edito optional = false python-versions = ">=3.6" groups = ["main"] +markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "jedi-0.19.2-py2.py3-none-any.whl", hash = "sha256:a8ef22bde8490f57fe5c7681a3c83cb58874daf72b4784de3cce5b6ef6edb5b9"}, {file = "jedi-0.19.2.tar.gz", hash = "sha256:4770dc3de41bde3966b02eb84fbcf557fb33cce26ad23da12c742fb50ecb11f0"}, @@ -1559,6 +1533,7 @@ description = "A very fast and expressive template engine." optional = false python-versions = ">=3.7" groups = ["main"] +markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67"}, {file = "jinja2-3.1.6.tar.gz", hash = "sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d"}, @@ -1572,502 +1547,372 @@ i18n = ["Babel (>=2.7)"] [[package]] name = "joblib" -version = "1.4.2" +version = "1.5.3" description = "Lightweight pipelining with Python functions" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" groups = ["main"] +markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ - {file = "joblib-1.4.2-py3-none-any.whl", hash = "sha256:06d478d5674cbc267e7496a410ee875abd68e4340feff4490bcb7afb88060ae6"}, - {file = "joblib-1.4.2.tar.gz", hash = "sha256:2382c5816b2636fbd20a09e0f4e9dad4736765fdfb7dca582943b9c1366b3f0e"}, + {file = "joblib-1.5.3-py3-none-any.whl", hash = "sha256:5fc3c5039fc5ca8c0276333a188bbd59d6b7ab37fe6632daa76bc7f9ec18e713"}, + {file = "joblib-1.5.3.tar.gz", hash = "sha256:8561a3269e6801106863fd0d6d84bb737be9e7631e33aaed3fb9ce5953688da3"}, ] [[package]] name = "jupyter-client" -version = "8.6.3" +version = "8.8.0" description = "Jupyter protocol implementation and client libraries" optional = false -python-versions = ">=3.8" +python-versions = ">=3.10" groups = ["main"] +markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ - {file = "jupyter_client-8.6.3-py3-none-any.whl", hash = "sha256:e8a19cc986cc45905ac3362915f410f3af85424b4c0905e94fa5f2cb08e8f23f"}, - {file = "jupyter_client-8.6.3.tar.gz", hash = "sha256:35b3a0947c4a6e9d589eb97d7d4cd5e90f910ee73101611f01283732bd6d9419"}, + {file = "jupyter_client-8.8.0-py3-none-any.whl", hash = "sha256:f93a5b99c5e23a507b773d3a1136bd6e16c67883ccdbd9a829b0bbdb98cd7d7a"}, + {file = "jupyter_client-8.8.0.tar.gz", hash = "sha256:d556811419a4f2d96c869af34e854e3f059b7cc2d6d01a9cd9c85c267691be3e"}, ] [package.dependencies] -importlib-metadata = {version = ">=4.8.3", markers = "python_version < \"3.10\""} -jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" +jupyter-core = ">=5.1" python-dateutil = ">=2.8.2" -pyzmq = ">=23.0" -tornado = ">=6.2" +pyzmq = ">=25.0" +tornado = ">=6.4.1" traitlets = ">=5.3" [package.extras] docs = ["ipykernel", "myst-parser", "pydata-sphinx-theme", "sphinx (>=4)", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-spelling"] -test = ["coverage", "ipykernel (>=6.14)", "mypy", "paramiko ; sys_platform == \"win32\"", "pre-commit", "pytest (<8.2.0)", "pytest-cov", "pytest-jupyter[client] (>=0.4.1)", "pytest-timeout"] +orjson = ["orjson"] +test = ["anyio", "coverage", "ipykernel (>=6.14)", "msgpack", "mypy ; platform_python_implementation != \"PyPy\"", "paramiko ; sys_platform == \"win32\"", "pre-commit", "pytest", "pytest-cov", "pytest-jupyter[client] (>=0.6.2)", "pytest-timeout"] [[package]] name = "jupyter-core" -version = "5.7.2" +version = "5.9.1" description = "Jupyter core package. A base package on which Jupyter projects rely." optional = false -python-versions = ">=3.8" +python-versions = ">=3.10" groups = ["main"] +markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ - {file = "jupyter_core-5.7.2-py3-none-any.whl", hash = "sha256:4f7315d2f6b4bcf2e3e7cb6e46772eba760ae459cd1f59d29eb57b0a01bd7409"}, - {file = "jupyter_core-5.7.2.tar.gz", hash = "sha256:aa5f8d32bbf6b431ac830496da7392035d6f61b4f54872f15c4bd2a9c3f536d9"}, + {file = "jupyter_core-5.9.1-py3-none-any.whl", hash = "sha256:ebf87fdc6073d142e114c72c9e29a9d7ca03fad818c5d300ce2adc1fb0743407"}, + {file = "jupyter_core-5.9.1.tar.gz", hash = "sha256:4d09aaff303b9566c3ce657f580bd089ff5c91f5f89cf7d8846c3cdf465b5508"}, ] [package.dependencies] platformdirs = ">=2.5" -pywin32 = {version = ">=300", markers = "sys_platform == \"win32\" and platform_python_implementation != \"PyPy\""} traitlets = ">=5.3" [package.extras] -docs = ["myst-parser", "pydata-sphinx-theme", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-spelling", "traitlets"] -test = ["ipykernel", "pre-commit", "pytest (<8)", "pytest-cov", "pytest-timeout"] +docs = ["intersphinx-registry", "myst-parser", "pydata-sphinx-theme", "sphinx-autodoc-typehints", "sphinxcontrib-spelling", "traitlets"] +test = ["ipykernel", "pre-commit", "pytest (<9)", "pytest-cov", "pytest-timeout"] [[package]] name = "kiwisolver" -version = "1.4.7" -description = "A fast implementation of the Cassowary constraint solver" -optional = false -python-versions = ">=3.8" -groups = ["main"] -markers = "python_version < \"3.11\"" -files = [ - {file = "kiwisolver-1.4.7-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:8a9c83f75223d5e48b0bc9cb1bf2776cf01563e00ade8775ffe13b0b6e1af3a6"}, - {file = "kiwisolver-1.4.7-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:58370b1ffbd35407444d57057b57da5d6549d2d854fa30249771775c63b5fe17"}, - {file = "kiwisolver-1.4.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:aa0abdf853e09aff551db11fce173e2177d00786c688203f52c87ad7fcd91ef9"}, - {file = "kiwisolver-1.4.7-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:8d53103597a252fb3ab8b5845af04c7a26d5e7ea8122303dd7a021176a87e8b9"}, - {file = "kiwisolver-1.4.7-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:88f17c5ffa8e9462fb79f62746428dd57b46eb931698e42e990ad63103f35e6c"}, - {file = "kiwisolver-1.4.7-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:88a9ca9c710d598fd75ee5de59d5bda2684d9db36a9f50b6125eaea3969c2599"}, - {file = "kiwisolver-1.4.7-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f4d742cb7af1c28303a51b7a27aaee540e71bb8e24f68c736f6f2ffc82f2bf05"}, - {file = "kiwisolver-1.4.7-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e28c7fea2196bf4c2f8d46a0415c77a1c480cc0724722f23d7410ffe9842c407"}, - {file = "kiwisolver-1.4.7-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:e968b84db54f9d42046cf154e02911e39c0435c9801681e3fc9ce8a3c4130278"}, - {file = "kiwisolver-1.4.7-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:0c18ec74c0472de033e1bebb2911c3c310eef5649133dd0bedf2a169a1b269e5"}, - {file = "kiwisolver-1.4.7-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:8f0ea6da6d393d8b2e187e6a5e3fb81f5862010a40c3945e2c6d12ae45cfb2ad"}, - {file = "kiwisolver-1.4.7-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:f106407dda69ae456dd1227966bf445b157ccc80ba0dff3802bb63f30b74e895"}, - {file = "kiwisolver-1.4.7-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:84ec80df401cfee1457063732d90022f93951944b5b58975d34ab56bb150dfb3"}, - {file = "kiwisolver-1.4.7-cp310-cp310-win32.whl", hash = "sha256:71bb308552200fb2c195e35ef05de12f0c878c07fc91c270eb3d6e41698c3bcc"}, - {file = "kiwisolver-1.4.7-cp310-cp310-win_amd64.whl", hash = "sha256:44756f9fd339de0fb6ee4f8c1696cfd19b2422e0d70b4cefc1cc7f1f64045a8c"}, - {file = "kiwisolver-1.4.7-cp310-cp310-win_arm64.whl", hash = "sha256:78a42513018c41c2ffd262eb676442315cbfe3c44eed82385c2ed043bc63210a"}, - {file = "kiwisolver-1.4.7-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:d2b0e12a42fb4e72d509fc994713d099cbb15ebf1103545e8a45f14da2dfca54"}, - {file = "kiwisolver-1.4.7-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2a8781ac3edc42ea4b90bc23e7d37b665d89423818e26eb6df90698aa2287c95"}, - {file = "kiwisolver-1.4.7-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:46707a10836894b559e04b0fd143e343945c97fd170d69a2d26d640b4e297935"}, - {file = "kiwisolver-1.4.7-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ef97b8df011141c9b0f6caf23b29379f87dd13183c978a30a3c546d2c47314cb"}, - {file = "kiwisolver-1.4.7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3ab58c12a2cd0fc769089e6d38466c46d7f76aced0a1f54c77652446733d2d02"}, - {file = "kiwisolver-1.4.7-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:803b8e1459341c1bb56d1c5c010406d5edec8a0713a0945851290a7930679b51"}, - {file = "kiwisolver-1.4.7-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f9a9e8a507420fe35992ee9ecb302dab68550dedc0da9e2880dd88071c5fb052"}, - {file = "kiwisolver-1.4.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:18077b53dc3bb490e330669a99920c5e6a496889ae8c63b58fbc57c3d7f33a18"}, - {file = "kiwisolver-1.4.7-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:6af936f79086a89b3680a280c47ea90b4df7047b5bdf3aa5c524bbedddb9e545"}, - {file = "kiwisolver-1.4.7-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:3abc5b19d24af4b77d1598a585b8a719beb8569a71568b66f4ebe1fb0449460b"}, - {file = "kiwisolver-1.4.7-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:933d4de052939d90afbe6e9d5273ae05fb836cc86c15b686edd4b3560cc0ee36"}, - {file = "kiwisolver-1.4.7-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:65e720d2ab2b53f1f72fb5da5fb477455905ce2c88aaa671ff0a447c2c80e8e3"}, - {file = "kiwisolver-1.4.7-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:3bf1ed55088f214ba6427484c59553123fdd9b218a42bbc8c6496d6754b1e523"}, - {file = "kiwisolver-1.4.7-cp311-cp311-win32.whl", hash = "sha256:4c00336b9dd5ad96d0a558fd18a8b6f711b7449acce4c157e7343ba92dd0cf3d"}, - {file = "kiwisolver-1.4.7-cp311-cp311-win_amd64.whl", hash = "sha256:929e294c1ac1e9f615c62a4e4313ca1823ba37326c164ec720a803287c4c499b"}, - {file = "kiwisolver-1.4.7-cp311-cp311-win_arm64.whl", hash = "sha256:e33e8fbd440c917106b237ef1a2f1449dfbb9b6f6e1ce17c94cd6a1e0d438376"}, - {file = "kiwisolver-1.4.7-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:5360cc32706dab3931f738d3079652d20982511f7c0ac5711483e6eab08efff2"}, - {file = "kiwisolver-1.4.7-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:942216596dc64ddb25adb215c3c783215b23626f8d84e8eff8d6d45c3f29f75a"}, - {file = "kiwisolver-1.4.7-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:48b571ecd8bae15702e4f22d3ff6a0f13e54d3d00cd25216d5e7f658242065ee"}, - {file = "kiwisolver-1.4.7-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ad42ba922c67c5f219097b28fae965e10045ddf145d2928bfac2eb2e17673640"}, - {file = "kiwisolver-1.4.7-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:612a10bdae23404a72941a0fc8fa2660c6ea1217c4ce0dbcab8a8f6543ea9e7f"}, - {file = "kiwisolver-1.4.7-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9e838bba3a3bac0fe06d849d29772eb1afb9745a59710762e4ba3f4cb8424483"}, - {file = "kiwisolver-1.4.7-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:22f499f6157236c19f4bbbd472fa55b063db77a16cd74d49afe28992dff8c258"}, - {file = "kiwisolver-1.4.7-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:693902d433cf585133699972b6d7c42a8b9f8f826ebcaf0132ff55200afc599e"}, - {file = "kiwisolver-1.4.7-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:4e77f2126c3e0b0d055f44513ed349038ac180371ed9b52fe96a32aa071a5107"}, - {file = "kiwisolver-1.4.7-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:657a05857bda581c3656bfc3b20e353c232e9193eb167766ad2dc58b56504948"}, - {file = "kiwisolver-1.4.7-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:4bfa75a048c056a411f9705856abfc872558e33c055d80af6a380e3658766038"}, - {file = "kiwisolver-1.4.7-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:34ea1de54beef1c104422d210c47c7d2a4999bdecf42c7b5718fbe59a4cac383"}, - {file = "kiwisolver-1.4.7-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:90da3b5f694b85231cf93586dad5e90e2d71b9428f9aad96952c99055582f520"}, - {file = "kiwisolver-1.4.7-cp312-cp312-win32.whl", hash = "sha256:18e0cca3e008e17fe9b164b55735a325140a5a35faad8de92dd80265cd5eb80b"}, - {file = "kiwisolver-1.4.7-cp312-cp312-win_amd64.whl", hash = "sha256:58cb20602b18f86f83a5c87d3ee1c766a79c0d452f8def86d925e6c60fbf7bfb"}, - {file = "kiwisolver-1.4.7-cp312-cp312-win_arm64.whl", hash = "sha256:f5a8b53bdc0b3961f8b6125e198617c40aeed638b387913bf1ce78afb1b0be2a"}, - {file = "kiwisolver-1.4.7-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:2e6039dcbe79a8e0f044f1c39db1986a1b8071051efba3ee4d74f5b365f5226e"}, - {file = "kiwisolver-1.4.7-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:a1ecf0ac1c518487d9d23b1cd7139a6a65bc460cd101ab01f1be82ecf09794b6"}, - {file = "kiwisolver-1.4.7-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:7ab9ccab2b5bd5702ab0803676a580fffa2aa178c2badc5557a84cc943fcf750"}, - {file = "kiwisolver-1.4.7-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f816dd2277f8d63d79f9c8473a79fe54047bc0467754962840782c575522224d"}, - {file = "kiwisolver-1.4.7-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cf8bcc23ceb5a1b624572a1623b9f79d2c3b337c8c455405ef231933a10da379"}, - {file = "kiwisolver-1.4.7-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dea0bf229319828467d7fca8c7c189780aa9ff679c94539eed7532ebe33ed37c"}, - {file = "kiwisolver-1.4.7-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7c06a4c7cf15ec739ce0e5971b26c93638730090add60e183530d70848ebdd34"}, - {file = "kiwisolver-1.4.7-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:913983ad2deb14e66d83c28b632fd35ba2b825031f2fa4ca29675e665dfecbe1"}, - {file = "kiwisolver-1.4.7-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5337ec7809bcd0f424c6b705ecf97941c46279cf5ed92311782c7c9c2026f07f"}, - {file = "kiwisolver-1.4.7-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:4c26ed10c4f6fa6ddb329a5120ba3b6db349ca192ae211e882970bfc9d91420b"}, - {file = "kiwisolver-1.4.7-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:c619b101e6de2222c1fcb0531e1b17bbffbe54294bfba43ea0d411d428618c27"}, - {file = "kiwisolver-1.4.7-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:073a36c8273647592ea332e816e75ef8da5c303236ec0167196793eb1e34657a"}, - {file = "kiwisolver-1.4.7-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:3ce6b2b0231bda412463e152fc18335ba32faf4e8c23a754ad50ffa70e4091ee"}, - {file = "kiwisolver-1.4.7-cp313-cp313-win32.whl", hash = "sha256:f4c9aee212bc89d4e13f58be11a56cc8036cabad119259d12ace14b34476fd07"}, - {file = "kiwisolver-1.4.7-cp313-cp313-win_amd64.whl", hash = "sha256:8a3ec5aa8e38fc4c8af308917ce12c536f1c88452ce554027e55b22cbbfbff76"}, - {file = "kiwisolver-1.4.7-cp313-cp313-win_arm64.whl", hash = "sha256:76c8094ac20ec259471ac53e774623eb62e6e1f56cd8690c67ce6ce4fcb05650"}, - {file = "kiwisolver-1.4.7-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5d5abf8f8ec1f4e22882273c423e16cae834c36856cac348cfbfa68e01c40f3a"}, - {file = "kiwisolver-1.4.7-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:aeb3531b196ef6f11776c21674dba836aeea9d5bd1cf630f869e3d90b16cfade"}, - {file = "kiwisolver-1.4.7-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:b7d755065e4e866a8086c9bdada157133ff466476a2ad7861828e17b6026e22c"}, - {file = "kiwisolver-1.4.7-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:08471d4d86cbaec61f86b217dd938a83d85e03785f51121e791a6e6689a3be95"}, - {file = "kiwisolver-1.4.7-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7bbfcb7165ce3d54a3dfbe731e470f65739c4c1f85bb1018ee912bae139e263b"}, - {file = "kiwisolver-1.4.7-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5d34eb8494bea691a1a450141ebb5385e4b69d38bb8403b5146ad279f4b30fa3"}, - {file = "kiwisolver-1.4.7-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9242795d174daa40105c1d86aba618e8eab7bf96ba8c3ee614da8302a9f95503"}, - {file = "kiwisolver-1.4.7-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:a0f64a48bb81af7450e641e3fe0b0394d7381e342805479178b3d335d60ca7cf"}, - {file = "kiwisolver-1.4.7-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:8e045731a5416357638d1700927529e2b8ab304811671f665b225f8bf8d8f933"}, - {file = "kiwisolver-1.4.7-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:4322872d5772cae7369f8351da1edf255a604ea7087fe295411397d0cfd9655e"}, - {file = "kiwisolver-1.4.7-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:e1631290ee9271dffe3062d2634c3ecac02c83890ada077d225e081aca8aab89"}, - {file = "kiwisolver-1.4.7-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:edcfc407e4eb17e037bca59be0e85a2031a2ac87e4fed26d3e9df88b4165f92d"}, - {file = "kiwisolver-1.4.7-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:4d05d81ecb47d11e7f8932bd8b61b720bf0b41199358f3f5e36d38e28f0532c5"}, - {file = "kiwisolver-1.4.7-cp38-cp38-win32.whl", hash = "sha256:b38ac83d5f04b15e515fd86f312479d950d05ce2368d5413d46c088dda7de90a"}, - {file = "kiwisolver-1.4.7-cp38-cp38-win_amd64.whl", hash = "sha256:d83db7cde68459fc803052a55ace60bea2bae361fc3b7a6d5da07e11954e4b09"}, - {file = "kiwisolver-1.4.7-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:3f9362ecfca44c863569d3d3c033dbe8ba452ff8eed6f6b5806382741a1334bd"}, - {file = "kiwisolver-1.4.7-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:e8df2eb9b2bac43ef8b082e06f750350fbbaf2887534a5be97f6cf07b19d9583"}, - {file = "kiwisolver-1.4.7-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f32d6edbc638cde7652bd690c3e728b25332acbadd7cad670cc4a02558d9c417"}, - {file = "kiwisolver-1.4.7-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:e2e6c39bd7b9372b0be21456caab138e8e69cc0fc1190a9dfa92bd45a1e6e904"}, - {file = "kiwisolver-1.4.7-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:dda56c24d869b1193fcc763f1284b9126550eaf84b88bbc7256e15028f19188a"}, - {file = "kiwisolver-1.4.7-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:79849239c39b5e1fd906556c474d9b0439ea6792b637511f3fe3a41158d89ca8"}, - {file = "kiwisolver-1.4.7-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5e3bc157fed2a4c02ec468de4ecd12a6e22818d4f09cde2c31ee3226ffbefab2"}, - {file = "kiwisolver-1.4.7-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3da53da805b71e41053dc670f9a820d1157aae77b6b944e08024d17bcd51ef88"}, - {file = "kiwisolver-1.4.7-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:8705f17dfeb43139a692298cb6637ee2e59c0194538153e83e9ee0c75c2eddde"}, - {file = "kiwisolver-1.4.7-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:82a5c2f4b87c26bb1a0ef3d16b5c4753434633b83d365cc0ddf2770c93829e3c"}, - {file = "kiwisolver-1.4.7-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:ce8be0466f4c0d585cdb6c1e2ed07232221df101a4c6f28821d2aa754ca2d9e2"}, - {file = "kiwisolver-1.4.7-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:409afdfe1e2e90e6ee7fc896f3df9a7fec8e793e58bfa0d052c8a82f99c37abb"}, - {file = "kiwisolver-1.4.7-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:5b9c3f4ee0b9a439d2415012bd1b1cc2df59e4d6a9939f4d669241d30b414327"}, - {file = "kiwisolver-1.4.7-cp39-cp39-win32.whl", hash = "sha256:a79ae34384df2b615eefca647a2873842ac3b596418032bef9a7283675962644"}, - {file = "kiwisolver-1.4.7-cp39-cp39-win_amd64.whl", hash = "sha256:cf0438b42121a66a3a667de17e779330fc0f20b0d97d59d2f2121e182b0505e4"}, - {file = "kiwisolver-1.4.7-cp39-cp39-win_arm64.whl", hash = "sha256:764202cc7e70f767dab49e8df52c7455e8de0df5d858fa801a11aa0d882ccf3f"}, - {file = "kiwisolver-1.4.7-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:94252291e3fe68001b1dd747b4c0b3be12582839b95ad4d1b641924d68fd4643"}, - {file = "kiwisolver-1.4.7-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:5b7dfa3b546da08a9f622bb6becdb14b3e24aaa30adba66749d38f3cc7ea9706"}, - {file = "kiwisolver-1.4.7-pp310-pypy310_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bd3de6481f4ed8b734da5df134cd5a6a64fe32124fe83dde1e5b5f29fe30b1e6"}, - {file = "kiwisolver-1.4.7-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a91b5f9f1205845d488c928e8570dcb62b893372f63b8b6e98b863ebd2368ff2"}, - {file = "kiwisolver-1.4.7-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40fa14dbd66b8b8f470d5fc79c089a66185619d31645f9b0773b88b19f7223c4"}, - {file = "kiwisolver-1.4.7-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:eb542fe7933aa09d8d8f9d9097ef37532a7df6497819d16efe4359890a2f417a"}, - {file = "kiwisolver-1.4.7-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:bfa1acfa0c54932d5607e19a2c24646fb4c1ae2694437789129cf099789a3b00"}, - {file = "kiwisolver-1.4.7-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:eee3ea935c3d227d49b4eb85660ff631556841f6e567f0f7bda972df6c2c9935"}, - {file = "kiwisolver-1.4.7-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:f3160309af4396e0ed04db259c3ccbfdc3621b5559b5453075e5de555e1f3a1b"}, - {file = "kiwisolver-1.4.7-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:a17f6a29cf8935e587cc8a4dbfc8368c55edc645283db0ce9801016f83526c2d"}, - {file = "kiwisolver-1.4.7-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:10849fb2c1ecbfae45a693c070e0320a91b35dd4bcf58172c023b994283a124d"}, - {file = "kiwisolver-1.4.7-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:ac542bf38a8a4be2dc6b15248d36315ccc65f0743f7b1a76688ffb6b5129a5c2"}, - {file = "kiwisolver-1.4.7-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:8b01aac285f91ca889c800042c35ad3b239e704b150cfd3382adfc9dcc780e39"}, - {file = "kiwisolver-1.4.7-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:48be928f59a1f5c8207154f935334d374e79f2b5d212826307d072595ad76a2e"}, - {file = "kiwisolver-1.4.7-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f37cfe618a117e50d8c240555331160d73d0411422b59b5ee217843d7b693608"}, - {file = "kiwisolver-1.4.7-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:599b5c873c63a1f6ed7eead644a8a380cfbdf5db91dcb6f85707aaab213b1674"}, - {file = "kiwisolver-1.4.7-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:801fa7802e5cfabe3ab0c81a34c323a319b097dfb5004be950482d882f3d7225"}, - {file = "kiwisolver-1.4.7-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:0c6c43471bc764fad4bc99c5c2d6d16a676b1abf844ca7c8702bdae92df01ee0"}, - {file = "kiwisolver-1.4.7.tar.gz", hash = "sha256:9893ff81bd7107f7b685d3017cc6583daadb4fc26e4a888350df530e41980a60"}, -] - -[[package]] -name = "kiwisolver" -version = "1.4.8" +version = "1.5.0" description = "A fast implementation of the Cassowary constraint solver" optional = false python-versions = ">=3.10" groups = ["main"] -markers = "python_version >= \"3.11\"" -files = [ - {file = "kiwisolver-1.4.8-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:88c6f252f6816a73b1f8c904f7bbe02fd67c09a69f7cb8a0eecdbf5ce78e63db"}, - {file = "kiwisolver-1.4.8-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c72941acb7b67138f35b879bbe85be0f6c6a70cab78fe3ef6db9c024d9223e5b"}, - {file = "kiwisolver-1.4.8-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ce2cf1e5688edcb727fdf7cd1bbd0b6416758996826a8be1d958f91880d0809d"}, - {file = "kiwisolver-1.4.8-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:c8bf637892dc6e6aad2bc6d4d69d08764166e5e3f69d469e55427b6ac001b19d"}, - {file = "kiwisolver-1.4.8-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:034d2c891f76bd3edbdb3ea11140d8510dca675443da7304205a2eaa45d8334c"}, - {file = "kiwisolver-1.4.8-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d47b28d1dfe0793d5e96bce90835e17edf9a499b53969b03c6c47ea5985844c3"}, - {file = "kiwisolver-1.4.8-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:eb158fe28ca0c29f2260cca8c43005329ad58452c36f0edf298204de32a9a3ed"}, - {file = "kiwisolver-1.4.8-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d5536185fce131780ebd809f8e623bf4030ce1b161353166c49a3c74c287897f"}, - {file = "kiwisolver-1.4.8-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:369b75d40abedc1da2c1f4de13f3482cb99e3237b38726710f4a793432b1c5ff"}, - {file = "kiwisolver-1.4.8-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:641f2ddf9358c80faa22e22eb4c9f54bd3f0e442e038728f500e3b978d00aa7d"}, - {file = "kiwisolver-1.4.8-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:d561d2d8883e0819445cfe58d7ddd673e4015c3c57261d7bdcd3710d0d14005c"}, - {file = "kiwisolver-1.4.8-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:1732e065704b47c9afca7ffa272f845300a4eb959276bf6970dc07265e73b605"}, - {file = "kiwisolver-1.4.8-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:bcb1ebc3547619c3b58a39e2448af089ea2ef44b37988caf432447374941574e"}, - {file = "kiwisolver-1.4.8-cp310-cp310-win_amd64.whl", hash = "sha256:89c107041f7b27844179ea9c85d6da275aa55ecf28413e87624d033cf1f6b751"}, - {file = "kiwisolver-1.4.8-cp310-cp310-win_arm64.whl", hash = "sha256:b5773efa2be9eb9fcf5415ea3ab70fc785d598729fd6057bea38d539ead28271"}, - {file = "kiwisolver-1.4.8-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:a4d3601908c560bdf880f07d94f31d734afd1bb71e96585cace0e38ef44c6d84"}, - {file = "kiwisolver-1.4.8-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:856b269c4d28a5c0d5e6c1955ec36ebfd1651ac00e1ce0afa3e28da95293b561"}, - {file = "kiwisolver-1.4.8-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c2b9a96e0f326205af81a15718a9073328df1173a2619a68553decb7097fd5d7"}, - {file = "kiwisolver-1.4.8-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c5020c83e8553f770cb3b5fc13faac40f17e0b205bd237aebd21d53d733adb03"}, - {file = "kiwisolver-1.4.8-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dace81d28c787956bfbfbbfd72fdcef014f37d9b48830829e488fdb32b49d954"}, - {file = "kiwisolver-1.4.8-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:11e1022b524bd48ae56c9b4f9296bce77e15a2e42a502cceba602f804b32bb79"}, - {file = "kiwisolver-1.4.8-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3b9b4d2892fefc886f30301cdd80debd8bb01ecdf165a449eb6e78f79f0fabd6"}, - {file = "kiwisolver-1.4.8-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a96c0e790ee875d65e340ab383700e2b4891677b7fcd30a699146f9384a2bb0"}, - {file = "kiwisolver-1.4.8-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:23454ff084b07ac54ca8be535f4174170c1094a4cff78fbae4f73a4bcc0d4dab"}, - {file = "kiwisolver-1.4.8-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:87b287251ad6488e95b4f0b4a79a6d04d3ea35fde6340eb38fbd1ca9cd35bbbc"}, - {file = "kiwisolver-1.4.8-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:b21dbe165081142b1232a240fc6383fd32cdd877ca6cc89eab93e5f5883e1c25"}, - {file = "kiwisolver-1.4.8-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:768cade2c2df13db52475bd28d3a3fac8c9eff04b0e9e2fda0f3760f20b3f7fc"}, - {file = "kiwisolver-1.4.8-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:d47cfb2650f0e103d4bf68b0b5804c68da97272c84bb12850d877a95c056bd67"}, - {file = "kiwisolver-1.4.8-cp311-cp311-win_amd64.whl", hash = "sha256:ed33ca2002a779a2e20eeb06aea7721b6e47f2d4b8a8ece979d8ba9e2a167e34"}, - {file = "kiwisolver-1.4.8-cp311-cp311-win_arm64.whl", hash = "sha256:16523b40aab60426ffdebe33ac374457cf62863e330a90a0383639ce14bf44b2"}, - {file = "kiwisolver-1.4.8-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:d6af5e8815fd02997cb6ad9bbed0ee1e60014438ee1a5c2444c96f87b8843502"}, - {file = "kiwisolver-1.4.8-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:bade438f86e21d91e0cf5dd7c0ed00cda0f77c8c1616bd83f9fc157fa6760d31"}, - {file = "kiwisolver-1.4.8-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b83dc6769ddbc57613280118fb4ce3cd08899cc3369f7d0e0fab518a7cf37fdb"}, - {file = "kiwisolver-1.4.8-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:111793b232842991be367ed828076b03d96202c19221b5ebab421ce8bcad016f"}, - {file = "kiwisolver-1.4.8-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:257af1622860e51b1a9d0ce387bf5c2c4f36a90594cb9514f55b074bcc787cfc"}, - {file = "kiwisolver-1.4.8-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:69b5637c3f316cab1ec1c9a12b8c5f4750a4c4b71af9157645bf32830e39c03a"}, - {file = "kiwisolver-1.4.8-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:782bb86f245ec18009890e7cb8d13a5ef54dcf2ebe18ed65f795e635a96a1c6a"}, - {file = "kiwisolver-1.4.8-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cc978a80a0db3a66d25767b03688f1147a69e6237175c0f4ffffaaedf744055a"}, - {file = "kiwisolver-1.4.8-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:36dbbfd34838500a31f52c9786990d00150860e46cd5041386f217101350f0d3"}, - {file = "kiwisolver-1.4.8-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:eaa973f1e05131de5ff3569bbba7f5fd07ea0595d3870ed4a526d486fe57fa1b"}, - {file = "kiwisolver-1.4.8-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:a66f60f8d0c87ab7f59b6fb80e642ebb29fec354a4dfad687ca4092ae69d04f4"}, - {file = "kiwisolver-1.4.8-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:858416b7fb777a53f0c59ca08190ce24e9abbd3cffa18886a5781b8e3e26f65d"}, - {file = "kiwisolver-1.4.8-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:085940635c62697391baafaaeabdf3dd7a6c3643577dde337f4d66eba021b2b8"}, - {file = "kiwisolver-1.4.8-cp312-cp312-win_amd64.whl", hash = "sha256:01c3d31902c7db5fb6182832713d3b4122ad9317c2c5877d0539227d96bb2e50"}, - {file = "kiwisolver-1.4.8-cp312-cp312-win_arm64.whl", hash = "sha256:a3c44cb68861de93f0c4a8175fbaa691f0aa22550c331fefef02b618a9dcb476"}, - {file = "kiwisolver-1.4.8-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:1c8ceb754339793c24aee1c9fb2485b5b1f5bb1c2c214ff13368431e51fc9a09"}, - {file = "kiwisolver-1.4.8-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:54a62808ac74b5e55a04a408cda6156f986cefbcf0ada13572696b507cc92fa1"}, - {file = "kiwisolver-1.4.8-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:68269e60ee4929893aad82666821aaacbd455284124817af45c11e50a4b42e3c"}, - {file = "kiwisolver-1.4.8-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:34d142fba9c464bc3bbfeff15c96eab0e7310343d6aefb62a79d51421fcc5f1b"}, - {file = "kiwisolver-1.4.8-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3ddc373e0eef45b59197de815b1b28ef89ae3955e7722cc9710fb91cd77b7f47"}, - {file = "kiwisolver-1.4.8-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:77e6f57a20b9bd4e1e2cedda4d0b986ebd0216236f0106e55c28aea3d3d69b16"}, - {file = "kiwisolver-1.4.8-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:08e77738ed7538f036cd1170cbed942ef749137b1311fa2bbe2a7fda2f6bf3cc"}, - {file = "kiwisolver-1.4.8-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a5ce1e481a74b44dd5e92ff03ea0cb371ae7a0268318e202be06c8f04f4f1246"}, - {file = "kiwisolver-1.4.8-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:fc2ace710ba7c1dfd1a3b42530b62b9ceed115f19a1656adefce7b1782a37794"}, - {file = "kiwisolver-1.4.8-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:3452046c37c7692bd52b0e752b87954ef86ee2224e624ef7ce6cb21e8c41cc1b"}, - {file = "kiwisolver-1.4.8-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:7e9a60b50fe8b2ec6f448fe8d81b07e40141bfced7f896309df271a0b92f80f3"}, - {file = "kiwisolver-1.4.8-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:918139571133f366e8362fa4a297aeba86c7816b7ecf0bc79168080e2bd79957"}, - {file = "kiwisolver-1.4.8-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e063ef9f89885a1d68dd8b2e18f5ead48653176d10a0e324e3b0030e3a69adeb"}, - {file = "kiwisolver-1.4.8-cp313-cp313-win_amd64.whl", hash = "sha256:a17b7c4f5b2c51bb68ed379defd608a03954a1845dfed7cc0117f1cc8a9b7fd2"}, - {file = "kiwisolver-1.4.8-cp313-cp313-win_arm64.whl", hash = "sha256:3cd3bc628b25f74aedc6d374d5babf0166a92ff1317f46267f12d2ed54bc1d30"}, - {file = "kiwisolver-1.4.8-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:370fd2df41660ed4e26b8c9d6bbcad668fbe2560462cba151a721d49e5b6628c"}, - {file = "kiwisolver-1.4.8-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:84a2f830d42707de1d191b9490ac186bf7997a9495d4e9072210a1296345f7dc"}, - {file = "kiwisolver-1.4.8-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:7a3ad337add5148cf51ce0b55642dc551c0b9d6248458a757f98796ca7348712"}, - {file = "kiwisolver-1.4.8-cp313-cp313t-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7506488470f41169b86d8c9aeff587293f530a23a23a49d6bc64dab66bedc71e"}, - {file = "kiwisolver-1.4.8-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2f0121b07b356a22fb0414cec4666bbe36fd6d0d759db3d37228f496ed67c880"}, - {file = "kiwisolver-1.4.8-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d6d6bd87df62c27d4185de7c511c6248040afae67028a8a22012b010bc7ad062"}, - {file = "kiwisolver-1.4.8-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:291331973c64bb9cce50bbe871fb2e675c4331dab4f31abe89f175ad7679a4d7"}, - {file = "kiwisolver-1.4.8-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:893f5525bb92d3d735878ec00f781b2de998333659507d29ea4466208df37bed"}, - {file = "kiwisolver-1.4.8-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:b47a465040146981dc9db8647981b8cb96366fbc8d452b031e4f8fdffec3f26d"}, - {file = "kiwisolver-1.4.8-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:99cea8b9dd34ff80c521aef46a1dddb0dcc0283cf18bde6d756f1e6f31772165"}, - {file = "kiwisolver-1.4.8-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:151dffc4865e5fe6dafce5480fab84f950d14566c480c08a53c663a0020504b6"}, - {file = "kiwisolver-1.4.8-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:577facaa411c10421314598b50413aa1ebcf5126f704f1e5d72d7e4e9f020d90"}, - {file = "kiwisolver-1.4.8-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:be4816dc51c8a471749d664161b434912eee82f2ea66bd7628bd14583a833e85"}, - {file = "kiwisolver-1.4.8-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:e7a019419b7b510f0f7c9dceff8c5eae2392037eae483a7f9162625233802b0a"}, - {file = "kiwisolver-1.4.8-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:286b18e86682fd2217a48fc6be6b0f20c1d0ed10958d8dc53453ad58d7be0bf8"}, - {file = "kiwisolver-1.4.8-pp310-pypy310_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4191ee8dfd0be1c3666ccbac178c5a05d5f8d689bbe3fc92f3c4abec817f8fe0"}, - {file = "kiwisolver-1.4.8-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7cd2785b9391f2873ad46088ed7599a6a71e762e1ea33e87514b1a441ed1da1c"}, - {file = "kiwisolver-1.4.8-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c07b29089b7ba090b6f1a669f1411f27221c3662b3a1b7010e67b59bb5a6f10b"}, - {file = "kiwisolver-1.4.8-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:65ea09a5a3faadd59c2ce96dc7bf0f364986a315949dc6374f04396b0d60e09b"}, - {file = "kiwisolver-1.4.8.tar.gz", hash = "sha256:23d5f023bdc8c7e54eb65f03ca5d5bb25b601eac4d7f1a042888a1f45237987e"}, +markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" +files = [ + {file = "kiwisolver-1.5.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:32cc0a5365239a6ea0c6ed461e8838d053b57e397443c0ca894dcc8e388d4374"}, + {file = "kiwisolver-1.5.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:cc0b66c1eec9021353a4b4483afb12dfd50e3669ffbb9152d6842eb34c7e29fd"}, + {file = "kiwisolver-1.5.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:86e0287879f75621ae85197b0877ed2f8b7aa57b511c7331dce2eb6f4de7d476"}, + {file = "kiwisolver-1.5.0-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:62f59da443c4f4849f73a51a193b1d9d258dcad0c41bc4d1b8fb2bcc04bfeb22"}, + {file = "kiwisolver-1.5.0-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9190426b7aa26c5229501fa297b8d0653cfd3f5a36f7990c264e157cbf886b3b"}, + {file = "kiwisolver-1.5.0-cp310-cp310-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c8277104ded0a51e699c8c3aff63ce2c56d4ed5519a5f73e0fd7057f959a2b9e"}, + {file = "kiwisolver-1.5.0-cp310-cp310-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:8f9baf6f0a6e7571c45c8863010b45e837c3ee1c2c77fcd6ef423be91b21fedb"}, + {file = "kiwisolver-1.5.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:cff8e5383db4989311f99e814feeb90c4723eb4edca425b9d5d9c3fefcdd9537"}, + {file = "kiwisolver-1.5.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:ebae99ed6764f2b5771c522477b311be313e8841d2e0376db2b10922daebbba4"}, + {file = "kiwisolver-1.5.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:d5cd5189fc2b6a538b75ae45433140c4823463918f7b1617c31e68b085c0022c"}, + {file = "kiwisolver-1.5.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:f42c23db5d1521218a3276bb08666dcb662896a0be7347cba864eca45ff64ede"}, + {file = "kiwisolver-1.5.0-cp310-cp310-win_amd64.whl", hash = "sha256:94eff26096eb5395136634622515b234ecb6c9979824c1f5004c6e3c3c85ccd2"}, + {file = "kiwisolver-1.5.0-cp310-cp310-win_arm64.whl", hash = "sha256:dd952e03bfbb096cfe2dd35cd9e00f269969b67536cb4370994afc20ff2d0875"}, + {file = "kiwisolver-1.5.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9eed0f7edbb274413b6ee781cca50541c8c0facd3d6fd289779e494340a2b85c"}, + {file = "kiwisolver-1.5.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3c4923e404d6bcd91b6779c009542e5647fef32e4a5d75e115e3bbac6f2335eb"}, + {file = "kiwisolver-1.5.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:0df54df7e686afa55e6f21fb86195224a6d9beb71d637e8d7920c95cf0f89aac"}, + {file = "kiwisolver-1.5.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:2517e24d7315eb51c10664cdb865195df38ab74456c677df67bb47f12d088a27"}, + {file = "kiwisolver-1.5.0-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ff710414307fefa903e0d9bdf300972f892c23477829f49504e59834f4195398"}, + {file = "kiwisolver-1.5.0-cp311-cp311-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:6176c1811d9d5a04fa391c490cc44f451e240697a16977f11c6f722efb9041db"}, + {file = "kiwisolver-1.5.0-cp311-cp311-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:50847dca5d197fcbd389c805aa1a1cf32f25d2e7273dc47ab181a517666b68cc"}, + {file = "kiwisolver-1.5.0-cp311-cp311-manylinux_2_39_riscv64.whl", hash = "sha256:01808c6d15f4c3e8559595d6d1fe6411c68e4a3822b4b9972b44473b24f4e679"}, + {file = "kiwisolver-1.5.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:f1f9f4121ec58628c96baa3de1a55a4e3a333c5102c8e94b64e23bf7b2083309"}, + {file = "kiwisolver-1.5.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:b7d335370ae48a780c6e6a6bbfa97342f563744c39c35562f3f367665f5c1de2"}, + {file = "kiwisolver-1.5.0-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:800ee55980c18545af444d93fdd60c56b580db5cc54867d8cbf8a1dc0829938c"}, + {file = "kiwisolver-1.5.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:c438f6ca858697c9ab67eb28246c92508af972e114cac34e57a6d4ba17a3ac08"}, + {file = "kiwisolver-1.5.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:8c63c91f95173f9c2a67c7c526b2cea976828a0e7fced9cdcead2802dc10f8a4"}, + {file = "kiwisolver-1.5.0-cp311-cp311-win_amd64.whl", hash = "sha256:beb7f344487cdcb9e1efe4b7a29681b74d34c08f0043a327a74da852a6749e7b"}, + {file = "kiwisolver-1.5.0-cp311-cp311-win_arm64.whl", hash = "sha256:ad4ae4ffd1ee9cd11357b4c66b612da9888f4f4daf2f36995eda64bd45370cac"}, + {file = "kiwisolver-1.5.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:4e9750bc21b886308024f8a54ccb9a2cc38ac9fa813bf4348434e3d54f337ff9"}, + {file = "kiwisolver-1.5.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:72ec46b7eba5b395e0a7b63025490d3214c11013f4aacb4f5e8d6c3041829588"}, + {file = "kiwisolver-1.5.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ed3a984b31da7481b103f68776f7128a89ef26ed40f4dc41a2223cda7fb24819"}, + {file = "kiwisolver-1.5.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:bb5136fb5352d3f422df33f0c879a1b0c204004324150cc3b5e3c4f310c9049f"}, + {file = "kiwisolver-1.5.0-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b2af221f268f5af85e776a73d62b0845fc8baf8ef0abfae79d29c77d0e776aaf"}, + {file = "kiwisolver-1.5.0-cp312-cp312-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:b0f172dc8ffaccb8522d7c5d899de00133f2f1ca7b0a49b7da98e901de87bf2d"}, + {file = "kiwisolver-1.5.0-cp312-cp312-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:6ab8ba9152203feec73758dad83af9a0bbe05001eb4639e547207c40cfb52083"}, + {file = "kiwisolver-1.5.0-cp312-cp312-manylinux_2_39_riscv64.whl", hash = "sha256:cdee07c4d7f6d72008d3f73b9bf027f4e11550224c7c50d8df1ae4a37c1402a6"}, + {file = "kiwisolver-1.5.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:7c60d3c9b06fb23bd9c6139281ccbdc384297579ae037f08ae90c69f6845c0b1"}, + {file = "kiwisolver-1.5.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:e315e5ec90d88e140f57696ff85b484ff68bb311e36f2c414aa4286293e6dee0"}, + {file = "kiwisolver-1.5.0-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:1465387ac63576c3e125e5337a6892b9e99e0627d52317f3ca79e6930d889d15"}, + {file = "kiwisolver-1.5.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:530a3fd64c87cffa844d4b6b9768774763d9caa299e9b75d8eca6a4423b31314"}, + {file = "kiwisolver-1.5.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:1d9daea4ea6b9be74fe2f01f7fbade8d6ffab263e781274cffca0dba9be9eec9"}, + {file = "kiwisolver-1.5.0-cp312-cp312-win_amd64.whl", hash = "sha256:f18c2d9782259a6dc132fdc7a63c168cbc74b35284b6d75c673958982a378384"}, + {file = "kiwisolver-1.5.0-cp312-cp312-win_arm64.whl", hash = "sha256:f7c7553b13f69c1b29a5bde08ddc6d9d0c8bfb84f9ed01c30db25944aeb852a7"}, + {file = "kiwisolver-1.5.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:fd40bb9cd0891c4c3cb1ddf83f8bbfa15731a248fdc8162669405451e2724b09"}, + {file = "kiwisolver-1.5.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:c0e1403fd7c26d77c1f03e096dc58a5c726503fa0db0456678b8668f76f521e3"}, + {file = "kiwisolver-1.5.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:dda366d548e89a90d88a86c692377d18d8bd64b39c1fb2b92cb31370e2896bbd"}, + {file = "kiwisolver-1.5.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:332b4f0145c30b5f5ad9374881133e5aa64320428a57c2c2b61e9d891a51c2f3"}, + {file = "kiwisolver-1.5.0-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0c50b89ffd3e1a911c69a1dd3de7173c0cd10b130f56222e57898683841e4f96"}, + {file = "kiwisolver-1.5.0-cp313-cp313-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:4db576bb8c3ef9365f8b40fe0f671644de6736ae2c27a2c62d7d8a1b4329f099"}, + {file = "kiwisolver-1.5.0-cp313-cp313-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:0b85aad90cea8ac6797a53b5d5f2e967334fa4d1149f031c4537569972596cb8"}, + {file = "kiwisolver-1.5.0-cp313-cp313-manylinux_2_39_riscv64.whl", hash = "sha256:d36ca54cb4c6c4686f7cbb7b817f66f5911c12ddb519450bbe86707155028f87"}, + {file = "kiwisolver-1.5.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:38f4a703656f493b0ad185211ccfca7f0386120f022066b018eb5296d8613e23"}, + {file = "kiwisolver-1.5.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:3ac2360e93cb41be81121755c6462cff3beaa9967188c866e5fce5cf13170859"}, + {file = "kiwisolver-1.5.0-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:c95cab08d1965db3d84a121f1c7ce7479bdd4072c9b3dafd8fecce48a2e6b902"}, + {file = "kiwisolver-1.5.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:fc20894c3d21194d8041a28b65622d5b86db786da6e3cfe73f0c762951a61167"}, + {file = "kiwisolver-1.5.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:7a32f72973f0f950c1920475d5c5ea3d971b81b6f0ec53b8d0a956cc965f22e0"}, + {file = "kiwisolver-1.5.0-cp313-cp313-win_amd64.whl", hash = "sha256:0bf3acf1419fa93064a4c2189ac0b58e3be7872bf6ee6177b0d4c63dc4cea276"}, + {file = "kiwisolver-1.5.0-cp313-cp313-win_arm64.whl", hash = "sha256:fa8eb9ecdb7efb0b226acec134e0d709e87a909fa4971a54c0c4f6e88635484c"}, + {file = "kiwisolver-1.5.0-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:db485b3847d182b908b483b2ed133c66d88d49cacf98fd278fadafe11b4478d1"}, + {file = "kiwisolver-1.5.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:be12f931839a3bdfe28b584db0e640a65a8bcbc24560ae3fdb025a449b3d754e"}, + {file = "kiwisolver-1.5.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:16b85d37c2cbb3253226d26e64663f755d88a03439a9c47df6246b35defbdfb7"}, + {file = "kiwisolver-1.5.0-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:4432b835675f0ea7414aab3d37d119f7226d24869b7a829caeab49ebda407b0c"}, + {file = "kiwisolver-1.5.0-cp313-cp313t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1b0feb50971481a2cc44d94e88bdb02cdd497618252ae226b8eb1201b957e368"}, + {file = "kiwisolver-1.5.0-cp313-cp313t-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:56fa888f10d0f367155e76ce849fa1166fc9730d13bd2d65a2aa13b6f5424489"}, + {file = "kiwisolver-1.5.0-cp313-cp313t-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:940dda65d5e764406b9fb92761cbf462e4e63f712ab60ed98f70552e496f3bf1"}, + {file = "kiwisolver-1.5.0-cp313-cp313t-manylinux_2_39_riscv64.whl", hash = "sha256:89fc958c702ee9a745e4700378f5d23fddbc46ff89e8fdbf5395c24d5c1452a3"}, + {file = "kiwisolver-1.5.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:9027d773c4ff81487181a925945743413f6069634d0b122d0b37684ccf4f1e18"}, + {file = "kiwisolver-1.5.0-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:5b233ea3e165e43e35dba1d2b8ecc21cf070b45b65ae17dd2747d2713d942021"}, + {file = "kiwisolver-1.5.0-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:ce9bf03dad3b46408c08649c6fbd6ca28a9fce0eb32fdfffa6775a13103b5310"}, + {file = "kiwisolver-1.5.0-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:fc4d3f1fb9ca0ae9f97b095963bc6326f1dbfd3779d6679a1e016b9baaa153d3"}, + {file = "kiwisolver-1.5.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:f443b4825c50a51ee68585522ab4a1d1257fac65896f282b4c6763337ac9f5d2"}, + {file = "kiwisolver-1.5.0-cp313-cp313t-win_arm64.whl", hash = "sha256:893ff3a711d1b515ba9da14ee090519bad4610ed1962fbe298a434e8c5f8db53"}, + {file = "kiwisolver-1.5.0-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:8df31fe574b8b3993cc61764f40941111b25c2d9fea13d3ce24a49907cd2d615"}, + {file = "kiwisolver-1.5.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:1d49a49ac4cbfb7c1375301cd1ec90169dfeae55ff84710d782260ce77a75a02"}, + {file = "kiwisolver-1.5.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:0cbe94b69b819209a62cb27bdfa5dc2a8977d8de2f89dfd97ba4f53ed3af754e"}, + {file = "kiwisolver-1.5.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:80aa065ffd378ff784822a6d7c3212f2d5f5e9c3589614b5c228b311fd3063ac"}, + {file = "kiwisolver-1.5.0-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4e7f886f47ab881692f278ae901039a234e4025a68e6dfab514263a0b1c4ae05"}, + {file = "kiwisolver-1.5.0-cp314-cp314-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:5060731cc3ed12ca3a8b57acd4aeca5bbc2f49216dd0bec1650a1acd89486bcd"}, + {file = "kiwisolver-1.5.0-cp314-cp314-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:7a4aa69609f40fce3cbc3f87b2061f042eee32f94b8f11db707b66a26461591a"}, + {file = "kiwisolver-1.5.0-cp314-cp314-manylinux_2_39_riscv64.whl", hash = "sha256:d168fda2dbff7b9b5f38e693182d792a938c31db4dac3a80a4888de603c99554"}, + {file = "kiwisolver-1.5.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:413b820229730d358efd838ecbab79902fe97094565fdc80ddb6b0a18c18a581"}, + {file = "kiwisolver-1.5.0-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:5124d1ea754509b09e53738ec185584cc609aae4a3b510aaf4ed6aa047ef9303"}, + {file = "kiwisolver-1.5.0-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:e4415a8db000bf49a6dd1c478bf70062eaacff0f462b92b0ba68791a905861f9"}, + {file = "kiwisolver-1.5.0-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:d618fd27420381a4f6044faa71f46d8bfd911bd077c555f7138ed88729bfbe79"}, + {file = "kiwisolver-1.5.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:5092eb5b1172947f57d6ea7d89b2f29650414e4293c47707eb499ec07a0ac796"}, + {file = "kiwisolver-1.5.0-cp314-cp314-win_amd64.whl", hash = "sha256:d76e2d8c75051d58177e762164d2e9ab92886534e3a12e795f103524f221dd8e"}, + {file = "kiwisolver-1.5.0-cp314-cp314-win_arm64.whl", hash = "sha256:fa6248cd194edff41d7ea9425ced8ca3a6f838bfb295f6f1d6e6bb694a8518df"}, + {file = "kiwisolver-1.5.0-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:d1ffeb80b5676463d7a7d56acbe8e37a20ce725570e09549fe738e02ca6b7e1e"}, + {file = "kiwisolver-1.5.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:bc4d8e252f532ab46a1de9349e2d27b91fce46736a9eedaa37beaca66f574ed4"}, + {file = "kiwisolver-1.5.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:6783e069732715ad0c3ce96dbf21dbc2235ab0593f2baf6338101f70371f4028"}, + {file = "kiwisolver-1.5.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:e7c4c09a490dc4d4a7f8cbee56c606a320f9dc28cf92a7157a39d1ce7676a657"}, + {file = "kiwisolver-1.5.0-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2a075bd7bd19c70cf67c8badfa36cf7c5d8de3c9ddb8420c51e10d9c50e94920"}, + {file = "kiwisolver-1.5.0-cp314-cp314t-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:bdd3e53429ff02aa319ba59dfe4ceeec345bf46cf180ec2cf6fd5b942e7975e9"}, + {file = "kiwisolver-1.5.0-cp314-cp314t-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:3cdcb35dc9d807259c981a85531048ede628eabcffb3239adf3d17463518992d"}, + {file = "kiwisolver-1.5.0-cp314-cp314t-manylinux_2_39_riscv64.whl", hash = "sha256:70d593af6a6ca332d1df73d519fddb5148edb15cd90d5f0155e3746a6d4fcc65"}, + {file = "kiwisolver-1.5.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:377815a8616074cabbf3f53354e1d040c35815a134e01d7614b7692e4bf8acfa"}, + {file = "kiwisolver-1.5.0-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:0255a027391d52944eae1dbb5d4cc5903f57092f3674e8e544cdd2622826b3f0"}, + {file = "kiwisolver-1.5.0-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:012b1eb16e28718fa782b5e61dc6f2da1f0792ca73bd05d54de6cb9561665fc9"}, + {file = "kiwisolver-1.5.0-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:0e3aafb33aed7479377e5e9a82e9d4bf87063741fc99fc7ae48b0f16e32bdd6f"}, + {file = "kiwisolver-1.5.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:e7a116ae737f0000343218c4edf5bd45893bfeaff0993c0b215d7124c9f77646"}, + {file = "kiwisolver-1.5.0-cp314-cp314t-win_amd64.whl", hash = "sha256:1dd9b0b119a350976a6d781e7278ec7aca0b201e1a9e2d23d9804afecb6ca681"}, + {file = "kiwisolver-1.5.0-cp314-cp314t-win_arm64.whl", hash = "sha256:58f812017cd2985c21fbffb4864d59174d4903dd66fa23815e74bbc7a0e2dd57"}, + {file = "kiwisolver-1.5.0-graalpy312-graalpy250_312_native-macosx_10_13_x86_64.whl", hash = "sha256:5ae8e62c147495b01a0f4765c878e9bfdf843412446a247e28df59936e99e797"}, + {file = "kiwisolver-1.5.0-graalpy312-graalpy250_312_native-macosx_11_0_arm64.whl", hash = "sha256:f6764a4ccab3078db14a632420930f6186058750df066b8ea2a7106df91d3203"}, + {file = "kiwisolver-1.5.0-graalpy312-graalpy250_312_native-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c31c13da98624f957b0fb1b5bae5383b2333c2c3f6793d9825dd5ce79b525cb7"}, + {file = "kiwisolver-1.5.0-graalpy312-graalpy250_312_native-win_amd64.whl", hash = "sha256:1f1489f769582498610e015a8ef2d36f28f505ab3096d0e16b4858a9ec214f57"}, + {file = "kiwisolver-1.5.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:295d9ffe712caa9f8a3081de8d32fc60191b4b51c76f02f951fd8407253528f4"}, + {file = "kiwisolver-1.5.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:51e8c4084897de9f05898c2c2a39af6318044ae969d46ff7a34ed3f96274adca"}, + {file = "kiwisolver-1.5.0-pp310-pypy310_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:b83af57bdddef03c01a9138034c6ff03181a3028d9a1003b301eb1a55e161a3f"}, + {file = "kiwisolver-1.5.0-pp310-pypy310_pp73-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bf4679a3d71012a7c2bf360e5cd878fbd5e4fcac0896b56393dec239d81529ed"}, + {file = "kiwisolver-1.5.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:41024ed50e44ab1a60d3fe0a9d15a4ccc9f5f2b1d814ff283c8d01134d5b81bc"}, + {file = "kiwisolver-1.5.0-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:ec4c85dc4b687c7f7f15f553ff26a98bfe8c58f5f7f0ac8905f0ba4c7be60232"}, + {file = "kiwisolver-1.5.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:12e91c215a96e39f57989c8912ae761286ac5a9584d04030ceb3368a357f017a"}, + {file = "kiwisolver-1.5.0-pp311-pypy311_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:be4a51a55833dc29ab5d7503e7bcb3b3af3402d266018137127450005cdfe737"}, + {file = "kiwisolver-1.5.0-pp311-pypy311_pp73-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:daae526907e262de627d8f70058a0f64acc9e2641c164c99c8f594b34a799a16"}, + {file = "kiwisolver-1.5.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:59cd8683f575d96df5bb48f6add94afc055012c29e28124fcae2b63661b9efb1"}, + {file = "kiwisolver-1.5.0.tar.gz", hash = "sha256:d4193f3d9dc3f6f79aaed0e5637f45d98850ebf01f7ca20e69457f3e8946b66a"}, ] [[package]] name = "markdown" -version = "3.8.2" +version = "3.10.2" description = "Python implementation of John Gruber's Markdown." optional = false -python-versions = ">=3.9" +python-versions = ">=3.10" groups = ["main"] +markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ - {file = "markdown-3.8.2-py3-none-any.whl", hash = "sha256:5c83764dbd4e00bdd94d85a19b8d55ccca20fe35b2e678a1422b380324dd5f24"}, - {file = "markdown-3.8.2.tar.gz", hash = "sha256:247b9a70dd12e27f67431ce62523e675b866d254f900c4fe75ce3dda62237c45"}, + {file = "markdown-3.10.2-py3-none-any.whl", hash = "sha256:e91464b71ae3ee7afd3017d9f358ef0baf158fd9a298db92f1d4761133824c36"}, + {file = "markdown-3.10.2.tar.gz", hash = "sha256:994d51325d25ad8aa7ce4ebaec003febcce822c3f8c911e3b17c52f7f589f950"}, ] -[package.dependencies] -importlib-metadata = {version = ">=4.4", markers = "python_version < \"3.10\""} - [package.extras] -docs = ["mdx_gh_links (>=0.2)", "mkdocs (>=1.6)", "mkdocs-gen-files", "mkdocs-literate-nav", "mkdocs-nature (>=0.6)", "mkdocs-section-index", "mkdocstrings[python]"] +docs = ["mdx_gh_links (>=0.2)", "mkdocs (>=1.6)", "mkdocs-gen-files", "mkdocs-literate-nav", "mkdocs-nature (>=0.6)", "mkdocs-section-index", "mkdocstrings[python] (>=0.28.3)"] testing = ["coverage", "pyyaml"] -[[package]] -name = "markdown-it-py" -version = "3.0.0" -description = "Python port of markdown-it. Markdown parsing, done right!" -optional = false -python-versions = ">=3.8" -groups = ["main"] -files = [ - {file = "markdown-it-py-3.0.0.tar.gz", hash = "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb"}, - {file = "markdown_it_py-3.0.0-py3-none-any.whl", hash = "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1"}, -] - -[package.dependencies] -mdurl = ">=0.1,<1.0" - -[package.extras] -benchmarking = ["psutil", "pytest", "pytest-benchmark"] -code-style = ["pre-commit (>=3.0,<4.0)"] -compare = ["commonmark (>=0.9,<1.0)", "markdown (>=3.4,<4.0)", "mistletoe (>=1.0,<2.0)", "mistune (>=2.0,<3.0)", "panflute (>=2.3,<3.0)"] -linkify = ["linkify-it-py (>=1,<3)"] -plugins = ["mdit-py-plugins"] -profiling = ["gprof2dot"] -rtd = ["jupyter_sphinx", "mdit-py-plugins", "myst-parser", "pyyaml", "sphinx", "sphinx-copybutton", "sphinx-design", "sphinx_book_theme"] -testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] - [[package]] name = "markupsafe" -version = "3.0.2" +version = "3.0.3" description = "Safely add untrusted strings to HTML/XML markup." optional = false python-versions = ">=3.9" groups = ["main"] -files = [ - {file = "MarkupSafe-3.0.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7e94c425039cde14257288fd61dcfb01963e658efbc0ff54f5306b06054700f8"}, - {file = "MarkupSafe-3.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9e2d922824181480953426608b81967de705c3cef4d1af983af849d7bd619158"}, - {file = "MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:38a9ef736c01fccdd6600705b09dc574584b89bea478200c5fbf112a6b0d5579"}, - {file = "MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bbcb445fa71794da8f178f0f6d66789a28d7319071af7a496d4d507ed566270d"}, - {file = "MarkupSafe-3.0.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:57cb5a3cf367aeb1d316576250f65edec5bb3be939e9247ae594b4bcbc317dfb"}, - {file = "MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:3809ede931876f5b2ec92eef964286840ed3540dadf803dd570c3b7e13141a3b"}, - {file = "MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e07c3764494e3776c602c1e78e298937c3315ccc9043ead7e685b7f2b8d47b3c"}, - {file = "MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:b424c77b206d63d500bcb69fa55ed8d0e6a3774056bdc4839fc9298a7edca171"}, - {file = "MarkupSafe-3.0.2-cp310-cp310-win32.whl", hash = "sha256:fcabf5ff6eea076f859677f5f0b6b5c1a51e70a376b0579e0eadef8db48c6b50"}, - {file = "MarkupSafe-3.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:6af100e168aa82a50e186c82875a5893c5597a0c1ccdb0d8b40240b1f28b969a"}, - {file = "MarkupSafe-3.0.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9025b4018f3a1314059769c7bf15441064b2207cb3f065e6ea1e7359cb46db9d"}, - {file = "MarkupSafe-3.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:93335ca3812df2f366e80509ae119189886b0f3c2b81325d39efdb84a1e2ae93"}, - {file = "MarkupSafe-3.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2cb8438c3cbb25e220c2ab33bb226559e7afb3baec11c4f218ffa7308603c832"}, - {file = "MarkupSafe-3.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a123e330ef0853c6e822384873bef7507557d8e4a082961e1defa947aa59ba84"}, - {file = "MarkupSafe-3.0.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e084f686b92e5b83186b07e8a17fc09e38fff551f3602b249881fec658d3eca"}, - {file = "MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d8213e09c917a951de9d09ecee036d5c7d36cb6cb7dbaece4c71a60d79fb9798"}, - {file = "MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:5b02fb34468b6aaa40dfc198d813a641e3a63b98c2b05a16b9f80b7ec314185e"}, - {file = "MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:0bff5e0ae4ef2e1ae4fdf2dfd5b76c75e5c2fa4132d05fc1b0dabcd20c7e28c4"}, - {file = "MarkupSafe-3.0.2-cp311-cp311-win32.whl", hash = "sha256:6c89876f41da747c8d3677a2b540fb32ef5715f97b66eeb0c6b66f5e3ef6f59d"}, - {file = "MarkupSafe-3.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:70a87b411535ccad5ef2f1df5136506a10775d267e197e4cf531ced10537bd6b"}, - {file = "MarkupSafe-3.0.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:9778bd8ab0a994ebf6f84c2b949e65736d5575320a17ae8984a77fab08db94cf"}, - {file = "MarkupSafe-3.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:846ade7b71e3536c4e56b386c2a47adf5741d2d8b94ec9dc3e92e5e1ee1e2225"}, - {file = "MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1c99d261bd2d5f6b59325c92c73df481e05e57f19837bdca8413b9eac4bd8028"}, - {file = "MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e17c96c14e19278594aa4841ec148115f9c7615a47382ecb6b82bd8fea3ab0c8"}, - {file = "MarkupSafe-3.0.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:88416bd1e65dcea10bc7569faacb2c20ce071dd1f87539ca2ab364bf6231393c"}, - {file = "MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2181e67807fc2fa785d0592dc2d6206c019b9502410671cc905d132a92866557"}, - {file = "MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:52305740fe773d09cffb16f8ed0427942901f00adedac82ec8b67752f58a1b22"}, - {file = "MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ad10d3ded218f1039f11a75f8091880239651b52e9bb592ca27de44eed242a48"}, - {file = "MarkupSafe-3.0.2-cp312-cp312-win32.whl", hash = "sha256:0f4ca02bea9a23221c0182836703cbf8930c5e9454bacce27e767509fa286a30"}, - {file = "MarkupSafe-3.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:8e06879fc22a25ca47312fbe7c8264eb0b662f6db27cb2d3bbbc74b1df4b9b87"}, - {file = "MarkupSafe-3.0.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ba9527cdd4c926ed0760bc301f6728ef34d841f405abf9d4f959c478421e4efd"}, - {file = "MarkupSafe-3.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f8b3d067f2e40fe93e1ccdd6b2e1d16c43140e76f02fb1319a05cf2b79d99430"}, - {file = "MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:569511d3b58c8791ab4c2e1285575265991e6d8f8700c7be0e88f86cb0672094"}, - {file = "MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15ab75ef81add55874e7ab7055e9c397312385bd9ced94920f2802310c930396"}, - {file = "MarkupSafe-3.0.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f3818cb119498c0678015754eba762e0d61e5b52d34c8b13d770f0719f7b1d79"}, - {file = "MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:cdb82a876c47801bb54a690c5ae105a46b392ac6099881cdfb9f6e95e4014c6a"}, - {file = "MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:cabc348d87e913db6ab4aa100f01b08f481097838bdddf7c7a84b7575b7309ca"}, - {file = "MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:444dcda765c8a838eaae23112db52f1efaf750daddb2d9ca300bcae1039adc5c"}, - {file = "MarkupSafe-3.0.2-cp313-cp313-win32.whl", hash = "sha256:bcf3e58998965654fdaff38e58584d8937aa3096ab5354d493c77d1fdd66d7a1"}, - {file = "MarkupSafe-3.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:e6a2a455bd412959b57a172ce6328d2dd1f01cb2135efda2e4576e8a23fa3b0f"}, - {file = "MarkupSafe-3.0.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:b5a6b3ada725cea8a5e634536b1b01c30bcdcd7f9c6fff4151548d5bf6b3a36c"}, - {file = "MarkupSafe-3.0.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:a904af0a6162c73e3edcb969eeeb53a63ceeb5d8cf642fade7d39e7963a22ddb"}, - {file = "MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4aa4e5faecf353ed117801a068ebab7b7e09ffb6e1d5e412dc852e0da018126c"}, - {file = "MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0ef13eaeee5b615fb07c9a7dadb38eac06a0608b41570d8ade51c56539e509d"}, - {file = "MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d16a81a06776313e817c951135cf7340a3e91e8c1ff2fac444cfd75fffa04afe"}, - {file = "MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:6381026f158fdb7c72a168278597a5e3a5222e83ea18f543112b2662a9b699c5"}, - {file = "MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:3d79d162e7be8f996986c064d1c7c817f6df3a77fe3d6859f6f9e7be4b8c213a"}, - {file = "MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:131a3c7689c85f5ad20f9f6fb1b866f402c445b220c19fe4308c0b147ccd2ad9"}, - {file = "MarkupSafe-3.0.2-cp313-cp313t-win32.whl", hash = "sha256:ba8062ed2cf21c07a9e295d5b8a2a5ce678b913b45fdf68c32d95d6c1291e0b6"}, - {file = "MarkupSafe-3.0.2-cp313-cp313t-win_amd64.whl", hash = "sha256:e444a31f8db13eb18ada366ab3cf45fd4b31e4db1236a4448f68778c1d1a5a2f"}, - {file = "MarkupSafe-3.0.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:eaa0a10b7f72326f1372a713e73c3f739b524b3af41feb43e4921cb529f5929a"}, - {file = "MarkupSafe-3.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:48032821bbdf20f5799ff537c7ac3d1fba0ba032cfc06194faffa8cda8b560ff"}, - {file = "MarkupSafe-3.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1a9d3f5f0901fdec14d8d2f66ef7d035f2157240a433441719ac9a3fba440b13"}, - {file = "MarkupSafe-3.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:88b49a3b9ff31e19998750c38e030fc7bb937398b1f78cfa599aaef92d693144"}, - {file = "MarkupSafe-3.0.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cfad01eed2c2e0c01fd0ecd2ef42c492f7f93902e39a42fc9ee1692961443a29"}, - {file = "MarkupSafe-3.0.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:1225beacc926f536dc82e45f8a4d68502949dc67eea90eab715dea3a21c1b5f0"}, - {file = "MarkupSafe-3.0.2-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:3169b1eefae027567d1ce6ee7cae382c57fe26e82775f460f0b2778beaad66c0"}, - {file = "MarkupSafe-3.0.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:eb7972a85c54febfb25b5c4b4f3af4dcc731994c7da0d8a0b4a6eb0640e1d178"}, - {file = "MarkupSafe-3.0.2-cp39-cp39-win32.whl", hash = "sha256:8c4e8c3ce11e1f92f6536ff07154f9d49677ebaaafc32db9db4620bc11ed480f"}, - {file = "MarkupSafe-3.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:6e296a513ca3d94054c2c881cc913116e90fd030ad1c656b3869762b754f5f8a"}, - {file = "markupsafe-3.0.2.tar.gz", hash = "sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0"}, +markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" +files = [ + {file = "markupsafe-3.0.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2f981d352f04553a7171b8e44369f2af4055f888dfb147d55e42d29e29e74559"}, + {file = "markupsafe-3.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e1c1493fb6e50ab01d20a22826e57520f1284df32f2d8601fdd90b6304601419"}, + {file = "markupsafe-3.0.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1ba88449deb3de88bd40044603fafffb7bc2b055d626a330323a9ed736661695"}, + {file = "markupsafe-3.0.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f42d0984e947b8adf7dd6dde396e720934d12c506ce84eea8476409563607591"}, + {file = "markupsafe-3.0.3-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:c0c0b3ade1c0b13b936d7970b1d37a57acde9199dc2aecc4c336773e1d86049c"}, + {file = "markupsafe-3.0.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:0303439a41979d9e74d18ff5e2dd8c43ed6c6001fd40e5bf2e43f7bd9bbc523f"}, + {file = "markupsafe-3.0.3-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:d2ee202e79d8ed691ceebae8e0486bd9a2cd4794cec4824e1c99b6f5009502f6"}, + {file = "markupsafe-3.0.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:177b5253b2834fe3678cb4a5f0059808258584c559193998be2601324fdeafb1"}, + {file = "markupsafe-3.0.3-cp310-cp310-win32.whl", hash = "sha256:2a15a08b17dd94c53a1da0438822d70ebcd13f8c3a95abe3a9ef9f11a94830aa"}, + {file = "markupsafe-3.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:c4ffb7ebf07cfe8931028e3e4c85f0357459a3f9f9490886198848f4fa002ec8"}, + {file = "markupsafe-3.0.3-cp310-cp310-win_arm64.whl", hash = "sha256:e2103a929dfa2fcaf9bb4e7c091983a49c9ac3b19c9061b6d5427dd7d14d81a1"}, + {file = "markupsafe-3.0.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1cc7ea17a6824959616c525620e387f6dd30fec8cb44f649e31712db02123dad"}, + {file = "markupsafe-3.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4bd4cd07944443f5a265608cc6aab442e4f74dff8088b0dfc8238647b8f6ae9a"}, + {file = "markupsafe-3.0.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6b5420a1d9450023228968e7e6a9ce57f65d148ab56d2313fcd589eee96a7a50"}, + {file = "markupsafe-3.0.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0bf2a864d67e76e5c9a34dc26ec616a66b9888e25e7b9460e1c76d3293bd9dbf"}, + {file = "markupsafe-3.0.3-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:bc51efed119bc9cfdf792cdeaa4d67e8f6fcccab66ed4bfdd6bde3e59bfcbb2f"}, + {file = "markupsafe-3.0.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:068f375c472b3e7acbe2d5318dea141359e6900156b5b2ba06a30b169086b91a"}, + {file = "markupsafe-3.0.3-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:7be7b61bb172e1ed687f1754f8e7484f1c8019780f6f6b0786e76bb01c2ae115"}, + {file = "markupsafe-3.0.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f9e130248f4462aaa8e2552d547f36ddadbeaa573879158d721bbd33dfe4743a"}, + {file = "markupsafe-3.0.3-cp311-cp311-win32.whl", hash = "sha256:0db14f5dafddbb6d9208827849fad01f1a2609380add406671a26386cdf15a19"}, + {file = "markupsafe-3.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:de8a88e63464af587c950061a5e6a67d3632e36df62b986892331d4620a35c01"}, + {file = "markupsafe-3.0.3-cp311-cp311-win_arm64.whl", hash = "sha256:3b562dd9e9ea93f13d53989d23a7e775fdfd1066c33494ff43f5418bc8c58a5c"}, + {file = "markupsafe-3.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d53197da72cc091b024dd97249dfc7794d6a56530370992a5e1a08983ad9230e"}, + {file = "markupsafe-3.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1872df69a4de6aead3491198eaf13810b565bdbeec3ae2dc8780f14458ec73ce"}, + {file = "markupsafe-3.0.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3a7e8ae81ae39e62a41ec302f972ba6ae23a5c5396c8e60113e9066ef893da0d"}, + {file = "markupsafe-3.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d6dd0be5b5b189d31db7cda48b91d7e0a9795f31430b7f271219ab30f1d3ac9d"}, + {file = "markupsafe-3.0.3-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:94c6f0bb423f739146aec64595853541634bde58b2135f27f61c1ffd1cd4d16a"}, + {file = "markupsafe-3.0.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:be8813b57049a7dc738189df53d69395eba14fb99345e0a5994914a3864c8a4b"}, + {file = "markupsafe-3.0.3-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:83891d0e9fb81a825d9a6d61e3f07550ca70a076484292a70fde82c4b807286f"}, + {file = "markupsafe-3.0.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:77f0643abe7495da77fb436f50f8dab76dbc6e5fd25d39589a0f1fe6548bfa2b"}, + {file = "markupsafe-3.0.3-cp312-cp312-win32.whl", hash = "sha256:d88b440e37a16e651bda4c7c2b930eb586fd15ca7406cb39e211fcff3bf3017d"}, + {file = "markupsafe-3.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:26a5784ded40c9e318cfc2bdb30fe164bdb8665ded9cd64d500a34fb42067b1c"}, + {file = "markupsafe-3.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:35add3b638a5d900e807944a078b51922212fb3dedb01633a8defc4b01a3c85f"}, + {file = "markupsafe-3.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e1cf1972137e83c5d4c136c43ced9ac51d0e124706ee1c8aa8532c1287fa8795"}, + {file = "markupsafe-3.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:116bb52f642a37c115f517494ea5feb03889e04df47eeff5b130b1808ce7c219"}, + {file = "markupsafe-3.0.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:133a43e73a802c5562be9bbcd03d090aa5a1fe899db609c29e8c8d815c5f6de6"}, + {file = "markupsafe-3.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ccfcd093f13f0f0b7fdd0f198b90053bf7b2f02a3927a30e63f3ccc9df56b676"}, + {file = "markupsafe-3.0.3-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:509fa21c6deb7a7a273d629cf5ec029bc209d1a51178615ddf718f5918992ab9"}, + {file = "markupsafe-3.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a4afe79fb3de0b7097d81da19090f4df4f8d3a2b3adaa8764138aac2e44f3af1"}, + {file = "markupsafe-3.0.3-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:795e7751525cae078558e679d646ae45574b47ed6e7771863fcc079a6171a0fc"}, + {file = "markupsafe-3.0.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:8485f406a96febb5140bfeca44a73e3ce5116b2501ac54fe953e488fb1d03b12"}, + {file = "markupsafe-3.0.3-cp313-cp313-win32.whl", hash = "sha256:bdd37121970bfd8be76c5fb069c7751683bdf373db1ed6c010162b2a130248ed"}, + {file = "markupsafe-3.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:9a1abfdc021a164803f4d485104931fb8f8c1efd55bc6b748d2f5774e78b62c5"}, + {file = "markupsafe-3.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:7e68f88e5b8799aa49c85cd116c932a1ac15caaa3f5db09087854d218359e485"}, + {file = "markupsafe-3.0.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:218551f6df4868a8d527e3062d0fb968682fe92054e89978594c28e642c43a73"}, + {file = "markupsafe-3.0.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:3524b778fe5cfb3452a09d31e7b5adefeea8c5be1d43c4f810ba09f2ceb29d37"}, + {file = "markupsafe-3.0.3-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4e885a3d1efa2eadc93c894a21770e4bc67899e3543680313b09f139e149ab19"}, + {file = "markupsafe-3.0.3-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8709b08f4a89aa7586de0aadc8da56180242ee0ada3999749b183aa23df95025"}, + {file = "markupsafe-3.0.3-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:b8512a91625c9b3da6f127803b166b629725e68af71f8184ae7e7d54686a56d6"}, + {file = "markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:9b79b7a16f7fedff2495d684f2b59b0457c3b493778c9eed31111be64d58279f"}, + {file = "markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:12c63dfb4a98206f045aa9563db46507995f7ef6d83b2f68eda65c307c6829eb"}, + {file = "markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:8f71bc33915be5186016f675cd83a1e08523649b0e33efdb898db577ef5bb009"}, + {file = "markupsafe-3.0.3-cp313-cp313t-win32.whl", hash = "sha256:69c0b73548bc525c8cb9a251cddf1931d1db4d2258e9599c28c07ef3580ef354"}, + {file = "markupsafe-3.0.3-cp313-cp313t-win_amd64.whl", hash = "sha256:1b4b79e8ebf6b55351f0d91fe80f893b4743f104bff22e90697db1590e47a218"}, + {file = "markupsafe-3.0.3-cp313-cp313t-win_arm64.whl", hash = "sha256:ad2cf8aa28b8c020ab2fc8287b0f823d0a7d8630784c31e9ee5edea20f406287"}, + {file = "markupsafe-3.0.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:eaa9599de571d72e2daf60164784109f19978b327a3910d3e9de8c97b5b70cfe"}, + {file = "markupsafe-3.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c47a551199eb8eb2121d4f0f15ae0f923d31350ab9280078d1e5f12b249e0026"}, + {file = "markupsafe-3.0.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f34c41761022dd093b4b6896d4810782ffbabe30f2d443ff5f083e0cbbb8c737"}, + {file = "markupsafe-3.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:457a69a9577064c05a97c41f4e65148652db078a3a509039e64d3467b9e7ef97"}, + {file = "markupsafe-3.0.3-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e8afc3f2ccfa24215f8cb28dcf43f0113ac3c37c2f0f0806d8c70e4228c5cf4d"}, + {file = "markupsafe-3.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:ec15a59cf5af7be74194f7ab02d0f59a62bdcf1a537677ce67a2537c9b87fcda"}, + {file = "markupsafe-3.0.3-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:0eb9ff8191e8498cca014656ae6b8d61f39da5f95b488805da4bb029cccbfbaf"}, + {file = "markupsafe-3.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:2713baf880df847f2bece4230d4d094280f4e67b1e813eec43b4c0e144a34ffe"}, + {file = "markupsafe-3.0.3-cp314-cp314-win32.whl", hash = "sha256:729586769a26dbceff69f7a7dbbf59ab6572b99d94576a5592625d5b411576b9"}, + {file = "markupsafe-3.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:bdc919ead48f234740ad807933cdf545180bfbe9342c2bb451556db2ed958581"}, + {file = "markupsafe-3.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:5a7d5dc5140555cf21a6fefbdbf8723f06fcd2f63ef108f2854de715e4422cb4"}, + {file = "markupsafe-3.0.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:1353ef0c1b138e1907ae78e2f6c63ff67501122006b0f9abad68fda5f4ffc6ab"}, + {file = "markupsafe-3.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:1085e7fbddd3be5f89cc898938f42c0b3c711fdcb37d75221de2666af647c175"}, + {file = "markupsafe-3.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1b52b4fb9df4eb9ae465f8d0c228a00624de2334f216f178a995ccdcf82c4634"}, + {file = "markupsafe-3.0.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fed51ac40f757d41b7c48425901843666a6677e3e8eb0abcff09e4ba6e664f50"}, + {file = "markupsafe-3.0.3-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:f190daf01f13c72eac4efd5c430a8de82489d9cff23c364c3ea822545032993e"}, + {file = "markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e56b7d45a839a697b5eb268c82a71bd8c7f6c94d6fd50c3d577fa39a9f1409f5"}, + {file = "markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:f3e98bb3798ead92273dc0e5fd0f31ade220f59a266ffd8a4f6065e0a3ce0523"}, + {file = "markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:5678211cb9333a6468fb8d8be0305520aa073f50d17f089b5b4b477ea6e67fdc"}, + {file = "markupsafe-3.0.3-cp314-cp314t-win32.whl", hash = "sha256:915c04ba3851909ce68ccc2b8e2cd691618c4dc4c4232fb7982bca3f41fd8c3d"}, + {file = "markupsafe-3.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4faffd047e07c38848ce017e8725090413cd80cbc23d86e55c587bf979e579c9"}, + {file = "markupsafe-3.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:32001d6a8fc98c8cb5c947787c5d08b0a50663d139f1305bac5885d98d9b40fa"}, + {file = "markupsafe-3.0.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:15d939a21d546304880945ca1ecb8a039db6b4dc49b2c5a400387cdae6a62e26"}, + {file = "markupsafe-3.0.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f71a396b3bf33ecaa1626c255855702aca4d3d9fea5e051b41ac59a9c1c41edc"}, + {file = "markupsafe-3.0.3-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0f4b68347f8c5eab4a13419215bdfd7f8c9b19f2b25520968adfad23eb0ce60c"}, + {file = "markupsafe-3.0.3-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e8fc20152abba6b83724d7ff268c249fa196d8259ff481f3b1476383f8f24e42"}, + {file = "markupsafe-3.0.3-cp39-cp39-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:949b8d66bc381ee8b007cd945914c721d9aba8e27f71959d750a46f7c282b20b"}, + {file = "markupsafe-3.0.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:3537e01efc9d4dccdf77221fb1cb3b8e1a38d5428920e0657ce299b20324d758"}, + {file = "markupsafe-3.0.3-cp39-cp39-musllinux_1_2_riscv64.whl", hash = "sha256:591ae9f2a647529ca990bc681daebdd52c8791ff06c2bfa05b65163e28102ef2"}, + {file = "markupsafe-3.0.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:a320721ab5a1aba0a233739394eb907f8c8da5c98c9181d1161e77a0c8e36f2d"}, + {file = "markupsafe-3.0.3-cp39-cp39-win32.whl", hash = "sha256:df2449253ef108a379b8b5d6b43f4b1a8e81a061d6537becd5582fba5f9196d7"}, + {file = "markupsafe-3.0.3-cp39-cp39-win_amd64.whl", hash = "sha256:7c3fb7d25180895632e5d3148dbdc29ea38ccb7fd210aa27acbd1201a1902c6e"}, + {file = "markupsafe-3.0.3-cp39-cp39-win_arm64.whl", hash = "sha256:38664109c14ffc9e7437e86b4dceb442b0096dfe3541d7864d9cbe1da4cf36c8"}, + {file = "markupsafe-3.0.3.tar.gz", hash = "sha256:722695808f4b6457b320fdc131280796bdceb04ab50fe1795cd540799ebe1698"}, ] [[package]] name = "matplotlib" -version = "3.9.4" -description = "Python plotting package" -optional = false -python-versions = ">=3.9" -groups = ["main"] -markers = "python_version < \"3.11\"" -files = [ - {file = "matplotlib-3.9.4-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:c5fdd7abfb706dfa8d307af64a87f1a862879ec3cd8d0ec8637458f0885b9c50"}, - {file = "matplotlib-3.9.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d89bc4e85e40a71d1477780366c27fb7c6494d293e1617788986f74e2a03d7ff"}, - {file = "matplotlib-3.9.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ddf9f3c26aae695c5daafbf6b94e4c1a30d6cd617ba594bbbded3b33a1fcfa26"}, - {file = "matplotlib-3.9.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:18ebcf248030173b59a868fda1fe42397253f6698995b55e81e1f57431d85e50"}, - {file = "matplotlib-3.9.4-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:974896ec43c672ec23f3f8c648981e8bc880ee163146e0312a9b8def2fac66f5"}, - {file = "matplotlib-3.9.4-cp310-cp310-win_amd64.whl", hash = "sha256:4598c394ae9711cec135639374e70871fa36b56afae17bdf032a345be552a88d"}, - {file = "matplotlib-3.9.4-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:d4dd29641d9fb8bc4492420c5480398dd40a09afd73aebe4eb9d0071a05fbe0c"}, - {file = "matplotlib-3.9.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:30e5b22e8bcfb95442bf7d48b0d7f3bdf4a450cbf68986ea45fca3d11ae9d099"}, - {file = "matplotlib-3.9.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2bb0030d1d447fd56dcc23b4c64a26e44e898f0416276cac1ebc25522e0ac249"}, - {file = "matplotlib-3.9.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aca90ed222ac3565d2752b83dbb27627480d27662671e4d39da72e97f657a423"}, - {file = "matplotlib-3.9.4-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a181b2aa2906c608fcae72f977a4a2d76e385578939891b91c2550c39ecf361e"}, - {file = "matplotlib-3.9.4-cp311-cp311-win_amd64.whl", hash = "sha256:1f6882828231eca17f501c4dcd98a05abb3f03d157fbc0769c6911fe08b6cfd3"}, - {file = "matplotlib-3.9.4-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:dfc48d67e6661378a21c2983200a654b72b5c5cdbd5d2cf6e5e1ece860f0cc70"}, - {file = "matplotlib-3.9.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:47aef0fab8332d02d68e786eba8113ffd6f862182ea2999379dec9e237b7e483"}, - {file = "matplotlib-3.9.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fba1f52c6b7dc764097f52fd9ab627b90db452c9feb653a59945de16752e965f"}, - {file = "matplotlib-3.9.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:173ac3748acaac21afcc3fa1633924609ba1b87749006bc25051c52c422a5d00"}, - {file = "matplotlib-3.9.4-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:320edea0cadc07007765e33f878b13b3738ffa9745c5f707705692df70ffe0e0"}, - {file = "matplotlib-3.9.4-cp312-cp312-win_amd64.whl", hash = "sha256:a4a4cfc82330b27042a7169533da7991e8789d180dd5b3daeaee57d75cd5a03b"}, - {file = "matplotlib-3.9.4-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:37eeffeeca3c940985b80f5b9a7b95ea35671e0e7405001f249848d2b62351b6"}, - {file = "matplotlib-3.9.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:3e7465ac859ee4abcb0d836137cd8414e7bb7ad330d905abced457217d4f0f45"}, - {file = "matplotlib-3.9.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f4c12302c34afa0cf061bea23b331e747e5e554b0fa595c96e01c7b75bc3b858"}, - {file = "matplotlib-3.9.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2b8c97917f21b75e72108b97707ba3d48f171541a74aa2a56df7a40626bafc64"}, - {file = "matplotlib-3.9.4-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:0229803bd7e19271b03cb09f27db76c918c467aa4ce2ae168171bc67c3f508df"}, - {file = "matplotlib-3.9.4-cp313-cp313-win_amd64.whl", hash = "sha256:7c0d8ef442ebf56ff5e206f8083d08252ee738e04f3dc88ea882853a05488799"}, - {file = "matplotlib-3.9.4-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:a04c3b00066a688834356d196136349cb32f5e1003c55ac419e91585168b88fb"}, - {file = "matplotlib-3.9.4-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:04c519587f6c210626741a1e9a68eefc05966ede24205db8982841826af5871a"}, - {file = "matplotlib-3.9.4-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:308afbf1a228b8b525fcd5cec17f246bbbb63b175a3ef6eb7b4d33287ca0cf0c"}, - {file = "matplotlib-3.9.4-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ddb3b02246ddcffd3ce98e88fed5b238bc5faff10dbbaa42090ea13241d15764"}, - {file = "matplotlib-3.9.4-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:8a75287e9cb9eee48cb79ec1d806f75b29c0fde978cb7223a1f4c5848d696041"}, - {file = "matplotlib-3.9.4-cp313-cp313t-win_amd64.whl", hash = "sha256:488deb7af140f0ba86da003e66e10d55ff915e152c78b4b66d231638400b1965"}, - {file = "matplotlib-3.9.4-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:3c3724d89a387ddf78ff88d2a30ca78ac2b4c89cf37f2db4bd453c34799e933c"}, - {file = "matplotlib-3.9.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:d5f0a8430ffe23d7e32cfd86445864ccad141797f7d25b7c41759a5b5d17cfd7"}, - {file = "matplotlib-3.9.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6bb0141a21aef3b64b633dc4d16cbd5fc538b727e4958be82a0e1c92a234160e"}, - {file = "matplotlib-3.9.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:57aa235109e9eed52e2c2949db17da185383fa71083c00c6c143a60e07e0888c"}, - {file = "matplotlib-3.9.4-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:b18c600061477ccfdd1e6fd050c33d8be82431700f3452b297a56d9ed7037abb"}, - {file = "matplotlib-3.9.4-cp39-cp39-win_amd64.whl", hash = "sha256:ef5f2d1b67d2d2145ff75e10f8c008bfbf71d45137c4b648c87193e7dd053eac"}, - {file = "matplotlib-3.9.4-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:44e0ed786d769d85bc787b0606a53f2d8d2d1d3c8a2608237365e9121c1a338c"}, - {file = "matplotlib-3.9.4-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:09debb9ce941eb23ecdbe7eab972b1c3e0276dcf01688073faff7b0f61d6c6ca"}, - {file = "matplotlib-3.9.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bcc53cf157a657bfd03afab14774d54ba73aa84d42cfe2480c91bd94873952db"}, - {file = "matplotlib-3.9.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:ad45da51be7ad02387801fd154ef74d942f49fe3fcd26a64c94842ba7ec0d865"}, - {file = "matplotlib-3.9.4.tar.gz", hash = "sha256:1e00e8be7393cbdc6fedfa8a6fba02cf3e83814b285db1c60b906a023ba41bc3"}, -] - -[package.dependencies] -contourpy = ">=1.0.1" -cycler = ">=0.10" -fonttools = ">=4.22.0" -importlib-resources = {version = ">=3.2.0", markers = "python_version < \"3.10\""} -kiwisolver = ">=1.3.1" -numpy = ">=1.23" -packaging = ">=20.0" -pillow = ">=8" -pyparsing = ">=2.3.1" -python-dateutil = ">=2.7" - -[package.extras] -dev = ["meson-python (>=0.13.1,<0.17.0)", "numpy (>=1.25)", "pybind11 (>=2.6,!=2.13.3)", "setuptools (>=64)", "setuptools_scm (>=7)"] - -[[package]] -name = "matplotlib" -version = "3.10.1" +version = "3.10.8" description = "Python plotting package" optional = false python-versions = ">=3.10" groups = ["main"] -markers = "python_version >= \"3.11\"" -files = [ - {file = "matplotlib-3.10.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:ff2ae14910be903f4a24afdbb6d7d3a6c44da210fc7d42790b87aeac92238a16"}, - {file = "matplotlib-3.10.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0721a3fd3d5756ed593220a8b86808a36c5031fce489adb5b31ee6dbb47dd5b2"}, - {file = "matplotlib-3.10.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d0673b4b8f131890eb3a1ad058d6e065fb3c6e71f160089b65f8515373394698"}, - {file = "matplotlib-3.10.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8e875b95ac59a7908978fe307ecdbdd9a26af7fa0f33f474a27fcf8c99f64a19"}, - {file = "matplotlib-3.10.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:2589659ea30726284c6c91037216f64a506a9822f8e50592d48ac16a2f29e044"}, - {file = "matplotlib-3.10.1-cp310-cp310-win_amd64.whl", hash = "sha256:a97ff127f295817bc34517255c9db6e71de8eddaab7f837b7d341dee9f2f587f"}, - {file = "matplotlib-3.10.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:057206ff2d6ab82ff3e94ebd94463d084760ca682ed5f150817b859372ec4401"}, - {file = "matplotlib-3.10.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a144867dd6bf8ba8cb5fc81a158b645037e11b3e5cf8a50bd5f9917cb863adfe"}, - {file = "matplotlib-3.10.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:56c5d9fcd9879aa8040f196a235e2dcbdf7dd03ab5b07c0696f80bc6cf04bedd"}, - {file = "matplotlib-3.10.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0f69dc9713e4ad2fb21a1c30e37bd445d496524257dfda40ff4a8efb3604ab5c"}, - {file = "matplotlib-3.10.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:4c59af3e8aca75d7744b68e8e78a669e91ccbcf1ac35d0102a7b1b46883f1dd7"}, - {file = "matplotlib-3.10.1-cp311-cp311-win_amd64.whl", hash = "sha256:11b65088c6f3dae784bc72e8d039a2580186285f87448babb9ddb2ad0082993a"}, - {file = "matplotlib-3.10.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:66e907a06e68cb6cfd652c193311d61a12b54f56809cafbed9736ce5ad92f107"}, - {file = "matplotlib-3.10.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:e9b4bb156abb8fa5e5b2b460196f7db7264fc6d62678c03457979e7d5254b7be"}, - {file = "matplotlib-3.10.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1985ad3d97f51307a2cbfc801a930f120def19ba22864182dacef55277102ba6"}, - {file = "matplotlib-3.10.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c96f2c2f825d1257e437a1482c5a2cf4fee15db4261bd6fc0750f81ba2b4ba3d"}, - {file = "matplotlib-3.10.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:35e87384ee9e488d8dd5a2dd7baf471178d38b90618d8ea147aced4ab59c9bea"}, - {file = "matplotlib-3.10.1-cp312-cp312-win_amd64.whl", hash = "sha256:cfd414bce89cc78a7e1d25202e979b3f1af799e416010a20ab2b5ebb3a02425c"}, - {file = "matplotlib-3.10.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:c42eee41e1b60fd83ee3292ed83a97a5f2a8239b10c26715d8a6172226988d7b"}, - {file = "matplotlib-3.10.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:4f0647b17b667ae745c13721602b540f7aadb2a32c5b96e924cd4fea5dcb90f1"}, - {file = "matplotlib-3.10.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aa3854b5f9473564ef40a41bc922be978fab217776e9ae1545c9b3a5cf2092a3"}, - {file = "matplotlib-3.10.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e496c01441be4c7d5f96d4e40f7fca06e20dcb40e44c8daa2e740e1757ad9e6"}, - {file = "matplotlib-3.10.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:5d45d3f5245be5b469843450617dcad9af75ca50568acf59997bed9311131a0b"}, - {file = "matplotlib-3.10.1-cp313-cp313-win_amd64.whl", hash = "sha256:8e8e25b1209161d20dfe93037c8a7f7ca796ec9aa326e6e4588d8c4a5dd1e473"}, - {file = "matplotlib-3.10.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:19b06241ad89c3ae9469e07d77efa87041eac65d78df4fcf9cac318028009b01"}, - {file = "matplotlib-3.10.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:01e63101ebb3014e6e9f80d9cf9ee361a8599ddca2c3e166c563628b39305dbb"}, - {file = "matplotlib-3.10.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3f06bad951eea6422ac4e8bdebcf3a70c59ea0a03338c5d2b109f57b64eb3972"}, - {file = "matplotlib-3.10.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a3dfb036f34873b46978f55e240cff7a239f6c4409eac62d8145bad3fc6ba5a3"}, - {file = "matplotlib-3.10.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:dc6ab14a7ab3b4d813b88ba957fc05c79493a037f54e246162033591e770de6f"}, - {file = "matplotlib-3.10.1-cp313-cp313t-win_amd64.whl", hash = "sha256:bc411ebd5889a78dabbc457b3fa153203e22248bfa6eedc6797be5df0164dbf9"}, - {file = "matplotlib-3.10.1-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:648406f1899f9a818cef8c0231b44dcfc4ff36f167101c3fd1c9151f24220fdc"}, - {file = "matplotlib-3.10.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:02582304e352f40520727984a5a18f37e8187861f954fea9be7ef06569cf85b4"}, - {file = "matplotlib-3.10.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d3809916157ba871bcdd33d3493acd7fe3037db5daa917ca6e77975a94cef779"}, - {file = "matplotlib-3.10.1.tar.gz", hash = "sha256:e8d2d0e3881b129268585bf4765ad3ee73a4591d77b9a18c214ac7e3a79fb2ba"}, +markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" +files = [ + {file = "matplotlib-3.10.8-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:00270d217d6b20d14b584c521f810d60c5c78406dc289859776550df837dcda7"}, + {file = "matplotlib-3.10.8-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:37b3c1cc42aa184b3f738cfa18c1c1d72fd496d85467a6cf7b807936d39aa656"}, + {file = "matplotlib-3.10.8-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:ee40c27c795bda6a5292e9cff9890189d32f7e3a0bf04e0e3c9430c4a00c37df"}, + {file = "matplotlib-3.10.8-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a48f2b74020919552ea25d222d5cc6af9ca3f4eb43a93e14d068457f545c2a17"}, + {file = "matplotlib-3.10.8-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:f254d118d14a7f99d616271d6c3c27922c092dac11112670b157798b89bf4933"}, + {file = "matplotlib-3.10.8-cp310-cp310-win_amd64.whl", hash = "sha256:f9b587c9c7274c1613a30afabf65a272114cd6cdbe67b3406f818c79d7ab2e2a"}, + {file = "matplotlib-3.10.8-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:6be43b667360fef5c754dda5d25a32e6307a03c204f3c0fc5468b78fa87b4160"}, + {file = "matplotlib-3.10.8-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a2b336e2d91a3d7006864e0990c83b216fcdca64b5a6484912902cef87313d78"}, + {file = "matplotlib-3.10.8-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:efb30e3baaea72ce5928e32bab719ab4770099079d66726a62b11b1ef7273be4"}, + {file = "matplotlib-3.10.8-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d56a1efd5bfd61486c8bc968fa18734464556f0fb8e51690f4ac25d85cbbbbc2"}, + {file = "matplotlib-3.10.8-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:238b7ce5717600615c895050239ec955d91f321c209dd110db988500558e70d6"}, + {file = "matplotlib-3.10.8-cp311-cp311-win_amd64.whl", hash = "sha256:18821ace09c763ec93aef5eeff087ee493a24051936d7b9ebcad9662f66501f9"}, + {file = "matplotlib-3.10.8-cp311-cp311-win_arm64.whl", hash = "sha256:bab485bcf8b1c7d2060b4fcb6fc368a9e6f4cd754c9c2fea281f4be21df394a2"}, + {file = "matplotlib-3.10.8-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:64fcc24778ca0404ce0cb7b6b77ae1f4c7231cdd60e6778f999ee05cbd581b9a"}, + {file = "matplotlib-3.10.8-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b9a5ca4ac220a0cdd1ba6bcba3608547117d30468fefce49bb26f55c1a3d5c58"}, + {file = "matplotlib-3.10.8-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:3ab4aabc72de4ff77b3ec33a6d78a68227bf1123465887f9905ba79184a1cc04"}, + {file = "matplotlib-3.10.8-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:24d50994d8c5816ddc35411e50a86ab05f575e2530c02752e02538122613371f"}, + {file = "matplotlib-3.10.8-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:99eefd13c0dc3b3c1b4d561c1169e65fe47aab7b8158754d7c084088e2329466"}, + {file = "matplotlib-3.10.8-cp312-cp312-win_amd64.whl", hash = "sha256:dd80ecb295460a5d9d260df63c43f4afbdd832d725a531f008dad1664f458adf"}, + {file = "matplotlib-3.10.8-cp312-cp312-win_arm64.whl", hash = "sha256:3c624e43ed56313651bc18a47f838b60d7b8032ed348911c54906b130b20071b"}, + {file = "matplotlib-3.10.8-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:3f2e409836d7f5ac2f1c013110a4d50b9f7edc26328c108915f9075d7d7a91b6"}, + {file = "matplotlib-3.10.8-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:56271f3dac49a88d7fca5060f004d9d22b865f743a12a23b1e937a0be4818ee1"}, + {file = "matplotlib-3.10.8-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:a0a7f52498f72f13d4a25ea70f35f4cb60642b466cbb0a9be951b5bc3f45a486"}, + {file = "matplotlib-3.10.8-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:646d95230efb9ca614a7a594d4fcacde0ac61d25e37dd51710b36477594963ce"}, + {file = "matplotlib-3.10.8-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:f89c151aab2e2e23cb3fe0acad1e8b82841fd265379c4cecd0f3fcb34c15e0f6"}, + {file = "matplotlib-3.10.8-cp313-cp313-win_amd64.whl", hash = "sha256:e8ea3e2d4066083e264e75c829078f9e149fa119d27e19acd503de65e0b13149"}, + {file = "matplotlib-3.10.8-cp313-cp313-win_arm64.whl", hash = "sha256:c108a1d6fa78a50646029cb6d49808ff0fc1330fda87fa6f6250c6b5369b6645"}, + {file = "matplotlib-3.10.8-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:ad3d9833a64cf48cc4300f2b406c3d0f4f4724a91c0bd5640678a6ba7c102077"}, + {file = "matplotlib-3.10.8-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:eb3823f11823deade26ce3b9f40dcb4a213da7a670013929f31d5f5ed1055b22"}, + {file = "matplotlib-3.10.8-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:d9050fee89a89ed57b4fb2c1bfac9a3d0c57a0d55aed95949eedbc42070fea39"}, + {file = "matplotlib-3.10.8-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b44d07310e404ba95f8c25aa5536f154c0a8ec473303535949e52eb71d0a1565"}, + {file = "matplotlib-3.10.8-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:0a33deb84c15ede243aead39f77e990469fff93ad1521163305095b77b72ce4a"}, + {file = "matplotlib-3.10.8-cp313-cp313t-win_amd64.whl", hash = "sha256:3a48a78d2786784cc2413e57397981fb45c79e968d99656706018d6e62e57958"}, + {file = "matplotlib-3.10.8-cp313-cp313t-win_arm64.whl", hash = "sha256:15d30132718972c2c074cd14638c7f4592bd98719e2308bccea40e0538bc0cb5"}, + {file = "matplotlib-3.10.8-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:b53285e65d4fa4c86399979e956235deb900be5baa7fc1218ea67fbfaeaadd6f"}, + {file = "matplotlib-3.10.8-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:32f8dce744be5569bebe789e46727946041199030db8aeb2954d26013a0eb26b"}, + {file = "matplotlib-3.10.8-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4cf267add95b1c88300d96ca837833d4112756045364f5c734a2276038dae27d"}, + {file = "matplotlib-3.10.8-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2cf5bd12cecf46908f286d7838b2abc6c91cda506c0445b8223a7c19a00df008"}, + {file = "matplotlib-3.10.8-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:41703cc95688f2516b480f7f339d8851a6035f18e100ee6a32bc0b8536a12a9c"}, + {file = "matplotlib-3.10.8-cp314-cp314-win_amd64.whl", hash = "sha256:83d282364ea9f3e52363da262ce32a09dfe241e4080dcedda3c0db059d3c1f11"}, + {file = "matplotlib-3.10.8-cp314-cp314-win_arm64.whl", hash = "sha256:2c1998e92cd5999e295a731bcb2911c75f597d937341f3030cc24ef2733d78a8"}, + {file = "matplotlib-3.10.8-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:b5a2b97dbdc7d4f353ebf343744f1d1f1cca8aa8bfddb4262fcf4306c3761d50"}, + {file = "matplotlib-3.10.8-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:3f5c3e4da343bba819f0234186b9004faba952cc420fbc522dc4e103c1985908"}, + {file = "matplotlib-3.10.8-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5f62550b9a30afde8c1c3ae450e5eb547d579dd69b25c2fc7a1c67f934c1717a"}, + {file = "matplotlib-3.10.8-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:495672de149445ec1b772ff2c9ede9b769e3cb4f0d0aa7fa730d7f59e2d4e1c1"}, + {file = "matplotlib-3.10.8-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:595ba4d8fe983b88f0eec8c26a241e16d6376fe1979086232f481f8f3f67494c"}, + {file = "matplotlib-3.10.8-cp314-cp314t-win_amd64.whl", hash = "sha256:25d380fe8b1dc32cf8f0b1b448470a77afb195438bafdf1d858bfb876f3edf7b"}, + {file = "matplotlib-3.10.8-cp314-cp314t-win_arm64.whl", hash = "sha256:113bb52413ea508ce954a02c10ffd0d565f9c3bc7f2eddc27dfe1731e71c7b5f"}, + {file = "matplotlib-3.10.8-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:f97aeb209c3d2511443f8797e3e5a569aebb040d4f8bc79aa3ee78a8fb9e3dd8"}, + {file = "matplotlib-3.10.8-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:fb061f596dad3a0f52b60dc6a5dec4a0c300dec41e058a7efe09256188d170b7"}, + {file = "matplotlib-3.10.8-pp310-pypy310_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:12d90df9183093fcd479f4172ac26b322b1248b15729cb57f42f71f24c7e37a3"}, + {file = "matplotlib-3.10.8-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:6da7c2ce169267d0d066adcf63758f0604aa6c3eebf67458930f9d9b79ad1db1"}, + {file = "matplotlib-3.10.8-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:9153c3292705be9f9c64498a8872118540c3f4123d1a1c840172edf262c8be4a"}, + {file = "matplotlib-3.10.8-pp311-pypy311_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:1ae029229a57cd1e8fe542485f27e7ca7b23aa9e8944ddb4985d0bc444f1eca2"}, + {file = "matplotlib-3.10.8.tar.gz", hash = "sha256:2299372c19d56bcd35cf05a2738308758d32b9eaed2371898d8f5bd33f084aa3"}, ] [package.dependencies] @@ -2078,7 +1923,7 @@ kiwisolver = ">=1.3.1" numpy = ">=1.23" packaging = ">=20.0" pillow = ">=8" -pyparsing = ">=2.3.1" +pyparsing = ">=3" python-dateutil = ">=2.7" [package.extras] @@ -2086,30 +1931,22 @@ dev = ["meson-python (>=0.13.1,<0.17.0)", "pybind11 (>=2.13.2,!=2.13.3)", "setup [[package]] name = "matplotlib-inline" -version = "0.1.7" +version = "0.2.1" description = "Inline Matplotlib backend for Jupyter" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" groups = ["main"] +markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ - {file = "matplotlib_inline-0.1.7-py3-none-any.whl", hash = "sha256:df192d39a4ff8f21b1895d72e6a13f5fcc5099f00fa84384e0ea28c2cc0653ca"}, - {file = "matplotlib_inline-0.1.7.tar.gz", hash = "sha256:8423b23ec666be3d16e16b60bdd8ac4e86e840ebd1dd11a30b9f117f2fa0ab90"}, + {file = "matplotlib_inline-0.2.1-py3-none-any.whl", hash = "sha256:d56ce5156ba6085e00a9d54fead6ed29a9c47e215cd1bba2e976ef39f5710a76"}, + {file = "matplotlib_inline-0.2.1.tar.gz", hash = "sha256:e1ee949c340d771fc39e241ea75683deb94762c8fa5f2927ec57c83c4dffa9fe"}, ] [package.dependencies] traitlets = "*" -[[package]] -name = "mdurl" -version = "0.1.2" -description = "Markdown URL utilities" -optional = false -python-versions = ">=3.7" -groups = ["main"] -files = [ - {file = "mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8"}, - {file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"}, -] +[package.extras] +test = ["flake8", "nbdime", "nbval", "notebook", "pytest"] [[package]] name = "mo-gymnasium" @@ -2118,6 +1955,7 @@ description = "A standard API for MORL and a diverse set of reference environmen optional = false python-versions = ">=3.8" groups = ["main"] +markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "mo-gymnasium-1.1.0.tar.gz", hash = "sha256:feaee103e33acfacb4f2f0729f83b4905bd2d8e2fca944681395203a30acec89"}, {file = "mo_gymnasium-1.1.0-py3-none-any.whl", hash = "sha256:4cef786ce169949b2bc7b714743ed070a2aaefb9498d96aaf26128b937573b09"}, @@ -2146,6 +1984,7 @@ description = "A standard API for Multi-Objective Multi-Agent Decision making an optional = false python-versions = ">=3.8" groups = ["main"] +markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "momaland-0.1.1-py3-none-any.whl", hash = "sha256:288f27fb72e2db67bc4aec9d250d5ddb2526667f52b4c825ccc4387355eb3cc9"}, {file = "momaland-0.1.1.tar.gz", hash = "sha256:ffd61796d5cfbac21125b6fe1d156b816c44d404d5d072e3accdcf7c45c18b5a"}, @@ -2168,6 +2007,37 @@ all = ["chex (>=0.1)", "distrax (>=0.1.3)", "etils (>=1.3)", "flax (>=0.6)", "ja learning = ["chex (>=0.1)", "distrax (>=0.1.3)", "etils (>=1.3)", "flax (>=0.6)", "jax (>=0.4.13)", "matplotlib (>=3.7.4)", "morl-baselines[all]", "optax (>=0.1)", "orbax-checkpoint (>=0.2.3)", "pandas (>=2.0.3)", "supersuit (>=3.9)", "tqdm (>=4.66.1)"] testing = ["pytest (==7.1.3)"] +[[package]] +name = "moocore" +version = "0.2.0" +description = "Core Algorithms for Multi-Objective Optimization" +optional = false +python-versions = ">=3.10" +groups = ["main"] +markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" +files = [ + {file = "moocore-0.2.0-cp310-abi3-macosx_10_9_universal2.whl", hash = "sha256:653449231f328d3c9e69693ec3d44e8c77f38ab7e9ef0c69dd9ded40449e980d"}, + {file = "moocore-0.2.0-cp310-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:cf8f091a7304532ed605acd82acd051e89af22ece8e2a27a3cee0faf9f2ea185"}, + {file = "moocore-0.2.0-cp310-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e93c07062adefd0fcba73a521f325f7fb874f2af92aaeec203cf9db31a41894b"}, + {file = "moocore-0.2.0-cp310-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:b90c7bde2164f9b95c6b2e870f0ca6ccc5dabff2bf8086162d7318c770e5868f"}, + {file = "moocore-0.2.0-cp310-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:d0699b770b5eebdeac477a356d539efa8807c6cf067a453a0682e0df2299a512"}, + {file = "moocore-0.2.0-cp310-abi3-win_amd64.whl", hash = "sha256:ea057409731e73dbc4ba4214cbf7747309695b01314f8786678b758cc9c561c4"}, + {file = "moocore-0.2.0-cp310-abi3-win_arm64.whl", hash = "sha256:a7683feddfd2a47b4a0f89ee8d370cae72331792f68e67f083ccb37bb2f1c8cf"}, + {file = "moocore-0.2.0.tar.gz", hash = "sha256:3dc601f85f9a4743ed50ddd027dca30e3bb55c899916a092c2ece495b1b2de08"}, +] + +[package.dependencies] +cffi = ">=1.17.1" +numpy = ">=1.24" +platformdirs = "*" + +[package.extras] +benchmarks = ["botorch", "desdeo", "fast-pareto", "jmetalpy", "matplotlib", "nevergrad", "numba", "numpy", "optuna", "pandas (>=2)", "paretoset", "py-cpuinfo", "pymoo", "seqme"] +coverage = ["coverage[toml]", "gcovr"] +dev = ["pre-commit (>=3.3.2)", "ruff (>=0.11.2)", "tox (>=4.6.2)"] +docs = ["ipykernel", "ipywidgets", "jupyter", "jupyterlab", "kaleido", "pandas (>=2)", "plotly", "pydata-sphinx-theme (>=0.16)", "seaborn", "sphinx (>=6)", "sphinx-autodoc-typehints", "sphinx-copybutton", "sphinx-design", "sphinx-gallery (>=0.19)", "sphinxcontrib-bibtex", "sphinxcontrib-napoleon"] +test = ["pandas (>=2)", "pytest (>7)"] + [[package]] name = "morl-baselines" version = "1.0.0" @@ -2175,6 +2045,7 @@ description = "Implementations of multi-objective reinforcement learning (MORL) optional = false python-versions = ">=3.8" groups = ["main"] +markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "morl-baselines-1.0.0.tar.gz", hash = "sha256:54db64cf2fe455b289777e1164ee4a9961cdc8526e5eff0c65f0ab3983119844"}, {file = "morl_baselines-1.0.0-py3-none-any.whl", hash = "sha256:966db5e2a080c4b1314f6ea6ccfab42875519e5ef8a93898d01c401cbdc55642"}, @@ -2203,21 +2074,29 @@ testing = ["pytest (==7.1.3)"] [[package]] name = "moviepy" -version = "0.2.3.1" +version = "1.0.3" description = "Video editing with Python" optional = false python-versions = "*" groups = ["main"] +markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ - {file = "moviepy-0.2.3.1-py2.py3-none-any.whl", hash = "sha256:5188c506d43a881d606f0757df42ed73402d43ba1107c6a6b0550f8db8bc97fd"}, - {file = "moviepy-0.2.3.1.tar.gz", hash = "sha256:c56165ec07315dfb94f23ed541b9099f6e1ffe7ff980f254ea2fe37355ee2b95"}, + {file = "moviepy-1.0.3.tar.gz", hash = "sha256:2884e35d1788077db3ff89e763c5ba7bfddbd7ae9108c9bc809e7ba58fa433f5"}, ] [package.dependencies] -decorator = "*" -imageio = "*" -numpy = "*" -tqdm = "*" +decorator = ">=4.0.2,<5.0" +imageio = {version = ">=2.5,<3.0", markers = "python_version >= \"3.4\""} +imageio_ffmpeg = {version = ">=0.2.0", markers = "python_version >= \"3.4\""} +numpy = {version = ">=1.17.3", markers = "python_version > \"2.7\""} +proglog = "<=1.0.0" +requests = ">=2.8.1,<3.0" +tqdm = ">=4.11.2,<5.0" + +[package.extras] +doc = ["Sphinx (>=1.5.2,<2.0)", "numpydoc (>=0.6.0,<1.0)", "pygame (>=1.9.3,<2.0) ; python_version < \"3.8\"", "sphinx_rtd_theme (>=0.1.10b0,<1.0)"] +optional = ["matplotlib (>=2.0.0,<3.0) ; python_version >= \"3.4\"", "opencv-python (>=3.0,<4.0) ; python_version != \"2.7\"", "scikit-image (>=0.13.0,<1.0) ; python_version >= \"3.4\"", "scikit-learn ; python_version >= \"3.4\"", "scipy (>=0.19.0,<1.5) ; python_version != \"3.3\"", "youtube_dl"] +test = ["coverage (<5.0)", "coveralls (>=1.1,<2.0)", "pytest (>=3.0.0,<4.0)", "pytest-cov (>=2.5.1,<3.0)", "requests (>=2.8.1,<3.0)"] [[package]] name = "mpmath" @@ -2226,6 +2105,7 @@ description = "Python library for arbitrary-precision floating-point arithmetic" optional = false python-versions = "*" groups = ["main"] +markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "mpmath-1.3.0-py3-none-any.whl", hash = "sha256:a0b2b9fe80bbcd81a6647ff13108738cfb482d481d826cc0e02f5b35e5c88d2c"}, {file = "mpmath-1.3.0.tar.gz", hash = "sha256:7a28eb2a9774d00c7bc92411c19a89209d5da7c4c9a9e227be8330a23a25b91f"}, @@ -2239,57 +2119,60 @@ tests = ["pytest (>=4.6)"] [[package]] name = "multiprocess" -version = "0.70.17" +version = "0.70.19" description = "better multiprocessing and multithreading in Python" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" groups = ["main"] -files = [ - {file = "multiprocess-0.70.17-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:7ddb24e5bcdb64e90ec5543a1f05a39463068b6d3b804aa3f2a4e16ec28562d6"}, - {file = "multiprocess-0.70.17-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:d729f55198a3579f6879766a6d9b72b42d4b320c0dcb7844afb774d75b573c62"}, - {file = "multiprocess-0.70.17-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:c2c82d0375baed8d8dd0d8c38eb87c5ae9c471f8e384ad203a36f095ee860f67"}, - {file = "multiprocess-0.70.17-pp38-pypy38_pp73-macosx_10_9_arm64.whl", hash = "sha256:a22a6b1a482b80eab53078418bb0f7025e4f7d93cc8e1f36481477a023884861"}, - {file = "multiprocess-0.70.17-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:349525099a0c9ac5936f0488b5ee73199098dac3ac899d81d326d238f9fd3ccd"}, - {file = "multiprocess-0.70.17-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:27b8409c02b5dd89d336107c101dfbd1530a2cd4fd425fc27dcb7adb6e0b47bf"}, - {file = "multiprocess-0.70.17-pp39-pypy39_pp73-macosx_10_13_arm64.whl", hash = "sha256:2ea0939b0f4760a16a548942c65c76ff5afd81fbf1083c56ae75e21faf92e426"}, - {file = "multiprocess-0.70.17-pp39-pypy39_pp73-macosx_10_13_x86_64.whl", hash = "sha256:2b12e081df87ab755190e227341b2c3b17ee6587e9c82fecddcbe6aa812cd7f7"}, - {file = "multiprocess-0.70.17-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:a0f01cd9d079af7a8296f521dc03859d1a414d14c1e2b6e676ef789333421c95"}, - {file = "multiprocess-0.70.17-py310-none-any.whl", hash = "sha256:38357ca266b51a2e22841b755d9a91e4bb7b937979a54d411677111716c32744"}, - {file = "multiprocess-0.70.17-py311-none-any.whl", hash = "sha256:2884701445d0177aec5bd5f6ee0df296773e4fb65b11903b94c613fb46cfb7d1"}, - {file = "multiprocess-0.70.17-py312-none-any.whl", hash = "sha256:2818af14c52446b9617d1b0755fa70ca2f77c28b25ed97bdaa2c69a22c47b46c"}, - {file = "multiprocess-0.70.17-py313-none-any.whl", hash = "sha256:20c28ca19079a6c879258103a6d60b94d4ffe2d9da07dda93fb1c8bc6243f522"}, - {file = "multiprocess-0.70.17-py38-none-any.whl", hash = "sha256:1d52f068357acd1e5bbc670b273ef8f81d57863235d9fbf9314751886e141968"}, - {file = "multiprocess-0.70.17-py39-none-any.whl", hash = "sha256:c3feb874ba574fbccfb335980020c1ac631fbf2a3f7bee4e2042ede62558a021"}, - {file = "multiprocess-0.70.17.tar.gz", hash = "sha256:4ae2f11a3416809ebc9a48abfc8b14ecce0652a0944731a1493a3c1ba44ff57a"}, +markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" +files = [ + {file = "multiprocess-0.70.19-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:02e5c35d7d6cd2bdc89c1858867f7bde4012837411023a4696c148c1bdd7c80e"}, + {file = "multiprocess-0.70.19-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:79576c02d1207ec405b00cabf2c643c36070800cca433860e14539df7818b2aa"}, + {file = "multiprocess-0.70.19-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:c6b6d78d43a03b68014ca1f0b7937d965393a670c5de7c29026beb2258f2f896"}, + {file = "multiprocess-0.70.19-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:1bbf1b69af1cf64cd05f65337d9215b88079ec819cd0ea7bac4dab84e162efe7"}, + {file = "multiprocess-0.70.19-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:5be9ec7f0c1c49a4f4a6fd20d5dda4aeabc2d39a50f4ad53720f1cd02b3a7c2e"}, + {file = "multiprocess-0.70.19-pp311-pypy311_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:1c3dce098845a0db43b32a0b76a228ca059a668071cfeaa0f40c36c0b1585d45"}, + {file = "multiprocess-0.70.19-pp39-pypy39_pp73-macosx_10_13_arm64.whl", hash = "sha256:e5e7dc3e3e1732e88c07aaec17eeb9917f9ed1107d9e60d5ab985cdc14bac43a"}, + {file = "multiprocess-0.70.19-pp39-pypy39_pp73-macosx_10_13_x86_64.whl", hash = "sha256:e6c0674d34b8adac22533f6786576b3de4e396aaeda9e0c15378af9b8ada2702"}, + {file = "multiprocess-0.70.19-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:d6db91ca6391eebc139c352f34578cea382df6bfa03d3b4146ed12b18b01cc14"}, + {file = "multiprocess-0.70.19-py310-none-any.whl", hash = "sha256:97404393419dcb2a8385910864eedf47a3cadf82c66345b44f036420eb0b5d87"}, + {file = "multiprocess-0.70.19-py311-none-any.whl", hash = "sha256:928851ae7973aea4ce0eaf330bbdafb2e01398a91518d5c8818802845564f45c"}, + {file = "multiprocess-0.70.19-py312-none-any.whl", hash = "sha256:3a56c0e85dd5025161bac5ce138dcac1e49174c7d8e74596537e729fd5c53c28"}, + {file = "multiprocess-0.70.19-py313-none-any.whl", hash = "sha256:8d5eb4ec5017ba2fab4e34a747c6d2c2b6fecfe9e7236e77988db91580ada952"}, + {file = "multiprocess-0.70.19-py314-none-any.whl", hash = "sha256:e8cc7fbdff15c0613f0a1f1f8744bef961b0a164c0ca29bdff53e9d2d93c5e5f"}, + {file = "multiprocess-0.70.19-py39-none-any.whl", hash = "sha256:0d4b4397ed669d371c81dcd1ef33fd384a44d6c3de1bd0ca7ac06d837720d3c5"}, + {file = "multiprocess-0.70.19.tar.gz", hash = "sha256:952021e0e6c55a4a9fe4cd787895b86e239a40e76802a789d6305398d3975897"}, ] [package.dependencies] -dill = ">=0.3.9" +dill = ">=0.4.1" [[package]] name = "narwhals" -version = "1.38.2" +version = "2.18.0" description = "Extremely lightweight compatibility layer between dataframe libraries" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" groups = ["main"] +markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ - {file = "narwhals-1.38.2-py3-none-any.whl", hash = "sha256:a33a182e32f18d794a04e7828a5c401fb26ce9083f609993e7e5064aace641c7"}, - {file = "narwhals-1.38.2.tar.gz", hash = "sha256:7c5fbc9f2b8e1d5d95f49dcef9c2d94bf17810de68c87ff195dc7d22f7b3eeb5"}, + {file = "narwhals-2.18.0-py3-none-any.whl", hash = "sha256:68378155ee706ac9c5b25868ef62ecddd62947b6df7801a0a156bc0a615d2d0d"}, + {file = "narwhals-2.18.0.tar.gz", hash = "sha256:1de5cee338bc17c338c6278df2c38c0dd4290499fcf70d75e0a51d5f22a6e960"}, ] [package.extras] -cudf = ["cudf (>=24.10.0)"] +cudf = ["cudf-cu12 (>=24.10.0)"] dask = ["dask[dataframe] (>=2024.8)"] -duckdb = ["duckdb (>=1.0)"] +duckdb = ["duckdb (>=1.1)"] ibis = ["ibis-framework (>=6.0.0)", "packaging", "pyarrow-hotfix", "rich"] modin = ["modin"] -pandas = ["pandas (>=0.25.3)"] -polars = ["polars (>=0.20.3)"] -pyarrow = ["pyarrow (>=11.0.0)"] +pandas = ["pandas (>=1.1.3)"] +polars = ["polars (>=0.20.4)"] +pyarrow = ["pyarrow (>=13.0.0)"] pyspark = ["pyspark (>=3.5.0)"] pyspark-connect = ["pyspark[connect] (>=3.5.0)"] -sqlframe = ["sqlframe (>=3.22.0)"] +sql = ["duckdb (>=1.1)", "sqlparse"] +sqlframe = ["sqlframe (>=3.22.0,!=3.39.3)"] [[package]] name = "nest-asyncio" @@ -2298,6 +2181,7 @@ description = "Patch asyncio to allow nested event loops" optional = false python-versions = ">=3.5" groups = ["main"] +markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "nest_asyncio-1.6.0-py3-none-any.whl", hash = "sha256:87af6efd6b5e897c81050477ef65c62e2b2f35d51703cae01aff2905b1852e1c"}, {file = "nest_asyncio-1.6.0.tar.gz", hash = "sha256:6f172d5449aca15afd6c646851f4e31e02c598d553a667e38cafa997cfec55fe"}, @@ -2305,43 +2189,70 @@ files = [ [[package]] name = "networkx" -version = "3.2.1" +version = "3.4.2" description = "Python package for creating and manipulating graphs and networks" optional = false -python-versions = ">=3.9" +python-versions = ">=3.10" groups = ["main"] -markers = "python_version < \"3.11\"" +markers = "python_version == \"3.10\" and (sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\")" files = [ - {file = "networkx-3.2.1-py3-none-any.whl", hash = "sha256:f18c69adc97877c42332c170849c96cefa91881c99a7cb3e95b7c659ebdc1ec2"}, - {file = "networkx-3.2.1.tar.gz", hash = "sha256:9f1bb5cf3409bf324e0a722c20bdb4c20ee39bf1c30ce8ae499c8502b0b5e0c6"}, + {file = "networkx-3.4.2-py3-none-any.whl", hash = "sha256:df5d4365b724cf81b8c6a7312509d0c22386097011ad1abe274afd5e9d3bbc5f"}, + {file = "networkx-3.4.2.tar.gz", hash = "sha256:307c3669428c5362aab27c8a1260aa8f47c4e91d3891f48be0141738d8d053e1"}, ] [package.extras] -default = ["matplotlib (>=3.5)", "numpy (>=1.22)", "pandas (>=1.4)", "scipy (>=1.9,!=1.11.0,!=1.11.1)"] -developer = ["changelist (==0.4)", "mypy (>=1.1)", "pre-commit (>=3.2)", "rtoml"] -doc = ["nb2plots (>=0.7)", "nbconvert (<7.9)", "numpydoc (>=1.6)", "pillow (>=9.4)", "pydata-sphinx-theme (>=0.14)", "sphinx (>=7)", "sphinx-gallery (>=0.14)", "texext (>=0.6.7)"] -extra = ["lxml (>=4.6)", "pydot (>=1.4.2)", "pygraphviz (>=1.11)", "sympy (>=1.10)"] +default = ["matplotlib (>=3.7)", "numpy (>=1.24)", "pandas (>=2.0)", "scipy (>=1.10,!=1.11.0,!=1.11.1)"] +developer = ["changelist (==0.5)", "mypy (>=1.1)", "pre-commit (>=3.2)", "rtoml"] +doc = ["intersphinx-registry", "myst-nb (>=1.1)", "numpydoc (>=1.8.0)", "pillow (>=9.4)", "pydata-sphinx-theme (>=0.15)", "sphinx (>=7.3)", "sphinx-gallery (>=0.16)", "texext (>=0.6.7)"] +example = ["cairocffi (>=1.7)", "contextily (>=1.6)", "igraph (>=0.11)", "momepy (>=0.7.2)", "osmnx (>=1.9)", "scikit-learn (>=1.5)", "seaborn (>=0.13)"] +extra = ["lxml (>=4.6)", "pydot (>=3.0.1)", "pygraphviz (>=1.14)", "sympy (>=1.10)"] test = ["pytest (>=7.2)", "pytest-cov (>=4.0)"] [[package]] name = "networkx" -version = "3.5" +version = "3.6" description = "Python package for creating and manipulating graphs and networks" optional = false python-versions = ">=3.11" groups = ["main"] -markers = "python_version >= \"3.11\"" +markers = "(sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\") and python_version >= \"3.14\"" +files = [ + {file = "networkx-3.6-py3-none-any.whl", hash = "sha256:cdb395b105806062473d3be36458d8f1459a4e4b98e236a66c3a48996e07684f"}, + {file = "networkx-3.6.tar.gz", hash = "sha256:285276002ad1f7f7da0f7b42f004bcba70d381e936559166363707fdad3d72ad"}, +] + +[package.extras] +benchmarking = ["asv", "virtualenv"] +default = ["matplotlib (>=3.8)", "numpy (>=1.25)", "pandas (>=2.0)", "scipy (>=1.11.2)"] +developer = ["mypy (>=1.15)", "pre-commit (>=4.1)"] +doc = ["intersphinx-registry", "myst-nb (>=1.1)", "numpydoc (>=1.8.0)", "pillow (>=10)", "pydata-sphinx-theme (>=0.16)", "sphinx (>=8.0)", "sphinx-gallery (>=0.18)", "texext (>=0.6.7)"] +example = ["cairocffi (>=1.7)", "contextily (>=1.6)", "igraph (>=0.11)", "iplotx (>=0.9.0)", "momepy (>=0.7.2)", "osmnx (>=2.0.0)", "scikit-learn (>=1.5)", "seaborn (>=0.13)"] +extra = ["lxml (>=4.6)", "pydot (>=3.0.1)", "pygraphviz (>=1.14)", "sympy (>=1.10)"] +release = ["build (>=0.10)", "changelist (==0.5)", "twine (>=4.0)", "wheel (>=0.40)"] +test = ["pytest (>=7.2)", "pytest-cov (>=4.0)", "pytest-xdist (>=3.0)"] +test-extras = ["pytest-mpl", "pytest-randomly"] + +[[package]] +name = "networkx" +version = "3.6.1" +description = "Python package for creating and manipulating graphs and networks" +optional = false +python-versions = "!=3.14.1,>=3.11" +groups = ["main"] +markers = "(sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\") and python_version >= \"3.11\" and python_version < \"3.14\"" files = [ - {file = "networkx-3.5-py3-none-any.whl", hash = "sha256:0030d386a9a06dee3565298b4a734b68589749a544acbb6c412dc9e2489ec6ec"}, - {file = "networkx-3.5.tar.gz", hash = "sha256:d4c6f9cf81f52d69230866796b82afbccdec3db7ae4fbd1b65ea750feed50037"}, + {file = "networkx-3.6.1-py3-none-any.whl", hash = "sha256:d47fbf302e7d9cbbb9e2555a0d267983d2aa476bac30e90dfbe5669bd57f3762"}, + {file = "networkx-3.6.1.tar.gz", hash = "sha256:26b7c357accc0c8cde558ad486283728b65b6a95d85ee1cd66bafab4c8168509"}, ] [package.extras] +benchmarking = ["asv", "virtualenv"] default = ["matplotlib (>=3.8)", "numpy (>=1.25)", "pandas (>=2.0)", "scipy (>=1.11.2)"] developer = ["mypy (>=1.15)", "pre-commit (>=4.1)"] doc = ["intersphinx-registry", "myst-nb (>=1.1)", "numpydoc (>=1.8.0)", "pillow (>=10)", "pydata-sphinx-theme (>=0.16)", "sphinx (>=8.0)", "sphinx-gallery (>=0.18)", "texext (>=0.6.7)"] -example = ["cairocffi (>=1.7)", "contextily (>=1.6)", "igraph (>=0.11)", "momepy (>=0.7.2)", "osmnx (>=2.0.0)", "scikit-learn (>=1.5)", "seaborn (>=0.13)"] +example = ["cairocffi (>=1.7)", "contextily (>=1.6)", "igraph (>=0.11)", "iplotx (>=0.9.0)", "momepy (>=0.7.2)", "osmnx (>=2.0.0)", "scikit-learn (>=1.5)", "seaborn (>=0.13)"] extra = ["lxml (>=4.6)", "pydot (>=3.0.1)", "pygraphviz (>=1.14)", "sympy (>=1.10)"] +release = ["build (>=0.10)", "changelist (==0.5)", "twine (>=4.0)", "wheel (>=0.40)"] test = ["pytest (>=7.2)", "pytest-cov (>=4.0)", "pytest-xdist (>=3.0)"] test-extras = ["pytest-mpl", "pytest-randomly"] @@ -2352,6 +2263,7 @@ description = "Fundamental package for array computing in Python" optional = false python-versions = ">=3.8" groups = ["main"] +markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "numpy-1.24.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:3c1104d3c036fb81ab923f507536daedc718d0ad5a8707c6061cdfd6d184e570"}, {file = "numpy-1.24.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:202de8f38fc4a45a3eea4b63e2f376e5f2dc64ef0fa692838e31a808520efaf7"}, @@ -2390,7 +2302,7 @@ description = "CUBLAS native runtime libraries" optional = false python-versions = ">=3" groups = ["main"] -markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\"" +markers = "(sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\") and platform_machine == \"x86_64\" and platform_system == \"Linux\"" files = [ {file = "nvidia_cublas_cu12-12.1.3.1-py3-none-manylinux1_x86_64.whl", hash = "sha256:ee53ccca76a6fc08fb9701aa95b6ceb242cdaab118c3bb152af4e579af792728"}, {file = "nvidia_cublas_cu12-12.1.3.1-py3-none-win_amd64.whl", hash = "sha256:2b964d60e8cf11b5e1073d179d85fa340c120e99b3067558f3cf98dd69d02906"}, @@ -2403,7 +2315,7 @@ description = "CUDA profiling tools runtime libs." optional = false python-versions = ">=3" groups = ["main"] -markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\"" +markers = "(sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\") and platform_machine == \"x86_64\" and platform_system == \"Linux\"" files = [ {file = "nvidia_cuda_cupti_cu12-12.1.105-py3-none-manylinux1_x86_64.whl", hash = "sha256:e54fde3983165c624cb79254ae9818a456eb6e87a7fd4d56a2352c24ee542d7e"}, {file = "nvidia_cuda_cupti_cu12-12.1.105-py3-none-win_amd64.whl", hash = "sha256:bea8236d13a0ac7190bd2919c3e8e6ce1e402104276e6f9694479e48bb0eb2a4"}, @@ -2416,7 +2328,7 @@ description = "NVRTC native runtime libraries" optional = false python-versions = ">=3" groups = ["main"] -markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\"" +markers = "(sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\") and platform_machine == \"x86_64\" and platform_system == \"Linux\"" files = [ {file = "nvidia_cuda_nvrtc_cu12-12.1.105-py3-none-manylinux1_x86_64.whl", hash = "sha256:339b385f50c309763ca65456ec75e17bbefcbbf2893f462cb8b90584cd27a1c2"}, {file = "nvidia_cuda_nvrtc_cu12-12.1.105-py3-none-win_amd64.whl", hash = "sha256:0a98a522d9ff138b96c010a65e145dc1b4850e9ecb75a0172371793752fd46ed"}, @@ -2429,7 +2341,7 @@ description = "CUDA Runtime native Libraries" optional = false python-versions = ">=3" groups = ["main"] -markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\"" +markers = "(sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\") and platform_machine == \"x86_64\" and platform_system == \"Linux\"" files = [ {file = "nvidia_cuda_runtime_cu12-12.1.105-py3-none-manylinux1_x86_64.whl", hash = "sha256:6e258468ddf5796e25f1dc591a31029fa317d97a0a94ed93468fc86301d61e40"}, {file = "nvidia_cuda_runtime_cu12-12.1.105-py3-none-win_amd64.whl", hash = "sha256:dfb46ef84d73fababab44cf03e3b83f80700d27ca300e537f85f636fac474344"}, @@ -2442,7 +2354,7 @@ description = "cuDNN runtime libraries" optional = false python-versions = ">=3" groups = ["main"] -markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\"" +markers = "(sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\") and platform_machine == \"x86_64\" and platform_system == \"Linux\"" files = [ {file = "nvidia_cudnn_cu12-9.1.0.70-py3-none-manylinux2014_x86_64.whl", hash = "sha256:165764f44ef8c61fcdfdfdbe769d687e06374059fbb388b6c89ecb0e28793a6f"}, {file = "nvidia_cudnn_cu12-9.1.0.70-py3-none-win_amd64.whl", hash = "sha256:6278562929433d68365a07a4a1546c237ba2849852c0d4b2262a486e805b977a"}, @@ -2458,7 +2370,7 @@ description = "CUFFT native runtime libraries" optional = false python-versions = ">=3" groups = ["main"] -markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\"" +markers = "(sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\") and platform_machine == \"x86_64\" and platform_system == \"Linux\"" files = [ {file = "nvidia_cufft_cu12-11.0.2.54-py3-none-manylinux1_x86_64.whl", hash = "sha256:794e3948a1aa71fd817c3775866943936774d1c14e7628c74f6f7417224cdf56"}, {file = "nvidia_cufft_cu12-11.0.2.54-py3-none-win_amd64.whl", hash = "sha256:d9ac353f78ff89951da4af698f80870b1534ed69993f10a4cf1d96f21357e253"}, @@ -2471,7 +2383,7 @@ description = "CURAND native runtime libraries" optional = false python-versions = ">=3" groups = ["main"] -markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\"" +markers = "(sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\") and platform_machine == \"x86_64\" and platform_system == \"Linux\"" files = [ {file = "nvidia_curand_cu12-10.3.2.106-py3-none-manylinux1_x86_64.whl", hash = "sha256:9d264c5036dde4e64f1de8c50ae753237c12e0b1348738169cd0f8a536c0e1e0"}, {file = "nvidia_curand_cu12-10.3.2.106-py3-none-win_amd64.whl", hash = "sha256:75b6b0c574c0037839121317e17fd01f8a69fd2ef8e25853d826fec30bdba74a"}, @@ -2484,7 +2396,7 @@ description = "CUDA solver native runtime libraries" optional = false python-versions = ">=3" groups = ["main"] -markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\"" +markers = "(sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\") and platform_machine == \"x86_64\" and platform_system == \"Linux\"" files = [ {file = "nvidia_cusolver_cu12-11.4.5.107-py3-none-manylinux1_x86_64.whl", hash = "sha256:8a7ec542f0412294b15072fa7dab71d31334014a69f953004ea7a118206fe0dd"}, {file = "nvidia_cusolver_cu12-11.4.5.107-py3-none-win_amd64.whl", hash = "sha256:74e0c3a24c78612192a74fcd90dd117f1cf21dea4822e66d89e8ea80e3cd2da5"}, @@ -2502,7 +2414,7 @@ description = "CUSPARSE native runtime libraries" optional = false python-versions = ">=3" groups = ["main"] -markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\"" +markers = "(sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\") and platform_machine == \"x86_64\" and platform_system == \"Linux\"" files = [ {file = "nvidia_cusparse_cu12-12.1.0.106-py3-none-manylinux1_x86_64.whl", hash = "sha256:f3b50f42cf363f86ab21f720998517a659a48131e8d538dc02f8768237bd884c"}, {file = "nvidia_cusparse_cu12-12.1.0.106-py3-none-win_amd64.whl", hash = "sha256:b798237e81b9719373e8fae8d4f091b70a0cf09d9d85c95a557e11df2d8e9a5a"}, @@ -2518,7 +2430,7 @@ description = "NVIDIA Collective Communication Library (NCCL) Runtime" optional = false python-versions = ">=3" groups = ["main"] -markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\"" +markers = "(sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\") and platform_machine == \"x86_64\" and platform_system == \"Linux\"" files = [ {file = "nvidia_nccl_cu12-2.20.5-py3-none-manylinux2014_aarch64.whl", hash = "sha256:1fc150d5c3250b170b29410ba682384b14581db722b2531b0d8d33c595f33d01"}, {file = "nvidia_nccl_cu12-2.20.5-py3-none-manylinux2014_x86_64.whl", hash = "sha256:057f6bf9685f75215d0c53bf3ac4a10b3e6578351de307abad9e18a99182af56"}, @@ -2531,7 +2443,7 @@ description = "Nvidia JIT LTO Library" optional = false python-versions = ">=3" groups = ["main"] -markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\"" +markers = "(sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\") and platform_machine == \"x86_64\" and platform_system == \"Linux\"" files = [ {file = "nvidia_nvjitlink_cu12-12.9.86-py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl", hash = "sha256:e3f1171dbdc83c5932a45f0f4c99180a70de9bd2718c1ab77d14104f6d7147f9"}, {file = "nvidia_nvjitlink_cu12-12.9.86-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:994a05ef08ef4b0b299829cde613a424382aff7efb08a7172c1fa616cc3af2ca"}, @@ -2545,7 +2457,7 @@ description = "NVIDIA Tools Extension" optional = false python-versions = ">=3" groups = ["main"] -markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\"" +markers = "(sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\") and platform_machine == \"x86_64\" and platform_system == \"Linux\"" files = [ {file = "nvidia_nvtx_cu12-12.1.105-py3-none-manylinux1_x86_64.whl", hash = "sha256:dc21cf308ca5691e7c04d962e213f8a4aa9bbfa23d95412f452254c2caeb09e5"}, {file = "nvidia_nvtx_cu12-12.1.105-py3-none-win_amd64.whl", hash = "sha256:65f4d98982b31b60026e0e6de73fbdfc09d08a96f4656dd3665ca616a11e1e82"}, @@ -2553,37 +2465,49 @@ files = [ [[package]] name = "osqp" -version = "1.0.4" +version = "1.1.1" description = "OSQP: The Operator Splitting QP Solver" optional = false python-versions = ">=3.8" groups = ["main"] -files = [ - {file = "osqp-1.0.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2f4f06e1a67c272b8a4a0741020e859a8c67802466597397da2869802eb6a345"}, - {file = "osqp-1.0.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:738d0b03d350b97c2cfeecc41620082a913e1efd06d2d58e4cc1d54d00ebfac5"}, - {file = "osqp-1.0.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b9ce84caf57a0166123c923b5ca4d8f126799351f8454e96e25c339240e2b4db"}, - {file = "osqp-1.0.4-cp310-cp310-win_amd64.whl", hash = "sha256:67a7af7779be5036d1f1729489781628feaa1dffa33ae44feefa172b6b9e173e"}, - {file = "osqp-1.0.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:819603a8b6d84e17bbe0e17558235e5dbe3d6b95021550d7da4942aa35b31b60"}, - {file = "osqp-1.0.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8e76644654e30edf97eb5d400ffa57f3541b551842921ed9ac16db8f307883d9"}, - {file = "osqp-1.0.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ddd7fc52e01c602f3482878b334eed1b366a9940b2053059968d3d47688de9ef"}, - {file = "osqp-1.0.4-cp311-cp311-win_amd64.whl", hash = "sha256:c2a2ac69feb009ac43f80f33dfe5b32baaccefd22c6fcb9176b48f755506f120"}, - {file = "osqp-1.0.4-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:6432c8ea5db1b334eb20abce2c0eca081edc070ea86ec634bb62e8ca1a014e21"}, - {file = "osqp-1.0.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8510861708fe664a0942bccfea4b3ea566b12927e54b415f539c24b8cad095c0"}, - {file = "osqp-1.0.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8a3e3321b11426fa7a33b84f87f8d8608fdcd56c3992739012370f4d475b6a8f"}, - {file = "osqp-1.0.4-cp312-cp312-win_amd64.whl", hash = "sha256:73357ceb0cee581a8a18f32a50dda8954c80374bc94e77c06d8ececb402e2a22"}, - {file = "osqp-1.0.4-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:bae336207b52bbab6d663e7fb77beaffc53279e91a14e3db76ad2726b0e935d6"}, - {file = "osqp-1.0.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:06dc3c6d7a0e2d4552dbc98a127e6d9a70d57ab856c8343c83aca42817ee8da3"}, - {file = "osqp-1.0.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:11e4b50f66795d12e63b25b02d0261973b36ee8612ef8c949c124c74231da183"}, - {file = "osqp-1.0.4-cp313-cp313-win_amd64.whl", hash = "sha256:14334e9473d0dd2fde3465b0d4c7a7de827798426ae2b40cb26504b376c48413"}, - {file = "osqp-1.0.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:195364eedde925fc7b2725a707967de03ff25e2f9dbef9197b55c007b51dffbc"}, - {file = "osqp-1.0.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:b9ed583018f78b26b2f4117b7e8418a1b1500f3df8c8de52aadebf107673e8e0"}, - {file = "osqp-1.0.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7ac97dabc10f7ec16b6457fe0d2a867528335f0f321e84e55c2edad8e31f3336"}, - {file = "osqp-1.0.4-cp38-cp38-win_amd64.whl", hash = "sha256:611c0a001a0c122cab3750967baa9ed2c9e5022693aff1f42b651b4202948488"}, - {file = "osqp-1.0.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4f36aabf42f05fdeeffef0cbcda2db84dfb040f46da46cab21f7674edb613030"}, - {file = "osqp-1.0.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0bc86af8f2ffc257ad1af2192638b2373cb93c8debeafdaae9757a05ece3c93c"}, - {file = "osqp-1.0.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:806628a62e729697596bb6d221ed519621fe70f9ff48f26a531bc58be1dd9e60"}, - {file = "osqp-1.0.4-cp39-cp39-win_amd64.whl", hash = "sha256:a52ae0148a650c55ed25280669facc52b1a59bfbe46ae92fb6a296d263db22c7"}, - {file = "osqp-1.0.4.tar.gz", hash = "sha256:0877552e325ff4cc1c676796ba482904eb4b66e750eff5b91df3273201f5ed00"}, +markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" +files = [ + {file = "osqp-1.1.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:415096d3cf1710a2200a7e70c0c69591abef9081ce3ef8efb8fe16b14e214726"}, + {file = "osqp-1.1.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b3f26a5deb848e577d3b8b03c129be141756f3675297c38c128d556ab6216fb8"}, + {file = "osqp-1.1.1-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9974235f05905317cd01cf6c6e526fa97f9097812c2c5c3e4dc479c07cdf9d55"}, + {file = "osqp-1.1.1-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f7328e138fe8c2f40a8235d1f47593a0437bc48e29aad5c14ab7b3dafa6baf17"}, + {file = "osqp-1.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:de3aaa7b3db1c61c288d710be5b190894d0475d3fdb13969a6fe823f6c0c5634"}, + {file = "osqp-1.1.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:48a6f62df0ec55a5a3a445e4143f51a813931f1e48ac006b15b7e5c9899e2937"}, + {file = "osqp-1.1.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:0e569d36955e1a69129f391bb27b2240b3b69d0bcff28e5d19446013dda59836"}, + {file = "osqp-1.1.1-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9fd6d87d5aa17161c43b95e44ab53c76cef466b851cc4ed32da658596cb0a0a1"}, + {file = "osqp-1.1.1-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2a0481c1f19f70eea9e9883b176eb37b64cd52525920c9ed765acb02411998ae"}, + {file = "osqp-1.1.1-cp311-cp311-win_amd64.whl", hash = "sha256:d7524d22e91a8381ed30eecbfdf82935528f84b3d8a1b5ad1f8dd84dff3fc07e"}, + {file = "osqp-1.1.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:ca4e41477852f725293c666ffa5f795413151c9a14155a7750dff25d3107b851"}, + {file = "osqp-1.1.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:25cd4e8995d18b65c54d1163769797665b9ca5a8a0009f1c4adf4dafe30e33be"}, + {file = "osqp-1.1.1-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ed006d74017578fe98a2afad77f4bbeb096f2d64aa00f50809bb394a7bbd98bf"}, + {file = "osqp-1.1.1-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:61aca4a356d1555d13c26166c282b9b7985c6c715baf093f839e338e6b49aca0"}, + {file = "osqp-1.1.1-cp312-cp312-win_amd64.whl", hash = "sha256:cd4ac30fd125e12ef5b67836442ebd3bb90925828816e0253e96a203197f5dc7"}, + {file = "osqp-1.1.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:4da548997e7187b1b55358ef291fbb3f9d29b6103917bedbbe77ab8d2307a43a"}, + {file = "osqp-1.1.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:e33d9de8e6d68a77ef5ca3fee77d42fac89fb5c3fbac3ab5df452176009d28be"}, + {file = "osqp-1.1.1-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:64c45eb7a2ef39751417d964c792f3bfe396642b8bc1ae6eca7b28aaa7398ca5"}, + {file = "osqp-1.1.1-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b3c726d8516d90b2d6acb47acf0bef248188119c52692cca307e418f0f2d8fad"}, + {file = "osqp-1.1.1-cp313-cp313-win_amd64.whl", hash = "sha256:b1bd86a9fb19f484705acdff47ec89d68af5c12fba9def921df503bc6bca8e39"}, + {file = "osqp-1.1.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:42315f8047708c7a2ae184df2255a2b5d323164e67a20df5c03ecd9b4208f2f7"}, + {file = "osqp-1.1.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:610a4ecba7a274348f95eeb3c6d56d131207482b6ad95bd20e2a5e4f87111887"}, + {file = "osqp-1.1.1-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a1532b0ade13cb10d8875e121e6131448528fb79e931ffb5dccef555b26b464e"}, + {file = "osqp-1.1.1-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a1ee59dbda22d283de001e7948f7523f509279f7131d5abf0e53fc5ab66b8bb0"}, + {file = "osqp-1.1.1-cp314-cp314-win_amd64.whl", hash = "sha256:514b2e1d14b5bad9a91ff4dbcbad8da75ef4fb5eee18864e0bbbb620fc6dbcd7"}, + {file = "osqp-1.1.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:416b38a30dcee915b9abe0acb54306a173f08fb4d58bdd21ff9b89ea048da39d"}, + {file = "osqp-1.1.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:32b7c4d759766064d76a8165dee823e956f7091e62e0194c2ef22c8209b302c7"}, + {file = "osqp-1.1.1-cp38-cp38-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4d669fd429e717df123ba2913f0aaee2df42e1739380eb10b9ebc07312c804c4"}, + {file = "osqp-1.1.1-cp38-cp38-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:be5ec70477c038d78048de3e9c4f1600c33bd08dcbfb0cebccc054eaac86b081"}, + {file = "osqp-1.1.1-cp38-cp38-win_amd64.whl", hash = "sha256:5f382886682aee5e6536b80272fb955eaa1c89b83770a4cfd2474449a2753409"}, + {file = "osqp-1.1.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:e2eb72980685a59d57bcb61a32559bddb61deaf3ee275a68e70c77ecb9da2910"}, + {file = "osqp-1.1.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:24a9c749a0d8d9378483c55a8519244e1c6789c6f3c4638a6e546178c70fccc4"}, + {file = "osqp-1.1.1-cp39-cp39-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1e8c0078682646260a8c154fd9042f006a60426736ffa495ac1c358723a1d7f7"}, + {file = "osqp-1.1.1-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e506467e88d9552f07bb2005adce569619d01fd8d2c8676213e7cfede2feeb24"}, + {file = "osqp-1.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:89988e8661ab43b139013e9e37c34e18d5ae0c084f296db87c31b97a8d95b9be"}, + {file = "osqp-1.1.1.tar.gz", hash = "sha256:1719e6a88f2ec2bd5dab06131331d1433152fb222372832727d9eb5604d7acf4"}, ] [package.dependencies] @@ -2600,14 +2524,15 @@ mkl = ["osqp-mkl"] [[package]] name = "packaging" -version = "24.2" +version = "26.0" description = "Core utilities for Python packages" optional = false python-versions = ">=3.8" groups = ["main"] +markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ - {file = "packaging-24.2-py3-none-any.whl", hash = "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759"}, - {file = "packaging-24.2.tar.gz", hash = "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f"}, + {file = "packaging-26.0-py3-none-any.whl", hash = "sha256:b36f1fef9334a5588b4166f8bcd26a14e521f2b55e6b9de3aaa80d3ff7a37529"}, + {file = "packaging-26.0.tar.gz", hash = "sha256:00243ae351a257117b6a241061796684b084ed1c516a08c48a3f7e147a9d80b4"}, ] [[package]] @@ -2617,7 +2542,7 @@ description = "Powerful data structures for data analysis, time series, and stat optional = false python-versions = ">=3.8" groups = ["main"] -markers = "python_version >= \"3.12\"" +markers = "(sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\") and python_version >= \"3.12\"" files = [ {file = "pandas-2.0.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e4c7c9f27a4185304c7caf96dc7d91bc60bc162221152de697c98eb0b2648dd8"}, {file = "pandas-2.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f167beed68918d62bffb6ec64f2e1d8a7d297a038f86d4aed056b9493fca407f"}, @@ -2677,55 +2602,68 @@ xml = ["lxml (>=4.6.3)"] [[package]] name = "pandas" -version = "2.2.3" +version = "2.3.3" description = "Powerful data structures for data analysis, time series, and statistics" optional = false python-versions = ">=3.9" groups = ["main"] -markers = "python_version <= \"3.11\"" -files = [ - {file = "pandas-2.2.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1948ddde24197a0f7add2bdc4ca83bf2b1ef84a1bc8ccffd95eda17fd836ecb5"}, - {file = "pandas-2.2.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:381175499d3802cde0eabbaf6324cce0c4f5d52ca6f8c377c29ad442f50f6348"}, - {file = "pandas-2.2.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d9c45366def9a3dd85a6454c0e7908f2b3b8e9c138f5dc38fed7ce720d8453ed"}, - {file = "pandas-2.2.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:86976a1c5b25ae3f8ccae3a5306e443569ee3c3faf444dfd0f41cda24667ad57"}, - {file = "pandas-2.2.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:b8661b0238a69d7aafe156b7fa86c44b881387509653fdf857bebc5e4008ad42"}, - {file = "pandas-2.2.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:37e0aced3e8f539eccf2e099f65cdb9c8aa85109b0be6e93e2baff94264bdc6f"}, - {file = "pandas-2.2.3-cp310-cp310-win_amd64.whl", hash = "sha256:56534ce0746a58afaf7942ba4863e0ef81c9c50d3f0ae93e9497d6a41a057645"}, - {file = "pandas-2.2.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:66108071e1b935240e74525006034333f98bcdb87ea116de573a6a0dccb6c039"}, - {file = "pandas-2.2.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7c2875855b0ff77b2a64a0365e24455d9990730d6431b9e0ee18ad8acee13dbd"}, - {file = "pandas-2.2.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:cd8d0c3be0515c12fed0bdbae072551c8b54b7192c7b1fda0ba56059a0179698"}, - {file = "pandas-2.2.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c124333816c3a9b03fbeef3a9f230ba9a737e9e5bb4060aa2107a86cc0a497fc"}, - {file = "pandas-2.2.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:63cc132e40a2e084cf01adf0775b15ac515ba905d7dcca47e9a251819c575ef3"}, - {file = "pandas-2.2.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:29401dbfa9ad77319367d36940cd8a0b3a11aba16063e39632d98b0e931ddf32"}, - {file = "pandas-2.2.3-cp311-cp311-win_amd64.whl", hash = "sha256:3fc6873a41186404dad67245896a6e440baacc92f5b716ccd1bc9ed2995ab2c5"}, - {file = "pandas-2.2.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:b1d432e8d08679a40e2a6d8b2f9770a5c21793a6f9f47fdd52c5ce1948a5a8a9"}, - {file = "pandas-2.2.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a5a1595fe639f5988ba6a8e5bc9649af3baf26df3998a0abe56c02609392e0a4"}, - {file = "pandas-2.2.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:5de54125a92bb4d1c051c0659e6fcb75256bf799a732a87184e5ea503965bce3"}, - {file = "pandas-2.2.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fffb8ae78d8af97f849404f21411c95062db1496aeb3e56f146f0355c9989319"}, - {file = "pandas-2.2.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6dfcb5ee8d4d50c06a51c2fffa6cff6272098ad6540aed1a76d15fb9318194d8"}, - {file = "pandas-2.2.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:062309c1b9ea12a50e8ce661145c6aab431b1e99530d3cd60640e255778bd43a"}, - {file = "pandas-2.2.3-cp312-cp312-win_amd64.whl", hash = "sha256:59ef3764d0fe818125a5097d2ae867ca3fa64df032331b7e0917cf5d7bf66b13"}, - {file = "pandas-2.2.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f00d1345d84d8c86a63e476bb4955e46458b304b9575dcf71102b5c705320015"}, - {file = "pandas-2.2.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:3508d914817e153ad359d7e069d752cdd736a247c322d932eb89e6bc84217f28"}, - {file = "pandas-2.2.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:22a9d949bfc9a502d320aa04e5d02feab689d61da4e7764b62c30b991c42c5f0"}, - {file = "pandas-2.2.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f3a255b2c19987fbbe62a9dfd6cff7ff2aa9ccab3fc75218fd4b7530f01efa24"}, - {file = "pandas-2.2.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:800250ecdadb6d9c78eae4990da62743b857b470883fa27f652db8bdde7f6659"}, - {file = "pandas-2.2.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6374c452ff3ec675a8f46fd9ab25c4ad0ba590b71cf0656f8b6daa5202bca3fb"}, - {file = "pandas-2.2.3-cp313-cp313-win_amd64.whl", hash = "sha256:61c5ad4043f791b61dd4752191d9f07f0ae412515d59ba8f005832a532f8736d"}, - {file = "pandas-2.2.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:3b71f27954685ee685317063bf13c7709a7ba74fc996b84fc6821c59b0f06468"}, - {file = "pandas-2.2.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:38cf8125c40dae9d5acc10fa66af8ea6fdf760b2714ee482ca691fc66e6fcb18"}, - {file = "pandas-2.2.3-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ba96630bc17c875161df3818780af30e43be9b166ce51c9a18c1feae342906c2"}, - {file = "pandas-2.2.3-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1db71525a1538b30142094edb9adc10be3f3e176748cd7acc2240c2f2e5aa3a4"}, - {file = "pandas-2.2.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:15c0e1e02e93116177d29ff83e8b1619c93ddc9c49083f237d4312337a61165d"}, - {file = "pandas-2.2.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:ad5b65698ab28ed8d7f18790a0dc58005c7629f227be9ecc1072aa74c0c1d43a"}, - {file = "pandas-2.2.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bc6b93f9b966093cb0fd62ff1a7e4c09e6d546ad7c1de191767baffc57628f39"}, - {file = "pandas-2.2.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:5dbca4c1acd72e8eeef4753eeca07de9b1db4f398669d5994086f788a5d7cc30"}, - {file = "pandas-2.2.3-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:8cd6d7cc958a3910f934ea8dbdf17b2364827bb4dafc38ce6eef6bb3d65ff09c"}, - {file = "pandas-2.2.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:99df71520d25fade9db7c1076ac94eb994f4d2673ef2aa2e86ee039b6746d20c"}, - {file = "pandas-2.2.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:31d0ced62d4ea3e231a9f228366919a5ea0b07440d9d4dac345376fd8e1477ea"}, - {file = "pandas-2.2.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:7eee9e7cea6adf3e3d24e304ac6b8300646e2a5d1cd3a3c2abed9101b0846761"}, - {file = "pandas-2.2.3-cp39-cp39-win_amd64.whl", hash = "sha256:4850ba03528b6dd51d6c5d273c46f183f39a9baf3f0143e566b89450965b105e"}, - {file = "pandas-2.2.3.tar.gz", hash = "sha256:4f18ba62b61d7e192368b84517265a99b4d7ee8912f8708660fb4a366cc82667"}, +markers = "python_version < \"3.12\" and (sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\")" +files = [ + {file = "pandas-2.3.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:376c6446ae31770764215a6c937f72d917f214b43560603cd60da6408f183b6c"}, + {file = "pandas-2.3.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e19d192383eab2f4ceb30b412b22ea30690c9e618f78870357ae1d682912015a"}, + {file = "pandas-2.3.3-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5caf26f64126b6c7aec964f74266f435afef1c1b13da3b0636c7518a1fa3e2b1"}, + {file = "pandas-2.3.3-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:dd7478f1463441ae4ca7308a70e90b33470fa593429f9d4c578dd00d1fa78838"}, + {file = "pandas-2.3.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:4793891684806ae50d1288c9bae9330293ab4e083ccd1c5e383c34549c6e4250"}, + {file = "pandas-2.3.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:28083c648d9a99a5dd035ec125d42439c6c1c525098c58af0fc38dd1a7a1b3d4"}, + {file = "pandas-2.3.3-cp310-cp310-win_amd64.whl", hash = "sha256:503cf027cf9940d2ceaa1a93cfb5f8c8c7e6e90720a2850378f0b3f3b1e06826"}, + {file = "pandas-2.3.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:602b8615ebcc4a0c1751e71840428ddebeb142ec02c786e8ad6b1ce3c8dec523"}, + {file = "pandas-2.3.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8fe25fc7b623b0ef6b5009149627e34d2a4657e880948ec3c840e9402e5c1b45"}, + {file = "pandas-2.3.3-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b468d3dad6ff947df92dcb32ede5b7bd41a9b3cceef0a30ed925f6d01fb8fa66"}, + {file = "pandas-2.3.3-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b98560e98cb334799c0b07ca7967ac361a47326e9b4e5a7dfb5ab2b1c9d35a1b"}, + {file = "pandas-2.3.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1d37b5848ba49824e5c30bedb9c830ab9b7751fd049bc7914533e01c65f79791"}, + {file = "pandas-2.3.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:db4301b2d1f926ae677a751eb2bd0e8c5f5319c9cb3f88b0becbbb0b07b34151"}, + {file = "pandas-2.3.3-cp311-cp311-win_amd64.whl", hash = "sha256:f086f6fe114e19d92014a1966f43a3e62285109afe874f067f5abbdcbb10e59c"}, + {file = "pandas-2.3.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:6d21f6d74eb1725c2efaa71a2bfc661a0689579b58e9c0ca58a739ff0b002b53"}, + {file = "pandas-2.3.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3fd2f887589c7aa868e02632612ba39acb0b8948faf5cc58f0850e165bd46f35"}, + {file = "pandas-2.3.3-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ecaf1e12bdc03c86ad4a7ea848d66c685cb6851d807a26aa245ca3d2017a1908"}, + {file = "pandas-2.3.3-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b3d11d2fda7eb164ef27ffc14b4fcab16a80e1ce67e9f57e19ec0afaf715ba89"}, + {file = "pandas-2.3.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a68e15f780eddf2b07d242e17a04aa187a7ee12b40b930bfdd78070556550e98"}, + {file = "pandas-2.3.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:371a4ab48e950033bcf52b6527eccb564f52dc826c02afd9a1bc0ab731bba084"}, + {file = "pandas-2.3.3-cp312-cp312-win_amd64.whl", hash = "sha256:a16dcec078a01eeef8ee61bf64074b4e524a2a3f4b3be9326420cabe59c4778b"}, + {file = "pandas-2.3.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:56851a737e3470de7fa88e6131f41281ed440d29a9268dcbf0002da5ac366713"}, + {file = "pandas-2.3.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:bdcd9d1167f4885211e401b3036c0c8d9e274eee67ea8d0758a256d60704cfe8"}, + {file = "pandas-2.3.3-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e32e7cc9af0f1cc15548288a51a3b681cc2a219faa838e995f7dc53dbab1062d"}, + {file = "pandas-2.3.3-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:318d77e0e42a628c04dc56bcef4b40de67918f7041c2b061af1da41dcff670ac"}, + {file = "pandas-2.3.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4e0a175408804d566144e170d0476b15d78458795bb18f1304fb94160cabf40c"}, + {file = "pandas-2.3.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:93c2d9ab0fc11822b5eece72ec9587e172f63cff87c00b062f6e37448ced4493"}, + {file = "pandas-2.3.3-cp313-cp313-win_amd64.whl", hash = "sha256:f8bfc0e12dc78f777f323f55c58649591b2cd0c43534e8355c51d3fede5f4dee"}, + {file = "pandas-2.3.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:75ea25f9529fdec2d2e93a42c523962261e567d250b0013b16210e1d40d7c2e5"}, + {file = "pandas-2.3.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:74ecdf1d301e812db96a465a525952f4dde225fdb6d8e5a521d47e1f42041e21"}, + {file = "pandas-2.3.3-cp313-cp313t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6435cb949cb34ec11cc9860246ccb2fdc9ecd742c12d3304989017d53f039a78"}, + {file = "pandas-2.3.3-cp313-cp313t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:900f47d8f20860de523a1ac881c4c36d65efcb2eb850e6948140fa781736e110"}, + {file = "pandas-2.3.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:a45c765238e2ed7d7c608fc5bc4a6f88b642f2f01e70c0c23d2224dd21829d86"}, + {file = "pandas-2.3.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:c4fc4c21971a1a9f4bdb4c73978c7f7256caa3e62b323f70d6cb80db583350bc"}, + {file = "pandas-2.3.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:ee15f284898e7b246df8087fc82b87b01686f98ee67d85a17b7ab44143a3a9a0"}, + {file = "pandas-2.3.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:1611aedd912e1ff81ff41c745822980c49ce4a7907537be8692c8dbc31924593"}, + {file = "pandas-2.3.3-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6d2cefc361461662ac48810cb14365a365ce864afe85ef1f447ff5a1e99ea81c"}, + {file = "pandas-2.3.3-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ee67acbbf05014ea6c763beb097e03cd629961c8a632075eeb34247120abcb4b"}, + {file = "pandas-2.3.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:c46467899aaa4da076d5abc11084634e2d197e9460643dd455ac3db5856b24d6"}, + {file = "pandas-2.3.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:6253c72c6a1d990a410bc7de641d34053364ef8bcd3126f7e7450125887dffe3"}, + {file = "pandas-2.3.3-cp314-cp314-win_amd64.whl", hash = "sha256:1b07204a219b3b7350abaae088f451860223a52cfb8a6c53358e7948735158e5"}, + {file = "pandas-2.3.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:2462b1a365b6109d275250baaae7b760fd25c726aaca0054649286bcfbb3e8ec"}, + {file = "pandas-2.3.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:0242fe9a49aa8b4d78a4fa03acb397a58833ef6199e9aa40a95f027bb3a1b6e7"}, + {file = "pandas-2.3.3-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a21d830e78df0a515db2b3d2f5570610f5e6bd2e27749770e8bb7b524b89b450"}, + {file = "pandas-2.3.3-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2e3ebdb170b5ef78f19bfb71b0dc5dc58775032361fa188e814959b74d726dd5"}, + {file = "pandas-2.3.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:d051c0e065b94b7a3cea50eb1ec32e912cd96dba41647eb24104b6c6c14c5788"}, + {file = "pandas-2.3.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:3869faf4bd07b3b66a9f462417d0ca3a9df29a9f6abd5d0d0dbab15dac7abe87"}, + {file = "pandas-2.3.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c503ba5216814e295f40711470446bc3fd00f0faea8a086cbc688808e26f92a2"}, + {file = "pandas-2.3.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a637c5cdfa04b6d6e2ecedcb81fc52ffb0fd78ce2ebccc9ea964df9f658de8c8"}, + {file = "pandas-2.3.3-cp39-cp39-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:854d00d556406bffe66a4c0802f334c9ad5a96b4f1f868adf036a21b11ef13ff"}, + {file = "pandas-2.3.3-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bf1f8a81d04ca90e32a0aceb819d34dbd378a98bf923b6398b9a3ec0bf44de29"}, + {file = "pandas-2.3.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:23ebd657a4d38268c7dfbdf089fbc31ea709d82e4923c5ffd4fbd5747133ce73"}, + {file = "pandas-2.3.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:5554c929ccc317d41a5e3d1234f3be588248e61f08a74dd17c9eabb535777dc9"}, + {file = "pandas-2.3.3-cp39-cp39-win_amd64.whl", hash = "sha256:d3e28b3e83862ccf4d85ff19cf8c20b2ae7e503881711ff2d534dc8f761131aa"}, + {file = "pandas-2.3.3.tar.gz", hash = "sha256:e05e1af93b977f7eafa636d043f9f94c7ee3ac81af99c13508215942e64c993b"}, ] [package.dependencies] @@ -2764,30 +2702,32 @@ xml = ["lxml (>=4.9.2)"] [[package]] name = "parso" -version = "0.8.4" +version = "0.8.6" description = "A Python Parser" optional = false python-versions = ">=3.6" groups = ["main"] +markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ - {file = "parso-0.8.4-py2.py3-none-any.whl", hash = "sha256:a418670a20291dacd2dddc80c377c5c3791378ee1e8d12bffc35420643d43f18"}, - {file = "parso-0.8.4.tar.gz", hash = "sha256:eb3a7b58240fb99099a345571deecc0f9540ea5f4dd2fe14c2a99d6b281ab92d"}, + {file = "parso-0.8.6-py2.py3-none-any.whl", hash = "sha256:2c549f800b70a5c4952197248825584cb00f033b29c692671d3bf08bf380baff"}, + {file = "parso-0.8.6.tar.gz", hash = "sha256:2b9a0332696df97d454fa67b81618fd69c35a7b90327cbe6ba5c92d2c68a7bfd"}, ] [package.extras] -qa = ["flake8 (==5.0.4)", "mypy (==0.971)", "types-setuptools (==67.2.0.1)"] +qa = ["flake8 (==5.0.4)", "types-setuptools (==67.2.0.1)", "zuban (==0.5.1)"] testing = ["docopt", "pytest"] [[package]] name = "patsy" -version = "1.0.1" +version = "1.0.2" description = "A Python package for describing statistical models and for building design matrices." optional = false python-versions = ">=3.6" groups = ["main"] +markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ - {file = "patsy-1.0.1-py2.py3-none-any.whl", hash = "sha256:751fb38f9e97e62312e921a1954b81e1bb2bcda4f5eeabaf94db251ee791509c"}, - {file = "patsy-1.0.1.tar.gz", hash = "sha256:e786a9391eec818c054e359b737bbce692f051aee4c661f4141cc88fb459c0c4"}, + {file = "patsy-1.0.2-py2.py3-none-any.whl", hash = "sha256:37bfddbc58fcf0362febb5f54f10743f8b21dd2aa73dec7e7ef59d1b02ae668a"}, + {file = "patsy-1.0.2.tar.gz", hash = "sha256:cdc995455f6233e90e22de72c37fcadb344e7586fb83f06696f54d92f8ce74c0"}, ] [package.dependencies] @@ -2803,6 +2743,7 @@ description = "Gymnasium for multi-agent reinforcement learning." optional = false python-versions = ">=3.8" groups = ["main"] +markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "pettingzoo-1.24.3-py3-none-any.whl", hash = "sha256:23ed90517d2e8a7098bdaf5e31234b3a7f7b73ca578d70d1ca7b9d0cb0e37982"}, {file = "pettingzoo-1.24.3.tar.gz", hash = "sha256:91f9094f18e06fb74b98f4099cd22e8ae4396125e51719d50b30c9f1c7ab07e6"}, @@ -2833,7 +2774,7 @@ description = "Pexpect allows easy control of interactive console applications." optional = false python-versions = "*" groups = ["main"] -markers = "(python_version < \"3.11\" or sys_platform != \"win32\" and sys_platform != \"emscripten\") and sys_platform != \"win32\"" +markers = "sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "pexpect-4.9.0-py2.py3-none-any.whl", hash = "sha256:7236d1e080e4936be2dc3e326cec0af72acf9212a7e1d060210e70a47e253523"}, {file = "pexpect-4.9.0.tar.gz", hash = "sha256:ee7d41123f3c9911050ea2c2dac107568dc43b2d3b0c7557a33212c398ead30f"}, @@ -2844,138 +2785,156 @@ ptyprocess = ">=0.5" [[package]] name = "pillow" -version = "11.1.0" -description = "Python Imaging Library (Fork)" +version = "12.1.1" +description = "Python Imaging Library (fork)" optional = false -python-versions = ">=3.9" +python-versions = ">=3.10" groups = ["main"] -files = [ - {file = "pillow-11.1.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:e1abe69aca89514737465752b4bcaf8016de61b3be1397a8fc260ba33321b3a8"}, - {file = "pillow-11.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c640e5a06869c75994624551f45e5506e4256562ead981cce820d5ab39ae2192"}, - {file = "pillow-11.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a07dba04c5e22824816b2615ad7a7484432d7f540e6fa86af60d2de57b0fcee2"}, - {file = "pillow-11.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e267b0ed063341f3e60acd25c05200df4193e15a4a5807075cd71225a2386e26"}, - {file = "pillow-11.1.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:bd165131fd51697e22421d0e467997ad31621b74bfc0b75956608cb2906dda07"}, - {file = "pillow-11.1.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:abc56501c3fd148d60659aae0af6ddc149660469082859fa7b066a298bde9482"}, - {file = "pillow-11.1.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:54ce1c9a16a9561b6d6d8cb30089ab1e5eb66918cb47d457bd996ef34182922e"}, - {file = "pillow-11.1.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:73ddde795ee9b06257dac5ad42fcb07f3b9b813f8c1f7f870f402f4dc54b5269"}, - {file = "pillow-11.1.0-cp310-cp310-win32.whl", hash = "sha256:3a5fe20a7b66e8135d7fd617b13272626a28278d0e578c98720d9ba4b2439d49"}, - {file = "pillow-11.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:b6123aa4a59d75f06e9dd3dac5bf8bc9aa383121bb3dd9a7a612e05eabc9961a"}, - {file = "pillow-11.1.0-cp310-cp310-win_arm64.whl", hash = "sha256:a76da0a31da6fcae4210aa94fd779c65c75786bc9af06289cd1c184451ef7a65"}, - {file = "pillow-11.1.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:e06695e0326d05b06833b40b7ef477e475d0b1ba3a6d27da1bb48c23209bf457"}, - {file = "pillow-11.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:96f82000e12f23e4f29346e42702b6ed9a2f2fea34a740dd5ffffcc8c539eb35"}, - {file = "pillow-11.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a3cd561ded2cf2bbae44d4605837221b987c216cff94f49dfeed63488bb228d2"}, - {file = "pillow-11.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f189805c8be5ca5add39e6f899e6ce2ed824e65fb45f3c28cb2841911da19070"}, - {file = "pillow-11.1.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:dd0052e9db3474df30433f83a71b9b23bd9e4ef1de13d92df21a52c0303b8ab6"}, - {file = "pillow-11.1.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:837060a8599b8f5d402e97197d4924f05a2e0d68756998345c829c33186217b1"}, - {file = "pillow-11.1.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:aa8dd43daa836b9a8128dbe7d923423e5ad86f50a7a14dc688194b7be5c0dea2"}, - {file = "pillow-11.1.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:0a2f91f8a8b367e7a57c6e91cd25af510168091fb89ec5146003e424e1558a96"}, - {file = "pillow-11.1.0-cp311-cp311-win32.whl", hash = "sha256:c12fc111ef090845de2bb15009372175d76ac99969bdf31e2ce9b42e4b8cd88f"}, - {file = "pillow-11.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:fbd43429d0d7ed6533b25fc993861b8fd512c42d04514a0dd6337fb3ccf22761"}, - {file = "pillow-11.1.0-cp311-cp311-win_arm64.whl", hash = "sha256:f7955ecf5609dee9442cbface754f2c6e541d9e6eda87fad7f7a989b0bdb9d71"}, - {file = "pillow-11.1.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:2062ffb1d36544d42fcaa277b069c88b01bb7298f4efa06731a7fd6cc290b81a"}, - {file = "pillow-11.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a85b653980faad27e88b141348707ceeef8a1186f75ecc600c395dcac19f385b"}, - {file = "pillow-11.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9409c080586d1f683df3f184f20e36fb647f2e0bc3988094d4fd8c9f4eb1b3b3"}, - {file = "pillow-11.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7fdadc077553621911f27ce206ffcbec7d3f8d7b50e0da39f10997e8e2bb7f6a"}, - {file = "pillow-11.1.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:93a18841d09bcdd774dcdc308e4537e1f867b3dec059c131fde0327899734aa1"}, - {file = "pillow-11.1.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:9aa9aeddeed452b2f616ff5507459e7bab436916ccb10961c4a382cd3e03f47f"}, - {file = "pillow-11.1.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3cdcdb0b896e981678eee140d882b70092dac83ac1cdf6b3a60e2216a73f2b91"}, - {file = "pillow-11.1.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:36ba10b9cb413e7c7dfa3e189aba252deee0602c86c309799da5a74009ac7a1c"}, - {file = "pillow-11.1.0-cp312-cp312-win32.whl", hash = "sha256:cfd5cd998c2e36a862d0e27b2df63237e67273f2fc78f47445b14e73a810e7e6"}, - {file = "pillow-11.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:a697cd8ba0383bba3d2d3ada02b34ed268cb548b369943cd349007730c92bddf"}, - {file = "pillow-11.1.0-cp312-cp312-win_arm64.whl", hash = "sha256:4dd43a78897793f60766563969442020e90eb7847463eca901e41ba186a7d4a5"}, - {file = "pillow-11.1.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:ae98e14432d458fc3de11a77ccb3ae65ddce70f730e7c76140653048c71bfcbc"}, - {file = "pillow-11.1.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:cc1331b6d5a6e144aeb5e626f4375f5b7ae9934ba620c0ac6b3e43d5e683a0f0"}, - {file = "pillow-11.1.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:758e9d4ef15d3560214cddbc97b8ef3ef86ce04d62ddac17ad39ba87e89bd3b1"}, - {file = "pillow-11.1.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b523466b1a31d0dcef7c5be1f20b942919b62fd6e9a9be199d035509cbefc0ec"}, - {file = "pillow-11.1.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:9044b5e4f7083f209c4e35aa5dd54b1dd5b112b108648f5c902ad586d4f945c5"}, - {file = "pillow-11.1.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:3764d53e09cdedd91bee65c2527815d315c6b90d7b8b79759cc48d7bf5d4f114"}, - {file = "pillow-11.1.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:31eba6bbdd27dde97b0174ddf0297d7a9c3a507a8a1480e1e60ef914fe23d352"}, - {file = "pillow-11.1.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:b5d658fbd9f0d6eea113aea286b21d3cd4d3fd978157cbf2447a6035916506d3"}, - {file = "pillow-11.1.0-cp313-cp313-win32.whl", hash = "sha256:f86d3a7a9af5d826744fabf4afd15b9dfef44fe69a98541f666f66fbb8d3fef9"}, - {file = "pillow-11.1.0-cp313-cp313-win_amd64.whl", hash = "sha256:593c5fd6be85da83656b93ffcccc2312d2d149d251e98588b14fbc288fd8909c"}, - {file = "pillow-11.1.0-cp313-cp313-win_arm64.whl", hash = "sha256:11633d58b6ee5733bde153a8dafd25e505ea3d32e261accd388827ee987baf65"}, - {file = "pillow-11.1.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:70ca5ef3b3b1c4a0812b5c63c57c23b63e53bc38e758b37a951e5bc466449861"}, - {file = "pillow-11.1.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:8000376f139d4d38d6851eb149b321a52bb8893a88dae8ee7d95840431977081"}, - {file = "pillow-11.1.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9ee85f0696a17dd28fbcfceb59f9510aa71934b483d1f5601d1030c3c8304f3c"}, - {file = "pillow-11.1.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:dd0e081319328928531df7a0e63621caf67652c8464303fd102141b785ef9547"}, - {file = "pillow-11.1.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:e63e4e5081de46517099dc30abe418122f54531a6ae2ebc8680bcd7096860eab"}, - {file = "pillow-11.1.0-cp313-cp313t-win32.whl", hash = "sha256:dda60aa465b861324e65a78c9f5cf0f4bc713e4309f83bc387be158b077963d9"}, - {file = "pillow-11.1.0-cp313-cp313t-win_amd64.whl", hash = "sha256:ad5db5781c774ab9a9b2c4302bbf0c1014960a0a7be63278d13ae6fdf88126fe"}, - {file = "pillow-11.1.0-cp313-cp313t-win_arm64.whl", hash = "sha256:67cd427c68926108778a9005f2a04adbd5e67c442ed21d95389fe1d595458756"}, - {file = "pillow-11.1.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:bf902d7413c82a1bfa08b06a070876132a5ae6b2388e2712aab3a7cbc02205c6"}, - {file = "pillow-11.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c1eec9d950b6fe688edee07138993e54ee4ae634c51443cfb7c1e7613322718e"}, - {file = "pillow-11.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e275ee4cb11c262bd108ab2081f750db2a1c0b8c12c1897f27b160c8bd57bbc"}, - {file = "pillow-11.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4db853948ce4e718f2fc775b75c37ba2efb6aaea41a1a5fc57f0af59eee774b2"}, - {file = "pillow-11.1.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:ab8a209b8485d3db694fa97a896d96dd6533d63c22829043fd9de627060beade"}, - {file = "pillow-11.1.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:54251ef02a2309b5eec99d151ebf5c9904b77976c8abdcbce7891ed22df53884"}, - {file = "pillow-11.1.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:5bb94705aea800051a743aa4874bb1397d4695fb0583ba5e425ee0328757f196"}, - {file = "pillow-11.1.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:89dbdb3e6e9594d512780a5a1c42801879628b38e3efc7038094430844e271d8"}, - {file = "pillow-11.1.0-cp39-cp39-win32.whl", hash = "sha256:e5449ca63da169a2e6068dd0e2fcc8d91f9558aba89ff6d02121ca8ab11e79e5"}, - {file = "pillow-11.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:3362c6ca227e65c54bf71a5f88b3d4565ff1bcbc63ae72c34b07bbb1cc59a43f"}, - {file = "pillow-11.1.0-cp39-cp39-win_arm64.whl", hash = "sha256:b20be51b37a75cc54c2c55def3fa2c65bb94ba859dde241cd0a4fd302de5ae0a"}, - {file = "pillow-11.1.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:8c730dc3a83e5ac137fbc92dfcfe1511ce3b2b5d7578315b63dbbb76f7f51d90"}, - {file = "pillow-11.1.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:7d33d2fae0e8b170b6a6c57400e077412240f6f5bb2a342cf1ee512a787942bb"}, - {file = "pillow-11.1.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a8d65b38173085f24bc07f8b6c505cbb7418009fa1a1fcb111b1f4961814a442"}, - {file = "pillow-11.1.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:015c6e863faa4779251436db398ae75051469f7c903b043a48f078e437656f83"}, - {file = "pillow-11.1.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:d44ff19eea13ae4acdaaab0179fa68c0c6f2f45d66a4d8ec1eda7d6cecbcc15f"}, - {file = "pillow-11.1.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:d3d8da4a631471dfaf94c10c85f5277b1f8e42ac42bade1ac67da4b4a7359b73"}, - {file = "pillow-11.1.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:4637b88343166249fe8aa94e7c4a62a180c4b3898283bb5d3d2fd5fe10d8e4e0"}, - {file = "pillow-11.1.0.tar.gz", hash = "sha256:368da70808b36d73b4b390a8ffac11069f8a5c85f29eff1f1b01bcf3ef5b2a20"}, +markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" +files = [ + {file = "pillow-12.1.1-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:1f1625b72740fdda5d77b4def688eb8fd6490975d06b909fd19f13f391e077e0"}, + {file = "pillow-12.1.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:178aa072084bd88ec759052feca8e56cbb14a60b39322b99a049e58090479713"}, + {file = "pillow-12.1.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:b66e95d05ba806247aaa1561f080abc7975daf715c30780ff92a20e4ec546e1b"}, + {file = "pillow-12.1.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:89c7e895002bbe49cdc5426150377cbbc04767d7547ed145473f496dfa40408b"}, + {file = "pillow-12.1.1-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3a5cbdcddad0af3da87cb16b60d23648bc3b51967eb07223e9fed77a82b457c4"}, + {file = "pillow-12.1.1-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9f51079765661884a486727f0729d29054242f74b46186026582b4e4769918e4"}, + {file = "pillow-12.1.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:99c1506ea77c11531d75e3a412832a13a71c7ebc8192ab9e4b2e355555920e3e"}, + {file = "pillow-12.1.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:36341d06738a9f66c8287cf8b876d24b18db9bd8740fa0672c74e259ad408cff"}, + {file = "pillow-12.1.1-cp310-cp310-win32.whl", hash = "sha256:6c52f062424c523d6c4db85518774cc3d50f5539dd6eed32b8f6229b26f24d40"}, + {file = "pillow-12.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:c6008de247150668a705a6338156efb92334113421ceecf7438a12c9a12dab23"}, + {file = "pillow-12.1.1-cp310-cp310-win_arm64.whl", hash = "sha256:1a9b0ee305220b392e1124a764ee4265bd063e54a751a6b62eff69992f457fa9"}, + {file = "pillow-12.1.1-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:e879bb6cd5c73848ef3b2b48b8af9ff08c5b71ecda8048b7dd22d8a33f60be32"}, + {file = "pillow-12.1.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:365b10bb9417dd4498c0e3b128018c4a624dc11c7b97d8cc54effe3b096f4c38"}, + {file = "pillow-12.1.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d4ce8e329c93845720cd2014659ca67eac35f6433fd3050393d85f3ecef0dad5"}, + {file = "pillow-12.1.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:fc354a04072b765eccf2204f588a7a532c9511e8b9c7f900e1b64e3e33487090"}, + {file = "pillow-12.1.1-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7e7976bf1910a8116b523b9f9f58bf410f3e8aa330cd9a2bb2953f9266ab49af"}, + {file = "pillow-12.1.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:597bd9c8419bc7c6af5604e55847789b69123bbe25d65cc6ad3012b4f3c98d8b"}, + {file = "pillow-12.1.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:2c1fc0f2ca5f96a3c8407e41cca26a16e46b21060fe6d5b099d2cb01412222f5"}, + {file = "pillow-12.1.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:578510d88c6229d735855e1f278aa305270438d36a05031dfaae5067cc8eb04d"}, + {file = "pillow-12.1.1-cp311-cp311-win32.whl", hash = "sha256:7311c0a0dcadb89b36b7025dfd8326ecfa36964e29913074d47382706e516a7c"}, + {file = "pillow-12.1.1-cp311-cp311-win_amd64.whl", hash = "sha256:fbfa2a7c10cc2623f412753cddf391c7f971c52ca40a3f65dc5039b2939e8563"}, + {file = "pillow-12.1.1-cp311-cp311-win_arm64.whl", hash = "sha256:b81b5e3511211631b3f672a595e3221252c90af017e399056d0faabb9538aa80"}, + {file = "pillow-12.1.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:ab323b787d6e18b3d91a72fc99b1a2c28651e4358749842b8f8dfacd28ef2052"}, + {file = "pillow-12.1.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:adebb5bee0f0af4909c30db0d890c773d1a92ffe83da908e2e9e720f8edf3984"}, + {file = "pillow-12.1.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:bb66b7cc26f50977108790e2456b7921e773f23db5630261102233eb355a3b79"}, + {file = "pillow-12.1.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:aee2810642b2898bb187ced9b349e95d2a7272930796e022efaf12e99dccd293"}, + {file = "pillow-12.1.1-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a0b1cd6232e2b618adcc54d9882e4e662a089d5768cd188f7c245b4c8c44a397"}, + {file = "pillow-12.1.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7aac39bcf8d4770d089588a2e1dd111cbaa42df5a94be3114222057d68336bd0"}, + {file = "pillow-12.1.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:ab174cd7d29a62dd139c44bf74b698039328f45cb03b4596c43473a46656b2f3"}, + {file = "pillow-12.1.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:339ffdcb7cbeaa08221cd401d517d4b1fe7a9ed5d400e4a8039719238620ca35"}, + {file = "pillow-12.1.1-cp312-cp312-win32.whl", hash = "sha256:5d1f9575a12bed9e9eedd9a4972834b08c97a352bd17955ccdebfeca5913fa0a"}, + {file = "pillow-12.1.1-cp312-cp312-win_amd64.whl", hash = "sha256:21329ec8c96c6e979cd0dfd29406c40c1d52521a90544463057d2aaa937d66a6"}, + {file = "pillow-12.1.1-cp312-cp312-win_arm64.whl", hash = "sha256:af9a332e572978f0218686636610555ae3defd1633597be015ed50289a03c523"}, + {file = "pillow-12.1.1-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:d242e8ac078781f1de88bf823d70c1a9b3c7950a44cdf4b7c012e22ccbcd8e4e"}, + {file = "pillow-12.1.1-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:02f84dfad02693676692746df05b89cf25597560db2857363a208e393429f5e9"}, + {file = "pillow-12.1.1-cp313-cp313-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:e65498daf4b583091ccbb2556c7000abf0f3349fcd57ef7adc9a84a394ed29f6"}, + {file = "pillow-12.1.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:6c6db3b84c87d48d0088943bf33440e0c42370b99b1c2a7989216f7b42eede60"}, + {file = "pillow-12.1.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:8b7e5304e34942bf62e15184219a7b5ad4ff7f3bb5cca4d984f37df1a0e1aee2"}, + {file = "pillow-12.1.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:18e5bddd742a44b7e6b1e773ab5db102bd7a94c32555ba656e76d319d19c3850"}, + {file = "pillow-12.1.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:fc44ef1f3de4f45b50ccf9136999d71abb99dca7706bc75d222ed350b9fd2289"}, + {file = "pillow-12.1.1-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5a8eb7ed8d4198bccbd07058416eeec51686b498e784eda166395a23eb99138e"}, + {file = "pillow-12.1.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:47b94983da0c642de92ced1702c5b6c292a84bd3a8e1d1702ff923f183594717"}, + {file = "pillow-12.1.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:518a48c2aab7ce596d3bf79d0e275661b846e86e4d0e7dec34712c30fe07f02a"}, + {file = "pillow-12.1.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a550ae29b95c6dc13cf69e2c9dc5747f814c54eeb2e32d683e5e93af56caa029"}, + {file = "pillow-12.1.1-cp313-cp313-win32.whl", hash = "sha256:a003d7422449f6d1e3a34e3dd4110c22148336918ddbfc6a32581cd54b2e0b2b"}, + {file = "pillow-12.1.1-cp313-cp313-win_amd64.whl", hash = "sha256:344cf1e3dab3be4b1fa08e449323d98a2a3f819ad20f4b22e77a0ede31f0faa1"}, + {file = "pillow-12.1.1-cp313-cp313-win_arm64.whl", hash = "sha256:5c0dd1636633e7e6a0afe7bf6a51a14992b7f8e60de5789018ebbdfae55b040a"}, + {file = "pillow-12.1.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:0330d233c1a0ead844fc097a7d16c0abff4c12e856c0b325f231820fee1f39da"}, + {file = "pillow-12.1.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:5dae5f21afb91322f2ff791895ddd8889e5e947ff59f71b46041c8ce6db790bc"}, + {file = "pillow-12.1.1-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:2e0c664be47252947d870ac0d327fea7e63985a08794758aa8af5b6cb6ec0c9c"}, + {file = "pillow-12.1.1-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:691ab2ac363b8217f7d31b3497108fb1f50faab2f75dfb03284ec2f217e87bf8"}, + {file = "pillow-12.1.1-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e9e8064fb1cc019296958595f6db671fba95209e3ceb0c4734c9baf97de04b20"}, + {file = "pillow-12.1.1-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:472a8d7ded663e6162dafdf20015c486a7009483ca671cece7a9279b512fcb13"}, + {file = "pillow-12.1.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:89b54027a766529136a06cfebeecb3a04900397a3590fd252160b888479517bf"}, + {file = "pillow-12.1.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:86172b0831b82ce4f7877f280055892b31179e1576aa00d0df3bb1bbf8c3e524"}, + {file = "pillow-12.1.1-cp313-cp313t-win32.whl", hash = "sha256:44ce27545b6efcf0fdbdceb31c9a5bdea9333e664cda58a7e674bb74608b3986"}, + {file = "pillow-12.1.1-cp313-cp313t-win_amd64.whl", hash = "sha256:a285e3eb7a5a45a2ff504e31f4a8d1b12ef62e84e5411c6804a42197c1cf586c"}, + {file = "pillow-12.1.1-cp313-cp313t-win_arm64.whl", hash = "sha256:cc7d296b5ea4d29e6570dabeaed58d31c3fea35a633a69679fb03d7664f43fb3"}, + {file = "pillow-12.1.1-cp314-cp314-ios_13_0_arm64_iphoneos.whl", hash = "sha256:417423db963cb4be8bac3fc1204fe61610f6abeed1580a7a2cbb2fbda20f12af"}, + {file = "pillow-12.1.1-cp314-cp314-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:b957b71c6b2387610f556a7eb0828afbe40b4a98036fc0d2acfa5a44a0c2036f"}, + {file = "pillow-12.1.1-cp314-cp314-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:097690ba1f2efdeb165a20469d59d8bb03c55fb6621eb2041a060ae8ea3e9642"}, + {file = "pillow-12.1.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:2815a87ab27848db0321fb78c7f0b2c8649dee134b7f2b80c6a45c6831d75ccd"}, + {file = "pillow-12.1.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:f7ed2c6543bad5a7d5530eb9e78c53132f93dfa44a28492db88b41cdab885202"}, + {file = "pillow-12.1.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:652a2c9ccfb556235b2b501a3a7cf3742148cd22e04b5625c5fe057ea3e3191f"}, + {file = "pillow-12.1.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:d6e4571eedf43af33d0fc233a382a76e849badbccdf1ac438841308652a08e1f"}, + {file = "pillow-12.1.1-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b574c51cf7d5d62e9be37ba446224b59a2da26dc4c1bb2ecbe936a4fb1a7cb7f"}, + {file = "pillow-12.1.1-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a37691702ed687799de29a518d63d4682d9016932db66d4e90c345831b02fb4e"}, + {file = "pillow-12.1.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:f95c00d5d6700b2b890479664a06e754974848afaae5e21beb4d83c106923fd0"}, + {file = "pillow-12.1.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:559b38da23606e68681337ad74622c4dbba02254fc9cb4488a305dd5975c7eeb"}, + {file = "pillow-12.1.1-cp314-cp314-win32.whl", hash = "sha256:03edcc34d688572014ff223c125a3f77fb08091e4607e7745002fc214070b35f"}, + {file = "pillow-12.1.1-cp314-cp314-win_amd64.whl", hash = "sha256:50480dcd74fa63b8e78235957d302d98d98d82ccbfac4c7e12108ba9ecbdba15"}, + {file = "pillow-12.1.1-cp314-cp314-win_arm64.whl", hash = "sha256:5cb1785d97b0c3d1d1a16bc1d710c4a0049daefc4935f3a8f31f827f4d3d2e7f"}, + {file = "pillow-12.1.1-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:1f90cff8aa76835cba5769f0b3121a22bd4eb9e6884cfe338216e557a9a548b8"}, + {file = "pillow-12.1.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:1f1be78ce9466a7ee64bfda57bdba0f7cc499d9794d518b854816c41bf0aa4e9"}, + {file = "pillow-12.1.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:42fc1f4677106188ad9a55562bbade416f8b55456f522430fadab3cef7cd4e60"}, + {file = "pillow-12.1.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:98edb152429ab62a1818039744d8fbb3ccab98a7c29fc3d5fcef158f3f1f68b7"}, + {file = "pillow-12.1.1-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d470ab1178551dd17fdba0fef463359c41aaa613cdcd7ff8373f54be629f9f8f"}, + {file = "pillow-12.1.1-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6408a7b064595afcab0a49393a413732a35788f2a5092fdc6266952ed67de586"}, + {file = "pillow-12.1.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:5d8c41325b382c07799a3682c1c258469ea2ff97103c53717b7893862d0c98ce"}, + {file = "pillow-12.1.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:c7697918b5be27424e9ce568193efd13d925c4481dd364e43f5dff72d33e10f8"}, + {file = "pillow-12.1.1-cp314-cp314t-win32.whl", hash = "sha256:d2912fd8114fc5545aa3a4b5576512f64c55a03f3ebcca4c10194d593d43ea36"}, + {file = "pillow-12.1.1-cp314-cp314t-win_amd64.whl", hash = "sha256:4ceb838d4bd9dab43e06c363cab2eebf63846d6a4aeaea283bbdfd8f1a8ed58b"}, + {file = "pillow-12.1.1-cp314-cp314t-win_arm64.whl", hash = "sha256:7b03048319bfc6170e93bd60728a1af51d3dd7704935feb228c4d4faab35d334"}, + {file = "pillow-12.1.1-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:600fd103672b925fe62ed08e0d874ea34d692474df6f4bf7ebe148b30f89f39f"}, + {file = "pillow-12.1.1-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:665e1b916b043cef294bc54d47bf02d87e13f769bc4bc5fa225a24b3a6c5aca9"}, + {file = "pillow-12.1.1-pp311-pypy311_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:495c302af3aad1ca67420ddd5c7bd480c8867ad173528767d906428057a11f0e"}, + {file = "pillow-12.1.1-pp311-pypy311_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:8fd420ef0c52c88b5a035a0886f367748c72147b2b8f384c9d12656678dfdfa9"}, + {file = "pillow-12.1.1-pp311-pypy311_pp73-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f975aa7ef9684ce7e2c18a3aa8f8e2106ce1e46b94ab713d156b2898811651d3"}, + {file = "pillow-12.1.1-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8089c852a56c2966cf18835db62d9b34fef7ba74c726ad943928d494fa7f4735"}, + {file = "pillow-12.1.1-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:cb9bb857b2d057c6dfc72ac5f3b44836924ba15721882ef103cecb40d002d80e"}, + {file = "pillow-12.1.1.tar.gz", hash = "sha256:9ad8fa5937ab05218e2b6a4cff30295ad35afd2f83ac592e68c0d871bb0fdbc4"}, ] [package.extras] -docs = ["furo", "olefile", "sphinx (>=8.1)", "sphinx-copybutton", "sphinx-inline-tabs", "sphinxext-opengraph"] +docs = ["furo", "olefile", "sphinx (>=8.2)", "sphinx-autobuild", "sphinx-copybutton", "sphinx-inline-tabs", "sphinxext-opengraph"] fpx = ["olefile"] mic = ["olefile"] -tests = ["check-manifest", "coverage (>=7.4.2)", "defusedxml", "markdown2", "olefile", "packaging", "pyroma", "pytest", "pytest-cov", "pytest-timeout", "trove-classifiers (>=2024.10.12)"] -typing = ["typing-extensions ; python_version < \"3.10\""] +test-arrow = ["arro3-compute", "arro3-core", "nanoarrow", "pyarrow"] +tests = ["check-manifest", "coverage (>=7.4.2)", "defusedxml", "markdown2", "olefile", "packaging", "pyroma (>=5)", "pytest", "pytest-cov", "pytest-timeout", "pytest-xdist", "trove-classifiers (>=2024.10.12)"] xmp = ["defusedxml"] [[package]] name = "platformdirs" -version = "4.3.7" +version = "4.9.4" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`." optional = false -python-versions = ">=3.9" +python-versions = ">=3.10" groups = ["main"] +markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ - {file = "platformdirs-4.3.7-py3-none-any.whl", hash = "sha256:a03875334331946f13c549dbd8f4bac7a13a50a895a0eb1e8c6a8ace80d40a94"}, - {file = "platformdirs-4.3.7.tar.gz", hash = "sha256:eb437d586b6a0986388f0d6f74aa0cde27b48d0e3d66843640bfb6bdcdb6e351"}, + {file = "platformdirs-4.9.4-py3-none-any.whl", hash = "sha256:68a9a4619a666ea6439f2ff250c12a853cd1cbd5158d258bd824a7df6be2f868"}, + {file = "platformdirs-4.9.4.tar.gz", hash = "sha256:1ec356301b7dc906d83f371c8f487070e99d3ccf9e501686456394622a01a934"}, ] -[package.extras] -docs = ["furo (>=2024.8.6)", "proselint (>=0.14)", "sphinx (>=8.1.3)", "sphinx-autodoc-typehints (>=3)"] -test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=8.3.4)", "pytest-cov (>=6)", "pytest-mock (>=3.14)"] -type = ["mypy (>=1.14.1)"] - [[package]] name = "platypus-opt" -version = "1.1.0" +version = "1.4.1" description = "Multiobjective optimization in Python" optional = false -python-versions = ">=3.6" +python-versions = ">=3.8" groups = ["main"] +markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ - {file = "Platypus-Opt-1.1.0.tar.gz", hash = "sha256:19610123c204e2dfc10741c69403b57a649589d9494de0fce0fc27579e586bbd"}, - {file = "Platypus_Opt-1.1.0-py3-none-any.whl", hash = "sha256:f25084514a6eac400211a5323756c6ae257145f444f07d07e9e60a09921ffe77"}, + {file = "Platypus_Opt-1.4.1-py3-none-any.whl", hash = "sha256:9c22883a3ffd91bd3a6dfb75412fc6b80368850fdb9b24f9e301a8cbf160fdda"}, + {file = "platypus_opt-1.4.1.tar.gz", hash = "sha256:b341790be67354c2c964bb3431b9acc8a1a147aca9d9464a43720dc58b3895e8"}, ] -[package.dependencies] -numpy = "*" - [package.extras] -test = ["mock", "pytest"] +docs = ["sphinx", "sphinx-rtd-theme"] +full = ["Platypus-Opt[docs]", "Platypus-Opt[test]", "mpi4py"] +test = ["flake8", "flake8-pyproject", "jsonpickle", "matplotlib", "mock", "numpy", "pytest"] [[package]] name = "plotly" -version = "6.0.1" +version = "6.6.0" description = "An open-source interactive data visualization library for Python" optional = false python-versions = ">=3.8" groups = ["main"] +markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ - {file = "plotly-6.0.1-py3-none-any.whl", hash = "sha256:4714db20fea57a435692c548a4eb4fae454f7daddf15f8d8ba7e1045681d7768"}, - {file = "plotly-6.0.1.tar.gz", hash = "sha256:dd8400229872b6e3c964b099be699f8d00c489a974f2cfccfad5e8240873366b"}, + {file = "plotly-6.6.0-py3-none-any.whl", hash = "sha256:8d6daf0f87412e0c0bfe72e809d615217ab57cc715899a1e5145135a7800d1d0"}, + {file = "plotly-6.6.0.tar.gz", hash = "sha256:b897f15f3b02028d69f755f236be890ba950d0a42d7dfc619b44e2d8cea8748c"}, ] [package.dependencies] @@ -2983,7 +2942,12 @@ narwhals = ">=1.15.1" packaging = "*" [package.extras] +dev = ["plotly[dev-optional]"] +dev-build = ["build", "jupyter", "plotly[dev-core]"] +dev-core = ["pytest", "requests", "ruff (==0.11.12)"] +dev-optional = ["anywidget", "colorcet", "fiona (<=1.9.6) ; python_version <= \"3.8\"", "geopandas", "inflect", "numpy", "orjson", "pandas", "pdfrw", "pillow", "plotly-geo", "plotly[dev-build]", "plotly[kaleido]", "polars[timezone]", "pyarrow", "pyshp", "pytz", "scikit-image", "scipy", "shapely", "statsmodels", "vaex ; python_version <= \"3.9\"", "xarray"] express = ["numpy"] +kaleido = ["kaleido (>=1.1.0)"] [[package]] name = "pluggy" @@ -2992,6 +2956,7 @@ description = "plugin and hook calling mechanisms for python" optional = false python-versions = ">=3.9" groups = ["main"] +markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "pluggy-1.6.0-py3-none-any.whl", hash = "sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746"}, {file = "pluggy-1.6.0.tar.gz", hash = "sha256:7dcc130b76258d33b90f61b658791dede3486c3e6bfb003ee5c9bfb396dd22f3"}, @@ -3003,14 +2968,15 @@ testing = ["coverage", "pytest", "pytest-benchmark"] [[package]] name = "pooch" -version = "1.8.2" +version = "1.9.0" description = "A friend to fetch your data files" optional = false -python-versions = ">=3.7" +python-versions = ">=3.9" groups = ["main"] +markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ - {file = "pooch-1.8.2-py3-none-any.whl", hash = "sha256:3529a57096f7198778a5ceefd5ac3ef0e4d06a6ddaf9fc2d609b806f25302c47"}, - {file = "pooch-1.8.2.tar.gz", hash = "sha256:76561f0de68a01da4df6af38e9955c4c9d1a5c90da73f7e40276a5728ec83d10"}, + {file = "pooch-1.9.0-py3-none-any.whl", hash = "sha256:f265597baa9f760d25ceb29d0beb8186c243d6607b0f60b83ecf14078dbc703b"}, + {file = "pooch-1.9.0.tar.gz", hash = "sha256:de46729579b9857ffd3e741987a2f6d5e0e03219892c167c6578c0091fb511ed"}, ] [package.dependencies] @@ -3021,18 +2987,36 @@ requests = ">=2.19.0" [package.extras] progress = ["tqdm (>=4.41.0,<5.0.0)"] sftp = ["paramiko (>=2.7.0)"] +test = ["pytest-httpserver", "pytest-localftpserver"] xxhash = ["xxhash (>=1.4.3)"] +[[package]] +name = "proglog" +version = "0.1.12" +description = "Log and progress bar manager for console, notebooks, web..." +optional = false +python-versions = "*" +groups = ["main"] +markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" +files = [ + {file = "proglog-0.1.12-py3-none-any.whl", hash = "sha256:ccaafce51e80a81c65dc907a460c07ccb8ec1f78dc660cfd8f9ec3a22f01b84c"}, + {file = "proglog-0.1.12.tar.gz", hash = "sha256:361ee074721c277b89b75c061336cb8c5f287c92b043efa562ccf7866cda931c"}, +] + +[package.dependencies] +tqdm = "*" + [[package]] name = "prompt-toolkit" -version = "3.0.51" +version = "3.0.52" description = "Library for building powerful interactive command lines in Python" optional = false python-versions = ">=3.8" groups = ["main"] +markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ - {file = "prompt_toolkit-3.0.51-py3-none-any.whl", hash = "sha256:52742911fde84e2d423e2f9a4cf1de7d7ac4e51958f648d9540e0fb8db077b07"}, - {file = "prompt_toolkit-3.0.51.tar.gz", hash = "sha256:931a162e3b27fc90c86f1b48bb1fb2c528c2761475e57c9c06de13311c7b54ed"}, + {file = "prompt_toolkit-3.0.52-py3-none-any.whl", hash = "sha256:9aac639a3bbd33284347de5ad8d68ecc044b91a762dc39b7c21095fcd6a19955"}, + {file = "prompt_toolkit-3.0.52.tar.gz", hash = "sha256:28cde192929c8e7321de85de1ddbe736f1375148b02f2e17edd840042b1be855"}, ] [package.dependencies] @@ -3040,46 +3024,60 @@ wcwidth = "*" [[package]] name = "protobuf" -version = "6.31.1" +version = "6.33.6" description = "" optional = false python-versions = ">=3.9" groups = ["main"] +markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ - {file = "protobuf-6.31.1-cp310-abi3-win32.whl", hash = "sha256:7fa17d5a29c2e04b7d90e5e32388b8bfd0e7107cd8e616feef7ed3fa6bdab5c9"}, - {file = "protobuf-6.31.1-cp310-abi3-win_amd64.whl", hash = "sha256:426f59d2964864a1a366254fa703b8632dcec0790d8862d30034d8245e1cd447"}, - {file = "protobuf-6.31.1-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:6f1227473dc43d44ed644425268eb7c2e488ae245d51c6866d19fe158e207402"}, - {file = "protobuf-6.31.1-cp39-abi3-manylinux2014_aarch64.whl", hash = "sha256:a40fc12b84c154884d7d4c4ebd675d5b3b5283e155f324049ae396b95ddebc39"}, - {file = "protobuf-6.31.1-cp39-abi3-manylinux2014_x86_64.whl", hash = "sha256:4ee898bf66f7a8b0bd21bce523814e6fbd8c6add948045ce958b73af7e8878c6"}, - {file = "protobuf-6.31.1-cp39-cp39-win32.whl", hash = "sha256:0414e3aa5a5f3ff423828e1e6a6e907d6c65c1d5b7e6e975793d5590bdeecc16"}, - {file = "protobuf-6.31.1-cp39-cp39-win_amd64.whl", hash = "sha256:8764cf4587791e7564051b35524b72844f845ad0bb011704c3736cce762d8fe9"}, - {file = "protobuf-6.31.1-py3-none-any.whl", hash = "sha256:720a6c7e6b77288b85063569baae8536671b39f15cc22037ec7045658d80489e"}, - {file = "protobuf-6.31.1.tar.gz", hash = "sha256:d8cac4c982f0b957a4dc73a80e2ea24fab08e679c0de9deb835f4a12d69aca9a"}, + {file = "protobuf-6.33.6-cp310-abi3-win32.whl", hash = "sha256:7d29d9b65f8afef196f8334e80d6bc1d5d4adedb449971fefd3723824e6e77d3"}, + {file = "protobuf-6.33.6-cp310-abi3-win_amd64.whl", hash = "sha256:0cd27b587afca21b7cfa59a74dcbd48a50f0a6400cfb59391340ad729d91d326"}, + {file = "protobuf-6.33.6-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:9720e6961b251bde64edfdab7d500725a2af5280f3f4c87e57c0208376aa8c3a"}, + {file = "protobuf-6.33.6-cp39-abi3-manylinux2014_aarch64.whl", hash = "sha256:e2afbae9b8e1825e3529f88d514754e094278bb95eadc0e199751cdd9a2e82a2"}, + {file = "protobuf-6.33.6-cp39-abi3-manylinux2014_s390x.whl", hash = "sha256:c96c37eec15086b79762ed265d59ab204dabc53056e3443e702d2681f4b39ce3"}, + {file = "protobuf-6.33.6-cp39-abi3-manylinux2014_x86_64.whl", hash = "sha256:e9db7e292e0ab79dd108d7f1a94fe31601ce1ee3f7b79e0692043423020b0593"}, + {file = "protobuf-6.33.6-cp39-cp39-win32.whl", hash = "sha256:bd56799fb262994b2c2faa1799693c95cc2e22c62f56fb43af311cae45d26f0e"}, + {file = "protobuf-6.33.6-cp39-cp39-win_amd64.whl", hash = "sha256:f443a394af5ed23672bc6c486be138628fbe5c651ccbc536873d7da23d1868cf"}, + {file = "protobuf-6.33.6-py3-none-any.whl", hash = "sha256:77179e006c476e69bf8e8ce866640091ec42e1beb80b213c3900006ecfba6901"}, + {file = "protobuf-6.33.6.tar.gz", hash = "sha256:a6768d25248312c297558af96a9f9c929e8c4cee0659cb07e780731095f38135"}, ] [[package]] name = "psutil" -version = "7.0.0" -description = "Cross-platform lib for process and system monitoring in Python. NOTE: the syntax of this script MUST be kept compatible with Python 2.7." +version = "7.2.2" +description = "Cross-platform lib for process and system monitoring." optional = false python-versions = ">=3.6" groups = ["main"] -files = [ - {file = "psutil-7.0.0-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:101d71dc322e3cffd7cea0650b09b3d08b8e7c4109dd6809fe452dfd00e58b25"}, - {file = "psutil-7.0.0-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:39db632f6bb862eeccf56660871433e111b6ea58f2caea825571951d4b6aa3da"}, - {file = "psutil-7.0.0-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1fcee592b4c6f146991ca55919ea3d1f8926497a713ed7faaf8225e174581e91"}, - {file = "psutil-7.0.0-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b1388a4f6875d7e2aff5c4ca1cc16c545ed41dd8bb596cefea80111db353a34"}, - {file = "psutil-7.0.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5f098451abc2828f7dc6b58d44b532b22f2088f4999a937557b603ce72b1993"}, - {file = "psutil-7.0.0-cp36-cp36m-win32.whl", hash = "sha256:84df4eb63e16849689f76b1ffcb36db7b8de703d1bc1fe41773db487621b6c17"}, - {file = "psutil-7.0.0-cp36-cp36m-win_amd64.whl", hash = "sha256:1e744154a6580bc968a0195fd25e80432d3afec619daf145b9e5ba16cc1d688e"}, - {file = "psutil-7.0.0-cp37-abi3-win32.whl", hash = "sha256:ba3fcef7523064a6c9da440fc4d6bd07da93ac726b5733c29027d7dc95b39d99"}, - {file = "psutil-7.0.0-cp37-abi3-win_amd64.whl", hash = "sha256:4cf3d4eb1aa9b348dec30105c55cd9b7d4629285735a102beb4441e38db90553"}, - {file = "psutil-7.0.0.tar.gz", hash = "sha256:7be9c3eba38beccb6495ea33afd982a44074b78f28c434a1f51cc07fd315c456"}, +markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" +files = [ + {file = "psutil-7.2.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:2edccc433cbfa046b980b0df0171cd25bcaeb3a68fe9022db0979e7aa74a826b"}, + {file = "psutil-7.2.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:e78c8603dcd9a04c7364f1a3e670cea95d51ee865e4efb3556a3a63adef958ea"}, + {file = "psutil-7.2.2-cp313-cp313t-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1a571f2330c966c62aeda00dd24620425d4b0cc86881c89861fbc04549e5dc63"}, + {file = "psutil-7.2.2-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:917e891983ca3c1887b4ef36447b1e0873e70c933afc831c6b6da078ba474312"}, + {file = "psutil-7.2.2-cp313-cp313t-win_amd64.whl", hash = "sha256:ab486563df44c17f5173621c7b198955bd6b613fb87c71c161f827d3fb149a9b"}, + {file = "psutil-7.2.2-cp313-cp313t-win_arm64.whl", hash = "sha256:ae0aefdd8796a7737eccea863f80f81e468a1e4cf14d926bd9b6f5f2d5f90ca9"}, + {file = "psutil-7.2.2-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:eed63d3b4d62449571547b60578c5b2c4bcccc5387148db46e0c2313dad0ee00"}, + {file = "psutil-7.2.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:7b6d09433a10592ce39b13d7be5a54fbac1d1228ed29abc880fb23df7cb694c9"}, + {file = "psutil-7.2.2-cp314-cp314t-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1fa4ecf83bcdf6e6c8f4449aff98eefb5d0604bf88cb883d7da3d8d2d909546a"}, + {file = "psutil-7.2.2-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e452c464a02e7dc7822a05d25db4cde564444a67e58539a00f929c51eddda0cf"}, + {file = "psutil-7.2.2-cp314-cp314t-win_amd64.whl", hash = "sha256:c7663d4e37f13e884d13994247449e9f8f574bc4655d509c3b95e9ec9e2b9dc1"}, + {file = "psutil-7.2.2-cp314-cp314t-win_arm64.whl", hash = "sha256:11fe5a4f613759764e79c65cf11ebdf26e33d6dd34336f8a337aa2996d71c841"}, + {file = "psutil-7.2.2-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:ed0cace939114f62738d808fdcecd4c869222507e266e574799e9c0faa17d486"}, + {file = "psutil-7.2.2-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:1a7b04c10f32cc88ab39cbf606e117fd74721c831c98a27dc04578deb0c16979"}, + {file = "psutil-7.2.2-cp36-abi3-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:076a2d2f923fd4821644f5ba89f059523da90dc9014e85f8e45a5774ca5bc6f9"}, + {file = "psutil-7.2.2-cp36-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b0726cecd84f9474419d67252add4ac0cd9811b04d61123054b9fb6f57df6e9e"}, + {file = "psutil-7.2.2-cp36-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:fd04ef36b4a6d599bbdb225dd1d3f51e00105f6d48a28f006da7f9822f2606d8"}, + {file = "psutil-7.2.2-cp36-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:b58fabe35e80b264a4e3bb23e6b96f9e45a3df7fb7eed419ac0e5947c61e47cc"}, + {file = "psutil-7.2.2-cp37-abi3-win_amd64.whl", hash = "sha256:eb7e81434c8d223ec4a219b5fc1c47d0417b12be7ea866e24fb5ad6e84b3d988"}, + {file = "psutil-7.2.2-cp37-abi3-win_arm64.whl", hash = "sha256:8c233660f575a5a89e6d4cb65d9f938126312bca76d8fe087b947b3a1aaac9ee"}, + {file = "psutil-7.2.2.tar.gz", hash = "sha256:0746f5f8d406af344fd547f1c8daa5f5c33dbc293bb8d6a16d80b4bb88f59372"}, ] [package.extras] -dev = ["abi3audit", "black (==24.10.0)", "check-manifest", "coverage", "packaging", "pylint", "pyperf", "pypinfo", "pytest", "pytest-cov", "pytest-xdist", "requests", "rstcheck", "ruff", "setuptools", "sphinx", "sphinx_rtd_theme", "toml-sort", "twine", "virtualenv", "vulture", "wheel"] -test = ["pytest", "pytest-xdist", "setuptools"] +dev = ["abi3audit", "black", "check-manifest", "colorama ; os_name == \"nt\"", "coverage", "packaging", "psleak", "pylint", "pyperf", "pypinfo", "pyreadline3 ; os_name == \"nt\"", "pytest", "pytest-cov", "pytest-instafail", "pytest-xdist", "pywin32 ; os_name == \"nt\" and implementation_name != \"pypy\"", "requests", "rstcheck", "ruff", "setuptools", "sphinx", "sphinx_rtd_theme", "toml-sort", "twine", "validate-pyproject[all]", "virtualenv", "vulture", "wheel", "wheel ; os_name == \"nt\" and implementation_name != \"pypy\"", "wmi ; os_name == \"nt\" and implementation_name != \"pypy\""] +test = ["psleak", "pytest", "pytest-instafail", "pytest-xdist", "pywin32 ; os_name == \"nt\" and implementation_name != \"pypy\"", "setuptools", "wheel ; os_name == \"nt\" and implementation_name != \"pypy\"", "wmi ; os_name == \"nt\" and implementation_name != \"pypy\""] [[package]] name = "ptyprocess" @@ -3088,7 +3086,7 @@ description = "Run a subprocess in a pseudo terminal" optional = false python-versions = "*" groups = ["main"] -markers = "(python_version < \"3.11\" or sys_platform != \"win32\" and sys_platform != \"emscripten\") and sys_platform != \"win32\"" +markers = "sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "ptyprocess-0.7.0-py2.py3-none-any.whl", hash = "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35"}, {file = "ptyprocess-0.7.0.tar.gz", hash = "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220"}, @@ -3101,6 +3099,7 @@ description = "Safely evaluate AST nodes without side effects" optional = false python-versions = "*" groups = ["main"] +markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "pure_eval-0.2.3-py3-none-any.whl", hash = "sha256:1db8e35b67b3d218d818ae653e27f06c3aa420901fa7b081ca98cbedc874e0d0"}, {file = "pure_eval-0.2.3.tar.gz", hash = "sha256:5f4e983f40564c576c7c8635ae88db5956bb2229d7e9237d03b3c0b0190eaf42"}, @@ -3111,45 +3110,48 @@ tests = ["pytest"] [[package]] name = "pycountry" -version = "24.6.1" +version = "26.2.16" description = "ISO country, subdivision, language, currency and script definitions and their translations" optional = false -python-versions = ">=3.8" +python-versions = ">=3.10" groups = ["main"] +markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ - {file = "pycountry-24.6.1-py3-none-any.whl", hash = "sha256:f1a4fb391cd7214f8eefd39556d740adcc233c778a27f8942c8dca351d6ce06f"}, - {file = "pycountry-24.6.1.tar.gz", hash = "sha256:b61b3faccea67f87d10c1f2b0fc0be714409e8fcdcc1315613174f6466c10221"}, + {file = "pycountry-26.2.16-py3-none-any.whl", hash = "sha256:115c4baf7cceaa30f59a4694d79483c9167dbce7a9de4d3d571c5f3ea77c305a"}, + {file = "pycountry-26.2.16.tar.gz", hash = "sha256:5b6027d453fcd6060112b951dd010f01f168b51b4bf8a1f1fc8c95c8d94a0801"}, ] [[package]] name = "pycparser" -version = "2.22" +version = "3.0" description = "C parser in Python" optional = false -python-versions = ">=3.8" +python-versions = ">=3.10" groups = ["main"] +markers = "(sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\") and implementation_name != \"PyPy\"" files = [ - {file = "pycparser-2.22-py3-none-any.whl", hash = "sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc"}, - {file = "pycparser-2.22.tar.gz", hash = "sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6"}, + {file = "pycparser-3.0-py3-none-any.whl", hash = "sha256:b727414169a36b7d524c1c3e31839a521725078d7b2ff038656844266160a992"}, + {file = "pycparser-3.0.tar.gz", hash = "sha256:600f49d217304a5902ac3c37e1281c9fe94e4d0489de643a9504c5cdfdfc6b29"}, ] [[package]] name = "pydantic" -version = "2.11.7" +version = "2.12.5" description = "Data validation using Python type hints" optional = false python-versions = ">=3.9" groups = ["main"] +markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ - {file = "pydantic-2.11.7-py3-none-any.whl", hash = "sha256:dde5df002701f6de26248661f6835bbe296a47bf73990135c7d07ce741b9623b"}, - {file = "pydantic-2.11.7.tar.gz", hash = "sha256:d989c3c6cb79469287b1569f7447a17848c998458d49ebe294e975b9baf0f0db"}, + {file = "pydantic-2.12.5-py3-none-any.whl", hash = "sha256:e561593fccf61e8a20fc46dfc2dfe075b8be7d0188df33f221ad1f0139180f9d"}, + {file = "pydantic-2.12.5.tar.gz", hash = "sha256:4d351024c75c0f085a9febbb665ce8c0c6ec5d30e903bdb6394b7ede26aebb49"}, ] [package.dependencies] annotated-types = ">=0.6.0" -pydantic-core = "2.33.2" -typing-extensions = ">=4.12.2" -typing-inspection = ">=0.4.0" +pydantic-core = "2.41.5" +typing-extensions = ">=4.14.1" +typing-inspection = ">=0.4.2" [package.extras] email = ["email-validator (>=2.0.0)"] @@ -3157,115 +3159,138 @@ timezone = ["tzdata ; python_version >= \"3.9\" and platform_system == \"Windows [[package]] name = "pydantic-core" -version = "2.33.2" +version = "2.41.5" description = "Core functionality for Pydantic validation and serialization" optional = false python-versions = ">=3.9" groups = ["main"] -files = [ - {file = "pydantic_core-2.33.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:2b3d326aaef0c0399d9afffeb6367d5e26ddc24d351dbc9c636840ac355dc5d8"}, - {file = "pydantic_core-2.33.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0e5b2671f05ba48b94cb90ce55d8bdcaaedb8ba00cc5359f6810fc918713983d"}, - {file = "pydantic_core-2.33.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0069c9acc3f3981b9ff4cdfaf088e98d83440a4c7ea1bc07460af3d4dc22e72d"}, - {file = "pydantic_core-2.33.2-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d53b22f2032c42eaaf025f7c40c2e3b94568ae077a606f006d206a463bc69572"}, - {file = "pydantic_core-2.33.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0405262705a123b7ce9f0b92f123334d67b70fd1f20a9372b907ce1080c7ba02"}, - {file = "pydantic_core-2.33.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4b25d91e288e2c4e0662b8038a28c6a07eaac3e196cfc4ff69de4ea3db992a1b"}, - {file = "pydantic_core-2.33.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6bdfe4b3789761f3bcb4b1ddf33355a71079858958e3a552f16d5af19768fef2"}, - {file = "pydantic_core-2.33.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:efec8db3266b76ef9607c2c4c419bdb06bf335ae433b80816089ea7585816f6a"}, - {file = "pydantic_core-2.33.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:031c57d67ca86902726e0fae2214ce6770bbe2f710dc33063187a68744a5ecac"}, - {file = "pydantic_core-2.33.2-cp310-cp310-musllinux_1_1_armv7l.whl", hash = "sha256:f8de619080e944347f5f20de29a975c2d815d9ddd8be9b9b7268e2e3ef68605a"}, - {file = "pydantic_core-2.33.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:73662edf539e72a9440129f231ed3757faab89630d291b784ca99237fb94db2b"}, - {file = "pydantic_core-2.33.2-cp310-cp310-win32.whl", hash = "sha256:0a39979dcbb70998b0e505fb1556a1d550a0781463ce84ebf915ba293ccb7e22"}, - {file = "pydantic_core-2.33.2-cp310-cp310-win_amd64.whl", hash = "sha256:b0379a2b24882fef529ec3b4987cb5d003b9cda32256024e6fe1586ac45fc640"}, - {file = "pydantic_core-2.33.2-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:4c5b0a576fb381edd6d27f0a85915c6daf2f8138dc5c267a57c08a62900758c7"}, - {file = "pydantic_core-2.33.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e799c050df38a639db758c617ec771fd8fb7a5f8eaaa4b27b101f266b216a246"}, - {file = "pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dc46a01bf8d62f227d5ecee74178ffc448ff4e5197c756331f71efcc66dc980f"}, - {file = "pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a144d4f717285c6d9234a66778059f33a89096dfb9b39117663fd8413d582dcc"}, - {file = "pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:73cf6373c21bc80b2e0dc88444f41ae60b2f070ed02095754eb5a01df12256de"}, - {file = "pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3dc625f4aa79713512d1976fe9f0bc99f706a9dee21dfd1810b4bbbf228d0e8a"}, - {file = "pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:881b21b5549499972441da4758d662aeea93f1923f953e9cbaff14b8b9565aef"}, - {file = "pydantic_core-2.33.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:bdc25f3681f7b78572699569514036afe3c243bc3059d3942624e936ec93450e"}, - {file = "pydantic_core-2.33.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:fe5b32187cbc0c862ee201ad66c30cf218e5ed468ec8dc1cf49dec66e160cc4d"}, - {file = "pydantic_core-2.33.2-cp311-cp311-musllinux_1_1_armv7l.whl", hash = "sha256:bc7aee6f634a6f4a95676fcb5d6559a2c2a390330098dba5e5a5f28a2e4ada30"}, - {file = "pydantic_core-2.33.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:235f45e5dbcccf6bd99f9f472858849f73d11120d76ea8707115415f8e5ebebf"}, - {file = "pydantic_core-2.33.2-cp311-cp311-win32.whl", hash = "sha256:6368900c2d3ef09b69cb0b913f9f8263b03786e5b2a387706c5afb66800efd51"}, - {file = "pydantic_core-2.33.2-cp311-cp311-win_amd64.whl", hash = "sha256:1e063337ef9e9820c77acc768546325ebe04ee38b08703244c1309cccc4f1bab"}, - {file = "pydantic_core-2.33.2-cp311-cp311-win_arm64.whl", hash = "sha256:6b99022f1d19bc32a4c2a0d544fc9a76e3be90f0b3f4af413f87d38749300e65"}, - {file = "pydantic_core-2.33.2-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:a7ec89dc587667f22b6a0b6579c249fca9026ce7c333fc142ba42411fa243cdc"}, - {file = "pydantic_core-2.33.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3c6db6e52c6d70aa0d00d45cdb9b40f0433b96380071ea80b09277dba021ddf7"}, - {file = "pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e61206137cbc65e6d5256e1166f88331d3b6238e082d9f74613b9b765fb9025"}, - {file = "pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:eb8c529b2819c37140eb51b914153063d27ed88e3bdc31b71198a198e921e011"}, - {file = "pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c52b02ad8b4e2cf14ca7b3d918f3eb0ee91e63b3167c32591e57c4317e134f8f"}, - {file = "pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:96081f1605125ba0855dfda83f6f3df5ec90c61195421ba72223de35ccfb2f88"}, - {file = "pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f57a69461af2a5fa6e6bbd7a5f60d3b7e6cebb687f55106933188e79ad155c1"}, - {file = "pydantic_core-2.33.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:572c7e6c8bb4774d2ac88929e3d1f12bc45714ae5ee6d9a788a9fb35e60bb04b"}, - {file = "pydantic_core-2.33.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:db4b41f9bd95fbe5acd76d89920336ba96f03e149097365afe1cb092fceb89a1"}, - {file = "pydantic_core-2.33.2-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:fa854f5cf7e33842a892e5c73f45327760bc7bc516339fda888c75ae60edaeb6"}, - {file = "pydantic_core-2.33.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:5f483cfb75ff703095c59e365360cb73e00185e01aaea067cd19acffd2ab20ea"}, - {file = "pydantic_core-2.33.2-cp312-cp312-win32.whl", hash = "sha256:9cb1da0f5a471435a7bc7e439b8a728e8b61e59784b2af70d7c169f8dd8ae290"}, - {file = "pydantic_core-2.33.2-cp312-cp312-win_amd64.whl", hash = "sha256:f941635f2a3d96b2973e867144fde513665c87f13fe0e193c158ac51bfaaa7b2"}, - {file = "pydantic_core-2.33.2-cp312-cp312-win_arm64.whl", hash = "sha256:cca3868ddfaccfbc4bfb1d608e2ccaaebe0ae628e1416aeb9c4d88c001bb45ab"}, - {file = "pydantic_core-2.33.2-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:1082dd3e2d7109ad8b7da48e1d4710c8d06c253cbc4a27c1cff4fbcaa97a9e3f"}, - {file = "pydantic_core-2.33.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f517ca031dfc037a9c07e748cefd8d96235088b83b4f4ba8939105d20fa1dcd6"}, - {file = "pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a9f2c9dd19656823cb8250b0724ee9c60a82f3cdf68a080979d13092a3b0fef"}, - {file = "pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2b0a451c263b01acebe51895bfb0e1cc842a5c666efe06cdf13846c7418caa9a"}, - {file = "pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ea40a64d23faa25e62a70ad163571c0b342b8bf66d5fa612ac0dec4f069d916"}, - {file = "pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0fb2d542b4d66f9470e8065c5469ec676978d625a8b7a363f07d9a501a9cb36a"}, - {file = "pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9fdac5d6ffa1b5a83bca06ffe7583f5576555e6c8b3a91fbd25ea7780f825f7d"}, - {file = "pydantic_core-2.33.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:04a1a413977ab517154eebb2d326da71638271477d6ad87a769102f7c2488c56"}, - {file = "pydantic_core-2.33.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:c8e7af2f4e0194c22b5b37205bfb293d166a7344a5b0d0eaccebc376546d77d5"}, - {file = "pydantic_core-2.33.2-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:5c92edd15cd58b3c2d34873597a1e20f13094f59cf88068adb18947df5455b4e"}, - {file = "pydantic_core-2.33.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:65132b7b4a1c0beded5e057324b7e16e10910c106d43675d9bd87d4f38dde162"}, - {file = "pydantic_core-2.33.2-cp313-cp313-win32.whl", hash = "sha256:52fb90784e0a242bb96ec53f42196a17278855b0f31ac7c3cc6f5c1ec4811849"}, - {file = "pydantic_core-2.33.2-cp313-cp313-win_amd64.whl", hash = "sha256:c083a3bdd5a93dfe480f1125926afcdbf2917ae714bdb80b36d34318b2bec5d9"}, - {file = "pydantic_core-2.33.2-cp313-cp313-win_arm64.whl", hash = "sha256:e80b087132752f6b3d714f041ccf74403799d3b23a72722ea2e6ba2e892555b9"}, - {file = "pydantic_core-2.33.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:61c18fba8e5e9db3ab908620af374db0ac1baa69f0f32df4f61ae23f15e586ac"}, - {file = "pydantic_core-2.33.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95237e53bb015f67b63c91af7518a62a8660376a6a0db19b89acc77a4d6199f5"}, - {file = "pydantic_core-2.33.2-cp313-cp313t-win_amd64.whl", hash = "sha256:c2fc0a768ef76c15ab9238afa6da7f69895bb5d1ee83aeea2e3509af4472d0b9"}, - {file = "pydantic_core-2.33.2-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:a2b911a5b90e0374d03813674bf0a5fbbb7741570dcd4b4e85a2e48d17def29d"}, - {file = "pydantic_core-2.33.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:6fa6dfc3e4d1f734a34710f391ae822e0a8eb8559a85c6979e14e65ee6ba2954"}, - {file = "pydantic_core-2.33.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c54c939ee22dc8e2d545da79fc5381f1c020d6d3141d3bd747eab59164dc89fb"}, - {file = "pydantic_core-2.33.2-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:53a57d2ed685940a504248187d5685e49eb5eef0f696853647bf37c418c538f7"}, - {file = "pydantic_core-2.33.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:09fb9dd6571aacd023fe6aaca316bd01cf60ab27240d7eb39ebd66a3a15293b4"}, - {file = "pydantic_core-2.33.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0e6116757f7959a712db11f3e9c0a99ade00a5bbedae83cb801985aa154f071b"}, - {file = "pydantic_core-2.33.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8d55ab81c57b8ff8548c3e4947f119551253f4e3787a7bbc0b6b3ca47498a9d3"}, - {file = "pydantic_core-2.33.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c20c462aa4434b33a2661701b861604913f912254e441ab8d78d30485736115a"}, - {file = "pydantic_core-2.33.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:44857c3227d3fb5e753d5fe4a3420d6376fa594b07b621e220cd93703fe21782"}, - {file = "pydantic_core-2.33.2-cp39-cp39-musllinux_1_1_armv7l.whl", hash = "sha256:eb9b459ca4df0e5c87deb59d37377461a538852765293f9e6ee834f0435a93b9"}, - {file = "pydantic_core-2.33.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:9fcd347d2cc5c23b06de6d3b7b8275be558a0c90549495c699e379a80bf8379e"}, - {file = "pydantic_core-2.33.2-cp39-cp39-win32.whl", hash = "sha256:83aa99b1285bc8f038941ddf598501a86f1536789740991d7d8756e34f1e74d9"}, - {file = "pydantic_core-2.33.2-cp39-cp39-win_amd64.whl", hash = "sha256:f481959862f57f29601ccced557cc2e817bce7533ab8e01a797a48b49c9692b3"}, - {file = "pydantic_core-2.33.2-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:5c4aa4e82353f65e548c476b37e64189783aa5384903bfea4f41580f255fddfa"}, - {file = "pydantic_core-2.33.2-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:d946c8bf0d5c24bf4fe333af284c59a19358aa3ec18cb3dc4370080da1e8ad29"}, - {file = "pydantic_core-2.33.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:87b31b6846e361ef83fedb187bb5b4372d0da3f7e28d85415efa92d6125d6e6d"}, - {file = "pydantic_core-2.33.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa9d91b338f2df0508606f7009fde642391425189bba6d8c653afd80fd6bb64e"}, - {file = "pydantic_core-2.33.2-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2058a32994f1fde4ca0480ab9d1e75a0e8c87c22b53a3ae66554f9af78f2fe8c"}, - {file = "pydantic_core-2.33.2-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:0e03262ab796d986f978f79c943fc5f620381be7287148b8010b4097f79a39ec"}, - {file = "pydantic_core-2.33.2-pp310-pypy310_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:1a8695a8d00c73e50bff9dfda4d540b7dee29ff9b8053e38380426a85ef10052"}, - {file = "pydantic_core-2.33.2-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:fa754d1850735a0b0e03bcffd9d4b4343eb417e47196e4485d9cca326073a42c"}, - {file = "pydantic_core-2.33.2-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:a11c8d26a50bfab49002947d3d237abe4d9e4b5bdc8846a63537b6488e197808"}, - {file = "pydantic_core-2.33.2-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:dd14041875d09cc0f9308e37a6f8b65f5585cf2598a53aa0123df8b129d481f8"}, - {file = "pydantic_core-2.33.2-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:d87c561733f66531dced0da6e864f44ebf89a8fba55f31407b00c2f7f9449593"}, - {file = "pydantic_core-2.33.2-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2f82865531efd18d6e07a04a17331af02cb7a651583c418df8266f17a63c6612"}, - {file = "pydantic_core-2.33.2-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2bfb5112df54209d820d7bf9317c7a6c9025ea52e49f46b6a2060104bba37de7"}, - {file = "pydantic_core-2.33.2-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:64632ff9d614e5eecfb495796ad51b0ed98c453e447a76bcbeeb69615079fc7e"}, - {file = "pydantic_core-2.33.2-pp311-pypy311_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:f889f7a40498cc077332c7ab6b4608d296d852182211787d4f3ee377aaae66e8"}, - {file = "pydantic_core-2.33.2-pp311-pypy311_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:de4b83bb311557e439b9e186f733f6c645b9417c84e2eb8203f3f820a4b988bf"}, - {file = "pydantic_core-2.33.2-pp311-pypy311_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:82f68293f055f51b51ea42fafc74b6aad03e70e191799430b90c13d643059ebb"}, - {file = "pydantic_core-2.33.2-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:329467cecfb529c925cf2bbd4d60d2c509bc2fb52a20c1045bf09bb70971a9c1"}, - {file = "pydantic_core-2.33.2-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:87acbfcf8e90ca885206e98359d7dca4bcbb35abdc0ff66672a293e1d7a19101"}, - {file = "pydantic_core-2.33.2-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:7f92c15cd1e97d4b12acd1cc9004fa092578acfa57b67ad5e43a197175d01a64"}, - {file = "pydantic_core-2.33.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d3f26877a748dc4251cfcfda9dfb5f13fcb034f5308388066bcfe9031b63ae7d"}, - {file = "pydantic_core-2.33.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dac89aea9af8cd672fa7b510e7b8c33b0bba9a43186680550ccf23020f32d535"}, - {file = "pydantic_core-2.33.2-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:970919794d126ba8645f3837ab6046fb4e72bbc057b3709144066204c19a455d"}, - {file = "pydantic_core-2.33.2-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:3eb3fe62804e8f859c49ed20a8451342de53ed764150cb14ca71357c765dc2a6"}, - {file = "pydantic_core-2.33.2-pp39-pypy39_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:3abcd9392a36025e3bd55f9bd38d908bd17962cc49bc6da8e7e96285336e2bca"}, - {file = "pydantic_core-2.33.2-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:3a1c81334778f9e3af2f8aeb7a960736e5cab1dfebfb26aabca09afd2906c039"}, - {file = "pydantic_core-2.33.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:2807668ba86cb38c6817ad9bc66215ab8584d1d304030ce4f0887336f28a5e27"}, - {file = "pydantic_core-2.33.2.tar.gz", hash = "sha256:7cb8bc3605c29176e1b105350d2e6474142d7c1bd1d9327c4a9bdb46bf827acc"}, +markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" +files = [ + {file = "pydantic_core-2.41.5-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:77b63866ca88d804225eaa4af3e664c5faf3568cea95360d21f4725ab6e07146"}, + {file = "pydantic_core-2.41.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:dfa8a0c812ac681395907e71e1274819dec685fec28273a28905df579ef137e2"}, + {file = "pydantic_core-2.41.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5921a4d3ca3aee735d9fd163808f5e8dd6c6972101e4adbda9a4667908849b97"}, + {file = "pydantic_core-2.41.5-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e25c479382d26a2a41b7ebea1043564a937db462816ea07afa8a44c0866d52f9"}, + {file = "pydantic_core-2.41.5-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f547144f2966e1e16ae626d8ce72b4cfa0caedc7fa28052001c94fb2fcaa1c52"}, + {file = "pydantic_core-2.41.5-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6f52298fbd394f9ed112d56f3d11aabd0d5bd27beb3084cc3d8ad069483b8941"}, + {file = "pydantic_core-2.41.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:100baa204bb412b74fe285fb0f3a385256dad1d1879f0a5cb1499ed2e83d132a"}, + {file = "pydantic_core-2.41.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:05a2c8852530ad2812cb7914dc61a1125dc4e06252ee98e5638a12da6cc6fb6c"}, + {file = "pydantic_core-2.41.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:29452c56df2ed968d18d7e21f4ab0ac55e71dc59524872f6fc57dcf4a3249ed2"}, + {file = "pydantic_core-2.41.5-cp310-cp310-musllinux_1_1_armv7l.whl", hash = "sha256:d5160812ea7a8a2ffbe233d8da666880cad0cbaf5d4de74ae15c313213d62556"}, + {file = "pydantic_core-2.41.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:df3959765b553b9440adfd3c795617c352154e497a4eaf3752555cfb5da8fc49"}, + {file = "pydantic_core-2.41.5-cp310-cp310-win32.whl", hash = "sha256:1f8d33a7f4d5a7889e60dc39856d76d09333d8a6ed0f5f1190635cbec70ec4ba"}, + {file = "pydantic_core-2.41.5-cp310-cp310-win_amd64.whl", hash = "sha256:62de39db01b8d593e45871af2af9e497295db8d73b085f6bfd0b18c83c70a8f9"}, + {file = "pydantic_core-2.41.5-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:a3a52f6156e73e7ccb0f8cced536adccb7042be67cb45f9562e12b319c119da6"}, + {file = "pydantic_core-2.41.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7f3bf998340c6d4b0c9a2f02d6a400e51f123b59565d74dc60d252ce888c260b"}, + {file = "pydantic_core-2.41.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:378bec5c66998815d224c9ca994f1e14c0c21cb95d2f52b6021cc0b2a58f2a5a"}, + {file = "pydantic_core-2.41.5-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e7b576130c69225432866fe2f4a469a85a54ade141d96fd396dffcf607b558f8"}, + {file = "pydantic_core-2.41.5-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6cb58b9c66f7e4179a2d5e0f849c48eff5c1fca560994d6eb6543abf955a149e"}, + {file = "pydantic_core-2.41.5-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:88942d3a3dff3afc8288c21e565e476fc278902ae4d6d134f1eeda118cc830b1"}, + {file = "pydantic_core-2.41.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f31d95a179f8d64d90f6831d71fa93290893a33148d890ba15de25642c5d075b"}, + {file = "pydantic_core-2.41.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c1df3d34aced70add6f867a8cf413e299177e0c22660cc767218373d0779487b"}, + {file = "pydantic_core-2.41.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:4009935984bd36bd2c774e13f9a09563ce8de4abaa7226f5108262fa3e637284"}, + {file = "pydantic_core-2.41.5-cp311-cp311-musllinux_1_1_armv7l.whl", hash = "sha256:34a64bc3441dc1213096a20fe27e8e128bd3ff89921706e83c0b1ac971276594"}, + {file = "pydantic_core-2.41.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:c9e19dd6e28fdcaa5a1de679aec4141f691023916427ef9bae8584f9c2fb3b0e"}, + {file = "pydantic_core-2.41.5-cp311-cp311-win32.whl", hash = "sha256:2c010c6ded393148374c0f6f0bf89d206bf3217f201faa0635dcd56bd1520f6b"}, + {file = "pydantic_core-2.41.5-cp311-cp311-win_amd64.whl", hash = "sha256:76ee27c6e9c7f16f47db7a94157112a2f3a00e958bc626e2f4ee8bec5c328fbe"}, + {file = "pydantic_core-2.41.5-cp311-cp311-win_arm64.whl", hash = "sha256:4bc36bbc0b7584de96561184ad7f012478987882ebf9f9c389b23f432ea3d90f"}, + {file = "pydantic_core-2.41.5-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:f41a7489d32336dbf2199c8c0a215390a751c5b014c2c1c5366e817202e9cdf7"}, + {file = "pydantic_core-2.41.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:070259a8818988b9a84a449a2a7337c7f430a22acc0859c6b110aa7212a6d9c0"}, + {file = "pydantic_core-2.41.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e96cea19e34778f8d59fe40775a7a574d95816eb150850a85a7a4c8f4b94ac69"}, + {file = "pydantic_core-2.41.5-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ed2e99c456e3fadd05c991f8f437ef902e00eedf34320ba2b0842bd1c3ca3a75"}, + {file = "pydantic_core-2.41.5-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:65840751b72fbfd82c3c640cff9284545342a4f1eb1586ad0636955b261b0b05"}, + {file = "pydantic_core-2.41.5-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e536c98a7626a98feb2d3eaf75944ef6f3dbee447e1f841eae16f2f0a72d8ddc"}, + {file = "pydantic_core-2.41.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eceb81a8d74f9267ef4081e246ffd6d129da5d87e37a77c9bde550cb04870c1c"}, + {file = "pydantic_core-2.41.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d38548150c39b74aeeb0ce8ee1d8e82696f4a4e16ddc6de7b1d8823f7de4b9b5"}, + {file = "pydantic_core-2.41.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:c23e27686783f60290e36827f9c626e63154b82b116d7fe9adba1fda36da706c"}, + {file = "pydantic_core-2.41.5-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:482c982f814460eabe1d3bb0adfdc583387bd4691ef00b90575ca0d2b6fe2294"}, + {file = "pydantic_core-2.41.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:bfea2a5f0b4d8d43adf9d7b8bf019fb46fdd10a2e5cde477fbcb9d1fa08c68e1"}, + {file = "pydantic_core-2.41.5-cp312-cp312-win32.whl", hash = "sha256:b74557b16e390ec12dca509bce9264c3bbd128f8a2c376eaa68003d7f327276d"}, + {file = "pydantic_core-2.41.5-cp312-cp312-win_amd64.whl", hash = "sha256:1962293292865bca8e54702b08a4f26da73adc83dd1fcf26fbc875b35d81c815"}, + {file = "pydantic_core-2.41.5-cp312-cp312-win_arm64.whl", hash = "sha256:1746d4a3d9a794cacae06a5eaaccb4b8643a131d45fbc9af23e353dc0a5ba5c3"}, + {file = "pydantic_core-2.41.5-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:941103c9be18ac8daf7b7adca8228f8ed6bb7a1849020f643b3a14d15b1924d9"}, + {file = "pydantic_core-2.41.5-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:112e305c3314f40c93998e567879e887a3160bb8689ef3d2c04b6cc62c33ac34"}, + {file = "pydantic_core-2.41.5-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0cbaad15cb0c90aa221d43c00e77bb33c93e8d36e0bf74760cd00e732d10a6a0"}, + {file = "pydantic_core-2.41.5-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:03ca43e12fab6023fc79d28ca6b39b05f794ad08ec2feccc59a339b02f2b3d33"}, + {file = "pydantic_core-2.41.5-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dc799088c08fa04e43144b164feb0c13f9a0bc40503f8df3e9fde58a3c0c101e"}, + {file = "pydantic_core-2.41.5-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:97aeba56665b4c3235a0e52b2c2f5ae9cd071b8a8310ad27bddb3f7fb30e9aa2"}, + {file = "pydantic_core-2.41.5-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:406bf18d345822d6c21366031003612b9c77b3e29ffdb0f612367352aab7d586"}, + {file = "pydantic_core-2.41.5-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b93590ae81f7010dbe380cdeab6f515902ebcbefe0b9327cc4804d74e93ae69d"}, + {file = "pydantic_core-2.41.5-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:01a3d0ab748ee531f4ea6c3e48ad9dac84ddba4b0d82291f87248f2f9de8d740"}, + {file = "pydantic_core-2.41.5-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:6561e94ba9dacc9c61bce40e2d6bdc3bfaa0259d3ff36ace3b1e6901936d2e3e"}, + {file = "pydantic_core-2.41.5-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:915c3d10f81bec3a74fbd4faebe8391013ba61e5a1a8d48c4455b923bdda7858"}, + {file = "pydantic_core-2.41.5-cp313-cp313-win32.whl", hash = "sha256:650ae77860b45cfa6e2cdafc42618ceafab3a2d9a3811fcfbd3bbf8ac3c40d36"}, + {file = "pydantic_core-2.41.5-cp313-cp313-win_amd64.whl", hash = "sha256:79ec52ec461e99e13791ec6508c722742ad745571f234ea6255bed38c6480f11"}, + {file = "pydantic_core-2.41.5-cp313-cp313-win_arm64.whl", hash = "sha256:3f84d5c1b4ab906093bdc1ff10484838aca54ef08de4afa9de0f5f14d69639cd"}, + {file = "pydantic_core-2.41.5-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:3f37a19d7ebcdd20b96485056ba9e8b304e27d9904d233d7b1015db320e51f0a"}, + {file = "pydantic_core-2.41.5-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:1d1d9764366c73f996edd17abb6d9d7649a7eb690006ab6adbda117717099b14"}, + {file = "pydantic_core-2.41.5-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:25e1c2af0fce638d5f1988b686f3b3ea8cd7de5f244ca147c777769e798a9cd1"}, + {file = "pydantic_core-2.41.5-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:506d766a8727beef16b7adaeb8ee6217c64fc813646b424d0804d67c16eddb66"}, + {file = "pydantic_core-2.41.5-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4819fa52133c9aa3c387b3328f25c1facc356491e6135b459f1de698ff64d869"}, + {file = "pydantic_core-2.41.5-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2b761d210c9ea91feda40d25b4efe82a1707da2ef62901466a42492c028553a2"}, + {file = "pydantic_core-2.41.5-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:22f0fb8c1c583a3b6f24df2470833b40207e907b90c928cc8d3594b76f874375"}, + {file = "pydantic_core-2.41.5-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2782c870e99878c634505236d81e5443092fba820f0373997ff75f90f68cd553"}, + {file = "pydantic_core-2.41.5-cp314-cp314-musllinux_1_1_aarch64.whl", hash = "sha256:0177272f88ab8312479336e1d777f6b124537d47f2123f89cb37e0accea97f90"}, + {file = "pydantic_core-2.41.5-cp314-cp314-musllinux_1_1_armv7l.whl", hash = "sha256:63510af5e38f8955b8ee5687740d6ebf7c2a0886d15a6d65c32814613681bc07"}, + {file = "pydantic_core-2.41.5-cp314-cp314-musllinux_1_1_x86_64.whl", hash = "sha256:e56ba91f47764cc14f1daacd723e3e82d1a89d783f0f5afe9c364b8bb491ccdb"}, + {file = "pydantic_core-2.41.5-cp314-cp314-win32.whl", hash = "sha256:aec5cf2fd867b4ff45b9959f8b20ea3993fc93e63c7363fe6851424c8a7e7c23"}, + {file = "pydantic_core-2.41.5-cp314-cp314-win_amd64.whl", hash = "sha256:8e7c86f27c585ef37c35e56a96363ab8de4e549a95512445b85c96d3e2f7c1bf"}, + {file = "pydantic_core-2.41.5-cp314-cp314-win_arm64.whl", hash = "sha256:e672ba74fbc2dc8eea59fb6d4aed6845e6905fc2a8afe93175d94a83ba2a01a0"}, + {file = "pydantic_core-2.41.5-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:8566def80554c3faa0e65ac30ab0932b9e3a5cd7f8323764303d468e5c37595a"}, + {file = "pydantic_core-2.41.5-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:b80aa5095cd3109962a298ce14110ae16b8c1aece8b72f9dafe81cf597ad80b3"}, + {file = "pydantic_core-2.41.5-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3006c3dd9ba34b0c094c544c6006cc79e87d8612999f1a5d43b769b89181f23c"}, + {file = "pydantic_core-2.41.5-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:72f6c8b11857a856bcfa48c86f5368439f74453563f951e473514579d44aa612"}, + {file = "pydantic_core-2.41.5-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5cb1b2f9742240e4bb26b652a5aeb840aa4b417c7748b6f8387927bc6e45e40d"}, + {file = "pydantic_core-2.41.5-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bd3d54f38609ff308209bd43acea66061494157703364ae40c951f83ba99a1a9"}, + {file = "pydantic_core-2.41.5-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2ff4321e56e879ee8d2a879501c8e469414d948f4aba74a2d4593184eb326660"}, + {file = "pydantic_core-2.41.5-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d0d2568a8c11bf8225044aa94409e21da0cb09dcdafe9ecd10250b2baad531a9"}, + {file = "pydantic_core-2.41.5-cp314-cp314t-musllinux_1_1_aarch64.whl", hash = "sha256:a39455728aabd58ceabb03c90e12f71fd30fa69615760a075b9fec596456ccc3"}, + {file = "pydantic_core-2.41.5-cp314-cp314t-musllinux_1_1_armv7l.whl", hash = "sha256:239edca560d05757817c13dc17c50766136d21f7cd0fac50295499ae24f90fdf"}, + {file = "pydantic_core-2.41.5-cp314-cp314t-musllinux_1_1_x86_64.whl", hash = "sha256:2a5e06546e19f24c6a96a129142a75cee553cc018ffee48a460059b1185f4470"}, + {file = "pydantic_core-2.41.5-cp314-cp314t-win32.whl", hash = "sha256:b4ececa40ac28afa90871c2cc2b9ffd2ff0bf749380fbdf57d165fd23da353aa"}, + {file = "pydantic_core-2.41.5-cp314-cp314t-win_amd64.whl", hash = "sha256:80aa89cad80b32a912a65332f64a4450ed00966111b6615ca6816153d3585a8c"}, + {file = "pydantic_core-2.41.5-cp314-cp314t-win_arm64.whl", hash = "sha256:35b44f37a3199f771c3eaa53051bc8a70cd7b54f333531c59e29fd4db5d15008"}, + {file = "pydantic_core-2.41.5-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:8bfeaf8735be79f225f3fefab7f941c712aaca36f1128c9d7e2352ee1aa87bdf"}, + {file = "pydantic_core-2.41.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:346285d28e4c8017da95144c7f3acd42740d637ff41946af5ce6e5e420502dd5"}, + {file = "pydantic_core-2.41.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a75dafbf87d6276ddc5b2bf6fae5254e3d0876b626eb24969a574fff9149ee5d"}, + {file = "pydantic_core-2.41.5-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7b93a4d08587e2b7e7882de461e82b6ed76d9026ce91ca7915e740ecc7855f60"}, + {file = "pydantic_core-2.41.5-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e8465ab91a4bd96d36dde3263f06caa6a8a6019e4113f24dc753d79a8b3a3f82"}, + {file = "pydantic_core-2.41.5-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:299e0a22e7ae2b85c1a57f104538b2656e8ab1873511fd718a1c1c6f149b77b5"}, + {file = "pydantic_core-2.41.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:707625ef0983fcfb461acfaf14de2067c5942c6bb0f3b4c99158bed6fedd3cf3"}, + {file = "pydantic_core-2.41.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f41eb9797986d6ebac5e8edff36d5cef9de40def462311b3eb3eeded1431e425"}, + {file = "pydantic_core-2.41.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0384e2e1021894b1ff5a786dbf94771e2986ebe2869533874d7e43bc79c6f504"}, + {file = "pydantic_core-2.41.5-cp39-cp39-musllinux_1_1_armv7l.whl", hash = "sha256:f0cd744688278965817fd0839c4a4116add48d23890d468bc436f78beb28abf5"}, + {file = "pydantic_core-2.41.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:753e230374206729bf0a807954bcc6c150d3743928a73faffee51ac6557a03c3"}, + {file = "pydantic_core-2.41.5-cp39-cp39-win32.whl", hash = "sha256:873e0d5b4fb9b89ef7c2d2a963ea7d02879d9da0da8d9d4933dee8ee86a8b460"}, + {file = "pydantic_core-2.41.5-cp39-cp39-win_amd64.whl", hash = "sha256:e4f4a984405e91527a0d62649ee21138f8e3d0ef103be488c1dc11a80d7f184b"}, + {file = "pydantic_core-2.41.5-graalpy311-graalpy242_311_native-macosx_10_12_x86_64.whl", hash = "sha256:b96d5f26b05d03cc60f11a7761a5ded1741da411e7fe0909e27a5e6a0cb7b034"}, + {file = "pydantic_core-2.41.5-graalpy311-graalpy242_311_native-macosx_11_0_arm64.whl", hash = "sha256:634e8609e89ceecea15e2d61bc9ac3718caaaa71963717bf3c8f38bfde64242c"}, + {file = "pydantic_core-2.41.5-graalpy311-graalpy242_311_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:93e8740d7503eb008aa2df04d3b9735f845d43ae845e6dcd2be0b55a2da43cd2"}, + {file = "pydantic_core-2.41.5-graalpy311-graalpy242_311_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f15489ba13d61f670dcc96772e733aad1a6f9c429cc27574c6cdaed82d0146ad"}, + {file = "pydantic_core-2.41.5-graalpy312-graalpy250_312_native-macosx_10_12_x86_64.whl", hash = "sha256:7da7087d756b19037bc2c06edc6c170eeef3c3bafcb8f532ff17d64dc427adfd"}, + {file = "pydantic_core-2.41.5-graalpy312-graalpy250_312_native-macosx_11_0_arm64.whl", hash = "sha256:aabf5777b5c8ca26f7824cb4a120a740c9588ed58df9b2d196ce92fba42ff8dc"}, + {file = "pydantic_core-2.41.5-graalpy312-graalpy250_312_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c007fe8a43d43b3969e8469004e9845944f1a80e6acd47c150856bb87f230c56"}, + {file = "pydantic_core-2.41.5-graalpy312-graalpy250_312_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:76d0819de158cd855d1cbb8fcafdf6f5cf1eb8e470abe056d5d161106e38062b"}, + {file = "pydantic_core-2.41.5-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:b5819cd790dbf0c5eb9f82c73c16b39a65dd6dd4d1439dcdea7816ec9adddab8"}, + {file = "pydantic_core-2.41.5-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:5a4e67afbc95fa5c34cf27d9089bca7fcab4e51e57278d710320a70b956d1b9a"}, + {file = "pydantic_core-2.41.5-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ece5c59f0ce7d001e017643d8d24da587ea1f74f6993467d85ae8a5ef9d4f42b"}, + {file = "pydantic_core-2.41.5-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:16f80f7abe3351f8ea6858914ddc8c77e02578544a0ebc15b4c2e1a0e813b0b2"}, + {file = "pydantic_core-2.41.5-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:33cb885e759a705b426baada1fe68cbb0a2e68e34c5d0d0289a364cf01709093"}, + {file = "pydantic_core-2.41.5-pp310-pypy310_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:c8d8b4eb992936023be7dee581270af5c6e0697a8559895f527f5b7105ecd36a"}, + {file = "pydantic_core-2.41.5-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:242a206cd0318f95cd21bdacff3fcc3aab23e79bba5cac3db5a841c9ef9c6963"}, + {file = "pydantic_core-2.41.5-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:d3a978c4f57a597908b7e697229d996d77a6d3c94901e9edee593adada95ce1a"}, + {file = "pydantic_core-2.41.5-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:b2379fa7ed44ddecb5bfe4e48577d752db9fc10be00a6b7446e9663ba143de26"}, + {file = "pydantic_core-2.41.5-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:266fb4cbf5e3cbd0b53669a6d1b039c45e3ce651fd5442eff4d07c2cc8d66808"}, + {file = "pydantic_core-2.41.5-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:58133647260ea01e4d0500089a8c4f07bd7aa6ce109682b1426394988d8aaacc"}, + {file = "pydantic_core-2.41.5-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:287dad91cfb551c363dc62899a80e9e14da1f0e2b6ebde82c806612ca2a13ef1"}, + {file = "pydantic_core-2.41.5-pp311-pypy311_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:03b77d184b9eb40240ae9fd676ca364ce1085f203e1b1256f8ab9984dca80a84"}, + {file = "pydantic_core-2.41.5-pp311-pypy311_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:a668ce24de96165bb239160b3d854943128f4334822900534f2fe947930e5770"}, + {file = "pydantic_core-2.41.5-pp311-pypy311_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:f14f8f046c14563f8eb3f45f499cc658ab8d10072961e07225e507adb700e93f"}, + {file = "pydantic_core-2.41.5-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:56121965f7a4dc965bff783d70b907ddf3d57f6eba29b6d2e5dabfaf07799c51"}, + {file = "pydantic_core-2.41.5.tar.gz", hash = "sha256:08daa51ea16ad373ffd5e7606252cc32f07bc72b28284b6bc9c6df804816476e"}, ] [package.dependencies] -typing-extensions = ">=4.6.0,<4.7.0 || >4.7.0" +typing-extensions = ">=4.14.1" [[package]] name = "pygame" @@ -3274,6 +3299,7 @@ description = "Python Game Development" optional = false python-versions = ">=3.6" groups = ["main"] +markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "pygame-2.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:3e9535cf1af0c6ca38d94e0b492fc41057d7bf05e9bd64d3ed3e216d336d6d11"}, {file = "pygame-2.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:23bd3c3a6d4e8acddee2297d609dbc5953d6ba99b0f0cc5ccc2f567889db3785"}, @@ -3347,14 +3373,15 @@ files = [ [[package]] name = "pygments" -version = "2.19.1" +version = "2.19.2" description = "Pygments is a syntax highlighting package written in Python." optional = false python-versions = ">=3.8" groups = ["main"] +markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ - {file = "pygments-2.19.1-py3-none-any.whl", hash = "sha256:9ea1544ad55cecf4b8242fab6dd35a93bbce657034b0611ee383099054ab6d8c"}, - {file = "pygments-2.19.1.tar.gz", hash = "sha256:61c16d2a8576dc0649d9f39e089b5f02bcd27fba10d8fb4dcc28173f7a45151f"}, + {file = "pygments-2.19.2-py3-none-any.whl", hash = "sha256:86540386c03d588bb81d44bc3928634ff26449851e99741617ecb9037ee5ec0b"}, + {file = "pygments-2.19.2.tar.gz", hash = "sha256:636cb2477cec7f8952536970bc533bc43743542f70392ae026374600add5b887"}, ] [package.extras] @@ -3362,50 +3389,67 @@ windows-terminal = ["colorama (>=0.4.6)"] [[package]] name = "pymoo" -version = "0.6.1.5" +version = "0.6.1.6" description = "Multi-Objective Optimization in Python" optional = false -python-versions = ">=3.9" +python-versions = ">=3.10" groups = ["main"] -files = [ - {file = "pymoo-0.6.1.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:00b5aec75e1ebdb13f537a45b17a33a8fd7ea7437b9bcfdc1a72e56ddf26dd7a"}, - {file = "pymoo-0.6.1.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:dbdfe6b82582831a57bc441bb078b2dfa10654b04dc47208e714e2312c123cb4"}, - {file = "pymoo-0.6.1.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:48c0f930f344c2fd2fd82d7b30dd7e7d2613437c9519c2aaee73cfca7707fc82"}, - {file = "pymoo-0.6.1.5-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:fc9079a7d4d4e392028deb8821a13b77a4ff834727725dbf62cddf44fd0a6e98"}, - {file = "pymoo-0.6.1.5-cp310-cp310-win_amd64.whl", hash = "sha256:874c7f7c6da71520c230aa0f7150c949854d68eef6f57de4d9b8bbd4bc9dfb69"}, - {file = "pymoo-0.6.1.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:2340e9da2e09c423d47cfe553375134702598e43701dc1cbd14c71010b381666"}, - {file = "pymoo-0.6.1.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c0d0a1c349ae6973ea6e0cedf208c760d557be6aca0fb86aff6db155e263dfef"}, - {file = "pymoo-0.6.1.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:07fd159285c5637d5c68d758c3498f13f066635455e2b0f2b3a43b9d44704c75"}, - {file = "pymoo-0.6.1.5-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:04a40005d4c18e194a380e360162063577cc1c206d5ca40f0dd463168e0efaf1"}, - {file = "pymoo-0.6.1.5-cp311-cp311-win_amd64.whl", hash = "sha256:2fde9e9b6ed21b743e466d7a2225cf4aa8fc81408fe104948e70fbb0f5fd53de"}, - {file = "pymoo-0.6.1.5-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:31d9f9522337c6ddfa6fc7670daa9ce4c777c104283824c3e6a2c482d8cde5b8"}, - {file = "pymoo-0.6.1.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:57dd99fd7fff871d42289646ee7899f5f85535a74d4fefcca900a9dde1067c07"}, - {file = "pymoo-0.6.1.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:247099da5cf52092529089cd2b69d6cb959db9081d88789d6d1155778f392041"}, - {file = "pymoo-0.6.1.5-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:db6e562fad10afcfb250de116f958d7606f9ccb95d9a6e84b1c26378384cd736"}, - {file = "pymoo-0.6.1.5-cp312-cp312-win_amd64.whl", hash = "sha256:44a151f83b9e455cdf1a8d63383c378b871c44592b6314167a39be3694a2fb01"}, - {file = "pymoo-0.6.1.5-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:9ddaeb66ce18d473cdfdfd70c7e63e1cd7cddf47879e79bca1f8eab379a74413"}, - {file = "pymoo-0.6.1.5-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:875d06c0f0617ea73eaedb810cc25d55b40b7ddf77db23f59bca51a18eab5079"}, - {file = "pymoo-0.6.1.5-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:da0d2afe9fa6a94fbec3fe970fa9426309b668eefb1eb796f44bfa186cf2c5ad"}, - {file = "pymoo-0.6.1.5-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:0926f8ba84fc1e104b30ccdcf0dd5ed886be209f7de6d729fe115cdd3fdec084"}, - {file = "pymoo-0.6.1.5-cp313-cp313-win_amd64.whl", hash = "sha256:36543ab8690c9afb4a07c795f58018223394b86c5ba0ce6044f7f28c193dfacc"}, - {file = "pymoo-0.6.1.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:dd9e9a898536402e40ca014d01ba78ba78cf464f4a5efa4eca15c30856f815f5"}, - {file = "pymoo-0.6.1.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:92379d2b0e0730822fdf95dcf331a097476bb9188b0fe7082b25e71c403ab2a0"}, - {file = "pymoo-0.6.1.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1274cabeb247ff1238479a60080ebc84a7003da0b6c0b44ab8dc2191717d6a79"}, - {file = "pymoo-0.6.1.5-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:2d8c9fdaf9eca6c5abb961dd6bb763a7e751e4a142aea3d234414f0cc954e70b"}, - {file = "pymoo-0.6.1.5-cp39-cp39-win_amd64.whl", hash = "sha256:54e0e1a448bc967db73dfa46a6c7a4daf1f9c5570e1cf0e8ca4b713ca6f14ea8"}, - {file = "pymoo-0.6.1.5.tar.gz", hash = "sha256:9ce71eaceb2f5cccf8c5af53102cf6d96fa911452addaf48fb971a60621f8364"}, +markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" +files = [ + {file = "pymoo-0.6.1.6-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:f2d48fa7f8f8ea314405ad49a6b7f3dcf8f12c2024e319e2d47ede0937f8b39b"}, + {file = "pymoo-0.6.1.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c8cfd085b74b3f673378109d8d0734d0cab460e3e78c09f691120ac0c2698aad"}, + {file = "pymoo-0.6.1.6-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:49a9cde6ff7cc8497458166e2c14734bf4879c76256412cce0de2af86d2b71a8"}, + {file = "pymoo-0.6.1.6-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:007bdabe638d5cc1ff98d1df096e7cea42f266ecc7b84fc0aac695a20b6f02f6"}, + {file = "pymoo-0.6.1.6-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:62599637724f74820e16d813e6ca86af1733add4251e22b5a6c677df75dec06b"}, + {file = "pymoo-0.6.1.6-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:a4f590fc62021d2583afdc88a2eb5ec878699786585f9ca82edf1fc32557ac96"}, + {file = "pymoo-0.6.1.6-cp310-cp310-win_amd64.whl", hash = "sha256:3b9dcb6959cf2b12c0f1d4ac971fa53074430eb976367b2e7eec0d0301423f31"}, + {file = "pymoo-0.6.1.6-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:e0a42b6f3c26b2725b1edb1d4cfb98e5640bb0638813080ba1aa0daf23b2fd05"}, + {file = "pymoo-0.6.1.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b3e990dea0ad84fa2f89462215e34960579dbb9fef4d880aecb09f50cc18e713"}, + {file = "pymoo-0.6.1.6-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:642308eae98c5b8aee96272e10c6409dd97289ef214ec7383b39425f01549b5f"}, + {file = "pymoo-0.6.1.6-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:50472dfb93b90b4801c63070a4afc786c52f7f56b345f345024b39cd35ff06c4"}, + {file = "pymoo-0.6.1.6-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:38fa5bf507cd7c07eae0286948db79f761b5b4c5d5956a31fd0e5a771c83fa47"}, + {file = "pymoo-0.6.1.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a68fb9d807c1cb6f36e13c24731c496b1e98b9c8810125072f19bd56baa6a4d5"}, + {file = "pymoo-0.6.1.6-cp311-cp311-win_amd64.whl", hash = "sha256:df9520fd7fab0761d5698dd36eabcfb18b5eb970ddf01e10eb30b764e4bb72af"}, + {file = "pymoo-0.6.1.6-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:fd4715b4015b10ad3cf02e5eb9abb57fe4bfa4d3378f9076b76d60c1ddfa46d6"}, + {file = "pymoo-0.6.1.6-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f62fb1e2ba15f22ff5569c6d364dbf9dfe8b3722a114e6bc1df3cc10f8dd5044"}, + {file = "pymoo-0.6.1.6-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:cd2b0fb19ce3e71a177ed3b965ce2d4334ffb6aad8f621c124de6dafa09b7758"}, + {file = "pymoo-0.6.1.6-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:533de86c284bf3b7b6da871e2ae07a914eaa5d3a51f5c4e6d7c055d3471c4467"}, + {file = "pymoo-0.6.1.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2a2e9524b07baef135a7143700cc65a504c2123c717a6924fa939947b4fdba73"}, + {file = "pymoo-0.6.1.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:819a27ff19c146a64853a86ebab02bc6bbf28fb9fcf119e93cfc855ec6314f72"}, + {file = "pymoo-0.6.1.6-cp312-cp312-win_amd64.whl", hash = "sha256:5607e0359c96691158192bd3e2b939beab6d4ed25032ef4cb79edf588c2bb475"}, + {file = "pymoo-0.6.1.6-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:798e5af41527324303e56ac806f9ec34c65f31c2df9e904daeca68027bf91266"}, + {file = "pymoo-0.6.1.6-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:01e848762e04d183e8dcc12e1cfb1e2cdd2c5efeda47961dbcf6c86c09751e30"}, + {file = "pymoo-0.6.1.6-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:718b9e971e436c2ded520c4a6fe8c83b7f305da1fcc539d6386d025c6e9bfe66"}, + {file = "pymoo-0.6.1.6-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:981bd5b8581e959814a0e51982be1a964945fb7f599cfe7857a63cbc1ad97d58"}, + {file = "pymoo-0.6.1.6-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:7c042120df86240c1451e2a1afb0f76b64acb8d736fb7687bc5e4aec40f7ff9e"}, + {file = "pymoo-0.6.1.6-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:5086f46020aa1a13a0e3142ef87b6487e91ea5d25b7b69467039f0d3f5a57cb2"}, + {file = "pymoo-0.6.1.6-cp313-cp313-win_amd64.whl", hash = "sha256:c16e05b36e081d0ea6aee499346f65466811f63f5837f0d09de866624cb7355b"}, + {file = "pymoo-0.6.1.6-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:7d13e14434f0555fbeda20764d34be4dc94f53ae7040a337928d7bfe42d3422a"}, + {file = "pymoo-0.6.1.6-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:466f88073c9f498bcf75334a2e47279968003d91b7fe01df1b056b5a6c3434d8"}, + {file = "pymoo-0.6.1.6-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:791188677b42e104c41cd1c65370a94fbbec756d8894947863f42a1f76352c90"}, + {file = "pymoo-0.6.1.6-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b9dd7da8b18bffac6b09c75b4a4a645232994d91fc0cdfe39baffdc08fa5d252"}, + {file = "pymoo-0.6.1.6-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:f41b359d6de6c9d99ab7da94f115c5aea4d21e74a252bef7c8debec8f20f0b9f"}, + {file = "pymoo-0.6.1.6-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:ecf1ce515e72d59b78c909aa142d2369cc3c6d771ac7c9162831c0b62a869c8f"}, + {file = "pymoo-0.6.1.6-cp314-cp314-win_amd64.whl", hash = "sha256:56ecb6f9f5ac0559829e183a23ea3672eae8c1eb9d745305bef98da8d1614d28"}, + {file = "pymoo-0.6.1.6.tar.gz", hash = "sha256:d48077c7b612b149e7db5351459bf96a0950e84ebcd5b7b953bf46b3dcf1ac28"}, ] [package.dependencies] -alive-progress = "*" +alive_progress = "*" autograd = ">=1.4" cma = ">=3.2.2" Deprecated = "*" -dill = "*" matplotlib = ">=3" +moocore = ">=0.1.7" numpy = ">=1.19.3" scipy = ">=1.1" +[package.extras] +dev = ["ipykernel", "ipython", "jupyter", "nbformat", "numba", "optproblems", "pandas", "pyrecorder", "pytest"] +full = ["numba", "pandas", "pymoo[others]", "pymoo[parallelization]", "scikit-learn"] +others = ["optuna"] +parallelization = ["dask[distributed]", "joblib", "ray[default]"] + [[package]] name = "pymunk" version = "6.2.0" @@ -3413,6 +3457,7 @@ description = "Pymunk is a easy-to-use pythonic 2d physics library" optional = false python-versions = ">=3.6" groups = ["main"] +markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "pymunk-6.2.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:aeb31794b832b080a76e0e365a72d2da4104269c3a3f13e1ca9ef9d66fb5f9b4"}, {file = "pymunk-6.2.0-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:1f08bec9e7b62fa321c6acd1cc7a52a4016943effa26fb442e8beb02fbc854a6"}, @@ -3462,6 +3507,7 @@ description = "Standard OpenGL bindings for Python" optional = false python-versions = "*" groups = ["main"] +markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "PyOpenGL-3.1.6-py2-none-any.whl", hash = "sha256:57c597d989178e1413002df6b923619f6d29807501dece1c60cc6f12c0c8e8a7"}, {file = "PyOpenGL-3.1.6-py3-none-any.whl", hash = "sha256:a7139bc3e15d656feae1f7e3ef68c799941ed43fadc78177a23db7e946c20738"}, @@ -3470,79 +3516,67 @@ files = [ [[package]] name = "pyopengl-accelerate" -version = "3.1.9" +version = "3.1.10" description = "Cython-coded accelerators for PyOpenGL" optional = false python-versions = "*" groups = ["main"] -files = [ - {file = "PyOpenGL_accelerate-3.1.9-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fa5682de4750a554700f4f435ad6144af87345d626faa8bc925b42c0c8817317"}, - {file = "PyOpenGL_accelerate-3.1.9-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e3e0313e58ad7a5577b2df275f44f6b842437835014c60fb602acc92aaaa060c"}, - {file = "PyOpenGL_accelerate-3.1.9-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0537f9644353f22492593799e50b7b5f2d8a46339c9d92ef93bd31dbb32c283d"}, - {file = "PyOpenGL_accelerate-3.1.9-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:35f4bc21a0e4d84f7c1bb0d819b0d8edaacc5ff2df60b59087820e30645c219e"}, - {file = "PyOpenGL_accelerate-3.1.9-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:896c00869d12b01270bffe6d70de632a9dd8eec47d87df6879908b4363fab03c"}, - {file = "PyOpenGL_accelerate-3.1.9-cp310-cp310-win32.whl", hash = "sha256:2975831f3f28e560c6dafbe81a8e04cc9ab3430f0b358235bdf70e37c808679e"}, - {file = "PyOpenGL_accelerate-3.1.9-cp310-cp310-win_amd64.whl", hash = "sha256:f5fbe4dec90ff460211c06e7e6bc4ec757f9cdd5f50098f1bf3ec15eceb5ee98"}, - {file = "PyOpenGL_accelerate-3.1.9-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:97e2e2daddab0ed8d690871ddff976e82a480cdef7d6df39b69d79afa3ce3430"}, - {file = "PyOpenGL_accelerate-3.1.9-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f7bbef8a910d37e9e18ed5f8ff8dff40c9161e84b90e96c04bed5c147bb3edc6"}, - {file = "PyOpenGL_accelerate-3.1.9-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d63cef49346ba556632a4a163025628b4872ca499d760d4e6410adcbefa84949"}, - {file = "PyOpenGL_accelerate-3.1.9-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:182f8b3e8ac19f4a5f7fe1178037ae840552351bcd264f5c34739db676467377"}, - {file = "PyOpenGL_accelerate-3.1.9-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:659ac06bc6a6031fef5e3b5c965d61d5763833e896b7b4620cb4e036180d60db"}, - {file = "PyOpenGL_accelerate-3.1.9-cp311-cp311-win32.whl", hash = "sha256:f544f97de76323c6e137ee8c859a81b654445273f159e63fdc1239f220376ba5"}, - {file = "PyOpenGL_accelerate-3.1.9-cp311-cp311-win_amd64.whl", hash = "sha256:d7d2b0ac17ea369eb6e063378c8b6c0addf095c82f5879cd500a407c01127619"}, - {file = "PyOpenGL_accelerate-3.1.9-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7981bc643edd6d30e35d08b393ec382773463e3aabb364695df51b9adbcf9e20"}, - {file = "PyOpenGL_accelerate-3.1.9-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:15a4c6a11dcfc9eec311f3596cda62fff2965ad6d62919415fb6573f7ef8c1c9"}, - {file = "PyOpenGL_accelerate-3.1.9-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2b6f1f3680f33f10e67bb679ac0fb6946905a22e52d2eba71a66bf9d3ef94b33"}, - {file = "PyOpenGL_accelerate-3.1.9-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:b58837914dbd6f89ba831d4a3dede1595a74485d7b476483966f08bac9bd4320"}, - {file = "PyOpenGL_accelerate-3.1.9-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:4cd6d767de3c81b538682058c6114587bfa5e4a263d0f4b023b0404fce07d6d7"}, - {file = "PyOpenGL_accelerate-3.1.9-cp312-cp312-win32.whl", hash = "sha256:8042393b3869b455d67b60e6c87dc349ae89d3a0858f8018f8bd8d69f323ac3c"}, - {file = "PyOpenGL_accelerate-3.1.9-cp312-cp312-win_amd64.whl", hash = "sha256:a78731c88a81a895cf9849139bffb40cbea9fb0e640ccc3cbc38ea909e1234f4"}, - {file = "PyOpenGL_accelerate-3.1.9-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:95fd40a537637355fb7f0a03c055fbad6efdeea059607f4966b7631b580353c5"}, - {file = "PyOpenGL_accelerate-3.1.9-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d5992ebf8befb6e45c6198e45f0f2d8fa26c30cbae68a1f08d6646c6d95b5605"}, - {file = "PyOpenGL_accelerate-3.1.9-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:10ab017316dc8bced13b2426b9cc6ab9aeb627ca020e9bc0836ef92b5e0942ea"}, - {file = "PyOpenGL_accelerate-3.1.9-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:d80dab32facd0195e8213754a7a71ba9d9343e413ff84bd8e552d7a66552b254"}, - {file = "PyOpenGL_accelerate-3.1.9-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:eb56fa15bdf1a029a8bf1682f5af436b02e721fcd1b43cf05eeda99ca9b6a9e1"}, - {file = "PyOpenGL_accelerate-3.1.9-cp313-cp313-win32.whl", hash = "sha256:19dda83f7c96f598b8bc895ee2199bd1c45d064993175bbbe251905b9d9b40a4"}, - {file = "PyOpenGL_accelerate-3.1.9-cp313-cp313-win_amd64.whl", hash = "sha256:ed02cc9abd7662e787bc7491bf7f78f6536cf550a148d0fbff6727bed9b57124"}, - {file = "PyOpenGL_accelerate-3.1.9-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d31d12adc1e0bcd9aff01b1d92aa316e45b8262ffc67d49da0802b87e840e771"}, - {file = "PyOpenGL_accelerate-3.1.9-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b8e901af8f45f24d97cd8afd964e710727f39328914ed7c6133a4f0e8f840a62"}, - {file = "PyOpenGL_accelerate-3.1.9-cp36-cp36m-musllinux_1_2_i686.whl", hash = "sha256:86071c363347c25b572ede5145cc5c6b39767249e55f5666127650730f737bfe"}, - {file = "PyOpenGL_accelerate-3.1.9-cp36-cp36m-musllinux_1_2_x86_64.whl", hash = "sha256:b78ae67c018f1fed0b418d46dc98516e5a9797be85ef932d2d97f26860146ba1"}, - {file = "PyOpenGL_accelerate-3.1.9-cp36-cp36m-win32.whl", hash = "sha256:587ac90a7e5d6ae91ad99854bea5b4316284ff8edb4fd51fa3bf9c9236e2a2b9"}, - {file = "PyOpenGL_accelerate-3.1.9-cp36-cp36m-win_amd64.whl", hash = "sha256:a95f48f815392964a3b64b20c19b0ef5c25690413ce0ee9f1e7f9b00e4f1b40a"}, - {file = "PyOpenGL_accelerate-3.1.9-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ab22411076dd1227ada4879dc80903aae049593486c09e3126abb4b475955442"}, - {file = "PyOpenGL_accelerate-3.1.9-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:39745bbcdefa26d96fdadb5969738f6f748e2b32d9b149f35babb3787b325e7a"}, - {file = "PyOpenGL_accelerate-3.1.9-cp37-cp37m-musllinux_1_2_i686.whl", hash = "sha256:e12712a38659115a93de18ba5517a4faa34c603ab43ba925d451e8d2429bbd40"}, - {file = "PyOpenGL_accelerate-3.1.9-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:67dc175b59c502dbc7e287f07c819652b39080e7e19728fa3b01552ea341a9bb"}, - {file = "PyOpenGL_accelerate-3.1.9-cp37-cp37m-win32.whl", hash = "sha256:e1841dd0856b24c72fc32411e53da6709393b48dba497d790868693e7d3bb542"}, - {file = "PyOpenGL_accelerate-3.1.9-cp37-cp37m-win_amd64.whl", hash = "sha256:9071c58126deb2b31a2f7a2173069fff3449a348a736370af18b509173e260e8"}, - {file = "PyOpenGL_accelerate-3.1.9-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:56e6bdd79925ad2fc137565e8fb19ed2584994faa057c97461a17da69fb98b7f"}, - {file = "PyOpenGL_accelerate-3.1.9-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:de1a0a683f4d45859a9a898e16634bd1802d1f88f024a70e896192a9d875aff8"}, - {file = "PyOpenGL_accelerate-3.1.9-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f0cd7db5685ed2b79d042932a62b3bf82d0443a7776f515e5c09564d52e357a6"}, - {file = "PyOpenGL_accelerate-3.1.9-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:83cb4caa8ae20e5e0fd06d2c9e30876ead3133fa4b2038e7270f04131ca92e80"}, - {file = "PyOpenGL_accelerate-3.1.9-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:76c28db5d0480a14e550a313da9652d57d5bf09074f9d566c40abac90d9ae41c"}, - {file = "PyOpenGL_accelerate-3.1.9-cp38-cp38-win32.whl", hash = "sha256:eecdf8a60ffcf8218c307a8fe0a55c60af888fa0730f1b5038733574d7e48d82"}, - {file = "PyOpenGL_accelerate-3.1.9-cp38-cp38-win_amd64.whl", hash = "sha256:48a136d8fd1e8a914f452042df9afad2ef0ce301187f0a75732d0469e6996799"}, - {file = "PyOpenGL_accelerate-3.1.9-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e561f1f6486b49732e273b840dcb46abcb9b95df375e5c7ea33dc9d137f96f51"}, - {file = "PyOpenGL_accelerate-3.1.9-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:46cc616bdf2edbef2586ccc17a905ae4376ae79f5b1e3069e935042739e05a6a"}, - {file = "PyOpenGL_accelerate-3.1.9-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d5fc52c916b135529cab731c6f7c85d78f6b23dda315ef6c417dca22f9497850"}, - {file = "PyOpenGL_accelerate-3.1.9-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:ce9a06769f28c32de926319cf6006179d3946f09a8987b0b1003b398b25ca7d5"}, - {file = "PyOpenGL_accelerate-3.1.9-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:d9c72c215a1ea7701c3730c21863790fabb05472767a8e08e95bda3a214078b5"}, - {file = "PyOpenGL_accelerate-3.1.9-cp39-cp39-win32.whl", hash = "sha256:704611e734179d9b3cfe81740ce3425b57c1269448908b97dcf982f33264cac6"}, - {file = "PyOpenGL_accelerate-3.1.9-cp39-cp39-win_amd64.whl", hash = "sha256:a033e10905dc4f610b739b43ec07ed473cedbdfa531b176e01f8797bd17c5134"}, - {file = "pyopengl_accelerate-3.1.9.tar.gz", hash = "sha256:85957c7c76975818ff759ec9243f9dc7091ef6f373ea37a2eb50c320fd9a86f3"}, +markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" +files = [ + {file = "pyopengl_accelerate-3.1.10-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:799b7ff0b2beaac92ec89e342147ae5f6b4e30acc60d124a48dec3fb2ee6c365"}, + {file = "pyopengl_accelerate-3.1.10-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:448f1a7f31090b029ca9a4623ebe9bffa5497a579ae1f05aff2aa3c362ca1eb0"}, + {file = "pyopengl_accelerate-3.1.10-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:4ee27dd972c0c633d09a76f35997ee7c3adf36ed13d78710d859245a4f968dc5"}, + {file = "pyopengl_accelerate-3.1.10-cp310-cp310-win32.whl", hash = "sha256:849e1d884ebb83ca016e7e0d8c336090a6236b91b8f1ad17258b31a49e0bd390"}, + {file = "pyopengl_accelerate-3.1.10-cp310-cp310-win_amd64.whl", hash = "sha256:d0a6129fe40c32b0ffdaa7386e80e8baae1a3312ac8bc7dc27436146938d5a94"}, + {file = "pyopengl_accelerate-3.1.10-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:05ab94a380f5bc7a67a9e0b408f46aa369f390c6fa694e5732905a642257cb4b"}, + {file = "pyopengl_accelerate-3.1.10-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a52b001949f11879847a8d282081937b4097e6f0c479d539135587738874a2e3"}, + {file = "pyopengl_accelerate-3.1.10-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:42317a5ac934447bc758fba67364d6fd41288068db6dfe5f57fe118b3908f58d"}, + {file = "pyopengl_accelerate-3.1.10-cp311-cp311-win32.whl", hash = "sha256:e3a3f92499d24241b5bdd1dba765c2f84f213c1262a6c71f298b40604987cd72"}, + {file = "pyopengl_accelerate-3.1.10-cp311-cp311-win_amd64.whl", hash = "sha256:c6647eff570c3e6a4d3ca714c144d841e61f6b5b103b805700ee536e2edf862f"}, + {file = "pyopengl_accelerate-3.1.10-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a0adc05a0585f98128dcfea80bca5fd016336a6f571a372721dc8e0406b12c2e"}, + {file = "pyopengl_accelerate-3.1.10-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3282e7edd22d7126a3874c08ebcb146122031d0cea774c52f872ae56aaf17f39"}, + {file = "pyopengl_accelerate-3.1.10-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:7366b6be51aca799d6b4bfbe6a5e9e6e4b0968956d0920676498e6ac2b9ce028"}, + {file = "pyopengl_accelerate-3.1.10-cp312-cp312-win32.whl", hash = "sha256:f014f2f5a0d68c751ad31c89805c043a08c423a8d6d5e7be620f6d819c6fa971"}, + {file = "pyopengl_accelerate-3.1.10-cp312-cp312-win_amd64.whl", hash = "sha256:6fa0963d686462dc3a03d10123af385f012001c8b020e908774df29741136bd5"}, + {file = "pyopengl_accelerate-3.1.10-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:bec9014f702997578b5e797d81b3e041cc5b41f0457c0184473f867c38d52665"}, + {file = "pyopengl_accelerate-3.1.10-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:171e22f7d5055479b0bd7f98192525f8890af4bf19765bea7e860885cbce622e"}, + {file = "pyopengl_accelerate-3.1.10-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:5eea15130bc248ca83dce31736afb190c21a0186aa02cefdf4019bc0f3f857f1"}, + {file = "pyopengl_accelerate-3.1.10-cp313-cp313-win32.whl", hash = "sha256:2354d2a2eb1266c984f061148460b2cb02146e90bd501b984d03bcc34f48b8d8"}, + {file = "pyopengl_accelerate-3.1.10-cp313-cp313-win_amd64.whl", hash = "sha256:551a46e907ea24884b6795b290b3b3b0618d217d38cf7cae9c825641375a74fe"}, + {file = "pyopengl_accelerate-3.1.10-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:415b6ddceaa6a3fed699f1e7a6aac0de6f37e5ae19349c4ed3a7c38e17a8e09e"}, + {file = "pyopengl_accelerate-3.1.10-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d6b8aabfb227ad579f3dfabe8f0e9909026d1af540baf6405b38efa4f10fb9eb"}, + {file = "pyopengl_accelerate-3.1.10-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:3d521cd41a4e62c38ec315770049dfc5c4b25e5c1debd4038cfbf75e05022f7c"}, + {file = "pyopengl_accelerate-3.1.10-cp314-cp314-win32.whl", hash = "sha256:fce5e6015ba2db99f0ebb07e4cd98ca4e70b419f186ea042cb70379228c1a339"}, + {file = "pyopengl_accelerate-3.1.10-cp314-cp314-win_amd64.whl", hash = "sha256:081b6b0f39f35f750ddf60fc865556e6d01481eb818ce1482f79cfde2abe598b"}, + {file = "pyopengl_accelerate-3.1.10-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:a35503ee877b35264172903eb6c8110b021531090a4647a81252f52a68757d4d"}, + {file = "pyopengl_accelerate-3.1.10-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:db2005912defa77a1e7390024d52b295c85a1c7ebd85ba073f1839d4bfffe855"}, + {file = "pyopengl_accelerate-3.1.10-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:fcf6827b1fff244ca6953068c17285b9eae173a20fccc1d9c193779f71b88d0f"}, + {file = "pyopengl_accelerate-3.1.10-cp314-cp314t-win32.whl", hash = "sha256:e55ea6a85894ad74d6f09953e3d359fe27def9fed220588787993e49e42db1d0"}, + {file = "pyopengl_accelerate-3.1.10-cp314-cp314t-win_amd64.whl", hash = "sha256:a2866cb65c45b013c2bf9995010824cc1b50ae91a4166746beb9ce241803e62a"}, + {file = "pyopengl_accelerate-3.1.10-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:c38fd8adbca7641b5ed0c817400baf099867a3c930f3044576b04c5308c17627"}, + {file = "pyopengl_accelerate-3.1.10-cp38-cp38-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:580a321c91e81b9297a097af1ecbb2e8c3136550d9a8db8d16dacc359823b7bd"}, + {file = "pyopengl_accelerate-3.1.10-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:45445b842917e7f4580b755529bf4d2f7b49955b79298f261b378311ca10b130"}, + {file = "pyopengl_accelerate-3.1.10-cp38-cp38-win32.whl", hash = "sha256:aabaafcef403bc4360daab4f32f98f4ecc415bc07a947758fdf283c6ee8764dd"}, + {file = "pyopengl_accelerate-3.1.10-cp38-cp38-win_amd64.whl", hash = "sha256:e63225f9faf8634d0313b732911281ed2176af8ce9fba32d726fb31a336bcf92"}, + {file = "pyopengl_accelerate-3.1.10-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ed8cbbda84463489e4162e4fe7e4f6cadac5b4509bafdfef4890e08701cccd37"}, + {file = "pyopengl_accelerate-3.1.10-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:854fc32d8ecbecb2f94c89ffcb222862b4258149d9c41c02782a25aac888e311"}, + {file = "pyopengl_accelerate-3.1.10-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:c423f3b8eac64b9faadc71ba9727fb8b79725dabf1e4310c22a31c2edcd0e8ae"}, + {file = "pyopengl_accelerate-3.1.10-cp39-cp39-win32.whl", hash = "sha256:e2d88757815797a8e77d9455bbc4b0073b2245e8b23b335f1f951e3bb62db4ad"}, + {file = "pyopengl_accelerate-3.1.10-cp39-cp39-win_amd64.whl", hash = "sha256:ef70bee0453ee8bf802b573b265ad3f9220efc8f6b2d53fd441b126da28854df"}, + {file = "pyopengl_accelerate-3.1.10.tar.gz", hash = "sha256:82751c83f0a6f732b8b5923990edc2441d38176a98756b1718e8d6c4379f5a71"}, ] [[package]] name = "pyparsing" -version = "3.2.3" -description = "pyparsing module - Classes and methods to define and execute parsing grammars" +version = "3.3.2" +description = "pyparsing - Classes and methods to define and execute parsing grammars" optional = false python-versions = ">=3.9" groups = ["main"] +markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ - {file = "pyparsing-3.2.3-py3-none-any.whl", hash = "sha256:a749938e02d6fd0b59b356ca504a24982314bb090c383e3cf201c95ef7e2bfcf"}, - {file = "pyparsing-3.2.3.tar.gz", hash = "sha256:b9c13f1ab8b3b542f72e28f634bad4de758ab3ce4546e4301970ad6fa77c38be"}, + {file = "pyparsing-3.3.2-py3-none-any.whl", hash = "sha256:850ba148bd908d7e2411587e247a1e4f0327839c40e2e5e6d05a007ecc69911d"}, + {file = "pyparsing-3.3.2.tar.gz", hash = "sha256:c777f4d763f140633dcb6d8a3eda953bf7a214dc4eff598413c070bcdc117cbc"}, ] [package.extras] @@ -3550,21 +3584,22 @@ diagrams = ["jinja2", "railroad-diagrams"] [[package]] name = "pytest" -version = "8.4.1" +version = "9.0.2" description = "pytest: simple powerful testing with Python" optional = false -python-versions = ">=3.9" +python-versions = ">=3.10" groups = ["main"] +markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ - {file = "pytest-8.4.1-py3-none-any.whl", hash = "sha256:539c70ba6fcead8e78eebbf1115e8b589e7565830d7d006a8723f19ac8a0afb7"}, - {file = "pytest-8.4.1.tar.gz", hash = "sha256:7c67fd69174877359ed9371ec3af8a3d2b04741818c51e5e99cc1742251fa93c"}, + {file = "pytest-9.0.2-py3-none-any.whl", hash = "sha256:711ffd45bf766d5264d487b917733b453d917afd2b0ad65223959f59089f875b"}, + {file = "pytest-9.0.2.tar.gz", hash = "sha256:75186651a92bd89611d1d9fc20f0b4345fd827c41ccd5c299a868a05d70edf11"}, ] [package.dependencies] colorama = {version = ">=0.4", markers = "sys_platform == \"win32\""} exceptiongroup = {version = ">=1", markers = "python_version < \"3.11\""} -iniconfig = ">=1" -packaging = ">=20" +iniconfig = ">=1.0.1" +packaging = ">=22" pluggy = ">=1.5,<2" pygments = ">=2.7.2" tomli = {version = ">=1", markers = "python_version < \"3.11\""} @@ -3579,6 +3614,7 @@ description = "Open API to/fro routes, models, and tests. Convert between docstr optional = false python-versions = ">=3.6" groups = ["main"] +markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "python-cdd-0.0.98.tar.gz", hash = "sha256:9e8bfad1ce81e23aa80a466ec231a3029d509bd5f5ac0730478e242f7d2c8305"}, {file = "python_cdd-0.0.98-py3-none-any.whl", hash = "sha256:96173ae49ded6fe783e218b9bf61df42f4c3fc54ceb6422062e4e466a9c74c1d"}, @@ -3594,6 +3630,7 @@ description = "Extensions to the standard Python datetime module" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" groups = ["main"] +markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3"}, {file = "python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427"}, @@ -3604,207 +3641,202 @@ six = ">=1.5" [[package]] name = "pytz" -version = "2025.2" +version = "2026.1.post1" description = "World timezone definitions, modern and historical" optional = false python-versions = "*" groups = ["main"] +markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ - {file = "pytz-2025.2-py2.py3-none-any.whl", hash = "sha256:5ddf76296dd8c44c26eb8f4b6f35488f3ccbf6fbbd7adee0b7262d43f0ec2f00"}, - {file = "pytz-2025.2.tar.gz", hash = "sha256:360b9e3dbb49a209c21ad61809c7fb453643e048b38924c765813546746e81c3"}, -] - -[[package]] -name = "pywin32" -version = "310" -description = "Python for Window Extensions" -optional = false -python-versions = "*" -groups = ["main"] -markers = "sys_platform == \"win32\" and platform_python_implementation != \"PyPy\"" -files = [ - {file = "pywin32-310-cp310-cp310-win32.whl", hash = "sha256:6dd97011efc8bf51d6793a82292419eba2c71cf8e7250cfac03bba284454abc1"}, - {file = "pywin32-310-cp310-cp310-win_amd64.whl", hash = "sha256:c3e78706e4229b915a0821941a84e7ef420bf2b77e08c9dae3c76fd03fd2ae3d"}, - {file = "pywin32-310-cp310-cp310-win_arm64.whl", hash = "sha256:33babed0cf0c92a6f94cc6cc13546ab24ee13e3e800e61ed87609ab91e4c8213"}, - {file = "pywin32-310-cp311-cp311-win32.whl", hash = "sha256:1e765f9564e83011a63321bb9d27ec456a0ed90d3732c4b2e312b855365ed8bd"}, - {file = "pywin32-310-cp311-cp311-win_amd64.whl", hash = "sha256:126298077a9d7c95c53823934f000599f66ec9296b09167810eb24875f32689c"}, - {file = "pywin32-310-cp311-cp311-win_arm64.whl", hash = "sha256:19ec5fc9b1d51c4350be7bb00760ffce46e6c95eaf2f0b2f1150657b1a43c582"}, - {file = "pywin32-310-cp312-cp312-win32.whl", hash = "sha256:8a75a5cc3893e83a108c05d82198880704c44bbaee4d06e442e471d3c9ea4f3d"}, - {file = "pywin32-310-cp312-cp312-win_amd64.whl", hash = "sha256:bf5c397c9a9a19a6f62f3fb821fbf36cac08f03770056711f765ec1503972060"}, - {file = "pywin32-310-cp312-cp312-win_arm64.whl", hash = "sha256:2349cc906eae872d0663d4d6290d13b90621eaf78964bb1578632ff20e152966"}, - {file = "pywin32-310-cp313-cp313-win32.whl", hash = "sha256:5d241a659c496ada3253cd01cfaa779b048e90ce4b2b38cd44168ad555ce74ab"}, - {file = "pywin32-310-cp313-cp313-win_amd64.whl", hash = "sha256:667827eb3a90208ddbdcc9e860c81bde63a135710e21e4cb3348968e4bd5249e"}, - {file = "pywin32-310-cp313-cp313-win_arm64.whl", hash = "sha256:e308f831de771482b7cf692a1f308f8fca701b2d8f9dde6cc440c7da17e47b33"}, - {file = "pywin32-310-cp38-cp38-win32.whl", hash = "sha256:0867beb8addefa2e3979d4084352e4ac6e991ca45373390775f7084cc0209b9c"}, - {file = "pywin32-310-cp38-cp38-win_amd64.whl", hash = "sha256:30f0a9b3138fb5e07eb4973b7077e1883f558e40c578c6925acc7a94c34eaa36"}, - {file = "pywin32-310-cp39-cp39-win32.whl", hash = "sha256:851c8d927af0d879221e616ae1f66145253537bbdd321a77e8ef701b443a9a1a"}, - {file = "pywin32-310-cp39-cp39-win_amd64.whl", hash = "sha256:96867217335559ac619f00ad70e513c0fcf84b8a3af9fc2bba3b59b97da70475"}, + {file = "pytz-2026.1.post1-py2.py3-none-any.whl", hash = "sha256:f2fd16142fda348286a75e1a524be810bb05d444e5a081f37f7affc635035f7a"}, + {file = "pytz-2026.1.post1.tar.gz", hash = "sha256:3378dde6a0c3d26719182142c56e60c7f9af7e968076f31aae569d72a0358ee1"}, ] [[package]] name = "pyyaml" -version = "6.0.2" +version = "6.0.3" description = "YAML parser and emitter for Python" optional = false python-versions = ">=3.8" groups = ["main"] -files = [ - {file = "PyYAML-6.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0a9a2848a5b7feac301353437eb7d5957887edbf81d56e903999a75a3d743086"}, - {file = "PyYAML-6.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:29717114e51c84ddfba879543fb232a6ed60086602313ca38cce623c1d62cfbf"}, - {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8824b5a04a04a047e72eea5cec3bc266db09e35de6bdfe34c9436ac5ee27d237"}, - {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7c36280e6fb8385e520936c3cb3b8042851904eba0e58d277dca80a5cfed590b"}, - {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ec031d5d2feb36d1d1a24380e4db6d43695f3748343d99434e6f5f9156aaa2ed"}, - {file = "PyYAML-6.0.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:936d68689298c36b53b29f23c6dbb74de12b4ac12ca6cfe0e047bedceea56180"}, - {file = "PyYAML-6.0.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:23502f431948090f597378482b4812b0caae32c22213aecf3b55325e049a6c68"}, - {file = "PyYAML-6.0.2-cp310-cp310-win32.whl", hash = "sha256:2e99c6826ffa974fe6e27cdb5ed0021786b03fc98e5ee3c5bfe1fd5015f42b99"}, - {file = "PyYAML-6.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:a4d3091415f010369ae4ed1fc6b79def9416358877534caf6a0fdd2146c87a3e"}, - {file = "PyYAML-6.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cc1c1159b3d456576af7a3e4d1ba7e6924cb39de8f67111c735f6fc832082774"}, - {file = "PyYAML-6.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1e2120ef853f59c7419231f3bf4e7021f1b936f6ebd222406c3b60212205d2ee"}, - {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d225db5a45f21e78dd9358e58a98702a0302f2659a3c6cd320564b75b86f47c"}, - {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5ac9328ec4831237bec75defaf839f7d4564be1e6b25ac710bd1a96321cc8317"}, - {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ad2a3decf9aaba3d29c8f537ac4b243e36bef957511b4766cb0057d32b0be85"}, - {file = "PyYAML-6.0.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ff3824dc5261f50c9b0dfb3be22b4567a6f938ccce4587b38952d85fd9e9afe4"}, - {file = "PyYAML-6.0.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:797b4f722ffa07cc8d62053e4cff1486fa6dc094105d13fea7b1de7d8bf71c9e"}, - {file = "PyYAML-6.0.2-cp311-cp311-win32.whl", hash = "sha256:11d8f3dd2b9c1207dcaf2ee0bbbfd5991f571186ec9cc78427ba5bd32afae4b5"}, - {file = "PyYAML-6.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:e10ce637b18caea04431ce14fabcf5c64a1c61ec9c56b071a4b7ca131ca52d44"}, - {file = "PyYAML-6.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c70c95198c015b85feafc136515252a261a84561b7b1d51e3384e0655ddf25ab"}, - {file = "PyYAML-6.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ce826d6ef20b1bc864f0a68340c8b3287705cae2f8b4b1d932177dcc76721725"}, - {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f71ea527786de97d1a0cc0eacd1defc0985dcf6b3f17bb77dcfc8c34bec4dc5"}, - {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9b22676e8097e9e22e36d6b7bda33190d0d400f345f23d4065d48f4ca7ae0425"}, - {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80bab7bfc629882493af4aa31a4cfa43a4c57c83813253626916b8c7ada83476"}, - {file = "PyYAML-6.0.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48"}, - {file = "PyYAML-6.0.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8b9c7197f7cb2738065c481a0461e50ad02f18c78cd75775628afb4d7137fb3b"}, - {file = "PyYAML-6.0.2-cp312-cp312-win32.whl", hash = "sha256:ef6107725bd54b262d6dedcc2af448a266975032bc85ef0172c5f059da6325b4"}, - {file = "PyYAML-6.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:7e7401d0de89a9a855c839bc697c079a4af81cf878373abd7dc625847d25cbd8"}, - {file = "PyYAML-6.0.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba"}, - {file = "PyYAML-6.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1"}, - {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133"}, - {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484"}, - {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5"}, - {file = "PyYAML-6.0.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc"}, - {file = "PyYAML-6.0.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652"}, - {file = "PyYAML-6.0.2-cp313-cp313-win32.whl", hash = "sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183"}, - {file = "PyYAML-6.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563"}, - {file = "PyYAML-6.0.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:24471b829b3bf607e04e88d79542a9d48bb037c2267d7927a874e6c205ca7e9a"}, - {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7fded462629cfa4b685c5416b949ebad6cec74af5e2d42905d41e257e0869f5"}, - {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d84a1718ee396f54f3a086ea0a66d8e552b2ab2017ef8b420e92edbc841c352d"}, - {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9056c1ecd25795207ad294bcf39f2db3d845767be0ea6e6a34d856f006006083"}, - {file = "PyYAML-6.0.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:82d09873e40955485746739bcb8b4586983670466c23382c19cffecbf1fd8706"}, - {file = "PyYAML-6.0.2-cp38-cp38-win32.whl", hash = "sha256:43fa96a3ca0d6b1812e01ced1044a003533c47f6ee8aca31724f78e93ccc089a"}, - {file = "PyYAML-6.0.2-cp38-cp38-win_amd64.whl", hash = "sha256:01179a4a8559ab5de078078f37e5c1a30d76bb88519906844fd7bdea1b7729ff"}, - {file = "PyYAML-6.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:688ba32a1cffef67fd2e9398a2efebaea461578b0923624778664cc1c914db5d"}, - {file = "PyYAML-6.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a8786accb172bd8afb8be14490a16625cbc387036876ab6ba70912730faf8e1f"}, - {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8e03406cac8513435335dbab54c0d385e4a49e4945d2909a581c83647ca0290"}, - {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f753120cb8181e736c57ef7636e83f31b9c0d1722c516f7e86cf15b7aa57ff12"}, - {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3b1fdb9dc17f5a7677423d508ab4f243a726dea51fa5e70992e59a7411c89d19"}, - {file = "PyYAML-6.0.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0b69e4ce7a131fe56b7e4d770c67429700908fc0752af059838b1cfb41960e4e"}, - {file = "PyYAML-6.0.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a9f8c2e67970f13b16084e04f134610fd1d374bf477b17ec1599185cf611d725"}, - {file = "PyYAML-6.0.2-cp39-cp39-win32.whl", hash = "sha256:6395c297d42274772abc367baaa79683958044e5d3835486c16da75d2a694631"}, - {file = "PyYAML-6.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:39693e1f8320ae4f43943590b49779ffb98acb81f788220ea932a6b6c51004d8"}, - {file = "pyyaml-6.0.2.tar.gz", hash = "sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e"}, +markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" +files = [ + {file = "PyYAML-6.0.3-cp38-cp38-macosx_10_13_x86_64.whl", hash = "sha256:c2514fceb77bc5e7a2f7adfaa1feb2fb311607c9cb518dbc378688ec73d8292f"}, + {file = "PyYAML-6.0.3-cp38-cp38-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9c57bb8c96f6d1808c030b1687b9b5fb476abaa47f0db9c0101f5e9f394e97f4"}, + {file = "PyYAML-6.0.3-cp38-cp38-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:efd7b85f94a6f21e4932043973a7ba2613b059c4a000551892ac9f1d11f5baf3"}, + {file = "PyYAML-6.0.3-cp38-cp38-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:22ba7cfcad58ef3ecddc7ed1db3409af68d023b7f940da23c6c2a1890976eda6"}, + {file = "PyYAML-6.0.3-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:6344df0d5755a2c9a276d4473ae6b90647e216ab4757f8426893b5dd2ac3f369"}, + {file = "PyYAML-6.0.3-cp38-cp38-win32.whl", hash = "sha256:3ff07ec89bae51176c0549bc4c63aa6202991da2d9a6129d7aef7f1407d3f295"}, + {file = "PyYAML-6.0.3-cp38-cp38-win_amd64.whl", hash = "sha256:5cf4e27da7e3fbed4d6c3d8e797387aaad68102272f8f9752883bc32d61cb87b"}, + {file = "pyyaml-6.0.3-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:214ed4befebe12df36bcc8bc2b64b396ca31be9304b8f59e25c11cf94a4c033b"}, + {file = "pyyaml-6.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:02ea2dfa234451bbb8772601d7b8e426c2bfa197136796224e50e35a78777956"}, + {file = "pyyaml-6.0.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b30236e45cf30d2b8e7b3e85881719e98507abed1011bf463a8fa23e9c3e98a8"}, + {file = "pyyaml-6.0.3-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:66291b10affd76d76f54fad28e22e51719ef9ba22b29e1d7d03d6777a9174198"}, + {file = "pyyaml-6.0.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9c7708761fccb9397fe64bbc0395abcae8c4bf7b0eac081e12b809bf47700d0b"}, + {file = "pyyaml-6.0.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:418cf3f2111bc80e0933b2cd8cd04f286338bb88bdc7bc8e6dd775ebde60b5e0"}, + {file = "pyyaml-6.0.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:5e0b74767e5f8c593e8c9b5912019159ed0533c70051e9cce3e8b6aa699fcd69"}, + {file = "pyyaml-6.0.3-cp310-cp310-win32.whl", hash = "sha256:28c8d926f98f432f88adc23edf2e6d4921ac26fb084b028c733d01868d19007e"}, + {file = "pyyaml-6.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:bdb2c67c6c1390b63c6ff89f210c8fd09d9a1217a465701eac7316313c915e4c"}, + {file = "pyyaml-6.0.3-cp311-cp311-macosx_10_13_x86_64.whl", hash = "sha256:44edc647873928551a01e7a563d7452ccdebee747728c1080d881d68af7b997e"}, + {file = "pyyaml-6.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:652cb6edd41e718550aad172851962662ff2681490a8a711af6a4d288dd96824"}, + {file = "pyyaml-6.0.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:10892704fc220243f5305762e276552a0395f7beb4dbf9b14ec8fd43b57f126c"}, + {file = "pyyaml-6.0.3-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:850774a7879607d3a6f50d36d04f00ee69e7fc816450e5f7e58d7f17f1ae5c00"}, + {file = "pyyaml-6.0.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b8bb0864c5a28024fac8a632c443c87c5aa6f215c0b126c449ae1a150412f31d"}, + {file = "pyyaml-6.0.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1d37d57ad971609cf3c53ba6a7e365e40660e3be0e5175fa9f2365a379d6095a"}, + {file = "pyyaml-6.0.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:37503bfbfc9d2c40b344d06b2199cf0e96e97957ab1c1b546fd4f87e53e5d3e4"}, + {file = "pyyaml-6.0.3-cp311-cp311-win32.whl", hash = "sha256:8098f252adfa6c80ab48096053f512f2321f0b998f98150cea9bd23d83e1467b"}, + {file = "pyyaml-6.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:9f3bfb4965eb874431221a3ff3fdcddc7e74e3b07799e0e84ca4a0f867d449bf"}, + {file = "pyyaml-6.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7f047e29dcae44602496db43be01ad42fc6f1cc0d8cd6c83d342306c32270196"}, + {file = "pyyaml-6.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:fc09d0aa354569bc501d4e787133afc08552722d3ab34836a80547331bb5d4a0"}, + {file = "pyyaml-6.0.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9149cad251584d5fb4981be1ecde53a1ca46c891a79788c0df828d2f166bda28"}, + {file = "pyyaml-6.0.3-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5fdec68f91a0c6739b380c83b951e2c72ac0197ace422360e6d5a959d8d97b2c"}, + {file = "pyyaml-6.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ba1cc08a7ccde2d2ec775841541641e4548226580ab850948cbfda66a1befcdc"}, + {file = "pyyaml-6.0.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8dc52c23056b9ddd46818a57b78404882310fb473d63f17b07d5c40421e47f8e"}, + {file = "pyyaml-6.0.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:41715c910c881bc081f1e8872880d3c650acf13dfa8214bad49ed4cede7c34ea"}, + {file = "pyyaml-6.0.3-cp312-cp312-win32.whl", hash = "sha256:96b533f0e99f6579b3d4d4995707cf36df9100d67e0c8303a0c55b27b5f99bc5"}, + {file = "pyyaml-6.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:5fcd34e47f6e0b794d17de1b4ff496c00986e1c83f7ab2fb8fcfe9616ff7477b"}, + {file = "pyyaml-6.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:64386e5e707d03a7e172c0701abfb7e10f0fb753ee1d773128192742712a98fd"}, + {file = "pyyaml-6.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:8da9669d359f02c0b91ccc01cac4a67f16afec0dac22c2ad09f46bee0697eba8"}, + {file = "pyyaml-6.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:2283a07e2c21a2aa78d9c4442724ec1eb15f5e42a723b99cb3d822d48f5f7ad1"}, + {file = "pyyaml-6.0.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ee2922902c45ae8ccada2c5b501ab86c36525b883eff4255313a253a3160861c"}, + {file = "pyyaml-6.0.3-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a33284e20b78bd4a18c8c2282d549d10bc8408a2a7ff57653c0cf0b9be0afce5"}, + {file = "pyyaml-6.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0f29edc409a6392443abf94b9cf89ce99889a1dd5376d94316ae5145dfedd5d6"}, + {file = "pyyaml-6.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f7057c9a337546edc7973c0d3ba84ddcdf0daa14533c2065749c9075001090e6"}, + {file = "pyyaml-6.0.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:eda16858a3cab07b80edaf74336ece1f986ba330fdb8ee0d6c0d68fe82bc96be"}, + {file = "pyyaml-6.0.3-cp313-cp313-win32.whl", hash = "sha256:d0eae10f8159e8fdad514efdc92d74fd8d682c933a6dd088030f3834bc8e6b26"}, + {file = "pyyaml-6.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:79005a0d97d5ddabfeeea4cf676af11e647e41d81c9a7722a193022accdb6b7c"}, + {file = "pyyaml-6.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:5498cd1645aa724a7c71c8f378eb29ebe23da2fc0d7a08071d89469bf1d2defb"}, + {file = "pyyaml-6.0.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:8d1fab6bb153a416f9aeb4b8763bc0f22a5586065f86f7664fc23339fc1c1fac"}, + {file = "pyyaml-6.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:34d5fcd24b8445fadc33f9cf348c1047101756fd760b4dacb5c3e99755703310"}, + {file = "pyyaml-6.0.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:501a031947e3a9025ed4405a168e6ef5ae3126c59f90ce0cd6f2bfc477be31b7"}, + {file = "pyyaml-6.0.3-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:b3bc83488de33889877a0f2543ade9f70c67d66d9ebb4ac959502e12de895788"}, + {file = "pyyaml-6.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c458b6d084f9b935061bc36216e8a69a7e293a2f1e68bf956dcd9e6cbcd143f5"}, + {file = "pyyaml-6.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7c6610def4f163542a622a73fb39f534f8c101d690126992300bf3207eab9764"}, + {file = "pyyaml-6.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:5190d403f121660ce8d1d2c1bb2ef1bd05b5f68533fc5c2ea899bd15f4399b35"}, + {file = "pyyaml-6.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:4a2e8cebe2ff6ab7d1050ecd59c25d4c8bd7e6f400f5f82b96557ac0abafd0ac"}, + {file = "pyyaml-6.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:93dda82c9c22deb0a405ea4dc5f2d0cda384168e466364dec6255b293923b2f3"}, + {file = "pyyaml-6.0.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:02893d100e99e03eda1c8fd5c441d8c60103fd175728e23e431db1b589cf5ab3"}, + {file = "pyyaml-6.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:c1ff362665ae507275af2853520967820d9124984e0f7466736aea23d8611fba"}, + {file = "pyyaml-6.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6adc77889b628398debc7b65c073bcb99c4a0237b248cacaf3fe8a557563ef6c"}, + {file = "pyyaml-6.0.3-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a80cb027f6b349846a3bf6d73b5e95e782175e52f22108cfa17876aaeff93702"}, + {file = "pyyaml-6.0.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:00c4bdeba853cc34e7dd471f16b4114f4162dc03e6b7afcc2128711f0eca823c"}, + {file = "pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:66e1674c3ef6f541c35191caae2d429b967b99e02040f5ba928632d9a7f0f065"}, + {file = "pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:16249ee61e95f858e83976573de0f5b2893b3677ba71c9dd36b9cf8be9ac6d65"}, + {file = "pyyaml-6.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4ad1906908f2f5ae4e5a8ddfce73c320c2a1429ec52eafd27138b7f1cbe341c9"}, + {file = "pyyaml-6.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:ebc55a14a21cb14062aa4162f906cd962b28e2e9ea38f9b4391244cd8de4ae0b"}, + {file = "pyyaml-6.0.3-cp39-cp39-macosx_10_13_x86_64.whl", hash = "sha256:b865addae83924361678b652338317d1bd7e79b1f4596f96b96c77a5a34b34da"}, + {file = "pyyaml-6.0.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c3355370a2c156cffb25e876646f149d5d68f5e0a3ce86a5084dd0b64a994917"}, + {file = "pyyaml-6.0.3-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3c5677e12444c15717b902a5798264fa7909e41153cdf9ef7ad571b704a63dd9"}, + {file = "pyyaml-6.0.3-cp39-cp39-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5ed875a24292240029e4483f9d4a4b8a1ae08843b9c54f43fcc11e404532a8a5"}, + {file = "pyyaml-6.0.3-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0150219816b6a1fa26fb4699fb7daa9caf09eb1999f3b70fb6e786805e80375a"}, + {file = "pyyaml-6.0.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:fa160448684b4e94d80416c0fa4aac48967a969efe22931448d853ada8baf926"}, + {file = "pyyaml-6.0.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:27c0abcb4a5dac13684a37f76e701e054692a9b2d3064b70f5e4eb54810553d7"}, + {file = "pyyaml-6.0.3-cp39-cp39-win32.whl", hash = "sha256:1ebe39cb5fc479422b83de611d14e2c0d3bb2a18bbcb01f229ab3cfbd8fee7a0"}, + {file = "pyyaml-6.0.3-cp39-cp39-win_amd64.whl", hash = "sha256:2e71d11abed7344e42a8849600193d15b6def118602c4c176f748e4583246007"}, + {file = "pyyaml-6.0.3.tar.gz", hash = "sha256:d76623373421df22fb4cf8817020cbb7ef15c725b9d5e45f17e189bfc384190f"}, ] [[package]] name = "pyzmq" -version = "26.4.0" +version = "27.1.0" description = "Python bindings for 0MQ" optional = false python-versions = ">=3.8" groups = ["main"] -files = [ - {file = "pyzmq-26.4.0-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:0329bdf83e170ac133f44a233fc651f6ed66ef8e66693b5af7d54f45d1ef5918"}, - {file = "pyzmq-26.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:398a825d2dea96227cf6460ce0a174cf7657d6f6827807d4d1ae9d0f9ae64315"}, - {file = "pyzmq-26.4.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6d52d62edc96787f5c1dfa6c6ccff9b581cfae5a70d94ec4c8da157656c73b5b"}, - {file = "pyzmq-26.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1410c3a3705db68d11eb2424d75894d41cff2f64d948ffe245dd97a9debfebf4"}, - {file = "pyzmq-26.4.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:7dacb06a9c83b007cc01e8e5277f94c95c453c5851aac5e83efe93e72226353f"}, - {file = "pyzmq-26.4.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:6bab961c8c9b3a4dc94d26e9b2cdf84de9918931d01d6ff38c721a83ab3c0ef5"}, - {file = "pyzmq-26.4.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:7a5c09413b924d96af2aa8b57e76b9b0058284d60e2fc3730ce0f979031d162a"}, - {file = "pyzmq-26.4.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7d489ac234d38e57f458fdbd12a996bfe990ac028feaf6f3c1e81ff766513d3b"}, - {file = "pyzmq-26.4.0-cp310-cp310-win32.whl", hash = "sha256:dea1c8db78fb1b4b7dc9f8e213d0af3fc8ecd2c51a1d5a3ca1cde1bda034a980"}, - {file = "pyzmq-26.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:fa59e1f5a224b5e04dc6c101d7186058efa68288c2d714aa12d27603ae93318b"}, - {file = "pyzmq-26.4.0-cp310-cp310-win_arm64.whl", hash = "sha256:a651fe2f447672f4a815e22e74630b6b1ec3a1ab670c95e5e5e28dcd4e69bbb5"}, - {file = "pyzmq-26.4.0-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:bfcf82644c9b45ddd7cd2a041f3ff8dce4a0904429b74d73a439e8cab1bd9e54"}, - {file = "pyzmq-26.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e9bcae3979b2654d5289d3490742378b2f3ce804b0b5fd42036074e2bf35b030"}, - {file = "pyzmq-26.4.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ccdff8ac4246b6fb60dcf3982dfaeeff5dd04f36051fe0632748fc0aa0679c01"}, - {file = "pyzmq-26.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4550af385b442dc2d55ab7717837812799d3674cb12f9a3aa897611839c18e9e"}, - {file = "pyzmq-26.4.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:2f9f7ffe9db1187a253fca95191854b3fda24696f086e8789d1d449308a34b88"}, - {file = "pyzmq-26.4.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:3709c9ff7ba61589b7372923fd82b99a81932b592a5c7f1a24147c91da9a68d6"}, - {file = "pyzmq-26.4.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:f8f3c30fb2d26ae5ce36b59768ba60fb72507ea9efc72f8f69fa088450cff1df"}, - {file = "pyzmq-26.4.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:382a4a48c8080e273427fc692037e3f7d2851959ffe40864f2db32646eeb3cef"}, - {file = "pyzmq-26.4.0-cp311-cp311-win32.whl", hash = "sha256:d56aad0517d4c09e3b4f15adebba8f6372c5102c27742a5bdbfc74a7dceb8fca"}, - {file = "pyzmq-26.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:963977ac8baed7058c1e126014f3fe58b3773f45c78cce7af5c26c09b6823896"}, - {file = "pyzmq-26.4.0-cp311-cp311-win_arm64.whl", hash = "sha256:c0c8e8cadc81e44cc5088fcd53b9b3b4ce9344815f6c4a03aec653509296fae3"}, - {file = "pyzmq-26.4.0-cp312-cp312-macosx_10_15_universal2.whl", hash = "sha256:5227cb8da4b6f68acfd48d20c588197fd67745c278827d5238c707daf579227b"}, - {file = "pyzmq-26.4.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e1c07a7fa7f7ba86554a2b1bef198c9fed570c08ee062fd2fd6a4dcacd45f905"}, - {file = "pyzmq-26.4.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ae775fa83f52f52de73183f7ef5395186f7105d5ed65b1ae65ba27cb1260de2b"}, - {file = "pyzmq-26.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:66c760d0226ebd52f1e6b644a9e839b5db1e107a23f2fcd46ec0569a4fdd4e63"}, - {file = "pyzmq-26.4.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:ef8c6ecc1d520debc147173eaa3765d53f06cd8dbe7bd377064cdbc53ab456f5"}, - {file = "pyzmq-26.4.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:3150ef4084e163dec29ae667b10d96aad309b668fac6810c9e8c27cf543d6e0b"}, - {file = "pyzmq-26.4.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:4448c9e55bf8329fa1dcedd32f661bf611214fa70c8e02fee4347bc589d39a84"}, - {file = "pyzmq-26.4.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:e07dde3647afb084d985310d067a3efa6efad0621ee10826f2cb2f9a31b89d2f"}, - {file = "pyzmq-26.4.0-cp312-cp312-win32.whl", hash = "sha256:ba034a32ecf9af72adfa5ee383ad0fd4f4e38cdb62b13624278ef768fe5b5b44"}, - {file = "pyzmq-26.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:056a97aab4064f526ecb32f4343917a4022a5d9efb6b9df990ff72e1879e40be"}, - {file = "pyzmq-26.4.0-cp312-cp312-win_arm64.whl", hash = "sha256:2f23c750e485ce1eb639dbd576d27d168595908aa2d60b149e2d9e34c9df40e0"}, - {file = "pyzmq-26.4.0-cp313-cp313-macosx_10_15_universal2.whl", hash = "sha256:c43fac689880f5174d6fc864857d1247fe5cfa22b09ed058a344ca92bf5301e3"}, - {file = "pyzmq-26.4.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:902aca7eba477657c5fb81c808318460328758e8367ecdd1964b6330c73cae43"}, - {file = "pyzmq-26.4.0-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e5e48a830bfd152fe17fbdeaf99ac5271aa4122521bf0d275b6b24e52ef35eb6"}, - {file = "pyzmq-26.4.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:31be2b6de98c824c06f5574331f805707c667dc8f60cb18580b7de078479891e"}, - {file = "pyzmq-26.4.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:6332452034be001bbf3206ac59c0d2a7713de5f25bb38b06519fc6967b7cf771"}, - {file = "pyzmq-26.4.0-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:da8c0f5dd352136853e6a09b1b986ee5278dfddfebd30515e16eae425c872b30"}, - {file = "pyzmq-26.4.0-cp313-cp313-musllinux_1_1_i686.whl", hash = "sha256:f4ccc1a0a2c9806dda2a2dd118a3b7b681e448f3bb354056cad44a65169f6d86"}, - {file = "pyzmq-26.4.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:1c0b5fceadbab461578daf8d1dcc918ebe7ddd2952f748cf30c7cf2de5d51101"}, - {file = "pyzmq-26.4.0-cp313-cp313-win32.whl", hash = "sha256:28e2b0ff5ba4b3dd11062d905682bad33385cfa3cc03e81abd7f0822263e6637"}, - {file = "pyzmq-26.4.0-cp313-cp313-win_amd64.whl", hash = "sha256:23ecc9d241004c10e8b4f49d12ac064cd7000e1643343944a10df98e57bc544b"}, - {file = "pyzmq-26.4.0-cp313-cp313-win_arm64.whl", hash = "sha256:1edb0385c7f025045d6e0f759d4d3afe43c17a3d898914ec6582e6f464203c08"}, - {file = "pyzmq-26.4.0-cp313-cp313t-macosx_10_15_universal2.whl", hash = "sha256:93a29e882b2ba1db86ba5dd5e88e18e0ac6b627026c5cfbec9983422011b82d4"}, - {file = "pyzmq-26.4.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cb45684f276f57110bb89e4300c00f1233ca631f08f5f42528a5c408a79efc4a"}, - {file = "pyzmq-26.4.0-cp313-cp313t-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f72073e75260cb301aad4258ad6150fa7f57c719b3f498cb91e31df16784d89b"}, - {file = "pyzmq-26.4.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:be37e24b13026cfedd233bcbbccd8c0bcd2fdd186216094d095f60076201538d"}, - {file = "pyzmq-26.4.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:237b283044934d26f1eeff4075f751b05d2f3ed42a257fc44386d00df6a270cf"}, - {file = "pyzmq-26.4.0-cp313-cp313t-musllinux_1_1_aarch64.whl", hash = "sha256:b30f862f6768b17040929a68432c8a8be77780317f45a353cb17e423127d250c"}, - {file = "pyzmq-26.4.0-cp313-cp313t-musllinux_1_1_i686.whl", hash = "sha256:c80fcd3504232f13617c6ab501124d373e4895424e65de8b72042333316f64a8"}, - {file = "pyzmq-26.4.0-cp313-cp313t-musllinux_1_1_x86_64.whl", hash = "sha256:26a2a7451606b87f67cdeca2c2789d86f605da08b4bd616b1a9981605ca3a364"}, - {file = "pyzmq-26.4.0-cp38-cp38-macosx_10_15_universal2.whl", hash = "sha256:831cc53bf6068d46d942af52fa8b0b9d128fb39bcf1f80d468dc9a3ae1da5bfb"}, - {file = "pyzmq-26.4.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:51d18be6193c25bd229524cfac21e39887c8d5e0217b1857998dfbef57c070a4"}, - {file = "pyzmq-26.4.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:445c97854204119ae2232503585ebb4fa7517142f71092cb129e5ee547957a1f"}, - {file = "pyzmq-26.4.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:807b8f4ad3e6084412c0f3df0613269f552110fa6fb91743e3e306223dbf11a6"}, - {file = "pyzmq-26.4.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:c01d109dd675ac47fa15c0a79d256878d898f90bc10589f808b62d021d2e653c"}, - {file = "pyzmq-26.4.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:0a294026e28679a8dd64c922e59411cb586dad307661b4d8a5c49e7bbca37621"}, - {file = "pyzmq-26.4.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:22c8dd677274af8dfb1efd05006d6f68fb2f054b17066e308ae20cb3f61028cf"}, - {file = "pyzmq-26.4.0-cp38-cp38-win32.whl", hash = "sha256:14fc678b696bc42c14e2d7f86ac4e97889d5e6b94d366ebcb637a768d2ad01af"}, - {file = "pyzmq-26.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:d1ef0a536662bbbdc8525f7e2ef19e74123ec9c4578e0582ecd41aedc414a169"}, - {file = "pyzmq-26.4.0-cp39-cp39-macosx_10_15_universal2.whl", hash = "sha256:a88643de8abd000ce99ca72056a1a2ae15881ee365ecb24dd1d9111e43d57842"}, - {file = "pyzmq-26.4.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0a744ce209ecb557406fb928f3c8c55ce79b16c3eeb682da38ef5059a9af0848"}, - {file = "pyzmq-26.4.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:9434540f333332224ecb02ee6278b6c6f11ea1266b48526e73c903119b2f420f"}, - {file = "pyzmq-26.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e6c6f0a23e55cd38d27d4c89add963294ea091ebcb104d7fdab0f093bc5abb1c"}, - {file = "pyzmq-26.4.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:6145df55dc2309f6ef72d70576dcd5aabb0fd373311613fe85a5e547c722b780"}, - {file = "pyzmq-26.4.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:2ea81823840ef8c56e5d2f9918e4d571236294fea4d1842b302aebffb9e40997"}, - {file = "pyzmq-26.4.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:cc2abc385dc37835445abe206524fbc0c9e3fce87631dfaa90918a1ba8f425eb"}, - {file = "pyzmq-26.4.0-cp39-cp39-win32.whl", hash = "sha256:41a2508fe7bed4c76b4cf55aacfb8733926f59d440d9ae2b81ee8220633b4d12"}, - {file = "pyzmq-26.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:d4000e8255d6cbce38982e5622ebb90823f3409b7ffe8aeae4337ef7d6d2612a"}, - {file = "pyzmq-26.4.0-cp39-cp39-win_arm64.whl", hash = "sha256:b4f6919d9c120488246bdc2a2f96662fa80d67b35bd6d66218f457e722b3ff64"}, - {file = "pyzmq-26.4.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:98d948288ce893a2edc5ec3c438fe8de2daa5bbbd6e2e865ec5f966e237084ba"}, - {file = "pyzmq-26.4.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a9f34f5c9e0203ece706a1003f1492a56c06c0632d86cb77bcfe77b56aacf27b"}, - {file = "pyzmq-26.4.0-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:80c9b48aef586ff8b698359ce22f9508937c799cc1d2c9c2f7c95996f2300c94"}, - {file = "pyzmq-26.4.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f3f2a5b74009fd50b53b26f65daff23e9853e79aa86e0aa08a53a7628d92d44a"}, - {file = "pyzmq-26.4.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:61c5f93d7622d84cb3092d7f6398ffc77654c346545313a3737e266fc11a3beb"}, - {file = "pyzmq-26.4.0-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:4478b14cb54a805088299c25a79f27eaf530564a7a4f72bf432a040042b554eb"}, - {file = "pyzmq-26.4.0-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8a28ac29c60e4ba84b5f58605ace8ad495414a724fe7aceb7cf06cd0598d04e1"}, - {file = "pyzmq-26.4.0-pp311-pypy311_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:43b03c1ceea27c6520124f4fb2ba9c647409b9abdf9a62388117148a90419494"}, - {file = "pyzmq-26.4.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7731abd23a782851426d4e37deb2057bf9410848a4459b5ede4fe89342e687a9"}, - {file = "pyzmq-26.4.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:a222ad02fbe80166b0526c038776e8042cd4e5f0dec1489a006a1df47e9040e0"}, - {file = "pyzmq-26.4.0-pp38-pypy38_pp73-macosx_10_15_x86_64.whl", hash = "sha256:91c3ffaea475ec8bb1a32d77ebc441dcdd13cd3c4c284a6672b92a0f5ade1917"}, - {file = "pyzmq-26.4.0-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:d9a78a52668bf5c9e7b0da36aa5760a9fc3680144e1445d68e98df78a25082ed"}, - {file = "pyzmq-26.4.0-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:b70cab356ff8c860118b89dc86cd910c73ce2127eb986dada4fbac399ef644cf"}, - {file = "pyzmq-26.4.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:acae207d4387780838192326b32d373bb286da0b299e733860e96f80728eb0af"}, - {file = "pyzmq-26.4.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:f928eafd15794aa4be75463d537348b35503c1e014c5b663f206504ec1a90fe4"}, - {file = "pyzmq-26.4.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:552b0d2e39987733e1e9e948a0ced6ff75e0ea39ab1a1db2fc36eb60fd8760db"}, - {file = "pyzmq-26.4.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dd670a8aa843f2ee637039bbd412e0d7294a5e588e1ecc9ad98b0cdc050259a4"}, - {file = "pyzmq-26.4.0-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d367b7b775a0e1e54a59a2ba3ed4d5e0a31566af97cc9154e34262777dab95ed"}, - {file = "pyzmq-26.4.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8112af16c406e4a93df2caef49f884f4c2bb2b558b0b5577ef0b2465d15c1abc"}, - {file = "pyzmq-26.4.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:c76c298683f82669cab0b6da59071f55238c039738297c69f187a542c6d40099"}, - {file = "pyzmq-26.4.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:49b6ca2e625b46f499fb081aaf7819a177f41eeb555acb05758aa97f4f95d147"}, - {file = "pyzmq-26.4.0.tar.gz", hash = "sha256:4bd13f85f80962f91a651a7356fe0472791a5f7a92f227822b5acf44795c626d"}, +markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" +files = [ + {file = "pyzmq-27.1.0-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:508e23ec9bc44c0005c4946ea013d9317ae00ac67778bd47519fdf5a0e930ff4"}, + {file = "pyzmq-27.1.0-cp310-cp310-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:507b6f430bdcf0ee48c0d30e734ea89ce5567fd7b8a0f0044a369c176aa44556"}, + {file = "pyzmq-27.1.0-cp310-cp310-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bf7b38f9fd7b81cb6d9391b2946382c8237fd814075c6aa9c3b746d53076023b"}, + {file = "pyzmq-27.1.0-cp310-cp310-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:03ff0b279b40d687691a6217c12242ee71f0fba28bf8626ff50e3ef0f4410e1e"}, + {file = "pyzmq-27.1.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:677e744fee605753eac48198b15a2124016c009a11056f93807000ab11ce6526"}, + {file = "pyzmq-27.1.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:dd2fec2b13137416a1c5648b7009499bcc8fea78154cd888855fa32514f3dad1"}, + {file = "pyzmq-27.1.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:08e90bb4b57603b84eab1d0ca05b3bbb10f60c1839dc471fc1c9e1507bef3386"}, + {file = "pyzmq-27.1.0-cp310-cp310-win32.whl", hash = "sha256:a5b42d7a0658b515319148875fcb782bbf118dd41c671b62dae33666c2213bda"}, + {file = "pyzmq-27.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:c0bb87227430ee3aefcc0ade2088100e528d5d3298a0a715a64f3d04c60ba02f"}, + {file = "pyzmq-27.1.0-cp310-cp310-win_arm64.whl", hash = "sha256:9a916f76c2ab8d045b19f2286851a38e9ac94ea91faf65bd64735924522a8b32"}, + {file = "pyzmq-27.1.0-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:226b091818d461a3bef763805e75685e478ac17e9008f49fce2d3e52b3d58b86"}, + {file = "pyzmq-27.1.0-cp311-cp311-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:0790a0161c281ca9723f804871b4027f2e8b5a528d357c8952d08cd1a9c15581"}, + {file = "pyzmq-27.1.0-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c895a6f35476b0c3a54e3eb6ccf41bf3018de937016e6e18748317f25d4e925f"}, + {file = "pyzmq-27.1.0-cp311-cp311-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5bbf8d3630bf96550b3be8e1fc0fea5cbdc8d5466c1192887bd94869da17a63e"}, + {file = "pyzmq-27.1.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:15c8bd0fe0dabf808e2d7a681398c4e5ded70a551ab47482067a572c054c8e2e"}, + {file = "pyzmq-27.1.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:bafcb3dd171b4ae9f19ee6380dfc71ce0390fefaf26b504c0e5f628d7c8c54f2"}, + {file = "pyzmq-27.1.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:e829529fcaa09937189178115c49c504e69289abd39967cd8a4c215761373394"}, + {file = "pyzmq-27.1.0-cp311-cp311-win32.whl", hash = "sha256:6df079c47d5902af6db298ec92151db82ecb557af663098b92f2508c398bb54f"}, + {file = "pyzmq-27.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:190cbf120fbc0fc4957b56866830def56628934a9d112aec0e2507aa6a032b97"}, + {file = "pyzmq-27.1.0-cp311-cp311-win_arm64.whl", hash = "sha256:eca6b47df11a132d1745eb3b5b5e557a7dae2c303277aa0e69c6ba91b8736e07"}, + {file = "pyzmq-27.1.0-cp312-abi3-macosx_10_15_universal2.whl", hash = "sha256:452631b640340c928fa343801b0d07eb0c3789a5ffa843f6e1a9cee0ba4eb4fc"}, + {file = "pyzmq-27.1.0-cp312-abi3-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:1c179799b118e554b66da67d88ed66cd37a169f1f23b5d9f0a231b4e8d44a113"}, + {file = "pyzmq-27.1.0-cp312-abi3-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3837439b7f99e60312f0c926a6ad437b067356dc2bc2ec96eb395fd0fe804233"}, + {file = "pyzmq-27.1.0-cp312-abi3-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:43ad9a73e3da1fab5b0e7e13402f0b2fb934ae1c876c51d0afff0e7c052eca31"}, + {file = "pyzmq-27.1.0-cp312-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:0de3028d69d4cdc475bfe47a6128eb38d8bc0e8f4d69646adfbcd840facbac28"}, + {file = "pyzmq-27.1.0-cp312-abi3-musllinux_1_2_i686.whl", hash = "sha256:cf44a7763aea9298c0aa7dbf859f87ed7012de8bda0f3977b6fb1d96745df856"}, + {file = "pyzmq-27.1.0-cp312-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:f30f395a9e6fbca195400ce833c731e7b64c3919aa481af4d88c3759e0cb7496"}, + {file = "pyzmq-27.1.0-cp312-abi3-win32.whl", hash = "sha256:250e5436a4ba13885494412b3da5d518cd0d3a278a1ae640e113c073a5f88edd"}, + {file = "pyzmq-27.1.0-cp312-abi3-win_amd64.whl", hash = "sha256:9ce490cf1d2ca2ad84733aa1d69ce6855372cb5ce9223802450c9b2a7cba0ccf"}, + {file = "pyzmq-27.1.0-cp312-abi3-win_arm64.whl", hash = "sha256:75a2f36223f0d535a0c919e23615fc85a1e23b71f40c7eb43d7b1dedb4d8f15f"}, + {file = "pyzmq-27.1.0-cp313-cp313-android_24_arm64_v8a.whl", hash = "sha256:93ad4b0855a664229559e45c8d23797ceac03183c7b6f5b4428152a6b06684a5"}, + {file = "pyzmq-27.1.0-cp313-cp313-android_24_x86_64.whl", hash = "sha256:fbb4f2400bfda24f12f009cba62ad5734148569ff4949b1b6ec3b519444342e6"}, + {file = "pyzmq-27.1.0-cp313-cp313t-macosx_10_15_universal2.whl", hash = "sha256:e343d067f7b151cfe4eb3bb796a7752c9d369eed007b91231e817071d2c2fec7"}, + {file = "pyzmq-27.1.0-cp313-cp313t-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:08363b2011dec81c354d694bdecaef4770e0ae96b9afea70b3f47b973655cc05"}, + {file = "pyzmq-27.1.0-cp313-cp313t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d54530c8c8b5b8ddb3318f481297441af102517602b569146185fa10b63f4fa9"}, + {file = "pyzmq-27.1.0-cp313-cp313t-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6f3afa12c392f0a44a2414056d730eebc33ec0926aae92b5ad5cf26ebb6cc128"}, + {file = "pyzmq-27.1.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:c65047adafe573ff023b3187bb93faa583151627bc9c51fc4fb2c561ed689d39"}, + {file = "pyzmq-27.1.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:90e6e9441c946a8b0a667356f7078d96411391a3b8f80980315455574177ec97"}, + {file = "pyzmq-27.1.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:add071b2d25f84e8189aaf0882d39a285b42fa3853016ebab234a5e78c7a43db"}, + {file = "pyzmq-27.1.0-cp313-cp313t-win32.whl", hash = "sha256:7ccc0700cfdf7bd487bea8d850ec38f204478681ea02a582a8da8171b7f90a1c"}, + {file = "pyzmq-27.1.0-cp313-cp313t-win_amd64.whl", hash = "sha256:8085a9fba668216b9b4323be338ee5437a235fe275b9d1610e422ccc279733e2"}, + {file = "pyzmq-27.1.0-cp313-cp313t-win_arm64.whl", hash = "sha256:6bb54ca21bcfe361e445256c15eedf083f153811c37be87e0514934d6913061e"}, + {file = "pyzmq-27.1.0-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:ce980af330231615756acd5154f29813d553ea555485ae712c491cd483df6b7a"}, + {file = "pyzmq-27.1.0-cp314-cp314t-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:1779be8c549e54a1c38f805e56d2a2e5c009d26de10921d7d51cfd1c8d4632ea"}, + {file = "pyzmq-27.1.0-cp314-cp314t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7200bb0f03345515df50d99d3db206a0a6bee1955fbb8c453c76f5bf0e08fb96"}, + {file = "pyzmq-27.1.0-cp314-cp314t-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:01c0e07d558b06a60773744ea6251f769cd79a41a97d11b8bf4ab8f034b0424d"}, + {file = "pyzmq-27.1.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:80d834abee71f65253c91540445d37c4c561e293ba6e741b992f20a105d69146"}, + {file = "pyzmq-27.1.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:544b4e3b7198dde4a62b8ff6685e9802a9a1ebf47e77478a5eb88eca2a82f2fd"}, + {file = "pyzmq-27.1.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:cedc4c68178e59a4046f97eca31b148ddcf51e88677de1ef4e78cf06c5376c9a"}, + {file = "pyzmq-27.1.0-cp314-cp314t-win32.whl", hash = "sha256:1f0b2a577fd770aa6f053211a55d1c47901f4d537389a034c690291485e5fe92"}, + {file = "pyzmq-27.1.0-cp314-cp314t-win_amd64.whl", hash = "sha256:19c9468ae0437f8074af379e986c5d3d7d7bfe033506af442e8c879732bedbe0"}, + {file = "pyzmq-27.1.0-cp314-cp314t-win_arm64.whl", hash = "sha256:dc5dbf68a7857b59473f7df42650c621d7e8923fb03fa74a526890f4d33cc4d7"}, + {file = "pyzmq-27.1.0-cp38-cp38-macosx_10_15_universal2.whl", hash = "sha256:18339186c0ed0ce5835f2656cdfb32203125917711af64da64dbaa3d949e5a1b"}, + {file = "pyzmq-27.1.0-cp38-cp38-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:753d56fba8f70962cd8295fb3edb40b9b16deaa882dd2b5a3a2039f9ff7625aa"}, + {file = "pyzmq-27.1.0-cp38-cp38-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:b721c05d932e5ad9ff9344f708c96b9e1a485418c6618d765fca95d4daacfbef"}, + {file = "pyzmq-27.1.0-cp38-cp38-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7be883ff3d722e6085ee3f4afc057a50f7f2e0c72d289fd54df5706b4e3d3a50"}, + {file = "pyzmq-27.1.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:b2e592db3a93128daf567de9650a2f3859017b3f7a66bc4ed6e4779d6034976f"}, + {file = "pyzmq-27.1.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:ad68808a61cbfbbae7ba26d6233f2a4aa3b221de379ce9ee468aa7a83b9c36b0"}, + {file = "pyzmq-27.1.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:e2687c2d230e8d8584fbea433c24382edfeda0c60627aca3446aa5e58d5d1831"}, + {file = "pyzmq-27.1.0-cp38-cp38-win32.whl", hash = "sha256:a1aa0ee920fb3825d6c825ae3f6c508403b905b698b6460408ebd5bb04bbb312"}, + {file = "pyzmq-27.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:df7cd397ece96cf20a76fae705d40efbab217d217897a5053267cd88a700c266"}, + {file = "pyzmq-27.1.0-cp39-cp39-macosx_10_15_universal2.whl", hash = "sha256:96c71c32fff75957db6ae33cd961439f386505c6e6b377370af9b24a1ef9eafb"}, + {file = "pyzmq-27.1.0-cp39-cp39-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:49d3980544447f6bd2968b6ac913ab963a49dcaa2d4a2990041f16057b04c429"}, + {file = "pyzmq-27.1.0-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:849ca054d81aa1c175c49484afaaa5db0622092b5eccb2055f9f3bb8f703782d"}, + {file = "pyzmq-27.1.0-cp39-cp39-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3970778e74cb7f85934d2b926b9900e92bfe597e62267d7499acc39c9c28e345"}, + {file = "pyzmq-27.1.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:da96ecdcf7d3919c3be2de91a8c513c186f6762aa6cf7c01087ed74fad7f0968"}, + {file = "pyzmq-27.1.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:9541c444cfe1b1c0156c5c86ece2bb926c7079a18e7b47b0b1b3b1b875e5d098"}, + {file = "pyzmq-27.1.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:e30a74a39b93e2e1591b58eb1acef4902be27c957a8720b0e368f579b82dc22f"}, + {file = "pyzmq-27.1.0-cp39-cp39-win32.whl", hash = "sha256:b1267823d72d1e40701dcba7edc45fd17f71be1285557b7fe668887150a14b78"}, + {file = "pyzmq-27.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:0c996ded912812a2fcd7ab6574f4ad3edc27cb6510349431e4930d4196ade7db"}, + {file = "pyzmq-27.1.0-cp39-cp39-win_arm64.whl", hash = "sha256:346e9ba4198177a07e7706050f35d733e08c1c1f8ceacd5eb6389d653579ffbc"}, + {file = "pyzmq-27.1.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:c17e03cbc9312bee223864f1a2b13a99522e0dc9f7c5df0177cd45210ac286e6"}, + {file = "pyzmq-27.1.0-pp310-pypy310_pp73-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:f328d01128373cb6763823b2b4e7f73bdf767834268c565151eacb3b7a392f90"}, + {file = "pyzmq-27.1.0-pp310-pypy310_pp73-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9c1790386614232e1b3a40a958454bdd42c6d1811837b15ddbb052a032a43f62"}, + {file = "pyzmq-27.1.0-pp310-pypy310_pp73-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:448f9cb54eb0cee4732b46584f2710c8bc178b0e5371d9e4fc8125201e413a74"}, + {file = "pyzmq-27.1.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:05b12f2d32112bf8c95ef2e74ec4f1d4beb01f8b5e703b38537f8849f92cb9ba"}, + {file = "pyzmq-27.1.0-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:18770c8d3563715387139060d37859c02ce40718d1faf299abddcdcc6a649066"}, + {file = "pyzmq-27.1.0-pp311-pypy311_pp73-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:ac25465d42f92e990f8d8b0546b01c391ad431c3bf447683fdc40565941d0604"}, + {file = "pyzmq-27.1.0-pp311-pypy311_pp73-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:53b40f8ae006f2734ee7608d59ed661419f087521edbfc2149c3932e9c14808c"}, + {file = "pyzmq-27.1.0-pp311-pypy311_pp73-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f605d884e7c8be8fe1aa94e0a783bf3f591b84c24e4bc4f3e7564c82ac25e271"}, + {file = "pyzmq-27.1.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:c9f7f6e13dff2e44a6afeaf2cf54cee5929ad64afaf4d40b50f93c58fc687355"}, + {file = "pyzmq-27.1.0-pp38-pypy38_pp73-macosx_10_15_x86_64.whl", hash = "sha256:50081a4e98472ba9f5a02850014b4c9b629da6710f8f14f3b15897c666a28f1b"}, + {file = "pyzmq-27.1.0-pp38-pypy38_pp73-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:510869f9df36ab97f89f4cff9d002a89ac554c7ac9cadd87d444aa4cf66abd27"}, + {file = "pyzmq-27.1.0-pp38-pypy38_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:1f8426a01b1c4098a750973c37131cf585f61c7911d735f729935a0c701b68d3"}, + {file = "pyzmq-27.1.0-pp38-pypy38_pp73-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:726b6a502f2e34c6d2ada5e702929586d3ac948a4dbbb7fed9854ec8c0466027"}, + {file = "pyzmq-27.1.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:bd67e7c8f4654bef471c0b1ca6614af0b5202a790723a58b79d9584dc8022a78"}, + {file = "pyzmq-27.1.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:722ea791aa233ac0a819fc2c475e1292c76930b31f1d828cb61073e2fe5e208f"}, + {file = "pyzmq-27.1.0-pp39-pypy39_pp73-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:01f9437501886d3a1dd4b02ef59fb8cc384fa718ce066d52f175ee49dd5b7ed8"}, + {file = "pyzmq-27.1.0-pp39-pypy39_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:4a19387a3dddcc762bfd2f570d14e2395b2c9701329b266f83dd87a2b3cbd381"}, + {file = "pyzmq-27.1.0-pp39-pypy39_pp73-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4c618fbcd069e3a29dcd221739cacde52edcc681f041907867e0f5cc7e85f172"}, + {file = "pyzmq-27.1.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:ff8d114d14ac671d88c89b9224c63d6c4e5a613fe8acd5594ce53d752a3aafe9"}, + {file = "pyzmq-27.1.0.tar.gz", hash = "sha256:ac0765e3d44455adb6ddbf4417dcce460fc40a05978c08efdf2948072f6db540"}, ] [package.dependencies] @@ -3812,19 +3844,20 @@ cffi = {version = "*", markers = "implementation_name == \"pypy\""} [[package]] name = "requests" -version = "2.32.3" +version = "2.32.5" description = "Python HTTP for Humans." optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" groups = ["main"] +markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ - {file = "requests-2.32.3-py3-none-any.whl", hash = "sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6"}, - {file = "requests-2.32.3.tar.gz", hash = "sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760"}, + {file = "requests-2.32.5-py3-none-any.whl", hash = "sha256:2462f94637a34fd532264295e186976db0f5d453d1cdd31473c85a6a161affb6"}, + {file = "requests-2.32.5.tar.gz", hash = "sha256:dbba0bac56e100853db0ea71b82b4dfd5fe2bf6d3754a8893c3af500cec7d7cf"}, ] [package.dependencies] certifi = ">=2017.4.17" -charset-normalizer = ">=2,<4" +charset_normalizer = ">=2,<4" idna = ">=2.5,<4" urllib3 = ">=1.21.1,<3" @@ -3832,26 +3865,6 @@ urllib3 = ">=1.21.1,<3" socks = ["PySocks (>=1.5.6,!=1.5.7)"] use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] -[[package]] -name = "rich" -version = "14.0.0" -description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" -optional = false -python-versions = ">=3.8.0" -groups = ["main"] -files = [ - {file = "rich-14.0.0-py3-none-any.whl", hash = "sha256:1c9491e1951aac09caffd42f448ee3d04e58923ffe14993f6e83068dc395d7e0"}, - {file = "rich-14.0.0.tar.gz", hash = "sha256:82f1bc23a6a21ebca4ae0c45af9bdbc492ed20231dcb63f297d6d1021a9d5725"}, -] - -[package.dependencies] -markdown-it-py = ">=2.2.0" -pygments = ">=2.13.0,<3.0.0" -typing-extensions = {version = ">=4.0.0,<5.0", markers = "python_version < \"3.11\""} - -[package.extras] -jupyter = ["ipywidgets (>=7.5.1,<9)"] - [[package]] name = "salib" version = "1.5.1" @@ -3859,6 +3872,7 @@ description = "Tools for global sensitivity analysis. Contains Sobol', Morris, F optional = false python-versions = ">=3.9" groups = ["main"] +markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "salib-1.5.1-py3-none-any.whl", hash = "sha256:a978b619c5a93eb14dd8c527f12e22d354b02f1f7143aba3cb84c1c7bc1382e5"}, {file = "salib-1.5.1.tar.gz", hash = "sha256:e4a9c319b8dd02995a8dc983f57c452cb7e5b6dbd43e7b7856c90cb6a332bb5f"}, @@ -3879,158 +3893,179 @@ test = ["pathos (>=0.3.2)", "pytest", "pytest-cov"] [[package]] name = "scikit-learn" -version = "1.6.1" +version = "1.7.2" description = "A set of python modules for machine learning and data mining" optional = false -python-versions = ">=3.9" +python-versions = ">=3.10" groups = ["main"] -files = [ - {file = "scikit_learn-1.6.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d056391530ccd1e501056160e3c9673b4da4805eb67eb2bdf4e983e1f9c9204e"}, - {file = "scikit_learn-1.6.1-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:0c8d036eb937dbb568c6242fa598d551d88fb4399c0344d95c001980ec1c7d36"}, - {file = "scikit_learn-1.6.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8634c4bd21a2a813e0a7e3900464e6d593162a29dd35d25bdf0103b3fce60ed5"}, - {file = "scikit_learn-1.6.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:775da975a471c4f6f467725dff0ced5c7ac7bda5e9316b260225b48475279a1b"}, - {file = "scikit_learn-1.6.1-cp310-cp310-win_amd64.whl", hash = "sha256:8a600c31592bd7dab31e1c61b9bbd6dea1b3433e67d264d17ce1017dbdce8002"}, - {file = "scikit_learn-1.6.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:72abc587c75234935e97d09aa4913a82f7b03ee0b74111dcc2881cba3c5a7b33"}, - {file = "scikit_learn-1.6.1-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:b3b00cdc8f1317b5f33191df1386c0befd16625f49d979fe77a8d44cae82410d"}, - {file = "scikit_learn-1.6.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dc4765af3386811c3ca21638f63b9cf5ecf66261cc4815c1db3f1e7dc7b79db2"}, - {file = "scikit_learn-1.6.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:25fc636bdaf1cc2f4a124a116312d837148b5e10872147bdaf4887926b8c03d8"}, - {file = "scikit_learn-1.6.1-cp311-cp311-win_amd64.whl", hash = "sha256:fa909b1a36e000a03c382aade0bd2063fd5680ff8b8e501660c0f59f021a6415"}, - {file = "scikit_learn-1.6.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:926f207c804104677af4857b2c609940b743d04c4c35ce0ddc8ff4f053cddc1b"}, - {file = "scikit_learn-1.6.1-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:2c2cae262064e6a9b77eee1c8e768fc46aa0b8338c6a8297b9b6759720ec0ff2"}, - {file = "scikit_learn-1.6.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1061b7c028a8663fb9a1a1baf9317b64a257fcb036dae5c8752b2abef31d136f"}, - {file = "scikit_learn-1.6.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2e69fab4ebfc9c9b580a7a80111b43d214ab06250f8a7ef590a4edf72464dd86"}, - {file = "scikit_learn-1.6.1-cp312-cp312-win_amd64.whl", hash = "sha256:70b1d7e85b1c96383f872a519b3375f92f14731e279a7b4c6cfd650cf5dffc52"}, - {file = "scikit_learn-1.6.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:2ffa1e9e25b3d93990e74a4be2c2fc61ee5af85811562f1288d5d055880c4322"}, - {file = "scikit_learn-1.6.1-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:dc5cf3d68c5a20ad6d571584c0750ec641cc46aeef1c1507be51300e6003a7e1"}, - {file = "scikit_learn-1.6.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c06beb2e839ecc641366000ca84f3cf6fa9faa1777e29cf0c04be6e4d096a348"}, - {file = "scikit_learn-1.6.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e8ca8cb270fee8f1f76fa9bfd5c3507d60c6438bbee5687f81042e2bb98e5a97"}, - {file = "scikit_learn-1.6.1-cp313-cp313-win_amd64.whl", hash = "sha256:7a1c43c8ec9fde528d664d947dc4c0789be4077a3647f232869f41d9bf50e0fb"}, - {file = "scikit_learn-1.6.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:a17c1dea1d56dcda2fac315712f3651a1fea86565b64b48fa1bc090249cbf236"}, - {file = "scikit_learn-1.6.1-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:6a7aa5f9908f0f28f4edaa6963c0a6183f1911e63a69aa03782f0d924c830a35"}, - {file = "scikit_learn-1.6.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0650e730afb87402baa88afbf31c07b84c98272622aaba002559b614600ca691"}, - {file = "scikit_learn-1.6.1-cp313-cp313t-win_amd64.whl", hash = "sha256:3f59fe08dc03ea158605170eb52b22a105f238a5d512c4470ddeca71feae8e5f"}, - {file = "scikit_learn-1.6.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6849dd3234e87f55dce1db34c89a810b489ead832aaf4d4550b7ea85628be6c1"}, - {file = "scikit_learn-1.6.1-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:e7be3fa5d2eb9be7d77c3734ff1d599151bb523674be9b834e8da6abe132f44e"}, - {file = "scikit_learn-1.6.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:44a17798172df1d3c1065e8fcf9019183f06c87609b49a124ebdf57ae6cb0107"}, - {file = "scikit_learn-1.6.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b8b7a3b86e411e4bce21186e1c180d792f3d99223dcfa3b4f597ecc92fa1a422"}, - {file = "scikit_learn-1.6.1-cp39-cp39-win_amd64.whl", hash = "sha256:7a73d457070e3318e32bdb3aa79a8d990474f19035464dfd8bede2883ab5dc3b"}, - {file = "scikit_learn-1.6.1.tar.gz", hash = "sha256:b4fc2525eca2c69a59260f583c56a7557c6ccdf8deafdba6e060f94c1c59738e"}, +markers = "python_version == \"3.10\" and (sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\")" +files = [ + {file = "scikit_learn-1.7.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6b33579c10a3081d076ab403df4a4190da4f4432d443521674637677dc91e61f"}, + {file = "scikit_learn-1.7.2-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:36749fb62b3d961b1ce4fedf08fa57a1986cd409eff2d783bca5d4b9b5fce51c"}, + {file = "scikit_learn-1.7.2-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:7a58814265dfc52b3295b1900cfb5701589d30a8bb026c7540f1e9d3499d5ec8"}, + {file = "scikit_learn-1.7.2-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4a847fea807e278f821a0406ca01e387f97653e284ecbd9750e3ee7c90347f18"}, + {file = "scikit_learn-1.7.2-cp310-cp310-win_amd64.whl", hash = "sha256:ca250e6836d10e6f402436d6463d6c0e4d8e0234cfb6a9a47835bd392b852ce5"}, + {file = "scikit_learn-1.7.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c7509693451651cd7361d30ce4e86a1347493554f172b1c72a39300fa2aea79e"}, + {file = "scikit_learn-1.7.2-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:0486c8f827c2e7b64837c731c8feff72c0bd2b998067a8a9cbc10643c31f0fe1"}, + {file = "scikit_learn-1.7.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:89877e19a80c7b11a2891a27c21c4894fb18e2c2e077815bcade10d34287b20d"}, + {file = "scikit_learn-1.7.2-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8da8bf89d4d79aaec192d2bda62f9b56ae4e5b4ef93b6a56b5de4977e375c1f1"}, + {file = "scikit_learn-1.7.2-cp311-cp311-win_amd64.whl", hash = "sha256:9b7ed8d58725030568523e937c43e56bc01cadb478fc43c042a9aca1dacb3ba1"}, + {file = "scikit_learn-1.7.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:8d91a97fa2b706943822398ab943cde71858a50245e31bc71dba62aab1d60a96"}, + {file = "scikit_learn-1.7.2-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:acbc0f5fd2edd3432a22c69bed78e837c70cf896cd7993d71d51ba6708507476"}, + {file = "scikit_learn-1.7.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:e5bf3d930aee75a65478df91ac1225ff89cd28e9ac7bd1196853a9229b6adb0b"}, + {file = "scikit_learn-1.7.2-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b4d6e9deed1a47aca9fe2f267ab8e8fe82ee20b4526b2c0cd9e135cea10feb44"}, + {file = "scikit_learn-1.7.2-cp312-cp312-win_amd64.whl", hash = "sha256:6088aa475f0785e01bcf8529f55280a3d7d298679f50c0bb70a2364a82d0b290"}, + {file = "scikit_learn-1.7.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:0b7dacaa05e5d76759fb071558a8b5130f4845166d88654a0f9bdf3eb57851b7"}, + {file = "scikit_learn-1.7.2-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:abebbd61ad9e1deed54cca45caea8ad5f79e1b93173dece40bb8e0c658dbe6fe"}, + {file = "scikit_learn-1.7.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:502c18e39849c0ea1a5d681af1dbcf15f6cce601aebb657aabbfe84133c1907f"}, + {file = "scikit_learn-1.7.2-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7a4c328a71785382fe3fe676a9ecf2c86189249beff90bf85e22bdb7efaf9ae0"}, + {file = "scikit_learn-1.7.2-cp313-cp313-win_amd64.whl", hash = "sha256:63a9afd6f7b229aad94618c01c252ce9e6fa97918c5ca19c9a17a087d819440c"}, + {file = "scikit_learn-1.7.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:9acb6c5e867447b4e1390930e3944a005e2cb115922e693c08a323421a6966e8"}, + {file = "scikit_learn-1.7.2-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:2a41e2a0ef45063e654152ec9d8bcfc39f7afce35b08902bfe290c2498a67a6a"}, + {file = "scikit_learn-1.7.2-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:98335fb98509b73385b3ab2bd0639b1f610541d3988ee675c670371d6a87aa7c"}, + {file = "scikit_learn-1.7.2-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:191e5550980d45449126e23ed1d5e9e24b2c68329ee1f691a3987476e115e09c"}, + {file = "scikit_learn-1.7.2-cp313-cp313t-win_amd64.whl", hash = "sha256:57dc4deb1d3762c75d685507fbd0bc17160144b2f2ba4ccea5dc285ab0d0e973"}, + {file = "scikit_learn-1.7.2-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:fa8f63940e29c82d1e67a45d5297bdebbcb585f5a5a50c4914cc2e852ab77f33"}, + {file = "scikit_learn-1.7.2-cp314-cp314-macosx_12_0_arm64.whl", hash = "sha256:f95dc55b7902b91331fa4e5845dd5bde0580c9cd9612b1b2791b7e80c3d32615"}, + {file = "scikit_learn-1.7.2-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:9656e4a53e54578ad10a434dc1f993330568cfee176dff07112b8785fb413106"}, + {file = "scikit_learn-1.7.2-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:96dc05a854add0e50d3f47a1ef21a10a595016da5b007c7d9cd9d0bffd1fcc61"}, + {file = "scikit_learn-1.7.2-cp314-cp314-win_amd64.whl", hash = "sha256:bb24510ed3f9f61476181e4db51ce801e2ba37541def12dc9333b946fc7a9cf8"}, + {file = "scikit_learn-1.7.2.tar.gz", hash = "sha256:20e9e49ecd130598f1ca38a1d85090e1a600147b9c02fa6f15d69cb53d968fda"}, ] [package.dependencies] joblib = ">=1.2.0" -numpy = ">=1.19.5" -scipy = ">=1.6.0" +numpy = ">=1.22.0" +scipy = ">=1.8.0" threadpoolctl = ">=3.1.0" [package.extras] -benchmark = ["matplotlib (>=3.3.4)", "memory_profiler (>=0.57.0)", "pandas (>=1.1.5)"] -build = ["cython (>=3.0.10)", "meson-python (>=0.16.0)", "numpy (>=1.19.5)", "scipy (>=1.6.0)"] -docs = ["Pillow (>=7.1.2)", "matplotlib (>=3.3.4)", "memory_profiler (>=0.57.0)", "numpydoc (>=1.2.0)", "pandas (>=1.1.5)", "plotly (>=5.14.0)", "polars (>=0.20.30)", "pooch (>=1.6.0)", "pydata-sphinx-theme (>=0.15.3)", "scikit-image (>=0.17.2)", "seaborn (>=0.9.0)", "sphinx (>=7.3.7)", "sphinx-copybutton (>=0.5.2)", "sphinx-design (>=0.5.0)", "sphinx-design (>=0.6.0)", "sphinx-gallery (>=0.17.1)", "sphinx-prompt (>=1.4.0)", "sphinx-remove-toctrees (>=1.0.0.post1)", "sphinxcontrib-sass (>=0.3.4)", "sphinxext-opengraph (>=0.9.1)", "towncrier (>=24.8.0)"] -examples = ["matplotlib (>=3.3.4)", "pandas (>=1.1.5)", "plotly (>=5.14.0)", "pooch (>=1.6.0)", "scikit-image (>=0.17.2)", "seaborn (>=0.9.0)"] -install = ["joblib (>=1.2.0)", "numpy (>=1.19.5)", "scipy (>=1.6.0)", "threadpoolctl (>=3.1.0)"] -maintenance = ["conda-lock (==2.5.6)"] -tests = ["black (>=24.3.0)", "matplotlib (>=3.3.4)", "mypy (>=1.9)", "numpydoc (>=1.2.0)", "pandas (>=1.1.5)", "polars (>=0.20.30)", "pooch (>=1.6.0)", "pyamg (>=4.0.0)", "pyarrow (>=12.0.0)", "pytest (>=7.1.2)", "pytest-cov (>=2.9.0)", "ruff (>=0.5.1)", "scikit-image (>=0.17.2)"] +benchmark = ["matplotlib (>=3.5.0)", "memory_profiler (>=0.57.0)", "pandas (>=1.4.0)"] +build = ["cython (>=3.0.10)", "meson-python (>=0.17.1)", "numpy (>=1.22.0)", "scipy (>=1.8.0)"] +docs = ["Pillow (>=8.4.0)", "matplotlib (>=3.5.0)", "memory_profiler (>=0.57.0)", "numpydoc (>=1.2.0)", "pandas (>=1.4.0)", "plotly (>=5.14.0)", "polars (>=0.20.30)", "pooch (>=1.6.0)", "pydata-sphinx-theme (>=0.15.3)", "scikit-image (>=0.19.0)", "seaborn (>=0.9.0)", "sphinx (>=7.3.7)", "sphinx-copybutton (>=0.5.2)", "sphinx-design (>=0.5.0)", "sphinx-design (>=0.6.0)", "sphinx-gallery (>=0.17.1)", "sphinx-prompt (>=1.4.0)", "sphinx-remove-toctrees (>=1.0.0.post1)", "sphinxcontrib-sass (>=0.3.4)", "sphinxext-opengraph (>=0.9.1)", "towncrier (>=24.8.0)"] +examples = ["matplotlib (>=3.5.0)", "pandas (>=1.4.0)", "plotly (>=5.14.0)", "pooch (>=1.6.0)", "scikit-image (>=0.19.0)", "seaborn (>=0.9.0)"] +install = ["joblib (>=1.2.0)", "numpy (>=1.22.0)", "scipy (>=1.8.0)", "threadpoolctl (>=3.1.0)"] +maintenance = ["conda-lock (==3.0.1)"] +tests = ["matplotlib (>=3.5.0)", "mypy (>=1.15)", "numpydoc (>=1.2.0)", "pandas (>=1.4.0)", "polars (>=0.20.30)", "pooch (>=1.6.0)", "pyamg (>=4.2.1)", "pyarrow (>=12.0.0)", "pytest (>=7.1.2)", "pytest-cov (>=2.9.0)", "ruff (>=0.11.7)", "scikit-image (>=0.19.0)"] [[package]] -name = "scipy" -version = "1.13.1" -description = "Fundamental algorithms for scientific computing in Python" +name = "scikit-learn" +version = "1.8.0" +description = "A set of python modules for machine learning and data mining" optional = false -python-versions = ">=3.9" +python-versions = ">=3.11" groups = ["main"] -markers = "python_version < \"3.11\"" -files = [ - {file = "scipy-1.13.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:20335853b85e9a49ff7572ab453794298bcf0354d8068c5f6775a0eabf350aca"}, - {file = "scipy-1.13.1-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:d605e9c23906d1994f55ace80e0125c587f96c020037ea6aa98d01b4bd2e222f"}, - {file = "scipy-1.13.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cfa31f1def5c819b19ecc3a8b52d28ffdcc7ed52bb20c9a7589669dd3c250989"}, - {file = "scipy-1.13.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f26264b282b9da0952a024ae34710c2aff7d27480ee91a2e82b7b7073c24722f"}, - {file = "scipy-1.13.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:eccfa1906eacc02de42d70ef4aecea45415f5be17e72b61bafcfd329bdc52e94"}, - {file = "scipy-1.13.1-cp310-cp310-win_amd64.whl", hash = "sha256:2831f0dc9c5ea9edd6e51e6e769b655f08ec6db6e2e10f86ef39bd32eb11da54"}, - {file = "scipy-1.13.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:27e52b09c0d3a1d5b63e1105f24177e544a222b43611aaf5bc44d4a0979e32f9"}, - {file = "scipy-1.13.1-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:54f430b00f0133e2224c3ba42b805bfd0086fe488835effa33fa291561932326"}, - {file = "scipy-1.13.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e89369d27f9e7b0884ae559a3a956e77c02114cc60a6058b4e5011572eea9299"}, - {file = "scipy-1.13.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a78b4b3345f1b6f68a763c6e25c0c9a23a9fd0f39f5f3d200efe8feda560a5fa"}, - {file = "scipy-1.13.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:45484bee6d65633752c490404513b9ef02475b4284c4cfab0ef946def50b3f59"}, - {file = "scipy-1.13.1-cp311-cp311-win_amd64.whl", hash = "sha256:5713f62f781eebd8d597eb3f88b8bf9274e79eeabf63afb4a737abc6c84ad37b"}, - {file = "scipy-1.13.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:5d72782f39716b2b3509cd7c33cdc08c96f2f4d2b06d51e52fb45a19ca0c86a1"}, - {file = "scipy-1.13.1-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:017367484ce5498445aade74b1d5ab377acdc65e27095155e448c88497755a5d"}, - {file = "scipy-1.13.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:949ae67db5fa78a86e8fa644b9a6b07252f449dcf74247108c50e1d20d2b4627"}, - {file = "scipy-1.13.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de3ade0e53bc1f21358aa74ff4830235d716211d7d077e340c7349bc3542e884"}, - {file = "scipy-1.13.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:2ac65fb503dad64218c228e2dc2d0a0193f7904747db43014645ae139c8fad16"}, - {file = "scipy-1.13.1-cp312-cp312-win_amd64.whl", hash = "sha256:cdd7dacfb95fea358916410ec61bbc20440f7860333aee6d882bb8046264e949"}, - {file = "scipy-1.13.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:436bbb42a94a8aeef855d755ce5a465479c721e9d684de76bf61a62e7c2b81d5"}, - {file = "scipy-1.13.1-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:8335549ebbca860c52bf3d02f80784e91a004b71b059e3eea9678ba994796a24"}, - {file = "scipy-1.13.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d533654b7d221a6a97304ab63c41c96473ff04459e404b83275b60aa8f4b7004"}, - {file = "scipy-1.13.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:637e98dcf185ba7f8e663e122ebf908c4702420477ae52a04f9908707456ba4d"}, - {file = "scipy-1.13.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a014c2b3697bde71724244f63de2476925596c24285c7a637364761f8710891c"}, - {file = "scipy-1.13.1-cp39-cp39-win_amd64.whl", hash = "sha256:392e4ec766654852c25ebad4f64e4e584cf19820b980bc04960bca0b0cd6eaa2"}, - {file = "scipy-1.13.1.tar.gz", hash = "sha256:095a87a0312b08dfd6a6155cbbd310a8c51800fc931b8c0b84003014b874ed3c"}, +markers = "(sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\") and python_version >= \"3.11\"" +files = [ + {file = "scikit_learn-1.8.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:146b4d36f800c013d267b29168813f7a03a43ecd2895d04861f1240b564421da"}, + {file = "scikit_learn-1.8.0-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:f984ca4b14914e6b4094c5d52a32ea16b49832c03bd17a110f004db3c223e8e1"}, + {file = "scikit_learn-1.8.0-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5e30adb87f0cc81c7690a84f7932dd66be5bac57cfe16b91cb9151683a4a2d3b"}, + {file = "scikit_learn-1.8.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ada8121bcb4dac28d930febc791a69f7cb1673c8495e5eee274190b73a4559c1"}, + {file = "scikit_learn-1.8.0-cp311-cp311-win_amd64.whl", hash = "sha256:c57b1b610bd1f40ba43970e11ce62821c2e6569e4d74023db19c6b26f246cb3b"}, + {file = "scikit_learn-1.8.0-cp311-cp311-win_arm64.whl", hash = "sha256:2838551e011a64e3053ad7618dda9310175f7515f1742fa2d756f7c874c05961"}, + {file = "scikit_learn-1.8.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:5fb63362b5a7ddab88e52b6dbb47dac3fd7dafeee740dc6c8d8a446ddedade8e"}, + {file = "scikit_learn-1.8.0-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:5025ce924beccb28298246e589c691fe1b8c1c96507e6d27d12c5fadd85bfd76"}, + {file = "scikit_learn-1.8.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4496bb2cf7a43ce1a2d7524a79e40bc5da45cf598dbf9545b7e8316ccba47bb4"}, + {file = "scikit_learn-1.8.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a0bcfe4d0d14aec44921545fd2af2338c7471de9cb701f1da4c9d85906ab847a"}, + {file = "scikit_learn-1.8.0-cp312-cp312-win_amd64.whl", hash = "sha256:35c007dedb2ffe38fe3ee7d201ebac4a2deccd2408e8621d53067733e3c74809"}, + {file = "scikit_learn-1.8.0-cp312-cp312-win_arm64.whl", hash = "sha256:8c497fff237d7b4e07e9ef1a640887fa4fb765647f86fbe00f969ff6280ce2bb"}, + {file = "scikit_learn-1.8.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:0d6ae97234d5d7079dc0040990a6f7aeb97cb7fa7e8945f1999a429b23569e0a"}, + {file = "scikit_learn-1.8.0-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:edec98c5e7c128328124a029bceb09eda2d526997780fef8d65e9a69eead963e"}, + {file = "scikit_learn-1.8.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:74b66d8689d52ed04c271e1329f0c61635bcaf5b926db9b12d58914cdc01fe57"}, + {file = "scikit_learn-1.8.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8fdf95767f989b0cfedb85f7ed8ca215d4be728031f56ff5a519ee1e3276dc2e"}, + {file = "scikit_learn-1.8.0-cp313-cp313-win_amd64.whl", hash = "sha256:2de443b9373b3b615aec1bb57f9baa6bb3a9bd093f1269ba95c17d870422b271"}, + {file = "scikit_learn-1.8.0-cp313-cp313-win_arm64.whl", hash = "sha256:eddde82a035681427cbedded4e6eff5e57fa59216c2e3e90b10b19ab1d0a65c3"}, + {file = "scikit_learn-1.8.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:7cc267b6108f0a1499a734167282c00c4ebf61328566b55ef262d48e9849c735"}, + {file = "scikit_learn-1.8.0-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:fe1c011a640a9f0791146011dfd3c7d9669785f9fed2b2a5f9e207536cf5c2fd"}, + {file = "scikit_learn-1.8.0-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:72358cce49465d140cc4e7792015bb1f0296a9742d5622c67e31399b75468b9e"}, + {file = "scikit_learn-1.8.0-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:80832434a6cc114f5219211eec13dcbc16c2bac0e31ef64c6d346cde3cf054cb"}, + {file = "scikit_learn-1.8.0-cp313-cp313t-win_amd64.whl", hash = "sha256:ee787491dbfe082d9c3013f01f5991658b0f38aa8177e4cd4bf434c58f551702"}, + {file = "scikit_learn-1.8.0-cp313-cp313t-win_arm64.whl", hash = "sha256:bf97c10a3f5a7543f9b88cbf488d33d175e9146115a451ae34568597ba33dcde"}, + {file = "scikit_learn-1.8.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:c22a2da7a198c28dd1a6e1136f19c830beab7fdca5b3e5c8bba8394f8a5c45b3"}, + {file = "scikit_learn-1.8.0-cp314-cp314-macosx_12_0_arm64.whl", hash = "sha256:6b595b07a03069a2b1740dc08c2299993850ea81cce4fe19b2421e0c970de6b7"}, + {file = "scikit_learn-1.8.0-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:29ffc74089f3d5e87dfca4c2c8450f88bdc61b0fc6ed5d267f3988f19a1309f6"}, + {file = "scikit_learn-1.8.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fb65db5d7531bccf3a4f6bec3462223bea71384e2cda41da0f10b7c292b9e7c4"}, + {file = "scikit_learn-1.8.0-cp314-cp314-win_amd64.whl", hash = "sha256:56079a99c20d230e873ea40753102102734c5953366972a71d5cb39a32bc40c6"}, + {file = "scikit_learn-1.8.0-cp314-cp314-win_arm64.whl", hash = "sha256:3bad7565bc9cf37ce19a7c0d107742b320c1285df7aab1a6e2d28780df167242"}, + {file = "scikit_learn-1.8.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:4511be56637e46c25721e83d1a9cea9614e7badc7040c4d573d75fbe257d6fd7"}, + {file = "scikit_learn-1.8.0-cp314-cp314t-macosx_12_0_arm64.whl", hash = "sha256:a69525355a641bf8ef136a7fa447672fb54fe8d60cab5538d9eb7c6438543fb9"}, + {file = "scikit_learn-1.8.0-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c2656924ec73e5939c76ac4c8b026fc203b83d8900362eb2599d8aee80e4880f"}, + {file = "scikit_learn-1.8.0-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:15fc3b5d19cc2be65404786857f2e13c70c83dd4782676dd6814e3b89dc8f5b9"}, + {file = "scikit_learn-1.8.0-cp314-cp314t-win_amd64.whl", hash = "sha256:00d6f1d66fbcf4eba6e356e1420d33cc06c70a45bb1363cd6f6a8e4ebbbdece2"}, + {file = "scikit_learn-1.8.0-cp314-cp314t-win_arm64.whl", hash = "sha256:f28dd15c6bb0b66ba09728cf09fd8736c304be29409bd8445a080c1280619e8c"}, + {file = "scikit_learn-1.8.0.tar.gz", hash = "sha256:9bccbb3b40e3de10351f8f5068e105d0f4083b1a65fa07b6634fbc401a6287fd"}, ] [package.dependencies] -numpy = ">=1.22.4,<2.3" +joblib = ">=1.3.0" +numpy = ">=1.24.1" +scipy = ">=1.10.0" +threadpoolctl = ">=3.2.0" [package.extras] -dev = ["cython-lint (>=0.12.2)", "doit (>=0.36.0)", "mypy", "pycodestyle", "pydevtool", "rich-click", "ruff", "types-psutil", "typing_extensions"] -doc = ["jupyterlite-pyodide-kernel", "jupyterlite-sphinx (>=0.12.0)", "jupytext", "matplotlib (>=3.5)", "myst-nb", "numpydoc", "pooch", "pydata-sphinx-theme (>=0.15.2)", "sphinx (>=5.0.0)", "sphinx-design (>=0.4.0)"] -test = ["array-api-strict", "asv", "gmpy2", "hypothesis (>=6.30)", "mpmath", "pooch", "pytest", "pytest-cov", "pytest-timeout", "pytest-xdist", "scikit-umfpack", "threadpoolctl"] +benchmark = ["matplotlib (>=3.6.1)", "memory_profiler (>=0.57.0)", "pandas (>=1.5.0)"] +build = ["cython (>=3.1.2)", "meson-python (>=0.17.1)", "numpy (>=1.24.1)", "scipy (>=1.10.0)"] +docs = ["Pillow (>=10.1.0)", "matplotlib (>=3.6.1)", "memory_profiler (>=0.57.0)", "numpydoc (>=1.2.0)", "pandas (>=1.5.0)", "plotly (>=5.18.0)", "polars (>=0.20.30)", "pooch (>=1.8.0)", "pydata-sphinx-theme (>=0.15.3)", "scikit-image (>=0.22.0)", "seaborn (>=0.13.0)", "sphinx (>=7.3.7)", "sphinx-copybutton (>=0.5.2)", "sphinx-design (>=0.6.0)", "sphinx-gallery (>=0.17.1)", "sphinx-prompt (>=1.4.0)", "sphinx-remove-toctrees (>=1.0.0.post1)", "sphinxcontrib-sass (>=0.3.4)", "sphinxext-opengraph (>=0.9.1)", "towncrier (>=24.8.0)"] +examples = ["matplotlib (>=3.6.1)", "pandas (>=1.5.0)", "plotly (>=5.18.0)", "pooch (>=1.8.0)", "scikit-image (>=0.22.0)", "seaborn (>=0.13.0)"] +install = ["joblib (>=1.3.0)", "numpy (>=1.24.1)", "scipy (>=1.10.0)", "threadpoolctl (>=3.2.0)"] +maintenance = ["conda-lock (==3.0.1)"] +tests = ["matplotlib (>=3.6.1)", "mypy (>=1.15)", "numpydoc (>=1.2.0)", "pandas (>=1.5.0)", "polars (>=0.20.30)", "pooch (>=1.8.0)", "pyamg (>=5.0.0)", "pyarrow (>=12.0.0)", "pytest (>=7.1.2)", "pytest-cov (>=2.9.0)", "ruff (>=0.11.7)"] [[package]] name = "scipy" -version = "1.15.2" +version = "1.15.3" description = "Fundamental algorithms for scientific computing in Python" optional = false python-versions = ">=3.10" groups = ["main"] -markers = "python_version >= \"3.11\"" -files = [ - {file = "scipy-1.15.2-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:a2ec871edaa863e8213ea5df811cd600734f6400b4af272e1c011e69401218e9"}, - {file = "scipy-1.15.2-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:6f223753c6ea76983af380787611ae1291e3ceb23917393079dcc746ba60cfb5"}, - {file = "scipy-1.15.2-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:ecf797d2d798cf7c838c6d98321061eb3e72a74710e6c40540f0e8087e3b499e"}, - {file = "scipy-1.15.2-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:9b18aa747da280664642997e65aab1dd19d0c3d17068a04b3fe34e2559196cb9"}, - {file = "scipy-1.15.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:87994da02e73549dfecaed9e09a4f9d58a045a053865679aeb8d6d43747d4df3"}, - {file = "scipy-1.15.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:69ea6e56d00977f355c0f84eba69877b6df084516c602d93a33812aa04d90a3d"}, - {file = "scipy-1.15.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:888307125ea0c4466287191e5606a2c910963405ce9671448ff9c81c53f85f58"}, - {file = "scipy-1.15.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:9412f5e408b397ff5641080ed1e798623dbe1ec0d78e72c9eca8992976fa65aa"}, - {file = "scipy-1.15.2-cp310-cp310-win_amd64.whl", hash = "sha256:b5e025e903b4f166ea03b109bb241355b9c42c279ea694d8864d033727205e65"}, - {file = "scipy-1.15.2-cp311-cp311-macosx_10_13_x86_64.whl", hash = "sha256:92233b2df6938147be6fa8824b8136f29a18f016ecde986666be5f4d686a91a4"}, - {file = "scipy-1.15.2-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:62ca1ff3eb513e09ed17a5736929429189adf16d2d740f44e53270cc800ecff1"}, - {file = "scipy-1.15.2-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:4c6676490ad76d1c2894d77f976144b41bd1a4052107902238047fb6a473e971"}, - {file = "scipy-1.15.2-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:a8bf5cb4a25046ac61d38f8d3c3426ec11ebc350246a4642f2f315fe95bda655"}, - {file = "scipy-1.15.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6a8e34cf4c188b6dd004654f88586d78f95639e48a25dfae9c5e34a6dc34547e"}, - {file = "scipy-1.15.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:28a0d2c2075946346e4408b211240764759e0fabaeb08d871639b5f3b1aca8a0"}, - {file = "scipy-1.15.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:42dabaaa798e987c425ed76062794e93a243be8f0f20fff6e7a89f4d61cb3d40"}, - {file = "scipy-1.15.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:6f5e296ec63c5da6ba6fa0343ea73fd51b8b3e1a300b0a8cae3ed4b1122c7462"}, - {file = "scipy-1.15.2-cp311-cp311-win_amd64.whl", hash = "sha256:597a0c7008b21c035831c39927406c6181bcf8f60a73f36219b69d010aa04737"}, - {file = "scipy-1.15.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:c4697a10da8f8765bb7c83e24a470da5797e37041edfd77fd95ba3811a47c4fd"}, - {file = "scipy-1.15.2-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:869269b767d5ee7ea6991ed7e22b3ca1f22de73ab9a49c44bad338b725603301"}, - {file = "scipy-1.15.2-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:bad78d580270a4d32470563ea86c6590b465cb98f83d760ff5b0990cb5518a93"}, - {file = "scipy-1.15.2-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:b09ae80010f52efddb15551025f9016c910296cf70adbf03ce2a8704f3a5ad20"}, - {file = "scipy-1.15.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5a6fd6eac1ce74a9f77a7fc724080d507c5812d61e72bd5e4c489b042455865e"}, - {file = "scipy-1.15.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2b871df1fe1a3ba85d90e22742b93584f8d2b8e6124f8372ab15c71b73e428b8"}, - {file = "scipy-1.15.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:03205d57a28e18dfd39f0377d5002725bf1f19a46f444108c29bdb246b6c8a11"}, - {file = "scipy-1.15.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:601881dfb761311045b03114c5fe718a12634e5608c3b403737ae463c9885d53"}, - {file = "scipy-1.15.2-cp312-cp312-win_amd64.whl", hash = "sha256:e7c68b6a43259ba0aab737237876e5c2c549a031ddb7abc28c7b47f22e202ded"}, - {file = "scipy-1.15.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:01edfac9f0798ad6b46d9c4c9ca0e0ad23dbf0b1eb70e96adb9fa7f525eff0bf"}, - {file = "scipy-1.15.2-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:08b57a9336b8e79b305a143c3655cc5bdbe6d5ece3378578888d2afbb51c4e37"}, - {file = "scipy-1.15.2-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:54c462098484e7466362a9f1672d20888f724911a74c22ae35b61f9c5919183d"}, - {file = "scipy-1.15.2-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:cf72ff559a53a6a6d77bd8eefd12a17995ffa44ad86c77a5df96f533d4e6c6bb"}, - {file = "scipy-1.15.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9de9d1416b3d9e7df9923ab23cd2fe714244af10b763975bea9e4f2e81cebd27"}, - {file = "scipy-1.15.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fb530e4794fc8ea76a4a21ccb67dea33e5e0e60f07fc38a49e821e1eae3b71a0"}, - {file = "scipy-1.15.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5ea7ed46d437fc52350b028b1d44e002646e28f3e8ddc714011aaf87330f2f32"}, - {file = "scipy-1.15.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:11e7ad32cf184b74380f43d3c0a706f49358b904fa7d5345f16ddf993609184d"}, - {file = "scipy-1.15.2-cp313-cp313-win_amd64.whl", hash = "sha256:a5080a79dfb9b78b768cebf3c9dcbc7b665c5875793569f48bf0e2b1d7f68f6f"}, - {file = "scipy-1.15.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:447ce30cee6a9d5d1379087c9e474628dab3db4a67484be1b7dc3196bfb2fac9"}, - {file = "scipy-1.15.2-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:c90ebe8aaa4397eaefa8455a8182b164a6cc1d59ad53f79943f266d99f68687f"}, - {file = "scipy-1.15.2-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:def751dd08243934c884a3221156d63e15234a3155cf25978b0a668409d45eb6"}, - {file = "scipy-1.15.2-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:302093e7dfb120e55515936cb55618ee0b895f8bcaf18ff81eca086c17bd80af"}, - {file = "scipy-1.15.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7cd5b77413e1855351cdde594eca99c1f4a588c2d63711388b6a1f1c01f62274"}, - {file = "scipy-1.15.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6d0194c37037707b2afa7a2f2a924cf7bac3dc292d51b6a925e5fcb89bc5c776"}, - {file = "scipy-1.15.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:bae43364d600fdc3ac327db99659dcb79e6e7ecd279a75fe1266669d9a652828"}, - {file = "scipy-1.15.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:f031846580d9acccd0044efd1a90e6f4df3a6e12b4b6bd694a7bc03a89892b28"}, - {file = "scipy-1.15.2-cp313-cp313t-win_amd64.whl", hash = "sha256:fe8a9eb875d430d81755472c5ba75e84acc980e4a8f6204d402849234d3017db"}, - {file = "scipy-1.15.2.tar.gz", hash = "sha256:cd58a314d92838f7e6f755c8a2167ead4f27e1fd5c1251fd54289569ef3495ec"}, +markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" +files = [ + {file = "scipy-1.15.3-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:a345928c86d535060c9c2b25e71e87c39ab2f22fc96e9636bd74d1dbf9de448c"}, + {file = "scipy-1.15.3-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:ad3432cb0f9ed87477a8d97f03b763fd1d57709f1bbde3c9369b1dff5503b253"}, + {file = "scipy-1.15.3-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:aef683a9ae6eb00728a542b796f52a5477b78252edede72b8327a886ab63293f"}, + {file = "scipy-1.15.3-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:1c832e1bd78dea67d5c16f786681b28dd695a8cb1fb90af2e27580d3d0967e92"}, + {file = "scipy-1.15.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:263961f658ce2165bbd7b99fa5135195c3a12d9bef045345016b8b50c315cb82"}, + {file = "scipy-1.15.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9e2abc762b0811e09a0d3258abee2d98e0c703eee49464ce0069590846f31d40"}, + {file = "scipy-1.15.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:ed7284b21a7a0c8f1b6e5977ac05396c0d008b89e05498c8b7e8f4a1423bba0e"}, + {file = "scipy-1.15.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:5380741e53df2c566f4d234b100a484b420af85deb39ea35a1cc1be84ff53a5c"}, + {file = "scipy-1.15.3-cp310-cp310-win_amd64.whl", hash = "sha256:9d61e97b186a57350f6d6fd72640f9e99d5a4a2b8fbf4b9ee9a841eab327dc13"}, + {file = "scipy-1.15.3-cp311-cp311-macosx_10_13_x86_64.whl", hash = "sha256:993439ce220d25e3696d1b23b233dd010169b62f6456488567e830654ee37a6b"}, + {file = "scipy-1.15.3-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:34716e281f181a02341ddeaad584205bd2fd3c242063bd3423d61ac259ca7eba"}, + {file = "scipy-1.15.3-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:3b0334816afb8b91dab859281b1b9786934392aa3d527cd847e41bb6f45bee65"}, + {file = "scipy-1.15.3-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:6db907c7368e3092e24919b5e31c76998b0ce1684d51a90943cb0ed1b4ffd6c1"}, + {file = "scipy-1.15.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:721d6b4ef5dc82ca8968c25b111e307083d7ca9091bc38163fb89243e85e3889"}, + {file = "scipy-1.15.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:39cb9c62e471b1bb3750066ecc3a3f3052b37751c7c3dfd0fd7e48900ed52982"}, + {file = "scipy-1.15.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:795c46999bae845966368a3c013e0e00947932d68e235702b5c3f6ea799aa8c9"}, + {file = "scipy-1.15.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:18aaacb735ab38b38db42cb01f6b92a2d0d4b6aabefeb07f02849e47f8fb3594"}, + {file = "scipy-1.15.3-cp311-cp311-win_amd64.whl", hash = "sha256:ae48a786a28412d744c62fd7816a4118ef97e5be0bee968ce8f0a2fba7acf3bb"}, + {file = "scipy-1.15.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:6ac6310fdbfb7aa6612408bd2f07295bcbd3fda00d2d702178434751fe48e019"}, + {file = "scipy-1.15.3-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:185cd3d6d05ca4b44a8f1595af87f9c372bb6acf9c808e99aa3e9aa03bd98cf6"}, + {file = "scipy-1.15.3-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:05dc6abcd105e1a29f95eada46d4a3f251743cfd7d3ae8ddb4088047f24ea477"}, + {file = "scipy-1.15.3-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:06efcba926324df1696931a57a176c80848ccd67ce6ad020c810736bfd58eb1c"}, + {file = "scipy-1.15.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c05045d8b9bfd807ee1b9f38761993297b10b245f012b11b13b91ba8945f7e45"}, + {file = "scipy-1.15.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:271e3713e645149ea5ea3e97b57fdab61ce61333f97cfae392c28ba786f9bb49"}, + {file = "scipy-1.15.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6cfd56fc1a8e53f6e89ba3a7a7251f7396412d655bca2aa5611c8ec9a6784a1e"}, + {file = "scipy-1.15.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:0ff17c0bb1cb32952c09217d8d1eed9b53d1463e5f1dd6052c7857f83127d539"}, + {file = "scipy-1.15.3-cp312-cp312-win_amd64.whl", hash = "sha256:52092bc0472cfd17df49ff17e70624345efece4e1a12b23783a1ac59a1b728ed"}, + {file = "scipy-1.15.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:2c620736bcc334782e24d173c0fdbb7590a0a436d2fdf39310a8902505008759"}, + {file = "scipy-1.15.3-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:7e11270a000969409d37ed399585ee530b9ef6aa99d50c019de4cb01e8e54e62"}, + {file = "scipy-1.15.3-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:8c9ed3ba2c8a2ce098163a9bdb26f891746d02136995df25227a20e71c396ebb"}, + {file = "scipy-1.15.3-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:0bdd905264c0c9cfa74a4772cdb2070171790381a5c4d312c973382fc6eaf730"}, + {file = "scipy-1.15.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:79167bba085c31f38603e11a267d862957cbb3ce018d8b38f79ac043bc92d825"}, + {file = "scipy-1.15.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c9deabd6d547aee2c9a81dee6cc96c6d7e9a9b1953f74850c179f91fdc729cb7"}, + {file = "scipy-1.15.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:dde4fc32993071ac0c7dd2d82569e544f0bdaff66269cb475e0f369adad13f11"}, + {file = "scipy-1.15.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:f77f853d584e72e874d87357ad70f44b437331507d1c311457bed8ed2b956126"}, + {file = "scipy-1.15.3-cp313-cp313-win_amd64.whl", hash = "sha256:b90ab29d0c37ec9bf55424c064312930ca5f4bde15ee8619ee44e69319aab163"}, + {file = "scipy-1.15.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:3ac07623267feb3ae308487c260ac684b32ea35fd81e12845039952f558047b8"}, + {file = "scipy-1.15.3-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:6487aa99c2a3d509a5227d9a5e889ff05830a06b2ce08ec30df6d79db5fcd5c5"}, + {file = "scipy-1.15.3-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:50f9e62461c95d933d5c5ef4a1f2ebf9a2b4e83b0db374cb3f1de104d935922e"}, + {file = "scipy-1.15.3-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:14ed70039d182f411ffc74789a16df3835e05dc469b898233a245cdfd7f162cb"}, + {file = "scipy-1.15.3-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a769105537aa07a69468a0eefcd121be52006db61cdd8cac8a0e68980bbb723"}, + {file = "scipy-1.15.3-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9db984639887e3dffb3928d118145ffe40eff2fa40cb241a306ec57c219ebbbb"}, + {file = "scipy-1.15.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:40e54d5c7e7ebf1aa596c374c49fa3135f04648a0caabcb66c52884b943f02b4"}, + {file = "scipy-1.15.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:5e721fed53187e71d0ccf382b6bf977644c533e506c4d33c3fb24de89f5c3ed5"}, + {file = "scipy-1.15.3-cp313-cp313t-win_amd64.whl", hash = "sha256:76ad1fb5f8752eabf0fa02e4cc0336b4e8f021e2d5f061ed37d6d264db35e3ca"}, + {file = "scipy-1.15.3.tar.gz", hash = "sha256:eae3cf522bc7df64b42cad3925c876e1b0b6c35c1337c93e12c0f366f55b0eaf"}, ] [package.dependencies] @@ -4038,57 +4073,54 @@ numpy = ">=1.23.5,<2.5" [package.extras] dev = ["cython-lint (>=0.12.2)", "doit (>=0.36.0)", "mypy (==1.10.0)", "pycodestyle", "pydevtool", "rich-click", "ruff (>=0.0.292)", "types-psutil", "typing_extensions"] -doc = ["intersphinx_registry", "jupyterlite-pyodide-kernel", "jupyterlite-sphinx (>=0.16.5)", "jupytext", "matplotlib (>=3.5)", "myst-nb", "numpydoc", "pooch", "pydata-sphinx-theme (>=0.15.2)", "sphinx (>=5.0.0,<8.0.0)", "sphinx-copybutton", "sphinx-design (>=0.4.0)"] +doc = ["intersphinx_registry", "jupyterlite-pyodide-kernel", "jupyterlite-sphinx (>=0.19.1)", "jupytext", "matplotlib (>=3.5)", "myst-nb", "numpydoc", "pooch", "pydata-sphinx-theme (>=0.15.2)", "sphinx (>=5.0.0,<8.0.0)", "sphinx-copybutton", "sphinx-design (>=0.4.0)"] test = ["Cython", "array-api-strict (>=2.0,<2.1.1)", "asv", "gmpy2", "hypothesis (>=6.30)", "meson", "mpmath", "ninja ; sys_platform != \"emscripten\"", "pooch", "pytest", "pytest-cov", "pytest-timeout", "pytest-xdist", "scikit-umfpack", "threadpoolctl"] [[package]] name = "scs" -version = "3.2.7.post2" +version = "3.2.11" description = "Splitting conic solver" optional = false -python-versions = ">=3.7" +python-versions = ">=3.9" groups = ["main"] -files = [ - {file = "scs-3.2.7.post2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b7271ff566ac9df929c8cf7d1b024b89c3882b541c21a7a6d9aa94480822bccb"}, - {file = "scs-3.2.7.post2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:eb2997f53ef3426934599517c6e0e77f4f05cc23c3aa2380fd176c7fd22bc0c8"}, - {file = "scs-3.2.7.post2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bd8307b7302f8105148478a5723a2f7d5a3cbf86ef3cc6f27567203addfa3b10"}, - {file = "scs-3.2.7.post2-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:f34cc43c9eb1092423b55f01430ad99b4e5825a6595ead8e081f985032685e8c"}, - {file = "scs-3.2.7.post2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:f645f3789bc4659de2a468c2e4db552f6656bcb286e81f3cb42d5a607028627b"}, - {file = "scs-3.2.7.post2-cp310-cp310-win_amd64.whl", hash = "sha256:e5f90940c383b68dd7960b734105cd1dd6c11c80275321de3a6388f563a1ff19"}, - {file = "scs-3.2.7.post2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6d551b90d9e2c0497ee17d8c3db325d6fcefa4419057954e68709da8b9184d4f"}, - {file = "scs-3.2.7.post2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7c15d035dda04a6626d3cd9b68d3bf814d2e0eb3cb372021775bd358fd8c7405"}, - {file = "scs-3.2.7.post2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6da6add18f039e7e08f0ebc13cb1f853ec4c96ae81d7a578f46e0f9f0e5bf4b5"}, - {file = "scs-3.2.7.post2-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:d6c965f026e56c92b59a9c96744eb90178982c270ab196f58a0260ac392785aa"}, - {file = "scs-3.2.7.post2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:0427a5bf9aa43eb2a22083e1a43412db5054a88d695fdaa6018cd6fb3a9f0203"}, - {file = "scs-3.2.7.post2-cp311-cp311-win_amd64.whl", hash = "sha256:4d05ec092c891eb842630f343ebc0c46d2ef6047f325a835771b13f9804d6b3b"}, - {file = "scs-3.2.7.post2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:99e4af2968b046ee55fa0dc89dcd3bfba771f1027d9224cb6efa10008d8bfee1"}, - {file = "scs-3.2.7.post2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:bc46fef9743d4629337382f034fda92dfce338659e8377afae674517b7d8345f"}, - {file = "scs-3.2.7.post2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f92e925d89004276a449850926a45536f75c03cab701b5e758b1a7efa119ba08"}, - {file = "scs-3.2.7.post2-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:640faf61f85b933fdfc3d33d7ce4f0049b082b245e82d2d6a8c2c54aa0b7f540"}, - {file = "scs-3.2.7.post2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:a520c9bef84eee734df0da3e5e06aa9192d3be34cd5e6d4221cc01f4d09b20c0"}, - {file = "scs-3.2.7.post2-cp312-cp312-win_amd64.whl", hash = "sha256:2995d4099943c3fd754b3e39fe178a9c03dcb9c7d84b40f64ac5eb26d8d6085a"}, - {file = "scs-3.2.7.post2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:aaa3753e82250913e17c792e7ca7eb0bde03ac41200923f3dfd3f6bd5ec6f308"}, - {file = "scs-3.2.7.post2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:08e9c20b482c03f292b3da7ce4cbddb2697508ffd747304564868e87da7cb4b2"}, - {file = "scs-3.2.7.post2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:56af9310bd2d000c45d7829e2935b5445480ea6bcc6091c58d4e3ab2a94125be"}, - {file = "scs-3.2.7.post2-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:ec6e7bdb18d4b84c7f56f94db445ec0c43deec5aa659201467aa85b2f64b8123"}, - {file = "scs-3.2.7.post2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:91316903b2ea625990abe18bb92e8ce63536e5eafb9623ecf1cb199fb05ea574"}, - {file = "scs-3.2.7.post2-cp313-cp313-win_amd64.whl", hash = "sha256:a2c48cd19e39bf87dae0b20a289fff44930458fc2ca2afa0f899058dc41e5545"}, - {file = "scs-3.2.7.post2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:1efca4a10fca530b22ded7bdbca004059e047e2c97a5023d5b7d5146897a7d8a"}, - {file = "scs-3.2.7.post2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:604abfabdfd4a14389144791b43e1ee22507ad1d0bde27a52908166f64f1ab96"}, - {file = "scs-3.2.7.post2-cp37-cp37m-manylinux_2_28_aarch64.whl", hash = "sha256:d17f6258d58a430acef79aa4f004e6ded323724443baed05eaa73fc4cfa40c27"}, - {file = "scs-3.2.7.post2-cp37-cp37m-win_amd64.whl", hash = "sha256:de11c855577eb6f695ba93088d47c348858e7c34812139a3c532ebb36bd2d81d"}, - {file = "scs-3.2.7.post2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:900ccd6040f635ef6869779d70ba7260a73a0b8bcc9eb3e5eac55f54d6611044"}, - {file = "scs-3.2.7.post2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:c4fd9b7bd328d1d432d4fbb86054982a1e5c2aa589394c8257bd5f67ae84ea51"}, - {file = "scs-3.2.7.post2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:746a3ee4f9307a000c6599c6e3067a0a377f3902c36e6a7c7ea01ee040b06f54"}, - {file = "scs-3.2.7.post2-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:b5f974c29c40eab2bf12b273c00daa7cc8011a2628c5397e3c61ac6b32ab9485"}, - {file = "scs-3.2.7.post2-cp38-cp38-win_amd64.whl", hash = "sha256:05da761821a14b8ebe54427510cbe10722b3433db4e953acd7a067893e955781"}, - {file = "scs-3.2.7.post2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ed80e841680d62a3c3b4e5757852f88df19ca6ef85bd61f7abaefb64994cfd04"}, - {file = "scs-3.2.7.post2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:93de54f8acf83d224e007babfa410823838b28dc4a2d2c964396b52e13b78c61"}, - {file = "scs-3.2.7.post2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3562d84b6187959f9c7bcf2ad254e82a6674593729c4d85917d2f8536f89f2b2"}, - {file = "scs-3.2.7.post2-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:f9d523d91904e2fba13ae0348789badd3270bba329208126d5457869e0180da2"}, - {file = "scs-3.2.7.post2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:4a30b9d9bdcdc823acfaf5b72b7689dd699e8ab80b9dfab529628e9b2c765266"}, - {file = "scs-3.2.7.post2-cp39-cp39-win_amd64.whl", hash = "sha256:82422e7bc04300f6381afc4a6df2897e577cbe072daba29cd67856b28dba9718"}, - {file = "scs-3.2.7.post2.tar.gz", hash = "sha256:4245a4f76328cc73911f20e1414df68d41ead4bcc4a187503a9cd639b644014b"}, +markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" +files = [ + {file = "scs-3.2.11-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:928b2fd09d1f4446bd440037d8ca4fb70eb55e411c3259461646ba909ed098f7"}, + {file = "scs-3.2.11-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ace8221013596173de6bdf199d4415f6532b38372e7b68ff22f688b7de2a72bf"}, + {file = "scs-3.2.11-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d0a42a6df9308f7a7dc5e5f6c9cc08a4f556e139e39dc7d7fe1f1c6768d7ff9a"}, + {file = "scs-3.2.11-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:c839603fd99d719d27b63918e0eff9e6f1df594506c5fd0dd1529a0df0219243"}, + {file = "scs-3.2.11-cp310-cp310-win_amd64.whl", hash = "sha256:8c56c9739da8d06c10a94f84c5715ff0731bb2efce695a83e07c116eb1c48dcf"}, + {file = "scs-3.2.11-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:698bdf36c67acc43b7a65f1ffa13d11d09b7050f4da6dd5b9c05080e10d198f7"}, + {file = "scs-3.2.11-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6aece172705a6e3b04b54b49558d580ab71be02c2fa8fba12b35012e1f386e9c"}, + {file = "scs-3.2.11-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:67a9bf34da4be7baf28eb50c8ea7d2e29ae5f345e4b04f057ba3dbeca42efbba"}, + {file = "scs-3.2.11-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9810701691de9da18d98e542e4f8900e197ec501a47b3a4c1c76242cba133453"}, + {file = "scs-3.2.11-cp311-cp311-win_amd64.whl", hash = "sha256:4bd13200492b9ea334a3c50c17ccbfc9359b206bf7a4f0b022504ebc34e11cda"}, + {file = "scs-3.2.11-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ad646848375b5cf2d3e45a9ebefd87ccc37a53da9c32f2bf30ea5ad0e84d9e5b"}, + {file = "scs-3.2.11-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f30821521a74f6930924b13e731e9455b6bdcfc964f66d5623d3c8d3fdd98126"}, + {file = "scs-3.2.11-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8a89c71ebacd4790c461d3032a47e59ed4759e11c0f03fa79b5b84086ef9c7bc"}, + {file = "scs-3.2.11-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:4e37dc60081dd742bdcd63eeb5b260db116b3803162bcf6084eb203ebedcb080"}, + {file = "scs-3.2.11-cp312-cp312-win_amd64.whl", hash = "sha256:2504266ff8e6a226f7ecb987567c93e6e996534cbf479a60a5a886549446205e"}, + {file = "scs-3.2.11-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a42696b0a26c3e749b8da8d2ffc57a93af4f0f500fc3a83acb50daad92386de4"}, + {file = "scs-3.2.11-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:50d204ae417c014a1756be36e8c0b857ed39c7b64e2c63b6afb1ff64c0a465d0"}, + {file = "scs-3.2.11-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:594c09207395de922e0ff40ced562453e46f4f197dd0128022cb82c096f06615"}, + {file = "scs-3.2.11-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:fd672701ed81744e8c300df71d823700b05e7fe3d6a26f8b19b74b0a31fe3c8a"}, + {file = "scs-3.2.11-cp313-cp313-win_amd64.whl", hash = "sha256:2f4ebc0be14783ce3fcda61c616a7e922ac528af033e44a0da952dda0fe98091"}, + {file = "scs-3.2.11-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:fe43181c3822bed600363c25c7566a643b319e0edb0c2af385c5f086a9c826d2"}, + {file = "scs-3.2.11-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b3c59ce43585d3ea0c6771c5ce3df272b6c8239231acbb9567876be5d0a0474d"}, + {file = "scs-3.2.11-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3c46f597892c9f8c5551bb9a3a680dfb86e86a1a6c3bc67b09a5af2e89ba5357"}, + {file = "scs-3.2.11-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:513131af6991fb4983f84c4ba276c756c0a3574003c2790dda891c68d5b6da30"}, + {file = "scs-3.2.11-cp314-cp314-win_amd64.whl", hash = "sha256:7b2c37e87baca0389f005fe19a0ca8209d43c0f1e9136a1a6fde23cae1735db9"}, + {file = "scs-3.2.11-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:29c0a5c233fb5a964ea5f7523ec2b2209f000217c0a24423ab5dcd8b8922f37d"}, + {file = "scs-3.2.11-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7519c2f436e793b004d1eae4aaf98c18857e519f8169219d1167fe88b3b0a568"}, + {file = "scs-3.2.11-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2c166768dc87c389b2d000b5dcd472bb0ba40f96b4cf0e63c0fb603a4a5c80db"}, + {file = "scs-3.2.11-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:f51a14a5315974fae4ca4e1b4dc8926f872eca7e66b42e070dbdcfa6904b7860"}, + {file = "scs-3.2.11-cp314-cp314t-win_amd64.whl", hash = "sha256:7fe26e8a0efc96232f4c5b7649817e48dae04a61be911417e925071091b8cbf6"}, + {file = "scs-3.2.11-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a58e2be11a6eeb03463ab57accfac96fbe4a64168b32769ecca0a35962c86231"}, + {file = "scs-3.2.11-cp39-cp39-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9761271e2efd4ae06af7cde4d367c99c82fddb6e6c7542fa6f4d02526d0888ef"}, + {file = "scs-3.2.11-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f6ec937514d613181ec0b27df6d7fc33a06ada7769da419a1a98c846528758b6"}, + {file = "scs-3.2.11-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:4f9e1abcac09bddc6a6d9e5955440e5cd26fb51371759491b3100cffa8ebad2f"}, + {file = "scs-3.2.11-cp39-cp39-win_amd64.whl", hash = "sha256:caf85064e7ee78001ea205205b8a8c59e134f912e8d7491cc702a64af8cc7227"}, + {file = "scs-3.2.11.tar.gz", hash = "sha256:2a5455cf2093d07f84f2f848c199faed52e79cdb3a11fe250b5622b6bbac4913"}, ] [package.dependencies] @@ -4102,6 +4134,7 @@ description = "Statistical data visualization" optional = false python-versions = ">=3.8" groups = ["main"] +markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "seaborn-0.13.2-py3-none-any.whl", hash = "sha256:636f8336facf092165e27924f223d3c62ca560b1f2bb5dff7ab7fad265361987"}, {file = "seaborn-0.13.2.tar.gz", hash = "sha256:93e60a40988f4d65e9f4885df477e2fdaff6b73a9ded434c1ab356dd57eefff7"}, @@ -4119,14 +4152,15 @@ stats = ["scipy (>=1.7)", "statsmodels (>=0.12)"] [[package]] name = "sentry-sdk" -version = "2.30.0" +version = "2.55.0" description = "Python client for Sentry (https://sentry.io)" optional = false python-versions = ">=3.6" groups = ["main"] +markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ - {file = "sentry_sdk-2.30.0-py2.py3-none-any.whl", hash = "sha256:59391db1550662f746ea09b483806a631c3ae38d6340804a1a4c0605044f6877"}, - {file = "sentry_sdk-2.30.0.tar.gz", hash = "sha256:436369b02afef7430efb10300a344fb61a11fe6db41c2b11f41ee037d2dd7f45"}, + {file = "sentry_sdk-2.55.0-py2.py3-none-any.whl", hash = "sha256:97026981cb15699394474a196b88503a393cbc58d182ece0d3abe12b9bd978d4"}, + {file = "sentry_sdk-2.55.0.tar.gz", hash = "sha256:3774c4d8820720ca4101548131b9c162f4c9426eb7f4d24aca453012a7470f69"}, ] [package.dependencies] @@ -4148,20 +4182,26 @@ django = ["django (>=1.8)"] falcon = ["falcon (>=1.4)"] fastapi = ["fastapi (>=0.79.0)"] flask = ["blinker (>=1.1)", "flask (>=0.11)", "markupsafe"] +google-genai = ["google-genai (>=1.29.0)"] grpcio = ["grpcio (>=1.21.1)", "protobuf (>=3.8.0)"] http2 = ["httpcore[http2] (==1.*)"] httpx = ["httpx (>=0.16.0)"] huey = ["huey (>=2)"] huggingface-hub = ["huggingface_hub (>=0.22)"] langchain = ["langchain (>=0.0.210)"] +langgraph = ["langgraph (>=0.6.6)"] launchdarkly = ["launchdarkly-server-sdk (>=9.8.0)"] +litellm = ["litellm (>=1.77.5)"] litestar = ["litestar (>=2.0.0)"] loguru = ["loguru (>=0.5)"] +mcp = ["mcp (>=1.15.0)"] openai = ["openai (>=1.0.0)", "tiktoken (>=0.3.0)"] openfeature = ["openfeature-sdk (>=0.7.1)"] opentelemetry = ["opentelemetry-distro (>=0.35b0)"] opentelemetry-experimental = ["opentelemetry-distro"] +opentelemetry-otlp = ["opentelemetry-distro[otlp] (>=0.35b0)"] pure-eval = ["asttokens", "executing", "pure_eval"] +pydantic-ai = ["pydantic-ai (>=1.0.0)"] pymongo = ["pymongo (>=3.1)"] pyspark = ["pyspark (>=2.4.4)"] quart = ["blinker (>=1.1)", "quart (>=0.16.1)"] @@ -4176,109 +4216,110 @@ unleash = ["UnleashClient (>=6.0.1)"] [[package]] name = "setproctitle" -version = "1.3.6" +version = "1.3.7" description = "A Python module to customize the process title" optional = false python-versions = ">=3.8" groups = ["main"] -files = [ - {file = "setproctitle-1.3.6-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:ebcf34b69df4ca0eabaaaf4a3d890f637f355fed00ba806f7ebdd2d040658c26"}, - {file = "setproctitle-1.3.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1aa1935aa2195b76f377e5cb018290376b7bf085f0b53f5a95c0c21011b74367"}, - {file = "setproctitle-1.3.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:13624d9925bb481bc0ccfbc7f533da38bfbfe6e80652314f789abc78c2e513bd"}, - {file = "setproctitle-1.3.6-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:97a138fa875c6f281df7720dac742259e85518135cd0e3551aba1c628103d853"}, - {file = "setproctitle-1.3.6-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c86e9e82bfab579327dbe9b82c71475165fbc8b2134d24f9a3b2edaf200a5c3d"}, - {file = "setproctitle-1.3.6-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6af330ddc2ec05a99c3933ab3cba9365357c0b8470a7f2fa054ee4b0984f57d1"}, - {file = "setproctitle-1.3.6-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:109fc07b1cd6cef9c245b2028e3e98e038283342b220def311d0239179810dbe"}, - {file = "setproctitle-1.3.6-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:7df5fcc48588f82b6cc8073db069609ddd48a49b1e9734a20d0efb32464753c4"}, - {file = "setproctitle-1.3.6-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:2407955dc359d735a20ac6e797ad160feb33d529a2ac50695c11a1ec680eafab"}, - {file = "setproctitle-1.3.6-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:38ca045626af693da042ac35d7332e7b9dbd52e6351d6973b310612e3acee6d6"}, - {file = "setproctitle-1.3.6-cp310-cp310-win32.whl", hash = "sha256:9483aa336687463f5497dd37a070094f3dff55e2c888994f8440fcf426a1a844"}, - {file = "setproctitle-1.3.6-cp310-cp310-win_amd64.whl", hash = "sha256:4efc91b437f6ff2578e89e3f17d010c0a0ff01736606473d082913ecaf7859ba"}, - {file = "setproctitle-1.3.6-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:a1d856b0f4e4a33e31cdab5f50d0a14998f3a2d726a3fd5cb7c4d45a57b28d1b"}, - {file = "setproctitle-1.3.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:50706b9c0eda55f7de18695bfeead5f28b58aa42fd5219b3b1692d554ecbc9ec"}, - {file = "setproctitle-1.3.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:af188f3305f0a65c3217c30c6d4c06891e79144076a91e8b454f14256acc7279"}, - {file = "setproctitle-1.3.6-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cce0ed8b3f64c71c140f0ec244e5fdf8ecf78ddf8d2e591d4a8b6aa1c1214235"}, - {file = "setproctitle-1.3.6-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:70100e2087fe05359f249a0b5f393127b3a1819bf34dec3a3e0d4941138650c9"}, - {file = "setproctitle-1.3.6-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1065ed36bd03a3fd4186d6c6de5f19846650b015789f72e2dea2d77be99bdca1"}, - {file = "setproctitle-1.3.6-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:4adf6a0013fe4e0844e3ba7583ec203ca518b9394c6cc0d3354df2bf31d1c034"}, - {file = "setproctitle-1.3.6-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:eb7452849f6615871eabed6560ffedfe56bc8af31a823b6be4ce1e6ff0ab72c5"}, - {file = "setproctitle-1.3.6-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:a094b7ce455ca341b59a0f6ce6be2e11411ba6e2860b9aa3dbb37468f23338f4"}, - {file = "setproctitle-1.3.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ad1c2c2baaba62823a7f348f469a967ece0062140ca39e7a48e4bbb1f20d54c4"}, - {file = "setproctitle-1.3.6-cp311-cp311-win32.whl", hash = "sha256:8050c01331135f77ec99d99307bfbc6519ea24d2f92964b06f3222a804a3ff1f"}, - {file = "setproctitle-1.3.6-cp311-cp311-win_amd64.whl", hash = "sha256:9b73cf0fe28009a04a35bb2522e4c5b5176cc148919431dcb73fdbdfaab15781"}, - {file = "setproctitle-1.3.6-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:af44bb7a1af163806bbb679eb8432fa7b4fb6d83a5d403b541b675dcd3798638"}, - {file = "setproctitle-1.3.6-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3cca16fd055316a48f0debfcbfb6af7cea715429fc31515ab3fcac05abd527d8"}, - {file = "setproctitle-1.3.6-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ea002088d5554fd75e619742cefc78b84a212ba21632e59931b3501f0cfc8f67"}, - {file = "setproctitle-1.3.6-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bb465dd5825356c1191a038a86ee1b8166e3562d6e8add95eec04ab484cfb8a2"}, - {file = "setproctitle-1.3.6-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d2c8e20487b3b73c1fa72c56f5c89430617296cd380373e7af3a538a82d4cd6d"}, - {file = "setproctitle-1.3.6-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a0d6252098e98129a1decb59b46920d4eca17b0395f3d71b0d327d086fefe77d"}, - {file = "setproctitle-1.3.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:cf355fbf0d4275d86f9f57be705d8e5eaa7f8ddb12b24ced2ea6cbd68fdb14dc"}, - {file = "setproctitle-1.3.6-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:e288f8a162d663916060beb5e8165a8551312b08efee9cf68302687471a6545d"}, - {file = "setproctitle-1.3.6-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:b2e54f4a2dc6edf0f5ea5b1d0a608d2af3dcb5aa8c8eeab9c8841b23e1b054fe"}, - {file = "setproctitle-1.3.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b6f4abde9a2946f57e8daaf1160b2351bcf64274ef539e6675c1d945dbd75e2a"}, - {file = "setproctitle-1.3.6-cp312-cp312-win32.whl", hash = "sha256:db608db98ccc21248370d30044a60843b3f0f3d34781ceeea67067c508cd5a28"}, - {file = "setproctitle-1.3.6-cp312-cp312-win_amd64.whl", hash = "sha256:082413db8a96b1f021088e8ec23f0a61fec352e649aba20881895815388b66d3"}, - {file = "setproctitle-1.3.6-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:e2a9e62647dc040a76d55563580bf3bb8fe1f5b6ead08447c2ed0d7786e5e794"}, - {file = "setproctitle-1.3.6-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:751ba352ed922e0af60458e961167fa7b732ac31c0ddd1476a2dfd30ab5958c5"}, - {file = "setproctitle-1.3.6-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7890e291bf4708e3b61db9069ea39b3ab0651e42923a5e1f4d78a7b9e4b18301"}, - {file = "setproctitle-1.3.6-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b2b17855ed7f994f3f259cf2dfbfad78814538536fa1a91b50253d84d87fd88d"}, - {file = "setproctitle-1.3.6-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2e51ec673513465663008ce402171192a053564865c2fc6dc840620871a9bd7c"}, - {file = "setproctitle-1.3.6-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:63cc10352dc6cf35a33951656aa660d99f25f574eb78132ce41a85001a638aa7"}, - {file = "setproctitle-1.3.6-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:0dba8faee2e4a96e934797c9f0f2d093f8239bf210406a99060b3eabe549628e"}, - {file = "setproctitle-1.3.6-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:e3e44d08b61de0dd6f205528498f834a51a5c06689f8fb182fe26f3a3ce7dca9"}, - {file = "setproctitle-1.3.6-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:de004939fc3fd0c1200d26ea9264350bfe501ffbf46c8cf5dc7f345f2d87a7f1"}, - {file = "setproctitle-1.3.6-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:3f8194b4d631b003a1176a75d1acd545e04b1f54b821638e098a93e6e62830ef"}, - {file = "setproctitle-1.3.6-cp313-cp313-win32.whl", hash = "sha256:d714e002dd3638170fe7376dc1b686dbac9cb712cde3f7224440af722cc9866a"}, - {file = "setproctitle-1.3.6-cp313-cp313-win_amd64.whl", hash = "sha256:b70c07409d465f3a8b34d52f863871fb8a00755370791d2bd1d4f82b3cdaf3d5"}, - {file = "setproctitle-1.3.6-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:23a57d3b8f1549515c2dbe4a2880ebc1f27780dc126c5e064167563e015817f5"}, - {file = "setproctitle-1.3.6-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:81c443310831e29fabbd07b75ebbfa29d0740b56f5907c6af218482d51260431"}, - {file = "setproctitle-1.3.6-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d88c63bd395c787b0aa81d8bbc22c1809f311032ce3e823a6517b711129818e4"}, - {file = "setproctitle-1.3.6-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d73f14b86d0e2858ece6bf5807c9889670e392c001d414b4293d0d9b291942c3"}, - {file = "setproctitle-1.3.6-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3393859eb8f19f5804049a685bf286cb08d447e28ba5c6d8543c7bf5500d5970"}, - {file = "setproctitle-1.3.6-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:785cd210c0311d9be28a70e281a914486d62bfd44ac926fcd70cf0b4d65dff1c"}, - {file = "setproctitle-1.3.6-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:c051f46ed1e13ba8214b334cbf21902102807582fbfaf0fef341b9e52f0fafbf"}, - {file = "setproctitle-1.3.6-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:49498ebf68ca3e75321ffe634fcea5cc720502bfaa79bd6b03ded92ce0dc3c24"}, - {file = "setproctitle-1.3.6-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:4431629c178193f23c538cb1de3da285a99ccc86b20ee91d81eb5f1a80e0d2ba"}, - {file = "setproctitle-1.3.6-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:d136fbf8ad4321716e44d6d6b3d8dffb4872626010884e07a1db54b7450836cf"}, - {file = "setproctitle-1.3.6-cp313-cp313t-win32.whl", hash = "sha256:d483cc23cc56ab32911ea0baa0d2d9ea7aa065987f47de847a0a93a58bf57905"}, - {file = "setproctitle-1.3.6-cp313-cp313t-win_amd64.whl", hash = "sha256:74973aebea3543ad033b9103db30579ec2b950a466e09f9c2180089e8346e0ec"}, - {file = "setproctitle-1.3.6-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:3884002b3a9086f3018a32ab5d4e1e8214dd70695004e27b1a45c25a6243ad0b"}, - {file = "setproctitle-1.3.6-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:6a1d3aa13acfe81f355b0ce4968facc7a19b0d17223a0f80c011a1dba8388f37"}, - {file = "setproctitle-1.3.6-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f24d5b9383318cbd1a5cd969377937d66cf0542f24aa728a4f49d9f98f9c0da8"}, - {file = "setproctitle-1.3.6-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a4ae2ea9afcfdd2b931ddcebf1cf82532162677e00326637b31ed5dff7d985ca"}, - {file = "setproctitle-1.3.6-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:805bb33e92fc3d8aa05674db3068d14d36718e3f2c5c79b09807203f229bf4b5"}, - {file = "setproctitle-1.3.6-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c1b20a5f4164cec7007be55c9cf18d2cd08ed7c3bf6769b3cd6d044ad888d74b"}, - {file = "setproctitle-1.3.6-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:793a23e8d9cb6c231aa3023d700008224c6ec5b8fd622d50f3c51665e3d0a190"}, - {file = "setproctitle-1.3.6-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:57bc54763bf741813a99fbde91f6be138c8706148b7b42d3752deec46545d470"}, - {file = "setproctitle-1.3.6-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:b0174ca6f3018ddeaa49847f29b69612e590534c1d2186d54ab25161ecc42975"}, - {file = "setproctitle-1.3.6-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:807796fe301b7ed76cf100113cc008c119daf4fea2f9f43c578002aef70c3ebf"}, - {file = "setproctitle-1.3.6-cp38-cp38-win32.whl", hash = "sha256:5313a4e9380e46ca0e2c681ba739296f9e7c899e6f4d12a6702b2dc9fb846a31"}, - {file = "setproctitle-1.3.6-cp38-cp38-win_amd64.whl", hash = "sha256:d5a6c4864bb6fa9fcf7b57a830d21aed69fd71742a5ebcdbafda476be673d212"}, - {file = "setproctitle-1.3.6-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:391bb6a29c4fe7ccc9c30812e3744060802d89b39264cfa77f3d280d7f387ea5"}, - {file = "setproctitle-1.3.6-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:156795b3db976611d09252fc80761fcdb65bb7c9b9581148da900851af25ecf4"}, - {file = "setproctitle-1.3.6-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cdd7315314b0744a7dd506f3bd0f2cf90734181529cdcf75542ee35ad885cab7"}, - {file = "setproctitle-1.3.6-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6d50bfcc1d1692dc55165b3dd2f0b9f8fb5b1f7b571a93e08d660ad54b9ca1a5"}, - {file = "setproctitle-1.3.6-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:163dba68f979c61e4e2e779c4d643e968973bdae7c33c3ec4d1869f7a9ba8390"}, - {file = "setproctitle-1.3.6-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9d5a369eb7ec5b2fdfa9927530b5259dd21893fa75d4e04a223332f61b84b586"}, - {file = "setproctitle-1.3.6-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:18d0667bafaaae4c1dee831e2e59841c411ff399b9b4766822ba2685d419c3be"}, - {file = "setproctitle-1.3.6-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:f33fbf96b52d51c23b6cff61f57816539c1c147db270cfc1cc3bc012f4a560a9"}, - {file = "setproctitle-1.3.6-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:543f59601a4e32daf44741b52f9a23e0ee374f9f13b39c41d917302d98fdd7b0"}, - {file = "setproctitle-1.3.6-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:2156d55308431ac3b3ec4e5e05b1726d11a5215352d6a22bb933171dee292f8c"}, - {file = "setproctitle-1.3.6-cp39-cp39-win32.whl", hash = "sha256:17d7c833ed6545ada5ac4bb606b86a28f13a04431953d4beac29d3773aa00b1d"}, - {file = "setproctitle-1.3.6-cp39-cp39-win_amd64.whl", hash = "sha256:2940cf13f4fc11ce69ad2ed37a9f22386bfed314b98d8aebfd4f55459aa59108"}, - {file = "setproctitle-1.3.6-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:3cde5b83ec4915cd5e6ae271937fd60d14113c8f7769b4a20d51769fe70d8717"}, - {file = "setproctitle-1.3.6-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:797f2846b546a8741413c57d9fb930ad5aa939d925c9c0fa6186d77580035af7"}, - {file = "setproctitle-1.3.6-pp310-pypy310_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4ac3eb04bcf0119aadc6235a2c162bae5ed5f740e3d42273a7228b915722de20"}, - {file = "setproctitle-1.3.6-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:0e6b5633c94c5111f7137f875e8f1ff48f53b991d5d5b90932f27dc8c1fa9ae4"}, - {file = "setproctitle-1.3.6-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:ded9e86397267732a0641d4776c7c663ea16b64d7dbc4d9cc6ad8536363a2d29"}, - {file = "setproctitle-1.3.6-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ae82507fe458f7c0c8227017f2158111a4c9e7ce94de05178894a7ea9fefc8a1"}, - {file = "setproctitle-1.3.6-pp38-pypy38_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3fc97805f9d74444b027babff710bf39df1541437a6a585a983d090ae00cedde"}, - {file = "setproctitle-1.3.6-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:83066ffbf77a5f82b7e96e59bdccbdda203c8dccbfc3f9f0fdad3a08d0001d9c"}, - {file = "setproctitle-1.3.6-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:9b50700785eccac0819bea794d968ed8f6055c88f29364776b7ea076ac105c5d"}, - {file = "setproctitle-1.3.6-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:92df0e70b884f5da35f2e01489dca3c06a79962fb75636985f1e3a17aec66833"}, - {file = "setproctitle-1.3.6-pp39-pypy39_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8834ab7be6539f1bfadec7c8d12249bbbe6c2413b1d40ffc0ec408692232a0c6"}, - {file = "setproctitle-1.3.6-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:a5963b663da69ad25fa1559ee064584935570def665917918938c1f1289f5ebc"}, - {file = "setproctitle-1.3.6.tar.gz", hash = "sha256:c9f32b96c700bb384f33f7cf07954bb609d35dd82752cef57fb2ee0968409169"}, +markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" +files = [ + {file = "setproctitle-1.3.7-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:cf555b6299f10a6eb44e4f96d2f5a3884c70ce25dc5c8796aaa2f7b40e72cb1b"}, + {file = "setproctitle-1.3.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:690b4776f9c15aaf1023bb07d7c5b797681a17af98a4a69e76a1d504e41108b7"}, + {file = "setproctitle-1.3.7-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:00afa6fc507967d8c9d592a887cdc6c1f5742ceac6a4354d111ca0214847732c"}, + {file = "setproctitle-1.3.7-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9e02667f6b9fc1238ba753c0f4b0a37ae184ce8f3bbbc38e115d99646b3f4cd3"}, + {file = "setproctitle-1.3.7-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:83fcd271567d133eb9532d3b067c8a75be175b2b3b271e2812921a05303a693f"}, + {file = "setproctitle-1.3.7-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:13fe37951dda1a45c35d77d06e3da5d90e4f875c4918a7312b3b4556cfa7ff64"}, + {file = "setproctitle-1.3.7-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:a05509cfb2059e5d2ddff701d38e474169e9ce2a298cf1b6fd5f3a213a553fe5"}, + {file = "setproctitle-1.3.7-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:6da835e76ae18574859224a75db6e15c4c2aaa66d300a57efeaa4c97ca4c7381"}, + {file = "setproctitle-1.3.7-cp310-cp310-win32.whl", hash = "sha256:9e803d1b1e20240a93bac0bc1025363f7f80cb7eab67dfe21efc0686cc59ad7c"}, + {file = "setproctitle-1.3.7-cp310-cp310-win_amd64.whl", hash = "sha256:a97200acc6b64ec4cada52c2ecaf1fba1ef9429ce9c542f8a7db5bcaa9dcbd95"}, + {file = "setproctitle-1.3.7-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:a600eeb4145fb0ee6c287cb82a2884bd4ec5bbb076921e287039dcc7b7cc6dd0"}, + {file = "setproctitle-1.3.7-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:97a090fed480471bb175689859532709e28c085087e344bca45cf318034f70c4"}, + {file = "setproctitle-1.3.7-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:1607b963e7b53e24ec8a2cb4e0ab3ae591d7c6bf0a160feef0551da63452b37f"}, + {file = "setproctitle-1.3.7-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a20fb1a3974e2dab857870cf874b325b8705605cb7e7e8bcbb915bca896f52a9"}, + {file = "setproctitle-1.3.7-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f8d961bba676e07d77665204f36cffaa260f526e7b32d07ab3df6a2c1dfb44ba"}, + {file = "setproctitle-1.3.7-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:db0fd964fbd3a9f8999b502f65bd2e20883fdb5b1fae3a424e66db9a793ed307"}, + {file = "setproctitle-1.3.7-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:db116850fcf7cca19492030f8d3b4b6e231278e8fe097a043957d22ce1bdf3ee"}, + {file = "setproctitle-1.3.7-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:316664d8b24a5c91ee244460bdaf7a74a707adaa9e14fbe0dc0a53168bb9aba1"}, + {file = "setproctitle-1.3.7-cp311-cp311-win32.whl", hash = "sha256:b74774ca471c86c09b9d5037c8451fff06bb82cd320d26ae5a01c758088c0d5d"}, + {file = "setproctitle-1.3.7-cp311-cp311-win_amd64.whl", hash = "sha256:acb9097213a8dd3410ed9f0dc147840e45ca9797785272928d4be3f0e69e3be4"}, + {file = "setproctitle-1.3.7-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:2dc99aec591ab6126e636b11035a70991bc1ab7a261da428491a40b84376654e"}, + {file = "setproctitle-1.3.7-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:cdd8aa571b7aa39840fdbea620e308a19691ff595c3a10231e9ee830339dd798"}, + {file = "setproctitle-1.3.7-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:2906b6c7959cdb75f46159bf0acd8cc9906cf1361c9e1ded0d065fe8f9039629"}, + {file = "setproctitle-1.3.7-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6915964a6dda07920a1159321dcd6d94fc7fc526f815ca08a8063aeca3c204f1"}, + {file = "setproctitle-1.3.7-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:cff72899861c765bd4021d1ff1c68d60edc129711a2fdba77f9cb69ef726a8b6"}, + {file = "setproctitle-1.3.7-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:b7cb05bd446687ff816a3aaaf831047fc4c364feff7ada94a66024f1367b448c"}, + {file = "setproctitle-1.3.7-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:3a57b9a00de8cae7e2a1f7b9f0c2ac7b69372159e16a7708aa2f38f9e5cc987a"}, + {file = "setproctitle-1.3.7-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:d8828b356114f6b308b04afe398ed93803d7fca4a955dd3abe84430e28d33739"}, + {file = "setproctitle-1.3.7-cp312-cp312-win32.whl", hash = "sha256:b0304f905efc845829ac2bc791ddebb976db2885f6171f4a3de678d7ee3f7c9f"}, + {file = "setproctitle-1.3.7-cp312-cp312-win_amd64.whl", hash = "sha256:9888ceb4faea3116cf02a920ff00bfbc8cc899743e4b4ac914b03625bdc3c300"}, + {file = "setproctitle-1.3.7-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:c3736b2a423146b5e62230502e47e08e68282ff3b69bcfe08a322bee73407922"}, + {file = "setproctitle-1.3.7-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:3384e682b158d569e85a51cfbde2afd1ab57ecf93ea6651fe198d0ba451196ee"}, + {file = "setproctitle-1.3.7-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:0564a936ea687cd24dffcea35903e2a20962aa6ac20e61dd3a207652401492dd"}, + {file = "setproctitle-1.3.7-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a5d1cb3f81531f0eb40e13246b679a1bdb58762b170303463cb06ecc296f26d0"}, + {file = "setproctitle-1.3.7-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a7d159e7345f343b44330cbba9194169b8590cb13dae940da47aa36a72aa9929"}, + {file = "setproctitle-1.3.7-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:0b5074649797fd07c72ca1f6bff0406f4a42e1194faac03ecaab765ce605866f"}, + {file = "setproctitle-1.3.7-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:61e96febced3f61b766115381d97a21a6265a0f29188a791f6df7ed777aef698"}, + {file = "setproctitle-1.3.7-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:047138279f9463f06b858e579cc79580fbf7a04554d24e6bddf8fe5dddbe3d4c"}, + {file = "setproctitle-1.3.7-cp313-cp313-win32.whl", hash = "sha256:7f47accafac7fe6535ba8ba9efd59df9d84a6214565108d0ebb1199119c9cbbd"}, + {file = "setproctitle-1.3.7-cp313-cp313-win_amd64.whl", hash = "sha256:fe5ca35aeec6dc50cabab9bf2d12fbc9067eede7ff4fe92b8f5b99d92e21263f"}, + {file = "setproctitle-1.3.7-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:10e92915c4b3086b1586933a36faf4f92f903c5554f3c34102d18c7d3f5378e9"}, + {file = "setproctitle-1.3.7-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:de879e9c2eab637f34b1a14c4da1e030c12658cdc69ee1b3e5be81b380163ce5"}, + {file = "setproctitle-1.3.7-cp313-cp313t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:c18246d88e227a5b16248687514f95642505000442165f4b7db354d39d0e4c29"}, + {file = "setproctitle-1.3.7-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7081f193dab22df2c36f9fc6d113f3793f83c27891af8fe30c64d89d9a37e152"}, + {file = "setproctitle-1.3.7-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:9cc9b901ce129350637426a89cfd650066a4adc6899e47822e2478a74023ff7c"}, + {file = "setproctitle-1.3.7-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:80e177eff2d1ec172188d0d7fd9694f8e43d3aab76a6f5f929bee7bf7894e98b"}, + {file = "setproctitle-1.3.7-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:23e520776c445478a67ee71b2a3c1ffdafbe1f9f677239e03d7e2cc635954e18"}, + {file = "setproctitle-1.3.7-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:5fa1953126a3b9bd47049d58c51b9dac72e78ed120459bd3aceb1bacee72357c"}, + {file = "setproctitle-1.3.7-cp313-cp313t-win32.whl", hash = "sha256:4a5e212bf438a4dbeece763f4962ad472c6008ff6702e230b4f16a037e2f6f29"}, + {file = "setproctitle-1.3.7-cp313-cp313t-win_amd64.whl", hash = "sha256:cf2727b733e90b4f874bac53e3092aa0413fe1ea6d4f153f01207e6ce65034d9"}, + {file = "setproctitle-1.3.7-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:80c36c6a87ff72eabf621d0c79b66f3bdd0ecc79e873c1e9f0651ee8bf215c63"}, + {file = "setproctitle-1.3.7-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:b53602371a52b91c80aaf578b5ada29d311d12b8a69c0c17fbc35b76a1fd4f2e"}, + {file = "setproctitle-1.3.7-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:fcb966a6c57cf07cc9448321a08f3be6b11b7635be502669bc1d8745115d7e7f"}, + {file = "setproctitle-1.3.7-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:46178672599b940368d769474fe13ecef1b587d58bb438ea72b9987f74c56ea5"}, + {file = "setproctitle-1.3.7-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:7f9e9e3ff135cbcc3edd2f4cf29b139f4aca040d931573102742db70ff428c17"}, + {file = "setproctitle-1.3.7-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:14c7eba8d90c93b0e79c01f0bd92a37b61983c27d6d7d5a3b5defd599113d60e"}, + {file = "setproctitle-1.3.7-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:9e64e98077fb30b6cf98073d6c439cd91deb8ebbf8fc62d9dbf52bd38b0c6ac0"}, + {file = "setproctitle-1.3.7-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:b91387cc0f02a00ac95dcd93f066242d3cca10ff9e6153de7ee07069c6f0f7c8"}, + {file = "setproctitle-1.3.7-cp314-cp314-win32.whl", hash = "sha256:52b054a61c99d1b72fba58b7f5486e04b20fefc6961cd76722b424c187f362ed"}, + {file = "setproctitle-1.3.7-cp314-cp314-win_amd64.whl", hash = "sha256:5818e4080ac04da1851b3ec71e8a0f64e3748bf9849045180566d8b736702416"}, + {file = "setproctitle-1.3.7-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:6fc87caf9e323ac426910306c3e5d3205cd9f8dcac06d233fcafe9337f0928a3"}, + {file = "setproctitle-1.3.7-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:6134c63853d87a4897ba7d5cc0e16abfa687f6c66fc09f262bb70d67718f2309"}, + {file = "setproctitle-1.3.7-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:1403d2abfd32790b6369916e2313dffbe87d6b11dca5bbd898981bcde48e7a2b"}, + {file = "setproctitle-1.3.7-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e7c5bfe4228ea22373e3025965d1a4116097e555ee3436044f5c954a5e63ac45"}, + {file = "setproctitle-1.3.7-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:585edf25e54e21a94ccb0fe81ad32b9196b69ebc4fc25f81da81fb8a50cca9e4"}, + {file = "setproctitle-1.3.7-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:96c38cdeef9036eb2724c2210e8d0b93224e709af68c435d46a4733a3675fee1"}, + {file = "setproctitle-1.3.7-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:45e3ef48350abb49cf937d0a8ba15e42cee1e5ae13ca41a77c66d1abc27a5070"}, + {file = "setproctitle-1.3.7-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:1fae595d032b30dab4d659bece20debd202229fce12b55abab978b7f30783d73"}, + {file = "setproctitle-1.3.7-cp314-cp314t-win32.whl", hash = "sha256:02432f26f5d1329ab22279ff863c83589894977063f59e6c4b4845804a08f8c2"}, + {file = "setproctitle-1.3.7-cp314-cp314t-win_amd64.whl", hash = "sha256:cbc388e3d86da1f766d8fc2e12682e446064c01cea9f88a88647cfe7c011de6a"}, + {file = "setproctitle-1.3.7-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:376761125ab5dab822d40eaa7d9b7e876627ecd41de8fa5336713b611b47ccef"}, + {file = "setproctitle-1.3.7-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:2a4e03bd9aa5d10b8702f00ec1b740691da96b5003432f3000d60c56f1c2b4d3"}, + {file = "setproctitle-1.3.7-cp38-cp38-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:47d36e418ab86b3bc7946e27155e281a743274d02cd7e545f5d628a2875d32f9"}, + {file = "setproctitle-1.3.7-cp38-cp38-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a74714ce836914063c36c8a26ae11383cf8a379698c989fe46883e38a8faa5be"}, + {file = "setproctitle-1.3.7-cp38-cp38-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f2ae6c3f042fc866cc0fa2bc35ae00d334a9fa56c9d28dfc47d1b4f5ed23e375"}, + {file = "setproctitle-1.3.7-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:be7e01f3ad8d0e43954bebdb3088cb466633c2f4acdd88647e7fbfcfe9b9729f"}, + {file = "setproctitle-1.3.7-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:35a2cabcfdea4643d7811cfe9f3d92366d282b38ef5e7e93e25dafb6f97b0a59"}, + {file = "setproctitle-1.3.7-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:8ce2e39a40fca82744883834683d833e0eb28623752cc1c21c2ec8f06a890b39"}, + {file = "setproctitle-1.3.7-cp38-cp38-win32.whl", hash = "sha256:6f1be447456fe1e16c92f5fb479404a850d8f4f4ff47192fde14a59b0bae6a0a"}, + {file = "setproctitle-1.3.7-cp38-cp38-win_amd64.whl", hash = "sha256:5ce2613e1361959bff81317dc30a60adb29d8132b6159608a783878fc4bc4bbc"}, + {file = "setproctitle-1.3.7-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:deda9d79d1eb37b688729cac2dba0c137e992ebea960eadb7c2c255524c869e0"}, + {file = "setproctitle-1.3.7-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a93e4770ac22794cfa651ee53f092d7de7105c76b9fc088bb81ca0dcf698f704"}, + {file = "setproctitle-1.3.7-cp39-cp39-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:134e7f66703a1d92c0a9a0a417c580f2cc04b93d31d3fc0dd43c3aa194b706e1"}, + {file = "setproctitle-1.3.7-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9796732a040f617fc933f9531c9a84bb73c5c27b8074abbe52907076e804b2b7"}, + {file = "setproctitle-1.3.7-cp39-cp39-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ff3c1c32382fb71a200db8bab3df22f32e6ac7ec3170e92fa5b542cf42eed9a2"}, + {file = "setproctitle-1.3.7-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:01f27b5b72505b304152cb0bd7ff410cc4f2d69ac70c21a7fdfa64400a68642d"}, + {file = "setproctitle-1.3.7-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:80b6a562cbc92b289c28f34ce709a16b26b1696e9b9a0542a675ce3a788bdf3f"}, + {file = "setproctitle-1.3.7-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:c4fb90174d176473122e7eef7c6492d53761826f34ff61c81a1c1d66905025d3"}, + {file = "setproctitle-1.3.7-cp39-cp39-win32.whl", hash = "sha256:c77b3f58a35f20363f6e0a1219b367fbf7e2d2efe3d2c32e1f796447e6061c10"}, + {file = "setproctitle-1.3.7-cp39-cp39-win_amd64.whl", hash = "sha256:318ddcf88dafddf33039ad41bc933e1c49b4cb196fe1731a209b753909591680"}, + {file = "setproctitle-1.3.7-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:eb440c5644a448e6203935ed60466ec8d0df7278cd22dc6cf782d07911bcbea6"}, + {file = "setproctitle-1.3.7-pp310-pypy310_pp73-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:502b902a0e4c69031b87870ff4986c290ebbb12d6038a70639f09c331b18efb2"}, + {file = "setproctitle-1.3.7-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:f6f268caeabb37ccd824d749e7ce0ec6337c4ed954adba33ec0d90cc46b0ab78"}, + {file = "setproctitle-1.3.7-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:b1cac6a4b0252b8811d60b6d8d0f157c0fdfed379ac89c25a914e6346cf355a1"}, + {file = "setproctitle-1.3.7-pp311-pypy311_pp73-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:f1704c9e041f2b1dc38f5be4552e141e1432fba3dd52c72eeffd5bc2db04dc65"}, + {file = "setproctitle-1.3.7-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:b08b61976ffa548bd5349ce54404bf6b2d51bd74d4f1b241ed1b0f25bce09c3a"}, + {file = "setproctitle-1.3.7.tar.gz", hash = "sha256:bc2bc917691c1537d5b9bca1468437176809c7e11e5694ca79a9ca12345dcb9e"}, ] [package.extras] @@ -4286,39 +4327,25 @@ test = ["pytest"] [[package]] name = "setuptools" -version = "80.9.0" -description = "Easily download, build, install, upgrade, and uninstall Python packages" +version = "82.0.1" +description = "Most extensible Python build backend with support for C/C++ extension modules" optional = false python-versions = ">=3.9" groups = ["main"] +markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ - {file = "setuptools-80.9.0-py3-none-any.whl", hash = "sha256:062d34222ad13e0cc312a4c02d73f059e86a4acbfbdea8f8f76b28c99f306922"}, - {file = "setuptools-80.9.0.tar.gz", hash = "sha256:f36b47402ecde768dbfafc46e8e4207b4360c654f1f3bb84475f0a28628fb19c"}, + {file = "setuptools-82.0.1-py3-none-any.whl", hash = "sha256:a59e362652f08dcd477c78bb6e7bd9d80a7995bc73ce773050228a348ce2e5bb"}, + {file = "setuptools-82.0.1.tar.gz", hash = "sha256:7d872682c5d01cfde07da7bccc7b65469d3dca203318515ada1de5eda35efbf9"}, ] [package.extras] -check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1) ; sys_platform != \"cygwin\"", "ruff (>=0.8.0) ; sys_platform != \"cygwin\""] -core = ["importlib_metadata (>=6) ; python_version < \"3.10\"", "jaraco.functools (>=4)", "jaraco.text (>=3.7)", "more_itertools", "more_itertools (>=8.8)", "packaging (>=24.2)", "platformdirs (>=4.2.2)", "tomli (>=2.0.1) ; python_version < \"3.11\"", "wheel (>=0.43.0)"] +check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1) ; sys_platform != \"cygwin\"", "ruff (>=0.13.0) ; sys_platform != \"cygwin\""] +core = ["importlib_metadata (>=6) ; python_version < \"3.10\"", "jaraco.functools (>=4)", "jaraco.text (>=3.7)", "more_itertools", "more_itertools (>=8.8)", "packaging (>=24.2)", "tomli (>=2.0.1) ; python_version < \"3.11\"", "wheel (>=0.43.0)"] cover = ["pytest-cov"] doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "pyproject-hooks (!=1.1)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier", "towncrier (<24.7)"] enabler = ["pytest-enabler (>=2.2)"] test = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "ini2toml[lite] (>=0.14)", "jaraco.develop (>=7.21) ; python_version >= \"3.9\" and sys_platform != \"cygwin\"", "jaraco.envs (>=2.2)", "jaraco.path (>=3.7.2)", "jaraco.test (>=5.5)", "packaging (>=24.2)", "pip (>=19.1)", "pyproject-hooks (!=1.1)", "pytest (>=6,!=8.1.*)", "pytest-home (>=0.5)", "pytest-perf ; sys_platform != \"cygwin\"", "pytest-subprocess", "pytest-timeout", "pytest-xdist (>=3)", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel (>=0.44.0)"] -type = ["importlib_metadata (>=7.0.2) ; python_version < \"3.10\"", "jaraco.develop (>=7.21) ; sys_platform != \"cygwin\"", "mypy (==1.14.*)", "pytest-mypy"] - -[[package]] -name = "shtab" -version = "1.7.2" -description = "Automagic shell tab completion for Python CLI applications" -optional = false -python-versions = ">=3.7" -groups = ["main"] -files = [ - {file = "shtab-1.7.2-py3-none-any.whl", hash = "sha256:858a5805f6c137bb0cda4f282d27d08fd44ca487ab4a6a36d2a400263cd0b5c1"}, - {file = "shtab-1.7.2.tar.gz", hash = "sha256:8c16673ade76a2d42417f03e57acf239bfb5968e842204c17990cae357d07d6f"}, -] - -[package.extras] -dev = ["pytest (>=6)", "pytest-cov", "pytest-timeout"] +type = ["importlib_metadata (>=7.0.2) ; python_version < \"3.10\"", "jaraco.develop (>=7.21) ; sys_platform != \"cygwin\"", "mypy (==1.18.*)", "pytest-mypy"] [[package]] name = "six" @@ -4327,6 +4354,7 @@ description = "Python 2 and 3 compatibility utilities" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" groups = ["main"] +markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274"}, {file = "six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81"}, @@ -4334,14 +4362,15 @@ files = [ [[package]] name = "smmap" -version = "5.0.2" +version = "5.0.3" description = "A pure Python implementation of a sliding window memory map manager" optional = false python-versions = ">=3.7" groups = ["main"] +markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ - {file = "smmap-5.0.2-py3-none-any.whl", hash = "sha256:b30115f0def7d7531d22a0fb6502488d879e75b260a9db4d0819cfb25403af5e"}, - {file = "smmap-5.0.2.tar.gz", hash = "sha256:26ea65a03958fa0c8a1c7e8c7a58fdc77221b8910f6be2131affade476898ad5"}, + {file = "smmap-5.0.3-py3-none-any.whl", hash = "sha256:c106e05d5a61449cf6ba9a1e650227ecfb141590d2a98412103ff35d89fc7b2f"}, + {file = "smmap-5.0.3.tar.gz", hash = "sha256:4d9debb8b99007ae47165abc08670bd74cb74b5227dda7f643eccc4e9eb5642c"}, ] [[package]] @@ -4351,6 +4380,7 @@ description = "Extract data from python stack frames and tracebacks for informat optional = false python-versions = "*" groups = ["main"] +markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "stack_data-0.6.3-py3-none-any.whl", hash = "sha256:d5558e0c25a4cb0853cddad3d77da9891a08cb85dd9f9f91b9f8cd66e511e695"}, {file = "stack_data-0.6.3.tar.gz", hash = "sha256:836a778de4fec4dcd1dcd89ed8abff8a221f58308462e1c4aa2a3cf30148f0b9"}, @@ -4366,42 +4396,49 @@ tests = ["cython", "littleutils", "pygments", "pytest", "typeguard"] [[package]] name = "statsmodels" -version = "0.14.4" +version = "0.14.6" description = "Statistical computations and models for Python" optional = false python-versions = ">=3.9" groups = ["main"] -files = [ - {file = "statsmodels-0.14.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7a62f1fc9086e4b7ee789a6f66b3c0fc82dd8de1edda1522d30901a0aa45e42b"}, - {file = "statsmodels-0.14.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:46ac7ddefac0c9b7b607eed1d47d11e26fe92a1bc1f4d9af48aeed4e21e87981"}, - {file = "statsmodels-0.14.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2a337b731aa365d09bb0eab6da81446c04fde6c31976b1d8e3d3a911f0f1e07b"}, - {file = "statsmodels-0.14.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:631bb52159117c5da42ba94bd94859276b68cab25dc4cac86475bc24671143bc"}, - {file = "statsmodels-0.14.4-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:3bb2e580d382545a65f298589809af29daeb15f9da2eb252af8f79693e618abc"}, - {file = "statsmodels-0.14.4-cp310-cp310-win_amd64.whl", hash = "sha256:9729642884147ee9db67b5a06a355890663d21f76ed608a56ac2ad98b94d201a"}, - {file = "statsmodels-0.14.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:5ed7e118e6e3e02d6723a079b8c97eaadeed943fa1f7f619f7148dfc7862670f"}, - {file = "statsmodels-0.14.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f5f537f7d000de4a1708c63400755152b862cd4926bb81a86568e347c19c364b"}, - {file = "statsmodels-0.14.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aa74aaa26eaa5012b0a01deeaa8a777595d0835d3d6c7175f2ac65435a7324d2"}, - {file = "statsmodels-0.14.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e332c2d9b806083d1797231280602340c5c913f90d4caa0213a6a54679ce9331"}, - {file = "statsmodels-0.14.4-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:d9c8fa28dfd75753d9cf62769ba1fecd7e73a0be187f35cc6f54076f98aa3f3f"}, - {file = "statsmodels-0.14.4-cp311-cp311-win_amd64.whl", hash = "sha256:a6087ecb0714f7c59eb24c22781491e6f1cfffb660b4740e167625ca4f052056"}, - {file = "statsmodels-0.14.4-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:5221dba7424cf4f2561b22e9081de85f5bb871228581124a0d1b572708545199"}, - {file = "statsmodels-0.14.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:17672b30c6b98afe2b095591e32d1d66d4372f2651428e433f16a3667f19eabb"}, - {file = "statsmodels-0.14.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ab5e6312213b8cfb9dca93dd46a0f4dccb856541f91d3306227c3d92f7659245"}, - {file = "statsmodels-0.14.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4bbb150620b53133d6cd1c5d14c28a4f85701e6c781d9b689b53681effaa655f"}, - {file = "statsmodels-0.14.4-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:bb695c2025d122a101c2aca66d2b78813c321b60d3a7c86bb8ec4467bb53b0f9"}, - {file = "statsmodels-0.14.4-cp312-cp312-win_amd64.whl", hash = "sha256:7f7917a51766b4e074da283c507a25048ad29a18e527207883d73535e0dc6184"}, - {file = "statsmodels-0.14.4-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:b5a24f5d2c22852d807d2b42daf3a61740820b28d8381daaf59dcb7055bf1a79"}, - {file = "statsmodels-0.14.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:df4f7864606fa843d7e7c0e6af288f034a2160dba14e6ccc09020a3cf67cb092"}, - {file = "statsmodels-0.14.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:91341cbde9e8bea5fb419a76e09114e221567d03f34ca26e6d67ae2c27d8fe3c"}, - {file = "statsmodels-0.14.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1322286a7bfdde2790bf72d29698a1b76c20b8423a55bdcd0d457969d0041f72"}, - {file = "statsmodels-0.14.4-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e31b95ac603415887c9f0d344cb523889cf779bc52d68e27e2d23c358958fec7"}, - {file = "statsmodels-0.14.4-cp313-cp313-win_amd64.whl", hash = "sha256:81030108d27aecc7995cac05aa280cf8c6025f6a6119894eef648997936c2dd0"}, - {file = "statsmodels-0.14.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4793b01b7a5f5424f5a1dbcefc614c83c7608aa2b035f087538253007c339d5d"}, - {file = "statsmodels-0.14.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:d330da34f59f1653c5193f9fe3a3a258977c880746db7f155fc33713ea858db5"}, - {file = "statsmodels-0.14.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6e9ddefba1d4e1107c1f20f601b0581421ea3ad9fd75ce3c2ba6a76b6dc4682c"}, - {file = "statsmodels-0.14.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6f43da7957e00190104c5dd0f661bfc6dfc68b87313e3f9c4dbd5e7d222e0aeb"}, - {file = "statsmodels-0.14.4-cp39-cp39-win_amd64.whl", hash = "sha256:8286f69a5e1d0e0b366ffed5691140c83d3efc75da6dbf34a3d06e88abfaaab6"}, - {file = "statsmodels-0.14.4.tar.gz", hash = "sha256:5d69e0f39060dc72c067f9bb6e8033b6dccdb0bae101d76a7ef0bcc94e898b67"}, +markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" +files = [ + {file = "statsmodels-0.14.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f4ff0649a2df674c7ffb6fa1a06bffdb82a6adf09a48e90e000a15a6aaa734b0"}, + {file = "statsmodels-0.14.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:109012088b3e370080846ab053c76d125268631410142daad2f8c10770e8e8d9"}, + {file = "statsmodels-0.14.6-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e93bd5d220f3cb6fc5fc1bffd5b094966cab8ee99f6c57c02e95710513d6ac3f"}, + {file = "statsmodels-0.14.6-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:06eec42d682fdb09fe5d70a05930857efb141754ec5a5056a03304c1b5e32fd9"}, + {file = "statsmodels-0.14.6-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:0444e88557df735eda7db330806fe09d51c9f888bb1f5906cb3a61fb1a3ed4a8"}, + {file = "statsmodels-0.14.6-cp310-cp310-win_amd64.whl", hash = "sha256:e83a9abe653835da3b37fb6ae04b45480c1de11b3134bd40b09717192a1456ea"}, + {file = "statsmodels-0.14.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6ad5c2810fc6c684254a7792bf1cbaf1606cdee2a253f8bd259c43135d87cfb4"}, + {file = "statsmodels-0.14.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:341fa68a7403e10a95c7b6e41134b0da3a7b835ecff1eb266294408535a06eb6"}, + {file = "statsmodels-0.14.6-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bdf1dfe2a3ca56f5529118baf33a13efed2783c528f4a36409b46bbd2d9d48eb"}, + {file = "statsmodels-0.14.6-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a3764ba8195c9baf0925a96da0743ff218067a269f01d155ca3558deed2658ca"}, + {file = "statsmodels-0.14.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9e8d2e519852adb1b420e018f5ac6e6684b2b877478adf7fda2cfdb58f5acb5d"}, + {file = "statsmodels-0.14.6-cp311-cp311-win_amd64.whl", hash = "sha256:2738a00fca51196f5a7d44b06970ace6b8b30289839e4808d656f8a98e35faa7"}, + {file = "statsmodels-0.14.6-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:fe76140ae7adc5ff0e60a3f0d56f4fffef484efa803c3efebf2fcd734d72ecb5"}, + {file = "statsmodels-0.14.6-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:26d4f0ed3b31f3c86f83a92f5c1f5cbe63fc992cd8915daf28ca49be14463a1c"}, + {file = "statsmodels-0.14.6-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d8c00a42863e4f4733ac9d078bbfad816249c01451740e6f5053ecc7db6d6368"}, + {file = "statsmodels-0.14.6-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:19b58cf7474aa9e7e3b0771a66537148b2df9b5884fbf156096c0e6c1ff0469d"}, + {file = "statsmodels-0.14.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:81e7dcc5e9587f2567e52deaff5220b175bf2f648951549eae5fc9383b62bc37"}, + {file = "statsmodels-0.14.6-cp312-cp312-win_amd64.whl", hash = "sha256:b5eb07acd115aa6208b4058211138393a7e6c2cf12b6f213ede10f658f6a714f"}, + {file = "statsmodels-0.14.6-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:47ee7af083623d2091954fa71c7549b8443168f41b7c5dce66510274c50fd73e"}, + {file = "statsmodels-0.14.6-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:aa60d82e29fcd0a736e86feb63a11d2380322d77a9369a54be8b0965a3985f71"}, + {file = "statsmodels-0.14.6-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:89ee7d595f5939cc20bf946faedcb5137d975f03ae080f300ebb4398f16a5bd4"}, + {file = "statsmodels-0.14.6-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:730f3297b26749b216a06e4327fe0be59b8d05f7d594fb6caff4287b69654589"}, + {file = "statsmodels-0.14.6-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:f1c08befa85e93acc992b72a390ddb7bd876190f1360e61d10cf43833463bc9c"}, + {file = "statsmodels-0.14.6-cp313-cp313-win_amd64.whl", hash = "sha256:8021271a79f35b842c02a1794465a651a9d06ec2080f76ebc3b7adce77d08233"}, + {file = "statsmodels-0.14.6-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:00781869991f8f02ad3610da6627fd26ebe262210287beb59761982a8fa88cae"}, + {file = "statsmodels-0.14.6-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:73f305fbf31607b35ce919fae636ab8b80d175328ed38fdc6f354e813b86ee37"}, + {file = "statsmodels-0.14.6-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e443e7077a6e2d3faeea72f5a92c9f12c63722686eb80bb40a0f04e4a7e267ad"}, + {file = "statsmodels-0.14.6-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3414e40c073d725007a6603a18247ab7af3467e1af4a5e5a24e4c27bc26673b4"}, + {file = "statsmodels-0.14.6-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:a518d3f9889ef920116f9fa56d0338069e110f823926356946dae83bc9e33e19"}, + {file = "statsmodels-0.14.6-cp314-cp314-win_amd64.whl", hash = "sha256:151b73e29f01fe619dbce7f66d61a356e9d1fe5e906529b78807df9189c37721"}, + {file = "statsmodels-0.14.6-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4d0c1b0f9f6915619e2a0d3853e5763d4d66876892ad352e7d7b93a737556978"}, + {file = "statsmodels-0.14.6-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9e0fc891d6358bf376cc0ae1fee10a650478172ae9ba359daba1785fc496cd1a"}, + {file = "statsmodels-0.14.6-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0f52ef0f0b63b8fd11e1ef1c2a1e73a410720b8715c9a83a26d733b6815597fe"}, + {file = "statsmodels-0.14.6-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b328eafa86a2a67303fdb1d25677d15b70cd2a5229aabec7670ec5ea840f1375"}, + {file = "statsmodels-0.14.6-cp39-cp39-win_amd64.whl", hash = "sha256:3bef39f8587754f2d644b2e831e102fa08ace9a5a1af4b583b122e6fd3e083ab"}, + {file = "statsmodels-0.14.6.tar.gz", hash = "sha256:4d17873d3e607d398b85126cd4ed7aad89e4e9d89fc744cdab1af3189a996c2a"}, ] [package.dependencies] @@ -4413,8 +4450,8 @@ scipy = ">=1.8,<1.9.2 || >1.9.2" [package.extras] build = ["cython (>=3.0.10)"] -develop = ["colorama", "cython (>=3.0.10)", "cython (>=3.0.10,<4)", "flake8", "isort", "joblib", "matplotlib (>=3)", "pytest (>=7.3.0,<8)", "pytest-cov", "pytest-randomly", "pytest-xdist", "pywinpty ; os_name == \"nt\"", "setuptools-scm[toml] (>=8.0,<9.0)"] -docs = ["ipykernel", "jupyter-client", "matplotlib", "nbconvert", "nbformat", "numpydoc", "pandas-datareader", "sphinx"] +develop = ["colorama", "cython (>=3.0.10)", "cython (>=3.0.10,<4)", "flake8", "isort", "jinja2", "joblib", "matplotlib (>=3)", "pytest (>=7.3.0,<8)", "pytest-cov", "pytest-randomly", "pytest-xdist", "pywinpty ; os_name == \"nt\"", "setuptools_scm[toml] (>=8.0,<9.0)"] +docs = ["ipykernel", "jupyter_client", "matplotlib", "nbconvert", "nbformat", "numpydoc", "pandas-datareader", "sphinx"] [[package]] name = "supersuit" @@ -4423,6 +4460,7 @@ description = "Wrappers for Gymnasium and PettingZoo" optional = false python-versions = ">=3.8" groups = ["main"] +markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "SuperSuit-3.9.3-py3-none-any.whl", hash = "sha256:f30ab6fd9fe720ea7fa73d45a96935b6321c4ea1aa45d7997684c09f39aa10de"}, {file = "supersuit-3.9.3.tar.gz", hash = "sha256:10f5d0ed208ddb92fba767a7889ada9f46894519077527d6af799a7767a13159"}, @@ -4443,6 +4481,7 @@ description = "Computer algebra system (CAS) in Python" optional = false python-versions = ">=3.9" groups = ["main"] +markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "sympy-1.14.0-py3-none-any.whl", hash = "sha256:e091cc3e99d2141a0ba2847328f5479b05d94a6635cb96148ccb3f34671bd8f5"}, {file = "sympy-1.14.0.tar.gz", hash = "sha256:d3d3fe8df1e5a0b42f0e7bdf50541697dbe7d23746e894990c030e2b05e72517"}, @@ -4461,6 +4500,7 @@ description = "TensorBoard lets you watch Tensors Flow" optional = false python-versions = ">=3.9" groups = ["main"] +markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "tensorboard-2.19.0-py3-none-any.whl", hash = "sha256:5e71b98663a641a7ce8a6e70b0be8e1a4c0c45d48760b076383ac4755c35b9a0"}, ] @@ -4484,6 +4524,7 @@ description = "Fast data loading for TensorBoard" optional = false python-versions = ">=3.7" groups = ["main"] +markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "tensorboard_data_server-0.7.2-py3-none-any.whl", hash = "sha256:7e0610d205889588983836ec05dc098e80f97b7e7bbff7e994ebb78f578d0ddb"}, {file = "tensorboard_data_server-0.7.2-py3-none-macosx_10_9_x86_64.whl", hash = "sha256:9fe5d24221b29625dbc7328b0436ca7fc1c23de4acf4d272f1180856e32f9f60"}, @@ -4492,14 +4533,15 @@ files = [ [[package]] name = "termcolor" -version = "3.1.0" +version = "3.3.0" description = "ANSI color formatting for output in terminal" optional = false -python-versions = ">=3.9" +python-versions = ">=3.10" groups = ["main"] +markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ - {file = "termcolor-3.1.0-py3-none-any.whl", hash = "sha256:591dd26b5c2ce03b9e43f391264626557873ce1d379019786f99b0c2bee140aa"}, - {file = "termcolor-3.1.0.tar.gz", hash = "sha256:6a6dd7fbee581909eeec6a756cff1d7f7c376063b14e4a298dc4980309e55970"}, + {file = "termcolor-3.3.0-py3-none-any.whl", hash = "sha256:cf642efadaf0a8ebbbf4bc7a31cec2f9b5f21a9f726f4ccbb08192c9c26f43a5"}, + {file = "termcolor-3.3.0.tar.gz", hash = "sha256:348871ca648ec6a9a983a13ab626c0acce02f515b9e1983332b17af7979521c5"}, ] [package.extras] @@ -4512,6 +4554,7 @@ description = "threadpoolctl" optional = false python-versions = ">=3.9" groups = ["main"] +markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "threadpoolctl-3.6.0-py3-none-any.whl", hash = "sha256:43a0b8fd5a2928500110039e43a5eed8480b918967083ea48dc3ab9f13c4a7fb"}, {file = "threadpoolctl-3.6.0.tar.gz", hash = "sha256:8ab8b4aa3491d812b623328249fab5302a68d2d71745c8a4c719a2fcaba9f44e"}, @@ -4524,6 +4567,7 @@ description = "A tiny, simple image scaler." optional = false python-versions = ">=3.8" groups = ["main"] +markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "tinyscaler-1.2.8-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:b69a0414d626ba5d075b93546f37ece0c10f690f7d3ce3f162c2316ac1667511"}, {file = "tinyscaler-1.2.8-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fb30db6782df95c34b294266876e71fd3d32dd3d33bf4c8ec72d07f570ae7bca"}, @@ -4548,45 +4592,60 @@ numpy = ">=1.21.0" [[package]] name = "tomli" -version = "2.2.1" +version = "2.4.0" description = "A lil' TOML parser" optional = false python-versions = ">=3.8" groups = ["main"] -markers = "python_version < \"3.11\"" -files = [ - {file = "tomli-2.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:678e4fa69e4575eb77d103de3df8a895e1591b48e740211bd1067378c69e8249"}, - {file = "tomli-2.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:023aa114dd824ade0100497eb2318602af309e5a55595f76b626d6d9f3b7b0a6"}, - {file = "tomli-2.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ece47d672db52ac607a3d9599a9d48dcb2f2f735c6c2d1f34130085bb12b112a"}, - {file = "tomli-2.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6972ca9c9cc9f0acaa56a8ca1ff51e7af152a9f87fb64623e31d5c83700080ee"}, - {file = "tomli-2.2.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c954d2250168d28797dd4e3ac5cf812a406cd5a92674ee4c8f123c889786aa8e"}, - {file = "tomli-2.2.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8dd28b3e155b80f4d54beb40a441d366adcfe740969820caf156c019fb5c7ec4"}, - {file = "tomli-2.2.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:e59e304978767a54663af13c07b3d1af22ddee3bb2fb0618ca1593e4f593a106"}, - {file = "tomli-2.2.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:33580bccab0338d00994d7f16f4c4ec25b776af3ffaac1ed74e0b3fc95e885a8"}, - {file = "tomli-2.2.1-cp311-cp311-win32.whl", hash = "sha256:465af0e0875402f1d226519c9904f37254b3045fc5084697cefb9bdde1ff99ff"}, - {file = "tomli-2.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:2d0f2fdd22b02c6d81637a3c95f8cd77f995846af7414c5c4b8d0545afa1bc4b"}, - {file = "tomli-2.2.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:4a8f6e44de52d5e6c657c9fe83b562f5f4256d8ebbfe4ff922c495620a7f6cea"}, - {file = "tomli-2.2.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8d57ca8095a641b8237d5b079147646153d22552f1c637fd3ba7f4b0b29167a8"}, - {file = "tomli-2.2.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e340144ad7ae1533cb897d406382b4b6fede8890a03738ff1683af800d54192"}, - {file = "tomli-2.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db2b95f9de79181805df90bedc5a5ab4c165e6ec3fe99f970d0e302f384ad222"}, - {file = "tomli-2.2.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:40741994320b232529c802f8bc86da4e1aa9f413db394617b9a256ae0f9a7f77"}, - {file = "tomli-2.2.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:400e720fe168c0f8521520190686ef8ef033fb19fc493da09779e592861b78c6"}, - {file = "tomli-2.2.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:02abe224de6ae62c19f090f68da4e27b10af2b93213d36cf44e6e1c5abd19fdd"}, - {file = "tomli-2.2.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b82ebccc8c8a36f2094e969560a1b836758481f3dc360ce9a3277c65f374285e"}, - {file = "tomli-2.2.1-cp312-cp312-win32.whl", hash = "sha256:889f80ef92701b9dbb224e49ec87c645ce5df3fa2cc548664eb8a25e03127a98"}, - {file = "tomli-2.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:7fc04e92e1d624a4a63c76474610238576942d6b8950a2d7f908a340494e67e4"}, - {file = "tomli-2.2.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f4039b9cbc3048b2416cc57ab3bda989a6fcf9b36cf8937f01a6e731b64f80d7"}, - {file = "tomli-2.2.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:286f0ca2ffeeb5b9bd4fcc8d6c330534323ec51b2f52da063b11c502da16f30c"}, - {file = "tomli-2.2.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a92ef1a44547e894e2a17d24e7557a5e85a9e1d0048b0b5e7541f76c5032cb13"}, - {file = "tomli-2.2.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9316dc65bed1684c9a98ee68759ceaed29d229e985297003e494aa825ebb0281"}, - {file = "tomli-2.2.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e85e99945e688e32d5a35c1ff38ed0b3f41f43fad8df0bdf79f72b2ba7bc5272"}, - {file = "tomli-2.2.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ac065718db92ca818f8d6141b5f66369833d4a80a9d74435a268c52bdfa73140"}, - {file = "tomli-2.2.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:d920f33822747519673ee656a4b6ac33e382eca9d331c87770faa3eef562aeb2"}, - {file = "tomli-2.2.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a198f10c4d1b1375d7687bc25294306e551bf1abfa4eace6650070a5c1ae2744"}, - {file = "tomli-2.2.1-cp313-cp313-win32.whl", hash = "sha256:d3f5614314d758649ab2ab3a62d4f2004c825922f9e370b29416484086b264ec"}, - {file = "tomli-2.2.1-cp313-cp313-win_amd64.whl", hash = "sha256:a38aa0308e754b0e3c67e344754dff64999ff9b513e691d0e786265c93583c69"}, - {file = "tomli-2.2.1-py3-none-any.whl", hash = "sha256:cb55c73c5f4408779d0cf3eef9f762b9c9f147a77de7b258bef0a5628adc85cc"}, - {file = "tomli-2.2.1.tar.gz", hash = "sha256:cd45e1dc79c835ce60f7404ec8119f2eb06d38b1deba146f07ced3bbc44505ff"}, +markers = "python_version == \"3.10\" and (sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\")" +files = [ + {file = "tomli-2.4.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b5ef256a3fd497d4973c11bf142e9ed78b150d36f5773f1ca6088c230ffc5867"}, + {file = "tomli-2.4.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5572e41282d5268eb09a697c89a7bee84fae66511f87533a6f88bd2f7b652da9"}, + {file = "tomli-2.4.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:551e321c6ba03b55676970b47cb1b73f14a0a4dce6a3e1a9458fd6d921d72e95"}, + {file = "tomli-2.4.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5e3f639a7a8f10069d0e15408c0b96a2a828cfdec6fca05296ebcdcc28ca7c76"}, + {file = "tomli-2.4.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1b168f2731796b045128c45982d3a4874057626da0e2ef1fdd722848b741361d"}, + {file = "tomli-2.4.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:133e93646ec4300d651839d382d63edff11d8978be23da4cc106f5a18b7d0576"}, + {file = "tomli-2.4.0-cp311-cp311-win32.whl", hash = "sha256:b6c78bdf37764092d369722d9946cb65b8767bfa4110f902a1b2542d8d173c8a"}, + {file = "tomli-2.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:d3d1654e11d724760cdb37a3d7691f0be9db5fbdaef59c9f532aabf87006dbaa"}, + {file = "tomli-2.4.0-cp311-cp311-win_arm64.whl", hash = "sha256:cae9c19ed12d4e8f3ebf46d1a75090e4c0dc16271c5bce1c833ac168f08fb614"}, + {file = "tomli-2.4.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:920b1de295e72887bafa3ad9f7a792f811847d57ea6b1215154030cf131f16b1"}, + {file = "tomli-2.4.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7d6d9a4aee98fac3eab4952ad1d73aee87359452d1c086b5ceb43ed02ddb16b8"}, + {file = "tomli-2.4.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:36b9d05b51e65b254ea6c2585b59d2c4cb91c8a3d91d0ed0f17591a29aaea54a"}, + {file = "tomli-2.4.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1c8a885b370751837c029ef9bc014f27d80840e48bac415f3412e6593bbc18c1"}, + {file = "tomli-2.4.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8768715ffc41f0008abe25d808c20c3d990f42b6e2e58305d5da280ae7d1fa3b"}, + {file = "tomli-2.4.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:7b438885858efd5be02a9a133caf5812b8776ee0c969fea02c45e8e3f296ba51"}, + {file = "tomli-2.4.0-cp312-cp312-win32.whl", hash = "sha256:0408e3de5ec77cc7f81960c362543cbbd91ef883e3138e81b729fc3eea5b9729"}, + {file = "tomli-2.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:685306e2cc7da35be4ee914fd34ab801a6acacb061b6a7abca922aaf9ad368da"}, + {file = "tomli-2.4.0-cp312-cp312-win_arm64.whl", hash = "sha256:5aa48d7c2356055feef06a43611fc401a07337d5b006be13a30f6c58f869e3c3"}, + {file = "tomli-2.4.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:84d081fbc252d1b6a982e1870660e7330fb8f90f676f6e78b052ad4e64714bf0"}, + {file = "tomli-2.4.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:9a08144fa4cba33db5255f9b74f0b89888622109bd2776148f2597447f92a94e"}, + {file = "tomli-2.4.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c73add4bb52a206fd0c0723432db123c0c75c280cbd67174dd9d2db228ebb1b4"}, + {file = "tomli-2.4.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1fb2945cbe303b1419e2706e711b7113da57b7db31ee378d08712d678a34e51e"}, + {file = "tomli-2.4.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:bbb1b10aa643d973366dc2cb1ad94f99c1726a02343d43cbc011edbfac579e7c"}, + {file = "tomli-2.4.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4cbcb367d44a1f0c2be408758b43e1ffb5308abe0ea222897d6bfc8e8281ef2f"}, + {file = "tomli-2.4.0-cp313-cp313-win32.whl", hash = "sha256:7d49c66a7d5e56ac959cb6fc583aff0651094ec071ba9ad43df785abc2320d86"}, + {file = "tomli-2.4.0-cp313-cp313-win_amd64.whl", hash = "sha256:3cf226acb51d8f1c394c1b310e0e0e61fecdd7adcb78d01e294ac297dd2e7f87"}, + {file = "tomli-2.4.0-cp313-cp313-win_arm64.whl", hash = "sha256:d20b797a5c1ad80c516e41bc1fb0443ddb5006e9aaa7bda2d71978346aeb9132"}, + {file = "tomli-2.4.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:26ab906a1eb794cd4e103691daa23d95c6919cc2fa9160000ac02370cc9dd3f6"}, + {file = "tomli-2.4.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:20cedb4ee43278bc4f2fee6cb50daec836959aadaf948db5172e776dd3d993fc"}, + {file = "tomli-2.4.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:39b0b5d1b6dd03684b3fb276407ebed7090bbec989fa55838c98560c01113b66"}, + {file = "tomli-2.4.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a26d7ff68dfdb9f87a016ecfd1e1c2bacbe3108f4e0f8bcd2228ef9a766c787d"}, + {file = "tomli-2.4.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:20ffd184fb1df76a66e34bd1b36b4a4641bd2b82954befa32fe8163e79f1a702"}, + {file = "tomli-2.4.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:75c2f8bbddf170e8effc98f5e9084a8751f8174ea6ccf4fca5398436e0320bc8"}, + {file = "tomli-2.4.0-cp314-cp314-win32.whl", hash = "sha256:31d556d079d72db7c584c0627ff3a24c5d3fb4f730221d3444f3efb1b2514776"}, + {file = "tomli-2.4.0-cp314-cp314-win_amd64.whl", hash = "sha256:43e685b9b2341681907759cf3a04e14d7104b3580f808cfde1dfdb60ada85475"}, + {file = "tomli-2.4.0-cp314-cp314-win_arm64.whl", hash = "sha256:3d895d56bd3f82ddd6faaff993c275efc2ff38e52322ea264122d72729dca2b2"}, + {file = "tomli-2.4.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:5b5807f3999fb66776dbce568cc9a828544244a8eb84b84b9bafc080c99597b9"}, + {file = "tomli-2.4.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:c084ad935abe686bd9c898e62a02a19abfc9760b5a79bc29644463eaf2840cb0"}, + {file = "tomli-2.4.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0f2e3955efea4d1cfbcb87bc321e00dc08d2bcb737fd1d5e398af111d86db5df"}, + {file = "tomli-2.4.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0e0fe8a0b8312acf3a88077a0802565cb09ee34107813bba1c7cd591fa6cfc8d"}, + {file = "tomli-2.4.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:413540dce94673591859c4c6f794dfeaa845e98bf35d72ed59636f869ef9f86f"}, + {file = "tomli-2.4.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:0dc56fef0e2c1c470aeac5b6ca8cc7b640bb93e92d9803ddaf9ea03e198f5b0b"}, + {file = "tomli-2.4.0-cp314-cp314t-win32.whl", hash = "sha256:d878f2a6707cc9d53a1be1414bbb419e629c3d6e67f69230217bb663e76b5087"}, + {file = "tomli-2.4.0-cp314-cp314t-win_amd64.whl", hash = "sha256:2add28aacc7425117ff6364fe9e06a183bb0251b03f986df0e78e974047571fd"}, + {file = "tomli-2.4.0-cp314-cp314t-win_arm64.whl", hash = "sha256:2b1e3b80e1d5e52e40e9b924ec43d81570f0e7d09d11081b797bc4692765a3d4"}, + {file = "tomli-2.4.0-py3-none-any.whl", hash = "sha256:1f776e7d669ebceb01dee46484485f43a4048746235e683bcdffacdf1fb4785a"}, + {file = "tomli-2.4.0.tar.gz", hash = "sha256:aa89c3f6c277dd275d8e243ad24f3b5e701491a860d5121f2cdd399fbb31fc9c"}, ] [[package]] @@ -4596,6 +4655,7 @@ description = "Tensors and Dynamic neural networks in Python with strong GPU acc optional = false python-versions = ">=3.8.0" groups = ["main"] +markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "torch-2.4.1-cp310-cp310-manylinux1_x86_64.whl", hash = "sha256:362f82e23a4cd46341daabb76fba08f04cd646df9bfaf5da50af97cb60ca4971"}, {file = "torch-2.4.1-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:e8ac1985c3ff0f60d85b991954cfc2cc25f79c84545aead422763148ed2759e3"}, @@ -4646,35 +4706,36 @@ optree = ["optree (>=0.11.0)"] [[package]] name = "tornado" -version = "6.4.2" +version = "6.5.5" description = "Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed." optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" groups = ["main"] +markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ - {file = "tornado-6.4.2-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:e828cce1123e9e44ae2a50a9de3055497ab1d0aeb440c5ac23064d9e44880da1"}, - {file = "tornado-6.4.2-cp38-abi3-macosx_10_9_x86_64.whl", hash = "sha256:072ce12ada169c5b00b7d92a99ba089447ccc993ea2143c9ede887e0937aa803"}, - {file = "tornado-6.4.2-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1a017d239bd1bb0919f72af256a970624241f070496635784d9bf0db640d3fec"}, - {file = "tornado-6.4.2-cp38-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c36e62ce8f63409301537222faffcef7dfc5284f27eec227389f2ad11b09d946"}, - {file = "tornado-6.4.2-cp38-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bca9eb02196e789c9cb5c3c7c0f04fb447dc2adffd95265b2c7223a8a615ccbf"}, - {file = "tornado-6.4.2-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:304463bd0772442ff4d0f5149c6f1c2135a1fae045adf070821c6cdc76980634"}, - {file = "tornado-6.4.2-cp38-abi3-musllinux_1_2_i686.whl", hash = "sha256:c82c46813ba483a385ab2a99caeaedf92585a1f90defb5693351fa7e4ea0bf73"}, - {file = "tornado-6.4.2-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:932d195ca9015956fa502c6b56af9eb06106140d844a335590c1ec7f5277d10c"}, - {file = "tornado-6.4.2-cp38-abi3-win32.whl", hash = "sha256:2876cef82e6c5978fde1e0d5b1f919d756968d5b4282418f3146b79b58556482"}, - {file = "tornado-6.4.2-cp38-abi3-win_amd64.whl", hash = "sha256:908b71bf3ff37d81073356a5fadcc660eb10c1476ee6e2725588626ce7e5ca38"}, - {file = "tornado-6.4.2.tar.gz", hash = "sha256:92bad5b4746e9879fd7bf1eb21dce4e3fc5128d71601f80005afa39237ad620b"}, + {file = "tornado-6.5.5-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:487dc9cc380e29f58c7ab88f9e27cdeef04b2140862e5076a66fb6bb68bb1bfa"}, + {file = "tornado-6.5.5-cp39-abi3-macosx_10_9_x86_64.whl", hash = "sha256:65a7f1d46d4bb41df1ac99f5fcb685fb25c7e61613742d5108b010975a9a6521"}, + {file = "tornado-6.5.5-cp39-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:e74c92e8e65086b338fd56333fb9a68b9f6f2fe7ad532645a290a464bcf46be5"}, + {file = "tornado-6.5.5-cp39-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:435319e9e340276428bbdb4e7fa732c2d399386d1de5686cb331ec8eee754f07"}, + {file = "tornado-6.5.5-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:3f54aa540bdbfee7b9eb268ead60e7d199de5021facd276819c193c0fb28ea4e"}, + {file = "tornado-6.5.5-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:36abed1754faeb80fbd6e64db2758091e1320f6bba74a4cf8c09cd18ccce8aca"}, + {file = "tornado-6.5.5-cp39-abi3-win32.whl", hash = "sha256:dd3eafaaeec1c7f2f8fdcd5f964e8907ad788fe8a5a32c4426fbbdda621223b7"}, + {file = "tornado-6.5.5-cp39-abi3-win_amd64.whl", hash = "sha256:6443a794ba961a9f619b1ae926a2e900ac20c34483eea67be4ed8f1e58d3ef7b"}, + {file = "tornado-6.5.5-cp39-abi3-win_arm64.whl", hash = "sha256:2c9a876e094109333f888539ddb2de4361743e5d21eece20688e3e351e4990a6"}, + {file = "tornado-6.5.5.tar.gz", hash = "sha256:192b8f3ea91bd7f1f50c06955416ed76c6b72f96779b962f07f911b91e8d30e9"}, ] [[package]] name = "tqdm" -version = "4.67.1" +version = "4.67.3" description = "Fast, Extensible Progress Meter" optional = false python-versions = ">=3.7" groups = ["main"] +markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ - {file = "tqdm-4.67.1-py3-none-any.whl", hash = "sha256:26445eca388f82e72884e0d580d5464cd801a3ea01e63e5601bdff9ba6a48de2"}, - {file = "tqdm-4.67.1.tar.gz", hash = "sha256:f8aef9c52c08c13a65f30ea34f4e5aac3fd1a34959879d7e59e63027286627f2"}, + {file = "tqdm-4.67.3-py3-none-any.whl", hash = "sha256:ee1e4c0e59148062281c49d80b25b67771a127c85fc9676d3be5f243206826bf"}, + {file = "tqdm-4.67.3.tar.gz", hash = "sha256:7d825f03f89244ef73f1d4ce193cb1774a8179fd96f31d7e1dcde62092b960bb"}, ] [package.dependencies] @@ -4694,6 +4755,7 @@ description = "Traitlets Python configuration system" optional = false python-versions = ">=3.8" groups = ["main"] +markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "traitlets-5.14.3-py3-none-any.whl", hash = "sha256:b74e89e397b1ed28cc831db7aea759ba6640cb3de13090ca145426688ff1ac4f"}, {file = "traitlets-5.14.3.tar.gz", hash = "sha256:9ed0579d3502c94b4b3732ac120375cda96f923114522847de4b3bb98b96b6b7"}, @@ -4710,7 +4772,7 @@ description = "A language and compiler for custom Deep Learning operations" optional = false python-versions = "*" groups = ["main"] -markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\" and python_version < \"3.13\"" +markers = "python_version < \"3.13\" and (sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\") and platform_system == \"Linux\" and platform_machine == \"x86_64\"" files = [ {file = "triton-3.0.0-1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:e1efef76935b2febc365bfadf74bcb65a6f959a9872e5bddf44cc9e0adce1e1a"}, {file = "triton-3.0.0-1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:5ce8520437c602fb633f1324cc3871c47bee3b67acf9756c1a66309b60e3216c"}, @@ -4729,46 +4791,44 @@ tutorials = ["matplotlib", "pandas", "tabulate"] [[package]] name = "typeguard" -version = "4.4.2" +version = "4.5.1" description = "Run-time type checker for Python" optional = false python-versions = ">=3.9" groups = ["main"] +markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ - {file = "typeguard-4.4.2-py3-none-any.whl", hash = "sha256:77a78f11f09777aeae7fa08585f33b5f4ef0e7335af40005b0c422ed398ff48c"}, - {file = "typeguard-4.4.2.tar.gz", hash = "sha256:a6f1065813e32ef365bc3b3f503af8a96f9dd4e0033a02c28c4a4983de8c6c49"}, + {file = "typeguard-4.5.1-py3-none-any.whl", hash = "sha256:44d2bf329d49a244110a090b55f5f91aa82d9a9834ebfd30bcc73651e4a8cc40"}, + {file = "typeguard-4.5.1.tar.gz", hash = "sha256:f6f8ecbbc819c9bc749983cc67c02391e16a9b43b8b27f15dc70ed7c4a007274"}, ] [package.dependencies] -importlib_metadata = {version = ">=3.6", markers = "python_version < \"3.10\""} -typing_extensions = ">=4.10.0" - -[package.extras] -doc = ["Sphinx (>=7)", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme (>=1.3.0)"] -test = ["coverage[toml] (>=7)", "mypy (>=1.2.0) ; platform_python_implementation != \"PyPy\"", "pytest (>=7)"] +typing_extensions = ">=4.14.0" [[package]] name = "typing-extensions" -version = "4.13.2" -description = "Backported and Experimental Type Hints for Python 3.8+" +version = "4.15.0" +description = "Backported and Experimental Type Hints for Python 3.9+" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" groups = ["main"] +markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ - {file = "typing_extensions-4.13.2-py3-none-any.whl", hash = "sha256:a439e7c04b49fec3e5d3e2beaa21755cadbbdc391694e28ccdd36ca4a1408f8c"}, - {file = "typing_extensions-4.13.2.tar.gz", hash = "sha256:e6c81219bd689f51865d9e372991c540bda33a0379d5573cddb9a3a23f7caaef"}, + {file = "typing_extensions-4.15.0-py3-none-any.whl", hash = "sha256:f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548"}, + {file = "typing_extensions-4.15.0.tar.gz", hash = "sha256:0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466"}, ] [[package]] name = "typing-inspection" -version = "0.4.1" +version = "0.4.2" description = "Runtime typing introspection tools" optional = false python-versions = ">=3.9" groups = ["main"] +markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ - {file = "typing_inspection-0.4.1-py3-none-any.whl", hash = "sha256:389055682238f53b04f7badcb49b989835495a96700ced5dab2d8feae4b26f51"}, - {file = "typing_inspection-0.4.1.tar.gz", hash = "sha256:6ae134cc0203c33377d43188d4064e9b357dba58cff3185f22924610e70a9d28"}, + {file = "typing_inspection-0.4.2-py3-none-any.whl", hash = "sha256:4ed1cacbdc298c220f1bd249ed5287caa16f34d44ef4e9c3d0cbad5b521545e7"}, + {file = "typing_inspection-0.4.2.tar.gz", hash = "sha256:ba561c48a67c5958007083d386c3295464928b01faa735ab8547c5692e87f464"}, ] [package.dependencies] @@ -4776,58 +4836,57 @@ typing-extensions = ">=4.12.0" [[package]] name = "tyro" -version = "0.9.24" +version = "1.0.10" description = "CLI interfaces & config objects, from types" optional = false python-versions = ">=3.8" groups = ["main"] +markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ - {file = "tyro-0.9.24-py3-none-any.whl", hash = "sha256:d8152e47375419752210da455226007b4bb9bd9c65af1de8fb12daf0658c91dc"}, - {file = "tyro-0.9.24.tar.gz", hash = "sha256:5a9ef93d1b8e93cff2c5d82789a571d905d152e92af82a3ec96a17d668194df3"}, + {file = "tyro-1.0.10-py3-none-any.whl", hash = "sha256:8de87a3a40c8a91f10831f8f0638cd0eed00f0e4de9cd3d561e967f407477210"}, + {file = "tyro-1.0.10.tar.gz", hash = "sha256:2822eacac963a4922bf7eafe3b156a1f0f7fe8e34148202987581224f25565c2"}, ] [package.dependencies] -colorama = {version = ">=0.4.0", markers = "platform_system == \"Windows\""} docstring-parser = ">=0.15" -eval-type-backport = {version = ">=0.1.3", markers = "python_version < \"3.10\""} -rich = ">=11.1.0" -shtab = ">=1.5.6" typeguard = ">=4.0.0" typing-extensions = ">=4.13.0" [package.extras] -dev = ["attrs (>=21.4.0)", "coverage[toml] (>=6.5.0)", "eval-type-backport (>=0.1.3)", "ml-collections (>=0.1.0)", "msgspec (>=0.18.6)", "mypy (>=1.4.1)", "omegaconf (>=2.2.2)", "pydantic (>=2.5.2,!=2.10.0)", "pyright (>=1.1.349,!=1.1.379)", "pytest (>=7.1.2)", "pytest-cov (>=3.0.0)", "pytest-xdist (>=3.5.0)", "pyyaml (>=6.0)", "ruff (>=0.1.13)"] -dev-nn = ["attrs (>=21.4.0)", "coverage[toml] (>=6.5.0)", "eval-type-backport (>=0.1.3)", "flax (>=0.6.9) ; python_version <= \"3.12\"", "ml-collections (>=0.1.0)", "msgspec (>=0.18.6)", "mypy (>=1.4.1)", "numpy (>=1.20.0)", "omegaconf (>=2.2.2)", "pydantic (>=2.5.2,!=2.10.0)", "pyright (>=1.1.349,!=1.1.379)", "pytest (>=7.1.2)", "pytest-cov (>=3.0.0)", "pytest-xdist (>=3.5.0)", "pyyaml (>=6.0)", "ruff (>=0.1.13)", "torch (>=1.10.0) ; python_version <= \"3.12\""] +dev = ["attrs (>=21.4.0)", "coverage[toml] (>=6.5.0)", "eval-type-backport (>=0.1.3)", "ml-collections (>=0.1.0)", "msgspec (>=0.18.6)", "mypy (>=1.4.1)", "omegaconf (>=2.2.2)", "pydantic (>=2.5.2,!=2.10.0)", "pyright (>=1.1.349,!=1.1.379)", "pytest (>=7.1.2)", "pytest-cov (>=3.0.0)", "pytest-xdist (>=3.5.0)", "pyyaml (>=6.0)", "shtab (>=1.5.6)", "universal-pathlib (>=0.2.0)"] +dev-nn = ["attrs (>=21.4.0)", "coverage[toml] (>=6.5.0)", "eval-type-backport (>=0.1.3)", "flax (>=0.6.9) ; python_version >= \"3.10\" and python_version <= \"3.13\"", "ml-collections (>=0.1.0)", "msgspec (>=0.18.6)", "mypy (>=1.4.1)", "numpy (>=1.20.0)", "omegaconf (>=2.2.2)", "pydantic (>=2.5.2,!=2.10.0)", "pyright (>=1.1.349,!=1.1.379)", "pytest (>=7.1.2)", "pytest-cov (>=3.0.0)", "pytest-xdist (>=3.5.0)", "pyyaml (>=6.0)", "shtab (>=1.5.6)", "torch (>=1.10.0) ; python_version >= \"3.9\" and python_version <= \"3.13\"", "universal-pathlib (>=0.2.0)"] [[package]] name = "tzdata" -version = "2025.2" +version = "2025.3" description = "Provider of IANA time zone data" optional = false python-versions = ">=2" groups = ["main"] +markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ - {file = "tzdata-2025.2-py2.py3-none-any.whl", hash = "sha256:1a403fada01ff9221ca8044d701868fa132215d84beb92242d9acd2147f667a8"}, - {file = "tzdata-2025.2.tar.gz", hash = "sha256:b60a638fcc0daffadf82fe0f57e53d06bdec2f36c4df66280ae79bce6bd6f2b9"}, + {file = "tzdata-2025.3-py2.py3-none-any.whl", hash = "sha256:06a47e5700f3081aab02b2e513160914ff0694bce9947d6b76ebd6bf57cfc5d1"}, + {file = "tzdata-2025.3.tar.gz", hash = "sha256:de39c2ca5dc7b0344f2eba86f49d614019d29f060fc4ebc8a417896a620b56a7"}, ] [[package]] name = "urllib3" -version = "2.3.0" +version = "2.6.3" description = "HTTP library with thread-safe connection pooling, file post, and more." optional = false python-versions = ">=3.9" groups = ["main"] +markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ - {file = "urllib3-2.3.0-py3-none-any.whl", hash = "sha256:1cee9ad369867bfdbbb48b7dd50374c0967a0bb7710050facf0dd6911440e3df"}, - {file = "urllib3-2.3.0.tar.gz", hash = "sha256:f8c5449b3cf0861679ce7e0503c7b44b5ec981bec0d1d3795a07f1ba96f0204d"}, + {file = "urllib3-2.6.3-py3-none-any.whl", hash = "sha256:bf272323e553dfb2e87d9bfd225ca7b0f467b919d7bbd355436d3fd37cb0acd4"}, + {file = "urllib3-2.6.3.tar.gz", hash = "sha256:1b62b6884944a57dbe321509ab94fd4d3b307075e0c2eae991ac71ee15ad38ed"}, ] [package.extras] -brotli = ["brotli (>=1.0.9) ; platform_python_implementation == \"CPython\"", "brotlicffi (>=0.8.0) ; platform_python_implementation != \"CPython\""] +brotli = ["brotli (>=1.2.0) ; platform_python_implementation == \"CPython\"", "brotlicffi (>=1.2.0.0) ; platform_python_implementation != \"CPython\""] h2 = ["h2 (>=4,<5)"] socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] -zstd = ["zstandard (>=0.18.0)"] +zstd = ["backports-zstd (>=1.0.0) ; python_version < \"3.14\""] [[package]] name = "wandb" @@ -4836,6 +4895,7 @@ description = "A CLI and library for interacting with the Weights & Biases API." optional = false python-versions = ">=3.8" groups = ["main"] +markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ {file = "wandb-0.20.1-py3-none-any.whl", hash = "sha256:e6395cabf074247042be1cf0dc6ab0b06aa4c9538c2e1fdc5b507a690ce0cf17"}, {file = "wandb-0.20.1-py3-none-macosx_10_14_x86_64.whl", hash = "sha256:2475a48c693adf677d40da9e1c8ceeaf86d745ffc3b7e3535731279d02f9e845"}, @@ -4852,14 +4912,10 @@ files = [ [package.dependencies] click = ">=7.1,<8.0.0 || >8.0.0" -eval-type-backport = {version = "*", markers = "python_version < \"3.10\""} gitpython = ">=1.0.0,<3.1.29 || >3.1.29" packaging = "*" platformdirs = "*" -protobuf = [ - {version = ">=3.15.0,<4.21.0 || >4.21.0,<5.28.0 || >5.28.0,<7", markers = "python_version == \"3.9\" and sys_platform == \"linux\""}, - {version = ">=3.19.0,<4.21.0 || >4.21.0,<5.28.0 || >5.28.0,<7", markers = "python_version > \"3.9\" or sys_platform != \"linux\""}, -] +protobuf = {version = ">=3.19.0,<4.21.0 || >4.21.0,<5.28.0 || >5.28.0,<7", markers = "python_version > \"3.9\" or sys_platform != \"linux\""} psutil = ">=5.0.0" pydantic = "<3" pyyaml = "*" @@ -4883,123 +4939,140 @@ workspaces = ["wandb-workspaces"] [[package]] name = "wcwidth" -version = "0.2.13" +version = "0.6.0" description = "Measures the displayed width of unicode strings in a terminal" optional = false -python-versions = "*" +python-versions = ">=3.8" groups = ["main"] +markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ - {file = "wcwidth-0.2.13-py2.py3-none-any.whl", hash = "sha256:3da69048e4540d84af32131829ff948f1e022c1c6bdb8d6102117aac784f6859"}, - {file = "wcwidth-0.2.13.tar.gz", hash = "sha256:72ea0c06399eb286d978fdedb6923a9eb47e1c486ce63e9b4e64fc18303972b5"}, + {file = "wcwidth-0.6.0-py3-none-any.whl", hash = "sha256:1a3a1e510b553315f8e146c54764f4fb6264ffad731b3d78088cdb1478ffbdad"}, + {file = "wcwidth-0.6.0.tar.gz", hash = "sha256:cdc4e4262d6ef9a1a57e018384cbeb1208d8abbc64176027e2c2455c81313159"}, ] [[package]] name = "werkzeug" -version = "3.1.3" +version = "3.1.6" description = "The comprehensive WSGI web application library." optional = false python-versions = ">=3.9" groups = ["main"] +markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" files = [ - {file = "werkzeug-3.1.3-py3-none-any.whl", hash = "sha256:54b78bf3716d19a65be4fceccc0d1d7b89e608834989dfae50ea87564639213e"}, - {file = "werkzeug-3.1.3.tar.gz", hash = "sha256:60723ce945c19328679790e3282cc758aa4a6040e4bb330f53d30fa546d44746"}, + {file = "werkzeug-3.1.6-py3-none-any.whl", hash = "sha256:7ddf3357bb9564e407607f988f683d72038551200c704012bb9a4c523d42f131"}, + {file = "werkzeug-3.1.6.tar.gz", hash = "sha256:210c6bede5a420a913956b4791a7f4d6843a43b6fcee4dfa08a65e93007d0d25"}, ] [package.dependencies] -MarkupSafe = ">=2.1.1" +markupsafe = ">=2.1.1" [package.extras] watchdog = ["watchdog (>=2.3)"] [[package]] name = "wrapt" -version = "1.17.2" +version = "2.1.2" description = "Module for decorators, wrappers and monkey patching." optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" groups = ["main"] -files = [ - {file = "wrapt-1.17.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3d57c572081fed831ad2d26fd430d565b76aa277ed1d30ff4d40670b1c0dd984"}, - {file = "wrapt-1.17.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b5e251054542ae57ac7f3fba5d10bfff615b6c2fb09abeb37d2f1463f841ae22"}, - {file = "wrapt-1.17.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:80dd7db6a7cb57ffbc279c4394246414ec99537ae81ffd702443335a61dbf3a7"}, - {file = "wrapt-1.17.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a6e821770cf99cc586d33833b2ff32faebdbe886bd6322395606cf55153246c"}, - {file = "wrapt-1.17.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b60fb58b90c6d63779cb0c0c54eeb38941bae3ecf7a73c764c52c88c2dcb9d72"}, - {file = "wrapt-1.17.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b870b5df5b71d8c3359d21be8f0d6c485fa0ebdb6477dda51a1ea54a9b558061"}, - {file = "wrapt-1.17.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:4011d137b9955791f9084749cba9a367c68d50ab8d11d64c50ba1688c9b457f2"}, - {file = "wrapt-1.17.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:1473400e5b2733e58b396a04eb7f35f541e1fb976d0c0724d0223dd607e0f74c"}, - {file = "wrapt-1.17.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:3cedbfa9c940fdad3e6e941db7138e26ce8aad38ab5fe9dcfadfed9db7a54e62"}, - {file = "wrapt-1.17.2-cp310-cp310-win32.whl", hash = "sha256:582530701bff1dec6779efa00c516496968edd851fba224fbd86e46cc6b73563"}, - {file = "wrapt-1.17.2-cp310-cp310-win_amd64.whl", hash = "sha256:58705da316756681ad3c9c73fd15499aa4d8c69f9fd38dc8a35e06c12468582f"}, - {file = "wrapt-1.17.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ff04ef6eec3eee8a5efef2401495967a916feaa353643defcc03fc74fe213b58"}, - {file = "wrapt-1.17.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4db983e7bca53819efdbd64590ee96c9213894272c776966ca6306b73e4affda"}, - {file = "wrapt-1.17.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9abc77a4ce4c6f2a3168ff34b1da9b0f311a8f1cfd694ec96b0603dff1c79438"}, - {file = "wrapt-1.17.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0b929ac182f5ace000d459c59c2c9c33047e20e935f8e39371fa6e3b85d56f4a"}, - {file = "wrapt-1.17.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f09b286faeff3c750a879d336fb6d8713206fc97af3adc14def0cdd349df6000"}, - {file = "wrapt-1.17.2-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1a7ed2d9d039bd41e889f6fb9364554052ca21ce823580f6a07c4ec245c1f5d6"}, - {file = "wrapt-1.17.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:129a150f5c445165ff941fc02ee27df65940fcb8a22a61828b1853c98763a64b"}, - {file = "wrapt-1.17.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:1fb5699e4464afe5c7e65fa51d4f99e0b2eadcc176e4aa33600a3df7801d6662"}, - {file = "wrapt-1.17.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9a2bce789a5ea90e51a02dfcc39e31b7f1e662bc3317979aa7e5538e3a034f72"}, - {file = "wrapt-1.17.2-cp311-cp311-win32.whl", hash = "sha256:4afd5814270fdf6380616b321fd31435a462019d834f83c8611a0ce7484c7317"}, - {file = "wrapt-1.17.2-cp311-cp311-win_amd64.whl", hash = "sha256:acc130bc0375999da18e3d19e5a86403667ac0c4042a094fefb7eec8ebac7cf3"}, - {file = "wrapt-1.17.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:d5e2439eecc762cd85e7bd37161d4714aa03a33c5ba884e26c81559817ca0925"}, - {file = "wrapt-1.17.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:3fc7cb4c1c744f8c05cd5f9438a3caa6ab94ce8344e952d7c45a8ed59dd88392"}, - {file = "wrapt-1.17.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8fdbdb757d5390f7c675e558fd3186d590973244fab0c5fe63d373ade3e99d40"}, - {file = "wrapt-1.17.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5bb1d0dbf99411f3d871deb6faa9aabb9d4e744d67dcaaa05399af89d847a91d"}, - {file = "wrapt-1.17.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d18a4865f46b8579d44e4fe1e2bcbc6472ad83d98e22a26c963d46e4c125ef0b"}, - {file = "wrapt-1.17.2-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc570b5f14a79734437cb7b0500376b6b791153314986074486e0b0fa8d71d98"}, - {file = "wrapt-1.17.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6d9187b01bebc3875bac9b087948a2bccefe464a7d8f627cf6e48b1bbae30f82"}, - {file = "wrapt-1.17.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:9e8659775f1adf02eb1e6f109751268e493c73716ca5761f8acb695e52a756ae"}, - {file = "wrapt-1.17.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e8b2816ebef96d83657b56306152a93909a83f23994f4b30ad4573b00bd11bb9"}, - {file = "wrapt-1.17.2-cp312-cp312-win32.whl", hash = "sha256:468090021f391fe0056ad3e807e3d9034e0fd01adcd3bdfba977b6fdf4213ea9"}, - {file = "wrapt-1.17.2-cp312-cp312-win_amd64.whl", hash = "sha256:ec89ed91f2fa8e3f52ae53cd3cf640d6feff92ba90d62236a81e4e563ac0e991"}, - {file = "wrapt-1.17.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:6ed6ffac43aecfe6d86ec5b74b06a5be33d5bb9243d055141e8cabb12aa08125"}, - {file = "wrapt-1.17.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:35621ae4c00e056adb0009f8e86e28eb4a41a4bfa8f9bfa9fca7d343fe94f998"}, - {file = "wrapt-1.17.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a604bf7a053f8362d27eb9fefd2097f82600b856d5abe996d623babd067b1ab5"}, - {file = "wrapt-1.17.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5cbabee4f083b6b4cd282f5b817a867cf0b1028c54d445b7ec7cfe6505057cf8"}, - {file = "wrapt-1.17.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:49703ce2ddc220df165bd2962f8e03b84c89fee2d65e1c24a7defff6f988f4d6"}, - {file = "wrapt-1.17.2-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8112e52c5822fc4253f3901b676c55ddf288614dc7011634e2719718eaa187dc"}, - {file = "wrapt-1.17.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:9fee687dce376205d9a494e9c121e27183b2a3df18037f89d69bd7b35bcf59e2"}, - {file = "wrapt-1.17.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:18983c537e04d11cf027fbb60a1e8dfd5190e2b60cc27bc0808e653e7b218d1b"}, - {file = "wrapt-1.17.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:703919b1633412ab54bcf920ab388735832fdcb9f9a00ae49387f0fe67dad504"}, - {file = "wrapt-1.17.2-cp313-cp313-win32.whl", hash = "sha256:abbb9e76177c35d4e8568e58650aa6926040d6a9f6f03435b7a522bf1c487f9a"}, - {file = "wrapt-1.17.2-cp313-cp313-win_amd64.whl", hash = "sha256:69606d7bb691b50a4240ce6b22ebb319c1cfb164e5f6569835058196e0f3a845"}, - {file = "wrapt-1.17.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:4a721d3c943dae44f8e243b380cb645a709ba5bd35d3ad27bc2ed947e9c68192"}, - {file = "wrapt-1.17.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:766d8bbefcb9e00c3ac3b000d9acc51f1b399513f44d77dfe0eb026ad7c9a19b"}, - {file = "wrapt-1.17.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:e496a8ce2c256da1eb98bd15803a79bee00fc351f5dfb9ea82594a3f058309e0"}, - {file = "wrapt-1.17.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40d615e4fe22f4ad3528448c193b218e077656ca9ccb22ce2cb20db730f8d306"}, - {file = "wrapt-1.17.2-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a5aaeff38654462bc4b09023918b7f21790efb807f54c000a39d41d69cf552cb"}, - {file = "wrapt-1.17.2-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9a7d15bbd2bc99e92e39f49a04653062ee6085c0e18b3b7512a4f2fe91f2d681"}, - {file = "wrapt-1.17.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:e3890b508a23299083e065f435a492b5435eba6e304a7114d2f919d400888cc6"}, - {file = "wrapt-1.17.2-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:8c8b293cd65ad716d13d8dd3624e42e5a19cc2a2f1acc74b30c2c13f15cb61a6"}, - {file = "wrapt-1.17.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:4c82b8785d98cdd9fed4cac84d765d234ed3251bd6afe34cb7ac523cb93e8b4f"}, - {file = "wrapt-1.17.2-cp313-cp313t-win32.whl", hash = "sha256:13e6afb7fe71fe7485a4550a8844cc9ffbe263c0f1a1eea569bc7091d4898555"}, - {file = "wrapt-1.17.2-cp313-cp313t-win_amd64.whl", hash = "sha256:eaf675418ed6b3b31c7a989fd007fa7c3be66ce14e5c3b27336383604c9da85c"}, - {file = "wrapt-1.17.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5c803c401ea1c1c18de70a06a6f79fcc9c5acfc79133e9869e730ad7f8ad8ef9"}, - {file = "wrapt-1.17.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f917c1180fdb8623c2b75a99192f4025e412597c50b2ac870f156de8fb101119"}, - {file = "wrapt-1.17.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:ecc840861360ba9d176d413a5489b9a0aff6d6303d7e733e2c4623cfa26904a6"}, - {file = "wrapt-1.17.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bb87745b2e6dc56361bfde481d5a378dc314b252a98d7dd19a651a3fa58f24a9"}, - {file = "wrapt-1.17.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:58455b79ec2661c3600e65c0a716955adc2410f7383755d537584b0de41b1d8a"}, - {file = "wrapt-1.17.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b4e42a40a5e164cbfdb7b386c966a588b1047558a990981ace551ed7e12ca9c2"}, - {file = "wrapt-1.17.2-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:91bd7d1773e64019f9288b7a5101f3ae50d3d8e6b1de7edee9c2ccc1d32f0c0a"}, - {file = "wrapt-1.17.2-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:bb90fb8bda722a1b9d48ac1e6c38f923ea757b3baf8ebd0c82e09c5c1a0e7a04"}, - {file = "wrapt-1.17.2-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:08e7ce672e35efa54c5024936e559469436f8b8096253404faeb54d2a878416f"}, - {file = "wrapt-1.17.2-cp38-cp38-win32.whl", hash = "sha256:410a92fefd2e0e10d26210e1dfb4a876ddaf8439ef60d6434f21ef8d87efc5b7"}, - {file = "wrapt-1.17.2-cp38-cp38-win_amd64.whl", hash = "sha256:95c658736ec15602da0ed73f312d410117723914a5c91a14ee4cdd72f1d790b3"}, - {file = "wrapt-1.17.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:99039fa9e6306880572915728d7f6c24a86ec57b0a83f6b2491e1d8ab0235b9a"}, - {file = "wrapt-1.17.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2696993ee1eebd20b8e4ee4356483c4cb696066ddc24bd70bcbb80fa56ff9061"}, - {file = "wrapt-1.17.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:612dff5db80beef9e649c6d803a8d50c409082f1fedc9dbcdfde2983b2025b82"}, - {file = "wrapt-1.17.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:62c2caa1585c82b3f7a7ab56afef7b3602021d6da34fbc1cf234ff139fed3cd9"}, - {file = "wrapt-1.17.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c958bcfd59bacc2d0249dcfe575e71da54f9dcf4a8bdf89c4cb9a68a1170d73f"}, - {file = "wrapt-1.17.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc78a84e2dfbc27afe4b2bd7c80c8db9bca75cc5b85df52bfe634596a1da846b"}, - {file = "wrapt-1.17.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:ba0f0eb61ef00ea10e00eb53a9129501f52385c44853dbd6c4ad3f403603083f"}, - {file = "wrapt-1.17.2-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:1e1fe0e6ab7775fd842bc39e86f6dcfc4507ab0ffe206093e76d61cde37225c8"}, - {file = "wrapt-1.17.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:c86563182421896d73858e08e1db93afdd2b947a70064b813d515d66549e15f9"}, - {file = "wrapt-1.17.2-cp39-cp39-win32.whl", hash = "sha256:f393cda562f79828f38a819f4788641ac7c4085f30f1ce1a68672baa686482bb"}, - {file = "wrapt-1.17.2-cp39-cp39-win_amd64.whl", hash = "sha256:36ccae62f64235cf8ddb682073a60519426fdd4725524ae38874adf72b5f2aeb"}, - {file = "wrapt-1.17.2-py3-none-any.whl", hash = "sha256:b18f2d1533a71f069c7f82d524a52599053d4c7166e9dd374ae2136b7f40f7c8"}, - {file = "wrapt-1.17.2.tar.gz", hash = "sha256:41388e9d4d1522446fe79d3213196bd9e3b301a336965b9e27ca2788ebd122f3"}, +markers = "sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\"" +files = [ + {file = "wrapt-2.1.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:4b7a86d99a14f76facb269dc148590c01aaf47584071809a70da30555228158c"}, + {file = "wrapt-2.1.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a819e39017f95bf7aede768f75915635aa8f671f2993c036991b8d3bfe8dbb6f"}, + {file = "wrapt-2.1.2-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:5681123e60aed0e64c7d44f72bbf8b4ce45f79d81467e2c4c728629f5baf06eb"}, + {file = "wrapt-2.1.2-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2b8b28e97a44d21836259739ae76284e180b18abbb4dcfdff07a415cf1016c3e"}, + {file = "wrapt-2.1.2-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:cef91c95a50596fcdc31397eb6955476f82ae8a3f5a8eabdc13611b60ee380ba"}, + {file = "wrapt-2.1.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:dad63212b168de8569b1c512f4eac4b57f2c6934b30df32d6ee9534a79f1493f"}, + {file = "wrapt-2.1.2-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:d307aa6888d5efab2c1cde09843d48c843990be13069003184b67d426d145394"}, + {file = "wrapt-2.1.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:c87cf3f0c85e27b3ac7d9ad95da166bf8739ca215a8b171e8404a2d739897a45"}, + {file = "wrapt-2.1.2-cp310-cp310-win32.whl", hash = "sha256:d1c5fea4f9fe3762e2b905fdd67df51e4be7a73b7674957af2d2ade71a5c075d"}, + {file = "wrapt-2.1.2-cp310-cp310-win_amd64.whl", hash = "sha256:d8f7740e1af13dff2684e4d56fe604a7e04d6c94e737a60568d8d4238b9a0c71"}, + {file = "wrapt-2.1.2-cp310-cp310-win_arm64.whl", hash = "sha256:1c6cc827c00dc839350155f316f1f8b4b0c370f52b6a19e782e2bda89600c7dc"}, + {file = "wrapt-2.1.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:96159a0ee2b0277d44201c3b5be479a9979cf154e8c82fa5df49586a8e7679bb"}, + {file = "wrapt-2.1.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:98ba61833a77b747901e9012072f038795de7fc77849f1faa965464f3f87ff2d"}, + {file = "wrapt-2.1.2-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:767c0dbbe76cae2a60dd2b235ac0c87c9cccf4898aef8062e57bead46b5f6894"}, + {file = "wrapt-2.1.2-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9c691a6bc752c0cc4711cc0c00896fcd0f116abc253609ef64ef930032821842"}, + {file = "wrapt-2.1.2-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:f3b7d73012ea75aee5844de58c88f44cf62d0d62711e39da5a82824a7c4626a8"}, + {file = "wrapt-2.1.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:577dff354e7acd9d411eaf4bfe76b724c89c89c8fc9b7e127ee28c5f7bcb25b6"}, + {file = "wrapt-2.1.2-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:3d7b6fd105f8b24e5bd23ccf41cb1d1099796524bcc6f7fbb8fe576c44befbc9"}, + {file = "wrapt-2.1.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:866abdbf4612e0b34764922ef8b1c5668867610a718d3053d59e24a5e5fcfc15"}, + {file = "wrapt-2.1.2-cp311-cp311-win32.whl", hash = "sha256:5a0a0a3a882393095573344075189eb2d566e0fd205a2b6414e9997b1b800a8b"}, + {file = "wrapt-2.1.2-cp311-cp311-win_amd64.whl", hash = "sha256:64a07a71d2730ba56f11d1a4b91f7817dc79bc134c11516b75d1921a7c6fcda1"}, + {file = "wrapt-2.1.2-cp311-cp311-win_arm64.whl", hash = "sha256:b89f095fe98bc12107f82a9f7d570dc83a0870291aeb6b1d7a7d35575f55d98a"}, + {file = "wrapt-2.1.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:ff2aad9c4cda28a8f0653fc2d487596458c2a3f475e56ba02909e950a9efa6a9"}, + {file = "wrapt-2.1.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6433ea84e1cfacf32021d2a4ee909554ade7fd392caa6f7c13f1f4bf7b8e8748"}, + {file = "wrapt-2.1.2-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:c20b757c268d30d6215916a5fa8461048d023865d888e437fab451139cad6c8e"}, + {file = "wrapt-2.1.2-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:79847b83eb38e70d93dc392c7c5b587efe65b3e7afcc167aa8abd5d60e8761c8"}, + {file = "wrapt-2.1.2-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:f8fba1bae256186a83d1875b2b1f4e2d1242e8fac0f58ec0d7e41b26967b965c"}, + {file = "wrapt-2.1.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e3d3b35eedcf5f7d022291ecd7533321c4775f7b9cd0050a31a68499ba45757c"}, + {file = "wrapt-2.1.2-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:6f2c5390460de57fa9582bc8a1b7a6c86e1a41dfad74c5225fc07044c15cc8d1"}, + {file = "wrapt-2.1.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:7dfa9f2cf65d027b951d05c662cc99ee3bd01f6e4691ed39848a7a5fffc902b2"}, + {file = "wrapt-2.1.2-cp312-cp312-win32.whl", hash = "sha256:eba8155747eb2cae4a0b913d9ebd12a1db4d860fc4c829d7578c7b989bd3f2f0"}, + {file = "wrapt-2.1.2-cp312-cp312-win_amd64.whl", hash = "sha256:1c51c738d7d9faa0b3601708e7e2eda9bf779e1b601dce6c77411f2a1b324a63"}, + {file = "wrapt-2.1.2-cp312-cp312-win_arm64.whl", hash = "sha256:c8e46ae8e4032792eb2f677dbd0d557170a8e5524d22acc55199f43efedd39bf"}, + {file = "wrapt-2.1.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:787fd6f4d67befa6fe2abdffcbd3de2d82dfc6fb8a6d850407c53332709d030b"}, + {file = "wrapt-2.1.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:4bdf26e03e6d0da3f0e9422fd36bcebf7bc0eeb55fdf9c727a09abc6b9fe472e"}, + {file = "wrapt-2.1.2-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:bbac24d879aa22998e87f6b3f481a5216311e7d53c7db87f189a7a0266dafffb"}, + {file = "wrapt-2.1.2-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:16997dfb9d67addc2e3f41b62a104341e80cac52f91110dece393923c0ebd5ca"}, + {file = "wrapt-2.1.2-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:162e4e2ba7542da9027821cb6e7c5e068d64f9a10b5f15512ea28e954893a267"}, + {file = "wrapt-2.1.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f29c827a8d9936ac320746747a016c4bc66ef639f5cd0d32df24f5eacbf9c69f"}, + {file = "wrapt-2.1.2-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:a9dd9813825f7ecb018c17fd147a01845eb330254dff86d3b5816f20f4d6aaf8"}, + {file = "wrapt-2.1.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6f8dbdd3719e534860d6a78526aafc220e0241f981367018c2875178cf83a413"}, + {file = "wrapt-2.1.2-cp313-cp313-win32.whl", hash = "sha256:5c35b5d82b16a3bc6e0a04349b606a0582bc29f573786aebe98e0c159bc48db6"}, + {file = "wrapt-2.1.2-cp313-cp313-win_amd64.whl", hash = "sha256:f8bc1c264d8d1cf5b3560a87bbdd31131573eb25f9f9447bb6252b8d4c44a3a1"}, + {file = "wrapt-2.1.2-cp313-cp313-win_arm64.whl", hash = "sha256:3beb22f674550d5634642c645aba4c72a2c66fb185ae1aebe1e955fae5a13baf"}, + {file = "wrapt-2.1.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:0fc04bc8664a8bc4c8e00b37b5355cffca2535209fba1abb09ae2b7c76ddf82b"}, + {file = "wrapt-2.1.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:a9b9d50c9af998875a1482a038eb05755dfd6fe303a313f6a940bb53a83c3f18"}, + {file = "wrapt-2.1.2-cp313-cp313t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:2d3ff4f0024dd224290c0eabf0240f1bfc1f26363431505fb1b0283d3b08f11d"}, + {file = "wrapt-2.1.2-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3278c471f4468ad544a691b31bb856374fbdefb7fee1a152153e64019379f015"}, + {file = "wrapt-2.1.2-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:a8914c754d3134a3032601c6984db1c576e6abaf3fc68094bb8ab1379d75ff92"}, + {file = "wrapt-2.1.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:ff95d4264e55839be37bafe1536db2ab2de19da6b65f9244f01f332b5286cfbf"}, + {file = "wrapt-2.1.2-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:76405518ca4e1b76fbb1b9f686cff93aebae03920cc55ceeec48ff9f719c5f67"}, + {file = "wrapt-2.1.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:c0be8b5a74c5824e9359b53e7e58bef71a729bacc82e16587db1c4ebc91f7c5a"}, + {file = "wrapt-2.1.2-cp313-cp313t-win32.whl", hash = "sha256:f01277d9a5fc1862f26f7626da9cf443bebc0abd2f303f41c5e995b15887dabd"}, + {file = "wrapt-2.1.2-cp313-cp313t-win_amd64.whl", hash = "sha256:84ce8f1c2104d2f6daa912b1b5b039f331febfeee74f8042ad4e04992bd95c8f"}, + {file = "wrapt-2.1.2-cp313-cp313t-win_arm64.whl", hash = "sha256:a93cd767e37faeddbe07d8fc4212d5cba660af59bdb0f6372c93faaa13e6e679"}, + {file = "wrapt-2.1.2-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:1370e516598854e5b4366e09ce81e08bfe94d42b0fd569b88ec46cc56d9164a9"}, + {file = "wrapt-2.1.2-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:6de1a3851c27e0bd6a04ca993ea6f80fc53e6c742ee1601f486c08e9f9b900a9"}, + {file = "wrapt-2.1.2-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:de9f1a2bbc5ac7f6012ec24525bdd444765a2ff64b5985ac6e0692144838542e"}, + {file = "wrapt-2.1.2-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:970d57ed83fa040d8b20c52fe74a6ae7e3775ae8cff5efd6a81e06b19078484c"}, + {file = "wrapt-2.1.2-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:3969c56e4563c375861c8df14fa55146e81ac11c8db49ea6fb7f2ba58bc1ff9a"}, + {file = "wrapt-2.1.2-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:57d7c0c980abdc5f1d98b11a2aa3bb159790add80258c717fa49a99921456d90"}, + {file = "wrapt-2.1.2-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:776867878e83130c7a04237010463372e877c1c994d449ca6aaafeab6aab2586"}, + {file = "wrapt-2.1.2-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:fab036efe5464ec3291411fabb80a7a39e2dd80bae9bcbeeca5087fdfa891e19"}, + {file = "wrapt-2.1.2-cp314-cp314-win32.whl", hash = "sha256:e6ed62c82ddf58d001096ae84ce7f833db97ae2263bff31c9b336ba8cfe3f508"}, + {file = "wrapt-2.1.2-cp314-cp314-win_amd64.whl", hash = "sha256:467e7c76315390331c67073073d00662015bb730c566820c9ca9b54e4d67fd04"}, + {file = "wrapt-2.1.2-cp314-cp314-win_arm64.whl", hash = "sha256:da1f00a557c66225d53b095a97eace0fc5349e3bfda28fa34ffae238978ee575"}, + {file = "wrapt-2.1.2-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:62503ffbc2d3a69891cf29beeaccdb4d5e0a126e2b6a851688d4777e01428dbb"}, + {file = "wrapt-2.1.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:c7e6cd120ef837d5b6f860a6ea3745f8763805c418bb2f12eeb1fa6e25f22d22"}, + {file = "wrapt-2.1.2-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:3769a77df8e756d65fbc050333f423c01ae012b4f6731aaf70cf2bef61b34596"}, + {file = "wrapt-2.1.2-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a76d61a2e851996150ba0f80582dd92a870643fa481f3b3846f229de88caf044"}, + {file = "wrapt-2.1.2-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:6f97edc9842cf215312b75fe737ee7c8adda75a89979f8e11558dfff6343cc4b"}, + {file = "wrapt-2.1.2-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:4006c351de6d5007aa33a551f600404ba44228a89e833d2fadc5caa5de8edfbf"}, + {file = "wrapt-2.1.2-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:a9372fc3639a878c8e7d87e1556fa209091b0a66e912c611e3f833e2c4202be2"}, + {file = "wrapt-2.1.2-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:3144b027ff30cbd2fca07c0a87e67011adb717eb5f5bd8496325c17e454257a3"}, + {file = "wrapt-2.1.2-cp314-cp314t-win32.whl", hash = "sha256:3b8d15e52e195813efe5db8cec156eebe339aaf84222f4f4f051a6c01f237ed7"}, + {file = "wrapt-2.1.2-cp314-cp314t-win_amd64.whl", hash = "sha256:08ffa54146a7559f5b8df4b289b46d963a8e74ed16ba3687f99896101a3990c5"}, + {file = "wrapt-2.1.2-cp314-cp314t-win_arm64.whl", hash = "sha256:72aaa9d0d8e4ed0e2e98019cea47a21f823c9dd4b43c7b77bba6679ffcca6a00"}, + {file = "wrapt-2.1.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5e0fa9cc32300daf9eb09a1f5bdc6deb9a79defd70d5356ba453bcd50aef3742"}, + {file = "wrapt-2.1.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:710f6e5dfaf6a5d5c397d2d6758a78fecd9649deb21f1b645f5b57a328d63050"}, + {file = "wrapt-2.1.2-cp39-cp39-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:305d8a1755116bfdad5dda9e771dcb2138990a1d66e9edd81658816edf51aed1"}, + {file = "wrapt-2.1.2-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f0d8fc30a43b5fe191cf2b1a0c82bab2571dadd38e7c0062ee87d6df858dd06e"}, + {file = "wrapt-2.1.2-cp39-cp39-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:a5d516e22aedb7c9c1d47cba1c63160b1a6f61ec2f3948d127cd38d5cfbb556f"}, + {file = "wrapt-2.1.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:45914e8efbe4b9d5102fcf0e8e2e3258b83a5d5fba9f8f7b6d15681e9d29ffe0"}, + {file = "wrapt-2.1.2-cp39-cp39-musllinux_1_2_riscv64.whl", hash = "sha256:478282ebd3795a089154fb16d3db360e103aa13d3b2ad30f8f6aac0d2207de0e"}, + {file = "wrapt-2.1.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:3756219045f73fb28c5d7662778e4156fbd06cf823c4d2d4b19f97305e52819c"}, + {file = "wrapt-2.1.2-cp39-cp39-win32.whl", hash = "sha256:b8aefb4dbb18d904b96827435a763fa42fc1f08ea096a391710407a60983ced8"}, + {file = "wrapt-2.1.2-cp39-cp39-win_amd64.whl", hash = "sha256:e5aeab8fe15c3dff75cfee94260dcd9cded012d4ff06add036c28fae7718593b"}, + {file = "wrapt-2.1.2-cp39-cp39-win_arm64.whl", hash = "sha256:f069e113743a21a3defac6677f000068ebb931639f789b5b226598e247a4c89e"}, + {file = "wrapt-2.1.2-py3-none-any.whl", hash = "sha256:b8fd6fa2b2c4e7621808f8c62e8317f4aae56e59721ad933bac5239d913cf0e8"}, + {file = "wrapt-2.1.2.tar.gz", hash = "sha256:3996a67eecc2c68fd47b4e3c564405a5777367adfd9b8abb58387b63ee83b21e"}, ] +[package.extras] +dev = ["pytest", "setuptools"] + [[package]] name = "xarray" version = "2024.7.0" @@ -5007,7 +5080,7 @@ description = "N-D labeled arrays and datasets in Python" optional = false python-versions = ">=3.9" groups = ["main"] -markers = "python_version < \"3.11\" or python_version >= \"3.12\"" +markers = "(sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\") and python_version >= \"3.12\"" files = [ {file = "xarray-2024.7.0-py3-none-any.whl", hash = "sha256:1b0fd51ec408474aa1f4a355d75c00cc1c02bd425d97b2c2e551fd21810e7f64"}, {file = "xarray-2024.7.0.tar.gz", hash = "sha256:4cae512d121a8522d41e66d942fb06c526bc1fd32c2c181d5fe62fe65b671638"}, @@ -5028,15 +5101,15 @@ viz = ["matplotlib", "nc-time-axis", "seaborn"] [[package]] name = "xarray" -version = "2025.3.1" +version = "2025.6.1" description = "N-D labeled arrays and datasets in Python" optional = false python-versions = ">=3.10" groups = ["main"] -markers = "python_version == \"3.11\"" +markers = "python_version < \"3.12\" and (sys_platform == \"win32\" or sys_platform == \"emscripten\" or sys_platform != \"win32\" and sys_platform != \"emscripten\")" files = [ - {file = "xarray-2025.3.1-py3-none-any.whl", hash = "sha256:3404e313930c226db70a945377441ea3c957225d8ba2d429e764c099bb91a546"}, - {file = "xarray-2025.3.1.tar.gz", hash = "sha256:0252c96a73528b29d1ed7f0ab28d928d2ec00ad809e47369803b184dece1e447"}, + {file = "xarray-2025.6.1-py3-none-any.whl", hash = "sha256:8b988b47f67a383bdc3b04c5db475cd165e580134c1f1943d52aee4a9c97651b"}, + {file = "xarray-2025.6.1.tar.gz", hash = "sha256:a84f3f07544634a130d7dc615ae44175419f4c77957a7255161ed99c69c7c8b0"}, ] [package.dependencies] @@ -5050,31 +5123,10 @@ complete = ["xarray[accel,etc,io,parallel,viz]"] etc = ["sparse"] io = ["cftime", "fsspec", "h5netcdf", "netCDF4", "pooch", "pydap ; python_version < \"3.10\"", "scipy", "zarr"] parallel = ["dask[complete]"] -types = ["pandas-stubs", "types-PyYAML", "types-Pygments", "types-colorama", "types-decorator", "types-defusedxml", "types-docutils", "types-networkx", "types-openpyxl", "types-pexpect", "types-psutil", "types-pycurl", "types-python-dateutil", "types-pytz", "types-setuptools"] +types = ["pandas-stubs", "scipy-stubs", "types-PyYAML", "types-Pygments", "types-colorama", "types-decorator", "types-defusedxml", "types-docutils", "types-networkx", "types-openpyxl", "types-pexpect", "types-psutil", "types-pycurl", "types-python-dateutil", "types-pytz", "types-setuptools"] viz = ["cartopy", "matplotlib", "nc-time-axis", "seaborn"] -[[package]] -name = "zipp" -version = "3.21.0" -description = "Backport of pathlib-compatible object wrapper for zip files" -optional = false -python-versions = ">=3.9" -groups = ["main"] -markers = "python_version == \"3.9\"" -files = [ - {file = "zipp-3.21.0-py3-none-any.whl", hash = "sha256:ac1bbe05fd2991f160ebce24ffbac5f6d11d83dc90891255885223d42b3cd931"}, - {file = "zipp-3.21.0.tar.gz", hash = "sha256:2c9958f6430a2040341a52eb608ed6dd93ef4392e02ffe219417c1b28b5dd1f4"}, -] - -[package.extras] -check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1) ; sys_platform != \"cygwin\""] -cover = ["pytest-cov"] -doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] -enabler = ["pytest-enabler (>=2.2)"] -test = ["big-O", "importlib-resources ; python_version < \"3.9\"", "jaraco.functools", "jaraco.itertools", "jaraco.test", "more-itertools", "pytest (>=6,!=8.1.*)", "pytest-ignore-flaky"] -type = ["pytest-mypy"] - [metadata] lock-version = "2.1" -python-versions = ">=3.9, <4" -content-hash = "4ff52719d9c0cfa69bb4d04dfb6cd2542d21f7467c33827aba53cab5048daf35" +python-versions = ">=3.10, <4" +content-hash = "e3e3ca4ca8a7e9de638d766e2b84dadce5008b89e88f996c95fdebc8dded6bcc" diff --git a/pyproject.toml b/pyproject.toml index 357d951..a7482aa 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,17 +1,16 @@ [project] name = "justice" -version = "0.2.0" +version = "1.0.0" description = "JUSTICE is an open-source Integrated Assessment Modeling Framework for Analysing Policy Implications of Modelling Assumptions" authors = [{ name = "PBiswas", email = "p.biswas@tudelft.nl" }] license = { text = "BSD-3-Clause" } readme = "README.md" -requires-python = ">=3.9, <4" +requires-python = ">=3.10, <4" dependencies = [ "fair (==2.1.3)", "h5py (==3.13.0)", - "platypus-opt (==1.1.0)", - "ema-workbench (==2.5.0)", - "numpy (>=1.23)", + "platypus-opt (==1.4.1)", + "ema-workbench (==2.5.3)", "scipy (>=1.10.0)", "deap (>=1.4.0)", "ipyparallel (>=8.6.1)", diff --git a/run_optimization.py b/run_optimization.py new file mode 100644 index 0000000..04e3646 --- /dev/null +++ b/run_optimization.py @@ -0,0 +1,1151 @@ +""" +Orchestrates a multi-objective optimization of the JUSTICE model using Borg. +- Builds the EMA Model (constants, levers, outcomes). +- Registers the model wrapper with the Borg adapter (direct evaluation). +- Defines MPI (MS/MM) subclasses that only tweak Borg’s library/settings. +- Drives EMA’s optimize(...) with convergence metrics (rank 0 only). +""" + +import datetime +import json +import os +import random +import pandas as pd +import warnings +from pathlib import Path +from typing import Optional +from justice.util.regional_configuration import build_macro_region_mapping +from solvers.emodps.rbf import RBF +import numpy as np +from ema_workbench import ( + Model, + Policy, + RealParameter, + ScalarOutcome, + CategoricalParameter, + ema_logging, + MultiprocessingEvaluator, + SequentialEvaluator, + MPIEvaluator, + Constant, + Scenario, + perform_experiments, +) +from ema_workbench.em_framework.optimization import ( + ArchiveLogger, + EpsilonProgress, + EpsNSGAII, +) + +from justice.util.EMA_model_wrapper import ( + model_wrapper_emodps, + model_wrapper_momadps, + model_wrapper_momadps_single_agent, +) +from justice.util.data_loader import DataLoader +from justice.util.enumerations import ( + Abatement, + DamageFunction, + Economy, + Evaluator, + Optimizer, + WelfareFunction, +) +from justice.util.model_time import TimeHorizon + +from solvers.moea.borg_platypus_adapter import ( + BorgMOEA, + set_ema_context, + _ArchiveView, + _AlgorithmStub, + _create_intermediate_archives, +) +from platypus import Solution + +SMALL_NUMBER = 1e-9 +warnings.filterwarnings("ignore") + +_dir = os.path.dirname(os.path.abspath(__file__)) + + +def _mpi_rank() -> int: + """Determine MPI/Slurm rank if present, else 0.""" + for key in ("OMPI_COMM_WORLD_RANK", "PMI_RANK", "SLURM_PROCID", "MPI_RANK"): + val = os.environ.get(key) + if val is not None: + try: + return int(val) + except ValueError: + pass + return 0 + + +class MSBorgMOEA(BorgMOEA): + """Master–Slave Borg (islands = 1).""" + + def __init__(self, problem, epsilons, population_size=None, **kwargs): + super().__init__( + problem, + epsilons, + population_size=population_size, + # borg_library_path="./libborgms.so", # NOTE: For mac, use "./libborg.dylib", for linux use "./libborgms.so" + borg_library_path=os.path.join(_dir, "solvers", "moea", "libborgms.so"), + solve_settings={}, + seed=None, # keep Borg's internal RNG + direct_evaluation=True, # use the evaluation function registered in context + **kwargs, + ) + + def run(self, max_evaluations: int): + """Run Borg in master–slave MPI mode (islands = 1).""" + from solvers.moea.borg import Borg, Configuration + + if self.borg_library_path: + Configuration.setBorgLibrary(self.borg_library_path) + + nvars = self.problem.nvars + nobjs = self.problem.nobjs + nconstr = getattr(self.problem, "nconstr", 0) + callback = self._make_callback() + borg = Borg(nvars, nobjs, nconstr, callback) + + self._set_bounds(borg) + borg.setEpsilons(*self.epsilons) + + if _mpi_rank() == 0: + print(f"[MSBorgMOEA] epsilons = {self.epsilons}", flush=True) + + try: + Configuration.startMPI() + borg_result = borg.solveMPI( + islands=1, + maxEvaluations=int(max_evaluations), + runtime=b"ms.runtime", + ) + finally: + Configuration.stopMPI() + + self.result = [] + if borg_result is not None: + for s_borg in borg_result: + sol = Solution(self.problem) + sol.variables = list(s_borg.getVariables()) + sol.objectives = list(s_borg.getObjectives()) + if nconstr: + sol.constraints = list(s_borg.getConstraints()) + self.result.append(sol) + self.nfe = int(max_evaluations) + else: + self.nfe = 0 + + # Update stub + self.archive = _ArchiveView(self.result, improvements=len(self.result)) + self.algorithm = _AlgorithmStub(self.archive) + + def step(self): + return + + +class MMBorgMOEA(BorgMOEA): + """Multi-Master Borg (requires islands*(workers+1)+1 MPI ranks).""" + + def __init__(self, problem, epsilons, population_size=None, **kwargs): + islands = int(os.environ.get("BORG_ISLANDS", "2")) + super().__init__( + problem, + epsilons, + population_size=population_size, + # borg_library_path="./libborgmm.so", + borg_library_path=os.path.join(_dir, "solvers", "moea", "libborgmm.so"), + solve_settings={"islands": islands}, + seed=None, + direct_evaluation=True, + **kwargs, + ) + self._islands = islands + + def run(self, max_evaluations: int): + """Run Borg in multi-master MPI mode.""" + from solvers.moea.borg import Borg, Configuration + + if self.borg_library_path: + Configuration.setBorgLibrary(self.borg_library_path) + + nvars = self.problem.nvars + nobjs = self.problem.nobjs + nconstr = getattr(self.problem, "nconstr", 0) + callback = self._make_callback() + borg = Borg(nvars, nobjs, nconstr, callback) + + self._set_bounds(borg) + borg.setEpsilons(*self.epsilons) + + if _mpi_rank() == 0: + print( + f"[MMBorgMOEA] epsilons = {self.epsilons}, islands = {self._islands}", + flush=True, + ) + + runtime_dir = os.environ.get("BORG_RUNTIME_DIR") + if runtime_dir is None: + raise RuntimeError( + "BORG_RUNTIME_DIR is not set. " + "Set this environment variable to the desired output folder before running the optimizer." + ) + + runtime_template = os.path.join(runtime_dir, "mm_%d.runtime").encode("utf-8") + + try: + Configuration.startMPI() + borg_result = borg.solveMPI( + islands=self._islands, + maxEvaluations=int(max_evaluations), + runtime=runtime_template, + ) + finally: + Configuration.stopMPI() + + self.result = [] + if borg_result is not None: + for s_borg in borg_result: + sol = Solution(self.problem) + sol.variables = list(s_borg.getVariables()) + sol.objectives = list(s_borg.getObjectives()) + if nconstr: + sol.constraints = list(s_borg.getConstraints()) + self.result.append(sol) + self.nfe = int(max_evaluations) + else: + self.nfe = 0 + + self.archive = _ArchiveView(self.result, improvements=len(self.result)) + self.algorithm = _AlgorithmStub(self.archive) + + def step(self): + return + + +def run_optimization_adaptive( + config_path, + nfe=None, + population_size=100, + swf=0, + seed=None, + datapath="./data", + filename=None, + folder=None, + economy_type=Economy.NEOCLASSICAL, + damage_function_type=DamageFunction.KALKUHL, + abatement_type=Abatement.ENERDATA, + optimizer=Optimizer.EpsNSGAII, + evaluator=Evaluator.SequentialEvaluator, + reference_ssp_rcp_scenario_index=2, +): + """Set up the EMA Model, register evaluation context, and run optimize().""" + with open(config_path, "r") as file: + config = json.load(file) + + start_year = config["start_year"] + end_year = config["end_year"] + data_timestep = config["data_timestep"] + timestep = config["timestep"] + emission_control_start_year = config["emission_control_start_year"] + n_rbfs = config["n_rbfs"] + n_inputs = config["n_inputs"] + epsilons = config["epsilons"] + temperature_year_of_interest = config["temperature_year_of_interest"] + reference_index = reference_ssp_rcp_scenario_index + stochastic_run = config["stochastic_run"] + climate_members = config.get("climate_ensemble_members") + + social_welfare_function = WelfareFunction.from_index(swf) + swf_type = social_welfare_function.value[0] + + model = Model("JUSTICE", function=model_wrapper_emodps) + + data_loader = DataLoader() + time_horizon = TimeHorizon( + start_year=start_year, + end_year=end_year, + data_timestep=data_timestep, + timestep=timestep, + ) + emission_start_ts = time_horizon.year_to_timestep( + year=emission_control_start_year, timestep=timestep + ) + temperature_year_index = time_horizon.year_to_timestep( + year=temperature_year_of_interest, timestep=timestep + ) + + model.constants = [ + Constant("n_regions", len(data_loader.REGION_LIST)), + Constant("n_timesteps", len(time_horizon.model_time_horizon)), + Constant("emission_control_start_timestep", emission_start_ts), + Constant("n_rbfs", n_rbfs), + Constant("n_inputs_rbf", n_inputs), + Constant("n_outputs_rbf", len(data_loader.REGION_LIST)), + Constant("social_welfare_function_type", swf_type), + Constant("economy_type", economy_type.value), + Constant("damage_function_type", damage_function_type.value), + Constant("abatement_type", abatement_type.value), + Constant("temperature_year_of_interest_index", temperature_year_index), + Constant("stochastic_run", stochastic_run), + Constant("climate_ensemble_members", climate_members), + ] + + model.uncertainties = [CategoricalParameter("ssp_rcp_scenario", tuple(range(8)))] + + centers_shape = n_rbfs * n_inputs + weights_shape = len(data_loader.REGION_LIST) * n_rbfs + + centers = [RealParameter(f"center {i}", -1.0, 1.0) for i in range(centers_shape)] + radii = [ + RealParameter(f"radii {i}", SMALL_NUMBER, 1.0) for i in range(centers_shape) + ] + weights = [ + RealParameter(f"weights {i}", SMALL_NUMBER, 1.0) for i in range(weights_shape) + ] + model.levers = centers + radii + weights + + model.outcomes = [ + ScalarOutcome("welfare", variable_name="welfare", kind=ScalarOutcome.MINIMIZE), + ScalarOutcome( + "fraction_above_threshold", + variable_name="fraction_above_threshold", + kind=ScalarOutcome.MINIMIZE, + ), + ] + + reference_scenario = Scenario("reference", ssp_rcp_scenario=reference_index) + + filename = f"{social_welfare_function.value[1]}_{nfe}_{seed}.tar.gz" + timestamp = datetime.datetime.now().strftime("%Y_%m") # _%d_%H_%M_%S + random_number = random.randint(0, 10000) + directory_name = os.path.abspath( + os.path.join( + datapath, + f"{social_welfare_function.value[1]}_{timestamp}_{random_number}_ref{reference_ssp_rcp_scenario_index}_{seed}", + ) + ) + + os.environ["BORG_RUNTIME_DIR"] = directory_name + os.makedirs(directory_name, exist_ok=True) + + rank = _mpi_rank() + if rank == 0: + convergence = [ + ArchiveLogger( + directory_name, + [lever.name for lever in model.levers], + [outcome.name for outcome in model.outcomes], + base_filename=filename, + ), + EpsilonProgress(), + ] + else: + convergence = [] + + if optimizer == Optimizer.EpsNSGAII: + algorithm_class = EpsNSGAII + elif optimizer == Optimizer.MMBorgMOEA: + algorithm_class = MMBorgMOEA + elif optimizer == Optimizer.MSBorgMOEA: + algorithm_class = MSBorgMOEA + else: + raise ValueError(f"Unsupported optimizer: {optimizer}") + + set_ema_context( + model=model, + reference=reference_scenario, + evaluation=model_wrapper_emodps, + reference_index=reference_index, + ) + + if evaluator == Evaluator.MPIEvaluator: + with MPIEvaluator(model) as _evaluator: + results = _evaluator.optimize( + searchover="levers", + nfe=nfe, + epsilons=epsilons, + reference=reference_scenario, + convergence=convergence, + population_size=population_size, + algorithm=algorithm_class, + ) + elif evaluator == Evaluator.MultiprocessingEvaluator: + with MultiprocessingEvaluator(model) as _evaluator: + results = _evaluator.optimize( + searchover="levers", + nfe=nfe, + epsilons=epsilons, + reference=reference_scenario, + convergence=convergence, + population_size=population_size, + algorithm=algorithm_class, + ) + else: + with SequentialEvaluator(model) as _evaluator: + results = _evaluator.optimize( + searchover="levers", + nfe=nfe, + epsilons=epsilons, + reference=reference_scenario, + convergence=convergence, + population_size=population_size, + algorithm=algorithm_class, + ) + + if ( + rank == 0 + and optimizer == Optimizer.MMBorgMOEA + and os.path.isdir(directory_name) + ): + header = [lever.name for lever in model.levers] + [ + outcome.name for outcome in model.outcomes + ] + islands = int(os.environ.get("BORG_ISLANDS", "2")) + _create_intermediate_archives(directory_name, filename, islands, header) + + return results + + +################################################################################################################################ + + +def run_optimization_momadps( + config_path, + nfe=None, + population_size=100, + seed=None, + datapath="./data", + economy_type=Economy.NEOCLASSICAL, + damage_function_type=DamageFunction.KALKUHL, + abatement_type=Abatement.ENERDATA, + optimizer=Optimizer.EpsNSGAII, + evaluator=Evaluator.SequentialEvaluator, + reference_ssp_rcp_scenario_index=2, + mapping_base_path="data/input", +): + """Configure and run the MOMADPS optimization experiment.""" + with open(config_path, "r", encoding="utf-8") as file: + config = json.load(file) + + start_year = config["start_year"] + end_year = config["end_year"] + data_timestep = config["data_timestep"] + timestep = config["timestep"] + emission_control_start_year = config["emission_control_start_year"] + # n_rbfs = config["n_rbfs"] + n_inputs = config["n_inputs"] # expect 3 (T, ΔT, consumption) + epsilons = config["epsilons"] + temperature_year_of_interest = config["temperature_year_of_interest"] + stochastic_run = config["stochastic_run"] + climate_members = config.get("climate_ensemble_members") + + min_temperature = config["min_temperature"] + max_temperature = config["max_temperature"] + min_temperature_change = config["min_temperature_change"] + max_temperature_change = config["max_temperature_change"] + consumption_min = config["consumption_min"] + consumption_max = config["consumption_max"] + + model = Model("JUSTICE", function=model_wrapper_momadps) + + data_loader = DataLoader() + region_list = data_loader.REGION_LIST + n_regions = len(region_list) + + time_horizon = TimeHorizon( + start_year=start_year, + end_year=end_year, + data_timestep=data_timestep, + timestep=timestep, + ) + emission_start_ts = time_horizon.year_to_timestep( + year=emission_control_start_year, timestep=timestep + ) + temperature_year_index = time_horizon.year_to_timestep( + year=temperature_year_of_interest, timestep=timestep + ) + + # Build macro-region mapping + r5_json = Path(mapping_base_path) / "R5_regions.json" + rice50_json = Path(mapping_base_path) / "rice50_regions_dict.json" + region_to_macro, macro_region_names = build_macro_region_mapping( + region_list=region_list, + r5_json_path=r5_json, + rice50_json_path=rice50_json, + ) + n_macro_regions = len(macro_region_names) + + # Constants fed into the wrapper + model.constants = [ + Constant("n_regions", n_regions), + Constant("n_timesteps", len(time_horizon.model_time_horizon)), + Constant("emission_control_start_timestep", emission_start_ts), + # Constant("n_rbfs", n_rbfs), + Constant("n_inputs_rbf", n_inputs), + Constant("n_outputs_rbf", 1), + Constant( + "social_welfare_function_type", WelfareFunction.from_index(0).value[0] + ), + Constant("economy_type", economy_type.value), + Constant("damage_function_type", damage_function_type.value), + Constant("abatement_type", abatement_type.value), + Constant("temperature_year_of_interest_index", temperature_year_index), + Constant("stochastic_run", stochastic_run), + Constant("climate_ensemble_members", climate_members), + Constant("region_to_macro", region_to_macro.tolist()), + Constant("macro_region_names", list(macro_region_names)), + Constant("n_macro_regions", n_macro_regions), + Constant("min_temperature", min_temperature), + Constant("max_temperature", max_temperature), + Constant("min_temperature_change", min_temperature_change), + Constant("max_temperature_change", max_temperature_change), + Constant("consumption_min", consumption_min), + Constant("consumption_max", consumption_max), + ] + + model.uncertainties = [CategoricalParameter("ssp_rcp_scenario", tuple(range(8)))] + + # Determine lever shapes from an RBF template + rbf_probe = RBF( + n_rbfs=(n_inputs + 2), + n_inputs=n_inputs, + n_outputs=1, + ) + centers_shape, radii_shape, weights_shape = rbf_probe.get_shape() + centers_len, radii_len, weights_len = ( + centers_shape[0], + radii_shape[0], + weights_shape[0], + ) + + levers = [] + for macro_idx in range(n_macro_regions): + levers.extend( + RealParameter(f"center {macro_idx} {i}", -1.0, 1.0) + for i in range(centers_len) + ) + levers.extend( + RealParameter(f"radii {macro_idx} {i}", SMALL_NUMBER, 1.0) + for i in range(radii_len) + ) + levers.extend( + RealParameter(f"weights {macro_idx} {i}", SMALL_NUMBER, 1.0) + for i in range(weights_len) + ) + model.levers = levers + + model.outcomes = [ + ScalarOutcome( + "macro_welfare_R5ASIA", + variable_name="macro_welfare_R5ASIA", + kind=ScalarOutcome.MAXIMIZE, + ), + ScalarOutcome( + "macro_welfare_R5LAM", + variable_name="macro_welfare_R5LAM", + kind=ScalarOutcome.MAXIMIZE, + ), + ScalarOutcome( + "macro_welfare_R5MAF", + variable_name="macro_welfare_R5MAF", + kind=ScalarOutcome.MAXIMIZE, + ), + ScalarOutcome( + "macro_welfare_R5OECD", + variable_name="macro_welfare_R5OECD", + kind=ScalarOutcome.MAXIMIZE, + ), + ScalarOutcome( + "macro_welfare_R5REF", + variable_name="macro_welfare_R5REF", + kind=ScalarOutcome.MAXIMIZE, + ), + ScalarOutcome( + "fraction_above_threshold", + variable_name="fraction_above_threshold", + kind=ScalarOutcome.MINIMIZE, + ), + ] + + reference_scenario = Scenario( + "reference", ssp_rcp_scenario=reference_ssp_rcp_scenario_index + ) + + filename = f"MOMADPS_{nfe}_{seed}.tar.gz" + timestamp = datetime.datetime.now().strftime("%Y_%m") + random_number = random.randint(0, 10000) + directory_name = os.path.abspath( + os.path.join( + datapath, + f"MOMADPS_{timestamp}_{random_number}_ref{reference_ssp_rcp_scenario_index}_{seed}", + ) + ) + os.environ["BORG_RUNTIME_DIR"] = directory_name + os.makedirs(directory_name, exist_ok=True) + + rank = _mpi_rank() + lever_names = [lever.name for lever in model.levers] + outcome_names = [outcome.name for outcome in model.outcomes] + if rank == 0: + convergence = [ + ArchiveLogger( + directory_name, lever_names, outcome_names, base_filename=filename + ), + EpsilonProgress(), + ] + else: + convergence = [] + + optimizer_map = { + Optimizer.EpsNSGAII: EpsNSGAII, + Optimizer.MMBorgMOEA: MMBorgMOEA, + Optimizer.MSBorgMOEA: MSBorgMOEA, + } + algorithm_class = optimizer_map.get(optimizer) + if algorithm_class is None: + raise ValueError(f"Unsupported optimizer: {optimizer}") + + set_ema_context( + model=model, + reference=reference_scenario, + evaluation=model_wrapper_momadps, + reference_index=reference_ssp_rcp_scenario_index, + ) + + evaluator_map = { + Evaluator.MPIEvaluator: MPIEvaluator, + Evaluator.MultiprocessingEvaluator: MultiprocessingEvaluator, + Evaluator.SequentialEvaluator: SequentialEvaluator, + } + evaluator_cls = evaluator_map[evaluator] + + with evaluator_cls(model) as eval_ctx: + results = eval_ctx.optimize( + searchover="levers", + nfe=nfe, + epsilons=epsilons, + reference=reference_scenario, + convergence=convergence, + population_size=population_size, + algorithm=algorithm_class, + ) + + if ( + rank == 0 + and optimizer == Optimizer.MMBorgMOEA + and os.path.isdir(directory_name) + ): + header = lever_names + outcome_names + islands = int(os.environ.get("BORG_ISLANDS", "2")) + _create_intermediate_archives(directory_name, filename, islands, header) + + return results + + +############################################################################################################################### +def run_single_agent_momadps( + config_path: str, + nash_profiles_path: str, + policy_bank_path: str, + policy_index: int, + variable_macro_index: int, + nfe: Optional[int] = None, + population_size: int = 100, + seed: Optional[int] = None, + datapath: str = "./data", + economy_type: Economy = Economy.NEOCLASSICAL, + damage_function_type: DamageFunction = DamageFunction.KALKUHL, + abatement_type: Abatement = Abatement.ENERDATA, + optimizer: Optimizer = Optimizer.EpsNSGAII, + evaluator: Evaluator = Evaluator.SequentialEvaluator, + reference_ssp_rcp_scenario_index: int = 2, + mapping_base_path: str = "data/input", + epsilons: Optional[list[float]] = None, +): + """ + Re-run an adaptive MOMADPS optimization where only one macro agent is allowed to + adjust its RBF parameters, while the other four remain fixed at a known Pareto-Nash + solution. + + The fixed parameters for each agent are looked up independently: + - `nash_profiles_path` (pareto_nash_profiles.csv): row `policy_index` gives + per-agent action indices a0..a4. + - `policy_bank_path` (COMBINED_MOMA_epsilon_nondominated_set.csv): each agent i + reads its RBF parameters from row a_i, which may differ across agents. + + The objectives: + * Maximize the selected agent's welfare (macro-specific). + * Minimize the fraction of ensemble runs above the temperature threshold. + """ + + with open(config_path, "r", encoding="utf-8") as file: + config = json.load(file) + + # --- Load Nash profile row to get per-agent action indices --- + nash_df = pd.read_csv(nash_profiles_path) + if policy_index < -len(nash_df) or policy_index >= len(nash_df): + raise IndexError( + f"policy_index={policy_index} is out of bounds for CSV with {len(nash_df)} rows." + ) + nash_row = nash_df.iloc[int(policy_index)] + + # --- Load the policy bank (5-row CSV) --- + policy_bank_df = pd.read_csv(policy_bank_path) + + start_year = config["start_year"] + end_year = config["end_year"] + data_timestep = config["data_timestep"] + timestep = config["timestep"] + emission_control_start_year = config["emission_control_start_year"] + n_inputs = config["n_inputs"] + temperature_year_of_interest = config["temperature_year_of_interest"] + stochastic_run = config["stochastic_run"] + climate_members = config.get("climate_ensemble_members") + + min_temperature = config["min_temperature"] + max_temperature = config["max_temperature"] + min_temperature_change = config["min_temperature_change"] + max_temperature_change = config["max_temperature_change"] + consumption_min = config["consumption_min"] + consumption_max = config["consumption_max"] + + data_loader = DataLoader() + region_list = data_loader.REGION_LIST + n_regions = len(region_list) + + time_horizon = TimeHorizon( + start_year=start_year, + end_year=end_year, + data_timestep=data_timestep, + timestep=timestep, + ) + emission_start_ts = time_horizon.year_to_timestep( + year=emission_control_start_year, timestep=timestep + ) + temperature_year_index = time_horizon.year_to_timestep( + year=temperature_year_of_interest, timestep=timestep + ) + + r5_json = Path(mapping_base_path) / "R5_regions.json" + rice50_json = Path(mapping_base_path) / "rice50_regions_dict.json" + region_to_macro, macro_region_names = build_macro_region_mapping( + region_list=region_list, + r5_json_path=r5_json, + rice50_json_path=rice50_json, + ) + n_macro_regions = len(macro_region_names) + + if not (0 <= variable_macro_index < n_macro_regions): + raise ValueError( + f"variable_macro_index={variable_macro_index} invalid; must be in [0, {n_macro_regions-1}]" + ) + + # --- Extract per-agent action indices from the Nash profile row --- + actions = [int(nash_row[f"a{i}"]) for i in range(n_macro_regions)] + + model = Model("JUSTICE", function=model_wrapper_momadps_single_agent) + + rbf_probe = RBF( + n_rbfs=(n_inputs + 2), + n_inputs=n_inputs, + n_outputs=1, + ) + centers_shape, radii_shape, weights_shape = rbf_probe.get_shape() + centers_len, radii_len, weights_len = ( + centers_shape[0], + radii_shape[0], + weights_shape[0], + ) + + fixed_centers = np.zeros((n_macro_regions, centers_len), dtype=float) + fixed_radii = np.zeros((n_macro_regions, radii_len), dtype=float) + fixed_weights = np.zeros((n_macro_regions, weights_len), dtype=float) + + # --- Each agent reads from its own row in the policy bank --- + for macro_idx in range(n_macro_regions): + action_row = policy_bank_df.iloc[actions[macro_idx]] + for i in range(centers_len): + fixed_centers[macro_idx, i] = action_row[f"center {macro_idx} {i}"] + fixed_radii[macro_idx, i] = action_row[f"radii {macro_idx} {i}"] + for i in range(weights_len): + fixed_weights[macro_idx, i] = action_row[f"weights {macro_idx} {i}"] + + model.constants = [ + Constant("n_regions", n_regions), + Constant("n_timesteps", len(time_horizon.model_time_horizon)), + Constant("emission_control_start_timestep", emission_start_ts), + Constant("n_inputs_rbf", n_inputs), + Constant("n_outputs_rbf", 1), + Constant("social_welfare_function_type", WelfareFunction.UTILITARIAN.value[0]), + Constant("economy_type", economy_type.value), + Constant("damage_function_type", damage_function_type.value), + Constant("abatement_type", abatement_type.value), + Constant("temperature_year_of_interest_index", temperature_year_index), + Constant("stochastic_run", stochastic_run), + Constant("climate_ensemble_members", climate_members), + Constant("region_to_macro", region_to_macro.tolist()), + Constant("macro_region_names", list(macro_region_names)), + Constant("n_macro_regions", n_macro_regions), + Constant("min_temperature", min_temperature), + Constant("max_temperature", max_temperature), + Constant("min_temperature_change", min_temperature_change), + Constant("max_temperature_change", max_temperature_change), + Constant("consumption_min", consumption_min), + Constant("consumption_max", consumption_max), + Constant("variable_macro_index", variable_macro_index), + Constant("fixed_centers", fixed_centers.tolist()), + Constant("fixed_radii", fixed_radii.tolist()), + Constant("fixed_weights", fixed_weights.tolist()), + ] + + algorithm_map = { + Optimizer.EpsNSGAII: EpsNSGAII, + Optimizer.MMBorgMOEA: MMBorgMOEA, + Optimizer.MSBorgMOEA: MSBorgMOEA, + } + algorithm_class = algorithm_map.get(optimizer) + if algorithm_class is None: + raise ValueError(f"Unsupported optimizer: {optimizer}") + + model.uncertainties = [CategoricalParameter("ssp_rcp_scenario", tuple(range(8)))] + + levers = [] + for i in range(centers_len): + levers.append(RealParameter(f"center {variable_macro_index} {i}", -1.0, 1.0)) + for i in range(radii_len): + levers.append( + RealParameter(f"radii {variable_macro_index} {i}", SMALL_NUMBER, 1.0) + ) + for i in range(weights_len): + levers.append( + RealParameter(f"weights {variable_macro_index} {i}", SMALL_NUMBER, 1.0) + ) + model.levers = levers + + if epsilons is None: + epsilons = [1e-3, 1e-3] + + agent_name = macro_region_names[variable_macro_index] + model.outcomes = [ + ScalarOutcome(f"macro_welfare_{agent_name}", kind=ScalarOutcome.MAXIMIZE), + ScalarOutcome("fraction_above_threshold", kind=ScalarOutcome.MINIMIZE), + ] + + reference_scenario = Scenario( + "reference", ssp_rcp_scenario=reference_ssp_rcp_scenario_index + ) + + filename = f"SingleAgent_{variable_macro_index}_{nfe}_{seed}.tar.gz" + timestamp = datetime.datetime.now().strftime("%Y_%m") + random_number = random.randint(0, 10000) + directory_name = os.path.abspath( + os.path.join( + datapath, + f"single_agent_{variable_macro_index}_{timestamp}_{random_number}_ref" + f"{reference_ssp_rcp_scenario_index}_{seed}", + ) + ) + os.environ["BORG_RUNTIME_DIR"] = directory_name + os.makedirs(directory_name, exist_ok=True) + + rank = _mpi_rank() + lever_names = [lever.name for lever in model.levers] + outcome_names = [outcome.name for outcome in model.outcomes] + if rank == 0: + convergence = [ + ArchiveLogger( + directory_name, lever_names, outcome_names, base_filename=filename + ), + EpsilonProgress(), + ] + else: + convergence = [] + + set_ema_context( + model=model, + reference=reference_scenario, + evaluation=model_wrapper_momadps_single_agent, + reference_index=reference_ssp_rcp_scenario_index, + ) + + evaluator_map = { + Evaluator.MPIEvaluator: MPIEvaluator, + Evaluator.MultiprocessingEvaluator: MultiprocessingEvaluator, + Evaluator.SequentialEvaluator: SequentialEvaluator, + } + evaluator_cls = evaluator_map[evaluator] + + with evaluator_cls(model) as eval_ctx: + results = eval_ctx.optimize( + searchover="levers", + nfe=nfe, + epsilons=epsilons, + reference=reference_scenario, + convergence=convergence, + population_size=population_size, + algorithm=algorithm_class, + ) + + if ( + rank == 0 + and optimizer == Optimizer.MMBorgMOEA + and os.path.isdir(directory_name) + ): + header = lever_names + outcome_names + islands = int(os.environ.get("BORG_ISLANDS", "2")) + _create_intermediate_archives(directory_name, filename, islands, header) + + return results + + +############################################################################################################################### + + +def build_random_policy(model, seed=1234): + """ + This is for testing purposes only: builds a random policy within the lever bounds. + + Args: + model (ema_workbench.Model): The EMA Workbench model with defined levers. + seed (int): Random seed for reproducibility. + """ + + rng = np.random.default_rng(seed) + policy_data = {} + for lever in model.levers: + low, high = lever.lower_bound, lever.upper_bound + policy_data[lever.name] = rng.uniform(low, high) + return Policy("random_policy", **policy_data) + + +def setup_model_from_config(config_path, mapping_base_path="data/input"): + with open(config_path, "r", encoding="utf-8") as file: + config = json.load(file) + + start_year = config["start_year"] + end_year = config["end_year"] + data_timestep = config["data_timestep"] + timestep = config["timestep"] + emission_control_start_year = config["emission_control_start_year"] + n_rbfs = config["n_rbfs"] + n_inputs = config["n_inputs"] + temperature_year_of_interest = config["temperature_year_of_interest"] + stochastic_run = config["stochastic_run"] + climate_members = config.get("climate_ensemble_members") + + min_temperature = config["min_temperature"] + max_temperature = config["max_temperature"] + min_temperature_change = config["min_temperature_change"] + max_temperature_change = config["max_temperature_change"] + consumption_min = config["consumption_min"] + consumption_max = config["consumption_max"] + + model = Model("JUSTICE", function=model_wrapper_momadps) + + data_loader = DataLoader() + region_list = data_loader.REGION_LIST + n_regions = len(region_list) + + time_horizon = TimeHorizon( + start_year=start_year, + end_year=end_year, + data_timestep=data_timestep, + timestep=timestep, + ) + emission_start_ts = time_horizon.year_to_timestep( + year=emission_control_start_year, timestep=timestep + ) + temperature_year_index = time_horizon.year_to_timestep( + year=temperature_year_of_interest, timestep=timestep + ) + + r5_json = Path(mapping_base_path) / "R5_regions.json" + rice50_json = Path(mapping_base_path) / "rice50_regions_dict.json" + region_to_macro, macro_region_names = build_macro_region_mapping( + region_list=region_list, + r5_json_path=r5_json, + rice50_json_path=rice50_json, + ) + n_macro_regions = len(macro_region_names) + + model.constants = [ + Constant("n_regions", n_regions), + Constant("n_timesteps", len(time_horizon.model_time_horizon)), + Constant("emission_control_start_timestep", emission_start_ts), + Constant("n_rbfs", n_rbfs), + Constant("n_inputs_rbf", n_inputs), + Constant("n_outputs_rbf", 1), + Constant( + "social_welfare_function_type", WelfareFunction.from_index(0).value[0] + ), + Constant("economy_type", Economy.NEOCLASSICAL.value), + Constant("damage_function_type", DamageFunction.KALKUHL.value), + Constant("abatement_type", Abatement.ENERDATA.value), + Constant("temperature_year_of_interest_index", temperature_year_index), + Constant("stochastic_run", stochastic_run), + Constant("climate_ensemble_members", climate_members), + Constant("region_to_macro", region_to_macro.tolist()), + Constant("macro_region_names", list(macro_region_names)), + Constant("n_macro_regions", n_macro_regions), + Constant("min_temperature", min_temperature), + Constant("max_temperature", max_temperature), + Constant("min_temperature_change", min_temperature_change), + Constant("max_temperature_change", max_temperature_change), + Constant("consumption_min", consumption_min), + Constant("consumption_max", consumption_max), + ] + + model.uncertainties = [CategoricalParameter("ssp_rcp_scenario", tuple(range(8)))] + + rbf_probe = model_wrapper_momadps.__globals__["RBF"]( + n_rbfs=(n_inputs + 2), + n_inputs=n_inputs, + n_outputs=1, + ) + centers_shape, radii_shape, weights_shape = rbf_probe.get_shape() + centers_len, radii_len, weights_len = ( + centers_shape[0], + radii_shape[0], + weights_shape[0], + ) + + levers = [] + for macro_idx in range(n_macro_regions): + levers.extend( + RealParameter(f"center {macro_idx} {i}", -1.0, 1.0) + for i in range(centers_len) + ) + levers.extend( + RealParameter(f"radii {macro_idx} {i}", SMALL_NUMBER, 1.0) + for i in range(radii_len) + ) + levers.extend( + RealParameter(f"weights {macro_idx} {i}", SMALL_NUMBER, 1.0) + for i in range(weights_len) + ) + model.levers = levers + + model.outcomes = [ + ScalarOutcome( + "macro_welfare_R5ASIA", + variable_name="macro_welfare_R5ASIA", + kind=ScalarOutcome.MAXIMIZE, + ), + ScalarOutcome( + "macro_welfare_R5LAM", + variable_name="macro_welfare_R5LAM", + kind=ScalarOutcome.MAXIMIZE, + ), + ScalarOutcome( + "macro_welfare_R5MAF", + variable_name="macro_welfare_R5MAF", + kind=ScalarOutcome.MAXIMIZE, + ), + ScalarOutcome( + "macro_welfare_R5OECD", + variable_name="macro_welfare_R5OECD", + kind=ScalarOutcome.MAXIMIZE, + ), + ScalarOutcome( + "macro_welfare_R5REF", + variable_name="macro_welfare_R5REF", + kind=ScalarOutcome.MAXIMIZE, + ), + ScalarOutcome( + "fraction_above_threshold", + variable_name="fraction_above_threshold", + kind=ScalarOutcome.MINIMIZE, + ), + ] + + return model, macro_region_names + + +############################################################################################################################### + +# EMODPS Runs +if __name__ == "__main__": + config_path = "analysis/normative_uncertainty_optimization.json" + + ema_logging.log_to_stderr(ema_logging.INFO) + + run_optimization_adaptive( + config_path=config_path, + nfe=10, + swf=0, + seed=10, # None for Borg. Any integer for reproducibility with other optimizers + datapath="./data", + optimizer=Optimizer.MSBorgMOEA, # Optimizer.MMBorgMOEA, Optimizer.EpsNSGAII + population_size=2, # default is 100. Test locally with 2 + reference_ssp_rcp_scenario_index=2, # NOTE #TODO Get this from config json + evaluator=Evaluator.SequentialEvaluator, + ) + + +# Single Agent Runs +# if __name__ == "__main__": +# config_path = "analysis/momadps_config.json" + +# ema_logging.log_to_stderr(ema_logging.INFO) + +# results = run_single_agent_momadps( +# config_path="analysis/momadps_config.json", +# nash_profiles_path="pareto_nash_profiles.csv", +# policy_bank_path="COMBINED_MOMA_epsilon_nondominated_set.csv", +# policy_index=9, # row in pareto_nash_profiles.csv +# variable_macro_index=0, # 0=R5ASIA, 1=R5LAM, etc. +# nfe=50, +# population_size=2, +# epsilons=[1e-3, 1e-3], +# seed=10, +# datapath="./data", +# optimizer=Optimizer.MSBorgMOEA, +# reference_ssp_rcp_scenario_index=2, +# ) + +# Multi-Agent Runs (full MOMADPS optimization) +# if __name__ == "__main__": +# config_path = "analysis/momadps_config.json" + +# ema_logging.log_to_stderr(ema_logging.INFO) + +# run_optimization_momadps( +# config_path=config_path, +# nfe=50, +# # swf=0, +# seed=10, # None for Borg. Any integer for reproducibility with other optimizers +# datapath="./data", +# optimizer=Optimizer.MSBorgMOEA, # Optimizer.MMBorgMOEA, Optimizer.EpsNSGAII +# population_size=2, # default is 100. Test locally with 2 +# reference_ssp_rcp_scenario_index=2, # NOTE #TODO Get this from config json +# evaluator=Evaluator.SequentialEvaluator, +# ) + + +############################################################################################################################### + +# if __name__ == "__main__": +# config_path = "analysis/momadps_config.json" + +# model, macro_region_names = setup_model_from_config(config_path) + +# reference_scenario = Scenario("debug", ssp_rcp_scenario=2) +# policy = build_random_policy(model, seed=42) + +# with SequentialEvaluator(model) as evaluator: +# experiments, outcomes = perform_experiments( +# model, +# scenarios=[reference_scenario], +# policies=[policy], +# evaluator=evaluator, +# ) + +# print("Experiment outcomes:") +# for name, values in outcomes.items(): +# print(f"{name}: {values}") + +# print("\nPolicy used:") +# print(dict(policy)) diff --git a/solvers/moea/borg.py b/solvers/moea/borg.py new file mode 100644 index 0000000..4a009fe --- /dev/null +++ b/solvers/moea/borg.py @@ -0,0 +1,1077 @@ +"""Python wrapper for the Borg MOEA. + +Provides a Python interface for the Borg MOEA. The Borg MOEA shared library +(typically named libborg.so or borg.dll) must be located in the same directory +as this module. A simple example of using this module is provided below. + + from borg import * + + borg = Borg(2, 2, 0, lambda x,y : [x**2 + y**2, (x-2)**2 + y**2], + bounds=[[-50, 50], [-50, 50]], + epsilons=[0.01, 0.01]) + + for solution in borg.solve({'maxEvaluations':10000}): + solution.display() + +This wrapper can also run the master-slave and multi-master implementations +of the Borg MOEA. + + Configuration.startMPI() + borg = Borg(...) + borg.solveMPI(islands=4, maxTime=1) + Configuration.stopMPI() + +Please cite the following paper in any works that use or are derived from this +program. + + Hadka, D. and Reed, P. (2013). "Borg: An Auto-Adaptive Many-Objective + Evolutionary Computing Framework." Evolutionary Computation, + 21(2):231-259. + +Copyright 2013-2018 David Hadka +Requires Python 3 or later +""" + +from ctypes import * +import os +import sys +import time + +terminate = False + +# For Python 3 compatibility. In Python 3, it appears we must also explicitly set the restype for pointers +# as c_void_p and also wrap the returned value in c_void_p(...). +if sys.version_info > (3,): + long = int + + +class Configuration: + """Holds configuration options for the Borg MOEA Python wrapper.""" + + @staticmethod + def check(): + """Checks if the Borg MOEA is initialized and ready to run; otherwise an error is raised.""" + try: + Configuration.libc + except: + raise OSError( + "The standard C library is not defined, please see Configuration.setStandardCLibrary()" + ) + + try: + Configuration.libborg + except: + raise OSError( + "The Borg MOEA C library is not defined, please see Configuration.setBorgLibrary()" + ) + + @staticmethod + def initialize(): + """Initializes the standard C and Borg MOEA libraries.""" + Configuration.setStandardCLibrary() + Configuration.setBorgLibrary() + Configuration.seed() + Configuration.startedMPI = False + + @staticmethod + def setStandardCLibrary(path=None): + """Override the standard C library (libc) used by the Python-to-C interface. + + If the path is not specified, this method will attempt to auto-detect the + correct location of the standard C library. If this auto-detection fails, + this method will return without error. This allows the module to load + successfully and requires the user to manually invoke this method before + using the Borg MOEA. + """ + + if path: + Configuration.libc = CDLL(path) + elif sys.platform == "linux": + try: + Configuration.libc = CDLL("libc.so.6") + except OSError: + return + elif sys.platform == "darwin": + try: + Configuration.libc = CDLL("libc.dylib") + except OSError: + return + elif sys.platform == "win32" and cdll.msvcrt: + Configuration.libc = cdll.msvcrt + else: + return + + try: + Configuration.stdout = Configuration.libc.fdopen(sys.stdout.fileno(), "w") + except AttributeError: + Configuration.stdout = Configuration.libc._fdopen(sys.stdout.fileno(), "w") + + @staticmethod + def setBorgLibrary(path=None): + """Override the location of the Borg MOEA shared object. + + If the path is not specified, this method attempts to auto-detect the location + of the Borg MOEA C library. If auto-detection fails, this method returns + without error. This allows the module to load successfully and requires the + user to manually invoke this method before using the Borg MOEA + """ + + if path: + try: + Configuration.libborg = CDLL(path) + Configuration.libborg.BORG_Copyright + Configuration.stdcall = False + except AttributeError: + # Not using __cdecl, try __stdcall instead + if sys.platform == "win32": + Configuration.libborg = WinDLL(path) + Configuration.stdcall = True + elif sys.platform == "linux": + try: + _dir = os.path.dirname(os.path.abspath(__file__)) + Configuration.libborg = CDLL(os.path.join(_dir, "libborg.so")) + # Configuration.libborg = CDLL("./libborg.so") + Configuration.stdcall = False + except OSError: + return + elif sys.platform == "darwin": + try: + Configuration.libborg = CDLL("./libborg.dylib") + Configuration.stdcall = False + except OSError: + return + elif sys.platform == "win32": + try: + Configuration.libborg = CDLL("./borg.dll") + Configuration.libborg.BORG_Copyright + Configuration.stdcall = False + except OSError: + return + except AttributeError: + # Not using __cdecl, try __stdcall instead + try: + Configuration.libborg = WinDLL("./borg.dll") + Configuration.stdcall = True + except OSError: + return + + # Set result type of functions with non-standard types + Configuration.libborg.BORG_Problem_create.restype = c_void_p + Configuration.libborg.BORG_Operator_create.restype = c_void_p + Configuration.libborg.BORG_Algorithm_create.restype = c_void_p + Configuration.libborg.BORG_Algorithm_get_result.restype = c_void_p + Configuration.libborg.BORG_Archive_get.restype = c_void_p + Configuration.libborg.BORG_Solution_get_variable.restype = c_double + Configuration.libborg.BORG_Solution_get_objective.restype = c_double + Configuration.libborg.BORG_Solution_get_constraint.restype = c_double + Configuration.libborg.BORG_Operator_get_probability.restype = c_double + + @staticmethod + def seed(value=None): + """Sets the pseudo-random number generator seed.""" + Configuration.check() + + if value: + Configuration.libborg.BORG_Random_seed(c_ulong(value)) + else: + Configuration.libborg.BORG_Random_seed( + c_ulong(os.getpid() * long(time.time())) + ) + + @staticmethod + def enableDebugging(): + """Enables debugging output from the Borg MOEA.""" + Configuration.check() + Configuration.libborg.BORG_Debug_on() + + @staticmethod + def disableDebugging(): + """Disables debugging output from the Borg MOEA.""" + Configuration.check() + Configuration.libborg.BORG_Debug_off() + + @staticmethod + def displayCopyright(): + """Displays the copyright message for the Borg MOEA.""" + Configuration.check() + Configuration.libborg.BORG_Copyright(Configuration.stdout) + + @staticmethod + def startMPI(): + """Initializes MPI to enable master-slave and multi-master Borg MOEA runs.""" + if Configuration.startedMPI: + raise RuntimeError("MPI is already started") + + if os.name != "posix": + raise RuntimeError("MPI is only supported on Linux") + _dir = os.path.dirname(os.path.abspath(__file__)) + try: + Configuration.libborg.BORG_Algorithm_ms_startup + except AttributeError: + # The serial Borg MOEA C library is loaded; switch to parallel + try: + # Configuration.setBorgLibrary("./libborgmm.so") + Configuration.setBorgLibrary(os.path.join(_dir, "libborgmm.so")) + except OSError: + try: + Configuration.setBorgLibrary(os.path.join(_dir, "libborgms.so")) + # Configuration.setBorgLibrary("./libborgms.so") + except OSError: + raise OSError("Unable to locate the parallel Borg MOEA C library") + + # The following line is needed to load the MPI library correctly + CDLL("libmpi.so", RTLD_GLOBAL) + + # Pass the command-line arguments to MPI_Init + argc = c_int(len(sys.argv)) + CHARPP = c_char_p * len(sys.argv) + argv = CHARPP() + + for i in range(len(sys.argv)): + argv[i] = sys.argv[i].encode("utf-8") + + Configuration.libborg.BORG_Algorithm_ms_startup( + cast(addressof(argc), POINTER(c_int)), + cast(addressof(argv), POINTER(CHARPP)), + ) + + Configuration.libborg.BORG_Algorithm_ms_run.restype = c_void_p + + Configuration.startedMPI = True + + @staticmethod + def stopMPI(): + """Shuts down MPI; the master-slave and multi-master Borg MOEA can no longer be used.""" + if not Configuration.startedMPI: + raise RuntimeError("MPI is not started") + + Configuration.libborg.BORG_Algorithm_ms_shutdown() + Configuration.startedMPI = False + + +class RestartMode: + """Controls the mutation rate during restarts. + + DEFAULT - The mutation rate is fixed at 1/numberOfVariables + RANDOM - The mutation rate is fixed at 100% + RAMPED - The mutation rates are uniformly sampled between 1/numberOfVariables to 100% + ADAPTIVE - The mutation rate adapts based on success of previous restarts + INVERTED - Similar to ADAPTIVE, except the rate is inverted + """ + + DEFAULT = 0 + RANDOM = 1 + RAMPED = 2 + ADAPTIVE = 3 + INVERTED = 4 + + +class ProbabilityMode: + """Controls how operator probabilities are adapted. + + DEFAULT - Operator probabilities based on archive membership + RECENCY - Operator probabilities based on recency (tracks recent additions to archive) + BOTH - Operator probabilities based on archive membership and recency + ADAPTIVE - Favors archive membership, but uses recency if insufficient archive size + """ + + DEFAULT = 0 + RECENCY = 1 + BOTH = 2 + ADAPTIVE = 3 + + +class InitializationMode: + """Controls how initial populations in the multi-master Borg MOEA are initialized. + + UNIFORM - Each master starts with a uniformly distributed population + LATIN - Each master starts with a Latin hypercube sampled population + GLOBAL_LATIN - A global Latin hypercube sampled population is generated, partitioned, + and distributed to the master nodes + """ + + UNIFORM = 0 + LATIN = 1 + GLOBAL_LATIN = 2 + + +class Direction: + """The optimization direction of an objective (minimized or maximized). + + MINIMIZE - The objective is minimized towards negative infinity + MAXIMIZE - The objective is maximized towards positive infinity + """ + + MINIMIZE = 0 + MAXIMIZE = 1 + + +class Borg: + """Solves an optimization problem using the Borg MOEA.""" + + def __init__( + self, + numberOfVariables, + numberOfObjectives, + numberOfConstraints, + function, + epsilons=None, + bounds=None, + directions=None, + ): + """Creates a new instance of the Borg MOEA. + + numberOfVariables - The number of decision variables in the optimization problem + numberOfObjectives - The number of objectives in the optimization problem + numberOfConstraints - The number of constraints in the optimization problem + function - The function defining the optimization problem + epsilons - The epsilon values for each objective + bounds - The lower and upper bounds for each decision variable + directions - The optimization direction (MINIMIZE or MAXIMIZE) for each objective + """ + + # Ensure the underlying library is available + Configuration.check() + + # Validate input arguments + if numberOfVariables < 1: + raise ValueError("Requires at least one decision variable") + + if numberOfObjectives < 1: + raise ValueError("Requires at least one objective") + + if numberOfConstraints < 0: + raise ValueError("Number of constraints can not be negative") + + # Construct Borg object + self.numberOfVariables = numberOfVariables + self.numberOfObjectives = numberOfObjectives + self.numberOfConstraints = numberOfConstraints + self.directions = directions + self.function = _functionWrapper( + function, + numberOfVariables, + numberOfObjectives, + numberOfConstraints, + directions, + ) + + if Configuration.stdcall: + self.CMPFUNC = WINFUNCTYPE( + c_void_p, POINTER(c_double), POINTER(c_double), POINTER(c_double) + ) + else: + self.CMPFUNC = CFUNCTYPE( + c_void_p, POINTER(c_double), POINTER(c_double), POINTER(c_double) + ) + + self.callback = self.CMPFUNC(self.function) + self.reference = c_void_p( + Configuration.libborg.BORG_Problem_create( + c_int(numberOfVariables), + c_int(numberOfObjectives), + c_int(numberOfConstraints), + self.callback, + ) + ) + + if bounds: + self.setBounds(*bounds) + else: + self.setBounds(*[[0, 1]] * numberOfVariables) + + if epsilons: + self.setEpsilons(*epsilons) + else: + self.epsilonsAssigned = False + + def __del__(self): + """Deletes the underlying C objects.""" + try: + Configuration.libborg.BORG_Problem_destroy(self.reference) + except AttributeError: + pass + + def setBounds(self, *args): + """Sets the decision variable lower and upper bounds. + + The arguments to this function must be 2-ary lists defining the + lower and upper bounds. The number of lists must equal the + number of decision variables. For example: + setBounds([0, 1], [-10, 10], [-1, 1]) + If each decision variable has the same bounds, this can be + written compactly: + setBounds(*[[0, 1]]*3) + """ + + if len(args) != self.numberOfVariables: + raise ValueError("Incorrect number of bounds specified") + + for i in range(self.numberOfVariables): + self._setBounds(i, args[i][0], args[i][1]) + + def setEpsilons(self, *args): + """Sets the epsilons for the objective values. + + The epsilons control the granularity / resolution of the Pareto + optimal set. Small epsilons typically result in larger Pareto + optimal sets, but can reduce runtime performance. Specify one + argument for each objective. For example: + setEpsilons(0.01, 0.5) + If all epsilons are the same, this can be written more compactly: + setEpsilons(*[0.01]*2) + """ + + if len(args) != self.numberOfObjectives: + raise ValueError("Incorrect number of epsilons specified") + + for i in range(self.numberOfObjectives): + self._setEpsilon(i, args[i]) + + self.epsilonsAssigned = True + + def _setEpsilon(self, index, value): + """Sets the epsilon value at the given index.""" + Configuration.libborg.BORG_Problem_set_epsilon( + self.reference, index, c_double(value) + ) + + def _setBounds(self, index, lowerBound, upperBound): + """Sets the lower and upper decision variable bounds at the given index.""" + Configuration.libborg.BORG_Problem_set_bounds( + self.reference, index, c_double(lowerBound), c_double(upperBound) + ) + + def solveMPI( + self, + islands=1, + maxTime=None, + maxEvaluations=None, + initialization=None, + runtime=None, + allEvaluations=None, + ): + """Runs the master-slave or multi-master Borg MOEA using MPI. + + islands - The number of islands + maxTime - The maximum wallclock time to run, in hours + maxEvaluations - The maximum NFE per island (total NFE is islands*maxEvaluations) + initialization - Controls how the initial populations are generated + runtime - Filename pattern for saving runtime dynamics (the filename should include + one %d which gets replaced by the island index) + allEvaluations - Filename pattern for saving all evaluations (the filename should include + one %d which gets replaced by the island index). Since this can quickly + generate large files, use this option with caution. + + Note: All nodes must invoke solveMPI. However, only one node will return the discovered + Pareto optimal solutions. The rest will return None. + """ + + if not self.epsilonsAssigned: + raise RuntimeError("Epsilons must be assigned") + + if not Configuration.startedMPI: + raise RuntimeError( + "MPI is not started; call Configuration.startMPI() first" + ) + + if not maxTime and not maxEvaluations: + raise ValueError("Must specify maxEvaluations or maxTime (or both)") + + if islands > 1: + try: + Configuration.libborg.BORG_Algorithm_ms_islands(c_int(islands)) + except AttributeError: + raise RuntimeError( + "The loaded Borg MOEA C library does not support multi-master" + ) + + if maxTime: + Configuration.libborg.BORG_Algorithm_ms_max_time(c_double(maxTime)) + + if maxEvaluations: + Configuration.libborg.BORG_Algorithm_ms_max_evaluations( + c_int(maxEvaluations) + ) + + if initialization and islands > 1: + Configuration.libborg.BORG_Algorithm_ms_initialization( + c_int(initialization) + ) + + if runtime: + Configuration.libborg.BORG_Algorithm_output_runtime(c_char_p(runtime)) + + if allEvaluations: + Configuration.libborg.BORG_Algorithm_output_evaluations( + c_char_p(allEvaluations) + ) + + result = c_void_p(Configuration.libborg.BORG_Algorithm_ms_run(self.reference)) + + return Result(result, self) if result.value else None + + def solve(self, settings={}): + """Runs the Borg MOEA to solve the defined optimization problem, returning the + discovered Pareto optimal set. + + settings - Dictionary of parameters for the Borg MOEA. The key should match one + of the parameters defined by the C Borg API. Default parameter values + are used for any undefined parameters. + """ + + if not self.epsilonsAssigned: + raise RuntimeError("Epsilons must be set") + + maxEvaluations = settings.get("maxEvaluations", 10000) + start = time.process_time() + + pm = c_void_p( + Configuration.libborg.BORG_Operator_create( + "PM", 1, 1, 2, Configuration.libborg.BORG_Operator_PM + ) + ) + Configuration.libborg.BORG_Operator_set_parameter( + pm, 0, c_double(settings.get("pm.rate", 1.0 / self.numberOfVariables)) + ) + Configuration.libborg.BORG_Operator_set_parameter( + pm, 1, c_double(settings.get("pm.distributionIndex", 20.0)) + ) + + sbx = c_void_p( + Configuration.libborg.BORG_Operator_create( + "SBX", 2, 2, 2, Configuration.libborg.BORG_Operator_SBX + ) + ) + Configuration.libborg.BORG_Operator_set_parameter( + sbx, 0, c_double(settings.get("sbx.rate", 1.0)) + ) + Configuration.libborg.BORG_Operator_set_parameter( + sbx, 1, c_double(settings.get("sbx.distributionIndex", 15.0)) + ) + Configuration.libborg.BORG_Operator_set_mutation(sbx, pm) + + de = c_void_p( + Configuration.libborg.BORG_Operator_create( + "DE", 4, 1, 2, Configuration.libborg.BORG_Operator_DE + ) + ) + Configuration.libborg.BORG_Operator_set_parameter( + de, 0, c_double(settings.get("de.crossoverRate", 0.1)) + ) + Configuration.libborg.BORG_Operator_set_parameter( + de, 1, c_double(settings.get("de.stepSize", 0.5)) + ) + Configuration.libborg.BORG_Operator_set_mutation(de, pm) + + um = c_void_p( + Configuration.libborg.BORG_Operator_create( + "UM", 1, 1, 1, Configuration.libborg.BORG_Operator_UM + ) + ) + Configuration.libborg.BORG_Operator_set_parameter( + um, 0, c_double(settings.get("um.rate", 1.0 / self.numberOfVariables)) + ) + + spx = c_void_p( + Configuration.libborg.BORG_Operator_create( + "SPX", + c_int(settings.get("spx.parents", 10)), + c_int(settings.get("spx.offspring", 2)), + 1, + Configuration.libborg.BORG_Operator_SPX, + ) + ) + Configuration.libborg.BORG_Operator_set_parameter( + spx, 0, c_double(settings.get("spx.epsilon", 3.0)) + ) + + pcx = c_void_p( + Configuration.libborg.BORG_Operator_create( + "PCX", + c_int(settings.get("pcx.parents", 10)), + c_int(settings.get("pcx.offspring", 2)), + 2, + Configuration.libborg.BORG_Operator_PCX, + ) + ) + Configuration.libborg.BORG_Operator_set_parameter( + pcx, 0, c_double(settings.get("pcx.eta", 0.1)) + ) + Configuration.libborg.BORG_Operator_set_parameter( + pcx, 1, c_double(settings.get("pcx.zeta", 0.1)) + ) + + undx = c_void_p( + Configuration.libborg.BORG_Operator_create( + "UNDX", + c_int(settings.get("undx.parents", 10)), + c_int(settings.get("undx.offspring", 2)), + 2, + Configuration.libborg.BORG_Operator_UNDX, + ) + ) + Configuration.libborg.BORG_Operator_set_parameter( + undx, 0, c_double(settings.get("undx.zeta", 0.5)) + ) + Configuration.libborg.BORG_Operator_set_parameter( + undx, 1, c_double(settings.get("undx.eta", 0.35)) + ) + + algorithm = c_void_p( + Configuration.libborg.BORG_Algorithm_create(self.reference, 6) + ) + Configuration.libborg.BORG_Algorithm_set_operator(algorithm, 0, sbx) + Configuration.libborg.BORG_Algorithm_set_operator(algorithm, 1, de) + Configuration.libborg.BORG_Algorithm_set_operator(algorithm, 2, pcx) + Configuration.libborg.BORG_Algorithm_set_operator(algorithm, 3, spx) + Configuration.libborg.BORG_Algorithm_set_operator(algorithm, 4, undx) + Configuration.libborg.BORG_Algorithm_set_operator(algorithm, 5, um) + + Configuration.libborg.BORG_Algorithm_set_initial_population_size( + algorithm, c_int(settings.get("initialPopulationSize", 100)) + ) + Configuration.libborg.BORG_Algorithm_set_minimum_population_size( + algorithm, c_int(settings.get("minimumPopulationSize", 100)) + ) + Configuration.libborg.BORG_Algorithm_set_maximum_population_size( + algorithm, c_int(settings.get("maximumPopulationSize", 10000)) + ) + Configuration.libborg.BORG_Algorithm_set_population_ratio( + algorithm, c_double(1.0 / settings.get("injectionRate", 0.25)) + ) + Configuration.libborg.BORG_Algorithm_set_selection_ratio( + algorithm, c_double(settings.get("selectionRatio", 0.02)) + ) + Configuration.libborg.BORG_Algorithm_set_restart_mode( + algorithm, c_int(settings.get("restartMode", RestartMode.DEFAULT)) + ) + Configuration.libborg.BORG_Algorithm_set_max_mutation_index( + algorithm, c_int(settings.get("maxMutationIndex", 10)) + ) + Configuration.libborg.BORG_Algorithm_set_probability_mode( + algorithm, c_int(settings.get("probabilityMode", ProbabilityMode.DEFAULT)) + ) + + runtimeformat = settings.get("runtimeformat", "optimizedv") + fp = None + if "frequency" in settings: + statistics = [] + lastSnapshot = 0 + frequency = settings.get("frequency") + if "runtimefile" in settings: + fp = open(settings["runtimefile"], "w") + if runtimeformat == "optimizedv": + fp.write("//") + dynamics_header = [ + "NFE", + "ElapsedTime", + "SBX", + "DE", + "PCX", + "SPX", + "UNDX", + "UM", + "Improvements", + "Restarts", + "PopulationSize", + "ArchiveSize", + ] + if settings.get("restartMode", None) == RestartMode.ADAPTIVE: + dynamics_header.append("MutationIndex") + fp.write(",".join(dynamics_header)) + fp.write("\n") + header = ( + ["NFE"] + + ["dv{0}".format(i) for i in range(self.numberOfVariables)] + + ["obj{0}".format(i) for i in range(self.numberOfObjectives)] + + ["con{0}".format(i) for i in range(self.numberOfConstraints)] + ) + fp.write(",".join(header)) + fp.write("\n") + fp.flush() + else: + fp = None + else: + statistics = None + + data_header_written = False + while Configuration.libborg.BORG_Algorithm_get_nfe(algorithm) < maxEvaluations: + Configuration.libborg.BORG_Algorithm_step(algorithm) + if terminate is True: + break + currentEvaluations = Configuration.libborg.BORG_Algorithm_get_nfe(algorithm) + + if ( + statistics is not None + and currentEvaluations - lastSnapshot >= frequency + ): + entry = {} + entry["NFE"] = currentEvaluations + entry["ElapsedTime"] = time.process_time() - start + entry["SBX"] = Configuration.libborg.BORG_Operator_get_probability(sbx) + entry["DE"] = Configuration.libborg.BORG_Operator_get_probability(de) + entry["PCX"] = Configuration.libborg.BORG_Operator_get_probability(pcx) + entry["SPX"] = Configuration.libborg.BORG_Operator_get_probability(spx) + entry["UNDX"] = Configuration.libborg.BORG_Operator_get_probability( + undx + ) + entry["UM"] = Configuration.libborg.BORG_Operator_get_probability(um) + entry["Improvements"] = ( + Configuration.libborg.BORG_Algorithm_get_number_improvements( + algorithm + ) + ) + entry["Restarts"] = ( + Configuration.libborg.BORG_Algorithm_get_number_restarts(algorithm) + ) + entry["PopulationSize"] = ( + Configuration.libborg.BORG_Algorithm_get_population_size(algorithm) + ) + entry["ArchiveSize"] = ( + Configuration.libborg.BORG_Algorithm_get_archive_size(algorithm) + ) + + if ( + settings.get("restartMode", RestartMode.DEFAULT) + == RestartMode.ADAPTIVE + ): + entry["MutationIndex"] = ( + Configuration.libborg.BORG_Algorithm_get_mutation_index( + algorithm + ) + ) + if fp is None: + statistics.append(entry) + else: + archive = Result( + c_void_p( + Configuration.libborg.BORG_Algorithm_get_result(algorithm) + ), + self, + statistics, + ) + if runtimeformat == "optimizedv": + row = [ + "{0}".format(entry[dynamic]) for dynamic in dynamics_header + ] + fp.write("//") + fp.write(",".join(row)) + fp.write("\n") + delimiter = "," + elif runtimeformat == "borg": + metrics = [ + ("NFE", "d"), + ("ElapsedTime", ".17g"), + ("SBX", ".17g"), + ("DE", ".17g"), + ("PCX", ".17g"), + ("SPX", ".17g"), + ("UNDX", ".17g"), + ("UM", ".17g"), + ("Improvements", "d"), + ("Restarts", "d"), + ("PopulationSize", "d"), + ("ArchiveSize", "d"), + ] + for metric, fmt in metrics: + fp.write( + "//{0}={1}\n".format( + metric, "".join(["{0:", fmt, "}"]) + ).format(entry[metric]) + ) + if "MutationIndex" in entry: + fp.write( + "//MutationIndex={0:d}\n".format(entry["MutationIndex"]) + ) + if "data_header" in settings and data_header_written is False: + data_header_written = True + data_header = [ + "_".join(x.split(" ")) for x in settings["data_header"] + ] + data_header.insert(0, "NFE") + fp.write(" ".join(data_header)) + fp.write("\n") + delimiter = " " + + for solution in archive: + report = [entry["NFE"]] + report.extend(solution.getVariables()) + report.extend(solution.getObjectives()) + report.extend(solution.getConstraints()) + fp.write(delimiter.join("{0}".format(v) for v in report)) + fp.write("\n") + fp.flush() + + lastSnapshot = currentEvaluations + + result = c_void_p(Configuration.libborg.BORG_Algorithm_get_result(algorithm)) + + if fp is not None: + fp.close() + + Configuration.libborg.BORG_Operator_destroy(sbx) + Configuration.libborg.BORG_Operator_destroy(de) + Configuration.libborg.BORG_Operator_destroy(pm) + Configuration.libborg.BORG_Operator_destroy(um) + Configuration.libborg.BORG_Operator_destroy(spx) + Configuration.libborg.BORG_Operator_destroy(pcx) + Configuration.libborg.BORG_Operator_destroy(undx) + Configuration.libborg.BORG_Algorithm_destroy(algorithm) + + return Result(result, self, statistics) + + +class Solution: + """A solution to the optimization problem.""" + + def __init__(self, reference, problem): + """Creates a solution given a reference to the underlying C object.""" + self.reference = reference + self.problem = problem + + # There is no __del__ since the underlying C solutions are deleted when the associated + # result object is deleted + + def getVariables(self): + """Returns the decision variable values for this solution.""" + return [self._getVariable(i) for i in range(self.problem.numberOfVariables)] + + def getObjectives(self): + """Returns the objective values for this solution.""" + return [self._getObjective(i) for i in range(self.problem.numberOfObjectives)] + + def getConstraints(self): + """Returns the constraint values for this solution.""" + return [self._getConstraint(i) for i in range(self.problem.numberOfConstraints)] + + def _getVariable(self, index): + """Returns the decision variable at the given index.""" + return Configuration.libborg.BORG_Solution_get_variable(self.reference, index) + + def _getObjective(self, index): + """Returns the objective value at the given index.""" + value = Configuration.libborg.BORG_Solution_get_objective(self.reference, index) + + if self.problem.directions and self.problem.directions[index]: + return -value + else: + return value + + def _getConstraint(self, index): + """Returns the constraint value at the given index.""" + return Configuration.libborg.BORG_Solution_get_constraint(self.reference, index) + + def display(self, out=sys.stdout, separator=" "): + """Prints the decision variables, objectives, and constraints to standard output.""" + print( + separator.join( + map( + str, + self.getVariables() + self.getObjectives() + self.getConstraints(), + ) + ), + file=out, + ) + + def violatesConstraints(self): + """Returns True if this solution violates one or more constraints; False otherwise.""" + return ( + Configuration.libborg.BORG_Solution_violates_constraints(self.reference) + != 0 + ) + + +class Result: + """A Pareto optimal set (the output of the Borg MOEA).""" + + def __init__(self, reference, problem, statistics=None): + """Creates a new Pareto optimal set given a reference to the underlying C object.""" + self.reference = reference + self.problem = problem + self.statistics = statistics + + def __del__(self): + """Deletes the underlying C objects.""" + Configuration.libborg.BORG_Archive_destroy(self.reference) + + def __iter__(self): + """Returns an iterator over the Pareto optimal solutions.""" + return ResultIterator(self) + + def display(self, out=sys.stdout, separator=" "): + """Print the Pareto optimal solutions to standard output.""" + for solution in self: + solution.display(out, separator) + + def size(self): + """Returns the size of the Pareto optimal set.""" + return Configuration.libborg.BORG_Archive_get_size(self.reference) + + def get(self, index): + """Returns the Pareto optimal solution at the given index.""" + return Solution( + c_void_p(Configuration.libborg.BORG_Archive_get(self.reference, index)), + self.problem, + ) + + +class ResultIterator: + """Iterates over the solutions in a Pareto optimal set.""" + + def __init__(self, result): + """Creates an iterator over the given Pareto optimal set.""" + self.result = result + self.index = -1 + + def next(self): + """Returns the next Pareto optimal solution in the set.""" + self.index = self.index + 1 + + if self.index >= self.result.size(): + raise StopIteration + else: + return self.result.get(self.index) + + __next__ = next + + +def _functionWrapper( + function, + numberOfVariables, + numberOfObjectives, + numberOfConstraints, + directions=None, +): + """Wraps a Python evaluation function and converts it to the function signature + required by the C API. + + function - The Python evaluation function of the form (o, c) = f(v) + numberOfVariables - The number of decision variables + numberOfObjectives - The number of objectives + numberOfConstraints - The number of constraints + directions - The array of optimization directions + """ + + def innerFunction(v, o, c): + """The function that gets passed to the C API. + + v - The array of decision variables (input) + o - The array of objectives (output) + c - The array of constraint values (output) + """ + global terminate + try: + result = function(*[v[i] for i in range(numberOfVariables)]) + objectives = None + constraints = None + + if isinstance(result, tuple): + if len(result) > 0: + objectives = result[0] + if len(result) > 1: + constraints = result[1] + elif isinstance(result, list): + objectives = result + else: + objectives = [result] + + if objectives: + if len(objectives) != numberOfObjectives: + raise ValueError( + "Incorrect number of objectives returned by function" + ) + for i in range(len(objectives)): + if directions and directions[i]: + o[i] = -objectives[i] + else: + o[i] = objectives[i] + elif numberOfObjectives > 0: + raise ValueError("No objectives returned by function") + + if constraints: + if len(constraints) != numberOfConstraints: + raise ValueError( + "Incorrect number of constraints returned by function" + ) + for i in range(len(constraints)): + c[i] = constraints[i] + elif numberOfConstraints > 0: + raise ValueError("No constraints returned by function") + + return 0 + except KeyboardInterrupt: + terminate = True + return 1 + + return innerFunction + + +class Constraint: + """Helper functions for defining constraints. + + These functions ensure several conditions hold. First, if the + constraint is satisfied, the value is 0. If the constraint is + violated, then the value is non-zero and will scale linearly + with the degree of violation. + """ + + precision = 0.1 + + @staticmethod + def greaterThan(x, y, epsilon=0.0): + """Defines the constraint x > y.""" + return 0.0 if x > y - epsilon else y - x + Constraint.precision + + @staticmethod + def lessThan(x, y, epsilon=0.0): + """Defines the constraint x < y.""" + return 0.0 if x < y + epsilon else x - y + Constraint.precision + + @staticmethod + def greaterThanOrEqual(x, y, epsilon=0.0): + """Defines the constraint x >= y.""" + return 0.0 if x >= y - epsilon else y - x + Constraint.precision + + @staticmethod + def lessThanOrEqual(x, y, epsilon=0.0): + """Defines the constraint x <= y.""" + return 0.0 if x <= y + epsilon else x - y + Constraint.precision + + @staticmethod + def equal(x, y, epsilon=0.0): + """Defines the constraint x == y.""" + return 0.0 if abs(y - x) < epsilon else abs(y - x) + Constraint.precision + + @staticmethod + def zero(x, epsilon=0.0): + """Defines the constraint x == 0.""" + return Constraint.equal(x, 0.0, epsilon) + + @staticmethod + def nonNegative(x, epsilon=0.0): + """Defines the constraint x >= 0.""" + return Constraint.greaterThanOrEqual(x, 0.0, epsilon) + + @staticmethod + def positive(x, epsilon=0.0): + """Defines the constraint x > 0.""" + return Constraint.greaterThan(x, 0.0, epsilon) + + @staticmethod + def negative(x, epsilon=0.0): + """Defines the constraint x < 0.""" + return Constraint.lessThan(x, 0.0, epsilon) + + @staticmethod + def all(*args): + """Requires all conditions to be satisfied.""" + return sum(args) + + @staticmethod + def any(*args): + """Requres at least one condition to be satisfied.""" + return 0.0 if 0.0 in args else sum(args) + + +Configuration.initialize() diff --git a/solvers/moea/borg_platypus_adapter.py b/solvers/moea/borg_platypus_adapter.py new file mode 100644 index 0000000..4a6e277 --- /dev/null +++ b/solvers/moea/borg_platypus_adapter.py @@ -0,0 +1,496 @@ +""" +Adapter that wraps the C Borg implementation (via borg.py) so it can be used as +a Platypus Algorithm inside EMA-Workbench. + +Highlights +---------- +- Stores EMA model/Scenario/lever names in a shared context. +- Builds a callback that either evaluates solutions via Platypus’ Problem + (default) or directly via a user-specified evaluation function (direct mode). +- Presents minimal archive stubs so EMA convergence metrics keep working. +""" + +from typing import List, Optional, Dict, Any, Iterable +import os +import tarfile + +import csv +import zipfile +import numpy as np +from platypus import Algorithm, Problem, Solution, Real, Integer, Binary + +# Shared EMA context; set once from user code +_EMA_CONTEXT: Dict[str, Any] = { + "model": None, + "reference": None, + "lever_names": None, + "outcome_names": None, + "evaluation": None, + "reference_index": None, +} + + +def _write_block_csv(header, rows, target_dir, nfe): + if not rows: + return + os.makedirs(target_dir, exist_ok=True) + csv_path = os.path.join(target_dir, f"{nfe}.csv") + with open(csv_path, "w", newline="") as csv_file: + writer = csv.writer(csv_file) + writer.writerow(header) + writer.writerows(rows) + + +def _process_runtime_file(runtime_path, header, island_dir): + if not os.path.exists(runtime_path): + return + + current_nfe = None + rows = [] + + with open(runtime_path, "r") as fh: + for raw_line in fh: + line = raw_line.strip() + if not line: + continue + + if line == "#": + if current_nfe is not None and rows: + _write_block_csv(header, rows, island_dir, current_nfe) + current_nfe = None + rows = [] + continue + + if line.startswith("//NFE="): + try: + nfe_val = int(line.split("=", 1)[1]) + except ValueError: + nfe_val = None + if current_nfe is not None and rows: + _write_block_csv(header, rows, island_dir, current_nfe) + current_nfe = nfe_val + rows = [] + continue + + if line.startswith("//"): + continue + + if current_nfe is None: + continue + + rows.append(line.split()) + + if current_nfe is not None and rows: + _write_block_csv(header, rows, island_dir, current_nfe) + + +def _find_final_tar(directory_name, explicit_filename=None): + if explicit_filename: + candidate = os.path.join(directory_name, explicit_filename) + if os.path.isfile(candidate): + return candidate + for entry in os.listdir(directory_name): + if entry.endswith(".tar") or entry.endswith(".tar.gz"): + candidate = os.path.join(directory_name, entry) + if os.path.isfile(candidate): + return candidate + return None + + +def _extract_latest_csv_from_tar(tar_path): + try: + with tarfile.open(tar_path, "r:*") as tar: + members = [ + m for m in tar.getmembers() if m.isfile() and m.name.endswith(".csv") + ] + if not members: + return None + + def _key(member): + base = os.path.basename(member.name) + digits = "".join(ch for ch in base if ch.isdigit()) + try: + return int(digits) + except ValueError: + return -1 + + chosen = max(members, key=_key) + extracted = tar.extractfile(chosen) + if extracted: + return os.path.basename(chosen.name), extracted.read() + except (tarfile.TarError, OSError): + pass + return None + + +def _create_intermediate_archives(directory_name, filename, islands, header): + if header is None: + return + intermediate_root = os.path.join(directory_name, "mm_intermediate") + for idx in range(islands): + runtime_path = os.path.join(directory_name, f"mm_{idx}.runtime") + island_dir = os.path.join(intermediate_root, f"mm_{idx}") + _process_runtime_file(runtime_path, header, island_dir) + if not os.path.isdir(intermediate_root): + return + zip_path = os.path.join(directory_name, "mm_intermediate.zip") + with zipfile.ZipFile(zip_path, "w", compression=zipfile.ZIP_DEFLATED) as zf: + for root, _, files in os.walk(intermediate_root): + for fname in files: + full_path = os.path.join(root, fname) + arcname = os.path.relpath(full_path, directory_name) + zf.write(full_path, arcname) + tar_path = _find_final_tar(directory_name, filename) + if tar_path: + zf.write(tar_path, os.path.basename(tar_path)) + extracted = _extract_latest_csv_from_tar(tar_path) + if extracted: + csv_name, data = extracted + zf.writestr(os.path.join("final_archive", csv_name), data) + + +def set_ema_context( + model=None, + reference=None, + lever_names=None, + outcome_names=None, + evaluation=None, + reference_index=None, +) -> None: + """ + Populate the EMA context so the Borg callback can fetch constants, levers, + outcomes, evaluation function, and reference scenario. + + Parameters + ---------- + model : ema_workbench.Model + Model object (used for constants/levers/outcomes). + reference : ema_workbench.Scenario + Scenario used as the reference case. + lever_names : list[str], optional + Lever names (if not provided, tries to infer from model). + outcome_names : list[str], optional + Outcome names (if not provided, tries to infer from model). + evaluation : callable, optional + Function to evaluate a single policy (e.g., model_wrapper_emodps). + Signature should be ``evaluation(**kwargs) -> Tuple[float, float]`` or similar. + reference_index : int, optional + Optional scenario index so the callback can set `ssp_rcp_scenario`. + """ + _EMA_CONTEXT["model"] = model + _EMA_CONTEXT["reference"] = reference + _EMA_CONTEXT["evaluation"] = evaluation + _EMA_CONTEXT["reference_index"] = reference_index + + if model is not None: + try: + if lever_names is None and hasattr(model, "levers"): + lever_names = [lever.name for lever in model.levers] + except Exception: + pass + try: + if outcome_names is None and hasattr(model, "outcomes"): + outcome_names = [outcome.name for outcome in model.outcomes] + except Exception: + pass + + _EMA_CONTEXT["lever_names"] = lever_names + _EMA_CONTEXT["outcome_names"] = outcome_names + + +class _ArchiveView: + """Minimal archive stub so EMA convergence metrics can iterate/inspect.""" + + def __init__(self, solutions: List[Solution], improvements: int = 0) -> None: + self._solutions = solutions + self.improvements = improvements if improvements is not None else len(solutions) + + def __len__(self) -> int: + return len(self._solutions) + + def __iter__(self) -> Iterable[Solution]: + return iter(self._solutions) + + +class _AlgorithmStub: + """Minimal algorithm stub exposing only an `.archive` attribute.""" + + def __init__(self, archive: _ArchiveView) -> None: + self.archive = archive + + +class BorgMOEA(Algorithm): + """ + Base adapter for the C Borg MOEA (via borg.py) so it can ‘look like’ a + Platypus Algorithm inside EMA-Workbench. + + Parameters + ---------- + problem : platypus.Problem + Platypus problem (variables, objectives, constraints). + epsilons : List[float] + Epsilon values for Borg’s epsilon-dominance archive. + population_size : Optional[int] + Initial population size (overrides Borg default). + borg_library_path : Optional[str] + Path to the compiled Borg shared library (e.g., libborg.so or libborgmm.so). + seed : Optional[int] + Seed for Borg’s RNG (use None to keep Borg’s default randomness). + solve_settings : Optional[Dict[str, Any]] + Additional Borg run settings (maxEvaluations is set automatically). + direct_evaluation : bool + When True, the callback calls the evaluation function stored in + `_EMA_CONTEXT["evaluation"]` instead of `Problem.evaluate`. + """ + + def __init__( + self, + problem: Problem, + epsilons: List[float], + population_size: Optional[int] = None, + borg_library_path: Optional[str] = None, + seed: Optional[int] = None, + solve_settings: Optional[Dict[str, Any]] = None, + direct_evaluation: bool = False, + **kwargs, + ): + super(BorgMOEA, self).__init__(problem) + + # Configuration parameters + self.epsilons = epsilons + self.population_size = population_size + self.borg_library_path = borg_library_path + self.seed = seed + self.solve_settings = solve_settings or {} + self.direct_evaluation = direct_evaluation + + # Extract optional EMA metadata if provided + self.evaluator = kwargs.get("evaluator", None) + self.reference = kwargs.get("reference", None) + self.extra_kwargs = kwargs + + # Try inferring lever/outcome names from evaluator, else fallback to context + self._lever_names = None + self._outcome_names = None + try: + if self.evaluator is not None and hasattr(self.evaluator, "model"): + self._lever_names = [ + lever.name for lever in getattr(self.evaluator.model, "levers", []) + ] + self._outcome_names = [ + outcome.name + for outcome in getattr(self.evaluator.model, "outcomes", []) + ] + except Exception: + pass + + if not self._lever_names: + self._lever_names = _EMA_CONTEXT.get("lever_names") + if not self._outcome_names: + self._outcome_names = _EMA_CONTEXT.get("outcome_names") + if self.reference is None: + self.reference = _EMA_CONTEXT.get("reference") + + # Initialize result tracking (list of Platypus solutions) + self.result: List[Solution] = [] + self.nfe = 0 + + # Provide stub archive/algorithm for EMA convergence logging + self.archive = _ArchiveView(self.result, improvements=0) + self.algorithm = _AlgorithmStub(self.archive) + + # ------------------------------------------------------------------ + # Helpers for the two evaluation modes + # ------------------------------------------------------------------ + def _evaluate_with_problem(self, casted_vars: List[Any]) -> tuple: + """Evaluate using Problem.evaluate (Platypus default).""" + problem = self.problem + nconstr = getattr(problem, "nconstr", 0) + + s = Solution(problem) + s.variables = casted_vars + problem.evaluate(s) + + if nconstr: + cons = list(getattr(s, "constraints", []) or []) + if len(cons) < nconstr: + cons += [0.0] * (nconstr - len(cons)) + return (list(s.objectives), cons) + else: + return list(s.objectives) + + def _evaluate_directly(self, casted_vars: List[Any]) -> tuple: + eval_fn = _EMA_CONTEXT.get("evaluation") + mdl = _EMA_CONTEXT.get("model") + + if eval_fn is None or mdl is None: + raise RuntimeError( + "Direct evaluation requested, but the evaluation function or model " + "was not provided. Set evaluation=... in set_ema_context(...)." + ) + + base_kwargs = {c.name: c.value for c in getattr(mdl, "constants", [])} + + ref = _EMA_CONTEXT.get("reference") + if ref is not None and hasattr(ref, "ssp_rcp_scenario"): + base_kwargs["ssp_rcp_scenario"] = ref.ssp_rcp_scenario + else: + idx = _EMA_CONTEXT.get("reference_index") + if idx is not None: + base_kwargs["ssp_rcp_scenario"] = idx + + if self._lever_names is None or len(self._lever_names) != len(casted_vars): + raise RuntimeError( + f"Lever count mismatch: nvars={len(casted_vars)} " + f"vs lever_names={len(self._lever_names) if self._lever_names else None}" + ) + + lever_map = {name: val for name, val in zip(self._lever_names, casted_vars)} + kwargs = {**base_kwargs, **lever_map} + + raw = eval_fn(**kwargs) + + # Determine objectives/constraints based on type/length + objectives = None + constraints = None + + if isinstance(raw, tuple): + # If we have constraints, and the tuple matches (objs, constr), + # interpret accordingly. Otherwise, treat entire tuple as objectives. + if ( + len(raw) == 2 + and getattr(self.problem, "nconstr", 0) > 0 + and isinstance(raw[1], (list, tuple, np.ndarray)) + ): + objectives, constraints = raw + else: + objectives = raw + elif isinstance(raw, dict): + # Map by outcome names if provided + names = self._outcome_names or list(raw.keys()) + objectives = [raw[name] for name in names] + else: + objectives = raw + + # Convert to numpy array for convenience, then to float list + def _to_float_list(x): + arr = np.asarray(x, dtype=float).flatten() + return arr.tolist() + + objectives = _to_float_list(objectives) if objectives is not None else [] + + nconstr = getattr(self.problem, "nconstr", 0) + if nconstr: + if constraints is None: + constraints = [0.0] * nconstr + else: + constraints = _to_float_list(constraints) + if len(constraints) < nconstr: + constraints += [0.0] * (nconstr - len(constraints)) + else: + constraints = constraints[:nconstr] + return objectives, constraints + else: + return objectives + + # ------------------------------------------------------------------ + def _make_callback(self): + """ + Build the evaluation function Borg will call. If `direct_evaluation` is set, + we use _evaluate_directly; otherwise we fall back to Problem.evaluate. + """ + problem = self.problem + direct = bool(self.direct_evaluation) + + def cb(*x): + casted_vars = [] + for val, t in zip(x, problem.types): + if isinstance(t, Integer): + lo, hi = t.min_value, t.max_value + v = int(round(val)) + if lo is not None: + v = max(lo, v) + if hi is not None: + v = min(hi, v) + casted_vars.append(v) + elif isinstance(t, Binary): + casted_vars.append(1 if val >= 0.5 else 0) + else: + lo = getattr(t, "min_value", None) + hi = getattr(t, "max_value", None) + v = float(val) + if lo is not None: + v = max(lo, v) + if hi is not None: + v = min(hi, v) + casted_vars.append(v) + + if direct: + return self._evaluate_directly(casted_vars) + else: + return self._evaluate_with_problem(casted_vars) + + return cb + + def _set_bounds(self, borg): + """Align Platypus bounds with Borg’s expectation.""" + bounds = [] + for t in self.problem.types: + if isinstance(t, Binary): + lo, hi = 0.0, 1.0 + else: + lo = getattr(t, "min_value", None) + hi = getattr(t, "max_value", None) + if lo is None or hi is None: + raise ValueError("All variables must have finite bounds for Borg.") + bounds.append([float(lo), float(hi)]) + borg.setBounds(*bounds) + + def run(self, max_evaluations: int): + """ + Serial run for Borg (no MPI). Converts results to Platypus Solution objects. + """ + from borg import Borg, Configuration + + if self.borg_library_path: + Configuration.setBorgLibrary(self.borg_library_path) + if self.seed is not None: + Configuration.seed(self.seed) + + nvars = self.problem.nvars + nobjs = self.problem.nobjs + nconstr = getattr(self.problem, "nconstr", 0) + callback = self._make_callback() + borg = Borg(nvars, nobjs, nconstr, callback) + + self._set_bounds(borg) + borg.setEpsilons(*self.epsilons) + + settings = dict(self.solve_settings) + settings["maxEvaluations"] = int(max_evaluations) + if self.population_size is not None: + settings.setdefault("initialPopulationSize", int(self.population_size)) + settings.setdefault("minimumPopulationSize", int(self.population_size)) + + borg_result = borg.solve(settings) + + self.result = [] + if borg_result is not None: + for s_borg in borg_result: + sol = Solution(self.problem) + sol.variables = list(s_borg.getVariables()) + sol.objectives = list(s_borg.getObjectives()) + if nconstr: + sol.constraints = list(s_borg.getConstraints()) + self.result.append(sol) + self.nfe = settings["maxEvaluations"] + else: + self.nfe = 0 + + # Refresh stub so EMA convergence diagnostics still work + self.archive = _ArchiveView(self.result, improvements=len(self.result)) + self.algorithm = _AlgorithmStub(self.archive) + + def step(self): + """Newer Platypus requires a concrete step() method even if run() is used.""" + return