From a2204fd7625bff9a9b8078a7afc7d044365dc1b0 Mon Sep 17 00:00:00 2001 From: cgoveas Date: Thu, 28 Sep 2023 12:41:40 +0530 Subject: [PATCH 01/24] Updating freeipa information Signed-off-by: cgoveas --- .../InstallationGuides/BuildingClusters/Authentication.rst | 2 +- .../InstallingProvisionTool/installprovisiontool.rst | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/source/InstallationGuides/BuildingClusters/Authentication.rst b/docs/source/InstallationGuides/BuildingClusters/Authentication.rst index 4f0b93b12..b47374f56 100644 --- a/docs/source/InstallationGuides/BuildingClusters/Authentication.rst +++ b/docs/source/InstallationGuides/BuildingClusters/Authentication.rst @@ -80,7 +80,7 @@ The ``omnia.yml`` playbook installs Slurm, BeeFGS Client, NFS Client in addition kinit admin (When prompted, provide kerberos_admin_password as entered in security_config.yml) ipa user-add --homedir= --password - For example: ``ipa user-add FirstName_LastName --first=FirstName --last=LastName --password --homedir=/home/omnia-share/FirstName_LastName`` + For example: ``ipa user-add FirstName_LastName --first=FirstName --last=LastName --password --homedir=/home/omnia-share/FirstName_LastName --shell /bin/bash`` After the new user account logs in for the first time, you will be prompted to change the password to the account. diff --git a/docs/source/InstallationGuides/InstallingProvisionTool/installprovisiontool.rst b/docs/source/InstallationGuides/InstallingProvisionTool/installprovisiontool.rst index 286a5f1eb..b299dc11b 100644 --- a/docs/source/InstallationGuides/InstallingProvisionTool/installprovisiontool.rst +++ b/docs/source/InstallationGuides/InstallingProvisionTool/installprovisiontool.rst @@ -167,6 +167,6 @@ After successfully running ``provision.yml``, go to `Building Clusters <../Build ssh-keygen -R - * If a second run of ``provision.yml`` fails, the ``input/provision_config.yml`` file will be unencrypted. + * If a subsequent run of ``provision.yml`` fails, the ``input/provision_config.yml`` file will be unencrypted. To create a node inventory in ``/opt/omnia``, `click here <../PostProvisionScript.html>`_. From de9f09a502108112bc66e9c3176711424bbddd8b Mon Sep 17 00:00:00 2001 From: cgoveas Date: Thu, 28 Sep 2023 17:50:40 +0530 Subject: [PATCH 02/24] Updating telemetry information Signed-off-by: cgoveas --- .../Benchmarks/OpenMPI_AOCC.rst | 30 ++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/docs/source/InstallationGuides/Benchmarks/OpenMPI_AOCC.rst b/docs/source/InstallationGuides/Benchmarks/OpenMPI_AOCC.rst index 453ae7ecc..bde992909 100644 --- a/docs/source/InstallationGuides/Benchmarks/OpenMPI_AOCC.rst +++ b/docs/source/InstallationGuides/Benchmarks/OpenMPI_AOCC.rst @@ -101,6 +101,34 @@ For a batch job using the same parameters, the script would be: :: srun --mpi=pmix_v2 ./amd-zen-hpl-2023_07_18/xhpl -.. note:: If mpirun is used to initiate jobs, a host list is required as illustrated: ``mpirun -np 2 -host 10.5.0.4,10.5.0.5 ./amd-zen-hpl-2023_07_18/xhpl`` +Alternatively, to use ``mpirun``, the script would be: :: + #!/bin/bash + + #SBATCH --job-name=test + + #SBATCH --output=test.log + + #SBATCH --partition=normal + + #SBATCH -N 3 + + #SBATCH --time=10:00 + + #SBATCH --ntasks=2 + + + + + source /home/omnia-share/setenv_AOCC.sh + + export PATH=$PATH:/home/omnia-share/openmpi/bin + + export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/omnia-share/openmpi/lib + + /home/omnia-share/openmpi/bin/mpirun --map-by ppr:1:node -np 2 --display-map --oversubscribe --mca orte_keep_fqdn_hostnames 1 ./xhpl + + + +.. note:: The above scripts are samples that can be modified as required. Ensure that ``--mca orte_keep_fqdn_hostnames 1`` is included in the mpirun command in sbatch scripts. Omnia maintains all hostnames in FQDN format. Failing to include ``--mca orte_keep_fqdn_hostnames 1`` may cause job initiation to fail. From e1299019860248071f4d8c26d38089426b98dece Mon Sep 17 00:00:00 2001 From: cgoveas Date: Fri, 29 Sep 2023 00:23:20 +0530 Subject: [PATCH 03/24] Updating telemetry information Signed-off-by: cgoveas --- docs/source/_static/sphinx-argparse.css | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docs/source/_static/sphinx-argparse.css b/docs/source/_static/sphinx-argparse.css index 2ff6186a0..06e589c7f 100644 --- a/docs/source/_static/sphinx-argparse.css +++ b/docs/source/_static/sphinx-argparse.css @@ -8,4 +8,7 @@ } .wy-table-responsive { overflow: visible !important; +} +.wy-nav-content { + max-width: none; } \ No newline at end of file From 64e6b2195d6c12a17f0878c0dbf5dfc231476491 Mon Sep 17 00:00:00 2001 From: cgoveas Date: Fri, 29 Sep 2023 09:33:32 +0530 Subject: [PATCH 04/24] Updating security information Signed-off-by: cgoveas --- .../ProductSubsystemSecurity.rst | 7 +- docs/source/_static/sphinx-argparse.css | 2 + .../beegfs/tasks/fetch_beegfs_inputs.yml | 117 ++++++++++++++++++ 3 files changed, 125 insertions(+), 1 deletion(-) create mode 100644 storage/roles/beegfs/tasks/fetch_beegfs_inputs.yml diff --git a/docs/source/SecurityConfigGuide/ProductSubsystemSecurity.rst b/docs/source/SecurityConfigGuide/ProductSubsystemSecurity.rst index f0a035bbe..9d51fc96f 100644 --- a/docs/source/SecurityConfigGuide/ProductSubsystemSecurity.rst +++ b/docs/source/SecurityConfigGuide/ProductSubsystemSecurity.rst @@ -383,4 +383,9 @@ The format is described in the following table. | | |"lookup_plugin.lines} | +----------------------------------+----------------------------------+------------------------------------------+ | Warning | [WARNING]: warning message | [WARNING]: provided hosts list is empty | -+----------------------------------+----------------------------------+------------------------------------------+ \ No newline at end of file ++----------------------------------+----------------------------------+------------------------------------------+ + +Network vulnerability scanning +------------------------------ + +Omnia performs network security scans on all modules of the product. However, Omnia is not responsible for the third-party software installed using Omnia. Review all third party software before using Omnia to install it. \ No newline at end of file diff --git a/docs/source/_static/sphinx-argparse.css b/docs/source/_static/sphinx-argparse.css index 06e589c7f..6d7e2d446 100644 --- a/docs/source/_static/sphinx-argparse.css +++ b/docs/source/_static/sphinx-argparse.css @@ -7,7 +7,9 @@ color: white; } .wy-table-responsive { + display: block; overflow: visible !important; + max-width: 800px; } .wy-nav-content { max-width: none; diff --git a/storage/roles/beegfs/tasks/fetch_beegfs_inputs.yml b/storage/roles/beegfs/tasks/fetch_beegfs_inputs.yml new file mode 100644 index 000000000..6f1142a46 --- /dev/null +++ b/storage/roles/beegfs/tasks/fetch_beegfs_inputs.yml @@ -0,0 +1,117 @@ +# Copyright 2022 Dell Inc. or its subsidiaries. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +--- + +- name: Initialize beegfs_connauth_status + ansible.builtin.set_fact: + beegfs_connauth_status: false + +- name: Assert beegfs_rdma_support + ansible.builtin.assert: + that: + - beegfs_rdma_support == true or beegfs_rdma_support == false + success_msg: "{{ beegfs_rdma_support_success_msg }}" + fail_msg: "{{ beegfs_rdma_support_failure_msg }}" + +- name: Assert beegfs_mgmt_server + ansible.builtin.assert: + that: + - beegfs_mgmt_server | length > 1 + success_msg: "{{ beegfs_mgmt_server_success_msg }}" + fail_msg: "{{ beegfs_mgmt_server_fail_msg }}" + +- name: Validate beegfs_mgmt_server inputs + when: beegfs_mgmt_server | length > 1 + block: + - name: Test reachability of beegfs_mgmt_server + ansible.builtin.command: ping -c3 {{ beegfs_mgmt_server }} + changed_when: false + failed_when: false + register: beegfs_mgmt_server_reachablility + + - name: Verify beegfs_mgmt_server reachable or not + ansible.builtin.fail: + msg: "{{ beegfs_mgmt_server_not_reachable_msg }}" + when: ping_msg in beegfs_mgmt_server_reachablility.stdout + +- name: Verify beegfs_mounts is not empty + ansible.builtin.fail: + msg: " {{ beegfs_mounts_fail_msg }}" + when: beegfs_mounts | length < 1 + +- name: Assert beegfs_unmount_client + ansible.builtin.assert: + that: + - beegfs_unmount_client == true or beegfs_unmount_client == false + success_msg: "{{ beegfs_unmount_client_success_msg }}" + fail_msg: "{{ beegfs_unmount_client_failure_msg }}" + +- name: Validate beegfs_client_version + ansible.builtin.assert: + that: + - beegfs_client_version >= '7.2' + success_msg: "{{ beegfs_client_version_success_msg }}" + fail_msg: "{{ beegfs_client_version_fail_msg }}" + +- name: Validate BeeGFS version + block: + - name: Validating beegfs_client version + ansible.builtin.uri: + url: "{{ beegfs_non_leap_repo }}" + return_content: true + rescue: + - name: BeeGFS version reachability status + ansible.builtin.fail: + msg: "{{ beegfs_repo_status_msg }}" + +- name: Validate shared secret file for beegfs version >= 7.2.7 + when: beegfs_client_version >= '7.2.7' + block: + - name: Validate the shared secret file + ansible.builtin.stat: + path: "{{ beegfs_secret_storage_filepath }}" + register: file_result + + - name: Validate the shared secret file existence + ansible.builtin.pause: + seconds: "{{ warning_wait_time }}" + prompt: "{{ beegfs_shared_secret_failure_msg }}" + when: not file_result.stat.exists + + - name: Set beegfs_connauth_status + ansible.builtin.set_fact: + beegfs_connauth_status: true + when: file_result.stat.exists + +- name: Assert beegfs_version_change + ansible.builtin.assert: + that: + - beegfs_version_change == true or beegfs_version_change == false + success_msg: "{{ beegfs_version_change_success_msg }}" + fail_msg: "{{ beegfs_version_change_failure_msg }}" + +- name: Assert beegfs_unmount_client when beegfs_version_change + ansible.builtin.assert: + that: + - beegfs_unmount_client == true + success_msg: "{{ unmount_success_msg }}" + fail_msg: "{{ unmount_failure_msg }}" + when: beegfs_version_change + +- name: Check for compatability of BeeGFs version + ansible.builtin.fail: + msg: "{{ compatability_msg }}" + when: + - beegfs_client_version == latest_version + - beegfs_version_change From ae09c0f9c2c0e03efdbe0bda240d5708ba707b4f Mon Sep 17 00:00:00 2001 From: cgoveas Date: Fri, 29 Sep 2023 11:03:44 +0530 Subject: [PATCH 05/24] Updating formatting Signed-off-by: cgoveas --- docs/source/_static/sphinx-argparse.css | 2 +- .../beegfs/tasks/validate_beegfs_vars.yml | 28 +++++++ .../nfs/tasks/fetch_nfs_client_params.yml | 81 +++++++++++++++++++ storage/roles/nfs/tasks/validate_nfs_vars.yml | 25 ++++++ 4 files changed, 135 insertions(+), 1 deletion(-) create mode 100644 storage/roles/beegfs/tasks/validate_beegfs_vars.yml create mode 100644 storage/roles/nfs/tasks/fetch_nfs_client_params.yml create mode 100644 storage/roles/nfs/tasks/validate_nfs_vars.yml diff --git a/docs/source/_static/sphinx-argparse.css b/docs/source/_static/sphinx-argparse.css index 6d7e2d446..b30c88fb5 100644 --- a/docs/source/_static/sphinx-argparse.css +++ b/docs/source/_static/sphinx-argparse.css @@ -12,5 +12,5 @@ max-width: 800px; } .wy-nav-content { - max-width: none; + max-width: 1600px; } \ No newline at end of file diff --git a/storage/roles/beegfs/tasks/validate_beegfs_vars.yml b/storage/roles/beegfs/tasks/validate_beegfs_vars.yml new file mode 100644 index 000000000..f45356324 --- /dev/null +++ b/storage/roles/beegfs/tasks/validate_beegfs_vars.yml @@ -0,0 +1,28 @@ +# Copyright 2022 Dell Inc. or its subsidiaries. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +--- + +- name: Include storage_config.yml + ansible.builtin.include_vars: "{{ storage_config_vars }}" + +- name: Assert beegfs_support + ansible.builtin.assert: + that: + - beegfs_support == true or beegfs_support == false + success_msg: "{{ beegfs_support_success_msg }}" + fail_msg: "{{ beegfs_support_failure_msg }}" + +- name: Fetch beegfs inputs + ansible.builtin.include_tasks: fetch_beegfs_inputs.yml + when: beegfs_support diff --git a/storage/roles/nfs/tasks/fetch_nfs_client_params.yml b/storage/roles/nfs/tasks/fetch_nfs_client_params.yml new file mode 100644 index 000000000..b8d06ea75 --- /dev/null +++ b/storage/roles/nfs/tasks/fetch_nfs_client_params.yml @@ -0,0 +1,81 @@ +# Copyright 2022 Dell Inc. or its subsidiaries. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +--- + +- name: Verify server_ip variable declaration + ansible.builtin.assert: + that: + - item.server_ip is defined + success_msg: "{{ server_ip_success_msg }}" + fail_msg: "{{ server_ip_fail_msg }}" + +- name: Verify server_share_path variable declaration + ansible.builtin.assert: + that: + - item.server_share_path is defined + success_msg: "{{ server_share_path_success_msg }}" + fail_msg: "{{ server_share_path_fail_msg }}" + +- name: Verify client_share_path variable declaration + ansible.builtin.assert: + that: + - item.client_share_path is defined + success_msg: "{{ client_share_path_success_msg }}" + fail_msg: "{{ client_share_path_fail_msg }}" + +- name: Verify client_mount_options variable declaration + ansible.builtin.assert: + that: + - item.client_mount_options is defined + success_msg: "{{ client_mount_options_success_msg }}" + fail_msg: "{{ client_mount_options_fail_msg }}" + +- name: Updating nfs_client_support value + ansible.builtin.set_fact: + nfs_client_support: true + when: + - item.server_ip | default("", true) | length > 1 or + item.server_share_path | default("", true) | length > 1 or + item.client_share_path | default("", true) | length > 1 or + item.client_mount_options | default("", true) | length > 1 + +- name: Initialize variables + ansible.builtin.set_fact: + nfs_client_declaration: false + +- name: Check for variable declaration and update status + block: + - name: Updating nfs_client_declaration value when values are declared correctly + ansible.builtin.set_fact: + nfs_client_declaration: true + when: + - item.server_ip | default("", true) | length > 1 + - item.server_share_path | default("", true) | length > 1 + + - name: Status of nfs_client_params + ansible.builtin.fail: + msg: "{{ nfs_client_declaration_msg }}" + when: not nfs_client_declaration + when: nfs_client_support + +- name: Test reachablility of NFS server + ansible.builtin.command: ping -c3 {{ item.server_ip }} + changed_when: false + failed_when: false + register: nfs_server_reachability + +- name: Verify NFS server reachability + ansible.builtin.fail: + msg: "{{ nfs_server_reach_msg }}" + when: ping_msg in nfs_server_reachability.stdout diff --git a/storage/roles/nfs/tasks/validate_nfs_vars.yml b/storage/roles/nfs/tasks/validate_nfs_vars.yml new file mode 100644 index 000000000..771f628c5 --- /dev/null +++ b/storage/roles/nfs/tasks/validate_nfs_vars.yml @@ -0,0 +1,25 @@ +# Copyright 2022 Dell Inc. or its subsidiaries. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +--- + +- name: Include storage_config.yml + ansible.builtin.include_vars: "{{ storage_config_vars }}" + +- name: Initializing variables for NFS bolt on support + ansible.builtin.set_fact: + nfs_client_support: false + +- name: Include fetch_nfs_client_params.yml + ansible.builtin.include_tasks: fetch_nfs_client_params.yml + with_items: "{{ nfs_client_params }}" From a0b390b5732690e470c7e2b09155e683e7555d41 Mon Sep 17 00:00:00 2001 From: cgoveas Date: Fri, 29 Sep 2023 11:20:51 +0530 Subject: [PATCH 06/24] Updating formatting Signed-off-by: cgoveas --- docs/source/_static/sphinx-argparse.css | 2 +- docs/source/_static/theme.css | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/source/_static/sphinx-argparse.css b/docs/source/_static/sphinx-argparse.css index b30c88fb5..e378f804f 100644 --- a/docs/source/_static/sphinx-argparse.css +++ b/docs/source/_static/sphinx-argparse.css @@ -12,5 +12,5 @@ max-width: 800px; } .wy-nav-content { - max-width: 1600px; + max-width: 900px; } \ No newline at end of file diff --git a/docs/source/_static/theme.css b/docs/source/_static/theme.css index 14beb9a55..4bb24bcb5 100644 --- a/docs/source/_static/theme.css +++ b/docs/source/_static/theme.css @@ -67,6 +67,7 @@ /* Main content ==================================================== */ + .wy-nav-content .highlight, .wy-nav-content .rst-content .warning { background: rgba(238, 238, 238, 0.78); From 67e78ffff2e278a200975c17e5fe3c8830330262 Mon Sep 17 00:00:00 2001 From: cgoveas Date: Fri, 29 Sep 2023 11:45:33 +0530 Subject: [PATCH 07/24] Updating formatting Signed-off-by: cgoveas --- docs/source/_static/sphinx-argparse.css | 2 +- docs/source/_static/theme.css | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/docs/source/_static/sphinx-argparse.css b/docs/source/_static/sphinx-argparse.css index e378f804f..6d7e2d446 100644 --- a/docs/source/_static/sphinx-argparse.css +++ b/docs/source/_static/sphinx-argparse.css @@ -12,5 +12,5 @@ max-width: 800px; } .wy-nav-content { - max-width: 900px; + max-width: none; } \ No newline at end of file diff --git a/docs/source/_static/theme.css b/docs/source/_static/theme.css index 4bb24bcb5..14beb9a55 100644 --- a/docs/source/_static/theme.css +++ b/docs/source/_static/theme.css @@ -67,7 +67,6 @@ /* Main content ==================================================== */ - .wy-nav-content .highlight, .wy-nav-content .rst-content .warning { background: rgba(238, 238, 238, 0.78); From 84fcfe9ce7050021a2175e477957a3b53788e951 Mon Sep 17 00:00:00 2001 From: cgoveas Date: Fri, 29 Sep 2023 13:40:44 +0530 Subject: [PATCH 08/24] Updating formatting Signed-off-by: cgoveas --- docs/source/_static/sphinx-argparse.css | 7 +++---- docs/source/_static/theme.css | 3 +++ 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/docs/source/_static/sphinx-argparse.css b/docs/source/_static/sphinx-argparse.css index 6d7e2d446..c0e04ee40 100644 --- a/docs/source/_static/sphinx-argparse.css +++ b/docs/source/_static/sphinx-argparse.css @@ -1,6 +1,6 @@ .wy-table-responsive table td { white-space: normal !important; - word-wrap: break-word; !important; + word-break: break-all; !important; } .wy-table-responsive table th { background-color: #2980b9; @@ -8,9 +8,8 @@ } .wy-table-responsive { display: block; + width: fit-content; + block-size: fit-content; overflow: visible !important; max-width: 800px; } -.wy-nav-content { - max-width: none; -} \ No newline at end of file diff --git a/docs/source/_static/theme.css b/docs/source/_static/theme.css index 14beb9a55..2eefb7468 100644 --- a/docs/source/_static/theme.css +++ b/docs/source/_static/theme.css @@ -1,6 +1,9 @@ .wy-side-nav-search { background-color: #2980B9; } +.wy-nav-content { + background-color: #ffffff; +} .wy-side-nav-search img { display: block; margin: auto auto .809em; From 7c2d2a6f3c50de903fb7df60d04bb5e6440f251b Mon Sep 17 00:00:00 2001 From: cgoveas Date: Fri, 29 Sep 2023 13:47:44 +0530 Subject: [PATCH 09/24] Updating formatting Signed-off-by: cgoveas --- docs/source/SecurityConfigGuide/ProductSubsystemSecurity.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/SecurityConfigGuide/ProductSubsystemSecurity.rst b/docs/source/SecurityConfigGuide/ProductSubsystemSecurity.rst index 9d51fc96f..93d9c06bf 100644 --- a/docs/source/SecurityConfigGuide/ProductSubsystemSecurity.rst +++ b/docs/source/SecurityConfigGuide/ProductSubsystemSecurity.rst @@ -388,4 +388,4 @@ The format is described in the following table. Network vulnerability scanning ------------------------------ -Omnia performs network security scans on all modules of the product. However, Omnia is not responsible for the third-party software installed using Omnia. Review all third party software before using Omnia to install it. \ No newline at end of file +Omnia performs network security scans on all modules of the product. Omnia additionally performs Blackduck scans on all open source software installed by Omnia at runtime. \ No newline at end of file From e2292f7dd0eaa89185aac2b1620af726ea38bf77 Mon Sep 17 00:00:00 2001 From: cgoveas Date: Fri, 29 Sep 2023 13:50:53 +0530 Subject: [PATCH 10/24] Updating formatting Signed-off-by: cgoveas --- docs/source/_static/sphinx-argparse.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/_static/sphinx-argparse.css b/docs/source/_static/sphinx-argparse.css index c0e04ee40..b10e948a0 100644 --- a/docs/source/_static/sphinx-argparse.css +++ b/docs/source/_static/sphinx-argparse.css @@ -1,6 +1,6 @@ .wy-table-responsive table td { white-space: normal !important; - word-break: break-all; !important; + word-break: break-word; !important; } .wy-table-responsive table th { background-color: #2980b9; From c4a41e69a09338331d4d3cc17f8dca8d29a3ac5d Mon Sep 17 00:00:00 2001 From: cgoveas Date: Fri, 29 Sep 2023 14:01:42 +0530 Subject: [PATCH 11/24] Updating security guide Signed-off-by: cgoveas --- docs/source/SecurityConfigGuide/ProductSubsystemSecurity.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/SecurityConfigGuide/ProductSubsystemSecurity.rst b/docs/source/SecurityConfigGuide/ProductSubsystemSecurity.rst index 93d9c06bf..dec5539d7 100644 --- a/docs/source/SecurityConfigGuide/ProductSubsystemSecurity.rst +++ b/docs/source/SecurityConfigGuide/ProductSubsystemSecurity.rst @@ -388,4 +388,4 @@ The format is described in the following table. Network vulnerability scanning ------------------------------ -Omnia performs network security scans on all modules of the product. Omnia additionally performs Blackduck scans on all open source software installed by Omnia at runtime. \ No newline at end of file +Omnia performs network security scans on all modules of the product. Omnia additionally performs Blackduck scans on all open source software installed by Omnia at runtime. \ No newline at end of file From e78eeb10ffe008941976b7a452c55861737af07a Mon Sep 17 00:00:00 2001 From: cgoveas Date: Fri, 29 Sep 2023 15:40:38 +0530 Subject: [PATCH 12/24] Updating security guide Signed-off-by: cgoveas --- docs/source/SecurityConfigGuide/ProductSubsystemSecurity.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/SecurityConfigGuide/ProductSubsystemSecurity.rst b/docs/source/SecurityConfigGuide/ProductSubsystemSecurity.rst index dec5539d7..eecfb866b 100644 --- a/docs/source/SecurityConfigGuide/ProductSubsystemSecurity.rst +++ b/docs/source/SecurityConfigGuide/ProductSubsystemSecurity.rst @@ -388,4 +388,4 @@ The format is described in the following table. Network vulnerability scanning ------------------------------ -Omnia performs network security scans on all modules of the product. Omnia additionally performs Blackduck scans on all open source software installed by Omnia at runtime. \ No newline at end of file +Omnia performs network security scans on all modules of the product. Omnia additionally performs Blackduck scans on the open source softwares, which are installed by Omnia at runtime. However, Omnia is not responsible for the third-party software installed using Omnia. Review all third party software before using Omnia to install it. \ No newline at end of file From 754f71dba89f735b4e71db1a124bf27a25936325 Mon Sep 17 00:00:00 2001 From: cgoveas Date: Fri, 29 Sep 2023 16:30:47 +0530 Subject: [PATCH 13/24] Updating security guide Signed-off-by: cgoveas --- docs/source/SecurityConfigGuide/ProductSubsystemSecurity.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/SecurityConfigGuide/ProductSubsystemSecurity.rst b/docs/source/SecurityConfigGuide/ProductSubsystemSecurity.rst index eecfb866b..640e658e1 100644 --- a/docs/source/SecurityConfigGuide/ProductSubsystemSecurity.rst +++ b/docs/source/SecurityConfigGuide/ProductSubsystemSecurity.rst @@ -388,4 +388,4 @@ The format is described in the following table. Network vulnerability scanning ------------------------------ -Omnia performs network security scans on all modules of the product. Omnia additionally performs Blackduck scans on the open source softwares, which are installed by Omnia at runtime. However, Omnia is not responsible for the third-party software installed using Omnia. Review all third party software before using Omnia to install it. \ No newline at end of file +Omnia performs network security scans on all modules of the product. Omnia additionally performs Blackduck scans on the open source softwares, which are installed by Omnia at runtime. However, Omnia is not responsible for the third-party software installed using Omnia. Review all third party software before using Omnia to install it. \ No newline at end of file From 7378c94ba4deb0932e8f1535540deac9caf96441 Mon Sep 17 00:00:00 2001 From: cgoveas Date: Tue, 3 Oct 2023 14:07:35 +0530 Subject: [PATCH 14/24] Updating Security Configuration Guide.pdf Signed-off-by: cgoveas --- .../Security/Security Configuration Guide.pdf | Bin 615737 -> 618074 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/Security/Security Configuration Guide.pdf b/docs/Security/Security Configuration Guide.pdf index c17420728d95c04489b1d0db866486e6434771e9..daecc9d1a1c9c1f0a7a51775037d21e7841ae8fd 100644 GIT binary patch delta 51244 zcmZsCV{~Opw{~pXww)bY9orq-PCD4JJGRrYZQHhOb*xV3>+{}o&VBC~-;b)X_N=*U z)u=V9#`8RL&bD#N^-ap!7&tI?j>I@PF`(+0!T<|O*9rY`8re{jK(mR#8l97fuzfgq zQu8^fFge}e4*NpHLZf)f8}Iua6(399nL5H8E~ZJjjaGB*1tSzo>1k8YZn6yNx8?+i zHbWal95+Hj*UbI;fY&Ohi#+YvdmVI)HY#v=_?e@R=*4DR+}d9#tC4qZP|UNNgg|4r zIXjwsP#d0n4IQb{*-~N1?IB1aY~kgY4X2-CYq=CVk$uUs0bMj5+I{mHg${KeaQ-wk z;%^wInYvMpn5*H=%=4tw&Ib&>vHZ6b6G}#`)>c1#u&pQ$u<@`s@V}c`7H1ZZs?9Q? z(;axF4)!bSXPWDeL{YRx5(7cDCupI zs?yM+Cu|h7;rvF1Qnzx)m!sh8&LfgeA~n#+o1eTZ>)&!^tI-VRu-0IBDh>up5BiP5 zDB@!(`?8JKj=iEpQq)AW zmc&v#ap0EDg!2X$#+FI(r+?8VZXEA?x!c}Yv zlYJ_-xGuXVS+V`#*zg>-6}xj*G2#abPB{G=HsMEQtudtr8O%~FZ7T$!Jf`qXZy>gC z8fKiIHHc0|1;Ja4f2jPL6iYP`rY%12X+2vzblF^#sFR;vhWL|;Sz#>GbBYm z6tG`_JUVRAH-681A;(4r;n_HB} z6P}_C9B}O)pbG|p1=33}33j^^u;*S6-Mjqm4B}MT3$+1dgC`isqq&Noa^yJQ#i(Kv z>B}|oO>sL=Un^kP-4FDI(3%vV%OuF?5NNo8POsyivXr+JqdQO>%sMMDq} zuvW=*+zASvVwj@1E74N2N*uV6Yq8x!1|Aqn`#zq%QCx(niNjXcT+6>1!LHUzr5Pf#j+&6oi@>3-1Wx}OIa-s}Rm zb0ElULOLU9kYP3%xXPL39J!rnO2CD+%trSgO){TA$UokKEa_ebfo7tMAe@; zhqDzB?Kpn)kh9;B77mOrt_eK5d2j;X$M)5mLEhnpa-7j=cto-b8P4t)UPnf=XN_uo zM&k;e@9^Vc#OGlR3*?0AX-=ElvQm1e7}xBNe;ZbidSX5@Y0g{d-lH!i`t$wQ8Zqn@ zk$-m7*;&ibmA7EN)XL1QXdS_8XcO^gif8bN_mS&P%2j{sGrmxWIe3IW7Va^G98m0i zI?*4y?`~VpWXlOl!|%+6*DflPR^}Q3x%44LRv*rP%$^bzY;--CIOr98Rj-P$g2ZyL zCUYfUNIB=$sdSK~*U$oV0|8tXBg%{#t0460E_&r$+frJr0hyRzyEghsD*DW3ks~F$QLWZLg#XK_z2wQxLgu-!31{@;0F{lK*yjcNcYaU{ zymS;$)f$CG`bCmqQ{U?N+kOoe^X?2Ma9(yEO3m!Svq_t_aZE%Tncc|Ct2>zES%Dz! zZA7aK=_ZbJN(fgMTyZi~87D*ba52vMx#fLxVI5MhxCjPQH7%%o??6?Y3LM-7NlC zBKbDG`+iD$G>IIkeWSKNo$7ItkPHbTB?%)X0c{~A0c)@aF0!D6-q1e^MGxj*k^YXp z@@y)nQ4>ur^~Y+(Kw2AgtujBLacaNpv8bPltfoO@kbt2Td~xGopYd5GfnCV-YYK+qTmd8P%pG<)5aWlEn%x z7P@)iVj~U3ya?;dSMawpsTibQ(`yf!x$*Px;C34TMUyj3Ba8ANsc}VNl}cAd;%(L3 zSw7hXhhU*1P|6e{rr9o0rV;19Si_dZ7d&ZEGP7c|Ix0eV9~}J1O(bKmIxDxH!+8ER z1GQho7uuDVM3O*XQQO9;EQxn`Snzg3*l|h??^yJ8*VQQdOv+t!B!=HetsY^@V>=Vww?#04gFN z$TTz!VQ=umFU;iO*5~2@nJ1;K#yIV_p_}*%R5Uev2b`I`sf(+#nUURJPY%Y`aNI45 z@nCgO2t1r5EF^y!cvx9efB8cbfbnpqI;Db90jo4*9ne`(y5BV?Sw$i*R;s&TNCWbq zgHhB|(f8x1tYAzN-4j7xpI73d=r6ED^mx zfjiI!VSeg}<1D9rcvZAIe2r9MSe1-A{x&9!8kX{7>y&>?)wAn)O%9cSV}zB+ZkosS z;6a8toji4^HRLtqQ6cqk$fWy7C|Xana2!(5X)PS9sj5Jq^SzU8^)|ScaVTy8gQIhx zhV+tdO_-8|5T9n8Iw~Y~f7&FFqE!KydsO{WP;M|xq^Za%?!jTRQCJg={7*iHK&(LEk@kxX z>FPUatr!f=>PhIW^|Kd6yj6Ym*cO5GL=F|B+s+eeeSg}$#yVde@p!5r{5!Xbn43AJ zf+&STRc;wmC>&~3WD~{pLYNzIBAmT!s>Dz&nZdNoB-#3mI3Gd$5RCR)ovDbBwq0@q zc9}DY`t%RcwS-8Bz$fCe99&eOp#+ysLK?nGJbpcD(Icw*hywW?_}Wu3EfiM3cH%{4 zsy>N!jg0T~dK$BvzYa~b@aw!s@h94cwUb|BCAWCb3!T->PT=6CP-*04Kz~m4c$zJr z;AlpC>!1k>miC-q6hHv59*)b3E>SR%^iyGagE$LP{8ZKkxA zZbqo^UMm4zyym;kEj`(8ee8^Yk=24nSJkNG1FqfZTUx`$!B_5G&9XbF1gf@WCa1jm zS<*0t74CTznru;?pbJgMxu^Lm{EJN=KE?`zMNz(aQThY7u|nAotW7hOx8M0Vr$$O6 zC94p`ZZdPbkIoCDvHJ?ZZf#6M)sdo`PgTj{s;YIr9GDv~4)=5m3MV_&omZNl zkj3rQJ$yknDhqthIxTY*hNB1D-J6e~Z4}p~Q^i7{gA#90p;H~dgH@$wg+ik+@NoS(!73zzg8v+CR+hgkf1PP|RxUOU zmjAVLq|SyxW2F*1fMKUfr-5mq{&o0ONSNi!>@8d^N&fsXtS$}gPXqtcApSJSmbx@3 zmj!I@zbE8mWdr>0be#V+ouw_b9w>LqkS#PF1~%(I3t;78{nwrKKkj{?T>rUVQd`5J zXR+B>|DO2IGCBY87CQg61URInXs z*2+|)^xK6jO#4X{n3M|a5qkj10_PyHCalmCL-5a$^~e?60)Hj(JxlMYFi8yU{<6Rz zbLdH1!PkvooGkg3=0N&YJ4e^uJkNPY?~XS2Txk`t2i>5-CCETPSdv}e3; z=I%;Zjs7vlW=RCktPvcUZN57)fn^Dok@~@>NL~sjv*P^6X8eUmw@*V#Zc$P$VSr}L zpmk9F@b6&dJXb9546d_fId+(F;CGn*C|v!kvNaV81Vw^(AdC?!`9$75MYb zIdvqqEALOzbQhe{%q{wwUmMetY(6@n+JQ0Z3F$y*7S@K(*XwNdr4qeRW=IpJ7m@pNwKJvz!}>}snedOE|a8pCwR)n}N+co(dCkRd|pV;HI)cdX-RCO!{8@TV@ybX8Ah_!I__ zA$lB3=;7K@bH?e$IIt%d;Ayl{dBH;`y`onRb}>{t|H{^IR`1yY3|po7^|yDtP$qy@ zonm)>1@ofT$F~3cNfr}aZ93v9Sc@+-Tt=K6Y)sqnPaE*;r+BF}AJDu;dy?de9b7p- z2;G(=26q`Y7o|6pNiFB!^&wuy79wnzo!g)d^@t6GSoDA>GsCAIpg$cJ5X!KQ4@40* zQnxQ@+VQD)AEE^C%0E=qXItqTlZ#I>mq1+BuVtV^rXM)bXHcSb6E@Br9lLxw z)L4&fD1$#sS#1jiR2|rDx4gsSv^VN01KJsAm3OOkWIc3yFO7P$mF0FBL68GXd0H)a?EVlsm zix2U#_Fvqao_C`mNgCV=C@ViY9+|V|M)ZV}{3%+;@Es9=6|GWQ?}exubSXjAhMg<3 zPvRG?cM%-!zM>qy{dluBvorDo1^T@-h7nl2+Al(jDznu4vlLjo6TS53d99=dHwA<^ zDc#F=SL31$Y=j-td;RYql8L+VE-YKD{I8?8Owr`edagJFrq5X-^=!o6WG1=IzdJ$P zx=8a403+|fd&tMHf&LzguVc6c*W&fHC#|Nr>Ca&rss3`UEa3rA?BkUD+T`gS1(4YI z#NJ?3$0!c|KG|mE$@ogak6mhzb=bjX(em;Xk)y&l-ek(#Vy!Czn-hV0xoq*oJI;E| zZ7xioy*|!J_`uUTNK-oZ9Q?FjC@fII3vQmCx%YIf&LqO4TeiBqbqW0b%H@{ zy>X%PoloHc*i4}#)wL+Fe&bPd|qp&Y1MZhLifwi#B zjmNV{SI_#+u25v(bkgdFD+Z*X%|!i9N{a=HrIb@JWeNm`NxW_d07QMb(hC__FcZKu33%4gYzvY-d)D(4uuqCLwRkOc zx8DPB^UY{4&=8Q|J4@uZnaDlzWBc3dR8=*1$p>e)iV zSbw~fmvc~1J()!?asoIkVa|pVqGqS`Q3X24Hehj=*Qp6;w*us%0YmJw@?h-|CriLr zs!e`Ok4tpQh`R%d@K|b|5_|a(;hZ}%xX&eIZ(dU^DYt_cu~qz>tn^Qz41<-HiExFG za-kDb>5aa@+x1vA@jzWEn>*LWP->}eUSpkN{wsA0spVlmNK6jZ2y?S{Ov}FJNJg44Q&hz4M_%V?Od)>h4elY7zU{Tbd z@1j1PxoyPADY1ZShC*V7w*9iwLc#mEJ>W-ghD+wy!r2_k51eAQ%QhgsMrx=YQK;)z zk#$zUi7MplLkZlqUp-~SF9P(DSQzmcDTuqWSQv_te5%@~hPe1wqC%c_%UHj$Js58! zp<@B<#`rlZHz6mvdm<A~%RL31BF z@x>uLswQjYt@Ddj`se#q^mn;^wO6YQPI~w?aLe4ps) ze}S>T8RNgWj62Z)hbNUJ1q?P-_&XSJYHcPoQmT$07#<2M3&&qbl3CJ@lZ1qol{1kE zah#6_@Rv;=j#;F$bGR&Xwpn=eYnK=iPVD1}oY!~V)=~XlZ?j zx5lN9MlLW@sXGe_iSME(CNA&=d#*i9nRJRidUJnywr&yq28Q0}8e`WxPT-o~4YT%{ z3urG_!!E0#X?KB>Pc{w%xXQelCn0oEN={EN)S5oM-eI1(5-sKG=I~4~=Vyz^Co|ob ze}C@*E#;j}`mf#oo1gzd?tgC#I|t{#(3q9&AG*%ZpW2=S4fh94$9sTL1FQ6`TsB5g zKLmS>1;=UO`+Zwgbc>o8YZ4!;ZO1azyj1Dn_=D3Z8bN3!ULSD{{r5VJOkmh-QsD<# zH5GGfyeB_*i9CjO?vE2fa}tZS6Mp&(y>k;G8&iMZj2nqRFmuA=bQr>?j{cxPTUnH! zk5h+#I$-Q+b#A-4+i2Ua0j2_2d-QJ|EK+L*6HjgFnen~6;!@K)EBEwoBRNy`w&kNe zu8P#Ieh)c(F2|hTS(6s;-&UrNwOzDUXBPe1jLiakDTv-u7&7(4L=4)sUDE4!*K^Vw zoe&p1ytAicF7g2+dNg(Z?B-F;g}6fSm?F-bq4weqIu2Q`zG%0q20p(c+#k-KU}XsP z@~^NIi9V%^-6K|Z6+-EVj^c!Ynk&Bdh>ex;pcFA3*|o@X@8)wOFXpF#A|?ic1n z2&R8ydKa(uE=);R1^#M-%waaXic+{M%nAuWk;=#Lq&LB=Yz|J}qbTpTDTb8+eP5Bc z0_EG19}5tyX)?;xX1DtUj1GV|tzTaYu_z(gw#WNovCQIe$!-+$C0v*XX1dOZRCT5VICl6tLA zx^r}AFWN=_4s@48T=f01oow9>p3N$7vp+yP zegs!^_&^8%X_*}ibI_v{{0bYP!eo*@ezV%471|9V(f|Xf0jFSQi0KJ_MexO;R!j1P zyb(6m6<92ahdH=f@JQhDh%w@dVOHQ>N})z4`=?C8#T_8UQR7G*rN6YWldVFVA-1oi zpV^1vby@DQ@Afpko}(@s4jO>{>nkj;h^;4pH;)(R^4G@W^>|!5>va0{Mb__DglQ*~ zW^>S;5I_vH=9|{II*I3N>bT(+VXq>)H1kfINTK9r(%>jHQ&~nqIB#uQnmPk;fsz!M z%20u~20el<#mp#nIsnN7nl+T`DEV0&b@~fAB^tNL**C7!-&Gd;4(Y%Ybupy-O@b<3E1n&`3Ff+ti52#05-J z{**xST}~;jAz6X^a3DDqwir8%3xY@o zVXmT?QdaU)mIy&By$bzD)#sRY=_+gh)+ z@JFmm(dLg>@Yz6%D?+6*k~m}3r=|U-K~2U*Pf`yj3F|sE{JRO#VbuGe@5zXj-Enbh zGRj5y;aM88I1U9g50UjA(Y9S)xcQ7#ryXMwYbvu=ixu|rPvkXed^ru_(B>1CB0 zZ@rOJglCXCWUuY)+KD)$r^igdaXa`RAQ4y`f5DmddR@m1>drbQE!p%D`{Z;_c4ojK zr1ji?1b=%I^y22!6#3GT0Mr0_Waqwb8CJGElTjxSs-}q`uUYu7dMl(9ZQf^%+R?6% zJok*MyASpxr#|29W$OD+vj{)4k356l{!sUQgQ61=UBu}Mq_qsdHM^N@5DRB6;Q&q$ zIR1nTcao^{XA&7N=?)D@5*vD&GP4sQ1<(}3720g@W%72*v8=t?hkc@SF#1JI#b!^+ zf*EWwcyNE+54Y3jA}-4fI4JhZ8i$tio^AX!V(_99E!-z>AXr-G-nB(SOm}Pn-KrR< zq0>M5>_Z*(3#wT~y8x-?3#i}t(=L#D*+*rR56n;H=8NS>{sp#|*QJ!@du0=Ihu}i@ zE5`N`NVFY@t#=as=(<@LU!_8L`l=l@0;a~Z$6W98##f)3?1WanR1cx?j)=~RqoVW@ zPe8HCu1Idvb;`G6q|a4DfdH~fA$~33S$D( z7m~xzeU-5%9@(Lh#AO!JCVM8xc{+qvwB0Xk zE;sTspNR0)+_liVAN+L;%oq&6xou-de|~VnxW=hMbVe4x2-Cb@lCodYO>i7BxoJ(M zklbjl1uCfSV|Oma{vD$7rPR~7#4Z$Bg!Hj)w~B1PcmFPN^S&Op72YC%x42hZezhc zo0={Z&a^F9(IyH<^C`P}g2Y(-Dkey~C$>Vg^@W4KK@XoIGJZiF%UB!P%LGo-tY8f= zppm63w{8oVRm^HLa{zy8Df>yr+smtiBT%S@lfmn<*&eo)j=~h!dtCCh*0a$S02E zhEYq$Z0sN}*|#|EbQ9!iT@X^cjqF0ORbf~8bV3gYl3{XR0*Siuc@*z*bUgHx0Y`p0 zR+44vX)XuMx(h`kLj~z~gOTQA`FH31npdf$N5$fOi}LRJ6;N34K${@&S3t`^bxx zLffS57v4!<99?B~V&$@lQfK@h)yWLD6g)O?TBD0#`OiR+$szSwkqW2t!S39r({lp} zz~fWcvF$U0=mP>CW^(YpqZ?|eu(WgiC zpGRe^KU%D(tF4`ufG3e|Bm@VLIR~%y=g$dp*K$ali#CQ8V8QM-v`o!rht9j>jLEmc z%)(xQA}PQKVUCAF<}@#R4Ax9$&rzS&uZoe$%3U(S&Nc9ftlAX%0{qhk@5aW@I$rzGpq)E9w}W>eRt>mis$zBi`1u_jq*bzJYY znnW>A<5H$x?^}9c_oVZ#&?+i8IeZK5F5bpTLDNGj0}@MELSP%4svE3L&MY-derbDA8CgB%qnIRC?KTu5hxc#hcAO9$zhPk zaXtV!%^d5F?PQYoNDuXuwTr0pP7>&RvXzD!wT4YA5bLsA$u9U^W`8g%C0fy&kWC0n zJ3QaL6kuNs>_lS(e$DN|)n{POk46mh9SJ-s3vqQB5BiGRG(4Fhx=OIDB&*e%m|n9= zZ6I>H0Ojr~u3!a*#ZjWwDd>0}1UkF}cAyQMH~E#`BinIJ`V-UtJ&`EDf%KiWb0S}4 z#m8EpzU;Xzn4@2IbYr?e z)i8$^wOkuZ`<9lh`j$(8x2|fz35J|wBkHgV2#gB9GE|}}i;bB~%?tyyqXG%xS$XZi zncI19_#}9Vd{cW;WmfrT7I@$2d=+ZgFZZ;(M+ANLx<**Npx&{43dB}k4h0NSRyRwg zq6b;clBB1TbL)4bNAWYS*h>mfC3RHTdi%uWIw^s11HD&BDs#^9)OJB*s zLh&vAkZtdb57!^d8!?k*_{(ie+$cHer2KXZ^NAttI2q+rit~76g0(GA$-SNM0&hcXE<-p{JQ@Hp_aRk`~MI-Hje*8 zqhTT0Nmx0!Q*VAjbAfWEjvYd`@%<0Y`(Nrz!pij*P5wVY9_}R3m+fNk}=`aGvwXBHju!jqf8;-#m+BapCbFMUiV9ZXQ1FA0^bs z+T1n_9`CQu&aUyYJ63&~pR5VhH`_JzYxDsUMa(NiQ|Y6>zcG&IhtRtfhpf~!Z|UiL z3*}o2Kz8Ff2$^pXoG_#XP!(A~FHdSyIz7%bI%nJHU(SYA=uLt7HhMBPvnY|gN^%N;ezX*Kp8*(zfmRq2}BW@7v?jg#$&Ak6R5h zwC`&vGrVtGki~>UaQo!rR?%~1hwW|`Oopw$<+qoxV=s_>q}H?;jh}B{4T$!pozFb0 zuNr!!uz}|sapE1iWhori$r=d&nY-q2b8TErGu1EqO^XvDKFl+G@}p6BT3@B(fx+z^ z%Y)MBEpOK<2JRW2vmUXt&NVk&Z_W!Xm!5(sOd-b!9vO}`%#T~y-Iw{~3-4dhH8V=Q zK6KE@eLW;78U}M8%&H1{un77 zT0!=Bjey`@;G`eB7N+MY3y5wenUX>>pyw!PGWKd%&@QWGBq>X5bm_5aJH7V^OSom3 zGvVK05XhJxk{6&4PD3b6iVE6*I^qMem%42mY0}UJy-#qs397g-N51;2SQF;RigO3K zLHEbHatf_mlKWf8Fe>l5H&S1T;?mdqK_yV%GjJ5@m%!}f*Yt)v7~l_VcF>hyVU`j>?TvYDqMbnI6jq<4^ax9#k%R}x{#1dlb`3>kabv*p1afh$E`2SKK3u2GP#YSt(koQC z(s`Qg-vXO}tTd1IxNh?ao?1sxbhVJ!SjSl$ycQBc@o$QeJv{~`>%wfUL@_4e*!m_x zZXO5~0qyka;BRR@1<}vdjw%+fktfgfeN#-zZHxMO}k(5*4QRE!4agYEITBkVAkA7gBZ48|bQ#JZ#-T>Xuwy!}yEQqfqfr=5g z)`>^I^kNGeKXz57YzIKa1}qG8wqF;_8w91V+89fBCwIahin1b{5LyDIsJ6--4&;e+ zlZ&2$A2&EP?W8Aqn5f!qW#2nN~GjMYFfR7-dzM`g`f7 zEF9nyv`1{Dg`IF%!@oK4gFccbQ;lB;KN=xN`3+26aF#xhua2Jx?V5N(3g8n;xyJX}C^hAJ%j6{Tu$i@?__w5O{^cbky9Fp6d=+S+Osf=P~ z@ZgkQP^3iLuDCd?)VW$j9Q>kA$Q;Y7SUpDwlzDX;WT0kVo3hIyKs{?%=w*Koy$ zbFv;1Bo#vEDl1tf9l@23eLSeHWvH4MKNU+@hU0-`K=^NrE>D(ei8{Zfpv8(}}UDrmR%DA6|%L=9sBo$(+{A0yE)kcBPO`n*RM`(?=sUja@K^p3V+Nw=W zO4;RW-7mRy=+@1Egd_PZV9I#p+kSXm1aW?#)2v$@G>vnbOH+>vwbhij3jm`tXrL?f z2E&;&(r5Som$NZ3Jf$eq*2A81MtHa>Qs~VoO{n*juS;U^L%}A-Kx}5BJbS z@2zzOFDox0Ljof>Eo~;o4}*?b9hoDmYH^N(Qm4u4-Y`f8+CBsf_S`^^1ewVl#BRxG4vGd(UC zH_-I-a((mhs%xZp0OZoQlG(P~h42l+Bruhg4~{$F zhC(Z`-+I-gH{DpyQ0UN5LE);CdVZg+I*)?Zw2d(nWisotJjoh=Kgd?ZA>_BCF3=DNOXy%%BKlvnQ1dV&EcvQy}p zm3!AQCLg*f6vJk{l};|oLu-cPp^bWAIYq7n7Q$?jsK64U3eqy`gW^o~FPQ8p1e|Vq z-UMNV9JB|0C>ZjF>}O;yJ!^3(SXNo%KPQPJilV45m_M~k2s^$FA3bSxORil{jzH^wfjL~g~Dt(>`1 z7Vi%H5eI}K{=lIj#X_m^-F-@DamZ}oq~}GVZV<|-{BlrP7KJW#A24zKQ&(BD7dQNX z_i<=!gQGfwV@d)21Wecs|3&%^D(U@Tw76H;m^zi2wdImewmSP4Ep<<$A5Y+NblyA} zMi=aZ?vM$UcI^7$oFDu84di7A5Ma*tSb7W0TE0Ry6w=(ZZVeLS3KK4U#dBT}f{IC- z6BzB^0pd2zep?ieMQBeDOhb5M-aN~YU2S)EyRL;@KG}_SuO$P>t9?zRKGG@HG0>s; zV%C)pSD%=`KbEMV#XyaB1rf%buUgqS(>5UQ&9asaWHUcKm+Fo&;U0qE8MGAMiyZ+n zcmz5KSVPWOHXUiLvJ-Kw=NaDdr?YFr;#ihNob?o%g=U>0Ft|)(g4OIjF3shgYBM10 z?ZU6G4wiaFI>_CXxu^Jo@=f%FW*zy08l2Ke4`%JgL@caxdV^+%as{1)@v%sDhO zUq%z{5>3=Shq?hIUH>?$I9)1GN1sB0?J=X;TIS30poIRBvxYRgEXQP{tMcbqZc+?t zuf>&Y`PoHG$5&*l0*U0P&0pz&zC&Lf93#1VW0FXfr1Q`G3+jpX+Wg21mCB_WV>Na4 zi+2U07PLpAEgkq8hi?Js^rhMJF(einXqB`y5ltbLm!?mN7c}BcYCieEp_UKIuJ*Fy zgkmaB^RV{>RDs7Cm|@D-~BT9W2rb zHD66_70qF^N4*sF1nz#|TCq!YmtCqTO;dyAq&_alG1^aqhH#c*hph-gB|Ijiv@`XV=yTU2U5*Swb>8o zr47+-^N-612o@S3sC=ZQgm!RN=y`{9Mq}-8KHx+`U$w+2+4j2_uPqC<0G7FI@}Kf8 z693V{6~>LwVU%-DFI7$)F%GBwA(Z0uJn<0+1e5k!d=r>~^(fNd;u@>eD&B7EALY)D zHZQKgMAnBIcv08+A+rR!uw#9Z?XPI-QArxEput|pU@!~7UbF-zXKCqZ;l>zd*kN(K z8wNaTkfE4{qB$dU5A#9_OSwN^mOIxNWE3fr<^mKi(C)k%YwASjJ% zKx}Qea-PX89%PW`10~5N0TtP36*bAFp4Zs&17HsOV>7()BTYJ0p@~APU@*X|)jX?} zx|+t|m=h6*Y=kjQNbOGmD;nw*2Dr(YF9^a>3gmrye|$YxuQ`Ryub~|(OH6~HM3VdA zAgM`bV?-Nyd$(R zq-bm->q3SSR@H|3{6&XnzpmB?2Gv+xp}-0xoYxHGhk}6rDNlX#0Mc$+G30(wT|hvU zoKzU_tN8vPVqX!uASrB6;7{ScR9YufWVG|7fM7f}Prgf3KGI(?HtIja4Uac&W(L52 z3&+FsiMVnRgrg9MpY#U642Zb05rmUFqGW?ZlOaIQojH;O{`r9nO$Gry_v%QJa7*dO z^grJH0e>nuPxSyOBfBKLs7QmbxC0zO07~K>2`?hj;MiF|2LPqdbPoZ5LVX0YuqzDl zXMp(60Bk=i00n*ecQyp<{uwSZ~Ws61*`gJ7>z=19Boi0j)g}Sh5CxV z(-f9jyZ?}Z)KTF#KR?P$GMT3*Ne;OLjwynoBB~ZYilQ{?*PpwP$p7iOk%)r3WxPOx zv4uVV?miWP{*H(2wdmYv)?<^pg*@L@LHGDsM!^ktVH9qrKil8*jeVs*qZz+tYrqqR zvuA?AMduN+gwIVuD9{12Gla~ zJYdeTbD=%V8vVJ)a^Z3vr=h?swGjGxQMG!AA;2Yp>A^czcu!9%In4pWM^waE2p|Ei z8)f*gFmOL~%_dvm1ZY^m>gb4xxDGJJA_a#i;~g-H?I@yuH|M|QiDccYma<=msac%o zJ~C3;PL{K!)N^gix-Chw;`88;$exZym4lS;QGDjqNF8+45$mh<)MU&$q`v091`2+& z&K{Nk=1{vy2~6jF3=P=4Si4VuaAEo7MD_=p%w7KM(LDbc zzY&(mL*)I~%#vZ_8|YGZyjhgbI#N$Dfo?!`7BXq}HtP_Q68dDGhP00V|H$lI|I{Gx z^E0b?Ihrvi+T+muo4od4sylhAQaCh3>d#8(YTp0oxBsQPv$6aqW9`3+E7<;%>GoG~ z1qau^X<2M6?Elf-6My5vrv9peh6n%S_IL4uio6XzD@G^&9r1RV6Vh9XMuL;d{F90$ z4d9BF(Yz|zE?)ntzT*1nuzc3Q!Rr!Pm)cq=BVUoG4Bx_2Pn zo`Y0KXOo?WhZC@sgZ$_cgyeh41CHwtDDb>lt7tM>aqb+?|h;k;nzh5a|#44t3 z=?BO(Bv*zr?07BvQ|jSf_KzB!Fz)S}W^g3NvWcVy60=7&$&(5<>yBM0l^7MPTu2Cy zFQ_-Fs-LNv(=-~PcVLB$TJ(~*j*Qebi-Bs#(OtK1T@m?uz2m7%Ti(8n?&lHpCv{_D zzgy4l{cV|pN??3^%tdxN)uD+)&yzJMcW@`#lC#Np$dIe$iP7RSSzz+Z<)Q74dB zrcgve$#6`OjEPjCkk$nn>!Vv2LeWuMF-?xSI*DMxGG-Vnsof6ehzJstAI9jI9cDl4 zu=XXZF75};EA=F>X?|5}zbo#ina7cutqI|sb(rD;LP6PJ;3CzddWJx*kJZnH^R?og zJI}%BbKx-}2)f$UMyF1MOxHX>z6XeT7Tmv&P=EZ|w#T6c=**qu_~llwEQmC6lqhZ# zhB;67id@dJX1h_uyu&uqK99<4K|>p^{n(<`ZQ9s-;MnUoAyUYs);wS%g16!BK>mMp zy<>D`+txK48#}gLv7L%-+jc7Ej&0knN>WLM72CFL+m$cp+ee~5w!>$z;QUa|9Tnz6s2!AlYo7Ec~_v5jn{ggLR#F+7NncdHG1=1J)(cBN& zKcJW;AyR**TG;+W5oPCK{U_DM!t@ur^sjsPKT|Di|E7kX>**w|HzN8C)@&86ACLSt zAWU-2k)1J5^kDU~eEs>r)40lSGx$(?-C0Au0g^aVVE`s1_MBasoT^X znEA8G>Sr}dXSG^wwG;)e(rNmmJgHGyMqNW{VcxDEsMdM^p(fQUWhiM8c|bGZ)9)p% zyx<8;qO=39)KhqWz;$#O#^v5osJLCzCa_p7_XoV+cK3_8sTU(N^zXMc>qd>rI2r9E zM#$U%0N375EfjI1hZ|9&h$MdG?nJ7H;FIn<7xbQQMQW%Ylr3-K!5&4CAYZ-_BdAxBw)h<lOV@_GwLDx&2vrFB-?P~$B1BJgGO_&wC`%&b)f*%jkzGsuwCXA*oaVkKObBg~N zqXK4LW4hEqmH-M+Nb7fIVnph2`uEzrfGEIwfd#{?0eM!qT+jL3q-95X1_vKUbK@?7 zeCGLI+wOO|B)PO|3COvnfHn4_F5Z=7e9nEMVj9k!Z#3aGbQNKxe5me+5Z=&W>pDVj z*f2xp)p|@PnCA8M7|Qz)Me|=8j%yk;1ExUEF%^%|l#bbP<+vM5aCg$+S~UxNu8x8C zo4!{_Ay)og2$qusAXeIzWZKoKSh5R8CP5grQb&sDV(Hy*V`S_X1f*wSyrAIXjR)tr1Ze zv{OWK^t7Xn;XLmFRmBIILy)@$7DW4Ar8+2>X)2mwE99o*+N?;)5~dt^%%sxfwvuR< zQjWK)AKeK*gbs6+*Y`x!znk2QQ zcEgRZSfblIt2H$us1?<1`pH${xpy-|CQ|PpK*FhjI{>rG+)k#_vAYHS7qL+niLF1F z{!=Dt3A$okdJkj`@Aya^XbAj7%lDCb=4L^4we7&P9!U~AtCcn)EG}R^FGRqX%Q6!k zRUC?k@`=$#Z1JBX-UM2UI2;<8ShC0Psz64HnlExMyMKIV24pZ@KCF-YRa%~TjK9~q*HEjeVnfk#$vqIYxbKq;Foc_BPUcEU z%NB}-*h(TFQ)ZN^Y$NM6Bw4u&y5f zq&@)?zy@If-8WKToXIu6*@!T579&-;5?slq7qt}-;qpUVanDX*pV8|7s0Ka!+=aL@(5a%dA))JG+6T05P~~=+k+?wdbZluK4wlf z|1sRKQv$yUf2nt>{)?4Ph3mMeHL46^k#eZV95*wmW;Q`<_i*a6C5th~P}NpXJ9DRL zD0ZPrIlg0;t7R4mIUA+On=Cz4FDCeVRpvQ6MqurtG8536<|h@gRr9;0apXySqF4#S zG_N0%9kpYPrs=3G8^?k_V0bEycxKf<9%oIhBpN}obne!uy_c~eu^6E=X1c77-J}QYL@;J=>(;?kD_}CDl4AQiIlF$ za5Nd0g#`%Ptbqc?G%fCrOjRD}*?uB<&@ZM)-Yx4qMHzA~imuwk6AWP8dO;2`g9_#R z=~0ISF}u40s#dQryIpE+Lu|0Jf@x>CH%p`{{U=q^$}s z2lZf1DCrog{~&6)0LAF9z%NQ+`Ac1N8U^_`hz>x4>ocqxRy(t=ZIgGXDUeeTqoomW zKCIy|QTvX~j8l(=1*SCWifYFI$`@zV$=yGq4)0fOhYoNADFSWKpEGh7Ay&U3V#wZ? zk%jg8ej7(lRp(?i`?l;*3axzEYZ{<&*=VcR2qo&LLZ9(Pl%|g~VKc>bF!arn zDpz5&CPJi$X}43j;SRuL%MbxSIv|LOfJ+k|#gt9G6x`qe2|tx|}-urR^Hc)AX?ajdCCbj@=GMbYE z(6}sKG)~r!o{3WOVwPqUKklb)$1cGty8C}Qf&cH&Kn~Q>L7`P679IR{=seC%!|kYz z*UaSPG>5)@SlFv9q@AFaVF>WRr!FbVW;1|+7Ploy@%D#Y0vjf6+ML-$n7Vu+iH{bt z7cbwWNERxgc(6rONSM<0GT64OpezDIbazNpAP|0&@I0I#5Q1N-R+&W5i%s}+5`#3I z9$thSrmd5l;`lBnM@mNAFJi3rK{m}yzrs-^bcQf@xckJL^!#I62$7~KMZ-6#IKM`c zZczd?{bZE6Rq4rioe@{@!%uF7lyMVg2hHhGbqMVH4kke>0MKL^agu}4|G;eKPFpy3 z0t_xA7s8DZYa{pfX<>-SMyPhpN4ClT=w{@9D#n`sx<<27b+J-aCd3Y;K?i7B!Jgzm z>>ng`Ro+j?1v#T?K8G3}gwolkmKLSlif?t2R~jgQM}G(hyhcM*8^G`2-8>;?K*8<) zLN%GAj>ledyFz<&E0KUh1!2)lEB&MLke z1fQl+cvRC@F3ad`vcM$bHnmqX-Y{qTBGW&cDz09+I^3$ivLF<@A1hVRh zlpBBVeZ;WwMkG1nLi+VlA+-H^;0Cj);S<`~-h;E#cI8U}TP;RUJm=t*SONB{=W$-7 zgCeNf*XT*Wx>3oZQW(9$A=FpzN#LA>tin2MJ9c2UD-J;L^sIQ&Xyo?PF_1YxZP%ZD z0Tm(LJ)RYbiszA_pcXodE~V~F4E@W?&X{ZpN~QNX&zS1a+Egj_N#A6LsjUh zT+btgMcjJ1-7h7xKHDvw;Sg^V{b7KU{*!`sg8N!x1LAX1cY}O(ssnZ&J}OA$oVxJEkdx=!tVQ`SJKrx3b&cJ z?32KWsxk2wDj$OauvKUcb+K%MjvA(|L21pW4xeD^>y<{t`^YO_iPE`vr_WfyAQ0ht zl&xOaTA2I7D_`~vpnxs}9K}Q6lm&9Jsj|05v;pmxG z$iK;p8uO_X_pQ+|mqEMxHr8d#X{quV7B|b#tox00)z3BN?a`p|c zw|giuyT7h~jkwWmZ(rOPf@i@4EaJ~YWqF4wpyxR_I~=dBy@oYsM~!Oid}H2~MUo1p zpWI_w_1w149ag#pq4Eyn%=R4qVVBL{$Uq}Q3*<~snmwcM32`0^3rkIT7nPcwTaN#J zgt@r!)3syA&ud|>{kV7!beNFmqlWes0~eXUsrmKTbD^e!D`Ui?^jQ5`|J9W6LcojB zRG&j6Df@GZzD5USjuj6Eivzp`I)6RsxDO841RH^R@2WHr^6B|NYc-P(uPckhqnG2Vk#bV}D)tbuKN$pAnhX-+V4>J3A??qb1^|J-gYMoh zakzZrWmom5?8+SkH6sKyi}R&mz#6=&+Z_J7tOVHS%^pcyZ&1;?Q3SMWffw3Myl6oc zw8!4l#DbMSok>Xe#_krB3VwSR6I8YbA}4madd8PB?_AHGG5qjpp2mPs5JQN2PX1)U#^YQit@YF^)5v_8;AI z3MBl@)KacN2?Yvh{1Q9IbYE5Sy`5?R?1$bn#-grNVde0NYzM|`_bX61<48j=A1>J8 z(Fw(7S!6{mvqK(~Cw`P)eBEk@fy{@m%f^!RWgxJmQ;!|0dXv6=O+3KGccJm<$#NOR zBv_JPMR^{Lpp%DQ84Diz*=vcqQd+ANOa;2&y{}0O zI@ZbNQ3%OuA*e8v2=<4!MJrPl$=A2ppUrPI5;<@9oxXofXmVd9M-`?F0=BIn+MOd= z-iB>7Z?g$8T4^KCjJ(G$_(d@K7teg4ap^JJ!z>z-IAI!3HX3-oT5Bc3=3_IbiSC6hO&>T6#S<UN zjmDh4IGAe76q@`K$d6GJ!DaYGfk-F24A~qf_9ve&Q$|@F{m?A5k-CX`t^kbOSRdH! zUH4g^EFHB1(b&-JVBpPNcOakd-{$!2VC=zhP>bh_re&@`dPOSx|YlQ?dYPL~66I?U5(X|i1E3>{z zz!^lR*sft5)HbMrob4r; zqYd?F7U5eXA-n*z2fyx8$nMF7hrRdp`W5nrKM=13q18dFL?{;ug+r0x23rCOg}5k! z9LZUg-{JvZ$@`FDKVjv!ct>F(R3Fa?VAqIq;~!@*+avnEN!V$f@D1TR%)+LhHBEr{ zY9=p)X_Ih5kvr_dK}TuApbrqy#9EgB(C--9&Q2WM;?E7u1&X8oW&V3U7e(CmP`A)O#{jg4sN7&u#v<#)vo%P; zc_(7B8C8mDX3{k%27y*HGeNLoi+_+t<-3NzjJIlen|<=3>WjSQs68O~cj%vrNe3Cw zZ~35z(R5vyG7=%#5s#;;(#Lz zXw$o3hRZZmMXfWt^}-_PFu{Su9xgcN7figg*`m6i;zz`Uee0iqtJZ<3rJ}Iwp9DR7 zPt>0QE_fAJtm+RnHaVoWCZe0^Ewo)}W^Hz&N-&o$C`F5@Q0b-p;*i>xivF4?Qn`7u zYxunXi4caj#=Y5U`SqO%wvk)t8o-jGxho9sPEsKirSR<^7eTv*S8W#}s{@5RM!@Yi zsTshplf12IBn&^VYW4hevRmGsZ`vJ0!7(b6vvP|wKE=L78j86pKr4=fn?og<_bJzE zh5WL>Sj~|`cmYQF2bZd!@z-~vA`Wckzi?(SroZ$J@WENw*psFaWd4;E`b%bu_Fq`@ zXIkjLx&>zZU@kW;x$F=FW8uPL zQQTg*XAQ`yNGzcd0_OxDKxPRE4?%B~CA!*!6u2Nrx2WoD5p)&m3NEkMHk~zt&$g=#5&i9ZFAmi(bz4=TBNp zb#vAae>szyu)GezREs$p`t>7vpY7Ov;#MZ5B_p zrA$jfQx*PYytBh?3;{{4Y(*l5nVEXX~wY=1xXslZJ=f>zrdQ$YrQn|2#rA z6aRz{ME9Iob_(=Tj`Sw}2|{=lL=iU`p+SnF{LVWaR{F{Dw>s7S(OCFFj^UZYRzfGL zMrozPUh=2@L-t*RvVkLjHRrBTkQwDmDV>y(8Sq4uGUi8?ux@AYq(Xn0f~pjaya5wq zl6ba#KTv?@T{C;{rihh~Z?G4VaN?TyN^y(i89V$M=wD{nJ9M zx>kO6gO+b?$EdfORjl#McJQRFyB9elS@Rs3sKBfre;dm#{W?{xlLN!=t@a5;{)4oG z4;V5`BlVpeZ)|2N6-&yVUN44fZ0;SHK~bSGKc(6rHCy??Oq&fcURaT|^4-Z&+AIU% zcfMU$lv&H=l~h-1B}IZX&3mq9tA@=oxm~%(k^s*dlfc?e{&r}@HYPM8=Nj{x@wH=b z^fu;bXjY7gvfGDIo6?7Fw3Sx)aAISX8gLLb!zkagQbQ@=JLBLdH~xf{31N@OH!4i0 z-46nJ0B80TV|R& zLO;dB@&d!hy#6=f3#+kc^K>-F?_Qud=hD$b^>H2wtT~(4(q7sq?Apz|?IH`uJtW}@ znXE4d_x;Ni4em#PMcnJ;7D3Mrv@9=G7^5^vD7K{>Ek8j(DzVaNrHZvIx7%!;>D$gjC{J@WfX;9}Q z8{1Wn8%{o-cam*mb>Vh=Z1XZrf;dRO^)8Q4JK(7Q^<5Cyz#6YQ95y_`-qw(x`xevl z!NdXP9#UT}MS(?nu)eQiR|Zf7@qmJKY#23%j&2_xUZnqZ$^NH!5NFBQcy}5C)nRxN zUg*JOTxjMFOnJeTM~RFn91z#|yMPqSvTDkoBDqt(peTFX+r}?4Ht2KI%NevJNx#1j zYyG*0u2o@ri)yiZeXN;cUuUSf$avEK+IV8?7VBC-H$1C~C~48`2qmfZ^aK8wZ#He) z4##Xbv$*_w8%ljTd*;X#uTdNLzFrq-r}d^vy+i8?N}g3vb!C^`pJd=*sH&7+kNWa#Wu-OW<(m^NI1#+vv?t#&LF$4MZ^={hP7e+pdi`K{ zJUnm4`yLNGj`oQ_{%a%uGBPIt_wpPB+)s5&! z51v&=Mi$OCnph*Mhf%#mgN3w7^AC+2uMo}BD7`*-C(p5JOui_|YaRl@H_*vv<0%`by3K%ms0bqtR)igCrRdu(q~^o9Jf?%jp?h z#_hBuaev`!+&52^u;>aPVCfm0P?Fuw6fmRE9PLxRg)$Ps4&-6D&sQh z>Zx1@Hq~S$HdF#J@EKfWN*XiLD`fVirp>M7MJibzz|R=YM4U1znHf%5%7z@pv4X<< zSQw{ZO+b*4YUZnp`{eI6hgN^&m;78He7 zfdtC+sl;(ycBHNC$dEO?=0cymCKvA^ukD^%(=ifmvveEDs|$L5-mWed?g776zxL*n z20hf*RP8lKR7u5M5L930-^x-UqXSE~hy(E~m$kt6??Q8p8I;3JXPICX?Vw@<`xYJ};9;7&{gUFbl9aFHXB(qlooQt;*=q&^ZCkXaYv)LBs3 znE2iC=0~bxgKycm}o9Sa*?YypDqNWzQtEl81#Uvd>r9Ur*ItMF~EjRD8O&D_M`DI z$PCsIKp|@m>xfMeZ2{{@{dbE^A^YhkrdZ3N=wgvhPoU@mO=e=0@i$9m;*{|hOJ<_| zyXF0CCozmu0l;6u%UV5s8t=%v;2!1Z-JfkZx=}py+E+1{8_+c}v2Y*2Gx3ekUeIGN zv`WpBsBm~N0G0$*m^^qBjb!cG+Q26sKt$dL4SOvl>=S>*>lF|1vcqaybi*=-k1@u% z{JzWm0ToB%)Hw*F2}==t(V+0#mNzI1@VWrs;CeX#OrN*hM89vT`cBP;wkEUF1v@N6 zhk>x6YKdmGk)4r8KEyE|#VkJ+R7b4@(pc>zyWBM8JOK^fYk0C{&ycSop`StS1cLZS zBl33|wJ*a_G(VPR(4f6$9(xarlhRkH2BLT*Ly6_bPG>?k=unXkInlwSHfu>Tf0i!d zW_Ly+AXLmJIs}#1`x{CaPyK@K+C=fy)CbyO_ELSMuN5kg4*Ba;?;954w*&l+DhqJm z5BWTz+3Og7hsU@9fhiqu#JdN`E*i%~jme?nnU(jS6Q)>Oh6H97qo$eY`}qSI8k1-? zp}XPiX(Y7=R3tQJ&QG|=3K{XY;eo8d=-K`6K=f=Q(QZ%TY5+xA(cZUY-PpuYrEi`c zdp9~eVFbF};)jrUYYxj?)#t94!j%~^I~?k^*V}5DmlPeZiag`M0ds|_%y>xmfEhh* z%;`K(8mp_1v+!@@vM4tWwmBDG^9*06O)-iCxEuiYh&td0frv@auMvimsk(7BsgDKl zK)t6--A+WIBlpOmFqDY*l-+Ah<#{W?h(_*Q@%z^_Do(Wf^oVLFHow`ZZr9s4>cZ{WlyalAJw@*vPy_t~eJAW8Ta$|P2 zi+7s2C*+E!i_tt$LlTv26`}hi2gWI1DZvRycT4==PT+sNyRRAlXH=-noMXi2)NYC| z&7zQL=_Gv!B!7pO-(jZ^nxq1L1%K|50wg0675Mv_d=CEidVCK3_g;Kn5z+s(`D1e6 z*8*+em1tC3yw;-f0nH$plO(^09_Pzfo?BXUgMQ>YB13`rosyT&IsuDi3XLTmJ{7;` zKZ-gOX-@0UHrC5BZ;Z=nCR5PnSZwg7wKEKh%&!Pk-ri7SfNUd(>fS4G%%;}!=D31o zHfmwSSUN@!-RRi*to_?^j0_0Hdx%N?+V>~GIn_?n-g@PYx={Vcn^8mbyefoXMp`pn zuZfd3!QIdZDTkNQ0Le<99vAg$q^Ux2A*_{0HOV$%rmvG3*O@ruQ|Gl4HV1E!EiMzL zIgq!`gVE;kzyTi5Q{IK&G|!=~vj{_sKPFZ;^oUK`$rAA(ZTK~+W}neyRbI!kRKJ)2 zC-`?~H%B9u8=L|yC+=;|xJh4l*sfmzm>Ta>DiQIt>Nkn5SGcEa8xGS?XlUom`JKiv zt){LQ=ix^k%^?{lkAAClcCQV?Bn^#0V_|~*GrH;*l{PG=kf)tF%ZNHQ49e;wko_+?zMc^10rS8mh5J9MwA_`g&Y8T z2TT|70%~sUV-;8$`iD;2X1Rx9HQ}MufsJ&z0m*F$?;YK@Q$y8SVGf!(leH5-c#bt2 znGjQe!A~(D#!g6`ZPb@jHyZvOp3FrhSNr62-WsPy{4NBc{_xLSA>&*ZH?Ts>z?twnZS`HfpN=WrwR zr;O;g=m}h+vJXf~dh^G!nmK(82NPAcrb~qph6?&|C5i++fv$O7!{4#}YGW8P}y>tN~$od`Ig+JU_0^Fp(F59!oz*H(z$G zVHImz&JHMO)sz=ir{pHwZFA0-)^eH4t8o^%^58M08Q)|2q4yakO z{s{~zPx~=(I(4vQzY6XQthXTRG}`tgAPr-6un`58g)Mpx3k$^QuyXL#h^(f|UE&~k z5~mN!+7Uevp1hocLkYHz6)(g{yYj_aRBs=BMo~^sZ*2VR7y0_}u#reBzT_-zD$->UGzQ zc>a5_plV;|p;v0N*8T!JG)5-xXXq0mGH34YSuTdBvKfQiD`m2wy>RbC^tLm`OGV{) z-xna}%Jmhx>0mL3!x3eFE3=s91B7?74QxZ3d}OJ;baAspH2WgS0-FUdUz;hq&w#+E zEJxNP!RY?p1%flGaDrr*6r88+A32X|nW zf*&Amn^Ye3VE}1vwkWqtO}Q`#eqSKmV`c_SSU2S0Hlvn(u?l!)W>*DZ>|Wa%EG{IA zUxwwhj(AZkB0K87NTQn2w)8YNA;-+mbp#{dhfr}Lm{w5z*t4>f!CHHJeh(xWo1nTZ zh%~yp21f+M18)hP_AZ4vw*66A*v5J0qiI z{b?b7L;*8(esr_KO$zo)tCh}FcDSl!QNjx!@Xl7#hynAQRo^iAPB|P^S$^cO_rShQ zR+?~$6vJ;h)A=beL{o9$S?xM0L6ACEq)p$&m*#4bqiP-S_Eh?TZ9dN7Ld*Ena}@y} zHp=Su?A(~+gO_>f{D2U+PLq+`SUQ~PkjM5*RXjuiHqDixt6|b++Fy+X`e00 zf<_63R|nSS2hpX3xy|2zCL7m(0L`@8H)s~n|0y!_o9Ay#?0<6IxtRW!#taMBe>6y0 zxc(7mW#MA}8|1|Pls);kIxEYk0?mKaSy{OLB}m#o%PTL+i~u?1NB*#dVY<^vA5&@! zsp`{*B<^yShZl;w&#t)4$a8ZWgN~ZVCY3!5CRPq97SW&>(~K}LjL4*?X@SF_~y4tJT?G z;zEO|u?Nfr&I)Bn0oDBH0tmk!>nWAL*ng98CM%I&o>f6AzPkgbLAK`o7Q`UX?CvmS zfpor}tj_P_-AEC)mUqtc+g&AdARu|bm3&`3dz0o-Kd6pKGQx*!^tqFn(8p5iBjFDi za;XaI|NXTBE7Lz5XJ$5*e+cDVNwv6W;Gctk1C?o8htQC~W|WVK&cJqsiEVY1d-W;8 zEpj)n#Z&%u!blrMF8x*Jx(&Iutf#=j4{xb!c9GcnnF}ZyMKZy9T&3P^#{*8EXv;sb z@VO&ER#z*y1U5OH#kZZ*RjR;4wV7nA?(ZxpcJs+66+VgRYU*h>E5)uVKU-}c?xMd6 zq&TR)ox$AzF~kx%-p*1#-0s%Nq^#rAPiFA-PFwHE{v_u4uC~YDwAu`dU8%DeStX7{ zT4*KgxvEGLIuGy4cBC9i)ZFhY>qU}PUt+%0&Ggy$HZ5RPM;ykb|86bP@0?0=mh<`k zsRwhTkGAdoJiXR2vF3dc5^J&eW3WtY5tl(Zq26j9xKNi;Ndc5qN${=GPv{&`fB&*q zQ|MTKV^eC?q3d*#Ykm>4TVtoD?bJq{^ksZyV9s>auLx4t+6mE#HGh)Uw`IBy(wf(r zNF~KwN+-o`J4@r`phSI1xw(|jxfAYH6=q6t)?<>w-jXJf&u(RngALR-hlrqP;D-<+ zhD1{)@Cg%J9yAjwvt7KeX$VO@^ANgtlUsQozx@xKTJZV3{wBX?-*55U>{|Dk&K2Qs z%HPtQQl3gwp3~A{w5$oquG4$ElJ0W9*v6mMDLP*gKZ@5`I4LdL>tt6NtEKg&uts?n zf1i8NjoT?48F+q;K@@0s*V4|+x15*@`GvgA1w8#0;(fAtWQkZ^by?wYVHvXPb7ncI z*D~_{tva2@0!?8ZZ!p#kLED}yO+J;5V#Qn5(G&Ny#ug-P2>!(vwm0k&(ttrGV6yhg zN{gFegHw;uO))9za9Vf`hrI*59s#T%Sa@@y?(K}PP^NWK99zI$-MROWmgg6jQJ2gso z(jA5gsRo;I>(^4f5SIBwwAkA5*18W9t{U?X8zv(4lC=6G2TyY6?QC2ZN1^m zQhE^-c(ZG9*y5U9eM#q?W0jtJ>q0DRTcDeMrG9&H7o_GKX$^Q!yHrfxKowo~e1U$> z5pjMjPb1H!bY&T+tXch?-dsJ>U~=!i-RkddN$KdH);-p+g7R^@9pF{&FE{(yd^ubd zTLoOy_OX#ABzCIBW=f{APA$g?9N{G{#rvzI^s#}&GwMjYc_=6ug5E^4jpEwk5x(icX%%maRX3SvDT;~lm}_Ip)Ty&W zVZ@e>&C{uK9Ds+?<>g{Gctjhqa$HIh?l z@>qV<7_5k^V4n*k^>?Ox{wx0nqw=#_%cw^={Z(v2BCz_h!mUOpB3{S7+k`N=XpcU) zPU3~iQT!Ta**Fie=I<8?IWch_LToD>7bY%!w7PwxWnyiT2Rr0ILX*4bS1$ewcn(ns z+gb5l0k3!D=+`9yeL*j%3D8Wn2yOcW40A0~TpGP>>H`-01(y}<)m)AN@7V!eZH%$9 z-*bFv)UedDctNn{w4!aIe3N!JfKxg3OtKx?$mzbH%)YPSGSy_(7VVqwPpVjbY zNUgrByKn>jf1p7C&Az7bSWW&p8affOBPu5v;Rlgb6~s21NuHrN(?xguP8<8{?@O~>1Wa_9B_crwFpr4kSo#4955(so5M&+8l67X z9K8kki6baMcL;|P^YuN}#XZ8B=;TRfq|{z#ZIDM(nE$cHu>vkyd?@9d@$@ z8&jjlWZ-mXX{cs)owo7>Vj>!qi%G7G^_nXZ6p$p^c_iT?KG7lmU=egi1cH1TE{qA` zgBHDqOOib=u(Fv~fEd9`WY|*QFm3?ug+cbuuS8Q!_Q0p9M|9e~^gRg>GT}LH+!ID>(ShD) zU34j$k-Gj~&x%(%?CnVyZHDc#A|{QI1l znLwZ#H`Yw6Sd&;K=^@RH_}lv^U*keXrBUg3C-x}qlLp&5bC-9VN*{R3J`-#W18OOK zHYv)=y6i8*jNqSn%tiOv#7;5`gM80-iULkXEo#>NV?B+94#+@Tp#trxOw8t`3Y27*)ZAzM{_kaX?EZHu!^K1i&GBb7!N0NjJ$G+Tuhx{gCE~ zzRmJVAzUN%?0v~^H)krvC}rQY0?Z6j3TqTf0iixz6lWRJ-Ul^>2s~_oB?$Vr@Bstb zda!^&1DiXmUCuE7G?W{hk9V|8iXIt>H9UPvnZ$yQD)w3uavZQ2=5D$Sx}(j&5+Lbn zH}qvW?!wC-XSX?ja$2wRslp@j&$1KM*!!V~$mTdIpmJ| zUKjyf=J>h1%q9_Kf&a$Ys?b}WyX`c&rPq9Fcn%?)%Kfnws_oVzSfB5IM3LyM7~>Tn zLccLQkkyYk`x9&K+uJEIew`g2Zkc5Y{ z+{+YqrYpbDr()I=zMGn+j}8;A?W^#JVJVWJ|vip#EQd%rtfv=9Ge>z%Dd$qAs%4wmIxgE-(OBn#*M z_Z^lcg=YxvJCt2s`u0R;IR#L?O)Cxy1kF0jLTbGIgLQsgf)Sd+y4N&oIUjVlX2|xU z{G73~-_;VLs}Otc9YZWT?|$E#P3KKtXCSHzg5+dFWfg3+n+ZZgIP^UesNKo%HA8)< zJ``D!_STR&r~j0m7TtzZ^`?w;YY%s*B?WoZyN(^ls>IFE&t42Dj6VIAp zT7f$>LbQ%Vr6c)kJgF2_n2R*54}JX^)k@htn@`Lkkfl}T=@y<|yXih+sRD7zJ@Y_L z9OFyUZw6Z5PRB>tJt=*xilpz}QZ)zEk;(aztBFO%sg@qyh}yX<4K#QfM0H5}b1rHu ztOE?V^cBHGx2*Sp!`?t8m!9SwG4e>|q{@$u?`6u+lu}R)Kg7W@%fGO*e$tA$HbzC4 zQ>N=q@n{`R_FUerM2%y&&IDn9jGJtG%{=@l0~sHPyt^+^UsZH6Q}RGNy714~55b>| zP^Z}Q47%$>$AJCuYZpVCNcB5yzv_GXUqT$&XcfYC%KM(POQ}E)u&Ds=nB|TM_+?1D zEVJfxibU~pQ3OcCT>luRVp=6yaF7LbsK{J^s$`dR;uQr+fjZywY-Oq<@tq9a$fdh6dyN~%1h(* zUIvqzNU9(NrX_4gdsT7d7}rcmDubCNb!kE{q31~B6ml5~-d1E@uQ-OzBu2!^K9dg( zq^T{j%BfsA!;Qoczt0}fw}}oFL1%SRXD67g$QYqpvX>9!nl49BM5mHv7QH)r@fYP* zj@%74BIu8Z^@IOzo77n6gtp;Uq&`~qDhCT4uK&AOR!k>E1ApZQ`AZVR+kk=d(G9ryIb4)%`#~3e&Bwar#Mig}rF48IDv-EL# zDg)%*=O+v+5Ky2IwLRJ919jyyAN2eiqYN7F%9v`J7r=Z780nc%;a6l zu}7pwAmP^_eQbv?z34cC*h#-@AOo3PzPF@LQsa_OkYThN06vKKMKk0#KZ5AY6 zPT~4jO-AB9sTIm87TZ_wMVR>BT$v7Em~ixRoIOLOx$&{F#~%Vyr{Um3BYva6)LEm5 zsMC`U)s>pdB`338OeTbvcvUR^5#LGigY1gD@M2nGp?DLt!IgEbVP#Y~83vV{4+N>u z79}nLawn>TJ;}{hdMC7OAXR~pseagdf+&t<4UvFG+T~TtK~RSdXhMTfbI9NCf<}&m z4K3s4V?$8;Vf!1C2wsbTqKjyAg9z4w>Wfks|}D@KD+cMu6Ovk0EU zD@GHF#(6meJYyM|CCoE(#@^)pc~Hs|)xxh?Aj$_A21}@KEUJ>}P|69i z6;vYeU_AHl$jQ=oKuZdkVoGcF#OV6S^9bcL&;mlh$=}T_*_@*N;@+}8nHJYRJ1Wph5W|{m7Na%+j4=P!Ju(En_R7I*6OXacC2z2cwK(lstReRg|~a zIoMIJYL{~^s2W=Yji<|Zrmp!?D~{s2gWza_U~v#fxpZ>Wk(D>A9fdvw=-z?@G0ph( zx3Z)8p)!AHGHfEk9U-`(_{8o@N3(cdAu_>GLP>W3eu-k`P}B%8iF|~iK|%jh<+g_L z6MUFW<2(_JRVErza`TM1xzRWHL_$Qz#=H+-Zln$Dr{Fm=%PJm=xJ z!x7sAI-(|(LeKHDFQ>i100}Xj`LWL)GQKG+E(7TDt-g^RkX?De$~K{lE=`hRdO7CM zZUH#?Gu7d@8;c5l8!>htDV)Q|m(!nE$rM|=$<>Nwo5=VqmK(2;BZ9yfo`)XPh}}YQ zd|k=h%3p%=Yze z}!C z_!J-k&km-zoUR49KiR14Mrs{JaweBKKml_3Dh~O*e2=1j6HS4l$ea)hAWVN%SqMQ6 z`(1`WnDUJcL}!RW$(GPMmX>X2OO#OH!U{TM$!wVI}% z8~wuN7tx=`mPAyRaL8ou6(^m!-03M01iV{AHaM-65}h5A;ugSCLt2iiJSyKlTi1U@ zq8~r~l7Pmzk>0tn2E6E>+A`{^u;|QRG$84G!iE6D1hRv--1)>seHMn?T*^kC_#7PQ!C0~~8)NIJ5G ztXk&HTKvcNQO!p&ek`(3>Ap^odpxEN!(7+Q!Vbdwc~!fl(#AHua{l>4ge>}WrG2Zv zy4m||=kpZJF@a(_Otg5yM;+*_@I7Y7Zk)N!doj0^+x&ECMw!opw<#EDU7qxPWP;xN zD>XW8#8m3RUV;9I!;Hcs@!Z}24`};OnOjy?c8>pmwyaE?X^tPz=>M*B`&pSwCT_PG zrQ=rPiVLl{p-}YyYwRt+qH5azap|SILAq<%U6zvWkVff{Zlp_=mPQ0wLJ(<&qrCOjG}p$k`3Thrl0LHCFV1I zbx>eBTI~(K5wBoRk(3hM;TNb|)!*dS(s#YTf(vI!mv6!Z%jgRWuJ{l*!Xgoo2l@SvyB) zr#>!29(>MZ0?)>Z!_r1j0^_@ec5xiu&{Q4y39>6Ehl><%<=FS;e2RN>E@w>cWF^$- z2U~$n`iy<>=ZBZ1H9&KXhb$y6W@-=V?vd`JM~i*XD!$IDDAFA>{4}=KRq<&TBk)T- zf7a(@KVl98jxZ=r)S~`4zDirO`W53lnv^$jcAu>MuU3*McVYcjDy;kRUIhc7uKVf@ zjN1x=`Pi{hSq>!EJl5b7DQb>hVU*9qo+GgIjox2f^ijpH70 zX+f`RYB4#o;+Ta_8CKVIE1t(J9tQ)5dNKvW&O_@Oh& zy!V7MCO_1&YK1)p@n**wauSp5@Tjl3k;k}_w2pXWEK5J*q{<(w9Uh99SExK^tAK0P z&8lL7Is4^^&K<@0r+P4ClI#N@1rJ}+rXe8M@K**0JlKvc2c!D;qw3;c#8JT*MBhV` zPQ%t}2VQi?zr`G2tGN4K!-`emFge1Szt{pmV>R_v#2$9xIO;iFsi3kHKKv*X0xk~o zji_bvyFf|XK{=|?xaiNIIlW;!T(rq6JRDSD9OXImQfog|ZLg8StCaIL@PCjc+36I> za<3wDiG1NWy!#k^_fb`$M0fnxupt{p5j9p9%oh`~9(+*x_Lil1ioGm~w)Ady8LyKA zdFn^$Vb5Xl-GVEJA$J;OMW&Pb`72I3RBuN{zle(WqNEj5-#V~!9*%#L93Y|H1sP!r z`8?FgE+~FtDszBF*%z-Ta!O*kZ-h{>Cx61K;mWWBBYOJgsVq)ul5%Rzg;*W2y){{$ z+2@srJJ)QQJKgQDNXhGHqnjzPTKxqN=rtv;6*=rE_mD~sk7{vT*2CL!zf@KMT-~EI zY)m}AO00HE-y-yAA&a|;C4r8heVQO0qslv-W?`$Qoy4xQL8`GY@zKR5TmOzj2pRO# zx&3xP=EFt_!tr`GR#zb+9Hxc%qL`c#2a=6a%z?OlJLB6K>6?+&Sfm+C}f#RuggULa&zaJ)?(Yy2$3j z*q|a?i*%^7Fov|N@X3vMW>7qlGoxvx5UP8axOaQxo}z6%z5ep}a05%i`cgO5W9XKr zII=!5hZu2NKhly0{SHac6#Y$re1DUwT{7$?BpqE2gD=^@sHG>q^8<{f(^clAkxhiN zTN<0_4IM}^%33x$xiMSBo%+t;1EYuPc_$bl1pY+ULP$VCz<`#-w9V5O+PQS}EZE2^ zNWm9u4>r%0ZOo3C(((jaQ258-s+{^cZ^{+U!$WYlh(C>UD}Sw=8DbayoEXkNe*FcO zSr>>nL(DPq`XVs-u#oHPyM(2=VN^irqkeARlIa}#ue;NI z>MXr>cjbVECVm8hMc@c&ahClO(*SS%DEcss&l`oUMZB=NR|MCysdxEg?7bLzW_&7}Co!d^lK=E%yd;Co&mShK&w5_(v{1gKN zSGo#Z!efjNEmLLa>StLH&Fa^*JQFI6?;;!I73sI170Qv7Oj=*PIkD^>{jB>g1$2Nh zc0S^CR6D##&6%2rYA!^Y#aU0gjstrTj0*#Z)~$X>rI^%m;t?Ev8(Sg?mBe#?`!a>v zw>0LIX;pb`k648Ym$@8`51l*nR!(GLd1Gt$+mvR5@Bw_Pvw6_^UEX3=ZeXvS-S%By z=n;^(M{C-ZQlH0Mc5zd0^+BGaJLn(>rSlMJ=-@aN)i--GzcM4FKmrq@TXI2{tic09rC)Qr(~R5nm+f!j=Kvr$=qiB>)%x9a2IC96JVLNd#yBZb_eEA$7fTIc)r6m zZx$oD^)xmEP1R7R87` zLSL%?ov|=j3p2=nu+ti|it@aQe2i-WjP!nRMS*Nh!6x2B_5u)qZb_j-t;1gVVI*1M zZl%5^ZEDS#Vne-stkUN7ZD_gJ>7YY6g$}agT3W4h;pY4LLF|SUGC( z-C&BmpY=;(3Ri*%KB+wY%y`ABAf-3dD!J&QTEOx$MeH8>q$QG;fT_+qbeZjfs$$7_ z6-~Zao+eVJp^Wnn{V~5{(9cAfy|hR@7rPq?f#5Y4#|P)JEouW9j|g4hA{Yh7xco#W zlic;PzPFRBijm@2nqwTrEACbIR?kCh=^&crcMP)99ela9gBURRkow#C!!x5fl>|#&~Qcv3p;ojK2t` zxmW2#dQOxvHZxp?oum$QR0~n^MnMrha+2Vz*O)++58+OB*H|jq}+A1O*Hf1A2EB6XY&?90lzH3uE)a z9ZCSo&5sT{T+>edGTnJ(-Mk;d_B%8JopFqVDl_Sum}6?K;teUHUX#!yaR8HDhVi146It4q|K;hA0%@qHleP2*}}P< z;BL+mJl*w3HDF~P=Epc;Hk++I$3t!fm)k~m$?Stm6vdKKD7|YQ4_R&2^69gTkZJfN zIf|t2$vdsGG#`HCYg|u$+@13j`dk9Vq%&1y#O(oi2Iq1IilS0OIoOv2&_)%9C-i_} zgdAJqFGlDWrqEm3k3pnUHV|^SzQ^*<=UKW~tqa+t8u%CZP})O<7=GejXoU5ad_aBj7xOiB|k|HTL<7BT2Mk zJGUi5Id6{;x_e(M4Z1Y>(6r?JxGJB?z(^GUmZRh73XnwnGwxkIHsnC}rIQdVhKU}g zd>zwyH1CayDYCJs%9o@;_u%|h(zueks~_ckDai*{4I6iDhD!q_# z&99Ms`S_)0%22F9tTSlsjKvLz+HL0f$?MgbY*({axQhNn0cgcyB{!Dj#+~cOFq5E( zI$7`cvYi|rLLsieIy76w0K$;MnTjiDLUy zj_;MLJse=Mepy;NAl9IetP+6wMAZL&-I2tVF?@74YX44w`4rzuCT4N3ibj8SY1~`M znKuKO)pe1J?@U5?O&U8?86|Ih&(TYvOpr#*N#$J@R7=pcRKMS?tf+ zhA2skcY5UR*U(-BYWH}KR0>_jCzdrG^Y@4@RiBVM%Q0-fcYHiGx+0Nu+UT{>@#XP? zfXmtkW*-@oE79y1BzigUewWY*C&jc=p@4e#7!%Fdz<{7j**3{z@I_CMfS4oKi*!0)uRWf$HcWzq#tg}`4-_rk4{RtPC1IJ;B5H0*218M zHeubfWiHxt^MZ27TtC8PlT7P5%luW%+m?=jqASIwTd{H$F8^R3@(cDE4F2wf_5D~w z1P0g-N1^Y(!Jyx0Q~!ux1cTwOaAY>PA3gvZmP$f;KSwc&JNj0Xw>x`TGrGfx)=9Rf zW0&!al9RC0^&^fr*+ZqO3@Ey^ouc?)!#QL7%?hRZ9G@L}F33EVN2PJ{FpzcGmmyY- zl&`AW(Ht^R&|1t5zUsa>ZF@ggV8!b3N_8-w>=iNJ`4-0Y@L;|(VSUCi{;6|9t=?Net+X~@ts>Pga%1o6 zcAGAG@;>Bq%WhE3FvG|=xUc4^*+%Ks3q!I4K4>^_OxEVIC@0hlq%L=ptgAO~IzH#S zqa;_!wH`%kaCp89!#24UTO=Vha-M9GlPh;lf!P7T3`Td`+5%tPeG+O$t#RZooAAV9 z5E9JW??5N&{gg8_DFPVv{{2C>Of4d0Fd<(#&&ZY&g8-HD)11jeqz zpt38Ulp-(i<)rOVuT`(nOVz5fam5beXZ4=)o6y0x&ZWj*KHc}HiibGbp2@eRM6lpC znD!tqhC~qKVo1KS^Qr&pS8X-BnWBm7(q=jx!t!>3eA-r}c+ON1Y9b~WYA-cMUHFo9 zk@y2osPGuo2v$b3y{>yJF{WrTE+)*u&p&k6!B4cMSD|_KsjE!uqwFw=%+Mn)g3nLO zX1tmE_p)7>XOXRITrg4-ve&)xWMj@P`pawx#w`{JRNq?Ff933bD-2HKNVFb*KQ%5v z7kqiY)i6XPvzQMFPHP$`!o9Ep#uOEko*|h`A#TY^s!yF0NIgR{GEH!`|KC4|jmMGX9eD5(74J}ND;HH0BU=2yR9oxqqMXK@Uv>nFM&v`HAbEyrQpLobFS93$M zkibR{$~US3J%Sa1S`=a%BR83~gl4VvTwEVwplL_+G4_Ek zPH*}93+$~WBxT`4ZD`osN1W%G&IuFLmmWS=F6Yyj`} zhokt;zucP1)#q&P=X14??4ps1G%pVeFp1xj+;N1jX+cj#9aQHFx@zKzCMG{QG?{SM zF7^s|wA|Hz-&upM%?Ataz!>gfI=wk0$NfB^1-;v|F}6YA&`xpl`g4yt)8`H?HhbYj>G(Tk~McsOAif3;*egz z3H;NKb?&LL!wirlVjuS#K8DxGO3ue}OBF8wTA@Jhuw`x!dM?f~K4C_$SJ|rc&7;*x z9umLumdOrD>5p6weFj5=lu%Jwjm@NQ*@&OTP6>ns^{H>alffTilgllzi<3E(vF=

