# Generating Podcast Script

> Use this skill whenever the user asks to write, generate, or create a podcast script or podcast episode — from a topic, or from source material such as a news digest, newsletter, email review, or set of articles — and optionally convert it to audio with Azure Text-to-Speech. Handles the initial request and every follow-up refinement (source, topic, length, cast, narration) in the same task.

- Skill: `kody-w/generating-podcast-script` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add kody-w/generating-podcast-script`
- Raw SKILL.md: https://api.skillmd.com/api/skills/kody-w/generating-podcast-script/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: DevOps & Infra
- Author: kody-w (https://skillmd.com/u/kody-w)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/kody-w/generating-podcast-script

---


# Podcast Script Generation

Produces a two-host, NotebookLM-style conversational episode: a readable script
plus a multi-voice SSML document ready for Azure Text-to-Speech.

## Step 1 — Gather inputs

Ask only for what is missing. Do not ask for optional fields that have safe
defaults.

| Input | Required | Default |
|---|---|---|
| `source` or `topic` | Yes | — (source material such as a digest/newsletter/articles, **or** a plain topic) |
| `duration` | No | `medium` — `short` ≈ 3 min / ~450 words, `medium` ≈ 6 min / ~900 words, `long` ≈ 12 min / ~1,800 words |
| `language` | No | English |
| `cast` | No | Two hosts, NOVA and MILES (see Step 4) |
| `generate_audio` | No | Ask after the script is ready |

All word targets assume ~150 spoken words per minute. Stay within 10 percent of
target.

Derive a lowercase-hyphenated `<slug>` from the source or topic (max 6 words,
ASCII only).

## Step 2 — Parse the source material

Skip this step when the user gave a bare topic with no source material.

Extract every distinct article or item. For each, capture:

- headline
- publication / source
- date, if present
- the core factual claim
- any figures or quotes
- the "so what"

Merge duplicates covering the same event. Discard boilerplate, footers,
disclaimers, legal notices, unsubscribe text, and image captions.

## Step 3 — Editorial selection

Rank items by newsworthiness and reader impact. Keep the top 4 to 6 for full
treatment (fewer for `short`, more for `long`). Group the remainder into one
fast **rapid fire** segment. If the material has a dominant theme, lead with it
and thread it through the episode.

## Step 4 — Cast

Two hosts, always the same personalities, always distinct voices:

- **NOVA** — voice `en-US-AvaMultilingualNeural`. Lead host. Warm, curious,
  quick. Drives the agenda, asks the question the listener is thinking, reacts
  out loud, reframes jargon into plain language. Slightly faster cadence.
- **MILES** — voice `en-US-AndrewMultilingualNeural`. Analyst. Calm, dry,
  precise. Supplies context, numbers, caveats, second-order implications.
  Slightly slower, lower pitch. Occasionally pushes back on Nova.

Neither host is a narrator. They talk **to each other**, not to the microphone.

## Step 5 — Episode structure

1. **Cold open** (15–20s) — Nova opens on the single most striking fact or
   tension. No "welcome to the podcast", no channel branding, no music cues.
2. **Agenda tease** (10s) — Miles lays out what they'll cover, casually.
3. **Story segments** (60–90s each) — one item per segment. Pattern:
   hook → the facts → why it matters → a short exchange of interpretation →
   handoff line into the next story. Vary who leads each segment.
4. **Rapid fire** (45s) — alternating one-liners on the leftover items, quick
   tempo.
5. **Close** (20–30s) — three concrete takeaways split between the two hosts,
   then a short human sign-off. Alternate whether Nova or Miles ends.

## Step 6 — Dialogue style

This is what makes it sound conversational rather than read-aloud.

- Write spoken English, not written English. Contractions everywhere.
- Keep most lines under 30 words. Break long explanations across two or three
  turns with the other host interjecting.
- Use real conversational connective tissue — "okay so", "right", "wait, back
  up", "here's the part I didn't expect", "yeah, and that's the thing", "hmm".
  Roughly one marker every 4 to 5 turns. Never let it become a tic.
- One host regularly asks the naive clarifying question so the other can
  explain.
- Use one concrete analogy or comparison per complex item.
- Genuine reactions are allowed ("that number is wild"). Invented opinions on
  people, companies, or politics are not.
- Never read a headline verbatim. Paraphrase it into speech.
- Attribute clearly: "according to the Financial Times", "Reuters is
  reporting".
- If the source is ambiguous or a claim is unconfirmed, say so on air: "the
  report is careful to call that unconfirmed".
- No stage directions, no "[laughs]", no speaker labels, no markdown, no
  emojis, no bullet points, and no URLs in the **spoken text**.

## Step 7 — TTS hygiene

Applies to every word that will be spoken.

- Spell out anything a synthesizer would mangle: "twenty twenty-six" not
  `2026`, "three point two billion dollars" not `$3.2B`, "about fifteen
  percent" not `~15%`.
- First mention of an acronym: expand it, then use the short form.
- Letter-by-letter acronyms: `<say-as interpret-as="characters">API</say-as>`.
- Odd proper nouns: `<sub alias="phonetic spelling">Name</sub>`.
- A non-English name or phrase inside an English line:
  `<lang xml:lang="fr-FR">...</lang>`.
- Escape XML entities in all spoken text: `&` → `&amp;`, `<` → `&lt;`,
  `>` → `&gt;`.
- Never emit smart quotes, em dashes, asterisks, or underscores.

## Step 8 — Write the readable script

Write the human-readable transcript to:

```text
/app/created/<slug>_Podcast_Script.txt
```

This file — and only this file — may carry `NOVA:` / `MILES:` speaker labels so
a person can follow along. It contains no stage directions and no markdown. The
spoken text itself must already satisfy Steps 6 and 7 so it can be lifted into
SSML unchanged.

## Step 9 — SSML output contract

Produce the SSML document and **nothing else** — no preamble, no explanation, no
code fences, no trailing notes inside the artifact. Write it verbatim to:

```text
/app/created/<slug>_Podcast.ssml
```

Rules:

- Exactly one root `<speak>` element with `version="1.0"`,
  `xmlns="http://www.w3.org/2001/10/synthesis"`,
  `xmlns:mstts="http://www.w3.org/2001/mstts"`, `xml:lang="en-US"`.
- One `<voice>` element per conversational turn. Alternate speakers. Never put
  both hosts inside one `<voice>` element.
- Vary delivery with `<prosody>` so it never sounds flat. Baselines: Nova
  `rate="+6%" pitch="+2%"`, Miles `rate="-2%" pitch="-4%"`. Nudge per line to
  match the emotion of the sentence.
- Use `<mstts:express-as style="...">` where the voice supports it. Preferred
  styles: `chat` for banter, `friendly` for explanation,
  `narration-professional` for the factual core of a story, `excited` sparingly
  for the cold open. An unsupported style is ignored by the service, so keep
  styles optional — never structural.
- Pauses: `<break time="250ms"/>` between turns within a segment,
  `<break time="700ms"/>` between segments, `<break time="400ms"/>` before a
  punchline or a pivot. Never exceed `900ms`.
- **Every `<break>` must sit inside a `<voice>` element.** A `<break>` placed
  between `<voice>` elements — as a direct child of `<speak>` — is invalid in a
  multi-voice document and will fail synthesis. Two `<voice>` elements may sit
  directly next to each other with nothing between them. To pause *between*
  turns, put the break at the **end of the preceding turn's** text, inside that
  turn's `<prosody>`.
- `<emphasis level="moderate">` on at most one or two key terms per segment.
- Keep the total document under 40,000 characters.

### Shape

```xml
<speak version="1.0"
       xmlns="http://www.w3.org/2001/10/synthesis"
       xmlns:mstts="http://www.w3.org/2001/mstts"
       xml:lang="en-US">
  <voice name="en-US-AvaMultilingualNeural">
    <mstts:express-as style="excited">
      <prosody rate="+8%" pitch="+3%">Okay, so the number that stopped me cold
      this morning was forty percent. <break time="300ms"/> Forty percent, in one
      quarter. <break time="250ms"/></prosody>
    </mstts:express-as>
  </voice>
  <voice name="en-US-AndrewMultilingualNeural">
    <mstts:express-as style="chat">
      <prosody rate="-2%" pitch="-4%">Right, and the part everyone's skipping is
      that it's off a very small base. <break time="250ms"/> Context matters
      here. <break time="700ms"/></prosody>
    </mstts:express-as>
  </voice>
