From 784838fe5cce7673448aa6746073e409dd245967 Mon Sep 17 00:00:00 2001 From: MatBureau <86561676+MatBureau@users.noreply.github.com> Date: Wed, 1 Apr 2026 14:05:17 +0200 Subject: [PATCH] premier commit --- inventory/Dockerfile | 22 ++ inventory/Makefile | 17 + inventory/src/cpu/cpu.go | 51 +++ inventory/src/disk/disk.go | 38 +++ inventory/src/go.mod | 16 + inventory/src/go.sum | 32 ++ inventory/src/handle.go | 108 ++++++ inventory/src/load/load.go | 27 ++ inventory/src/main.go | 12 + inventory/src/memory/memory.go | 27 ++ inventory/src/netcard/netcard.go | 42 +++ inventory/src/proc/proc.go | 35 ++ inventory/src/routes.go | 27 ++ inventory/src/www/disk.html | 147 ++++++++ inventory/src/www/img/inventory.png | Bin 0 -> 1365913 bytes inventory/src/www/index.html | 504 ++++++++++++++++++++++++++++ inventory/src/www/load.html | 196 +++++++++++ inventory/src/www/mem.html | 173 ++++++++++ inventory/src/www/network.html | 277 +++++++++++++++ inventory/src/www/procs.html | 236 +++++++++++++ 20 files changed, 1987 insertions(+) create mode 100644 inventory/Dockerfile create mode 100644 inventory/Makefile create mode 100644 inventory/src/cpu/cpu.go create mode 100644 inventory/src/disk/disk.go create mode 100644 inventory/src/go.mod create mode 100644 inventory/src/go.sum create mode 100644 inventory/src/handle.go create mode 100644 inventory/src/load/load.go create mode 100644 inventory/src/main.go create mode 100644 inventory/src/memory/memory.go create mode 100644 inventory/src/netcard/netcard.go create mode 100644 inventory/src/proc/proc.go create mode 100644 inventory/src/routes.go create mode 100644 inventory/src/www/disk.html create mode 100644 inventory/src/www/img/inventory.png create mode 100644 inventory/src/www/index.html create mode 100644 inventory/src/www/load.html create mode 100644 inventory/src/www/mem.html create mode 100644 inventory/src/www/network.html create mode 100644 inventory/src/www/procs.html diff --git a/inventory/Dockerfile b/inventory/Dockerfile new file mode 100644 index 0000000..ce76c76 --- /dev/null +++ b/inventory/Dockerfile @@ -0,0 +1,22 @@ +# Image golang pour la compilation +FROM golang:1.25 AS builder + +# Copier les fichiers dont ont a besoin +COPY src /go/src +COPY Makefile /go + +# Compilation +RUN make build + +# Image finale +FROM busybox + +# Installer le logiciel compilé +COPY src/www /www +COPY --from=builder /go/bin/inventory /inventory + +# Partages +EXPOSE 80 + +# Démarrage +ENTRYPOINT [ "/inventory" ] \ No newline at end of file diff --git a/inventory/Makefile b/inventory/Makefile new file mode 100644 index 0000000..97168a8 --- /dev/null +++ b/inventory/Makefile @@ -0,0 +1,17 @@ +run: + @cd src ; go run *.go + +build: + @cd src ; go mod tidy ; go build -o ../bin/inventory *.go + +clean: + @rm ./bin/inventory + +image: + @docker build -t inventory:latest . + +start: + @docker run -d -p 80:80 --name inventory inventory:latest + +stop: + @docker rm -f inventory diff --git a/inventory/src/cpu/cpu.go b/inventory/src/cpu/cpu.go new file mode 100644 index 0000000..d5f90f9 --- /dev/null +++ b/inventory/src/cpu/cpu.go @@ -0,0 +1,51 @@ +package cpu + +import ( + "github.com/shirou/gopsutil/v4/cpu" +) + +type CPUCore struct { + Info cpu.InfoStat `json:"info"` + Usage float64 `json:"usage_percent"` + Times *cpu.TimesStat `json:"times,omitempty"` +} + +type CPUInfo struct { + Cores []CPUCore `json:"cores"` +} + +func ReadCPU() (*CPUInfo, error) { + infos, err := cpu.Info() + if err != nil { + return nil, err + } + + usage, err := cpu.Percent(0, true) // usage par core + if err != nil { + return nil, err + } + + times, err := cpu.Times(true) // stats par core + if err != nil { + return nil, err + } + + out := make([]CPUCore, 0, len(infos)) + for i, info := range infos { + core := CPUCore{ + Info: info, + } + + if i < len(usage) { + core.Usage = usage[i] + } + if i < len(times) { + tmp := times[i] // adresse stable + core.Times = &tmp + } + + out = append(out, core) + } + + return &CPUInfo{Cores: out}, nil +} diff --git a/inventory/src/disk/disk.go b/inventory/src/disk/disk.go new file mode 100644 index 0000000..9e7ad98 --- /dev/null +++ b/inventory/src/disk/disk.go @@ -0,0 +1,38 @@ +package disk + +import ( + "github.com/shirou/gopsutil/v4/disk" +) + +type DiskFS struct { + Partition disk.PartitionStat `json:"partition"` + Usage *disk.UsageStat `json:"usage,omitempty"` +} + +func ReadDisk() (*[]DiskFS, error) { + parts, err := disk.Partitions(true) // true = toutes les partitions + if err != nil { + return nil, err + } + + var out []DiskFS + + for _, p := range parts { + fs := DiskFS{Partition: p} + + // Usage peut échouer (ex: pseudo-fs, permissions) + if u, err := disk.Usage(p.Mountpoint); err == nil { + fs.Usage = u + } + + // Exclusion des FS spécifique au système + switch fs.Partition.Fstype { + case "none", "proc", "tmpfs", "overlay", "sysfs", "cgroup2", "mqueue", "nsfs": + // ignoré + default: + out = append(out, fs) + } + } + + return &out, nil +} diff --git a/inventory/src/go.mod b/inventory/src/go.mod new file mode 100644 index 0000000..677c6f2 --- /dev/null +++ b/inventory/src/go.mod @@ -0,0 +1,16 @@ +module github.com/evoliatis/buildup + +go 1.25.6 + +require github.com/shirou/gopsutil/v4 v4.26.1 + +require ( + github.com/ebitengine/purego v0.9.1 // indirect + github.com/go-ole/go-ole v1.2.6 // indirect + github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 // indirect + github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55 // indirect + github.com/tklauser/go-sysconf v0.3.16 // indirect + github.com/tklauser/numcpus v0.11.0 // indirect + github.com/yusufpapurcu/wmi v1.2.4 // indirect + golang.org/x/sys v0.40.0 // indirect +) diff --git a/inventory/src/go.sum b/inventory/src/go.sum new file mode 100644 index 0000000..f64e822 --- /dev/null +++ b/inventory/src/go.sum @@ -0,0 +1,32 @@ +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/ebitengine/purego v0.9.1 h1:a/k2f2HQU3Pi399RPW1MOaZyhKJL9w/xFpKAg4q1s0A= +github.com/ebitengine/purego v0.9.1/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ= +github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY= +github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= +github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= +github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= +github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 h1:6E+4a0GO5zZEnZ81pIr0yLvtUWk2if982qA3F3QD6H4= +github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0/go.mod h1:zJYVVT2jmtg6P3p1VtQj7WsuWi/y4VnjVBn7F8KPB3I= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55 h1:o4JXh1EVt9k/+g42oCprj/FisM4qX9L3sZB3upGN2ZU= +github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE= +github.com/shirou/gopsutil/v4 v4.26.1 h1:TOkEyriIXk2HX9d4isZJtbjXbEjf5qyKPAzbzY0JWSo= +github.com/shirou/gopsutil/v4 v4.26.1/go.mod h1:medLI9/UNAb0dOI9Q3/7yWSqKkj00u+1tgY8nvv41pc= +github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= +github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= +github.com/tklauser/go-sysconf v0.3.16 h1:frioLaCQSsF5Cy1jgRBrzr6t502KIIwQ0MArYICU0nA= +github.com/tklauser/go-sysconf v0.3.16/go.mod h1:/qNL9xxDhc7tx3HSRsLWNnuzbVfh3e7gh/BmM179nYI= +github.com/tklauser/numcpus v0.11.0 h1:nSTwhKH5e1dMNsCdVBukSZrURJRoHbSEQjdEbY+9RXw= +github.com/tklauser/numcpus v0.11.0/go.mod h1:z+LwcLq54uWZTX0u/bGobaV34u6V7KNlTZejzM6/3MQ= +github.com/yusufpapurcu/wmi v1.2.4 h1:zFUKzehAFReQwLys1b/iSMl+JQGSCSjtVqQn9bBrPo0= +github.com/yusufpapurcu/wmi v1.2.4/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= +golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.40.0 h1:DBZZqJ2Rkml6QMQsZywtnjnnGvHza6BTfYFWY9kjEWQ= +golang.org/x/sys v0.40.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/inventory/src/handle.go b/inventory/src/handle.go new file mode 100644 index 0000000..713c668 --- /dev/null +++ b/inventory/src/handle.go @@ -0,0 +1,108 @@ +package main + +import ( + "encoding/json" + "fmt" + "net/http" + + "github.com/evoliatis/buildup/cpu" + "github.com/evoliatis/buildup/disk" + "github.com/evoliatis/buildup/load" + "github.com/evoliatis/buildup/memory" + "github.com/evoliatis/buildup/netcard" + "github.com/evoliatis/buildup/proc" +) + +func HealthHandle(w http.ResponseWriter, r *http.Request) { + fmt.Fprintf(w, "ok") +} + +// Liste des processus +func PSHandler(w http.ResponseWriter, r *http.Request) { + myProcs, err := proc.ReadProc("") + if err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + w.Header().Set("Content-Type", "application/json") + json.NewEncoder(w).Encode(myProcs) +} + +// Liste des processus par user +func PSUserHandler(w http.ResponseWriter, r *http.Request) { + user := r.PathValue("user") + myProcs, err := proc.ReadProc(user) + if err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + w.Header().Set("Content-Type", "application/json") + json.NewEncoder(w).Encode(myProcs) +} + +func NetHandler(w http.ResponseWriter, r *http.Request) { + out, err := netcard.ReadNetwork("") + if err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + + w.Header().Set("Content-Type", "application/json; charset=utf-8") + _ = json.NewEncoder(w).Encode(out) +} + +func NetNameHandler(w http.ResponseWriter, r *http.Request) { + card := r.PathValue("card") + out, err := netcard.ReadNetwork(card) + if err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + + w.Header().Set("Content-Type", "application/json; charset=utf-8") + _ = json.NewEncoder(w).Encode(out) +} + +func MemHandler(w http.ResponseWriter, r *http.Request) { + out, err := memory.ReadMemory() + if err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + + w.Header().Set("Content-Type", "application/json; charset=utf-8") + _ = json.NewEncoder(w).Encode(out) +} + +func DiskHandler(w http.ResponseWriter, r *http.Request) { + out, err := disk.ReadDisk() + if err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + + w.Header().Set("Content-Type", "application/json; charset=utf-8") + _ = json.NewEncoder(w).Encode(out) +} + +func LoadHandler(w http.ResponseWriter, r *http.Request) { + out, err := load.ReadLoad() + if err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + + w.Header().Set("Content-Type", "application/json; charset=utf-8") + _ = json.NewEncoder(w).Encode(out) +} + +func CPUHandler(w http.ResponseWriter, r *http.Request) { + out, err := cpu.ReadCPU() + if err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + + w.Header().Set("Content-Type", "application/json; charset=utf-8") + _ = json.NewEncoder(w).Encode(out) +} diff --git a/inventory/src/load/load.go b/inventory/src/load/load.go new file mode 100644 index 0000000..9b76c10 --- /dev/null +++ b/inventory/src/load/load.go @@ -0,0 +1,27 @@ +package load + +import ( + "github.com/shirou/gopsutil/v4/load" +) + +type LoadInfo struct { + Avg *load.AvgStat `json:"avg"` + Misc *load.MiscStat `json:"misc"` +} + +func ReadLoad() (*LoadInfo, error) { + avg, err := load.Avg() + if err != nil { + return nil, err + } + + misc, err := load.Misc() + if err != nil { + return nil, err + } + + return &LoadInfo{ + Avg: avg, + Misc: misc, + }, nil +} diff --git a/inventory/src/main.go b/inventory/src/main.go new file mode 100644 index 0000000..6aa0d83 --- /dev/null +++ b/inventory/src/main.go @@ -0,0 +1,12 @@ +package main + +import ( + "log" + "net/http" +) + +func main() { + + log.Println("listening on :80") + log.Fatal(http.ListenAndServe(":80", router())) +} diff --git a/inventory/src/memory/memory.go b/inventory/src/memory/memory.go new file mode 100644 index 0000000..e2d3606 --- /dev/null +++ b/inventory/src/memory/memory.go @@ -0,0 +1,27 @@ +package memory + +import ( + "github.com/shirou/gopsutil/v4/mem" +) + +type MemInfo struct { + Virtual *mem.VirtualMemoryStat `json:"virtual"` + Swap *mem.SwapMemoryStat `json:"swap"` +} + +func ReadMemory() (*MemInfo, error) { + vm, err := mem.VirtualMemory() + if err != nil { + return nil, err + } + + sm, err := mem.SwapMemory() + if err != nil { + return nil, err + } + + return &MemInfo{ + Virtual: vm, + Swap: sm, + }, nil +} diff --git a/inventory/src/netcard/netcard.go b/inventory/src/netcard/netcard.go new file mode 100644 index 0000000..d981333 --- /dev/null +++ b/inventory/src/netcard/netcard.go @@ -0,0 +1,42 @@ +package netcard + +import ( + "github.com/shirou/gopsutil/v4/net" +) + +type NetCard struct { + Interface net.InterfaceStat `json:"interface"` + IO *net.IOCountersStat `json:"io,omitempty"` +} + +func ReadNetwork(nom string) (*[]NetCard, error) { + ifaces, err := net.Interfaces() + if err != nil { + return nil, err + } + + counters, err := net.IOCounters(true) // true => stats par interface + if err != nil { + return nil, err + } + + // index des compteurs par nom d'interface + byName := make(map[string]net.IOCountersStat, len(counters)) + for _, c := range counters { + byName[c.Name] = c + } + + // fusion + out := make([]NetCard, 0, len(ifaces)) + for _, itf := range ifaces { + card := NetCard{Interface: itf} + if c, ok := byName[itf.Name]; ok { + tmp := c + card.IO = &tmp + } + if nom == "" || nom == card.Interface.Name { + out = append(out, card) + } + } + return &out, nil +} diff --git a/inventory/src/proc/proc.go b/inventory/src/proc/proc.go new file mode 100644 index 0000000..1d241f1 --- /dev/null +++ b/inventory/src/proc/proc.go @@ -0,0 +1,35 @@ +package proc + +import "github.com/shirou/gopsutil/v4/process" + +type Proc struct { + Pid int32 `json:"pid"` + Name string `json:"name"` + User string `json:"user"` + CPU float64 `json:"cpu"` + Memory float32 `json:"memory"` + Status string `json:"status"` +} + +// Chargement des Processus +func ReadProc(user string) (*[]Proc, error) { + var myProcs []Proc + procs, err := process.Processes() + if err != nil { + return nil, err + } + for _, proc := range procs { + var myProc Proc + myProc.User, _ = proc.Username() + if user == "" || user == myProc.User { + myProc.Pid = proc.Pid + myProc.Name, _ = proc.Name() + myProc.CPU, _ = proc.CPUPercent() + myProc.Memory, _ = proc.MemoryPercent() + status, _ := proc.Status() + myProc.Status = status[0] + myProcs = append(myProcs, myProc) + } + } + return &myProcs, nil +} diff --git a/inventory/src/routes.go b/inventory/src/routes.go new file mode 100644 index 0000000..6d682e4 --- /dev/null +++ b/inventory/src/routes.go @@ -0,0 +1,27 @@ +package main + +import "net/http" + +// Routeur pour l'ensemble de nos routes + +func router() http.Handler { + mux := http.NewServeMux() + // Routes de test + mux.HandleFunc("GET /health", HealthHandle) + + // Routes techniques + mux.HandleFunc("GET /cpu", CPUHandler) + mux.HandleFunc("GET /ps", PSHandler) + mux.HandleFunc("GET /ps/{user}", PSUserHandler) + mux.HandleFunc("GET /net", NetHandler) + mux.HandleFunc("GET /net/{card}", NetNameHandler) + mux.HandleFunc("GET /mem", MemHandler) + mux.HandleFunc("GET /disk", DiskHandler) + mux.HandleFunc("GET /load", LoadHandler) + + // Autres cas : fichiers statiques + fs := http.FileServer(http.Dir("www")) + mux.Handle("/", fs) + + return mux +} diff --git a/inventory/src/www/disk.html b/inventory/src/www/disk.html new file mode 100644 index 0000000..5a5408a --- /dev/null +++ b/inventory/src/www/disk.html @@ -0,0 +1,147 @@ + + +
+ +| Device | +Mountpoint | +Type | +Options | +Total | +Utilisé | +Libre | +Utilisé % | +
|---|---|---|---|---|---|---|---|
| Chargement… | |||||||
JF_;MNI%54 zJ>hvl+nIO}EX@bg5nW3BbZ7S8mv~qAH>ap4l(k>Y-1&N0l618dxU%Q =*Q$NQ)Z h^pBttn7f0W0^k`#0Hv=TcHGf=uL>3Jjn59E*kSb_n)DFlnT9R@d*7 zD>dV*7tB uwojQnbUf5Iz0ewHmk(iOW-J=d>WcC*E<@9Reo*(Luu>c= zOsd!mS&D%{rJJ!A8<+AG6+)-7%x~c)ydNqR9Hqn0#&39*_PX6QkMR%4ZmXNc$@oeN z8O|UZ3bblLA{bn@EuRG{GMaK%tx&dhUqB-B_Bs#Z1!3HX(iVl)%B-u#k*h}XUNAuJ zv^wj`)CFW3$$e!CdCz%xbu*E7ykpl{=Soo3{Je?OS@gh+cDL42Wul?>Wup*xC`9K& zBmCC*wH`~FN~B}$+?E&dSx@V$`b@3w&GR4&Ldn$2zCYfdy()M1?4O#Utle55K6dn9 zVa!k8shVO&OQm$|fxCk!nZBdNQ;eMZIyU_so!3&Zw{$f{K;U#=eLig`n9jI`pKy`_ z2Yveypw|RvyRf~vcarbrw!V~_!&YEgA>eQjV83`J)4+oETuW$WpNX4%kF-%}yXLMq z%v0J5KQ}gMwJK}y!!d!-#Gz=a16yZI-WfZ0Ab|_S8QyX;l&WKIh)K0^1`oiyr&3v2 zY{A^tBRAtscOl~6hr@r*IYO`qB7^g4;0zl$0{lpb{*~PVr?qHwbcM_ai#BaSq-qrS z<+yq%0iLXh;&J3**yDFXD~BX+o4;3EUm3TJo=^nJGM^Zn6Nt|Upq;ZN ~~Tx!P#H_G4V@L2KB}mTx4Jwev3Q!2M0~g-LE*1kg9Lx_9i@Npx!{Dwu;< z1`2AcC4^CGS?hG~a=2tFG^Z4WSJtC1nphiaV-e72) >tNY#NUZ&%Js*1?6KF>hQSUo z_Cy8lTAeuZK{SE@sQS7!w4+P;PLvO!C}+Y~njv=rKl(VLfjEn3D$eHi))DTuwK8Nf zxXyk2z9*u6o>tiI&3I=&REhF=rwLY=&Xu&=(IY^-A@EQq;pSi)MS-JI_XTS1b%0ej zs_CG}*t*OKf8lWD0EhON%B^HwsGH)1KY_<5J^}oY!R{UjZDNLFt5rx5 a=eqyfY{X_bR!6mMI zYJa86)uwAiRvm`&f+QT%G53|JE-{;-aCAk`-tK-CTEum1v8aY3Tc-oJHiY|tl Hm;J`n|u#?*KEHBZWEmDfI{`T?I>%cFQ@6m*CdQL z76KZbYR1FgmBJJ!E9g|ZRLVn7#TtB0zSp3?xdz;zjgtUBsBzY84d@@{y*9n!k6%I3 zEi-duzZ?OEu|ZI$EZ61U;MepN206wCuU2{ps9(9HFPNqfPZ4j5R|I#@809=`5!@&A zKG4 V Z<%@^2VsN6rN2M`j#Df?d&JTFL}rNEGqMvy0lbb^PF- nq7DKp~dYkEc5sajFYJT4U~DNBkg59rh)Rf zM-mP?Hd|`=a$&3mtg)MY50uANpYHTn9swrW5)^fjD+@2ma329nWMS=VQyOwv=()J= z?+RGut*F&?UC>^C-r^cC+T|$iP{cf2-*NR1D?}$j2bFf=i;-M7_2vO^QQT0H&EVY` z#+{QRumh~>`c(hmlKNvY%Ika^ug%C_iue(LWM<%n8t!#MS}?hc>Z41Rf2BXTKy-}h zswtZAJ?s*uG@PBtKlP$~e~eAew967A8{y dheNU z8;Ym^$u|;>nw`Fid1{)j80R{6_61_f{EipAm#rfbcVfx1k`^~a{(Do55qHL4O2K)E zpci(yL&u`+UVE!2h51FU=I5{T<)U?!^zP(8eP1+5xOwra*FoJs&)_+K65}J_y=vln zC&l!e6n=GOX<5{H6O)}Ioh#7lggcM*aI5SPij&BP;rG)drb%of^0(ZHpXC!ZWIgXC z(K&qFHCotaS(XR%Zggk<5GM1g;MDD>zAT!Z%&2Z?#+b|qNG`Zvzq;?VEI)E;SLxd{ zv7Oni`e> u^g*Fm;&yT65VJ5K=B5pipbVybBUH%m+Qda&cgt8SF z)wgEq+9xCz88Xc`@E1j Jvp9;|`#4&99e~6dXxJ zK_j9Z)^MiFX(|q-h&&XzZT`i)(n_19;0Of6YE*XA6o!=5z2q&;!vSD19Q5=py;78z zYVVaY7`%DzV5XbSiz-#aJ=EdhxJT6LR-Xmq(oJz3)`qn`If?*Fx8tVTCZYO(rfnuy z63BHPq)!&g%)v;2 ?B+-Qgd z8Y^O{^(s_Sj)%{F4Jm+S7AQz#ASbjLj8ActrZm?v*+6H^?ptVTEwV0U;ecsY?%Ve1 zwCfIjvLq=cB#pAi5y(~@z>DT?W#1RD1ofap7ce815hkn8q(R-86+D@2aKRsQg|RXq z)#-^<(>Uq=!N$sd*eZbCl0a!KO!xEIw<6bY`Iv}Bky_evvsHGuHX?WXewyaQoNU<@ z5tS>v=_?PMTc~%q&`2g=Lw85qDPs$34S5dOVtSVb^8Uw3L^)`CKzcaJ(+r^k1hu!m zH|C#Ykc7k)0DW(+<^U+KwnGf69sAi7f&D0@MNKrtW#ia8T7m}ZY_t~k(xpehqVSC> zk#0bWrY5#0qfn}^&P%eq4xH71jJ(X_m!p^Jr&)n;7tB=hvBJY1W;E3o{_g|4nvDjV zP3W?M?i;x&JGt)
8&Hl;ytsX%qE7TX9I5Unq^;|r}+sHFkVMX zT>9q>Wr}w9v?^tA_ODsezp4t93ZmYqt_@M^Vr9lOTpf3~QL%9}#^R3rSd628*h$O! z2>7@#H^A1uiyUo*o1n0)R_`Mya1hp8X=} YRgpT8O!G0N*s+!0 zVF9mDW>tK?1cpUT1;LkCq3${V=xgsaqY^bX{J^hx&EwnLd5vsF^$y%tkPV(xS9T!6 zka%=55cO_ll&^r61>3rQ`j);+T<)g+_K7lx*vbPsc2o*8=yv+EPxd%*YNqRsR_|6P z%HEc}NL|^ z#{eT5#TFk<8;wT)*2T#6ZHt_ z^Z710i(1EYGVZpCHN7iBJ9o}s>Tj07o$SKTFkU!0D^)et@FMfQuiA(uJ<}E@1iokG z(Cat1R5A@~jUB+0 v6-%?JFe}e*9b0N)CqE0zP+2iJDyuuVZ3vZQJlvL z)>-SXT(ZL8;=K@k=OB8BTT2RQMN(-h C+yCC(*A+mw&k|_z{?P3$eRsg z= R?DmWi3>P~V8a6Y`C( z_Fj$772|8oRb78>Lp2G%>$+dPhoMuebc=7|3`T|8J |Fjxcdnq|)%SG>Yo*M;%& zSmwdrgq(YJqpvP@R;1BPz`K?I)zV#|>eLh8IYwZ+=d&kD_Km!(1df?VDwDH^6G+Z( zI;{9rdEuR?`y|s$Irk#L>^1s!yM3I9Z!=+|q^tX2lBC49y$3oN{J0O~3d}e5-yVqN zA1c=NVVyRxFF-fwj{qwZ?#uVD?dfFO1&%^Z+0kSB FWM_Z@Nz z5hDtPgm_qax{l^{vGG-^mtCebODihO)PpVJH}DiR@6! mQxAJoD#a}I4>^;v zN=Ysz-)A=^za$u7!_&c8wI+pn1bhi5KDWLk*!cdD0*6@L+~w?YilZ7$L;dZEmShVS zreS=*H#z>w@3<7X--Y303wFqk4g%7g?QVtJ(~7LJ1xGqIu#|@QYALZ=UQ26Ccq9{{ z@7N6C=v3+g{l;$Q2CnQ@g_gA~l_SWxiDvJ1KYYF?@~{~WT|Fv1c9yk5JtP||^mhQ| zH+v8nhrRf4t8HceRl bfLCH(ULG~-o%-jbxvo?_~ZH_h%fhcn003iRL0%THZzDkdO+m*D8O*WnD;U6oKaf+C_lJkjT&jUsp+?2?y=K z4Y3Y?eUgjJn< *7PDhK8B zHQ0;(oQ-sBeap5^Ca84US%^Y&fCjlfQ$2&6YTF MBS9fDN== z0&tO6OU5Ii-ANGn#b<9nK#oxys|I8;>3j;7e;eZ0X1Bh2^*Lhrh$*FgqJ<-E-Y;{H zY>01&XH?@*ev+QeZ3}(ILRK!&tNhEiU@JL@%Pw7wS_$)DA`$L5(Zj$rs7~&v6wGUN z@RSLR@N~i>0B=UC%f0Dk#b`lAKAt;)9lXmL6=Kb7a{uB&H}3iB5oUqYjC?|{!kTgD zmCpeltH5)*f-E!6tQx #h8Wj!Qi?{SFC zR9E=&ND!KDh5BDyspfNS=|DUJA{4SB!F(+-Rp v2Au1b^+vpmsVy@%0HF4J zPu>OhD1G3*C(#~dQxGVtq~qTo5~*mKrMy3p@siZ4qT|`WP9z=lN6OKj5y KMpGOq&co_*pH>=AK`CUDVgy^7Z)+w0m7-_&HR&-VI_} zp;}IIru4z_;f40*)RmXO(HEyZL+7lC174Q=F7l6Y(Ndk$OoweGH0m?0N)@(+!V4 zf>O_I0A6_6MW#UuoVm0ab;t8xYK}MpFlxt)Nj;vYZc8F9(92)yrk$vM%!pkXoFQ ;ZQZqw$RSP?opJLR~{??!>O0gp5K=K&^Ayx}txsOYyv>CGg z;qaNwaZpxPoIWa=DK;_f(Oz9e9ORJ7*q8e?i{3gEZ#Q&jzJQiJQ*@g+`b)+*dJ4+% zlf>Mj11q{h`-$)cZ8Y@P#?LxJAs@)6EI8@D7oi7QR1e=sEgQGeT0xmq*KK|xram7t zy@fo9_0C d^WLRDllqrko)E+~{t%BKHxOcFe~PZHqHNBH4^;^e#Naq2Qdx8AjH zkyfKdQo_P!j87OH!nohTV%!~9+ipNWhVJsL_E{B2OMOR~Hi1^EjQ5NdY|U7FwTsIJ z`@;!w*SNhv1Y#i;#}E;ob1 &Wrr9fio?+yV6iSHywO(Z=E8D-BZ^{otRHU!u*hBF>I#lT5z4O)o2?SBjVybuSU$ zDLQ|@4s=oG_aD1^zzSm nzcT#i z&fsHZE@0V?%V2%}ycq|iW>gg`jDCRU9&mPX{IXawnN3=qL|8P~q$~2(V1O~qhIfDs zdWn7;=Voq^Mwv~ny$f#LSZ09bvm1;hqY&ciBS$GdahId%-Dkr%g0m5h255872b)8< zXB2HUh{w^BQQR~&Q?!rWzIA=$9%!ok;%5PS+za1B+3ne+&i~OMcejP8%rrz b3cqut?wr+msPbaj z1wPhzv(J%`>tbj<=_1oC#y`m;bIr_MeXIz09Fuub{vuVv9w9sFVF%CVlnnI{of*~U zY`JROJj7-s7ssJgST^9mK?;6EJ#0pw(uCZbNMd!`DE;+%+A*0~mt&;nRmz5_7@A~m zX>W3&FTfjAWv?F fHnOAQj}77oBPp6@Nygn`v{c}=S4=OOm&hkAnah!YXI!PNNMX`jdP_WAG{Uz;_?FE|UY@(1KdmY5y!2RO?- zJBl1Gy~OQ(AiXymsl4D>)?x5KRa3KI3nGsct!}7}a1ygY*x?f*86GViUdgH?J!P<0 z9%ySkND^4jVtFmRc-yvENPyv@xTs_y^xCdHvUTUUrnf8wKFcJ*HSMhPUn9w<#h&co zh1*115F+4(P83h`aNwnm)DVPQ2GWUvP~*8RU8Vbi2{ol}!@r1+)1Y{xP$SctKl^mG zkXAZI#tP$Ckwn4(jq)`K;%b=of<`-xe{h2pl{%7L>r6*fU`QiUbNCqbd(|7(fj5wz zCf!=Ddf;Uhd*>n2gRi-E7AQgtjs~kTNZ3B^UU!-TYeyJ-Q(w8im?%8+c(ZVDjHH>* zYx!oaE8?<*i~pg0()m*n@S9x-uR?S^QDIT$@*@CI<0|lg&w1z6bfi1>!X{UL@B8h2 z8H x>~q3G zlrGmORu;N>bR#p1tH<~-a@uEL=Y@W!jT+>zt6K7jJ~^AV3;OGGL%QH_9)@0~2f>|> zTx7=eJT?xBVJ|sDBv&xdBnY3~o=#<&f#+>;on iD1w6RrXGeN51vQE|! zEac)8im{|Nnp89F#<~7k+l8|E53ii7dbQDM`Cjhu#5Bm0Nnyb1GUT1`ITusnDQkZ3 z+ORdcn$B^<< =cMg)SI9B!ZDlJ|QMaseL%U%!=H{b&T?>oN@r2%dx)g&K!Rbu;3 zPr(1D#eIxewy1Maqj3(Xno@Rh|7+#A#Z5l=8z?0he(A#wC) Vva8bIt zrm&OIcwxbv@Z4kQj_#jb) 7`nwclFp zRHrFi%*{Fz{AQ-xZ~lJQZiy#~;$ae8R77L9F}`b0K--rn%^^AZ#VkbOaLos6M`Dw5 z80G7&Dp6ym=nb)IsdIr+K}GEai61Mi6|6I*^wHhxVsiNnC#b`27sorbBscwRJY^AE zC%&B`)}`De<4z$UWt)eC)mI@re|s0s`z zygVR<0%eu!~sBAdykeVcnL zrVV>#SMpqH@hu~Ns8=SY=L_YS73V-vCz|&kM!y{0N2l8-H2I^1Ss0C)s+{bgd+%F; z=h$)qx%4P3d(^pFTagza?H%*26xtf!)#@qUp8eVA`cA{JoF0;s5!c%=&zO!+EuDD{ zta^rucB;BZgQ+W2Fs%}}PFfuv@ZC`)3+J1m)@|99w({*$Eq$@B=~x=k+L?J=VMtf0 z?aj|BQ_14#aM$;>d;A=R7KEp7!`dB-(=s%$RtI2RS i_x7eNsD z3uHLrQv%?}YNwwQrK|usXy*L-KTzX#gYP}^-hO+-$xO6n59iJAlkC$r Sbz&G!Q3uq^|VX>AmJ9 z4sA*>3V+5UpinVLBg=i^kH)R?uM>g~{lkk;*0JldE8ibtq8(({-ZgtWEk3hc{UAK4 zDkCn_2>$-2{^kI+P9i<;nZXuatvbE^O@@YkHbvh@kF9-bh-^{ng_(bxAG2||2h;XU zWmMCr(_<_Ot|q;i>R^fwtyB02sqACoxV{36cs=raGN_y28Lsq0yK3ZpEf0NCa22;?_@gl4v!Y-2T@~@^eJ_7T3w*QzoI5!?9hP+Q@O{OMmJnk6X;rQr7 z_tLf`_l(ld?i#i5U0&vzD_SNlgLCb%T_?J;tSERro_!&&iQ-#*7ho{fM?yc9Alw$B zYvPQlWMy9ob(ScM0JFIa3)xgwX(J0XpI5udtV!1%8VvU5#1m{s$Av}xC$#cvsX-E# zhr18PE?8?gj->+@G<_Js`P9((r$ih$AY$I7?Y>yk0dyS=P!q+NqU13_G(3EHlX8FT z#|wdl;FSEUVEpa2Df`rj?Ik-Lkvs?8`fIOmyk6}O#N!Qg`Bka;Z?Q_7sKYn7qRKOz z;2r@}I{mM*io()I^3$qpG<4Ch`tD=bj-tZq9{PFk2QBT-LvvPhb`&nt4#ldKxA0T^ zb3pq6%Zq5+FYm|R(ssI`q|hWwC&vr# &uI(Ml8+}xl$MwD#SG;K6P1s7_B8-m)~(YiQbjf4t=>qkQg2I zY@ci`FF1Dd3-Q-u?Rq+tD{b21h;xos2KcTe9*jb>k^HNa8^+SvO#$G?Gu_KDufE9| zvz0WzFq*juNn9$;eU|JAwk!QWv%c9+837P3 xiogQ;ll z`VaI?DC*0@7HSn}&B!eFr?_4(W{-=3s6uio3-1&XgVy}YjGOLY%chow@h>|#rk>Gz zn@LG@>fko2hYdt^K_BrqSdLq|UYYbVUB;KM3VeJ(J=Sw6+C!f?zP?qCN8{qpCS hvGT-HN?Ai38EFD7G63IxrZXi^K= 8>vKVJ-e@D@HA6MN>Ei{8Cite#5fiG`KCF(jPO-FdZZ zZ8U6erd{toAf&~h=>661@KkwtK0tEo%!=5Zd5l+dRBJo!b)`<$TilSL+drHx32!zE zJ6Q5Eafil_y8j4jBPL5>K;LHIz4)?U#Zak!H3QzcgMPVMXtd&Tl8tZM5Hpx{Dmld~ z8I-$QoV|^0(^WP9>g9{-97OI12ZUKY&hfnKY=hup1XD`s@z_blM1oHEr4+L8qar@8 zrCSm`wUsTJ@kM)sDQ+8M>6K&zhh%g!h30Mf_5DHq-LPfiuCzNo+U{>FI>bfw4qRK( zV=?iYi^%R$Hp>E-!fvn|0e*d-{O>BluKcH<$mS4l28J}EueFDY*+}Sb-^MIi_mJzD zTk;&&%AT+if2<5}e6@%!aOut3tBLw&P<>jKA_=en(1G{ufU~JTwswFos30P_J2R7( z C>yiocf9g=G5WxNRX25|BbEH& zejBSf9E+`qAV~mO)XkxwWdk9YwrbL{zTQS_#5F-wBNfM4896IAXO=_BBKt_6=2&u@ zrM-V5(pYUWjyufH;-DboR3v%sK|gmbIBCiC^crzfLEh0rfqA`=Ud3)`MRzZLHDyvo zGx|C_TmJl_5GXQaYofQ)v%rntM0CUv=I+6xtuftLnb~G#R$rzsI%F-|-*!K2mc q!J&;6L*!*=*KiG2*AmS-1<~MP{z>7$+Lix`mEVjz zw`KEEJ*^b<^~<`^&}oEwQQ2DP8x`c!yJrED$!zH&1pkMtxA2Ox?c28TLP3#`k{(bR z1f+8q1!?JS>F#cW?hue1VSu3q1cpxO5QZ3P= QsUF(+MWau%VF?HgF+Hi|gL4WW<>Cla89ZFZ9E%RM%4|J`XPxEzZlX8(iv_mt z6*#Ec7 `*Z*+q=j#j{n{$#wR4r%R64?&oWg+{rh z0iFS!0GlC>U 9yc1wM^;f)|0$nbg$HGq-=!-WS zH)PdxTmSg^iOtV9MKG{S0N#oef6TQY>aFK=SeXjLl1ciS2z)f~@Ge*o_GDN*QzPYj zd0a?XF3q >xHit%G=dQW?#BLR+$Vow)NhyT`c?$6|Iq z |RRS0E2}s$Bq}uzb+~K1MfcxaHp+z>8fL{Iw}FZA@BG z%?Lhmar74p>(C0_iZA}bKj%-weie9^Lz^Q!>1JYAnW!huf4_Jfo@0L|L6DdNzFns- zR58{sg+_ +D=6GycUIt(({|)^{K>J`$2E^QBpZ#yABJmCxC^ z&hhqBXcUAI6*IbNp7&_D#usmgQ|B+LZfZ`nTf-cG31{BNwcoqOt%E91&ei))7v5KI zTY`?8dnB>-1vw3qN_U6@5n{0t7WZ&gXake~YUmn}D$Mb9Ro5P>%-)|or76sV)45Lt z2LvNq84`+D)VgLFI~VRsW;lKs2EdW2ZX-MAN*f7M33+5RY1%ea!lmM{njaJA( G#EdLJndrLv#1P;ezu(=nK{=M2u1@f8vCv6N#Zi0L-KNU=!}}kU-1B*~{B` zxJ7y1;{osw6E0sj^Nn&`%{;p0P%s&z;FW;jyYi<@wAzMVYqc&Um?I$|JBxnnM-BV( z!-0#h4B)YxvsyNY8>H- _CmfHHi?<2MC5sAlk*_{9JQM#@!-&;SaY(!i42E|F=_&c7RO1Wz&im0v zcu0TRm>Fq2ee em67jq(gs2{Bj|5P#*5p%J+u?vWb709tj88#N674anUnm6 zY9!^otg{(tYM>73PIxf~eRkP68Q|8EbfYU{HLT2^#Ty~Ovnj*U?zM8& RIyasMs8K|F!Cq zCd=Fi=*O(eSg7=ZO_@e3?Q4~yqrB+_bUqQOgYdHz1erZb`=FZr)MSy0Ya~c3u5W3R zJhW zjFwRcmKa6HVcx*>6ONv+=8$%c*}!FheL7rg;fm^2yx zUb(KU7%!(;vP&$$^LVUahr?_&5l2>YSB%&s1n%ljTV1hMwGs?EX7YAmfvxlxygVT} zHRx6FmGh2iG}$0@n;UO^BP5QJRBTT2(%CD!1y^2Y7p9eOyin2k;PyR3jJ|k31VKI~ zrg#Ie`Y5J+x;-tWP$8Yzy-fJoO|xIB$YPh5xx39C%#C?;R8D EMMH0nJ`&gl9;q{c5vJx}393TGf+%_%NMUWoCr!j(L_|QxukPhGj8cDP z4<6sfD>eYUhLr=``^TpP<$l^XDcPYy!vg{j >Gla`;bc zy$BE`l;t*LtCN3%p+Y{1Xpg?DgIn;^7S3s}o_V{3jzotXwXe6*@usZECNQ3aSFx$V z{JdNqD$AouAkD{>rpE030J+HsZH2IZW*?UwD8K`fu#AYR$O^iOIe^Vv+yc`xZffwt z!t>ku*S>4CZj{hnbr_0%4{`BDJ?J41e}9O2f3coqDD@Uv{yJ$ApPbs1Fih`( 25#DAqlWNnezi1IyW#ZOQja;)I64#KEq{0zv(o9 zQPdh8QJa)*c7oe|x_2XnC|4XE3UMKeBqrk%h^BOH3$KN+vg@aZ_Dz@R%W8~X(#P?J zqm5S`y kj>TgHJl zgy)@9>|d;lVZXD Leur^l`TiR@Y#Pq4bHsrXbjHpy@l%L *dNakMV7BCetva4=FbxwJvT{oI`RDDk0phJUs$-AJ zK1@UijLX&7*Zo}T*IRk^M)iHdLv7%_fwPxsMvkuuMAEP6xkvFXMZ;iamb-3($4G$3 zcw7GSG!9lRPsswbllc_j**Lrr2Qc+C?VYMDFXR^{Qv5Lmg{rPpO_7j!^obPNi~Zl# z_Kxk**Z;S(`s^L~%V&!F-cNHbNz<+nE@#8aQ8gk&F{kLS1ekKI_gGw%)U NCDjs9<^sWK4^opr3 zFKon@G9lAd5j^oN(jg4>NuQ1v5^w8-{$jN>n?1|{81LS>SSSy35%ZUi*Y)KDzRR}z zi}fOqzbyIP0^rJ Yt?(!F}0U~5JxZPD9O&fm#i%ztjc!ZF=Lr20dL zG{;3OhMcX6?{DX3-T9|KZL?cgro;)39uyunb7#J|bF5AaA?hi4oxxD=%Kf_6H3Hq| zD(iQFoBI{sp{*F0P|;`P0(_Z}mx4KqaIp+yt7ZLp<)infkNG>%h2+3&fIek zHBJ^c3;nu4=Ty0WVXH+a-6QNy8@Q<5pav2WXsxt#E|C&{eR@ZV4k^O&a @;(T?(>UjVinzf)}$7-U&$m=hbV)DNn9Ebcpy9Y8L3JIZ`^(G<@WSgLP zU~b}Si52fFbPu6WzuPqe>qz&StsxsQaXCD|Hn5fTT^k2v19vDaL@FeenaT1@jMD;e zwq{+iexLrn`rGKR`*`pd-Rp5LMvrHkC-Gx%FNk6uIDe2Uc KY{SlUrh*~79xU@ zLTl_3R-zD#cOOoIW;kvZi?lAoA4go^5$(zGX4l}I-YQT|i!HVW^h|D+yaiV97$pq3 z6>MyJAjs8^G!I{Y hQC?v#UN z?Ay|``1A&3ELTGDrjfa&tnXcp=X$R2q_*oWf5*Si+>kWA-S{!d!BZv%NzqB3Wb*X4 z=|qq-jSjOw3iMl)!gyaLCKR*%%(VY1&c1%}8kwD3pTq>lKObUb+ 7SCSRrN{zrA*^j*MZ>7@d-^qWpr zhlQJ5ztvVDF5zCWqI9V2gG|dFt)gDlZyBH}E6f9F1dWORS)%Lub+kVc?q8AY_O&Uj z9q?d3sfLdDY}zh2{uhga@Gn;Q1FPof&RNJdPJPVP*o7A$7OgW#4_`nT{>4Hlkb{JJ zyjw|a2&ZkPs?1)z#G 4GIY*(zw=-i(#P#=GrK=Iz(bIM*Tb57mza{4M6jGxEo zb6wEkEvf74k(?4YzS|~y;kLA=x3~r5sQL 2=5v_+nd{mQzKLBOi%`m512C_Z5BSYj0Kgp2^+wsphKwd188N z%h@JAuVpc^A0+%UZom&@S7DTpzXG~6Xt)Bhd0EZI@2tkO`G9|7`mC!NssS(AWB=>4 z{O&&{5}f$+f4ejPI~&G0NLW%kD!F?I-XQ7(sn%ECU6eGm%y#)!_PjNmRc33BQ6A5~ zwru`!fP0@xr*Mv)89p~gdzN! B+`H3z$NKtcKluA1I=q=gOJSK_1r?ezgT6O2Vd=jw#pyY;=MA_ zN(Q3DibTQdXTyw7ga$(>|51hPxR(*}iR%0AQ+fQws-8mD+gP#q_ePau-Bb7O3ug%S zG|4M0<9`mptjyY7oFxKo3bSxun?9TOt7YQF3QTiP-h@P@&a4x5B^fvP`0DL-wc9=C zpOggbRHHSQy;|zh#s^9q_ML6Kq`dpaaO506{l)5t^RU D;bDhcSxiKv0VDC>6eu>h5PeM>ih9zd*GFX|Z zTvHk+XW@L3*HqO|-;6gko)`Zv;4AOF1KGTR+X7uQEa}XmPbi`U;aHFr$Fb$ faX_#+D`w3vDDc5*;r9|_z$Nw!J{IRRl>8-xE(y*$tj=6@UfY)EhP!`4 zck%s*04c`tJ&nIMvGh@5fajim`zoLYO+-;!-!QrL* Ict**KR z`8wnV1;A@DxBP?Ci F?p( Dxr*T864FCVf=Z@Qz9q4&`>7(A6BM6JfFCa>PB zBBt(Ul%-Z*`-RNFB&hJ0PZIGvAaAbfhMY#x&&-WfgvyCcOl=5WAl0$V$T#=2X$l1w z7e=@e>(F{ihqKrh<0^&un` fAh^>6n;C`g2xtZg-Kb_--XX{P?L^&}7#O*0wQyMU6ubv0CP4>!mN3 z&~8&ar(VfL$d}!6j_tjG+;FWqSV`*%H4sd4vC)|`(d%kxD;h3&UnbW2B$MYd%|pMp zu<*RUy&hB6GkzHjB2L3bZ{L7ck&VX`Q4|xZ7?|{(Al$Sqp|FI@KvD$l<#1U^v%T&8 zM4`K&o#F8iCPlBE(?;QM6d$|{dQ$FCXP_9A|FC9$c&&9ea LdhUB^UbSF6BkPnQI#fk3WfG_oj h4i+Q8NFz^&Qo8ArY{|eO9-E)QEU0EKTh>3ayNj;on4fztR^>A(#fQ+ zwNEfSrO?@et_W=Nbo*^_v mEpY1(hqv`+g6kyw8{Ad4RZvV>; zNBS-P{0D7MeS|Z^N$O&=WR>S7;w2Jp-R*WV5 wb&YQ_cM zcM0DzCKz2*O8RDKr`JHPvPp{9M|gCnY7-)<=e^T(4!LlGhoQY4SP*npmB=0L`=eSh zxBQmd>?;rNDC-?kIruH0aOL_y5bK9N%9 j#%$tXwcb#vzwkNbdMqD_ zs^(P$OKp7YA&j#3rCd&+;ABDLaf|o Zv_bAww!JjU(hILF18$(qh;kTPY)g5= z-pOJu6Uz75pRr~dsEmz{6uoxnKXYgmdv0v72^8D8EAu|>9<`Qe*p*}bGTzFjF!F5J z*+vYJ%3ikA1~pqzr8UwYqKj|ql-CQ3KF2EX$EBY>s|1mLQT7 |;I0-(p_TT-c460=hdAN)YE;0G4(^wxD8Dnj1eT{l!~IcvwN zzuq&k?;FbJlfgya**$r@q}?C20tg}3)0&H$lc^Z~)*6=ZOR? bmOK!q!>{(dU}9ot1B&+`%1vU&G`_#Xk3{D_TS9BN=O@*nBL(z z6FWjH!Jk|8M0`6)$V*BAWoS4E<6PP3PHlUB>9N;MLio9Pp7hw(^pE@sr+gQH-FFJp z81G*NA6d^6 ;~n-f&DP I^&Xyo zi9JoVw`W|-{IdK{sWP)g({XMJ)Wji*HS*#a3Ey)CH#R VQEyuO=j6u|ysn(W&Ij6&nE) zS49YAICb!sg72yvLn?L3e-xI9j!2Oy*U1i1irQA28bQPxlHw=LyQh9HS0HfdCJ`g| z#rU=92D)}|i7c3-%3x@8CzueeL8DX#3@`}SZEk+^=0&d_8#aq9Fp3ucJ|KEWvCsG^ z8+>Eh0_Ajo$aZGkG%};8=7CNlCkwopVKdY8jz4$|eMbz(<|ek;4|$@lDW354{7)kH z9~HzXHimonS8VyO0s{VsteX54DZs+>@=74IkL@Xxbw2G#wo3xBn$S%XLbwz8Nfo{@ zU!QJf&8Pe)qxTe7978v^C6E&=jc%6d^lt=`uVldgV%7S_^yof!TjlKGSCwe!skS)8 z9(6;; Z5kRdF(qQb1*DbLC`Z?sZrC;5qO&Z#wGqb2J z={}y<;gg84Ci~WX&+d{*?#148k0t~%c}Wx9E~tD<7Y;qffC!_^Q6_d?>~e>PEFRON z#mm?eQ1U)idJWC?_W{8=uzZQlE{*01D>3hUBPXY%^z{<@j^LcKHct!9rKnui=hW@3 z(01*czgQWB?d(l;p15wNKj{5S)z&S3_stFqslyxOhicxc4Z>2;Q-{K0_L|NE#Kwy< zOe#^y^1XJ&d?jPa$&MG5PwzA)1eU^_R$_+vHIkQ6Mut)O+Uyy^YbCh!Z-+mW2y@P# zi CBE21w`lsD#&Vm^6wFmQ%%ozU&!eJ>pLgiCOs4WbkZ1DYSKzdQN@t2tl# z#h#mfshhfz6!vQVN;RrCC^basN{GJxeP>tV4w)Wk6ZNN?KKLiGXW7B*u^lDF*z)Ty zz0>D;iu*^yf_Z0R;LvJkwA~8g=Jfr}cuA|uzC^osLZ;y5+-k@Ro+2pbssu4eRUSJ< zAFcHlGX*AB)w~AhM0^ bVl&QkNW0H^f1DNFUJOS^y=PlRp-oq%3*R&Q5PZ;ItTV3^I{6a=5#@28@wO zP4$)Aw~@7;)c*!O-9Z^mjj7_M@Y>CU;S~@1V ?FCG@L2{QDY1qzfMH+bBrX`@L_U9V+Ma2Lq*08?`dgoZo@&S#crll9BkiiV+FsuYjq00rJpg_Tg1wcDfyC`c zMGO z%!0}|D&m%td`&xjkST47a1F3cZ z@S{VHOoe5f=ggmB+9-yka8iyA%&@7+v(YPYTm4c)GpV^`VGr O zuY4-}^= e@x7AVLJ{&R7P{4J0jBjyw z!5_S(Y}ZG?3^0sCC#@_9D}$BV#w`MDT~_&MtVb*u*hh#|Tfd4EzcaU!75eVkI4I+N zsoW%LDVy^43zc}mLT?A|8`Y15@bVE~lZTyIU(=41CB6mUID*!CtzQIZpnET~(U4yt zQdCt*q`FT0W+@(Ph@YEXk%9A%!rF2+3R@G3c=C7mSmfOhj_T@pgMnPeH8Ay1rAg#| zxB%L8T|=4^bd^QRPuP`e>h58J5pyKhYknw)3%8L4g0i|PqRRI0mS!X8zSbM2As)Wv zLfci1yqG-43Wv*PZeChtihCL|N518FdxzC}j9Y8#BR(f(C#?Kqjae5W@*wqNv5EBc z8(U&5JQ3{iALGAv|4*{_ud o za*&^EziisYc6u_a@I%hItRQoc7#D&B?cwBs5pIw!_?{WZ>F|9N)2`Yuml<3ql36Em z?`_!+W=xhG6u*$TN#!1B6Gw;b2a3K-$L5>2kGHU (c=8m8(c&A70A<_j^*4O@MHAbn7SrI%8X^L6KlTMFBqHAMOj%xzV#W% zk44x?0{@b08%R-7GCHm)-_?MmA4xGg<2EdNyBv_)LD+SJH0nZ$ZwCgg!357$$#=y9 zS=agKvg8)y+CG8QKzMsG%0~7G&27`?c2O(fr* H>m|pDIFG;SMSrbaDo_PF;L9LndUT#sWL; zTq<_jTmG~ZaSUG%t 4;7% ofnk1lo?q1TGNi!O@`mgk_kn(aDEgr~B3#r6=E2Pg!tJey!h=t<6ufPLmbo z5yTlP2qowrt3a2Z(-Z8Z*NFvZ*u9zBV=R5gltfQkV*YG--Q9t@w$XBpQS8S&kc;U; z7>bU`?{2n;_ffx}`AlC@F8Ql6pVzMzkZyy0!tH|RThn>-BSv2SBDCI*>rf(9mk{Dg z^L>4b^7mRMDvkM!xtf-rL)#K!ow2!uBO$OT@bz%AHnl2w$fn<^Wy;g>lyGG
wEi!^IDByC9ehyNPVWj)%H6qO+`uqRaRh?(y7OLP@?yjWyC9l_|lhKA~~j z19 Sm<1L`7t(@p{f%Y2Cx9+zzo5L{s9?M35* z70dTnpf5#WEo}u3!c@Ug)QL_){x rrm;7RA_kHbJg|5+;YPMRT2^}ID3D`JWg^X#Ygju}vrMS? zkJzIfb+*aU!?D0Ynryk4K)+?fR@v3VrLG#&r9bYc1B_DTZl7H-jt&kKCN&??k=1Zb zt847oM(MP}7J|U?6YD q_27l)x-^V6&Y&n%VocK}l2dcW+K`z}8nct=TDk zl=HVtx=(@f8Y)ku%d8Gl#k5O$kK>ZY?<6N%cz#B1O?vLdG fFv|+buIadgUwlgA++!1q?I#QZDl!8n!$UFwdk-4 z!x z`Op!V)&zcr(-!z3GdcFTVaSj0bMI}*oS-sAUj 5iMbWQNRsQj{c*npQ_SyD2wg3{3Ks`*zj&;p{?Bv5LGiPN zsDTFqE|o})%_&2`WU1*KIzZMT!zsh*r`k)(7bK-3wEn?g%Pc(y6^WZAmfoY&eS{-f zDH0W!QzxEaF0wX}=ad(SkdVRTi~)R2_i5{Z$GC6vW-R(|VX+Ao(a7@`H~&rWCH}XG z{xK%(#Ql%Q9WyI0_}AnAgwFnW#x9)#k8ih~;liSWK7%ZSKmCn!;O(u_Zt@O*csx*y ziDgYKsp5#{_SWso`FzL;Dm8CNcRo77BefCT4&Ba_Dau%Z32rIry(CLpzP5MeZMI!s zU%$Z3JTo!nsPQPi63OPqAn^3jf?#s{Iv@Y3B`)cLe?;nJTc1DLn=28VQ;8Gfb^9Vn zqUO!xtJE!=OFh{R7ubfaH=Ls0vMTTL$GasV$e`rRC1IjX&fDk3+`$~aga5pk|82#$ zoD=0lrP*hMV|G0SYL03bdR-A?!PtrFIqC${E!t&H^rof9(E5;c`;^<1%0pt;-iXrL zNUY)d)@q1RYit(!^3MS_tYanc3u$pk!sp-08C@}jT$BlsSULE{{Ru}QgAR=mfj+Fi z3Zz Q0j3qcP`zpLp3E#I(hhB>inWFI{+sD4Ib6l~ z>dD+V2|+xftN7D9;shsx?5GV6I4NPUMFhbvfoDC}VsU9o8O5K4>6I%Qlu5Gy18Vp2 zvv=1lv~RxM(A#% kUe(N_n=Ow4RBP}l} z(iby<*h =oUeKH#v2D)B)v(rw#E(MP4P27M@gui4oY z7oL^`9PXBVTb+zUgqzz()#H24!G?^W?$XKT*c%azLWjo%d{vOO^EH)_Xb^0kT z^PP4i!)dz-6c#`kjocX=5w>2^g|ZGaWr>rapXId=7d!a(3|)Qd&$#Q-74NHstLMAL z_c$DV@yEAanr#}Xbb7lz(!X|&7h;fbz&gbir5)89DAd #gJkb*n~Fn??poc+NeoG_cNKI%A6Dz=8r55IdTRv3Z HRp|dX2-7u<#Qv;?(FtU~a>XJg%GFoGh(>>I58Jac5PgXFQL(Pp08i z|3}tHXy@5bJD>skxHv^YA4mLUS&uA>IMz?gFBgKi*-0vYvDALWvqZ0If9iUID_CGR zyqh$pn5w)Qn_;a49S%?5><`(f?LeHtkbc4Jbk52lBq44Ns-uE*I;YQdv;9&;K7`XU zFy-R-lI3W%kx9V-&IanuXFyIvv>|=C1iwouW}-M(M&88xxl_`u%S+_b`>Q_k>_XON zF )x3b98=sA1k3UQZLPO}Q7g^$JAKfpeWae}+#>6w(u@CBDI zs}gu+1X65@j?k-q_+y*#lCtQGdZQXIRn?>&T%@dh=r#JSOIR#<^o*TKKUX6LuZBMq z@$}hpFm`lATSOE~A?u){EwyC*sz5xDdP@J`MYfS*57z`T92j)@O>3H?C4NxEpxWdz z@&b$(C_3R;8y{rE0u3fyHg?0ex&LuP8{$_T#H+7Z<1Z&Y3RMxflzYGGLTvj$1HV F4S9KC`hx0BpfHVHQ$Sp$xQE0ysPl^;(W^?S zG-`p1v~r w zUNiK9f4V$U_QiwA^mf9SNh{*;>fc!&Y`5S07sMsg4s3D$+@N&wW)uZ{E%t5;fB9`W zhgEK>!i!U{%?~vBYF&D-e(y#tKds0$k5VavPFele|0pv4YoPS6YSd@vUu`=B-X|^w z%*6!zxly80`Sv9+S2ic&HYVvNGtCNUMF|#om{M6f2HQo>q69V=Pm)!Si#*IL|Jb3$ zJ923wRI1yQRO<#L*x8b|F|7Z$&ilpt-#ez_F}+jnt||inZN-$$U+okEEbYggMsso* z=e=i>+HyDLW*yjbnDf=6lA$tpZMSq3xn$L$Z)@CoQ*hpsg|a8P&tBRNtpD?rVY*@R zoP`Ufsw63L($~$UXV)atHv=(i=(GQ*7%f)QzSy^h*3pP%=j`9RthH}`l_rUO+*?u> zN8&>D>|#JclUC@@PRl>?iz?5SugE!I9~v7yX>ALxkbfrbWXb{sPYC+LFEZ%W#$n9Q zBj+|{KGE=QeMx-J5yCswL>i}e_PWseT7MUn5bsHkmhuumB3xwJ Um?=2ZCu#qc(PvzRjkNgR=MtC9epeR|D5ry~9GNVf~7nqa9i;t1{a#<~yY zZ+Dv&T^3}X)TM3ewoY2wSvm)MfDv~bDe6YQWZld2TT{s`EV^#Ej-r^YqfM*r#&U{` z8{Y(xX=FoGgY-$(e^zo?dZ`7n);2POySbckk6X*+yG|Lj-YD+Iv9Fp>x90gtlB0vk zIK5WsWS2h+Ki!{t3nJON*1YN5j=mWd-}Zxj&$LR2E8nc;Bj8@V5h4=B?-g`Q6T$w) zN(tNYQLd;H<3<66`}})04x96QljR?Vi}X#PDKr&KZ1Qgoc5+&{{Pesid$n|6kZ5uU zdjsQ4K@&$|6s3Ce&XEcKVxK_4*lI8Uow-QvWcYEMtLNZ*{kW>V7Hybw2k}10;L85f z1_oyH_D1ex!bB?MTr@RQBXfn@ji+*Hkb{8O*MY%N`uDQmgV}$ya47_82d@^N^d)>6 z2q9Sf f>qu{i^NL!Ee54?364>Je<+zmTQ6w zc#5gyPsMXIigExZE*VpDW-DxRH*!%f&O}#S0==e_{SVryV2gxZwAabUMAhZU;EnpI zBbqT3<@X1D0sRPW65uSULomJOL)7x}x~Bt7Mdxnv9htrlkwbX+7^lfz{_41c=P3L+ z+d7R;54J!VLT$efCp|CwMD4qg88*Oh&-V8c-~FRuW))RSx8Bf=Y7WUpLhm^_CdAAm ztzr<|`Ip9`b0 mz3KX@fB7;J#NYN=DuAcfvI6`3a%pw-PV zt32O2fpMe^hLQ0gIghI+?)xc%*ixH}|JWPKhE$<8%Ie4!G$q;*i_a*T173u6CMQ|C z_JwPLR~ReXk>jzjJduy?kY}2iO*X_nUM|m=Gt6Wys;KH|y|IxGWJserQHy8Fw~@Pd zT*ph@CQP201fW}?vBq2DQ%6h*+#1vtLQCY2qVxkrp4)Du+J_L&0@_y+zC8fOrIbrK z_jDmSSD*Y8LuMlb+jCW0Jp-7@^Y%tN#`9YzOGbUm496t6KCw=@z{;JFX5{hDEvk#x z@3AWM$348|o060~wvMRoJe%7a9Oxgm==O$yk=#^{)tJ$yfQ %DIga=t_BM`Aq zo7!`fSI +Ta*Fu7O$ME$iL1Qg}(J00;Ne5Y|(gtTMu;NL+|(Ws$lkY zO_Djli}QT8S5!7Yk8PmBPBbh!8>u}j-Lc5_>%=;FTFBl!S!h<^jl0(6R)ZvbqEWzJ zw%j>BRu;oA&j#RG*D)2n{h##UzsF4fRqOdbf+X6*!rMw}+fyO$;m2b _K% z6qBxVU)>sQ%YGOa+$ICF3Z>HqjdsIr&Imyq_-;zpm>Dc~;71 @s^<62%)~vJNe@enM|klVvdd| z>Fh+&TYl0j)!WDCz$U=#)i2*d4Een(RL_U;8+?|q@>?D@P#O|>m1CvKp;y>H&!78r z+xMzsFi}&-YNB}g(9r;WBCt1|^}CH~;=K8K0LR^67bCS(p640Gi%{8H@}~|62xQwn z2V=i~Qn1L5hWH=%@%w?TEpGS1C6?Ec9=5l3q7gam-apoq4v^j=RCgfym_TU{m*u$E zhvL>$dIoAe6hQq1JR(|>;G!ncYl@a0Duto>4>t*&JTGm%HS9_3c9`Cl_{?(js}Vx6 zwi4`3P<*3P`Pq;o#;7)7zMnd(DIlS)DR{Je?{_nbfSkIRH98*Us_ ;D~rq&~3U?JJ+0Ot71( #H+ z6NYpIeLY76G9AsyrdO{l?m7y734*0fEws=1i_pJUu6^f%E_jJfp!Z;XZ?az(`Wpb& zsl2H`8=*qS>Yyz9(mSY!ncKvkNh+QOR4&;tOUy}aJs|2nk29pC7DKx}kyP1Vy=l?y zc@;bsJii|$S&%7e4zf}3vPML-2(N-jM#k*a2SkmWd4J-8bwvIt(ttkswW7l39m;Ks z&RVH!|EbTlSnniS%Y@CLSW&9_&O0SqvC`5`L_5E+QR4&V!hiSNWwnx|4_bA4FwQT4 zxcb4s@X4l;iD(-2y;MFH1n)*}v?eXsP32;z_rg~6&N(|4Jy0 m-m88|-%b)j>Mze`CKc4OVUMVvG5-A>= z#x9?zL{!+e3ATo5$lvvEr8s`#`AGPUV@|%%W3+SizJ*n#S;AZ>d3;;Jg_lH{#UhO{ z_Jyw%C|riWU*pofY1`{8Q0;_RK67_XnXl)H+p0#I18gxGtaT6^5$JYdlOH#e=^VC- zpfYK_!(9B5N8UTkwMbLZ{W7G&9(xa&t#1fYC5}oLI0tfefghiiu||1CF`0wb7Joms z2gcMX-2F3^6iU3UF<2tEhCFv6@TKSiP`QXJjXSM1(m7lGsm9Q%F3BKl!=j`e%|bl; zF&*AOyOW4cN%Hs)DQd=27rrm+KFH5rxiqy$A!= &mOftE7IHjKiazg zJ(FYGVI9FRdGEi6b goL4{p0ojF2@PWhz!p9D8EcscT?7 zRhPGCZ)$0RvLduZ2f ~27(s5f$EiZVtt 6?B+{ANh0U0Tf9Hyq;w5wy W$@I^#TJ8;HE078Apy9*{-J|fHgRO2K`2kDLi-~22K9ESFz86O%k_Rvw) c}-w^ip2Y)u9lU@ u1EFBO~cOH( g?aR3{NQPT?p%v6rkxrQsL?>Ht}c$Q }q>jayQ1z NqTK&ESi;2(ONI}v1{f*tV2s1Is;d41;MY-*41?kc`^3^?D_iS?|VebK6HFgiXd zNsb|sJNf-8&>r0{Z#D`uKn{9qyw#s9laf8YAe@2r+PVP>dgHq4oAGsgEl-w}Ov!d} zo_Q(J0ky|?T`@(3#Hx;`?cE`O)lx57^;A(6NbSDeo#wGh`f{uP+{db9hj0h0Ot~L~ zg+H*c==YHmCG4Cv5^{o~2Ah{D%U~i~zzg^ZeO&I&)EN${clyx};-r*A(cQN|bg>sR zyL)$`GTRw4AQQlF91`wDAAYpD^i0mnGEtHVvwF?abP^9poD#n81>P{N7Y@DBhES-Y z-VLDTJo05$4V9b><&32^H&;bI`O&Y(xcz2++69p1$4CV7eX0=Qu9}L9R~SjFt&-k> zL|_aF2V_?Ew-y!-)%1-z0kJRo6gg2f nrD^Ymu5td5GS8%ya81!yWHjDpHm(C^Wrnq=}lt1qz z*kGcCip=2Fox7-Ukkf*u?#sYc2kR6xUCHPuO(@h9uCyqzr#)GO^iqmxm0DH~@p|RM z;I8^p9mC54OB)Sm&I(G+S+*=3l#YF(yu5Va z&72cpFVB9eT&2^_dibHo-E%`lNfLs^wi!K3=lWYc{3bUY^Ui^)S>>Td`*dLpQlza0<5TZIlN1ZDFyl!4`W7<8^Y6RMU#8%tl_roKxM;&Wk24b3-Dz8j=$2>Ud$}Dg4>;h#hrv) zgo#KUY-%q*LdK|~qAqr>9ZJO<*zPS6{11%Asf<>50Ko=U{edy#syWl>y2?;ug}dy$ z^CQ)y{Qr$`{@peBK9gzuF9eUp@Zvq$qYec5^jFNz^(k)icyh=kO@K Z2{1AY@ z#YN~K#@B=nVH95_`U*!x8;B{nNT@406U`h!XtI2~oNxK(D*V=3ibQ|w8qo9X1=CL7 z5m)x653uAELr5Q=w2_!ixPzn*q0>nt9G2fxGn*t(-?tQIa}!onqpEmc26Kj$AEx6u zYw%-Wqn2-}lFP*VoP(9=&?Al8_+a^=f!wluV*`7kCA*13^QLb I8)>tcHf`fv1kG)@SUg;3#3|p61F~9H7h(xey ze6ULt!Dhv4Z7s8G)J{UMiz@CPw2Al*DV@-b#96G&whVKs)-$|_{pPnu`H2V*aweF= zR_i@nrmQk3&S=>Az;ZlQbDZd_q(7+==kuIa(cDHK +`UHg_0<*9ak8T}FmXp?zyrPfR zHN _xdQ)pRt>;48ob8P{&x1_J+K8g$x9`tW*-%!3uqYU(OF6H7UgV;9qngSW^)G zZecl#< X{_8nVO7%W6-P6+uYDp?2qKYn=;;Izc y z=yWM}_6<>%?=WtsVbzmV5@<)t$GBRnvLD9KOvXM`mmRs-8Bqchy;|rzXF47G4OQv_ z27PxAllr1$GMM{-sy0&3BtDpF&ht8n>Q!)9*lTab_0d&1%Z8}X_;twER({pn-@v%* zg)WOC?-Tk2$A4_)I%;$dJH*C7tB+5ln$uqlaF>N{M0w!DzC6%Zkn*CaT0J@e{8)9s zkh7p(+Lz>+<_e-Lra2g`-4(fYo+%kR&Uz`O1aTGu`17RlYE~#R(-I*{4W#)$HC^B5 z*10vs3?2R$r;kKmZY=VLT7>) ~sF4<-KjBfz?wP_@U1&!H9_DAH z%Gka2!>L)+!|u Y2N$No_}5z8d*i;M8<~XD z6JZCUWC)y)BIz wofs&^P)ljp&}&Jq?Qr;~Zs$OJH?EWZ9}KNLp5rv~ z{2j2w8U;{YlkY|&YD}z)mPz;i=0MNQQa-Ug(wU40eWo=u_x^Vj>4zNtPW_^20+n+rCVCoq^< zf#GI%ZL|>}-#UfM97(gzGm? ^TajCY99G+q z$$~>IP>c>l8^Pl(F9Ij-uk$YEB{n58k@V|*xHm_PqLpIj@}f-&g90jc&Cih0%OY3a zrBM%Yip~7Q5dF#|iih9RcqaSn;Y4w{0d9r>OL)u_r39DX`|T1f=Xn-zjG1he;j_y1 zg-;0HijJ~bTg|s(a5{Qmf?EDem)RMas}Vx1ceEDX_&T=60KaXQcItxO1(_{mLmw7! za7El`MvM}h*|eTV3Dwp0%(L4T8w)?4D4x=Ve?#pc=rT66B+U_x3p76RNW--vJ9Ith z3VL@CCinR6&7-p+iO$KS7+gHQ@`bs*6#FQP=H=z_ew@Sna`tu4I~$>X-F;=2oPv-- z@CSHJto%T+1Q&Fzda(1JIpNMmd#r#hxc_T%-+nsT`ED&+T#mjTpT%#tP(KNGi2O3Y zj+^;d$AY_4eOWgyp)Ek&1~GH0eL? %3!1Y%P!Vg;a1<09$+V+co_N2l=3tse9O=-b`g|9AUjRK~#HxkZJuI$f7ap zDbv2AlaS;7$_jqQedu)ZMY+~*iU$E0(y{L=GEkW)s4d>#EBsIo3@%Z=1nZGJJfp)^ z*{wVFp61@W 379B$c5v-I;hf-0lgYUaqdM)7 zx=tn{0+mJbXa=`)(YVEGu2G{6cz>N!D2vDGJE>$*C`(5@8xK2L#)4z#23nIiUcGE- zs{iKP@!RmYtX6Fi78qTk#cQEz4`Pk3-?A${+^VlLt^HN2dMX@(;geoQ?#s-~dl(iZ zlr9REK}_B=H|bLFm_Ze^UXXiU@7S&qJvui$FbE=LN@-X;%u|%SKnqtND?gV2loz(g z9-NjMNpG=CUZE+icQ?4DmZ>M1e2Ov#d1czVeICI1GIQ6UXudxf H2@Qu3Pr0^Iw_z=-VnY_<`C)#8cpAhobJp8XYVe4NiA9}0=;~%B} z`TOVpT8g+ke{cTQF&^mzz`VW3e`AYrwBP&1>%8Lt%d9Q2>qi+iRcpoLCTgsWdLQ2h zR~9I7N-E*OqR2zxd1wMMl>_zx(6WX+LKpV^oMht IVIHo3yxWnxP!X5i zhQo{JuPB-w72A{xVLiK3Y|b_LVRCYyVkJeC$l7g}N~UM31TneJKKw-LQj3xR#c3m| zJy4p*m4S&8(CtfPZDcM0rSrD)=c=GUzN5)vPsI2R^myQvNeXd?c@znE*kVY9izpm+ zwsirTN0Evo5;usO8FH(2ODiQs8nf_t?pO{U_HfX&Y;}^=<^0CYjK*_gtsdTC@9)>X zaX5zI28^m6I`fN|u 2xcTLted@9iF^~xS??ZW^IWV;IEwL(H+-I- zxMXgO{4KZ93itye;pUg_oLy$y`aEIigL^p1osF4vq{7`KcfG)ZRjJ#O!JHd&LquXs zt3~36qwAD$&9Az$^%a{Dmi~tiCCOvG2t_A!NtllMyK@_I#4Sn{Z65oWXli_tvo*yv zEKy{NR=-Y8U^-0@H5a@f>XNErj0n~rp#r)>q8OGPk`IlPE+Affc_x`~NT4t>xMcm& zr7s=Fw$bp*tjQbpeVZTn5w*vAHZ-7W(3MeL=~>@~PXSAbDJdk__6wSVTEZ0lHM%3v zf7FDYo-ozq!tzW(r-Cx!?Xom5l;^v{I`re%w}o9t^o#a%HE{B(XQoW;sEJ959p>G4 z|A2kz;4&C#s8<2M>pGtipY5|9qn3W~Htez6E`J^ *>eT8JS;yf_O_Gij8nf6HTQ^r&YtY z7Gz5uaxH>2Hnwb{eyanQqI_`ua!ZF2<6zwvX_36Y4&OU^nVZC}sA ?>}m-ugsE_m4VUkSK=Xfp r*lcn 65zH>9BaCpH7$Z)a^T0pd3j`NXNqNDDjDFLjmzBOTFIvTGX?L5K_OcEJh=r zIaK68S@2Dy6A9@;#|i8wOTOIs11FjC7D*G~$9C>9N;_-KWuzIT20>@9Fy6c&L6>d! zd~m4&hJ=?|>)a@z={V@&5P>g!`b{ M|d(6VU0r zl_F1CXh@*AW6BDF&T}O`#9Jbl*YnI+m0NEdPoyV{+0b8w8i?On`H(7P3^Aw#BZ!E> zT3%T7$bep|jjK<&o(E%6 E?u5xi#U8S^@J< z&1+Y&4RlR-N( XAyevc#I>dcm{*upo8U33E z&NJqEDOj3P|LiF18@PgeQh?insUmuJYJ4~`>u^4&NSe&wg)9#0ETpM+30)4nCch9V zP8VSWCwu6@8&lj;R&)nzK|Y_azns?Xdagp9)RbT4UYi!T!)Ve@tF7LE*&nAwk_I)l z2n4Y9&u#|b8X6=dm}XAMuzFj`a|I`v0iW(w=viNqiEp*#g%xKJxog_XWtC0|Q;9T3 z>=1}N5Y|dlrXbNM56@y~HU<*SKG;Zt5-+*Dy6PFwk7qJSS~hvSfupspg(xX@H(+5Z z#A4y7Szht_eaE=Axh4Ba@0-e*AT-jss(w2?k0#;QEg#H?{HbrJ%fXi?CV}CR ^+H`6bn zMzFi45rU03^rmL?#6tEX7?T% ?fapD|@_n)+ql2i3-yC(mYTb2s_`$<*=L=(*nISIV-mbo jir*R&X!4knZWYh`JtF b>4ERnldjo-?J}Dg^*1i-X?%m-6l+5}(*i#2-P9 AoZxHJ1N-QGN-nU%9Zmjz>v==wA>vc1YpFLe fXe5HLj`>{P3Yrk!QM;R%3QE^m*c0olDpD}%)b->ichDSZWQuGrlPx6 zU aZ^ruBC!0#?&ryeivK{YjQQdHlHegr|{?2 z`>Rr-Wnx~#BFZ96PJCO6u5XLFM0?!e2W`$)_l(sQlfo6N0g-uBNwkk{NKebv+_EzO z#m5;>1gw2L!cnZ|FpBg6z0e63vfp`;{fU6|njBWmoh;Q9r}DGAt!&aAs2jFat}Kh| zwMn8T?aL!_KOj3@Z5AIXqnkyLX1`Jo;YO7C3 s@2;?zsjoK zb<$v)a}SW+%!wdID2J9j4YYG|670Hk)rd^|c1*ve(s!U0-0@qg;D-b*BieXwB|!9% zwRcvJ&xS%sc`d&~g`~vCjxi_|8ahy7rpYl*pQZ4;zk2k__f5x*Lr7KU#JMg*2}=ka z|NVL1)a+@`z6~ZHE7~uInab^Hc>i;IhrH be~wTO{|n{CKSif5FLC8D zp#50dg{Lc?S7K3gLB=%r!dV^zSiWO-8~c{OO58;mR4F@glk3byl&2%GnMvMo$rX}N z*FxypIBC=QSE4g~oAwQIRqef5@ielft51tvtnwJ!egK8@#>9F~b2h{3tFtm`Vke(v zhOKkFS3WKtMUAIxi51*g+tO38TpnuQk8mmg7iKN)by_37PaN!9ZXIjUIIJ)rv-i&C zn$z=jy7EbaS1Kwn)pnKh&a#)n3RF3+42ltA6kuRe3bAQr=>AKY0dsRPOMijZXo+v1 zERLJK9i^?a=qG#T`XDjwR`oq$s5efVvLyv`3!8mruElY!V)JUfX!}>r+wlbck=}M! z8djCP<(G*2pmicyqu;#qfzTA@Sij&BdQB}Tn{{$Rio zVt5%2mVsl961J=tLxRhfJj6QB7^xw@H)8IrH&nWIT|Z=jxcX3vaNccNn{-S=vY%eO zT9ULsy_w-9$PGm4_i5E}>BX4*D&Zo{nwD{P#l$)zk(^13>`;}E-xoLGrAql5i4+sw zmL3M!h@q*PJR27u_p8_MBS;(4e^}B+-dr3QDDgd~FA*VeEv&acyuc+veby~`tlO>v z-aXx^+e9~gOqbd5ffj1^%@!JZhTL`pp8Cx#Zcc!lT&qiE52pgbmy|4v7GJVry~ y(u#rbyMvwL*AXrl!* zliWn@)}DR}JN`Cr#m{ebLKb;pf^;V+&f0fn$hW>QZTXyn3gf|?ZD~UbZ*ixiW!OUn z1TJD2l0U21 BsJ$H!K99yUbUqbNuzgDH&_JTzf|^zUOGiDC%Ch4 zT%)~Q&`a+BR&D>IwEtVr_;>e%DzrQM|L05nz4!J1dHBN@MP_xMV!583C2DMVlwbZ- zH2ff7YaA2jIVk(C90z}2##<9VzyvfH*=YZA=gaBKuYitfqBryg*}oQKY>QD{EmsNxtq;y@3E2f{hRVBR vs`YOJx~zAYL$$+Ce_jP zLt%{#!w3322{%I`^{+^mFBBpn6?gB?(XKZ+OrHw&P1lq6mI;w{YfZYQf?uPumth$7 z*BSKlQsj` N0OKVmtXRu>aqHY2>ZvZ?niuV zDVu9*n$Wh)Fb@uva9_ALmV8!NBkhqzd57nZ)!HDp@v}Vx_Yn6*D9z5-+d~nthoT9^ zP81~ek@SV5eej;cD=UI+^jN})cX%fY(a-K|cb1;?Rue$AeT5+w!Mg(R$4dyVr;QZ+ zsG==nFR_N<>A3NGik4;jynRJ8#ySd>uO<~dE7r_Hzcf^0d%j@0$T3$ySr9!vxY(YK zeResum%~3B?P@<$tDVqGoa@~aHd;34;&)05vMMt-Px{e dyT?t )<&O-;@j2T^U=QURZpzVmQ{f$x9m~^~Nr0i;sMAqq-s~YP0ux zDJRt( egw!AyVi%B$Bw7(s#Jep&mKX`@b$6`4S>8VLrSAe2tO5`Em32+yBDoOad zeh_Q9!blL_`TIR`pD_=l4%zJ+xXR!yp{^?gmZR1wtgWzNy)RDH2_YJvz47*xU9=Sy z^+_iQ(C$m<13Cyp{yhQ49G>ZiQqH`5^m>!#$o%B5qTwFN_~ObhzL@Axt#;flD{1%} z_Zh50;SAX7p3`4Tr5f(xU6Bm~)cPbP`DAkRX$aiAu{}?2 SQxDm_Q}ImycI6S^$+Fk*grmc1(WXh+>e--vDyMR&Suh|Pd? z9(wek8vj)6p WyF@T~+!8CQp= zupUL0U$gT(U58`3y3(BEAJ_0i`ncDgi^NnPRtuMP0|AXf*>7s#C{-JetgWYFu^5nL z8dl^>pBZ&a4~|4?X4!p57c@-^-;Yr+&E8^+Tj0mmmx56KbM4A{ 9N1uQm{I4|rZ{+>&;pr3FIO~zm`2Pm#zkd*qq55d#o)hV!g?JifLKj3)y*T}b zdaLR-<9q3s$99z8aJX9O;uEGrM5$Br2nR+_OMn~HNOzRg{7QgbRbN88;9Mt_+X!%f z4pQQxsD6vn!@|MFo~TlOE>P!oE!RdkaFG%reIaxmy45&eJc!gF;d$Mu{JReN4XlWe z>AvS{w!!AL`EHaP-eZ bZ`WEIHBGEpmIq1e_Xm!-^g~*)CXWi@3#4FD zWq!lF+a_*nz6L%dlgCk}Lf?SqYe|1F0GUVM>v4ZBI0P85Ajn67KqO2z!pHG7e?~&i zTbbLB7^=RGomW|Q- nwYDklx&PUlu|L?SBaAyxR~bMTzfwU0OZcn}`Lg;|Q( zlXti|l>fS wExyU8`f;YDBno4Xu{_PNVV_*EaFm$!10W(09knLBBcFUxjqNVnS@B^}D z75CCpT#O<=y5{Ih!skAM;OQk;_B|`2{tw2Gko%3zJ4nzQL6Ph~81e3L8$(+6uN8&l z5Hdlzqrq8CtoEdr0%MyhX(5)YF{u_M+-(}*#R^R!UwH)go#6iI=a23P;XzDQg4d7) zF3rPIufzm|g27bPE)O=>+GUZO5kDPcRzv79M$AOnCu@5n(qZ|1TEW`x7e{ou#MSJN zY 9VYDI4z^O(6yKd-`oC>U4aGQrr>>F|ts`LF+ zQe9ufI=^o%*b!%{2yc*D0(RfCPrDW=Dk#GhD?$2_m6GE&48tXpl zzqeb6H__;Ur``nP7JWMia*2Ewe0GG4zF$Htkh6c~MyCfpI_NpC{2lQT(Uq_sWX}d$ z-fEMq)jbV-D_e_mo@Y?ZV)A8{0F?yVMe?n(ytUSBn3kiv 3CsiS&Rjj5T-I48d5j~| zuSZA@dGGs9a^g*OJZJ}9y={FEH|nP$Bfd3H-wDO{3>a28!S$px*lV`wBJa@%r}NDt znIGuck>C0ILJ=o4N+EQ$;U$e)FnYMiP*icO7xTMGqa-$QN+W3>fE9gyj!v6_3b!4~ zcm1G9o2^6?pv+o@C@%j!_4!FcusD;n3}z0y4Pc9@!g?QV?6Ag =ETYf={E(BcA?(1d;EG6t~3NAWypG$b{2z*fa=;jNL5xAHj2uUj2Oy8LL;J z0Bz5>wnv>a5r72q;sg45x+f;{=pF-3b%tYp4!|NK0@yjQ rxLj?92jfQTGxO;B?>_GPjg;Z$~qt8?c 62m=z-EuIW46y1N;9Z1p6XnD5lF9Giy26aJc9PY*S`G0 zumODmZYd;VR;8bYFS8?d(Uoj8N(|c?2+tV~I-*DAcp#HXt)LB^FpTNqBbjB`uw 3; zIqi2^zUPH1SX|r|cH1Bmdo~AZ998!6^ lyswoB_xQ$p;k66Qtm$ha>UOR;|OdP % zySRThV)PdD7K7lyrXfCo0m=;NWxnE$&og$}iU!109SBDE@4WT3ZX?^i0vG$r2^<(w zFxAFcU{*H>IE2@S)*@ZXddU)NINa{9pZ~$A)H1+aDI?Gl84(-(loue1r)}~h&A{f8 z_=r3&y?16@D~XkNI3$N3c3v9-^qd*IwOF*y7(gjb*t? z>dg1xSjue`p;!IdLHczP=Y(_D4q8J2Y%S3;{8HFQm(1<_Q*3{GRwL>DM%V|>@WXJ3 zT1s5fH#Ch|at #yAMcoK(?%=ZuWr =x;xq5%Gq%cn+ZbE{~ro zuNg$RYYEyYB)%+L!{!CzAT1QfDQWDonMr7nKZ^L)JJY+HopWjC6&q6F)*R*N4tVvO zuuTO;_Kup9pdWl57;coW^F@;vArB0qAMz>LhL6{8i9~eBvVaA$=UsU(zqQNU=3}0h z@m4EYRm90@XRJE_JR$989Zzfh>~fNYJ5}(TwfIN+alPx+3pKO?FjZ*q@85_8pcm7( z2H>q5I%^0ky2 xe`rM5~-C1nv_m(dFGqygtOl68? z;$%YPNQfUNY-3Hc*iDm07k-GZYmf!};VQeJeY44Kut|EueVs5iCZEU6vqaF0iEjh% zkkVYse% Sxt7W;9CnUKEvBrL{n2mH%W+PB^q0NqKozHNFoK)&-KNl#F z4L{qK0|eS3UbIcarC$0`O?;5fAn@w=@{~D6-MZFK)9T3BwMH 3ifB)?2;yMzqNd9y?BT;%dJGuyX(9OpQln=$aff*W7zzMH zw0n2V9n{-iiJ8Vrk$cDv4u1NAfk~gLCB@_>Fm4sY6h7SZ9YqXJ8wmvq Ly;`*S*j!nowcLLWL}g1s#~G`UFgZ(|nw$#f2VpFio(mLr!hKm(b>F*F|iM4QQM z- Nrna8z?<;tr?qGR^yH!)(Gr1-AD(6HF7AJDfdwHtt!tK~bn&?GqSNPM7 z7M8Hnt)$djYC;9JTFZ4TT4$v!Uwz;M6f3bg+;=zG(H{;bgT{06qOS@^98k@aoe7Fr z2UaNu*yfJYBG5vx1#8~Y+}%#zuy5b^UWtXi7C4C9`B{qMr5ZZzZEsZ5>pfQvYG(U` z@wK*%mo%d9M>Rld6f?W 47!O-Y$IDK^SHd4W2UD15UcwYC~BihS>LsYHj>id`XC%?5SO|&(X z(z)KDu&un-v8|QKJrnT>kJ`Pw^?$frGMkK|35%_p=@KXYTk8mS`&aK&x08gfDGqB3 z>|VwxGW8Hx>o5JlDiolFwg0A3RdrWZQ*zl-4qaxM7G*@XFUXCVq$tqF_n6tXbo=z* zr@D+_iM{qMeCN7hB~%%!@fM^hGr58Tes@m@A8HC(y6Cz?h?;eEj&mJ5KmBkl%+QMA zV^L5V3JVeh$5aZYWWE1S;p*=p|2aC2Q=(hhf8+W8R05u%>s`1M2!-T(vAJ6K-u&Y@ z-xpkE_k+wyZ ZXG%XI{N_NF)8#It3CR3&pg?$ zaj;S$$k1%gxy;V2htx2Nd t54;$Nb5J3)mMTy&1%z zKOi{1lKE)8%*vX4 {~$~D)wo*wQ87|jH8 zC-#4d?n>*s!zjxbcysKqZ3Fb{J@R{D1BJk^l;p@bL0t1 oR4|P9G*s-O4O{&~fill1lUoFAJC<8*xl_OxT+G%eZT->w3A#lz@E~ zX^+us8|{WB#7HEhx|AToChfxuTC}5EkrpjAE)pyC_Ri+O q?bzYhPg$~uZqjS-`@~#EwQRYV@U0p5RpWJ(+b){{lRPUAN3s_5bXTg+ zhkRdFdW8#riDfjve2jk+JvA1Z^p;VfH?Kd|@`me3W^%h(Ecv@j`7cA3G1~IpGO{oI z{m#!so@Lb0o0A`&LL$!ekp>5!X1L3Lu)or2PA-s{m8;y0+m|_YIMEt6`(9?F9IKmU zIq5!8unWWKO8V-mYd3p(n4x)dNOI?50N}LOK);)*(09l#^Lu(UK2RA~Ml9Z*TH}oO zc-Ax_zJ_b~;iK>?&hPV4w-u{(Df-=>2dm6T-FENjntN*9pvp*rh(jN~%`Z 8GIy)i8+HYL!OnZ)ic374!Al?Hm~&4KqrT5#-Rn0#B3;7>r9a< zIL7(VN)=kU1Us;x)l3{+SfGqvCcu-77*l`w;2I0LpFqC3Ic%YR3XB%zoZOnqg6Brj z78ZwH`aiqg^1vuIA>Vl7Ng>zeGv`jkgjHN?o^oia2*>UIWf`KXVrn6I=GPsE&)+(X zN#^16$e=o^xkO0sLM+gLzG+7Ig&l7mdf#>6ny-qwO1D&fe%0|H-TJz*n<>iB!`yUx zeA1%ld1ni@8wp`K?Q3zScfv(pg`8q1SsDpL_0#$xBZDbi_m8T+c|KeE*p=JToU)c& z$9knDmXhLCt)MRVdZ)ih(J<0GqZVmZLP+mgo=tQAcprCH(IV;gBB5WcUid@LT2s|M zZiIdv!Y|0&^y|>2fZ1SH=^M+wzMhXBW!bFapd;7`T*U1Kd+@xeV8J(8g+45~t61te z6;$sfbt8+N_N}g@Q$j+7A&J9AEz+cn1ox&_lMqlm{1c*vRBPj7%6Cp!AE8GAiwux_ zUGCm&x$b+*G}YnjPemR_;wGY@u@Wax`SWtuy1m*d{1;sdb>}n&uVyJA3E++V(KNNe zVqv0#^(ZBwx(H7_gDCmwRuj`CoGd2?4b^8aCT?!j23wr7D3&)FU3a}D)yf?))eJz+ zaTQBZAFof=PdatW@U89E(q9rKDRHtW!6U0TlXqJVEr=;@ZnRp0+6$Rebi-9!>Y=Vk z0eJsF>kUX>@8=K0-;poEpw#cYPA5ijIDKOFz6gyUdwj|)C~87Ge^|V)`qy9h%jSBI z9-Vx^@Sy7dyIA}+e#62L!@__cEX1&PtpE);?v|pHpZpa4(Ox6=&SrQJc$^{=7nuUB zirbCsn)-}+X9Pq`46v>}6w?LE@s1tSN!