From af13947deb007682267e3c64eb08923f6df86287 Mon Sep 17 00:00:00 2001 From: = Date: Thu, 9 Nov 2023 19:00:36 +0100 Subject: [PATCH 01/25] Refactor include structure --- .gitignore | 3 + shufflecake-userland/include/{cli => }/cli.h | 6 +- .../include/{commands => }/commands.h | 0 .../device_master_block.h => header.h} | 76 +++++++++++++--- .../include/header/position_map.h | 76 ---------------- .../include/header/volume_master_block.h | 87 ------------------- .../{operations/volume.h => operations.h} | 23 +++-- .../include/operations/device.h | 62 ------------- shufflecake-userland/src/cli/changepwd.c | 4 +- shufflecake-userland/src/cli/close.c | 4 +- shufflecake-userland/src/cli/dispatch.c | 2 +- shufflecake-userland/src/cli/init.c | 4 +- shufflecake-userland/src/cli/open.c | 4 +- shufflecake-userland/src/cli/testpwd.c | 4 +- .../src/commands/change_pwd.c | 7 +- shufflecake-userland/src/commands/close.c | 4 +- shufflecake-userland/src/commands/init.c | 7 +- shufflecake-userland/src/commands/open.c | 52 +++-------- shufflecake-userland/src/commands/test_pwd.c | 5 +- .../src/header/device_master_block.c | 2 +- .../src/header/position_map.c | 2 +- .../src/header/volume_master_block.c | 14 +-- shufflecake-userland/src/main.c | 2 +- .../src/operations/close_vol.c | 4 +- .../src/operations/create_vol.c | 10 +-- shufflecake-userland/src/operations/dmb.c | 6 +- .../src/operations/open_vol.c | 6 +- 27 files changed, 140 insertions(+), 336 deletions(-) rename shufflecake-userland/include/{cli => }/cli.h (97%) rename shufflecake-userland/include/{commands => }/commands.h (100%) rename shufflecake-userland/include/{header/device_master_block.h => header.h} (63%) delete mode 100644 shufflecake-userland/include/header/position_map.h delete mode 100644 shufflecake-userland/include/header/volume_master_block.h rename shufflecake-userland/include/{operations/volume.h => operations.h} (85%) delete mode 100644 shufflecake-userland/include/operations/device.h diff --git a/.gitignore b/.gitignore index 26f4f24..1b5e147 100644 --- a/.gitignore +++ b/.gitignore @@ -59,3 +59,6 @@ dkms.conf # Shufflecake binaries shufflecake +# Temporary working directories +dm-vvz/ + diff --git a/shufflecake-userland/include/cli/cli.h b/shufflecake-userland/include/cli.h similarity index 97% rename from shufflecake-userland/include/cli/cli.h rename to shufflecake-userland/include/cli.h index 9e65ca2..838f618 100644 --- a/shufflecake-userland/include/cli/cli.h +++ b/shufflecake-userland/include/cli.h @@ -21,8 +21,8 @@ * If not, see . */ -#ifndef _CLI_CLI_H_ -#define _CLI_CLI_H_ +#ifndef _CLI_H_ +#define _CLI_H_ /***************************************************** @@ -60,6 +60,6 @@ int sflc_cli_testPwd(char *block_device); int sflc_cli_changePwd(char *block_device); -#endif /* _CLI_CLI_H_ */ +#endif /* _CLI_H_ */ diff --git a/shufflecake-userland/include/commands/commands.h b/shufflecake-userland/include/commands.h similarity index 100% rename from shufflecake-userland/include/commands/commands.h rename to shufflecake-userland/include/commands.h diff --git a/shufflecake-userland/include/header/device_master_block.h b/shufflecake-userland/include/header.h similarity index 63% rename from shufflecake-userland/include/header/device_master_block.h rename to shufflecake-userland/include/header.h index 7b4ce43..eb062e5 100644 --- a/shufflecake-userland/include/header/device_master_block.h +++ b/shufflecake-userland/include/header.h @@ -21,12 +21,8 @@ * If not, see . */ -/* - * Defines the Device Master Block (DMB) and related functionalities - */ - -#ifndef _HEADER_DEVICE_MASTER_BLOCK_H_ -#define _HEADER_DEVICE_MASTER_BLOCK_H_ +#ifndef _HEADER_H_ +#define _HEADER_H_ /***************************************************** @@ -36,7 +32,6 @@ #include #include -#include "utils/disk.h" #include "utils/crypto.h" @@ -53,6 +48,13 @@ #endif +// The VMB cleartext occupies the last 4064 bytes on-disk (4096 bytes minus IV and MAC) +#define SFLC_CLEAR_VMB_LEN (SFLC_SECTOR_SIZE - \ + SFLC_AESGCM_PADDED_IVLEN - \ + SFLC_AESGCM_TAGLEN) + + + /***************************************************** * STRUCTS * *****************************************************/ @@ -71,6 +73,7 @@ typedef struct { } sflc_Dmb; + /** * When unsealing a DMB, only one VMB key can be unlocked with a password. * An invalid value for vol_idx means no VMB key could be unlocked (wrong pwd) @@ -85,18 +88,69 @@ typedef struct { } sflc_DmbCell; +/** + * The on-disk master block of a volume contains crypto stuff + * (IVs, MACs...) used to properly hide the useful + * info. This struct only contains the useful info. + */ +typedef struct { + // The key that encrypts the volume's data section + char volume_key[SFLC_CRYPTO_KEYLEN]; + + // The key that encrypts the previous volume's master block + char prev_vmb_key[SFLC_CRYPTO_KEYLEN]; + + // The total number of logical slices virtually available to this volume + uint32_t nr_slices; + +} sflc_Vmb; + + +/** + * This struct represents an encrypted empty position map. + * There are as many IV blocks as there are PosMapBlock arrays. + * The m-th IV of the n-th IV block encrypts the m-th block of the n-th array. + * The PosMapBlocks in an array are contiguous, so a PosMapBlock array is just + * a char array of length multiple of 4096. + * All the arrays are full (256 PosMapBlocks, 1 MiB) except for the last one, + * which may hold fewer blocks. + */ +typedef struct { + // The number of PosMapBlock arrays (and of IV blocks) + size_t nr_arrays; + + // The sequence of IV blocks + char **iv_blocks; + // The sequence of (encrypted) PosMapBlock arrays + char **pmb_arrays; + + // The number of PosMapBlocks in the last array + size_t nr_last_pmbs; + +} sflc_EncPosMap; + + /***************************************************** * PUBLIC FUNCTIONS PROTOTYPES * *****************************************************/ /* "Encrypt" each VMB key with its pwd, so the DMB is ready to be written on-disk */ int sflc_dmb_seal(sflc_Dmb *dmb, char **pwds, size_t *pwd_lens, char *disk_block); - /* "Decrypt" a single VMB key from the on-disk DMB, using its password (perform the KDF) */ int sflc_dmb_unseal(char *disk_block, char *pwd, size_t pwd_len, sflc_DmbCell *dmb_cell); - -/* Re-encrypt the content of the specified DMB cell */ +/* Re-encrypt the content of a single DMB cell */ int sflc_dmb_setCell(char *disk_block, sflc_DmbCell *dmb_cell, char *pwd, size_t pwd_len); -#endif /* _HEADER_DEVICE_MASTER_BLOCK_H_ */ +/* "Encrypt" a VMB with a VMB key, so it's ready to be written on-disk */ +int sflc_vmb_seal(sflc_Vmb *vmb, char *vmb_key, char *disk_block); +/* "Decrypt" a VMB coming from the disk, directly using its key */ +int sflc_vmb_unseal(char *disk_block, char *vmb_key, sflc_Vmb *vmb); + + +/* Create an encrypted empty position map for the given number of slices (allocates memory) */ +int sflc_epm_create(size_t nr_slices, char *volume_key, sflc_EncPosMap *epm); + + + +#endif /* _HEADER_H_ */ diff --git a/shufflecake-userland/include/header/position_map.h b/shufflecake-userland/include/header/position_map.h deleted file mode 100644 index c927944..0000000 --- a/shufflecake-userland/include/header/position_map.h +++ /dev/null @@ -1,76 +0,0 @@ -/* - * Copyright The Shufflecake Project Authors (2022) - * Copyright The Shufflecake Project Contributors (2022) - * Copyright Contributors to the The Shufflecake Project. - * - * See the AUTHORS file at the top-level directory of this distribution and at - * - * - * This file is part of the program shufflecake-c, which is part of the - * Shufflecake Project. Shufflecake is a plausible deniability (hidden storage) - * layer for Linux. See . - * - * This program is free software: you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the Free - * Software Foundation, either version 2 of the License, or (at your option) - * any later version. This program is distributed in the hope that it will be - * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General - * Public License for more details. You should have received a copy of the - * GNU General Public License along with this program. - * If not, see . - */ - -/* - * Helpers to encrypt an empty position map - */ - -#ifndef _HEADER_POSITION_MAP_H_ -#define _HEADER_POSITION_MAP_H_ - - -/***************************************************** - * INCLUDE SECTION * - *****************************************************/ - -#include -#include - - -/***************************************************** - * STRUCTS * - *****************************************************/ - -/** - * This struct represents an encrypted empty position map. - * There are as many IV blocks as there are PosMapBlock arrays. - * The m-th IV of the n-th IV block encrypts the m-th block of the n-th array. - * The PosMapBlocks in an array are contiguous, so a PosMapBlock array is just - * a char array of length multiple of 4096. - * All the arrays are full (256 PosMapBlocks, 1 MiB) except for the last one, - * which may hold fewer blocks. - */ -typedef struct { - // The number of PosMapBlock arrays (and of IV blocks) - size_t nr_arrays; - - // The sequence of IV blocks - char **iv_blocks; - // The sequence of (encrypted) PosMapBlock arrays - char **pmb_arrays; - - // The number of PosMapBlocks in the last array - size_t nr_last_pmbs; - -} sflc_EncPosMap; - - -/***************************************************** - * PUBLIC FUNCTIONS PROTOTYPES * - *****************************************************/ - -/* Create an encrypted empty position map for the given number of slices (allocates memory) */ -int sflc_epm_create(size_t nr_slices, char *volume_key, sflc_EncPosMap *epm); - - -#endif /* _HEADER_POSITION_MAP_H_ */ diff --git a/shufflecake-userland/include/header/volume_master_block.h b/shufflecake-userland/include/header/volume_master_block.h deleted file mode 100644 index 12cbc84..0000000 --- a/shufflecake-userland/include/header/volume_master_block.h +++ /dev/null @@ -1,87 +0,0 @@ -/* - * Copyright The Shufflecake Project Authors (2022) - * Copyright The Shufflecake Project Contributors (2022) - * Copyright Contributors to the The Shufflecake Project. - * - * See the AUTHORS file at the top-level directory of this distribution and at - * - * - * This file is part of the program shufflecake-c, which is part of the - * Shufflecake Project. Shufflecake is a plausible deniability (hidden storage) - * layer for Linux. See . - * - * This program is free software: you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the Free - * Software Foundation, either version 2 of the License, or (at your option) - * any later version. This program is distributed in the hope that it will be - * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General - * Public License for more details. You should have received a copy of the - * GNU General Public License along with this program. - * If not, see . - */ - -/* - * Defines the Volume Master Block (VMB) and related functionalities - */ - -#ifndef _HEADER_VOLUME_MASTER_BLOCK_H_ -#define _HEADER_VOLUME_MASTER_BLOCK_H_ - - -/***************************************************** - * INCLUDE SECTION * - *****************************************************/ - -#include -#include - -#include "utils/disk.h" -#include "utils/crypto.h" - - -/***************************************************** - * CONSTANTS * - *****************************************************/ - -// The VMB cleartext occupies the last 4064 bytes on-disk (4096 bytes minus IV and MAC) -#define SFLC_CLEAR_VMB_LEN (SFLC_SECTOR_SIZE - \ - SFLC_AESGCM_PADDED_IVLEN - \ - SFLC_AESGCM_TAGLEN) - - - -/***************************************************** - * STRUCTS * - *****************************************************/ - -/** - * The on-disk master block of a volume contains crypto stuff - * (IVs, MACs...) used to properly hide the useful - * info. This struct only contains the useful info. - */ -typedef struct { - // The key that encrypts the volume's data section - char volume_key[SFLC_CRYPTO_KEYLEN]; - - // The key that encrypts the previous volume's master block - char prev_vmb_key[SFLC_CRYPTO_KEYLEN]; - - // The total number of logical slices virtually available to this volume - uint32_t nr_slices; - -} sflc_VolumeMasterBlock; - - -/***************************************************** - * PUBLIC FUNCTIONS PROTOTYPES * - *****************************************************/ - -/* "Encrypt" a VMB with a VMB key, so it's ready to be written on-disk */ -int sflc_vmb_seal(sflc_VolumeMasterBlock *vmb, char *vmb_key, char *disk_block); - -/* "Decrypt" a VMB coming from the disk, directly using its key */ -int sflc_vmb_unseal(char *disk_block, char *vmb_key, sflc_VolumeMasterBlock *vmb); - - -#endif /* _HEADER_VOLUME_MASTER_BLOCK_H_ */ diff --git a/shufflecake-userland/include/operations/volume.h b/shufflecake-userland/include/operations.h similarity index 85% rename from shufflecake-userland/include/operations/volume.h rename to shufflecake-userland/include/operations.h index 28d54cb..b16ae56 100644 --- a/shufflecake-userland/include/operations/volume.h +++ b/shufflecake-userland/include/operations.h @@ -21,12 +21,8 @@ * If not, see . */ -/* - * Defines the Volume, and the basic operations that can be done on a single one - */ - -#ifndef _OPERATIONS_VOLUME_H_ -#define _OPERATIONS_VOLUME_H_ +#ifndef _OPERATIONS_H_ +#define _OPERATIONS_H_ /***************************************************** @@ -36,7 +32,7 @@ #include #include -#include "utils/disk.h" +#include "header.h" #include "utils/crypto.h" #include "utils/math.h" @@ -104,8 +100,17 @@ static inline uint64_t sflc_vmbPosition(sflc_Volume *vol) * PUBLIC FUNCTIONS PROTOTYPES * *****************************************************/ +/* Samples VMB keys and writes the corresponding DMB to disk */ +int sflc_ops_createAndWriteDmb(char *bdev_path, char **pwds, size_t *pwd_lens, sflc_Dmb *dmb); + +/* Reads the DMB from disk and outputs the unlocked VMB key */ +int sflc_ops_readDmb(char *bdev_path, char *pwd, size_t pwd_len, sflc_DmbCell *dmb_cell); + +/* Reads the DMB from disk, changes the relevant DMB cell, and writes it back */ +int sflc_ops_rewriteDmbCell(char *bdev_path, sflc_DmbCell *dmb_cell, char *new_pwd, size_t new_pwd_len); + /* Writes a volume header (VMB+PM) on-disk */ -int sflc_ops_createVolume(sflc_Volume *vol); +int sflc_ops_writeVolumeHeader(sflc_Volume *vol); /* Read a VMB from disk and issue a DM ioctl to create the appropriate virtual device */ int sflc_ops_openVolume(sflc_Volume *vol); @@ -113,4 +118,4 @@ int sflc_ops_openVolume(sflc_Volume *vol); /* Close the volume via the appropriate ioctl to DM */ int sflc_ops_closeVolume(char *label); -#endif /* _OPERATIONS_VOLUME_H_ */ +#endif /* _OPERATIONS_H_ */ diff --git a/shufflecake-userland/include/operations/device.h b/shufflecake-userland/include/operations/device.h deleted file mode 100644 index ed235da..0000000 --- a/shufflecake-userland/include/operations/device.h +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Copyright The Shufflecake Project Authors (2022) - * Copyright The Shufflecake Project Contributors (2022) - * Copyright Contributors to the The Shufflecake Project. - * - * See the AUTHORS file at the top-level directory of this distribution and at - * - * - * This file is part of the program shufflecake-c, which is part of the - * Shufflecake Project. Shufflecake is a plausible deniability (hidden storage) - * layer for Linux. See . - * - * This program is free software: you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the Free - * Software Foundation, either version 2 of the License, or (at your option) - * any later version. This program is distributed in the hope that it will be - * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General - * Public License for more details. You should have received a copy of the - * GNU General Public License along with this program. - * If not, see . - */ - -/* - * Global operations on the device - */ - -#ifndef _OPERATIONS_DEVICE_H_ -#define _OPERATIONS_DEVICE_H_ - - -/***************************************************** - * INCLUDE SECTION * - *****************************************************/ - -#include -#include - -#include "header/device_master_block.h" -#include "utils/disk.h" -#include "utils/crypto.h" - - -/***************************************************** - * CONSTANTS * - *****************************************************/ - -/***************************************************** - * PUBLIC FUNCTIONS PROTOTYPES * - *****************************************************/ - -/* Samples VMB keys and writes the corresponding DMB to disk */ -int sflc_ops_createAndWriteDmb(char *bdev_path, char **pwds, size_t *pwd_lens, sflc_Dmb *dmb); - -/* Reads the DMB from disk and outputs the unlocked VMB key */ -int sflc_ops_readDmb(char *bdev_path, char *pwd, size_t pwd_len, sflc_DmbCell *dmb_cell); - -/* Reads the DMB from disk, changes the relevant DMB cell, and writes it back */ -int sflc_ops_reencryptDmbCellAndWrite(char *bdev_path, sflc_DmbCell *dmb_cell, char *new_pwd, size_t new_pwd_len); - - -#endif /* _OPERATIONS_DEVICE_H_ */ diff --git a/shufflecake-userland/src/cli/changepwd.c b/shufflecake-userland/src/cli/changepwd.c index 4de7b13..de37779 100644 --- a/shufflecake-userland/src/cli/changepwd.c +++ b/shufflecake-userland/src/cli/changepwd.c @@ -29,8 +29,8 @@ #include #include -#include "cli/cli.h" -#include "commands/commands.h" +#include "cli.h" +#include "commands.h" #include "utils/sflc.h" #include "utils/input.h" #include "utils/log.h" diff --git a/shufflecake-userland/src/cli/close.c b/shufflecake-userland/src/cli/close.c index 3f37f35..fdbaa28 100644 --- a/shufflecake-userland/src/cli/close.c +++ b/shufflecake-userland/src/cli/close.c @@ -29,8 +29,8 @@ #include #include -#include "cli/cli.h" -#include "commands/commands.h" +#include "cli.h" +#include "commands.h" #include "utils/sflc.h" #include "utils/input.h" #include "utils/log.h" diff --git a/shufflecake-userland/src/cli/dispatch.c b/shufflecake-userland/src/cli/dispatch.c index 9e71592..01da250 100644 --- a/shufflecake-userland/src/cli/dispatch.c +++ b/shufflecake-userland/src/cli/dispatch.c @@ -31,7 +31,7 @@ #include #include -#include "cli/cli.h" +#include "cli.h" #include "utils/sflc.h" #include "utils/disk.h" #include "utils/log.h" diff --git a/shufflecake-userland/src/cli/init.c b/shufflecake-userland/src/cli/init.c index 9a129c9..31d826d 100644 --- a/shufflecake-userland/src/cli/init.c +++ b/shufflecake-userland/src/cli/init.c @@ -29,8 +29,8 @@ #include #include -#include "cli/cli.h" -#include "commands/commands.h" +#include "cli.h" +#include "commands.h" #include "utils/sflc.h" #include "utils/input.h" #include "utils/log.h" diff --git a/shufflecake-userland/src/cli/open.c b/shufflecake-userland/src/cli/open.c index 6b924c8..bf89615 100644 --- a/shufflecake-userland/src/cli/open.c +++ b/shufflecake-userland/src/cli/open.c @@ -29,8 +29,8 @@ #include #include -#include "cli/cli.h" -#include "commands/commands.h" +#include "cli.h" +#include "commands.h" #include "utils/sflc.h" #include "utils/input.h" #include "utils/log.h" diff --git a/shufflecake-userland/src/cli/testpwd.c b/shufflecake-userland/src/cli/testpwd.c index 1306f01..550df25 100644 --- a/shufflecake-userland/src/cli/testpwd.c +++ b/shufflecake-userland/src/cli/testpwd.c @@ -29,8 +29,8 @@ #include #include -#include "cli/cli.h" -#include "commands/commands.h" +#include "cli.h" +#include "commands.h" #include "utils/sflc.h" #include "utils/input.h" #include "utils/log.h" diff --git a/shufflecake-userland/src/commands/change_pwd.c b/shufflecake-userland/src/commands/change_pwd.c index 66f141e..2ef64e0 100644 --- a/shufflecake-userland/src/commands/change_pwd.c +++ b/shufflecake-userland/src/commands/change_pwd.c @@ -29,9 +29,8 @@ #include #include -#include "commands/commands.h" -#include "operations/volume.h" -#include "operations/device.h" +#include "commands.h" +#include "operations.h" #include "utils/sflc.h" #include "utils/crypto.h" #include "utils/file.h" @@ -55,5 +54,5 @@ int sflc_cmd_changePwd(sflc_cmd_ChangePwdArgs *args) { /* Delegate entirely to the function reading the DMB */ - return sflc_ops_reencryptDmbCellAndWrite(args->bdev_path, args->dmb_cell, args->new_pwd, args->new_pwd_len); + return sflc_ops_rewriteDmbCell(args->bdev_path, args->dmb_cell, args->new_pwd, args->new_pwd_len); } diff --git a/shufflecake-userland/src/commands/close.c b/shufflecake-userland/src/commands/close.c index d0e6fa4..f5abdf0 100644 --- a/shufflecake-userland/src/commands/close.c +++ b/shufflecake-userland/src/commands/close.c @@ -29,8 +29,8 @@ #include #include -#include "commands/commands.h" -#include "operations/volume.h" +#include "commands.h" +#include "operations.h" #include "utils/sflc.h" #include "utils/crypto.h" #include "utils/string.h" diff --git a/shufflecake-userland/src/commands/init.c b/shufflecake-userland/src/commands/init.c index b56b653..040eedd 100644 --- a/shufflecake-userland/src/commands/init.c +++ b/shufflecake-userland/src/commands/init.c @@ -29,9 +29,8 @@ #include #include -#include "commands/commands.h" -#include "operations/device.h" -#include "operations/volume.h" +#include "commands.h" +#include "operations.h" #include "utils/sflc.h" #include "utils/crypto.h" #include "utils/log.h" @@ -129,7 +128,7 @@ int sflc_cmd_initVolumes(sflc_cmd_InitArgs *args) vol.vol_idx = i; /* Create volume */ - err = sflc_ops_createVolume(&vol); + err = sflc_ops_writeVolumeHeader(&vol); if (err) { sflc_log_error("Error creating volume %lu on device %s; error %d", i, args->bdev_path, err); return err; diff --git a/shufflecake-userland/src/commands/open.c b/shufflecake-userland/src/commands/open.c index c29d5d9..70dce92 100644 --- a/shufflecake-userland/src/commands/open.c +++ b/shufflecake-userland/src/commands/open.c @@ -29,9 +29,8 @@ #include #include -#include "commands/commands.h" -#include "operations/volume.h" -#include "operations/device.h" +#include "commands.h" +#include "operations.h" #include "utils/sflc.h" #include "utils/crypto.h" #include "utils/file.h" @@ -42,9 +41,6 @@ * PRIVATE FUNCTIONS PROTOTYPES * *****************************************************/ -/* Finds the volume opened by the given pwd */ -static int _findVolumeByPwd(sflc_cmd_OpenArgs *args, size_t nr_slices, size_t *vol_idx, char *vmb_key); - /* Opens the indicated volume and the previous ones with the VMB keys */ static int _openVolumes(sflc_cmd_OpenArgs *args, size_t nr_slices, size_t vol_idx, char *vmb_key); @@ -57,9 +53,11 @@ static int _getNextDevId(size_t *next_dev_id); *****************************************************/ /** - * Open M volumes, from the one whose pwd is provided back up to the first one. - * Scans the device to find the volume that can be opened with the provided - * pwd, opens it, then opens the previous ones with their VMB key. + * Open M volumes, from the first one down to the one whose pwd is provided. + * Scans the DMB cells to find which one is unlocked by the provided pwd; then, + * using the decrypted VMB key, unlocks the M-th VMB; then, iteratively using + * the prev_vmb_key field, unlocks all the previous VMBs; then, using the + * decrypted VMB keys, opens the volumes "in order" from 1 to M. * * @param args->bdev_path The underlying block device * @param pwd The password @@ -71,8 +69,7 @@ int sflc_cmd_openVolumes(sflc_cmd_OpenArgs *args) { int64_t dev_size; size_t nr_slices; - size_t vol_idx; - char vmb_key[SFLC_CRYPTO_KEYLEN]; + sflc_DmbCell dmb_cell; int err; /* Get number of slices */ @@ -85,14 +82,13 @@ int sflc_cmd_openVolumes(sflc_cmd_OpenArgs *args) nr_slices = sflc_disk_maxSlices(dev_size); /* Find volume opened by the pwd */ - err = _findVolumeByPwd(args, nr_slices, &vol_idx, vmb_key); + err = sflc_ops_readDmb(args->bdev_path, args->pwd, args->pwd_len, &dmb_cell); if (err) { - sflc_log_error("Could not find volume opened by given password; error %d", err); + sflc_log_error("Could not read DMB; error %d", err); return err; } - /* Was there one? */ - if (vol_idx >= SFLC_DEV_MAX_VOLUMES) { + if (dmb_cell.vol_idx >= SFLC_DEV_MAX_VOLUMES) { sflc_log_error("The provided password opens no volume on the device"); return EINVAL; } @@ -107,32 +103,6 @@ int sflc_cmd_openVolumes(sflc_cmd_OpenArgs *args) * PRIVATE FUNCTIONS PROTOTYPES * *****************************************************/ -/* Finds the volume opened by the given pwd */ -int _findVolumeByPwd(sflc_cmd_OpenArgs *args, size_t nr_slices, size_t *vol_idx, char *vmb_key) -{ - sflc_DmbCell dmb; - int err; - - /* Delegate entirely to the function reading the DMB */ - err = sflc_ops_readDmb(args->bdev_path, args->pwd, args->pwd_len, &dmb); - if (err) { - sflc_log_error("Could not read DMB; error %d", err); - return err; - } - - /* Check that a volume was found */ - if (dmb.vol_idx >= SFLC_DEV_MAX_VOLUMES) { - sflc_log_error("Could not unlock any volumes: wrong password supplied"); - return EINVAL; - } - - /* Copy to output parameters */ - *vol_idx = dmb.vol_idx; - memcpy(vmb_key, dmb.vmb_key, SFLC_CRYPTO_KEYLEN); - - return 0; -} - /* Opens the indicated volume with the pwd and the previous ones with the VMB key */ int _openVolumes(sflc_cmd_OpenArgs *args, size_t nr_slices, size_t vol_idx, char *vmb_key) diff --git a/shufflecake-userland/src/commands/test_pwd.c b/shufflecake-userland/src/commands/test_pwd.c index e8d2555..f794347 100644 --- a/shufflecake-userland/src/commands/test_pwd.c +++ b/shufflecake-userland/src/commands/test_pwd.c @@ -29,9 +29,8 @@ #include #include -#include "commands/commands.h" -#include "operations/volume.h" -#include "operations/device.h" +#include "commands.h" +#include "operations.h" #include "utils/sflc.h" #include "utils/crypto.h" #include "utils/file.h" diff --git a/shufflecake-userland/src/header/device_master_block.c b/shufflecake-userland/src/header/device_master_block.c index 95ca9c1..ba5ec78 100644 --- a/shufflecake-userland/src/header/device_master_block.c +++ b/shufflecake-userland/src/header/device_master_block.c @@ -29,7 +29,7 @@ #include #include -#include "header/device_master_block.h" +#include "header.h" #include "utils/crypto.h" #include "utils/log.h" diff --git a/shufflecake-userland/src/header/position_map.c b/shufflecake-userland/src/header/position_map.c index 8f90c4f..f2b8144 100644 --- a/shufflecake-userland/src/header/position_map.c +++ b/shufflecake-userland/src/header/position_map.c @@ -29,7 +29,7 @@ #include #include -#include "header/position_map.h" +#include "header.h" #include "utils/sflc.h" #include "utils/crypto.h" #include "utils/math.h" diff --git a/shufflecake-userland/src/header/volume_master_block.c b/shufflecake-userland/src/header/volume_master_block.c index 35fd91f..9347582 100644 --- a/shufflecake-userland/src/header/volume_master_block.c +++ b/shufflecake-userland/src/header/volume_master_block.c @@ -30,7 +30,7 @@ #include #include // Network byte order -#include "header/volume_master_block.h" +#include "header.h" #include "utils/crypto.h" #include "utils/string.h" #include "utils/log.h" @@ -41,10 +41,10 @@ *****************************************************/ /* Serialise the VMB before encrypting it */ -static void _serialiseVmb(sflc_VolumeMasterBlock *vmb, char *clear_vmb); +static void _serialiseVmb(sflc_Vmb *vmb, char *clear_vmb); /* Deserialise the VMB after decrypting it */ -static int _deserialiseVmb(char *clear_vmb, sflc_VolumeMasterBlock *vmb); +static int _deserialiseVmb(char *clear_vmb, sflc_Vmb *vmb); /***************************************************** @@ -61,7 +61,7 @@ static int _deserialiseVmb(char *clear_vmb, sflc_VolumeMasterBlock *vmb); * * @return The error code, 0 on success */ -int sflc_vmb_seal(sflc_VolumeMasterBlock *vmb, char *vmb_key, char *disk_block) +int sflc_vmb_seal(sflc_Vmb *vmb, char *vmb_key, char *disk_block) { // Pointers inside the block char *iv = disk_block; @@ -123,7 +123,7 @@ bad_clear_alloc: * * @return An error code, 0 on success */ -int sflc_vmb_unseal(char *disk_block, char *vmb_key, sflc_VolumeMasterBlock *vmb) +int sflc_vmb_unseal(char *disk_block, char *vmb_key, sflc_Vmb *vmb) { // Pointers inside the block char *iv = disk_block; @@ -177,7 +177,7 @@ bad_clear_alloc: *****************************************************/ /* Serialise the payload before encrypting it */ -static void _serialiseVmb(sflc_VolumeMasterBlock *vmb, char *clear_vmb) +static void _serialiseVmb(sflc_Vmb *vmb, char *clear_vmb) { // Pointers inside the VMB char *p_vol_key = clear_vmb; @@ -200,7 +200,7 @@ static void _serialiseVmb(sflc_VolumeMasterBlock *vmb, char *clear_vmb) /* Deserialise the VMB after decrypting it */ -static int _deserialiseVmb(char *clear_vmb, sflc_VolumeMasterBlock *vmb) +static int _deserialiseVmb(char *clear_vmb, sflc_Vmb *vmb) { // Pointers inside the VMB char *p_vol_key = clear_vmb; diff --git a/shufflecake-userland/src/main.c b/shufflecake-userland/src/main.c index 8c541b5..737b57e 100644 --- a/shufflecake-userland/src/main.c +++ b/shufflecake-userland/src/main.c @@ -30,7 +30,7 @@ * INCLUDE SECTION * *****************************************************/ -#include "cli/cli.h" +#include "cli.h" /***************************************************** diff --git a/shufflecake-userland/src/operations/close_vol.c b/shufflecake-userland/src/operations/close_vol.c index 72225ff..2522eb6 100644 --- a/shufflecake-userland/src/operations/close_vol.c +++ b/shufflecake-userland/src/operations/close_vol.c @@ -31,8 +31,8 @@ #include #include -#include "header/volume_master_block.h" -#include "operations/volume.h" +#include "header.h" +#include "operations.h" #include "utils/sflc.h" #include "utils/crypto.h" #include "utils/file.h" diff --git a/shufflecake-userland/src/operations/create_vol.c b/shufflecake-userland/src/operations/create_vol.c index 6612936..d00d893 100644 --- a/shufflecake-userland/src/operations/create_vol.c +++ b/shufflecake-userland/src/operations/create_vol.c @@ -30,9 +30,9 @@ #include #include -#include "header/position_map.h" -#include "header/volume_master_block.h" -#include "operations/volume.h" +#include "header.h" +#include "header.h" +#include "operations.h" #include "utils/sflc.h" #include "utils/crypto.h" #include "utils/log.h" @@ -59,9 +59,9 @@ * * @return Error code, 0 on success */ -int sflc_ops_createVolume(sflc_Volume *vol) +int sflc_ops_writeVolumeHeader(sflc_Volume *vol) { - sflc_VolumeMasterBlock vmb; + sflc_Vmb vmb; char enc_vmb[SFLC_SECTOR_SIZE]; sflc_EncPosMap epm; uint64_t sector; diff --git a/shufflecake-userland/src/operations/dmb.c b/shufflecake-userland/src/operations/dmb.c index 1341f2f..0503577 100644 --- a/shufflecake-userland/src/operations/dmb.c +++ b/shufflecake-userland/src/operations/dmb.c @@ -31,8 +31,8 @@ #include #include -#include "header/device_master_block.h" -#include "operations/device.h" +#include "header.h" +#include "operations.h" #include "utils/sflc.h" #include "utils/crypto.h" #include "utils/log.h" @@ -141,7 +141,7 @@ int sflc_ops_readDmb(char *bdev_path, char *pwd, size_t pwd_len, sflc_DmbCell *d * * @return Error code, 0 on success */ -int sflc_ops_reencryptDmbCellAndWrite(char *bdev_path, sflc_DmbCell *dmb_cell, char *new_pwd, size_t new_pwd_len) +int sflc_ops_rewriteDmbCell(char *bdev_path, sflc_DmbCell *dmb_cell, char *new_pwd, size_t new_pwd_len) { /* On-disk DMB */ char enc_dmb[SFLC_SECTOR_SIZE]; diff --git a/shufflecake-userland/src/operations/open_vol.c b/shufflecake-userland/src/operations/open_vol.c index 493d715..c9f0f28 100644 --- a/shufflecake-userland/src/operations/open_vol.c +++ b/shufflecake-userland/src/operations/open_vol.c @@ -31,8 +31,8 @@ #include #include -#include "header/volume_master_block.h" -#include "operations/volume.h" +#include "header.h" +#include "operations.h" #include "utils/sflc.h" #include "utils/crypto.h" #include "utils/file.h" @@ -70,7 +70,7 @@ static int _openVolume(sflc_Volume *vol); */ int sflc_ops_openVolume(sflc_Volume *vol) { - sflc_VolumeMasterBlock vmb; + sflc_Vmb vmb; char enc_vmb[SFLC_SECTOR_SIZE]; uint64_t sector; int err; From ca039166377a889f1847d3d3aacf87173e8d3199 Mon Sep 17 00:00:00 2001 From: = Date: Thu, 9 Nov 2023 19:09:42 +0100 Subject: [PATCH 02/25] fix: Randomness quality for VEK --- shufflecake-userland/src/operations/create_vol.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/shufflecake-userland/src/operations/create_vol.c b/shufflecake-userland/src/operations/create_vol.c index d00d893..8d65023 100644 --- a/shufflecake-userland/src/operations/create_vol.c +++ b/shufflecake-userland/src/operations/create_vol.c @@ -68,7 +68,7 @@ int sflc_ops_writeVolumeHeader(sflc_Volume *vol) int err; // Sample keys - sflc_rand_getWeakBytes(vol->volume_key, SFLC_CRYPTO_KEYLEN); + sflc_rand_getStrongBytes(vol->volume_key, SFLC_CRYPTO_KEYLEN); // Fill VMB memcpy(vmb.volume_key, vol->volume_key, SFLC_CRYPTO_KEYLEN); From 80877d5b15dc1f4a06c52b8dc3eb627f030c0bcc Mon Sep 17 00:00:00 2001 From: = Date: Thu, 9 Nov 2023 19:31:28 +0100 Subject: [PATCH 03/25] Refactor, have operations/init.c sample the keys --- shufflecake-userland/include/operations.h | 4 +-- shufflecake-userland/src/commands/init.c | 34 +++++++++++++------ shufflecake-userland/src/operations/dmb.c | 21 ++---------- .../{create_vol.c => volume_header.c} | 8 +---- 4 files changed, 28 insertions(+), 39 deletions(-) rename shufflecake-userland/src/operations/{create_vol.c => volume_header.c} (93%) diff --git a/shufflecake-userland/include/operations.h b/shufflecake-userland/include/operations.h index b16ae56..0af3019 100644 --- a/shufflecake-userland/include/operations.h +++ b/shufflecake-userland/include/operations.h @@ -101,11 +101,9 @@ static inline uint64_t sflc_vmbPosition(sflc_Volume *vol) *****************************************************/ /* Samples VMB keys and writes the corresponding DMB to disk */ -int sflc_ops_createAndWriteDmb(char *bdev_path, char **pwds, size_t *pwd_lens, sflc_Dmb *dmb); - +int sflc_ops_writeDmb(char *bdev_path, char **pwds, size_t *pwd_lens, sflc_Dmb *dmb); /* Reads the DMB from disk and outputs the unlocked VMB key */ int sflc_ops_readDmb(char *bdev_path, char *pwd, size_t pwd_len, sflc_DmbCell *dmb_cell); - /* Reads the DMB from disk, changes the relevant DMB cell, and writes it back */ int sflc_ops_rewriteDmbCell(char *bdev_path, sflc_DmbCell *dmb_cell, char *new_pwd, size_t new_pwd_len); diff --git a/shufflecake-userland/src/commands/init.c b/shufflecake-userland/src/commands/init.c index 040eedd..b7adc16 100644 --- a/shufflecake-userland/src/commands/init.c +++ b/shufflecake-userland/src/commands/init.c @@ -51,7 +51,7 @@ *****************************************************/ /* Fill the device with random data */ -static int _fillWithRandom(char *bdev_path, uint64_t dev_size); +static int _fillDiskWithRandom(char *bdev_path, uint64_t dev_size); /***************************************************** @@ -84,7 +84,7 @@ int sflc_cmd_initVolumes(sflc_cmd_InitArgs *args) return EINVAL; } - /* Get device info */ + /* Get device size */ dev_size = sflc_disk_getSize(args->bdev_path); if (dev_size < 0) { err = -dev_size; @@ -95,28 +95,37 @@ int sflc_cmd_initVolumes(sflc_cmd_InitArgs *args) nr_slices = sflc_disk_maxSlices(dev_size); sflc_log_debug("Device %s has %ld blocks, corresponding to %lu logical slices", args->bdev_path, dev_size, nr_slices); - /* Fill with random, if needed */ + /* Fill disk with random bytes, if requested */ if (!args->no_randfill) { - err = _fillWithRandom(args->bdev_path, (uint64_t) dev_size); + err = _fillDiskWithRandom(args->bdev_path, (uint64_t) dev_size); if (err) { sflc_log_error("Could not fill device %s with random bytes; error %d", args->bdev_path, err); return err; } } - /* Create the DMB and write it to disk */ + /* Create the DMB */ dmb.nr_vols = args->nr_vols; - err = sflc_ops_createAndWriteDmb(args->bdev_path, args->pwds, args->pwd_lens, &dmb); + /* Sample the VMB keys */ + size_t i; + for (i = 0; i < dmb.nr_vols; i++) { + err = sflc_rand_getStrongBytes(dmb.vmb_keys[i], SFLC_CRYPTO_KEYLEN); + if (err) { + sflc_log_error("Could not sample VMB key number %lu; error %d", i , err); + return err; + } + } + /* And write (encrypted) to disk */ + err = sflc_ops_writeDmb(args->bdev_path, args->pwds, args->pwd_lens, &dmb); if (err) { sflc_log_error("Could not create DMB and write it to disk; error %d", err); return err; } - /* Common fields for all the volumes */ + /* Write the volume headers */ sflc_Volume vol; vol.bdev_path = args->bdev_path; vol.nr_slices = nr_slices; - /* Create each of the volumes */ size_t i; for (i = 0; i < args->nr_vols; i++) { /* This volume's vmb_key and prev_vmb_key */ @@ -127,10 +136,13 @@ int sflc_cmd_initVolumes(sflc_cmd_InitArgs *args) /* This volume's index */ vol.vol_idx = i; - /* Create volume */ + /* Sample this volume's VEK */ + sflc_rand_getStrongBytes(vol->volume_key, SFLC_CRYPTO_KEYLEN); + + /* Write complete volume header (VMB + PM) */ err = sflc_ops_writeVolumeHeader(&vol); if (err) { - sflc_log_error("Error creating volume %lu on device %s; error %d", i, args->bdev_path, err); + sflc_log_error("Error writing volume header %lu on device %s; error %d", i, args->bdev_path, err); return err; } } @@ -145,7 +157,7 @@ int sflc_cmd_initVolumes(sflc_cmd_InitArgs *args) *****************************************************/ /* Fill the device with random data */ -static int _fillWithRandom(char *bdev_path, uint64_t dev_size) +static int _fillDiskWithRandom(char *bdev_path, uint64_t dev_size) { char *rand_chunk; int err; diff --git a/shufflecake-userland/src/operations/dmb.c b/shufflecake-userland/src/operations/dmb.c index 0503577..0209eee 100644 --- a/shufflecake-userland/src/operations/dmb.c +++ b/shufflecake-userland/src/operations/dmb.c @@ -43,18 +43,17 @@ *****************************************************/ /** - * Samples VMB keys and writes the corresponding DMB to disk. + * Encrypts and writes the DMB to disk. * * @param bdev_path The path to the underlying block device * @param pwds The array of passwords * @param pwd_lens Their lengths * @param dmb->nr_vols * - * @output dmb->vmb_keys * * @return Error code, 0 on success */ -int sflc_ops_createAndWriteDmb(char *bdev_path, char **pwds, size_t *pwd_lens, sflc_Dmb *dmb) +int sflc_ops_writeDmb(char *bdev_path, char **pwds, size_t *pwd_lens, sflc_Dmb *dmb) { /* On-disk DMB */ char enc_dmb[SFLC_SECTOR_SIZE]; @@ -67,17 +66,7 @@ int sflc_ops_createAndWriteDmb(char *bdev_path, char **pwds, size_t *pwd_lens, s return EINVAL; } - /* Sample the VMB keys */ - size_t i; - for (i = 0; i < dmb->nr_vols; i++) { - err = sflc_rand_getStrongBytes(dmb->vmb_keys[i], SFLC_CRYPTO_KEYLEN); - if (err) { - sflc_log_error("Could not sample VMB key number %lu; error %d", i , err); - return err; - } - } - - /* Seal it */ + /* Seal DMB */ err = sflc_dmb_seal(dmb, pwds, pwd_lens, enc_dmb); if (err) { sflc_log_error("Coul dnot seal DMB; error %d", err); @@ -109,9 +98,7 @@ int sflc_ops_createAndWriteDmb(char *bdev_path, char **pwds, size_t *pwd_lens, s */ int sflc_ops_readDmb(char *bdev_path, char *pwd, size_t pwd_len, sflc_DmbCell *dmb) { - /* On-disk DMB */ char enc_dmb[SFLC_SECTOR_SIZE]; - /* Error code */ int err; /* Read DMB from disk (at sector 0) */ @@ -143,9 +130,7 @@ int sflc_ops_readDmb(char *bdev_path, char *pwd, size_t pwd_len, sflc_DmbCell *d */ int sflc_ops_rewriteDmbCell(char *bdev_path, sflc_DmbCell *dmb_cell, char *new_pwd, size_t new_pwd_len) { - /* On-disk DMB */ char enc_dmb[SFLC_SECTOR_SIZE]; - /* Error code */ int err; /* Sanity check */ diff --git a/shufflecake-userland/src/operations/create_vol.c b/shufflecake-userland/src/operations/volume_header.c similarity index 93% rename from shufflecake-userland/src/operations/create_vol.c rename to shufflecake-userland/src/operations/volume_header.c index 8d65023..6f4bcd5 100644 --- a/shufflecake-userland/src/operations/create_vol.c +++ b/shufflecake-userland/src/operations/volume_header.c @@ -43,7 +43,7 @@ *****************************************************/ /** - * Writes a volume header (VMB+PM) on-disk. Also fills the struct's volume_key field. + * Writes a volume header (VMB+PM) on-disk. * Some of the fields in the struct are input, some are output. * * @param vol->vmb_key The key to decrypt the VMB @@ -52,11 +52,6 @@ * @param vol->vol_idx The index of the volume within the device * @param vol->bdev_path The underlying block device to write the volume header * - * @output vol->volume_key This volume's data section key - * - * @unused vol->label - * @unused vol->dev_id - * * @return Error code, 0 on success */ int sflc_ops_writeVolumeHeader(sflc_Volume *vol) @@ -68,7 +63,6 @@ int sflc_ops_writeVolumeHeader(sflc_Volume *vol) int err; // Sample keys - sflc_rand_getStrongBytes(vol->volume_key, SFLC_CRYPTO_KEYLEN); // Fill VMB memcpy(vmb.volume_key, vol->volume_key, SFLC_CRYPTO_KEYLEN); From 2646be968c1e55df795ae712259a484b43e5b98f Mon Sep 17 00:00:00 2001 From: = Date: Thu, 9 Nov 2023 19:57:25 +0100 Subject: [PATCH 04/25] Refactor, stop using Volume struct --- shufflecake-userland/include/operations.h | 6 ++-- shufflecake-userland/src/commands/init.c | 19 ++++------ .../src/operations/volume_header.c | 36 +++++++------------ 3 files changed, 23 insertions(+), 38 deletions(-) diff --git a/shufflecake-userland/include/operations.h b/shufflecake-userland/include/operations.h index 0af3019..c8521f4 100644 --- a/shufflecake-userland/include/operations.h +++ b/shufflecake-userland/include/operations.h @@ -90,9 +90,9 @@ static inline size_t sflc_volHeaderSize(size_t nr_slices) } // Position of the VMB for the given volume -static inline uint64_t sflc_vmbPosition(sflc_Volume *vol) +static inline uint64_t sflc_vmbPosition(size_t vol_idx, size_t nr_slices) { - return 1 + ((uint64_t) vol->vol_idx) * ((uint64_t) sflc_volHeaderSize(vol->nr_slices)); + return 1 + ((uint64_t) vol_idx) * ((uint64_t) sflc_volHeaderSize(nr_slices)); } @@ -108,7 +108,7 @@ int sflc_ops_readDmb(char *bdev_path, char *pwd, size_t pwd_len, sflc_DmbCell *d int sflc_ops_rewriteDmbCell(char *bdev_path, sflc_DmbCell *dmb_cell, char *new_pwd, size_t new_pwd_len); /* Writes a volume header (VMB+PM) on-disk */ -int sflc_ops_writeVolumeHeader(sflc_Volume *vol); +int sflc_ops_writeVolumeHeader(char *bdev_path, char *vmb_key, sflc_Vmb *vmb, size_t vol_idx); /* Read a VMB from disk and issue a DM ioctl to create the appropriate virtual device */ int sflc_ops_openVolume(sflc_Volume *vol); diff --git a/shufflecake-userland/src/commands/init.c b/shufflecake-userland/src/commands/init.c index b7adc16..f0fe490 100644 --- a/shufflecake-userland/src/commands/init.c +++ b/shufflecake-userland/src/commands/init.c @@ -74,6 +74,7 @@ static int _fillDiskWithRandom(char *bdev_path, uint64_t dev_size); int sflc_cmd_initVolumes(sflc_cmd_InitArgs *args) { sflc_Dmb dmb; + sflc_Vmb vmb; int64_t dev_size; size_t nr_slices; int err; @@ -104,7 +105,7 @@ int sflc_cmd_initVolumes(sflc_cmd_InitArgs *args) } } - /* Create the DMB */ + /* Fill the DMB */ dmb.nr_vols = args->nr_vols; /* Sample the VMB keys */ size_t i; @@ -123,24 +124,18 @@ int sflc_cmd_initVolumes(sflc_cmd_InitArgs *args) } /* Write the volume headers */ - sflc_Volume vol; - vol.bdev_path = args->bdev_path; - vol.nr_slices = nr_slices; + vmb.nr_slices = nr_slices; size_t i; for (i = 0; i < args->nr_vols; i++) { - /* This volume's vmb_key and prev_vmb_key */ - memcpy(vol.vmb_key, dmb.vmb_keys[i], SFLC_CRYPTO_KEYLEN); + /* This volume's prev_vmb_key */ if (i > 0) { - memcpy(vol.prev_vmb_key, dmb.vmb_keys[i-1], SFLC_CRYPTO_KEYLEN); + memcpy(vmb.prev_vmb_key, dmb.vmb_keys[i-1], SFLC_CRYPTO_KEYLEN); } - /* This volume's index */ - vol.vol_idx = i; - /* Sample this volume's VEK */ - sflc_rand_getStrongBytes(vol->volume_key, SFLC_CRYPTO_KEYLEN); + sflc_rand_getStrongBytes(vmb.volume_key, SFLC_CRYPTO_KEYLEN); /* Write complete volume header (VMB + PM) */ - err = sflc_ops_writeVolumeHeader(&vol); + err = sflc_ops_writeVolumeHeader(args->bdev_path, dmb.vmb_keys[i], &vmb, i); if (err) { sflc_log_error("Error writing volume header %lu on device %s; error %d", i, args->bdev_path, err); return err; diff --git a/shufflecake-userland/src/operations/volume_header.c b/shufflecake-userland/src/operations/volume_header.c index 6f4bcd5..a75d4ce 100644 --- a/shufflecake-userland/src/operations/volume_header.c +++ b/shufflecake-userland/src/operations/volume_header.c @@ -44,41 +44,31 @@ /** * Writes a volume header (VMB+PM) on-disk. - * Some of the fields in the struct are input, some are output. * - * @param vol->vmb_key The key to decrypt the VMB - * @param vol->prev_vmb_key The previous volume's VMB key - * @param vol->nr_slices The number of logical slices of the volume(s) - * @param vol->vol_idx The index of the volume within the device - * @param vol->bdev_path The underlying block device to write the volume header + * @param bdev_path The underlying block device to write the volume header + * @param vmb_key The key to encrypt the VMB + * @param vmb The VMB to encrypt + * @param vol_idx The index of the volume within the device * * @return Error code, 0 on success */ -int sflc_ops_writeVolumeHeader(sflc_Volume *vol) +int sflc_ops_writeVolumeHeader(char *bdev_path, char *vmb_key, sflc_Vmb *vmb, size_t vol_idx) { - sflc_Vmb vmb; char enc_vmb[SFLC_SECTOR_SIZE]; sflc_EncPosMap epm; uint64_t sector; int err; - // Sample keys - - // Fill VMB - memcpy(vmb.volume_key, vol->volume_key, SFLC_CRYPTO_KEYLEN); - memcpy(vmb.prev_vmb_key, vol->prev_vmb_key, SFLC_CRYPTO_KEYLEN); - vmb.nr_slices = vol->nr_slices; - - // Encrypt it - err = sflc_vmb_seal(&vmb, vol->vmb_key, enc_vmb); + // Encrypt VMB + err = sflc_vmb_seal(&vmb, vmb_key, enc_vmb); if (err) { sflc_log_error("Could not seal VMB; error %d", err); goto out; } // Write it to disk - sector = sflc_vmbPosition(vol); - err = sflc_disk_writeSector(vol->bdev_path, sector, enc_vmb); + sector = sflc_vmbPosition(vol_idx, vmb->nr_slices); + err = sflc_disk_writeSector(bdev_path, sector, enc_vmb); if (err) { sflc_log_error("Could not write VMB to disk; error %d", err); goto out; @@ -86,13 +76,13 @@ int sflc_ops_writeVolumeHeader(sflc_Volume *vol) sector += 1; // Create encrypted empty position map - err = sflc_epm_create(vol->nr_slices, vol->volume_key, &epm); + err = sflc_epm_create(vmb->nr_slices, vmb->volume_key, &epm); if (err) { sflc_log_error("Could not create encrypted empty position map; error %d", err); goto out; } - // Loop over PMB arrays to write it to disk + // Loop over PMB arrays to write them to disk int i; for (i = 0; i < epm.nr_arrays; i++) { char *iv_block = epm.iv_blocks[i]; @@ -100,7 +90,7 @@ int sflc_ops_writeVolumeHeader(sflc_Volume *vol) size_t nr_pmbs = ((i == epm.nr_arrays-1) ? epm.nr_last_pmbs : SFLC_BLOCKS_PER_LOG_SLICE); // First write the IV block - err = sflc_disk_writeSector(vol->bdev_path, sector, iv_block); + err = sflc_disk_writeSector(bdev_path, sector, iv_block); if (err) { sflc_log_error("Could not write IV block to disk; error %d", err); goto out; @@ -108,7 +98,7 @@ int sflc_ops_writeVolumeHeader(sflc_Volume *vol) sector += 1; // Then the whole PMB array - err = sflc_disk_writeManySectors(vol->bdev_path, sector, pmb_array, nr_pmbs); + err = sflc_disk_writeManySectors(bdev_path, sector, pmb_array, nr_pmbs); if (err) { sflc_log_error("Could not write PMB array to disk; error %d", err); goto out; From 1f3c3d8fadf2ebcccd0999cc524b865214109a57 Mon Sep 17 00:00:00 2001 From: = Date: Thu, 9 Nov 2023 20:15:40 +0100 Subject: [PATCH 05/25] Define readVmb --- shufflecake-userland/Makefile.sources | 2 +- shufflecake-userland/include/operations.h | 4 +- .../src/operations/close_vol.c | 59 ------------------- .../operations/{open_vol.c => devmapper.c} | 14 +++++ .../src/operations/volume_header.c | 44 ++++++++++++++ 5 files changed, 62 insertions(+), 61 deletions(-) delete mode 100644 shufflecake-userland/src/operations/close_vol.c rename shufflecake-userland/src/operations/{open_vol.c => devmapper.c} (94%) diff --git a/shufflecake-userland/Makefile.sources b/shufflecake-userland/Makefile.sources index 2123dd2..0e2a80b 100644 --- a/shufflecake-userland/Makefile.sources +++ b/shufflecake-userland/Makefile.sources @@ -29,7 +29,7 @@ PROJ_SRCS := $(addprefix utils/,crypto.c disk.c dm.c file.c string.c input.c) PROJ_SRCS += $(addprefix header/,position_map.c volume_master_block.c device_master_block.c) -PROJ_SRCS += $(addprefix operations/,create_vol.c open_vol.c close_vol.c dmb.c) +PROJ_SRCS += $(addprefix operations/,volume_header.c devmapper.c dmb.c) PROJ_SRCS += $(addprefix commands/,init.c open.c close.c test_pwd.c change_pwd.c) PROJ_SRCS += $(addprefix cli/,dispatch.c init.c open.c close.c testpwd.c changepwd.c) PROJ_SRCS += main.c diff --git a/shufflecake-userland/include/operations.h b/shufflecake-userland/include/operations.h index c8521f4..91517a1 100644 --- a/shufflecake-userland/include/operations.h +++ b/shufflecake-userland/include/operations.h @@ -107,8 +107,10 @@ int sflc_ops_readDmb(char *bdev_path, char *pwd, size_t pwd_len, sflc_DmbCell *d /* Reads the DMB from disk, changes the relevant DMB cell, and writes it back */ int sflc_ops_rewriteDmbCell(char *bdev_path, sflc_DmbCell *dmb_cell, char *new_pwd, size_t new_pwd_len); -/* Writes a volume header (VMB+PM) on-disk */ +/* Encrypts and writes a volume header (VMB+PM) on-disk */ int sflc_ops_writeVolumeHeader(char *bdev_path, char *vmb_key, sflc_Vmb *vmb, size_t vol_idx); +/* Reads a VMB from disk and unlocks it */ +int sflc_ops_readVmb(char *bdev_path, char *vmb_key, size_t nr_slices, size_t vol_idx, sflc_Vmb *vmb); /* Read a VMB from disk and issue a DM ioctl to create the appropriate virtual device */ int sflc_ops_openVolume(sflc_Volume *vol); diff --git a/shufflecake-userland/src/operations/close_vol.c b/shufflecake-userland/src/operations/close_vol.c deleted file mode 100644 index 2522eb6..0000000 --- a/shufflecake-userland/src/operations/close_vol.c +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Copyright The Shufflecake Project Authors (2022) - * Copyright The Shufflecake Project Contributors (2022) - * Copyright Contributors to the The Shufflecake Project. - * - * See the AUTHORS file at the top-level directory of this distribution and at - * - * - * This file is part of the program shufflecake-c, which is part of the - * Shufflecake Project. Shufflecake is a plausible deniability (hidden storage) - * layer for Linux. See . - * - * This program is free software: you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the Free - * Software Foundation, either version 2 of the License, or (at your option) - * any later version. This program is distributed in the hope that it will be - * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General - * Public License for more details. You should have received a copy of the - * GNU General Public License along with this program. - * If not, see . - */ - -/***************************************************** - * INCLUDE SECTION * - *****************************************************/ - -#include -#include -#include -#include -#include - -#include "header.h" -#include "operations.h" -#include "utils/sflc.h" -#include "utils/crypto.h" -#include "utils/file.h" -#include "utils/string.h" -#include "utils/dm.h" -#include "utils/log.h" - - -/***************************************************** - * PUBLIC FUNCTIONS DEFINITIONS * - *****************************************************/ - -/** - * Close the volume by issuing the appropriate ioctl to the DM. - * - * @param label The only needed parameter: the ID of the volume. - * - * @return Error code, 0 on success - */ -int sflc_ops_closeVolume(char *label) -{ - /* Issue ioctl */ - return sflc_dm_destroy(label); -} diff --git a/shufflecake-userland/src/operations/open_vol.c b/shufflecake-userland/src/operations/devmapper.c similarity index 94% rename from shufflecake-userland/src/operations/open_vol.c rename to shufflecake-userland/src/operations/devmapper.c index c9f0f28..633a685 100644 --- a/shufflecake-userland/src/operations/open_vol.c +++ b/shufflecake-userland/src/operations/devmapper.c @@ -113,6 +113,20 @@ int sflc_ops_openVolume(sflc_Volume *vol) } +/** + * Close the volume by issuing the appropriate ioctl to the DM. + * + * @param label The only needed parameter: the ID of the volume. + * + * @return Error code, 0 on success + */ +int sflc_ops_closeVolume(char *label) +{ + /* Issue ioctl */ + return sflc_dm_destroy(label); +} + + /***************************************************** * PRIVATE FUNCTIONS DEFINITIONS * *****************************************************/ diff --git a/shufflecake-userland/src/operations/volume_header.c b/shufflecake-userland/src/operations/volume_header.c index a75d4ce..c453958 100644 --- a/shufflecake-userland/src/operations/volume_header.c +++ b/shufflecake-userland/src/operations/volume_header.c @@ -118,3 +118,47 @@ int sflc_ops_writeVolumeHeader(char *bdev_path, char *vmb_key, sflc_Vmb *vmb, si out: return err; } + + +/** + * Reads a VMB from disk and unlocks it + * + * @param bdev_path The underlying block device + * @param vmb_key The key to decrypt the VMB + * @param nr_slices The number of slices in the device + * @param vol_idx The index of the volume within the device + * + * @output vmb The decrypted VMB + * + * @return Error code, 0 on success + */ +int sflc_ops_readVmb(char *bdev_path, char *vmb_key, size_t nr_slices, size_t vol_idx, sflc_Vmb *vmb) +{ + char enc_vmb[SFLC_SECTOR_SIZE]; + uint64_t sector; + int err; + + /* Read encrypted VMB from disk */ + sector = sflc_vmbPosition(vol_idx, nr_slices); + err = sflc_disk_readSector(bdev_path, sector, enc_vmb); + if (err) { + sflc_log_error("Could not read VMB from disk; error %d", err); + return err; + } + + /* Unseal it */ + err = sflc_vmb_unseal(enc_vmb, vmb_key, vmb); + if (err) { + sflc_log_error("Could not unseal VMB; error %d", err); + return err; + } + + /* Compare the number of slices */ + if (nr_slices != vmb->nr_slices) { + sflc_log_error("Incompatible header size: the device size was different when the volumes" + "were created. Did you resize the device %s since last time?", bdev_path); + return EINVAL; + } + + return 0; +} From 38ba68daa45fd156dd7c37e348758b3cc44a0ccd Mon Sep 17 00:00:00 2001 From: = Date: Thu, 9 Nov 2023 20:28:51 +0100 Subject: [PATCH 06/25] Refactor, ops_openVolume does not read VMB --- shufflecake-userland/include/operations.h | 5 +- .../src/operations/devmapper.c | 132 +++++------------- 2 files changed, 39 insertions(+), 98 deletions(-) diff --git a/shufflecake-userland/include/operations.h b/shufflecake-userland/include/operations.h index 91517a1..027c693 100644 --- a/shufflecake-userland/include/operations.h +++ b/shufflecake-userland/include/operations.h @@ -112,9 +112,8 @@ int sflc_ops_writeVolumeHeader(char *bdev_path, char *vmb_key, sflc_Vmb *vmb, si /* Reads a VMB from disk and unlocks it */ int sflc_ops_readVmb(char *bdev_path, char *vmb_key, size_t nr_slices, size_t vol_idx, sflc_Vmb *vmb); -/* Read a VMB from disk and issue a DM ioctl to create the appropriate virtual device */ -int sflc_ops_openVolume(sflc_Volume *vol); - +/* Build parameter list for ctor in dm_sflc, and send DM ioctl to create virtual block device */ +int sflc_ops_openVolume(char *bdev_path, size_t dev_id, size_t vol_idx, sflc_Vmb *vmb); /* Close the volume via the appropriate ioctl to DM */ int sflc_ops_closeVolume(char *label); diff --git a/shufflecake-userland/src/operations/devmapper.c b/shufflecake-userland/src/operations/devmapper.c index 633a685..99a66a2 100644 --- a/shufflecake-userland/src/operations/devmapper.c +++ b/shufflecake-userland/src/operations/devmapper.c @@ -41,75 +41,59 @@ #include "utils/log.h" -/***************************************************** - * PRIVATE FUNCTIONS PROTOTYPES * - *****************************************************/ - -/* Open the volume through the appropriate ioctl */ -static int _openVolume(sflc_Volume *vol); - - /***************************************************** * PUBLIC FUNCTIONS DEFINITIONS * *****************************************************/ /** - * Read a VMB from disk and issue a DM ioctl to create the appropriate virtual device + * Build parameter list for ctor in dm_sflc, and send DM ioctl to create + * virtual block device. * - * @param vol->vmb_key The key encrypting this volume's VMB - * @param vol->dev_id The ID of the underlying block device - * @param vol->vol_idx The index of the volume within the device - * @param vol->bdev_path The path to the underlying device - * @param vol->nr_slices The number of logical slices for this device / volumes - * - * @output vol->volume_key This volume's data section key - * @output vol->prev_vmb_key The previous volume's VMB key - * @output vol->label The volume's name under /dev/mapper/ + * @param bdev_path The path to the underlying device + * @param dev_id The ID of the underlying block device + * @param vol_idx The index of the volume within the device + * @param vmb Volume metadata * * @return Error code, 0 on success */ -int sflc_ops_openVolume(sflc_Volume *vol) +int sflc_ops_openVolume(char *bdev_path, size_t dev_id, size_t vol_idx, sflc_Vmb *vmb) { - sflc_Vmb vmb; - char enc_vmb[SFLC_SECTOR_SIZE]; - uint64_t sector; + char label[SFLC_BIGBUFSIZE]; + char *hex_key; + char params[SFLC_BIGBUFSIZE]; + uint64_t num_sectors; int err; - /* Read encrypted VMB from disk */ - sector = sflc_vmbPosition(vol); - err = sflc_disk_readSector(vol->bdev_path, sector, enc_vmb); - if (err) { - sflc_log_error("Could not read VMB from disk; error %d", err); - return err; - } - - /* Unseal it */ - err = sflc_vmb_unseal(enc_vmb, vol->vmb_key, &vmb); - if (err) { - sflc_log_error("Could not unseal VMB; error %d", err); - return err; - } - - /* Compare the number of slices */ - if (vol->nr_slices != vmb.nr_slices) { - sflc_log_error("Incompatible header size: the device size was different when the volumes" - "were created. Did you resize the device %s since last time?", vol->bdev_path); - return EINVAL; - } - /* Copy the keys over to the Volume struct */ - memcpy(vol->volume_key, vmb.volume_key, SFLC_CRYPTO_KEYLEN); - memcpy(vol->prev_vmb_key, vmb.prev_vmb_key, SFLC_CRYPTO_KEYLEN); /* Build volume label */ - sprintf(vol->label, "sflc_%lu_%lu", vol->dev_id, vol->vol_idx); + sprintf(label, "sflc_%lu_%lu", dev_id, vol_idx); - /* Actually open the volume */ - err = _openVolume(vol); - if (err) { - sflc_log_error("Could not open volume; error %d", err); - return err; + /* Get the hex version of the volume's data section key */ + hex_key = sflc_toHex(vmb->volume_key, SFLC_CRYPTO_KEYLEN); + if (!hex_key) { + sflc_log_error("Could not encode volume key to hexadecimal"); + err = ENOMEM; + goto err_hexkey; } - return 0; + /* Get the number of logical 512-byte sectors composing the volume */ + num_sectors = ((uint64_t) vmb->nr_slices) * SFLC_BLOCKS_PER_LOG_SLICE * SFLC_SECTOR_SCALE; + + /* Build param list */ + sprintf(params, "%s %lu %lu %s", bdev_path, vol_idx, vmb->nr_slices, hex_key); + + /* Issue ioctl */ + err = sflc_dm_create(label, num_sectors, params); + if (err) { + sflc_log_error("Could not issue ioctl CREATE command to device mapper; error %d", err); + goto err_dmcreate; + } + err = 0; + + +err_dmcreate: + free(hex_key); +err_hexkey: + return err; } @@ -125,45 +109,3 @@ int sflc_ops_closeVolume(char *label) /* Issue ioctl */ return sflc_dm_destroy(label); } - - -/***************************************************** - * PRIVATE FUNCTIONS DEFINITIONS * - *****************************************************/ - -/* Open the volume through the appropriate ioctl */ -static int _openVolume(sflc_Volume *vol) -{ - char *hex_key; - char params[SFLC_BIGBUFSIZE]; - uint64_t num_sectors; - int err; - - /* Get the hex version of the volume's data section key */ - hex_key = sflc_toHex(vol->volume_key, SFLC_CRYPTO_KEYLEN); - if (!hex_key) { - sflc_log_error("Could not encode volume key to hexadecimal"); - err = ENOMEM; - goto err_hexkey; - } - - /* Get the number of logical 512-byte sectors composing the volume */ - num_sectors = ((uint64_t) vol->nr_slices) * SFLC_BLOCKS_PER_LOG_SLICE * SFLC_SECTOR_SCALE; - - /* Build param list */ - sprintf(params, "%s %lu %lu %s", vol->bdev_path, vol->vol_idx, vol->nr_slices, hex_key); - - /* Issue ioctl */ - err = sflc_dm_create(vol->label, num_sectors, params); - if (err) { - sflc_log_error("Could not issue ioctl CREATE command to device mapper; error %d", err); - goto err_dmcreate; - } - err = 0; - - -err_dmcreate: - free(hex_key); -err_hexkey: - return err; -} From 383db62bd0f95bc8d550c27b3d9e6678233eb470 Mon Sep 17 00:00:00 2001 From: = Date: Thu, 9 Nov 2023 20:57:47 +0100 Subject: [PATCH 07/25] Refactor, reverse order of volume opening and closing --- shufflecake-userland/src/commands/close.c | 10 +- shufflecake-userland/src/commands/open.c | 109 ++++++++++------------ 2 files changed, 54 insertions(+), 65 deletions(-) diff --git a/shufflecake-userland/src/commands/close.c b/shufflecake-userland/src/commands/close.c index f5abdf0..e6adde1 100644 --- a/shufflecake-userland/src/commands/close.c +++ b/shufflecake-userland/src/commands/close.c @@ -45,7 +45,7 @@ /* Reads the list of volumes from sysfs */ static int _readVolumesList(char *bdev_path, char **labels, size_t *nr_vols); -/* Close them all */ +/* Close them all (in reverse order of opening) */ static int _closeVolumes(char **labels, size_t nr_vols); @@ -83,7 +83,7 @@ int sflc_cmd_closeVolumes(char *bdev_path) goto out; } - /* Close the volumes */ + /* Close the volumes (in reverse order of opening) */ err = _closeVolumes(labels, nr_vols); if (err) { sflc_log_error("Could not close volumes; error %d", err); @@ -156,14 +156,14 @@ static int _readVolumesList(char *bdev_path, char **labels, size_t *nr_vols) } -/* Close them all */ +/* Close them all (in reverse order of opening) */ static int _closeVolumes(char **labels, size_t nr_vols) { int err; /* Eazy peazy */ - size_t i; - for (i = 0; i < nr_vols; i++) { + int i; + for (i = nr_vols; i >= 0; i--) { err = sflc_ops_closeVolume(labels[i]); if (err) { sflc_log_error("Could not close volume %s; error %d", labels[i], err); diff --git a/shufflecake-userland/src/commands/open.c b/shufflecake-userland/src/commands/open.c index 70dce92..a968c1f 100644 --- a/shufflecake-userland/src/commands/open.c +++ b/shufflecake-userland/src/commands/open.c @@ -41,9 +41,6 @@ * PRIVATE FUNCTIONS PROTOTYPES * *****************************************************/ -/* Opens the indicated volume and the previous ones with the VMB keys */ -static int _openVolumes(sflc_cmd_OpenArgs *args, size_t nr_slices, size_t vol_idx, char *vmb_key); - /* Read the next device ID in sysfs */ static int _getNextDevId(size_t *next_dev_id); @@ -60,8 +57,8 @@ static int _getNextDevId(size_t *next_dev_id); * decrypted VMB keys, opens the volumes "in order" from 1 to M. * * @param args->bdev_path The underlying block device - * @param pwd The password - * @param pwd_len The password length + * @param args->pwd The password + * @param args->pwd_len The password length * * @return Error code (also if no volume could be opened), 0 on success */ @@ -70,6 +67,8 @@ int sflc_cmd_openVolumes(sflc_cmd_OpenArgs *args) int64_t dev_size; size_t nr_slices; sflc_DmbCell dmb_cell; + sflc_Vmb vmbs[SFLC_DEV_MAX_VOLUMES]; + size_t dev_id; int err; /* Get number of slices */ @@ -94,8 +93,51 @@ int sflc_cmd_openVolumes(sflc_cmd_OpenArgs *args) } printf("Password is correct! Opening volumes...\n"); - /* Open volumes */ - return _openVolumes(args, nr_slices, vol_idx, vmb_key); + /* Unlock VMBs "backwards" */ + int i; // Needs sign, because loop ends on i>=0 + for (i = dmb_cell.vol_idx; i >= 0; i--) { + /* Which VMB key to use? */ + char *vmb_key; + if (i == dmb_cell.vol_idx) { + // The one unlocked by pwd + vmb_key = dmb_cell.vmb_key; + } else { + // Or the prev_vmb_key from last iteration + vmb_key = vmbs[i+1].prev_vmb_key; + } + + /* Read and unlock VMB */ + err = sflc_ops_readVmb(args->bdev_path, vmb_key, nr_slices, (size_t) i, &vmbs[i]); + if (err) { + sflc_log_error("Could not read VMB %d on device %s; error %d", + i, args->bdev_path, err); + return err; + } + } + + /* Get the ID that will be assigned to the block device */ + err = _getNextDevId(&dev_id); + if (err) { + sflc_log_error("Could not get next device ID; error %d", err); + return err; + } + sflc_log_debug("Next device ID is %lu", dev_id); + + /* Open volumes "in order" */ + for (i = 0; i < dmb_cell.vol_idx; i++) { + err = sflc_ops_openVolume(args->bdev_path, dev_id, (size_t) i, &vmbs[i]); + if (err) { + sflc_log_error("Could not open volume %d; error %d. " + "Previous volumes on the device might have already " + "been opened, it's recommended you close them", + i, err); + return err; + } + sflc_log_debug("Successfully opened volume %d with VMB key", i); + printf("Opened volume /dev/mapper/sflc_%lu_%d\n", dev_id, i); + } + + return 0; } @@ -103,59 +145,6 @@ int sflc_cmd_openVolumes(sflc_cmd_OpenArgs *args) * PRIVATE FUNCTIONS PROTOTYPES * *****************************************************/ - -/* Opens the indicated volume with the pwd and the previous ones with the VMB key */ -int _openVolumes(sflc_cmd_OpenArgs *args, size_t nr_slices, size_t vol_idx, char *vmb_key) -{ - sflc_Volume vol; - int err; - - /* Input fields to open a volume */ - vol.bdev_path = args->bdev_path; - vol.nr_slices = nr_slices; - /* Get the ID that will be assigned to the block device */ - err = _getNextDevId(&vol.dev_id); - if (err) { - sflc_log_error("Could not get next device ID; error %d", err); - return err; - } - sflc_log_debug("Next device ID is %lu", vol.dev_id); - - /* Open the last one with the provided vmb_key */ - vol.vol_idx = vol_idx; - memcpy(vol.vmb_key, vmb_key, SFLC_CRYPTO_KEYLEN); - err = sflc_ops_openVolume(&vol); - if (err) { - sflc_log_error("Could not open volume %lu with pwd; error %d", vol_idx, err); - return err; - } - sflc_log_debug("Successfully opened most secret volume (%lu) with password", vol_idx); - printf("Opened volume /dev/mapper/sflc_%lu_%lu\n", vol.dev_id, vol_idx); - - /* Loop backwards to open the previous ones */ - int i; - for (i = vol_idx-1; i >= 0; i--) { - size_t idx = (size_t) i; // Looping directly with idx would overflow at the "last" iteration - - /* This volume's VMB key was an output of the last openVolume() */ - memcpy(vol.vmb_key, vol.prev_vmb_key, SFLC_CRYPTO_KEYLEN); - - /* Open this volume with VMB key */ - vol.vol_idx = idx; - err = sflc_ops_openVolume(&vol); - if (err) { - sflc_log_error("Could not open volume %lu with VMB key; error %d. " - "Some volumes on the device have already been opened, it's recommended you close them", idx, err); - return err; - } - sflc_log_debug("Successfully opened volume %lu with VMB key", idx); - printf("Opened volume /dev/mapper/sflc_%lu_%lu\n", vol.dev_id, idx); - } - - return 0; -} - - /* Read the next device ID in sysfs */ static int _getNextDevId(size_t *next_dev_id) { From 8604c23193e30605965006726715d721b69d3634 Mon Sep 17 00:00:00 2001 From: = Date: Thu, 9 Nov 2023 21:06:59 +0100 Subject: [PATCH 08/25] fix: compilation errors --- shufflecake-userland/include/commands.h | 8 ++++---- shufflecake-userland/include/header.h | 2 +- shufflecake-userland/src/commands/init.c | 2 +- shufflecake-userland/src/commands/open.c | 1 + shufflecake-userland/src/operations/dmb.c | 1 + shufflecake-userland/src/operations/volume_header.c | 3 ++- 6 files changed, 10 insertions(+), 7 deletions(-) diff --git a/shufflecake-userland/include/commands.h b/shufflecake-userland/include/commands.h index a96f788..68a14ac 100644 --- a/shufflecake-userland/include/commands.h +++ b/shufflecake-userland/include/commands.h @@ -21,8 +21,8 @@ * If not, see . */ -#ifndef _COMMANDS_COMMANDS_H_ -#define _COMMANDS_COMMANDS_H_ +#ifndef _COMMANDS_H_ +#define _COMMANDS_H_ /***************************************************** @@ -33,7 +33,7 @@ #include #include -#include "header/device_master_block.h" +#include "header.h" /***************************************************** @@ -110,4 +110,4 @@ int sflc_cmd_testPwd(sflc_cmd_OpenArgs *args, sflc_DmbCell *dmb_cell); int sflc_cmd_changePwd(sflc_cmd_ChangePwdArgs *args); -#endif /* _COMMANDS_COMMANDS_H_ */ +#endif /* _COMMANDS_H_ */ diff --git a/shufflecake-userland/include/header.h b/shufflecake-userland/include/header.h index eb062e5..da9cf72 100644 --- a/shufflecake-userland/include/header.h +++ b/shufflecake-userland/include/header.h @@ -101,7 +101,7 @@ typedef struct { char prev_vmb_key[SFLC_CRYPTO_KEYLEN]; // The total number of logical slices virtually available to this volume - uint32_t nr_slices; + size_t nr_slices; } sflc_Vmb; diff --git a/shufflecake-userland/src/commands/init.c b/shufflecake-userland/src/commands/init.c index f0fe490..cd21b03 100644 --- a/shufflecake-userland/src/commands/init.c +++ b/shufflecake-userland/src/commands/init.c @@ -32,6 +32,7 @@ #include "commands.h" #include "operations.h" #include "utils/sflc.h" +#include "utils/disk.h" #include "utils/crypto.h" #include "utils/log.h" @@ -125,7 +126,6 @@ int sflc_cmd_initVolumes(sflc_cmd_InitArgs *args) /* Write the volume headers */ vmb.nr_slices = nr_slices; - size_t i; for (i = 0; i < args->nr_vols; i++) { /* This volume's prev_vmb_key */ if (i > 0) { diff --git a/shufflecake-userland/src/commands/open.c b/shufflecake-userland/src/commands/open.c index a968c1f..9046ae6 100644 --- a/shufflecake-userland/src/commands/open.c +++ b/shufflecake-userland/src/commands/open.c @@ -33,6 +33,7 @@ #include "operations.h" #include "utils/sflc.h" #include "utils/crypto.h" +#include "utils/disk.h" #include "utils/file.h" #include "utils/log.h" diff --git a/shufflecake-userland/src/operations/dmb.c b/shufflecake-userland/src/operations/dmb.c index 0209eee..d529966 100644 --- a/shufflecake-userland/src/operations/dmb.c +++ b/shufflecake-userland/src/operations/dmb.c @@ -34,6 +34,7 @@ #include "header.h" #include "operations.h" #include "utils/sflc.h" +#include "utils/disk.h" #include "utils/crypto.h" #include "utils/log.h" diff --git a/shufflecake-userland/src/operations/volume_header.c b/shufflecake-userland/src/operations/volume_header.c index c453958..1088290 100644 --- a/shufflecake-userland/src/operations/volume_header.c +++ b/shufflecake-userland/src/operations/volume_header.c @@ -34,6 +34,7 @@ #include "header.h" #include "operations.h" #include "utils/sflc.h" +#include "utils/disk.h" #include "utils/crypto.h" #include "utils/log.h" @@ -60,7 +61,7 @@ int sflc_ops_writeVolumeHeader(char *bdev_path, char *vmb_key, sflc_Vmb *vmb, si int err; // Encrypt VMB - err = sflc_vmb_seal(&vmb, vmb_key, enc_vmb); + err = sflc_vmb_seal(vmb, vmb_key, enc_vmb); if (err) { sflc_log_error("Could not seal VMB; error %d", err); goto out; From 321c0a5d1fb709333cb3a66faeb8e9b09e6dc6c8 Mon Sep 17 00:00:00 2001 From: = Date: Fri, 10 Nov 2023 11:13:40 +0100 Subject: [PATCH 09/25] fix: open and close, wrong number of volumes --- shufflecake-userland/src/commands/close.c | 2 +- shufflecake-userland/src/commands/open.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/shufflecake-userland/src/commands/close.c b/shufflecake-userland/src/commands/close.c index e6adde1..4c180f6 100644 --- a/shufflecake-userland/src/commands/close.c +++ b/shufflecake-userland/src/commands/close.c @@ -163,7 +163,7 @@ static int _closeVolumes(char **labels, size_t nr_vols) /* Eazy peazy */ int i; - for (i = nr_vols; i >= 0; i--) { + for (i = nr_vols-1; i >= 0; i--) { err = sflc_ops_closeVolume(labels[i]); if (err) { sflc_log_error("Could not close volume %s; error %d", labels[i], err); diff --git a/shufflecake-userland/src/commands/open.c b/shufflecake-userland/src/commands/open.c index 9046ae6..6c58225 100644 --- a/shufflecake-userland/src/commands/open.c +++ b/shufflecake-userland/src/commands/open.c @@ -125,7 +125,7 @@ int sflc_cmd_openVolumes(sflc_cmd_OpenArgs *args) sflc_log_debug("Next device ID is %lu", dev_id); /* Open volumes "in order" */ - for (i = 0; i < dmb_cell.vol_idx; i++) { + for (i = 0; i <= dmb_cell.vol_idx; i++) { err = sflc_ops_openVolume(args->bdev_path, dev_id, (size_t) i, &vmbs[i]); if (err) { sflc_log_error("Could not open volume %d; error %d. " From 9213c315142fe2ea6b84c2945c43929cfa24f1a3 Mon Sep 17 00:00:00 2001 From: = Date: Fri, 10 Nov 2023 11:13:56 +0100 Subject: [PATCH 10/25] Can delete Volume struct --- .gitignore | 1 + shufflecake-userland/include/operations.h | 36 ----------------------- 2 files changed, 1 insertion(+), 36 deletions(-) diff --git a/.gitignore b/.gitignore index 1b5e147..4573ea0 100644 --- a/.gitignore +++ b/.gitignore @@ -61,4 +61,5 @@ shufflecake # Temporary working directories dm-vvz/ +disks/ diff --git a/shufflecake-userland/include/operations.h b/shufflecake-userland/include/operations.h index 027c693..ecc4546 100644 --- a/shufflecake-userland/include/operations.h +++ b/shufflecake-userland/include/operations.h @@ -37,42 +37,6 @@ #include "utils/math.h" -/***************************************************** - * CONSTANTS * - *****************************************************/ - - -/***************************************************** - * STRUCTS * - *****************************************************/ - -/** - * Struct representing a volume. - * The functions in this module take a partially-filled struct in input - * and fill some more fields in it as part of their output. - */ -typedef struct { - // Keys - char vmb_key[SFLC_CRYPTO_KEYLEN]; - char volume_key[SFLC_CRYPTO_KEYLEN]; - char prev_vmb_key[SFLC_CRYPTO_KEYLEN]; - - // Number of slices - size_t nr_slices; - - // ID of the underlying block device - size_t dev_id; - // Index of this volume in the underlying block device - size_t vol_idx; - - // Underlying block device - char *bdev_path; - // Volume name under /dev/mapper/ - char label[SFLC_MAX_VOL_NAME_LEN + 1]; - -} sflc_Volume; - - /***************************************************** * INLINE FUNCTIONS * *****************************************************/ From ae6d887d4a7e96d06e1ae06bb33a8c12caa40e82 Mon Sep 17 00:00:00 2001 From: = Date: Fri, 10 Nov 2023 12:01:51 +0100 Subject: [PATCH 11/25] Fix comments --- shufflecake-userland/include/header.h | 25 ++++++++++++++--------- shufflecake-userland/include/operations.h | 2 +- shufflecake-userland/include/utils/sflc.h | 2 +- 3 files changed, 17 insertions(+), 12 deletions(-) diff --git a/shufflecake-userland/include/header.h b/shufflecake-userland/include/header.h index da9cf72..869b868 100644 --- a/shufflecake-userland/include/header.h +++ b/shufflecake-userland/include/header.h @@ -60,9 +60,9 @@ *****************************************************/ /** - * The on-disk master block of a volume contains lots of crypto stuff + * The on-disk master block of a device contains lots of crypto stuff * (a KDF salt, IVs, MACs...) used to properly hide the VMB keys. - * This struct only contains such useful info. + * This struct only contains such useful info, in the clear. */ typedef struct { // Each volume's VMB key @@ -90,8 +90,8 @@ typedef struct { /** * The on-disk master block of a volume contains crypto stuff - * (IVs, MACs...) used to properly hide the useful - * info. This struct only contains the useful info. + * (an IV) used to properly hide the useful info. This struct + * only contains the useful info, in the clear. */ typedef struct { // The key that encrypts the volume's data section @@ -108,12 +108,17 @@ typedef struct { /** * This struct represents an encrypted empty position map. - * There are as many IV blocks as there are PosMapBlock arrays. - * The m-th IV of the n-th IV block encrypts the m-th block of the n-th array. - * The PosMapBlocks in an array are contiguous, so a PosMapBlock array is just - * a char array of length multiple of 4096. - * All the arrays are full (256 PosMapBlocks, 1 MiB) except for the last one, - * which may hold fewer blocks. + * On-disk, the layout interleaves one IV block with 256 PosMap blocks (each + * encrypted by an IV in the IV block). Many such "runs" can be concatenated, + * until the position map is big enough to index the desired number of slices. + * The last "run" might be incomplete, in that it could have less than 256 + * PosMap blocks, if not all of them are needed. + * In the struct, there are as many IV blocks as there are PosMapBlock arrays + * (equal to the number of "runs"). The m-th IV of the n-th IV block encrypts + * the m-th block of the n-th array. The PosMapBlocks in an array are stored + * contiguously in RAM, so a PosMapBlock array is just a char array of length + * multiple of 4096. All the arrays are full (256 PosMapBlocks, 1 MiB) except + * for the last one, which may hold fewer blocks. */ typedef struct { // The number of PosMapBlock arrays (and of IV blocks) diff --git a/shufflecake-userland/include/operations.h b/shufflecake-userland/include/operations.h index ecc4546..8de9ab6 100644 --- a/shufflecake-userland/include/operations.h +++ b/shufflecake-userland/include/operations.h @@ -64,7 +64,7 @@ static inline uint64_t sflc_vmbPosition(size_t vol_idx, size_t nr_slices) * PUBLIC FUNCTIONS PROTOTYPES * *****************************************************/ -/* Samples VMB keys and writes the corresponding DMB to disk */ +/* Encrypts and writes the DMB to disk */ int sflc_ops_writeDmb(char *bdev_path, char **pwds, size_t *pwd_lens, sflc_Dmb *dmb); /* Reads the DMB from disk and outputs the unlocked VMB key */ int sflc_ops_readDmb(char *bdev_path, char *pwd, size_t pwd_len, sflc_DmbCell *dmb_cell); diff --git a/shufflecake-userland/include/utils/sflc.h b/shufflecake-userland/include/utils/sflc.h index e562ab4..e8135e4 100644 --- a/shufflecake-userland/include/utils/sflc.h +++ b/shufflecake-userland/include/utils/sflc.h @@ -51,7 +51,7 @@ /* Max total number of open devices at any given time */ #define SFLC_TOT_MAX_DEVICES 1024 -/* A volume name is sflc-- */ +/* A volume name is sflc__ */ #define SFLC_MAX_VOL_NAME_LEN 15 /* A slice index is represented over 32 bits */ From 8e21782d6e74bdf37fcba9d315fa379d5c1ad6f2 Mon Sep 17 00:00:00 2001 From: = Date: Fri, 10 Nov 2023 12:07:17 +0100 Subject: [PATCH 12/25] Disallow empty password --- shufflecake-userland/src/cli/init.c | 9 +++++++-- shufflecake-userland/src/cli/open.c | 5 +++++ 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/shufflecake-userland/src/cli/init.c b/shufflecake-userland/src/cli/init.c index 31d826d..302a96d 100644 --- a/shufflecake-userland/src/cli/init.c +++ b/shufflecake-userland/src/cli/init.c @@ -88,11 +88,11 @@ int sflc_cli_init(char *block_device, int num_volumes, int skip_randfill) "volume 0 (the least secret) to volume %lu (the most secret).\n\n", args.nr_vols - 1); size_t i; for (i = 0; i < args.nr_vols; i++) { - // Allocate pwd TODO: USE SECURE INPUT METHOD FOR PASSWORDS + // Allocate pwd pwds[i] = malloc(SFLC_BIGBUFSIZE); /* Read it */ - printf("Choose password for volume %lu: ", i); + printf("Choose password for volume %lu (must not be empty): ", i); err = sflc_safeReadLine(pwds[i], SFLC_BIGBUFSIZE); if (err) { sflc_log_error("Could not read password for volume %lu; error %d", i, err); @@ -101,6 +101,11 @@ int sflc_cli_init(char *block_device, int num_volumes, int skip_randfill) /* You can trust the length of strings input this way */ pwd_lens[i] = strlen(pwds[i]); + /* Check non-empty */ + if (pwd_lens[i] == 0) { + sflc_log_error("Password cannot be empty!"); + return EINVAL; + } } /* Assign them */ args.pwds = pwds; diff --git a/shufflecake-userland/src/cli/open.c b/shufflecake-userland/src/cli/open.c index bf89615..45464c9 100644 --- a/shufflecake-userland/src/cli/open.c +++ b/shufflecake-userland/src/cli/open.c @@ -63,6 +63,11 @@ int sflc_cli_open(char *block_device) } /* You can trust the length of strings input this way */ pwd_len = strlen(pwd); + /* Check non-empty */ + if (pwd_len == 0) { + sflc_log_error("Password cannot be empty!"); + return EINVAL; + } /* Assign them */ args.pwd = pwd; args.pwd_len = pwd_len; From 6d2cf83627a9509f05b63e269771fcd0410bb69c Mon Sep 17 00:00:00 2001 From: = Date: Fri, 10 Nov 2023 17:20:32 +0100 Subject: [PATCH 13/25] Define isPsiTaken --- dm-sflc/device/device.h | 3 +++ dm-sflc/device/rmap.c | 13 +++++++++---- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/dm-sflc/device/device.h b/dm-sflc/device/device.h index cc8b0a0..8919ea6 100644 --- a/dm-sflc/device/device.h +++ b/dm-sflc/device/device.h @@ -198,6 +198,9 @@ int sflc_dev_rwSector(sflc_Device * dev, struct page * page, sector_t sector, in /* The caller needs to hold slices_lock to call these functions */ +/* Checks if PSI is free */ +bool sflc_dev_isPsiFree(sflc_Device *dev, u32 psi); + /* Sets the PSI as owned by the given volume (also decreases free_slices). * Returns < 0 if already taken. */ int sflc_dev_markPsiTaken(sflc_Device * dev, u32 psi, u8 vol_idx); diff --git a/dm-sflc/device/rmap.c b/dm-sflc/device/rmap.c index e309211..c3ddfe5 100644 --- a/dm-sflc/device/rmap.c +++ b/dm-sflc/device/rmap.c @@ -41,12 +41,18 @@ * PUBLIC FUNCTIONS DEFINITIONS * *****************************************************/ +/* Checks if PSI is free */ +bool sflc_dev_isPsiFree(sflc_Device *dev, u32 psi) +{ + return ((psi < dev->tot_slices) && + (dev->rmap[psi] == SFLC_DEV_RMAP_INVALID_VOL)); +} + + /* Sets the PSI as owned by the given volume (also decreases free_slices). * Returns < 0 if already taken. */ int sflc_dev_markPsiTaken(sflc_Device * dev, u32 psi, u8 vol_idx) { - u8 prev_vol_idx; - /* Bounds check */ if (psi >= dev->tot_slices) { pr_err("Requested to set ownership for invalid PSI\n"); @@ -54,8 +60,7 @@ int sflc_dev_markPsiTaken(sflc_Device * dev, u32 psi, u8 vol_idx) } /* Check that it's free */ - prev_vol_idx = dev->rmap[psi]; - if (prev_vol_idx != SFLC_DEV_RMAP_INVALID_VOL) { + if (dev->rmap[psi] != SFLC_DEV_RMAP_INVALID_VOL) { pr_err("Requested to set ownership for already-owned PSI\n"); return -EINVAL; } From fc37a9fca55990e5483486b11747d02ee12e0493 Mon Sep 17 00:00:00 2001 From: = Date: Fri, 10 Nov 2023 17:40:46 +0100 Subject: [PATCH 14/25] Reassign evicted LSI --- dm-sflc/volume/fmap.c | 31 +++++++++++++++++++++++++------ 1 file changed, 25 insertions(+), 6 deletions(-) diff --git a/dm-sflc/volume/fmap.c b/dm-sflc/volume/fmap.c index 980173a..0c9a307 100644 --- a/dm-sflc/volume/fmap.c +++ b/dm-sflc/volume/fmap.c @@ -178,14 +178,33 @@ int sflc_vol_loadFmap(sflc_Volume * vol) __be32 * be_psi = (void *) (data_ptr + (k * sizeof(__be32))); u32 psi = be32_to_cpu(*be_psi); - /* Add mapping to the volume's fmap */ - vol->fmap[lsi] = psi; - /* Also add it to the device's rmap and to the count, if LSI is actually mapped */ - if (psi != SFLC_VOL_FMAP_INVALID_PSI) { - sflc_dev_markPsiTaken(dev, psi, vol->vol_idx); - vol->mapped_slices += 1; + /* If unassigned, just move on */ + if (psi == SFLC_VOL_FMAP_INVALID_PSI) { + vol->fmap[lsi] = psi; + /* Next iteration */ + lsi += 1; + continue; } + /* If already assigned to lower-order volume, sample a new one */ + if (!sflc_dev_isPsiFree(dev, psi)) { + pr_warn("Corruption of volume %d: LSI %lu was evicted", + vol->vol_idx, lsi); + s32 new_psi = sflc_dev_getNextRandomFreePsi(dev); + if (new_psi < 0) { + err = psi; + pr_err("Could not sample new PSI for evicted LSI; " + "error %lu", -err); + goto out; + } + psi = (u32) new_psi; + } + + /* Assign */ + vol->fmap[lsi] = psi; + sflc_dev_markPsiTaken(dev, psi, vol->vol_idx); + vol->mapped_slices += 1; + /* Next iteration */ lsi += 1; } From fa90fe05900850296ed5ebea3a7ca11d2287d55e Mon Sep 17 00:00:00 2001 From: = Date: Sat, 11 Nov 2023 19:13:41 +0100 Subject: [PATCH 15/25] Adapt printf type --- dm-sflc/volume/fmap.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dm-sflc/volume/fmap.c b/dm-sflc/volume/fmap.c index 0c9a307..256a8ea 100644 --- a/dm-sflc/volume/fmap.c +++ b/dm-sflc/volume/fmap.c @@ -188,13 +188,13 @@ int sflc_vol_loadFmap(sflc_Volume * vol) /* If already assigned to lower-order volume, sample a new one */ if (!sflc_dev_isPsiFree(dev, psi)) { - pr_warn("Corruption of volume %d: LSI %lu was evicted", + pr_warn("Corruption of volume %d: LSI %u was evicted", vol->vol_idx, lsi); s32 new_psi = sflc_dev_getNextRandomFreePsi(dev); if (new_psi < 0) { err = psi; pr_err("Could not sample new PSI for evicted LSI; " - "error %lu", -err); + "error %d", -err); goto out; } psi = (u32) new_psi; From 1aa0af9b402646236ebc17038625987095a8643b Mon Sep 17 00:00:00 2001 From: = Date: Sat, 11 Nov 2023 19:14:34 +0100 Subject: [PATCH 16/25] fix: wrong failure on last slice allocation --- dm-sflc/device/rmap.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/dm-sflc/device/rmap.c b/dm-sflc/device/rmap.c index c3ddfe5..ae7d104 100644 --- a/dm-sflc/device/rmap.c +++ b/dm-sflc/device/rmap.c @@ -87,13 +87,14 @@ s32 sflc_dev_getNextRandomFreePsi(sflc_Device * dev) /* Repeatedly advance the counter in the shuffled array * until you find a free one */ do { - psi = dev->shuffled_psi_array[dev->shuffled_psi_ctr]; - dev->shuffled_psi_ctr += 1; - if (dev->shuffled_psi_ctr >= dev->tot_slices) { - pr_err("Double catastrophe! No free PSIs on the device, and didn't catch it before!\n"); + pr_err("Double catastrophe! No free PSIs on the device, " + "and didn't catch it before!\n"); return -ENOSPC; } + + psi = dev->shuffled_psi_array[dev->shuffled_psi_ctr]; + dev->shuffled_psi_ctr += 1; } while (dev->rmap[psi] != SFLC_DEV_RMAP_INVALID_VOL); return psi; From e6571ecd479cfe2a25563a1aa826f25d53ad1b60 Mon Sep 17 00:00:00 2001 From: = Date: Sat, 11 Nov 2023 19:46:02 +0100 Subject: [PATCH 17/25] fix: deallocate write_work on bio failure --- dm-sflc/volume/write.c | 1 + 1 file changed, 1 insertion(+) diff --git a/dm-sflc/volume/write.c b/dm-sflc/volume/write.c index 007783a..d6903d9 100644 --- a/dm-sflc/volume/write.c +++ b/dm-sflc/volume/write.c @@ -119,6 +119,7 @@ err_alloc_phys_bio: orig_bio->bi_status = BLK_STS_IOERR; bio_endio(orig_bio); + mempool_free(write_work, sflc_pools_writeWorkPool); return; } From f7195cf799bb0550b139f4ef15af899a28fc4021 Mon Sep 17 00:00:00 2001 From: = Date: Sat, 11 Nov 2023 20:06:09 +0100 Subject: [PATCH 18/25] fix: nasty (and stupid) bug in fisheryates --- dm-sflc/utils/vector.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/dm-sflc/utils/vector.c b/dm-sflc/utils/vector.c index c18691b..5ad0939 100644 --- a/dm-sflc/utils/vector.c +++ b/dm-sflc/utils/vector.c @@ -51,10 +51,10 @@ int sflc_vec_u32shuffle(u32 *v, u32 len) return j; } - /* Swap v[i] and v[j] (without third variable 'cuz we're cool) */ - v[i] ^= v[j]; // v[i] <- a XOR b - v[j] ^= v[i]; // v[j] <- b XOR (a XOR b) = a - v[i] ^= v[j]; // v[i] <- (a XOR b) XOR a = b + /* Swap v[i] and v[j] */ + u32 tmp = v[i]; + v[i] = v[j]; + v[j] = tmp; } return 0; From bed617283c984c5a51f8c7d32b98c44a5a6e2ae1 Mon Sep 17 00:00:00 2001 From: = Date: Sat, 11 Nov 2023 23:36:39 +0100 Subject: [PATCH 19/25] Minor fix --- dm-sflc/volume/fmap.c | 4 ++-- shufflecake-userland/src/header/device_master_block.c | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/dm-sflc/volume/fmap.c b/dm-sflc/volume/fmap.c index 256a8ea..f3ec90c 100644 --- a/dm-sflc/volume/fmap.c +++ b/dm-sflc/volume/fmap.c @@ -188,13 +188,13 @@ int sflc_vol_loadFmap(sflc_Volume * vol) /* If already assigned to lower-order volume, sample a new one */ if (!sflc_dev_isPsiFree(dev, psi)) { - pr_warn("Corruption of volume %d: LSI %u was evicted", + pr_warn("Corruption of volume %d: LSI %u was evicted\n", vol->vol_idx, lsi); s32 new_psi = sflc_dev_getNextRandomFreePsi(dev); if (new_psi < 0) { err = psi; pr_err("Could not sample new PSI for evicted LSI; " - "error %d", -err); + "error %d\n", err); goto out; } psi = (u32) new_psi; diff --git a/shufflecake-userland/src/header/device_master_block.c b/shufflecake-userland/src/header/device_master_block.c index ba5ec78..cdd1f8c 100644 --- a/shufflecake-userland/src/header/device_master_block.c +++ b/shufflecake-userland/src/header/device_master_block.c @@ -195,7 +195,7 @@ int sflc_dmb_setCell(char *disk_block, sflc_DmbCell *dmb_cell, char *pwd, size_t sflc_log_error("Could not re-encrypt VMB key number %lu; error %d", dmb_cell->vol_idx, err); return err; } - sflc_log_debug("Successfully re-encrypted VMB key number %lu", vol_idx); + sflc_log_debug("Successfully re-encrypted VMB key number %lu", dmb_cell->vol_idx); return 0; } From e58969a3a7f1fe423317b407213dcdd183cc25f6 Mon Sep 17 00:00:00 2001 From: = Date: Sat, 18 Nov 2023 19:05:58 +0100 Subject: [PATCH 20/25] fix: stupid bug --- dm-sflc/volume/fmap.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dm-sflc/volume/fmap.c b/dm-sflc/volume/fmap.c index f3ec90c..82d4ac5 100644 --- a/dm-sflc/volume/fmap.c +++ b/dm-sflc/volume/fmap.c @@ -192,7 +192,7 @@ int sflc_vol_loadFmap(sflc_Volume * vol) vol->vol_idx, lsi); s32 new_psi = sflc_dev_getNextRandomFreePsi(dev); if (new_psi < 0) { - err = psi; + err = new_psi; pr_err("Could not sample new PSI for evicted LSI; " "error %d\n", err); goto out; From a675c2633df0bad5205946513a4c5151bbdeccb4 Mon Sep 17 00:00:00 2001 From: = Date: Sat, 18 Nov 2023 21:08:42 +0100 Subject: [PATCH 21/25] Define rwPsi --- dm-sflc/device/device.c | 13 +++++++++++++ dm-sflc/device/device.h | 14 ++++++++++++++ dm-sflc/device/iv.c | 9 ++------- dm-sflc/device/rawio.c | 25 +++++++++++++++++++++++++ 4 files changed, 54 insertions(+), 7 deletions(-) diff --git a/dm-sflc/device/device.c b/dm-sflc/device/device.c index 4356626..af374da 100644 --- a/dm-sflc/device/device.c +++ b/dm-sflc/device/device.c @@ -208,12 +208,22 @@ sflc_Device * sflc_dev_create(struct dm_target * ti, char * real_dev_path, u32 t goto err_sysfs; } + /* Create dm_io_client */ + dev->dmio_client = dm_io_client_create(); + if (IS_ERR(dev->dmio_client)) { + err = PTR_ERR(dev->dmio_client); + pr_err("Could not create dm_io_client; error %d\n", err); + goto err_dmio; + } + /* Add to device list */ list_add_tail(&dev->list_node, &sflc_dev_list); return dev; +err_dmio: + sflc_sysfs_putDev(dev->kobj); err_sysfs: kfree(dev->iv_cache); err_alloc_iv_cache: @@ -266,6 +276,9 @@ bool sflc_dev_destroy(struct dm_target * ti, sflc_Device * dev) /* List */ list_del(&dev->list_node); + /* dm_io */ + dm_io_client_destroy(dev->dmio_client); + /* Sysfs */ sflc_sysfs_putDev(dev->kobj); diff --git a/dm-sflc/device/device.h b/dm-sflc/device/device.h index 8919ea6..5699bc3 100644 --- a/dm-sflc/device/device.h +++ b/dm-sflc/device/device.h @@ -49,6 +49,7 @@ typedef struct sflc_dev_iv_cache_entry_s sflc_dev_IvCacheEntry; *****************************************************/ #include +#include #include "volume/volume.h" #include "crypto/symkey/symkey.h" @@ -138,11 +139,21 @@ struct sflc_device_s /* Sysfs stuff */ sflc_sysfs_Device * kobj; + /* DM-io */ + struct dm_io_client *dmio_client; + /* We keep all devices in a list */ struct list_head list_node; }; +/***************************************************** + * MACROS * + *****************************************************/ + +#define sflc_dev_psiToIvBlock(dev, psi) (dev->dev_header_size + (sector_t)(psi) * SFLC_DEV_PHYS_SLICE_SIZE) + + /***************************************************** * PUBLIC VARIABLES DECLARATIONS * *****************************************************/ @@ -195,6 +206,9 @@ bool sflc_dev_removeVolume(sflc_Device * dev, int vol_idx); to/from the provided page */ int sflc_dev_rwSector(sflc_Device * dev, struct page * page, sector_t sector, int rw); +/* Synchronously read/write entire PSI (257 blocks) to/from VMA */ +int sflc_dev_rwPsi(sflc_Device *dev, void *vma, u32 psi, int rw); + /* The caller needs to hold slices_lock to call these functions */ diff --git a/dm-sflc/device/iv.c b/dm-sflc/device/iv.c index ad1b3b5..48acdfa 100644 --- a/dm-sflc/device/iv.c +++ b/dm-sflc/device/iv.c @@ -36,11 +36,6 @@ /* Capacity of IV cache */ #define SFLC_DEV_IV_CACHE_CAPACITY 1024 -/***************************************************** - * MACROS * - *****************************************************/ - -#define sflc_dev_psiToIvBlockSector(dev, psi) (dev->dev_header_size + (sector_t)(psi) * SFLC_DEV_PHYS_SLICE_SIZE) /***************************************************** * PRIVATE FUNCTIONS PROTOTYPES * @@ -276,7 +271,7 @@ static sflc_dev_IvCacheEntry * sflc_dev_newIvCacheEntry(sflc_Device * dev, u32 p /* Read from disk */ /* Position on disk */ - sector = sflc_dev_psiToIvBlockSector(dev, psi); + sector = sflc_dev_psiToIvBlock(dev, psi); /* Read */ err = sflc_dev_rwSector(dev, entry->iv_page, sector, READ); @@ -305,7 +300,7 @@ static int sflc_dev_destroyIvCacheEntry(sflc_Device * dev, sflc_dev_IvCacheEntry /* Write to disk */ /* Position on disk */ - sector = sflc_dev_psiToIvBlockSector(dev, entry->psi); + sector = sflc_dev_psiToIvBlock(dev, entry->psi); /* Write (if necessary) */ if (entry->dirtyness) { diff --git a/dm-sflc/device/rawio.c b/dm-sflc/device/rawio.c index 91cc682..fe7d3a4 100644 --- a/dm-sflc/device/rawio.c +++ b/dm-sflc/device/rawio.c @@ -30,6 +30,7 @@ #include "log/log.h" #include +#include #include /***************************************************** @@ -81,6 +82,30 @@ out: return err; } + +/* Synchronously read/write entire PSI (257 blocks) to/from VMA */ +int sflc_dev_rwPsi(sflc_Device *dev, void *vma, u32 psi, int rw) +{ + struct dm_io_request io_req = { + .bi_opf = ((rw == READ) ? REQ_OP_READ : REQ_OP_WRITE) | REQ_SYNC, + + .mem.type = DM_IO_VMA, + .mem.offset = 0, + .mem.ptr.vma = vma, + + .notify.fn = NULL, + + .client = dev->dmio_client + }; + struct dm_io_region io_reg = { + .bdev = dev->bdev->bdev, + .sector = sflc_dev_psiToIvBlock(dev, psi) * SFLC_DEV_SECTOR_SCALE, + .count = SFLC_DEV_PHYS_SLICE_SIZE * SFLC_DEV_SECTOR_SCALE + }; + + return &dm_io(&io_req, 1, &io_reg, NULL); +} + /***************************************************** * PRIVATE FUNCTIONS DEFINITIONS * *****************************************************/ From 6e9114a0e444dc769dd3918c45e6f12763b10807 Mon Sep 17 00:00:00 2001 From: = Date: Sun, 19 Nov 2023 17:30:14 +0100 Subject: [PATCH 22/25] Add reassign LSI to copy slice contents --- dm-sflc/device/rawio.c | 2 +- dm-sflc/volume/fmap.c | 80 +++++++++++++++++++++++++++++++++++------- 2 files changed, 68 insertions(+), 14 deletions(-) diff --git a/dm-sflc/device/rawio.c b/dm-sflc/device/rawio.c index fe7d3a4..20e3bef 100644 --- a/dm-sflc/device/rawio.c +++ b/dm-sflc/device/rawio.c @@ -103,7 +103,7 @@ int sflc_dev_rwPsi(sflc_Device *dev, void *vma, u32 psi, int rw) .count = SFLC_DEV_PHYS_SLICE_SIZE * SFLC_DEV_SECTOR_SCALE }; - return &dm_io(&io_req, 1, &io_reg, NULL); + return dm_io(&io_req, 1, &io_reg, NULL); } /***************************************************** diff --git a/dm-sflc/volume/fmap.c b/dm-sflc/volume/fmap.c index 82d4ac5..40a6aca 100644 --- a/dm-sflc/volume/fmap.c +++ b/dm-sflc/volume/fmap.c @@ -43,6 +43,7 @@ *****************************************************/ static s32 sflc_vol_mapSlice(sflc_Volume * vol, u32 lsi, int op); +static int sflc_vol_reassignLsi(sflc_Volume *vol, u32 lsi, u32 old_psi); /***************************************************** * PUBLIC FUNCTIONS DEFINITIONS * @@ -190,23 +191,24 @@ int sflc_vol_loadFmap(sflc_Volume * vol) if (!sflc_dev_isPsiFree(dev, psi)) { pr_warn("Corruption of volume %d: LSI %u was evicted\n", vol->vol_idx, lsi); - s32 new_psi = sflc_dev_getNextRandomFreePsi(dev); - if (new_psi < 0) { - err = new_psi; - pr_err("Could not sample new PSI for evicted LSI; " + err = sflc_vol_reassignLsi(vol, lsi, psi); + if (err) { + pr_err("Could not reassign evicted LSI; " "error %d\n", err); goto out; } - psi = (u32) new_psi; + + /* Next iteration */ + lsi += 1; + } else { + /* Just assign */ + vol->fmap[lsi] = psi; + sflc_dev_markPsiTaken(dev, psi, vol->vol_idx); + vol->mapped_slices += 1; + + /* Next iteration */ + lsi += 1; } - - /* Assign */ - vol->fmap[lsi] = psi; - sflc_dev_markPsiTaken(dev, psi, vol->vol_idx); - vol->mapped_slices += 1; - - /* Next iteration */ - lsi += 1; } } } @@ -393,3 +395,55 @@ static s32 sflc_vol_mapSlice(sflc_Volume * vol, u32 lsi, int op) return psi; } + + +static int sflc_vol_reassignLsi(sflc_Volume *vol, u32 lsi, u32 old_psi) +{ + sflc_Device *dev = vol->dev; + s32 new_psi; + void *vma; + int err; + + /* Allocate array holding the raw PSI */ + vma = vmalloc(SFLC_DEV_PHYS_SLICE_SIZE * SFLC_DEV_SECTOR_SIZE); + if (!vma) { + pr_err("Could not allocate VMA for raw PSI"); + return -ENOMEM; + } + + /* Sample new PSI */ + new_psi = sflc_dev_getNextRandomFreePsi(dev); + if (new_psi < 0) { + err = new_psi; + pr_err("Could not sample new PSI for evicted LSI; " + "error %d\n", err); + goto out; + } + + /* Read PSI contents */ + err = sflc_dev_rwPsi(dev, vma, old_psi, READ); + if (err) { + pr_err("Could not read PSI; error %d", err); + goto out; + } + + /* Write them to new location */ + err = sflc_dev_rwPsi(dev, vma, new_psi, WRITE); + if (err) { + pr_err("Could not write PSI; error %d", err); + goto out; + } + + /* Assign */ + vol->fmap[lsi] = new_psi; + sflc_dev_markPsiTaken(dev, new_psi, vol->vol_idx); + vol->mapped_slices += 1; + + /* No prob */ + err = 0; + +out: + vfree(vma); + return err; +} + From 2713b58327209611e0c27d5333d05bc58116c290 Mon Sep 17 00:00:00 2001 From: = Date: Sun, 19 Nov 2023 18:30:15 +0100 Subject: [PATCH 23/25] Remove some prints --- dm-sflc/volume/fmap.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/dm-sflc/volume/fmap.c b/dm-sflc/volume/fmap.c index 40a6aca..336357f 100644 --- a/dm-sflc/volume/fmap.c +++ b/dm-sflc/volume/fmap.c @@ -29,6 +29,8 @@ * INCLUDE SECTION * *****************************************************/ +#include + #include "volume.h" #include "crypto/rand/rand.h" #include "utils/pools.h" @@ -189,8 +191,8 @@ int sflc_vol_loadFmap(sflc_Volume * vol) /* If already assigned to lower-order volume, sample a new one */ if (!sflc_dev_isPsiFree(dev, psi)) { - pr_warn("Corruption of volume %d: LSI %u was evicted\n", - vol->vol_idx, lsi); + pr_warn("Corruption of volume %d: LSI %u was evicted from PSI %u\n", + vol->vol_idx, lsi, psi); err = sflc_vol_reassignLsi(vol, lsi, psi); if (err) { pr_err("Could not reassign evicted LSI; " @@ -439,6 +441,9 @@ static int sflc_vol_reassignLsi(sflc_Volume *vol, u32 lsi, u32 old_psi) sflc_dev_markPsiTaken(dev, new_psi, vol->vol_idx); vol->mapped_slices += 1; + pr_notice("Volume %d reassign LSI %u -> PSI %u", + vol->vol_idx, lsi, new_psi); + /* No prob */ err = 0; From e579d8ada5c94abf045c49a169c5bc8474785122 Mon Sep 17 00:00:00 2001 From: = Date: Tue, 21 Nov 2023 11:52:10 +0100 Subject: [PATCH 24/25] Comment out raw copy of slice --- dm-sflc/volume/fmap.c | 42 +++++++++++++++++++++--------------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/dm-sflc/volume/fmap.c b/dm-sflc/volume/fmap.c index 336357f..f7af843 100644 --- a/dm-sflc/volume/fmap.c +++ b/dm-sflc/volume/fmap.c @@ -403,15 +403,15 @@ static int sflc_vol_reassignLsi(sflc_Volume *vol, u32 lsi, u32 old_psi) { sflc_Device *dev = vol->dev; s32 new_psi; - void *vma; +// void *vma; int err; - /* Allocate array holding the raw PSI */ - vma = vmalloc(SFLC_DEV_PHYS_SLICE_SIZE * SFLC_DEV_SECTOR_SIZE); - if (!vma) { - pr_err("Could not allocate VMA for raw PSI"); - return -ENOMEM; - } +// /* Allocate array holding the raw PSI */ +// vma = vmalloc(SFLC_DEV_PHYS_SLICE_SIZE * SFLC_DEV_SECTOR_SIZE); +// if (!vma) { +// pr_err("Could not allocate VMA for raw PSI"); +// return -ENOMEM; +// } /* Sample new PSI */ new_psi = sflc_dev_getNextRandomFreePsi(dev); @@ -422,19 +422,19 @@ static int sflc_vol_reassignLsi(sflc_Volume *vol, u32 lsi, u32 old_psi) goto out; } - /* Read PSI contents */ - err = sflc_dev_rwPsi(dev, vma, old_psi, READ); - if (err) { - pr_err("Could not read PSI; error %d", err); - goto out; - } - - /* Write them to new location */ - err = sflc_dev_rwPsi(dev, vma, new_psi, WRITE); - if (err) { - pr_err("Could not write PSI; error %d", err); - goto out; - } +// /* Read PSI contents */ +// err = sflc_dev_rwPsi(dev, vma, old_psi, READ); +// if (err) { +// pr_err("Could not read PSI; error %d", err); +// goto out; +// } +// +// /* Write them to new location */ +// err = sflc_dev_rwPsi(dev, vma, new_psi, WRITE); +// if (err) { +// pr_err("Could not write PSI; error %d", err); +// goto out; +// } /* Assign */ vol->fmap[lsi] = new_psi; @@ -448,7 +448,7 @@ static int sflc_vol_reassignLsi(sflc_Volume *vol, u32 lsi, u32 old_psi) err = 0; out: - vfree(vma); +// vfree(vma); return err; } From 83cabae3c63a585a0cb698fc74930beff8b485ea Mon Sep 17 00:00:00 2001 From: Tommaso Gagliardoni Date: Tue, 28 Nov 2023 17:10:16 +0100 Subject: [PATCH 25/25] chore:Prepare for v0.4.2 release --- CHANGELOG.md | 14 +++ README.md | 33 +++--- dm-sflc/sflc_constants.h | 2 +- doc/headers.png | Bin 140980 -> 138993 bytes doc/headers.svg | 103 +++++++++--------- .../images/badges/badge_version_0.4.1.png | Bin 2175 -> 0 bytes .../images/badges/badge_version_0.4.2.png | Bin 0 -> 2332 bytes resources/images/badges/badges.svg | 10 +- 8 files changed, 92 insertions(+), 70 deletions(-) delete mode 100644 resources/images/badges/badge_version_0.4.1.png create mode 100644 resources/images/badges/badge_version_0.4.2.png diff --git a/CHANGELOG.md b/CHANGELOG.md index 5d1a7ff..14f447e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,20 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Global constants fully shared among components through `sflc_constants.h`. +## [0.4.2] - 2023-11-28 + +### Fixed + + - Fixed persistent slice allocation ambiguity after a volume corruption by allocating fresh slices for the corrupted volume. This is done in order to help external recovery tools (e.g. RAID). + - Fixed a bug that made the last PSI in the shuffled slice array unassignable. + - Fixed a missed deallocation problem which caused a kernel bug on volume close after some I/O errors. + - Fixed a buggy swap procedure which made the permutation of PSIs not completely random. + +### Changed + + - All schematics and references now consistently map array indices of size N from 0 to N-1 rather than from 1 to N. + + ## [0.4.1] - 2023-07-30 ### Fixed diff --git a/README.md b/README.md index d6feb84..0d2f98b 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ [![Status](resources/images/badges/badge_status_active.png)](https://codeberg.org/shufflecake/shufflecake-c)  -[![Version](resources/images/badges/badge_version_0.4.1.png)](https://codeberg.org/shufflecake/shufflecake-c/releases/tag/v0.4.1)  +[![Version](resources/images/badges/badge_version_0.4.2.png)](https://codeberg.org/shufflecake/shufflecake-c/releases/tag/v0.4.2)  [![License](resources/images/badges/badge_license_gplv2plus.png)](https://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html)  -[![Docs whitepaper](resources/images/badges/badge_docs_whitepaper.png)](https://infoscience.epfl.ch/record/297353)  +[![Docs whitepaper](resources/images/badges/badge_docs_whitepaper.png)](https://eprint.iacr.org/2023/1529)  [![Website](resources/images/badges/badge_web_shufflecakedotnet.png)](https://shufflecake.net/)  [![Issue tracker](resources/images/badges/badge_community_issuetracker.png)](https://codeberg.org/shufflecake/shufflecake-c/issues)  [![Mastodon](resources/images/badges/badge_community_mastodon.png)](https://fosstodon.org/@shufflecake)  @@ -11,7 +11,7 @@ -# Shufflecake - Full C Implementation - v0.4.1 +# Shufflecake - Full C Implementation - v0.4.2 _Shufflecake_ is a plausible deniability (hidden storage) layer for Linux. You can consider Shufflecake a spiritual successor of tools like TrueCrypt and VeraCrypt, but vastly improved, both in terms of security and functionality. Official website: . @@ -47,9 +47,9 @@ __WARNING__: Shufflecake is still experimental software, please do not rely on i In the context of Shufflecake, a _device_, or _cake_, is the underlying raw block device (e.g., a disk) that is formatted to contain hidden data, while a _volume_, or _layer_, is the logical, encrypted and hidden "partition" within a device. The device can be a whole USB stick (or disk), a physical or logical partition, a file-backed loop device, etc. (you likely find it under `/dev`). The three operating principles of Shufflecake are: -- 1 device = multiple volumes -- 1 volume = 1 password = 1 "secrecy level" -- unlocking a volume also unlocks all those of lesser secrecy level +- 1 device = multiple volumes; +- 1 volume = 1 password = 1 "secrecy level"; +- unlocking a volume also unlocks all those of lesser secrecy level. Volumes are password-protected, and embedded in the underlying device as data _slices_ which are indistinguishable from random noise without the proper password. Headers are also indistinguishable from random when not decrypted. A Shufflecake-initialized device does not have cleartext headers, and is indistinguishable from random noise when not decrypted. @@ -59,7 +59,7 @@ Up to 15 _ordered_ Shufflecake volumes can be created on a single device, with t Opened volumes appear as block devices of the form `sflc_N_M` in `/dev/mapper`. It is up to the user to format them with an appropriate filesystem and mounting them before use. It is recommended to always unlock the most sensitive volume for daily use ("home alone" scenario), even if that volume is not being used or even mounted. Only open a subset of volumes (with a "decoy password") if under coercion. This is due to the high possibility of corrupting hidden volumes otherwise. -For security and consistency reasons, you cannot init/open/close nested volumes within the same device one at a time; the tool only allows to perform these operations on a _chain_ of volumes in a device. +For security and consistency reasons, you cannot init/open/close nested volumes within the same device one at a time; this tool only allows to perform these operations on a _chain_ of volumes in a device. @@ -67,7 +67,7 @@ For security and consistency reasons, you cannot init/open/close nested volumes ## Installation -This implementation of Shufflecake consists of two components: a module for the Linux kernel (`dm-sflc`), and a `shufflecake` userland tool. Both are necessary in order to use Shufflecake. They have been tested on Linux kernel versions 6.1 (LTS), 6.2 and 6.3. The following instructions are given for Debian/Ubuntu and similar derivatives. +This implementation of Shufflecake consists of two components: a module for the Linux kernel (`dm-sflc`), and a `shufflecake` userland tool. Both are necessary in order to use Shufflecake. They have been tested on Linux kernel versions 6.1 (LTS), up to 6.5. The following instructions are given for Debian/Ubuntu and similar derivatives. First of all, you need the kernel headers, device-mapper userspace library, and libgcrypt to compile the source. Use: @@ -80,6 +80,7 @@ Important: you have to make sure to install an up-to-date version of `libgcrypt` ``` libgcrypt-config --version ``` +Also, make sure that the Kconfig options `CONFIG_CRYPTO_DRBG_HASH` (and possibly `CONFIG_CRYPTO_DRBG_CTR`) are enabled, as they are not default options in the kernel's defconfig, although they are enabled by default on some distributions such as Debian and Ubuntu. After that, just run `make`. All the compilation artifacts will go in the respective subdirectories, and a copy of the kernel module `dm_sflc.ko` and the userland tool `shufflecake` will appear in the root directory. You can clean (delete) all these artifacts with `make clean`. @@ -93,7 +94,7 @@ Limited tests are provided to check pre-install consistency, for now they only t ### Benchmarks -A complete benchmark suite is provided in the `benchmark-suite` directory, to test the performance of Shufflecake on a given machine and against other tools such as LUKS and VeraCrypt. Please refer to the documentation in that directory for instructions on how to run the benchmark scripts. +A complete benchmark suite is provided in the `benchmark-suite` directory, to test the performance of Shufflecake on a given system and against other tools such as LUKS and VeraCrypt. Please refer to the documentation in that directory for instructions on how to run the benchmark scripts. @@ -124,13 +125,13 @@ You can only do this if no Shufflecake volume is open. sudo shufflecake init ``` -This command creates __N__ volume headers on the given device, each sealed by the respective provided password, by properly formatting and encrypting the first __N__ volume header slots. The number of desired volumes __N__ and the related __N__ passwords will be interactively asked at prompt. Alternatively, you can pass __N__ by command line with: +This command creates __L__ volume headers on the given device, each sealed by the respective provided password, by properly formatting and encrypting the first __L__ volume header slots. The number of desired volumes __L__ and the related __L__ passwords will be interactively asked at prompt. Alternatively, you can pass __L__ by command line with: ``` -sudo shufflecake --num-volumes=N init +sudo shufflecake --num-volumes=L init ``` -WARNING: If the device is not empty, you will lose all data stored therein. Also, adding additional volumes after initialisation is not yet supported. +__WARNING__: If the device is not empty, you will lose all data stored therein. Also, adding additional volumes after initialisation is not yet supported. This command does not open the volumes (it does not create the virtual devices under `/dev/mapper/`), it only overwrites the device with randomness and formats the encrypted headers. @@ -230,6 +231,11 @@ Both methods works with the `init` action, and we do not have current plans to c Please see the file `CHANGELOG.md` for a detailed history of changes. +### [0.4.2] - 2023-11-28 + + - Fixed persistent slice allocation ambiguity after a volume corruption by allocating fresh slices for the corrupted volume. This is done in order to help external recovery tools (e.g. RAID). + - Various bugfixes. + ### [0.4.1] - 2023-07-30 - Fixed and improved benchmark scripts. @@ -255,7 +261,8 @@ Bugs and other issues are tracked at E$w)%UswjjqQ)J8DAz7ttH<6i)Pf5j)@2fD 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 q%2Q?v;q$`o3Li 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 Q0Q#QTdugG3fzKZQ2Llr~&Hw-a literal 140980 zcmd43hg;758#jI-GZb1PNk$6|X)4klvrJaVfQ7G+cBu!0eDAE$z(a_#1+EQt+ z-|O?`{yl%ea~zN3xbNFdU0t8|IM3HQFCWEAQoDB0?;w##yJV!rl}RMBMG|Qv{kARm z6Xo{DwD`|<8)+>&66w%K;-3vx^$sHV!~OOWn)WKz*X?iV-!vxOx^?T+4J&gyLwy_L zQ`R?4p8XQ0Cy@@5WW+D1Iz^3lo2XK^E{m*;c}njIGuS|OK#43onKDe;U<0{k=G~JK zZF2H{m3D;cVCWL=Xw){>lM&Jkm9QAyQTR_M)YVW0k*ACKyW*=J)pEm~ty z=UnEBO@1D1nRcYzMcQ!Wzh6r%Bcr1ttt85CNtYkw(L#02z`0UMMc`V5sYV-y_Z_aD4HTefVG*gIA+*qo+;1&<65 zKcz$e{{8z&*8kQb?xV)IOz}|N3&W}YGR?PE3?DyzvP-|3b6w%jukHi)wo=?rNx6|X z>qW`Q$EOh{B_;K#ws!ov;VCwcm8q>Xr*-}0B2O{#@~W}v6*_U<-*sTi;eihI3~iqu zHIW0o9_tcUt~^z>9w_%8?kN%~USD%b*US=Y$tx)lJud%PQJ8jmLz-TR$gl2#6YN4B zYr@*v+C3`bj4#xmk_3bUv@I@7lX} z@A^i*B}we9seQtuw(r059mZD{GU&4Ohjq*DgDlU?o`y$9A7WEWC1Ylex9Fr4>l=Gr zQr=x~>k(V6fnERS?Pc`NB*l2iU1u!X6rVaDJa{l&^YU&I4%B814UI5Xm6w%_^f+as@>e&Y`=fp zeDv6{@83T?co-O1f#t}u>^$3)q9Uavdg|0}6ob$J4C5ndo1#TY2ij(Im{5`mF>rV}2rYAab<&@4^v~gOrXK()c^=o~@qKCewre=)Y z(AR~b7ao1Ter51mR|GJ4i-aV
    (zG(5~wKtT!$35iSANK=1xF^U?%N~U(~{lq9gKf)adA2Q?%R;6mKO1v|5sQ3J;REC?^U5E>Kht} zlYHfkY4E_W0{n=J^74M^>B@<+?Z=Pw_xDrM)3dSjaB^0v7+i{P82ru_BTZKPC@hRB zO3+~kHsJHjP+e?N(gR;=_Bf?@$z=R>w0;ZL9XVxI;Y6XhNT1eB*~yuM~&u#ty{=SFpQY^?sBe$|=rb{^r|)8b0H zMa~Xkr*s56=`KGP^gh66B|Tr?(LwJ|&wID1XjP~pEF|Qvd20r1wRuzWhJE`&E$Unr zely{Ov$FGWab3XI#Wb7Q{_eZb&ZVQHv-0QLWnagY)zv+elq4oERhokb{jmQgE|;fe z)0+D`txLj1G+yg6JQuoE{^rKFo|JBReSQ6h{{CuVSnd7BH4$oIC9aEmDHugm!=62T z`tj@63`K)~)r(E`2n&leRk%rA^mdYOD_&#TzBoKQyuS-)ux2zNDJgAk4+F!=Xc0HI zD{rk%o}u^ee|P839Xe6>!g{mZRJY}&CAP0x@9l5oWkn0$R#xh5Xi(b5^x6LapI1&! zj*X)u4Jxm%GYt(*<5X>AVq#*PuJ;aVs@dvr_N3&Y$;lU%QMR_W{S}NJR4-q?Or785 zY2)BPU2tpi>o=agVh=xm7U#12DX$bO=55h=hL@LmpdyeK-yo0|9u{`=rTmk)rSY6% zKY#zS4|g_|<(SlETc%yfHS?YM`a<+|GVPu{Ocs`w)DBm3&5nhHhEmTC3=EX5ulBBQ z=i$k*7_hUo-6M4CSMAI>)zIkZQz!)qrY=2&w*{hye*S#PZ!+GNCAN*}QWSqI|J>rx z3zN=>M~@!Gt)b2Ij=cAx{Mg&8*K%D^F=zpQN$s|aQKazv#AJJp)NH$W(BX;cf@S;nvAG#o5%M6%_kb&8zTG_PJAdd#x%u&bM! zgtPPexbBbg)7XOYd!sbDkZ&ZDsPobHkBi$BtDjqpLGTMMX__UH|fw zw`_HJUaiwNAV6J#?Z=<&ygV8vCZ^PhAIGX9gMtog>*!F=iY$-wO#S?FK;l{8p>uoZ z=H_k(yvAEh_4!yx&vV@`PT}(9I*T#1DRP{>GJ(j`dNg9&xU74G%d%oGKDgf5Qy+Vg zdiKQSXzjkSJz@_ZP%!%9>Q%Yl6MHD8Fuk2gye|5j+KZ|z!wRF>07lV_E3a`lC+(mA zE9?>{d8#x9&8LYr8W9oUJB{o2eR;B^B3>%cH{DuKPp|n4drzLjnEDD9Rf4AC!4W}0 zdK{;6;%vHpMLD<`b%lYJ_Q7$5r^%OCzg&`*-i96be)o>QEDJrS@1r;QZ7cH1wwMGQ z>djZul(yX={x-Q5OZp}?}`rf>H_3D`$jbz7U!#?EO4cQEo?`of_uUC|RE=aAC zbSb?0YxKECXr=5O+1c4*p~n@jnVI>bY7GoG#QP3Tc$3rqt`lAV@a4j%T9dw>gaSO}TI1J)D64wk*SJ!IIUv1H_(xeJ(V_ zE<#Ga`t}sMv&~q`$rKI&f&Dm>l1Z1IQ_WH^2qv)1%*=%Lq#awld8N0mx>{Cg?vzY1 z083@aXy}Q{l4ZWsmjjHyRxvit=Wdi=#|LWS0I_KNFpTwc_p6ch%pWgJB z&CJ+N=@zoEtH?S2gG5$vhTHC$=9sa z@t0#8DX|{3buUCCM@5|fNV_hLB>4h)I{UJQdkg6BrD^3{Pq{SW+Ud1@AJwd6;GtK^ ze5Um=+DT(Q?;Yf_PQ_+rWo_HFOYIGxSrdzdORjk<&5av3vYo$w{~jmqv)A`MkY+@8 z&6_u8npu-jN{_Iz%B1q$9F&%Le%7*sC0b5dImEOrGd3=xL(oA$p|$&+ZG3+;+SHY& zElYWwZ>`x!5A5IXLma5lfCGG&8mv)IB+SfG%{ud+a2xx^72y^ox2RqHGzlEmXbUJ; zHU)fouCqAspg>&mWPiVM%out?914-L&AR|)>^f2ALR$+u~%^vX~aXSAoZPu{| zZVEtgudL3{D+%yeTa;4IbDX%6@bYDK^=MPdJ)o5fmoHyt`vzoDQc_~jVPavCZqd{S zTuhxM|CsYa3k_*_Y%E^k*;(KBi?`iPzD8XrabGo>7uVBcME_77AC9_#OYQ5zkM+jI zWEovs8hgDk7<$>r7zKC%^=;;$p*r?oBaDIH<~)~#z|o`PT-6y?-S3mNa$f!sz-BeH zbbbrTX>4uP2s?KC_)q$rr<=)X4j(;AcD_8I5gb9nXRm~4j1x!(ph-}8cd^?6%Z@jt zz{tiw(B#YFBp&$+AOF{9KB{uapsIAe<62vt*Yl&}+L$O8`L#8F`}Xacxn|VFQ=^j( zEf!9etn20$%7h+I{dULD&~S#jwPLU`nAw+`sKoDay*(o%BjZ+nfB%$SXMI^_v#0*2 z`zgmQWy4sQo^d}NS(+VdT-NhgrN*6$C<6JQ8X|CQU+F#H>B5Yv`M%OkZ>)QDBgPvW z8cOlS4e44r7Iigs=b8Z4&I%`J$H+{po`*lmhj8x%l{nA@Q7k2Hqg2OPeE;apqF3x{>m~8` zNU56o8Y>jbQ?sdl072n2EZ=!h;3io`AY(;)j)^VyO!$=?H3Ne`YTCf`j~d_L>t;=o zDI4~0Ps%o~Il|4YtiCqK@@kzLw^-dzotu;Myta0ffm^0LZkTWOTdCNh=hrrJ?@eys z&vSjJ^Zc*pmZI&ik|M*xyl|2F@u~!f2J}tVq&+PP*75N1V>+!Txw*U@x#p1*0#j2{ z3-i4m#>U6wBE*%ImGkB^<)3i-X5S4M+{Ash&&lOp5a>nhg?n2Xhhkz5x7+$l#!F|U z9@Dpz4N85buNB10&PuDef>KiJVOQkw;FOxE)!_pW&YQfyh~U}RX#zczsF*! zp4vR*bm*Ns8#>k|v4KG4X=JSMx3Uy4e0{tAFeU6nC7Xry)bKqL{z3&T;wf)#f^`_o@yA$B#+o2nD#kz+z zh3wiK?C?b>*T_3IHr6cri0CPu_g=4ym)JUwS}Q$0Ye|ozuUGJ3VuA9qx2~H3MMHX7I9W zEb;JYp2iVlmkiwdmxCG)-IJb9$$I-%>il_9dU`r15M6s#axx26AjY7~carsepqy@N zYK=lmu#4IDmRkz%?|XU05QTx6Y(tFe;&d`(2KuuW4~K_MIkeyXe!c{*5O9kKe61EiNaaZ43WgmS(xp8@J;uAnQwTgp-y?uS69IeCwGnv{bNxD=96?5hj zTKl|ZWMm%mnyW|G71@vM#R`&P^pN`%4%Y8h#%i*X}#(@8@^T$|?Yxks`nC z4%lQY-b(6_*Zuo!Eq->6j`wqNcnk~-sAN(@j>+{y9!SHIXQV_#oBDEo*^EY zQtTQ;oko_dT5~!s1F}=v?+(jVYH4X*0Qx^0H>oqJf8p_yC#5wt9Z?NLoNA<+SHbR9vEZ09eG7<~i zn>qw^CLNq9Z1;0#TzovW%>DwfjQ0>66!=ow*VB{?YaIwN*QXrmi9vS_0R{72?4Jennl?Y?36mYR{H% z_^b=Y1d&E{kc(QiCgLQuar-NUEk^R@Z*p=%i%{iQ(`FoR?j%K=ym}w7R^qm%CLNaa z6#F;RGmUTBaEZzU!0|51%KFBw0Gp-yB;7UbDHM3hXPv>aK9cmpD4y!hO7ACVTkOB| z^~ZZU@+_~G{oHSDtvE0;@?_#yE_&y}%1oWHaaC1Ss!9y)Y2EZTr+D>OS9}><7!Dr9 zxjyBh5G|}F_-k@9@YU6~KbMrRUd&WWQ*WF?O_Te9yQ%o6z1YpA+5C{8eRBWp7BD3O ztSk9Iv82NvnF-xiixu0fnx?KWm8zYe9hZ@tn`_p+lHnr#ui{%uL=S%Z_DyAV>kL$# zsWMuUSO?UG1QPE-vX86JL!yCpY~keHYv5?ULXpP$d7m2DI- ze`TVFI3Y@tSaV-z0-ZN~gW3x85Z=7Jwmhk}oR^zRt*fis|LAlvB>=Sgs~nr}V$Cj^ zlxS`>b0TzfbPw^>Kb(ry)2LA^s^;hOfj|1O-@bEA(cNf1Gj2K%YIEYA<2t0ZShi+7 zkIQ)Q;6eH&BclYCt9j{hx**3!vrrgbCaYv<3ryj?xawWJq+93|J3NFl=-sjPZwFs} zOSXBl@!%E3ojZ5!vPFFa7AR5?I(g;I2Li-PEB(koX&nZxjUJmvMH{}$O2%`&*7Mo3 zXK^bH@lpgT!#*drb<>dC0UFzv?6v$43hZSNa#TGR@%ZuMiR(wPw%MB48StiI3&X&G zfQYl_8cfeXl2dCEaGA5XBek#!X5-6S-`Lp5Y4CZQRy#y%wbpoY3W^Gdyf)K=GK6qq z>k1N)s!~UudVA(4i$+G&DA(!JrwL88Vn!~4!w0g)$NGBCIycnK?}4Igo>^J8#RhIK zV1FFzv+7ROlneQ< zldAqH&@j@6s6x%IehvMdFrMz-yGIDv%?*a?>gs5D_X7hdR#sN1%u9?D8%#3|%63TP z2L~(V4b?^osANe-UCI809tYG<8^NJV8QJgN$KQ;NRkbnT|=&AWyYrup8U z75;=5OtyAj0Re&1x;hHTlMlSTz0HKQV0#*@tt`@UUL(W>MBaZDTxIW_nn4N zGMMkbWfy%PK)_?@u6Y*icj4yL1a!8weQ0f^MftAg+Mhh<;_PzqQ6WS-e}j4b++40Z zeh!;~drz|0tXPrG`|LfYx_*j~fb;lpY0j9p$SXxh4m#+LjEt0`=cvETE2a2*sg>Ms zkRIYqH9uE=bkW&aFfJ~R^1y*d5HoRNw?H*#QF&SG;&Xxzjm>Fpd_N8^!5>g~3MYel zWbhr)q8Y8yJ(=7SQ}$!R z#njUBx#8W#ixG>fG-5Gg-a8~BVvhc&9@q}oGrh5BpI$xjf85~YYuur(j6dsH{(ceu zUCr}<(Ja=^I<}~+qLOv}3;i3j<{bd)_07%RSy@~ni-Y@!0{{#{DMqEiuPW_DNtjKL zv+E0Q+d*zvd)^tvslO3`BmkzHA-<5rT`c;<7-gBT+Q_@sAUGyC0@SR1ohr75=-4>x zcj%m8>k>9ad1zE(@V_j;D*74CMKA9pTzBPh+~eE5-zop@oExVsmDCB;mfzFUA0dGn z{Q#NYMoxZ_fJ>I0TNoJ`2^PMzw50qToR0j#ZibDdrdL;Kb$~Gff@Y4PW#e3LBn=M_ zUxOYqDG=A60~vQGgWwy*&O+BkZs2YFEo3gzVRTHkO{7=qSNrB(>l7T%{V_4Ix;xmN z4x5lLCZnM6CD+}+AWl_JL*uQqA-e_i4Jk;tq(0osNdfwQyGkL2s)@sWRPJ|sdwXeV z=>|xO@0@4Z;CO5zftq}V^vG%Q^iP3t!!v*3l(_i1f`o_;A2;`2pnxC|oH$0TR%!G(7osHyL+?CWX4jmmCM_?| zF`AhiMEGRRqLv+JR?uf98ZTFc93yO|A}~|m1jc_SEG|$fIB>AQVT`8n+qVs*MA`6< ze7&v!?92>&D6Q5dtM?JBIDGQtE)ca+^lzm!^^+?gH`s>IQOK24QUM3=#K$wIzj~Dg z!4KqUBdO!9HHC?ZNxE(kJ(hqF7UdNbxCmKk1?FPS%Z)G2xzK>`Y$UaHcE*EeX16hd ztU&vdiQjed&VB7Jyca z<^_b%?#hWJLIK}MqUSa9LVr$eQIL}hm6Y4Ke{2p8%$22skbFHoNl~I6hj18BY<7yQ z{!v+2T#Q9_;&$;GBuK(YCwbxp2z&hNY!sZ-@s3<_1Re;_=CBvE2VMw&^-y`+i}>AF z_;(-VCy{J!-V|%i(8;>-?f5}K`)zpfz4=o*GhC4uqe^#-1@6A?G^{#=xG~R;n&W(J- z1^my{k4U}L=$YXL=9Rfl>vxV5^z!oZ^)D3;z)3h(VGhO%ct9W_5YU~#jAu;iNjO7Z zz=Y|)pk|+ZH9y?f=h;)_G62c5?VT;Np#3ljcbRk^Tn|0i7oJET-X;qncxk*2K!>ww zV*6JTY{X#(vamsJrXi7$VjD~eA5?XWaQ3v{*<2w0fwv=RntNrW@U0#!WLRt8fBZNW z4iG1eej)c_vMZk%J-}#)a0gq4u+@o%0HE21<}K-au(_$LdCHg?9k zM;pI~tfi`+Z6s6XaQO+hgy34UhMvq1m_1?D1@S z?7j1oy>+vKN0^x<(6V!iXrb_gl|9W33}6uQB`k`stV(fSsN_Mj@y%uugn{FrATR$p zi0NWNox;;IRlGl83(L+rI5-ff$~z+?BW@x^C8_!=T!H`DE%g49yg%QLku!-y3+CkE zshL~*Gv2NO6T9XsU~wQP7nf4g1kwD0l@vmUu3Oot>R6!MYg{4~PtS zYu0I&;i25qSL6bbSO(Gqp2aD1X!w)f( z8?CIY=#YijxM|ZA5&l~hA3tKFzXVJEMuH`Kj% z7)uDYo*aetK8$yG#43vxQFKS3a` z!OK!!g%)E!*0Kxuh(y9xG-c>qJ=^U3>He-?ZY+(#uCUW@4pv%7ebUs@@&Q!v1+(;pq0aJk71b-@Js~|Z)Ch)9 zc*5As_&q;Q`-tY`ULcLlhpOh=O^FW+A7Ku0(R%EJum_ZizRf$WfR>+??OV$@9?Hl)ysvGp`! zMt*`2Ju~go(L0sbti($_VyTxgD}> z;vVH)2hNHkzm;H!!-O+d0YjN!9th9b1N?W+y#TMk|BTFlVJg15!b{rE{Mdbc^_FUi z@@DwBcmx8?Ae5@rH`e~ZDMtDa{5qSz6IjZ*8d@Q zMBfJCLwsNi~tKb?z{=vghn-)d*vhnGQdVlQU6g1JSoKl|9|;h z5vDHWYAF5skS37^kg&1gB&;WL+EabFh2dv^!hokc=X?ep77>>mN+Y^!^w))nFWd~JHPtWhUxv#bz6A0fVl3fAF&*}ax25)9Rkx)52;6muy+C|RPk*9P*EXzX} zwr<_pe*6qc5!x+lRpeqprM%##^FR^Ch#d~cAOM)HATxbYN@^=QV|I4!(fy>69_?aR zEjE|wL7)ERh>(yYMJ3Q;g@uLt`ujK1($XG1abf@}+G9ZnwhZn3ySP0>=+ak{_#b$W zBu|`W4%=NM0CHu8X=DEhXm-An0T~&mQ09mj-s+MAK;n7FLhMO48DmheJTDhlDd2ce zRFogF6Q3XMLG8Ks_AMWxv5If4bR;jmM6`@)7EKsN3Jg`E!9~`e-joenN^Dxc&b~OU0MkT27=}gk9!#qFQb7 zy!F(1Ap?>}!o2l~<2|&w334q8d%GZtv%WUVw%QqYeC&@zuKzC5?IWCa%wBh$mb)M} z(H%IzUOjDyZNa0SaGdP%hj|PRA}vd{orz#ye^BY^eHQYF&0C!QAuT6&5s(*Bbv=5G z_OgFqpwzRomI=YP0OY{T?%|+UN1SBuO!%%tM^7(1$&+Mi65hM4MyXX|jrJ)JFlg`S zxFv||c@a7urPz554T9rCK0FD%dK1#OjJTRbcX->9$7(chX z(G$Re=xzM=!<2+?4!^oO#0%%*!dT0zJv21OmkTcZTQw1QpOdJ4jTwnJ2Sh&B-ahQv z()DgGzPH_4i!43>MV(iZ(Xr%1+Vzhw))aAxoLZU)sL*+d^hv2r51=*JL=;lnr&+u;1aLjh^ z1?h@Tn(TzP$E2`n9mtRqD#Az`AP)6xPQY*YqT-sGkKd>t4$7Lj*`gGqWmvNkcn9zt z`r~N|jW9m2C@73~5NA6RLS&p8!&V+7>&MmL{tx{V6@9z2%Co)TvnHO zQSBb#s1pz%mDv+wM&jo!q;{$XP%*?&#Fr4Sxo80kO|La91u?MfF<)c@M3CZ&L&wa_ z$+`FZIRgk)q~TS95xjRm#sYI8Q5;XWZ~f8+Mc!1|W_noEM}Zeq5pf*%MG5-cV_qK! zOf6+@oCJLnvj-3I^92ZD>agLPYmjfV%$nI!bP1_4sp5Ku6yNP>qZ>!H2y5_^_G9zj z%P&O2dk)aiRfe>Jr+%H`9V~~_;>?H?_pwtO`UrB2kU{KhI0J%UBdcJ5#s^G5YzeV* zso3~9e@@SfbY^~dJO0pvS(Y+$bHgQ{?_lC|9M=Se+E}@8a&2KCFg43~^(0aY7agHa z?u1K3Jng-Eo8a_5Pa0zoaeeov=qU_(Prs37aOrY_CY9_V@%0}5pGFi%aS;j;V!U@E zBWeGqJ7~T!-Gf*NQT?$C;4Ir<5{K_~0+awLduQ+7qGa!}zRHKM!R@?vFlo@Zx=Z!2 zo&Flp|FJFvb%2nrmP7`+iqj=48%YZ=HfmW72OozC_vX-{L&L4F8PCw~ zLZ^OEvc7iJm*;Illw^D<;M+sggH4rmujpuK?!Q!cMpW+Xqm8)vYOQ%Sfx*mD2Ea5U z|1<02Qe3MIBtVl3K$>=iE$PpAp;2rAqJ03;N`P*;&nf;QHH16al%_#JFvu%c=+Wo; zCMHfQNVvDo&3ydwWfux1aQseOmWDV9a$@WS0s4iBx4j8pE)aR+8$;dc^Cn0fIALr9 zetjl}9Y$`ERff*Pbi4qAkwiiO5%W(x5Rz=h+qk+4Ze8ZhBX;Cx?Gr@V%dkTFMn+_K zAHwb{bbvdkhh(09lR7QIg#xxv1dwtdk?^p@pA%Q`mHH#JL>Uhulx}hbj{auZcA_CdhqSgHk@wXmN6y_#R(T+`cyX<7QTe2 z@dEaIf*nxM?>~QP&t6hdQ6b_}TA~Q51vlU5Da^OGD80Kmb%O8)@vh}wlq`+1k3?a7 zL-vQxdwZp#JR}(OO-v#!qwp!~_Cu=hxZQrLA4ys4yxtX7@tqR)*@KefyYezkEqF#Pffd zq6deP06tS)MuEv6pTQ;aq7(yEzsNQ-JFE6)WPF^1p*PR+nW{T7yx@Vc9U9P{66OiT zWwxic$VFpL$muH1a>4+5a>R2JL&MMsx4gG+X`u~=j3OB&MYn%{%Gw+-$8k4DdwVLp zO9)bkuP=vGu1DVl986iPT=9ghFdiuQbB(v!t9tHGi^%V1Ae*<02LyD442U* z4SB#2n-R(r7!E4)PBiJ;qiM(hz#Sweo%ZbCk4)P=_>Bi4 zLn9(2h#WOlomyJ+M`##$XdH5{;$jip+4?k%)5NeGr1lGle!LlxgdSi2>MHce%nN5z ziQF~HxAO9nf^YP6bTL@pWbJ%zfHi#sgS+r`uNO!r1O)6R$X;coG@2Hqo$Y963*b$h zXk#Ni`2__RFJGpB!Yi$y5FTxgYe(IC>yEitlxCcuaMpmxD3`}GgQ?WmtbE)i0p(t|4K?arDfpuM72MIoqns9uZsw zn2Q74A|xsz+lT#3VSow<)`!%sxN|uq|1u)7iU%ha9}7bCC+N%ojX=tM0|WN}82f<= zFc5SftK{nHnt6NXI`O(#V&$$U%rm&64T!(M&e;pi3_!>m?6-G`H2-svh)9|K5<_o3p}J?GhE*FTYke3C>lrtX)rLb>W4vQrC;U z$7HFl9C`ZpwUaZc7k|C~S1QECRp0zSFr&&Iaa0fbp}v(>^nhGiGmR9Bw*i!TATTKm z)@98h_bvgih+w5<9jB>F3Wdi29^;`+ArHaaj`!@pFgQgj$gz$JtNkp$SGr`KySh71ky6OZ6JLgxgxVQ+CqkJ^LriLkIR zgNaCAJ>BS8giLJFW{GKyQ>RXq(dn#xE-SmRZ3;iGIbAD<6N4+nU5BCk8DvB;PJBB? zSSU7a-R;`@{Vzn`^CMX^#1+a@G3+5)ja%aDGlxW6A6^z&Bm>)7UEcj8{uVp~5Y$7E z0ot;S$x%Zn;WmK}>H`lEgb%{v@8VDYOy_EK7{1f}3sVDV7DzAVs2=zFfG{SJa=a|M zN<~6IViVGr2ZDoxabFG=uT0A|z1Gtc9D?i$rou&7TzIqncs63K(VY|#6(H0FP#~Pq zI}aXgr9Wdz`k&+t-=J@N+z+A>w8vdU#0j1RaZ`tf2Zaj+`1$DwkVyJ~I1u2gmt?%s zE0@_(HN-e$fbo>u0T*nCzB0ff{M6E--eQ%1^M}z8nk6m90mLEi5QZ4ApOzjGhc0sA z%g`;_fw@nj219rY>y8Hqa7F5j-|6?^wY6pI6*QN|DZ(d4r>*{$Yvc?Y5gMfro+B3C zRkFtGLl8A?3KLl+_!t+$+0+OWg_iOWF&Iq7+()h={TE7Grg`frVR)Yi4?sL)LN79M zfR>R7#|?3oO+=(0Z3!V|wzL^o0fY;O(j*CWwKFZ4f0lv$M04_N!c?ILPk_VI46GdLjgexxNiX zE75@CN(GLVgg^)cP4rH*72^qFxhW0_pT}2UGc{!qa$Ndz1IJ&sjMaTpExP9#E67GCVaCyw*$Ui%~ z3xPY5Cq~1r!D~mFstm^Xf2AspqGN0Lppf$)79}iXOQ#9t^>ek=owe*ar#We>?#;9+vzw)LbIrz4O4?oj4NrF)#b^ zzUk1Ae@NaKr#YyC306#>B_p0~@vi)RczsFO&yaIT1eGWSI^o1XF+uguOJQ2sDDMxFyMYAF6;`M>@)_}nqeE+=#+U$$`7KBl1gFD1^}WgB z<=v#;HK$7sE^54ecPPplzqYO&7^ zz5xT9Mus1PI^WUPQ6ws0j1gWaYW}eTVx(jHjumYciF!W0V~$R0_fPayhxe2{<+ju`F>(N#OoH41)HAW{s8_o0j&77(O5%2=IkIqHPdm`h<%NYlkWFH=N|mtn zh)fQ0=L<-FWLdOx6UBjOG{Eyjo(<94YZ%)gu0OcnJ)9<_(#YVt!_?)Z=d;>LBGe-y zyGgL91AtbyMyVp!407!yB1{mgMIa?-9op(Za2Cpp*lt+gzZWwA2W zEtQLl|Ct*3Rlj4`t5N*TLzb;&5rZy3(9lO-I;SJIW7_eC73c3E8cG~gJz|y;2NW(0 z3vnL6+zFQxQgK6q%s#R$TRyh6(P5eaYT+lePvV}*nlGONQ$>j*RuPva3*&`58AT34 z=C44^7QN3CvJ)}mi6}YYb|*LyJ`Ykieh6iXZ9_(HAD;R%)Q7t`GpzkD&fM4wiNh0T zA{K{<#)8cRjOcsaz)MtcU-C0ltXEs z%V`!zRjP4cgAEBRnx-3N^&-06);0HQvKsht8NaX-{`IxXWvEApr>1tuy=E(^_J!yR z%xWh48$+n04%mDR{v$vXM*Mw|I@#fU7tUEGJcM7pC4r9~$=#0Jg8rL;2L%?!#HlRW z0x&-@c>#8*V>*6>#6ZYe6!C3t`MHb3OWp{bwH93Bc zx98lgy!EqoKboyCaKE1G)Mm6n6I64AF7|jry5WHwhWk(f#fQbu0Ywhewo$n8hQ`Ka zIQnhx9oQj}=;J%!Q)QvEgGs6Xa=lZ1#Tr}RRqXZ*K;pddlmN_tEj#Hxpb#{)whn>v z0yKC78QFo=$F3nxSp%2<@tGSTPn%8mAm)p)ifkYP-e7B3*uV#;@cnZR3dgBH$8D6|Pca@um2c94$#~Ppl z(T{Km2|wEJ03T+Moqr=$i^(f#bVxK5g1MkDCCNYPLZ#us#Z&G?Ss{qMy&(#Xd(>LmW^9`M@${?pabm$W7-kKGB zvV$<`O>XWYMyv2nu3-`oKYX{4kkAFqP}#)V=yT7YjPLmM0OcJH=bfmigNROMIMza_ z-yUHi(SD8?+J4vFj%qkDp#X||r3k{?G^Wtw6BE6~kLaUjA#4+cU5k`Gd^og96T?Xm z;r5Ahd1Ct>!-vbnMdcp)gn=3Sf}ubPXE%fM!|1-i1k?=KVG|oy6`~(sHr_yF_pVEJ zL<9|nm(HiChJ=NE2Bs8nUC69AA^C`Z#7F<6=oI8#@tB^TUVzGtnl1$Pj-84Sh(PI8 zk`-vZle-8Q$ zGEt=F+d7K{4Iuw+ z5=Ku5eaKs^6q)(8azhp$>7)G^&!zQRj&pHBUj(Ax1o2o5&*1F>6w(appX0vjjLiK8 zV$K}o<{b9Y%uaC+GGi#xp(y6W<+(uC3O)IMhm;VO@td`b72^n3gicS-CzeQek>C;z z;2s#Gt(lse+d(zdF9DgkCPTAt-$i@-GngbWhUQ_Mca{5;W^miQS$bwj#VMk;B<3NK z;0VZeie*NI6|0;CNChe~Sz2bu!!iRjkj=q}klEo)^Ppt4ywn zfk3@2Rs!H_10@_ZZJ}e!N{6s326zs5E?&@}-OYni(srsI{CVR!peZ81!^EqIH+>SitSZAnDe; zyHTc8{gkM$x)zCSipk^*k`xE7DrDjQ!CZhR3{Rc}jQs4{S z!~JW~^Bs)4)-41D&VH&ZEl@VzG$6K3Hn}S<{Jw9)9=U~#A4f@zGdx;0H{23O^VRK) zuIYHtUwx;j(;Mb`dqb7LjV@^)BbPz0exA^#YQEeX=Su`r+rFMSr2Dh&6FG^)a+cK~ z_@VZbu+tYcR(+V4P5R6yE_u*4+nL#yGrQ;KKA77rV(+MWGNVU2z)0?M1NYe1KZoul z-Z5)%*IC$bq>*uj_jwDB_5Bh7k0+HT*RCm!{wNd%c>jXkhG+8$PE7}3B%%%wPep$bZNfA$;`Zo2>suj9;{NHMHsCTQ<>r78&%Z} z;k{z;It1AhWb{!3&!YPDqm_c}zd&18_MrnUteJ38TE|e+RayRxWaN3-N2NI;m3>#u{|%l zS}g*pXYQeChgFt92s~h@HK2!tHH0iR++>Z+>DuaQF=V@I#~MC<6q|7J@DjbbF5>89K>J~U={AkRuV4k5asSjVzz@CY2bvvg*|1R~Tx->a=4b|dj1IyT* zAH3Ng^%hi`SPUw5ok&zhOLbzW*LwFm*1T0VT%l5a?earc_ua)!JZalMl(t>#=h?UZ z$I#R#*Xy=NShzN8uyyLtwd=P7#pM!;hbPp(_~gwgJnnL$%=x;?`0N)0&0PLt!EF^X zRbME@i(_X6nfI7ai9KC?LA7Z1tb=^!=C7$;#HsUJk=MU^)n$@fqS$OnZL!vl1*ddH zjCDq=btQ52?}6j-Nc(&sCff=`oeIeA7_0<{r{urhqqq<}0y9GQv1eB(dvG3VK*ib3 z=KNV|ivFP4oxc&B4taruf#o20X2lJ*i1T`iANdaA1y4JGFxl#%`Vbq1{36=O-DB#; zETeU3fKAyW5mGWtiOIj#*XBi`NT`h%N=is@f!jh+Ahw81e-J^`@SE)jwXfEz+wTT* z10W?B_jU9DvFqxdkU27MP3q&$%NUrw2#d93Wtx0_xpy4|#t0%XpdA+sMC@c4 z%AEit5%^AtXb0j_QY!fTF<1z-zyrif1CjzRG6zcsNgu_?zGP+w$Ee&P4<2z&8buiIi1Vgfj$K#Sc86;wZAV zV91mrsRfYTh|k#pZ<0h{Fo*%DC=VZ0M|{>B!KW~bmAL#19**=;wr0kB?Mr}O-U|p+pMG}zb)F~)aH(Zm zeSHw5r)(r#ph8sxcie_a4L1SrmZYe49Df&qM#da2>w|QTDsZHLfb06|JnAYVta239 zsXu>=(Cu;R$Xmkkv0WH2#2`?t@_-;zO3?Gut#{Rq?)^S6fV@o1l`bJgV?B2j2zvQg zr4+hQfJmyj5>_W$sX@R{4U`X#6bM!z@{kQGT?L1%%dus*F6e zFb_Mc5z8nsKfEk?DstfacO}-yrNTmCkYPFKgik=$keb&AF2F}7-o-qwfwi@se&M%j zViHb203Jzi>PcejJr{X71-)|1# zv%C6hhS=3_gjc3MQHT zlPjI)#;b4(kgz4vT+)fk*J~e_0_`A1XO{19Z0~j`6Gl*o%nY@PU2l6Evic_7LZ3$s z*z>3ib?H8c(1z3*}d;`(|o^}c8ZdA)b5L=86d7&05BWVYxNeeUqWg9hv8KtXMCVna|0L`FNpoPo(JIo9}`yxa(wmr&QC|6 z_edi`N0dm6^&~)7B*+KlkzOxY?l}+#F{M%q{taQ67_#Tk%Ju>n#<`1)AWPtOa(2dt z4-x}PX!-X#-mR{#reI16F6`%?o@mIkd-w0J%GCda0Bm1;pa@%z0zS|Sfr1KTo&c=- zK>EQ^3u?&@TUVcW;rbB@^!_uZl&}QYAvr)%raX zyXja?>+TW{LFJS%K#^eJf;`LR$zmhj0!M!YU=Wqn(-(LmPkbyEkoKv!@{*EUz&E9i zhlab-N4Sb*LVrXF$7_F;z z^Ja)l&BOkm&;1ijx=yS0#7dgeH#7RD`0NwNXZ7k`X2>th>{>IG`!i+3=o5NT3ZLXu zRqZaTJniuDSNaLQxBQzj#N(ur9N9NiRw?}Wv)F#dp3x_*hIC4AJ-F>bB5n5>Qx=1a zNmH|@Z6wZt|BtKpj_11V-^Y~}8X`)evNJ=2vL!;&WWAg?LnWEpw`l3E++Kd&NnTjz zlc44Ga~}8KIQ{DA+&G^5;z4r!aFna!FvqKh#ffY%j`njS)OtEO&b#$BX*0+oo3vVa%i`2Bt>Ao155Q@(~IZkqJ`3r z=?UfYbhF&l9+CK(Yf@5F7#A#W_U=v9Q7@hDy8Htzl21CwO!w&q&bkX{b0!O*QT~uEm(2cf#DLGvk+p zaYVh}Tz$C=9kuw$BInc#)5pHBoDGdx_4+cX@nsL&iJGuzkCA;VANu?I$+gDh{1mz{ zTu(3tmffAz?%iMAj22-h8{0Xnr!P1Jg@j1ZfmlaD5(NP|QZm{E?tTfpj~8a8F#s9F z!Qdk@R>)6)a$BJbhZf2a-BiKopU0vW1bQGN1X`c9o`~WEk%>IJf_R5PbquHr;MVAE zBVZt|sknV#1#NIUv}owE74fOO*AbgRaK6d7?!C~z(*##=U-)+cm>{}v9YaH3aD7p4 zxo7?v1H|v018xj;j^Wa`9H{)pfxP5iZsq{?pm^Z|&PSfE9fkXxA+UE|l zpBn<4o|=;w9wfjXm>baG8!2%ypn8DsYto~GNm3wYeuy-?Qww`Ugc~#|i5VI77>j`| ze#7UcS!HKuG*UdV^#ui_>GS84JYkr}5aLz$^UP2rA3|9Whvfh8du?Uq2dD&FAz(x$ zEWp}`uZD<3$-ON^SY_nVN*q6~1JM9##QzdR02QUOy`6%Z1dar|fTV(wpu|tnMhbU0 zr?mz>S?#A!!Ufy#305`y+~B!vU7C#A$^yg(@RnFKD|^7Bl|?n}Ht2q~@Ou1s=OT}A z&sZqHkqZ_UoPwLft4WnE-@_PCsU9nHu4eaMHnxv=pX;=4fz(gNI&l1S?ppQO6VWdH zyVdsS!tF{&gO6?N2cN7Qy3SUWb*~uVhH^d0-KVu}5}%~e%{U3AjVzIDSemhAQZFZ__=SmRyWTBH zHrMMR=rH5n{Mt4%cNbk}`?rO%s(Tl*p3RrOeCFnEKVm$4T5%q-pjEI(Q?mJI?$)O9nNs zUM1pUDjaD~n84725&9k?`l+Day0kEJ3m4mnRbN$TS4nfF`#dp;UK`<10z7sXh>u@Iz8FWA=B z)a>Kq^KEEQfBNhhMlhAfpWXAICRB8n=cY~=f7iV(V?$6R4Rl=HC^B9%sc9570U0@`sDa2Ty&O;nw z(dEWq{*7#PrMpBLVi5i*H(B?Ea6BtK7B>^y!RC&AFH7@17qr_BIi&Zfy-i8@DEXF4v-JN9h;n6YruSChk=x!l^(N zAe0G*i1_(g%HrZ8-34Z(51xz7DEX}Lu{`;+2T?yW_{mq-oulWY6zfPXHCdS~$&bjei*_Rsj zWNrDm;?q)U0cBsCW1k%UM)hcXj`c0|ZEF4;+ln}PIdAm{wTk5*{inoV=1so;l#-Ud z6gKr&<_jH_vCZBM|D?QsTY4_1o-#m5=auMw{KgIc*u&*xE1zo5>)r2>Ip?g^YHB&n zI@PmjBG@Y@_o{bvJ(b)E{Taq1SEu4%9z;;)p(#|F(7PY#T4Q7}Us@a%=0Fo@+*|@-zl@f{_P4Zh!IQ%=9^KUpK0dp>2LD zu5uRjwgz1Cb?tP2 zlEb^YvFz1^JXQZrRV_Y>LUE&)N8d>Yu1gCUp=?~gq!QncQLq1#yZ&RLYr( zqPjoD!wR3=h~&|~RxWjyf8u1~$9n=&8fJ&t>XRawt(1Oly5n}w=G1KAvf%xxOQ>_QUYountv(X=j78!5!*-Lq8e4Y7F{wJ1f&9OBX%1c@4LH(D#LHw-sA|sdR5{AAicStVm3%}jY%JS>mdZCcVgDrwjuCkoGe~6Bk(O7uP z3R{lKiG0DxK-g4D@`hlu>^rgfzEY?hGv6Bt^)*>R*n zBU7*R*&us&oO9WY3*9E&&FWWPsLssPrYZd`@u2k-ag#AmPaT%pB00&8LU`SIgO0Jw ziw>Jp`$QajuSlT6-<;M#!^uWXb?k3cSzvgn^6y{|e%ZX0hZnLcPwl6ua>J_Q1vDeL zdz8uD4%e^GwJO?NX^M-#icz;b8vWHfen(9o7zzrDTYZid(gvDJSwp?yUCDVGAknKw zQfd&UaA5(;w94vsL&h;O@Ky|UUbz2aQyh{fo14F31uf+WR4dEj>W23GwAJh zNfq{O94dI<))o$Tx{_Bjs~K+d1CeA%f&m5w)R=)N_(2_t&yz6Z$LB~*yXb@+uejbj#=NfNPk}z&NOW|&#r1B+%WD3a zUUJ-q%rtJnG2Ra2ztwD_j_-@y*;F>I_%Qv8cJ>+BYu%kM^bM4&edns*KYe>Jw&8_x z%|Nox+AXVFzNbs}>Sz9SDbdK)sef2IyZGaS8~eM>+^YY$-%_{xtB zHO0a5%;nOnN6pVCt@=C*YdT)#CwX1MEdb9)iD-lvtMh#EPKg!+Ms<8CZ({2z$K zaOl<4PzD$&+k*qrs6XHT@Yo)q_YJ^R4YY0a1I zH@z|xk60ua`vglbjQ^a@R2f+R&v}AzU5Rnp?9iR_yCrj_Hs?*#{GR7zZx^uRUimpK zgu*Jm$X1c+#g>mOzgy&ACWP0~NvujdG_%{=qbsQ}@@Lmrv&Nj%{>!2pO@r)amvy`z zA1S=1eB`^NuPtTxUsmSA$D+s?&ovJ&(JXyO+Iha-LFH@+q8t2YN1Q&F7D% zdULY*9%b}x>{bi-8Ev(fy2oN9Yy12P7bsZo0qUHEV=?Gr0};@r{{mcsA$TYyIoJDR zZEbv992IOlD$GS8>mnLa5T}6m;J#Ltm-lVkGkUpc+-z_!F9-uDoL4cVAtWFOQdEWf zpGw%T4N>{`ZJki0$j<6b)&SIsM0s(ija46Y~3k+!@xC(7kij$ZqhPvqtf?%!mi*3O}G`t4_~)bCtNT|A>oBWvU2 zBJKgOnYO-G*f#8=lH{<+7{D#E+ELYYhA9_0JvN{tVw0_`TJXNf753q`TXp^f7oW5D zV3#?ztm^TpsZ5W1LGnu;KlkJT3N6X?A|jdJ=bPi=rH*{xLN7QpNtA86+>47ck(;jkJIwfXfk-~jO7A!3{iElD1cPIwa(R#W>P#4XVZZg%HYAym%X-d2Dkx|$Y<1Bat#_o6giru*f#M@3 zy0<`-H3zdA(|^Dt7-9Sb@fFjl@lqe3%DvXc_wIX$?+(dc$KbaP>Wh!*@6DjX3bZOY ze0gpo8g50X->G2UDRD`OrCgrk_qHbaC>ZCM`h#gqoFk)9K|^^F2m3!VX9HE(f#5G| z->CG5sc@ldO8qVa=5YY1*=zVCSAj%hC5tiysen;1p41q!BlE*acB76?D{Vc~$1QQc%uQHStAdGg_}pY2pZum(|0HrqSMuecH;uR4IMi6)c#C7>V z?e(r5XD_fn2#REnJfRkO;Ac$uH`9xi8=ErfXB;{YAJL}>2sS7iRPV~Z&uIVJE+FcP zt^9Xa3jc-(ujH~s84?kp_iHW=|W-!I2K%~rCgcK2Nk zYO1#hXK3}EvJ+gcBv124wOq{`v-GoZ($f|Bpc;O{^7*AcQop)4r`BIRZX98(+Jgb| z7uHxUU;19NR|f*JmrlNAIIA%m*=jl`elsK1IIS6WGz#7y>Q8VC>{mDu7%7~OGva)I zjKAOo#$xf`8A8LJ2PI##T^XLOi#u`Zyve4!_UVOBk+2TEz8)VHxN+I!o6czsCZqG| zgY-wb=>)|mUW#tvK@*ge=A6C>ae<^Knve}hZ_e`}=;lu*< zaFis+cAI8E80VfD#cA>vQEtcH%Xz=#G^lwXWL8hLitcrmxv(1skmkOGnCpGFrNUQYhrwSPDeo${l110=OhJ2R8PQWAY`;1XvFVy zpF<}3ut!sDNIk@L2zaEoEfDvd@vki{p&*qILKY}n*uj+GvAP1-Ohx4{G3!MAc}iWK z3tOT*(I;zxwCk{V{om!B^>s*S&8<2`v3l92&(Lu*f;C)*L?kLE)(44*C;y^LNZH2p zildmt!dl-Roqg`BS8z5}EvnYzryz%TVb1f;Dq^2VwuIuqpLOpIqNH8(>66~@osb8g z7l=PYol3H0=^>$WZ*;HQv17b}%%<6C)>Y&H6&V2zJ2zX;;|4bS~sFQ}wlv z4R;=DYdLM0;OH<&9^Mx^QF`qt;Uq{%48thKpZ~K!p<8D*YT);5DwPeS<9L2I@BKdrD#O%{4jq?c#_6^d{=C6HP`)_p6 z0V|#eRC4FeP^k}h&dZlTj&fRZan3=GtW4CX{ah|Hm-qfI75piH7YYT@GHp^Xg?dmr&Ipabgx z@-`NQer-=k(4BY!noKp0SxD_gFnYznLICyGZ*qX{;~#U?h=+>?Vrd)8pb@CUfB4<7 zPLO_G4k6*>h`4vF#wjJ20Q z!H0ckMvHt#z&aViHw^z~b|VXO7l2keoskjxSCyEVn5Kj2=N+bEX<}#DcFP%^)b$yV zmad{(+g+K_?btiaAm?ZJ;&jHg5`BT_uxNkn1Ik=23F$f1<~c`bl_u1(5qV9MlekT< z|2E-Bm|Y3EfIECfrQS6tDn`^iWD^dBU!!3DC!5Q?ULVwKvU{qJ@(YQLmUu9j**Kr@ z{r&5^wy&P^!6SygTW0z5(m(f@8cmFa>F6Do_f>1SrEm3&Ybh1S|D|X8 zZ?k=|XmvI>c3`LR=8l88f_bII#YgXdTfiUQTK$YyD7$bexT7GKXKA|jHh$GvCyPDx z*RCes58-~s8r}S(D4D+X(~s{_Gc#SRx9As6x_j*Wema2j80TGtMT~)X3QumVh!LVMQoeji-8q?^r7i1kA1Ah3b8Zk#G)s_%6FUnm2)EA;2 z0NIv6suv{XPOHE8{TQ4|FTF%Cq5$3vqBti^=r&!w6kW9M2*aQ#293Wo+Wzg^x0;J$ z!e%86pn`q^JKEb_X)0cqzuQ`PMVO1HyR6xiX>arADudJgj_F_53_jtPKhn3t&MsRl zm&Z_UVzP9~h2=v-SAG$FK=!66!3X_q#)fAPoiylJH+%aYO=(6hLsR?V_r=$SE(#%H z`ZVT$F0tk?yXkmz_nQopkiGaZ70c4e!!}Lh!bLF*2QKEa^|XYHWv6Fdvd!_ndB?2h zvUz|>THNUUF3L6WeLRnqgm~gPBM#*kizMgxJ@@;Lr-dmd~ z_9y)H?za)F^2Zl>cKzAa2U^zKE0v{|=pIwDqUvl{fIYc{K2!bOdR^wFmf!kVmwy8- zt({)3*R_~?>K>haq=*Cbq~8+}Abq7g(tykOX2z&H;G{@}bNPtSPUt~+mC zeWSWKpHEHho)f#s6r3A+c27xgUhm>u+Vr9OMNVtz`&c8Cr}ZlBuXOXgy=F;UC6qdzQ0Bw_{|;JL77gMBT)Losui#97z83V)6#V`ucvHvlApOaF6dEF7L_!w@}vgA4h^-f=M zMRj%Lo=dN4GMUe#M!+fNh^z;j%eP1S&)C@NHwk|3SzyY#AM@b8qxkaEtK3{|flgS~ zLN#7zJ9~3NKA7$JNz}3e0}k3Pw89b+kCT$PzztNTEMn$)wn&@F^$(~XgbWKuJs)tp z5I->iw7@1Z*mC*A#l>~_y8!?v|8Legy;J-!B0Y`G1)@ieY|tI#hup*6eVNwc`@1tz z%WtnAbvP~)D66EV_JFy>@c>^9mo(=F8vzlcBg?dGBm6sdT(n-NHhIs%loFd8!yK;PNdcV9|j2) z{UGPhN@{j#$>1w`m&lK{NZjoiI_?_X)%@`C+|h##dEy^Tjz_+g{WZ_&RuJg&)9Gk8 z-9^uUy&NapejVQ7?k9XyC*il=+rWJ$&-_c(tM(MqUQ&6r3ICI~+Df<8V7ZG21%%Ln zgzv{bUX}jRZY%oW=ck_*182IAr57eTBztv_GC$byh;n_WtyQb%m%(6P*9q^_vs+s~ znOasB=YNQ7kX#jyS}%FyruF;&D(da~IRv@=dB3Lngl5hL9Zb96@sH~b0&7*iFdbUA zW46{VeSw1!KTj^*MFG*S&a5bv|sLoaXYaJfi4Zp z>d0msXu5h}E5a({_874r806%q#S7=pduC^gl$2C6@0)SOKNAlH?Dj7~39$11CMCtC`)9%PoF$m|0_kxa|Ocjz@FbQBFUvyEXeMuoix z&x;&^pqTg`cZM?;#3oP+^N5Rwk)5mH*fGP-DC?Y;n*FJO0)ty{8^M5GH^9PRJ5-BA z4gg6qxQ@8vmbezyS^L3m0_VQ3A%JM_gd-i7-_-4X0f$;^$2*v~b+9`_Mgk|0=6J=8 z1Y*X+=)SWkq!#g9>;tx@J_2@%Vjp$|Ox{MCej!T2?L<$71)B{POV4T=ZdXJ-l6-BK zw@&&;`i%+W)O<7j$I4|n+xyk@%Ex{@XDe)H^H$-i`t)t*ahvYQ5w1AyRwd=P*hieQ zYqw!&Sad`2^K)$uf7NYMg?%d-b|2j(@Oqg;+*GJ}gQtmBS#uoCztLQ3zZ1cqKbG7| zu2%K>^pQ(4`LCfRIBja6xAYFaJm+P2XegOtu>C;MPy@|;(bI1OuLkeXKVuE}u{x_9 zyIpKKqB65>5$L1f#WtZnoX_?blcQ1sL1EH4%~TuOM||t6WY$&ryyP5SM}6*CkNI#} z*Qi?Cw^KE$eThFSXS;s>-BGf6*(W(u*SsVa*xu#JOFX^jO>VDAk^0;%DYrbFx32d& zU(kH`IoNC)`CEL&>d)P@tnGA90u4GnBqz3Je9+S`R}EK}Dt=5Y zeWwh^m*w<*@xvU<3ng$x|qHJ$WaeXk~lqY}+%dPWonD&TNz3ZpRJp;U#TgC_b;OGJ+ zG)%Z*rs)TD1z31SMwYy9Z%4wE1Mcu13$q5?DUcrwfQko4D_^kQ9#JUVzMfz)zz#kV z)V720HAN~hYkjj}i-+ur7DqQcm#c6iplq&*{Wc0(*IDQl5!GEqWTmoyg7OC`eK1IU zkPiPVc{^o9>L-YVfL{_4o3U}{><@0xWE#<0!ZfvPakTDuFNhn&v+(ba#lb3%Vc2Yu z(k4tpRaS60>fcy*EGn&Z%QfxeD>WZKRziNHS#%Tj*SedoZ{{y(ff1wnoD9UE`L;Ti zON*$)zZTf-1;3NPm2e^p#X4HlOiu*tASx$1BhbzX9nF*fCsw}xFzqZQ6h8E|RD?~J znJI)d2|Nc6KEg1UI-P3|F_IKy7RPfSyghhJfbzB@R11=xP{2IY{8}~`QCRM!M@y^_ zuL&aKgN~VOU-Zn|!H)s+57TtAhm%N^f#ibqgC2a(x_TANG{}Y}6|VBKGEXnBwIKU} z{z8pFvH#Gaa5Sr>Gmn+Z|2TKMSEHoU_bN~ETebWS5AMJRnW&PamnQu!cIR0#xiP6c)v-VO+Qo`_b z8-rJ&gM}nZV}OrWwT1|Ti-X`tw_oS2`+U_SlrJ{OCw59?|bQQO&kC zd|k}0dj*53E`@<*O=Vtd&mJilv*qCDp_;wTANix&Z>Nt1$Rp+X?rigMwSt5)0)(~X z&^=y1gTmeUUc7#h0oB|h^i|2VFBZFbkdctF4AQTvW~sj3>PF9TG2Q*}5tEv*gAQh0 zyc)UwjI!V@2sy`8PGV{)mEIvQ$S`5@q%ve{dxIZ_G_*`^`E`2E+GwG ztPgMMP7KaeK23YM)ZeQ1xap;Av2}sGvEY6gaX-tW`ML8k3scL#d^r#0I3&JxRJ-x| z^(mq4YIc)DV?`mXwS2RqZHF`bOwxMn^~GEhHC`=zW`{NfM2eBo{VkKGt6zVxD zWa(Z%)=T?JQJ+>gGyC%aIv?#?{5A?r%l@Y&s%BWNG9Uk!zcH}%m0+93}YX2#t!7MeeTyeI>RI{C`%m%dKhTAvav z*GZh{6puOE#X0o5Cjek5()o9lp#H(=fsWS+;N2N^RwM6MyT0-cNUC6v?zxe9t$)XglqX9 z1wtJ|0GxQ(@!ka#ORS?Xk0eDOIh`0OtX8`aAI`Pm=*K(~cSg=uBJ+aKRcrHV?%e_W z6-yMjH5YSBEk8elaXUr}WCNtYX1RqDkSF3`+lJj9OV@crR35`N4ZBuuWjh{+r$0ua z$r0;%x+@SyzP`I9-Wa3D`f}m4DCT}pV-nT4hxOZRbI@nO$(k!&T`YCJ&AMfPk)7Q% zt$QahU|gUy*b#r5At2W!4f}_pXs7xe^fa$Rt%&#oYwRD^{ir0YCuXtRsAgtlIO8w4 z;0&Rsuz1@aYY4BMgU(C)m6w1YWRI{xr8m*n(bmR}%AB4U{{Mu6d^^%zGyxm;V3f!t zoIrGg@C9=OTiKyLyb_ccB4EA#A{SD1@<-ZUoMrUfCcE^AfZO~qH0CelaE7!K=ovu& z!GuPX0v}N95Y}KWxQg)&2oE6HVMRm?M2xf}5mE-|ZJ`|>*Kp;jaoJvdKeNk2)tDmB z#Q?#Ul75h(A%m^oo#eW-_U0oecwApaev#E441Src>dJn_^!(v>YXB=K+Pde`I+&Tw z9X4UfrNQVtL9FjezPoPPGVelGQjX8?*!{tX{YZcDLJ@Hp$%^?e`hEt`#|tzcII5Nr zWVn_?%jfHPwS5;r5Hdt2*;()0dd;GtQ+tq9%fsdIfmJK3{6$Xr0B}=B^V*e^xfO zZi{V)FZ0DBhdo!ID;^8FJU2_M6QOm6<=_?!reGQpjtBG#ntX7`=StqrX8!^seTT^s zbhn(KDbeNVnl5*MRV}kLu1Hc8&Z`=Y8x{C1mY6W_+6@;d{}Y^0p8%)V2SiPbCV=lS z2I)k+eF4Aum!*7JtYsi?&tZvBd+wLDu;7lyDVFb{#_W6_!a52|PUZkDehS|XT97J{ z3Sc>sq;OXwP1gZ#)~c56?iBE`96=i*YsKoczk_>-ff!M32}0sfZOQ+ z4!%c4g4r!TioYtIvmO8V8V{8hivsIpAnn{ln>?B6eSl5K7O}+bZ?kfZ>08-1<^m<5 zH9LH=ndamMLXBd|HuBTGsiSp^V{l&)yqo>J*qM9$uC*J5X)f-y-r%1a!J7FF8n?J( zA{YRCi0&I2s>LYp*1zA|L53&kkeZsB6x%Rhehwx%`a0sOnLOF;+mJeX71 z<);3(SCo02*mG{au&aufw;4n4tNcNML>_&BJpa!d^%RP`F=+y4$AqxudmJ!19{_ zMYR?tbFeX1a7%$3r~}+_FjXZ68C_kbe5>i)W~Qd>+G($KuP*>G!YAe7;VGYhJtyFI z6duf&hr-$e@kcpc6MBACyb18d6e1czp+9k4oUy%e^X7cdy>0NC5psMHS7&qUdB6!`jncg07kc6Wjo(d=0Zx}Z~=K_sOX+z`` zwDPcvgIRswy=^k*QED(5O#(`SBnFfQV&4uqO7mN1d#9p=DQfK{K@V>=IjxubN6R_Fqpq!^tai8DP&>r#rp!9=qkE?N+cwq?J2YPz~4T(9+agf$=0o2^I>Fau1@s)uNLo zg&P+0>^f{6UPUqZ(Ct;)5ITlYA(l_sqi@R_0p?PL>yFGw-Sg{L6)Ycrw`c6ck+TBh z7?knW5_i|6mRuObf=pgoDvL>8D#+CeapP#(PG`a`Vew@_K`ID+7|7ql)JGJu7Ke6c zsKHU-17F_{rx8ymEFtuOHP%g13**1YLTfnrr++^JS10^NgEV(i|6|^Rhln$eR8sZ+ z{apwGNf(Sr8+Gu4*ZFf3{7RzFO-Z^Yb-iXW>yxOc98gNpCM%)&^tmbzb0wmKAzFDP z)!tEhtuiTi!dQ(Kh3HR=FEEd2|FmuERy5K<|Ld%P_k9v&lgq#7 zrVe+_#Xo(R- z6(6h=Y@fo%psecvu@d3Oz}S4NPchr+)2HWQ+d@UIFvypHH8!I?AtOPMRRc~}Ss?;I zidh0P&%BZK>(@h30As*x^SvEtP3~{odj@%K2wp>=+a?3zCc7mvt2@KU5F6WvuKaj& z7-~0|$4+8_L)!8uESZeP4{rjs>W$NgKSaW~#kYqBmip$AXmv{OxC7B%s$+EXoV-i4 zP%%$>sGsYmF~D#n9u8`a;XU`tC%cdtN;JK;(bn7I7HOc7g(1S7;c!#9Y02O@7=+?a zvHPae+{os5&+F~t@x4LayeVcZX)ubu@0o>_RTcc|Ps5V~Q}|?@5^%rlfrX;|x=*1n z;i(Bs%4lpleJio<=1w7_6DY&TSPEehToON+!M(((H4ldV{~)Tl9!!YH!fRq3f($Q) zelXdt1+Qvib~Y83AtYFZguI7Z7aqziC}f2kPV0G%Va#rhJb*jE>GUgWpuTH(b3p;&jN!Rgfm4sInPj5Ql?|CYA^P2 z8>p7U2I&)uSxM|~%jr%8gyYed;k%Q827}h2;Y$9tMIXz* zoJoK=Xz1oZe86@V4(OfHq!ZOzvW6jk19I1;i#27CCzG^` z{aC@+vWBEb(ga$42mDKH5%lLO!%EE|*fQa#YyS~q2AvyM87;m>&TK9)_B$){mvD4W zA`flbD{~RY2cA3Ob5nRLS71|Cfj38>6aWhk|3`@`&{&V&huCi-g79*1cmeHB(TM$o zw;BZsx1)3yd~Us6?sRelYdYVw`@S-sI67?l*I&}KFUQ^aO!DY(SKGNC#te5Ad<#PJ z^N#>h5JkH{%x}oE$2|&r@}v%r1bP<|e2A%VYrOyL_dOJ{`qg5huTuAgVF)Z@$6-~R zkePYzZ(RZ$zX0r&0YKP=^8hOx*gEIJ+5!yld6b8146$DZ2Cl?J1Wi$0q(~#8)x_i^ zImFf-OP9Rt5Lm63BN57!abd`Yg@a;Z2}m}?%gAH-kJ-gbJG;l;W9$w}H(Ba<^*GeE z$mW}OX?_WJfhwx7u<#{}3eZG`|2bma<_jTz$@R=tSQnjyd0X@6&nYO_5$!>}d=JM3 z{CL=qhlA((C^AwR-h;>mOZcd6)9nVES;V{%B>MXMD~Kx;ihQx=$+I|jEpRL2&M{(u z@E7pxLx8=QiWnLhiQWEp*^{Hu9l9Ix(cu#I;rsWehX!;AWB`V z@41BNO1=uD44!MKf43ypuO9l?fv*F1mS{NY5T`Xb*HIDkT~TrIL~OMo!wop<#D8J< ziese-wQ64O6+MR{gcR~R5pf8a0Vfd}^D4+85H87C@NqEn5z|Qw)2*|FW{;I4aI)W-TkV z-@A#htB8ylWhsPMhX4X%x_hFGX*aP|V(7LKw?FDbiMHtcF+BAkb;E!|K+$)m9&XVsx!1?{35 z@J)mpx12$nD_0SfYx$_}|r~f+wkB&Z6-ar!`p*t~G`?N+%TAJKeL}C)$ksEbj z(lBsmYH|{*>$$+X5oy``63sLG=6pati(C*#lAg}Z&HeqQmvM98fYRun>#z2OJ23x3 z35?r*7an3TFv35iZOPn@!?j{?Q!ut`_kcTY7ZXVvD4*xZs1QL4iN{=(3@CCy(Axk*Wgm2fJyBUj(9RH#A0+F?cuz*% zc|>LjRSp2)6984vF1)XU@RuHhxEyz9$0F-Wc8vNRph#q|D#<5E zJZs>+WC3bECP(kS47MWpB827u5+a^y$Tx8JK_q3aD^^lcLW^Z^bu(;>l=4}2?INZF z5L(vYsCtE6q$Aw8?89ukO9AEhEJ7@3^&73(uGkd zN_a)Ms8z59K%0og0y*%8uBu9@*%eYG_eniR(_9P977C5+-rsPoqz(F2Ug?Twld^Gi^)AXB|j)p7bWxl>x z6J~mHximh0KNT5kJ5kK9*sUYxdXO(b8exv3gbrS6dJ!glzVI~x_@V}Ul(=4kb?5Ev zoyxN#HpwVW(`x`qT$~4* zEnA4=AXqOb)4~|W?66H{35G3J7$^|0GB`9?8aZBh<2-f-_Ibpmfnd6riC~ZcB2)z) zVRK6h|IF;kX(`#pu|WF1fkhOLSeYT~u{803YtEF>!r~``z-D5b7aVNB;E8r+ANVwo zfq=FMlX2+Cw!$EQdwvj|4+78O>%4g16`i$6$9UlPx3bk$_%R~s^r67{-yy6Rob(uW zp4~K&`!3(03$TZ^88!lp`eY6E_O2;|;Jt+WDd#RQkn-ss}BYgyl@*11en@1RxVUW2Q00&lK;g;WW6$4ss<>9LRz z&WiKS#l2iL!f=&X7maipoYfi^JXOS-c84d%O$M%n0ZUJ%=glD? zuHtAY_K3BHR_Ylx?puc6rrshHSboFm5^6x+eP|CzlEBl_%)fdTa%a`0Vq^kg?G#~e z7k3Pj-=k=R6-7{sw*2J?Kz3-^v2L00M@0e2BH>lyZ4vWFq?-@;Y>0Fuu)?eo*FPEl zxTKNBl@&*&K>jp-R#I9ay}~9ff8=vAtHVW3e$mqjCq@+c2oRYSF)Ir1HfKxKUV_3W z?uZ))(AKiDvYl_Rj(#J;7uj~nqW&m0wh`;uR8&-YuzQ@E$eCbtJArD4fB6TT9P5DW zhSwHpyQu)+Y;OSoeV z99Vr=(%Q(&uL1nsk4V$##>RwcBMLr4h~?3~YUbN@<_D7N8y!t2x4N=?3zkG^mo!6b zNi^wRT{#L%O9i+Me(Ao4zULL9X=)WLUEV`W*7hmT&kwC2+zbtC05GBZ~p5>hNsUQ`n$2p+_w3*COxY;;q2 zepQGP17X7j-u!F6fW$zM3Pe~`h2$xsiwVMP7pB+hsHh;W`}e0~8`yN*YrX)?UC1Yu^jy5!c!_XfNqtz&$tmb`04>oS3u$HHEr{~?#bg^bHoVt*t*4{9j1-HFhnw*%p&1TE zA%X6Vs2t#sCwTZi%E4UBdC=o1;8>%D>;t_9nxUP>=@}q;24HXkCA+4Yu;K+VXJWDj zAJ@{=l|36bZUndCBrX!55_vPT(uzOWd`gzI6TGVJ=mc7TWMY^sApw3v1%5T~`(%7Y zLZ2Y@V$mv4Sc34hf`^P6(+gMwfvvHC9^@V>vi=Qw&&v^mNT&^Zjx0q^)46CJJQ;E=1mvIiFuACPeQWMtUk&j-jBn6JT~)xqIm zqv28!l0@Ia$n)B3n~oryvhDQrWoWR8Q+}-b3=42fO5Mf@?JH~618pXbl-Ylyf&N1> z{ybdz&caZtE@=7y{`y8ovC4uSYd+)f(J_hC8TpRFRT~Eu?pvzhYon#NR%8(q69W?g z3kjd%Y&PSgnQycu&jJrK8h0E7rr#)7$Yx1R)91Hu-Abdd^Kf$$9X{MpQ0x;i3^sqD zKLpXKs=ht|CsbCaG#;-JyI!!SNhiep)~#DG$%rEAwbP*q5VOOAhChJpc;@$n*dn8(%a7IoV@* zdMEL0MhSw(z6BKqhh_SuPfsrZY(Ztc4PO$Zt>n*p2;YVDA2B4(eI_qr$b)>L#}LjeuV^TIUOyf^(=5OO+k zZVtf;TU7Ul*n;T$wu~bzAA|=W_yFxPzT5j^p+hulc<7e^#c*$x+tGK0s}>!vFdh*nsu2Q?5#vhy`76h`_E+q| z8Xj*9VnKdju;eJFZ~RkBQwDEQ%m)ReO_0L;VfTOotU9SNtxS-@Jxa>Ttp#>ws8eV$ z^4y7p2E^T3LTuuQHut>gEe#pm{R{YtD9<0D2#EY5qP=P2&Z#qJQV-1^h(~n$J8b?}&b(nBKsgWWM;I7*8d z4xi<73d+cdH;2G(1n5QP9oU0cj$2oVy{ceK3(s^*>{sPDC4*u>K`IiQQM{s)P{*pb zFxd&Bcz{Kp|J6pYtFen{XcYv?_2dtjn6Sc44#67c$_eUJ`V=a-Z6;(0h&;otwRgJ_ z=*hwe+!E5+Agh8FB8vBi%y_c3*RQ}k{0}XDVP6ym*g-%c$QFni-uk|0#8DG*3_lx7 z6maZy{;oT(_y3*w%uMcHA^f#uG6#n9crV^MrW_N~9cB>6?`!>~}_xr+d z!mv7q3X>!FVv!;4eNINZgaYAOXXqIKL4Saq6>RLgcnC0l$+X8ju_?j8VG0I-c(1?@3o%=lS@_L~S`%}U z@RSeR`vNB$Y0A=TO99eg2gW0ekdaB?zlD^{S1XH1fUUg=LrvtdzejHsg(VyS-qx1E z0BUtgi4Q@=ztv{h|h@#bvjln1@-W?v0$38l@@%J0QmwN2w=MvuD=un|1gw6qMmE?Shl@x%!FiY6+FYaXHiVto(Wg(CGc?p`R~&=3$X2W^iA zKF@w{Vo!b_r-A{FGBh&#V|1=CdID0%C(~B-{7_y_N<%WZM`Aoh^#+TlK{-Xyi~(b~ zfWaARXAayUoszjeI@ApQm{?=MBGzn1R_0=#{6LUER_V643d13wHX0-jD`od-ZO)N{8})NjF-2e@WGk_(=Kw1FFmWe5rw z{4#%a{+|IG4r4`I+v^G&aAY8T2mhgxPNerEN(b1&!!gS|wRH_Cf7sYgqjgWyO=}T1 zJC2wRn2MMO0mM-~H{^l|5wbu)xCrhEs*+TvSd5-|4j-lfN!G!FlS@IVTxk2O%DriD zf=yS}GAX=^1gyX7$kknNcAHY0ch%c8VTQLy%Iu+`w0vnOaM8ddFCG1#fW^K4GIpRq z(}SB=M=RIPUsh0j&L7#VZ+>CHp{HyOsG=(9+|ij`!t4U3I=Zd#en)Er*r;c)Hwqm` z6;Mh4ztI@M0WpJ8gPJt;`1kkGvm+hj@=*|WDJ~;`3{Z&ZTwH`C2!*0B6&4azVsnKNW7#f}|GCdlEj;3L7P(GTDsN~a36I4FuKw;T1+ zbuVCYNDx^RpQBOiycEBfd8@HeSNhQDp_PNp1}=U?G2_g zL`?;{FijcAZxk0y>NJo#0buMUg+0~h&!5T013vZ9`Nc&Gz{U6gD0GN<33~W6_eRvY z{PucTCQ*dlguj{EH3%RLc9#0=I{(uQW1;X}2X)LEh>-^%`*@5q$f^n|955W4Dugdm zK0!Z9MXMHqq!|dG1oGJo4V&P(hdyr2Z}_y~lUVz8;C^9DUk92-xGgd#hL)3nOxB=7 zIfZt~5F8_&F||$myAHz$D;|aS!`+8zQOKQsz**s{23C8r|B z3hU{Z$+k)EHUE`mltSje=z++16jTI7WZ5goYl!Kf z9C{M82cuci7Xm>>f7^?;=n{}d@^w)CqB~MRh(%$Tit%A(*DDO=VW7N$mhmKl)vUO* zKA0A~PzeG1O|y-K;vV0+9JF)*wP7(apTZC5VDF`YOxnlB#%lcQrY23m;b)Lpuq{Li z50WfOA?ke8%!#R~)j*e`WZaMKbsJv;RwPyn#Sjl)eEh!Ozg1v(fv7}QnvhKz5J6o> zOG_4i-~m-2J2f>olV#e3vWcl2+42h-3z=X=Njh4k&9VTdzy%}?1j?25WRikc2$Bs2 zU+q9`9%c)qN&pWY^P&`dF1ZV9p#iMK5J2oo3m1OL2@ur?_xsqfC*WJ@z-}37x(YZL zVO;=SCPN=m`I9CL^a&~~{yu&C_Ax-BS~0Ki*hsp;^9g?}JJ&;vjZG8kjfqHs0{EDu z10%!=AXn%rH%)k;)I<4fl#{K5J#-jabHk4w01WWIkNA`XsmGSq|ME_7Mn;DAT2zC} zCW?Is=9hz@C;&kz6<-02ho67`)T4(9$lSDJEY`p@3p%hyKq_C~I*UMXLe&Eb3Q?&+ zfXL2gLNUNB6R1Wq*IHxjv_h~0&4}+v?W`0AOm%>3)_~q&RU68UMIvM+1%RS8B!ZI5 zk7kp&h+~Tnai)aFBjwK_>$Xk*GhOUR<#`p;0aU66hAAMY)a8SdkaPb1S`2&0z$WS4 z945Kjk(KJ~p`#&33M~Tv>^vmJGk4nfJhtrUFUg3>k9c++uUd zLDXv?5l}Z3+FM|m>KQ;QU+_f%!&>3+!%P}eJedJW8$drOn~+r~F0trA-UI4K6=|uO z3(x`Qol{UyedG&D2?FL2j#@slzaw}lXh1#7O|_6CiTVJSm%0htmy%Pvz`VMQ@f@ZD z1lGm#4GRq|Cp;~)QW*@kQs5B-t}-l)eAChnK(3%$Vg{7d$z*Q;ecwlDO5a6VX*(N>>UnkK`AiEA> zRE~U3Ecfu3)3)3ptE7=Oe<8F126(5r8HZGB@f#)pNa+GJGVMqBShd{IAd-<`YijVf zTO{9LFb5>AL{q8~NEI1?^6RDZbt)(--omzcQp^K6`;aYX#b za;fnKd$MAYOuwDSvhs^@BS52I1U(ZhA;fUvnKvQ{1E^kG_>d~RU1)F*Fd<7p z_6B?zj4&{P2u|$(W=4P1qt(MwW=R55B1j-S?Z&(S#vr&#DYyk_`tE|T^AaZ$GMGc| zYRD9(uVBj$1Q^T@LJA<9(|6rWW7!5Jq1mX#Npwb;5r)DVVVji5-Q9b!h6Ve<$gbl2 z(il{DniA)Gm2e}O_86SfEgmHDWGeP&Gm)G2m>gBhO#5EE%kVyF=6 zwBr?gIJPw3ym90C*;l_DrSISh^&yQ`%2-h$eW{vY0c~Z~^dYcZE+I)jm2rQ9ksCv| z99oO1sC-`h1f0CQ3f3JZj}L>|Hd=~fMu2lfB;p1HXjB8~tGTt6jK_dWGVIx7oD`X0 z-BcUE6YWFaXL}v(8tK5WaZ`6Vju-v%Pn5JjQEWea$c500mhk^qd1LPu9l8rFGE*D* za05MB_I=a@s4fyQP(=uA1;q_L&4CXRT^8AvZ?aJ33h2K$kLL@!rvGq@V>;YnE0Q{{ zZTYrK(t!&_>3@l1gNxBx&BGH%Wn@fGQDKEW8!i$$GenPgTnW|rY{YaF8oLV_ahQ*i zN(_uNxIWQMPEAoNwfmO;8HKu$ZBe9D#0%~p93=MQ>ScMkxeAyS5M`Alp~ND!ZvZJ2 z>PhX39w3H?*aF0I?{(1=m?l3;LXTO*R2{Y7^K)-!=saRQ(oriRiud6;;jORb6GT^dXEoN;EJOYd&t_v|s|AGtIIy)nH!m;DLe+3%VkHUB2@`N%3WcIwzS)PS7{hBH zWJj$GeId*$CG7jw;SL)dU%ist08l0YC@-clinfagFyZnXjrH)S0A>rvOG1;OjNp?F zU~r+js(?p}m~L2lM;bTY94NC~Z{r~L-6>!b3y!;%!1@h<;;3n3Iq|p*K-4CEFOJ{6 z?CfmPBfeXYjSJXNUD4XAW9tei5?N4nwG=Sse_50ojjz3f1AohEBS_dX|BtS>49jwh zx<(PD1r-FOMd_3VNlEDzrIBs~>247L=>`Fj22qd>MOr|*ySuy2eD>b&Ip6zT*ZHx3 zY|)4NS@&9V%{j)HW2!;Xakyn_^3i1<6)A48kj~a3W23XD^DzLEDm^6z+aKzm%?49S zS7b_8y88b)7=Q49$Z%baBs5=waSDt<5tlaLw94)jdP*M^4+cZ2CTela40N-fa)+1G z7wDZ#@l#XA)tF~%6skY@{yWn`9@l1S=9x+FYz~r1Y`%fTtLzcaxkEQ*X(3o@0QtaD z>>((!5O&3*aM?%!RqzU~S$OZNsEUZQ4Fo0Vh(hJBK+7JTnAi@f7>p&qp$~r%lvPWK zGLo|WAc=w6u>+JE2!mD?)EaP361u){h-1+?6CGv^2Xap-Apw#cWXzl;z${9EKScnM zfHfe!1o7a1*t^KAek2?_4#>42>;?d`eR_HdnSUezP><@?(l$KN0_%2>fGab$i-%XtMWML zmFhW6$U|Trh-4DZ+c%iV0DGyeyW0fN1PBatmnaYg%_ghM?d70r2+0h_@j*7E4?+`2 z8q3=bfx>?e?G1Yls9%A{0I3oPdoHf;e}{YA95f*!fabv8|NE8>#DOW{;R+#mJ`VQw z;6{QNLjpllg%)XibQBOAAmS{nt>M;|cRUeZ=dHBHMmkLTk+J+&x}(0ZHR7d!gIwNn z#EA`?deH{@*{Pm3x}dgELv%1tos@#uw34U#fiUDepJ{&Mp3HONUa`*RzScMTL+jtF zJYK{1vxeK=qi0EF-h85(QRgh;^|4-OmB-S{kXA0MRoMz(L)p3)(r{w=ye@bFTSMsB zE&L^$_g!I=&@qkb00jcqnmWy=e8fV5V=tof#+djI0QfMz)D+|$&AKH}U4m!1KcHfN z!I2x3o?QTD$is^T#BL6&IUiDc1ThG&2;wwif*m6J1G*J~8-bD5IbxeY76ah|CT)sK z?>(FC_zA@xB8!H>;?F=f3I$F!L@HP$di%g?2}l71HV(s|I#|bnu0o)FaHlTA zV1!J-y+J+R3tE1}EbKYYBPfT#;plI^IwP3fISs#5J;?UEI8y)V?b70TK2^j{d&81UiY*kH|xt{8Nz z#AeU7)+cDbpy6W)QVn*tKlGsE_w&jcH`R-M(AwmlcyUysZ1iRN%Lm<8q=L0<#Y&Ou zggtir^x=cT3Wg&e^zuwLeS#GY2KAkW41e{cA~jBx<4CpyhQ7~#RnUW;t8Wq#>tA5s zfWc#n_(yo|6)HKsts_s}1@`Ch$;rC`okNf?klI0Nq>1anx>8Pk3Z_Aguw&Su^F{^d z6=W0$^$#d6+Tf%@hNBPN6Ch~A#R~nET?ALOx{Ps#-QF5NdMCh}qGMsfNbES+s{m5P zL`}j*_zvtl{GyzrOUSS_jGl`@hyz!`(mtbFND&c{4pN1C&@Kas17vp`kX3pt@rZ!X z8F;nt1C$gDklG{CE})D!pkg+5hme2}>I2)d03WQDuNDG%vI^AcFxj-&NfG9=BGfuG zFs&GB2SkGg-Q9^@4Wx(gJ6FhcSfJ)c(}5S4(T89{oVBH)S(TMN)~Q2@IUIs?ek zkr2|0k)UlLeGE$l4G=>K5MLfxCxB;xliCG8k6suQUOo?KP7lyVgF!ifG{r#_1^b&& z<|eN_KHp#B=8}@TvayH+4Z4aDg0@5++q6AfK(5XFAPPnyd3-a!fF*#^R8__Y=8s_9 zz72EL{R#`25Xj>9?+%f;`m6H5qNZk+=suixVn0KbG&8r{UHR$xt0!<~>eI@@4+Qmf zcE$Z)N7l6k^>~fGy9TF~9g*Z(RTNq@52=S%dYrw?ldkt4_ivMH2(uv)6uNfGh>GcK zcl%S)FJ;HL#vtW%A+a6Vzhl#T!{@_zy9dt(9+IXv`(2WpIjxvi!}eLnZRQ=re50@A zu4_3WD1;s^jWy@coPyQR2_)?B#0!wwbU49zsz1wLaL4VD#G)Gk%^h4-eQ%kz>)>8T z%vXSVav^Mp1fgGnC}j_wL7>7eS+zsJ{4$D)IZ!(x5HwI5nE{9&aFU)&gVfsGd=DRA z0^kM6D}X-&p&7X4hOyrm0cHg-C&&sH%TwV4#w)E@XpgM3w$O^eDP!p%Qpe@Q<9WJr zAaf_VU}aCm&G8#g>@Es%qdgkrNF)yiu_}iwMYm^F=~RDw)iWQOmx7BRGdo*?D_N7e z<=&G_T61~~7w>^cMbt3Wap(EHSHHq38Y}(ii-d_jSzVh(ZFiar6H4!0x_67Sr1J%t zHW64z3;7VGJ5zEz4r93~*j1n2Be)i;QBgn}BMo8h+%KpMWNT@atAQAV zVe{+56;X-;I0UE^uFaqMx07SQ&lbcebHJ6HGgh6GPHnJ|JK_4zjJ$t zr-&)$|ME|o(n$Gd2(<RTCN13hId`Boq{i;OGkR9rlW9u{PiTk;Jc- zz-bDxHV1yRqF`BZZ^w%U&JyoX@f|Y*eYJ3@J6jH?Z=dMOYvz-s-*u>KjCA^YVA+C8aZsQg7t<}DZ)d2mOwau9j7LYt{kp7K?KnLPTBOT5p1$&?!4EyU za93u#7ymA#^7D_bN)HL4^gX;qIn3ZVxZ|QB+A>)GN^6EaFx?sJ0U3Ba)pSiEU?w1& z{8XZ6Z=zdE4)@tIKumkufU@!dT8o(b1fV9SU|nX|Cx|AV`UVEdR-q|CB7u8;?3Fj@ znGmj=fOSFh4e0rR7MDmwDrC6f^!6=N-?0|@?iDXdEgBLDt@GBG>8pn83n)ZPxNM%>UitR_r+-}B6imsNTA3; zIB~#)ImFO(kVd7s=?sb=9!tOg8emym&U|~MukhV&LiHrwPl^5!R|gnqNIonP78!tO zy*4+``zKC>!TB$^jpV8Vos0DJ^ni}vBO-dWc1wSdKIl!5{jg#nx@+6Ec+<9^&mUaJ-E=egk5tQ=$qR-MGxS4hRgYa)ZkH~c6JItlnw#rnwjYCEk zZmSHZ%Y8~TjM0Wvdm8)|E{_g}X-jM^sp>mt+ddyGmleNp&M?|&3&{>;1;=pFX>V%7 z6^$5I39lOHV*|Ly5J)+I1cdH7aQ^{hc{H(GTZE8G!+olI=7>mgAW^0T;5Qg_N|4%R zgI*9(!ctB>MbtRBK2uXu7U%y_`zpwVGDuUEZ~UR(k^08U(oztRbbxvq8u~-M9klfv zeV1MPscTHi2GiTOok~B|JOk}oQq}hC9V%V+(97$Rg%9BZ*SvLk!MZgmzdT=j9l`CD zPJe#TLHwymCxMPBOC!$dO3Z9o_;VYV1&>)vWW)8`!cQ_ztJP46SYi=_=|=x?zjvY4 zL6&titah!}>ct)gAvPdFy0bN@9_4Yp05u^L9EhnxaM6SD)?WJc1-v;5##U1BH3GLm zeIug-l{q&(=_o~nQs53$)(8O-q8Ae|7KE|^LgT@~0b-OX*!Q&6dn+J?M?{!Hqb7s^ z1o{YTfuR2f2l3I+(5O#y&H#Ga&y#T!B=LH89Unb-RP>6|-=X#Bo|8v|W|ZwZg>b3+ z<@-m&7AK{wj>$h}{~nc-j(kh1G0#)0aCpSSpUm;o9RlY&c*S3x8C_jkg6q@mxm{R~ zIr>k{_m<(>c^CP{l_edAhMtAknv6{I?b@Ne%@xJB?-cRXdN2_P-WXyE5D1J;poJ10 zu1|o75xfE*jxdloH=ca>Ts+DHA$W4vhrSS?HW6(_^1(nlZl{_iB9RgjO8qZ|10u=g zzVUMKx@U4yN3#=sH>fiHO)yD(4|1TYW4apDGt1$dP%iUrP1a>uHKg9x+c;$Jx9xAS zeMnRhjluuM2a&<9?I;*~qj1Q&MWh7PKWk^4`p}uoZnTH|f;mOhLX?T}{8|guQr}4K z_?e!8dgo!)b~*2&d>6=LX@EL|-K|np-Nlirks*qLn74+|y1;-FfR+)RDR8Ol8yg?0 zymqJf{}ftD;S%sp@0K*eMn?<>d|7T0d*F!=h2L`%6B-EO0NsKf3vPadY7~&VfA=r| z^R)h7>La25fFiL)zcr{P&^=$7#WCI2~_@ga5$eKiBDV0&keSV^H!%c8t&T|-V4lxgm} zltKBldH|NaD$QJZ-@RN8Guwf>Vnzr`K+5wD=_ydTEAt3}B6&e*g zJ0H{2OVeLNrbCUW?9hoxNahz70uahBWTkS3!F)+ydyTw5g4td_x6gfop>|3C_)J$BV4{&inK}BV_j-{GD|DOjo z1C{~+%g#^Ou$$gPTOb`qBh(K0o1NX=OTgj)v;i=R-DZK@HW7b5W^RM*<3LT>9BR-j_Ykq1@)39ly8t0 zApx)w3~2A{`g*}^?(cP)e*`*nWcJ_)0%O53(9!9Br~%s=;Gzq~4``e~^s8-@{{QNZ zpuGr~1CSI2!uI)hy&x~9CNhKN^X0!cHwk|8pN||t=RAW$*1_G_G<>j7T${6yIROtvs7C~r8$ShQg2txsOGckzj{6I1* zN+SVYr)E92^Ho%0YMId0jdU2HQ3_gX~P4`}pv0gh`}S_$~_-`a)(ql^cZr3lyqQo(=X3;OO<@8BTw8)Uox zJL3h7Aq2&a4otwLu_wY@w1|j_;}T}v!3$(l_YLQqJmr6@mqA>%dp*j(eL~l95z$a# zJNCtfcr`G9>fkSmxU#a+*1*l0ksX1a^t7qf(QZ{m#qC08Q~m>i&OCiqbia4G2Y*!_ z-cotKJ!oA|>!qRYM{`zjagcod>e7$iurSG#6*X z4G4Z1aw4xv`Fn^@5P2dpV8I2Y9_$h)EoUo~8IXCXYHR<2I8drt1b`1T6e3zisCP@| z6(8P3e|q;(I(!)Vt(+TRp2q}2TRhvk!#I~DR>Twi?D=q|hQz|knv=eqTq?G|)6?D$!o?rny-h2+fQNVr{ebV#By_bG->}m{V*BpB=f4kZ za6pX&&ezhEjd0&DLf%RX_>^S9APBdmK+uFRDFA5}kSBm>10vRBM+Hk_^jKU7@paK9 zpJZoeGwD>v0M#4=gN$amr4Y}J{1aU?r=Ja!Y>@Q-wFXEfmFg-sE)JR+xTWtN?C&F5 z4I!J4xH|(HUywBk-j;fF7d;4>au4I51rs&5wO#I$Wi^R7fU9Mjs<1DFcyOTU$e?*^z(Ji~hH7K0EoBViPEz5%1?`58?l;qhD@* z{@k}tmU&+^@`sd^2LH2;4_Bh=8IYXOeW2m=AMK}_nv$AYfM!t~0}?GYwe;yV#IRt6 z9Fm~N_s|t=1KMc+eXDbOdfLr_`^68L4N%pat(&aFMeKgj8QnD!Zfg4eXg#uhv&p)- zJ&PJiBh;y~=mGbF&W1{zS&i7 zT5(~{nvdo+b&49;vad2TGy9aE|2{vTA-`b%)%Bs|lvmdKq$FanDt`Aqd~s-;!VpZf znp|L~t@__R{pV#qcs4-Zm&qcxw7q_WT|tlh^V7S(c`sjhn9v$%TyLYK6u+P4p8rgF zeqvyio>rB{y=E-IyWGG&VUi+X#DLsd_|L-~*i&!nao(;VY6?0FzsZ|(XE zc;`3G4QZX>6C`fAC0xMQ5leCq&2b(d|IbPNXE&kW^1Bz3JHmMP_U+mBe^$&_Up!-o z?wu_5+R&E$Gt2LREo0nFOKD=?ar^v~^Pk$HGnw#9VJ1}{hRS1zXKh{(Eqtw^`%@4f zmxX(C=Scmq@{Vd~>=^?dG$8W`SbcS&T~}HgKq`w*{5q86zOl?Bgr3;vDI|Z2%6V^! z?s71dOq)g1$@zF@_x-*E{sxhx#UGpB#tz7z!j7Jitqsl#k1FkjQd2ayU?jW z{pdPXI9Al!BxvGy0itLg)_Yt|MEvK1eNo>0bjx&^ zeYa4#ZcM*|Z?rrw#ap;OHnWz4M{Ywrq*f>~0F4$&sebO^dHnT2Q3TDeWFmJj40gLD zG7pL)VHMqka4&;0sRoMI8hyHBYrS#1N7~4y!R}?&#E11%1kF=|aU(T-?mT}{y7hZ&wTdM*w0?A^FTEPiv#Io6!E`r_M+cDrvrbC_5vyxiEMcv}&u(`#K_|Tv z6#0kjtC~1ll{tEswB6S!K^?aAW5)~9KQ;#NI9dHZR4gI?J@LeUwO_wAB=seR!?E*` zn(x-O5A!Mo$6DL~yx*Y4@=12fsPP9w=l-mxs}<7Qsv{3x{T&dT;0{%YN8GPyn`9BYFO>gWRlH5+R#ry9eIS`}60=k-MA>*2zFf1MVDB@8?pcNPh6w(*&w{mc*L?zdLE0LdXBVS#PyqLOfP18L;L$P=#jdQTG6e^9g zbN58yR<=xc*(uwH3&sx{8ubp%+v#m3g1o%rQZTZ_SD$;>vm6zkWNrP&lbr_ zX6$VB9{J92^5>p^i+NXodjtK|1Nl|qz3Rh$z5CR4#ji&9-8Y24*Nm(PdwyIdR6@-S zskgp;ws~1nYq9ywveRfzQYpa&Z3V3A8R<47Ol=l^-TK`Djl!P>JddLb(BCHn zi>}IxEmrVa6$OavyvsX%s9RskyJ6jCBm+BIIsfe~i9cE8^n}xmw>62Kvak~695x|r zTKN51zMJ@#%ot7gOV`VH@p{NtKcm^W7xgW=(L{>>-X(P<-~6&i$=4kzv$>qj%Z#%? zjN<$K7d&DqNg=r>vPpmpayna0bZHT~sgL z9(`(Em+?F$KC-RT(R3Qo#0Y!!q4W(!y{}>EE8-^uHaA4($)1U<$T3-~!!p95q!tmr zDYi*adokDRBJsEHYp|0lef^Eq+;YkhYv#5E2D>UHb3gOk3xe#9h_54huPeCwm9DV4 z3w#@QMsv9+In}&ECzl9L%7uDQf{k8V6Hdn?|7;ikCo`}Mf(hYmAYn#A$H2${{#=V9 ztC#NZMs7(7$RtlV{L5rX>p$j8(p!9sDzbLNA97!^kUDV~pO$=lvgL)deae9! zJVkX`$V1nD$$u|oIP)+hv#$L9bmLo@y|mT|`v=)$>5X4U&1!!=;Fzagz+`4O`u(9Q zb#k5X-hEdVLZJD>z2s^WzsmlJn3kKlj&hUft4q zGf7v&yp`Ld*a>V;GO|zFJx8>j29j@6k=+}np&X{$AtC&on=Gk%)^mB2_&X1B)AG#Q zO2M1S>&|y$?XjNSTmEaq(9|j%+mgTCb~@|Ul3s_)+TfCM#Esh`*ce`78vS$=#VQU} zElFSI&PC|RLCwi()_u`Tf{y~H7<=5)GA$cC)UygjgWu=Z`EE%ugZ&~NaZSQfb?S%I za~$kglIMwMOy?Do3OcJAAJQu@ZFSh4EU`4VpA(-rJr8&OY+(DNZ$}>GO!oE1yoCVm zyMxwO=&O%dD7T|@}5i#o!!or+#`a9D;oE>+rl9$fNwoY^D zDDH;^r%;wz;aS?Af644(yidQu&sO2U zuP4;Ef_lExm4Emh;%(A8?C{qmFw*s>+t`P|+%m!7KCD}Q8PEPpl+h)b6mklZbEd|7 zOm>Hl38Gw`IPC*JSbFg!1{dq}gOy>6)7xj7>|X-*4{OjqAC zK2_Q9TUeu)XY1icx-c^zzB00{PFfile@AhS=5_MKHvr>~vQ8~->}Eq+U1JZudp@Ti06+OpPh_A zf(UEcQxO`{S(&Wd&NEB$QBvvm=*CM=f=z3DD)|czV%B4UKDD|Kzryog7pW-T*?Sj< z{pjH-iq@-yDp%hwHl2G_8j^_`M#Nkua69((nuMvMqb8OSXI(SdKKJPbw@mh(UiyZX z*9^2zthixe-e(v2y=ov$G9=4WD`61z4mo!q`1Yh4Epq#0IE}MH?hYhov-Z{aUe|eU z=A%?{Mch~SOHseaJ`noNq3?SyG{d|uc8jV>r#9(1kfPuoeI~#WrG6a#tYhOw@)0w;|Ke%-I<~y zYx+|k(|hLUpbt}aEE=n)f5ko=O!bRUzdyrEY4O5wN}D3tl-2G+Qc^BoJ5!%{)8+DB=s6Yh1*cke&x*uJD+2l=dwK`$RqbF848Kt4-g;(Us&CF3hh$goS zMqhpq&2|VLB9ka`Y~Z0(CcKAR?lacc6WM-0w>%?3D}r>g*ywrqp!pl6^T6{5a0UNd zmT)T^KAx3dwC6RSnmuB=vx57rAZ+g$$>Po1TclbHPaP0#4q^N7b_B!?8s)Bez*DdY`B2Va*(i4Xa#zICY^2mUjVBUVz zoF_J;&&_SHpxkX>%53m)>uD? ze)%Z9UZyN`66Q!~Z9esC*s!=Qyh?)TQwuG#h{g8KL+dW}4N->ujc_r;LUb*V3d-sU9mBn+W zg39ZHAao;@C5O-0^L?%o&0eiVRUf-+#LjmkgX5iCbzD$~Bku-{+L+RxBI?SLrVMFs zfEL^&UH*YY^#4|BvmitV0IQkV*wDbl2yiukzUC3~bMUJ}SgwF?fvBn~9$<)o*nEff z3bp*L*YeiZ%-eOxKV25Z2o_xpV{h)^=y?YHlneCvR9)Z=t!dw#G+cTDS5qw z@Fy!YxcvD2A8ok^RcWf3JOB6saTBxVHILcCot7C+47J z`k=^FzHEtWHktgLjSTvl5^G+Ejkl;H_P7N`6&-P+O8B*!U>He(Pq&A45OetoVe^4` zaGze7hM(T@xAgbQJUP$tISVuh42npS7(QtiZ1;@9lai~s;NA1u_d_k7l_}hiq~&_BaV^i=^W_R$5I7}A zCa_f)+AwEi8}Psx$SXMs+Bu+1(P{=^DH%3*VgJqa|Ilyd0UmJU?I}GWQW5W$Y zC&P$w67J!A^IySfw`kcj-x3t4RPLn zQX{GFep}i-oyhn(r2Cswb^k_+0^>aljn`}%98TR@R_CuRD!d@VKS(|0bSm&&sxG<} z(1ki7fpfcD>o1D@XMt<3iP8o87zSa8r8^kUv-Fqi#A#TM9KU_}A1y%B;@7_xZOyA? z_fqW{ty@HE9i_#bY9HUL>6N@pvKRFx3S|%vg{2NE+KR!_aqv8fL+jJF`mHh=MAMh- zlW0)3RNXK5{LbAU18(mI>N0j-xcykdlpOXm|*le-*C6)vYO%2DUeu*t0PIft#O;U_VKg`Xaq`ZjnG-#A+h5Z4Rn z8WT@0y=#}DbZTH;@Y}>XGs9l+5P$t0g);?&fCnT_c*$ObSCp#o(oCL5oW5;(k3uM> zF?#+or83ZvpPMP=Vr>dDhHmw0T<3`gdL#l#z2%=-U!Nw+S{DQEoTcN{S~gXI;Py31HFQ_dKo)uege z#@JRIqMWaN)g;a3!tCQ{8m%r4V2c)w>@?;jW5FS%jnLDGyEaD!^T{l&nogAMy04)C zN(ffoHS$KFZ{YgV#F(w<`={{tc2Ez_$VJ##Utm8Qo5>^Zxpr~Z%>Eq zl@$>lkJwm#`{;goC#rQu|7${lS>crU^8pDJElX7v8ZjaJK>ou1*ZGY~HTVTpagb}= z6Fw5UFJp_d>GqD>kTPhj=;a^vz9YwMy(soYB8za3pw2en{NK?Ps0xEu{~>uy%fJUXZE3OaZ%4c(W*bAkK^1h&=gm?3%hn zz!f`zUGRp?BfZv}x8iFQBPu8MrA8KaZ~eKQeKCEy^;)2R;?CWqih%>!1*{a3?u}n* z68m2$@<%Hc`04Mv&^_TcnJ3}wHViKZUBy9AhxZ`f{2}+phTvdAS z)QfK4BIk$kjOOsQhwTp_5}>1}O31gjsw6|@oRuRGCWH6Kx2U0c)hwsf4G&|U;t{XC z&^ga_(n7l;Zv2}&>Jp4>+#5fQ+QbM265p6MNQpJO9oL!)pCS)D{}c(9&{Aw@=9xG6 z#W)&{S_ZCZ*j$_I=(uonX9v{&4t=5yu)}?Bd>e14WjSU;<1fd582Il}6z->AHH!of zP;>g*jpKD_Fg$=nMKoZ7l3G1A6lxqdZqzJ;UYCRH*34CW|#e_7JEEs!3BLKoSd9HCEk|>QpsEO=Qh$aq2b|( zVOt2XEzl<*uR~Zb1I4@jLq}E?t76KH5vTQUP&c{)IkS9fdq_3MKGKuw4a>ZVT~>bNp>s@_c-!xnhmvK?OYycX4CT7~gx^w=udBTbIAgB`12hU* z>sM`TJChV;?KIu4<%qe5N%2o7ekleMrhlLG-AxcBr}YCcGEepJ0ZU=nZu6AUYWdoB z>B7}p!-!4n*i@9e-x?ZZ-0E!SO9ajaA+G+vB^7Lav^Pt3;)S3DqG?_ z{A%n>Tu`4=x^_N)lvnan*0Wg?DL+)`Q}xQth{Gyjmi2E`O{^oE)-P4}GNc+HpZ{um z8CGUx!)&sjL)5odA2!+0%6O+iY;o3EV6656cV~zig7s6)LD!XAIkR833fM`lo$gP` z9E85+z4*(rV8Qonxtih;tleMTp-Tfpw4g4sN9p`(6SQ0+9Y2RDAK;*>e?nFNh-xYC zoFR)h8`eL!L)VrOva|ID2!7i1W3lt@n*CmE9(H?|x!*=ebaED^f$7 z*^Cd!u2GrZGDlZ#pA(YL@uPtRhB* z9Q^N#2Zb$`Ex#2D4Taqm^OvVe>B?ndJab6MRhY_DpJCv~d=1-fTVVR~1dZ>K)sOnY z)BnI@jL_y^(6uz;+?s`OUVv7q8$KYV*acJd3?;hUq9S8xqKD1C8{vK7U$a$>P%_qE z?8!>c)a-ZjyUqp@BGIw3LZ2LJd}lL=y0drTT6!Zr!@pg-kLXR_Jv>|teiEyaDS3gO8CgTCTG{{H6bblKfX>(wiSeajtz9VFnc z!EVghXFF|14exH>DdW&U-*^4^nyjP`=J!6NE)g8}u}|_?x$>W-M{JL*Rac8JC+=rT zcc9PyDp1+oRo!jFo=$0_OxaD?o6Jb^n)gE&67JCP?0c+sd{UKsJK6HxRo8M=sFk>D~8KTX0A> zoKHiQLrZp_9GbFnbhiw5aJS^PEs)@8PwnacnoTgdaHZ~goLkHook6rHe-h;~kfHm* z)tEq`CiMOA9psN!>7yU24a&-_o2oI7m~^)(zocLS@EL+f{^g)in2meuW}|`S&yh+E zhDNprlBPluY8}jPe-{&5RD89aS0O!`3M}czkSYi}E9pe95g>1P^9&0A9qB`<)nyz; zfwaoo`Xd`@`*qQ8bH(aDS2b%Ie%Z9UzO`*wu-;LQ3HNiB9;yHKhzL86cH56XJ%aCl znPqttvr^3b^?#*u{<)lRhKHri@Ph1nJuz-+4PZ$o8323!>^}ee!%3A0)A%}I zd;VT(b;@UHZ-ez^yljscub=bnwT-HzoLtNMm#wCE+`My=P%TbUu6uvYOc(THlf3w` zM<&Jl=TR}Pu4j|ae~MTqn&wg5l3WUJ+FFeUD0ZJn#4;&)a{7_ zivpG7Yr0eSAnuC3MA5GN*B31)83TFfDP&vSi6}4E$IK_}F7l(vcq;Qnu!Zujbl%$> zTx%bw=@9BqpzWjUCHcTxc~q>BId|wEz$!1|Eqyzq;oaf$C1KJSa+k!uo2>3-hYN`g zk5;k>Ga{}~0OyP07imaSIAX=K33MG-rLzkaoGL|x{i^~WL9BZJe6a06%G zu`1N&K;xe$j$C%&E11z}yU!k#{^#>v7qVY>n9%@sR-T?#_iV89y~|`a*qxkg4f0tF ziK@x&{flLhz}fPHDS^-(9icZ*?=B{(!GBK#UD!`SvFPV}VCq^qP^4%#ZxQe0a8Ix>|YcSt}m zEzoK-N5!`>wqEEm04m|5GDK^J9g=>D3I1{ z;2hPE6BqEdqU~eMy+`8pc%R+W?@4>VA!Ns>VG94`Ffsd}!WlW0d#LHmyDNUYTy>CsZr+~1-1fZ+v2m)~DgDQWpEvQCks{%v*a88826=F9 z%;Jh4&F$~TVzQTO?9#dYtRLcpzROQ*7~~0g3Gv2v=}cB-?Z}$;hGisbJzYuAs(tOz z+j82gYa)vOd3R+Se>qsY;M2z9CENnTUf%o4;hY{fTYcqxyZTm?V+k9_y*Z&Mi&<>& z6I~pZm?4?)4^oAp9C|xjM65fGO0xLVyVT1Lt9HrulK(PrcT=9|G*>}Cr|vlyXQg*; zq8trN^~xjq--IGL{Ro597bUu3lT(Su`2}=@q!W``VkN^A!)ckBQ-b18H&$hW<3H&y z%u^ID7B@J*keNDJH7KlGu(q@@%h|BQV{7-lSmW6u83{__&JQoUEwj*X77KJ7B{R=J z8Cg!nj7u4r#m~x|8x0{pKUDLfRB7Uf9HIqYj@6qxV9(0Vg=nU||24eH{P&RNEa2m_ zor`W{k)bR)7zUrouBj_z^_%_>3oelBoY2xoWNIgaB z8n+4-8oXC$<|EdUka6C8Naw*K~iHp*z#cAAY{Ajbn78@WfmmX6jAmh<(J)7aw1Id5u+>||Q!i|8b4Te&YMIS;HhWq$RqC3ray zP)ZAGh;N5nZWuGEzI#}`-R(#DAF;q|P>pGbFsNe4U$$@{Gx!dU^R-kv%(}G+wCNsE z2$j;?r@a<}DDmN#l{4L=&P>L}lin|#%9jT<^cHLPyVr-%CQt-!<)C2(rnsl^YiS@r#x|vvOuco}n+d_XS=%R+6{;{k5ax*5 zd2oCP_C=4KeGD-L@^sZdO#jwjrI`RIX14VTgD)uSQTntpYvGS3=9iXTZCsbKCuERt znU{1$#Tm=+K`e+0#%9UY8~4N^W~!c%1K!5Lsk~l(lR)!Nvm{fjwb`S(YzG0Q4C8}-Re|?8 zz$yR`_b|GX>ij8Y?b`+2+bMVoW0v2)s{K$ti`bf)zNCC}A$D?-qhCIdrGf@%=jiSs zDU)^U9kJ~WkP&35okmui5&&*X!*KW_Q*v6)a8MG8px2Mmfe%`>a~ECnqh&K`=^SCg zj@jC-`lN2F?L6riWqN_Q3A*`mj+N%1LrnV4&1=xw9i3g?wwn**iAn_qHr-_ogQarD z@5bn0Eb#9Tl0O#n$9GA0(NbTI{ScGeO2A4XKx3{s)4TPH=kZ@dn`bml&T>dMOdY+_ z2TE4mZFZ#{gNb--OR`tm>!<{HeFv6v`fKaLm#pi&2{?6UjsAGy6;z=HH+>kQeGeDn z!j+3yL&Q&37hIz6)4x~EO#Aa++VQm|TV1Hg+cegz zuRiU=8-`mtH`B3xT$|#m^BKt1yQNd@k&Ti|9MPJ~X(x$^DL*Xv)8HF4Ct{vl%c?qh z@auN5*SR4L)9U4HJuS<(lgQAj{O#iZW50vIi*~V!gE)+eit70~!Y&3ZZL+;GGBQ;3 zd|Jufa2GEIIWW6p|dF$p$G;f1o~mOi|^@i)G!gw+aL8r&%P`v_Qe#bC-OZpxph=szY@T zp>@e)<28qX*30*E8#x&7dC@!v0!Io_JFs+HEsB3?#kb`ykVG<;0b27+wcK6EVMN~L zl=_p}X$DsNZxi#6zh)LNv6bmNcZaC^y*O_xWMjM@SV=Z3o|Lp(@E~Sr$gZDTAP9dm znmXX6B05lH6TueWFL4;`8NBACKcX!L@|5hwr5kR0657!N>rZ9XNziPz?fsejPtIGS z4^F5)jLL7+c=#_^J3bnS^ZW_ej6^ohLSg5fd!&5nV~^8uW51DxIa5JC2a$Q>2gj}j z&`)0z80dsgY}?m+Ow1eggu{}eB6fw{!ufZwh!sJ!(Y9b=AuF5(81}FEc)!k&cs&6S zYh|Bbj~d#1&yCTNPCB47F}%kotgU#CBzU^v#IKN}^={>4ngl0UY|X){w{ZS&({iFd zS4%Z$(kvR&hO@9_#W~km%5fQoZKN{CKm_GwS+9^dv*Mtou_ z{Tu(}%dhS_YDbp%*D_c1sa@WL<&#dkpt27npt!yd&ol?XIl~3TmnDw@O+omfvgIM? z;Dxw+yHwu;oEnUVMufscg=+%mX|a};yPz?eUbBrkjn@T*dGVwI@Hhw}kjbM$k-x%o z_0yF>o!p`1+_s!Jsu6FVSnC z1xcHQh*`b9GKKx(mmHnimgQfoolGkYst{B6?(8Ec>MnIJGe-gsKQwOV#S(dwKY=Kf z+U!&H_88dBz8@L{BAR;&n;Ac)lG(~Hgih-7_XE7})cIPbwZu9Dw!>e(0k*il{AtJL4pqIhRN8B55d ziMB~q=Wscos_nV#i=2-`daSHS^HY+fU%HdKGtd{yxL)PzsdlGHAhc!0&mx=!%7l91 zaLg={1b10H3Zk=oCeTf;wtT?%J0G=>v;Z?L%#wXgnnzqqxO}^sSW}!7)zKTEsyI{8u zGl||kJBHYC@2{pkxUIJYa(>WYeYu#&I`^FY#%IoGw$$cOWtDnDWF7nz>)7bR6sO(0 z>+{7SveTcFOg+lxREXLe+AxWH& zuoK1mi6Q?vMWc;X?}XSV)mHJ=CnHNvMXIZC;fU&ZsjTb9^sFn9Zc{_LNxt`YY-=9) zSeGc8bfr&Bh3idvlY1X{ziXhH=n|tm-tVg=F}K`Xs}MY$riym^X(01MQnmW=`^E&5 zV%Oux$cETvm*a{1-dc%H{Wex6_*#0&eaAjhZ}fA5-g_Mr-p2V?7VC#+0zJgqu8Xm? z*H`D@_>~Me+1saNVPUCNPt)KIkBXYmy$>#r9~qW}&Nsdbz<&tco*Dx_cQUsBPoGH} zDHzBL?(@4~5eLF$@mH^i!0e-xvlu4Ls)bbegHIH>`vx00>kH-Q=Yuzk0Cey@xQ&{( zwgvfG7Z@EVuAM)6K)NV_$|CIsq)Y$muYuQsTR(VG4sYyb@rYU%ZPjWT2Me}Z3O;Sg z*l^3ceAyZmTzpC#_-&a4E4uf6|C_!2#T4_6lp0OU((=POqD0ST$pwaE*VW2i$I(=) z_a1i=e@)s5yG^AMppp1Lt&`g5N*(T=Mf*qH4vM}?=F-*o_8)&@`GF+D7zzTZNI8=)k?GC@o?`p&bO3_1Mwx1Hr)l7 z)6HYL!Eha51`-mNbU*p&mwH^?{BuS+K%DiLQpM(Ha?|-1nN<&7_x23)G24%4Zx4?c z+)t6zZEH|GARU55LFDkE7dn_Cm$hNxH7!YJ6E2`6-L<@?Q;eH-SM ziLvXQquI}~KLtII-X*W54Kse9+@9~y@_ObFOVQx5YiU;{QLDJE-6mM0OS3;#XXUZP zglkG+u)&I>bRtGdl9nWP@khmEqB{DrKy{>s!N2Ibdtu_-Yh(OMlOhF&s2cro&9t+g zp&<*CNZ#(j1Zm9)l9q0&X#0@w;)rE-_O`Oe!S-obTzYaAvril$L*jGudSO%Mt zH)`3|NkFp~Yuy1ZL8t`o2~3D}0fVKgr6kMG^$0i+?EDu1)Bb2P1Knk(V6of;=pyst zkt_5PRqeKr00e{>t`0|A&uT2t6 z5S^zzd5$NYDcBR`o`#3dzYizC@Rh<;2wo3p(sReV;ZEFR;Cxh_j^nFjw`Ny1Drl4G zzR_=ym7`_kF59!*IW(|;y4h2&fDbYwzw){ppoOu!7iovjvaFo3x8j|s-CkV2j7RKD zpV1roj%Z&CN|QuRNrz3R*L^mvJP%VdJr$pCz9BlkdzU+TZiAL>HOF;hc(siD(l&DG zcl7&$<9$lUHz{MZ>m-lo<9WZ|#`Si+U9XQq zbKV~Mp1-_b%7BqBY{t{8bjj~ky7kS{fwY>I`_fkjQ!qh4J=DEiplY^yr`W8g`fd+@ zP;e-NA`gvZPA%?^qRWl!emeecm6Nd3mxt|VN1o*0zWr}50Co7#h69r>uC6q$?aQ`# zL(guv^?B*^N9uU#CzjSG`?|-`OXNIx>ahQe%kqozl+P?hKjtp4l%x(TXd1j|^&VzB ztM#+@K)?d4kJE`;v5w5zF;#K<6*bF`q6HK42vYaS4=m2z!|pOkCokd2N6|DR3XU7~ zlD*TeRa!gTTDGLbxNg4qWK+bsvRfxSeKaM-RKj?;zB2`0>Ws@SqKUb8tjpxVo2@m8 z4RlA7LQx&Q)=dw6As3Evu=4HC{b%cDD#MTuv*u z+@UpbgsME%l<(hz9ur|0AH}DQ&j}sE@^Ai(N|HLsLB}U6SfLxLcjOTkKlLF)v|E2~ zR%sCfkH$D$e?zfYjBR0up?KcaTFKa(}o8Xs3q20bCGU%B4 zV_Lv>b>_c#_l6vwhwp%nTvfa4`;?gq4#D#_MaBc3Y^C*&LKEL{xz0;wI-VZ7OI4(p zSlYd)-SQFx5;n8Cc=Re#r@GGH?_0VJuIk2MT`9RL0U%-%)D`19%9S&tn%|3|g4f(O zj|N~97D+6qK8CP(^ZwM=QJ(u=^1M|Ju`?jh_03~3X@$>J8o#v;f9#|^U*z+o%!X&4 z-;TjiI?>nkpqbIs!(d8Lj%`La9%H`waLez)7pQh7v(__nH-%y80W3!^)!y5xBT5F1 zPKG*ZTMX2WVYnYl6&;}3c;U;JpW3(N*-sBKODD$)T=t7l+N|iq@aPg@YzLd?;@&=; z@Y~Bfs!4CM(pdZ)bb(l9=X&eG&7HiM9NzJ>nV|VpVlANm;)i3yXnnlaW1#|fr@=MS z*%$BC%e>zomRE_Wx5{pLeNMmkYvI#;ncJQ{A5^J(&|#GE zjY=7_cndR~Tb(m)!MW-8uX^3QiJ{!ED`);$@4K@$O3~?O<@L*utH(l|wPd%+-vzN+ zj2BVuV7Ic-=`@bQj=eL+7OBz4mlD1@KV)6dy+5gVP1&_apvRv2&oBS93rydaM%c8z z9vyDai}Wo?o|sVT9FIPsqB(OEU%`>@7R|hYm=wreJh!hY!#rr%bE}0bYK+~i*28-+ zTeh_=7w2q@+RZZEYXRb}^m4{Z{DkS&VC!--0sTzsgB+~`Ug@t{?nq{hJk4=Vpx^)F zuD^S`?#WAk#y0v1`=I|$;&fhS#U-{_N5=2qSvx~P$nRoCEkj_&AxJI!;z_LOpD~eW)+X^uNw3cEGzfInb$u<*`4XgM>I%-4o7yn8ALiEq}&-wQRcW zY?bES$LgPSw~du4H@!1yd!YIJ?a1_}$ZHFZjEnPPLBqcKr9~DC>ADeWWg%9zm*$^~ zB~<-#pbGhPxyS9;oxZat~*tzgOBoV7jFi@X7W@ zk$CV-*6SQ+BO#^avO$H`k}S}y&0gB|Yjb~cS2Q2n@ePcd(csU=GitrFl6QQ2;4bI# zap<J&n#Tx<(mXf2^cU?b2hja3c5^_}*p#uNmxfgK|ATTh$Ha)E!dUHGRZ7sa;NP zRN%IlZ@sT@=!U$&*0`SJ6VWu1BOht)PbkU6+8-X9eZt@9YG9)oH}j^8PG7&e@{J(N z#A)^uOa*QY_0?|g(`0?NKh<^Sar6)6OO+qVWHHL!e|Lu_-}zB$Idj9xYp&lX+V3tp z%RlhJ z!vNF?N8PTbVW*AUc+e*hr>Mk|dnk9RdZXv9jRp-jURH?y#ojJzZwWYRJK(QNC-Ryp zQChL#+1W~`)057N;%iHH*2plKy{=Jl;(VCaaNW>;`;Qd?%JksyiHQD*?h}dc`Z^sh zOpRwBh`hG;MvI$!j3WsFUshLd`VmpM$hPH4dGgc`_fMvHlz*5)6@+9IZ=Kf z>}EiH{MpIsRsUYt{PIwq9cr1)nKpZlxr!Yb3sIp(0NBj#zw>i#%}0UozV&nk9;`$C z8Kue!Q$aypyKcWrc^mgo`Fu-9pr}F;Z|dGJ$KF;Q`Vev}IJkf*(#p{%z*BtLIdd_G zHSm#(*@2|}cYXxu#lL+OnkL6OAbK^;)3RSB@IO$Yd+8gcqgcOnMaN2OdHM&i&DC+*XCyLx)6}aQR&yU>{+73}b!yMt&8`^z zwDe@(iWmFrtSRkfR(NWXl?B4HmqrimIL>NzjBK6W>@W%Z+>4D@FX%FcgoPCYr~Hoh z19AkElR_dRVH8iL*lU9Gc!T(5}NbWQ>X}s6w!)|QP^30K*$xfH+WA@pK3XRR( zwT?WCn=N)~@iOXoE?s-ylJ2G0D*m%?Gjq0>gPpb05ty?Th{fCi+qSaut*N=WKD14s zD+$-=)Xrnc%uVvmN>jF&*ajp%H(s=5wo`p{V&!+mn_cI&B?Yj?40q3jeY(7sLvUIo zy6jtJgORH!^Hs*A96m`@;aw(|AVd^;CqEx5|MA0B%L=@a{;Y-3T%X1}F|1ZrR+pSRy@|%^ ziKPLhV)m|}wb5>qas-^(ef`%y*kj!J5gAs79d#EFh@HVQ$%gjG{L+}GlDzyE+b3+a z0cZNAs5T3#D$LtHIWlZ`@00U$>dc)cyZ*f;eNSCOgIEvXJVQZ54^~0+jErQj9BMew zB!=P6!`!igClKtV&dkQTZkiUaWqUyscJI>wCle`TYN4M*#PeoMdxf*Mu8vOC8k*xD z(7-RfW7JhVYW(gIEG6O^&0Xd?eX31w((Hv(672kzr(#xY!Caor{|Mu;vzvk?{%|rd zFc7SP825pR6O6YI%msP#OqbOkeWmXDea^aRGv`&@L!Bv7>=htirO((;ow?8Cz&{`5 zX$(Zei51o-F&ik#_Vn~TRp*wImp=fH5jZ6f>tk3`)R+nuTfLP$d_XHj18aoD1H3uQ zjuk8Pm+VRzFe4KCHSNwZEzy`a-EWw$YI3XrOJm>JkQKVM>6(77MQ!dd9?u^9LSb_WQ&ua`C0?Je)#35L;KjLBabdQw8jh_gH-9dz5DmChPe~;Tp%K@DRO?AUr2}pLX^-2 zf=D>o6C_^eu$#j||M^tm0bEgg|`kRK7B(lb^ykcs3W+3{CG6 zbKDG}9XB_(&8=7{_zG1coskMD^(T0XXyqa38UN~4fJuz|1DL@PGwSqs@igfAF(1Uq zAw+4kEwTD>Ey?fS--kdZp3DWUdBO*$?O^*r*AHeKC7@(ncyAig67n(%0y*%-giC`1 zE)xd+Um=)46wD!QCM+V7#GJI=mYkrr(z@?Aj}$MAY#%yWfDrocy8Lqir6 zImkrdv_?QzCW$3Uw$4=0(9n>Uj;;6AX~F#kAyrF?9ZP)zi>Z1 ze4>cz&^R2!rr>7s*(}1d%Q&REt}e8>SqnBIAMx1nj=YWO)~%26r3%2m5-GqdCT0)B zn2ezJ3ZKv<7JTo6y#IQw48+e=Clw+O-Voq`$g9ZJU$ijHfoM@@SJy3246#7M=?7oT zH!UIFFSZ`kE%*Yr&Sq#N5#d@+PG3lW*CZ))0L4`zHw(pdVtc~Pk-T$wWCXrd`tZym z6SCo@6N}9Rzm>?n%ejKIPm5O(tx( zq+#y`b|{TOyr%*krU%c%gMoxJ(WoFq8$94?SOrCmRQ`b`DUm59Wbo`4AkV%N zPAE{EC(iMNFNbeO=lTF!TztG)b6RZ6R&Uxk#lx#B;Y9EW@K=f>BlLf!zl^lHh(>M6 z*HMCS5Pk&&RPaIk;&v$JhM%bM&dMw*l7cM++>oz8#+o>WB3DAFSm#jA8z_uywxC@8 zU9Ut8JMfs@aLEA-Ze(OMxodK}adq@pC{Gfz8`wqR*%|Pm24G)GY%HN%78kdl$Pq(! z80X}?m`@gYybuzXi#hodZOM zOJ&;Hu|EL>)sT>r+S*Kb(@<&O)anAEA-GgQ;WO6JaG$w%U7acrex#P+*4zjj0a^$N zBQTgjHNIuyW#dS(lpqr|Q{eL=tMqFR&s-zuAnZ{C>F0LeL(sszhoxXm%0(d@J5tz? z=Ybr}r28y~^_Br)`<{)+lc!baWrKEo!U2?r=F{J6njZT1nySBq?`>E}$W5J8p{xBy zhK5)EWipFHgKejZ78j}G&+vpWkopeAUznjk#a7hjokzStG>GN&YneF3_Z}|EWF!Y# zyY1Dh>SBs1@tm80=Ujz*$qi^Dy)&)dPfi<@;nfv2r;t&J9S&+Xl3w5(6sue40rS(Q zA-Ph>X&wH1mb+q+bwi_~6mXEQ=eN~FX(}t+y?GT0Ctu zpZNXz8DbbX{!A$vJc%5XDsos7BgYd?4fNZ$3&73=U+pPWdW}KsgEvrk`NA6fEo2`f zqoNvv)GWCCiXi&Qb4kdyLy~w42eF84+_FW3>%vF_ymW9|h|dSAI0&vEwrJud*&|J_ z`0&y26ME2#)#=%(3RSa@paH>^S}OHh7>a+yZ1|wkGca`a^%?K*;=eYiju>so6is`+ z1MVy2xZ$ItJRifix0xl8RFvr*Q4qhue@0N-R?I%b;cI z0=M0S!_%}734>TX;`Bq@@3$bTk-G(3YecKiX;(bf!Jf=OWCAsq5xlm2IRZT_&(lsi z5KY9|T8Zqem=jCl?nB|R99eC|IWFiAyrFlBIr4(9zC}kz2XTcC7m~PX6ODdE zat7;*X;)U^ZzEd%9)%jWp3u3#`S&!j>xLyNbQ8P7HFZA1F=ND8YGbS@IccX@?B9tU z5)s*%uM>>S#KExv6$zfO)>IIBh*KzjJ3Bg_I$qj07=>JH3%5P!x><7$%gD+Sd1duq z6x-ssiF)A9ou5vu%qu}`G~O{%w71Wz^#tQQahrgcSaY6>0EA}Gb6sxj?(2ipq5vF7 zjbTPM_vcSne}6gn{P0OSFBVNJ^+MJUvZX3imkZn;frAQ#Q%FIbPOJ}k{MZi{K2|Ih zjVP>$Xd#F=uxXo=43;You(5@}p%YS7#0sjjvlBXhDt;qzEo8chiZ+O>34r0B%#v7z z&t+(A+%}zo?uC@dH83SY21ypV&}wXBqXbP<6g(y{%7LySg^bEWn4*D|^EN1nHm)sX ze+-V=6*e}uNMXCUqP?5*b*ka41z(Pj5S6Nlf}_-NWK!fmFA79_BKrraE!1uukjBHD z2HrPMQRkVL(@lTT)O9a~zA3cacf(svLrgL18RsU^sL|J%*9IHz!g=(KUh#U^3gN+) zh_5$pBJs9ERc%=JOb(d!I9YRmHSJD%cCQyge6fvd4MGIIv2F<6-`gh*tL@m$LbNaC&Yq2fdH0tnu?YP3B)lqBdT+FY zKc{A3cUP0|>V&@neu1yc45$4cJ=%%4f(C^g2#NU~I!0ct50JxuC~UW%7*&bI(MqXv z{XJhtc@7@z>-iLRXEYD(A-+$n9iePn2Ll*-nSJoa#^o_EF-b(CDv3d>N?eRl2kIdf z;JHO?J8o<~s(e>5u^U6GI2>{y|I#DEFaLD<>>5;d zOZ?yEn3uEU|4;dg!?^eGVP!_A)RV}Q#9mHA$vkhPk<+6<%k%Qft2A=uwAO*Ecv20 zc0i32+41SOA?j8aoMb530)x5@HB?w*)~e2mp+<^p~i1;xrspI0Gpa~r%rjb*bVZ@sG#&9 z@_Tf2VXoHwzkXF9=4he(!bM3b^Xf{4GsjKzsQ03xzIv`K=%N?garg=aVg!DTG)a0B z5r3ce-EwnOL})1N6t=*PTQa#3#B796#9GhA?mfhD2K{FTG9mPV2kH|1TPC1T8vXZCr>)1T zNOvnP9@WsG?&s%6V!8@Fy^J2h7hFVY)AXdt0eyJ^eGIHf4A7Lps9wOZf)?#dPwG;H2s4be8Z@mFUVO%%Q3q9}B(@8^yb)$*CCpH>t zq7zS{IqdsSW7wJ#4k&{0zjET_`Zu(3Wh5uYX^6Q0x$1p#htp8i5G-KB*cFOCeUj60 zqf{XV^*h+RAE1+lI`><=NSO7$a1>OLDOea4qab{v@G$j!^x_lfrlydjVMZA5xNAZT zWeAc5l$Yi|Tfx`Z8OVkl96pd58t*9{=Y`-h@v4KbXmhp$2T&ITmLpazg7}x*^-bQW zzew+KR2BFdgntpz5of`6KuFg!H}}IwMg?V>uDyEAnu(d2=ZI?rBxs;O840v08U+@dmdv8LQKdLi-1Py#O4y$hBPnE0q6mtb6_GAM z(cKPu!qC0F0UKeoL5Sz!*&a)x_*3|K0U#<|I^Pca#icoowJo$QdvDjd0^e0EJl4P! z?j;pFcjE}13p}mo0ebq##uEo)pbF=ovs3L;XH9kUrfvM|PnnQ_?(`&j0ra0Zqxitc zK|u3N5Zmz3`qtL3k=;*GUz?vaBCsD~)IXM?=n;HOqFrR8#RiiQVNeU6MuR_OX(t3d zcmQjt%t*Hnhj{bT+dR>qpAOoUJvPF8%(4Q}UaP=O1pef&iVWjkI=i|Gpyh)wekpba zFo2;!xodz@6Mg*)G*&9r4PP}Sr8b@qzki>&M-?Y!U_ya&f%@zYYz#p)K!t+pjHpMG zr{%N#pAn25usuMi;R{gm!#8A?&ZNX>Rg}VU(f4q-xx;D44dDX(4g)xfKfRD`a0-m zr+43FssQRWvN3$r_+~2pBr4ygPvu$>oPJWq#(nPF=Sf>HV6p|R3mk+s6+gc2h4m__ z(2)h)Fna*BQ}gPA0NR@h7;g3UsXUOCNH+&eBT#?EL?$q?1wHxlQW$+y90`IE|Ln)`skpzC%pr=w(#!mAvHS;?l!Qi4?u& z2eR=QAvZn%WhftypfmjQrdb?9Vs6P(h3267raQ9frJRd?@aqn zC4}Ouoz}9m<45auG}7EPbM!a_y}1h)@mWwJodeXswosKeWeJlaey9-eMAt;FEf4Y=qLksL;Q zN5?)uVZiY^Zz`2;-n1zWc%<7z>2~ygPyM#}Jw_(GOAs56Mdu9b*0U(WYs}LLVgpO< z`6W&-=PQWUag1Vs!%>(apddv6<_-whj4B3w0ov^_e6E2i1obWm^^=~IfY2;rvLGzk z%Sv#B zKLR^6^kne)Ht8z4OCAYPoBT`MXM#bzVC!MXpiP%V<%bl=uwD;!E5vhA-bt#^BZ3f+ z@cQ-2_XqcRnUk@1q34PJDsFuP0~0(~mX8QZ`WBMaVkfG7;d`eNl_KGM^By*yI`;c;ksgoIwlW%(BmtMQ~1_(qPKg|ddi`>Z#ew_hPJF0 zr8YJ~BR&mlrT>975N~N53l$zxH^GwbAyvStKbUe(LtG;c@dV0=vrdY#@bgp zivKRZn-}9YNlD;JR@ngJgYq|Ps%%t|mcuwE{Ab(WxP`M0@eF{0U2wOFv#3*xx?g$!B%`2HEsbUO@e9djq18ur}c(f_%TcM{XkT@?`V_faW zmG}oK1#1b8hb&pSxpZ5%e#AFp+Lo6Mq*R;?Vn}fPr=TczF(q&jZ{J=6z*MiZ$Q!i)FwO=w zk~R@G^ii$CVCP%Q{&q-^*pNXkDpk(J_C|hGI~Y#gK}jI-`|Ud7{q)ErS`R@BC#fKm z&ab5sFgm~w*?=7%`(r$-fTR$oXXwTnB3U35zrZvrc0bzBiF-iETX%U)zzZ1f@HV=; zXqs+q_sRa<=(^mbD9cs1s>@Lim!XGL(IHJqn%zP|>sZKPkXVm+d*-HE(#NL*L~&%0V(S2KqA&sWJhCK1j*$E!EpM zxRbon+|bZ%@DNt%RKNJ&5wHz`vLvTtkQw&L3D9RJni=GZdk-I0z+M*aRGq~%Ck_B} zXxhMVR8d7`D=<@vD?qc-?fEJ&@ug#7`HG3!ZCKQh=OiGyfWTD9?9^a#Y90KUfilRV zmE+#`=tVM_JD~l7f(O4}94)Q@T#<=mENPq?CH>subaJi^Y{RQ$$eF@KFCaXe0Y=Rr z_K_S2EE;OAfAg6dMr`u`qD0^z&_aR%=MH}AG{(lpsPej^F?Eo_mx9ML0oGw&?s5eK z3bK(0sEwFRIPOv@1&$>mG9NNq4>L!k@Hx!b0n}V)J3x0W3N8BoL2-b1G6Okqh7z1h z*If=WBzYl)um74hDgh3qXu+%fa9_r#MByFo}BY7`efIyyGNVbQidF?=f>frjm;w3>)%OaQmTV5_Ep%E+Q(r4aei< z`D9e8ioI*;r|-aN9afG?6d|qP7?8T~`Eyl9+PK&EVvJRWFdK1z*Cz^o zw5LW#iX21CYe5^< zNzPFsZsNctJ|my^3T9s~D=J#OVZ#Q@W4L>N591{OKo@Zwez@6kD^2OopOGjPZr#2u z;yk_=){J_X^bs`5aaarOO(PPu^C_Hxqb(Rn;=n>ba0>V23Jlhe9sJ_XIH472~eB)(l;<@403442|9&I zJg!A?d%Nz4uoN4HkgAvjLGthb83toSZe(>@h09v8NBsY01ANh*e(pyb7fC;VD*b=1 zz7oVRP+JDb6Qp;<8r3rK^T6%Bcdg)5)KR>C)JdQX30gKQj|k5~2PF`dDRIG$_V{C# z-o255%kP#>YU=x?qt-tkqO^Jo(e2!t!UQ%7H z1f0ot;Q-#55lKA~8(Hzf{`*+A;_B&rURgdEiXuH$LlIBT!$Sf{A}PvI>!oOzu~xOBc8n=(~ddUz2(Z1(S5z>A=PCy}Qr+t6(L%OaB@%lIo0} z9z&F%|EkU~48^-A)tRq$H!5Z%?HfQG95D8{b?X-CW(gSA*GGmeQj2%dXK#Zs67DtL zv#MCoi+z@smZmVC=1`1$(Qr2lU}3w;WdW71b2pSlak`)k)B!0gBea(&(T;xkN|_sep$8R)0d6B9tz8|clhN_* zc!%5f_^8Eme997OVbA5``PZk9yej4>X*Csmd^Rf0H4ID`)E)+eceAiyU}<@2pq#d= zngCr!mGmfNfh;lOEq_2m1^~Vu7F490I3yR68dM3pJTb8!HBpK6182^iD{g3bFXhyx zrX=ni931>=`hXYh`KKUR0o)?H!hns}tjC2F3Ko|Duci*Kk(g|BM@Huj%{?DgeAvi?d0f0#sk%45%aW#%;S) z;PyQ&;1kAhjX|vD!ZIo-o=n4se^gZXe$#Oc+^*w%6R}UTWv%YM-FM(Wh2b6y-yM*Z zNo#|@=@G^{h%6xRptANARq}I7uju_8A$RT^D`;0BGokCngbOxqJ9DP~v&N!rUq*#wB_dl!azR(nhd6h9hkWzb0bli--O1lsti6J5lMIzVZ0&7X^4c(v2sl|O8&nfEK(xUa*H|iZ6>!Dvs^@YGUUTkqd|Hi zFG}Af0cWK;9Hl?AW7VJ+Sp2T8!nh7$k`R6HA)0=@it9sXA*DipL_i?_gccj^-W@kBsgtp(n+eI>XX1_mnJ=bK?FrqMO z1kD|H?Ed?Vw_|AN9Cn=i;wom?sQo*X&j6dn_!gk(%+Qm9ZSAIl%7#k{4WqT>@s%&X9)*T|&{FQS{n8z57RQnJJ0=AL<@B z8?8B07`NT^_5Dy>eEZ*3S;^S{0!h^I?<-*?5EdSi0<_U*WsGx}Dq+}GTvFnN!tQdD zI33NG(o)jpaEq6Ls3R96;ZA17KyJ@p=iRsa!GESn5NA*pqvJ-!E1~Xl6|WI+!Cbu+ zXkJ<9B9uKu-vkCygYu5R7a9{2jAW^yp)s4c@~=o6mzGA@2$&FQcg|pX_4-ow>iek* zaLklLCPVVV`vULNvUw)hb135eeb78M+*kUV@%C*Fs|DI16nzw^^y@L=Uzl(B*@-V0 zq(*uRi=hSWt|35&=uA2~I&M69@~p_Ol2VgKEML`2=;HNM-TUjVv=|%`gJP<&#NoQ?6k7ow9cPZOmW|Lc2?7ym{I)kgDKX-y3 z3tU7ip?quH5rR^W*qk41DA%+m1N zAA!9IsuOjliLtSUFkygi&Qt)G4uhQH@?i0q9Y|Az4S@)aA(U@e7#-eKLFcmT%y2BO z3mU&N+smkzfqflyBTl906T#mj92Eed>FGy-xb&jdaB?fa*(7lUv%{xgH35YoGkv6m z*$Q1MmGoy}V_TyDUx29xQX46%2}$Z-6%2T^XhaeDL4;u+djSFt9~$H{$N>Zuxtw#A z3|R=Mh7s>e76o5XBW&vf55ORfc-ywvjlRS(##UC@aWJ}xau?UIzt8hVa}j(u;d}Zq z-AhC!Mpw9GrWs0m)EiZd-u^L=NVPC!B`h^Sg?ZyeROgR`%;KPtC_m99Q+y4l8!vc0 z2taMl-PBL>YI?`UJiiSzBTNyH2ybe)iAn#a%--JKT7*04lV4g|9)p%Uf#^VyhTxo+ zpHKZ`toco`?R;?JkN)0X{wp7DY`Sm=h(6V!JV}(_hw{c(M;yGopN%b{Xvt%)bAxn$ zD`pWSTEnh6HBABC9;ky|0D-Omp}kXm4V4R-;5H5vm(<9P*`BS_B1ZRwew*+3WiuK$RC9_jX&lfqHi8v9T+o z_mmN7)NGn;x5nj+U<83jUY!Q>Xl`cNaZU_15V-b=i9G=ZuZimrf_lRNb1sjC5h08| zUJeVR-|qf&P)FG7l|S1rW?0UDPW4fapr7Zy z`6hi`LYeISLsl1Z8MAo#c=i=O?Tb#2(pAlsh@nZYd68D;!Sb3u{ECL^ELF<*!s>MH zgU@udHw}m!&Fua**FtUGa63ls9s8C5W}%?J6|Ri0=m3rvZUed!DR8^MrqdLwV?kiY zcuO|*+Z049D!rs8DqwF4W*BBEYfqdgEq-T z6nN<8DF}S1<2E7l)UBcdJ;NDr8u7Kbfh>uL65nXfv-w87sUW^xNHkkI?*eMo4@OWK z2C|q0E@OQN7SKem0|n4A`g!XyY-*b`0G(Y$l6()KL=HZ_k=HR6DguA^6~M7q_t*7Y z3I{uN67i-ML&`RneikHw&b|R9{69xY2<6S(&mE|d3^?>%rN7(xugyQV1q8%C^R4T; zI27?nt6A-O_YtFn-Zkq3WQdfy6sl^g&s(%54cK@tFr)XF%^L}hjEuyA=hWSURi)=-zx&c9 zc>riQ@7+MFDA4Kb+~h`qdAgyA35G{kzn$EN3zVeXaeGp47a{N7rjdAxD2f9LxQ;vW zr5Jc4Vl!YSW71i|vIiQ$tH)cN+PAW>xPL3(0&=z9j*WGgKA;%B)aeLx4e=i(NLP_J z72fqEpk-!j@Pq^`E%fz^0I59`y*4P0OU@xvpgm}p%qZ_Lu;oL+xf2r~xh{vZSX5$& zf3UEkZp!B0T!1_e=EbQK<1OcC7hU^*`^0>x%zZUxQA<1XYCRntC(rGtoO9{x3u3jH z1rPhAN)${_2zVY^$t!c$TDG&J{OxyRF?X>bh)H#srsH$|;r@K?U>@!e3yZm)+4jFKBRI6gEfe9u zZ#8^ow6C9wFGok5CL`L8={WPb%qnH=v!A9v_wepKJ5>AGv_{@vPWoIGhet{2SVotG z5v%uh#oDLd%;oLOUjqd$c;-)OcOfw>ejdolMDLv2opXY52-oULmRlwp8@l9c)l2Ob zlz!lhPhl~FqIYN#3K}~^S6#kzY4p$f8~OQ5EJGG;I<||+CwJf;3SC;pt>D?*Jr|Fw z2-r$mPHukkIMBcXgXV^ja>k=-;f(XBU<~KhXJ1B#iJB(2UkF~;L3)P26~O(>>)tSi z7H$zhI>T!e3sHJs?}O0mfm$nfcQL?0NKs>bz_~p*k^RjP{_^s-$6aTpFDgm0KF&CAf|4@VA&?v?bU;?Pt~4Ge%|1rTP+~YY#a!dis#a(P7l@aCQsK_i}rP$k5xKc zhXxAuto7wpV;It_MhQx&84ulUMQ?MF>Nc;))&h!XsRM{s`Gc53;pGn zb3&u3lzZ$tla)*}4+OFo=snc_9+tj$ZP*nW_WB<5xvinf>$09}i^4 z6u~TgA=iMtb-t%0JT%k8U-!(PSX#kHWy+?zhqVh(ZK*f0V%StH%uMgZSgZ8apcmf zX4_*dlgWL;x}!Ifzs0^;chz;*uvMp2X%6qn%xj#U+cb}g>{ho)p$q&XpREG2z?v@# z0R!Dl+ipa*H@JuX$m-Tu#d)BkYQHX>#rTM_hsYTBu&`GC{AgL}^EaJS5$^kfqiC}C zC~aUa_Ly0|y563L>k6OprPVPUADTb*?(tds^Fq&1$F<}SPCYxGB`q4K)Rk0@Pge?i z4#fJqwQb3`vsBXGa~AVbZ9~j3$iNWPwa&r8myVHQ#EBb&49{0uZ={}^`E$o|o=ul; z&exUEtWvg>@LwMkz2nKnx-^-KlMbFQ(gKYvbgebKUa$OSFe>d`SM>a5>J>}tkKyrR z{OR`lSJda9^m`XB`#uU(o1bRf@_wWCjW-uqtA?GuLl>FGgFKJEtGW6i!(g6ErO-Wp z)$Y-JD<)UR(z+2!3XggH36@MD>g%h@6U*#Jv^JGd^JUv{(^Xb-eyWcDRd>Pf;Bt|T zuFcclw0S{Wb>Zm=dF#m6Vo`4AW6>%-eEgW?HbB5=@C10a{_^#2PmrX@5*9|QpSS0&&>`7h^A0|D_H50- z?j`z0Kw*Gmt~^v`9j%^b&fIjCoqhajrdTHBpC!SMb*jyCY2mvj5|0gYo?u|w`(D#! zwrM1KV9WDDCoRtmW@~zN8wr(b$9`s%*_`7CXEcprsQA~Ak+8&E#~K~1o4dBH zz)Z&&)UZ3j_4V~QEra5jEAb$wpvpI%o5Nraj~sIUK0S_xGxF0;3AZ_x{>T&D4hD3x z$84(W9j)J6ng(WvP$p8P-gBJh<#AA(8;~uX$;=3RGU=44=zKxA=F88}TXoy2=ymkk zOX*&TMin)N7Uk|PuY9(OKP9*Bxt&_^HCFBSiOC8)50)a;lY$4H2a0uMKb`!%ZxsU- zrPWVKwdLME$xS`cDWMxF1dkluH)%&BC9WO&CVe%lu;aw0CjuV&)18)Q&wl>Z(m%8g2T?cQ2lO- z=ctJ(EUAB8b;m$V`&bu#>~8g^-i}Y)Zue$w7wLc1RVw*gH|}c5(Hw5xlw;Mk$lV3L1q)#JV|lb*Y7bk(VrS&COQD@I?nw6VnQX7@$T=aeG(0bz@2KtGw z)h6>12gBkEb=F_;(-n)hEl3wEQq$&$OySjNi1xuN5Z0H+JX}-1>WI}xqcgQ+6w#6G-j4quTxngX5 z=iNI2vSb7V#Jqe}$6)Z?<^|a`vRXNFcAZZymabtnP-9Bx)s1`pzJvRlr|z1(Uv-pz zsVl}iazYZ@Z@JKUH+5QYeOd{ea^0??eM$1&2Tjw-xfK=rCC%3?xt|{&Nq?x|V`BU3 z=q4%!*MP6gDp%)uUCi!AF4^ytiKy29`C)b9$~)d=s3Hp9|` zbDcKXcVd~p*@tG&we~y9uiSduC8hY<<^#pU(15djPMN-Zlmqlaq#?zamlCZY7=mQ$RrQ&4Nzw4M>1c} zTSd76q&p=evz39N6yQ3*z6iZj0w2(`P`AIz%$?UC3XXD}Aj1+SU!r<>jgF)_gg8=7hR<8){`7WaYNdr2EFM$d*g6|VjZ*#=FXO_<` z`?~puQ--5{dbMP>2D}ieure$+O)S4K+PJ;jHL|_ErsV!f1$Wc$9Zjoi zS7k8WVmUsV<8IWPk-A8)%z23YQJcn|{Cxix-2UeR|(@;|nJMPf&ZyNrY@z)clf9iao9B~DEmM%FV6(@J$I=jUf#d{6U;W@Md@w5Wei ziC?XHNu#XXOoaTN@IW^H%RjE@8T;WO)fQWJz7GDp{OD(%#b&ekjsaVXlxKw^Vw0DC z{7K(vDMxA9cHZNA!`kRkkD(0qrkdVap)ZBiH@-x^{6yQ+7CNn$zp+77uk~r3q($q8 z0F$5EZ|y3=7Dr}_bY7V7hzb^_&omi)9macjz+B4a7V7b3d^)NjosU{U;V}O({Yfj` z*+XwV`i9fpqAik3TSuE5E`8Hb*x3_L?zsi_r-^_CSah^FH|gEJ*Ckc%Z;BE$=P9@z z#N1!0wC~tEEAK}N=ZdYUFTUrAc}8_fydd~(=;ZXDs?q4vwFxoQKf=T5?L68qMqWA* z`LlZEWM?TIz3#mC&uZPCe(HGPrC$28)(uhD@*ew?J-w@=Xh5U8e8P2>rKzEHo$cZi zFL4>kwd!|V8z@aLXU)ENXC8HVG(-DGi|F91)Rd+sQHvC9&E)i;96JlJJCyCHZtZss zzBe08wSB)dE&s;C>Z#vc*|U9pl3oY;m#ak1t}&qa%{P)}EpgAhebN8swRQB@?`R3_ zc@Z8dklMN_xh(&T^VO(_PZIgllDuvzunoJ)^@d$%Jl1@TiO0tCx-A>GfxxRLG^eWf zPpv-nNcQrZSKm$+EE%?Mi#uqcTkC%PiinW$``*6Ds*+156t&OppY>$<`t{KW<(#h4 zw$=XCg&(_KVN%I^F++Z|+6nj&p&eREC$oZa55F^ipt&a_nlr z?CikF{I?&f6d|j|M&~SztxnFM0VhP1`9<^trxH}RV&DYci&myJ3*3b;flC8{JY@ml zBpko*)6z14`-!P3=>%0Xg+B~_98rqjqOi3HBy~U3DX@x!PF@E8>wSq+H8{QMukd)n3U_}Z_3-f;9?e8B~m zgJo+?TwncaIKaMc*A-uP@xez4G;JGmZrE7XrW`ycANo9f%iww=zJzB*o&!`#M>Mu3 zHKvVR3Gx0gSC*b+!NEo|db%vFPnF`V_pM;2^W`6ZdNozeTus&pslTZ-f3^LQur8+^5@R6 znOwKrLe;JmdT_ntw3kca*&nTgH!fe77#Ul0FEVsNWK(=V$f~K9?AXNn%OlGJuG?eE zt4)7hDgGe(`d9M(FJ?b{9fxN47v_va&nHR7{Qk(iuzK}(PqBOBUI&&7Jc19N=c#+I zFJdVlu%q@V)5%&p^>+_KT~_JU@)qvRr;JKl;mtP}t!>Hfp=qo5{9x%Y_mcQY&FU}P z+7$VYgpJBH($u#!-^;f8sm#S-dP6~T%vR(;KpBJOz{St&q{ID0te9)fmR1?>%0Jcr zlA&kqd|~Ep`(ITCadc{P^|J?~k~KaQ*D{I;7~E+}K6^@k+iQ(Fdj7(iGal2~C$%5n zQJRg4wc#_-en!)#!3KMJ&8KfGs+Z>~Fi zyuGSOj9dcysmlu&|K#XbCFCSLGBXky&I#DCmya!^<~EPq_3L|Z!49W3ZWE`vxa*I6 z=f|;_@hgp5mfF0|&9Zu9iVfJFtI$FHQwy~A$e{c0N{qi~bsNZUr3f84nL%GG1$ z!xYv-PlJa_*4s9DuLl1fb?}3c1)z7_pj8p7Qi7@+G#h%{F}6wJi@QVunp6bJ1C_=kS)jFYLaTgrtb1{g=?Vh@qLuzSF~c7+nqaikfU#b z`@7-ZHm7QidC>03uHL6lpCTpPA6G>s{HX~Dcbiw3lsSFcVbHp5f<9_D3tfluk)p(bb}$DBnM75N~rUuz-@=d-b|H)%Lf4%GR>W(1p@}&U6yc zJ;Sr}!jY`J_q^pFYmS#6&{fsu-cUSNQ($Q{_(<-@!BZRT4(6C9ZnbPZ#5ON^_Q;~s zR^Bg9FZ?n8Rc!Jsv?%UrqIz9n(0jkrQP1^Cg2Ijmg*_r5kUaRP6~BYw zi-KvV`tA)5bc5lCKHuH2PyMZ6ywV?c8=un_ON-BUPw34)oq70cXyW8;^HXechu#kg zQtR%KQ1a6rY<1~y+&ld_B0S9PTlAfwMVA`y?*4tk^utyOB{^r=*qQ_?-ydb-+Nwo= zy~(zyLGn7~{K6k`W0r`v_oF%U_xu=*1z%tB4@=mYZu!}E*ds0S{hEQTjR0eTry{SBj#Q>oTZiTJs^N z*VX=!)p&->aj}Eb*Mjrj2S0wN^wj3U7XO?PWzK2eysYi`Z-*5MZH7mtN-jlIK4_%m zUu*sN*5~F%3gMXr#x)jZc4y45a-O_sB3E8|daH}wp<^jNpZQNMuyAla^Q{zY+k1#f zID{mi-khQ9Sev`c3}3gySuQgiP40|-Ct9T(T_!19JAcrA8V<1X!W=&%1U&E zJ#m#|eHVQhGu)+0_W6vcn>!m7UL_eAmy2Z_?H#GqKQ`vpF6ZmF>YPK8`tK()H3eMH z`rYj14}Skql(X`&$6J-F^Ycq%t9=|12YtLgQA*sP3Xb8Q_N763sVIqD*da0I$&p$Y zr|L5NC7?I-gRj>C<2{9ob^O{)JI4*m%XmflHJ_tFAA;7is zeylFX+~k@U%DY$Z{t($~J6;&!IV?N#h;3?N^?OgB?asQzJnnwxT1Ebe9&2UF-_-nw zFpHk%KUxzOcE;jhdsj=?EhR&XZvAT0*~h{UpNw;I2Ze99w*Bofb71}nH=hFccW8B3 ze!k_(BJ4yh`kban#9`fN|GhO&PEhK1J?ob!*4!hN`@E&xeTCWC%<1gCqxKa`E-{{i zo37PqHX9!>pPJmu{UE0Ll8OCPj@FLB&k2Qve}0yn5S&~$Th-c;bN+>~)yLnw`AoT* z$*0DChd_De5r%t+%QVt#A0Ze4`P~$$sZ9-Y~aHZQTfgYRp4tF%KnG zod1KVO}mA%q;&iOt9D01Y@uAZ@sE!wkt3uRoc{7K`0gSlB~8EjifQ=Py&OL)AQ` zOD}WY>37-CJYRInPnE7bClDlC!}VcUVJz!!UejCl@Bel%v_C&e{zffVP%x7r1V%bW`+6M^H07c1EI7Qc_D;^KM)Tc= zJ&q)Yow=3oe$6C}lIZg;c`{spCNE;urq ziFglH=TSi){_6%Lv@6)ap=s>#$9STdHT{}iS8V%7PInH)0#}Tf24Df zZi&@~1k7%a$t?JheN$#$Vl4Ql<%IW(9QJNG-`LcHdnb3s><^@_R9`Zs5IiYmAG#cT z-@*Fy2f>;RhjL~HF3LMKnc}>=o6?@Y>NVj%E$lZsPI0&4U8drYsnJyv+TCJCn%>0+ z_%+u0GnD;y{p}F(mJQAi;jg`$%|a&GhwY^mP)=@_*z<#SR8dza+sQIoht(*8LQnjz zpmAH1%>_xW5yVN%Zl&er8?y8j)O2T#R3PO?J zE{X76;S9?@O?nGnuGY~(^8Jbo$HGEsZW_P;yH-QDrG#O5Q-}KPj!Czc>l!n((@yTm zvO7;!DkLu^Ul?)1i3`$|^%}H`*-G(;tHjK8V=1g-C=Rqs#aKxXkv}YCJChbz z`%xB*W}Z5A%1R^=qj92{0*?f19Nb~Q&pl`&(bF4t7L^C{#eO`>Zls6E^Wv`2faR?I zEgE5@4sIc_XW+47_K__yLEyXj#pycLL>G0n@Q@VuEJcl2#jA}k?52M=b!Bfa&D@ku zW%u2wa&bt#iry_?F%kGhkRX1efYmTK5HX0Q*Ad8e0G+lvR_=P zbyxSyRyK{gs^I;-ZJh5_Cq`rFe-!WAIR>SOCZ*QYg zrHV#({^{k<`h|{%8l4gZ?q3M0Szj|Tzb|RSShqcM;Ju#7*O(2B@uKqVke$V5B25}U zImje8ckbMog-u$Jin*30$tfv0jvpWL5Pe}i4WQbGj{hm>8H&ZW54Ai`1S_($vtxbn z(Rc%samV}Bp^GK#S$2N9t=4-vgI@~^N*M5Lh@}lzUMDL|v@um*raWz%e6ub0A?vl? z>Y_R5daQ-+j@T6t8eGn7WG?I>bCbL0)X2MAt+l=*JC3?}S&=S&PnY(saorhU<1KMp z@XwXDkY|^*#N4!!ER^XkM65W4Nt5wh?hc-%}E$LX<*tL;dekOfUM?dit~50Y#pW{(7y z2O0C^^%cJ0RB1g_f@>AqPb;TB(7hG7zawMR$On z)+D~1=&81$kgCO0rgh5WdT)J%oW-^uY1!H@+E4Mm-|(J3nbOsYHJ9v|q_@#k2BA{L z!Tg;+k`%e=Zk02T?{xplG3URvK^xuJT38}NcZrnK?HuoZ>lBT^(ry0pB{K_U^TPgt z(Ju#=(gX_3Lbm^0Hh9>L;_^MuKty0m-nEIE^1VsCG6pSToe4dACcNKd%U|V9e&6`a zir&iXzItJ2Q=bO!q=+To>x+X9H&vCmX}+6`KldtIOp<<8_Rx0n`QpEY)6&1!!9tJTtn4EvdF+8~a^5 zJAC_GnL?fT$2_$kuugAwc~bA(?P*(^*WX?nIq=&4@$WWwWjTh6>qj5`)@k0yX-Ca5 z^?zIdYWJW^@y(Aw?!?Hm0W6b|n#at{%mk4SU?8bSoPF*=hdzuE2uXxh=n@(=4IH{_ zLE|1a@cZ}6m>BIWnfVl)>b-Mczm@T_%bUkHg&kJ>(kDjFFx{zhVy!6oV7&d`e(Fol zB-GV-CKoH3ipcl)YnRp6M;v3D-?Qu7pZKhC(c2F7MR*#i zPzH{iypQ#nj$kwpRsa98eX99dtv#MXbqQ z`W)n3I5#^RP+mqfK-UiUriP1l-Elqb^t;p({f@MevEQ{m!`i6IBi`RMnG!EcI8=T= z#KTgPW%;yGA?4c1ljC8I&Z8!dl~KWw>Ype&GPu11iGjI0ByF9Vz-}8El@$zL^>8J@k7Pj0+ z&x9Iw8)ST7)XdLbKXZ$l=7y1ajI>0dG)xfGikr&SG4VJRuZw6mU))y6jg?A zY$K;dgceg5A1?;0h@IafdmZhG|IP5WtLe=j);cPWGz6RhC5+&i5x+7ZLpJ{3DfcgR z7MeL<0HuUL|5EFeS>N|(sDG31EO?i>vb9i{Qp9i3GNXNO|LXhjiB7d$wjS9A?{tKd zw!Zg9zgkdNRo$PVcIEM76`7q%qKw}fi;sJbkFEBX$1bHd9TVlU|2=rnwm&#J-nb*w z$D(nAR6)McDM+I}KDoe@?aQ%{&^vU$TRYmHSSDWmXqh*jAAKr2ec;dz3Cra_T4N1S zvdHoepqqe|U`q7pU{MW@j()||Y68EqZq9;85u;^4?4&9RN?kliwfTBX{#j4 zRjQmz@A8gh5T?(K(8Iztmh?q|G z#}xKXsod;ziKLO*DMi7}pq`z2|E8GrgKx#QHm`s82C1qlTD5=qsJuQbwdcln&B3;o zS}%IubUL-q&%`GezkWV#74pNI+Rn=;Wxn&LX=-cs_emr7jrG)0SAR+C1DPFaNk(0d z1amrn*8Zt~-IC3$Etpx?d+v?-Q2xq&cI9EE1fJJVWNMlmRgxc`EaiIB8^=3Z|L$by zZu8yQ^)q5Utp{%y`0ji2=Z!yg& z@lNA{Pfpry=AY`s|CFCUTI)g~dgNhuSMi}?#!g+E#=~vWGii2QtUh;iT4o+rjVQZ~ zh19mD$n5l4T6*;Hw1J|MQEJGpmCf?Bb;~OMFN@<-8@t-=>v(f$c=Rq_TI2S!P7SgW z_fG9NY&y~T{70U_%2<;}7{kD=UI*=`yZz6YC#5DlIkI|)Zu^OHk3`bg(R*~8f^-a@ zer+r4HyrofeK~R!4T8{ zN=G8bKTsY$)9GFFbhbzc6wr--Hd>y6a#KHtHPZen>OPfrc0AEz;q_TfdhguMPjUCp zf7cWxs?(7VLE>|QQ(eLi$sP}jDJ?eb>20;d6Xw5^E6~e|wpW(sf2)4SW~eF_Y%%lX z%FjHK+igZCmYZaKy$5Rg*mlgk<~w>vXTVfB@y(2Dc65?yjvaqm;Oa8ZV6%;`*}5mY zoG)Ou;K|c3-!<*Ntkuwxe}&3jaX2?*61{i?7C(1oU_T5{S7f#S8S#*Yi1U1nYv)Zm zd_d2xOEUtU+TzipORpNm$iPuC1T}en8dULy7;*oYn2+x2u?kH9x3|08vVF zDOq1%+CcB5SW4Gr6W8#ol_hH&Uh;Csg$2E&2JIfGV17qN zHizNO#SbUWu6aLvE}O-&_%Vb*dig_&U$Mst4&IG9nexoYBlFKcT>l{NdW!pd?T4qg zANR!+*%}z#t=Vry>H?TEHP>}QNW5XEM{PdePS55B6`3)4#Mk=HKlf~w`CW{qr90a` zo;@5L+V_!1Z1P&ZameWwrRGB8oqu;-utY1ghbv{p^QvN9-ril@Y`}f9KCLm>x!jdd zDwh0_O{tMMett&eJ5OD`@gvIHf)sy5w)<~-$j&}F`$2!`Ne<8C51NB6q6}Sk>e8}F zqQ9`uwtxP9^?O*1dwjz(bBo2=id9t zq};oE$Ifxf=7qjZxT=2{;B5rXq$)mFldm0F*(VlyiWgXUpV;LybIqQ90a-hRthmKu zwIumI7ydiB#%$W0_E=k+7wKqiJ$UhAilH8M2q|ck&x?Vn?T1&h03J$5qs9S9d_MwWWY=eQ)yq zOKY`$_QE|@_qxSb|A|!|3|gsM&T#JGI~$~L!?52$j_!cFV(sV8+d^cnfQ?Uo_5l?H z8*1#1qQL_jofvkabi>}yoSDn*}(x zhA-q6ZhlB^4k=jMnp=Ft?CUBUu(G?;zT_dVpG(pc$tMQS8g8Ha#WUky>=YQFMRCTw zztGKw!bmbar269P&Ib*?Zh6Y~d<)}C*8PfYdzvq=F|(Z;;JL5D7;mWKt+!?FP;mdL zGxLH*i?viw-qCx%f4p#G+%njesGyKBOjm2S<@4ojM6Wi#;z@o^GRcX#A3@HpTN`#6 zYmnuhtJu-Apr%bx^s*5fq4K{*^|3vUJptNZk$lwQN3OZ{pIXdIzoJKRZEA1*2L*cS zc=;j6DWyD-Qa^3Y``dp{Ui2)CqLQc+kbj-Bw}4^Iy`OoFDowsaBQQyslk5ehUPq}O ziOBWuQ%~|vv>mdsh*V`Bv9q;&0zU zkH=lk(yB>wa~Vn{N|jy>Dkldtt0K?(K1U&BT4uX@=Gu?`EgwBvFFE}5 zNHC32g39w=Rq4$_HAh|&v$4~BUp7wNUSJaOc4N_&bdFR0!FcEdn~`?M#I>6fWi{UD z7ly{}J@bea3-qdqw5O{0QMc`KV&=;Bf`iQUAsThsidsg^_`M^ZuTDa^s zOCizguR_a3?4v&~rQXxiy?)(vd*VOGb*D*|t;8^eqorZ1C43iW8l!kzHf!H7%w1rQ zKC%4tjom!CsPP3Iv$tw*`%A@gBQZ7Rr6_e-#aw6KR64%`S0SzXe4Y1>*tcaHfA4@d z>Y1LNo+0JHMKA?1+i=F#{zv0>na)A7r-!kT1iJ1Os6y9nUnJ-C`NHwoJvt!h=I@o> z-2om^>Q7=H3X%*Rjjo%cOL)Sy|0k`^J*_u}Tc=ol|2StUyDRi^qu+a$%{~K6aK0Ak zJ`CPf1;~wkzU6L(yqV;y@a_zbpieA`f zCq&nX{e5(L`&w7U zZt5hY4tAd66XWF(m>Ish81&pUIRA;a`eE@?nxwDF_%wZe6-Gce!EVTH@1pQwwC8ngw$!gm2dqpB>5*TerGIef!z!;arS8

    zZ^m-K1XS3udiqu=X^PZ-heRh9v{4NV0vrXAv?R3ph8H<28~3b7HJe8tE7#eX-!zl# z@uxqgUtO=vNgj^TQSCnH=3cF)z!6-M$0_7hZs+B>JU_R2?N!w)7g_skbFYrEF9VTk z@~onz*IHVq)PA=rQah|S+RZlFb^le*x2MFbm)=`;Me~z7&!o&W4fXa7E0M5cWNdc= z*;nJ@7oy+2iE!Plx$Bsq%)N)Q@o~F!tip&!_C@GyK`ka`SWLpsFY?IMnH6xl9+_gmStoZX4DFI9ws6|^0K*4igqj`1imlvxVa`HxMh zJP@R*qTE$&`N25N`bHC@h_z~b^M~4T_SiYE`MiLx9eqC?gDDwRs=Hf!Nb^b6orFlr zw})C#NLn0*-Z6ISu!vl;z6GT^LP#3htu{<|11Ycu0wOA*FqK)d&-+-34E6-8`un$X z*;eneDTR%ZyjC{$kxr*CHaTe_8c`|^J|hyvp%F6 zIN6dwVF+alix}+Is-!B%x^8Vc!*k`=#G#EJiJ)QDhP>L9($(EPYEs}AAAbT1ThPCu zqFWhab-vY;Z9oB$jFumNAt^yP0X%rP1`Z&dsN=_uJak!SY^S=8``@zXk9t3HP$vIp z^}8*ZXG)YYBSj1fv>j%hHajx?KN{cYyhS5^v+~}2#Z=E$G3SPw;sdvxech9xGgrUN z*0aoQyUa-sLDmAxQF2;d&45>q5Et#{eat{lf5@AX^2#*M(?^IVVRA%>@&cJ7bAVJv zMPuWP?~SYCLLwa1)6%gXri(l!!2?=`Pfhu_!YH z^6M0sjYzZ0xvc*LhWNo}&Ij8e90D_>in^A-$L7nxZNS2wv^+2KXge_1?#GF!T^mD3 zE;`KX=M7^c_Q1>Cfg=ZZNKm1{t0a{D!8#8L4Nc6|N>NsXAr9uUKps9}T@ibadiU_do1rraM4g6ui+qjdJLn(=Y-h^Fw=>1ZX9sX(0p%9XxBMJ`>1gxnnC8 z(6S-)P>S|nqnZbI%;O-3bz74LmCS4GT=GK@bk!EyMWT+21Hej2VD}?>Cx{QS7XblO zcq+s;W?S2$hyTGNJo~(I^79+>ZYC&Z8OVNS(9hJ~8rs!$Gg^cNOVHT{b&BA*IY+6* zH_xuj=`AiTjZzOi6*zZ}9lEX{m{3tuORmnhxYuI=61YUF&5gTQ1cQ{Pgtqok(A{Xr zuaq&1W9t-DQ|vV=q$u+(i3Y14uURG!j#gKcyd|wP&VOzxL7r}>48<{5*UJkc?P-4L zbj1z}iSk>ViK!u%T$ru~&fjhX+`yWs-ZzXmN2u z3H0G>;Kw=O(AY5f9UF;&`saD`G0}mzf~E(@c%^;c+!_>rkaYiz$VoB>uJ3E|Qc_ab zI_2e9WfrkNHskH_cFa;rAF|p$2wEQmiB)Gv?zKejWaPlSb zO6(mGi{KD6BAQZ^1tgHa3Eh~rD9F_xOf;y354<JxF)XLUbF;U|#+xt|x_jz@xp^a~hS^IbG?pAe&K~+YIui5!TXCnG`GOX9Z@BCw zDfVOj^(LZZe!(Q@(Ct)j^KeC%KitXWG0EJ2sGoiRpj;k4p~jU(d)@vY$JGu|{tu?N zel4)Aie2Ut`+ewgXk#@6CEL(%hee+oABilRv0VUYqiAMrC7#$^TM9 zn+@HShU4o-Wtjrxl8;l`jbRq{1QV3?e*Emv?bwbiCJ(fKWX%~m5?5#@B8Cy*u(HGe zy&1916+I&E>{QIq6lyaTgyWD<208cMkT;?^wwjOG#>u_q2O?d`{yED05VYi8Tvb$T z;~dhKxK|%fG3EeQiT>idh|yuH0Eu{GsQo6C4B zt=*U)TLEic0hBeWG6)9dS(A<%yc_j|3Kn>rgr^OZn%?2P3spUuXkp{ks^v+-mNEN< z3m2-N#HkPe>C8L|k(zILGoY~SWjITQ)sFPO$Ml333?^eA9oM0Ry1guZg7ugM2vOxMIDV%P=e^Cm)PHkfl58Y*#`tpY>jJ5^BQNiz5S4@>y}#d z$eq=-=W4bYJ|WjgO0P90fESZF)mt$Myl|_z#K8(`E?xHj+IdcM`azqV&^R9Lfke;F zd(g!J9*iaPnX)xMOnV8}q|KFKN(i+e37&L=(l;3L)TDTB5sKXi;~$afNCD6sMf zC19MP92cjC)_tz4qqGpO4R|_B(pjSw2HA8X-o*%JT z^*W1H_{lO5^y5HJBHUXzX~>B`Vb)*f3pHJ6qwJKK-$on|`FVp25RfDRp^r^iSh#wv zKI)>H{HzNwf9vTVA+KN45sFiUDbu}s$DmwnIdobIl|6(73H5bC9s^cyC_#37!bSbn zUtZqpbn9Ex_4z%LdkFCp?BG|R+=C?sHT)nvGo+|@NN}n^Z1p;dgY1WVFk{1nVgAxy zN=nMYYTp1?5DhXXC4dJYCeFYpZ2Qf2wD97x&&Q?TEDk-2kU%K(P zMjapS*!y*?S8A6H$PRqPlHSGA;#7p+|Grp=-l0gd{RwQmD?2N<<0msSAyq)BMRB@S?HEFH{X(P z5JaNrWbMZkiiB&>@pl^+@_8-lUO0N>INvZ6rM>3MkYM9P0E2jP<5#{#{CDWupeDI% z|B-KClM~kriRh4;)=mkky9Y%@MIBP3W`9F%4bUMi_L|>78ePVqX668QFtOZI7`l3h z1Etd#q;7Sg+nwgI?289+f`{*f1iu>WsDvUl&^U)?zzgvxPq^IVAY(VH=1SK&o$)WY9m_!#)epB^jm0ULL<_OZl^9sOw` z(6&O|*WB5O>R#yhXO3VpeEQx33#m?>kvb@l8a2J$25B!s%qy6NpG}QZj4;^%cWPt{ zQf=L!^G6Pla?ORYBrzANs}&iPJdX$ux5P9J#N+P;7Q-W~wAV9bF|kMhDZwLrN2E#z ztCl=J0#=-A+O~Z1{3zvRDt!1mG&beeTs(0086}Ux$NSWKZ9kK>U`t-3Utq zBO^p}Wc85u6iq3Xp0Igz1tPwX?$F8$+4podF%@iRl*CxS{v{kt3)MG0i2D4Rn6MbF zJ%lq5KZ);fiCZm$$8~ym_|>UfQMoi{CyfO>BqhM#Bq${Ivjf}Ed)&htu{=JDiciC3 znLHla38=2NKf?4Wz1{PeTweX{iLh4VFL42aHDNZtu9_kFRbv%++k>tTEXXMaNEe8E zVvQ*k^icCivblI7i%fA9#hX92?e`P=?l8g8pX$njW1H7y?ZZTU&enD9sLN#pbCmG9 zSgxA)CMx!TpG3fgMFeg-K}$f35vRb3O%bEK^FJykV^z}#&!HDSJ|nQ}MIX$Zt^zV8v5*(-BXUh+8Fa6>UpX^M~#e$-vmyRa~uGoHWqI+vA4p3H_umFb^Tj zNeHt%h`5m8Q7WbREIU9HXucCtw)au9_d)`>a~QJ5?B#tJ_4whO@{U^~+-DGn&TY{O|2~iM3#`j##6gnq^XB_M;gFDTy-MkR_kUb~`cSI>j#%#< z^U|+LF^|cK>d5}@)EmDOL<(mn%nFeJVdO@SgnT7IvANjJoJb-T!@FW!H-%7G7VXbb z#*C7X*hX-91}~oxrw|x-8ubP5DW*s7Mo5L=?1(t81Z*SS^-Z*5M{L0))RItIl}5S? zL;MON9f5V%8Bv=-xqmc|3Z+q~8X+j+kC8oLz2=bpu+VZ8ZHZL$t3LcZ-ViA{mTtL* z<5d9Jt&D0&5CwpTeNR_+yBk~%BhH(L9@G!vR?&r3&TVz|Lu1!&9aC5P)1H1u&E#9n z0Y$)55;z#ab4PwG+Aj?RAPM?Ob!cfxAksAi zVTb`Z*u6t9B41CCH+0o_OTUGEwp-ZP7$EnfM1O%r4gol( z;aj9kesEX3j{yeUSGGS0X(;;!3tb7+-`LX0h~uu z*lQ5`-?M{Ks9-;2WyOL~MhFKB7}Sy|K7~LXMH6qoprGI=GWa^aT5qWnEqdwI(kh%J zbROM~^?#8jfeJ$-mjTi18vHh)fq@Pv91W*&DQ`!nw)W#*pF?)^sCY(Q9N5ML0Dj1e zi4Cu9UqK?JKXd;^UNs@xO4y*h72Uav&=ijr6sP_f{6zsg(1|}50b>oH`MMZy(u@l} zKl)rZB&8svGsHkb-7PCOw_TVQPyk_iU@?4^u-XN-zEUxh`B8x+93&mWkV>oi_{g#0 z)K7>I$#+YO{NfMv=@UAFXnZ+CWFRlha{ksSGl3y%8ygn`Ia3r5(fMHeL#C?|bsAC1 z;_!9aTt`E0j)M)wtYG|x9yI5PWO4mxnM(w;SZY8_3qoH+)RTyjkX<3ZrW%!uH=cVd`Xi#f5HwcK^HM}ENRWo=5pnJi?5OsX>FVQ4 z9Dz?Z7QDT7#3*nprz(3v-|M`kzzBA+27oL^48J zsbG9Fa8ibd4GG^cILrF@@e9H`R{1A{j{w(-qOK_&GQc$=juo5=9td*Nx(9v#^oiu! zwQG2z36l!sHvsOyV+>jK2GpleO*@`YV#(`-bXEg(Y00h1^V!+Cxdw>G zx9{9Jc;v_pJPa}lidLK3D2OD80ke(G*Y@@$kLu?T0tABzH4|1K=UvepWU{oJe@0ir zLYD9ydIf}+Bbrwt2m@`o*~zkpc(`4Jcpl<0(e&jAb{uwZ`PAJ_kEU76bFKxyUj<=9 zBkWb9gd?Cn_0irP|;4E5M#(2p2Xv$9?)ssjfns;;|XxxhS zCo~bthWOgIxI>794$cltP%|b!$fP56K>_e8#Py&V7tvv5u`nhV%Bv-VuZXYC4w*Ay zA7v_cwJSuc6r2s`5soQdEEW^T`oeM41Yr1Rz2I?AF;SB)Jd~#fxkvucDR44Zf1DI{9C%vONNxGx(vZ z(PSXBz5H^EpIFK}4S!#Fab8B=`VXLBWJ}OLUr9I+LFF3$7Mi7whtQh=sCkdalK|A) ze#7(?2R!?GW7B3>SXD-xuHt(mG$B3GV=7^!bU0voUujQw81VR1tEy`tglz-Nby z788`Ts5TsY4*(+#z8rLuN=699A6P8ppU_=E2)51QGA_`n6?PQ~kv(Kgl)rnKgq3l# z3TNl%32QQhI&J6IH10=&-S-p=8Npr={Jc1%M=TZ-bqjGXv^+7EKn%mP87XpwDrzP_ z1CD$+%E70f;E$B7mdT8<5+Q0we25)`9#EU07tkjIa7!4o>keGyw?%6SJ&8{!K?%=Z z0$$fmVa*t+Q%I6$LVpBNct$is#MdAqV?n_MEl*YBkZ{8n`96osrr~2hf z;)fu)1Z}p}foGH?bmz^EKr&6(?>g4(3?V6G2$cwub>v&jY$h%oXW>9XB79K+zMW`P zj&3uJ(fk#S+*GpUxRqCTX_2;DVQGnHLkuW>Agq1%q7ABmiz&%=C%k(Z`9#H09uX<7XFsc@+WYI0DYG zZvYwUki$rbEpt?aFaIl3n+Shx$OB@8F^-C&6@>o%=mf4J+e211?zJrs+0KEfDNXJm z=VNl#rS@~j3D*v6EpLrSQ^HoRfGSV_C$+*fF2xsK~jYvXK;k3X_ z4swg|{d>n5L$xFJHfA_);rk0?6s^Sr+|P+=IKeqVZG%hwUxvEMm2%M53R1z}alHYf zJ0&ZpP$TaUpA|x+aN#i0@>Cl_CTvErwwlM;e#kvY8sSXh+kI4>@RYPb#gE9HPQ*>Hp9XVjj0=&1ATHsse9A}LmJ)nI7UQfOrejEo-T6jrKGvJ(DE zMB}5N5Rg%M@|FO#6Ouq&2#`|+;sZ*a1LiP_%5=v7Ueypza<|`slj}Pqn%MZ|^6ec~ zW?7(@Vt|W)*r$fDQo&f$-X4PD`IqqCC>ZG(!q=z}5Y^g^Ts=2BF;PRr`vQv-umu@J7=WML z9N;u+7)Rhx0qv8CWsb)n0;2K(Q2(8WzF=Gu$A-ELumMB_NYl*$H@<~kPD$}lVzBoc zqO&dVjVPqV=k^HW*U1M4jKebyOAf+_g&z5lXyyqx8pZ`*y=ikGsg6YV6|+zru8<6= zQ^CcXY6bSS6mHM!dxkY~qD%N#c%O?#sE#>o?ccb1?^ad#>*Plb%-wR|;+?)+_0ZGT zl@Ix`??G3IDEs}x^K)qa3Zo~b2V5GMdZcD6i#ZR;m@;uIR+qAcn6&R6=xr7iDT!L% z@rz+eG6(h8W0#Qd;8-_3sZ_j3qY4!QG|8{Y$?|L~@`{M-|D7J- zL>pf)_W%k19)@Uyq$CRbZI6HyOLFuPa6i%60;wR{j?rmkGNQLAJ0 z=iuS4IZ;=OjS4Oj-S`u^LC(@%d!VX*vT-f{SBw9><)<^}~dtr*rdixW*~-VvA88j^z!xI^K;5e(NK4>%4w2 z^Eq0r{Y%jFzvyauba?#zr4$}bi$N4CMB$2p8XLli3gZO5pLO+RAZV0(_wCbO&3dXp z2Vw@{X@sE;p(XeV3q&)3c8{P_;#t%y!4wVwNvLyU*REYaLNlBEPY`9pUFccjoG09` z57({DI#!|!duD7h0^ocV4R+J;Pd6t)s6SKHa7IbJsn+7|~mXI8xp$a$K?9jc5EBD;!rc7`uKGH*W=#$dDUg&*1QK)<45y335tZH=Do0|Uw`lfArxzgv>8 z>|Xu*>`teUtMgI+KYasZAvtZPv$oqF>jok95j_kMB!JhPK7D!s2!$?Z*s)_l&R>b- zMNCx)AOvYzh#3#I7J8L_Wo2Rzc($)UK%Q`=>d*)bkT6;Kg1@=#BenCf^bw~+7$kp( zW{QGgq2+58tn7F%`i2vro;cjt5LgbOkV1ZVho~R>g{vL`oxr1U%mrYrj<~K4RZXmU za{yr;1r`L0Ix67aK!zmXF*?x{OA5VD=LCL&#sN_40|Zu&Ffln`N$eM#Ibq&wIr(P2 z!0|8L?>3rRwMQ(x=U%@4_6U#dOMQ+~o}P)Iabj*QU)tNXZ6s%>n`C*@bGc?-2&>fh z)t~h8dim{)--(Oo;FI<|H|m6*A#X_CgUN#YV`99!#ACKDxSH~vD0_Vk_n(B!!TP5B zd}({v!QDxbX->65%5l;?%=6P#4~wj(d-qTu9I`)59c-wnj^P|3zm96T5s&oaKZj)$ z*yx1D)-<0g1bMM)^P|x^NodX^JJ6x9!@CGwc5rgaLHAEMhXFD9Lb5&fdWtePB9}+G zYoF+ObYIt{rMawUDA1um|Cl7Z*^=PQ)*ks>ibc`ab@@-{yU*_F4F9^}9` z;q~(*BqSuGlIt(3fl4B8qt<{;Gzo#s63*6NzC4263yh4(-C#Y18}b$7S>!z>AeNFL zUa895z!Ig1E|i@7KdmFJB4}-!5LV@xcS~UaMSAtB!*XQZudiyEMvS`0E9b-tqU!oQ zt!~V-u~ogIqK(g$OKGWW`bKv~_GGlj4ogIcywQ^bit)^j|NgZ(6$>u)nMF-&s;4L^ zkAQ3Jcq`cfr>ef3zdT;5cRse?F>hDhZ8uZ=n5JJfxBc)b6&fa)JE?7{ zhav*Fs0FU;*9dnDjW1URRt6rsZuxX_)qbQovT=OF!8PNiJA0=?dFJGb1&AL+fc+z! z@%F77ZVn_hm%c5-H!t;cjUk8vIPOOs9DOAq+Y2 z09+3)eR^iD=d3|bPfsvYh}s8Y>8Q_!VdjWtj0q)%B{~!0v0&`B4WL3I;66g+2qNPc zfI#njj&%A6Jyynnt)AfGl6K+|6^%kF$;QIa_xgGiNtF0P1~3GJmiBMWm^Zdjb%C@b z54uxmh2BgY`B@tBtErXKD*MC74yJO)xkyX?vqs&4VSO9oj$&t`ZJKphzgB;+{LDy4 z&p15v=b53D_0bw%8nX;y>Ef`UsfV4@732d<)9|9;F3>J`# zz{rBVwRYk8*Xi%y!-)VkA&dxf2u!(0FBP_jpk)=7F6$W`AI|}#3u8XN|Cxo|$LtR? zsw0>cH!%NvrjZ^O?Mc~?!F-{xt@=m9lgRIT8;)MQbg6u>sL{X-i1?rKa)Y!7s(9+sZR`Je@q*mND7(;G{ zhzHR{^bd;ULe-h*AmE%sAnHK_2jg~K_xzbUIyvbLU>o8N+$4Z_38aMZ_kn*5MkPoZ z$?e7fC}2_m+n4t;dYn8w`XC+?CTl=Lvf&8PaHNmaEhPO}-m?sRIH5Q6kraJ*cx#r2 zdc0>eUQvFkPdgBQ_w~+85@kUvzaH)Xv*PtFVE9P?+U}pbd|BpuE##;AV@nfl!pc_i z3Ub4FPo7BcEn)lmm4^1vTLn7hE~=5o4ChSZT@I@lab4T$s~Y{b;9PFaZ2ow?wBa@& zP{QVekXj_bG%QHMWxZ@h6oVhXw6samYIb+A4HPB-EemSLLs+#>(a_O-ixe6S(3P#lM_R*y}*rL0uCsXq8>_teQbI<8%Jt1P&M=q_ztR0JTL|aw04k|wi-wkf+Q=f zxnYcfQ6Ye-k&y?#2MzAu-+s@~FeyF8UL5l)!paQUY6xwIqBD>596!lr?F&~HJ(Prp z^-eUr3JKIm8Rz2Sz2DhrLh`H0~-?|HDf50ivutFt#bLS(+e{l&}AZw!j>0Xt%-1ixV*2j+!FzmA9s ziaNmfzBxf8~Q#vf^n8`77sq zkSOk<0VIZf1lW(ddI8P06~_(} zggKD*2!_$-Ql{%I7|I$MabfPB5;P+R0~=yJl^6l(@ARj-8H-~Db!J);KxL`p52EGq zBOsR?WM*!_EQjSHnR~JhYBbGa+w|JL%ZJ*>F^(AZL$z}TTnR#FlRSbgwcWUZxp_Uh zGq&^0B9ox{xO22X#IVyAnyFGm(S0#nnH6-;#PqVj69ocTJlo{dMhFFYye!_wiPE|?rXT;k;Y)M(QuNXLW1-f6#Dn;i`oA701B-_>U;2SaOyq-x6w4PB4;rc&(-inmH@koAV!QwJIVL6h}saM{>Y~d zcs0K1>C+p0gz7#<>kBQieEd+pbMZX>N0*?O!h8ZJFc3UYFp*Pc0!Y5q)v%vAu~XLM zj_DNBEl#sj)P=}a7{gV9)P@=&r()8Zg5vs3X~}fe!GWolDR1779gY(wKv&pAzJ{&w z2Xv3uqRmk^6E1FflO3v`vk)Sv~nvGL`#o-GSrN0=j&)iAW4d z;me&RGfpGf_Lx9MNYKj#2tN`u#Q-0_h)ISX(!k6kcl+NE+J<~y;>_tUT3~GOKVDza z2*Zy>COzM-3(1;zQ2qeo;rH!bJWpKqEi65jNi{S9mI3Ms3b*$|X*z_%D0*%~%!`*b zf5JFNsIRXNYwMF2_oB%4r(cyTI(+8r*%9b$vq8%b(}dp_kKq5r{UCxA7{M?Bf%i~m zS*3$9v;lp9hXe!5y9HPq-_pIH22mJ3i-cLkIo|%ZOJw*KFIZPo6?7gmyP9$cvFZOG z7oe$)Jx!@Gin&qb-|u4Znoz+pJ49cEj0~B$Rq*1ZT2_|TJ5;A_DdTrXmk;>o7yLRc z&)l`g&DGNkh3ze;jDint{T-*u$Cpa4?HEE7M-ltf&V1Oom(9}bo!)&NubZu**1rUI z-0`g4P<#^-SR45Bj+ZZ4>@hxCCl1Hv#2i=|}c_mVGmBUYayx$1X>t0%_z z8VI!5@~90DZxZ~rwi3r1Mt;rg$Iy#JO0# z8N<^#ADrI_VFglUbl>@)Aw6~eEt_B=^&fiAuU74Sb0O-_GXwA7g3(#+I~SbvDM^fK z_8{)Uw|07Y?I-aWRgCu3Z7pyYcE1rGM+Lgj`1j}=u^FXam+)SzXp~m(w-&`|4v(1l zvvFv$51F3!-1<==JHzuiJ~rlWZ*=-(*HWu-n{n>n+c#E({APOOJDB7r_tT9yW4`2be_~+-HAUQ#O!cGtaXsDBK2aBIL3CV7l z?P2g4G=lSa%ZT{MhJNem8zm@1nqGN6=+qlH(Rim_b}@fz_E2pkPf5hbx68Aac&|kn z_UG+0?VmkV|HI~MbK&3hr@0tmg2eY)#6bX6JEdSXqxmQE^3N>^r=1JNZa+FLvV7$B z?N6EI75V)Y^^P;6>&xZ$9*`}Jeg5Kg+O=%VUWR-x<1Qnk*>1zr`ro8H)J9?4S_^ao zeFixeupECmkW5w*F!Cd@A4KE-I%)fJZ6+2*vuiUbyR@z2Om)y!n*tB5EsSr_vv zc~{2WOKhJT2=# zuh8BhLrm9J6g=RvJ#|?Q`v~`&-b(!2Kb-Qx?58lA{z@Xk=I2{0(8T2h?Jp*dRxqyG zb@}_d!X$5!Hhr|=INrcK{J$K%QNDFacj}79E(l~ay?Exjd1K%^<%c}0f!ePM``5GH z^uFI4Za4KL%}~m3dX)(k%_6hd9=E5?Y@T*zgNj}BFUcvAl`_S)xp)qb_8f7W^iu2E zsI#M^k7zPqv|2AUIAv6$W?{SZb|$&zLPvXvQVi9>J)d5T-ya(L`8qNEqQ&5f_&ats zs-sMI(}J7lF1A}Q^_eR!lZEj{}r@#H8+jB^DHwB^w@ z5pW3Tb6}u}H;Ke@P%3KPc6;T`Nba#MMS73>k&Bn|CG={2m&{t8CZ>~eM{;nn9Cpk5 zxqG1ddJcE{kB%pUjrAj)?Xoq+g<5~j{+jh%(vc85XX{rYGIQoe{aL2-KT8;gr+Xr= zm?RFzdW3%Yc zNi!E1AH8BXqIN!GSW!G9Hd3i_&_nVw#%pzF8bt^{QGz^$-ts<%xG-iXoY;Vg%v@~j zt_*)zbV_)s;*!oM#4$w2n;z0-6;GWXJ}eg4wF~Pgckbzpe^MFfite{SGc!Ck&7bq( zOTNMGz76LEQ9XsUcK4``_v}+5_uifRtX9>K!t32J)9f{jdqGmPmo7zaHiUk)f~SbX zMD_2_hBON+xuBV$ow!Fs8og`)P3DZJ_)xBYIjDzP3rf}@INXu!a(}egCCFl35wO7T zkm}b#BDD8G6aNw=KcgEe#G%ni|8yy)Yym|f*L9MpHQy$BMwh{}QEU5>q76yEpGsfV zS#`z>G-^pbsFzqKt!v84D7K|A9_~`U@oDMH$*!)8bLgfYrH(iF9W5LC)!(x+z1C>d z7wc(jikF>UyqK^SV8Qz3^6W;-RsfDDPFkOw#%cW_>!?D$yBDrlO7dK-syaJwt|X@& z>vnpz|CRLTMy+Ri zTsdw&H?ZqBNL51#QdwL3vNxiR7RCw$jQ|9t>Z+>e7+hgB?>1m)pV(NP!bz)afdV>5 za^f+>DsXn?*f8zkKcN4Pb#OrQrs4YY#?3os`}z9EO8%DfO$b>Z536VhinjE%iP_xk zA^Aj4>%0iVxdip%jE}#%NIfdvR*ZjB8w&_~wa-m<+P;TNO6)eqk4EACJ)^yOm!^|q&RWqiR(c+NDtW7LrF?aaF<8c6beCEn7Ox(lN3CmUxQ~|# zolj=yePKj!83WyhRKI|M4Lnv0ON+|-w7~mij(-r^AN~1t*U_J>?M>^ChHbAR`dtl7 z%^&j#&YFCU*vbz*xVFVAyhzhI#2XkId0oTuxZ(aSU+o^=8xB@12MqlzSMLYy`_x_k zj6K~<@Zaf@hhN8hKk7eT9n-_ba9w4JDsoF4I~=m9!9_FBolH;L81oL*-$`02kWB2) zg=)KdQ2Cb=i(qh(Cv4;X>*)Nb;(|c!B32E>#F#OCC+ZTaA^u}{cM2UYZQm<`C^$B^ zHJNFZ9C46HdM)m@@Q_KkHAwKzwtc=n7M3ZQqIdgc^Svb0cPr2?->K*Dk*j}XZ99s4 zpWULA+hgwQ;3!OZofbJqY^#O>%7kM7>~#OD00l{r%rp;a(;M$_xQq@$N)Ej z?`-?3KUq&^^91a)kd_>1Yx$YTM=?~woO+}OhIGgv2tlTBuZ`9naCCRwaCg6R&%1oa zM@EoAP;9a+n$Y#vQSHG=5K&(>HxPocDeDEVKKZxj?QwHQ6S|d?UjM=CzzAK+@Q*`; zAf;)8&VfpW6&XnML3nc)G-ExFN7%m={w&hD+Kwi4Sc(`yiOqY`&Sh~LTQ#z9-70sz zH4*I{L9;xJ{i|>~dFpEqQ?kjO?+Chj(aGZZVe)q;#nl-V?3fNlm1)2TVqFPqSuz@> z`O>4GMTIHv5_C}1@ABqdILnuDkUU}Izp2#g!(;s&2TxXA-mkG9rI@#D!|9BZ3c}4D zmIu)j-|eP9EMW`zwe>@15HZ0cjzN%XAd&LUCupERYV{Q&OCdjrZxmXOs3rYy7HGx` ztXhm|-_lxp#k4Q;MP;H%P9ZJbU)+=rNdKU%>ckC@8>8==;#P ziQC(*MYpWEnWtu2Hh$|yeTDTe+cycC)>5^sHBJp%)67on=a;-)@%OY`lDLmX)P6c~ z;NUgwF8<273AO%C$TCS5zLAcDLi4o@Q=QYEG|2Q2^##Nv@sLY}Lb1&YUy7>ySn@%$ z*1+ak1P*D+G>;oXc-9)Ff0ZXUnAQ7s?d(|B$jD1fSdg-oGbD453dxK47YT#TCw1SO zW!H?1cVE9QEKGP@O1V455`0+`l|I?|Ll_Q&x$RdJvQHn`)QjkX)s|Y zBtz0zAY~ZmSeADYtLNX3DX-u z5EXf*^~5XF4$|H`SXc!Lf|2kgnKcycM}Bimuf9ga-g$A4j;BP z!dx)z)^v1DL}hhQsj$w)BT-YRyL#t`1bOXRKXRJ1p3L8VUTewAz;oDK-}e=2kH0%! zze;-hxBquYS4l@6&Sb6iO{HW;ZDaG!3S-L@#hlkNmA5{HmlDGX09pMfP<8WlMW%Kv z{x?R}YIF~AnNd@(tmHHj?knY0lnWZNI5~ z?%3T?|MmWJx5u~)15&#e;KvEC6MqD80HoB@2h~ueg|a@x7y~87@8WF1;uWNt*E*7f zY5wbQl-ptHp9OMdJA7c8wmggPY47TD!o_8;t9V8P>p%k`ZwT_ZBT&ZlbCbxefJ=$+GT>*(u=DT>n8<)6q`eJOa8@kjV% zJ;RdQ)e7(4x$0n9%n|{kciikyLmi6IME1MNvkESw&q?1{s4&mbjMjG0$eQQZV7dlU z;`q3?gfzgBL(cK_fR54~vS!b(6f@+sYAwr4!+ttpT7%pUG#m7EOLfvhZ{Ammh!BwL zLE(wC-9wObXYwck+iCYc#K!N_*C{ug?j^h)%W4wwjW-x~euo53&Et9~C7YZmVuqs< z&rami(k5;svr+}5ZC7X7x@`=VuZ$TQEt1swAP%BM#T|e~vB6;s6>}2DGugAlpV}S< zi_>F;R&&jHw&=L^64Na|_SbL6$Ny^E*o2<<$~d+`S0BZ>+&d2O=7aT@GrY7yLPB7K z9pE<5(@QazgRw+MRk&6Hwzg*=_&MX}{ z1khAmbl1ZrY+WIk-#m^Nrn>L8bY~~>>Dd0_)%=m2mbR{mw85zz_-z@t{(Q(w6#iN0 zPh+7O;k4NmIr=bJ~fC&@|7phktS7ush~XlDV8fM_7TM`7WPYyOax{m9UGanUb3vqQ7z zuBu^w)qbMH###)|RoN=#$)Ry_M(;_NU-a9pCaV-44J$D>zYyZ3HkLaj(Gi{M0acAFoXJ`|-`jawHf4`}db|sy0 z?lIKc7J;gJ6rZU;mHSEXf|s%`xe$s}O&zDk8H?4qB+s;+0_`J-w1*G?4tEQdc+6`y z!h>}#%O~faWgX`lU@k97hk)wC3b)s=&)`xg+gpnS9@dg zP#}Cuw&QW*3GsnA5UZ5-d=Tv2d07&OJV1$j(u49^pvl)fWka zWDqqcC|>ZNzwN-hvs1Bmcu2|0DmSC!*Cr2Y!Zec@!4+jPki0QNA zRr8*ba}c0Ff%i+m7pq*gkc&F=h2HKQqep!)^`logwo->d>`;9ubg*g24E4`%8-{L` za-nXE#`?xEWs2xa-KV)~w{dZ;LgJc+*C3Zdnx=5O?7~Pr=#bc41(>`Rw`Nfxp!uPu zs;8s>ZuSSr(7+w)197&u9sXW8H*70yeba(L?ewRht$m-C0d~2c@Z;+HeoDj(-`QCi zGLhncw1a4@1CMJ94V-%E97_6}M0C)K=k5NtzXbTm6*wRwIP8ZICjyM;l* zhu_Dpw+8M{m@bf-ZbHb5i-Ys?efvWQ^I=kvSLRD(lmH053?Q6_rCa*8JXzz+1sbNW z;V!2cf7h|JsNl4Odmyom4ciY&a2~`lsI;fSn7R7yj!C|Lod_!&NXYR8 zD#u8@Rpb$!GSb?4S$jLngTrI+vkip3M`Zf1ukoxa6 zi$6h8rA8d^D*XQS&Br_Zo_%o7M4lg&bZjChshxu5kWwrUbcb&wg7Cm8cwr|ZDyls( z-qq3mw^eHh;cf1dQ%rH+4wRwqYfua(F%6nthbB=z6r1&Ep{ogn>ZyZjp(I41#)1Fs zelm}EXaR0vp#yFCBc&{PR;cWQ2`=q^HpFjKt^P52-HTGWVu%{sVB&0$>dn2Y@!V~z z4si>85sTeduD)c=dU;I$a%5Xd1HCH}kUc%3W~rdOPM8SFf#dIXPjH0z4l%X_MOFr( zttav34F)`eVFzl+zC^;oS_tA9ls?eN@{2)GFT_^~){E8A?X72taOIdV6OxJ8g{A3~ zPJ!5>^op2S`%`?%1EfMW4YdSn1_n^%+=dpvtM8r&>reLU*Sno7*FFmkwWQ%Is~Pp? ze7~6}r(l)ju{06$rds{&;)3jlX9UIR@!Doy{)QTNd)nUOI1sOU5YvcDWE?x)!rhGd zMEGT{0H*S#PbA373;G%`(7cu*W8y|TOTSE1)LUJWKJ~U;$k5Di+rC_AZIjLI8jkPv zuM-+cqjvRW^s0~o#RTkadWWgzW|3$Pv>mT+;Vz}XHyA~B9}4KHpHWeX^*%sDs`Ohh z7Wflna?<&dT1{smuNMtZ&bZ;`TyCsxlb_6_;g*i&a1&CRVoxCJ%-!fYpdc*&fIx)VHF zi@{jLJU9?e^NUbGCmm|PEg+kEZJd>^YzGs+;KK~tionBYP6-GMyiq?hqt*M3Ps0W) zcG%5gJWIt}kDlk$SWsz;SNKmq`j2uGFOM{CQM(Q5J9R?hFql!3@yE$W*$><&!30B@ zyXZ8PZYew@FQ?Ki&QP2R{=C^9jxpvl?hx*s=QjFbPZEOKyAmrY;C3S;!knel_C?a$ zug)AE)u}mSr|ix7ve-7*^LDK{!*4?)C3Os1h1;NX?XFwLM!6u(s_sQ%2FdV0)@}L$0i@+#1^aBNe$&;m3R~w&< z6i`Ssz|QxHQ}&P=^o0;BVIgzaA5oqFtmOoz(x6&dTPH!Q7OBEatal*xGBAp*Kb{1s zG8|z;-1g2VfiNfGd(5&l4T;M@`w9Xn=k92yDM)n^=!WReX{aGzPn@e%#O&10;Er*9~y`Zkfredvzu@1sdQ_auUN>*Pq#@8{I7T{L&kHgj*sMsKi5>Czta5+YU5QA;$Pl0z` z(3b`%R-Q>=V?5zLzE76GaI3!5+45ZLk_+Y8M~UF-6WTaj`eE^Nj>mX@y}zv=Ummf4 zu_;2Wa67*vii^9DL6O2pGrQJM^IkKMf{O)Je?TFytBaTBLFA-l4cqF$cw$!sn=rEJII(b8>LP$1s9oz+=T|aeSk!*E z)b#Ws_baze&S}uQVPmJvFdtUke;3BM>Jzv#u;fq z*FIGpnM^1C{=(^N<8R0Bw|n6p^50je3#(njDss4y!pN8vb=#@&I1pblY&m_E;ur-( z>dikA0o<8HJdT3yE*AEh(u>LZF?>BqI`E4o(FtahWZprEl-4LT@4Itd51TMJDwUYD z)Q#gN!79FrvaXSCvMnim@muPWHdxlm^D|tOyQ~9#SL;|sdMV;lqla{;x4#e%i;Y&fTTlw1%ms3sfpZxe?j;E`Q43IUT!Jtc1P=2r(EjJmy`w83^ySoDD}>s3e*Q;?@`KZU)S{Q;XJP%u(%rgqHawb|Z?@$$ zA{;EG4vDkMQctB7)J1+TOOBm2I!e18V?L93hC*_Y(9i|-{=Gj#`F+>@W=i8Uu;a<- zD5I+vOw~_U4KxhBKeu8hw542Wcg3!ue07_p_rHC4>u-JMOZBM=MP8X9AC8Uae;BXE zRXF}N3;9Jaf$$v8B(%GCg{;+BweIXJd<7-X2g9bI+x$%M#ttb0)CH-l*Vot6#uP*G z$QxA`&w#KQ+vb8VK@5=S?aD1X4rTCv+ zQJ$>4l-T|L-plu4`8w8%cS^neb;C93s86}x%o-BID-9gflAFg)weIkvKJ?Y zV}<-OdO>QHvwzh9PxzI|?l3EOd_WTY$F>V($ST#2I~t~Uk+?)Atcals5f}ig4Nhap zDu$!Oyk7uh%>3sB)@~5Ff}xWSB3*=c^r`ywt+W5r0$79=B%9Ye@Hp*f_GCALU@4eX zFjy|D88TE*29ppG#rV2*(S|wyr4KF$M7e$wH!k{H4LN=%X7u}nU#Z`xgclt!ew3T} ziKm=?H&_aFc=}l3@Pdfb@3!8&T@H<8>&}amF6oNDNpY=F*V^vF92fE`Li3n2Txy6lj8a%tnnrprS9g-q4KWYSm%O%{jC)jtDg^aF^~6PbCaG6L)YXu5IKk>&%vrcpJVT(C1R= zzmpor8)SPXjq;s3oMLO{px(OFX`X+r46Cn}@wLqSaWxms@7Ku82!Xl0Gh;g{KK*~c7suHllfNuU~ zJy`Mlf`Xm_`2ei#i1C46j23x8NPx)H1bW@R4}&m`2KjrSPoX~InyS!HdCK(sIew{X zo<@tIxp`1soqL)tGt7DfSIn8UGjSc98M_7U7m|kO5Q0G>eG@UOff#Xs^CT0k@;1Ag z&Al$E!kE6>!p>5;aQ?0Yve`Sd8YnB>Wo)+5AFEQonsLCNP@VfX_mwcSFr zT{1o~3aAg%zd#6Gg2)>&3gO`5vH}wg1Yj*74L*K-l#?4;Lchz@jFQMaIAr>c1YI~h zBj$Y945-l}>D)K5wh|1bE2dyn`5AMqlS0?Ev zCqL4KOKTFAwq>QK!hM}z?+nQ;$GwW%ACB} z_oYh_5ptT{sfQMAssFFDyg9meWzpL}BZ}ot8817{6c_jeq1@)OzM4&OaWQDOb-)J+ z#zXVCX|SD()oSU}V6E8qD{S%FMt&n)$|IaD(xy%0viW^%?`-FDDBn?yFTSQCmE7Ar z;nNc!NTuCx_~FWh1DEjtrNV8F8jc4PoN2}K-e-wK-G5Jv1u z#o6AmTS`dGkE{B6xt)Wu{Eq$SCGt4+#|GMdIlT^ZdvtQ0BdA{EUj@4MG| z6;g6vsz^b{$SX+cdLTUm>T5ywh`xeI<2D10FHZ$u4bqJMp1L+_QNvPN-gdP($}#!D z!;9ZNG&0spHILG1P<6BPo~U4s2F(xqEes@9Nw>$WuwTzBPL|OzdL7oz)PEXu)E*c- zHTqpz_6^L@vmNJPG;h<{rBT` zq0)xR{wu@7$GamA%8z(Rx4MwOn9HU6)*noNn#|@K?7YI8OBG9Kw?z6Dr(pYq2*gDiY^E6tsw^y}#TnFeVS)el-g~X*S5q_4 zFN~cPTW$8^u~AXowVZk)$l=Wv{xb&TsvZNqO*13zy?H45$Lu6 z5L?m)u^ZC=1gPm!-PHvXY&hYhxAN^55(7nBf_JDZ-R9$$rK;88!`~Y+!7!({j^|ae z)i9x4)v|D1c>b!zLd3_Gob|kR9tqKlE=DDK)yj6arEeN%HCr%fVGT4Ca5KjJN@iqe zXlx0`E$Bsk!bKMRgCU02Rcq(N0Q*>GW&SLv7vDyE@+_m=oqUNLF)ZS{|2txepf~}= zRTQY-XIph4wp;*kSuC#Z?{_7Rr zAv0-)!im41Uwwc7H^3t*O}ZkeJ~$D#xe>t}29yM**CErWZQOxEqLX(Uuie`I3%j!p zguc++)&`uAE=1gp`iekb^CjgEqNHM4H*{bVw0#?AaqMOScYpkIcU<79BxSwt&Y(1+qVYo>DaZ?F{dXf-MVmY)z!_V zakk?A6Fj)QKD!t%UKJtEL3lOKc%FQY> zYSsrkx1FsVx+yuPKZgixH2573+bKA@t!*sZ)jMOBWbOIkv&`^v zIJf7Ig9NugV#45lb2_mE)oea$iEG&9XCaS5ZvO8DP8R)cx0su~^iU`zHFe?AbD!em z)Gl|Q7&P1lkEj$)lufVRxAI}5zL>wY`hnn-Z@Fpxp%`sl4q8q?RMgVUQlT)p(I6ker(V2`r*v%? zYU|f(TFz39mtxW{1l9(~JbX~uo|9@uN-Ay8&~j4LGkqg-O+htUhm;c8TdsymtWZI`8A15^4oS6Xa?i|1}udC`2wD zYj;z7;P=~Ve%6!OPV?$3Stk2U%liC_dniAPX|$IlsZO*Hr(>K}n)b_mw2f6nTJPER z`25l~k?UA7eEM(aH^pu!xt9A(1ZmmvUK6f63g5b6;eMSvo9^4q3H$SkiJxiQV$vfS z6=PrDksY8o+P}xQ=e&8o+l~9@{3p}Z4d-2%pHwIjxGmM}tMrmfTf>H9r2*MCV3?SH znN4>WF%F1=hXw_L_--Ws2V68%ziw+of`@qap{KOM%?h0$VU5a%*LIZ5pWD`w=*Zd` z4KT;`E^RN3e@j9M{7CsZlU&Q1=2()m;5dBsr6IiQb4_WWCCKRKU*>nM)%3nckS*z0 zf^FC{NLs5zSnZUS$obe7-rmx;%2X>_(_)N4+K6)O;u5R zt|gkzT`aI7R?z>l`nZ*?d1}O8`MU$d_!qY2b!)Ol0;VJSrC#p(E<72Oz5+3NGH0a+ z4r}OTE@$WkGW;G%NnemS^;C;iGmFHn-(NJ&@LywY(uAJiRsVPRjn%134Xyvlkw(xe z^UBS~(bfJ+XYMR#b*}A9ebo&iah}!*MR+?1lKFRL1N}XFo!6y8ogI zS#o*?j=DbT@ZDf*a|3hpZixF4CN9jG=KS{U+l?DHm|=RvAD2BT42%VSU9x6=YK(2c zTgt4KOa*)nzovGYsHVmXGal4bsV8Z{3|f9x0$%pdPIk5@+ila_q+4&u6Lu%jQ6=CtR@A@Si{DV}uEM>V!v0=(b+Jhddl{Hh$CMXkKuN0uAccIPd-SNhfn$#09v z)oF5)-+I-b`jV%hn$2(TK~EszLzS&xjZewpO7#mWCb!zZ>Euu&WFJgZXl;*!qqyaK zraAY}oIubOr{1#|!@|l^iDCw(oj|>_Mo}?70{@wU5soWx%g#ur!5=gJUvcdV#(1a+~EP`}z*6<>mIsmwGJ+_N4j0c>m!0dK3ix zbz0-U)FgZ@9!%x`zld0td}D*XF7>^E!5a5NSrrDgvIQ{I0vYT!q+P%se*t7i1kMM@ zxKm7-JF@6BfwY=QiYjnf;&ai*X5x#v@YIScVcY17dEb^zqzAx zv=sDV_3OXaM+LNOT0Aeqd{)nYrJ&iJ&m>yxsjy=>1|8>cc3m8i!C9{0sIf3xaPn`{ z9p(AQo=1`ay6S5~Z}7$f->^mGZ~Tsy%7X{d&Y{2B5uB^8REze;&4Wc!$$p`8dtw-# z!yJSeqngj#OV>w^k7A|c3@rbS?Mrc9uE|W|ioYRozKkEOJ8YzxE13AHtDzP*Kbo($ zYBm`ZXumL^-+km_l*$%Ub~;!pe9iln58u@(^Y@RGABA_RB$w2>t;O0s4Fzy24MeU!rw;4BFk9;|7Tb_ ze5K~uz9xgbM}5xY`^}%lUbWcZh@d`rg!v>hky`BLqgNt4uYK=-efaPW|BXS@IKgL%jRZ2pS|24fU8C~+wG&xB~qOs?(T+{RL zyO-rg_hk4<8X`0<)&0xcI>|kyHyK&pzo0NF^)MkJaA9%gmk#EBbU^2Qb1L7*ja;rRj*TxBIgV&4t3_J! zx1J@rhp;(1rw=BJt7o;j2|0ivbT`Go07KS0I{%r=y9;@dhlz3och1^;Cpf~6ZMG6h>Q2~{9){~5*whK^{0;jm z198dy@J5)n7bGfdZ_f!*CV;Q&&MAmPK8M`a;QBWNe=Q99_yji(8-TUJ)ZqcFA9&&l8>Ccr_x4!uF^o!!FvBXYE zcJMqC`*VnIn&T3GkDTQpfjX~$ywxx5y7Wm{J zQ+}5#h%?vBI?JWEOWVq!W{6Qw(+|rj=g)U;+xxJsyvvFmp{fxjD8>|sKA#ibee%J0 zQZ9rAU%sUWEm4u~>TU@xk9>Bc`va(ga1+V~iR(3e+^lqczpTuBK2CL_BSl^tU!LD= znwm;GSVK(w{cY9XnU>E5YS*n!V~HXncvLxSzN9JoR+&=rj<~c9Y)2Pw_!@LwTHf{% zv=6;vPb2gUq5vNSNs=HI`6C{H*!N4kdns-P^=2^y$lU}Zq6 z^^}PzED_78_oHT1h z?K=tDZxu8IT=BeC|I9B~fX_5h-~05F#hX3CP=Mn2toX=TNXjK+m9wiWV8m@x}nF^Si&??6Y8!{K8{E@<5l z(hfrZ0y0IQjuS|;fTxfOS29eI2n6X4w7V^AImx!-I|Rn2p2>^z#C@6J8fw%2q%^bL z@Xs*e{c*9(L!xEvtpO61i(d&zGUdgsZP%Sd^-ROW2Dh+RxWQd@=)kF84LjuxAyLm% z%cd2k#GlL-)i{rSAJ`d7M^@D~2s)Gsa&jwlu>M9rF{;Z>Yua&6jD_X-XMH;NGrM zr>EbK{Zr*PXsBWQhnj>sHu|i0Bu&|9ALUJ4btK-E-Tk1}7x!l5=eZSVkGFk^9QRuI zMG_oZdMHCgJE^c3J6{V}W; z!tWCjf`vd)fP4c@jO*IW_z2#49PCA~rCMPQ5SWmMx`rX!s0fEH0G(nk!p%plSRiyO z)bGSa80Mg!`v{{&Gc~HpDmz^$V2)5<8nOH6y5Cle;K}{MzWnd-P1|I#W78ul-$v$rvS%S*uAAwGuUbZGDMWVr<{i^=O(%X_;P? zt4hdjn>{wR$as3=E{97%$eh!C#|r&{U*nIe`3J3SW!D&KjvpQ+bbLfH+UVBs$wXld zg;(4jzCEyc+8O52L8X`-nhjDqYbK}tm6wi=&u84u7$A{b0O2zdH~{@M9R6cF&}-@g zrlD=*Ngp8~5uvO`$zO9!jSY@yAaR=bWH+Zs=#yfch~u+{L|1*6%e$}--#H_#J01=U zpCX+WV*Gj4yV%O1iE9 zxO8VsFC@I80A#yh0#LAdH7A>4vlY^j?_Jq>Uno&%aR@uyRm~RfDeYG;$mNTR%gPJ@ z44bwUi98)y4g~X$Nh|?V-9VF+`U-s!?*e4FKw_7Kp9@j$Q%1&~u5bZ$iL@pr593k5 zIE0|fsp1{40rVJ}hK?{#Ckt?gvFBO^Bj> zcun4(;jQzVug0H+eLMfF)uA#vyVtGM%nvi!LcNmySK$$l1`2xw4 zych7l_uy1|NKD)fA>z*dJ_X!dKzr*0(lCH~5eGGJeYqU66e57c3NI+-B*NYWNfG?e zIZAXq`Fvqn=Rjfo$!kNLOZl(;e8XBFgu6P!PfxPhqPrR)A!F54y^}!6UiW`mfSng$ zZw2*TD5Pr9X8$elj#ais6({2U1h6H7nt&onD5Mis2WtufSLe3KFNCZLQX702!3)=r za7w?tGXE{l*`&2O5;$3_KkmIDLEowGbAlfm@I~M&o-Y{_=5E-_1pTcJugqlm#KN0F zbhMJBKffL*kt#fdQaA}dC^I~)F0VX zP?oaYn&L)0*|FTVaPMm)=+f<(1mMEXt*tp}t^e-q)H^@kLEO$6@lJR16rHttwZ@S& zbiOr++wJ^0OwLP&<7$af-0xxLi}fIhb@MGD==dc)L5>QnK)59PfvY(`5AT+a9=UL* z_x(B9+2!RnP!LMMTL|MukShibj%2y43j0k$zzZ3|9(8nb8h{rAf#AT!AucIdwQQ=U zs>%v>PuQOUb#;R9?oyDE%?ec0?jb0sL>Iq9<{&v7NE1Zb|J#gjzerPs!baz-27xaE zCLZ|z@@`i*0f4ju43fyz?Xdj^+Kh>VtH4B`2a;(r%*uh`n|1hP*!|40}SBL=YCRB-U0NNxtY^bq|xh}0B@b& z?GC>O` zVV;o@pq>E?y7GYsHhSw^O8^1%U!cF&0)Yvv*=`qGFSB9KV`R7ve8~3hZiWLM+VC%M z6BCgxFD(265J*3WjR6nW0(|=Rj%*%NpOfR`f1p{Gt*iaO_6U}Xgqx!Kv5 zaI6~*q@tOWx?qwuH+8`5MPT3+0)hqMqMH`f7;J@#JkrtEe+4u~WPlR#5J1-rfEieo zCZNl}`jNxTfvG8VWd02pXrJyYHEru0Jdw0;CV% zaXJy#GzdrlM*I|xf$*Ks?RI!ddRq_wtA~gq&vfd+^;@iad+q(JeMA_KY=YXvFsL$h zg!2uRwv5o|f^HE7-Nb#!cvqGN0f-?gpGuoFFPFLe@$qp4ll|+%s_v9Mz^8$gV{*;| zP)bn80XsHna1}u?M>1*E=B$IndJjf)GCLod#XHWS#k*gAgs};Z37Xv(hB{=HM~LV} z%=<30*;K_h0GC8n;mUpnzzB?1v;u_w^z`)9qMw+uoHQoh;5+f(9TYMJ1%0Ngc05Cb zQr?;=?6mR~s%o>QrZRTU&ho#77KP-2Mu(HFR3Po-#N&Lp0h!X|cxlYt_?EaQZZmzi>Ur~t0x>A_c;zI&snlWx3?7otF#AlcdIlr#VO$XOMY|I?q z*5MrqyYKuUFYOVD0Ef|osW5x~Tkv+CEUwG=aT6&leFT5`%VNxFm7P^y3e5nzGOd)t z`YKUkCrpxnu$(sY_5YNz`j*u@w~$gW;Cv0>=09?&g^i0$Mj>cFN(8?zA^3gS90=wf zMC6Rx^6l_gM-hbEOWEFZNeq;){ub9Av|-khmew~mOstd>nqh%PwiOf>h7D3AUC`bE zI7eAXKz0`P($3)_YwA!PjwFPcjsVKx9!MEB2|B~Lb-jw~yfNrl83l7o z+4AA;;?jHTlc_A$Udz69?rLW?LHctP&xTLliUDci_u5D2xqlvDVQ&BFLLbDNeOGLe zwcNLU;KI9Y{D)A!9YEjO=O+7I9 zugj3E=E<>|ij6R2tIXGt`zo#Dcjx@yQb*Rk?P}rKrYHPNA=lBY+3oEze#O;Pc0QO( z+6RYBA(&B+_YK1Fz{tqRO38;I%r%<5AW@T@6M&KJuy)9O0knctfDom{FAqe8P5Fhu z+!-Ba{O1Ip}vr4v@d&DzPK>&yXoB>YGXLqkeO_dr6RLBk?4EsnZFn^x#G2% zS?&%DOyK}NFyhsOjOQJI^lajm|7~@nuv-j9u~A`#MMZS9|Kn$0@2eRr?6HWi_;~u= zF+MeBP?xCWPOFe9+NY{Wrt6|oPhCbSW2ZafHw#TKdb!qDn)UQFnJu;tkBt~b#H?6d zu&5gC2P&kf=4**|lmcg}9Oaw-^rto3PL6T^7~0g#;~`RXz4<~^RU+#DzheFUM57YK z4WrqTl$`cX!5c+nf->ITiYiqreVjxnJeXa7g;LXYjsX-yj+fln8GkyFE=C!lc#Cyl zD0a-UyN$`|??QTt%IihWS?UgybK7}Bjp`gd{no5zA--HFj=Y3rIhhM!as+oyj!2u_ zjujjq>%}v`HHr;LBZ;w0_ zu0_uX3Hz{_-Oee7=a8*X;9aF;m#@y(v^~>9wd(ZPj)=W2N7S6K1S9=r=U>+K*VVXU z19s0S%qGoW6ka4T)rh%iGMaQ>oY*~CGNV8NgYnuW>d|5>(ut~IQ=nZ?t9)p`MSlil zek%uG`^`jCrLQw>q-F^&Fl!Z0K(pe0Dq8Hx^zU{`GP>fSi-?h16NkUww{0JaJT6H$ zw!*!2{qclOKu}!#hz45_Swc!qa6kq_d&gTny$q@~zemCOJaX8Qmu)AFx$6~RMyjHV!^*aS&mBjVOWLxDB2>_g;18B!5;N%7SJ5&`P zhTwzSAJNjom<8aJGQw5R($FxQ-(z>`h`*X8uB2yQMH*@#B0BO8X5TFkrZZqK<_*)3~#NFd?4+k zjEz6{BqJlPjwecIa|*uyl;Qg^lIKaxdzX|+S-VV5rC>MZ`xm!(-O8!VV(v+K z7C$F77T2xz$(KphGu9XjXU^2eyv;dj11sGvROH8_`$~K7F{TB>$2HSNeRP{5`ITJ- zcu=BgpX+hCTY`BjS|XybbNVaHIYWXZpOGtcOJ2D8*O_?)R0TKRxL3z$r`yx3Bpx{W zubW;eU#nDmZl4GrBPk%5BLvqC6fw`9}II)?`~%pZi@vkE#!8wtl_? zW%EV)u!+h~ZDcBdF5Ibz;~fT;FdKB?lenK-houvizhhS50`N5~(vbPkHMQGftb=mg z56Z$uG)|))Yvs6+mz3uYE9E&cpsaD2w67;zhWP!|h~@t1)wwKfy=j7hCr!NEm^B|8 z^t^Gfz_t05G&1@_oB2Q)x+YgI>Z8FvS~~Ke+(7m)bH*MEea>r$)k~x$TaIidj>iG> zbl)RSjf|psY8Z001)_cR-r9?yG2FP~pQWSNW!(|(HDSM#%q5IQjlUY>XV=lh@k|52;rGU@k7i0gY!Yr?SF8<|{*OCIR!^Bth>VGb2N%GP>5^$em zJG6gx@2wIoZ&*Fw^~UZLv{^jT58lU;n$KCy_cAZlhgDVgD_RhZ_0en^>{BJAX7X&P zFWq?KVwQ&Hd;drc>Sd7ei)IW056^hZrkOkwgwjZ&zp`Qk^9WVSEr_8y-_+R|06D}L zC=*0;F;zv0SV(g|@U_4G)rH(6p)MBvQ(78FRI1JU-UwZ?8NcN}jng^%G;4>!Jtdn0 zUx9FR?Q2Bn@ATo$v2uNe2eZy_aI}T*^^1@SzIO?h>E;=-oEkWO&N6FKXm^$0))M+* zlXk@Z@OT)LzKxhwp=8HLKrq4X>g=%G@jd0A9Y$aclS0h9{ z-QEFsWE{gECii-qzLA5Q&Mintp2N8E6_A;$afBuZcK6|3au?Oti zMuhiG=rL}vcT%!WMc>M^>05u2`N}?PnV6aLk*V7C%5hrEEAys=8Sa4!SI!1kbkEve zO*<-H;cjefIe3)U?_0kmxM_Wm9Fc&>`^`m|pw!AG;U0Mg#bB-;u5a0-4cS1b@T4Rr zMJG8om6(tK8SQW2JpTO3LF7enu+r}ds~lzya9fwt)ePhpGV}lz8RBgPUF=}^yzP}I zFI5_hs*-zR`GlNI&=`>V{h2D4=;Vq~lj3E4BJPQ5a}*nBuy z6ySt2W74hE@T}lagt!p=(Cm8H!O5Rhm;SYJ1&jEo0c@bYP6wi}$CpAy0JS*AM{o5$ zE_6x?6aQ_voJvKd)_o;lN15t=OI7lEmUsuwM3`@Gpod%WSNiM|nu3f@Y=XxV7M&gp zWsk@8Jp+7$DL2Eln)5XZ{|-H%Gr6@er&PX?U*il0=)H=a#ac1=&u0hc<`#(+iHV5( zYbCN|2Bzplxn(a5FGMCK!BCJFv+~oYL23kIe;ys5bcO(HZh7UB_;{Gn?9GFNUbn}w z8UY%e1=9Cv{6}9)N-u88n;ihT@GEbYk$4MdaiL4jw1&Ohy0*ALXX z%j_G@H-kwy?wve+s@+Za{NqE5skiaVi#PLB8~!#(>;(^OOx||CM9YwVX~SAk@#5mN zud1Atp`zr7y|S`{@WW)e@EeSUg-CWlrrbN7ow>%g+FE9(5@Y_+f+pbE{i*r-HF4^?prHP}rpt?@)J4N!V$ZruT9>H| zEOztksa~eqPpK5gm(GLBscAG)@9Z}}f5*|!Ywk};l8Oo44r6BGUreZ-NPdTFAME6I zF@RPhy_&5Sny5H_UQr*#kVBj~%6=O?U{_;)jwbD6Tb}8cx=Lz~Ai?K9SE+7~(A(*b z?X^1&|6ZP>k<^TLCU!`0DPkRp<yRe`J6<3%Pj?%b_i3noI+kE_3qVO^*mWixOkIrd;<=z_xc83 z6Ea+sM@;_>rrmNui95YF|EBpt^5uB1PeQG3lT7-cQB3K!XjqxX))FqxyT0Zo?Y^*Y z5ua;P_FTCOkgjLPb`tu@3$$@U4%T}oau$aVes_AdhlTq*e%Af^e2va=lS8>A(~&wN z79&Np;q>5{mc!DUJD7^s@}fDUj)=LhHTgC%u)RQ8JkELtWQ!kyT4_M|H=^tLsr*STJ%P?XLxgd+oz!*9#8Fn}2Qhkqz$s`qk)< z&1_G<^5L)EuPOAiLz)8KrHCjZbiC-`G8`;SI=hprV(lc3zFG%LHO0yK4bA7QTZ$eG zwr{h@wnA?b-%gMG*yFE}lOpH&5{tmNW2M?dCWf=k%4&pdZAN_KcsgDoAa+H7BIpnK z!1JHu5i**GiNZ4&_W7mcaJG&vX*CH__j&hfXXA7KJ)-PFHP#`jb@yCkW9Mc z{o29wuCE39IU^f?YO1D=UL%&RLYV9T9A=dz7AUdl0ows4!6LlJ`9o7B#(sF9Flf%B zdji*4bJF7aZ%A(*DH|~uPvmd(SV5RSls$9jwjq~&zSb-CE^fK7e7)@j367cQl5G}0 z(LCPpkHJ4WBhl8L-w`W_ZWbk`ob7n_HtXMEj?`rSh4EmXd*K5IOlii}3Fxc^#IYr+ zs8yQ|LAqVnZhuuz*}5DT!XrA*sXt1IRE*BHlQ2$R5XdTi4-4B}HZ5p~)QY&6Dq%ma zyYlq8m!$2g@A;CzT&V=xO#E=e!(#fotm7e(3pevvf8m=1OrM5#LL2O;gN=cL*ZV(jC&> zIWUCu(B0kLU1yKq`<>rf=lpU0JF}K+#^IS~Kl|SIzIWW$zOKaCS7a|890!0HR>uH) zk?!a~y&~S$tKRE+la)b6N{nKn%L$&1O+oIYZB>qntu&HxM#}DtP0{qK$qcFlheG?) zk-^PUI}Lkzk!oJdD303#vy&RM=U`kb@r)q7?Z`NqLFZDd?DVI)w@%kMb<;_- zoh4X9vUBE7GH;wxEOZe>>WvD4G4UD>rrF}f$ZFb{rC=%wHmIy^7p|@S@MOAY4F%IC zc@Eg!)i#yIIZ#&tRQUYIJ!~Vzx{a-RH^>PKeFDgMr&P{YxJ&c5QPx4D^d&3*sY)Z_P{_(=)>5nK zZAQ}ZAoTWr$)_1-0JYCAlgswe?*;_&tB3QR321IeNKz83+Zd`vwCVF$vt}j^dx_5{ za0~FcJsXUhxIRH{wsk-0rAy-{b6_kjN4d|tX9sPWj!4AmxE*Db-8xX{iv3_sD>5El zx;8gUwKZJ5HlO~~M>4#QMT~}wPQQL}^pWZ1ugac^l-X%>>m5Rn1(_DK_oM6$naX;!KH> zXRi{+@u_FdH1u@2WcJDLRUe1m=O6gx=o-=AiYRvVD@N6Druqa9WuyOsuZor#ZrE5 z9U;wIqrRcGwu>jm`b^NYZR+vd^dPuqIoeU+$%~5xWPKvjZ=YKt!}L+phx!ufW~x0K zH!IhBzPs}<4Ibv4G{vcEJ&B3`}2l*R*gK18xmF?l| zw<{kd{@Kda#4pnE{TLIuYf{NdkF~Jyj%tOC0K~e!q^MNvNa4~A_SN$_pZlBagG07{ z;qyKCl{4zNcEikxAZ}Dt=E&XIG#vW9mg|~sXU16LeWAuvJe8WU#m4)>f?G#ZH9E2< z9%pA6l+kZiT%Sh0IAFRTi0aMX9aJOO;H-J;R__E452bb)GPmN*^*4FdQuxS3-R4|Z zmBG|3^Eex@KSUx>2_ORj@ZN}%m4G4&kn-#Al_7RKDd2@t_f^m@zDM?a`>^cqpJfvM zXkM#i$tS? zxkS0?eAeOEA>mGmmlE@sOftxSPK++le9QW1Gv)KpyK}I9aDcIONvj_BTM#o=pm}RV zyM+iF#z^I<0MF3}C%Z@rH7b{Y*kU`ZV9yj-03>)y=t+;FIv9#ya3zasry8 z#y_o(C`kmhxMeCSs~x-r+z5VPp)xRJZi>z~NQqC01xtBY4BB6LUP)fs*eZ$?dE7>( z_P4a0IFs^u7Z#SulG9Sm$FgLl&jaf3O^1X8&6?Y>L2Fcs`BJ^C*M!$+%6*>szn)S- zq-%Iw%L=Ypjs7|G!j6>p6~!b}xQQhbh_q75+7WaD!-mW(|3r!vuDc|uNnYx+Hq8F;EoQvPJ-i0~IXF`IQB--H|AE0EVk^L#tC37URy{-iLX}34REAr81=`2 z(>8UG`(>x7j7dnpspHA7k<%(DFk0FQd93c!IXxBvA#9^*Mg9z;E~8qB7tqbL0x)kCrIK9O9ooRYbB+N;KZvqm$2miv1I0@|JdYdjSu|dvF3YPRLX6 zs_f1WF;Ihgy-ox5;^bUd`f|0pp>}ns>yDZ&iz`UR`Q(dU)PY&sV*f+g#w{<8;y8T#0(0}k<>G4l zPng;6G=nEzlGM%lyw!W4EVODSO*Cs*qCc652N6VD zX!-auBP`|{;Nxkc@Xlt#6s8@QgybUrY%$EAfeda%b#*p?Q$DJ=fRW10?Q-=`7I{Y~ zKACQD@(^jwOFPYyR4ZLSEO?6O`-b8MdN)iJm8@a+1Wx6w3%s5CW4TOOSJ&b3I`f3* zU+|1Z^DYExL6-1yfAXJ>e3j-5$*c~uDU>d%HxXhkE}vgsA9lbWO8g_n!>pY*LQ5a& zt0Ci6j&YilB-ztPP4y;b$BmS?rG?D}C<}ki9Q%|#y7bxnxDzE_L`igRZth>c`s1zq z;xfSafxulT$_caqx|&?=F_#xh$t&yY$3Phmd0}M*9C2%JZbkwmJRo~-?daIi-;cc? zE{KH4qzu}E(#UA~Omz`7QBN@=>GIvLXg_Pd z>qLjs!a#zIZ&dJ>ol#TeVxnE_QRCe)x&CgQ_d4!qHa4SHj+^JD&ElDN7?@G`VlsZw z!#MZ*9*gGW;4lEIW5vXa9JFUMh?QmP>-j#e%LThz4vq29l{#+4dF$!1xEv~|(5HBi zEX0I4=T?5Qo}GoqxlIdA{#{;vl)dt1?YD?;LM5ifSlI;Z>7RNK&HDL|pMYfUD$sC7 zFzpv;)rNyJN^BN0+;_M8o{H6})6q?z-XhZ1%vv=~KwSdCFN@Etl?tR5{}RuvgAAm; z!yp${W=UDupZ@+(z`?8Iaj6f*yB(27*hfU^r#SsezH;};p z*H}?fgpz0LDez_6^;AtRFy&PwlB1+y=)YZ!`Lm9OMxTDc&mT$GifRh+I1aX%1G8T* z7EYBodab7i--g&Ta^_$d?;9SB<}<9LQyrMh5>=V82xM8#FP$&+az#C}L+!@zjZ0^* zcDk{qqO7-pR)93kKUl)X!g&~y?>|BD3}e1#C8u#Hj61^Dfs z0Rad>9&qHDs8I;4twAobEuD}Vz5YAY>(XJT)98!?FjNhH?{k%obP^kwQE81~U>TVrtZ(krT$mqm80_cMHs z)hG;dnuaPriWlCr(;V16Q=yMyZF>dEZu=hwQ#*gyqZs$oZJRB-nX+*^hC!m z08B?SRVHDHLU-`=;<4Qp%6@(Nh|;H9m(^_*2M4M1`Lg)1NYHm4wETLiKSD-J>bTy^ zCeYrMdqP(yN<{^>8J?0BqIg->Td#9~ERT~Dhs8`RLIVs)#S7kD=z;TX=Mo`g+khR& z^`o=T7h_|8zz&AM4uGSVh{QNnb;Iu(Oa=x9gD8$uB#>-tZEFJpDLk)Uy)qgvnkCi# zJ5q|wBmwW)o*~SVQ_X6}3mRg0`XU2GBZ3CMh|2LW?YR`}ik{uFC}@mWNXPi*pLmne zg~oedB;?1{GI41IzUODt`sf-=8cpZ(3=}HzpkiuO_NI$f-nmfJfTC`6_`~|NVXZ)y zeF6QcoeEGBV|r}S4IB5Q1|=u*scy#C>4{IS^H@Q|g1j*B zQ$5_(>Z&dT5XnynkjrcWD2bnefneLSduDYe;^xMUk#TRQP~+35mtcDoA-Lq_1p&Yx z1g;XWxB_apk*Jb6Ul3jZ#}_#{IXKHmf8+AE#YN;ZMH=J;S$6qNZSlLkVaFk?!KWSM zQ43v@gf1uljQtumiF#SQVHWLee=huJ3Ty+7Gf%)Y36-Pca{2p*alCzg>o$gqH^?Lx zNblcnzu~r%h--+C$tKZE|52u*lPwG1s0uI8HsuZ9A2T3CMvFyr&@i7oUz{|IS}?nH z(f{y8#CzynwHW5Ahux-v4O6-p-FaTquGpphM(Rwta(?9Y*RR68@o#N1o<9g7M!&rD z?U7%}bMt+Rtqm|| zq=)Gh1j|e={szAPaA)SSuh`Tun>~Woh}N3M;(UsO$jZ95+?JPzE`2B2CGV!cw2T!~ zu)AfBEZJG?5*p?6ezX625j~b$p3t7hk-7c|o}>+ENWa(M05S$@fE)t+Oiu|2Bmj}# z;pu4`V0h5g)ddG)t!TGBwW_VJPK<$W795Zk1pn3nbii@_K>pj| zIZgqni*THYD-A+L5}-u=tE;P72J(S!>{%I>uRq9=fo^aC)Z{M#bP|Dc0AxHj;J=7} zU~7&A0K3~m$wTYv>T0{)QvtpN=pr?NbtfWK>CZK8BPlCu0AL1)NR1G62UV>d%FY68 zz)#bbav?1MBC9CxfwI6T< zXx~-Al;1FrfiU^#5q#MZ3Yj3dt(Xd}$2wc3Agk&dT-vaDm zqZF!i1Mm@I%Nk&pqrxJo9%5oLv8`ZWVivZVAg+;*`^tiaDDyYgpi?U~GY;rt0nsvjEdswNqJ)RQ zIe@~yJN=C0q*Be=LY$_<=K7y+0n02l@X82tKqmw+8lBR(e{lh<2wVW-hpq2Fhh#mdSFCsrkA!$f1Def?CBN#g!K2q>7$~+Z?LH=9~Trf^ty;+%zRun_d7;?c1B`brKc3&|2FR1u zL4^y67M3yTqnu3^>TM&S9^9S+}eyO8v0zjegbhr>sI#b!~-WxwK6mH84MJ#zzh=G)p@Xo?{9 zM!GOL{vlPncKa)=aE2{ON7NwX$h|>!>|-45z9X4DT(nnyI**pq-rgO+{2-mu@O>eDj{W#8%W$462$TZZP01 z)2lt^^M(Txixdg?cN8#S4d#D~E+h7r>ZGyAS8NeuFH#Ro?oEh@jW*b`0gS0d^IjX} zYefiGGgphPgCNZK&^qSCh1)?yY$7s3Ds$<;5Tj(E^Mwq>p4y4}!Qlf}S6fv8Tugg` z08fMK)AFDM$eV;~MQKuDUUEO{GREJp82^n?X;1!jdnHjc828IRQo5eg$TTpE!-Q@?Xe!fX0`nGW}0aR1#HPhR+DBcE5BGhaOyBNO=2%2Tf-e z=JaQI&RiPx7z=7>CyW$?&tqA*2?aSe6!$k9(csAhrOMpCfSif)94`%_O{j0HUBczv zX6dPoZk$8$%RO>?2Nt+>$hEk?Sl?1$&)w<@TvbDV_{azf?H!?gaw{fC-o-%{{u(6k zJB1UeX_zkN^qvPr*e`dtt5=n1U9&;NWvC4G@Y$41xl(EW1ss1$1qG;6V)Q>aOF6P9+s(+onpFTaYI-x8eMp9K#Qi zbbQOT$>^2i{N|GKtp{F~JdkAs_SWf=_)j0o+i>|3SLbsx^hjvAwfH)ZuzC}dKH5CD z&p!~WA~&T+Xq^=Cmtduj;X{?wx-PJQ4F-qrDb}oL-?G2#5}dsI7@}*pu)AnT&$xhW zMEt8~v0RpMT4DCpu>S!DLc zDd~KAJRzUWMMp7Y{$}#XzT05b!V)TN+C6v-pKoqMS>0z~`sgED{EANdqsy63t=Jcf z2KWVA#dQWo7>k1!>qn1Ki#N*+t?cHteX6Ef_*=3YZsVsP+9z;4+8-s|oe9Ov&Rh6w zcLENInBpqF=s484I9yu`;Qr?y#Qt?uj?2sHTPjy8Kc{5fpm`MXc(*KM;1K4mwW1k|c6oy4wAqcu zsHPf0?&!>BzA^cwgRF5w*sYA}w4N<@GtO7Gcni)0B2Q!dH|pEZq2A z;8bo6FYWnJCy%&AhOsgJFSqGIRou^mS47eq?pV3am^I10DW! z^Tdd84099e^+$bR&={4WVr>tJ-R872wLy05(85Y~SQ_FW2L4R!Gq+!L{h$Q6AbV~U zT2oNU*3ll^#jScaChIOM9UZ1+qsDrPVu9r=wWD<@WY??(Vu8PNPI~tw7 zPHJu2nW>mgx!lR?wVfNi6KF%tr7KfDl{<0>6{3htstoBN!E}ACZKU=(DX064GSl?q z&83voxXnQY&ZILDFNZYyT|z*uMerPiS0FL8y17vUFZFw}Uq5deSB}wEij?;LpLk5P z3F|+>6^xh^qGC&U1H?)@JexhM#A7v6>w~rOuYh@%!V5aP6x*$}BubhGImt1CzkPr4 z5i8M#noa!uFJ0*2{zg$|);IGuly(qJ_mUAuDS&$@%e3zzKLI9zayB%tdCmk=OkTYw zgFL~mbrFyG*jeI{0Wuug%U^#s0fpiToyCYW7) z%o*+bTYcK=YZaOO>!UIO%$uP}Pk0>XX~d*MPhrn7@jqdXwynu2u7~peuIXAEcMil` z*I!F)$2?feI8L0hF@e7zOQl{&hjuf%-=Tm&XE0}Z=XPWFqFB(H%m?YJaXz3xi^H0s zYPO?JL9i0W>MvKdl=+6ZM8CcH%eAiB)Gwdxq?)r^l^If7f2f&UzvI+_Qg;5${;220 z*I=RUDkU0jT7Q8sW{8q)-*469?RMe*K8=oVwXVjXWeT*Y4yFhffw85{3hkr`?Y?<1 z6)&#EYVKUIj2CWR$`W5y)wf^WlPrmNW6sW*bYD6V3)fa#J`wEp(~GnyD)z)_>M%9Y ztBKpL%!z*_(uO|ZY;;PsDZnI^R#H)WU=2+Sr zug6ZqCq3#9)=jUixyY_lQH{C8VbF>7!`?`}CngcX)zwo()m*VN{sk#qWnX>B``;KF zk+9^c5XK&#(CIke@PlDK%r>FSq`LaBLDT3laxZW>?Rk^#=3&`(^U>MzNiIWj96ZjY z3sL=*uiY^|{_0gpI58vytoa9b5a}&ff6<6ndw1=T%Z=}VThOOSkN@2X%rQBFR~LS=61ihh;Bu*$ zsQ&H3tMt0ocoJKR<{vZ$RZZPIevNY&EnS=`&W+dQ_mOPn?a519)zbucHc`b~s_TA@ zFv8Kx#}H2vC6n9r`q!!v1x{t|{3;r^?sYV)tE-7E3Ge&LPIHJ&1EeP#6tOrjZ*B*X zpzN}gf|CKD>rP%ZziYP(q0rOBae{6#hkxTDs`()#UjZ6&LJp1Y<;T3PBwvfYiA9awj>?Ddc5IyroP z&&c$IrVKjBw$;pgcdWbTQTWwV%$E?+(tf`!8U2UfP7RAzHJ4!u*M zg;B}<<6{pZD=}4f&!{urJ?9hTZ_+cz`3d`MUO%@bphLpH+uGU?^HZZfB8I%KX?1(7 zU~ajs3_oEFMOD=FcM{2?8N-G(dP+ac3t7OJ#e^b+)5W#Xr-SH%0HW5TQJlUY84&_I7cibEP zQmCV#W7!Y+rf$L6C+t5bSL8%U{nF)ieWhI!mbF@(@NGqrtEEv>|EpJ7V*?`>@dpQ4y&=Vc&qEl{eE!AzvABvc{e&d z={|(Y)uC0ublNUlnOfWGDm0?k@)^4UU@ZKL9A(S=(Gc4K8CO; z6|Khk`nEUa<%)CPOp-yWNbFxzOg;vy2`PicjG`Sa4lp9wteNm+FKjUg)qu?fYgg94 zJ4|4TJsA0>1Pp`euEX1Ad~5B%<2Eq!o@Z|r#W~dUa9qy0(#J2777uN$e$u%q`}RD1 zREA|w$Z9GMX;{-nVDx#ERNUhlt0e(xRK_oAoyrcPH3u!SmVeTcE*ker)ihpU6Y!!? zmA--d5|K@UZZMofhU%=C!e@C@09%ln2`h zell4P@fH8u@&ET~sXLL2QpaA3sIrE+LDx02@Mh8y|t45LrCcj?ki@F@$PuJb2=Irx@E*IZ6 zLow=_yi+&4e^PoaVGp251`)Bdn8!!Qva=Yo(l`dgPL{MgT2*jtVP`HZ)Py+0b$4a) z?JF*}wp|say>{%mqbJOTjbCnXWl+L?3JLo^=*Cu$h6y#4JX1$$gL-rwvy>zEc%0Xz z+?KuV3GBbVWiFEM`VKv?C}zeZ+%_@g^3E*3`*yo8v>vu8oQRyr5_NJq!g$yVCz)dtP})^E*M_tFvyFO3G5O>Lv1?PNPVF2&8&8+XDtb*7@}N{M4m)!gr) zT#iLjv-P^|O_ABF5zJW&%`>V~?!D%?4rR_d4RI4~7pv6|_TPhymN3RgO%JuBq<)%@ zuduZ5epC?+7If_-DhUhr9ONw>kKbGX{#$lccl?&gyXnujXCv>&z)$HLd zU3i8w{>f$cDaYpIW&4MTj6 zkX66u5QR5N;6pdpIaGHYaniG`el+Kq4_66R74J+t#K@+*A55q;mMaSvK+2>hq8R&` zk=&xh?AP`MWtI<)v*Li}DxKB)@!Zr5s@r(k{T6mOXH_^KowtL^7I_&QXR^WQUpXye zVpK(pV3Vw{Fn!=*V{Nm)YWEPtWhUmIIG+ zb&ok7z*R;`cXLs+f0`xGWnx}VH}QE;-7{!zDlCos?wkOo`^=JL{?bb;MRy)nCt^Hj z8y`OVQqujL&8|axN)!d6h5OwN0)ZIll}h+Oawn%r|9Ze6T6qLThTeM*(6JP0>o^L# zhB#G}ziOD?4H6Qwh_UwUaYh;p#dFK)nmoPg7Wa3_Ee|?MS&zy$bEw=R(yQ31+~zQF zDz|`d!)WF*T|Qk|JI^AyyRRKu@GWbFq}K0wC5B+F2AL_09TfNdQWC_Cnj6>ixzEk2ul4*0#(y)swc!mqc8J<< zp9m_hgBz&c&AyB3EgHL%o4GpM;%B-Db%WIjNgf-L4(Is^?O4kua8MTWy>vA61dwv_ zkph2vjpHgg+Zg;UC7<_=YBh3%bWHJ)qp2}?Bm-liI2?M$VbMk1gXXB&l?IDCJUgTs z$DywJrQhxP*-)>B&a*ee3YRrG`JUFH?UXunS=k2cnc zhm@;Kyc@VLBM)u02+2K|C9kFe9*lBLo~jvVZYAux7_EMQRlZiP#wY4<+}*nwixC`L zs*N%+E;k;G*P?QL0A2Q8;n<`0vM?3mtcG-62ixjL_XU?M;(=J{u4jn8`aneQ4n|1jzdy0s&0^H^2HZ7*| z=CJq5mCX9t9OoPQHK)rTWZdi3=3&<*$(ISCuLK)zJ`@yPuRVd?$hltabe#{t{awtD zAMUDMCXdzc4$FC@{O*;r91XhZ#x8-fS54S27$v&B*KBDKMa%m=Sp+9audq8QiMBv~ zeU*Myp~zwAN87QEjqar#uVK!swyPo~lEA6}mD@2lFV9>0TA(py2KD%$*t$Neo}5Y- zXfg7>nq)ZQT!r>LY?D4oW4I81Sr~Gqpdj~7*zn-*(oGLv zks<3InQRCI)n4+$J0(By*#KKK*Cau=jIqpiyt?+RYu8A3F81k`7C~l`jMs#j4c{E{ zkHk6P78sicU1~`fYEj$Ae%EBl#o%cj1+;UfT>iR)f4b|waqjOfg+t8SI$DU=&uB*V zG+YLioPq*rz%x&Ja0$eUa(Hal-a3Jyp(#=^@EV0Bz3De(PfweMaSbJVOt0 zvITVtZsa}8Z<@~nu@=L=-s~Ykv?6H7QNg&Ct`@`2NHvxJi&CJJS^Q2VAy2l}ZoQG{ zcCU*3>L%*=cHd721ern)yM58@>j&fEtM_bTpyhHJx{6#?Uu=wJTWq)+`M(w;3Ujc> ze+b#&ayUYQKw?MjClz`#<+@=*k2^-rC+Jp)R_ZQaIlFfid643hPZy!uhR_>+UD4KU z8jVaE8!0T#$e8Oc==dt>pt%B69puG3(IJpeDsvy`W@$(Z$qsTuk_9u9R#&BtoY>v9 z?x+MD+HN{w>rd59L=rsCu&>i#PlUrOoGkS3v4R34%2@C7Opzc@o=}iOAYO67-BDXx z8EbRbj;9@20(BhsZBg;@5&1$w)klw+it13S$wzl1~1(y0x{x3lWm;HRS1p;MI> zlkTf7PJQyL7dIM88oAEHaz;xVKN`q?lG(U|KXDVw(TaFG~B*So@eH(p+ zEB%&w`vIg#{XYW(9?okSy2!a{`bym?%Hez_wn{2~>6eo@Ke@l*&w?oaIOfzKn}dO` z@EqxJ4R_29i3<)RMhS;qz}Q zE2O>&pD$zWa0x98l@Qmt1ag5Zr-KtS7Z&e^ac2H5kUR{o!V ztVH|&Q<131$Q+P{pXvseHR*pjKm+gK_5Z6%{|{?UQW*oTi875Y&_Dma*d{AYV<@}6 tluw#?H-9pT90vwKycSp|%&MmD(Wi~c4QCAHDiPmFipqW{68Yr)zW~Ieo~r-= diff --git a/doc/headers.svg b/doc/headers.svg index 209a06c..523179b 100644 --- a/doc/headers.svg +++ b/doc/headers.svg @@ -28,8 +28,8 @@ inkscape:document-units="mm" showgrid="false" inkscape:zoom="1.3719136" - inkscape:cx="472.69741" - inkscape:cy="228.14848" + inkscape:cx="531.73902" + inkscape:cy="354.24971" inkscape:window-width="1920" inkscape:window-height="979" inkscape:window-x="0" @@ -294,11 +294,12 @@ + ry="2.0600297" + rx="2.1743569" /> 1 + y="56.927811">0 1 + y="56.927811">0 2 + y="56.927811">1 2 + y="56.927811">1 15 + y="56.927811">14 15 + y="56.927811">14 15 + y="69.415131">14 15 + y="69.415131">14 2 + y="86.697533">1 2 + y="78.100777">1 2 + y="88.452538">1 VMBkey + y="92.950294">VMK 1 + x="117.41192" + y="93.41362">0 NumSlices Metadata | | | | 2 + y="81.268738">1 2 + y="81.023582">1 2 + y="81.023582">1 2 + y="93.41362">1 2 + x="138.43971" + y="93.41362">1 2 + y="69.512749">1 2 + y="69.512749">1 @@ -1329,7 +1330,7 @@ id="tspan2600" style="font-style:normal;font-variant:normal;font-weight:600;font-stretch:normal;font-family:FreeSans;-inkscape-font-specification:'FreeSans Semi-Bold';fill:#0000ff;fill-opacity:1;stroke-width:0.0573041" x="147.63687" - y="82.810692">1 + y="82.810692">0 2 + y="82.810692">1 NumSlices + y="82.810692">NumSlices-1 2 + y="71.868858">1 2 + y="69.415131">1 2 + y="69.415131">1 1 + y="69.415131">0 1 + y="69.415131">0 j6_c_0F-`92B*Ljj{tW3E%;2aPLgxlQA$QI0jV8GZ| z!82ac4G$*vATtaR0^#XB8K(vUtK7jyu@K`sA$EbDAtYCV2ZTf-Dc=q7CAzr=c_;@G zyb4!z;1CEKm${Jv+B1FES9V9^oloXMV2PvYK5dtx79D1&zK_Z6v8^1UItz z)5*v<0=lMgK>+QB@L`MK0023%&%|kN|SK5wgM)lnR$76 zQ}D#jPHja+#l;ZR{{DU&Y4yBkW7zO^aBwhNTudK+W^ZGG*uc)i9@2hW9+5sA!T&scTSBkjbH57P7IiaiPoZ_!71)=#-wGUO{0Ytvg!pQ;D9}%-aO) zt8k%Qi$6-2-zIQsMQr~nI#9^97^`zM4G%{N2?;@2S%}&s z-u0(u$$s-g>P8)~rL79Ta>{V1tEj9zlTCflJM(C4a&mHUdD-~o-=((I-hO^im-X2` zP&w3~#}7F&Ix4$oQ!|=ICTs2CTKvRN#p(6+s+Mws61tH=DO7y@Wi>TJZ*K)oVZ_OD zI$d|cD3UiiIvVLe4%PScl(T-KGedtB5fU0YyRcx2#fqOkeR^bELOYbp+1Z&uB+}~L z2GU+PIb8Da@X!-l$mwgGSpG$8OdKAzdV%YdqvCKlt;pTWeSLi}VPOG&egg*wIHb3? z7va#9q!CCD+WYNcVrrV4mL`Kl=2cY4wfNEEzId0_*JtkT-V+cM6cZPJ7ts1+Wn~yJ z(H^m*3}G^vIk~wvvDh?AIq6H6$W>JefHfNhSQT1{gOgJcfq=T~tbA{3YT|>#QzY5m zGYBBP^78V@?&#yhY>>mLp2bB405>FrM7q8yA||Hge?oa8&$-#zzSPG<^O)2f#-NCr zni_KNP0 z698;}aq*9@@BfpOnwl+8GwQ?6&OS5QPJBG%c?Hg$oSY1U!EDfIs6HMq1wuJFIcwm! z$~$AVm}_V>EG#T6heDC24ANTs&w|yDE#&}Vkh4fXNqPCif&#d^nwU0e#r<%9Yi?oT z)A;W3SvsBGa}O_nq%EnMM4|lM)Iy`tHg|T2zrLxesjGW!Z7ok|DC0Vy`i6#Yd4&SU zpWJqIOtmN{_%vl^W_E>bJUlvz!sGFO(fmM~rq47>znFP=$bwiF*`i!ZMI~cEj*hD8 z>Qnt1&USW!agx(ZOQ;2R%bwm|mYAncFUaq`>;JvES@cy|RyLu|v6V3Qo?kcm=%6<$ z8a858xH{Ec2}Bp+o_n65()d7Tp$j4Z3zhpz^qz6m#Fo2Cuy~8 zi%xe!X=~G(eMRc)>$}3YI6xgF(oRnBy@&|ATelc8jWoX#CI9?+ks2NzF2_7TAcQ$D z(<8bQQ&Ty6atc2V4UubW5f<04w?`fBTmN&!|M4Cg)Zn@?KcoQT;9_NwmX`k7bAd7# ztSR2s-mXPUdX}V+0-D&RD=@OetZ=9wm`iecx}1(q(SrxjtgNid`Igvrf`=_0i^YnH ziRHs4*4F--b9?*gWt>6^1hfHLzNH+ui(uf~POWNeObjFhbq-a`)A@a+NmyJwt#_tp zV89f<8Fktd;e^ATb8HRBEeN@BgKU)fOkwuNk81$|FS5xsH5YxF$E$B^YM~WulycGb z_O=*IGFI7Z^!cr_ii(ENWd{oji=s{An?(%+01WG;jBXCW`{+7*K{))wAVmdu;{^nQ zD`sqL%p3{uZ4I14QFU~5KKnGMrKf)#9o^Eae}jI!UbMp;kw>9W-`awuQN_c_ug51Q zFkSal4GavjEcu|IWxfI3H+|ybf`WqgRBGma zso~QHPTCyC diff --git a/resources/images/badges/badge_version_0.4.2.png b/resources/images/badges/badge_version_0.4.2.png new file mode 100644 index 0000000000000000000000000000000000000000..c9c77f8edafda50cd0ed373223a317b669bea558 GIT binary patch literal 2332 zcmWkwc|6nqA79@j)M)O6gytS9R?ZxAg)l~{$rYPe42xVT4Pn_FDaz(% zsK^;1-?@*F`n`XDyg#qU;gypw?FAPGAzi5#{3r-@9_& zUSROww7NuuKm=RHzr5BOZUu^OA)+1VK`H%)3=sd>1!2>CNLyJERmf2roWXSG{tMa6GM zaOoia)TvXw_}YQbpNZS6zS4qiLThL=I=y4&3=&CP8f$z~mz0#GsH7w!BV*^{BDTG~ zeKx=QNuKek2=7lRMP+64ui+OXhY5It;OT3r$eT#>Vig-<@oXpZ)drbV;nJ<`xf-c z&c~MYuVu}INDCeeZ@9Wzpd zt{Ve0#*AGOK@*9m84N~iTN{UQ83~>b4h|Z>iW{eUFk@_U&hW=&s=0331fDiZhA|U zauOyjep~6-$Tgs}wNOu9c=7c{o?e&@l}skrgmc{m1O!+e9p0^pFm<;VkhrWY@yPW# z6ChPvnhc%6fZl!I{H5BvthDr6dxnaex_Em>$78)PRSSChr%x6JvO@UUoRQZA;(Y%} zNS3BYcfLMJSy}n~5gu`Mx8}J%Iu4JQS5)LlFg3wqWg{XYAnMq6kJ{U9roMj%CSm!U zIwJ*5NJzNyHss{o)OJfEOabB_5I`?2<%@ew7`K_}xu(TqTVP+}-Ib%`TP*OF682$u;AM4=>^~-fBfKHsJjuh04EI8AAXa8AgL1$GlfDJ4_dSRhZT%W(9 zh6a?zZk_EZjP^Qe9AiMYq`;Mw$h%uh3N-ekb40iW9acV=JcvKgv^W8zaCCBtm*eZq zMN%>{L@Tk4$s=6BdY~wf0}}P;_oYZu9I#HPUjDN!^4{*2Lb80WZlKppd*;=h;Rcc> zaOg(*(Nqh_6@)^vjyfg$s_#qDHAh*R&j5ToO3*iYhAnuSdE*K9DFD_N#W& z%I%Uo%$r1aP-d~&MfLSLb#=M`M!Z~aZ?D`}QE~B?em%18?(TXYwebVWz_nXT;|H5C z3FWR;tMeQsK$xO_!>GNrHUDzhnv1iuTy_V)kdV-?)jLPT#15QCqiK|P^n}nkrlo}i zFAj&R@L(2DjvN2+W>uXM(+$AmOBoDQ)n_yon`Tq&)%(OG z?;Mdg4s0gCgf6k)m_%7x();|MvDx2OmKR6$tv$f{bY1tJ{E(0$qn`zs0s(Vtcat%G zHge-9Dmb{B(#Z|?uK7AQ^14c~oWbDwtkw7j1@Y=-SENn8ABR6kOq4r)n)cy?sePf* z9wk~JzPUbZ0oe9nQBl!<kV$QK7%KU5=n&ak7SyAe{yt$SWx9i~85%;MCL+_sq_*Ew-`AjQE(WJCAxW4`fSwvPg z&8cjCUd%|)%#;rb{dhyyTQ@hI?UN#Xj=H@zOUuhkVf(CBOQ8A)l=;DO*OEWK%6t1P zGi^?;tgIMB?_|7qp(QLV47mkjS}Cn#W(vG9ddXs0fdvc<4E(|kXAYi+(}Mr}j(BdD zdw(>@um72KOyQD{Nlye63Vj!`c0Wl(>FFRoy4^J_OsDbo*7fCy_f%U%c8%9Zf$Kd5 zGRu!a)ZZ9y%764oaw6bT^zUEVi0qEp3qPB4kp#duz-&DPB9Qm6x`!0_2eBZ>)vu?~7L$c8EteBSj&_j}b*+})`;^Jo|C7_JHbFvEzBH{<} zzVrRXqGDnvlI0^C3yh+7c=o0}nxd?|y%jEGBLJbC;o)R#l_eq@jlm4Djf{;8TU*UB zRam>=U~OO|&|+v04^5~xQ%aUXh91+sx%llIs6Q5q^)R#{oJ+mWSL<%)?Ce}J1Uo!A zIcbhUSsx1n-9ZfkQI&EG+1+NOub&H&WH%a<%~n%WGh<*#I~j(uLY5TSlR7$?_wMn4 zaslI{ 0.4.1 + y="76.044922">0.4.2