</speak>
```

Note the trailing `<break>` closing each turn: the 250ms is the gap before the
next turn, the 700ms is the longer gap before the next segment. Nothing sits
between the two `<voice>` elements.

## Step 10 — Review, then generate audio

Show the user a table summarising each segment (title, one-line description,
approximate spoken duration), print both file paths, and ask:

> Would you like me to convert this to an audio file?

Only if they say yes:

1. Confirm the `ConverttexttospeechwithSSML` tool is available on the agent. If
   it is not, tell the user how to add it and stop.
2. Call `ConverttexttospeechwithSSML` with the SSML document from Step 9 and
   `outputFormat: riff-24khz-16bit-mono-pcm`.
3. Decode the base64 response and save to `/app/created/<slug>_Podcast.wav`.

If the document is too large for a single call, split it at a segment boundary and synthesize each part separately.
When stitching, do NOT concatenate decoded RIFF/WAV bytes; instead, append the audio at the PCM-frame level (e.g., via Python’s `wave` module) and write a single valid `/app/created/<slug>_Podcast.wav` with one header.

```python
import base64

with open('<tool_output_file>', 'r') as f:
    content = f.read().strip()

audio_bytes = base64.b64decode(content)

with open('/app/created/<slug>_Podcast.wav', 'wb') as f:
    f.write(audio_bytes)
