From 1b78ebefdd1dc8fdb830063c991cd525976b8726 Mon Sep 17 00:00:00 2001 From: zhousha <736730048@qq.com> Date: Fri, 22 Aug 2025 18:00:46 +0800 Subject: [PATCH] update code --- .DS_Store | Bin 6148 -> 6148 bytes Dockerfile | 49 -- helm-chart/.DS_Store | Bin 6148 -> 0 bytes helm-chart/README.md | 77 -- helm-chart/asr-tco/.helmignore | 23 - helm-chart/asr-tco/Chart.yaml.tmpl | 24 - helm-chart/asr-tco/templates/_helpers.tpl | 62 -- helm-chart/asr-tco/templates/hpa.yaml | 32 - helm-chart/asr-tco/templates/ingress.yaml | 61 -- helm-chart/asr-tco/templates/job.yaml | 63 -- .../asr-tco/templates/priorityclass.yaml | 10 - helm-chart/asr-tco/templates/service.yaml | 22 - .../asr-tco/templates/serviceaccount.yaml | 13 - .../templates/tests/test-connection.yaml | 15 - helm-chart/asr-tco/values.yaml.tmpl | 124 --- helm-chart/sut/.DS_Store | Bin 6148 -> 0 bytes helm-chart/sut/.helmignore | 23 - helm-chart/sut/Chart.yaml | 24 - helm-chart/sut/templates/_helpers.tpl | 62 -- helm-chart/sut/templates/deployment.yaml | 94 --- helm-chart/sut/templates/hpa.yaml | 32 - helm-chart/sut/templates/ingress.yaml | 61 -- helm-chart/sut/templates/service.yaml | 18 - helm-chart/sut/templates/serviceaccount.yaml | 13 - .../sut/templates/tests/test-connection.yaml | 15 - helm-chart/sut/values.yaml.tmpl | 144 ---- local_test.py | 64 -- mock_env.sh | 8 - pyproject.toml | 24 - run.py | 114 --- run_async_a10.py | 757 ------------------ schemas/__init__.py | 0 schemas/context.py | 90 --- schemas/dataset.py | 18 - schemas/stream.py | 66 -- scripts/check_dataset_time.py | 53 -- scripts/convert_callback_dataset.py | 108 --- scripts/debug_detailcase.py | 56 -- ssh-keygen | Bin 477488 -> 0 bytes starting_kit/Dockerfile | 11 - starting_kit/main.py | 313 -------- starting_kit/requirements.txt | 3 - tests/test_callback_editops.py | 16 - tests/test_cer.py | 93 --- 44 files changed, 2855 deletions(-) delete mode 100644 Dockerfile delete mode 100644 helm-chart/.DS_Store delete mode 100644 helm-chart/README.md delete mode 100644 helm-chart/asr-tco/.helmignore delete mode 100644 helm-chart/asr-tco/Chart.yaml.tmpl delete mode 100644 helm-chart/asr-tco/templates/_helpers.tpl delete mode 100644 helm-chart/asr-tco/templates/hpa.yaml delete mode 100644 helm-chart/asr-tco/templates/ingress.yaml delete mode 100644 helm-chart/asr-tco/templates/job.yaml delete mode 100644 helm-chart/asr-tco/templates/priorityclass.yaml delete mode 100644 helm-chart/asr-tco/templates/service.yaml delete mode 100644 helm-chart/asr-tco/templates/serviceaccount.yaml delete mode 100644 helm-chart/asr-tco/templates/tests/test-connection.yaml delete mode 100644 helm-chart/asr-tco/values.yaml.tmpl delete mode 100644 helm-chart/sut/.DS_Store delete mode 100644 helm-chart/sut/.helmignore delete mode 100644 helm-chart/sut/Chart.yaml delete mode 100644 helm-chart/sut/templates/_helpers.tpl delete mode 100644 helm-chart/sut/templates/deployment.yaml delete mode 100644 helm-chart/sut/templates/hpa.yaml delete mode 100644 helm-chart/sut/templates/ingress.yaml delete mode 100644 helm-chart/sut/templates/service.yaml delete mode 100644 helm-chart/sut/templates/serviceaccount.yaml delete mode 100644 helm-chart/sut/templates/tests/test-connection.yaml delete mode 100644 helm-chart/sut/values.yaml.tmpl delete mode 100644 local_test.py delete mode 100644 mock_env.sh delete mode 100644 pyproject.toml delete mode 100644 run.py delete mode 100644 run_async_a10.py delete mode 100644 schemas/__init__.py delete mode 100644 schemas/context.py delete mode 100644 schemas/dataset.py delete mode 100644 schemas/stream.py delete mode 100644 scripts/check_dataset_time.py delete mode 100644 scripts/convert_callback_dataset.py delete mode 100644 scripts/debug_detailcase.py delete mode 100755 ssh-keygen delete mode 100644 starting_kit/Dockerfile delete mode 100644 starting_kit/main.py delete mode 100644 starting_kit/requirements.txt delete mode 100644 tests/test_callback_editops.py delete mode 100644 tests/test_cer.py diff --git a/.DS_Store b/.DS_Store index 1962b1dc2035462440804d3a11466aaa582a3511..ddd77908383b334d6cc621c911031bc369e349d8 100644 GIT binary patch delta 77 zcmZoMXfc=|&Zs)EP>L6djH(+yerKM{FQO<2 Sl23pr1*v0b*z72Bm>B?U77qFV delta 173 zcmZoMXfc=|&e%S&P>hv>fq{WzVxfpE6OaJ{%s|Y@z#zcDpv#cVkin41P{dF&u~6L& zB*6s~NM*=j$VHY+DNfEw%FoXM>E>Z5W+;K^VaR02V@PL+XUGP!N??j6YRha)mtvo6 lAi}bln}dggv3+CVcjn3bB8q|_7bpO60uY12W=E03%m4##A`<`r diff --git a/Dockerfile b/Dockerfile deleted file mode 100644 index 81c6be4..0000000 --- a/Dockerfile +++ /dev/null @@ -1,49 +0,0 @@ - -FROM harbor.4pd.io/inf/base-python3.8-ubuntu:1.1.0 -MAINTAINER shiguangchuan@4paradigm.com - -WORKDIR /workspace - -COPY ssh-keygen /bin - -RUN wget -q ftp://ftp.4pd.io/pub/pico/temp/pynini-2.1.6-cp38-cp38-manylinux_2_31_x86_64.whl && pip install pynini-2.1.6-cp38-cp38-manylinux_2_31_x86_64.whl && rm -f pynini-2.1.6-c p38-cp38-manylinux_2_31_x86_64.whl - -ADD ./requirements.txt /workspace -RUN pip install -r ./requirements.txt -i https://nexus.4pd.io/repository/pypi-all/simple --trusted-host nexus.4pd.io --extra-index-url https://mirrors.aliyun.com/pypi/simple/ \ - && pip cache purge \ - && ssh-keygen -f /workspace/ssh-key-ecdsa -t ecdsa -b 521 -q -N "" - -ADD . /workspace - -EXPOSE 80 - -CMD ["python3", "run_callback.py"] - - -########################### -## Dockerfile(更新后) -#FROM harbor.4pd.io/lab-platform/inf/python:3.9 - -#WORKDIR /app - -## 安装依赖 -##RUN pip install torch librosa flask - -##RUN pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/ && \ -## pip cache purge && \ -## pip --default-timeout=1000 install torch librosa flask - -## 删除原来的 COPY pytorch_model.bin /app/ - -#COPY inference.py /app/ -# 只需要复制启动脚本 - -#EXPOSE 80 - -#CMD ["python", "inference.py"] -#################### - - -##############################更新0731################################# - - diff --git a/helm-chart/.DS_Store b/helm-chart/.DS_Store deleted file mode 100644 index 38ac210ca1ec2fb5463fae2e66338ff4f4055831..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeH~Jr2S!425ml0g0s}V-^m;4I%_5-~tF3kvaf-j?VMXLSaS~dY0@jc51bKLsN^0 z?w;4J$RHw1xKTD1CZ@<%N+!jeIzz3P^=QcqFr~nn90#tws%t(Pe z$d{`bJrf^=3Q&Q0C}7`*0yoxV3;L%6!AAhFN7)T)pC!Oz1+XSt5EYn4D;TZnV~Ewg z9V~fWO}1dPi{|j5d1tjL2By(2T9ClBIvA(`6__Z{MLyX1e}I3R|0gX>sQ?xDGX=EY zANM=FRGzILuV?jBR&CwjpkI#g_7i}_j^Z`k4g19wU`@6lDlq;CxC{(b;HL__0E==F Ai2wiq diff --git a/helm-chart/README.md b/helm-chart/README.md deleted file mode 100644 index 90bd7e3..0000000 --- a/helm-chart/README.md +++ /dev/null @@ -1,77 +0,0 @@ -## judgeflow chart 的要求 - -### values.yaml 文件必须包含如下字段,并且模板中必须引用 values.yaml 中的如下字段 - -``` -podLabels -env -volumeMounts -volumes -affinity -``` - -### values.yaml 文件必须在 volumeMounts 中声明如下卷 - -``` -workspace -submit -datafile -``` - -## 被测服务(sut) chart 的要求 - -### values.yaml 文件必须包含如下字段,并且资源模板中必须引用 values.yaml 中的如下字段 - -``` -podLabels -affinity -``` - -针对 podLabels 字段,values.yaml 中配置格式如下: - -``` -podLabels: {} -``` - -下面给出示例 - -podLabels - -values.yaml - -templates/deployment.yaml - -``` -metadata: - labels: - {{- with .Values.podLabels }} - {{- toYaml . | nindent 4 }} - {{- end }} -``` - -affinity - -values.yaml - -``` -affinity: {} -``` - -templates/deployment.yaml - -``` -spec: - template: - spec: - {{- with .Values.affinity }} - affinity: - {{- toYaml . | nindent 8 }} - {{- end }} -``` - -### 如果需要在 sut 中使用共享存储,则 sut chart 的 values.yaml 也必须包含如下字段,且模板中必须引用 values.yaml 中的如下字段 - -``` -volumeMounts -volumes -``` diff --git a/helm-chart/asr-tco/.helmignore b/helm-chart/asr-tco/.helmignore deleted file mode 100644 index 0e8a0eb..0000000 --- a/helm-chart/asr-tco/.helmignore +++ /dev/null @@ -1,23 +0,0 @@ -# Patterns to ignore when building packages. -# This supports shell glob matching, relative path matching, and -# negation (prefixed with !). Only one pattern per line. -.DS_Store -# Common VCS dirs -.git/ -.gitignore -.bzr/ -.bzrignore -.hg/ -.hgignore -.svn/ -# Common backup files -*.swp -*.bak -*.tmp -*.orig -*~ -# Various IDEs -.project -.idea/ -*.tmproj -.vscode/ diff --git a/helm-chart/asr-tco/Chart.yaml.tmpl b/helm-chart/asr-tco/Chart.yaml.tmpl deleted file mode 100644 index 35a3153..0000000 --- a/helm-chart/asr-tco/Chart.yaml.tmpl +++ /dev/null @@ -1,24 +0,0 @@ -apiVersion: v2 -name: ${chartName} -description: Leaderboard judgeflow helm chart for demo - -# A chart can be either an 'application' or a 'library' chart. -# -# Application charts are a collection of templates that can be packaged into versioned archives -# to be deployed. -# -# Library charts provide useful utilities or functions for the chart developer. They're included as -# a dependency of application charts to inject those utilities and functions into the rendering -# pipeline. Library charts do not define any templates and therefore cannot be deployed. -type: application - -# This is the chart version. This version number should be incremented each time you make changes -# to the chart and its templates, including the app version. -# Versions are expected to follow Semantic Versioning (https://semver.org/) -version: ${version} - -# This is the version number of the application being deployed. This version number should be -# incremented each time you make changes to the application. Versions are not expected to -# follow Semantic Versioning. They should reflect the version the application is using. -# It is recommended to use it with quotes. -appVersion: "${appVersion}" diff --git a/helm-chart/asr-tco/templates/_helpers.tpl b/helm-chart/asr-tco/templates/_helpers.tpl deleted file mode 100644 index e373350..0000000 --- a/helm-chart/asr-tco/templates/_helpers.tpl +++ /dev/null @@ -1,62 +0,0 @@ -{{/* -Expand the name of the chart. -*/}} -{{- define "judgeflow.name" -}} -{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }} -{{- end }} - -{{/* -Create a default fully qualified app name. -We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). -If release name contains chart name it will be used as a full name. -*/}} -{{- define "judgeflow.fullname" -}} -{{- if .Values.fullnameOverride }} -{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }} -{{- else }} -{{- $name := default .Chart.Name .Values.nameOverride }} -{{- if contains $name .Release.Name }} -{{- .Release.Name | trunc 63 | trimSuffix "-" }} -{{- else }} -{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }} -{{- end }} -{{- end }} -{{- end }} - -{{/* -Create chart name and version as used by the chart label. -*/}} -{{- define "judgeflow.chart" -}} -{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }} -{{- end }} - -{{/* -Common labels -*/}} -{{- define "judgeflow.labels" -}} -helm.sh/chart: {{ include "judgeflow.chart" . }} -{{ include "judgeflow.selectorLabels" . }} -{{- if .Chart.AppVersion }} -app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} -{{- end }} -app.kubernetes.io/managed-by: {{ .Release.Service }} -{{- end }} - -{{/* -Selector labels -*/}} -{{- define "judgeflow.selectorLabels" -}} -app.kubernetes.io/name: {{ include "judgeflow.name" . }} -app.kubernetes.io/instance: {{ .Release.Name }} -{{- end }} - -{{/* -Create the name of the service account to use -*/}} -{{- define "judgeflow.serviceAccountName" -}} -{{- if .Values.serviceAccount.create }} -{{- default (include "judgeflow.fullname" .) .Values.serviceAccount.name }} -{{- else }} -{{- default "default" .Values.serviceAccount.name }} -{{- end }} -{{- end }} diff --git a/helm-chart/asr-tco/templates/hpa.yaml b/helm-chart/asr-tco/templates/hpa.yaml deleted file mode 100644 index 45ab478..0000000 --- a/helm-chart/asr-tco/templates/hpa.yaml +++ /dev/null @@ -1,32 +0,0 @@ -{{- if .Values.autoscaling.enabled }} -apiVersion: autoscaling/v2 -kind: HorizontalPodAutoscaler -metadata: - name: {{ include "judgeflow.fullname" . }} - labels: - {{- include "judgeflow.labels" . | nindent 4 }} -spec: - scaleTargetRef: - apiVersion: apps/v1 - kind: Deployment - name: {{ include "judgeflow.fullname" . }} - minReplicas: {{ .Values.autoscaling.minReplicas }} - maxReplicas: {{ .Values.autoscaling.maxReplicas }} - metrics: - {{- if .Values.autoscaling.targetCPUUtilizationPercentage }} - - type: Resource - resource: - name: cpu - target: - type: Utilization - averageUtilization: {{ .Values.autoscaling.targetCPUUtilizationPercentage }} - {{- end }} - {{- if .Values.autoscaling.targetMemoryUtilizationPercentage }} - - type: Resource - resource: - name: memory - target: - type: Utilization - averageUtilization: {{ .Values.autoscaling.targetMemoryUtilizationPercentage }} - {{- end }} -{{- end }} diff --git a/helm-chart/asr-tco/templates/ingress.yaml b/helm-chart/asr-tco/templates/ingress.yaml deleted file mode 100644 index 959d442..0000000 --- a/helm-chart/asr-tco/templates/ingress.yaml +++ /dev/null @@ -1,61 +0,0 @@ -{{- if .Values.ingress.enabled -}} -{{- $fullName := include "judgeflow.fullname" . -}} -{{- $svcPort := .Values.service.port -}} -{{- if and .Values.ingress.className (not (semverCompare ">=1.18-0" .Capabilities.KubeVersion.GitVersion)) }} - {{- if not (hasKey .Values.ingress.annotations "kubernetes.io/ingress.class") }} - {{- $_ := set .Values.ingress.annotations "kubernetes.io/ingress.class" .Values.ingress.className}} - {{- end }} -{{- end }} -{{- if semverCompare ">=1.19-0" .Capabilities.KubeVersion.GitVersion -}} -apiVersion: networking.k8s.io/v1 -{{- else if semverCompare ">=1.14-0" .Capabilities.KubeVersion.GitVersion -}} -apiVersion: networking.k8s.io/v1beta1 -{{- else -}} -apiVersion: extensions/v1beta1 -{{- end }} -kind: Ingress -metadata: - name: {{ $fullName }} - labels: - {{- include "judgeflow.labels" . | nindent 4 }} - {{- with .Values.ingress.annotations }} - annotations: - {{- toYaml . | nindent 4 }} - {{- end }} -spec: - {{- if and .Values.ingress.className (semverCompare ">=1.18-0" .Capabilities.KubeVersion.GitVersion) }} - ingressClassName: {{ .Values.ingress.className }} - {{- end }} - {{- if .Values.ingress.tls }} - tls: - {{- range .Values.ingress.tls }} - - hosts: - {{- range .hosts }} - - {{ . | quote }} - {{- end }} - secretName: {{ .secretName }} - {{- end }} - {{- end }} - rules: - {{- range .Values.ingress.hosts }} - - host: {{ .host | quote }} - http: - paths: - {{- range .paths }} - - path: {{ .path }} - {{- if and .pathType (semverCompare ">=1.18-0" $.Capabilities.KubeVersion.GitVersion) }} - pathType: {{ .pathType }} - {{- end }} - backend: - {{- if semverCompare ">=1.19-0" $.Capabilities.KubeVersion.GitVersion }} - service: - name: {{ $fullName }} - port: - number: {{ $svcPort }} - {{- else }} - serviceName: {{ $fullName }} - servicePort: {{ $svcPort }} - {{- end }} - {{- end }} - {{- end }} -{{- end }} diff --git a/helm-chart/asr-tco/templates/job.yaml b/helm-chart/asr-tco/templates/job.yaml deleted file mode 100644 index bc8e51a..0000000 --- a/helm-chart/asr-tco/templates/job.yaml +++ /dev/null @@ -1,63 +0,0 @@ -apiVersion: batch/v1 -kind: Job -metadata: - name: {{ include "judgeflow.fullname" . }} - labels: - {{- include "judgeflow.labels" . | nindent 4 }} - {{- with .Values.podLabels }} - {{- toYaml . | nindent 4 }} - {{- end }} -spec: - template: - metadata: - labels: - {{- include "judgeflow.labels" . | nindent 8 }} - {{- with .Values.podLabels }} - {{- toYaml . | nindent 8 }} - {{- end }} - spec: - {{- with .Values.priorityclassname }} - priorityClassName: "{{ . }}" - {{- end }} - containers: - - name: {{ .Chart.Name }} - securityContext: - {{- toYaml .Values.securityContext | nindent 12 }} - image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}" - imagePullPolicy: {{ .Values.image.pullPolicy }} - {{- with .Values.env }} - env: - {{- toYaml . | nindent 12 }} - {{- end }} - {{- if and (hasKey .Values "service") (hasKey .Values.service "ports") }} - ports: - {{- range .Values.service.ports }} - - name: {{ .name }} - containerPort: {{ .port }} - {{- end }} - {{- end }} - {{- if hasKey .Values "command" }} - command: {{ .Values.command }} - {{- end }} - volumeMounts: - {{- toYaml .Values.volumeMounts | nindent 12 }} - resources: - {{- toYaml .Values.resources | nindent 12 }} - restartPolicy: Never - {{- with .Values.volumes }} - volumes: - {{- toYaml . | nindent 8 }} - {{- end }} - {{- with .Values.affinity }} - affinity: - {{- toYaml . | nindent 8 }} - {{- end }} - {{- with .Values.nodeSelector }} - nodeSelector: - {{- toYaml . | nindent 8 }} - {{- end }} - {{- with .Values.tolerations }} - tolerations: - {{- toYaml . | nindent 8 }} - {{- end }} - backoffLimit: 0 diff --git a/helm-chart/asr-tco/templates/priorityclass.yaml b/helm-chart/asr-tco/templates/priorityclass.yaml deleted file mode 100644 index 7e1a884..0000000 --- a/helm-chart/asr-tco/templates/priorityclass.yaml +++ /dev/null @@ -1,10 +0,0 @@ -{{- if .Values.priorityclassname }} -apiVersion: scheduling.k8s.io/v1 -kind: PriorityClass -metadata: - name: "{{ .Values.priorityclassname }}" -value: {{ .Values.priorityclassvalue }} -globalDefault: false -preemptionPolicy: "Never" -description: "This is a priority class." -{{- end }} diff --git a/helm-chart/asr-tco/templates/service.yaml b/helm-chart/asr-tco/templates/service.yaml deleted file mode 100644 index 034a5d1..0000000 --- a/helm-chart/asr-tco/templates/service.yaml +++ /dev/null @@ -1,22 +0,0 @@ -{{- if and (hasKey .Values "service") (hasKey .Values.service "type") }} -apiVersion: v1 -kind: Service -metadata: - name: {{ include "judgeflow.fullname" . }} - labels: - {{- include "judgeflow.labels" . | nindent 4 }} - {{- with .Values.podLabels }} - {{- toYaml . | nindent 4 }} - {{- end }} -spec: - type: {{ .Values.service.type }} - ports: - {{- range .Values.service.ports }} - - port: {{ .port }} - targetPort: {{ .port }} - protocol: TCP - name: {{ .name }} - {{- end }} - selector: - {{- include "judgeflow.selectorLabels" . | nindent 4 }} -{{- end }} diff --git a/helm-chart/asr-tco/templates/serviceaccount.yaml b/helm-chart/asr-tco/templates/serviceaccount.yaml deleted file mode 100644 index 12df5c8..0000000 --- a/helm-chart/asr-tco/templates/serviceaccount.yaml +++ /dev/null @@ -1,13 +0,0 @@ -{{- if .Values.serviceAccount.create -}} -apiVersion: v1 -kind: ServiceAccount -metadata: - name: {{ include "judgeflow.serviceAccountName" . }} - labels: - {{- include "judgeflow.labels" . | nindent 4 }} - {{- with .Values.serviceAccount.annotations }} - annotations: - {{- toYaml . | nindent 4 }} - {{- end }} -automountServiceAccountToken: {{ .Values.serviceAccount.automount }} -{{- end }} diff --git a/helm-chart/asr-tco/templates/tests/test-connection.yaml b/helm-chart/asr-tco/templates/tests/test-connection.yaml deleted file mode 100644 index c351ca2..0000000 --- a/helm-chart/asr-tco/templates/tests/test-connection.yaml +++ /dev/null @@ -1,15 +0,0 @@ -apiVersion: v1 -kind: Pod -metadata: - name: {{ include "judgeflow.fullname" . }}-test-connection - labels: - {{- include "judgeflow.labels" . | nindent 4 }} - annotations: - "helm.sh/hook": test -spec: - containers: - - name: wget - image: busybox - command: ['wget'] - args: ['{{ include "judgeflow.fullname" . }}:{{ .Values.service.port }}'] - restartPolicy: Never diff --git a/helm-chart/asr-tco/values.yaml.tmpl b/helm-chart/asr-tco/values.yaml.tmpl deleted file mode 100644 index 0c73595..0000000 --- a/helm-chart/asr-tco/values.yaml.tmpl +++ /dev/null @@ -1,124 +0,0 @@ -# Default values for job_demo. -# This is a YAML-formatted file. -# Declare variables to be passed into your templates. - -replicaCount: 1 - -image: - repository: "${imageRepo}" - pullPolicy: IfNotPresent - # Overrides the image tag whose default is the chart appVersion. - tag: "${imageTag}" - -imagePullSecrets: [] -nameOverride: "" -fullnameOverride: "" - -serviceAccount: - # Specifies whether a service account should be created - create: true - # Annotations to add to the service account - annotations: {} - # The name of the service account to use. - # If not set and create is true, a name is generated using the fullname template - name: "" - -podAnnotations: {} - -podLabels: - contest.4pd.io/leaderboard-resource-type: judge_flow - contest.4pd.io/leaderboard-job-id: "0" - contest.4pd.io/leaderboard-submit-id: "0" - -podSecurityContext: {} - # fsGroup: 2000 - -securityContext: {} - # capabilities: - # drop: - # - ALL - # readOnlyRootFilesystem: true - # runAsNonRoot: true - # runAsUser: 1000 - -service: - type: ClusterIP - ports: - - name: http - port: 80 - -ingress: - enabled: false - className: "" - annotations: {} - # kubernetes.io/ingress.class: nginx - # kubernetes.io/tls-acme: "true" - hosts: - - host: chart-example.local - paths: - - path: / - pathType: ImplementationSpecific - tls: [] - # - secretName: chart-example-tls - # hosts: - # - chart-example.local - -resources: - # We usually recommend not to specify default resources and to leave this as a conscious - # choice for the user. This also increases chances charts run on environments with little - # resources, such as Minikube. If you do want to specify resources, uncomment the following - # lines, adjust them as necessary, and remove the curly braces after 'resources:'. - limits: - cpu: 3000m - memory: 16Gi - requests: - cpu: 3000m - memory: 16Gi - -autoscaling: - enabled: false - minReplicas: 1 - maxReplicas: 100 - targetCPUUtilizationPercentage: 80 - # targetMemoryUtilizationPercentage: 80 - -nodeSelector: - juicefs: "on" - contest.4pd.io/cpu: INTEL-8358 - -tolerations: [] - -affinity: {} - -env: - - name: TZ - value: Asia/Shanghai - - name: MY_POD_IP - valueFrom: - fieldRef: - fieldPath: status.podIP - -#command: '["python","run.py"]' - -volumeMounts: - - name: workspace - mountPath: /tmp/workspace - - name: datafile - mountPath: /tmp/datafile - - name: submit - mountPath: /tmp/submit_config - - name: juicefs-pv - mountPath: /tmp/juicefs - - name: customer - mountPath: /tmp/customer - - name: submit-private - mountPath: /tmp/submit_private - -volumes: - - name: juicefs-pv - persistentVolumeClaim: - claimName: juicefs-pvc - - -priorityclassname: '' -priorityclassvalue: '0' diff --git a/helm-chart/sut/.DS_Store b/helm-chart/sut/.DS_Store deleted file mode 100644 index df37fdf29e1194a17157ec8470d0982650e3ca28..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHKIc~#13?v;DHr%*$xnIZ+7J~8ue;|qFPJseA=~ek%ep-eHf(UY&0B(XIK+Z13 z(PF0%MG?{VvwsxXiO3pmC>IM$v*+duTV+OpaJ*xX7x|Erocr^l`gX#&8|S>q`%nIH zcpb;#Hi=m(Kn17(6`%rC;Li$J?}e?mfs9mu3Q&P>1?>A!;D$AE3iMA0f{y^e25C2} zeU<nqNaSC)g@=gcxXTWr!QGt6a@C6Jc6{r9J diff --git a/helm-chart/sut/.helmignore b/helm-chart/sut/.helmignore deleted file mode 100644 index 0e8a0eb..0000000 --- a/helm-chart/sut/.helmignore +++ /dev/null @@ -1,23 +0,0 @@ -# Patterns to ignore when building packages. -# This supports shell glob matching, relative path matching, and -# negation (prefixed with !). Only one pattern per line. -.DS_Store -# Common VCS dirs -.git/ -.gitignore -.bzr/ -.bzrignore -.hg/ -.hgignore -.svn/ -# Common backup files -*.swp -*.bak -*.tmp -*.orig -*~ -# Various IDEs -.project -.idea/ -*.tmproj -.vscode/ diff --git a/helm-chart/sut/Chart.yaml b/helm-chart/sut/Chart.yaml deleted file mode 100644 index 5f95483..0000000 --- a/helm-chart/sut/Chart.yaml +++ /dev/null @@ -1,24 +0,0 @@ -apiVersion: v2 -name: sut -description: A Helm chart for Kubernetes - -# A chart can be either an 'application' or a 'library' chart. -# -# Application charts are a collection of templates that can be packaged into versioned archives -# to be deployed. -# -# Library charts provide useful utilities or functions for the chart developer. They're included as -# a dependency of application charts to inject those utilities and functions into the rendering -# pipeline. Library charts do not define any templates and therefore cannot be deployed. -type: application - -# This is the chart version. This version number should be incremented each time you make changes -# to the chart and its templates, including the app version. -# Versions are expected to follow Semantic Versioning (https://semver.org/) -version: 0.1.0 - -# This is the version number of the application being deployed. This version number should be -# incremented each time you make changes to the application. Versions are not expected to -# follow Semantic Versioning. They should reflect the version the application is using. -# It is recommended to use it with quotes. -appVersion: "0.1.0" diff --git a/helm-chart/sut/templates/_helpers.tpl b/helm-chart/sut/templates/_helpers.tpl deleted file mode 100644 index 501d682..0000000 --- a/helm-chart/sut/templates/_helpers.tpl +++ /dev/null @@ -1,62 +0,0 @@ -{{/* -Expand the name of the chart. -*/}} -{{- define "sut.name" -}} -{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }} -{{- end }} - -{{/* -Create a default fully qualified app name. -We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). -If release name contains chart name it will be used as a full name. -*/}} -{{- define "sut.fullname" -}} -{{- if .Values.fullnameOverride }} -{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }} -{{- else }} -{{- $name := default .Chart.Name .Values.nameOverride }} -{{- if contains $name .Release.Name }} -{{- .Release.Name | trunc 63 | trimSuffix "-" }} -{{- else }} -{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }} -{{- end }} -{{- end }} -{{- end }} - -{{/* -Create chart name and version as used by the chart label. -*/}} -{{- define "sut.chart" -}} -{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }} -{{- end }} - -{{/* -Common labels -*/}} -{{- define "sut.labels" -}} -helm.sh/chart: {{ include "sut.chart" . }} -{{ include "sut.selectorLabels" . }} -{{- if .Chart.AppVersion }} -app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} -{{- end }} -app.kubernetes.io/managed-by: {{ .Release.Service }} -{{- end }} - -{{/* -Selector labels -*/}} -{{- define "sut.selectorLabels" -}} -app.kubernetes.io/name: {{ include "sut.name" . }} -app.kubernetes.io/instance: {{ .Release.Name }} -{{- end }} - -{{/* -Create the name of the service account to use -*/}} -{{- define "sut.serviceAccountName" -}} -{{- if .Values.serviceAccount.create }} -{{- default (include "sut.fullname" .) .Values.serviceAccount.name }} -{{- else }} -{{- default "default" .Values.serviceAccount.name }} -{{- end }} -{{- end }} diff --git a/helm-chart/sut/templates/deployment.yaml b/helm-chart/sut/templates/deployment.yaml deleted file mode 100644 index ecabb4e..0000000 --- a/helm-chart/sut/templates/deployment.yaml +++ /dev/null @@ -1,94 +0,0 @@ -apiVersion: apps/v1 -kind: Deployment -metadata: - name: {{ include "sut.fullname" . }} - labels: - {{- include "sut.labels" . | nindent 4 }} - {{- with .Values.podLabels }} - {{- toYaml . | nindent 4 }} - {{- end }} -spec: - {{- if not .Values.autoscaling.enabled }} - replicas: {{ .Values.replicaCount }} - {{- end }} - selector: - matchLabels: - {{- include "sut.selectorLabels" . | nindent 6 }} - template: - metadata: - {{- with .Values.podAnnotations }} - annotations: - {{- toYaml . | nindent 8 }} - {{- end }} - labels: - {{- include "sut.labels" . | nindent 8 }} - {{- with .Values.podLabels }} - {{- toYaml . | nindent 8 }} - {{- end }} - spec: - {{- with .Values.imagePullSecrets }} - imagePullSecrets: - {{- toYaml . | nindent 8 }} - {{- end }} - serviceAccountName: {{ include "sut.serviceAccountName" . }} - securityContext: - {{- toYaml .Values.podSecurityContext | nindent 8 }} - {{- with .Values.priorityclassname }} - priorityClassName: "{{ . }}" - {{- end }} - containers: - - name: {{ .Chart.Name }} - securityContext: - {{- toYaml .Values.securityContext | nindent 12 }} - image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}" - imagePullPolicy: {{ .Values.image.pullPolicy }} - {{- with .Values.env }} - env: - {{- toYaml . | nindent 12 }} - {{- end }} - ports: - - name: http - containerPort: {{ .Values.service.port }} - protocol: TCP - {{- with .Values.command }} - command: - {{- toYaml . | nindent 12 }} - {{- end }} - resources: - {{- toYaml .Values.resources | nindent 12 }} - {{- with .Values.volumeMounts }} - volumeMounts: - {{- toYaml . | nindent 12 }} - {{- end }} - - {{- with .Values.livenessProbe }} - livenessProbe: - {{- toYaml . | nindent 12 }} - {{- end }} - {{- with .Values.readinessProbe }} - readinessProbe: - {{- toYaml . | nindent 12 }} - {{- end }} - {{- with .Values.startupProbe }} - startupProbe: - {{- toYaml . | nindent 12 }} - {{- end }} - - volumes: - {{- with .Values.volumes }} - {{- toYaml . | nindent 8 }} - {{- end }} - - {{- with .Values.nodeSelector }} - nodeSelector: - {{- toYaml . | nindent 8 }} - {{- end }} - {{- with .Values.affinity }} - affinity: - {{- toYaml . | nindent 8 }} - {{- end }} - tolerations: - - key: "hosttype" - operator: "Equal" - value: "iluvatar" - effect: "NoSchedule" \ No newline at end of file diff --git a/helm-chart/sut/templates/hpa.yaml b/helm-chart/sut/templates/hpa.yaml deleted file mode 100644 index b3b17a0..0000000 --- a/helm-chart/sut/templates/hpa.yaml +++ /dev/null @@ -1,32 +0,0 @@ -{{- if .Values.autoscaling.enabled }} -apiVersion: autoscaling/v2 -kind: HorizontalPodAutoscaler -metadata: - name: {{ include "sut.fullname" . }} - labels: - {{- include "sut.labels" . | nindent 4 }} -spec: - scaleTargetRef: - apiVersion: apps/v1 - kind: Deployment - name: {{ include "sut.fullname" . }} - minReplicas: {{ .Values.autoscaling.minReplicas }} - maxReplicas: {{ .Values.autoscaling.maxReplicas }} - metrics: - {{- if .Values.autoscaling.targetCPUUtilizationPercentage }} - - type: Resource - resource: - name: cpu - target: - type: Utilization - averageUtilization: {{ .Values.autoscaling.targetCPUUtilizationPercentage }} - {{- end }} - {{- if .Values.autoscaling.targetMemoryUtilizationPercentage }} - - type: Resource - resource: - name: memory - target: - type: Utilization - averageUtilization: {{ .Values.autoscaling.targetMemoryUtilizationPercentage }} - {{- end }} -{{- end }} diff --git a/helm-chart/sut/templates/ingress.yaml b/helm-chart/sut/templates/ingress.yaml deleted file mode 100644 index 4ecfe9b..0000000 --- a/helm-chart/sut/templates/ingress.yaml +++ /dev/null @@ -1,61 +0,0 @@ -{{- if .Values.ingress.enabled -}} -{{- $fullName := include "sut.fullname" . -}} -{{- $svcPort := .Values.service.port -}} -{{- if and .Values.ingress.className (not (semverCompare ">=1.18-0" .Capabilities.KubeVersion.GitVersion)) }} - {{- if not (hasKey .Values.ingress.annotations "kubernetes.io/ingress.class") }} - {{- $_ := set .Values.ingress.annotations "kubernetes.io/ingress.class" .Values.ingress.className}} - {{- end }} -{{- end }} -{{- if semverCompare ">=1.19-0" .Capabilities.KubeVersion.GitVersion -}} -apiVersion: networking.k8s.io/v1 -{{- else if semverCompare ">=1.14-0" .Capabilities.KubeVersion.GitVersion -}} -apiVersion: networking.k8s.io/v1beta1 -{{- else -}} -apiVersion: extensions/v1beta1 -{{- end }} -kind: Ingress -metadata: - name: {{ $fullName }} - labels: - {{- include "sut.labels" . | nindent 4 }} - {{- with .Values.ingress.annotations }} - annotations: - {{- toYaml . | nindent 4 }} - {{- end }} -spec: - {{- if and .Values.ingress.className (semverCompare ">=1.18-0" .Capabilities.KubeVersion.GitVersion) }} - ingressClassName: {{ .Values.ingress.className }} - {{- end }} - {{- if .Values.ingress.tls }} - tls: - {{- range .Values.ingress.tls }} - - hosts: - {{- range .hosts }} - - {{ . | quote }} - {{- end }} - secretName: {{ .secretName }} - {{- end }} - {{- end }} - rules: - {{- range .Values.ingress.hosts }} - - host: {{ .host | quote }} - http: - paths: - {{- range .paths }} - - path: {{ .path }} - {{- if and .pathType (semverCompare ">=1.18-0" $.Capabilities.KubeVersion.GitVersion) }} - pathType: {{ .pathType }} - {{- end }} - backend: - {{- if semverCompare ">=1.19-0" $.Capabilities.KubeVersion.GitVersion }} - service: - name: {{ $fullName }} - port: - number: {{ $svcPort }} - {{- else }} - serviceName: {{ $fullName }} - servicePort: {{ $svcPort }} - {{- end }} - {{- end }} - {{- end }} -{{- end }} diff --git a/helm-chart/sut/templates/service.yaml b/helm-chart/sut/templates/service.yaml deleted file mode 100644 index 0a1e857..0000000 --- a/helm-chart/sut/templates/service.yaml +++ /dev/null @@ -1,18 +0,0 @@ -apiVersion: v1 -kind: Service -metadata: - name: {{ include "sut.fullname" . }} - labels: - {{- include "sut.labels" . | nindent 4 }} - {{- with .Values.podLabels }} - {{- toYaml . | nindent 4 }} - {{- end }} -spec: - type: {{ .Values.service.type }} - ports: - - port: {{ .Values.service.port }} - targetPort: http - protocol: TCP - name: socket - selector: - {{- include "sut.selectorLabels" . | nindent 4 }} diff --git a/helm-chart/sut/templates/serviceaccount.yaml b/helm-chart/sut/templates/serviceaccount.yaml deleted file mode 100644 index 3e9368c..0000000 --- a/helm-chart/sut/templates/serviceaccount.yaml +++ /dev/null @@ -1,13 +0,0 @@ -{{- if .Values.serviceAccount.create -}} -apiVersion: v1 -kind: ServiceAccount -metadata: - name: {{ include "sut.serviceAccountName" . }} - labels: - {{- include "sut.labels" . | nindent 4 }} - {{- with .Values.serviceAccount.annotations }} - annotations: - {{- toYaml . | nindent 4 }} - {{- end }} -automountServiceAccountToken: {{ .Values.serviceAccount.automount }} -{{- end }} diff --git a/helm-chart/sut/templates/tests/test-connection.yaml b/helm-chart/sut/templates/tests/test-connection.yaml deleted file mode 100644 index d506eb5..0000000 --- a/helm-chart/sut/templates/tests/test-connection.yaml +++ /dev/null @@ -1,15 +0,0 @@ -apiVersion: v1 -kind: Pod -metadata: - name: "{{ include "sut.fullname" . }}-test-connection" - labels: - {{- include "sut.labels" . | nindent 4 }} - annotations: - "helm.sh/hook": test -spec: - containers: - - name: wget - image: busybox - command: ['wget'] - args: ['{{ include "sut.fullname" . }}:{{ .Values.service.port }}'] - restartPolicy: Never diff --git a/helm-chart/sut/values.yaml.tmpl b/helm-chart/sut/values.yaml.tmpl deleted file mode 100644 index f5d7123..0000000 --- a/helm-chart/sut/values.yaml.tmpl +++ /dev/null @@ -1,144 +0,0 @@ -# Default values for sut. -# This is a YAML-formatted file. -# Declare variables to be passed into your templates. - -replicaCount: 1 - -image: - repository: harbor.4pd.io/lab-platform/inf/python - pullPolicy: IfNotPresent - # Overrides the image tag whose default is the chart appVersion. - tag: 3.9 - -imagePullSecrets: [] -nameOverride: "" -fullnameOverride: "" - -serviceAccount: - # Specifies whether a service account should be created - create: true - # Automatically mount a ServiceAccount's API credentials? - automount: true - # Annotations to add to the service account - annotations: {} - # The name of the service account to use. - # If not set and create is true, a name is generated using the fullname template - name: "" - -podAnnotations: {} -podLabels: {} -podSecurityContext: {} - # fsGroup: 2000 - -securityContext: {} - # capabilities: - # drop: - # - ALL - # readOnlyRootFilesystem: true - # runAsNonRoot: true - # runAsUser: 1000 - -service: - type: ClusterIP - port: 80 - -ingress: - enabled: false - className: "" - annotations: {} - # kubernetes.io/ingress.class: nginx - # kubernetes.io/tls-acme: "true" - hosts: - - host: chart-example.local - paths: - - path: / - pathType: ImplementationSpecific - tls: [] - # - secretName: chart-example-tls - # hosts: - # - chart-example.local - -resources: - # We usually recommend not to specify default resources and to leave this as a conscious - # choice for the user. This also increases chances charts run on environments with little - # resources, such as Minikube. If you do want to specify resources, uncomment the following - # lines, adjust them as necessary, and remove the curly braces after 'resources:'. - limits: - cpu: 1000m - memory: 4096Mi - requests: - cpu: 1000m - memory: 4096Mi - -autoscaling: - enabled: false - minReplicas: 1 - maxReplicas: 100 - targetCPUUtilizationPercentage: 80 - # targetMemoryUtilizationPercentage: 80 - -# Additional volumes on the output Deployment definition. -volumes: [] -# - name: foo -# secret: -# secretName: mysecret -# optional: false - -# Additional volumeMounts on the output Deployment definition. -volumeMounts: [] -# - name: foo -# mountPath: "/etc/foo" -# readOnly: true - -nodeSelector: - contest.4pd.io/accelerator: iluvatar-BI-V100 - -tolerations: - - key: hosttype - operator: Equal - value: iluvatar - effect: NoSchedule - - -affinity: {} - -readinessProbe: - failureThreshold: 1000 - httpGet: - path: /health - port: 80 - scheme: HTTP - -#readinessProbe: -# httpGet: -# path: /health -# port: 80 -# scheme: HTTP -# initialDelaySeconds: 5 # 应用启动后等待 5 秒再开始探测 -# failureThreshold: 5 # 连续失败 3 次后标记为未就绪 -# successThreshold: 1 # 连续成功 1 次后标记为就绪 - -env: - - name: TZ - value: Asia/Shanghai - - name: MY_POD_NAME - valueFrom: - fieldRef: - fieldPath: metadata.name - - name: MY_POD_NAMESPACE - valueFrom: - fieldRef: - fieldPath: metadata.namespace - - name: MY_POD_IP - valueFrom: - fieldRef: - fieldPath: status.podIP - - name: MY_NODE_IP - valueFrom: - fieldRef: - fieldPath: status.hostIP - -#command: '' - - -priorityclassname: '' diff --git a/local_test.py b/local_test.py deleted file mode 100644 index 323fc39..0000000 --- a/local_test.py +++ /dev/null @@ -1,64 +0,0 @@ -import os -import tempfile -import shutil - -if os.path.exists("/tmp/submit_private"): - shutil.rmtree("/tmp/submit_private") - -with tempfile.TemporaryDirectory() as tempdir: - config_path = os.path.join(tempdir, "config.json") - - assert not os.system(f"ssh-keygen -f {tempdir}/ssh-key-ecdsa -t ecdsa -b 521 -q -N \"\"") - - config = """ - model: whisper - model_key: whisper - config.json: - name: 'faster-whisper-server:latest' - support_devices: - - cpu - model_path: '' - port: 8080 - other_ports: [] - other_ports_count: 1 - entrypoint: start.bat - MIN_CHUNK: 2.5 - MIN_ADD_CHUNK: 2.5 - COMPUTE_TYPE: int8 - NUM_WORKERS: 1 - CPU_THREADS: 2 - BEAM_SIZE: 5 - BATCH: 1 - LANG: auto - DEVICE: cpu - CHUNK_LENGTH: 5 - CLASS_MODEL: ./models/faster-whisper-base - EN_MODEL: ./models/faster-whisper-base - ZH_MODEL: ./models/faster-whisper-base - RU_MODEL: ./models/faster-whisper-base - PT_MODEL: ./models/faster-whisper-base - AR_MODEL: ./models/faster-whisper-base - NEW_VERSION: 1 - NEED_RESET: 0 - leaderboard_options: - nfs: - - name: whisper - srcRelativePath: leaderboard/pc_asr/en.tar.gz - mountPoint: /tmp - source: ceph_customer - """ - - with open(config_path, "w") as f: - f.write(config) - - os.environ["SSH_KEY_DIR"] = tempdir - os.environ["SUBMIT_CONFIG_FILEPATH"] = config_path - os.environ["MODEL_MAPPING"] = '{"whisper": "edge-ml.tar.gz"}' - - from run_async_a10 import get_sut_url_windows - - - print(get_sut_url_windows()) - - import time - time.sleep(3600) \ No newline at end of file diff --git a/mock_env.sh b/mock_env.sh deleted file mode 100644 index d14fd85..0000000 --- a/mock_env.sh +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/bash - -export DATASET_FILEPATH=dataset/formatted1/de.zip -export RESULT_FILEPATH=out/result.json -export DETAILED_CASES_FILEPATH=out/detail_cases.json -export SUBMIT_CONFIG_FILEPATH= -export BENCHMARK_NAME= -export MY_POD_IP=127.0.0.1 diff --git a/pyproject.toml b/pyproject.toml deleted file mode 100644 index 4959125..0000000 --- a/pyproject.toml +++ /dev/null @@ -1,24 +0,0 @@ -[tool.black] -line-length = 80 -target-version = ['py39'] - -[tool.flake8] -max-line-length = 88 -count=true -per-file-ignores="./annotation/manager.py:F401" -exclude=["./label", "__pycache__", "./migrations", "./logs", "./pids", "./resources"] -ignore=["W503", "E203"] -enable-extensions="G" -application-import-names=["flake8-isort", "flake8-logging-format", "flake8-builtins"] -import-order-style="edited" -extend-ignore = ["E203", "E701"] - -[tool.isort] -py_version=39 -profile="black" -multi_line_output=9 -line_length=80 -group_by_package=true -case_sensitive=true -skip_gitignore=true - diff --git a/run.py b/run.py deleted file mode 100644 index 08b7d5e..0000000 --- a/run.py +++ /dev/null @@ -1,114 +0,0 @@ -import gc -import json -import os -import sys -import time -import zipfile - -import yaml -from schemas.context import ASRContext -from utils.client import Client -from utils.evaluator import BaseEvaluator -from utils.logger import logger -from utils.service import register_sut - -IN_TEST = os.getenv("SUBMIT_CONFIG_FILEPATH", None) is None -UNIT_TEST = os.getenv("UNIT_TEST", 0) - - -def main(): - logger.info("执行……") - - dataset_filepath = os.getenv( - "DATASET_FILEPATH", - "./tests/resources/en.zip", - ) - submit_config_filepath = os.getenv("SUBMIT_CONFIG_FILEPATH", "./tests/resources/submit_config") - result_filepath = os.getenv("RESULT_FILEPATH", "./out/result") - bad_cases_filepath = os.getenv("BAD_CASES_FILEPATH", "./out/badcase") - detail_cases_filepath = os.getenv("DETAILED_CASES_FILEPATH", "./out/detailcase.jsonl") - - resource_name = os.getenv("BENCHMARK_NAME") - - # 提交配置 & 启动被测服务 - if os.getenv("DATASET_FILEPATH", ""): - from utils.helm import resource_check - - with open(submit_config_filepath, "r") as fp: - st_config = yaml.safe_load(fp) - st_config["values"] = resource_check(st_config.get("values", {})) - if 'docker_images' in st_config: - sut_url = "ws://172.26.1.75:9827" - os.environ['test'] = '1' - elif 'docker_image' in st_config: - sut_url = register_sut(st_config, resource_name) - elif UNIT_TEST: - sut_url = "ws://172.27.231.36:80" - else: - logger.error("config 配置错误,没有 docker_image") - os._exit(1) - else: - os.environ['test'] = '1' - sut_url = "ws://172.27.231.36:80" - if UNIT_TEST: - exit(0) - - """ - # 数据集处理 - local_dataset_path = "./dataset" - os.makedirs(local_dataset_path, exist_ok=True) - with zipfile.ZipFile(dataset_filepath) as zf: - zf.extractall(local_dataset_path) - config_path = os.path.join(local_dataset_path, "data.yaml") - with open(config_path, "r") as fp: - dataset_config = yaml.safe_load(fp) - - # 数据集信息 - dataset_global_config = dataset_config.get("global", {}) - dataset_query = dataset_config.get("query_data", {}) - - evaluator = BaseEvaluator() - - # 开始预测 - for idx, query_item in enumerate(dataset_query): - gc.collect() - logger.info(f"开始执行 {idx} 条数据") - - context = ASRContext(**dataset_global_config) - context.lang = query_item.get("lang", context.lang) - context.file_path = os.path.join(local_dataset_path, query_item["file"]) - # context.audio_length = query_item["audio_length"] - - interactions = Client(sut_url, context).action() - context.append_labels(query_item["voice"]) - context.append_preds( - interactions["predict_data"], - interactions["send_time"], - interactions["recv_time"], - ) - context.fail = interactions["fail"] - if IN_TEST: - with open('output.txt', 'w') as fp: - original_stdout = sys.stdout - sys.stdout = fp - print(context) - sys.stdout = original_stdout - evaluator.evaluate(context) - detail_case = evaluator.gen_detail_case() - with open(detail_cases_filepath, "a") as fp: - fp.write(json.dumps(detail_case.to_dict(), ensure_ascii=False) + "\n") - time.sleep(4) - - evaluator.post_evaluate() - output_result = evaluator.gen_result() - # print(evaluator.__dict__) - logger.info("执行完成. Result = {output_result}") - - with open(result_filepath, "w") as fp: - json.dump(output_result, fp, indent=2, ensure_ascii=False) - with open(bad_cases_filepath, "w") as fp: - fp.write("当前榜单不存在 Bad Case\n") - """ - -if __name__ == "__main__": - main() diff --git a/run_async_a10.py b/run_async_a10.py deleted file mode 100644 index df77568..0000000 --- a/run_async_a10.py +++ /dev/null @@ -1,757 +0,0 @@ -import atexit -import concurrent.futures -import fcntl -import gc -import glob -import json -import os -import random -import signal -import sys -import tempfile -import threading -import time -import zipfile -from concurrent.futures import ThreadPoolExecutor - -import yaml -from fabric import Connection -from vmplatform import VMOS, Client, VMDataDisk - -from schemas.context import ASRContext -from utils.client_async import ClientAsync -from utils.evaluator import BaseEvaluator -from utils.logger import logger -from utils.service import register_sut - -IN_TEST = os.getenv("SUBMIT_CONFIG_FILEPATH", None) is None -UNIT_TEST = os.getenv("UNIT_TEST", 0) - -DATASET_NUM = os.getenv("DATASET_NUM") - -# vm榜单参数 -SUT_TYPE = os.getenv("SUT_TYPE", "kubernetes") -SHARE_SUT = os.getenv("SHARE_SUT", "true") == "true" -VM_ID = 0 -VM_IP = "" -do_deploy_chart = True -VM_CPU = int(os.getenv("VM_CPU", "2")) -VM_MEM = int(os.getenv("VM_MEM", "4096")) -MODEL_BASEPATH = os.getenv("MODEL_BASEPATH", "/tmp/customer/leaderboard/pc_asr") -MODEL_MAPPING = json.loads(os.getenv("MODEL_MAPPING", "{}")) -SSH_KEY_DIR = os.getenv("SSH_KEY_DIR", "/workspace") -SSH_PUBLIC_KEY_FILE = os.path.join(SSH_KEY_DIR, "ssh-key-ecdsa.pub") -SSH_KEY_FILE = os.path.join(SSH_KEY_DIR, "ssh-key-ecdsa") - -CONNECT_KWARGS = {"key_filename": SSH_KEY_FILE} - -# 共享sut参数 -JOB_ID = os.getenv("JOB_ID") -dirname = "/tmp/submit_private/sut_share" -os.makedirs(dirname, exist_ok=True) -SUT_SHARE_LOCK = os.path.join(dirname, "lock.lock") -SUT_SHARE_USE_LOCK = os.path.join(dirname, "use.lock") -SUT_SHARE_STATUS = os.path.join(dirname, "status.json") -SUT_SHARE_JOB_STATUS = os.path.join(dirname, f"job_status.{JOB_ID}") -SUT_SHARE_PUBLIC_FAIL = os.path.join(dirname, "one_job_failed") -fd_lock = open(SUT_SHARE_USE_LOCK, "a") - - -def clean_vm_atexit(): - global VM_ID, do_deploy_chart - if not VM_ID: - return - if not do_deploy_chart: - return - logger.info("删除vm") - vmclient = Client() - err_msg = vmclient.delete_vm(VM_ID) - if err_msg: - logger.warning(f"删除vm失败: {err_msg}") - - -def put_file_to_vm(c: Connection, local_path: str, remote_path: str): - logger.info(f"uploading file {local_path} to {remote_path}") - result = c.put(local_path, remote_path) - logger.info("uploaded {0.local} to {0.remote}".format(result)) - - -def deploy_windows_sut(): - global VM_ID - global VM_IP - - submit_config_filepath = os.getenv("SUBMIT_CONFIG_FILEPATH", "") - with open(submit_config_filepath, "r") as fp: - st_config = yaml.safe_load(fp) - assert "model" in st_config, "未配置model" - assert "model_key" in st_config, "未配置model_key" - assert "config.json" in st_config, "未配置config.json" - nfs = st_config.get("leaderboard_options", {}).get("nfs", []) - assert len(nfs) > 0, "未配置nfs" - assert st_config["model"] in MODEL_MAPPING, "提交模型不在可用模型范围内" - - model = st_config["model"] - model_key = st_config["model_key"] - model_path = "" - config = st_config["config.json"] - exist = False - for nfs_item in nfs: - if nfs_item["name"] == model_key: - exist = True - if nfs_item["source"] == "ceph_customer": - model_path = os.path.join( - "/tmp/customer", - nfs_item["srcRelativePath"], - ) - else: - model_path = os.path.join( - "/tmp/juicefs", - nfs_item["srcRelativePath"], - ) - break - if not exist: - raise RuntimeError(f"未找到nfs配置项 name={model_key}") - config_path = os.path.join(tempfile.mkdtemp(), "config.json") - model_dir = os.path.basename(model_path).split(".")[0] - config["model_path"] = f"E:\\model\\{model_dir}" - with open(config_path, "w") as fp: - json.dump(config, fp, ensure_ascii=False, indent=4) - - vmclient = Client() - with open(SSH_PUBLIC_KEY_FILE, "r") as fp: - sshpublickey = fp.read().rstrip() - VM_ID = vmclient.create_vm( - "amd64", - VMOS.windows10, - VM_CPU, - VM_MEM, - "leaderboard-%s-submit-%s-job-%s" - % ( - os.getenv("BENCHMARK_NAME"), - os.getenv("SUBMIT_ID"), - os.getenv("JOB_ID"), - ), - sshpublickey, - datadisks=[ - VMDataDisk( - size=50, - disk_type="ssd", - mount_path="/", - filesystem="NTFS", - ) - ], - ) - atexit.register(clean_vm_atexit) - signal.signal(signal.SIGTERM, lambda signum, _: sys.exit(signum)) - VM_IP = vmclient.wait_until_vm_running(VM_ID) - logger.info("vm created successfully, vm_ip: %s", VM_IP) - - def sut_startup(): - with Connection( - VM_IP, - "administrator", - connect_kwargs=CONNECT_KWARGS, - ) as c: - script_path = "E:\\base\\asr\\faster-whisper\\server" - script_path = "E:\\install\\asr\\sensevoice\\server" - bat_filepath = f"{script_path}\\start.bat" - config_filepath = "E:\\submit\\config.json" - result = c.run("") - assert result.ok - c.run( - f'cd /d {script_path} & set "EDGE_ML_ENV_HOME=E:\\install" & {bat_filepath} {config_filepath}', - warn=True, - ) - - with Connection( - VM_IP, - "administrator", - connect_kwargs=CONNECT_KWARGS, - ) as c: - model_filepath = os.path.join(MODEL_BASEPATH, MODEL_MAPPING[model]) - filename = os.path.basename(model_filepath) - put_file_to_vm(c, model_filepath, "/E:/") - - result = c.run("mkdir E:\\base") - assert result.ok - result = c.run("mkdir E:\\model") - assert result.ok - result = c.run("mkdir E:\\submit") - assert result.ok - - result = c.run( - f"tar zxvf E:\\{filename} -C E:\\base --strip-components 1" - ) - assert result.ok - - result = c.run("E:\\base\\setup-win.bat E:\\install") - assert result.ok - - put_file_to_vm(c, config_path, "/E:/submit") - put_file_to_vm(c, model_path, "/E:/model") - result = c.run( - f"tar zxvf E:\\model\\{os.path.basename(model_path)} -C E:\\model" - ) - assert result.ok - threading.Thread(target=sut_startup, daemon=True).start() - time.sleep(60) - - return f"ws://{VM_IP}:{config['port']}" - - -def deploy_macos_sut(): - global VM_ID - global VM_IP - - submit_config_filepath = os.getenv("SUBMIT_CONFIG_FILEPATH", "") - with open(submit_config_filepath, "r") as fp: - st_config = yaml.safe_load(fp) - assert "model" in st_config, "未配置model" - assert "model_key" in st_config, "未配置model_key" - assert "config.json" in st_config, "未配置config.json" - nfs = st_config.get("leaderboard_options", {}).get("nfs", []) - assert len(nfs) > 0, "未配置nfs" - assert st_config["model"] in MODEL_MAPPING, "提交模型不在可用模型范围内" - - model = st_config["model"] - model_key = st_config["model_key"] - model_path = "" - config = st_config["config.json"] - exist = False - for nfs_item in nfs: - if nfs_item["name"] == model_key: - exist = True - if nfs_item["source"] == "ceph_customer": - model_path = os.path.join( - "/tmp/customer", - nfs_item["srcRelativePath"], - ) - else: - model_path = os.path.join( - "/tmp/juicefs", - nfs_item["srcRelativePath"], - ) - break - if not exist: - raise RuntimeError(f"未找到nfs配置项 name={model_key}") - config_path = os.path.join(tempfile.mkdtemp(), "config.json") - model_dir = os.path.basename(model_path).split(".")[0] - - vmclient = Client() - with open(SSH_PUBLIC_KEY_FILE, "r") as fp: - sshpublickey = fp.read().rstrip() - VM_ID = vmclient.create_vm( - "amd64", - VMOS.macos12, - VM_CPU, - VM_MEM, - "leaderboard-%s-submit-%s-job-%s" - % ( - os.getenv("BENCHMARK_NAME"), - os.getenv("SUBMIT_ID"), - os.getenv("JOB_ID"), - ), - sshpublickey, - datadisks=[ - VMDataDisk( - size=50, - disk_type="ssd", - mount_path="/", - filesystem="apfs", - ) - ], - ) - atexit.register(clean_vm_atexit) - signal.signal(signal.SIGTERM, lambda signum, _: sys.exit(signum)) - VM_IP = vmclient.wait_until_vm_running(VM_ID) - logger.info("vm created successfully, vm_ip: %s", VM_IP) - - with Connection( - VM_IP, - "admin", - connect_kwargs=CONNECT_KWARGS, - ) as c: - result = c.run("ls -d /Volumes/data*") - assert result.ok - volume_path = result.stdout.strip() - - config["model_path"] = f"{volume_path}/model/{model_dir}" - with open(config_path, "w") as fp: - json.dump(config, fp, ensure_ascii=False, indent=4) - - def sut_startup(): - with Connection( - VM_IP, - "admin", - connect_kwargs=CONNECT_KWARGS, - ) as c: - script_path = f"{volume_path}/install/asr/sensevoice/server" - startsh = f"{script_path}/start.sh" - config_filepath = f"{volume_path}/submit/config.json" - c.run( - f"cd {script_path} && sh {startsh} {config_filepath}", - warn=True, - ) - - with Connection( - VM_IP, - "admin", - connect_kwargs=CONNECT_KWARGS, - ) as c: - model_filepath = os.path.join(MODEL_BASEPATH, MODEL_MAPPING[model]) - filename = os.path.basename(model_filepath) - put_file_to_vm(c, model_filepath, f"{volume_path}") - - result = c.run(f"mkdir {volume_path}/base") - assert result.ok - result = c.run(f"mkdir {volume_path}/model") - assert result.ok - result = c.run(f"mkdir {volume_path}/submit") - assert result.ok - - result = c.run( - f"tar zxvf {volume_path}/{filename} -C {volume_path}/base --strip-components 1" # noqa: E501 - ) - assert result.ok - - result = c.run( - f"sh {volume_path}/base/setup-mac.sh {volume_path}/install x64" - ) - assert result.ok - - put_file_to_vm(c, config_path, f"{volume_path}/submit") - put_file_to_vm(c, model_path, f"{volume_path}/model") - result = c.run( - f"tar zxvf {volume_path}/model/{os.path.basename(model_path)} -C {volume_path}/model" # noqa: E501 - ) - assert result.ok - threading.Thread(target=sut_startup, daemon=True).start() - time.sleep(60) - - return f"ws://{VM_IP}:{config['port']}" - - -def get_sut_url_vm(vm_type: str): - global VM_ID - global VM_IP - global do_deploy_chart - - do_deploy_chart = True - # 拉起SUT - - def check_job_failed(): - while True: - time.sleep(30) - if os.path.exists(SUT_SHARE_PUBLIC_FAIL): - logger.error("there is a job failed in current submit") - sys.exit(1) - - sut_url = "" - threading.Thread(target=check_job_failed, daemon=True).start() - if SHARE_SUT: - - time.sleep(10 * random.random()) - try: - open(SUT_SHARE_LOCK, "x").close() - except Exception: - do_deploy_chart = False - - start_at = time.time() - - def file_last_updated_at(file: str): - return os.stat(file).st_mtime if os.path.exists(file) else start_at - - if not do_deploy_chart: - with open(SUT_SHARE_JOB_STATUS, "w") as f: - f.write("waiting") - while ( - time.time() - file_last_updated_at(SUT_SHARE_STATUS) - <= 60 * 60 * 24 - ): - logger.info( - "Waiting sut application to be deployed by another job" - ) - time.sleep(10 + random.random()) - if os.path.exists(SUT_SHARE_STATUS): - get_status = False - for _ in range(10): - try: - with open(SUT_SHARE_STATUS, "r") as f: - status = json.load(f) - get_status = True - break - except Exception: - time.sleep(1 + random.random()) - continue - if not get_status: - raise RuntimeError( - "Failed to get status of sut application" - ) - assert ( - status.get("status") != "failed" - ), "Failed to deploy sut application, \ -please check other job logs" - if status.get("status") == "running": - VM_ID = status.get("vmid") - VM_IP = status.get("vmip") - sut_url = status.get("sut_url") - with open(SSH_PUBLIC_KEY_FILE, "w") as fp: - fp.write(status.get("pubkey")) - with open(SSH_KEY_FILE, "w") as fp: - fp.write(status.get("prikey")) - logger.info("Successfully get deployed sut application") - break - - if do_deploy_chart: - try: - fcntl.flock(fd_lock, fcntl.LOCK_EX) - with open(SUT_SHARE_JOB_STATUS, "w") as f: - f.write("waiting") - pending = True - - def update_status(): - while pending: - time.sleep(30) - if not pending: - break - with open(SUT_SHARE_STATUS, "w") as f: - json.dump({"status": "pending"}, f) - - threading.Thread(target=update_status, daemon=True).start() - if vm_type == "windows": - sut_url = deploy_windows_sut() - else: - sut_url = deploy_macos_sut() - except Exception: - open(SUT_SHARE_PUBLIC_FAIL, "w").close() - with open(SUT_SHARE_STATUS, "w") as f: - json.dump({"status": "failed"}, f) - raise - finally: - pending = False - with open(SUT_SHARE_STATUS, "w") as f: - pubkey = "" - with open(SSH_PUBLIC_KEY_FILE, "r") as fp: - pubkey = fp.read().rstrip() - prikey = "" - with open(SSH_KEY_FILE, "r") as fp: - prikey = fp.read() - json.dump( - { - "status": "running", - "vmid": VM_ID, - "vmip": VM_IP, - "pubkey": pubkey, - "sut_url": sut_url, - "prikey": prikey, - }, - f, - ) - else: - while True: - time.sleep(5 + random.random()) - try: - fcntl.flock(fd_lock, fcntl.LOCK_EX | fcntl.LOCK_NB) - break - except Exception: - logger.info("尝试抢占调用sut失败,继续等待 5s ...") - - with open(SUT_SHARE_JOB_STATUS, "w") as f: - f.write("running") - - return sut_url - - -def get_sut_url(): - if SUT_TYPE in ("windows", "macos"): - return get_sut_url_vm(SUT_TYPE) - - submit_config_filepath = os.getenv( - "SUBMIT_CONFIG_FILEPATH", "./tests/resources/submit_config" - ) - CPU = os.getenv("SUT_CPU", "2") - MEMORY = os.getenv("SUT_MEMORY", "4Gi") - resource_name = os.getenv("BENCHMARK_NAME") - - # 任务信息 - # 斯拉夫语族:俄语、波兰语 - # 日耳曼语族:英语、德语、荷兰语 - # 拉丁语族(罗曼语族):西班牙语、葡萄牙语、法国语、意大利语 - # 闪米特语族:阿拉伯语、希伯来语 - - # 提交配置 & 启动被测服务 - if os.getenv("DATASET_FILEPATH", ""): - with open(submit_config_filepath, "r") as fp: - st_config = yaml.safe_load(fp) - if "values" not in st_config: - st_config["values"] = {} - st_config["values"]["resources"] = {} - st_config["values"]["resources"]["limits"] = {} - st_config["values"]["resources"]["limits"]["cpu"] = CPU - st_config["values"]["resources"]["limits"]["memory"] = MEMORY - # st_config["values"]['resources']['limits']['nvidia.com/gpu'] = '1' - # st_config["values"]['resources']['limits']['nvidia.com/gpumem'] = "1843" - # st_config["values"]['resources']['limits']['nvidia.com/gpucores'] = "8" - st_config["values"]["resources"]["requests"] = {} - st_config["values"]["resources"]["requests"]["cpu"] = CPU - st_config["values"]["resources"]["requests"]["memory"] = MEMORY - # st_config["values"]['resources']['requests']['nvidia.com/gpu'] = '1' - # st_config["values"]['resources']['requests']['nvidia.com/gpumem'] = "1843" - # st_config["values"]['resources']['requests']['nvidia.com/gpucores'] = "8" - # st_config['values']['nodeSelector'] = {} - # st_config["values"]["nodeSelector"][ - # "contest.4pd.io/accelerator" - # ] = "A10vgpu" - # st_config['values']['tolerations'] = [] - # toleration_item = {} - # toleration_item['key'] = 'hosttype' - # toleration_item['operator'] = 'Equal' - # toleration_item['value'] = 'vgpu' - # toleration_item['effect'] = 'NoSchedule' - # st_config['values']['tolerations'].append(toleration_item) - if os.getenv("RESOURCE_TYPE", "cpu") == "cpu": - values = st_config["values"] - limits = values.get("resources", {}).get("limits", {}) - requests = values.get("resources", {}).get("requests", {}) - if ( - "nvidia.com/gpu" in limits - or "nvidia.com/gpumem" in limits - or "nvidia.com/gpucores" in limits - or "nvidia.com/gpu" in requests - or "nvidia.com/gpumem" in requests - or "nvidia.com/gpucores" in requests - ): - raise Exception("禁止使用GPU!") - else: - vgpu_num = int(os.getenv("SUT_VGPU", "3")) - st_config["values"]["resources"]["limits"]["nvidia.com/gpu"] = ( - str(vgpu_num) - ) - st_config["values"]["resources"]["limits"][ - "nvidia.com/gpumem" - ] = str(1843 * vgpu_num) - st_config["values"]["resources"]["limits"][ - "nvidia.com/gpucores" - ] = str(8 * vgpu_num) - st_config["values"]["resources"]["requests"][ - "nvidia.com/gpu" - ] = str(vgpu_num) - st_config["values"]["resources"]["requests"][ - "nvidia.com/gpumem" - ] = str(1843 * vgpu_num) - st_config["values"]["resources"]["requests"][ - "nvidia.com/gpucores" - ] = str(8 * vgpu_num) - st_config["values"]["nodeSelector"] = {} - st_config["values"]["nodeSelector"][ - "contest.4pd.io/accelerator" - ] = "A10vgpu" - st_config["values"]["tolerations"] = [] - toleration_item = {} - toleration_item["key"] = "hosttype" - toleration_item["operator"] = "Equal" - toleration_item["value"] = "vgpu" - toleration_item["effect"] = "NoSchedule" - st_config["values"]["tolerations"].append(toleration_item) - if "docker_images" in st_config: - sut_url = "ws://172.26.1.75:9827" - os.environ["test"] = "1" - elif "docker_image" in st_config: - sut_url = register_sut(st_config, resource_name) - elif UNIT_TEST: - sut_url = "ws://172.27.231.36:80" - else: - logger.error("config 配置错误,没有 docker_image") - os._exit(1) - return sut_url - else: - os.environ["test"] = "1" - sut_url = "ws://172.27.231.36:80" - sut_url = "ws://172.26.1.75:9827" - return sut_url - - -def load_merge_dataset(dataset_filepath: str) -> dict: - local_dataset_path = "./dataset" - os.makedirs(local_dataset_path, exist_ok=True) - with zipfile.ZipFile(dataset_filepath) as zf: - zf.extractall(local_dataset_path) - - config = {} - sub_datasets = os.listdir(local_dataset_path) - for sub_dataset in sub_datasets: - if sub_dataset.startswith("asr."): - lang = sub_dataset[4:] - lang_path = os.path.join(local_dataset_path, lang) - os.makedirs(lang_path, exist_ok=True) - with zipfile.ZipFile( - os.path.join(local_dataset_path, sub_dataset) - ) as zf: - zf.extractall(lang_path) - lang_config_path = os.path.join(lang_path, "data.yaml") - with open(lang_config_path, "r") as fp: - lang_config = yaml.safe_load(fp) - audio_lengths = {} - for query_item in lang_config.get("query_data", []): - audio_path = os.path.join( - lang_path, - query_item["file"], - ) - query_item["file"] = audio_path - audio_lengths[query_item["file"]] = os.path.getsize( - audio_path, - ) - lang_config["query_data"] = sorted( - lang_config.get("query_data", []), - key=lambda x: audio_lengths[x["file"]], - reverse=True, - ) - - idx = 0 - length = 0.0 - for query_item in lang_config["query_data"]: - audio_length = audio_lengths[query_item["file"]] - length += audio_length / 32000 - idx += 1 - # 每个语言限制半个小时长度 - if length >= 30 * 60: - break - - lang_config["query_data"] = lang_config["query_data"][:idx] - config[lang] = lang_config - - config["query_data"] = [] - for lang, lang_config in config.items(): - if lang == "query_data": - continue - for query_item in lang_config["query_data"]: - config["query_data"].append( - { - **query_item, - "lang": lang, - } - ) - random.Random(0).shuffle(config["query_data"]) - - return config - - -def postprocess_failed(): - open(SUT_SHARE_PUBLIC_FAIL, "w").close() - - -def main(): - dataset_filepath = os.getenv( - "DATASET_FILEPATH", - "/Users/4paradigm/Projects/dataset/asr/de.zip", - # "./tests/resources/en.zip", - ) - result_filepath = os.getenv("RESULT_FILEPATH", "./out/result") - bad_cases_filepath = os.getenv("BAD_CASES_FILEPATH", "./out/badcase") - detail_cases_filepath = os.getenv( - "DETAILED_CASES_FILEPATH", "./out/detailcase.jsonl" - ) - thread_num = int(os.getenv("THREAD_NUM", "1")) - - # 数据集处理 - config = {} - if os.getenv("MERGE_DATASET", "1"): - config = load_merge_dataset(dataset_filepath) - dataset_query = config["query_data"] - else: - local_dataset_path = "./dataset" - os.makedirs(local_dataset_path, exist_ok=True) - with zipfile.ZipFile(dataset_filepath) as zf: - zf.extractall(local_dataset_path) - config_path = os.path.join(local_dataset_path, "data.yaml") - with open(config_path, "r") as fp: - dataset_config = yaml.safe_load(fp) - # 读取所有的音频,进而获得音频的总长度,最后按照音频长度对 query_data 进行降序排序 - lang = os.getenv("lang") - if lang is None: - lang = dataset_config.get("global", {}).get("lang", "en") - audio_lengths = [] - for query_item in dataset_config.get("query_data", []): - query_item["lang"] = lang - audio_path = os.path.join(local_dataset_path, query_item["file"]) - query_item["file"] = audio_path - audio_lengths.append(os.path.getsize(audio_path) / 1024 / 1024) - dataset_config["query_data"] = sorted( - dataset_config.get("query_data", []), - key=lambda x: audio_lengths[dataset_config["query_data"].index(x)], - reverse=True, - ) - # 数据集信息 - # dataset_global_config = dataset_config.get("global", {}) - dataset_query = dataset_config.get("query_data", {}) - config[lang] = dataset_config - - # sut url - sut_url = get_sut_url() - - try: - # 开始测试 - logger.info("开始执行") - evaluator = BaseEvaluator() - future_list = [] - with ThreadPoolExecutor(max_workers=thread_num) as executor: - for idx, query_item in enumerate(dataset_query): - context = ASRContext( - **config[query_item["lang"]].get("global", {}), - ) - context.lang = query_item["lang"] - context.file_path = query_item["file"] - context.append_labels(query_item["voice"]) - future = executor.submit( - ClientAsync(sut_url, context, idx).action - ) - future_list.append(future) - for future in concurrent.futures.as_completed(future_list): - context = future.result() - evaluator.evaluate(context) - detail_case = evaluator.gen_detail_case() - with open(detail_cases_filepath, "a") as fp: - fp.write( - json.dumps( - detail_case.to_dict(), - ensure_ascii=False, - ) - + "\n", - ) - del context - gc.collect() - - evaluator.post_evaluate() - output_result = evaluator.gen_result() - logger.info("执行完成") - - with open(result_filepath, "w") as fp: - json.dump(output_result, fp, indent=2, ensure_ascii=False) - with open(bad_cases_filepath, "w") as fp: - fp.write("当前榜单不存在 Bad Case\n") - - if SHARE_SUT: - with open(SUT_SHARE_JOB_STATUS, "w") as f: - f.write("success") - - fcntl.flock(fd_lock, fcntl.LOCK_UN) - fd_lock.close() - while SHARE_SUT and do_deploy_chart: - time.sleep(30) - success_num = 0 - for job_status_file in glob.glob(dirname + "/job_status.*"): - with open(job_status_file, "r") as f: - job_status = f.read() - success_num += job_status == "success" - if success_num == int(DATASET_NUM): - break - logger.info("Waiting for all jobs to complete") - except Exception: - if SHARE_SUT: - postprocess_failed() - raise - sys.exit(0) - - -if __name__ == "__main__": - main() diff --git a/schemas/__init__.py b/schemas/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/schemas/context.py b/schemas/context.py deleted file mode 100644 index adff8d6..0000000 --- a/schemas/context.py +++ /dev/null @@ -1,90 +0,0 @@ -import os -from copy import deepcopy -from typing import Dict, List, Optional - -from pydantic import BaseModel, Field - -from schemas.stream import StreamDataModel - - -class LabelContext(BaseModel): - start: float - end: float - answer: str - - -class PredContext(BaseModel): - recognition_results: StreamDataModel - recv_time: Optional[float] = Field(None) - send_time: Optional[float] = Field(None) - - -class ASRContext: - def __init__(self, **kwargs): - self.bits = kwargs.get("bits", 16) - self.channel = kwargs.get("channel", 1) - self.sample_rate = kwargs.get("sample_rate", 16000) - self.audio_format = kwargs.get("format", "wav") - self.enable_words = kwargs.get("enable_words", True) - self.char_contains_rate = kwargs.get("char_contains_rate", 0.8) - self.lang = os.getenv("lang") - if self.lang is None: - self.lang = kwargs.get("lang", "en") - self.stream = kwargs.get("stream", True) - - self.wait_time = float(os.getenv("wait_time", 0.1)) - self.chunk_size = self.sample_rate * self.bits / 8 * self.wait_time - if int(os.getenv('chunk_size_set', 0)): - self.chunk_size = int(os.getenv('chunk_size_set', 0)) - - self.audio_length = 0 - self.file_path = "" - - self.labels: List[LabelContext] = kwargs.get("labels", []) - self.preds: List[PredContext] = kwargs.get("preds", []) - - self.label_sentences: List[str] = [] - self.pred_sentences: List[str] = [] - - self.send_time_start_end = [] - self.recv_time_start_end = [] - - self.fail = False - self.fail_char_contains_rate_num = 0 - - self.punctuation_num = 0 - self.pred_punctuation_num = 0 - - def append_labels(self, voices: List[Dict]): - for voice_data in voices: - label_context = LabelContext(**voice_data) - self.labels.append(label_context) - - def append_preds( - self, - predict_data: List[StreamDataModel], - send_time: List[float], - recv_time: List[float], - ): - self.send_time_start_end = [send_time[0], send_time[-1]] if len(send_time) > 0 else [] - self.recv_time_start_end = [recv_time[0], recv_time[-1]] if len(recv_time) > 0 else [] - for pred_item, send_time_item, recv_time_item in zip(predict_data, send_time, recv_time): - pred_item = deepcopy(pred_item) - pred_context = PredContext(recognition_results=pred_item.model_dump()) - pred_context.send_time = send_time_item - pred_context.recv_time = recv_time_item - self.preds.append(pred_context) - - def to_dict(self): - return { - "bits": self.bits, - "channel": self.channel, - "sample_rate": self.sample_rate, - "audio_format": self.audio_format, - "enable_words": self.enable_words, - "stream": self.stream, - "wait_time": self.wait_time, - "chunk_size": self.chunk_size, - "labels": [item.model_dump_json() for item in self.labels], - "preds": [item.model_dump_json() for item in self.preds], - } diff --git a/schemas/dataset.py b/schemas/dataset.py deleted file mode 100644 index 2c940c7..0000000 --- a/schemas/dataset.py +++ /dev/null @@ -1,18 +0,0 @@ -from typing import List - -from pydantic import BaseModel, Field - - -class QueryDataSentence(BaseModel): - answer: str = Field(description="文本label") - start: float = Field(description="句子开始时间") - end: float = Field(description="句子结束时间") - - -class QueryData(BaseModel): - lang: str = Field(description="语言") - file: str = Field(description="音频文件位置") - duration: float = Field(description="音频长度") - voice: List[QueryDataSentence] = Field( - description="音频文件的文本label内容" - ) diff --git a/schemas/stream.py b/schemas/stream.py deleted file mode 100644 index 44f8111..0000000 --- a/schemas/stream.py +++ /dev/null @@ -1,66 +0,0 @@ -from typing import List - -from pydantic import BaseModel, ValidationError, field_validator -from pydantic import model_validator - - -class StreamWordsModel(BaseModel): - text: str - start_time: float - end_time: float - - @model_validator(mode="after") - def check_result(self): - if self.end_time < self.start_time: - raise ValidationError("end-time 小于 start-time, error") - return self - - -class StreamDataModel(BaseModel): - text: str - language: str - final_result: bool - para_seq: int - start_time: float - end_time: float - words: List[StreamWordsModel] - - @model_validator(mode="after") - def check_result(self): - if self.end_time < self.start_time: - raise ValidationError("end-time 小于 start-time, error") - return self - - -class StreamResultModel(BaseModel): - asr_results: StreamDataModel - - @field_validator('asr_results', mode="after") - def convert_to_seconds(cls, v: StreamDataModel, values): - # 在这里处理除以1000的逻辑 - v.end_time = v.end_time / 1000 - v.start_time = v.start_time / 1000 - for word in v.words: - word.start_time /= 1000 - word.end_time /= 1000 - return v - - class Config: - validate_assignment = True - - -class NonStreamDataModel(BaseModel): - text: str - para_seq: int - start_time: float - end_time: float - - @model_validator(mode="after") - def check_result(self): - if self.end_time < self.start_time: - raise ValidationError("end-time 小于 start-time, error") - return self - - -class NonStreamResultModel(BaseModel): - contents: List[NonStreamDataModel] diff --git a/scripts/check_dataset_time.py b/scripts/check_dataset_time.py deleted file mode 100644 index ef07b9f..0000000 --- a/scripts/check_dataset_time.py +++ /dev/null @@ -1,53 +0,0 @@ -import os -import sys -from collections import defaultdict - -import yaml - - -def main(dataset_dir): - dirs = os.listdir(dataset_dir) - dirs = list( - filter(lambda x: os.path.isdir(os.path.join(dataset_dir, x)), dirs) - ) - - problem_dirs = set() - problem_count = defaultdict(int) - for dir in dirs: - with open(os.path.join(dataset_dir, dir, "data.yaml"), "r") as f: - data = yaml.full_load(f) - for query_i, query in enumerate(data["query_data"]): - voices = sorted(query["voice"], key=lambda x: x["start"]) - if voices != query["voice"]: - print("-----", dir) - if voices[0]["start"] > voices[0]["end"]: - print( - "err1: %s 第%s个query的第%d个voice的start大于end: %s" - % (dir, query_i, 0, voices[0]["answer"]) - ) - problem_dirs.add(dir) - for voice_i in range(1, len(voices)): - voice = voices[voice_i] - if voice["start"] > voice["end"]: - print( - "err1: %s 第%s个query的第%d个voice的start大于end: %s" - % (dir, query_i, voice_i, voice["answer"]) - ) - problem_dirs.add(dir) - if voice["start"] < voices[voice_i - 1]["end"]: - print( - "err2: %s 第%s个query的第%d个voice的start小于前一个voice的end: %s" - % (dir, query_i, voice_i, voice["answer"]) - ) - problem_dirs.add(dir) - problem_count[dir] += 1 - print(len(dirs)) - print(problem_dirs) - print(problem_count) - - -if __name__ == "__main__": - if len(sys.argv) < 2: - print("指定 测试数据集文件夹") - sys.exit(1) - main(sys.argv[1]) diff --git a/scripts/convert_callback_dataset.py b/scripts/convert_callback_dataset.py deleted file mode 100644 index 1f52a33..0000000 --- a/scripts/convert_callback_dataset.py +++ /dev/null @@ -1,108 +0,0 @@ -import json -import os -import shutil -import sys -import zipfile - -import yaml - -""" -target -{ - "global": { - "lang": "" - }, - "query_data": [ - "file": "", - "duration": 2.0, - "voice": [ - { - "answer": "", - "start": 0.0, - "end": 1.0 - } - ] - ] -} -""" - - -def situation_a(meta, dataset_folder, output_folder): - """ - { - "combined": { - "en": [ - { - "wav": "*.wav", - "transcriptions": [ - { - "text": "", - "start": 0.0, - "end": 1.0 - } - ], - "duration": 2.0 - } - ] - } - } - """ - meta = meta["combined"] - - for lang, arr in meta.items(): - print("processing", lang) - assert len(lang) == 2 - lang_folder = os.path.join(output_folder, lang) - os.makedirs(lang_folder, exist_ok=True) - data = {"global": {"lang": lang}, "query_data": []} - query_data = data["query_data"] - for item in arr: - os.makedirs( - os.path.join(lang_folder, os.path.dirname(item["wav"])), - exist_ok=True, - ) - mp3_file = item["wav"][:-4] + ".mp3" - shutil.copyfile( - os.path.join(dataset_folder, mp3_file), - os.path.join(lang_folder, mp3_file), - ) - query_data_item = { - "file": mp3_file, - "duration": float(item["duration"]), - "voice": [], - } - query_data.append(query_data_item) - voice = query_data_item["voice"] - for v in item["transcriptions"]: - voice.append( - { - "answer": v["text"], - "start": float(v["start"]), - "end": float(v["end"]), - } - ) - with open(os.path.join(lang_folder, "data.yaml"), "w") as f: - yaml.dump(data, f, indent=2, allow_unicode=True, encoding="utf-8") - with zipfile.ZipFile( - os.path.join(output_folder, lang + ".zip"), "w" - ) as ziper: - dirname = lang_folder - for path, _, files in os.walk(dirname): - for file in files: - ziper.write( - os.path.join(path, file), - os.path.join(path[len(dirname) :], file), - zipfile.ZIP_DEFLATED, - ) - - -if __name__ == "__main__": - if len(sys.argv) < 3: - print("指定 数据集文件夹路径 输出路径") - sys.exit(1) - dataset_folder = sys.argv[1] - output_folder = sys.argv[2] - - with open(os.path.join(dataset_folder, "meta.json")) as f: - meta = json.load(f) - situation_a(meta, dataset_folder, output_folder) diff --git a/scripts/debug_detailcase.py b/scripts/debug_detailcase.py deleted file mode 100644 index 28b43dc..0000000 --- a/scripts/debug_detailcase.py +++ /dev/null @@ -1,56 +0,0 @@ -import json -import sys - -from schemas.dataset import QueryData -from schemas.stream import StreamDataModel -from utils.evaluator_plus import evaluate_editops - - -def main(detailcase_file: str): - with open(detailcase_file) as f: - d = json.load(f)[0] - preds = d["preds"] - preds = list(map(lambda x: StreamDataModel(**x), preds)) - preds = list(filter(lambda x: x.final_result, preds)) - label = d["label"] - label = QueryData(**label) - print(evaluate_editops(label, preds)) - - -def evaluate_from_record(detailcase_file: str, record_path: str): - with open(detailcase_file) as f: - d = json.load(f)[0] - label = d["label"] - label = QueryData(**label) - with open(record_path) as f: - record = json.load(f) - tokens_pred = record["tokens_pred"] - tokens_label = record["tokens_label"] - recognition_results = record["recognition_results"] - recognition_results = list( - map(lambda x: StreamDataModel(**x), recognition_results) - ) - a, b = [], [] - for i, rr in enumerate(recognition_results): - if rr.final_result: - a.append(tokens_pred[i]) - b.append(rr) - tokens_pred = a - recognition_results = b - - print( - evaluate_editops( - label, - recognition_results, - tokens_pred, - tokens_label, - ) - ) - - -if __name__ == "__main__": - if len(sys.argv) < 2: - print("请指定 detailcase 文件路径") - sys.exit(1) - main(sys.argv[1]) - # evaluate_from_record(sys.argv[1], sys.argv[2]) diff --git a/ssh-keygen b/ssh-keygen deleted file mode 100755 index 3b76d1b7169f4de5bb1a8c91f62e4a808f185fa1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 477488 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

WBbrwHU_%C~DEwrF|4`xQD*Sbd{FMrSm6CtA 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 z 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 z zlzcpuw5C)v8So)3in~}1%+biS9MJSppWy!g_|A&fPdVI3Z(%mI)V;@c!>b${U?i#X zledV4RaH~cyr^<-{dhSquiRZKrw44D=VQ7D!y1wJ-fj-k*J+H|0bJk)a48i4%q+SV z=T2WmUHX2JT>2h~5ex;iigU=2^C`Zae6tI&lBW=4?Li!9Tc4G$Ik{4JU8Fis9LB%g z(|IPrlZx0^Q{|U^sUcZ0hcy}x>sT`Iyt_ioCsp-jg1jN+x%u?m!fTy zS_R$LW6er*@%Z3^=o|35t+RD*Bbj@Jo6YT(#2cB={UspLZ#DWi#phf{u~S{K#MgGx zJ%LQ-cC!z2&7IHKTe{Y}Q@ZW9_NuO&{HA;hJQTvK*swk0!zSh|*vu3`PC4(41}M@{s2j9TUz%2?KH z3;v3N=DY>hW;33eQTzEph@ zHXC(CbTa0Q8yr$}+FvA~bQ!dd_5YeZl_*+I2f`X-@fgfDC5S%X|lSM>3Zfuf8+w z2}_gn6p&vsQj$tgLbRN+#%Vk+G!(ce?3uXZt+6_DR<>7}d``{lI5tg#8Doyh_Bn+< zGr!NBJF+C&H|8}QN5h%FTe>lK5snNf3r=H1^QrQ6S~d7QeZhRoJY7h7{Y!Gv| zD0^m|14wl~{2DCtwqW3YRb@Gi^0vV_>g* zW(O8=0~yB{{igrc%-iN{wLI7yq(O?xX!12&PwC)~>L4NZ z`xSTVRYmmf1~!0(&HhyNfxnvdW!Io%;1^NV5owsV(&r(~1&M#!Qi=+ds_Nl7IX>6P zbULw(XW^=8G@MS=^ttM7Fui5xk-lEqNbdN~^7~}bRevcAwE4@3s()#33DDaybTfL; zS8`mMIioO;>EqzQURw*D4Oxkqm1Mff8#hHRGpdR^@)zcEP>4iZh3%UI@}kjH9h(gI z^IhSp17oe-MUHOvOYS_x?$1+2<&L2)*v>Shv2K@1t-tpt(H^1F;{EvLtZv5}w{y!W4KPhj={~fF8e>(n=W2~V?W(V^T zaLiLca`u==qU!5;?0Gj@R7tr!lKh$R72TkXkniI&Uz>F(#??{K(iD~ANnsStEd+l z();G=PiA>@Q5O<=DnWlT3z~~|%q+AwgzQ5XnWvkJ(j=6sg#Kh6Xf9es!bm0PPbSq| z)J#I167(mnt4_^D&ygm6IZuDAGemRIgQU$+n*OBEw&jwf-J>-9NmtplNuvnKrAp>HIr;RVHWZ`L|=2}uTxgRYnCIU4-;xv`%>F_4Dnve zygCpzKSZn8Ld|g5Gw zSv!Ai>Yod=MPMJb8d{83J@P8*4(RYr~f2iEa*c8Tb{e@B>unm(b7UUV)sj z|7t_MhDYr2Zom9< zpr8Rj&UhBo zY4}_wdwhMrzpQ+|av%lFJMTcgFAMiv;;`y?0i8Q`vkK{Mo@2V{@$} z(KOx=RX<^v5L08i?`j=$Vfsy^s#(U` zv-0czyZ49?DHCg{HVP#_a3L}M><+%&{*p*wi&jx-q3OaT@_3r&^S{9#M)0Yi``>{d$%f(+qu&>zSprN8Qj1}}hcqtsd=a6s!G46tjdq;)`mWQZbWp{=HdUb9CZe>u)#Z%fT=l zYdpo5D^KUFFH^KZwDU8N!nAY>yIgHK(C}PVp5CUBVshz;pi^skCKo$T9Tk9?-TC;c-{>kDXZF*A`?=6IKg8cBN z^#)wS5}Sr$R7?$PRizGG<~lldo4O}{5ylgl>r0n}3rhoLB^rs$^>We2I?+r1!;jOP zW@d4(_Bk(6lbOjlgSmZuTQeGrYihb}D*9&T1^iR8qq$R6E54oh6Y8Jg&F%^jZ9h6n zcttEMb`X`Npg|_E8h<3uYa~DqL>-nLg{_&sj~riLW+3T7OjHH#@8>8Ca4ENl)tSV>Hl{d+YHSF>^UfSJPaqv%o%MwOQh3 zSc}z{jb0Prhc4p1k2g?#NP$QO|j$SJ6og2(5Z~MGUI6vdq}5+oC>JBvA9$CXB>I_#OAo0?E-|YG=9pja{vHNfNl(ZS?Fu&q2%%N1MO&HB{2Nmj^CA;R7`?IA{y69vSN`>~`m)KS zLi-;au1uWou8|`M(uU2qS){~N`DcG-J4_zQ_VKfRW&le|BM-y%YExAUDS)qQ4*oUq z-Tl1!GiVv=q~@84@V5iu*XA3oB3Oj#78Cv?ocIR%=isB1Zf>R(f$%N2)F|WCzbnwg zViCFU!qias#5Icshq$Na)z2jl7gp{(u8!@WmL(^7<7!F5x{b8HrlolkQB1zG-yF!=*6FRX z$J?oH`=NYbQnT)NliJQ!)%O8ysDg+U3Wk{CzL(XDw4C4y4end5=Js5N^?b{u#?N@M zA45xv?>c@a%A8J~3juOFG9wTBKE1m$%>wo~&K|@1{?3wJm@6=eUD_>IbzdC}oGaO! zu?umSRVk`|^|;JB8{i$f{jtO6+!hs;SuD(eX zzD(Hw-cC0pKJNcsVspik8^%^|S<)eTBz6n&@~vFjSUhpx%rNGaSQg<4qy9^X={%`C z_~DkO4zVvAHx$q}f&9zgdyKxVZjo4~eizcOas7T8?$m3l`gMGPMOkONT@YhWZl3_N zd@osb3vDEJ2RWI#kiLN#FA#BF&RQC#SX6jKw$^qzN)>a{U&K`2* zUl6qPpT$e;s`2XIp!0At(lt4`1b<^|udpsx=B{Wkki4<`{AgZD31UYp7@*ncNEuc$FWuS3qx7z-h zhSj&6L3F_nu=aFbB?vo{kSJxo{@5kc$f1YnW$ibdP&~&kM?m8DkX1e9#9qEE9>z&- zs%Y{193*6Bw_BdozJIFqMGv6kN8(+}RHuXrw{lf=t`cqMd8AZdR!pky$n!qWE*VL; z&sRA~#oKUxscOYR!JGD1x>wS@W0-;D5{#`I>k(E|@G!=_W^?V*94E4IWOmRLb1*p4ykE`ehW;>~3t*S>Jkd z*DEl{+hPvg$}YJ%degqe1Ttk8uImAB>QcUkQ!&u8Ddau9q|p>4iYirc_pRQvwT1Ar&5fVz zi_6s102>pvw3|ft7=}#nX3|0VKbwmVrgET80J3LA=6v#-i?+|qrEcMCvPx$_zBkBD z(*cxG{teQs`tS~gn~VOgI{ZtlYW#FB9&AV)@+VRfMR)So%xqSbg|;}B=771wCKO$% zHmrt@-xlds^ZyxN_7U7O;FX|v=B<{l&W$ov%yUL zvIK3W>kPp>u`^t;b>c6PgBxih(G*Ty7vwdJWY<3=n&O}I#xZR9g!jY9-3~)jg%c~9 zC-!aA*Ah*M#u153IJkfsR!~b|{-I*qgwMlp4EZ}JtL~uLTt}1s*j#iK2_2vVy1bgN zAv{3gId)9heOa>G2y%FW;6gqI@zB!hSeMLy&9K*<)3vQ?))AJ_YHIFWC+c7@De_U^ZCQr~EHqI-KlrHy_%`hAYZbe4W%B zN!@~g;)o$MrAee8iLc+5d%Sb%Ho1oJFVcVeltwWLUSB6#emK$NEHyNRyA!)xCzXej zhv;{jOIEG^dn>}STjYr}FfQ83sYc`4eG^3mD!7Ktm6T&#QD9RFb90yWSkBp%WOFwM zQ{iO!a%xdT+tkf-L|xoc#CN4CM$?XO4xn`k&Q!rAq`8_=*3jDJ;teuYcF zL&y}q`2g~MQ%9-cshf^LhE#ow>!*V1?lut!)_)56P2S8E**_{dlk9OU&Fc{l7~A3S zY32M;IS9pMx4vYC5{6ey&b7X>^I0kke!aD4;kG;G!jP3&4=Xv@tw6=W1lJ|O#xZL+ zUh$?W@SQyAP@&mvq6X=1Et=FCa|7$YR;qg~d%80a4lJp+sbfxY-&gAUvHDKoB`;W5 zF{{&<}(9z9Z?cugli5Rlifj`1MrBkf&(8R5k=X(POI+^S_sb5{@y!^~MPgq}j~ zd?mxr_^NMJfx!1cZz@;c^QhoAR7rnFlGUB9?B~r1a~T>V@N2jiHJ*lhaa3mRSlHS+ zB_k?K9J2aPbiNI>p3JW~)q;^+M>f9#Dtfv5Ua0S5_@0%oKYwO=+KbW^3p_|Yn^9%m)!h`%OBE~zfk#_r+b1nRdwVFJFcE>MP_Ov z)5d+={v>C=%LZ?BraR=`S{l=h>MPN&$AIaJWEblxoEIamT!h9*!i8)c^lE%Z2XE@x zou~pG6ccSAlIW@jmc05eIDyukvFWzG7IOyN+B_sqPJ4uIp~xiancMxOYMXSqnu2fN z^G{R;I!71gVnNmQ%*v6>X^>1du%}mFr^dN=kW%&<`K-?%MgPpyx#~)hxuWAFS%_jY zL!gPIob$IC20=24+b3wCJWQsVTJ1gQ?-B>aOM#+B^IH(*CJ2CRxr)Y!H-kq?2n*DkdIU?{+O{+|9Vg)^A_L9Pp#{ zn624miPbM&LLYLUV0I(fpqRBb^KRQ6OJWck5sNQ2Zmjo#X48BPM~5!KrU=(0>Zl*z zS;$&t5bSrLhQx=&N(VZ}ykR-bQ=hp7*-zfOlXaOvb?jvx^DrP0$^HawRYsj^%W4&| z$siS!Gt$rLXU=0eB9THV?rwxC;KC_-}HDy0~ZI)*KR=5xpx}y>i?ofqc9j+>}TKBTkhvS zK|Zte>Niou?nHk9>ouD{LCVOlS#wc^)OD@q&wiar**cd}2l$M0%z8d`L{f!1!y0!`L#@%w+dUPcgfW3we3hYuHY0277rh{XJsH=}`iA)oT{qr$Kq?Ph@Ax z+5b?%5B$9rb`&0XVS39WMw~?fF;SH&(^>5l{=O`m-JJiI< zNWW?`-e&me2|wtM>#QGYSx1(e_$R?gr)65-3pRUW7NifbR&9|$V6%5o(So;N7P8>$ zU!7f(kwMMr%P9qutGCHmA>yBNSJJi@>15g(D^sx<(ttKv7deJ?CBrhO2&N#S`Uf9{nt7n6a~6vL4{p<1iy(#-$osh@E44To#_h zqH>_Q)Pd&tb%5r4Yvrp`X>pV5?3NjBve>-)lvXe{7O|2mmP$ftQ@!^ZYP}(V=H@T* zvo;sAj={r2x_AvIL-t#tX*$o)URf$tMCN&1yvUP*7amA8|eZ?7rd2~&x$-AU+=*fru1f+QS= z{WVKtHAoPptmHHOxLp*sKU!{Www)EI<(O?bEDq)*`!#MYea>vthiN3>uf&`oyFsF` zEZtH2wS*Q`*J7PoJY1FR>Raw8X~##T-bFq46lS`LYF1TeDCgNCF2jUY zQ}AAL$(X#vj&b80`|D)a{#y6ze)7ya?)wCNU+TV(*7uj(_v5(f3bdc%mzfI>%h97f zk8ywJ<(=*F2+5hMdQl10B(T$BV=;eXVPH#ho#iDQg4C;) z7v5%eJ4w>;9{sxWLd$-&f4c#Sx7(Y8#KpI~vJaRyw_GTlYl+#yHp-9xd=}Xn<);h? zTz2JHz#cJ%URIcmR%V-ngOSk9^Su zR?HQ8v)_rYy|q)5*U-npy8JbGxHffv!PvnkC&DEGGZ9VNdRzK#b@p8KSs((CVkP4L z@lTQK?*kLva%S1~w5ZL!+HtiScaH_OKNqzU3j}p?lo@}sz@%RmFoEIp-oQ{AZM3X| z}Ti#UCuAxO5N%!>Y3m2vtBnj6}0wgrZ zg{BWMhjnuV>ecVhL`LAc-Q7+@27N?249DDzv>5a%mp;K0CMK59S>lP@aDNW%5n4d6 zs$eXXueMxYmkc8R)YzT8GcVEt_RxAMn*_mN$^nD}XvydQ?tFYS%*Qa1NaFdj!S?g+vTFNzTUmt9S~TjB_Vc!~F?{00 z!d12UvWxld^}ns`I{S%6Yd`NVg2;NUFYUAPtb%b)cWv(=@>aXk&g?@Maoh zSa2KG0p4tl|BTAc(bK_5XSg=S=)gP!p*AcaSS9BvEoKFTrqAwYUXCSBl(RraY_J+8#&7Mtmf~)Y%sWx$C zu{mA%M9;w4CC5h91PEEnXgNIaeJ8Abp5>!M87LJ0C{h4c_W-K~ZWRYr^=xJt9f(dp z;)FpD%dSXR|KlbU#tK z(-**D{Pp_^LNZ`Z+B@h@*{Jf(^LCJXQ^g!hW7=^Ng424PD2UAtuxclDiS43lTayIb zC)8YKdl5%HiC)}okBerBtgCaauc5T14o&2^zo_|Z>{>NVlFW&XHj}ZMeaW}eD~*|$OQFjwYdWu~f5xWpffla4F9nvN~CCps08(xf1elU@7>D%BbW~)dyRerJS z?VdknXLQF?U_Q6iv~Y0!>sAv-qh{~NsK^>A8Hev+m8QZlFQAq?t^5TE=FE1DIDW1O zF9UQp>WD~UQ)DaZ$)fAJnP)@|wAS0YB351Cn(M6QQdI@+*Y|%Hkac8tsY}R^kZ0j^ z?Yn3{-)ZY@&V1ChimlE?dKWR-UG7K??};C;FTaC#ZT)$t0}i`G`qBDV|44oDSAplJ z5NB=bN_<;djEuF?4-y;2K-g?Gg+=mmX?_Il>*S}*Vc?PEq!%Msu_8K4GRuCP?-_Ef<1ZGYQ?>-0N5J+|{ zIIL?&dQOZ8`<==Em3w&G+KDgft@U9^#E!y~YZ{mISj{EpTmt=KeVrXGzhFQXbcl(ccEBf>_ z#ujhw9Gfs@cO73RU1cBm(%`L+&!ASXe?g@AbUTOfiO%-mB)+@%#M1c2QnuI4g})KB zBbROS9%z(Tr}7HxUyZG0nfI)JHQIe{Da~4x^#6M0TD`kI&*3C{&#rB}yGti!Y|n^J zu1dO2>3@8pK#>mjXz6q{)HYub8^K?rCb7wT;k0%b=7@d#kW*vh6~XlrQ^QaM>Q-$SfN_17TQ3dxdJRDf)`<;Pslf zw4!O!vzfona0!zh%RJ!l=YD7YV7@`jKo`#Y*7{Ja1%P=Fs4o*!KpT_Qv@g)D&Dn{* zlUGk-_q=Kfh*uq14a`7;WKUc)FY1f1vCAzZw5Bs>YeRIxPn zt!6t=w00fw;{8U%7uCphY9tzS4eVzd*rt;z4J#QTR=C%&3+dt7S{D1#j*fxalh|P; z;#?yF!xEUER#VK;1%9EW-qd4h%!Urn>2F&{m5oYYtB#$04P#Z5b@gQWPgc_jgyxje zYx+C;3%$`U+H{OGsVus$CS7V0>}{lR4ic)s_Xj9= zf+;&FXMFVPN023%LD$ws!u#0KvhJuP?@W-8#NP--)H!i`^?#)h%dmH1Ro%|RVx4kf zfE51cJMy$ktG4ljrG}Ud7H7MOx4s}YNPz@rvBqdyzNlos4mQZSi?+P_Td1yaFq}Z9 zPI{$1BD(>2S?BNdrq^3S9tSf&CoS{Z3>P`%2zFUW<+m{xpa9+Tx;5J>M1ikM9x>DL zcVteMzmI{$6oU22EZMsEYt=i|S~E)=9-Zd91&U_*<_&{%RkehE=Obn1ra}@CO}+hU7v+H@5KEI+rq6#DMfzV9CDd)DGCo=<(?hj{iH>;%E{56$283`SGejF!+09xpG^ zn{?gvh+T6It!8F9P4%R_d{d!}JN)(gBl!oCpT5Qpyqd+M_Q%`$7DH79YW%yUlsSho zq4*oEHvGH!2SDcjNY(04>YDtl1-XM%Leo~mn80yOglf?qrdY{}uF6SW^Jp>sUa>%I|YPe*O;_}USDC=k* zfADVKCGgOGzwE1iyhLJIMos)?g235#%kk)9%Y}cUE`~3b;g$1a)f183qc1@{&7#HR z;9bKz^|ck7ylKyo$z_=N0(njUCHS$Im|G+A#Rt@}F4=*HG% zbQ9a#e2wbY91zb!?#dFQ+2t0v*YL5rPZpLTo+9M5U+3mITf3Ap83b0q{6&gnVsR2m zEsUPcF;H}JcHWtX+w_~-{+mVwV@PMVsEFBN#V)v=wwhLI!BpJ=7L ztDjFY!E02(&cthYl9c9Qb|&c)DX+Yq^8^@YAe{wOr>9ZK?0!g7)>}a7pObBFVbJXu zOdfyHEjUQUp1{j{q|j>qLLep~VZEy4XL!#cA@VSf`v@_;pP&O_zLZTAL`IMTRRi`s zV((%seRx(XS_S^rV{>n1pN8Icg^)B7)4U#hPdmlR6HN|J`v_09ir)Qnwp~uri66ct`a1{X zVg?}I(Nm*n_-}yLTp*IMZ`YZpXv~pN`f9Q)9f6lT*dP68U_Vr_-j{(m{~dHgMTgT3 zFDs9yY!~h(_5#|)W~^;;f4Tt1arZP>nEnn&4AQ>%zpI}C6xBI>kv9k|NBoS6Hqg~o z|I}LG*|eSTkMsC}7>;=1P3E=V3jiH_YvtKop&Lku-#*cp)WPHcN|#eQLUiq62;0-l zed39!Yl?8g9RSO(iXBSvDn_ zp~63#jk!lX#Hh?EWs|u;HIhT-_aWQdq#ukH+UV*An3<}1bL=q|PkrMq54GKg)ZI1h z-9@_WSM#X07{+yr?P+q5_)#`Eu{V1dwpy?LR2W4K!Y`OP)F0Q9p{-D_iLm?kW>;tL zcOF*RH#&^SoRtHjA5Z6o4F$NXlP$z;(KWL6isR(*k+h~6*Arm=`Kjd>C)|s^KYMgA zl7!5cZ3&+pEOC0MH#=5<^wZ zi&JN!tqv=o#H2xlUY`C|DDf^j)w|(D+ME3*9K6$OjClIFt?A<+!_f3M+bT?aJ9Va- zoOB?C;~UPO{%$DoW~NE-jhpjnJM(brOxu@Ee&QQWb_E`S4mqllg|6ElA@44eusoI`dL?`-mm9b?3q-g3@U3I_ykFgpZhCX=Y{1(Xe+oe4^!ysw=%gwkOj@;zK)|L`&TlTS@9pEh=bA zH6S88>KPUYFQe+2hXF!1*%alEaw)68PUdXNxlumKL^Jcu$A7ZM;m5ND-V-OVcH!q= zp#bs4HGa?#Z~ZRT#XN0`W7+5=Q{WJ%c1bcR%T7&GpQnl z(tCw8$jN+7L*lwt55T`H7(K_1`UplnXaP1WHEJ>pEM)ig)ba0H+Mdj_zjG)*vHgOK zU9H8Ky$4`heB~Jn=9!w~3Qz^VH7n6^K>Ym>IEd(B0U;NV8(*Z59zCw7cgj8C%0*qd zH)R~Rt|IaIlxr}(08!p@aQm-OZotl~SF_M*&X4db?LsX`>`d3)>E?5&^uTsJCU%^r z1hO?NsKV^;2DRo7KB6buVd;GGC1g{k(KJxN&QthFudm3()3LuNozm{N)gscrv;HZ{ zAG9Uiz>i%0(5U%3@xko5(;D@y99xMWHC!BHshP#wTJ9Z<8;i}K><{T=$s2o`l>e(| zawu{j_2@g_tTjV zO<3$3K56OuKgpb|5-5}Tgyy|qmA7JpGDr5dk zdHd*fqJz1U?+9_>_YaW5lp*L3w?@zV0V!PJlY&!Mu{D=>XSSA+-D-|a$r2rXgVuS? z34GC`$=zf^gG zH|Z<>(tWSK_;I&D;KjOAItA=QagjOUig=#`E>YUqxYO&1&|D9z2ua-zi>#yZ zP%!qg-TOz+40|uY3waUTopGdkJpTj|XT}|lL7gI0SwYmOrNYMjd3y0{EG!zlL{BM)(svP?Lt%b^Z>f3!JCmzTuPomQG1H1eMYa z06SYrmv)31I4J=fwBOQp<3MUy4+5+gu}RwN71bn;9rP9Zr)b9!V35t3ys8-0UiNuU zxGvY>;a=v@+thfA*`H4riJ0~}=?6ZVL1kJwoWC-&`y9q#m!toiCM`oWNt}0GppyT? z+?$6-S)Kp?2_z5|ov5f0QKJS8iV7&22$75goj{@}f~aVzRIAliDl>u$5=^2@$5C3B zT6e2${j|2)Rw*D$SOc~y?kH7oKSPwbR6tbnd%f@TJd=si&+q#F@%>#tu8Yj`oagN4 z-p_sRgO`&GyPa^e5dy6aUrHAGYQY!LRq0+7*%RZykCeSr*2>~Xm-$!dhMiL7|GFMR zsG=wWmKt%Jp#DZx!db=0k`46Wt_NVlJ%tiJFx?h$;~Zm@gVxhuCXC7J<=z1sHBWB{ zE1{k*@(W?(0)gDE#YppetePlXE_uuDFKPBC&?9e5j{nB=FG5k{go5JDhMpWl!w%g> zO>ADouhK03>Ki|sea!zj)Y2_$N4%84`0)eWUvT40F0-x^&*j!r7=N%{0+Sx~$&(q6 z;G{=w@&Yd37}R3+K(pM0<)ko&<#%(Y{Sl9%^FrB9E_ zPmV?kG*_%%YqdtQCgDz~qNzG}JZ6ar60`g# zw3o0L!?koLVq-;0JYdjz?vq+414n8Y@oZ?j@&fYA$eWgNz15R|XYy-{0MZt*LOB#E zIIkx8I6SMCBUN~3b0Sy`zai3m0K_AfzA_)1m2FrG(PtXD^#_jssp+a*8EIT*^QQaM z+>*h% zlHUFB^L6=JeD6k=4|^y$mY@Zb@@UyKgBzl2F6tHfaovvN}p<8P+fHFUpL_uS-t`?6&obuNbLskCPo> zDj6AByiIE1_2lKfuLKijq$u=1uT78SCIDRI;uoNUU=Zb?aZU1**wT#!TnpR74NH0$ zdtIjvNkkDTfRD7hsf~P4F9jV~UH8uO{nVNby@Ijbcsd|e6Ipy+zK2)cu&~EtfLyxj zmWK>{2F^wsZq-=*~V)RP4XsirbDlGSG-%?~R>7#hgr z?;s-7NM!W_hFi{@#0zz@bs&>a&caMPhO_!DMfw)Ye?8Wydu=XL>**nv0n2pq@dvGw zshdUVtbO+Hb&EV8*7iKq;}C+kll>&0{Wh|DQ`fnaApKCEz6Vh6P9@2msj0-F*Qd|9 z%&H$?)mPKtkk3FW+MVdz-J1_IvhXZxLe$CrkU{O2ZXWRXvAd%!B&Kw=K{%*t~X zkqyFVggP~|uY2uLZG7eFZeP0Y zLn_5z0)m(i_r+{RW5FEa1EP3oRgUPL*u>qj#;4qnqqTdmvS#Sy;>1I)HJdl_ihC0x zm73Aly*txG)~wppg(b1naS|sFiJ`k)MsAk9`C{M)ly1C^&AvNY>;!<$gK@PY8%DNg z8SH0ddP2VgIm_se?7d*6X7jzfImS8GjYP~eIYVUBx~Lo7R=D&4&Oolj{o;oG+v1w9 zZ~*b(L-+Uvfw2{s-vDW(mc*OxOGtiW1(afW;yK%YbR(|u-xhN>?;nI4>3v=&%9ie4 zOjT_e(HW`y$m_lhd{^i26m9&b+ss`x|7b+$Y1}3E5igmtYf)xzqZKA(g0Jp!UtO0Q z4!u1vyJsskDThIV=S<+N9X^DJZGok)H~}s5YlJK_waLzK87}#TYM;bovHZ70Qwup{ zQ+_QsSI>dA>{g%LW|!z-sxT^Pwsft`@_ctakii}^F8$(!$H0YSm2HVN#>lc5N(7b0 zoc#+0W()N{mT19!V8{yJiMCblNCw?i-jZ_5MwG(Xb;`8=SB0+7UtP}WUeU@5uO@eO z6=GxbJ(k*=dx7GYHk_0fpNvpnm%?C?E=-LTP7kTM7lQ)+1SSFKe&~1HSSvKF%8vtRLle+gvg?quSyP%bklX#j+QtJmGy87fIT$?k2>xzCXXyu1|SGRw$n4^P5} zR8M=ea{j%mz8(2TPZ=*M;O!%^$n&w}iJj#m&)ZwJJa1j}jZ2oUD!Rn7`0~wLv{Fmd z%}DKz#SX=syOu9&dAa_g;@DDmIJd)J)}qu{a_|1F?hUXvc6Tf}qUd~YkF|B)$z@Hc z!n@8_9R9?$IIAt`N%d~gG|`F#bOTZ@U@( zt;LmrW1!k6B1)XMy+@cUbNzjfv141+48i>&ZYJ8$~s5#f1(_%?+FrH%9I0ubJHjU;iWzQh57#^AHthehGlOx2hRxTkfL{|N z6(=~wY0H1X{BFI47pL>y7Gg$c0Z3}ng;QnsfcTdnG1BFl_Bdp?Mvso9Min* zh1sd;ke|H|t$^Vv!FaAvqaRP-m>_ztzM7q#}gL6W14E@ZpW<|}IZXB119-`{Lo zV&^sfdcEP!-bA4BxYP0oD#s)4T>9IEUi>%w79Qx_yU{e3qbLV7_^k+j zwN<9efIK{^e5bC3XI8BHw5}ome$TPSnWe1Bw30+I;#4^t3FpU1)4|fDhE6S>dZ>C2 z)@IKwt<;ys6|tQs$;>^~*SM0J@-?!_CavB)VH*h!?Y$a-CJ0Ce;NcLr@4?Um9})V81G_Mu=Yr;-zWa3I#6R{!4I z2ZaXL?tTeoi$46D;|d0ZTJ9^hdGb)|*E~zEX>MoBJ+?f<`J){9jW`fX{ftHyd^Ow@ zJcIk#i<^WtT8Cv8J3^=BrDvg*ZB#snHRRx~TV;5b3~Mq9W&!`5^=;$``4u5qJxeZfuOM#&A@O4fYC~+u zYxxG=a8AD!HweNkiTi7kZZRr+Lr(;j%5_&AOrG>UCz4rN`CRog5$WlB*ypJnOEHTU z5@5k^$dj%*!RmD2_+Z^fN@hvI1KQggQ+iO6<0;(Nwm zlgP7)qF5EX<9Syv@{Dh;yP3(#)whygA?kLc9k$UsW-@&d^>A;=lR5W+_2xb>BFZH` z)`egp{em_Z%@-518J4I}IPjN{03|VB_n%1=u@V52^k4F<3H{!EVzxcOUEc>ct&eL% z&+W&e2mOnsiX(H^$C#f~?|WvC!)5A%yr%UD{H|69GjY$?H61@=~l_3d6y(lD-d<<=HACyAzNYmK>R^!+C@pBeP62W;>hP{6XN9DQlIB5hYQ`&J;gS0o44|+X4hhCpd zEzD#?;ICs`+rx)Mqj?6D@%!Cy8rIpsZt-8b?g=SwGVHy1o4{Aj9UJb(2q|cN*|tN-=-! z-qn<4P`*M}aXH52qx>fFeK{3O%2qJfS8!Ukf+1Zh*!mN-)b3vRsa5p05Pxh=Mf*_^ z-I(HQc^z`^$J_pEY%E7*{-XSUCx2j17?<2G0x@Ku&;OkA@5CcfOA?#~~01#>T=x}TOz=vUzVLJk-DU9fzP`_t8?c*I#=W_G6aO^U}@`quWW z>r1!3OTWxRku8W6TNq!P&3%hSaqqxP!p3w3!65`VGR5!i4xj>AQ|=)JyFA}3M-)Yx z6@YK@6r4&lLPd3==pM*0>L^6*U}(sFFQ5u`>~ILMug zrNz)EKi;1Tgvlyyx-sD=NOB)u%4~K?=MZ_mpkuk~!%yY%#7Zh3kT$c~ynC4Hc{%hr z-2e2hpoX+CikImIoE(Q`A8!wpq}&a_!6Mjtj<)t-Qu88g`5V7&!mPdwK`JyhbBylb zyoRq4ypAQc;p<%@O^4gV#7NUPdpIJ}G{7EkK{H;h5wH1wUb}1#kP}g<3S*>z>D04JK$Ay z`}B0La`WPM=dRF>a-B4`6}3q=Z>VroD;z}GMn>iyGqQSFABiUK`8bMCpl%ry_F)Q=~5c zo%9WFS2uK=6uIenYFU*((TZcR^ED(EGmqM{XyB{K&+4IBiYEayH5_RwfdY+6U-4;g8V{nK z>e)EncG%LoZ}zh}(cy{wO?FGFhfA9@_qP8kX_T**P}Zlfvh>xp$rlV*GHWG+nS5d2 zb*;7gEqNF_r!)w}2SkyX{e&Kk?$BW;MQ&y8TC7~7nuzpxg%6VWaB8I$zE<|wKi_h=^;Q(=K;{}rP4noko3 zU$qOvKKTAis9IektABT(pkk!_uO22pR%jrQ^C}G;rSXY3jESaCdt2j(^NpEZ5o!Dh zPm3qgYgO@d+YV8|rg0=w6F4DbOQD15uryGx|`aIymtcxbiz zXuIwTt0?gdm%jR`AH6SyQ+r1_CwMnK9M(-;G~2Z{S#_&REtSY<-BiSb3_9L3{ZQYf z<{m*Ryx*Pvk#)2Ab9FnLa~oIsiiH20R6(ybY*79DJ{H2Sh@+>yBF$?7PnB{%K2^iR z{qJX&$Zqd-8KSH3rgf`r(b`>$ zelZPTKFR^?V7?-AHA}9JzS=QFkf8{98otMXOKIB;vSB3l_wql<8u7#r{ldssgoSyo z(iZ0T5M~zU@sq-ZDa53fE$6Fy7bgfU>BEe=Z3V0Ob6@EGlZ~jq%n?lzC;G&3EHO-V zF^M_cG~oBZFSvlq(Q9%!`cj+C@YS7}(y?O|v|0Ql_XUjI$61&t*?BXQR!UM}W7!D( zEJ!}v`0mWcWq5k!&zupNyOM7WA9N(R3W&MMiUN`52Ca-YxqNS4-T4SdUQWw9FPx1N zZ)3>wv1hT{-NJp02xmYQ9@zrX>yukS zah(-&f2Z@E^I9DXFbzKyLpJZ0E6QJ1tw3DFN`KKM)|VvR2ep-#1B&)lY`WV{?6Y)OApTfo#4(hW;%@ZaSQ`?!Y z^}zLn^V;rrFHtVA$Dadx%^sA;-#C^OF?wCHUD4ty`XO(rVpok?ApmOrwUSbJ5~oVd zUkhh&8tHIX{s{7#!qy_{j*GFjJmE_Cy=48(KuvS@ZFetCGI_e_lm_B^SH&-hrcceM zFd`OF6#IH376z{8jXI?A(qlTJm9Iq_*-<0N@9FumrSEjFZ7t|USMu5hL3F+S54wTa zrubyPHRSJvxXhj@&W8y>9-Ax@(oviLZ?{N~2uPTU*zDix{>(f2YGF5b7`nSMiCx1M z?yxeD^yMz8JO)Kyi4TtFRCo7orm6pB!Td>ScJTZyQpcz1O*N;Ov!0a=&ziN9peiQvw zuaQi-$iqhyk`*+s)jddGk*O}o6T+nnCsCPJH#qrS$p)r_5B#8IVf zSK(P??*37H=TgO(DG(!;>Fiv$*?UGCwjYz&g+Gy|-%_?Feb&n)|!5u6pid z$rIlK!hiSe;qMuoQT6Z~&UdZkNn^(K_@CA#S3+y#1st=TAgGPsrxBu73|iwp0J&@r zx;^TpqvSFz$b}ae&J}A`@Z>xxJ}~$UjOE(9S0IWq6hh8_nlm}-KR(09CZ1(QrgV!o zZay}##6V|s`uZw6Q;6HKpVk}~WX(}erdveZTwy_5SxEBShJOUU#_~r(iNF}%>fXFq zGMYr`V#klP|> z%f!d9aD0LpqxMx&)q6ZOTwiwVN%3olgNt5_h)6m21iO${1ER13;$T~iG|L>;Ngtz& zRbS^jq(E9IMm|-r`9dvgyZcbT>I&z|-5d5|d0ue;;w5u5$VlG)u4jc>M`n%4d4PJ)qTQ{a|B$^@5XVFxd^zokPeWA^h>4y3QiFj z`T7TmL!n*x_^-^zLi(Yn9fsdI@oI$d@)rvC)rGIB{QJi10O+v{-+Vo|kIknLs7)O7 zonssWsj*nw^dA4sf-Iwa@*Vcs4??CxGZWQj(i1C^d$+Z?T{OlpztIbSehQ12iR~Ch zbB+&PD$%M3Fqh|ACWqT6}#%+5wxsHwBO7kQh77WmSv7!qkdLs-(df(tkU zC#mqfM|#Ar+FGeLWdz}COe{SDV@lzg>r4RAYmfP*G;73EuLWb^EOlsP)K>}(okdR0 zEovLYBo^p_x`}saq(9;P`vaZ&Q|d1LA!P);I*%Y5{mtWi!tCFZpfe+YUq;U6?2pi_ z^~;(K`c+_^wBC%Ni~IR5(woH)mkD&`lWX(y&a=}4R+dV731F<4y1uKIE_+Z=uSH!4 z1}?N`2Y9*YRpW|*)LJ{9qd|QhVJ! z#K&U$1PB9rQcpYZQ<~TV{0L9$l*Yek*uG1gt+Jju_+ap7qA^ERf=J2kobx2J{8Y>z zzR*WEEWrGRd;le(e}mS$6KESE!sZ|M$CwgRW+{pCy8JJb>uQrf&1?KLKV(Jf7g*W- z8DP<(5Yz-d3vF+CdubN_Su+mu2k@@rVuwbW-=t8j-4gMQ6r*R(WmaSxIBUEIqNcTE zKx!F>o_c7!$Dj@lQje0YvVrtG94IfBqt~i}3WkIAAj|OS75%79uI5T(4v5#`3&=U3 z*=JX<$8sj8vE#?7z9q5rXeyqVcr7w_thG>O`JY#2ih=5#MH0_3ORrDYEWsZWd2aIr z2_0>Rck&1N(yi^TocDC$udF~10Hw2U)N@#!>Ph6axg3I+oiA;vCAUhK@v_{bv{Wxq z-n?03$>m}@x1nl5b`FR(Tz?=U`(Zf^gz&4R(0@|vRGY3j5FZZc6(5X*`c>qc&8NZ3 z+4J{eYULU->th+eav;8`tbznd*EO;u9*?xz%0`p;-qN#Cq`uuFz8g24%+}iE=f8PsOPU5&^Htu4aCwkOy=Kis~**5%_5=12U;y>{~P6pKhl%>_I8*l&J;FZmht2|vLu z)v`M5VFowYF3*W?1LOsUw2!At)QX9eOpJ)A*AqD(dVK3l z#73RWoFrhmNcd!D_`GcAK4U^8W3USX?XIVfu~~SGbj)0=KcY;f)Tm>cGh>lc;doNZ zBwD2MC^gJZd+M^w@LMy8@xQRSNDwtc zNkN%g%DeWt3(98vkn~}?Md{C^4W)fxHwHWy9%Lsr zI3ae8z|STu^9FS;0yYABG~KPBRP#BcSaPOb-{v6aYa|9YUKPO>(Y%c&l|D(`L1oI% z987M>nQk;Y9;ygK5mxEhS+F2ktENPSZ|=%QdC-C>JY zyjc4tus2snLhSC^%2knchG7a0?3+7|4}yfqEiY>L9uUr9bG&8<6SM59Q@YF)T>JZz zRqjsygrb@(fxafH{Pgs&fpVSEJVh2Cw;&(1Qt;po_uJ1T9C5DN(68LRi`%o{3_1jq zyGMAn8U$k4f5P>Gw_)m=z6ZNy0^sY(h82goE9zcQ)_)!0{>wB?%>u8eh0w4#K&m9Fh)rHdlfSWlQr|xIBYXK6w`MuE0Eb0}mOmg|6 z7c?CE4$Q`q$floB9dlUh*ZySQM01`$(-+BIe_w@%h0Kd&^tC?{WQ`dzC~!4kW3|}? zcd(!y9Wwvn(U-Y0EYsPeWRVrLGVH2b8LK5(lzE1N?s6Du4#N%QbNPqL?Z(F(muB;S z;~=7hDG7w)o?u~9nZOs)QCw;$C@qjL-#LSr`AXx(^vAl(iDnownofQlBH&|XirkOK z_-QWhlq3&?hi;@&j>UL+GJq$$mHuUS@i}6V$VZ;va|oz5xppx)Gjp7F3w9o@1IhjZ z`hx#Zt#(a7IoUf;GEz3I3_5KFTE(SvuR`3l5S`lyi35>1!WbT%@=@TS`LcT%_7KXq z|38Zlyv|Sn16`+x(itE40Q&tMcmjylG4-{{?c$l`MhnakB(Q@0LGn26bE1@|F_HcR z;*9h^TT$%qD{G*bqSw!{-^a@yvfrnIDE14>T6pim_O*|jsv5qRtXH6{QK=yD%I+q+dt-BX~g zA+>i5L2AjudZby?1$42Uy&TVuB5ggQ&nIR}F98TUvnDQ6HtM_`&%;4%tY;=tuknxc zkSl}M&-JY*Zv0N!ql2<_D+l(in#sE2z6J#4-ZG-_M!x-qWMo}b;HFeOZ}yUiG2 zn-swYg`fm%$xd!~c+_pbNT9Szr?QJ`TLUYpUa}@r`5MSC1J~2yyhzg_JaS&+-C;Y} z*B}z;p1iYz6=^ErK?*9Ajh&C})_QbaHIs*K>dv}YoP{9K@$+@8eaixUSnR*HyWWr( z8RQ3Ol&EQEAI3&#>N~q4>@A58?rdiyE03qfBA{^?r`>&anhcA63+w`wBc3hv&m^E$ z_jmY`s9UjnqxRd5#Xac^z%pYi`A98kZb?t*8L3_8p6UF$^y}_!qB2Zg-`rA@p477@ zQoAv_^qcPWlkvj&y0?$pS=;yxPui$^6K8B21W~43o+==Q=_FVOizgF@YKyYj{ylEp^F? z%t(HLdrwyft<&#(=h=nGd(E+`4JE8Ya2E9`B4ml|R;Jfuz zTUfX8z_mA#rkm{H{YaDU;WKu)!wo)I>)>5CeoeBD*c$b1b?2<`Tk%iOUUZQ}L*N^m z6hRAgRmwnYv$@cY?$EDZYu@3ipoMiQ?a8#d&ww~Eyx3dz1xbRWnFUF;@*tL6^!i65^35?4N(BY_viK<3r}yi zu_iYUdIxZ`%1llju53i`OIG={W?wl3b-0)8cdPqJAZlKkBM{)BEr9^5c&;aq_`DWBmKs+I z1F9jY{-0rMArIPL0DncFfCvL1rAj!T1WydJc)$vD@+v5TM(Osh7NWzv)VH~ajOwpo zaYdy0D3#zF;7`1cuHPd125P^2tS@yfg3p`u(wGQrJcmHUlYyNZFJo|jxloiVnbr}7)XxnG=s zhn%0Aj@vb_9T_~bkawaB4IeJI9OxGTUr`D7>8LDU*+2Yl`bX#a;8`EvEht1p_B(7j zOvD=%Js&AGSk1B!9tMUf74{$|@pBPZf3oQ7NYi8i>u>}wolabJTmZuL$|KfN!-M%w z3{^fN_f3XzLP!j#Pb7_Ln{uv6Vn!XyR8V@@hi-levl%cRiCCWTRA>R-2Khy5ZlY7s zg`V+%@Wi{ROTOO8a@<^roUoFC?i*%C;P4-Q1ueG({G-%e1x57i=F;G)!u{+NrTLl3 z0srR&{haRE?kmJ=#?d%7=?5o~Ypsi6EBX(y7$zKQ-USSL&r@^EFsm6HXIVbaW zDx=oCy`nGKWwxq#Db;%b)DuY<*;^&Dy@D!lr^>hOE z03CSU*aH$Nq|v>_gen_c#D^**9!ba=HfC@|4Dlhl(DQ|0TC~G!`g8#QKkj^I61a(# z_W)1o?9o$x0KsztLm?YP=3S9_tKGl9Br5+jvS4(fXn$rI@0|qS<4>-B5h@pf7AjmS zu1h^yrrpFY=(L)7^XOE~lg)E1d>9ixOwdCYF98$So|d(^@j9`EKk|sWF?FC&iW?^G z(I=tQFL|&tVY7LdbzRAWbO6VGeb(}9b`AS?{QU5lM|$1fbfDfmexKNF~W8$6RHQ3_f?b zg&H;d)QGI91xz0nN6M?=qnRk7rqOmtfd^P?g12g>BG2s-Hve0iclYikhR*2`N@c7+ z@MxWenFQYZ+eDU-Y@kzOjK{^e_AyHex^bOwJz@Y>5yg-TfDt!keh4j;F+xT5-N_!A8wUf3 zs32pwho_tzZGbrQ!-Br3Zy}C7nzSaR*bw zO1gfmGV)dGBBu|7l7^->k z9+ZkE8FP)sjP?_qU0o1h?nGwkq$-b&)CrcUO7f`Qa?YzzDHJ=>EQQ0^`Brwc>VYSE zoN41Zy2Rv@KhsZ7ua^M29hv*X_Yk5*-7|Mv0l=~&b3GZ11JfcS4~u=aRKct!j4XwH`xO_ZI{@s?Ij0t9tDHJ6*{4=@!J_x1ZUJSwFf& zz0SO6kH$>a@z}{s0{d$;^grc73povB?Nx!PstXs9kRfPz%IuC})>%=^kW;?XJ!`#( zi?NO)weUmTh$F=>I2F)`cUZ|lSV=^WVjVqf`HMJKR|j5lye(?*{4fVivMY ztD9ytD?S;gqfpBF1ijA<|FfsFe<%hkpoI_eYXXTIQt3&mdY?m5b;4Ftz5awi5^#lds1`yu*`%bbzcd-w!C z4lpX{C7oz8Ur2mZbau4B_1;~CNfc5hgO!n{iN*vFfYd!Ev(^2aRkSP`S{0uI`nW?& zcXsYa3@H-Qc|VKXN{Ng4ARa5megly5-jRJfBtO+uoF6vrmG8 zYuVeDNH6SBY9baNC)yK^qBYWVm&!?AtV@kBF_(<3l0zZsFS?F^k?@r=f#fLzb{#ix z9R%>4U+E>gz+?pJMex@=7P$vbqCK>Ln@;fU7G?U;puve3KR?OzCLxe4j|#sD zWaPZJ4Wi|)g{^-0yR~KbRq!fU#de<=j<2%npstXD&1d z1R1vlHm9mL2XRbe9_voxDjA=aHM}W*oS2r{~82ol3Qv0hoj z6+RdkVn*)Y5^daA7=?`E)3%(u@*H8W9h1=X&DyUrOiYArxonPcKy_E ze(>qV?|w4TFH*BielgZZ?(?wmeAj=fQ$Gz(Smqk)v11|_NZ~9M^=O<~#Gp|)_u?%z z+?|iXHLwBOJ;2(ZK>8@Pn@?qLvmJ}9>DwJ}JT~RmAWxxLLSn2d6ukSa>?M?71bqlG^d+$b?BtMG$6}jJ&Y7lL?m2MKSh}EBt#@dcB&MdaO z2Y7M)0~&&K1Y#_6nZZV`4j@u2ak%BxrXvLIssSdNHUEOL-cF$E)V^wZN-eT!=>B90 z9qtiJP-lK)DO+9sG0Kv=T@zUG*s|%W#UZ?FFD;TNZlbe3o~?S3f4oqd z!*jhgJ;!L*Woro6=lHJX_S`%{@F?^8l?IrKQ`ht(9{tWfJa`FqAQ9U$^c}z)v?ef` zyTU;ED0k-%{I;X21AZI1_3j{>`)CmJFxkb@BRgVM9c;}+ZkF9I3K!{MT{JilwtM8J z2N;8b1Dp`kSPIHgGKoc+eqa^Bm86IaH2wRdP+9-Xtr=4Yw?vAR8vc^5w*33 zTHMV;Xx}@0{OfP3d4pR~w1e#|W6**tFl>W6{Am#prXuGMlMfauHmg zw~hA3dPV1PV_Zk(+s=2(Ew=Bb!#!2rO8kYCoE@$2*&iQcT5^yr+=dmssjwyCp*nm3 zteHg7{u(LcS=xUBZ-KG#HRNaHXbu~?G3-!j2}_h$Vs3;7+nMd5lpF*c=$eew$RhYA zixwc@5y~c8#uisoAei#f@Bt*}7#%PBA2pM>PNcrVjozk3@?Lb3uh~C~j|v&-6$s-j zL+8#B$k^d#Q^f3^GlkTZtKxkmzf?=kiTMo(6EfS_BmtHs!hyyJKJD(H$JBKE+T8pI z9B4lXrC#ZEeb|NbU3(JzQmLZC9UZwy-r;^P0)xflZl*T}nMY{+;qG#m?Xv8Cjn%iS z<_7)%oX1bj?Tdsa>q~IOXf-(9IWk!>{MR#iLgW`6U{%~!mcVD6ysf_StH{mbuTy_y z6T;3gGg#Ljy&p@Wk!yK8{0Fw9??RzKfMlQSS4Q~wE)kJwBY^E__>t#NELSYtHvAn_ zw+^SzYR+-HZKu!=R`jsk&eFr6vyTGTS^XrKY3Rd;6b*?gQolNNCEf#_bx3tap|;(! zNz@T-+`(0`pEBh<75LjI{q`2`=+wi=qc}QeL9G@>1o*0yR?L_dOPx>f4l|>c`%)5N zOWaU8uXajnE0_DbQB4e&v90*ex!uY98_b*&?5A~vc--0Dpi)6n=C49xPlr5Eewm#O zN#vpri;N!pgSTME?QtII{%&Wg`+JAoH$98w-rq^?M}?w}-yF&EOkN#JM|l-v5BQyS zVAVJ7(&MPneNtE5WORDi;lLk@SeJa$?O4s??Sgi7 zx7O443NvXQZD-L4@=V^`k3p~KBC`ct$-BTdW)mH5H)@XSLEK>KMv*C?!$vQ|^8`^j zslPtX`>22KgpHVccXu7kubS)HU~4hrT_e4(<;)7~5V!3O<2pLhQ#r=8)gAx1;!Ipo z)|35TIq;^AUiNYKJd3;}l>Qwj$~gp6m>7;QnOyHa=qVI`!(4q$C~Z=P%5@1vykc1p z(8EZH6>J1rASsJF(sb!*^(9?ZYh6-^q3hAKjnTBtbJZYWI9`kKDv$Vd z)sbYDQ+{alB zMQM)YEIr4q2iW|koT3Ai##`NQkb0Sldrr5hxJW-1Y~tr1|uS6a+p+}J|^8@AhVNT1g%s1N4XTNZdu+eW$C;LEU zUq*KJ6B{dvruB)YuuSe=0sL@p(X6`s)!bX;@gL9WRXxxKAgr=O#af}vgdfb(!&N;o zLiEs`F{^sybG|G7iZ5rb^=${vS=FoR0H{~ zHru*`rqgxyI`}HjF^?mB^nOfDeFsQ%n0jf&lP{VvK_F#8feK_ou zM+I_~mq#!o2j{=#i-1QL0BVbx4Vji|QEZgvM3%8J9&Y zM(!_%c!jBwx+E4?n=ko-0hTogwSCfGy`AZ&tc;}d>MeONlYjA+nt~y|Y7^&RfRp1u zJaq?tE#Xr(7SL&U0P*-tv$Lq?OI!v*E&=ubsdALKrl663Q$tO~6=f&;`{Kb|MU~!C#xhc( zy7Ii@$W5n_C%I11=VRSZDHU4fM{eDl#Jbee8ba~-9v{X|n;<&W?eZN7#S8-?+MEpFH4ett36 zkZ!~8mN}aj$mO(&95(9*lyT^0a>0$U{I$C9D?Q{+0baUlIX@v`uuVuF(r6~)kF+Mbpi$cmLy<$p$TWyLN9EG=vL10nMfOhC^3Lu^N@RZZiS zG?|^oo7t1_19QJVOw)_>`up^&lrCo`(gl)k?4hCz zRZT?W$u7yks`4jRw5p8{K`+a`dCT)AtB3LVO90A@7Coo9tPB4OCKI>5{0 z=z8XTk;qZo!&&+c*bU(HdtKRy{H5{cHHqs5i>1La`wi;tKJ6^AJF~A0pogAmHgl~SOtGG10ajbngsFWHrr{qcNvQ>h2g3imNjnZaON zXn#7B=7zHrVTI8#YGO=uo)JZQHn1)oBRqv$c7OtZWPW00!NwuKp%m+Os9(n~PGjvI zOY7z%OJ>Kb_2YiLkE^?^Nd@&?)r_g(rw4!AvE<6)Vys=OTrnwVK&QCVV76E&5-jTn zc9o?>s%5j-BG+C`Hf5kuHRdC`3Ir~1Tv2_&a<>olF1C8pRrA$Pr8(e1Z< zx4*&C)rsxiU)1EO;9N4nD^vYWBx=*RvGOVyqa)GjqyJ9fwmr3PU7zya@A`OLt*k9} z{*>|U1#Z^b{__U+;o;&tiI;*%PdWS;gx9^v*?Z-JpkK2-E`fjL%vn=e5eWc?l=mY9 zYIw*A6lJ$b{X--W)~keF^)WSKQfl{>Z@cI9%i~qtW;cFy@wXIuN%)+U_J@%7wTXbR z&quNgLsjtPJ}Z|__mLS_-SL-;C}BH+krk;0goBoYlwor$^$bh`aS(REJLZV? zN-QMs$-S0|$5n3agOuC4vI8LTm&LU2F-7ZD=OOZWgG*GvS5KIIQo zg*-)m_bvdZ*31YPc44z`n}*x&GA@1TP zt5T@EUzpkMbfXfB?70u8Jl(F@Pf#v}@JJ8&1Iid>-=VBKAQoOKb|jzO286Dz@~)!rJanHt?2t4+gJ(Bjeea z#zHRHuMQeBDNpc-XR|JbX-4$4YzzKFP3Z#@yt^^vZac)&5rP4{h%f}5pyOw18Vo~@ zCX1W5uRh4DHnHyf-0P!^Pn}9Ps`FMAa0HOO7`8n){8#x}d~?IFo~3cuHG4Jpp>ug! z%zJj$Csz=8nehH!97LPTPEmU5tM2$dB(Q=uB5V09}P!EoNo7U-ML{k`!{jMy`c`@<|gb zFc~#LSc4VV3$h_hq>li{)N`xV<2r~D(Dp3T0Mdum^0i3R`#pX8i+db4nY;c`+?|Lz z6`IXi&6M3#mHPE9>P5P0tO~ydjHMbqYvMk~-QF?mrCb z=r~Jzo{7U-t$m8oEL#h$BZ}=Ab;2WK=9dR@KdGOO)94CSwMVI{)yo;#e7O*D$((V) zKv5GcN>{q-9_Wwz0Juvn(iHf$8Mz7(wOQ{R7~C!AzTZ@{pOwThI$7Wj>?6iDW4h~Y z4~rTo;fnOE8?Za}*I^l@v2F^@JKhuh)6~x;)=$r$z!~DyC07g4KhyeR_6Cd2K;Cqt z=o$)0yq_A>6c#$~&OW2qJwOB2(w){)4QIe}hYP&OH({%g0N-YR{ict-BMji+Pt|eT zP(>n5chW_3De-RR|)2XA#-^%dfo0u!zmedcDZb`p_3!J z1EAj`_In#qC~Q(aVggzQbX;v;;n4vR-hv=;)rkDOB|4Mt9^H%c?}ew68_R6`LJob6 zQpxm?3(4Y6WrYC3!6YB&laB|w+y-WmWKJYh_4Ua=#kA{I_cpDqc|C1W!&gu~*644Z zQeQVbq_-6yHRsX)`+Q?=$R1a!v8#LEWTA|7HTRD2J$jDRZy&twRinF}lzqVtV1*Q1AhJTr@1?QyQ)Lg)FDd>L z)&7-Q&DWzkmb$q? zpV9cI>l2=%MMmpVr*ZiMl}r9s!H4vfe|mnBUrm{bC_qAF&!)0@ym!no=92c_NwP6a zSMN(>q|8=XZ!g!u4vA6Isl!-?3Ge|E`bbJdNynUx%CB56vELYLTv*mX0+@bSP>7w2 zkLsABQVCP^N%iYr9T)qx@GFI+e7^NQoEdSa>`+vUmZs;9N6#7uAZ>N7=C?!t=jh3L z^SFA0&a8x0O$BP*-qk!A;@n)%Mrc!lhQYD*)kfF%8z#i7YV&Wq@Rlh6BFt|SpyhyK zQ<-MYEHg4QNTrI^r5Bd@rBF9hvl_^unRdbNHh$G(<>?m8g1)IwO3&k$V~x}{7Tppm91U+MtC zN%hIi95+{7Gz;RrCDOcy6oj^Cs3I{-kHKIQGt-SE)!WRa5iZ?mQ1E2iyw)?(V zH*Te<%j_!P@%=ZznaN+B8UeyJ`;) zaX$SHKg*5VyG3rAW6;oKP)%*BGN|uXKq&M`IL_*;M$17G3#;|{YA5gK-ZS~aZxHXF z)3ob@do++f`$lUegmkS5QZS>^GIa&{ZClM?bIKBJ`nm1ESPf96g#x!COCLr{UPj3P)21 zQ~prOQ&wm=A*?|6-u;3)F#B?VifJVh>RLBXwdxW)5Y{Rn*Za6rK+*>c#n#&0ViH|c z30XfHYGM8Ka_9pWtK`U{%oV16*5F`mNPbh8z5&~qm-h+#U1`i>6S4X-&xiGR{owGE z?b8c<%1-G;z*Ck0jSF6EN@KxGIHgSu)aHKMlX<+lYrW5N=o8`d6PKW7s8i-Z9EpAZ zZS8lkJ;jyp#i^zCSjvEnQ@YW2r9fNEAudfg3HpF2WB*o~&l-tf!@Nh&l_ ztmJ2`K#;$+!p61rcx^qx5sgf;2lG+K9C0$k$tj{bz^MeDtZwP!#bDf!%=EpZw9GRe zkZpg<>YE=9vvzKyowmFDd|Q9}Tl>Cg_jA6Q2et9#bk#!Nx${WQPWmSRWp>gx1}`@0 zFWbxG9-ZvCKJ@vR9wH_9^FUHE+d(VYU!JgfnU6d*_=Z8YVCj<+gT)|LO-JT-TPdY~ zO1gVRX?ZY`P#Md@|zq&tJI1}zBrKUVtjN=FNp+_5VSy2F$}gG$&}341Bwd|D^r zCafIjpI54pJ~ZrC)19Oa1+z0&-{Pi0RGs6qS1W0MYH&UFW}N9EONN_fahy8vUNPy% z6f*8($&uwx;r)E$bbq#ZK#oq~g)a&6Jq_a4YHd?y;u$Gk-NJh;bq*nxzpT?<5<*Do zNsStf9z^xVkNz*mmcCaQ%l~4_h)D(UJyOqzL&@m(lHdqW%yJPZl`7)DOx{zX^B_4u zWSzvUdLnH~WF^yVQcbX8v(0d6a(#)?A0pj&0qJ6Bs`Vi4$UVkO9WK}8d6GvOq`%V< zvQSJUOqW|blB)TVhe7?Ie0RWR?^sYI8hs%}EM9706V#U2K$Wae0Z}$O7VPsyJMNmG zAyKaRZ9O0+h(wiAuk3S#%X)(3)Gss)Suh{AO!YV?pTgX6lN2nVo2Hb9Nql1*1)1Y*i$;S!ijshkpoJU9_j7?31in^D|1p@b(Bo4y&HDgkwIi~K;D2VtEkKI=S0EwmOp60Or!I zs(#FQG_Q>%cgX)hO!#&!-{}A4Ac5aKrV|(XP9%qdXI8;VVOmL00Xs83 z^>yN%xo)I-?Jz=m)_$aB|Do^i9;@7TjboOMwI6S7w(`jreZ?pO^v+}K4ls{C{lOQ- zAKtfjJH_0uNYpTNKY<$u*EKrm_lI=%M(E_>Z_bP*Uy#p3NovTmA9l}0QgkRr7DfmgS9|XUG92=^r0JCns1oiaIfu-TpVJmp>Tk$-S2K7kDCdLig7DUaw7ps z2;~-9rHM#cPzJmUN@*=|c#TYy2#-0&#nBZ z;95&{GxYv64mBi2ZSn%+=8yE@K6f;%G{^iH#KT~!?5K<)NFmscMXMg7C1yZ14$41^fy2$^N5gd-EKm@ zCUqbCrd{;mEkTN#I#z*8*}l@uqUTi0xHHLYKwUVc_>U+IW}A>zsXA#6;zE$}FYP_x zb@tr<8k;fI3nPx4!&XE@qGb|q}<*Tgk(S?SDT zHu{QhKwt&prBp9-f-e=uvHpWH?(H97v6R;GT>DRHj{Rqp^mlYY)tnb;x>v8DKAX57 zsmrQX|2)S6dj`fZ2{e!r4#=Lvc@fdjhj1i09IV!AekzdQuwFc5@&^8*v2>Fee7t=| zZkuK$(SOWF9BWO=e{gKR)!_|#g>JBqQ#dfL%yB*(v#$IbEU=D*Q?rxGO z2s20Hpz|ghZM!>9R3fa`v|lRM0J2(e#qJ@oh%|kpHGyb0ecRbak!g&rE{~vr5SPYn zJt9qyQh{ryBUN|v6ls2xaw0s}Q_h;dy}&12t^_K4FP}!#uX}uL>S&333)fYHr zq-i|$N~Nkx#&F*oQ_^a>bVkD99Mc!gZtBiF2l7HW_9xINYm64LyjAZEG^YPI#EVS! zoU5mMn~(K$?-O?iUq$!Uhy)Z1TBODZn7rF=?>w!-!m^E|xSqj_mfCG+R>coKhiYjC zcSV=6G3ZD@{a1XHV(nfgo8%Ni;tsI>9IE~th#27Yt#sA1q`NCL2*H3UGndS9Lsf(3 z{mo#7j#L5*@;U8vFp4S4V}5x+M5Ms0&}Z(Z0Li1|NI#v2#Dl!^Ii>ZHZ=*<-h9Pn{CdU zjCkbe-F5~QrvkqIzw6yUJKEaWk9NA~-G41tdZ1Z;RR*Bovjw133w}O7(h9vxGK-oy z8?imN|DYwAzO_u6qy^+Nc+4D0PLn}(A>oMs(UhNDJNe7dxZ|EY8`ujBLp@@X_pVD0 zTN^()b(EE%NHIlZC7KZHEL6*pzUe9_Ag@jKq*yFHV6A&pX_%K%L#?!Xdw0<7)v#apU0BjL~)8Ys;8V6d57QBQ7Ty)<_Pkm3@nNz_j!8*m8~)OY1ICDr$4Z@ z@2*}?4WQe(k~vci)<(95_;LSRCsG@HCmQL@pqA`C6Eu368hs zh`{f!>ckoA_^v_nGhv=v`V6Gfv zaxK&8?&0uEU6Mym7`R($}vjN$cC z-D$B7pp}Ri!?-_ai*>kTOnLO&=y}$!GfmE$F~wZL`to8&+}-DAXdFIDCjDjSlADs~ zJw*c(eDh4rPin@L#T%Ijx0C|0#u-!cTFs{dg2=2jH`vco*7bOvkjb{&q++y*5l#ci z5CK#so|24$p3g}QIq&uEc@oCFeI8$EF~f`KmfebTu61_gbg{E??K#`w8wv^v}}+MZL(wG4GbXH1DS{!Nl!Dy;&e z(tW?>hu4wQ+5D;RzhhKt*fv|OT3o(PPY)P`UtPx-uWIZZ=z^K9Y2E1_`z48DlKLMR|*ID%~#j*nW;271LFZdQN)rApno> z+z;wf7ZgV))aQQ|-4dNt5NX~Y2CSZH`b%vInZ=^-te%u4E&M&oY}EPgGNa||4-^F! z4>!DZmuvZ~>HcIuO9tTop*-6#-6Kzp<~#i=1BU~uV7n7{kVW)S8hr^8R^|n=n_Vez zzFGtWR>7$hbeE9ZrW1FjF%s7k$C|s)<}W2D;V$%nJ$QGaH}uSUzsPUfgQ0!eoVuuQ zy>Tnon;P4mLEjFYy~6e$Ih^*k^yTaQM!&!N{qOqz8s9V5(!uYSzfS#~tM8-r9rLRv zl2dJA=)f{%xU-ZDPkyVpT?&$$zZu_trf=7%@Ev@!_Jf7`KftwmEm`BRvb;!h@*App zoj+N7cPv#HeWQC|8f!J~W{{g~7OoL=&wFjf(gEWu+?(9)riUawUQu?u_u4~!}Ou)rV008v+gXs4nJ~F@i{Bj+9 zjVSUB>Zs3scp$GaNrI6L{g}3^ROWS?wi=B@`#*~gQFR{f+#v^$VXn=&zLgwgP3=Z% zC;5SNL5G2R*$aIgr9R(#eJH&HAT_&yMsdh1vd&IFQS_(8E)6uoLWF%z$P$&{bNArC zZ{&=0!LC3_JPu>7mLCO{I;gi84hBAB zTiSm}Vsc!?Ky}&`b(N_mV8Sr$m9M#Wn-Q+-(DnlDJ!sh|UL!ZtcH>$cTO{hMTVbE5 zzU>sFYjPF}im6o^oG3oY;r8=_N(l1jE0Jx~>Sze+p!$zSq|ffhNV$4;M_v94b@?6c zto+@gM;Y$W)b4pJh-&ZrqkYs(aPEw!_Tj*i8 zg&)YTqq`JOjMqBV=fB7@CC=?KWoQ>H5!1$2Q(dxenLF%2mG4^?&YGn&ZO^+}zA!Ey zPb;$#>NW3O@H+DvPj1*&v5)Nfvu8!Mz(D7cgfOtI?@nQ$jpUr3xqB@ei`m%`dTAZu z9v*cBT&5WdnHbpDv4VnOrCorY^OjLutFFEzmcFu@GxqrJN1oOGSTPgY8|WJJQfS$5 zM+AN7B}SQSx6_&KEZQwp8mG-itI(q^|7^H(*OHISBe^ zHrvo4HMmK_?6%z9`rS@<73|+vO!tB^fJcf@q-h4YCqLYN8+2l$d!+da66#VT%kghF zoa3HyQn;vRF?TgYZpNV&Ir+M3%m(s;DRzC^#C*N24POMxf~Ynv92*7mCCAV1B{$$i z&sZfeHfsQLQ#{IO*NFZg0>+`v1=iN4Y_}45I1bcArtKW?)xL722 zpGADr9k!fvrgr$v$IXpDj3&|S$dBg_FjVBuyh^q-o)j2qRbrM|G3kRGTKd1~F8X=y z=ScH~K@X37mYcAe-}eJcF87gc`)!gCtD(w8eT6EeUI`upA+q9!opjMYv5A?cn zTV;T<+8(qA-9s{L^6S)afQCz|ab-Yfr-f_1%7GH)qTa1;3{gorHHY3?DKpbASs|G*%H0tk`=!lQ7XPTS zrYvT+a@ay+zf*LXItQwX8!irNO#H=anh#{r;*k44M8vkhvDwfPiCZY(E^k*JByNVaSQ3rNHWO>0CaA1lRkk0T=K_>1)VV=!yjXooG|CKL6h~;W# z%Z}$?4R9I%ODZf^hlxHxbTAx0B8XY*_mR9rZ`zuJ*g~gJ#@+FmDt#f=_$)tclaawq z3j5(Rsy9_?QybqwSi4Pk!nTU0LOS; z$E&rVSCNo!m1}(G8#{xyNA}E`jni_to2VwxGCy)(U1lCE;W0KZH-g&Q$ecmX+ZN^Q zK&$_$9+f>4hijB|I`x#gfoWXjy1@xJ^tXSDM%uV>lb_d}$)DNz>G%+#XA^);xp^W| zk&&E8>T=#am@kfZ*s&wP_?{KUF?66}iI@k6Tcjk2-iFnke?eGbbRt#e9_dhhV(!JM zNEe!k%-r}@!L;eI$xF2uX5uf5+>eWYe#_9J#3Tf&ifvlcbLTtUZ6+RnlE zr~vB<6Xt~-w+WPI`bX}+CffLpIbCbe1^!4@i3VMhTpivKmFN4=w$6?C#P)Bj{~Wh@ zO$RA0-bZjLW%8fyAy^F~XH&+lgqN76_1XC}egOhF0N`)&&U__?8SZaqr|s{gVmc^x zI+o2tiIXD=57<3A;``$=j$@VyA@1&si1&TuFUeDv~IrWM64 z&{wVhXIoaHcNo$N+}-;OFF@S$ljV@GFDR2m-E&EJH%Jg`iPM66F-VYwGJc{*-1|wh zN>#L6K%cUT2~w_HdkT9%cnOkS@c2uOHRoH_zd-#p%+k@*M*s~_x;&OTgYY?PBaNJf zS4_b_K(*1-Wa{MQaR;*^4)U9?iB_~xhg86JJ*$lYx52GMH=juI7wHMX{kFH3S0O~)FE&H z>E;Dj@hMD){Soh@)a3-E(Ra|OBr}z=0spc0+dJRGlU^awVf~ndcV)Y%bki;l##REs z77_ZR^)zvM&@1i_!cY=)U2}j)@vbYhOw;@O_f3eL?kbXe=VNo2Ru;$Wa{=8Hp=rzb z{sN#q6$KG^%VBk%o+m$_SE^-6K5y?jo8E0>&Fo%1?C#CRZPkg7Yx#TiejXn1fa~3D zc5nMySJ{$4+F6$QHAdcC_%-?=Qvg?j`pP$86ArBI+l$#6L z6%2!&pERUc{C|0KtM(x&jdP00=>)VzrLRFk``MA|Bu^&hu5u5QX$)$Q{%B%*ch8wu z8nlR;ibfz$3x#B{Cg?xwqSH^sG~lKKndU1+ryehRQXLqn4rsx*x@&vu5px()V!IoL zRm2RS_V$2ZZ!Pk2N(^e@e(9aAuO_>5eS5RMTB2}$?aZUghcp4G7v&c3HgX zq%z^HJ%nbl#;=A)ZW=8GB>6Qf9ZTW@_?(tr!>iXp+mGCFhe(O#;(L+|7@M?=tkZX< zjd7v$zQMTa(`FwjtT}gu7g9GRtmkeIj$YPyC$x!950#&);P&kKG23?`99( z2aoS=4+VqA7uZAL;PHj_K;|Cy&~xzkp7u~QczlsP>@s-#F7~kN;PJcK!)}Ae?`99Z z29NJ$54#T@zq>u`F?jqQ_7E97K4K5WgU1)!!=8i3?`aQv4IaOjJ?uSr{NDD^d+_+) z_OQ?3@%z}rzJtf_YY+Pk9>1SGlnfqUVh{Td9>2dm^cg(9k3AePc>DqO(0B0ozV>k7 z;PD6A!$E_`A7l>)4<3K89$Fe*K74_{;%7#$IC=c7_HtiAn)%YL0nU-Ubjz#4?twfA zUv4V${vh~Hb>xm#wWUR4Q85W+8pJW-k zAjxBVG$hdiC%>)*z>sl^lRLaF^2>K6=wVerP0ZVhIFk2iUS1*+o27Us_~}J%Yv;%P z;;)k0yoKmv5{OWC1iF;a>mgp-%8f1u!sA;LEc8{aD8gT{fyJuGQWUv)h6*O%ov;3S z56h#d} zM3%1=Ad3aa89O3d?)!}-Y%%%1Z?b(`uK*qTy4?zVX8khbi3W_}d`s1gxC4%&cg!gJ z9^E{g7G=^a)*xc;e8e`@phQ1RTmGkkJoYe}Oh-k+{n7S~j5}{j#SsQ~*r$GtSCF+Y zXnlIPJQ4W00zRPaUtT@%fHnt8SnSj3O8e=-(eS!6FexK>wtn`DbB{9{nS1Kr(bekP7YZOCS$7#S|2yq zdP4Y$`P>Pz41X1P7hb6%^hPo}{5_0nCqu-tbqvPC1;MyCmwpAS1Ht&`isI{w*>nW0 z9f72MPB7kBlH4~ckW7^Z<87rIUt-|$17ik)))Rr`fwNGJ*CzLozZvsFym5SBrDy3)_FIL z%gH5jVbFS3!nm66mS1kFenR4_Byc4!N%GTGJrF-Dl(+^B`^Q4D18AL=m0cUZrWio! zNH{rkj(2w`KEEJ2R1`41-}qmE;|+SB3kg!ZLnddy`%AJF5qFjw@mLTOhp4mya*noL zEGsY|j1&zh6n*y$)%)(*Cq|2^dhg5i@n#M^`tEswZvo}te~r1<|ZQIesA@7Ka!1VP>! zm8yy7e6LhJo>m%s_q-XT1!}Le{$T2F@N!e4DVcJtYuNJG~`%NbvOZqDWfuN2) zCSRkHBY};75GZ9J#So)#ne#d{CP?5+U%l6sCZyUFKw&-!dvU+hNa@mRL`Ha7J{>9D z7$OofAW}^~gcweMs>8EB`RY0K-o16!tAUNLNb79XBQd6x9N*af0=LAc8Vk>ltZmlX*~~d1idc_c|+3H?=<+P(6WY~ z)$ou*HP&A1Ii;Kv(yWeKqV(2aq9Csh*MH()mJLX+}3@2**Ey8_x_G2W_@c*UHR)0?CG)XTHww2omy9Y+|+4Y z_*v$@MnU54;>Vy+c!5lBx@5=(mJp&e+A5EOd+&4bgMjz3Q1U>jLk8YoquFNlTU=H| z-d^&m(woSTd@SUnUOuY$2+9Y{i^CKs$%EFT@(a^KN6BF>Ot<`WRqsiCo87Q|@w3^o zqRItAu<=pW+>-d50&8w*d`^)ycYJ(Ku{C!B8mliAc|9B77S|xr>h40vUKl4T{vqoM zfBfx#1YispZ(EW43FRkW7(eDw>%*iM z5*(FD4;5&J(I&$c1>_h*jI_49LOd~F#&%i?Rx`MEZ}b`n3$@wHXl zlyN&S5SqYJ=$D6KFV+(xMA8R1pYOJV$R)z3;Bw7O##NZJ#>>TcK_c3ruQImW6N0QX z*HTR}yO?EiR{Y8!UyI4I5IIe_a41OOpm@F428o&}&MniW-hlVjfcM#e_l;n6Dp>uy zVD%HpWJz*+Nx=Jv_czIbl3?|(s^1BCA5QKpPVOiUR=;8jBzN&G1t^(J7A3bAQBuoj z0ZgN%$(^HX(3sN=XZFBXe>Wjl89?q&-&W zeLLW_70x}u>H+Q2o7$n@0&pNPbBrLWr1})F3f@Ws-X{Ttll0Y(SD#c6b{3mTg4L#m zBKkqDOqS8~F~$PT{i;8Oi{*=$k}ufJ2fM+1kj)^Lsyq-RF(|@MiQvCjvNZ>%mXlFM zqT)J>b6PtYq!Lo<15@h?>ZUF!s+(F@9GJSgglb9xQ?D+~XGDYf3~gX)bbQ^^n>Qr*;+^1#%Fs=BGsnbb$zl4+!s2K$%M z`Kfi&W5KcsULlMLf!Il}P)&J^$~<)#Z3XC(Itz%btC2J5L7fF?)@rUZzq&MF0gZLj zggUFiAFyu1v8AP)jFSRZLsh_9GEFGEHel6Fud|{v*R+5#KYAZl82wvStCa8CJe~y_ zh)^2Jv}H`X5+Qtkl@F>usC2aKctr8VvVgcl4Jv%eSC@QguqyR9o0a%ab;c*=oVK>d z_6=0*Vv&;BmOL=ZdOZ=z^Tv+XMlKL#&^mM&Wu>u{w|bz#N)4T*?TJ3f%Xa=)puZHg z#5$VXEoXH4%6h2;$|;WKxfSiqwEQ247jKMD+w6VPdZXg8K>svP#iN3NFMe{ ztgG>9Uj^iXlIp|f?XEs-6?|0}!`R#Y=*x}h@igDo=;VPS?-d21*dVAn9(^TO9~Fof ze6Zqh;L`;q)~@7h=UT5PUnuhKwt{DiG*b}T__ov+MFV-rPKuh59_L)d5FH1($;gpo z>D8&PlgB=`M}{`De`IXsxJb^}A|-$rNY0U;WPX95-n9CYOHK@}hZ5#E*vR9~&iH-@ zE~zp@W<|gyt?sbf04I%4k!MgJrWIn+u2s6(X|^PKC|f)Lk1DYL&*86)qKDjNbN8E~ z?7cvH>`6e&0>-qL4PRWq8x432Ahv|Vp~PI6)}dY(zuEMCEc&{mZ^~2|FTJf_%Nu3= z;oR;y_RYj*8Rem3`fJE!Fyf1U7^&#>>H)`&bswnYT!*oTB<5})-%OPYN^si#0M}ST zT(obpQ4a;v^5cCQq;{@*4SGCl*%6aBcI-r?l)lX<9o=)#saw;f!3^}Ky&QZL=j9iV zvWg8#W(nNUA=qRnv37%j$9fVmnP{sdnJV&zXiIp+;podL4>GQf|06Ob4SfdV#b*U7 z*naH(bir7RHv`OD-W>8F{1?Rbc|#kIYZH6vjeICQEDBpsghg}~t|cn!5h?p6mv9@z z5o@ngK6||2Th&LL`1s79D4&4e_9jZJlpdS*`0jb!TYRT-+EqOk^Omv>#W2OhZpDPFhd;N?@qA%e`DCa1?hCxgwZY~v$VS)(oOLy3FS+KJDN3Ue3 zlG7`ZUbE+GyqF8Qiy;?>Ffl#I5eMdKFF7+KIIO=|yX^bL7792trjt_BiMfe_zsb~c zl5B{EcAiu06nTgkunTDd+a-^C)Ukc`ZJo2OJ~4MOt@qDe7@xBakoEg>`aQ}@0&M?+ z%gDDOxi62T>fP0k^v}I4K4-&|w&q;KC*bM#Vx6?9DT;KU~!faQ~8^N-}&#xZ>fXda~=F1q4MLA4nL z2IyQf3e}2wMun_XTCtZoct3Z5!`B(S7g&#R5+#lGy`BYAU?C2_wO$WfPeRWd!qzc| zo)MnB0R0i+J2HR6Oe_XJ5PONHi-TkK@+vOFxz-dCczqxf|m1H)ylx zU$P;Y%8R{_FR?epFWC^kT*#2>k_RBh;@FE=kNW4{oJC)OCH09P^ulJi2;4g0N_+K* zZ}rj*RV#lU8)PW)6AyVp2|ZCF2K%7IqH8xcmZhXf26bCWm6PW3@4yxHi7!cAMjsuv zPSD2FnAJq6#M>EO_TAxf<=2QXueWg54^}{e>OiMfL34wXeWzLlHz|~2=0RPK84|PL zjcQJPTfHxj+FuttE7EuoCR(-WK5BnTGQ>H@B?ecDZMVm}Mbzf{1t}uUYKOlfxS{*< zBL>QPQn?8BkKYnoBeuoUc8$h-#o!0%Onwa_lueLSOB@%}{>INrDYBXi-l|%`L7DQzvD%n^FF0(flXFif6!0>*H`*x=5ys`11 zkr&f9$M%(tcksUf&2hruTQG$|N^m0fRq3RCy&`Ip41qD18youP6(2t{;BtOZa>+|c z7`yk||M>w4sZF+u>cVzHy^T z?UlL%W1jJiTOif-%f2JP4#79>3aNR^Hwg!=H+_izH!T|DD$-+lE&{h2h8txpD@2a+-H98JIt?d+&3hfZ`{8R=+8Zp$v5ua zefskY$zuPzPrCinnY{#nK`dE!5*4t1FOJ`bz+GPKjZ>0C21hVQx9P0ljxI?zC}v;l zRzoJInugqJ@?&qD)M^;M*qbNbv!)MGj2d9z@EqEI&8y&1%6{i8gEy^4%}j@+?LQE$ zd5Ch_ev+vAM6;X`g;DIce^dfB`L;2D#yE=x_+tBRGU?Q$>$xN*1dvT)-8-3@IsO=i zIsUOhSOS?Bg%aNo{K({hegGs#;`QIWfqe-7BA`-5dZ z`%LkjHuLYt++PAG`#!!$$}A7rUD6>r`hny6QF{tFgS#8XX}=}?65sFF?DZ6^PuyO% z1@vhvxLFsM*()SEUd(fxed@TOk7D9i1E)=hC5e+QJ{mBrmx>^ZUG_=05oM2u2vMVO z%7@{}=98TEGwB2%vUlf%9!OUqgL1c|rJ0r(|LsS#TT-hOj%#*x1sMPta=>Z}$ad`O zU(dlj*`-vo@t|<& z9FplL!Z@T!4jj^idU~B6{a8B-=ahxgZl*=pwyb=be$>89V-#^mizM-oeF&r^_l>TC z+GM|=&AIyp@i7ws+@9^QH*Ri+nvc-ea5=Qk3^w;=mjz;(Xs_!cU z#!{cXze}%Sau!cq7hDgG?C-r$rz}WS*upuE#GQm{SrJ;S6=hB>P6g8aTKbZMq}}K1 zP(j7DO5lT{I4rWCqOT!l<^YlQKRAI}hR(L!6bal-fJt(HEq#&fwFT@+L*F4v=nulI z1t<2JV{EaQ*370G@iEqVM@vBw6l@#X5_^}F)uS>HE`!2>DEmLj&E%9^m$(JNp;Pc4 zDTwkFm&#XUhSq{fj!h^qB0*vQ0U{z5A~^ymwU*mgNUdxQYbj6F&dZs8`}sdQu$`H1 zqF$Sjs$>zS{G;|q96)Lz5CQCaZYd=w?a_zaQf9HHlz=nd{=Jj6)=WFQgRt~P@GR_! z+MZQ}%0w0cq?Q%jo_^GEt9Z?x<+dflgu&i_NCA*gF61i^D(Xt?ZnrJNS?s*5wvaNU ztxhef2k0pGjQzOVGZA)4fBY>6AL^v1J)5cEA>Qc3ILmEgyeaT6Zh?=a!8=3Spz{uR z(y4PK^)dSia>HAsr53l~-=qufk-?;2a8jpV_BWhdwG&Kp7r3Q9nl5#hl7P%=aA9}2 z1vr^WGcpezg52#R9Qs$JpPMe&WC}VRyU;D@*Md3}Qt%H?($bPP`Y#YVH2{{(P-AsIkV*8IFSd9rKO1*HC0-bz`A9p=3Zs4Os z@mp76D-TNuA= zd|N+g8Vx01923I&Qe@j?8ro!E|4`arNA8$A#ifObZN2af$M@_?I6@9*3K78~0%tm` z%kkP+jghslviMn%2>-|0rscBNH}qut`U~Q+<3B) z!MII^Nu5t2W=*NJm%$!oh`Pw3dO*264n9JRwq1`+TLL=3*qS78*aeskCQmzrv(}04@pC{vUB;klt`TY%dh0oNhaU(_Bf|bJP7nAmS^m5XekWJ5`%5( zclJZsF@A};(W$vytzJTzk2tXUB?bUa+xI##nuln7Rqby%apvHi#MRn&XdGBn^=0hX z65pn~9A%%-R))-FD=FlcMdtSQ2Si@g*Rn#11smdXH;CcvmgIra78;1r0qY68B+vr| zy#t9-@OI4l@KFAic*#b;XnV!TvCz@=CZj1N@aRLV>8h^{QdcN(1=_7AgS?D=vMdr7v;p4YCt^)7LpF zY#rxkehGgr_w(nPs*tsx-_~0GbYx!(VDzcg1H`YnmOnRl`6@WCUcqegRj}mvDsWQs zRWz5?`YLeK@>Spp;H$vKY5!InU{Hwn3cT^s%~%{!G>gd#@BTw7d6AGAyo{#ScYn_A z-<21UnjH8?1IPja{t5wpc@=+F3gn&d0r^^i{FW~I_?H4d0pLa1f@5rfOzmDk4JK+& zqYq?&@mpYQFxII{Z{WNEkv4-lwMHG>6Q)#r!t8d#sBlO28N(BzB)t%Tg^D})nNvUuQiNVpLWq#!TyLY_$ux! z`=%n%ql@jeQsz7&>zc1CN1H z;v$pcrK1BgO1+UGv$Jr_2aaF*+2BjCl5HR27}<%fIV7R`Pi70Z)C7)V1M$R*M`QM> zel&RA_UcDn%a$?Y{K1{C|G%W4|HdYS-MUO{JvdW2WKn8-?=zG>k!~r!koh?{ntsE4 z=R$E`6;#o$L4Jr+TN8GjocSLz_BAa(2-lN*gYb*Nk?eIN*|$=!V8Jo`CW}AhP@Vve z+bIm=g+%}FfDbiw;VB|n)HdA5dWYgg_+1d}*ClQ}MUFbFK<2p^<2FS1Gy0?H2lglL zr;GD)4Q%RnkUL|Fo#~RA2Wa-FpXrpL{yz<0#@-7Un0pPv%<#XeR=oGXCz2iSo!O`U zjOpm+pXN}X!~dQ63oi{@Z(_U4L7bVgvO5u*TFBaG@RS+P@Qm$QcDjHX>N55%W3MxZ zz23uK_es|JM*gmF{%pdQ+8sbQAj-lhe^1lxql$E9ZN@Z4~0Ndqbrz z@+UX8B9Ws9R3+L8Eb!EW*d=1tYhsVLWMd^Q?$b24#XUJ`9CD_dn!4 z6M%|;|CCeic0v!*eJzU}IMqw1rG16QeoMH0y5}6!&g$LXoU})C(tb`T4X&J*GFF2J*?=mzcWG`H zzhBC!sW+!4y^k^tL35^F-m=kp1>Og%wcgXV+(((AjnCxNR8Gj1uQGl5Ku#XH<sarhvTni!?RG2gC`iT$|{>w5)Jp^RR z^eVow-ruEnF5AC^ohu}|E!ifX13G3hdw!^C?Db_&YyX?c$!77!97;~MqzGTC|q2}#b}IBj2GYH}vtd4#rP zp!-0k@ZEYK)}d51H`K%Z#d3aFaI8)JfspXGO!+;;n8vkHnK?2i?FWd@C<**B1$X}A4da7)v69`PBt z-$Emp+us+7$?dQGxT+1^(MaZmenQA)fk*A{NScVzN@T81R;X0SE}Ke+?q*3&yIXC+ zFRgHQf4(O^x4|h6ys*f8O^+AmnXj4g!V{admfCpX5%U#{7alfWTmyK(eAUMb z|6slr#y|QZU-81d{1v}ynUm;CC&WMcn8~q>(Bk+^UE&E_+=N2>O2#NYaTdSw^mmAw^NL|m=QgE(53;T1g- z1>FR3!^Vl3yV*#>pPFG2_w1^mMHFM=C-XFtaN$O)67>Ey5ZmG9GeoAv;%r?n4%Syn zHGXlx4hCZH;4h8p7Jump$n~F=aV!W}J!o%!UuRv1Kg}XMr)T3ZeH{+dOH1pl8*!GN zCoccvag4qZkLe~TVM3WTA1JPwWL-YZn!_oPH8Ufh!drTLEhK|ZO*K0ZUae@&O1Qi! zmIU=uMC{-rQE9moMQHGSPBZGntFod}7CUWryYA7U`XRFhTwa ztB`MH6$5<8{&2~*a+2f*ndw|Pd;FaC#|e)N6mpj1(~g>qtp`zay&kgTnV zk4}fnDrelwA^vhB@B6lntrF3k9g!U3IUGfKJ*Ml$4U)P(0x?)9Y4Xok zQE13JDsTK!m z?y%N*NQFRr8#xCH2blaK#@qL@)X86BmAfHe0vEPL>CLEy{vfRjLLT@v-KP7$AX5I({jc$PpWvMDyZBCZ(#@>#bJsMn=d16$^!F(w zaax{9ey&97IV*nVS2jv_eVcwuO;%xyki8A5IIvB-x#`*HlGNQKnSR($8Q3OJ-oC>D|I{7*wz1Wkdxp$; zzKaU~gNf+d^f!{F0{Qdo8j7SotQZR#eMIcEcg<&c*>%s7qk9)w?;JfUerMLxI({}+ z2A-a=bL~;CQ;0oWbo9-oS6feH>0`N<%o*%H?YqpMtfS8vi*W9JmB{ZUB3c-KjwU2x zPNLcu{IeXp-mjl1|+-GTwWX}4Z*t4HLSvp@fTn#G<5`8xL%waYp$Tf^FaVThR! zefP>BB(D761G4I?K>NJ?lW$4^y|TPW4#Ypk_2JP+!W%_pa?9EQd3s{T;al#LdcH>1 z(ANk?zQ<80JNyq>_cs56DS-W0ScxU?nBJ#$9A9WJLwVE3TDQPpKSF-kl4=y}yXOK5 z$AV|vUn%Kip{&`(Ty_HL2(*L{Zu_t;PVo2zeNI1rHTzeeWHbURGET&5%k zMT&MXU;H=cdF&k^#@u_5qJ4-qGaklC{k_A+t~BGQyxaYDsQQi2#?zRROK$#nD0#X# zlsr{jJN=aJ%gO42quV{6!*W%_dAnUcBayztOuwxA8-#qgS00<2xKXS+cfR#>S3( zROwUBqEj1}3aIa6;2Kx1{kg0Ja;MEcZiI~Nl^Uu5LuU~7`(5^rLD-PF@9sU@pPbeH z`G0l$KcvUnzL@vyDe3m*nuSxmbNf9&MiY1jq)A}%}DxgeF^lE z^Oo5DTS%CTjyR9HCY%%O59Xbu!h)K5;M#w2|FXOjB+RUlgj2Qs8}cv@)7#D6%CwF| z&&Dw1i`_|eORwI=b4X@gr^pP=x9L_=s4w6Z_hsqvzyay}%z$+qO<#TDN}#L?45adc z-rt00{MXtBu=SxE^8oIJivbSEipM$t6obk7ygUJdgUahb0_wj?Dj%4w@b_c2-n*-y zW|qEXsPuIoP_nr0fX~%c?-}}HV3&6mnTCFgwv^WgFCsN-fpz`K>JziRd;=grSRAN! zpSj@nTRG}nB91WQWm7`W5D>OaD+|N^yaDToTyjP^k2S5#&ihB`-M8(T5Gqk?$C2RY zyng)SNsLb`i=CQfo_Z3EqJ{HUovh~AjD`D+CJ!eB^L%{^%op#ip9K-fsX@FM%Y2)z zCxlGJ;Q*AAn1fb%BQz?x;}m?YuzI5>KGNU^3WoP$w;m7B$oI zoo>sUot8hI)$+^W-E@XCJm)GVE@FS_i~W)WUKPxvUHdW`4HRKIlkRaCvY0t(`uLm{ zH+>ZB`!>l_7240ZR6sv}#!6=T8M#q#UXSdp$mSg)>$8+jJXCz1*Drh@p*#%iU#3MG3Qh$j+&l!YR3B6?syw7%2`s1d=_eY7rPS#1Pr2 zR1ldIcnI`(Qat;9dW*FCkcdgCe1ff8m>wyvA*L!*zhY5Nfk^*4WtkO{o<@YWOb-LG zo!(TxX{rvdiN$5O`Jc>-tl)2cQ%Oj$cT-Ue2IN(`V|_>!Vs6qWEd3EQ*bHe8JJfK-LHKX9L^^LhL2 zGqcwRH=Ww;A5z2#vtm7Of0JL_FkaB}~Goq@dEk}>G&96}pfU+oOWTuma<%4Ug`_yMQ5kL}s zJTwam@Njh$b4R=*g@;|wx3FDMd*x{^H9yTv@oiozv5D&o7ed?!> zF^mXj766fDN@lOz5Z5Kfs>1{>O-#F3)f#$p$EAtL#kky~agndQOA{L|&KD3u+u(0`zGs-N)=?`y$Js&uhrUlH=n-K%`%E?^M8A})CT z#6pe`ZTH1C6REC1(vMY`l#4>%w>fpT<_kzD#Ry~r-u~hb$vsv3LlvU066`w*$EMvd zlU#bfI0 zA0d8Ld~*Thzi8?m!jYzOl2Pukv3C2mKF6@&Ix-%SX->Rgb1=Vev+S1H0#5DwhNnp8 z_<(O~a_SvL6x3AaJ*mNJ$|p7Pzq!~->p<>$L@Jq+-*<;r;@i4A=v1R|6rH-cSSqTf z=pzPzKT-OTca^@QL`x66&$dhdsaXhew7;tD>3>z*Gykf#Yu&aVS*p{_nPSciVs*?9J4#n zYkQ+Fvrhm$73DR2P(mV-FX|zP%{=lI(-9TZ(Kfg0dg!jvCkx z5h&9D<;80Sxf*e?$o>}&w1_-t%|6CYnKk=F=%QuR^xOKxcSHoL=NLD~W5Nl%O>|St z)*`$7HSa24&(VozIW8`x8)lq{J}iQ0ma&YBI>cC(-u>G*-k#$EsQP-&*#1IrBS_O{ zo6M!FO9H-oZ80V4){}h&o6pHvI~&fJ$Z-ePf#f}FlRhE~()8xViD{w*%K8z1tgqb#acQ~<0(5HaQ zHzOe5cEVr)5hzwsSd-#6-#hl^O_1X9|nM2R^QlXoBpJI!@6slw3Q#=TfYY%8e z>-AYV?z`A`?;f2Sm|>nl%lIbeJrauwjFXZQ?5lES2NKfXJe0tp#61xnHDv(bw4Sc3=GFFGzdh4KAO zr}`J2Q1wFp?9=^=P6lV3T>Eb_I$5uU$mopE9-WU_Iir*2M`?@L|3ZI0FFfIYsXz1k z-$#GAu<;*s=0D}z`XNTj`c>92$)4Bjr%OjwrEl{uiXIv^aL%9=ID^*mx^@!Ew37Wz zdC3&xmfwGd^{6HHs1_jZ_RsUm1+EO-sQ!5c@>$Y9dvqu{;vEf zIZpr-aUWC+#Y61XB9w8yO*hE87O!Ka$$^6?7m#BzV^IBDPcSijY~*>?or?+etAGI= z1D&J4pcUo6Q*d4Hmw-7V!#XKQXCAvu?L1LSXH6SS;EEwdPpS)e?58(nohNYK7c#Hk zz~=0)-YVL4-nhB>W=2cp0T-VR?=aVf|8j}-^dfGd!tjFfsn|M&lJUV$vDf)Mmk@A) zIZ)Z(mvEBL(x7$hACDgA^5MQ0AYZf{;x}$R^^Zs2vG#I_7mo_PhT`c)@=FwqfL;~z zTjJfz-w7y_zx0n3H1LpCBpU0IO#?Uggqq03McLuRB-ZDvJwunI*GCqt@j*Lcy7EVgMfcWJK$*^k%^+wJ|e--4_wc?uxC=cL=?1(1s9NOma zLDV}Xvfhu9Y?Q{}{Gadg*ymBp{hS<_2JcZY2j)I2ORJMq!4*UAm~ z7yd&d&I;DA<7db%tx1w%v${#)&V304;%A9}#a8*0GbA%BeSN0-6%C^3)WNrUyjmFm+@0EwAf))z?={-2~QQe5&=<`L_KL@0@aJy!T{{Z_{a@ ztm``+Ju7~ZR%frK6)T_qddL&!?m133^v*0J>&I1zT)6LVsobgxY`Yk6QzsD04879E zYOl1o=`!lvR!J&LsN4=a-nM(W1z)5nwZ+^+nPB|FFH=zYSS=?K@me|oU+d&B`VH25v&E42&x&frU=$|CDEE{vAhcN;!% zhCM8!wfIH27c7!y^M~$p=oXAMQj1_La%ODSLaEW$_XE&Oxey3r0B*v-R5*{6+TK%@ zzD;sagTeLnEj2jJbB4b{>XG5^D3P^q?wZ$CYd0}2zJ|-wQs$zZ^8e(NH?`evLgVeH z+}ds+CNn<6>&ud*xk0u-Fo)M}mh943R!*$BXZuE|DAaT$5%7kbM|i8B4S7$=>W0lJ zpe{AC6tF2`$D6uenZ!~1zMEt!=PP%RBX!}XlcD^ZXo+QO0<5#unvMTb9iz1l3MX>3 zi5!~~`3AL+6SI)!WEVot=QaxR8rW6OK8wBlvHCjfL|yd4i3e>C^*gt zKz?n4dtr&ql7rj=L%*`0-r&eTh7@iovA?CX$FqRHGar8YN%K)|@0Je{hdO~IYc+TG zXHbr>??JGmdp&Wp;t@SRFDOU;HhzVy5f@ZHJ9LiWYxbw9Lo8eII=}DU9T(M=^o-+I zTt0Z=&m#_6=o@ff$|oP0W%YJrf*@%<0cy#3|cSB-t%+-qneV4eFoE0#lwO1OYM#hNaZ2&!Lnk5b)i(b8e!2b>7e@;~XI*Bao&^#<%H4N@2{qlGvc7+ws8F`mUH6H+|7j$=Uu0 zv}0T&eSMcwN`wub83+Mly;Q;kE|)i<)sx4rYUPvxZ!Gv*1AsY7Wc-p=ZeW+_R_=`_ znin)RQN9d{#})arQ-Ky4ja;Kn?+{e+oswFdeWj zW=!15aB`AknxUq*L-}I7hRv1R|6+Iw+$TtsvLA`wOtj;msn?w6!CuDN)m+MA?Swmw z_a(#wr2*HL5>#OIWupLwesSTtcy4oD#s7m~S_2rIMS=Jh*yEjRDjti1Exykj+QIX<4ut43|Az-!!WBJDD-#ZPn}i&sjx0CJ7}Cg?F4 zYBgVs-*Nv^SZZ7cMTgy3$lc>0g@Yc9j4phu31|tv_UnPMf!LodR1oyqO z@I<@FDlM}&Fg?Q79FbEZSIbyhJVG!amm&8Fcre`6q`exsqBVHY>ao$otrsmRiXI4B zM%0rUZs77A3SwIx+9UGI9ePO z+@f4oCwrl*K{k`6`qd%ly~|L1DgDC_Nmj4AxS(+M*dSL$zv8=hQ4udbU37U-l0O*yQNXhQ96M8%h8^dy^cFlku&$s!|=$ggtwW zOJAvL2s=JqQ79!Ne1OjYZ&zmCzH0hCtIc=|XF~f;Sf7$kA$X+2{U>E~XYBCB-ja`s zy+*tUCnk($K@QJ&zWe-?><}IN1~#7X_m$+WEvUQh4}TlROQ>PSp~&b!?@gz#jJ#Cm z{X-~G8D5d++0p>}oiP;ogxjBA{4I5$to7O-c#@Zq*}Vk|aUPt57V^#Li_GBSyvRJB z8(iiT9Qo91f~6{3|409~4N#HP z@g{ZPEcVc_EPv5LU*nYnnP3jYs zUm>$`0$gtFdjS;vx)yR6D(HEbBZgh&$UgkcGIg0&qFS zzDrR4*&8~gSf6t+_7!KP)O;a(xs!M;eU(a0mo;&^eTkDe0A3{VOsaEQsI@0LiQfc+ zlE{ynxX>&q>4>;wD~eKjtL%7MhaW+vX;Yw}0d$`W=9T zupNM^>^n(hT`v_K(lauw@D_2L;->F!>w{6Tee#M*WT?#03ESbHYJ8yg)YwQFf6t73 z40kKvtuInqX9%FPs6D#^ctw`_m2-nMJIiFW3iHBHFx$eEt&_gGAlI*s;8||K${VP&;&~mK=J-)CVWtw2J*U-iZ+v zlU4;Se;6%=a+Hv-j`vsO+Dvm9nsaTYZ__-%>BfhJF=TCE^i~ek2Y2-FoX&PKUkc?B3`kjySuUox~Am_gp7&#M%8RCvn8teWsH* z;_N>B1q1Dfv->G0am3lZl|-cFu2B50vR-g1-n@BGA``Alt%=+1May~gd=w)saXNoP zi3_*g3aQVK6fs*u0MCK+l-$t)e~3WP#evu>w*>nQE3gkyC0bXGM9_k{jOa*kp|>DX zCu3U>`KbLX;X%$lMdXSXZ0YCeZXiN+E_sR~=h*+)!uzz`c})5x@q!;_GKfcKu)pVY zN?x&#e>4?F5wzDDl1Cj;FB&>|-hSX3BOK_vQLAFp3!-D=g%6PzaG$Yk>p9Nk6H0xD zN(3jVWsWShYS8l$AmP-=_vx%z_z7@m?X>+evsLX4y1&))NcxYoC zoWQB|eRUU4+55gaP+N3Z_7pstcn{TUE?#PUAv9xWCJ|2ZV;L9UJ*n`FgTBo>353OW z)^4bHCG@0?N9$THpx-FL#e8_p|9v5P}q)lV&V_a5( zn1kW{aMmF#Bfr~A88bahx8|EzX6Gd~Oynh5q%`|h@Hn)aJLSSh|KQsw8!meR)QOI6 zP@Kd(LwBn@j#=&K%f5}grpx^nZo06@q1)Yk(DXFS5%zs-x)k0$T>{;U;l#|zJW*P4 zz#d0~sTz@qMa~Canz|a8jc)DgdZ#(kr${=0eh9emm4R5cwphV!e^E z{Txj?faC8Dubc(rHY{)7K=coy+4?y}!`_Ek;|#|48TQNhB$5x=i6%1?WLZkzkOg^T zIRlNc?}!FScH1}z91A7tKMeCdI&`*K4|wgGvBV8|;px6T5!8NfOY3rXABV?(vkSNh z_TF;Z6P;*RNjC;}fl+E0w3Bc}0SZ-3E!{h+^qkIqM7B!CUqEz{dKn8x{9NCKUx}Z| zsw`Cvuf>XUN#Tz#7l$HzX867WeT{rq@jdHu^IdCy1TqYYp=`$>!ys-j2X7ADFC=2v zj4UzVA;bls1)+Gbl>J^Ev(P$2sw-i{zwfs!jHy~;q~42Y2sq&cfE=XtE(g_;Wffu~RZ_Vhk$ubfak=8vo+pEuflbf<_7 zk>bRn=VEV9_uVFkCSotwM#ltp6_hOtW4$}FqZgAIp$2P*gzXyvfotn|!kkNl!iiv6 zUN~NKq~Q8IbK)$vz4rc#8IjmKw@9gLe8DF%ewTTNraSW5Uafk-9u*s?3UCL!7noie zJ;0MTJF0k%CeXjEEZ<4Wlj;kYV=e*mo>XAlGHSQ~$hs&XG-VKB-N{xX_Rjgy4I5vU zyMQ8@PVhi0M+#|+igxkiaadgKkzKvMP0J{knEhPr*z~pk9(rISCw*zb8}fZ?drz@J zkZ;pm^4Ps2GM_Z9-?E4s z$)$Z|DS1ID@Zho)nMj)XwnRR#tT7W=T9%SCTlX)ka^rZisVtCac%t|CXy4`@(jKUC z(nJHwNwd^7L@Ix~KMQeB`fe3d9BAxXoRQBGv1gqIsfPD!*+&h=5b%Fi4Th>oezes zLvU=~vWXq`#`bxk<8uvtV=rA6`OuNU0^g<|K}La%Cq-%Q+sr{;PvFSIklWkLI8Jy9 zz4sO4*Rd+FArN_H1^iZ?x+%d- zThU-W4%R>>j}pva@$hYa3IeHbYNxRGk8+}?+!LKsj}J#t_ocGm^vm+{JliSR6pI7k z1RWaRrsJTKK@Yh+LC<2=5+zmCTPKBEjq+$sJzM4QC5LE#pdHfn*SD>KUeToxnnQbX zraL{fCE3H?U7LJ$8KAyD+vM{(SQMX#J7FyvPT_i8)^JRV?bcoQ9VnD+=Q3 z`adB`Hnw)M5d*GYrT$2VTelq90cFThRI2btew~`kr}7EtCc5*;j@szJ(A{zh*w2gT zsh3D?NOWN0JDK_o-}bNIzF8J6hrW@IMF>WryO>#oRqKz7>@Rya0F?fffP zsu9WO$?TGu#D&^BZ1$Jf>K?XVhP62g-TiT_A-n9UXf2Sdf~A9D0v%xg2%59n0a`@sN-(~vLA zCv=Q_wp+1D_A*uO_A*p3xrliL-600Tdz+sK2D9 z7WC`&dhORo*nWWo)w8UmZH}D9PUe|AX^@+x1h;c=pUTh3k7LYF`H@4BC9Q?t63HsJ zFpJ}L31+zMFmU8nU*ESVw(%r$knaGshOJjroK_15j_)!qsr!Xc>~bcl#JsWX(ZvO| znB48w&nf17eP1WN&e|8WQY4E!f8kRK#H@Av*b5LF(GN#Th52KpnZ ziz({0TX=>Fb*hOB0NHS{T)O|^9ouyuHs ztvh!*_wj7A5CIDGe)dbOS-%Y>W)FpC?MF^sdkYWp$>DK~wAk97d1$=kuzq*{2@+%b z@KkLt^Uu8YKA|&Too%0lYO(v5EffSUDqsgHgyKi2Jl|8>-(L1{`@i;{6g$UMQT<56 z>7^?wm)lGyCWmjSdV^z;(saqhrvG` zvL1!E{+DiD<2PR^>WAcG+VbR3oZa%V{52Ew@TZ7v243#3tn+pTKK56aF@1F;TFp92h;q}3ogA%d!~5BVG55=mwkg3 zO`$V%qks&(lGEN%RzWWBIDTtQR=a;RU21`tIS@|Ls!hZGZCkxl-=S zZn^aMxcxc0SL;t*%wXZpv2K)Tkqqvd+(H@nkM0#G?Q^Y1$yu1rc(I$&+5bv@c>`|N z2T#j=Dq-sxXO+-}EKylN^rHHTlLD>%iwnU)l3O6ot$x-i4@-b(W%`~jecmWzp5vWx zB@eTJAW&tk3DVvU#!G$`12W(;fdBXJ|1j`>82CR7{2vDXS25rfRTlrk9cvof+nW8| zE$xkwwlyvOrk3tVTWecWBX<}_+E%ytC!$&McxJyl+TYaJ(a{<4uV|rkS9eQKOGl)o zSu*o4+S9nQrN-aWv#RpCmh~%JI{Zs3ufLiYQ{Yj2Ub)&ADb?$wQvtH=7^^>1lq#NXW0=-=RPY0CPo?72>&nx|ZNVfBp6mx=D~ zX&kw#`TmZUwadF2dwRN7bvO2C;|u(qU6HoV4gqAXzpJ}*O6BV^mn#5XM^Bo%WkMm8*1x#7oKQ)`7m5%muq>S<<^f-ZX~#x$Tw^>v#_zy zpM}|xinmjIjo`V?-`du(vZcGLyR9R#d{tx5DnlB%JszowOGbiJ=+GgYY;4T&uj=fH zbTmTSODo&8;a2~39i3}CmP&uo_P{)3 zssqoeCDM(czw5fDp6cr5@0w{@Q-5h?2Q#s)qp7W{v0Zsc29Twdm;05KQU7wtr=^=v zdb;LRa)ZC8rMs=MeR)T8^$O-RRM+0(pFDZ;NLZ)`IJf&QQIC`_p!r~ft!?X=$B|X( zwzFyPIzN?N*WIo(Mv18OU6IihUD4jwB*7c}Yg)Q{U_CB;ZgW|k_)`#nE~kw@mGdf@ zZ_Sk%l*+*Lw5{xDj6}Oz42;0r*xuf`wxxNwqyU-5yD(*U?ka!Ns+OkfDmyxLAcWi) zFqvpQU5!lyhF3mvCDM#`L71A1Oim?#x<6p9trhwj8EAiHSi9HKohC&WgfU}sT6q_! zj7vAm+?q}nMj09b}l8L|F}cI-`=IvALNA zvS)-0!ld}Oq@yR=)z#U}3YtA-oJGig{=}a1HQ&UZnu+bv8b3JdWG1XsexNw^uWgI0 z;!k^XQ)72?jep|g&rIv_kl)N*|B7g9YfHC3(%I?nS4j$y6Ruu*&JO`TC;h5lLoiP1^^ z*7nAgJ$zTKn^-kvowmdL1-;94;w~5Zz7CpbrErUoP>+Xns&&#`MnH+4>`c@&x3ja^ zP)!C3CCG_A4x~($_sA!NMYfT$yY$%9+1(xOiq!a9)2T%EMN9~p z4w};0;qQq+g3JR${9~cJj@GvB)&3}~pEX2;RXCEgEYwBo6MGcEIz?ATVDXo?tnOmP zlAIl#S&~dejbHk+FfBCp_?tV)67eIkHm#cM_b={V?{8e$*w!(be6x+L+>Dgb-pR-- z3Z=&^!fEM}d`mhSSHSWjoqo**pt@*k{%rb?@m9!hfEg(G^0(ZKuo>S9fp1ac8bOO$ zU9^Nu#$kg;J{@|=nI-@C_*cNnbgA^4r4kN!eY6drTn=Zrp}!M;>z}PNRT|}Anol|V z3#XdyM&vvH#CBMi{P`2@O6S7CzqmoSy=;ah0wf%FC5$q%YIQDL%`Hux%`LD#vSg8a zhCeC#>C!OFxntn$eRLLQWoea}X(Sob-uzDg!g;e7eZ0C_k*~BNXlAflnVT;8y7VzZ zt1{A=dG62=WSk9|P$#gar(ULn85DnHeV6RyAkmf{;noU=JBYFhIBe0gnB{?`Y<)Hz zWXW8aBBpyDmkyPx+*TaqurYL~DZMQ;_|<6=?ONI0$PhU54~owsy>tg0{v>!sG;CWV zYf5=jqm*I>roqmPo2g{ITkV=Q7zNTVtV1*Z1$;nzrt6f#sSBH#G+=oxw8Z$Oo6h8u zl&lUb0CdV3KH*P_X9qA=WtU%?2`1BFVh=-P))Tj9h9BuF+ScJ;yQ-~el|Qn|V6BZo zb7jKC46pzt|7GFPFkO1&=5zVv?0}oQJlbOjQr@G_p+gtnGD7YWF1$?s%{E(iv*2}h zw8JRU@{7Y&VG@zfZaNL%0y2ASVWW_qzr3=u!qha<_`YjC>Nxa>l(HUiDx2`B+F;7y zNt*b}dAIaK__yEe`u`*Yze*Z5`xjM?AOi~XK>2~#BcL^#^~>#O1`5+pAp`n~5VpKI z(z)U@)0X!{RDLs^^-PRbBAn2fNvzqj=!+l-`<>WR%ZMslS%8GKXi-R@_IN7!=f9+G zZg{?*xGDaHOD?Go&-Tx&yUH&~o;kXN%Q~VgYR!~vtZ8+*BRagky7{v&yK3R$x}bmI zW#P*Mi|aB~Yx~ll6{t!+GYw$_Rw^WvJ#Og@rwC+SjooYlkVA$`4MuM1ZduJLDK*H; zSv^88LUJqGJ69mIX>%SkjYN!-CAN`XHFdJ$_kg8r_N(M2B_x0LT0kbL({L#2H0fEj zbT`U&-7px*X(%;UF4uvPotaC=fF_VMZMnjtbR)B#=!%?0Vulbi>9T`Xa)oNM78-|M+dDh2>tTSeYk_7nwM;?|6?)Gm zI047cTyN{>iLf_NDBw@37H}4gVavB$T8PDw3v{s(hQXjoUuncFRU?nf@cnuQ$5L3e z0M5vcT;6QAGo>;k^Oxlx-pYH?kL1g=@@}emuX4lT17k*cglK6HoW1V`dFaTT>Fuw) zswT7T7X12knbXa3XGe=r5Sm{hpUS4mo_UwmyGk~xAT1|LF;#3kc$9pKbs7HbT&iG8 zPa{u*>~jrIFtQBdLV0Dl0ug`(#}RUsr;IS_4IB9G4wCfZ#b(LBkAJz-I|R|9tVG#Rq*SkFv22` zNavKp$&N82FTS@tV`i*rIkO*J-6>ic;SZp&tFs3=w3A8UtQ2#Nf>)V}vWyEd+(EfV zS7TfE|Q`djb+#D0O;gxIACke}C znONNx86HbMUH?bO`L1~KimrErtiz)vXJozGq!8}Y)?PeXOy*3t6k1N9tOKoRtJm}|O@4}fpO|n&PYHY9Z2pv1>XB`}! zEuXshJdZ3FYIJj1=p@N&6x@#DsGYS(E4XC-@)d0zQ&u2+>)ysADLu11&@`Boz$}lh ztX-Y3$XOnT4|I0V@;J=B zL_3sfmBBj74}}$?Lu6Ur*uA>5TRSTla9I)M9TTTpO@_G`fhD8Jne0|48%No;t#HdY zM0jN`Y37XWutD|sm&~6xf58>={ROW59=5>BC=^F!(FdXy$xj?c~?{1g`r2R z#2Kbw^trHx<<7#fko`9}&lO2XNA0J38Y)Z6C)uJViD{i&`NZZ5(X-cFaDo1K+M1V7 z>{;G@ogmUx;7S1%in98?NYxJDgG5ywIiQ#4?q@1s17e&JR8iq&qU2W^7G0%a)<4E$ z)U!HMb7r5Tw$**EJ2Ra)QC!1qRig{mYhcr2J#ZDq&J1a5Hq+lply0EabrNOz*YJpL z0E>yq1{#FYRaInWIVEa5J*yh4^{-}hCK8#X-5hu&w{+5t&+;d58_fb$pvl6gq)hCY zMR6TdsYHxM*N=mtRvKG-3AoORZ8q+!~(6OwOPuVV#Y4U=!-%`b;)oy1D2GzQS>AJ9Cc?PS3=ijI5vLo^3S-DnN(R0Q6!ALCnF3HDt7V14o$ii|R%YSP z7DLD)tU-rUKi-R9x(mBMvo#ik@E?@y{F|p_X7+EH*hQ*oB{QnlOsrbkq=rn?LU)@8 z0eH$g*zHw#Ttl(j1O?K~&30Bgzma;Sl$)*2T@NL4K|97>qc}AU!Y0xpjms_Pvt>wU z5=MedE&@4|+s$IgKsud8y@sz1Bk9?uHI-5QjUv9cG>b7z{jQj?vZ-ixco_~zS*#9l z=cILrssxd$oq-hmiUjHaq}9Wrjjc)Y4P#Z4Jy}{rPqs=WJq=8xqkv1t(#5oxs9i%x zq-&zidZP-=$jqMX?3rjsoTU8nNau1@D`w%%L54#tjH;?a>*fbXR;(_pYgn$RUXEsS zIcir?xti)cnKX>V@0nINdsvbnHCtCH9d)INOqDceD1IKvPJ^aoMh0Oi67@Pt)6Bj? z5sTVEC@wAGh#EpRJsRnk&U%ajLKk~iV=&nhh4KuOlexaSab;VRSdZ8F&r>V%IuFYx zN(AP-dJ^d03QA>+0r={yY7zS`gHz*2h;!JsUr^N35~*6=b$wc%k}TsjO5fm5y(1lwFxSGdzx+Z}^}$u4rm*sh%=*+Jzpe$jluFsZ2SMsLjlzB9`|k zTPY|GnUbBR@f}mlp?Y7wXx{RLmo2zF9IU&{a|!+hX2S!v*w#dK$F72=D_hE%moZA} zMDbiUXZEzuR)0oT|0y0Z7fu&a@`PP?DH$nQM>49M#`d+1tV(XBs?b+&O_@2Y_bj(9 z-RWdlM<&rN<1FKjVOPsJB6Ew!2)a4SZ^!e)Yyo6ARsD>n$TQ4`NQa4@AWhj61vVm9K{3qvhm^g^+~LuV(AxMcck5HUMrODq~3gi ziU?VIZnuD_2;5v*$-`8M-Aa!FyR1v;KEQvYUE=p6BbO2Tg`|xEoUKN4%bK<(_G%Zj zM4B#OaO8j811?7>5ud;jQV=%YBgF_WBbRdAfZwB}$VQsf;mGPLLrsE-_K4rnEDt=&qy9slx}Z8JXKMqq&@Qt4 zsNxGb_*NiwAyc$A)?AG_0KGi z$_+;CH_I~*BFd=hvg?$+5bAY2bx@3Drbar-PX=`;8UbFFH9fOcwbndLw+1OKb}Zi6 z;(S|AjT`^T9@&O8cdkYg;BRA%3 z&0SgD376m`9Dp8}w$IAy9NrhUkN&=#_cPD~t?^O2mDMleG28&t>r(zcwQcnGQM{Mo z!1!~LCi{J3<~`YFW%a#q`t`g|$9UwyJe=NxzuV)-)+?(&#FwpBR=>jg6SxCc;Y=Kh zk?0AR>%{ww)T5ZqXLMdV9EK>UD2XqqiH{$yHlM3`yTtQ+iw^&UFNCpd(W@qNFekYd z&-q!)^DW?I9tA{pduN4L)_lM0YR@D^o%z|H+49#dZLRdquT$E(^J|KdwVvtaaoK#! zip&CjFN6(?(@CEk0Py!y_Gf2jURj%3t}UHXTu>ZNoR~gqR*GN3<%btUU&7&%9ltX9 z?&1q9lU4YG3r^!J4C2(aXQ!O+#bU`^zb8U7a0#|sQ|nn6uK0}>3`gqXy=SLHoB4up zDYO0IE{fCr){nn0{TRN!ZIJMR|Ah7Uot|l-XpYN;dS~_lIP{UMR`RP_pg+MYX&mA8c{itCE`m+!-cNdzt~%4K5%fsBMn}@$(ujs-EdGU zPKSj<6>LPpB*MX?6x@c9Sr?NEic80H9Fb;sGnBQ5?iCoBgl5DUG7h^%S34vbCQC;R zn@OIPZzxFijJOQrvNyt(xTbjjFo%&`$=UtvxlR1llN& z6^Qsahh}#H(`>$qvFX)Lxkz^9ShJ^FDNXPlq(Msl-(zi-@|DPvc*gv-P^=#X_u z7rBP(UUI@k;^dJj7uWW%Ymr%9%?ONElu5V7@<)Y@Y7nKbDHjVwXO+3&x0Iiy(Y3vC z@oUz&aY$8XXt;AFik7z@fi>YFgSu1evD$mvUzR8fOOle4{9 zqcBQmJ7#BGr!jWUY2B`ETYid~uBgz%n_ddTuY)kOvzjelv+1(7b*pa`;_`(JQs%n1 zIvXlZs+v!xE#eE*xYXNgeQR3IqXBWtWzyD(q? zW~@#2g4b}JduT7CE>37V)Y=qez6ztG1R-V3ah-4!d9_PnYJQ7F87FzNSxJthMQ4uO z5{5$?j9!i#*ECM;L6KFDT4ggouYJjsv8Em&UDl!9Fak5@=%a5!`>9rb+3B+{Bu~<1 z))Nh(aO5vJ?N64OjYV?*OA^oj&E+%kpQPtUVRTwLvto|~)m*Thqzi`*_@biAy*@d< zH7zqNvyQ{L7eL&HTdCa2lOOv`b^9x6?=|O}%uS_2xMr=<-KhdPBzxbmCN=wE(E*ug zD^@Trxx6fu`J#;z$LS1*tW=rh51&?8QG5R`JKwQ2YmD;=>CLQWPV`qiKOAcbcY3ld za!x2uH2Oortn!513tN5ETYk3am zIOxLg=bS?B?2>8W@ITvhe*9NO5nD69qYV-<6|Q-wdqYsgM;!b288npRjaj*eZ?LK< z+;`3WBOz&Ygv{%H!bj7xlhZ!)A?&AyqIwJ?WW_aJ-IaYIe)jS)k?;fvoCf8b8cU=hD2+%`VyDg{9N^oXIWj zwz$~~$8wd_9sk0AQJ6YX5M3>@HBQDv^{yy@a zvP^O6WDpMWGc!KyRr5WXiUO6GU~5z~ZB_+`3zD*CWuA)8Cv)2{zg+xf5MP3t>fJxx zug~c8_-WS1lg}qM4aeS&J`kKm~F}O#s_{)pCtEZP2m6v7q z`ZIg2MgEo!?HUdlCl@VpV1qBI=oBQ|t_gnfn~e2^)4yS7f{Vck`q1W?<7#om{2V_U zBA$}@s-}eTv3f5R9Z1s?EzxxX#q8gQ8j>%+>KKZ(rg$=gwyK(5D_L}lASs6?m5d^K zK>YhBbZ)qfG!>ups1=>jap}+kQ441MWK7O=MAw!%p6Y}_IL>SNYa-iJ94Co?ih2?$ z>#SH3o+++uBSicd-}r7LmvBZcD@JIPaMzt*+HrnuvNOw0YRtRdHH2D-P2+^Mkx%A} zF1qO=x(Op)IL_NelUq92Zg8r&YD)4mAbfX45gTs}lI?ibMVX<`+~LlQ3d)lmj&48L zsD&St+!iu{J4Z9SR@v!nm6Dn9>F+uTv(qK98V&d;tD0~Q`(1V8p6w>N+ZYCD&F%nq z+*FjfpOAIUPu!~B7^U3iI#pA-mQYLU`3kMaZaV1&w3T2)W#ycSzUFBb^ufpk2 z`zP6AWUa|^c!u7e_H=<8jqI-{*O1-UwKr{{TgjKwc)%*ee&({fFtQ3c?!lc}p`e~^ z3PYP6E;=gO*Nx8aMuQ`&PO9d2LCufFT1^(GGekM~McK!3d90Ur*G@I`t(Dc?QSr{o z>MChH)P=PTRiWKv|=Y1KLVi9h`e9S}YU6yB^n;?bn z-y|)TVi9h`e9XffRA3C2l6Dbp!+gxc98_QoHZgB}&)>_CrW~7~t@zxXJcfc358h_& z9%wvl!{6~~sno%K?N=S@`=P0H>++WSwCFixboZRyc4>21exGn=CS_>XdiGA-RpB58 zS0J-bc3^JKYnfs)ga3+jR2#0pP*fL6+oY%_j z)o1vK6nouPJ+5x|cpa@7{h4(61GD~&mtqmGPIA#=u3ic!_@c|JxZP`dg$HTtPUBwt z)uwUdeRQ%dmz9{Ahj|@6xii|ft5q0|iPWr`RjxTzIB^%Hi~h_X7=4Ncz^D}~t4HH; zJd1f)8o$38zdy+Py4n1Chm`z!JL zJ-pBRk$LEXO;Go<)8zaljh}D(X=U|&n1Bk5!JPPgUi?0v_vXJ4-@mS`-UYAnciqq3 zosY)M*M0o0rN1#Ye&-w-@2dMbnO^t3f4ofpKPcCqEQk5nhR?Uf@5|!%MZW*FvU(Wv zy7QjGX#Q>iyJWssg*0MFN)vyj^FcnpHR&<1m$R)T2;MG!&TKCH(OObV$)UCuWhob`X>Id z+q$0@FkjA3(wOeZtyfilhvj%4)A4Hj{!aY<5$`{5v#Pq$wyUbQz^` zIL*&a|GMR>>a}pd9;>Q9YQC!aE&l$l#j5IFe13t?JH(vtG}Ac!_|B`U4@M4t@3g9V z6MPoGUmd>>=iM|Nu!_Hz;^BWVJD%Qx_w)9qpSn^uyvE;KbX!$jjJwbcmoZ)M@%QPt zX&?HA&mHquRX;G4b{t0ChODX{H+)s~8~nW+?|u$X+idG z?7yd<#j)+M7ZQ@yDo6B-EOT^?A5?rP#;-N6-)p7V<%!B|a`sCy%ZDYijw25l+9!|0 zD%m$Whq>Vvo$!~Z#r`!_bX+O=t(I9YEA$*&X-OHET>2&Ig?~c^Kj@c(e|2a2~J7it+ z{BP;ju+o1^zS`F~U+w>+^nC6AYx*^}!@n*P+J)-{$BmybsciC;ifNV8XUxuN-O(qn zq};;`SNq0SIHYqbJkjg}cV=^uapu)FTx{5R&n|m~OAp5x51tD2X1nPVLU_cN$R}5R znj)U$V_3KXK08%3$(4tjVsc?cdVFC;n3}oIG(Mni%4kSV zXSV@)qk0S)(0gC@DRU-=J<6QH>`$67&e_AcT;kQaW35XA{Vh?+;Rt{D#mD6`t9Bl{ zoSw_)&!|BRh;s(LDRdTCWP+oR}W0uC^Elq#J1%eqD&nI9c6X44h7tfz9g zAT+Ez)7bnG9UqU6CWPxFY9C-r@(UM}m`V1+{9S9w%+*yjiIU}`bm8cGbm>5xWX<#2 zWinX9eDlUdM2QGtWc{zwy2GG2Hu-wDicVgBM|)S>F@Miag}~PxCTmteO(KhKsyB zsut2G%l}gvOWdQZ%pbS}pNGlfQ{UkN%ELWc5_eaWU-;!2)h#+;!Q*T=bsoM2tPk6O z_+ZPlS{p!*t@ju?f=hab^com01J4a-8V%m;ZwKyo9MmUj##HzJ{VU|qJ-JaJow=iW zWFFTOkLc5@?!z}+>rR>E>F#0qq27xa9e+!=&FRp(1CMXuSd;gphG&s^Jj!2Q(cP3h zCoNpEm>f{D+o#75RjE1A5DpAPPj<;0G9n#atXk@0so3h26B^ShlkB(xkMFyzL+FGL zJ;jrMXn*3WxOJ*SaS1=E#ulY!b09Rky<0how@$x$aY7P75^(@jGM%x0O2HA&2p_+PnbuRtS`DHA)XyhPjG&<2BxE;v62ozF&8eoUDO}<)iH8#65yW&(WoW-}X3s-pQJXQJTAI%P@i%!6k8Y!3 ziO}SZzi>#>Ep&FeqzSVw=nGFu@VhKL*RF_*#|q21s4PBv;@}O39qZ0da*7VvC66U4 z;kae(e3B=om}{B?gB-k!ZvamYTv}&ewU=|xB)V#XhoiV`w40Kg)LbonNE2V@6&-Z1 zonPiybCMZ*N5!q8bFR^;Xxlw$PuCtAFuq8lb%*w=UnfDko31pzpo9xfLaHPWw)ayw zZ$(hXhr^Q247CmY9Qv*%UGz0sCmH?skI%~p8``McQ9t)6_OwWN=7ZT72ZTg8=4R#i zf4p+ulE6!z!I8{ydUEY&GR=3Vd%TusG)rX|(8N1wq%@>2PH%jAuyxxUIT4>lp=!@=UHwqCU5H zoW1+>9N91WZ@cKNee~8LH8P*`+kP8||9JaYYS55gJqERn-r7ZP?W4C2(ObvptyA>Y zIeObOw9m*XwgeBvnN3J!4w6^Ss-$W}_ly#sc)~f09Db|$`q%W_W5g9{Jc6lakta6& zyZSYJhF`JnW`9?2hc@Vi1273EFz*ihxaHr~-BE$1n@3LOAGd4F=QJw4*|Z>Bj2HH) zi`lvscjebcaVp+)dRI}{+(lgm6Lc@eL~61tOpb@p{#O3>A1|rz)^W?RUs;X*@dR7m3(A;?l3x#5YFsH z$!R`z-nn*xYGzL0u0E^g>m!<%c_M;$HFEV#AGabaxbgWGxgnYPFu7Tx4iIGJ#Y&iau# zUs;n2XZlBSx-T`zyMPF(=yHiLSO)jpo6>l5kV9&4&rp&9oD(b|l2=O^J%l;A7@X%N z{X@FL3n>RJ7tYr5eG@`DKirbesoXHDqKro`M-LLro*!Rw#IoVJ&+e^r*490moH9=N z^Xsd8N^$blG&nxJX(Ap$%r=g%86LK7?-DO@zJ0?r@#Hv|y?vfVGQ5ySb0jI7=gh1L zq@gv$%E`@qK#WO{5+v?sZy`I#=ZLF2(3JsHvA8X7z7cUF{g3VhA;U45K3 zj*rSor4+R_LaGhOY4F~l1Bdp=&ri88F>V|o%TvAG67$iX%Y0z>X;S!*wUBq(4jwup zB=%ah%y-}{zP2_DliBS1`yV_AJ}SYKsxtOV$Up4M#OsPK%}O?G>?e8u3x$uK1?nz1 zJ9Ei4tuSpZe65x)y0|&cIg~e~%j{yr=i%d~;UbV?{)GSzyM$CV|B1@Wmt}Nm6~Blr ze{?U2sr==bH1A9=V=FJ}nhsYG`bChM8C55HQj~WlZF~t)d|6lX=)$z{ETzn?D2~-k zMpH;RHr*onp4pcRtqzPCRL(F7^Sxv}`mx9^hF7bkqu-`+ z1DMWhIC$0(KV;c7Po{U0pGofdhpV#qEij!OmP!0J&AJ{wdZKvPO?Pa0exfEpR{mi| zlq^|(weLa8v8HsHV`<4xMUG*_m#Ty{B;RvM0c)?u=js1T-I9fpQl)B+6+}n3d-Uwp zyHDTNUE9R9NqN87w1Utk1x2O&X_+%K`6Fw7n3Y~{!zMfL!=q_<3;#`xE1ELBjOPrr zO7|`3*JniELDAmtICqR4r$Y+zhUE3+H^RVFG>yH*5Z|lKAhDZ>)uxB%efeFm+8mY` z(Q7Cx=-tQ7Snd3?=S(lENb&USa7{;7zAyckdcuz~pX{^FM3m8@dhK}l7Fsk#Ayg>)12&cH9*^@(|lY@O6 zhMZg;eqx5Ei#F5AS4=nnkdCiL=1fUAAYT@C!r8WP1S;$ywW1DQ4DNI{naNXOqq$*i zq>UrEkd7YDjgLN{mmhRIlF)tSnp^PV??Q9T9KB*ysb~Y_{nBiHTqG4AD9T(-l=&mN ztccy5j+MFW>qP&l^KpbTy854goDt3C0d>imtR|P!O|4=#J~NGr$>S+B4%gLjLMihN zUpTH^J1%JArcD0Rf&XxQ5C8FFdp~yYV+TKW@MA|mcJyP%4ymHbwrGd;@N-9W0ufoc zXR2geirX@{8dNN7rml zY7*9jefE}x{*6L0JKD0gFKe8iKcrxI9}buF=-qobKmCcE5GK*qHG8|^0i$s4B%a8Z zPjuZMTNR^y-|&+#T5dX5`TNVS!h1@LF2kg2`e;w;ujvQbKcvs&0HzP_4A%k>d8z*@ zU3kz6J4gSJZYaM8Yc`4$)iE2!NVxwY`IQ)sy^Wm0bDrZMkA`%dJ{}hAwT9M+hgj5T z<`>WRdx&FS4AojGqW1CFBfpqA6*7TCkbd8D^vGL;qOs^G3$K4kSMvl>5+~osB~xaU zPAg~Ui(QHth5YpLv`glDmg_&c0-HO#IS@ihwtUHkolmAue#WJ;26txhXw1d`&`Q$x znf-#OylY%8voqm7K}k_n_=f^3OV~Z~WJ_4*zc07i$};7Q)|yH^HR$i^DOm<&{hdtz zabWE<$@FXMq`jlg=Oo>~z5idYpCL7a9rj9gqS-RD|L*sm-8Q3hxCWPNs%M6sAfMaI z{K=F2661gi*XP?NTvuO248$YQDIBAJ;e{T)&zal0$H@HL9{Ifn3`q6J%O6lMx@Ixo_WmNMk#@{DN8g5*P?lX(B3jgiS zf9E$$rT7QBtFPw0?Xb2RuCv~l6ZU{BYvVyVBXF#CiB2f||6JCq7pdew};Obygw5As+HE zSxq`F6=4MbW6C~0JeMtCS&eo6IrSk`pX|mQD9g$(R(JA89^K(Zs zD}8(>Idc=snpQ^>cu<#}m83fEGW?Gg;SlG4D`$4Dc#MsMg)hWIb_u^k!!H_4W zAM7_TvF3)Z;wd~3)a^w0!($aRV=6>b<}QHfaZz4YQFB{UG%Y&tTNZXP>H1W%Id%gc z{#}k#t>5GE1FxbVE=D#hjh|@B7fuLEZsgu6l@+7$Q4YSyq6XxcP2ZvJQ}BPQ!SldN zrsU_>T+@>DU+Z*FZYcDjUhIn!Xguewl@}y%o4AiV=c#W)hv)T6c6d2=!FguB1Uc;M zl~%0J?`KDJN%)t%D)@&J!Vy)D=|$&ONzx}g<2!j&Yjn6bYzYVo(`63srFs<%D)&+5 znGGCgJsjbgTeyGM7U-WNBg)89We@2R}OKvvQ*oj>AR5@S@$C9hPtyI%P&Z^7Gmi4B<+b5e4}phV$lBgZDVE#o$0qbq*4E2jW6eV&SU{@6l=OGcBM zZ)x>>E@@en_L~ZE<4|(89k}lj`;Dqc}cQrLL zXyUd>@}yTQt3p78W}Vro?Ow_J(fl2X50OpX|2T`FwKs56TBr)m6lO`;}zOZF=0S2DdXC+z*jH^?JHVM=~k`E){KnaXqubFx;T(OLgpCsa>0QD2_rqHB2E{FuSto~f~Xd&EmBexCtvfXCOgujz0ph@ z)T(E4oQR_~{T4GIY>9K`) zcKp=VkTmm;eX^Gnwm1KcUjDcCWB?@18C{3ZqwA7Kz;R}>tRU>=MKy`H6O(vc+&KP` z@MOCY_RI@HEDu*a_>z z?_crm4}|}%jal~JUY6li{DMQ!6qaQ(coOgpSk~WgH9o)}@%t9M|Np!;`Ttq?|7h6; z|3~@!Z?mzzUq=qk!WiUY6rRN$Fh-nzKE~i_7*D0J&)$RmvHz;ro&=9ucTG$n)-x^TOw8wKOgk|o65Ai+hZ_}-S>6+t57)xcCiq|m*C%`gn1k3&r z&WCkag59wkOX2+bel@7)0zAX|=i*v4#zRTE{38!Kl z)5w65EJb`0y92_?n#2ov!;Ut`l<*?14#^EsCMz{+0%Wy1%<#Ku<+!olzxp16W zR@=vAm%;jW$Due0wsQe2pX>htE^l0YgCXb*+y4vLrW@k%`0vele+Aa>F5_qGV>{V@uG8tcaM>>Cj?*y+w#nMC9UMEB>ook1Mfe)l z@dFq`_U(&kg^ysr*_Rz*JJqu(|G2I+it#7x$K9|V-huIPD;!6z^Dns0ZQ&T0g2Q0nTegc~ zOe}=uD2HV^5kF%Zn!}gtv1}{gm^IIRV42^?OZXmcdk5fZ9E$F+J=|8Ahi&EO<8dnP zh4J?an&MHoj)vG3jp2BAd>ePS;}KkrJ>mGWyaQp{Z()qj$13cEKCq39*~d_b_OMJY ze%UISk(HqlY z8vDjN+b@>wEV!QiV7)rwOFW0IV4Jv1GaMMdm+)?zTTk2BI=g){hAu+|j)HC20*i4n zjG6T@22aEFn#UP1j_jjjV80m8uE%+Y!#ZAz$FTw4$3rl-)0m6{V4L3!W70hQ`!x)} z2+V`=@feoCx_*vF;WlY|5Uwa0A}P?lA95un)F_ZDAVM z`znsbLVSf^FbT7e^vf{*J_J=5iH%X;uLkv8fF`WpSa|`*p&L5D*t1_9*M-;%jswTq zDtw2XVB5b2WAjgZi$7pLnolL>Vkz!~eU!vRYyMu2b8#Ac72`J;@5bPCEQ7IRto6s> zn1A1cZE+R4!&rYCj=>%{64q-^m?jtR!FpN0322G^aWGzoF=?!v4deDBw7@_-iGKJ2 z4`DW}*AhGf%i}t4f@5NB*j_)ub{P)07n@=d_Q7K?zD;u=df|MyykqWgKVh}U5IJHFq>^DqXii)FU#?_x(7Yg=P;SdYJ8zOL(Q^ue95o!a3`xV-rp z*Y;m?JcX68Uw=Ul+>O)lDmKFm*#BR^w(o{KbcV~Vi>u+f(ijHg&GxYE#=`vEZXSc{ zU>*N}Iz@?qahB&66^;1 z;sIQY+i@Y<;7s^B2c{bW``Os4B%hUi;j%C;$ZZp0^ zZ#;~5a6E2;^|yZC!0jkI2Ig-w%^XMZ!6*YT*m-x4*S!(eT`C>ekpq5 zTbRaqpWqve!V!2BmhE(y$5C+l<#7ApGPZ?n@BDH!hGqE$1sIGi@f}to4+mf^bcStZ zJ&h~lSDQiG|n$*8Lew$NBMR z^Lr1rw|Uqn=65yHuq=0C8&setR>4?#5|(WMtbcvKtbcvJ8nW_gv`0%Ef^#tfPFoIR z(9cbA8aiMMO7JSiV*wt6W8XIRb4TomOL0B^gP-v>hQJu^i!)%XnXl_H59dw5hjJoCD*%7aWIvww-N{8_@)<(F{AF7`B1sZ-wjOHpDb;cb~^=SOVK`ZgQ zw{W`sXdC>52k~+?E^($LLB}4r9eUoM*nKwf-0268wtASO)8{7Iwu( z7zEelHqo@M)B3usW&Q!JaXBn&dt3_J^IBBm1DuT8u`kTqbsE>^zatKY`Q3`+;Ic2_ zSZsnuupQsU)o^=dJ}zV1tdH6F3Ju^m9gd$d45z?tgKcXcPlx5&4341*xEJGKJsf9F zdk>c3ZrGL=<3_xV<|x8soQCcwMHR~M0uDh7SjP4^0+yp8ti#T*EQ7HvjJ-v82d;Al zEWddygz?k_1=tO*;UU;={c$pmf%!ZAM;I@*<(GILTjCp-zkPao{O-KnVVjwUF>XC= z$LnEzN?_l#gJm}#%Vay)hjXw$ZpL6Z|54bU1K_r39TCVEH=m5*LBTVOK z=NU`YaQZ%Qxk-2w&U+rVM z!WdkRd$B(@f@87>wx@NPkMm)lUI@!!-@4tgjco7Fa3q?eHA-PWuEJAz7_Rdy@_OII#>(&>(tiRi~(Xb4b+vV27m$3dL@Cd4~1Z%^xJKgkOU^koy z>%0=%!uq&g*Yz6Q23`Q$a8oSD>(~z8U@8{lP&|WM(Ffge1P;dm7=SA<2YX=`d<)}a zeYhUiZ9mOM8yE}s!R61wRdCrIV7`{wWv_$nbt*PM8S49G%-843_UQ`y@GaP zunm8J%Q+@(d)sOl9KV;t_A)>FX+9R>Cp5wva2@BuJUYR)DunBFeq-1_kK%gF#)WX4 zZj8Bj9UYJh>-Q{dmpO1*%hd$7hwJ|cZW~tPg(E&J+7*uHMZ zwu9R=^IZY!ZQSI*y4qIH;R{&)l{gS>aScwv3HT7^-3ykjzF!UMxd5|Rzx~%6+u~t- z3CG-%ScEBPfg56%@^1SXi&L>P3h*ARkFjAp---Ls4+GHz*TQw#hkIac7`H=VtQEn$ z98Z1^8o&N+UpW?bgyZ2R*tdP*_Fy6`|I2V)#@B;59q*tuZp1S<2#3RbTH+D7?yE2v zZLmIW$65FU%U~IdW#{#PF}Xjs#JVt!%V9fMZ`<($SiWn}9k!3#^FA=HXTWx`jAx(~ z%xgawvqzy3Zia1cJJ}zvz;<1NQ}H>B@21!lmc=wtlaE0o&bld&4nm-M+_C%*9T41CQcf48lp+9M(G**JC6Oh4s4=-O(K9 z!!)kvczlh+@F}WMg}-6!?uN^;Jv!qB*q&R$`tOP@V1HY`H(`6(cdpm%;B40a z8;0R+e21f8zgo7<;W)kz$KX2H_FKbPu$||?ICbn6!FV5o^>83u$2mA0d%<-%rut(H zUWc(_9*xlk#?8gp7p1V@PKMiwFK{r1!}xE97WfRO-~&v6aeNQV+ijk4@haR-tM{sD9plf zus*-y0a&iNXo73d5$0*R{5%m?VNW>L-iLK`4BUyC*cLOe14hE~+xD$tA3g?`Jq)(_ zN0@^DU|n>;zHpxFcHB0@mAD<2<1Rc4mvxy7VOs0B3(kV=+8wLlx?SJ9*b2Rn3+vnk z4e=X}h4YTbHArI!8engnibil5`|l}ijA!s6-o&4<&c@4rSP8cww#kz)hWo(n$%Am- zL$GZZz`AUWb72|F@c~S~32ckTFg9HG9JGfqw>w_Ljj(SPV>Ak}IVNLM>;Pk-Dei}D zY2JUqd3kV*%!To2y=}iE;?K)@x1CPMS@3l?M!@yB-a}w)bb|R^j!$tgdcd;O_sf2* z&)1f${3vXO{%|~Qfu48)_N)DAA3O$Qz`kq&+x}~O4C8)R7+2@v6FdTAU_5TX;W!Al zz&SO&*| zWvql_#_>^#=5W1^8Ovv#_J;M^6F*^lypEkQ2}|L6tX~;kLN(UGM=%y$hcW&bHh|li zN6`V+@mRcrJ1_*t!B{oEowpu-z$<8g?{E`-MlS3>rzh!LzwLA-KErcxTo&P7q;Wg) zVY@ZNa@-8d))BAadl(;OZZ zUw`35d=1;gc5MxpYl&y@C(2NPemEL0Vr^`IsrU(Z!F=7uy@%&96YIjV+F!<`Z9NfB z!S=L&7Qyw|w~es_%-40^iB7l-vtfImgWfQ9f5mMWjq~vsE`@FT4eX~Q(Gh!K09>{Y z#=^L=&h}jkG{a6CXR&VvOmv-ZMi8%;!(Kmv#rf@50v73 zSf`U70M|PUFQO3Z!1#F!wwY~Y zU)T4`HmJ|nG*V0YM03(yT)!G4&FIk4~DwwlL8 z7%%4S`*=KzA{>D!XaVyzmhAItTm_eLJzK(fcn|NQ750L0b~gTlG!|kA_Q20@x!Ex9 zU(g*c*Rh9#*0)?#2p~!|`C-{DqBhJzU0Z#~rZD4dMEXLB9{qg>_pC z%Wwg@q6{13AlMG$@ewYCWwG6_L>CyxH{n8zgWHh9Fbv;fS2#wOV>AZhRJhJ6oCwF8 z?;pc_^5Ax9KbYoB_+4Nf-opEM11@&}F2`h8--q!!#^7X>;1b-A{V@T?!PT%{=Cw6) z;JR)1(_kGQMECgbhj=%R&cWJv5{qD2r@?;N2sh#-SjTVh9b9)VEZ^_wg@f?`oc9h<|p`4!t^G3*e!Y=7yMqTVdP$hU?H1ui`AUhOx36Zh&oj2W1?v0Npq>kmX8pF+$@m0rOBP`YY(M*XcN_=D+wrhXo5O96pN%d1!q0kc>)U%-AdUd^LD{zg82#-DIqmhoEH&*M-D<9`lz!2~>xF?b)A z$#ocGYr+0s7TcHijyMFH<1Z|N>zIj_u>7N8T`t889E)RcE-ph3y5SXki3_k3tWRV7 zf^Tp>HpMMygoEI?U5>@r3~nEG#PP8Hmhn7XjMtEhKQJ5z!m`^p*Wr6q;b@rW*LWUo zJ8f&rv>wL8w)6c?bjKcWn_&NJ2g`j0tlz!Jhh^OxQ{jB;W0{-6HgasbZp&l&dSM8x z^IrHFwwdW|o3&w_^~N=@Ud1pU<6$z6!iU%a*28vN0n1SU`^38Lip#MPK0|Bl3zszp zeuM3299n+c%04#D4d{Z$aR5f4CoaM5_!z&V4;I4u^oQ%;8c$*bcE@`-6s9x&df*{g z4&%l)v@O4dZS(|w!1b`c_J{eNgL2q^XX8HD-nN-}b%SkXd2QQ548zSh9oFXvJcAG5 zt0Nx4Rk#gDqrP7a>bU?ptl!w#9&YO#6KU8##=uvwEx*C~I1MkLFO0XtFbO*#i9yGN z{bZcmfBu~Z`_#NX!j3Q&o$k7t!G8W6o8n=diIFg$ZQ$5;+&Vr6!~WeEw_q|(z;ieb zqp=e%gUc?1b@&=PV-DJ20vtw;F6R{y3@*lbSQWop#$4EDzv3YD#t*R0t>8LV;7H7k-;I}>@CnT8Svc+{ta;57r^n+1CB{!+Bp9k_rTb6Is2;!FJlXI!rC|ymd|+Y zjQ#K4+!EWE z_hOij?2p&6J*;m#ShpTdUw^kG1eMUc_TCKjZ3mY!2&r zEk1+o)D^a;<+vZ!n1E05Ic#714FD&a@u#N3&*XjD6 zg6*~$7Qz^^zKhWXw&zCp7~L=fC&GC@!hUastza2!?_Xe>Y>9VZJMM-PFdw7vKJ4dD za3^fH?y#TC*D-q)oYx5T{c2Fp1+WbVz`igJMq?Aq#&Foqcf+_az9wQ{*oO9t@n^p` z!>-r`=4txBa60TeW5M_u54QnT*c<=B3K)O(wZ`D*_}$ps7QJC!`@?Z*8O-1G$;<8C zb#R+}CG7K;V4uH&L2z6;{+FU7jHj<)EcmzUI15v;JI;skbtpz+AZ~|or)O{rY!~Z% zHFm;tux*Uz8?iB5=j&*RN$~X)1-uo)^~KEL66JdA^3Us-;W9ho95ljHSR2;oLl}e4!!*a@7Z}Hv z;Q$zOZU-L3I-spw?FpgTovJQs*X*qt!=~#*PVgAOoSk;IE;12#CM0cBcOZKcg?~ zAKP;bHpa)83%4yJVP88={Jb5EQS&nf8^gZ55$EC|^u_})Z50M$09?1RHv+D+2&TIm z#;j#(k1g;l&cj<+j2H1UHo*ieLl^9h>1YO*GyYzKaZ-q>Fh=fyvDg7a;C8{7a{brB zSiJ;}+dt#KZOgkb7B}NZ90uESE$oV>usvpA6+XqSus=*=yIFSY`U)Hyj+qx=d2Dy{ zw#_WZg}4cGuqoUQStrwd24mi3|H3RBjxF&BEdPdh0Je>BkjAO7jHaZGoooZkk%wbZfV*K` zZh`$Y9+ubgb;Oxi7nZdTY(vxRh5CNkKK1#sA1g2#X{?1EVEf#GXJDH<-}t;8Um+K^ z;|DNCPsfjV1zX@gm~SEMD`Vpg7$=jkA=<(|T#1pe4~@<1@g$7LkMTVQ;w%`qN8w`p ziC1wW9>UW&9xc%b$6y0&i(as9`(Rx>hwk_T*3r1J4qL%885< zlhFoM*b272{oNa@;5eLuFX8%ZSKG*K#L=*A$6^wUo2zgnmSPrM_AQ)>YvKAV>$$Ma z_ruq4eP_V*XQKg3XI;LHKl}G0+=Uac5gMW^lD7DizuhJsfL(ACKF3PfXO`JEd=ook z39QeRNaID!hw<+8Vb~iBV7q++>$@4sV2t{@47*`N*w+2wJj-TXzQJN#fZMPmhTsNR z2lKSgY^R~HEiS=nFfKR74tNPY&;{F~zF*d@K3~7Ea{J*mw1Ms981nrj?1w^>!1n8e zjxc^6fNkFv#z_v`zI+V(;|DwsV}Cn5j_=?$peKwm^Rh2n!#rNb(`W?ytv$x!4s?KV zwG&)!1b)L*7$57v*r>*JaC=h@VIw+SPP4>GmgR>G)6xDhGn@O zSHV1|!~EUG*iN>|&v*&uI|jF+2OKy1qA#w&K}cgEY*X91H;Q0=FNEV|3PxfB*e2#- zdSm=ioD2Kw6&UMl!}J&95qu2GUx=@<9M;MDTAw?y32YDB#=LAd`@=H4jbd1qcaeiR zcn?qFb&N$f*asyz8#lwgw2zO)d9bcmVGp=HnSl3kH*D`4VY}>v9oXyZh${v+TnN)Z^eHbgFR8-FUwe;ubo-BZM`{+g@@z!sl4BWM(7L2 zrJs#~!(pr&Cta`%TjB;3!#JdX+;*LXNmw8I;wyB5 zW5?J&8phg8`11SsRLsX+u>4~%5U;^ytY0qNUK#(kvF$z%!Ma+myJ6n* zVOrN^`z^qk*al_z5%0ma_I-bx2H>h;Q*M_JHNFt<3WTe1jKZy~m;z z&cZ-gPwVg{ERX%OJ@!Nz_NVz;@2~JR_QLhB&X#j9>ibpS+rLs8;APl0#?@cwfJb28 zeGg;zyZG->yidSN*pB^RzuNxyz_GjlP2gBCw(NiVWh!36IM_dvu{BJ;Er!FsH_toa zdJo2b&>B0#ynLC~7&riqf%{;Y55gxf&W?v=I|-Jj1&sgGVJwe;c^g~Cw=riP%TbB_ zu@P>A<1iQJ!Ll#JtGELza5>D!ZGy4AE;=F)E>{7|atXGCZ7>OoaRHu#^R1)f^IJHE zzCb&Sf%B|WV-(><+>iF?jnOz1U2!QsMI*cp`>#v*lvcTJxy~owm@4L!?wjKu+E?1D>TOHm}I*r$FVC#|K9r(eMS-4Y!z z7q*je))Wo#HulEN*cis1^;-ek%V|gB9lQ_wa}bV!>w67OGoDP_4_D$yjEdjQ^K95Z zwqG8m!TgJ1d(4l0$h&oZ3n!r~Y+Ku=Kc2;XuwPoka+kxp4S{W>?_pgndka{n-(mYq zg#BO|+u61s597u9IG&6JJ%HVD4i>_+hhiu`!1L%1`>+Y>`_-VH3t->duRr1r%)^U# z7xuOD)`GEQ>^c@lpaL_nE8Gs0!gMP!A1yH*=IPkm2)4a(vLhzO@7wZz7{?y#K3o9i=XT$i!y_Q&`!-{sf=-C=s;=x`Wk=5H*ng7NM; zd_M!G9f$of6_$M#u7R;^nm=G1evOx4Y}!75!n(Wc#+ZUz;W#n&%JCFzQ|DQh(_x#g zhcS2r#;SE51lwwBJcj~okLO{Y*0CohVoB^M-p_&M=!9e8co_q?13$y<%?q%Mmdi5c z!TG~ryKI3c(HbsqAKBi$;ks-i)8B*3;k;3>ZEu3@bSA7{VlV!-9tXnoO|dDy!({vh z)7T$-!?w3gKS6i&z%IA~zv5-=gsbr=Zbk`g6U*j$PKE8X7{|c=wQXi&F7}7@djjTp z8|<4)U>^DLyY+epZ^N=z!S;Co=D80nb7Q=ZP0$zC?P<(|^*I7<&=oJ@8C-=~=!Uk~ z4874Dmgyl>!+!Z0i*O+K81ZX2pv&``hGR2=K`$D`t$HAa^bk^ zfQ|49HiTnvUwi@Ea3Su6uhU>W8Ea0r&Ch`CYk#@@ITq)^m@^OK@h0@ct~doQcNW~1 zUW)JWIMzZjmSP9|f(5t(KVdq)L{r$u#)N(Bm|lUeunEf0367D+a2+h4@$x$M!b)5V z^S3_6xcL~D+roNUua;l4;HyHEw!*OsdxUQ3M0g^mF;cvJ7uK#>|hBvVr+!m~dgJ3`W0n2avTbI+3i%W1C z=Hf?;!e6j0TEp#y{ce5R!ZO>Ymiqw=hIN??+su5;&$P?%4r~+a=5}st*sj;XvX$Um zJb}B>4z|${*w?nh#`p^Mo#~E@KfAsY@ioR{2ByIB^?}=&w=fCkpaEQ;+o{)K-HTC) z&bS?Kz&tNPPwalM@jEC_Iwt!{X z5Z2N5y%wM2c-Ut4qp$5T5>6k6qfrH4$Krl0fpvBrpTRP`4cpy5+7b2rYEaJwa2sJ? zeTpw(o7<1}o9((S?2q?h+g%Q0v>hCSyTCrN-|P$f&G>R!5`&-c_wQJQt1%9D!#L{- zw*h@Y=EA&s;}skR$FpUdiBn)q41#fd1+0&C+ZX1y6vpER*baBV zb-C>|?`vSZ7(3JOEoPwytiy+JS_w?o2Zv*Kbi>0KjaOkjevC#K20-&$Ia*m%eo!<;vLvm z=5IWF4$E^L9>icAfyQ_Q=4Cl;N8@xAenW4}K`!!Po7>+fVFDh*-FOS8Ul+FFCa@gl zeJ@^t>wgi4!8pDeZ(=RDeft!)rET^r?E4RJ3ufbT?1YZE7N+?RDq(+}fid_KmU}8p z(*u_8DcJs-V^4gAxiDrfz|*iC&%k_L=kc)J+n^n8M^l*JMX;?lg>B;ey;0w<2K8J3 z`_NdjpSFVKxd!KA1%~51_`T{h3yj-&unt?mxSfJCQH)i%3Coa&o$(nS!$a5uP2l>kz*QK7B``+arWwQ5 zvps%-X&et;l+>Hh(!j8BE z_VfQEt}eK(s=5FS54yXhyQL%~FI`G^Ub;iNyF(hJq>+{`X^>7yL68PPI;8pD_Zx@b zaP}Av``mNZUTdy7=i0cZ8Tb?C!TOjNb7bDlueouZJSd5GuvX696tmF~iP0UNTjT!^ zBQXKRVT|9y*p^`kio$vPZZ&+?IFI5KF5?88t33{(56oc-SewJJ7Byi!gYW>x5FO@Y z8$#gTGGYzRA_l&LF`8qa>yN^)u47;v_Tyw+LQZ&Y+|MGo=g%;9=Qf@OFy4K59Qd4? zyY;ue+hPA!M;5GrIW-4KVC?S4^}j|a%%$^n#3U35-0f9!V(+AbdvTxsZI7&l>lk+} z1pBhS!Mwt<_$SnWHAsx3uZSkGWuM8XAp#(WGxdw32C;WjqGc>V19&iNFP z(G>2%@#QcXdGH)B;TcE(d)i#sFJ<6<&3i%Oh+?d_-aP)v{x`x+8m?O`I z^UuY8Ov4$NJ7aDRe{;-W>_uywhHEZHHdwnx2n(O}x(;*TnB%bi$>BWd5F7SQX1s;@ z{uA!c+MhsY*q`5{K6b;tI|a|ZIeG$fXw96<*qrwO(!-qkn>8{=A8;Gxu@hd~5FYNs z{5i&Vm~;7_iU9Ln4c1~b+(UO%!425s?tch=gfW===y;A=CwA8F zg8fwq*1kBbuXX=&X3g&!Oo!*jUTudiSP#!_2{@N$#Pbsy=H8wehq;IZ&!%(dKoiWv zMJz)x*dLDf`8Jpc``59}bOi1jBF) z$&m=xu>(HiIM4BNnAfQ=Kh``ke9kz>!}$EoIgBR~tixuQlevL=TkgNYx;rKtV&iA* zgn4q$w_zUbd&gRnUa+6K!J2kQC~Dy)zJ)z59T*qQY36*M5%-&!m0sn%QB0`R;MfAK`er95jMGXI_oZ{0xN8^gtWrL0@b`2s-02tb={-v&L~6 z4KW^jQ4|$mocUos&2iYkJumlX$b`B046k@FuUB9V|G*dwfzMl$6!;ZyQ4w>n3v191 zz5{&cWPx?w0CPS9_wW&ZzXCI{6Il@l?cpBW-+5Rw<2#Pl=niwVAK%0EufpekgLBkF zD6E5X_lJEm7MHOR(_oK;gTF1tWE4Xh_&(SK-;2Yr8|K3}j6FUo;P1faT-!$T)5s{n7^{fgHreg=C(IJz#JHBG~`7p9D(~bM&mkw$f%VIex$t_4=V*gYs0e#xIFg_=d_TBOSeQ@yA_B^yJyK#Y zQsEr#qY5&j3$mdg?qD@s^D45#cp9J->;?NeHO#4JqA{k!IF7?=%=12B)>Q5%Ku5Y{|CYQcOSfqlL;!2eI|0qeLD=6^X-ApxesvtsS-56_41 zin{PTe1^|f#a`HdzSAyZEh1tV>}zYh6X#&B^ui!~jdj=v&z0xBK;ZK%?r-rLFHjsE z;T)qd4XcnB{x$=r6%z zq(M1+hvBgH^RNkr5fSU*cRuePp5h&x%UTvk39Y%9v(36jHn*MvE;$6TWX^5A#m zM;lnvWjF})uoxfE1jf=D&ieotkqoWy2b|mbJcIc%clKC53B zn8o^@E9;RN4Po9r@AkI!uy-6Y34LL{&7--s#_quyTT63q-XEe4ieLlGwY40J8Su#!0#aTUM7URwp<38iriuIcl}w;R@bF8r-O;-WC(z;hN4r_cb- zVZRoKJ>`1Nl>lBp;w0SfdiZ|vIrsb*?0-L3#Wci5J-mkJM)Q#b1rY^VumZ*49Io*Y z_Pz1DS7SBT_fQshVI2Ow8Rq&v#=to$qBe}%bKVl>aWod;Bg|V2+(2^lfxlZr*Y!Qn z9p>I%ux4L!c!AHmuo{hFY+kwHUVg$OxTgu244)m0S};e=&>Y570KS{X!hUmp*V_o^ zYY4}x2foGvEQS4K&HBMTIR7g&KqU+de16Z}T$+b+a4qlKupQsPJl=x2T!Tc&2)}df zQ2YREU{1m!7TljPT5o&!Fk-?O&4cqV$8;ov>$s1cIDxl;&-Tn(?8G?iz%Qtb0r&{_ zR1nt4+=oYR3_@1a!#wy*YotaJ7`Hu@3Sr zu+}AU0j1y?o3I*(;CuHk7+)qd$2Am(XUtxn0BhY2k>S~qXSfKA#c^}-Cw|2`_?@3U z3k_lH_F+!=|7#P3;y(7ny!g94JOHmS7*}Cj*4q7;&pmLy%P_XZID-Xnt_H9!zF#6C zC5$;H%)!r?3D0C6%z{1L2iB}L?Dsb42j}p;VNP7{HQc*#c_z&1DD*}PIBp!K!rV7S ze)NaWc!u4pd-)7=;9jHP5Zav#>R@f4TwWiRXaycO>8Fxp}We5Na| zz&xLVYg&itc#KXkAI9(poWr{Hh4HvA^AjDxzRYR+T zKfwjK-WxdIXhc8`_-tb&2;94JcaMi*-V?(2rt8jw@zug>RD|FCf~c?-j$MLr7zt}? zOeawZ*2r2~2YaS3ir^C5=O%oI7AS!EFt&GaosF1)hd2QDI2$?Py6*dXSi3Qp1!MdQ zu2CP=5g$pA9?jsqosbd@5$wye5zNc8W}bH-1?;`Cu-BtuJbpzFd=1b1Efj)zG{-qm z6caHG=a3iXzB23)d)VHv=aa$t%3~Sq=^OBz*&B}Wd23$^#t|JI@fOx{5W3+xCcs$w zz&HjXJ6^zEjDi-34f`e>oFg|pSE2X|vCtfMkQ|;<_wOD&D>)Do=@1rP5#W2EB%IS8 z_nmPFTd*795g9G;65pa?;P2_&?a#Py?>_5u=Gd4@!@j?QjWAzp;BS65$ED!hO>q+6 z!1FK+iQ(M#*)zDOzHpp*FOJm632T`YW#M?^@OjVE5Y)y_EJ7%r!W{aJs2}*-c}8Ip z>f$3NVj;GnCZ@nOjdKQC;b&NH_x~0haRFU%ALb@A{zWqwkC!=^346+#x&C3eX0^b5 zGk515gi81f^IsL#yg!`NK6Tv&xCZC?8|L;MzQ$U(|MZA}8ZamRy&Vy;20k|yf5MzT zKmlxk&n1L?X`i^RebOA6uo`c$1ohAfN8tSDF)(m9Kd#*p_GS^RfHA#>8`%t8v7 z6W4!<1tK4(9+#HqmNZ@8aCbl5vfQ3ckz5vJi+{DV4phsT(WtuTgI$cyVJ3C~Ig zw7^|Bub1QcqB{!0{n~?Pkr@MU73E?7)J1jJs~hnP?58h1y^_!SVSEYk6^5e(?8Ai^ z0b~9a#ugKvMbA_-m^W+SKHQ)0ta#Xoxv*aLe-DJf{0>HJxR05zmb(xQ#$m3uqbbbq zaYTYSF<#d=h$%2f=F?|)-~r;}DfYs1ISiw*4@Ynjj&ts#FfRvSEazeU+Ta+hqwhZV z+7FI-82FrvdskS4R&by8K})#rad4hVxQPrni?o5i%}GO;YwPlN;P2nLPk=q_n#R8Y z=FYV}gNKk0zK<(mGghK8VjvsLp>Y{sOi#(N}1Q3U%k z_rbi()mWJK5LCq(tb*q^8m!rJEJO)dlO*ujzOZL@<3H4f=c*WrpfY0NCe~vxyncqy z+S9|46$kJE)^R27!@8z{zYRko6vR7>fPL2=Z}9@15DvzX3g5#y{JkT7Kn)Z?6oeo% zx?vgIll|&=pIZ#)wO6*mp0sy!!5qy(8;n8<^o04z4xgI@&!T5F0nC9hpTYnfL@L;~ z?csXv=NNoPJV1T8r@vtwu4Nw0^GQU4b+N}o;k@S7Gx`ah1!K941{jNJ@SWKdw-E!b zu@M(>0_J!p%D}a!!2J1KHkhwM@LgdpBfxixbt(z->X^ECg&*OwuIC!5V4a2_8LYW| zWK7O;9|vHro+1;hVM2J0Bcm5a!yYouSa^+r@Hz8nKDHt~{y{ysH~0G<=3+9Mp$hCl zV{pyIXaxJz{O&^{q{9}tzTYj!J(%m<@crcejq6t!$9UKe@n9|5As?c`IX0srmY^Z5 zt7{d9{ni-9~odtQcOu!h0D!UQ>h3aoEl?6)zn zj`v|Nc>cX^!rn=Uqp(KynZ04|S0f4L!F;zubc}^{bq&vOR&;>5HxW9GuzA4e!W zgI!P=*1rwxS?6huZ?F;zP#X4|=V2&D!e?`$271D0*1%rh1lLRh`}!HS!RPYgcl-vw zJB3%cfDRi$N|^=i0Y^f&(biIgL9hmYH;1@@O$@>1rcF=rlJU5 z;wzYs=hy?+v$n2p9uLEH&EY~6g?oJmbLQH2FdEj!9J-FVXaUdVm*1E2+4tNA)W?rF ziih}wG^hpZXpZ8eBEH94?7}8kySr!rbLM#W5)X0k4b00yIA;Rf#2kdeeb}RaA|vdf z{HO$DJc2=i&y%=MKwOlEd-3v}Sr%t-5t-mx&G0Sm!!^AI!2JG<6qpIeOhb6=gx|M< z`&o|+u+QA*3OH98oX2fA{|NZ(N|^VWsEbYr_7&{+Upf-d9QK=MCog`0|F4}y9@v}q zyPxyn8M?yp+mHbERyMSO=fqz099Ir}_6*vm_TCUIhGXn~*NzImvo7{zBG?PjEpM>o{LG`PnJ=!+RB3Ug%+dc(XprZ%3yesFGM zHUFNMpD_jFkpq8XF07I32m1;W7sls!`^@j0 zb2GkyS7A)YV`PSxXT$jHQ$JtEOgKjpnBSJ@fPc^fBjMi8!2LOIDE$5)+~b%1UEy;h zT!Xovg|o;6*D@EbTNdVZ5Vpg$twnMyM{m4FF|0yEbb|Xyi7Yq?_q86MVIIxHR7^m0 zm_yfg4P!|S=XH;s*Y_~5TM+^F(O^_V8<@*7n2QlGAI^OdZ_pOb<@$GFohITxn1>T^ z%xu)e2RN5C-iZ~62cLDU^{s%#sEep*j&=A67hp_26COTikGSWEIEHhmgx_GkoY&gb z4%}~XcWfWDhihiU0ZhR_^hZC~>(<^rD~NV5r=xHX*4>=-a_Yja)?-H-wm@dWn5Wqb$wa44*)&lW>u zOoMZ$g5y)d9&8M2Z_hS>XQBjF!9|V7^=c^YYyh&I+9^IA|Vru z*Yo)U+)pE9z&I4aVYs(`I1A7H8RUR-m`C^jH{PQ+95WO4&U6@S2x6fiT+=+xhcTOn zLTCfmD~awf{`PRrT5!LVuFh}{Se=lg)LNQe8_ zf>5kMSqy?>?jSAh!S#;79J}wIFdv!WK5k$bzD0IeOXGWi(kP72_!SxP9ooVDyh269 z!A@*PeOTKASPb`^0@nF7JTK;S4vZ}WHp4N`;QIYxUaeI%7`OE?uEq%VWsQP)S^KFy_O*FT?qK=S0FSSa;uT`Cu;; z#X-b{V^+eRvew2h7aIb9+tdA!1!dviA7THWKukF2H?W87Q$OcGPgr;RrUl|*1-^#; z_!Mcd746}gN$@=$!no}{`_Xvqy{oXtT+4mC|Izpx?s+*{qdW$|oP9!ScqM|l%ZYz* z7NPL(T(GyzyL0w|Ia`9A@T?7mb*zE~Xb593j^x+`Yi3?UU=E_e@y%gw{>2{rj8gE~ zUoju97XhB32QaSmD1*F6hq)L5W3o3qe{JEIig1KABS)Q*4NsM z!#wm2u;wRG0*kN>em4`#um_h=7{;>}?_pkh!1eyaE7XEDvc|?42OZ(MTaXEr;JB-B zPphyRb+8|AFbeLk5hCIzSO@ED4qQJftiO961M6=rt{WD{vjpb+cXWsO-j3493+M2; zBQTCMn1u02jcLe(aM%OaNr)G)Pp%^jVxcz%<8rs9X?L;~JhNO6e#kdJ;P#5Ph8}+ad6LA(>VO*|L6GLE6 zMus&Uh!q$NdlePsW%#9i2v z#uOXIcNBBb4-w!y}70l6>I*jFW3OLrhCqO!w z(*Zb!&2Wr4eud{Se$Vc|Fc0Q76!kG5S>QUEQ5GZcH727nd>?p!f%RyB^C*g?*ap|I zmU-ZK^JU%Lt9hM`Ls$ZHG8D03teIesxqcrkfU%k{>#`aT5EiWwif(XxGC1cc7(*fS zhq=lMYvJ?mF9eBD751CIxzC1(iuQ1yJK)~T)jd>zwXimOQ62@b8}|D?oP~RB2iL0x ze={!U%LwZef>!8(6X*bIa|h#_o?w3_Ovy!=D*@JQXm|B&br%QNALmZ(HRr*7iPgecTIcL zG0ta?c3aenh-p6bIhcMZ<94#{Ec_fZpL zFcLBF3Ff#Eh9DcvQC|#4bolHW3`Hrpk3V5wpMqzq9Q>|2HsTptU_NeOKg?|cJi=(W zhstOQf2)lpaNcB?0PFk!#&8Dixi?}X8m!SG7_Z}2VJw_0H=O$(BEq?>?R>c3l4u0; zmkPa*3nyW2hM^z!!FTE;q=molg!O$J_}hN#j+{t?yYM&HFb3x{PmY<3ff$F+=#Sgz z0^^?t_iz92#Y~(=VfcMRnBymihgg`1ZODflm=VK9mz z*jJb!2k@TtKcXzm^BAdv zd(wA9O4NjF+ndW!1b*il-(V$@V-2q3B|L*y@H^~B*RVGZAPYSA#_|;$pB*=F6!~GV zyJlS+g5Nj8UX;gjc zBclxL$2737{cNnCFdZMz3flws8Qk6HJtT#>_e?a#W4Pb?__F>9KCgzq?L#@VM^^a! zEqsfn*oew7cgA=GmvJ6lQ5Cge-nYWDy$B`I8Mn~{gE0&@@f)m-^V(C3(FolT5t(8B zJ|iQp!@BH(am_&t48=vnMl>YA7MLsdl?^#zoP$sh{m~HikacN?y?6@qlm_N`Al@S{ zeC8m+AT2WC0K&pJQ=$aS)m&H~uc=r9^K3tvH)|CI#nBTZVLW{UpL=n)FI;;f?9;(W z0(0fNtpkQ*6viP04d8sv`#p@+XL=wM_wgO9^=;&V`LkEs!`OW`9D;ordoVBi&Ys!_ zYh|Byg#Gac{>A`UQ|p!t$>Diigw3$ltze$d!8+$dMR*QVAp(}de%}knB*JSYW8TYam&#)HmH4DtgEIdYRnAd!8Z^rr$LIU@2+*iZ+oNp4Y z!@aw9D9mkdTth~5z+Lo!b$bx_+q(H4+7I)#2kz+va$q2g_b+V2A?&~i6hTc?L?-ls zIkeV}djrQhuX_xIzfC|SSl_RZ2)pqPtMCh)+uwqHg$Z&1*47?)ghudu_JZG~MK;91 zIFy3deOL#3=0{wBy_k0B@l=QCdG)(_R;`fFhP&Upmxc^mqmC!WCddt*Kd!x&zn zEpEa%&4<@5RD|)SgLyWW*3-HtM^>0m`+qC!p@e9K`A7g`upjDRF@8ZVGP6Ff4#)E*?rDCAPv^nUB4&5ABVbu*RW?jm2n>>}UmJu%79W6wk36 z_V9c7yD_`wILyIR7)NB>!vU1U_c#K_w}EFPIXv&b;x{<10DPzYgd%u^7)Xt9_=u-) zzxHi-tcBy9*FAY&VxbZKhIy!7g3mmId+_{BKuh#POq9o0xP*4F&yCAEdR|@I zvt>-?G(W1q9Qe2In-fR}&uCFZhv#-SJlp1?2|UN^Va%i89vY(_JoBGn9l9YJtgX57 z`V!wMKK}vtYE0Si7kt+5Tqg%y%X?E;PxI&Bn_zrfkOIZvdgdS&F5&^))1T;%*N6-A zV9)woZY)3q_&=R-NAA8`O zo~K3lfPdi}*3??rgKd!$_N@K=9`VrtF%T2>zWwA_`_i7WZ|sp3a3Ai${^*Jaus<9N}EN_t-mGL!tz&+UK?mrYg;j_76ukAu27;hFFL}E;adv{;{_7g&2UoXW# zIBpo6yBJpDEIeCd;Q9+t7)OyE)?h!}k9&@W;V=f*_qX=&H_t$A%tH}0#@}d#)+hll z_fi$1NQ#Is2gYDNw!?fb3w*x7Jp|V0ADAO!^=#IH&(ud$_?x+OK4TaR*E2rjngPe& zK`Gb|u5WH9!hUm{dASb%{uL7t8}9Kcd^fH^MmT2~S_wWOp?;r}nd5*(98e<6D!v@4dC%CT@fxp*t&yVNmh(D1Gw{Qia zaBKrqfISimPtX!^Gw1+v_(_&L9nkdK@Pw? zo9~4%U-qZH>X{pg1F+6d1Ap5O);R{I;XByJ@9_>lVGx|NB|I0=Q5E)v^|xmm!k)F4 zwqYwGq8{w2PuPzk$d5T#1nZtM@b^;g_HHwj!)&a^H5k9Y?|}X0*>kLGwt#1+Hip5T zagAK)57+lO=NgGf$bxoo+y~fK_EIJIe{5d3o@=i}R3t$`Y{5F%gOkw~?z?c{zMlJ3 zbilU=#VS0;Jy?&g;4?j7ObrkLK4)yDVIBv;cT*a;rm-JG2!2Lq_%3y=xcCTrpcl-= zGFVgdVBYG&eceGfJcIl4JI9-=s@RLn@a#WFe3-9>s1C>c2Xn9+_PsGKMnyD*>)wSi zb%C)vm-{#8e%^_==!e!YAMSrUUcuVBZ+j#WtV02;h3oFY8@zE`x3G?jSOW+=?+aa{a2=s(~V*SmD`R{}27=V(fjpZ;t z_g)E`(FI=S!dNe&8qNkd#`s>tJ-BWu6vIF`{>wS+&F5fW_CYYOGAw=+zrbAgg?V`a zzpsZDFrSZ51@^Y%%>MycYsXl3d*Lm<%xRBjfM>vSm>Twz>*c~kSd-u3xX7@_?N^`i z-Bt(t;rK@A4&zRMNmvSdItRXja~RJk_}xzkk7w}Qc&@#A!n0*eO%Mg{(_VAzWITp3 z_}&1RB*kIaGlmLkDV|B+tC^BYZ3hI4x%A0oPQyl z+gRP#T^M6p_>RegWiaPu&=Ijv3eMjH<=}U&VgFj+{J4p_a4pw%Up~_uC9wv3;J(|S zHx?rWGGi>v+d~-JuQ&%|cCW^^34M?bzC*2%-(N*iti-UGg}3nPied=GUJQY?v?nv64(t)n=ses)XBB*I37;s7$BHO%{d7?}RnZI9-uWM(C(0rca>Hkh-S2wC9QkZLI3_+^XFkqj6;8uChF~R{AT917OF$>? z=6@NSuLqvs9!jG<7N8MAQ5nX41NK>4_>Qg#e{=7~It}J69}Z$L!oWTFZc2}gu$GQb z7x+AadpLXt_YfB5q5!P@MTDXp-1k#-gYkbx4Yo6MjoIT|^u*aLj{`woGF%s8dpB{w$5)(&Y&*g=^ z<(ac*>>t-T0N-c+{SW5hFBHRGxOOQRPe$B^-%rG6RKPDNjK}aD_!7yH9#b(8&EP)m z=N)K{Pw@O0gSi?Dd$Kz^A{^XfBe<_l@Et!6w_ttD+jCsUHuQmcZG*dT%pSOw`J4gs z*B*WGBdmJ~oWoIchVM+rd7c`>7`%-0I6P}OIQqYm85R@evbrzpJUz;#EV7OueWKA<;V<1LEA__x5k$ARCcLOvuz zb!3ITl?wH-083B`laLN!(F}3X9LD9oUF#aM!8ppo-`smt?1z`}PQfL-3P{Y|8anO* zlES>T#~qZx16Y&k7>`QG0{b>KGN2;N(Qk-_eprs#2oJxnipY2d*I0}maIA3z`wA1} z0N$~_=hb&y2u|Z79>QD>K|Y*E0(jo?pbvIq3_OeW$O`0#b*_t5*a_=kpF7Vkbj3^* zfc>)pm*JfDiRaMYkKzx!gunaUkMOC?}(I1XWiX-?L#$FoE^BCc<7UpdaTH_Ji z$1s?S*EkE$qHCl>2l&3I1>>uW-f(UAY@VIx1zdYHJR@JjJ#WBqCuXZ1c(;2?(LFzTTPuE4dE!20^R6?`rls^b*)!9A~r z^ShT5m;m>54ZgSDpgsKF&#qxTtkWl~M;Ew%_t+BM;CS==5Vz3@VUPyn&<^J21HOmv z9`oA~)zA|&F$x1XQSJJ`RT;jzdGYabc*y1j57*6$*$K^zRnLY##)eGmJ{HSE8AIE_`X zw)bJ*<%6-<&x>#s#+L@Z1FWg%;0MfwXK)faV+3l!SQo%JjM=kz1F_&*_R3Gl2G5Dl zuR&Zqh4DRrXRj+ZSV-|Q5Md(6DN@n?!g?U#Z4?hdicF_IM+Jd3;bP)`wl$D zZwSF)^u!PtyZyfj?$vSrT_5ex43lA9zk%oN1RPfx<#7i`VE)akIX5rn)Uo?93;&=I zdci$i!*;BOYnoU8Zz+x__#Jhy82w=!YcUYdu>fbV2OH1AnwbZ4WSmps+`+!W1UZ0(tp6A6=jAY`+2NUJjBv32 zk>MHj%zVN$Sl7a^E(LKG5ikVyqhp-Q-nFlNHZ1;x&sZ00=6p#J9j$Nz_VsmGEBnkI zxsKkj*X;9C@a)+$*4N%U2Yd4U@YA8znG8b z=#RYE1jm05=eEZxpgeA4D+=K-teuN2Ga|DbbI*!18 zb?kCj`;6EI_iPXR0{iPceBSSz%RPE7ilQaVuiwptIr)s$h=WVG3C9`p3B*DSL_=Fx z<9MHo*B#KU^nzX#y^q6><_ezPBTq8q{@ zCOmIGHy1I|WE+RWVA_JWN z82Vx|%(wY5mn~2mTTvb>Q4{&#eD*;z_?|8v6G3-ETm`D5K7K$S-`r#?ei|?Sf zfzO_uY%m^c?cQ?1{CoxHJ&L0PJIHz8&k} zSq*{zPxZnKI4%_D;F$J^j6(=P0d$3DEgD|Hn4Eh(mLLae2Snoj2+m;~&Swn%9TuD5 zJHUP^1^1Q)vEWqrG00Q8Ru@ag3oqA zC>-NFTLKRz16Gxz~fa24*uTF-^&xh}@y44f+r z+_!7?Ksfx4iWm*|W50R%te@xLJpM!+IIbSb;1izUFZjEA%Zk#l9&6#A-yRn9L_x%ePIql(GeZseD<$3Z;BY`1#4CU<}lcoeGts6 z5sO>XO9+qI@a!B3u%FDE-|dFAkbm2|iIEcaW>u`fL0I>pNRN-OXBNSnpN0EQhwpI< zo}~h?PR7(6zrp^ij!g)M*0AQ!;cxc8-{*#BrUHs%7H;4xtid>x!wa~s<6Gc9u3|L` z!f_Aq5*x4{chD8C`3PfSF8sU>(F5LdHzxP){#?)bJrBlczh;Dco{la!j3_9CP?&ee zJEk98)7*M47Qk`-z7OG%2c_UUq%gw5yqRZv+}P4!3#^MdS%r;=iB1@fd+_~n4Xuz9 zAK*UC@pbe?A7nudv_nHQg>x9+8~9!xg@4fm+u(k!p=)GENqpI3EC|KVcwJp*B40s*K3U2y>hl{vHDJkQ&kP2dv9%yn{LO@4qnthcE(f zu^30u8D4YYJm$!~I={IvcXcohG2q%)V6N<)wwMp|x)+YM){aeutFV67xiLng5Zte0 z-@tip!8mi{Cal*bw1R!J1o@Ey9bk;EV@^_`H-deI3333ZS>Jxz1M5ExrI8l)>@#G8 zxk``tIEj$JXV0F$=R+0ziDsyUErGkW`x(E${W$p+<(A* zbi;UH z&>Gp{UPr+>lEC*ulYrFR?bifY0MEb@l)+&vg!3jvI2fxv?V0d9pREY{I3aSO2vWj# z#eA6Wf=G;AhzHl|fxXxc=XwU?cW*ws4Cc5H9AoYLtpk?h0jzUe{El}p7haB^jhV1k z);TQfq51I4hM*3ajTFW!M?%-IRNwN8BK(TI16(f7mZ+iPhlNb!rB#wePj+FAt^ko z=F|T1dFN}1(I|t}a7+qxLNvrj95~l*Y=(7no^r5mp6$w51nXz-u7$l|j78xYxQI)z z*RmobtbcWU#!-wzU2H%lltLuf8%+=k#=IV>@ht{m5B`Pyp9w>-0GW{+&g1(n9?Y3@ zc{i?O=!YkGjp8_kd58+n&|6%FXKO$1VhkLU4u4=e+`ln(LLIoDy{LsLScy&OjY9A_ z-*sJ)5Z3A)HX;Z7ek|5u8a#88Q3dYD+Vp^Reu?j4JjUq0jq@QsAsamJ2k;EWuC;ez!hbLpEO$5X6^JslVB!QbcN9Nxhmy^C9LFAI?X#^9K5 z5F5e1!UQ>hCaiD&Tg&b6{gDexU=LY0`|kq&L`DpUwX?6{<1ifOnQ9E{J_mVG1O+ex z_D2iUL|gR5S*(S<-V&imijwdgWq{{lCZb>hvct3B+CRW}uHX^uZ=X32_cjam=PJ0j z2Z7I9xJQTYsh7BeL~x9KF%S1(9PY_nG=TF|gyUVmIR3zHl*23dy?ZjYgD{T0SdY$d zKR#0r?!~;@>ya=SQ}Gveq6)I&2nM1AynM!a-SZn5r=MN_EkY0q*EAN-!!bCfI}X8G z41#mTfcXuvgZa-6pBarpNC3y3#~#eU7<@!0-rY=C(xg~b?(s_2L?Fn3Q-8a;3qui*a7zIuc z7>D2C81v$L&iUMbUTnrRM1^^^Ht%5_jLE(AMOv7h;aW*yUzS5I zc-i}}VXs(s>y;6XZHBmTt*|hr^4Noh=#7zh0@pOY97u_lsEJFk@Bc&-)PTM1e8xBg zQ!o>e;Q9Ck=ErBdV>I5u7@cPkwxS*C!5+;7^XhkXu@7(HdAW%lhzQTo9yo`6>lw4R zKVUkhq8IMN{vC_rI0EOa1M_EGvEhDCAPXEbA01#GuVM~(}gckw+9vRC~0rRm59kBt%9Tgd1581Ewfa^WPLO53{IIri*IB(-; zxHtD&1l92fYhau{zZvP^8gcMt?hAajR>o_cf_;SvasXFY-~U6h!9F%W>yZLq!-i4w_(hlk=O8ScsHhQIFC0N zipnrYM__!uKlj10sgV-yJ2zUx=gg(QHAXaKK|c7qx%K?Xo6F4 zPV?*ey8-u@5&t44;=}cw_eU&1Qxr!+n7`BrgOh>3?Gc}KAI7^4K4V{H!coM5Yixvh zjEJttfX{f3mgtYiaQ*eDg^zIGkue#q&=dY^O=YcU(eu@}Z--1G4c_E$U@%SVhtVMK>9L_sxFMP=A4N#OkZVP9UuApDLz*a6pg z0sAc<%-2CU_CAcMA$r5UbuUq|3$A6J%tIA8#xwc@d@d3^Cll}ZDYT^+p1n%Rx-+;d*hU4O+8~n}OeFgU#3mM>AV=)@$ zVkMpjKBwbu96r}MaIeJOn5|Pm9EE%Ix`cn>dOr6AO>iBVV6CR(CCb4(4~9MA*uSs> z{b4Md;U1U5+&{!ISVQBPgj|S?DTsl?a2@CKJ$xUXFa)k+4;F#X4usE}Gjov_g<(E( zz+4=_EHn!IZA~`e4zj}jiiylv3)k+7yQqxjFrPbcJHYjvvl{ZiwRXaO4Tr}VgLm-q z9b4u9pMv{OnBXq||Fdv~7_4&|SVwDNk9UW)dFd~a^SIDCTrWbK`6X5hYzyXVBY8p1U^ z8;cMZHQ_mRPtNV{Cy@?M&=(_MZ^c4S*z1n#kCE_QlO2x#6^=EgE^t2&@#TzFS6o16?1E=z2;76Y zzk?L`0q2ncmCym6xnJPgX;2#ez7PYD5dQ@<aM-0vCK;QUVAqP>!7|=53P3rw3*kUrV9A zcN=lo32WSk_D~%(MMdcB#iBhlmp|Zu#ux_m7YXfc^;Ze%M>VbtwU-{M%Lp`w=Isn! zlO39GO{nI&_7l9JIcp#H#}4GiENH*0E}By|XdWw25IS2kq5Cu@jYs2E-Hu{EhNCl5 zuodd>H&lSm)LztrJ=Q~OUjrfNgeFiQ*P+i|K=rDN80gIHgWBawT5FvRz2|}w2tzw~<2^1yd-W{3Kx?dh&#OHRGTK7pRZU$H4c)U7+HcLFaj%9x*ZH~u3l^d* zGja9FIMo$DG12kWqTeWorw)h>bV1^U)Ec8czctU3=cbe?ve(1W&sEIge45G8E z_Z#2@wC@K)<5MlBLuc_henlQ=tlr25o#D68IT#47mFkrr8n4D*A3CS1-*`Mi6bj-F zP9X)CpnBHAQMf~W>-uo~0=1zr>N?HI1KVMSo}Hzkwl&6e&=@uDPSBqC5m}*ew8Ryt z-M{*4!S|YfCHO;aSH~!5k2Oqt-Gfx!&%qCBLt}NpFsMHEP+J;PGTK75UJdP)2&mr> zXk0511C3p6>AhzdiJr)bF}RJx=#O%6g~qFX|HOHyPFJD6S3%>hh7E{EU#S02*p11^ z2(4WLMqnDWrW%78*P*(dg1$~*BXmtuJjD}e|LNMoutj>@f+N27m-TlZz#{tJitfma zdC(eZ?X?$QLiN)+Y5$#ut}BFlIEb4VhYrwQR-0PmcBlfiH382t9J)6P>YxG+U@Ww! ze!vdIKxerL7GoxkL+vd{OM}!}=Y`tQ&%oC3Kv~Q{MQG3KzSq!POF;V~44RAfxAuQO zXk6ZiM;snO<6Dic(DOM8XV4xCkqyhR4;t?lG=Lp6N8R%Wis3VKudZo@bkJEGgm=(> z*o+z&0QHdqwN(n5ht8G8tUh%{e4x4OoRooTatXWf0M3|$jZkg$j9Z1y_yH4<530dP z+{9IAtcRi6c7giTeo*Q?%_#($pXS>Q6Oa>C;f4zsgiX+x^m-iBpVmd!pF|8ahr5V{ z#@Yvsp*i=5`isD2xWg9y&^4Nis7~+Ti26`lxuLbwx@rA?$FDGB9>(AZsv`!jSOYJp zP0i~NG)@cDb|SRj%R>9(Jw`$Gn+WZjQ_y%+OV!U8+9TR`t6`5K$bsolA48z^t&IK9 zGb{sYA~SAb1k%F+3!pXe#6aXnE_8(U)fqHJ0yOVhu*P1r#`pfxSia|%)>!*e_0>Mo znwZfC+S4&m{YOK4s1YLY8&vbxX|J_+_MjMEp)VT31KM{=?e{y-`OxRu?>ZxDOM9gh zyrJvV-gW$pa!{XIyY_ekTWrS;sNa0hKGL+kpb0e3?9klKK>gZ5;~Rv>(0Ej*htRrNpxXLlI0iuHM*aVUx)_BdXso%B z3e~wXra-mN2c0J~%0la+bEmoNgRbodt@Bf;4)dX!-G#zn?1t7s&y#GZiWisz)x09^!-QdI2JL}@I1Mur(F+>0>T?6S zzcXS{2?^)`wWs;s#0<>E24sTPTc2meNL)r2=w8iZCp7I7zl#{bf4Dp z612Cq5B_@ItmgY1xDH>ay+|B}8%98FgkmnV?oFZVi(wMfzxID`XwPepB|>|p6g0=r zPy4)w7K$Iuhn&$@OF zR71`86e6MPY@q$U1rgBvG#1TY=ch#4_u9*P4y=Usz3QR+qS9z=6R-gqyA$R^=Syc# z?P@N1{~&a&Y8VNDn`RfcxlyWT;jRF$LDxhV*EGi_rXQBO5HZhm9zN7?`2) zXb)zF=Dr-7M>F^#61$*zsa6_eYcxpHhKxi%XdJ57TIgQYGzc1J5nRPd=)LJ^j1172 zREI%OjhkZyw&Ey4pm}QDv?gcK66?_mnV>Owp)b__73g`}AA@lk+W)su5!!DPp}M3Z z33^X`X-r|z=RQclY-l|+X7!^v={n6*XCNEYkJcd{N}?&IqBs^nd%pmR;(LE-oZs_H z`(5Yu08GdVos+Im9kma&cG??d-~bQkY`%cb+a+{?_M1E6p;~)GXQ2*sUbVlqR@$pN zyV@hpX{mFv8ZA%?_wfnCp#4}Hqfr5uQ4l&a8dD@RhF;K_%7tH`eV>Zw(44eCszUqp zC)7`S{R3GAnXwycr!6!NGyX(gbc4?B7`R~|T44=-g=(VfDq}meCl5epX9A+2^Psx^ z0oBM8HBlXUUt`hSvfv#$q8}PS=RkAT{M5eAp4LmX*@jqXPOH*htHyf&1hi&qZw53E zoq->rIu(P)sdhg@?TTKjjiDHiy+{w$CII`OIq3{)U+C;zLSy8C+PIFf(7s4QJv@c( ztBQ??fh%6%B${Fmen&9opc%A>ROcgzL4KTrYIO*jkH*ywhtpn1lbXBsu+4CM(woMIuE)>HGYF<(Aw*o1;_#Qsk*CvlhR(_CkNm()P~k|Bs9mKu!Gi8 zV;Y2T=$WP(YwWkM1TWDVq40<1_!=5>B5FeWMg6JoR7}N8G)Dv6gw{m0yNyqnhld!B z@BL-{od@uk{E=BL{2g9CJr>Nx{zq47Fn6z(GeYcL6# zQ+?co=AnAILT#T!F=&k1mo+dSYD4=?YoTY!1!#>=;1Ddhi2Ue++fe%&o8}#tmeh!(8tiSUBa?<}Mbi+gp$4Y1)-GSCk`))G2LTjN~AH{NLt+PV=tvm7|FFHbNH5l68 zS5W}BkcjN)2d$$%4~5pt25MLRG=J%MD%M9C}`f}X`r&^}gMYI8Sqo@QbjG-tiH0|W6C8n?!%H7Ep~^Q@SR zT)2cN+($7~#!#q6dGH9jz8%z$?uo%_tb^9!5Hx1hK;xYaja}!dF|;NgcmREAOzKP5 zdPDoFFLcdZl!EG_w)Kp#hxSPv^qJObA+!#$b$L2*n$ZP;QK)Mq`Yo~p}W=$?3}mN%g1 zrRp4ju}FgImIJGB85XGi4UqxwF%qgpKWI#PPuHt2FQ}dLcm@N}&^}Y&-q4;{ggR)3 zR`}ju*57#mrRm=X_n|s#jXK~BCSz3E_kWTXpgp905QR|m!VARXB^E>XYi}z@z!QU@ z^YISaQ(D_D=mVXl{5S~hJ7=7O?$P>dY{T&jwC~Q~Dzq2$%-W8VxCgbZ@#KRO(n0%8 zdp#9e`;M3g2P}v7d=@$<4-tt%xP}K%|LYNl{!qW;VM0l$R-Ish z&VpXYA|o^w)nB#v9pj)ns3xk-DyXLC(^Mu8K%ZB`KvYL9xI=Z&+}C0lZet8wa0Pnq zs3v={44SXzw*xv;s#Sd~!Jo(lo$m;o!f!~y&(M21@0v?bXgmuM4vlv@RGXPlO;!H} z(3n&Q)m^W3PgUH5#$6X$FV%P-azkSd#Z!2o0;WOl{RGu=BwFDZH1|W$nraPKKsD1i zHoy<6b2e_If9ty@z zXdSeFM&SZ<1{&fmNe`wVGwk`o+;y@XM)a#vK}%c85+w6RDVpdz#u%b@e9b<){gi4Itdy->aMxoX)SI>%arU$F#raUN=G6I7E{ zxP#_60j-FVgXS|2-SGr{@H;gBMo^ntBlVpJ8h=&j479)sG=%n!KK}t4o5roz(@`7S z5eHwWo>LG2Tja-3s7@NQ=Cuj!a1HIDd5?n^v_==O1KP_?kqx8q2;)%)Pq791%8MgV zo2sq)9)|DzW&NE8pnY>6lc2S@f})rW?dMa_+G)LX2Kr$x4CuWg(0Xbgy@J{(hpzYt zcQnLfX#FDbE7YH!QBeMt7)Yv3P_E7==(QMS0YO9U^cHWibIBXpBw>gw|sN`a#z?Kx5E-wUG;I z*B2&e%(_-{)SU7l5?ZqxNQVQ^d{j@Jr6X`bQ|Q@o7V7tBsQ&6>J)EG=HHIWqM;62* zH?%H=Q5mX9UVK7TtV0LngYM~!^hiM;*h77)?$x08OJgNELUVD3_Mz5Mbyf{Eo(1TO zL1+g(N7P;k+{9q0R%%n@S%mt~KGk(Spnlcn7+6DVv>zIqYGn(}NquNs`u-8Lhg#zt zw&5Y>pg2BbH1wPbLq+_I)d)dbXf3ATEfS&jT0phB4XwH6ug}Lq^K1<5-ZuxR zfZC2hZ+!1B)$x0NX$`bamvI8xH=fY`-3Yyx5uGt1jcTgrfX>ZsT!8kAYO8gqi(jFA z@DYtr2{{oDt)1525&qD<+M|D+7rV6YtB^Y1+DrOuCH!y-TK6*Ogj~>g^>ceY(&HA6 zAr?EK>ki{b+`%;1KzmF3NMk+(%~N~O9c7_$Yrknsz8H(FP;K<3w$;{eC=vorbBhq9&CU%NQW*^J@s1S(izTPvlp!gZX6=Dr#?p=ZTC=yQ$z5i&sg#22lhYimO5qw%XoZ4r!h zm<-iOYoVHIA8G8pps%&?##U%N+B21~2E(8)%|Z3l`+HFss-4C&OCKw+p>-3(cUqJcj0} zaf;S^Fseaot8>>65f}~4tp>Cn8gm%5Z%5!LjzRO%{w{?i=}o%%0|Vu*vzw61xL9nkqu&D2(2XbyuA zfAT z28H2^j?j8f!p~5>f^Y*(kr}GZ0Q`au2u9B|8lTqYJ}kHg-MbX3rRJeE*M7^5tsw|@Emhd5e`@m?Zvw|j_S}g)6f9zq5ECo2NUW+ zHJ^{Vc#S(Kgpb$=-FpOD_w>+SdVsYUk2BDIyMl1&`4NTy{0{9OeXjkc_D^9IdSC_) z<23Z8@w!3#Nc*G;9N~>~sDX#je$*MTMp+bvJ#?+E(YW>fNaRHlbk8TKUfTavkqz(B z5S5|*TnrsxhT2?;j8Hpjw+Rs*UEXz1$QjSOoQ-1G%BG>WuAyuGJV+ z$7tvoa29oN4C=oLdSE`ZremS|RpVv&1l^;)b$wQphSqaA?n7t4BlN78iFjx|USTw* zqaYqZb?Ob>>j$m-LQIC%RyFDlU90wv;}2-PY|#=WpwD#eHfZkZ^Jk=@Eb>8p>Rx@G z0L{N0v^Vv+YJ3Q~r!iEQsd#}>(E1KZlbuwJu0S5>&_211%t(YQ+))f4p*7L`RkI~H3ia;|)#xy0p#U7w1>GG#C)sa_yyPS*WRqk_px|{fk=;C(E21oYp&0W;t8~`)Sf+bu5{mVsGs>*4DD&{4Li)m z12l#1If%V*hYK|Sw$Q%N`P5!1jD2Vg&0``oXYEPN_cC1JhCWaoUPAk69aKMO_#-QN zp(a+L1tQQ0j?nyDok^{W96}7@p*pw1vNU-~&BF_0px0Wb_R!ev-~<V~lu^DQ|85+B4r2AYj1sR|QUU@je6Twh@G_T6g`hM7<5((;u^HS@LHk)_uZ&x`1D*Lp7!K7j z0N3#ds)^>OYo0>)bcObKEHt;5FwzX0uBohf^0eYMUv@e!*3J!HovXzdT8FEXJ4v{uWZ8f$--!)}B@ z`=URzuk&Iubbk6k*SJCJuKlnPIz#$?DmLH>=0WSKGo^iEllFQCc@f&j=MWFIKL#&Q z6(_I=8p|%Ik8#jm42Sl{U9^S9sD0BL+Ebdl#;AR){#B>S(D*7s?VZLP6vv}9uB67C z5Bs3&)&3i(w$o7snrjd~AOPCqI?Jl9_VzaHg+H`Ts?$eggPsvu2dz^iI$#3cLC@WX zxDT~a4{Gl^bdS!E)=ss0jTq=YwWWD(ht@m;RPSNXR{|#CN3?)yulXs9LeHC#(6cB4 zj?jCWxAuXq(LS1u^w4;8o#vedZ=w0>`JpvYUpt_=or1<12aQqtFcaLNvHpbf=!smI z5B05e(cVz|dN##D_k^Gz#-kZ@jn<($9H9HALE}wE-n2|4|A4MJ3H7bo4Z;>^f5bt1 z;s@wnjYsRO*Q%-ZUOEIqYvYNzD2vT#3DrgWa}2a+^FwPm8WmuJ5a`|;D2-UCZquRp zw}JMrzORKCXztn20{L(Wf6djG@5@1Z^*3zAYUuOX@WlyeoEm#)+{9(1q9Rlet!ErQ zqZPECXP`Z-b<@2?&>jKbku`mP&#&cleha&>5<06t<2L%?9kds;RznbpB}jr9BXA$< z;Rii4wU@Q;RabuuhR*pFWQF$L1oVRTOAJhCjFQkkdx>Mv{(AuJH|@dn$b$yZd#j;# zwa4p1`%GU=Q3m$7gTrW!NH}5)^mzxohW1$r%)&xwKRriVY=N%VzF&ZxNQAzeaUOp{ zV}653OhsNiMhY|rwWYm!4Vs6>u^gJC#*qW3ps}m(L0FHga80AnG9wiFng>1ChC=J3 zbioNkVIXt{LZJC-jCu~(LhITfWKfV_aLF)pNRP1Yfx+eh-Glu?`k8wS4f7vpcJd!E zAY_2qIlOpKcqyw2p#wsCRwy3iS0TX9YGBv^zd;Pb)vbZMM?+7qMva?zH*MD3r$x(F zt=qJ1*SlHSK`*!wi^Jnokk7liJv#!TH zuXZjupY-fg^HiIi4(m%-=^VfP>=V~)o5#0aI`ip(h-^7uZY#Y%q-U33*Oqx-F;7_T zdY#V}nmJ)%<-M0TcRuGBG^$mlVME5xcADokt@h?UP5S14a_HF1B2EGEnXY!9zP3oR z?}iAkN|7(Rbm=no)s{iyp4t>EadTpR|L3FXO)B>5hB+7h4C$A(rrX;wquuSx+nL9% zXqHF@Bvh+%tcwznTF)jM^uF(3b)9S2qmRD}EKFI!6@PpdJ za`+_G-aD^!^2mbzua^$C-dwX@hf@I)O$|op9se?F`;rikqbtXbIM{V^?W==A5(k$14fdy|QOcxbQ6NjfHWq8~rw*RfggD z=SN;0da?M2+fUx-^Z9(gw)fDT2NHwk?oA(Ox3l@$!^eD=xExvBxoc0yK6y8XB=_FY zDyZJ`tu=Fmyl7dwaEp|FWoJ7tboUq)pXor?&2|a*52iM*d^>|v)_`qI%I9sj=5$=v zu#+A&yV?JKBl*If193y!WUl0!@3_^{%R>j0b@^O;Nw4_jg_A!%T{-n*(MmV&%2H7D&$o8wiEK*2>kKR`!#Nt zjv6DKj#uinVPKo)QL!aE1)gkwYG0S-#@(1~NxSFOwK(h^QzSKLM@r*P7tWU(`k>VU ze~*tl_cxmQd-UAoCfDEGx?6eV=@qUyl6yQk{^0EOQ|4FJ-b1Q=UOX~kd*Rn*nqI## zd*1ZuP5q~Cd=_(QX5WPKQxg)4pV(ZXQ=O^1W(}H}eDD1dTAw&q^_S!< zo6kItnN)B1h5W9U8;vZqshp{}Ro89(&HJo+7u}q=yWPTSevXCqWJ)SHy=R+stL}7| z)ZlRVPpvv$Th?iW`PV%UZ3f$x7_;`=>>j=Ip3LUjcwnx?7xC}8bLXc$kISd4V)(Tk z_iLAOv8|R)Te5b(=iZEcGK>p;8ak|rd#P-zq`xOKYxU|QeH z^*_wdu;}-t@0_2!dQ_ua)5BegCyh7X@-Fc_bnNk`qkDFZFJx1{Z|_XMz1mwZXP&ur zmWKA}JGSaiy~p2+X_>CoqFvQ9_^c~1HbcG6n{NN~!hOWl-EVTYtA4#!> zNHVrr+2nhdWz*KM9d+6d8&mv1kxVx~<(Pi{eTB6V13fFvvi5vebkxI#wQgQNQoYLH z9Vb`c`g1|U?(S<%wh3A5ojCczwa}my^Uu_{SHbkG_R@Wkl`3wlm#4<$*3B~R>DS!$ z2e*(zcA4KtXWw0RXvAE{0kK2dZl1Jxf8ikuZaZY0c`f^<$=k};KXZ66*pJsUhV5UlWPj9%CQoa<81}+aaNLc62AO*Pe$?-nXPyGDGG5D7 zse0`Ow{q`2;@F_+((Emc`Iok_n&orrL9HB%Ki=uzrddUY%R@GdT9`Lmx7Tf}+VwrL z{7UUS+3I9k>Db|qN7LR|l3&j)duZ?C;5xYqg?ii{za`}9v&>yho(hS)4x>Kf{*84o>VWg_{o5l;lFv8@3YNe(Oy%o&Bv=(E`#`|poAIegXm>OXC9GNPU)G*o;l{=huS$=t5ZuXWXOUc?-7}OLK})cyFa(v%s;Y?%HBJ7sfkrhmkU2SvGmUEIrI0n4_`U@70^GQxk5ihUhY~1DkF25%^yEwQd=BQ`h zdGDpiv-Rti=V~5wBcb_ei`!eb6Fc_xc~!7>bN_Tj&bTffTIlMDrsKx<@oe(Ir^l$e zZYwTAM>`k`szv5x!1a{TOGLeNct?lrmVN?c=MEfWcgw4i^o>+IGV24rPSXR z7cyPAG4RHjiESK)Uhme+r9rRz{#B0sdbLKq{)<04)ioRaUOz5UFIVHbvD3;dx&P?H z#xXZ~cdYyLgUhH{1xk3ouTm;-)(3Mg*AEwM2AA*qc7JcHWf%K9X1v(vt-129i@O?Z z?r!B%{(a3t4Luy^hBYse(`Dl1Lj_Z2H{Cpa$D9kd-iCTqhzWR+Y5$>da}U@i^xN>0 z-MG^gx0QT8$F*i^n@66-uP?}aYJKr=AE&pa>{?wPUp8}cznxEe#7=&E92Bp1bYy)eUW3 zJW9^?+FPqut2Ps+j4|(8+xK&m*>e*1_gd4Y{eoOedzM-oU-`z}`E47QUiGPX#rg$C zzU>-Ou~f9plaHyP6-wH5&b2S{ep#nF52(-gZeoRd)*wL^~B5HK4r*S*v@su zP*0a1gC}-*-lAKj^KlC=O*_2*jbGJlu2sT^7x!IM+IRVrk9YD1^(=g3dv?>}N_TC} zHxJmHYt;EuiL;CKy*r~`$v$p?0poKWx#Ex56jAVglA7kowaLr zkBlSylHSEX4q4u)wZ&`1gp#Sh94$1Z-k+{LJu`#*t4yjc=_2XOLo7vZVy!Cvk z_uc&Sf9M;0!=cUaR0=se@VM12{%vtQ0nz^!zzA8)|xx)|HvAcykvO5q7gUF z+Mk;qv%G7rYZEKv*yp&hQ;S1GXAOUTx%S{~y(HXX`ID>$Tah+nVv$Cq6xN@bl3Je(fUn|1v)AL(<3L;l53MZG9V#Nj)E1 zxW;?CO&&wyQ>tC5+}CYP|Mi8ECb&k%cI#?Y=U}^-A#9GLIcuub>!?GH_R+rHVd z)LU1{4WdEd7A?d}HqJqhVX@AK-hCfnk*VS{$&{b^UGn`;x7W-1p@xnZSaHibJr zi8`2+sd&u%#txr@3l^-qC*PeFEA6ws8NW2}b#JFJ*LU6goW5qeg=gg_%&Q}&c z%GUE)jbgKI9cfi1_mLxQU!LA~d*}Y>r6W?F4=&i@Y^De4LMB>AG^v|;KuyPp84=wE z+#kQ^m!<=@cRHLeW%uF>;cZ&~v14UQ#tRX3uO7>~v1!*=K7~F$>b~V#&T-4?On+!IkWzd(N0@G4)Ec@^z_xwq~t!?<^Op4>__vf4N^f zF76fE*{%BW<}M{iUpTmM|NLL3X1kPYVAew;3zWM&{Fv2=zWJkec|Etd zPJVkoEi2)4w^psy<7cmJ^0Y^rR~KGYIC1?$%MXDecJ(`CwhYO&_Ccie_}B>>A7xrN z^I^T(9aE#9&b?A)@wHt^Wm`-xV^eFxr8y&3jj+C4@7#H(aw8(n6<<<#;qEsZ2W-FG z(fi%Rj{P^3N_@03Z({0(SkHx)nSV?0|vkhtC^zmBeBfVP0ukSWvV|eP^Nc6C0XNT8I_B&goMWutyhm5?xb4|m#rH%%+y6qMDD2Jaz#!br{xAwc0 zT5eomK#>fYGB;eX?N*$J-?`gC?Khn?7r6D|U?-O;?eqU+{d@er``i1D?6d5ahtZ*y zd*-V3E}hxFf6duv1NM#evuw&9FvT;Z&Y_+U7XH4tONG|?haA}y+OygFDL6jP~4-+-I^0)nhZVLV%Kk#D*U#$aLmY)1rpz% zKe7L4HtTaI);(F;XhL+p1qYg6Jbn9mLXGR0FO@!8)3#T&>Bl1~ewxy}%$CGm9TtD6 zweMX6Bk!d*i#)ECEL(K$q0%Xja`jJ{p0#+cSqr<*d}w*TXy@4uert}LU$ZxR*9?bu zX6cjezQ51!4sI)KPn&{YB-Xw$FZaQidES0c!z)#qU3kfz85a`EREfDz=uQ7gu3?$; zM^#zg#N7YjuU9J#K00Md)jQ=Y%wOmkV*jY%>-$+-U-y1E{p$5X=Z5w;8#1!qnSd>M za;Ga;Hucxvr;VLoH2HnIKa0I9Hn`HNidEOlv^f*sw#TTX4LhC>>NvMr?%?==zfYXe zW6te_Mter(kM{A-+4gw<11F9@%A9jprSu7RJr)dqb2PQpy5Fp_uIX{_Q1N~5e?L$) zU10Y9MQ!Z1Mw~mnv&^EwXX5H*YjxqiOK#r->uV%!^en!}Tx0LxvkgD|x^(jpU*AFI zW}i=wyE^5`&#|A@4I8=clXvGMUU{Q_PPTc_=cx6kyU#BNe!LhRbG!4Za>X;%U-Bs9 zkxJd0?do)I$l3dMrnP%C;ApLhed;@2$hdr5`JeOVa32_ITeL=|6$urWl$vKLpK(%9 zvlowwIC%`okx=7YKIJtKee&`CbcTQzF$ z-Jx59<}F)#G-&$q z&D{s|8r07}IPBjp{(t*>605-A!QF!b{rLN$jj6`S_5W-tpACf{d{7%Dkputhp8vn^ z8yiv$&A<4-TIQbJgM&lD%zpl1{sa022K$@awrpq);4h2<{OT6>GuJW~ANb|Ef&O6w zLwfe5R8GbH%9>j>@8;I1nS1Nz?jCI$HSj3QWu?Ac`&YXG-2;RC{mfw@RNX(=95yI8 z*gweJGbA`{Ku8eX4G!$-Z!TJVV9{@PeI3u=_i=4NV6Q;~{QtVysb7enzqz>I*N$kh zxSv&6_fY<~0_{}@_7AJTn_otoR_ed*4D>S>5C1lmw6UbM#zblJ%U#6>n*aSxO@^<5 zLkD)_rfwmF!U6(=DAd=tzy0rDp9eDFfBpEc_f>&!7pJvHJ-ZFyZ|V5^x-aeb`j^+% z`E6@E=3<}lm-Ehld@|bez1hZMM3O$_Jkt3`i&2)p$gE0sCTo#VWPNf!=}tZ&8<9Er z%g|<|3)zYcB7I5y<8fkR-lx5UCKe-B?R#?{8AsaX=I@9}GilX~e#lUA7U|H^Vq7I7 zNxL8UJK)w9!-tG%!#GH*4i@7D>C(|+S;0RrYWq~6NAjGuJ4XE7#{G50OTcI5-cL&lOX$T(7ep`SqJBoj#| zGW3zfSVUSq<~}lpj3=F+&>xvdrs(~r+~>r8d&c^capWR0;W_ox>lf6k6!-mMF&xQg zvNxGTjwKylv0lm~`Yla6f6@+VerqvS=ry^Uj3ML6Br;L2-?8ub%W{YJ7Q>y4BqPX} z59}{8?j!y34^Xk6s4JO7x{y8=>Ov-x^GM%h_5~SD#*qo+MbaUK^(0-$6f!oI{Z@{7 zd}bZUII=gHWUxQTNV{a?0U4Su*{D&T*Q7U@NQRS1WE5$YKG}#N9mwsZnLJ5GXGk`( z@Hg$g*^-SQ{f&F}WMd5(N8Thub0iyi_=k)bvMd>$Gua3wlYZoW(x(8QSLC`v$%Y>p zO@@=sg_Dg9WGop^CYh5B=Ss9wgzL!AqVz*L7fUu?C>@gx$IA3yCfS%sn#o0^Z&}7c zI+ss2>Qtdl&U{YB)=oB_kXCh)jht1P7wJSgyCxf9WDGe^>6UCY-FrSJK@QO59u&8*@z%x zBa#jMBWCCb+96{}UowsiBNNDpWFonUOd?}RtC5U@j3n)9)80?Xh6@=4%J+ z$37vQ=O-KH2E0%Dl8FnrkMvo{x{?lyXy2Xw$r{RE*!N_@V(Lc5E@6IT5}C(?I>b;9 z(qU<`5lJSkOg3hbKC8H%j3xJz(d%hnpOX)i8yH_h+TY0hNUKe(2N}JEc0C#A)?}kM zY2HSC$w=}d8M=edy|`{a=Y&ioBS@g@C%u%J zxt{dNl486dBT4-uviS$bMf#F8NEcIz5lSYKv1CkE#z!VOq!{LQyw09tOe8~dGB48i zNA7FS>pUq&IO&i##n?_Jkx8UEUy6~j1LGsBkV&K$Y0jTw_>z(2BGRfD<02DDb4Th| zig}WWD!l)OSK*s6)LG(w44rZLa z=!YyzMw2dN4B48DC3}<3Ll}=PCL_rzWE|;3Mo(e?>+`9MPdSZsB_m0P ze$*$L^&}mpbIwU0GK!2P*N{o%e$qUf{`5ZS7)(2Js1un)hLX;6Q;d0}%Y5cfCX)IO zL*f>&9;C}c){hKb%=}5`rL0#d?=Rzh(q{$lljfDIcYj{5rVeD>8u}$2Ht_r#!2M)6 znM5ukV>eO1fwZ@o`I0WA9~nx9lS$-m(!7P|P8jng{m9U*tOse{#yrXB-Snf}!*~br z{$A!sCX!)f>^`n1llHSe$+$z*VKDVSNGK=&8bUwkSWhzU0{xTD7nvU! zOD2*ISLi34{;u=fC*$t0zGQ47`+g|b-=lxhe4qZw$j7u#x;&*m!x#tYLs~s!K4d7l zi1c|u{mEGJE$Q$F>pYzMNJrA=CF4@QVqcSqZWGLyplXgg7GJ%XHQ^+{dX(88< ztx5AP#zRJvCrN$f{2Er)!&+KdhdWs3&ypcywDs5b3-H;zsurVyu5r)cpm0PLBwYDq zBB z%2SQMGt_&oCWrAhUZy-_Y&}ipHknO%+)WOyri=~kJAeD$)&A>$1AC0ieYvk!+I?Ks z#>8mz@H!FO`OHb5H8eRy*>o{w+AyvyXTuBTKTUI-syR-vb2B+brE@nqk5BJvsxc;mr^&}= zc4kwJ1}0}$lM`2bo3p3=mwJ_@jrMiw(j&LBdsZG4X*i*ku_qPU;e+YC)K{I#i+)7wRgtY z1ZLK5vFSxLvbX6*{8f{;Tx)i-7)MCeZ<>vVYQj9G*mG;wb*;#R=VL|^~__(|3{De6Lmi|nqt$` zlqbrzsVUBS1e?s`%hvR=|MLGEaOc`k{te{(x3&F`dVbksU&h_g6l&AU6yA&_Ze{_Un##=rXGEdT4-`q#CO zwYGhj{vTV@w)}FwqG)eoNB#|l*Bbv+o5p$`HP`uSqVq)^Z5sT?ig|oJnm(ivZ z-?-|XhX3}g($9z}?hg;J7%iF0|7HC=O-VLiY8J;mEBZ3;v^D?Neg5T{)Yz1i$#$!? z>0_oIrpU}qNLSwZ`uykK_MsM|c-p@GuX{aBiPp9`txZp?yP1-#eMnc{`SSmDsF8vB z4zw6K{_lIulS+Mg76)-pjUoJ7+P8D^Kc5xU%*M8)jcGT>F3zTr=_GYdAZdwbKX$AC zVHV?0zW=)3?7g)0Zf;7jwrQ2wWd63$uJ&dwd%-<%bnE#Wig+@q%6Q|M8smH0?Hfn|8Z+o07b2OW2t{dU=>48?_{8`El&_Vd(}sn`y&F#Xmhy|3068&tcWG2JoLkVjXw+T z?`3a$EIr?Ic>HZz^Uasmd#J7Eyw%vWn~&oBThS-e4b}Wv!>i-@x4D1cZ~y#rj>q3a zru^SO=RECgX7N1qYt=de#^_Rl1Xv5Wq-f1+%f z>vt1Ro<1!(@ca_TbBCWB+QSiC>-00fn|*s;eEA*f%d=fK@Y{@;C&<@diTKH+-y>qV z$8oa7sPymW?(aE$`B{_p`wXKj@XtTIJ?w3VY5aQpclvAm1!&)ahp`?1-rbz!aQ)mlQZ&#CV*MFQc zKl`*M$7t7TuEi*yHm`sFeePSk0sq(*^VAp}e&C;ZXzTAWdj7-uerxON7(0C#Bfql$ z%Uw>}= zy|!P@<(J>RA~|%y9KJSbhmXg}KlaG7d})6T?RSo`7>)J2!9P9A|33FE_#M?|t?8t7 zGkz5KkUSQ7;~$&nN%Zy44;i!a^OXN?g})}`|9q}<^W}FJoe1}@zo_stvhmm7`>Jql z4A;)$_lN)d8QJLDpQ*mo^2?uP&gqx_|9-H3`Lm0Dj~q*TN&L4lcfZx{@87@vqjsM9 zvr*%JF4dRc-PPVj+Kb-Ae>0=C{<~KHvDRs85o2u|_|NTq`5j#CIkM;p{5LwizP0!F z@ArT2oo{PvTjZbHHvG^dcuQYqEaJMW{5L=S z^hRU-nJ$PmILaMkZ2Wkt>3JQ;HI94!PkUz^C*@V${n?ofZZc%DD%Opnj!JbKF`XDx z;)`{F1(t;*lVp>uiph{H$&!#{1)>|JaTS7CNwT)s(n#CYqM~BE`az|Nx|(QFF>Wj> ztr*u=w0snO*A^AoiSvGc=Q+6?{~jIEldTTCH+MbxeDsSB)gE;S!VO~UU&vSce;9S)L(6! z!#96RG$iW9^T-^6_89w_el7Xv;pX(~k<*z?L)vm#*1mP$2hHf`Pgmul>Eabr2f-a^ zz#Rp*zX3M^ZXY;YBfI+f-~2SjRdDxt`R-MWAU-ajyXi#@;{tBM_Zv_hS-Og*lhkG~ z!RRy$0h|b<_nbwZ1LS$=3#Y5^P${V2Rn)KWL*P5U=ss!;zen`o?`fbP75ymlZ{csK z$vFc4DEI@y_Xh1JU7i5Hg?(Y47QSH&WYF5IITjOZy+t$xF3zU$!Ze_P3TD1GXPbwJ z;?tR*BJWC<=YA{fo0}E4VFnyoFAD1MtoM^6BbRROe=IOfTWPJ5o!c7w?K5 zs5r%}MwB0XKjZ!ke43*N3T?eE(2*1H?s@QZ^>*=c74?rwZ+_@>^$ogTA)lZ&j|l7I zmgwb!R$Z7~mTP(NtB1Y`i+qj_WaN=?wPf%H=@sZIHPp>xnY3Qgo~8GMJw7g&?Wp-U z9mJo8b3LV8xt!}+m@B13%+o1a0P3|Y%%-;kA{ z|K-ee7&TXcuof0Tu6>^;58@AUFW&p)Q{AgrlE)CuFVbYUF3w`DqJFFWs2jg_x~g*M z5^e{$VQ?24Ccy0hcL<#P9bNPII{>cb>mDyK9l{UTtT{h6$n=dd%Q~e(iNPGN9ln$B z4Z?Sa1ewi5JKcXsUsY37<)MA64?%llL~F6erP6QoLP}=(-BV+;m_iSH75JXvHsyZB zGVaSPSB%ZZNNe}SK`g7B{z1|JsdpVl&f#yIu0Ai4Gwqxi{YjoH-G3f;pO8 zy>y&0cAdR0W1e)RgY?oPr>igVHZp&7b7lo{9!5oiIp2~j(-yzSHWcC81YhU3@l)gn zpohtG3b|0}Z!o7|iV~kwEXkH&8%4&B@1CyynETY_^)f7mAN0RB(f=05;+zY!>mSUu zFZ(K}Lkw2mM2jD$b%J)Ebw1<#_fA(sUqpST9o$@SW$t6+26eTy`8HlGunB>G+zo9R zTFKL;_SL@ZRp4-A?GkPixSm)(!VQ7zj?opt?FLr@caztz*Hg{LFlK4)RZ4#{Y3gPE z^KoQsI&!-DO*swJ_5Hy*K$1_mJU5=!G%&$sU6##!DU&;JooMR1Wx1d^!V<^4ky3QFv_Jujx)* zo!r`Bbmbtcj!!B-_G&9{T}A#{p3VFe+zBBX(oQ?0JShHpJg|4^Xv`3*87RKT}>|S?`t?6OsO)rB>Uf* zO4(fWB=QPBCq_WqJ#INm8qE__fyz`}7BLXbzc^h*z3ft*c7tmLH!KYG;O$B0-ApXH zklqw;Pi%o~%r^dQf@gzxh*`8=iT9jq#nGTIf!ag*QPSr{eE>h@UX3R{&Jy3=JOf|3 z&PJ@rPFdmTl4IVE^+!L$fgJfN_sr*@SHEOWJohSh+z*foj6+g$3Tg8qWJP%9{h!m- ze-@982WjE}IR0|~FPHn+w44H6??L?ZUbLD%P2Z*; z)$2kh^4p$=J^S71>H}x&BRCE3G*YUz^=7E;nPU?3!eIt-1tF*;jA42}6ZC(4AZqC*VYq$!tC16}i!&acN_=T%hL11|u3$J^>cb(be_X0h+&Dfy_B|i}{rQvCAA249 zJOP`yReKFKpS2XrZPSEcni-g;rP+0qcQ?F)FP^OaY&!d2Yadpu(wWyJ>(8?6ZH;9; z3Zj#;UK5p7HhtC$_&0Yl@_z<-YzJ3)$z=7nDt}FfYyLxB8JaRZS~Wv-(`&;Hw>z;0 zmu54EM7jvlt3uL;V!VsA;uf5Jx|cExTr^pIw-9ElYH_GqoXq;sQU>a`m+PtHdm-Pv=i;pJPIeoS-gI&BFySN&t z*Ccjzs;LV^wcV*M#OcoA(^I@|y`gX46HIvm3BUAMst?u6|MxX16(+F5Uv+o5gf~}b_q8CZUHzA3A$$Sw;kO4 zm^|TSFL#44fWKP^bivnc%wC%9kcp+}b>RuxLA>MeZiM&VGx1`c>v-|)q=U0x#QYQ9 zo5V{SPMLR*@0|f_G=LIrsGn)U+Rk4evQ8lD)h;XUkugq(0wP-EP!SY zG#l$^*sCTQ9}mmWG%w-1t~wfgIngkek(@2i^g~lG=ZYw=1<>q)<`6U=mKIa?Q_GWm@M+RhT;M<1bO7n+j(-`~V`BKEg%q_;VEzZMg zK@qwVJl)GCs~5P9j_ZugqilTET=kn%M`!B8+Mj>L&dKV1QNH-YT0<^srX3U!^|msO zLc1H#HbHYuBnO(eMI@$YC!pC6&E;_#_UpO28cpj3j2F=C zk7!h$;fN>?ejYS~E93gA^1PvrrU#m%(8&J{-b*w~>S#7W({|}(5H}9ri|}_?o&v1H z&~!s{yX06~q4&NvLHnk=;tfon6VG9IhT!>1#DjTq9u0MGkMqz&7$#CJFTv%xtfmvb zrb;`b5lloi4$OnD09^-kSJcZkTddhyFl4OA(o^8-u$Yp{)Cb=>__muBAGMY>Hol(Bw+(2{jV*1nZe5t=q z=w{8uUx26E^SwWa6*bIPd_GXJ<>rLB&q7=KDkJOg6|R@HzGn3`U<2dR_z1I0)_5HITrZ3NC^7=kL3W3RH0A>$!r%t-Sso84nGp&0?izBU+j0@3g_*?4rq~@c-@AF!z+Q$;>T1J^`Hh=ndzx`VGH*U1G zJc7`KI!Kc)?YsKoPb#V$lP+(yp=5+*ptq)lWPwKGdxQ?(Z!+7wTu$-mH1X$3$yyrrWjywz02t*j}iU$SB=5 zSv~(LfsFVVQJY))_*Tr^pT=+z-k@sYp~9tE&Dn}9($3lFu{WlX>0+*>6?_l)Rp6h> zy)NO_f$IY&d!|c%#~`>~aMo|J&e6W3{PouU%o2k3hi(&epF0bt#~at!cZgmm3~U{? zf9oW&Chp>l1Qmj-$e$MSPJnAtUq$|X+P8VHzGv}%P6ccxMp=CGR0|aP)hm&)|4%1_ zJsP!l>7w&#l8s#s=0)QNBxKRktCmMe|P%z;gPt z+ISWG2RXZ>PYAPlwB}arH{INGXZ1r_ zScBFYirJtx(sjPgD$;FkZ}r!2I-|5>qz#hR&V4W!xxvzumwseq2WfN(yF@b!+$gxE z!dPC|Vq1?{8M&MQ#553lk~~JqqwF@+?O)ArBd$}6eYZ^S z;3KP(zYYe0u?Hrr|Hge_lWm@2K0?ipB<5B(__C*M&_>E=IF>yeLRK&5*W4soC`D{f z0y|R}5HTSIlJ-Nl7rG{|r|rbtL*4392mI^6NelF1TPKabJV}pzm{v>D58KM=!-(LUq&!@AkhT z7MbROc8!lYwRouQhgqgik%%HC*pFpqzxN?4#aTV!*rNJ42yQ00k8>aBto1d<;LWTr z6w-tOYQ8ajRAs8bvkjhm&RC{!-6wOIe2S!TP_jDdc!xf~IXhlAQ*??#_*|ePS5EIp z6vfO!^}GXFh26vsrmyFcBuKxbdd8nnImY1a{@`TwwU1wpF3Q0cy@XeyugHGQ{$I4) zhbF5(;Xde#U3GB;K1r+vmt+vQ)W5pn%YPU>QN3dKlH1zrb+9ROG}&3R9@~wG-N+l? z<9?{=j*UIF{%Un=@(8S5mFu}ST=v+Qs6`Uoj@$}z=YM3fTID{_nH7PZW1@lnxqa@m zIZ8VN!px6OR{z3jr|3RkjoSWyEd?~XU1X@XS%-{1WE^xE@pVx1yXxLU9%w=rVAr%{ z?MK!LWQBb(dCz}XCsO|eSPW( z-J%NZN3V|k<7D*~-P>4aeoNeT#>)}T2@`+%`dsU^ zxt0>QJ>YkNKP5bJF-X7nz-$DfTZe^M1{t;@|DE z2gJv%6?i81Cbl{C*b4tCWF1A;`I5yY+)M_BoMdj-VQmsY}e5We?vuQp5YmkZsfcYG49y{WpSBirF`-_IFwLXfYr30A*@ab>UM zlYUtf>DH%`+Bb79_21xWVa@A8k_)rFh^R>3Kd~m{^5SbJK5sARbAE!EQ~(1R(=hgr zGL5K1b!M;3&A%#Fe509I80+4Te0mpA*PolLKB#;e#={1?--Z6%Dg8-m^fK%t$l7sW zvii&E^rsdFA>uYO^Yf7&KRV>W(qeKiHTJOJ-ecsI!C!5jaM zvgQxF9T>@E=4BGw%)Bny%Y(?9`L)U5yaTH@e3|VTY?SJ)sMV>O5)-gk1y4oghvz2= zF_o_R@3<6v%{8qB|4Bx8RdbMvqxDIdw-0ORb?Q9-m z-a;4SJOj3gdxTz-4i9`R4?2^1uaQps?@+$D2ipgt3UMrK{Ib)nN zs~iFwL<~N#r*lbbC+$7z7m9Tex?~2<#Ewalc=;Y;c7P4`!1WpF5*;f9AgCd(YZFWAjro*`{+i zy2i>O`A09c^^!Jp zB$;oJw2ptBnx^q!7ip(R`;^KVTQ}C@eEtrQzVqK|I$sw%#o^TOgvquK65LO~QqXk# zoq~74_lfP)+tCI;(&nR_pwMF9F;BJ0OD&$-fxy-uxc}T>->om#`~%KF(c*W4FOFZY zw%56@$B^a2qQyvc2JAREx~uDotyf?Z?}&_--suqkS{|JYzGpBSU~9!@JM9b%9C10E zj86y%#Jr-;&%r!o)!iZF4UE_CM;ZsW5nNcG z^PoEkt{YcgyD|5x`ObWZy>)KHZDDzk3im*#>jw7#vypKj>dXn$NsSbInI-maWR1bNH zjn9P@*t27t^NdW5?eRWG;Fkk2hKtK{LksISxi7JO!0X^W1@Gn=@YG{NrP8kPGmy+3o~i)q)Eg0b2>IY2SJIdZ5la$^1x*A5*go-Bz2EcA(5-Cnu}#YMz>}y;p5s#-W^F@Ap{FzRJwaFx9%e zmMhHPuE4kdF<(QsF-6-+YGcUkOR)pLpR5u-_A!Umeg-^^6Z1)1K-$$xi;Z9HJa&^d zNE+dJPcwT(EWb9V*2{`^5ZWD2kajP$d!V)Pzu`UCh6W9pD&G-k4?z1e?ls13)&@_? zu5slgY2&0NjVrPvvo51tRbpu3>>ruBj4yuc>u|_fs6=kVVqAkXA}ps@H2QqEGog1o}mM-bz?Boj#G&FKNcq zLCJ5fR6pT5GsTwH#vqxW%&Sm|1mmNrT&l!h+vSYsoNxWygz?dIn!zxNXCm(g$(!0w z7}bKS8=y10_i)CwouN^)pVt2y`e*0N?Eb-~E6(MhufexBWiFn!w4KO(2)RRNSE|=d z_wH6!k2m&f_K;9gJZZIED=)wMoJ#e)px8FAm;-JY+)IVy)0`{t|7UT#0Q`RNGo4mI zeswqa5%9J7Qv^dL_$GRy|XLgezP&KN{76Ik=>_dJzTdCgTx)`5l+q_i{ z|9yee) zmDsmyFFH*i{f5?C>K3Z>3pW8)xOOCUdyY(0 zVRLDCyrMk_?Fne#Em`&sSLhv}Wr5BOrZR3N`6RTZ^D1@c2ee$tysQB?8(b&2oMdu| zw*amKT&UM`z;%Etf_s~YEN}Y`SsMq-VcvO?bhi9X=r)PY-dE>OQ89{i;1#JphoCtL zO+_>fHZE%0dm7r77gIkt1n>UVO7&X_{h-!oy&se_y~$m+%j|pGRp>Y8#qUx%^sO*q zZLK!SmzYP|C~2cgv-h?6w8eU3dluMi5w+6ttTtr@?Qi3c>QZOu&wqNYE~OJg;O2p| zv4fe{cI_)gCsv{p;u#^moAh^bugm&BxG`{VtbgyCUsmh?+IWkPm(c%xovIZ>)%=V~ z^)u7SGCLa9VR|IdielI2Qnppd8u)`s^%}{t_GTQ^d2kHLOxLVFXnFG`q{G{x-}6lB zBcfj%(x?9=B43!5&h3YGJLmTE>T%il`b^GM(Fm44jYIbkbR+&gaa&=2q|N6mf#Hda z#S-&DXEV6Ze^#aXcK0jppMD=C@qtXHFWFbJ{;smDL*Br1DzSZDHM@vz+xdQ*XJ|@+ zDv=b}yhRpE*aPqE=hphH@5 zdxm$@Xw7PBvd*a8ItWsipI3>_HuAkqYUlKCqGAN!M(g((dh<1%mridHKe)417B1m- zf?EadDTWDfd%^X93&$JLje_fLkarkdsX^Xxa4Q?+Rls$|Gt0#<17%GecIeM@XkuH7=$u%jU^zKQdNb!0!%lAH3r=m_8p%nHi}b zjzV(;njea$_HNinVvS?rOYuG=x4aH}%I}c8C8EWaSlPAa5w16B{u18PkD)EXcNji9 zV~{-Dj@Z~!^J$j{=i&8dzJ=MJk5fVu#zPp3veN{ZY;5QxpFQNW>%vO)llA_1Lq0yY zElszizRcoPCy~{95%uq5!Wq_%^&KJGiW6)fqqx043Vj$^4eMD+K7H+s$%%!*8Cg>U zYHW(RGk0nsQ{6>nAm=PB#OCS!$!F8WZhNer>AO?T9bBP$w(p&L5(~XBt8Xmz!Qyp3 z!S6$M^D5RWkj;B0brTX6Tl*d+5B=87;`(vB<`32KprV_!HjvQ3 zOR};L`8VJ{Tv7?lPv=Z@t$k^56cyD#15}=#%G9W;!ppKdrqjQMPWU=Mtyqs*f;$Y( z<}f@j;IA9p1h{ZMFy*@fT9oxOkJv>cjm^C^m)`+@VF9*(y1J2JzOljfqklsUD2i=; z=NR%@`R$^+kS#mt?@Bzz*VK^52GzQu#P)*LEpv8cFU_@c z8udsF`qD6fSxld|viVpyGRId|svoN_U&B~sG6^_0r6&^07o2Z2jI55!E7ey-<*V7t z2HUKeOlE}!*s107-D%hy%6Jl)g)6a-Q5<^OckUwSmibAtOluLz>$m}VJ(cQnnt4bX znO}djbG(L^QI!ML@GIrdI-EXRsVX;=5gLcU_ zt4n@xs_Th`w*HUfGuBtB{u~i0Hu1JzoojhBi^S4}5^1~FR;sT{(1n`5x}So+-gSmK za~XNV$lG_@8R8MPwy-ohZ<(NCg8DDara!>K(-n+=tNg%OWb2y4U-KGt><)fYP6)G0 zdjDI40o$x>aJW z(hH49({PdwlU^kK4zJr}|K9DdMT!$#NqU}SyS0@ zrb_jOaX|=sd~m6tN!*Pqw}4W>c?B^-nT3IEt{I3!~sC*%refmg1kNV*L+vm zg4VV8``|*~-OmfgFHYYQ`uozs`OwYg_XzLcKCl^f>Sp7!@u8uv0M&(q4&xD9wAl64SSM|Z`2!fE@0oj=Y` zp(KnGi_90Eg)uMxo!6tii|x^(ZZ{N{5QjZh`hS-0Kpq8{9|?Cwtuo?kKoC z_u4zfkZEzQLGZ`Gn=jo^Z|a|3W6QE0xncmZ{x6va;O!g6HgqL zColctRXevQ!0!RSMEF`>_FlJIPF+!~vuz#Y6SR9pi;dmP7?aoM#~$m{ShE0{p7-P9 zh{p8oYPQz~bC4d=){*vkrIA;Bd}ByS|5bbnf?u%!vhDDkf@hiY_`XXUi)#BOUuRQd zMp-PLEeVR+{E|cPw|szgP$6vWNcX5bYLnxntt9PirEy7TE8sf8eMkta4?9O+2URfK z_?%~1mOxk#^HRSr+=hLC=a_h`Uef=}*waB^#lHJ2k-p>a>*vV5;D%zj`LGUv+Yau2 z$+7yu-;B^C9M1k-Ta9=(5~s zHq#*=d#cT`d57sg^7ed~b?Lwa>J4q(=`eWx7Hd(6THT_+TXlX=o!&@JGe&$2`kA8l zOEzUT_=Diz;^m!gU&08xe#W0~`>q?kZi{J1Rv)q|AK~|RCEv=#T3Gy>YdVE?1XIY! zMOv&QE*hLB^^<+bDtxpOI|~Rq?{R$2Ru1`I^ zPgJTOZRWx9J%fG>r!)5?=WG6p?9)-?ZTpnRG&Bfprl*oRm$XyLpR^-tTeB6uHaXUu z`7C;;E>FFfu1S`D=XdXCeBE^gCora2&_!4)X&t2H`AyyzaIZ`BJ>V9AyFmz}XLEzo zZzN5>;agN1mt<@McL3b;4HMvYfja{3!WeD@+(~dRiQygs*UE1JUmU|70k;5LDTX@% zZUEdRj>`+KXTApRUv+QxtfZIwd^q{hyUc;6{Mp*OH^tt)NZMi2Y>gLMy-PQ^`~iN0 z-20_)ec(2IzEb@u_qyisw+UR&7x?X9A<)r#<*#_3uo&oNxx)4KiD=E*OHcN}HwfQm z$%pTL@x_04jlQ&%^N@*!v-AI~%*tdtVtOKZ%^R>6U!+bWc}aR_^95q-&6(!Mk=Kp9 z;ZepR`MOp<#+Cc@E&aXCm&wmxsq)zzxLbSdnluNVYUiTz?MB|nm-)?a_nm!>rMAXk z@4Hg(dqr;iDVcvuE}!`gMT&G%<$K8Eko2=Db`5!(XYeyB8SOJ^G-<*5`}~c>H@@P! zgx=JCS7WVt67-$m{D0`?K=-XD(x=1U6B}BZd0lefws(+D??>*guT`r5P+uqJJJ!yZ z5B=-&GH*LW9V5>4cIKVfg>O`@eB0QU*e z(chbNW)}TjX}zSCzZu0uNeg14vc-d>&3c&qNYXvoiOe6+dV!Cp{D(=O_buOh#k1t? z16Km~KJJ6O{w%UBW27A>tzBtcl5q^&1h~8qT*93KR{?i{VFI}`39hw`Rf6x)?H%qx z?h<>4cG7l{_72fo8lx5Or+4Tet@V*gu%Fo8;kkMT(_iJ)OM3p>weeMbPQODw8{FST z^N(7*&EiC+)82mL=VUf!rtc#qLtl;VM7(G(jM-yJZFVYHD0!7Sn}HVt4Q7tE5UwR-jg*`Q(Dz)8;eD= z$7}mfW`Uavt}TWGWo^&_z7@R6s7tbYz^w#lV>hx_+srE1+pv+eGHHV%PI?dOP~Y9* z3r5bH4BvdnN8sK4U*J`JpMdu`ybr4WYBoFb6e>#24#&OT7moYAkj!Q?z_$O*+J0oa zYvXJ~41@jtnGNbvQ`h#FWtqk#3~#~KSoPg41sfF zcm!FS{vEyekdnz1QTSEq-WjG zPC&a*wDjvZ?TukXqr*OHGx{yixBmKx(W{>JL0^FW%aWgDgRle9Sy=q0&~)`AS*bro z-hY#HcBT%A|cR;eBdrP;O5qS~5dt z(0%1K=WWCXs$LEok8d?=-cDMPw3DQLjr-smbDKvhSoVIp#e*1DD_1wk>!974daU{v zk6$;o|G%02|9tiEuIBW26RSyMLK(RaA$R<&$EvT6-nYS*s_BaM|2~?icOBZ@p4hBr zui6LkZ)ZGKmF?0cxL}ZW0GAVjOLbKmq(6Z(-`MPgemO6oUq{+O(*A&FT_yeo2Wc;G z?~dZ+R(8Hci~mlPwN+Pc_`J;d$@2oU`;xhezr)CE%{^BAOVtNuh|h1reYSQKV|;*R z@MG0fV=e`t6A)VD^vwDLiV!FLn)i0fe%@oj_oK*ZPycW88){XTWUoQ1>@9l_8W z1ukbJZwvB9k%w8ML*j1{>kT3gL4LbQ&$m8Sz1`o(?Mj0!w{f9EGY_J)2@M&zKJsHu zBCq(=$D(+FvekRdd8JibO_^=5u!MxVOWIgX37{#9i(O<$N@fV@@6>zPHl zm4WF3p{?lrX!}V)1-s}`R7WR=S>%JQ+o~LuXBYh2;QyC&z@KbS?Y(tGeCG4X{n%nS zD$fbzwLSB(=v--kzxa8s_>bw=HMm};TPn}o&D0P4JGj^T#Lp7-HCx*)Qx~%1tP14S z2UlU2?bw98{m2{UKByo69k!C~xe4lp+(o+w+PQ6yMd!W7&*5b6l56b3>^x`>Lpum9 zQz9=XdwI6&`_8S+S}AqnP8|pvXgc};>C7$kPx!)bg5&LPYjoEB{4{UiTB8#24F;T; zkBkyBc0cQ}#=S=n`u=Au+aCY2X?(EB`doY!IP`OOB4^dJ9}D(?n6Jv3vaMxlOAu9q zzsjOI_rcE`h6X@3=rFuP@D{jNe+s*kbYEA~Tdqts4YW2rn-9i^nsTkOW$K5OO~0$k zH0zR_+4tb5A?J^U@cDrzNurlNJkmhF(&^`mo^Sh6Bz@v$^y=FmYM|c){kBj(>nH4{ zwu!&w@8$2UF?yAKuhYMfd&y_X-((-*vAcox2(;Ug{SwjQgX#A*C0E}Py|jV0d26h` zkgMNT6|LrBoFzF=UQgD*lQr;U4Ln%`Pu9SbHSlB&JXr%z*1-Qj4U9Y-2<>0D%mMhHnBThHaK&Pqw-^GYOe+Ig5h}f@3&Omo4 zMmOR0_YPE-3)(^kZ$K0=v03p-N7@^ss2K`Q%<*_Az!AoR(~PgiQU1Qh0v=l z6~+d`=jmY8uj$gy-xbzeKyh=!^KJedmS=-MhpKRwKZpJGZhsD?ZuRG|-nTbA|AjxR zzI8p|&tbm~u&I<@BfO8pr#XFyd%r)2<^7O9hvog4KZoVr=g(nzKj+V3dB5z>Vfnu1 z&tdt-{8_PBUElNPa6jau{;YnX>nHxKc8*`uz2Ce3GAJ48M59xwPwWkz6}!^)X@4#R zkEzf3v&Blljrwz^r+>wtOaArhetmc}M)(pNszdJAW?w^JD%z=+8|b59(vspU?8=QGY($pU3_ATz}s0 z&#Au+_(OeZ_4HOxKi{8Q{CSQ)2V9|$>Gks#Z$I(3)yN||5TZWfbjml(TWMjrLb`o1 zx--f9VvH^yGAGFU`V*x4X^bvjzL;pc{Z))EUcN@UijVt}m2XUpJy&A#M5}Q;DgUSc zRnQ`#yy@sJa5}X|kw0DH3GIU+_!suOu-!v^<8z4r|AiNSsaF2Dtg!uG>FHstHKYm4 zy};A+VS>ZZ&Mo%zLPL6}$6cOYY)GHZE`?-a`5NJ~+~ErGiyEH)+@Brrp>7~C^uM;f zDk$0co>AeFz~VmJpTl-|mOsz;bj6!>h3UWkeefyCuvbKA*GFCy(1mur(<>sh)1Q4> zkRICUP?w((prij`{pObhbpAUJ>Cq66XJ0 z=MU-ll>v4go1HM!@BO(`3o~4_pQVTGJmJr`ToR=J&Y#)B`ag3m4&Sg|e8Jnh=&jyN23IOcHN z;e2*Fz>M7Q2Ts!l^m8G_B$MOIOK5H;fTXghhq-M9Zon*u_skmtHZp*g2ST2 zlEbpYeusk&ha3(&9C0}6aLnPj!wH9WfTr@_XvIk79TprG9hMxH9rimMbU5U2*x`u7 zQHNs=#~n^MOtBwRSF1zqJJnTiSaeu&Sa#U&aM0n9!(oRb4o4l1IUIL5;V@;3h2-xr z@37#o=&_CP9csU&uA;+|!?MGEhl37> z91c4iaX9L5%;C7h35ThHAfHx;d57BXsH^C(&-eJLE(P7D9*zOmMibD;IQbhM7Q2VTOl^m8G_B$MOIOK5H;fTXghhq-M9Zon*4Vw5=tHZp* zg2ST2lEbpYeusk&ha3(&9C0}6aLnPj!wH9}x2NoCb(nWpa9DI$a#(iQ?{LuJki%hz zBMwI$jyW86IN>n$4$t3V-eJLE(P7D9*jyN23IOcHN;e^A~7SG>d-eJLE(V_OY=qfwxcR1*9$lj}zq~^|XZQI;=UiQjYUUbvN^Lk%-@kJM1{PI_>zUY!Q7xu2X z;m(^ypUdC*Nb153eH%8e-?;jQ)P-wr-?(Odf9k^9@7TEJ!kcfu^TPi1cl57W&ldR_ z>V`YluIqj2+FnO3T(tb98&}_)GV;FF8~Rcg_TF{-hP!SH;Kubq%A3}#->~+M+v^^# zCvE+jb*shTcm3-&suXMa&+Uab-{ChK*4&u7aO0W*9&aKU>N|Q@Z(N 0 and i < len(words) - 1 and random.random() < 0.15: - log.info("随机删除word") - continue - temp_words.extend(word.split(" ")) - if len(temp_words) == 0: - temp_words = words[0].split(" ") - words = temp_words - answer = " ".join(words) - words = list(map(lambda x: x.strip(), words)) - words = list(filter(lambda x: len(x) > 0, words)) - - # 将时间均匀分配到每个字上 - words_withtime = [] - word_unittime = (end_time - start_time) / len(words) - for i, word in enumerate(words): - word_start = start_time + word_unittime * i - word_end = word_start + word_unittime - words_withtime.append( - { - "text": word, - "start_time": word_start * 1000, - "end_time": word_end * 1000, - } - ) - - # 将句子首尾的标点符号时间扩展到字上 标点符号时间为瞬间 - punc_at = 0 - while punc_at < len(words) and words[punc_at] in puncs: - punc_at += 1 - if punc_at < len(words): - words_withtime[punc_at]["start_time"] = words_withtime[0][ - "start_time" - ] - for i in range(0, punc_at): - words_withtime[i]["start_time"] = words_withtime[0]["start_time"] - words_withtime[i]["end_time"] = words_withtime[0]["start_time"] - punc_at = len(words) - 1 - while punc_at >= 0 and words[punc_at] in puncs: - punc_at -= 1 - if punc_at >= 0: - words_withtime[punc_at]["end_time"] = words_withtime[-1]["end_time"] - for i in range(punc_at + 1, len(words)): - words_withtime[i]["start_time"] = ( - words_withtime[-1]["end_time"] + 0.1 - ) - words_withtime[i]["end_time"] = words_withtime[-1]["end_time"] + 0.1 - - if random.random() < 0.4 and len(words_withtime) > 1: - log.info("发送一次final_result=False") - rand_idx = random.randint(1, len(words_withtime) - 1) - recognition_result = { - "text": " ".join( - map(lambda x: x["text"], words_withtime[:rand_idx]) - ), - "final_result": False, - "para_seq": para_seq, - "language": "de", - "start_time": start_time * 1000, - "end_time": end_time * 1000, - "words": words_withtime[:rand_idx], - } - callback(recognition_result) - - recognition_result = { - "text": answer, - "final_result": True, - "para_seq": para_seq, - "language": "de", - "start_time": start_time * 1000, - "end_time": end_time * 1000, - "words": words_withtime, - } - callback(recognition_result) - para_seq += 1 - log.info("send %s" % para_seq) - - time.sleep(send_interval) - - callback(None) - - -# ignore END - -if __name__ == "__main__": - app.run(host="0.0.0.0", port=80) diff --git a/starting_kit/requirements.txt b/starting_kit/requirements.txt deleted file mode 100644 index 09a313b..0000000 --- a/starting_kit/requirements.txt +++ /dev/null @@ -1,3 +0,0 @@ -flask -requests -pyyaml diff --git a/tests/test_callback_editops.py b/tests/test_callback_editops.py deleted file mode 100644 index 90ddefd..0000000 --- a/tests/test_callback_editops.py +++ /dev/null @@ -1,16 +0,0 @@ -import json - -from schemas.dataset import QueryData -from schemas.stream import StreamDataModel -from utils.evaluator_plus import evaluate_editops - -with open("out/detail_cases.json") as f: - detail_cases = json.load(f) - -detail_case = detail_cases[0] -preds = [] -for pred in detail_case["preds"]: - preds.append(StreamDataModel.model_validate(pred)) -label = QueryData.model_validate(detail_case["label"]) - -print(evaluate_editops(label, preds)) diff --git a/tests/test_cer.py b/tests/test_cer.py deleted file mode 100644 index 6c5a66f..0000000 --- a/tests/test_cer.py +++ /dev/null @@ -1,93 +0,0 @@ -""" -f(a, b) 计算 a -> b 的编辑距离,使用的方法是之前asr榜单的方法 -g(a, b) 计算 a -> b 的编辑距离,使用的是原始的编辑距离计算方法 -test() 是对拍程序 -""" - -import random -import string -from copy import deepcopy -from typing import List, Tuple - -import Levenshtein - - -def mapping(gt: str, dt: str): - return [i for i in gt], [i for i in dt] - - -def token_mapping( - tokens_gt: List[str], tokens_dt: List[str] -) -> Tuple[List[str], List[str]]: - arr1 = deepcopy(tokens_gt) - arr2 = deepcopy(tokens_dt) - operations = Levenshtein.editops(arr1, arr2) - for op in operations[::-1]: - if op[0] == "insert": - arr1.insert(op[1], None) - elif op[0] == "delete": - arr2.insert(op[2], None) - return arr1, arr2 - - -def cer(tokens_gt_mapping: List[str], tokens_dt_mapping: List[str]): - """输入的是经过编辑距离映射后的两个 token 序列,返回 1-cer, token-cnt""" - insert = sum(1 for item in tokens_gt_mapping if item is None) - delete = sum(1 for item in tokens_dt_mapping if item is None) - equal = sum( - 1 - for token_gt, token_dt in zip(tokens_gt_mapping, tokens_dt_mapping) - if token_gt == token_dt - ) - replace = len(tokens_gt_mapping) - insert - equal # - delete - return replace, delete, insert - - -def f(a, b): - return cer(*token_mapping(*mapping(a, b))) - - -def raw(tokens_gt, tokens_dt): - arr1 = deepcopy(tokens_gt) - arr2 = deepcopy(tokens_dt) - operations = Levenshtein.editops(arr1, arr2) - insert = 0 - delete = 0 - replace = 0 - for op in operations: - if op[0] == "insert": - insert += 1 - if op[0] == "delete": - delete += 1 - if op[0] == "replace": - replace += 1 - return replace, delete, insert - - -def g(a, b): - return raw(*mapping(a, b)) - - -def check(a, b): - ff = f(a, b) - gg = g(a, b) - if ff != gg: - print(ff, gg) - return ff == gg - - -def random_string(length): - letters = string.ascii_lowercase - return "".join(random.choice(letters) for i in range(length)) - - -def test(): - for _ in range(10000): - a = random_string(30) - b = random_string(30) - if not check(a, b): - print(a, b) - break - - -test()