{ "nbformat": 4, "nbformat_minor": 0, "metadata": { "colab": { "name": "Notebook_extra_Adversarial_robustness_and_interpretability.ipynb", "provenance": [], "collapsed_sections": [] }, "kernelspec": { "name": "python3", "display_name": "Python 3" }, "accelerator": "GPU", "widgets": { "application/vnd.jupyter.widget-state+json": { "7974ddb37db94a9fa867fd64f6f38320": { "model_module": "@jupyter-widgets/controls", "model_name": "HBoxModel", "state": { "_view_name": "HBoxView", "_dom_classes": [], "_model_name": "HBoxModel", "_view_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_view_count": null, "_view_module_version": "1.5.0", "box_style": "", "layout": "IPY_MODEL_b303894943484ef1a9dab57aba4e056c", "_model_module": "@jupyter-widgets/controls", "children": [ "IPY_MODEL_663249ddee2948f4b32239ffb91d1a46", "IPY_MODEL_5b21d838bb464b8ea57f828d6d106813" ] } }, "b303894943484ef1a9dab57aba4e056c": { "model_module": "@jupyter-widgets/base", "model_name": "LayoutModel", "state": { "_view_name": "LayoutView", "grid_template_rows": null, "right": null, "justify_content": null, "_view_module": "@jupyter-widgets/base", "overflow": null, "_model_module_version": "1.2.0", "_view_count": null, "flex_flow": null, "width": null, "min_width": null, "border": null, "align_items": null, "bottom": null, "_model_module": "@jupyter-widgets/base", "top": null, "grid_column": null, "overflow_y": null, "overflow_x": null, "grid_auto_flow": null, "grid_area": null, "grid_template_columns": null, "flex": null, "_model_name": "LayoutModel", "justify_items": null, "grid_row": null, "max_height": null, "align_content": null, "visibility": null, "align_self": null, "height": null, "min_height": null, "padding": null, "grid_auto_rows": null, "grid_gap": null, "max_width": null, "order": null, "_view_module_version": "1.2.0", "grid_template_areas": null, "object_position": null, "object_fit": null, "grid_auto_columns": null, "margin": null, "display": null, "left": null } }, "663249ddee2948f4b32239ffb91d1a46": { "model_module": "@jupyter-widgets/controls", "model_name": "IntProgressModel", "state": { "_view_name": "ProgressView", "style": "IPY_MODEL_5d83e10b52b3402bbbb7aee8513f839f", "_dom_classes": [], "description": "Dl Completed...", "_model_name": "IntProgressModel", "bar_style": "success", "max": 1, "_view_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "value": 1, "_view_count": null, "_view_module_version": "1.5.0", "orientation": "horizontal", "min": 0, "description_tooltip": null, "_model_module": "@jupyter-widgets/controls", "layout": "IPY_MODEL_bca741fd9c2d4e25ad0879922f8211cf" } }, "5b21d838bb464b8ea57f828d6d106813": { "model_module": "@jupyter-widgets/controls", "model_name": "HTMLModel", "state": { "_view_name": "HTMLView", "style": "IPY_MODEL_438052b447504eb2a58279dfec2b4cb9", "_dom_classes": [], "description": "", "_model_name": "HTMLModel", "placeholder": "​", "_view_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "value": "1/|/100% 1/1 [00:15<00:00, 9.85s/ url]", "_view_count": null, "_view_module_version": "1.5.0", "description_tooltip": null, "_model_module": "@jupyter-widgets/controls", "layout": "IPY_MODEL_0349f24a0e024e3ba18af6e319d526f1" } }, "5d83e10b52b3402bbbb7aee8513f839f": { "model_module": "@jupyter-widgets/controls", "model_name": "ProgressStyleModel", "state": { "_view_name": "StyleView", "_model_name": "ProgressStyleModel", "description_width": "initial", "_view_module": "@jupyter-widgets/base", "_model_module_version": "1.5.0", "_view_count": null, "_view_module_version": "1.2.0", "bar_color": null, "_model_module": "@jupyter-widgets/controls" } }, "bca741fd9c2d4e25ad0879922f8211cf": { "model_module": "@jupyter-widgets/base", "model_name": "LayoutModel", "state": { "_view_name": "LayoutView", "grid_template_rows": null, "right": null, "justify_content": null, "_view_module": "@jupyter-widgets/base", "overflow": null, "_model_module_version": "1.2.0", "_view_count": null, "flex_flow": null, "width": null, "min_width": null, "border": null, "align_items": null, "bottom": null, "_model_module": "@jupyter-widgets/base", "top": null, "grid_column": null, "overflow_y": null, "overflow_x": null, "grid_auto_flow": null, "grid_area": null, "grid_template_columns": null, "flex": null, "_model_name": "LayoutModel", "justify_items": null, "grid_row": null, "max_height": null, "align_content": null, "visibility": null, "align_self": null, "height": null, "min_height": null, "padding": null, "grid_auto_rows": null, "grid_gap": null, "max_width": null, "order": null, "_view_module_version": "1.2.0", "grid_template_areas": null, "object_position": null, "object_fit": null, "grid_auto_columns": null, "margin": null, "display": null, "left": null } }, "438052b447504eb2a58279dfec2b4cb9": { "model_module": "@jupyter-widgets/controls", "model_name": "DescriptionStyleModel", "state": { "_view_name": "StyleView", "_model_name": "DescriptionStyleModel", "description_width": "", "_view_module": "@jupyter-widgets/base", "_model_module_version": "1.5.0", "_view_count": null, "_view_module_version": "1.2.0", "_model_module": "@jupyter-widgets/controls" } }, "0349f24a0e024e3ba18af6e319d526f1": { "model_module": "@jupyter-widgets/base", "model_name": "LayoutModel", "state": { "_view_name": "LayoutView", "grid_template_rows": null, "right": null, "justify_content": null, "_view_module": "@jupyter-widgets/base", "overflow": null, "_model_module_version": "1.2.0", "_view_count": null, "flex_flow": null, "width": null, "min_width": null, "border": null, "align_items": null, "bottom": null, "_model_module": "@jupyter-widgets/base", "top": null, "grid_column": null, "overflow_y": null, "overflow_x": null, "grid_auto_flow": null, "grid_area": null, "grid_template_columns": null, "flex": null, "_model_name": "LayoutModel", "justify_items": null, "grid_row": null, "max_height": null, "align_content": null, "visibility": null, "align_self": null, "height": null, "min_height": null, "padding": null, "grid_auto_rows": null, "grid_gap": null, "max_width": null, "order": null, "_view_module_version": "1.2.0", "grid_template_areas": null, "object_position": null, "object_fit": null, "grid_auto_columns": null, "margin": null, "display": null, "left": null } }, "eb1afd9bdd3f46f8b7f6bbf548f33251": { "model_module": "@jupyter-widgets/controls", "model_name": "HBoxModel", "state": { "_view_name": "HBoxView", "_dom_classes": [], "_model_name": "HBoxModel", "_view_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_view_count": null, "_view_module_version": "1.5.0", "box_style": "", "layout": "IPY_MODEL_801079bc23fa417f9b353dc360adf7b7", "_model_module": "@jupyter-widgets/controls", "children": [ "IPY_MODEL_8eb8113f4db1468aa9c87ca140f564d9", "IPY_MODEL_f946145b249a4242b21292e51563b4b9" ] } }, "801079bc23fa417f9b353dc360adf7b7": { "model_module": "@jupyter-widgets/base", "model_name": "LayoutModel", "state": { "_view_name": "LayoutView", "grid_template_rows": null, "right": null, "justify_content": null, "_view_module": "@jupyter-widgets/base", "overflow": null, "_model_module_version": "1.2.0", "_view_count": null, "flex_flow": null, "width": null, "min_width": null, "border": null, "align_items": null, "bottom": null, "_model_module": "@jupyter-widgets/base", "top": null, "grid_column": null, "overflow_y": null, "overflow_x": null, "grid_auto_flow": null, "grid_area": null, "grid_template_columns": null, "flex": null, "_model_name": "LayoutModel", "justify_items": null, "grid_row": null, "max_height": null, "align_content": null, "visibility": null, "align_self": null, "height": null, "min_height": null, "padding": null, "grid_auto_rows": null, "grid_gap": null, "max_width": null, "order": null, "_view_module_version": "1.2.0", "grid_template_areas": null, "object_position": null, "object_fit": null, "grid_auto_columns": null, "margin": null, "display": null, "left": null } }, "8eb8113f4db1468aa9c87ca140f564d9": { "model_module": "@jupyter-widgets/controls", "model_name": "IntProgressModel", "state": { "_view_name": "ProgressView", "style": "IPY_MODEL_91dc9026cf32474e97958845bbb5db5d", "_dom_classes": [], "description": "Dl Size...", "_model_name": "IntProgressModel", "bar_style": "success", "max": 1, "_view_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "value": 1, "_view_count": null, "_view_module_version": "1.5.0", "orientation": "horizontal", "min": 0, "description_tooltip": null, "_model_module": "@jupyter-widgets/controls", "layout": "IPY_MODEL_573a50e0d58d49069bc5de885b13407b" } }, "f946145b249a4242b21292e51563b4b9": { "model_module": "@jupyter-widgets/controls", "model_name": "HTMLModel", "state": { "_view_name": "HTMLView", "style": "IPY_MODEL_f2633b9ec9664f5dbbb1295edee49082", "_dom_classes": [], "description": "", "_model_name": "HTMLModel", "placeholder": "​", "_view_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "value": "89/|/100% 89/89 [00:15<00:00, 5.91 MiB/s]", "_view_count": null, "_view_module_version": "1.5.0", "description_tooltip": null, "_model_module": "@jupyter-widgets/controls", "layout": "IPY_MODEL_dcc9658a0b6141a0ba351f2e0c564bd9" } }, "91dc9026cf32474e97958845bbb5db5d": { "model_module": "@jupyter-widgets/controls", "model_name": "ProgressStyleModel", "state": { "_view_name": "StyleView", "_model_name": "ProgressStyleModel", "description_width": "initial", "_view_module": "@jupyter-widgets/base", "_model_module_version": "1.5.0", "_view_count": null, "_view_module_version": "1.2.0", "bar_color": null, "_model_module": "@jupyter-widgets/controls" } }, "573a50e0d58d49069bc5de885b13407b": { "model_module": "@jupyter-widgets/base", "model_name": "LayoutModel", "state": { "_view_name": "LayoutView", "grid_template_rows": null, "right": null, "justify_content": null, "_view_module": "@jupyter-widgets/base", "overflow": null, "_model_module_version": "1.2.0", "_view_count": null, "flex_flow": null, "width": null, "min_width": null, "border": null, "align_items": null, "bottom": null, "_model_module": "@jupyter-widgets/base", "top": null, "grid_column": null, "overflow_y": null, "overflow_x": null, "grid_auto_flow": null, "grid_area": null, "grid_template_columns": null, "flex": null, "_model_name": "LayoutModel", "justify_items": null, "grid_row": null, "max_height": null, "align_content": null, "visibility": null, "align_self": null, "height": null, "min_height": null, "padding": null, "grid_auto_rows": null, "grid_gap": null, "max_width": null, "order": null, "_view_module_version": "1.2.0", "grid_template_areas": null, "object_position": null, "object_fit": null, "grid_auto_columns": null, "margin": null, "display": null, "left": null } }, "f2633b9ec9664f5dbbb1295edee49082": { "model_module": "@jupyter-widgets/controls", "model_name": "DescriptionStyleModel", "state": { "_view_name": "StyleView", "_model_name": "DescriptionStyleModel", "description_width": "", "_view_module": "@jupyter-widgets/base", "_model_module_version": "1.5.0", "_view_count": null, "_view_module_version": "1.2.0", "_model_module": "@jupyter-widgets/controls" } }, "dcc9658a0b6141a0ba351f2e0c564bd9": { "model_module": "@jupyter-widgets/base", "model_name": "LayoutModel", "state": { "_view_name": "LayoutView", "grid_template_rows": null, "right": null, "justify_content": null, "_view_module": "@jupyter-widgets/base", "overflow": null, "_model_module_version": "1.2.0", "_view_count": null, "flex_flow": null, "width": null, "min_width": null, "border": null, "align_items": null, "bottom": null, "_model_module": "@jupyter-widgets/base", "top": null, "grid_column": null, "overflow_y": null, "overflow_x": null, "grid_auto_flow": null, "grid_area": null, "grid_template_columns": null, "flex": null, "_model_name": "LayoutModel", "justify_items": null, "grid_row": null, "max_height": null, "align_content": null, "visibility": null, "align_self": null, "height": null, "min_height": null, "padding": null, "grid_auto_rows": null, "grid_gap": null, "max_width": null, "order": null, "_view_module_version": "1.2.0", "grid_template_areas": null, "object_position": null, "object_fit": null, "grid_auto_columns": null, "margin": null, "display": null, "left": null } }, "4099ae9c53c14dc39357930376a78235": { "model_module": "@jupyter-widgets/controls", "model_name": "HBoxModel", "state": { "_view_name": "HBoxView", "_dom_classes": [], "_model_name": "HBoxModel", "_view_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_view_count": null, "_view_module_version": "1.5.0", "box_style": "", "layout": "IPY_MODEL_480130f71f2a4c5b9dd78c124f8b6585", "_model_module": "@jupyter-widgets/controls", "children": [ "IPY_MODEL_ab3788d44b03454bac1497dbf08ab260", "IPY_MODEL_20137efc9f444ba4bf7e3f10896e3227" ] } }, "480130f71f2a4c5b9dd78c124f8b6585": { "model_module": "@jupyter-widgets/base", "model_name": "LayoutModel", "state": { "_view_name": "LayoutView", "grid_template_rows": null, "right": null, "justify_content": null, "_view_module": "@jupyter-widgets/base", "overflow": null, "_model_module_version": "1.2.0", "_view_count": null, "flex_flow": null, "width": null, "min_width": null, "border": null, "align_items": null, "bottom": null, "_model_module": "@jupyter-widgets/base", "top": null, "grid_column": null, "overflow_y": null, "overflow_x": null, "grid_auto_flow": null, "grid_area": null, "grid_template_columns": null, "flex": null, "_model_name": "LayoutModel", "justify_items": null, "grid_row": null, "max_height": null, "align_content": null, "visibility": null, "align_self": null, "height": null, "min_height": null, "padding": null, "grid_auto_rows": null, "grid_gap": null, "max_width": null, "order": null, "_view_module_version": "1.2.0", "grid_template_areas": null, "object_position": null, "object_fit": null, "grid_auto_columns": null, "margin": null, "display": null, "left": null } }, "ab3788d44b03454bac1497dbf08ab260": { "model_module": "@jupyter-widgets/controls", "model_name": "IntProgressModel", "state": { "_view_name": "ProgressView", "style": "IPY_MODEL_3603465678e94beba2935ef05a25991e", "_dom_classes": [], "description": "Extraction completed...", "_model_name": "IntProgressModel", "bar_style": "success", "max": 1, "_view_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "value": 1, "_view_count": null, "_view_module_version": "1.5.0", "orientation": "horizontal", "min": 0, "description_tooltip": null, "_model_module": "@jupyter-widgets/controls", "layout": "IPY_MODEL_082ee7e6043648a5979dab8e67335358" } }, "20137efc9f444ba4bf7e3f10896e3227": { "model_module": "@jupyter-widgets/controls", "model_name": "HTMLModel", "state": { "_view_name": "HTMLView", "style": "IPY_MODEL_680d33cab8de409e99bcc55aa1789ecc", "_dom_classes": [], "description": "", "_model_name": "HTMLModel", "placeholder": "​", "_view_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "value": "1/|/100% 1/1 [00:15<00:00, 15.01s/ file]", "_view_count": null, "_view_module_version": "1.5.0", "description_tooltip": null, "_model_module": "@jupyter-widgets/controls", "layout": "IPY_MODEL_eec93707f8cd4aaa852cfc3b828d6ff6" } }, "3603465678e94beba2935ef05a25991e": { "model_module": "@jupyter-widgets/controls", "model_name": "ProgressStyleModel", "state": { "_view_name": "StyleView", "_model_name": "ProgressStyleModel", "description_width": "initial", "_view_module": "@jupyter-widgets/base", "_model_module_version": "1.5.0", "_view_count": null, "_view_module_version": "1.2.0", "bar_color": null, "_model_module": "@jupyter-widgets/controls" } }, "082ee7e6043648a5979dab8e67335358": { "model_module": "@jupyter-widgets/base", "model_name": "LayoutModel", "state": { "_view_name": "LayoutView", "grid_template_rows": null, "right": null, "justify_content": null, "_view_module": "@jupyter-widgets/base", "overflow": null, "_model_module_version": "1.2.0", "_view_count": null, "flex_flow": null, "width": null, "min_width": null, "border": null, "align_items": null, "bottom": null, "_model_module": "@jupyter-widgets/base", "top": null, "grid_column": null, "overflow_y": null, "overflow_x": null, "grid_auto_flow": null, "grid_area": null, "grid_template_columns": null, "flex": null, "_model_name": "LayoutModel", "justify_items": null, "grid_row": null, "max_height": null, "align_content": null, "visibility": null, "align_self": null, "height": null, "min_height": null, "padding": null, "grid_auto_rows": null, "grid_gap": null, "max_width": null, "order": null, "_view_module_version": "1.2.0", "grid_template_areas": null, "object_position": null, "object_fit": null, "grid_auto_columns": null, "margin": null, "display": null, "left": null } }, "680d33cab8de409e99bcc55aa1789ecc": { "model_module": "@jupyter-widgets/controls", "model_name": "DescriptionStyleModel", "state": { "_view_name": "StyleView", "_model_name": "DescriptionStyleModel", "description_width": "", "_view_module": "@jupyter-widgets/base", "_model_module_version": "1.5.0", "_view_count": null, "_view_module_version": "1.2.0", "_model_module": "@jupyter-widgets/controls" } }, "eec93707f8cd4aaa852cfc3b828d6ff6": { "model_module": "@jupyter-widgets/base", "model_name": "LayoutModel", "state": { "_view_name": "LayoutView", "grid_template_rows": null, "right": null, "justify_content": null, "_view_module": "@jupyter-widgets/base", "overflow": null, "_model_module_version": "1.2.0", "_view_count": null, "flex_flow": null, "width": null, "min_width": null, "border": null, "align_items": null, "bottom": null, "_model_module": "@jupyter-widgets/base", "top": null, "grid_column": null, "overflow_y": null, "overflow_x": null, "grid_auto_flow": null, "grid_area": null, "grid_template_columns": null, "flex": null, "_model_name": "LayoutModel", "justify_items": null, "grid_row": null, "max_height": null, "align_content": null, "visibility": null, "align_self": null, "height": null, "min_height": null, "padding": null, "grid_auto_rows": null, "grid_gap": null, "max_width": null, "order": null, "_view_module_version": "1.2.0", "grid_template_areas": null, "object_position": null, "object_fit": null, "grid_auto_columns": null, "margin": null, "display": null, "left": null } }, "9109d8ba47ff4239b8295751f0814fde": { "model_module": "@jupyter-widgets/controls", "model_name": "HBoxModel", "state": { "_view_name": "HBoxView", "_dom_classes": [], "_model_name": "HBoxModel", "_view_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_view_count": null, "_view_module_version": "1.5.0", "box_style": "", "layout": "IPY_MODEL_aa59b9e690d9436f9922b40d88b6bef9", "_model_module": "@jupyter-widgets/controls", "children": [ "IPY_MODEL_7f49fefdacdc4def94c7751b1a837b1d", "IPY_MODEL_aba803a319d246068db68ffb822bf6bf" ] } }, "aa59b9e690d9436f9922b40d88b6bef9": { "model_module": "@jupyter-widgets/base", "model_name": "LayoutModel", "state": { "_view_name": "LayoutView", "grid_template_rows": null, "right": null, "justify_content": null, "_view_module": "@jupyter-widgets/base", "overflow": null, "_model_module_version": "1.2.0", "_view_count": null, "flex_flow": null, "width": null, "min_width": null, "border": null, "align_items": null, "bottom": null, "_model_module": "@jupyter-widgets/base", "top": null, "grid_column": null, "overflow_y": null, "overflow_x": null, "grid_auto_flow": null, "grid_area": null, "grid_template_columns": null, "flex": null, "_model_name": "LayoutModel", "justify_items": null, "grid_row": null, "max_height": null, "align_content": null, "visibility": null, "align_self": null, "height": null, "min_height": null, "padding": null, "grid_auto_rows": null, "grid_gap": null, "max_width": null, "order": null, "_view_module_version": "1.2.0", "grid_template_areas": null, "object_position": null, "object_fit": null, "grid_auto_columns": null, "margin": null, "display": null, "left": null } }, "7f49fefdacdc4def94c7751b1a837b1d": { "model_module": "@jupyter-widgets/controls", "model_name": "IntProgressModel", "state": { "_view_name": "ProgressView", "style": "IPY_MODEL_ea91f2318e6d48a480090290c7cb37dc", "_dom_classes": [], "description": "", "_model_name": "IntProgressModel", "bar_style": "info", "max": 1, "_view_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "value": 1, "_view_count": null, "_view_module_version": "1.5.0", "orientation": "horizontal", "min": 0, "description_tooltip": null, "_model_module": "@jupyter-widgets/controls", "layout": "IPY_MODEL_7c322510bc7b43db8c818eb9c6193c25" } }, "aba803a319d246068db68ffb822bf6bf": { "model_module": "@jupyter-widgets/controls", "model_name": "HTMLModel", "state": { "_view_name": "HTMLView", "style": "IPY_MODEL_bc317eb468bb4510a4409bba3afc2082", "_dom_classes": [], "description": "", "_model_name": "HTMLModel", "placeholder": "​", "_view_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "value": "26728 examples [00:09, 2933.92 examples/s]", "_view_count": null, "_view_module_version": "1.5.0", "description_tooltip": null, "_model_module": "@jupyter-widgets/controls", "layout": "IPY_MODEL_ea9927869ddf462783c8b47c0d2127d3" } }, "ea91f2318e6d48a480090290c7cb37dc": { "model_module": "@jupyter-widgets/controls", "model_name": "ProgressStyleModel", "state": { "_view_name": "StyleView", "_model_name": "ProgressStyleModel", "description_width": "", "_view_module": "@jupyter-widgets/base", "_model_module_version": "1.5.0", "_view_count": null, "_view_module_version": "1.2.0", "bar_color": null, "_model_module": "@jupyter-widgets/controls" } }, "7c322510bc7b43db8c818eb9c6193c25": { "model_module": "@jupyter-widgets/base", "model_name": "LayoutModel", "state": { "_view_name": "LayoutView", "grid_template_rows": null, "right": null, "justify_content": null, "_view_module": "@jupyter-widgets/base", "overflow": null, "_model_module_version": "1.2.0", "_view_count": null, "flex_flow": null, "width": null, "min_width": null, "border": null, "align_items": null, "bottom": null, "_model_module": "@jupyter-widgets/base", "top": null, "grid_column": null, "overflow_y": null, "overflow_x": null, "grid_auto_flow": null, "grid_area": null, "grid_template_columns": null, "flex": null, "_model_name": "LayoutModel", "justify_items": null, "grid_row": null, "max_height": null, "align_content": null, "visibility": null, "align_self": null, "height": null, "min_height": null, "padding": null, "grid_auto_rows": null, "grid_gap": null, "max_width": null, "order": null, "_view_module_version": "1.2.0", "grid_template_areas": null, "object_position": null, "object_fit": null, "grid_auto_columns": null, "margin": null, "display": null, "left": null } }, "bc317eb468bb4510a4409bba3afc2082": { "model_module": "@jupyter-widgets/controls", "model_name": "DescriptionStyleModel", "state": { "_view_name": "StyleView", "_model_name": "DescriptionStyleModel", "description_width": "", "_view_module": "@jupyter-widgets/base", "_model_module_version": "1.5.0", "_view_count": null, "_view_module_version": "1.2.0", "_model_module": "@jupyter-widgets/controls" } }, "ea9927869ddf462783c8b47c0d2127d3": { "model_module": "@jupyter-widgets/base", "model_name": "LayoutModel", "state": { "_view_name": "LayoutView", "grid_template_rows": null, "right": null, "justify_content": null, "_view_module": "@jupyter-widgets/base", "overflow": null, "_model_module_version": "1.2.0", "_view_count": null, "flex_flow": null, "width": null, "min_width": null, "border": null, "align_items": null, "bottom": null, "_model_module": "@jupyter-widgets/base", "top": null, "grid_column": null, "overflow_y": null, "overflow_x": null, "grid_auto_flow": null, "grid_area": null, "grid_template_columns": null, "flex": null, "_model_name": "LayoutModel", "justify_items": null, "grid_row": null, "max_height": null, "align_content": null, "visibility": null, "align_self": null, "height": null, "min_height": null, "padding": null, "grid_auto_rows": null, "grid_gap": null, "max_width": null, "order": null, "_view_module_version": "1.2.0", "grid_template_areas": null, "object_position": null, "object_fit": null, "grid_auto_columns": null, "margin": null, "display": null, "left": null } }, "4ef3270b4b594bd58c4c93d0b6d5a322": { "model_module": "@jupyter-widgets/controls", "model_name": "HBoxModel", "state": { "_view_name": "HBoxView", "_dom_classes": [], "_model_name": "HBoxModel", "_view_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_view_count": null, "_view_module_version": "1.5.0", "box_style": "", "layout": "IPY_MODEL_28744aa50f7b4f27a2ccedf1fef9dbfd", "_model_module": "@jupyter-widgets/controls", "children": [ "IPY_MODEL_b622147838f34573b011532455c6983f", "IPY_MODEL_f564721b42fd4b08860ea29f9fc4d489" ] } }, "28744aa50f7b4f27a2ccedf1fef9dbfd": { "model_module": "@jupyter-widgets/base", "model_name": "LayoutModel", "state": { "_view_name": "LayoutView", "grid_template_rows": null, "right": null, "justify_content": null, "_view_module": "@jupyter-widgets/base", "overflow": null, "_model_module_version": "1.2.0", "_view_count": null, "flex_flow": null, "width": null, "min_width": null, "border": null, "align_items": null, "bottom": null, "_model_module": "@jupyter-widgets/base", "top": null, "grid_column": null, "overflow_y": null, "overflow_x": null, "grid_auto_flow": null, "grid_area": null, "grid_template_columns": null, "flex": null, "_model_name": "LayoutModel", "justify_items": null, "grid_row": null, "max_height": null, "align_content": null, "visibility": null, "align_self": null, "height": null, "min_height": null, "padding": null, "grid_auto_rows": null, "grid_gap": null, "max_width": null, "order": null, "_view_module_version": "1.2.0", "grid_template_areas": null, "object_position": null, "object_fit": null, "grid_auto_columns": null, "margin": null, "display": null, "left": null } }, "b622147838f34573b011532455c6983f": { "model_module": "@jupyter-widgets/controls", "model_name": "IntProgressModel", "state": { "_view_name": "ProgressView", "style": "IPY_MODEL_20c36bd041e6475b814af89942af429f", "_dom_classes": [], "description": "", "_model_name": "IntProgressModel", "bar_style": "", "max": 27000, "_view_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "value": 19240, "_view_count": null, "_view_module_version": "1.5.0", "orientation": "horizontal", "min": 0, "description_tooltip": null, "_model_module": "@jupyter-widgets/controls", "layout": "IPY_MODEL_fa9f532b9cb34e33befd8084086add2d" } }, "f564721b42fd4b08860ea29f9fc4d489": { "model_module": "@jupyter-widgets/controls", "model_name": "HTMLModel", "state": { "_view_name": "HTMLView", "style": "IPY_MODEL_f21040b4f0424743999a01ec72d68159", "_dom_classes": [], "description": "", "_model_name": "HTMLModel", "placeholder": "​", "_view_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "value": " 71% 19240/27000 [00:00<00:00, 83694.54 examples/s]", "_view_count": null, "_view_module_version": "1.5.0", "description_tooltip": null, "_model_module": "@jupyter-widgets/controls", "layout": "IPY_MODEL_86bcb3bc054a4abc99552d5391c80630" } }, "20c36bd041e6475b814af89942af429f": { "model_module": "@jupyter-widgets/controls", "model_name": "ProgressStyleModel", "state": { "_view_name": "StyleView", "_model_name": "ProgressStyleModel", "description_width": "", "_view_module": "@jupyter-widgets/base", "_model_module_version": "1.5.0", "_view_count": null, "_view_module_version": "1.2.0", "bar_color": null, "_model_module": "@jupyter-widgets/controls" } }, "fa9f532b9cb34e33befd8084086add2d": { "model_module": "@jupyter-widgets/base", "model_name": "LayoutModel", "state": { "_view_name": "LayoutView", "grid_template_rows": null, "right": null, "justify_content": null, "_view_module": "@jupyter-widgets/base", "overflow": null, "_model_module_version": "1.2.0", "_view_count": null, "flex_flow": null, "width": null, "min_width": null, "border": null, "align_items": null, "bottom": null, "_model_module": "@jupyter-widgets/base", "top": null, "grid_column": null, "overflow_y": null, "overflow_x": null, "grid_auto_flow": null, "grid_area": null, "grid_template_columns": null, "flex": null, "_model_name": "LayoutModel", "justify_items": null, "grid_row": null, "max_height": null, "align_content": null, "visibility": null, "align_self": null, "height": null, "min_height": null, "padding": null, "grid_auto_rows": null, "grid_gap": null, "max_width": null, "order": null, "_view_module_version": "1.2.0", "grid_template_areas": null, "object_position": null, "object_fit": null, "grid_auto_columns": null, "margin": null, "display": null, "left": null } }, "f21040b4f0424743999a01ec72d68159": { "model_module": "@jupyter-widgets/controls", "model_name": "DescriptionStyleModel", "state": { "_view_name": "StyleView", "_model_name": "DescriptionStyleModel", "description_width": "", "_view_module": "@jupyter-widgets/base", "_model_module_version": "1.5.0", "_view_count": null, "_view_module_version": "1.2.0", "_model_module": "@jupyter-widgets/controls" } }, "86bcb3bc054a4abc99552d5391c80630": { "model_module": "@jupyter-widgets/base", "model_name": "LayoutModel", "state": { "_view_name": "LayoutView", "grid_template_rows": null, "right": null, "justify_content": null, "_view_module": "@jupyter-widgets/base", "overflow": null, "_model_module_version": "1.2.0", "_view_count": null, "flex_flow": null, "width": null, "min_width": null, "border": null, "align_items": null, "bottom": null, "_model_module": "@jupyter-widgets/base", "top": null, "grid_column": null, "overflow_y": null, "overflow_x": null, "grid_auto_flow": null, "grid_area": null, "grid_template_columns": null, "flex": null, "_model_name": "LayoutModel", "justify_items": null, "grid_row": null, "max_height": null, "align_content": null, "visibility": null, "align_self": null, "height": null, "min_height": null, "padding": null, "grid_auto_rows": null, "grid_gap": null, "max_width": null, "order": null, "_view_module_version": "1.2.0", "grid_template_areas": null, "object_position": null, "object_fit": null, "grid_auto_columns": null, "margin": null, "display": null, "left": null } } } } }, "cells": [ { "cell_type": "markdown", "metadata": { "id": "MCJbmhBOWp1D", "colab_type": "text" }, "source": [ "# Neural Networks for Data Science Applications\n", "## Lab session (extra): Robustness and interpretability\n", "\n", "**Contents of the lab session:**\n", "+ Evaluating adversarial attacks on a trained network.\n", "+ Explaining the model with tf-explain or LIME." ] }, { "cell_type": "code", "metadata": { "id": "x4l7QDSu2ibJ", "colab_type": "code", "outputId": "b24fb1d0-43b1-4de5-d9f6-692917207c17", "colab": { "base_uri": "https://localhost:8080/", "height": 153 } }, "source": [ "# We are making use of the GPU here, so remember to enable it on Colab by:\n", "# Runtime >> Change runtime type >> Hardware accelerator (before starting the VM).\n", "!pip install -q tensorflow-gpu==2.0.0" ], "execution_count": 1, "outputs": [ { "output_type": "stream", "text": [ "\u001b[K |████████████████████████████████| 380.8MB 47kB/s \n", "\u001b[K |████████████████████████████████| 450kB 65.3MB/s \n", "\u001b[K |████████████████████████████████| 3.8MB 64.5MB/s \n", "\u001b[K |████████████████████████████████| 81kB 14.1MB/s \n", "\u001b[31mERROR: tensorflow 1.15.0 has requirement tensorboard<1.16.0,>=1.15.0, but you'll have tensorboard 2.0.2 which is incompatible.\u001b[0m\n", "\u001b[31mERROR: tensorflow 1.15.0 has requirement tensorflow-estimator==1.15.1, but you'll have tensorflow-estimator 2.0.1 which is incompatible.\u001b[0m\n", "\u001b[31mERROR: tensorboard 2.0.2 has requirement grpcio>=1.24.3, but you'll have grpcio 1.15.0 which is incompatible.\u001b[0m\n", "\u001b[31mERROR: google-colab 1.0.0 has requirement google-auth~=1.4.0, but you'll have google-auth 1.7.1 which is incompatible.\u001b[0m\n", "\u001b[?25h" ], "name": "stdout" } ] }, { "cell_type": "code", "metadata": { "id": "-su7jq932ntp", "colab_type": "code", "outputId": "d4816239-289e-469c-c0cc-58e698aa0624", "colab": { "base_uri": "https://localhost:8080/", "height": 357 } }, "source": [ "# We will use TF Datasets for the dataset\n", "!pip install --upgrade tensorflow_datasets " ], "execution_count": 2, "outputs": [ { "output_type": "stream", "text": [ "Requirement already up-to-date: tensorflow_datasets in /usr/local/lib/python3.6/dist-packages (1.3.0)\n", "Requirement already satisfied, skipping upgrade: six in /usr/local/lib/python3.6/dist-packages (from tensorflow_datasets) (1.12.0)\n", "Requirement already satisfied, skipping upgrade: numpy in /usr/local/lib/python3.6/dist-packages (from tensorflow_datasets) (1.17.4)\n", "Requirement already satisfied, skipping upgrade: dill in /usr/local/lib/python3.6/dist-packages (from tensorflow_datasets) (0.3.1.1)\n", "Requirement already satisfied, skipping upgrade: attrs in /usr/local/lib/python3.6/dist-packages (from tensorflow_datasets) (19.3.0)\n", "Requirement already satisfied, skipping upgrade: tensorflow-metadata in /usr/local/lib/python3.6/dist-packages (from tensorflow_datasets) (0.15.1)\n", "Requirement already satisfied, skipping upgrade: wrapt in /usr/local/lib/python3.6/dist-packages (from tensorflow_datasets) (1.11.2)\n", "Requirement already satisfied, skipping upgrade: requests>=2.19.0 in /usr/local/lib/python3.6/dist-packages (from tensorflow_datasets) (2.21.0)\n", "Requirement already satisfied, skipping upgrade: future in /usr/local/lib/python3.6/dist-packages (from tensorflow_datasets) (0.16.0)\n", "Requirement already satisfied, skipping upgrade: protobuf>=3.6.1 in /usr/local/lib/python3.6/dist-packages (from tensorflow_datasets) (3.10.0)\n", "Requirement already satisfied, skipping upgrade: tqdm in /usr/local/lib/python3.6/dist-packages (from tensorflow_datasets) (4.28.1)\n", "Requirement already satisfied, skipping upgrade: absl-py in /usr/local/lib/python3.6/dist-packages (from tensorflow_datasets) (0.8.1)\n", "Requirement already satisfied, skipping upgrade: promise in /usr/local/lib/python3.6/dist-packages (from tensorflow_datasets) (2.2.1)\n", "Requirement already satisfied, skipping upgrade: termcolor in /usr/local/lib/python3.6/dist-packages (from tensorflow_datasets) (1.1.0)\n", "Requirement already satisfied, skipping upgrade: googleapis-common-protos in /usr/local/lib/python3.6/dist-packages (from tensorflow-metadata->tensorflow_datasets) (1.6.0)\n", "Requirement already satisfied, skipping upgrade: chardet<3.1.0,>=3.0.2 in /usr/local/lib/python3.6/dist-packages (from requests>=2.19.0->tensorflow_datasets) (3.0.4)\n", "Requirement already satisfied, skipping upgrade: idna<2.9,>=2.5 in /usr/local/lib/python3.6/dist-packages (from requests>=2.19.0->tensorflow_datasets) (2.8)\n", "Requirement already satisfied, skipping upgrade: urllib3<1.25,>=1.21.1 in /usr/local/lib/python3.6/dist-packages (from requests>=2.19.0->tensorflow_datasets) (1.24.3)\n", "Requirement already satisfied, skipping upgrade: certifi>=2017.4.17 in /usr/local/lib/python3.6/dist-packages (from requests>=2.19.0->tensorflow_datasets) (2019.9.11)\n", "Requirement already satisfied, skipping upgrade: setuptools in /usr/local/lib/python3.6/dist-packages (from protobuf>=3.6.1->tensorflow_datasets) (42.0.1)\n" ], "name": "stdout" } ] }, { "cell_type": "code", "metadata": { "id": "YodHRGj53J1b", "colab_type": "code", "colab": {} }, "source": [ "import tensorflow as tf\n", "import numpy as np" ], "execution_count": 0, "outputs": [] }, { "cell_type": "markdown", "metadata": { "id": "mKC86D6yXD5U", "colab_type": "text" }, "source": [ "### Preliminary: train a CNN on a benchmark dataset" ] }, { "cell_type": "code", "metadata": { "id": "_ObyY2pL3LQl", "colab_type": "code", "colab": {} }, "source": [ "import tensorflow_datasets as tfds" ], "execution_count": 0, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "QJDINYWD3ViQ", "colab_type": "code", "outputId": "e5217120-c050-41cc-cfef-bd38f716c2b2", "colab": { "base_uri": "https://localhost:8080/", "height": 232, "referenced_widgets": [ "7974ddb37db94a9fa867fd64f6f38320", "b303894943484ef1a9dab57aba4e056c", "663249ddee2948f4b32239ffb91d1a46", "5b21d838bb464b8ea57f828d6d106813", "5d83e10b52b3402bbbb7aee8513f839f", "bca741fd9c2d4e25ad0879922f8211cf", "438052b447504eb2a58279dfec2b4cb9", "0349f24a0e024e3ba18af6e319d526f1", "eb1afd9bdd3f46f8b7f6bbf548f33251", "801079bc23fa417f9b353dc360adf7b7", "8eb8113f4db1468aa9c87ca140f564d9", "f946145b249a4242b21292e51563b4b9", "91dc9026cf32474e97958845bbb5db5d", "573a50e0d58d49069bc5de885b13407b", "f2633b9ec9664f5dbbb1295edee49082", "dcc9658a0b6141a0ba351f2e0c564bd9", "4099ae9c53c14dc39357930376a78235", "480130f71f2a4c5b9dd78c124f8b6585", "ab3788d44b03454bac1497dbf08ab260", "20137efc9f444ba4bf7e3f10896e3227", "3603465678e94beba2935ef05a25991e", "082ee7e6043648a5979dab8e67335358", "680d33cab8de409e99bcc55aa1789ecc", "eec93707f8cd4aaa852cfc3b828d6ff6", "9109d8ba47ff4239b8295751f0814fde", "aa59b9e690d9436f9922b40d88b6bef9", "7f49fefdacdc4def94c7751b1a837b1d", "aba803a319d246068db68ffb822bf6bf", "ea91f2318e6d48a480090290c7cb37dc", "7c322510bc7b43db8c818eb9c6193c25", "bc317eb468bb4510a4409bba3afc2082", "ea9927869ddf462783c8b47c0d2127d3", "4ef3270b4b594bd58c4c93d0b6d5a322", "28744aa50f7b4f27a2ccedf1fef9dbfd", "b622147838f34573b011532455c6983f", "f564721b42fd4b08860ea29f9fc4d489", "20c36bd041e6475b814af89942af429f", "fa9f532b9cb34e33befd8084086add2d", "f21040b4f0424743999a01ec72d68159", "86bcb3bc054a4abc99552d5391c80630" ] } }, "source": [ "# Eurosat is a dataset of terrain classification from satellite measurements\n", "dataset = tfds.load(name=\"eurosat\", split=tfds.Split.TRAIN, as_supervised=True)" ], "execution_count": 5, "outputs": [ { "output_type": "stream", "text": [ "\u001b[1mDownloading and preparing dataset eurosat (89.91 MiB) to /root/tensorflow_datasets/eurosat/rgb/2.0.0...\u001b[0m\n" ], "name": "stdout" }, { "output_type": "display_data", "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "7974ddb37db94a9fa867fd64f6f38320", "version_minor": 0, "version_major": 2 }, "text/plain": [ "HBox(children=(IntProgress(value=1, bar_style='info', description='Dl Completed...', max=1, style=ProgressStyl…" ] }, "metadata": { "tags": [] } }, { "output_type": "display_data", "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "eb1afd9bdd3f46f8b7f6bbf548f33251", "version_minor": 0, "version_major": 2 }, "text/plain": [ "HBox(children=(IntProgress(value=1, bar_style='info', description='Dl Size...', max=1, style=ProgressStyle(des…" ] }, "metadata": { "tags": [] } }, { "output_type": "display_data", "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "4099ae9c53c14dc39357930376a78235", "version_minor": 0, "version_major": 2 }, "text/plain": [ "HBox(children=(IntProgress(value=1, bar_style='info', description='Extraction completed...', max=1, style=Prog…" ] }, "metadata": { "tags": [] } }, { "output_type": "stream", "text": [ "\n", "\n", "\n", "\n" ], "name": "stdout" }, { "output_type": "display_data", "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "9109d8ba47ff4239b8295751f0814fde", "version_minor": 0, "version_major": 2 }, "text/plain": [ "HBox(children=(IntProgress(value=1, bar_style='info', max=1), HTML(value='')))" ] }, "metadata": { "tags": [] } }, { "output_type": "stream", "text": [ "\rShuffling and writing examples to /root/tensorflow_datasets/eurosat/rgb/2.0.0.incompleteUQZYVU/eurosat-train.tfrecord\n" ], "name": "stdout" }, { "output_type": "display_data", "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "4ef3270b4b594bd58c4c93d0b6d5a322", "version_minor": 0, "version_major": 2 }, "text/plain": [ "HBox(children=(IntProgress(value=0, max=27000), HTML(value='')))" ] }, "metadata": { "tags": [] } }, { "output_type": "stream", "text": [ "\r\u001b[1mDataset eurosat downloaded and prepared to /root/tensorflow_datasets/eurosat/rgb/2.0.0. Subsequent calls will reuse this data.\u001b[0m\n" ], "name": "stdout" } ] }, { "cell_type": "code", "metadata": { "id": "-2n_U_FO3Yzf", "colab_type": "code", "outputId": "f5e03b77-f3d7-41b0-eaf2-f4a0dd9b4042", "colab": { "base_uri": "https://localhost:8080/", "height": 302 } }, "source": [ "import matplotlib.pyplot as plt\n", "for xb, yb in dataset.take(1):\n", " print(xb.shape)\n", " plt.imshow(xb)\n", " print(yb)" ], "execution_count": 6, "outputs": [ { "output_type": "stream", "text": [ "(64, 64, 3)\n", "tf.Tensor(4, shape=(), dtype=int64)\n" ], "name": "stdout" }, { "output_type": "display_data", "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAPsAAAD7CAYAAACscuKmAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjIsIGh0\ndHA6Ly9tYXRwbG90bGliLm9yZy8li6FKAAAgAElEQVR4nO29abBl13Ue9u07j28e+vXcQDcxDyRB\nAhRZMkcZImlSdimMaJfDJKwglVISOrHLJJOqlJ1KqqgfkUynUiqjTMasimySEiUSgmWJJASIIkSD\nAISBABpAj+jhvX6v33Dfu/N0dn7c23d9a6Ff9yPRfRvW3V9VV+/79rnn7LPPOfestb+1vuW89wgI\nCPibj9iNHkBAQMBwEB72gIARQXjYAwJGBOFhDwgYEYSHPSBgRBAe9oCAEcFbetidcw86515zzh13\nzn3pWg0qICDg2sP9ojy7cy4O4HUAHwNwDsDTAD7rvX/l2g0vICDgWiHxFr77XgDHvfcnAcA5900A\nnwaw7cOeymR8Np/vf3Kqzzn5HEXRtn0e8uPkzD4Y9ieM98k/cC62/T4sYnQ8d4Wv8e9nZH5M+Vzs\nPtw2n5w5GUf2mHPaOOPz5GPb7bznOdZH5u9FV9gOdKxYLK7HyJvS/mKxmNluZ9eQr5m9PxJ07Hhc\njyPqdmW7hPSlU/rW531WG03dt92gAKRSKdpQOtudttrO0RjtKfO1UNfFHCtOc+e2ua+q1QoajcZl\nJ/WtPOx7AJylz+cA3H+lL2TzefzSgx8HcJmLHpNJa7Uaui8u23ovFy8ZS6rt+CbtmomqNmWfDbqY\nqWxab0gPf9xMWRZywfjetjdsh26wRruj+hIJmfKk+aFJJuhidvjC6nGk0rQPvtkAVKv1QbtJN1wy\nlVXbNVst+qSvRaMr36s1ZN74OgBApy7b5bM51Zfg6xvJfOTTGb1devtbsEt3e6cj81ir1dR2k9mx\nQXtqbFz1Vctbg/bslPTdvH9ObVeuVwftp189qfoadDPR7QcA2L9/v4yR7qvl5WW1XSYnY4wn9AVt\ndWSOO12ab33roJiVuUt19ECS/fn+kz99FNvhui/QOececs4945x7pmV+MQMCAoaHt/JmPw9gH33e\n2/+bgvf+YQAPA8D49Iy/9PvivX6rxclEtH0xNuM9vfHMG9Vfwd5iM9DH2JQ2v3e0Xdya+Hw8GqM3\nr96INustbVweb+7jcbnL/PXSAbf/jY62sYrfbDryfGzfx4iZkex0vSeWEAvMG+tAWW1m8PHY5d/s\n9hQ9+C2nTXxl/nPbngtfi8ic1xXdIdrnFVy7uON9mA35PotkHF1zX3Xo1GLGqr20yytdkbfyZn8a\nwBHn3CHnXArAbwB45C3sLyAg4DriF36ze+87zrn/HsCfAYgD+Lr3/uVrNrKAgIBrirdixsN7/ycA\n/uQajSUgIOA64i097D8vHIB4f0Xb0mbZtKyKZ7N65bi0tTlod7rkuJgVyURK/JhGSy8GdmhbWhxG\nt6v3odwp6xfREnyrLSvRdXMspnF49R0AksQ62JXddFpWtBMp8bCazbrarkuLE3alPkEr+q0WsRPm\nPFNpObemYQwc7TSbk+uSTOr5yCRlddh564tLu9GU+eHVfQDodIUVSMQ1szA+URy085n8oJ0zK/pZ\nGlcyrcdYpH1sVuQ+Kjcm1XZMt3UNlePI2zUkElptWklvbe8xFwoy5lZX03JLazIuXq7yXb3+UKvK\nGNuKTQGSid51anX0dxghXDYgYEQQHvaAgBHBcM14F0Mqk71sHwfZOBMFxX3phJiVcUNdcTRT10RZ\nNZ2YQMn4FQgKMp2cmR2/XSSYoQq7RN0kTB+b+O22NucyKTH1ohhtZ8zKiPyQTELPQZL3QQE29aYO\nREnRdm0T/9Duilmfzcv1SsX1hDS8jL/Z1PvwjqPrYpdtA4Bvy/w0I22aVsoy5mZc9j9eyKvtXEb2\naeeUP/M0dgxtWK3J/ptNPQ62puNp7WqsLK8O2q2GHKs4pseYoeCt6oa+Fo7mtdmSue+2jJ9HFKO5\nvVFt9K51x3YQwps9IGBEEB72gIARQXjYAwJGBEP12bs+QqVRvWxfrUF+eVonp2Ry4jfW6+KHtiPt\nn/k2+dTGJ5soFORYbfHPOl1L34lPFtkklgxlVyVljDXj8/L44zYrjSjHyETLbjYqg3YmzolB2ofk\nMbcNf+fIh29RX+IK2XEpk0yTiYk/n8lIe6taUds1yEe11F6S1l26bRl/sah92TTRZtW6phg7RCPx\nHHsTbtolKiuT1OeSpnPL5SUZpRvp+SiX5dippKb2GkTbNlr6nlOJTZTUw+G9AHBuURJjNrf0PG7V\n5Nie5s1mZDIlms7pta8o6h0vdoUszvBmDwgYEYSHPSBgRDBUMz6KItT6eeU2YyqleC5DNdXJnKuJ\nCRSZ7TIpMZ/ThiaKUeQaZ9hZCobppZahcdSYfGfbPoYVU4hThFvCb58R58nMtvvgXPTNsnYhUhk5\nTzYx28bM9jx+w9akcxLJxxmH3YY+Z57jwviE6rvjtttlu6SM/9zSotqOTdrIME1t+kOSrNOO2XCt\nJFRWzlK7dH3TlH3XNffOylpp0N4oazO7q1wvbSa3KuVBO0UmtL2/2SWJzDuWIyLjfvvrniHaz5t7\nM9W/1lcSdAlv9oCAEUF42AMCRgRDjqBzA9PSmjnJmAzlTX1kmRRJ/shqkakIOmu2UvQRJ4/kU3rl\nNU3JNPGY3r/SGCDbN5Pa3hxPOOsmyLZ2/Gq89LV4UptmqUjGGDOugKMINZ5HyzpwYF+sa7Xl5HOS\nbpHJfFFtxrJg+/fuU30PfvCDg/bMzMyg/fvf+QO13drK2qCdMok2hbQwKOvr64N2s66Tabr0yooZ\n94rVkWYmpwbt5dKW2m5pQ/bvTWSmmivjHrJgRaOzfWRmlJANs1nNGHBUYZei93LmWByNmU5qxurS\nvR+3mTp8nG17AgIC/kYhPOwBASOC8LAHBIwIhu6z22itwUAowssm7aeMIMEAZjumUyJDz8SJQmLZ\n47qJ2mJRAK2tDnS2EUC0uot8jkwH9jamcb1JsJEy/zibzURFpSPZfz6l5+ZS9hOgM/+srnubIsFy\nSU1XZWnMTGWNZ3X0WzEj8zhV1FLSBxZ2yXbjErm2vr6qtqtWhbpKpvX+k0Qd8pqLpaR4eqw4Bkta\nJyjzbG11Q23nyT9OJvQ96ml9Jmukx7ciuQ86TsYYM2OcIBGN6Uktd12vSFRptyH3X96kXcYp6s8+\nR416/3tXEAENb/aAgBFBeNgDAkYEQzXjAY9OdPmotIhMlopJuIjXyRSjCDSb9MCmtRVJ4CixdqdJ\nfzb68mRl2wQUBmu+J4wpzdFSTa8j3Ng0jUObejUy4WIxGUg6q+nBiE3HjhW2IPENcl0ycTNGuvLj\nBW3Gc2kknkXr8sxMiDmay+j9HzwgZvzFDYlOWyutq+065CqljRAHC0/E6DqNj42p7TiibmtLU2qs\nMs8CG2+K4KRzjoy24XhBTPCxce2uJFMUjUmTlTZzmiBfo9XUroYnwYrposxp0biAysU0iTyb/co3\nV9LyD2/2gIARQXjYAwJGBOFhDwgYEQw36837gR9s613FKJzQ1szi7DMO7WyZsrgcIptKaH8nHict\nd6L5MkYEoMHUjaGruAZYkjOQjDBEpSx0kk3lGiP/L23WHFTdMNrlVl0LfsTJf+1GNixYkGAhBOPb\n50lgo2jWBHIkWNGm79lrxmWDp6Z01htXRF46f07GZEKLJ6fle20jsNika1HIyHhnJ7TPzr54x8xV\nk9Yw0kThNjJ2nUX85omC9st3z8n6g64rBzgKqW6QyGY2p+e0tC5UX9Q0Gv60dtOiUGBn9PF5/mtG\nQPRSNdwrlRK/6pvdOfd159yKc+4l+tuUc+4Hzrlj/f8nr7SPgICAG4+dmPH/BsCD5m9fAvCY9/4I\ngMf6nwMCAt7GuKoZ773/kXPuoPnzpwF8sN/+BoAnAHzxqkeLPDp9Uy2ymW2k79Yx1EenKSZWnMzA\ntqWdmDeL6VNLkonFZZ2srhrrnXuj6sDiAUztNa+QURZPaHPRExXUtQIHZHLWScfcJqU5NtZNdB2P\nq1UTqsZGv81NTA/ahZTNwqK5cxQpaMotN0lbbmpqSvXVauJivfjii4N2w0S4FccpmsyULmpsyXnO\nTIi5PzutDck2j2Ncu2VnllYG7SS926xGHIuRFPPajB8js75gTPxqTeZ1eU2iAxtb+jynM3KeLRht\ne8rMY+35EruDBm0T3Zno+01Wt47xiy7QzXvvl/rtCwDmf8H9BAQEDAlveTXe91aVtmXynXMPOeee\ncc490zYFEAMCAoaHX3Q1ftk5t+C9X3LOLQBY2W5D7/3DAB4GgOLUtL8ks2ysELRphTJq6N+OsaKs\nYHc6YrI1IyP1TPLLb17tl76mqthpEmbITUiaiC5mCdpUvRNG7CBO5q41qjiBITLH5gi1iCIFO2ay\neNWeNecAfT4JmoOZCW36fuJjHxu0ixnNXDz55JOD9kZFjj2ze7faLk+r+HOU+ALoyMSLFDVXKpXU\ndk1KZoqZ2UrQ9d0zK27HpFmN53tizEhVb27JqnWpKiv1bVOuisuz2hJSjYbsw+6ftUlixNbE2/qa\nsameMkkyNRKs4Eq5rbqO4OSyaPGk3kenL6d9hQC6X/jN/giAz/XbnwPwvV9wPwEBAUPCTqi3fwfg\nJwBucc6dc859HsBXAHzMOXcMwEf7nwMCAt7G2Mlq/Ge36frINR5LQEDAdcRQI+hisRhyl7KButqo\n2FoTf6qQ0vTGntnZQbtDUXNbFU2bcblbq5PObEedfKGkiaRi2olLFwNa8I+j8GJpPY0cZTWW1ufC\nUXO2zHEyKftx5PfHjSPmFb2i/dwklzsiQYY7Dx9R2/2tX7p/0K5srKm+J/+C5ofWDnYbn71G0Wre\niCNuUYZWhaLC0mlNjbUo088KcI6TUARHv8Xtgg9lEnKZagCYGxdKsN6UEkzWL4+Tr7xR0ZlznKlo\nx1gpy7YblN1nS5ipe8dETs5Oy3oE779lyorx/ZIv6IjFVrc3j2/K9iSE2PiAgBFBeNgDAkYEQ9eg\nS/bpsZihxnJE/2RMRJfSp6PvZY1WWLUsFEnC9OUzQpmwKIXVqlORVUbjLsqQiAYN3woGZCmBwWqh\nO47yM9Qhi0akSd+tUtPJHfytrCl31CYa55bDNw/a77zrTrXdrnkxHV9fW1Z9XGIrliSqyczVWUpw\n+e6fPKr6iuOi+X5m8fygnSto7Xl+31hhEy6BFdE9EDcJIl0yybtev7/GKUIvvbkp+zD0F5dgqtX1\ndVl3Yp636joBhe/ibDZL2+kIujbdS1Y/bpxcDaaMG0mjj0jnad2JsX6F2qAbHxAQEB72gIBRQXjY\nAwJGBEP12bvtDjb6tb2snzs7IX4L+z4A0KZwSPaprX/COuYxk20Wp9+1HNfJiulxNCiDyrjsaDXJ\nNySfL2HoL+UOGsl7Du10pg5cloQru+TPJ4yIhidKMGWOnY4x3SY+e8Jk8L30ws8G7Zdff1X1Ncgf\nnCIRBusnnjzzxqBdbRkxBQo7zlDGXTKuKaka+cA2A5EpthPnlgbtpmYAsbYm1OHqutaDz1J9unpX\nrp+9/9qUcRc3c1WnnI6EESpJEg06QfUIUoaK5Fp1jZah/bYku43XGIr5gtqO579c1fRgt0/3dq9Q\nPzC82QMCRgThYQ8IGBEMV4MuitCo9egEa0b5CcquogwnAFi8INTQJpXadU1NkYyNSVQRa8QBQI3K\nIsWYQjJmWZFKENkEIt4HC2qkjcnGX+w0deaSJ+rNzgGbaUzVOG9y5yi7KmWyn6gCEe69865B+z3v\nvFtt99Wv/stBe21LZ6KluOTTlFyLtqHGml0WFTEa5yQG0SiLeR51NY1YrcicelMim92Xl189Nmi/\ncXZRbcevrHJVuxOFMTn2Vk2O1TLiFUyR5rPafGa3z0a1ga49U2pTkzrCLVKluPQ9V6vpMV/CngXt\nr6SInq4bDbrmpecqmPEBAQHhYQ8IGBEM1YxPJOKY6leztCu7jkLSbIJLrSbRSHGKkMqbhIImrcq2\njJR0bpwityi6LmbMzyatuNuyS77NZiv1GXufRS9yRhiCV1GrxsRX0Xtk4ifNubC52DU6fGO0gvvD\nJ/5y0D76ml5xP/bGmUHbmpUtWpmu0Up0hSLQAK2RFjciGhztxXPqTMkrjnQ0GiBIUckqT1FtzYbR\n/KO7OGP04yJyBRp0LjaCjj/HunpOE2mSejYab02KxuTSU3GzXaEg7qFNwmEzvlyV8yxtaVaKx2ir\nA3fb2i25HMKbPSBgRBAe9oCAEUF42AMCRgTD9dnjMcz0fXZvosKYgjl35ozqa5MoxV3vuGXQ/nsf\n+rDa7s7bbh20n/irH6u+H//0p4P2GgkcuITNsKOyviYzj0s3sf55Ma99K9aXzxhftkbCCFZwkoUz\nuGyw9S/5slUqOjMq1pW+5188OmgfP3FSbZfOsK+s91+ndYWzFLlWqmodcxXNGGkfktU5Y1SO2xnH\nXAt+6ndPnCIKb7r18KDdqGr6bnlNxlgs6qy6WEzOc3VNousShrJMcqksswbDpZKThmbtklBJg+7T\n0qaOcMvTWoLVrOfzZIGK0pZeI2FBDDuOifFe1lviTfeKILzZAwJGBOFhDwgYEQzVjE8mEtjVj8iK\nGzPkdF2i5LpxTcvNLsxIe1rMtA9/6P36ACkxHT9z88dV13/2D39t0P5v/rt/MmivbmjTlKmmREpn\nsbB+XHlTTMIktFk2nqMIwJam1+Ynpa+Y1xTMGpl+ng8d0+OoVGWMxYLWUC8ULq9n1jRUZ7Mq42J9\nNwBoUqLGFgmC1I1mXi4h9GPcvDc8aQxyAlHS6vVxuSpDSVUhx37jnLh2aZPkVMwJrTU1riPXuh25\nJ1LkOhqFQmVapw3VGRGtlbDjJ5ufy3nZ8kycYOVMGa1KSdwSpkG9oe/YFbBz0OgnEb2lKq4BAQF/\nMxAe9oCAEUF42AMCRgRD9dl95NFu9Sirjjm0Emk0gnxZElBoUObZI3/8HbXdJz4u9ctiJpT2+49/\nn/YhvmA6pamKjU0SW4Sm1PinMUt+17jx43ZNih8dN+ISZRKPzBmxSBYbrFB2VWREFJtx8Tj37dun\n+g7fJNSkqovX0hTd8vIFaZNwJAB0SeRhelJqxI0bv39hYWHQvummg2b/FwftU2+IyIWlk/g8V032\nXYd8YNZyzyb1fI9dwZftUBg2U5iJpFljoGNZejCuttW8XC5HwqAU5t3s6PWHFmUIFgo6qy4/JutQ\njjIaczl9f3BGW9yM45LoxZtpWsFOyj/tc8497px7xTn3snPuC/2/TznnfuCcO9b/f/Jq+woICLhx\n2IkZ3wHwj733twN4AMBvOuduB/AlAI95748AeKz/OSAg4G2KndR6WwKw1G+XnXNHAewB8GkAH+xv\n9g0ATwD44hX3BT/Q+nIJTX402kKB7T9wSPXFiN44dkxEDC5cOKW2e/zpnwzazbY2c1597cSgfeSI\nRNr90i89oLabnBEtvB//6AnVt3VRzMypPXODtutoSupm0mSv13QGXyZGJaoMpZagUku1RamC3e5q\nkzBJFGOzqanD8+deH7RZyy8yEYus0R6PmwytnJiVs9NCe25uan23e+68fdD+1Kc01cnaISy5dn5J\na9T/f9/+9qD9Hx5/QvVxGWVE0o5MiBvr3W2a+V4tidvQINM6n9IZjY6O1THzjQ6Z/8ZMblHUXJzc\ni+o2ghQAkCvoss/TVE47TqdmS4azaMm+vXtV16VITesCM36uBTrn3EEA7wTwFID5/g8BAFwAMP/z\n7CsgIGC42PHD7pwrAPgOgH/kvVeBv763unHZMvDOuYecc884556p1+uX2yQgIGAI2NHD7pxLoveg\n/573/g/7f152zi30+xcArFzuu977h73393nv77MS0QEBAcPDVX121+ODvgbgqPf+t6nrEQCfA/CV\n/v/fu9q+vPdo90MPG8anaVAo5lmqDQYAsyR6yKV1txraUlgpCYXku9p3SaaF7njgAfHTbXjhmdOS\nHRYZ+qRaEZ/9zsMHB+2E1+sP02Pik3VzeorzWRn/hc2a6eMaceKvVU2YaotCLy+aOm3NuvisHAJa\nMuo/05NT1NZESpJoRe+E7tk01NjueVm3qG3ptYMLtO3ktBxr3x7t7WUoJDnyxldWlCO3TZ3AvMx3\nx2QSrq5TOWr6Wtdsx9TbmwQhqTR13pQTTxANqspKm1DXLIX02nLOTcqgnCBabvcuPVfTk6IpHzNz\nUK/0xuijyxrYvbFu2yN4P4B/COBnzrnn+3/7X9B7yL/tnPs8gDcAfGYH+woICLhB2Mlq/I9hf0oF\nH7m2wwkICLheGG75p26Ect90dSYKao1M2tmMzuQ6f2510L7n7nsH7f0HF9R2L7z4/KD9s1eOqb6J\nKTElxyjC7cknn1TbvX7iuHwwuu67Z4hSo+i0gonGKm1JqZ98RtNrMTKLrYjBoUMS/XbXu+8ftJ9/\n5RW13U+efXrQjpt55LJXXApqIm/MSnKHrMBGikzrRltcpbEJLQyxmyLonnvmOdX33Uf/eNC+7/73\nDtofNxRdgyL7sibL0FEUpCN9/6oRr+DSSvm8prWSdJ4cGVhraxcwTjRozKw1x0j40paVTibF9cpT\nROQc3W+9ncj8t43Q6HhR7scjNwntXCxoepApwcgITI71S2TH49svw4XY+ICAEUF42AMCRgRDLv/k\nB+IQ3ggVZEnvfGNDJ0sUM9KXodI8SZNIskl6bE1TgnVhj5TSYXGCzXV9rHxeVjwjp/exviHhBS9S\nSaNd09rtmJ+W1e3ZCZ300KLVUh/X5vPuBYmKKlFMgi0TVcjJPqum3FFUl9XhiTE5l5kJLerAkVbu\nTWYrtWkK9u3bo7Zjs35lbVX1ra6Kac268azdBwAb6/K9mTE9jx0SgKg3xPRNmBXnGFEqGbPSPUZ0\nb6MtJxaZc47ovWffgJ7upY6pwJodl3lk0z1jBEFS5F5Znbwpuk7sapQrWsduklgTK/l34kQvQrRp\nxFIY4c0eEDAiCA97QMCIIDzsAQEjgqH67LF4DJnxPp1gBAJycXFCOh0d3RQ15fPzL70waP/op9rf\nXitJVpaNkGIf9fwZiTqrrGuf11GEW6Go/e0KBbJFFGW1tKppnCgh9M9SSUe41Zvis+ay46rvL/9K\nsvbWqI5a0/iJBSornYnrdQuuIxYRtVcxEXQTRD/ClIRuUS21Cgl9WJ+dNdMPHtKZih/5yEcH7fsf\neN+gXStrP9QTDfXeO25TfVtlodiq5OuvbuhIvmSCsvtMSGR6SrL2SnTscs3o7cc4q051YWyM7oOW\nprz2zkmUG685TE/pNZKxgozRRujxugvr13PUJwCsUDTgmfM6yvR8v6w517OzCG/2gIARQXjYAwJG\nBMM14xMxjE30TB3v9O/M2XMXeEvVl6ISTTlK6DfVilWCQWRcgSXSWbvvtrsH7b/98QfVds+++NeD\n9uKFJdXXorLBaaJBWsYMPr8uJnitrs1nTq657cis6puhxAdPkV/nF/U4UkTZTRZ0YoYqB+xkvPWG\ndldapP1mI9JSVGa67WUfF4lOA4AfPSkltnbN6WjGu98tkY4Zco1eevl5tV2WKKoxo7mWJldvdkbM\n8VRSR5bViG5aL2k3gV0g1tEvmHLcHIm4uaX3wUFphXHtevE9x1mdczM6gi4OjpzU9NjCnJzbhYtC\nRZ46rcugMb1ZqWsKM5PtuXaxWCj/FBAw8ggPe0DAiCA87AEBI4Lh+uxwyPTDBjumb4P8xq4JZSxm\nxS+N1cUnsQn8+3fvH7QLJoNqhfzvn/xUfM2bD2vKaJpCXe+66y7VVyFN+aOvvzZoL124qLZrskZ4\nWvvUhYJQMjO7tJ9733vfPWg/+VdSYvrsOU2zZEhwMp3Sv9cTFHbMWvGZuJ5Trmm3bsKTPQlftonC\nLBs/8fT5s/IdI+Cxe06ELaZIULG0uqa2G8vp+VHjoMsbke9t1xiatN3yht5/jSg21lTPmlLdM/Oy\nftJs6vPcIq37WkwfG7SmwX75pAmTnqcadOm0vmb1poxxcVHWlo4d14KqsZSsD6RSen1jbrY334nE\n9o90eLMHBIwIwsMeEDAiGK54RRRhq6+V1TVRSo4oNZuFVWmJWVVflfZkUWdJzc0LhTFT1BTJ5Lhs\nu7YuZvezzz2rtsuRVti4oVkOHhA3IU86c9VndYTbOaLKusbVcCA3xOiC10hTr0wRdDZTrFEXGs1Y\n8ZgdF/N5ckJMvZKhk+prlEWW1SlUHZ5/LsG0qfcRa1AJZKO1zqbpeXKhfEPTTu++855BOzLlpViI\ngjMOc8b0b1BJLRs5GaeIuiaZ//GMPhZHG1r3kOc/Zcz/zU0x8Zk6XDNRflOU6WZFOkBzlyY3zJmy\n5q22jLnR0Jp/lxI0O23rIAvCmz0gYEQQHvaAgBHBUM34TreLlb7ZY1fcWQetZjS6umTedUnQoNLW\nQf+LqyRd39XmDK/o790j5nippM2tzS1Jpjl28nXVVyMxgQwJSMScLZ8k5me8o39PJ8fFnFtd0Uky\njz56etBePC+uRs2YvpxU4Y1kcZ1W4Ms1mYOtul5FrtPcdaBN3zatKrdotblU1qZjsi3mf8GUNGqS\nn9akYydNtCHfBzaJI5mU/bN5nsvo6LeNmoxr96yOXDs4J4Igx14TfcFaV89prSJjLOS1m8BXMG4S\nuEDCFizSsWYYjjlKjFk19+2xU6cH7Q4djU16AKit071qsnXW1nr3rU0iY4Q3e0DAiCA87AEBI4Lw\nsAcEjAiG6rPDObhU/5BeUx9xSujPGH++3WGKR3ySmol0ev2klGVezuhMsVxa/Ly5MdF/T5hyxRG5\nPIUx7YeWKZLq9GmJbsqYKLkJ8uebNT1G9gdrpgTWG2+8MWi32lyOSPuJRcp0s+WWWRyDaaGOoZOq\ntF3X6/WNDtFtXE7J2RLCtFbRMQKfGxRt2CFxhttuOqi2Y631dk2vCbDQZqUs+8gUtGBjlUpPfeD9\n71N9n/7Irwzaf/j73xm0n3jqabVdl2+5yAp8UjkvI17BWu4l8tMTZi3l9DmJjDtDkYcAsFGS8Scy\ndM+ZzFBmJll0FABSfZrOlkbBMyUAACAASURBVJRmXPXN7pzLOOd+6px7wTn3snPun/f/fsg595Rz\n7rhz7lvOue0LQwcEBNxw7MSMbwL4sPf+HgD3AnjQOfcAgN8C8Dve+8MANgB8/voNMyAg4K1iJ7Xe\nPIBLNlmy/88D+DCAv9//+zcA/DMAv3vFfcGjPSifc4UyNUajK0PllZi0sHrqbaIdLpa1aESaNOVb\nTfneTfv3qe1+7eOfGLS7TW1mlyjybosi0qp1bdqdOHl60LbxTJzoYCo3YXaOaCMv5hhTOgCQpi/G\noM3nVkfMxwbNRxTfnvJqG7OVWR3WmUsaLXQ2MzuR0Q2ka8MJKPmUps1idOxkfPvbsUZ0VbuhTdUW\niVeMFbR5260LXfXJX/3goH3i7Gm13akloW1tok2GXI20LbdFc8XCIVsVvY+IbumNLX1feXoMk1Sy\nK5nWyS71qpxn02joJfrRhtvXcN15ffZ4v4LrCoAfADgBoOT9wNk7B2DPdt8PCAi48djRw+6973rv\n7wWwF8B7Ady60wM45x5yzj3jnHumZWK8AwIChoefi3rz3pcAPA7gfQAmnHOXbI69AM5v852Hvff3\nee/vS5nIp4CAgOHhqj67c24WQNt7X3LOZQF8DL3FuccB/DqAbwL4HIDv7eSAfhAuqb0LR2GUcUM5\nOHKMPIkYNE3JY/YTE0lDQcQoHJfqqCXMsSYpo2pyYU71PXVxcdBO0f69SeFbmJXsu0JR03L1pvie\nzZb23Tjbin3llKG8UiRQYMs+N7uyf/ZzMwmjL0/hxLbuGXjNhOe+a3x72oddZ2Gd/gRRh3Y+WPQi\nYTLKONuMRTQaVb0e0yI67InH/lz1rZ8UkZHP/ue/MWgfOXyT2u7EWXlXJYwwRJfOM28yIXm9gGnh\nqqFVU5QRl85p6rBMNGWd1mdsmDTPab2ufXb0MyZt5iBjJzz7AoBvOOfi6FkC3/beP+qcewXAN51z\n/weA5wB8bQf7CggIuEHYyWr8iwDeeZm/n0TPfw8ICPhPAEONoPMeiEzW0yXEmKoxJmGHLJOW0kU3\n+yKTM261uMhc5Gi62246oDZ77x23DNrVis6IK5Ce+nmKTisZrfIJ0htb2KW14bt0nsumzHGVxCuq\nRBWmc1pcIkNrH+treox1yuaqVcUMTiQ1bcbmp3WH0CUhEcryihsdu7iK1jKuAEVIcvmkMVOWWdGn\ncX3dOQqvSSbyVkWbyB0SdWi1NAX42jHRXv+LHz05aH/0I39Lbffj/0ilt7aMMERSzOdSWrsafKvW\nGkK3eZOVxlRtJqtdmWT68i4m69ADQIL09zNmrrYqvTF3/fZmfIiNDwgYEYSHPSBgRDBkM94Pooyc\nsfq4eqVdYa6TrhaLNfiONlmStFrpzc9Ygk41R2bUmCmflB6Tz/W6FiBgk5aj2uwKKGukLS9rgQpe\nVa4bnYFaXfbJ+ndWHjhGOnZ1U+GVp5X3kUprV4AnKGHcpohYAd5fxuyj3d1e7yxB33Rg7TQda7FJ\nUX5Fcy3WKfGINfQ2THRklszsT/ydv6P67rvj9kH79VdfGrTvvOsOtd0X/qf/cdD+yv/1f6u+rpP5\nr5moSk7kiSmWRN8TvHreNgITLPyRorJUWaMNWKfV+Vak5750yYzvBjM+IGDkER72gIARQXjYAwJG\nBEP12Z1zA7GIuBFT4OisphEe5Kwszq6yWW+8TysC6Wkfm0SVvfzqcbXdqVPyeW1Vl3XqUCba2JhE\nyc3P68w5pqRWXzum+taJ1mk0td/FrGSLtPLzhqrhJY1K2ZRbzlI552mhABsd7dsXKTssa7TWmcLk\n5YjoTawplXY2IoqOFmVYU37pwgW1HdOsHTMO1txP5sSXjRu/v0sZfd2EHuSR248M2rfcfrMcy2QL\nvnLi1UG7bV+BdJvlUtqP5kw9FsK0paOLpBvfbOvIOF7zGSf/fc3o9K9Qaau2WRPApYjOyzPbAMKb\nPSBgZBAe9oCAEcFwq7jGYij0zceYDbgiG9ZrZgXthpiIaUrut9FCjmgHS2/wpl1S0Dp99oza7tvf\nfWTQ3rdnt+qLYmJOp7NilhUMZbRWEu35lhGGOHBIEjDiCR3VVlqX73XI1Gs3tAneoM/vu/9+1Vdt\nyOStrovZ16xo07daokk2eml5MjlzpMNnNfPYZrRVUdmMZ52/yCQeNUijr2HM21xexsHuxJuoWaK1\nXnjxRdX32b/7qUHb07vtG3/wLbXdH//ZD+mTHiNTn+NGy50TedJJ6fPGjeQklmRXz9XaRXEXY8qt\n0fPB4hi2fNr2hJsgvNkDAkYE4WEPCBgRhIc9IGBEMNxwWXi0On3/28SzpmLivxaMaGCWtLTZX2u3\nDAVD1E25rv3cGPmKXG45W9Ta8CurkkU2VtR1wyZnJgftjJPxxhPaLy9viq9syzLv3Sc03YH9+1Vf\ngsIyWzVZp9gkXx4Amg3xnWfm9BhPnz0p21VljOlpnX1XorphUaTHmHBCL9Uow2xtY11tF6fxJk1W\nHXuRnL2VMesb2Yx8L5fT85ggP3dtXUJnDeOqqM7TZ8+pvn/1ta8P2i8ffWXQfmN5RW1Xq8r9MlHQ\nAhWZuIzRmay6iSnZtkS1AHN5rcq0tckLUfreL1I5cU/zNl7UIhd1ohw3Df0Y66+7OJsJuu1RAwIC\n/sYiPOwBASOCoZrxUbeL8lY/4svYYkky47NpbQKlST87T30pK4RA7bMmUotpI6Yw6obuaUay/xUT\nBdVNSh9ntnkTCbdBwhZlU+b4Zz/72aD92isvq7533/vuQfv+d71H9n+TnqtGXc6l1dZ02PIFMWPT\nZFo3TbbWXbfdNmgXxmdU36uvS9RfmwTPZye0Jh9nLloNuvWS0En1rkT5OZOV5Tg6squj8BYWFgbt\n6SlxocbNde9QBlitouf78T//kfSROEjb6Vs/laBss4SOkpslMZKpMW1aUwIi1olyrRqdPNYXtNls\nfD+2qARWNq+PNT0h44g2tWhJpXnp3LZXjg9v9oCAEUF42AMCRgRDToSJIds3hWMmYj8igYqorU29\nWlPMwG5KTNOEWUnP58XcL6SMLDGJHzSodE7FlDRaK8lK+unlRdU3Mykr31OTJAxhVtwvUJkortAJ\nABvrMo6sWcFuUMmgxfNS0XVuTpvZmQy5ECZScH1dVsx5ZbZhZKtvuVPqfBzef4vqS9C1aXflfdC2\nWnUUPXbw5r2qq96S83766acG7dV17RpNT0tF3XJJi4V06T6YpaQeGFcgRSWlWjN6jBzdeJyq/F5Y\n1vp/ExPiGtxxq66BkqIIw6RxP1kPsFKp0Hf0PdEkU92umM9Na0blEqpNIyVNyUA2irDTTx4Lq/EB\nAQHhYQ8IGBWEhz0gYEQwVJ89nUzh4ELPt7O+RZvoq1JJ0wpMTXRIYNFux/5rMWdK+CjKRH7jrFhk\nhyikqKuj8BYvinjkRfLLM2Z9IKJxTBt/bO+CZNId2Leg+qpl8WdXLi4N2mfOnlDbgWijqKN9yDRl\n0k3PiT88O6sj6NoUgVWv6nWFd99z56DtI6JEC3qNpNEUH3X/Qe2zN4gSfOXlF+RYdU2v8fxbYU32\nh9kHLpoIyzhFuJW2NOVV2ZBz6zbkHrv/ne9S2x0+fHjQTib0O5DrBaxcWFJ9YzQn7fauQbte1msT\nedpuj8mmHC/Ivbm+IfTdxQ0dOdmlKNCZCR3lt9V/Fq709t7xm71ftvk559yj/c+HnHNPOeeOO+e+\n5ZxLXW0fAQEBNw4/jxn/BQBH6fNvAfgd7/1hABsAPn8tBxYQEHBtsSMz3jm3F8AnAPyfAP5n17PB\nPwzg7/c3+QaAfwbgd6+0Hx9F6PbNOG/0xlJkfmaMmML8gpigMTLZTp/RSQ9swlk9eI7GKteE4tow\nUXKVtpi3uryREc4g7THf0aZpkbS/Dx/W5u1dtwmtU8zrMe7eJRF0KTrWhtEie+Iv/2rQ/uvnfqb6\nJijKqkRU3uS4jsY6der0oH3mhBbwmCC9+cM3iW7bxz76a2o7GiK+/8PHVd+JN4Q6rJDu3qxxa86e\nPUs7NHRVUyjSLtFOqZQ2Ycukw3fqhHZ52H158KMfGbTHx/TcVyjyrlPTtFbLcXVWfS1SaRlzrSpm\n9+EDe9R2U1Ny3va+apAefETaclynAABWV4UWzhg3da5/3RPx7R/pnb7Z/wWAfwpJZZoGUPLeX5qV\ncwD2XO6LAQEBbw9c9WF3zn0SwIr3/tlf5ADOuYecc884555p2prSAQEBQ8NOzPj3A/iUc+7jADIA\nxgB8FcCEcy7Rf7vvBXD+cl/23j8M4GEAmJ6b3z5KPyAg4LpiJ/XZvwzgywDgnPsggH/ivf8Hzrnf\nB/DrAL4J4HMAvnfVo0URujt4u4/ltD/lyI/ZKEk4aNqEm2bzQm+UKzr0Mp4S/ydP21VrWgQAVMq4\nZWvJpUkMkLK1YpFef2gn5PPrr76m+lYW5Tdx3viv7B/vIYpuakqHy951112D9uKK1rbfIj+9TD6e\npSlTRHPlkjoLa3NTfM+4E/+1Y/T8W3XpO/ryK6pveU2OzXTj3gNasIPpzUZTU50Rad1zjbi2WSNJ\np+Rcbr/tiOo7eEAEPg/ffGjQfuG5Z9R2G5Sld+Tmd6i+EtGsaxd17b6oJffzDK115M09zH76pgmh\nXuNQbhITtZmEE1T62pZz3tVfE3gyvT0p9laCar6I3mLdcfR8+K+9hX0FBARcZ/xcQTXe+ycAPNFv\nnwTw3ms/pICAgOuBoUbQpZJJ7N81D+DNJZXXyOzzRg++SXpySYoimpjTUWFcPqla06YS0zNTU0JP\ncZQWACTIXOzazCLKtuKyxom4difqTTHju01T0oiizirrOhPt1AnJsmOt9YM3HVLbzS7MD9rtSGdG\n8RxsUhRX2mT3FbPiyhzYdUD1zZOu3S6K9krltLn/yvOid3f0VU15FSeE6tu1W8ZrS3YdOnRw0I6M\nxn6JxSA2OWtRz9utt0jWnhULKRTErK2WxZXZvXuX2m430bsVIwzhiY49uGte9XFZJ77HtrY0Rdei\nCNFNM36OjPN03eMmynRiXMz4uBGKL+Z71yYeC1lvAQEjj/CwBwSMCIarQecj1Pvyz1weCAA6TTGV\nxsYmVB8ttqLJwgUmiaVM4gHdll7ZVUIOVTGj0iaJJUUr/O22NuM50ilDIhrdmDbVefw379MVXm9/\nh5iczZquwFom069alnNJZ7T5/MJLEjW3WdGJH1kqSxWnc2HBC0DLdX/gAx9QfffeKfp049M6+YXB\nrMZ73vPubbc7de70oL1+5pTqi0gzbcJcdxaD4GSostF3W1yUSMqCqXjLfRzFZqWvayQDXTdMDrs8\nzrghrTqxN8Tk1M391yFmJ2bcvippCrLrtW+fjlObpuSXWFvvf7rvmvJ9aRHe7AEBI4LwsAcEjAjC\nwx4QMCIYqs/e9RFK7Z6fGutq3+fgAaF/6lUd1RaRL8Rig5xNBQANEkbIxXWE0eS06I43KQLLG6GC\nfEa+VzUUSYK2jRFFkstrv39+lxxr/15N1cTR3LZvYe5e+UDLEW+c18KXp8gPteIbLADBUXJxUyqZ\nSwgvXTir+vbvERoqnZHvZQp6TosFWUv45V9+QPVlKYLsX339Xw/aF00JqQ2iyqbGtS9eoGtRIVor\nk9HjOHtO5iduXl/prJznZlV88YpZ68jRPneN67WDJkX2NU2UH2dNMu2ZMOssVVqTsuWWSyQekiGK\ndPesKT9GayT33KKj/Mb64quF/PZrLOHNHhAwIggPe0DAiGCoZjzg4C/9vpifmdk5iWhau6g1vTdW\nJPmAKbSUoc24TNTcrDaRO5SscoGSGRomMYcj6pJGE42jvzhHod3Ubsf5syIGUVtfU31psjMPHTio\n+kr7JHJrclL041om8SNFJmKmo/XYli9I0ka1KqZvdk5HCjabss9nntXZy0xX7aHot6LR6efkjpQx\nW8tEJ1Wp7JKtastz2jCVSYtEo/F4Nzc1NbYwLYlCyZQRwOgKfbp0Wmi/zYqmPecp2Shhahogks+1\nuo5YbHDiFJWhikwEHbtbk+NafOMgRfNxeamJlL7/9lKtgmkjznL2VO/cOk19rzDCmz0gYEQQHvaA\ngBFBeNgDAkYEQ/XZfeTRvZScbxLzT5wT+sfSSRsUOgrK6mGRSgDIEs1Sa2v/b3FJSjjXyU/PGNHH\nFIUbJk0GUZvGlUnKseYntQ9WJGGBaln7hnUSy/iPzz6v+l567figzSWhk8Yf3iJfPJ7SfRwGOk6+\noc0245pwW+ZaVOoy38sk3BAzOkMsruDNXFXIT680xH+PTG26LM3jREGLYo5TyeJKQsY7bXzeSS5l\nbM9zbWXQrhPda0NW14nGzWVNWWZC2fjsi8uy/5a/fH0DAFiYFDr2fe++T/Vlvfj6nuoaFo0oSpZK\nWp899roef/96dkwYLSO82QMCRgThYQ8IGBEMmXrDgMboGqGC10+ICWszknJFKafLGWvWNK1SJNLF\nDS1AwOb/zIzQLB7aZWhHYgblTQYVRzolSON897wWQuDSziePnVR9ta6YyLe8Q0dB1WrSp6imDU3f\nbZErkM1oOqxNVFAhJ32ppKYpOWKsYrLvWnRt1olC8kbMI0665jlTGqpGZjy7TQmjhT41Jib5rikd\nMTZGZv3MHVKSykYDjhFdFTd06dHTMv/Vitw742Njajue7zMXLqi+BrkeWzVN1ZbrMndp0nJ3kdUv\nlL6DBw+qPlcWKjGqkhsZaRrNEY3YNXOwv7/PVFq7dYzwZg8IGBGEhz0gYEQw3NV479FsXzIztZkT\np2ihtjerkFkxTVp1qj5qot+mpyXqLJHQ+yiS2eZpWXl1XUsxJxJi7uZNUkGZIrxqDTGxylVjbrXF\n7D6woCu1PnCfVA994H4t+PDCi88N2i+/JBLUHRPRdXZRKomWqzpZJ6KAunZb5qC0qZOGOAGo67V5\nniGtuTRJE0dJU2WVJKitll+VJJbZZcgZEY0kuUPTRb3KPjUhK9jZlOzDunmf/PQnB+0zizqp59WT\noo1Xb1zexQH0vbS8piM4W+QtRkn9fkxTGalYV/o2jXT31piY+2eXdCXYbJvKP5Xl3jmyX7uHHZLd\njhlzfXK+F+loK+Eywps9IGBEEB72gIARQXjYAwJGBEOn3i5lrTnjW4yRqN9mRfuXHO2VcPI9Fk0E\njC8XaT+3RVlY61viT7UMnZRKyVpCMqf9UPYvWQDx7JKmag7umhu0/9v/+r9QfTcdYAFKva7wwH3v\nGbRLy+I3XlzXWV4pypxbmNfZfeNj4udyZlfdZJStkzZ6qaQFJdpN8SEr5Cc6o2Mekfh/zWT+sZ8+\nSdFj3aaOQCvQdZ+jNRcAcEpbVD60DW3L2XJnzmifvZiXe2TvnFyX6RlN8yVpPSJhymHV6Totrek1\nniyJTTS3ZO1myghglChT7ydP69JT7zoiwi0ZWq9qm/oJnS5H2ulIuTNne5mKzStE0O20PvtpAGX0\n7s6O9/4+59wUgG8BOAjgNIDPeO83tttHQEDAjcXPY8Z/yHt/r/f+UmDvlwA85r0/AuCx/ueAgIC3\nKd6KGf9pAB/st7+BXg24L17pCx4eUd82i4wGnevQULw2Fztkau/ZK1SWjUA7fVLECUp1bZpG9LuW\niInplTbVNpMZoZo6kTaJOKLuYpMSSZqa/rpIuuOnzmud9JsO7ca2oGPfdvutg/bmT55Sm6WJdnEJ\nHRl3flXGdfasmLT7d2tzf7ooZnbU0PuYoAjDNSq7tLyuKalUSuZndmpS9Y0R1ZlPizuUyekkkyxR\ndjaJpUL68Gtrcl7j4/pYT5FZ/NRTeq7iRLMe3CP3jkvqY62siCswN6333yJt+6JJnFoiGu3m/aLz\nXjTn+erxY4P2a6ePqb79c+Jq3H2TVLmttoxrRElaW1taQ+/CUs+9aDXeuniFB/B959yzzrmH+n+b\n995fOtMLAOYv/9WAgIC3A3b6Zv+A9/68c24OwA+cc69yp/feO1vipY/+j8NDgK6fHhAQMFzs6M3u\nvT/f/38FwB+hV6p52Tm3AAD9/1e2+e7D3vv7vPf3pU2UVUBAwPBw1Te7cy4PIOa9L/fbvwLgfwfw\nCIDPAfhK///v/TwHZrFCAGgRfWLDIZmmY/HCJRN2yBSdrcmVILqKs6lyeU3f1aikcsOEwbLPlCbh\nxKYRylgigcz/8MMfqr533n3HoD1lfM8O0YMsPJFMG7HIlqxhnDiujCycX5ZwSza2ckaIcT+JHB4h\nzX4AuPOeuwft518XkQQbVrtGPnynrbXcx/Pkv1KIbNtQQ2XKuFs2QqOLF2QemXrbZ2zIl195ZdC2\nIdRcqjqZknlsd/R2bcp6q27oLMDZBVlnmZrXlF0hKefNQphdsxYUp3snMvTjIt0vN++R69J1mnpr\nEN22taXHv1nufeay4hY7MePnAfxRn2NNAPi33vs/dc49DeDbzrnPA3gDwGd2sK+AgIAbhKs+7N77\nkwDuuczf1wB85HoMKiAg4NpjqBF0zsWQTPTNHmOixCizK2101bisL5fbKa3pzKKxnJjknYY2ldJp\n2X9EdEy9oSmMcknignI5PY4caXWXK+IytIwuWYeYwxePaq2wR/5UzPq/96sfVX3HXz4q7ZOnB+3V\nkh7jxQ2JMFy6qOOYMmkZ4+yslHHyRmeutCn73Ed0DwAsnZJMsXZZ5vjuWw6r7U6dlhOdLGgxiOk8\nUXtEs24YoYzjpLH/xuKy6uOMvmkSBJkw2ugppqiMLv3ZZdnnRkVM35kJ7UIVsrL/g/s1sfShj8o7\nLWsotd/+l18dtM9flHui1NJjbHe53LemOjeJRltakX0cMuXB+Jotl/Q81ho9F6sTXXadHECIjQ8I\nGBmEhz0gYEQQHvaAgBHBUH32ZCKJ2UENNu2z10nMkXXLAaBLPh8LKmaMfzZLYY6NmvaZuO5ZlzK5\nqpv6WAsLkhl1y223qL6VFcluW98SmqXW0pQRZ5hVYnqMf/4XPx6000aRZ2VRSg+vUqbb+KT23WJE\nW+7fu0f1TU3LtisrMq6GWcNIUF2yklFVyeeFJsokxC/PpvW5HNgjlJSt09YhnzVNYcarpmTzOcoY\nXDMa+6ztfpHWalrt02q7OdLtTxs1nXNE3+WzVB56TKvifOyjf1vav/IB1cdesEmSxO23SVjzqUUZ\nl4/0hlzjb8KE3M7NyTVLUij0uWU9V6urQqsWinrN4cD+Hn1qa+4xwps9IGBEEB72gIARwVDN+MhH\naPRLAcUMFYSYDKXbMhlxFAk2PS4UT9dk+CTJrO+Y3bfI/E9nJZIqbuL1G1Qeea2saa2LXCqYxj9p\nhAqScXENvCl3lCDT9OmfHVV9axRJ1ayLGfiOuDb75qeFJrKlhzMZmcdcVo5VqZhowKLQlMm0vg06\nIJGEhMz98qqOiN6qyHnayLVuV857JiVmatZElnXIm+PIQABwJO7YoWvdNMINKyQQuZsEKgBgkkz8\nIl33e++5Q21nTXc9EGnGzRPzdz/9q4N2tSH3y/nzWkQjRXUL9u/WIqRpJ9fp7JLMcblqovyIvttt\nokxvnelRgonE9u/v8GYPCBgRhIc9IGBEMFwzvttFtbx52b6JKRFMsBrknJDvIvl9ihubapFWs418\nF+K0SuupBFHLCAQsrYspfXFLr1K3yHyM2nKAMVNKiLXqikVbEVS+t3hRl3XyXTH1DhySaLWU0Vpn\nNiGd1EIfXdJrT9Li+fysdjXGJ2SfdZPg0qBV8Q1iSS6s6/FytJY9z/Nrsm1E14lLJAFAkdyosyt6\n/3FTKuoSEnEjbkIeik202XezRAfu3SVJJp1IsxOnTr8xaB88pBOD1K2kD42lC+cG7SyJj9xys442\n9KQNbwUmzlNCV5lKVCGlTfUiuV4l476d77MOrbahCwjhzR4QMCIID3tAwIggPOwBASOCofrsiXgc\n033BBqMpiQrROFbYgsstcyZUwUQLNYle8+bMHDlb3Ybsw9IbjsQoo64eR47K7jYj8fXzae1TF2fE\nD13d1H5ouUwlkCP9W5uh6Kkk1VhL5nSWVKsmflnWCE5W6XyKOTnnVFafS6crc7C6pX3ISpMEQlaF\nTqoYXzNN8+Eb2ld25M83zotPum9hn9pulmjEqVU9V6C1j3xWKLSEuXkSdL8skFhm73hCc2XIpz67\neF5t13pK5nRql97HGmVC/tF3H1F9x46JeGSG6tFlTebm2qrQg1ZstUIiKZ7OOeP0TTwzJ+dSp/sI\nAI6+1hM2bVwDwcmAgID/xBEe9oCAEcFwzfhEAnP9sjve0CrVN0TEoLSl6bkkmYuZrJhi3vAgFISH\nRkdTK62OmN3phJhYljIqFse27WPTdPmCmKZb69qkSlEknxUqqFLkXdVokXFZoyWKVsvmtOkLEt+o\nGDGIJPFtXUrhqNZ0Sa1aQ77XNLplm6TXXiHzvGN0EVpU8qlixBpSZFpvduVYqZSmVaemhRK87eZD\nqo+j8NJJmcd5EuUAgLGi7MN4hyhvyXm//BJp1ZlyVTe/Q6iy7/6xNtVfIY2702fPqb44RUTWYjIH\nqbg241tE1cZi5rEj17FGOoTO0KqbZLrHzbWoVXvn042216ALb/aAgBFBeNgDAkYE4WEPCBgRDNVn\n73a72BiEoGp/xFF8a2QyxTIF8deapB5QM34iyPeMjPDe9LiUAz58082Dts3WYuGM2pb2xbnW2/SY\n+InLq7qMr6oll9JTHNGaQL2pxQm4rG+tJr5bNqv9vz3k5yaNHnyDxBhrtCbAmvoAUOUQ5JT+zU9R\nuPKuKaHGVtd1FmCFstTaHe0rNmn+u+QfJ9Y0vcYllW87dFD1OQpU5bnP5fVayioJW5w8pbPNzi3K\n2kqC6g+MjZmSyqQVf/zYadVXpvDhbFpnSbbacq9WyjLfLqbDVtuRbLdnjxYcGZuQ+d+iEO1yXdcQ\nXCPhDxZXBYBE/z6wZbUZ4c0eEDAiCA97QMCIYKhmfKfbQWmzZ4pE2lJHjBL4x4s6i6xLpnvCye9T\nzVBXTJXtWdClkedncz4v5gAACW5JREFURdSgQ5F2OZNhVyfaafENbRLOzYorsGfvXvn7nI64KhPN\n1TXZVUwhLczq73G2HEcUcjYfAKRjbDKbEkEtocraNG95o7k2NivjOLOoy2gVSGCiRuZ+3YhGdIga\n8868NyjKLZkUN6TVNtF6FTHB580YJ4rymWm4M2fOqO1eJ9N9s6xN38kpue6cTdk15bhVZKaJWJyc\nkOterV5QfS1yZdiF4pJlALBVk+uZXNf33O4Z2T+XPivGdIZgoSCme71mRUuuXkdxR29259yEc+4P\nnHOvOueOOufe55ybcs79wDl3rP//5NX3FBAQcKOwUzP+qwD+1Ht/K3qloI4C+BKAx7z3RwA81v8c\nEBDwNsVOqriOA/hlAP8lAHjvWwBazrlPA/hgf7NvAHgCwBevuC8AsX7yR8wsGnKVzoQxCVnHbWpK\nTLvdMzqSissdZYzsMVfYPHtOzGIrgDE5Kau0B0x10wP7xXRnk61pyhHxqm+3riO1xklGeMok/Izn\nxBTbKosrUDWrsqvEEuSNhh7rs6nV50m9+rxCQhTNtnY1zi9L9B6v7rKLAGiJ72xWm5wU5IcU5Dyn\njHgF3wZHT55UfRzNuEnS2iurWlSkOCZG5cJuXcrKUzXfDmm4xU10WpxGUjfznaSEq7pxHWOUiHTr\nLRLpaKNA6xfke+Wqli9vjIn7maKIyxy0eEWaovW2zDUblCbbfjF+R2/2QwAuAvh/nXPPOef+db90\n87z3/pKzdwG9aq8BAQFvU+zkYU8AeBeA3/XevxNAFcZk972fz8tWlHPOPeSce8Y590zDcNoBAQHD\nw04e9nMAznnvn+p//gP0Hv5l59wCAPT/X7ncl733D3vv7/Pe35cxpl5AQMDwsJP67Becc2edc7d4\n719Dryb7K/1/nwPwlf7/37vavmIuhmyfIrAJ/G2KRLKlilgUoJATH3XCCD12KaJucUVHjCVIDIL9\nOFu2iMtEWTFKFtWoE5WysaGjwsbGxQebLOpIp0JRfPbFRZ1B1SBfbnJCfOziuN7H6XMivGAz58ay\nMj/se1vxzHZXKKOYKZmUInqQ++JJfaxGVeYnl9RRfgXKbmP3eH5Krx2weObxU6dVX+yiCD4knex/\ndk7rrqeSRKl1NafL1bdilCrWNNeWKczIaV+5XJbrUq1o65TvK6bNckYfn2sLWJ+dM/AytAaTS+hx\nbFEE3aQpIVXI9+bnTfUYeKzb9mj8DwB+zzmXAnASwH+FnlXwbefc5wG8AeAzO9xXQEDADcCOHnbv\n/fMA7rtM10cu87eAgIC3IYYaQediDtm+FnYETTvVSJ98alJTahMTQrfFqRRUvaVNKk4eee3YKdW3\nf79QMhkyMTNjOvIoInNu1ogkdMjc2jUjCSLJmKak0hkWr1Bd2CxJ0kzUtQIb4oa0NsVki0w01vgE\nJYIYIQRHVKIjE7xpkotiZHKmDf3IdFub3QRjImdp/zmjl+apim6RSnbFzD7qFM3YMWu8BaLppvMy\n384sBUekex9/kxlLUX4Uttk2kXyeuMLSltFe97JPdgEBHfXI40qahJQZin6LTAIXJ7+kaBz33nGX\n2q5cJBGXol7/avTPJ2E5bUKIjQ8IGBGEhz0gYEQQHvaAgBHBUH32mHNI97XRu17/zuzdK6GGk1M6\nGyxqi6/MdFXZZP4cPHhQ9rdfh00mKAwxopDS8XFN33XIr2u1ddhkRP5mjAQzZ8l/B4BGU9YfIiN8\nWa9JqGsyqR36+XkJQjx1Xug1q9eeZH15U7o3kSQ/l7Lq2DcGgCqtb7RMH39OUuiyPVaSqMhWU6+f\nZCM5tw888D4an/Z5H/mzfz9oWwpwbpfMR4yYssgIZcQoRtQZhz5BPnVE1Fshqamr9U0R5lha1mIk\nRcq+mzG69HO0rjM+LtuV1vU6jk/LsXNmIWejTNQbCZUU8tovT0Ti968aEZDCeI+yiwXxioCAgPCw\nBwSMCJylEq7rwZy7iF4AzgyA1atsfr3xdhgDEMZhEcah8fOO44D3fvZyHUN92AcHde4Z7/3lgnRG\nagxhHGEcwxxHMOMDAkYE4WEPCBgR3KiH/eEbdFzG22EMQBiHRRiHxjUbxw3x2QMCAoaPYMYHBIwI\nhvqwO+cedM695pw77pwbmhqtc+7rzrkV59xL9LehS2E75/Y55x53zr3inHvZOfeFGzEW51zGOfdT\n59wL/XH88/7fDznnnupfn2/19QuuO5xz8b6+4aM3ahzOudPOuZ855553zj3T/9uNuEeum2z70B52\n51wcwP8D4FcB3A7gs86524d0+H8D4EHztxshhd0B8I+997cDeADAb/bnYNhjaQL4sPf+HgD3AnjQ\nOfcAgN8C8Dve+8MANgB8/jqP4xK+gJ48+SXcqHF8yHt/L1FdN+IeuX6y7d77ofwD8D4Af0afvwzg\ny0M8/kEAL9Hn1wAs9NsLAF4b1lhoDN8D8LEbORYAOQB/DeB+9II3Epe7Xtfx+Hv7N/CHATyKnhjy\njRjHaQAz5m9DvS4AxgGcQn8t7VqPY5hm/B4AXE/pXP9vNwo3VArbOXcQwDsBPHUjxtI3nZ9HTyj0\nBwBOACh5P1CCGNb1+RcA/ilEBG76Bo3DA/i+c+5Z59xD/b8N+7pcV9n2sECHK0thXw845woAvgPg\nH3nvVV3oYY3Fe9/13t+L3pv1vQBuvd7HtHDOfRLAivf+2WEf+zL4gPf+Xei5mb/pnPtl7hzSdXlL\nsu1XwzAf9vMA9tHnvf2/3SjsSAr7WsM5l0TvQf897/0f3sixAID3vgTgcfTM5QnnBvpSw7g+7wfw\nKefcaQDfRM+U/+oNGAe89+f7/68A+CP0fgCHfV3ekmz71TDMh/1pAEf6K60pAL8B4JEhHt/iEfQk\nsIEdSmG/VbieuNvXABz13v/2jRqLc27WOTfRb2fRWzc4it5D/+vDGof3/sve+73e+4Po3Q9/7r3/\nB8Meh3Mu75wrXmoD+BUAL2HI18V7fwHAWefcLf0/XZJtvzbjuN4LH2ah4eMAXkfPP/xfh3jcfwdg\nCUAbvV/Pz6PnGz4G4BiAHwKYGsI4PoCeCfYigOf7/z4+7LEAuBvAc/1xvATgf+v//SYAPwVwHMDv\nA0gP8Rp9EMCjN2Ic/eO90P/38qV78wbdI/cCeKZ/bb4LYPJajSNE0AUEjAjCAl1AwIggPOwBASOC\n8LAHBIwIwsMeEDAiCA97QMCIIDzsAQEjgvCwBwSMCMLDHhAwIvj/AeXsT/ym0TsKAAAAAElFTkSu\nQmCC\n", "text/plain": [ "
" ] }, "metadata": { "tags": [] } } ] }, { "cell_type": "code", "metadata": { "id": "pK7d_P8_6H51", "colab_type": "code", "colab": {} }, "source": [ "# Standard preprocessing (pixel scaling + one-hot encoding on the labels)\n", "def preprocess_image(im, label):\n", " im = tf.cast(im, tf.float32) / 255.0\n", " label = tf.one_hot(label, 10)\n", " return im, label" ], "execution_count": 0, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "kpDwzslF6U0j", "colab_type": "code", "colab": {} }, "source": [ "dataset = dataset.map(preprocess_image)" ], "execution_count": 0, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "vAPB7w_67HPt", "colab_type": "code", "colab": {} }, "source": [ "test_dataset = dataset.take(1000)\n", "train_dataset = dataset.skip(1000)" ], "execution_count": 0, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "eKdbiMF030zl", "colab_type": "code", "colab": {} }, "source": [ "from tensorflow.keras import Model\n", "from tensorflow.keras.layers import Conv2D, MaxPooling2D, Dropout, Dense, Flatten, Input" ], "execution_count": 0, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "PXugVKyh4Q76", "colab_type": "code", "colab": {} }, "source": [ "def build_network():\n", " im = Input(shape=(64, 64, 3))\n", "\n", " x = Conv2D(64, 3, padding='same', activation='relu')(im)\n", " x = Conv2D(64, 3, padding='same', activation='relu')(x)\n", " x = MaxPooling2D(2)(x)\n", "\n", " x = Conv2D(64, 3, padding='same', activation='relu')(x)\n", " x = Conv2D(64, 3, padding='same', activation='relu')(x)\n", " x = MaxPooling2D(2)(x)\n", "\n", " x = Flatten()(x)\n", "\n", " x = Dropout(0.4)(x)\n", " x = Dense(10, activation='softmax')(x)\n", " return Model(inputs=[im], outputs=[x])" ], "execution_count": 0, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "LXdkLQAV4vyW", "colab_type": "code", "colab": {} }, "source": [ "net = build_network()" ], "execution_count": 0, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "ljI01tjM4yoe", "colab_type": "code", "colab": {} }, "source": [ "from tensorflow.keras import losses, metrics, optimizers" ], "execution_count": 0, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "BBakEfF945_1", "colab_type": "code", "colab": {} }, "source": [ "loss = losses.CategoricalCrossentropy()\n", "opt = optimizers.Adam(0.001)" ], "execution_count": 0, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "voGwZWVl5bSz", "colab_type": "code", "colab": {} }, "source": [ "net.compile(loss=loss, optimizer=opt, metrics=[metrics.BinaryAccuracy()])\n", "net.fit(train_dataset.shuffle(1000).batch(32), epochs=3)" ], "execution_count": 0, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "j9VfEnJq57EH", "colab_type": "code", "outputId": "5c66c69e-f820-4164-fdd4-db96726a74c5", "colab": { "base_uri": "https://localhost:8080/", "height": 85 } }, "source": [ "for xb, yb in test_dataset.batch(1):\n", " print(np.argmax(yb, axis=1))\n", " print(net.predict(xb))\n", " print(tf.argmax(net.predict(xb), axis=1))\n", " break" ], "execution_count": 21, "outputs": [ { "output_type": "stream", "text": [ "[4]\n", "[[2.0800373e-13 5.3180857e-22 6.3897234e-05 2.4762763e-05 9.9982941e-01\n", " 2.8306911e-11 1.6020052e-06 7.1843242e-05 8.4359590e-06 1.0046079e-16]]\n", "tf.Tensor([4], shape=(1,), dtype=int64)\n" ], "name": "stdout" } ] }, { "cell_type": "code", "metadata": { "id": "-w9gxxg87bzv", "colab_type": "code", "outputId": "8f12a5da-4d72-4604-80b4-dbf3adf51b3c", "colab": { "base_uri": "https://localhost:8080/", "height": 285 } }, "source": [ "plt.imshow(xb[0])" ], "execution_count": 22, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "" ] }, "metadata": { "tags": [] }, "execution_count": 22 }, { "output_type": "display_data", "data": { "image/png": "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\nQmCC\n", "text/plain": [ "
" ] }, "metadata": { "tags": [] } } ] }, { "cell_type": "markdown", "metadata": { "id": "9IXc3nghYDTe", "colab_type": "text" }, "source": [ "### Testing adversarial robustness" ] }, { "cell_type": "code", "metadata": { "id": "9_Dsh1Ba67HR", "colab_type": "code", "outputId": "aa349d44-ac3a-4d0f-9e30-a3f1ef90797f", "colab": { "base_uri": "https://localhost:8080/", "height": 289 } }, "source": [ "# We use the IBM Adversarial Robustness 360 Toolbox\n", "!pip install adversarial-robustness-toolbox" ], "execution_count": 24, "outputs": [ { "output_type": "stream", "text": [ "Collecting adversarial-robustness-toolbox\n", "\u001b[?25l Downloading https://files.pythonhosted.org/packages/a7/26/140791dead9918e3ce7a1d9ffed835606a5e2ec03dead859f1b96c023eac/Adversarial_Robustness_Toolbox-1.0.1-py3-none-any.whl (375kB)\n", "\r\u001b[K |▉ | 10kB 18.8MB/s eta 0:00:01\r\u001b[K |█▊ | 20kB 23.9MB/s eta 0:00:01\r\u001b[K |██▋ | 30kB 28.1MB/s eta 0:00:01\r\u001b[K |███▌ | 40kB 31.6MB/s eta 0:00:01\r\u001b[K |████▍ | 51kB 33.6MB/s eta 0:00:01\r\u001b[K |█████▎ | 61kB 34.9MB/s eta 0:00:01\r\u001b[K |██████ | 71kB 35.7MB/s eta 0:00:01\r\u001b[K |███████ | 81kB 36.5MB/s eta 0:00:01\r\u001b[K |███████▉ | 92kB 37.1MB/s eta 0:00:01\r\u001b[K |████████▊ | 102kB 37.7MB/s eta 0:00:01\r\u001b[K |█████████▋ | 112kB 37.7MB/s eta 0:00:01\r\u001b[K |██████████▌ | 122kB 37.7MB/s eta 0:00:01\r\u001b[K |███████████▎ | 133kB 37.7MB/s eta 0:00:01\r\u001b[K |████████████▏ | 143kB 37.7MB/s eta 0:00:01\r\u001b[K |█████████████ | 153kB 37.7MB/s eta 0:00:01\r\u001b[K |██████████████ | 163kB 37.7MB/s eta 0:00:01\r\u001b[K |██████████████▉ | 174kB 37.7MB/s eta 0:00:01\r\u001b[K |███████████████▊ | 184kB 37.7MB/s eta 0:00:01\r\u001b[K |████████████████▋ | 194kB 37.7MB/s eta 0:00:01\r\u001b[K |█████████████████▍ | 204kB 37.7MB/s eta 0:00:01\r\u001b[K |██████████████████▎ | 215kB 37.7MB/s eta 0:00:01\r\u001b[K |███████████████████▏ | 225kB 37.7MB/s eta 0:00:01\r\u001b[K |████████████████████ | 235kB 37.7MB/s eta 0:00:01\r\u001b[K |█████████████████████ | 245kB 37.7MB/s eta 0:00:01\r\u001b[K |█████████████████████▉ | 256kB 37.7MB/s eta 0:00:01\r\u001b[K |██████████████████████▋ | 266kB 37.7MB/s eta 0:00:01\r\u001b[K |███████████████████████▌ | 276kB 37.7MB/s eta 0:00:01\r\u001b[K |████████████████████████▍ | 286kB 37.7MB/s eta 0:00:01\r\u001b[K |█████████████████████████▎ | 296kB 37.7MB/s eta 0:00:01\r\u001b[K |██████████████████████████▏ | 307kB 37.7MB/s eta 0:00:01\r\u001b[K |███████████████████████████ | 317kB 37.7MB/s eta 0:00:01\r\u001b[K |███████████████████████████▉ | 327kB 37.7MB/s eta 0:00:01\r\u001b[K |████████████████████████████▊ | 337kB 37.7MB/s eta 0:00:01\r\u001b[K |█████████████████████████████▋ | 348kB 37.7MB/s eta 0:00:01\r\u001b[K |██████████████████████████████▌ | 358kB 37.7MB/s eta 0:00:01\r\u001b[K |███████████████████████████████▍| 368kB 37.7MB/s eta 0:00:01\r\u001b[K |████████████████████████████████| 378kB 37.7MB/s \n", "\u001b[?25hRequirement already satisfied: six in /usr/local/lib/python3.6/dist-packages (from adversarial-robustness-toolbox) (1.12.0)\n", "Requirement already satisfied: scipy in /usr/local/lib/python3.6/dist-packages (from adversarial-robustness-toolbox) (1.3.3)\n", "Requirement already satisfied: scikit-learn in /usr/local/lib/python3.6/dist-packages (from adversarial-robustness-toolbox) (0.21.3)\n", "Requirement already satisfied: matplotlib in /usr/local/lib/python3.6/dist-packages (from adversarial-robustness-toolbox) (3.1.2)\n", "Requirement already satisfied: setuptools in /usr/local/lib/python3.6/dist-packages (from adversarial-robustness-toolbox) (42.0.1)\n", "Requirement already satisfied: numpy in /usr/local/lib/python3.6/dist-packages (from adversarial-robustness-toolbox) (1.17.4)\n", "Requirement already satisfied: joblib>=0.11 in /usr/local/lib/python3.6/dist-packages (from scikit-learn->adversarial-robustness-toolbox) (0.14.0)\n", "Requirement already satisfied: cycler>=0.10 in /usr/local/lib/python3.6/dist-packages (from matplotlib->adversarial-robustness-toolbox) (0.10.0)\n", "Requirement already satisfied: pyparsing!=2.0.4,!=2.1.2,!=2.1.6,>=2.0.1 in /usr/local/lib/python3.6/dist-packages (from matplotlib->adversarial-robustness-toolbox) (2.4.5)\n", "Requirement already satisfied: python-dateutil>=2.1 in /usr/local/lib/python3.6/dist-packages (from matplotlib->adversarial-robustness-toolbox) (2.6.1)\n", "Requirement already satisfied: kiwisolver>=1.0.1 in /usr/local/lib/python3.6/dist-packages (from matplotlib->adversarial-robustness-toolbox) (1.1.0)\n", "Installing collected packages: adversarial-robustness-toolbox\n", "Successfully installed adversarial-robustness-toolbox-1.0.1\n" ], "name": "stdout" } ] }, { "cell_type": "code", "metadata": { "id": "DBupm8s37jy8", "colab_type": "code", "colab": {} }, "source": [ "from art.classifiers import TensorFlowV2Classifier\n", "from art.attacks import FastGradientMethod" ], "execution_count": 0, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "PvedgEYi74kb", "colab_type": "code", "colab": {} }, "source": [ "# First, we need to wrap the classifier in a TensorFlowV2Classifier object\n", "# It allows the toolbox to compute the gradients of the model in a framework-agnostic way\n", "classifier = TensorFlowV2Classifier(model=net, nb_classes=10, loss_object=losses.SparseCategoricalCrossentropy(), clip_values=(0, 1))" ], "execution_count": 0, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "dWuzb3v_7xJu", "colab_type": "code", "colab": {} }, "source": [ "# We use a fast gradient sign attack\n", "attack_fgsm = FastGradientMethod(classifier=classifier, eps=0.05, eps_step=0.01)" ], "execution_count": 0, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "ich12ZAw71TG", "colab_type": "code", "colab": {} }, "source": [ "# Do the attack on the previous image\n", "x_test_adv = attack_fgsm.generate(xb.numpy())" ], "execution_count": 0, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "UX2ddOJI8QyH", "colab_type": "code", "outputId": "62b954ce-bf29-4441-d9a7-ba4bb82f9e2d", "colab": { "base_uri": "https://localhost:8080/", "height": 285 } }, "source": [ "plt.imshow(x_test_adv[0])" ], "execution_count": 32, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "" ] }, "metadata": { "tags": [] }, "execution_count": 32 }, { "output_type": "display_data", "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAPsAAAD7CAYAAACscuKmAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjIsIGh0\ndHA6Ly9tYXRwbG90bGliLm9yZy8li6FKAAAgAElEQVR4nO29abBkx3UmdrJu7fur9+rtW7/eG91A\nA2yA4CIRpEiaokRRshUaSSMNbTMCjgnZ5tgzHpLjiAmNw46Qfng0tMOhGMSQM4wYWSK1EoRlUiQE\nkAIIAmhsjd77vddv39fat3vTP6q6vnPS3egm0V0NTeUX0dFZL7Py5s2bWfecPOd8R2mtycLC4j99\n+O73ACwsLDoDu9ktLLoEdrNbWHQJ7Ga3sOgS2M1uYdElsJvdwqJL8K42u1LqU0qpK0qpaaXUl+7W\noCwsLO4+1E9rZ1dKOUR0lYg+QURLRPQqEf2G1vri3RuehYXF3YL/XXz3MSKa1lrPEhEppf6EiD5L\nRLfc7IFgSIeiESIiUqRkpcJnrW89rADhx8nso0b1W37P0x7KHuvDZ4yD9RkMBkQNF4Pq9Vtfyx/A\n98wf0wa7T2V0oVgdvcNvMG8nvkNEnof75NcOKinEef5bX0DXUec5KNcbcsCazaPPJ/s3Z7XdTgXF\n52AILes1YxziEyr5PRIROSrcLvsdR9S5jtsuR1ldyHi2rka7UkUOxGPzaI4xGMT9aDan9VJJtPP5\n2LiMydF+1Gm+vo1r+dizDsmq9sovl/JUrZVvOv3vZrOPENEi+7xERO9/py+EohE6/bNPENFNFocP\nk1ar9cg6B20H2UMJ+OQDW9Yr7bJrrOVitdIuVyrVdjkYMaaNbf7R4SFRFSE8lPWNVYzP2HDZ/n5c\nq94QdZt+THlgXX4v4Md9qgYrG/cSDLE+gnLzFIvldrnKNud4MCLaVXv5SpLPorKE75V6MG9rG+ui\nXaOMdrFIVNT5+fP18MxioQOi3dgk7mV1VVSRyxZ+o4GlVjI2Uk/kaLucSaZEXTGea5cfzKDu4Hi/\naJcvF9vlVy/PiroKW0wrS3KM4+PjGGMP1tX6m2+KduFosl12jB/aWhbrveFivtWiaEaJCH7UJhqu\nqNtqzffzP/wm3Qr3/IBOKfWkUuqsUupso1a7/RcsLCzuCd7Nm32ZiMbY59HW3wS01k8R0VNERPFs\nj6ah5u+LVsOi3aiDN1SZvYWJiDa22BtwkL3xHPlm1Ev8s/z11IP4rOtMDN41fu+YyOYYb+zVtbV2\n2cd+J7Xx6l1WeEXV1aCoc9jbSxkiJ5fv1DArrxjN9K1/oz0xZFxsTck3e3kFbyHtk+PI6N6bdUE+\nc77ZXA0NSSmIv9m5FBcOGhIdk9rImG9nhL3Zq+hfzczIcRDeckNDUsS/dgV9LFdQPhAw7qWHzYFn\niFIrTLRWUrrRGltAzr2cD0cl0MewvPYQe5svLmMcrrGusgMoN0hKtdnW0gzcUoF6d2/2V4nosFLq\ngFIqSES/TkRPv4v+LCws7iF+6je71rqhlPpviei7ROQQ0de01hfu2sgsLCzuKt6NGE9a678mor++\nS2OxsLC4h3hXm/0nhaIgOTRKRETDhm4RCeFUPBKR+qXPt98u1xtMJzNOJLl5o6dWFXWRBk5fay76\nCPVL3UeojYZuPKzQf70PJ9HlWka08wro3++Xx7e7mplq3BFRFwrhRHssgmvPjZZFO3cN/Q/LIwEq\n1/G92gx0PteVcxUM4b6rhsVADeN7ER+ey6GtKTmOcabLalMXR7lSxbMoXZfnMYsuDm39jrQsHOuH\nnhsLx9rl1Z4HRLupcdzLVkg+z0S60C7vF3AAcbUix1G8jjleWpKHJA2m7To+qYvX6uinMX9rc+bh\nwzhJr7nShLmwjfW9D6MADbry/GFjF/NYNw67A1vN51Q19gSHdZe1sOgS2M1uYdEl6KwY7yoK7jZF\n9C2jLpTH786wYZLy7aMuxMTKDbUh2oXDEJV2DC+rGDOZBBzpUCHARCdlzA433/k8JoJrKRK6zHTj\nX5HqyoAf9hO3T6oa6SQT9Zi6Ujc8hLwaRLWGK+dqPIg+djVkfDcj5yMY3G2XyyWphtTm5tvlSGyK\nfUdOyPWVhXY5k+kTdVrher51zL3PJ/UObgatevOirnAV155zMFfH4jHRjpvvTM/Geh3jcgfj7XJj\nUI6jePEyxlGVInL/AET3jZAhWq9jJdcquHYiKccYZs5b0xelU5Daw7z2NqBSVWqGSD6Pz8bypqLX\nVENcbVQw2De7hUWXwG52C4sugd3sFhZdgo7q7J5XpUJlmoj+/+6V3P20GJLBKbv1vXa5XIaJRBtu\njTxay2dEm5Xz0NdKdeirPGiFiMjPAks8wyTlx9dow7fTLgdZsAURUWgH97JhnD9wk6NneMvuV2Am\nCjMzVHpe6pANZkbLF6Vep1gEVW0QZj+/kmY+bxlnB0FPRqCEY5ircBj3lisWRLsepqM2GoYpiN23\nm0FdIiHNa0kXOm9xVi7HxQa8r7k+vDd8SLRzc6iLB2T/OyP4fNBBMEq/J99z8/l0uzwxLuuuM3NW\nbX5B1Pn9cJcNsAClbFaunaUVnFuodTmPuRICbzSbN2WY+RRzn70RPXoDy14zaqbhk9flsG92C4su\ngd3sFhZdgo6K8Y72U6rajN0tVqRXWFDYuaQInszDk8qfYmKw0S4chPgfcuStrfu32+VRbu5pSG+p\n7Q2YrnqNMRLz7PP0rcUlHvA0uilldce/2S77d+T4uTA9yiwojiPbzdUwrtpVOY6JMMRWP4udr7vy\nPjUnszCsNTtRePKNM5dCtyKvFRpF//F4r6h7II0Y7VAAYvcSyXEkr0B8Pi8lcOobgIrVYDHxvExE\ntH0JUXD7YSne8ijGXT+86/p6JWfCxjbMuOF4QtTFmOq1V5Omvd4EdLsg40JYO2eQljBTqme8Y12N\nPh1mOnMcGUQaDk20y9owMU74m56pm2RMIoN9s1tYdAnsZrew6BJ0OBAGoqU2qHkCPgxFr0hRL8BO\nIRMRnCKbXGTBbYjqZuDH4ChOo6tMBM8FDS88xk0WGZH9r4O7ggaZ7FsJjpIEBHK/QUAQZKet3oDs\nP8Tk+A3+NYNoIehhjD5tqAkjuE/NeJ4axnxoRrnlW1oTdZyFIcCWSM+hI6IZpwUbN9Smh554ol3u\n64MX25/++Z+JdosVPLNgQAax9DCKqZ0dWD+qs9dFuyX2yjpoqFfzjILsVA88BZf3pAWFdtF/2aDY\n0mz6+4ek5129jv4rXCXslyfpyxuY4ymDCs3nw/WWmPde1JjTskYfk4bVYbtlRdLKBsJYWHQ97Ga3\nsOgS2M1uYdEl6KzO7nMpGGzqaKs7ss7PTEHaoJk+wAkJYgj0X12SOq/LvMd6B6TussHIIh2ma+q0\n7KOPUSxrgzwgOwBFusaik7RnmO+2oU+FDf1saJCNy5X6n49F5g2ze6ERgx+/BhOM3+A/5yZNPgM+\ng1SSR4dFDS+/qQmMORpB5FnK4J5PhPEsMhWp504w3fZICp5r/3ZHxjsWi/l2eXxSRooFmOlQr8Ib\n0DHGO87OH0rL0iQ1xNaSfwpjim/tina5dZzdBLblM9OMRzUyJeuuLMMbjvOqjIzKMR4/daJd7u2R\ndNfla2CsyFcQ+Rczwi5HB3AeEzQoxLdnW997h6Qv9s1uYdElsJvdwqJL0FExXmuPGl5TzDL9zzwm\nsiSSMlBgg4tiBZRLDSnK8OADl2Tgh+vBc62ehblkwBClGy5E5lpNklJwk5pSMLf5t6Vo2mBeUFUt\nCSqWl3GfvkEp6lVZsEdtBN5jIZbeiIjI8yD2NRoGscUyI99g3m9hR4r7jU18TiWk11koiOAO/jYo\nl2WmlL4y5i7aI/ufnEDd8i4Cmbb3pP7G58pneBvWhzEfPqYWpFJSDOYedTltmNQI6lu1Cq85My1X\ncILxvy9KFTAVR2BQsizVla0ezDFL4kODRsYZP/Ouq83JdbVSQ+qX3gTu7cjEpGjHeee0EciTaTTv\nzXmH1Gn2zW5h0SWwm93CoktgN7uFRZegwzq7n2q1ZnRUn5Iumr4x5H4rl2XUUa0OHcrn4nuxtDSz\n5CvQk4J+WZfOIirLzzjOw1FpgqlUWDSUT7rSEtOTtnbg5mnmSivEYU4aMiK0iiyCL6TlHAwyPdLz\n4XwgNyv7cFi035KRcrrO3HjHmLulysqziRg7BymU5AnKwC7mpJ5l3PBr8lprzBSZzKRFneCm9BiJ\nRlDOVU8vvqdqUs+tMjKPeBgmryzLuEpEVGW89I3ApqxjBCchZsKthI0zDGZKLaf3RZ2fub4WST6L\ntA/z3TOMcsQgl9jbQSbzZYNwJMiyA/eyaEEzOzCf/5mSzHdXCTX1+XdFXqGU+ppSakMpdZ79LaOU\n+p5S6lrr/5536sPCwuL+407E+P9ARJ8y/vYlInpWa32YiJ5tfbawsHgP47ZivNb6h0qpSePPnyWi\nJ1rlrxPR80T0xdv3VadGrSnSeYbpI7AIUa9RliJhowrRxAkyPnUtRVNvkIkwPnlrgTVGBMA86HJG\n5JlW8OLShsi2uwNTn8O4yqtmRBmTvtb9UlzkRAj9xvjLA/B+K8+A62zJyMKrOGmHIcaPMPG8lILq\nknLk73p/GmacuCc919ZHMHcZxsOnR2UflRL6yGQk93wiCTXq3PfOtcs9RtqlYW5Gy0rxvHIF4nRf\nGmsi2y856ut1jKOakuJzfZV5xhE8FBsNw5y5gvtMZKV5LRnH53jcqEuBmGOdmWArORmZ1xs+1i4X\nQpLHro9F5gmuvXxetFutslTgBj/8WMt0eO2tu09eMaC1vnHlNSIaeKfGFhYW9x/v+jReN70TbumQ\nq5R6Uil1Vil11kxGZ2Fh0Tn8tKfx60qpIa31qlJqiIg2btVQa/0UET1FRJRKpXWoRROtPRncX6+y\n1DYV6XWWTOAEu9FgJAaePM32b+K3a80vT3154AAXm9yqPAHmasKW0YcfBgOqLzFxdNggkKjBe8+Q\nwCk4AbF1xRD/d2fhoeb5cS9ZQ2Tj3l/BsBTbOGmHn53m9qXlGeojJx9sl4+EZXDHi7MvYkwsI23f\n8LBoF9uDKPyQQeqwyn7/N5nX3J6RobcaQh++nJwt/wDubSSJYJpKOinaaUZjPZ6QKsnbOaRaWpmG\nmrCZl2uHO6Sdrsu56mGBK/3ZrKi7du1qu7yxBUtApiyf2UL/XLscNAhHFhhhxbiDrVQry3dovYbv\njQZkH402kcvdD4R5mog+1yp/joi+9VP2Y2Fh0SHcientj4noJSI6qpRaUkp9noh+j4g+oZS6RkQf\nb322sLB4D+NOTuN/4xZVP3eXx2JhYXEP0VneeMdH0XhLZ3OlbpXbnm6X40Gpz48wPWmxAfNUvSCj\n4zI1mE+2DX2YmEPdLDM7jRtEGevMZOe5RuQSiyjyD0O/9IWkeU2vzrXLydBBUTeZgR46Nzcn6gIB\n5vHGTGVhw0ypfVx3lnpuYAJ9cMLCkyylExHRRz74/na5sLst6lavsnRN7OxgWEmdvRSGDqxH5VKK\nLaCPQhnnG6GQ1NlrFbTjEXtERKkIdP0Q84A0zU7ESC68ouT67z8Gk2B6A6a3lXPSw9JhZJe7ht4f\n2IMJ0PMkl/vaGqLsdll0X2JSnoMoZj/1G+cs2V7cWzKOe6tVpDlT1+fa5dxhaZ7udZvz6lO3Ftat\nb7yFRZfAbnYLiy5Bh3njFQVa2Ul9w1L0jRYh9oSDUjzfVCwlDjMnTY1JcWhrFyYS/6YUTWNhiGa1\nbYiOa0NSRFYNEAmQwXHnHTiA/pn0bBIhRCbRbsLgQleaqReekU6JkUZMHoCnVqEkPcsWGR/81IEp\nUVdnZpyjMfQxeOqkaHd4AKLjSnBd1KVKbP4DTKQ1eP0WZ+H1+IdffUbUHTkGtWFhBaJvNG/6WuB9\n00hK0XrFY+L5MNqNJqX3W43x6W1H5PvrmIc1cWUf4viowRHnKviFlWal6fdC9FK7HDe437gSFWFm\nxcWq9BTUzBRn8scdO/YA+mMBYte35D4YGcG9xTzpxxZtPWuTa5DDvtktLLoEdrNbWHQJ7Ga3sOgS\ndFRnb6gG7TpNXXrlnCRpzKZhZmgYLpUN5g7JSQYcnySVTIShJ5UOSFJCZwvXi45PosIn9e0KS+fs\nGuE9tSqildwN6Eb+gMz1Nso/SpVd3Isy8sBNTaCxy/R5v6GHOdxd1jC9hXxw2ew99Aj6MPIyz731\ndrt8IX9Z1F1nJrAHTkA/9gw9cXbh2Xa5WCuJurVdTEI4Ar1/i6Q+XCrje7mi1FFHB3G9GRwPUHVY\nmhG3t9tUC5S7IMlI6ofgal12odtrI+Kw3sB5hGPMVbmGMfsN01aARR2mp3BGElyUW2vHhRmxp1dG\n7RVyiG4rldBfwjCXRplZLl+U8+2uNsfvVW2uNwuLrofd7BYWXYKOivHVqp+uzzQ9f7SWKZMGWRqm\n8Qd7Rd3KGkxDu1vwWMpvSS+lZBJeRUdD0rxR6kOfpRq8rFbNlEYhTl4hUbqO7zVciNkhx0h5vAhP\ns0ZAmppWNOTRQW1yvsNEVWc6xJoR3TfEeNWCRvSTciE+nz55ql1+9OEHRbuvfOX/aJe3c3uiLhiG\nGpXKMM81T5rGqktMpRqVz6LObq2Sh3i+vi1544sFzKn2SfF5Zp4ReFxHWqR4THq48VeWKd4ejuPa\nuRLWR21RetrxdNGxo1J8HgzAg7N2Xaoh2w7UQ25SyzwoPdwG1vE8fYbXZqmEMe8z8+CZR6THoqsn\n2+XZuR+LulorfLzqyfFx2De7hUWXwG52C4suQUfFeL/jUibdFKs8T4pKilFJ5wqSSrrEuM4cjdPh\nWGBVtKtu4ySy5pdiZZR5ha26EHXiQdmuWsVpaGhKemrpUYhzzgbj6zDk/eAYRMJoVPbvTUNUvVaV\nIn6WWRpWNTjMAsa9cHHRNdI/FdnJ7vef/7t2+dIVeeJeqEFEjuzL33wny7zJarCSFPalBeUS40gb\nrUi1qV6HmDzHrBgqbhCCpPE9ZTh/BVnKKl3G3FcN1UVvYh0cOCQDjzwf+q/M49TecaQVw3HG22Xf\nkpxT/0Fcb94nVSpdw/PMXYGKOXpc9u/GMac8gy4R0cwMaKFHRmBh2svJ9bexca1dDhvrtr+vOT+X\ngnefg87CwuLvGexmt7DoEtjNbmHRJeiwzh6mvvQRIiIaHJF6V/EadLylsuTVrjNSilMfAdngf37s\n86LdyePg5n7++gui7oVvvdIubzGCA+WXOs7YMHRUbaTfIebBVGF88ImY9PgLM7Nf2CAqGGXq4J5J\nsMG57plH16hjKLNDiI4rFKQJqcjON948h2it6RmZbjnExmVGgJVz6GNxCfrw3rTkMc82GPmiwT1P\nzEznY+m4laGYu4IgREbfjQahR08dm2iXK0UZBbgeYF5nCXne41tH9OMWS/vlN/T+ACN6XNPyHRic\nD7B2csu4LLdAha3TvX2ZOjoWQ11jUZrHnCD6rzGT7l7OOGcpQU8fN8hCSDX3hWOuFQb7Zrew6BLY\nzW5h0SXoqBgfjfjp4QeaHlmOIQ69NAsRruRInq/EEET3bO1Iu3z8ox8S7dwgxLmfOfhpUffhj/9y\nu/wv//E/a5e3wtIEmC9BVPVvyyiW0DhE3/xlBFwEUpKEIsU9AOfnRd1AD+oSh6QJ5vxliH6H+KVH\n5DgKRXwvEZcc6irOA1egdlQ96Z1WLUJUL83J/qt5qFG5Kq5VNlI8RcdwLccQwbWLYA/NgjMCIfnc\neQbc3rrkZC8SPMvmlzCmnU1pAmS0e1Q1efRZEE6QXcuVNIfUWMUzVIap02MpsPzG+AeHoZfpRZTr\nWgYNVerMxDgq1cME8yp02XOSXINEh2JQ2UJJ+cwqxaZJUJFcUxz2zW5h0SWwm93CoktgN7uFRZeg\nozp7TXu0UGsSTAwbl46wnF8TE0dF3V4MddeLMCE9/e0/F+1+4dOfaJfTAam7vfjc37TLlR7ogiFX\nmkF2L8ME4zNINGgJ44g4iBRLhSS54GCF6bIZSaKRZ+SR+0XZf18aulykB/qxZ5iCqhu43tjxMVEX\ni0CH50QZmV5poltfx7XWzy6JOrcf+mBvD/KepQzO9KEhEGtORT5q9A8SjR/NwxwWie2LdtcqeBZb\nRvRdlpkpL16DLhsJyLUzx4g1p4wU2Q3GDOqMcsIRSXyix3CxYSXJSrdYDsEhI6fdjdyFREQFH9xZ\nq4vSfFxjZtz44cOiLsZIOxSLaIwaZKia6enOqqxLjTXX2bsyvSmlxpRSzymlLiqlLiilvtD6e0Yp\n9T2l1LXW/z2368vCwuL+4U7E+AYR/VOt9QkiepyIfkcpdYKIvkREz2qtDxPRs63PFhYW71HcSa63\nVSJabZXzSqlLRDRCRJ8loidazb5ORM8T0Rff8WKaqK/RFMcW/NJ7rFKHyWto5ICoG2FcbS+8/Ua7\nvLZ2XbR77tWX2uVqXYpb+zl41B0+DE+7AwceF+1O/BbE5xd++Lyoy52DmJkZgeeXakhV4CDjZJ8t\nSV61hg9mnH6fFDnHxvDbe30FnmsLS3Kuella6bk5acZJJyDGcx7zSFzy5DU8mHscwxQUD0HszjK+\ntP3LMjP3QydPtMuP/pI0dXLukN9k1iDPMNH9x28iMu9rz/2xqNtkJA/+SZQHDO6+ehGi674x34EI\n1IZKAwPJBWX02jBTaxquNFP2MZOdYcGk2jzyDDhMvSiWpPrW2kJERBRdlcQtvSydtsNuLbBtiOQD\nqPSPyud5w2vTp+5S1JtSapKIHiail4looPVDQES0RkQDt/iahYXFewB3vNmVUnEi+nMi+idaa+H4\nq5spUW6aBV4p9aRS6qxS6mzJyGxiYWHROdzRZldKBai50f9Ia/0XrT+vK6WGWvVDRLRxs+9qrZ/S\nWp/RWp+JRmM3a2JhYdEB3FZnV0opIvoqEV3SWv9rVvU0EX2OiH6v9f+3btdXraZpYaGps1bqkhiw\nUoXeu7giTTzZKnRgnlo3V5HmpI09mJC0K397+vvgFvv4BPT0DSOwbeElmPa8hnQ9LCags5986APt\nsn9Fmq56j+JHLW3wh1+JYPxqX85BLgKT3fYW9LWGcSYw3weTWtTI01bdgM6azeJ84PU3XpNjZOmA\neyNHRF2gD+8AvYZnsW+YxoYHcG6RysmIuCusbU8vrhWNS21vNwjX1wEt53uZmRyHCKayVZL69jgj\noMwakYTTOzCjrbJnHTbOQRYY+adJCJkpQyKNMR2diMjPGG9Ck4jSc4yzg8g+zG2hkJRwqxWYUstx\nrNPhQTlXvT04B/CReVbT7NNxjEMFPtZb1gAfIqLfJqK3lVJvtv72L6i5yb+plPo8Ec0T0a/dQV8W\nFhb3CXdyGv8CkfEzAvzc3R2OhYXFvUJHPehcn0f5aFN0HTa8oKpvQ6SdW5SRXPM1iHqfevDn2+Xx\nD8jQpbe++2a7/PbuNVEXT0JUKvag/zdffFG0y89M48OgPHMcZtzzZeadljdSSOWvwKwVC0vz2ghL\nP/1yQ0bLDYThOfhf/Mr7McaLF0W7uZVX2+VoQHrQJcYgBioPJp5yTv5e78UwrsGw9BgLxiCOVrYh\nMhfTkhhCDWH+//rsG6Lur575drv8mV9+rF1+2DDRVRiHf4SRVRARHWZekIrx+69PSxF8J4z5zhyS\n50JbO7hPH0v/VOqTKuAoM4P61o003qMYV8N47QVCiH6MhaG69FcN78tTuHZ9TlaVmLn0o1MwOxfi\nknCywcbPI/GIiJKp5nN3/Lc+hrO+8RYWXQK72S0sugQdFeOdmkep+ebJcmFYnrxGWMbK+q7BvcUI\nJsIRiLeBsBSV9hkfW9XwghoaARFAiJETREMyMMM7hBNPT8nT0AsXcVI/e/X5dnmwV6odA73wiMqm\nJTnGFgt00I70dhoeglfUXpmlRTLUifge+iwWJbecVwZXWzoJmfPUcZmOKBhEO2Vw7fkceHutMyeu\nsTEZPJJkYv3GtiSU2ApAtK4yAoxKRQYNhXfwvb6kPKVuaNxnuQK1ye/J+Rhh498NGSnBmBdhpY75\nHSDpxeax036fX+Yj0OzEvTEvA1wizNLQH0Q5nJLqW7CCz4XDUh06lMSaC/ZjruJ1yWPXw4KSjClo\nc8/Xapa8wsKi62E3u4VFl8BudguLLkFHdXaf46NwqmVOSMmInmgGutbiotRpnCo81P7f899pl3Ov\nREW77T2YqPoFHznR9hD04+UQvM4KOzI6STEPt3hCngkoB5895mW1GpBmnIHooXZ5syp1qFmW3y2a\nl9/7u+uI2gvmmQlNpoSjOEsrHXamRB3PI+YtQucrjEqPrnQPM91oqbPXWGrqAiOXeMzQ2Tln+uQB\nGan4W6mPt8vjE/A2LF2Veqhm8/HYA8dF3ZWr0OGTTEntH5YRjVt+Ft1nuESGNKL2InGW7rskTZbc\na27ZIEM9WmEejCdkOnGHEUvWkzi7SWbkGUkyjjGmDQ+9IkszHWDkE4GQPO/ZYN6AC8vSy3S5lda8\nXLUpmy0suh52s1tYdAk6a3oLO5Q83hR1tJK/M4tL8NSKF2Xdth8i50E/xJwdLU0kk8zs4mV3RN3q\nMsT4M8cfbJf/s08/JNo9c+71dnnuDUmOUStjHCFmBuk1+L2XdxAUUipL8XmZcZMdPywDUE4Nnm6X\nN5npanlF3mfQgdmsJy5VmfoC+l+Ns4CcNRl0U9uba5enjXRKwTDmsa5xz+cCck5HZ0EIMjgsvRlH\nD+BeepgZ6vyFN0W7SAh1yahUm7JJPOuhPojj2wHpWRarQRXY2ZNqQoaRb1Tq6D8eMVI2M4/OoX7J\nX++kIZJzFYqIqC+NeR3oQf+TY5Jjf2MVpmDODUhE9MhDGOMa48T/0UvSzMfNm4WyNGGOjTfHZQbx\ncNg3u4VFl8BudguLLoHd7BYWXYKO6uyqoSi82dTRGkbd7jSizVyDmzsRgXksH4cO7NuXeldgGNFJ\n8aB0V9xYg9479wp0TednPijanaxBF//kPzol6gr7uPbf/uBKu3y+cEm0q7K0u/EdqVPH4zAv9Q3K\n84KRMej+c4swN3oGy2GYkSXubEsdMsLcc5MsoqziSP/KnRpMNDu70mVYs8ipvn6Y1/anJVv4Xy5D\n/15ZeUbUve8hmD4zaRBT7h9L4p0AACAASURBVG3JCLtkVM4PxyA7CnGZCa04K/PnZdgy2DNyva1s\nwszKOdUjRqruvgHo6dWq1IdzOczPzPq0qOtn+e82elhK77I0mw2koPeHJuU7tlrFc3rtNTz3QlGe\nGcWTOEvJ9MnzDTfbmm+DN5/DvtktLLoEdrNbWHQJOirGV9wqXSk0xSDXIAFYYyY1d1Pyx60xfjBO\nsdWTkNFm/ach6p1KHBN1Vy9D1K6FkJroNYObjZNipopSFJucgDj6mc/AS+4Hr70s2r26AvOdOyTN\ncsMx3KdvTHoRlhinXj4P8931ihTnaBaT0G/k4cmmID6fSEPU24tJk9T6Nsw/axEZKZZlRMG1GlSq\n3ctXRLv1EHtmrvQUnFnEvSwzyjh9XYrgwyehytQKUl0ZH8ez2NkF99tBQ/TfSWEduEZUmsMi4qrM\nxOiE5bW8RfS/bpgi9/OYu6Ah/u/vQ8TnpsPtXcnXl0nAK3TKkaJ2kc3dJIv+3KlIL79aHfdSqUgC\nj5TX2jN1G/VmYdH1sJvdwqJL0FExvuFr0Ea0Kfa4RhbK8AGIR6Wq9DBylyByuRrlRJ/0UtKMfnnL\nlae+Ewcm22VHIXhkb0+KW/tXwCl2be0Hoq700MMYbxTils8gf4izQBinIX9Pe1IQ57Y2JA30My/P\ntcsrHkTmUkXOR5IF5GifvHaZncBfKMEqECMpmpbrOI3PkgwaqhPmuMbonS/lJV10oA7x//DhQ6Ku\n6mJpVWdx7cCgtMO4TGWo1MwgDvTvMoroaFh60O0SgkKGs3JNTPZjTVx7HifpM2X53IvMehOPSTVh\nhHHtOcpIj8BIUjIZzNV2WFo4+hOwwryyPifqCtfxeTGI9bKTk96XuzsY89CAfO7b2835aRhU2hz2\nzW5h0SWwm93CoktgN7uFRZegozo7+RSpYPOSQ+PS9NFw8btTN3JELkwwEw9L21MyPJ2uzs60y2/u\nvi7qDoag5/UnT7bL/lGZSshzoR/Hk5LYIp8DEebcS4gAC09KHe94FOOqzkjbWPwQ2oZKMhLt0vUf\nt8u1Pp6OSJroEizSzUy3XA7g2twstDYr2+0W0a5Qk/prLyO4XFyCHqr8chxDwzArmmmOd5m3YWML\nz+X40UnRLsZIQ+sleSagmcm1kMdchZUkNymy1FMf/tBJUffZE59sl/+i9OftsrvwqmjnslsLReX6\n8/lgAnRr0hzGudz3dtFJn0+ahedexfUWlmUKqXAE49/cZR6RRmSox/hPo1FpFg46zXH5nbN0K9z2\nza6UCiulXlFKvaWUuqCU+letvx9QSr2slJpWSn1DqXdIDG1hYXHfcSdifJWIPqa1foiIThPRp5RS\njxPR7xPRH2itDxHRLhF9/t4N08LC4t3iTnK9aSK6IZMFWv80EX2MiH6z9fevE9HvEtEfvmNfNU31\n5abYo83fmQGYN3w+aT44EEAQS3UU7epG+qSFRZ7FVYqVMcYpX8uABGAqKLnTfvmX4CXnZgwx+wI8\n70ZOwKuqmJbjmJmda5cbJIknXluB6SawKaoo28/MRoMQCTPVPtEulYAIZz5A3cD31htQNTyDZ84d\ngqjaV5FiK89Jy3nmAiHp+aUcPMOGJ5+ZtwJedh6AktuWZjNfD64dMLjf+MyVmKmwXpHqRI2RVyTj\nh0Wdy0xs7/v5J9rlF56aE+0aHp5L0fCg22Xee5N+OUZfFgE0nDjkyo7k0Y8nGW9gTK4r7UE1GB/B\nutrakcEuaY37rJYkf+Fmrml+5HNh4k7zszutDK4bRPQ9Ipohoj2t2zQmS0Q0cqvvW1hY3H/c0WbX\nWrta69NENEpEjxHRsdt8pQ2l1JNKqbNKqbON6q1/dSwsLO4tfiLTm9Z6j4ieI6IPEFFaKXVDphkl\nouVbfOcprfUZrfUZf8ie4VlY3C/cVmdXSmWJqK613lNKRYjoE9Q8nHuOiH6ViP6EiD5HRN+6XV8B\nIhps6Y56yEiLy1TsDSXdSBVLOJZMQxecW5TulR4z1YwFpF5HIyBpLLE8an7jWpXomXb5REi6kV5w\nce3gOPrXFakPDzWgY8eHpFkuE8eY54JSd/MF0Y+7Ah14u1/eS5bpjY1FacaZY8QZpRiuFR6W+l89\nh3bLhqmTOGkhc8cddGU7l13Lty7fG8Egftj9zHQYT8j50Br3OTYmXwaNCsyWGy706EpRmktrjBTz\n+Wf/SNTthKFd/sY/+PV2+Wd/RvLtf+c5vKv8QYMYgt1n7Jg0x9ZqaOuyeUsaZtUeFhFXSErTYZ55\n1pbZ+cz+vsxH5xvB/KTLUmcvtiIm+R4wcSd29iEi+rpSyqGmJPBNrfUzSqmLRPQnSqn/lYjeIKKv\n3kFfFhYW9wl3chp/jogevsnfZ6mpv1tYWPw9QGc96AKKvMGWWGhKjhoii98QCRus7TwPzjeizbjI\n6YxJTydi4mKUedOlpyZEs8ceONouFwvSsyzO+NRnZyF7RSKSGKLM+MYSg5KD/CDzTstuGyQGFaRf\nniaIaZMGWUOYRX1dqMr+y/0ghyjtwEvOH5DX4iaa6qLBCDgCsXt4GGmOPS3FSoe4eUnyxhOLTkwm\nD7Oy9CzjXnLkkwad3X3Mf3UJBsFcQorIjX24ltVq0rPsCuPp/8EPX2yXP/7oR0S7F36M1FvbOenJ\nl0pBfN4ryvXi80FVKlWgamgjKi3HyEN2t6NGHSI002WsnaER2UeQpSZbcOQeia82x+wYfIVirLes\nsbCw+E8KdrNbWHQJOirG65qm+kJTDFeSLVpkr2xkpVhZXsBnXYRoo7XBWTYBEUsbP2N+dqvRCETw\no0b6pL4kPpfTkoCgeUbZRJVlZ90JyXEMH0Qf62/K036PeaSVXSn6lmbR57EUTn39cSma+gjjSPdK\nzrEk67OP8dFt78jUTTzIYmzECLggNsesHA5Jb8M6O6UmQ2vyr+J7a8wq21uRfHf7DczHgOGFd+EK\nAo+8HBODPXmaHWGpm37hM2dE3ZkMPCJ/cPk8xnHqAdHuC//Df98u/97//n+KOleh/1JVqhCxMFQN\n3xizkjTkmiiXOb+gvM+4x3gP+6F6RSLy5L/MSExqnuE9WmiK8WXPkldYWHQ97Ga3sOgS2M1uYdEl\n6KjOXieiTaepyzmb0qww2A8lPlObE3XVLMwzc8vQSbThLeQw/dIkgdQe2l6+BP3v+36ZzufgOD5v\nb8mwtIZmnnxJeDqdnpLuBo6DCKqdvWui7nodZp1KVepXehP6bK0X5p6YQfTYYE5zBUeOPxhh6Zx7\noSfu5aQX3pEozGENd0nUcROm54GEwjMsndzcVl+YEzVrTI/2M4KH1TXp/eYwr7MZZiYjInLZ88we\nhLnR2ZHLdmkDfbrGuhr9MO7zMycOtssJkjr1xRmcD9TNVyBbZtGgPPsIbOA5RTMYo5k6OsF44/s9\nGSMSH8BYYjHo79v7so+NXVwrsCijB4daHqPbpjmawb7ZLSy6BHazW1h0CToqxjtOiOItcoERLUkd\nVgoQVQsFaZ5J9MBLKeTDkF3D9KYYYUV9UYqmK6xpnDFozRmi4zf/6ul2eWxEpm7yfIw/bgpiWTwu\nyQ7OX4KYNu9JVePkAQRgOEbGzT0FzvpGAGa/ekUSIVQSEIs/cOr9om76OsRuZw3zlklIvr6NbaZC\n+GRdjImc0ST44EtGcAcRxOfI1BFRk1qDt90N1Y2IyBuW75dKGdeuLEjxNnoIfXKLUmNRzkehjnv+\nzrlzou6JX/mldtnH3m3fePEbot23v/t99kmO0c8Cj1IxaQbVUQwsRKjThjgd3GYi+GEZ8LN9Duqi\nr58RgqR7Rbt6HSqEaWDz6IYabLO4Wlh0Pexmt7DoEtjNbmHRJeisu6zWVGs09cjrg5JEMbgOPSxu\nuIc2yjBH9CbgJlivGbom4zXPZ6U+P7KG37UsI//TiZhot7EF98dkQuYN6zkF18sDzB3S4EmkeBTm\nsBEjLfPoGMx0E0Ykmn8CHdVS0Lf3L+yKdtUKdOe+kByjP4bIuY0k+g/VZXTc3g5Mgp4ndUj/Gs5M\nSoPgfN++KM1ODnMjDQSkPr/KTFtTERA3pH0HRTsKQ/tcOybPN8YYAcb2Ds4wVoyISU5oOWec1fzb\nr36tXd65dLFdnvfJnG2lItZjOi7vJbyBeVQRqS2nq3Bp3SvAVBbV0jSWK7G8bVUZ3Zc4hrMKzVyv\nU5sy11s5hzOj/RG59n3rzfMTpWzKZguLrofd7BYWXYKOivGu61E+1zJT7UtZbJyl2ImEpAi0MwnR\nOraJuomjBhEC8+haXJOmj1I/RLOFAhOD69LckxlAZJcTkSL+1j7E6RQjlNBVGYG0u4+6vOH99vbb\nb7fLV4yUze87/b52+f1Dj6L/M3KuKmWMv1aXIue6ghgbYuJn1YjWOnUcKYTjJalSPXcVIn7fOjcF\nSU4+TknX8Mn3xkAE5qRZH0yT0f3Lot3wMjwng67kFPQ9gufZmwEf3YdG5XNvDMBEOnPtqqi7/Lc/\nbJdLPfAorCu59IN+rKuIX4rq2TQIJTI+GXG3yjROL4L1USxKEdwXxXqMRKRpuc5c9mozWC+RmLxW\nbxoiuheRPHmFoRaBx3lrerOw6HrYzW5h0SXoqBjvU4oigaa4NDIkxWyPEVR4dXmSnroCsW0niFN7\nb1mK2bFDOC2Ob2+Luutb+F44BDG7EBoX7a4sXG+X59Yl51pfD06+yz04hQ1uyhP3N1bgxeXzSTF+\nd+fldnlvS4pclQLE3deWwSX3UL8Us8NhpkI0pMi5w7ysFPPiqsxLMf7oI8jzcejjR0Wd/2l8b4Fl\n1z1qkIpwXr9QdFRUpXtx308/jXveWpLBHamTjNRhT5KFuHVwyzVqaDeUkusjyFSv0b4BURdn5CTT\nLMvv2vrbol06jTX2QEoycQRPYD62DFPAAOMDLDUgdgd98l6qLDWU2pfBQP3c6vMIisU5qWJuR3Gt\nHp/0ImzUmuvdR/Y03sKi62E3u4VFl8BudguLLkFHdfZYIEgfGGrqdmpY6uz1XuiDe3uSr32B6Tte\nzbtlu5XL0CG9qDRN9LCUO0ND8GAKhA1iwCWYw5aNn8JaA+PY3EHl7rb0QBvIYhwxw8NtdAhmookx\nSTg5nYc+u3EOUYHfXpwR7WgYj81blDrk5BjOAXr7ETWVfVB60NV7YMoqF6XH4vseOtkuP+Khv8hh\neUZSqcK8NB6SOnulD2cEFy+81S6n03I+PA86tX9TmtTCA9BRe1lq5ITxbB0HY9y7IslCCowf313F\nGcz7px4R7Q4dQnRfwG9wsh+AqWwjIaM1k3HMyeo6vPLKV6VenmPtRoxoylQcazMUhvlu05GekzFG\nEpq7Lskor6w190KjfhfIK1ppm99QSj3T+nxAKfWyUmpaKfUNpZTN2mhh8R7GTyLGf4GILrHPv09E\nf6C1PkREu0T0+bs5MAsLi7uLOxLjlVKjRPQLRPS/EdH/qJo2nY8R0W+2mnydiH6XiP7wnfqpe5qW\nyk0vqUGDOzu4CVEsXJCiyKNDD7bL6w5MDnMLMuhhOAaxspiXfPBDQxCZ4ymIrbsGV9g15vk06kiT\nWqXKiDNY9Es6JUXToAPx89AhadY6dRwmr0ROmmd+5gA86LZPo/9wVI7x+b/7Ubv8+o40IdU8eHvt\nFSAW96SkN9b163Pt8sILL4u6NMtUemgKgSsnJ35ZtGM8IvT2hedE3cyLMB0WWDqlbK+c01deYRx6\nPlmXmMP8uD0IQgr2ShE2n0cfP5qRKk+Wif+/+Ns/1y6ninJ9XGPkKdmSNDHOz2GtLi/LZ3GiB2Oe\nWYTYHZuQwS6PZbBGHHNdMT74dRZgxfMUEBFtbcGcHB6QqsxDkaZH5OLFN+lWuNM3+78hon9O1A5l\n6iWiPa3buXKXiGjkZl+0sLB4b+C2m10p9YtEtKG1fu2nuYBS6kml1Fml1NlqtXj7L1hYWNwT3IkY\n/yEi+iWl1KeJKExESSL6ChGllVL+1tt9lIjl+GHQWj9FRE8REfX0Dt86U7yFhcU9xZ3kZ/8yEX2Z\niEgp9QQR/TOt9T9USv0pEf0qEf0JEX2OiL51+748cls5r5g3KBERhflZvpGiOM30mPAe3EEnx6Wr\na4RxbvscqQ+nUtDF/X60K5YkCcAQSxJXMwgwAgqaSoORqPuW5flDfQqff/Dc86LurdfOtsune6Wu\nz/VjHzPRPZCR7rKnTp1ql1c2JLd97hqkp3wVuc32/NI0FvTje9GAkX/tMnRPJwr9NVWTUWlURt2l\nCxdF1TpzV3bYvWSC8pmNvA/unT1VeZ/LS3h/lCpwY640ZESZDmIZnzh+WNR9YAIEn4cOfrBd/s5f\nf1u0293DfIQ/LMkzc5dQt70pIxXPM27+U+ysI2asYa6n7+9JF+pt5kJcqWA+fANS8E4ncdYUiUyJ\nusFMcwOFgrc2ir0bp5ovUvOwbpqaOvxX30VfFhYW9xg/kVON1vp5Inq+VZ4losfeqb2FhcV7B531\noIv46f0PN6OSzJTK589D5DSyOtFcGX/IDkOUTqcM8gpmsSuWpKiUz0O8zWTQcHdXeiltMo7wzKo0\nwTT8EOs9xpm+6cjoteAcbs4UqlzmdfbCjoxE+9EMPLzGRjHGmSmZKjk7hMiuhWUZGVVic7DJPPJC\nIelZdoQRc0wMTog6rx/qhebeXlEp7k+vg+/ub5+TJq/EcZj6Hh7GeHdj8uF+MDGJ63oyj/cA8wCc\nvnylXe5JSdPbsaMwb+avSvKKeBxPYPoq3ESGh+W1hodgoiuUpVlL1/FcJgdlVN2Rfoj8fI3lcjL6\nrFZFzq7LM/K5u8wzro89d8eTnnbplI/VSU++RKypNvh9NmWzhUXXw252C4suQUfF+GpN0+x88/Rb\nKSnONaoIzDh6NC3q6kwyqbIUT+TJ0/J8AaLqUk16OinGSbe/A5HTPL2cYCf80zOzoq6/AhNCeALt\n+v1yGgd6IH4eHJNECCeOQPWozki/g3wOYy7GIe6HwlJ8fus8vOb2Y/JkeqoPYmWI8ZTl96V1In4Y\np9Yf/syHRN3pXvDTOb0Q96ViRJTLoe7RR99Ht8Lu7ly7vMPIQYiItgjidLko+ekKbD7qdYjFeYPf\nbWUFnpT5hhSf51ldhnmxjRuWnJkC1ITyVakaHWFWEmXomLUyS/U1j/WR7pXjWFzEWvUZal8yDbF+\nZwdzOjYmT/R7GffgumtYckabeyYUtBx0FhZdD7vZLSy6BHazW1h0CTrLG6+rtFdvRij5XIN0YeLh\ndjkSlF5t3jzToWrwqipUpN5SSeN7Bx1pPqlkcSZQzcITbNAv43d29rmuL8foZ6QGPpaGOBozyCsG\nca1xR5pqnFUQboyPyrqh/tP4wI4j5j1JfHmd6aEDnuyDpxcObqLshOR9BtlZxeraoqgL+GCGGgrj\nnsNxOadH4jhLGPoHj4u6CPMg+92v/bt2+fKuTCG1m4eemynJ5xkP43oJZtaqedIz+5VXMR+O8foK\nTeE+9xs4t3j7u5KwMRrGcxlMyTOjajXIylIX370EXT8yjMhKV8lzlmR1htVJ0pLNIuYkHMIzG25I\nj8UKI8X8xFHp5Xe0lcYsEZR6Pod9s1tYdAnsZrew6BJ0VIynQIB0i/9tyPCSe/A4TDDbm1LEuthA\nQL7LuND7JiQ3fEhB/HIbUrydZMEpb5xDMMOsK81rgyMIGBk3TGqamV14tqOFOal27K2BDGImdl7U\nhZic+cHHJ+X3IhAleyow380npDi3vQsRMZKQBrE334D8XyxC9D39kEypVa2iz28/I6OXh4cgFo8w\n77eEkfGWB3dMHJgUdfny6+1ysoJgkRG/JGQIsTmN9ch5zPbA5LXlBxf//r4UVScmEEATCMrsrFUX\nKsn5l5jJsiDNngMs2GiMJHnKehj3XSpLs1yljDHXCjAJejlp+vUKCGLpScl37CQzQ1cZN3w5KNff\nYyxXwZHDcg4W55omzbonx8dh3+wWFl0Cu9ktLLoEdrNbWHQJOqqz+2ua+q83TRfuiPydmVmC+Wd5\nWbrB7uahCw35oE+5rnQN3NuDiSQUk/rf3BKLdGM5xcIxqfsE/egz4DO47Zl7bngL1xowCBATEUxr\nMi8j89wUTDc/fs0gQrjCUhtHMcaA4S4biaLdhiPrAgGcdxxL4RxEG26eOzsw92xuSwKMQhnzvR5C\nnZFejHzs4GJwTpJWFpieXqjAzdNryLTPkQDmJx2XZxMplrK4wHT93pSMGutJ41qelhz4O9vMhbUf\nc5Avy7UTYqSYW1PSrEVFXC9v6OwrSzCL1hZxrUavJOIYYjz9Hzh0RtRFNPT0FUbdlvBkBNseS2n9\nyg9ldN+N51ku21xvFhZdD7vZLSy6BJ01vek6kdckfXCN7L8/eAEcZoGAFLEOJiDqVZhIZYqmxSJE\nMX9YpoYiH4gA+vogYg0OSZWhzkSnGIt2IiK6NA3R6fgIxMoHj0gihL4KOM5nr70o6koOROSjR6RX\nW2kGddUIxrG/K02MOcablw5Lc1iwFya7cBSqRjAgvfyiu/BO843I+Q6zyCknB1VGN+RDcxRLd5SX\n4yj1QLQul2ES9SupGmXY8xwMyxRVRRbd9lAGKamcPvmOShYh7m8Y5tJ8HqbVYgHXOnBA8vlX5yAi\nv/zGG6Kuh6keuZI01ebLELtDUfDCKUMVDQxivic/MCnqVB4ivjsNgo2AJ9Ua1Y/5d9fkHIy3+gzG\n7g0HnYWFxd8j2M1uYdEl6KgYr7WfqvWWmLkggxkc5i1U1/IUMhKZbJfnyyA4aMzKgIWTTIStRmUf\nBeZNlmABHfPz8iR6bAxiZiwnRdNRRjpQqkDEyhcNcWsbXnMTQzLo4fEzyB766C9LwofvfRfi4842\nAiwahkfXK6+BfyyelCfTXhynsfU6xP+9felpp+NQIdxFGQgTZpTFoRDEQs84HQ6Po104K3nyivsX\n2mUeZBLdldaPQAoibG9CWjXiaRZQFMQz2/JJtePjv/WL7fLCiryX/e8iAGX2Ok7SRwalh1vZY6aG\nbRmss66hsnmBHlEXSkKF8/Xj3bl/TqqRuWtIUbX4+uuibq+OcXl5PLPD4w+LdlliNNOTch7HB5oq\nRCRgA2EsLLoedrNbWHQJ7Ga3sOgSdFRnr1Od1lTT9KYME0mS8ZjvF6R+eYF5e/kVTGicE5yIaIt5\nj9W3DNseQygHfapsmJPmZkGIOH5Q6qGBXehu9SVEhi0a+vDkwzDV/Df/+B+Juv4gI6A00lY/fubR\ndvmt13EvmzuSLHJilPHSR2R0XyoJnXKfpYIqJ6VH4c4+5mDPMHXWM9AhC5vQE5VhNvNqGEepKnXU\nKCOeqFQwpkpCeqCNsefef7JX1CnOLbqKD32eNLn2VHBvLyxInb2Qw7nCow/hufT2SaKMwCDWo99I\nh1UewvdWz58TdZEQzH7VRfSZSZVFu719fP6LV8+KukcOg7c/zM6r+gal+a5Wx1rVBonGy4uvEhFR\nsXbr5Kl3mp99jprkoi4RNbTWZ5RSGSL6BhFNEtEcEf2a1nr3Vn1YWFjcX/wkYvxHtdantdY3HHu/\nRETPaq0PE9Gzrc8WFhbvUbwbMf6zRPREq/x1auaA++I7fkMReS3ZzDM46FQDQxkalGlviInaQQem\nrCc+IgMWXnoRIngkLc0nHvtdKySYGW7TMGEcgGrAM7USEcUiaLtZRf+5jDR/bV6D2H39rORJj3zY\nuDcOlsr2+Ilj7fL+SzLIJBSCmKn8UpVZ3sK4FgsQaceVFPd7ExCzvR7ZR5p5GG7HYKJa35GRMMEC\n2mUzso9kEV6PDiNkCEcTol3vAdR5WnoiXptGHoBtZg5LpaT5K8Oyvf7ohZdEnePDOpscgdlTBeT6\n2+hDQEv/kOy/tgr1IjEuU2WtEsygB49jjSWi0kPvMruXXFWm4trah6rx4NT72+XpmlS9osyzMXdF\ncufnWgQn1eqts6Lf6ZtdE9HfKKVeU0o92frbgNb6xp2uEdHAzb9qYWHxXsCdvtk/rLVeVkr1E9H3\nlFIidYfWWiszxUsLrR+HJ4mIwtFbG/wtLCzuLe7oza61Xm79v0FEf0nNVM3rSjU5cVv/b9ziu09p\nrc9orc8EQ6GbNbGwsOgAbvtmV0rFiMintc63yp8kov+FiJ4mos8R0e+1/v/W7S8XIKKmzu0YBN+9\nPTA5+AyzHDfTFfMwYayuyrS1oRD0Om2YZ/zsesk89MbBXkl2UPJDF6pMz4k6rjOFxmCGqy5I3ep1\nH0gpvvb974u6f/HgA+3yxKjUDYmg+zc0XEe3QgZZZA1nGDPTMj/a8jrcLbmwFZ2QRI/jLGXx4YDU\nQ0/2P9guv8lSILtamim3WcrpRl2a3koxRAweDUOiq/dJUoerMzhXWN/8kahbWcM8eow4ZMyQIb9/\n8dl2OV2WJq9QiJGRBGEsqjdkuzoj4CzuSsKRrIPvZU7LSMX4BZx97M/irMY9KaVYh60drypNjHoD\n91kcAQGGW5GacYWZ23IxGX0X3W+6jiv31imb70SMHyCiv2zZWP1E9H9rrb+jlHqViL6plPo8Ec0T\n0a/dQV8WFhb3Cbfd7FrrWSJ66CZ/3yain7sXg7KwsLj76KgHnSIfBfwtsUcZwf0snVIoKHV7bxVy\nm1uEKejSZSk6JqMQyRvXpafWTmitXR7wQaQtV6QpKH8RYuV+VI4jGodoFluEylAbkGJZlvGpn7sk\nucKe/g7E+t/5r39b1E1fgBj7dy/OtctbYWlm2duFx97qpvRjCocgPmezzOPKJ9WmvX30ORaR6Ytf\nv45IsaU85vjB44dEu+tzaNcTlxGIfoJ4u8nMrP7StGh3YXqhXZ5fkZx8PKKvtwfqTzwjvd+SNYjd\nJb8k+lhcR5+7VyG696WlChWPoP/Jcbk2P/oA3mmRg3K9/E+vfKVdnt3Emji0KiMh6y7WY3hbjvFy\nHM8stoE+Pjghn0uBPbMre1LVKF1viv/lquWNt7DoetjNbmHRJbCb3cKiS9BZ3viApmy2qQ8NDUmz\nQpmRRXLeciIitwKdRCVCHQAAELhJREFUr15juo+S5qRsL4uuihj50abhzum6cI0sRo3YnQginD57\nXLo8brBzhcuMb75k5KYrsyisQkmO429/8EK7HDIYeTZWMK4tFul27IScqxw7ExgflaagTA1zsKEx\nrkpF6nL+Zejzl8bk2UcsBjPRAcbcEwnJ+Z4YgetvpSLNj7153PfOFObq3FXpxry0irOUYF5GbDVS\n0Fk3L+GsprYwJ9r1sxxooYC8lyVmvotFscYyScmK84kHYG48+ckPizqupe8YwZQnjsOtuaIxLu3J\nhjzHXzouzXIhxmcfYL4or65fEO0CLFfBYEKeObhHmnr/O/my2De7hUWXwG52C4suQUfFeMdzqKfS\nFJ9qNcNE4MNQ3JoREedBvO09Bm8vtyJF5ABLEdQwfsZ62fUCU0jLvGGkeArugYByOy491zbXmEcw\nM2X1pKTZKcC44RPjEVE3xsTupS0pcm7vQcysVmH+yeWkl99AL8T/y9ek6LsXwzxGWSqrQkHOVfQI\n+gx4chk0iJns/HgW61vSIzrHUhSXDc81t8pIGFyoIVNGfMSbzMrVqEnRVzXQR6Mw1y5XqzLCbmMb\nnmXDD0mXkJ4TENcTETzP0/0PiHam6M7BqPPJMXbMr3z259vlZA9UwuVlSaIRZOts/GFJQhpaw3O6\ntIo5jhfluqq7MEUqg3Dk0dGmSuU3UmJz2De7hUWXwG52C4suQUfFeM+tUDHfCtzYl6JMOoMAifCu\nPCGvafwmqWWcrjqu5OF6bQMikJZOUEQBiO6jaxB1anVJLrFawLU3v/s3oq6XBSJ4dVwgmZTeTIE6\n2hUS0uNqlQU9lKryRFi7EPUmDoCbLRiWHHQuu+/JcYMXjiBOs+S3NJCVImEqDXE6ty3F5wo7FZ9W\nUC3UBen51RiAiF8oyPtc0mj7yA6WGU+RRER0JAbR9OKGJOlwmBhPjH/fb2S1bVQRPFJfWBB1Yx+F\neD46iPE2BqQaWWF9ZMMyMIjkrQmsKnAR7u1CvTh6UHobasYNXzPUz+UqArpqTFTfKUp1pcC4GaP7\nck14NwKzlM3iamHR9bCb3cKiS2A3u4VFl6CzHnSOn3pbZIErZelxVWJmHMeR5oNVZrZosBS/cUN3\n4+Y8bdzZMEvNXOB60bQ0XSmWR8xz5TiiIZjRqh48mGIhaXYq9EHfbuxLPTcehydYuSLNcmHGj78V\nAWd9rS51t94UdOyIQThZLGIshX3MWzAi7yXO0hcH+qQOWfVDv69uMG9Aw2sr5MJ0GKtIXVEx8pDr\njCZ97BHZLtvLuNYDUs8lFp0Yi+B8w7+yJpr5HXg9Dg1KcowxdjQU3sV6eWVF5hqcX8KcPvlZ2cc2\n4RznL//qaVF37YcgjwxPsHx0m3Jtbm9hXS0vrYi6AssVOMjuOXxQ5iHs68eaKOdlrrpLV5rPqVwx\nD6sA+2a3sOgS2M1uYdEl6KwY73eov5V2p2EEsVyfh8lkLyfNCuNMfA5MQWx1SHKwu0sQESuNeVFX\nmIE4GhqDiHXkiOSeTySSrCxtLmqZeZOtIe3ulR1pxuljXkwHJqSYvb0LD7qiQTSwwFSbh5m3Wl90\nTLTTjAu9UJJqSCCAaw+Po12tJlNUbVXwveqeDLTZL0L1KDDxvLEiOf9qLB1UQUlCiaCD8e+7l/D3\n89KsmumFynC8IT0WlxifWohZGAdOnxLtkgn0IQ2RRFdzuO+Fsxfb5XJVqpEHj0CF+MNvS1H94kV8\nb25xSdQ5LI332B7E8aAjxfj5BTxrn09uu6ERBPwUZ5mX3IJU87LDUA8TgzKdeL7QfJ5mPgYO+2a3\nsOgS2M1uYdElsJvdwqJL0FGdveK5dLGdLllqV4r5t3oNSeqwy1IzZxh3ecnIhUUZmFOWl6XucuIY\ndKZDU4+1y2a0FifOKOWkeSPm4iyhNwk9cXFLmkjGmPnOCcsp9hLQIctVSeQQYXnQZuuImooYZhyf\nh2v3VuXZRyUDvbHE+Ml3duS1ihV8VkEj+m4XunMsgei48JThvlnLtsv1RWnKmmN58lymH28GpSny\niHu4Xe4/IKP7eghrgufZi8bkWcrWHp7T7HUZbbbEzhn8LP9A8qh0H46EcYZRNCIE88x9ODIpdeVa\nHWu1kMcaU76saLdXgq5/5swZURdQeOfmYngWV2dnRLsIMx0mq3Ku/ENO67p0S9g3u4VFl8BudguL\nLkFHxXjXp2ivxcXuSQsG+RRcnVJHpCmon0vkTE4pVaWYnSjAVPGRQ9IsN3ACpAYN5mkXNSLsyixN\nz8qPX5Hjz0IsPvPoo+3yJ4PSFJSfgai+tCZNgKkKE4Ub0lOrr4yxFPwQYVe09Lg6sMuILUh6TFUi\nMJXVG3NoV5SP2gkhCrDmSpNakBFMlFiEVpDkeBtLEJlXDPlRaUbWMD7ZLu8tSO+3wgCe4cBRaWJM\nFyA+97vwkntr4bxod7XCuP49mT67hz33A2GoJ64nPfnyzIstHpVRgCeOn2yXl5bl+ItMlSwxdUX5\nZf9h5vG2sSNVmeE+rKvAFngDj8Sk6S0fx7raKslxHKCmd92tDW93+GZXSqWVUn+mlLqslLqklPqA\nUiqjlPqeUupa638zcZmFhcV7CHcqxn+FiL6jtT5GzVRQl4joS0T0rNb6MBE92/psYWHxHsWdZHFN\nEdHPEtF/SUSkta4RUU0p9VkieqLV7OtE9DwRffEdO6sp8i03f198SoqOngexe2xN/gbV2YlnJoOA\nCBWR4lZ2HKQDfoP2uHwN2U5fYYEIjkEqduLE8XY5OCFJDB4fh+hbYRxg1ao8veWnvkNlI83VIaT6\neZ8jOd2KFYiZuTxOW4tlKZpuRSDux2LydLhagvi4uYlxpDLy9HkjBFFSr8v0VZ4DEdEfhjheqkmr\nwxLjCoxEpMjJnPxobwPPInNIBrswbgy69KLMTJpIQIyPsvRdbxncfYkknssjw1LA1JoRVrAUTE5A\nWoOcVXwu5+V8Bw7gFLw8J70e132Yx0cfPt0um16gs0tQ3yLT10RdpQjrQjCIdtEhmf6pfwfjeLP+\nlqjzbbb2TN30IWRtblkDHCCiTSL690qpN5RS/66VunlAa31jx65RM9urhYXFexR3stn9RPQIEf2h\n1vphIiqSIbLr5s/nTc8GlFJPKqXOKqXOVqulmzWxsLDoAO5ksy8R0ZLW+gZB2J9Rc/OvK9U8Qm/9\nv3GzL2utn9Jan9FanwmFojdrYmFh0QHcSX72NaXUolLqqNb6CjVzsl9s/fscEf1e6/9v3a4vn69B\nkXBT3/Rc6RVW74Net2ikKgptQx8cj0JHHT0qSSvdJUTOXdqQHmP+EHQhrsdVeqQX3nQRKYVrhoce\nJ9WYnYHetbsrTSnJFHSwo0cOi7p4Aj94K69JHbWShPdeTxq6VyIl9f65JabPG154yQjmx/NtsHZS\nzw2WmPebpCCn4Bbm2zeOJeIE5HOZcDA/CWZeIyKKB3H+wNXjAePswM3gjOHZ5+dEnY95Do6zFN8P\nnpDPPRhgJjVXel8yLgjyOXjuc/OSaJSYCTOl5EupdhVjXCjId5o/hHOdADvHiRr8+CdSOAvKJ2V6\ns9kqxnIihjONaFBuz1wYz/oEO/shIor3NOfKCd9aZ79TO/t/R0R/pJQKEtEsEf1X1JQKvqmU+jwR\nzRPRr91hXxYWFvcBd7TZtdZvEtGZm1T93E3+ZmFh8R5ERz3ofCpIkWDTnDAwJE1j21uwwaR6ZBBB\n+gDMbc4aRLFyTQaxzDAvpSvXpJg2Pg4zRngCYl84LAkTvFWIc9msHEcjA7POIEuRFPBJb6nJMOMR\nM5JqXr50rl3Ou1Is3llkJrxViGyeXz6mgQGMcXVdioulEhe7Ua42+kU7XwBmtJ0N2b9i16szU5Mp\nIivW/8Ca7EMzXrtECoQgPqOP2Xn03yDpKRiPYr7rMZBj+NYNs+0IPO821tdFHSlcz2OZVet1aS4d\nZLbCQMwIYomiT70oz6EDTFVa0xCtq2vSw60ex/ViW1LtW2LBXdM+qIe/GvikaHfVD1UsbJiWK/tN\n9Vgb88thfeMtLLoEdrNbWHQJ7Ga3sOgSdFRnDwZ9NDnZVGJdLX9nRkehd/VkZHSVV4eJ57XdV9vl\n/LIkW5ycnER/49LV0M+IHz2Wsy2VknnaGgXoPLW6dAJaZvpQXEF3y/YZZIsZmMaWDeLLcgnnCoGA\nJIMYOA0nxMpZkEEUeqR+ebWIg4BARdrN/AGYzcaGMI+z8/JeiiVGLmGcHdR68XmcRbNtbclrBZgp\nslaVZsS9BkxSjz0+ifFtSZ33tXP/T7vsC8jl+BBzP12vQE9fX5SmSN8q9GOf8fryM9ubx0xv8YA8\n66hH4YK8uiijHROJY+1y3yljjNkH2+XeFM6WLhnnLDqEa2+G5XNv5LG+wxE823xMmkt7PKyrrW0j\nH0GqaXJ9p7e3fbNbWHQJ7Ga3sOgSKO5Nds8vptQmNR1w+oho6zbN7zXeC2MgsuMwYcch8ZOOY0Jr\nnb1ZRUc3e/uiSp3VWt/MSaerxmDHYcfRyXFYMd7CoktgN7uFRZfgfm32p+7TdTneC2MgsuMwYcch\ncdfGcV90dgsLi87DivEWFl2Cjm52pdSnlFJXlFLTSqmOsdEqpb6mlNpQSp1nf+s4FbZSakwp9ZxS\n6qJS6oJS6gv3YyxKqbBS6hWl1Futcfyr1t8PKKVebj2fb7T4C+45lFJOi9/wmfs1DqXUnFLqbaXU\nm0qps62/3Y81cs9o2zu22ZVSDhH9X0T080R0goh+Qyl1okOX/w9E9Cnjb/eDCrtBRP9Ua32CiB4n\not9pzUGnx1Iloo9prR8iotNE9Cml1ONE9PtE9Ada60NEtEtEn7/H47iBL1CTnvwG7tc4Pqq1Ps1M\nXfdjjdw72natdUf+EdEHiOi77POXiejLHbz+JBGdZ5+vENFQqzxERFc6NRY2hm8R0Sfu51iIKEpE\nrxPR+6npvOG/2fO6h9cfbS3gjxHRM9TM+Hk/xjFHRH3G3zr6XIgoRUTXqXWWdrfH0UkxfoSIeIrN\npdbf7hfuKxW2UmqSiB4mopfvx1haovOb1CQK/R4RzRDRntZtJoVOPZ9/Q0T/nEAC13ufxqGJ6G+U\nUq8ppZ5s/a3Tz+We0rbbAzp6ZyrsewGlVJyI/pyI/onWWiSs69RYtNau1vo0Nd+sjxHRsdt85a5D\nKfWLRLShtX6t09e+CT6stX6Emmrm7yilfpZXdui5vCva9tuhk5t9mYh45r7R1t/uF+6ICvtuQykV\noOZG/yOt9V/cz7EQEWmt94joOWqKy2ml1I3YzE48nw8R0S8ppeaI6E+oKcp/5T6Mg7TWy63/N4jo\nL6n5A9jp5/KuaNtvh05u9leJ6HDrpDVIRL9ORE938PomnqYmBTbRHVJhv1sopRQRfZWILmmt//X9\nGotSKquUSrfKEWqeG1yi5qb/1U6NQ2v9Za31qNZ6kprr4W+11v+w0+NQSsWUUokbZSL6JBGdpw4/\nF631GhEtKqWOtv50g7b97ozjXh98GAcNnyaiq9TUD//nDl73j4lolYjq1Pz1/Dw1dcNniegaEX2f\niDIdGMeHqSmCnSOiN1v/Pt3psRDRg0T0Rmsc54noX7b+PkVErxDRNBH9KRGFOviMniCiZ+7HOFrX\ne6v178KNtXmf1shpIjrbejZ/RUQ9d2sc1oPOwqJLYA/oLCy6BHazW1h0Cexmt7DoEtjNbmHRJbCb\n3cKiS2A3u4VFl8BudguLLoHd7BYWXYL/Dx2fMZ8yWalxAAAAAElFTkSuQmCC\n", "text/plain": [ "
" ] }, "metadata": { "tags": [] } } ] }, { "cell_type": "code", "metadata": { "id": "btWSyVjf8ZaS", "colab_type": "code", "outputId": "14d8f632-9247-4591-d888-9b0d12999174", "colab": { "base_uri": "https://localhost:8080/", "height": 102 } }, "source": [ "for xb, yb in test_dataset.batch(1):\n", " print(yb)\n", " print(net.predict(x_test_adv))\n", " print(tf.argmax(net.predict(x_test_adv), axis=1))\n", " break" ], "execution_count": 33, "outputs": [ { "output_type": "stream", "text": [ "tf.Tensor([[0. 0. 0. 0. 1. 0. 0. 0. 0. 0.]], shape=(1, 10), dtype=float32)\n", "[[1.03961595e-16 3.49431994e-17 6.08167786e-04 3.34765464e-05\n", " 1.65585720e-03 2.46636080e-11 3.20278275e-07 9.97701585e-01\n", " 6.17172361e-07 1.06402567e-17]]\n", "tf.Tensor([7], shape=(1,), dtype=int64)\n" ], "name": "stdout" } ] }, { "cell_type": "code", "metadata": { "id": "hmneTfNuScog", "colab_type": "code", "colab": {} }, "source": [ "# Check out the other examples!\n", "# https://github.com/IBM/adversarial-robustness-toolbox/blob/master/examples/README.md" ], "execution_count": 0, "outputs": [] }, { "cell_type": "markdown", "metadata": { "id": "O_vJ03A9Zvmt", "colab_type": "text" }, "source": [ "### Interpreting the model while training" ] }, { "cell_type": "code", "metadata": { "id": "5UW6fawNjJuS", "colab_type": "code", "outputId": "4eb8737c-e761-4551-d1cd-3770ee694396", "colab": { "base_uri": "https://localhost:8080/", "height": 119 } }, "source": [ "# We use the tf-explain library\n", "!pip install tf-explain" ], "execution_count": 43, "outputs": [ { "output_type": "stream", "text": [ "Collecting tf-explain\n", " Downloading https://files.pythonhosted.org/packages/1e/1e/556ec1e91b100de61941a7c91589ce29be1afdc53d52658d2045ba84a7ab/tf_explain-0.1.0-py3-none-any.whl\n", "Requirement already satisfied: opencv-python>=4.1.0.25 in /usr/local/lib/python3.6/dist-packages (from tf-explain) (4.1.2.30)\n", "Requirement already satisfied: numpy>=1.11.3 in /usr/local/lib/python3.6/dist-packages (from opencv-python>=4.1.0.25->tf-explain) (1.17.4)\n", "Installing collected packages: tf-explain\n", "Successfully installed tf-explain-0.1.0\n" ], "name": "stdout" } ] }, { "cell_type": "code", "metadata": { "id": "TB0YC28ijMzH", "colab_type": "code", "colab": {} }, "source": [ "from tf_explain import callbacks" ], "execution_count": 0, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "3GF7e4_BjyrD", "colab_type": "code", "colab": {} }, "source": [ "# Get a small batch of images for the visualizations during training\n", "Xval, yval = next(iter(test_dataset.batch(2)))" ], "execution_count": 0, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "4KJ55b6nj9Ti", "colab_type": "code", "colab": {} }, "source": [ "Xval, yval = Xval.numpy(), yval.numpy()" ], "execution_count": 0, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "kneXfoWQmIj8", "colab_type": "code", "outputId": "f490eb90-e723-44b4-dddb-2752a4677713", "colab": { "base_uri": "https://localhost:8080/", "height": 285 } }, "source": [ "plt.imshow(Xval[1])\n", "yval[1]" ], "execution_count": 47, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "array([0., 0., 0., 0., 0., 0., 0., 0., 1., 0.], dtype=float32)" ] }, "metadata": { "tags": [] }, "execution_count": 47 }, { "output_type": "display_data", "data": { "image/png": "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\nIXYAAAAASUVORK5CYII=\n", "text/plain": [ "
" ] }, "metadata": { "tags": [] } } ] }, { "cell_type": "code", "metadata": { "id": "enzAR84ejXXP", "colab_type": "code", "colab": {} }, "source": [ "# We add a visualization on the activations\n", "vis = callbacks.ActivationsVisualizationCallback(\n", " validation_data=(Xval[1:], yval[1:]),\n", " layers_name=[\"conv2d_3\"],\n", " output_dir='./visualizations',\n", " )" ], "execution_count": 0, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "SCgduX3UkVNI", "colab_type": "code", "colab": {} }, "source": [ "net = build_network()\n", "net.compile(loss=losses.CategoricalCrossentropy(), optimizer=optimizers.Adam(), metrics=['accuracy'])\n", "net.fit(dataset.shuffle(1000).batch(32), epochs=3, callbacks=[vis])" ], "execution_count": 0, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "wMDgreLflCJ6", "colab_type": "code", "outputId": "2afac98c-fc49-4faa-f4f9-ca4077f2b60a", "colab": { "base_uri": "https://localhost:8080/", "height": 290 } }, "source": [ "# Needed for the Tensorboard\n", "!pip install --upgrade grpcio" ], "execution_count": 0, "outputs": [ { "output_type": "stream", "text": [ "Collecting grpcio\n", "\u001b[?25l Downloading https://files.pythonhosted.org/packages/27/28/280658104af767431cf25e397157c4f4a8724a446f9dd5a34dac9812e9c9/grpcio-1.25.0-cp36-cp36m-manylinux2010_x86_64.whl (2.4MB)\n", "\u001b[K |████████████████████████████████| 2.4MB 6.7MB/s \n", "\u001b[?25hRequirement already satisfied, skipping upgrade: six>=1.5.2 in /usr/local/lib/python3.6/dist-packages (from grpcio) (1.12.0)\n", "\u001b[31mERROR: tensorflow 1.15.0 has requirement tensorboard<1.16.0,>=1.15.0, but you'll have tensorboard 2.0.1 which is incompatible.\u001b[0m\n", "\u001b[31mERROR: tensorflow 1.15.0 has requirement tensorflow-estimator==1.15.1, but you'll have tensorflow-estimator 2.0.1 which is incompatible.\u001b[0m\n", "Installing collected packages: grpcio\n", " Found existing installation: grpcio 1.15.0\n", " Uninstalling grpcio-1.15.0:\n", " Successfully uninstalled grpcio-1.15.0\n", "Successfully installed grpcio-1.25.0\n" ], "name": "stdout" }, { "output_type": "display_data", "data": { "application/vnd.colab-display-data+json": { "pip_warning": { "packages": [ "grpc" ] } } }, "metadata": { "tags": [] } } ] }, { "cell_type": "code", "metadata": { "id": "o-PR0l0JkhOo", "colab_type": "code", "colab": {} }, "source": [ "%load_ext tensorboard" ], "execution_count": 0, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "HpyHD1vOksn6", "colab_type": "code", "colab": {} }, "source": [ "# Check the visualizations!\n", "%tensorboard --logdir ./visualizations" ], "execution_count": 0, "outputs": [] }, { "cell_type": "markdown", "metadata": { "id": "YRhnxbQIaMNl", "colab_type": "text" }, "source": [ "### Explaining the predictions during inference" ] }, { "cell_type": "code", "metadata": { "id": "77oUc6umlJ6I", "colab_type": "code", "outputId": "e544d642-1b66-4179-a589-04aefb738286", "colab": { "base_uri": "https://localhost:8080/", "height": 493 } }, "source": [ "!pip install lime" ], "execution_count": 0, "outputs": [ { "output_type": "stream", "text": [ "Collecting lime\n", "\u001b[?25l Downloading https://files.pythonhosted.org/packages/e5/72/4be533df5151fcb48942515e95e88281ec439396c48d67d3ae41f27586f0/lime-0.1.1.36.tar.gz (275kB)\n", "\r\u001b[K |█▏ | 10kB 19.7MB/s eta 0:00:01\r\u001b[K |██▍ | 20kB 4.8MB/s eta 0:00:01\r\u001b[K |███▋ | 30kB 6.9MB/s eta 0:00:01\r\u001b[K |████▊ | 40kB 4.1MB/s eta 0:00:01\r\u001b[K |██████ | 51kB 4.9MB/s eta 0:00:01\r\u001b[K |███████▏ | 61kB 5.8MB/s eta 0:00:01\r\u001b[K |████████▎ | 71kB 6.6MB/s eta 0:00:01\r\u001b[K |█████████▌ | 81kB 7.3MB/s eta 0:00:01\r\u001b[K |██████████▊ | 92kB 8.0MB/s eta 0:00:01\r\u001b[K |███████████▉ | 102kB 6.6MB/s eta 0:00:01\r\u001b[K |█████████████ | 112kB 6.6MB/s eta 0:00:01\r\u001b[K |██████████████▎ | 122kB 6.6MB/s eta 0:00:01\r\u001b[K |███████████████▍ | 133kB 6.6MB/s eta 0:00:01\r\u001b[K |████████████████▋ | 143kB 6.6MB/s eta 0:00:01\r\u001b[K |█████████████████▉ | 153kB 6.6MB/s eta 0:00:01\r\u001b[K |███████████████████ | 163kB 6.6MB/s eta 0:00:01\r\u001b[K |████████████████████▏ | 174kB 6.6MB/s eta 0:00:01\r\u001b[K |█████████████████████▍ | 184kB 6.6MB/s eta 0:00:01\r\u001b[K |██████████████████████▋ | 194kB 6.6MB/s eta 0:00:01\r\u001b[K |███████████████████████▊ | 204kB 6.6MB/s eta 0:00:01\r\u001b[K |█████████████████████████ | 215kB 6.6MB/s eta 0:00:01\r\u001b[K |██████████████████████████▏ | 225kB 6.6MB/s eta 0:00:01\r\u001b[K |███████████████████████████▎ | 235kB 6.6MB/s eta 0:00:01\r\u001b[K |████████████████████████████▌ | 245kB 6.6MB/s eta 0:00:01\r\u001b[K |█████████████████████████████▊ | 256kB 6.6MB/s eta 0:00:01\r\u001b[K |██████████████████████████████▉ | 266kB 6.6MB/s eta 0:00:01\r\u001b[K |████████████████████████████████| 276kB 6.6MB/s \n", "\u001b[?25hRequirement already satisfied: numpy in /usr/local/lib/python3.6/dist-packages (from lime) (1.17.3)\n", "Requirement already satisfied: scipy in /usr/local/lib/python3.6/dist-packages (from lime) (1.3.1)\n", "Requirement already satisfied: scikit-learn>=0.18 in /usr/local/lib/python3.6/dist-packages (from lime) (0.21.3)\n", "Requirement already satisfied: matplotlib in /usr/local/lib/python3.6/dist-packages (from lime) (3.1.1)\n", "Requirement already satisfied: scikit-image>=0.12 in /usr/local/lib/python3.6/dist-packages (from lime) (0.15.0)\n", "Requirement already satisfied: joblib>=0.11 in /usr/local/lib/python3.6/dist-packages (from scikit-learn>=0.18->lime) (0.14.0)\n", "Requirement already satisfied: pyparsing!=2.0.4,!=2.1.2,!=2.1.6,>=2.0.1 in /usr/local/lib/python3.6/dist-packages (from matplotlib->lime) (2.4.2)\n", "Requirement already satisfied: cycler>=0.10 in /usr/local/lib/python3.6/dist-packages (from matplotlib->lime) (0.10.0)\n", "Requirement already satisfied: python-dateutil>=2.1 in /usr/local/lib/python3.6/dist-packages (from matplotlib->lime) (2.6.1)\n", "Requirement already satisfied: kiwisolver>=1.0.1 in /usr/local/lib/python3.6/dist-packages (from matplotlib->lime) (1.1.0)\n", "Requirement already satisfied: networkx>=2.0 in /usr/local/lib/python3.6/dist-packages (from scikit-image>=0.12->lime) (2.4)\n", "Requirement already satisfied: imageio>=2.0.1 in /usr/local/lib/python3.6/dist-packages (from scikit-image>=0.12->lime) (2.4.1)\n", "Requirement already satisfied: PyWavelets>=0.4.0 in /usr/local/lib/python3.6/dist-packages (from scikit-image>=0.12->lime) (1.1.1)\n", "Requirement already satisfied: pillow>=4.3.0 in /usr/local/lib/python3.6/dist-packages (from scikit-image>=0.12->lime) (4.3.0)\n", "Requirement already satisfied: six in /usr/local/lib/python3.6/dist-packages (from cycler>=0.10->matplotlib->lime) (1.12.0)\n", "Requirement already satisfied: setuptools in /usr/local/lib/python3.6/dist-packages (from kiwisolver>=1.0.1->matplotlib->lime) (41.4.0)\n", "Requirement already satisfied: decorator>=4.3.0 in /usr/local/lib/python3.6/dist-packages (from networkx>=2.0->scikit-image>=0.12->lime) (4.4.1)\n", "Requirement already satisfied: olefile in /usr/local/lib/python3.6/dist-packages (from pillow>=4.3.0->scikit-image>=0.12->lime) (0.46)\n", "Building wheels for collected packages: lime\n", " Building wheel for lime (setup.py) ... \u001b[?25l\u001b[?25hdone\n", " Created wheel for lime: filename=lime-0.1.1.36-cp36-none-any.whl size=284191 sha256=29b4c045f6c4f542a3538d8d6c2a8ad1ca282029837b9fa5ca42ccebe854f26c\n", " Stored in directory: /root/.cache/pip/wheels/a9/2f/25/4b2127822af5761dab9a27be52e175105772aebbcbc484fb95\n", "Successfully built lime\n", "Installing collected packages: lime\n", "Successfully installed lime-0.1.1.36\n" ], "name": "stdout" } ] }, { "cell_type": "code", "metadata": { "id": "J0eOcMANobjE", "colab_type": "code", "colab": {} }, "source": [ "# Check out the documentation!\n", "# https://github.com/marcotcr/lime" ], "execution_count": 0, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "e-1BEL9En85i", "colab_type": "code", "colab": {} }, "source": [ "from lime import lime_image" ], "execution_count": 0, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "sm8Cny6zoHrJ", "colab_type": "code", "colab": {} }, "source": [ "explainer = lime_image.LimeImageExplainer()" ], "execution_count": 0, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "9mvvm6BaoIXh", "colab_type": "code", "colab": {} }, "source": [ "explanation = explainer.explain_instance(Xval[1], net.predict, hide_color=0, num_samples=1000)" ], "execution_count": 0, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "TXWT4ualoRIR", "colab_type": "code", "colab": {} }, "source": [ "from skimage.segmentation import mark_boundaries" ], "execution_count": 0, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "UVRiYd78oYt5", "colab_type": "code", "outputId": "d6975e04-14c1-44e6-e025-abba68fd30e7", "colab": { "base_uri": "https://localhost:8080/", "height": 285 } }, "source": [ "temp, mask = explanation.get_image_and_mask(explanation.top_labels[0], positive_only=False, num_features=3, min_weight=0.1)\n", "plt.imshow(mark_boundaries(temp / 2 + 0.5, mask))" ], "execution_count": 0, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "" ] }, "metadata": { "tags": [] }, "execution_count": 51 }, { "output_type": "display_data", "data": { "image/png": "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\n/GsX/IPoeZ+86XPD8kwiUuTwbXqn/qrLf2tY/vytZd3eHdtUu53zpVoz29Aqz8DTURJyvH/ZHY6a\nwBe7w1ET+GJ3OGqCCevsQlFU1pOKSf3s36CybiXi3dU/TqXwyY02W3vapTSZY3xPwJrDYn5zKd07\nBdZtm6YPJi9sQSuYHUX+WfYxa9rxc6oSd472UrTeb5r8QWORorx4/rMmHTLv3Vjz3Sydx3r6nxu9\nnHXd4yc1GWWH+vjq176m6hZOEvHEfDmPpbYm4uDvaqul9yZuvvP2YXlujq6zpd/v2WaD6vSzCN1u\nMYrzxjsctYcvdoejJpiwB51URMEBtIeUFm9XIiaYKrlEKkBk7aQO1baxPixy0ymlkA6FGSBFKNEl\nMdjed84+utMwl52iLKMnqWzHYi+5RUMaoWcf5zJPmRj5rHkS3a2XXCzYBQDehbePHPfEgg637nTK\n+7bc0e/VydOlSL51i1YhztpZ8ut1e8Qhv6D7OL1cPouuieNp8ONtlNe2tKxVgS3UcMbMo9kszkvY\n3vzL7nDUBL7YHY6awBe7w1ETTFxnL4kg41FYllAwRPW63Pg1XTtehrV4bZoOMl5bjYjLn8kA1p2V\nj5vUxzbzqPdhD42k5/EMnqH+St1zpWI2Y7faOOGkdYxmaLINDd5XmGPTVaVleW3VXAIlbvliaeLa\nMquvZWmpjL5rr+i6rfPzVKf55mea5dX940suHpYfe/TvVLsjD5XEzD1zR1Y6NHaXo/R0uxcWy72J\nEPT9np/t78mk3hr/sjscNYEvdoejJpioGB8QKP1TXIxPsbWnRF0tVqbnsZlIR6ylOOtHt6uqNeWx\nFWkbdOU7KMprh0m71FRmMyOaqrTYbPbU82irCDs7j9GmVMv1z5g1dXP0em6nOV2WSfAAALfddWfZ\n/2zZ3+klnT6pRw+jZbzT5rdtH5Y7bXsendgj70sj7u/aWkbmtc3LeeJk2ZYF93bPqGgqrNNE94VB\nm/ib7192h6Mm8MXucNQEEyevsIQTOdCiMO+qx4kbVqOGGN23Pi8VMBOf3/iIB9p0o+0sJfJOEt13\noRQ/j+OEaregUiHFA1x2UB/2Ok+Qd519Fprjjjno9LUwffScoZJmCwKL7g/+bx3EEiiw5Ec/+Ymq\nm6HgkZOnyvn2guE5nGVuQy0KL5wq75009HmnT5f38a67vzQsW0+7JqkGVsSfaVBAEekTIeh5rJDo\n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\n", "text/plain": [ "
" ] }, "metadata": { "tags": [] } } ] } ] }