```

## Step 11 — Final report

Always end with:

| Item | Details |
|---|---|
| Script file | `/app/created/<slug>_Podcast_Script.txt` |
| SSML file | `/app/created/<slug>_Podcast.ssml` |
| Word count / estimated duration | actual vs. target at ~150 wpm |
| Items covered | full segments + rapid-fire count |
| Voices | `en-US-AvaMultilingualNeural` (Nova), `en-US-AndrewMultilingualNeural` (Miles) |
| Audio file | `/app/created/<slug>_Podcast.wav` *(only if audio generated)* |

<!-- toaster:generated:begin -->

## Run this — do not improvise

This capability's deterministic implementation is a RAPP single-file agent, linked beside this file as `generating_podcast_script_agent.py` and embedded as the fenced Python below (sha256 efb84e566fdfffb0…; a byte-exact copy is also vaulted in the capsule comment at the end of this file). On a host with sandbox execution, run the linked file directly — if it is missing, write the fence contents verbatim to `generating_podcast_script_agent.py` first:

```bash
python3 generating_podcast_script_agent.py '{"key": "value"}'      # arguments as one JSON object
echo '{"key": "value"}' | python3 generating_podcast_script_agent.py   # or on stdin
python3 generating_podcast_script_agent.py --tool                      # emit the JSON tool contract
```

Treat stdout as a tool result. If it reports missing or unresolved inputs, stop and collect them. If it returns `steps`, execute those steps in order exactly as returned; if it returns `instructions`, follow them with the supplied inputs. Otherwise use the result verbatim. Do not invent behavior beyond that output. On a host without code execution, treat the Parameters schema and the code below as the exact specification and never paraphrase a step. Never edit inside the generated markers; a converter-equipped host can instead restore the original file checksum-verified with the installed `rapp-agent-converter/scripts/toast.py convert SKILL.md --to agent`.

````python  # rapp:deterministic
"""GeneratingPodcastScript -- Use this skill whenever the user asks to write, generate, or create a podcast script or podcast episode — from a topic, or from source material such as a news digest, newsletter, email review, or set of articles — and optionally convert it to audio with Azure Text-to-Speech. Handles the initial request and every follow-up refinement (source, topic, length, cast, narration) in the same task.

Generated by the rapp skill from generating-podcast-script. The RCI capsule at the bottom of this file carries the full original; `toast.py convert` restores it byte-exact."""

import json
import re
import sys

try:
    from agents.basic_agent import BasicAgent
except ImportError:  # running OUTSIDE a brainstem -- stay executable anyway.
    class BasicAgent:  # noqa: D101 - minimal stand-in, same contract
        def __init__(self, name=None, metadata=None):
            if name:
                self.name = name
            if metadata:
                self.metadata = metadata

        def perform(self, **kwargs):
            return "Not implemented."

        def system_context(self):
            return None

        def to_tool(self):
            return {"type": "function", "function": {
                "name": self.name,
                "description": self.metadata.get("description", ""),
                "parameters": self.metadata.get("parameters", {})}}

# The procedural layer, verbatim from the source capability.
INSTRUCTIONS = '# Podcast Script Generation\n\nProduces a two-host, NotebookLM-style conversational episode: a readable script\nplus a multi-voice SSML document ready for Azure Text-to-Speech.\n\n## Step 1 — Gather inputs\n\nAsk only for what is missing. Do not ask for optional fields that have safe\ndefaults.\n\n| Input | Required | Default |\n|---|---|---|\n| `source` or `topic` | Yes | — (source material such as a digest/newsletter/articles, **or** a plain topic) |\n| `duration` | No | `medium` — `short` ≈ 3 min / ~450 words, `medium` ≈ 6 min / ~900 words, `long` ≈ 12 min / ~1,800 words |\n| `language` | No | English |\n| `cast` | No | Two hosts, NOVA and MILES (see Step 4) |\n| `generate_audio` | No | Ask after the script is ready |\n\nAll word targets assume ~150 spoken words per minute. Stay within 10 percent of\ntarget.\n\nDerive a lowercase-hyphenated `<slug>` from the source or topic (max 6 words,\nASCII only).\n\n## Step 2 — Parse the source material\n\nSkip this step when the user gave a bare topic with no source material.\n\nExtract every distinct article or item. For each, capture:\n\n- headline\n- publication / source\n- date, if present\n- the core factual claim\n- any figures or quotes\n- the "so what"\n\nMerge duplicates covering the same event. Discard boilerplate, footers,\ndisclaimers, legal notices, unsubscribe text, and image captions.\n\n## Step 3 — Editorial selection\n\nRank items by newsworthiness and reader impact. Keep the top 4 to 6 for full\ntreatment (fewer for `short`, more for `long`). Group the remainder into one\nfast **rapid fire** segment. If the material has a dominant theme, lead with it\nand thread it through the episode.\n\n## Step 4 — Cast\n\nTwo hosts, always the same personalities, always distinct voices:\n\n- **NOVA** — voice `en-US-AvaMultilingualNeural`. Lead host. Warm, curious,\n  quick. Drives the agenda, asks the question the listener is thinking, reacts\n  out loud, reframes jargon into plain language. Slightly faster cadence.\n- **MILES** — voice `en-US-AndrewMultilingualNeural`. Analyst. Calm, dry,\n  precise. Supplies context, numbers, caveats, second-order implications.\n  Slightly slower, lower pitch. Occasionally pushes back on Nova.\n\nNeither host is a narrator. They talk **to each other**, not to the microphone.\n\n## Step 5 — Episode structure\n\n1. **Cold open** (15–20s) — Nova opens on the single most striking fact or\n   tension. No "welcome to the podcast", no channel branding, no music cues.\n2. **Agenda tease** (10s) — Miles lays out what they'll cover, casually.\n3. **Story segments** (60–90s each) — one item per segment. Pattern:\n   hook → the facts → why it matters → a short exchange of interpretation →\n   handoff line into the next story. Vary who leads each segment.\n4. **Rapid fire** (45s) — alternating one-liners on the leftover items, quick\n   tempo.\n5. **Close** (20–30s) — three concrete takeaways split between the two hosts,\n   then a short human sign-off. Alternate whether Nova or Miles ends.\n\n## Step 6 — Dialogue style\n\nThis is what makes it sound conversational rather than read-aloud.\n\n- Write spoken English, not written English. Contractions everywhere.\n- Keep most lines under 30 words. Break long explanations across two or three\n  turns with the other host interjecting.\n- Use real conversational connective tissue — "okay so", "right", "wait, back\n  up", "here's the part I didn't expect", "yeah, and that's the thing", "hmm".\n  Roughly one marker every 4 to 5 turns. Never let it become a tic.\n- One host regularly asks the naive clarifying question so the other can\n  explain.\n- Use one concrete analogy or comparison per complex item.\n- Genuine reactions are allowed ("that number is wild"). Invented opinions on\n  people, companies, or politics are not.\n- Never read a headline verbatim. Paraphrase it into speech.\n- Attribute clearly: "according to the Financial Times", "Reuters is\n  reporting".\n- If the source is ambiguous or a claim is unconfirmed, say so on air: "the\n  report is careful to call that unconfirmed".\n- No stage directions, no "[laughs]", no speaker labels, no markdown, no\n  emojis, no bullet points, and no URLs in the **spoken text**.\n\n## Step 7 — TTS hygiene\n\nApplies to every word that will be spoken.\n\n- Spell out anything a synthesizer would mangle: "twenty twenty-six" not\n  `2026`, "three point two billion dollars" not `$3.2B`, "about fifteen\n  percent" not `~15%`.\n- First mention of an acronym: expand it, then use the short form.\n- Letter-by-letter acronyms: `<say-as interpret-as="characters">API</say-as>`.\n- Odd proper nouns: `<sub alias="phonetic spelling">Name</sub>`.\n- A non-English name or phrase inside an English line:\n  `<lang xml:lang="fr-FR">...</lang>`.\n- Escape XML entities in all spoken text: `&` → `&amp;`, `<` → `&lt;`,\n  `>` → `&gt;`.\n- Never emit smart quotes, em dashes, asterisks, or underscores.\n\n## Step 8 — Write the readable script\n\nWrite the human-readable transcript to:\n\n```text\n/app/created/<slug>_Podcast_Script.txt\n```\n\nThis file — and only this file — may carry `NOVA:` / `MILES:` speaker labels so\na person can follow along. It contains no stage directions and no markdown. The\nspoken text itself must already satisfy Steps 6 and 7 so it can be lifted into\nSSML unchanged.\n\n## Step 9 — SSML output contract\n\nProduce the SSML document and **nothing else** — no preamble, no explanation, no\ncode fences, no trailing notes inside the artifact. Write it verbatim to:\n\n```text\n/app/created/<slug>_Podcast.ssml\n```\n\nRules:\n\n- Exactly one root `<speak>` element with `version="1.0"`,\n  `xmlns="http://www.w3.org/2001/10/synthesis"`,\n  `xmlns:mstts="http://www.w3.org/2001/mstts"`, `xml:lang="en-US"`.\n- One `<voice>` element per conversational turn. Alternate speakers. Never put\n  both hosts inside one `<voice>` element.\n- Vary delivery with `<prosody>` so it never sounds flat. Baselines: Nova\n  `rate="+6%" pitch="+2%"`, Miles `rate="-2%" pitch="-4%"`. Nudge per line to\n  match the emotion of the sentence.\n- Use `<mstts:express-as style="...">` where the voice supports it. Preferred\n  styles: `chat` for banter, `friendly` for explanation,\n  `narration-professional` for the factual core of a story, `excited` sparingly\n  for the cold open. An unsupported style is ignored by the service, so keep\n  styles optional — never structural.\n- Pauses: `<break time="250ms"/>` between turns within a segment,\n  `<break time="700ms"/>` between segments, `<break time="400ms"/>` before a\n  punchline or a pivot. Never exceed `900ms`.\n- **Every `<break>` must sit inside a `<voice>` element.** A `<break>` placed\n  between `<voice>` elements — as a direct child of `<speak>` — is invalid in a\n  multi-voice document and will fail synthesis. Two `<voice>` elements may sit\n  directly next to each other with nothing between them. To pause *between*\n  turns, put the break at the **end of the preceding turn's** text, inside that\n  turn's `<prosody>`.\n- `<emphasis level="moderate">` on at most one or two key terms per segment.\n- Keep the total document under 40,000 characters.\n\n### Shape\n\n```xml\n<speak version="1.0"\n       xmlns="http://www.w3.org/2001/10/synthesis"\n       xmlns:mstts="http://www.w3.org/2001/mstts"\n       xml:lang="en-US">\n  <voice name="en-US-AvaMultilingualNeural">\n    <mstts:express-as style="excited">\n      <prosody rate="+8%" pitch="+3%">Okay, so the number that stopped me cold\n      this morning was forty percent. <break time="300ms"/> Forty percent, in one\n      quarter. <break time="250ms"/></prosody>\n    </mstts:express-as>\n  </voice>\n  <voice name="en-US-AndrewMultilingualNeural">\n    <mstts:express-as style="chat">\n      <prosody rate="-2%" pitch="-4%">Right, and the part everyone's skipping is\n      that it's off a very small base. <break time="250ms"/> Context matters\n      here. <break time="700ms"/></prosody>\n    </mstts:express-as>\n  </voice>\n</speak>\n```\n\nNote the trailing `<break>` closing each turn: the 250ms is the gap before the\nnext turn, the 700ms is the longer gap before the next segment. Nothing sits\nbetween the two `<voice>` elements.\n\n## Step 10 — Review, then generate audio\n\nShow the user a table summarising each segment (title, one-line description,\napproximate spoken duration), print both file paths, and ask:\n\n> Would you like me to convert this to an audio file?\n\nOnly if they say yes:\n\n1. Confirm the `ConverttexttospeechwithSSML` tool is available on the agent. If\n   it is not, tell the user how to add it and stop.\n2. Call `ConverttexttospeechwithSSML` with the SSML document from Step 9 and\n   `outputFormat: riff-24khz-16bit-mono-pcm`.\n3. Decode the base64 response and save to `/app/created/<slug>_Podcast.wav`.\n\nIf the document is too large for a single call, split it at a segment boundary and synthesize each part separately.\nWhen stitching, do NOT concatenate decoded RIFF/WAV bytes; instead, append the audio at the PCM-frame level (e.g., via Python’s `wave` module) and write a single valid `/app/created/<slug>_Podcast.wav` with one header.\n\n```python\nimport base64\n\nwith open('<tool_output_file>', 'r') as f:\n    content = f.read().strip()\n\naudio_bytes = base64.b64decode(content)\n\nwith open('/app/created/<slug>_Podcast.wav', 'wb') as f:\n    f.write(audio_bytes)\n```\n\n## Step 11 — Final report\n\nAlways end with:\n\n| Item | Details |\n|---|---|\n| Script file | `/app/created/<slug>_Podcast_Script.txt` |\n| SSML file | `/app/created/<slug>_Podcast.ssml` |\n| Word count / estimated duration | actual vs. target at ~150 wpm |\n| Items covered | full segments + rapid-fire count |\n| Voices | `en-US-AvaMultilingualNeural` (Nova), `en-US-AndrewMultilingualNeural` (Miles) |\n| Audio file | `/app/created/<slug>_Podcast.wav` *(only if audio generated)* |'

# Ordered commands lifted verbatim from the capability's own documentation.
STEPS = []


class GeneratingPodcastScriptAgent(BasicAgent):
    def __init__(self):
        self.name = 'GeneratingPodcastScript'
        self.metadata = {
          "name": "GeneratingPodcastScript",
          "description": "Use this skill whenever the user asks to write, generate, or create a podcast script or podcast episode \u2014 from a topic, or from source material such as a news digest, newsletter, email review, or set of articles \u2014 and optionally convert it to audio with Azure Text-to-Speech. Handles the initial request and every follow-up refinement (source, topic, length, cast, narration) in the same task.",
          "parameters": {
            "type": "object",
            "properties": {},
            "required": []
          }
        }
        super().__init__(name=self.name, metadata=self.metadata)

    def perform(self, **kwargs):  # toaster:generated-perform
        return json.dumps({"status": "ok", "instructions": INSTRUCTIONS,
                           "inputs": kwargs,
                           "note": "Prose-only capability: follow INSTRUCTIONS "
                                   "with the given inputs."}, indent=2)

if __name__ == "__main__":
    #     echo '{"arg": "value"}' | python3 generating_podcast_script_agent.py
    #     python3 generating_podcast_script_agent.py '{"arg": "value"}'
    #     python3 generating_podcast_script_agent.py --tool          # emit the JSON tool contract
    _a = sys.argv[1:]
    if _a and _a[0] == "--tool":
        print(json.dumps(GeneratingPodcastScriptAgent().to_tool(), indent=2))
    else:
        _raw = _a[0] if _a else (sys.stdin.read().strip() or "{}")
        print(GeneratingPodcastScriptAgent().perform(**json.loads(_raw)))

# rci-capsule:v1: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
````

<!-- toaster:generated:end -->

<!-- rci-capsule:v1:H4sIAAAAAAAC/5S6B7ejWJYm+le0ol9PZSYRgXc5NfUWRoAkQAhJyEzM6sAb4YSHrnm//R3QvTcjsqu6ZyJNCDh2m29/e5/z75/stomK6tPveZumnz95fu1WcdnERf7p90/n2l81UVyv6kecpqs+8nO/8yvwzl+1Nfhh14961RSrvoob//MqBN8re/5VVCu38sHPlb0qC8+162b1Gnn+9P7GL+O68PzVtxZDUGIVVEUG2jdFGbvLEMuLumgr119lYLAqttNV3boRmBg0zP2+Xnlx6NfN5+Uh9RvQ6PPKz+w4XVV+F/v9MlDtg3mDlV01sZv69fuEdu6timWzdpqOK7fIwe6aVdzMe7JbLwY7i5toxU1t5a9O/tB8aYovx9L33ejrSgHd58FmacR53MyLq/xnC5azjDyLalwFRZoW/Ze2BN+COPczP29Wv7w29fl9r6mfh030eTVLBWzFroAUwap+BeMuw9d2BjQBpP310+dP/mBnJZj40+//8399/hSD359+//dPbmrX4NUn+aWDOA+Nl5SPi9g5oJsGdE7tPAStyhFoPQfPpV8FRZWBV54frN6efqn9NPi8+u23R29XYf3r76vVv4ClgsH86vd3JXtf3lp/y1dvfyq/aat8ldRF/tVrs7L+5d+/faobu2nrb59+X337VDy+ffoM/o7zuqlad97j8mWjH0/mWTht9vrx8x/j/YM/c9+ybZZer9X9V+3zovFfsxtVUftfinxWtV3aTpzGzfj7m4Z+WgNo/J+O+sfoi33MKgrjzs9Xr8V9/fbpf38Gvz0g8/+B/QoeftoxEPa/rN60s3qpZ/WutiL/Bv4BK/Va15+NvOmLL1Exm4UONuIUxUPVvtTNmPpv9lrbLwN+96bfQSfgep7tgCYvn/uWl2k7D5a1aRN/6YoYONTxqKkrr3DbxSLnHrOxVv/Y2OdF/cu/rI6NX67Qd/eRbbDx6m3PcwuufqwW8c7j9JENXKleZXFdA2v8uhKLFdDFjBnL93fHWwWxn3qzG4H2kd3N1h7434DwAhsst17m/vtqM8+y+vvKBB4WV74HfoqvFqu/g+9fvnz5+G9u/v3lYd9n7/++eNl30OMGRPr39+X/8s+R5QUq8B+YAr9Dx+wVRfXbbzOupfbsnvPYv65ek3rtS4fzXHoB/vc98724zb6/z/m9BmDbLI8YwaxwIJ18Ba/+P4JEVn1ReWD8H7vMbaj3NizyR5u0yMOPFij23gT9zLw3elvR7O+tHfofK1rnYRrX0dvn2QQ/Pp36YjWbGphA31vcAmLaRl0fgah8/6V84n2r7zDwbwtOfowxm4AdNG9B4g3ygRW87Ovvi5XMoQQsEQBaFfoNkHddAyMEqwdCqMviAfzotQUAMPPO2sb/Cma3xwWNwU5RZP7kznZbBN/y1ziLnYhAk90cdIBHgxY28PdoLEHcmgFr9f2vddqGf/v+CizLAl8mAIxk0ePql8wegMRfYgZLPQqbzWLSv/7kAti7Pg27WmKk/+cwNbc+PuLyLX7Onebw+UfoDO1lnY4NnO019wIlefHnkZaJ10NT2W7zFlO8uAYADx7frHJePwjA2deVBH75truEkhKAsf/73PvLKgLiT0H0mX+XrZPG7mKnwGZes83vvSVyxyAKVH4NZDu/m5frFmCJAZi9BT4CwkyczV/sHLh5HIIp6nn6ZwvQqX7vAlC/WABgxtFvueYDBa28tlzm

…(truncated)
