From 80c88f7a2918b192e16857149c0b8b89ccbc82c2 Mon Sep 17 00:00:00 2001 From: JarbasAi Date: Thu, 28 May 2026 21:10:19 +0100 Subject: [PATCH 1/2] chore: drop ovos- prefix from all spec filenames MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Standardize to .md / -.md: ovos-intent-{1,2,3,4}.md → intent-{1,2,3,4}.md ovos-msg-1.md → msg-1.md ovos-pipeline-1.md → pipeline-1.md ovos-session-{1,2}.md → session-{1,2}.md ovos-stop-1.md → stop-1.md ovos-audio-in-1.md → audio-in.md README, APPENDIX, GLOSSARY, CHANGELOG, and appendix/ links updated. Co-Authored-By: Claude Sonnet 4.6 --- GLOSSARY.md | 40 ++++++++++++++--------------- README.md | 20 +++++++-------- ovos-audio-in-1.md => audio-in.md | 0 ovos-intent-1.md => intent-1.md | 0 ovos-intent-2.md => intent-2.md | 0 ovos-intent-3.md => intent-3.md | 0 ovos-intent-4.md => intent-4.md | 0 ovos-msg-1.md => msg-1.md | 0 ovos-pipeline-1.md => pipeline-1.md | 0 ovos-session-1.md => session-1.md | 0 ovos-session-2.md => session-2.md | 0 ovos-stop-1.md => stop-1.md | 0 12 files changed, 30 insertions(+), 30 deletions(-) rename ovos-audio-in-1.md => audio-in.md (100%) rename ovos-intent-1.md => intent-1.md (100%) rename ovos-intent-2.md => intent-2.md (100%) rename ovos-intent-3.md => intent-3.md (100%) rename ovos-intent-4.md => intent-4.md (100%) rename ovos-msg-1.md => msg-1.md (100%) rename ovos-pipeline-1.md => pipeline-1.md (100%) rename ovos-session-1.md => session-1.md (100%) rename ovos-session-2.md => session-2.md (100%) rename ovos-stop-1.md => stop-1.md (100%) diff --git a/GLOSSARY.md b/GLOSSARY.md index 00a07fce..6eebc3dc 100644 --- a/GLOSSARY.md +++ b/GLOSSARY.md @@ -16,23 +16,23 @@ open a PR adding it. | Term | Meaning | |------|---------| -| **Template** | A string in the OVOS-INTENT-1 grammar describing a set of sentences ([INTENT-1 §3](ovos-intent-1.md)). | -| **Expansion** | Resolving `(a\|b)` / `[x]` into a finite set of concrete sentences ([INTENT-1 §4](ovos-intent-1.md)). | -| **Sample / sample set** | A concrete sentence produced by expansion; the set of all of them for a template ([INTENT-1 §4](ovos-intent-1.md)). | -| **Slot** | A named placeholder `{name}` filled with a value rather than written out ([INTENT-1 §3.4, §5](ovos-intent-1.md)). | -| **Capture map** | The names→values mapping a match produces — slot names or vocabulary names as keys ([INTENT-3 §7](ovos-intent-3.md)). | -| **Resource file / role** | A skill's plain-text files: `.intent`, `.dialog`, `.entity`, `.voc`, `.blacklist` ([INTENT-2 §1](ovos-intent-2.md)). | -| **Vocabulary** | A named slot-free phrase set; the unit a keyword intent constrains over ([INTENT-3 §4.1](ovos-intent-3.md)). | -| **Occurrence** | A phrase appearing in an utterance as a contiguous whole-word subsequence ([INTENT-2 §4.3](ovos-intent-2.md), [INTENT-3 §4.1](ovos-intent-3.md)). | -| **Skill** | An app — a self-contained unit of assistant functionality ([INTENT-3 §1, §3](ovos-intent-3.md)). | -| **Skill id** | A skill's identifier, unique across the assistant ([INTENT-3 §3](ovos-intent-3.md)). | -| **Intent** | A developer-defined binding from a natural-language command to one handler ([INTENT-3 §1](ovos-intent-3.md)). | -| **Intent name / qualified name** | The intent's name, unique within its skill / the `skill_id:intent_name` pair ([INTENT-3 §3](ovos-intent-3.md)). | -| **Keyword intent / template intent** | The two definition methods — keyword constraints, or sentence templates ([INTENT-3 §2](ovos-intent-3.md)). | -| **Handler** | The code an intent triggers when its command is recognized ([INTENT-3 §1, §6](ovos-intent-3.md)). | -| **Intent engine** | A classifier + slot extractor: consumes definitions, identifies the triggered intent ([INTENT-3 §6.2](ovos-intent-3.md)). | -| **Orchestrator** | The component that coordinates intent matching and dispatch — owns the engines / pipeline plugins and routes match results to handlers ([INTENT-3 §6.1](ovos-intent-3.md)). Distinct from the messagebus (transport) and from individual engines / plugins. | -| **Registration** | Submitting an intent's definition and handler together, as one unit ([INTENT-3 §6.1](ovos-intent-3.md)). | -| **Message** | The unit of communication on the bus: a JSON object with `type`, `data`, `context` ([MSG-1 §2](ovos-msg-1.md)). | -| **Context** | The assistant-metadata object on a Message; an extensible JSON object whose keys are defined by companion specs ([MSG-1 §2.3](ovos-msg-1.md)). | -| **Session** | The per-conversation carrier in `context.session`; carries `session_id` (with `"default"` reserved for "originates from the device itself") and `lang` (the user's preferred language, distinct from any `data.lang` describing the payload's own language) ([MSG-1 §4](ovos-msg-1.md)). | +| **Template** | A string in the OVOS-INTENT-1 grammar describing a set of sentences ([INTENT-1 §3](intent-1.md)). | +| **Expansion** | Resolving `(a\|b)` / `[x]` into a finite set of concrete sentences ([INTENT-1 §4](intent-1.md)). | +| **Sample / sample set** | A concrete sentence produced by expansion; the set of all of them for a template ([INTENT-1 §4](intent-1.md)). | +| **Slot** | A named placeholder `{name}` filled with a value rather than written out ([INTENT-1 §3.4, §5](intent-1.md)). | +| **Capture map** | The names→values mapping a match produces — slot names or vocabulary names as keys ([INTENT-3 §7](intent-3.md)). | +| **Resource file / role** | A skill's plain-text files: `.intent`, `.dialog`, `.entity`, `.voc`, `.blacklist` ([INTENT-2 §1](intent-2.md)). | +| **Vocabulary** | A named slot-free phrase set; the unit a keyword intent constrains over ([INTENT-3 §4.1](intent-3.md)). | +| **Occurrence** | A phrase appearing in an utterance as a contiguous whole-word subsequence ([INTENT-2 §4.3](intent-2.md), [INTENT-3 §4.1](intent-3.md)). | +| **Skill** | An app — a self-contained unit of assistant functionality ([INTENT-3 §1, §3](intent-3.md)). | +| **Skill id** | A skill's identifier, unique across the assistant ([INTENT-3 §3](intent-3.md)). | +| **Intent** | A developer-defined binding from a natural-language command to one handler ([INTENT-3 §1](intent-3.md)). | +| **Intent name / qualified name** | The intent's name, unique within its skill / the `skill_id:intent_name` pair ([INTENT-3 §3](intent-3.md)). | +| **Keyword intent / template intent** | The two definition methods — keyword constraints, or sentence templates ([INTENT-3 §2](intent-3.md)). | +| **Handler** | The code an intent triggers when its command is recognized ([INTENT-3 §1, §6](intent-3.md)). | +| **Intent engine** | A classifier + slot extractor: consumes definitions, identifies the triggered intent ([INTENT-3 §6.2](intent-3.md)). | +| **Orchestrator** | The component that coordinates intent matching and dispatch — owns the engines / pipeline plugins and routes match results to handlers ([INTENT-3 §6.1](intent-3.md)). Distinct from the messagebus (transport) and from individual engines / plugins. | +| **Registration** | Submitting an intent's definition and handler together, as one unit ([INTENT-3 §6.1](intent-3.md)). | +| **Message** | The unit of communication on the bus: a JSON object with `type`, `data`, `context` ([MSG-1 §2](msg-1.md)). | +| **Context** | The assistant-metadata object on a Message; an extensible JSON object whose keys are defined by companion specs ([MSG-1 §2.3](msg-1.md)). | +| **Session** | The per-conversation carrier in `context.session`; carries `session_id` (with `"default"` reserved for "originates from the device itself") and `lang` (the user's preferred language, distinct from any `data.lang` describing the payload's own language) ([MSG-1 §4](msg-1.md)). | diff --git a/README.md b/README.md index 3898b643..2aaa1e44 100644 --- a/README.md +++ b/README.md @@ -91,29 +91,29 @@ below). Adoption is voluntary; conformance, once adopted, is not. | ID | Document | Version | Status | |----|----------|---------|--------| -| OVOS-INTENT-1 | [Sentence Template Grammar](ovos-intent-1.md) | 2 | Draft | -| OVOS-INTENT-2 | [Locale Resource Formats](ovos-intent-2.md) | 2 | Draft · [v3 in review (PR #4)](https://github.com/OpenVoiceOS/architecture/pull/4) | -| OVOS-INTENT-3 | [Intent Definition](ovos-intent-3.md) | 1 | Draft | -| OVOS-INTENT-4 | [Intent and Entity Registration](ovos-intent-4.md) | 2 | [Draft — in review (PR #9)](https://github.com/OpenVoiceOS/architecture/pull/9) | +| OVOS-INTENT-1 | [Sentence Template Grammar](intent-1.md) | 2 | Draft | +| OVOS-INTENT-2 | [Locale Resource Formats](intent-2.md) | 2 | Draft · [v3 in review (PR #4)](https://github.com/OpenVoiceOS/architecture/pull/4) | +| OVOS-INTENT-3 | [Intent Definition](intent-3.md) | 1 | Draft | +| OVOS-INTENT-4 | [Intent and Entity Registration](intent-4.md) | 2 | [Draft — in review (PR #9)](https://github.com/OpenVoiceOS/architecture/pull/9) | ### Bus stack — how components talk | ID | Document | Version | Status | |----|----------|---------|--------| -| OVOS-MSG-1 | [Bus Message](ovos-msg-1.md) | 2 | Draft | -| OVOS-SESSION-1 | [Session Carrier Wire Shape](ovos-session-1.md) | 1 | Draft | -| OVOS-SESSION-2 | [Session Lifecycle and State Ownership](ovos-session-2.md) | 1 | Draft | +| OVOS-MSG-1 | [Bus Message](msg-1.md) | 2 | Draft | +| OVOS-SESSION-1 | [Session Carrier Wire Shape](session-1.md) | 1 | Draft | +| OVOS-SESSION-2 | [Session Lifecycle and State Ownership](session-2.md) | 1 | Draft | ### Orchestrator stack — what processes utterances | ID | Document | Version | Status | |----|----------|---------|--------| -| OVOS-PIPELINE-1 | [Utterance Lifecycle and Pipeline](ovos-pipeline-1.md) | 2 | Draft | +| OVOS-PIPELINE-1 | [Utterance Lifecycle and Pipeline](pipeline-1.md) | 2 | Draft | | OVOS-TRANSFORM-1 | [Transformer Plugins](transformer.md) | 1 | [Draft — in review (PR #20)](https://github.com/OpenVoiceOS/architecture/pull/20) | | OVOS-CONTEXT-1 | [Intent Context](intent-context.md) | 1 | [Draft — in review (PR #18)](https://github.com/OpenVoiceOS/architecture/pull/18) | | OVOS-CONVERSE-1 | [Active Handlers and Interactive Response](converse.md) | 1 | [Draft — in review (PR #25)](https://github.com/OpenVoiceOS/architecture/pull/25) | -| OVOS-STOP-1 | [Stop Pipeline Plugin](ovos-stop-1.md) | 1 | [Draft — in review (PR #33)](https://github.com/OpenVoiceOS/architecture/pull/33) | -| OVOS-AUDIO-IN-1 | [Audio Input Service](ovos-audio-in-1.md) | 1 | Draft | +| OVOS-STOP-1 | [Stop Pipeline Plugin](stop-1.md) | 1 | [Draft — in review (PR #33)](https://github.com/OpenVoiceOS/architecture/pull/33) | +| OVOS-AUDIO-IN-1 | [Audio Input Service](audio-in.md) | 1 | Draft | Each spec carries its own scope statement, design rationale, and conformance section in its header. Open the document for the full diff --git a/ovos-audio-in-1.md b/audio-in.md similarity index 100% rename from ovos-audio-in-1.md rename to audio-in.md diff --git a/ovos-intent-1.md b/intent-1.md similarity index 100% rename from ovos-intent-1.md rename to intent-1.md diff --git a/ovos-intent-2.md b/intent-2.md similarity index 100% rename from ovos-intent-2.md rename to intent-2.md diff --git a/ovos-intent-3.md b/intent-3.md similarity index 100% rename from ovos-intent-3.md rename to intent-3.md diff --git a/ovos-intent-4.md b/intent-4.md similarity index 100% rename from ovos-intent-4.md rename to intent-4.md diff --git a/ovos-msg-1.md b/msg-1.md similarity index 100% rename from ovos-msg-1.md rename to msg-1.md diff --git a/ovos-pipeline-1.md b/pipeline-1.md similarity index 100% rename from ovos-pipeline-1.md rename to pipeline-1.md diff --git a/ovos-session-1.md b/session-1.md similarity index 100% rename from ovos-session-1.md rename to session-1.md diff --git a/ovos-session-2.md b/session-2.md similarity index 100% rename from ovos-session-2.md rename to session-2.md diff --git a/ovos-stop-1.md b/stop-1.md similarity index 100% rename from ovos-stop-1.md rename to stop-1.md From 9cec494cf79723ceaf957f2077537bfb9039ca25 Mon Sep 17 00:00:00 2001 From: JarbasAi Date: Mon, 22 Jun 2026 19:08:27 +0100 Subject: [PATCH 2/2] docs: drop the ovos- filename prefix; refresh the spec index and versioning policy MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Rename the ten on-dev spec files from ovos-.md to .md; the OVOS- spec identifiers are unchanged. README and GLOSSARY links updated. - README — rebuild the spec index: the Version column now carries the V0/V1/V2 compatibility class, list every spec with its unprefixed link, and group the I/O surfaces (audio-in, audio-out, gui) into their own stack. - Stamp the compatibility class into the headers of the on-dev specs that have no other open PR: MSG-1 = 1, STOP-1 = 2, AUDIO-IN-1 = 2. - README Contributing and the CHANGELOG preamble: the Version field is the compatibility class, not a per-revision counter; a normative PR adds a CHANGELOG entry and sets the class. Co-Authored-By: Claude Opus 4.8 (1M context) --- CHANGELOG.md | 10 ++++++---- README.md | 44 +++++++++++++++++++++++++++++--------------- VERSIONING.md | 33 +++++++++++++++++++++++++++++++++ audio-in.md | 2 +- ngi.png | Bin 12713 -> 18699 bytes stop-1.md | 2 +- 6 files changed, 70 insertions(+), 21 deletions(-) create mode 100644 VERSIONING.md diff --git a/CHANGELOG.md b/CHANGELOG.md index dcc2f408..dffd84e0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,9 +1,11 @@ # Changelog -Each entry records a versioned change to a specification in this repository. -Each specification is versioned independently, starting at version 1. Every -pull request that alters normative content bumps the affected spec's `Version` -field and adds an entry here. +Each entry records a change to a specification in this repository. Each +specification carries a `Version` field equal to its V0/V1/V2 compatibility +class (VERSIONING.md): `1` for a formalization compatible with the pre-spec +status quo, `2` once it is not backwards compatible. Entries are grouped under +the spec's current class. Every pull request that alters normative content adds +an entry here. ## OVOS-INTENT-1 — Sentence Template Grammar diff --git a/README.md b/README.md index 2aaa1e44..b8eeaa56 100644 --- a/README.md +++ b/README.md @@ -87,33 +87,48 @@ below). Adoption is voluntary; conformance, once adopted, is not. ## Specifications +The **Version** column carries the V0/V1/V2 compatibility class +([VERSIONING.md](VERSIONING.md)): `1` for a formalization compatible with the +pre-spec status quo, `2` for one that is not backwards compatible. + ### Intent stack — what a skill defines | ID | Document | Version | Status | |----|----------|---------|--------| -| OVOS-INTENT-1 | [Sentence Template Grammar](intent-1.md) | 2 | Draft | -| OVOS-INTENT-2 | [Locale Resource Formats](intent-2.md) | 2 | Draft · [v3 in review (PR #4)](https://github.com/OpenVoiceOS/architecture/pull/4) | +| OVOS-INTENT-1 | [Sentence Template Grammar](intent-1.md) | 1 | Draft | +| OVOS-INTENT-2 | [Locale Resource Formats](intent-2.md) | 1 | Draft | | OVOS-INTENT-3 | [Intent Definition](intent-3.md) | 1 | Draft | -| OVOS-INTENT-4 | [Intent and Entity Registration](intent-4.md) | 2 | [Draft — in review (PR #9)](https://github.com/OpenVoiceOS/architecture/pull/9) | +| OVOS-INTENT-4 | [Intent and Entity Registration](intent-4.md) | 2 | Draft | ### Bus stack — how components talk | ID | Document | Version | Status | |----|----------|---------|--------| -| OVOS-MSG-1 | [Bus Message](msg-1.md) | 2 | Draft | +| OVOS-MSG-1 | [Bus Message](msg-1.md) | 1 | Draft | | OVOS-SESSION-1 | [Session Carrier Wire Shape](session-1.md) | 1 | Draft | | OVOS-SESSION-2 | [Session Lifecycle and State Ownership](session-2.md) | 1 | Draft | +| OVOS-BRIDGE-1 | [Bus Bridge and Opaque Relay](bridge-1.md) | 2 | Draft | ### Orchestrator stack — what processes utterances | ID | Document | Version | Status | |----|----------|---------|--------| | OVOS-PIPELINE-1 | [Utterance Lifecycle and Pipeline](pipeline-1.md) | 2 | Draft | -| OVOS-TRANSFORM-1 | [Transformer Plugins](transformer.md) | 1 | [Draft — in review (PR #20)](https://github.com/OpenVoiceOS/architecture/pull/20) | -| OVOS-CONTEXT-1 | [Intent Context](intent-context.md) | 1 | [Draft — in review (PR #18)](https://github.com/OpenVoiceOS/architecture/pull/18) | -| OVOS-CONVERSE-1 | [Active Handlers and Interactive Response](converse.md) | 1 | [Draft — in review (PR #25)](https://github.com/OpenVoiceOS/architecture/pull/25) | -| OVOS-STOP-1 | [Stop Pipeline Plugin](stop-1.md) | 1 | [Draft — in review (PR #33)](https://github.com/OpenVoiceOS/architecture/pull/33) | -| OVOS-AUDIO-IN-1 | [Audio Input Service](audio-in.md) | 1 | Draft | +| OVOS-TRANSFORM-1 | [Transformer Plugins](transformer.md) | 1 | Draft | +| OVOS-CONTEXT-1 | [Intent Context](intent-context.md) | 2 | Draft | +| OVOS-CONVERSE-1 | [Active Handlers and Interactive Response](converse.md) | 2 | Draft | +| OVOS-STOP-1 | [Stop Pipeline Plugin](stop-1.md) | 2 | Draft | +| OVOS-PERSONA-1 | [Persona Pipeline Plugin](persona.md) | 2 | Draft | +| OVOS-FALLBACK-1 | [Fallback Pipeline Plugin](fallback.md) | 2 | Draft | +| OVOS-COMMON-QUERY-1 | [Common Query Pipeline Plugin](common-query.md) | 2 | Draft | + +### I/O stack — input and output surfaces + +| ID | Document | Version | Status | +|----|----------|---------|--------| +| OVOS-AUDIO-IN-1 | [Audio Input Service](audio-in.md) | 2 | Draft | +| OVOS-AUDIO-1 | [Audio Output Service](audio-out.md) | 2 | Draft | +| OVOS-GUI-1 | [GUI Display Subsystem](gui-1.md) | 1 | Draft | Each spec carries its own scope statement, design rationale, and conformance section in its header. Open the document for the full @@ -157,12 +172,11 @@ request, never committed directly. Each PR that alters normative content **MUST**: -- bump the spec's `Version` field in its header; -- add a corresponding entry to [CHANGELOG.md](CHANGELOG.md). - -A version identifies an exact, citable state of a document, so -implementations and conformance results can name the version they -target. +- add a corresponding entry to [CHANGELOG.md](CHANGELOG.md); +- set the spec's `Version` field to its V0/V1/V2 compatibility class + (`1` for a backwards-compatible formalization, `2` once any change makes + the spec incompatible with the pre-spec status quo). The field is the + compatibility class, not a per-revision counter (VERSIONING.md). PRs that touch only the non-normative material — [APPENDIX.md](APPENDIX.md) and [appendix/](appendix/) files, diff --git a/VERSIONING.md b/VERSIONING.md new file mode 100644 index 00000000..8906efe2 --- /dev/null +++ b/VERSIONING.md @@ -0,0 +1,33 @@ +# Spec versioning policy + +Version numbers in this repository carry compatibility semantics anchored to +the pre-specification behavior of the OVOS stack: + +| Version | Meaning | +| --- | --- | +| **V0** | The de facto, undocumented status quo — the behavior the stack ships before a subsystem is formalized. V0 is never written down as a spec; it is the reference point. | +| **V1** | A formalization of behavior that is **compatible with V0**. A V0 component keeps working against a V1 implementation, even if degraded (missing optional fields, reduced guarantees, legacy namespaces honored). | +| **V2** | Behavior that is **not backwards compatible** with V0. Adopting it requires coordinated migration (e.g. the `legacy_namespace` configuration gate). | + +Until launch day, every spec in this repository MUST be classified as V1 or +V2. The classification is part of the spec header. Rules of thumb: + +- A spec that documents existing message flows, adds optional fields, or + introduces parallel namespaces while the legacy ones keep working → **V1**. +- A spec that renames or removes message types, changes payload semantics, or + requires consumers to change before producers (or vice versa) → **V2**. +- A single spec MAY contain V1 sections and V2 sections only if the V2 parts + are explicitly gated (configuration flag) and the ungated behavior is V1. + +Within a class, editorial revisions bump the spec's own revision number in +its header; compatibility class changes (V1 → V2) are a new spec version, not +a revision. + +## The 1.0 definition + +The compatibility classes define the project roadmap. The stack starts at V0 +(the undocumented status quo — beta). Each subsystem is formalized as V1, then +migrated to V2 where the spec demands incompatible change. **OVOS is fully +spec compliant when every subsystem operates on V2 — that state is the +"breakthrough" in "from beta to breakthrough", and it is the 1.0 release +criterion.** diff --git a/audio-in.md b/audio-in.md index 71525f0b..4cdd89b0 100644 --- a/audio-in.md +++ b/audio-in.md @@ -1,6 +1,6 @@ # Audio Input Service Specification -**Spec ID:** OVOS-AUDIO-IN-1 · **Version:** 1 · **Status:** Draft +**Spec ID:** OVOS-AUDIO-IN-1 · **Version:** 2 · **Status:** Draft This specification defines the **audio input service** — the component that acquires audio, runs the pre-STT transformer chain, transcribes diff --git a/ngi.png b/ngi.png index 13f4e9cd190a658243763a0242cfd41b58a530f4..bfd401afd74bd0e512c332577c152264fe231b88 100644 GIT binary patch literal 18699 zcmZ^K1yCG8yY1qOFYfNa-Q9x|EVu-BcXvw&?oJ2@5V(;|-_Tdp=!oyIP_DJ0)@3W5XL1P#mc+R*b zietq@E(*b5ixg^mE$!t7>r9f&zYDM&zo@NcU|@&gLznt^HahN-cM6#Qtdli;GWg?L z!l*YGu{v>e4@H*4{Bf`2%o{;Gks6WoKP}ftC}b)Zg#Mp4u^5Dh<-bS?q)-+Mtn zRlEEC(_sGhIQ&L9^naa#^nZ_Yf>^Q7|Eq!i=XfrZRFQD-X8ycq;dg6~W@|xh1 zHbTMYu~kZK=BALQDM_G7`UH z!g18foD4D6Kd1alEgXJ9p&;XnDD+T!ii&m=_NXY~r;0}DKSOZ`4$;|0#{5;h6;1lED1yupoWYjgZ}f5FB2*^|YG9!ar>%;^sw0CSUv6b% z_6R?XBEk8$dHn38!x3J#ShnSm2RSGP;w2T$x6N8=`m%KL`;#sEj#yWF$M|3TO@zK5 zE|l>-5E7#5-Q0RoTWK9Bk^FjMZ1&EzxyhJMH^^2=&$vsLLWC0o&uiN%u-L0ge9-Q^ z@DE<#1U-blxWLP;hdm7r8We>*I#|6&CJh+wvMr$`UZ=3@n-yzTq@~pUF{7CM-UPXL z?<;>$gZ^~iE+6%z(L_@=NNl;0?E8?eh3z{wRSVZ}Q9gKfKAAvG7u6q@t#!@JFs>OT zl{`r{9@{@|_X-yg7V4rNELKg>d!#KQ=^6fA-A>aKv`PiBEe(VY$!C3Y zIyfro@FOK{o|)6Odl5})GNwmJwb!E^>z*rT&OiD3BLpL~38dc$N9}1JtSh@ve0h$N z#!iQwJ_@h@{V7w6lq@+kZn2%Dsq*{x?k4+{^Cio?f|{C1lRqupcAo~<6d1c^&#BrP zm5Mr0g@haij86;5VtAHA3d)-qLc)j|;F2#Hzcbe)*Pc!}Rjb(z6C)Y1fMsawcai*k zyaMFo_zUvOh4E~JU#jd*@8fykl{E;7h-ys-kf>>Cx0+TQ`r6!&5>itmDk_-t+uWkv znZAjP6(izQ0?vZS%WD-Wi6mIB0Zy3<26zORBx0ci#9KOV?co+1WH#O95EEn>A)!DyRxw*L;7L;>^qL=C|w-;;8()pYzPi`P*(NULq z%CTmuOCI14MUG@Al}?PM%DMfvZ+t9M;;H`9o>*Mgqo+q*crpNORhVh5cPaw z3;L?mYEK{s(L(lX_tt}9Qaf5|DuI1hXOO3q;r_*L*9;>Lycjp8Izb7mwrl@EMpc9G z*i2`gOm8f}WN~$V9OR^K-A=>yEHJTlffRG-TNf zHM1$GFL>uHCB}HbO-?#^l0a~B-j|d_7!Ur@^-B{7#$6hkp!a!Kj21DnXEvU8j(s16 z#9;x~>wO5MI2}!N36{Q?{X9`dT#QW?%$5F_Kh>Nss|Q!o1|D9Eoy=&9puxuogFs!% zC&>2#QE#e*Awp)omkFPL3itfHB})wlNp2b?UK}xBlpF(Oh4M~Uc*OQLIXPK%cJnhm zJ-snDQZc2YE-wG!w zMgTHY0^kVZEaot{eq4(6{!MJ^9-+cy*d*FuKr9%oE_uR#r`z14n3-)A0-8Ii~?bIsCqdWH{fkzt+|X4@66?mQH9beArT8#6r41FA!S5 zO?|TTHRI#4hsqKIflNC2)3dHA(6B3E5MfS!&t)`q8={_`WJFbjEs$e-sSaX5Oci6i zP;@2f4pV&TZ8yuAArf)-33?DbFBob{GTviqsK5uQ`w==y3NPmJe~XHu=uv?F2RizNu;Cq$Ki z{}a@#^yXIF93E-uwy`0Ax51sENnQgf{v~Fy8XLC;J1&HAY;c??c~*o7+f*DTiUI|e zVTF>-1&ha^j4C~X?r-Ug$J z$0E8oc!NqwD(j-boRh>B*~?2N2m=E!>^PVKR zp3e_aC6CbfiyG)n-0L?3!Q;c5dYvICBELM>M}_dbIlG;);(9rsatiPAyV(v;6%KEI z(gRJNy+}*!EsNAnB8T;~(uJsQ1jj9kQuh1q;{4H5afV3v@8yfPe))J$DIXQav3G?1 z``{MOxS4rl)0x)+4@uENxKp4J?ZJIT--egnk2?&S9W!Ka#&CvE<5%@cgmvxRq+!zU zPkc@rpx5(A(TzTIQ7K19R*)FwSL2iAMz5Ef1q^I#Dcgl9?da8MUgyqR#_u=BYw&X< z-eMlhE!yLW<;yKN^`E@vGC|uT$(4ubvW{gQwQ7=z-+rKvZ ztn93$6cjiWX*r=`V7_Li#+Z+2lXEk>M->Tv`?k%OsS&D1fe1;5G!d`mZh{`+y0&%= z=xvq}OWNT7WWwW*`FMH5QuTVio2GR1$edorfKP&_8EaRYZzE$aS5Q3?G-k7=!13)< z!3}llDw9Lhi*{Q7jrKG}^ps%qhAPcRBi^ibaQve;dKlem2gw>t8&OUARhSeNh?6Z6 zVo^)mYlCaCyhXALXZ-!e%=lixhlk*xAJs3$uo50Buuv4e4U3`_i-NWqw^|hOBoJL< zu#EoQTr^$Ck25TEbnVqlfeh-g`>nquXmHTAsuA)SKQM^ch%f>O5~BVl$Ukpv6Ih>Y zI|`cRPtSf>4u2@#g*-7ny>E1n@1(|pD5 zG2yxCg0J#S+2=z2#KnQMkB^TDBHkQ|GB%$h+fNN6MLX^(mGcC`_wu}PH8nNSo<7z% zK^ZYuS@IFsTji*O1|pGSx-6A3avtw-sg?C$?5N z?}};}*EiDE8ph&&moBm;$q+O9A|S*XiC0(6S-$}JPDS=JVc~Oz=33*(8>m>gi;&^%6Z3wi|wuJ`w-R%xj@2 z*j%(HQJn@fAk*$^m^i3qC7*UgOgorn%V<RsYXrtPP6&0&=a*XvM|s|wZ}qhLLJrb48v?4UaPo-tw$;B4m*46?9|5zK{`{_P z=q18=yieNln81U~3_5i~@b>Oi@}cR9;GCRK_chAE5VW@pUBxC%-jFPfz~ugse1B%H zsLB<6*>^l&R@?F>B1qF#LX7D;qDu(Qr1J`LoP!8GIwdNfD5ZC1J;ai!KX1kTjXK)~ zxm#_7Lw{BP<}!wnZ-ERC<5-pcyOl#<^w#^*7jQUqsYFkBxd0bqJIQC;Fn%>W!eq zf6x+qO*m9m%^&@Rs`*+8UvV~!?1|+K=OWk@gN$oo=V52TzAugLjJVDtD0)8E^rt5q zQCH>#j(V?lTggOUB-&>C+w)MPcSFNQ!PD80ilC>oR$9=3$FPg`fsu7d~_ z{%>Bd>@vY(6sXd-Ep!mPbX1jS)@7ezr>5Nx`gZqUwLE2C9sfCDwb#(oQjuJYKHd5t zNZUZbrv{Vv$9+}I_ySnHWFhJwLfSs(F>GU^nIg3`puyXVyDY*$5L^7afD*U+AyeC! zlKUk~9D)W%r3dxC$Wc1r#P&Rej$+u6;S;IJB!R%xqC5DcV-Eoi8h&$R=gvkf$OZfL zqjgxj|8Nr-RDQ-Oadu)$6fy-VlXPQI+LuszGwKVTocrXD#m#_kV3 ziJ%!VN&hHE7>XILb-IL&eDQPMFV-YaXBR=^9e*Dg>2;n?4VBGU-P5!>GfAX$Z?(=Y z6gYBop32|(+Lq}QtE#H{Mg}0zpuZ>>xa9l%!+BOP{@v~m(E+Su{85i6*_h5^$@ zvWyQB^FD&|^S;!sK+w`R=BXPJ4vxn7@$rcxos0ha8~W$u&fvi+0Ax}F zr&W8;iOzrkuiaM5f7Pki@MCx~O9`ft{{zihz!fuo{Pm6B#lxQ0-&)zq8(Aduuh1jv zMlwF51_?1wXGab2ILg|AAqL?SQ(QtIrzRi9s=RC7U&8w`dE6v)z?5<7dPm(!2_@I3 zxzI;?sq_~|aRd05NT=wX?R$St>;Btkx{ITS*7-Vu3v`NAPb9a99>$=tRt0NlJG%`# zCiw?Wd$fQ{d|0p6JzWbfX9lJ-HrY&!JI`yY@~M(e6um#7A5B3psf#eT{1`ul%^(L| z=^w~$hW&q4`_Bm=oXVul%7wpkKgieW-d$Tay9|+;7GaPEKZT`h=<6pgx*P# zn-WadQZl0kUZzvlOe#-wMYhE~#XXiojwU~2J#koBS^ZwdcvfAGDwAQ>7ADY%NWEdJ zJ09T8+H-SBi3L6E7Pkc@sFSxgv;EUk?xQrxL64!z=3jiF??zw0PT9{`&2PGFdkl(X zh={_1f%{CqVeq%;g)f#~Q)H|Lpal$7L`c+aUa&JoY=x+z(Uc)+PqIKNS(Ub-8Ob15 zw}-XwpAu#WQt>a+H`3xQvBO1d9D##OoDTa9(yUj^5J!ZbP1}n4GfJc*!?P~38U^$* zntUuh0-8oH6FR>oI5!vboF?%M{0|D~&xZ4tIHT0O&5oX~`T6*zBjr$_`a~=?I`iX~ zN-!8Y!0=_gz+X3~uWj!g{MBhiCi~K+UTQAHzLBm)Rnt?cH4;tlA6!*xP5>Kp?5sjQ zYl&$qn4=tdveLX=l4jUD!rB$*|8zU0v0WgN^!xEqc+UMo+Pf z+KjTUH<0!15C%mrMStNq6Mt!@YD3Uwv_rr(@m*~FU93xsIB@KoMUD?9aCrJF_&2%B zBeGDHT&BhG^NfW>J?Vpcb*~g5ezlqv23TAdD@v^q?piK<9JaEjti8qp-X4m%aI@Rb z$DNzrVcBH>F0`avxFf1$Lyx5K>>*5jJ7eBCbL~t+FyWHKUq5QEiY#arZ zc>x~Clfc&=q(96gKE1&xRLhL)Lpe8c*cIdhFneVjIc$2$x$Qj9)9p!Li}QAk&D^`^ zP4vL-s|nFB1F?8!hqGn$OvP)ALkK$?!N&%1ku`8RwFp2dTe~-%cm8nE2nuS-#mp{y z4b#%5MeOe5f5JFExp(-DaUt${(Y^X6-Ve#Vkvky5?)gMtq2DoVopY4RV$S4fYfCi0 zIG#@EA2}mnCn5f&DML$Z!8<~&y>}p;i^qwlD5A9RW-{uuXAUV%(r&WO{~p#yX#hy@ z@4jq{>2ABGjaN z#P+>ka^It_|J&?PCtG# zk3Iku`uq3q#%$RKIYq^W)FC*F?b>juf|qQXE9Y7r-<&q;JbPlO z2VH0j@>`!M%?!dLU1JTQC_>U?AxdD|69&R5;TFPL;qU2o$Q1}#jdi|J$UiX*4l$E? z9Nn$-x~*S90~;)=o2xkKu+hU!Z#9HE%c)CkDjdtWHN}xl;|cPd8#a@as!7rxBb!FE zdYVA6!7T3VFifXXOuw(h7+4P{e zOI!@R`Obyafx@Cg=kVs{rd5bmTS|hV6eW?Aa<`PXGWhgt0+-WNw#TuyXroy&vvhtE zHK#VxowQ3%XZ5e$NCaU~H^GO(K!lVwV&*^I^Pyw6R@>0l9hdla2aF0X%T;4|NJ%7Dmz;0e2aC*G9#>Nv=`P^W;z~bgM z`NtmcfU)YYL3moTCf>`8=P7D1dJu9pej5PkawX85zDis~&uD7mS@pmB0|tY;uMcLv zW@JR?=aUP)-fz!O{=R+ye-#d(s{E<961M!gfaW9N$fiQ8=#sNh*x)2LrK`K_WT7o0 z%b-)T!Am3E=8bl9pZ$k4Z|AR5cc=Q}hx=Fp{=cUGv*RAx4g?^-ifbmew+F1fOW-y+(xi z4IC8};)0Dg;$Kh>yz1kByC` zvzx&;IsAD)W%_;2#%{R*k)NNxBBbZKx;>&6dzxFGDACITL)w0%ECie*Rl93p3BO&;DnepF+ZHG$O-~t_F`% z#VD|xkFWRqZnu03`4RU%RKBKN!JY=XLY@Tk{T%MoKCGZt(6v2AI3~ILQoF*^>HMO66PP@Nu zE@JG$H1E#q!?!3PO4Hf@y;6O;RiuQf+6YLb)lD zRB-P}D?+Q``)4Y-uTZT?>93%TlZ>E>Fm30Gs>}rOXicO;n^zOU&E0%=IOrDbdLj$)$3EBo1>}dS z>jhy`vw@ut!{%OA);u&VQ;pp<+S?4bCDLt2^Bn6~6WRP&(7_;!`t9>VB7v}bcFKdfKV0-;{CFz|UPV58e1r+i>^?btW>%U#g z`(aFt>rKUQ?GW~`%ZHyNWw|bm%?t2t>sCvOnfAd7XDRM3vm7BlqT=<;HGhhlPB|Sg zkObO%8OpCyS%zBSiFbtaPYLl)KulJseaP}>%t@y99<)uz!ZE|UJjB0P2MZZKcZ|bA zL*KFF#uudx*X%u;Ut2X;Y2N7kA!K&vz%r|K8T@NI+&$S_6CMJphRsw}UH68M3QX7H z6%r!$T=S*_UcAGaiFhJj2__4kA$8yd8y-w%wP73z$6j6A zQxOu%JK$~s>HZkWOLqu~HL_hC3ymq+r-3e{*2sF*CD`YkvR`pejGxoqa0Sfh>YIW_ z2<`2Kx()PdBexa-H zP9-D?_Qe~M$WuoDDkjFMWgY@b5OyZEpry;NYqe)nD3pr=IkHmAMo2iL65uX#+7*xk zRT%RR1E7vfD9&K7`}0jH%jx0LJe$AoShvOJ#zyE0#kE`y08iSKeL&giK^ZXe&bd+w zcQpO*<1&65`b-)3mP{(X1DnrEw5N9tiUr|NV%;_46hvw-y-}#?aJ7?3xP-06-n=^y zCpwoehlxFjolmm0-Lz@06n6L#smb!))Jx`wjBj9cu(aO%CIUDrdb#p zbu34_PhHV#Z2?54}y;U=< z4Qd&!%Y~dQk@nRb)dJvZ=&ztq%&Om46^kj#J=@BHZUdqKHrLEEi5R2VrFLE zKR%ZF_>q9r_m~~5qc4j>%k46Z1pp<=+x295?bo!%yx#RAXWx6YO z`3=Fbeqwq%oHe+g$Utze@WWEp2nfPTA=_}9ldT}&sHUx$KOpYCbeY3tBhg8*Uk5}# z^-p-lX*yBlppL9AJG&lkuWTmAy<9XAQAQ|#h zCy%foiH@Pvk#QYb5qboyUad(9iyt>RUU%KZieCaj+aY)ow1`3K2B82BkpJ@rWM*U{ zQYIJwb86EI@J41vQwj|(q4J?gn%6Lu1xL{HivE@j&DQse*2s$*`}+7o+53kl$c=A7 z)q7rH4+7|#!pRSMc2I4zGys)$S`+=nk`kL#ZGUcIh7w1hO@=-5(U`*)0o_}>c0%Sr z*DPiXlw}`0M?S5!MINM@*BXWTv!}y%;wrX>8Snd5Qos;?hofar{dWsC6t|SCMx#wD z{uhOhw1{E=9zibFt%AGVkY_O`{SS%NJZVk71mpvMcXmu}?b;%H>&!=-p6{LKC;Oz8 zL^&hQ;*p6n8OK;tR=x$sh_U*x5f*)n{CVklVZ9db^`?r}Dbn~^lU!9!vese#PI<;U z@=4i)aA_Jhr#8#=4?FT^W>a^#!+#Q*O`Qj`{i(Jom`I9mVzOk-#r%jA&HVGYZ2CnB zY=s})-Q+$r#%OsgLo3_M?`1+M5LB|rg*}W)>uJoWBYZP5rkrcc{@wt*o|`MQt-k)kQ zCvcaWP}2rqk#SEy^Nfg;zVWRU>r+e*u3zMVs#}>#DvW~T@gNX33Otj<20kHA778GC z{PuoR3sBf(j(7dY_ReM%CBAcDr&YZd1D#VfiE|}H{7xQo6M*mWys%gy=P1a{(gr#L z2Q+|nhSgPPs#kH|ZiP}Qu!%kp08A6KnT0rQLxjU~a@SW6W)ljAYk^NRC~d;S)KKXe zHKd$a^P$vZ067;OI`C#ZtFa&Nf4{%~UZ{4TE95xwuDH0EoF-hax452Lk04LCRI1Yb z(3d&oJq0$B^%}YhK{H5&Bh|+as_+wvwIpIlQ0Zt=fj+2KRR$S{dDBXW0pquLP(BI1 zdhND8Y-gR-vrhmETFNt)?8q9BFC4g40CJ+bA;}{27g3EX;X7 z>oZBecf+S0s1b#=xq;6H3R!bkqFDi9>|FIYWOQ*K2`(v#Tg&60g-ElW^v-`~qtCy7 z=yF}r5a!cS4LJuHjmnz@d_Ooo={uOV;c|29`NTsdMj@+j1(`ObibyV)#(+H-T>R#q zQ+lyh(8`vX?y7*`Lt_dcd!PC%LRUkV3}i~mhN5Evx21Lv8txHrv8Pr4&9m(W5i+1Q zsJ#r_-0QU@=)mpur`x^=FXg9ss4ZOd(A@`t9}J$f_~)Y%DApF+Ho# zu0a3K*T}=$qU4%7MDZ)g&cv8kS&KJbW*hthEhH)dvngbz69jWmlXaK>^MqWtJr+<_ ziaBaX(q2TaQi0W8XCP#Jco*XQ4$f3|XUvkmDg-`m%=>d_0jK>EDvI%)p*L4PjWzYg z?3rz!KNg*Td~GCt7gmA-`%OwTlwoRu@3^||MDTBlsDtaB{X(fyAV3`S&+hLWb+CC5inDqP&2G5n*$~w3U4nSDErQkwtPYwMV z?(mt9SwV6%rqAyz;nmF!BCUbyOJprAa@^1--K13`#As|p;yw1&-0|%PxWzo9unP=| z`n7F*Y>NPb#<0Jri#NWJm~z_l5EjX%-K! zDDTI#4Be}xx6#{bN(3HM%g-qsMBijokN_gYs-R_%yx!!GN^$=^2dM{E*JY7WOBRd% zu8{gURtd+$T908G2Pk7eB8m7_b=L_cv@ESIO){q51h34=iOxQR85Qzfj?6h&45*qr z^3V(FOVPKfBx;zba5kYj*)kRRwAEtsCa@)J*(R6WudlaW3?d8W55DF?;-x>(k}nPs z<#hP-=^2K0?6I1Sj!{ZU9%im_=29;ENIAX`VD0`gT>TUgDh7#(biJioTyg&X-ghh1#c4g8B<^tMWgswe{Fm_M z!axMsc{NOZ{xlccxZ^=_8sFVOpQ|**A^_vGx7(l@eB9g;@GQTCYq)cIgSHG|9tW7! zyUNH~&JgSww!q%fsB67XAB7r4=i?%~!)k6I$RtKI*4OsO>~Jlnf>n*ofBZ42gTwOm zWL6_KR868a$ro$vNKGZ7$uSTqt`dxu-&4N2J-z?*Iku#6#eJ6&@UnG@TeS{7ieXPr z64cn_i?YE-oU|qYPL@7u@$9t~GQ$si3Na%cd{rp1I@I{cGt4kH?C{sHu&wqmp7z;o z`r-af*cpnpo?xW3#8hb>8}^Bw91{t0dKRm<3v#68*U%D(Qus< z(7>RRazlW~$k;ZmgpN-u#lD(Jgy8HCwUSlE$=x?0nv7iRhiq3cBu7e^oO8#@aFRcK`hHs-z$f)5&^3{7ZToJv-31t)-*> zI;{@VK20NQ#upU!yP|KZ4i(T}7?6RRc+m0v63KMF=&r{-w=MA9?EnfdpV2dR(T5Mz z@at&dmMD*eG9$R3bH!?IT%ss*-~Fv8T8$$IoKY@75hYh)Jv%Bn= zkEX0@pH^uA6+n*>g=gDHfFTF$1APs!%WWmDQM3yT{BV0N5-vqI^l%;xaEeTFW=#q@ z85!`vNSZ3ajH1DI?_^jfM1|cSXo#?&7Z-TQXe5Y^Qb+&uSM@vG`%_l@jYRLLQr8#& z0w`C<4ZgL+aZBuCq=B4M|KcL9ds?2Ag6h_xO(34yd9xP|8xK#CHpygnGy`p$^k41z zcfr1BK#))GiedNjIyhf6*+p`}+Y0ratd9Z z6;|I}zCpC6C2VI7f7z+{uL)Cbi~XV$J(=|(uTOeu z!O@9$cTY&O5w1}gJ*NlET88k`eDthQOpJVXf@nv{UiG$olgez|C?SOyJ!dK?6pkic zL338gK#K>u#a5>D*qMKB+!@RF@qx*LrV~-y|Ar}&W~JlpAv28};}PHun-pH4gXHK# zztHh|YVqi{s}!iL!^(zW;Mx7wvTS8YK;*ODv2+ zi`6f&8~Q{0NB!qbD^Z6WPSom`8iaKc!AP8pGCl*X_yc+8C{)Ca=T@Z{@WAXneKvD- z51?xzW?>4C=Gu;^D6>*8C$1s`wap!?>|1am0uv1#6#46-R)CouKAyyYPgOMz2*t4} zoWy%j7pdM`(VEC=>jhHs{+#a#byb1DO{StRre?s&!{qA7cf^>ZE=PLvK zQ@PqwZfxqQ!oK=~gzY|*I0Q(vAsZ<{YY{}=4b32v54GW0X_K!$@ zBI6*1r*CwV)RmSZ3`k2SjO@tevITQfH~hAea&~492?@m@CPqo5R&#sccz%8%2xa?d zh>naLnb$>z0uS>(CKdyi^m9-UNY@`w(#2f5fP!?G#6M|J|6nW*Ut2TO(AMl(Ss|KY zKMwwunVC5`wWiE~6-yIGN^pDhsi>$3X2;wd;2^}d_&m%cM%uQwvB;A~CKnbW%ZK0h z_YX=GI2|i{YZ~Llc6G&7`EL_jMTQ;`pQus?9p0Xtr_fN)_=VceG{;(5RWq|?p#H~H z`n%#(^B9SQMnBCL6+f6A@o*x^=)02Xp!v7Ug~!2v)egF!6wChceW3M{kZEkggN6wg z2?OWvm*pm9{qGfK4gBA2tYu^Ch+N7LLi|bI{KKD~Ovl5dh+8!xXwC72XiO_c8-DBc zO<9;J&1>ja+4lY;cPi&i0cYC#>_53$LbxBXrczT4ZK#e;@B5@WH$85J?cG!e?^A>^ zCH|V7yQ;0IB57uc7ju+#(dX>Y#Pby@APVKYulG0B*EsD5-W?m=sOt@*Mlk=N`1 zB&F95&hBv(uo$MuQ_S^_=KdEY|3e!VIUArl6lyGX($R*$TX$uhuh2Jt`Pgd559k{4 zk4_gmN$S5%be}X=4V3RN*4Qk$G&FJOjcRFWncl>tc-fM3x$4<6YB3uHrx`vYo4t&W zD_7`tLO1_$L2l4xX2HcZ9UIoXzk7Nc(s{FTsB#}4Nn?@Topt;9vYUmr@VJ%t8ph42 zZE~t z%hq{h0rwQI_d}u_0mgthtgz&XqohK?0Oo5qOh6sJ+qEW#V`?|d2eW|i)@`1)u_*Nd z)s3^adxW51V+j=Ro;iOTp||6Dz&+gW*;a2}?u>Z7{qelmwXNRX37ihkE0D?k4lK~g zs_qItN)^C$V=@~3u}~p?yV`nxIKo(uzD!>PrLJo z?k-y&5$OZBR`thFrL&*$(~0UoUw5^5}G=VEa!@I#|4Lx+6S zGv>)k(7wRNE%ie-TJnlCyEz~%nBu`jr_Y>@??SbDVwNyQ?m$5eGua5C&f?S{doa^s&RDc?<^0|K$3JMX>ofr6w( z*H;conCE<6LbbJ7Bp~=_M8ewEeN$a78IUo(n8iL84kUP6bH@h?4e-T{jI0XT;j*9! zPtq^BxSkL$2bNX!Xnfv@aj^hRVGAYvN6m@V=xw!?`RFplDK0AcrmpLUGI^{0{obWZ z!k-uG9Z^WvvOyA`Q>z@fJluj|YrJfbrcHC&hxHP?<<2+Um%OfqIsiUD&K*dn0SO6m zBJ5x|0#*M45uk~~QL^9PKj`b;u5QQ|BR(~`y$EA>&Qf1e2K@kQ- zTZf-eU*2|kK|!3Q8JvWq0#1;Qjt)T6Hng$18GIsIE9wn^tWKdc-y>0PkY`OeVs2SC26YKdPfawn&JLT0k{jTpF6Llt(1Y+4=o?8kksS2eWrD(zy`yOU?LLS`~UpS4xnF$tU^p|^gG zO1kaSh0vKG?JMBF) z&C~f`1g#WJ(yANl+EJfo=1EU60V%eZPmOF=vbP+0BmXm8$ZP4fM%J%z$^sAvI^vHL z7;#98YXC0rVEq!U`%#=TJDCj+pN3J#510&ENp?(ws!xO!9{w6JL>l2D}0y<-Sn4RH+2z;661~m zd1=iU{^PI0lwUD{;ExyR2DLYL*Vh}hvZPQTAZ8oC6-YJ+$e4A#gnrrxWrcvrabrz5 z2uN;E4m}5Fuia)fw9RH#9NTBd`-;{f8r2Kzotcm%X!kpuk)okKyV5LKr=)IHFp67tc@71AVWxwq4p6GE-;qI<`3ZySgB%&|^mbmzjUCeSmo-fM#`t!=OXzd-hcE-3!Ft-9m|jtq{L7 zM6e7#&U{nao@7i&NC1h7?slUoenc%PWZYge`%+!aD)LbA_B!)numTJ03HS`FxFb-vx(?_PtY#KPwvv0o#4Zcq{-DmMyxFr^!ma zSj)yCVlBi`YPofz-TKt|#r>G`j{gdiEz{RIf1d>qgNaAoF+sw>B>sC-g#sok4AR{- z%`wf*xy@vKrd$gpEQ3|OJK&pK7^9DvVbBbZZt+&94?alwr~)O?*VgEU?@g;@?I)eABl=9DX zNE8c(3t{ZUg>IoV``o4~27&%X4Yfbhs5X2gFu`U~nf241NWRsPQs*Wg-$D`V3VUPkTO{TR|uC_^?mb?y9o^qtu>yKAYN=H zoB8%lvQkZw8gnyM&oP`6m)S7RoH2EKk3=wM-v1^=`}{CS+)_dUTC4IK-M6KuF5yX= zMx7Qf3{0%2GbquAeY4}mPXGS!kg|gVxrtxh6M`OFI;U#ax3|4BGgzLh?xizL=)%uz zw_GUJM7FafjtPlVNMG+>q4;MX&ED=mh9S1CD*^hspKI&sD{C*8Q`G?(pWTU$& zC=3w@x|3_ZYb@1Jni~bjL}FNRRd9NExwS*zk>No9;>t+;tnV&R)6WM|T@UaU6B+TGr4wSCmEFU0 zKiIuF+5?Ze)_l=dIv)w~kdZe}wnK@4pu>Qbq3P_>N_@m?*WFSa5L%7*cBw5T`+wRv z_jo4vIF4_I(d0H3nq}xvsIf-8Xf?N@yk5`q{9eE3`F+2i_nSxg$auq;NAmKx+_kbE z!Juat^lIW)MntyRZ3U%BpZw)@Ny=ZoeBQtQ(IeBV)z#_4VIi^A`x-+C1HbIev}@m_ znU#?t9$h`jEbsj-!dFLGJlIF%K0T0}J$5m03BL5#YjUJLNs9e(tFEr<%JphW@L08M ziI5yQMtqT!{`j%c*I}B)P-27ud}w=kDfh*KOJcoA7=OwyY5*l5J|Mq@djmA~crSSJ zelpHbdAvduMuTCKp7rM*l0Ja-QKA4^y5$i>@fb?*_LUfw?;j5BYs@9H^%c)?FJBLG z+(y{Ibk*sMez?&Wx$fNAvto;TA673+4a3;CzfQFAc<{9r5gmxlcUuo9)-TTHuKZ;_ z-UCS^)`Vq{w5){WHZETGQ%nHH&yxq~G)T_XLYwbx@1D;b95TPd3b$zvNv*fsQo=^L z3$3~$#%nNaRBK3B=?A4o44FKM87>k9*Tr~l?lRIw>In!Jt*vbXc2ifKA=PmeT~A5@ z&~jwpR(+t^`<4iIch$IQ;mM&PF95l2-*jG&Ku`~aGaFW-?Vg`Xy)ekFxohMSl2sU) z9Ef>P)2u%6j8IBgcz2or;}ZBgsfe1ygVA|o0Nc&teP%Q}>-JX|V6jw8t@W*`@W-)M zarp>EMTfXJ^MS!Z?N!ncN%Satd}yH1b$4zH=;o#ZvY#n;!tlc?V|WpJD)ThI*lf|Q zQ|IcutPwlZ`qC?k_(E4U_6|0&(^htImvco%nIX48@?hKjE$46SVC7h4#^z6r7#}i+ zDFo}XmM;q4NqjVrBq#(_(Cv-zg$_xv6D}82#$20R7YUU`D_n)c&1fzjQ(mo^@`17x z#<68gvZynYPL|!;XMJVhXJU>Uw!alup>tgLf-w}%J{oNH0o+A^g!(g5ik%Hwq?t6TrYIqy z4mC!P2(hWhsf9z^{K>d}*cBMfvrz`1^R|yrg0SWzbmp`2LVbBC*6#N;>@*XlKAHxe z1U^1A(Oj)W`4M|9C+0wV)n{MBL(iw(D*$^XdSB5F;_zuDm*6$K1V)MetIe~mNaPgE<@eyuPsP~?oFbM{U8W=LnzxjyQQ;ssUd z_N3?nwPr;rI+)82nWh`m3UnH(C6;L8UVQiuFN>uyQY#(|$cviyD0*j~HlLc+C zI{_XN1x%PZ{M>X~$kBIf8#Sn_qCFpJW11jfa;}SRvZzp;pf`#}-iI&=hZ80`#2V(o zoO>dK0w>5r8lg~Esuh#1fv$*B!AUj-Bo-@SCWhu$_wqxYPAi^>qMax*%W1{;=ch_i zNm{weGc_tbOI=(T!;RJ2K765eX>_ErU-Mbvs4+jq>MdU=OFTA3-JJKsxnf#%QVKFY zUfpr}(-m67C=a`cRbQqYi~GTc^|p{g#6!j z7ZYbQGkbuUwCV>gLWS?y000$0URpxkQ~xNXLGJ@nEyfV%=J~IQ%=FjECK4Iq7C9C2J}qWI7~#WNM6kQGO3U|DmB)7juST z8IRvyVi|u$PXsM?mY_=~Fqa+ClNeK-#H#M} zf1dl61jSe39?G_O6FnX-b)IE&=(!MhMa__lZuIkrxmZL(--@*Nd?pSQYkU|Wb-tds zZZOu+`NkySzcI>;s<7-a3x?g9LUnu|YTFZw+Be0R~j6a}EP=Jo{W6%&SU1o&gs`DXsmhJz&_x@k1S>v{l z%6u!}(M(--S68{|rNhE8nk`uCYJjQG+5HwPH zI#)e<^eFTCesyOd8Gkoe*Ysh6f==s&zgq-xS+t4q?v&?@KQ3>qAS@{J|awhrOQ`@V1(eN>1QD}wp|Ccnw_I2%Btu^JnY)i^QWO6N&=e#3ll!m0KsshSQxY=e zvdr2TKm(AjfV2ayc|cbX2to^*F%S&7sRPncV#sUW{|ekvJ&JWU)VV_sk|F`MzQK_P zraBAtQ?I+T?#9q>`yXj@<5z?BPd-^O%Hvl{A=lx?1_Dq2{j6}XSqQ{7GM&YZ|Fu|~ zOoRnSm@FJed^Bs4mFc5rU&@j9-r)23`9Ay=Zt&jhn*b)}hfYpactys9|W zu30q>)+eMwEnuNrHK=Ize!$YWq&Chh`e5qWni4%$>ri7j5%G(V8qF~)a(oV1nj7-ZL^d-++m z|6}@zQ!>p{wKEBHcGUeXEQh^l*QZzE zCwF-bWlA-ciJ6GSW%N8_WlDU^qluwDP52dFoN3af`pp>@;0H4-VSX7XYgidLUT*Q) z#O6wexxr`HK=t8kYli=DRCPd~Wt7C^oZIs%H&D!`Elw{mXy(KdPctLwx|csmtHP?F z5ySpz)>=sH9>3-AMYD@S-+RiaOKC1z6&Hu(t8%cqn+|7^$yruVOh%M??h8TJwl~R> zs!GY_B>9!6*%g$+CpmF+(55|ZW?tFrGyxi81l1ZP;P#Wqkaw2|L|Az^c0M1#0hWja zqSZ5UGsPg0JNzAG4DL#H%H3i+pE?n{Zq{$*Li?_q|wN6R>P$bgD@<$j~#~cT^uhucn^qrUv2ak zWJo5O&6Md3Hk4?_Kp>Lt*USOGe(f(65vWzPChpG;Q*m;tdgLa?r9Po9eq6bVC&=mL z&bs;7xDCFx@Rzq9`KC;KQh;zrWsfw$IQuC3G>;1N^ymqcEeV5sG%Z4vt{dHLRiAK;#L8@$XYhW1zEBu#m8E}Ab$k5LTYR_hWR zTh3*CyWjoAd1h6EcM2mrG@L27-IGJ_y+x;fGsBjqe)FK7jME+Ucl5BIZ}}o73o~bD zw75Mk5{Qi1xe6!C-l)Km>W!XGZ}3|85y)D}cIVOOEDF%5`)w<9&Yg7gSTlxW_;`C3 zPAR@(iIxdth@$tVT>D#85w3yle7@waoW3|xf9a7dccV)$(3+ZAb!&e8`5ZVG8v)h zbcFHU1PiQS$z$szb54s`NAz=u**gDgw%BO2*XtSy>!REF0_CIY*5jCKQ}T_aZ7M+p znWPFdL?mgtIm9Hx1@$XaUOG?4q3vsHrjI_%X@MsSP4x03J@a9ok3ppjO83R$U_CzRm}Vu&NoKU&aczo5 zuQqHb2voj<@UgYJmbtrIO-Dn^JpY_MXyu*pN#Z{%TH+c@f>m|ABRfJj5#uM<@=X}4 zU(p-vT{L%GUb`V7@=sEoCDUamzPlS3P%oI2*X@l&K}UDF-1};6(`6L|gNdZyZrZMZ zwT6r?Ovb}1q|WJC8nMJi0L}{Ee%E3GP`7(;@BeNpQr;#SqRX5nF@|A`OTJo&nL0xg zlGFR*QzzJ`!3oZ{Rvp*JSMNn(lN#vFwU0u&De!MMS*SYnD8(lcws?RRrKpT&XgZhz-I{D!4M%3V4E3#_V^`a2uOn25*JBn;t7}#2MJ` zt+t8#rL+#|*eY9l`Do6>n(I>j2Iw_-+mhS?@2FkaI|+`F)*!iBjSTyQfKb*NFF!Lm z70?fO(2#}Wt^pPwkORWgU+gD;U^A>{w+MctcJClfiOMaqZbo!?pkUV;Yy6K1_TB$z zR5Ou^+8J&0!SjV(&eb za4CPcDl5K3HTLd=c`}Y${Ys^S2V^{nG*qapn;Y+9gF``SsbXc+@%8H`q2x~7cJXVL zQD5@j;&?^@japD4s1lA-d=M{g7*Wopb=tM1SbqFcotOMdfV}O}TKG32P@niP!?uLw zzAEpgS2WH>6{ucRYrhP+d%5qT-2sS+iNP+T{5dU84fPa$yV=Z;Dh*4<4z-5{XQCXx zZ<6eb+1R!1uHevXnSDoV)Mh#(X<8|KN?-97N`pXkj}Cu;>vQdRXW zK0ZJ03z=1rsgSvb9v*N)-&ATLtQG@4=+I-oq1cZ!;oL2uRO(OOB8K5L7?2mL;ez=y_oJ$zZ0=9wL0ww#XfbzgF&jY&2?r77!m3Lmdwdn_m96 zEt>In|CARJ6a9Yq=!R`6$8(g_LIHQO;HfU%`TH@8UReN_kNW73Nd8#0+Fms=FMA*% zFDhdHxc`0r@%<9hMNf66Z2%tD9ceowZx1%P{bZjrJ|Bw!Csyp zbls*k8WXO%5Zg4wOHXA5i|t#P&^6GZCbc9E%NYyy1c2}A~iAnaqw^SK?!fW2!o0gN; z!ePNpvb%jYT~2-6*tZd%Z^0b0;xS2n#g)Mjp`>jUqoO+!@=rQu2}O2FX<;yYIF^*= zKS8y{k23TkkI%$(86sx3$Lk?c#5JCS6ayvJg+(r3^>#N5HF4Ts43YLNU^-@?fNe&- zZ_GF}T;{2&XvyOKV&2!Dt%9OZK0D*Zdb@D4B3&!G{(oI!{`Ayf9yo4$raklS6RLao z`^c!tRUQtJqEVOH^RTzJfV{jsHiNd*p&>JQuTu(nUi`vtEQZ43( z8e+~uROVMSIi&@jfb8s{m1w7heetX+RcRA_pz1faJwYw|Hc)cwXI-qZcN-V4p_E~2 z-b}@q$>RzRq2tTD-&7M7CAyChu7aSN;E>HAY;=jyj8gx3q}X?Ls= zmrKeTORKK(orFV2K_d3ioCcc8pSh;TWQ$iqA)iw)dS zfLz4wX}T5%2e6hWQzEFRJp^UtJG~d(n1lYx1F0I{;)8~p*mWj61=jAb;1LYXJ^KHA zP54i@rUez1z-e83PCuky8g&j>)K475|MG|bOLMr0=bf0C2#$){odG#)?-yk3AZmIp zt{9mx7*+~T2eR;3O@wEd>tU&vE-_0F`k?rqP*P!}g}c8;njL4C_YCWV+dG_YYebK! zUn9W#N?BTtY;)6bqwZZbv=?~aTvj$r|6x{RX;od^68O~8$0ndN zIMBXC zh=@gokg%_M$iU$`RPZmQg<{w0zI5zb=heZlLn6cdET9SGiOqP}=8ciJZ0WbIM2+2Q z)00=X0@zkZYa1aEseNnQgICQy&nO?fVZMMiJ2rawGY*i3s@yR4x3<#o6$1X@7h8k)3>K zPk$I|b(oz^-H&l25BtZo_ap$r-`^nM70kGtD_0H~giEohtvp!Z@Bvk{PdxOSp7O={ zfe0tv?7?IKF2dOGZNbeR{Jm5sB4VR)_=f)1$kYtW0{)B4&W);Q+vQXr)mrmDuDQ2( zJsdSC1*}l(roL)`Xtk+gU|;s&+AN74fP7MS#Iq9(!+R|I%r|8cr)o8bXxJ2(I3N<0 z{$vCXY!*rfycAA}^xKWtOOC9V%z;8lkTcP6MCO+i`P|v#RN3Lwl z^4v&D$0k+*H~Tuzo2<4`+0}&Ho+5>V-8H;V7)AOFC7!&3GOU)A_I{4@-}FJv>7-hs zv2+(375)$#hnhhJoe|bGe*sF7jWJ8VTts`)2iQY?o8?HtsM{&0sQXq3M53fV_3phApHMB?=1TPqZ)S7b zaE{B?^rhX4_b94lPFCF;igh^>$*4Ku%R1!M!wjbIVFBgMWmN7xttc?ND)_2FokYa$ z@+Dxw0GWi}26uTNM3U>gERSuqE`z`e^~X?#L-NF}3|f3x1>42_GXHCFC9mDOgI8Z0 zK!g{XNRLNaY7xWl=Y{cf{y-q#2TDpJrfo$_1=6_IssBLos~!tCbEG-6yn>ly>()mUsso#?c}LzIIlhRX>kxptw_`roJ1%=&Q&_GTf#pr=9S z=1dLNn&>?YOl}T!?vvcfM~)GWwEs9(B{~cK)L0%~3k(|^vCX@A@AK6j2Ef5D>oXfC zm|>V|JzmUms8)VR<+WC!SJQ{560-4aLgUUqUIU^0c6V;q>7Skwx@A}{T4bFS+6t=K ziBBWdq~sU2$qNEmR#q4WtX$EKe7_IVz6!O3KZlDDV_i{wYYkT@-)`yTcgi=-X)wb2 zEFL#{?;C`avdB&;ul|a5V5kQ-D@wXh!?k96ouJz zv4*;qmdm_Z(s+}LMOH-5P4CLv#8P2$KRVecqm{%G027n=7m2&C*Qt+zeVNkvIG$l@N&(#UL2%8;yBBk36AHnPE*`V%zpSlP8@DMLRM`vf#em=BuGg6rJ-9^B;D_{OF zp6%0SxtuIfz7Y??EKk=HnSEMcxQs&S*x4i7pN<@w6ZK`ID2AVIpcxAmJ7KK)Wji|@ zrVKZ}Uzuhb2R!YLsE7`me@&&*lMRAKJ4A0FU1WyZ9eT2HL1IV44Y9)9tDBu4w9bw_ zHa%}zoQ75p^tMblW$=V6M(PdgWj@8G>hcSq%J>rE*}l`@AdkIjj?6C3k<wicy zN5Zl)YbS82;0zD6^?hIkL!$N5wnn9NWFfgEKx5rlt!hS2v zL!f}WOnvtsH|7I9Q1bA;JS0s#@lGy!r9WF|3qcUiJHF!cJXc)J@J^K5Klr3``ksIi zi^=h%e)fg#qa=1Ih28t4_Q&61zW1jcSR9UPe~~1mq`V%_dheD`{45}o6&|xOsaH*g zVOTHwk_pem`$WR&^1cS98Uq<3d?frW%08w82IU0?K`G$}_m$&^Mv4vMmGE1+)Dq6# zW*Z*Hmd)+}I>Cf}LU}^YE0F!AUxW{oJ0b4(V3U(&^S1TGr&XqW?4^Gbt)2U1)2E$c z%gn&sX3Z4)@xXR!4pHtx%AA%_dKS~@URLz&ChdiNFI##4zwkV7YoMgnbbJzyD!kl$ z_KflUw1y(-+(dCX4^6W@Me9`2HfXl=LZ+2eI{=*iB>kfk+M>1y8Cw^X%s@RL1k!`eEpVMHe^H+16R=yZ<43dWQl|EQ^3T2Rq zQIwpvoJJ6SLc!6>6+bE^n9{G1H2n^i-h+eI&7UgSg+@2e@-rmzX&&qLFbMjg^NHpc z{ys530cDUly9c&cp4C=D9^y%st9_+aMQ);&rQw=RJuE+~4{Bf+%kR$zyVBYnD4xA) z>Jv)}nb)T4UZMO%Y4ks2z|WRLFf!1LUspl)G@>sq-HX$K%CdN@7{_E9HYveJzlQy$ zTHx=TP=(}_EF>K+iuZb=&G=6o+`%ZmJ(;c2zms<@N8@eH@7lQfen<&Z7w;i|9^>61 z>bZK9o*h*D+ATqJe0+j;QEx=sB(yK=O8~IemGPt{Be(Dwt{i;&lNueD${v0#qzXi?zCH&a4Rt6u%#=5 z2AtffydJBuRfKl_n^frMP^fu#u@_D8Xuh<=&`tI(>Zz>?D0;C&3Y^r(AJ9ashE6Cv z2-@YNT41nfY=2=O^&&HgMdz7nq)^+(sT3Zy%VF+c?-{g623z4UC4|&CBG+OAm7+83 z+h1uI)d{~QK@deVpz*iO{Iv4M^TC1VUY5O=%2GwU(FyyBD^9r2Ok7Dn<-~4d3GPt) zezaHM`YAKo>+IA-EDE}QQFMuQ-gs9d{{6F#+lN@X^%M9nsepll@6V6@+_4{J^pFb6 z%cLYFwb7^)$c6<6fvlx!5vi;dpCmh&1r>1(76a=>|s{A6Ihe%vBjKiS=%$~5<7m&u9r()%m`0Kh~4PYX~u zqmgx7c}d}|{EYR)ZKKN0poSitLS|?C4760EOy@S9$9zhyru!Ee-W!5LBH1!y^4mQk zOT0U4@`ST;l0YadN&ZQ*%F!d%LyMNsE>*+LLMIJOP5}0oF&WkV#4&?St0-z^MtJ0V z13v}*p?_QkjU%T&x{}zFAp7{HxIk~RoFu#iS>4Gpwa}e-uh4DkX^@^a7M*rI9msCw z;Po*+BG9NAJ3CIR8IzBUZ;7)MwbDN@uXl53#f*QNkv_8PX$aZ)$GmezBc9mfPb*|B z>3x1m=>2}ygzs5w1)G>O2XrWXOxY3w{o~6Ld{{hsG7`7x{0ZyzwADLKj-V}H>n~GfnKZV zHO}o`v?QtX6lmZ9mIOOygQ*ZfCZk^s22LS{pg5n` z^2n40Qg2;;ELJq481P!n45SrFrV&;d84bv&wzS@*SSALQBRm9m(@B`(!G(yR1eelL6`AWqR*_qn;#hvZl-ME-z?9Q;T zupD1>m;CrY_o-xr6t|!n(Fu5u1wq8+qwC<6BYjAlV4`HeEVzdW)l&* zjc-$Lhm_NVvFw!7Mfy`FzocKx&As0szz+mR)L4uAdPA_=D>m9o?p&R;~5>NPfYo|Gn{ZA z4Ky%MGF50!*jet*rXx+Yl!RatqJGV3|)BvBAfMd9heu*g7P z7E*lZ=*VK9^>d73Kh_`xW7oKAFG>eGva}~pm8$9TPQk2#CTqs29&I+=w_ACfxCRB{ zMmt?vOB&4L<6ns<5@9qW$hy6Eg1Xwdw1f8CSbVRdLC(<#5=1g7DXCXYB_xKCl$n`% zDCJ|2pi39(=N=`Bkwm7iOfeD|smy{@Q(iIeV?4!Y=~@G#I>B5&2!S&dyQ4L&XA8LE z=iU^aeNa67wYVtpoeCB4S4^PsR^c1po=6~LtxnxJ@L9|PCn$=X{z+S?VabzrP}5K8 zWW_k3W>xf-s)~!tr|OjT`F3ve4XH?SyXZ^m*iPIX<;9sCrPlzi$mLsHaT@#kH>acg zD_a*T;@ic{YMxIS4x}Y_yFiE2D`$t9e*5K?i(zXn>%G+spN>CnaGmyj;eYyCTD?R2 zA3rO7MWL!vpixNV;MdDc_d1uy#KhFDbH{ek_rwzy7hicWEFVK`PkP|=zgVJU8*G0E zHjoED4VKj0fnNm5<*kK|0`#NJFhW_s$qQbg`3eX7uae?P_%>R33gu~}ka1`$T4^wt z@#=hb7Nsu34~a_s@^E_AV-MI$I7TM9ERic43rm}RIGnFv|7|x+4NIv0@n!K5#{B5} zPNKZF?;VzEo*3QL6|e9|fJ@u=-&+8?Zbp1pyVah#H-9ghYB5h4t0Fu`f7h>XxO65? z95N^6&qZHnTl`*|@Wrj1|wu{ZGo1nJY^aRrph- zKbzF%iRty0Yd)?|iHvdi?rBv{Ziaw8zRQoMleXSVl8*wAlz%^dzPda8<<-M5EE{Wx zfG^lhnJ^`&7c>CsivO*)5_RA_I{q;{2{Q5it1FBnv!cq_^h5KI7fkJzSk4-1DiU$p$ zF?!GQnaP8V@`Hr!1lX-ALAf%OOt@l%rZP+PuTOa$HYV_mJ3FGyqL(Wf?kcMw;kr)K z`17;&FJ&8X8?3$UW`Tn4j20M>0)MDdqkDTR*h{vIW zEdJTDiw{UO(6lS+@}+87KLg4FWmW2AcDTeTT{_B|@4uMiqz?vnJ&4qwYNi2~x|;JY z4~rEEU{}Y&im>x9S>=t5$@;C{C6gF>@+%E0g$~SkF)^@v{};K>pMy_-*JXQTh&Af6 zv#_#aU|+2e9Y3z4BeEbV{4ccSt>!FHKEK}EkX;TmSg!UwMv=v6Izq&>0f)2N3Kufc zaL4-lo@0C+AE(n%T-GfWFqKI*gXwd7wtnNk65v!xn^I%+tmt_L$T^GCF}O}uj7jZMe_8n z#xl0+8Y|A>fJ0$cOz;J4qYj8dkWO;?L>@!Jh)GaUzsmv{5Ynr zRQCGTx|9RTno{{CaJh$)lC+?4H8=Yv=^hg%2~w@KU*53BI=vzmze+;Xm$ zfz-6L7)9V?AHkQF2yb2{dK*Tfqw|ZIdDXX@jyW4$^_y2z@9OmByQ(eT+HQv2dM5tea}*bjg`n-H_mR6C8$mUt`yk50~kl>YzF@;AY96a#ZY! zCybc=awrR!;<=pwyXygllV*wVkcvAYlW%m5%1Oo2>3d&bGw5?sEXQa6JsVO4yY6HD zb)fW7{Vb?zU@!`CXy2|Ew%@HDtT242w;Osnm9n<6QDP4FXX}&;&s14$8-kRVN-G`4 z_T6G&8*u7_?aZh;pQ z^oH{*Ttj5l8PPvRD7^K2QEhPa;b(rlwa=l+9aS)uK9!VMn1I6L7u5BNz1b%YKmH>6FFVFsLFv{!7`w0$2C(N zJP8S1!BR@m1xUsP5`ywZ-kzTJxqD)d+$Ee~W{Cy%zNyz$N8vOw#C0AaBq(dKX)_z* zL{1fpSJz<4_|+f?Q2WDJwY%r^OC!raz^h8l#mYI)(nV0C7CJlYMPMLEN12`ialj-V z8XPpazudQ7E*{!N4*c_n+hIkdyyaL3k?Q5}SROehxDee&q>UX%lQViAgtb)vR+;R- zp&a*=mHjY4PtEl+`8_-$)yBpK0Xk7XegN*T8uYK+3}5_cXmc!Avqbmz_iyj+#;bB} z2Zu&R7;=0|Bje2CEEaS`IQ}^63L;MT_1EEs+3IZu4v2T2g4oirz;&(5I6yLEJ874y!b^~+$-4)ITx$N+hc zbjV!)fQ{8zDdOh0(f>)4Bp744fOkY^;J^WfQ z@c(9~D-`!N{`ai)*Y^c7I;(O7-cJJKNz*qZ8xAV7b@3N0dw3FO;XJ`${e9|{J9{>I zY+GZa?vc$4ZG>dvAJN((ME=jR2SV!2{ATYlP;1IGjses71WzO9H8|`C6NCYmA~4Rf zcS2gtrh@m(mH%=)tTk{W&wJoN;L5Uv^ry$riVJhu@2r99Q!#p-Dnar#=~`V4^zKahFivakf{(N)jNkHC#jz=+-f*@YDlJa9fkb#&b-VWIbQUb7e=dHd9a2U}W z(-&5?J7W)V$C9>UmRK;7ETNDRfW9v6`a{B$Sb*Wc7k`Wj)q!Bi5@K);IUr3>N;IJ$ zYC`^QG?_z>72I1S9SiTxxw`2}w%MFO%Sj&_WehMduufxL%6Ia^mq2H#=(jlD2}xyt z9@YG&zp#yzkIlKufDjVrouAkp6*_NwH#kp84;L|IthE-?6t4HL>}noXvjl`Pu?(B( zgb0kIOw(T5n>Do_s@~fieG){Aoj?oP67_FwI81blVF$z-C&8!Bgc4p8Hh_*eknE$$ zzDS@&|J#ptY)Nnuq?7k0SlfL=Ph$$uy4Kkc{H-*2+mAw?S>F~**za#BXTI6=r4;e5 zIo5Y9YMUWc<0dBm5W;s-IcKdJpBGw$pr2b)hibf{(@pX4LJOfRd(ZlxJl~dd z%>vIgB6}c?OspnW?YFl82po)XfoCpgcz9DOd(p?Pp=1)H^;&5SbfEt^DnKA!lKG!P ze(upV^`=thKm9)R1*iUh+H|S@zXuHde>Zfzyeh^^-YC~AO+p--0LaTIOP5O;2K*nG CoHJMe diff --git a/stop-1.md b/stop-1.md index e5198906..0051fd47 100644 --- a/stop-1.md +++ b/stop-1.md @@ -1,6 +1,6 @@ # Stop Pipeline Plugin Specification -**Spec ID:** OVOS-STOP-1 · **Version:** 1 · **Status:** Draft +**Spec ID:** OVOS-STOP-1 · **Version:** 2 · **Status:** Draft This specification defines the **stop pipeline plugin** — a pipeline plugin that matches utterances expressing the user's intention to