From 7995935ab04abbd343450322b86b7c2574ec8cdf Mon Sep 17 00:00:00 2001 From: Abdoulaye Dia Date: Sat, 1 Aug 2026 23:49:54 +0200 Subject: [PATCH] redesign chroma logger for zig 0.16 --- .github/workflows/ci.yml | 56 +++ .gitignore | 1 + LICENSE | 21 ++ README.md | 309 +++++++++++----- benchmarks/compile.zig | 31 ++ build.zig | 169 +++++---- build.zig.zon | 34 +- docs/assets/chroma-logger-demo.gif | Bin 0 -> 162134 bytes docs/assets/chroma-logger-demo.mp4 | Bin 0 -> 90337 bytes docs/demo.tape | 33 ++ examples/logger.zon | 74 ++++ examples/main.zig | 54 +++ src/datetime.zig | 94 +++++ src/lib.zig | 344 ++++++++++++++++-- src/main.zig | 59 --- src/tests.zig | 212 +++++++++++ src/time/time.zig | 65 ---- tests/compile_errors/invalid_offset.zig | 5 + tests/compile_errors/newline_label.zig | 7 + .../compile_errors/unknown_message_style.zig | 17 + 20 files changed, 1226 insertions(+), 359 deletions(-) create mode 100644 .github/workflows/ci.yml create mode 100644 LICENSE create mode 100644 benchmarks/compile.zig create mode 100644 docs/assets/chroma-logger-demo.gif create mode 100644 docs/assets/chroma-logger-demo.mp4 create mode 100644 docs/demo.tape create mode 100644 examples/logger.zon create mode 100644 examples/main.zig create mode 100644 src/datetime.zig delete mode 100644 src/main.zig create mode 100644 src/tests.zig delete mode 100644 src/time/time.zig create mode 100644 tests/compile_errors/invalid_offset.zig create mode 100644 tests/compile_errors/newline_label.zig create mode 100644 tests/compile_errors/unknown_message_style.zig diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..3835911 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,56 @@ +name: CI + +on: + push: + branches: [main] + pull_request: + branches: [main] + workflow_dispatch: + +permissions: + contents: read + +jobs: + test: + name: Test (${{ matrix.os }}) + strategy: + fail-fast: false + matrix: + os: [ubuntu-latest, macos-latest, windows-latest] + runs-on: ${{ matrix.os }} + steps: + - uses: actions/checkout@v6 + - uses: mlugg/setup-zig@v2 + with: + version: 0.16.0 + - run: zig build test + + cross-build: + name: Build (${{ matrix.target }}) + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + target: + - x86_64-linux + - aarch64-linux + - x86_64-windows + - aarch64-macos + steps: + - uses: actions/checkout@v6 + - uses: mlugg/setup-zig@v2 + with: + version: 0.16.0 + cache-key: ${{ matrix.target }} + - run: zig build -Dtarget=${{ matrix.target }} + + quality: + name: Formatting and compile stress + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v6 + - uses: mlugg/setup-zig@v2 + with: + version: 0.16.0 + - run: zig fmt --check . + - run: zig build benchmark -Doptimize=ReleaseFast diff --git a/.gitignore b/.gitignore index a6ec0ec..df0f0d2 100644 --- a/.gitignore +++ b/.gitignore @@ -7,6 +7,7 @@ .zig-cache/ zig-cache/ zig-out/ +zig-pkg/ build/ build-*/ docgen_tmp/ diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..f762689 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2024 @adia-dev + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/README.md b/README.md index 1f707e6..a8a7a58 100644 --- a/README.md +++ b/README.md @@ -1,139 +1,266 @@ -# Chroma Logger for Zig +# Chroma Logger -Chroma Logger is an advanced logging library for Zig projects, designed to bring color and clarity to your application's logging output. Utilizing the Chroma library for colorized output, Chroma Logger enhances the visibility and readability of logs, making debugging and monitoring a breeze. +[![CI](https://github.com/adia-dev/chroma-logger-zig/actions/workflows/ci.yml/badge.svg)](https://github.com/adia-dev/chroma-logger-zig/actions/workflows/ci.yml) +[![Zig 0.16.0](https://img.shields.io/badge/Zig-0.16.0-f7a41d?logo=zig&logoColor=white)](https://ziglang.org/) +[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE) -chroma-logger +Chroma Logger is a configurable, comptime-first ANSI logger for Zig. It plugs +directly into `std.log`, adds readable timestamps, levels, and scopes, and uses +[Chroma](https://github.com/adia-dev/chroma-zig) to compile message styles into +ANSI and plain-text variants without runtime parsing or allocation. -## Table of Contents +[![Chroma Logger live terminal demo](docs/assets/chroma-logger-demo.gif)](docs/assets/chroma-logger-demo.mp4) -- [Features](#features) -- [Getting Started](#getting-started) - - [Prerequisites](#prerequisites) - - [Installation](#installation) -- [Usage](#usage) - - [Setting Up](#setting-up) - - [Logging Example](#logging-example) -- [Contributing](#contributing) -- [License](#license) -- [Acknowledgments](#acknowledgments) +The animation above is a real `zig build run` session captured by VHS. Click it +for the MP4 version. ## Features -- **Colorized Logging**: Leverage the full spectrum of ANSI colors, including 256-color and true color support, to differentiate log levels and messages. -- **Flexible Configuration**: Control log levels and formatting with ease, allowing for detailed debugging sessions or streamlined production logs. -- **Seamless Integration**: Designed to work effortlessly within the Zig ecosystem, integrating directly into your Zig build system. +- Drop-in `std.Options.logFn` integration. +- Typed compile-time configuration, including direct `.zon` imports. +- Automatic ANSI or plain output with `NO_COLOR` and `CLICOLOR_FORCE` support. +- Configurable timestamps, fixed UTC offsets, labels, scopes, spacing, and + level width. +- Typed themes for timestamps, scopes, and every log level. +- Chroma semantic styles and custom formatting grammar inside messages. +- A deterministic writer API for files, memory buffers, tests, and custom + application sinks. +- Atomic stderr writes protected by Zig's debug-output lock. +- Clear compile-time failures for malformed logger and Chroma configuration. +- Tested on Linux, macOS, and Windows with Zig 0.16.0. + +## Installation + +Add the package to `build.zig.zon`: + +```sh +zig fetch --save=chroma_logger https://github.com/adia-dev/chroma-logger-zig/archive/refs/tags/v0.2.0.tar.gz +``` + +Import its module in `build.zig`: + +```zig +const logger_dep = b.dependency("chroma_logger", .{ + .target = target, + .optimize = optimize, +}); +exe.root_module.addImport( + "chroma-logger", + logger_dep.module("chroma-logger"), +); +``` -The logger comes in different styles, each with its own use case: +Chroma Logger is a Zig module, so there is no runtime library to link. -- `Time based`: Logs are colorized based on the time of day. -
- Time based logger -
ChromaLogger.timeBasedLog
-
+## Quick start -- `Level based`: Logs are colorized based on the log level. -
- Default based logger -
ChromaLogger.log
-
+Create a configured logger type and give its `log` function to `std.log`: -- `Default based`: Logs are displayed in the default color. -
- Default based logger -
ChromaLogger.defaultLog
-
+```zig +const std = @import("std"); +const chroma_logger = @import("chroma-logger"); -## Getting Started +const AppLogger = chroma_logger.Logger(.{}); -### Prerequisites +pub const std_options: std.Options = .{ + .log_level = .debug, + .logFn = AppLogger.log, +}; -Ensure you have Zig version 0.12.0-dev.2701+d18f52197 or newer installed on your system. +pub fn main() void { + std.log.info("Server listening on {#bold,bright-green}{s}{#reset}", .{ + "http://127.0.0.1:8080", + }); -### Installation + const database_log = std.log.scoped(.database); + database_log.warn("Query took {#bright-yellow}{d}ms{#reset}", .{240}); +} +``` -1. Fetch the project using `zig fetch` +The default layout looks like this in plain output: -```bash -zig fetch --save https://github.com/adia-dev/chroma-logger-zig/archive/refs/tags/v0.1.0.tar.gz +```text +12:34:56 INFO Server listening on http://127.0.0.1:8080 +12:34:56 WARN [database] Query took 240ms ``` -Or manually paste this in your `build.zig.zon` +For the default configuration, `chroma_logger.log` is a shorter equivalent to +`chroma_logger.Logger(.{}).log`. + +## Configure from ZON + +Configuration remains typed and compile-time checked when it lives in a file: + +```zig +const AppLogger = chroma_logger.Logger(@import("logger.zon")); +``` ```zig -.dependencies = .{ - // other deps... - .@"chroma-logger" = .{ - .url = "https://github.com/adia-dev/chroma-logger-zig/archive/refs/tags/v0.1.0.tar.gz", - .hash = "1220359dd4fb54e367f2aa310b2cf75227aec8f05b254ef93f3bafef34ee2aa39d0b", +// logger.zon +.{ + .utc_offset_minutes = 60, + .layout = .{ + .timestamp = .date_time, + .scope = .non_default, + .separator = " ", + }, + .labels = .{ + .err = "FAIL", + .info = "READY", }, - // ... -}, + .theme = .{ + .err = .{ + .foreground = .{ .rgb = .{ .r = 255, .g = 92, .b = 117 } }, + .effects = .{.bold}, + }, + .info = .{ + .foreground = .{ .rgb = .{ .r = 80, .g = 250, .b = 123 } }, + .effects = .{.bold}, + }, + }, + .message_format = .{ + .styles = .{ + .{ + .name = "value", + .style = .{ + .foreground = .{ .bright = .cyan }, + .effects = .{.bold}, + }, + }, + }, + }, +} ``` -2. **Build the project**: +The file is imported by Zig during compilation. Chroma Logger never opens or +parses a configuration file while the application is running. See +[`examples/logger.zon`](examples/logger.zon) for the complete demo theme. -Using the Zig build system, compile the library and example application: +## Configuration reference -```bash -zig build -``` +| Field | Default | Purpose | +| --- | --- | --- | +| `color` | `.auto` | Select automatic, always-ANSI, or never-ANSI output | +| `utc_offset_minutes` | `0` | Apply a fixed offset to UTC timestamps | +| `layout.timestamp` | `.time` | Use `.none`, `.time`, or `.date_time` | +| `layout.show_level` | `true` | Include the level label | +| `layout.scope` | `.non_default` | Use `.never`, `.non_default`, or `.always` | +| `layout.separator` | `" "` | Separate timestamp, level, scope, and message | +| `layout.scope_open` / `scope_close` | `"["` / `"]"` | Delimit scope names | +| `layout.level_width` | `5` | Right-pad short level labels by UTF-8 byte length | +| `labels` | Standard names | Rename `ERROR`, `WARN`, `INFO`, and `DEBUG` | +| `theme` | Built-in palette | Style timestamps, scopes, and levels with typed Chroma styles | +| `message_format` | Chroma defaults | Configure semantic styles and message grammar | -This command compiles the static library and an example executable demonstrating the Chroma Logger in action. +Fixed UTC offsets are explicit and deterministic. Chroma Logger does not read +the host timezone database or attempt daylight-saving conversion. -## Usage +## What happens at comptime? -To integrate Chroma Logger into your Zig project, include it as a package in your `build.zig` file and use it to log messages in various colors and formats: +| Operation | Phase | Runtime allocation or parsing? | +| --- | --- | --- | +| Import and type-check logger or ZON configuration | Comptime | No | +| Validate labels, layout, theme, and Chroma grammar | Comptime | No | +| Parse Chroma directives in each message | Comptime | No | +| Generate ANSI and plain message variants | Comptime | No | +| Generate ANSI fragments for levels, scopes, and timestamps | Comptime | No | +| Apply `std.log` level filtering | Comptime | No | +| Read the clock and apply the fixed UTC offset | Runtime | No allocation | +| Select ANSI or plain output from terminal capability | Runtime | One boolean branch | +| Substitute Zig formatting arguments | Runtime | Handled by `std.fmt` | +| Lock and write one complete line | Runtime | Buffered, no allocation | -### Setting Up +When timestamps are disabled, the clock read and date conversion are removed +from that logger at compile time. -In your `build.zig`: +## Color behavior -```zig -const std = @import("std"); +`color = .auto` uses Zig's detected stderr terminal mode. It produces plain +text for redirection and `NO_COLOR`, honors `CLICOLOR_FORCE`, and enables ANSI +escape support on modern Windows terminals when possible. -pub fn build(b: *std.Build) void { - ... - const chroma_logger_dep = b.dependency("chroma-logger", .{}); - ... - exe.root_module.addImport("chroma-logger", chroma_logger_dep.module("chroma-logger")); - ... -} -``` +Use `.always` for controlled environments such as a terminal recording, or +`.never` for logs intended exclusively for files and parsers. -### Logging Example +## Custom writers and deterministic tests -In your application: +Every configured logger exposes `write` in addition to the `std.log` adapter: ```zig -const std = @import("std"); -const ChromaLogger = @import("chroma-logger"); +const TestLogger = chroma_logger.Logger(.{ + .layout = .{ .timestamp = .none }, +}); + +var bytes: [256]u8 = undefined; +var writer: std.Io.Writer = .fixed(&bytes); + +try TestLogger.write( + &writer, + 0, // Unix seconds supplied by the caller + false, // plain output + .info, + .database, + "connected in {d}ms", + .{12}, +); +``` -// LogFns: -// - ChromaLogger.defaultLog -// - ChromaLogger.timeBasedLog -// - ChromaLogger.log +This path returns writer errors instead of swallowing them. The `std.log` +adapter follows Zig's conventional `void` signature and ignores stderr write +failures after safely releasing the lock. -pub const std_options: std.Options = .{ - .logFn = ChromaLogger.log, - .log_level = .debug, -}; +## Migration from 0.1 -pub fn main() !void { - std.log.info("Application started successfully", .{}); - std.log.err("Failed to load configuration", .{}); -} +Version 0.2 is a redesign for Zig 0.16 and Chroma 0.2. + +| Previous API | Version 0.2 | +| --- | --- | +| `ChromaLogger.log` | `chroma_logger.log` or `Logger(.{}).log` | +| `ChromaLogger.timeBasedLog` | `Logger(.{ .layout = .{ .timestamp = .date_time } }).log` | +| `ChromaLogger.defaultLog` | Configure `timestamp`, `show_level`, and `scope` off | +| `{red}` inside a message | `{#red}` | +| `{241}` inside a message | `{#fg:241}` | +| Hard-coded UTC+1 timestamp | Configurable `utc_offset_minutes` | + +Scopes are no longer discarded, and automatic mode no longer writes ANSI +codes into redirected output. + +## Live example and video + +Run the complete themed example: + +```sh +zig build run ``` -This example demonstrates how to use Chroma Logger to log messages in various colors and formats. The `log` function from the `ChromaLogger` package is used to log messages, and the `std.log` package is used to log messages in the standard Zig format. +Use `NO_COLOR=1 zig build run` to inspect its precomputed plain variant. -## Contributing +The terminal animation is generated from the real command by +[`docs/demo.tape`](docs/demo.tape): -We welcome contributions of all kinds from the community! Whether it's adding new features, improving documentation, or fixing bugs, please feel free to make a pull request. +```sh +vhs validate docs/demo.tape +vhs docs/demo.tape +``` -## License +The tape produces both +[`chroma-logger-demo.gif`](docs/assets/chroma-logger-demo.gif) and +[`chroma-logger-demo.mp4`](docs/assets/chroma-logger-demo.mp4). + +## Development -This project is licensed under the MIT License - see the [LICENSE.md](LICENSE.md) file for details. +Use Zig 0.16.0: -## Acknowledgments +```sh +zig build +zig build run +zig build test +zig build benchmark -Doptimize=ReleaseFast +zig fmt --check . +``` + +CI repeats tests on Linux, macOS, and Windows and cross-builds common targets. + +## License -- [Chroma](https://github.com/adia-dev/chroma-zig) - The underlying library providing colorized output for Chroma Logger. +Chroma Logger is available under the [MIT License](LICENSE). diff --git a/benchmarks/compile.zig b/benchmarks/compile.zig new file mode 100644 index 0000000..b0a72d5 --- /dev/null +++ b/benchmarks/compile.zig @@ -0,0 +1,31 @@ +const std = @import("std"); +const chroma_logger = @import("chroma-logger"); + +const BenchmarkLogger = chroma_logger.Logger(.{ + .message_format = .{ + .styles = &.{.{ + .name = "value", + .style = .{ + .foreground = .{ .rgb = .{ .r = 255, .g = 184, .b = 108 } }, + .effects = &.{.bold}, + }, + }}, + }, +}); + +test "compile many unique logger messages" { + var buffer: [64 * 1024]u8 = undefined; + var writer: std.Io.Writer = .fixed(&buffer); + + inline for (0..128) |index| { + try BenchmarkLogger.write( + &writer, + 1_709_210_096, + true, + .info, + .benchmark, + std.fmt.comptimePrint("event {d}: {{#value}}value={{d}}{{#reset}}", .{index}), + .{index}, + ); + } +} diff --git a/build.zig b/build.zig index 4aba497..a7a25c4 100644 --- a/build.zig +++ b/build.zig @@ -1,106 +1,115 @@ const std = @import("std"); -// Although this function looks imperative, note that its job is to -// declaratively construct a build graph that will be executed by an external -// runner. pub fn build(b: *std.Build) void { - // Standard target options allows the person running `zig build` to choose - // what target to build for. Here we do not override the defaults, which - // means any target is allowed, and the default is native. Other options - // for restricting supported target set are available. const target = b.standardTargetOptions(.{}); - - // Standard optimization options allow the person running `zig build` to select - // between Debug, ReleaseSafe, ReleaseFast, and ReleaseSmall. Here we do not - // set a preferred release mode, allowing the user to decide how to optimize. const optimize = b.standardOptimizeOption(.{}); - const lib = b.addStaticLibrary(.{ - .name = "chroma-logger", - // In this case the main source file is merely a path, however, in more - // complicated build scripts, this could be a generated file. - .root_source_file = .{ .src_path = .{ .owner = b, .sub_path = "src/lib.zig" } }, + const chroma = b.dependency("chroma", .{ .target = target, .optimize = optimize, - }); - - const chroma_module = b - .dependency("chroma", .{ .target = target, .optimize = optimize }) - .module("chroma"); + }).module("chroma"); - _ = b.addModule("chroma-logger", .{ - .root_source_file = .{ .src_path = .{ .owner = b, .sub_path = "src/lib.zig" } }, + const logger = b.addModule("chroma-logger", .{ + .root_source_file = b.path("src/lib.zig"), + .target = target, + .optimize = optimize, .imports = &.{ - .{ .name = "chroma", .module = chroma_module }, + .{ .name = "chroma", .module = chroma }, }, }); - lib.root_module.addImport("chroma", chroma_module); - - // This declares intent for the library to be installed into the standard - // location when the user invokes the "install" step (the default step when - // running `zig build`). - b.installArtifact(lib); - - const exe = b.addExecutable(.{ - .name = "chroma-logger", - .root_source_file = .{ .src_path = .{ .owner = b, .sub_path = "src/main.zig" } }, + const example_module = b.createModule(.{ + .root_source_file = b.path("examples/main.zig"), .target = target, .optimize = optimize, + .imports = &.{ + .{ .name = "chroma-logger", .module = logger }, + }, }); - exe.root_module.addImport("chroma", chroma_module); - - // This declares intent for the executable to be installed into the - // standard location when the user invokes the "install" step (the default - // step when running `zig build`). - b.installArtifact(exe); - - // This *creates* a Run step in the build graph, to be executed when another - // step is evaluated that depends on it. The next line below will establish - // such a dependency. - const run_cmd = b.addRunArtifact(exe); - - // By making the run step depend on the install step, it will be run from the - // installation directory rather than directly from within the cache directory. - // This is not necessary, however, if the application depends on other installed - // files, this ensures they will be present and in the expected location. - run_cmd.step.dependOn(b.getInstallStep()); - - // This allows the user to pass arguments to the application in the build - // command itself, like this: `zig build run -- arg1 arg2 etc` - if (b.args) |args| { - run_cmd.addArgs(args); - } - - // This creates a build step. It will be visible in the `zig build --help` menu, - // and can be selected like this: `zig build run` - // This will evaluate the `run` step rather than the default, which is "install". - const run_step = b.step("run", "Run the app"); - run_step.dependOn(&run_cmd.step); - - // Creates a step for unit testing. This only builds the test executable - // but does not run it. - const lib_unit_tests = b.addTest(.{ - .root_source_file = .{ .src_path = .{ .owner = b, .sub_path = "src/lib.zig" } }, + const example = b.addExecutable(.{ + .name = "chroma-logger-demo", + .root_module = example_module, + }); + b.installArtifact(example); + + const run_command = b.addRunArtifact(example); + run_command.step.dependOn(b.getInstallStep()); + if (b.args) |args| run_command.addArgs(args); + + const run_step = b.step("run", "Run the live logger demo"); + run_step.dependOn(&run_command.step); + + const library_tests = b.addTest(.{ .root_module = logger }); + const run_library_tests = b.addRunArtifact(library_tests); + + const example_tests = b.addTest(.{ .root_module = example_module }); + const run_example_tests = b.addRunArtifact(example_tests); + + const test_step = b.step("test", "Run unit and example tests"); + test_step.dependOn(&run_library_tests.step); + test_step.dependOn(&run_example_tests.step); + + addCompileErrorTest( + b, + test_step, + logger, + target, + optimize, + "tests/compile_errors/invalid_offset.zig", + "error: chroma-logger config: utc_offset_minutes must be between -1439 and 1439", + ); + addCompileErrorTest( + b, + test_step, + logger, + target, + optimize, + "tests/compile_errors/newline_label.zig", + "error: chroma-logger config: info label cannot contain a newline", + ); + addCompileErrorTest( + b, + test_step, + logger, + target, + optimize, + "tests/compile_errors/unknown_message_style.zig", + "error: chroma: unknown directive 'missing' at byte 2", + ); + + const benchmark_module = b.createModule(.{ + .root_source_file = b.path("benchmarks/compile.zig"), .target = target, .optimize = optimize, + .imports = &.{ + .{ .name = "chroma-logger", .module = logger }, + }, }); + const benchmark_compile = b.addTest(.{ .root_module = benchmark_module }); - const run_lib_unit_tests = b.addRunArtifact(lib_unit_tests); + const benchmark_step = b.step("benchmark", "Compile the logger stress fixture"); + benchmark_step.dependOn(&benchmark_compile.step); +} - const exe_unit_tests = b.addTest(.{ - .root_source_file = .{ .src_path = .{ .owner = b, .sub_path = "src/main.zig" } }, +fn addCompileErrorTest( + b: *std.Build, + test_step: *std.Build.Step, + logger: *std.Build.Module, + target: std.Build.ResolvedTarget, + optimize: std.builtin.OptimizeMode, + path: []const u8, + expected: []const u8, +) void { + const fixture_module = b.createModule(.{ + .root_source_file = b.path(path), .target = target, .optimize = optimize, + .imports = &.{ + .{ .name = "chroma-logger", .module = logger }, + }, }); - - const run_exe_unit_tests = b.addRunArtifact(exe_unit_tests); - - // Similar to creating the run step earlier, this exposes a `test` step to - // the `zig build --help` menu, providing a way for the user to request - // running the unit tests. - const test_step = b.step("test", "Run unit tests"); - test_step.dependOn(&run_lib_unit_tests.step); - test_step.dependOn(&run_exe_unit_tests.step); + const fixture = b.addTest(.{ .root_module = fixture_module }); + fixture.expect_errors = .{ .contains = expected }; + test_step.dependOn(&fixture.step); } diff --git a/build.zig.zon b/build.zig.zon index 6a66e64..f0e6a6b 100644 --- a/build.zig.zon +++ b/build.zig.zon @@ -1,37 +1,23 @@ .{ .name = .chroma_logger, - // This is a [Semantic Version](https://semver.org/). - // In a future version of Zig it will be used for package deduplication. - .version = "0.1.2", + .version = "0.2.0", .fingerprint = 0x59fdb3f3c96cce27, - - // This field is optional. - // This is currently advisory only; Zig does not yet do anything - // with this value. - .minimum_zig_version = "0.13.0", - - // This field is optional. - // Each dependency must either provide a `url` and `hash`, or a `path`. - // `zig build --fetch` can be used to fetch all dependencies of a package, recursively. - // Once all dependencies are fetched, `zig build` no longer requires - // internet connectivity. + .minimum_zig_version = "0.16.0", .dependencies = .{ .chroma = .{ - .url = "https://github.com/adia-dev/chroma-zig/archive/refs/tags/v0.14.x.tar.gz", - .hash = "122038e074b99abfc27844394394351d911c45671ec02b9d9eb009c6565041f82212", + .url = "https://github.com/adia-dev/chroma-zig/archive/refs/tags/v0.2.0.tar.gz", + .hash = "chroma-0.2.0-dA-RkQf-AQANW_vTJeRiLMCoxwy5Urr2Pd-93p75vVIB", }, }, .paths = .{ - // This makes *all* files, recursively, included in this package. It is generally - // better to explicitly list the files and directories instead, to insure that - // fetching from tarballs, file system paths, and version control all result - // in the same contents hash. - // "", - // For example... "build.zig", "build.zig.zon", + "LICENSE", + "README.md", + "benchmarks", + "docs", + "examples", "src", - //"LICENSE", - //"README.md", + "tests", }, } diff --git a/docs/assets/chroma-logger-demo.gif b/docs/assets/chroma-logger-demo.gif new file mode 100644 index 0000000000000000000000000000000000000000..130ff869c108e173aaf6aa602166ff8d186237cf GIT binary patch literal 162134 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 z

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 z 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 K`TrI6t@uAY*=(l( literal 0 HcmV?d00001 diff --git a/docs/assets/chroma-logger-demo.mp4 b/docs/assets/chroma-logger-demo.mp4 new file mode 100644 index 0000000000000000000000000000000000000000..6bed68dffedc58d5490ee6d2ff730fdfaa707385 GIT binary patch literal 90337 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

  • SnMGULrh@fnLrk{xwl+I~8Twcuod zW^$XC6_>DO-&{IlA}YBmePx&5To_H~ISaM?ryaqEItW+o4fc z%i7?J>Rwnaow$6Y>Dnb7=C<==u#e~XGv)&1gPsD(B#?-wBoV$f-zSk@_9&D)5f0wP zF7P5FLhZZ)?Gsj_fv3-e=xISmBXOW?jOOWG3MD&!-Z6L4f655+9tHDk4tyw{XX3Ot zyXOKeR|DScpp>*~_MAIhhRrFQAsjkd5mfYpFh58sbY6w)YC^0tu||IZcy_u`spF-G zron12OS|*=v=4qXL{3jMc`SEr6)C8)-6R2nH>p_|(c5|sjO8^-7mKd60*oT?DG(N+ zy4+7rdp;MNVbai~iKgRsXb5)pY}VNnY9reJZbmCnfa$vT&vZc)Gw80G1=Sh%JeFL) z4`d}txRpvAhr_T%P+`^093jwTrNxyUIy*p;>ESgQ5fyzG%1O~Kvz!+ODV_c?pWVf9 zZgsv(>k&-;de&c)i}jYDc}THCkTX1X2%{l*RwtwmEtZW%X>}zPG{`08QmF_l()hCo z64{h?7UqL2rWestBuLR_Fn`OJi(;VB2Fdl7#*xA&cW{A)dnheG9`eGb=i`O(ZF8ew zYIYXkM;LIWNE+2yF^U%=>BEdeVbZ@FQkIH{8Y8EF4uWP4vq31T;<6Je_B&@njw&8X ziy9-pBNS&-2x_Hsd8yIXF$#$8hu0_Qupq z#a|<3Eb&gsnc8!W855imiwJw|RIYC@{rJKeC703tK@W?{X8xhSCpoSxZ;?rp<4yieiEeG7jYlM=;y06;edq5$BHd7UDpuk*NWbHe|>QID0|}nrFPz< zk#6;zrJj05Tqv_sZGm8N;OfHA{jpTuxh^n{zACokg2lWB{>X+ccKJ9xV*0y9!oAXt z-IHhZq{bp{G57|g>*G!-RjLo+@d}1TjH04B@nUDdsMRz|nCA4hDV_kQgq(yTAz8ZB z07Q$5$`vH?wo+I7Ls~G~(dV%Yr)$dDvi@RR9#$RBG`O8twScE= zxT!GZdB}HdG2%&gX0Jb#C%U(^A712A<-js{@DR<#>W}V@Xlk?fyVw#6G1)FJ+*d?mTN~e@`df+_%syt=xrBJW7}yASsD)N z<0}~T)5k$9oZ6Oy3f|S_EVUx^Nh0|$u?h7Ec!AJJn5Yhih@J|cFI=e7f@z%{lvS}? ziD?GA)&7s{G~aIT9Iq$5^xD{xvB3&K=D7yTz{kGVm|F0IP6iM?`ycAly9UsYqYP9= zyYk>CeK=md7Si3h1m>PcxBS#`m5*f5Y4Ua*{x(V$MQwz!kNQ;X7GfeQN+nLZ?NWZ{ zmpyBBl`<~QkggQ2LhPL{6$sWw+DJ~`W6EjuW`g@k;4wvaiA*wQ!SGKQU?!#B~8B zW|rG2v|*dBktOw;xowr&^z*&?G0S&kX_mCtn6)05?K8H5-)m@LYZ+x3s=YYa%}O3X zXP)?~`QlLCU&RE8M}9mCqoKlQw=8@|4Y{R-shZ-AD%x3gr5Hv;(TxmLTZ{kx2Nh%H zxy~t%-HrZqEFhJ&i@Kt|CERsn1(YrsSZm^ATI_T#CM15#Ln{1|=|6)m1?CIm=RsO* zQKi4~<`$!Y{EbJ7{G7)tICWy`rAQ0SuZ*4-v99=}TP9*E6E@M`_4f)v4SMc6caxDs z3_OHa55BQg)CQyDGvJ(X&^K1&F`hYDIcKb1VU4)B>(_dMkV4n- z)4OlDs(S{p@@0KwRhz{GCwyj-FlrCM`(7K6{jcsqXeaZ8aYEoX^Lr;&L~8PWQ(RmFu8%}`tEj}sXxA5yxW>xIL{c;#JtS$SQi+jwy8NPY&ts0{5JKf+>T?-I~v z8b3#6Ux_g4JHlb9;$q0~EW`@2GU+gJu%5aVh z1~O3k;ds0vG_uv7>KV-BfTaxa;cQ+?;RTPzuytVW%YooF7px`NQ~8hAI6A+snK@f6 zavuqnaY9}djw-d6Z?I&3jOTQ#|D?Wc4LswgM$U#cB9yDT&wRzRcVVl+R36!-HMoN) zRYhIrq0ff*D-oQtSS1t$IDB|zqU%I%DZiAGB?yirVRLdXJ`N|VAI#fdg=5%f-gB&o z+2>dM>@kJF#viyp6n-T5(5clJpSPh9GG@^-ERgBd2yEhg5xLso7@Ci^0n_}Rx(@g) zN|lW^PGLYN4wsFjgiH1+T%+J8W9y9~LY}Km<^TyNKNZf~EzSvZnNavv?Kc3YVAG%M zM^)s}`Pgm1!cR4t_PUYn^f|c`^t19oCO*6uHt09?YWp_AYK+1TQK7LX?;hH6blawO zQiAHXp_EI$*t6QKxrOA3t&@STY0zTruRwpw%*H5Q;F%oKBAPtW_7d&GkjDYW_-2ua zDuDwNGKi*irt!{40OLFaq4b~&Qyi`H6k-yu#sR(|Qk7BfOx{G*N?2dUE;+?>25VOR z+!!cViPwr_tSpcY>B;^e>jPcF+ura9rU>=f_R}-*$#UEpxxYBv^iw@fr2y zg0vQ4q4t`5G=|?Ai4@9RG9`~)!hirlp7Otg(?HQvRWJYg?9QF#5Y00~^J!kOd%^ICqi0Z97Bg*BO|;%clTV9q(aufb zvRw8OXdgk{Kf!&%DW{j_Tj&p?6Yk{q5&&@BYO^0V$Ru&xB}%&cVf_RZ!cKXj6DH~T z>p=v}2>;OY%u2b@lK|&jnM+H`@Z{d6WaBQ*u~=59X3H$@Fx;sqW!DpI3gso_^7)@K zBYx*}H!boNff4!taXuzbl5}HuCcuuGOcd607d-*e>b%7;p-@S~Tkmla_ZwiMIe^{N z83e)^W3aJ7AAWByRyJ(|_t#XxtBs>IKiC6XakD?T9O_-^wFz!~>X(;t2|NL#^TQeW zxZd%2h^HE?>URt)oaTCtn6S1M^Fav^-7sJD@&05AWQp-CphFj3>U1-*hVbkBhSbv{pK5OQTsnLK1V#5AfMi-5De1Z#WERoQ40X6gdd8OPQ2 zClZ>WNZ?uI{k`jniSfuWy<>P9j8wJv>F5z57+ja@DN9Tr?~n!iH1FE2c5{~kYhjt2 z7z(f&b2B7igj+7RBEpTEV&^LKPj~Aek7cbR@e~c=tAK+W)y2ee1(dG?fzEn_dff)! z)bBnt)=%rICawlA(U3v;sFkx8{Lkqy1i~)AjsEPq_4nNltK{#g^X1cQRQ;g_ExbR> z<4%liA`@Ri`!zuAI|CbtooF*M_{d!My{&->WyM$Hd4nY@_@d4qD*82Vnpxp;#0h^F zLWg?u%M@xtA9lffZ$Ho>To2{9(y}|V(Emow{q2)SOxY#<<)=iNDe5E+YPgRL5~bbb z&zHoT9Tqo~X-;B~y))tBQpt>P{}!*1;&-x&zHfyz<6=PfhhpK*!GhD_qkus7Wd0-p zWP}|DQ=ImFWt=vzykhK|b}%g*ETzPelprIYY3T{ux&WUc(*57?XHFSHsTQQu1eAik zXS+w9%>#@D=j%a^_>WvTq2&pHNqy%xZ0>lHv>lYkjjiF>>LV39A>{T~f(>812ok`BiUbpziIOk;b4Vn2Z{t(=oSZ^Pe#2 zNjDq*d9@ZWe|CQ`Xez=OVvsTE5T9K8Hap~a-VvQzUwKUXQNk_0#dGsAJT1nysM|=n z^_fN#kav_il0ALxHRk&t@Uz>Zuq4vQK1a9#)X6jJ+GE8wm)?P%fw}#{4g~CZ@qUxI zWD;q%toj>K;>EXDUWYIN!kdX^wxqG7(n_%Ld=zdJ5e0hq{u*T z?FwdcfF#L_jd8wXWxs!ebH-_Nle+6}vh?-oZ@Wl%uc=Nq@Tw$HeXssCX?-|K{{}LLJ$|Gh>z!}%^&CZOq=B)2poKezsgs>A1@Re;2!97O=TcH z+@pv9uSVfwaGb0`wDuHc0}xd!2GxU$Ik|C^y0%TPT<*%EeQrJ*H-wL|sNFnS%|xYV z^+(Y%y0KrxfB98iISN@Np)spdveUHtj-2&T ze@ITQ?FxRg+x!gN7{b@o1E?yam{yrLeHKNRZJPOT6|wR5BZEJ3=93!72b7)K$!N$F zzzE11z2c6GJc7q6VejJm57(j>6`5-Q^J&aYKD0tx60;eHmhcX5!H>9H93?^NL z+f-Xu=f_%(&NMyhLE-Q#{p2& zZSaLga+&oNsDq)u5jUJxxwYSkKBq{QPE2BNAF)2e2nwN~b6^I%K`R|%LvWenI zlY(KB1Mlb-zRq8@tB;Wz_WpLK?2+BkWCi#YxIY~pJ@G3Dr>oTOQ;?O4Oh#*HPx?93 zSyvwTIf!mS2ijO-@3LDE00&FKE zfD^01r}Z99S@xH<%t^?+`HP~)Y!jBFMK~qz$nkS!xD`4*jrLP4)p_8yI+dVwE(G4M z-mI@=9V?@yWC)8@ZeeV%3SqHfir&;TPC^Y-Am&=@^mAt9fh9-)0X$t-ODhJZu7qwvZAxI)&hY1nA$GWJ+-Vh^y2l_a_X zp777C%}XSk?+Xdb=|Wi@hl92=^aV8r`a*mca=p!p&r5rYp-hV!vo9*b51j=jQHs6z zq+s|`a07dh#8ahAgbAQ}D0BT?QTli7ZLA#DGEWoz?niKo)%x;}pf!IJ=OcIrMq@FG zb6gV|>9R{Ha|ln|2$5Uk$0dtOUCJ=UH48dVMLR-@rBjC+DhOvW5Zjc@*nZQ#P9eh8 zD^sXHgj4l4OosmQYfkH_zkI*`{s%7Y9e3TnY_{29?2gNG@I!yY$e?A>8K{&tZ&CAP z)VmO8`a&6=W{)3a8JXsF`fg^+tzcR*WBJ`x38*4_XoO9Dj+3WP@Rax zFXM}MeZ#=dZ8qjzubY2oUCl=8aECHt9NL1sR6kBVd{-IEqIx*Y6GLmc^Dr+L(5cVnl|2TWc@XDesZFI-B?WAJcHY>I(wr!_k z+qRR6ZC7kNsn|ECPj{c{zJ2faeEoAh&lqFQcdoV9+T$J4p?a8irOh$gef{RLBtw%; z)w`Hv39fek^7BMPu;TlkeaOJ%IfQSIFy6TvO>_a_NMKzfHoboYKG!KZ)^25Fl+7s; zoaxF@bYc&b1+J-gCkDF1KI@UsY(KINxn&Ck1@RxvM`q%vb@zlz9bg-dilV7YnrN{r zKUV;%fXXiulzm>q0X%k{ZB_P*r9NCMi;RSQqqMzg{MsU4q~zZpguJ}8L2$ok zbAOYvL$8g>4U_vgql&ucERTn841U=ETsS@d?(ihl#<0f}Q0qpzj((g(d%gz&hk-%o z!z$(ldR^yj2NW|1?4gDUg|9aOx-_E=Os5?W$3t=ORN*+3nPI@7a~LE|==@SLw2Mo| zF11i!Os*|M!e`91M^ew1mhPd<(MZ7P$|ivZ?}uR82^ZOAN* z#CA)2|5gNy2Ju6XiNKA%goe7dGa@SZD+MjdUD%vY zn(J;*2A-rr<&^u~${6;6H-6bw0uPn&tNvE~@EfS>g*R&7;Pc9j-^F1=!Q%^zpOa*F zOS1Q#>0qOcS;8kXk-r|gRjLYiuDlujm&99>l__ehSJ=SKO&Z1)zLmlvpC*rLoqt5$ z4x;(3H%GZ>2unjW?4Ak>CKx($yK|hD%CArFf5KFj#xMaR#sE)~Qbl<2wWr|Y z!}BxJQ0#;g2CHRae(uUGkU9H1B6PpD;%Z9<7)&o&C}Zx3?VTst$Kim~*!l2;d{eGH zrDmqI`fy(#^~^AzH;Q^F{^4TQ>fAe!)`j~J#mA}+EQxt2= zAlJn=o{D!)?S0b*JQcxteP}(=Ms3Q_M)vbMxBzAq&dojUX8lC?$)X$4*{~!=%kFsO zLS#!^zLas<0H#Tvej0bDnt(%z*YUT#^n*sx*s~aLK&{;~GyCgyG z>38(3VhqA*dZsi6#M1;HR)5py8LL-VDR~sZ!ru4TxByg|?N8={k zZHFc_s&;n*=1ir`NX{Lg!UZhza#(3{SF9@Nm8id}&wU%^pv{Hs`Pm7W&e>8Qf&IXf z3%g)#K6)%f4{`9=Y|j{3iA*F;i6@x2+fLmWBDpBU6t}<;ml0%ZG{!4CQiXHZ!aaPQubRE zt@DWhR88yLfUjP5(d1*Mn`COy4SQ{;?zy@5(4hbE8m*T@>s=s1;PD7%3#rEq`QQPdOAnoKl*_Y1*fc=}4; zSn~Y`4x{r1Pk)o|7C3cY7SL&NJgg=`x-p55v(CL{>!NMV9pP`gf}ew}+EQ8G7wZyy zlc@5=>Il{B)O}TG%*gqB>(%Ac_6c{& z!nys7m8OO*s~=-r3!Tpw0pF%Bn{A-O=$Z9FR)NYz9DTm4kyoZ!hI8j~@Ahzgh^dzI z{=suV|HHi1QfQg-{9ds=LVQ(MnLMaN6#iO2&YO|2Zu^HFuj>xW$!cBh5Sc6g{e))k z%|$(Mc*i5Bddg%XHBD@PshE{)i^GKW{=F(uBja#AYt0U=GieuuBw^O0!!{e#-H2fk4 zy=KMCL{&vJp408dt?5R&mk^~(6hq)a94b^_M#rDlKiLbj>-wg#U9Xufp;@LvZ{$c| z5d8PEkZian^dF3I{6^A|!b*Oy*=O7Rp5L)yMS@2COlJmf{Yn`Ak9uue0RR92Mlh#d z6piK|rIjE+-|f0WuKei#Ja|m5l99J$hXD(aevClLoq=L{&GrCw@qWtAZ>9oPgl=Zh z0^L-@et}@#FwrQ~NJxG2?TntNNFdWAOcdid5ik*qS1>t7gZ(*9Q~NO$=5R}-DSuax z8)7~8CgP0vh`n~jmGs23b8`Sxs%aE`=JLu!5Pioq+nlKiJTy2(7}<@}O(W?X4K&$g z4-x-PH*)}sH``1!Pvkd%8Vr}e5G_)G#G{ezZ7yqH`v-GS4_}IgBP6W)=+I_?gz0`U z2LD^5PN+{_=A>UAyIpvUOF=UCRIF{CpttRv5+lD>RT~PVikTpF^a&?AE|Dhwb?G+E zyhHPtI#%n)3WGt6k)*lJgaG!SVv!8E!Z6)-{4K9?HM6q0)@h5{_MPUyZnOdH&-f-qXk7n%;?2!NE!AZT z3udxlw;lV8%ZBm%^4jM1)*%+EvSR*>0rvSIsdi77dj9+J4n3CaeW_2E1-0OzUhj8? zj}2BKwX9x(r9?H|r}m>TI{sFIrL}MAA4eCw(^`G2uj6S=FU@g7sEJ*r#~8wkCMml$ z>#myAhZ-L_#!@!y10bP+zXVA$o=bi3S}Uz8s2J@VeR^(}$;eYeW`Z&m*1JRPI3NtC z`^j$k4iiFV=dvo(8%RLwlOZH1zXy1O`5*Q+nB0pN4IP&pHdpFKr{w1Ska~F;Yblkf zX5U}{5MHlkv+EhMZRn~;lRM&S+N|0^#uv&@pmDkx$m}TyAKuThCbGO)8g?3mHviGf z#Mwy`$cOnO;l1RZ9BO}XHF@~^X#h}bn0&`WF2H0QL67&1r&Z zh{kWy&p`*$$Sf_>>i}q#A>6jjSFC&lsih%QR{6lQ>;+kz72VL)x&3Qgr+beEIjiWL zU8|W~P*y6{)r<`_%8XHa7Dm?Jv3=P4c)pLF%_~#s?Sul+%F1p@oAzm+syrAvqHmMF z6+~>Bj|mtotz^luePCT--6-aNTqfEbE=F2RJs-tG?a^AOHgf0GxAP zPC4psc^9%tql1EYjCoa>#Q7Sly46{Vv%#ZNaJsv5t?qG>JDly841*p!F@uB@16ZsA@ifXRTJ?QzinulLDq|4<5 zizNqai-G!mM3eR?)4N+V!c|kWJ2A1+lvLbm1lgUzH@i9te8Yp?z$cpzjf4K=kq8ki z4i8Jb`8$1&LYtEuabFc<%bgzLz;wZ~<$c)Ujp_w`AE#Q(C1Z+h4oho#IU4f@yQ=G) zaKS;VasBosPeZ=nsD+kg2>Fwr(7jE_q~nd6qz^Bq}zi1=*f8f zP{u~xlW2bJi0^o7WRM3e2q#Je;$kk0;wOe0V6)K|sImf9h++;R-QY194he%2<9_5h)S5G8U3{~)?B^Kf_$ZIi*%m$-tD$N-|~|! zPz&0HN!g3%MLmGu5wdcLKh;H6KwEME7Wt)rk4a9$0aVvEg8an{KU&dw6eX{b{T5<; z<62#bSbEt$c`>n*sA&RO(mTJnt|HiUM;>FZDRp`w^ZsH`;_;!z z`c-L0LI5=$^EMVpFc2es#@vF!UYHAsl1BQYvSSCMT8f<;R?)=p(-oOlNPt+ov`(J& z&AGd9s`3rJGx`>dAUt{;!v1j7lnkY?UbQibQC|6|@e%~_?TseYCse7b zEpK39T73xbdRJj_*fcCC1~bh+#<}p4O-x4XYOH|zr9vC+#7ilm+^i#{HwJs%erj+e z1shUHb3ADdJAi>Sf+jM-JBHoV?+J7at5}CN3xx$kWcK5Ldnf4^W$j&avI>}H z^+7Hge_r#qN@{FNr+zpz^7sOW_zilK~7Q$ zjR5mM#HUZdmm^AsAX<{}+|#IvN1e3|Gu---_Sa$bYA&%wuZ-Sfv%lj-1$T)%{*bew z90rGaxghX^II@b?yn_9?0ZS?)z#@t*hg83S?8dcss_=2^66L0{r@0ewxRYr#wmWX@ zwXA@B2usco1g$=49^Ql=8Dg;#FCpM|I>-yHSi;k7CpD6z{yWaeK!Xq_p>h`_7S!J+!#FVmq=0-q!g6K}X z`?bi~eeJ@Q)RHAK5n$Mz`rt^54DR2U3ZrE6( zi!X!bvQ<}?RXih7b^F>Ro=IpNJrOPR+3Smnw5%vB)P%V;5@|S)x4jR-o4&11$3}ge zkBHS1_qwbQY=KqWcv7YT#s{N>LKt>?YLKB zAY__5@Tn&vYfKt16K5iSn#G(oGmD=}LG=p$Y?49KwGvt|T#v8;hB+i{bvqfYm?XSh zU13K42I(?zW_rij6M3*%^Q?Hh`@&?li-Yy5ekVW!bONV{599aIx}kRT0n9qiWw*~x za6pqNoLbPOgg^;ZNA$adL|0C&e$=41=H4%mi2K(h!uW;?&MsQhXgxZd#%|YQcy{_7 zAIn+FQ%CofMS9o`MUbZNvq;=DXhGr=U6cLn)|eoWD4Mv}lyCk$MoQ+t6Cvlb5k1Es zMlbPM^=7xB|sClCkz*WxM4u#Pbt2XC<&}Y8gzG0&OzVOp>&$@Bs zH;Tjd{;keq_xiFqeaRC{|(vOA5srm0}e%=p)||qpKWWP z)7$h(q`1UGLoU%J9a^OR8jMUq`9cqCKYw%W&rdjXHELt!4?VeLw`*q3t$+2>98E_b zUaS8eID@0&IQTMOs27zag}L8O5y`qn#qfN0-@f<4(fd(kBL+3%F}IAccl%QyVV?!n zz#swYb33%W_QyLE(f0y<6#w3i6O|U@Z9do^6ZIWXD}x+L1zeAukY^M+Rq;kO?X(mi zB4GhNTd*$^*>gx-=W|96xhReCgDsm!HG!xOWt=PC;1sYk18VI&b_*@DNb@9f>we;8 z*G#rev0~(E!ojAlZ7sYEst#F_2UwsLni{Bh28?!IJfLh#!q>h zV*QJb`G50CH#x2=u-ak>0kNc|TlTi zjnQ5;GG~?!&En_a@G+*LOeZ&ry*U4pWjx>UVvFrVY1bhIc%K)cO_UU4DUw}8f7^(8 zXX+Rj&nh^7om7Q!{~hOXcm4Byk&hJYl`D6MJ?e)mc5CcJD1# zZ@-9h5ixl93HMQHWG)jqB0u z+CVw8|JF4K1ZZ`>K8!~XM5i)`#|sC7YE37_kiFx0;};ee+5-O055%?x)ecp=*~@c! zzS?-{mcY;{HtHU|$_)|le7|~{r7n6^HnoL+`&<1_j~i9t%f2H}&isGY`r5y0=4vYW zzW^DZ-9Km91rBD*RiQMGCpcB1Py=VcmxfFFrCa#XiBqlFoPQury%9Lv^p(7IEWtNsksWNOE8@$Br-Z2F;92kAA^dC+>fOs1KfT$77SpIJ%!XQAy z-jV>c3XQ`1b`n{wuAT`Vb{nvo*E#R(UyQ6uslWog^R+*5LFiqm@A=+u_&E^XPb1Z# zSG+DOntnFz$tp>j_vs~C)f5{~tp>h~)!ZKI`hapbeN1CYR#EKaUB?ZArZ5}RhHPLH zOtM>2cBN1&_gYybZ&c~p>SBG`)uEO$ov=z1&Mk6q7g5_N6($7{(Bg;q&dd*XBmtlPrE;0)yhTZX~ zx&lj$l=NdVj+tPZs3Nar%7mfqv~x9b5~&St13F*&Wr@(B>w|(VRJB)5&Cn{DX2D-L|21??$YZ5S zIKWr#9L%-I>LBP@vXvIAnJTe;+dK{>oVXj7pN}6+k|2Zve5MxUXY`1 zxSGi4%8N^NaYi8(-{Wb5{B@gzpgxBQjw#0Zsl0K&yEM*M;C~Cdl|7TDicHp_e4Hyi z=De<=&8Llj_XmhHQ3{x%0Z*nyQ zmNXIUXHHG5Nv5tq8Az3=R^s3X#&-bHH`v!pMMJ3Uafk@AxN;U9?vv{9; zuL~HHxgrJ8DH2;D=u%oCZLx>#xATArd)Oizn0Hh^d?mQg!K@mNVhtukYRS+oMIdu= zx13xMkYY9XCg5sZrIRf|JwA=%>K-4DF4BcaGe@YsDbnE5pUW9l-vAPq z-G8_;;dM^FgMF2mdnR+5y1wbzc0zGETK=T13p}FE{0%WR)<$}}z>qLk?#gBaBxV{o z5_4sqq{vMT(GZBqb_AVIzZ|mj#>|14&D;jtorOCSvVGpv}afY0O(h3#6q?q+FVmiget^KtXJ2V2>6)qRxg z`*h$wuGwX(ps5@K&J8%HWNr1h$E%nF9b%OY#{o9-pkK#v~Zsl%nOQga<%E;XRdaR1TaLxLb`8XIdo_Vi0g3( zFi07I!IMB;5-ASA(mO6w8(GoMqAC!S$FVn;;Zl(!5`E`txX=$$BMdxOa#UzgXTY2w zzL|0$OivnEIvG#_a>^{QRX6C_C%h3HtTu* zShnWf9Xro+IXV+x=e$VY|Gg9PC-$HsVQ}P0Z~I%#EZRtDaj>+pNvC2pX6)Tmr5|=B zvgeZZd%PPhZOJDz_4+ejWBVk1~Gqpi!H0zYq!jKnFTDAm5 zEh62jQIQ*v$-PMRc4E94{c)y*Dg%-K%ah$%mM5da&*(&iIZR%iNg<>K8|ahG&98{C1yJI68F9!={26QW4Cxc5Ai zs*S2>c>kFS>534N@foG`&V(NPJtV6m)C}@Bt50xv;lVhX+JoNO zQuEcHh$!|CLS=}}iRV|1+Bh6zP*=;BP%7bu!&X5zumxo!&iyn0nl;bF>wK=_n0Jg) zz$Io62r)J@Q#t5wr*78I5wu>)@jM=Q$(gM!i>2=lgyX)4%e|`VU1%m0V`FzRY_Emg zV_doqkp`xHKc0|#bJ6HN_e^_KJ+o6}aAawUTW8F^KEnU@MaBRKz*pC@7JgjG0aW>a5%c+iIS+pm^Ny)1T>Nb}^lUNnu`gXqoFsZ84+X;UQ@h0i zU}G3APYHNdN?=)&ppk%IrbS>t|u7R^E@F;ZjEZ-PgYfoTyH<=6GH}1sc+# zs^Rcz2@|~;62!~p8boSG_cHt)(huj;nYSZ)&15UEiEaXl1M6f892LWFnP-p!<$BW? zuTj@EyKFL1TP z=8x4I>U({;+*drN3WKCJ_w!+{%b1+7FdN~9fcmc4SII?8ea`-lnHslg2_?|?TC67O z6?}1^G#-PR*_7(E#PyzF2&B{KhAYF*S#}n=SAmnt-_^gQ@i6yTLbVFeyYg-x++|+s zOk!wOStf)m6UFI;+6g{O-G`yr?}~}9efcfM2m9TNn}0GpYfQ*Mb%qZgXh%1i8z zRZ;y~tir?h=zz$v5$Y z@Nf2*4wxzeJ~2BpCe+aG>ChHOoNJ&}Or>HBr^j|qI+D2PBNP1FVkPkC{Q!u806>&d ze89SKJ4$jP82kP=j9|V5Fj$*!W-#hvF_U$XqM~lJg3MnHofW9O*?IdGio&kPIWsCy zV849I^FQJ_e0V+qzw*y;{16KUWL7O8jkC^i3{Zu;Yqo@w<90OCnyV8~RTT6V2fQkH zgeS0)T;+Lo?!9N?ku(NMG%!*Vn41t*j6>dI8a1YC8}$Sj^kNZm_cg$oK&g;}<yMN-~sgk>@HggknYCda9uj#VPm`)(Tqld6Q>NbWshLw$nj?HV}!S)4jJB+inb%<=~k^cAZrpqQzF$L z{4AliltjAaMe>);p(sH@2GP%Ib}msRrp=`M4omila05QUX6?1xNmIvDt$UH&$vm8j zR74=mC7#Iz;9T*>Z9lFSo`x-G4y;C6OJ5tg+DLKrgbT$g_|jat!zmYI)n0SE{A%7T z;{@_khu@X57@B6?y*cSe92sqAv8~RJlK2++RxFrLEcJ8>ryI@;DEeTdTQcPhp8d=R zRtGaryN*E-rYt|+U+JQ}^`0Md*{TRH`#0|mYL|GvIUqiN^L_0ad>SrYe{Pgi)G&3% z|)_zKI-619ggF<{;4o2kED_-RphVy%ClR=`+ZU!H?iB?a{V{@>JTVy4H z#+#0^*4~kQ5bn@U9$xXtOFRo8}59h+tnm4CH>Ebi_9mD=A(VPvz0R>@djpHb^G1>{khvooPz{xX}9?Rj6{Z zzDIRGI^wAI_4}F0!b(u|1TrEsW;HNBIa&=N`MGJ{13{f|7%OzZg9P?izvW=1CRSb( zW64zxtdA@`oBFI@d0rx&Dh6u^%y=*~yhB)YbV5eeNDtd$j5Y>r#d?P}z0O+p;peD1 znyFM;sN?sMX4$XoXq#8N36td_FgiCE2)~@_OH0N>z}>p%@BqD9jrJ+_X?XuEMRQn? z?~J5SvOGfJ`f$_ulWpz|_}+jh52HzzS%FbTbX&L`+0o(AKP_LZCO;)UVSF+>D^^$e zA|8{GgSn3{c^whgso@W|IkNbhzHvk19Qw~Ck8eaM*VMz)AXJoXi^1A?0U?cUG05MB zbC8cx`%_bCj7!B#DuM3GVClw)yyXw>rJVJ(<_fffDiz1aS)<|^gQ0r$z)eo+$GRiU zLWurM5YZ?cvWJkhn}O--Wfq+&)N5Y^N-@(cjJp5&Stp8bU|yTE#2OBaxyAF-bEQUu z+567o&w$_^3coc#nVxS|cCf>0$UV>2E|{aR4z6!VNt!}d>!*56pU^g$bxM!iZPE;d z52E7rb^LU6D0!H(q$fjzv|{@raNAgq)JlbZeiLW_AotfneY(w`e#^D7b_?w9kvN;e zvS9sr7STmyWL>6S_=ER)Mu?QgU9qd;PvCIe0W+x;~v*PB`gvJZE)^-S%=Qq!# zr;-llji>|JlfdHSly^!A>(gqzTB*y4Bj7ET*_7ASY~((pT$)m*M*oZ?#Dh zm{P(Z@|lgSXn3v+3qt3~ezZ+FuL(55t*O>brl`jI)>u)z$CQQ7x?88A+RMZ zNTYPe#*ll)tFjE2njp>X{5=;uco8JShgA6;Gb;+?Ajp)qA6%vo=^6Jg*M``!L z#15IwK2A`XD%6+1kHY3=a1eLnnuf^#eFLn^r<#DMCV=o(Y)(G^KF|XO;~S}xCO; zFJM9v0rIbEYw>a9%B=;KBzh!O%u?vruAr2XJHynHZSkUTN zp7!T3H=Q`a=&kl38#u6*2z<{|5US`rEYLYl*-s-9a)Z{`H$sG<|8!MIMUMJ#oDJa) zU;z652ErKY7H(dq6tX$P9q9W~;_lL&Lk2O$FzEbZPJj6eaEP7OU4ld%VxqdI5S)z_ zv+VR#lE!5q>>_WUD&f7qTr<${8b;uNcVB_56Pu)KX)^u?ub7XOnAs0D^dyt%_V-nG z=w8b~=xRh6s?Rufr=m9Gqc*k52u0~EzF-eCRXEQf0#|InGaQPzW=r603)l4=_nuYD z?DLNwyXv$J`EZ;`;8W+erD+*Uk&gsL2o|EAPPAj?aIElT+A$$1cB^F;W1&s9mFd^9 zZDR|g>7E64!BKg^+fO@l?H5LjZ-nwRz{Kohickp`PUc7AjXKll(1Nad^ITg%6&I`Z ztV6GO08b$!hM1k|R{!GIqFg~c&Z@8e!Tk+&5i$aKhqR5Bz_9pefN383oKCassbrtX zql9}su2FO2q4}U8Uj(fom}8eMle7xHm*2P5POa^`fS&W~PM?AkBCbyyv4jt{)LhmF zAzg!J48BP{Psbu=Ra#XRyvo<#$>=PWD@0!3payA7w{LkMUPBT2p584B_+jJX0MEEC z;JK@e0-@L3I+(Nwp3{T8Bo*JXVMhxEp8+R{4x0$ArG6WTz1F#wR#wSZogYE&xaVf| zOoxn``9K!7Os2Qm;KY(d8RaoBP27iVJiV`*3TE3lB8VjOT&dbNe;De_jv1t#2KnVD zQteB1C3~axLtbVD@M;%2R*T~8NHdZgqgf{*>9cRCL83w(gBH$-jys_-A`&uQD7<~+ zH6>0&ec=qBMdCZ4&uN|eGFlOiV-7-^{EE$;rK{u?Y+N8nypNi_Wv=$A<_8?1+S%9` zv0R3VyJE!upg;p|VcGhJYbUR4)oH%Noo`~d5!+Diu*r1x$Ph}(W(xZOP{^xN%f7Aa z82kO@rz;5n003v8Y_$K37u3CsC57*Z4+jdgK+@bw(X_&@mWE{mQiWDhGyjAdu=a<1 z^2ym0c?jR{xH*0eSOSlN78zBpFz!>uI%=@YoXese?}M(+i`@%d<5ohcgG(?$?%LvV z`3_Nlr|>mb{thJ6w8JHy8DeHLx0&MzysWAX$YyEu= z{~k~|jk7^INQ?3VLjxpp3jAv+2-zLwHOIppzgPkocDh;789tb#nd}V1oY7 zVE$qK3rzn10u28@H`e>V0Mq}!05kG`2J`QC=J0;f(W91^VMHH4iF+bWShf+@KY!3$Jjqvfs(r_?5xO_ z8GL^BH#w@fh^>3nFu1N1IH4r?vMOr@l3hHXKh_NBZ?r6_4WGE(mkwAICJ9G%(ewb7 z_VWr*wfS>^`UP)mI5USqmH+jSef{7dzNklltY8k+--j1+_sEut#d=`Yz-U(q%DBE< z3$vTw0bGlHjHAo=8cdL@JjNL19;`UMH6t^B!Go{X-SeMTfo;DG3IgRw{^ya_hjC$d zfk}+_UrEE(G-Q2$0>YdTOTVozaCFqPYU4c3fwXH!gSU@n=4$V zoIMYtXjinIxgc4{oR=|s{1jjw+?*L)4EC8yl?y;MHbhsi+SpZ(#$Nmr54!I+ebqSt z+?+a+O{>-`JuBwkiz1Kn{s20*1_ZH!(e+Ku45l?KwOAjyw83|Z5m_+NNrS$FLPEuO zXP+s?K%ucIw6PxHAU5^c-(QKzji(@VleMpvrD~Q##dmUnd-4jF5lyd7>JX@2`axOJ zhSb-Z?Mct?gBJcN_N-eWWsE~gV0k1#hv9(>3A|iTAzggBX}+3bJ%I-+z;;Wh)BH`* zvYC3~Sf3{slY5P@&s;p7hMz6+CX{AefRek6mwi^?)3MSdlk9nZ@dLEGUajUmk(Um#K%Qc z%*E8)Utb^zzv49}MJD&O*Vk0NPI`?DQ>nrVVO}K2WD^Y&UwJ(zI0^YdZuZg#3gGVv z7rDhDavP-RMgfd?q~L3q>7?~X>Y|ZXGpP4%xd3cg1y(K2h+;GS#j$x#>8)dP5gx>S zY$^(%<{sVnc?FABmz8U0e|Mh+2BBKlhOs1JiS7k$1LdQV&H{Hf+JQu_0NW{X7EvNu zOm^@2k(TeCboA+D5is8*$)FjngrSnU!|}F1@EmutQrAmSb4tgp1mdd0_`xthGj(<7 zvXaZq*5ELMA1S~4z$t9+M>n&-Yxy+ybIH?Xs;o0F!U!~nZ4XT)Li}`3ji+gi$rLzy zDJQwwO#)>0^857Y^xgCO+-_3abq9JqJ(;BHmKr)x*}S23WUr8opEr5qEzMUL_y|&X z-*#<>0)sdg;*i*4AhZ>dPhivvEDDoQcZULb>+dBYuKk=hSX)u^!1I;o?A{=aP8vUd z4ney~KAjT=S1LG|gJ;P<>j%|J=QpK^ZREF_WfaP(fTw*jbN@}il8A3h)f6k0&Cszx zKjRTJ_*1cpN{41I!ihN-cEmvc_H(+Uo65UPg!@PW&FndWbMl=K%6jDwr-ExSBBGegZmi^I7na=zm}xwSKrpZB zLim6!bv5>tsm-dx9U@{KkTBx4TWKp18Rya;&@*OtoOra=YrGpV!cM+7Q)B@W8KmK5 z-7IDc*wkI-DyF)1xo}&+;bId|E(G76_?~XIyC%R1lj6H>WXH*0U_(6l5&JV(5a0C2N7A z7imd*c9x@L_gybC^psI-XrE~8&0JL^g5=-Axx~u3;NWAs`y&@c1vQEtxvG1rS|<_) zKs~d>Z!wXU#GoJsNHVQw`gcwvZ3dl_<9g}!>3_(p6HA*cu)o3!T;}XIU-(LiNZzm} z4Ko$il3BwWpg7yn52nuDT<%3i*Pq{%kxHSYfcW~{Te{$?lLtlSD-#@S9 z`w-^EbFc@5Ml2x8@U#|X*+j~5j34-#Z!WxT8uwn-?KKdgyJ-WV-|Dm^@ZVnnZEJ7j zOJh?THs{Xj>+ita%m{;(GlB&-+nHZ?CaZZ~ErP$Qf1)^17P@48KJG6$^=B4*8aeCS zbZLI4BYQhVuOO!ybR16aktFv5@wK+lJm0#>j?2h&NO;cGlh9yX8r~;C@1o17Nq$~t ztz79Z|H-$_4U$Z!yUF~@A8GguATWcPssB89-Jjiz(|OuiYmMeM;R$NborEn@efFO~ z$SivqY~0y1!%-vAe>&X?rAAMywWxO!@JOWA=z>A3ORGgAaa%JLkdD@0$96AOJ~HfN~p zv7D}|J|usiCQ&4RQKJtBBFh!a;VAN>IMf<)h{(Xn33((|IKOw(H8{uhn6y!s3{CNx2`M)AovHm{ zwfl4}VXrffMTot>y+ee+tJUCcE$a}Gd0NwIL7z9)jFoHvIA*kkFFtU z7KamrxP~7K`+?XXEzt4OHzF>xK*_+GVm_x$d>dOlGr9u?ni*abB)#6ULS>%Y7#WK7 z^{37F6U(w9M;vsIRRs!p{H4_2&C2efizjkelaITMr4!{TiE1fxo;~)yO{PZ&DWptC zTL}9qpf!LjY<%)l|LBYyi)20IEC;vaPv+nFsejSPc|GOf++fG&i%RUgYB|~`>)R;A zMJP8K_9re2&zqL`SH>!S$2U>hv{Xb2a9xV5tDVe}jhj=MSL`{9@7iR6uVmA?Mc7Wy zQh?>>T4~fgC;e(zGts#@zXc!L036*7k%hf1m+DwU@_Auy>En?tZe<7L*uw?gWhKPUi|SL~zbI>w_qy{nC9S{xSpr zZO*Pj8_v^*WBd4^-~i)36!BW~a%<+GitwsHxVsK8)AFtOp6bQSpkF~$zuEB^GH-Q{ zJd4f=By)=Vj}XbVNwgwjQ^27)3yPp#6qF$xpR(_)zu|n&%Z}E`j*J+~xCp|r5(@yM!9^ZO z+hrPmlTp_=9BnGz-c2kSKo950-gywfn*}{Sgy&RO;zP5jmfK_YW)RVSuV1Ch=FDDL z7_jys5AuO7dHnf9ayQR5I5C@I_`q!JKtGJE$^18H*7`i6pxRzWfv(%=*?J^OgWiy9 zDdj`ie)vb2V)750BNXdS$4X;l43h`G#)?@iUuRT~`-4xI-$yx1nC}(35{-`DaIZpF z;R`gC6r8O3g|Y?9Q(6&O^(KOgSXS-%jbzrvy6B&_mm5Nl9s`3MROSMg*2qw?VJqTN zy$k*ofk9p!Z^IDthG<%>g|>fw>g^Y_C&)1D`k2l+Nw&T!q+Yvi63hO`kZ63t_^SQN zw85rdcEPV4v*E3csryrHJ4MMGNz=OFvy8y~>2_%`c->yLBXo!vVX7hrI8LNO;3wPm zbdemm$#Pcb9<_!++wopwEqDb6;CC@+7R>k&wdwPLzu+2|S=AC|+vKV2R0qH*`OV1o z8U^^4&8JiX)BotD%UxFxc&iyTSXr1LCwKzd($NJTLd+|fLwX-mfE@JYgtdH?mrg5X zekYeadW*EG?DT(WUOxIW;eGD#YqcD};??JBUwTgkA2(QIVidTdq+{3T2>O)j(5rX= zHzpPg4pM?&0jj_6p2`Fu35m|=FK&VroIh4B*alPCSLe!2oHB-8x73Av}Hd|11Ttgl0vr@D&jl&61w$74pf$dGYDLBMZ!x*a(NQ*WPb>;6;!R21j# zrLpE{fc8U}ECuHRj^=CxcC@8ioP!?LJrEcqk6MVD3f8;hf= zj#A~;atafLsXz%Ci7lQ&;Z4JRDHtvq8Uv}!;zG^x#Anj-m47_~31aZfOtTG%AxMar{Vsdj@c-tezH*M{ztq|OYsqit3$Y<;wQF`2=8uUkx3lK4NZhZX z^d{_Ofa1RvhIszcr2acQx)$gn9QDVTO*M?MDahT(sXXLg;zZm36#rMUvmG$>d?W5d zi{w;R-(|mO(&Jy!ARwz>;xzwLl5+O%8Ubn`TiCy)0sl5;8o>HrGo=2;5qEB`%?92B z2vvEbS!x>P0bFf^o^wEFJS=E&DXZ5|7KeM|52=cQ4%`; z6N|d#&|q=d@T>{O+jY@0XGAIb>1^fc2UKf6MQAZpy&g9i|LGao6`&IN=PkS(o;7JS zcTtjJ8hIF(-Rx7<9O-8kXQ<~3U&QcsG@zR#sFHQ~8;0%Rj|(031P<}bvHyp$cM7tE zTee2awrv|-wr#7+w#_cvwr#7+w(aV&?OSL6XP^EK9&W^XoH=slj93vX#~LFOQPbO3 z>4Z_Wcy_OKwbPR11g8$*df;h0x8Smzolz%Z*aeA!s7pk%oldUd%Prfxq3~dTXyT*e ziq#M?NErCCqZkYjE+AR2=7i5Pj1(}A7(fvet5b?ekH!G>ZMJ;Z_3$&@2u6jhd)6Z7 zl*XFJtsO{{!gqWZPhh1lk~q@2z7!+2;+}bRJF97TOcJhEAGXzxIMcE|b85sW#_wV8 z9=O_^Ute~_oLE6V+-OPhI&?T6z!UZchOsH?oa35Y>=f$ATkypfgW({vSKGi;81scp zxSjQ4B|zdXJ2wESSr4#3vIUbamB0Zc&?+v5YT4!8{2ZAJ`ATR$?d)`C%s=7l`&-oj zTq6g_lHmV**RNK&#R24Rb+p`DMnPfO>uH{WwNp@dl8Z5|VlE^@;?gB^NY+n1DfQyS zc7nxftn7#)9B<$NM+j!Ase~P}ad)4Qx*cXpc=B63VrXbfo)nTSJx&JbkXK{OPA5Mj z5K{hbTMBGVPt(|z?TFfg-0Z32UVf)jFb7$&phBY)y|kKR8B&ZHfA`2m!<3Q*0!~fg z9{!S-8LkQB_2L$KY}lb$!cVk~{w{1u;4_55@lNVsVSA8zQGM?2_8As~#Dd!BxGSI8 zRndSj?Z}}qKAzo?Ok!$&S&!8o!4j}t3X4duPOGZhcYU284zB?-HBi zHhqvRF~QLlC8osWas23c9~VVo^da%tWPXd4%5d}dW~Y6hWPS|mXB7CK3J^-ud>zaK z*AO83U)dI;J1A6~T&Poz`qTW71j=RZ=K9vwp{V?&w1sUwC=bIiYX=xo$xfj&-rX6$ zWtE|Nm#|MwRI9pL2m~oyQdC1=@fZYhTb>^!3K9ZG%-z^5Yr5Qe6)rywd4?KehB
      _j*1xbFKXl-<^=KluM%B)4^L8M;S~7a#JtXf5)&lRx5k`wMT}KAXO0MVC1|x zUOR@*DmWc!R}ghVwq+k7n(mLF!8b6+gkDv;^lP$-7=z~Uk8yvC6QnbnY{la~tA7X@ zs`7Sz{aq1#O67tg+X)2vwsk;up{8%lYzZs`)XE)Q`jU$L*y9WAOij$6`9nptZbZk> zS^()|X%u>q7V!o*;@}IMdU}9SeD-Y2cIkv<)>b9o6+D?C3GtR#$vTP9S`^7I=ehTZMOn93J}zSJ}dFQHH* z)yAMbU%?s%?as16HdA+ES>-=oD(=>~iegWNF&1Y&**2N=jewegllQ+3QwwOy32`-Y zT~H>>j-+FHUP)|_J>9?neY#gNi(MX7DG2n5bWhXYgDl%e(5*U$`|g*F};Up!-K+J#yG_M3JAB~X8G`VzFaI926m5My}4E=efGt!cR9sob*Cz*!N3 z43G$>SuRK{v0Gb$bQYRk(`6wk_@Wdl_YzWfM?2fR1&7bIijFjVBq1N7IGyPZJd+c1 zQCk0MCP$24&0P?4O&~Y+{d1D}F_E#Vbk9t4;~1C|xU`CbK`GQRhm^H%EJF z9hoCkYNEcUV0O|%CA3g>8ZMpF2tHUGzV9T~(L58G4`W4v%wJhF{E=5Vh2rrRx@SI}M_ zAqtu#OM*&juIjTh8vN{}&tDQNY!&K)9;bYdtTlIM2WWvp4FB1A&caC=pkJ(7L(6>> zqbG_g8?bRfOU}zqHgY~h14=DQQtqtv9A}fv0BG-B*fUM@5RYSm+Mq^0=shFJOR8m) z@$;T(7?}4~t{LP&fi~2wPc*I3Sd!4^^?pixM=~BYwL<>!41qv5-ijE!N?Wq?+OXh1t|~8C#WemraM#Fp zIe7FY!Rz=JXi7NS)=QcWjv!!OCXTa@Nif%nOI^Xknn|4V!ILt@`tcP7;D9Ovd&3_L zzG0!0TbVGHIrSuYre#a#=sUu>Oqvi*@o`{Ui%6^(T`AK;B-Piez7$uK%EaNA3>*S zuFRa8iyx}v>!NG+@TrqMSpA~NH9o`1Ur5Y7)=1pHp6)}brkqW~PIA+y&oB$Kgn*t-afH#PVATc+xnSG6zlfz;PEDe)Ky=+48 zy%yR+hkd3qK2V*>F=`ElW#rxsb+nXkIzRattMl`xJJar+g)g@lGYg5<>Hsp^E)_+! zWqZfA;;9{+%%m`D2OF0d*m!97-Fr1K0III(&1-7~G!bxlENpT?$SYKm)|stN&zF&# zep~m$W%HbSk$c(ow@vsV4aU7Re0$R0nMv^%M`e}6ZN+=-%KN+eqs%iuDJ>eZm0~=7 zeOFPSh(?8ZmVb5{Eo=OUXSQ`15-={6ZhHN%QW_yo_LEcj$Vj&c&Xe*zfPAwPjCes|J{i`NwzX z7@}MW*%+wu<)L!gkvA)F1gogTr**~6eqvi-!&RC50E?`|Z!td)%u&mIu|I~p@ySm) z+nSIh!SZN7ZGH($)oF|0;GgD#yNgQ{;G1kKluUN&&O2IU&Rm3$hS_=6Iq{yqt)IvZ zbS@06^54pcwjugL4uZvSQvi!s+qv5lyl~-_Qw+3_)pXbvf-F!I%Fnc%V^$^V|4O(x z0w|ljfSOccojp=40ePW-a~J$!cj}4q^;(WJLOr&Tm6BRS;=auoo8=cCtmY1V5SrgN zh^J;?E4)X#tGAJ{)3OJgc6CdS@ZLPi-Vb1Z58a)W znpz2}O0XR3hr~}F09z(wX~i6OcXEpOeM|v~<=h9OR@SmK$zUA?gytl;LNU-7-Om%c z<@G+U0^H{!=*TJgWn&(*9C@`00eILhmiY%N(1K`oYaDp?oS(?Q1-{5oGa`rX)-RaO z8T6%i*GVMdBST0!ZOCgdZ=onlr{Tu#cQbV-UyeVv0#2(#ivnH6+)k3MgVLn+hx|s( zNF1BJOCk;PM>02$51&`Co9%1|M48i2~^pJG= zcX6^gs7bl2uDdRp@C1XsOYlpT@<``1P2HD&j4G@9$z_%ddgN6UNp$x{1F6+ggX0y~|5A)4{P2(+0tF`<+L1|cVB>rVeF4<&rv5={(M&X7n0 zTu$^``bq5vDd%&X9{eO~A~X)MaMQFPXJT(i_1%xk{CB0zzuMmJWZ6W3+@W*o)*zA6 zz+o~PN`k2EMm&JbQj~hqI?XQr#%F=hV}N9@sA)y>(!cF6P2M*k%|Del|Je>-mI+@R zhyuVYoGiuc{5=o2`F-BtpOPCpxCqcb-?m+l#e#4>P}F0ym^nrCCvgDB4J;Hw9>GCI z53O;aQu|wKm$X^y?|Hib=y2*BqC(^?m-34i8ic$0B=&9t08s9Y{C~6H*nelS_&-EC zfQjF1fB-7t{QQm^UPM1mZ(W?f@>LxdxZ#=`s_!2a{R{FAr906&&c#lfo7?V$;Jyr} zkbNA(vfy}}a-&~q-Cc-B?N#aj;BdahKETZ1*@XVP(C0t7guFMZ9VFv+^|NHK+)WDl zaQT&YScCVaBlS%{4hpz}a76jPmj=T7hWQpT{T2OuKV@I7wzY<`m1}`K{v}!M<|6TT zm3*49f1?0IdcMOL0ki+=e!eM&&(h)3M&Py0LA+EEQ;4}CVUXx}zkdX+e$z;Zg97RQ zTlgc2;|v45@uN-d58|tN3B@Tjn1V!Fxu~fGN|X2(5*8>Hh-*`2EXEM*B9-4s2x{%In0eW zmk=h_z)T|Jk8@LQe`rj?hncrh!a{}=$zc6P@ZC4}Y%UHXDEziiBQ_5%IMrdH)W&kK zr6lD1tl|Qdd2Jy2AOn~3Ekf$FkBAp^f{OfH{nYRhxFV4x^uwT7&Or%g}3E_Sj zac;W&uXR=(-&UUjX-B?qPul*8 z3kKJJEExhWZSAj`7^J(S86C?uVra}0t2BN)U^9q$pCaj#`H}&amZgf6q+`x8LF%?2 zHs|a&M3!DWZ40j*55v#!V0IG-FK0wpW59f_G85q0B|U$rHWl9To{pz&Jh^iBsZs+_ zO3pcC5tF4r&mZSX2oG}YfAOJkcGb@2O6nDK(!DeqRcWWh+?-b|m+|Qb|44#r%Exy& z$zgoWc@205G}#b6g>Jq_gMsJQ8+OVG-gKF2>Bh^9vu((Di2{`=8%G})t-fT$w!?#* zHKY!hxhX!qNJ2g!WnGQ5u_(lZh^h1=6Q^Z%$!j0hzIxmvyXg>$FEza;HqB$y1F?9p z6YTIUft{5FFS>Qk21982AfRG{jQ+`~-O${eGpt;|Vww`k89n%H7Dyh#N5xZAgL_QG zAlXfUUkR-M>XqS!n8iBkZT4GoyC#GXVXmnPYrcGJ4m&fvat`X;Hl8lQW&snfn-3p!HrYk?(r3hNvyGkd%Sf57$5C|5X6UgPslYU=D0qUawI}( z858{?kSHQTwJ(C*nTQSZxd$KC2!I}s116SP?(f>9M%Ouu%tIQLT`dH!v&{tnyM>kX z?j~HVlsQ4>L)b_J_VQvKY%Vo_Tiib$VPd&31?|tetpv&m+y$~`j4u5VGljW#>3Qjace#99}zX8vCD6V=I~6~IwQB5?TjE=2^dPhAA#wC6Lma(1UIOvW_ylh036SgXCf+ECAzmwr( zFN!eKHi4^36R{2`LDgKCzQW3J?k$)$%z~Je)~r~p-77pjsGoipyxvhH-Q{--AQN~2 z4Ar0{myv{N#F$BAhCGd4pS|~JbWIT=u%GM%@Z$&^QZSu?pDJB*e}2+!L(8e#vIij+ z)%VVua`s*XMFR1&RY)9&{6L!i+ zs1HQRYs7!-?M|9BTq%cL(IDw(=mn&af{F?TUbVoveHuIWl+8gq+L!q)fWR`rFCZMg zI6vyg=R1yIHs{4;DaNh6Z1C8QlNvarbst!_Fe8vlB^Cz`Fknzf;>r$oQiJC6404bv zOBzN$>d>LO0>7{-S4u^cS-22&BXskGrSY3rs;+H$HIzq94t@P%n;S%t%R|DVY`4>X=-v&Cpw@wymuG_FRbJ&JMq2NmNNQ`Nc1`4k7)VM{ZE|IddqU52wP z51EXN2B+98$ILE_sHEF z{f;OL{gUwg+TSYXzl6+Yrdd^ zpAEOq(4U89r1;bRcoW-QXK6K07wz@DmWTAGq`jPetXqd#cRe)+Uk{mvIIlW#6b>10 zf3kXsjnATeY=T7&_;gdQnHp@Xr-H4YBp<3P?dmi~4WR-G-Fnko=VV3ftnI_43ysbN zru?mXh~&~Kd^7pIA#{V9oYXs50AKt$%-vJLq20U~CpXU&o=#-Au68&CuE9KWKV*1Y zrN_tA<$D5e^K;}mANB{T3L5{+2U+~HQL2}^0U8!oBKUOq852R#FH95ra<5;lI>o8@EG7A z;@Q}c=jCqBj=f_Gr>`4Mvu9DlP#8L*6j)xAeB9ZsYS{DS}pdhz%7`{RU!~i>s89scP4liQafjbVZ_9qE;W!xD$uCo>YP(W zw{ZfllVMo@#6}22`jAkMym^i16eAc4mIcpWF1CjM5SjiJRZfwgn*39sfqZ`t`lp`o z`*e}Eev>jlFol$|{ATNQ}5N${2bOT!Nhrc-4P1RA58){IOA0=DWZNDb8LmA2DjV>w|09;T7Y-tJYxO!8!TH>y0h!`FCdK<-YT(+U4G(1ajKd8DnJ@`n#mdPU15ubs$9 z&$YGCPs`sBEN}9?_%p+Z{1>nR8)NcvUWIzD#^~hb2#P{?&A2y?64~_cF|S9}Dq8a@ z#rmx?+2KFqHsivJA`l@+$@AN`0@JrbKIL64_OzqK%B%*IMo);GUiAAn>u_v<&>R)> z3!HLdihSFO-C^hidx0gg1d+heA|x;p(SF#ZA6HA#G7e;-R81u_6Rxr3sJI=jV<-g_ z9Lw%ya|&l8JFArpP714dCBy#GnlTNnrs>DfO*mzrFKvErdUBxDQk8e3XTOun?&l%s zgag*{oBq7}I+>s2rf=w>KW4>koErOSr8=JU+VH}kRTg34h|naH#^XPF3{A=U736>rcQIS)-GRQYkop? z@=&Sqe496h%;yu8+d)`k>NPur%&4%^V20f=q%1993y$!ME7V* zLtIu6xO#suF#dAVQIz9i!FN5{0s$4#L%{{iAeT$LXixBqln!=6KHc_6;LLIDGGw^` zWS1-SS~b@!-*W(~7>e8xm@8tB(#|obHwzIID=U$Pa4X~eq1pTH%Vx8H;M}RE3Vy;? z?P0yBx-g*ky%XrGex<#BOul!z+Zd!KeLSM^dudKRl@2|(#G86RvUMb=$zy^&bbSY3uGZkbAV=c#8&P6W(kYoORJ8h0v|9e_<4ICM-^V_!W#2x{b2pTVuFe-00 zsdfLvbF+V;tu*e$!23}jeY6;{7F%%B9&Xmad}Ul`j`Mn~c(85JRuFDbZ_nF>FW-Y> zI@o$BZ(RcNfRC&CY-M2qqnCSO#$JWm+S!i+Qc3ry#^f&h{z1F<)K`VI2>uee{lu$9 z;zwYIvSN*EDkh~8zs+8|YWWb}$(eE28lxgmY(kg~3j__Jo*e>}U#;gL>M!<#g_aYm z@}}EZpG3(i&FZamOIxPI32J85ZNKr}nsL8Wx%yw3Bx)WT=`YB)`egf)4bbbpo^n-2 z*cmv`?VY14W!|*f#djAPi&1IBWcN!MTmpT{YA=n!RA&t0F2>{a0o#det5Ud@zlQ|^ z1Bhv&rGa3ZMuUpdxHbpwfy9(4@fP61>D*I%rh$PXai00lSpk-?2icq?Q@uGEFa;?= z@;UZ_u=Ivw#OhjkM63YMeX~DO|J|4MZyie|intZ6383?~pqEngBE3MG4D6a@{{TQo zo^ZP*Rg$oE+esiwF*7jqUt$PW;v4SUc=p$;^=}SJo?Z2_e!{XVMQSm$fy`LKQ?443PZ|`)>#c_wPX3fBLHa7BV+Z2?4P~P%GT@_dEdf%6Gtb z6@NWc|9`5075m>7DqsMpT^0`@D1hl2QAfI#i%JwzRXs=!PJM)B3&>idmM7x_yup{b z3ctO!VITbdysQ|CBsC@6Q|!IHZvN32aYp^0&q!(Iw94Ef?6Ki@=e(%xXeyRpr=mhC zz=zUn*EPTE+AN!f7OluQjKFwt}-t+JLvCY4Xeb zKcG0H9R65ss+VCSro8p55g_P`4FnoFCLc{i3X3PUNr-hLPw*>#QfE zk}~v0%Xyu3iwIR-(gz+2nQp&Yx+y5r9A=8WY@v1jwNEzH1_N5~j7f1VdvXj1HKJdT z;s?2lEIKzLHH9KHOrP`>)$Ap!);wGSt+)FNwj^s0qfy!Pb2Af;4*$E~5Fc`yV^O|x zHqRn3%~d7Dow02(+iU84d$v_A%!+S089uWB5a?|@B8xeM@3YH_NZ0wC@v-UK#QZ!f z%Wm&71&bKjz(49%i5MEMX1YHE1^4#RnR|!!T3@=;Nf7nN5{SpxH#hcbBQ#KCpC%Dd z7#*JD7us)^i`{UN3ham4m3a-OF2ve}pmG{zZ}z?Pycwxw`0Y@DP1=$kBU;a)W8r@; zK12)!uW9&m7l77G>%i=H_0Y?EJzqAror)+n2lA@cPaz8$(_1p>A}=RHT!8LM$_rs% z(OXt3|3z!2ho_SMz)n$-6+_cq5MUzj0y0b_EogC+p*G%{drU*h%E=!V(^HG>;KWDA zpp4D*V|BCodLZ|}__Ru+8_|8?icThTz#K?2&Z7(h2$-k>jFTfyK?LT*@Mv@F1rZ5% z_41VC5D3e;;hB)a$*f zHw-P9+4f_o--BF-*|-D6<+8`&_HElD!G$YT7i_iT567};idLV-Ft21S&qbR-%z0T1 zZ#q`TeuxOpn^RT;`corbEVWLy;K1dSsX zP|qW*H)KA0GG~HhZtKul>fKNCr%xBbupN>e6bgd6{8o0jP@z|+d?U+5zQ%WT*R0|! z4B;(@C(;ArNG33|ltk!IuMBUHVQ272V^^d;4-4+Z3Y0~1fRm?So0mKy%$7%?>f>__*&`(AZdhKN>A;NW*lQVS)9tl%kvpz{nkZ-O#Bcd z;R0Wse97rgC{|oMv(@gK+I8k!GxgQ~A%Y{6ROg*TuukZ$AArgtp(%x$svo9~egZV= zipucHc$#Z6$2ATU95Di4HsH^abw+5M<9wDxMDaEat*T_-!00T$ZM{SJ`KR9~nHEU^ z*6P9@hvsL(xqa`ISNWd|R%BqLgZ9E9vy%>sbC+|7nRBi-GN^zvjCtQ$uX9y`+HFrF zZZz&Jx3Cd{1aW?f4z%*}Ro@f?bKjMuByJ~x4ad{w6rs5JLACkfN}NSK3TH}8Q|zCe z5xjfbX(EnFl|OMe8hYo^OB&2IvOh9zdFKGJ6|gfS_A$WRYjYj$aJnh- zw+>?_0ID3&_E4n)VicL1K59xqJAg~KXrzilitea<3Dx^+pUA2HAztnj;a5&NCu??5 z%P4tbYSe+6;NkV%DQ>4?0A(A6p7W2_i#o2Q-rg@c9 z#TSgT-AfMBO8%PQkr{J{&T&F<9X{Km*%vi(99ivN%nkxm0f-0PDMDcu*?DaQYh_k@ zudk>J%$eX52nH6INYYjhs*65M(Z98n*jPdIClh#%;D!jl6;5ROO<|2`$wgZDAE8w( z@_aoy%J~kTyep3nZQwIlkn-|la$A|#(xZ>VRjd|j*qP(^pfK^p3(uYnYtcuhrF97V z*`gK>9yw=)j}(&e+(wamjGQ2DD|XgSk)?}V#{!_NO0@NnjnUjANLw7xifRlBwLcwf zv>EEjX;aGa9Wb$1Y@F!&4YPjm;S#zc&_bGb04S>=xh(g9#;=={Pp{U-j8eT!iBa}I z30;NBfxq#;cMk^JwwpSQC=V~+Y>z|sH$3{iSG6_&-0XR+G1e$H4aNjl1BLB)Mf)%p z>*?)UP3!vM=g*vCn|$6j!181}JlGNUbIH7MB1N6gv{EE_SFL?wXl>m45Q4xfhD+M^ zKD(_)uo=pjcg$m&8f+m#JDgEe1jnVTRtGr`HLQc!=sm&8aZ8miI0FPmnmgJ+zf+ll zS|I$P;=sX_Gwi`Xfor}Qfn`xhLLN<Pw`%}e?ZJwgcATAJ>APJ%@F z5{DS1EI?!wq);r2F!HLK>*UXy8|Y$y5l&mgy7&~4!mU{dX8eg2)daho>{`CxDJDH% zrjoO2u4(rLiSv(Z2ZEnc>Y48$nGQPS8rV_P{9Q;DFwp#U0$#Z5(fQ1xnA@h&VWNDW zyHHmE{dbD=6Rnu|`XiDD1YJPU=utM)2RV|9(_Hab*_*TT;cW5>8t;cirGUi_cp!v_ z!NZ#1G#vMjfL$DFbLrtJB50uA-coLPw90o0w}jQ8H1;E@>>n`YxQ@k{p3L%|?U#H$ zf#cLdOggBNF-%~=VeU$M`GE_yU6ldZ6-~TA&aYKYc&S7)vdv(pca(ZAilZv{-mWtQ zn$9|ulT*f9%<`G9Tcdm}1*m!IlI!>rG_kdgTKb8~;A}0d4l@unarM^1dZ`X5I8yS3 zG#)ajEEAayCdl)k70r&Y7QhK^B)FgNf!qChy*Rm#)OT+7ZE(1~@a{MLNfE9- zrL8aQIl7iwIx8ctsDbzMDXbI1AoH77?kKLRm~PF^}sqR>%P{S z%JM9f{fzk@6oUMe55i)K?D^vSC*efq+E=z6T7jWbDbE^BlZw$aCRN=4JjDhq&vNxV zTYajH8y{P}k%^(*0l)quuP>sdBW`F7yd~>OUplIikDc6)4hS}@%A49PwJm@O{y3ov zAoS&Q?IdEHBxcZ_&jIY9x9-)ZLgAF^xdx26wWmEyLg+6JC6Rf)rVxtltoQC<64%;$9LfIO0#5A+IQo ze*Djj8tFixhuaZx->P~A#;hh4My4#G^=X>qS?*JyhWM#0DxLC8D}XW7Ii}vWlS2^e zD0)KlM>86$f-P%}!>|_g-fIHV zyOv+kUH@pkfB{H%znd?K|86V#pKV^M`0B{C|9{LK{eMj!5*ryWkc1qBiUox=iqz*{ zJYc17FyVh1i~iC2jp_NZy7g1P03z((#1s502<=`ppwF|>IM`eK5sCjFI33?O-z{X! ze@)f+A045{4vIQ^?%x1Ff$sp7|LrdN?n$|7j?IAKcl+oc8H#^Ms!dM``?;GLK)WD! zj~WR!Qccl!MWhWXYU0dW4`zN3Hf9ES08S=&a6L{5op zUk5!*;6D%${zm`nT8#h0d-N}9jlAK1w8G3`;ZV4K5IT#0L%y9 z&8M?e5;I#DbJj0LXBvm+&!)e!v@di;y>@`h{8roWsRi;UadV=cn=QNe7LWp#-4{3(Ow~Uqd1UklatE&}N+l}?l z)@gvYdQYsd)tq+8*rWIQ&{mCHF;MLnUTXo->$wAnR|=w!o3NWBQ+mAvEp| z6d`^K6fMTBm|K;&G6jH7)q^W)X-XD*D{@#WjwD~ewqO;El#!;$(G}6?f_H=i!;$^| zQ=8K-6H8v&Ui(?JlyL`oUD2v*mU$G%vGXX_^a+c4r5%JbDw0=oGzVlw)M(~e!-xvml(gFgEng1tZA^7M{q6a)y z{Tx&CphbDmdi^tLE`N~Ap`ZWe=Q6~CvEd)3hx;Cl>FC4!Bvl7W|5 z_Ax_jiK8mn;*?J~AU+i!i%5&OU~M14Y_{xrAx(9?l4!4?>yXtW_a11G$S)s@rrP73@rc0MgS`ipK+kWilq^!u9tgU`1xB%zs!NNjtj%?LMDDm*dJ zd)p5H5mLVEB3o-9k3!!uAMrWTOQ(|rqh>f~u_3sQOk68f zxc!!~Fy-nzap{QgB|(c`${t8|crd>h_!(G;Z3%u`3Ev~lCU_-*)Tq_hdWVYmJcB4Q zYS+sM23LLwwckCo7Kw29$H;tw0S0?YAebN(HFrQ<)vnUpi6`XYsr&o-@J)X*52psT zVVEF$N-l=NOMX`R(6Czv_`YBxYwKGjHr!0g>R;x)_rwd`+&w!N6>F0bS}S4N_!u?S z()YwqTm&bPTSYlI4b13U;b$#w=LY(OL_^ckIpFkymZa8BPJp*0Bq+WB;E{oXeL+Wz z?IA^_@+`QA3$*Qd&@9d++xtN?LTR(N(+?)}sRM_-6fH&oLP|y^vJRuxA0ecYdS3htyq#e`btb{Oa*FUw1FVGstVR0%mM|KEPX7RPQ>Z4Y8dJyDYhQ(@Oz~# zUTKzaYva5?4K#fxsRTQ!)ubgHg(+)~wk6~fN9D6lXsTiH%C9E=LRhv=6les{^s;hB z{ghh{pnd_9Zz4(wb8zxnW8x=tt!7%iY$aWl9jF3jx^Y04xkaZl+T&~D9OtTq*c>=} z#5XPZwGeT!${3nojwpN{0&6}@1GH3VZb2yU#TklCTe)cJBuph9}S5?h@bDJGG_cS8&msv-b#ABvtT$w%Sq-odTW-7wKD* zQh)PDQ#ehG{`sc&oFj=Y%?D*JO^%y5m{}kUUh`w{5bI!QxSej_%#1biSMJGSsp}V- zPNBD0SCGXli;TMX$XzD5+L3r0Ym2vRI0?e{uevcFBx#~o0z=0+O$_S!em|~bBgt3f zJBDK^J%w3JHV%dy~@D(m` zx#%c{v}>_VQzRRlXO3$?rt$_N!OO~!hQJ~{V{|U!QN_Vg{QOZq>zrD$6MHi8f2#O= zkKL^Zo6>2QdHs;=d_~95A%|Eg(iKX%nW07%FzMj9MXkktLsw{5Ed%Kk4&PlCSh!7k zV2*t+>aKe{4B4I7^5tqUR+G2x#A%`xl;(;aF4Zd}H>m8JnINm}eJ!b6CJB?Rwkbe! zmC%k&BlA)_wG3!!gZ(L!ZQoq+*>$6^T70)*|SLOi~$> zWz5`_F=~v?dgS*%r7a&c$zbqsXYF^0sz6(Qzo~>&ys^gPb9hI!#TV(`>ABJYfDWa# z0$`e!J&(C{MU782&Ad5Mh<>qRH^1T7loSlS9+a;|dG+#auH98pPqb zABzM~nVrw5=p`B06FF5Le$#UOLzCZGx6=@pl+?zeiJfA-B;^w5dxn&5Pf8tbk`CEa zZh(^h_J{bZ!eEEH;;@NRCa<#6BL=}BwCaz9Vw;fX+0SlRojJpL-c-0pa4q!F`JN{d z7BI}KO6%8mFOLLTN^htir{MMY#6lIx>YOD13n{l~9!x>geKJs!-6@HE;hV$@HHY|6y%J*QDr z7)j5GDHP_AOvfjX>pZ+ooifxU-%=}*LOCYF^%T8fpMTitaSUtZAZA z_)_CEkbGtPL#^s_VmP0S=P|%K@o3iXTG$zJJ9tCZ8#rpfylr+aj@>J+?i9Uj(y`-l zip?Za3dx&J2Jvv2*70HU0e~o0ao-t;$3G3RY^dtKz58UrId|lE#iCC6=>|-OsB|UF zF!061gG1?3)t3fLj3<}df$}X%2V6KCRT=0|So{VsMqvn5dO$|9y+fwFV@1MCh z%?%rs!3y!Wx62A}MQiBoHuR!e0vtupxS~fiE0ks4Fg_1SaQ+@ieorxdlCxcn&x-Gl zV&EN3mlDNkj{b3NchwzuZr$!%k~DwXXLHRz0S{u>7{^!2X_rOa>2x?ruKpUHNgF$% z$dDcM$=pjDiCL7XXbzAg~_iR3}XY&P5y9FwKt}s68 z4!qDasz@^7S9vv%vPzBE9Yk9w?CqEY^r}%O?@sUXlAOBmEz7w1nO&Cz+|9yWrk*J~N!O#P;}#80+@|4<&qIF<=;xUNm35U1+pz&g<5CqK5MI`|akAS>f zbr!IG?KjtKh)NOeS1NV4*XJ+QW)Hsf@uxcxzTQ&w6-3Rson)_v$ zrYa)@Y$4C0oUl}yxP`xd70j{eI7s9v9wc!nzB5F6Q-sCgQcrm<_UiFG|3Q%Tct)PG zKPAVpcA)4w!>(Z1{r!?v44?4R{Y6GA7kXfxa(?11yw*!yw=w&lN)} zzn6`r?g)wE0^EKyEkTInoKr%_Q&i`3+#mX6VT5@d@CjqRIXJH80YkJIl2@#ifS|K} z@IV>Ig(?Ja{K#I*euXqTc1zr9;E?egp*45b0lOL&6FK{97S}KCH3CTx3#I@INFoai z!|Z51ZZ23M;~YXSi#99SsC(i({dr8K-6yN_w_+r54dSqN4p<8(QF#S!PKO;U$V5Ii zp(2Q`T4F$eLqW4GwORY^Yzj%{*^q5JmE$_&6n!njE=jZ+n?P4h+Hljx_+>teON5(n zI8^%{q+mZjp=URSUJA!3q>Nz_bkyGUb}GGFM&r7_4H6Q+b>$ysry`a8X{UXsr4|V( zrbRtVN{QjOIfOb=G>9_r;*7#EO}L5r1R=uiwE0D+VH#ANP-v#6VIl< zdqyz_UtLQm4o@{=>-`oZ99?0bcV+OTZS4S{YWpaZi*JxANlN~I zguP>MrE9yj9jjw>Y}>YNqhs5)(Xnk?9iwC0wr%IjdbHNw-+K02m0wAnW2Wv|smw91 za~zjA#oDU!jMjS$wB>nNL|lT2HYT5adsqxi{UGasciQpE-$8gVa{>@ z*7%}mioc&eyN`0EGi6(gMhn3k#rJZ~RDBhfvKBb3BIYB<1mPZG1eKAln#Zj3C*MI?noHr62h>Wf40DC-TS>VxSKjw&t&>A;2 zpVn)wl_|ZXD~ICFwT-bvRL_=wyB3>JYm5G^Tjf%Swge5BEF&9cH*jnIw|LCTLdr{NMPFUr`as#4Kl0r; zkPulO5uunD;APV;PERm}1!Nl?YU&z^0+?%gw?DUq>UYX5ZLgu^Z?=ymx-D=onFWn) zNEN!;_f8Al2sL4MA8`!PE%u(`+__ycH^nSr1qeS`cB5PL{oKR_-Sw3{URVNnP_OZa z=`XgA=v_~6$s)n7>AP9X&NV8BYvx|^iCQkH1ci?afwj_=7tp_%qpq6Z;Yr`d=WAE$Pm22g3`hA`p-J+<`zO)<905T2g9oJdH-MjiMTBmfY?}og3}Sm~>%sPB z2LTk)^M3Y6V>YXnStjP9LVaA*w-{vn+%KgZQcQ82LI?;zr;pd$Sw5q4lYhPnn9|pa zaQ#im^NZ2+m#kD|*o_Z)3E*3a+?PkNv;A`(aPVuM;eT~H|MGyqTD;A)wE4tqRgnK2 z0)V^vnxg$5&CY-K5dRUE{_AnH|7GM4COxdj-_$h!9he?CKcBHRupvN1eNchaboOr* zl%O^--=ARW`E1tY2tw zk*G(Cqr*u}#9H9o2-4nag3At(45yBnd3@dJ6C?qSj`hj4Mf(ez$`VfOFIRjAtz%H=2s3!K5k4h#9 zBHKXoK!mw{O?arND2<0MMnG(4Te$-~H9`CN+AErviiu}bkhTyF16~%9bs&WQ19abe zT2guPZtA7A+8@BTj^>A1*$ob)%#j?&`?O0JkUwjBoBeVu7n4y48^m;#d%jn!)4;N~ zm~_ZvsgLM%=#rF)JkDrpw&^9y>li{fMuM= zNj`+Jvzx--=nvfaTwi||&`ewz#6n7nBO`M*o^i8vf>K9X*m^92-}^391gzavJbHN} zLcd-s7yPTTcg~(yQTw_n7+3pjzLa+xjY<@wn>I!4piTS1>US!xriP>%E&^EkRqJTi z2FR;eIxfk2dFSF9Z^Ey6P5qK9bs+9>Tn2XJ^z8PJ=s~F!(htjJ=Yyt*=&NZNC^7yf z-Iaj1a;fiH9{`Tsp(|{+n3EZ>E31BsNw@_FOG#Je0SUFczkLMYrM+oJkQQO#`?Uo_ zskxQgL)9AYD(8Rc-tfTyd^H$yusM}X_-T%o%jO!Yjx04X#>G(sw1@ibt$aX7XnBOu z$iaZ-Z|9h_mt;^u!n+rEJ1I1Df)2(Ae>|~@v*A0;7W&Af4Dq1vD9}1%yvB%#)T@a{ z5Mf7KLS2vgwd>BmR$>m%oN zZNjpF0XA83rqSx-5$LD!SY-wnztQe>c$F^|*T7oZ%%?4D07E0!Qr{0krj%sEH@>4i3!deFWSibbS|a>qY~-WGS`ZNGA*5e3p43BOVjqe z%x{ZEIr8P8O%U}9N4zSdsm&3%IfW!IQffLB;rDVW3OBW+BcafqL5AJmH@r!Q?ES&; zwfgO0UF`RMO2J4cDGE}-awXT<^HS}<@$8t(ls0jknWexHml{6W#TCaDN956C<&kbF z_b|ICM^q+%p$n&%k70F-6GCCC(TJ3ogtaDLW<~xo#-B22Y!$S8yPS4uLVV~HB;?Ty z@d9({Eg0)eG5iV6{Inw-bn_IYZ1FAakRx*XU|m!Jw#Sn4MzoaqDo>L0Ru7b9_av#dsPhKy1wSIi_SB7Cc3{TATT+{P zm0X=j#WsJi2@lSqGynMMr$j$JM-hd5d=I`!oSBKxHywwa;Z@4-9Qq

      Ss+d_f!%~ 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 DRz=OO literal 0 HcmV?d00001 diff --git a/docs/demo.tape b/docs/demo.tape new file mode 100644 index 0000000..e19349c --- /dev/null +++ b/docs/demo.tape @@ -0,0 +1,33 @@ +Require zig + +Output docs/assets/chroma-logger-demo.gif +Output docs/assets/chroma-logger-demo.mp4 + +Set Shell "zsh" +Set FontFamily "JetBrainsMono Nerd Font Mono, Menlo, monospace" +Set FontSize 16 +Set LetterSpacing 0 +Set LineHeight 1.2 +Set Width 1180 +Set Height 650 +Set Padding 24 +Set Margin 24 +Set MarginFill "#11111b" +Set BorderRadius 14 +Set WindowBar "Colorful" +Set WindowBarSize 38 +Set Theme "Catppuccin Mocha" +Set TypingSpeed 30ms + +Hide +Type "export PS1='$ '" +Enter +Type "unset NO_COLOR; export CLICOLOR_FORCE=1" +Enter +Type "clear" +Enter +Show + +Type "zig build run" +Enter +Sleep 7s diff --git a/examples/logger.zon b/examples/logger.zon new file mode 100644 index 0000000..f397f18 --- /dev/null +++ b/examples/logger.zon @@ -0,0 +1,74 @@ +.{ + .color = .auto, + .utc_offset_minutes = 0, + .layout = .{ + .timestamp = .time, + .show_level = true, + .scope = .non_default, + .separator = " ", + .scope_open = "[", + .scope_close = "]", + .level_width = 5, + }, + .labels = .{ + .err = "ERROR", + .warn = "WARN", + .info = "INFO", + .debug = "DEBUG", + }, + .theme = .{ + .timestamp = .{ + .foreground = .{ .rgb = .{ .r = 105, .g = 112, .b = 134 } }, + }, + .err = .{ + .foreground = .{ .rgb = .{ .r = 255, .g = 92, .b = 117 } }, + .effects = .{.bold}, + }, + .warn = .{ + .foreground = .{ .rgb = .{ .r = 255, .g = 203, .b = 107 } }, + .effects = .{.bold}, + }, + .info = .{ + .foreground = .{ .rgb = .{ .r = 99, .g = 213, .b = 255 } }, + .effects = .{.bold}, + }, + .debug = .{ + .foreground = .{ .rgb = .{ .r = 199, .g = 146, .b = 234 } }, + .effects = .{.bold}, + }, + .scope = .{ + .foreground = .{ .rgb = .{ .r = 130, .g = 139, .b = 165 } }, + }, + }, + .message_format = .{ + .styles = .{ + .{ + .name = "brand", + .style = .{ + .foreground = .{ .rgb = .{ .r = 142, .g = 110, .b = 255 } }, + .effects = .{.bold}, + }, + }, + .{ + .name = "success", + .style = .{ + .foreground = .{ .rgb = .{ .r = 80, .g = 250, .b = 123 } }, + .effects = .{.bold}, + }, + }, + .{ + .name = "value", + .style = .{ + .foreground = .{ .rgb = .{ .r = 255, .g = 184, .b = 108 } }, + .effects = .{.bold}, + }, + }, + .{ + .name = "muted", + .style = .{ + .foreground = .{ .rgb = .{ .r = 98, .g = 104, .b = 128 } }, + }, + }, + }, + }, +} diff --git a/examples/main.zig b/examples/main.zig new file mode 100644 index 0000000..e7a0d9d --- /dev/null +++ b/examples/main.zig @@ -0,0 +1,54 @@ +const std = @import("std"); +const chroma_logger = @import("chroma-logger"); + +const DemoLogger = chroma_logger.Logger(@import("logger.zon")); +const api_log = std.log.scoped(.api); +const worker_log = std.log.scoped(.worker); + +pub const std_options: std.Options = .{ + .log_level = .debug, + .logFn = DemoLogger.log, +}; + +pub fn main(init: std.process.Init) !void { + const io = init.io; + + std.log.info("{#brand}CHROMA LOGGER 0.2{#reset} live demo", .{}); + try pause(io, 550); + + std.log.debug("Loaded typed configuration at {#value}comptime{#reset}", .{}); + try pause(io, 400); + + api_log.info("Listening on {#value}http://127.0.0.1:8080{#reset}", .{}); + try pause(io, 450); + + worker_log.debug("Discovered {#value}{d}{#reset} queued jobs", .{4}); + try pause(io, 400); + + worker_log.warn("Cache is cold; the first build may be slower", .{}); + try pause(io, 500); + + inline for (.{ 25, 50, 75, 100 }) |progress| { + worker_log.info("Processing assets {#muted}··········{#reset} {#value}{d}%{#reset}", .{progress}); + try pause(io, 280); + } + + api_log.err("Health check timed out after {#value}{d}ms{#reset}", .{750}); + try pause(io, 550); + + api_log.warn("Retrying with the fallback transport", .{}); + try pause(io, 500); + + api_log.info("{#success}✓ Service recovered{#reset} in {#value}{d}ms{#reset}", .{128}); + try pause(io, 500); + + std.log.info("{#success}✓ Demo complete{#reset} — ANSI and plain output were generated at comptime", .{}); +} + +fn pause(io: std.Io, milliseconds: i64) !void { + try io.sleep(.fromMilliseconds(milliseconds), .awake); +} + +test "demo logger configuration compiles" { + try std.testing.expect(chroma_logger.resolveColor(.always, false)); +} diff --git a/src/datetime.zig b/src/datetime.zig new file mode 100644 index 0000000..dea5915 --- /dev/null +++ b/src/datetime.zig @@ -0,0 +1,94 @@ +const std = @import("std"); + +pub const DateTime = struct { + year: i64, + month: u8, + day: u8, + hour: u8, + minute: u8, + second: u8, + + /// Convert Unix seconds to a Gregorian UTC date and time. + pub fn fromUnix(seconds: i64) DateTime { + const days = @divFloor(seconds, std.time.s_per_day); + const seconds_in_day = @mod(seconds, std.time.s_per_day); + const date = civilFromDays(days); + + return .{ + .year = date.year, + .month = date.month, + .day = date.day, + .hour = @intCast(@divFloor(seconds_in_day, std.time.s_per_hour)), + .minute = @intCast(@divFloor(@mod(seconds_in_day, std.time.s_per_hour), std.time.s_per_min)), + .second = @intCast(@mod(seconds_in_day, std.time.s_per_min)), + }; + } +}; + +const Date = struct { + year: i64, + month: u8, + day: u8, +}; + +// Gregorian calendar conversion adapted from Howard Hinnant's civil calendar +// algorithm. Floor division keeps dates before the Unix epoch correct. +fn civilFromDays(days_since_epoch: i64) Date { + const shifted = days_since_epoch + 719_468; + const era = @divFloor(shifted, 146_097); + const day_of_era = shifted - era * 146_097; + const year_of_era = @divFloor( + day_of_era - @divFloor(day_of_era, 1_460) + @divFloor(day_of_era, 36_524) - @divFloor(day_of_era, 146_096), + 365, + ); + var year = year_of_era + era * 400; + const day_of_year = day_of_era - (365 * year_of_era + @divFloor(year_of_era, 4) - @divFloor(year_of_era, 100)); + const month_prime = @divFloor(5 * day_of_year + 2, 153); + const day = day_of_year - @divFloor(153 * month_prime + 2, 5) + 1; + const month = month_prime + (if (month_prime < 10) @as(i64, 3) else -9); + year += if (month <= 2) 1 else 0; + + return .{ + .year = year, + .month = @intCast(month), + .day = @intCast(day), + }; +} + +test "DateTime converts the Unix epoch" { + try std.testing.expectEqual(DateTime{ + .year = 1970, + .month = 1, + .day = 1, + .hour = 0, + .minute = 0, + .second = 0, + }, DateTime.fromUnix(0)); +} + +test "DateTime converts leap days and time of day" { + try std.testing.expectEqual(DateTime{ + .year = 2024, + .month = 2, + .day = 29, + .hour = 12, + .minute = 34, + .second = 56, + }, DateTime.fromUnix(1_709_210_096)); +} + +test "DateTime supports dates before the Unix epoch" { + try std.testing.expectEqual(DateTime{ + .year = 1969, + .month = 12, + .day = 31, + .hour = 23, + .minute = 59, + .second = 59, + }, DateTime.fromUnix(-1)); +} + +test "DateTime preserves the full Unix timestamp year range" { + try std.testing.expect(DateTime.fromUnix(std.math.maxInt(i64)).year > 292_000_000_000); + try std.testing.expect(DateTime.fromUnix(std.math.minInt(i64)).year < -292_000_000_000); +} diff --git a/src/lib.zig b/src/lib.zig index 68a9cc2..3209227 100644 --- a/src/lib.zig +++ b/src/lib.zig @@ -1,60 +1,324 @@ -// TODO: make a private util function that is configurable that all other log function inherit from, LogBuilder sort of -// TODO: make it configurable, json file maybe ?? env variable would be great but comptime complicated +//! Configurable, comptime-first logging for Zig applications. +//! +//! `Logger` produces a `std.log` compatible function from a compile-time +//! configuration. Chroma directives in messages are parsed into ANSI and +//! plain variants at compile time; runtime work is limited to timestamps, +//! argument formatting, terminal selection, and writing the line. const std = @import("std"); -const Time = @import("./time/time.zig").Time; const chroma = @import("chroma"); +const DateTime = @import("datetime.zig").DateTime; -pub fn timeBasedLog(comptime level: std.log.Level, comptime scope: @Type(.enum_literal), comptime message: []const u8, args: anytype) void { - _ = scope; +pub const ColorPolicy = chroma.terminal.ColorPolicy; +pub const Style = chroma.Style; +pub const Color = chroma.Color; +pub const Effect = chroma.Effect; - const timestamp = std.time.timestamp(); - const offset_in_seconds = 3600; - // TODO: make the offset configurable - const time = Time.from_unix_timestamp(timestamp + @as(i64, offset_in_seconds)); +/// Timestamp displayed before each log line. +pub const TimestampMode = enum { + none, + time, + date_time, +}; - std.debug.lockStdErr(); - defer std.debug.unlockStdErr(); - const stderr = std.io.getStdErr().writer(); +/// Controls when the `std.log` scope is displayed. +pub const ScopeMode = enum { + never, + non_default, + always, +}; - // TODO: search if it is possible to merge these into a single print call - const formatted_timestamp = comptime chroma.format("{247}{d:0>4}-{d:0>2}-{d:0>2} {d:0>2}:{d:0>2}:{d:0>2} {reset}"); - nosuspend stderr.print(formatted_timestamp, .{ time.year, time.month, time.day, time.hour, time.minute, time.second }) catch return; - nosuspend stderr.print("{s} ", .{level_to_string(level)}) catch return; - const formatted_message = comptime chroma.format(message); - nosuspend stderr.print(formatted_message ++ "\n", args) catch return; +/// Human-readable layout of a log line. +pub const Layout = struct { + timestamp: TimestampMode = .time, + show_level: bool = true, + scope: ScopeMode = .non_default, + separator: []const u8 = " ", + scope_open: []const u8 = "[", + scope_close: []const u8 = "]", + level_width: usize = 5, +}; + +/// Text used for Zig's four built-in log levels. +pub const Labels = struct { + err: []const u8 = "ERROR", + warn: []const u8 = "WARN", + info: []const u8 = "INFO", + debug: []const u8 = "DEBUG", +}; + +/// Typed Chroma styles for logger-owned fields. +pub const Theme = struct { + timestamp: Style = .{ + .foreground = .{ .bright = .black }, + .effects = &.{.dim}, + }, + err: Style = .{ + .foreground = .{ .bright = .red }, + .effects = &.{.bold}, + }, + warn: Style = .{ + .foreground = .{ .bright = .yellow }, + .effects = &.{.bold}, + }, + info: Style = .{ + .foreground = .{ .bright = .cyan }, + .effects = &.{.bold}, + }, + debug: Style = .{ + .foreground = .{ .bright = .magenta }, + .effects = &.{.bold}, + }, + scope: Style = .{ + .foreground = .{ .bright = .black }, + }, +}; + +/// Compile-time logger configuration. +pub const Config = struct { + /// Automatic terminal detection, forced ANSI, or forced plain output. + color: ColorPolicy = .auto, + /// Fixed offset from UTC. This deliberately avoids hidden timezone I/O. + utc_offset_minutes: i16 = 0, + layout: Layout = .{}, + labels: Labels = .{}, + theme: Theme = .{}, + /// Chroma syntax and semantic styles accepted inside log messages. + message_format: chroma.Config = .{}, +}; + +/// Build a `std.log` compatible logger from compile-time configuration. +pub fn Logger(comptime config: Config) type { + comptime validateConfig(config); + + const MessageFormatter = chroma.Formatter(config.message_format); + const timestamp_style = comptime styleFragment(config.theme.timestamp); + const scope_style = comptime styleFragment(config.theme.scope); + const reset = comptime chroma.render("{#reset}"); + + return struct { + /// `std.Options.logFn` implementation using locked stderr. + pub fn log( + comptime level: std.log.Level, + comptime scope: @EnumLiteral(), + comptime message: []const u8, + args: anytype, + ) void { + const io = std.Options.debug_io; + const previous_protection = io.swapCancelProtection(.blocked); + defer _ = io.swapCancelProtection(previous_protection); + + var buffer: [256]u8 = undefined; + const locked = std.debug.lockStderr(&buffer); + defer std.debug.unlockStderr(); + + const terminal = locked.terminal(); + const use_color = resolveColor(config.color, terminal.mode == .escape_codes); + const timestamp = if (config.layout.timestamp == .none) + 0 + else + std.Io.Clock.real.now(io).toSeconds(); + + write( + terminal.writer, + timestamp, + use_color, + level, + scope, + message, + args, + ) catch {}; + } + + /// Render one deterministic log line to any Zig writer. + /// + /// Supplying the timestamp and color decision makes this API suitable + /// for tests, files, memory buffers, and application-owned sinks. + pub fn write( + writer: *std.Io.Writer, + unix_seconds: i64, + use_color: bool, + comptime level: std.log.Level, + comptime scope: @EnumLiteral(), + comptime message: []const u8, + args: anytype, + ) std.Io.Writer.Error!void { + var has_prefix = false; + + if (config.layout.timestamp != .none) { + try writeTimestamp(writer, unix_seconds, use_color, timestamp_style, reset, config); + has_prefix = true; + } + + if (config.layout.show_level) { + try writeSeparator(writer, &has_prefix, config.layout.separator); + const label = levelLabel(config.labels, level); + try writeStyled(writer, levelStyle(config.theme, level), reset, label, use_color); + if (label.len < config.layout.level_width) { + try writer.splatByteAll(' ', config.layout.level_width - label.len); + } + } + + if (showScope(config.layout.scope, scope)) { + try writeSeparator(writer, &has_prefix, config.layout.separator); + try writeRendered(writer, scope_style, use_color); + try writer.writeAll(config.layout.scope_open); + try writer.writeAll(@tagName(scope)); + try writer.writeAll(config.layout.scope_close); + if (scope_style.ansi.len != 0) try writeRendered(writer, reset, use_color); + } + + try writeSeparator(writer, &has_prefix, config.layout.separator); + const rendered_message = comptime MessageFormatter.render(message); + if (use_color) { + try writer.print(rendered_message.ansi, args); + } else { + try writer.print(rendered_message.plain, args); + } + try writer.writeByte('\n'); + } + }; } -pub fn defaultLog(comptime level: std.log.Level, comptime scope: @Type(.enum_literal), comptime message: []const u8, args: anytype) void { - _ = level; - _ = scope; +/// Default logger with time, level, automatic color, and non-default scopes. +pub const default = Logger(.{}); - std.debug.lockStdErr(); - defer std.debug.unlockStdErr(); - const stderr = std.io.getStdErr().writer(); +/// Drop-in default `std.Options.logFn` implementation. +pub const log = default.log; - const formatted_message = comptime chroma.format(message); - nosuspend stderr.print(formatted_message ++ "\n", args) catch return; +/// Resolve a color policy from a previously detected ANSI capability. +pub fn resolveColor(policy: ColorPolicy, ansi_capable: bool) bool { + return switch (policy) { + .auto => ansi_capable, + .always => true, + .never => false, + }; } -pub fn log(comptime level: std.log.Level, comptime scope: @Type(.enum_literal), comptime message: []const u8, args: anytype) void { - _ = scope; +fn writeTimestamp( + writer: *std.Io.Writer, + unix_seconds: i64, + use_color: bool, + comptime style: chroma.Rendered, + comptime reset: chroma.Rendered, + comptime config: Config, +) std.Io.Writer.Error!void { + const offset_seconds = @as(i64, config.utc_offset_minutes) * std.time.s_per_min; + const datetime = DateTime.fromUnix(unix_seconds + offset_seconds); + + try writeRendered(writer, style, use_color); + switch (config.layout.timestamp) { + .none => unreachable, + .time => try writer.print("{d:0>2}:{d:0>2}:{d:0>2}", .{ + datetime.hour, + datetime.minute, + datetime.second, + }), + .date_time => { + try writeYear(writer, datetime.year); + try writer.print("-{d:0>2}-{d:0>2} {d:0>2}:{d:0>2}:{d:0>2}", .{ + datetime.month, + datetime.day, + datetime.hour, + datetime.minute, + datetime.second, + }); + }, + } + if (style.ansi.len != 0) try writeRendered(writer, reset, use_color); +} - std.debug.lockStdErr(); - defer std.debug.unlockStdErr(); - const stderr = std.io.getStdErr().writer(); +fn writeYear(writer: *std.Io.Writer, year: i64) std.Io.Writer.Error!void { + if (year < 0) { + try writer.writeByte('-'); + try writer.print("{d:0>4}", .{@as(u64, @intCast(-year))}); + } else { + try writer.print("{d:0>4}", .{@as(u64, @intCast(year))}); + } +} - // TODO: search if it is possible to merge these into a single print call - nosuspend stderr.print("{s} ", .{level_to_string(level)}) catch return; - const formatted_message = comptime chroma.format(message); - nosuspend stderr.print(formatted_message ++ "\n", args) catch return; +fn writeSeparator(writer: *std.Io.Writer, has_prefix: *bool, separator: []const u8) std.Io.Writer.Error!void { + if (has_prefix.*) try writer.writeAll(separator); + has_prefix.* = true; } -fn level_to_string(comptime level: std.log.Level) []const u8 { +fn writeStyled( + writer: *std.Io.Writer, + comptime style: chroma.Rendered, + comptime reset: chroma.Rendered, + text: []const u8, + use_color: bool, +) std.Io.Writer.Error!void { + try writeRendered(writer, style, use_color); + try writer.writeAll(text); + if (style.ansi.len != 0) try writeRendered(writer, reset, use_color); +} + +fn writeRendered(writer: *std.Io.Writer, comptime rendered: chroma.Rendered, use_color: bool) std.Io.Writer.Error!void { + try writer.writeAll(rendered.select(use_color)); +} + +fn styleFragment(comptime style: Style) chroma.Rendered { + const formatter = chroma.Formatter(.{ + .styles = &.{.{ .name = "logger", .style = style }}, + .auto_reset = false, + }); + return formatter.render("{#logger}"); +} + +fn levelStyle(comptime theme: Theme, comptime level: std.log.Level) chroma.Rendered { + return styleFragment(switch (level) { + .err => theme.err, + .warn => theme.warn, + .info => theme.info, + .debug => theme.debug, + }); +} + +fn levelLabel(comptime labels: Labels, comptime level: std.log.Level) []const u8 { return switch (level) { - .err => chroma.format("{red}ERROR{reset}"), - .warn => chroma.format("{yellow}WARN{reset}"), - .info => chroma.format("{blue}INFO{reset}"), - .debug => chroma.format("{magenta}DEBUG{reset}"), + .err => labels.err, + .warn => labels.warn, + .info => labels.info, + .debug => labels.debug, + }; +} + +fn showScope(comptime mode: ScopeMode, comptime scope: @EnumLiteral()) bool { + return switch (mode) { + .never => false, + .non_default => scope != .default, + .always => true, }; } + +fn validateConfig(comptime config: Config) void { + if (config.utc_offset_minutes <= -24 * 60 or config.utc_offset_minutes >= 24 * 60) { + @compileError("chroma-logger config: utc_offset_minutes must be between -1439 and 1439"); + } + if (config.layout.level_width > 64) { + @compileError("chroma-logger config: level_width cannot exceed 64"); + } + + validateLinePart("separator", config.layout.separator, true); + validateLinePart("scope_open", config.layout.scope_open, true); + validateLinePart("scope_close", config.layout.scope_close, true); + validateLinePart("err label", config.labels.err, false); + validateLinePart("warn label", config.labels.warn, false); + validateLinePart("info label", config.labels.info, false); + validateLinePart("debug label", config.labels.debug, false); +} + +fn validateLinePart(comptime name: []const u8, comptime value: []const u8, comptime allow_empty: bool) void { + if (!allow_empty and value.len == 0) { + @compileError("chroma-logger config: " ++ name ++ " cannot be empty"); + } + if (std.mem.indexOfAny(u8, value, "\r\n") != null) { + @compileError("chroma-logger config: " ++ name ++ " cannot contain a newline"); + } +} + +test { + _ = @import("datetime.zig"); + _ = @import("tests.zig"); +} diff --git a/src/main.zig b/src/main.zig deleted file mode 100644 index 30b846e..0000000 --- a/src/main.zig +++ /dev/null @@ -1,59 +0,0 @@ -const std = @import("std"); -const Logger = @import("lib.zig"); -const chroma = @import("chroma"); - -const User = struct { - name: []const u8, - level: u8 = 0, - - pub fn format(self: User, comptime fmt: []const u8, options: std.fmt.FormatOptions, writer: anytype) !void { - _ = fmt; - _ = options; - - try std.fmt.format(writer, "User {{ name: {s}, level: {d} }}", .{ self.name, self.level }); - } - - pub fn levelUp(self: *User) void { - self.level = @addWithOverflow(self.level, 1)[0]; - } -}; - -pub const std_options: std.Options = .{ .log_level = .debug, .logFn = Logger.defaultLog }; - -pub fn main() !void { - // Debug log - typically used for detailed information useful for debugging - std.log.debug("Debugging the application start process", .{}); - - // Info log - generally useful information to log (service start-up, configuration assumptions, etc.) - std.log.info("Application {green}successfully{reset} started", .{}); - - // Warn log - something unexpected happened, but the application is still running as expected - std.log.warn("The configuration file {241}`config.json`{reset} was not found, using defaults", .{}); - - // Error log - a serious problem that indicates the application might not be able to continue running - std.log.err("Failed to connect to the database, terminating application", .{}); - - var alice = User{ .name = "Alice", .level = 1 }; - var bob = User{ .name = "Bob", .level = 2 }; - const users = [_]*User{ &alice, &bob }; - - std.log.info("{}", .{alice}); - - std.log.info("{}", .{bob}); - - const one_second_in_nano = 1_000_000_000; - - while (bob.level < 10) { - for (users) |user| { - user.levelUp(); - std.log.debug("UP +1: {}", .{user}); - } - std.time.sleep(one_second_in_nano); // Sleep for 1 second - - if (bob.level == 9) { - std.log.warn("{221}{s} is about to reach level 10 soon !", .{bob.name}); - } else if (bob.level == 10) { - std.log.info("{cyan}{s} reached level 10 !", .{bob.name}); - } - } -} diff --git a/src/tests.zig b/src/tests.zig new file mode 100644 index 0000000..e6dbabb --- /dev/null +++ b/src/tests.zig @@ -0,0 +1,212 @@ +const std = @import("std"); +const logger = @import("lib.zig"); + +test "Logger writes deterministic plain output" { + const PlainLogger = logger.Logger(.{ .color = .never }); + var buffer: [256]u8 = undefined; + var writer: std.Io.Writer = .fixed(&buffer); + + try PlainLogger.write( + &writer, + 45_296, + false, + .info, + .default, + "started on port {d}", + .{8080}, + ); + + try std.testing.expectEqualStrings( + "12:34:56 INFO started on port 8080\n", + writer.buffered(), + ); +} + +test "Logger includes non-default scopes" { + const ScopedLogger = logger.Logger(.{}); + var buffer: [256]u8 = undefined; + var writer: std.Io.Writer = .fixed(&buffer); + + try ScopedLogger.write( + &writer, + 0, + false, + .debug, + .database, + "query completed", + .{}, + ); + + try std.testing.expectEqualStrings( + "00:00:00 DEBUG [database] query completed\n", + writer.buffered(), + ); +} + +test "Logger renders message styles into ANSI and plain variants" { + const ThemedLogger = logger.Logger(.{ + .layout = .{ .timestamp = .none }, + .message_format = .{ + .styles = &.{.{ + .name = "success", + .style = .{ + .foreground = .{ .bright = .green }, + .effects = &.{.bold}, + }, + }}, + }, + }); + + var ansi_buffer: [256]u8 = undefined; + var ansi_writer: std.Io.Writer = .fixed(&ansi_buffer); + try ThemedLogger.write( + &ansi_writer, + 0, + true, + .info, + .default, + "{#success}ready{#reset} in {d}ms", + .{12}, + ); + try std.testing.expectEqualStrings( + "\x1b[96;1mINFO\x1b[0m \x1b[92;1mready\x1b[0m in 12ms\n", + ansi_writer.buffered(), + ); + + var plain_buffer: [256]u8 = undefined; + var plain_writer: std.Io.Writer = .fixed(&plain_buffer); + try ThemedLogger.write( + &plain_writer, + 0, + false, + .info, + .default, + "{#success}ready{#reset} in {d}ms", + .{12}, + ); + try std.testing.expectEqualStrings( + "INFO ready in 12ms\n", + plain_writer.buffered(), + ); +} + +test "Logger supports custom layout labels and fixed UTC offsets" { + const CustomLogger = logger.Logger(.{ + .utc_offset_minutes = 90, + .layout = .{ + .timestamp = .date_time, + .scope = .always, + .separator = " | ", + .scope_open = "(", + .scope_close = ")", + .level_width = 4, + }, + .labels = .{ .err = "FAIL" }, + }); + + var buffer: [256]u8 = undefined; + var writer: std.Io.Writer = .fixed(&buffer); + try CustomLogger.write( + &writer, + 0, + false, + .err, + .default, + "offline", + .{}, + ); + + try std.testing.expectEqualStrings( + "1970-01-01 01:30:00 | FAIL | (default) | offline\n", + writer.buffered(), + ); +} + +test "Logger formats timestamps before the Unix epoch" { + const HistoricalLogger = logger.Logger(.{ + .layout = .{ + .timestamp = .date_time, + .show_level = false, + .scope = .never, + }, + }); + var buffer: [128]u8 = undefined; + var writer: std.Io.Writer = .fixed(&buffer); + + try HistoricalLogger.write(&writer, -1, false, .info, .default, "tick", .{}); + try std.testing.expectEqualStrings( + "1969-12-31 23:59:59 tick\n", + writer.buffered(), + ); +} + +test "resolveColor applies explicit policy before capability" { + try std.testing.expect(!logger.resolveColor(.auto, false)); + try std.testing.expect(logger.resolveColor(.auto, true)); + try std.testing.expect(logger.resolveColor(.always, false)); + try std.testing.expect(!logger.resolveColor(.never, true)); +} + +test "Logger avoids a leading separator when all prefix fields are hidden" { + const MessageOnlyLogger = logger.Logger(.{ + .layout = .{ + .timestamp = .none, + .show_level = false, + .scope = .never, + }, + }); + var buffer: [64]u8 = undefined; + var writer: std.Io.Writer = .fixed(&buffer); + + try MessageOnlyLogger.write(&writer, 0, false, .info, .default, "hello", .{}); + try std.testing.expectEqualStrings("hello\n", writer.buffered()); +} + +test "Logger accepts custom Chroma message grammar" { + const CustomSyntaxLogger = logger.Logger(.{ + .layout = .{ .timestamp = .none, .show_level = false }, + .message_format = .{ + .syntax = .{ + .marker = '@', + .item_separator = '|', + .value_separator = '=', + .channel_separator = '/', + }, + }, + }); + var buffer: [128]u8 = undefined; + var writer: std.Io.Writer = .fixed(&buffer); + + try CustomSyntaxLogger.write( + &writer, + 0, + true, + .info, + .default, + "{@fg=12/34/56|bold}custom{@reset}", + .{}, + ); + try std.testing.expectEqualStrings( + "\x1b[38;2;12;34;56;1mcustom\x1b[0m\n", + writer.buffered(), + ); +} + +test "Logger propagates custom writer failures" { + const PlainLogger = logger.Logger(.{}); + var buffer: [4]u8 = undefined; + var writer: std.Io.Writer = .fixed(&buffer); + + try std.testing.expectError( + error.WriteFailed, + PlainLogger.write(&writer, 0, false, .info, .default, "too long", .{}), + ); +} + +test "Logger function is compatible with std.Options" { + const options: std.Options = .{ + .log_level = .debug, + .logFn = logger.Logger(.{ .color = .never }).log, + }; + try std.testing.expectEqual(std.log.Level.debug, options.log_level); +} diff --git a/src/time/time.zig b/src/time/time.zig deleted file mode 100644 index aa98857..0000000 --- a/src/time/time.zig +++ /dev/null @@ -1,65 +0,0 @@ -const std = @import("std"); -const math = std.math; - -pub const Time = struct { - year: u16, - month: u8, - day: u8, - hour: u8, - minute: u8, - second: u8, - - /// Converts a Unix timestamp to a Time struct. - pub fn from_unix_timestamp(timestamp: i64) Time { - const days = @divFloor(timestamp, 86400); - const secondsInDay = @mod(timestamp, 86400); - const yearInfo = get_year(days); - const monthDayInfo = get_month_and_day(yearInfo.daysIntoYear, yearInfo.year); - - return Time{ - .year = yearInfo.year, - .month = monthDayInfo.month, - .day = monthDayInfo.day, - .hour = @intCast(@divFloor(secondsInDay, 3600)), - .minute = @intCast(@divFloor(@mod(secondsInDay, 3600), 60)), - .second = @intCast(@mod(secondsInDay, 60)), - }; - } -}; - -fn get_year(days: i64) struct { year: u16, daysIntoYear: i64 } { - var year: u16 = 1970; - var daysLeft: i64 = days; - - while (true) { - const daysInYear: i64 = if (is_leap_year(year)) 366 else 365; - if (daysLeft < daysInYear) break; - daysLeft -= daysInYear; - year += 1; - } - - return .{ .year = year, .daysIntoYear = daysLeft }; -} - -fn get_month_and_day(daysIntoYear: i64, year: u16) struct { month: u8, day: u8 } { - const daysInMonth = [_]u8{ 31, 28 + bool_to_int(is_leap_year(year)), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; - var month: u8 = 1; - var daysLeft: i64 = daysIntoYear; - - while (true) { - const daysThisMonth = daysInMonth[month - 1]; - if (daysLeft < daysThisMonth) break; - daysLeft -= daysThisMonth; - month += 1; - } - - return .{ .month = month, .day = @intCast(daysLeft + 1) }; -} - -fn is_leap_year(year: u16) bool { - return (year % 4 == 0 and year % 100 != 0) or year % 400 == 0; -} - -fn bool_to_int(b: bool) u8 { - return if (b) 1 else 0; -} diff --git a/tests/compile_errors/invalid_offset.zig b/tests/compile_errors/invalid_offset.zig new file mode 100644 index 0000000..d7cccf3 --- /dev/null +++ b/tests/compile_errors/invalid_offset.zig @@ -0,0 +1,5 @@ +const chroma_logger = @import("chroma-logger"); + +comptime { + _ = chroma_logger.Logger(.{ .utc_offset_minutes = 1_440 }); +} diff --git a/tests/compile_errors/newline_label.zig b/tests/compile_errors/newline_label.zig new file mode 100644 index 0000000..e24fb99 --- /dev/null +++ b/tests/compile_errors/newline_label.zig @@ -0,0 +1,7 @@ +const chroma_logger = @import("chroma-logger"); + +comptime { + _ = chroma_logger.Logger(.{ + .labels = .{ .info = "INFO\n" }, + }); +} diff --git a/tests/compile_errors/unknown_message_style.zig b/tests/compile_errors/unknown_message_style.zig new file mode 100644 index 0000000..9d01251 --- /dev/null +++ b/tests/compile_errors/unknown_message_style.zig @@ -0,0 +1,17 @@ +const std = @import("std"); +const chroma_logger = @import("chroma-logger"); + +test { + const TestLogger = chroma_logger.Logger(.{}); + var buffer: [64]u8 = undefined; + var writer: std.Io.Writer = .fixed(&buffer); + try TestLogger.write( + &writer, + 0, + false, + .info, + .default, + "{#missing}message", + .{}, + ); +}