1 5imllabprog - Ipynb
1 5imllabprog - Ipynb
"nbformat": 4,
"nbformat_minor": 0,
"metadata": {
"colab": {
"provenance": []
},
"kernelspec": {
"name": "python3",
"display_name": "Python 3"
},
"language_info": {
"name": "python"
}
},
"cells": [
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 73
},
"id": "E1dY91XcNtRF",
"outputId": "718f0a14-2186-4b24-84fd-c46d8af1a4da"
},
"outputs": [
{
"output_type": "display_data",
"data": {
"text/plain": [
"<IPython.core.display.HTML object>"
],
"text/html": [
"\n",
" <input type=\"file\" id=\"files-670816bc-ca31-4a1c-8946-
dfeb37eb9d3d\" name=\"files[]\" multiple disabled\n",
" style=\"border:none\" />\n",
" <output id=\"result-670816bc-ca31-4a1c-8946-dfeb37eb9d3d\">\n",
" Upload widget is only available when the cell has been
executed in the\n",
" current browser session. Please rerun this cell to enable.\n",
" </output>\n",
" <script>// Copyright 2017 Google LLC\n",
"//\n",
"// Licensed under the Apache License, Version 2.0
(the \"License\");\n",
"// you may not use this file except in compliance with the License.\
n",
"// You may obtain a copy of the License at\n",
"//\n",
"// http://www.apache.org/licenses/LICENSE-2.0\n",
"//\n",
"// Unless required by applicable law or agreed to in writing,
software\n",
"// distributed under the License is distributed on an \"AS IS\"
BASIS,\n",
"// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied.\n",
"// See the License for the specific language governing permissions
and\n",
"// limitations under the License.\n",
"\n",
"/**\n",
" * @fileoverview Helpers for google.colab Python module.\n",
" */\n",
"(function(scope) {\n",
"function span(text, styleAttributes = {}) {\n",
" const element = document.createElement('span');\n",
" element.textContent = text;\n",
" for (const key of Object.keys(styleAttributes)) {\n",
" element.style[key] = styleAttributes[key];\n",
" }\n",
" return element;\n",
"}\n",
"\n",
"// Max number of bytes which will be uploaded at a time.\n",
"const MAX_PAYLOAD_SIZE = 100 * 1024;\n",
"\n",
"function _uploadFiles(inputId, outputId) {\n",
" const steps = uploadFilesStep(inputId, outputId);\n",
" const outputElement = document.getElementById(outputId);\n",
" // Cache steps on the outputElement to make it available for the
next call\n",
" // to uploadFilesContinue from Python.\n",
" outputElement.steps = steps;\n",
"\n",
" return _uploadFilesContinue(outputId);\n",
"}\n",
"\n",
"// This is roughly an async generator (not supported in the browser
yet),\n",
"// where there are multiple asynchronous steps and the Python side
is going\n",
"// to poll for completion of each step.\n",
"// This uses a Promise to block the python side on completion of
each step,\n",
"// then passes the result of the previous step as the input to the
next step.\n",
"function _uploadFilesContinue(outputId) {\n",
" const outputElement = document.getElementById(outputId);\n",
" const steps = outputElement.steps;\n",
"\n",
" const next = steps.next(outputElement.lastPromiseValue);\n",
" return Promise.resolve(next.value.promise).then((value) => {\n",
" // Cache the last promise value to make it available to the
next\n",
" // step of the generator.\n",
" outputElement.lastPromiseValue = value;\n",
" return next.value.response;\n",
" });\n",
"}\n",
"\n",
"/**\n",
" * Generator function which is called between each async step of the
upload\n",
" * process.\n",
" * @param {string} inputId Element ID of the input file picker
element.\n",
" * @param {string} outputId Element ID of the output display.\n",
" * @return {!Iterable<!Object>} Iterable of next steps.\n",
" */\n",
"function* uploadFilesStep(inputId, outputId) {\n",
" const inputElement = document.getElementById(inputId);\n",
" inputElement.disabled = false;\n",
"\n",
" const outputElement = document.getElementById(outputId);\n",
" outputElement.innerHTML = '';\n",
"\n",
" const pickedPromise = new Promise((resolve) => {\n",
" inputElement.addEventListener('change', (e) => {\n",
" resolve(e.target.files);\n",
" });\n",
" });\n",
"\n",
" const cancel = document.createElement('button');\n",
" inputElement.parentElement.appendChild(cancel);\n",
" cancel.textContent = 'Cancel upload';\n",
" const cancelPromise = new Promise((resolve) => {\n",
" cancel.onclick = () => {\n",
" resolve(null);\n",
" };\n",
" });\n",
"\n",
" // Wait for the user to pick the files.\n",
" const files = yield {\n",
" promise: Promise.race([pickedPromise, cancelPromise]),\n",
" response: {\n",
" action: 'starting',\n",
" }\n",
" };\n",
"\n",
" cancel.remove();\n",
"\n",
" // Disable the input element since further picks are not allowed.\
n",
" inputElement.disabled = true;\n",
"\n",
" if (!files) {\n",
" return {\n",
" response: {\n",
" action: 'complete',\n",
" }\n",
" };\n",
" }\n",
"\n",
" for (const file of files) {\n",
" const li = document.createElement('li');\n",
" li.append(span(file.name, {fontWeight: 'bold'}));\n",
" li.append(span(\n",
" `(${file.type || 'n/a'}) - ${file.size} bytes, ` +\n",
" `last modified: ${\n",
" file.lastModifiedDate ?
file.lastModifiedDate.toLocaleDateString() :\n",
" 'n/a'} - `));\n",
" const percent = span('0% done');\n",
" li.appendChild(percent);\n",
"\n",
" outputElement.appendChild(li);\n",
"\n",
" const fileDataPromise = new Promise((resolve) => {\n",
" const reader = new FileReader();\n",
" reader.onload = (e) => {\n",
" resolve(e.target.result);\n",
" };\n",
" reader.readAsArrayBuffer(file);\n",
" });\n",
" // Wait for the data to be ready.\n",
" let fileData = yield {\n",
" promise: fileDataPromise,\n",
" response: {\n",
" action: 'continue',\n",
" }\n",
" };\n",
"\n",
" // Use a chunked sending to avoid message size limits. See
b/62115660.\n",
" let position = 0;\n",
" do {\n",
" const length = Math.min(fileData.byteLength - position,
MAX_PAYLOAD_SIZE);\n",
" const chunk = new Uint8Array(fileData, position, length);\n",
" position += length;\n",
"\n",
" const base64 = btoa(String.fromCharCode.apply(null, chunk));\
n",
" yield {\n",
" response: {\n",
" action: 'append',\n",
" file: file.name,\n",
" data: base64,\n",
" },\n",
" };\n",
"\n",
" let percentDone = fileData.byteLength === 0 ?\n",
" 100 :\n",
" Math.round((position / fileData.byteLength) * 100);\n",
" percent.textContent = `${percentDone}% done`;\n",
"\n",
" } while (position < fileData.byteLength);\n",
" }\n",
"\n",
" // All done.\n",
" yield {\n",
" response: {\n",
" action: 'complete',\n",
" }\n",
" };\n",
"}\n",
"\n",
"scope.google = scope.google || {};\n",
"scope.google.colab = scope.google.colab || {};\n",
"scope.google.colab._files = {\n",
" _uploadFiles,\n",
" _uploadFilesContinue,\n",
"};\n",
"})(self);\n",
"</script> "
]
},
"metadata": {}
},
{
"output_type": "stream",
"name": "stdout",
"text": [
"Saving enjoysport.csv to enjoysport.csv\n"
]
}
],
"source": [
"from google.colab import files\n",
"uploaded = files.upload()"
]
},
{
"cell_type": "markdown",
"source": [
"''Program 1 :-\n",
"Implement and demonstrate the FIND-S algorithm for finding the most
specific\n",
"hypothesis based on a given set of training data samples. Read the
training data from a\n",
".CSV file."
],
"metadata": {
"id": "If4UdWtkO0Q0"
}
},
{
"cell_type": "code",
"source": [
"import csv\n",
"a = []\n",
"with open('enjoysport.csv', 'r') as csvfile:\n",
" next(csvfile)\n",
" for row in csv.reader(csvfile):\n",
" a.append(row)\n",
" print(a)\n",
"\n",
"print(\"\\nThe total number of training instances are : \",len(a))\n",
"\n",
"num_attribute = len(a[0])-1\n",
"\n",
"print(\"\\nThe initial hypothesis is : \")\n",
"hypothesis = ['0']*num_attribute\n",
"print(hypothesis)\n",
"\n",
"for i in range(0, len(a)):\n",
" if a[i][num_attribute] == 'yes':\n",
" print (\"\\nInstance \", i+1, \"is\", a[i], \" and is Positive
Instance\")\n",
" for j in range(0, num_attribute):\n",
" if hypothesis[j] == '0' or hypothesis[j] == a[i][j]:\n",
" hypothesis[j] = a[i][j]\n",
" else:\n",
" hypothesis[j] = '?'\n",
" print(\"The hypothesis for the training instance\", i+1, \" is: \"
, hypothesis, \"\\n\")\n",
"\n",
" if a[i][num_attribute] == 'no':\n",
" print (\"\\nInstance \", i+1, \"is\", a[i], \" and is Negative
Instance Hence Ignored\")\n",
" print(\"The hypothesis for the training instance\", i+1, \" is: \"
, hypothesis, \"\\n\")\n",
"\n",
"print(\"\\nThe Maximally specific hypothesis for the training instance
is \", hypothesis)"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "vnKCqAPEOXsN",
"outputId": "c26d87ab-b260-4827-caaa-4c4bcca3ed86"
},
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"[['sunny', 'warm', 'normal', 'strong', 'warm', 'same', 'yes'],
['sunny', 'warm', 'high', 'strong', 'warm', 'same', 'yes'], ['rainy', 'cold',
'high', 'strong', 'warm', 'change', 'no'], ['sunny', 'warm', 'high', 'strong',
'cool', 'change', 'yes']]\n",
"\n",
"The total number of training instances are : 4\n",
"\n",
"The initial hypothesis is : \n",
"['0', '0', '0', '0', '0', '0']\n",
"\n",
"Instance 1 is ['sunny', 'warm', 'normal', 'strong', 'warm', 'same',
'yes'] and is Positive Instance\n",
"The hypothesis for the training instance 1 is: ['sunny', 'warm',
'normal', 'strong', 'warm', 'same'] \n",
"\n",
"\n",
"Instance 2 is ['sunny', 'warm', 'high', 'strong', 'warm', 'same',
'yes'] and is Positive Instance\n",
"The hypothesis for the training instance 2 is: ['sunny', 'warm',
'?', 'strong', 'warm', 'same'] \n",
"\n",
"\n",
"Instance 3 is ['rainy', 'cold', 'high', 'strong', 'warm', 'change',
'no'] and is Negative Instance Hence Ignored\n",
"The hypothesis for the training instance 3 is: ['sunny', 'warm',
'?', 'strong', 'warm', 'same'] \n",
"\n",
"\n",
"Instance 4 is ['sunny', 'warm', 'high', 'strong', 'cool', 'change',
'yes'] and is Positive Instance\n",
"The hypothesis for the training instance 4 is: ['sunny', 'warm',
'?', 'strong', '?', '?'] \n",
"\n",
"\n",
"The Maximally specific hypothesis for the training instance is
['sunny', 'warm', '?', 'strong', '?', '?']\n"
]
}
]
},
{
"cell_type": "markdown",
"source": [
"Program 2:-\n",
"For a given set of training data examples stored in a .CSV file, implement
and demonstrate\n",
"the Candidate Elimination algorithm to output a description of the set of
all hypothesis\n",
"consistent with the training examples."
],
"metadata": {
"id": "iLH8swMePKR1"
}
},
{
"cell_type": "code",
"source": [
"import numpy as np\n",
"import pandas as pd\n",
"\n",
"data = pd.read_csv(\"enjoysport.csv\")\n",
"concepts = np.array(data.iloc[:, 0:-1])\n",
"print(\"\\nInstances are:\\n\", concepts)\n",
"target = np.array(data.iloc[:, -1])\n",
"print(\"\\nTarget Values are: \", target)\n",
"\n",
"def learn(concepts, target):\n",
" positive_instances = [concepts[i] for i in range(len(concepts)) if
target[i] == 'yes']\n",
" specific_h = positive_instances[0].copy()\n",
" print(\"\\nInitialization of specific_h and generic_h\")\n",
" print(\"\\nSpecific Boundary: \", specific_h)\n",
" general_h = [['?' for _ in range(len(specific_h))] for _ in
range(len(specific_h))]\n",
" print(\"\\nGeneric Boundary: \", general_h)\n",
"\n",
" for i, h in enumerate(concepts):\n",
" print(\"\\nInstance\", i + 1, \"is \", h)\n",
" if target[i] == \"yes\":\n",
" print(\"Instance is Positive \")\n",
" for x in range(len(specific_h)):\n",
" if h[x] != specific_h[x]:\n",
" specific_h[x] = '?'\n",
" general_h[x][x] = '?'\n",
"\n",
" if target[i] == \"no\":\n",
" print(\"Instance is Negative \")\n",
" for x in range(len(specific_h)):\n",
" if h[x] != specific_h[x]:\n",
" general_h[x][x] = specific_h[x]\n",
" else:\n",
" general_h[x][x] = '?'\n",
"\n",
" print(\"Specific Boundary after \", i + 1, \"Instance is \",
specific_h)\n",
" print(\"Generic Boundary after \", i + 1, \"Instance is \",
general_h)\n",
" print(\"\\n\")\n",
"\n",
" # Clean up the redundant hypotheses in the generic boundary\n",
" indices = [i for i, val in enumerate(general_h) if val == ['?' for _
in range(len(specific_h))]]\n",
" for i in indices:\n",
" general_h.remove(['?' for _ in range(len(specific_h))])\n",
" return specific_h, general_h\n",
"\n",
"s_final, g_final = learn(concepts, target)\n",
"\n",
"print(\"Final Specific_h: \", s_final, sep=\"\\n\")\n",
"print(\"Final General_h: \", g_final, sep=\"\\n\")\n"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "WgbOuk5JOm0Z",
"outputId": "7463bf5a-22d7-4cc6-8dd7-48b16f4df62c"
},
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"\n",
"Instances are:\n",
" [['sunny' 'warm' 'normal' 'strong' 'warm' 'same']\n",
" ['sunny' 'warm' 'high' 'strong' 'warm' 'same']\n",
" ['rainy' 'cold' 'high' 'strong' 'warm' 'change']\n",
" ['sunny' 'warm' 'high' 'strong' 'cool' 'change']]\n",
"\n",
"Target Values are: ['yes' 'yes' 'no' 'yes']\n",
"\n",
"Initialization of specific_h and generic_h\n",
"\n",
"Specific Boundary: ['sunny' 'warm' 'normal' 'strong' 'warm' 'same']\
n",
"\n",
"Generic Boundary: [['?', '?', '?', '?', '?', '?'], ['?', '?', '?',
'?', '?', '?'], ['?', '?', '?', '?', '?', '?'], ['?', '?', '?', '?', '?', '?'],
['?', '?', '?', '?', '?', '?'], ['?', '?', '?', '?', '?', '?']]\n",
"\n",
"Instance 1 is ['sunny' 'warm' 'normal' 'strong' 'warm' 'same']\n",
"Instance is Positive \n",
"Specific Boundary after 1 Instance is ['sunny' 'warm' 'normal'
'strong' 'warm' 'same']\n",
"Generic Boundary after 1 Instance is [['?', '?', '?', '?', '?',
'?'], ['?', '?', '?', '?', '?', '?'], ['?', '?', '?', '?', '?', '?'], ['?', '?',
'?', '?', '?', '?'], ['?', '?', '?', '?', '?', '?'], ['?', '?', '?', '?', '?',
'?']]\n",
"\n",
"\n",
"\n",
"Instance 2 is ['sunny' 'warm' 'high' 'strong' 'warm' 'same']\n",
"Instance is Positive \n",
"Specific Boundary after 2 Instance is ['sunny' 'warm' '?' 'strong'
'warm' 'same']\n",
"Generic Boundary after 2 Instance is [['?', '?', '?', '?', '?',
'?'], ['?', '?', '?', '?', '?', '?'], ['?', '?', '?', '?', '?', '?'], ['?', '?',
'?', '?', '?', '?'], ['?', '?', '?', '?', '?', '?'], ['?', '?', '?', '?', '?',
'?']]\n",
"\n",
"\n",
"\n",
"Instance 3 is ['rainy' 'cold' 'high' 'strong' 'warm' 'change']\n",
"Instance is Negative \n",
"Specific Boundary after 3 Instance is ['sunny' 'warm' '?' 'strong'
'warm' 'same']\n",
"Generic Boundary after 3 Instance is [['sunny', '?', '?', '?', '?',
'?'], ['?', 'warm', '?', '?', '?', '?'], ['?', '?', '?', '?', '?', '?'], ['?', '?',
'?', '?', '?', '?'], ['?', '?', '?', '?', '?', '?'], ['?', '?', '?', '?', '?',
'same']]\n",
"\n",
"\n",
"\n",
"Instance 4 is ['sunny' 'warm' 'high' 'strong' 'cool' 'change']\n",
"Instance is Positive \n",
"Specific Boundary after 4 Instance is ['sunny' 'warm' '?' 'strong'
'?' '?']\n",
"Generic Boundary after 4 Instance is [['sunny', '?', '?', '?', '?',
'?'], ['?', 'warm', '?', '?', '?', '?'], ['?', '?', '?', '?', '?', '?'], ['?', '?',
'?', '?', '?', '?'], ['?', '?', '?', '?', '?', '?'], ['?', '?', '?', '?', '?',
'?']]\n",
"\n",
"\n",
"Final Specific_h: \n",
"['sunny' 'warm' '?' 'strong' '?' '?']\n",
"Final General_h: \n",
"[['sunny', '?', '?', '?', '?', '?'], ['?', 'warm', '?', '?', '?',
'?']]\n"
]
}
]
},
{
"cell_type": "markdown",
"source": [
"Program 3)Write a program to demonstrate the working of the decision tree
based ID3 algorithm.\n",
"Use an appropriate data set for building the decision tree and apply this
knowledge to\n",
"classify a new sample."
],
"metadata": {
"id": "z1At89s6QnPO"
}
},
{
"cell_type": "code",
"source": [
"import csv\n",
"\n",
"class Node:\n",
" def __init__(self, attribute=None, value=None, results=None,
true_branch=None, false_branch=None):\n",
" self.attribute, self.value, self.results, self.true_branch,
self.false_branch = attribute, value, results, true_branch, false_branch\n",
"\n",
"def unique_counts(rows):\n",
" from collections import Counter\n",
" return Counter(row[-1] for row in rows)\n",
"\n",
"def entropy(rows):\n",
" from math import log2\n",
" counts = unique_counts(rows)\n",
" return -sum((p / len(rows)) * log2(p / len(rows)) for p in
counts.values())\n",
"\n",
"def divide_data(rows, column, value):\n",
" split_function = lambda row: row[column] == value\n",
" true_rows, false_rows = [row for row in rows if split_function(row)],
[row for row in rows if not split_function(row)]\n",
" return true_rows, false_rows\n",
"\n",
"def information_gain(current_entropy, true_rows, false_rows):\n",
" p = len(true_rows) / (len(true_rows) + len(false_rows))\n",
" return current_entropy - p * entropy(true_rows) - (1 - p) *
entropy(false_rows)\n",
"\n",
"def find_best_split(rows):\n",
" current_entropy = entropy(rows)\n",
" best_gain, best_criteria = 0, None\n",
" for col in range(len(rows[0]) - 1):\n",
" values = set(row[col] for row in rows)\n",
" for value in values:\n",
" true_rows, false_rows = divide_data(rows, col, value)\n",
" if len(true_rows) == 0 or len(false_rows) == 0:\n",
" continue\n",
" gain = information_gain(current_entropy, true_rows,
false_rows)\n",
" if gain > best_gain:\n",
" best_gain, best_criteria = gain, (col, value)\n",
" return best_criteria\n",
"\n",
"def build_tree(rows):\n",
" if len(set(row[-1] for row in rows)) == 1:\n",
" return Node(results=unique_counts(rows))\n",
" best_criteria = find_best_split(rows)\n",
" if best_criteria is None:\n",
" return Node(results=unique_counts(rows))\n",
" col, value = best_criteria\n",
" true_rows, false_rows = divide_data(rows, col, value)\n",
" true_branch, false_branch = build_tree(true_rows),
build_tree(false_rows)\n",
" return Node(attribute=col, value=value, true_branch=true_branch,
false_branch=false_branch)\n",
"\n",
"def classify(node, sample):\n",
" if node.results:\n",
" return max(node.results, key=node.results.get)\n",
" branch = node.true_branch if sample[node.attribute] == node.value else
node.false_branch\n",
" return classify(branch, sample)\n",
"\n",
"# Load data from CSV file\n",
"with open('enjoysport.csv', 'r') as file:\n",
" reader = csv.reader(file)\n",
" headers = next(reader)\n",
" training_data = list(reader)\n",
"\n",
"# Build the decision tree\n",
"tree = build_tree(training_data)\n",
"\n",
"# Classify a new sample\n",
"new_sample = ['sunny', 'warm', 'normal', 'strong', 'cool', 'same']\n",
"prediction = classify(tree, new_sample)\n",
"\n",
"# Display the decision tree and prediction\n",
"print(\"Decision Tree:\")\n",
"print(tree)\n",
"print(\"\\nPrediction for {}: {}\".format(new_sample, prediction))\n"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "IJx_WrrJRfAt",
"outputId": "920e5abe-d8e1-402a-eb0c-33533234b39c"
},
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"Decision Tree:\n",
"<__main__.Node object at 0x7ada83308ee0>\n",
"\n",
"Prediction for ['sunny', 'warm', 'normal', 'strong', 'cool', 'same']:
yes\n"
]
}
]
},
{
"cell_type": "markdown",
"source": [
"Program 4)Write a program to demonstrate the working of Support Vector
Machine by using\n",
"appropriate data set."
],
"metadata": {
"id": "0XullpGTRnLv"
}
},
{
"cell_type": "code",
"source": [
"from google.colab import files\n",
"uploaded = files.upload()"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 73
},
"id": "qF9LALJOTnU5",
"outputId": "940710ed-30ad-4083-a764-9a91815c602c"
},
"execution_count": null,
"outputs": [
{
"output_type": "display_data",
"data": {
"text/plain": [
"<IPython.core.display.HTML object>"
],
"text/html": [
"\n",
" <input type=\"file\" id=\"files-3e07e900-77ce-45df-b0fa-
926301b4a519\" name=\"files[]\" multiple disabled\n",
" style=\"border:none\" />\n",
" <output id=\"result-3e07e900-77ce-45df-b0fa-926301b4a519\">\n",
" Upload widget is only available when the cell has been
executed in the\n",
" current browser session. Please rerun this cell to enable.\n",
" </output>\n",
" <script>// Copyright 2017 Google LLC\n",
"//\n",
"// Licensed under the Apache License, Version 2.0
(the \"License\");\n",
"// you may not use this file except in compliance with the License.\
n",
"// You may obtain a copy of the License at\n",
"//\n",
"// http://www.apache.org/licenses/LICENSE-2.0\n",
"//\n",
"// Unless required by applicable law or agreed to in writing,
software\n",
"// distributed under the License is distributed on an \"AS IS\"
BASIS,\n",
"// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied.\n",
"// See the License for the specific language governing permissions
and\n",
"// limitations under the License.\n",
"\n",
"/**\n",
" * @fileoverview Helpers for google.colab Python module.\n",
" */\n",
"(function(scope) {\n",
"function span(text, styleAttributes = {}) {\n",
" const element = document.createElement('span');\n",
" element.textContent = text;\n",
" for (const key of Object.keys(styleAttributes)) {\n",
" element.style[key] = styleAttributes[key];\n",
" }\n",
" return element;\n",
"}\n",
"\n",
"// Max number of bytes which will be uploaded at a time.\n",
"const MAX_PAYLOAD_SIZE = 100 * 1024;\n",
"\n",
"function _uploadFiles(inputId, outputId) {\n",
" const steps = uploadFilesStep(inputId, outputId);\n",
" const outputElement = document.getElementById(outputId);\n",
" // Cache steps on the outputElement to make it available for the
next call\n",
" // to uploadFilesContinue from Python.\n",
" outputElement.steps = steps;\n",
"\n",
" return _uploadFilesContinue(outputId);\n",
"}\n",
"\n",
"// This is roughly an async generator (not supported in the browser
yet),\n",
"// where there are multiple asynchronous steps and the Python side
is going\n",
"// to poll for completion of each step.\n",
"// This uses a Promise to block the python side on completion of
each step,\n",
"// then passes the result of the previous step as the input to the
next step.\n",
"function _uploadFilesContinue(outputId) {\n",
" const outputElement = document.getElementById(outputId);\n",
" const steps = outputElement.steps;\n",
"\n",
" const next = steps.next(outputElement.lastPromiseValue);\n",
" return Promise.resolve(next.value.promise).then((value) => {\n",
" // Cache the last promise value to make it available to the
next\n",
" // step of the generator.\n",
" outputElement.lastPromiseValue = value;\n",
" return next.value.response;\n",
" });\n",
"}\n",
"\n",
"/**\n",
" * Generator function which is called between each async step of the
upload\n",
" * process.\n",
" * @param {string} inputId Element ID of the input file picker
element.\n",
" * @param {string} outputId Element ID of the output display.\n",
" * @return {!Iterable<!Object>} Iterable of next steps.\n",
" */\n",
"function* uploadFilesStep(inputId, outputId) {\n",
" const inputElement = document.getElementById(inputId);\n",
" inputElement.disabled = false;\n",
"\n",
" const outputElement = document.getElementById(outputId);\n",
" outputElement.innerHTML = '';\n",
"\n",
" const pickedPromise = new Promise((resolve) => {\n",
" inputElement.addEventListener('change', (e) => {\n",
" resolve(e.target.files);\n",
" });\n",
" });\n",
"\n",
" const cancel = document.createElement('button');\n",
" inputElement.parentElement.appendChild(cancel);\n",
" cancel.textContent = 'Cancel upload';\n",
" const cancelPromise = new Promise((resolve) => {\n",
" cancel.onclick = () => {\n",
" resolve(null);\n",
" };\n",
" });\n",
"\n",
" // Wait for the user to pick the files.\n",
" const files = yield {\n",
" promise: Promise.race([pickedPromise, cancelPromise]),\n",
" response: {\n",
" action: 'starting',\n",
" }\n",
" };\n",
"\n",
" cancel.remove();\n",
"\n",
" // Disable the input element since further picks are not allowed.\
n",
" inputElement.disabled = true;\n",
"\n",
" if (!files) {\n",
" return {\n",
" response: {\n",
" action: 'complete',\n",
" }\n",
" };\n",
" }\n",
"\n",
" for (const file of files) {\n",
" const li = document.createElement('li');\n",
" li.append(span(file.name, {fontWeight: 'bold'}));\n",
" li.append(span(\n",
" `(${file.type || 'n/a'}) - ${file.size} bytes, ` +\n",
" `last modified: ${\n",
" file.lastModifiedDate ?
file.lastModifiedDate.toLocaleDateString() :\n",
" 'n/a'} - `));\n",
" const percent = span('0% done');\n",
" li.appendChild(percent);\n",
"\n",
" outputElement.appendChild(li);\n",
"\n",
" const fileDataPromise = new Promise((resolve) => {\n",
" const reader = new FileReader();\n",
" reader.onload = (e) => {\n",
" resolve(e.target.result);\n",
" };\n",
" reader.readAsArrayBuffer(file);\n",
" });\n",
" // Wait for the data to be ready.\n",
" let fileData = yield {\n",
" promise: fileDataPromise,\n",
" response: {\n",
" action: 'continue',\n",
" }\n",
" };\n",
"\n",
" // Use a chunked sending to avoid message size limits. See
b/62115660.\n",
" let position = 0;\n",
" do {\n",
" const length = Math.min(fileData.byteLength - position,
MAX_PAYLOAD_SIZE);\n",
" const chunk = new Uint8Array(fileData, position, length);\n",
" position += length;\n",
"\n",
" const base64 = btoa(String.fromCharCode.apply(null, chunk));\
n",
" yield {\n",
" response: {\n",
" action: 'append',\n",
" file: file.name,\n",
" data: base64,\n",
" },\n",
" };\n",
"\n",
" let percentDone = fileData.byteLength === 0 ?\n",
" 100 :\n",
" Math.round((position / fileData.byteLength) * 100);\n",
" percent.textContent = `${percentDone}% done`;\n",
"\n",
" } while (position < fileData.byteLength);\n",
" }\n",
"\n",
" // All done.\n",
" yield {\n",
" response: {\n",
" action: 'complete',\n",
" }\n",
" };\n",
"}\n",
"\n",
"scope.google = scope.google || {};\n",
"scope.google.colab = scope.google.colab || {};\n",
"scope.google.colab._files = {\n",
" _uploadFiles,\n",
" _uploadFilesContinue,\n",
"};\n",
"})(self);\n",
"</script> "
]
},
"metadata": {}
},
{
"output_type": "stream",
"name": "stdout",
"text": [
"Saving archive.zip to archive.zip\n"
]
}
]
},
{
"cell_type": "code",
"source": [
"import zipfile\n",
"import pandas as pd\n",
"from sklearn.model_selection import train_test_split\n",
"from sklearn.svm import SVC\n",
"from sklearn.metrics import accuracy_score, classification_report,
confusion_matrix\n",
"import matplotlib.pyplot as plt\n",
"import seaborn as sns\n",
"\n",
"# Extract the contents of the archive.zip file\n",
"with zipfile.ZipFile('archive.zip', 'r') as zip_ref:\n",
" zip_ref.extractall()\n",
"\n",
"# Load the Iris dataset\n",
"iris_data = pd.read_csv('Iris.csv')\n",
"\n",
"# Display the first few rows of the dataset\n",
"print(\"Iris Dataset:\")\n",
"print(iris_data.head())\n",
"\n",
"# Split data into features and target\n",
"X = iris_data.drop('Species', axis=1)\n",
"y = iris_data['Species']\n",
"\n",
"# Split the dataset into training and testing sets\n",
"X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2,
random_state=42)\n",
"\n",
"# Create an SVM classifier\n",
"svm_classifier = SVC(kernel='linear', C=1.0)\n",
"\n",
"# Train the classifier on the training data\n",
"svm_classifier.fit(X_train, y_train)\n",
"\n",
"# Make predictions on the test data\n",
"y_pred = svm_classifier.predict(X_test)\n",
"\n",
"# Calculate accuracy\n",
"accuracy = accuracy_score(y_test, y_pred)\n",
"\n",
"# Plot confusion matrix\n",
"cm = confusion_matrix(y_test, y_pred)\n",
"plt.figure(figsize=(6, 4))\n",
"sns.heatmap(cm, annot=True, fmt='d', cmap='Blues', cbar=False)\n",
"plt.title('Confusion Matrix')\n",
"plt.xlabel('Predicted')\n",
"plt.ylabel('Actual')\n",
"plt.show()\n",
"\n",
"# Display classification report\n",
"print(\"Classification Report:\")\n",
"print(classification_report(y_test, y_pred))\n",
"\n",
"# Display accuracy\n",
"print(\"Accuracy:\", accuracy)\n"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 740
},
"id": "AA41vmdLT_u9",
"outputId": "ee716388-ff90-4e96-d980-08b357e535e8"
},
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"Iris Dataset:\n",
" Id SepalLengthCm SepalWidthCm PetalLengthCm PetalWidthCm
Species\n",
"0 1 5.1 3.5 1.4 0.2 Iris-
setosa\n",
"1 2 4.9 3.0 1.4 0.2 Iris-
setosa\n",
"2 3 4.7 3.2 1.3 0.2 Iris-
setosa\n",
"3 4 4.6 3.1 1.5 0.2 Iris-
setosa\n",
"4 5 5.0 3.6 1.4 0.2 Iris-
setosa\n"
]
},
{
"output_type": "display_data",
"data": {
"text/plain": [
"<Figure size 600x400 with 1 Axes>"
],
"image/png":
"iVBORw0KGgoAAAANSUhEUgAAAhAAAAGJCAYAAADbgQqfAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIH
ZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/
bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAoZ0lEQVR4nO3de3yP9eP/
8ed7s7037GQzrLSJzBwiktgnoxwSciiSPjWiFFJOH/
FJDn20T1KEpIPQonxyWE4VWSwhkiGVHKNPThuG2cl2/
f7o5/39vI3ai23vee9xv912u7XXdb2v63m9u25vz9vrfV3XbJZlWQIAADDg4eoAAADg+kOBAAAAxigQAADA
GAUCAAAYo0AAAABjFAgAAGCMAgEAAIxRIAAAgDEKBAAAMEaBAEqBPXv2qE2bNgoICJDNZlNCQkKhbv/
gwYOy2WyaM2dOoW73etaiRQu1aNHC1TGAIkOBAIrJvn371K9fP918883y8fGRv7+/
oqOj9cYbbygjI6NI9x0bG6udO3dqwoQJio+P1+23316k+ytOvXr1ks1mk7+//
2Xfxz179shms8lms2nSpEnG2//99981duxYJScnF0JawH2UcXUAoDRYsWKFunXrJrvdrscee0x169ZVdna2
1q9fr+HDh2vXrl165513imTfGRkZ2rhxo/
75z39q4MCBRbKP8PBwZWRkyMvLq0i2/1fKlCmj8+fPa9myZerevbvTsnnz5snHx0eZmZlXte3ff/
9d48aNU0REhBo0aFDg161ateqq9gdcLygQQBE7cOCAevToofDwcCUmJqpKlSqOZQMGDNDevXu1YsWKItv/
iRMnJEmBgYFFtg+bzSYfH58i2/5fsdvtio6O1kcffZSvQMyfP1/t27fXokWLiiXL+fPnVbZsWXl7exfL/
gBX4SsMoIhNnDhR586d06xZs5zKw0U1atTQs88+6/
j9woULeumll1S9enXZ7XZFRERo1KhRysrKcnpdRESEOnTooPXr1+uOO+6Qj4+Pbr75Zn3wwQeOdcaOHavw8
HBJ0vDhw2Wz2RQRESHpj6n/i//9v8aOHSubzeY0tnr1av3tb39TYGCgypcvr8jISI0aNcqx/
ErXQCQmJuquu+5SuXLlFBgYqE6dOumnn3667P727t2rXr16KTAwUAEBAerdu7fOnz9/5Tf2Ej179tRnn32m
06dPO8a2bNmiPXv2qGfPnvnWP3nypIYNG6Z69eqpfPny8vf3V7t27bR9+3bHOmvXrlXjxo0lSb1793Z8FXL
xOFu0aKG6detq69atat68ucqWLet4Xy69BiI2NlY+Pj75jr9t27YKCgrS77//
XuBjBUoCCgRQxJYtW6abb75ZzZo1K9D6ffv21YsvvqiGDRtq8uTJiomJUVxcnHr06JFv3b179+rBBx9U69a
t9dprrykoKEi9evXSrl27JEldu3bV5MmTJUkPP/
yw4uPjNWXKFKP8u3btUocOHZSVlaXx48frtdde0/33369vvvnmT1/35Zdfqm3btjp+/
LjGjh2rIUOGaMOGDYqOjtbBgwfzrd+9e3edPXtWcXFx6t69u+bMmaNx48YVOGfXrl1ls9m0ePFix9j8+fNV
q1YtNWzYMN/6+/
fvV0JCgjp06KDXX39dw4cP186dOxUTE+P4xzwqKkrjx4+XJD355JOKj49XfHy8mjdv7thOamqq2rVrpwYNG
mjKlClq2bLlZfO98cYbqlixomJjY5WbmytJevvtt7Vq1SpNmzZNYWFhBT5WoESwABSZtLQ0S5LVqVOnAq2f
nJxsSbL69u3rND5s2DBLkpWYmOgYCw8PtyRZSUlJjrHjx49bdrvdGjp0qGPswIEDliTr1VdfddpmbGysFR4
eni/DmDFjrP/9aJg8ebIlyTpx4sQVc1/cx+zZsx1jDRo0sEJDQ63U1FTH2Pbt2y0PDw/rsccey7e/
xx9/3GmbXbp0sYKDg6+4z/
89jnLlylmWZVkPPvigdc8991iWZVm5ublW5cqVrXHjxl32PcjMzLRyc3PzHYfdbrfGjx/
vGNuyZUu+Y7soJibGkmTNnDnzsstiYmKcxr744gtLkvWvf/3L2r9/
v1W+fHmrc+fOf3mMQEnEDARQhM6cOSNJ8vPzK9D6K1eulCQNGTLEaXzo0KGSlO9aidq1a+uuu+5y/
F6xYkVFRkZq//79V535Uhevnfj000+Vl5dXoNccOXJEycnJ6tWrlypUqOAYv/
XWW9W6dWvHcf6vp556yun3u+66S6mpqY73sCB69uyptWvX6ujRo0pMTNTRo0cv+/
WF9Md1Ex4ef3wE5ubmKjU11fH1zPfff1/gfdrtdvXu3btA67Zp00b9+vXT+PHj1bVrV/
n4+Ojtt98u8L6AkoQCARQhf39/SdLZs2cLtP6vv/4qDw8P1ahRw2m8cuXKCgwM1K+//
uo0ftNNN+XbRlBQkE6dOnWVifN76KGHFB0drb59+6pSpUrq0aOH/vOf//
xpmbiYMzIyMt+yqKgopaSkKD093Wn80mMJCgqSJKNjue+++
+Tn56cFCxZo3rx5aty4cb738qK8vDxNnjxZt9xyi+x2u0JCQlSxYkXt2LFDaWlpBd7nDTfcYHTB5KRJk1Sh
QgUlJydr6tSpCg0NLfBrgZKEAgEUIX9/f4WFhemHH34wet2lFzFeiaen52XHLcu66n1c/
H7+Il9fXyUlJenLL7/
Uo48+qh07duihhx5S69at8617La7lWC6y2+3q2rWr5s6dqyVLllxx9kGSXn75ZQ0ZMkTNmzfXhx9+qC++
+EKrV69WnTp1CjzTIv3x/pjYtm2bjh8/LknauXOn0WuBkoQCARSxDh06aN+
+fdq4ceNfrhseHq68vDzt2bPHafzYsWM6ffq0446KwhAUFOR0x8JFl85ySJKHh4fuuecevf766/
rxxx81YcIEJSYm6quvvrrsti/m3L17d75lP//
8s0JCQlSuXLlrO4Ar6Nmzp7Zt26azZ89e9sLTixYuXKiWLVtq1qxZ6tGjh9q0aaNWrVrle08KWuYKIj09Xb
1791bt2rX15JNPauLEidqyZUuhbR8oThQIoIj94x//ULly5dS3b18dO3Ys3/J9+/
bpjTfekPTHFLykfHdKvP7665Kk9u3bF1qu6tWrKy0tTTt27HCMHTlyREuWLHFa7+TJk/lee/
GBSpfeWnpRlSpV1KBBA82dO9fpH+QffvhBq1atchxnUWjZsqVeeuklTZ8+XZUrV77iep6envlmNz755BP99
7//dRq7WHQuV7ZMjRgxQocOHdLcuXP1+uuvKyIiQrGxsVd8H4GSjAdJAUWsevXqmj9/
vh566CFFRUU5PYlyw4YN+uSTT9SrVy9JUv369RUbG6t33nlHp0+fVkxMjDZv3qy5c+eqc+fOV7xF8Gr06NF
DI0aMUJcuXTRo0CCdP39eb731lmrWrOl0EeH48eOVlJSk9u3bKzw8XMePH9eMGTN044036m9/+9sVt//
qq6+qXbt2atq0qfr06aOMjAxNmzZNAQEBGjt2bKEdx6U8PDz0wgsv/
OV6HTp00Pjx49W7d281a9ZMO3fu1Lx583TzzTc7rVe9enUFBgZq5syZ8vPzU7ly5dSkSRNVq1bNKFdiYqJm
zJihMWPGOG4rnT17tlq0aKHRo0dr4sSJRtsDXM7Fd4EApcYvv/
xiPfHEE1ZERITl7e1t+fn5WdHR0da0adOszMxMx3o5OTnWuHHjrGrVqlleXl5W1apVrZEjRzqtY1l/
3MbZvn37fPu59PbBK93GaVmWtWrVKqtu3bqWt7e3FRkZaX344Yf5buNcs2aN1alTJyssLMzy9va2wsLCrIc
fftj65Zdf8u3j0lsdv/zySys6Otry9fW1/P39rY4dO1o//
vij0zoX93fpbaKzZ8+2JFkHDhy44ntqWc63cV7JlW7jHDp0qFWlShXL19fXio6OtjZu3HjZ2y8//
fRTq3bt2laZMmWcjjMmJsaqU6fOZff5v9s5c+aMFR4ebjVs2NDKyclxWm/
w4MGWh4eHtXHjxj89BqCksVmWwRVKAAAA4hoIAABwFSgQAADAGAUCAAAYo0AAAABjFAgAAGCMAgEAAIxRIA
AAgDG3fBKlb7vJro6AUuLUssGujgAAhcqngM2AGQgAAGCMAgEAAIxRIAAAgDEKBAAAMEaBAAAAxigQAADAG
AUCAAAYo0AAAABjFAgAAGCMAgEAAIxRIAAAgDEKBAAAMEaBAAAAxigQAADAGAUCAAAYo0AAAABjFAgAAGCM
AgEAAIxRIAAAgDEKBAAAMEaBAAAAxigQAADAGAUCAAAYo0AAAABjFAgAAGCMAgEAAIxRIAAAgDEKBAAAMEa
BAAAAxigQAADAGAUCAAAYo0AAAABjFAgAAGCMAgEAAIxRIAAAgDEKBAAAMEaBAAAAxigQAADAGAUCAAAYo0
AAAABjFAgAAGCMAgEAAIxRIAAAgDEKBAAAMEaBAAAAxigQpUx03Ru0cGwn7f/
wCWV8Nlgdm1bPt87oR5tq/7wndTLhGa14+QFVDwss/qBwSx/
Pn6d2re9W49vq6ZEe3bRzxw5XR4Kb4lwrehSIUqacj5d27j+h52YkXnb50G63q//9DTRo2pdq/txHSs/
M0bJ/dZXdy7OYk8LdfP7ZSk2aGKd+/
Qfo40+WKDKylp7u10epqamujgY3w7lWPCgQpcyq7w5q3AcbtHTDvssuH9C5oV75eLOWb9qvHw6mqO+kz1Ul
uJzub5Z/pgIwET93tro+2F2duzyg6jVq6IUx4+Tj46OExYtcHQ1uhnOteJRx5c5TUlL0/
vvva+PGjTp69KgkqXLlymrWrJl69eqlihUrujJeqRNROUBVKpRT4rZDjrEz57O1ZfdRNakVpk/W/
eLCdLie5WRn66cfd6nPE/
0cYx4eHrrzzmbasX2bC5PB3XCuFR+XzUBs2bJFNWvW1NSpUxUQEKDmzZurefPmCggI0NSpU1WrVi199913f
7mdrKwsnTlzxunHyrtQDEfgfioHlZUkHT913mn8+KnzqvT/
lwFX49TpU8rNzVVwcLDTeHBwsFJSUlyUCu6Ic634uGwG4plnnlG3bt00c+ZM2Ww2p2WWZempp57SM888o40
bN/7pduLi4jRu3DinMc/qbeR1y72FnhkAAPzBZTMQ27dv1+DBg/OVB0my2WwaPHiwkpOT/
3I7I0eOVFpamtNPmeqtiiCx+zv6/2ceQi+ZbQgNKqtjl8xKACaCAoPk6emZ7yK21NRUhYSEuCgV3BHnWvFx
WYGoXLmyNm/efMXlmzdvVqVKlf5yO3a7Xf7+/k4/Ng+XXtpx3Tp4NE1HTqarZYOqjjG/
st5qHFlZ3/78uwuT4Xrn5e2tqNp19O2m/
5tRzMvL07ffbtSt9W9zYTK4G8614uOyf2mHDRumJ598Ulu3btU999zjKAvHjh3TmjVr9O6772rSpEmuiue2
yvl4OT3XIaKSv269uaJOnc3U4RNn9WbC9xrRo4n2/
ve0Dh5L05hHm+lIavoV79oACurR2N4aPWqE6tSpq7r1btWH8XOVkZGhzl26ujoa3AznWvFwWYEYMGCAQkJC
NHnyZM2YMUO5ubmSJE9PTzVq1Ehz5sxR9+7dXRXPbTW8pZJWTezm+H1ivxaSpPjVu/
Tk66v02iffqayPl6YPaqXA8nZt2PW77h+9WFk5uS5KDHdxb7v7dOrkSc2YPlUpKScUWStKM95+T8FMK6OQc
a4VD5tlWZarQ+Tk5Diujg0JCZGXl9c1bc+33eTCiAX8pVPLBrs6AgAUKp8CTi2UiIsFvLy8VKVKFVfHAAAA
BcSTKAEAgDEKBAAAMEaBAAAAxigQAADAGAUCAAAYo0AAAABjFAgAAGCMAgEAAIxRIAAAgDEKBAAAMEaBAAA
AxigQAADAGAUCAAAYo0AAAABjFAgAAGCMAgEAAIxRIAAAgDEKBAAAMEaBAAAAxigQAADAGAUCAAAYo0AAAA
BjFAgAAGCMAgEAAIxRIAAAgDEKBAAAMEaBAAAAxigQAADAGAUCAAAYo0AAAABjFAgAAGCMAgEAAIxRIAAAg
DEKBAAAMEaBAAAAxigQAADAGAUCAAAYo0AAAABjFAgAAGCMAgEAAIxRIAAAgDEKBAAAMEaBAAAAxigQAADA
mM2yLMvVIQpb5gVXJ0BpcWPfj10dAaXEb+/
1cHUElBI+ZQq2HjMQAADAGAUCAAAYo0AAAABjFAgAAGCMAgEAAIxRIAAAgDEKBAAAMEaBAAAAxigQAADAGA
UCAAAYo0AAAABjFAgAAGCMAgEAAIxRIAAAgDEKBAAAMEaBAAAAxigQAADAGAUCAAAYo0AAAABjFAgAAGCMA
gEAAIxRIAAAgDEKBAAAMEaBAAAAxigQAADAGAUCAAAYo0AAAABjFAgAAGCMAgEAAIxRIAAAgDEKBAAAMEaB
AAAAxsoUZKWlS5cWeIP333//
VYcBAADXhwIViM6dOxdoYzabTbm5udeSBwAAXAcKVCDy8vKKOgcAALiOcA0EAAAwVqAZiEulp6dr3bp1OnT
okLKzs52WDRo0qFCCAQCAksu4QGzbtk333Xefzp8/r/
T0dFWoUEEpKSkqW7asQkNDKRAAAJQCxl9hDB48WB07dtSpU6fk6+urTZs26ddff1WjRo00adKkosgIAABKG
OMCkZycrKFDh8rDw0Oenp7KyspS1apVNXHiRI0aNaooMgIAgBLGuEB4eXnJw+OPl4WGhurQoUOSpICAAB0+
fLhw0wEAgBLJ+BqI2267TVu2bNEtt9yimJgYvfjii0pJSVF8fLzq1q1bFBkBAEAJYzwD8fLLL6tKlSqSpAk
TJigoKEhPP/20Tpw4oXfeeafQAwIAgJLHeAbi9ttvd/x3aGioPv/
880INBAAASj4eJAUAAIwZz0BUq1ZNNpvtisv3799/TYFQ/
D6eP09zZ89SSsoJ1YyspedHjVa9W291dSy4mfI+ZfR813pq3/BGhfjbtfPX0/rn/
O+17cBJV0eDG+JzregZF4jnnnvO6fecnBxt27ZNn3/+uYYPH15YuVBMPv9spSZNjNMLY8apXr36mhc/
V0/366NPl3+u4OBgV8eDG5nS+w7VujFA/d/
ZpKOnM9StWYQWDW+hZqM+09HTGa6OBzfC51rxsFmWZRXGht5880199913mj17dmFs7ppkXnB1guvHIz26qU
7dehr1wouS/vjDaW3uidHDPR9VnyeedHG6ku/
Gvh+7OsJ1wcfLUwdnPqBHp36t1duPOMbXjG2jL3ccUdzinS5Md3347b0ero5w3eBz7dr4FHBqodCugWjXrp
0WLVpUWJtDMcjJztZPP+7SnU2bOcY8PDx0553NtGP7Nhcmg7sp42lTGU8PZWY7/2XfjOxc3VmzootSwR3xu
VZ8Cq1ALFy4UBUqVCiszaEYnDp9Srm5ufmm9IKDg5WSkuKiVHBH5zIvaPOeFA3rVEeVA33kYbOpW9NwNa4R
rEoBPq6OBzfC51rxuaoHSf3vRZSWZeno0aM6ceKEZsyYUajhDh8+rDFjxuj999+/
4jpZWVnKyspyGrM87bLb7YWaBcC16f/
OJk3tc4d+mNJZF3LztOPXU1q86ZDqRwS5OhqAq2BcIDp16uRUIDw8PFSxYkW1aNFCtWrVKtRwJ0+e1Ny5c/
+0QMTFxWncuHFOY/8cPUYvvDi2ULO4o6DAIHl6eio1NdVpPDU1VSEhIS5KBXd18MQ53f/
vRJX19pSfr5eOpWXqvaeb6dcT6a6OBjfC51rxMS4QY8eOLbSdL1269E+XF+SW0JEjR2rIkCFOY5Ynsw8F4e
XtrajadfTtpo26+55Wkv642Ojbbzeqx8N/
d3E6uKvz2bk6n52rgLJealmvssYt2O7qSHAjfK4VH+MC4enpqSNHjig0NNRpPDU1VaGhocrNzS3wtjp37iy
bzaY/uxHkz545IUl2e/
6vK7gLo+Aeje2t0aNGqE6duqpb71Z9GD9XGRkZ6tylq6ujwc20rFtZNpu098hZVatUXmMfaqA9R85o/
nqeHYPCxeda8TAuEFf6xz4rK0ve3t5G26pSpYpmzJihTp06XXZ5cnKyGjVqZBoRBu5td59OnTypGdOnKiXl
hCJrRWnG2+8pmKk+FDJ/
Xy+90K2+woJ8dTo9W8u+O6wJi3bqQm6h3EkOOPC5VjwKXCCmTp0q6Y8Zgffee0/
ly5d3LMvNzVVSUpLxNRCNGjXS1q1br1gg/
mp2AoXj4Uf+rocfYWoPRevTLYf16ZbDro6BUoLPtaJX4AIxefJkSX/
MQMycOVOenp6OZd7e3oqIiNDMmTONdj58+HClp1/5AqoaNWroq6+
+MtomAAAoesZPomzZsqUWL16soKCSe+sV10CguPAkShQXnkSJ4lLQJ1EaXwPBjAAAADB+EuUDDzygV155Jd
/
4xIkT1a1bt0IJBQAASjbjApGUlKT77rsv33i7du2UlJRUKKEAAEDJZlwgzp07d9nbNb28vHTmzJlCCQUAAE
o24wJRr149LViwIN/4xx9/
rNq1axdKKAAAULIZX0Q5evRode3aVfv27dPdd98tSVqzZo3mz5+vhQsXFnpAAABQ8hgXiI4dOyohIUEvv/
yyFi5cKF9fX9WvX1+JiYn8OW8AAEoJ4+dAXOrMmTP66KOPNGvWLG3dutXob2EUFZ4DgeLCcyBQXHgOBIpLQ
Z8DYXwNxEVJSUmKjY1VWFiYXnvtNd19993atGnT1W4OAABcR4y+wjh69KjmzJmjWbNm6cyZM+revbuysrKU
kJDABZQAAJQiBZ6B6NixoyIjI7Vjxw5NmTJFv//
+u6ZNm1aU2QAAQAlV4BmIzz77TIMGDdLTTz+tW265pSgzAQCAEq7AMxDr16/
X2bNn1ahRIzVp0kTTp09XSkpKUWYDAAAlVIELxJ133ql3331XR44cUb9+/
fTxxx8rLCxMeXl5Wr16tc6ePVuUOQEAQAlyTbdx7t69W7NmzVJ8fLxOnz6t1q1ba+nSpYWZ76pwGyeKC7dx
orhwGyeKS5HfxilJkZGRmjhxon777Td99NFH17IpAABwHbnmB0mVRMxAoLgwA4HiwgwEikuxzEAAAIDSiQI
BAACMUSAAAIAxCgQAADBGgQAAAMYoEAAAwBgFAgAAGKNAAAAAYxQIAABgjAIBAACMUSAAAIAxCgQAADBGgQ
AAAMYoEAAAwBgFAgAAGKNAAAAAYxQIAABgjAIBAACMUSAAAIAxCgQAADBGgQAAAMYoEAAAwBgFAgAAGKNAA
AAAYxQIAABgjAIBAACMUSAAAIAxm2VZlqtDFLbMC65OAACFK6jxQFdHQCmRsW16gdZjBgIAABijQAAAAGMU
CAAAYIwCAQAAjFEgAACAMQoEAAAwRoEAAADGKBAAAMAYBQIAABijQAAAAGMUCAAAYIwCAQAAjFEgAACAMQo
EAAAwRoEAAADGKBAAAMAYBQIAABijQAAAAGMUCAAAYIwCAQAAjFEgAACAMQoEAAAwRoEAAADGKBAAAMAYBQ
IAABijQAAAAGMUCAAAYIwCAQAAjFEgAACAMQoEAAAwRoEAAADGKBAAAMAYBQIAABijQAAAAGMUCAAAYIwCA
QAAjFEgAACAMQoEAAAwRoEAAADGKBAAAMAYBQIAABijQAAAAGMUCAAAYIwCAQAAjFEgAACAMQoE9PH8eWrX
+m41vq2eHunRTTt37HB1JLgpzjUUtuiG1bVwSj/
tXzVBGdumq2OLW52Wd7q7vpbNGKDfvnpFGdum69aaN7goqfuhQJRyn3+2UpMmxqlf/
wH6+JMlioyspaf79VFqaqqro8HNcK6hKJTztWvnL//
Vc3ELLru8rK+3NiTv0wtTE4o3WClAgSjl4ufOVtcHu6tzlwdUvUYNvTBmnHx8fJSweJGro8HNcK6hKKz65k
eNm7FcS7+6/GzWRyu2KO6dz5W4aXcxJ3N/FIhSLCc7Wz/9uEt3Nm3mGPPw8NCddzbTju3bXJgM7oZzDXA/L
i8QGRkZWr9+vX788cd8yzIzM/XBBx/
86euzsrJ05swZp5+srKyiiutWTp0+pdzcXAUHBzuNBwcHKyUlxUWp4I441wD349IC8csvvygqKkrNmzdXvX
r1FBMToyNHjjiWp6WlqXfv3n+6jbi4OAUEBDj9vPpKXFFHBwCgVHNpgRgxYoTq1q2r48ePa/
fu3fLz81N0dLQOHTpU4G2MHDlSaWlpTj/
DR4wswtTuIygwSJ6envkuYktNTVVISIiLUsEdca4B7selBWLDhg2Ki4tTSEiIatSooWXLlqlt27a66667tH
///gJtw263y9/
f3+nHbrcXcXL34OXtrajadfTtpo2Osby8PH377UbdWv82FyaDu+FcA9xPGVfuPCMjQ2XK/
F8Em82mt956SwMHDlRMTIzmz5/vwnSlw6OxvTV61AjVqVNXdevdqg/
j5yojI0Odu3R1dTS4Gc41FIVyvt6qXrWi4/eIG4J1a80bdOrMeR0+ekpB/
mVVtXKQqoQGSJJqRlSSJB1LPaNjqWddktlduLRA1KpVS999952ioqKcxqdPny5Juv/+
+10Rq1S5t919OnXypGZMn6qUlBOKrBWlGW+/p2CmlVHIONdQFBrWDteq9551/D5x2AOSpPilm/TkmA/
VPqae3h3/qGN5/CuPS5L+NXOlJry9snjDuhmbZVmWq3YeFxenr7/+WitXXv5/Yv/+/
TVz5kzl5eUZbTfzQmGkA4CSI6jxQFdHQCmRsW16gdZzaYEoKhQIAO6GAoHiUtAC4fLnQAAAgOsPBQIAABij
QAAAAGMUCAAAYIwCAQAAjFEgAACAMQoEAAAwRoEAAADGKBAAAMAYBQIAABijQAAAAGMUCAAAYIwCAQAAjFE
gAACAMQoEAAAwRoEAAADGKBAAAMAYBQIAABijQAAAAGMUCAAAYIwCAQAAjFEgAACAMQoEAAAwRoEAAADGKB
AAAMAYBQIAABijQAAAAGMUCAAAYIwCAQAAjFEgAACAMQoEAAAwRoEAAADGKBAAAMAYBQIAABijQAAAAGMUC
AAAYIwCAQAAjFEgAACAMQoEAAAwRoEAAADGKBAAAMAYBQIAABijQAAAAGMUCAAAYIwCAQAAjNksy7JcHQKu
l5WVpbi4OI0cOVJ2u93VceDGONdQXDjXihYFApKkM2fOKCAgQGlpafL393d1HLgxzjUUF861osVXGAAAwBg
FAgAAGKNAAAAAYxQISJLsdrvGjBnDhUYocpxrKC6ca0WLiygBAIAxZiAAAIAxCgQAADBGgQAAAMYoEAAAwB
gFAnrzzTcVEREhHx8fNWnSRJs3b3Z1JLihpKQkdezYUWFhYbLZbEpISHB1JLihuLg4NW7cWH5+fgoNDVXnz
p21e/duV8dySxSIUm7BggUaMmSIxowZo++//17169dX27Ztdfz4cVdHg5tJT09X/
fr19eabb7o6CtzYunXrNGDAAG3atEmrV69WTk6O2rRpo/
T0dFdHczvcxlnKNWnSRI0bN9b06dMlSXl5eapataqeeeYZPf/
88y5OB3dls9m0ZMkSde7c2dVR4OZOnDih0NBQrVu3Ts2bN3d1HLfCDEQplp2dra1bt6pVq1aOMQ8PD7Vq1U
obN250YTIAKBxpaWmSpAoVKrg4ifuhQJRiKSkpys3NVaVKlZzGK1WqpKNHj7ooFQAUjry8PD333HOKjo5W3
bp1XR3H7ZRxdQAAAIrCgAED9MMPP2j9+vWujuKWKBClWEhIiDw9PXXs2DGn8WPHjqly5couSgUA127gwIFa
vny5kpKSdOONN7o6jlviK4xSzNvbW40aNdKaNWscY3l5eVqzZo2aNm3qwmQAcHUsy9LAgQO1ZMkSJSYmqlq
1aq6O5LaYgSjlhgwZotjYWN1++
+264447NGXKFKWnp6t3796ujgY3c+7cOe3du9fx+4EDB5ScnKwKFSropptucmEyuJMBAwZo/
vz5+vTTT+Xn5+e4nisgIEC+vr4uTudeuI0Tmj59ul599VUdPXpUDRo00NSpU9WkSRNXx4KbWbt2rVq2bJlv
PDY2VnPmzCn+QHBLNpvtsuOzZ89Wr169ijeMm6NAAAAAY1wDAQAAjFEgAACAMQoEAAAwRoEAAADGKBAAAMA
YBQIAABijQAAAAGMUCAAAYIwCAaDI9OrVS507d3b83qJFCz333HPFnmPt2rWy2Ww6ffp0se8bcFcUCKAU6t
Wrl2w2m2w2m7y9vVWjRg2NHz9eFy5cKNL9Ll68WC+99FKB1uUffaBk449pAaXUvffeq9mzZysrK0srV67Ug
AED5OXlpZEjRzqtl52dLW9v70LZZ4UKFQplOwBcjxkIoJSy2+2qXLmywsPD9fTTT6tVq1ZaunSp42uHCRMm
KCwsTJGRkZKkw4cPq3v37goMDFSFChXUqVMnHTx40LG93NxcDRkyRIGBgQoODtY//
vEPXfqndi79CiMrK0sjRoxQ1apVZbfbVaNGDc2aNUsHDx50/OGtoKAg2Ww2xx9CysvLU1xcnKpVqyZfX1/
Vr19fCxcudNrPypUrVbNmTfn6+qply5ZOOQEUDgoEAEmSr6+vsrOzJUlr1qzR7t27tXr1ai1fvlw5OTlq27
at/
Pz89PXXX+ubb75R+fLlde+99zpe89prr2nOnDl6//33tX79ep08eVJLliz5030+9thj+uijjzR16lT99NNP
evvtt1W+fHlVrVpVixYtkiTt3r1bR44c0RtvvCFJiouL0wcffKCZM2dq165dGjx4sP7+979r3bp1kv4oOl2
7dlXHjh2VnJysvn376vnnny+qtw0ovSwApU5sbKzVqVMny7IsKy8vz1q9erVlt9utYcOGWbGxsValSpWsrK
wsx/rx8fFWZGSklZeX5xjLysqyfH19rS++
+MKyLMuqUqWKNXHiRMfynJwc68Ybb3Tsx7IsKyYmxnr22Wcty7Ks3bt3W5Ks1atXXzbjV199ZUmyTp065Rj
LzMy0ypYta23YsMFp3T59+lgPP/
ywZVmWNXLkSKt27dpOy0eMGJFvWwCuDddAAKXU8uXLVb58eeXk5CgvL089e/bU2LFjNWDAANWrV8/
puoft27dr79698vPzc9pGZmam9u3bp7S0NB05ckRNmjRxLCtTpoxuv/32fF9jXJScnCxPT0/
FxMQUOPPevXt1/
vx5tW7d2mk8Oztbt912myTpp59+csohSU2bNi3wPgAUDAUCKKVatmypt956S97e3goLC1OZMv/
3cVCuXDmndc+dO6dGjRpp3rx5+bZTsWLFq9q/r6+v8WvOnTsnSVqxYoVuuOEGp2V2u/
2qcgC4OhQIoJQqV66catSoUaB1GzZsqAULFig0NFT+/
v6XXadKlSr69ttv1bx5c0nShQsXtHXrVjVs2PCy69erV095eXlat26dWrVqlW/
5xRmQ3Nxcx1jt2rVlt9t16NChK85cREVFaenSpU5jmzZt+uuDBGCEiygB/KVHHnlEISEh6tSpk77+
+msdOHBAa9eu1aBBg/Tbb79Jkp599ln9+9//VkJCgn7++Wf179//T5/hEBERodjYWD3++ONKSEhwbPM///
mPJCk8PFw2m03Lly/XiRMndO7cOfn5+WnYsGEaPHiw5s6dq3379un777/
XtGnTNHfuXEnSU089pT179mj48OHavXu35s+frzlz5hT1WwSUOhQIAH+pbNmySkpK0k033aSuXbsqKipKff
r0UWZmpmNGYujQoXr00UcVGxurpk2bys/PT126dPnT7b711lt68MEH1b9/
f9WqVUtPPPGE0tPTJUk33HCDxo0bp+eff16VKlXSwIEDJUkvvfSSRo8erbi4OEVFRenee+/
VihUrVK1aNUnSTTfdpEWLFikhIUH169fXzJkz9fLLLxfhuwOUTjbrSlc4AQAAXAEzEAAAwBgFAgAAGKNAAA
AAYxQIAABgjAIBAACMUSAAAIAxCgQAADBGgQAAAMYoEAAAwBgFAgAAGKNAAAAAY/
8PpiVgRBtt7A4AAAAASUVORK5CYII=\n"
},
"metadata": {}
},
{
"output_type": "stream",
"name": "stdout",
"text": [
"Classification Report:\n",
" precision recall f1-score support\n",
"\n",
" Iris-setosa 1.00 1.00 1.00 10\n",
"Iris-versicolor 1.00 1.00 1.00 9\n",
" Iris-virginica 1.00 1.00 1.00 11\n",
"\n",
" accuracy 1.00 30\n",
" macro avg 1.00 1.00 1.00 30\n",
" weighted avg 1.00 1.00 1.00 30\n",
"\n",
"Accuracy: 1.0\n"
]
}
]
},
{
"cell_type": "markdown",
"source": [
"Program 5)Write a program to implement k- Nearest Neighbor algorithm to
classify the iris data set.\n",
"Print both correct and wrong predictions. (Python ML library can be used
for this\n",
"problem)"
],
"metadata": {
"id": "LCr9VbnpUJXO"
}
},
{
"cell_type": "code",
"source": [
"import zipfile\n",
"import pandas as pd\n",
"from sklearn.model_selection import train_test_split\n",
"from sklearn.neighbors import KNeighborsClassifier\n",
"from sklearn.metrics import accuracy_score, confusion_matrix,
classification_report\n",
"\n",
"# Extract the contents of the archive.zip file\n",
"with zipfile.ZipFile('archive.zip', 'r') as zip_ref:\n",
" zip_ref.extractall()\n",
"\n",
"# Load the Iris dataset\n",
"iris_data = pd.read_csv('Iris.csv')\n",
"\n",
"# Display the first few rows of the dataset\n",
"print(\"Iris Dataset:\")\n",
"print(iris_data.head())\n",
"\n",
"# Split data into features and target\n",
"X = iris_data.drop('Species', axis=1)\n",
"y = iris_data['Species']\n",
"\n",
"# Split the dataset into training and testing sets\n",
"X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2,
random_state=42)\n",
"\n",
"# Create a KNN classifier\n",
"knn_classifier = KNeighborsClassifier(n_neighbors=3)\n",
"\n",
"# Train the classifier on the training data\n",
"knn_classifier.fit(X_train, y_train)\n",
"\n",
"# Make predictions on the test data\n",
"y_pred = knn_classifier.predict(X_test)\n",
"\n",
"# Calculate accuracy\n",
"accuracy = accuracy_score(y_test, y_pred)\n",
"\n",
"# Display correct and wrong predictions\n",
"results = pd.DataFrame({'Actual': y_test, 'Predicted': y_pred, 'Correct':
y_test == y_pred})\n",
"print(\"\\nCorrect Predictions:\")\n",
"print(results[results['Correct']])\n",
"\n",
"print(\"\\nWrong Predictions:\")\n",
"print(results[~results['Correct']])\n",
"\n",
"# Plot confusion matrix\n",
"cm = confusion_matrix(y_test, y_pred)\n",
"print(\"\\nConfusion Matrix:\")\n",
"print(cm)\n",
"\n",
"# Display classification report\n",
"print(\"\\nClassification Report:\")\n",
"print(classification_report(y_test, y_pred))\n",
"\n",
"# Display accuracy\n",
"print(\"\\nAccuracy:\", accuracy)\n"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "aptOWq7aUOsy",
"outputId": "dcecb28c-cede-4b9d-e9c9-5fafd9d48c23"
},
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"Iris Dataset:\n",
" Id SepalLengthCm SepalWidthCm PetalLengthCm PetalWidthCm
Species\n",
"0 1 5.1 3.5 1.4 0.2 Iris-
setosa\n",
"1 2 4.9 3.0 1.4 0.2 Iris-
setosa\n",
"2 3 4.7 3.2 1.3 0.2 Iris-
setosa\n",
"3 4 4.6 3.1 1.5 0.2 Iris-
setosa\n",
"4 5 5.0 3.6 1.4 0.2 Iris-
setosa\n",
"\n",
"Correct Predictions:\n",
" Actual Predicted Correct\n",
"73 Iris-versicolor Iris-versicolor True\n",
"18 Iris-setosa Iris-setosa True\n",
"118 Iris-virginica Iris-virginica True\n",
"78 Iris-versicolor Iris-versicolor True\n",
"76 Iris-versicolor Iris-versicolor True\n",
"31 Iris-setosa Iris-setosa True\n",
"64 Iris-versicolor Iris-versicolor True\n",
"141 Iris-virginica Iris-virginica True\n",
"68 Iris-versicolor Iris-versicolor True\n",
"82 Iris-versicolor Iris-versicolor True\n",
"110 Iris-virginica Iris-virginica True\n",
"12 Iris-setosa Iris-setosa True\n",
"36 Iris-setosa Iris-setosa True\n",
"9 Iris-setosa Iris-setosa True\n",
"19 Iris-setosa Iris-setosa True\n",
"56 Iris-versicolor Iris-versicolor True\n",
"104 Iris-virginica Iris-virginica True\n",
"69 Iris-versicolor Iris-versicolor True\n",
"55 Iris-versicolor Iris-versicolor True\n",
"132 Iris-virginica Iris-virginica True\n",
"29 Iris-setosa Iris-setosa True\n",
"127 Iris-virginica Iris-virginica True\n",
"26 Iris-setosa Iris-setosa True\n",
"128 Iris-virginica Iris-virginica True\n",
"131 Iris-virginica Iris-virginica True\n",
"145 Iris-virginica Iris-virginica True\n",
"108 Iris-virginica Iris-virginica True\n",
"143 Iris-virginica Iris-virginica True\n",
"45 Iris-setosa Iris-setosa True\n",
"30 Iris-setosa Iris-setosa True\n",
"\n",
"Wrong Predictions:\n",
"Empty DataFrame\n",
"Columns: [Actual, Predicted, Correct]\n",
"Index: []\n",
"\n",
"Confusion Matrix:\n",
"[[10 0 0]\n",
" [ 0 9 0]\n",
" [ 0 0 11]]\n",
"\n",
"Classification Report:\n",
" precision recall f1-score support\n",
"\n",
" Iris-setosa 1.00 1.00 1.00 10\n",
"Iris-versicolor 1.00 1.00 1.00 9\n",
" Iris-virginica 1.00 1.00 1.00 11\n",
"\n",
" accuracy 1.00 30\n",
" macro avg 1.00 1.00 1.00 30\n",
" weighted avg 1.00 1.00 1.00 30\n",
"\n",
"\n",
"Accuracy: 1.0\n"
]
}
]
},
{
"cell_type": "code",
"source": [
"import zipfile\n",
"import pandas as pd\n",
"from sklearn.model_selection import train_test_split\n",
"from sklearn.neighbors import KNeighborsClassifier\n",
"from sklearn.metrics import accuracy_score, confusion_matrix,
classification_report\n",
"import matplotlib.pyplot as plt\n",
"import seaborn as sns\n",
"\n",
"# Extract the contents of the archive.zip file\n",
"with zipfile.ZipFile('archive.zip', 'r') as zip_ref:\n",
" zip_ref.extractall()\n",
"\n",
"# Load the Iris dataset\n",
"iris_data = pd.read_csv('Iris.csv')\n",
"\n",
"# Display the first few rows of the dataset\n",
"print(\"Iris Dataset:\")\n",
"print(iris_data.head())\n",
"\n",
"# Split data into features and target\n",
"X = iris_data.drop('Species', axis=1)\n",
"y = iris_data['Species']\n",
"\n",
"# Split the dataset into training and testing sets\n",
"X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2,
random_state=42)\n",
"\n",
"# Create a KNN classifier\n",
"knn_classifier = KNeighborsClassifier(n_neighbors=3)\n",
"\n",
"# Train the classifier on the training data\n",
"knn_classifier.fit(X_train, y_train)\n",
"\n",
"# Make predictions on the test data\n",
"y_pred = knn_classifier.predict(X_test)\n",
"\n",
"# Calculate accuracy\n",
"accuracy = accuracy_score(y_test, y_pred)\n",
"\n",
"# Display correct and wrong predictions\n",
"results = pd.DataFrame({'Actual': y_test, 'Predicted': y_pred, 'Correct':
y_test == y_pred})\n",
"print(\"\\nCorrect Predictions:\")\n",
"print(results[results['Correct']])\n",
"\n",
"print(\"\\nWrong Predictions:\")\n",
"print(results[~results['Correct']])\n",
"\n",
"# Plot confusion matrix\n",
"plt.figure(figsize=(10, 6))\n",
"sns.heatmap(confusion_matrix(y_test, y_pred), annot=True, fmt='d',
cmap='Blues', cbar=False)\n",
"plt.title('Confusion Matrix')\n",
"plt.xlabel('Predicted')\n",
"plt.ylabel('Actual')\n",
"plt.show()\n",
"\n",
"# Display classification report\n",
"print(\"\\nClassification Report:\")\n",
"print(classification_report(y_test, y_pred))\n",
"\n",
"# Display accuracy\n",
"print(\"\\nAccuracy:\", accuracy)\n",
"\n",
"# Plot correct and wrong predictions\n",
"plt.figure(figsize=(10, 6))\n",
"sns.scatterplot(x=X_test.iloc[:, 0], y=X_test.iloc[:, 1],
hue=results['Correct'], palette={True: 'green', False: 'red'})\n",
"plt.title('Correct and Wrong Predictions')\n",
"plt.xlabel(X.columns[0])\n",
"plt.ylabel(X.columns[1])\n",
"plt.show()\n"
],
"metadata": {
"id": "zSbJao-JVcj2",
"outputId": "1b95a3d2-d682-489d-ffe2-ab2048732202",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 1000
}
},
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"Iris Dataset:\n",
" Id SepalLengthCm SepalWidthCm PetalLengthCm PetalWidthCm
Species\n",
"0 1 5.1 3.5 1.4 0.2 Iris-
setosa\n",
"1 2 4.9 3.0 1.4 0.2 Iris-
setosa\n",
"2 3 4.7 3.2 1.3 0.2 Iris-
setosa\n",
"3 4 4.6 3.1 1.5 0.2 Iris-
setosa\n",
"4 5 5.0 3.6 1.4 0.2 Iris-
setosa\n",
"\n",
"Correct Predictions:\n",
" Actual Predicted Correct\n",
"73 Iris-versicolor Iris-versicolor True\n",
"18 Iris-setosa Iris-setosa True\n",
"118 Iris-virginica Iris-virginica True\n",
"78 Iris-versicolor Iris-versicolor True\n",
"76 Iris-versicolor Iris-versicolor True\n",
"31 Iris-setosa Iris-setosa True\n",
"64 Iris-versicolor Iris-versicolor True\n",
"141 Iris-virginica Iris-virginica True\n",
"68 Iris-versicolor Iris-versicolor True\n",
"82 Iris-versicolor Iris-versicolor True\n",
"110 Iris-virginica Iris-virginica True\n",
"12 Iris-setosa Iris-setosa True\n",
"36 Iris-setosa Iris-setosa True\n",
"9 Iris-setosa Iris-setosa True\n",
"19 Iris-setosa Iris-setosa True\n",
"56 Iris-versicolor Iris-versicolor True\n",
"104 Iris-virginica Iris-virginica True\n",
"69 Iris-versicolor Iris-versicolor True\n",
"55 Iris-versicolor Iris-versicolor True\n",
"132 Iris-virginica Iris-virginica True\n",
"29 Iris-setosa Iris-setosa True\n",
"127 Iris-virginica Iris-virginica True\n",
"26 Iris-setosa Iris-setosa True\n",
"128 Iris-virginica Iris-virginica True\n",
"131 Iris-virginica Iris-virginica True\n",
"145 Iris-virginica Iris-virginica True\n",
"108 Iris-virginica Iris-virginica True\n",
"143 Iris-virginica Iris-virginica True\n",
"45 Iris-setosa Iris-setosa True\n",
"30 Iris-setosa Iris-setosa True\n",
"\n",
"Wrong Predictions:\n",
"Empty DataFrame\n",
"Columns: [Actual, Predicted, Correct]\n",
"Index: []\n"
]
},
{
"output_type": "display_data",
"data": {
"text/plain": [
"<Figure size 1000x600 with 1 Axes>"
],
"image/png":
"iVBORw0KGgoAAAANSUhEUgAAA0YAAAIjCAYAAAAnagtFAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIH
ZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/
bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAuqElEQVR4nO3dZ5hV5b3/4e+AMCDSEVGjYImIgt3YjiCJPR
YkatQcBRKPDXuJJTGCHuXEWLGhsREiamLBGitRYqxREWOMsUZzBAVUUETQYf4v/
DsnE9QwyMxGnvu+Lq4rs9baa/32vNjOJ8/
ea1fV1tbWBgAAoGDNKj0AAABApQkjAACgeMIIAAAonjACAACKJ4wAAIDiCSMAAKB4wggAACieMAIAAIonjA
AAgOIJIwAWmRdffDHbbrtt2rdvn6qqqowbN26Rnv+1115LVVVVrr766kV63q+zrbbaKltttVWlxwD42hNGA
EuYl19+OQceeGBWXXXVtGrVKu3atcsWW2yR888/P7Nnz27Uaw8aNCjPPvtsTj/
99IwZMyYbbbRRo16vKQ0ePDhVVVVp167d5/4eX3zxxVRVVaWqqipnnXVWg8//5ptvZtiwYZk4ceIimBaAhl
qq0gMAsOjccccd2WOPPVJdXZ399tsvvXv3zty5c/PQQw/luOOOy3PPPZfLLrusUa49e/bsPPLII/
nJT36SQw89tFGu0b1798yePTstWrRolPP/O0sttVQ+/
PDD3Hbbbdlzzz3r7bvmmmvSqlWrfPTRRwt17jfffDPDhw9Pjx49st566y3w4+65556Fuh4A9QkjgCXEq6+
+mr322ivdu3fP+PHjs/
zyy9ftGzp0aF566aXccccdjXb9qVOnJkk6dOjQaNeoqqpKq1atGu38/051dXW22GKLXHvttfOF0dixY/
Pd7343N954Y5PM8uGHH2bppZdOy5Ytm+R6AEs6b6UDWEKceeaZ+eCDD3LFFVfUi6LPrL766jniiCPqfv7kk
09y2mmnZbXVVkt1dXV69OiRk046KXPmzKn3uB49emSnnXbKQw89lG9961tp1apVVl111fzqV7+qO2bYsGHp
3r17kuS4445LVVVVevTokeTTt6B99r//2bBhw1JVVVVv27333pv/+I//
SIcOHbLMMsukZ8+eOemkk+r2f9FnjMaPH58tt9wybdq0SYcOHbLrrrvm+eef/
9zrvfTSSxk8eHA6dOiQ9u3bZ8iQIfnwww+/+Bf7L/bZZ5/87ne/
y3vvvVe37YknnsiLL76YffbZZ77j33nnnRx77LHp06dPlllmmbRr1y477LBDnnnmmbpjHnjggWy88cZJkiF
DhtS9Je+z57nVVluld+/eefLJJ9O3b98svfTSdb+Xf/
2M0aBBg9KqVav5nv92222Xjh075s0331zg5wpQEmEEsIS47bbbsuqqq2bzzTdfoOP333///
OxnP8sGG2yQc889N/369cuIESOy1157zXfsSy+9lN133z3bbLNNzj777HTs2DGDBw/
Oc889lyQZOHBgzj333CTJ3nvvnTFjxuS8885r0PzPPfdcdtppp8yZMyennnpqzj777Oyyyy754x//+KWPu+
+++7Lddtvl7bffzrBhw3L00Ufn4YcfzhZbbJHXXnttvuP33HPPvP/+
+xkxYkT23HPPXH311Rk+fPgCzzlw4MBUVVXlpptuqts2duzYrLnmmtlggw3mO/
6VV17JuHHjstNOO+Wcc87Jcccdl2effTb9+vWri5RevXrl1FNPTZIccMABGTNmTMaMGZO+ffvWnWf69OnZY
Ycdst566+W8885L//79P3e+888/
P8suu2wGDRqUmpqaJMmll16ae+65JxdccEFWWGGFBX6uAEWpBeBrb8aMGbVJanfdddcFOn7ixIm1SWr333/
/etuPPfbY2iS148ePr9vWvXv32iS1EyZMqNv29ttv11ZXV9cec8wxddteffXV2iS1v/
jFL+qdc9CgQbXdu3efb4ZTTjml9p//
M3TuuefWJqmdOnXqF8792TWuuuqqum3rrbdebdeuXWunT59et+2ZZ56pbdasWe1+++033/V+
+MMf1jvnbrvtVtu5c+cvvOY/P482bdrU1tbW1u6+++613/nOd2pra2tra2pqart161Y7fPjwz/
0dfPTRR7U1NTXzPY/q6uraU089tW7bE088Md9z+0y/fv1qk9SOGjXqc/f169ev3ra77767Nkntf//
3f9e+8sortcsss0ztgAED/u1zBCiZFSOAJcDMmTOTJG3btl2g4+
+8884kydFHH11v+zHHHJMk830Waa211sqWW25Z9/Oyyy6bnj175pVXXlnomf/
VZ59NuuWWWzJv3rwFeszkyZMzceLEDB48OJ06darbvs4662Sbbbape57/7KCDDqr385Zbbpnp06fX/
Q4XxD777JMHHnggU6ZMyfjx4zNlypTPfRtd8unnkpo1+/Q/
tzU1NZk+fXrd2wSfeuqpBb5mdXV1hgwZskDHbrvttjnwwANz6qmnZuDAgWnVqlUuvfTSBb4WQImEEcASoF2
7dkmS999/f4GO//vf/55mzZpl9dVXr7e9W7du6dChQ/7+97/X277yyivPd46OHTvm3XffXciJ5/f9738/
W2yxRfbff/8st9xy2WuvvfKb3/zmSyPpszl79uw5375evXpl2rRpmTVrVr3t//
pcOnbsmCQNei477rhj2rZtm+uvvz7XXHNNNt544/
l+l5+ZN29ezj333Hzzm99MdXV1unTpkmWXXTaTJk3KjBkzFviaK664YoNutHDWWWelU6dOmThxYkaOHJmuX
bsu8GMBSiSMAJYA7dq1yworrJA///nPDXrcv9784Is0b978c7fX1tYu9DU++/
zLZ1q3bp0JEybkvvvuy7777ptJkybl+9//frbZZpv5jv0qvspz+Ux1dXUGDhyY0aNH5+abb/
7C1aIkOeOMM3L00Uenb9++
+fWvf52777479957b9Zee+0FXhlLPv39NMTTTz+dt99+O0ny7LPPNuixACUSRgBLiJ122ikvv/
xyHnnkkX97bPfu3TNv3ry8+OKL9ba/
9dZbee+99+ruMLcodOzYsd4d3D7zr6tSSdKsWbN85zvfyTnnnJO//OUvOf300zN+/Pj8/ve//
9xzfzbnCy+8MN++v/71r+nSpUvatGnz1Z7AF9hnn33y9NNP5/333//cG1Z85oYbbkj//
v1zxRVXZK+99sq2226brbfeer7fyYJG6oKYNWtWhgwZkrXWWisHHHBAzjzzzDzxxBOL7PwASyJhBLCE+PGP
f5w2bdpk//33z1tvvTXf/pdffjnnn39+kk/
fCpZkvjvHnXPOOUmS7373u4tsrtVWWy0zZszIpEmT6rZNnjw5N998c73j3nnnnfke+9kXnf7rLcQ/s/
zyy2e99dbL6NGj64XGn//859xzzz11z7Mx9O/fP6eddlouvPDCdOvW7QuPa968+XyrUb/97W/zv//7v/
W2fRZwnxeRDXX88cfn9ddfz+jRo3POOeekR48eGTRo0Bf+HgHwBa8AS4zVVlstY8eOzfe///306tUr+
+23X3r37p25c+fm4Ycfzm9/+9sMHjw4SbLuuutm0KBBueyyy/Lee+
+lX79+efzxxzN69OgMGDDgC28FvTD22muvHH/
88dltt91y+OGH58MPP8wll1ySNdZYo97NB0499dRMmDAh3/3ud9O9e/e8/fbbufjii/ONb3wj//Ef//
GF5//FL36RHXbYIZtttll+9KMfZfbs2bngggvSvn37DBs2bJE9j3/VrFmz/PSnP/
23x+2000459dRTM2TIkGy+
+eZ59tlnc80112TVVVetd9xqq62WDh06ZNSoUWnbtm3atGmTTTbZJKusskqD5ho/
fnwuvvjinHLKKXW3D7/qqquy1VZb5eSTT86ZZ57ZoPMBlMKKEcASZJdddsmkSZOy+
+6755ZbbsnQoUNzwgkn5LXXXsvZZ5+dkSNH1h17+eWXZ/
jw4XniiSdy5JFHZvz48TnxxBNz3XXXLdKZOnfunJtvvjlLL710fvzjH2f06NEZMWJEdt555/
lmX3nllXPllVdm6NChueiii9K3b9+MHz8+7du3/8Lzb7311rnrrrvSuXPn/OxnP8tZZ52VTTfdNH/
84x8bHBWN4aSTTsoxxxyTu++
+O0cccUSeeuqp3HHHHVlppZXqHdeiRYuMHj06zZs3z0EHHZS99947Dz74YIOu9f777+eHP/xh1l9//
fzkJz+p277lllvmiCOOyNlnn51HH310kTwvgCVNVW1DPm0KAACwBLJiBAAAFE8YAQAAxRNGAABA8YQRAABQ
PGEEAAAUTxgBAADFE0YAAEDxlqr0AI2h9Q7nVnoEYDHw7m1HVXoEAKDCWi1g8VgxAgAAiieMAACA4gkjAAC
geMIIAAAonjACAACKJ4wAAIDiCSMAAKB4wggAACieMAIAAIonjAAAgOIJIwAAoHjCCAAAKJ4wAgAAiieMAA
CA4gkjAACgeMIIAAAonjACAACKJ4wAAIDiCSMAAKB4wggAACieMAIAAIonjAAAgOIJIwAAoHjCCAAAKJ4wA
gAAiieMAACA4gkjAACgeMIIAAAonjACAACKJ4wAAIDiCSMAAKB4wggAACieMAIAAIonjAAAgOIJIwAAoHjC
CAAAKJ4wAgAAiieMAACA4gkjAACgeMIIAAAonjACAACKJ4wAAIDiCSMAAKB4wggAACieMAIAAIonjAAAgOI
JIwAAoHjCCAAAKJ4wAgAAiieMAACA4gkjAACgeMIIAAAonjACAACKJ4wAAIDiCSMAAKB4wggAACieMAIAAI
onjAAAgOIJIwAAoHjCCAAAKJ4wAgAAiieMAACA4gkjAACgeMIIAAAonjACAACKJ4wAAIDiCSMAAKB4wggAA
CieMAIAAIonjAAAgOIJI762tui9Ym4Ytmte+fV/
ZfbvjsrOm6023zEn77tZXrnmgLwz7rDcccb3stoKHZp+UKDJXTf2muywzbez8fp98oO99sizkyZVeiSgArw
W0BDCiK+tNq1a5NlXpubIi8d/
7v5j9tgoh+yyXg6/4L70PfLazPro49z23wNT3aJ5E08KNKW7fndnzjpzRA48ZGiu+
+3N6dlzzRx84I8yffr0So8GNCGvBTSUMOJr654/vZbhv3o4tz788ufuHzpgg/
z8usdz+6Ov5M+vTcv+Z92V5Tu3yS6bz7+yBCw5xoy+KgN33zMDdvteVlt99fz0lOFp1apVxt10Y6VHA5qQ1
wIaShixROrRrX2W79Qm459+vW7bzA/n5okXpmSTNVeo4GRAY/
p47tw8/5fnsulmm9dta9asWTbddPNMeubpCk4GNCWvBSyMpSp58WnTpuXKK6/
MI488kilTpiRJunXrls033zyDBw/OsssuW8nx+Brr1nHpJMnb735Yb/vb736Y5f7/
PmDJ8+5776ampiadO3eut71z58559dVXKjQV0NS8FrAwKrZi9MQTT2SNNdbIyJEj0759+/Tt2zd9+/ZN+/
btM3LkyKy55pr505/+9G/
PM2fOnMycObPev9p5nzTBMwAAAJYUFVsxOuyww7LHHntk1KhRqaqqqrevtrY2Bx10UA477LA88sgjX3qeES
NGZPjw4fW2NV9t27T45vaLfGa+Pqb8/5Wirh2XzpR3Z9Vt79px6Ux6eWqlxgIaWccOHdO8efP5Plw9ffr0d
OnSpUJTAU3NawELo2IrRs8880yOOuqo+aIoSaqqqnLUUUdl4sSJ//Y8J554YmbMmFHv31Krbd0IE/
N18tqUGZn8zqz0X2+lum1tl26ZjXt2y2N/fbOCkwGNqUXLlum11tp57NH/+z/
V5s2bl8ceeyTrrLt+BScDmpLXAhZGxVaMunXrlscffzxrrrnm5+5//PHHs9xyy/
3b81RXV6e6urretqpmFf3oFE2kTasW9b6XqMdy7bLOqsvm3fc/
yhtT389F457K8Xttkpf+97289taMnLLv5pk8fdYX3sUOWDLsO2hITj7p+Ky9du/
07rNOfj1mdGbPnp0Buw2s9GhAE/JaQENVrCCOPfbYHHDAAXnyySfzne98py6C3nrrrdx///355S9/
mbPOOqtS4/E1sME3l8s9Z+5R9/OZB26VJBlz73M54Jx7cvZv/
5SlW7XIhYdvnQ7LVOfh597MLifflDkf11RoYqApbL/
Djnn3nXdy8YUjM23a1PRcs1cuvvTydPb2GSiK1wIaqqq2tra2Uhe//
vrrc+655+bJJ59MTc2nf6w2b948G264YY4+
+ujsueeeC3Xe1jucuyjHBL6m3r3tqEqPAABUWKsFXAqqaBh95uOPP860adOSJF26dEmLFi2+0vmEEZAIIwB
gwcNosfgwTosWLbL88stXegwAAKBQFbsrHQAAwOJCGAEAAMUTRgAAQPGEEQAAUDxhBAAAFE8YAQAAxRNGAA
BA8YQRAABQPGEEAAAUTxgBAADFE0YAAEDxhBEAAFA8YQQAABRPGAEAAMUTRgAAQPGEEQAAUDxhBAAAFE8YA
QAAxRNGAABA8YQRAABQPGEEAAAUTxgBAADFE0YAAEDxhBEAAFA8YQQAABRPGAEAAMUTRgAAQPGEEQAAUDxh
BAAAFE8YAQAAxRNGAABA8YQRAABQPGEEAAAUTxgBAADFE0YAAEDxhBEAAFA8YQQAABRPGAEAAMUTRgAAQPG
EEQAAUDxhBAAAFE8YAQAAxRNGAABA8YQRAABQPGEEAAAUTxgBAADFE0YAAEDxhBEAAFA8YQQAABRPGAEAAM
UTRgAAQPGEEQAAUDxhBAAAFE8YAQAAxRNGAABA8YQRAABQPGEEAAAUTxgBAADFE0YAAEDxhBEAAFA8YQQAA
BRPGAEAAMUTRgAAQPGEEQAAUDxhBAAAFE8YAQAAxRNGAABA8YQRAABQPGEEAAAUTxgBAADFq6qtra2t9BCL
2kefVHoCYHHwjf2vq/QIQIX94/
K9Kj0CUGGtllqw46wYAQAAxRNGAABA8YQRAABQPGEEAAAUTxgBAADFE0YAAEDxhBEAAFA8YQQAABRPGAEAA
MUTRgAAQPGEEQAAUDxhBAAAFE8YAQAAxRNGAABA8YQRAABQPGEEAAAUTxgBAADFE0YAAEDxhBEAAFA8YQQA
ABRPGAEAAMUTRgAAQPGEEQAAUDxhBAAAFE8YAQAAxRNGAABA8YQRAABQPGEEAAAUTxgBAADFE0YAAEDxhBE
AAFA8YQQAABRPGAEAAMUTRgAAQPGEEQAAUDxhBAAAFE8YAQAAxRNGAABA8YQRAABQPGEEAAAUTxgBAADFE0
YAAEDxhBEAAFA8YQQAABRPGAEAAMUTRgAAQPGEEQAAUDxhBAAAFE8YAQAAxRNGAABA8YQRAABQPGEEAAAUT
xgBAADFE0YAAEDxhBEAAFA8YQQAABRPGAEAAMVbakEOuvXWWxf4hLvssstCDwMAAFAJCxRGAwYMWKCTVVVV
paam5qvMAwAA0OQWKIzmzZvX2HMAAABUjM8YAQAAxVugFaN/NWvWrDz44IN5/fXXM3fu3Hr7Dj/
88EUyGAAAQFNpcBg9/
fTT2XHHHfPhhx9m1qxZ6dSpU6ZNm5all146Xbt2FUYAAMDXToPfSnfUUUdl5513zrvvvpvWrVvn0Ucfzd//
/vdsuOGGOeussxpjRgAAgEbV4DCaOHFijjnmmDRr1izNmzfPnDlzstJKK+XMM8/
MSSed1BgzAgAANKoGh1GLFi3SrNmnD+vatWtef/31JEn79u3zxhtvLNrpAAAAmkCDP2O0/
vrr54knnsg3v/nN9OvXLz/72c8ybdq0jBkzJr17926MGQEAABpVg1eMzjjjjCy//
PJJktNPPz0dO3bMwQcfnKlTp+ayyy5b5AMCAAA0tgavGG200UZ1/7tr16656667FulAAAAATc0XvAIAAMVr
8IrRKquskqqqqi/c/
8orr3ylgeCrum7sNRl91RWZNm1q1ui5Zk446eT0WWedSo8FNJFlWi2VEwb2yXc3+Ea6tKvOs39/
Lz8Z+1SefvWdSo8GNDF/E9AQDQ6jI488st7PH3/8cZ5+
+uncddddOe644xbVXLBQ7vrdnTnrzBH56SnD06fPurlmzOgcfOCPcsvtd6Vz586VHg9oAucN+VbW/
Eb7HHLZo5ny3uzssXmP3HjcVtn8pN9lynuzKz0e0ET8TUBDVdXW1tYuihNddNFF+dOf/pSrrrpqUZzuK/
nok0pPQKX8YK89snbvPjnppz9LksybNy/bfqdf9t5n3/zovw6o8HQ0tW/
sf12lR6CJtWrRPK+N+l72HfmH3PvM5Lrt9w/bNvdNmpwRNz1bwemohH9cvlelR6BC/
E3AZ1ot4FLQIvuM0Q477JAbb7xxUZ0OGuzjuXPz/
F+ey6abbV63rVmzZtl0080z6ZmnKzgZ0FSWal6VpZo3y0dz59XbPntuTTZdY9kKTQU0NX8TsDAWWRjdcMMN
6dSp06I6HTTYu++9m5qamvmWxzt37pxp06ZVaCqgKX3w0Sd5/
MVpOXbXtdOtQ6s0q6rKHpt1z8ard85y7VtVejygifibgIWxUF/
w+s83X6itrc2UKVMyderUXHzxxYt0uDfeeCOnnHJKrrzyyi88Zs6cOZkzZ069bbXNq1NdXb1IZwHg6+GQyx
7NyB99K38+b0A+qZmXSX9/
Nzc9+nrW7dGx0qMBsBhrcBjtuuuu9cKoWbNmWXbZZbPVVltlzTXXXKTDvfPOOxk9evSXhtGIESMyfPjwett
+cvIp+enPhi3SWVj8dezQMc2bN8/06dPrbZ8+fXq6dOlSoamApvba1A+yy/
+Mz9Itm6dt6xZ5a8ZHufzgzfP3qbMqPRrQRPxNwMJocBgNGzZskV381ltv/
dL9C3Lr7xNPPDFHH310vW21za0WlahFy5bptdbaeezRR/Lt72yd5NMPWj722CPZa+//
rPB0QFP7cG5NPpxbk/ZLt0j/Pt0y/PpnKj0S0ET8TcDCaHAYNW/
ePJMnT07Xrl3rbZ8+fXq6du2ampqaBT7XgAEDUlVVlS+7Md6XfWdSklRXz/
+2OXelK9e+g4bk5JOOz9pr907vPuvk12NGZ/
bs2Rmw28BKjwY0kf69u6WqKnlp8vtZZbllMuz76+XFyTMz9iHfswcl8TcBDdXgMPqiiJkzZ05atmzZoHMtv
/zyufjii7Prrrt+7v6JEydmww03bOiIFGz7HXbMu+
+8k4svHJlp06am55q9cvGll6ezZXMoRrvWLfLTPdbNCh1b571Zc3Pbn97I6Tc+m09qFsm3UwBfE/
4moKEWOIxGjhyZ5NMVnMsvvzzLLLNM3b6amppMmDChwZ8x2nDDDfPkk09+YRj9u9Uk+Dx7/+A/s/
cPLJNDqW554o3c8sQblR4DWAz4m4CGWOAwOvfcc5N8umI0atSoNG/evG5fy5Yt06NHj4waNapBFz/
uuOMya9YXfxh29dVXz+9///sGnRMAAKChqmobuCTTv3//3HTTTenYcfG97anPGAFJ8o39r6v0CECF/
ePyvSo9AlBhrRZwKajBnzGyggMAACxpmjX0Ad/73vfy85//
fL7tZ555ZvbYY49FMhQAAEBTanAYTZgwITvuuON823fYYYdMmDBhkQwFAADQlBocRh988MHn3pa7RYsWmTl
z5iIZCgAAoCk1OIz69OmT66+/fr7t1113XdZaa61FMhQAAEBTavDNF04+
+eQMHDgwL7/8cr797W8nSe6///6MHTs2N9xwwyIfEAAAoLE1OIx23nnnjBs3LmeccUZuuOGGtG7dOuuuu27
Gjx+fTp06NcaMAAAAjarB32P0r2bOnJlrr702V1xxRZ588snU1NQsqtkWmu8xAhLfYwT4HiNgwb/
HqMGfMfrMhAkTMmjQoKywwgo5+
+yz8+1vfzuPPvrowp4OAACgYhr0VropU6bk6quvzhVXXJGZM2dmzz33zJw5czJu3Dg3XgAAAL62FnjFa
Oedd07Pnj0zadKknHfeeXnzzTdzwQUXNOZsAAAATWKBV4x+97vf5fDDD8/
BBx+cb37zm405EwAAQJNa4BWjhx56KO+//3423HDDbLLJJrnwwgszbdq0xpwNAACgSSxwGG266ab55S9/
mcmTJ+fAAw/MddddlxVWWCHz5s3Lvffem/
fff78x5wQAAGg0X+l23S+88EKuuOKKjBkzJu+991622Wab3HrrrYtyvoXidt1A4nbdgNt1A01wu+4k6dmzZ
84888z84x//yLXXXvtVTgUAAFAxX/
kLXhdHVoyAxIoRYMUIaKIVIwAAgCWBMAIAAIonjAAAgOIJIwAAoHjCCAAAKJ4wAgAAiieMAACA4gkjAACge
MIIAAAonjACAACKJ4wAAIDiCSMAAKB4wggAACieMAIAAIonjAAAgOIJIwAAoHjCCAAAKJ4wAgAAiieMAACA
4gkjAACgeMIIAAAonjACAACKJ4wAAIDiCSMAAKB4wggAACieMAIAAIonjAAAgOIJIwAAoHjCCAAAKJ4wAgA
AiieMAACA4gkjAACgeMIIAAAonjACAACKJ4wAAIDiCSMAAKB4wggAACieMAIAAIonjAAAgOIJIwAAoHjCCA
AAKJ4wAgAAiieMAACA4gkjAACgeMIIAAAonjACAACKJ4wAAIDiCSMAAKB4wggAACieMAIAAIonjAAAgOIJI
wAAoHjCCAAAKF5VbW1tbaWHWNQ+
+qTSEwAAi4OOGx9a6RGACpv99IULdJwVIwAAoHjCCAAAKJ4wAgAAiieMAACA4gkjAACgeMIIAAAonjACAAC
KJ4wAAIDiCSMAAKB4wggAACieMAIAAIonjAAAgOIJIwAAoHjCCAAAKJ4wAgAAiieMAACA4gkjAACgeMIIAA
AonjACAACKJ4wAAIDiCSMAAKB4wggAACieMAIAAIonjAAAgOIJIwAAoHjCCAAAKJ4wAgAAiieMAACA4gkjA
ACgeMIIAAAonjACAACKJ4wAAIDiCSMAAKB4wggAACieMAIAAIonjAAAgOIJIwAAoHjCCAAAKJ4wAgAAiieM
AACA4gkjAACgeMIIAAAonjACAACKJ4wAAIDiCSMAAKB4wggAACieMAIAAIonjAAAgOIJIwAAoHjCCAAAKJ4
wAgAAiieMAACA4gkjAACgeMIIAAAonjACAACKJ4wAAIDiCSMAAKB4wggAACieMAIAAIonjAAAgOIJIwAAoH
jCCAAAKJ4wAgAAiieMAACA4gkjAACgeMIIAAAonjACAACKJ4wAAIDiCSMAAKB4wggAACieMGKJc93Ya7LDN
t/Oxuv3yQ/22iPPTppU6ZGAJuZ1AMqyxQar5YbzDswr95ye2U9fmJ23Wqfe/l2/vW5uu3ho/
vH7n2f20xdmnTVWrNCkLM6EEUuUu353Z846c0QOPGRorvvtzenZc80cfOCPMn369EqPBjQRrwNQnjatq/
Ps3/43R464/nP3L926ZR6e+HJ+OnJc0w7G14owYokyZvRVGbj7nhmw2/
ey2uqr56enDE+rVq0y7qYbKz0a0ES8DkB57vnjXzL84ttz6+8/
f3X42jueyIjL7sr4R19o4sn4OhFGLDE+njs3z//
luWy62eZ125o1a5ZNN908k555uoKTAU3F6wAAC0sYscR49713U1NTk86dO9fb3rlz50ybNq1CUwFNyesAAA
ur4mE0e/bsPPTQQ/nLX/4y376PPvoov/rVr7708XPmzMnMmTPr/ZszZ05jjQsAACyBKhpGf/
vb39KrV6/07ds3ffr0Sb9+/TJ58uS6/TNmzMiQIUO+9BwjRoxI+/bt6/37xc9HNPboLIY6duiY5s2bz/
cB6+nTp6dLly4VmgpoSl4HAFhYFQ2j448/Pr17987bb7+dF154IW3bts0WW2yR119/
fYHPceKJJ2bGjBn1/h13/
ImNODWLqxYtW6bXWmvnsUcfqds2b968PPbYI1ln3fUrOBnQVLwOALCwlqrkxR9+
+OHcd9996dKlS7p06ZLbbrsthxxySLbccsv8/ve/
T5s2bf7tOaqrq1NdXV1v20efNNbELO72HTQkJ590fNZeu3d691knvx4zOrNnz86A3QZWejSgiXgdgPK0ad0
yq620bN3PPVbsnHXWWDHvzvwwb0x5Nx3bLZ2VunXM8l3bJ0nW6LFckuSt6TPz1vT3KzIzi5+KhtHs2bOz1F
L/N0JVVVUuueSSHHrooenXr1/
Gjh1bwen4Otp+hx3z7jvv5OILR2batKnpuWavXHzp5ensLTRQDK8DUJ4N1uqeey4/
ou7nM4/9XpJkzK2P5oBTfp3v9uuTX566b93+MT//YZLkv0fdmdMvvbNph2WxVVVbW1tbqYt/
61vfymGHHZZ99913vn2HHnporrnmmsycOTM1NTUNOq8VIwAgSTpufGilRwAqbPbTFy7QcRX9jNFuu+2Wa6+
99nP3XXjhhdl7771TwW4DAAAKUdEVo8ZixQgASKwYAV+TFSMAAIDFgTACAACKJ4wAAIDiCSMAAKB4wggAAC
ieMAIAAIonjAAAgOIJIwAAoHjCCAAAKJ4wAgAAiieMAACA4gkjAACgeMIIAAAonjACAACKJ4wAAIDiCSMAA
KB4wggAACieMAIAAIonjAAAgOIJIwAAoHjCCAAAKJ4wAgAAiieMAACA4gkjAACgeMIIAAAonjACAACKJ4wA
AIDiCSMAAKB4wggAACieMAIAAIonjAAAgOIJIwAAoHjCCAAAKJ4wAgAAiieMAACA4gkjAACgeMIIAAAonjA
CAACKJ4wAAIDiCSMAAKB4wggAACieMAIAAIonjAAAgOIJIwAAoHjCCAAAKJ4wAgAAiieMAACA4gkjAACgeM
IIAAAonjACAACKJ4wAAIDiCSMAAKB4wggAACieMAIAAIonjAAAgOIJIwAAoHjCCAAAKJ4wAgAAiieMAACA4
gkjAACgeMIIAAAonjACAACKJ4wAAIDiCSMAAKB4wggAACieMAIAAIonjAAAgOIJIwAAoHjCCAAAKJ4wAgAA
ildVW1tbW+khYFGaM2dORowYkRNPPDHV1dWVHgeoEK8FgNcBGkIYscSZOXNm2rdvnxkzZqRdu3aVHgeoEK8
FgNcBGsJb6QAAgOIJIwAAoHjCCAAAKJ4wYolTXV2dU045xYcsoXBeCwCvAzSEmy8AAADFs2IEAAAUTxgBAA
DFE0YAAEDxhBEAAFA8YcQS56KLLkqPHj3SqlWrbLLJJnn88ccrPRLQhCZMmJCdd945K6ywQqqqqjJu3LhKj
wQ0sREjRmTjjTdO27Zt07Vr1wwYMCAvvPBCpcdiMSeMWKJcf/
31Ofroo3PKKafkqaeeyrrrrpvtttsub7/9dqVHA5rIrFmzsu666+aiiy6q9ChAhTz44IMZOnRoHn300dx77
735+OOPs+2222bWrFmVHo3FmNt1s0TZZJNNsvHGG+fCCy9MksybNy8rrbRSDjvssJxwwgkVng5oalVVVbn5
5pszYMCASo8CVNDUqVPTtWvXPPjgg+nbt2+lx2ExZcWIJcbcuXPz5JNPZuutt67b1qxZs2y99dZ55JFHKjg
ZAFBJM2bMSJJ06tSpwpOwOBNGLDGmTZuWmpqaLLfccvW2L7fccpkyZUqFpgIAKmnevHk58sgjs8UWW6R379
6VHofF2FKVHgAAABrL0KFD8+c//
zkPPfRQpUdhMSeMWGJ06dIlzZs3z1tvvVVv+1tvvZVu3bpVaCoAoFIOPfTQ3H777ZkwYUK+8Y1vVHocFnPe
SscSo2XLltlwww1z//33122bN29e7r///my22WYVnAwAaEq1tbU59NBDc/
PNN2f8+PFZZZVVKj0SXwNWjFiiHH300Rk0aFA22mijfOtb38p5552XWbNmZciQIZUeDWgiH3zwQV566aW6n
1999dVMnDgxnTp1ysorr1zByYCmMnTo0IwdOza33HJL2rZtW/dZ4/
bt26d169YVno7Fldt1s8S58MIL84tf/
CJTpkzJeuutl5EjR2aTTTap9FhAE3nggQfSv3//+bYPGjQoV199ddMPBDS5qqqqz91+1VVXZfDgwU07DF8b
wggAACiezxgBAADFE0YAAEDxhBEAAFA8YQQAABRPGAEAAMUTRgAAQPGEEQAAUDxhBAAAFE8YAfC1N3jw4Aw
YMKDu56222ipHHnlkk8/
xwAMPpKqqKu+9916TXxuAr0YYAdBoBg8enKqqqlRVVaVly5ZZffXVc+qpp+aTTz5p1OvedNNNOe200xboWD
EDQJIsVekBAFiybb/
99rnqqqsyZ86c3HnnnRk6dGhatGiRE088sd5xc+fOTcuWLRfJNTt16rRIzgNAOawYAdCoqqur061bt3Tv3j
0HH3xwtt5669x66611b387/
fTTs8IKK6Rnz55JkjfeeCN77rlnOnTokE6dOmXXXXfNa6+9Vne+mpqaHH300enQoUM6d+6cH//
4x6mtra13zX99K92cOXNy/PHHZ6WVVkp1dXVWX331XHHFFXnttdfSv3//
JEnHjh1TVVWVwYMHJ0nmzZuXESNGZJVVVknr1q2z7rrr5oYbbqh3nTvvvDNrrLFGWrdunf79+9ebE4CvF2E
EQJNq3bp15s6dmyS5//7788ILL+Tee+/N7bffno8//jjbbbdd2rZtmz/84Q/54x//
mGWWWSbbb7993WPOPvvsXH311bnyyivz0EMP5Z133snNN9/8pdfcb7/9cu2112bkyJF5/
vnnc+mll2aZZZbJSiutlBtvvDFJ8sILL2Ty5Mk5//zzkyQjRozIr371q4waNSrPPfdcjjrqqPznf/
5nHnzwwSSfBtzAgQOz8847Z+LEidl///1zwgknNNavDYBG5q10ADSJ2tra3H///
bn77rtz2GGHZerUqWnTpk0uv/zyurfQ/
frXv868efNy+eWXp6qqKkly1VVXpUOHDnnggQey7bbb5rzzzsuJJ56YgQMHJklGjRqVu++++wuv+7e//
S2/+c1vcu+992brrbdOkqy66qp1+z97213Xrl3ToUOHJJ+uMJ1xxhm57777stlmm9U95qGHHsqll16afv36
5ZJLLslqq62Ws88+O0nSs2fPPPvss/n5z3+
+CH9rADQVYQRAo7r99tuzzDLL5OOPP868efOyzz77ZNiwYRk6dGj69OlT73NFzzzzTF566aW0bdu23jk+
+uijvPzyy5kxY0YmT56cTTbZpG7fUkstlY022mi+t9N9ZuLEiWnevHn69eu3wDO/
9NJL+fDDD7PNNtvU2z537tysv/76SZLnn3++3hxJ6iIKgK8fYQRAo+rfv38uueSStGzZMiussEKWWur//
tPTpk2besd+8MEH2XDDDXPNNdfMd55ll112oa7funXrBj/
mgw8+SJLccccdWXHFFevtq66uXqg5AFi8CSMAGlWbNm2y+uqrL9CxG2ywQa6//vp07do17dq1+9xjll9+
+Tz22GPp27dvkuSTTz7Jk08+mQ022OBzj+/Tp0/mzZuXBx98sO6tdP/ssxWrmpqaum1rrbVWqqur8/
rrr3/hSlOvXr1y66231tv26KOP/vsnCcBiyc0XAFhs/
OAHP0iXLl2y66675g9/+ENeffXVPPDAAzn88MPzj3/8I0lyxBFH5H/+538ybty4/
PWvf80hhxzypd9B1KNHjwwaNCg//OEPM27cuLpz/uY3v0mSdO/
ePVVVVbn99tszderUfPDBB2nbtm2OPfbYHHXUURk9enRefvnlPPXUU7ngggsyevToJMlBBx2UF198Mccdd1
xeeOGFjB07NldffXVj/4oAaCTCCIDFxtJLL50JEyZk5ZVXzsCBA9OrV6/86Ec/
ykcffVS3gnTMMcdk3333zaBBg7LZZpulbdu22W233b70vJdcckl23333HHLIIVlzzTXzX//
1X5k1a1aSZMUVV8zw4cNzwgknZLnllsuhhx6aJDnttNNy8sknZ8SIEenVq1e233773HHHHVlllVWSJCuvvH
JuvPHGjBs3Luuuu25GjRqVM844oxF/OwA0pqraL/
q0KgAAQCGsGAEAAMUTRgAAQPGEEQAAUDxhBAAAFE8YAQAAxRNGAABA8YQRAABQPGEEAAAUTxgBAADFE0YAA
EDxhBEAAFC8/weitTAvfGT70AAAAABJRU5ErkJggg==\n"
},
"metadata": {}
},
{
"output_type": "stream",
"name": "stdout",
"text": [
"\n",
"Classification Report:\n",
" precision recall f1-score support\n",
"\n",
" Iris-setosa 1.00 1.00 1.00 10\n",
"Iris-versicolor 1.00 1.00 1.00 9\n",
" Iris-virginica 1.00 1.00 1.00 11\n",
"\n",
" accuracy 1.00 30\n",
" macro avg 1.00 1.00 1.00 30\n",
" weighted avg 1.00 1.00 1.00 30\n",
"\n",
"\n",
"Accuracy: 1.0\n"
]
},
{
"output_type": "display_data",
"data": {
"text/plain": [
"<Figure size 1000x600 with 1 Axes>"
],
"image/png":
"iVBORw0KGgoAAAANSUhEUgAAA04AAAIjCAYAAAA0vUuxAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIH
ZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/
bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAABmD0lEQVR4nO3dd3xUVf7/8fekTfqEQCqEEHpVqkgTFVxERF
kVpShNUFx2EVFUbICuxi6iK6isgIuoqFgQRekC0pSiCNKM1ISaHlLI3N8ffpmfYxImCZO5Ka/
n4zGPdc45997PzAkL79x7z7UYhmEIAAAAAFAiL7MLAAAAAIDKjuAEAAAAAC4QnAAAAADABYITAAAAALhAcA
IAAAAAFwhOAAAAAOACwQkAAAAAXCA4AQAAAIALBCcAAAAAcIHgBAAwjcVi0dSpU80uA3/
y1zmZO3euLBaLfv/9d7fs//
fff5fFYtHcuXPdsj8A8BSCEwD8xYEDB3T33XerYcOG8vf3V2hoqLp166ZXX31VZ8+eNbu8Mtu1a5emTp3qt
n/
4etKJEydksVh07733Fum79957ZbFYNGXKlCJ9w4YNk6+vr3JycjxRpttMnTpVFovF8QoMDFTLli312GOPKS
Mjw+zyymTBggWaPn262WUAgNv4mF0AAFQmS5Ys0cCBA2W1WjVs2DC1bt1a+fn5WrdunSZNmqRffvlFb731l
tlllsmuXbs0bdo0XXnllWrQoIHZ5ZRJZGSkmjRponXr1hXpW79+vXx8fLR+/
fpi+9q1a6fAwEBPlOl2M2fOVHBwsLKysvTtt9/q6aef1sqVK7V+/
XpZLBaP1nLHHXdo0KBBslqtZdpuwYIF2rlzpyZMmODUHh8fr7Nnz8rX19eNVQJAxSM4AcD/
SUpK0qBBgxQfH6+VK1cqJibG0Tdu3Djt379fS5YsuejjGIah3NxcBQQEFOnLzc2Vn5+fvLy4IOC87t27691
331VWVpaCg4MlSdnZ2dqxY4duvfVWffHFFyosLJS3t7ckKTk5Wb/
99ptuvPHGEveZnZ2toKAgj9RfHrfccovq1KkjSRo7dqxuvvlmLVq0SBs3blSXLl2K3SYnJ6dCgqK3t7fju3
UHi8Uif39/t+0PADyFv5kB4P88//zzysrK0n//
+1+n0HRe48aNnS4ZO3funJ566ik1atRIVqtVDRo00COPPKK8vDyn7Ro0aKDrr79e33zzjTp27KiAgAC9+ea
bWr16tSwWiz744AM99thjqlu3rgIDAx2XZG3atEnXXnutbDabAgMD1bNnz2LPrhw9elR33nmnYmNjZbValZ
CQoHvuuUf5+fmaO3euBg4cKEm66qqrHJeArV69usTv4aefftKIESMclypGR0dr1KhROn36tNO485eV7d+/
XyNGjFBYWJhsNptGjhxZ5BK5vLw83XfffYqIiFBISIhuuOEGHTly5MIT8n+6d+
+uwsJCbdy40dG2adMmnTt3Tg888ICysrK0fft2R9/576h79+5Ode7atUtDhgxRrVq1HH1lncN169bpsssuk
7+/vxo2bKh333232O+vZ8+eCggIUL169fTvf/9bc+bMuaj7hK6++mpJf4R7SbryyivVunVr/
fjjj7riiisUGBioRx55RNIf3/WUKVPUuHFjWa1WxcXF6cEHHyzymUo7JyXd4/
T111+rZ8+eCgkJUWhoqDp16qQFCxY46luyZIkOHjzo+Jk7f7azpHucVq5cqR49eigoKEhhYWG68cYbtXv3b
qcxZfmZW7Zsmbp3766wsDAFBwerWbNmju8IAMqDM04A8H8WL16shg0bqmvXrqUaP3r0aM2bN0+33HKL7r//
fm3atEmJiYnavXu3Pv30U6exe/bs0eDBg3X33XdrzJgxatasmaPvqaeekp+fnx544AHl5eXJz89PK1euVN+
+fdWhQwdNmTJFXl5emjNnjq6++mqtXbtWl112mSTp2LFjuuyyy5SWlqa77rpLzZs319GjR/
Xxxx8rJydHV1xxhcaPH68ZM2bokUceUYsWLSTJ8b/FWbZsmX777TeNHDlS0dHRjssTf/
nlF23cuLHIpWK33nqrEhISlJiYqK1bt2r27NmKjIzUc8895/RdzZ8/X0OGDFHXrl21cuVK9evXr1Tf8/
mQs27dOvXu3VvSH+GoadOmateunerVq6f169erQ4cOjr4/b3fewIED1aRJEz3zzDMyDKPMc7h//
37dcsstuvPOOzV8+HC98847GjFihDp06KBWrVpJ+iPEng+okydPVlBQkGbPnl3my9z+6sCBA5Kk2rVrO9pO
nz6tvn37atCgQbr99tsVFRUlu92uG264QevWrdNdd92lFi1a6Oeff9Yrr7yivXv36rPPPnNsfzFzMnfuXI0
aNUqtWrXS5MmTFRYWpm3btmnp0qUaMmSIHn30UaWnp+vIkSN65ZVXJMlxtrA4y5cvV9+
+fdWwYUNNnTpVZ8+e1WuvvaZu3bpp69atRS4xdfUz98svv+j666/
XJZdcoieffFJWq1X79+8v9hcPAFBqBgDASE9PNyQZN954Y6nGb9+
+3ZBkjB492qn9gQceMCQZK1eudLTFx8cbkoylS5c6jV21apUhyWjYsKGRk5PjaLfb7UaTJk2MPn36GHa73d
Gek5NjJCQkGNdcc42jbdiwYYaXl5exZcuWIjWe3/ajjz4yJBmrVq0q1Wf7cy3nvf/+
+4Yk47vvvnO0TZkyxZBkjBo1ymns3//+d6N27dqO9+e/
q3/84x9O44YMGWJIMqZMmeKypsjISKNXr16O93369DFGjhxpGIZh3HrrrcbAgQMdfR07djSaNGlSpM7Bgwc
77bM8c/jnz3/ixAnDarUa999/v6PtX//
6l2GxWIxt27Y52k6fPm2Eh4cbkoykpKQLfs7zte7Zs8c4efKkkZSUZLz55puG1Wo1oqKijOzsbMMwDKNnz5
6GJGPWrFlO2//vf/8zvLy8jLVr1zq1z5o1y5BkrF+/3umzl2ZO5syZ41R7WlqaERISYnTu3Nk4e/as0/
Z//nnt16+fER8fX+QzJiUlGZKMOXPmONratm1rREZGGqdPn3a07dixw/
Dy8jKGDRtW5Ptx9TP3yiuvGJKMkydPFjk+AJQXl+oBgOS4PC4kJKRU47/66itJ0sSJE53a77//
fkkqci9UQkKC+vTpU+y+hg8f7nS/0/bt27Vv3z4NGTJEp0+f1qlTp3Tq1CllZ2erV69e+u6772S322W32/
XZZ5+pf//+6tixY5H9lncRgT/Xkpubq1OnTunyyy+XJG3durXI+LFjxzq979Gjh06fPu34Ts9/
V+PHj3ca99dFAy6kW7du2rRpkwoLC2W327Vx40bHmcFu3bo5ziTk5ORo+/
btRc42FVdnWeewZcuW6tGjh+N9RESEmjVrpt9++83RtnTpUnXp0kVt27Z1tIWHh2vo0KGl/
qyS1KxZM0VERCghIUF33323GjdurCVLljjdw2S1WjVy5Ein7T766CO1aNFCzZs3d/
zcnDp1ynGp36pVq5w+e3nmZNmyZcrMzNTDDz9c5F6l8vzMJScna/
v27RoxYoTCw8Md7ZdccomuueYaR61/5upnLiwsTJL0+eefy263l7kmACgOl+oBgKTQ0FBJUmZmZqnGHzx4U
F5eXmrcuLFTe3R0tMLCwnTw4EGn9oSEhBL39de+ffv2SfojUJUkPT1d+fn5ysjIUOvWrUtVc2mdOXNG06ZN
0wcffKATJ04UOe5f1a9f3+l9rVq1JEmpqakKDQ11fFeNGjVyGvfnyxVd6d69uz799FNt375dvr6+Sk9PV7d
u3SRJXbt21bFjx/T7778rKSlJ586dKzY4/fV7Lusc/vVznv+sqampTvssbvGGvx7DlU8+
+UShoaHy9fVVvXr1inx3klS3bl35+fk5te3bt0+7d+9WREREsfs9P58XMyfnLxt018/
d+e+5uGO3aNFC33zzTZHFPFz9zN12222aPXu2Ro8erYcffli9evXSTTfdpFtuuYWFVwCUG8EJAPRHcIqNjd
XOnTvLtF1pf8Ne3Ap6JfWd/w35Cy+84HTm4s+Cg4N15syZ0hVZRrfeequ+//
57TZo0SW3btlVwcLDsdruuvfbaYn97X9KKa8b/3UfkDn++z8nPz0/
h4eFq3ry5JKlt27YKDAzUunXrHIsnFBecSpqD0s6hJz7neVdccYVjVb2SFPd57Ha72rRpo5dffrnYbeLi4t
xSn9lczUVAQIC+++47rVq1SkuWLNHSpUv14Ycf6uqrr9a3337r1lUCAdQcBCcA+D/
XX3+93nrrLW3YsKHEJZ/Pi4+Pl91u1759+5wWWjh+/
LjS0tIUHx9f7jrOnwUIDQ11LIZQnIiICIWGhroMe2W5fCo1NVUrVqzQtGnT9MQTTzjaz58FK4/
z39WBAweczirs2bOn1Pto3769IxxZrVZ16dLF8bl8fHzUqVMnrV+/
XklJSYqMjFTTpk1LXZc75zA+Pl779+8v0l5cW0Vo1KiRduzYoV69el1w3i9mTs7/fO7cufOCZ9JK+3N3/
nsu7ti//vqr6tSpU66l4728vNSrVy/16tVLL7/8sp555hk9+uijWrVq1QX/XAFASThfDQD/
58EHH1RQUJBGjx6t48ePF+k/
cOCAXn31VUnSddddJ0maPn2605jzv+kv7epkxenQoYMaNWqkF198UVlZWUX6T548KemPfxgOGDBAixcv1g8
//FBk3Pnfvp//R2daWprLY5//Tfxfz6L89XOWRd+
+fSVJM2bMKPc+fXx81LlzZ61fv17r168vsvJh165d9d1332njxo2OS/
hcqYg57NOnjzZs2OC0PPqZM2f03nvvlXlf5XHrrbfq6NGjevvtt4v0nT17VtnZ2ZIubk7+9re/
KSQkRImJicrNzXXq+/
PPTVBQULGXdv5VTEyM2rZtq3nz5jn9jO7cuVPffvutY57KorizsefP3v51WXYAKC3OOAHA/
2nUqJEWLFig2267TS1atNCwYcPUunVr5efn6/
vvv9dHH32kESNGSJIuvfRSDR8+XG+99ZbS0tLUs2dPbd68WfPmzdOAAQN01VVXlbsOLy8vzZ49W3379lWrV
q00cuRI1a1bV0ePHtWqVasUGhqqxYsXS5KeeeYZffvtt+rZs6dj+enk5GR99NFHWrduncLCwtS2bVt5e3vr
ueeeU3p6uqxWq66++mpFRkYWOXZoaKiuuOIKPf/
88yooKFDdunX17bffOi6BK4+2bdtq8ODBeuONN5Senq6uXbtqxYoVZT4L0717d8fiBn8NR127dlViYqJjXG
lUxBw++OCDmj9/vq655hr961//
cixHXr9+fZ05c6bcC3aU1h133KGFCxdq7NixWrVqlbp166bCwkL9+uuvWrhwoeNZYhczJ6GhoXrllVc0evR
oderUyfFsrB07dignJ0fz5s2T9McvAD788ENNnDhRnTp1UnBwsPr371/
sPl944QX17dtXXbp00Z133ulYjtxms2nq1Kll/h6efPJJfffdd+rXr5/
i4+N14sQJvfHGG6pXr16pfz4AoAgzl/
QDgMpo7969xpgxY4wGDRoYfn5+RkhIiNGtWzfjtddeM3Jzcx3jCgoKjGnTphkJCQmGr6+vERcXZ0yePNlpj
GH8sZR1v379ihzn/
HLkH330UbF1bNu2zbjpppuM2rVrG1ar1YiPjzduvfVWY8WKFU7jDh48aAwbNsyIiIgwrFar0bBhQ2PcuHFG
Xl6eY8zbb79tNGzY0PD29na5NPmRI0eMv//970ZYWJhhs9mMgQMHGseOHSuyTPX5paH/
uuTzX5evNgzDOHv2rDF+/Hijdu3aRlBQkNG/f3/
j8OHDpV6O3DAM45tvvjEkGT4+Po5luc87ffq0YbFYDEnGpk2bnPpKqtMwLn4Oe/
bsafTs2dOpbdu2bUaPHj0Mq9Vq1KtXz0hMTDRmzJhhSDJSUlIu+BkvVOtfj9uqVati+/
Lz843nnnvOaNWqlWG1Wo1atWoZHTp0MKZNm2akp6c7xpV2ToqbT8MwjC++
+MLo2rWrERAQYISGhhqXXXaZ8f777zv6s7KyjCFDhhhhYWGGJMfS5MUtR24YhrF8+XKjW7dujv3179/
f2LVrV6m+n7/WuGLFCuPGG280YmNjDT8/
PyM2NtYYPHiwsXfv3gt+rwBwIRbDqIC7WgEAgMOECRP05ptvKisri4UJAKCK4h4nAADc6OzZs07vT58+rf/
973/
q3r07oQkAqjDucQIAwI26dOmiK6+8Ui1atNDx48f13//+VxkZGXr88cfNLg0AcBEITgAAuNF1112njz/
+WG+99ZYsFovat2+v//
73v7riiivMLg0AcBG4xwkAAAAAXOAeJwAAAABwgeAEAAAAAC7UuHuc7Ha7jh07ppCQkAp/
ECEAAACAysswDGVmZio2NlZeXhc+p1TjgtOxY8cUFxdndhkAAAAAKonDhw+rXr16FxxT44JTSEiIpD+
+nNDQUJOrAQAAAGCWjIwMxcXFOTLChdS44HT+8rzQ0FCCEwAAAIBS3cLD4hAAAAAA4IKpwamwsFCPP/
64EhISFBAQoEaNGumpp56Sq0dLrV69Wu3bt5fValXjxo01d+5czxQMAAAAoEYy9VK95557TjNnztS8efPUq
lUr/fDDDxo5cqRsNpvGjx9f7DZJSUnq16+fxo4dq/
fee08rVqzQ6NGjFRMToz59+nj4EwAAAACoCSyGq9M7Fej6669XVFSU/vvf/zrabr75ZgUEBGj+/
PnFbvPQQw9pyZIl2rlzp6Nt0KBBSktL09KlS10eMyMjQzabTenp6dzjBAAAgCrFMAydO3dOhYWFZpdSZfj6
+srb27vYvrJkA1PPOHXt2lVvvfWW9u7dq6ZNm2rHjh1at26dXn755RK32bBhg3r37u3U1qdPH02YMKHY8Xl
5ecrLy3O8z8jIcEvtAAAAgCfl5+crOTlZOTk5ZpdSpVgsFtWrV0/BwcEXtR9Tg9PDDz+sjIwMNW/
eXN7e3iosLNTTTz+toUOHlrhNSkqKoqKinNqioqKUkZGhs2fPKiAgwKkvMTFR06ZNq5D6AQAAAE+w2+1KSk
qSt7e3YmNj5efnV6qV4Go6wzB08uRJHTlyRE2aNCnxzFNpmBqcFi5cqPfee08LFixQq1attH37dk2YMEGxs
bEaPny4W44xefJkTZw40fH+/FrtAAAAQFWRn58vu92uuLg4BQYGml1OlRIREaHff/
9dBQUFVTc4TZo0SQ8//LAGDRokSWrTpo0OHjyoxMTEEoNTdHS0jh8/7tR2/
PhxhYaGFjnbJElWq1VWq9X9xQMAAAAe5uXF04TKyl1n5kz95nNycopMvre3t+x2e4nbdOnSRStWrHBqW7Zs
mbp06VIhNQIAAACAqcGpf//+evrpp7VkyRL9/vvv+vTTT/Xyyy/r73//
u2PM5MmTNWzYMMf7sWPH6rffftODDz6oX3/9VW+88YYWLlyo++67z4yPAAAAAKAGMPVSvddee02PP/64/
vGPf+jEiROKjY3V3XffrSeeeMIxJjk5WYcOHXK8T0hI0JIlS3Tffffp1VdfVb169TR79mye4QQAAACgwpj6
HCcz8BwnAAAAVDW5ublKSkpSQkKC/
P39y72flJQUxxVfR48eVWRkpNq2basJEyaoV69ebqz44s2dO1cTJkxQWlraRe3nQt9dlXmOEwAAAADP+P33
39WtWzeFhYXphRdeUJs2bVRQUKBvvvlG48aN06+//
lrmfebn58vPz69Ie0FBgXx9fd1RdqXBshwAAACAGxTaC3U4/bD2n9mvw+mHVWgvNLskJ//
4xz9ksVi0efNm3XzzzWratKlatWqliRMnauPGjZKkQ4cO6cYbb1RwcLBCQ0N16623Oq1oPXXqVLVt21azZ8
92OoNjsVg0c+ZM3XDDDQoKCtLTTz8tSfr888/Vvn17+fv7q2HDhpo2bZrOnTvn2F9aWpruvvtuRUVFyd/
fX61bt9aXX36p1atXa+TIkUpPT5fFYpHFYtHUqVM992UVgzNOAAAAwEU6kX1C7//8vv699t86lXNKtfxr6c
FuD2pUu1GKDIo0uzydOXNGS5cu1dNPP62goKAi/WFhYbLb7Y7QtGbNGp07d07jxo3TbbfdptWrVzvG7t+/
X5988okWLVrk9FykqVOn6tlnn9X06dPl4+OjtWvXatiwYZoxY4Z69OihAwcO6K677pIkTZkyRXa7XX379lV
mZqbmz5+vRo0aadeuXfL29lbXrl01ffp0PfHEE9qzZ48kKTg4uGK/
JBcITgAAAMBFOFtwVtM3TlfiukRHW2puqiavmKwjGUeU2CtRIdYQEyv8I+wYhqHmzZuXOGbFihX6+eeflZS
UpLi4OEnSu+++q1atWmnLli3q1KmTpD8uz3v33XcVERHhtP2QIUM0cuRIx/
tRo0bp4YcfdjyftWHDhnrqqaf04IMPasqUKVq+fLk2b96s3bt3q2nTpo4x59lsNlksFkVHR7vnS7hIXKoHA
AAAXITkrGS9tOGlYvtm/
TBLJ7JPeLiiokqzHtzu3bsVFxfnCE2S1LJlS4WFhWn37t2Otvj4+CKhSZI6duzo9H7Hjh168sknFRwc7HiN
GTNGycnJysnJ0fbt21WvXj1HaKrsOOMEAAAAXITTOaeVX5hfbF+hUajj2cfVKLyRh6ty1qRJE1kslnItAPF
XxV3qV1x7VlaWpk2bpptuuqnIWH9/fwUEBFx0LZ7EGScAAADgIgT4XjgABPkWHzQ8KTw8XH369NF//
vMfZWdnF+lPS0tTixYtdPjwYR0+fNjRvmvXLqWlpally5ZlPmb79u21Z88eNW7cuMjLy8tLl1xyiY4cOaK9
e/cWu72fn58KCyvPAhsEJwAAAOAiRAZGqnVk62L7GtZqWCkWh5Ck//
znPyosLNRll12mTz75RPv27dPu3bs1Y8YMdenSRb1791abNm00dOhQbd26VZs3b9awYcPUs2fPIpfhlcYTT
zyhd999V9OmTdMvv/
yi3bt364MPPtBjjz0mSerZs6euuOIK3XzzzVq2bJmSkpL09ddfa+nSpZKkBg0aKCsrSytWrNCpU6eUk5Pj1
u+jrAhOAAAAwEWIDI7UwlsWKjrYeRGDOoF19NltnykmJMakypw1bNhQW7du1VVXXaX7779frVu31jXXXKMV
K1Zo5syZslgs+vzzz1WrVi1dccUV6t27txo2bKgPP/ywXMfr06ePvvzyS3377bfq1KmTLr/
8cr3yyiuKj493jPnkk0/UqVMnDR48WC1bttSDDz7oOMvUtWtXjR07VrfddpsiIiL0/
PPPu+V7KC+LUZo7xaqRsjwdGAAAACitw+mHtfPETu04vkOtIlrp0uhLVd9W3y37zs3NVVJSktOzk1A6F/
ruypINWBwCAAAAcIM4W5zibHHq26Sv2aWgAnCpHgAAAAC4QHACAAAAABcITgAAAADgAsEJAAAAAFwgOAEAA
ACACwQnAAAAAHCB4AQAAAAALhCcAAAAAMAFghMAAAAAuEBwAgAAAOB2Fovlgq+pU6eaXWKZ+JhdAAAAAADP
KLQXau2htUrOTFZMSIx61O8hby/vCjlWcnKy478//
PBDPfHEE9qzZ4+jLTg42PHfhmGosLBQPj6VN55wxgkAAACoARbtXqQGrzbQVfOu0pBFQ3TVvKvU4NUGWrR7
UYUcLzo62vGy2WyyWCyO97/+
+qtCQkL09ddfq0OHDrJarVq3bp1GjBihAQMGOO1nwoQJuvLKKx3v7Xa7EhMTlZCQoICAAF166aX6+OOPK+Q
z/FnljXQAAAAA3GLR7kW6ZeEtMmQ4tR/
NOKpbFt6ij2/9WDe1uMnjdT388MN68cUX1bBhQ9WqVatU2yQmJmr+/PmaNWuWmjRpou++
+0633367IiIi1LNnzwqrleAEAAAAVGOF9kLdu/
TeIqFJkgwZssiiCUsn6MZmN1bYZXslefLJJ3XNNdeUenxeX
p6eeeYZLV+
+XF26dJEkNWzYUOvWrdObb75JcAIAAABQPmsPrdWRjCMl9hsydDjjsNYeWqsrG1zpucIkdezYsUzj9+/
fr5ycnCJhKz8/X+3atXNnaUUQnAAAAIBqLDkz2fWgMoxzp6CgIKf3Xl5eMgznM2MFBQWO/
87KypIkLVmyRHXr1nUaZ7VaK6jKPxCcAAAAcFFSz6aqwF6gWv615Ovta3Y5+IuYkBi3jqtIERER2rlzp1Pb
9u3b5ev7x89Vy5YtZbVadejQoQq9LK84BCcAAACUS0pWitYcXKOXN7yszLxM/b353zW6/
Wgl1EowuzT8SY/
6PVQvtJ6OZhwt9j4niyyqF1pPPer3MKE6Z1dffbVeeOEFvfvuu+rSpYvmz5+vnTt3Oi7DCwkJ0QMPPKD77r
tPdrtd3bt3V3p6utavX6/
Q0FANHz68wmpjOXIAAACU2YmsE7rny3s06ONB2nx0s3af2q1n1j2jTm930v4z+80uD3/
i7eWtV699VdIfIenPzr+ffu10jy8MUZw+ffro8ccf14MPPqhOnTopMzNTw4YNcxrz1FNP6fHHH1diYqJatG
iha6+9VkuWLFFCQsUGdovx14sIq7mMjAzZbDalp6crNDTU7HIAAACqpO8Pf69u73Qrtm/
YpcM0s99MBfoGeriq6is3N1dJSUlKSEiQv79/
ufaxaPci3bv0XqeFIuJC4zT92ummLEXuKRf67sqSDbhUDwAAAGU2/6f5JfZ9uPNDPX310wSnSuamFjfpxmY
3au2htUrOTFZMSIx61O9RKc40VQUEJwAAAJSZt6Xkf2zzD/
HKy9vL2+NLjlcX3OMEAACAMrvj0jtK7Lu9ze2qE1jHg9UAFY/
gBAAAgDJrWKuh7rikaHiKCY7RQ90fkr9P+e7DASorLtUDAABAmdUJrKMXr3lRQ9oM0fSN05Wel66BLQfq5h
Y3Kz4s3uzyqq0atq6bW7jrOyM4AQAAoFwigyN1beNr1b1+d50rPKdQ/
1B5WbigqSKcfwBsTk6OAgICTK6masnPz5ckeXtf3L13BCcAAABclGC/
YLNLqPa8vb0VFhamEydOSJICAwNlsVhcbAW73a6TJ08qMDBQPj4XF30ITgAAAEAVEB0dLUmO8ITS8fLyUv3
69S86aBKcAAAAgCrAYrEoJiZGkZGRKigoMLucKsPPz09eXhd/CSnBCQAAAKhCvL29L/
p+HZQdd+8BAAAAgAsEJwAAAABwgeAEAAAAAC4QnAAAAADABYITAAAAALhAcAIAAAAAFwhOAAAAAOACwQkAA
AAAXCA4AQAAAIALBCcAAAAAcIHgBAAAAAAuEJwAAAAAwAWCEwAAAAC4YGpwatCggSwWS5HXuHHjih0/
d+7cImP9/
f09XDUAAACAmsbHzINv2bJFhYWFjvc7d+7UNddco4EDB5a4TWhoqPbs2eN4b7FYKrRGAAAAADA1OEVERDi9
f/bZZ9WoUSP17NmzxG0sFouio6MrujQAAAAAcKg09zjl5+dr/
vz5GjVq1AXPImVlZSk+Pl5xcXG68cYb9csvv1xwv3l5ecrIyHB6AQAAAEBZVJrg9NlnnyktLU0jRowocUyz
Zs30zjvv6PPPP9f8+fNlt9vVtWtXHTlypMRtEhMTZbPZHK+4uLgKqB4AAABAdWYxDMMwuwhJ6tOnj/z8/
LR48eJSb1NQUKAWLVpo8ODBeuqpp4odk5eXp7y8PMf7jIwMxcXFKT09XaGhoRddNwAAAICqKSMjQzabrVTZ
wNR7nM47ePCgli9frkWLFpVpO19fX7Vr10779+8vcYzVapXVar3YEgEAAADUYJXiUr05c+YoMjJS/
fr1K9N2hYWF+vnnnxUTE1NBlQEAAABAJQhOdrtdc+bM0fDhw+Xj43wCbNiwYZo8ebLj/ZNPPqlvv/1Wv/
32m7Zu3arbb79dBw8e1OjRoz1dNgAAAIAaxPRL9ZYvX65Dhw5p1KhRRfoOHTokL6//
n+1SU1M1ZswYpaSkqFatWurQoYO+//
57tWzZ0pMlAwAAAKhhKs3iEJ5SlhvAAAAAAFRfZckGpl+qBwAAAACVHcEJAAAAAFwgOAEAAACACwQnAAAAA
HCB4AQAAAAALhCcAAAAAMAFghMAAAAAuEBwAgAAAAAXCE4AAAAA4ALBCQAAAABcIDgBAAAAgAsEJwAAAABw
geAEAAAAAC4QnAAAAADABYITAAAAALhAcAIAAAAAFwhOAAAAAOACwQkAAAAAXCA4AQAAAIALBCcAAAAAcIH
gBAAAAAAuEJwAAAAAwAWCEwAAAAC4QHACAAAAABcITgAAAADgAsEJAAAAAFwgOAEAAACACwQnAAAAAHCB4A
QAAAAALhCcAAAAAMAFghMAAAAAuEBwAgAAAAAXCE4AAAAA4ALBCQAAAABcIDgBAAAAgAsEJwAAAABwgeAEA
AAAAC4QnAAAAADABYITAAAAALhAcAIAAAAAFwhOAAAAAOACwQkAAAAAXCA4AQAAAIALBCcAAAAAcIHgBAAA
AAAuEJwAAAAAwAWCEwAAAAC4QHACAAAAABcITgAAAADgAsEJAAAAAFwgOAEAAACACwQnAAAAAHCB4AQAAAA
ALhCcAAAAAMAFghMAAAAAuGBqcGrQoIEsFkuR17hx40rc5qOPPlLz5s3l7+
+vNm3a6KuvvvJgxQAAAABqIlOD05YtW5ScnOx4LVu2TJI0cODAYsd///
33Gjx4sO68805t27ZNAwYM0IABA7Rz505Plg0AAACghrEYhmGYXcR5EyZM0Jdffql9+/bJYrEU6b/
tttuUnZ2tL7/80tF2+eWXq23btpo1a1apjpGRkSGbzab09HSFhoa6rXYAAAAAVUtZskGluccpPz9f8+fP16
hRo4oNTZK0YcMG9e7d26mtT58+2rBhQ4n7zcvLU0ZGhtMLAAAAAMqi0gSnzz77TGlpaRoxYkSJY1JSUhQVF
eXUFhUVpZSUlBK3SUxMlM1mc7zi4uLcVTIAAACAGqLSBKf//ve/
6tu3r2JjY92638mTJys9Pd3xOnz4sFv3DwAAAKD68zG7AEk6ePCgli9frkWLFl1wXHR0tI4fP+7Udvz4cUV
HR5e4jdVqldVqdUudAAAAAGqmSnHGac6cOYqMjFS/
fv0uOK5Lly5asWKFU9uyZcvUpUuXiiwPAAAAQA1nenCy2+2aM2eOhg8fLh8f5xNgw4YN0+TJkx3v7733Xi1
dulQvvfSSfv31V02dOlU//PCD/vnPf3q6bAAAAAA1iOnBafny5Tp06JBGjRpVpO/QoUNKTk52vO/
atasWLFigt956S5deeqk+/
vhjffbZZ2rdurUnSwYAAABQw1Sq5zh5As9xAgAAACBV0ec4AQAAAEBlVSlW1QMAAABQ+aTnpivvXJ5C/
UPl7+NvdjmmIjgBAAAAcHI657R+TP5Rz657VslZybqi/
hWa2GWiGtZqKF9vX7PLMwXBCQAAAIBDem66Xt74sp5Z+4yj7ddTv2rejnlaO3KtOtXtZGJ15uEeJwAAAAAO
KVkpTqHpvLzCPN395d06mX3ShKrMR3ACAAAA4LDxyMYS+7albFNqbqoHq6k8CE4AAAAAHLwsF44IFlk8VEn
lQnACAAAA4HB5vctLDEed63ZWeEC4hyuqHAhOAAAAAByig6P1bO9ni7QH+QbpzevfVO3A2iZUZT5W1QMAAA
DgEGIN0Zj2Y9Sjfg+9uOFFHc04qqsTrtad7e5Ug7AGZpdnGothGIbZRXhSRkaGbDab0tPTFRoaanY5AAAAQ
KWVU5CjvHN5CvELkY939TvnUpZsUP0+PQAAAAC3CPQNVKBvoNllVArc4wQAAAAALhCcAAAAAMAFghMAoFoz
DEO5BbkqtBeaXQoAVGvV/f9ruccJAFAtFdoL9Xva7/rwlw/13cHv1Kx2M93V4S4lhCUo0I/
r9QHAXX5P+11f7PlCX+//WnGhcfpHx3+oYa2GCvWvXguxsaoeAKBa2pa8TT3m9FB2QbajzcvipYW3LFT/
Zv3l5+1nYnUAUD38eupXdX+nu06fPe3U/ka/N3THJXco2C/
YpMpKpyzZgEv1AADVzvGs47r909udQpMk2Q27hn02TMcyj5lUGQBUH6lnU/Wvr/5VJDRJ0j+/
+qdSslJMqKriEJwAANXO6bOntevkrmL7cgpydODMAQ9XBADVz5mzZ7Q8aXmxfXbDru8Pf+/
hiioWwQkAUO24ujk5rzDPQ5UAQPVVaFz4/2vPFpz1UCWeQXACAFQ74QHhig2JLbbP2+KtZrWbebgiAKh+wv
zD1CayTYn93et392A1FY/gBACodmJDYvXm9W/
KIkuRvkd7PKqooCgTqgKA6iUyKFKzrp8lH6+iC3Xf2e5OxYTEmFBVxSE4AQCqHYvFoisbXKlNozfp2kbXKj
IoUp1iO+mLQV/oX53/
pWBr5V7lCQCqivYx7bX1rq26ucXNigqK0iVRl2jBTQv0TK9nFB4QbnZ5bsVy5ACAai09N11Z+Vny9/
FX7cDaZpcDANVSZl6mMvMz5evlq4igCLPLKbWyZAMegAsAqNZs/jbZ/
G1mlwEA1VqINUQh1hCzy6hQXKoHAAAAAC4QnAAAAADABYITAAAAALjAPU4AAAAekl+YryMZR7TswDLtO7NP
Per3UIeYDqpnq2d2aUCFO5NzRoczDmvR7kU6Zz+nAS0GqIGtQZVZTIJV9QAAADzgXOE5rT20Vte+d63yC/
Md7fVC62n18NVqFN7IxOqAinUq55Se/u5pTd803al9YMuBeq3va4oKNuf5emXJBlyqBwAA4AFHM4/
qhg9ucApNknQk44ju+vIupZ5NNakyoOL9cuKXIqFJkj7a9ZFWH1zt8XrKg+AEAADgAXtP71VWflaxfSuTVu
pUzikPVwR4xtmCs5q+cXqJ/S9+/
6JO55z2XEHlRHACAADwgNTcC59RyivM81AlgGcV2At0+mzJwSj1bKoK7AUerKh8yr04xJYtW7Rq1SqdOHFC
drvdqe/ll1++6MIAAACqkzaRbUrsiwqKUph/mOeKATwoxC9Ef2/+d609tLbY/uuaXKda/
rU8XFXZlSs4PfPMM3rsscfUrFkzRUVFyWKxOPr+/N8AAAD4Q1RwlAa3Hqz3d75fpO/
Fv72o2JBYE6oCKp7FYtHfW/xdz61/
Tsezjzv1hfiFaHzn8bL6WE2qrvTKtapeVFSUnnvuOY0YMaICSqpYrKoHAADMkpKVonnb5+nFDS/
qVM4pNa/TXC9c84K61+/
OGSdUewfOHNDjqx7XR7s+kt2wq1+Tfnq297NqXqe5vCzm3EFUlmxQruAUExOj7777Tk2aNCl3kWYhOAEAAD
MV2guVkpWiAnuBAnwCTFuGGTBDdn72H/c7GVJYQJhCreb+e7zClyO/77779J///
KdcxQEAANRk3l7eqhtaVw3CGhCaUOME+QWpvq2+6ofVNz00lVW57nF64IEH1K9fPzVq1EgtW7aUr6+vU/
+iRYvcUhwAAAAAVAblCk7jx4/XqlWrdNVVV6l27dosCAEAAACgWitXcJo3b54+
+eQT9evXz931AAAAAEClU657nMLDw9WoUSN31wIAAAAAlVK5gtPUqVM1ZcoU5eTkuLseAAAAAKh0ynWp3ow
ZM3TgwAFFRUWpQYMGRRaH2Lp1q1uKAwAAAIDKoFzBacCAAW4uAwAAAAAqr3I9ALcq4wG4AAAAAKQKfABuam
qqXnvtNWVkZBTpS09PL7EPAAAAAKqyMgWn119/
Xd99912xacxms2nt2rV67bXX3FYcAAAAAFQGZQpOn3zyicaOHVti/913362PP/
74oosCAAAAgMqkTMHpwIEDatKkSYn9TZo00YEDBy66KAAAAACoTMoUnLy9vXXs2LES+48dOyYvr3I9GgoAA
AAAKq0ypZx27drps88+K7H/008/Vbt27S62JgAAAACoVMr0HKd//
vOfGjRokOrVq6d77rlH3t7ekqTCwkK98cYbeuWVV7RgwYIKKRQAAAAAzFLm5zg9+uijSkxMVEhIiBo2bChJ
+u2335SVlaVJkybp2WefrZBC3YXnOAEAAACQypYNyvUA3M2bN+u9997T/
v37ZRiGmjZtqiFDhuiyyy4rd9GeQnACAACllZ6brhPZJ3Q8+7hC/
UIVFRylqOAojxw7Kz9Lx7OOKzkrWUG+QYoKjlJsSKxHjg3UFGXJBmW6VO+8yy67zG0h6ejRo3rooYf09ddf
KycnR40bN9acOXPUsWPHYsevXr1aV111VZH25ORkRUdHu6UmAACA5MxkTVo2SQt+XiBDf/
yeuXmd5vr8ts/
VtE7TCj32iawTemrtU3pjyxuyG3ZJUoOwBvp80OdqE9lGFoulQo8PoKhyBSdJSktL0+bNm3XixAnZ7Xanvm
HDhpVqH6mpqerWrZuuuuoqff3114qIiNC+fftUq1Ytl9vu2bPHKRVGRkaW7QMAAACUIPdcrp5f/7ze+/
k9p/ZfT/
2qa+Zfo+9Hfa+6oXUr5NiF9kK9+9O7en3z607tv6f9rqvmXaWtd21VfFh8hRwbQMnKFZwWL16soUOHKisrS
6GhoU6/9bBYLKUOTs8995zi4uI0Z84cR1tCQkKpto2MjFRYWJjLcXl5ecrLy3O8z8jIKNX+AQBAzZWcmaxZ
P84qtu9Q+iElpSVVWHBKzkzWs+uKv2f8zNkz2payjeAEmKBcD126//77NWrUKGVlZSktLU2pqamO15kzZ0q
9ny++
+EIdO3bUwIEDFRkZqXbt2untt98u1bZt27ZVTEyMrrnmGq1fv77EcYmJibLZbI5XXFxcqesDAAA1U05BjnL
P5ZbYf+DMgQo7dm5hrk6fPV1i/y8nfqmwYwMoWbmC09GjRzV+/HgFBgZe1MF/+
+03zZw5U02aNNE333yje+65R+PHj9e8efNK3CYmJkazZs3SJ598ok8+
+URxcXG68sortXXr1mLHT548Wenp6Y7X4cOHL6pmAABQ/QX7BSvIN6jE/ia1m1TYsf19/
BUVVPICFJdGX1phxwZQsnKtqnfTTTdp0KBBuvXWWy/q4H5+furYsaO+//
57R9v48eO1ZcsWbdiwodT76dmzp+rXr6///e9/
Lseyqh4AAHAl71yenlzzpJ5Z90yRvibhTbRmxBrFhMRUyLHthl2zfpilcV+NK9IXFRSlLWO2KM7GFTSAO1T
IqnpffPGF47/79eunSZMmadeuXWrTpo18fX2dxt5www2l2mdMTIxatmzp1NaiRQt98sknpS1L0h+r/
K1bt65M2wAAAJTE6mPVvzr/Sxl5GZr14yyds5+TJF1W9zItuGlBhYUmSfKyeGlgy4FKyUrR8+ufV17hH/
dqt45srYW3LCQ0ASYp9RknL6/
SXdVnsVhUWFhYqrFDhgzR4cOHtXbtWkfbfffdp02bNjmdhXLlmmuuUUhIiBYtWuRyLGecAABAaWXnZyslK0
Vncs8o2DdYEUERqhNYxyPHzj2Xq+TMZJ0+e1oBPgGKCIxQZDCrCAPuVCFnnP665Lg73HffferataueeeYZ3
Xrrrdq8ebPeeustvfXWW44xkydP1tGjR/Xuu+9KkqZPn66EhAS1atVKubm5mj17tlauXKlvv/
3W7fUBAICaLcgvSI3CG6mRGnn82P4+/
kqolaCEWqVbcRhAxSrX4hDvvvuu0xLf5+Xn5zsCTml06tRJn376qd5//321bt1aTz31lKZPn66hQ4c6xiQn
J+vQoUNOx7j//
vvVpk0b9ezZUzt27NDy5cvVq1ev8nwUAAAAAHCpXItDeHt7Kzk5uchDZ0+fPq3IyMhSX6pnBi7VAwAAACCV
LRuU64yTYRhOD70978iRI7LZbOXZJQAAAABUWqW+x0mS2rVrJ4vFIovFol69esnH5/9vXlhYqKSkJF177bV
uLxIAAADwhGOZx3Tm7BlJUp3AOooOjr6o/RUUFuhY5jGl5aYpwPePRT5qBdRyR6nwsDIFpwEDBkiStm/
frj59+ig4ONjR5+fnpwYNGujmm292a4EAAABARcs9l6uNRzZq5Ocj9Xva75KkRrUaad6AeepUt5P8vP3KvM
9TOac0b8c8TVs9TZn5mZKkqxOu1uz+s1n0owoq1z1O8+bN02233SZ/f/+KqKlCcY8TAAAA/
uqXE7+o7ZttHc/sOs/P208/jf1Jzeo0K9P+7IZdb//
4tsYuGVukr3F4Y60ZvkaxobEXVTMuXoXf4zR8+PAqGZoAAACAvzpbcFYvfv9ikdAkSfmF+Xp98+vKL8wv0z
6PZR7TE6ufKLZv/5n92ntmb7lqhXnKFZxq1aql8PDwIq/
atWurbt266tmzp+bMmePuWgEAAAC3y8rP0uZjm0vs33Bkg7Lyssq0z7MFZ3Ui+0SJ/
duSt5VpfzBfuYLTE088IS8vL/Xr10/
Tpk3TtGnT1K9fP3l5eWncuHFq2rSp7rnnHr399tvurhcAAABwqwDfACWElXzPUaPwRgrwDSjTPv28/
RTkG3TBfaJqKdPiEOetW7dO//73vzV2rPM1m2+++aa+/
fZbffLJJ7rkkks0Y8YMjRkzxi2FAgAAABUh2C9Yk7tP1pJ9S4rtf6DrA2UOTjEhMbqn4z16ccOLRfrC/
MN0adSl5aoV5inXGadvvvlGvXv3LtLeq1cvffPNN5Kk6667Tr/
99tvFVQcAAAB4QKvIVppx7Qz5evk62vy8/
fR2/7fVLLxsC0Oc33Zil4m6qcVNTu2RQZFaMWyF4mxxF10zPKtcZ5zCw8O1ePFi3XfffU7tixcvVnh4uCQp
OztbISEhF18hAAAAUMHC/MN0Z/s71a9pP+09vVdeFi81CW+i6ODoMp9tOi8mJEZvX/+2/
n3Vv7XvzD7VDqit+LB41Q2pK4vF4uZPgIpWruD0+OOP65577tGqVat02WWXSZK2bNmir776SrNmzZIkLVu2
TD179nRfpQAAAEAFCvQNVMNaDdWwVkO37TM8MFzhgeFqEdHCbfuEOcr1HCdJWr9+vV5//
XXt2bNHktSsWTP961//UteuXd1aoLvxHCcAAAAAUtmyQbmDU1VFcAIAAAAglS0blOtSPUmy2+3av3+/
Tpw4Ibvd7tR3xRVXlHe3AAAAAFDplCs4bdy4UUOGDNHBgwf11xNWFotFhYWFbikOAKqC1LOpSs1NlSSFB4Q
rzD/
M3IIAAIDblSs4jR07Vh07dtSSJUsUExPDqiAAaqRCe6F2n9qtf371T605uEaS1Cuhl1699lW1iGghL0u5nv
gAAAAqoXLd4xQUFKQdO3aocePGFVFTheIeJwDusv/
MfrV7s52y8rOc2kOtodp611aeCg8AQCVXlmxQrl+Hdu7cWfv37y9XcQBQHeQX5uuNLW8UCU2SlJGXoXe2va
NzhedMqAwAAFSEcl2q969//Uv333+/UlJS1KZNG/n6+jr1X3LJJW4pDgAqq/TcdC37bVmJ/
d8c+Eb3d71f4QHhHqwKAABUlHIFp5tvvlmSNGrUKEebxWKRYRgsDgGgRvDz9lNEYESJ/
VHBUfLz9vNgRQAAoCKVKzglJSW5uw4AqFJs/
jY91O0hrfp9VbH9D3R5QMF+wR6uCgAAVJRyBaf4+Hh31wEAVU6H2A6a0HmCpm+a7tQ+qeskXRLFJcsAAFQn
5VpVT5L+97//
adasWUpKStKGDRsUHx+v6dOnKyEhQTfeeKO763QbVtUD4E6pZ1N1LPOYlv+2XBaLRdc0vEYxITE8ywkAgCq
gwlfVmzlzpiZOnKjrrrtOaWlpjnuawsLCNH369PLsEgCqpFoBtdQqspXuvfxeje88Xi0iWhCaAACohsoVnF
577TW9/fbbevTRR+Xt7e1o79ixo37++We3FQcAAAAAlUG5glNSUpLatWtXpN1qtSo7O/
uiiwIAAACAyqRcwSkhIUHbt28v0r506VK1aNHiYmsCAAAAgEqlXKvqTZw4UePGjVNubq4Mw9DmzZv1/
vvvKzExUbNnz3Z3jQCASuhc4Tkdzz4uQ4bC/MNYfh0AUK2VKziNHj1aAQEBeuyxx5STk6MhQ4YoNjZW
r776qgYNGuTuGgEAlcyRjCN6+8e3NfOHmcouyNZ1ja/Tk1c9qSa1m8jHq1x/
tQAAUKmVezny83JycpSVlaXIyEjl5ORo+/
bt6tq1q7vqczuWIweAi3Ms85iuX3C9tqVsc2oP9A3UD2N+UIsILtkGAFQNFb4c+Z8FBgYqMjJSkrRv3z716
NHjYncJAKjEtiVvKxKaJCmnIEdTVk9RVn6WCVUBAFCxLjo4AQBqlgU/
Lyixb8m+JUrLTfNcMQAAeAjBCQBQJuEB4SX2BfsFy4u/WgAA1RB/
uwEAymRE2xEl9o3tMFaRQZGeKwYAAA8p09JHX3zxxQX7k5KSLqoYAEDll1ArQZO7T1biukSn9rbRbTWmwxj
5eLOqHgCg+inTqnpeXq5PUFksFhUWFl5UURWJVfUA4OKdOXtGv6f9rjnb5ujM2TMa0maI2sW0U2xIrNmlAQ
BQamXJBmX6taDdbr+owgAA1UN4QLjCA8LVPqa92aUAAOAR3OMEAAAAAC6U+oyTq/ub/
uyGG24oVzEAAAAAUBmVOjgNGDCgVOMq+z1OAAAAAFBWpQ5O3N8EADDLqZxTMgxDtQNry8vCVeYA3KOgsECp
uany9fJVrYBaZpeDSo41YwEAldbRjKNasm+JZv4wU+fs5zTs0mG6rdVtqm+rb3ZpAKowwzCUlJakt358S1/
s+UI2f5vu73K/etTvoajgKLPLQyVVpuXI/
yw7O1tr1qzRoUOHlJ+f79Q3fvx4txRXEViOHACqhqMZRzXgwwH64dgPTu0JYQlaPWI14QlAue09vVeXz75c
qbmpTu23tLxFb1z3hiKCIkyqDJ5WYcuRn7dt2zZdd911ysnJUXZ2tsLDw3Xq1CkFBgYqMjKyUgcnAEDVsPb
Q2iKhSZKS0pL03k/v6cFuD8rby9uEygBUZVn5WXp81eNFQpMkfbzrY03qOonghGKV60Lx++67T/
3791dqaqoCAgK0ceNGHTx4UB06dNCLL77o7hoBADVMVn6WZm+dXWL/
vB3zdCrnlAcrAlBdpJ5N1aLdi0rs/3Dnhx6sBlVJuYLT9u3bdf/998vLy0ve3t7Ky8tTXFycnn/
+eT3yyCPurhEAUMNYZLngIhBeFi9ZZPFgRQCqkwv9/
wtnslGScgUnX19feXn9sWlkZKQOHTokSbLZbDp8+LD7qgMA1EhBfkG6p+M9JfaPaT9GdYLqeLAiANVF7cDa
uq3VbSX2X6gPNVu5glO7du20ZcsWSVLPnj31xBNP6L333tOECRPUunVrtxYIAKiZLq93ua6Mv7JIe4s6LTS
w5UCWJQdQLoG+gZrSc4qigoqunndnuzsVHxZvQlWoCsq1qt4PP/ygzMxMXXXVVTpx4oSGDRum77//
Xk2aNNE777yjSy+9tCJqdQtW1QOAqiM5M1nrD6/X65tf1zn7OY1qN0p/a/
Q31QutZ3ZpAKq4g2kHtXDXQi3avUhh1jDd1+U+tYtux8IQNUxZskG5lyOvqghOAFD1ZORlyDAM2fxtZpcCo
BqxG3Zl5GbIx9tHwX7BZpcDE1T4cuTnnThxQnv27JEkNW/
eXBERJHQAgPuFWvlFFwD387J4KSwgzOwyUEWU6wLxzMxM3XHHHapbt6569uypnj17KjY2VrfffrvS09PdXS
MAAAAAmKpcwWn06NHatGmTvvzyS6WlpSktLU1ffvmlfvjhB919993urhEAAAAATFWue5yCgoL0zTffqHv37
k7ta9eu1bXXXqvs7Gy3Fehu3OMEAChJ/
rl8ySL5efuZXQoAwAPKkg3Kdcapdu3astmK3qBrs9lUq1atMu3r6NGjuv3221W7dm0FBASoTZs2+uGHHy64
zerVq9W+fXtZrVY1btxYc+fOLdMxAQD4s+TMZH2x5wvd8tEtGvTxIH174FulZKWYXRYAoBIpV3B67LHHNHH
iRKWk/P+/VFJSUjRp0iQ9/vjjpd5PamqqunXrJl9fX3399dfatWuXXnrppQuGr6SkJPXr109XXXWVtm/
frgkTJmj06NH65ptvyvNRAAA13NGMo7pl4S268YMbtXjvYn3666fqM7+P7lp8F+EJAOBQrkv12rVrp/
379ysvL0/169eXJB06dEhWq1VNmjRxGrt169YS9/Pwww9r/fr1Wrt2bamP/
dBDD2nJkiXauXOno23QoEFKS0vT0qVLXW7PpXoAgD97e+vbumvxXcX2fTHoC/Vv1t/
DFQEAPKXClyMfMGBAeTYr4osvvlCfPn00cOBArVmzRnXr1tU//
vEPjRkzpsRtNmzYoN69ezu19enTRxMmTCh2fF5envLy8hzvMzIy3FI7AKDqO5V9Sv/Z/J8S+1/b/
JquTrhaQX5BHqwKAFAZlSs4TZkyxS0H/
+233zRz5kxNnDhRjzzyiLZs2aLx48fLz89Pw4cPL3ablJQURUVFObVFRUUpIyNDZ8+eVUBAgFNfYmKipk2b
5pZ6AQDVi92wK68wr8T+3HO5KjQKPVgRAKCyKtc9TpKUlpam2bNna/
LkyTpz5oykPy7LO3r0aKn3Ybfb1b59ez3zzDNq166d7rrrLo0ZM0azZs0qb1lFTJ48Wenp6Y7X4cOH3bZvA
EDVVjuwtga1GlRi//BLh/PwXQCApHIGp59+
+klNmzbVc889pxdffFFpaWmSpEWLFmny5Mml3k9MTIxatmzp1NaiRQsdOnSoxG2io6N1/
Phxp7bjx48rNDS0yNkmSbJarQoNDXV6AQAgSd5e3hredrhiQ2KL9DUJb6K/
NfqbCVUBACqjcgWniRMnasSIEdq3b5/8/f0d7dddd52++
+67Uu+nW7du2rNnj1Pb3r17FR8fX+I2Xbp00YoVK5zali1bpi5dupT6uAAAnNcgrIHWj1qvh7o9pHqh9RRv
i9eTVz6p5cOWK84WZ3Z5AIBKolyr6tlsNm3dulWNGjVSSEiIduzYoYYNG+rgwYNq1qyZcnNzS7WfLVu2qGv
Xrpo2bZpuvfVWbd68WWPGjNFbb72loUOHSvrjUrujR4/q3XfflfTHcuStW7fWuHHjNGrUKK1cuVLjx4/
XkiVL1KdPH5fHZFU9AEBxCgoLdDLnpCyyKDIoUt5e3maXBACoYBX+AFyr1Vrs6nR79+5VREREqffTqVMnff
rpp3r//
ffVunVrPfXUU5o+fbojNElScnKy06V7CQkJWrJkiZYtW6ZLL71UL730kmbPnl2q0AQAQEl8vX0VGxKrmJAY
QhMAoIhynXEaPXq0Tp8+rYULFyo8PFw//
fSTvL29NWDAAF1xxRWaPn16BZTqHpxxAgAAACB54IzTSy+9pKysLEVGRurs2bPq2bOnGjVqpODgYD399NPl
KhoAAAAAKqtyPcfJZrNp2bJlWrdunX766SdlZWWpQ4cO6tWrl7vrAwAAAADTlemM04YNG/
Tll1863nfv3l1BQUF64403NHjwYN11113Kyyv5QYIAAAAAUBWVKTg9+eST+uWXXxzvf/
75Z40ZM0bXXHONHn74YS1evFiJiYluLxIAAAAAzFSm4LR9+3any/E+
+OADXXbZZXr77bc1ceJEzZgxQwsXLnR7kQAAAABgpjIFp9TUVEVFRTner1mzRn379nW879Spkw4fPuy+6gA
AAACgEihTcIqKilJSUpIkKT8/X1u3btXll1/u6M/
MzJSvr697KwQAAAAAk5UpOF133XV6+OGHtXbtWk2ePFmBgYHq0aOHo/
+nn35So0aN3F4kAAAAAJipTMuRP/XUU7rpppvUs2dPBQcHa968efLz83P0v/POO/
rb3/7m9iIBAAAAwEwWwzCMsm6Unp6u4OBgeXt7O7WfOXNGwcHBTmGqsinL04EBAAAAVF9lyQblfgBuccLDw
8uzOwAAAACo1Mp0jxMAAAAA1EQEJwAAAABwgeAEAAAAAC4QnAAAAADAhXItDgEAAC7sRPYJHck4op+O/
6TYkFg1r9NcdUPqytvL2/XGAIBKh+AEAICbHc04qsGfDNbaQ2sdbWH+Yfrm9m/
UIaYD4QkAqiAu1QMAwI3OFpzV1DVTnUKTJKXlpuma/
12jIxlHTKoMAHAxCE4AALjR8azjenfHu8X2ZeRl6OcTP3u4IgCAOxCcAABwo9zCXOUX5pfYfzj9sAerAQC4
C8EJAAA3CvYLVmRQZIn97WLaebAaAIC7EJwAAHCj2JBY/
fuqfxfb1y66nRLCEjxcEQDAHQhOAAC4kZfFSze1uEmz+s1SncA6kiRvi7cGtRqkzwd9rqjgKJMrBACUh8Uw
DMPsIjwpIyNDNptN6enpCg0NNbscAEA1VWgv1LHMY8rMz5S/
j78igyIV7BdsdlkAgD8pSzbgOU4AAFQAby9vxdnizC4DAOAmXKoHAAAAAC4QnAAAAADABYITAAAAALjAPU4
oE7th17HMY0rJSlF+Yb5igmMUHRytAN8As0sDKlx2fraOZx9XcmayAnwDFBUUpdiQWFksFrNLAwAAFYzghF
LLL8zX94e/18CPBupUzilJktXbqqevfloj241UeEC4yRUCFedk9knN2DRDz65/
Vufs5yRJMcEx+mzQZ2of014+XvzfKQAA1RmX6qHUDqYdVJ/
5fRyhSZLyCvP0wLIHtOHwBhMrAyre0v1L9e+1/3aEJklKzkrW1fOu1uH0wyZWBgAAPIHghFJ7f+f7yi/
ML7bv8VWPOwUqoDpJzkzWlNVTiu3LLsjWt7996+GKAACApxGcUCrn7Oe0LWVbif0HUg8o91yuBysCPKfAXq
CktKQS+7cll/xnAwAAVA8EJ5SKj5ePLq93eYn9zes0V4APC0SgerJ6W9UkvEmJ/
Z3rdfZgNQAAwAwEJ5TaLS1uKTEcPX3106odWNvDFQGeERUcpaevfrrYPpvVpqsaXOXhigAAgKcRnFBq8WHx
Wjl8peJt8Y62EL8Qvd3/
bXWM7WhiZUDFuzrhar38t5cV6BvoaGsc3lirR6x2+jMBAACqJ4thGIbZRXhSRkaGbDab0tPTFRoaanY5VdK
xzGM6mX1S5+znVCewjmJDYuXr7Wt2WUCFyzuXp+SsZJ3KOSWrt1URQRGKDo42uywAAFBOZckGPHgEZRYbEq
vYkFizywA8zupjVYOwBmoQ1sDsUgAAgIdxqR4AAAAAuEBwAgAAAAAXCE4AAAAA4AL3OAFADZCZl6kT2SeUl
Z+lUGuoooOjFeDr/
mevpeWm6WT2SeUU5Mjmb1NsSKz8vP3cfhwAADyN4AQA1dyRjCN64NsH9NGuj2Q37LJ6W3VPx3v0UPeH3Loq
4MG0gxr75VgtPbBUkhTkG6TJPSbrrvZ3KSIowm3HAQDADAQnAKjGTuec1sjPR2r5b8sdbXmFeZq+aboKjUI
92/tZp2dTlVdKVor6LeinX07+4mjLLsjWYysfk7+PvyZ0niBvL+
+LPg4AAGbhHicAqMaOZx13Ck1/9uaPbyolK8Utx0lKTXIKTX/
29HdP62jmUbccBwAAsxCcAKAaO5J5pMS+/
MJ8peWmueU4JYUmSUrNTVV2frZbjgMAgFkITgBQjdUJrFNin0UWBfsFu+U48bb4Evus3lYF+Lh/
IQoAADyJ4AQA1VhMcIya1m5abF/
fJn0VGRTpluM0r9NcEYHFLwAxsu1IRYe4bxEKAADMQHACgGosJiRGiwcvVqNajZzaO9ftrJn9ZirMP8wtx6
kXWk/L7limmOAYp/
brmlynx3s+Ln8ff7ccBwAAs1gMwzDMLsKTMjIyZLPZlJ6ertDQULPLAQCPOJZ5TEczjupY1jE1sDVQTEiM2
842/dmRjCM6nH5YJ3NOqlGtRooOjlbtwNpuPw4AAO5QlmzAcuQAUAPEhsQqNiS2wo9TL7Se6oXWq/
DjAADgaVyqBwAAAAAuEJwAAAAAwAWCEwAAAAC4wD1OQBWQX5ivlKwU5Z3LU6BvoGJDYmWxWMwuCwAAoMYw9
YzT1KlTZbFYnF7NmzcvcfzcuXOLjPf3Z4lbVG/Jmcl6YtUTavVGKzV9vak6z+6s+T/
P15mcM2aXBgAAUGOYfsapVatWWr58ueO9j8+FSwoNDdWePXsc7/
mtO6qz0zmndfeXd2vx3sWOtqOZRzXs02Ga2W+mxrQfI28vbxMrBAAAqBlMD04+Pj6Kji79E+UtFkuZxgNVW
XJWslNo+rNHVz6qfk36Kc4W5+GqAAAAah7TF4fYt2+fYmNj1bBhQw0dOlSHDh264PisrCzFx8crLi5ON954
o3755ZcLjs/
Ly1NGRobTC6gqdp3cVWLfmbNnlJ6X7sFqAAAAai5Tg1Pnzp01d+5cLV26VDNnzlRSUpJ69OihzMzMYsc3a9
ZM77zzjj7//
HPNnz9fdrtdXbt21ZEjR0o8RmJiomw2m+MVF8dv51F1RARGlNhnkUX+PtzjBwAA4AkWwzAMs4s4Ly0tTfHx
8Xr55Zd15513uhxfUFCgFi1aaPDgwXrqqaeKHZOXl6e8vDzH+4yMDMXFxSk9PV2hoaFuqx2oCIfSD6ntrLZ
KzU0t0ndt42v1wc0fyOZvM6EyAACAqi8jI0M2m61U2cD0S/X+LCwsTE2bNtX+/
ftLNd7X11ft2rW74Hir1arQ0FCnF1BV1A2pq6+GfqVgv2Cn9sbhjfXGdW8QmgAAADzE9MUh/
iwrK0sHDhzQHXfcUarxhYWF+vnnn3XddddVcGWAOby9vNUxtqN+HvuzthzbogOpB3RZ3cvUvE5zxYbEml0e
AABAjWFqcHrggQfUv39/
xcfH69ixY5oyZYq8vb01ePBgSdKwYcNUt25dJSYmSpKefPJJXX755WrcuLHS0tL0wgsv6ODBgxo9erSZHwO
oUD5ePmpQq4Ea1GpgdikAAAA1lqnB6ciRIxo8eLBOnz6tiIgIde/eXRs3blRExB83xB86dEheXv//
asLU1FSNGTNGKSkpqlWrljp06KDvv/
9eLVu2NOsjAAAAAKgBKtXiEJ5QlhvAAAAAAFRfVXZxCAAAAACojCrV4hBAVXQi+4TyC/
Nl9bYqIqjk5y4BAACg6uKME1BOp3NOa9HuRbp63tVqPKOxrvnfNfp639dKPVv0mUsAAACo2ghOQDnkFOTo7
a1v6+aFN+uXk78orzBPO47v0HULrtP7O99XfmG+2SUCAADAjQhOQDkczzquKaunFNv30PKHlJyZ7OGKAAAA
UJEITkA5pGSllHhWKSs/
SydzTnq4IgAAAFQkghNQDn7efhfu97pwPwAAAKoWghNQDlHBUYoKiiq2r0FYA9UJquPhigAAAFCRCE5AOcS
GxOrjWz+Wv4+/U3uQb5AW3rJQsSGxJlUGAACAisBznIBy8LJ4qXPdztp5z04t2r1IPyb/qC71uqh/s/
6Kt8WbXR4AAADczGIYhmF2EZ6UkZEhm82m9PR0hYaGml0OAAAAAJOUJRtwqR4AAAAAuEBwAgAAAAAXCE4AA
AAA4ALBCQAAAABcIDgBAAAAgAsEJwAAAABwgeAEAAAAAC4QnAAAAADABYITAAAAALhAcAIAAAAAFwhOAAAA
AOACwQkAAAAAXCA4AQAAAIALBCcAAAAAcIHgBAAAAAAuEJwAAAAAwAWCEwAAAAC4QHACAAAAABcITgAAAAD
gAsEJAAAAAFwgOAEAAACACwQnAAAAAHCB4AQAAAAALhCcAAAAAMAFghMAAAAAuEBwAgAAAAAXCE4AAAAA4A
LBCQAAAABcIDgBAAAAgAsEJwAAAABwwcfsAlD15Rbk6kjmEX217ysdSj+kqxOu1qVRl6puaF2zSwMAAADcg
uCEi5J3Lk/Lk5ZrwAcDVGgUSpJe2vCSGtVqpBXDVig+LN7kCgEAAICLx6V6uCjHMo/
p5oU3O0LTeQdSD2jSsknKys8yqTIAAADAfQhOuCibj21WfmF+sX2Ldi/
SyeyTHq4IAAAAcD+CEy7KqZxTJfYVGoUqsBd4sBoAAACgYhCccFG61OtSYl/
DWg0V4hfiwWoAAACAikFwwkWJC43T3xr9rdi+GdfOUExIjIcrAgAAANyP4ISLEhEUobk3ztWUnlMU5h8mSb
ok6hItv2O5esT3MLc4AAAAwE0shmEYZhfhSRkZGbLZbEpPT1doaKjZ5VQb5wrPKSU7RYX2QgX4BigyKNLsk
gAAAIALKks24DlOcAsfbx/
VC61ndhkAAABAheBSPQAAAABwgeAEAAAAAC4QnAAAAADABVOD09SpU2WxWJxezZs3v+A2H330kZo3by5/
f3+1adNGX331lYeqRVWSnJmsjUc2au72uVqVtEpHMo6YXRIAAACqMNMXh2jVqpWWL1/ueO/jU3JJ33//
vQYPHqzExERdf/
31WrBggQYMGKCtW7eqdevWnigXVcDBtIO6bsF12nVyl6MtJjhGy+5YplaRrUysDAAAAFWV6Zfq+fj4KDo62
vGqU6dOiWNfffVVXXvttZo0aZJatGihp556Su3bt9frr7/uwYpRmaWeTdWoL0Y5hSZJSs5KVr8F/
XQs85hJlQEAAKAqMz047du3T7GxsWrYsKGGDh2qQ4cOlTh2w4YN6t27t1Nbnz59tGHDhhK3ycvLU0ZGhtML
1dfJ7JNambSy2L6D6QcJTgAAACgXU4NT586dNXfuXC1dulQzZ85UUlKSevTooczMzGLHp6SkKCoqyqktKip
KKSkpJR4jMTFRNpvN8YqLi3PrZ0Dlkl2QfcH+0zmnPVQJAAAAqhNTg1Pfvn01cOBAXXLJJerTp4++
+uorpaWlaeHChW47xuTJk5Wenu54HT582G37RuUT5h8mfx//
Evvr2+p7sBoAAABUF6ZfqvdnYWFhatq0qfbv319sf3R0tI4fP+7Udvz4cUVHR5e4T6vVqtDQUKcXqq+YkBh
NvHxisX39m/ZXVFBUsX0AAADAhVSq4JSVlaUDBw4oJiam2P4uXbpoxYoVTm3Lli1Tly5dPFEeqgB/H3/
d2/le/fuqfyvU+kdItnpbNbbDWM26fpbCA8NNrhAAAABVkcUwDMOsgz/wwAPq37+/
4uPjdezYMU2ZMkXbt2/
Xrl27FBERoWHDhqlu3bpKTEyU9Mdy5D179tSzzz6rfv366YMPPtAzzzxTpuXIMzIyZLPZlJ6eztmnaqygsE
DHMo8puyBbAT4Big6OVoBvgNllAQAAoBIpSzYw9TlOR44c0eDBg3X69GlFRESoe/
fu2rhxoyIiIiRJhw4dkpfX/
z8p1rVrVy1YsECPPfaYHnnkETVp0kSfffYZz3BCEb7evooPize7DAAAAFQTpp5xMgNnnAAAAABIZcsGleoe
JwAAAACojAhOAAAAAOCCqfc41WSnck7pRPYJnTl7RuEB4YoMilSdwDpmlwUAAACgGAQnExxOP6w7Pr1Daw6
ucbT1qN9D82+azwNaAQAAgEqIS/
U87EzOGY38fKRTaJKktYfWavhnw3U657RJlQEAAAAoCcHJw07knNCKpBXF9q3+fbVOZJ/
wcEUAAAAAXCE4eVhGXsZF9QMAAADwPIKTh9mstgv2h/mHeaYQAAAAAKVGcPKwqOAoXd/
k+mL7+jbuq8igSA9XBAAAAMAVgpOHhfmHaeb1M3VjsxtlkUWSZJFFNzS9QW/
1f0u1AmqZXCEAAACAv2I5chPUC62neQPm6Xj2caXnpctmtSkyKJLL9AAAAIBKiuBkEpu/TTb/C9/
vBAAAAKBy4FI9AAAAAHCB4AQAAAAALhCcAAAAAMAF7nGqolKyUnQ657Tshl21A2srNiTW7JKqvdSzqTqZc1
JnC84qzD9MsSGx8vX2NbusSi85M1mnz56WJNUOqK2YkBiTKwIAACg7glMVU1BYoK3JWzXss2Hae3qvJKm+r
b5m95+t7vW7K8A3wOQKq6ek1CSNXjxaK5NWSpJC/
EI05copGn7pcNUJrGNydZVT3rk8bT66WSM+H6HfUn+TJDWs1VBzb5yry+peJquP1eQKAQAASs9iGIZhdhGe
lJGRIZvNpvT0dIWGhppdTpntO71Pl8y6RLnncp3avS3e2nr3Vl0SdYlJlVVfxzKP6Yo5V+hA6oEifW9e/
6ZGtx8tLwtXvf7V7pO7demsS1VgL3Bq9/Xy1Y6
xO9QiooVJlQEAAPyhLNmAf+1VIecKz+mtH98qEpokqdAoVOLaRGXnZ5tQWfW259SeYkOTJD2x6gkdyzzm4Y
oqv7xzeXp106tFQpMkFdgLNH3jdOWdyzOhMgAAgPIhOFUh2QXZ+v7I9yX2bzm2RZn5mR6sqGbYlrKtxL7j2
ceVU5DjwWqqhsz8TG08srHE/o1HN/
KzCgAAqhSCUxXi7+OvxrUal9ifUCtBAT7c4+RujcIbldgX5Bskf29/
D1ZTNQT4BKhhrYYl9jeq1YifVQAAUKUQnKoQq49VEy6fUGL/Iz0ekc3f5rmCaoi2UW1lsxb/
vf6j0z8UHRLt4YoqvyC/ID3U7aES+x/s9qCC/II8WBEAAMDFIThVMY3DG2vegHmyev//
Fcl8vHz0wjUvqG1UW/
MKq8bibHFaMXyFIoMindpvanGT7rv8Pvl5+5lUWeXWvE5zzeo3y+n78fP20xv93lDzOs1NrAwAAKDsWFWvC
sotyFVyVrL2n9mvc/
ZzalanmaKCovgNfgUyDENHMo7oUPohnT57Wk3CmygqKErhgeFml1apnS04q5SsFO07s092w65mtZspOjiaZ
fMBAEClUJZsQHACAAAAUCOxHDkAAAAAuBHBCQAAAABcIDgBAAAAgAs+ZhcAVEaZeZk6lXNKhUahwqxhqhNU
x+ySAAAAYCLOOAF/sf/
Mfg37dJgav9ZYTV5ror4L+mrz0c3KO5dndmkAAAAwCcEJ+JNDaYd0xZwr9Nmez2Q37JKkH479oO7vdNfe03
tNrg4AAABmITgBf/Ltb98qOSu5SHuBvUBTVk9RZl6mCVUBAADAbAQn4P/kF+br8z2fl9i/
5uAaZeRleLAiAAAAVBYEJ+D/
+Hj5qF5IvRL7IwIj5OPFeioAAAA1EcEJ+D9eFi+N7Ti2xP4Huz2oqOAoD1YEAACAyoLgBPxJg7AGmnHtDFl
kcWof2HKg+jXpZ1JVAAAAMJvFMAzD7CI8KSMjQzabTenp6QoNDTW7HFRCmXmZSs5K1sqklcrKz1Lvhr1VL7
Se6gTyLCcAAIDqpCzZgBs2gL8IsYYoxBqiprWbml0KAAAAKgku1QMAAAAAFwhOAAAAAOACwQkAAAAAXCA4A
QAAAIALBCcAAAAAcIHgBAAAAAAuEJwAAAAAwAWCEwAAAAC4QHACAAAAABcITgAAAADgAsEJAAAAAFwgOAEA
AACACwQnAAAAAHCB4AQAAAAALhCcAAAAAMAFH7ML8DTDMCRJGRkZJlcCAAAAwEznM8H5jHAhNS44ZWZmSpL
i4uJMrgQAAABAZZCZmSmbzXbBMRajNPGqGrHb7Tp27JhCQkJksVjMLqdaycjIUFxcnA4fPqzQ0FCzy8FfMD
+VG/NTeTE3lRvzU3kxN5Ub8/MHwzCUmZmp2NhYeXld+C6mGnfGycvLS/
Xq1TO7jGotNDS0Rv8BrOyYn8qN+am8mJvKjfmpvJibyo35kcszTeexOAQAAAAAuEBwAgAAAAAXCE5wG6vVq
ilTpshqtZpdCorB/FRuzE/
lxdxUbsxP5cXcVG7MT9nVuMUhAAAAAKCsOOMEAAAAAC4QnAAAAADABYITAAAAALhAcAIAAAAAFwhOKLPExE
R16tRJISEhioyM1IABA7Rnzx6nMbm5uRo3bpxq166t4OBg3XzzzTp+/
LhJFddczz77rCwWiyZMmOBoY27MdfToUd1+++2qXbu2AgIC1KZNG/
3www+OfsMw9MQTTygmJkYBAQHq3bu39u3bZ2LFNUNhYaEef/
xxJSQkKCAgQI0aNdJTTz2lP6+fxNx4znfffaf+/fsrNjZWFotFn332mVN/
aebizJkzGjp0qEJDQxUWFqY777xTWVlZHvwU1deF5qegoEAPPfSQ2rRpo6CgIMXGxmrYsGE6duyY0z6Yn4r
h6s/
On40dO1YWi0XTp093amduSkZwQpmtWbNG48aN08aNG7Vs2TIVFBTob3/7m7Kzsx1j7rvvPi1evFgfffSR1q
xZo2PHjummm24yseqaZ8uWLXrzzTd1ySWXOLUzN+ZJTU1Vt27d5Ovrq6+//lq7du3SSy+9pFq1ajnGPP/
885oxY4ZmzZqlTZs2KSgoSH369FFubq6JlVd/
zz33nGbOnKnXX39du3fv1nPPPafnn39er732mmMMc+M52dnZuvTSS/Wf//yn2P7SzMXQoUP1yy+/
aNmyZfryyy/13Xff6a677vLUR6jWLjQ/OTk52rp1qx5//
HFt3bpVixYt0p49e3TDDTc4jWN+KoarPzvnffrpp9q4caNiY2OL9DE3F2AAF+nEiROGJGPNmjWGYRhGWlqa
4evra3z00UeOMbt37zYkGRs2bDCrzBolMzPTaNKkibFs2TKjZ8+exr333msYBnNjtoceesjo3r17if12u92
Ijo42XnjhBUdbWlqaYbVajffff98TJdZY/
fr1M0aNGuXUdtNNNxlDhw41DIO5MZMk49NPP3W8L81c7Nq1y5BkbNmyxTHm66+/NiwWi3H06FGP1V4T/
HV+irN582ZDknHw4EHDMJgfTylpbo4cOWLUrVvX2LlzpxEfH2+88sorjj7m5sI444SLlp6eLkkKDw+XJP34
448qKChQ7969HWOaN2+u+vXra8OGDabUWNOMGzdO/
fr1c5oDibkx2xdffKGOHTtq4MCBioyMVLt27fT22287+pOSkpSSkuI0PzabTZ07d2Z+KljXrl21YsUK7d27
V5K0Y8cOrVu3Tn379pXE3FQmpZmLDRs2KCwsTB07dnSM6d27t7y8vLRp0yaP11zTpaeny2KxKCwsTBLzYya
73a477rhDkyZNUqtWrYr0MzcX5mN2Aaja7Ha7JkyYoG7duql169aSpJSUFPn5+Tn+D/
K8qKgopaSkmFBlzfLBBx9o69at2rJlS5E+5sZcv/32m2bOnKmJEyfqkUce0ZYtWzR+/
Hj5+flp+PDhjjmIiopy2o75qXgPP/ywMjIy1Lx5c3l7e6uwsFBPP/
20hg4dKknMTSVSmrlISUlRZGSkU7+Pj4/Cw8OZLw/Lzc3VQw89pMGDBys0NFQS82Om5557Tj4+Pho/
fnyx/czNhRGccFHGjRunnTt3at26dWaXAkmHDx/Wvffeq2XLlsnf39/
scvAXdrtdHTt21DPPPCNJateunXbu3KlZs2Zp+PDhJldXsy1cuFDvvfeeFixYoFatWmn79u2aMGGCYmNjmR
ugnAoKCnTrrbfKMAzNnDnT7HJqvB9//FGvvvqqtm7dKovFYnY5VRKX6qHc/vnPf+rLL7/
UqlWrVK9ePUd7dHS08vPzlZaW5jT++PHjio6O9nCVNcuPP/6oEydOqH379vLx8ZGPj4/
WrFmjGTNmyMfHR1FRUcyNiWJiYtSyZUunthYtWujQoUOS5JiDv65yyPxUvEmTJunhhx/
WoEGD1KZNG91xxx267777lJiYKIm5qUxKMxfR0dE6ceKEU/
+5c+d05swZ5stDzoemgwcPatmyZY6zTRLzY5a1a9fqxIkTql+/
vuPfCAcPHtT999+vBg0aSGJuXCE4ocwMw9A///
lPffrpp1q5cqUSEhKc+jt06CBfX1+tWLHC0bZnzx4dOnRIXbp08XS5NUqvXr30888/a/
v27Y5Xx44dNXToUMd/Mzfm6datW5Gl+/fu3av4+HhJUkJCgqKjo53mJyMjQ5s2bWJ+KlhOTo68vJz/
SvT29pbdbpfE3FQmpZmLLl26KC0tTT/++KNjzMqVK2W329W5c2eP11zTnA9N+/bt0/
Lly1W7dm2nfubHHHfccYd+
+uknp38jxMbGatKkSfrmm28kMTcumb06Baqee+65x7DZbMbq1auN5ORkxysnJ8cxZuzYsUb9+vWNlStXGj/
88IPRpUsXo0uXLiZWXXP9eVU9w2BuzLR582bDx8fHePrpp419+/YZ7733nhEYGGjMnz/
fMebZZ581wsLCjM8//9z46aefjBtvvNFISEgwzp49a2Ll1d/w4cONunXrGl9+
+aWRlJRkLFq0yKhTp47x4IMPOsYwN56TmZlpbNu2zdi2bZshyXj55ZeNbdu2OVZlK81cXHvttUa7du2MTZs
2GevWrTOaNGliDB482KyPVK1caH7y8/ONG264wahXr56xfft2p38n5OXlOfbB/FQMV392/
uqvq+oZBnNzIQQnlJmkYl9z5sxxjDl79qzxj3/8w6hVq5YRGBho/
P3vfzeSk5PNK7oG+2twYm7MtXjxYqN169aG1Wo1mjdvbrz11ltO/
Xa73Xj88ceNqKgow2q1Gr169TL27NljUrU1R0ZGhnHvvfca9evXN/z9/Y2GDRsajz76qNM/
9Jgbz1m1alWxf88MHz7cMIzSzcXp06eNwYMHG8HBwUZoaKgxcuRIIzMz04RPU/1caH6SkpJK/
HfCqlWrHPtgfiqGqz87f1VccGJuSmYxjD89Fh0AAAAAUAT3OAEAAACACwQnAAAAAHCB4AQAAAAALhCcAAAA
AMAFghMAAAAAuEBwAgAAAAAXCE4AAAAA4ALBCQAAAABcIDgBACDpyiuv1IQJE8wuAwBQSRGcAAA1wogRIzR
gwACzywAAVFEEJwAAAABwgeAEAKhxsrOzNWzYMAUHBysmJkYvvfSS2SUBACo5ghMAoMaZNGmS1qxZo88//1
zffvutVq9era1bt5pdFgCgEvMxuwAAADwpKytL//3vfzV//
nz16tVLkjRv3jzVq1fP5MoAAJUZZ5wAADXKgQMHlJ+fr86dOzvawsPD1axZMxOrAgBUdgQnAAAAAHCB4AQA
qFEaNWokX19fbdq0ydGWmpqqvXv3mlgVAKCy4x4nAECNEhwcrDvvvFOTJk1S7dq1FRkZqUcffVReXvwuEQB
QMoITAKDGeeGFF5SVlaX+/fsrJCRE999/
v9LT080uCwBQiVkMwzDMLgIAAAAAKjOuSwAAAAAAFwhOAAAAAOACwQkAAAAAXCA4AQAAAIALBCcAAAAAcIH
gBAAAAAAuEJwAAAAAwAWCEwAAAAC4QHACAAAAABcITgAAAADgAsEJAAAAAFz4f6x0SAclgtAbAAAAAElFTk
SuQmCC\n"
},
"metadata": {}
}
]
}
]
}