UyLml?9@`jmcF(d~8nbaoX(9YA4{Y_^{cGRL2`3933qQS;_q}v4butY^ zJg{RjNM$-l#ASntu2fEV3HWwa3wE)_#9~u}s^zOpM#ZiIVWMh!$(_$HNb|dTlV#+O zstdwDzQ40tRg%G(pXLmv7UQ@Z1Kr;=S(Uk;W<#}~GhqCDXW7AU;{ZG*U%#Q!5a<2a z5(bOJt1}$QtWf&thS!=E`vWnizib2DZkOh%qdZOUADUslU0-2j%g$NNpNUqX}ZNiC5v0S=}`Bu(v= z+DH8SDt#fF{eC%OzDq?6r-j(!*YaO(x`&2eJCmJ2h@P`>o7-QYX_d;L{Np?O=QI1= zy8ZprD*Ok$5sdhteh1HlLnr{G$l#yncbj(f^!hdB7cYR+|TJ&Jpp5;xD~ z_T7>J35UK{qb+d~1`45mEW4pY;6r($`_ZUOOb47w z@}I*EqbXSqMeM9&u@Rw$%TjU?`U4F3mKEbUR&M=K^!UDO?A?w+?t@{`W+qtO515bJ zM^ZHVMKQ!{d4w*4sa{%7XP^tXu-K{X!Iza&Nui8z^46SVtuDy`zq|^{R?9f?$!o?c_iY#svRk{i34AQ z`h+hmhDB1X4Tvl&hv7HzU-617din~i`S1d%htdNE+f}^o4Dod)-I>|imzbX&Z=&A) zV8w@Ln)7Y3&BqokdC&iC)9R(+?B#s{iJ^5mA$h#zjSg}DFVVZ16(3#{pTbCIL@oIS zg z$QJVk1|*rrV|$60uyy$OJsaBIIR^$Dxh$KBz9MRgkgG+bZac!8EKIUbsoV+?XjnJn82^e*x9nd#}A9hYz#d#4|~?axN_X^eB}!s*U6fumk6PiPn==$V$6Pa zz|)~(Uoa1!ex^Fvv7P(CwH}F;I34Uc*{Jn*K8l1}k4A?57t?d~>q4OsXP)7lC5B3`-@0UoarQ57c z2KM_CMLC^p#YI~kMtPfHDiI_*6HYXlLa|@0-s$zg0YkV50G<# zZkpAN&l@~v^ZVcrWn(ZwpJNk11m#&X8A*)DWXK`ytiHBx2k+ts-=O@3s9W2j=V(;& zXx~sQTV6TuI%NvROySWtpgDTxlnh_J3B5KPfBF7-N{u$g0_7Ufmz#3UltE_Xxgntq z^UlQy5j{ZBj%C&h4CCA62e8#M(7f8#B8Q~QZ6mo?ta_*JxPGZH2ccKR=-O2QSz<$c z9ji`APH@MBZ^9U2{lYXYR6~Zf+ofo`JVBXM{hNUoQm++^OgoO62pp4vbaSf9=f|QM zUH6XLXVcamt+SyI?gL+tj(KL}HWUvYKj`}6gDsTNz7lryXub=hao_m!rT%~fPh0F< z4SB|6D(z_58Jck-7+jBwZ?8+_#^K&r%sE~mS4~j4GR|u2$3vcWuZ3&8u7R^D4`1)~ ziKpyiei}n45o1@u7hXG0?(y8()h*uD5Q9;8J;Y%P9U>lnl=#2} z$(4zN)K%$2yZmGsSoTg4xV~uZ{<3u!;XLwSGKCD+$Z6CO7$#oc1oRu&>Z#?fd7$FO zBE_~FO*y>!AabXR#*M;#mOEktzO!4EwIavQdu*=>zT?LK!KlB!PNi(#1)$pt#s7%@hLCLSGf~S~Z7hnPbg61yN!eaQV?1-b>07Wx z=;leXFSQyECA+qY!9z+%C*wrMS6nNE3Smrw!@N0OK>AedWQ>XD<7{5j?5r^q$Sp~m z4df3Z%j!PKO^5agZ4-+*(Ik~iPScB%&01B&&330N!oCIc20n5t49AmA#+idCA|%rn36&GdNSA%x08rr3a(7yc10HD#T_u!r)3B4!H^l zXpTPgdgBstd=wZ1<7(qpBNNrLuV zb44MMPA-t-JTaan?mg%zw>yDRBKlHw#fDLW_&lw9NH!4tC{8U1a&eok&X=*;>;X3G z_e-_I%SWTpCSn!ki3xE$Q;}hD0ZuCpOs3T5@7e1deB%wW)OgQh&azy~ZPa-7d)Skz z1WyT1N{o1`_aA&4?DW4u5t~G|hA%iHlaT#3SnxysM2>-lfj=f#-%(QVK!{n5s+F^i zhb=u=_y<5X8w{ue)Bu9`b%78N`bSnQ`3TkqDAeeJ;ThVi3#6#cR~<$dpVK%xMzG{1 zpGjdwpqpV8QK{+&aS(%nR!E7JkT8uk0$h1kf@z#L>?tbq!cCA;R9gb_;maHydSXjH z#i&eLa=h2L^wyMVdXgpKdM=K)$|ongZ*@3oFU3K_@TeT4w}iBLv+-`ZHb}kt!3SK5 z2SALb?&NG|4)0(D*b)f;1cc#Jv-0skP!55&vjLdl=1c$$WML4zPXIs(zs&()gC8>i zw2?tzI1(5@27kwaxZTeMz=8)e158nb1O&d{rzQjoe+Q}2qW@i*5c~rNqBJlIKnF!g z2=XHnoQ?;82RGsb5W#Oa0XXmx7Jw5n82Gz@AO0J^3V;BCa8pi10Z&)~nkd3h=#NY& zU}0f6o&bOe=MN}6qFy*17l0ammkprEASeXn_--@f(=d0la{kWMFCI1Ath|2k=*117 zLju9a*#OqKkbh=|!?*$Ta65JYAtB@!R1Tl2xw{8F;y-u{JHVEgU+{mH{d1Z2lYa;z z&aIgTLB1RZ;65=>81&bh-=EU*0qEezd;ntjA_u?(kN=;fc)&e@046xUAmV8#C%^y& z1Qmdn@dFItB3uA7xGpz<072ug`hIW*K>)IF@gbyO3jq)j{6KU;sNxs-f^eSi0?Ob7 zNb~Uv{>=n}l%Hz*Rm=}hnLj!ZhCc=(m?+`~=o5p4p#O&n2Oxk79tA>>X#zpC2o)ZH z4g>gKDuD3+jK%yV7=93(2aG6lg$Hn#0imA1%lw`9CpG;1@EFifrik&s_rgCsAxcT$ z1voK)1^zcX!ti1+00dX(16a`mA%EBPH|P97_>=%bB_oJV0!Ie|w4@-=|5-NwFTwrj zJrMq%+W60@dJuj=cp4C3g)ad4s~EVc5P%fnP-Dgppdv(M`im<;xEepeltlpiFH!%O z(gl8(@T=SX)HOd8e#H+k;|2azC!z`erDguVw2Uwz(+eUrQVIg7O9}jMf&L=ow=REJ zB>rKehJb+ZMJ9v*wZH&5Fcc*4x5R%~uzwE`ke`;0zuxBm`Su(bpbmx#{JU-Ztc~wy z+W`GL!WY6X3^#=Us0n^O`PKSC{P1W9zyc~D4E~##e~IL;!3Xqn)DRbkn+pTT7bc>vT*d@?Sc zh_Q)>ANV`!81e&&>rd+jf#50v04HJ~RQNBN5#0rj&j+Bw1pQPeg1%-)#F#wC1Hgb| zLjkHF@V{jCE8{PH{jwzeqmhCH;89S3t&|Y-U!CLki@${ZSAzllY;ylBMi34X1Uz5{ z{Y@|AzvTSg@JL%`o<|L^*K;Z4;r=K;u(C?UTgsX&5Y=s(I9gzM!0ARsXkgRLejA8>{+Sp44S z0l_udFv;P*Y?wg!Isqmtx4`eI6BzX8WKjs@w+Q~R0few${&23WF(t&*M4}M*Ek=kS z^gn_W0K<*hFj)}XKZGN*){qcmmJ)Fb{Km!u3H^smf&W^?Pt39!QdUfUq(62l0fZv| zC_+H!XAM8?Q8lmFFcnF;p?{bF{)Y+ZZ=V0j1oRgZGGdrwNZ;pBA>x=EjKaUh-e0Zo zch~(>sUQ$OAdU$_5~!BIbU?xt<^c)o0HGp4K@o(Tzug2{vog}}vCFmH1R z{-2>#@H>&;8wg^5@z0zWaRzKT1AykIUAb5V69-xF7era6!A!Ab4dEk+C$J5L7Z`-b z%K4l?bmPatJ+b9ozL;wZ?I`^1(8KU2O+#8k&)YxbZ|+evoj7`or)*W&^EkbTJhxPD z-&|qwyL>`ysC7A<#Ht26I~g6NGktV=<=u1{aM8D!1mAttcwy*b<+Ro`#CS*xeJt!^rDdH6+ezNsElc5;M# zoyBGT(;PD0e5sG$u`lfE>%cnSw(sh?X~V0lK0edNz(bGEA(gyh;)=EI{8L>?2bnSY zbacskMsKbU!vB%M!2UEk`8_ow)pRkw}ik`-)Ayv=TiA<-d)PXvuSt~?frKA z;A~;^(c#w}O}6X7N4Z5Bp(gu%@#-59+GW>`V-GY#TedP^qiiwP`j=CB63u23lF0Ff zHt`*sz{EC~XQz%a2VCD*E_W~`9yU@XMnXEjO=_XGM4l$*qwm1?W5Pg0-E>Q?{OZG3 z0jX?iZO#ma-gN}V(lg=Ca*-3rcl@??4bMVGaLj0+h zQw@~z@NX}p7pXC3ucCJbC+U#4J6X4vM9%cX0QKMBQ3{YfnbD5njSTd+f5(+G&wIkP zRNeZ_N@_OCfQ379#!ttX(EH0qi6Nn9{V-o-i!=F0O}2}LYV2IZEA_yVNb`D)d+o+z z&Q)*l_qPwX9}kK9*M91LEaBOub-gk{*Z6I{bU(|;uUO*xpsl{?>PYr_bF8n>at2nG zV!XY@{y2MNZQ95g^IIu*0)CV3aE-|_ic12~lG|F9F~x33Ee~cFf*@x4jQGeZ9?anb z!o+Hp;C2LIPbFbAgv(#Yd`1ZQ_e^Q;w_m*;jjk<`=R;(t3N-Q1dWPF4yOCC;v3!cGt$e zb|?38?zE|1rpxnI5<}mx_r_mqpDElvK?t)g>E0gV!3#yQb|)VqzPi8^h54;|3VOIW z$tZYJEr||4A+WEFuhDNx75xSJ=15gm!%KsXBHRa@9fS_et}ut;S3`|^lwD$3Su)p` z8;+N|i&HM9f+meVAD?1ajeLS6O=M-Dl23QP)2VGhe`tF}8he~lzMNvr&00@{tEp4~ z&?PSNJue_1Oo|Bv+^ohpoS?=Hr?aC&)taEjNmhzD5 zyV@nT$PW&Rs2zwl$ofKopAy24fHu0h*VmJY3q5dt0x1=wp2z%!*KZJuOd!?XoAG{7^v zD2FGElo%a!=7k(k29ndXOY4UU-n1dFB10=2+GE#t(w(-Uc^cak92*VudDH|-j@8hY zN=%wH6pWdY`d&IusjNx08t@*@pa)5dTO;N|oWeL&oXf85gH{>ZnqANPilDJKQ%~P< z_{sS{Y=J3Klv9RmgCcp>`hu?C;9nY!1CjN0G({UvvgjOfoBZH2Hu{QOvxFU22wFo42T7X8$emYQ6ui6 z5Ld0fT<5#Bt{iyAH~hToP;&Hrkix!v8IGG58ie){NO_E!T%Jex-hdUEbOSf4gm4g| zr-{H&?BTE4Rk?6ik1+HjIeJ1mb0moEg;r9-n zapf{J^RYBL_jRX)gs=`8);R)T;)@K&uMxhxECtDN#}qG$#?gcK(6Mml&>1EOjxc%Q zFw6{M89ZuJ4v~BNSk;cMMvp66aRy$=;7F#u!--1u+#;)6VV3ZWp+T>9AC@W|drF459=jOE$y$LfzxrC(|tq{zU77@%wol?HX!I3GtyJKsHLq?X6 z?nSjOxWSb8M$*YXg8qS)8v!(tp=ZG&kz2KCXUsf$Ft>*%JBvZI2Y;jF9z)Z@QE%j6 zb9k^Svb@^PF(dS|2o;InYe{ff88E8*br0(5n22I`3-|#+KOfF@Z+sSYzSr{*#wZwo zM2#rYm%>W$&UM>a@iEGh!1J2AhOJ>0nMEsu#4S5ZoESwyvij^PtUL3warIG8-!vOO zBOo?s%t;ysLFNh*8dpBAc|zx8gT?zMRmdk*9ykQU<;(_SM)4*fO_X^V>~|Mjq;jJq zr8223g{8y>sR|*OsFY2#a64yZ?n>Apav0NQRi=@lIsW=9kjn<%hYs-4W9_$E;?iy& zhCQgCj=6&$kX(->KcV3M?C2=cL}EH<1-teO5V}sv*8ZZ#h!C?2Q30bF!*hr z+wC1m3LirhsGbhsV#K zCEdWtjSAVsU9OU1h|YY`o)A!w(a#~$W>H}gKqOFWLAe2Y0qm-JeC&mHZmOi2(X5CQ z%5!k17zK{Y&i)C%olA8km1xBcY#zwo6abPSG4%GSMkhAw)e~HME9Uc5qEP}ScI73B}*Q=UmZ?~PzyEeY#Z4Vq@m>5p~fC(5m!x`0bzN$Tu)?mG=~Dx zL}g?6Oy3RWNg7KDj`Y9Q(NGVEjNh_W#8N=(LYli}b}iI@uFT{sk$&%tCq#?q;Gx}Q zDdA&ahA2Ownyn#aCUALy3}PhTS7%_Oc_w+37av?Eo_rz0{|bZNt!g!FcW`mHs)Ys*=8=qInz z6LO#jTgF62szO73XpOM>cDoiG$<>klwzQ4_U>%d34qV zS_#wmxTT|CUJ>?N|1<>t{EgR!?uumkdwYNOW9sd0V1DDQz2;af=|1Wlgj zx|T5ary(s__tmidBf_83Esbuv3eO5_9>0C9KXXL2#NvRnpY;`GzQS|;yKw(4=HCVd zevt5g%nX7*AVfgOg1^8+#_r8H&j=AbB7Xu~u!xoeHbgxQ$_^qHbShKgQ<~m+kb%)r z;N)bb^b8TkKCzF(VY(z_*Dz;n#-Ooer8tN)Bup|I^02_FKdiHKNtLqAk_Oyn;YdwJ zxs{;*fT$`e^@$d+M1Z(AI~=MSmT1X9T&|dk$CA{mC?8{H{FqQ1CiKV#_M)ZZO$APT zZw~H)lSux1oQ2D^_ns(_eiR`^Y85EX=To%{whyL$o+)dEk|SXkB)<@XQ)#qzM}b>>eglEpzVc>h{d{YYTpu5zSl=| zdnv{4OQ-d+(!@!W<5U(2V^HoLT0vC|=kUI^_>Y~ z&)EWB=mzQXtQJ=H!N>g~;p!p&S#`*8J*}yAn^%Yr(dQlZKAu(u%oozV@g4fg=U?so z*4Y#-P71)g2l+38OWTeL1|6@)1N~u*-WqFdC1nvLzL5f?SKQ-JkuOHG9oVy!%EvJ5 z61^T>+qyMm16cIs;c)bxj0*G9UAd6TNEJR%#*=saJPEnn)3G4pCQ_X@7s@^48 zF(lACmhS3Sa?V|ufX#y!?Gt3fAJ=XGJW<0Sej9mCk`f!qZ5O)i-uxrrrC{ID_rJA*|n2WZg$G8+0g_l@&( zo00*z7jgQLz%X7Zw_B11JFcjb<La`~~7p-9!3{;;;C1685=Aa4KhW!9K$#6N-Gl{1qG^a*lxx++C)s(x-nlxE7cz8anG-y zH0IAUe1i4y#bdmU56>x(zB-A^9rPcaVl&PoDc{MFQ)i+gZdCI>Fxx{Z`DpI)O!q8z zc_6gTtiF9MEruL&FsUprBBshF_il+?Fj z+9<{vZ?quMNYk0L5H>^zy5cmoVm@y*^ugF)M0pNt5jJX8I75X$X%#S<*j$Klau>B< z|B_A5*tdQ!&=F^CH9+1u-GeFr7>9= zxr(%yV`rMjE{{mD428o=HDplYK6J38@8G3#((2j1%=|>wG_PDM75x$m8d_29UfseI z5Go2wZSg*H-ahJx#se^&sbjZb*435};q=$$?iM2;rfDz;qQ_jnQMQTIU4ZQ8BD^)4|GPL~F<3S^%orw$xhQDC<=w|xISci=2>cDKFnXNdcwF41TD|SDQ zGFBPiY1KexdG)9#9*igCIW}Qd|7|c8f;*aG(!hl2`IMY3t$YlD^bkQ|WBTv^TDu^A z|JVuRQ<62jBWTSJ1qlk9BY>OC!Gd5*eyD)Cxqt;f1Zah@oLUNt|9|H|gdAwOxFC$> z&>wpqeD@9c=@Ak1#`JIuGfX-d!uE?;{{0&6eWqzs3?p@QDY{NY+^4?v8+WB0_CIRS z*)pp3rp?sGG)L@GhEZ&Upjn|tbhFc9J<^MtCRNcSdg+195K8FbtH_DPOhtA=08&%N zAD1x)F~4bN{B|?mm+)?|X8iQ(X1-=foGm(MLyZ@dlo(|nkEIJ^%P}Gmz+6+lt&_oS zkR$m?@&v)5rmbqLutm=FO;yR2OwkQe0B`>cdPHmD^Qg7?Pt^xJXL=iZ#0CijyH;PY z#&!&n{J$7jx_$c^5riac9=5AEnG)8lCGfaely>;cVTSsw;fw6fOtJ%mpAr#E?_{ACoc=s!@1nnhxik2&%WZ#Aa`I?E_ zGE;&0%;YW-^$ehj!!z|QNv(-&&7rO3reWUdjBa;sn}e8p3WNi>WHK+t2l<5E`_ZJz{)1A z3icXC5`jsPZ=j2rC5AN-P9shmwfVGj*00_Q=L)M_2QDMKuKZ3<77@Q7w1eh-h~yw* z)RysgTDEhW{68sE%MYSQ0XYnxV7Y7!I~W^U$Z_2)J{T|$IJ+h5r{ml2(+~4OTz;eg zpYMtL|3_k7PK&hxH7dBBF4%%FVxw%x`dU>p4{S<+edMhq$T$l|FL9DlOen*Z2|`g1 z#<_HY?KM#BrD%&VaLsO~;#+p&Xj=$3Wk=B^B)8ky{n9Ppv3opV}wG zbaL~kct_1Y)F$CYdk4^aT;aYA??+-Tn|=2)b(f`9|2yIIg4p}AxkD>ryFj=5e7Kj( zzyFxQnwAvZxRsfW?Gbvr48V=9(yZl5UQ0cTk`laXhPHwBD4Px^h~y3G>t_41PUboI z*wejzSeVuQmea%@mq!M#SHZ2(@NlFn0NV$g?9-}YL7Z!%3kjl+Z8UXEI9FV6K9#Ce zOjo||Q06PK9Q)RqUK;M{ck=WdUkEJh%Md2DNLZYsV0_t_i#MpqTejl-Ntqp6te28p|2qG9ehs>7X^NyBC+yeHm8$RLHN(iR%$SKIpAX-}S-Mz7res)dJT9`Jxor$vSV}%E{kz{tWB6i>^D?;}+D~+c~a`bjjZwU-Y6Zu)!n}Xcd1IRsI}=arWMbQ#*mfqo^ZU;E&Ufy*_m5hu`{}2v ztGa6KuDxsb`X*)jIAvWt92gg8N+O&%P<_G?pB16&TI+@eJFy7*k*`d_v>>DC^mi~p z@E{l1qD!~6?!&cQW|hI34$M<%2?x2$2|-_A86`Xg2VE%vxxn=!s2VFJE<|9VEAf_lnqsn>7(vW3rtvD4ORlG)vDK|{!VLBRg@1oiY(UU>u@Ss8t(Dru;VrRB2O z)u!%iUb=C@6Ad&s0{f2%bE|~@Mq8JNn*^g}9aNoET)gvBQcM#{P!nrI$WRkD=2%KC zU))Ry>m>wG2oqV&y56URU!Wr&msTmeXy}b;2zQ8J?3^i4coM)RT?MxdE|hMwvM*5S zc6L)(6pFszs?@yh$y}a`Y8xR%KP%@V$N{qN*YGGMfsmT93?rPhge(xS$!|})m!`0< zQEYfsU&`F7bu!~*GpFVX+3c}YIur}qvkYs=0*cZW!M;zL_shD<~uV29vu2iRUMAmJ93!1JMrd z6nXbD_V#b|>s_9i0@*9?g>n;TL?rGN)LKPPpK_iT#IEoH_;bmfr>ykC)6XvE8i52r z+nE>O;v)dbp*Ql%ts!+yL>q(j2FhYtX9X#gJ9WqFMLs@FHMO3*K*7^@n27sA9B1Z; zgU@Hs-+qpR-idnBK_`mx@WV5qMfVc6p-Bnw%vp)J`}P?!_6GB_=sr=Y6b7tW5O_-R z{PApPhg|Ce^|nPG<%beu9Xc8UwRV9m6FKc>av=lWnpv)>)fuP>OhErxQ2Q24drx#f z3)d@?Eg$Y3d-82rMO#0lQ+Kge7fA)#04%b5&HmEuY&c_Q;+oksy z2W@#6IpTYZh`iX7s`D5ZiOWb=L6RlbX>>~Lhf@v$NaqNaKV{-07iGB5Gf~$!uLn_h zdwWsfPw_m2N@zW0L2c8zG?D@V@4}!xNWpec=DEkx+#|Q$+qI=tVU|uW5cGT_3IuIu zM1hZ%fR{94?)QP?IMB_;WlFyY{X&=HKLtD$tF7NjuDUhw#ZC==k!j@$vBHO`>AiGI zN_riO&izz10*{a!kiE{QAG8;>`Uw455DMcDY_O^LotJ;;HRvG3|KanBRt4_p zP`IN)X4tdl>OY1KQ`s;pLZ)ul!MsA!;|DP3d6qumoR&*eC_NmX#Q=JvTN&oqcDhzW?resKU<^ zNU-F~dI@?uk7(eS+AY_mAJW*nV?wg!M08*=5zkwuWoJL`Ng%)|3i}-7YFn=_R0k*5 zudZpVvDyl9i1rrg{XQ9zYGl<54qeUV9Y-1LmMFqh*Xt6%x7MQg?d_#BR{_(|WazWS z1zUbA8g7I)CA8EirRCoEiGg+7L1b$fm@oJ72e3H%)ZMC>yaRo5k+nd2D_V4^n@$30IJ`9y_84BMUTX z{Em}MWr+tjApIldL~(FFl{yJSSU_QM&OA<7Z`KJ#Yu+e!q^@OVg&M?)0Ckgi4eujFM~ zS$blXfIz7RC*rw7!5IzoX@g3Mmtkll>9Zkfg019)X!J6!KsT<1_84);=Pi3gqWdn* z?ALv}Jl}xrc9#sbo0U&tnEDP0B!^^Wlibjy>(|aIEPE;U&zsFCjIWI+B zP9{qQi34!aB*%>-9RY`b@b;0Qis4GiXPHJgJ4VgT%P4EcubZWH4Jz;S3!+}cCBy_M zM%R^;R#i%>ZQcvxM`m2%JO$4O%ha;RO*uri%#%?QmyUe@{n*nMcHa@>qv61Y^wZa< z1E?|=p<*9=^5ker8F8NlbhWna5l z&ppE*p(nX*+9hi!4Lsf;s!^|vGjM$d83FS3h9bp#9eB*gr^>PeRj(Gj!BVnp!p*+# z?-*Pp>fv`Ya9S^e&vIWH+183oA?&j`l zVdC)5k&~${9Cxd15?DPHJ}V0w2@A6*@u*Wyg&D6t2m>c0o3 z@b01^F1_pe0~_@PvpbqgCrA;P zioXleRO6Nt%&d#@4QR@_Wm4bqG80nxn>2YAd3+?`;h@n$>&zWSQ)=F@BJ^@L(VsaLr)N9tSh)}y zsJ0O_!y`3e(!L+9|AJ$rXgZn3oBXv?8$qTg_!@yCnp6$L&z@7w&R;EVlMLLpL3KwF z_&IL`-6xD3lq)9E_c;TX^vi8p>?R^J4`I#7ZBjB7PMh&ZfBGeZ z*qnLkj0WeT`yubf$`PrpQq8|7^wn|2uG(jC+E9eUbudO5)z0+9K7^DoY8uM$q1s^l zy}EXM&8xzdL}NNytU^{2OceMgT#*NfYAnvxLCN}DLiTJ<4mgLejPH&cb!)gZV1m*N z6iPm~Pc$IWagz0C>iE8W4&tGV6Lfbxn;Agz+PwEJ-S8XzW4x+_A4rdO|DvIB0D|%4 zt6^!ru_n75YmVqN-Z7KWeaiFHs_5mk^8F-w(?HHO??jNDc^Sb_J`31|mi*>CiIC{& z*lwg!1k}n@cU*Tv|8~=^7il$Ss%BnK+pvnEV;{}HC5e?y7W0ullvnAtx>q-*)X?8; z&^ctHw7J4F={&mC-$^^6U^}_3cUA2H)w$wV2XH-CP{wR2l9H+23w4&|fQ z36le9V<1x;Pi*h3kpa5V_i9A@Rak5+8KQV(h=;Y3I8lYAu>OB|aL^tevkhL%OK`CpTU8qG634@dG|u$13tYJ z-9PDELQCNE7iq<9X5RO$+p;_p`_^v8PbYl#WS0_i{a z){O54-L-gl)!`}=<=WoC0^i_XGFGy|LNX|mp$R})GModz+B1-H!BFT}S-Ad%Q9?rh z!5yA|gA5zne}dc@#y~LqjQDskI7AM(|3Df~Mp6*`x^9M1207~Sfy;JZ`dMKN`Nlbq?Lfk z*e&G!qvyzZw}UgWh4TGF%#4k}53>VD!$rTr{6o61qw#LnEqXOT;#|Nca_)k0=RfWH z2c8lCgU_t2JQ*b6&=@JIsC{6pJbz)3CWANvdYX}g_rLqa!NLAN;K|C$^54<_jh-C5 z8A-suz0$XH+K|Hf5c*{*#254Z=nWMEQkC0gUIDLF#S^|sk|e63q=tfy!eQm(QO-4d zF=zKM(G?4RpukdQ`d(0IuDUz31ZWiZ3<_ivXrY+V=QHvt3&YS{gP z9y@N}pDcgweXXB_c{gh{>+0r|O!=38oUn=WZh>+$ovSO@Uwb3~J(tWF024skMMu!g z!-5IWx|bY9?N-WqT@<*2J!|=!Ygxa|+6_6a)Z3K_(D^i0=33!?9;NbjseQ1sQZ&V{ zGG6$MmN#j9Mc_MApgR3gz(GZQ)C#WO$72*dujkT^mgXdJDy3g5ncWZpZ7cYto?d{T z47?D;ObesYsmpUpt8f?ZP~(zDYV|Wf+M{HUnPbviI09=ilT;Z+;<`fBqz#FCQ)|+R z{rRqpLG}^{`N%vtBG-=<)hA&dn5V} zLyfjWMH0Rmjx{~qN>K@#!-_bplI3iTIgnGXX>51wTJjWob;C}3i%}9%QjS@EZG*h| zfYM$OZo&;7Kd<$ns3lW8`*|@@MscXyU|&3XI1pQa~>jHrdB%cA;Cc5aDWYg?0NC0&LGH zn!-eYrTt^5o|pbDQLRTm(Xy!Y};4_SyH)(|5<2t5o zm*#Hmp`;^5qt0vGCBw)}BayZQzyf#XvjF=|Q<_9{J=phZjiYUHOY|P-(Q2_OkWLvNmU} zHL8~WYkB>K#iy#hmIhH1emlK(f9HUof2ac~?mlm+BgKeQAUHhA2+a}IrSLiYRpE!$ zDjFw=)6huNS?4&pbLeK9-w92rdsOKiNEJ-6>DsI-`3j=aWG^+#fLERH3a~DHbR1Hi zm3{PGI+*&5HN5B0*D)DH%f0BC$1$pi>2)7h{OG1Cv%PSbU`us|Ml@f{DQriksq~t5 zEo|IOyduPbOe-o=}put&U40PML%cXFyv^(He zoV@4sLZ5;2=Z4d3Z-y9N4OV_dr|K!B@$)#V4iad?)+@vYwCg#2T?kjR=T&lxO(4IY zc~$^dVVLC{3#q|xDB7{!fuS*UY`c>`}9z@As^RVnA!r!M)sB|`gBh{9$=aH z@h-6T>x3dg^$#S11W3a>`m@rMA6!%N1SO=ezU@vsmv_Y^gz z{(CYTkRFPGb15pzxFQprq!?sGt6wFZ<0l5IuMe835nYhxN9BQ@HKpP~yM~DuU7Lvk z+`&@g#VVp1L;Y(Q@GFG4G8{+|y2mW+ZZPU8ROGE8@v5Aag!KJywKZvD1-)T1{8uRXV@UCL7=}v2gnck^3-us7C9-hbMfokM?awA7^))U zX!4Qyaz^ZYl%F_mR-`a74Znr-RQIfEV7S>mJmQ%8AM4`A*zxG7>1gW1fy}t|Qa`y%Q_l!MrrhsF$Aq4 zD`G;lXVVBVf(TKc9Cfvi-!U*cPvs%&sS(d~2a*;ka`?q1PN@ehu|H<3PwuOex=dZ2mkT;l_Zm<$(%J}sJHIvc z)Av->e6J0cyCZg^93df0C{+&IAvAFYg9s*}DHCeQ9U*LId&UtezCojWQIcHZTi^dS z#>q%U&H|keV5zhYsExKXqsxj_$fWqt96MC4w&;g4>_7K{!t4fNqITFh<*lJ>Kfe`+ zIPpwD%rtFKW1%g^A}_Kxm2waTMt!#LeY~Lv6N`AKWB4Nt^6Jsf%P3Tsfg6k*vFzIm z7{;88q_c&sV627+Z6fA247?T$hG*4ZoG^=5cZAB&oo<>J*z$s;_-RXG2+SbvOT@BV z20BZQkrbx_UYtM@$4=~}e} zYbs1gY6=>d($%k@)lKDO>nD-GQ$qMwVfkyYAq*cCO?^x-sH+?B3?wj9;kAL9sT zsc(7?YOu+Gk>Z=9hpjoFzz4Opm1iEfgP4|vu?0!7Gs#>A%piFVV&N#$j11rrlFXJRk zhza!0%DQtjNOx0e@|ro%O35bsD+)F@4K$Z`Q9^7a5y-=)7}v7F8y`N$Bs4GDkWg)a z$V6&{1#%g$FrZFdT)s)j=+t&ujwr$9w71a5{K;2kukmZBM)zujs zjg)o`Nv~=^^g7SiQS9cyq`Z+ebYed0xtzNxEctTumpc=qXOG zEm0&fu!9(WwH7VQg;X&DBA0j%A|y)9HrP(e8uOYYLX3k>!e-(ISwwVAO~5GHkSYM_ zBvXv)!{6aD6Z?ir1I^biDkwJ zv1{M9s@I{<4MeyM>&;tnjN(w-!e$W;J)x^g0C0ZLPWW0xq8>m|WW|!z&|t4)^e6-g zP8r$aPW$0U1~&9PeE)HLTrXN;Cl&xS6a~J7B9h@T&vK^ykgdu`q=#esS#6s!a~C~G zzx$w!+8okjarwUX2(IXXjowA|txPoj{TY7lgc=+!wljXhMbbiV(j)?oM>^q1+xOKn z^gSnt2m0z6D-;!e@2vi&57Ng11-(cX3k?|Wl|`gl497Ob^H2!f_s9-}sy z)PM_=Sdg4#-zrgI>XJbvaRc&z#V;W0wTxAY-!3YG)n1Ann@Lc=`54PdHhM1lxS|JC zcQ)D=k)3N<4M5)jyjpCyZe@Ji z!Vi#X+H-fJkf3MYFj8ERcHW9xyZY_DC1j;_FTyi?OEBSbx$3~1xtU2x5hf4lq?DJQ zkM_0&XjsAe%Bu1f^^n{54c3e2XWI9%KDxXTOdHBUQ*I{Bh`7bbvcX|eWHS}#$ck;` z+Fu4B3xsX6iA5a8xdvAO_th@Zt@6te9&*5npKeq#>9w2i=~@zuzLVUe_$?1|ARa5U zP#LQEbfGJXx2Puu3yoC_TC<^j!r+{P43E6x7$HIU3IKIj1A3hk? zbMSPC51=_67XmcjRX=K9XuqLp+-*heQ!I)_)F1vS1Xf!7Ku(PTvgB*j>pi9i5W+pJ z3AEU+IQA5}pmJ-YaRT%Rr4F=vj@MMw>})j${}QK?7L0=C(xZ_2`uj2BzbnPWA@Yw$ z$YtS-JB+5Etx0uwD3MFg0QD4p`jt$TYl-?pUlVj`4O?dDO8ySp?8*Tr;rskA_@T)C z{C{gYCJylbk)L=ocGJLkNm)t$C08*^v5|26OI&A`Vj=lQ6jx=IVkcqc;K=AJg62w@ z$C={&N7qp`fMXVQbaZleBVpzISAgVy30<837S7rKmwM01nz2I*Ly#f13XKWQ%E|U$ z^45}|<8KxOs2xF(>t1x0cT8E5(M5FgGi2Y80=?_)421~AuokC83wUH}K&pkR2AV2o zbjY*~fkE+Gd4Yb?FK7rY#47m#UT%KIuI32K{PK{6q+q1p5Rsk_9 zYlgNPrfrL_4|ifS`KSDb?ArO58ZZ3eZKF|-! z*2bUcXR{7f8By(2%5A;0fW94ajQm?E)3l$#7?qmWn?%B`h|#d(F1Z_%nV(tyd6@C(Eb)$2ImB{$p|#$$y6Ve@2<--`gAP9Go2g6XoO}!T7I@ zmj5l$@o@gv$mr`iZH!_D;WUpl5t`EEo^nUboc4oQ(=CN=DR zz9#38@^0T)OYnO-PTMsb-Pkz6-182@V!CM)r_ozQN(!RoH1g^(@ z2Y|=Oz^d)GpI<+XoL{1Ndk#bIj{-D){VDdo?{3@V!2UWbZrk6x`vYil9J&PPV->l4 zg>!lVBZo_^CkG8`-ETUz;`daeht)R;Q;`A$-T99cIm(J|@s^t~PLqxzD^h z6KA+Y;F&bnfBI=>U+j3n{{~~kVkx^YbPu%gB1KF>4Sw6*Mztah_EInVf(;6W4A zOtbD;uq!i&O6oL;?n}iCSjJ!j`7p@pb~4SG7&x5XJ->?fFo{9=bK=U5(fPMZ6p*&j zDahTL(c<~g0>2IXvzn%sJtcmS_QIkB|5QvP#IFVldH+>-8K4Ok$oK=Lk6dIn zNx}`yBj}@yKi)*1k!IY4MS`ej4XiHc1dJJqzz2>ts2l=`6U}FQ_2=CAN(Sz?X>Ci5 ztN^G7c*d==&>12fp{A;-EG1T8J&FJqBRCrLnesr7aZ199H7$`2P8M+htUr=-IzB-G zv&anCw125MiUsll?|ik=YL)tJbJEPJj?jcjF2&?bP+`?HGX@_Wj(aK!aFVjrPC>f; zB$iiAGa}eWh4)c=rryD-*SA^=lT(rJ$+@E4-nwoWvo0M3?L5DEwJI=xz>u~;W%>ru zP!?49$W$JU01*0$;Ds3mC+fq7S=ubk*;=d{FV$#nM)*s3aq;yN;iAoK%}&5;|}>gp1@A#NdK2qv)1 z5k+niLwAOPV%K>I>=9lNiUVNcM|ogi$6O}6)WGC}7~xq6FvDzbBdtUdiNspW0>ZA! zgQLIFsPaf7V?;$8wmB$iB3|G+`xB9egWS=p`0x%XJWk8Cr>_%%IqKW3V12U0tk}j5 zj8|+fJ`f~cfmZEzfJM=s5F9nr?p$w8_ehnYAbkP3UX>{m#=9wrSRL9%Y2AqVla>~} zjPI&Yke`&1?Vv3ah*l~pn+0;gX9icI0>AqtTqpfpyr`LeDZeQB;^HS=QtrDQT&VC4|kd=IS8nckcz!9wRU3+ci4WMwpJj$%{?V7FupoFXo`xKKcK1;y8jqE0GXC zcd$c7M9anr%e{l{nXVKc{*D4iK_mnELn4b!UCPh;n{?DbH;x*o7T>!Zt%bWn;ikH* z-HFRGxCii#7gJv3XJO#q_n)Iy%z&Pm5E?!D)K3#y?h$1$aoMzrYvZnx%x`0EX43^3 zzpiG8J@(o?Sg*x;5E@GUgGSIsHZ)cp<*`qhIilN%RwHZPMT3j0n0L}pWlJH(Nc;}Z zqc2Z29$&#KX2Ih(-i!H1$b3PT~8WvON$nsSOtJ7Iha1!yGf(IkA{Z9q5Ij zSIeIu-hT9Jk>uNF3vSaNdf$nqU++ghvwIk?){jKDkI);0kcpNk!DHiHcJw9#axgc&jkMG;$Mt4eb9?R6mU zxgL7nD&nFhX~rh*H&XafFKKDROtGF|0FG;PnH}9xcd_k~jPw;=oGCt@$6i4Th~^1D z=PIATvNv5raF!UDYJHxB_B1vAFJ(;qiXOt)0X8-VPP^l{bpRg2st>YHp5Q@5G!yG! z0b8Vul}Vtb%u)P0PW|O$MKMrWhm#=1oU)> zU<b}8p49XgbT#vz>@fY z@gU{3-^phE-p>rFrnobgtbDKx;v}TZ^(s4d^>jebj4dGyWpX`sm`cia#lO?VxrmdLW)Cy)r2a9^o?B#!Zbr1QB#7%!NhA4` zJd32lman?BDJ|YjydDV377I*iR@qmfn_j}DY=F4p>n(HxL?wD49PRA;knXKts14Xt z9p$KJd(@X-k(UplhsBoE@~AA+s|Z{K$Wl^XP-+-vpJ`x3K7S8>wv|}M0IXO~5amB* zzO1s>*_E+$8^VwG;m8$j_J1F}oWW?TkfQZZnur&ii0Lvp#d@p=F$CsM49An4J{yO+ zOBR;>3W=!W_;x0tNs;Uku6Gs_Ki3K;X4p;A(8c4vrD*Dai^QuU`km4HO3rqMo=(3J zQcS>3J1(xzPKdXxqj+Z@tg9d6w|vE7?bvUV=?QZeqVgGKz*!f0B^Dt$skE&ut;UA? zycon_1oeW_VJy7DHw>UBNZE$+_ILH0BeDI#3QadiDKEqVp(Q}h>KY!>yb`y?lNyW6 z;bG-L#(|xNG(LHnUT7nE-=yE0flt7YBYC(Vi5?#-?)~OARP#G z@CjhMX!}r~{7oG0vavmRZDbc;$^vJxpkmrt0MIIZ-{&xMLNNpKs-scdEJ?1bdY)W! z!UbnJ0T6AB#@E0@3!GRO7$=Vo%tx~9F;mXYC?WL0?I=li||U`C29e5MqSn0 z_;2GGeGsbsMY)t|u|>b4;h+Zk)feN#WbNoEGn8cmy6uB(@$ywcYHti^BdE zbwHrSvvu`V#Lw2VG|7R8qCRbfEMX`CRm=E?PdLEAA$_fDX6jy&VI_m@YtZ-<>BUSl z0V4jF7)a({*G}Is{$(+kEBPoJrVwWUd|TeyhqN<3iR?v!$|d;O+x1D2GN#U zc7&)|Pce|E*Ru8L_j|9Co`ap^ieP4!=kteB$m+UMh_{LHQ2hk?glBfi*nnesKpzTv z07bS)?p$cX95CogjwjbjVXCq(ns7*xxw6RNSDk9PfR|m{QRh8WEhT>zgQI=BiS~X; zI1{Hz?H-m!U@!sfjqH%3+d=OplxxfT1< z9R_pb_4jID%Jpz#t9JP~-T2?Mppx+5KD*RNLr}`LK=XqP(6z?D`U^To#AAw9@_WPKN7M#my4Ad$n&K< zi}^kBDk(8py_AMmwVKMULV~Ucl9t}kt^|^rF9LHO};k>zsp6)u6V6CTr zpPh3#dt;GU=M1o2PYNDckjW*)Q`=v5=p#^oU!~v^x7NeCF_X-@fe8uG+Vq8BM`R*e zfo<{V1lm{^!3T6_=RlslPVdIP_@}dagPRTd^I_)(-MT>;9D!=J)W#V@-RnBmZ?Xk( zr=_=59^=ziS7z17WZah4M$XF9P=r#IE}t&(U`x;sFQCgjCcj18 zpM+Gm_9Y_rI`X4oTW<^=KssEQ?IW&wAat{n10BlRlpu0=+hv~W?Y2wPGGf)Eb_FCg zUX^o}BIz@mk0K{BHt}nO`LDAebw$mbgwBe?^wFuO)H0a?HtzpS5nh)6 z5)M-36d_mi0j@2ZQkLWzB|$PJ!;Klfz0m&N`m3L*E)=R)?3)ZheOiVXv!) zwNKfZn14FGymxH3Tg6&Cyuk_+IkrX^S*NKSvMc>4J}Ng~Pz;xpT0bDoQ+S)-ZT6O& zDbxA`(-UMysINlKFp)5KF?O;14!+(Yl`N!Lsu8;cy&ZQ-pxb!puFL0Bk^b%=UDwEUmn_bm*;!x!wv!qb~(**OD&G->!k}WRZF1u8RQ5uyVYk(y8qR zQ|m_fkH5y_1x>*4c%^S;mXSd;F;%G6-dQdkZ1D}Z3#F4cBM=aPq2;xAtP69kVzIOc z&GaoKIujqGQCfXeL?cgS8%uV2b~84E3Gq zA}2Q8aZyz}PMm(M6q9d`F#Vts*ONB<7gK;x^2VY6-(IA{2q#wgE%mD(`?);EZ+`aC zMSW4({mG@d)x-o3d(`-l%RKJEy`K`#PMdab2R2kr(=le+3ZTqAd?{pNYHHM$ z6E+0we37d1cn?)yH%wQ~VPg8E@EYJ)h{U+uYp)II>-1F=kKS)yMWyRCbNO?ep)Wg|ezO3DHU*im$KeyQ*I~k@5{66ph*y4uHog5Sq;YO|k?u!a$y&94 zbHRD!J#eRsj?O+QJcFxnC`kTd(ru?G@xI(Y)uo~R86eR;@Bc1xazAcp&hx>-x6w_z zK}P>p8-FpC(6cn>S5$0h6<8c^v#9w4FS`0N23QoUb}ZKP9>tJR3k&wU0ursQE^+?_ zuzhT8|IonsggPF2Fnwb5@^Fj{f89soHw%Yp3mJ6!BP+t3J7z59GQG`!*L8+-HNAde zDww)6_yGC2lG+!~9abCef|K4Id2bb3Jfk~0MF7`G^WMV~-e7>QuYf}FsE zjdjEO9|$B2grMX@R?;6dcA@tWcqT^KMWY4OX2!%_DB>5T?_Tsr#OMw*#Jkq2V1Riy z30OpG5}-?`q$KapIhV!4n*=L)b5 zL`f*|xCgVZ6nz(}SXYFgj&x@Z^wBi^&;3{_3?ltv%Kw^#P>>IzL2kd%=v`aI_B#zN zx!oZh%NT?z#YhKQi{kl<=48mB zZM({qJ%xL7JojiN0AEl7JWGUp%EN*2NTHR;Rqmp`;jI#qVCP82jQM=ptUx*-v0N%a z(#7aka+=R}%f4`UQ5B#qb5;$}VZoYopg%`H6O9*0Fq{>8@arpV%k`luuK&|FiINc>}c2xzAAAg0mNpYb&rXZqezUdqkr7<)57e!ibxy_&VZoyF zIX+h`o`spkIoS|V@EluV6SRs9!dMVvhLgs0fb4~#fpg&1YQ`;LRimkfgHMNR*Hut2 z$-`LGU?6p~?_|8MO_RZJTWj)J3h66jt%b{$SaHv1p5DNfbwXQKOww^j?j(YfqF1%0W5cG1?W#-p?-%YRDB%Men^eE z|9WNpL)veHh~pG-C{!XYtl`m%s-mLI5ZK1MruO{IXB`V|ICex?d?Q>F&S`&BD=`v~ z`-T=XYMJN$)dGbv;*lO(IJ$#!rt_XXESs)9t_Gk3ygjqLf!tGYi!fK3SC=MB8;+i> zRAy7ASp{8HL_>L7PW6AC~ERM}a(Mv>BOjy5dJ zmS*XK1{4${k&LsmPlEwBuKtqmIz~6dth&9j6A2$ta1@VV(-^%ivd4R`0)<^%5etQ~ zwF5XcyU#i3jsMHquOs}VaZ^`()HE=xtcN!~Q*+xLk+iC18HMCPdh;L=u|`*ebGo$J z>XrK}q=PVV)_P^vewP# zN*ym;?H3~gdR4bPaU?|)=8sXG`$h0}RR0(Z0^k-J&Pbs|l&{?iO5dVx ze2|{QiQylpE|TSnCs;~ZYkG-RlRk(zSpQIaA5w<;6)rj4`<0&NQz6F1n;v0N)|(fY zo>@z#Mv}E4h2>0Z=7WtD(kX@q zo8so?bX?5DKCEWa`)B~}ZiPj=94brk4+0x86oXyT$l5v>v89ut_*U>AQg}4NG6+1{ zuvXBeWNdq?#+$HuiOeZr+9k&4srdDhum-z@q4C}~9UJUCqK~;m8aM30IY6gQ!5HNC zxxqRKXnRh=UNpiwPIr(A_uisY5XD(gJ#pwdd1!__B;zEcRbRe9Nv1db&Ojk3!cItL1|02)&a9_fkQe*%J)8;0o)q9P=QL)c43Soi1- zGKbVp%LlX8i7yFTwFtmwgv zdM68nAFxs+koo`-#>`%_1fafHc{HgqXc7u%==>UOB+Wi8q8##q%OTMFQ)!@tTT*)E zBY#sTSS&dD{^2;=WaDa8!2DwwY#W8aQ}7cj3ofU7N<4j{`)M~`ObA0maOCfw2ok*T zB6)VKW#-$ql7D(pdDNhPw1X%S0vduZ0#R18QOcU=xv=GdVndL+#`W3dO7JG(ZFNM7 zm-PBzb1DsHO+``*sMTx0z!7vx>OQPM_+Hj4wGOnO$~xZ|>v-*Ldt0qb$H@e9*0C@7 zwc&yHB@7pemM6D$h=QR`3bm20WWOS~9_ZjB9Tp_xkte`W#4JvlLGXQZ+00>cXmlX6 z)b%?ZmSqEgJTUxUPPgBC!FkPVOgIPx^Jy4HI!Mj} zTMs7Fk(LCmk*y-rLvDESmdWRsevKQ{$o27{lb$DAriHX#CRnD;$o187&oMQy!1o=> z^^GT5VsV(_m~8^S#nf|5nG6w;T&89dx9@)@mtnjS%C59TgmT42FI3daDAuBfD({#(U z>|r)IS{C?*Jh?ukM9Z{bGn|k=a(#4Mb4*}nIA(zS^blgcIVRXqHn^Si5KZ?IL#Q#f z@d8$OQN?>!{nd%m5XNe|gE`Cd%7#QO0)J^OanyTq`Wc#dh@ zM0PXH63guNsh&PP4}=_{ z*T4un#(#sZfnoj~{LyDS6rc#*``S2zu7#6+Bcb#{ep+-~5PLJ7EfpbkqV+zB2VKY4 zl-9C)PQ}cDo-jCj1HxQXwqCFKb$9xLuT(p)JFcXqU+w~*J%mZ#QwpCQvc1G_{KIyQ zkHU9<<3cisv3&s4S2Pb0sx7Fp7^@1QD)&WOQFD*t>8TM}M;jJK`zmj3f^T_9D8w;K zj(b&Sg0Frc^kWx*@eg?&iTJ;pge|6`lm5B2c`EFFW2crT1Z;h$ZI~V}F;00aw9(yZ z4P^chS?L%4fk7DV9dRUhE#O$~J@A(d-A6v4RUq#BV%^ED{cgky=kDD_=@Ty~2(<(2 z_@I0Yk_m!|uLlLC)2Q+wfWGi4Y^p$8G>#LLx?kpo6Xh-qifjHnvA{y;v|FGD@_%g zz-Ic~m-9K&eAPka(ob;dC0`+Ml#cUKup7eYq6lkw0!(2=A~NXcMHX}+D{JbVPyYZq z?Z=Mxam*bTJ?wjh^CbnY?IHQ*t!!;Ds~ke9 ztTX-5_U6qwD5|7_u*8)u7s6NUxO*y8xdn0N<_*Uhr?3%|`Q}Xu+G$M%KYVLwfMeil z%Ch3s#7a`sdRsWix!O!||3Xyfy>qY^&Z>78@U*~R(wLHF;iFzp;=8rLAo&ZgD>h^< z$QhaVJ5^ynkK%C1o!eJ`s%viduG{XLv&Bkt~#lKM#C%BtARB}$iq!~lvm zfNh5B=1okh#1|rd6QO_Liq>T1VqnOL1bujKW%aOWgWMM&p|C=T+7%0tj3l<#e?_Ze z;OpR`+I#%$6AUb<*1P+3K;IwM!om5EdHn2Oq=Pqa7C`VIVbczYb`W4W;GQS7p z2(Q$p@GXJ>?v(+tGF1X%NM)W*H~9RY)c{pKBAU9Er-V`$v^?UatO?KB7rwv z#`cm7ABg^q&EMngxxkh7Frte?wpaAr$&5Bv*$}25k9yoC$G}M-#^Sa;85e*KlT$fG z5a0Jw3&^3>SbsRZ{1PDgS}A$9ZLgs9iw-c6vPX0XeP=X&Ph|s}VtS2+j?}2qmox=} zcjmb6x)Wm{KlL*B4vgh_cJ^AfoS5%FQ06tSnZ){M)owll>u(Qx*tQm$eAM-~;^CR~ zCv4vYpqqS_Ky0=aNfS;jTjiEGqR=&zJL2Y_PxpBG;2s(u81 zP6TMm?r2G*kJ-aU`ie#cQ_HHu6m-_Fa<5zLXA_@L}x_K)u4hEi9i(u z?~3W6TwG?*WSp@e37&vBFou}`x@aYPzN6FKuSqwc@u`9<05>OrRN)dBqW!(+_Fek9 zP$;-z>0btAB&q_T-Oi6v0A z0HwPHQ_)7Q<&*j9N4hJZsR-OXuFmf|>47Vqkt;L>gp{m(=emX=b5=yh);e^+nie&8NSq(zxAFOb@oai< zmi(fa{_q)q=_PgzgXZ*zJpcxxYY)h6o#1OXL%4Jpgi<)>#q+#@Cb4(m4?tr@Hi_MI zxUYmfRS}t`KY#XN>VRFjnzn-D@6N%v-$CM4aGYf_BedDFR9o0zyk4&6oGl}&%>qy2 zs%|WbRalLdR?V?i&#s%DGFSPnifbRk8{1*=*ojL2CHeiE=8EFv*680CrLiZg%D#I>`8f9lipInt`2UAA{F7_?57NMw>QMkG zoGOq7GEKw$FY&^6is}ERl(Mk?k0L7v`~N@^EUc+p)KK`C9RGzQxVireM|>~#6hl%1 z2IhI~@R+|dOgH_$GfaoQe}ciObNka$hS(eY8T+^!Go`73QjY(7N1wWH5mFSLR+P<$ z9H509w<Z&K8R&1Km2L~o zaleH)v|1ysr9h>XGXoU_ZmeWdM2UlaUvJ-%Qo{QfdMJ)Z83lVmz|7LsltRU5a@F$w z(@<<^YHH|LkxLCs3n0JYP6E@aL3`Z!*6KLRvW0w_eGX?V?@7+7%I`8hX2V>@CaXT4 zf%|9Mr1SGYlA#B)>2PP-tTsbQ`@Ca=@SkMnjlADg@cg}tOI;T;%(c0yE$yf+B zB2xsi1O6M+4cQi>Zj_?YF8a>Dif<;O8MNKKOL%tMmrGWyT;$wHMr9A1G*dr{zkr6L z`cwT~pir?{IQ|Dye{pSbp@*n3wqENhv{uIcwQRQ=Be~CR&&I}v2geU0~s2BTU z2HW&v+ckFiU-i=CjGD^xmfGPg<-gg^PMejxzNt9?s;g8eT(hIoAOi`C%+k_hJgJ-{ z09*07l#vJCXU}XtPYT%xlaCa~^yU%I#P_$JSHpUm{y=qikLXmV_VymxfK(L56H%i6 zuiXP^J%T;ciJZT^W8`|(H^0Urbd0mxI-cBL{8CvTvl!|P-7qUBaogXsVEq?9-+`zp zqmVzRu}OUm7IIHv2nFPP{U4r2IIYw0011^p?s}-;EydF@Qf8O_7!`ef{pOo!uLvn> zlU@7q8LMQ7PDW{)$e|Z4s!UPgJPj@msz=A@9ik4bMNuk75p?ZkbfQQ!~ze-_7|GMGZN_YKhJ=E`a_PQEp#7Y6y2u z9IJK@=V67qjjn2qZY;H~!Hix3s(0b41y4)uA;?%Ai|M~y--7IHsK*wiCu7S12Y!MIFNNto3EnS9zb4K-#0`@Q?K|<4H6qA1OG;PT{e=;A(zv~{ z#Xn!Ot-zHA7K2Hh6yP+Goiq{U`WP06{b~duS|j>Xh4zHDgqa}!bMD+HGL=%}R$RzV zwrQk?NQGV-m?g6XP3U34FK4lQU>5?Jt{11eXLhmoGj1#hPWeE=;*$v>@ zB!Ha;4DKv97K;gkXm!14;Gv|=<;kB@0U#zlmYSykk3(-m;I~i_M{`X|GMkVX&j63ce%YIC+B;XI;lI7Ow*+-;Zb#=$+q~_({8+09`SB^<0hz(gB!11e z4i=e>a~xaV&4Uv6PfzYa?Mz^w0cmyfqD zekX!b2Z=^~zB79Kjq)}2!5h&16p#5teLQ>!SVr8+egWXiN0AahQ7(Ks))VO%QT(Xz zb0dx8t)fHN!B)=&VW^yeeOxeeVnUjS1nPN5ykiyaP8-LDx+mF1VpKSrvK`Ta1iDS3 z7gM-G|8XcOcoC48u(R)HFLtVsPp471TKIv<@jB4~(zDK$smUma6$lRM_e>(G2U!0K zi~e-2kpTGGh3($PFKvqX{#nwSFt^3+Y{)%PEnMAszBJgjK)9aqmCjqITbl;MNO;(Z z>NSUqqqy!o;|3j$^a76~Hym~Ym-77%;>DbRN0QCO2e*uC`vh;EE_8rQz31KQcK>|Q z*F^}><&MAD&>qfFuh*OSm^D05BD8)G?8Q+s5l$m>c8Cm5xa(TZN8OyEmhg1|kizGad4 z%mJ2Sp2xLJR2e?*b9ZS7FxYARnZFbk4M?({E z>&H#Phc|;vbaaKTQeFXgwz9Q~ig=_VlNSaVJuYY@TB8C)Z_WIM{qp3Lt08$p8^}cm zO*WON9^%X=VFBnjz!j&rz)}ZRvi?@NOMnQxM>ft-)qEY-P8&KHeE;EY0SL3&JDHfe zdqiHfag;zR6}neAKT-#@SLYF{1b|pJJpt$J)td;r@orCf)Svj`|~xRr6vOA0V3)66t{u-gC(to*m+?S2PCdDU*6SHJyTVc{m;U~Js?paZO9)9-_4So zrFgoXc5lf+L_2<6q|0x*s}($m!2r5IpBt)Pf=KxYQ5cA%`XP@UV;t>o27R<^W*O@Q zdEH=98hOYdDg?yJ3We4~HxA&;H;&=~2qZ8UcLC^KgbM!=_%Ql9u7z1;wHzTJor{vt z=m5`LO!W9PEZM1@XLtVHF&WzKK!S_iheV!dCSd@F9ASGWB6wMstI#`#)7fL#b7#KJ zAVt(6F+Z1hbWJhJ#Shq2dC>Q-ZwJ>Ix-Qadh;kMeG#Qm65cJQeNfm(d4hyzddk>cK zq3y7j;PmR^92r4KcB1NPGw9e%5j`hfQ4;Cu!#PNwKRcqgg7~Il$5yfY;5fwJ0j)+S ztnG2+jZ?dn1t9?`+{KfA{j8C=CnihgM}|L%j(}^=mt(|BOvq# zY*+n8j`NBZ<$mUrwWxq`IX2NsrGi-Y&{?9IKICjm@_DXklIf)>*W1LVrebc4u-?Jd zFi-MgJjbxl&MsBH;Owcqo$dSuKpptRn`oG*j%mM>$?Eg`p0FKHC zG*Nc~TKis_#_I-&HO%4mTR9}sH2bbs`pYzh*Im?58_4Y^F3`*81eEw~bOW#32+}Z< zJ1tSh8W1n-_ty)m=ZePd9*GYZ$n6QK1Z}vQ0E88~780>Xy{VQG(H}de!ySqs*Xtfh z!o4FhR0tW$>j7!Jm)H|(M)bLeK!nS_d?clolM&dJ1v*g=0;*3Xo}FeDX-H!a9R4}^{t+NlFf17Lz;<^f$hOg8?AVld+td`vFJXxN;} z6i;K$=>_!m3z_fx+W{GZpl?GrD39Nd_Yc$zftVN4g>WNe?jV7jX<+#+ZvDme|{ZN!A?i{}vibh`jw*DU6^G*#mBeRQ?$nW5zg) zK=dA~Umv3D6OIOfP2t?a|Oa zyvl%sE;Hum7`?8WNno&>kp#09@I@jl;QIb=CN=7i-R#MZ7ZB6e z_(TA6D5Sc!xP45^Bj%gCdsFFgyaieZxuUrJRBy8wlx8ts-lFBjr)Tcz72LYO;pebf z&bpBl3_5Ka#l%=Otw%I#ZVnv&kF)0SV-_q6wf$}WXY&AuW7P{`ju@S9~YL3>D_+bc>C z&3+yI3W`0G3c+40P53j%K!p?Z^KI5h8-OAZGVABj6q48-MG=aP${7{OyCS{LM0{yN z>DY(iNEtZ*&)T0&hsv2)xG!BKVLc4^@zYsOY2R{5dW>E(kc9|x%)+Z8;{m; z6XV}|LI!~R$0!K8tiMx(%G8Tft^P?B7-otVU*jKxOF-JlKH~Byt<4=`m!%7!)Pp`= z+UF_Ye)RDMgE3W#kJv4EHZjnbE9YZ#ze$ICPsC2zzHwNPDPEtMz+Mj1usg3~X+-6HpADjiSZ!U;46UteH|n0|(|)$!e&`17DLj{n#hQOiU) zDzFw?e5XF8u`)-)UB0jwJ9rFGZ`L(nwzPbn;rG}38tST(y$hJS{N{_Ln=(*|HKMS} z`!H#$tHHz5KUH1IThdQ;8>EM&2KfOr6ZF-emF#r%Q?%AxHYa8ZBc#Ku{KYK;9V1FD zd^~wr)sb@H4?u2m+8`I0#GI=6Eq2K2rFUrcWrb9g$eR9k-iO-4WUmqcc}mUk$`v$7 zczugD^x`PCr^YtvY>{#{gtI~$SHnZXLh_4%#Jug-81jl1{tKn3k}d)9jU*`K2ktwz z*}MJnBko~DI|4EzG7u*usF`c5KlhRR#N^rVs(UkX7IGG^pVK1l?}OvYN_0UM4S|8? zT*6i5E$i_KpS7%tSlmbe*-Y)i9_Ga&AAIyGy=VZ%XIA9+Y4^?_$khDsr;7Ma`Hzj5 zx8=1BAA|N3*;cQpo0qE#!l=_5KX2_xq??vYR3^5yc>Y zVn-(Hd%iYuCjlO~VEOYwxK>kl34ZhG{SS6lQRWUzghW0b3=+8*l>a%R?#Js61I2AKgoxx;i}>(X9mByyjt3UQ zzH+2Fi;w0AYY(8YsIIv%WN48h57k!$uZ~#NouJk9n56*R;HuggY5b&X9ZJwQC@cbU z)Yu5dk-!micO81CsX}0(pf(z(tRIZ$*cf!Ea1hAjmf1MB$r9vXv-%6;jZ&l>fJu?9 zQh>Wog>~u&zfY)x+4NPxOrWDk#zj))*kX6R4!{HqD&IMOV}rXQ3+t-Ic|2n)G=Z?H zG(#tS4m$v&IG7aIn4M9;zB!-XNPd4iz{tqCo@~is(WLn&hB0 zOW?#>uBr&>%4|`H@TLYHcbZ16z`kHtCkOYcNAlosfG8cBuARgX5>}ocI<-qtcJ=@F zFp3hZo~|6wGY~u6pl`4RKqSeS03k`$YB_D^hj*c|f4@lOxs0zQc4lt=*jQ*WFz&2g z)fV-G)-}VmZOgE2G;C?h`Lv&fOqJik9eNKH3tL0Q4~Ys8>?Yz6odAodGBr%!`k=2fUVnnJ{5F;ty}VB-g}9yOYxsU z;(JY(rA_W~DoB^LE$Zsu!Db^D8kV)KKl;sa@6(Xu5>oWQD4-^7o0j4^0=je8^@DV+ zS`hy?&QGs_c|GPPb-4?4{vgs@q~5d814IUqX@YKiogfRu0{*Z^qHn;|7_r1vLOc)&UW5&5hDa>XK@P%j zta;#>nAle;j1XlvH0YUlCrp4W=Wy&qT1xW@R(MF*ajf0RcQFaybQb^e~wEz1#@D=nPk;H@Y>+SdZ*-V3cGG9m12Fuqm z_aC-o7qthkC(9o%CTTx&%zwnqRRXLNCrh9gSKvN-SbTj0`@4?E;W?ff<@@8tG&5;| zsuWD|p*@xm7d*pPg+ zs3&Hv)sDDPrZiYiSns&vl4$hn_-NI6_X`Gt7#goA^Y_uA_wL|H^;ioqHURXC9usMT zhIAcGfaDRnNe1w(lk}4lWntu#28ge)3 zdj!hNr8!MLUuQZSx!P4CO$4tF>Jb&xh=Kxedw0W;`Q?#+4an%#Bj_1tXS~6qeDx(f zT1@LR2kF-H*jI_E=&$#W&jUKQs!w@XIk}5|RK>MI6*16@UF5V;6zbJ~uEp~k-`#V} zBTn3E|17GxGq$+b5zS!S$ZnQW%}HIoPG-UKjbyia@ihtj@S^&fQ9r*yWu%467OfG1 zHb@Ac=`e-a4uam!>Y++U5<mB?GS7H;-Jt`tHpvTtun5lP%P`+hx?(8{>Gf~hCwb#h5 zshf17xcq4i6OOc1FAYGihvhW$1)bR`%}>CTLzPSR9{6GN$JA%5w&!!(klgQ+RzY`; zhZ9btgeWriQdA0&wKs9V! zen4NeT}jRvIhi+ce?8PL4;{uJ#hVVtE*laT}T`t*cafr3S(ktfe z#7~+&1cwKH8vRpD0m91iPqh;sC<`Z3>enKqY$_5s6e=+1Kg_#rVyyr0eg7{vi8c`n z$G;pV-{ZfPPyZLB#QDE0C7l07DLDVbQi8?uUrdSPf2*KaI9dL!f@+$VmjPo&3fcMa zb1Osbe^r1nQOoI07IY8n$$ol@WB@Ox(_uRa33c8yDUqHCm!=;^6;-AVkv4+eBhieh za}egPhCUQ2ai}(dK9XQ?xJ)zso40+DK+>Fv*0fP@e-Tl?9bmbej3eUI)58!9TgblC zTbFeaK+__Nk^)~R1c;%p6WNi622JrPLj-6VIE_oZCtBzma)ZrO$#VAF4nSKW*3J?m0hksUq(T1ys4fOs^~cZrTQI}@&&&D;6=Y}O{BHpg3n$yZ01_~FDstC1 zuy>(*X1^|x@U;mL*B2n~fuEqrWZYx$tCW&>toK;S+}>tKsAo$6pR(A;rq(m8`+9S2 z&{v(y#&;dR0Qm4jFei5)E3^2X?*TXyxYs%gTd9{n7I`*B-ZW`o z529hd0@ltJ?5InB2a0fUy?IJW>B8v^8G~ca~s>_5w(BT*OXY-Qj z>Yk0-${ietN6CJ6fm#3cj2Lu??AMC@D{#3`9Pbh+;T0{njexxk!9Qt90yx9(;~wro z{#DEHYrSwNbr`4>H_`wEg*fJt0u;hMTI^L}ej4G$Zn`uQG+f1BMm(n|L1dnW?MCiU zI-NbbZ53hl$zr;?EWftR+aISc#XHvE-m|;!X3y>T2b_oc=7lJyK@fZXMDSAZi4p_L zgG2IgTLtZ06DcZ&?QlC2FaRx7&db#pL7nO|C*KYCz;Uu20RY zD%)jh(rfB`<1Vh5#i4+FV(DkN5brOx?kRnGWd+pFaN{BFMv9=+JU}V@8vagOBDty7 zQqvt_jKirJpN4@@f8F7DG%%=MM~o3X;aJTi)z&JJTzZZSy|78L65HRx+N)k*&?^wo zD2)y+qmEXj6?yBV-y=RpRA{=F*|*H+UKDI*B4h;&MIfXPvJs872F@{Q>m+FRZAQl2 z&}t7b;6=1(C@9-StpMyDu541&t_FXo4p7nkIgG5>_+wTuHeRwLbW<}~GL#$~x^l9K zAvKN}>>YN(k7kwS<`b^PS$y;{$6uYoYB-edHaYQ$7`KB+gmD6t%T6p9X5uFW$s()D z4e}ZF6=QLNVI>#2JdMP)A^DkU;WGFQiR~=Nu^l4MsB3$1(Euka&pNQe90jMpGv(dc zN0x>D&ND(}@>&&G1mK)2gzF;HMoiaIgzmpsuBDPmp=SL4hysyGCgLjRrVbCP*Kuxt zj?h^~)W?szF@{-?RNfHpj6}+n^-C{u zV|tXc3`ltGC+Pc5065NM8G3$=$rkJFD@|rlA64AaRjnpd6z{RQd2)7<2{&|M`Jm5< z?KG5zEq=nZCQtPQ9l>4RJ(31g&2PBw{ieUrp3d0Ay9M+(G~Fw>o6B|l4LASnBvs(; zUA3rM7)vPr?&txA~j#u_Zvf0aJeFhPI<5Ks6xbK3vk{ztrNa-HH-A^&1!x`>P^F z^H&Yx^(_hu|4U3^YQ_i4KVTq`IYlgs`vO8!)7cB#hIsrrfUbwZznX>*CSF%9??^YD zwl}q+x|(WIh_QT6XJ0Hf070hrlq&k?O$%A07Y|@bQV3Ud=~RS~8kZ5mh44*h<)(ET zn`okm5)Deb`6uo+a$#wg9jpN$NE6HYjd{}Oim0<{OQ z162mifUJzN%``-$;YZd%dUqZUgjEO$sT-OAgBmg?UQDTk9&xO(?`jn0zNZWDD>bj4>mvxo!0P(VdA3_6Dkl z*7BI+O#ffU?aexcyymdD#gZJL>2KswX~9;R7`MqwVe&(sc}klMo41 zNbsL>V8+5jVsd6oSWoHv1!4Wsw$6L$x?RL5k=(-5T$+kc!0MezY`>F$7phm&Ql%Xi zT|}=aKRO0E@_re)1`n8P9syWuh6Z0Y4#)?HlqZbE2Ga65GRVsE?CBcR4EOicRoj-o!ENEK?WN4V+)P8AXM%xhsrgV<{jfn)G< zWW8?4_U<>RhX`XC5-jQK%D*N&1F&V9uYQps~hh84^*;igo9os>ath z)+$V%lIYuda4OLo`HS2%HUr6>_7GOd3`jTd6`FrVf_wLUtepI!GEoML62jm+eV!@DUk&m z%Aw=6Wjp<;mnK_1#?b`>6h{?o2tEa#6m2jW!a^y)-B4EwnAE;9StrnqZ9ri7)12rb zoV&jws~T+)Rpmx6CFthK^Bt8DBnPhQhjXYu4=sVZY-1)_zP$?evf3#foQ71a2$Vi% zZ2a78#<%bh^;n~yorRe{c|;prlj(5VGu_uFJAxT$#a%}O6Ynhs%AzS#F6tNEV#R0j>$!tb z*kEKS-hV&{UmraGsKYNlfUQV-wSr-2=?5rkbm0>|vlky&Tm9VQ!1=MbVaK{pzGN3m ztptwv#O-Ia{dwUI;4L!If%1t7A+7Vm6~@v8g9FrD>wG9*>rq6P-O6QG_DZXrHuMtQ zkySO+51PvfUau{^OE8y2OanYFGi$x|wvPiuG5|R)#u4Slkbmn;)hJZc4}+npYZE#+ zlFy@gbu#;+Nm+bgIn7hcKzywU^fSK?WPflgL#Mp?y-l+K=U^9Ry2@S>l;;~-h3%mB zrhKB8b$Dgw6mDR<7bf2XJpftT)q|vkgkQTCh}J5du^yX>YiyH>Xx&Vc)RLq3!kHC=@q(B>|Gr8SOh z*@t($T)pH0>J%|;HxO(j_qjj!-pukUzC14{cg8Hvc;;)#eZwAYYB!NwLO7snNW>^m zyfn)d=}#e!9y|fANvDiZTGi8~#kGDFG5hv3^D1;k3*^*v)wtP3yjHZk1)_FeRlkcO zxLl=0MqtSe+hCF9zmgNIjAlebWeiZ!`i`hVQ>D97O% zC6q>{lj1N(My12psl&I7ZG&yo^mKBpou*3E9T+ZZ3U-2`(Xj?0DgOCrgDse{31eCw z%9?0Sf!u<-jBuR1FJPSmN$OF*PV2l~Ibl_d^;0ybYYP#w0($3rsZ%iE71#9|3 zej3AAmN`8utrl~T2P$@R?9=#;Vj=$C{?afFVx!A2o8`_5Zb#5Q$jtoUT*cQWVOXTG zV^TZ^&MUW2zf|a3&94u8HtC?ylxGX~bb4t($Y3)|e@2`M6k7>cgGqB9pin@*{sRhB zwMXqr@IVM&sy;jgp>QBqlSq)gCT%~2J?RCK#+ANYwP9=|^VI&y`GOqhFL_4Q#!u8? zrUC9h;rUq3chvGWLJ18Pb_gzagJrHw`fAMVg4wZeqS~J~c*8hDyr*ZefZ^fS+Z z=LZ*vUsb%PtnvzF;fL^AX)Af*SF=}Wf`8CuNQ``AAN#&)xcP*)oVZy~I+*&uuw`u? zIVMJSH6Z~9n~O|VChl$~yHldbxsIBJs;ak<^xCJgcvxY2KXV827c91jO|P}>n~kT+ zYmz#mdx>$qavdWuG_Pd~i7xrva#$h(S^Hzyc(4430ed^q7Buh7K;xs z6Tlqv=Z9uQIGrW#IeFFg<<#Zuy*iJ@LV0NH`RP8g>FBDWAO zulSx`MswL;g=!jCN)7HGjQN|l>xxcSfC-nUkul+LUwsxc4l2X<=vS?I_>Ytnd>r6f zDhwBZDDn}e(=+e{27oE$hL1%!tc|d&1%xxu5UM%|?v4HHkFTybTNNCDIP|Cfu;Io- z3jBjVtqyN(!Q#W!G!EYlG$A2iaB1E=hrsMF{C)h>Ys`4NzfKsLtP9C+-$q8R6`6F~ zocUs;UQ}+fl4H8{cnZ}qYQ=G0#X~)m&)fB|#m*P8^ZU1{rw|M|i7gc}Rn??J?}MrI z;l%cY^3>lx!{Z$9=KNh4>Okm5^X~Cq<+t23$D{2AasFuq+9YQ- z9s`Sz3#V5`Z9d}*QWh3~&G379dF4Y7-M=|tAm8aBP`yTqzMvb;!)rR z{(jL+CDux^ut1Yg$$t%gJBN$~)SykH07nw{&D&xs`-iiSFT%~qaoB!U9f0%wDk;wl z9gO&!pdJuvIAh)o5~&*-+8q zu9oP%-eK9pd9CJ)m#6r3#a)#Yb9@im>3&EhvZA1b&dnAj1XumIwnV2akkAW->=ZlT z(wv_>=Q^67z+r4cr^^f4BK2Fp5Yq>{#4)S>`d3f!f3XF7DX784~8NOBiP%DdU(`TgmHKP+Vh} z82!0h6rFk9IH84~`^ZU-M+9+_K!X1IH~KkDG&2#bdABgA1EV0QqX)H7vdGpWu@I_ln0Lq3v$f`kDeVpt>h-f}HQ2NA5uF4h!VK(Z^SIP< zz5MB$W|ptvd_ZexX>c`2BJ+ets`)WPEGX!T4Wor-RV|e~TeeV~YB+<5Y5}O`D96<^@rYIT6 z_pb4j(8RaV_;(mhwAWUOB+x)WI37yg^0Tuog%ER+F+NbRWKMK**enf3xm zCE^Et>SJj#oIe_p8-bK2w+=2)(K$Mzj9O4QfXMW!L}-+~l~T(8Gjzzt$$*-MYTuFQ zV309k&XwdE0`yRRVg}37O4o~QAQw`3v)bq_6Il5%-l2gs$h0ht39*QWrPv=%80MHQ zN>Gu8`LiyWC@!OXA;zRgH40OvZVKuFJ70iw-aP2_9*SLMjoqtRomOqeD;00*o}||o z(7@MMgbxD|VI;(12Sr@?kc<(x*s1!M$geF4O6i@0oIFZGoeuWV=%gfvWs5YJW7_c(}R1YlMc6HGWaJXz0n2ci))eXsAX+4deRCd?S6h`X1E$o7w zJohdiienLu_xBhAN{hey(}}+{|Kna!&u zyeuX0BS;0T=yLgqxIAge_iwdBCT;ks&~iv2&2gefjvBp77JqBq4M;L*?$3j02~qtf zcYgvvAPg~KS;7eUYfTYxY7RW+^BWW>c#;(Ev9W%C8Z`@d?<7r`c?HkNEz6iAXe2>B zF7sA9g8x69-0+LO>?Hrjv^oD}@cK_ooACmY1@2$oE=CD9A{MUy5O4p#0d5}7e^>sO ze4B-v^PhyNLoCeyn|#mB^>3FsEEcB!iEA^n|1WjZHw95#JO~wFmfP;T z*BtotrqJcJf)Jt`3X{$OSb04WC)4b~Xa0Ig`j6mi;qCDKC@|@v0F!Pbk{K2ygQ^jT zRAH;2$)E2@${@*(#nV{o2z!00}EoGat@vje7mv=3j@}B-@PZ~bZuSR7MZl@ z99dF+)HgOg5g#2<#M|P_@O3;fh>c52j^(6~ZC!O_{CZ2`D_!5p)cv%*g>099nN9`1 zhD4?RZznodR*wI66J=%kpNf+IgZ!G6ndv_?XF9S@dw-BS_tdw!5+hp4pyCXytSd~S zlU1x*D1IJjyCUMqHaFc^(^+!dU4cTA`B4Z6B~c!L!iU+gy}r1JqJ53h>Sc6A_KA;G ze7CpM_PrYpRiM%13|1@NkEW@po;kfPe<_NKwn%P0tzSs!*sL3~{+uh=7r8ytR%l58 zv?0}B@NBXL+nDO!ok@OPxpj4N<}O}wghslzG!^3VYOT%mdAVZoFVD>SKAK2c^LjQH z^5^$nSlCHU?YC;nIvGp4JvMaUcdX9L#<;pR3afCn-i^%abR2cvodIquSbim$l0OGe z2OloccImc-`#MWD-*ZK2IG9htwG`3j*i4m9 zB^KWcsw34jVrsSsp9Sr7oUioGO^qq-&n>Lo*$TTJaK9{x-Q9{Tj+2$sy+#YvdNt-B zPLJy6FCcwCLfHw7Wd_9})YOuj;Z%pr)3H-h{Po94n)nzrwdcw%9>@0+@og^vrlJ&A zo~|JiEK{k(cKu58RTh~ie2!CdUFR}2W_wNS5vwpOa@Ej z+%3hK2KyGigtl>^xNHfGW25$o9j2KLQAu4I0)$X^S?jG7<5w34$z=^&hi>+1Yl^#s zDwm#NS7xHK+bP-JY(GU@okcAK;%#SxgR;*Derjci*TfiaQ;jVimocvZO3s`OVq^MY z^WS(ZO4OlY;T&b}@8Q$WL2p~??lqZKuD%p@`=+E6KC)xQN^o~Cvcj&?!|a3c%mOc+ zANxW4@7LaCDot4X8M}{QE*ge{bVyEI`T*;j7>3r%Ey$W{C3kq!|B&Py-L^5a_Nhyn` zr{;;})5HwkD`S6sh<-JJ>BrUCgcsil313c<#~1v>gw^O2N9Z6k%1if^?7!wI3j+VW zmB^cKMj;G?Ay+-T2S6EklzR__+OHXY$OYYV{=G%gkg=_7m(PR)U{u=AL$;F^bCZ1h zlyPP=%*+DYAivQS*anMZSEE9_92UX7eI^jDM9*)P^eP%Ic?0cn1Y1XOQEGGv1o?o^Z>?urLTHBTrh*)fp&DTl z=w`mysS{SO!SLV*tj)ya)#I{^T$oxidfl$@i#YLuJ#*~0UP;@yCAD7`LAsp}KdSm6 z4wl?yTijpuOL+0W2l~A+k~MT8;cg^|4J!4@?^|Pp8pKQ=rC`nAL)&7KS+8qlwCvyL z;A!qoOLQ=Z5y_Gin;WHZ3-Mt<@q!zu4GZQX-!Y2fm{LUpN`z+wpo$UH9qJ3eOQgb? zE5kS4#3aErEhGXSL?NhWqNL(yF;&d%Bw`z|)Ynm|eMFIrBzxf~fy|<(=^hGoDPBC- zLx7d*mHgI86~Dyj`1Mcl(%+>hEak6-I_SuuA|$INI&TFO;oZY+gQWDAo`m?ZyGhgrA9rf(tXPdw@v9 z$}bf-rwW3c>nCdV@#F_4N}Sq|UkZ(&rrd5%E;03h+&h(`LXbaCXE;9~N9`nw_gXQM zj#jH&y^S!Y%1=SRvR?``ZX&A{9~4muEnHW!Is6XehuTU7HiZvdwN!U>a^)E-s;Q!R zIr?7pW__=J#BI7E+nYaDZwADj>cBMI(8@QpnSUEVE*wk z-;6uYp{W7D=iXfylCRT1=lC$AKi|yFwc;|<(*OjUq3OnRKUCOJMRjaj8Ssl`)icgo zG9VreC34A9-F016vB}|XH;j>_Ck8m@vI2Pr|5<2RT z>pqd^{OF7@`u)yMw%&{0U{sP691bhSi`}U%t6nzgq|aldLk}5QHIuiuo*bsEQ2i7U2yaF}!3?)#p{92Q5;6$PS-kd7xxEdWT_8 z&!J943zd$ER3hceXxIYhrQzGJfX=$khCn9V_Cyq!xu+ninCW67VehCd2^`q?GC{vz zx^0N3t>`#XR()MD+7z#WB6>5{Cp^bTXL$|EvJ@gDPw=E-B*Z8R2^$^i7Lvy&1kq!7Y z`D{=?SUUYJ%jH53ia&CVvDm}zA!k8#xIo>D%X2E)y#7iU64*m<#yMUsWmdC(*2T0c z-B>!VdnP88@eY})zR5Pd9`+>!TEx`VQu+9EZzSS6OG_JNvkp3X5DNUvFA7aFpoyz2 zb_HtcjQ)q|(GH9o`atHREE~8OX7x8b5V6&3)-Ht*`rMX>$Z2f-DIS!~My;c*@1QOW zP~9hQ%u5R0LU{F~n6RedgoFT6*aF!h`CJ0-YRViNi7_AAO9f3W_Pf-lR}RF6p}4Fh zk=zBWWJo$__1A^8YYF&f+MipQCzy3%wk2Osg*tMnB+5{53xGXY7;N>^X9PAK7B}+I zHcCJ%_%);k znz*po-{R3O>$+U(F2{GW1Bo5ViW7;wHJ!6+6m8O~pWcuh7R(e-y%^s{^S4Lpd~x5~ z;9V(qWs3Nwb5xUpB2_dnAK8{VW;XQ&$+gMz2NQug)j?w>V*15#nOXd?!@cEihb7`P z+@kluDrd5|TOWsKs6n%|mi5eek zB5s`Xr$Mg6X}|KT&law^oKx>9AIiw0j&1wd`y zIxEqmN1SoH;&Y7~OmDxdFn(9l19JFu6_@v|lZZeHvj*s>BV3~-Nk#YcJQV|ZS_ptq z^097Is;om~y8MH~_Dexpke7r07w{0(6V3#4Y!+^BS1w>K)t)d#Ivsk}E~k!aRyxYi zmro80Nm^CD%F!E7?Xk3A;HgiXwN$n6B8v~?_jO9$thGkZxd;qO3)wm7b^Vn&&OVGq z>U|d3t&$m2@pf$WBlL}v5&GiMq)c)iH9eOez`QQZp(S8K?ss28Pwo5n2%kj$B2V4> zA~a@5E&){XJg<-pnBhWWr5MnH@2mUQs5=zPanLD^ z;MtI^Qi`TJ6%6e>-2#6v=J36e{{E<7Z|?&PB|yyKyr8^cq9j<3F40C<41H2KaO&n_ z<<(G_LdSDuq>iUSc`%-v`F8=LZ%fVw?5XpA$gLHWKI}$&fqSvCgVHj&^2W6&gHrah zVT_zT=rI?Qb}PqPG7Ixm^?j4Tjs#7l>5)=5zWR8}ju?rg#_;QWmS~lt| ze%E@|{Yw3K?TqE31NUO^hKy*muv-}aUGv(7@GA^5ZrfbO_=l4_+n_Q|M~&`R%rp9q zSc{+m95ql=UdoI~jH|QRM!0u6uH^jgV0#87pHJ4kzywL$Ofi!~=j(Hr_Ws${t%OAi zU(Z9K`(u&C2InhAA^PVeYDCy5mYgVjG`Q9h=3}v6QrEv0T8t3Ttr+&V01E-#8gboP z|A0XM*kwULa9aZ`TDTNBfE*d}>zv_CS?pLDLbL<9>lp!)ps>XPQ$p?D{v6dq%xv@P z2U+2=#|BVR&G}3X2NiMyJOd~O2I<$*@?bn_&cv-!IR2^GQ*2Qz9}Z%4C(W~6>!C<(6deDQ}12*8p*yD!jzhyOkq~p z3M_Q0YU0+^ly1KMaX8~OZ_4dohY0w{S4q-%{zLn!^?r^Q5vI*2mbww07n6u#_=DWfs1F$&C2vz zDNK*%q^UCOruXlij)u0hMVOt@edEH6J&B%jY)TKYsuthYXU{7!qi>>_YM!x*zaq2x zNPNnSIX2#c6$op>f^8X42o`5)iZbFUrBaln`MEjr3ZaZQG8^G@F2VN%dau$r^q^gS zB_?HL)@u>ghbT4*Kd_RgYL1EN_{K(5IF(cY(9!CKNclc2KSB>wwQKTOmd$$*%~G6i zDF_=>{W)HFK9dmNO#l+@vu&#iLd?f$KJ&rCda+)Ww8y! zj9}Uz2X;k>_jjX8wz068O+2tqkc@7k$4RvD<6C`ZtQ$C4;8;ftezrK-dVLPq>?2&G ze)Y*90>6Fl%F($#}t#f@jaCpQBq}OKJu!R)v|hh*p8;OR>yzs{wj%bsn0l1*ogK zaV_9gbyn54PN6K~3P6ps4i)6vnx!5r3@fTxyEq-tO7Xk5Gi|2i@yPf_oo{YcM23 zY^*D&aALYKf^6QWs(X!I5t;0Uw;+3$rx=5zz8?SB@h7MCk0A|1+kRx?8;K#6AuDS1 z6jsJhU%FW?UeaH5|B#392s_lTzrMd*`S6m-2==&B6l;lK^9lQW4#vEs*Zl|oXQJ#=N=0H#JiX|{dtxysb{$=Bwz4U++E{c^+;P=R_Z>_iOoj;uVt*0@U4&RUU=evyWz(7L!2N2VoqEX~7igFY)4r*2Fs& z&gZkgGl*wjyDJk%?(aCW3E;5k*?UC4pGdMGbIWYr=(_6>r{@y%nVa4IhD{;8H%`SX zu2P%vX>N<5b4y;Cm?O7A$#`>KB+WGjrI?%(nevFYy`npwmiUY0&$LIL1eyW!$_zzT zhmV4Ucd_GwW=y;oEx*crMRMA=!y|n3kz??ANq35+q}%kz=kDvJjLF%mlvyIw{`Wtd zdT6^UM zwz~TpAgR)6!gV5!rGpcZYQD!Z;)pvA5L;$J{%gKmom2)p4`%76Et%_xO=Xm5UNcTh zQdZUoV)z{blrc+28PNwEPtn_RQ7Ul5wO1nSEiruJLcINDdt2F>Wq%3*Qnj8x|JNb;Y z@M5vEvvByJz=!aTW{uGI#S+QnotBm1SxoZlr`L7rnaX#+pq`@J6^ql-?lWcpoWL86 z%i@^ABxb9IlT_)RAa2oqS$yi=?+6cK3;Zs@MB}4A2ao3HIj34Mo3r<4`bP#dQ7=vX z=pV`PpEy0Qv?9!z=vL`8RxsFAFpIF-=T8)#kk%c+YL>J^twGaO1E4zf=6uASh7_1Q z4cd;0r--bqm;+Wke3&&PeFVX8wnmrKM0*;?$E(?g)Oaa3{*!>n!GBJY5&d^<1qKE9*oa3E3S>ULcxdB?e~J={S0 zTalU^{0Sp~l;V%R7z_gbqgaQC0Dmdg1ra9?{fdboh={N#pyBA{?C-(|5xG5th!bZ1 z#d}qW;D+AjW+=k^bR+8^?NpBxwX<>+QtH`UdD(&&?aou6qjv-vzqzcn@qSn467Oz&ynmvZI*1eaz~;;5Vh_u3T~PWSGTSV%o3&P88%3Iv8!B{#h`-$~GDvAX#)>VRk}Pp3cUKQfwJWP@62L+5L@E zLgbYJb-ZMTBukc)$VstGA&~|^t8-(awvdBbjyYGE6W5Npp9rtXnGf3q_e28r6_Ss| zrQ_%5gR5G|L#m`Avyk@!RLPd~m77V@^==XtTBeH##u}-?@O#QyLBCcJjApsFeCcJh z$PRpO>D7(bDb0w%N%1q(qUvHUhxu-uckvs8{IhGq#_+xq`bNvVH!dff(jhp=RoH4$ z9^H8RyoAKMC)gJl64ax@A&^oI^T20!9zVtV5q_VH0iV6*Q@w2;@DcI2D7FnDClb6= zL2rXjf3Gd}rL8H{b@tWX^2WiuVvdo9gfoX>DCmCGOD*ZX$Y=YoJHU{k5;{q^1$Xz4 zbag1G8;Zzdig!gng~EuVjV347Fbkggpm zApr{t503N;4L{r6+Z$<JdyQga3uRI1f*}&9VQIL*_!v)HPSS)XcoKA z_o%+Z3C918`Em8ZQwjHG&)931+%|$H{VXK)1ymC}yVX<25;*LMU_d6 z=03i$!UtP6j2NP?ZF^z$FDW#L`kCr+^r=#V@-S^GO5APlj%f<=+YsTLl0J)U>! zc#Rs>M(~)JdCG7nazXay(XNh_(~HngQNeR&<<|t44(LL}JCQGB33%|Omo^z^9Gnfs zILu47DX)`1Id&G!4cSMnNwtR#O_YCRym*EoSua?e?-;Az(xO%Z+a@9T8W?qw@JW&2 zOXQ?1fjj=lPTC{#{fj%YVVE{WCVjI4(k|a+c6dxLgtw{DJ2Sk>bZ_^66RSeS^LWlV6jXD`goc89Nq_S%V;4ds*u z#D1%f7?b7lx3YTwaLez(#v1aB&`L!|{A!YP|0{ zGD+wQb`I1vGM;yuCVGcFH8xDP=O~S;JA}JgZPWPRsj#V}`nPbHS>;xb(L!f&&)8~U1r^h)6Inl{;SN(OaN-pC7BC?A{^VTw+LJp!ju9aohWw?Do+RNG zDD;QlQ!6%blsB#)8xf!4JP~LOq3Qr+&Ah8&zsXZ9b?uv;pLQi{CTSl~R1#X&X4?ej zwMSo0e*$|;Ap|)XYV8lFA_Ex?{B|c4hjJOQJ=KC>)m1THR}z;~Z`LdS$N7pUBVfrT z-*TP@!6W8u!GnTJg{_SkD?_VCN+b;LpTmVfZ`6p**jvi-4ZzVSGwE%!al*cXI4YHM ztj!Rt(&d>&M>-c8FIE~&3Yr=m_+3c(+lDX1_A6YB3Z-vhUC!>%mzKGk7~+F7!+uO5 z<+FRPU6t4^mqA}s*)I|v!NnbxxU-5UZkU!YFU5y*tcPDVf{a35NO~T5({b2kMAlZk z)pujiJ`~CDt{j0TsIUC+_8DyL=b>=P2uTtz!SE$n1f=Y*p_G2}#Zulueg=+i9hjf} zN_w}r&w^tZmi_rSGgw_yf>2L`Q+bz@n0 zSEpRmF~f;lI*)oSC)v%^TYM&&WV2@goyCvE@xkP3UM!=MVgiWiDC z&Dl!-5=L*}q;V2skL5RtG69cuXIsfu!JbIUpnwvBk!xgJ7VpKMEC|^@ni1$<9LP`2 zNX|PdEPOENFU|w zv&WGiw;h}15jrc`Dy9ED4^vS?2q81e!B1dW#)i* z0}tl`*s=Y|hu|&(5&3?(`~4~P$2bB$%Lt%=Q}Y5$LBc?;+iC=KZ2cU)ZfpLP=TC`W zGRR+|2ZDox0!ZL(yZ|FvQ6TjHUHEt7x7@1UACP~=N&g#UM1U+UK7f;~C`9o8tmYRC zzabL+U-~go5d1qIAW&Ka@_*IxyZJx0-1<8HN6RJ(M+PGL)x!_ag@S-!(EnN2|AGM# zAx>5RKtuR5d>o?78n%dNU=Tz|D-QvHp@0bZe|GTqVE)F_ufhBS8U*gf17L-dA~g5SwM0fqu0@Wb2A6$k-{34yqz+*KG5gd&Xa)kGu^{m&+a;Gb@r1d9OlPz9j~zs}pz z>Vk;Ucfp9k_&MX2L;(6ELST{qU=s=yfv12GnQswK2>d-$eqsy?6orS10<2MmK*Dfb z2*3<3BnHq&7J(BA0BBL6Kq0u6AbC9ngFFxjz9)!)E+>{YTY)=BL(mz0YUx?4+LQ#w$6i~VjK~~{P-b?=-hiL zfFX_Of3rbB|9(#4BBBV&^^*ozlZb-qo{sHATj)dU&A^;jv0eSBL#P^sF;cfj( zj)sB+;U1z0?4`*90*Qsd|Dl81Zi5hnM)emIKlMgGRq+rYVraD`5fj{44nToW3zha` za<;+c0M}p~@SpVuBm|$50+8pFP-CJ(!GgD|C44&oz=ZpcvI!C05N;z5AjkSG%|n0b zm*A#>fMXQIj)Zm)Vlx5=cM1Y9BlaY21^u=sL4b59&rdh>pOE~cwtzzZc$@#VB>;u| zT%_Td^#EoH$n6N-76J=_|G1+=5&Dfs0RZtfw8w~kP(g0#{bv?oh|phEi@>1`0A>`3 z=xrz3A{zi_Zrsp+)fNBL1_k~u|2GT>14G0)$?y>>EOxkbJpc6VzHt?f8wz1m>=A2r^8 z+86!_^>=D1zZJ)MUDK^D6j1<5KD!OSMU!WA;5pZ6#UcKzbh8} z>8#(zqJ$-hjDnySJ7p{`=06O=?`imJR{TXoLLm5KWh^kVXxq9nmOC<@5Fc0s!83^o zLc|cmZ=#CD|KC?_IjUI1|1(>&8kP>kQ8HwqUt3OQ<|)O(#1RayZ)P$IFo{$RvmY{|`3qt+()lgJ*>IPi+2YX@ zO~yOk{Gfkk|NgqtUwFVKRO*%UuGPn#B9cV^W)6J6qd_c&V^YuOi7wiO&u_L;1hgLX z1z&zxwT_hffsoa{ofugEcntgD@c7Blu?HnX;l@eu#U8_f_00jS=JZCe@&1DFn)&6o zzO|c+gC%Y0p7XDXZ3pz)@1(=8j}jT)y+N}xIsSe=+Sa(cA4R~RCDC*7u=2}zrO%~g1WDkr$+ zZLz=IJJ%o^jKI#*76qH}`+>^BU-HGjq+3NjK3%w*!J0vEt<@Ew(X^V$kxqnbfr z9q{#VVLCG6^hCO^H^lE#T`%l(e^MG2Vs~@={#-v>qvDblCU2iU$H;ZjcWWMIa4siNSPgR>I{7I|XjAle_ zY_hh9G~pLyzC~2o=pYY>Jh$@mrb%3JGs3n4+dgJ5$j}HWiZ6|_R5fAJst86G0t1v+ z$?a+Ouu^mo;(oCC=7UhW?FOe5;=w`j%`m8*)=@n}rk_G#IrP3m!FuO+u}^dHo!`y& znr{L=KRa_2+g)@otD;BTA2#1e@8&OEu+P2fVu-vFQJ4LI&Ot8~ar`Mb;^gf&CvY&9 zDna%4O}r&;CBD0Lv`V#TdP|J&rUx$Im5sK4 z`m*rVYcQvXcyb9@(-x1+^iAP|?;J&bjE)cQ@(>h3y0TKvw%_a)nwN6+Lg|!4U;C}to7ze2UZg2uUWEZ{T7DFiFp$;CBJ*6C{9j~Q+{lacNyzNiZ6_Z7_nBr z>X?3nz7!!k@?OX6qo_}bnBuz(@UIhv*CRjMRZoDuVCmSI)2Pe1i07ak8t8daQ0 zEPVwk7wvLd?W|IGmY$_zi{3>;sOr%wRHll0r|mW4eNgjWEpMI^S#uwLmIuwE(sA`5 z5i_39(zc(vO|jsVNmCE9uR2|S^09K^W`>Ne%7R}-aYa;f08w0?T2OCVZUXGa@^O7t z#&Xno|6=7FiCeR|e*1f62VO-Dm%_H!57hFdz2ogW>F;Z(wD8>VfXV>GB%;jO-QLE7 zo{=c+1|%8LjCOjPs6X$(G`#zSoV2(!Q0+l{;}TN>Ym1JC$y`Cv_o{qwg1$(if4sze z_~Rg}p5R?FrT~`<@Mpn`Y(E~@>xt!yH$Or)ecSOt*es>zS3Z60dnaactdLN4R-9Kj;(!M*&_25k*nn{OFuK*g2= z_wc2twszAhbk*?0;5MxMX4k@f5xx1WG8?;ZgFz@W|zHa+f?iT11ykVX=rtO z*h^bSJ`WCVjpCrGKeI}mj8o;FEQ%QhA{>Y-^t2rpt#R9;{2JCyS)HIt;dQkySxia3 zV!2cO(4BrFk+^P401X>3HScQO8MYyP+Cm6=1o&J_koNR`cAp&%Blej}ZMHJ&ASS$m zS)A~Y>=7lmbMKtb5)-#5j7qE#9o`YvvDpzK>`2JemL75(bRroaILvE{+qH~-3B%YI%OwkR(V}xe zny7cwd0wB>Rw*y9vBsR(@0AcV-4oh`U4-K%G-B7p{-R}fd;NLnrw>oa2~F?K0aDP%UN)sHyG-C)g0=`8qNEAn z1V?)t*gCdJBnOaSDi}L%g^=wmk~WvFgxiX%NS_{l8?RdqBr{3%W%TPffZDcUCa=d9 zE*o9~*s=@j6~u+(61jJQdxt{7ifVw$xvWdlb}LRw!1xE>QvZxOdSP^Aypn>IrW3Gn z5fn$u%0fPns@rKdJEBxaXXRr$j~ zl!u!Ew55$Wg^y*vX}Z7H%ymFtd8nh3nwF#`XZVfufz(-cSP{k8K0EfAX#$@mqkyOx zPB$-#t5tDeZFPwIw6JcW%$i*)`!Hbljm$XJp6{Yaji?NL_d*e;{+nDKrw>F)ET41l zKWQbF%&i&Y?T5wk`S!+2K6k4+Le8yN9ZS%eeu|c?yQ8ensi^VQNnXC_>;q+CqhZFp zz4F$0_fXRv+{vEQA6%nRcacBP#)=NrxNg}-X?ds5%L`G^5{}`?qhyn<<2P$4Cn{%m zUocTSYGI4AhK8~vHtkWOi>2L@egA|Jr;!T> zFP#za%uSM&*2*W3sezjSPB#+3U0WNu;s&vaW@L=`3*?aaB-)%9i|yF$)lcIbA1M~$ z(ec>NpZWy1n&_aOuO|rZAWiVs>j3N5CpYUiGnHGug!e_5#%^-7)0Xh9zyA6p`dQ(Q zhf=|&i$WFbp2a#m3hN0S$(3KY##e>?GY`6VAY0!WuVQt=!8A0-_c6$($B zrQwxzeFCz$SjLBNlX;M$s%=bGa?d<`ExOKy-BUHSDrG&%aOBf{5UW=!RJq7yr*WM9 zAxiAgH=~+Pkw%iF8_Es&M+^7#c;kMM6Y6Ty(@3-O!Z7y6lKY$ciF@rvz2W{9CZFBa zDX&Xm^5$wLsL9cJp@mP^8M_hol<}t=TWfc>643Da)YW>f+?(DJ#El;z*6+}S@mI=7 z)}1|CbEKs&K^dCbnSgZ*lWHnH@P`BYdo*NbKY&#qqR%@q8d5iTcCeRPY1xci>6m6>7$3uGw=EOOk!&`+{jFNQ3sjSMvTF&8bUR`s5|ssqIZ zI^5G=R_SW{HMZ?`5M#HE?w{vthdV{jvA5yu6%k(U)5X*4jqzhTz-pm8p` z$1BOST2eUjgK|S%#-A7D52|Wswn|sp~!nB#nO;|0D5R zHMqsKaM4JCFlF^#xyCZa9RkxL&*;KjsO{MSd=c+NXn!dB&eV@}tEPL=Q7=F)yKKng z{lv*0eu70zqmKHOaJhk4K*&d2eDZiG`kx(_BeYe(uyR8q^QeB<>5~JKwYk)5~U|h3qMAq_#No zJ`062O!+T;7=EeO5;64IEEizZ?WSgHW_O--`dbzsp3a` zx)cP@mHtrq_4|HQtn6J<Hzy;j`LC*w675h z!emvKZmlmGFh4roThtVEZ0!8;et3`gqIqJ1lEsH&V&69bM}ywK&IB(d1i=PvJyA`p z2;9M5Zc0ClAV_a^FoA3>lbxKVV4|(girLU{p|Hb5K2Cg0CVoP+AJ#yzTdCUIvNV}k zP)4k?p0}#&OKWY@`M|Y2Ot@R^auRU!&;VT2@?du^$=f2Skb6-5R=4kiXMn6xMTKExv$u}+if*W%;MLk~qar}?3 zvg1Zzx;z$D`3yLVSP@fl{KYRl>=uWcB_^AFAmbi}`6le=+~bud_NJuc&MNF}tjk7M zawEYL0(Cd4k)E=ARM!l3@%(eMM9yX^(8m-ypS?qtSd0`O)$4_)8J6iyN6Llnc%KC( zvX4(`-rXU76wM~|zQID2q` z1p8fZ{>98yddHjl$7Z0{u!_*5N#%3<2G1|8vZQ?eOrU2cxEv*AKr2~_ zlMN*N4LsTbbCCp+GrF|_uHu2PGbDx$7%l%gvDAQbdkmV_dbL{UJB^$IS;%K&G^EfO zo@VBe&%wnq47esXz$n>JXPYSOM5a_5D4#NWBI$LEcV@)fXwYV6O-D2ec6YuGJ11pV z^p}n;b!cljL7R>&-m{J&w%udoUGOI=mr^Q2jDu5j4IR6kn1IIG2@Ovl%+o_8nEo05 zJ59qq{`08Di0g5s!*oWk&uBg6#Vc=g4nS|Tl80Y$MJzuEmhaxit8}E|dt^G?V7kb& zRMWM9-b2)KaSw4C9*cItCy>uqh_Y`oTfW;nuHx<(QZF*9mfaf5Vw`iMFsoN$$=_oO z1SXE@MGqKjn51X%G0Wg7k5)|;`CwXWos`y-0~r?jWnJb3gr4s9tmilja%}-V^hyW8 z$0f zeFr1U$|e?K7LNj)o%pu{vmI>cLruX}cM5GCvxf~bXr0abo(%52a~Q`~L?d+<%4Pe$ z!9Bns zDdp?~7MxM%?8*6DgbT!yoGp9A)S-i-_T_~yRu)O)-ZQL+mF*KXL1c)y705Ts8PBC9^V$j@aN9%Ny}*Ql}stpUCOxd3b`v>=vlNb}$l#c3N(4 z@YhN)D(y&C+78*^ZNqd2WP_>NaCQ%_2V0sF-_xcvBPg$j6{(CMVg<7=Q?;D@!4-F@ zevI!}E8T$2;Io~ni;gY)6#-P1vXq{*k>6{S%|Bq`bZcM}vafy-e59Sa3zTDw0 zpGrGC-sfDHyx@=~(mF+oD1U#40p}n*%7>w!uB4p)`~T0iL4SL}Ch31)CAz^%8x*M3 z>jg2+*u7|CvhX;DoQneNjq&k8Z($tkAF=Q3qL4*(kdLA=f_>?eWKquYxs9UFOR0I0 z1WN&KvUIhWc%?+pXs0H^mMEhcjFkcA{x0sZR4SPjnaoxLKbTz?LDpsJU4aO09Jm&i zaS25v>^{teT1IKCgA~H$q&HD{PZgA7w=I|Sp7Vunas{a}SGpc;m57>e?(K_}(pCKU zn&ubJjVX4I9<8u0NV^FNYn9SQrGmj@76wX6R8)=*x!=)&LB_Ss3#@{|buyZLGwtS_ zUMxULnLOEtxKXldczSM`dZ=V#Zyu*sA4HY7z~<&~{mT51(0M!ZEz}#>mY9d;@YIEQ z)0&`za{zUg|K5Pj#$EU-o~17S?;Cz}x>5wvC`>T&W4&fjjiT}x(R)e>>QNpIP&bhu z#|G>Uz@YDq%lxssi3TD9hS9!-qZYNCDB%-frR}9Egzl?oNe6f5I1aP+|UsP3UwykN3q&bu0lpdqI z!7e&BFY<_FsK>e?qs&RQCNUDt@!0V6=&+;|$6O;B?vjUkXMd2Y=hg&&Z9yTihYk92 zGxSju6U@FQ-Bq*AySMq=6T3KbPVP(5dXtVZUAbYkPNNd(?n39_QOddpz@SKOT5{#& z4X1@Um&c`k`_`TEjr4C4?TDXg>r)Tsp;kH6dsxaXD@ Date: Fri, 13 Oct 2023 11:44:50 +0530 Subject: [PATCH 15/24] Updating documentation --- .all-contributorsrc | 2 +- .../.readthedocs.yaml => .readthedocs.yaml | 10 +- CONTRIBUTING.md | 2 +- README.md | 112 +++++++++--------- docs/README.rst | 2 +- .../Security/Security Configuration Guide.pdf | Bin 618074 -> 618233 bytes docs/source/Contributing/pullrequests.rst | 2 +- docs/source/InstallationGuides/index.rst | 2 +- docs/source/SecurityConfigGuide/Preface.rst | 2 +- .../ProductSubsystemSecurity.rst | 2 +- docs/source/bestpractices.rst | 3 +- docs/source/conf.py | 2 +- docs/source/index.rst | 16 +-- examples/README.md | 2 +- 14 files changed, 80 insertions(+), 79 deletions(-) rename docs/source/.readthedocs.yaml => .readthedocs.yaml (84%) diff --git a/.all-contributorsrc b/.all-contributorsrc index b1d072f5e..91da6fd0f 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -626,7 +626,7 @@ ], "contributorsPerLine": 7, "projectName": "omnia", - "projectOwner": "dellhpc", + "projectOwner": "dell", "repoType": "github", "repoHost": "https://github.com", "skipCi": true, diff --git a/docs/source/.readthedocs.yaml b/.readthedocs.yaml similarity index 84% rename from docs/source/.readthedocs.yaml rename to .readthedocs.yaml index 1623ebd66..517b9f6e7 100644 --- a/docs/source/.readthedocs.yaml +++ b/.readthedocs.yaml @@ -16,14 +16,14 @@ build: # golang: "1.19" # Build documentation in the docs/ directory with Sphinx -#sphinx: -# configuration: conf.py +sphinx: + configuration: docs/source/conf.py # If using Sphinx, optionally build your docs in additional formats such as PDF formats: - pdf # Optionally declare the Python requirements required to build your docs -#python: -# install: -# - requirements: docs/requirements.txt \ No newline at end of file +python: + install: + - requirements: docs/source/requirements.txt \ No newline at end of file diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 5ecaef530..bf6687d02 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -32,7 +32,7 @@ Contributions to Omnia are made through [Pull Requests (PRs)](https://help.githu 6. **Create a pull request:** [Create a pull request](https://help.github.com/en/github/collaborating-with-issues-and-pull-requests/creating-a-pull-request) with a title following this format Issue ###: Description (_i.e., Issue 1023: Reformat testutils_). It is important that you do a good job with the description to make the job of the code reviewer easier. A good description not only reduces review time, but also reduces the probability of a misunderstanding with the pull request. * **Important:** When preparing a pull request it is important to stay up-to-date with the project repository. We recommend that you rebase against the upstream repo _frequently_. To do this, use the following commands: ``` - git pull --rebase upstream devel #upstream is dellhpc/omnia + git pull --rebase upstream devel #upstream is dell/omnia git push --force origin #origin is your fork of the repository (e.g., /omnia.git) ``` * **PR Description:** Be sure to fully describe the pull request. Ideally, your PR description will contain: diff --git a/README.md b/README.md index 741c63d9b..fccb63058 100644 --- a/README.md +++ b/README.md @@ -4,11 +4,11 @@ -![GitHub](https://img.shields.io/github/license/dellhpc/omnia) ![GitHub release (latest by date including pre-releases)](https://img.shields.io/github/v/release/dellhpc/omnia?include_prereleases) ![GitHub last commit (branch)](https://img.shields.io/github/last-commit/dellhpc/omnia/main) ![GitHub commits since tagged version](https://img.shields.io/github/commits-since/dellhpc/omnia/v1.4.2/main) +![GitHub](https://img.shields.io/github/license/dell/omnia) ![GitHub release (latest by date including pre-releases)](https://img.shields.io/github/v/release/dell/omnia?include_prereleases) ![GitHub last commit (branch)](https://img.shields.io/github/last-commit/dell/omnia/main) ![GitHub commits since tagged version](https://img.shields.io/github/commits-since/dell/omnia/v1.4.2/main) -![All contributors](https://img.shields.io/github/all-contributors/dellhpc/omnia) ![GitHub forks](https://img.shields.io/github/forks/dellhpc/omnia) ![GitHub Repo stars](https://img.shields.io/github/stars/dellhpc/omnia) ![GitHub all releases](https://img.shields.io/github/downloads/dellhpc/omnia/total) +![All contributors](https://img.shields.io/github/all-contributors/dell/omnia) ![GitHub forks](https://img.shields.io/github/forks/dell/omnia) ![GitHub Repo stars](https://img.shields.io/github/stars/dell/omnia) ![GitHub all releases](https://img.shields.io/github/downloads/dell/omnia/total) -![GitHub issues](https://img.shields.io/github/issues-raw/dellhpc/omnia) ![GitHub Discussions](https://img.shields.io/github/discussions/dellhpc/omnia)[](https://app.slack.com/client/TH80K68HY/C018L5109PW) +![GitHub issues](https://img.shields.io/github/issues-raw/dell/omnia) ![GitHub Discussions](https://img.shields.io/github/discussions/dell/omnia)[](https://app.slack.com/client/TH80K68HY/C018L5109PW) #### Ansible playbook-based deployment of Slurm and Kubernetes on servers running an RPM-based Linux OS @@ -41,82 +41,82 @@ Our thanks go to everyone who makes Omnia possible ([emoji key](https://allcontr - - - - - - - + + + + + + + - - + + - - + + - - - - - - - + + + + + + + - - - - + + + + - - + + - - + + - - - - + + + + - - - - + + + + - - + + - - - - - - - + + + + + + + - - - - - - + + + + + + - - - - + + + +
John Lockman
John Lockman

⚠️ 💻 📝 🤔 🚧 🧑‍🏫 🎨 👀 📢 🐛
Lucas A. Wilson
Lucas A. Wilson

💻 🎨 🚧 🤔 📝 📖 🧑‍🏫 📆 👀 📢 🐛
Sujit Jadhav
Sujit Jadhav

🤔 📖 💻 👀 🚧 📆 🧑‍🏫 📢 💬 ⚠️ 🐛
Deepika K
Deepika K

💻 ⚠️ 🐛 🛡️ 📢 👀 🧑‍🏫
Abhishek SA
Abhishek SA

💻 🐛 📖 ⚠️ 🚧 📢 🧑‍🏫 👀
Sakshi Arora
Sakshi Arora

💻 🐛 📢
Shubhangi Srivastava
Shubhangi Srivastava

💻 🚧 🐛 📢
John Lockman
John Lockman

⚠️ 💻 📝 🤔 🚧 🧑‍🏫 🎨 👀 📢 🐛
Lucas A. Wilson
Lucas A. Wilson

💻 🎨 🚧 🤔 📝 📖 🧑‍🏫 📆 👀 📢 🐛
Sujit Jadhav
Sujit Jadhav

🤔 📖 💻 👀 🚧 📆 🧑‍🏫 📢 💬 ⚠️ 🐛
Deepika K
Deepika K

💻 ⚠️ 🐛 🛡️ 📢 👀 🧑‍🏫
Abhishek SA
Abhishek SA

💻 🐛 📖 ⚠️ 🚧 📢 🧑‍🏫 👀
Sakshi Arora
Sakshi Arora

💻 🐛 📢
Shubhangi Srivastava
Shubhangi Srivastava

💻 🚧 🐛 📢
Cassey Goveas
Cassey Goveas

📖 🐛 🚧 📢
Khushboo Dholi
Khushboo Dholi

💻
Cassey Goveas
Cassey Goveas

📖 🐛 🚧 📢
Khushboo Dholi
Khushboo Dholi

💻
Prasoon Kumar Sinha
Prasoon Kumar Sinha

🤔 📢
SajithDas
SajithDas

📆 📢
i3igpete
i3igpete

💼 📢
renzo-granados
renzo-granados

🐛
Aditya-DP
Aditya-DP

💻
renzo-granados
renzo-granados

🐛
Aditya-DP
Aditya-DP

💻
Katakam Rakesh Naga Sai
Katakam Rakesh Naga Sai

💻
araji
araji

💻
Mike Renfro
Mike Renfro

📖
Lee Reynolds
Lee Reynolds

💻 📖
blesson-james
blesson-james

💻 ⚠️ 🐛
avinashvishwanath
avinashvishwanath

📖
abhishek-s-a
abhishek-s-a

💻 📖 ⚠️
Katakam Rakesh Naga Sai
Katakam Rakesh Naga Sai

💻
araji
araji

💻
Mike Renfro
Mike Renfro

📖
Lee Reynolds
Lee Reynolds

💻 📖
blesson-james
blesson-james

💻 ⚠️ 🐛
avinashvishwanath
avinashvishwanath

📖
abhishek-s-a
abhishek-s-a

💻 📖 ⚠️
Franklin-Johnson
Franklin-Johnson

💻 📝
teiland7
teiland7

💻 📝
VishnupriyaKrish
VishnupriyaKrish

💻 ⚠️
Ishita Datta
Ishita Datta

📖
Franklin-Johnson
Franklin-Johnson

💻 📝
teiland7
teiland7

💻 📝
VishnupriyaKrish
VishnupriyaKrish

💻 ⚠️
Ishita Datta
Ishita Datta

📖
William Dizon
William Dizon

bssitton-BU
bssitton-BU

🐛
John Hearns
John Hearns

🐛
bssitton-BU
bssitton-BU

🐛
John Hearns
John Hearns

🐛
kris buggenhout
kris buggenhout

🐛
jiad-vmware
jiad-vmware

🐛
kris buggenhout
kris buggenhout

🐛
jiad-vmware
jiad-vmware

🐛
Justin Lecher
Justin Lecher

🤔
Kavyabr23
Kavyabr23

💻 ⚠️
vedaprakashanp
vedaprakashanp

⚠️ 💻
Bhagyashree-shetty
Bhagyashree-shetty

⚠️ 💻
Nihal Ranjan
Nihal Ranjan

⚠️ 💻 📢
Kavyabr23
Kavyabr23

💻 ⚠️
vedaprakashanp
vedaprakashanp

⚠️ 💻
Bhagyashree-shetty
Bhagyashree-shetty

⚠️ 💻
Nihal Ranjan
Nihal Ranjan

⚠️ 💻 📢
ptrinesh
ptrinesh

💻
Ikko Ashimine
Ikko Ashimine

💻
Lakshmi-Patneedi
Lakshmi-Patneedi

💻
Jie Li
Jie Li

💻
ptrinesh
ptrinesh

💻
Ikko Ashimine
Ikko Ashimine

💻
Lakshmi-Patneedi
Lakshmi-Patneedi

💻
Jie Li
Jie Li

💻
Yong Chen
Yong Chen

🎨
nvtngan
nvtngan

💻 🔌
tamilarasansubrama1
tamilarasansubrama1

⚠️ 💻
nvtngan
nvtngan

💻 🔌
tamilarasansubrama1
tamilarasansubrama1

⚠️ 💻
shemasr
shemasr

🐛 💻 ⚠️
Naresh Sharma
Naresh Sharma

🐛
Jon Hass
Jon Hass

📖 🎨
KalyanKonatham
KalyanKonatham

🐛
Rahul Akolkar
Rahul Akolkar

🐛
srinandini-karumuri
srinandini-karumuri

💻
Rishabhm47
Rishabhm47

⚠️ 💻
shemasr
shemasr

🐛 💻 ⚠️
Naresh Sharma
Naresh Sharma

🐛
Jon Hass
Jon Hass

📖 🎨
KalyanKonatham
KalyanKonatham

🐛
Rahul Akolkar
Rahul Akolkar

🐛
srinandini-karumuri
srinandini-karumuri

💻
Rishabhm47
Rishabhm47

⚠️ 💻
vaishakh-pm
vaishakh-pm

⚠️ 💻
shridhar-sharma
shridhar-sharma

⚠️ 💻
Jaya.Dayyala
Jaya.Dayyala

⚠️ 💻
fasongan
fasongan

💻
rahuldell21
rahuldell21

💻 ⚠️
diptiman12
diptiman12

💻
vaishakh-pm
vaishakh-pm

⚠️ 💻
shridhar-sharma
shridhar-sharma

⚠️ 💻
Jaya.Dayyala
Jaya.Dayyala

⚠️ 💻
fasongan
fasongan

💻
rahuldell21
rahuldell21

💻 ⚠️
diptiman12
diptiman12

💻
Supriya Parthasarathy
Supriya Parthasarathy

📆
Subhankar-Adak
Subhankar-Adak

💻
priti-parate
priti-parate

💻
Lavanya Adhikari
Lavanya Adhikari

💻
preeti-thankachan
preeti-thankachan

⚠️
Subhankar-Adak
Subhankar-Adak

💻
priti-parate
priti-parate

💻
Lavanya Adhikari
Lavanya Adhikari

💻
preeti-thankachan
preeti-thankachan

⚠️
diff --git a/docs/README.rst b/docs/README.rst index 30bd1d03f..149986341 100644 --- a/docs/README.rst +++ b/docs/README.rst @@ -1,7 +1,7 @@ Omnia Documentation ------------------- -**Omnia** is an open source project hosted on `GitHub `_. Go to `GitHub `_ to view the source, open issues, ask questions, and participate in the project. +**Omnia** is an open source project hosted on `GitHub `_. Go to `GitHub `_ to view the source, open issues, ask questions, and participate in the project. The Omnia docs are hosted here: https://omnia-doc.readthedocs.io/en/latest/index.html and are written in reStructuredText (`.rst`). diff --git a/docs/Security/Security Configuration Guide.pdf b/docs/Security/Security Configuration Guide.pdf index daecc9d1a1c9c1f0a7a51775037d21e7841ae8fd..bae633f4d7ef437befe1291f12b4433674483ab0 100644 GIT binary patch delta 15412 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 delta 15248 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 #origin is your fork of the repository (e.g., /omnia.git) PR description diff --git a/docs/source/InstallationGuides/index.rst b/docs/source/InstallationGuides/index.rst index dc8c50cb5..c87cc82a2 100644 --- a/docs/source/InstallationGuides/index.rst +++ b/docs/source/InstallationGuides/index.rst @@ -18,7 +18,7 @@ The control plane needs to be internet-capable with Github and a full OS install Once the Omnia repository has been cloned on to the control plane: :: - git clone https://github.com/dellhpc/omnia.git + git clone https://github.com/dell/omnia.git Change directory to Omnia using: :: diff --git a/docs/source/SecurityConfigGuide/Preface.rst b/docs/source/SecurityConfigGuide/Preface.rst index 0a7774a34..5ba6fb1f8 100644 --- a/docs/source/SecurityConfigGuide/Preface.rst +++ b/docs/source/SecurityConfigGuide/Preface.rst @@ -20,7 +20,7 @@ Document references In addition to this guide, more information on Omnia can be found through the below links: -* `Omnia: Read Me `_ +* `Omnia: Read Me `_ * `Omnia: Quick Installation Guide `_ Reporting security vulnerabilities diff --git a/docs/source/SecurityConfigGuide/ProductSubsystemSecurity.rst b/docs/source/SecurityConfigGuide/ProductSubsystemSecurity.rst index 640e658e1..7f96d48bf 100644 --- a/docs/source/SecurityConfigGuide/ProductSubsystemSecurity.rst +++ b/docs/source/SecurityConfigGuide/ProductSubsystemSecurity.rst @@ -311,7 +311,7 @@ Omnia configures the following ports for use by third-party tools installed by O Data security ------------- -Omnia does not store data. The passwords Omnia accepts as input to configure the third party tools are validated and then encrypted using Ansible Vault. +Omnia does not store data. The passwords Omnia accepts as input to configure the third party tools are validated and then encrypted using Ansible Vault. Run ``yum update --security`` routinely on the control plane for the latest security updates. For more information on the passwords used by Omnia, see Login Security Settings. diff --git a/docs/source/bestpractices.rst b/docs/source/bestpractices.rst index 195f58fbc..debc24bd6 100644 --- a/docs/source/bestpractices.rst +++ b/docs/source/bestpractices.rst @@ -8,4 +8,5 @@ Best Practices * Avoid rebooting the Control Plane as much as possible to ensure that all network configuration does not get disturbed. * Review the prerequisites before running Omnia Scripts. * Ensure that the firefox version being used on the control plane is the latest available. This can be achieved using ``dnf update firefox -y`` -* It is recommended to configure devices using Omnia playbooks for better interoperability and ease of access. \ No newline at end of file +* It is recommended to configure devices using Omnia playbooks for better interoperability and ease of access. +* Run ``yum update --security`` routinely on the control plane for the latest security updates. \ No newline at end of file diff --git a/docs/source/conf.py b/docs/source/conf.py index 9707d9fb8..fb9d71eaf 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -9,7 +9,7 @@ project = 'Omnia' copyright = '2023, Dell Technologies' -author = 'dellhpc/omnia' +author = 'dell/omnia' release = '1.4.2' rst_epilog = "If you have any feedback about Omnia documentation, please reach out at `omnia.readme@dell.com `_." diff --git a/docs/source/index.rst b/docs/source/index.rst index dfb20ba3f..804235ae3 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -12,7 +12,7 @@ Ansible playbook-based deployment of Slurm and Kubernetes on servers running an **Omnia** (Latin: all or everything) is a deployment tool to turn servers with RPM-based Linux images into functioning Slurm/Kubernetes clusters. -**Omnia** is an open source project hosted on `GitHub `_. Go to `GitHub `_ to view the source, open issues, ask questions, and participate in the project. +**Omnia** is an open source project hosted on `GitHub `_. Go to `GitHub `_ to view the source, open issues, ask questions, and participate in the project. **Licensing** @@ -62,15 +62,15 @@ For a better understanding of what Omnia does, check out our `docs Date: Fri, 13 Oct 2023 12:00:10 +0530 Subject: [PATCH 16/24] Updating documentation Signed-off-by: cgoveas --- docs/source/SecurityConfigGuide/ProductSubsystemSecurity.rst | 2 +- docs/source/requirements.txt | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/docs/source/SecurityConfigGuide/ProductSubsystemSecurity.rst b/docs/source/SecurityConfigGuide/ProductSubsystemSecurity.rst index 7f96d48bf..48e39422c 100644 --- a/docs/source/SecurityConfigGuide/ProductSubsystemSecurity.rst +++ b/docs/source/SecurityConfigGuide/ProductSubsystemSecurity.rst @@ -4,7 +4,7 @@ Product and Subsystem Security Security controls map ---------------------- -.. image:: ../images/securityControlsMap.JPG +.. image:: ../images/securityControlsMap.jpg Omnia performs bare metal configuration to enable AI/HPC workloads. It uses Ansible playbooks to perform installations and configurations. iDRAC is supported for provisioning bare metal servers. Omnia installs xCAT to enable provisioning of clusters via PXE in different ways: diff --git a/docs/source/requirements.txt b/docs/source/requirements.txt index 0c4cdeebe..dbf9ee22b 100644 --- a/docs/source/requirements.txt +++ b/docs/source/requirements.txt @@ -1 +1,2 @@ -sphinx-tabs \ No newline at end of file +sphinx-tabs +sphinx-rtd-theme==1.2.2 \ No newline at end of file From 2137b339a73df911e220bf72d43bcebe1da08761 Mon Sep 17 00:00:00 2001 From: cgoveas Date: Fri, 13 Oct 2023 14:26:10 +0530 Subject: [PATCH 17/24] Updating documentation Signed-off-by: cgoveas --- docs/source/Tables/SoftwareInstalled.csv | 74 ++++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 docs/source/Tables/SoftwareInstalled.csv diff --git a/docs/source/Tables/SoftwareInstalled.csv b/docs/source/Tables/SoftwareInstalled.csv new file mode 100644 index 000000000..185845405 --- /dev/null +++ b/docs/source/Tables/SoftwareInstalled.csv @@ -0,0 +1,74 @@ +OSS Title License Name Description Repo URL +389-ds GPL "LDAP server used for authentication, access control." +activemq Apache-2.0 "Most popular multi protocol, message broker." +ansible posix GNU General Public License Ansible Collection targeting POSIX and POSIX-ish platforms. +ansible pylibssh LGPL 2.1 Python bindings to client functionality of libssh specific to Ansible use case. +ansible.utils ansible collection GPL 3.0 "Ansible Collection with utilities to ease the management, manipulation, and validation of data within a playbook" +apparmor GNU General Public License Controls access based on paths of the program files +apptainer BSD 3-Clause License Application containers for Linux https://github.com/apptainer/apptainer +Beegfs-Client GPLv2 BeeGFS is a high-performance parallel file system with easy management. The distributed metadata architecture of BeeGFS has been designed to provide the scalability and flexibility that is required to run today�s and tomorrow�s most demanding HPC applications. +bind-dyndb-ldap GNU General Public License v2 LDAP driver for BIND9. It allows you to read data and also write data back (DNS Updates) to an LDAP backend. +buildah Apache-2.0 Tool to build and run containers +cni Apache-2.0 Networking for Linux containers +community.general ansible GNU-General Public License v3.0 The collection is a part of the Ansible package and includes many modules and plugins supported by Ansible community which are not part of more specialized community collections. +community.grafana GPL 3.0 Technical Support for open source grafana. +coreDNS Apache-2.0 DNS server that chains plugins +cri-o Apache-2.0 CRI-O is an implementation of the Kubernetes CRI (Container Runtime Interface) to enable using OCI (Open Container Initiative) compatible runtimes. +CUDA Toolkit NVIDIA License The NVIDIA� CUDA� Toolkit provides a development environment for creating high performance GPU-accelerated applications. +dellemc.openmanage GNU-General Public License v3.0 "OpenManage Ansible Modules simplifies and automates provisioning, deployment, and updates of PowerEdge servers and modular infrastructure." +dellemc.os10 GNU-General Public License v3.0 It provides networking hardware abstraction through a common set of APIs +Docker CE Apache-2.0 Docker Service +freeipa GNU General Public License v3 Authentication system used on the login node +golang BSD-3-Clause License "Go is a statically typed, compiled programming language designed at Google." +grafana GNU AFFERO GENERAL PUBLIC LICENSE Grafana is the open source analytics & monitoring solution for every database. +helm Apache-2.0 Kubernetes Package Manager +horovod Apache-2.0 Distributed deep learning training framework for Tensorflow +idrac-telemetry-reference tools Apache-2.0 Reference toolset for PowerEdge telemetry metric collection and integration with analytics and visualization solutions. +jansson MIT License "C library for encoding, decoding and manipulating JSON data" +jupyterhub BSD-3Clause New or Revised License Multi-user hub +kfctl Apache-2.0 CLI for deploying and managing Kubeflow +Kube prometheus stack Apache-2.0 "Kube Prometheus Stack is a collection of Kubernetes manifests, Grafana dashboards, and Prometheus rules." +kubeadm Apache-2.0 �fast paths� for creating Kubernetes clusters +kubectl Apache-2.0 Command line tool for Kubernetes +kubeflow Apache-2.0 Cloud Native platform for machine learning +kubelet Apache-2.0 "Provides external, versioned ComponentConfig API types for configuring the kubelet" +Kubernetes Controllers Apache-2.0 HPC Workload Manager +kubernetes.core GPL 3.0 Performs CRUD operations on K8s objects +libjwt Mozilla Public License-2.0 License JWT C Library +Lmod MIT License Lmod is a Lua based module system that easily handles the MODULEPATH Hierarchical problem. +loki GNU AFFERO GENERAL PUBLIC LICENSE v3.0 Loki is a log aggregation system designed to store and query logs from all your applications and infrastructure +Lua MIT License "Lua is a lightweight, high-level, multi-paradigm programming language designed primarily for embedded use in applications." +mailx MIT License mailx is a Unix utility program for sending and receiving mail. +MariaDB GPL 2.0 Relational database used by Slurm +metallb Apache-2.0 A network load-balancer implementation for Kubernetes using standard routing protocols https://github.com/metallb/metallb +MLNX-OFED BSD License MLNX_OFED is an NVIDIA tested and packaged version of OFED that supports two interconnect types using the same RDMA (remote DMA) and kernel bypass APIs called OFED verbs � InfiniBand and Ethernet. +MPI 3Clause BSD License HPC library +mysql GPL 2.0 MySQL is an open-source relational database management system. +nsfcac/grafana-plugin MIT License Machine Learning Framework +NVidia container runtime Apache-2.0 Nvidia container runtime library +omsdk Apache-2.0 Dell EMC OpenManage Python SDK (OMSDK) is a python library that helps developers and customers to automate the lifecycle management of PowerEdge Servers +openshift Apache-2.0 On-premises platform as a service built around Linux containers orchestrated and managed by Kubernetes +OpenSM GNU General Public License 2 +pandas BSD-3-Clause License "pandas is a fast, powerful, flexible and easy to use open source data analysis and manipulation tool, built on top of the Python programming language." +perl-DBD-Pg GNU General Public License v3 DBD::Pg - PostgreSQL database driver for the DBI module +postgresSQL PostgresSQL License "PostgreSQL, also known as Postgres, is a free and open-source relational database management system emphasizing extensibility and SQL compliance." +prometheus Apache-2.0 "Open-source monitoring system with a dimensional data model, flexible query language, efficient time series database and modern alerting approach." +promtail Apache-2.0 Promtail is an agent which ships the contents of local logs to a private Grafana Loki instance or Grafana Cloud. +psutil BSD 3-Clause License Cross-platform lib for process and system monitoring in Python https://github.com/giampaolo/psutil +psycopg2-binary GNU Lesser General Public License Psycopg is the most popular PostgreSQL database adapter for the Python programming language. +pyinstaller "GNU General Public License, Apache 2.0" Freeze (package) Python programs into stand-alone executables https://github.com/pyinstaller/pyinstaller +python.requests Apache-2.0 Makes HTTP requests simpler and more human-friendly. +python3-netaddr BSD License A Python library for representing and manipulating network addresses. +Python-pip MIT License Python Package +redhat subscription Apache-2.0 "Red Hat Subscription Management (RHSM) is a customer-driven, end-to-end solution that provides tools for subscription status and management and integrates with Red Hat�s system management tools." +redis BSD-3-Clause License In-memory database +singularity BSD License Container platform. It allows you to create and run containers that package up pieces of software in a way that is portable and reproducible. +Slurm Workload manager GNU General Public License HPC Workload Manager +slurm-exporter GNU General Public License v3 Prometheus collector and exporter for metrics extracted from the Slurm resource scheduling system. +smartmontools GNU GPL Official read only mirror of the smartmontools project SVN smartmontools/smartmontools: Official read only mirror of the smartmontools project SVN (github.com) +snoopy GPL 2.0 Snoopy is a small library that logs all program executions on your Linux/BSD system +spark Apache-2.0 +tensorflow Apache-2.0 Machine Learning framework +timescaledb Apache-2.0 "TimescaleDB is a time-series SQL database providing fast analytics, scalability, with automated data management on a proven storage engine." +xCAT Eclipse Public License 1.0 Provisioning tool that also creates custom disk partitions +xorriso GPL 3.0 xorriso copies file objects from POSIX compliant filesystems into Rock Ridge enhanced ISO 9660 filesystems. From b2a6f9cf9d9b0f493ba190dbaef90b989d48a8b2 Mon Sep 17 00:00:00 2001 From: cgoveas Date: Fri, 13 Oct 2023 14:31:57 +0530 Subject: [PATCH 18/24] Updating documentation Signed-off-by: cgoveas --- .../SupportMatrix/omniainstalledsoftware.rst | 144 +----------------- 1 file changed, 4 insertions(+), 140 deletions(-) diff --git a/docs/source/Overview/SupportMatrix/omniainstalledsoftware.rst b/docs/source/Overview/SupportMatrix/omniainstalledsoftware.rst index 037714cad..a419f2a79 100644 --- a/docs/source/Overview/SupportMatrix/omniainstalledsoftware.rst +++ b/docs/source/Overview/SupportMatrix/omniainstalledsoftware.rst @@ -1,143 +1,7 @@ Software Installed by Omnia =========================== -+------------------------------------+------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| OSS Title | License Name/Version # | Description | -+====================================+==========================================+==============================================================================================================================================================================================================================================================================+ -| Slurm Workload manager | GNU General Public License | HPC Workload Manager | -+------------------------------------+------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| Kubernetes Controllers | Apache-2.0 | HPC Workload Manager | -+------------------------------------+------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| MariaDB | GPL 2.0 | Relational database used by Slurm | -+------------------------------------+------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| Docker CE | Apache-2.0 | Docker Service | -+------------------------------------+------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| NVidia container runtime | Apache-2.0 | Nvidia container runtime library | -+------------------------------------+------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| Python-pip | MIT License | Python Package | -+------------------------------------+------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| kubelet | Apache-2.0 | Provides external, versioned ComponentConfig API types for configuring the kubelet | -+------------------------------------+------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| kubeadm | Apache-2.0 | "fast paths" for creating Kubernetes clusters | -+------------------------------------+------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| kubectl | Apache-2.0 | Command line tool for Kubernetes | -+------------------------------------+------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| jupyterhub | BSD-3Clause New or Revised License | Multi-user hub | -+------------------------------------+------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| kfctl | Apache-2.0 | CLI for deploying and managing Kubeflow | -+------------------------------------+------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| kubeflow | Apache-2.0 | Cloud Native platform for machine learning | -+------------------------------------+------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| helm | Apache-2.0 | Kubernetes Package Manager | -+------------------------------------+------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| tensorflow | Apache-2.0 | Machine Learning framework | -+------------------------------------+------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| horovod | Apache-2.0 | Distributed deep learning training framework for Tensorflow | -+------------------------------------+------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| MPI | 3Clause BSD License | HPC library | -+------------------------------------+------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| spark | Apache-2.0 | | -+------------------------------------+------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| coreDNS | Apache-2.0 | DNS server that chains plugins | -+------------------------------------+------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| cni | Apache-2.0 | Networking for Linux containers | -+------------------------------------+------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| dellemc.openmanage | GNU-General Public License v3.0 | OpenManage Ansible Modules simplifies and automates provisioning, deployment, and updates of PowerEdge servers and modular infrastructure. | -+------------------------------------+------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| dellemc.os10 | GNU-General Public License v3.0 | It provides networking hardware abstraction through a common set of APIs | -+------------------------------------+------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| community.general ansible | GNU-General Public License v3.0 | The collection is a part of the Ansible package and includes many modules and plugins supported by Ansible community which are not part of more specialized community collections. | -+------------------------------------+------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| redis | BSD-3-Clause License | In-memory database | -+------------------------------------+------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| cri-o | Apache-2.0 | CRI-O is an implementation of the Kubernetes CRI (Container Runtime Interface) to enable using OCI (Open Container Initiative) compatible runtimes. | -+------------------------------------+------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| buildah | Apache-2.0 | Tool to build and run containers | -+------------------------------------+------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| OpenSM | GNU General Public License 2 | | -+------------------------------------+------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| omsdk | Apache-2.0 | Dell EMC OpenManage Python SDK (OMSDK) is a python library that helps developers and customers to automate the lifecycle management of PowerEdge Servers | -+------------------------------------+------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| freeipa | GNU General Public License v3 | Authentication system used on the login node | -+------------------------------------+------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| bind-dyndb-ldap | GNU General Public License v2 | LDAP driver for BIND9. It allows you to read data and also write data back (DNS Updates) to an LDAP backend. | -+------------------------------------+------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| slurm-exporter | GNU General Public License v3 | Prometheus collector and exporter for metrics extracted from the Slurm resource scheduling system. | -+------------------------------------+------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| prometheus | Apache-2.0 | Open-source monitoring system with a dimensional data model, flexible query language, efficient time series database and modern alerting approach. | -+------------------------------------+------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| singularity | BSD License | Container platform. It allows you to create and run containers that package up pieces of software in a way that is portable and reproducible. | -+------------------------------------+------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| loki | GNU AFFERO GENERAL PUBLIC LICENSE v3.0 | Loki is a log aggregation system designed to store and query logs from all your applications and infrastructure | -+------------------------------------+------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| promtail | Apache-2.0 | Promtail is an agent which ships the contents of local logs to a private Grafana Loki instance or Grafana Cloud. | -+------------------------------------+------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| Kube prometheus stack | Apache-2.0 | Kube Prometheus Stack is a collection of Kubernetes manifests, Grafana dashboards, and Prometheus rules. | -+------------------------------------+------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| mailx | MIT License | mailx is a Unix utility program for sending and receiving mail. | -+------------------------------------+------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| xorriso | GPL 3.0 | xorriso copies file objects from POSIX compliant filesystems into Rock Ridge enhanced ISO 9660 filesystems. | -+------------------------------------+------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| openshift | Apache-2.0 | On-premises platform as a service built around Linux containers orchestrated and managed by Kubernetes | -+------------------------------------+------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| grafana | GNU AFFERO GENERAL PUBLIC LICENSE | Grafana is the open source analytics & monitoring solution for every database. | -+------------------------------------+------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| kubernetes.core | GPL 3.0 | Performs CRUD operations on K8s objects | -+------------------------------------+------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| community.grafana | GPL 3.0 | Technical Support for open source grafana. | -+------------------------------------+------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| activemq | Apache-2.0 | Most popular multi protocol, message broker. | -+------------------------------------+------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| golang | BSD-3-Clause License | Go is a statically typed, compiled programming language designed at Google. | -+------------------------------------+------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| mysql | GPL 2.0 | MySQL is an open-source relational database management system. | -+------------------------------------+------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| postgresSQL | PostgresSQL License | PostgreSQL, also known as Postgres, is a free and open-source relational database management system emphasizing extensibility and SQL compliance. | -+------------------------------------+------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| idrac-telemetry-reference tools | Apache-2.0 | Reference toolset for PowerEdge telemetry metric collection and integration with analytics and visualization solutions. | -+------------------------------------+------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| nsfcac/grafana-plugin | MIT License | Machine Learning Framework | -+------------------------------------+------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| jansson | MIT License | C library for encoding, decoding and manipulating JSON data | -+------------------------------------+------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| libjwt | Mozilla Public License-2.0 License | JWT C Library | -+------------------------------------+------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| 389-ds | GPL | LDAP server used for authentication, access control. | -+------------------------------------+------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| apparmor | GNU General Public License | Controls access based on paths of the program files | -+------------------------------------+------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| snoopy | GPL 2.0 | Snoopy is a small library that logs all program executions on your Linux/BSD system | -+------------------------------------+------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| timescaledb | Apache-2.0 | TimescaleDB is a time-series SQL database providing fast analytics, scalability, with automated data management on a proven storage engine. | -+------------------------------------+------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| Beegfs-Client | GPLv2 | BeeGFS is a high-performance parallel file system with easy management. The distributed metadata architecture of BeeGFS has been designed to provide the scalability and flexibility that is required to run today's and tomorrow's most demanding HPC applications. | -+------------------------------------+------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| redhat subscription | Apache-2.0 | Red Hat Subscription Management (RHSM) is a customer-driven, end-to-end solution that provides tools for subscription status and management and integrates with Red Hat's system management tools. | -+------------------------------------+------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| Lmod | MIT License | Lmod is a Lua based module system that easily handles the MODULEPATH Hierarchical problem. | -+------------------------------------+------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| Lua | MIT License | Lua is a lightweight, high-level, multi-paradigm programming language designed primarily for embedded use in applications. | -+------------------------------------+------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| ansible posix | GNU General Public License | Ansible Collection targeting POSIX and POSIX-ish platforms. | -+------------------------------------+------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| xCAT | Eclipse Public License 1.0 | Provisioning tool that also creates custom disk partitions | -+------------------------------------+------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| CUDA Toolkit | NVIDIA License | The NVIDIA® CUDA® Toolkit provides a development environment for creating high performance GPU-accelerated applications. | -+------------------------------------+------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| MLNX-OFED | BSD License | MLNX_OFED is an NVIDIA tested and packaged version of OFED that supports two interconnect types using the same RDMA (remote DMA) and kernel bypass APIs called OFED verbs – InfiniBand and Ethernet. | -+------------------------------------+------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| ansible pylibssh | LGPL 2.1 | Python bindings to client functionality of libssh specific to Ansible use case. | -+------------------------------------+------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| perl-DBD-Pg | GNU General Public License v3 | DBD::Pg - PostgreSQL database driver for the DBI module | -+------------------------------------+------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| ansible.utils ansible collection | GPL 3.0 | Ansible Collection with utilities to ease the management, manipulation, and validation of data within a playbook | -+------------------------------------+------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| pandas | BSD-3-Clause License | pandas is a fast, powerful, flexible and easy to use open source data analysis and manipulation tool, built on top of the Python programming language. | -+------------------------------------+------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| python3-netaddr | BSD License | A Python library for representing and manipulating network addresses. | -+------------------------------------+------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| psycopg2-binary | GNU Lesser General Public License | Psycopg is the most popular PostgreSQL database adapter for the Python programming language. | -+------------------------------------+------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| python.requests | Apache-2.0 | Makes HTTP requests simpler and more human-friendly. | -+------------------------------------+------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - +.. csv-table:: Parameters + :file: ../../Tables/SoftwareInstalled.csv + :header-rows: 1 + :keepspace: From e202f4ea5adc050ed07e964a303e9d4675cf55a9 Mon Sep 17 00:00:00 2001 From: cgoveas Date: Fri, 13 Oct 2023 14:47:13 +0530 Subject: [PATCH 19/24] Updating documentation Signed-off-by: cgoveas --- docs/source/Tables/SoftwareInstalled.csv | 148 +++++++++++------------ 1 file changed, 74 insertions(+), 74 deletions(-) diff --git a/docs/source/Tables/SoftwareInstalled.csv b/docs/source/Tables/SoftwareInstalled.csv index 185845405..d8b52c64d 100644 --- a/docs/source/Tables/SoftwareInstalled.csv +++ b/docs/source/Tables/SoftwareInstalled.csv @@ -1,74 +1,74 @@ -OSS Title License Name Description Repo URL -389-ds GPL "LDAP server used for authentication, access control." -activemq Apache-2.0 "Most popular multi protocol, message broker." -ansible posix GNU General Public License Ansible Collection targeting POSIX and POSIX-ish platforms. -ansible pylibssh LGPL 2.1 Python bindings to client functionality of libssh specific to Ansible use case. -ansible.utils ansible collection GPL 3.0 "Ansible Collection with utilities to ease the management, manipulation, and validation of data within a playbook" -apparmor GNU General Public License Controls access based on paths of the program files -apptainer BSD 3-Clause License Application containers for Linux https://github.com/apptainer/apptainer -Beegfs-Client GPLv2 BeeGFS is a high-performance parallel file system with easy management. The distributed metadata architecture of BeeGFS has been designed to provide the scalability and flexibility that is required to run today�s and tomorrow�s most demanding HPC applications. -bind-dyndb-ldap GNU General Public License v2 LDAP driver for BIND9. It allows you to read data and also write data back (DNS Updates) to an LDAP backend. -buildah Apache-2.0 Tool to build and run containers -cni Apache-2.0 Networking for Linux containers -community.general ansible GNU-General Public License v3.0 The collection is a part of the Ansible package and includes many modules and plugins supported by Ansible community which are not part of more specialized community collections. -community.grafana GPL 3.0 Technical Support for open source grafana. -coreDNS Apache-2.0 DNS server that chains plugins -cri-o Apache-2.0 CRI-O is an implementation of the Kubernetes CRI (Container Runtime Interface) to enable using OCI (Open Container Initiative) compatible runtimes. -CUDA Toolkit NVIDIA License The NVIDIA� CUDA� Toolkit provides a development environment for creating high performance GPU-accelerated applications. -dellemc.openmanage GNU-General Public License v3.0 "OpenManage Ansible Modules simplifies and automates provisioning, deployment, and updates of PowerEdge servers and modular infrastructure." -dellemc.os10 GNU-General Public License v3.0 It provides networking hardware abstraction through a common set of APIs -Docker CE Apache-2.0 Docker Service -freeipa GNU General Public License v3 Authentication system used on the login node -golang BSD-3-Clause License "Go is a statically typed, compiled programming language designed at Google." -grafana GNU AFFERO GENERAL PUBLIC LICENSE Grafana is the open source analytics & monitoring solution for every database. -helm Apache-2.0 Kubernetes Package Manager -horovod Apache-2.0 Distributed deep learning training framework for Tensorflow -idrac-telemetry-reference tools Apache-2.0 Reference toolset for PowerEdge telemetry metric collection and integration with analytics and visualization solutions. -jansson MIT License "C library for encoding, decoding and manipulating JSON data" -jupyterhub BSD-3Clause New or Revised License Multi-user hub -kfctl Apache-2.0 CLI for deploying and managing Kubeflow -Kube prometheus stack Apache-2.0 "Kube Prometheus Stack is a collection of Kubernetes manifests, Grafana dashboards, and Prometheus rules." -kubeadm Apache-2.0 �fast paths� for creating Kubernetes clusters -kubectl Apache-2.0 Command line tool for Kubernetes -kubeflow Apache-2.0 Cloud Native platform for machine learning -kubelet Apache-2.0 "Provides external, versioned ComponentConfig API types for configuring the kubelet" -Kubernetes Controllers Apache-2.0 HPC Workload Manager -kubernetes.core GPL 3.0 Performs CRUD operations on K8s objects -libjwt Mozilla Public License-2.0 License JWT C Library -Lmod MIT License Lmod is a Lua based module system that easily handles the MODULEPATH Hierarchical problem. -loki GNU AFFERO GENERAL PUBLIC LICENSE v3.0 Loki is a log aggregation system designed to store and query logs from all your applications and infrastructure -Lua MIT License "Lua is a lightweight, high-level, multi-paradigm programming language designed primarily for embedded use in applications." -mailx MIT License mailx is a Unix utility program for sending and receiving mail. -MariaDB GPL 2.0 Relational database used by Slurm -metallb Apache-2.0 A network load-balancer implementation for Kubernetes using standard routing protocols https://github.com/metallb/metallb -MLNX-OFED BSD License MLNX_OFED is an NVIDIA tested and packaged version of OFED that supports two interconnect types using the same RDMA (remote DMA) and kernel bypass APIs called OFED verbs � InfiniBand and Ethernet. -MPI 3Clause BSD License HPC library -mysql GPL 2.0 MySQL is an open-source relational database management system. -nsfcac/grafana-plugin MIT License Machine Learning Framework -NVidia container runtime Apache-2.0 Nvidia container runtime library -omsdk Apache-2.0 Dell EMC OpenManage Python SDK (OMSDK) is a python library that helps developers and customers to automate the lifecycle management of PowerEdge Servers -openshift Apache-2.0 On-premises platform as a service built around Linux containers orchestrated and managed by Kubernetes -OpenSM GNU General Public License 2 -pandas BSD-3-Clause License "pandas is a fast, powerful, flexible and easy to use open source data analysis and manipulation tool, built on top of the Python programming language." -perl-DBD-Pg GNU General Public License v3 DBD::Pg - PostgreSQL database driver for the DBI module -postgresSQL PostgresSQL License "PostgreSQL, also known as Postgres, is a free and open-source relational database management system emphasizing extensibility and SQL compliance." -prometheus Apache-2.0 "Open-source monitoring system with a dimensional data model, flexible query language, efficient time series database and modern alerting approach." -promtail Apache-2.0 Promtail is an agent which ships the contents of local logs to a private Grafana Loki instance or Grafana Cloud. -psutil BSD 3-Clause License Cross-platform lib for process and system monitoring in Python https://github.com/giampaolo/psutil -psycopg2-binary GNU Lesser General Public License Psycopg is the most popular PostgreSQL database adapter for the Python programming language. -pyinstaller "GNU General Public License, Apache 2.0" Freeze (package) Python programs into stand-alone executables https://github.com/pyinstaller/pyinstaller -python.requests Apache-2.0 Makes HTTP requests simpler and more human-friendly. -python3-netaddr BSD License A Python library for representing and manipulating network addresses. -Python-pip MIT License Python Package -redhat subscription Apache-2.0 "Red Hat Subscription Management (RHSM) is a customer-driven, end-to-end solution that provides tools for subscription status and management and integrates with Red Hat�s system management tools." -redis BSD-3-Clause License In-memory database -singularity BSD License Container platform. It allows you to create and run containers that package up pieces of software in a way that is portable and reproducible. -Slurm Workload manager GNU General Public License HPC Workload Manager -slurm-exporter GNU General Public License v3 Prometheus collector and exporter for metrics extracted from the Slurm resource scheduling system. -smartmontools GNU GPL Official read only mirror of the smartmontools project SVN smartmontools/smartmontools: Official read only mirror of the smartmontools project SVN (github.com) -snoopy GPL 2.0 Snoopy is a small library that logs all program executions on your Linux/BSD system -spark Apache-2.0 -tensorflow Apache-2.0 Machine Learning framework -timescaledb Apache-2.0 "TimescaleDB is a time-series SQL database providing fast analytics, scalability, with automated data management on a proven storage engine." -xCAT Eclipse Public License 1.0 Provisioning tool that also creates custom disk partitions -xorriso GPL 3.0 xorriso copies file objects from POSIX compliant filesystems into Rock Ridge enhanced ISO 9660 filesystems. +OSS Title,License Name,Description,Repository URL +389-ds,GPL,"LDAP server used for authentication, access control.", +activemq,Apache-2.0,"Most popular multi protocol, message broker.", +ansible posix,GNU General Public License,Ansible Collection targeting POSIX and POSIX-ish platforms., +ansible pylibssh,LGPL 2.1,Python bindings to client functionality of libssh specific to Ansible use case., +ansible.utils ansible collection,GPL 3.0,"Ansible Collection with utilities to ease the management, manipulation, and validation of data within a playbook", +apparmor,GNU General Public License,Controls access based on paths of the program files, +apptainer,BSD 3-Clause License,Application containers for Linux,https://github.com/apptainer/apptainer +Beegfs-Client,GPLv2,BeeGFS is a high-performance parallel file system with easy management. The distributed metadata architecture of BeeGFS has been designed to provide the scalability and flexibility that is required to run today’s and tomorrow’s most demanding HPC applications., +bind-dyndb-ldap,GNU General Public License v2,LDAP driver for BIND9. It allows you to read data and also write data back (DNS Updates) to an LDAP backend., +buildah,Apache-2.0,Tool to build and run containers, +cni,Apache-2.0,Networking for Linux containers, +community.general ansible,GNU-General Public License v3.0,The collection is a part of the Ansible package and includes many modules and plugins supported by Ansible community which are not part of more specialized community collections., +community.grafana,GPL 3.0,Technical Support for open source grafana., +coreDNS,Apache-2.0,DNS server that chains plugins, +cri-o,Apache-2.0,CRI-O is an implementation of the Kubernetes CRI (Container Runtime Interface) to enable using OCI (Open Container Initiative) compatible runtimes., +CUDA Toolkit,NVIDIA License,The NVIDIA® CUDA® Toolkit provides a development environment for creating high performance GPU-accelerated applications., +dellemc.openmanage,GNU-General Public License v3.0,"OpenManage Ansible Modules simplifies and automates provisioning, deployment, and updates of PowerEdge servers and modular infrastructure.", +dellemc.os10,GNU-General Public License v3.0,It provides networking hardware abstraction through a common set of APIs, +Docker CE,Apache-2.0,Docker Service, +freeipa,GNU General Public License v3,Authentication system used on the login node, +golang,BSD-3-Clause License,"Go is a statically typed, compiled programming language designed at Google.", +grafana,GNU AFFERO GENERAL PUBLIC LICENSE,Grafana is the open source analytics & monitoring solution for every database., +helm,Apache-2.0,Kubernetes Package Manager, +horovod,Apache-2.0,Distributed deep learning training framework for Tensorflow, +idrac-telemetry-reference tools,Apache-2.0,Reference toolset for PowerEdge telemetry metric collection and integration with analytics and visualization solutions., +jansson,MIT License,"C library for encoding, decoding and manipulating JSON data", +jupyterhub,BSD-3Clause New or Revised License,Multi-user hub, +kfctl,Apache-2.0,CLI for deploying and managing Kubeflow, +Kube prometheus stack,Apache-2.0,"Kube Prometheus Stack is a collection of Kubernetes manifests, Grafana dashboards, and Prometheus rules.", +kubeadm,Apache-2.0,“fast paths” for creating Kubernetes clusters, +kubectl,Apache-2.0,Command line tool for Kubernetes, +kubeflow,Apache-2.0,Cloud Native platform for machine learning, +kubelet,Apache-2.0,"Provides external, versioned ComponentConfig API types for configuring the kubelet", +Kubernetes Controllers,Apache-2.0,HPC Workload Manager, +kubernetes.core,GPL 3.0,Performs CRUD operations on K8s objects, +libjwt,Mozilla Public License-2.0 License,JWT C Library, +Lmod,MIT License,Lmod is a Lua based module system that easily handles the MODULEPATH Hierarchical problem., +loki,GNU AFFERO GENERAL PUBLIC LICENSE v3.0,Loki is a log aggregation system designed to store and query logs from all your applications and infrastructure, +Lua,MIT License,"Lua is a lightweight, high-level, multi-paradigm programming language designed primarily for embedded use in applications.", +mailx,MIT License,mailx is a Unix utility program for sending and receiving mail., +MariaDB,GPL 2.0,Relational database used by Slurm, +MetalLB,Apache-2.0,A network load-balancer implementation for Kubernetes using standard routing protocols,https://github.com/metallb/metallb +MLNX-OFED,BSD License,MLNX_OFED is an NVIDIA tested and packaged version of OFED that supports two interconnect types using the same RDMA (remote DMA) and kernel bypass APIs called OFED verbs – InfiniBand and Ethernet., +MPI,3Clause BSD License,HPC library, +mysql,GPL 2.0,MySQL is an open-source relational database management system., +nsfcac/grafana-plugin,MIT License,Machine Learning Framework, +NVidia container runtime,Apache-2.0,Nvidia container runtime library, +omsdk,Apache-2.0,Dell EMC OpenManage Python SDK (OMSDK) is a python library that helps developers and customers to automate the lifecycle management of PowerEdge Servers, +openshift,Apache-2.0,On-premises platform as a service built around Linux containers orchestrated and managed by Kubernetes, +OpenSM,GNU General Public License 2,, +pandas,BSD-3-Clause License,"pandas is a fast, powerful, flexible and easy to use open source data analysis and manipulation tool, built on top of the Python programming language.", +perl-DBD-Pg,GNU General Public License v3,DBD::Pg - PostgreSQL database driver for the DBI module, +postgresSQL,PostgresSQL License,"PostgreSQL, also known as Postgres, is a free and open-source relational database management system emphasizing extensibility and SQL compliance.", +prometheus,Apache-2.0,"Open-source monitoring system with a dimensional data model, flexible query language, efficient time series database and modern alerting approach.", +promtail,Apache-2.0,Promtail is an agent which ships the contents of local logs to a private Grafana Loki instance or Grafana Cloud., +psutil,BSD 3-Clause License,Cross-platform lib for process and system monitoring in Python,https://github.com/giampaolo/psutil +psycopg2-binary,GNU Lesser General Public License,Psycopg is the most popular PostgreSQL database adapter for the Python programming language., +pyinstaller,"GNU General Public License, Apache 2.0",Freeze (package) Python programs into stand-alone executables,https://github.com/pyinstaller/pyinstaller +python.requests,Apache-2.0,Makes HTTP requests simpler and more human-friendly., +python3-netaddr,BSD License,A Python library for representing and manipulating network addresses., +Python-pip,MIT License,Python Package, +redhat subscription,Apache-2.0,"Red Hat Subscription Management (RHSM) is a customer-driven, end-to-end solution that provides tools for subscription status and management and integrates with Red Hat’s system management tools.", +redis,BSD-3-Clause License,In-memory database, +singularity,BSD License,Container platform. It allows you to create and run containers that package up pieces of software in a way that is portable and reproducible., +Slurm Workload manager,GNU General Public License,HPC Workload Manager, +slurm-exporter,GNU General Public License v3,Prometheus collector and exporter for metrics extracted from the Slurm resource scheduling system., +smartmontools,GNU General Public License,Official read only mirror of the smartmontools project SVN,https://github.com/smartmontools/smartmontools +snoopy,GPL 2.0,Snoopy is a small library that logs all program executions on your Linux/BSD system, +spark,Apache-2.0,, +tensorflow,Apache-2.0,Machine Learning framework, +timescaledb,Apache-2.0,"TimescaleDB is a time-series SQL database providing fast analytics, scalability, with automated data management on a proven storage engine.", +xCAT,Eclipse Public License 1.0,Provisioning tool that also creates custom disk partitions, +xorriso,GPL 3.0,xorriso copies file objects from POSIX compliant filesystems into Rock Ridge enhanced ISO 9660 filesystems., From d0eac3245c7f5bd3086a03d52b1444aa315cc280 Mon Sep 17 00:00:00 2001 From: cgoveas Date: Fri, 13 Oct 2023 15:47:46 +0530 Subject: [PATCH 20/24] Updating documentation Signed-off-by: cgoveas --- .../Security/Security Configuration Guide.pdf | Bin 618233 -> 618179 bytes docs/source/Tables/SoftwareInstalled.csv | 136 +++++++++--------- 2 files changed, 68 insertions(+), 68 deletions(-) diff --git a/docs/Security/Security Configuration Guide.pdf b/docs/Security/Security Configuration Guide.pdf index bae633f4d7ef437befe1291f12b4433674483ab0..6535db1078d49563e1ddc3c18c84e6636f3e373f 100644 GIT binary patch delta 14054 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 IaU}Tv1xLO!wEzGB delta 14113 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 Date: Tue, 17 Oct 2023 12:01:36 +0530 Subject: [PATCH 21/24] Updating documentation Signed-off-by: cgoveas --- docs/source/Tables/SoftwareInstalled.csv | 1 - 1 file changed, 1 deletion(-) diff --git a/docs/source/Tables/SoftwareInstalled.csv b/docs/source/Tables/SoftwareInstalled.csv index 93693f1d5..202870f17 100644 --- a/docs/source/Tables/SoftwareInstalled.csv +++ b/docs/source/Tables/SoftwareInstalled.csv @@ -5,7 +5,6 @@ ansible posix,GNU General Public License,Ansible Collection targeting POSIX and ansible pylibssh,LGPL 2.1,Python bindings to client functionality of libssh specific to Ansible use case.,https://pypi.org/project/ansible-pylibssh/ ansible.utils ansible collection,GPL 3.0,"Ansible Collection with utilities to ease the management, manipulation, and validation of data within a playbook",https://github.com/ansible-collections/ansible.utils apparmor,GNU General Public License,Controls access based on paths of the program files,https://gitlab.com/apparmor/apparmor -apptainer,BSD 3-Clause License,Application containers for Linux,https://github.com/apptainer/apptainer Beegfs-Client,GPLv2,BeeGFS is a high-performance parallel file system with easy management. The distributed metadata architecture of BeeGFS has been designed to provide the scalability and flexibility that is required to run today’s and tomorrow’s most demanding HPC applications.,https://www.beegfs.io/wiki/DownloadInstallationPackages bind-dyndb-ldap,GNU General Public License v2,LDAP driver for BIND9. It allows you to read data and also write data back (DNS Updates) to an LDAP backend.,https://github.com/freeipa/bind-dyndb-ldap/tree/master buildah,Apache-2.0,Tool to build and run containers,https://github.com/containers/buildah From 8708eb1a5322018967a99407a9d8382cd08ca3b7 Mon Sep 17 00:00:00 2001 From: cgoveas Date: Tue, 17 Oct 2023 12:04:52 +0530 Subject: [PATCH 22/24] Updating documentation Signed-off-by: cgoveas --- docs/source/Tables/SoftwareInstalled.csv | 2 -- 1 file changed, 2 deletions(-) diff --git a/docs/source/Tables/SoftwareInstalled.csv b/docs/source/Tables/SoftwareInstalled.csv index 202870f17..184b2f193 100644 --- a/docs/source/Tables/SoftwareInstalled.csv +++ b/docs/source/Tables/SoftwareInstalled.csv @@ -39,7 +39,6 @@ loki,GNU AFFERO GENERAL PUBLIC LICENSE v3.0,Loki is a log aggregation system des Lua,MIT License,"Lua is a lightweight, high-level, multi-paradigm programming language designed primarily for embedded use in applications.",https://github.com/lua/lua mailx,MIT License,mailx is a Unix utility program for sending and receiving mail.,https://heirloom.sourceforge.net/mailx.html MariaDB,GPL 2.0,Relational database used by Slurm,https://github.com/MariaDB/ -MetalLB,Apache-2.0,A network load-balancer implementation for Kubernetes using standard routing protocols,https://github.com/metallb/metallb MLNX-OFED,BSD License,MLNX_OFED is an NVIDIA tested and packaged version of OFED that supports two interconnect types using the same RDMA (remote DMA) and kernel bypass APIs called OFED verbs – InfiniBand and Ethernet.,https://github.com/Mellanox/ofed-docker MPI,3Clause BSD License,HPC library,https://github.com/open-mpi/ompi mysql,GPL 2.0,MySQL is an open-source relational database management system.,https://github.com/mysql/mysql-server @@ -61,7 +60,6 @@ python3-netaddr,BSD License,A Python library for representing and manipulating n Python-pip,MIT License,Python Package,https://github.com/pypa/pip redhat subscription,Apache-2.0,"Red Hat Subscription Management (RHSM) is a customer-driven, end-to-end solution that provides tools for subscription status and management and integrates with Red Hat’s system management tools.",https://github.com/RedHatSatellite/rhsmTools redis,BSD-3-Clause License,In-memory database,https://github.com/redis/redis -singularity,BSD License,Container platform. It allows you to create and run containers that package up pieces of software in a way that is portable and reproducible.,https://github.com/sylabs/singularity Slurm Workload manager,GNU General Public License,HPC Workload Manager,https://github.com/SchedMD/slurm slurm-exporter,GNU General Public License v3,Prometheus collector and exporter for metrics extracted from the Slurm resource scheduling system.,https://github.com/vpenso/prometheus-slurm-exporter smartmontools,GNU General Public License,Official read only mirror of the smartmontools project SVN,https://github.com/smartmontools/smartmontools From dc0f4674009c89409c853f341c6f7f5ac6e64994 Mon Sep 17 00:00:00 2001 From: cgoveas Date: Tue, 17 Oct 2023 12:14:17 +0530 Subject: [PATCH 23/24] Updating documentation Signed-off-by: cgoveas --- docs/source/Troubleshooting/troubleshootingguide.rst | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/docs/source/Troubleshooting/troubleshootingguide.rst b/docs/source/Troubleshooting/troubleshootingguide.rst index fcd6f11f1..804507dcc 100644 --- a/docs/source/Troubleshooting/troubleshootingguide.rst +++ b/docs/source/Troubleshooting/troubleshootingguide.rst @@ -32,13 +32,11 @@ Logs of individual containers Connecting to internal databases ------------------------------------ -* TimescaleDB - * Go inside the pod: ``kubectl exec -it pod/timescaledb-0 -n telemetry-and-visualizations -- /bin/bash`` - * Connect to psql: ``psql -U `` - * Connect to database: ``< timescaledb_name >`` -* MySQL DB + +MySQL DB + * Go inside the pod: ``kubectl exec -it pod/mysqldb-n telemetry-and-visualizations -- /bin/bash`` - * Connect to psql: ``psql -U -p `` + * Connect to psql: ``mysql -U -p `` * Connect to database: ``USE `` Checking and updating encrypted parameters From 86f1ab5574cc94295c634e9974e508b5cac22527 Mon Sep 17 00:00:00 2001 From: cgoveas Date: Tue, 17 Oct 2023 12:17:08 +0530 Subject: [PATCH 24/24] Updating documentation Signed-off-by: cgoveas --- .../Benchmarks/AutomatingOneAPI.rst | 62 ++++++++++++ .../Benchmarks/AutomatingOpenMPI.rst | 98 +++++++++++++++++++ .../InstallationGuides/Benchmarks/OneAPI.rst | 2 + .../Benchmarks/OpenMPI_AOCC.rst | 5 +- .../Benchmarks/hpcsoftwarestack.rst | 51 ++++++++++ .../InstallationGuides/Benchmarks/index.rst | 3 + 6 files changed, 219 insertions(+), 2 deletions(-) create mode 100644 docs/source/InstallationGuides/Benchmarks/AutomatingOneAPI.rst create mode 100644 docs/source/InstallationGuides/Benchmarks/AutomatingOpenMPI.rst create mode 100644 docs/source/InstallationGuides/Benchmarks/hpcsoftwarestack.rst diff --git a/docs/source/InstallationGuides/Benchmarks/AutomatingOneAPI.rst b/docs/source/InstallationGuides/Benchmarks/AutomatingOneAPI.rst new file mode 100644 index 000000000..264fba516 --- /dev/null +++ b/docs/source/InstallationGuides/Benchmarks/AutomatingOneAPI.rst @@ -0,0 +1,62 @@ +Automate installation oneAPI on Intel processors for MPI jobs +------------------------------------------------------------------ + +This topic explains how to automatically update servers for MPI jobs. To manually install oneAPI, `click here. `_ + +**Pre-requisites** + +* ``provision.yml`` has been executed. +* An Omnia **slurm** cluster has been set up by ``omnia.yml`` running with at least 2 nodes: 1 manager and 1 compute. +* Verify that the target nodes are in the ``booted`` state. For more information, `click here <../InstallingProvisionTool/ViewingDB.html>`_. + +**To run the playbook**:: + + + cd benchmarks + ansible-playbook intel_benchmark.yml -i inventory + + +**To execute multi-node jobs** + +* Make sure to have NFS shares on each node. +* Copy slurm script to NFS share and execute it from there. +* Load all the necessary modules using module load: :: + + module load mpi + module load pmi/pmix-x86_64 + module load mkl + +* If the commands/batch script are to be run over TCP instead of Infiniband ports, include the below line: :: + + export FI_PROVIDER=tcp + + +Job execution can now be initiated. + +.. note:: Ensure ``runme_intel64_dynamic`` is downloaded before running this command. + +:: + + srun -N 2 /mnt/nfs_shares/appshare/mkl/2023.0.0/benchmarks/mp_linpack/runme_intel64_dynamic + + +For a batch job using the same parameters, the script would be: :: + + + #!/bin/bash + #SBATCH --job-name=testMPI + #SBATCH --output=output.txt + #SBATCH --partition=normal + #SBATCH --nodelist=node00004.omnia.test,node00005.omnia.test + + pwd; hostname; date + export FI_PROVIDER=tcp + module load pmi/pmix-x86_64 + module use /opt/intel/oneapi/modulefiles + module load mkl + module load mpi + + srun /mnt/appshare/benchmarks/mp_linpack/runme_intel64_dynamic + date + + diff --git a/docs/source/InstallationGuides/Benchmarks/AutomatingOpenMPI.rst b/docs/source/InstallationGuides/Benchmarks/AutomatingOpenMPI.rst new file mode 100644 index 000000000..c772bfbe4 --- /dev/null +++ b/docs/source/InstallationGuides/Benchmarks/AutomatingOpenMPI.rst @@ -0,0 +1,98 @@ +Installing pmix and updating slurm configuration for AMD processors +-------------------------------------------------------------------- + +This topic explains how to automatically update AMD servers for MPI jobs. To manually install pmix and update the slurm configuration, `click here. `_ + +**Pre-requisites** + +* ``provision.yml`` has been executed. +* An Omnia **slurm** cluster has been set up by ``omnia.yml`` running with at least 2 nodes: 1 manager and 1 compute. +* Verify that the target nodes are in the ``booted`` state. For more information, `click here <../InstallingProvisionTool/ViewingDB.html>`_. + +**To run the playbook**:: + + cd benchmarks + ansible-playbook amd_benchmark.yml -i inventory + +**To execute multi-node jobs** + +* OpenMPI and aocc-compiler-*.tar should be installed and compiled with slurm on all cluster nodes or should be available on the NFS share. + +.. note:: + * Omnia currently supports ``pmix version2``, ``pmix_v2``. + + * While compiling OpenMPI, include ``pmix``, ``slurm``, ``hwloc`` and, ``libevent`` as shown in the below sample command: :: + + ./configure --prefix=/home/omnia-share/openmpi-4.1.5 --enable-mpi1-compatibility --enable-orterun-prefix-by-default --with-slurm=/usr --with-pmix=/usr --with-libevent=/usr --with-hwloc=/usr --with-ucx CC=clang CXX=clang++ FC=flang 2>&1 | tee config.out + + + +* For a job to run on multiple nodes (10.5.0.4 and 10.5.0.5) where OpenMPI is compiled and installed on the NFS share (``/home/omnia-share/openmpi/bin/mpirun``), the job can be initiated as below: + +.. note:: Ensure ``amd-zen-hpl-2023_07_18`` is downloaded before running this command. + +:: + + srun -N 2 --mpi=pmix_v2 -n 2 ./amd-zen-hpl-2023_07_18/xhpl + + +For a batch job using the same parameters, the script would be: :: + + + #!/bin/bash + + #SBATCH --job-name=test + + #SBATCH --output=test.log + + #SBATCH --partition=normal + + #SBATCH -N 3 + + #SBATCH --time=10:00 + + #SBATCH --ntasks=2 + + + + + source /home/omnia-share/setenv_AOCC.sh + + export PATH=$PATH:/home/omnia-share/openmpi/bin + + export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/omnia-share/openmpi/lib + + srun --mpi=pmix_v2 ./amd-zen-hpl-2023_07_18/xhpl + + +Alternatively, to use ``mpirun``, the script would be: :: + + #!/bin/bash + + #SBATCH --job-name=test + + #SBATCH --output=test.log + + #SBATCH --partition=normal + + #SBATCH -N 3 + + #SBATCH --time=10:00 + + #SBATCH --ntasks=2 + + + + + source /home/omnia-share/setenv_AOCC.sh + + export PATH=$PATH:/home/omnia-share/openmpi/bin + + export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/omnia-share/openmpi/lib + + /home/omnia-share/openmpi/bin/mpirun --map-by ppr:1:node -np 2 --display-map --oversubscribe --mca orte_keep_fqdn_hostnames 1 ./xhpl + + + +.. note:: The above scripts are samples that can be modified as required. Ensure that ``--mca orte_keep_fqdn_hostnames 1`` is included in the mpirun command in sbatch scripts. Omnia maintains all hostnames in FQDN format. Failing to include ``--mca orte_keep_fqdn_hostnames 1`` may cause job initiation to fail. + diff --git a/docs/source/InstallationGuides/Benchmarks/OneAPI.rst b/docs/source/InstallationGuides/Benchmarks/OneAPI.rst index 90a41421e..e8c1c9cb4 100644 --- a/docs/source/InstallationGuides/Benchmarks/OneAPI.rst +++ b/docs/source/InstallationGuides/Benchmarks/OneAPI.rst @@ -1,6 +1,8 @@ Install oneAPI for MPI jobs on Intel processors ________________________________________________ +This topic explains how to manually install oneAPI for MPI jobs. To install oneAPI automatically, `click here. `_ + **Pre-requisites** * An Omnia **slurm** cluster running with at least 2 nodes: 1 manager and 1 compute. diff --git a/docs/source/InstallationGuides/Benchmarks/OpenMPI_AOCC.rst b/docs/source/InstallationGuides/Benchmarks/OpenMPI_AOCC.rst index bde992909..0c2f68ef3 100644 --- a/docs/source/InstallationGuides/Benchmarks/OpenMPI_AOCC.rst +++ b/docs/source/InstallationGuides/Benchmarks/OpenMPI_AOCC.rst @@ -1,5 +1,6 @@ Open MPI AOCC HPL benchmark for AMD processors ---------------------------------------------- +This topic explains how to manually update servers for MPI jobs. To automatically install pmix and configure slurm, `click here. `_ **Prerequisites** @@ -26,7 +27,7 @@ Open MPI AOCC HPL benchmark for AMD processors ii. Push the packages to the cluster nodes: - a. Update the ``package_list`` variable in the ``os_package_update/os_package_update.conf`` file and save it. :: + a. Update the ``package_list`` variable in the ``utils/os_package_update/package_update_config.yml`` file and save it. :: package_list: "/install/post/otherpkgs//x86_64/custom_software/openmpi.pkglist" @@ -62,7 +63,7 @@ Open MPI AOCC HPL benchmark for AMD processors systemctl stop slurmctld.service systemctl start slurmctld.service -4. Job execution can now be initiated. To initiate a job use the following sample commands. +4. Job execution can now be initiated. For a job to run on multiple nodes (10.5.0.4 and 10.5.0.5) where OpenMPI is compiled and installed on the NFS share (``/home/omnia-share/openmpi/bin/mpirun``), the job can be initiated as below: .. note:: Ensure ``amd-zen-hpl-2023_07_18`` is downloaded before running this command. diff --git a/docs/source/InstallationGuides/Benchmarks/hpcsoftwarestack.rst b/docs/source/InstallationGuides/Benchmarks/hpcsoftwarestack.rst new file mode 100644 index 000000000..25fdbf4f5 --- /dev/null +++ b/docs/source/InstallationGuides/Benchmarks/hpcsoftwarestack.rst @@ -0,0 +1,51 @@ +Containerized HPC benchmark execution +-------------------------------------- + +Use this playbook to download docker images and pull images onto cluster nodes using `apptainer `_. + +1. Ensure that the cluster has been `provisioned by the provision tool. <../../InstallationGuides/InstallingProvisionTool/index.html>`_ and the `cluster has been set up using omnia.yml. <../../InstallationGuides/BuildingClusters/index.html>`_ + +2. Enter the following variables in ``utils/hpc_apptainer_job_execution/hpc_apptainer_job_execution_config.yml``: + ++-------------------------+-----------------------------------------------------------------------------------------------------------+ +| Parameter | Details | ++=========================+===========================================================================================================+ +| **hpc_apptainer_image** | * Docker image details to be downloaded in to cluster nodes using apptainer to create a sif file. | +| ``JSON list`` | | +| Required | * Example (for single image): :: | +| | | +| | | +| | hpc_apptainer_image: | +| | | +| | - { image_url: "docker.io/intel/oneapi-hpckit:latest" } | +| | | +| | * Example (for multiple images): :: | +| | | +| | hpc_apptainer_image: | +| | | +| | - { image_url: "docker.io/intel/oneapi-hpckit:latest" } | +| | | +| | - { image_url: "docker.io/tensorflow/tensorflow:latest" } | +| | | +| | * If provided, docker credentials in ``omnia_config.yml``, it will be used for downloading docker images. | +| | | ++-------------------------+-----------------------------------------------------------------------------------------------------------+ +| **hpc_apptainer_path** | * Directory to filepath for storing apptainer sif files on cluster nodes. | +| | | +| ``string`` | * It is recommended to use a directory inside a shared path that is accessible to all cluster nodes. | +| | | +| Required | * **Default value:** ``"/home/omnia-share/softwares/apptainer"`` | ++-------------------------+-----------------------------------------------------------------------------------------------------------+ + +To run the playbook: :: + + cd utils/hpc_apptainer_job_execution + + ansible-playbook hpc_apptainer_job_execution.yml -i inventory + +.. note:: Use the inventory file format specified under `Sample Files. <../../samplefiles.html>`_ + +HPC apptainer jobs can be initiated on a slurm cluster using the following sample command: :: + + srun -N 3 --mpi=pmi2 --ntasks=4 apptainer run /home/omnia-share/softwares/apptainer/oneapi-hpckit_latest.sif hostname + diff --git a/docs/source/InstallationGuides/Benchmarks/index.rst b/docs/source/InstallationGuides/Benchmarks/index.rst index f49e9ae99..fa99cf08d 100644 --- a/docs/source/InstallationGuides/Benchmarks/index.rst +++ b/docs/source/InstallationGuides/Benchmarks/index.rst @@ -3,4 +3,7 @@ Running HPC benchmarks on omnia clusters .. toctree:: OneAPI + AutomatingOneAPI OpenMPI_AOCC + AutomatingOpenMPI + hpcsoftwarestack