From ea43375cb4110979dd548568c1190a0bb1654fa7 Mon Sep 17 00:00:00 2001 From: randogoth Date: Mon, 20 Oct 2025 21:58:05 +0300 Subject: [PATCH] indexer --- README.md | 1 + format.txt | 259 +++++++++++++++++++++++++++++++++++++++++++++++++++++ long.amb | Bin 145808 -> 0 bytes mambler.py | 163 +++++++++++++++++++++++++++++++-- output.amb | Bin 7861 -> 0 bytes 5 files changed, 415 insertions(+), 8 deletions(-) create mode 100644 format.txt delete mode 100644 long.amb delete mode 100644 output.amb diff --git a/README.md b/README.md index 6ee47f6..7b6240c 100644 --- a/README.md +++ b/README.md @@ -19,6 +19,7 @@ uv run mambler.py --title "Your Book Title" --codepage 437 path/to/index.md outp - `--title` is optional; when provided the value is embedded in the AMB archive header (truncated to 64 ASCII bytes). - `--codepage` controls the 8-bit encoding used for every AMA article (default: `437`). Any character that cannot be expressed in the chosen codepage aborts the build with a helpful error so you can pick a better fit. - If any emitted byte lives in the 0x80–0xFF range, `mambler` automatically writes a companion `UNICODE.MAP` file describing the high-half character mapping, mirroring the recommendation in the AMA/AMB specification. +- Words of length 2–17 are indexed into `DICT.IDX` so readers can offer fast full-text search. The index is omitted if it would overflow the 64 KiB LoW data limit mandated by the spec. - The command prints the path of the generated AMB file on success. ### Development Notes diff --git a/format.txt b/format.txt new file mode 100644 index 0000000..38c766e --- /dev/null +++ b/format.txt @@ -0,0 +1,259 @@ + + ==== AMB FORMAT SPECIFICATION ==== + + last updated: 2025-08-26 + +The latest version of this file can be found on the AMB project's homepage: + + +An AMB file (Ancient Machine Book) is an extremely lightweight file format +meant to store any kind of hypertext documentation that may be comfortably +viewed even on the most ancient PCs: technical manuals, books, etc. Think of +it as a retro equivalent of a *.CHM help file. The AMB format is designed to +allow for some limited formatting, support internal links and require very +little processing power to read, so a reader may be run even on the oldest +IBM PC. The format also strives for simplicity of implementation. + + Table Of Contents: + + * The AMB container + * Title + * AMA format + * Codepage encoding + * Index data + * Rationale + +============================================================================== + + THE AMB CONTAINER + +The AMB file is a container - one could say it is a very simplistic archive +format. It starts with a 4-bytes format signature (magic value) "AMB1". Then +comes a 2-bytes number that tells how many files are present in the container, +followed by the list of all files: each file is described by a file entry. +All values are little-endian. + + offset + 0 format signature: "AMB1" + 4 files count (16-bit value) + 6 FILE ENTRY #1 + FILE ENTRY #2 + FILE ENTRY #3 + .... + DATA + +Each file entry is a 20-bytes structure: + + offset + 0 filename, 12 characters, zero-padded ("FILE.EXT\0\0\0\0") + 12 offset where this file starts (32 bits) + 16 file length, in bytes (16 bits) + 18 BSD sum (16-bit) of the file + +The AMB archive is expected to contain a set of AMA (Ancient Machine Article) +files, and optionally a title file, an index dictionary and a codepage map. +AMA files may be compressed with the MVCOMP algorithm, in which case they are +named with the "*.AMC" extension. + +An AMB archive must contain at least one article file named either "index.ama" +or "index.amc" - this is the first file that an AMB reader will try loading. + +Note: Names of files contained in an AMB archive are to be processed in a case + insensitive way and must be composed exclusively of 7-bit characters. + +============================================================================== + + DOCUMENT TITLE + +The AMB title is a string that may be displayed as the document's main title. +To set such title, the AMB archive has to contain a file named simply 'title' +that would contain the text. The title string should not be longer than +64 characters, anything longer might be truncated by the reader. + +The title of the document is expected to be encoded with the same codepage as +all the articles. See codepage encoding. + +============================================================================== + + AMA FORMAT + +The AMA format is a text-based file format. For guaranteed interoperability +with old machines, its maximum allowed size is 65535 bytes (ie. 2^16 - 1). +Larger contents must be segmented into a set of two or more AMA articles. + +An AMB reader must display content with a 78-characters width, hence an AMA +article must not contain any line longer than 78 displayable characters. Lines +longer than this limit may be truncated by the client reader. + +AMA articles may contain control codes. A control code is a characters pair, +where the first is a percent (%) character. Possible control codes: + + %t normal text follows (default state) + %h heading follows + %l link follows (filename ended by a ':', followed by a description) + %! notice/warning follows + %b boring text follows (usually displayed grey on grey) + %% display a percent character (%) + +It is important to note that the current text mode is reset to %t at the end +of every line, hence there is no need to prefix a line of text with %t. + +Line endings may be either LF or CR/LF. The former is recommended, as it is +more compact. + +TAB control codes (ASCII decimal value 9) are NOT allowed in AMA files. + +Whenever an external URL appears in an AMA file (for example a link to a web +page, to a ftp resource or to a gopher hole) it is encouraged to be enclosed +between <> characters. Example: . This is a typesetting +recommendation based on RFC 3986, it is not part of the AMA specification. +Following it would, however, make it much easier for modern AMB readers to +detect such links automatically and make them clickable. + +============================================================================== + + CODEPAGE ENCODING + +Since ancient computers are displaying text as 8-bit characters due to the +design of early video adapters, AMA files are expected to contain 8-bit text +as well. The exact codepage is unspecified by this format definition and +depends on the document's target audience. + +To ease displaying of AMB books on modern (unicode-enabled) platforms, any AMB +file that contains non-7-bit characters SHOULD also contain a file named +"unicode.map". This file contains a sequence of 128 16-bit values, mapping +bytes of the range 128..255 into unicode datapoint values. Such file can be +readily output by the utf8tocp program . + +============================================================================== + + INDEX DATA + +On top of AMA files, the AMB archive may contain a file named DICT.IDX. This +file, if it exists, provides indexing metadata to allow the client to perform +fast and efficient full-text searches across the AMB book. + +The index file contains a hash table: a serie of 256 16-bit indexes, where +each index points to a region of the index structure that contains a list of +words (LoW). The index (0..255) itself is an 8 bits hash based on the length +of the word and its characters. The checksum is made of two nibbles: LC. +The high nibble (L) is the length of the word minus 2, while the low nibble +(C) is a simple checksum of all the word's characters XORed together. This +algorithm can be formalized as follows: + + ((wordlen - 2) << 4) | ((a & 15) XOR (b & 15) XOR (...)) + +For example, the word "Disk" would end up being indexed under value 0x25, +because: + + ((4 - 2) << 4) | ((D & 15) XOR (i & 15) XOR (s & 15) XOR (k & 15)) +translates to: (2 << 4) | (4 XOR 9 XOR 3 XOR 11) +which leads to: 32 | 5 +resulting in: 37 = 0x25 + +After the index we can find the pointer to the words list. A pointer is a 16 +bits file offset from the index structure start. + +It needs to be noted that words of less than 2 characters and more than 17 +characters cannot be indexed. The presented algorithm has also the interesting +side-effect of indexing low and high caps of the ranges a..z and A..Z +identically. An important limitation is the fact that the list of words (LoW) +is restricted by the 16-bit addressing offset, which means that all LoWs must +start at an offset within the first 64 KiB of the file. + +Now that we know the offset at which our LoW starts, we can read the words. +First go to the offset, and read a single 16 bits word. Its value contains the +number of words in the list. Then, read the words one after another (note that +all words in the list have the same length, and you know this length already). +Words are always written in lower case characters. Each word is followed by a +1-byte value that tells how many files the word has been found in. Then, that +many 32-bit file identifiers follow. + +index format: + + * List of words + + xx number of words in the list + ? word + x how many files the word is present in + xxxx file identifier 1 + xxxx file identifier 2 + ... + xxxx file identifier n + + (other 255 lists of words follow) + + * hash table + + xx offset of the LoW for words that match hash 0x00 + xx offset of the LoW for words that match hash 0x01 + ... + xx offset of the LoW for words that match hash 0xff + +============================================================================== + + RATIONALE + +The AMB format is, by design, burdened by several limitations. These +limitations might be misunderstood as shortcomings, while in essence the AMB +format's primary objective is to stay as primitive as possible - so it is easy +(and fast) for software to parse and display. Below are listed some of these +limitations, with explanations about the reasons that led to them. + + * Line length limited to 78 characters + + The hard-coded limit of 78 chars is meant to ensure that the reader will + not have to worry about line wrapping, which highly simplifies the reader's + code thus allowing for faster processing and minimizing potential bugs. It + is also meant to allow the content creator to design his screens in a + deterministic way - that is, without any risk that his semigraphic tables, + ASCII drawings or overall screen disposition will be broken by a reader + that attempts to rewrap the text at an unpredictable width. + The 80-columns width was ubiquitous since the early 80' and seems to be a + reasonable baseline expectation, and a 78-characters limit allows the + reader to use two columns for its own needs (vertical cursor, border, etc). + + * No control over style (colors) applied to text + + The AMB format defines a set of semantic tags (like "%h" for "heading"). It + does not allow control over the exact colors or attributes that will be + used by the output device to render the document. This is designed on + purpose: AMB documents should be displayable also on monochrome devices. + There may also be devices that allow for text attributes like "underlined", + "bold", etc - it is up to the AMB reader to make sure the semantic tags are + translated into colors/shades/attributes combinations that are nicely + rendered on the target hardware. + + * Article size limit of 64 KiB + + A single article (AMA file) is limited to a maximum length of 64 KiB (minus + one byte). This limitation makes it easier for MS-DOS readers to load the + content: in real-mode Intel memory models, a single memory segment is + addressable via 16-bit offsets, hence processing content larger than 64 KiB + becomes tricky, as it involves crossing memory segment boundaries, or + relying on some kludges like "huge" memory pointers (slow), or dynamically + reloading parts of the file from disk (very slow). 64 KiB still allows for + more than 30 pages of 80x25 packed text, which should be more than enough + even for very complex subjects (and larger contents should simply be + dispatched into two or more different articles, which can only be + beneficial for readability). + + * Maximum number of 65535 articles + + An AMB book may contain up to 65535 articles and not a single more, because + the number of articles is written as a 16-bit integer in the file's header. + This allows AMB software to use 16-bit integers when addressing the + articles, which is very convenient (and fast) for platforms with 16-bit + CPUs. And honestly - is that really a limitation? Even the entire Bible has + "only" 1189 chapters, or 31103 verses. + + * Short filenames + low-ascii characters only + + Filenames inside an AMB container are limited to 12 (8+3) characters so + an AMB container can be unpacked on an old MS-DOS system. + The filenames must contain only low-ascii (7-bit) characters -- for two + reasons: so it is possible to unpack an AMB container on any filesystem, + independently of the codepage said filesystem relies on, and to make it + possible to reliably perform case-insensitive matching of filenames. + +============================================================================== diff --git a/long.amb b/long.amb deleted file mode 100644 index db99418817dd8758cf961577c2e246f973f9d177..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 145808 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 z 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 eTyP-;?L%ZLs3xTsrGlETDWH{ bool: return any(byte >= 0x80 for byte in data) +def compute_file_offsets(files: List[Tuple[str, bytes]], include_dict: bool) -> Dict[str, int]: + total_files = len(files) + (1 if include_dict else 0) + offset = 6 + 20 * total_files + mapping: Dict[str, int] = {} + for name, data in files: + mapping[name.upper()] = offset + offset += len(data) + return mapping + + +def build_dict_index( + word_index: Dict[str, set[str]], + file_offsets: Dict[str, int], + codepage: CodepageInfo, +) -> Optional[bytes]: + bucket_words: Dict[int, Dict[str, Tuple[bytes, List[int]]]] = {} + for word, filenames in word_index.items(): + try: + encoded_word = codepage.encode(word) + except UnicodeEncodeError: + continue + length = len(encoded_word) + if not (2 <= length <= 17): + continue + bucket = compute_word_hash(encoded_word) + file_ids = sorted({file_offsets[name.upper()] for name in filenames if name.upper() in file_offsets}) + if not file_ids: + continue + bucket_map = bucket_words.setdefault(bucket, {}) + bucket_map[word] = (encoded_word, file_ids) + + if not bucket_words: + return None + + lows = bytearray() + offsets: List[int] = [] + + for bucket in range(256): + offsets.append(len(lows)) + entries = bucket_words.get(bucket) + if not entries: + lows.extend(struct.pack(" 255: + raise ValueError(f"Word '{word}' appears in more than 255 files, cannot encode index.") + lows.extend(encoded_word) + lows.append(len(file_ids)) + for file_id in file_ids: + lows.extend(struct.pack("= 0x10000: + raise ValueError("Generated DICT.IDX exceeds 64 KiB limit for word lists.") + + hash_table = bytearray() + for offset in offsets: + hash_table.extend(struct.pack(" int: + length = len(encoded_word) + checksum = 0 + for byte in encoded_word: + checksum ^= (byte & 0x0F) + return ((length - 2) << 4) | (checksum & 0x0F) + + +WORD_MIN_LENGTH = 2 +WORD_MAX_LENGTH = 17 + + +def extract_words(lines: List[str]) -> set[str]: + words: set[str] = set() + for line in lines: + stripped = _strip_control_codes(line) + buffer: List[str] = [] + for char in stripped: + if char.isalnum(): + buffer.append(char.lower()) + continue + if len(buffer) >= WORD_MIN_LENGTH: + word = "".join(buffer) + if WORD_MIN_LENGTH <= len(word) <= WORD_MAX_LENGTH: + words.add(word) + buffer = [] + if len(buffer) >= WORD_MIN_LENGTH: + word = "".join(buffer) + if WORD_MIN_LENGTH <= len(word) <= WORD_MAX_LENGTH: + words.add(word) + return words + + +def _strip_control_codes(line: str) -> str: + result = line + result = re.sub(r"%l[^:]+:", "", result) + result = result.replace("%t", "").replace("%!", "").replace("%b", "").replace("%h", "") + result = result.replace("%%", "%") + return result + + @dataclass class Article: source: Path @@ -287,8 +396,31 @@ def main(argv: Iterable[str] | None = None) -> int: def build_amb(root_markdown: Path, title: str | None, codepage: CodepageInfo) -> bytes: articles = collect_articles(root_markdown) - ama_contents = render_articles(articles, codepage) - files = assemble_files(ama_contents, title, codepage) + ama_contents, word_index = render_articles(articles, codepage) + base_files = assemble_files(ama_contents, title, codepage) + + file_offsets = compute_file_offsets(base_files, include_dict=False) + try: + dict_bytes = build_dict_index(word_index, file_offsets, codepage) + except ValueError as exc: + print(f"[mambler] Skipping dictionary index: {exc}", file=sys.stderr) + dict_bytes = None + + if dict_bytes is None: + files = base_files + else: + adjusted_offsets = compute_file_offsets(base_files, include_dict=True) + try: + dict_bytes_adjusted = build_dict_index(word_index, adjusted_offsets, codepage) + except ValueError as exc: + print(f"[mambler] Skipping dictionary index: {exc}", file=sys.stderr) + files = base_files + else: + if dict_bytes_adjusted is None: + files = base_files + else: + files = base_files + [("DICT.IDX", dict_bytes_adjusted)] + return pack_amb(files) @@ -351,8 +483,9 @@ def assign_ama_name(stem: str, existing: set[str]) -> str: return name -def render_articles(articles: Dict[Path, Article], codepage: CodepageInfo) -> Dict[str, List[str]]: +def render_articles(articles: Dict[Path, Article], codepage: CodepageInfo) -> Tuple[Dict[str, List[str]], Dict[str, set[str]]]: rendered: Dict[str, List[str]] = {} + word_index: Dict[str, set[str]] = {} for path, article in articles.items(): content = path.read_text(encoding="utf-8") @@ -366,8 +499,20 @@ def render_articles(articles: Dict[Path, Article], codepage: CodepageInfo) -> Di renderer_name="ama", ) split_articles = split_article(article.ama_name, ama_lines, codepage) - rendered.update(split_articles) - return rendered + for name, lines in split_articles.items(): + rendered[name] = lines + words = extract_words(lines) + if not words: + continue + word_set = word_index.setdefault(name, set()) + word_set.update(words) + + inverted_index: Dict[str, set[str]] = {} + for filename, words in word_index.items(): + for word in words: + inverted_index.setdefault(word, set()).add(filename) + + return rendered, inverted_index def rewrite_links(markdown: str, base_dir: Path, articles: Dict[Path, Article]) -> str: @@ -476,13 +621,15 @@ def assemble_files(ama_contents: Dict[str, List[str]], title: str | None, codepa files.append(("TITLE", title.encode("ascii", "ignore")[:64])) high_bit_used = False + articles = dict(ama_contents) - index_bytes = encode_ama("INDEX.AMA", ama_contents.pop("INDEX.AMA"), codepage) + index_lines = articles.pop("INDEX.AMA") + index_bytes = encode_ama("INDEX.AMA", index_lines, codepage) files.append(("INDEX.AMA", index_bytes)) if _has_high_bit(index_bytes): high_bit_used = True - for name, lines in sorted(ama_contents.items()): + for name, lines in sorted(articles.items()): data = encode_ama(name, lines, codepage) files.append((name, data)) if not high_bit_used and _has_high_bit(data): diff --git a/output.amb b/output.amb deleted file mode 100644 index 53b63514e0666152513f5fca7290a0513aa0f60d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7861 zcmZ?tbuwgT2=NT@ab0De2M1uJEc&N&F1sF>K%!()041I<8_!@=yc!l^H1&w%3 zkcnV+O+1*VK(s+I@$m{V`U>$03N;Ef3i=AV@tO+i3NZ>GgCWAiI;kc;K3+d2K3*rj zCcY*2DX9v%i6upu3aQ1#sa8;xooRXqM1yw~)Kj%t zQgsV-!A2z(l_lC~>M8i9mXw0bNG&SOEGaDlX~|8j$jmJ*Rwzr&$t=-PNGwS$QV2^e zE=g1JlIUK5K_Kp|L?T9lrs5Rh1umsp&c2=uRnw+0nkP3354%oEh#JtR6 zJ%!-X%wmPy%)I=fL>+~a)ZBvnqEv;n#FEtfB89xvvQ&lKd{Fw!&CE+xNG-}N(Nplt z&r?uU%*anxC`yC`k*cCXN@iv;C^j8a^HM>HH8U|6lw*?f(^EmQS6o_WLUC$hQF4ZAi9$+d1vvdBXXYj9fpS}Z zu|jcaQf5iMLP35(X-;NZDkux2f&#vgElP#wBrImAW+;RdB_@}ElVovfQ9){6u>vRw zDioIHgNgv`1(A)NEd*$2DuAN|&1el!83!u0^=o2c5ONxt5M3bB#tu*M8xyauP@{m* zs;^%IGA14j^c7+>u~`bUCnml|0j^gcY*4&DJ`D;AF*PyzH8EfZ>nkYe#}H7ippl=i z8KV#ruMbj<-)Mb(P=Oz#ub{7>04dyI?nI{@96(BJV-!F&3x1_wtugVoG4Tp91WW}h zRZxhrwT%IJGhU%MF9pAg6%-WW<27PzZEa&T6cjXL2&vZ4(5TY{X^GcYAmm4=YZM@Q zViXhzg)~G1INsy+iBzqw3kK?twCkByP*j=%O4li+xeB?dx%ov3i8-K}Dmk&ZIJFpD zDJTSI=9Q*`s=3U>T!q5Y%oK&hl+5JJ5(U+y^u&@>NRCuZQiv}pD$PqyEJ=+oPb^DS zEzwhOPc2FWRc9%wpt8I;F$YpU>SmVarDvAtCg`I>-zVCnK?_G*_XZC?8aQL#hFV#8OcG zQ;=GcnOUNclL@Odz=eBaYEdev;!^O)Pss$8@_UCRR9SVB~~hEE955@XBNkoXT~Sz zq$cJmXe;CtWLl$}0ctbk_@pEj=s{}o_~O*${JfOJqRRN<{N(J^5(O<=bUk3}lk!XR zl2i2xit;Ne<4aO2N;HxalX6mhD~k&flT!myi*g{17qDVfqBuD*FE6!7qqrb3S5p(i zNg%@@{)sOsN=!~I$}cTR)hJ6()KSPtDJetMP>bw1P=F@q=jNssC8q|LBqnEL3AFN} z#Dd_&v{a3P(p-(qlG41?;-LKE)RK}!=fvcUR2_xll%m93{{m3MGABI02;GIX3aL58 zshE+Go0*qcoCzu?^NVsdjC2%=i&KJ2iZb)kH7ratbrjO`O5KVwQ}a@CDp7p^3L8+X zGgYs!JhiB#QX@A%r8FniE3quGIJqdZpu{aFKM~ZIRM1u^O;6TQ$j(no%S=wi6}-p+ z0x}yJ=O$+6#Dh{uYOY>EQEF0VUJ9r+R}3mfl2hYLQi~GPa`Fp`HNYv)GdZ`w37>Hw zqx17i(Bcp!O2G9`rAKN-VoGXqW^Q7RZ)r|RW=Udkc4l5WD81(A7sMy#r4;37rl6#R zvcw{Vg2dwD%(B$@vXoK=A`BHNDMg@wQm|FXNli@CD9uZbFHcRQ7^AqUjZ1l4?? zK4BrKmOj)F+DXmGcU1NA+@5oBr~@(C$U6F0aUk_WtM@O+$o7A3eZ{s+>1#qQ79}; z%~e$JOw3g%%goP7ELOtp=7CIw_0B;ZgOdD`%#_qz zXw?Htb7_gmnTZhpD=2`P3&|O&#hHl;pa4%SQUDjO_6nYPDXE~QKr*P-ElVv1Ro|s0 zpu#ynEiE;#I1yZVW#&PmML|KKBr^%z{!dAT7T5|33ZTw@{>B4~&qF{L<1wFFYJC@3g|W#;88 zs4AA0sDi>hKSd!kF}XA+Qz5ssq%=_>u_!mQSfMm8Uja1eP?le;01XdNj|7^2Q!6s^ zi%Rl~K(z{}SOizAy3j6+E~tXhg>+#+ooUa++>}yK^DihrH!%-1f{|K~2@6%QA2UIL z0uupuuoV)MlQRoa6~OV32&$or6+m6bVo;N!G#8Y{Qc^2QiW2n{d^7X%GgDF(iVN~V z2_rc_2k!Zte1+mvQ1hX*2xfXJs6_#ao3tEID+`v1z)_F^>a*)8pOUrbYoYLIoZ(0}q~o2FgH#ZlFOl1qBU-cm>V)_!tFHpP&Xb z1O^%p0}ru52F2nN6d>ba3Se0%TVEkw0X)pKsMEY2faYUU^);2ECCkO z0rmetgJqyD1y~=*)dVoe?VvsgM45iPKDZQ9%}~fNQt(Jk1eNV@5n~h)kRKu82MRq% z;6Ydrv%q9Lc*GFo@OV(5f&2~*JrG9$9H5Y30*yLC0uE#ZNDLgx>hTIO&>#kDi?30r z0S65vm>?u5;6R-^2oJ0eWKRuvG!&!*?6w+E)aff|fCV5VSd{{3ptA-XTs0s$P)``d zP*4DoHSsmzXn>4ALP*f~BS;d&1M36(lz0Lhzz`8&lBq99bHNn<^97TNafjXX`UOC7v>W3ai;DIt8D7e7s2E;(d$bqMzub>Z7 z1dDZ0sDLzs@;!948^i@A6KJA^q&^Tydf5p9Bo-Crmls3oOVtbopUmPCXpm(ngy!WJfksSIz{y8j z!5M71LZU)WW^oC~dBr7(Mc}RnNGLBAVu5OsHmGf?nxqS&@{1HyleEBfw6210Vo`Q# zkwP-4y_^ghu20TL%u7#INXsuu22B^FmP3pNn`_0TprEDTn5+OA#(@k~qSTVi(p-hS%;Fq{MDUmhNR_UFA84>&0ihQp z1!~-aW)HX&6tqE|^h$-)#NtY@cU3bK{E>WbsHXs#ManEFF3nX)$K&E6o^KwAF3DuK&)UUF)&65O)j#N2|M zRB*mf$N-I~>*;~C1Xt#jBvvS7WTt22fYKy*eiJ02pr8QiuBGMYE7&Teff{b0(Rq!e z#3G~)co8Vv@<6>fZEa{jt`QC2O9m;%gImINXyUHFa`B1LB@lVZC*Ac+2&;C zWkX!1VUtl(QedU8pORXpmzSTCnw+SYoS$o_3GoM5Avi~rWR~QB1}mY;p-R&;OEOB6 z^fL4H3o?@v^;1%F^Ys;!AZkG+f}#@4B-IQB&)mdxXcqU)%me!lY