diff --git "a/CVECVSS.ipynb" "b/CVECVSS.ipynb" new file mode 100644--- /dev/null +++ "b/CVECVSS.ipynb" @@ -0,0 +1,2169 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "436c3735-6643-4c2e-8e7a-2c91eceb5321", + "metadata": {}, + "source": [ + "# CVSS Data\n", + "---" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "a8face4a-ddee-4bd5-a84e-97f2bd508491", + "metadata": { + "execution": { + "iopub.execute_input": "2024-06-16T12:26:13.162915Z", + "iopub.status.busy": "2024-06-16T12:26:13.162744Z", + "iopub.status.idle": "2024-06-16T12:26:13.473213Z", + "shell.execute_reply": "2024-06-16T12:26:13.472599Z" + }, + "tags": [ + "remove-cell" + ] + }, + "outputs": [], + "source": [ + "from IPython.core.magic import register_cell_magic\n", + "from IPython.display import Markdown\n", + "import datetime\n", + "from datetime import date\n", + "import glob\n", + "import logging\n", + "import json\n", + "import pandas as pd\n", + "import plotly\n", + "import plotly.graph_objects as go\n", + "import plotly.express as px\n", + "import numpy as np\n", + "import warnings\n", + "\n", + "\n", + "\n", + "@register_cell_magic\n", + "def markdown(line, cell):\n", + " return Markdown(cell.format(**globals()))\n", + "\n", + "\n", + "logging.getLogger('matplotlib.font_manager').disabled = True\n", + "warnings.filterwarnings(\"ignore\")\n", + "pd.set_option('display.width', 500)\n", + "pd.set_option('display.max_rows', 50)\n", + "pd.set_option('display.max_columns', 10)\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "fb89c5a2-83da-459d-be6c-456a949cf3dd", + "metadata": { + "execution": { + "iopub.execute_input": "2024-06-16T12:26:13.476170Z", + "iopub.status.busy": "2024-06-16T12:26:13.475682Z", + "iopub.status.idle": "2024-06-16T12:26:58.930879Z", + "shell.execute_reply": "2024-06-16T12:26:58.930330Z" + }, + "tags": [ + "remove-cell" + ] + }, + "outputs": [], + "source": [ + "\n", + "row_accumulator = []\n", + "for filename in glob.glob('nvdcve-1.1-*.json'):\n", + " with open(filename, 'r', encoding='utf-8') as f:\n", + " nvd_data = json.load(f)\n", + " for entry in nvd_data['CVE_Items']:\n", + " cve = entry['cve']['CVE_data_meta']['ID']\n", + " try:\n", + " assigner = entry['cve']['CVE_data_meta']['ASSIGNER']\n", + " except KeyError:\n", + " assigner = 'Missing_Data'\n", + " try:\n", + " published_date = entry['publishedDate']\n", + " except KeyError:\n", + " published_date = 'Missing_Data'\n", + " try:\n", + " attack_vector = entry['impact']['baseMetricV3']['cvssV3']['attackVector']\n", + " except KeyError:\n", + " attack_vector = 'Missing_Data'\n", + " try:\n", + " attack_complexity = entry['impact']['baseMetricV3']['cvssV3']['attackComplexity']\n", + " except KeyError:\n", + " attack_complexity = 'Missing_Data'\n", + " try:\n", + " privileges_required = entry['impact']['baseMetricV3']['cvssV3']['privilegesRequired']\n", + " except KeyError:\n", + " privileges_required = 'Missing_Data'\n", + " try:\n", + " user_interaction = entry['impact']['baseMetricV3']['cvssV3']['userInteraction']\n", + " except KeyError:\n", + " user_interaction = 'Missing_Data'\n", + " try:\n", + " scope = entry['impact']['baseMetricV3']['cvssV3']['scope']\n", + " except KeyError:\n", + " scope = 'Missing_Data'\n", + " try:\n", + " confidentiality_impact = entry['impact']['baseMetricV3']['cvssV3']['confidentialityImpact']\n", + " except KeyError:\n", + " confidentiality_impact = 'Missing_Data'\n", + " try:\n", + " integrity_impact = entry['impact']['baseMetricV3']['cvssV3']['integrityImpact']\n", + " except KeyError:\n", + " integrity_impact = 'Missing_Data'\n", + " try:\n", + " availability_impact = entry['impact']['baseMetricV3']['cvssV3']['availabilityImpact']\n", + " except KeyError:\n", + " availability_impact = 'Missing_Data'\n", + " try:\n", + " base_score = entry['impact']['baseMetricV3']['cvssV3']['baseScore']\n", + " except KeyError:\n", + " base_score = '0.0'\n", + " try:\n", + " base_severity = entry['impact']['baseMetricV3']['cvssV3']['baseSeverity']\n", + " except KeyError:\n", + " base_severity = 'Missing_Data'\n", + " try:\n", + " exploitability_score = entry['impact']['baseMetricV3']['exploitabilityScore']\n", + " except KeyError:\n", + " exploitability_score = 'Missing_Data'\n", + " try:\n", + " impact_score = entry['impact']['baseMetricV3']['impactScore']\n", + " except KeyError:\n", + " impact_score = 'Missing_Data'\n", + " try:\n", + " cwe = entry['cve']['problemtype']['problemtype_data'][0]['description'][0]['value']\n", + " except IndexError:\n", + " cwe = 'Missing_Data'\n", + " try:\n", + " description = entry['cve']['description']['description_data'][0]['value']\n", + " except IndexError:\n", + " description = ''\n", + " new_row = { \n", + " 'CVE': cve, \n", + " 'Published': published_date,\n", + " 'AttackVector': attack_vector,\n", + " 'AttackComplexity': attack_complexity,\n", + " 'PrivilegesRequired': privileges_required,\n", + " 'UserInteraction': user_interaction,\n", + " 'Scope': scope,\n", + " 'ConfidentialityImpact': confidentiality_impact,\n", + " 'IntegrityImpact': integrity_impact,\n", + " 'AvailabilityImpact': availability_impact,\n", + " 'BaseScore': base_score,\n", + " 'BaseSeverity': base_severity,\n", + " 'ExploitabilityScore': exploitability_score,\n", + " 'ImpactScore': impact_score,\n", + " 'CWE': cwe,\n", + " 'Description': description,\n", + " 'Assigner' : assigner\n", + " }\n", + " if not description.startswith('** REJECT **'): # disputed, rejected and other non issues start with '**'\n", + " row_accumulator.append(new_row)\n", + " nvd = pd.DataFrame(row_accumulator)\n", + " \n", + "nvd['Published'] = pd.to_datetime(nvd['Published'])\n", + "thisyear = ((nvd['Published'] > '2000-01-01') & (nvd['Published'] < '2024-01-01'))\n", + "nvd = nvd.loc[thisyear]\n", + "nvd = nvd.sort_values(by=['Published'])\n", + "nvd = nvd.reset_index(drop=True)\n", + "nvd['BaseScore'] = pd.to_numeric(nvd['BaseScore']);\n", + "nvd['BaseScore'] = pd.to_numeric(nvd['BaseScore']);\n", + "nvd['BaseScore'] = nvd['BaseScore'].replace(0, np.NaN);\n", + "nvdcount = nvd['Published'].count()\n", + "nvdunique = nvd['Published'].nunique()\n", + "startdate = date(2000, 1, 1)\n", + "enddate = date.today()\n", + "numberofdays = enddate - startdate \n", + "per_day = nvdcount/numberofdays.days" + ] + }, + { + "cell_type": "markdown", + "id": "76ba3fec-e991-4f78-9e2d-15b80300aed8", + "metadata": {}, + "source": [ + "## CVSS Graph" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "6eb47510-9e6a-42c4-bb57-34763a056c67", + "metadata": { + "execution": { + "iopub.execute_input": "2024-06-16T12:26:58.933413Z", + "iopub.status.busy": "2024-06-16T12:26:58.933129Z", + "iopub.status.idle": "2024-06-16T12:26:59.343667Z", + "shell.execute_reply": "2024-06-16T12:26:59.343116Z" + }, + "tags": [ + "remove-input" + ] + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAABTUAAAKqCAYAAADrHrqNAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy80BEi2AAAACXBIWXMAAA9hAAAPYQGoP6dpAABIMklEQVR4nO3debzVdb3v8fcG3IDE3ioyJiLOIqY5hKh4M7lg4oB5Sk1yIs0OlIjzSVGzUvFq6nUgCqVuUmqpFSZGoDjhhJJhSaYYGoMksjdQArLX/aPDOm7BgS24+Onz+Xisx3H9ft+11mctH+1Hvc5vqCqVSqUAAAAAABREs0oPAAAAAACwNkRNAAAAAKBQRE0AAAAAoFBETQAAAACgUERNAAAAAKBQRE0AAAAAoFBETQAAAACgUERNAAAAAKBQRE0AAAAAoFBETQAAWAsvvfRSqqqq8n/+z/9p0uvHjh2bqqqqvPTSS+t2MACAjxFREwDgI+yFF17I1772tWy99dZp1apVampqsu++++aaa67Jv/71rzz11FOpqqrK+eef/47v8fzzz6eqqirDhw8vb3vooYfy+c9/Pp/85CfTqlWrbLnlljn00EMzbty4Rq9dsmRJLrzwwvTs2TNt2rRJu3btsttuu+W0007LnDlz3nX2+++/P1VVVY0em222Wfbee+/ccsstH+yHAQCg0FpUegAAANaPu+++O1/84hfTsmXLHHfccenZs2eWL1+ehx56KGeddVaeffbZjB49OjvuuGN+9rOf5Tvf+c4a32dVqBw0aFCS5Pbbb89RRx1VjpObbrppZs2alQceeCA//OEP8+UvfzlJsmLFiuy///557rnncvzxx+cb3/hGlixZkmeffTbjxo3LEUcckS5durzn9/jmN7+ZvfbaK0ny2muv5dZbb82gQYOyaNGiDBkyZF38VAAAFIyoCQDwETRr1qwcffTR6datWyZPnpzOnTuX9w0ZMiR//etfc/fddydJjj322FxwwQV59NFHs/fee6/2Xj/72c+y4447Zvfdd0+SXHTRRenRo0ceffTRVFdXN1r76quvlv/5rrvuytNPP51bbrmlHDpXeeONN7J8+fL39V369OmT//iP/yg///rXv56tt94648aNe9eo2dDQkOXLl6dVq1bv63MAACgOp58DAHwEjRw5MkuWLMmYMWMaBc1Vtt1225x22mlJ/h01k6x26niSTJs2LTNnziyvSf59Svtee+21WtBMkg4dOjRalyT77rvvautWnQrfFNXV1dl0003TokXj//98VVVVhg4dmltuuSU777xzWrZsmQkTJiRJ/v73v+ekk05Kx44d07Jly+y888656aabGr1++fLlGTFiRPbYY4/U1tamTZs26dOnT+677773nKlUKuWUU05JdXV17rjjjvL2Z599Np/73OfSunXrbLHFFvnOd76ThoaGNb7HDTfcUJ67S5cuGTJkSBYtWlTef+2116Z58+aNtl155ZWrXRpg5cqVadu2bc4555wkja8BOnr06GyzzTZp2bJl9tprrzzxxBPv+d0AADZEjtQEAPgI+s1vfpOtt946++yzz3uu7d69e/bZZ5/cdttt+f73v5/mzZuX960KnW890rJbt26ZNGlSXnnllWyxxRbv+L7dunVLkvzkJz/J+eefn6qqqiZ9l8WLF+cf//hHkmThwoUZN25cZsyYkTFjxqy2dvLkybntttsydOjQbL755tlqq60yf/787L333uXo2b59+9xzzz0ZPHhw6uvrM2zYsCRJfX19fvSjH+WYY47JySefnMWLF2fMmDHp379/Hn/88ey2225rnG/lypU56aSTcuutt+bOO+/MgAEDkiTz5s3LAQcckDfffDPnnntu2rRpk9GjR6d169arvcdFF12Uiy++OH379s3Xv/71zJw5MzfeeGOeeOKJPPzww9loo43Sp0+fNDQ05KGHHsohhxySJHnwwQfTrFmzPPjgg+X3evrpp7NkyZLsv//+jT5j3LhxWbx4cb72ta+lqqoqI0eOzBe+8IW8+OKL2Wijjdb63wsAQEWVAAD4SKmrqyslKR1++OHv+zXXX399KUnp3nvvLW9buXJl6ZOf/GSpd+/ejdaOGTOmlKRUXV1dOuCAA0oXXHBB6cEHHyytXLmy0bp//vOfpR122KGUpNStW7fSCSecUBozZkxp/vz572um++67r5RktUezZs1K3/3ud1dbv2rfs88+22j74MGDS507dy794x//aLT96KOPLtXW1pb++c9/lkqlUunNN98sLVu2rNGa119/vdSxY8fSSSedVN42a9asUpLSFVdcUVqxYkXpqKOOKrVu3brRb1cqlUrDhg0rJSk99thj5W2vvvpqqba2tpSkNGvWrPK26urqUr9+/Rr9htddd10pSemmm24qlUr//vdRU1NTOvvss0ulUqnU0NBQateuXemLX/xiqXnz5qXFixeXSqVS6aqrrio1a9as9Prrrzeat127dqWFCxeW3/9Xv/pVKUnpN7/5zTv8GwAA2HA5/RwA4COmvr4+SdK2bdv3/ZqjjjoqG220UaNT0KdMmZK///3vjU49T5KTTjopEyZMyGc/+9k89NBDueSSS9KnT59st912eeSRR8rrWrduncceeyxnnXVWkmTs2LEZPHhwOnfunG984xtZtmzZ+5ptxIgRmThxYiZOnJhbb701xxxzTL71rW/lmmuuWW3t//pf/ys9evQoPy+VSvnlL3+ZQw89NKVSKf/4xz/Kj/79+6euri5PPfVUkqR58+blU+obGhqycOHCvPnmm9lzzz3La95q+fLl+eIXv5jx48fnt7/9bfr169do/29/+9vsvffe+cxnPlPe1r59+9V+z9///vdZvnx5hg0blmbN/ue/np988smpqakpX/u0WbNm2WefffLAAw8kSf785z/ntddey7nnnptSqZSpU6cm+ffRmz179swmm2zS6HOOOuqobLrppuXnffr0SZK8+OKLa/rZAQA2aKImAMBHzKprVS5evPh9v6Zdu3bp379/7rzzzrzxxhtJ/n26cosWLfKlL31ptfX9+/fPvffem0WLFuWBBx7IkCFD8re//S2HHHJIo5sF1dbWZuTIkXnppZfy0ksvZcyYMdlhhx1y3XXX5ZJLLnlfs+2yyy7p27dv+vbtmy996Uv56U9/mkMOOSTnnntuFixY0Ght9+7dGz1fsGBBFi1alNGjR6d9+/aNHieeeGKSxjc3+vGPf5xPfepTadWqVdq1a5f27dvn7rvvTl1d3WpzXXrppbnrrrvyi1/8Ip/97GdX2/+3v/0t22233Wrbd9hhh9XWrWl7dXV1tt566/L+5N8hctq0afnXv/6VBx98MJ07d87uu++eXXfdtXwK+kMPPVQOlm+15ZZbNnq+KnC+/vrrq60FANjQiZoAAB8xNTU16dKlS2bMmLFWrxs0aFDq6+szfvz4LF++PL/85S/Tr1+/tG/f/h1fs/HGG6dPnz657rrrcv755+f111/PPffcs8a13bp1y0knnZSHH344m2yySW655Za1mu+tDjzwwLzxxht5/PHHG21/+/UqV92UZ9CgQeWjPd/+WHUjo5/+9Kc54YQTss0222TMmDGZMGFCJk6cmM997nNrvLlP//7906ZNm4wcObIcgte3/fbbLytWrMjUqVPz4IMPluNlnz598uCDD+a5557LggUL1hg133qt1LcqlUrrdWYAgPXBjYIAAD6CDjnkkIwePTpTp05N796939drDjvssLRt2zbjxo3LRhttlNdff321U6XfzZ577pkkmTt37ruu23TTTbPNNtusdXR9qzfffDNJsmTJkndd1759+7Rt2zYrV65M375933XtL37xi2y99da54447Gt3U6MILL1zj+r333junnnpqDjnkkHzxi1/MnXfe2eiO7N26dcvzzz+/2utmzpzZ6PmqGyrNnDkzW2+9dXn78uXLM2vWrEZzf+Yzn0l1dXUefPDBPPjgg+VT+/fff//88Ic/zKRJk8rPAQA+yhypCQDwEXT22WenTZs2+epXv5r58+evtv+FF15Y7ZqUrVu3zhFHHJHf/va3ufHGG9OmTZscfvjhq712VTh7u9/+9rdJ/uc06j/84Q/lu5a/1d/+9rf86U9/Wu1067Uxfvz4JMmuu+76ruuaN2+eI488Mr/85S/XGFHfevr6qiMZ33rk4mOPPVa+VuWa9O3bNz//+c8zYcKEfOUrX2l0ROfBBx+cRx99tNHRpAsWLFjtCNW+ffumuro61157baPPHjNmTOrq6sp3U0+SVq1aZa+99srPfvazzJ49u9GRmv/6179y7bXXZptttknnzp3f9XcBACg6R2oCAHwEbbPNNhk3blyOOuqo7LTTTjnuuOPSs2fPLF++PI888khuv/32nHDCCau9btCgQfnJT36Se++9N8cee2zatGmz2prDDz883bt3z6GHHpptttkmS5cuze9///v85je/yV577ZVDDz00STJx4sRceOGFOeyww7L33nvnE5/4RF588cXcdNNNWbZsWS666KL39V0efPDB8undCxcuzK9//etMmTIlRx99dHbcccf3fP1ll12W++67L7169crJJ5+cHj16ZOHChXnqqafy+9//PgsXLkzy76Nb77jjjhxxxBEZMGBAZs2alVGjRqVHjx7vekTowIEDc/PNN+e4445LTU1NfvCDHyT5d1j+f//v/+Wggw7KaaedljZt2mT06NHp1q1bnnnmmfLr27dvn/POOy8XX3xxDjrooBx22GGZOXNmbrjhhuy1114ZNGhQo8/r06dPLrvsstTW1maXXXZJknTo0CE77LBDZs6cucZ/rwAAHzWiJgDAR9Rhhx2WZ555JldccUV+9atf5cYbb0zLli3zqU99KldeeWVOPvnk1V7zuc99Lp07d87cuXPf8dTzH/3oR/nVr36V2267LXPmzEmpVMrWW2+db33rWznnnHPKp2AfeeSRWbx4cX73u99l8uTJWbhwYTbddNN85jOfyRlnnJEDDjjgfX2Pa6+9tvzPq26e893vfrd86vV76dixYx5//PF8+9vfzh133JEbbrgh7dq1y84775zLL7+8vO6EE07IvHnz8oMf/CD33ntvevTokZ/+9Ke5/fbbc//997/rZwwaNCiLFy/Of/7nf6ampiZXXHFFOnfunPvuuy/f+MY3ctlll6Vdu3Y59dRT06VLlwwePLjR6y+66KK0b98+1113XU4//fRsttlmOeWUU/K9730vG220UaO1q6LmPvvs0+hu6X369MnMmTPXeD1NAICPmqqSK4MDAAAAAAXimpoAAAAAQKGImgAAAABAoYiaAAAAAEChiJoAAAAAQKGImgAAAABAoYiaAAAAAEChtKj0AB8VDQ0NmTNnTtq2bZuqqqpKjwMAAAAAhVIqlbJ48eJ06dIlzZq9+7GYouY6MmfOnHTt2rXSYwAAAABAob388svZYost3nWNqLmOtG3bNsm/f/SampoKTwMAAAAAxVJfX5+uXbuWO9u7ETXXkVWnnNfU1IiaAAAAANBE7+fSjm4UBAAAAAAUiqgJAAAAABSKqAkAAAAAFIqoCQAAAAAUiqgJAAAAABSKqAkAAAAAFIqoCQAAAAAUiqgJAAAAABSKqAkAAAAAFIqoCQAAAAAUiqgJAAAAABSKqAkAAAAAFIqoCQAAAAAUiqgJAAAAABSKqAkAAAAAFIqoCQAAAAAUiqgJAAAAABSKqAkAAAAAFIqoCQAAAAAUiqgJAAAAABSKqAkAAAAAFIqoCQAAAAAUiqgJAAAAABSKqAkAAAAAFIqoCQAAAAAUiqgJAAAAABSKqAkAAAAAFEqLSg8AAAAflqotL6n0CPCxV5p9QaVHAOAjwJGaAAAAAEChiJoAAAAAQKGImgAAAABAoYiaAAAAAEChiJoAAAAAQKGImgAAAABAoYiaAAAAAEChiJoAAAAAQKGImgAAAABAoYiaAAAAAEChiJoAAAAAQKGImgAAAABAoVQ0al566aXZa6+90rZt23To0CEDBw7MzJkzG6357Gc/m6qqqkaPU089tdGa2bNnZ8CAAdl4443ToUOHnHXWWXnzzTcbrbn//vuz++67p2XLltl2220zduzY1ea5/vrrs9VWW6VVq1bp1atXHn/88XX+nQEAAACAD6aiUXPKlCkZMmRIHn300UycODErVqxIv379snTp0kbrTj755MydO7f8GDlyZHnfypUrM2DAgCxfvjyPPPJIfvzjH2fs2LEZMWJEec2sWbMyYMCAHHDAAZk+fXqGDRuWr371q7n33nvLa2699dYMHz48F154YZ566qnsuuuu6d+/f1599dX1/0MAAAAAAO9bValUKlV6iFUWLFiQDh06ZMqUKdl///2T/PtIzd122y1XX331Gl9zzz335JBDDsmcOXPSsWPHJMmoUaNyzjnnZMGCBamurs4555yTu+++OzNmzCi/7uijj86iRYsyYcKEJEmvXr2y11575brrrkuSNDQ0pGvXrvnGN76Rc8899z1nr6+vT21tberq6lJTU/NBfgYAANaTqi0vqfQI8LFXmn1BpUcAYAO1Nn1tg7qmZl1dXZJks802a7T9lltuyeabb56ePXvmvPPOyz//+c/yvqlTp2aXXXYpB80k6d+/f+rr6/Pss8+W1/Tt27fRe/bv3z9Tp05NkixfvjzTpk1rtKZZs2bp27dvec3bLVu2LPX19Y0eAAAAAMD616LSA6zS0NCQYcOGZd99903Pnj3L27/85S+nW7du6dKlS5555pmcc845mTlzZu64444kybx58xoFzSTl5/PmzXvXNfX19fnXv/6V119/PStXrlzjmueee26N81566aW5+OKLP9iXBgAAAADW2gYTNYcMGZIZM2bkoYcearT9lFNOKf/zLrvsks6dO+fAAw/MCy+8kG222ebDHrPsvPPOy/Dhw8vP6+vr07Vr14rNAwAAAAAfFxtE1Bw6dGjGjx+fBx54IFtsscW7ru3Vq1eS5K9//Wu22WabdOrUabW7lM+fPz9J0qlTp/L/XbXtrWtqamrSunXrNG/ePM2bN1/jmlXv8XYtW7ZMy5Yt3/+XBAAAAADWiYpeU7NUKmXo0KG58847M3ny5HTv3v09XzN9+vQkSefOnZMkvXv3zh//+MdGdymfOHFiampq0qNHj/KaSZMmNXqfiRMnpnfv3kmS6urq7LHHHo3WNDQ0ZNKkSeU1AAAAAMCGoaJHag4ZMiTjxo3Lr371q7Rt27Z8Dcza2tq0bt06L7zwQsaNG5eDDz447dq1yzPPPJPTTz89+++/fz71qU8lSfr165cePXrkK1/5SkaOHJl58+bl/PPPz5AhQ8pHUp566qm57rrrcvbZZ+ekk07K5MmTc9ttt+Xuu+8uzzJ8+PAcf/zx2XPPPfOZz3wmV199dZYuXZoTTzzxw/9hAAAAAIB3VFUqlUoV+/CqqjVuv/nmm3PCCSfk5ZdfzqBBgzJjxowsXbo0Xbt2zRFHHJHzzz+/0W3d//a3v+XrX/967r///rRp0ybHH398LrvssrRo8T/N9v7778/pp5+eP/3pT9liiy1ywQUX5IQTTmj0udddd12uuOKKzJs3L7vttluuvfba8unu72VtbjkPAEBlVG15SaVHgI+90uwLKj0CABuotelrFY2aHyWiJgDAhk/UhMoTNQF4J2vT1yp6TU0AAAAAgLUlagIAAAAAhSJqAgAAAACFImoCAAAAAIUiagIAAAAAhSJqAgAAAACFImoCAAAAAIUiagIAAAAAhSJqAgAAAACFImoCAAAAAIUiagIAAAAAhSJqAgAAAACFImoCAAAAAIUiagIAAAAAhSJqAgAAAACFImoCAAAAAIUiagIAAAAAhSJqAgAAAACFImoCAAAAAIUiagIAAAAAhSJqAgAAAACFImoCAAAAAIUiagIAAAAAhSJqAgAAAACFImoCAAAAAIUiagIAAAAAhSJqAgAAAACFImoCAAAAAIUiagIAAAAAhSJqAgAAAACFImoCAAAAAIUiagIAAAAAhSJqAgAAAACFImoCAAAAAIUiagIAAAAAhSJqAgAAAACFImoCAAAAAIUiagIAAAAAhSJqAgAAAACFImoCAAAAAIUiagIAAAAAhSJqAgAAAACFImoCAAAAAIUiagIAAAAAhSJqAgAAAACFImoCAAAAAIUiagIAAAAAhdKi0gMAABRF1ZaXVHoEAAAgjtQEAAAAAApG1AQAAAAACkXUBAAAAAAKRdQEAAAAAApF1AQAAAAACkXUBAAAAAAKRdQEAAAAAApF1AQAAAAACkXUBAAAAAAKRdQEAAAAAApF1AQAAAAACkXUBAAAAAAKRdQEAAAAAApF1AQAAAAACkXUBAAAAAAKRdQEAAAAAApF1AQAAAAACkXUBAAAAAAKRdQEAAAAAApF1AQAAAAACkXUBAAAAAAKRdQEAAAAAApF1AQAAAAACkXUBAAAAAAKRdQEAAAAAApF1AQAAAAACkXUBAAAAAAKRdQEAAAAAApF1AQAAAAACkXUBAAAAAAKRdQEAAAAAApF1AQAAAAACkXUBAAAAAAKRdQEAAAAAApF1AQAAAAACkXUBAAAAAAKRdQEAAAAAApF1AQAAAAACqVFpQcAAAAA4MNRteUllR6BD6g0+4JKj7BBcKQmAAAAAFAooiYAAAAAUChOPwcAAOBD49TXYnPaK7ChcKQmAAAAAFAooiYAAAAAUCiiJgAAAABQKKImAAAAAFAooiYAAAAAUCiiJgAAAABQKKImAAAAAFAooiYAAAAAUCiiJgAAAABQKKImAAAAAFAooiYAAAAAUCiiJgAAAABQKKImAAAAAFAoFY2al156afbaa6+0bds2HTp0yMCBAzNz5sxGa954440MGTIk7dq1yyc+8YkceeSRmT9/fqM1s2fPzoABA7LxxhunQ4cOOeuss/Lmm282WnP//fdn9913T8uWLbPttttm7Nixq81z/fXXZ6uttkqrVq3Sq1evPP744+v8OwMAAAAAH0xFo+aUKVMyZMiQPProo5k4cWJWrFiRfv36ZenSpeU1p59+en7zm9/k9ttvz5QpUzJnzpx84QtfKO9fuXJlBgwYkOXLl+eRRx7Jj3/844wdOzYjRowor5k1a1YGDBiQAw44INOnT8+wYcPy1a9+Nffee295za233prhw4fnwgsvzFNPPZVdd901/fv3z6uvvvrh/BgAAAAAwPtSVSqVSpUeYpUFCxakQ4cOmTJlSvbff//U1dWlffv2GTduXP7jP/4jSfLcc89lp512ytSpU7P33nvnnnvuySGHHJI5c+akY8eOSZJRo0blnHPOyYIFC1JdXZ1zzjknd999d2bMmFH+rKOPPjqLFi3KhAkTkiS9evXKXnvtleuuuy5J0tDQkK5du+Yb3/hGzj333Pecvb6+PrW1tamrq0tNTc26/mkAgA1A1ZaXVHoEAKio0uwLKj0CH5D/PlN8H+X/HK5NX9ugrqlZV1eXJNlss82SJNOmTcuKFSvSt2/f8podd9wxW265ZaZOnZokmTp1anbZZZdy0EyS/v37p76+Ps8++2x5zVvfY9WaVe+xfPnyTJs2rdGaZs2apW/fvuU1b7ds2bLU19c3egAAAAAA698GEzUbGhoybNiw7LvvvunZs2eSZN68eamurs4mm2zSaG3Hjh0zb9688pq3Bs1V+1fte7c19fX1+de//pV//OMfWbly5RrXrHqPt7v00ktTW1tbfnTt2rVpXxwAAAAAWCsbTNQcMmRIZsyYkZ///OeVHuV9Oe+881JXV1d+vPzyy5UeCQAAAAA+FlpUeoAkGTp0aMaPH58HHnggW2yxRXl7p06dsnz58ixatKjR0Zrz589Pp06dymvefpfyVXdHf+uat98xff78+ampqUnr1q3TvHnzNG/efI1rVr3H27Vs2TItW7Zs2hcGAAAAAJqsokdqlkqlDB06NHfeeWcmT56c7t27N9q/xx57ZKONNsqkSZPK22bOnJnZs2end+/eSZLevXvnj3/8Y6O7lE+cODE1NTXp0aNHec1b32PVmlXvUV1dnT322KPRmoaGhkyaNKm8BgAAAADYMFT0SM0hQ4Zk3Lhx+dWvfpW2bduWr19ZW1ub1q1bp7a2NoMHD87w4cOz2WabpaamJt/4xjfSu3fv7L333kmSfv36pUePHvnKV76SkSNHZt68eTn//PMzZMiQ8pGUp556aq677rqcffbZOemkkzJ58uTcdtttufvuu8uzDB8+PMcff3z23HPPfOYzn8nVV1+dpUuX5sQTT/zwfxgAAAAA4B1VNGreeOONSZLPfvazjbbffPPNOeGEE5Ik3//+99OsWbMceeSRWbZsWfr3758bbrihvLZ58+YZP358vv71r6d3795p06ZNjj/++Hz7298ur+nevXvuvvvunH766bnmmmuyxRZb5Ec/+lH69+9fXnPUUUdlwYIFGTFiRObNm5fddtstEyZMWO3mQQAAAABAZVWVSqVSpYf4KKivr09tbW3q6upSU1NT6XEAgPWgastLKj0CAFRUafYFlR6BD8h/nym+j/J/Dtemr20wdz8HAAAAAHg/RE0AAAAAoFBETQAAAACgUERNAAAAAKBQRE0AAAAAoFBETQAAAACgUERNAAAAAKBQRE0AAAAAoFBETQAAAACgUERNAAAAAKBQRE0AAAAAoFBETQAAAACgUERNAAAAAKBQRE0AAAAAoFBETQAAAACgUERNAAAAAKBQRE0AAAAAoFBETQAAAACgUERNAAAAAKBQRE0AAAAAoFBETQAAAACgUERNAAAAAKBQRE0AAAAAoFBETQAAAACgUERNAAAAAKBQRE0AAAAAoFBETQAAAACgUERNAAAAAKBQRE0AAAAAoFBETQAAAACgUERNAAAAAKBQRE0AAAAAoFBETQAAAACgUERNAAAAAKBQRE0AAAAAoFBETQAAAACgUERNAAAAAKBQRE0AAAAAoFBaVHoAAAAAoBiqtryk0iMAJHGkJgAAAABQMKImAAAAAFAooiYAAAAAUCiiJgAAAABQKKImAAAAAFAooiYAAAAAUCiiJgAAAABQKKImAAAAAFAooiYAAAAAUCiiJgAAAABQKKImAAAAAFAooiYAAAAAUCiiJgAAAABQKKImAAAAAFAooiYAAAAAUCiiJgAAAABQKKImAAAAAFAooiYAAAAAUCiiJgAAAABQKKImAAAAAFAooiYAAAAAUCiiJgAAAABQKKImAAAAAFAooiYAAAAAUCiiJgAAAABQKKImAAAAAFAooiYAAAAAUCiiJgAAAABQKKImAAAAAFAooiYAAAAAUCiiJgAAAABQKKImAAAAAFAooiYAAAAAUCiiJgAAAABQKKImAAAAAFAooiYAAAAAUCiiJgAAAABQKKImAAAAAFAooiYAAAAAUCiiJgAAAABQKKImAAAAAFAooiYAAAAAUCiiJgAAAABQKKImAAAAAFAooiYAAAAAUCiiJgAAAABQKKImAAAAAFAooiYAAAAAUCiiJgAAAABQKKImAAAAAFAooiYAAAAAUCiiJgAAAABQKKImAAAAAFAooiYAAAAAUCiiJgAAAABQKKImAAAAAFAooiYAAAAAUCiiJgAAAABQKKImAAAAAFAooiYAAAAAUCiiJgAAAABQKKImAAAAAFAooiYAAAAAUCiiJgAAAABQKBWNmg888EAOPfTQdOnSJVVVVbnrrrsa7T/hhBNSVVXV6HHQQQc1WrNw4cIce+yxqampySabbJLBgwdnyZIljdY888wz6dOnT1q1apWuXbtm5MiRq81y++23Z8cdd0yrVq2yyy675Le//e06/74AAAAAwAdX0ai5dOnS7Lrrrrn++uvfcc1BBx2UuXPnlh8/+9nPGu0/9thj8+yzz2bixIkZP358HnjggZxyyinl/fX19enXr1+6deuWadOm5YorrshFF12U0aNHl9c88sgjOeaYYzJ48OA8/fTTGThwYAYOHJgZM2as+y8NAAAAAHwgVaVSqVTpIZKkqqoqd955ZwYOHFjedsIJJ2TRokWrHcG5yp///Of06NEjTzzxRPbcc88kyYQJE3LwwQfnlVdeSZcuXXLjjTfmW9/6VubNm5fq6uokybnnnpu77rorzz33XJLkqKOOytKlSzN+/Pjye++9997ZbbfdMmrUqPc1f319fWpra1NXV5eampom/AIAwIauastLKj0CAAAfc6XZF1R6hPVmbfraBn9Nzfvvvz8dOnTIDjvskK9//et57bXXyvumTp2aTTbZpBw0k6Rv375p1qxZHnvssfKa/fffvxw0k6R///6ZOXNmXn/99fKavn37Nvrc/v37Z+rUqe8417Jly1JfX9/oAQAAAACsf02Kmi+++OK6nmONDjrooPzkJz/JpEmTcvnll2fKlCn5/Oc/n5UrVyZJ5s2blw4dOjR6TYsWLbLZZptl3rx55TUdO3ZstGbV8/das2r/mlx66aWpra0tP7p27frBviwAAAAA8L40KWpuu+22OeCAA/LTn/40b7zxxrqeqezoo4/OYYcdll122SUDBw7M+PHj88QTT+T+++9fb5/5fp133nmpq6srP15++eVKjwQAAAAAHwtNippPPfVUPvWpT2X48OHp1KlTvva1r+Xxxx9f17OtZuutt87mm2+ev/71r0mSTp065dVXX2205s0338zChQvTqVOn8pr58+c3WrPq+XutWbV/TVq2bJmamppGDwAAAABg/WtS1Nxtt91yzTXXZM6cObnpppsyd+7c7LfffunZs2euuuqqLFiwYF3PmSR55ZVX8tprr6Vz585Jkt69e2fRokWZNm1aec3kyZPT0NCQXr16ldc88MADWbFiRXnNxIkTs8MOO2TTTTctr5k0aVKjz5o4cWJ69+69Xr4HAAAAANB0H+hGQS1atMgXvvCF3H777bn88svz17/+NWeeeWa6du2a4447LnPnzn3X1y9ZsiTTp0/P9OnTkySzZs3K9OnTM3v27CxZsiRnnXVWHn300bz00kuZNGlSDj/88Gy77bbp379/kmSnnXbKQQcdlJNPPjmPP/54Hn744QwdOjRHH310unTpkiT58pe/nOrq6gwePDjPPvtsbr311lxzzTUZPnx4eY7TTjstEyZMyJVXXpnnnnsuF110UZ588skMHTr0g/w8AAAAAMB68IGi5pNPPpn//M//TOfOnXPVVVflzDPP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4/L2o446KhMmTFhnwwEAAAAAvF2TbhT0u9/9Lvfee2+22GKLRtu32267/O1vf1sngwEAAAAArEmTjtRcunRpoyM0V1m4cGFatmz5gYcCAAAAAHgnTYqaffr0yU9+8pPy86qqqjQ0NGTkyJE54IAD1tlwAAAAAABv16TTz0eOHJkDDzwwTz75ZJYvX56zzz47zz77bBYuXJiHH354Xc8IAAAAAFDWpCM1e/bsmb/85S/Zb7/9cvjhh2fp0qX5whe+kKeffjrbbLPNup4RAAAAAKBsrY/UXLFiRQ466KCMGjUq3/rWt9bHTAAAAAAA72itj9TcaKON8swzz6yPWQAAAAAA3lOTTj8fNGhQxowZs65nAQAAAAB4T026UdCbb76Zm266Kb///e+zxx57pE2bNo32X3XVVetkOAAAAACAt1urqPniiy9mq622yowZM7L77rsnSf7yl780WlNVVbXupgMAAAAAeJu1iprbbbdd5s6dm/vuuy9JctRRR+Xaa69Nx44d18twAAAAAABvt1bX1CyVSo2e33PPPVm6dOk6HQgAAAAA4N006UZBq7w9cgIAAAAArG9rFTWrqqpWu2ama2gCAAAAAB+mtbqmZqlUygknnJCWLVsmSd54442ceuqpq939/I477lh3EwIAAAAAvMVaRc3jjz++0fNBgwat02EAAAAAAN7LWkXNm2++eX3NAQAAAADwvnygGwUBAAAAAHzYRE0AAAAAoFBETQAAAACgUERNAAAAAKBQRE0AAAAAoFBETQAAAACgUERNAAAAAKBQRE0AAAAAoFBETQAAAACgUERNAAAAAKBQRE0AAAAAoFBETQAAAACgUERNAAAAAKBQRE0AAAAAoFBETQAAAACgUERNAAAAAKBQRE0AAAAAoFBETQAAAACgUERNAAAAAKBQRE0AAAAAoFBETQAAAACgUERNAAAAAKBQRE0AAAAAoFBETQAAAACgUERNAAAAAKBQRE0AAAAAoFBaVHoAAPg4qdrykkqPAAAAUHiO1AQAAAAACkXUBAAAAAAKRdQEAAAAAApF1AQAAAAACkXUBAAAAAAKRdQEAAAAAApF1AQAAAAACkXUBAAAAAAKRdQEAAAAAApF1AQAAAAACkXUBAAAAAAKpaJR84EHHsihhx6aLl26pKqqKnfddVej/aVSKSNGjEjnzp3TunXr9O3bN88//3yjNQsXLsyxxx6bmpqabLLJJhk8eHCWLFnSaM0zzzyTPn36pFWrVunatWtGjhy52iy33357dtxxx7Rq1Sq77LJLfvvb367z7wsAAAAAfHAVjZpLly7Nrrvumuuvv36N+0eOHJlrr702o0aNymOPPZY2bdqkf//+eeONN8prjj322Dz77LOZOHFixo8fnwceeCCnnHJKeX99fX369euXbt26Zdq0abniiity0UUXZfTo0eU1jzzySI455pgMHjw4Tz/9dAYOHJiBAwdmxowZ6+/LAwAAAABNUlUqlUqVHiJJqqqqcuedd2bgwIFJ/n2UZpcuXXLGGWfkzDPPTJLU1dWlY8eOGTt2bI4++uj8+c9/To8ePfLEE09kzz33TJJMmDAhBx98cF555ZV06dIlN954Y771rW9l3rx5qa6uTpKce+65ueuuu/Lcc88lSY466qgsXbo048ePL8+z9957Z7fddsuoUaPe1/z19fWpra1NXV1dampq1tXPAsBHTNWWl1R6BAAAoMBKsy+o9Ajrzdr0tQ32mpqzZs3KvHnz0rdv3/K22tra9OrVK1OnTk2STJ06NZtsskk5aCZJ375906xZszz22GPlNfvvv385aCZJ//79M3PmzLz++uvlNW/9nFVrVn0OAAAAALDhaFHpAd7JvHnzkiQdO3ZstL1jx47lffPmzUuHDh0a7W/RokU222yzRmu6d+++2nus2rfppptm3rx57/o5a7Js2bIsW7as/Ly+vn5tvh4AAAAA0EQb7JGaG7pLL700tbW15UfXrl0rPRIAAAAAfCxssFGzU6dOSZL58+c32j5//vzyvk6dOuXVV19ttP/NN9/MwoULG61Z03u89TPeac2q/Wty3nnnpa6urvx4+eWX1/YrAgAAAABNsMFGze7du6dTp06ZNGlSeVt9fX0ee+yx9O7dO0nSu3fvLFq0KNOmTSuvmTx5choaGtKrV6/ymgceeCArVqwor5k4cWJ22GGHbLrppuU1b/2cVWtWfc6atGzZMjU1NY0eAAAAAMD6V9GouWTJkkyfPj3Tp09P8u+bA02fPj2zZ89OVVVVhg0blu985zv59a9/nT/+8Y857rjj0qVLl/Id0nfaaaccdNBBOfnkk/P444/n4YcfztChQ3P00UenS5cuSZIvf/nLqa6uzuDBg/Pss8/m1ltvzTXXXJPhw4eX5zjttNMyYcKEXHnllXnuuedy0UUX5cknn8zQoUM/7J8EAAAAAHgPFb1R0JNPPpkDDjig/HxVaDz++OMzduzYnH322Vm6dGlOOeWULFq0KPvtt18mTJiQVq1alV9zyy23ZOjQoTnwwAPTrFmzHHnkkbn22mvL+2tra/O73/0uQ4YMyR577JHNN988I0aMyCmnnFJes88++2TcuHE5//zz81//9V/Zbrvtctddd6Vnz54fwq8AAAAAAKyNqlKpVKr0EB8F9fX1qa2tTV1dnVPRAXhHVVteUukRAACAAivNvqDSI6w3a9PXNthragIAAAAArImoCQAAAAAUiqgJAAAAABSKqAkAAAAAFIqoCQAAAAAUiqgJAAAAABSKqAkAAAAAFIqoCQAAAAAUiqgJAAAAABSKqAkAAAAAFIqoCQAAAAAUiqgJAAAAABSKqAkAAAAAFIqoCQAAAAAUiqgJAAAAABSKqAkAAAAAFIqoCQAAAAAUiqgJAAAAABSKqAkAAAAAFIqoCQAAAAAUiqgJAAAAABSKqAkAAAAAFIqoCQAAAAAUiqgJAAAAABSKqAkAAAAAFIqoCQAAAAAUiqgJAAAAABSKqAkAAAAAFIqoCQAAAAAUiqgJAAAAABSKqAkAAAAAFIqoCQAAAAAUiqgJAAAAABSKqAkAAAAAFIqoCQAAAAAUiqgJAAAAABSKqAkAAAAAFIqoCQAAAAAUiqgJAAAAABSKqAkAAAAAFIqoCQAAAAAUiqgJAAAAABSKqAkAAAAAFIqoCQAAAAAUiqgJAAAAABSKqAkAAAAAFIqoCQAAAAAUiqgJAAAAABSKqAkAAAAAFIqoCQAAAAAUiqgJAAAAABSKqAkAAAAAFIqoCQAAAAAUiqgJAAAAABSKqAkAAAAAFIqoCQAAAAAUiqgJAAAAABSKqAkAAAAAFIqoCQAAAAAUiqgJAAAAABSKqAkAAAAAFIqoCQAAAAAUiqgJAAAAABSKqAkAAAAAFIqoCQAAAAAUiqgJAAAAABSKqAkAAAAAFIqoCQAAAAAUiqgJAAAAABSKqAkAAAAAFIqoCQAAAAAUiqgJAAAAABSKqAkAAAAAFIqoCQAAAAAUiqgJAAAAABSKqAkAAAAAFIqoCQAAAAAUiqgJAAAAABSKqAkAAAAAFIqoCQAAAAAUiqgJAAAAABSKqAkAAAAAFIqoCQAAAAAUiqgJAAAAABSKqAkAAAAAFIqoCQAAAAAUiqgJAAAAABSKqAkAAAAAFIqoCQAAAAAUiqgJAAAAABSKqAkAAAAAFIqoCQAAAAAUiqgJAAAAABSKqAkAAAAAFIqoCQAAAAAUiqgJAAAAABSKqAkAAAAAFIqoCQAAAAAUiqgJAAAAABSKqAkAAAAAFIqoCQAAAAAUiqgJAAAAABSKqAkAAAAAFMoGHTUvuuiiVFVVNXrsuOOO5f1vvPFGhgwZknbt2uUTn/hEjjzyyMyfP7/Re8yePTsDBgzIxhtvnA4dOuSss87Km2++2WjN/fffn9133z0tW7bMtttum7Fjx34YXw8AAAAAaIINOmomyc4775y5c+eWHw899FB53+mnn57f/OY3uf322zNlypTMmTMnX/jCF8r7V65cmQEDBmT58uV55JFH8uMf/zhjx47NiBEjymtmzZqVAQMG5IADDsj06dMzbNiwfPWrX8299977oX5PAAAAAOD9aVHpAd5LixYt0qlTp9W219XVZcyYMRk3blw+97nPJUluvvnm7LTTTnn00Uez995753e/+13+9Kc/5fe//306duyY3XbbLZdccknOOeecXHTRRamurs6oUaPSvXv3XHnllUmSnXbaKQ899FC+//3vp3///h/qdwUAAAAA3tsGf6Tm888/ny5dumTrrbfOsccem9mzZydJpk2blhUrVqRv377ltTvuuGO23HLLTJ06NUkyderU7LLLLunYsWN5Tf/+/VNfX59nn322vOat77Fqzar3AAAAAAA2LBv0kZq9evXK2LFjs8MOO2Tu3Lm5+OKL06dPn8yYMSPz5s1LdXV1Ntlkk0av6dixY+bNm5ckmTdvXqOguWr/qn3vtqa+vj7/+te/0rp16zXOtmzZsixbtqz8vL6+/gN9VwAAAADg/dmgo+bnP//58j9/6lOfSq9evdKtW7fcdttt7xgbPyyXXnppLr744orOAAAAAAAfRxv86edvtckmm2T77bfPX//613Tq1CnLly/PokWLGq2ZP39++RqcnTp1Wu1u6Kuev9eampqadw2n5513Xurq6sqPl19++YN+PQAAAADgfShU1FyyZEleeOGFdO7cOXvssUc22mijTJo0qbx/5syZmT17dnr37p0k6d27d/74xz/m1VdfLa+ZOHFiampq0qNHj/Kat77HqjWr3uOdtGzZMjU1NY0eAAAAAMD6t0FHzTPPPDNTpkzJSy+9lEceeSRHHHFEmjdvnmOOOSa1tbUZPHhwhg8fnvvuuy/Tpk3LiSeemN69e2fvvfdOkvTr1y89evTIV77ylfzhD3/Ivffem/PPPz9DhgxJy5YtkySnnnpqXnzxxZx99tl57rnncsMNN+S2227L6aefXsmvDgAAAAC8gw36mpqvvPJKjjnmmLz22mtp37599ttvvzz66KNp3759kuT73/9+mjVrliOPPDLLli1L//79c8MNN5Rf37x584wfPz5f//rX07t377Rp0ybHH398vv3tb5fXdO/ePXfffXdOP/30XHPNNdliiy3yox/9KP379//Qvy8AAAAA8N6qSqVSqdJDfBTU19entrY2dXV1TkUH4B1VbXlJpUcAAAAKrDT7gkqPsN6sTV/boE8/BwAAAAB4O1ETAAAAACgUURMAAAAAKBRREwAAAAAoFFETAAAAACgUURMAAAAAKBRREwAAAAAoFFETAAAAACgUURMAAAAAKBRREwAAAAAoFFETAAAAACgUURMAAAAAKBRREwAAAAAoFFETAAAAACgUURMAAAAAKBRREwAAAAAoFFETAAAAACgUURMAAAAAKBRREwAAAAAoFFETAAAAACgUURMAAAAAKBRREwAAAAAoFFETAAAAACgUURMAAAAAKBRREwAAAAAoFFETAAAAACgUURMAAAAAKBRREwAAAAAoFFETAAAAACgUURMAAAAAKBRREwAAAAAoFFETAAAAACgUURMAAAAAKBRREwAAAAAoFFETAAAAACgUURMAAAAAKBRREwAAAAAoFFETAAAAACgUURMAAAAAKBRREwAAAAAoFFETAAAAACgUURMAAAAAKBRREwAAAAAoFFETAAAAACgUURMAAAAAKBRREwAAAAAoFFETAAAAACgUURMAAAAAKBRREwAAAAAoFFETAAAAACgUURMAAAAAKBRREwAAAAAoFFETAAAAACgUURMAAAAAKBRREwAAAAAoFFETAAAAACgUURMAAAAAKBRREwAAAAAoFFETAAAAACgUURMAAAAAKBRREwAAAAAoFFETAAAAACgUURMAAAAAKBRREwAAAAAoFFETAAAAACgUURMAAAAAKBRREwAAAAAoFFETAAAAACgUURMAAAAAKJQWlR4A+PBUbXlJpUfgAyrNvqDSIwAAAEDFOVITAAAAACgUURMAAAAAKBRREwAAAAAoFFETAAAAACgUURMAAAAAKBRREwAAAAAoFFETAAAAACgUURMAAAAAKBRREwAAAAAoFFETAAAAACgUURMAAAAAKBRREwAAAAAoFFETAAAAACgUURMAAAAAKBRREwAAAAAoFFETAAAAACiUFpUeAID3r2rLSyo9AgAAAFScIzUBAAAAgEIRNQEAAACAQhE1AQAAAIBCETUBAAAAgEIRNQEAAACAQhE1AQAAAIBCETUBAAAAgEIRNQEAAACAQhE1AQAAAIBCETUBAAAAgEIRNQEAAACAQhE1AQAAAIBCETUBAAAAgEJpUekBKJaqLS+p9AgAAAAAfMw5UhMAAAAAKBRREwAAAAAoFFHzba6//vpstdVWadWqVXr16pXHH3+80iMBAAAAAG8har7FrbfemuHDh+fCCy/MU089lV133TX9+/fPq6++WunRAAAAAID/Jmq+xVVXXZWTTz45J554Ynr06JFRo0Zl4403zk033VTp0QAAAACA/+bu5/9t+fLlmTZtWs4777zytmbNmqVv376ZOnXqauuXLVuWZcuWlZ/X1dUlSerr69f/sJXU8EalJwAAAAD42Poot6dV361UKr3nWlHzv/3jH//IypUr07Fjx0bbO3bsmOeee2619Zdeemkuvvji1bZ37dp1vc0IAAAAwMdbbe33Kj3Cerd48eLU1ta+6xpRs4nOO++8DB8+vPy8oaEhCxcuTLt27VJVVVXByT4a6uvr07Vr17z88supqamp9DhAQflbAqwL/pYA64K/JcC68FH/W1IqlbJ48eJ06dLlPdeKmv9t8803T/PmzTN//vxG2+fPn59OnTqttr5ly5Zp2bJlo22bbLLJ+hzxY6mmpuYj+R9S4MPlbwmwLvhbAqwL/pYA68JH+W/Jex2huYobBf236urq7LHHHpk0aVJ5W0NDQyZNmpTevXtXcDIAAAAA4K0cqfkWw4cPz/HHH58999wzn/nMZ3L11Vdn6dKlOfHEEys9GgAAAADw30TNtzjqqKOyYMGCjBgxIvPmzctuu+2WCRMmrHbzINa/li1b5sILL1ztFH+AteFvCbAu+FsCrAv+lgDrgr8l/6Oq9H7ukQ4AAAAAsIFwTU0AAAAAoFBETQAAAACgUERNAAAAAKBQRE0AAAAAoFBETTYol156afbaa6+0bds2HTp0yMCBAzNz5sxKjwUU2GWXXZaqqqoMGzas0qMABfP3v/89gwYNSrt27dK6devssssuefLJJys9FlAgK1euzAUXXJDu3bundevW2WabbXLJJZfE/XqB9/LAAw/k0EMPTZcuXVJVVZW77rqr0f5SqZQRI0akc+fOad26dfr27Zvnn3++MsNWiKjJBmXKlCkZMmRIHn300UycODErVqxIv379snTp0kqPBhTQE088kR/84Af51Kc+VelRgIJ5/fXXs++++2ajjTbKPffckz/96U+58sors+mmm1Z6NKBALr/88tx444257rrr8uc//zmXX355Ro4cmf/7f/9vpUcDNnBLly7Nrrvumuuvv36N+0eOHJlrr702o0aNymOPPZY2bdqkf//+eeONNz7kSSunquT/RcQGbMGCBenQoUOmTJmS/fffv9LjAAWyZMmS7L777rnhhhvyne98J7vttluuvvrqSo8FFMS5556bhx9+OA8++GClRwEK7JBDDknHjh0zZsyY8rYjjzwyrVu3zk9/+tMKTgYUSVVVVe68884MHDgwyb+P0uzSpUvOOOOMnHnmmUmSurq6dOzYMWPHjs3RRx9dwWk/PI7UZINWV1eXJNlss80qPAlQNEOGDMmAAQPSt2/fSo8CFNCvf/3r7LnnnvniF7+YDh065NOf/nR++MMfVnosoGD22WefTJo0KX/5y1+SJH/4wx/y0EMP5fOf/3yFJwOKbNasWZk3b16j/61TW1ubXr16ZerUqRWc7MPVotIDwDtpaGjIsGHDsu+++6Znz56VHgcokJ///Od56qmn8sQTT1R6FKCgXnzxxdx4440ZPnx4/uu//itPPPFEvvnNb6a6ujrHH398pccDCuLcc89NfX19dtxxxzRv3jwrV67Md7/73Rx77LGVHg0osHnz5iVJOnbs2Gh7x44dy/s+DkRNNlhDhgzJjBkz8tBDD1V6FKBAXn755Zx22mmZOHFiWrVqVelxgIJqaGjInnvume9973tJkk9/+tOZMWNGRo0aJWoC79ttt92WW265JePGjcvOO++c6dOnZ9iwYenSpYu/JQAfkNPP2SANHTo048ePz3333Zctttii0uMABTJt2rS8+uqr2X333dOiRYu0aNEiU6ZMybXXXpsWLVpk5cqVlR4RKIDOnTunR48ejbbttNNOmT17doUmAororLPOyrnnnpujjz46u+yyS77yla/k9NNPz6WXXlrp0YAC69SpU5Jk/vz5jbbPnz+/vO/jQNRkg1IqlTJ06NDceeedmTx5crp3717pkYCCOfDAA/PHP/4x06dPLz/23HPPHHvssZk+fXqaN29e6RGBAth3330zc+bMRtv+8pe/pFu3bhWaCCiif/7zn2nWrPH/7G7evHkaGhoqNBHwUdC9e/d06tQpkyZNKm+rr6/PY489lt69e1dwsg+X08/ZoAwZMiTjxo3Lr371q7Rt27Z8LYja2tq0bt26wtMBRdC2bdvVrsPbpk2btGvXzvV5gfft9NNPzz777JPvfe97+dKXvpTHH388o0ePzujRoys9GlAghx56aL773e9myy23zM4775ynn346V111VU466aRKjwZs4JYsWZK//vWv5eezZs3K9OnTs9lmm2XLLbfMsGHD8p3vfCfbbbddunfvngsuuCBdunQp3yH946CqVCqVKj0ErFJVVbXG7TfffHNOOOGED3cY4CPjs5/9bHbbbbdcffXVlR4FKJDx48fnvPPOy/PPP5/u3btn+PDhOfnkkys9FlAgixcvzgUXXJA777wzr776arp06ZJjjjkmI0aMSHV1daXHAzZg999/fw444IDVth9//PEZO3ZsSqVSLrzwwowePTqLFi3KfvvtlxtuuCHbb799BaatDFETAAAAACgU19QEAAAAAApF1AQAAAAACkXUBAAAAAAKRdQEAAAAAApF1AQAAAAACkXUBAAAAAAKRdQEAAAAAApF1AQAAAAACkXUBAAAAAAKRdQEAAAAAApF1AQAAAAACkXUBAAAAAAK5f8D8Rt1jTj/kQcAAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "nvd['BaseScore'] = pd.to_numeric(nvd['BaseScore']);\n", + "nvd['BaseScore'] = nvd['BaseScore'].replace(0, np.NaN);\n", + "nvd['BaseScore'].plot(kind=\"hist\", title='CVSS Breakdown', color=\"#001d82\", figsize=(16, 8)); " + ] + }, + { + "cell_type": "markdown", + "id": "31e34b59-d5ae-4bd5-b497-9e448cc1c7e1", + "metadata": {}, + "source": [ + "## CVSS Count" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "c6d18498-a8bb-4a2c-86b3-88d7a0f1e35a", + "metadata": { + "execution": { + "iopub.execute_input": "2024-06-16T12:26:59.345887Z", + "iopub.status.busy": "2024-06-16T12:26:59.345655Z", + "iopub.status.idle": "2024-06-16T12:26:59.357149Z", + "shell.execute_reply": "2024-06-16T12:26:59.356610Z" + }, + "tags": [ + "remove-input" + ] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "(0.999, 2.0] 18\n", + "(2.0, 3.0] 601\n", + "(3.0, 4.0] 2106\n", + "(4.0, 5.0] 10957\n", + "(8.0, 9.0] 20097\n", + "(9.0, 10.0] 22459\n", + "(5.0, 6.0] 24619\n", + "(6.0, 7.0] 25927\n", + "(7.0, 8.0] 40860\n", + "Name: count, dtype: int64" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "nvd['BaseScore'].value_counts(bins = [1,2,3,4,5,6,7,8,9,10]).sort_values()" + ] + }, + { + "cell_type": "markdown", + "id": "5cc77647-3836-4b8f-9925-0619c323097d", + "metadata": {}, + "source": [ + "## Vector Count" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "2df22bea-1428-47c6-b9aa-d9f9370490e9", + "metadata": { + "execution": { + "iopub.execute_input": "2024-06-16T12:26:59.359311Z", + "iopub.status.busy": "2024-06-16T12:26:59.359134Z", + "iopub.status.idle": "2024-06-16T12:26:59.393960Z", + "shell.execute_reply": "2024-06-16T12:26:59.393517Z" + }, + "tags": [ + "remove-input" + ] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "AttackVector\n", + "NETWORK 108078\n", + "Missing_Data 85350\n", + "LOCAL 34998\n", + "ADJACENT_NETWORK 3072\n", + "PHYSICAL 1496\n", + "Name: count, dtype: int64" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "nvd['AttackVector'].value_counts()" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "49dd1629-708b-42a3-8716-59ff9fc381b3", + "metadata": { + "execution": { + "iopub.execute_input": "2024-06-16T12:26:59.395937Z", + "iopub.status.busy": "2024-06-16T12:26:59.395750Z", + "iopub.status.idle": "2024-06-16T12:26:59.425075Z", + "shell.execute_reply": "2024-06-16T12:26:59.424603Z" + }, + "tags": [ + "remove-input" + ] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "AttackVector\n", + "NETWORK 0.46\n", + "Missing_Data 0.37\n", + "LOCAL 0.15\n", + "ADJACENT_NETWORK 0.01\n", + "PHYSICAL 0.01\n", + "Name: proportion, dtype: float64" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "nvd['AttackVector'].value_counts(normalize=True).round(2)" + ] + }, + { + "cell_type": "markdown", + "id": "6318a0b7-6796-45d6-95eb-923f4b7529f1", + "metadata": {}, + "source": [ + "## Yearly Breakdown" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "a308f41c-a8ca-47d5-a031-68ed3b741fad", + "metadata": { + "execution": { + "iopub.execute_input": "2024-06-16T12:26:59.426977Z", + "iopub.status.busy": "2024-06-16T12:26:59.426802Z", + "iopub.status.idle": "2024-06-16T12:27:00.373442Z", + "shell.execute_reply": "2024-06-16T12:27:00.372909Z" + }, + "tags": [ + "remove-input" + ] + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
YearAttackVectorAttackVectorCount
2023NETWORK21738
2023LOCAL6379
2023Missing_Data2125
2023ADJACENT_NETWORK490
2023PHYSICAL217
2022NETWORK18106
2022LOCAL6174
2022Missing_Data1459
2022ADJACENT_NETWORK450
2022PHYSICAL242
2021NETWORK14041
2021LOCAL5248
2021Missing_Data1908
2021ADJACENT_NETWORK559
2021PHYSICAL194
2020NETWORK12867
2020LOCAL4457
2020Missing_Data900
2020ADJACENT_NETWORK706
2020PHYSICAL292
2019NETWORK13325
2019LOCAL3462
2019Missing_Data1637
2019ADJACENT_NETWORK318
2019PHYSICAL196
2018NETWORK12936
2018LOCAL3144
2018Missing_Data1647
2018ADJACENT_NETWORK270
2018PHYSICAL157
2017NETWORK10097
2017LOCAL4196
2017Missing_Data3472
2017ADJACENT_NETWORK207
2017PHYSICAL141
2016NETWORK4390
2016LOCAL1729
2016Missing_Data286
2016ADJACENT_NETWORK59
2016PHYSICAL53
2015Missing_Data6421
2015NETWORK149
2015LOCAL18
2015ADJACENT_NETWORK7
2014Missing_Data7942
2014NETWORK41
2014LOCAL22
2014PHYSICAL2
2014ADJACENT_NETWORK1
2013Missing_Data5299
2013NETWORK19
2013LOCAL5
2013ADJACENT_NETWORK1
2012Missing_Data5288
2012NETWORK39
2012LOCAL22
2012ADJACENT_NETWORK2
2011Missing_Data4145
2011NETWORK20
2011LOCAL5
2011PHYSICAL1
2011ADJACENT_NETWORK1
2010Missing_Data4589
2010NETWORK60
2010LOCAL18
2009Missing_Data5710
2009NETWORK38
2009LOCAL30
2008Missing_Data5609
2008NETWORK44
2008LOCAL11
2007Missing_Data6570
2007NETWORK16
2007LOCAL8
2007PHYSICAL1
2007ADJACENT_NETWORK1
2006Missing_Data6643
2006NETWORK12
2006LOCAL4
2005Missing_Data4957
2005NETWORK35
2005LOCAL18
2004Missing_Data2439
2004NETWORK28
2004LOCAL12
2003Missing_Data1532
2003NETWORK13
2003LOCAL3
2002Missing_Data2118
2002NETWORK33
2002LOCAL19
2001Missing_Data1644
2001NETWORK24
2001LOCAL11
2000Missing_Data1010
2000NETWORK7
2000LOCAL3
\n" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "nvd['Year'] = nvd['Published'].dt.strftime('%Y')\n", + "nvd2 = nvd[['Year', 'AttackVector']].copy()\n", + "av_df = nvd2.value_counts().to_frame('AttackVectorCount').reset_index()\n", + "av_df = av_df.sort_values(by=['Year', 'AttackVectorCount'] , ascending=[False, False])\n", + "av_df.style.hide()" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "deb09f97-2065-49e2-92a7-f9942735a908", + "metadata": { + "execution": { + "iopub.execute_input": "2024-06-16T12:27:00.375703Z", + "iopub.status.busy": "2024-06-16T12:27:00.375336Z", + "iopub.status.idle": "2024-06-16T12:27:00.611868Z", + "shell.execute_reply": "2024-06-16T12:27:00.611273Z" + }, + "tags": [ + "remove-input" + ] + }, + "outputs": [ + { + "data": { + "text/html": [ + " \n", + " " + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.plotly.v1+json": { + "config": { + "plotlyServerURL": "https://plot.ly" + }, + "data": [ + { + "hovertemplate": "AttackVector=NETWORK
Year=%{x}
AttackVectorCount=%{y}", + "legendgroup": "NETWORK", + "line": { + "color": "#636efa", + "dash": "solid" + }, + "marker": { + "symbol": "circle" + }, + "mode": "lines+markers", + "name": "NETWORK", + "orientation": "v", + "showlegend": true, + "type": "scatter", + "x": [ + "2023", + "2022", + "2021", + "2020", + "2019", + "2018", + "2017", + "2016", + "2015", + "2014", + "2013", + "2012", + "2011", + "2010", + "2009", + "2008", + "2007", + "2006", + "2005", + "2004", + "2003", + "2002", + "2001", + "2000" + ], + "xaxis": "x", + "y": [ + 21738, + 18106, + 14041, + 12867, + 13325, + 12936, + 10097, + 4390, + 149, + 41, + 19, + 39, + 20, + 60, + 38, + 44, + 16, + 12, + 35, + 28, + 13, + 33, + 24, + 7 + ], + "yaxis": "y" + }, + { + "hovertemplate": "AttackVector=LOCAL
Year=%{x}
AttackVectorCount=%{y}", + "legendgroup": "LOCAL", + "line": { + "color": "#EF553B", + "dash": "solid" + }, + "marker": { + "symbol": "circle" + }, + "mode": "lines+markers", + "name": "LOCAL", + "orientation": "v", + "showlegend": true, + "type": "scatter", + "x": [ + "2023", + "2022", + "2021", + "2020", + "2019", + "2018", + "2017", + "2016", + "2015", + "2014", + "2013", + "2012", + "2011", + "2010", + "2009", + "2008", + "2007", + "2006", + "2005", + "2004", + "2003", + "2002", + "2001", + "2000" + ], + "xaxis": "x", + "y": [ + 6379, + 6174, + 5248, + 4457, + 3462, + 3144, + 4196, + 1729, + 18, + 22, + 5, + 22, + 5, + 18, + 30, + 11, + 8, + 4, + 18, + 12, + 3, + 19, + 11, + 3 + ], + "yaxis": "y" + }, + { + "hovertemplate": "AttackVector=Missing_Data
Year=%{x}
AttackVectorCount=%{y}", + "legendgroup": "Missing_Data", + "line": { + "color": "#00cc96", + "dash": "solid" + }, + "marker": { + "symbol": "circle" + }, + "mode": "lines+markers", + "name": "Missing_Data", + "orientation": "v", + "showlegend": true, + "type": "scatter", + "x": [ + "2023", + "2022", + "2021", + "2020", + "2019", + "2018", + "2017", + "2016", + "2015", + "2014", + "2013", + "2012", + "2011", + "2010", + "2009", + "2008", + "2007", + "2006", + "2005", + "2004", + "2003", + "2002", + "2001", + "2000" + ], + "xaxis": "x", + "y": [ + 2125, + 1459, + 1908, + 900, + 1637, + 1647, + 3472, + 286, + 6421, + 7942, + 5299, + 5288, + 4145, + 4589, + 5710, + 5609, + 6570, + 6643, + 4957, + 2439, + 1532, + 2118, + 1644, + 1010 + ], + "yaxis": "y" + }, + { + "hovertemplate": "AttackVector=ADJACENT_NETWORK
Year=%{x}
AttackVectorCount=%{y}", + "legendgroup": "ADJACENT_NETWORK", + "line": { + "color": "#ab63fa", + "dash": "solid" + }, + "marker": { + "symbol": "circle" + }, + "mode": "lines+markers", + "name": "ADJACENT_NETWORK", + "orientation": "v", + "showlegend": true, + "type": "scatter", + "x": [ + "2023", + "2022", + "2021", + "2020", + "2019", + "2018", + "2017", + "2016", + "2015", + "2014", + "2013", + "2012", + "2011", + "2007" + ], + "xaxis": "x", + "y": [ + 490, + 450, + 559, + 706, + 318, + 270, + 207, + 59, + 7, + 1, + 1, + 2, + 1, + 1 + ], + "yaxis": "y" + }, + { + "hovertemplate": "AttackVector=PHYSICAL
Year=%{x}
AttackVectorCount=%{y}", + "legendgroup": "PHYSICAL", + "line": { + "color": "#FFA15A", + "dash": "solid" + }, + "marker": { + "symbol": "circle" + }, + "mode": "lines+markers", + "name": "PHYSICAL", + "orientation": "v", + "showlegend": true, + "type": "scatter", + "x": [ + "2023", + "2022", + "2021", + "2020", + "2019", + "2018", + "2017", + "2016", + "2014", + "2011", + "2007" + ], + "xaxis": "x", + "y": [ + 217, + 242, + 194, + 292, + 196, + 157, + 141, + 53, + 2, + 1, + 1 + ], + "yaxis": "y" + } + ], + "layout": { + "legend": { + "title": { + "text": "AttackVector" + }, + "tracegroupgap": 0 + }, + "margin": { + "t": 60 + }, + "template": { + "data": { + "bar": [ + { + "error_x": { + "color": "#2a3f5f" + }, + "error_y": { + "color": "#2a3f5f" + }, + "marker": { + "line": { + "color": "#E5ECF6", + "width": 0.5 + }, + "pattern": { + "fillmode": "overlay", + "size": 10, + "solidity": 0.2 + } + }, + "type": "bar" + } + ], + "barpolar": [ + { + "marker": { + "line": { + "color": "#E5ECF6", + "width": 0.5 + }, + "pattern": { + "fillmode": "overlay", + "size": 10, + "solidity": 0.2 + } + }, + "type": "barpolar" + } + ], + "carpet": [ + { + "aaxis": { + "endlinecolor": "#2a3f5f", + "gridcolor": "white", + "linecolor": "white", + "minorgridcolor": "white", + "startlinecolor": "#2a3f5f" + }, + "baxis": { + "endlinecolor": "#2a3f5f", + "gridcolor": "white", + "linecolor": "white", + "minorgridcolor": "white", + "startlinecolor": "#2a3f5f" + }, + "type": "carpet" + } + ], + "choropleth": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "type": "choropleth" + } + ], + "contour": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0.0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1.0, + "#f0f921" + ] + ], + "type": "contour" + } + ], + "contourcarpet": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "type": "contourcarpet" + } + ], + "heatmap": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0.0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1.0, + "#f0f921" + ] + ], + "type": "heatmap" + } + ], + "heatmapgl": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0.0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1.0, + "#f0f921" + ] + ], + "type": "heatmapgl" + } + ], + "histogram": [ + { + "marker": { + "pattern": { + "fillmode": "overlay", + "size": 10, + "solidity": 0.2 + } + }, + "type": "histogram" + } + ], + "histogram2d": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0.0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1.0, + "#f0f921" + ] + ], + "type": "histogram2d" + } + ], + "histogram2dcontour": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0.0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1.0, + "#f0f921" + ] + ], + "type": "histogram2dcontour" + } + ], + "mesh3d": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "type": "mesh3d" + } + ], + "parcoords": [ + { + "line": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "parcoords" + } + ], + "pie": [ + { + "automargin": true, + "type": "pie" + } + ], + "scatter": [ + { + "fillpattern": { + "fillmode": "overlay", + "size": 10, + "solidity": 0.2 + }, + "type": "scatter" + } + ], + "scatter3d": [ + { + "line": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scatter3d" + } + ], + "scattercarpet": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scattercarpet" + } + ], + "scattergeo": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scattergeo" + } + ], + "scattergl": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scattergl" + } + ], + "scattermapbox": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scattermapbox" + } + ], + "scatterpolar": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scatterpolar" + } + ], + "scatterpolargl": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scatterpolargl" + } + ], + "scatterternary": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scatterternary" + } + ], + "surface": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0.0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1.0, + "#f0f921" + ] + ], + "type": "surface" + } + ], + "table": [ + { + "cells": { + "fill": { + "color": "#EBF0F8" + }, + "line": { + "color": "white" + } + }, + "header": { + "fill": { + "color": "#C8D4E3" + }, + "line": { + "color": "white" + } + }, + "type": "table" + } + ] + }, + "layout": { + "annotationdefaults": { + "arrowcolor": "#2a3f5f", + "arrowhead": 0, + "arrowwidth": 1 + }, + "autotypenumbers": "strict", + "coloraxis": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "colorscale": { + "diverging": [ + [ + 0, + "#8e0152" + ], + [ + 0.1, + "#c51b7d" + ], + [ + 0.2, + "#de77ae" + ], + [ + 0.3, + "#f1b6da" + ], + [ + 0.4, + "#fde0ef" + ], + [ + 0.5, + "#f7f7f7" + ], + [ + 0.6, + "#e6f5d0" + ], + [ + 0.7, + "#b8e186" + ], + [ + 0.8, + "#7fbc41" + ], + [ + 0.9, + "#4d9221" + ], + [ + 1, + "#276419" + ] + ], + "sequential": [ + [ + 0.0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1.0, + "#f0f921" + ] + ], + "sequentialminus": [ + [ + 0.0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1.0, + "#f0f921" + ] + ] + }, + "colorway": [ + "#636efa", + "#EF553B", + "#00cc96", + "#ab63fa", + "#FFA15A", + "#19d3f3", + "#FF6692", + "#B6E880", + "#FF97FF", + "#FECB52" + ], + "font": { + "color": "#2a3f5f" + }, + "geo": { + "bgcolor": "white", + "lakecolor": "white", + "landcolor": "#E5ECF6", + "showlakes": true, + "showland": true, + "subunitcolor": "white" + }, + "hoverlabel": { + "align": "left" + }, + "hovermode": "closest", + "mapbox": { + "style": "light" + }, + "paper_bgcolor": "white", + "plot_bgcolor": "#E5ECF6", + "polar": { + "angularaxis": { + "gridcolor": "white", + "linecolor": "white", + "ticks": "" + }, + "bgcolor": "#E5ECF6", + "radialaxis": { + "gridcolor": "white", + "linecolor": "white", + "ticks": "" + } + }, + "scene": { + "xaxis": { + "backgroundcolor": "#E5ECF6", + "gridcolor": "white", + "gridwidth": 2, + "linecolor": "white", + "showbackground": true, + "ticks": "", + "zerolinecolor": "white" + }, + "yaxis": { + "backgroundcolor": "#E5ECF6", + "gridcolor": "white", + "gridwidth": 2, + "linecolor": "white", + "showbackground": true, + "ticks": "", + "zerolinecolor": "white" + }, + "zaxis": { + "backgroundcolor": "#E5ECF6", + "gridcolor": "white", + "gridwidth": 2, + "linecolor": "white", + "showbackground": true, + "ticks": "", + "zerolinecolor": "white" + } + }, + "shapedefaults": { + "line": { + "color": "#2a3f5f" + } + }, + "ternary": { + "aaxis": { + "gridcolor": "white", + "linecolor": "white", + "ticks": "" + }, + "baxis": { + "gridcolor": "white", + "linecolor": "white", + "ticks": "" + }, + "bgcolor": "#E5ECF6", + "caxis": { + "gridcolor": "white", + "linecolor": "white", + "ticks": "" + } + }, + "title": { + "x": 0.05 + }, + "xaxis": { + "automargin": true, + "gridcolor": "white", + "linecolor": "white", + "ticks": "", + "title": { + "standoff": 15 + }, + "zerolinecolor": "white", + "zerolinewidth": 2 + }, + "yaxis": { + "automargin": true, + "gridcolor": "white", + "linecolor": "white", + "ticks": "", + "title": { + "standoff": 15 + }, + "zerolinecolor": "white", + "zerolinewidth": 2 + } + } + }, + "xaxis": { + "anchor": "y", + "domain": [ + 0.0, + 1.0 + ], + "title": { + "text": "Year" + } + }, + "yaxis": { + "anchor": "x", + "domain": [ + 0.0, + 1.0 + ], + "title": { + "text": "AttackVectorCount" + } + } + } + }, + "text/html": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "\n", + "fig = px.line(av_df, x=\"Year\", y=\"AttackVectorCount\", color='AttackVector' , markers=True)\n", + "fig.show()" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.9" + }, + "vscode": { + "interpreter": { + "hash": "aee8b7b246df8f9039afb4144a1f6fd8d2ca17a180786b69acc140d282b71a49" + } + } + }, + "nbformat": 4, + "nbformat_minor": 5 +}