All of lore.kernel.org
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH 01/23] ppc/pnv: introduce a new intc_create() operation to the chip model
@ 2018-06-22  4:24 David Gibson
  2018-06-22  4:24 ` [Qemu-devel] [PATCH 02/23] ppc/pnv: introduce a new isa_create() " David Gibson
                   ` (23 more replies)
  0 siblings, 24 replies; 27+ messages in thread
From: David Gibson @ 2018-06-22  4:24 UTC (permalink / raw)
  To: peter.maydell
  Cc: agraf, aik, groug, clg, lvivier, qemu-devel, qemu-ppc, David Gibson

From: Cédric Le Goater <clg@kaod.org>

On Power9, the thread interrupt presenter has a different type and is
linked to the chip owning the cores.

Signed-off-by: Cédric Le Goater <clg@kaod.org>
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
---
 hw/ppc/pnv.c         | 21 +++++++++++++++++++--
 hw/ppc/pnv_core.c    | 18 +++++++++---------
 include/hw/ppc/pnv.h |  1 +
 3 files changed, 29 insertions(+), 11 deletions(-)

diff --git a/hw/ppc/pnv.c b/hw/ppc/pnv.c
index 0d2b79f798..c7e127ae97 100644
--- a/hw/ppc/pnv.c
+++ b/hw/ppc/pnv.c
@@ -671,6 +671,13 @@ static uint32_t pnv_chip_core_pir_p8(PnvChip *chip, uint32_t core_id)
     return (chip->chip_id << 7) | (core_id << 3);
 }
 
+static Object *pnv_chip_power8_intc_create(PnvChip *chip, Object *child,
+                                           Error **errp)
+{
+    return icp_create(child, TYPE_PNV_ICP, XICS_FABRIC(qdev_get_machine()),
+                      errp);
+}
+
 /*
  *    0:48  Reserved - Read as zeroes
  *   49:52  Node ID
@@ -686,6 +693,12 @@ static uint32_t pnv_chip_core_pir_p9(PnvChip *chip, uint32_t core_id)
     return (chip->chip_id << 8) | (core_id << 2);
 }
 
+static Object *pnv_chip_power9_intc_create(PnvChip *chip, Object *child,
+                                           Error **errp)
+{
+    return NULL;
+}
+
 /* Allowed core identifiers on a POWER8 Processor Chip :
  *
  * <EX0 reserved>
@@ -721,6 +734,7 @@ static void pnv_chip_power8e_class_init(ObjectClass *klass, void *data)
     k->chip_cfam_id = 0x221ef04980000000ull;  /* P8 Murano DD2.1 */
     k->cores_mask = POWER8E_CORE_MASK;
     k->core_pir = pnv_chip_core_pir_p8;
+    k->intc_create = pnv_chip_power8_intc_create;
     k->xscom_base = 0x003fc0000000000ull;
     dc->desc = "PowerNV Chip POWER8E";
 }
@@ -734,6 +748,7 @@ static void pnv_chip_power8_class_init(ObjectClass *klass, void *data)
     k->chip_cfam_id = 0x220ea04980000000ull; /* P8 Venice DD2.0 */
     k->cores_mask = POWER8_CORE_MASK;
     k->core_pir = pnv_chip_core_pir_p8;
+    k->intc_create = pnv_chip_power8_intc_create;
     k->xscom_base = 0x003fc0000000000ull;
     dc->desc = "PowerNV Chip POWER8";
 }
@@ -747,6 +762,7 @@ static void pnv_chip_power8nvl_class_init(ObjectClass *klass, void *data)
     k->chip_cfam_id = 0x120d304980000000ull;  /* P8 Naples DD1.0 */
     k->cores_mask = POWER8_CORE_MASK;
     k->core_pir = pnv_chip_core_pir_p8;
+    k->intc_create = pnv_chip_power8_intc_create;
     k->xscom_base = 0x003fc0000000000ull;
     dc->desc = "PowerNV Chip POWER8NVL";
 }
@@ -760,6 +776,7 @@ static void pnv_chip_power9_class_init(ObjectClass *klass, void *data)
     k->chip_cfam_id = 0x220d104900008000ull; /* P9 Nimbus DD2.0 */
     k->cores_mask = POWER9_CORE_MASK;
     k->core_pir = pnv_chip_core_pir_p9;
+    k->intc_create = pnv_chip_power9_intc_create;
     k->xscom_base = 0x00603fc00000000ull;
     dc->desc = "PowerNV Chip POWER9";
 }
@@ -892,8 +909,8 @@ static void pnv_chip_core_realize(PnvChip *chip, Error **errp)
         object_property_set_int(OBJECT(pnv_core),
                                 pcc->core_pir(chip, core_hwid),
                                 "pir", &error_fatal);
-        object_property_add_const_link(OBJECT(pnv_core), "xics",
-                                       qdev_get_machine(), &error_fatal);
+        object_property_add_const_link(OBJECT(pnv_core), "chip",
+                                       OBJECT(chip), &error_fatal);
         object_property_set_bool(OBJECT(pnv_core), true, "realized",
                                  &error_fatal);
         object_unref(OBJECT(pnv_core));
diff --git a/hw/ppc/pnv_core.c b/hw/ppc/pnv_core.c
index f7cf33f547..a9f129fc2c 100644
--- a/hw/ppc/pnv_core.c
+++ b/hw/ppc/pnv_core.c
@@ -99,13 +99,14 @@ static const MemoryRegionOps pnv_core_xscom_ops = {
     .endianness = DEVICE_BIG_ENDIAN,
 };
 
-static void pnv_realize_vcpu(PowerPCCPU *cpu, XICSFabric *xi, Error **errp)
+static void pnv_realize_vcpu(PowerPCCPU *cpu, PnvChip *chip, Error **errp)
 {
     CPUPPCState *env = &cpu->env;
     int core_pir;
     int thread_index = 0; /* TODO: TCG supports only one thread */
     ppc_spr_t *pir = &env->spr_cb[SPR_PIR];
     Error *local_err = NULL;
+    PnvChipClass *pcc = PNV_CHIP_GET_CLASS(chip);
 
     object_property_set_bool(OBJECT(cpu), true, "realized", &local_err);
     if (local_err) {
@@ -113,7 +114,7 @@ static void pnv_realize_vcpu(PowerPCCPU *cpu, XICSFabric *xi, Error **errp)
         return;
     }
 
-    cpu->intc = icp_create(OBJECT(cpu), TYPE_PNV_ICP, xi, &local_err);
+    cpu->intc = pcc->intc_create(chip, OBJECT(cpu), &local_err);
     if (local_err) {
         error_propagate(errp, local_err);
         return;
@@ -143,13 +144,12 @@ static void pnv_core_realize(DeviceState *dev, Error **errp)
     void *obj;
     int i, j;
     char name[32];
-    Object *xi;
+    Object *chip;
 
-    xi = object_property_get_link(OBJECT(dev), "xics", &local_err);
-    if (!xi) {
-        error_setg(errp, "%s: required link 'xics' not found: %s",
-                   __func__, error_get_pretty(local_err));
-        return;
+    chip = object_property_get_link(OBJECT(dev), "chip", &local_err);
+    if (!chip) {
+        error_propagate(errp, local_err);
+        error_prepend(errp, "required link 'chip' not found: ");
     }
 
     pc->threads = g_new(PowerPCCPU *, cc->nr_threads);
@@ -166,7 +166,7 @@ static void pnv_core_realize(DeviceState *dev, Error **errp)
     }
 
     for (j = 0; j < cc->nr_threads; j++) {
-        pnv_realize_vcpu(pc->threads[j], XICS_FABRIC(xi), &local_err);
+        pnv_realize_vcpu(pc->threads[j], PNV_CHIP(chip), &local_err);
         if (local_err) {
             goto err;
         }
diff --git a/include/hw/ppc/pnv.h b/include/hw/ppc/pnv.h
index 90759240a7..e934e84f55 100644
--- a/include/hw/ppc/pnv.h
+++ b/include/hw/ppc/pnv.h
@@ -76,6 +76,7 @@ typedef struct PnvChipClass {
     hwaddr       xscom_base;
 
     uint32_t (*core_pir)(PnvChip *chip, uint32_t core_id);
+    Object *(*intc_create)(PnvChip *chip, Object *child, Error **errp);
 } PnvChipClass;
 
 #define PNV_CHIP_TYPE_SUFFIX "-" TYPE_PNV_CHIP
-- 
2.17.1

^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [Qemu-devel] [PATCH 02/23] ppc/pnv: introduce a new isa_create() operation to the chip model
  2018-06-22  4:24 [Qemu-devel] [PATCH 01/23] ppc/pnv: introduce a new intc_create() operation to the chip model David Gibson
@ 2018-06-22  4:24 ` David Gibson
  2018-06-22  4:24 ` [Qemu-devel] [PATCH 03/23] spapr_cpu_core: migrate per-CPU data David Gibson
                   ` (22 subsequent siblings)
  23 siblings, 0 replies; 27+ messages in thread
From: David Gibson @ 2018-06-22  4:24 UTC (permalink / raw)
  To: peter.maydell
  Cc: agraf, aik, groug, clg, lvivier, qemu-devel, qemu-ppc, David Gibson

From: Cédric Le Goater <clg@kaod.org>

This moves the details of the ISA bus creation under the LPC model but
more important, the new PnvChip operation will let us choose the chip
class to use when we introduce the different chip classes for Power9
and Power8. It hides away the processor chip controllers from the
machine.

Signed-off-by: Cédric Le Goater <clg@kaod.org>
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
---
 hw/ppc/pnv.c             | 34 +++++++++++++++++++---------------
 hw/ppc/pnv_lpc.c         | 30 +++++++++++++++++++++++++-----
 include/hw/ppc/pnv.h     |  1 +
 include/hw/ppc/pnv_lpc.h |  3 +--
 4 files changed, 46 insertions(+), 22 deletions(-)

diff --git a/hw/ppc/pnv.c b/hw/ppc/pnv.c
index c7e127ae97..ac828d1331 100644
--- a/hw/ppc/pnv.c
+++ b/hw/ppc/pnv.c
@@ -529,24 +529,24 @@ static void pnv_reset(void)
     cpu_physical_memory_write(PNV_FDT_ADDR, fdt, fdt_totalsize(fdt));
 }
 
-static ISABus *pnv_isa_create(PnvChip *chip)
+static ISABus *pnv_chip_power8_isa_create(PnvChip *chip, Error **errp)
 {
-    PnvLpcController *lpc = &chip->lpc;
-    ISABus *isa_bus;
-    qemu_irq *irqs;
-    PnvChipClass *pcc = PNV_CHIP_GET_CLASS(chip);
+    return pnv_lpc_isa_create(&chip->lpc, true, errp);
+}
 
-    /* let isa_bus_new() create its own bridge on SysBus otherwise
-     * devices speficied on the command line won't find the bus and
-     * will fail to create.
-     */
-    isa_bus = isa_bus_new(NULL, &lpc->isa_mem, &lpc->isa_io,
-                          &error_fatal);
+static ISABus *pnv_chip_power8nvl_isa_create(PnvChip *chip, Error **errp)
+{
+    return pnv_lpc_isa_create(&chip->lpc, false, errp);
+}
 
-    irqs = pnv_lpc_isa_irq_create(lpc, pcc->chip_type, ISA_NUM_IRQS);
+static ISABus *pnv_chip_power9_isa_create(PnvChip *chip, Error **errp)
+{
+    return NULL;
+}
 
-    isa_bus_irqs(isa_bus, irqs);
-    return isa_bus;
+static ISABus *pnv_isa_create(PnvChip *chip, Error **errp)
+{
+    return PNV_CHIP_GET_CLASS(chip)->isa_create(chip, errp);
 }
 
 static void pnv_init(MachineState *machine)
@@ -646,7 +646,7 @@ static void pnv_init(MachineState *machine)
     g_free(chip_typename);
 
     /* Instantiate ISA bus on chip 0 */
-    pnv->isa_bus = pnv_isa_create(pnv->chips[0]);
+    pnv->isa_bus = pnv_isa_create(pnv->chips[0], &error_fatal);
 
     /* Create serial port */
     serial_hds_isa_init(pnv->isa_bus, 0, MAX_ISA_SERIAL_PORTS);
@@ -735,6 +735,7 @@ static void pnv_chip_power8e_class_init(ObjectClass *klass, void *data)
     k->cores_mask = POWER8E_CORE_MASK;
     k->core_pir = pnv_chip_core_pir_p8;
     k->intc_create = pnv_chip_power8_intc_create;
+    k->isa_create = pnv_chip_power8_isa_create;
     k->xscom_base = 0x003fc0000000000ull;
     dc->desc = "PowerNV Chip POWER8E";
 }
@@ -749,6 +750,7 @@ static void pnv_chip_power8_class_init(ObjectClass *klass, void *data)
     k->cores_mask = POWER8_CORE_MASK;
     k->core_pir = pnv_chip_core_pir_p8;
     k->intc_create = pnv_chip_power8_intc_create;
+    k->isa_create = pnv_chip_power8_isa_create;
     k->xscom_base = 0x003fc0000000000ull;
     dc->desc = "PowerNV Chip POWER8";
 }
@@ -763,6 +765,7 @@ static void pnv_chip_power8nvl_class_init(ObjectClass *klass, void *data)
     k->cores_mask = POWER8_CORE_MASK;
     k->core_pir = pnv_chip_core_pir_p8;
     k->intc_create = pnv_chip_power8_intc_create;
+    k->isa_create = pnv_chip_power8nvl_isa_create;
     k->xscom_base = 0x003fc0000000000ull;
     dc->desc = "PowerNV Chip POWER8NVL";
 }
@@ -777,6 +780,7 @@ static void pnv_chip_power9_class_init(ObjectClass *klass, void *data)
     k->cores_mask = POWER9_CORE_MASK;
     k->core_pir = pnv_chip_core_pir_p9;
     k->intc_create = pnv_chip_power9_intc_create;
+    k->isa_create = pnv_chip_power9_isa_create;
     k->xscom_base = 0x00603fc00000000ull;
     dc->desc = "PowerNV Chip POWER9";
 }
diff --git a/hw/ppc/pnv_lpc.c b/hw/ppc/pnv_lpc.c
index 402c4fefa8..d7721320a2 100644
--- a/hw/ppc/pnv_lpc.c
+++ b/hw/ppc/pnv_lpc.c
@@ -22,6 +22,7 @@
 #include "target/ppc/cpu.h"
 #include "qapi/error.h"
 #include "qemu/log.h"
+#include "hw/isa/isa.h"
 
 #include "hw/ppc/pnv.h"
 #include "hw/ppc/pnv_lpc.h"
@@ -535,16 +536,35 @@ static void pnv_lpc_isa_irq_handler(void *opaque, int n, int level)
     }
 }
 
-qemu_irq *pnv_lpc_isa_irq_create(PnvLpcController *lpc, int chip_type,
-                                 int nirqs)
+ISABus *pnv_lpc_isa_create(PnvLpcController *lpc, bool use_cpld, Error **errp)
 {
+    Error *local_err = NULL;
+    ISABus *isa_bus;
+    qemu_irq *irqs;
+    qemu_irq_handler handler;
+
+    /* let isa_bus_new() create its own bridge on SysBus otherwise
+     * devices speficied on the command line won't find the bus and
+     * will fail to create.
+     */
+    isa_bus = isa_bus_new(NULL, &lpc->isa_mem, &lpc->isa_io, &local_err);
+    if (local_err) {
+        error_propagate(errp, local_err);
+        return NULL;
+    }
+
     /* Not all variants have a working serial irq decoder. If not,
      * handling of LPC interrupts becomes a platform issue (some
      * platforms have a CPLD to do it).
      */
-    if (chip_type == PNV_CHIP_POWER8NVL) {
-        return qemu_allocate_irqs(pnv_lpc_isa_irq_handler, lpc, nirqs);
+    if (use_cpld) {
+        handler = pnv_lpc_isa_irq_handler_cpld;
     } else {
-        return qemu_allocate_irqs(pnv_lpc_isa_irq_handler_cpld, lpc, nirqs);
+        handler = pnv_lpc_isa_irq_handler;
     }
+
+    irqs = qemu_allocate_irqs(handler, lpc, ISA_NUM_IRQS);
+
+    isa_bus_irqs(isa_bus, irqs);
+    return isa_bus;
 }
diff --git a/include/hw/ppc/pnv.h b/include/hw/ppc/pnv.h
index e934e84f55..563279f3e0 100644
--- a/include/hw/ppc/pnv.h
+++ b/include/hw/ppc/pnv.h
@@ -77,6 +77,7 @@ typedef struct PnvChipClass {
 
     uint32_t (*core_pir)(PnvChip *chip, uint32_t core_id);
     Object *(*intc_create)(PnvChip *chip, Object *child, Error **errp);
+    ISABus *(*isa_create)(PnvChip *chip, Error **errp);
 } PnvChipClass;
 
 #define PNV_CHIP_TYPE_SUFFIX "-" TYPE_PNV_CHIP
diff --git a/include/hw/ppc/pnv_lpc.h b/include/hw/ppc/pnv_lpc.h
index 53fdd5bb64..d657489b07 100644
--- a/include/hw/ppc/pnv_lpc.h
+++ b/include/hw/ppc/pnv_lpc.h
@@ -70,7 +70,6 @@ typedef struct PnvLpcController {
     PnvPsi *psi;
 } PnvLpcController;
 
-qemu_irq *pnv_lpc_isa_irq_create(PnvLpcController *lpc, int chip_type,
-                                 int nirqs);
+ISABus *pnv_lpc_isa_create(PnvLpcController *lpc, bool use_cpld, Error **errp);
 
 #endif /* _PPC_PNV_LPC_H */
-- 
2.17.1

^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [Qemu-devel] [PATCH 03/23] spapr_cpu_core: migrate per-CPU data
  2018-06-22  4:24 [Qemu-devel] [PATCH 01/23] ppc/pnv: introduce a new intc_create() operation to the chip model David Gibson
  2018-06-22  4:24 ` [Qemu-devel] [PATCH 02/23] ppc/pnv: introduce a new isa_create() " David Gibson
@ 2018-06-22  4:24 ` David Gibson
  2018-06-22  4:24 ` [Qemu-devel] [PATCH 04/23] spapr_cpu_core: migrate VPA related state David Gibson
                   ` (21 subsequent siblings)
  23 siblings, 0 replies; 27+ messages in thread
From: David Gibson @ 2018-06-22  4:24 UTC (permalink / raw)
  To: peter.maydell
  Cc: agraf, aik, groug, clg, lvivier, qemu-devel, qemu-ppc, David Gibson

From: Greg Kurz <groug@kaod.org>

A per-CPU machine data pointer was recently added to PowerPCCPU. The
motivation is to to hide platform specific details from the core CPU
code. This per-CPU data can hold state which is relevant to the guest
though, eg, Virtual Processor Areas, and we should migrate this state.

This patch adds the plumbing so that we can migrate the per-CPU data
for PAPR guests. We only do this for newer machine types for the sake
of backward compatibility. No state is migrated for the moment: the
vmstate_spapr_cpu_state structure will be populated by subsequent
patches.

Signed-off-by: Greg Kurz <groug@kaod.org>
[dwg: Fix some trivial spelling and spacing errors]
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
---
 hw/ppc/spapr.c                  |  7 ++++++-
 hw/ppc/spapr_cpu_core.c         | 22 ++++++++++++++++++++--
 include/hw/ppc/spapr_cpu_core.h |  1 +
 3 files changed, 27 insertions(+), 3 deletions(-)

diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
index db0fb385d4..3174468fc5 100644
--- a/hw/ppc/spapr.c
+++ b/hw/ppc/spapr.c
@@ -4115,7 +4115,12 @@ DEFINE_SPAPR_MACHINE(3_0, "3.0", true);
     HW_COMPAT_2_12                                                     \
     {                                                                  \
         .driver = TYPE_POWERPC_CPU,                                    \
-        .property = "pre-3.0-migration",                              \
+        .property = "pre-3.0-migration",                               \
+        .value    = "on",                                              \
+    },                                                                 \
+    {                                                                  \
+        .driver = TYPE_SPAPR_CPU_CORE,                                 \
+        .property = "pre-3.0-migration",                               \
         .value    = "on",                                              \
     },
 
diff --git a/hw/ppc/spapr_cpu_core.c b/hw/ppc/spapr_cpu_core.c
index aef3be33a3..f129ac884e 100644
--- a/hw/ppc/spapr_cpu_core.c
+++ b/hw/ppc/spapr_cpu_core.c
@@ -129,6 +129,15 @@ static void spapr_cpu_core_unrealize(DeviceState *dev, Error **errp)
     g_free(sc->threads);
 }
 
+static const VMStateDescription vmstate_spapr_cpu_state = {
+    .name = "spapr_cpu",
+    .version_id = 1,
+    .minimum_version_id = 1,
+    .fields = (VMStateField[]) {
+        VMSTATE_END_OF_LIST()
+    },
+};
+
 static void spapr_realize_vcpu(PowerPCCPU *cpu, sPAPRMachineState *spapr,
                                Error **errp)
 {
@@ -194,6 +203,10 @@ static PowerPCCPU *spapr_create_vcpu(sPAPRCPUCore *sc, int i, Error **errp)
     }
 
     cpu->machine_data = g_new0(sPAPRCPUState, 1);
+    if (!sc->pre_3_0_migration) {
+        vmstate_register(NULL, cs->cpu_index, &vmstate_spapr_cpu_state,
+                         cpu->machine_data);
+    }
 
     object_unref(obj);
     return cpu;
@@ -204,10 +217,13 @@ err:
     return NULL;
 }
 
-static void spapr_delete_vcpu(PowerPCCPU *cpu)
+static void spapr_delete_vcpu(PowerPCCPU *cpu, sPAPRCPUCore *sc)
 {
     sPAPRCPUState *spapr_cpu = spapr_cpu_state(cpu);
 
+    if (!sc->pre_3_0_migration) {
+        vmstate_unregister(NULL, &vmstate_spapr_cpu_state, cpu->machine_data);
+    }
     cpu->machine_data = NULL;
     g_free(spapr_cpu);
     object_unparent(OBJECT(cpu));
@@ -253,7 +269,7 @@ err_unrealize:
     }
 err:
     while (--i >= 0) {
-        spapr_delete_vcpu(sc->threads[i]);
+        spapr_delete_vcpu(sc->threads[i], sc);
     }
     g_free(sc->threads);
     error_propagate(errp, local_err);
@@ -261,6 +277,8 @@ err:
 
 static Property spapr_cpu_core_properties[] = {
     DEFINE_PROP_INT32("node-id", sPAPRCPUCore, node_id, CPU_UNSET_NUMA_NODE_ID),
+    DEFINE_PROP_BOOL("pre-3.0-migration", sPAPRCPUCore, pre_3_0_migration,
+                     false),
     DEFINE_PROP_END_OF_LIST()
 };
 
diff --git a/include/hw/ppc/spapr_cpu_core.h b/include/hw/ppc/spapr_cpu_core.h
index 8ceea2973a..9e2821e4b3 100644
--- a/include/hw/ppc/spapr_cpu_core.h
+++ b/include/hw/ppc/spapr_cpu_core.h
@@ -31,6 +31,7 @@ typedef struct sPAPRCPUCore {
     /*< public >*/
     PowerPCCPU **threads;
     int node_id;
+    bool pre_3_0_migration; /* older machine don't know about sPAPRCPUState */
 } sPAPRCPUCore;
 
 typedef struct sPAPRCPUCoreClass {
-- 
2.17.1

^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [Qemu-devel] [PATCH 04/23] spapr_cpu_core: migrate VPA related state
  2018-06-22  4:24 [Qemu-devel] [PATCH 01/23] ppc/pnv: introduce a new intc_create() operation to the chip model David Gibson
  2018-06-22  4:24 ` [Qemu-devel] [PATCH 02/23] ppc/pnv: introduce a new isa_create() " David Gibson
  2018-06-22  4:24 ` [Qemu-devel] [PATCH 03/23] spapr_cpu_core: migrate per-CPU data David Gibson
@ 2018-06-22  4:24 ` David Gibson
  2018-06-22  4:24 ` [Qemu-devel] [PATCH 05/23] ppc/pnv: introduce Pnv8Chip and Pnv9Chip models David Gibson
                   ` (20 subsequent siblings)
  23 siblings, 0 replies; 27+ messages in thread
From: David Gibson @ 2018-06-22  4:24 UTC (permalink / raw)
  To: peter.maydell
  Cc: agraf, aik, groug, clg, lvivier, qemu-devel, qemu-ppc, David Gibson

From: Greg Kurz <groug@kaod.org>

QEMU implements the "Shared Processor LPAR" (SPLPAR) option, which allows
the hypervisor to time-slice a physical processor into multiple virtual
processor. The intent is to allow more guests to run, and to optimize
processor utilization.

The guest OS can cede idle VCPUs, so that their processing capacity may
be used by other VCPUs, with the H_CEDE hcall. The guest OS can also
optimize spinlocks, by confering the time-slice of a spinning VCPU to the
spinlock holder if it's currently notrunning, with the H_CONFER hcall.

Both hcalls depend on a "Virtual Processor Area" (VPA) to be registered
by the guest OS, generally during early boot. Other per-VCPU areas can
be registered: the "SLB Shadow Buffer" which allows a more efficient
dispatching of VCPUs, and the "Dispatch Trace Log Buffer" (DTL) which
is used to compute time stolen by the hypervisor. Both DTL and SLB Shadow
areas depend on the VPA to be registered.

The VPA/SLB Shadow/DTL are state that QEMU should migrate, but this doesn't
happen, for no apparent reason other than it was just never coded. This
causes the features listed above to stop working after migration, and it
breaks the logic of the H_REGISTER_VPA hcall in the destination.

The VPA is set at the guest request, ie, we don't have to migrate
it before the guest has actually set it. This patch hence adds an
"spapr_cpu/vpa" subsection to the recently introduced per-CPU machine
data migration stream.

Since DTL and SLB Shadow are optional and both depend on VPA, they get
their own subsections "spapr_cpu/vpa/slb_shadow" and "spapr_cpu/vpa/dtl"
hanging from the "spapr_cpu/vpa" subsection.

Note that this won't break migration to older QEMUs. Is is already handled
by only registering the vmstate handler for per-CPU data with newer machine
types.

Signed-off-by: Greg Kurz <groug@kaod.org>
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
---
 hw/ppc/spapr_cpu_core.c | 65 +++++++++++++++++++++++++++++++++++++++++
 1 file changed, 65 insertions(+)

diff --git a/hw/ppc/spapr_cpu_core.c b/hw/ppc/spapr_cpu_core.c
index f129ac884e..67f1596c57 100644
--- a/hw/ppc/spapr_cpu_core.c
+++ b/hw/ppc/spapr_cpu_core.c
@@ -129,6 +129,67 @@ static void spapr_cpu_core_unrealize(DeviceState *dev, Error **errp)
     g_free(sc->threads);
 }
 
+static bool slb_shadow_needed(void *opaque)
+{
+    sPAPRCPUState *spapr_cpu = opaque;
+
+    return spapr_cpu->slb_shadow_addr != 0;
+}
+
+static const VMStateDescription vmstate_spapr_cpu_slb_shadow = {
+    .name = "spapr_cpu/vpa/slb_shadow",
+    .version_id = 1,
+    .minimum_version_id = 1,
+    .needed = slb_shadow_needed,
+    .fields = (VMStateField[]) {
+        VMSTATE_UINT64(slb_shadow_addr, sPAPRCPUState),
+        VMSTATE_UINT64(slb_shadow_size, sPAPRCPUState),
+        VMSTATE_END_OF_LIST()
+    }
+};
+
+static bool dtl_needed(void *opaque)
+{
+    sPAPRCPUState *spapr_cpu = opaque;
+
+    return spapr_cpu->dtl_addr != 0;
+}
+
+static const VMStateDescription vmstate_spapr_cpu_dtl = {
+    .name = "spapr_cpu/vpa/dtl",
+    .version_id = 1,
+    .minimum_version_id = 1,
+    .needed = dtl_needed,
+    .fields = (VMStateField[]) {
+        VMSTATE_UINT64(dtl_addr, sPAPRCPUState),
+        VMSTATE_UINT64(dtl_size, sPAPRCPUState),
+        VMSTATE_END_OF_LIST()
+    }
+};
+
+static bool vpa_needed(void *opaque)
+{
+    sPAPRCPUState *spapr_cpu = opaque;
+
+    return spapr_cpu->vpa_addr != 0;
+}
+
+static const VMStateDescription vmstate_spapr_cpu_vpa = {
+    .name = "spapr_cpu/vpa",
+    .version_id = 1,
+    .minimum_version_id = 1,
+    .needed = vpa_needed,
+    .fields = (VMStateField[]) {
+        VMSTATE_UINT64(vpa_addr, sPAPRCPUState),
+        VMSTATE_END_OF_LIST()
+    },
+    .subsections = (const VMStateDescription * []) {
+        &vmstate_spapr_cpu_slb_shadow,
+        &vmstate_spapr_cpu_dtl,
+        NULL
+    }
+};
+
 static const VMStateDescription vmstate_spapr_cpu_state = {
     .name = "spapr_cpu",
     .version_id = 1,
@@ -136,6 +197,10 @@ static const VMStateDescription vmstate_spapr_cpu_state = {
     .fields = (VMStateField[]) {
         VMSTATE_END_OF_LIST()
     },
+    .subsections = (const VMStateDescription * []) {
+        &vmstate_spapr_cpu_vpa,
+        NULL
+    }
 };
 
 static void spapr_realize_vcpu(PowerPCCPU *cpu, sPAPRMachineState *spapr,
-- 
2.17.1

^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [Qemu-devel] [PATCH 05/23] ppc/pnv: introduce Pnv8Chip and Pnv9Chip models
  2018-06-22  4:24 [Qemu-devel] [PATCH 01/23] ppc/pnv: introduce a new intc_create() operation to the chip model David Gibson
                   ` (2 preceding siblings ...)
  2018-06-22  4:24 ` [Qemu-devel] [PATCH 04/23] spapr_cpu_core: migrate VPA related state David Gibson
@ 2018-06-22  4:24 ` David Gibson
  2018-06-22  4:24 ` [Qemu-devel] [PATCH 06/23] ppc/pnv: consolidate the creation of the ISA bus device tree David Gibson
                   ` (19 subsequent siblings)
  23 siblings, 0 replies; 27+ messages in thread
From: David Gibson @ 2018-06-22  4:24 UTC (permalink / raw)
  To: peter.maydell
  Cc: agraf, aik, groug, clg, lvivier, qemu-devel, qemu-ppc, David Gibson

From: Cédric Le Goater <clg@kaod.org>

It introduces a base PnvChip class from which the specific processor
chip classes, Pnv8Chip and Pnv9Chip, inherit. Each of them needs to
define an init and a realize routine which will create the controllers
of the target processor. For the moment, the base PnvChip class
handles the XSCOM bus and the cores.

Signed-off-by: Cédric Le Goater <clg@kaod.org>
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
---
 hw/ppc/pnv.c         | 281 +++++++++++++++++++++++++++----------------
 include/hw/ppc/pnv.h |  24 +++-
 2 files changed, 202 insertions(+), 103 deletions(-)

diff --git a/hw/ppc/pnv.c b/hw/ppc/pnv.c
index ac828d1331..a29ea996b4 100644
--- a/hw/ppc/pnv.c
+++ b/hw/ppc/pnv.c
@@ -531,12 +531,14 @@ static void pnv_reset(void)
 
 static ISABus *pnv_chip_power8_isa_create(PnvChip *chip, Error **errp)
 {
-    return pnv_lpc_isa_create(&chip->lpc, true, errp);
+    Pnv8Chip *chip8 = PNV8_CHIP(chip);
+    return pnv_lpc_isa_create(&chip8->lpc, true, errp);
 }
 
 static ISABus *pnv_chip_power8nvl_isa_create(PnvChip *chip, Error **errp)
 {
-    return pnv_lpc_isa_create(&chip->lpc, false, errp);
+    Pnv8Chip *chip8 = PNV8_CHIP(chip);
+    return pnv_lpc_isa_create(&chip8->lpc, false, errp);
 }
 
 static ISABus *pnv_chip_power9_isa_create(PnvChip *chip, Error **errp)
@@ -725,6 +727,103 @@ static Object *pnv_chip_power9_intc_create(PnvChip *chip, Object *child,
  */
 #define POWER9_CORE_MASK   (0xffffffffffffffull)
 
+static void pnv_chip_power8_instance_init(Object *obj)
+{
+    Pnv8Chip *chip8 = PNV8_CHIP(obj);
+
+    object_initialize(&chip8->psi, sizeof(chip8->psi), TYPE_PNV_PSI);
+    object_property_add_child(obj, "psi", OBJECT(&chip8->psi), NULL);
+    object_property_add_const_link(OBJECT(&chip8->psi), "xics",
+                                   OBJECT(qdev_get_machine()), &error_abort);
+
+    object_initialize(&chip8->lpc, sizeof(chip8->lpc), TYPE_PNV_LPC);
+    object_property_add_child(obj, "lpc", OBJECT(&chip8->lpc), NULL);
+    object_property_add_const_link(OBJECT(&chip8->lpc), "psi",
+                                   OBJECT(&chip8->psi), &error_abort);
+
+    object_initialize(&chip8->occ, sizeof(chip8->occ), TYPE_PNV_OCC);
+    object_property_add_child(obj, "occ", OBJECT(&chip8->occ), NULL);
+    object_property_add_const_link(OBJECT(&chip8->occ), "psi",
+                                   OBJECT(&chip8->psi), &error_abort);
+}
+
+static void pnv_chip_icp_realize(Pnv8Chip *chip8, Error **errp)
+ {
+    PnvChip *chip = PNV_CHIP(chip8);
+    PnvChipClass *pcc = PNV_CHIP_GET_CLASS(chip);
+    const char *typename = pnv_chip_core_typename(chip);
+    size_t typesize = object_type_get_instance_size(typename);
+    int i, j;
+    char *name;
+    XICSFabric *xi = XICS_FABRIC(qdev_get_machine());
+
+    name = g_strdup_printf("icp-%x", chip->chip_id);
+    memory_region_init(&chip8->icp_mmio, OBJECT(chip), name, PNV_ICP_SIZE);
+    sysbus_init_mmio(SYS_BUS_DEVICE(chip), &chip8->icp_mmio);
+    g_free(name);
+
+    sysbus_mmio_map(SYS_BUS_DEVICE(chip), 1, PNV_ICP_BASE(chip));
+
+    /* Map the ICP registers for each thread */
+    for (i = 0; i < chip->nr_cores; i++) {
+        PnvCore *pnv_core = PNV_CORE(chip->cores + i * typesize);
+        int core_hwid = CPU_CORE(pnv_core)->core_id;
+
+        for (j = 0; j < CPU_CORE(pnv_core)->nr_threads; j++) {
+            uint32_t pir = pcc->core_pir(chip, core_hwid) + j;
+            PnvICPState *icp = PNV_ICP(xics_icp_get(xi, pir));
+
+            memory_region_add_subregion(&chip8->icp_mmio, pir << 12,
+                                        &icp->mmio);
+        }
+    }
+}
+
+static void pnv_chip_power8_realize(DeviceState *dev, Error **errp)
+{
+    PnvChipClass *pcc = PNV_CHIP_GET_CLASS(dev);
+    PnvChip *chip = PNV_CHIP(dev);
+    Pnv8Chip *chip8 = PNV8_CHIP(dev);
+    Error *local_err = NULL;
+
+    pcc->parent_realize(dev, &local_err);
+    if (local_err) {
+        error_propagate(errp, local_err);
+        return;
+    }
+
+    /* Processor Service Interface (PSI) Host Bridge */
+    object_property_set_int(OBJECT(&chip8->psi), PNV_PSIHB_BASE(chip),
+                            "bar", &error_fatal);
+    object_property_set_bool(OBJECT(&chip8->psi), true, "realized", &local_err);
+    if (local_err) {
+        error_propagate(errp, local_err);
+        return;
+    }
+    pnv_xscom_add_subregion(chip, PNV_XSCOM_PSIHB_BASE, &chip8->psi.xscom_regs);
+
+    /* Create LPC controller */
+    object_property_set_bool(OBJECT(&chip8->lpc), true, "realized",
+                             &error_fatal);
+    pnv_xscom_add_subregion(chip, PNV_XSCOM_LPC_BASE, &chip8->lpc.xscom_regs);
+
+    /* Interrupt Management Area. This is the memory region holding
+     * all the Interrupt Control Presenter (ICP) registers */
+    pnv_chip_icp_realize(chip8, &local_err);
+    if (local_err) {
+        error_propagate(errp, local_err);
+        return;
+    }
+
+    /* Create the simplified OCC model */
+    object_property_set_bool(OBJECT(&chip8->occ), true, "realized", &local_err);
+    if (local_err) {
+        error_propagate(errp, local_err);
+        return;
+    }
+    pnv_xscom_add_subregion(chip, PNV_XSCOM_OCC_BASE, &chip8->occ.xscom_regs);
+}
+
 static void pnv_chip_power8e_class_init(ObjectClass *klass, void *data)
 {
     DeviceClass *dc = DEVICE_CLASS(klass);
@@ -738,6 +837,9 @@ static void pnv_chip_power8e_class_init(ObjectClass *klass, void *data)
     k->isa_create = pnv_chip_power8_isa_create;
     k->xscom_base = 0x003fc0000000000ull;
     dc->desc = "PowerNV Chip POWER8E";
+
+    device_class_set_parent_realize(dc, pnv_chip_power8_realize,
+                                    &k->parent_realize);
 }
 
 static void pnv_chip_power8_class_init(ObjectClass *klass, void *data)
@@ -753,6 +855,9 @@ static void pnv_chip_power8_class_init(ObjectClass *klass, void *data)
     k->isa_create = pnv_chip_power8_isa_create;
     k->xscom_base = 0x003fc0000000000ull;
     dc->desc = "PowerNV Chip POWER8";
+
+    device_class_set_parent_realize(dc, pnv_chip_power8_realize,
+                                    &k->parent_realize);
 }
 
 static void pnv_chip_power8nvl_class_init(ObjectClass *klass, void *data)
@@ -768,6 +873,25 @@ static void pnv_chip_power8nvl_class_init(ObjectClass *klass, void *data)
     k->isa_create = pnv_chip_power8nvl_isa_create;
     k->xscom_base = 0x003fc0000000000ull;
     dc->desc = "PowerNV Chip POWER8NVL";
+
+    device_class_set_parent_realize(dc, pnv_chip_power8_realize,
+                                    &k->parent_realize);
+}
+
+static void pnv_chip_power9_instance_init(Object *obj)
+{
+}
+
+static void pnv_chip_power9_realize(DeviceState *dev, Error **errp)
+{
+    PnvChipClass *pcc = PNV_CHIP_GET_CLASS(dev);
+    Error *local_err = NULL;
+
+    pcc->parent_realize(dev, &local_err);
+    if (local_err) {
+        error_propagate(errp, local_err);
+        return;
+    }
 }
 
 static void pnv_chip_power9_class_init(ObjectClass *klass, void *data)
@@ -783,6 +907,9 @@ static void pnv_chip_power9_class_init(ObjectClass *klass, void *data)
     k->isa_create = pnv_chip_power9_isa_create;
     k->xscom_base = 0x00603fc00000000ull;
     dc->desc = "PowerNV Chip POWER9";
+
+    device_class_set_parent_realize(dc, pnv_chip_power9_realize,
+                                    &k->parent_realize);
 }
 
 static void pnv_chip_core_sanitize(PnvChip *chip, Error **errp)
@@ -815,59 +942,9 @@ static void pnv_chip_core_sanitize(PnvChip *chip, Error **errp)
     }
 }
 
-static void pnv_chip_init(Object *obj)
+static void pnv_chip_instance_init(Object *obj)
 {
-    PnvChip *chip = PNV_CHIP(obj);
-    PnvChipClass *pcc = PNV_CHIP_GET_CLASS(chip);
-
-    chip->xscom_base = pcc->xscom_base;
-
-    object_initialize(&chip->lpc, sizeof(chip->lpc), TYPE_PNV_LPC);
-    object_property_add_child(obj, "lpc", OBJECT(&chip->lpc), NULL);
-
-    object_initialize(&chip->psi, sizeof(chip->psi), TYPE_PNV_PSI);
-    object_property_add_child(obj, "psi", OBJECT(&chip->psi), NULL);
-    object_property_add_const_link(OBJECT(&chip->psi), "xics",
-                                   OBJECT(qdev_get_machine()), &error_abort);
-
-    object_initialize(&chip->occ, sizeof(chip->occ), TYPE_PNV_OCC);
-    object_property_add_child(obj, "occ", OBJECT(&chip->occ), NULL);
-    object_property_add_const_link(OBJECT(&chip->occ), "psi",
-                                   OBJECT(&chip->psi), &error_abort);
-
-    /* The LPC controller needs PSI to generate interrupts */
-    object_property_add_const_link(OBJECT(&chip->lpc), "psi",
-                                   OBJECT(&chip->psi), &error_abort);
-}
-
-static void pnv_chip_icp_realize(PnvChip *chip, Error **errp)
-{
-    PnvChipClass *pcc = PNV_CHIP_GET_CLASS(chip);
-    const char *typename = pnv_chip_core_typename(chip);
-    size_t typesize = object_type_get_instance_size(typename);
-    int i, j;
-    char *name;
-    XICSFabric *xi = XICS_FABRIC(qdev_get_machine());
-
-    name = g_strdup_printf("icp-%x", chip->chip_id);
-    memory_region_init(&chip->icp_mmio, OBJECT(chip), name, PNV_ICP_SIZE);
-    sysbus_init_mmio(SYS_BUS_DEVICE(chip), &chip->icp_mmio);
-    g_free(name);
-
-    sysbus_mmio_map(SYS_BUS_DEVICE(chip), 1, PNV_ICP_BASE(chip));
-
-    /* Map the ICP registers for each thread */
-    for (i = 0; i < chip->nr_cores; i++) {
-        PnvCore *pnv_core = PNV_CORE(chip->cores + i * typesize);
-        int core_hwid = CPU_CORE(pnv_core)->core_id;
-
-        for (j = 0; j < CPU_CORE(pnv_core)->nr_threads; j++) {
-            uint32_t pir = pcc->core_pir(chip, core_hwid) + j;
-            PnvICPState *icp = PNV_ICP(xics_icp_get(xi, pir));
-
-            memory_region_add_subregion(&chip->icp_mmio, pir << 12, &icp->mmio);
-        }
-    }
+    PNV_CHIP(obj)->xscom_base = PNV_CHIP_GET_CLASS(obj)->xscom_base;
 }
 
 static void pnv_chip_core_realize(PnvChip *chip, Error **errp)
@@ -951,37 +1028,6 @@ static void pnv_chip_realize(DeviceState *dev, Error **errp)
         error_propagate(errp, error);
         return;
     }
-
-    /* Create LPC controller */
-    object_property_set_bool(OBJECT(&chip->lpc), true, "realized",
-                             &error_fatal);
-    pnv_xscom_add_subregion(chip, PNV_XSCOM_LPC_BASE, &chip->lpc.xscom_regs);
-
-    /* Interrupt Management Area. This is the memory region holding
-     * all the Interrupt Control Presenter (ICP) registers */
-    pnv_chip_icp_realize(chip, &error);
-    if (error) {
-        error_propagate(errp, error);
-        return;
-    }
-
-    /* Processor Service Interface (PSI) Host Bridge */
-    object_property_set_int(OBJECT(&chip->psi), PNV_PSIHB_BASE(chip),
-                            "bar", &error_fatal);
-    object_property_set_bool(OBJECT(&chip->psi), true, "realized", &error);
-    if (error) {
-        error_propagate(errp, error);
-        return;
-    }
-    pnv_xscom_add_subregion(chip, PNV_XSCOM_PSIHB_BASE, &chip->psi.xscom_regs);
-
-    /* Create the simplified OCC model */
-    object_property_set_bool(OBJECT(&chip->occ), true, "realized", &error);
-    if (error) {
-        error_propagate(errp, error);
-        return;
-    }
-    pnv_xscom_add_subregion(chip, PNV_XSCOM_OCC_BASE, &chip->occ.xscom_regs);
 }
 
 static Property pnv_chip_properties[] = {
@@ -1009,8 +1055,10 @@ static ICSState *pnv_ics_get(XICSFabric *xi, int irq)
     int i;
 
     for (i = 0; i < pnv->num_chips; i++) {
-        if (ics_valid_irq(&pnv->chips[i]->psi.ics, irq)) {
-            return &pnv->chips[i]->psi.ics;
+        Pnv8Chip *chip8 = PNV8_CHIP(pnv->chips[i]);
+
+        if (ics_valid_irq(&chip8->psi.ics, irq)) {
+            return &chip8->psi.ics;
         }
     }
     return NULL;
@@ -1022,7 +1070,8 @@ static void pnv_ics_resend(XICSFabric *xi)
     int i;
 
     for (i = 0; i < pnv->num_chips; i++) {
-        ics_resend(&pnv->chips[i]->psi.ics);
+        Pnv8Chip *chip8 = PNV8_CHIP(pnv->chips[i]);
+        ics_resend(&chip8->psi.ics);
     }
 }
 
@@ -1063,7 +1112,8 @@ static void pnv_pic_print_info(InterruptStatsProvider *obj,
     }
 
     for (i = 0; i < pnv->num_chips; i++) {
-        ics_pic_print_info(&pnv->chips[i]->psi.ics, mon);
+        Pnv8Chip *chip8 = PNV8_CHIP(pnv->chips[i]);
+        ics_pic_print_info(&chip8->psi.ics, mon);
     }
 }
 
@@ -1098,7 +1148,7 @@ static void pnv_set_num_chips(Object *obj, Visitor *v, const char *name,
     pnv->num_chips = num_chips;
 }
 
-static void pnv_machine_initfn(Object *obj)
+static void pnv_machine_instance_init(Object *obj)
 {
     PnvMachineState *pnv = PNV_MACHINE(obj);
     pnv->num_chips = 1;
@@ -1138,11 +1188,18 @@ static void pnv_machine_class_init(ObjectClass *oc, void *data)
     pnv_machine_class_props_init(oc);
 }
 
-#define DEFINE_PNV_CHIP_TYPE(type, class_initfn) \
-    {                                            \
-        .name          = type,                   \
-        .class_init    = class_initfn,           \
-        .parent        = TYPE_PNV_CHIP,          \
+#define DEFINE_PNV8_CHIP_TYPE(type, class_initfn) \
+    {                                             \
+        .name          = type,                    \
+        .class_init    = class_initfn,            \
+        .parent        = TYPE_PNV8_CHIP,          \
+    }
+
+#define DEFINE_PNV9_CHIP_TYPE(type, class_initfn) \
+    {                                             \
+        .name          = type,                    \
+        .class_init    = class_initfn,            \
+        .parent        = TYPE_PNV9_CHIP,          \
     }
 
 static const TypeInfo types[] = {
@@ -1150,7 +1207,7 @@ static const TypeInfo types[] = {
         .name          = TYPE_PNV_MACHINE,
         .parent        = TYPE_MACHINE,
         .instance_size = sizeof(PnvMachineState),
-        .instance_init = pnv_machine_initfn,
+        .instance_init = pnv_machine_instance_init,
         .class_init    = pnv_machine_class_init,
         .interfaces = (InterfaceInfo[]) {
             { TYPE_XICS_FABRIC },
@@ -1162,16 +1219,36 @@ static const TypeInfo types[] = {
         .name          = TYPE_PNV_CHIP,
         .parent        = TYPE_SYS_BUS_DEVICE,
         .class_init    = pnv_chip_class_init,
-        .instance_init = pnv_chip_init,
+        .instance_init = pnv_chip_instance_init,
         .instance_size = sizeof(PnvChip),
         .class_size    = sizeof(PnvChipClass),
         .abstract      = true,
     },
-    DEFINE_PNV_CHIP_TYPE(TYPE_PNV_CHIP_POWER9, pnv_chip_power9_class_init),
-    DEFINE_PNV_CHIP_TYPE(TYPE_PNV_CHIP_POWER8, pnv_chip_power8_class_init),
-    DEFINE_PNV_CHIP_TYPE(TYPE_PNV_CHIP_POWER8E, pnv_chip_power8e_class_init),
-    DEFINE_PNV_CHIP_TYPE(TYPE_PNV_CHIP_POWER8NVL,
-                         pnv_chip_power8nvl_class_init),
+
+    /*
+     * P9 chip and variants
+     */
+    {
+        .name          = TYPE_PNV9_CHIP,
+        .parent        = TYPE_PNV_CHIP,
+        .instance_init = pnv_chip_power9_instance_init,
+        .instance_size = sizeof(Pnv9Chip),
+    },
+    DEFINE_PNV9_CHIP_TYPE(TYPE_PNV_CHIP_POWER9, pnv_chip_power9_class_init),
+
+    /*
+     * P8 chip and variants
+     */
+    {
+        .name          = TYPE_PNV8_CHIP,
+        .parent        = TYPE_PNV_CHIP,
+        .instance_init = pnv_chip_power8_instance_init,
+        .instance_size = sizeof(Pnv8Chip),
+    },
+    DEFINE_PNV8_CHIP_TYPE(TYPE_PNV_CHIP_POWER8, pnv_chip_power8_class_init),
+    DEFINE_PNV8_CHIP_TYPE(TYPE_PNV_CHIP_POWER8E, pnv_chip_power8e_class_init),
+    DEFINE_PNV8_CHIP_TYPE(TYPE_PNV_CHIP_POWER8NVL,
+                          pnv_chip_power8nvl_class_init),
 };
 
 DEFINE_TYPES(types)
diff --git a/include/hw/ppc/pnv.h b/include/hw/ppc/pnv.h
index 563279f3e0..86d5f54e54 100644
--- a/include/hw/ppc/pnv.h
+++ b/include/hw/ppc/pnv.h
@@ -57,12 +57,32 @@ typedef struct PnvChip {
     MemoryRegion xscom_mmio;
     MemoryRegion xscom;
     AddressSpace xscom_as;
+} PnvChip;
+
+#define TYPE_PNV8_CHIP "pnv8-chip"
+#define PNV8_CHIP(obj) OBJECT_CHECK(Pnv8Chip, (obj), TYPE_PNV8_CHIP)
+
+typedef struct Pnv8Chip {
+    /*< private >*/
+    PnvChip      parent_obj;
+
+    /*< public >*/
     MemoryRegion icp_mmio;
 
     PnvLpcController lpc;
     PnvPsi       psi;
     PnvOCC       occ;
-} PnvChip;
+} Pnv8Chip;
+
+#define TYPE_PNV9_CHIP "pnv9-chip"
+#define PNV9_CHIP(obj) OBJECT_CHECK(Pnv9Chip, (obj), TYPE_PNV9_CHIP)
+
+typedef struct Pnv9Chip {
+    /*< private >*/
+    PnvChip      parent_obj;
+
+    /*< public >*/
+} Pnv9Chip;
 
 typedef struct PnvChipClass {
     /*< private >*/
@@ -75,6 +95,8 @@ typedef struct PnvChipClass {
 
     hwaddr       xscom_base;
 
+    DeviceRealize parent_realize;
+
     uint32_t (*core_pir)(PnvChip *chip, uint32_t core_id);
     Object *(*intc_create)(PnvChip *chip, Object *child, Error **errp);
     ISABus *(*isa_create)(PnvChip *chip, Error **errp);
-- 
2.17.1

^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [Qemu-devel] [PATCH 06/23] ppc/pnv: consolidate the creation of the ISA bus device tree
  2018-06-22  4:24 [Qemu-devel] [PATCH 01/23] ppc/pnv: introduce a new intc_create() operation to the chip model David Gibson
                   ` (3 preceding siblings ...)
  2018-06-22  4:24 ` [Qemu-devel] [PATCH 05/23] ppc/pnv: introduce Pnv8Chip and Pnv9Chip models David Gibson
@ 2018-06-22  4:24 ` David Gibson
  2018-06-22  4:24 ` [Qemu-devel] [PATCH 07/23] target/ppc: Allow cpu compatiblity checks based on type, not instance David Gibson
                   ` (18 subsequent siblings)
  23 siblings, 0 replies; 27+ messages in thread
From: David Gibson @ 2018-06-22  4:24 UTC (permalink / raw)
  To: peter.maydell
  Cc: agraf, aik, groug, clg, lvivier, qemu-devel, qemu-ppc, David Gibson

From: Cédric Le Goater <clg@kaod.org>

The device tree node of the ISA bus was being partially done in
different places. Move all the nodes creation under the same routine.

Signed-off-by: Cédric Le Goater <clg@kaod.org>
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
---
 hw/ppc/pnv.c | 51 +++++++++++++++++++++++----------------------------
 1 file changed, 23 insertions(+), 28 deletions(-)

diff --git a/hw/ppc/pnv.c b/hw/ppc/pnv.c
index a29ea996b4..7401ffe5b0 100644
--- a/hw/ppc/pnv.c
+++ b/hw/ppc/pnv.c
@@ -265,18 +265,6 @@ static void pnv_dt_icp(PnvChip *chip, void *fdt, uint32_t pir,
     g_free(reg);
 }
 
-static int pnv_chip_lpc_offset(PnvChip *chip, void *fdt)
-{
-    char *name;
-    int offset;
-
-    name = g_strdup_printf("/xscom@%" PRIx64 "/isa@%x",
-                           (uint64_t) PNV_XSCOM_BASE(chip), PNV_XSCOM_LPC_BASE);
-    offset = fdt_path_offset(fdt, name);
-    g_free(name);
-    return offset;
-}
-
 static void pnv_dt_chip(PnvChip *chip, void *fdt)
 {
     const char *typename = pnv_chip_core_typename(chip);
@@ -285,16 +273,6 @@ static void pnv_dt_chip(PnvChip *chip, void *fdt)
 
     pnv_dt_xscom(chip, fdt, 0);
 
-    /* The default LPC bus of a multichip system is on chip 0. It's
-     * recognized by the firmware (skiboot) using a "primary"
-     * property.
-     */
-    if (chip->chip_id == 0x0) {
-        int lpc_offset = pnv_chip_lpc_offset(chip, fdt);
-
-        _FDT((fdt_setprop(fdt, lpc_offset, "primary", NULL, 0)));
-    }
-
     for (i = 0; i < chip->nr_cores; i++) {
         PnvCore *pnv_core = PNV_CORE(chip->cores + i * typesize);
 
@@ -418,16 +396,35 @@ static int pnv_dt_isa_device(DeviceState *dev, void *opaque)
     return 0;
 }
 
-static void pnv_dt_isa(ISABus *bus, void *fdt, int lpc_offset)
+static int pnv_chip_isa_offset(PnvChip *chip, void *fdt)
+{
+    char *name;
+    int offset;
+
+    name = g_strdup_printf("/xscom@%" PRIx64 "/isa@%x",
+                           (uint64_t) PNV_XSCOM_BASE(chip), PNV_XSCOM_LPC_BASE);
+    offset = fdt_path_offset(fdt, name);
+    g_free(name);
+    return offset;
+}
+
+/* The default LPC bus of a multichip system is on chip 0. It's
+ * recognized by the firmware (skiboot) using a "primary" property.
+ */
+static void pnv_dt_isa(PnvMachineState *pnv, void *fdt)
 {
+    int isa_offset = pnv_chip_isa_offset(pnv->chips[0], fdt);
     ForeachPopulateArgs args = {
         .fdt = fdt,
-        .offset = lpc_offset,
+        .offset = isa_offset,
     };
 
+    _FDT((fdt_setprop(fdt, isa_offset, "primary", NULL, 0)));
+
     /* ISA devices are not necessarily parented to the ISA bus so we
      * can not use object_child_foreach() */
-    qbus_walk_children(BUS(bus), pnv_dt_isa_device, NULL, NULL, NULL, &args);
+    qbus_walk_children(BUS(pnv->isa_bus), pnv_dt_isa_device, NULL, NULL, NULL,
+                       &args);
 }
 
 static void *pnv_dt_create(MachineState *machine)
@@ -438,7 +435,6 @@ static void *pnv_dt_create(MachineState *machine)
     char *buf;
     int off;
     int i;
-    int lpc_offset;
 
     fdt = g_malloc0(FDT_MAX_SIZE);
     _FDT((fdt_create_empty_tree(fdt, FDT_MAX_SIZE)));
@@ -480,8 +476,7 @@ static void *pnv_dt_create(MachineState *machine)
     }
 
     /* Populate ISA devices on chip 0 */
-    lpc_offset = pnv_chip_lpc_offset(pnv->chips[0], fdt);
-    pnv_dt_isa(pnv->isa_bus, fdt, lpc_offset);
+    pnv_dt_isa(pnv, fdt);
 
     if (pnv->bmc) {
         pnv_dt_bmc_sensors(pnv->bmc, fdt);
-- 
2.17.1

^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [Qemu-devel] [PATCH 07/23] target/ppc: Allow cpu compatiblity checks based on type, not instance
  2018-06-22  4:24 [Qemu-devel] [PATCH 01/23] ppc/pnv: introduce a new intc_create() operation to the chip model David Gibson
                   ` (4 preceding siblings ...)
  2018-06-22  4:24 ` [Qemu-devel] [PATCH 06/23] ppc/pnv: consolidate the creation of the ISA bus device tree David Gibson
@ 2018-06-22  4:24 ` David Gibson
  2018-06-22  4:24 ` [Qemu-devel] [PATCH 08/23] spapr: Compute effective capability values earlier David Gibson
                   ` (17 subsequent siblings)
  23 siblings, 0 replies; 27+ messages in thread
From: David Gibson @ 2018-06-22  4:24 UTC (permalink / raw)
  To: peter.maydell
  Cc: agraf, aik, groug, clg, lvivier, qemu-devel, qemu-ppc, David Gibson

ppc_check_compat() is used in a number of places to check if a cpu object
supports a certain compatiblity mode, subject to various constraints.

It takes a PowerPCCPU *, however it really only depends on the cpu's class.
We have upcoming cases where it would be useful to make compatibility
checks before we fully instantiate the cpu objects.

ppc_type_check_compat() will now make an equivalent check, but based on a
CPU's QOM typename instead of an instantiated CPU object.

We make use of the new interface in several places in spapr, where we're
essentially making a global check, rather than one specific to a particular
cpu.  This avoids some ugly uses of first_cpu to grab a "representative"
instance.

Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
Reviewed-by: Greg Kurz <groug@kaod.org>
Reviewed-by: Cédric Le Goater <clg@kaod.org>
---
 hw/ppc/spapr.c      | 10 ++++------
 hw/ppc/spapr_caps.c | 19 +++++++++----------
 target/ppc/compat.c | 27 +++++++++++++++++++++------
 target/ppc/cpu.h    |  4 ++++
 4 files changed, 38 insertions(+), 22 deletions(-)

diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
index 3174468fc5..bc179f6f89 100644
--- a/hw/ppc/spapr.c
+++ b/hw/ppc/spapr.c
@@ -1616,8 +1616,8 @@ static void spapr_machine_reset(void)
 
     first_ppc_cpu = POWERPC_CPU(first_cpu);
     if (kvm_enabled() && kvmppc_has_cap_mmu_radix() &&
-        ppc_check_compat(first_ppc_cpu, CPU_POWERPC_LOGICAL_3_00, 0,
-                         spapr->max_compat_pvr)) {
+        ppc_type_check_compat(machine->cpu_type, CPU_POWERPC_LOGICAL_3_00, 0,
+                              spapr->max_compat_pvr)) {
         /* If using KVM with radix mode available, VCPUs can be started
          * without a HPT because KVM will start them in radix mode.
          * Set the GR bit in PATB so that we know there is no HPT. */
@@ -2520,7 +2520,6 @@ static void spapr_machine_init(MachineState *machine)
     long load_limit, fw_size;
     char *filename;
     Error *resize_hpt_err = NULL;
-    PowerPCCPU *first_ppc_cpu;
 
     msi_nonbroken = true;
 
@@ -2618,10 +2617,9 @@ static void spapr_machine_init(MachineState *machine)
     /* init CPUs */
     spapr_init_cpus(spapr);
 
-    first_ppc_cpu = POWERPC_CPU(first_cpu);
     if ((!kvm_enabled() || kvmppc_has_cap_mmu_radix()) &&
-        ppc_check_compat(first_ppc_cpu, CPU_POWERPC_LOGICAL_3_00, 0,
-                         spapr->max_compat_pvr)) {
+        ppc_type_check_compat(machine->cpu_type, CPU_POWERPC_LOGICAL_3_00, 0,
+                              spapr->max_compat_pvr)) {
         /* KVM and TCG always allow GTSE with radix... */
         spapr_ovec_set(spapr->ov5, OV5_MMU_RADIX_GTSE);
     }
diff --git a/hw/ppc/spapr_caps.c b/hw/ppc/spapr_caps.c
index 00e43a9ba7..469f38f0ef 100644
--- a/hw/ppc/spapr_caps.c
+++ b/hw/ppc/spapr_caps.c
@@ -327,27 +327,26 @@ sPAPRCapabilityInfo capability_table[SPAPR_CAP_NUM] = {
 };
 
 static sPAPRCapabilities default_caps_with_cpu(sPAPRMachineState *spapr,
-                                               CPUState *cs)
+                                               const char *cputype)
 {
     sPAPRMachineClass *smc = SPAPR_MACHINE_GET_CLASS(spapr);
-    PowerPCCPU *cpu = POWERPC_CPU(cs);
     sPAPRCapabilities caps;
 
     caps = smc->default_caps;
 
-    if (!ppc_check_compat(cpu, CPU_POWERPC_LOGICAL_2_07,
-                          0, spapr->max_compat_pvr)) {
+    if (!ppc_type_check_compat(cputype, CPU_POWERPC_LOGICAL_2_07,
+                               0, spapr->max_compat_pvr)) {
         caps.caps[SPAPR_CAP_HTM] = SPAPR_CAP_OFF;
         caps.caps[SPAPR_CAP_CFPC] = SPAPR_CAP_BROKEN;
     }
 
-    if (!ppc_check_compat(cpu, CPU_POWERPC_LOGICAL_2_06_PLUS,
-                          0, spapr->max_compat_pvr)) {
+    if (!ppc_type_check_compat(cputype, CPU_POWERPC_LOGICAL_2_06_PLUS,
+                               0, spapr->max_compat_pvr)) {
         caps.caps[SPAPR_CAP_SBBC] = SPAPR_CAP_BROKEN;
     }
 
-    if (!ppc_check_compat(cpu, CPU_POWERPC_LOGICAL_2_06,
-                          0, spapr->max_compat_pvr)) {
+    if (!ppc_type_check_compat(cputype, CPU_POWERPC_LOGICAL_2_06,
+                               0, spapr->max_compat_pvr)) {
         caps.caps[SPAPR_CAP_VSX] = SPAPR_CAP_OFF;
         caps.caps[SPAPR_CAP_DFP] = SPAPR_CAP_OFF;
         caps.caps[SPAPR_CAP_IBS] = SPAPR_CAP_BROKEN;
@@ -384,7 +383,7 @@ int spapr_caps_post_migration(sPAPRMachineState *spapr)
     sPAPRCapabilities dstcaps = spapr->eff;
     sPAPRCapabilities srccaps;
 
-    srccaps = default_caps_with_cpu(spapr, first_cpu);
+    srccaps = default_caps_with_cpu(spapr, MACHINE(spapr)->cpu_type);
     for (i = 0; i < SPAPR_CAP_NUM; i++) {
         /* If not default value then assume came in with the migration */
         if (spapr->mig.caps[i] != spapr->def.caps[i]) {
@@ -446,7 +445,7 @@ void spapr_caps_reset(sPAPRMachineState *spapr)
     int i;
 
     /* First compute the actual set of caps we're running with.. */
-    default_caps = default_caps_with_cpu(spapr, first_cpu);
+    default_caps = default_caps_with_cpu(spapr, MACHINE(spapr)->cpu_type);
 
     for (i = 0; i < SPAPR_CAP_NUM; i++) {
         /* Store the defaults */
diff --git a/target/ppc/compat.c b/target/ppc/compat.c
index 807c906f68..7de4bf3122 100644
--- a/target/ppc/compat.c
+++ b/target/ppc/compat.c
@@ -105,17 +105,13 @@ static const CompatInfo *compat_by_pvr(uint32_t pvr)
     return NULL;
 }
 
-bool ppc_check_compat(PowerPCCPU *cpu, uint32_t compat_pvr,
-                      uint32_t min_compat_pvr, uint32_t max_compat_pvr)
+static bool pcc_compat(PowerPCCPUClass *pcc, uint32_t compat_pvr,
+                       uint32_t min_compat_pvr, uint32_t max_compat_pvr)
 {
-    PowerPCCPUClass *pcc = POWERPC_CPU_GET_CLASS(cpu);
     const CompatInfo *compat = compat_by_pvr(compat_pvr);
     const CompatInfo *min = compat_by_pvr(min_compat_pvr);
     const CompatInfo *max = compat_by_pvr(max_compat_pvr);
 
-#if !defined(CONFIG_USER_ONLY)
-    g_assert(cpu->vhyp);
-#endif
     g_assert(!min_compat_pvr || min);
     g_assert(!max_compat_pvr || max);
 
@@ -134,6 +130,25 @@ bool ppc_check_compat(PowerPCCPU *cpu, uint32_t compat_pvr,
     return true;
 }
 
+bool ppc_check_compat(PowerPCCPU *cpu, uint32_t compat_pvr,
+                      uint32_t min_compat_pvr, uint32_t max_compat_pvr)
+{
+    PowerPCCPUClass *pcc = POWERPC_CPU_GET_CLASS(cpu);
+
+#if !defined(CONFIG_USER_ONLY)
+    g_assert(cpu->vhyp);
+#endif
+
+    return pcc_compat(pcc, compat_pvr, min_compat_pvr, max_compat_pvr);
+}
+
+bool ppc_type_check_compat(const char *cputype, uint32_t compat_pvr,
+                           uint32_t min_compat_pvr, uint32_t max_compat_pvr)
+{
+    PowerPCCPUClass *pcc = POWERPC_CPU_CLASS(object_class_by_name(cputype));
+    return pcc_compat(pcc, compat_pvr, min_compat_pvr, max_compat_pvr);
+}
+
 void ppc_set_compat(PowerPCCPU *cpu, uint32_t compat_pvr, Error **errp)
 {
     const CompatInfo *compat = compat_by_pvr(compat_pvr);
diff --git a/target/ppc/cpu.h b/target/ppc/cpu.h
index 874da6efbc..c7f3fb6b73 100644
--- a/target/ppc/cpu.h
+++ b/target/ppc/cpu.h
@@ -1369,7 +1369,11 @@ static inline int cpu_mmu_index (CPUPPCState *env, bool ifetch)
 #if defined(TARGET_PPC64)
 bool ppc_check_compat(PowerPCCPU *cpu, uint32_t compat_pvr,
                       uint32_t min_compat_pvr, uint32_t max_compat_pvr);
+bool ppc_type_check_compat(const char *cputype, uint32_t compat_pvr,
+                           uint32_t min_compat_pvr, uint32_t max_compat_pvr);
+
 void ppc_set_compat(PowerPCCPU *cpu, uint32_t compat_pvr, Error **errp);
+
 #if !defined(CONFIG_USER_ONLY)
 void ppc_set_compat_all(uint32_t compat_pvr, Error **errp);
 #endif
-- 
2.17.1

^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [Qemu-devel] [PATCH 08/23] spapr: Compute effective capability values earlier
  2018-06-22  4:24 [Qemu-devel] [PATCH 01/23] ppc/pnv: introduce a new intc_create() operation to the chip model David Gibson
                   ` (5 preceding siblings ...)
  2018-06-22  4:24 ` [Qemu-devel] [PATCH 07/23] target/ppc: Allow cpu compatiblity checks based on type, not instance David Gibson
@ 2018-06-22  4:24 ` David Gibson
  2018-06-22  4:24 ` [Qemu-devel] [PATCH 09/23] spapr: Add cpu_apply hook to capabilities David Gibson
                   ` (16 subsequent siblings)
  23 siblings, 0 replies; 27+ messages in thread
From: David Gibson @ 2018-06-22  4:24 UTC (permalink / raw)
  To: peter.maydell
  Cc: agraf, aik, groug, clg, lvivier, qemu-devel, qemu-ppc, David Gibson

Previously, the effective values of the various spapr capability flags
were only determined at machine reset time.  That was a lazy way of making
sure it was after cpu initialization so it could use the cpu object to
inform the defaults.

But we've now improved the compat checking code so that we don't need to
instantiate the cpus to use it.  That lets us move the resolution of the
capability defaults much earlier.

This is going to be necessary for some future capabilities.

Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
Reviewed-by: Greg Kurz <groug@kaod.org>
Reviewed-by: Cédric Le Goater <clg@kaod.org>
---
 hw/ppc/spapr.c         | 6 ++++--
 hw/ppc/spapr_caps.c    | 9 ++++++---
 include/hw/ppc/spapr.h | 3 ++-
 3 files changed, 12 insertions(+), 6 deletions(-)

diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
index bc179f6f89..4a0b679166 100644
--- a/hw/ppc/spapr.c
+++ b/hw/ppc/spapr.c
@@ -1612,7 +1612,7 @@ static void spapr_machine_reset(void)
     void *fdt;
     int rc;
 
-    spapr_caps_reset(spapr);
+    spapr_caps_apply(spapr);
 
     first_ppc_cpu = POWERPC_CPU(first_cpu);
     if (kvm_enabled() && kvmppc_has_cap_mmu_radix() &&
@@ -2526,7 +2526,9 @@ static void spapr_machine_init(MachineState *machine)
     QLIST_INIT(&spapr->phbs);
     QTAILQ_INIT(&spapr->pending_dimm_unplugs);
 
-    /* Check HPT resizing availability */
+    /* Determine capabilities to run with */
+    spapr_caps_init(spapr);
+
     kvmppc_check_papr_resize_hpt(&resize_hpt_err);
     if (spapr->resize_hpt == SPAPR_RESIZE_HPT_DEFAULT) {
         /*
diff --git a/hw/ppc/spapr_caps.c b/hw/ppc/spapr_caps.c
index 469f38f0ef..dabed817d1 100644
--- a/hw/ppc/spapr_caps.c
+++ b/hw/ppc/spapr_caps.c
@@ -439,12 +439,12 @@ SPAPR_CAP_MIG_STATE(cfpc, SPAPR_CAP_CFPC);
 SPAPR_CAP_MIG_STATE(sbbc, SPAPR_CAP_SBBC);
 SPAPR_CAP_MIG_STATE(ibs, SPAPR_CAP_IBS);
 
-void spapr_caps_reset(sPAPRMachineState *spapr)
+void spapr_caps_init(sPAPRMachineState *spapr)
 {
     sPAPRCapabilities default_caps;
     int i;
 
-    /* First compute the actual set of caps we're running with.. */
+    /* Compute the actual set of caps we should run with */
     default_caps = default_caps_with_cpu(spapr, MACHINE(spapr)->cpu_type);
 
     for (i = 0; i < SPAPR_CAP_NUM; i++) {
@@ -455,8 +455,11 @@ void spapr_caps_reset(sPAPRMachineState *spapr)
             spapr->eff.caps[i] = default_caps.caps[i];
         }
     }
+}
 
-    /* .. then apply those caps to the virtual hardware */
+void spapr_caps_apply(sPAPRMachineState *spapr)
+{
+    int i;
 
     for (i = 0; i < SPAPR_CAP_NUM; i++) {
         sPAPRCapabilityInfo *info = &capability_table[i];
diff --git a/include/hw/ppc/spapr.h b/include/hw/ppc/spapr.h
index 3388750fc7..9dbd6010f5 100644
--- a/include/hw/ppc/spapr.h
+++ b/include/hw/ppc/spapr.h
@@ -798,7 +798,8 @@ static inline uint8_t spapr_get_cap(sPAPRMachineState *spapr, int cap)
     return spapr->eff.caps[cap];
 }
 
-void spapr_caps_reset(sPAPRMachineState *spapr);
+void spapr_caps_init(sPAPRMachineState *spapr);
+void spapr_caps_apply(sPAPRMachineState *spapr);
 void spapr_caps_add_properties(sPAPRMachineClass *smc, Error **errp);
 int spapr_caps_post_migration(sPAPRMachineState *spapr);
 
-- 
2.17.1

^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [Qemu-devel] [PATCH 09/23] spapr: Add cpu_apply hook to capabilities
  2018-06-22  4:24 [Qemu-devel] [PATCH 01/23] ppc/pnv: introduce a new intc_create() operation to the chip model David Gibson
                   ` (6 preceding siblings ...)
  2018-06-22  4:24 ` [Qemu-devel] [PATCH 08/23] spapr: Compute effective capability values earlier David Gibson
@ 2018-06-22  4:24 ` David Gibson
  2018-06-22  4:24 ` [Qemu-devel] [PATCH 10/23] target/ppc: Add kvmppc_hpt_needs_host_contiguous_pages() helper David Gibson
                   ` (15 subsequent siblings)
  23 siblings, 0 replies; 27+ messages in thread
From: David Gibson @ 2018-06-22  4:24 UTC (permalink / raw)
  To: peter.maydell
  Cc: agraf, aik, groug, clg, lvivier, qemu-devel, qemu-ppc, David Gibson

spapr capabilities have an apply hook to actually activate (or deactivate)
the feature in the system at reset time.  However, a number of capabilities
affect the setup of cpus, and need to be applied to each of them -
including hotplugged cpus for extra complication.  To make this simpler,
add an optional cpu_apply hook that is called from spapr_cpu_reset().

Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
Reviewed-by: Greg Kurz <groug@kaod.org>
Reviewed-by: Cédric Le Goater <clg@kaod.org>
---
 hw/ppc/spapr_caps.c     | 19 +++++++++++++++++++
 hw/ppc/spapr_cpu_core.c |  2 ++
 include/hw/ppc/spapr.h  |  1 +
 3 files changed, 22 insertions(+)

diff --git a/hw/ppc/spapr_caps.c b/hw/ppc/spapr_caps.c
index dabed817d1..68a4243efc 100644
--- a/hw/ppc/spapr_caps.c
+++ b/hw/ppc/spapr_caps.c
@@ -59,6 +59,8 @@ typedef struct sPAPRCapabilityInfo {
     sPAPRCapPossible *possible;
     /* Make sure the virtual hardware can support this capability */
     void (*apply)(sPAPRMachineState *spapr, uint8_t val, Error **errp);
+    void (*cpu_apply)(sPAPRMachineState *spapr, PowerPCCPU *cpu,
+                      uint8_t val, Error **errp);
 } sPAPRCapabilityInfo;
 
 static void spapr_cap_get_bool(Object *obj, Visitor *v, const char *name,
@@ -472,6 +474,23 @@ void spapr_caps_apply(sPAPRMachineState *spapr)
     }
 }
 
+void spapr_caps_cpu_apply(sPAPRMachineState *spapr, PowerPCCPU *cpu)
+{
+    int i;
+
+    for (i = 0; i < SPAPR_CAP_NUM; i++) {
+        sPAPRCapabilityInfo *info = &capability_table[i];
+
+        /*
+         * If the apply function can't set the desired level and thinks it's
+         * fatal, it should cause that.
+         */
+        if (info->cpu_apply) {
+            info->cpu_apply(spapr, cpu, spapr->eff.caps[i], &error_fatal);
+        }
+    }
+}
+
 void spapr_caps_add_properties(sPAPRMachineClass *smc, Error **errp)
 {
     Error *local_err = NULL;
diff --git a/hw/ppc/spapr_cpu_core.c b/hw/ppc/spapr_cpu_core.c
index 67f1596c57..bfb94f650c 100644
--- a/hw/ppc/spapr_cpu_core.c
+++ b/hw/ppc/spapr_cpu_core.c
@@ -76,6 +76,8 @@ static void spapr_cpu_reset(void *opaque)
     spapr_cpu->slb_shadow_size = 0;
     spapr_cpu->dtl_addr = 0;
     spapr_cpu->dtl_size = 0;
+
+    spapr_caps_cpu_apply(SPAPR_MACHINE(qdev_get_machine()), cpu);
 }
 
 void spapr_cpu_set_entry_state(PowerPCCPU *cpu, target_ulong nip, target_ulong r3)
diff --git a/include/hw/ppc/spapr.h b/include/hw/ppc/spapr.h
index 9dbd6010f5..9dd46a72f6 100644
--- a/include/hw/ppc/spapr.h
+++ b/include/hw/ppc/spapr.h
@@ -800,6 +800,7 @@ static inline uint8_t spapr_get_cap(sPAPRMachineState *spapr, int cap)
 
 void spapr_caps_init(sPAPRMachineState *spapr);
 void spapr_caps_apply(sPAPRMachineState *spapr);
+void spapr_caps_cpu_apply(sPAPRMachineState *spapr, PowerPCCPU *cpu);
 void spapr_caps_add_properties(sPAPRMachineClass *smc, Error **errp);
 int spapr_caps_post_migration(sPAPRMachineState *spapr);
 
-- 
2.17.1

^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [Qemu-devel] [PATCH 10/23] target/ppc: Add kvmppc_hpt_needs_host_contiguous_pages() helper
  2018-06-22  4:24 [Qemu-devel] [PATCH 01/23] ppc/pnv: introduce a new intc_create() operation to the chip model David Gibson
                   ` (7 preceding siblings ...)
  2018-06-22  4:24 ` [Qemu-devel] [PATCH 09/23] spapr: Add cpu_apply hook to capabilities David Gibson
@ 2018-06-22  4:24 ` David Gibson
  2018-06-22  4:24 ` [Qemu-devel] [PATCH 11/23] spapr: split the IRQ allocation sequence David Gibson
                   ` (14 subsequent siblings)
  23 siblings, 0 replies; 27+ messages in thread
From: David Gibson @ 2018-06-22  4:24 UTC (permalink / raw)
  To: peter.maydell
  Cc: agraf, aik, groug, clg, lvivier, qemu-devel, qemu-ppc, David Gibson

KVM HV has a restriction that for HPT mode guests, guest pages must be hpa
contiguous as well as gpa contiguous.  We have to account for that in
various places.  We determine whether we're subject to this restriction
from the SMMU information exposed by KVM.

Planned cleanups to the way we handle this will require knowing whether
this restriction is in play in wider parts of the code.  So, expose a
helper function which returns it.

This does mean some redundant calls to kvm_get_smmu_info(), but they'll go
away again with future cleanups.

Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
Reviewed-by: Greg Kurz <groug@kaod.org>
Reviewed-by: Cédric Le Goater <clg@kaod.org>
---
 target/ppc/kvm.c     | 17 +++++++++++++++--
 target/ppc/kvm_ppc.h |  6 ++++++
 2 files changed, 21 insertions(+), 2 deletions(-)

diff --git a/target/ppc/kvm.c b/target/ppc/kvm.c
index 5c0e313ca6..50b5d01432 100644
--- a/target/ppc/kvm.c
+++ b/target/ppc/kvm.c
@@ -406,9 +406,22 @@ target_ulong kvmppc_configure_v3_mmu(PowerPCCPU *cpu,
     }
 }
 
+bool kvmppc_hpt_needs_host_contiguous_pages(void)
+{
+    PowerPCCPU *cpu = POWERPC_CPU(first_cpu);
+    static struct kvm_ppc_smmu_info smmu_info;
+
+    if (!kvm_enabled()) {
+        return false;
+    }
+
+    kvm_get_smmu_info(cpu, &smmu_info);
+    return !!(smmu_info.flags & KVM_PPC_PAGE_SIZES_REAL);
+}
+
 static bool kvm_valid_page_size(uint32_t flags, long rampgsize, uint32_t shift)
 {
-    if (!(flags & KVM_PPC_PAGE_SIZES_REAL)) {
+    if (!kvmppc_hpt_needs_host_contiguous_pages()) {
         return true;
     }
 
@@ -445,7 +458,7 @@ static void kvm_fixup_page_sizes(PowerPCCPU *cpu)
     /* If we have HV KVM, we need to forbid CI large pages if our
      * host page size is smaller than 64K.
      */
-    if (smmu_info.flags & KVM_PPC_PAGE_SIZES_REAL) {
+    if (kvmppc_hpt_needs_host_contiguous_pages()) {
         if (getpagesize() >= 0x10000) {
             cpu->hash64_opts->flags |= PPC_HASH64_CI_LARGEPAGE;
         } else {
diff --git a/target/ppc/kvm_ppc.h b/target/ppc/kvm_ppc.h
index e2840e1d33..a7ddb8a5d6 100644
--- a/target/ppc/kvm_ppc.h
+++ b/target/ppc/kvm_ppc.h
@@ -70,6 +70,7 @@ int kvmppc_resize_hpt_prepare(PowerPCCPU *cpu, target_ulong flags, int shift);
 int kvmppc_resize_hpt_commit(PowerPCCPU *cpu, target_ulong flags, int shift);
 bool kvmppc_pvr_workaround_required(PowerPCCPU *cpu);
 
+bool kvmppc_hpt_needs_host_contiguous_pages(void);
 bool kvmppc_is_mem_backend_page_size_ok(const char *obj_path);
 
 #else
@@ -222,6 +223,11 @@ static inline uint64_t kvmppc_rma_size(uint64_t current_size,
     return ram_size;
 }
 
+static inline bool kvmppc_hpt_needs_host_contiguous_pages(void)
+{
+    return false;
+}
+
 static inline bool kvmppc_is_mem_backend_page_size_ok(const char *obj_path)
 {
     return true;
-- 
2.17.1

^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [Qemu-devel] [PATCH 11/23] spapr: split the IRQ allocation sequence
  2018-06-22  4:24 [Qemu-devel] [PATCH 01/23] ppc/pnv: introduce a new intc_create() operation to the chip model David Gibson
                   ` (8 preceding siblings ...)
  2018-06-22  4:24 ` [Qemu-devel] [PATCH 10/23] target/ppc: Add kvmppc_hpt_needs_host_contiguous_pages() helper David Gibson
@ 2018-06-22  4:24 ` David Gibson
  2018-06-22  4:24 ` [Qemu-devel] [PATCH 12/23] spapr: remove unused spapr_irq routines David Gibson
                   ` (13 subsequent siblings)
  23 siblings, 0 replies; 27+ messages in thread
From: David Gibson @ 2018-06-22  4:24 UTC (permalink / raw)
  To: peter.maydell
  Cc: agraf, aik, groug, clg, lvivier, qemu-devel, qemu-ppc, David Gibson

From: Cédric Le Goater <clg@kaod.org>

Today, when a device requests for IRQ number in a sPAPR machine, the
spapr_irq_alloc() routine first scans the ICSState status array to
find an empty slot and then performs the assignement of the selected
numbers. Split this sequence in two distinct routines : spapr_irq_find()
for lookups and spapr_irq_claim() for claiming the IRQ numbers.

This will ease the introduction of a static layout of IRQ numbers.

Signed-off-by: Cédric Le Goater <clg@kaod.org>
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
---
 hw/ppc/spapr.c         | 50 ++++++++++++++++++++++++++++++++++++++++++
 hw/ppc/spapr_events.c  | 18 +++++++++++----
 hw/ppc/spapr_pci.c     | 23 ++++++++++++++++---
 hw/ppc/spapr_vio.c     | 10 ++++++++-
 include/hw/ppc/spapr.h |  4 ++++
 5 files changed, 97 insertions(+), 8 deletions(-)

diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
index 4a0b679166..b7705c3944 100644
--- a/hw/ppc/spapr.c
+++ b/hw/ppc/spapr.c
@@ -3816,6 +3816,36 @@ static int ics_find_free_block(ICSState *ics, int num, int alignnum)
     return -1;
 }
 
+int spapr_irq_find(sPAPRMachineState *spapr, int num, bool align, Error **errp)
+{
+    ICSState *ics = spapr->ics;
+    int first = -1;
+
+    assert(ics);
+
+    /*
+     * MSIMesage::data is used for storing VIRQ so
+     * it has to be aligned to num to support multiple
+     * MSI vectors. MSI-X is not affected by this.
+     * The hint is used for the first IRQ, the rest should
+     * be allocated continuously.
+     */
+    if (align) {
+        assert((num == 1) || (num == 2) || (num == 4) ||
+               (num == 8) || (num == 16) || (num == 32));
+        first = ics_find_free_block(ics, num, num);
+    } else {
+        first = ics_find_free_block(ics, num, 1);
+    }
+
+    if (first < 0) {
+        error_setg(errp, "can't find a free %d-IRQ block", num);
+        return -1;
+    }
+
+    return first + ics->offset;
+}
+
 /*
  * Allocate the IRQ number and set the IRQ type, LSI or MSI
  */
@@ -3894,6 +3924,26 @@ int spapr_irq_alloc_block(sPAPRMachineState *spapr, int num, bool lsi,
     return first;
 }
 
+int spapr_irq_claim(sPAPRMachineState *spapr, int irq, bool lsi, Error **errp)
+{
+    ICSState *ics = spapr->ics;
+
+    assert(ics);
+
+    if (!ics_valid_irq(ics, irq)) {
+        error_setg(errp, "IRQ %d is invalid", irq);
+        return -1;
+    }
+
+    if (!ICS_IRQ_FREE(ics, irq - ics->offset)) {
+        error_setg(errp, "IRQ %d is not free", irq);
+        return -1;
+    }
+
+    spapr_irq_set_lsi(spapr, irq, lsi);
+    return 0;
+}
+
 void spapr_irq_free(sPAPRMachineState *spapr, int irq, int num)
 {
     ICSState *ics = spapr->ics;
diff --git a/hw/ppc/spapr_events.c b/hw/ppc/spapr_events.c
index 86836f0626..e4f5946a21 100644
--- a/hw/ppc/spapr_events.c
+++ b/hw/ppc/spapr_events.c
@@ -707,13 +707,18 @@ void spapr_clear_pending_events(sPAPRMachineState *spapr)
 
 void spapr_events_init(sPAPRMachineState *spapr)
 {
+    int epow_irq;
+
+    epow_irq = spapr_irq_findone(spapr, &error_fatal);
+
+    spapr_irq_claim(spapr, epow_irq, false, &error_fatal);
+
     QTAILQ_INIT(&spapr->pending_events);
 
     spapr->event_sources = spapr_event_sources_new();
 
     spapr_event_sources_register(spapr->event_sources, EVENT_CLASS_EPOW,
-                                 spapr_irq_alloc(spapr, 0, false,
-                                                  &error_fatal));
+                                 epow_irq);
 
     /* NOTE: if machine supports modern/dedicated hotplug event source,
      * we add it to the device-tree unconditionally. This means we may
@@ -724,9 +729,14 @@ void spapr_events_init(sPAPRMachineState *spapr)
      * checking that it's enabled.
      */
     if (spapr->use_hotplug_event_source) {
+        int hp_irq;
+
+        hp_irq = spapr_irq_findone(spapr, &error_fatal);
+
+        spapr_irq_claim(spapr, hp_irq, false, &error_fatal);
+
         spapr_event_sources_register(spapr->event_sources, EVENT_CLASS_HOT_PLUG,
-                                     spapr_irq_alloc(spapr, 0, false,
-                                                      &error_fatal));
+                                     hp_irq);
     }
 
     spapr->epow_notifier.notify = spapr_powerdown_req;
diff --git a/hw/ppc/spapr_pci.c b/hw/ppc/spapr_pci.c
index f936ce63ef..497b896c7d 100644
--- a/hw/ppc/spapr_pci.c
+++ b/hw/ppc/spapr_pci.c
@@ -279,6 +279,7 @@ static void rtas_ibm_change_msi(PowerPCCPU *cpu, sPAPRMachineState *spapr,
     spapr_pci_msi *msi;
     int *config_addr_key;
     Error *err = NULL;
+    int i;
 
     /* Fins sPAPRPHBState */
     phb = spapr_pci_find_phb(spapr, buid);
@@ -371,8 +372,7 @@ static void rtas_ibm_change_msi(PowerPCCPU *cpu, sPAPRMachineState *spapr,
     }
 
     /* Allocate MSIs */
-    irq = spapr_irq_alloc_block(spapr, req_num, false,
-                           ret_intr_type == RTAS_TYPE_MSI, &err);
+    irq = spapr_irq_find(spapr, req_num, ret_intr_type == RTAS_TYPE_MSI, &err);
     if (err) {
         error_reportf_err(err, "Can't allocate MSIs for device %x: ",
                           config_addr);
@@ -380,6 +380,16 @@ static void rtas_ibm_change_msi(PowerPCCPU *cpu, sPAPRMachineState *spapr,
         return;
     }
 
+    for (i = 0; i < req_num; i++) {
+        spapr_irq_claim(spapr, irq + i, false, &err);
+        if (err) {
+            error_reportf_err(err, "Can't allocate MSIs for device %x: ",
+                              config_addr);
+            rtas_st(rets, 0, RTAS_OUT_HW_ERROR);
+            return;
+        }
+    }
+
     /* Release previous MSIs */
     if (msi) {
         spapr_irq_free(spapr, msi->first_irq, msi->num);
@@ -1698,7 +1708,14 @@ static void spapr_phb_realize(DeviceState *dev, Error **errp)
         uint32_t irq;
         Error *local_err = NULL;
 
-        irq = spapr_irq_alloc_block(spapr, 1, true, false, &local_err);
+        irq = spapr_irq_findone(spapr, &local_err);
+        if (local_err) {
+            error_propagate(errp, local_err);
+            error_prepend(errp, "can't allocate LSIs: ");
+            return;
+        }
+
+        spapr_irq_claim(spapr, irq, true, &local_err);
         if (local_err) {
             error_propagate(errp, local_err);
             error_prepend(errp, "can't allocate LSIs: ");
diff --git a/hw/ppc/spapr_vio.c b/hw/ppc/spapr_vio.c
index 4555c648a8..daf85130b5 100644
--- a/hw/ppc/spapr_vio.c
+++ b/hw/ppc/spapr_vio.c
@@ -475,7 +475,15 @@ static void spapr_vio_busdev_realize(DeviceState *qdev, Error **errp)
         dev->qdev.id = id;
     }
 
-    dev->irq = spapr_irq_alloc(spapr, dev->irq, false, &local_err);
+    if (!dev->irq) {
+        dev->irq = spapr_irq_findone(spapr, &local_err);
+        if (local_err) {
+            error_propagate(errp, local_err);
+            return;
+        }
+    }
+
+    spapr_irq_claim(spapr, dev->irq, false, &local_err);
     if (local_err) {
         error_propagate(errp, local_err);
         return;
diff --git a/include/hw/ppc/spapr.h b/include/hw/ppc/spapr.h
index 9dd46a72f6..6bfdf5a2fb 100644
--- a/include/hw/ppc/spapr.h
+++ b/include/hw/ppc/spapr.h
@@ -776,6 +776,10 @@ int spapr_irq_alloc(sPAPRMachineState *spapr, int irq_hint, bool lsi,
                     Error **errp);
 int spapr_irq_alloc_block(sPAPRMachineState *spapr, int num, bool lsi,
                           bool align, Error **errp);
+int spapr_irq_find(sPAPRMachineState *spapr, int num, bool align,
+                   Error **errp);
+#define spapr_irq_findone(spapr, errp) spapr_irq_find(spapr, 1, false, errp)
+int spapr_irq_claim(sPAPRMachineState *spapr, int irq, bool lsi, Error **errp);
 void spapr_irq_free(sPAPRMachineState *spapr, int irq, int num);
 qemu_irq spapr_qirq(sPAPRMachineState *spapr, int irq);
 
-- 
2.17.1

^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [Qemu-devel] [PATCH 12/23] spapr: remove unused spapr_irq routines
  2018-06-22  4:24 [Qemu-devel] [PATCH 01/23] ppc/pnv: introduce a new intc_create() operation to the chip model David Gibson
                   ` (9 preceding siblings ...)
  2018-06-22  4:24 ` [Qemu-devel] [PATCH 11/23] spapr: split the IRQ allocation sequence David Gibson
@ 2018-06-22  4:24 ` David Gibson
  2018-06-22  4:24 ` [Qemu-devel] [PATCH 13/23] fpu_helper.c: fix helper_fpscr_clrbit() function David Gibson
                   ` (12 subsequent siblings)
  23 siblings, 0 replies; 27+ messages in thread
From: David Gibson @ 2018-06-22  4:24 UTC (permalink / raw)
  To: peter.maydell
  Cc: agraf, aik, groug, clg, lvivier, qemu-devel, qemu-ppc, David Gibson

From: Cédric Le Goater <clg@kaod.org>

spapr_irq_alloc_block and spapr_irq_alloc() are now deprecated.

Signed-off-by: Cédric Le Goater <clg@kaod.org>
Reviewed-by: David Gibson <david@gibson.dropbear.id.au>
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
---
 hw/ppc/spapr.c         | 80 +-----------------------------------------
 include/hw/ppc/spapr.h |  4 ---
 2 files changed, 1 insertion(+), 83 deletions(-)

diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
index b7705c3944..78186500e9 100644
--- a/hw/ppc/spapr.c
+++ b/hw/ppc/spapr.c
@@ -3846,84 +3846,6 @@ int spapr_irq_find(sPAPRMachineState *spapr, int num, bool align, Error **errp)
     return first + ics->offset;
 }
 
-/*
- * Allocate the IRQ number and set the IRQ type, LSI or MSI
- */
-static void spapr_irq_set_lsi(sPAPRMachineState *spapr, int irq, bool lsi)
-{
-    ics_set_irq_type(spapr->ics, irq - spapr->ics->offset, lsi);
-}
-
-int spapr_irq_alloc(sPAPRMachineState *spapr, int irq_hint, bool lsi,
-                    Error **errp)
-{
-    ICSState *ics = spapr->ics;
-    int irq;
-
-    assert(ics);
-
-    if (irq_hint) {
-        if (!ICS_IRQ_FREE(ics, irq_hint - ics->offset)) {
-            error_setg(errp, "can't allocate IRQ %d: already in use", irq_hint);
-            return -1;
-        }
-        irq = irq_hint;
-    } else {
-        irq = ics_find_free_block(ics, 1, 1);
-        if (irq < 0) {
-            error_setg(errp, "can't allocate IRQ: no IRQ left");
-            return -1;
-        }
-        irq += ics->offset;
-    }
-
-    spapr_irq_set_lsi(spapr, irq, lsi);
-    trace_spapr_irq_alloc(irq);
-
-    return irq;
-}
-
-/*
- * Allocate block of consecutive IRQs, and return the number of the first IRQ in
- * the block. If align==true, aligns the first IRQ number to num.
- */
-int spapr_irq_alloc_block(sPAPRMachineState *spapr, int num, bool lsi,
-                          bool align, Error **errp)
-{
-    ICSState *ics = spapr->ics;
-    int i, first = -1;
-
-    assert(ics);
-
-    /*
-     * MSIMesage::data is used for storing VIRQ so
-     * it has to be aligned to num to support multiple
-     * MSI vectors. MSI-X is not affected by this.
-     * The hint is used for the first IRQ, the rest should
-     * be allocated continuously.
-     */
-    if (align) {
-        assert((num == 1) || (num == 2) || (num == 4) ||
-               (num == 8) || (num == 16) || (num == 32));
-        first = ics_find_free_block(ics, num, num);
-    } else {
-        first = ics_find_free_block(ics, num, 1);
-    }
-    if (first < 0) {
-        error_setg(errp, "can't find a free %d-IRQ block", num);
-        return -1;
-    }
-
-    first += ics->offset;
-    for (i = first; i < first + num; ++i) {
-        spapr_irq_set_lsi(spapr, i, lsi);
-    }
-
-    trace_spapr_irq_alloc_block(first, num, lsi, align);
-
-    return first;
-}
-
 int spapr_irq_claim(sPAPRMachineState *spapr, int irq, bool lsi, Error **errp)
 {
     ICSState *ics = spapr->ics;
@@ -3940,7 +3862,7 @@ int spapr_irq_claim(sPAPRMachineState *spapr, int irq, bool lsi, Error **errp)
         return -1;
     }
 
-    spapr_irq_set_lsi(spapr, irq, lsi);
+    ics_set_irq_type(ics, irq - ics->offset, lsi);
     return 0;
 }
 
diff --git a/include/hw/ppc/spapr.h b/include/hw/ppc/spapr.h
index 6bfdf5a2fb..8a9142244f 100644
--- a/include/hw/ppc/spapr.h
+++ b/include/hw/ppc/spapr.h
@@ -772,10 +772,6 @@ int spapr_get_vcpu_id(PowerPCCPU *cpu);
 void spapr_set_vcpu_id(PowerPCCPU *cpu, int cpu_index, Error **errp);
 PowerPCCPU *spapr_find_cpu(int vcpu_id);
 
-int spapr_irq_alloc(sPAPRMachineState *spapr, int irq_hint, bool lsi,
-                    Error **errp);
-int spapr_irq_alloc_block(sPAPRMachineState *spapr, int num, bool lsi,
-                          bool align, Error **errp);
 int spapr_irq_find(sPAPRMachineState *spapr, int num, bool align,
                    Error **errp);
 #define spapr_irq_findone(spapr, errp) spapr_irq_find(spapr, 1, false, errp)
-- 
2.17.1

^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [Qemu-devel] [PATCH 13/23] fpu_helper.c: fix helper_fpscr_clrbit() function
  2018-06-22  4:24 [Qemu-devel] [PATCH 01/23] ppc/pnv: introduce a new intc_create() operation to the chip model David Gibson
                   ` (10 preceding siblings ...)
  2018-06-22  4:24 ` [Qemu-devel] [PATCH 12/23] spapr: remove unused spapr_irq routines David Gibson
@ 2018-06-22  4:24 ` David Gibson
  2018-06-22  4:24 ` [Qemu-devel] [PATCH 14/23] sm501: Fix hardware cursor color conversion David Gibson
                   ` (11 subsequent siblings)
  23 siblings, 0 replies; 27+ messages in thread
From: David Gibson @ 2018-06-22  4:24 UTC (permalink / raw)
  To: peter.maydell
  Cc: agraf, aik, groug, clg, lvivier, qemu-devel, qemu-ppc,
	John Arbuckle, David Gibson

From: John Arbuckle <programmingkidx@gmail.com>

Fix the helper_fpscr_clrbit() function so it correctly sets the FEX
and VX bits.

Determining the value for the Floating Point Status and Control
Register's (FPSCR) FEX bit is suppose to be done like this:

FEX = (VX & VE) | (OX & OE) | (UX & UE) | (ZX & ZE) | (XX & XE))

It is described as "the logical OR of all the floating-point exception
bits masked by their respective enable bits". It was not implemented
correctly. The value of FEX would stay on even when all other bits
were set to off.

The VX bit is described as "the logical OR of all of the invalid
operation exceptions". This bit was also not implemented correctly. It
too would stay on when all the other bits were set to off.

My main source of information is an IBM document called:

PowerPC Microprocessor Family:
The Programming Environments for 32-Bit Microprocessors

Page 62 is where the FPSCR information is located.

This is an older copy than the one I use but it is still very useful:
https://www.pdfdrive.net/powerpc-microprocessor-family-the-programming-environments-for-32-e3087633.html

I use a G3 and G5 iMac to compare bit values with QEMU. This patch
fixed all the problems I was having with these bits.

Signed-off-by: John Arbuckle <programmingkidx@gmail.com>
[dwg: Re-wrapped commit message]
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
---
 target/ppc/fpu_helper.c | 28 ++++++++++++++++++++++++++++
 1 file changed, 28 insertions(+)

diff --git a/target/ppc/fpu_helper.c b/target/ppc/fpu_helper.c
index d31a933cbb..7714bfe0f9 100644
--- a/target/ppc/fpu_helper.c
+++ b/target/ppc/fpu_helper.c
@@ -325,6 +325,34 @@ void helper_fpscr_clrbit(CPUPPCState *env, uint32_t bit)
         case FPSCR_RN:
             fpscr_set_rounding_mode(env);
             break;
+        case FPSCR_VXSNAN:
+        case FPSCR_VXISI:
+        case FPSCR_VXIDI:
+        case FPSCR_VXZDZ:
+        case FPSCR_VXIMZ:
+        case FPSCR_VXVC:
+        case FPSCR_VXSOFT:
+        case FPSCR_VXSQRT:
+        case FPSCR_VXCVI:
+            if (!fpscr_ix) {
+                /* Set VX bit to zero */
+                env->fpscr &= ~(1 << FPSCR_VX);
+            }
+            break;
+        case FPSCR_OX:
+        case FPSCR_UX:
+        case FPSCR_ZX:
+        case FPSCR_XX:
+        case FPSCR_VE:
+        case FPSCR_OE:
+        case FPSCR_UE:
+        case FPSCR_ZE:
+        case FPSCR_XE:
+            if (!fpscr_eex) {
+                /* Set the FEX bit */
+                env->fpscr &= ~(1 << FPSCR_FEX);
+            }
+            break;
         default:
             break;
         }
-- 
2.17.1

^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [Qemu-devel] [PATCH 14/23] sm501: Fix hardware cursor color conversion
  2018-06-22  4:24 [Qemu-devel] [PATCH 01/23] ppc/pnv: introduce a new intc_create() operation to the chip model David Gibson
                   ` (11 preceding siblings ...)
  2018-06-22  4:24 ` [Qemu-devel] [PATCH 13/23] fpu_helper.c: fix helper_fpscr_clrbit() function David Gibson
@ 2018-06-22  4:24 ` David Gibson
  2018-06-22  4:24 ` [Qemu-devel] [PATCH 15/23] ppc4xx_i2c: Remove unimplemented sdata and intr registers David Gibson
                   ` (10 subsequent siblings)
  23 siblings, 0 replies; 27+ messages in thread
From: David Gibson @ 2018-06-22  4:24 UTC (permalink / raw)
  To: peter.maydell
  Cc: agraf, aik, groug, clg, lvivier, qemu-devel, qemu-ppc,
	Sebastian Bauer, David Gibson

From: Sebastian Bauer <mail@sebastianbauer.info>

According to the sm501 specs the hardware cursor colors are to be given in
the rgb565 format, but the code currently interprets them as bgr565.

Therefore, the colors of the hardware cursors are wrong in the QEMU
display, e.g., the standard mouse pointer of AmigaOS appears blue instead
of red. This change fixes this issue by replacing the existing naive
bgr565 => rgb888 conversion with a standard rgb565 => rgb888 one that also
scales the color component values properly.

Signed-off-by: Sebastian Bauer <mail@sebastianbauer.info>
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
---
 hw/display/sm501.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/hw/display/sm501.c b/hw/display/sm501.c
index ca0840f6fa..8206ae81a1 100644
--- a/hw/display/sm501.c
+++ b/hw/display/sm501.c
@@ -652,9 +652,9 @@ static inline void get_hwc_palette(SM501State *state, int crt, uint8_t *palette)
         } else {
             rgb565 = color_reg & 0xFFFF;
         }
-        palette[i * 3 + 0] = (rgb565 << 3) & 0xf8; /* red */
-        palette[i * 3 + 1] = (rgb565 >> 3) & 0xfc; /* green */
-        palette[i * 3 + 2] = (rgb565 >> 8) & 0xf8; /* blue */
+        palette[i * 3 + 0] = ((rgb565 >> 11) * 527 + 23) >> 6; /* r */
+        palette[i * 3 + 1] = (((rgb565 >> 5) & 0x3f) * 259 + 33) >> 6; /* g */
+        palette[i * 3 + 2] = ((rgb565 & 0x1f) * 527 + 23) >> 6; /* b */
     }
 }
 
-- 
2.17.1

^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [Qemu-devel] [PATCH 15/23] ppc4xx_i2c: Remove unimplemented sdata and intr registers
  2018-06-22  4:24 [Qemu-devel] [PATCH 01/23] ppc/pnv: introduce a new intc_create() operation to the chip model David Gibson
                   ` (12 preceding siblings ...)
  2018-06-22  4:24 ` [Qemu-devel] [PATCH 14/23] sm501: Fix hardware cursor color conversion David Gibson
@ 2018-06-22  4:24 ` David Gibson
  2018-06-22  4:24 ` [Qemu-devel] [PATCH 16/23] ppc4xx_i2c: Implement directcntl register David Gibson
                   ` (9 subsequent siblings)
  23 siblings, 0 replies; 27+ messages in thread
From: David Gibson @ 2018-06-22  4:24 UTC (permalink / raw)
  To: peter.maydell
  Cc: agraf, aik, groug, clg, lvivier, qemu-devel, qemu-ppc,
	BALATON Zoltan, David Gibson

From: BALATON Zoltan <balaton@eik.bme.hu>

We don't emulate slave mode so related registers are not needed.
[lh]sadr are only retained to avoid too many warnings and simplify
debugging but sdata is not even correct because device has a 4 byte
FIFO instead so just remove this unimplemented register for now.

The intr register is also not implemented correctly, it is for
diagnostics and normally not even visible on device without explicitly
enabling it. As no guests are known to need this remove it as well.

Signed-off-by: BALATON Zoltan <balaton@eik.bme.hu>
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
---
 hw/i2c/ppc4xx_i2c.c         | 16 +---------------
 include/hw/i2c/ppc4xx_i2c.h |  4 +---
 2 files changed, 2 insertions(+), 18 deletions(-)

diff --git a/hw/i2c/ppc4xx_i2c.c b/hw/i2c/ppc4xx_i2c.c
index d1936dbdca..4e0aaae1fc 100644
--- a/hw/i2c/ppc4xx_i2c.c
+++ b/hw/i2c/ppc4xx_i2c.c
@@ -3,7 +3,7 @@
  *
  * Copyright (c) 2007 Jocelyn Mayer
  * Copyright (c) 2012 François Revol
- * Copyright (c) 2016 BALATON Zoltan
+ * Copyright (c) 2016-2018 BALATON Zoltan
  *
  * Permission is hereby granted, free of charge, to any person obtaining a copy
  * of this software and associated documentation files (the "Software"), to deal
@@ -63,7 +63,6 @@ static void ppc4xx_i2c_reset(DeviceState *s)
     i2c->mdcntl = 0;
     i2c->sts = 0;
     i2c->extsts = 0x8f;
-    i2c->sdata = 0;
     i2c->lsadr = 0;
     i2c->hsadr = 0;
     i2c->clkdiv = 0;
@@ -71,7 +70,6 @@ static void ppc4xx_i2c_reset(DeviceState *s)
     i2c->xfrcnt = 0;
     i2c->xtcntlss = 0;
     i2c->directcntl = 0xf;
-    i2c->intr = 0;
 }
 
 static inline bool ppc4xx_i2c_is_master(PPC4xxI2CState *i2c)
@@ -139,9 +137,6 @@ static uint64_t ppc4xx_i2c_readb(void *opaque, hwaddr addr, unsigned int size)
                           TYPE_PPC4xx_I2C, __func__);
         }
         break;
-    case 2:
-        ret = i2c->sdata;
-        break;
     case 4:
         ret = i2c->lmadr;
         break;
@@ -181,9 +176,6 @@ static uint64_t ppc4xx_i2c_readb(void *opaque, hwaddr addr, unsigned int size)
     case 16:
         ret = i2c->directcntl;
         break;
-    case 17:
-        ret = i2c->intr;
-        break;
     default:
         if (addr < PPC4xx_I2C_MEM_SIZE) {
             qemu_log_mask(LOG_UNIMP, "%s: Unimplemented register 0x%"
@@ -229,9 +221,6 @@ static void ppc4xx_i2c_writeb(void *opaque, hwaddr addr, uint64_t value,
             }
         }
         break;
-    case 2:
-        i2c->sdata = value;
-        break;
     case 4:
         i2c->lmadr = value;
         if (i2c_bus_busy(i2c->bus)) {
@@ -302,9 +291,6 @@ static void ppc4xx_i2c_writeb(void *opaque, hwaddr addr, uint64_t value,
     case 16:
         i2c->directcntl = value & 0x7;
         break;
-    case 17:
-        i2c->intr = value;
-        break;
     default:
         if (addr < PPC4xx_I2C_MEM_SIZE) {
             qemu_log_mask(LOG_UNIMP, "%s: Unimplemented register 0x%"
diff --git a/include/hw/i2c/ppc4xx_i2c.h b/include/hw/i2c/ppc4xx_i2c.h
index 3c603071bd..e4b6ded855 100644
--- a/include/hw/i2c/ppc4xx_i2c.h
+++ b/include/hw/i2c/ppc4xx_i2c.h
@@ -3,7 +3,7 @@
  *
  * Copyright (c) 2007 Jocelyn Mayer
  * Copyright (c) 2012 François Revol
- * Copyright (c) 2016 BALATON Zoltan
+ * Copyright (c) 2016-2018 BALATON Zoltan
  *
  * Permission is hereby granted, free of charge, to any person obtaining a copy
  * of this software and associated documentation files (the "Software"), to deal
@@ -49,7 +49,6 @@ typedef struct PPC4xxI2CState {
     uint8_t mdcntl;
     uint8_t sts;
     uint8_t extsts;
-    uint8_t sdata;
     uint8_t lsadr;
     uint8_t hsadr;
     uint8_t clkdiv;
@@ -57,7 +56,6 @@ typedef struct PPC4xxI2CState {
     uint8_t xfrcnt;
     uint8_t xtcntlss;
     uint8_t directcntl;
-    uint8_t intr;
 } PPC4xxI2CState;
 
 #endif /* PPC4XX_I2C_H */
-- 
2.17.1

^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [Qemu-devel] [PATCH 16/23] ppc4xx_i2c: Implement directcntl register
  2018-06-22  4:24 [Qemu-devel] [PATCH 01/23] ppc/pnv: introduce a new intc_create() operation to the chip model David Gibson
                   ` (13 preceding siblings ...)
  2018-06-22  4:24 ` [Qemu-devel] [PATCH 15/23] ppc4xx_i2c: Remove unimplemented sdata and intr registers David Gibson
@ 2018-06-22  4:24 ` David Gibson
  2018-06-22  4:24 ` [Qemu-devel] [PATCH 17/23] target/ppc: Add missing opcode for icbt on PPC440 David Gibson
                   ` (8 subsequent siblings)
  23 siblings, 0 replies; 27+ messages in thread
From: David Gibson @ 2018-06-22  4:24 UTC (permalink / raw)
  To: peter.maydell
  Cc: agraf, aik, groug, clg, lvivier, qemu-devel, qemu-ppc,
	BALATON Zoltan, David Gibson

From: BALATON Zoltan <balaton@eik.bme.hu>

As well as being able to generate its own i2c transactions, the ppc4xx
i2c controller has a DIRECTCNTL register which allows explicit control
of the i2c lines.

Using this register an OS can directly bitbang i2c operations. In
order to let emulated i2c devices respond to this, we need to wire up
the DIRECTCNTL register to qemu's bitbanged i2c handling code.

Signed-off-by: BALATON Zoltan <balaton@eik.bme.hu>
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
---
 default-configs/ppc-softmmu.mak    |  1 +
 default-configs/ppcemb-softmmu.mak |  1 +
 hw/i2c/ppc4xx_i2c.c                | 14 +++++++++++++-
 include/hw/i2c/ppc4xx_i2c.h        |  4 ++++
 4 files changed, 19 insertions(+), 1 deletion(-)

diff --git a/default-configs/ppc-softmmu.mak b/default-configs/ppc-softmmu.mak
index abeeb0418a..851b4afc21 100644
--- a/default-configs/ppc-softmmu.mak
+++ b/default-configs/ppc-softmmu.mak
@@ -26,6 +26,7 @@ CONFIG_USB_EHCI_SYSBUS=y
 CONFIG_SM501=y
 CONFIG_IDE_SII3112=y
 CONFIG_I2C=y
+CONFIG_BITBANG_I2C=y
 
 # For Macs
 CONFIG_MAC=y
diff --git a/default-configs/ppcemb-softmmu.mak b/default-configs/ppcemb-softmmu.mak
index 67d18b2e0e..37af1930b3 100644
--- a/default-configs/ppcemb-softmmu.mak
+++ b/default-configs/ppcemb-softmmu.mak
@@ -19,3 +19,4 @@ CONFIG_USB_EHCI_SYSBUS=y
 CONFIG_SM501=y
 CONFIG_IDE_SII3112=y
 CONFIG_I2C=y
+CONFIG_BITBANG_I2C=y
diff --git a/hw/i2c/ppc4xx_i2c.c b/hw/i2c/ppc4xx_i2c.c
index 4e0aaae1fc..fca80d695a 100644
--- a/hw/i2c/ppc4xx_i2c.c
+++ b/hw/i2c/ppc4xx_i2c.c
@@ -30,6 +30,7 @@
 #include "cpu.h"
 #include "hw/hw.h"
 #include "hw/i2c/ppc4xx_i2c.h"
+#include "bitbang_i2c.h"
 
 #define PPC4xx_I2C_MEM_SIZE 18
 
@@ -46,6 +47,11 @@
 
 #define IIC_XTCNTLSS_SRST   (1 << 0)
 
+#define IIC_DIRECTCNTL_SDAC (1 << 3)
+#define IIC_DIRECTCNTL_SCLC (1 << 2)
+#define IIC_DIRECTCNTL_MSDA (1 << 1)
+#define IIC_DIRECTCNTL_MSCL (1 << 0)
+
 static void ppc4xx_i2c_reset(DeviceState *s)
 {
     PPC4xxI2CState *i2c = PPC4xx_I2C(s);
@@ -289,7 +295,12 @@ static void ppc4xx_i2c_writeb(void *opaque, hwaddr addr, uint64_t value,
         i2c->xtcntlss = value;
         break;
     case 16:
-        i2c->directcntl = value & 0x7;
+        i2c->directcntl = value & (IIC_DIRECTCNTL_SDAC & IIC_DIRECTCNTL_SCLC);
+        i2c->directcntl |= (value & IIC_DIRECTCNTL_SCLC ? 1 : 0);
+        bitbang_i2c_set(i2c->bitbang, BITBANG_I2C_SCL,
+                        i2c->directcntl & IIC_DIRECTCNTL_MSCL);
+        i2c->directcntl |= bitbang_i2c_set(i2c->bitbang, BITBANG_I2C_SDA,
+                               (value & IIC_DIRECTCNTL_SDAC) != 0) << 1;
         break;
     default:
         if (addr < PPC4xx_I2C_MEM_SIZE) {
@@ -322,6 +333,7 @@ static void ppc4xx_i2c_init(Object *o)
     sysbus_init_mmio(SYS_BUS_DEVICE(s), &s->iomem);
     sysbus_init_irq(SYS_BUS_DEVICE(s), &s->irq);
     s->bus = i2c_init_bus(DEVICE(s), "i2c");
+    s->bitbang = bitbang_i2c_init(s->bus);
 }
 
 static void ppc4xx_i2c_class_init(ObjectClass *klass, void *data)
diff --git a/include/hw/i2c/ppc4xx_i2c.h b/include/hw/i2c/ppc4xx_i2c.h
index e4b6ded855..ea6c8e1a58 100644
--- a/include/hw/i2c/ppc4xx_i2c.h
+++ b/include/hw/i2c/ppc4xx_i2c.h
@@ -31,6 +31,9 @@
 #include "hw/sysbus.h"
 #include "hw/i2c/i2c.h"
 
+/* from hw/i2c/bitbang_i2c.h */
+typedef struct bitbang_i2c_interface bitbang_i2c_interface;
+
 #define TYPE_PPC4xx_I2C "ppc4xx-i2c"
 #define PPC4xx_I2C(obj) OBJECT_CHECK(PPC4xxI2CState, (obj), TYPE_PPC4xx_I2C)
 
@@ -42,6 +45,7 @@ typedef struct PPC4xxI2CState {
     I2CBus *bus;
     qemu_irq irq;
     MemoryRegion iomem;
+    bitbang_i2c_interface *bitbang;
     uint8_t mdata;
     uint8_t lmadr;
     uint8_t hmadr;
-- 
2.17.1

^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [Qemu-devel] [PATCH 17/23] target/ppc: Add missing opcode for icbt on PPC440
  2018-06-22  4:24 [Qemu-devel] [PATCH 01/23] ppc/pnv: introduce a new intc_create() operation to the chip model David Gibson
                   ` (14 preceding siblings ...)
  2018-06-22  4:24 ` [Qemu-devel] [PATCH 16/23] ppc4xx_i2c: Implement directcntl register David Gibson
@ 2018-06-22  4:24 ` David Gibson
  2018-06-22  4:24 ` [Qemu-devel] [PATCH 18/23] pseries: Update SLOF firmware image to qemu-slof-20180621 David Gibson
                   ` (7 subsequent siblings)
  23 siblings, 0 replies; 27+ messages in thread
From: David Gibson @ 2018-06-22  4:24 UTC (permalink / raw)
  To: peter.maydell
  Cc: agraf, aik, groug, clg, lvivier, qemu-devel, qemu-ppc,
	BALATON Zoltan, David Gibson

From: BALATON Zoltan <balaton@eik.bme.hu>

According to PPC440 User Manual PPC440 has multiple opcodes for icbt
instruction: one for compatibility with older cores and two 440
specific opcodes one of which is defined in BookE. QEMU only
implements two of these, add the missing one.

Signed-off-by: BALATON Zoltan <balaton@eik.bme.hu>
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
---
 target/ppc/translate.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/target/ppc/translate.c b/target/ppc/translate.c
index 5fe1ba6555..3a215a1dc6 100644
--- a/target/ppc/translate.c
+++ b/target/ppc/translate.c
@@ -6707,6 +6707,8 @@ GEN_HANDLER_E(mbar, 0x1F, 0x16, 0x1a, 0x001FF801,
 GEN_HANDLER(msync_4xx, 0x1F, 0x16, 0x12, 0x03FFF801, PPC_BOOKE),
 GEN_HANDLER2_E(icbt_440, "icbt", 0x1F, 0x16, 0x00, 0x03E00001,
                PPC_BOOKE, PPC2_BOOKE206),
+GEN_HANDLER2(icbt_440, "icbt", 0x1F, 0x06, 0x08, 0x03E00001,
+               PPC_440_SPEC),
 GEN_HANDLER(lvsl, 0x1f, 0x06, 0x00, 0x00000001, PPC_ALTIVEC),
 GEN_HANDLER(lvsr, 0x1f, 0x06, 0x01, 0x00000001, PPC_ALTIVEC),
 GEN_HANDLER(mfvscr, 0x04, 0x2, 0x18, 0x001ff800, PPC_ALTIVEC),
-- 
2.17.1

^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [Qemu-devel] [PATCH 18/23] pseries: Update SLOF firmware image to qemu-slof-20180621
  2018-06-22  4:24 [Qemu-devel] [PATCH 01/23] ppc/pnv: introduce a new intc_create() operation to the chip model David Gibson
                   ` (15 preceding siblings ...)
  2018-06-22  4:24 ` [Qemu-devel] [PATCH 17/23] target/ppc: Add missing opcode for icbt on PPC440 David Gibson
@ 2018-06-22  4:24 ` David Gibson
  2018-06-22  4:24 ` [Qemu-devel] [PATCH 19/23] spapr: Maximum (HPT) pagesize property David Gibson
                   ` (6 subsequent siblings)
  23 siblings, 0 replies; 27+ messages in thread
From: David Gibson @ 2018-06-22  4:24 UTC (permalink / raw)
  To: peter.maydell
  Cc: agraf, aik, groug, clg, lvivier, qemu-devel, qemu-ppc, David Gibson

From: Alexey Kardashevskiy <aik@ozlabs.ru>

The changes are:
1. fixed broken_sc1;
2. added switching between boot consoles;
3. added PXE boot.

The full list is:
 > lib/libnet/pxelinux: Fix two off-by-one bugs in the pxelinux.cfg parser
 > lib/libnet/pxelinux: Make the size handling for pxelinux_load_cfg more logical
 > libc: Add a simple implementation of an assert() function
 > libnet: Support UUID-based pxelinux.cfg file names
 > slof: Add a helper function to get the contents of a property in C code
 > libnet: Add support for DHCPv4 options 209 and 210
 > libnet: Wire up pxelinux.cfg network booting
 > libnet: Add functions for downloading and parsing pxelinux.cfg files
 > libnet: Put code for determing TFTP error strings into a separate function
 > libc: Add the snprintf() function
 > libnet: Pass ip_version via struct filename_ip
 > resolve ihandle and xt handle in the input command (like for the output)
 > Fix output word
 > obp-tftp: Make sure to not overwrite paflof in memory
 > libnet: Get rid of unused huge_load and block_size parameters
 > libc: Check for NULL pointers in free()
 > libc: Implement strrchr()
 > libnet: Get rid of unnecessary (char *) casts
 > broken_sc1: check for H_PRIVILEGE
 > OF: Use new property "stdout-path" for boot console

Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
---
 pc-bios/README   |   2 +-
 pc-bios/slof.bin | Bin 913880 -> 924840 bytes
 roms/SLOF        |   2 +-
 3 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/pc-bios/README b/pc-bios/README
index a843e1e8b1..99e15a737b 100644
--- a/pc-bios/README
+++ b/pc-bios/README
@@ -17,7 +17,7 @@
 - SLOF (Slimline Open Firmware) is a free IEEE 1275 Open Firmware
   implementation for certain IBM POWER hardware.  The sources are at
   https://github.com/aik/SLOF, and the image currently in qemu is
-  built from git tag qemu-slof-20171214.
+  built from git tag qemu-slof-20180621.
 
 - sgabios (the Serial Graphics Adapter option ROM) provides a means for
   legacy x86 software to communicate with an attached serial console as
diff --git a/pc-bios/slof.bin b/pc-bios/slof.bin
index d46c83efb706e4664fec834234ba69d96ede3473..4e0e33f8297888ca8e143be784c30ce404f072cd 100644
GIT binary patch
delta 231859
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
GeDXiN>nk7t

delta 221666
zcmbS!2~<=^_IFiv1C1*hP(Ve%4G;zQ2hGwbYHPcoabFwMsL_l#F%ulY2Gj%-7l@hy
zMZ{fWqBv?WCQdLbMw5`lBxW18<S&e7f)kVAMt{FsuUjC=|2yaVJg2Q!x2kU4x?9~^
z-s8Y)+Qn;w@&_1N-nv+z^)t3_>;Fi>62BJb{A_ETu78_C_?V;r+Lh?@SZa*cr(fUb
z)IRf~V+Lw-kL6pA3oUuxoZvoMaNp=YgM$0?i;dP|qoZ3k3m!H(c+$MTKDltoUxMR<
z=Pz8=>kq9nhaB_pI}n%6n0+;48LPeCn~T)G+IIO^@`xoowam)eowhT^GEa$pacNFx
z#vT@`&FNhU_+ABny$Sp>;OiCqAA=j$uLJxk1wYmp9_6#i*Y-RgwW-uLmM_>;YwN)C
zH?<hmnOAO#9OdA(n_eE(vs<3FlcigkhX=Kf+vRk|<>Cigw7t>M+UjUcn-gu>bbr(e
z9=$1JbZ4$@D#ZV#n@)}n647ka#nD|nO3kOEDqk2gh*urc#yCB>^_VvCV*}4SW}5m4
z_oy}(M^_#Tp0>z~r*B%9IvfArOzp@0j|Ha<_wZYg`B}dV^J=Fv>%oeQJ4vi8c6^`U
zW0~{)O}w{!@C*+#yeKAYs#r3?N1MZV&)tk$w)1zAUKC8e{46i$6OP?aH}Xv#)4R(2
zW4uLlOfX|M=Yw}>H1zBJI%AG~H!_l5tUn%id4Y&$q0D}rWu}@~vdvjvb}a0#?~Xg>
z@s2gIx%Y2%Xuz2FZxwQifsZzL|6Cyt82G?udpfFufArC0wSm9b&BE#&j3r)fRXE2v
zj@9i@&;E0qA*}9_dTu|*Su1xNdCyjl=4+*lSy}b~E8_x+Rw^?+crzX?pY`BQ?vT%V
z^3L89ESZ6Zebs{}$RnP-Js-3GeNX=XuXoaE;!lgmrb_z~9xMyJd7yYKgfd;_MQ`4g
zzb9{a^Wprg?AMI<KyG?7KBVs#5I$R@?VaSK*%^;dW5&3v$X}miiWklYF{YptJD8wd
zGO+wbXPK6}KSNeE<3aKJ)9=_m^1tK#ktu#K+Z!`7!zU($WjGF|SS-cNH$IdZbHYCg
zj#|rDQVF*|X=5TOmvsbuO-%SC*|RzC%qK}(bKXPjt(ME0^WOY%xw|<Z1n4)-`ID_C
znW$g0)8u0gMU5FPc<6vrg^HHk>{_cZU!iA+ouhwaLBvPF5Nme40DjXXpBm7jk7Ket
z)`Iu*p5%k9hj#r}`BUTUutr%7dO@S?A1iw`lsX@1*W0UXvq?TgNcGi$CRy8p_if1g
zsJz}YF;srsiVu32o!=;nt_C&DddiKhc|Y*tZ6qxxnW}fP4A<DC!H3U5$qpah*Ha%Z
zJrm=;)RWe2R1QfWnb8KEoh0|S;ggX#+bE=q+VbAbk{U1~KS)ec^!mz^ZF%U!Ol?~p
zgm$eT;fYAbKEit<Ibz{{GXD|Y9YP{TyO}P1e7W{W+*?qe_jD1sNp9`S6I(Wx$|O16
zmz%*1Qk0nRFXRqA3n3Y`>tD!gzI;%dNhX&nQZ0{|@b<E&A0OTZqTB^h?rqOpUCC8`
zI(izCOTj+&<7SXLyFKqFquZ%LjBUq<xIrg%5Q=-q`gXjd4(}lcw|76gs`ii{JOuTS
zt^D1^J>+<Q9*kyB`YV<u4hB!&@aNqDy4DC38K6Lq1~k+v)<JJK0<{QKwHo8f4CJA}
zwIdJ~J4s#-<YSRQ4k2<%2R;zb8$0mXNPg<Trz64Oy2<p8JOa<#I`Swa=Q^r39Xcru
zssVG{{F>fLl^p8CqfN)%GP;I(Xw^Q5_va~cR1gm(UDbstpAO=dZd&zAQ1r*0by;4P
zx-3&zO6K)IU&nq6EWY2xn32xfJHr^0DM38I^Qv+o@?MaV!l2HIp!s?tJM%8+2wK!m
ze$tr_Zc`d{fEg_%;<D~N`Yn)MgLy2UR6aYHFXO?-$-W}P89(94L`=BTX~}iohOyTr
z?qX}qrzgpuLwIzXxV${Z^7g~)uL-s!6-OIo|4`n&ZM1Pc9PqmRj60qSvm|YgIxiQ8
z^1kSQN2ns|<4_*$Jwxxgk5QVsDCQ=1;Zyi1S=fcgdg`80rbNJ>&fh7c`|&_DZ{3x5
z7W3!H=&rmSvctP_v)}vyM5^PgVc(c+W3Zb%*%chM%ky1%V1Q3IRiiB5lKJG;3`>dg
zd$8XaWBOG(fe&~(cjNuUym_)BLZMyMjdu|9hPpe|v+=T`n=1XX8#i~FyWQPsU6!+!
zIwn!Or5e?p_wbuL)m?>(;V;+3jGQDdML}iqyK~Qgxv#m)fugQ)og>}3IbhDajfzzd
z?x7iaDCL{o1HABhAhUb$?(x4ehsWC)S~g=hYM3b|oSE*xN8G>!X%)>zxG^a@0e8_!
z-Wi6kymPpho5CZ#crR%Q<L&%rt1##HoIR4j17z)3?kfw!Fn#WkWvB}#qFp=rT^JwC
zt7UMwa)4vQ`B;(GN0x>w>HXA?ck#2IXiSZ})1L;S)8Giqm(%2%5kQM+Dgxt64Og;;
ze<%K8vNXz+t~}C|v6lr~nf;CunXW7*U0Lkg-P+N*Cm-ZzU)rQQp=K&My(c#Z+Cv%_
z(R0*6=4mPE-cgqIgqxq_vvT*L3?1vNSKQjrIg-d)FD;R3OiN;Tpn=VK%B>w6BYDq&
zIjL^UzZdOK$vjdzBYAT%t46ly1)I#2(Y+M2X7|E;u*6T6j&QSch<HpNAh@xkKXh{G
zUYQczz{)3880nUe+X=7e&4&m4^-d!Ss+Dqu>OsIas<`NXD~8DYWJ(n8Ei#^v*-^?v
zD!DDc<!;hgRiVy<I{p129S@Cxl+2~^igL$~O(@S%f%QYmT{VyNfunsVnhy@hd}!0a
zc#%4ED}U!cV1Eu2w2yKbinKN3{){wW8zk2J@Q|O#cFOyMQK_l45vBY&IX0Si0LK;T
z^`o1h7P|VtUj)c+`|=>Mew^EBs9|pG<W>`vEm%WYUzypDw-x7R%KUzq<^L5!X-FUs
znb;V2WB);22kct=e=8QdJ2mNf|Jo)!@4wX~d)vE7_UBZ0w)Ftat*|lOy(*&jA8nF7
zu+XjA4|O+SkGGpNx4_-Xr>oCEJ}hAOLpyhi(Cr<M4CFoi%)hu%G*&0LfkeN!@FqnK
zJntm!gW#6TUo|Or2~RaO?`=}#YI<o9@8@TJ=&>7j2>tEklee9D-D$?yfh=dem6>DY
z1dR_2HIHbF%cXyMjEjYvw)crb`LYIintzm48t>i86=}VNviDHdA_g`Tx0A}knm5)m
zc#ICB>ryw9_3WJ{*=`S|htiJzHEu%cvKVV@444A^q&=3m5?xNq^jH;eZH(nzMAw7v
ztg2E?Rl03y1ZyXInR!dmJ;x23ZpNY@%v;_!L-}vYQnLzb&Y5|Xh*+vav)#}kaeQoG
zud_rIv^KB$3d^pEhxdGmF-wVWnS42p_x0;H(@k|_iZOWv%9ioGTdyePp;WuwSW=9@
zj5U+mKT<_*;oe$iYTRyiJfG8U&_UHDx{B<gH%ZEUWSP7e&%68e>-A^dsb;atJyA~$
z&Dxg9^hEC8oEo`Z3ux=ttJg!a8ddJ^CW%OFOjheeZfiG4O)<a2--7V>_6u*qg@iP=
zCiclm@)(+h_Irgo&wRYY@}yj!+8f6h19nqPJoCBJ57RdPX{HReDE~`@wTt+ZUVLWA
ze2bDg;yPN3xXrJp_G{figpH@2|Ea@buzI`ma@|67w%Y4>H5{sykAG+=53SQ>N3&CS
zPcbh<E=%Iw18UY1jcz~P*hPIjj0ee2l6W8LbtLa1yAS66ct%K0OMo{CRHB1a)z1g>
zPJn~XQ0X^>2jDqsh>CrqMxg35LsaV>I!M*}MX%L5S=CaYdCA;QM*`%@ss&tSXgePB
za6TjHxMv<XtU)|h?iius3CabSpKuSz?YZ32-#C=_Xlqf$Zc!%XHoGh<hpHuk-cNE9
zm+f|FYW%~7DSBoPQ{<}gzp8^Ueqsqm5F#UoD{%qTK|VH|M*<F~8(_3KE7r@h;oQG9
z(MLb`AU+<BV6fXmm**zCk;4s=Nmkx1pj#F-BUz!2n(|!>Iq9(S6*|8=$aW(XnP58U
z%R`qgf?K*LN{UcBLrbvF6<pH@Ws?vU-Zn@EjN~DHp-JvKiuEp+3zpEBp$#46zLBa+
zu*3xllzui{18fbTH9BZVBhW88sP(9ZTJuJ!hK@#{&vnpGjX*<3t6H;1tA^V~tFgM0
z=3|tA636f%?Rt3=?KLoJGWNR1v2Bw3Pi*3hQ6hhRjB1B~F9^#*RaNJ%?wZ^JQmhy;
zmJjf2)x-z6%gLa4f_!tV(n5Fi+?OZHE-8vWRl!{Td<tL1oBfInwNJl|u`n(z<FQnT
zAJ2PtOQ{*kOj+UMeQnNjbJd#9N*izI%82}|@KC_dN6Y;2Sj?DY*?1n<{k5A}9z!x}
znyG4)SzhCP9S3R2=&XpsYAq`~);Fo-wMtn#9$O4~GWt>8rPo|Sw(j4I7uPU8m^tfg
z&eu{JTAttBsHG;eAH_lrojuCiiIcUm@=@M7pen0btgD}o>KbaFJo(}T9@Qo<3NG&7
z;m+!NYn|0eB_}haWda&aS+|sNE5EG5h0OF08SDP4@_S{*1U?P>W}i*qHW9c*22bRn
ztpb%7%yT%MRu(u<rcC6+#^?Bh8_7hy`)6|=PtDv>o1&Fs6V1*%%=L@|Hrlc3T85Q>
zwT0?A)?CZToZErc6wOiA2WzKhj%)W&esO@To`~4)tBKMyi3jyP_JjFqPO#&hpEKO}
zY|dk!=ykseP`G}$*9h0K6LQKVJ}5Pds!%ado}rYQ167!-TMwX_N-%{QWFkMpMM449
zcQi%YOLd>Eh6ITp>m+L@aT~9aag%xXi1%3L*Znf?<v1_jJL9Z1UuFh7V{B(=u7%Q?
z!MPYHQjr@i*G=YQ2Ira_Z~u(Zez~0Bj(2}<G=hKlHSOvj9+{amP4Q(^x3h!!Yq>dg
z*>MUKE?>q?;awcBXsImS{8mndm49)IY7vHpfgWA22D<th@f!m@nx*&t#k*9uY41l<
zoA!QmT-0ug4A{xv!DHO{%$1=^kl@PEZjN`nj-$X+TkX7?xhmAxG2}B6daoC!@*&15
z%&T%Zo(AM-cvSA*hNA$Y!h9K_TUyQnz?GW^+};RYNKN0I3ZL+ve195`98u%={@z2C
zpo%u<k<Y73n2E?TU(L1ZLp^dvm+9xa2WgOL2h`u2Imhd`w9MxIGJ7I7%Dibj!HqxQ
zPw;yHzfV*Ahi~clFT@ZHjdTY14}bnU{8Og$X(Bg89-q!5+I^<a7<+HHMNcgP<n8Hv
zp<^fP6nd1oy-UWuE6zHSWagVa6`vH>$*SJUT~NoFPhE&}sm=L{j%?43hb#eXp(07?
z*{83l=O%jg$_NE(#749kK(OQn+xhe<0)U?iaf3>|(vsl%*gqYoo*Q@zlYaR}Icfn`
z+v%UePo<X$qpTZbXce2AM@?LG=UDkCKm1A49D=EFX1mSp<tJq648CnZp?mml6gKCf
z(+Y)h9-naa+=P-t+hzJpK1pOS=`$0OzC05v{0#ZqOulSH=^xR(w7vn|$DjNW-AhVq
zn^O1ERO$jp4zqZdq_PImUh+`woA|DS%06|*eXO|MNNK>hgP+KXGa^zhn9Uy<QSnFm
z4(gIt!~IA(w%@g%Nqsh@@8F0=^i?&`ci@*l(s$sBg6a6Xsplr_Ja9&*FT>7X68mf9
z<y78o%znivXvyWKj(Y!V4am+v_#?9YMFeX~?EW>>L9{%X%Dc<@H0~vTNabx}_xn**
zbWz*1i+ws;Meq3}s?(Go`@WOWX*_o1D!m(6PQ&>3HIntYKausmKaur5x2)56+mWl3
zHy}^b2x&`2gd*tNxIYrK_eX*?9rNC=Tmn)^ga0V?y^SdS;7=&s`zMs{byGSA)9I>c
z=|7K0h!0|9@;p95J~5XE3|?hvAbXEK6E)G*J@Xoda`xaKhq7m=E~*7{dC=fhDGkVW
z*Qm-(knR4w5wd_kBHMjJM>b^^G1mS^9_&_{ty@mz&ObpAPq3zp-5sto*7O+0zUwQc
zt+Bh5*_f}c%4n)eyYwL{$-S?n)JT=!op-I370+<Zr0rUjXLH^zl+j;^0IyxE3X#c>
zKFzrArs$C#vgPCaFMbCQRP`cy6isQXE+XGa=0DC8nw3<W)3#Qdb2rz@i;rUq<I+)i
z|8YJ(;*uI4=DpQ=q;zRCwMAad`&!!SFe|?lLogXVOoYkOMSO$!b+n9LjJ=Ncx0l-&
z^Z$sptE01$A9Z`!0xSP!G#!Wb<{9N1m+&u}iBo=?vL|#h@YkN&R5~HQ1)&3K%+VjO
zJr*}HQpl7n{y*Z?p_@{s1Q_^<gPRsl+3c=$(#p@hwyDL`oAR=QhkCB@H|MUd!+Cdm
z?oqE@FQ_^eH$8?Mc;)DFdoKSc7w@ev4_=M<aiX<BHP-B<E}JrbO@V?b#=oSiNfV#5
zW+|07mF$|CB#gNKucPzW|JS2)^iKac^N_pNa;tcWm)~5=zYsiEzP%3H$hq?RIz(f+
z<zDNN@GoVL4LEN8T8`a-UC^&RWXc8}Cd)Qp;`yTd{S8=(_<g$G4uqLmDzK}72kCEf
zej$I}$fL%6p=6xCk~wjFTuhOg<C52L6o*ig33EIXqE<0)9Hdlf4rTz{Tfs9u6OhMR
z_VYU`ze43rHs=NTWIm1oKbPhC{8FdS-lfv~EViIJho#e*66LkDHFhgMS$?d5FY)3Z
z$Sy@7d~1Q6QN-sPv#q>LzF&krph{&q5JWT`cIc*9^h&v9EB}w7jeb;3(WI8U2BF@|
zGO>hrY3V+}UQ=r2hsu|f@Ct*e8vWH-`GN95yZ8#>R~V)awFTRkG3R7xK}2C>-GV~-
z{vPnMu>ATS?1^=HZK@)3&Lepl4mx~b9Vws5j4xxMBs=fpS{OpdJxQt-{zHwfacMYU
znd2f03l1&!8H<(gmX3XV_QYpQs2<?14l66BXZm63xNrW#Y!)-JFf23k?5Dd+n80Sk
zzO3Mhk@3NtO&*!tyCAGEa`K4x5{TZc@JH!PXJ3q|u)N=Xenjv>dF>#yqELFh#LtN(
zR(ati?l6_=gWe&hAL0&Cs67lv5E~uholRwgB*#=JJHO0dHp14n%a32?GmIDMDe4uT
zVXU?CVtMElKHcM4P+u&YALj3OdsegZZAz#ZM1RMdH!_e$(m+%MoAzul%FBN{%&&8P
zSY9dvQxBIr%lIB)O3^8LQ64(RzvQpTRmZX6=vXd~ALpNTDvYx^f4HR>5(>J)3*%zK
zJ^sDCix!6HPVPPd1urZ=M+pY{^Q-)N0JXT*l3L(e%FC2$Y0u_a`3v&ra;(B%lATXt
z#Z)L4ox}$FOUm0}r9>Vs-&NUe<ppy8N&cufh)viu-ckC$#v}X+<EkAjzaWvd&{li=
zJ7YDGa8OQujqeU9v^bu#T9!w!;G_~UH>Wep!<N#%Ri_K(Bd7Ruu^c<Ir+B+Ig%-M&
zu`>*(sUsObI<!#AQ@B!7D964I$_nL**LjMu%*r>&k6*{BSw_qMt=aH5_)qN$2je(?
zU-sU@IAsQEiSxIea@1)o9}3H#KMmOj7LI~#<<YoYW4mnS&woYFn`-Ap%esH^m%Q`H
z?qCPc$wP1AR1x}8!8`ly8cMa|-eUV`<(0XxLq^?Wh0<KXpB04}vhY>jNnWYoo%{+j
zjz%y+CXf@aYi-R)4EqeW1`6enGyF-9Jbx?CD}VhAKg0vJsaQ{IFd%>3c(zH$+uYvL
zYUR(oM*V6b47;<pacd`knrI=z-r?N`EZI&aIkV6URG}ukFq^2;-Yc9E^&GhB%|ucO
ztDflfUc$s?$-Rj;rF#qIs(1L)eU|j0rUatq*c01VeZ4SaXSc#U)zpiQw;>SZ2{p7#
z_IwvxM1^wpyL@t=zdZH-+WI=0p>^VWd=rw--cx4y+k3o6U||LIP`9?QQl$qAt5kZn
z@Zu(Ws&5LM#lGq}g;iQ<Fe9nDW-QF0i`OV3^zw`Da=@P;I3bA%FT6}%1N^T7|I+V_
zz#N_JP0Pw9SXQ2VpSKFoyQi9oSJ}R}T=cfOu*&Q#EWh+V?mLLb-<4r!v6a4184zLC
z;Gea$yaiUCBj=pu$-eGc9qYXZMT7;d<?Cnpq6GaEKGXhFBuy7L-bA2$nu&Wzt$e<6
zax~#)&g+oj*nK0z$`|UBtXdl4lymL}*y%2m&ws$fyz??k$3$BBW4GiRAMh93KBgv@
zOh<=|>XppL%IBf>Ic(4s%4g3(A?J;jKIeH*=)7J;v19HxjXIfMLohUhubS6Vrkv-2
zV(u-unCj2{<WK6achyHXbC1fG&-26RX8MO@aF=5&x*?H&Gozk)a9)17{Ua`TK-vgu
zN4Anw;>@hBd#I&y#mDd@b7#t`kFoDtD1Z7Ge%Jn^Os~R3i~&@s`DK3<LKb8XeZn^)
zF@LHw=i^WL4&;`6#yblfYUh8(S0dZ`0)HCGvlnn3sZidyfX(_@pG*JGaT>Z_j{TfJ
z3FzCO^D0vz1Xpe4%gVQX0mBCLw=cQf2vh&7oPJSxoM$icZ60eOpQW<LSNv)9m@apJ
z#q&)E^v3Ds=C667FrC!1Pn3W2Eq~T1RxZ>-+Po|LKRio5eU&@-O8MJWbe<^}UE>l!
z!}q*Pe2NG0B`1;D;bGJ1nSKszIB2<fRa)9w@cFTE1Vi`%FI=BYn>7yX64{(ta?baP
z9Y24MebGYs^bh=JB#Zuszb!_cmeJSw2K4skb>7}D^9Mqay@QQ{lMc>U-Tix;bGf{6
zonI2Rkn;1@{24y=X<dt+rf5g7m3t1U-2~JtptdXbBA*Rc_qPriE3dr{{T#87;Iv7o
z9PFHL2sV*m6a*594#23NL;vR2_)~J@4ahP>9=XAT`2tyW19xd=$>ultbnmrc7-^{$
z*(Epm>)?OSANiosPfsOeAh=A+_QBYfsSc}mK#%s29<i<{JD`<{1vcl?O1F`RU!eT5
zcxp?*4~VO<IiHe8e&h!_US6?+1=DU#K@Ky;ZZ4k^yK8M7c4tCt&UE?Yf1n2G^5g$N
zSkvX$pZEmRNwbB_bDBK#6Tio&%Kf!`zZkr|JmnVug7d|)$IqBr7t66f^EW-7gQzCS
zM{e`69?wP7<NVuvlo3psD9dm2uoiil6%!)0+_e^h+_;TvW@{~4+H-cwM*YGM`7O#J
zn!!8{nxheRf_Z<DKm7vjj{i>j{0f73qP)ki@Rneo?Kkv1Uq1O8kDM_DXew}GrDhMp
zq41<VchUSUc7gf$?<gPJk$J_2K37f8?%%o+##eTE9yE?u^NORa)`FPzCY5Vxn`;4=
z_kM%YE|yE`c>8XP2dEN+mJaM<ks8>Xi&ex+E{mwPITy-9b$lCcO%A`qD|xN-xyu7v
zrYuzr?Iel?a?o8Iz{VhOy$dJxm~<f9?Rl_ltQtUdmRpGPyQx+XAfcz0@83mmvOqp^
z59T>nCf?&4{pQZ3O0XVvA4^Mn9=>>tympUIZ#U=_)xH$_f!V;B>BN8r6_ro84^Hwl
zx#$7tOqE{saP6sbY(4MjQ5Jjk`AV5y&->E7nsrXh4sX=+kGM@f?}S$wxy2yHdOQzb
zIdaQnk!;L{#&6jn`ib(3TP}zfMc*7*Hs635<qO)V<RVD)9jf1Yt>j{s=!5A)h-aYY
zM}+8%K0g-XO|jlz<{Ly{_hGjbwRQ&eoppkqGgp!=8q1&(3upvZ9^FY+8N@KCXM3Y~
z6neSHD2DJE@`zEi51*~1let`N^jd7r8EQ_%v;ZWAn=ZWqe75`v)kW_gq{&144Y(X0
zqJ7}3d8+$TW}&V!SGcF4-tn@`L)426ILh!8|L~lmtWZ{Y3f$W85`Fm;dBjT`;e+LD
zlW6a;9&#KkSC~YyV~Uk0eMLwy6{;XhOIu$G*t-OCB*Tq$IR_s@rak==f{~e%d$T#G
zT%kPLr6_pX`ip3%rXGry9fr5bH(@B#i&S|wvyiEy-9f#bbB~>QlMb&>M?*Q>TMX$|
zc%PyegqR$Qm;09O%tCcl``mSxwX_YIm0RQyZ?Ub-G^MWaCR23JGZ}Z1MF+>Up;Q~-
zV6X_iPoAjqJD7hXhh)(yn-<`z>+h-??y9Rbs+*#Ze(H~|x|-hIqz9CDIWK6#WR;JR
zzcdpE+dO)j3f(cH&H1Q2(p)(BqcW<6czx&uMY+CYH7sz++-`GDx}#c^GP{y4bVLs_
zy6cSBeU3?Y*ptemT8ieJkCSFxo4}>Z*{wuRB+s`J9gX=`ZkC5yi9r)5D%r05;q?rM
z@$HP2Zyy8yC+f0=b6C*@Ttat%9aUXtGrMlZ<Ihmuy*i|4^JNm%2Iz}f4r(n{n`)6e
zX~n_x+pR?pK0)4SEi%cI#>z!L;!6>FP$st#^?bA((iY{T<f67>k@tGSfmVa$rM6;q
z|0+BwgMe$uY}89F;GHNBxH{0&d*A3!E#)J^EKX|j!Xx6dK2?}<J+SCC7KE@oTm5fJ
z+WLCBqtd%ZJ5S9~K0sdd6+M&EF>H0FM(bsCQc9iCk77mh)s6X$$_2`^e^*{6ll{ar
z&-`F3?|+BF2>1tI(Lz@GiSF1G{K-#5dmwD-zr0ad3vX^}uH|mTVlf}yslS}w4w5U9
zj&@>le32>Y5Y3lj#@a57EsbEI*t77bSU6_n*5I`fj7<#px?6;lV6<w;d#}hxyT*9T
z$Rhbjd$CP~EtX~N#V)>8KI$)`#HL`m+F!gLH-$)#N!wJLfQBkkf1!xoSy*Hui%$q;
z`(pcS4SsGMV~>w#d@E86*Xn|ouLuw}6W?0?eu&8Pz!7Uo5AnEY(MP_~L;P1Xht~-c
z<6CM|sf)y1#L>lDW$SRUzgsi6R4r80_^0LOTfqRk6|Wh56D}TYxit*ho?VT59X976
zX^s$My^HA5_P({@MRHSwnB(^_8$=6xim_r$MY4HM(SaA0_vk5BaN#vV?uit%V7VVD
z9`o+Ikh-)v`^ZJTL?W)TAL=Fgb?T!`7|^GvR9R;h3wGDM*GoK!b@GzlqM~J<m3L4m
z)FQ6pOQCK0cAU4&iV}Tzlspn81|hi~B~oZlA+X#WEj~s7eMMhshxHY$+VovRcoEEL
za7AG@XOtY?R~+Mg%J20RUOXWBH7ZVef%z-jq={PDX0+_kUrYz`r~8ZDIQ8i;Kt!}-
z^?Ru{5UDdc-T(BK(+7z8-Fx406)DGTb4Geo9@+~xrMo99tM?!+43j<s#Z&`(kRull
z6eT=DHXkIScx1VGkVxPLc5i8UrY2SxOqE(%L5h{Pl1?+qyUD0H%!57T*f?>_ud5O@
z4T}t<P7STQY#%Q+8=>wk<dJyM!J`0H(W3n0cz8Srd2FKic|h0YL{_!Ki8+$yl9073
zzr&dgSf1`-yDHm7KHF7CK5Y@R+jRLsRn6*Op@W0vb&FWhtBazfI;+1$%QgXHur4n<
z>uYlcjix4gxHEuylN*!3&aJZFVDWmpTk%v1`b~;Ow2ou7HPSdlya-L-HUzd49#BAa
z64Rj4*^HZ4Y>igxvQpnMLs(n3X&Wh6fc$x=SnLhAXN;j1(&A}|E-xG=UNy7{e1ag=
zPf<TK=Js;-NYSB9V3Go_XaGMy5<a`s%ADngMv9Gsw=Fl17T@!sRq7ZVN0_c9^f)WK
zr$$+m2>R^<*z$0%u6OWkb3UR1JXb8TOe-A#bs+!!{aT7eI+Q!cV)lnfqsECjL9Ndc
z1+>nqTiM@&S8Ncxm|P96!luWGcA(+?aj=JwHaUt~)YIAAN->6DTG|U1EBj4Oe^l5!
zUhuK9U*(}kMOU~z_Ul<W<5AIHnkI<0yrt|g0hZdje9#0qsWvTZTnH<4t~8U^CV}H8
z3#IR5F$OZ4GZ}ibRbHDch9l`YMQlUz{uIn^TjkGF5J_z<A2by<kL<B&Vh)n_)5Uxw
zj_G1}z*cOX>6>=c4gJVp=8W7bFQFK<ddyIjH_m`kZ<R;%<YNHEg>F)tDgFZJ{+Z%g
zBvG?OITGLvcyYEE7PK|a>~z+;gn_+-J6i}p812w@ZLW}WXN!@2wrb?M^4D&)sPy30
zI7;izZncidX2Gcb@E^f*!a>(;(Jy2x_5__y$8M|pAZck~4y#Ps&L+6Y?`Ic_K+Fz1
z=8UcKZM$&jjp`dWD$^UK=o_HmWvXiQajI(cbE>=1{l<;*f7jEdG}XwNrW$pb<8D;f
zxKZ8j8ofP7ECTb1T1;4)W34}4q+pRW$h8>c@VUY!wx-AwZ`>n3FjoxbKgb(%F^}(?
zD8uF{xj#LR1XF%#9vrs#00$oP5%-F7TV&w^F%3ihd4Zy*{X)`&@*xZ1M#Wj|6+W)a
z_S)m(9;w8o#bP#!6Q2+c(P?Yk%04M6iD|In6`-lWikCRJm1tZ$a%=fFOGH0v(t4>_
zg=EuGrDAU`h1$bY{8i+)sj@k5Det3Iw62AW>*R&MijhFy`ANO$qsv4W@#a%9W0^=3
zZ+s%ZT_z@pH<ru(Pl*jc^7d1p;`N0x`EO#Hc)ewL>EA?<QM|gnyyEX-pb*DT$hu7N
z7XMzpo+Wz3ygI@T<;a<V=`9#)D=^i;Z)o;lR*=A2m`@j{7tCU&cuO`buokD&C<-Eq
zm)YunkR4Wv4kL;)h}m~W6lVjZoDo&2d%QR=&dyBsIXKa%|Go`%L7Rxxd-eKt3ybrk
z_EO}*zSlPui=|_wxa8OpY-Q&Znz%ID&@0Z+H->1P7R+q**OYg2mE|>*!PC`W8>hO_
z+vU5;eB-h~#%dztS|2K>9X1$`5Aw=;nJZvSA*__()$%)s7#Fa`YGofRq{^`BXiBxT
zEpTfe$l=*ythhQ+53kCyMbPNq6L_^H)&Fw>uiR=>_9p~hksWfx^q}HpiEpueb55I-
zBguTDXGZ3>E*a*36{njAZ^@9GbD+4D@>-6N;^<MCnJccF4$$=*D|=rqS|wJsDlT<g
z4vKW~`+zK+i1nDyYPi>8*<-bM8_A8;n3%qn8`r?;70cGoi06@PdqxcLC=9c*x8=2G
z5Nj064$ne4i{<cV#RS}xDt;DGS8=IQlfjUAM6ta0tQa!2xRfrt(AG)aW5ov$DEYW&
z4qN@#O7xk3R}0MxnEljx+sY0tSFC_+XhyfMwgjsMM*TNS6?~Uc6)E#n|8M6BGyg(5
z^Te~_rFrFfYef(j2Zxp)cutJxD7g1L7Tk6#`==bTPBmDv4k1Lb+_6q{X!V(*;2|?o
zo)^Ad+&R#S2?nQ36%g^>F#lx6LS1FjiN>P%fV4aZ?nSQ`o<KNgz3A7n_&_4WLrozP
z`Sg0x+3!;ocgER`P?$RlQPj*<|EWBLqCovV7xB!sX!D_S5L^A{-gI2vU;1wly@|ye
zuv#gWOEzF?DVCpY5YLM}A4>a1(N64vp>M>IWwGp%4?Yyj+4*X88}qTduzR6=Cm+E-
zM4B%yKu8q@Vp3>vDH$O+>zVm>zl_XF{W2h|11_oLSlP}KGVWhkJfyq;hp=^u%zHsZ
z%zRlnf*9<7YiD>B?K1|i;*7SAGZzN>T3MMAnYP1um+H`MXvf=L{WI6%0%iSG6<yFR
zHY+PhB@v?Yf{eLX=mCb&%GR4ij11c>7EQ&b_|^(5d-V!cv$F9Dt(85atdU@egPE~+
zJY&7KGf#8w)&=Hir>2;(){4E1Jl=z+<8_A<-DABEJViR5cgD$^n?;vSu@ESG;Vz-h
z%Aq3KIw$2q7hFbe5fMS-yAeEU6;^-PNyD!50m_4{13>33mu(Sgj&UmZ)py#QQ>dJN
z=2E)lwiTm1v4-;S51Ev@f3)01c{bHU9mNUMdDx!nX}MdmB}^<hkwkebOZkdY?BFh-
zRQ;s4H*X$^s#x!;s!EGdMYFP}m9~MwKI%T#N@fJpbL6@gMOVk&E6$VmxU+&3?p}zq
z@?Mg&D)TGoz^R@Y_fnk~DYl~x9L?@|@*ZNmyE)F%%;GK?nZKDc?(TFRxO>J~mgPT0
z9aXrknl?o1LhdCMgcwr@@0}2%hM&b&f4&zHt8Xc^hR8i<o+R#D*>)A9P@(xUadum<
zl^rjjyjIH9shh4V+m$=l&KRv24#hP3UUvOkC#WtYRF5nEc<GQWu(C7oby5U5K2R>g
zR)6*^)v?uopjd-5b(XZ<dHYXrjcbex(k>;*17{(@HG4E9vQ2{nEw(xD4W)x;f;ax5
zj;EGeQj0p<Y+ao9LbPnplWNDJ{+t@97GkU*^RC8)z8r81m()amM^=7L@EC+&YeS5q
z*K*^iyemdq-WlUaLY=qMI3h0x!%o{ar67qz@&554!L?MQ)yg`mA!S7l-j|(f9GN+1
zWJbmuS_AA3pgK{7j9IoD_8@g)uc{-#K-wMPDg_=DIzZ_h(dIL}jNWWq`8_sb=&*=w
z4X4U6oTV#|WO~at_KZLrj@zNx*vQ9Xut?(;E8A8;_4GFS_Z@n7fuJ)Wix-TUa4yE0
zh*Q&IEX<=I$>58PGh<STw;icxQc1ISVy_tRb%R-~87laq!rZJxYYGazleUZF=(t%y
zh{29djYOEP2-}pYxDo3JJ!a?#MO;pZ!MEpH=8?4Bvqk)1r!!{c!IQG0M6`2w++>Vz
z#xH|0p&`8py8W|v0)GX#nZwfcou#{N$dN_ufRYr8&4_Z0HDRZw>HT>1clC3?>}1BC
zI~YFP;8ndgM3e!JtFy*ER38U+MzizOlo~7AJx2rfS{LPb4lW5?PAW0^W}h+4b%dYG
za9FW@`96FOjz8!`O&{PqW$V2S;35b~D&Tua3zJG(jUp{ant}8I(g{fKCzZ53fb<^H
zJfwG#E<kz*sTFA*(vwJkbKs#crVDFL+*uyZf-T!yyn%v?fE$s1iL?^w7f4Hqix?3O
zd%dEoQ~67_`lZVJlJf7@xylUS@G`1nDOM@Bl-&QeLEAr8Ygn7}ex-}U4r2q0>yFaM
z;G#;+XN)N%UUf?-)c}RwI@AuiP)G)LLie0bY@DrDNL(VavbdvE$Ax1CaL{7k$AtrK
zZ!33|FDK%$Z(XV7I1DgcayWle?i!s({;nacrbsyoy>mk)^v?kO^L35Dvta<g-O@XM
zaGCTI`&1J$=S@-vZ>V!XOWTfqj&vd-9&*xA;!&-$GQArWfPgoCZ&6lO7(->~*n=#C
zI>)mz0;Imk&jm}Xqjo5-w3+I{<8XMT%gW<8e^n#4)h{_iW$;p?9uBgBJ%!5d^-<!2
zP6O+}fx?FzK)~If$}pllE!99}uMkpKwCt~!8ED$hvofhVY-*LFBUuaFCpgU=WvIA}
zh_JHdN(6*V5tUXPW@WG3Qpk5W>!C<5XYXXIDUZ<!Ew|W;(QTb@z%wCZ|9hbs`<@BS
z*gFinp1-WuIr^8+sjkg=*B-mmPz7_I>pp1I{ZiXs?98D%YI@Ze?5f0QQmK(X8eUA#
zuCgkW4Rx1UN<1#W;c-F)5eO2Am9<gjWb0;sr*nlr-r#|c!0tu{Mhts5o~M!b)^K13
zF=EqnRFdO`d%ph*byKOcwIPNoG=kO}F1Te*ol@sk=A%Z~vygG>1fJ8<c$8Mw)~_iJ
zao?>kZsO+xiE`C7A%--tYBS{LT=~v1aykdBZ1Vs@fJUq+gztyqBsVrqbymw>RA#5^
z4ZGdoX}P9*+9P4Qr{&<u{V@DY_*LS!!0EhuARFdOeQ0ULY{Ih;<uefF8i;cBFo7sv
z=_D-awwqwkf{pL`)yTt|{;JBY?1>*04tGQYm9nxe%4jgA6!T@MfdhKrcF9R4_gzZt
zR@5ym2?3B}L*9TF8SYhp5%5h0D;TjFj8Gi_o=0$((fFg2z0^)um-@N}{PlDuM(zEn
zJrUpll7m#4xT$w?=OpD7b<R6418#7Omh?y0sa9%)DDxz}BAqG-J2i#GO?s5{f?;)R
zj$wfk`<mUP7OqLxM-2!B1g~7R8^*QFp#Uy1b%kCn0EKEXMP{t)m`940ZF-l8imk)^
z@6xls|3;xhtC<9kDu;(f=P&@w(4-b>_IKlfm)*36>NUchLdtGsj!jQc0c2_XqYiC;
zXmwC@-=-|yJe1n$go~5eskB50YNO-2R|>*CEG54#YnWpyVb;{ouM{CPBaV;-TOCY3
zpaOa&gJQk>RKr|L@%>tO&hH=k73HRjG5_$g-}@CSJE%B--3nvPh*Q&S&N}@7(H?Dr
zFUo)~+Jb!-Z{7DiK92f=FZ!19RyO>MLkHAVHld2ig#>RzlpRF*gDCyZtxnKID|21T
zryJGEvo2do?dYdF%RF%9z-h|Y%w}+cza1wo(&!;xe>1AVTndyHlj68#N3wBO)Xlj-
zxq3GYjjd>Rf)LZZp(~y9z@IB!%k5N;v|d-bHi~1q=p4+gbPuW0l}=QlgNf8I_GBZa
zJ3&g<ToD{~LRUJ3-lH^f<L|;hWxF-KWjM7Z(_8t$v5Xj~3O*zOhsiqPD=3PKRKDI3
zfdg6;U;?W{urmX95o(K?(Wso&RKexu!Ri;3=hbcc{xbLEg;2Cntm-s^cu(S<rR1&!
z;#v)kxvd}=>;|{<a|kbS4CUWC6iaj1YLW*={1g@Hojf3C^w3$L;aVz#rKrf9p6Tam
zpY9UV0D`%QyhvpYv2gwfDnq9gl)8Qn_r?|Gjb=pz?777~Z`3ozR+j_O?X~&mRELo2
zvTVJD^13XWijoM@MalM9*~ax$&+R+VS1-!P3~)H>DZV5T=#$lhJ&il129US%1LSsH
zorX|jSEtb~r{&fkD|HHS`k>PQst1!S!*fe|ZXm$>70PEi;I&X8-^w=pNC3!Pmst*5
z29aoJs9dei(%+0=DS{k>26Mw?vf+;2=2vxpg`V9%*gdW2>#S_=UcJtLA^QzVgbu&A
z(dUB+$S=20p`$&P_kYmfW=~MrpJ*^FfJIUn{p9!iM1;e1nx1<~x9ILJZp=k1^L{|(
zM7YkuCsh7-Vsk61<`P@2m90NP?Hagdnn?MWLBErlqvWnn;|_JPd8^T)(-c>yD(~vF
z|L^7+TF8;u5HPJzqE1NP;I1zq--q%IM0kDTE+>^ioigP`mxp)m8Z&rn7!_h!Z9zEb
zk@=D}0-}&M=Zz;Q2I<`ydZX4VcNgd`d9F)5wb53#?ku&13TW9od6~jvkM;$w6yVqh
z9N{Q?!v%jt%iVqv@O;1>ZBT#<An4d0-4+EWQBYuW{`(H#>s;_QfR_UP0^nBw*Wcf;
zNBaPt2lyty&jLQfRo@>S`vd+w;70*ZcEQ`Del6hZ051YOGW(2!zX6I*x+=6oLn2^3
zDlA8Z7AVuND%qp`P)40?K-o-0OtpH1SDWW*YXI^vlmqd<<56Cv;5)HS$=#lg!FdDT
z4dt6rrsF)r4md)vCPf8exe<khs6^oy7SQUSA-jbPJjXlB<u3`p@ekT)sR9=H`~bqO
zubqwlbhAMZpg5H&XR9_1Q?c1lbC;GjtSFH-5j;ClJLH>TUA4R*M7$v{za-kv#A?}4
zisJ96Sj#~KqJn~E+bOTxuZs6A^u0%Y3Z$+)l_O|WUzwe&KGowINRSf_i5?ymsCHat
z9}-cHmkBHVn(jP3=kXApw$o%~rAocDGlC{~rg}vMTm6xEs)r@ClNN_q1O#K9hV{CU
z4F1ElT%6ClBF^QV5g$;!yq)4~UJh`il}_1og|>AZrK70;oUDX(7tnJ~h&ZlWE~i}z
za#caJ3e`|(b5?&ybr4bXr%u7DN<C)s9ZK+qc)PUpkMZ`7D^$nI{L};iqg!qno6FM`
z&uEHLvG7_&5D@8Wv9!|5e}YIMpgQVO3+trvw)$5?<o%aL=O^CCoHODJih6AICzPjY
zylsYYD!-37PicoPB92Y(6U&J{3f~AVw(BlZ9#<5rtZYY1de&{-uG(vM7<h=NmG%wT
ztM-}9y&Y<v6~}dj$x}UNr;3xhs}lY3T%q?SAW|2{lybHGim?CRxmWTO)j_*nloI!n
za_bA}8RD$K9_z&Ml%e0`_dOF<y!T${ig%w0UGdJaP*lJWN|d3%p60siQHnCmE+ql<
ztPgLt>VSr(+2yPa_^1oLzTDr+49cN4sJIuWM*8R;80lF{+X1E8{+fCw-b9BRIxcW4
zKO!dGl~>?g!(}|?OZqmqm5C2ktA_^Xxt{VXE@4*RO)lNJPQSZAOH-~W>4{6A`WE^9
zbi^aR(tbp=cPKW2$dkGlJk_XOD6|Ie&weEI*iJL(0mJ={Q1*vpfgGI+t{`8ZiJn(n
z%1;$<AX<GmSHpOYV>O&b`0`U7q5_lh!$JaL?S6$)z$+;Q%fqa!_zCrF$EL0G!D1I2
zb&Dsu;MnkeFu?^!^ir%$T^G^JajrT})QM*LKb~!X_~my4MRQ5ls>(CUM4%8k2j%8}
zh*w2kz8rN-bnm-b>6*?E-h#FObtB4AJjE?(=oL?H1P_;cj)@47{e-MK287Stk~fcu
zVG-HhiUt>hwk5IUI>Vn)UWAyc=T}~lGmeXA0<#qJbiHMn(1{s(zgb+~KMwp3KN)sH
zjA^^_U4<8RvF!|7j$@J&GVg@2Y)ZEo<+^{0K+kXCs<J~G?yLI5rLn`xCC;HD#|d?D
z)uf<+y!fW*8~be~zH*RZ{*DgxJpMzKNuqW78}6xS6r(z=fN)Sw69^sS*y{JUk&EBN
zu}!qD0NKhd>l)9dV6k?1XZW|@%9r01lbW5f>vbFjvPA{><akPkRftgG7$-+nh{Ix1
zfxKTK#)y4f22U1|7>|d{IwN|u%L<{s)ue?ZF&9%>()rt@h^rN5&{TjFD}}@62h7KO
zI?f0AcPQ_oe<|{n(()E=?Pm6p_P0c!PedhckKo`qKW60e1$Rcs|6Ib|rpp8Iru@mb
z#9Ki@7ZM5Iw5t`4$1QdAvJ6~#G2zS^8B`?;-xjmOHFKi!{+`+vW}+LfR<=UPRv*8}
z!_oNR?Ca<{_#KS%?;~XLJECvzpz~S=GZjt2R~RkKh}6T%{;qUulg3)PZs&WVPFujC
zTknXGt*%zav-9U&_}-EC2_NBo7kaTgNsf9~42)Plg4l$8io=^KyH?ri_o=+Ce(z3#
z!^8Viiu@J%^1I@2?A7zJyLM`@j|zg5ta8GG&KGpW@uu^Bv3vN~H$S|}d9^ZT8f!uI
z%%M9qx%oX2E1rHJtKP%i=b-a4`h5}F_Ub$C@g}CB&5EFla_;-$#RPXh_k*c@V|<BN
z%$s9QE$Hm@WR8E|#l}y4hKt4LUG!8*tx|Lse}mX6#kByCd-q#HlkgTh9Q(!9^XAKl
zU@;6i<1APLQnJrN%1BGkiiFspDlABOk=LmONEyg8;&~ySXStpqr)?eeY(2FIT^kGM
zpL(Jw;?!d4|AB~Tdul;Jk0AFO`vus>i6PVJs!S()4)h@V1M2OfEJccs0y#bqokh?E
zd0Bxkyn0SF!&UJr+2TCL0HXSz7yk-^N<C+#6>@*qf;f_5F3k=#4!c?*qdye0T6O()
zXAsUTa-o97fE9lz28*s&<mC^=Fp<7jhJ7Svd3L>MW$8(B-AA~dzT{we*N??u-Yn>R
z;x05gjYjEJI351WFXacSaLg_i!@52ZvjP_{MMrGYo2(V$7EiTmb&#elo+_7pDh7pH
z^t0B*HB^lb{w=xnnU3%NOWQ)8+72kXI*VO&M_%|89AEUgtos!ARM6jq&%_4t_(A#o
zXX5Xaw_gyaL~tWNB(=}MhF)3HPHD<hl={ok&tdcZvdU{eCuYt6MBe{GlzXIG*_<Eb
z$uGroV$N$a`J(6@7*XZ8cGq{s59*FKBlly*Zlskx#^t(;qHn9T?}%ibyg7a3`HNy?
zvw0^7W@QPZW$;%bux(-=%GV{aFzDBjnDB^7IqEC;{^$y6{2Dw)YW-RSwTiBExef?@
z?o=7~H6oaGUkh`~bh;-&C$#3%5moZS*H{zUw-ZkKk$=;2cUrA1Z8_!jIYd9<bCso_
zY$lbN-)4eRf}2BEg*m#C|437Qz}3#5%3SbpR~z2YX6F=DW?*S8W%f6sU2N(vRH!P3
z?zB6C{8Oj`A(`xNOt7-l&#6pDF6!K6fS;CC--rZyH_PW+5!h<BQW4$H&VE;F-@?f4
z^JL+-BEoYglrG~bdGlYw5=_dYyS-U!2{Zl39<{WcwW#H%YMEeFM{-7jvFYE5-U)qg
zni&hSvYCojqRq-?DMv-;ZLWdmsrf~{Vsy8ct$u?yVYbz;PnF*ShghE@Tl`C;jo(>@
zgQK&m%vrAj0eYq%;iVM)ETj}p%TD8+kYP-4^?8Nh)Sso~fsYQGiO<~r3l4Sm6{38&
z#{!`DP=k;emqgpZ*-AKYm~pTLA2p$7nM|O+M((*JUJ(6irFL1Y6n$^Xlb504P>{=)
zVH;CFk#SeVNY9yS383CTE&WooY)-<Vk20~TG4jF{XkXuI>3<b>L^L_!s)!olL;8I;
z$(c{5{IM0-@VdHd0qGvy3NU9wk3*bo;ICO`Vsl{m>slHT>9u37*KyiVyLYxf1o79U
z^88g1(QNt_D$jnvd|$jKhIOAZk+L@DH?L4i)~&81q|(8|bj7vmEL_W9d`%?uou;^D
ztIrFky0JOzRa^bDS@cXls;5;D4zDVboUJ~0r~LMs7%!fkDWks^5uxciw_hi2*Ds?s
zf1e98PTOUP#aSZU*cqAmy(oEXS`L+EE+wzyBrkiUdQSgZmsY?7;n*HGG{7)5)SLvC
zfY(}MwG#HCmc_J!c$~(~B&knQ(F#61spvyL>33qG6-l3=?UK_n`v>tiF$JFM2Y9e4
zM`g$VK{zsHOS$$xkiM9-P|mFu|4f*um=Kq%=6IvF`c%5ECX-T$NL_Udt9uq>4!g{Z
zILXg5+i~l+lW1qQV86&-BibkR$359>s_y<_@3TLuuEPRyFpi*ZBR?2_XP^c0Gm)o#
zO)MJu8%T#BT_#V~i1`6=sD`s$mJBcg5p{-#vt8$ES@&<;8o}J2>FxkEaEQ+rBkhYC
z$vGqOj&CC4wEI^uQy62gKkcZu9(Fj#`>t@(E^ouzGK2%|2B1Bi-48^2<L}zD-?w)Z
z*LAX3w%6a!N~k-WHS4agBWuKAdIp02koIO-c|-K*`i7gnSSJ?xJD8wjjm#2!p$c(R
z=08s!wz5a1;YVDIbS{&{qeYywKaMx87W@c%cN(RIhKcY%&HaRm$XGst1!o0W569qG
zYht)(0+{3lCLJj1Bz(>2hKA>;uRBbk1wEsEv6~EcIbdo_W?L3B5SsuO#3~v#*wrE{
zfmk(?+J_T@8EyoB7zf^5(#J7ATqger#j3|gqJI>R2lcOOtV3EBH@U-7D;t+3ga0EQ
z4R2|Fz*`r^^HzlqpbIaNkeNTig8oIFxKGhc-Uj7uQQo?|_&=ED#i$?U<)09GjNSfX
zEj-Pry{_y;X{{CA+#j&QMYkg~Uzz{azYg0cR&rUi9wa@6&T^fOd$=J!<}{6qTr~os
zBjiJJ!egtq{d<7#w(0?XF&1_Hb)?8TpdHmIh#25+bAEJ(+B|d|E13p7CkW=Fl^Xr2
zGkt+GCRG}5i5?TrYAcy99K{f{N!GG?e|+IU)yIn|N3!3Gy{Ta{muSnluHG<egF055
z^XprLQxE^SRlg7NX(xi=-cFgUy@Zz(5V*ILPxy)EK2|nCcOuyC!ShqH@)r0MTdh9#
z@Zx_(4@bKDVid85-l?ODRm7sq9k`}h;!$V*r)Ql@L`meJZ_MSf^imt{JfvIMNVUXK
zFS)6g07m>mq!8OE^nmG$dtq@n*Lv_B<VSxh;z&_MT%E1{?=7jGt-ky6dGtV)ZO#vs
zqgtC_V!dJEFd1Xgi!9kvf_Jhm|5s?z_h-@eF^}7Li`bWfMFfq7YZIB474AjXJSbmE
z46(8i1%y<0N~}y5VBCE@z~udja-t+>Wb94cU-YF{cr^z+=4|qoRy6`yyjsLLXdDG$
zarYbdf~|!G8eZPeCo8M!N$=JAgS%JMnbL3-<6L|LoLO?vJGMth5zJPfk)+C2LC3e(
z=b5MBsD2s?L6o@|8%7>juh$pK#kWP!!0T<?NZ^MK<RqAkIt%KnQSm+ynyB3U1MC6X
z-hS~--W7*E+)9d%#l{g*c(W4*kPW6|+sa(gSn)?@5rW?<KEc4Bylo%A04f^{K+D~d
z-q;9mvN)RR+MFNkRc-WH)S;LQRZ%mA%bIRdCyfmQRs`=m;sG_(>%=oynim-jR`&af
zlEiB4x`K6e3qj29Ea%EZYKNuEk?ia7%xyt5K&`YpbD7Q;x~y=~k~pH9&WER|;qOc*
z{#SfsWkeg9`Kt(Q7F$i0K^7rPe--VTVdB$u>^oWUD=w@4S6=^B^bm1%(&sl3(aPg?
zL4wHyWj7W<kEQiD5$aGdV@~3OZ>h}6hANwMP2~Mol|YuoN`1rN3oP`?v9{8)&dP>O
zCE~V~cxjZne{jl+^>B2kvKJSgu4tRBzOu5?gW7hY`k;fww+E|>BFuD4&OjPX*owm9
z>RznFT4Q*YOsT`$tv|_Cb$B`8mfT+_WLm6}PeDZ7eJdMslrXuB>A3k#^sX2%q^JQd
zX3*%Aw?t<JVUQg<BU6t{gG}bc-n2QZYN$TttLMbk%F;UsGlsR1Zy=p!u;5<d1~Oup
zj!$-~XFf)w&em+sD<h~K5e<#5qi6bIHF#uIF^pPq&Y9elb3;C-I>b2{eOCnXAEoUs
zUTpnw0BuDBO-CxGpNgW?)!U(}8yHd(X2aLOf9sP4Ipcx^_@5BZJYA5<s+*hykJ=ba
z3fun4I^x%<Xch~?>js!0-|eRN;ff~5s#ziViVkc%DI~8a81YPvyTs!*wh5QvLIbXQ
zBrE>waFc1<PPPkWaJ|VzQoAQYgZPJleQ0z3_q5h%Hlf)C;p{<~eNO}s<!%8e-KQNZ
z^#XFGpQ~d*!zPu*c88T<?jJhN)>V?!YOorSQY#3Wv<kjm#SHHH5ab6rvzZSGvtX9)
ztsOZ@ie<)vStb)EbBmVaS)%K><tb|T{7&P!sO@T^U#;bMp^Q4SDE)V<EvYOz>rWFB
zwITPTYoetO<=2LIZpRxy^{(It_a2=uyKKvWxxrbAkyzllBlSi}GpP}&2xP8K4=7JR
zn)N7E9jGNq;wO}+4wi<q2N)TLnl3iahAGhZc9^9NmFtG+oS-;HuYIewmS60wJ39KO
zCq#fVzEsc6h!&Iwz;hv<Pf%m9{bhJ-e-k;s>VxskWbgwl(c@dt{7e;8=<?RCY&q(I
z2pThGC&92|S4;KDnbLLLO*Qf4de{xLxdD$~5E0)3d4Y0crpbVpT~1|;!6n|zy_3{E
zH$5U5bwZweAYy~IXIt46r4JzV;jTaM<4;MQ!Z+pW5jr4^t`{S_$75%dGxH@}rgrU$
zl8%8BXNfMNrzRqytt_n<p@A2}2}X1s#a|<FT*fOb$Xi(eR<QNhE%nC-e3d7oKNzO_
zY_Cr+L1E|Z%THuSCoLW;WtlK^mUEn<r%1qy!cM#+3H?65U6whqR*W~v+fFR4b`=up
zouRvm3zAs+(GWT=PgLEzN!nsDw2#+tL31h9q+>9h32~{Er#%%)u}I3F?4)gixDk}6
zX;WLtL1|pfmd%FH$G;dr;KpOp<}l67DJC-Cp)&fJXK{b?u3h=D_4v*Ox}q2QQT`Q`
zQCGSqnibDfUTKs0HFvp{weKW@xuMHMe@BcLjt$!1qN2Do@}UX-<}Y!l2;BnZLV`Ey
zVk+eub)iN<Bckt`=t^rIAPc!6)bV*As*9m;3J`8M6a0@3VkXQonm)_Ksy@}sf<FVN
zi#c8`lihUaG{mZ5nDIKbKFnBs81)z?mZ=)G#e8gK@rv`VI$P`x>bwgIF{#kn!ip6&
z5u|)hL!)>FQxi|D5|wHLe!1GH$b;h0Mjd%mo5tH)j&9gwaDA|)CLGt3Mqp`rQWz#V
zz)Z-F>XW=kZjf0=ePA)l)*6@_Q$Y0^m>Z+$#rAh79b@Rsjd_CVkZsn4CqQ`EF|2@E
zm9jRDm_T3h4B0izcXC(kz(BAzgR}B9zK&slfo01wgCU}CLImw=kW;3Q?b4eLiIBQ^
zMf^j9!`nHXZ1oEcQb$O+Y+*D6iiAiRW;Fawc;A$zM#Ep)C0JrC&My!Tevx0pOcWs%
z3{QxbT|EqaMZzdK#lsL0u`8d}z3!0E$_Csaob(}dyg-i|(;$2f!`|Wm?3H^Mf*gZ5
zm8-D%p@3r545mj3&Qjg=4g8AgVbJR48{x=w(91Xa<!GX1!W?5lOcz?P8WYOqC-m;Q
z)?-uBcEjzsUF=Bd-h@a+6NHYauO*yaDe<FPj_@=L=$oK6ipi{xMkMq$Z=<ssuFkrt
z^9h&8cr~Sh)KN_jc%w2;L#U_<kQY1+vBW4JFGD*4W`ucx@kp(%bb%|)bEOB6HcN=c
z<U?0faj@lOP+m*FW9#@I3MiGwYN=1OAK@!DCh%AHS{<d`WEj{g!9sLoUr(^sG)st(
zdrXFiwuJM(T13-0YDOkl<Yki~VbZB=eA@jsc5+%|4fQ&nIcG4KHgF*^)6JOD5`3dv
zG3FPws@gd+q4&-NwR?Xg$15Q$W+ZD)8|#=5Z)b%M_ATg<5GI#-8xkA|7V0Z!WI`O#
zLk!Icg9YMCbWjYuLW>l6oGh$%Yp+{#A&d~>t@#_)5i7e8(qNnOtr0{QcypUv2;nO*
z^JKJ7rhX25kPwM6E<hFf$FpUhW(GenlPVWPKm${n8G;>|CHlvuu{Ure#!mY#9-H&u
zNl2kco?r#@fp$JK);*TsPq6$w308u;CZC)Fd|#5HPb#bX9;`-Lfi=O0NFeyp#}fKe
zS;1Tko5~(fh^DfF1qop&cMxC{48?hL81xEhfi)g4XHZ4Vs20JFCMWd9&eR2*_ic_^
z!%X-ii_kY_O1#RBfL{Ee#CTKYUVLsmx1?Hg&_tn6J5+|rq!h~^rHjg#>`pA~ZoLMA
zjQ8F<m2ImZn5x{HLiE<IleT)hvL?3xsu%KDeAYDvR@%QNk^AWR<M>`fb3>Oln{yJm
z+6u!$ISftL$cxPlL;9e_e|y!;=2}h!&elk*NKw3;da>2d{)Ey7Y{&2#a0^4EFA+td
zggb<|(;XgZT?;7i2qkED3t82|;6Ej+n+>*EA5FOESMA^t^g;w!XS@?}D%-Vc=wH2q
zhr$P8*tN=csE;l&eZh>ff%L5yEZ_T+Y^vwNJfd3~dbCtWY~bEytjdez+?Iw(BQ-@f
zd@+ulMI_A;^o>s|i>h&x0I7Isxx2&k$tEg<;F!L#hsuwG`_pxJujSI%$`BgZYoaPw
z*CPaZkKPEJ;p%$DOG_(whhE*}lvalB_>*LgRtEn8?^10&&f}VLfT<iae%l`j4twSL
zflIILl-GMQFO})74RI#mo@r%~Pe`BE@HUb7RBmfSV0Rxyp9^E8R^-MId8YwG?1zM5
z2ws6IrS0KiNsWr0qGyC_MoQg3{l&iBVB0WPI9LBYmFe(Zby$HupgbgZo>Dcpr|q`u
z_=jFmFf~`ly4&xu<I=9X;sIAhrP2B*V-yE~FtZWDN>@GCd`XjkjN%~bsS^rU$JwrW
z%EP(vDGs7u<U@R&({@{36&rCN#>IhpBkgs_Z_f#ny!nWsGd^Y4!q@OGkuXKx^u^!F
zi;=#5hW-4Ee8bNW*fwDb)Wk<C#w$50r06wIR{I$SQtjY&hH0%5?2gx~u@>cZ_`Ya2
znb*z`H1O~mMT+~zSSA~2Wj)UjOvCvhsUkT5eOYxlK*2*;l`LJ19Xa(ye^Yxy7y835
z?Li%vquLuH9zQfd)yoEJANwZ5zWSN(=(~v8a{AoKD@9cH@P^uQ>M!DRf^E9v>2Ir_
z{1rVT?L#SigTE`klv28v1c$Xwr{^W?khV7jwMxKD<sLKsm{SXX!x#~9OV02&EaE3*
zrN1GeceG+Cb^>8x*y$?u3?`ptW#OF&tzugau6HfRmlRp}2-!ct&|M_h<%|Hsd>$^}
z2{733g;<|JLkAjapyBm4O5zk`Z@WU_cvrl!A4qL7WN-(=d*Y3u4?oUtl>QwJL;OOh
zBi987AMEwOnRdrFP&*oIemc8x3kP%<fHTX=y1gQ+I)brl<?W7!=SYItoeV2Q&#V`N
z4D{DW@osQOS$Y}YOt1zSIuGz8<huW0qku()JyzD`G{KQKVc)Jo*TF8zr`Vi(+Q{M{
zLkABv5P2DY9E-l&Z<N(R26Mnvg-`hpR@?|5mvNm9!@4I-(RUr0U3ccm>Gx`wM$ZUm
zvN2oodo{`F@<3<9V5O>^4K~Nn29&%jy*u21Hbjv`&F`H}$VhsDXQIqUxk0u3(*HJ1
zT$)-RWSA@9@tyVa)I@(h`6Q0|RY)2Wo=ks>^oaIeL?!*{X>D(2*xKRvV=!H88Fl;Q
ztHB1JW(f;u`n%ICAzfAl8xs1C$s($3^`n&rLfbl0UWbioL#eKDIAnn5usL_)?;?gk
zyC9GJ5W}!`34qb%(b5m8E^VpZ_!m^*W{4q?6eSc2xK|d28s75U4gb{XJ8AC%_q&J5
zj4p;%9A72xVi<(4LiO(oQNt&9HLUEuCm2V5<IIEi_!r^W&n)(s%x~?qgER_46lqo#
zHcsB}YRK*0Lv;%hbpP~Ee7G}rPZ-rx>jA~Q4n=ZLH^X?byH3`1gOA>W&(wD}^yD~k
z?+%6CqshhH4S|Y2|1)x3cf)Y}S<wsK4TIYzSLlJrodVKxE9-#ENj(g)LH|%54WUkR
z>^oQ>D$>~_MIj6aJc0E0It`)iws{j3D081Uo<iBX@?;OghX2Fco5x30-TmWtmXKi^
zZYB`IA`XZc5O4s+2#5nD5FkPf0mAAK0tSkhD*B|>I-|8UwYH4{IdM-d+SF2;T9vre
zriwONtErD|Q$?LxE74k;`c)gP%kO=b&s|RLed_c4@w=~Aa^|xy=W~|3%$>P$k!;@G
zExSrF2IHax6^vCX{(z93i0j$l;mbDof~=Fj?KSx)lxRy)=)^7aknQmNRwMY)w35!V
zvG3wNyKSlwRJ*4y^B$Z3>cfqocX37i-zvqMtv(wL#|MEIzwZ1n-V3($JKWgH&r1Kw
zTiMGuJ;X*%4J{3p;;F5vp`F2!PIh!EdI;0$)X*)nrgF|+eATe^Gkl>HslhkiKjGhY
z?>!or_qB=hMiw8!Tad0X3UB!qzbO9KhuHnoLf<>P2-_8WJr%64^7FybLJiN5_y#I;
zauq8-zwaup9(^j-5;z`i+VyZF%bbec{Rx=pPYvyy()=yXV`VpOB=MW=Vt_f%3t8Fp
z(9AH;CVTFefe9lQ)ZpTydRcez)rTN+>Oa}x>Dbbj##nZGXo(v3VjB_|PY;RVSyc@C
z8KLw7F;DR=?oH<ytMIpa<>v=p(LAZZ!<k}=cY1=M%vR41of<rGFxxycG+B2A#Wiga
zr=&-HpY#>qhG$Vk-Q|CW_00@j9W3c!`%Vje74L!VJ1ulRHZK(k)OD%J4ka*(a63AI
z6%jk2S(vOroE2JqvhePfUmC0M2XC7`CGGq^xICvdA7V#mh0a-i7ALLz{4Fu+ky`Q1
zeR*BL+#+dB-|!G$#Bt7GS^4bH%-~pj6@GSTHOBa}vvC4@V-D+`9omi;j+M^|t%%Ya
z+Yhy3>G+5pniHxVTUw}Y3Qp&Hdp?Q2RaP4RsHil~%+s;Dmlkq7UVL1{X#&6CbWE@#
zG2~7Ujh=cJIVUDgvC$d+JB5?q(Zy@R%8cQ^V4bJ);x1&7GeXV0Z9OA&+1Sz|5Az9_
zNwCCRZl0e~aPx6xKEXE64b2-H69dOyduU}Hir;&i8yY=E3}*bQ4?nTs>s|yS18xkx
z4L9_-8%3<>%+Sq<o{!&;rj^E3Tcp|qe>G6y{yi%Pvro?q4W4%hj|e$_-^R#2$YXT9
z%<t3JXQ{aP-j`3DBUgU<`Uxyq9GW}tP>&{m@<91Ni%N&X4*5U-gtZrkE}l|aJb%)m
z?BCuhoyRAd`Qvd>spe2Ge^CSG?OF4(cy{9PL;bAmtkAS{zSzwC?NQv07x!m`FF7ke
z&5C{z6BPLI+&mSX{fkncW`835!Y#xyBj=yu^NyG4hm3|ohnTqBK4!nd`L4Kh+*gV(
z#ns$1ujUiO2&!5U4DTqO5L^Q}3?<9C0RPgi7!aapB6#uAyijv&f}9yY|9lU>099s$
zzs9=fg{B2(W7(RAlAe8#70$=*a`qNhF+VhW?_GuG+=**BzbGxH85pO}rCfh;&0TSP
z79$Lwu?zfk2A`3ynp!HpAA_eI)Jf4@m_AOpipx0Zc$gx^ar5!$>ijI)tMAINKG+P7
zf0|8R5V~>kD|c}^PbeN*ev5zRi4hOG;4P3VKYc~yfEO^Af2*i;9>0*!->mhuX}R~`
zP*hsX`WIjWJBk&a9r|wY*aNKX?9h}UcO|guiJY?J*&&R>eL<5&7KX-+5fd=~c?bT4
zy}bSt7{%>6c2ac<L)jzM=Y(Dk=ZQ2U^$m?z^8UuYy`&^`&5`QT(9Ur1;U?C(oL?ks
zVp-WXufWJymN`<kBJ^P(I2*qPT#iJ~`hYc*W5!#SVfByU6@dNap>EcFZYX}F|J=|M
z0lbm+(bb{P12-Ibv?8=35PWy-{`Q@R<J>9!ch=&&dan5IISuo#LC~Lmwc(>hM*F<Q
zcQyU|iVGeN1lN@xX{rjX4(46Rd9U~~ZTa82@JQdf(AR^3!Q!b%*0KRT|8U3t>$gn^
z4*!wF^#ix~;STC`{3tiR9r>o{ZE^m9y}!7E^x4o$xpMx8-oe+)@5=H^i@j;^e>QZ(
z{^>Od{$p1BN5VqS1oGILO$hcgll^d0=wHFDn~$_^4vh}t^<W)aLkoj{-og5}VjJ@(
zHu?O}!@=y=SoVDEyI)(&+ESs%f^X!ox^38mp(D42ZV$dX>PT5l=*(c???*DVp=cnO
z9e$)~M+h%Bf4GOGE(nch?_3Z%Wz3I+Z@gF0Rs5U<uT~GP{Pfd*vgvi9iv0=PvcIA(
zG$j2tLNJV|nbRlQ7{P<$8l2MLb~k)pg&SUDYOtn%T}IH;mcjL!g6g<i!3GW*QHy`0
z4%ch+Za2IssliPgPTLAMW!(&$Ip{FBIpc=6m>Mh;+WNM}-Sn-kZutBZ;IzX4hn)sf
z88^I*gAV>}88=*`IaJf?rf*MZa67l}P*|ICGt_1@xYZ5stZ>5@)VtwbaW}kMgTqI;
zeaivP%#WxU?h&o(Yk?H_-HqOOabLjF6E(k_bn->bi&Jj+k|u(=eHh#qCxnDAGd0)}
zQ1o^;{lEI$@K>^K`0|t+zLNNbeK?TmbTeeKZulzAfom$<^u|^<{4I_DI*tGOddY8%
z|LZjc-_hXjW~2bk58u-iHpSiaCXN3FWsv0eOV}R&2b$ap4w@RQDLAO{H^<%lOp|X(
zxal_u*fIWZX>~K)TH%Io>vO}mC*AO!9CQ@np?WubcT$5}0XxV4k2>89hc)=#RyX}#
z&7q%b2Jf$M^B>8$;fFf4@&BmC@MyPN;4uyUm1gi)Q0UCSuln5Z<0&_MG~pWmQS(X7
zz^}7zfvzSu{A}C}|5k&a)A*myxcR$Na{OD1N_VH5L2PavefqnsoBl$^4gYssgS8C2
zm~zv9pVkC^-|lAkLqdafdbgYY$4)og)8vN#r0GllNmKBWrr_n2Tfxg&H+)P}_*&9U
zf33m||2gG?)8^}aE`)i!$qn~v@ZU0SdY|cr-`Dv6opRIvUGId`QS;yJP6XgiH~fi9
zAZmVQy6Aaf4c2y2dASKU|4=84@t+q>xf!DM8r<%NP16nM#oh3vqy}s9lUr>%>OY!y
zvZnCljLpF5Q#fdkg1jkBZuk^Uep=j3pPqEXGi*8^f6=_tTHOqZqy~4o;aQpkv*T|1
zY>mIT&rP3~B3O?9yak%Vb1VkIn762t1SDMA>V}tV@OkZSdL;)P8LZ4GSlCAf)@Tl_
zt#Avh>vO{!vTk^z#=kM6(c9fH?S^Un&)bxBGi<JR!`f~)Z%eD2zBQ@A-ER2&ga%g#
z*joSdQl^`srq2y;Z*s#sG8)|KhIeZEc4pmlxmmT>|GZr(H^Z)WH@v6Q4PU6yFVyK-
zH~-#lH(Z|p>{$QvzTD?#xTL}jU&=v85jAiH4*09424~&y*D`MSO33r^Ppe<vRqbwu
ztK%Bn>4vZ6phLc~(+ywO>V~h^9R3b|Wd$6z1K;U$3pCZc;U8!Uew1|6f7I@V@6q`0
zX?4?o+$qPum4SOTgZDPM1%Apwhr>UOyWyWDH8|sj@8h6D{=Rgl8}U#^gIhJY(+xkI
z(co4M?$qF{8%{sMVTVVL#5Fjh!QF1S({#g6RJh@zDGkoJ;B=n0=gWI4?qbM$N>lh$
zy++Tt;Vuq30(vH?!L3d>9nE{b(}{@Yy^wIjzi)NJf6(BbtegHy+zr3h>V~sf2h7+1
zKPMdsz<+Tv0RF2+e@Dy6-!pFce{j%|f%md*_#;OK`S{QKsMXEzNv8{r8Sae40&zDz
z(CvnEG&t8`kUN&!Wbw=KAJG^heHH^gL}P<98r<!Mha@$))eR5T=)+P(SL0vXa>b(U
z#2{NU>xT0y-0;XI4eoQp1st@yBsQAp!afLN5^jbu6>fMe32-#{<4M`R%^ME4yWxqN
z{6tNDQcCjE`X8Ir?N)G7y&IlvYH)=Hce>$|6K?pFqy~2i*joQ%(^77RX_A4a=Gdv4
z1E;pS`KNQxk>cr^gEKVxj3$n-*Z<f|fv^^%*vxLuV8f@G8r<rJ6LB{@OXHuF)acxv
zWBrfK>eLwe-0+-MH+)9D2DfW)w;Mhyqrt82^*=T*?q*nEy5X~v8r<iGOEd>cG<vBf
zU)t(k|6@xNZiP!z8r<rJmvy`0^D=I@QgdJpCp)@yO*~g2j{GAXx+-wuj=kG2s@*Z8
z<}3SlT*4`r?ASMBd)-Bs?AXg8<H$u<;nzP|>(#hX(Q|dEH=H|D;Ef}{yf(CYc<}0K
zW*!U`jJ>+vFyvX9BpW7gqp_<qEGg)%pnpZtctdo2?Of2aKz(%}{p$v6<@B$|LC<s0
zBm8qT_Vono7W5?Or+CmSnwz<J$}sXo<ccNCTZq@QgrH|2p08-U3G#oSH?fqUw}O5d
z$Ekzp?W{@AJ3((CB3h#32Ll8>3;HMrJ-|Ohe=qA3^nTDs52RlcVR43sPOd4u;k?2h
zR<Ka;Y$^DyLe(ZzTcO%I)n-)NQhIXY^y+!>qP;uzO^qM<#!aDHf-G<cekrlxrjU6g
zaVXRkV8yqEidg?$A^c?QZK1{hOMX986g<s1QuBR0XLzLJ&QL?(NaNk14+5dsCn=U`
z3!RXTeNZng+|(o6)|70I7Rz>jR>7*Ln^pUCk;D^Ba!>Rrxh~m$(jeQ%m7Ncj{1c+*
zF^jddNrs#HWqVK%qA@bOzn$X^L!=tHW&#FXC<dX3Q=_p1N!3a?pB9$=)f|tbnE%uC
z@@^1#FU8W4{0YjTkLsj?&oi=p$zVM{!Y#v>(5WNC(foJ|Gw;FU+!WCM6f3?5w+wH<
z*Z@9wLl0}Z2St2CzcFaZ^2*X>Vo*oT!N;V&8%@^9`ED%2``>t5*8F4M)Umi|8(C7c
zZ7e0)F1)yn(|cJfZ}&%7r)VMmW7OLIGW^~;@He!w!o#5nWA|r_Q2FvIZVN}$q@BY4
zR#tHsZtd?dLM8I-UC>9w1z&7G-o7H}y+*iV`I40!%jHKji8gk?VC|fKpwI}fS-+@4
zkU9MmMNhD-pyRG^<w8m2^5!*)o?_-txO{_=Q)wB9nz0f^Z(>P7Z!-p!lvY%gO%!-D
zPxLGL9q9!<c%X+h{seIz=raPRk{Q^ET`%<<M0&ZNgGEMQnuDG{QqhyFPtdE4L6vLD
zmM;~likkViDtbMO-^=A2@rr;|!Z{G4=E%v4jywuF@>soEUN;f+!-|eP3VN>*5Fv0h
z<VPv_X5^96n+uKL5{m)!15&;jc@%WyalM0H5LR^L@uytA!3dT+>H8ENc@*?EBUtUE
zzoF>J<4;j9%_vjR_Oo{0vO?A^+G5tn<yo~6T)TkF@FQv#J}cT7Lw?#hy%CRr37Vvj
zDOYslN6<TraLMYD)siJ@j_Fo(<VVnZ(a)>PSFaY86g9`TNO}wM(++=H;E!nGk7%)U
z{S5t&AB`{i8K*a~GPGk`+KuqJtJjs1o$<nF%r~$D{;@5vb8aPZM9q`Sq@9~!htqE=
zGzM*4vU=?*RR<?!6&?NXv(S{WH{ofFvPElz6wkxNLPbX&?t>pUVZ8D-UdU1c#&{Ji
z#w%}c#&{Ji#;a({nt#sG81ABlxM(rlMGJA!LY%j^K>X);cJP)W)+^u&7P+6}>sgU#
zkp|JWvpTecZs|6Hr>$ap?hlQP+|p-+mz0*5v%U9+3e&fm_(uE^8WK@+ScweemW*r<
z%8sxm>RS`wU+=-+>cgJ`f4K*Lr{GV=1{i39K(&WJ*2h36_*V_&7Xud)`vCoYMrg?*
znj>%_og%(9sSLzrOEdXxaU-<e5^(U>`|wv_s`cV;_2B0l>Dw}xGrR=U*f<!Mf|f(=
zMrf4>|81O&M;w=}#g7-KELk*5g=`1FyBH^O0|jn3jqrLefmW$lH*kB>2$y^Dclz+x
z8{uln5BnHB)CIR>eFX5O?NuHItUiuQIg0r9ZX;(&*`i7rvaSDijqeVFbsh;7q;Jo<
z<?kqx^6KQv_Aev(4vJlay?eQ%0{j?KI=|(g&YzL`)y96DWq@js0=c7|)pvvn=26#L
z_#W&c5a1dSp&j6D33ni^2oUnS=_WAAw-)hfxXPM_sRItEn!ZChygw`T9jI1;_sf>(
zwEwg8R<Ptl_$Hs99@5ubr1ZsQyT2VjS;Y^f|6seslU+-H8{XGu?NjWyNw3-#qN*ZF
zaaOjZ;QMhST(#ET$5??UCEtGKfW@CO!n3^$D!u{yO-6W5NqTJsSLZD4n~Mb;J7CK8
zKf#s*okq@VEM)3dj8!Q&S8Mv5FrQUO!JQ@)lvK(E)iKr%s4k$^;zupd`2zd{<S>h^
zS}x;e8y^V`8>{WfZI3!w<`KTesvI8ZmZ4Z4^s;u)r%~rydg@ikNjLuw3R$1vS9m`;
z(*J{MmUz^m{|9wSuhLJj#oxl}!9UN^t5W@gHn$uVJ>f0+9@Yu@G!^Oh6H?APhf(kk
zs7I9kn+qi$%{Ke1<rw+AL*o7PSbnIulpZX##mcazh#WnHX>Ug5>T<DXbCim&<7HAG
zCB_Os>nKUb*`9AitzRr6ssvv>Dl=9<StB%iq1ugOP*|hKN|BawGC&bgOA7D8(mUHa
zj~S?s^ipeOq*^VtWPlXjZE%H29zKr$L1Cky$7sGG$D9WEQa(UGM)NuHylR9naMCqW
z(cSGV^-BywE0wBPEXTT7lZ&2_au&Uxb-L&+Zu$?4SRd%~4r+RTh!co~juSzefDdZ=
ze~4>NomjaJ>Uwb^xO^4n!zy9V>QTCaaWJd-(T!<owO|IpPVf&kzBa6so!CLQVM8w3
zvgThQJ(N$Th0#{W5-xfM+8wiQTMJ8ZdRv3Uvo4K}^l~~~&lo^QdIeqC)#*P%dO4lu
z(6%18{vY8BhmSkxKZ<B{{9e41PJUAN;-}*>PWq3EHF?a@oZi+Z@w$Ka6tXO*vy2bD
zjG0ehPNe#!DTZLOXU&m?QqP?!*|t^7wxv<Q4YIZPO&>mY9HH1f4Xo`6>{zUE5SN1Y
zD8-bJADg&9GJD`@#@#*2aKCI>i)?AGrGZL(G&5LwD~#~klG&{EXecjD%s*7UbwD{m
zSHX;Pl=3>&cFC5MlANWyjXQlBXTo6@zmJ{yu`g`MoyOQ<lbKIqv{E_Ju%RrFLx&r1
z`DC%&_BtJ+?x*Zo-KY|ASS7;JgG;usH}CtcBCr?@PhF1u&^IfG`&rf{pOJdLsQgdL
zSmG&%eHuPrSiXg2AfG;1A?;FJKj}4sbfV_Wk6xX`f3FFCdDa0%b_ZMhT0h;JG=j6~
z+!tRiwx&<ojvkD=9m10Z`1S+G@xx(2Db_pqUYx0wt}9)o^WPg6@-b_gZs+hYdz*SM
zzR~>aP{Afz;K&i`L5ldN5hJu_p}0r^1-3(a1zG%f*IUV|(q)UPO4-kz2#s3t!z|?Z
zN?9#iDlJQaHm1k{J<^}nv-&Q_uFkJ?f2x)4PkW5uxpo&=JwSHIFY<?AN{EH87yh3b
zqbZgq0aBzp+#Y9%rybkg_Jm4=R5akSK|8j+;2%o?w6{rq%4~ZNUjK~*kb~qHC4%rj
zPPy$^W5iT=l_1?8vhy?a_}X&^&b(@_NylivZcScEshB1smX+|&3T4}3s(o~?g!Rec
zXBqSm*>jW_O*XW}kO6LXlv1Zss4{w3!9Qzq<0(T{CL)qfnYJSDW9D!EFB$Gv_Ecu?
zQKf#cOX4lN3B{-A)~uoUR7Is@v<^{8QK^xm_ca)U)}DLXxvRyvbPURNZU9G;|BJ@-
z9=T6B=+`5%lpV9g&+%2rXZfI`2$knlYd`IkhR9*+fuAb}$Z@|Opvl0OFD~?-8nYOc
zVjZT;{Je$r35T;n(3*AhS|W!ike|0nehTzQElOUM7F{6GyYk)&#g}yPf5{r%G&|77
zi6Yep!TtEfgtgS8jzK_ONO~x<6z~Ia*7sY-Eb~)xNI8Cgopj9N$I19}m}MSN_&d8a
zIyTZyy6)!#*hqtJT`ahdi}UH-&t5<4=K3CtNIu=(gT>9yhbAnc$?RrTXq0aX`)1W2
z`f1C9bw+Oa`ZX1}*Cv*md8Fu;LTPV+q7H@6$d>Z*U?*#LI&w==@wLm=a->J$GqNT5
zBZY8evF*tG2Nfe#*n>)d5=F43px(%>c0@A&NJ3h$6p%udX)<6b=!61?2fK9zM;etv
zrGQ{k&|w;b7O!8idb!w5*t3e2dsQ+ttyyv@miQeuqc>A({rFm-zkHzn4&@I8YQYNM
z(dJHdM>lJSy^WMX>Kc+GzaGLprSkPl%jHEfJ041$C8z0ssDi~`fc~4Qt9{~msL>cy
zT|Q91mG`9d`=J)M{||MtCg@L7{>cxzjzw@sR+H;D2Cc95$e;4x${)chf4cpL@s88#
z^-I~w|BX|iBPvKTsyp#;h1-dT5%gj&CzP|669oG?(G4dSFJ%wF39Hl}j!0wV48eK?
zk6^GZDqp^ARcVPF^>pE%rsIQgsfh5jT+nPlCGtp$RlLY&Gvy_%W8?ruWAS&eCh%{x
z_(_i1Mt1-tuj|ucOMid!@A(FV)M+i9jgwjud$i67p6a;EOc!~+ujCK*OSdR3WWL#y
zcuP+^?p&=tmmU0lC~w}Q{YGf@(xsdOhdq4gQh=Y5UzjY*gJ>%ja@Hj>-PkY6jL?Gh
zNzR1B*56z$;26#1``ZPBkr7Qa=69(=@dYGzbdz=Ym7@Cv_L;MjlI%1{hVD=fQ?@8T
zf-OCLtosi*86`RD4GNHYkMt3q<R2?$@jr$p)cmxN`+{d|`jt;f2|v;$TS~-3MH*i9
z>MgAj-;z-K>rMr?$@Z~E*7}9)sG@x+CFLyptrEVaQ?`C~eu?L;dcH_J$_|a{|Fs>&
z^M&kmNPi#E^VY56$^OsrbRwQVeUW&SorhbLy)M}{e^EP#=YM18A*I*K+ZVL+E5!2>
z>h)KRM$Y2$MXOeFHys0x2AB~S_}H&hJS}YsZe{h5pJefIH0pK$Uk_`02@gp;ZnAE)
z>Boz4*L6|Vk}}C}pLwgi(YSeB^%IRV!XN0Bc8G3`qb`Z3ai-H1eq4<9t~d2d0Sf5x
z6l;1JGt__^Iw`k7a_C^>3mLR#Ix7IxLF5NHto)c0d%WMsS+sbyyteM>5xQz4AKSAp
z+C0(3s*mBK`4gS20d4LRxZiTp^2O|xmqKHLNAU{WV@UteILjUj6`VrP1|Bt~_Y@6f
z;V9<ch09kd;S4K&B{X5<4a#Nx0mCO0o|KSM>Jv&a$sH}0MlEBltR4D;PvUtZ(c*a`
z(c*ccS2-T<qka|6KiR^n0Y{$fG=fVi@p6%^ui~MZC$qSVyrIH+x`@`d0W+woq(@YR
z&~5K0mG{<pZ;#u%rwk(pPZMy1IP9h9$wmREW2E58c7d>93hybrb7f7%q9xKphXUmg
z$y@w*36|g&mu78#N~5(T6momGllPP|Y(>y39kCR4W318RQ;rB|jk?2>{IsS~W=Q_m
zxK9uN<<y|dpUcnhs-*(Dut<u?0PUQblghEIY_*z?{W`@`S&TiBvnG{olHY<am++5O
z2KP5`7>CFR9xN3J0UYN@JX2FFTPvV0JQcKL2}k0vGpy`xvK1^63^u$`!e7{MT=J9Q
zt|Y7YGb*~PgVl=`Pxy%zPx$fnX^enBBLPoGq}<agKpIJ;=jmcR8Ckk?xx71U2S6i>
z?f_YdQ3*I&t@M`3mP+bqlZ2I>FU4qoMpq_CF-<;ntIRT>N{IG<Bu725Lp{E&Pg+mc
zv+mas_%j&tXeZs0l8!v19Ml7U23IKl!cV_C{sUi&k+XV9)gt}w`OPi=K@L~Gp?_Lj
zC7%2ba4}v<aoJKw{3gP(f59EA0Tnw~@(s8bQ7G}G*AP$G+j=d0Lh=o;SB6I=txG{x
z$EU3gF%88BlmZ%JG$e^mmx_pP1%!ta7o5b6^TRR_`wcms75JFDW5Utcvx(-vh6+~b
ze6%Le$rqh<kUylSIVts$AJ5jY6!gubYjIYgkss}xABVUf0`m<Vuvf!p@nZs9o(hTl
z_)S*w(Y?*zq$I4%|F*FCO$@}}syeVP5q3#-%N<qs*5e?GPGS5OCtoLd++n{{ne|JT
zN|XJVh^4U82o=qo%Dup0_s_FQ0S~AHy68$H{kJMl)bG#sNV(s3%a-gshnrbzPhumF
zhhhVAXw{ao>6gRj8d&N$`rx@nw{O15(|tf6a(UV!{fA@?nC71^Z0^NeL8*C8h5CGv
zJJjdvjKEBe5{I4A=i(fJ<yG~uwam6j{PWoQLjQ{A+a*k?dmcBH)>;Z}eb1}Z`|0a8
zSU2>gX=sprDpjh%0ryu`Jal=QR=cON(y#s1yu}gW|FBvse)5C-?k>i?otc$v$6NgF
zcTzHw)BnFY(Pac@mKf{<?u0&g$*E`Rm2)cd#7C0}Mf5v7-!ij|^YX*)3F4<o!P46%
z_+qL@$Hj<ofZ}%6`Zn*X4k<v>|A5&_l@6txmPHzkte?x{Nb-N^8l~@%E(udt((FkO
zELsj)TfR;yK#{)?VHJPFm34|xuhAFqND1iHy_;Y6NO=lmzsM|b|JMzW`cfPPVChRp
zI|^^FTU1|^8R`;x^uwAn;!*+KDxi&uRpeU6tqqCl+826_+=Z*wp1W8)#L4b|A{4V0
z?*Y4}h_pq$wqNvCG)DVlst!u>3yN;}s(O=Rp|w|oaZ9gS8qyX1L@6Wzolf^MDS5P8
zpvj$**{*^oytU!4=XR$@V^m+XjD6NC9kS|HDfn+(-TJ#@yE7nTakm`FQ!h~_DPSr$
zf+@3Bxv16M+HPirew0lE|A0fZ_8lg7WRAeHoEewXx@2p~7fF~L)mv}Jan3~^Q;Mmj
z6jS?RL>i!a9pFH*=0H-ymV-+EaHGVFdOib@SgG`h!1BCJ3jV&Bwf@7gv!z;5C*}FH
z<E0tokJ#Bd`DqHItLA?!lzJ`xG8XT1=x<I+`YjpR4&ZNODHp$}#b}H!Tn^yxVy!Oz
zR;9nwTYnGycky>C{;Ur_{QoC*3zP?nlZFP}9k4nkF7;5y|FK2FG=x5HmoVk0r;#;5
zf0|Zt%8ymCNy&dlr)&pYz9^G;8ZtCg9_f;JT^~I^K>E}L+Hs$M-XR63)GY`5S@Jzx
z<)H-7Y)2>cq=-7^PZ6ny<o|@P1FTZt6>~1OM86@)I-q~Z4RuoPC0vSn4@=ZbY6RS&
zTH=2RPbL08oEqLxw|`>b3Y=lQ)WF(-81j<J^vi{;2XI;!d^u_4tXgz#soZwkt3G8~
z&maZZYD&i*X>bSjay>2pEnl@#*Y|R@;LDG_oY4e2S>yZo-WwVGbwZ=}u};u~$BJ0?
zeOwDYhLgIo(nTfmdj+<`Ju*;hXuc#3#%R6yqk@kWOZ_xN^^*Kkr=%-=*0cY|>iJcK
zb?h4-gz_p$2`N|6#g3_NK9-V7bUt#5j8pd=>t($kptoMBFa{MZUB0ShDoeeJF9*JY
zZ^eD+SVFAv)FAcK#7g6Yt{v(AyrRm;k}s6<bY?{pur*KCOS+2h)R;9;72(b%$)N8T
zUTI=|+~Jp1FH-rCqc15rda%cGNa6KBD8W>=1izAz_6J;eE)w{3jFu2;DMD)?H%bMB
zze71-1)6lzDPSrW>bX~|johNiqRY5|I@qI6gobQ<wVs2HuWpN811cf$)Jv2k8XB~N
zp;=2`onA|^`u<Qs4JGR}RSi}$m41qqazHKVv$lb%YW2>1t%vpY<5F_Af|(!TdQ(<a
z5zX%OXb<Hg+rTQoS4mY)okg8TaZ+5CzAl*$EAFI(ExjGA6MC)FEb0T+&-rk4@_)#)
zfTOWTl)i&;i6?tRCqJGnl5}gsMEz4J@$_iA%2V1pDI6f65>AF66^fz*ijWdd!^}D%
zNlJs%Vbr=i1he{|F$sRmPo=7*fOTi0Ny3zIiu`F6A>rxLCBX-ar5sffjfOubC0?&6
zRY5DQD<`yYl0m(sDAi>6(N3wDy7u)l*7<J)M1klI>+<Ayo64}|V7+p<U$$hA_{l#i
z1?qa$#cS+6vdS0*MvBOBYko*cL)2B&Qeb~6Vr`#<Ca_h#p~zUW_PXjeVtT`5y`Nx!
zy@3JtDY9@wpH%uroovbb{p}pK-z9Odf<yL&P@SKgr>H55q{lF&yjI63a7CbKXrz$=
zecgJa0pGV>U0K4_Ikz!yGz!?-_*3BI2(44iNy#VoZ~RQ5ULuH*9-^^^x++-OEzpRg
zex)H!imegWr5sY-OFi({B%ag2*HJkYS4Zvb#2bo{GC>AN@J(EQ`V2dGE2ZKpV>CvQ
z(#mS_7c=v7T>qkaqOPSKGvO)2Pqs^kef2f4`p>Z~dJ{KApm*$>y^{YIaoJjS@pT-~
zEk6UCjM5=~vPb;Kiw=YfRuGlEw1!zkX>XLR_3c-6k4e8{alGzeDm)=ZdoRmK*TJT6
z!92?Gv5eBzC0gtD_VKL5A6K1jiT5AOh9{);9pC;hDBfEZ2+Zf2#bI~(@dl2-G9vX@
zJHO*ui9gma+v5?@rY(lv)<AH{B#z{VheFYpAPFA3M#xZWr;v*s&&rmHpU#p7oZS?0
zK8%(}l&4gjBw$s2k5s7dWqbPq!8INZ`*yo97>&Kf)lr7{S9NK#empA)w6IyDLXTMS
z(fUR61Vv1E+6lA}znT_kdf=5Xh<ox@YjY@EkbX;z7Fx#+#-%?re~~_#7HCvcMZH}Y
z2+sV!Bt+W9dZ>EhDN`Cgo|Wx?N(k{=j&!mt0<wmyp-n3~|KD&T9u7}fM2XS2S~P&k
zA4)LU`x~BQsVXb2EM>2~6dIlWTh_=q70<0zaPJ+JtQQ6?Fod^OM=^vT8WHkz-Nia7
z`&*yH)2wr2O2X>8O4?>@6$EQ4Ab;P%^93_J9Hd*Vx<dq09{eV<zX^LK_LU;?lmzuF
zKje9f>Uhh+R@Rdfo`5%A$;fCyqK=^*msOFfU`YP&NtPHC9+i&0qX<-4a%UB#Ny5q$
zmH6?jG-xSm2?Uof<v4!WlhOdaYSufR6?{tXc>604ieSxlfA3@2K^Sv1UH-jV2*%!N
zmn}K)Zdo8)TE1q$qb4NxzYUBsrtA&19C|myGP&VV<E)fXN-R(CmCsx(7`kPe1t`Mr
zCu9Uxk*Gerw?g8{gLhTL)?Tnv()A4dqc9L$ZFd1XHxeFfIYAdvXhd4+=$FclXJt!x
z+N%-%T~4OC7_A-*%?Ol)f3yX1N>`Pz-$%lE(<l>U{M{z0Oc(0Iu4OPXN7bxX@$syb
zBO`qcft<yq%j9$K1B=coT8qCkkh5snq5=Hmp9&tAuvN;*V4reWPkCQoAP28LTCP9J
zpea<_eQPwu{Pg`Z8OT{*cKY&i{dpu(NZmlSL6Q9vukIUyiJbWU$rFWcqS~?ey6|Xy
z>7sR|YgiVK1_s~5vu8uXc){I!rWBwFXh3nQqNJsh_>?17s%Zl9n|Q1uZV~pB9By-v
z!11hfgdC!|n<98G&N4&8qc&N?j~JClwkK+;WJ)0^rr}C*0}S9Tg)s0XKLgg{D^C)v
zP9?+CS}7$1WSAVGi2h$Ss~?8_DfJx<!4}me#Q$Egfg?I#=KFs=tkY9IA^HE4{QE`B
z93C#%IKaN@a!X$MqbFKVB=J*x?>DfFr~Z1)zyGU#bl7mr8Z?{G$vw?BN8Ng@vqXAs
zium-40feV>C9CAs<Un*4XDIeTHEW7G93h8D0Tlw_$)Ju`i+{{=P$h~2@#9y4=UWj{
z4}5^z2P49xLa`6qSoMhT3HX2qQAdPN#)m9x6(9Z;VO=A_GeWU{C0M`2q*&YxPnblT
z9dhem4YJ=z`@e9vNbvPbye}W_5}Dx>R>nwyzVJ~(sePePDx`c-ONRR+ERq+VV%;OQ
zP7lRfpgi7zSuFL@0Q*;5!gN|eyWJ=IlwGwTTf6G4#P4tCt#y55{=k=Qs*0mUk`(-_
zf{WP?LiN|P-aHfxJ-tGc>wp`P%8~xKl&1hb>`-tuZ*fq7Sq@-N)gxOb9LA|;1BY=W
z_&@8^GadU-G3uGHuCFP_$w4dApGidn3@Aq)S8_CTbp0|xnEfq75vj1hNw(A#)a4&l
zutYvGMrU3Fu0<<@StV~p9GCjk6-Db(skNVOl=S0S#g~#T^&Hvzz0|+mPGwv&Qteoo
zQ8h@HD5%S1?O2Nj?XP3{1)PstSYqV=6sRf*DzX0*m=?en_5aiu1wez69MuQozgt*8
zcbHZ=ebS?=FIEXrEvg>#J#{LS3I4cUwtA)f+ro=4)8HOzlVl`EsdT=FZTYBhK}?Vx
zgYZ+_svHH!X-j35jLI<8FwMGF53Aa@5~TRa-lxgHAn_dmc~QbTw{%_AfFGY$3xD&i
zQm_=X<9F}*9Q|n@YcIe&N0%?CE2ySEi>TCOWlPs*tUZ6D#8ZUUWe$a>F45%<#$9su
zWq9j)stVa+R0^AuQqVF~ui!S>epbj@N8_B1YT~tCi61cU#TCDrPUwaP1)@@Cotk|f
zF~aAqrMLImC!ti62P0CSbxG}LheRAuEj@}wGrS@0D@U!b4bVjWbVkZqwNfErqEpX&
z(jf8lT4&1iM|B*}=e-8?6)?qUZI8>OAl1U>^(<Q$o)R?5SY!-u@hWf8;%gUUP`pM;
z^3yP<5}|g$HN7^;PotQ6lrl?lgs0s(!NjNR;fogSQsJMIvb8d!Qcm*|Wq=IOXe39d
zX07k6RcnsQQpz_PC0-_Icr@R@x2Tt|T2j8YM83adtSYX2qsPe^%@1T*``GY=%3~Rc
zSAAs;Q(bU8>%zxgG9`RRv22fLWlPs*RTt$43t4<zxWKX-Oh`V9jyFk-3r|=~k&-_B
zrv1y^QjX{}?^t>|SUc=YQhw(L760+9+a6we-V1xyAR7>GujD5=YW286cr)6%MdfSt
zQ&Jkdy58Y&m)>#Kyf#2F9@HEkp0LJOQIkuN^->H!N5c^#ck$Y#OG_)~i7yxXMn1gD
zt(cyg(H#uq;gXV4=;Q2;%L{%E4|D6qV+;!MM5|EXn~88Y>plVZL3|bWxaB`Dbi=yi
zImIk70ZSdtdsI3(m@OvorLIWITlh{RXX*0N@)C~z0)Y;%mh#85vfbY=Te|T=>%joO
z`U1K9g%2N02#=XY$&qvIz#S1eH>jEwpBO%2TuhJJV!*TBCprq9=0MsT{$E!W+CvVI
zR|DG$K=yLl>Ru}??s~B3+Rh|@P)}gcCVpFRi%6rjQ+U%9aQ>irnO+Jww>=Qrbc$dG
zftI<`qgIAA&n&~ovznqT>x^R^rb(H$=ae~X5-*c-^eijYkG>vL#w@vrlsnw0?5fs!
z&_Kf0wblGc5lc<v*IuZveRqXLQX@r5=bXp05>GAd-~A@jNEgda#9}~nI#Hoi4=yuu
z7A{_0vVp6$QjHgM77I9bN3U$D;w`xhtC)mIdH|o2v-mn#<D~F}ar#IZjFD1Vx@2wT
z8o8QH^IIj3XQczAa7euQB*)I`nKI>{8lkl8(o_0kip3_B7A4}>7o8!vV^wz&*ToMi
zxoC`LERs|Cn{Qo$c&1GV#J;d0Ooa%b(nqnaH~YWSJG7V;PYzEA4sB)CqQwOe(Pmi-
zZ-?PRsA%J?N3==SFWM9<JQ*9VVR+5v$ynWowHcwx#S^)498vR>W1`I;*2(Gxy$5vb
zhX<l&yi3vhSSzOwkAQCd@Brk)l0H1nx&<9y^r*CccmQ;fxM=?HismWdDPxD%8H4IB
zo3VY{B|^-cTBXGCvjtNS#_%?l0$*@=7i$zPP91m~#Yv86lg+1au#Odpwux1Uwu3c@
z7FUCKI|3JjM4MoJqOE3yMI4VTh_;Q@6~WwyZq_JZnBlOA??`gkEN1<p#U-Sv9ByP~
zqQz^vMccz#c$<fpiHa7l=NB!WOqs^<4XjwStt=&4gd<wmnFc#C*byzhnkZU)8~Id@
z$G4G1+rlbNg`ODV5-@t1xB2L0(V~|*JwMqzoi|9wbWX;v0SFjw3K&m22)Lhh@OEUJ
zWkri!_zVtX7d``WBVkU!FehM`<LxMz6D`b%7DXjm6xB>l$CtN7i=q@QigG6OjzTwZ
zxB$OiAlf391wLF*W{hDMF3%mqx=#y-*(s-mN8}dN8~J;8{1@vyEj)4riXmziAC)yx
zfaIMPo*68_o1adD)&fMq+tG+Zw1^_XVMHNX><&cR$uf!XiRovhn$f*R^aA`&(%#E1
z-ge=Pnr)Zt5O{NCwWJrCPWmOgE+@LG+`@#U@7%NPk~)X{3ON<#7gjjwwtRX;y)sa5
z4C4-5SkqvM^Eg+?sU^R#$rx6?eDS){s<IiYE9_S)uE;9+c4Iivmz1wow+N%A`~qq;
zzp&euuf(IiTnhTr=AuUNA-}NCR<OQuc@^!17xhT`7}JQ9&RXd(F7W2!B1KOagE`$c
zuIL#>uaNS#agHyKn&<M?h~|%}mkMm-0&kX|uINq1aBkq-MN4L^DXm&t!O_T2d4r<k
z*DYpahcu?!h^#8Dno+TQ)iS{%{zc8Rvx=|J7+iDFMM(9Iy_Z@HQFGyBNgrz(Ic3XB
z5_0+jzD(g05}y<@z>5d;qxoa8dV+tJ;!m3kUsM7qNg#o9Mk;)Rz@JVA&Jj1(pr}dW
zE&l5jf1ALcVezZdABznw44+}~f5Q3GP}GB;J6TgH@yJke4<`WMC-71a$E(bai{SkL
zC6%+J0Pt$M9~YN+GMqdl^^7aV*YVfc`WLCd#^LR?_(7}F!};lPb$BPj;&Q2xmob-w
z3*#~zzt+MpZ&G-CUAkn^Vx==`mbEK<yTp?V%exf5i^sm&;$I$D_^iOED@mZNR}t`f
zsx=jr%MwWen@js7e!QvhLLh1`R|9^0k;KcSM9pO>#gErhaXqrTfiF_{YKfnn<S>3n
zWLdW&;2C!=Fk2Z|)}ru@5<e#?V6#lN`QydQ7b=&{QT$~Q#ouA%me~<-B#x-L_)*d3
zkMAZr1k-{j8Oqf77~iKDR6k3WsJUdiRB(bxbYWR(fPwcFJ%L||C|#12gs54n0z3h|
z4!jZq9s#c6eSHF!@pI2zQYl9g4Am+{86&6S+$C1IEm384LW>bzzGU%oGO#2o`Qybb
zH8(tZu*&oa`1PB)nDOIvtbJ~H%8)8kvP~#tS-|ND#R9gzq(Ga-31#?|j79uK8iH<?
z9943S#*j5tiz=&TR8}oo!*TqGnkDt3&7aU}3|U&fc1_umMN7)$tSIQEaYgSm@)n;v
z1DaRkeKM=rH_i;_4OyysZ2}g#GvRx+<UJ8<9l(jVDzFIe#i*no4uZ*)!sGY4&J0i3
zcw!2_e?(sugiGqpBKapu*Q^kmlS0mZOGH5FQGE0$5vAh94682=&x{E%Bif?c*iCJ$
zy*OMjM8Wwdw6pGFq<CG%z=0m^Z9WU&9u?e)JuGn+W?VWyp))2rPkFLih*?(%UTKps
z(di2ZB!6ehO+Th!b@H4)QH7)6g72Rv_~%#;snZ2KQrN`l*!Zg}lldq1OSq-&oAbgC
z&da&rm1*l1RW4t&xV$u8cj*N?X6)O!uYSg!i?-FqXX%KEZ0G1fe+th{BocUXe%N@H
zId@p@@(Z^$?Aft5K6QvDo{Yz9Pm0eveRgqN9!2qOwY3+=6+h?Zw&FE=F53Pjz8$#s
z)xtqXUM<Xh=md87%-mV*tSfU*9d}OcrS<XUOXJ)3;MW^x)b6+}j_1l&4dMUT_%m}S
zvHvR0J!|kKlj4``tG(#beQeQ{xhMUPLXBK#^;x;+vo-T_^MsKx+(zPTZYB{gtzKRw
zZ7jSv&MumlJFXDgFW#}O7XOp+$=kQ>*@Ja+U)@Eu?CyEF6N@fh7_YtfqWU5Hp`;<3
z;-|#FwBsxBnjLl9F57j{#qsSIU0A<s&yMNwE$k2Ta+7S{mATWx+#Y-Np5X;W@y$@Z
z@6wC+#&>SpbIFeQw!O9S9Syto#dqzD@4bizwQFx2zg~G{^8DP*!5qPK<lATG{sy<8
zZ_XXb+M07GvP^pTkRzj6?(ZjK(u>9}leHPU%#>YyS)po+RGU<7nQBw2Rkd|lM!}+X
zps!WI)V3?QQ?=bz%O~Av>{3-@o4X`obE9f|RI3bc?oe=pYTHy>r`l@XszZ!t{y7@^
zN>a94id0*y+6IN#+^-NqK{U3dP{B&^mdFj~<)0AbNPa|PS2W1>{9@T|?ZuB6PL9U5
zDuJzCiXKsPrFd&UYxqU(%-|J`tnC-M6M|Q?u=dAtN8XT%;9C^{dVw5tMJt2??D}8i
zjtySX!HOOO<Hh}~jJH>Gu{zP>=lVq3%i4JRHT>+FrRZz8!uwe6Wx-i^_3JM|oYl)R
zzsxNhx#UNu1?KKAe)#6w=5KrDx;ttg+y5Jb9sXtR?y*(eP3s6*4^HmxV~Nh(g0Z3p
ziOw^t;@Xp7DNet>g@|Z};SVa1C-bT%*3^l3p{Emk!Mnz@9>D1ukq@wB@i#qY7&&N>
z*E-Tu0&tFv-_XzLh7s(*zoj;QJBRsEh`)6<zADL)hOvUL8e44q1!V%AHUho)@FknD
zNfHbLD_q`fHhwqZH-o>yfiDt@<VygqGOd93wkSMrzGw4S_egwz@B7-)c`{2zw4hVs
zjW}<Q*aE2rNeCW8`=pJp%1AtS)Og0mZ;MELh_}5qzM5x-A1~tXGll2ROxLOiLZ_qH
z2HOHPZGzn}>VO|*M|Kf+L>+;XZT_l0g+!MHPP6gbA<vIN_XB^Hjb96ua<7F{1ePHa
z5zZDZI7F$71HZ;LTwl%U@(9%0iZ&AeA@E;l<97*t;BNx{QX8KtR!W*+KX9#0s8t36
zJc1i-!;K9}08QW~n}2=3!ebX0__2*&n^E{y;2*W|J4w$qz(2+DBK~OXf?g$nDjhn`
z7FgG!@Mr>mu<;v-AAK2k)5dQrRQ!Fwzh~pC8x{TvjGSB>UzN@(0?u-R`8Hugk;0b)
zKgBLmV$XmaoMrQG=~w)<z%Q}!Yugnb0>KS7e!B`F&BtqSw@p}=QUXvI{4X27sYl^k
zfWO9aXf&~BKn@<X`8RYaeq<<kmyNH3UU4h{{%{QWR};>9C>95bDCp?38imjK1o&T}
zCitXgL_2EmksopV1z)fY?5^fm9M=Q?M;m`Zk3<_h({B(S-<jA%o<0l0$3%$6Hj)5R
z6$(1=by88_DDZhUeis>@4Ez`yzr8^jE(Cs>jZZ~@7xjmt%XtIgsHyr(C=xnC^KF4$
z9TFRA1M6ZNzqUznXMlI~@rD+O4`hMgW%KWbBmCg=K{|AaP1sN^34tyMTy5jGb5HqE
z5B!ZbzPeYU`7#u`&&ID;_+T9P$8G#3W!OM~q2~pj$B$H(Nkv8igsd%4Tc_}#hyGy~
zT~?uyGb8kGn}1h>Bm~+GBOC%%Wz^a)fQ;qcs=0MNBL5hxBS9E%6Y5kZg6NvCV~VY%
z$m)Sl*!-zR<xwl}i{NO4!_nB+`V@W#@M~=TT9t`#x)_A>Z9)|k^CO7r4ezuf?zmbR
z=8D66ZT|HXaX0YS*!T^~A)bKn0n^GvqcY5Ggnt-A{i)%%4m{!jL)g)0>y+U@5%4{>
zft~%5J(xf{+{UkOQ}{>0Zw<3(Y^TB-)xg`!aXMDjBn9{~8g}$$4Gi)lfGW+&u?=h>
zMdiRdhZ#kNHfO5MzgDU-j1u4-8<|~YoWT2^6Bbx~R&c0CNyLF)W-F={0-$jN=h^sO
zjgmjm4ScnYuWe9zFdyXb)lwDXZpF{3Iq5yNz|IaO&;r60=no~Zr%K_uz_%<%V_zdh
zD6X8FY&{#hB!8e5`0v~J3!qmVm;rMROFZI_#!~%?PzHjd@3-_i1peDrL|4F!4ESGn
zI2uv>Xmb8(^QV-az&n_9A~t?Qk0CE|hNgos+9sr`m7?*$JNj~6T;U6WUt$|>T)<K<
z=N6>bWfUFFkUm>qRfWU{Iw7~-#&7CS{BK~dd5VqSU99k^u|d0FhtF`>M2kj|23=y?
z-y{8%lgXefZABLpDQ++fa%^Vn>Kyn(Hvf(ug@@dr`)z!R^k6<3^rVenuN)1a9rSYA
zCTt@CI63IJV;<>K1|q<}<KXX-_y9NXk)y`qiXSzW>)5!|6iR$J3B0NF@XhR|UM0{1
z!U?v4O)w}97|3<3f*TqnI)oWG_bi+L0_BiV2fSmnT~ICg14-Z=`<5MzYB9|XgK(Lx
zsJd7R7*Lpdy^XKwmH1#A@VDCdbx_QY0BSGy=T_!MQ{wmxoa-1Qbv=^bcpsC=kl)#g
zcC{!19LRmz#;=Vld<J;OjCuhS^CQTIt;3<JR)H30Xt{6L4*gT1(ZfdW`&_@MKMdzG
zMZvrgam<``9SVO4c*m5zp-$nefsfmcZYY%aKr8T$^NFp>QDYzQXWRUB=`N+{dJsx&
zLUn^u1ci}}Hhx!;;(r799X9^_9))iL{xU1#LK=Q?kR#XH{2Lo3e>xZj;Rc&fU9A+M
z^CEZI`15-ez6JOPYy%S&n)h+!R}TIzMMz*?S#0BXC_SM#_<!fv%&rBaICv&rvjw)b
zNp$c<;2p!SrbF@blsXo{9sLp?sx^$kLv1}9i68XA`Gm)2c3XoK2vmbG(X`f(i%<)6
z44zH`(b%p+g@xh4b8P-=GsF%2IX3^6Mujg1-Z3oKbG)d(ksxfh71iUTb?{YC?Kduf
z0)7OBf!{G)tGXrL*bMyD4*q_H$NVw4$;Q_Z9(L1%TWrG4Y9(+C0*)!Rx=!K)?*spU
z&A&t8g9m_joPVsXS9&^tf7a&TT%_<7z`ri=JpO2G9SK0;;N!Ny`iL_84)BgXUSDS8
zhm5fK*Y+s`85Esk5v*1b^Lb*(e4Bqqmt230K`6Q*%WT5VUZrRO@T+b7mL7-UlsyU(
ziXDT=7_!gCCnY|^n;~Db@Q;t|k_01-2#0*bHc&@~i-C7cy*ulaKn8e6m!(J%+98K+
z12Y>Ge-ikIZ2cP}3SSO<w_`KAt4$FKL2#V5S9d6UBk+z(GuwI;9&$rIv<$0T3!uT!
zP{TI7sbBG<D~H-MX*#yGSQ0|W-O#ZRP+Pb#831|cDYl}WMT-9u;Afe_5Nb%>EReLQ
zgMW9I#PL1oP{-A`TA?5PpA!ecF)nwuC;=49(3EYs8j*?v!)E9{7#_x<=;KM=sAK3A
zHvf7U6vsXc*+GsBMHC+G;PmNGq#|}sAVZrR_!pG`n%pnj25K54K8SXxWA&>kmiPeV
zhTdiCxhP@l8LG}b5kD?mHYx%}!B9uBZ0L~qFd`V*WgEUg@#mBP@2Hjaia*!|{GT2C
zaF8E?1HgZ3<9Afc`Oh$_kj?QnVKY)A4hR@uvGKcl6dqkOY^ojEwHT&!3_IQCuThT1
z?g#$@8^2BA1BVd*uoX68W3^JV2YAPc$)-Am=ZbdP{2R#8HsHT%JCuV=(lP8iR^NAA
z6IWQQ%fp(XC#~l8&4r4v4}?QdBos&0EiXwMcEnb6byo3%Z`i}OLn+eJ1iW+V?N$86
zz`trcn!dI|5zq{K%T}}*jQj|`4?JCZMXhX9cms07N80?g{gOX~%nj$mSOvDDLE-~d
zz&lpa3y?7!$bSn6^K60bWZ-n*OKndtf+KVUzGr2kB?%UBAQQva+IqG~14e-3FLvm;
zg0ujCg=7C;(<2FiI0)C+ifZAYIG|(rejC58LZSnQfp?rUo?j^OA?O?aQ=5NhnZ)yn
zXn3az0Q>)rYl;+sd-@w&U}J+aZ~%D6Fx%9o_{Rg^3q_E_FfKUMq406w#qL(%V;hPk
zKGX@WTwDJx;E{hElR+3^rS$QcqzF|S9b*e@RE`E)fOqU}xAzDw;xs>+wE4HefH(@l
zzuM6SFDg8@AKhXLtRp-kj5^L#c6LbuzvdLZ%;w()NB9xq0XVvBQ?<k!^}yd?1=g}i
zq2Y=Vy@@*{;*Xm3rz;94++!QKpibd=1kRbUSK@<^i#kqJHiC~I{OVcMv5CE)L!b@g
zR^b0;Wg@mF-J}Ry;A7j<^9UU=j1f7uL+AG^0w$Od1;Ep4d6WczpJwx?dK4aZMmVmr
zU0E&hX=4Wnj@2*KA_;*$;I~+wnvGQs1CFa{)o@T8?}OhlnyQr^1BOQ2U^{evnc^=7
z{s)fze=QLF;Nx|~Pi%qOMu|5@0^i}llVK<v@q~@9Yg7Ccz&~T-Yr7Oa1-x}-2K)bA
zb&7x@8u79%uu&-rT?71IZ2Yzk#orD5KW%(<nZhGtGiYb-+Cqg#V_GL3(b)N1kEp){
z2or39oVYEJ<2c7#*RJqTXga3SZ7P7kqrf|6(zPkYp8?*{#dQq|Uk>}GW0hN9tqA)d
zu*Z(9E~4<K1Mj#gwY^{AHv|7&n}1WW!nXi_haK3p?<hPP^XGz}#~+QYR}q98L2z6s
z*x4fmf^fjJ`Yal&ic7q)0Qh6J;q7G#Uk|)vv%0BB;kiQ}+Wc!P<oqY@e2n;;O{hvJ
zff8Kh3fmFvIiT=p@`l^^Ympf`@(OJ|+m+#9A^4}*_}wZnBMndUPP4~-rP2b`MxJ9T
ztx=H$P>gviY(>>wN&u;iykz5d5q>=Q9p{i$or<5^y*OsfqjkDkdCIT(<bBIllxkA~
zT+smszK*qKb5B3go6W5YAF2Cm?v}uj-@ci9R^UisZ|?5`M?QTk_o~p58~&bqLzor6
zmwT(|Xfwbk#y{du><*M>ewA>L!iNdRTi~OZ5GLcJ&JRZfUgsYR-oqaJ_%fj+=mJxK
zM^y|kFiqig{&~Rj>*KmZ{5zE#uk-T<AvwNO7r-NPo&uGK>?F{1eyoiF{5;0{xy!^e
z%-nD5h?=1Y0Pe$diHwT|cpe8YCZ1sH0DdL_jz7yn;sfw=H9XhL@nta2U50-22@Vlx
z)Xe#W)lV5bDr62SX4!8H9>qp|klVa`G#F+JHuW!R=5miYKB3{^q3C{{A07q<vG+g7
zJ#EZiAfl6buzz6-KFqBQPQjb5Kg5F?Xgfc|gBnvZtmnhrrM!**D|bE%O^W0PbHB-2
zCq@d`H~*D;#&VtwUEzJo58c1#eEfSs_!sWaoiuiGKaUA9evF2%$V$g#yrQB%cfOao
zNR79-2-F%L@kai@@$4wfEhKZ1*L8D%;l^M-$|m7Y3vn<HdlH-cQSLIfCK}0SSALXx
zM%p76gGKJatmR@bsv~fMhhmHhf!FzWs~~kp_S(VI3=FOC{9-ixnM_^aGKJR--0frF
z9@_vU)dBtY;^VXUv-Qh~Y4ClDpc_Dny{dEYn?45K27Z;x000<%SK&4NL-@qxWnc*U
zPvCWdDbU9Ut%@LnkKDiz3?qS8{27ks_>DgLw<>&EH&6q)+wo_oNGjT?@H&69kAa(g
z0^qv8ZtLgc7zaGP6AdTm243(nfDwTSV$UbJlY$QvvZhaR3#L4Pb(ZTI8ugap*MlMR
ztdPNPl|v@|KwQbJ@R31xdiBK6O33lGOiR?zbqcS=G4wi5{o~A`-}NzYBg=jS2Z!<u
zPli%m;WM5J&7sfv=tCmK;;1`}L<+p7f7lSA2L-AL45RGo0x>A!i>c0Epzu2XQs6!2
zx?$)EffxMN1cB$FFZU6+(kXz?;sF0Qy)!h7x<Ys8Z4Z8&qMF0r^-k$<8l_sq!!b&|
zYG%04XdJ%PhyO-w(Y>aJ;k+gWAxtfT;m;_%?vPJSM5lT4M`v34t^C7U)Qnz@#-q=o
zNVVN(_$&_aKj>rNVaot9qXj=@+6q9}2jM+$ff1ByOMvT(nj<JOEkh$H)jB`sJ+F+8
zNZ;rk!3du&81aG+{~vq|eCEw>1|>eN_pvz-0eW<SxlrM?h|Q%w23B}GWTGn_HAnp)
zHO=dM1dt(5hmaw!nlODbWO`-@->orU^)c|ew}HH|t_Z-ykEoe9!8?GwNg#XdS@Td^
zM%rW3nzz-*fKL(S?esCQTj8}X%ex(T)y0&5U=YEbil7VJ?c>lrJ`vvwJ^a*eHvX&w
z`tJk4@wR?$AA}Em41DZk;4`I2GY|_7Fd+2D2BGmN>evu&pA&44q`*>dhhjce9jo*)
zu+B&Sca{FM9>I;?5yxKeamcf(qh@}AH-A1AuL@Z8KLj@V2v9L<8OlcyImR)<<OlSi
zhP-CF{MSAC(`Npg-U1`1cnX*!r}^-s+Pxeaxz~puMH(2y<JY=i<b6H@K1Djxr$|SU
zqniFvGadR>{zd9W?NkI^fFjenVARb%{M0o%Kh=suKkP@%Q7<_>;@v2Ys97+?+dx6o
zhu>$^6s+*!zZ{n+z51-+N*{p-eH?n&hyQIK{&$Jr&Oc&~nxiLq3yh{>)KWT{y2g=G
zp=U1{P{~vo9ZilBzqAj-k9iC5%Y9xMDx~qPIaGMD5C3J}`qPEa`3St=Eih(+H~$#Q
zoaWG&RX+Tc0+0B00jl2F?$nL(nOMfaQLnju465C0Y9I5e(;=(>qvjZzp)`la&U6Zp
zQ&Dp)9Q2y$#$p(IIW!ivGQc6e{~wES>?wdu3=rV_@A)|Np^rl!`{@6S-y-l>{l;DC
zEimqCZ->U|RSh;i3dTL=?a(+3OBJw{e<|>;B4}MOeyn%I<0p6<7{Abmf3eOl>_^S<
z)c0D^jek=YfP;u^0u3jPf5PS7{3lLQfoc3FrZKU2b-{_1J_74}_#gL<_{68Y9g0H_
zFWzbT>KEVWBY<B&u8b7Sj^F5QDBkQNcfXQ*#z&6kAFazLM(|#hNI`m{PuEZM>H3L#
zkf0L$4Z)vvM9qm;1DJz9tp_H4Q{i>{cM5+`9Vl?Occ2q{SjD!%qtfO?6tUNoJ@Gwn
z!AZm5!Dsl>Jf1YgThF9vK6-f6Z+L`0iMmt^ebQDRMJ=rFwaBPB=A`?4Jb2JY@R$%x
zo0EJ}Fv%wcC*l5&@z;SVI0+tmrShb?-VU5p5By5@{%euE?dD17Sx@2Xe1u>3;eXSc
ze{z_0$1ox$qd&YVYw}Em*D7mr8S5O!3uQ9pU+b62H9iJ+`WV{nV~B>NuK#APpU-@{
zXUBkh2Y*BGXB|;<vQKwT_UX=(S9oXg<W-Kq?3q7mp8SH3z#kj}4u_`Tf@OfGU2}BG
zLT^1&77x@jh|l9wYVjJu!6@}9m-$FuK2TB!;+2wb@-Z^yIUhj^Nz3t+J~<zr0{dRo
zc?v=jcunq<5-}gnKE-D+pF+i?%Uz-D-RNVFibR)tR@r;iM~+5|CRa3G$`zqlz2Ym{
z?HylHqndPz?(`A7+eh#yYkh<FM3IlDMSh-s!cv8N98QgSTbx?pZE<Q6cq|Nh^-W#p
zqldaoOV!jS=qO_QCP!kkr;?MifwPXNIrU9%AEu3G=5<&er-9!q&C}-k$TdKDC;qgN
zGwr)RdZ=tP-=`ghjynxj`pv=S9CO-JKGM(lc<~O)?B(8n<}G(>&|B_Qexn$@rF(xW
z6~C6fQ)_(m;35?CEE%ZiF(sfYdfZ#l^l<Z-$mm(qyrrhk^pUDyO;x<|rjvh~x#>H7
z1aC#`Hw=t_`hz|WJnW<AMd(<;_Dvm}H^-d*u8;70-oi6RvZhP9_cNw=3(lZ)Xf-qA
zdRRSwp!YNG^wD#-j{`@c<85|mL?o7;@v)CARhH(%%s6D{4fJ6qdcbQO&GZ>ZGxtEp
zS5g0~B6+iCUhO0NP456^KFZ8j`II&D4?cn~`3SzxD#ASVr$xO5`E!$AtH){l5u*Pd
z81`vPee|sG(USpwBD=qKa2}j!_7T3>NBDl=M|n8$oR6LteDq+85)co!4S_Q2h?<F!
z06xW^jxPqT!vnt=ie`A=FZOmQahby*{@jf`V3^;RMCu0^zSl?5eGWxR3*S{FUS!?l
zu%%4A?ITA+RjcY*I9d8Ag1VSB$y;z14OLw*3G3e*==iLSK6+@P)%EaY<p&<;9<y%r
zQAD+)D{5yIqmhAG&-lnut>|*SEQ!peX9vCIW)D($O>TA^j`s{qz--JBUh~21g+6+!
zq2nJ0+Y#dH;q1LW(o|Tw7j3Nj@4WwJ`>a2+ANMvpho3lIHPHPzv%MXdGuKB?3OXL}
z=)XDSF%;TI)STlS3KjwQ`&sra9?6`id_16z)lx9$6Yv*8lQwowk9zAlJ?0(B=@r1|
zU}YbmsK!UpP9H_=`8ko%vroUrN9<l7u^!fUG79kw6E2)I(2X;EM(7znBlL`!(6Io2
zS_hoLVUE}Gct#a)>kM}3*9V(v^Ng##y+7ld-rk?_U8PmGcB7BAPT-MPJ=tfx$My45
zJYCU;-iGJ$bp2$YqPf$&1DK1ncrA2uu|qU|tn{#NzZDshHs|{E{9K=&pPPaFQl$fp
zJfh}YTGzCg=HBk(O9vzyS@?t8SbFYrK5@L@Bl|vNe~3SAIGh>t)^lcox1KYLfj`+`
ze~m}-(r2#o5vJK*tEDrqfCCtp1Dx<l#F;*cII|NvreL#F#hrN7$BEayBPfnQ*kfWS
zUgfQ)xY9>Y26{Gl?D>nI@=^4Rx1zHO@oN~7f)!`gLg8un)4J#^ni{n-IqPyCeH|=u
z3cm(%7G*#eeA8QSUKvX?Mhb%Su3>$<_^xnXvv(x(sK2!Sork^+j2jrid^q5>_|2c|
z?a2H(=(x;d^_YL7k0NqZb7+2+Ww!F?eHTn-sgL;%c>$T!a<X8aw<`;-Vc8wX$$~@j
z;@kr2L|vZ7qvpZc2FrXC)A!jvDL9+_(dBk~M|$>NZ$Hm|7AbpgVCv77H8Ak9^VvQ{
zu+U_E^WgA840L1tK!po^hRMQ8Z^stW7}gTD@J=88mjoVDy)HoGT+7rs1xk^|f6iEM
z1Lu&VI{!K+zjZY+YM%359|Jc!1&}FmfZwM?&haUcb3XIX&+p?UgWd*`RI6G9$%Q`r
zR5LpN#XkJ^_&mp#yw^v7x<)rZ6Oh(ri+s9lk=<oh{*hF?C%jS_)(k9i^_l7c&fft3
zGXM`E9B+ZY&PNY*vE?XVB)Gs)R&f$e9~Q}~98i>tC~`|s$}JwrlDH0>HWyFxwzznv
z!s~*3y9IA_&li8wM-N4$>p2V^7qHrVT+>+mn2+q^K0bWx!~dB#{}PHt>zyTlG3}!(
zHRqP>_BOC&uaAMdefaP3;itJxIK(q54!q>~ZEt}Rp9o511OoynDQDd^e2Fc&*xR#`
z%X|#sbo30=Q^`|4a?g0nl@1ef>C#Ewa-~yz<Zk!jzte~R1t0!D2s}=Mw60t_#9Lr#
z)Z4()64tbZXKv|6AHl6Yf{o0K3PGQcmimOWG|RfzV?kT`o{zx~y$vq&sflGiHL<M5
zTmQ110zYsREb|FunNJ|geEMdY?3)2yQ$}3?hxvmU>cH#kW8M*$E%uI}Y^e|bl|KAe
zd+_rGt?WJ@fd@SVIRCpo{O@`5FQ4SizZ|1OKA5gm?{X?Oks>=o%WHfL+~{MV*@yo*
zi{HvWtl&ldFL(>A2wDQ<jo@D~$cKNS5C3AFU)aY_9bD!kaJeqP?SubbAO8D%_+R(o
zAM>WSz{(=lIVn<5v(l$4R{C_sN=mubbt`Z7v4gXs6EX9yw7bNW;gvo;Qa+g_=R&T0
zu6JPN^Steq*RtedOgrV2Sk2FJ8a!G_mUqFeVfe$uY9II^5}(RA*QYYh<$8~MoSv>i
z&v`vwu<AjD*Bm-;7)xxz8PIv-MLYI9RFL>Sr3xqnkXOoim$S?nk<o#p;+vHr^SoaA
z@V@$h9|g>UV+?B6`MpD<NGhnTVDZl)I9aQ#r4M_=NmsBEUyYQM>siJ5@TKywB0R-f
z=fdW*M1O&Gb2v+Iuj2beA=aEOK8!QhkQ3A`{B#FVtVs%qv1?XoP7=MEG}Y0EdTC?L
zHH0`oAIOb0pRsr`+^!nJ5+C3zpH&lBMKKaF2{!mQXDQ<*KEsEqDJ;Xu(-b+$(Kyte
zv}z`P2LWX6IZu8Pe>eh3{vXm;vMeWG4TzJKa&aw`lN+VGRktcHs}73~`DWF_N`g{S
z&)Uz5jArSxA`$ldS&_oPORN<L{#>I|v(XBeYkq@upA{(>yEdrkq^Dcb*M^0mapu~n
zVxYK*!IZA8ovd72D|;(su3exgR3d9r#L_??t`{HXm}?I~`+WRq186O|O>Sku1Gm?{
z&EoS>Gw-le5&CG|G*$u7$}ag>Cb`$0F4)GdTMU?|m$c!GgKJy2g0*vP<x1N|mgU-N
z6gO#WQ{1(R?PggZ>uzVs1(5DiL9Kg<)pPh5!Edux4)+n<FY~f~m_n@I-F!Cadu5%i
zZz1$OTu(u8z3l6dx&C3U2#8MN=u(=bsc~lYI_0toFp!ciS8rr}+{87Kzgn6YXKt9F
z@vDSvKt313(gy0w4Q0yYhAOFI1C68&R}keomR$%N*9(TR8=94BmAyctbY;UK;>Rz6
z;K`}rhNA*8$K1&K-qAaO7Adh&t2_%oUMkp_P#QOu(1&YSawSx6Y!&V7jW21MRZniD
z>LMQr|GrYR$&e;CjU+^s)Vygct3L<BX47714&zU1xavOcGAe4*&5C|IKrecm&@*<k
z9&@{t-yCD{MMx$Ms?7=M$Yu(0vz*e#nVWBhgfnZMO2eJ3ook@t*-S;V`B|k(PIPn3
zEn_te-BQDrNeWNdAv_hu7CG$(w^XU@Y>`C)mG@{Wvq~k;k8^$_{G+6yn?4+qUT%@2
zW}LZ|-{#=usm%~ut6BR&^u*R$AG#ctP@oq<9|X`<TV)<X=GM1a-x5>}euP3UT<3?S
z59b#WVmf`eMtm4&o=;V-23(NqgwpeGCC<B9rUcz^Kf#?!=Zi{1N~-|=S{JS%6=P<p
zqXJT@0#Z}~DXM_fbr5h=KrpT}+{jwFhC|A9N)5QwQ9|@6AGYZ}h#rrc+hQ!S)ZxQ6
z<-<1eVVm@U-L*6_m!0%kBo;EaQCDtLlhd|i%1RA3^e#Uuq@Oi2S;aC~DOPUPl+%Z5
znX8&T0x`#|c~H}kQW_ppc;PqRjYN3a_aU=J`hX8=Z&CA!Qn`Je5~U8Tmnyd})>IOn
zYJGc3I=6kF@^*V8eUNDlncLrPUXHkE-rxQ)ODsoy)kYL!?MSJjwulfltO*j!cWSoP
zL|9t~Jg+bs0`2&WQmMTfjk5sMG*<gfmR*6NA>MD~A-5yS%$1SR{FO@1K^g3jYIlr8
zn~y&-$I&piLt8Y0y$U}Gtz&Ro_{qR~>8X_b*3;)F^eaW$DmI4j8(Hhq{I>EAEkTyx
zZnp=PAfKfjp7Fp$Bu!|%JbS|j|31g_lQJzOJ9%~;JrF7ej8yH!KHq8B!bgDjFue09
z@D2FW^>f3|D?IznxWPlVo4Z~G?6jE#44b>&RQLpk!II?vffvr>qo#W|@3t`h<OsOx
zKJFX%cTZv6t5B}H53$a7`40a}CF;YT$@HO3oh0lzMj!gshYLs2hXj2nrw?`X0k>)J
zK9`VrVXOEMG%sYYePeI|5Isbp(~!NU!t9++AIj)MEq%zS4;Q8ALmf+gom;r5o-j@H
zp@lw3<KV%XEScK{X`Fdc2X^QykPR(m7j=?s7jgE0lP6B+%(99#7=jn^r<FK;DE_P?
zYF_k-q}PMyMXw((=)w9!tnYPxE3Cc`(%-_LX6VcHz&XY^e?cbi#V>cW&H^~_WjJ6w
zgg;FVzsc1;gkPb%xCKNH1sC5B&lY+JO2xs8ds+SSkx}E!OZYH<eIVl{Nnv57dC4Jf
z3zxj;ZQ&ALupSEcA!q#V-lgNkBlIiHOYZ}tb0jnZM(mf;azP`3@aR^r(bw>-RNT<3
zp3VQt)tX|J)USL~;Yl&!xdD%1efi~XJ>eq2aPaagHGD+jZ{~PD&nN?y!0k$a@JisT
zJkkLE<QO)-(v8nB@YRPEUhxzD3ZJ>)N_4grz}Z}fIHG3eV|;L=I9$yM_yH?kF&s}0
z5q_9j(yofrhv{;$yDCWtT1l^I66xM<UON^+@E6Z$FQ&S7g2MAz$~vOvwUYq+3x7KQ
z6ouFMs}6SZ$>7?ZtbHBE#I?J@$9W{*_g^sa89`lpouYr&hklQu-|J0pe71Qt>a+2E
z7SHmD^IO<9$`5-uA${F7kZZu7HWsgI0nXzF*mYe#_^c1U-y8pJUM*+v{?!bByO8^}
z;@jn*^A1(y5Vwnbe0wt*55K<M3cLsZ^$SFp*Q@oNiZWaecBs3amUpTd!t>hk7(L&u
z)y(urJ>NZy*5kp2?>>rhIn}`3b1ls86?-fC-W4oi;%esit`~v><eGTioN+1#Zk+7R
zzrWQ7--Tb<MqwPluXp3SKjX{;BcZqxf10BQ;=-Ze0sM^k-y)+{ng@1*$vOO*03($L
zb}KxklJI+g_ekY|ZgH{{IKX~6j<2%^_pvPQlm=U{HdpW#o7&^NWLvOC3&a&Hlg9}M
z6l1G^Yg%4_0Y3cHgo95wqGrn<&~UtRh+_r*B{a?evI_sY!czc*e}h#-(Iqzx0^P&T
zO*~^Bc5aF)eaf$JJ7D;AQ%vE>4&g@%J7aI<3CrS7>xo;hka6FN-2%U*d@E{;{}k;2
zzUP2*#@7!Rc5i)wHQ_q!id%VJobx2nDKE;e9A0W%?id=64!jlnE8bzZ6{(K8Z2_zJ
z8b@5O2ym2l+-)7=t0BSLdSnOQ9uf4hxAT(A;!g|o_BP3X`?I2*efvA!HGBs|y$0PK
zBW20nQ6x$>WZqH9nzmw+{r~9t0{EzkYyD*tAwgJoR}5i6Tw}yYDW=GyDN^4)L>q(J
zh=>s>u0S!R6!R#hDdkVLJRat$r4cbVRjLa`Oo3vGh>=p<Qp6MyQ$(6t#FZkA6mg}1
zky8ABXXeb!++jAq-_7iN-#KT_oH;Xh_U_%g&(dtC1y+v8s(r)ALLm6;WG5x~X$CJM
z0e+T~5&RtHV<>&TRr?gbK-l*`yG+>eKbvw=_##hEFqx-b3{x*~8R$ERNm5>P@h5l6
zi!aGDFsKdMMYYsIAecPw)Woq)ucE4D5LQt#S(0*90pmQFq)zr$;k@Q)r;>59p(Vvd
z3dg$QTkLc04&ZAAs}>u|g{-{PP*!-oygIpRHN~fYk98ED{sXo^+A<2Oc2Si3i?7M+
zGzWRryH5N8r2XoN_H0;P4YQUdc(q(n{i_=|8-A$<<(Fzue#wKfX1)`hhQV3$h*K%b
zjiQXKp{+<7hmojj@KFWLfHi3@&+$xnE+}WhbJ+YtVA^xDpzO!NOTk6uc#Y9`ZUN&w
zN-n+-I6V~EXz;l#Q~tUAVrE62I|&^<i&{{pcFxGD|J+&TReOp*Z{R%j*OIy=>()kP
zhu2n#GO~6C<kC0{f7gnD_V2Nn;@JNy8zG^4mqH!ht=-PJ@=D=5XgK=!*d<5fdHD@9
z|MTTe%X@TUcplee?!<!jJVjTx+lD&qK0lXnWmn<zfLnU?JTBGZnVJ6QH#^B6Q@PuT
z&p^gKzt6DKi8|TepT*7*X{ULZ6CVWsnk!hJN1x6kq~A=7w>IZoyb`#@zvejGUE!3*
z^KmL}rt#4_-jnBDvkEkK+{Ih67*4U_c2P!tMZ^Ch4r4ffRprFR7p;CZ-)OiTb@b?0
zl+SvP6i)eU>Cvy2v%HFoa2R%;GVCaPCD|E=e}-r4qV`2$-AKq<7KL@VQx)4R|GFu>
zD6GR<NU>zE&s8rL%9VOOU%+3#MqX~;P|gAyW~&!T_2P(}7Qgn%Y4K}#WjjOvx=fx3
ze~kndTby6dmg~i@>$zMb%Z<2lf%PM@aV!k!106>l@!oigoYxywhN%Hpypdt*l)kYN
z>Xz}?h)WZ+plxgw<+P1EA(zHsg!_dOV04Bu@hV`JkIr7mvOc^}EBpDv3NAOu_FLo*
z!QWEkRDKu!v<!EmqQpgC5wMogOx!4lNDC#J#i5pIEH{@8Y~!J7!TV}4-oI&dTJX(J
z|8Jghg0rb?moEG!Er)-TPi#UWo8oAJ!fAAQ(|l@ymN<AwpK8$_HL}S}>?UYpz&15H
zsqYa_b;|&3+ALe&v{P)3{V(>G-o1z`@UvmQSkf<!lpi#_cni$vc~K*qd9lJNeGtvO
zc$>YM7n5v$kFXbcu>*2x97g9}JSxNYB0l1z_`i5g>TSjYNLQe~c^H?^NH;gHmO<RS
zMe1$d>Qv6bDZL*|ThijCBB}P$a3}sf^zKGkY?G0H=_Ipfq|q&doivQ~D3ZQxnd7u$
zz$&)Pg>ik&NuiEVZ^^RCZ=syFIJ0FRHP^q#A#Ux26MG2Ncb$eBMDpcB(8|RjXV|KJ
zG$YZ<%ZFu8Up^|mdO0KBPvrz#@ks)OtaXIbPIhK+zO~l#i&y%{ZoV?XN&Gi<c&|({
zTA;B*3$IK=p^tHf@tKTEk9<89UJcxmTCW@dp2lH}@hhjWbPmH8GOo%C`L_l|LX6l-
zMlIRC)mVsn1tA9~xAH=?wE|UbFkC*%LbSCK@)l>e&X$S3b)}Q3LG;!(ejkIdbt9zp
zL8wBVT5lE0M`Y_BRBLe<UEF%Wi3|P1;7C7)gZA$fD(L^VkjLb=Go8$Q4BBsJIVmXk
zf4i2;Elx(%w>s^$gum-V=TV7y@k1()%k^tpt~{-5D;MrpY?}=G+Sv7?brTJ4o60za
z8GkMwN5vA3ZFnbzb-7~O8t`cxMhAbFXFvV@ZV+TGr@!BoN<V)$j!%ETTgegFo-4C*
zJF;^;dbYh-loi_-!;;<;4*m9}jH{j~ydJovC)-c){CL$bL;7k@8PZpKiy?kB06ohP
zzdA%l{MDf%;*nRAkh9F<SJ$!JCOML?ZjmGS>Q*^YukPk@uTzPUi@dteXfKXBMkwW%
zc2YfMd#NdaE$yXdvfLcmUTUsvFNK{iWkzZ#mv~D-?WLB%j^4jG>eSw0q3_%>KQH9G
z_5HkF{@>#caC)cs`}s0Zzh58&_4}ushWVHh&yeB%19q@Ixr17@FD32$ewS1FBeeJX
z-3H&r{9Y#x-v9f3PK@@tzdztKh&nQR0o4yVDN#Se{8`EG=)>c;qd*Goh)BU5_#g%s
zlCBT#7>*YHg+qEo&EYQ)+(C81Ia3G~_$b-Jj?top$c|ZnDMCh%cHo{AcvP`tE;yTg
z+LPMs)1K63ZxOe<n0vO=si8>xVGsB452u{cH|Zn3Kd5&{+@oH!#Gpqzd!o=6JB4F5
z+H!wq1<NZtG)KtJ9gM3vq;Q%`r<{>^c+mC1owQ_Fy1jE6<3?C_@~ss+<)_S%o#!BT
z0}f;9cr8y}3x5sI2VYC?s$Rohi!$J~5n^CRyhi6Gedafz4zFKRYn$>~;ka)1FzNHH
zMZ36xUBynRc!<-kq0qPVWS2@DqbIvIOAmM9yXd${C$g&(`j(#TIwj>^4{|B*5Qw}!
z&MyCYCClL)BYOUN7kl_R4Y<X_Hb3Krhi&uNLR+V>Fh1CJB8!ESSuC6dt_L}ZI)eO1
ztd5kFyAebR>h8fZX?GXN$+DX^IhI)LUe0ojGP!p*vxjf+=lpLBl>%=JmjZ8$Q34fm
z_}{og&g(tnI4FB4OD#d!Gl6j<D0|x3;+{j&;-16O;+s`$@y)q*i*II`$$N9z;$Ga5
zL@Bzrz-dWf4IF6?!rl$s(B4h<hW2i;yZ+W7Zs@I{vZ1$zJF%bO0>(1Pe+$P59PVEr
z_||e%2sc9T7T#@OO&lM53wtcv#-yG0a2A8@v<6xX{%M30%+Qkbr%@2l^Q8-Q<jbE%
zGtQp$YG(XK16T4f;Fi<$zNdgcio@vXzGn#6J`F?_e}UjWBZ2es7^kVEt&s|Un`leJ
zZ`0ynY4~kg90;e5QTy^Q5PW+VUTKlY3lal-H{%=$7pFa<rQ!W!S)O~W<oDllp&hgz
z2<|V>VrZY&P_I_hN&bL=^APNRmvJ>@O8$_6EBQ3_-_nD37DC}Pj@~%jzd-OETKO&b
zfh_U|w%O(XJQui#v{Ujwd4b5EX_{)0@5K)Od4W^;KX^m)=S9q`jwwC?+~R*n6nFy;
z!~c$07CfE>PXm90S}+X#CDDjC#r}7fIEfoj{uNu?=~NC9WyN1<u2|yqSMr-yem190
z{|5nCaa_E>li0=w57tA#(xHPZ4Mmbeh8(1ZEDpRkNEjR#e2*fjd%}wEEp&npV@tTw
ziFVN`{5^c&g1Wfn$YSph-sHi-oZumR2!XfIb%$t9Sk5AcR0{H(=#_>X96fXxg*Nhe
zQO1uku0}k~IGqhio^e+`1ME`ENWGsY9P_{5=w$GP^2qzN9O=7ePNj52^69~L{(}JV
z{pm*?ZR#KF=dIr18BQtgOz|JaX9c2cknR7ih6RpvacDmbI`Ky#`C$n&AC6HkDkXDt
zB#R!MD1f@7Q_;E}ty<I(#iMHesHiBs1+-;;{9SD~c{K9Mq@BN0Uh4KqANKzq5co~q
zVOI(i4t+S3LO<ZPhH*(u<V$Cs3{PjF3{U4su8-sTL~(hjuJajgKzW)$9UgUV^5D6n
zsu|zm!F~C8jGt$`l<N5Y0^9jW_Dprmweyke7`ng;%Fst}nBL8PG*6UuAJO^P($iyO
zf$O1cqh<raV-<`mM-*NO++yb+bnV85Q@d~ZoYw~C2XlfS?~z`8d`fzCVh~tudgnEv
zj@D0j!{*D6GQI_+HjXad3f$8ACuCdeU49I8*#AT(kn`M6@idH2`T(;jPXMkf*R%3u
z##P7_J|&ACmGvV?AHNCBo&01mDmlLU+$~2Q#g@EVDv0heRSL_zxGUcP+}453PRsY{
z8`YnfI|kLzZZ@bqt3jO{*voh+)scltejh4&_?7&A;1&lm3E)pV#a(%!oM2{!TrD!2
zdHKlfk-(=JnG`2w%GRB{ky~M}@~TmXS0{~B&2MMi+^;BkBZXc0EU9{Ol4uuO4Hb?~
zZa@vV!n+t(%N&O(U&+q^ZwbfAxuSvYaaDHeb$QB0@rNEiC2qMLA3Uj+7jCJa5=i2O
zt)*?iE%WN1xKDsq`+pAOGR9@4T+aS^TntI%)H>*EsZY~|hTs&gEs1A>oTAuU8a{Op
zcr6a8ffw`_2%eTV-Q)yM7mIVn_~2<ZY8=$wF_tt&&Be2f+UY6M_0zNEh5FO2GOJGG
zlPR%;pPA>x@ieFh&dBNJj&5&q6Rw>xW}Az9MulYQ5Aqb-1{_8g&+uJ6XSz7QyVRzm
zYXiH|bxORL9{iki_4uYxhwabRGOvQt!FU*@Ht~9=7%wnzC6BAI=zLx9EG3L(oX%DO
zACAN5#90c;7Z&_6TyE`U!JC2E?4JRiLusmdQi#{+;n}lJdjmFLXV0N(QT&%N`Fm5O
zq4zH}`Kd$rb8))VVYB01baO{_k{0YNK#@Zl(oi?Cq;WWA#<?Jm-nrY<3w3qu-xGP8
z^KWDnc0|+84;8lDKK3b*ZJZy)IQ#12mB1~&o}U7o0&fh)`FZTZd3-)ZC-X0YTq;k#
zm@Sk2i-qjk7re-Rv4K<z{5~<=P~u{T0}H;10v{pnDb^COuN<CGk4awF748>1`~ts!
zA|+Nqou6F3Fn>aRd;WxQ*PShYLOHa>y)Y!9oCy2D>C-2Mx-SsQ87y$D(JHozh=Q;g
znkE#w$EX^0GBlHMWk=yu+U$7p3GW>Gw6GzWP~8qGd|?(t&UILUb3!?|17|kgGlg<C
zvL~vmoosj$<H|#YZ_Z*E_cs>cJx(a6Ls>p*SWci$eLu#yvaImqz%6~x9qyDqh2+T{
z;lxFWPc2c_<r+))#Tn?ser^Q{J-Nymzk_jZ*Oi~(#rrDxiNJ0CP&-3?&VLl-1#?0d
z`9yc|0^hb40k~+GLU7N6M5+`rPa#VbvchRdqH{gRIqB0>BEv<wUzWWZXlfPsd*ON_
z&7fYm(~V|Uul=%~mzHw*xm=cta$3F-oW4mojo{=PL2&U((3Z~T*8tZ}<@p?({Ce(5
z{z~<tMZEBb@}2+0d)%B*K5l=c@ydVKNzr)aAG9~on@+8kCg`U{^>OTjDs`c^+V^nA
z_HAQa%{3lhS6<GwFS&EXRj7udrO&-_;~HWexwt2IJ(22VLl*~}hF{=KZqTlNG46Dr
zA?nj9homn~#2C`LzSNwhpM5=Z8&jL?qMv=$)HeFrcM)jqZ0yP}_Ts9WeU|{gl&)cU
z7x++soYDK2MjZ_YNKR{@ufi#!mUsn>)iMAvVW$X%YscB}EFQ%eC<bP;L7mim36!8t
zzKmv^2i3*L0Jquk1~d1o<!na=6B^P`H$f*}EL)e1brP#E=$9B1B#@Q{E}24KT`2Hh
zQcWLXkOEG607hK08UniK307Fgxbj@#xXBI;g)iA{@VLABS$ui_{#ALsrd@K(AXBI#
z9Ko@Sb52|$j00EGof~s;>b@mR!Gx0@LcIvCkZ06j3j`@2dgH(!ze@}Scc7y8u8UYS
zxQlVsJB7Caw>5Z@<=OE-9CfmDM&QoPtMft?!Ly>G#>nRio%iCG@OB{t*w$F6sPUH=
zs?ZQ8_#BlBoKn;)LNsycj32{+yAj^bqaqLrHKHK@**8K3{uBzrxsQYje4RAE(MdLw
z`Atp==IcUR!IF6?zUpm~hI#SJfZgBE=@FdG_#~8sOZje`LSk_zOwqBpbLkM^Kc)F?
z_<!k8L8t~$p}#;#{19IWUYhbp;Sb?Pe=ntEoNSRl!MKo@%PkNza1sIP-{TC0y?>9h
zVif8wr9rerzh6(_mhSeWOtf^j-{36rMRxf?vjpCKodZ?;1ww=7ps+MRztZFTJ`N*1
zSJJo;ZiJ^OF4p^LMKuWDH^7tQ?q48Ov;-A>YPAv>2wg?#cj49I&{eT4xZFHPuEJ*4
zs@E*G3L~!C1V3mEHvGS83*(0W#idT_Fjl_eanP~&Sv*DbudaA5cx@@TqzZNPqj<i7
zBMt&zz&N+(%F{F?I|^6w31F6`qc{b;63>pEo)^46RJ_mLyW#^`dWYKzvC$nEy1E!<
z^zOBx4)?DfE~oL;`1qYxjjKmF?KG{g9_`eij9g9Ow&~&Oh>&}R^;WaqTA}B^TC5V0
zt1%k3RpDwp2uG;z73w2~R6@>@4MRHY_%-EnRIZ`yvglp&6mWgCno&o0uUXBwioU|B
z9j%+aOQgIgbi9!9Je1pT7u!+X#a1G>IFS-ME9=6_NTt{UMM~&hiOwryOT<~oU-FpT
zGL<CdmZ@Z$A+PMEfe*)FOtq48z%IOg5W2P>a7$`kI|E5`;dO=3wbIY-Et87IwQ#5h
zt#n4i*CH!D(QZN=(Y_X0>B)74cL29IG!*YSdQ1Q(>^sL#=k@jvl|iW(`YziVff9e0
zbkhGoXy_pn`g~G&8n~s6VJ&ihI_x0t+=m_KHzQw8$~P6mA9FIl!W0<Z%o4*>{Ng%%
zP)~0|u1m?cCD$F7wn}{xFRf<5(pt7z`k0jXiny{-;QvaC(2RVg9p34wz>)b%T3Q;h
zLi%uhRO*k!M;;q79sgsHU2l}+>qadHujf5Q8c`b6=*5F^#-Cwa%?BmF+KapLYk*s#
zI%+@gr+v=VxZ3O=bxL$1@>OH)=*^w{s$8o5U)?4<TNZOFTM*W=JDi%0IAu<7k|+is
z8Ej3J#f5Z58J)nit_DRH0->_GjB}S<e4gFj*G|zTN^Ay4!>t!_WodK@g8JChqmCGk
zZp(t3W2xjRmNq+`oF${XI7@E8Bg@2F<s0zXFqZ3_&<)~~L3;6+K&}tnu+nbrhAgd&
z$zz*i3fU%}DNUD;{9{JSH{E0K@Uh=e9rqk>LizQPBIhDsr(wJB<Jr*Hn`JKEI9AHX
zYUFYi!<~X;Cx$!Q$W9D*kJ6j?Sc|Y%@m~}JeV{l#|3zCLZRQ3Qo(J5LV`C8<nge4~
z;PtrHqK@&o3EyTw8bxk8W#`A?Vm0*r<M3%K$`Ruz9WBe~IEtuc86Afk^u#FLoGT(a
zFm!X!Xo-7pGrq(sB};|m^w7;?A*sip1$Fp*^Bs(<WL0=2a7zqsMiSeW>~G*g2#xJG
zG9u=6<s<DY^{rdEJzhnFY1HAzt-Bakekhz`Ve#YE3~-9OaVDssv6G)ThWz9Ei3#N&
zzn^E=ZFtTNUCy~p?&bWq&6W$mZFp)iEdaOUdnq)6w{M0OeS|r#x2HL-w`W9L>q57m
zg`^hO5XBAsx&1uj+#iKgxNZHpqk`o*E}<w1210ij<KyDg&ZSfE&j`RBYV}b8?qWmp
zQR>OAa0;R&z<2N|=8l6hM0e(jSdO@}5b|1RE-sPw@1)X(*K)}2tQR30AG&jeSF$$;
z_s%WAyF;1#)n>M=QbvZd8{a7}9Zcxyq*^g}6M8#wQC89q*`dDFX%O{CocM34zKiAd
z3Aqt>_4E31ag}WEF6>G?JyG~9Y45H%(%xOT*O2Vr^%U0+Nc(pkBK!SsC2M*>*v!OX
z23}2qfzU)FEXtjUZL&LePjaHK;N&z}ws!YcC$=@Oz-fF1H&DN@6*o}deNGBaDiVx;
z(hw&J3IC)x<Lv(=_J7i1mRrhlDVEzU`!xx-OjF$M87ljA&nOw+dv0?w)bD#HIKi!O
zXcCJ}VR){D=QAuGCWaG96;^i)OSo#B*?*^PYu;CT>}&ijj2)1^+}lt3a_<Z-ACbP^
zyNr1b%Du;&6set{#`^a_1mM|-$rSePO!8gYE<@}-<xXZ&H(uyusHc-B$evC{m#Bx6
zCp#_MV0Nl(bn-MOLDiX}XOYRXU^N$qoN24X4RRRB$#a~B?WDa}iZ5mHBt$LwFnNm<
z+bZKV`G9QmUD@V+gJb~i!#R&!y6+aJ=6Avek@NS>lAhj&Qyt~}eMedBm=oU)G2G4n
zDhfPClWOHsXv$nCLsg6r75Iu4EIU14MIv3YJuk1v5h?bq0w+z%5hp>#C?}XgF<Scd
zt%WSKS_<J&Ya}G6m~)0~y^w+}9>=M-IPIie;nYwuQ;z1;S<=|l4bs?DYzT-xAf<5O
znz}sokdq|znA7k&RZloAJ5b&~O4jcm&GiPSrV(rR{d;icxf!uG7RESk-2Xky;8CJG
zP%M(h<4c_cs<(C+gTs^Zfh=pp16c<1ft^mAu3b;dvW83(zwBEuV)_`gXW8ORrxm>r
zhvEEmUTdcFS~DGAEvMK_-!8|0I>w!XGyRwh#*8I0qBAmb%k=G1S^qY+NTm1eN1Wgv
zsl;22x%lRO=-Zf3@<pe3F)%c<-0sRuoHK>w%!HgZGgmq_uoZcb6#jIf?+-3^qOT$1
zavt~}#5XO-g$Iuc*CW*vp<<aA)hndS)mWC$-oQ{b&0<Szs*kfn)fwT4|2ycs(3lmq
zYs{J^qcBU(WdE!=(xq8*Wi)3klF^*CSVS{2>!97m@Al!Azbl8;|J_Ye@w;2(FwDln
zB4RZg@s}?~Ii;^77^CHEpIs?ko;^*@h}kp6jOa1j`Q-h){{GqcRtrhLD@SX#9Gjfb
z_jtkj-fdzCrhSjjEqV;=QO8pBy?7RUCUAX$OruWnw4`a9gi94Z+ezSQVb_PgXY4Ne
z<+0)ducC`%C}?H<UcKz+_jbt0e{YwQXv4Il>2=|cPKD;s^swQ_fa^<cHR|wt&RHk5
z8_hg4NThq@A(}=O{f81_dio#gkkhngvfW+{z7Mw>?*O;i&D3;CGygqKly!5<Ag6_2
zeS|spG2qYRFlO`I4O#HxcKrKIz%BN_Pj>v;({}n&9v~jy--E)^|L@~^!I$$3D(02g
z`FXQ}TO6LZ1o%Q6Mn~qY<h1@l75(ZD){!5~5TDOnANm1_TYUaOgMqWlKS&DK>VD7(
z-s1Xv8g?5#EDQb^a7$O_)0o=u;{w0wf<FGR4+u-&e@G2m4E=DWOpaQ7^W^7P7Hi{>
ztHoi&u6C(YxtI8QaF$a+?NfsH*W!s+kn`7KO%WwF3U5<=yOS1mTpaomg}!#T6MTz^
zLr$ih%EL|!^+@eeG(gdd;lSrE2NF~SLU_~~E1q<se<Fo5PLdRUM7+i0AN7_E{0Mg$
zQv*K=H;SUbNs#)Fu<sP=L!fSH??<(ALH`l&GZ*-s;6Ciu7W9O?w&?T|yR$%OK^}0+
zJCg<YZunbR6bqym3yS5{ga!B>7rC)u1ofhSj~K%haI$}oJEV^b;*8davTngXZd>l*
zeEm2Z7aTBrQg}xepD4!Kg4!>LI%2$l7A(DQ3a4zd+zB4~@fhjgkE>;{evI8T4eF2a
ztw;*?kC!mNO!oH2c+jlilZ>wuWAfvTvcEr0NqAvICe1>8r<{^zAs#e<GO}<e`=|O(
z$q2s}juOfCm4&037h~e{^;0~Rma$nV&RdcH7X@v}>HoLWY2TAqaO)y9<f_?L$fMas
zG)MGsDV)M)X>O78&^tIyE^2gI_M=yeo^g`zP>D^csPE?bURkfhS00J4TTb%*dyJIV
zEE1a}oWT8!2SESiMyd9bu}%=?Z(Ynzv9tZlP=~WWS;{!a#>KP5<|o_P><(cT`&r@a
zPfiHuMl4pLRxwG-W)_e2Hq%ex%gF2D{>9ws#oXz|d!^mQcoaIk?{U<LQE}2KJ%BSB
z*{sE3EJpu>Z-moL6aRyK3SD6SA8hkU>qeo4{ko{llC?D=Y?1#t1v~l*-$}*;p(Vql
zt^d7EmP=)7MwT81t<901HBx@*QF?d-Hh4?PfMt{)4$B@rj5j1StPhXn`Yl|K%W-@d
zZzpJYAD+WF-q?!zBV1q2^|f5*0eN@_*YTc9$RCpR`he5kfgpsrS|HP;ez3^4Nc~8-
ztM|W4_NRV~j8A=e79O9*(515a8on}8UoR(V{V~}d-pu|*G%J$z{|aPs|KD8M{Qu!+
zBi_YG(h6&tVvoozkpGcgvNMnDmfk<=m-R<`a(%co_vk36=C3eUZ8!HQ-f&Y)9$nse
z5MKzK3Mp*}RW3d@lX107q)|sIJjOHYvF&nZJ+?zydu$(B!&CYx=^~F&;PgOpBK>rT
z6FY<x#7~EV*H#7LE3E&t3U~&Gk<35EhadM)Lj80F-U=341d@Cc$xk;s>Hc&Z-m(eY
zgqnN_)X~JUNnU(FJL9x*)LiP9V0@}mna0fs%i^e8Qh6DL`2-Hb<z+R%{?~#p0Hy_e
zKrQOz*CG#|`!%vl_#*<p&;4}QRanLfr6lO<R%k}e=4cD>_i&hwrk^auI<XAzE3d#U
z#-X1Lg3RwPl=~S4Qg^%+bvXF5QH)DJd;=6-2HfJu&sGAr+22HV#^E22*nk9HQv+L3
zXd~m|+ko2|z|}yya`H2L2!V3i&(c}sPO@FqUK{Gv-WdaLXZ$SVs-sH&yv&dW60`Ut
z9(ZZVkcJ|*$L&W*AMG~`@!~2&8-_B@?Yr`FGC6mr^Fq@ah_pE|1{0?*IAio1DuG!R
zorWX8DK$;`b7F>%c-%POM}$*>(BlE<XoKbA_|{no?P(tuPgy7!@i-jvO}Vgv$H^f}
znm%6RWD2pgJWftsVbM!CmBVO>csvQxW_Y{PfV(p49^VCC_plswg#Gb7D6};zP|f&Z
zlv>^oCYa=pF)n)U^SO8ixXsQvj6k{1c`}I`vzAX|Wi|HP*z!4EqY;JA18y1C<q0Q>
zxA9*JEpLLrejLVlE#JfjRYUmoy$|vVdPiD-qZiA!@whDSpl3xC_@D5J0j_(3-X#47
zhhgxEB4FL&aF?AYRMy78Ys=9SHK<t<?1=@yZFb~3c$3c;gMe=68Pw?RF4>bFkGB#X
z2tBcyaXAj%I35;0g%-3YPC~%elA7l+@LEGFvh;9;>Y;SN?fHtK&?fuRfo@#POIpxk
zIP?bMsBOeygm%R#bdWw|Fz_ewerN#AohR|BHo7!E^d#l?7K>y87AQuhg(NVW{5D$q
zBTshN=|-PuZ+fVa)|&1R`UVA2N9-F_sASi>@nX=HbZs1C?_pz=+*mf^88aVYjy5jm
z_SkMD!|hR)`*Cpp)EsS0X0f{svX*`~X6rCU0P;B58Ub{u!<H;|yn%7Y-l5fi0v5xe
z4ZSnQiC#xZ>D&TXi|D{Ik_&{KI~eDlyLcsVOGKTSEH9JNH?RtIvSTbHF1`e`pDuJ5
zA#@(IhtR<zDE@&hn?qsL9F9;3siEzRv%@Z)a%u|kjQx<a&rnRGPKxg`t`rr1P$=ev
zoO4d1cYeW$rk*Tl%)6#A<1v(4jGM}Z$NnZ<;)K4x=`pUiaD9(h>FSy?(6S_lc<QmX
z&^RSzJ`fU5JtkZ_+{4Aqp$xKo1xkt-cW|J>Y4X~x6#RT4&BnT)V~A|0>Yq13&ys^b
z-<btJk_A5p+|uu-sGm1bk{QYW)D$@oPtAfrcM7=4{?uH?Wk<X56*BNot#ML)Y5jU?
zkDTUD9g!pPbRSuNn)d`x$6(0f+0zs;8(!li7m?woA9GSY5xS?>K#(%u=)u#wfOUKB
z8`y$6hV<#ZjH@A1IEBtK+nzqb@<u8?eNy1Ky)A|pS}s0)7B#)$dZGiNm9&WIxuNhp
z;Fbk$Wzar5S4M%m^0T2V{?GueCzeR8oCI8VsFM^RKb3J635CajTOzTtMl57Gp_RB*
z=La;;S1$Hi=#@a7EH6P}vw*Ci3luBcxRmc5{lCBy=&;~Ke$fwlw73{!iDz^Ry<bd}
zN%RZcjzA04FVsRL$Ho`o9{fU$J@?GT+r&EK{Nm%hP?37K^@~Gjkirwgp^f7+@@Bhf
z&(O+g$;4;Mfm`P0Gc+VN`T8vK&9YN?aJUG<GY27O3Bt3vG6;B3xLD(!jY;`uE3?Sg
zviuS*SFoNOglW%iv-|lht@4(BJu4GlZN_|&Jjh|NpH=y;g01j#yv?NNiPNYj`SMh9
zq;TAyTp}GxuHpJ-UNe%M7RlpMU{#?MSXIITt16|%Rr0QJ|Ed}xShs2^Jkm0K0L=)v
zxM~^W?4pY=_sU;Rp(Oc6ue^)XTH{VVNLI5vLWy16h0EwFndo(^)QOK1_3}6?9!5zH
zvtusa3Cz}zF$RN3jvO||K;f&2_G^wQk5}V1n>t!XSBIV07ubHSE)<gP)N=)kfNLQg
z)Iuf$q18hfXU|=n>K4yek7jv}z@R47$<A1TV;NP36j2VsW@v&?aMSSe64c4iWX9Q!
zi^qZ6?0C*>eSE&lAtwyssk^5sBDGl*9|5jK<nlJwTh6$0K;hIOn*(bNJF4Rw1>PNz
z%N4OXiy^hzsnC`|jv}&G80wC!!uMyfqZUG82kj3^K#&X_MWJP>iysGW>zT?%<xr)x
z^UI!w9fb!ib}mB0znmiG`G{ZELcp>l{c;6x%Ny2T?vzX8FR7=NrSzAlB)=xt&aW9H
z7oIg`EO#5^XiYHAOKWDZ9QGnu;hf>8@`82ILI}e7HBX_?qUPc&fm=?F;(7g3z?qF4
zW;-0sE2>c^`zILZd}DlIXw4}QmIj{li3<lgq34Rldpx`t!<(t+Dx7o=EYZ*1;k5hl
z?(n&I78BJ@aB$vby+Y5?8U6-m%;~(M30GwB8V)^YteP&~oW)oxR?Xqyj1E7Cj~3~&
z&vTSsS6s-i#lx-tfXfzZ^PI}RQCTQ11J#Ark}+*&=BH7IV{0jL+DN$gNZ^)0t&Q1t
zUTYUZ-jarEF{1b&^VAGHBPF!9nPa+ki;U^otum%-_he~pzliC;&{{Rk)IhgGf!sgl
zq<dkfyO!c%bN38zt=m_mQHS316j!a=F5U;Y#m@6ZEYIyn^H3){Lj-=4yO6j<2?(1Z
z#MO3D<N3IpPS4js&oV8aU+mPJ!?y1ErJ_N%y}?Kn;Yd9STYIf?8a}^Y*dOrx5y)BW
zH#>E`^ZWbp3kPDO)jTGP81FKh=LxyGW@>g04kJ&S*Pxp*3!VaYi3Q&aOdqE*)Dhq2
zeT=J#tZ-VrY~ML<HWMYthK?DA6rLq<n$NSmN;v8$9QqZl>2BgUxB2sXkN8zCFiY%z
zg*I$sy}nAk<BqI9!M3=KUP;u^#)dFGBNQ8u4P{QvdJOu8O5i`oVMKXDbryVuY+yqR
zc+2Q)=#u=eDF_z+*HQlX=-18k>+102*D3YlxKQ<P9K+>pLUdqg<2=~1oCh|pbK>-V
zWaCEg6sS@hKHs{6HYx(4jpU<c;n;|eE$DsE#&^Nn^mrruf?vwL(9<sW!f@tCXW{u;
z+Y9)xawoPnFD!$cmWk0A>hSXgV+D6{EO55BG%u+B%E4V%aFFe6LaFzM@fMj_*jh-1
z+^^M0g%<Bp)s55OZNXtAMa!@(cx4tm0elb+VaHkdKwf@Ms3p}XzOnNgT>hRw3Gf@-
z$M;W!=Qmk~>o+@L!7_}S!oaD!9EL$Dyhb=TMNruA!Hk!ZoNt{gPYZ3X?<O~YTw<so
zx*H%zsDV+8D?<t&?F28z>3q{IPE3?D#QtR3rbUq7i$gk!7xV`^i%}3R?GT7R;It4&
zahURyKZG0dFD`NtebMfVxLGuaGuDfwZwbJQk1($MPN9zWUVMsi4rEn3<Igb8@-BV`
zxSq%5EH4+f?x$5mnb;hJfF++c7s-Ha#)s7uu+8NnV0D`-A^#m5M*eMH08Hyx)gIK*
zfz1?P!j+>6ZvbY=oXyQy@Xf%#L+h>C@Set*bf@oTe1~Na<?QB@>^UBJ4$ntyrmkzA
z4cdu1JbQ_zp5~d050?5banE0pZ><NsR0VlU&tG!B_;!B5_|QxB;4M9RX*svULpZe^
zb!xwnagL0O<EC5M?7fr(Z`tg<gb%Oq8DCE5rJZ8e7uhlif|fDgf*+Kpq1!UesR<zW
zw#;NX*`QCQfcWJNEkJ7Mw#<jT79ba=xuMCcIk`pUHh0LyWo|o{U7R2CZ&@ZrrD6;9
z-sUtVJmIF3Yk*mzza>S(KQOd~wg#5yZ^4-hX)!(YGKF9BTJ`4TQH-<KE>2O^<W+jS
zJlQMn;!|bXyo_6(De5odHz+Qn68GHp!EnBO26~nbzl>joBl%Xp7^O&SPnI(R(2Cmw
zg<OHKU)MU=V=wn>wWuSlT8ljT-FTM%w`S>o>uA`~`ma`))*A(miKqhB4uBe#OKQa{
zBw*?2D;10z9eZU$7WqjsFt1FO>FfT0im7j;qZ+_hjC6Eynx{1Pc_C2`5O`%ZFulXP
zQoXWP;5bFA4lCk-p}>K7<z3+20dPm)m7^@L>?rvYEHCkHc~8dF;pP@`2Wueo%2`8!
z@vYP=z2OC@V`R2^Q!4js3a1F@@;_$zfPw!%)a%Glm<i>nQYbJK7NSn_5ksB~5w3Dq
z*-`SNLF+@n5!#BBy2axuC%f@GHE!s(-ob`s1M5`sZk5}<5nIiiQ4N_nqwv*oGH=BX
z$<SopN@poc4sG4Ra`?g!<osI?%hUhXqvG@*+1hE>`>kKf{T5$rqHV%98Uafnw$T6(
zZuD!Ln#458v42vzzD)&G$#d%dPT67kK`BxTgnmZ@mP-$PVFi~^4Vd_Hp`i9d>!$L)
z_IHhpv%HHx<CS;qtH~$iCwA`ue|OlcF!ck}$x~x8DSZ1d(3bPS_IXb9J~~l|U%Jsk
zJGDa^+`h~yy#(JO*xr!EKnvd1T?dYr4bmb<UM)dkY4BD2XeR9WU&T*=J&$WLuj11E
zd_1={l$r$v%>gx5sX2^u$XtA`S6+oIHQy`m;wyn$&XlPQz_;|nKcfdb<jpRT9eH-e
z9Z@>Pjt}jio>~m=hy%AoU<XZ78{QyJ$pb?>)<U3r{qaRBQAbF3;75P(L1x8{R#dm(
zFde2Lvl%{T$Nvx%4PGDm!z2i3p;saM!(_%e^e)~hHog9xBgI%&h#zUO=<l3q*WXEw
zR^c!@fFEgzE~VSFUYh~(j~0Q)oZu+hwY+u;<ii&Vybj0~g4Z_z*FxGaL4twM>suL@
zJ@mQwHYb5g`~J3a{(eiF$||`ste?>?4YVylNnMu)y72}XqPCrEs9hKuANnI@(?d9n
zzW;F$Fw5Zmu^98qa&O)rV~w>mZT?70`d%E;F}$F^K<JMXP!P^NBUIp&43_qH_XOTO
zhU;ggP=}q}<fqm_7mvcPQfK08dEpVeD_Dku<I0e4HeK9cemT~F-E$fTV^!Z>3o%RA
zcdNnSuBpM<z1!QI8jIc3T^eNWvMc{C%S+rHqc_O4zCP!FPvhRmHv+88jYTOx(f>CJ
z7-yp{UI^TB73z(lEU)auQ71bioJ1}<`^HFAZF*yYYZ>Y<V?Bzk)+raS%wnfH3r-1~
zqdm7QN`mCrB0;!ObMYm>ZI049YQxP{s|Ippe;o?917mPGKoQ%r7^1f<mIn6plNZ_c
zl*%c!XAEDL+k=N<;_k$XJv+E175Yxp;lUot7uN$gpzuAwEmtbvEEEmYy;;P1Z0|}`
z$=;i4h&d%(d>Ck(y}7_C*Q6bHYKb2LvP_RR8-+YBO0dH0;{d2(3bCf(;u~Z{-fZQ|
zk8e^4{WyB#z+bSH{=-0rd=LF*8db}C=)L%1XYn3-Z?Sj}UALEJfyL0?Il#4SjiyjX
z1AAqbbtjX;Ye8E=vzNN6+u_{U+l1BSD?aC)Fg=BA?`oFffU6AJ+XCE@DSPp~BRn;-
zF0?lT0n5tr76n#smfVB;Z;fVLHKcH)t<C+n8i3pEHv@mm**P#jT-Q!EwbB0``GmIG
zv3b`A)5U3C>LDjvB)^5_jihMb&bah>y-JGqLju3p&7v9YP7Qvpsm@*h{uG6TrKLZ`
zfPaL8vj?y67YP07F%*{G{;31FP5vD43+#^!g!UDH&_XhsC*;1tjH|9F{0^rfKfhqw
zzRBRViF{=_>TqnIk&RdKu<cvK@-k$;E2F5B{39rII||2ltFEGUTESbgb>9x)n%{GH
zDEHBchwvB<pKra3x1(mWb53p!-p1#Vui>ix+tgpnIr;6|#JnEy_C)ZO9p>BBz%2vv
z_CmSGe!GR+X_eFd?VXUfO#8QSjSyG+{rgAqZSwo$5VSbHA9p-liWB$#1x^O<<LdS&
z>~ik}fm<AYCkmYM*vPDRXn-t%eP<NoF_c<h-=TrG-HrH8wOqR2nGXSNf?t_H9V7qF
z0>&xg_;c|ks8~8Ieq72D;R8{~+i+SaZqUA>jVk^Ep^hv=)v?VfEk;EDf;*OQV?f<s
zyem`g*Ai0yFW!}@8;^mvMD(vRLKj5(U^C<`j=wh?c&^VmeNBF7+Iworl2KYerwb%H
z@!pLnx})kk@!l<rOZje`^48MW`{Gynu+M*gWEO!bd?I^)VHSanPUae1aCo1(PKjf9
z`u=_y&iCaa=&pee^@A*W^8R7g<Hhu$%NRfE#piW0evEN$$Hh;0ao7Gyfx8zB*1HXy
zWd+r60qW$?dB(YchZs-O`l-!~hYF>9x~Czp@I2t|%qu2g`U`~8gHTw;B3&vXH7#8Q
zo*Lt+87jkT(wmLKvNomX1J@jz$9t4C%`k05T)aW7b^i1kxi+OUPU-==T%X2bh!@jC
zA4Cj`9QzLj8x|FQ2k`D}bl<yuFqLr`%5HoX<xKxV<+zbDA2@ZV@#W$V<X)=ogDqZf
z=4VhxJU-aLc#P`4^)9{>H9daiL_=Pk8+gFycQL*Xr4}a_-w*ssOvJ+cP~?Mys8|;4
z4?5+IEr)BwJeeLkyqK-2R?eZ0)(<aboI5*T;f-E-HA;t{^2)oojLL|^C%t;Ey)#}t
zh5s!mccy<E#1r~&G~>79FwOvftK^;M-x{1GZXC)9{q2mL;(s${hFXk{^pjKkh)NIc
zx|)JVioC9>8F*xf7gtmH$WX>PR4z^{qb1Fbj1uzN6z8?&$Y`%2x8bpjD@O}Z#~2;C
z1qC%A8+P;cNChx0L)4ORgz}znVW-%)Uabj7CKw95CLF<SDs-RXktyKawE?fi9~`K`
z3(L}QL``LOSS7=eMUdAVb8#aHABs`~u)kc$<Mhg*b%_-`gwF^8ca{Dj>5<}U##ztB
zTY>v=7;Dv$J-{q$)sX{ihdbihc~{^!xsJKSA+Lhl!^4cTLoS|?i`$2}a&h}GAv!kV
zLp7aL1bONDP<2?@Q8=!r<Fr=y;aYDyD(64k0=zpH-4pGH+ZmVky78UBNynINAJSs2
z2e1Tn1pH_iMJ{b$*kQFQ9i?2=hTO#yVqWKjjyB6T=SSNVa6|xgM^CaQTl_%{>eSR3
zuSFL>@0C|AiJu3wc<}d$khdi7-|K<<@r2l-{7~KBH;9TGhY<I-bCkC+HJ+U`CAG#}
zTun(89$rp6)s*D%RLfsyW%t|IoKUCyF@w5L=OS;jD(yNKdvVqG&ZS;=T=`{Q+?8MM
zwd1<qNH{H1?59gKiCYoJhdNh#HPzXzQzc{!ymr>>Ord6pekXoV@?QGlhxpAxilh;-
zkIaPPNPdJ{?&zDQA5}WhBJ7Jlnk~x6M>L$4hCbRRXWB;x!CTh0k1}?>W4S_a+OcRB
zp0+=h_KwW}uFo8jLpmR;MPXTbjy1`Z;n)VbG8{W7`Zwa(G01CiQR#o|1miqH3jfD2
zc_RHsxhSXoW0F^24gEhRd-Yv>Ch+c+!#&CTV;1AGy>1*|l%NaX|G-x+FdifRu`7%I
z?kxK4te@fa;CLTlC~`asg-dYs#^L@2LdS<WnHhB6KR&@p568$KpX3Cu!&-QJ4y3e5
zi3c<x;>YJQ&XIC)I%{b?y|RH?fjmtv!nvm|o&;uj>vw!3aJ(b>a5xr_<C{dqO=GvQ
zt&A%t@=&M7C@kc(!uv434`sJ=xnHBSCi!<6m-5{>Ez}vhYHNh+<04j&^U61<0d*Mq
zcqrr2P&YmdxTTjLk7apj$8GrITXZ{P@F6>U`tj5(3M#>j9(=q`3}@tH6+y|b{~<@}
zWBJ9GX&+N$v|+9dqD~z;z<7-6zV$BNg_>o;oq(S0^O6%~^7E1tm09%W1K*2-1BzGp
z3xrNkIuS1YCJ=wXcc9SyEo7V~3gI!T!(W9TaX&9{4h_#Aa4QWI$w|9zJU*EKtUE(|
zS2m-L_CBErucxoVCp+yo;+^m(G%h`HC_l+I=~c@G@{_r!5+?iS#_<#CH{mfHT6{lg
z;EDT*e0s|Dp-*T+=$<7>0WEA|oLjz9;qq#9PUsW4Cm0y|gtFN(W|=(E*7c!Gm`zD1
zeaciOVs9c-!cJz&)QfWQVqhqPeSs|xG6~89H1!Bf>ha)l$}D3%hEf~9Op|J%S-nvG
z!*83?<>v9BOa>aZ{uz53l@p)(A+N`tefTuU20tx^faNUo>2Ow5gQ*m$ZZoLD^Qj8Y
zr|~S7XLIj9l{>qEp-)$2k(7Cn6Z&+sP^k-j+LlF<rZ7z*9#y=;Um)};Eqa8jlqDFr
z`0ZEA(43?-$<n)%cL2|!1&$lIGKtq@XaWj-&L}+2ojfVuKj(x_%HHC|3PD{T62HP~
zb7D1Y+MK{M#c?fn#L2_lrt~HEYYnKAFGm@VQ61~4!p}H0-=G^c{~2}?U&ndxpF`w=
z`Ohp1#6R(1<?BhVOkC8h`zIN+TqF1=bzbiP1qhD(lNJiXWz^T#DtsTX9yp}qJwBz$
zO7b*%giCoBKQ$H@&X0G06F>GGI)xjE$5A&<O>$adIBlPrENG>+zE-FQLZ{|1E}L0j
zdmHL#=F~DnUg2ASTUMP@TN#&bxl6?<Bw>%Q!>#-2_X1DhIUnMdef%aZ&C!9O)3p61
zo4s+ke}T|xxs=p}PRD>^@wh;s0+=4p;i$v$(`H8%KGTrrIG>)yxDo%;^MLztrdJJz
zc!fW`DT^WMg=HX5Z#U$XLpuz4g?9jd3kOBSd1GMy#dW7CiS@n)QK!CA5)&T7p`9$w
z<e_F+_|8xt{Wv(-s!M0a0@LktY|h9T-hHJ&CFdELRgp7h@`@k^LTBcStc#pk#D-OH
z72nAGGg<g8%&XX$`UjXllturH;76P}Z|6TlXKiPr&xX<2Xng3ianQ2_@U!{A_u`PV
z1uy6?5c+HZ3c{tI1mX|)E?!MO+wD|-ljh@RdwF7hhOdy^ERX|EtU|naSFSjpotK^K
z>IoY(Dn{qK!fdMx_t;{R*M+(!K&pFEx{F!YB*tSXVM{G?UDc>r&SPD3NeYMTp1T%x
zQMYwZI6t})!2J{}BcZyMvVt<ix!v^$<El#vU(RvrYILF^PF?H7i-Do8G*m1(+jUe$
z;h2iT38T?5sACYiPBN|<RrndZ{O4xeS^o0^L!Qs_pGOF%bu5NM+oOD5CeJ~i(=b@V
z`nkDOaacc}D-vMZ=af~t-fd()5c+%(<ElfV1g@g4a3#OVuv5u)wmWGAdtm7E9fpAF
z*)EZz*M~me#{x0Z?A}FxegHMy!!n}b$-A7>pC1yVG(PnCF_u)mDM@qCf^0zz+6bzn
z#gUBT>k`QMFNHoo3qWsLjgmR#gHHMee8qQrEI-eGwx`Im`$A_aVM$xL!{*Nh468gO
zXTyd(w|3UdiQ!IgOnyO;I=!A9Y}n%=Ia?&sdwS^X5U+rGCwq3N(V$YKc<7ER2S<Bx
z*UpV%`!eFJTH?9G>iyo?3a?%*&&adWgkIg*nc%yZ7T@JvsAGiB&hqNH_U5v@Y^Phk
z7I+2+1>XIGoyDkV_OEOq5;)~@4qf_WLoQJd!t&1fEWVF|eb|Vz&j>}ehPi9r+0~54
zP$GnCEj+tM?%U381gbmIMq+Se6XVJcg>MFK+2@_z4qVU6Le$BQnqx7lcTb_SWKVz6
zL#UN_D0IjVmHyR-?*jPOL?P*hP@TR1g@+Z>H*x+|1K#4%zY_B1p?|5KPzq@g_!oIb
zJ&)ngaT;n%q|fC6_v7H9R1Tk`6zq<m8{u;|3LKVVc%e0Lu2OED&rNcY_z8m%=O%+C
z103ppB#lU%n}WjT2%gC*_Uh;6JEi}b-#@e(a@`L2uFN<scrQNs$_(3Sw%hqP(d9Ud
z-268lUqTn#{#^u4vs+X~3W3nShceFox_GI42Km3sdAIv-{IHSO_WpZ`da+Wy*eNf}
z{rez)&i3z9{IH($xq^wD4`Q!!Ct5PRJ3o<4;HT=P_4ByNRXn@tJf2KLpD>+Aj#^bu
zvg0xnd_^(T(V_FSrfLIF6hj^O7gSgV;EO(X`(Ma_)u~D7E8-FO!i<>0X%(|I;7uuC
z5v3kEG!}*KsKUqTcF?~3gTe&7(uc5y7~n?A6)8Lp+UC&gEInQTdEGuu;@hZ!#Y~i<
z#9tB5?l0<5u{E$FO9RfcH|F=R_+lN@^p1CsQ8d$%#oV?m=5{;LD%v`JvClBrzy`^%
z&A%gA44Nrb#dge;l6aU{-=#EM-n0(;>^T+o#UXp)o;6Gl$-X(ie~+<FO$C<!9@P-r
za-ms&(5~(uLh1!0{B+)<Wm}HZ`daqWPbYety}3fq@1HN)jrb90-*OyAcl>*u^sQu{
z;;h?`qwWiY{RdH8_(4h7e-7VfD2U`_aXY6(d{<z6IA;d*e}}_pHzxti;&)Cm3%=9I
zjKmxAaLyhGSRBgfB!>p%oC9qchFs?poP!32bIIWgPeS3`sJx*doI8@vMwg8b=T3km
zMPvjHIw96l5eVl_LP2;8hmOZlv$ed$N#BA9=eB^i^!TDdcD;*YjpOtC510bB9ETCV
zi{{aF+RLsFUqlnt((FZRfX6I~8)?A%e`OOW>V?XuI9{W7JquBM7l+Ya&r-RFhkMST
zlMV)=X97}lE|lyg9&T`1PPmtRy212tuep%2M6%a>#$zb8NcL()&5wh92$N6nEe})A
z_m6IzP=Vt?nD^ltQXWOv5{kT?c08YQ!6KhuoCT+Gu*oNZf63=OcNwlBh4c5xnU{Y+
z&b;2VEwYSY@7ZDm2ZnoZ%OW6dO2ZKM?u3A)-QF4CmZ{LY%Sm2FDSR;n%%XTPC6y(>
z7gLH`T)h}4ZX{by_~Q1)M{q6i;sdga7vo0+u&7PD_$c(W0bW#tItJ|GV~oeB?pyET
zCsDJ>pJzOVQj_l^7tcta$ADV=>(ea!s|)v0Sv^7;P;<5q%{yu^X5ek8TLRQ)A8^e<
z*UkaPV<@$Z?Q;-korshBNPc)kpTl@fTSMuC5Ts!AL68Jq%8)34pKy|AdtC<SPXeKa
zO@TAO_Tn%N(y5DZQ=X#u*9+zQ(ufmo$oGu^%XRwQo*$0%9Zaur#BfjttEmWt`{EZt
zs<7Vo9fGRP*DybZ5+l+#hCco$AY=9Di#wAq$EUU7zStB-#fusArU1)G-`NniEXaKm
zydd{oAr@rlVoxe{56krHdsL)fU0^6oSVk+L&YAEEf9?t%7>Sx?-UR54fX&WW#$zaT
zJC&&MydM}2Bv7L~Gx{Dl&XXr_j+f9&O2mu0@FnXYuI<XM%0nH|zGM^QJW?*c8Tf@?
zU<hBbi{&{(t_q?~b|^cv-I$BF1OJF})bKS}DHiv-aFE8G@`VM$Wq1vX!Fm*y2@`Ar
zZj;}TMZPVIyx5M>##nVlga8dwQtP2AK^+c-s8Jo~b49497w7MQghP}QdPvxQXq1NE
zjn`MH1}G_X1=Rp0g@(HgR07Z7FhU!e?F9cDYiFoglp{j>v&bE0yD9)2`Oq;ZI0@h8
z40VCG<UsfqLoW|?1Sot5<D#SJm%=NhAK_VsUJP~8o5Q%$Q#d}@e3)i%xJ4MK3vXpX
z<#0LbWMBv5%7DUm0{;ky5uh-wt@=nRM-Lfx6rKhyzm6BYK747BS6dCor9-{iE<Q|l
z|5EC{Hs=?mP>1)IQuhg$-miD@g?!e&bP1Na3%_U?zBGwT^aax{ZH4ZISLnl+(y&`5
z(4{o2mNltgmQ#4YDNgV^Gz|S#iu<9j5BFOO3tCTT5>Ze3tz(>f;^G^WA}w0FB7J&C
ziZrlV2<jA$d#G>+c3rsNZbQ+}iu(*j#xJ8esWqfxdRZ8F_sHjdtx4LsOq`hTI!1MD
zA5v5V!k5ul=XNg=>ld{#p-*CnxQ0fP0*)BT!H|+S7W_I+t;@zjN|Sf-alrjJdgJ&y
zj!O&ik33S7OwNJsh9`jTUL?BliG23EjCNvI;2?|c9}MDoh<F#06TYlPoCe2-3j&}m
z!7ETfG7`054CHBK4a)@`Vu{ZQ_s?@0cGE__e>0>kDcL_IZpxb;?oZ=s8K3@Y#>%GM
z-W3KRUw&cJg=O|BQ#g^POkH6uR4h}Vkam3*{|cW1z88lKI$qFUAYAwi3c{sZ1mX|)
z9yEX9g{pAjNzg^~pnlWP89`iV=q&K=c=)cWM4cKq&p0=%@Bu!jGC=$B0n~sthIJGu
zC=Q^!)$>i^6cI}x2gv>S!0>=}dqf8u7ZHt+9ZTdQ#lS6*j$nYS@^o&oL^@KzcqvNv
zFA$EvZ$uh1)JVR_YDg8~Fd`kHwTp1m&^lmxq!XwkV3CcCv;0*GZvnm-hiKQC63ENH
zK0J_wEKwLZE(?w+H-y%=fxFNR+9es@4&2SS;q9O-1_!ONH#CUmPp)f!y-J5clwV?f
zlMT4U<ym@iIn8y;MV8B}fLnTgIXPs>tIIcQ=|tx?`4<RZevtC1;__1fEcOOdCoK6i
zxG;;nczz5bJUFg32wC|T2oIizSGI;00=G5PkVRfC1;z*traas`4*!fH9NZ3vENjFS
zQF{Yd;9>_oE-ico?wgC_9ncj>ec$^yjLg5H-YG4j)%J>H7E2q%Tk9*@oR<Hi<h!B+
zaxomHp<}>ksu*3m;soPHkFGcgT%STMsACFUL5myVEPs{4yMQfrCI<3Cb>V0b;UFQy
ziRd6;Kd|5x!1Ro!1VCfaI~b2q-M79@;geC*<)cJHej4F)hL7POg(wvuW}+a47!Dm@
zjGB(C29`1|qt$I^xgj4#o$T*Np=O3Y1ETU>-1P93Bxp&^EBj@^%`UQMS5Aez#p5ei
zIO)Z>TzDmon;sgaN8@JEE1KoBd=Kw0ism?Jlodq_41F=qfpC!-DTS*@#h^!#RrqSQ
zw-%`GkK#8m9z&_?9Y;+?Qc(0S5WY&>Nsp^qS5XdG0(sTQEcgQ1!K)Sthx}LJ*ZB~r
zX~hMQ*B#?P6-OA4p(Mu?J{UD!K1y^TTwKI>jOyJfS3E?vTRc>>JFR#)SY4k3QA{aD
zcnpUYh+;|reFCP5MthV1`UF%s-%=SaPB_u?w6+wlP%m~nNxTP)6z?@uJ5eW-2jz{5
z;o=NyT%9Xk3=Cg=BP4XM%cRQH6^-{`?{zgzP~FK4)28!XjL$-8GpDjn1O-7<%`9U3
z68BxD?8|JtuRCf=VVR+z8h*x$7w4glu3z1Tf{Yp~)zxVg3I1k5c!&&1PI!pCZ5A(z
zS!PHXM{CG!uw+TzA=OHNPDGaEy{4c1ZHn+U#q<#;2Jf0mCpMlI{%hh;@#A0*`xW9f
zJilhP5=f%13zV?H8X-^@zD5l@Wg7m9mB72GXqn{Vhk#oK>6*ig8-sKWO<COm9*b*e
zDax6Gf2v`j2-l5sNU_3cuxy6TlOfFxH&Eht(zv=<S3=HO^hzjXmX4GJ7&kgn5&^Ea
z6Gt7PE*Z?Yl=l@YJPQ0jea^Q_@`B^TB|}lOwKkk_v$fH{_0}3tr`B$98ph;bHa%QY
zi~5D1RfbDe0N1-)$co7<_yz;#@xQhY=kK+JJpZp9CXl-DwWFY7>C3e@G9E)oixrQ=
zwRfOK@<t!8oo(M2UAqUedKYNYpzqhV6Hcc@BipY%Cp^18JhTX;9<><i&>T91ap{4t
zSm7l+vxe4kCx<@9Q|!wrM!ww6FNPx!;v!XPty6j*O~X>`zwn|i{2z1KzRcy^uO(4O
zyZ<qt@fg){?I1}7a5^t```L{*G9E*z%Wp!>CclO7arhU*p(`At8V>2u`ky55ni{6b
zq78+@zk15ad`ev^!&jj2;`(rzT67HyWsBKD3?&9xS@>FqQ#k=!g&XkLe8gm6cuXAh
zL>xR=c!j?}`0E=)Jg*PmI2HBoPWg&ErNE8T3_Qs=p4fFSCiIQu8R@CPWIjfo(&Z%S
zvH!-~@EQ%qC|wDc@-F^gv?uW6U<WVj!fVL?7dfrt?AL#_2pp#sLt$*tP+&u2X<&3i
z3SR=;5}C2`zW?#zn+m;(1$n5$vztuM*x*f=NP0s`e%v1MtHe3sn+u)Hx3K@ac@iQK
zg0Kt`S;b!<eDh?+IixOL%X-K&tKQZudTl&sZpIxxdnlc5J_?)qU}w1H6O41q#R|vA
zjZmx$-$H%-1r8&PzCojF!OO=2*RtRiI>n%i<+m^{8}cjs)_%aXK`N-1^0$@|?u=Z5
z53p_}8#bARPU#Ya_0}eXuVx#k44iFOjFWm5WY_Y!c*VjjdMkPARJ1{04h|zI6-Vrf
z<4Z+@k?}LK@Joc@f#LCMvIu0Pf!ne~>o$BAhn>m5@NHQP+;&PB@Za8ten0_&w-2+o
zbi4e3KPP<qW3tKHn+-t@?(J>Nn|)UNan8Xzs-)l@^X!K1Xkvb|o&RP+@B_ZN!Qksr
zM`l$z*Db*hbyOB}&nm}dkxR;UD!1ABJBtNB_Rf*uEm?8rM7!REB?jK))WD%T*}c0c
zacO}t=KNhf8RwaY8vX*|yYf(2lKrl7UQF(ai>Vn2lRsjr4WSp9-bwl&2v2nC9?kC`
znHWTkW}>2bYEQ(Y?H<J&j)_q(pG$R8FJYb>)AV!W%$G4AGx!$f@%3b3ztYQplj>x@
ziut&gzca{uHS;wFpJBe1`Gl9BNOiJb&wPWIzq^w8Cgzh~eo~bAX69SG{5?dI{Z{5v
zsA}=4BAWO%=GzUvhWQTW(*{rSq~FPW#>?LuW4=r91Ly-yz5RO|B!9OY{=0()oo2dF
zn!h{h<#7taUm$#U3G<}}pJ2X>`Iwi#kJ=;sa^@=yzJd8F=Hp&|N|gC(=4%W-$$TyI
z2`~SxIP>+)Q+wL*&~8Wg*Tj4hRh>_uPX0GD-{R%(Cz|+H=2NI@`u8VLC%%pOb}t_f
zGT*^`+TfGScQT*x@(+|U-zE3~*h+ZXf1pM3ljQJEqUJRBrp1{ql;%aY>wJRw66UEn
zoli1f#(d1n&!}X+oO!Bi`roc$zKZ#{mwzzId^PhVujyASzLxm}Xj<8Lb;B$C1;Uf+
znWsI$yEsff$$SeqYQyAPnQsH9wLd40I@!lV4QO?n)ZyhHiZP#NzSGOs#F@`9-{s~1
zyFv2z_#}T1od&e_=SG<iGGFNB=LMOMGGAiw%6=*HWd`5E`Z4Cqz5EX{%vUmB<>h~v
zW<Jh*wU@7rGhf4et(RY@>?fG7_wtKUtlz+VlfkE%Pcq-^<?9-lZ(+XG%P+2EKE-^S
zmtUG>zMc6FFaNNzpJu+(%hxOW8RomZ{3A8eew9!1Re1)VWIo7zp_hMD@lobWy!>Mc
z)RDhcrOcOk`Jb|XRWatvz5KE$>ZD)Ee3ii`n2$4G?d5-_`d7nzt(SjX@d@VZz5Mb9
zw%@>flb3%Y$b6FdW`kGuTbOS(cx6Aue4CeF5k;N)-_Cr8mw!^VpJu+(%Qu#?eunuj
zFYhpauTS##=6U&_C#C+qLFNm+{8N?8N0~42@=s@&FJ->W%dd<vA7j4U%O{CO|L?72
zz6w=seOg_^e4P1eFTW<nd=2xp2A^a;!F;`!e?G;01M^K@ex2fz%r|@a4N26={}$$3
z4PM13#eAEW|BdQjJM$f0ep4mtWIxS(r<Z>z!F-1KE-(LbO7fF^lAoOC<+mo74>Dh9
z@a@b;nJ@A3+Z12Qe3_SjmHRh2#(cTKr%*@#CRZ|FW$+p1<IGok`Ba?w8s=-g{EkxQ
z6U^6p`9CQC8<=nM@~@>?KgoQvm*3UEd<*lfUVe9!`4sbQUj7Zmw=>`2<@YH2Y34h<
z{F@2XDSjE|yS)6~xa9BiN&db(gHJIZWWLbLzZGXb%6y5zr<pHhzRb(FCzy{hU+(4q
z6lK1W`6`3YFdt{W+RN{YGhf4et(Sj0%6x+PdV_CazJd8BFTcN(`6Tnr2Cwv6m~S=s
zcGgcZ-{$4tNipBfe214m(7=3}`A#qYXXRgp`7VR!_NVwHKPAu0ccf59{!9rnU+Crk
z5@$Zje2KxQnJ;C&%*(&a{!NK7U+(4Ki?Mzs^Hm04$$XsoYA^qOocS8&YrT9r!+e7I
zdN2QB1M>~cH+lJ^icd1%?Bzd7uzm~ktzMp<871PIV!qAGpH%kSneXuOpT|+B@kuk^
zY4A17XPECY_!h~3%P0A7<r#d6`5^O!Uj8iG|5lXw5-)!)$oi$smwEUe;=5|_|64KU
z%e{O~hV?6%uk!L2l`<b^zS_&@E53&LS})%x&iV=F>kYn!`3B~j48Dc=B=gN)J`iNS
zh51%5e@T@26!UFfJ{n`bo%s%fSM8^n@AUFTN!HIW-{s}6V*jT4BtJFJ;1g1RYLNLt
zFJDYF#&2qr`4WR~V7`?3GB1C%YCpz&xtA}AvVJA=RbGB*jQKe8)n5KfQRZuyul4d@
zPBNchzTV3Zk1^lCe3QYam`^g_?B%ah{cmBu)ytPgSwF>mo581;Z)d*4%a6)1pJu+(
z%a_HO&oJNR<wvuB_xmJ&f1a2BI_uvbWWLbL|7QwyjQ{;n=1aW%O-bfUnJ@G5-%xyv
z`EoD+%@)?LWWLJFR}xL_$C<A-_yqGc%-4GPJ5~P^%-4JQyF>%9-@ts6m!Ftn`$^`T
zz5G3C=3AI=_3~B9ev0`vgHN!2JM$d|-@<&F`A#pduHN3CVZO`Y(^5a~lYBhS%TKOh
zKFEBbmsgix<5A{I3_i*FrOcOk`6)5xW6YNud^_`%%vX8&Z<R71XTI9tE19ohzShf6
z4Kkl#zTV5nGt4(I-{j>VXkb3ce6yFIo?yO(`BsBZGM{3;&CAbF{<SmTVeo0zPcz@?
z<<<4ic!v2dFaKa%>ObI<`~!Ig-@<&5`9d#0E5&@2`4TVxU8P^je3`*3{TTD*2A@V9
z^ZS8H=BvE?>~`kk%vXE)Ii<|kFkkECAIdPFV7}hV|92(x4a_%r`R@}={w0}j_VV*p
z`z_43difs(SwF>mo581<Z)d*4%l|mRe46=AFTYT=pJBes%h$C?{b@eQPs{W2i74|y
z<_irz#e9_c5-<P1L?b@aN|`V7@=H^w6CY!~9M$gYJ3Z=?%vUmB<>epY{!NQBU+v`|
z<@ipkVZPSjGi*P>e7%=nR>OP)^G#lUm1;l9e6yE-KF0bj%(ohR3-c-F+q`_Uvfs{p
zhruUVKh1onm;Y6Y`3&=2UVa1jZ@N$N)AJ0zLF!KrGGFNBe@!&TZ+evZ5`&L2U&?%$
zmwzF~e2n>WgHJGD$$XWU7vZD!<IGnZe2VpJn6LHnFDIB!Fkf%*N#+}vZ!-84^GW8L
zy?kqe`4;9|4L-?yiupE!Pch%le22lOnNKs{>E&M`n&OjTzRTdFlAqy|{ER$<PcR>3
zzR=*?nU6AG;^nsonJ;C&%*+42lKB|(<z9YAocT)Ts|-HDe4P1eFR!lO&8T6%*30jV
zvVMa3dV^Q~H89^~@HMQTWWL$p6U?_T-|FRe5smSgkz&5h%eTdtZ)d*4;FHX!neX)S
zZ>E^fFyH0n+e;<?Z6ERd2jqF_x06f<C0*#H_bWOo=@Kt}AdNaY_w7<imwD;GMwyOD
zy4*{@mt?w9(p6siP@3tuq^rI3`!S|#Bwg#JKS(p3kaWG5{#%Uc21z%0>0_J~-%d)p
z*-QT;!P+g7ZuQb16H8%9NxIETXVOf!OS;2Lf5sX2?X;vj4LZr%8A*3}>9Z+G&-6Lz
zWfzY3c}|C!c#<H|g<kD1qO2X2bcsQ?GhHg_G7s&~QFKhw<zD(C?%2#qNmm(k0~?P^
zy4p+kRN6I?t~KZkYbPXK@1=Vsm~N1ClR>vLos@L5m(GhZ-6H8$gHAG?l60Gw&W|zO
zF6j<0-8;^7TGE|fx{vC2M$%md-6FLg^f|HR7mT+*kY+k4=|Zn|sFLZZq)WVXxPj?X
zNtYRPhUu83%e{0zVlfRK#J3vAwJI-tnbM9+y4p+kFJ<i-N!J>5CDRE>*L&$gWxPSs
zO<sC%jJ1=JZZ_x^rdyo&6Zr!#>)x;WuTbr#q-L8}^9t2&yQDk3bTrO}(}H&X{6v1>
zVt=%q(TqfUtswNu8i`ip8^J5``#WC+n&U4DI^`?!zkIR3h#jfM!>EXMgi=w8mGB5A
zLSGl?Ri%u^B>I^^uZ}TVDbZ`5q-L*9F&dZXJwS8(C2^<vNoux4(FsYvER?PdvQmRY
z|1Qxaqe+SOZ=?o>5{R^@##d*_#cxPdbtfg!9|Fzs<AEvljnwRy8dxbU=|2mlVG7Mi
zw3kB-3~QIN-|;yu4h2r2Uk)-Fl<0#JO)?slr~@>|KRoI*JJjrTN+~Ak&xF!-F;=RS
z=rv8$thy5Tow!8rk!Xr#Yb5%xL^F&gB>FPY9RF96PFoW-dwmVlNlEwrIW=&73!^O(
z{f0!_8BIy_hXVa-g3)$~J}=QEqiKo$8EB5bEb4UroSGdSl=Lj06MUKi_Y^gILyXa&
zL?4uBhS8`*9f6Kz7iX19^mU0U*_cE>1DfN%DdyxoP0gxHh_m97zUOIbc3depP$SWY
zB^qZmA<>s5nq;&=qJIaP<G;Dx=@JcmGr@F=q`$F}8mLrWr6l@8f!;}?$j({q5`A8x
zQAWi%xuC8tjd~7_A%y#U{b})nR$Uhg9ZyI+5j5}y#!C#mh4Gkyw=-TP@JqWJ&M;Ba
zxDVfNOw@bz3QL(z8hDKHRs*kOoZ8d+Q5a{u(}|;<x}Q*0=M$3uNuhx^Fiw8x@=3<a
z4ZMZ%xPhk_uN8Qm+y6px6oLN<HKaF?X1v+JGmNJUyo>P;FD~}WWS{h0`)FV6oIotj
z(+S`u($EqrT?L<Su)<3XJjU{61|DZTX5bWo+tKina)Y1<5MF8E%@Y4vrx#Z@Mm6}H
zn*A8khCDC-NJ8p01ikohvV(RS3cdJ$)G!|P;`f#_UgE_|GK`lBygQ}ujWSW@r2m3D
zA{$~tz#a0b6e)6`T<~=bm0sR;q{@rmOKPMSN1=^ONeAQAUi|TT#;IeP{5=WAYX$x#
z*Re;VOe6&1;#Gx=*E{JGn4}F2UjDi~=9|3uP^Fjj;%?-c4LpT9b+FZm74*i4QeAVr
zM0Kd$i(g9tB)tv;FJnCI#a~J>-s#0lsu}MRcz0lw!;cfMJCq_I5Pm!;9e$iTtn=*f
z<0W4FMUo@EQZK%&mhmz#zJdZy@-Z*|P>}H|ls)i^@PEz^jd(n62vOstOvW|mUTS8%
zLChcj<4t08BabJ&awRn^hrMJ6=Go)zsCREDeZ7?Z4zJ!2lB0GrhWrf1yHINW4C$2k
z@;pO6$#@WD4n1du&so=yAR1U6MWH)%ka2QMYv3A^Bl#E#O+K%X@p6>9d>P|$l&(D5
z&zs0ZHA-Efitz+WR{`=3jMt;o<!c#FqSWR0Fy4$(mv2J7j(U*73r!(E4|T%ZQ0NM+
zjHglR^5YoqM5)VnNc;&ZbonKWqn$dBLKhQJLt!W5B`CE9N(vc|q0}1aoy&MRN?pE;
z@hVsTK|<)c#P|z@pNON-6-bcqS`=CXeaI2Q6DTzKAuWtIq15FQPQ%+s_7WbtCrD1`
zm0qjYUWvln4Eavfsr`0Cp5zEmqtNX4jiT-g)P<iQMa|)ov>?JybfMH0swBRG3SFM$
z(7=iy3SGW|@j{fEym}+FqJ-p;>}t04<)mCuYABE(H4sCgH*k*ea+G=lBuDb(uqGcU
zV?2&h$y58+k{~J6pwJaKDOc12R|<G}Ey<C5JqlgEo$&^gx;)8|d=iBw9~?)?PDC>Z
zU4aA%Z$+UgT+)y66iQv5<Vc<z(B)OfIt+Q`XeYI=E39Ng8AG8{;!ozG)a6MI4L=z~
zp*f`9z&;rTuE_@<L!IPHPzZT?fxn?q`VXQEg|5J!J{faL|BBi2WTlr6aYUY^p6U*e
z9NDWj<T)Zw))?|6NAd|2TKgdm$dmQJ^;5%85+sEt6uLs1@gz#!A(A8c78II%xR~))
zl)600k$f8pS01AkR-U#S3M5DhX%wyk<To(hiBfNX<Vd~?g)X0wcq0|MJjv0ip)rUT
zn!=^rgT_Ly!k0*n<Vy_sIOC-#wFbUKawH!^q1#`<c)4+E_!0?{LKO;Kp`GzKO1%M+
zBl#K>ntZ=p#%odP@+3#{^(dq~trk9CzZm@o(SSl%AVI>DDD(#AG2V<)mnS)rZ$+WY
zw=kYUsmr&D_My;jC>&vh4nu+DsDTU$t%1v;jCY~b8|aj{6GW-YS2O-Vp;uv89uuX8
z0`&+DJ7p-e28NX|UWrm`pnw`A`Krcf?}CU!?dfz4(=|>8t3bp_7(AajoO&mEkoYDq
z-=Ewj^SH_;_!fh|jd^?n4Sb!`X7FT>^xIMB-61)`(<n55`;#2uohWqqG~-<;HTl9}
z5*N+n_?*k$!;juJ1q~r~;{Vt6E%0s?)%xveX>(F(b8_S~4Fa1gm~#*aM`&}ALZDD$
zL5$uj1n@!t#pp!|`~}0cdV&bV*ELt=Opr&@QrbXUnwC-mh=hkFh(LIifJnougjXA0
zCA|ON+B376HC+7ta5~?&)|xeI&CH%XduN|g2)JQXpW2n8mV8$kjal*$g(tcEtVIe>
zx$+<1o9vxXMAlNMDLf~#@8J_!r2^-7aTH%fX*x`Dh)$`3!id5y<PhOik$uvS4<M8p
zTp&z6CxIpk(_mfUZIp(=@Ieaipfu%4j_mYM81lQ+C4MOtlW4A~`+&Vk5DJ$DP#6lI
zPbi!mGaA^3<VZe(!jPY>ma<EumOROkd>n<A-vj^Ny^a4Pf*LX#h$|d_N^_@a_$JP!
zSxX?L1o9}gMf`I&@{|k~P?!eu3NNEH<Y%kJ{nCnvxADD)OY0V|+i3td?A@Sy)N&o1
z6uh(}>UsZA-=#el*g5!TAJ^EYhdMm_Grl#0E<u1y7$)~suKziv1rnA(Oj$^2fs7@f
zoc(i73luDYoU%~T0u@W3qy%bOpkWErlt4=hbS#0E66h&`%Y2qVPYPTXas?&@FT>A*
z`w_Xz;u=Vb__O%l%w;n9kjRRxpCt0yW|7;B=9SH|7N}YRWhGG80!>Sxt_0dzplb=V
zrNHGAl)&WyF0dc*$nWKjD=;Z|c~m$v;PvHkc{*@;LX_uY@xMID6-UxaG3A~f^j)47
z)tAxz%h79`%8g#0<MPp}lFxJ8vm?)#!j~60zh74Am6bmgk$w&rlgr7TF%CUDHF=tG
zd7bn7l~JdTHkE&raYH}aReYP{p52bJOLB(Zeod)&g*=Vi?+R<+>=#fxm4=?SdxhA%
z72l?~!r}BNX~EqqqSD<fVw~SEsrWd@N1_T(NO!LwIiuN8&8L;!4CnXDEB!3TJ-a!X
z?kn=+FCg1j6lGSfD2ev-$jTMvPf@EVHJl|KkI{8SUFkJMd<*F{KSi&ly3ywRXdQJ5
zPgixLXYm2aUrB}0ecg>KebS#R10wnk`f;Tr{kbwCNBfl&rvFPXCjGfG&iOApsKcKt
zlhU6nQ=HeM|H?GSJ%2LFt`+t#Cm~OE^UA-19Q{`oKgAC6fRozrm1WL<IgdKosVe_!
zoY$lO$~wnA{~F3}lk;D$qE2?(%C5Dp>d}8?m+N_Ud(!S=GGoO1%WVRt2NwrqzZc_s
zQD5>8iR};f2gKH`{l4(x2-ny@pfqBxMtE_Y^Is+p$YR26v2QW{?A@UliHp;!g^bMn
z;w;x2NhrOX@-)x+{nLss$_Okjab8DYahc<u-HNhX<^29d)XCqv>Q967dI4D6RQfH>
z?_Woq^gBwQ`fo&dG@y8ufihJMet*g&^vf~>;c|%cqjAMMvi-7^j{}tbvdl+cIWD@i
zVw7e4!{sEmcR)<plld4cXE;BcSA3S^`zI8h<G4P$FXuTvOm?YX1&;6KQ+UzE2fbaU
z*FedAYSUN7n>IAX$`x+lfV46o6E;?EaNg@cljEL!D}i1I+FahlI~?Cj2e9knAKxhG
zxmNCR1^q(A5}!!oan-CP0nY14Epe|<eM=k>eH95@5_JdE!X?z6F<`V`OX3z@Kpg>J
zlC*I0lkk*`=aMw%=R_5sl@n`8j`PE0kM#2v?o)U{*)4K@PFC?{Ww*llVXa^N6uhSF
z);T|?j5_(#bnT8UX>oqvgyP#AA9fVp;kYN?<+vwrrBll<C3BPLOPuO9Nh>V%NynE4
zxWPG1(wH7x>bQ=dx-`Q1eKU%Wa@@0P4Fpd<{weZm1z4Ko{9Ffh@<Xlwqf4n>V}K1)
zJH%%{1<$Ge<vBk$jXLQS-Tp0HTH?HCxBMx1<x}vgYOlumxkc2ey@niMOPie619xf5
z!gc@fIvp)AOFNvO+d!S{_N3jbsA|MVKaIW0$MNAd2~H1Q6_9qX3UPjJPw^3%|Er>$
z*XzJl<e$-=?#ESe3(uoY?IkQcsqm!oBgOexMDZErN0#$mdpQfwD80Oe>-Gv3PIBa5
zQTb8gd`#P`C_k#4_u^6Gc#QlayLFE1h5xDs$36L`@}p((71YUI$Ms|EsxId}KYIT+
zzKqn3e8tFL*jwh~xb|;Z;8XCBi+{YJc!nJ5__7FBjCD|_hUBGxY+0Q1`bx1Z!SOjH
zM|zYv!*Tuie_5L2u^8$kpW(O;%(ASDi|;;-bGv0ZE~NKg%kmu8?*c3<a@=#S#BtBL
z3dg;uR$bhP9yvl@*F^eh+$b-ry8_;F?K#%qxaU|)MZL}Wf78+Ey2B;7tjGBXUNxi}
zbKQ}veHLFp9e!OM;`lJWKL)+9j`r0Ni_eQH@p^h*O@0{JgMJ&l_|en-zTnjfPL3o*
z;8AQUA{h}!`LS~uE~le>b&li1c~OR*-)kKAM+mCe^k{!zwvOc0C9b3+d3D8&q?og*
zKj8njE`+H2?)GiwaD(gUbY9)$cq}H0o8Y(}b62-H?>W}7aQr0===nXpp7doq`Ep<#
z!tiBzz)hvt^RfQGsP<sF1I~<Z9(59q*tkeO2G4ZfmVY8IN-u8dB}E>3@-Az6l9OKv
zC?$D~9$9YX$#XKx^^m7FjE)UcD#+Qq#rqUquyC?Z@<on&ow8D^!@0c7<y9Ic1((a5
z_bsoAC~hdj%j*y{PF8pSCF;~*Lu4o8_HcR2O+nxCwmY!G%R8Wr=#S)-eAmriaCwjO
zUulUlUY-#@f27~nw<6#g>05!j*%tm<vRprdD<WLyAm2Fl<4Pqi+g*|1G9wk)?h17=
zU6JDaK{3V4i)na;l@RUs3bkokk+<|SN?&f8`c{;r%VpWk71X>DhJ*08nzYa16?IN}
zzBXLt@QNnq52~S#n6GHNu^wH~;k<rvZ$+2mBUC3nId{TtNKB{NlCQ{V6t09&H+iLB
zQF*9DI6p5S@=qWUPwg~q>R_;vu-KTWK7n_QH}5oU%Fe+`#$qWS@U4<_`xLI^Ij`4+
zN<oxA!~$4Rn~_S1%gxK7PIlyGBwVR--m_B^?YGHJUB<Z5;BxaS%8ne*vnp+iFDPED
z*@SNgSLARGS9+FMONw3NlhfiF`2t+uH6c;Oa@Kc^3}yJ52-iE<r}X5OpzoTv?DjPY
zrKg7RH7QFkru5`69=#^ZdA;YoCdcu49i^9-;kbsnXQck%jN(gj$X!$Byl1z<@q<H3
zud3|UEWV`phO*n_yl1z?@p<GQ(tJ%@+3j%t;D+LR((biXHTt9NUhCud!3n8%Z9v++
zmi#yL4(=&F;@S;g8|D1Gn&L6oDZkgol^wEc*f}Jk<WjDkzH8HRI9{7kdRe8Hv-DC*
zui)y9U0dY5UgxhZaa?a9uPt-jldo{xi$j&;dS7vE-No^6QQb7p%>qC|u5Gx4htJC>
zyvgys$w88Daa<?%+BV0%hPx(?C!<~iJ(HL)K{v1xuo?Mz2?C}ESNhxt2Ui9-e+VAF
z;}M~}nyie{)nw*=F)lL_RW{-rKSXtEWkP0eWs>u82X$&&-LbEv;25LgD;>pWIj)ab
zR^~*uhxdwC<~gr7ZYv8M*H`zIMUH#zkiSOzdN;DNtYTB)d^|1Uv|FT$^VrHdC%wiR
z96u<8I(53qalN%!+2Xi9W?M<YFr3p@;FVn$pYIK^5i&px^tgiV%_^b|L)xKLas-4|
z1vnqCk;3%gDo4(-RT0kXj;@Mw+_M|wxbEnxILCEIS0y>FJGv_6;-Bp3sx(*dI-245
zK?&5UBWf{OmE-)O4(i0q#bn{CBC1B9^dh;c#BqHMT~+3|9)_zba`>;Ra{kZ)>eOCc
zE}p9zoY#xgs-`>4M_08hUh8)_ekl1zcDt(Gp2gQCzuG6;T^->39P$(Tt3&QZcHwG=
z^Lp)B9p$)=!|IrYQ=ROo#ea2z^N0BqFBkvt>NMv)e=_bxVd3g5=RJS&9QXX8I2n1=
z2X?EAGCr#*UIu?y3U%_gA_x3xiig2_{?s_G*Xq@Ej(h$!Iqvz_vhWz{)PCE=#q(SH
z2ZF1uBp+50Q9Lnq*B<u|eVQKXhr`$TWDl<kxR$&n;;<g-XyH0JrTean$h(B=qFio-
z>LeFacH*3$@1Rb6(v4K#btz>h4cLg7o(b0>gLE``U6%9nlc<xOylZFlIxA!PZ2Gz)
z*Yo@<DZ6FP&(EVycB{&+l`+q59b*5NzYS%#$@%$J)X8pJ*|m~0KdSgH*VA_**Y(^-
zCVgurxb|nQ@o~BNZK=OTocT!q%!O+lPV4L6nh3{rIMz_}MtAf;TO-pLTodQ~;USTI
z0k<M!kMvIsuSs!IuR?3m?kd!`M&)o#mdhQUL>)0%BUjH;*AzK_P*?FKj_b?Enli`r
zDz>J=anB$87!+H|g=?&w>eYWuo$Gl)XmDJQ%{5J#>oqOTAD%~@`qgoBJ!=j1!w9bD
zk2tf3tx=VvO}aq9^k6l>@xv($gu742f>p<&@nTg+rDUuc<D~9NHE!V<)X8Ro<J!e)
zlH)q`)fC4^qNtOdw2OcID9|%R4H=!(F|TIj3SG^83ZJ)da)=tDAQ|>_PO55!u2QfJ
z{s`@$T%k{`Rypr=tj6&p;;2)5brgm@&;JI;y+Ek3QEhSlhzjatPmYbzYM1j~l6xFK
zg8YKsS~>rNYkd~q5rLOf_D9z`oYb9L8{xQ4&f2IuQODNCIPdAjIUdiVPR=Aau7k2R
z$#H!-Tbt&%-q)?oxVTvTQh$F~M|>?c!Xhr3FX8g#zKgLo&&dTL)XAfwJLQ6FOPt@=
zC!%;)>_GhlWNn4>dMCM-!fZ6EH*jm~qWC@<AAcE#r3)yG)L2s_gE-M!+vZAox3IS3
zt`B0nt5lRq>+oLOEB!N%_i-J)Ls%E!_()f&Q3nmjbZXW)HZJn7;CgvzQ|U!59%tv^
zM?F5y`2}Uv(YJL8j?-}}^u*75{l3w4DNgGAuFG&-59W24<a7~Vm*f1AsJe|6+?Wg$
zIgNAtGM@kY^)Ovmc86(jUF8#UO~{4yuv}*)aX3GY*2nZUa9zVvFQHCdrjQvSK7@Kh
zc#GruZfRYc<6acH99O9lmta%oK9d-^9s*`d+T!&-jw9%GikqG%?vFVQ5AiIc3*N8i
z-SrWQ^UPUR&W|imd((s0;|OdU)`;V__0Pb^DMWr7boB_oKJAY1;PupNqm3g=q6#^2
zQqb=cTejgLhaTS7lUYMjUt_L!m*APRD69sZh@(zkR9r6xs+=D7iEP(+tZ{wa;>j;k
zZ*cr@{FOZDeH<ezTZiIrSAw6NNGkmf*Y{%Am4oa09_J(Y1DCJCzTRA{4{#niN`rSN
zMsU5uNhlYYa*XrCNl^zs+cTc9dDPMA^+~moyoTi`QBfeaRj>8Wbbo|q#97al^*PH{
zMkHTHNAyawzQFkrd?X3H+mRF2mpG}HoAqUmCu*pZgXELpgq~~btt=m05p6W$jo9`0
zgbAJE553VJ2<r*7zQv8r$Dzp^lwy^_^&QS51zGT;`r5m`XYoq!2EeA1dzVDnwVNkm
zdhiB2wK35IFRwT^IFK=V_|=S3ii+YJ{WAw*oTdxTo5-y8`Gy4N^>DmFW%l$pk=cb&
zWi#X2v@@%da6^vUIy^1vXe+FT@(l&fe-(ei61?h1iIWR;KPqmU;<&f^XM`703lxzW
z7oOX~-#GLvH8{DjqLf<F(v8eghYJtm#^Pg3Jx(rcNlP1iqP`sq){)!$XL!#$H-xzG
zk(4#~y20T%jf(9UYG2JM9)AFmjIDsNzN37iw!MF!*+-EvQciK@xh;jKrP9>5`)Bx%
zN+=M^GAs=gxDFn7r}02UY<&g~-Zqrvz#e~_R!lVjH&BF(F|;q$sr4#7>Kf|XP;*<G
zRp(+y=^nJ)c8A-X))Rh1hvU(RNaCzhob)&zgKy|@5-U$0q<`NAaJX=z&vij;=;_y8
zZwzsbqnb)GD(dfG*@<yldvRl&<5B!b;T`S8jT8tY0PrFU(!VdcPF|#?7t7!AyvTBm
zqa#YP;CdmZzS}?J)T6X|i3{rqb7Ps~M-`Qk3di*Xy0OafqlzN^t{(O`);W1}9(D2^
z*`c_!Q8T)DbR2b}$wvdn=B5jqVb6CvLHH~6_%W4V^EIE`L)8M@&e2V2zZP+Kz9-b8
z79Ur<l`kEe8u5l-M^g;pZ!N)bOs6*a<MAnZNg8?|3)j~irIdA@7^&sBvL5KQJjd}j
zr?c2r`}GE>R+L7UyGFChsJvxcSgUenJ#=d|j_cFkTHV51s8i1xvXMC-kmoc62yDw6
zhnkh9ui@AE9~j$`S`XqzxW1N``ZrNw;0RY8dj7AGbFhC?KsLJFZM3bxh^T&mg~Uo3
zhFcO(XuW0QrZ~h6+g_Uq*Jk*pB<GKbDD(J%49vTkHq`Zqx{2az;FyeUH2bm3$T)VF
zV(25p>6o;#iR~cSEOT8wfp4O48a64x9~lY0sis`6bGc(ms8g8m4KA1$k9~v{Ur(Kz
z+FV#Kr#D%-I;Qd`ys%IAhkZBoL>ez!Tr$TW={ve~N!pM1WhhE$;%0|i)9;quOi?pj
zA5LCU^dlNwz@#Qm!Y<k95BR_CQy7*nyl51>ImK1KRuj%dYBHnbs5DILL2<L4fxJjU
z&wors>B$U)Z!U2Cuj{Uq-1fzWiT*(N=#Ek%Wuq}lD>>u!lSU-tm0q3WU&klL`cyo_
zH#aR(<?CiOZEmK<4WnPfZW_vAF9N+!@MV|J14ndk@p1l`ifHP_gSUh@`SterB>z5r
zN8?iflhDT3i6$FyE{2Y$8Bb9&d_)^X@a}*K-je2IG9p@NB&>f-aZ7>o*poVVTPHjc
z1x}5ZIKN*&B*FXj&i<B)+z(td*{^<1a!ZYCB(usAmZwSnnWtD0*Vm?7T3k)v8{X2k
zaOy2NW@Sca<d&|SiMRB)Ua}$e{(|ex6#q=|lO6ond*u}v;=&&8*tjU~K<O_jJ&KYM
zdZeZa{#5PEU*a~e^b!`HQ8;yu*;9DR!ZRW|MUUaXkg}ol4WClVxjh}oa~dmn5xU;4
z`Y**#@OALB=Vq0evc+p(D{>j#J_ResH*!k2?zTDH;5u{iif(dzFZ^I)sxjLB(&jwk
znFlYnVyoBp7n#|Szx24!H|nTkMBGaKHeNvc+>b>Y%KmSvc--oUWWRsra0FsTxb$lR
zw?;XRw&OnC_N{R_s%}kip>H~<Q`;%m_I_#9Oxq+*bcW-4&Av4&e+hFdQiV%W@YXz+
z`({cseOMCq%8cU|vSWHLdTWJ?Me3+iGc}GMteYp^a4S+ko#d@_cy`)ceni@t6uh;g
z!qDXc-z=gIgMXbMoX_}Y4){2YI|v8A-yPLI(D`eK^LvpzsXH7;3X;(Cdwf(5xr_W5
za{o>`q?B;mbVF+Pkz6D?g~Gt;C0f{Yhg9&d8H>axC8wc5&r#$BxAA>{Ra=Gy)2Lw?
zjo@F)Zo{)G+{WP%)T!aBNMffXHbEzxY$>q8g^}3LATY<o6is4=vz}U;<9p>r6ne9x
zRi$U;WAC`cZ<`?Vb(@dt|9eUC&iHhsi##@3Jv<`1ur5ye05@2-#W|U531>%4*}b%h
zB<GLGiX`~i+V$JgoZm~id|Sr-{blgBEa&%*iz@Wx)$6tbC-L{?dpr8~@#`4hCSx4D
zt<L4(WOh2@>N(luyuP&F_KA3lGW7hOlO5Mdv1vN;u7g^iAgVKP1(`a-Kg0hYDhzdJ
zd;r+@2-DuxqwWX@*5kZ&cvr*^!^3;gV8BSJTOmxwL>;_ehp?U=$45cL_8AyR`sbzf
zPlnA2AZ&k~;qRYiMeSQ5)lQjw9H?+_knL)~zngd=fD5A6B)Mh`3C~qKkQEUaFkNlC
zt}YlbUF~vP$Z!@q^4R8fA1A-1;(5E{ZUMu$M>wxzdwWz=gXm10(+F*p9$jdEZ?{5w
z3|>A4?}heuH?+aqGu%wHD~b^7gR6Cva_@aR{`~hL0B^?&yhoyq+sj<(SnYaM?p}`_
z^atGI=s`4iYz4x|_3ceLBX4h6%2mb7=VxLIl*4*GzJoX;8^<E*pVbk(BVdsoY3YuL
z2z(W8-Vx*cagO4XE+4!jZSjfmop8w+Ziwhkm_m9hb4S4vBeUqx9Yv1glAea1w?n?8
z%=zJ-D1!GNr}e9HiM^vH>QD6#4c}3><nyRgI}MH>C${Z`2}e7Fkvptl>h0SdZLWjE
zIR{_G^qvje(UsSeV}~%kkIO<B4c&<j%=FJ3v%;!>>~Uv^+tk<6J0l#|{kt>DaeXbj
zllpJubcF0u^Kps$_4||9uLWir0lPEl223oN>Hqkr40oobmZy|NovdXnJR`C&79MUZ
zK4<YUQKrUp1n(@!;d*D0%cXouzw8D}Obz*Gg!kzvuxbg1L^Py_>z#FrETc}I;$zDg
zu3|idT%?)`#L?r|;O<>iHG-AuO8%~Z9OHL6oIgIG_?Xg9SbS9RDR-(Kc30ZsiH1{m
zS>Ze0QFs=m;SUCVAgp_MSDur{r%)$jMdfVS;){x}xy}Uds&jr%e3Asl!v|2KWT(mb
z<0p*o3_8_TG?m=9D0si;I|e=WG>6^Q<8u3|l>Uv(82Y-|zY%ZX$0tM)cE$a>;EEHn
zxGEW$9{gLx{T7ONYiIv}|AdGF6Y2{pf1|({7Eeehfs7W&Sppd)P|yM;OQ4_xs#>6K
z2~?Co)BO@__-}2Cr`VF?7<f3j4sWEY>0(#%8v`;|8?BDxVw&C+L2<WE8>3vAuKOUv
zd&QKIIOk7ji#jPEvzxzPyuGV`hP*^>Omndl1E|BtjalV`9VHym?}lbhXe&7iirEJ|
zAqDUE_>!FC8_Qho#H`X+*Rw6V`2(|0(7xBXuxG3xm((E#)A+=yvLH`W!W%nWNe{V=
zUAa-Zo5T%IPppeFK9}Y`qn&uS`+AVr<Qi_1<n-X(IJ0;BGXvz5p%)SR?(Ux%-rrGD
z2~Oj-BE35Tp!0BdO8Pv$JAD2&C5=pHUDLx>aP=+N-FeF<j=f>?)cIPyXz@wZ$!v+^
zp1m^1^$Ek>G+>Rc?UfYC*+}l*UEpM|#(7*V^5Esjxx2y1Z)cSfj`R^W@xp9u`8*G-
z<mk=E-92su57^_M_YW<M$E2}Fz~T!EcPzZF@F>Ueu)q0vIJ0dlUb$<;Ir;6DQo?3s
z4{Y~RoW_l1^b6ReXkQ!DK_glop67TxCW@|}_O--$Pp`u9k*MfG&yDWHhFJV0wu8Zj
zI2k`d6UXj>(es}TC?G8j+&EzU5F1>uBf)#Hv!F%go)EWsl27q!$97N5;v<Sr$O(T>
z(&F)U@}3yaCy^c+zb7qs2%Gj)XL7-Nthk(%82=*ncv!-tUqt8^@9Fos1I`RxK^d#?
z#*W7`+%F;oA13|2;5{`?;^}Z5r2qJ`QpRe4YmM0cMeJthB^21=N_brDMEpa$AFufi
z=k>PY9&yMJoIN%|+iL8^p%d1JH-8Us9oVdbr|ower9TytZT~&0mZxDP>!iE_6Yhn%
z@9#KmxzE4Tq~PDPqCJ9>q8v9Gr6?l4f6sILWatgksGw7-zZYc-Q$`T{`~Te!q~cn0
z@70X}>&HBQw_<p5O0^<3Ki)sH@9%0s9fv*t$&?K8pe-G=BDJrkyPt5dJE9%DSDp!o
zJ@@hl`cH04gZH|x*B*AS!xe9cDLTS&JwNUx-sltNM|CeXKf?DWIGGM9V`+C7i=i+1
z1E=cM=U!`sdM)I+5&dTQy#<czZTP(<3&$k{4@~wOi2_ID?ycIq!s{F#5g&aCgUx*@
z@7^Zo(kZ1QFKZ+Bb~x|#smpO3J*D@?pj{Z3`v0K9h#sBH67L>m!PkETEIuRZ#3zzU
z-?8|-=z^C{|0BxDbQ^Ut8Xw;mL)*?xM6qPra0v@+avwc%{(*Ic9-LjY4~F6?aix(X
zd-fr7IwIQ8Tc|_vk0Q6L?}GkerE7j#SuLY9{FsBApnWlqz0g$EP0+q@WiK5MOm_0`
zTmnzYDN8N#Zz58K*8+n7uv3MdB<y0H7>~mIDFvx?UqD)#6D3P61x7@CKmW`_t-$K}
zdS8sYth;z$oa1SnEuby$D**RdAx~rD!F*9s-%h@qs`7MS&h^E;O*6uDD*1pU-$(s0
z@HthH+|NIBpne{GUy1X2_S{#o@C@o?uja-hd|#dOr{)yjblnj%M{yfCH><!l7si-~
zkJ81ut9U96C%u66IF8(Bq32hp(82qCGC9jfDIiU0?0!e2M==g5K8DRxlH*@Cn!KOl
zW6=6=<Ni3u@p4@hdSSgmy+6tMQwt(ZyuMAoKh615I-&?(9Q<9Z|MzEQ@b0Hz8I7Oj
zppM|)4`Xm$y!~YaPmiYiOI#Rtn9ly_$-=l&vNEM7#{E^UhtZUTo;R}ZS99c|{Smy=
z3d&f^^<cQobx$K7$iWWBu_&}*lP<!61E|C&Cs4|D=YbFxKCLB<JP;Ai93&{pX&lLv
zp&L#|lvteeXsb!Q9vlx?nV6FwpJR-T2jpZ4Kak;OzN5|OTrb4;<{;LmkS+A@fdUsk
z4cQ~3--#(+-XMvMb8tz2>J+5(fvPm~Hkmn%x<qE`D2)7`=m=*n%$!I#@l82ykDZIq
zf2XRzj%#UF7ga;|J9S0(q|OFcrz62;K%`>`r4{M#ARRG;>O@D0QJ)Q)xSNWDmuYHJ
z-wg7*0i~3Xwv(L3EmN6n>%KPAoX5vIn&AEVCCp~l{lT1=@^3h#(yL3;iu15fwOQoG
za7PgRH;nZYDJTeBv&{KOM&VVCV=NV+=l24j#`;D$;s0(zDPgQ5c=lM=^QYP2HW5_k
zKy+OH9J<-#Jguw;V)Cx}uz%`d4^oGWpz4l4Xk|)w{6UAyqvKUH=5_qRDCc#@AB=Mx
z9S?lP==g(4IcgSsg*x7XFrxS%-a3b;16i(%&1)IDr|JpzV4m|jFb@_uelp3C*&@gF
z$bGQH@sm^I2kDK(gB9uDoP%gWeFqcjL2T3D-0=-t33Y0u$#KtF>YEX8&)GJ|PsZUg
zS`T~9buB(6x}J9rO_1L0IS(7;)9a9g2M@U$<k5#5)XWCSVWJ}(*Vnj*qH^EyP|V^B
zqB;)_4HHiKNzUW`r48OYseUN!o{)?@l;v{6y8Rr-anuw)820rw^PvLg@tQ{#{On-|
zIJIBmybjbuW%s8beGgS-Og0^i5%s;0QfkPJ{FFm*Fr-uRQ0r4HwN=g`?Ejv2yC*H2
z4sfBK6%YHkg>QFca}NhNu4DW#xntx6_k4AFPJ^<Ga!emoJRG;=3aF#+4_mR<w;m6t
zxx9|$!x@fy@;Qzxd2vJBKM?kurA7^Bv2eEINR-}bJY3>D7T&<2SP~8)oSdz2UN12Z
z*Eo(hn&Z&(Zn__Ca30s}Eb)2(KHTQ~JggSr<;CLRE+@a&LmkdM;uG2V{+Y8rB{7eL
z+}|aNIfoe+fk&d;*50aPkHk2R-%X?sL&x_boZ3ooUT>5hNpc(;r6TENd`d6Pc^$Av
zvK&XCyU_EVTRoEh1n<m;UA<*|q-gOO)X7ikkC9-kuSw`F)brz!3g_o*KdT(qOW7ke
zj>BG_{P65GIKQBbI{DG$I0jl3dftm&kF+_Do6k1!dLTa1<@^yf5jdRUlLrp_k5Xau
zbALy~!GF`^1Dv0qMxFFRC=9)birb?Rj_ZN>Xw+Rd!jIB8F!a8Us%tMPmyk_|V_ng+
z>`}ZSieJQvDM!e&qUaIiIaweN@+b^TxO%3+kLvTOM~j@-BlOV{$8kGfgx)v3Mk_Xt
zI<;5jxE|4u);O-$kw+WupTY}1+O+tt=%PK^b~_8qOmw*%GLba-O`y&GV(rg^_ky)4
z;0Ei2O(8C)XUe8e$;_rGm)G&#L~-WvZKFLezMB%9*YVwy<T&CRpy%v*#%)S-9*2!_
z;`NB#l;u1|bk^0+14kY<QEB+~eH@#D_s?x9zUao`uuUZ{=f%O!FZGk`R=NCeay$XI
zJhcX=4=sr(_)&dyxrv%L-15TF<~R*g=pE>Vxoh*NlRG_*>tX$v+}6x`%*Xj3P&%OZ
zn7hLXKIU-xhM4G5vm;R@My27demwXXMZ>`L(cxopIe#CcW(@v}kg_Kq!G<48bKcX>
zxF<cq$FiKK7g6!N*ndVu*}?jS!=LbD1ul0+O7SJRPHgxpj-ox|6)udYD{XoRecgN<
zZa-Gz<QWkWSg0?Fk2Nf^q?&2TX3kw`Hq+t4d*wwLmcs6lFonLyd9>8@T59<$vL#z;
zg@khy_VW&>k+0}ch>L!OsTGy)S+!zZ4sE0%Cok}=1SfwOLLH8^Qf?dK?xXNplMY%d
zBVR{43O$T=m0*q=fOY3+&w7EAKTIhl9Q>mP;^L$IGY<5uSGcf#QMpy+`1~~L<YLWz
z0ePfVN7Wc#diu4R9LK5=_!@S;XHYw&-{!o&9<{o1zq;USxUT%LB!wUMiRv+kd4TKS
zCNK+|3-v+d;|}Ndr#jktJi>8(jek7K@%@{k413;-WRJ(??*H*5m(y3C$0?vj-}l1Z
zIP|@@xgO70JlP?CvK-&v89xR|bH6Y8c;4c0BnEQg-r{6Lz^_-K$IEisJ#MA#M?R=i
z6LmLY?tO~kq0aW>P2LK2eRZ@F){jviZ*v}z=@PGJ{o`HE{|J-f>w4Th0nQA|k7@)=
z4?Yo)bM&IG<Mz`%;eW#6l6$HEJ%Kfs0{KMT;&Z5zr3A;%j4E6%YNJo2EuQ2_FT-*D
zzUdQL8O<liz7ei7Q%X<1LNfY9iSv6ZfBqTb_?ZQ%_fISW=!ZD{8@N+Dv!cK_7tTf$
zE}a(}A?&>g`%f&xw7mW^YbmKn{Sy~k`pL*YsYSzcY(|`K($%o5j9Z>#s3wWm3I8WK
zXXqc`h&*_IlI$XK|EwuL>Rc|HN1gbl%<YzMVs*-96xc>-7|kM#|E@>LKglzbY)Yjk
zeIoxKpPcLHP!_uWZ^xCGBOQ7&!p)pTG#q*oXEV5@gr7`Ud`$6a`B3=Dti`7kj|ckX
z2KC?Y@`n{s{12Gb6X{7Su4m#|5%Kyq;mHcuKLhV8fcKw8ZjqaaD?O>*^IM3U-cdc-
zu$1s)k8i=~k93GyoQG3+@N!N)+2Q0_dDN+;o|~bOe^J%wk@n<YK91vtt_`E3I+_0p
zasDi-!|uNv3(tzcvDmnHcB7ovk@;7Q<7Z}2Cwp=Ai0N4WfctX7$iI?Y@~obcBn{(-
z2eV%hWwh)+JFR%6@HpHi7g04je0E;Z6*nM<{j17(J!Sq?v+#n_YjB(%FCK@h&>XTu
z9cWp6N#Sjddx7n6{H%~D!rtiFIi=U*yuQLd<>UBVJisD9^qt^SA<pX!?o$rOJ^2X7
zF#x*chrTjD73ciiGV18>Qwfga2*XL~(fCw~lV_JvC#9^2r)Uq7!byHMuE0D>BU5+?
zQH3S%-v22plV_HdUWw}+f<+U0?t>Eit)@|(nWt)8&VBcSoT+mhJ&!{#tS=8wH9x^;
zi9ehCA^kSz=fp)BJhk5>Ien+InZ%9$&25dJK;6p|K0UZOz-fK0-yGsN4k@G1^Ns{I
zTZ!8rFNYGZ6Sq0e_33#x_}Myvo0FW^%h2YOTw*t;IsgAMsFS}rcLJTTIdAb)C%(XO
zJ+U@Z*o-jf0lm4*@oYvUPs9<qr&qOjvP13IX{G)UUPocHqYnT!H#j~I$Ny+YE}xrQ
zocwVXbu!jbo$Yd7kFCu;j{lfC54|=Oh7-E8?EuGdo0<JKX0IMAZHMz79^tsY&1^?G
z9?6I%?D^+qfRi5ynap;Q%l){cc*whd9<iO{0_UWaK+z3AuwAnFoGAV$qDP+v2)8So
zJeca#dR4Vv<NP@V#jEYZ_W#6XP+tk!Z7z&y>70c5qNiosN`)RLZ7UVD*MVO69O@aI
zdD_SAj^Ha4#OvFFr$d~_-DwrP93M|dIC)M3bux;}R@y&vzXYc}n^xHM9D6!7elnK9
zpPY<kP#?rUo#i(0P@#M>=7By6cskE{J+7ZFaNM(3<hYL0(<P3d5F1Ai#Mg)XQ%9bz
za83`~r)wOa*AZ#_8k(L(7g361hWx(6o^Ej=Pr1YKB*{_itVDjJAi6L%s>l2@BxcMZ
z5BG5#6WKWhV_skBo(Z{6QN*#Q_ygYg%`;K1q*vKzVjR~K=NTlHcHqw>IDan5!}({_
zwtWj4@y^Vi$#CK0Cy2nQ7-ISby=QWqrz;M4?~^mn6gaP6F?_~KCG@h)Zkg+WFS~Zh
zd2+VOdA)i)Q{y-;5lymtZc^zrI3FpDpGH@ZmZIAh-Bmb72YsG+&S`iOp@;7?JxiEk
z1>c_aSvX$UK_jzt%$^N#{u|=9(=c4=MsncU2<Ltxww>nRw+~@=zJqS)@I6c2F$NOC
zlO$fxh-cHBKfWyT#Opolvsup1!{bEobfIsfJXO!QXNz3U>q3d+p4~FXb*P@La2zXH
z{JZeygcxuNS&j3Ujal&IPZ^~=QFyk+h0v)c8Tm$28R>97k{Lf8w4N8wk(3cLT&SYp
z<!bm`fRj1p*mIHbjDO}=qZXSWThoKjk(6Olcjvh{$A6MRo#f@UOKdzHcgE*A3dAur
z-QYc!L)|cTURv=5a$&&A#1|)s{P&=B9%+&3G73W*Bccl4eSsC_=tvqo$<<L9aymoL
zH8_4=P6RSof^=q|Ysnd~AcNJxQ?eu86<Jc!Pa>Y5;68~E%c10MB0-Mod_3>)7WI|n
z`3T3)%Z-1Z(nK%EJ|A<}Ffr%*6u<%m(WU3{Bk%9yjf|9~S5kDE<Mh}C2E#fj&u2N0
z&3c`9y{Uda&v{%$yWmF;CqJoqD>Hf*{5-X9L>hLTA0Rlfn$p9~Fn-@V@;ucIIepmo
ze4XRCdgh_;{rcniCg*YVRVDlS5b^o8{0igqT}v*8I{Dp`u^jp@#PYwB65JAyo1-lu
zu5=!Db^k@r`<3z*D@pp&y(KD*E+?Zu4Je}t*XY0&YQ*SiM11sL{+V7Pwq!Vs`@rZK
zdV+4raq_1LWxJppE^;1=LlMf}inpcAc|63bgZJJv--3;u`=<FB7~dz<A&d}hq0(^p
zC%7a0A(ZB3ffL`9m((pSF89-d;yZF`Z|PZlNAfTDMD#~k`d|1Vc1=GeAsBrj#D%{Z
z6@ee=FuV}q<RYI^!eRzX`^7n}C*liM<h{0VXGFbT{v&;o`9g+USQJwY<lF`Z@|^x@
zZ~RQm1-(kVU}ZsXm|iGzHQf27p+~Dz5vBKf{R?#&&=(q9eo+o}icMPv?Cmr0JmCy-
zmB6kXb9-hn<`%Ui*ujPZ=ZV9e0P02x&r|*BggAbd7|Y^VI-=DhuDaL&o3j^nl}*w$
zY%NMCT<xqnR5$pa`4o?rW#Ee#It$ykA668Y<-+<Pu9M@q=aD=h9qAM}?>T3Mei0_!
zS$f!X%3SGZDbx|VPE~rg37*YfM3xDxqcFPRdC-t?o^m#(h}SFy%n&{sL;7rFbWsR6
z8SBW5b|{91+|R0#e{q8JU>rtAwFfT-xUe3^FFG8@e5|9fu=eo9DCZBrX+QW;?d*$j
z&g<>ciwTaOQ4!AnLnrhS|6)r1zU;*em!l;aa<ld7_o9_M{fy|vyt@<!Uo3KcoOiaN
zFSj5smO1%zR4IZlsvIr&F~Y7V?u&JBMmTBz{A0CYLK*%!MUa%+TrScQP2%<G^NU^1
zFY1n;gJq-y6xuIQVYH(2@Df=!aO5F<4&{NYk)FeOy5xc%Jx|+>a^BO6aU6PevOAmv
zPIj$4?Tt4Yz|Yo~+?P_8eqQON<sf{?%HPkcipOT>T&%;#or~YI{k*Qg0!pKk`WEA*
zBFFKYmHfGIQtw}0Dsvt$233jI*X5U}QNu3wp>6PT5WH09<X8@M>Uq=kaG=HMpY}xj
zC-mUZr^Gs(*X!>~J&x->zD#O{FBl$W*z;ZiemTJTMR=Q<+S50tFFTyq1LWl>$Ms(8
z<rv5DigPrl`~Gr*lVeTP(f60tjp=w!eh;Az4R6!%a*iv(V)tW<RtobeWwGooI>DDK
zTp4$Z`SUPN^})=`HO}jC`f{D)wAqH9ccFNhJU7Cs-#~e}C0Ecb=iy3~FF}a9*L61u
zV!?kC*p=Wb0TEb)U4MuhLcYuYjfF|)`;~~hD-XV6#T#->$c^e-qgUeGjvg1UBsoqe
zvOh&f^u_3vH0RGpm3)3B<L(<qUdeL)i&Q5*$MFNQqR8ypiK!~RqTB6>B^jsfKSjpR
z4+!5Pd~s}_j*_W!+vsa@5k`d9*XAeqJa})8ywc{p7mF^(^%#Gp$MHONiqxLwU-fbR
zd>oPd47|?Kt5yyXi#T{M#;-=WzK-FmQTKxu;@qF<z1gdAE_uF++N*McobYOz^E!*K
zW;i}f9wSSyW;w2h{i{~?M({rU&oS!sGW=>m?ix@3x#wAlTlz&(wNQ~0?N##Bm=NbX
zq7IARh5OYy=OcK!NW8vqzuM$HUQ%(!5JSD@zS`!zrzdwG;@C0FtzT3igl=!et@HU<
z?Jpkl&p73LM}Yy9hKG7fvDM0+9xYo*&yd$GZnd&`gV;QVdmQcP)|jm(0(rdvZcT9V
z0#sdx@yaF~9!R5RHdzo^=+62@Mu}xPf4*3pSLaIMt$EH}kWxBD8H=gs<I1PEUt7yu
z*oy@P&~N}*ik@#|X={!1$Wj{oLa*};&U-Plva840))trl1-22eC$E%SJDj|rh&pAr
zCpVPa&&PJ@d`E)Yd?*di@e+^o3vFpzh?5uelu}e$y66{pxm?F)Tbv8)*lbI1d^o0z
zBsq>NXca9l)SrXdmgc-3U)!u?&L=r^Z(9z9(Gz;V`vN?rz96Ic0_P(dFLC_*x{@!;
zt<km$=YJVde9aBQ*fx?k+V$em;JAJdW1F2*?MI8td+}>?T(42vIxfDK_Xn5spxM^t
z3Z5ZsiH7jjKGDo!7nmOG`Z#_;fCPb4X>?HA>xMY46Wet-uKnspTzt@TSZ_|dQ8&`T
zZj3AbvL?#Np!?^ig54x17vae(rC0ADx@pc|P)41+r|=rydyQu0m2}E4u~bjr;Ga4v
z*e%L6xoeFGnytUYY}QwSZiSn~RiFso?{%~$O>cy0|AhtRN7FSv+O^VrzN7dyO2bcm
ziR#LQI^3l!8T^G!srT9hQNEDY><j%fyt(+=r=;vPD`k2PyykG@G#4*Kk1s3(M-X3&
zqA(gizb@L~-SsB;TAY&?;WB>_$m=fj_m8DGrzgj2X^!hL^_rC}J?US|a(Nx<*K!=c
zu#7r6oJRqNgZi^gdRD)ND>Oapd95e~G=EVNby6(LaIUxr2Tz{2RW5u%Ks3=q@3Q|I
z!U3aV%Ed_dMP+3PcMM3(K%47g+@>!^XfFyVu`cH?z)}ughW2%mG2(s^J}*M#u3z>0
z#CB@!VrAy_m|T*NEnsoK*de{?!PgU99lP;-0V{xBVqdqiqoe)0odxod>}73x3b(SL
zFH^7Qxx5<FM+IM}Nn!L$uW7FrIX*%ipoU8v_Zq+&jZ?Z4UaxRokL%ZK9M_ZT^*YDB
zb{ZVVJjnhEiS`1D+Z43d_j+3<eEF{^1yLxGlk)l+e1ob+=gxP=e~mj1ZR3pqr}b|5
zjS$D_bz|sx2XAjgMD{nB=->Obf5t35{@;jkrG3Tke~rUBudRgi_l=}lk$z47_MiiQ
z-^jQ_=F~T=te)>EK8Moihi5d;ajyebQuUmEqbQPaN*wnano?b5yv&WDxB1^-TIdYD
zQRV!_j;Ml{U!{Aa&PlzEdgGJnYg5SF58%Af;!1@K>J)~KoH+}AONV#V2LdTZM&EJ!
zpZzVGr@v`4@}`fIx=(LfnY}n6%24v_wdYMoW?>Ur@)tU?r8nio4Zaz-j21-ncNjK0
zif<-4zc<Ol(>GHb$B<1!FMM%A@fprz=`MnoTg5l66#puwl(2!ux$MZBMXs#F^Ja<T
z2v3)s-8-%HE1dTt^vSF`{{v_B5PGxD^)M=u;JxwuW>el@UGzVQpl4J~#tj7is-QfO
zlX2uNsv3#ZJ$TE<ar7YYdxT~BLL~UD5GQp@Z#f*tpo~MwbN{U<=iz=9yyyN~aq0f@
z-y80~CFf@NtrS=ORS$I}_^qs)i?O$IoYxzfxAGi69#vP5B4PAgZ<OA$a(cX@<V##$
z=j5%ji+|<gZCgeuRJg+N358op##v>$h$!ht^l#O<9<EA7@IUYzY;s;dT7Rp>anHdv
z$2~ipPr<u#8g4Hl3%^#K*&dLqz_I^}RX~S!yJK0vDcJuapW37CQJK#TQ1Xsix5v4X
z?)G-M79X}f$$77_6vq$9qK^D;PjeifmJ0j<cle$j$r*Xp`P`n9&Mo+Z*`op%#*s@F
z#=?5gY_|pha#sc~cO%;?T=_S?@jpWMH#NZIXxpNjq6mKWZ@Q9yJIeXrh7_KZU-Y`@
zPsqn_;|k2l_v*K}pbEv?@^n%xxWqp&i?WMW->#xCx=%g21UdRG^_2L!x>R36)~S00
zw%u$8-zFo5^1i<Dar8)s{_P&8e~UF4yj(kbK8tLj4%<CPjwDzLjA<`=R^Rnbs~6`+
z^w{ksJ_S#5{Cg49snHb2)!-0&2z(w=kCa|UhT>R(Q2Z{WG>fjgqrDQhpigvrWecyP
zPAyjD8w^7w`36J0guv;GRj<jFej628@T2<SO0UiN6CKpasFjZsadSg<^{r*E$MtY3
z+XO#LJNu566Ff&R`S)F@qy3JR1#R}7m~B?N^G=-Ozr`;KF4g&e$4bTT@=6JBt^65J
zin3hy#JZw$9QRz$%il=8Q?PidBQ)<=`S~67h43;8V+i9y=KLAQD8FeazH0Fqh1V^-
zt8mgY?CsMLdDwGb`x|+u#Yr!)9Sg@k8A{>b5Kd0^IREXq2wVnU=lxwD=W%`(Cte5V
zUB}|<B6}H5zIFTWCOCgwS~Q_QrY{lirZ}(1;k#*$d;VlNt_RAyR#GD*hyJ~r=kmWR
zqdsA}`0nMHekanuNvJ5N-}vR2e*cqJU{$Ub+W~sNFL<{O(#U~+)A-#6$Gz@bX*s7X
zl2^!Qo_UnsOMLHIX_!lT@a(+_@<4sV6}VLB)BE=VyfJJn+b}jdmtsIl4(C0+2*>dg
zzQC2x`#~Bw>BTs&JMmtE<9J?`g`W4R?)TE1PlZGo{C;}PdC$&G9rDy(j_WNF4_t|J
zXT7I;ufXZK+404CioaLl-0v%>lgX+m!iM<XV%*W_r=RcDx$ut*q6ka$c2^yxw}!pf
z=5qL+L>IjGW9j$smK8qNJ@#IY%jx*O57-<Wy8ZWk9M|!F-^!zo_xlc)*JJ<vh>L&T
z+wVo{0MP6AV=m$0NI<oW#OiC-`w7nLf%1Nm<9L?XhMv5NzMtk~QHA(@T>qCK#78di
z&+r~*ykFqL$Cptj&oHy-Wu0@EVEpR$Sl%bnm_&HXth|KA6B!|;8t3WBAn|(5c)!7U
zyb!w->+0|8fJwcL!Ze>zc$eeFy27n=Vu?$`p7+Mo2LX3=2!9ab`d=VDwD$pS|LIkk
zjZ3k5>_IstFs78^s2a}vA)@${R66!5yhEZ7O+Fw`4PhOS4{{vGBAUO7@<bnk|DeE0
zJt#gXaU6r94JGeatRGb5qBpb*ZvTNs0=bRln{F>ZXmDlyZpH^qj?>-uGNk4Y<T>fL
zIgh2O4Bj14qaRoa_(L7SQ2Njc>>mjx98b)y#yMRaH6tqLl|=DsnzpLV56O3fhfj6l
z|43%ZOxoh{1_pTVD=QynIj<iFd}u{|xFnqA)GoD0cCEnU&5k7aQT-C;hgJggCG*2F
zZx1gP=gF?uZk6+RS)=OO)$P_f@7c9-27lXRSHJ1=VT<d*ZeWG!Z-?{x<&O`$97jLn
z(DOF0A5D-0>D(0<NPmn#7{U1{B%0UwXNDZEtCxU}#34IR8xoJM@CU_hoBF4Yd=%q?
zdgy<Y;P@Z$T(^Qw>7U+wl;S*|Ev3Qx^?>|H?X1TuaPChb2$OSo!ye8J7r3rItoo?P
z@sW_|Qk#pkdYSXbH-vKy_~8a{GH)gDJ9Uu+Pj3$9N$!NUl53(g1};8US0(-=YM<=1
zIZto86MteIIPpD;$4SYxNa+7kza~r{oZ#d9ae0LYIF9u<4!r~aC#QJF;<de~g=dsJ
z4o|lB@3iyagajA(Q(g(AMe-gvJ|WBbOHzt2D86LzdBs;<UTj>6BwkWcU`te2;yU!j
zRk+k&LYAq^9TY}LvBgQQ`uJJY-~=mVY7H5jNa}{3dW&vwB7Pfkw}0q_i6PFb8@IuU
zj)hYX;K#&>g(nprwQvki_@`go9-J8GJRV>LR+~K8G5o}EkAv60vK*Y4=KKkD)XAR=
z$InfQEc7Nu#NyT1a;fd+;KTwK!^mj5&67Hru@baLVEj7rF0becO2fPPQ4s~dP@RYl
zPONj@(`$SR-sJctSovX(t|n7=9-P>=Sdu0udo(bHM*65~c%#;y!9E|yFX;$pjc2vb
z%Jg`b%uFBb!zv7`!M+&RKC39I(AEzF2Ky4C`B?u>;`ufHfibm}9qdbSCABji>`Qa}
zOb2ypjN)y$uAXlW_GLNl+0SwOZ0aKJa*n9tcib{seFZKeBCg0_U&-y4SYGu9W_cm1
zSi<6gDyEvURI|vEvecB8=B)krSZlDa&4u?*i1b<vnX?i~iNb62l#U#U&ypS@L6pfu
zzYd<ZK2s+RPI9+qSa~LexR_{=9@HbEy_Ob<byy^H)F;I(;kHPwLke{?CnenVOkB7Q
z_lPAGr%9Npury$006#KlLwELBMb%)Q+xFVTL-C!a4FxBWoY7xwkmA=v-)p<fd6mh*
zNfqhSIoFd<X$Vp8aDqlYQD+UC@To~QJ)c^f_k3!LJeK9)qz>odQ*=FY;Q7?!Jl>a1
zgIB|0vX8T+I_hw4vLo{A5&FB=<4ZSsU`>v4VeR5%D<#^+$+)!4oHjHvIl=X`Ym<{4
zr<Y`IFkGLU<~&?ag4eERIeTdcb#lERUBB@Lj2h4N5*NnAZ^M)~@h4YAxr1m<u5vj<
zGq3^KI3uEr*Ez2<Jh`E+qLZ6k;L<$m<Q39|fDTyMLbl6f-wUOcEgi}oCb$>T;0{*4
z@cQ(Ph?plvF)#*Gsw$$y>xl0_-7t6>4B%BncZhNJ(l+YweTRfx8#dmEpA+ba?vUcb
zx(7R?IqtcZ5!ILcLjyZlX<H<AtKlN{Cl%lw@?0GWNY;=j9q1j9IBZu22X`oO!9OQN
zzJ@;$fk9M-g6>k?lB%FiU2^vyL*X6ToL47OgFAHOj6LEe%-BCuPN6hqg2>;DZ@yYN
z&=Hvu;I?!`rdUbQ5t-sZp7t(#;y?UvT1qr;GLkhV3eZT_uy6ck&}U>w7~aG=jXQ!U
zcrQ{@lClfmy%}A&jC4pT>vmxv$93thi)^dg&%r4L&Laz5vaQF_6x^L43u2F3`~!WL
zWkm88ME*|^k-x<hYD%FST%oFHlMn`c;4f%N9j^>dwStM`oj7=L(ye&Q#SR>Kg-%S3
zaPR(@P`DK^b(=9bHOA%DJ>cNfILFm($KX`5hroMpxtvo5Kn*8F^43rO@K4?D3{K5R
zJ)O`<Yy4Jh?{vPWT0z&roSNrqw1Pv=o77W_pWxHPd-`S0<7aF|cu9}vr%W20iX~tR
z?q8<j{)DzbQyX0Rr+9xI*8G>{fm0t_Dz$&bu(`ahz^+p6p>7OGO8H-nF8X|&*IoAo
zIF2q>q34Y!pCcQ6-fgri8}-FxqrNy-raPY7(0_H>Jm^bu9z!S#-u*2v%2Q*Me)P<j
z<#Kwi`>ed^VdKkN^3)F5DRBIp@_1b~7eyI9w4}r;TnrCY(!|fpD8BXyz6f3|T)qZp
zuh5;43zyhl$39Ijn!XMf#+jRQJDO5wZiBua=W#EZBwnYdKfrlB?8_6cM_9kZc}gGn
zS?cU`us_QA{l(_nX~*eq^ZKz1aBndC6I|+w7V3y+e_C|!z@;(6X>1m=cVLX@PW0#G
z7`gfm49qK2O1J3hx~DeAxZIbTBGY9Q2EKo9{7#r0A%BU+qD0Hs0e6zgq5>PzohDb^
zHzA794ew8}B;7XWakEzkuhQ4w<?NLW)S-p<%V-wP@&`DtFK>SOn_)xZTX(^s#iT+y
zavq2ccOm6^>+QFKiLH10F1V++-hK*@(Q~9M@HfvrzZL7nQPot=b#KI<=i2%b=Pz*l
zWE_OTsyER5CC<}xZsJcSd(@Q*=l8%Hf5hv1Nq>#=_y+q%a@rk8e!0gI2W+I^<dns>
zTqOJ*u8HeR5vuynQw;ihoJYLs#OpJJX+F;51MFS!2dX3C!D%7RYmcWn96vdQI(j-S
zLTBf=Lf(x-GFpju9-J2AqKn%~6vqU2W4c^?x3OWJMs|$+A<|WxWq6UEmf<`i-6sBI
z8hF%xj`N6gph5l3E55*a*pGu(p`NC$@8>iS>T*J<;Jx8@A+o7~gPd|zfi2Ml7@pSV
z_R3Ag_r~7?{TZqm-6<<KKNAvBmv=b7BtQz&2S0;%gk3&v@lnO6MA7Bb7N1mnPSjmK
zZ}C~hmqpj*D;8f=d`&p-qt6@fL7$h@6xb9=fZ@-yETyL6J0kD$U5oEXe#Z%-O8kyK
z&Mzezo!&7d+SKTVzvCV1E8p__Mt6*YFt&<&OjeRHltx&Wk{nq`i1-K8Lek<@DtAna
zEO@ctUUX||S}7Go*;Oi9N;H(nC_aDT@>Z;tmK9$g{}48({DW+&Q0>?eQ36kQL5dd)
zO%I4P!0_}Cs)qMh5luYiuFJ<!HTj6*@l$%2&saS5mh|xz9BOpSeemQe<^6R01(c7d
z%l8vlR+24|ByhP4HY7L$+k672JV26N1x7@bz|#p_MvkMQ8Q5Y249`fRYB;(quK3&~
z0UVU?*(4oumUPOO#DQG|tZ!LSRGa>xOMX7h7oO1sZQ7_Q`OYO}$PYb8Hrf&k1TJX;
zJD0Gl34+}~bbKPPO)jPa6-bFFfpZ=r!Gsdbi!_1bE|^tdMHB&s169-wFRm^rzA5UY
zbnL@qsjk4D=n}ZW1v?TP!1puzaMM3PJ{Xpk2NX|k7(;pQ!|~7x*W~3f#bfUQ{jhzD
zvOKN$lBj|ga~_2!%L@vui?*xOK;3MVx`W^hbVOhhl(xG{EeQq#A`UPd3~{9uL_;Zv
zw`*LUJTr{0pq>$*6lF5HWfMGELER!SE1CojJw{+gfyMF3)KCdk(@;Ut*rJ0M%Uzv{
z0$U<Y;FJ~_YACQLiUgkSf?Wv?hD4pr4?3tD<|``VgE7%{`MAYLQHRTeY2oYuqua@7
zC8<Dc5dnq=i<VMO@fDGG`Kra272gz9GP>XiY+5RH1$I#yx!><DQGNosuXH5;*^mfK
zL8G5_P&ayVjZg7$5qJ57#YYvN5m}edT6{|JMNxKnD-qY^6<-xim#<m+6~(v4r;>YZ
zi*6{oC!)mfL{-y$>NWzsQ%I!2i{<}9psx)m5R09w6i3}qx>ogRr<ACZ(wwJADXEll
zqU$Q<Ev2mD@wC%No|G-VsQ8*lx_sT@tBS{W23)>v@lDAO;R*&`?75ko>MGC?ZBiPF
zaHW+Y#pCUye&Vg{t&AxiZzq8l3)(QcGNr(h$O0T0Dx+?MXJuaTb(F@Cnsb+kK8+!@
zQuSmA4?)~Udyq5rTT*{!XxxuBw?B<GSNRkc7g2!WnU<rgqKd~m2Bfs%8B$V?&Mb<e
zt5o6*t;#E<ny9;c-Qp{XZ;LMYv6&r<S0NAifEykC>OZ7jC}7D`M={t!5frAp@-sx8
zFaojKL7n6iC?-yr<{d|U6}MK;;rY+%xDv>?0v?};DLjkPG?-R+0j1$U0t@@|xLB^v
zE52g!710Jiwz{nNhQ+rPP6097t1G;N(rE9HqZQsoY09@HKFf#FlrOmW*x;-H{$VIw
zM>rxhD}usQXem63(v)`;o<M2H$4Q^;BvF|1afN44P8`GksRO}yUJ+T8rb1fb1(Zeu
zM-fa76j7M+d4*R{8uAPGS9lermY;`zUsqN{1Er~uQ+N}lR=_{6t1G-Cx;tXB&gxox
zTk>HaO2gh)+9LZRhQu18;dnU0`GdY7n&8LQIEs&3d_v(=8vd*yIkHD%-e~Wj%N3qR
zY08rv$!AfR@{hQ<xa1}Oz``{|l2CyQ&HJpvizrQ_BuDaP6o%1xM+@g=>J;I`*DU_G
z3a_Iy?U5YGH&K}O?oxOQr72HxB;P?{%DZp6O`ks)?pg{Y2!)-gFcc0xL*YJ@Mgvv+
zAn_G+<X|<7c6Ka2r1YXFO?yu&JZ8z09JQZ7VahL4coL=AKFL9TaOX5iL*bCmj=zda
zK$T#!hl?e);UhceQ8o2*iZ7xx)Dsg#8v0{Z!b!iv`6D%61#a3SIg+oVFzhWLIl>z#
zO!>OPTPO|rBS~%o60~z0rKv!IWT=b6RB#mDLutz6*~wO%&MxRk{&NA&uk|V1L21}K
z9LIam3$G;{?R_rB`6E*}Hp7)+E#br`Ie$c2;VG1cKWj;j<TEIY_Kv_ic-yEw!impY
zd{dOcFI-DF@g<9=I^ks$W_ud10yo-Qfa`mg>=90S4U5-tX#zLxksQf)xP1ICq7Hj~
zYjFujIkq4t<#q|6H1yXI4E<dqC=7oN{gT3?C{1}s;R%$6eEdy?CsCU6aTgyO+$D{F
z7z*>LBh+vPg{hEMI5}*}tHAA&2X4yijupB5q2EEB?33OkvFLTbe{3De5LQ89*gjOv
z=3S~Ji~rQcZXL;yd>w@;-$tGA1`0#|hJ?b~C=L0;A}+r3;4U5f!%$e)a*4rR@f4Zf
zXWBKy`5RQ{cEtmDJnSFcH4dI$Ls1S+2;kpvWLIj~uzS61aBx>V;Kb4H$gWw7CwbB%
z`-UD)AggcUM1kJR7#rNRz}f3lN~?s@?4DZfcP(4;BuA~(P?+-M4dHbZM(fv8_z7>J
znD`&~Kh@3o4*pF<8-=ORl=yB`7!4fmQ#h5TJf320$J3X?Q;Lspetk&cag?UL%N3qL
zY1msIQ#jc(<PXDP5Zdvt*X?B8mkz|9Z{vVveOAQY#t$0S=aq69rC}5~$iIyhQoSuX
zxEn>q;3IX^5sclaH1PF#(T1L1eFA83x2AlMuu~7`rR$4Ispk%~g$_mLKK!Q#645Z~
z1W<g8=LvOjij2|NJ~f5oVH*bSs1rr~Y5Zr~i*dbmb=0XHJXfZ-SDZAe#`bc;1W|kk
zomkgXa_TJ?hx|Ve|9SR>gCk!5`i_#Tiu^ltUi~gUji4VPIdzbR)B53>)8M%J4cMU5
z<oF3V$44U{+iP?FY#ju0!f3~{*X8)xMbS3x?GD=1o0}zI`rz)Aod3h#?g5UUl@$RT
z6fe{xVs{5TZDhP4;ooF0g2J%p$wz^|i~l@%5hr`<C;EfC$GP4}0(G)SrD?CF@Fd4^
zzMqA?*~jG-pXU4x)K9XPaYyQxhnA$cfct=B!t|jfX$yByCmf2q;Qn+81<r8DeX2ox
z&cew-!t)kR?Gj$FaI#By(ZcfzFS)pQ>vPiv#+H=biWkjkR43(%g;y0$rRlWBYZhKt
z@>H7gO@%jHTwJ)zw1J6B#Mmy=W{xgtS+X+HLrdDgjq8W|M3;Q*i1Mz}hE845wRo~a
ze9yuY5?@M%X^(t|{8DPq#B&PA6CbqGw=^W;C`Xq%mRw57#ZVf3ot{*9ToiXBeZ2IC
za=)d78}0P#cF2x_yAPYmFY(c?(`NQ9&4?(}$ChTfSbs(}LuL&1eigo@CE$iz0|g~t
z=JI;{Ev<0eeIQ6~)Lk6wo|<{?vri%#mIBoYZ*tsyGDvuf<L(ny!rK<!Lml{40Tf;b
zaD^S99uW~W3E<>8;mJ?Ivld=e@<ow%5ZSA!?lm-Fg8LE%*=urqfI2{U*TOpzUly=%
z)sbaUjt5B&c9tbw{3~8$gAqkgBq!rP8S$0ptBx<DhD^M3V`=wk(<k=fFFjUfPg~IU
z4IDYmo;Jtd%8;Q66E8}O=;x>H6Qu14{@16<2{_ctejaisQA7CO;aO3Ioc{-1x7zoE
z?*D#crugXd({>Af47t?g1HUAqUzj$h@2Z%{p!8q;ITxRD_2)$83)2qnyE@^jegUdg
zmze;{{m05*#Kf%06L%Iz?J+GpsUP3|$m}ugVD(sK!UQKEs(ZlT-%?U-VA;jpJ*MHm
U&)nGEW5@N|C;#^jU!U~<0rFLY<^TWy

diff --git a/roms/SLOF b/roms/SLOF
index 2317427ce7..7d37babcfa 160000
--- a/roms/SLOF
+++ b/roms/SLOF
@@ -1 +1 @@
-Subproject commit 2317427ce76006723f7ae103a6998ab41dd79c68
+Subproject commit 7d37babcfa48a6eb08e726a8d13b745cb2eebe1c
-- 
2.17.1

^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [Qemu-devel] [PATCH 19/23] spapr: Maximum (HPT) pagesize property
  2018-06-22  4:24 [Qemu-devel] [PATCH 01/23] ppc/pnv: introduce a new intc_create() operation to the chip model David Gibson
                   ` (16 preceding siblings ...)
  2018-06-22  4:24 ` [Qemu-devel] [PATCH 18/23] pseries: Update SLOF firmware image to qemu-slof-20180621 David Gibson
@ 2018-06-22  4:24 ` David Gibson
  2018-06-22  4:24 ` [Qemu-devel] [PATCH 20/23] spapr: Use maximum page size capability to simplify memory backend checking David Gibson
                   ` (5 subsequent siblings)
  23 siblings, 0 replies; 27+ messages in thread
From: David Gibson @ 2018-06-22  4:24 UTC (permalink / raw)
  To: peter.maydell
  Cc: agraf, aik, groug, clg, lvivier, qemu-devel, qemu-ppc, David Gibson

The way the POWER Hash Page Table (HPT) MMU is virtualized by KVM HV means
that every page that the guest puts in the pagetables must be truly
physically contiguous, not just GPA-contiguous.  In effect this means that
an HPT guest can't use any pagesizes greater than the host page size used
to back its memory.

At present we handle this by changing what we advertise to the guest based
on the backing pagesizes.  This is pretty bad, because it means the guest
sees a different environment depending on what should be host configuration
details.

As a start on fixing this, we add a new capability parameter to the
pseries machine type which gives the maximum allowed pagesizes for an
HPT guest.  For now we just create and validate the parameter without
making it do anything.

For backwards compatibility, on older machine types we set it to the max
available page size for the host.  For the 3.0 machine type, we fix it to
16, the intention being to only allow HPT pagesizes up to 64kiB by default
in future.

Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
Reviewed-by: Cédric Le Goater <clg@kaod.org>
Reviewed-by: Greg Kurz <groug@kaod.org>
---
 hw/ppc/spapr.c         | 12 +++++++++
 hw/ppc/spapr_caps.c    | 56 ++++++++++++++++++++++++++++++++++++++++++
 include/hw/ppc/spapr.h |  4 ++-
 3 files changed, 71 insertions(+), 1 deletion(-)

diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
index 78186500e9..70b150b098 100644
--- a/hw/ppc/spapr.c
+++ b/hw/ppc/spapr.c
@@ -63,6 +63,7 @@
 #include "hw/virtio/vhost-scsi-common.h"
 
 #include "exec/address-spaces.h"
+#include "exec/ram_addr.h"
 #include "hw/usb.h"
 #include "qemu/config-file.h"
 #include "qemu/error-report.h"
@@ -4015,6 +4016,7 @@ static void spapr_machine_class_init(ObjectClass *oc, void *data)
     smc->default_caps.caps[SPAPR_CAP_CFPC] = SPAPR_CAP_BROKEN;
     smc->default_caps.caps[SPAPR_CAP_SBBC] = SPAPR_CAP_BROKEN;
     smc->default_caps.caps[SPAPR_CAP_IBS] = SPAPR_CAP_BROKEN;
+    smc->default_caps.caps[SPAPR_CAP_HPT_MAXPAGESIZE] = 16; /* 64kiB */
     spapr_caps_add_properties(smc, &error_abort);
 }
 
@@ -4103,8 +4105,18 @@ static void spapr_machine_2_12_instance_options(MachineState *machine)
 
 static void spapr_machine_2_12_class_options(MachineClass *mc)
 {
+    sPAPRMachineClass *smc = SPAPR_MACHINE_CLASS(mc);
+    uint8_t mps;
+
     spapr_machine_3_0_class_options(mc);
     SET_MACHINE_COMPAT(mc, SPAPR_COMPAT_2_12);
+
+    if (kvmppc_hpt_needs_host_contiguous_pages()) {
+        mps = ctz64(qemu_getrampagesize());
+    } else {
+        mps = 34; /* allow everything up to 16GiB, i.e. everything */
+    }
+    smc->default_caps.caps[SPAPR_CAP_HPT_MAXPAGESIZE] = mps;
 }
 
 DEFINE_SPAPR_MACHINE(2_12, "2.12", false);
diff --git a/hw/ppc/spapr_caps.c b/hw/ppc/spapr_caps.c
index 68a4243efc..6cdc0c94e7 100644
--- a/hw/ppc/spapr_caps.c
+++ b/hw/ppc/spapr_caps.c
@@ -27,6 +27,7 @@
 #include "qapi/visitor.h"
 #include "sysemu/hw_accel.h"
 #include "target/ppc/cpu.h"
+#include "target/ppc/mmu-hash64.h"
 #include "cpu-models.h"
 #include "kvm_ppc.h"
 
@@ -144,6 +145,42 @@ out:
     g_free(val);
 }
 
+static void spapr_cap_get_pagesize(Object *obj, Visitor *v, const char *name,
+                                   void *opaque, Error **errp)
+{
+    sPAPRCapabilityInfo *cap = opaque;
+    sPAPRMachineState *spapr = SPAPR_MACHINE(obj);
+    uint8_t val = spapr_get_cap(spapr, cap->index);
+    uint64_t pagesize = (1ULL << val);
+
+    visit_type_size(v, name, &pagesize, errp);
+}
+
+static void spapr_cap_set_pagesize(Object *obj, Visitor *v, const char *name,
+                                   void *opaque, Error **errp)
+{
+    sPAPRCapabilityInfo *cap = opaque;
+    sPAPRMachineState *spapr = SPAPR_MACHINE(obj);
+    uint64_t pagesize;
+    uint8_t val;
+    Error *local_err = NULL;
+
+    visit_type_size(v, name, &pagesize, &local_err);
+    if (local_err) {
+        error_propagate(errp, local_err);
+        return;
+    }
+
+    if (!is_power_of_2(pagesize)) {
+        error_setg(errp, "cap-%s must be a power of 2", cap->name);
+        return;
+    }
+
+    val = ctz64(pagesize);
+    spapr->cmd_line_caps[cap->index] = true;
+    spapr->eff.caps[cap->index] = val;
+}
+
 static void cap_htm_apply(sPAPRMachineState *spapr, uint8_t val, Error **errp)
 {
     if (!val) {
@@ -267,6 +304,16 @@ static void cap_safe_indirect_branch_apply(sPAPRMachineState *spapr,
 
 #define VALUE_DESC_TRISTATE     " (broken, workaround, fixed)"
 
+static void cap_hpt_maxpagesize_apply(sPAPRMachineState *spapr,
+                                      uint8_t val, Error **errp)
+{
+    if (val < 12) {
+        error_setg(errp, "Require at least 4kiB hpt-max-page-size");
+    } else if (val < 16) {
+        warn_report("Many guests require at least 64kiB hpt-max-page-size");
+    }
+}
+
 sPAPRCapabilityInfo capability_table[SPAPR_CAP_NUM] = {
     [SPAPR_CAP_HTM] = {
         .name = "htm",
@@ -326,6 +373,15 @@ sPAPRCapabilityInfo capability_table[SPAPR_CAP_NUM] = {
         .possible = &cap_ibs_possible,
         .apply = cap_safe_indirect_branch_apply,
     },
+    [SPAPR_CAP_HPT_MAXPAGESIZE] = {
+        .name = "hpt-max-page-size",
+        .description = "Maximum page size for Hash Page Table guests",
+        .index = SPAPR_CAP_HPT_MAXPAGESIZE,
+        .get = spapr_cap_get_pagesize,
+        .set = spapr_cap_set_pagesize,
+        .type = "int",
+        .apply = cap_hpt_maxpagesize_apply,
+    },
 };
 
 static sPAPRCapabilities default_caps_with_cpu(sPAPRMachineState *spapr,
diff --git a/include/hw/ppc/spapr.h b/include/hw/ppc/spapr.h
index 8a9142244f..4bc9dbff96 100644
--- a/include/hw/ppc/spapr.h
+++ b/include/hw/ppc/spapr.h
@@ -66,8 +66,10 @@ typedef enum {
 #define SPAPR_CAP_SBBC                  0x04
 /* Indirect Branch Serialisation */
 #define SPAPR_CAP_IBS                   0x05
+/* HPT Maximum Page Size (encoded as a shift) */
+#define SPAPR_CAP_HPT_MAXPAGESIZE       0x06
 /* Num Caps */
-#define SPAPR_CAP_NUM                   (SPAPR_CAP_IBS + 1)
+#define SPAPR_CAP_NUM                   (SPAPR_CAP_HPT_MAXPAGESIZE + 1)
 
 /*
  * Capability Values
-- 
2.17.1

^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [Qemu-devel] [PATCH 20/23] spapr: Use maximum page size capability to simplify memory backend checking
  2018-06-22  4:24 [Qemu-devel] [PATCH 01/23] ppc/pnv: introduce a new intc_create() operation to the chip model David Gibson
                   ` (17 preceding siblings ...)
  2018-06-22  4:24 ` [Qemu-devel] [PATCH 19/23] spapr: Maximum (HPT) pagesize property David Gibson
@ 2018-06-22  4:24 ` David Gibson
  2018-06-22  4:24 ` [Qemu-devel] [PATCH 21/23] target/ppc: Add ppc_hash64_filter_pagesizes() David Gibson
                   ` (4 subsequent siblings)
  23 siblings, 0 replies; 27+ messages in thread
From: David Gibson @ 2018-06-22  4:24 UTC (permalink / raw)
  To: peter.maydell
  Cc: agraf, aik, groug, clg, lvivier, qemu-devel, qemu-ppc, David Gibson

The way we used to handle KVM allowable guest pagesizes for PAPR guests
required some convoluted checking of memory attached to the guest.

The allowable pagesizes advertised to the guest cpus depended on the memory
which was attached at boot, but then we needed to ensure that any memory
later hotplugged didn't change which pagesizes were allowed.

Now that we have an explicit machine option to control the allowable
maximum pagesize we can simplify this.  We just check all memory backends
against that declared pagesize.  We check base and cold-plugged memory at
reset time, and hotplugged memory at pre_plug() time.

Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
Reviewed-by: Cédric Le Goater <clg@kaod.org>
Reviewed-by: Greg Kurz <groug@kaod.org>
---
 hw/ppc/spapr.c         | 17 +++++++----------
 hw/ppc/spapr_caps.c    | 21 +++++++++++++++++++++
 include/hw/ppc/spapr.h |  3 +++
 target/ppc/kvm.c       | 14 --------------
 target/ppc/kvm_ppc.h   |  6 ------
 5 files changed, 31 insertions(+), 30 deletions(-)

diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
index 70b150b098..0d032a1ad0 100644
--- a/hw/ppc/spapr.c
+++ b/hw/ppc/spapr.c
@@ -3192,11 +3192,13 @@ static void spapr_memory_pre_plug(HotplugHandler *hotplug_dev, DeviceState *dev,
                                   Error **errp)
 {
     const sPAPRMachineClass *smc = SPAPR_MACHINE_GET_CLASS(hotplug_dev);
+    sPAPRMachineState *spapr = SPAPR_MACHINE(hotplug_dev);
     PCDIMMDevice *dimm = PC_DIMM(dev);
     PCDIMMDeviceClass *ddc = PC_DIMM_GET_CLASS(dimm);
     MemoryRegion *mr;
     uint64_t size;
-    char *mem_dev;
+    Object *memdev;
+    hwaddr pagesize;
 
     if (!smc->dr_lmb_enabled) {
         error_setg(errp, "Memory hotplug not supported for this machine");
@@ -3215,15 +3217,10 @@ static void spapr_memory_pre_plug(HotplugHandler *hotplug_dev, DeviceState *dev,
         return;
     }
 
-    mem_dev = object_property_get_str(OBJECT(dimm), PC_DIMM_MEMDEV_PROP, NULL);
-    if (mem_dev && !kvmppc_is_mem_backend_page_size_ok(mem_dev)) {
-        error_setg(errp, "Memory backend has bad page size. "
-                   "Use 'memory-backend-file' with correct mem-path.");
-        goto out;
-    }
-
-out:
-    g_free(mem_dev);
+    memdev = object_property_get_link(OBJECT(dimm), PC_DIMM_MEMDEV_PROP,
+                                      &error_abort);
+    pagesize = host_memory_backend_pagesize(MEMORY_BACKEND(memdev));
+    spapr_check_pagesize(spapr, pagesize, errp);
 }
 
 struct sPAPRDIMMState {
diff --git a/hw/ppc/spapr_caps.c b/hw/ppc/spapr_caps.c
index 6cdc0c94e7..722b213d9a 100644
--- a/hw/ppc/spapr_caps.c
+++ b/hw/ppc/spapr_caps.c
@@ -26,6 +26,7 @@
 #include "qapi/error.h"
 #include "qapi/visitor.h"
 #include "sysemu/hw_accel.h"
+#include "exec/ram_addr.h"
 #include "target/ppc/cpu.h"
 #include "target/ppc/mmu-hash64.h"
 #include "cpu-models.h"
@@ -304,14 +305,34 @@ static void cap_safe_indirect_branch_apply(sPAPRMachineState *spapr,
 
 #define VALUE_DESC_TRISTATE     " (broken, workaround, fixed)"
 
+void spapr_check_pagesize(sPAPRMachineState *spapr, hwaddr pagesize,
+                          Error **errp)
+{
+    hwaddr maxpagesize = (1ULL << spapr->eff.caps[SPAPR_CAP_HPT_MAXPAGESIZE]);
+
+    if (!kvmppc_hpt_needs_host_contiguous_pages()) {
+        return;
+    }
+
+    if (maxpagesize > pagesize) {
+        error_setg(errp,
+                   "Can't support %"HWADDR_PRIu" kiB guest pages with %"
+                   HWADDR_PRIu" kiB host pages with this KVM implementation",
+                   maxpagesize >> 10, pagesize >> 10);
+    }
+}
+
 static void cap_hpt_maxpagesize_apply(sPAPRMachineState *spapr,
                                       uint8_t val, Error **errp)
 {
     if (val < 12) {
         error_setg(errp, "Require at least 4kiB hpt-max-page-size");
+        return;
     } else if (val < 16) {
         warn_report("Many guests require at least 64kiB hpt-max-page-size");
     }
+
+    spapr_check_pagesize(spapr, qemu_getrampagesize(), errp);
 }
 
 sPAPRCapabilityInfo capability_table[SPAPR_CAP_NUM] = {
diff --git a/include/hw/ppc/spapr.h b/include/hw/ppc/spapr.h
index 4bc9dbff96..7e028164ba 100644
--- a/include/hw/ppc/spapr.h
+++ b/include/hw/ppc/spapr.h
@@ -806,4 +806,7 @@ void spapr_caps_cpu_apply(sPAPRMachineState *spapr, PowerPCCPU *cpu);
 void spapr_caps_add_properties(sPAPRMachineClass *smc, Error **errp);
 int spapr_caps_post_migration(sPAPRMachineState *spapr);
 
+void spapr_check_pagesize(sPAPRMachineState *spapr, hwaddr pagesize,
+                          Error **errp);
+
 #endif /* HW_SPAPR_H */
diff --git a/target/ppc/kvm.c b/target/ppc/kvm.c
index 50b5d01432..9cfbd388ad 100644
--- a/target/ppc/kvm.c
+++ b/target/ppc/kvm.c
@@ -500,26 +500,12 @@ static void kvm_fixup_page_sizes(PowerPCCPU *cpu)
         cpu->hash64_opts->flags &= ~PPC_HASH64_1TSEG;
     }
 }
-
-bool kvmppc_is_mem_backend_page_size_ok(const char *obj_path)
-{
-    Object *mem_obj = object_resolve_path(obj_path, NULL);
-    long pagesize = host_memory_backend_pagesize(MEMORY_BACKEND(mem_obj));
-
-    return pagesize >= max_cpu_page_size;
-}
-
 #else /* defined (TARGET_PPC64) */
 
 static inline void kvm_fixup_page_sizes(PowerPCCPU *cpu)
 {
 }
 
-bool kvmppc_is_mem_backend_page_size_ok(const char *obj_path)
-{
-    return true;
-}
-
 #endif /* !defined (TARGET_PPC64) */
 
 unsigned long kvm_arch_vcpu_id(CPUState *cpu)
diff --git a/target/ppc/kvm_ppc.h b/target/ppc/kvm_ppc.h
index a7ddb8a5d6..443fca0a4e 100644
--- a/target/ppc/kvm_ppc.h
+++ b/target/ppc/kvm_ppc.h
@@ -71,7 +71,6 @@ int kvmppc_resize_hpt_commit(PowerPCCPU *cpu, target_ulong flags, int shift);
 bool kvmppc_pvr_workaround_required(PowerPCCPU *cpu);
 
 bool kvmppc_hpt_needs_host_contiguous_pages(void);
-bool kvmppc_is_mem_backend_page_size_ok(const char *obj_path);
 
 #else
 
@@ -228,11 +227,6 @@ static inline bool kvmppc_hpt_needs_host_contiguous_pages(void)
     return false;
 }
 
-static inline bool kvmppc_is_mem_backend_page_size_ok(const char *obj_path)
-{
-    return true;
-}
-
 static inline bool kvmppc_has_cap_spapr_vfio(void)
 {
     return false;
-- 
2.17.1

^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [Qemu-devel] [PATCH 21/23] target/ppc: Add ppc_hash64_filter_pagesizes()
  2018-06-22  4:24 [Qemu-devel] [PATCH 01/23] ppc/pnv: introduce a new intc_create() operation to the chip model David Gibson
                   ` (18 preceding siblings ...)
  2018-06-22  4:24 ` [Qemu-devel] [PATCH 20/23] spapr: Use maximum page size capability to simplify memory backend checking David Gibson
@ 2018-06-22  4:24 ` David Gibson
  2018-06-22  4:24 ` [Qemu-devel] [PATCH 22/23] spapr: Limit available pagesizes to provide a consistent guest environment David Gibson
                   ` (3 subsequent siblings)
  23 siblings, 0 replies; 27+ messages in thread
From: David Gibson @ 2018-06-22  4:24 UTC (permalink / raw)
  To: peter.maydell
  Cc: agraf, aik, groug, clg, lvivier, qemu-devel, qemu-ppc, David Gibson

The paravirtualized PAPR platform sometimes needs to restrict the guest to
using only some of the page sizes actually supported by the host's MMU.
At the moment this is handled in KVM specific code, but for consistency we
want to apply the same limitations to all accelerators.

This makes a start on this by providing a helper function in the cpu code
to allow platform code to remove some of the cpu's page size definitions
via a caller supplied callback.

Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
Reviewed-by: Cédric Le Goater <clg@kaod.org>
Reviewed-by: Greg Kurz <groug@kaod.org>
---
 target/ppc/mmu-hash64.c | 59 +++++++++++++++++++++++++++++++++++++++++
 target/ppc/mmu-hash64.h |  3 +++
 2 files changed, 62 insertions(+)

diff --git a/target/ppc/mmu-hash64.c b/target/ppc/mmu-hash64.c
index aa200cba4c..276d9015e7 100644
--- a/target/ppc/mmu-hash64.c
+++ b/target/ppc/mmu-hash64.c
@@ -1166,3 +1166,62 @@ const PPCHash64Options ppc_hash64_opts_POWER7 = {
         },
     }
 };
+
+void ppc_hash64_filter_pagesizes(PowerPCCPU *cpu,
+                                 bool (*cb)(void *, uint32_t, uint32_t),
+                                 void *opaque)
+{
+    PPCHash64Options *opts = cpu->hash64_opts;
+    int i;
+    int n = 0;
+    bool ci_largepage = false;
+
+    assert(opts);
+
+    n = 0;
+    for (i = 0; i < ARRAY_SIZE(opts->sps); i++) {
+        PPCHash64SegmentPageSizes *sps = &opts->sps[i];
+        int j;
+        int m = 0;
+
+        assert(n <= i);
+
+        if (!sps->page_shift) {
+            break;
+        }
+
+        for (j = 0; j < ARRAY_SIZE(sps->enc); j++) {
+            PPCHash64PageSize *ps = &sps->enc[j];
+
+            assert(m <= j);
+            if (!ps->page_shift) {
+                break;
+            }
+
+            if (cb(opaque, sps->page_shift, ps->page_shift)) {
+                if (ps->page_shift >= 16) {
+                    ci_largepage = true;
+                }
+                sps->enc[m++] = *ps;
+            }
+        }
+
+        /* Clear rest of the row */
+        for (j = m; j < ARRAY_SIZE(sps->enc); j++) {
+            memset(&sps->enc[j], 0, sizeof(sps->enc[j]));
+        }
+
+        if (m) {
+            n++;
+        }
+    }
+
+    /* Clear the rest of the table */
+    for (i = n; i < ARRAY_SIZE(opts->sps); i++) {
+        memset(&opts->sps[i], 0, sizeof(opts->sps[i]));
+    }
+
+    if (!ci_largepage) {
+        opts->flags &= ~PPC_HASH64_CI_LARGEPAGE;
+    }
+}
diff --git a/target/ppc/mmu-hash64.h b/target/ppc/mmu-hash64.h
index 53dcec5b93..f11efc9cbc 100644
--- a/target/ppc/mmu-hash64.h
+++ b/target/ppc/mmu-hash64.h
@@ -20,6 +20,9 @@ unsigned ppc_hash64_hpte_page_shift_noslb(PowerPCCPU *cpu,
 void ppc_store_lpcr(PowerPCCPU *cpu, target_ulong val);
 void ppc_hash64_init(PowerPCCPU *cpu);
 void ppc_hash64_finalize(PowerPCCPU *cpu);
+void ppc_hash64_filter_pagesizes(PowerPCCPU *cpu,
+                                 bool (*cb)(void *, uint32_t, uint32_t),
+                                 void *opaque);
 #endif
 
 /*
-- 
2.17.1

^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [Qemu-devel] [PATCH 22/23] spapr: Limit available pagesizes to provide a consistent guest environment
  2018-06-22  4:24 [Qemu-devel] [PATCH 01/23] ppc/pnv: introduce a new intc_create() operation to the chip model David Gibson
                   ` (19 preceding siblings ...)
  2018-06-22  4:24 ` [Qemu-devel] [PATCH 21/23] target/ppc: Add ppc_hash64_filter_pagesizes() David Gibson
@ 2018-06-22  4:24 ` David Gibson
  2018-06-22  4:24 ` [Qemu-devel] [PATCH 23/23] spapr: Don't rewrite mmu capabilities in KVM mode David Gibson
                   ` (2 subsequent siblings)
  23 siblings, 0 replies; 27+ messages in thread
From: David Gibson @ 2018-06-22  4:24 UTC (permalink / raw)
  To: peter.maydell
  Cc: agraf, aik, groug, clg, lvivier, qemu-devel, qemu-ppc, David Gibson

KVM HV has some limitations (deriving from the hardware) that mean not all
host-cpu supported pagesizes may be usable in the guest.  At present this
means that KVM guests and TCG guests may see different available page sizes
even if they notionally have the same vcpu model.  This is confusing and
also prevents migration between TCG and KVM.

This patch makes the environment consistent by always allowing the same set
of pagesizes.  Since we can't remove the KVM limitations, we do this by
always applying the same limitations it has, even to TCG guests.

Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
Reviewed-by: Cédric Le Goater <clg@kaod.org>
Reviewed-by: Greg Kurz <groug@kaod.org>
---
 hw/ppc/spapr_caps.c | 34 ++++++++++++++++++++++++++++++++++
 1 file changed, 34 insertions(+)

diff --git a/hw/ppc/spapr_caps.c b/hw/ppc/spapr_caps.c
index 722b213d9a..62663ebdf5 100644
--- a/hw/ppc/spapr_caps.c
+++ b/hw/ppc/spapr_caps.c
@@ -335,6 +335,39 @@ static void cap_hpt_maxpagesize_apply(sPAPRMachineState *spapr,
     spapr_check_pagesize(spapr, qemu_getrampagesize(), errp);
 }
 
+static bool spapr_pagesize_cb(void *opaque, uint32_t seg_pshift,
+                              uint32_t pshift)
+{
+    unsigned maxshift = *((unsigned *)opaque);
+
+    assert(pshift >= seg_pshift);
+
+    /* Don't allow the guest to use pages bigger than the configured
+     * maximum size */
+    if (pshift > maxshift) {
+        return false;
+    }
+
+    /* For whatever reason, KVM doesn't allow multiple pagesizes
+     * within a segment, *except* for the case of 16M pages in a 4k or
+     * 64k segment.  Always exclude other cases, so that TCG and KVM
+     * guests see a consistent environment */
+    if ((pshift != seg_pshift) && (pshift != 24)) {
+        return false;
+    }
+
+    return true;
+}
+
+static void cap_hpt_maxpagesize_cpu_apply(sPAPRMachineState *spapr,
+                                          PowerPCCPU *cpu,
+                                          uint8_t val, Error **errp)
+{
+    unsigned maxshift = val;
+
+    ppc_hash64_filter_pagesizes(cpu, spapr_pagesize_cb, &maxshift);
+}
+
 sPAPRCapabilityInfo capability_table[SPAPR_CAP_NUM] = {
     [SPAPR_CAP_HTM] = {
         .name = "htm",
@@ -402,6 +435,7 @@ sPAPRCapabilityInfo capability_table[SPAPR_CAP_NUM] = {
         .set = spapr_cap_set_pagesize,
         .type = "int",
         .apply = cap_hpt_maxpagesize_apply,
+        .cpu_apply = cap_hpt_maxpagesize_cpu_apply,
     },
 };
 
-- 
2.17.1

^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [Qemu-devel] [PATCH 23/23] spapr: Don't rewrite mmu capabilities in KVM mode
  2018-06-22  4:24 [Qemu-devel] [PATCH 01/23] ppc/pnv: introduce a new intc_create() operation to the chip model David Gibson
                   ` (20 preceding siblings ...)
  2018-06-22  4:24 ` [Qemu-devel] [PATCH 22/23] spapr: Limit available pagesizes to provide a consistent guest environment David Gibson
@ 2018-06-22  4:24 ` David Gibson
  2018-06-22  9:44 ` [Qemu-devel] [PATCH 01/23] ppc/pnv: introduce a new intc_create() operation to the chip model Greg Kurz
  2018-06-26  9:07 ` Peter Maydell
  23 siblings, 0 replies; 27+ messages in thread
From: David Gibson @ 2018-06-22  4:24 UTC (permalink / raw)
  To: peter.maydell
  Cc: agraf, aik, groug, clg, lvivier, qemu-devel, qemu-ppc, David Gibson

Currently during KVM initialization on POWER, kvm_fixup_page_sizes()
rewrites a bunch of information in the cpu state to reflect the
capabilities of the host MMU and KVM.  This overwrites the information
that's already there reflecting how the TCG implementation of the MMU will
operate.

This means that we can get guest-visibly different behaviour between KVM
and TCG (and between different KVM implementations).  That's bad.  It also
prevents migration between KVM and TCG.

The pseries machine type now has filtering of the pagesizes it allows the
guest to use which means it can present a consistent model of the MMU
across all accelerators.

So, we can now replace kvm_fixup_page_sizes() with kvm_check_mmu() which
merely verifies that the expected cpu model can be faithfully handled by
KVM, rather than updating the cpu model to match KVM.

We call kvm_check_mmu() from the spapr cpu reset code.  This is a hack:
conceptually it makes more sense where fixup_page_sizes() was - in the KVM
cpu init path.  However, doing that would require moving the platform's
pagesize filtering much earlier, which would require a lot of work making
further adjustments.  There wouldn't be a lot of concrete point to doing
that, since the only KVM implementation which has the awkward MMU
restrictions is KVM HV, which can only work with an spapr guest anyway.

Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
Reviewed-by: Cédric Le Goater <clg@kaod.org>
---
 hw/ppc/spapr_cpu_core.c |   2 +
 target/ppc/kvm.c        | 133 ++++++++++++++++++++--------------------
 target/ppc/kvm_ppc.h    |   5 ++
 3 files changed, 72 insertions(+), 68 deletions(-)

diff --git a/hw/ppc/spapr_cpu_core.c b/hw/ppc/spapr_cpu_core.c
index bfb94f650c..993759db47 100644
--- a/hw/ppc/spapr_cpu_core.c
+++ b/hw/ppc/spapr_cpu_core.c
@@ -78,6 +78,8 @@ static void spapr_cpu_reset(void *opaque)
     spapr_cpu->dtl_size = 0;
 
     spapr_caps_cpu_apply(SPAPR_MACHINE(qdev_get_machine()), cpu);
+
+    kvm_check_mmu(cpu, &error_fatal);
 }
 
 void spapr_cpu_set_entry_state(PowerPCCPU *cpu, target_ulong nip, target_ulong r3)
diff --git a/target/ppc/kvm.c b/target/ppc/kvm.c
index 9cfbd388ad..4df4ff6cbf 100644
--- a/target/ppc/kvm.c
+++ b/target/ppc/kvm.c
@@ -419,93 +419,93 @@ bool kvmppc_hpt_needs_host_contiguous_pages(void)
     return !!(smmu_info.flags & KVM_PPC_PAGE_SIZES_REAL);
 }
 
-static bool kvm_valid_page_size(uint32_t flags, long rampgsize, uint32_t shift)
+void kvm_check_mmu(PowerPCCPU *cpu, Error **errp)
 {
-    if (!kvmppc_hpt_needs_host_contiguous_pages()) {
-        return true;
-    }
-
-    return (1ul << shift) <= rampgsize;
-}
-
-static long max_cpu_page_size;
-
-static void kvm_fixup_page_sizes(PowerPCCPU *cpu)
-{
-    static struct kvm_ppc_smmu_info smmu_info;
-    static bool has_smmu_info;
-    CPUPPCState *env = &cpu->env;
+    struct kvm_ppc_smmu_info smmu_info;
     int iq, ik, jq, jk;
 
-    /* We only handle page sizes for 64-bit server guests for now */
-    if (!(env->mmu_model & POWERPC_MMU_64)) {
+    /* For now, we only have anything to check on hash64 MMUs */
+    if (!cpu->hash64_opts || !kvm_enabled()) {
         return;
     }
 
-    /* Collect MMU info from kernel if not already */
-    if (!has_smmu_info) {
-        kvm_get_smmu_info(cpu, &smmu_info);
-        has_smmu_info = true;
-    }
+    kvm_get_smmu_info(cpu, &smmu_info);
 
-    if (!max_cpu_page_size) {
-        max_cpu_page_size = qemu_getrampagesize();
+    if (ppc_hash64_has(cpu, PPC_HASH64_1TSEG)
+        && !(smmu_info.flags & KVM_PPC_1T_SEGMENTS)) {
+        error_setg(errp,
+                   "KVM does not support 1TiB segments which guest expects");
+        return;
     }
 
-    /* Convert to QEMU form */
-    memset(cpu->hash64_opts->sps, 0, sizeof(*cpu->hash64_opts->sps));
-
-    /* If we have HV KVM, we need to forbid CI large pages if our
-     * host page size is smaller than 64K.
-     */
-    if (kvmppc_hpt_needs_host_contiguous_pages()) {
-        if (getpagesize() >= 0x10000) {
-            cpu->hash64_opts->flags |= PPC_HASH64_CI_LARGEPAGE;
-        } else {
-            cpu->hash64_opts->flags &= ~PPC_HASH64_CI_LARGEPAGE;
-        }
+    if (smmu_info.slb_size < cpu->hash64_opts->slb_size) {
+        error_setg(errp, "KVM only supports %u SLB entries, but guest needs %u",
+                   smmu_info.slb_size, cpu->hash64_opts->slb_size);
+        return;
     }
 
     /*
-     * XXX This loop should be an entry wide AND of the capabilities that
-     *     the selected CPU has with the capabilities that KVM supports.
+     * Verify that every pagesize supported by the cpu model is
+     * supported by KVM with the same encodings
      */
-    for (ik = iq = 0; ik < KVM_PPC_PAGE_SIZES_MAX_SZ; ik++) {
+    for (iq = 0; iq < ARRAY_SIZE(cpu->hash64_opts->sps); iq++) {
         PPCHash64SegmentPageSizes *qsps = &cpu->hash64_opts->sps[iq];
-        struct kvm_ppc_one_seg_page_size *ksps = &smmu_info.sps[ik];
+        struct kvm_ppc_one_seg_page_size *ksps;
 
-        if (!kvm_valid_page_size(smmu_info.flags, max_cpu_page_size,
-                                 ksps->page_shift)) {
-            continue;
-        }
-        qsps->page_shift = ksps->page_shift;
-        qsps->slb_enc = ksps->slb_enc;
-        for (jk = jq = 0; jk < KVM_PPC_PAGE_SIZES_MAX_SZ; jk++) {
-            if (!kvm_valid_page_size(smmu_info.flags, max_cpu_page_size,
-                                     ksps->enc[jk].page_shift)) {
-                continue;
-            }
-            qsps->enc[jq].page_shift = ksps->enc[jk].page_shift;
-            qsps->enc[jq].pte_enc = ksps->enc[jk].pte_enc;
-            if (++jq >= PPC_PAGE_SIZES_MAX_SZ) {
+        for (ik = 0; ik < ARRAY_SIZE(smmu_info.sps); ik++) {
+            if (qsps->page_shift == smmu_info.sps[ik].page_shift) {
                 break;
             }
         }
-        if (++iq >= PPC_PAGE_SIZES_MAX_SZ) {
-            break;
+        if (ik >= ARRAY_SIZE(smmu_info.sps)) {
+            error_setg(errp, "KVM doesn't support for base page shift %u",
+                       qsps->page_shift);
+            return;
+        }
+
+        ksps = &smmu_info.sps[ik];
+        if (ksps->slb_enc != qsps->slb_enc) {
+            error_setg(errp,
+"KVM uses SLB encoding 0x%x for page shift %u, but guest expects 0x%x",
+                       ksps->slb_enc, ksps->page_shift, qsps->slb_enc);
+            return;
+        }
+
+        for (jq = 0; jq < ARRAY_SIZE(qsps->enc); jq++) {
+            for (jk = 0; jk < ARRAY_SIZE(ksps->enc); jk++) {
+                if (qsps->enc[jq].page_shift == ksps->enc[jk].page_shift) {
+                    break;
+                }
+            }
+
+            if (jk >= ARRAY_SIZE(ksps->enc)) {
+                error_setg(errp, "KVM doesn't support page shift %u/%u",
+                           qsps->enc[jq].page_shift, qsps->page_shift);
+                return;
+            }
+            if (qsps->enc[jq].pte_enc != ksps->enc[jk].pte_enc) {
+                error_setg(errp,
+"KVM uses PTE encoding 0x%x for page shift %u/%u, but guest expects 0x%x",
+                           ksps->enc[jk].pte_enc, qsps->enc[jq].page_shift,
+                           qsps->page_shift, qsps->enc[jq].pte_enc);
+                return;
+            }
         }
     }
-    cpu->hash64_opts->slb_size = smmu_info.slb_size;
-    if (!(smmu_info.flags & KVM_PPC_1T_SEGMENTS)) {
-        cpu->hash64_opts->flags &= ~PPC_HASH64_1TSEG;
-    }
-}
-#else /* defined (TARGET_PPC64) */
 
-static inline void kvm_fixup_page_sizes(PowerPCCPU *cpu)
-{
+    if (ppc_hash64_has(cpu, PPC_HASH64_CI_LARGEPAGE)) {
+        /* Mostly what guest pagesizes we can use are related to the
+         * host pages used to map guest RAM, which is handled in the
+         * platform code. Cache-Inhibited largepages (64k) however are
+         * used for I/O, so if they're mapped to the host at all it
+         * will be a normal mapping, not a special hugepage one used
+         * for RAM. */
+        if (getpagesize() < 0x10000) {
+            error_setg(errp,
+                       "KVM can't supply 64kiB CI pages, which guest expects");
+        }
+    }
 }
-
 #endif /* !defined (TARGET_PPC64) */
 
 unsigned long kvm_arch_vcpu_id(CPUState *cpu)
@@ -551,9 +551,6 @@ int kvm_arch_init_vcpu(CPUState *cs)
     CPUPPCState *cenv = &cpu->env;
     int ret;
 
-    /* Gather server mmu info from KVM and update the CPU state */
-    kvm_fixup_page_sizes(cpu);
-
     /* Synchronize sregs with kvm */
     ret = kvm_arch_sync_sregs(cpu);
     if (ret) {
diff --git a/target/ppc/kvm_ppc.h b/target/ppc/kvm_ppc.h
index 443fca0a4e..657582bb32 100644
--- a/target/ppc/kvm_ppc.h
+++ b/target/ppc/kvm_ppc.h
@@ -71,6 +71,7 @@ int kvmppc_resize_hpt_commit(PowerPCCPU *cpu, target_ulong flags, int shift);
 bool kvmppc_pvr_workaround_required(PowerPCCPU *cpu);
 
 bool kvmppc_hpt_needs_host_contiguous_pages(void);
+void kvm_check_mmu(PowerPCCPU *cpu, Error **errp);
 
 #else
 
@@ -227,6 +228,10 @@ static inline bool kvmppc_hpt_needs_host_contiguous_pages(void)
     return false;
 }
 
+static inline void kvm_check_mmu(PowerPCCPU *cpu, Error **errp)
+{
+}
+
 static inline bool kvmppc_has_cap_spapr_vfio(void)
 {
     return false;
-- 
2.17.1

^ permalink raw reply related	[flat|nested] 27+ messages in thread

* Re: [Qemu-devel] [PATCH 01/23] ppc/pnv: introduce a new intc_create() operation to the chip model
  2018-06-22  4:24 [Qemu-devel] [PATCH 01/23] ppc/pnv: introduce a new intc_create() operation to the chip model David Gibson
                   ` (21 preceding siblings ...)
  2018-06-22  4:24 ` [Qemu-devel] [PATCH 23/23] spapr: Don't rewrite mmu capabilities in KVM mode David Gibson
@ 2018-06-22  9:44 ` Greg Kurz
  2018-06-22 10:32   ` David Gibson
  2018-06-26  9:07 ` Peter Maydell
  23 siblings, 1 reply; 27+ messages in thread
From: Greg Kurz @ 2018-06-22  9:44 UTC (permalink / raw)
  To: David Gibson
  Cc: peter.maydell, agraf, aik, clg, lvivier, qemu-devel, qemu-ppc

Hi David,

I'm a bit confused by this massive post... it doesn't have any cover letter, but
it contains all the patches you recently pushed to ppc-for-3.0. Was it supposed
to be a pull request ?

Cheers,

--
Greg

On Fri, 22 Jun 2018 14:24:15 +1000
David Gibson <david@gibson.dropbear.id.au> wrote:

> From: Cédric Le Goater <clg@kaod.org>
> 
> On Power9, the thread interrupt presenter has a different type and is
> linked to the chip owning the cores.
> 
> Signed-off-by: Cédric Le Goater <clg@kaod.org>
> Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
> ---
>  hw/ppc/pnv.c         | 21 +++++++++++++++++++--
>  hw/ppc/pnv_core.c    | 18 +++++++++---------
>  include/hw/ppc/pnv.h |  1 +
>  3 files changed, 29 insertions(+), 11 deletions(-)
> 
> diff --git a/hw/ppc/pnv.c b/hw/ppc/pnv.c
> index 0d2b79f798..c7e127ae97 100644
> --- a/hw/ppc/pnv.c
> +++ b/hw/ppc/pnv.c
> @@ -671,6 +671,13 @@ static uint32_t pnv_chip_core_pir_p8(PnvChip *chip, uint32_t core_id)
>      return (chip->chip_id << 7) | (core_id << 3);
>  }
>  
> +static Object *pnv_chip_power8_intc_create(PnvChip *chip, Object *child,
> +                                           Error **errp)
> +{
> +    return icp_create(child, TYPE_PNV_ICP, XICS_FABRIC(qdev_get_machine()),
> +                      errp);
> +}
> +
>  /*
>   *    0:48  Reserved - Read as zeroes
>   *   49:52  Node ID
> @@ -686,6 +693,12 @@ static uint32_t pnv_chip_core_pir_p9(PnvChip *chip, uint32_t core_id)
>      return (chip->chip_id << 8) | (core_id << 2);
>  }
>  
> +static Object *pnv_chip_power9_intc_create(PnvChip *chip, Object *child,
> +                                           Error **errp)
> +{
> +    return NULL;
> +}
> +
>  /* Allowed core identifiers on a POWER8 Processor Chip :
>   *
>   * <EX0 reserved>
> @@ -721,6 +734,7 @@ static void pnv_chip_power8e_class_init(ObjectClass *klass, void *data)
>      k->chip_cfam_id = 0x221ef04980000000ull;  /* P8 Murano DD2.1 */
>      k->cores_mask = POWER8E_CORE_MASK;
>      k->core_pir = pnv_chip_core_pir_p8;
> +    k->intc_create = pnv_chip_power8_intc_create;
>      k->xscom_base = 0x003fc0000000000ull;
>      dc->desc = "PowerNV Chip POWER8E";
>  }
> @@ -734,6 +748,7 @@ static void pnv_chip_power8_class_init(ObjectClass *klass, void *data)
>      k->chip_cfam_id = 0x220ea04980000000ull; /* P8 Venice DD2.0 */
>      k->cores_mask = POWER8_CORE_MASK;
>      k->core_pir = pnv_chip_core_pir_p8;
> +    k->intc_create = pnv_chip_power8_intc_create;
>      k->xscom_base = 0x003fc0000000000ull;
>      dc->desc = "PowerNV Chip POWER8";
>  }
> @@ -747,6 +762,7 @@ static void pnv_chip_power8nvl_class_init(ObjectClass *klass, void *data)
>      k->chip_cfam_id = 0x120d304980000000ull;  /* P8 Naples DD1.0 */
>      k->cores_mask = POWER8_CORE_MASK;
>      k->core_pir = pnv_chip_core_pir_p8;
> +    k->intc_create = pnv_chip_power8_intc_create;
>      k->xscom_base = 0x003fc0000000000ull;
>      dc->desc = "PowerNV Chip POWER8NVL";
>  }
> @@ -760,6 +776,7 @@ static void pnv_chip_power9_class_init(ObjectClass *klass, void *data)
>      k->chip_cfam_id = 0x220d104900008000ull; /* P9 Nimbus DD2.0 */
>      k->cores_mask = POWER9_CORE_MASK;
>      k->core_pir = pnv_chip_core_pir_p9;
> +    k->intc_create = pnv_chip_power9_intc_create;
>      k->xscom_base = 0x00603fc00000000ull;
>      dc->desc = "PowerNV Chip POWER9";
>  }
> @@ -892,8 +909,8 @@ static void pnv_chip_core_realize(PnvChip *chip, Error **errp)
>          object_property_set_int(OBJECT(pnv_core),
>                                  pcc->core_pir(chip, core_hwid),
>                                  "pir", &error_fatal);
> -        object_property_add_const_link(OBJECT(pnv_core), "xics",
> -                                       qdev_get_machine(), &error_fatal);
> +        object_property_add_const_link(OBJECT(pnv_core), "chip",
> +                                       OBJECT(chip), &error_fatal);
>          object_property_set_bool(OBJECT(pnv_core), true, "realized",
>                                   &error_fatal);
>          object_unref(OBJECT(pnv_core));
> diff --git a/hw/ppc/pnv_core.c b/hw/ppc/pnv_core.c
> index f7cf33f547..a9f129fc2c 100644
> --- a/hw/ppc/pnv_core.c
> +++ b/hw/ppc/pnv_core.c
> @@ -99,13 +99,14 @@ static const MemoryRegionOps pnv_core_xscom_ops = {
>      .endianness = DEVICE_BIG_ENDIAN,
>  };
>  
> -static void pnv_realize_vcpu(PowerPCCPU *cpu, XICSFabric *xi, Error **errp)
> +static void pnv_realize_vcpu(PowerPCCPU *cpu, PnvChip *chip, Error **errp)
>  {
>      CPUPPCState *env = &cpu->env;
>      int core_pir;
>      int thread_index = 0; /* TODO: TCG supports only one thread */
>      ppc_spr_t *pir = &env->spr_cb[SPR_PIR];
>      Error *local_err = NULL;
> +    PnvChipClass *pcc = PNV_CHIP_GET_CLASS(chip);
>  
>      object_property_set_bool(OBJECT(cpu), true, "realized", &local_err);
>      if (local_err) {
> @@ -113,7 +114,7 @@ static void pnv_realize_vcpu(PowerPCCPU *cpu, XICSFabric *xi, Error **errp)
>          return;
>      }
>  
> -    cpu->intc = icp_create(OBJECT(cpu), TYPE_PNV_ICP, xi, &local_err);
> +    cpu->intc = pcc->intc_create(chip, OBJECT(cpu), &local_err);
>      if (local_err) {
>          error_propagate(errp, local_err);
>          return;
> @@ -143,13 +144,12 @@ static void pnv_core_realize(DeviceState *dev, Error **errp)
>      void *obj;
>      int i, j;
>      char name[32];
> -    Object *xi;
> +    Object *chip;
>  
> -    xi = object_property_get_link(OBJECT(dev), "xics", &local_err);
> -    if (!xi) {
> -        error_setg(errp, "%s: required link 'xics' not found: %s",
> -                   __func__, error_get_pretty(local_err));
> -        return;
> +    chip = object_property_get_link(OBJECT(dev), "chip", &local_err);
> +    if (!chip) {
> +        error_propagate(errp, local_err);
> +        error_prepend(errp, "required link 'chip' not found: ");
>      }
>  
>      pc->threads = g_new(PowerPCCPU *, cc->nr_threads);
> @@ -166,7 +166,7 @@ static void pnv_core_realize(DeviceState *dev, Error **errp)
>      }
>  
>      for (j = 0; j < cc->nr_threads; j++) {
> -        pnv_realize_vcpu(pc->threads[j], XICS_FABRIC(xi), &local_err);
> +        pnv_realize_vcpu(pc->threads[j], PNV_CHIP(chip), &local_err);
>          if (local_err) {
>              goto err;
>          }
> diff --git a/include/hw/ppc/pnv.h b/include/hw/ppc/pnv.h
> index 90759240a7..e934e84f55 100644
> --- a/include/hw/ppc/pnv.h
> +++ b/include/hw/ppc/pnv.h
> @@ -76,6 +76,7 @@ typedef struct PnvChipClass {
>      hwaddr       xscom_base;
>  
>      uint32_t (*core_pir)(PnvChip *chip, uint32_t core_id);
> +    Object *(*intc_create)(PnvChip *chip, Object *child, Error **errp);
>  } PnvChipClass;
>  
>  #define PNV_CHIP_TYPE_SUFFIX "-" TYPE_PNV_CHIP

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [Qemu-devel] [PATCH 01/23] ppc/pnv: introduce a new intc_create() operation to the chip model
  2018-06-22  9:44 ` [Qemu-devel] [PATCH 01/23] ppc/pnv: introduce a new intc_create() operation to the chip model Greg Kurz
@ 2018-06-22 10:32   ` David Gibson
  0 siblings, 0 replies; 27+ messages in thread
From: David Gibson @ 2018-06-22 10:32 UTC (permalink / raw)
  To: Greg Kurz; +Cc: peter.maydell, agraf, aik, clg, lvivier, qemu-devel, qemu-ppc

[-- Attachment #1: Type: text/plain, Size: 531 bytes --]

On Fri, Jun 22, 2018 at 11:44:39AM +0200, Greg Kurz wrote:
> Hi David,
> 
> I'm a bit confused by this massive post... it doesn't have any cover letter, but
> it contains all the patches you recently pushed to ppc-for-3.0. Was it supposed
> to be a pull request ?

Gah.  Yes, it was.  I'm not sure quite what went wrong there.

-- 
David Gibson			| I'll have my music baroque, and my code
david AT gibson.dropbear.id.au	| minimalist, thank you.  NOT _the_ _other_
				| _way_ _around_!
http://www.ozlabs.org/~dgibson

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [Qemu-devel] [PATCH 01/23] ppc/pnv: introduce a new intc_create() operation to the chip model
  2018-06-22  4:24 [Qemu-devel] [PATCH 01/23] ppc/pnv: introduce a new intc_create() operation to the chip model David Gibson
                   ` (22 preceding siblings ...)
  2018-06-22  9:44 ` [Qemu-devel] [PATCH 01/23] ppc/pnv: introduce a new intc_create() operation to the chip model Greg Kurz
@ 2018-06-26  9:07 ` Peter Maydell
  2018-06-26  9:31   ` Cédric Le Goater
  23 siblings, 1 reply; 27+ messages in thread
From: Peter Maydell @ 2018-06-26  9:07 UTC (permalink / raw)
  To: David Gibson
  Cc: Alexander Graf, Alexey Kardashevskiy, Greg Kurz,
	Cédric Le Goater, Laurent Vivier, QEMU Developers, qemu-ppc

On 22 June 2018 at 05:24, David Gibson <david@gibson.dropbear.id.au> wrote:
> From: Cédric Le Goater <clg@kaod.org>
>
> On Power9, the thread interrupt presenter has a different type and is
> linked to the chip owning the cores.
>
> Signed-off-by: Cédric Le Goater <clg@kaod.org>
> Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
> ---
>  hw/ppc/pnv.c         | 21 +++++++++++++++++++--
>  hw/ppc/pnv_core.c    | 18 +++++++++---------
>  include/hw/ppc/pnv.h |  1 +
>  3 files changed, 29 insertions(+), 11 deletions(-)

Hi; Coverity points out a bug (CID 1393617) in this patch
(which is commit d35aefa9ae150a):

> @@ -143,13 +144,12 @@ static void pnv_core_realize(DeviceState *dev, Error **errp)
>      void *obj;
>      int i, j;
>      char name[32];
> -    Object *xi;
> +    Object *chip;
>
> -    xi = object_property_get_link(OBJECT(dev), "xics", &local_err);
> -    if (!xi) {
> -        error_setg(errp, "%s: required link 'xics' not found: %s",
> -                   __func__, error_get_pretty(local_err));
> -        return;
> +    chip = object_property_get_link(OBJECT(dev), "chip", &local_err);
> +    if (!chip) {
> +        error_propagate(errp, local_err);
> +        error_prepend(errp, "required link 'chip' not found: ");
>      }

We check for a NULL 'chip' pointer, but forget the 'return', so
execution will plough on through to the code below and eventually
dereference the NULL pointer and segfault.

thanks
-- PMM

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [Qemu-devel] [PATCH 01/23] ppc/pnv: introduce a new intc_create() operation to the chip model
  2018-06-26  9:07 ` Peter Maydell
@ 2018-06-26  9:31   ` Cédric Le Goater
  0 siblings, 0 replies; 27+ messages in thread
From: Cédric Le Goater @ 2018-06-26  9:31 UTC (permalink / raw)
  To: Peter Maydell, David Gibson
  Cc: Alexander Graf, Alexey Kardashevskiy, Greg Kurz, Laurent Vivier,
	QEMU Developers, qemu-ppc

On 06/26/2018 11:07 AM, Peter Maydell wrote:
> On 22 June 2018 at 05:24, David Gibson <david@gibson.dropbear.id.au> wrote:
>> From: Cédric Le Goater <clg@kaod.org>
>>
>> On Power9, the thread interrupt presenter has a different type and is
>> linked to the chip owning the cores.
>>
>> Signed-off-by: Cédric Le Goater <clg@kaod.org>
>> Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
>> ---
>>  hw/ppc/pnv.c         | 21 +++++++++++++++++++--
>>  hw/ppc/pnv_core.c    | 18 +++++++++---------
>>  include/hw/ppc/pnv.h |  1 +
>>  3 files changed, 29 insertions(+), 11 deletions(-)
> 
> Hi; Coverity points out a bug (CID 1393617) in this patch
> (which is commit d35aefa9ae150a):
> 
>> @@ -143,13 +144,12 @@ static void pnv_core_realize(DeviceState *dev, Error **errp)
>>      void *obj;
>>      int i, j;
>>      char name[32];
>> -    Object *xi;
>> +    Object *chip;
>>
>> -    xi = object_property_get_link(OBJECT(dev), "xics", &local_err);
>> -    if (!xi) {
>> -        error_setg(errp, "%s: required link 'xics' not found: %s",
>> -                   __func__, error_get_pretty(local_err));
>> -        return;
>> +    chip = object_property_get_link(OBJECT(dev), "chip", &local_err);
>> +    if (!chip) {
>> +        error_propagate(errp, local_err);
>> +        error_prepend(errp, "required link 'chip' not found: ");
>>      }
> 
> We check for a NULL 'chip' pointer, but forget the 'return', so
> execution will plough on through to the code below and eventually
> dereference the NULL pointer and segfault.

arg. My fault. I will send a fix.

Thanks,

C. 

^ permalink raw reply	[flat|nested] 27+ messages in thread

end of thread, other threads:[~2018-06-26  9:31 UTC | newest]

Thread overview: 27+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-06-22  4:24 [Qemu-devel] [PATCH 01/23] ppc/pnv: introduce a new intc_create() operation to the chip model David Gibson
2018-06-22  4:24 ` [Qemu-devel] [PATCH 02/23] ppc/pnv: introduce a new isa_create() " David Gibson
2018-06-22  4:24 ` [Qemu-devel] [PATCH 03/23] spapr_cpu_core: migrate per-CPU data David Gibson
2018-06-22  4:24 ` [Qemu-devel] [PATCH 04/23] spapr_cpu_core: migrate VPA related state David Gibson
2018-06-22  4:24 ` [Qemu-devel] [PATCH 05/23] ppc/pnv: introduce Pnv8Chip and Pnv9Chip models David Gibson
2018-06-22  4:24 ` [Qemu-devel] [PATCH 06/23] ppc/pnv: consolidate the creation of the ISA bus device tree David Gibson
2018-06-22  4:24 ` [Qemu-devel] [PATCH 07/23] target/ppc: Allow cpu compatiblity checks based on type, not instance David Gibson
2018-06-22  4:24 ` [Qemu-devel] [PATCH 08/23] spapr: Compute effective capability values earlier David Gibson
2018-06-22  4:24 ` [Qemu-devel] [PATCH 09/23] spapr: Add cpu_apply hook to capabilities David Gibson
2018-06-22  4:24 ` [Qemu-devel] [PATCH 10/23] target/ppc: Add kvmppc_hpt_needs_host_contiguous_pages() helper David Gibson
2018-06-22  4:24 ` [Qemu-devel] [PATCH 11/23] spapr: split the IRQ allocation sequence David Gibson
2018-06-22  4:24 ` [Qemu-devel] [PATCH 12/23] spapr: remove unused spapr_irq routines David Gibson
2018-06-22  4:24 ` [Qemu-devel] [PATCH 13/23] fpu_helper.c: fix helper_fpscr_clrbit() function David Gibson
2018-06-22  4:24 ` [Qemu-devel] [PATCH 14/23] sm501: Fix hardware cursor color conversion David Gibson
2018-06-22  4:24 ` [Qemu-devel] [PATCH 15/23] ppc4xx_i2c: Remove unimplemented sdata and intr registers David Gibson
2018-06-22  4:24 ` [Qemu-devel] [PATCH 16/23] ppc4xx_i2c: Implement directcntl register David Gibson
2018-06-22  4:24 ` [Qemu-devel] [PATCH 17/23] target/ppc: Add missing opcode for icbt on PPC440 David Gibson
2018-06-22  4:24 ` [Qemu-devel] [PATCH 18/23] pseries: Update SLOF firmware image to qemu-slof-20180621 David Gibson
2018-06-22  4:24 ` [Qemu-devel] [PATCH 19/23] spapr: Maximum (HPT) pagesize property David Gibson
2018-06-22  4:24 ` [Qemu-devel] [PATCH 20/23] spapr: Use maximum page size capability to simplify memory backend checking David Gibson
2018-06-22  4:24 ` [Qemu-devel] [PATCH 21/23] target/ppc: Add ppc_hash64_filter_pagesizes() David Gibson
2018-06-22  4:24 ` [Qemu-devel] [PATCH 22/23] spapr: Limit available pagesizes to provide a consistent guest environment David Gibson
2018-06-22  4:24 ` [Qemu-devel] [PATCH 23/23] spapr: Don't rewrite mmu capabilities in KVM mode David Gibson
2018-06-22  9:44 ` [Qemu-devel] [PATCH 01/23] ppc/pnv: introduce a new intc_create() operation to the chip model Greg Kurz
2018-06-22 10:32   ` David Gibson
2018-06-26  9:07 ` Peter Maydell
2018-06-26  9:31   ` Cédric Le Goater

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.