From 3ac00741413e2f5f895ca5309542f9bd559e0029 Mon Sep 17 00:00:00 2001 From: zz_y Date: Wed, 26 Aug 2026 13:51:17 -0600 Subject: [PATCH 01/15] feat(dag-viewer): planner cost/benefit annotations (#286) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Adds a structured, optional CostAnnotation schema (crates/types/src/cost.rs) and wires it through dag_export's JSON output and the tools/dag-viewer sidebar/on-graph UI, per issue #286. Rust: - `asap_types::cost`: `CostAnnotation` (value/unit/source/baseline/delta/ benefit_ratio/model_version/benchmark_id/inputs), `CostUnit` (CostUnitsPerSecond / CostUnits / RelativeStructuralUnits), `CostSource` (Modeled/Measured/Unavailable), `BaselineRef`, `CostInput`, `total_cost(rate, horizon, one_shot)`, `sum_workload_costs` (dedups by an explicit key, rejects unit-mismatched aggregation), and `WorkloadCostSummary`/`workload_cost_summary`. - `DagGraph` gains `edge_annotations: Vec`, populated by `deduplicate_pointer_shared_nodes` for every edge running into a genuine DAG merge point (never a guessed multi-hop path cost). - `DagDecision` and `TargetReplacement` gain `baseline_cost`/`selected_cost`/ `benefit` alongside their existing bare `cost: f64` (unchanged, for backward compat). `NamedGraph`/`WorkloadGraph` gain `workload_cost: Option`. - crates/devtools/src/bin/dag_export.rs populates all of the above from today's `asap_aware_mapping::cost_model` output (`estimate_cost`, `default_cse_recompute_cost`), deduplicating workload totals by `decision.id`. Every value dag_export produces today is honestly unit-tagged `RelativeStructuralUnits` (the same structural-size proxy the cost model already uses for ranking), not `CostUnitsPerSecond`: the cost model has no update_rate/evaluation_rate/query_interval recurrence inputs yet (#287's job). The annotation plumbing accepts a real rate unchanged once #287 lands those inputs. Nothing is ever fabricated: a value the cost model can't estimate is `CostSource::Unavailable` (`value: None`), never `0`. JS/viewer: - viewer.js renders concise on-graph `▼NN%`/`▲NN%` badges on a costed post-ASAP node's label, full baseline/selected/benefit/provenance blocks in the sidebar (node click, edge click, and a workload-scope cost summary for the current single- or multi-query selection), all sourced only from explicit JSON fields (decision.id dedup, `EdgeCostAnnotation`, `workload_cost`) — no client-side cost estimation. - index.html: cost UI CSS (light/dark aware, via existing --var tokens). - tools/dag-viewer/dag.example.json regenerated via generate-sample.sh (real lowering -> ASAP-aware mapping -> post-ASAP -> dag_export pipeline), not hand-patched. - README.md documents the new JSON contract fields. Tests: `cargo test --workspace` (all green) and `python3 -m unittest discover -s tools/dag-viewer -p test_render.py` (18/18) both pass. Co-Authored-By: Claude Sonnet 5 --- crates/devtools/src/bin/dag_export.rs | 169 +++- crates/types/src/cost.rs | 519 ++++++++++ crates/types/src/dag_export.rs | 205 +++- crates/types/src/lib.rs | 1 + tools/dag-viewer/README.md | 38 +- tools/dag-viewer/dag.example.json | 1270 ++++++++++++++++++++++++- tools/dag-viewer/index.html | 34 + tools/dag-viewer/render.py | 11 +- tools/dag-viewer/viewer.js | 176 +++- 9 files changed, 2387 insertions(+), 36 deletions(-) create mode 100644 crates/types/src/cost.rs diff --git a/crates/devtools/src/bin/dag_export.rs b/crates/devtools/src/bin/dag_export.rs index 071c4a40..e3e86985 100644 --- a/crates/devtools/src/bin/dag_export.rs +++ b/crates/devtools/src/bin/dag_export.rs @@ -53,8 +53,9 @@ use std::collections::HashMap; use std::rc::Rc; use std::time::Instant; -use asap_aware_mapping::cost_model::DefaultCostModel; +use asap_aware_mapping::cost_model::{default_cse_recompute_cost, DefaultCostModel}; use asap_aware_mapping::replacement::{search_workload, Replacement, ReplacementSubDAG}; +use asap_types::cost::{BaselineRef, CostAnnotation, CostInput, CostSource, CostUnit}; use asap_types::dag_export::{ self, DagDecision, DagGraph, DagNote, NamedGraph, PostAsapSubstitution, TargetRejection, TargetReplacement, TargetReplacementAfter, WorkloadGraph, @@ -65,6 +66,83 @@ use asap_types::pre_asap::query_expr::QueryExpr; use asap_types::pre_asap::schema::{Column, DataType, Schema}; use asap_types::types::AccuracyTarget; +/// `model_version` tag for every [`CostAnnotation`] this binary computes — +/// see [`winner_cost_annotations`]'s own doc for what it's a structural +/// proxy for and why (issue #286, issue #287 is the real rate-modeling +/// follow-up). +const STRUCTURAL_COST_MODEL_VERSION: &str = "dag_export-structural-cost-v1"; + +/// Baseline/selected/benefit [`CostAnnotation`]s for one [`Winner`] — issue +/// #286's "replacement-region baseline cost, selected cost, and benefit" +/// granularity item, reused verbatim for [`TargetReplacement`] and for the +/// [`DagDecision`] carried by every node the winning candidate produced or +/// carried. +/// +/// The baseline is always [`BaselineRef::PreAsapRecomputation`]: the cost of +/// recomputing `target` independently at every one of its `consumer_count` +/// use sites, via +/// [`default_cse_recompute_cost`] — the exact structural-size proxy +/// `asap_aware_mapping::cost_model`'s own `DefaultCostModel` already uses, +/// not a second formula. This baseline is always computable (never +/// `Unavailable`) since it only needs `target` itself, unlike `selected`, +/// which is `Unavailable` whenever `selected_cost` is `NaN` (the plugged-in +/// cost model has no numeric estimate for that particular candidate shape — +/// see [`RankedGroup::costs`](asap_aware_mapping::replacement::RankedGroup::costs)'s +/// own doc). +/// +/// Every value here is unit-tagged [`CostUnit::RelativeStructuralUnits`], +/// not [`CostUnit::CostUnitsPerSecond`]: today's cost model has no +/// `update_rate`/`evaluation_rate`/`query_interval` recurrence inputs at all +/// (issue #287's job) — see `asap_types::cost`'s module doc for why this +/// crate refuses to mislabel a structural proxy as a real rate. +fn winner_cost_annotations( + target: &QueryExpr, + consumer_count: usize, + selected_cost: f64, +) -> (CostAnnotation, CostAnnotation, CostAnnotation) { + let per_consumer_recompute = default_cse_recompute_cost(target).0; + let baseline_value = per_consumer_recompute * consumer_count.max(1) as f64; + let baseline = CostAnnotation::modeled( + baseline_value, + CostUnit::RelativeStructuralUnits, + STRUCTURAL_COST_MODEL_VERSION, + vec![ + CostInput::new("per_consumer_recompute_cost", per_consumer_recompute), + CostInput::new("consumer_count", consumer_count.max(1) as f64), + ], + ); + + if !selected_cost.is_finite() { + return ( + baseline, + CostAnnotation::unavailable(CostUnit::RelativeStructuralUnits), + CostAnnotation::unavailable(CostUnit::RelativeStructuralUnits), + ); + } + + let selected = CostAnnotation::modeled( + selected_cost, + CostUnit::RelativeStructuralUnits, + STRUCTURAL_COST_MODEL_VERSION, + vec![], + ) + .with_baseline(BaselineRef::PreAsapRecomputation, baseline_value); + + let benefit = CostAnnotation { + value: selected.delta, + unit: CostUnit::RelativeStructuralUnits, + source: CostSource::Modeled, + baseline: Some(BaselineRef::PreAsapRecomputation), + delta: None, + benefit_ratio: selected.benefit_ratio, + model_version: Some(STRUCTURAL_COST_MODEL_VERSION.to_string()), + benchmark_id: None, + inputs: Vec::new(), + }; + + (baseline, selected, benefit) +} + use asap_devtools::{lower_promql, lower_sql, SqlCatalog}; enum Lang { @@ -251,6 +329,10 @@ struct Winner<'a> { target: &'a Rc, candidate: &'a ReplacementSubDAG, cost: f64, + /// The target's own `MemoGroup::consumer_count` — threaded through so + /// [`winner_cost_annotations`] can compute a baseline without a second + /// lookup back into `PlanSpace`. + consumer_count: usize, } /// Short explanation intended for a selected winner in node-level UI. The @@ -316,6 +398,30 @@ fn lookup_winner( .find(|&i| expr == winners[i].target.as_ref()) } +/// One `(decision.id, baseline_cost, selected_cost)` triple per *distinct* +/// [`DagDecision`] carried anywhere in `graph` — collapsing every node that +/// shares one `decision.id` (a replacement region can span many nodes, all +/// carrying an identical clone of the same decision) down to a single +/// entry, so a caller summing these never counts one decision's cost once +/// per node it happens to touch. +fn decision_cost_entries(graph: &DagGraph) -> Vec<(u32, CostAnnotation, CostAnnotation)> { + let mut seen = std::collections::HashSet::new(); + let mut entries = Vec::new(); + for node in &graph.nodes { + let Some(decision) = &node.decision else { + continue; + }; + if !seen.insert(decision.id) { + continue; + } + let (Some(baseline), Some(selected)) = (&decision.baseline_cost, &decision.selected_cost) else { + continue; + }; + entries.push((decision.id, baseline.clone(), selected.clone())); + } + entries +} + /// Build a [`TargetReplacement`] for `winner`, matching this file's own /// per-target `before`/`after` construction. fn target_replacement( @@ -333,6 +439,8 @@ fn target_replacement( TargetReplacementAfter::Rewrite(dag_export::export(rewritten)) } }; + let (baseline_cost, selected_cost, benefit) = + winner_cost_annotations(winner.target, winner.consumer_count, winner.cost); TargetReplacement { decision_id, target_pre_id, @@ -342,6 +450,9 @@ fn target_replacement( cost: winner.cost, before, after, + baseline_cost: Some(baseline_cost), + selected_cost: Some(selected_cost), + benefit: Some(benefit), } } @@ -465,6 +576,7 @@ fn run_post_asap_with_progress( target: group.target, candidate, cost: group.costs[0], + consumer_count: group.consumer_count, }) }) .collect(); @@ -507,6 +619,8 @@ fn run_post_asap_with_progress( let mut find_winner = |expr: &QueryExpr| -> Option { let i = lookup_winner(&by_hash, &winners, &mut post_graph_cache, expr)?; let winner = &winners[i]; + let (baseline_cost, selected_cost, benefit) = + winner_cost_annotations(winner.target, winner.consumer_count, winner.cost); let decision = DagDecision { id: i as u32, strategy: winner.candidate.strategy.to_string(), @@ -514,6 +628,9 @@ fn run_post_asap_with_progress( rank: 0, cost: winner.cost, role: "replacement_region", + baseline_cost: Some(baseline_cost), + selected_cost: Some(selected_cost), + benefit: Some(benefit), }; Some(match &winners[i].candidate.replacement { Replacement::Rewrite(rc) => PostAsapSubstitution::Rewrite { @@ -711,6 +828,7 @@ async fn main() { replacements: Vec::new(), post_graph: None, rejections: Vec::new(), + workload_cost: None, }); } for (explanation, matched) in explanations.iter().zip(matched) { @@ -759,7 +877,54 @@ async fn main() { assign_workload_node_ids(&mut post_graphs); } - let workload = WorkloadGraph { queries }; + // Whole selected-workload cost/benefit (issue #286) — per query, and + // for the whole selected workload. `decision.id` (== the winning + // `Winner`'s own index — see `run_post_asap_with_progress`) is already + // a collision-free dedup key for a decision shared across multiple + // nodes (a replacement region spans several nodes, all carrying the + // same `decision.id`) and across multiple queries (a CSE-shared target + // reachable from more than one query's root) alike, so it's reused + // directly as `sum_workload_costs`'s dedup key — no separate lookup + // needed. + let mut workload_entries = Vec::new(); + for query in &mut queries { + let Some(post_graph) = &query.post_graph else { + continue; + }; + let entries = decision_cost_entries(post_graph); + if entries.is_empty() { + continue; + } + match asap_types::cost::workload_cost_summary( + entries.iter().map(|(id, baseline, selected)| (Some(*id), baseline, selected)), + "dag_export-workload-cost-v1", + ) { + Ok(summary) => query.workload_cost = Some(summary), + Err(mismatch) => eprintln!("dag_export: workload cost aggregation for {:?} skipped — {mismatch}", query.name), + } + workload_entries.extend(entries); + } + let workload_cost = if workload_entries.is_empty() { + None + } else { + match asap_types::cost::workload_cost_summary( + workload_entries + .iter() + .map(|(id, baseline, selected)| (Some(*id), baseline, selected)), + "dag_export-workload-cost-v1", + ) { + Ok(summary) => Some(summary), + Err(mismatch) => { + eprintln!("dag_export: workload-wide cost aggregation skipped — {mismatch}"); + None + } + } + }; + + let workload = WorkloadGraph { + queries, + workload_cost, + }; if progress { eprintln!( "Total planner time: {:.2} ms", diff --git a/crates/types/src/cost.rs b/crates/types/src/cost.rs new file mode 100644 index 00000000..0ddc84e2 --- /dev/null +++ b/crates/types/src/cost.rs @@ -0,0 +1,519 @@ +//! Structured cost/benefit annotations for [`dag_export`](crate::dag_export) +//! output — issue #286. +//! +//! The issue's cost/benefit semantics are defined in **cost units per +//! second** for recurring costs: +//! +//! ```text +//! maintained_cost_rate = +//! update_rate * maintenance_cost_per_update +//! + evaluation_rate * summary_read_cost +//! +//! recompute_cost_rate = evaluation_rate * raw_recompute_cost +//! evaluation_rate = sum(1 / query_interval_i) +//! +//! estimated_benefit_rate = baseline_cost_rate - selected_cost_rate +//! estimated_benefit_ratio = estimated_benefit_rate / baseline_cost_rate +//! ``` +//! +//! Today's cost model (`asap_aware_mapping::cost_model`) has no notion of +//! `update_rate`/`evaluation_rate`/`query_interval` at all — issue #287 +//! ("recurrence-aware modeled inputs") is what's expected to supply those. +//! Rather than inventing rate numbers this crate has no basis for, every +//! annotation this module produces from today's cost model is honestly +//! unit-tagged [`CostUnit::RelativeStructuralUnits`] — the *same* underlying +//! numbers `asap_aware_mapping::cost_model::CostModel::estimate_cost` and +//! `default_cse_recompute_cost`/`default_cse_shared_maintenance_cost` +//! already compute (a structural-size proxy, not a real cost-per-second +//! rate) — so a renderer can never mistake a structural proxy for a +//! measured or rate-modeled cost. The formulas above still hold shape for +//! shape (`benefit = baseline - selected`, `ratio = benefit / baseline` +//! guarded at `baseline <= 0`), just over whichever [`CostUnit`] the inputs +//! actually carry; when #287 lands real rates, a caller can construct a +//! [`CostAnnotation`] with `unit: CostUnit::CostUnitsPerSecond` through the +//! exact same type with no further plumbing change needed here. +//! +//! Nothing in this module ever fabricates a number: a hook with no basis to +//! estimate returns [`CostAnnotation::unavailable`] (`value: None, source: +//! CostSource::Unavailable`), never `0.0` or another synthetic placeholder. + +use serde::{Deserialize, Serialize}; + +/// The unit one [`CostAnnotation::value`] (and its `delta`) is expressed in. +/// See the module doc for why today's `dag_export` output uses +/// [`RelativeStructuralUnits`](CostUnit::RelativeStructuralUnits) rather than +/// claiming a real rate it can't back up. +#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)] +pub enum CostUnit { + /// A recurring cost expressed per second (`cost_units / s`) — the + /// `*_cost_rate` quantities in the issue's formulas. Only a + /// [`CostSource::Modeled`] annotation backed by real recurrence inputs + /// (issue #287) or a [`CostSource::Measured`] benchmark (issue #288) + /// may use this unit. + CostUnitsPerSecond, + /// A finite-run or one-shot total at some horizon `H` — `total_cost(H)` + /// in the issue's formulas, or a standalone one-shot addend. Never + /// aggregated with [`CostUnitsPerSecond`](CostUnit::CostUnitsPerSecond) + /// except through [`total_cost`], which keeps the two terms explicit + /// rather than silently adding a rate to a total. + CostUnits, + /// A dimensionless structural-size proxy (e.g. unique-DAG-node count, + /// the same magnitude + /// `asap_aware_mapping::cost_model::default_cse_recompute_cost` already + /// returns) — used wherever the underlying cost model has no rate or + /// absolute-cost estimate at all yet (issue #287). Never comparable to + /// [`CostUnitsPerSecond`](CostUnit::CostUnitsPerSecond) or + /// [`CostUnits`](CostUnit::CostUnits): a renderer must show it as its + /// own kind of number, and [`sum_workload_costs`] refuses to aggregate + /// mismatched units rather than silently mixing them. + RelativeStructuralUnits, +} + +impl std::fmt::Display for CostUnit { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + match self { + CostUnit::CostUnitsPerSecond => write!(f, "cost units/s"), + CostUnit::CostUnits => write!(f, "cost units"), + CostUnit::RelativeStructuralUnits => write!(f, "relative structural units"), + } + } +} + +/// Provenance of one [`CostAnnotation`]'s value — the issue's three states. +#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)] +pub enum CostSource { + /// Generated by a named/versioned cost model + /// ([`CostAnnotation::model_version`]). + Modeled, + /// Loaded from a reproducible benchmark artifact + /// ([`CostAnnotation::benchmark_id`]) — issue #288. + Measured, + /// No value. `value` is always `None` for this source — never encode an + /// unknown value as `0` or another synthetic number. + Unavailable, +} + +/// What a [`CostAnnotation`]'s `baseline`/`delta`/`benefit_ratio` are +/// measured against. The issue names two examples explicitly; both are +/// first-class variants here rather than opaque strings so a renderer can +/// display them without guessing. [`Named`](BaselineRef::Named) covers any +/// other explicitly-chosen baseline a future caller introduces. +#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] +#[serde(tag = "kind", content = "detail")] +pub enum BaselineRef { + /// Recomputing the pre-ASAP target independently at every consumer site + /// — "do nothing" (never apply ASAP-aware replacement at all). + PreAsapRecomputation, + /// The best-ranked *non-selected* legal candidate for the same target + /// (`rank` into that target's own `PlanSpace::cost_sorted` ordering, + /// `0` = best; a baseline referencing this variant is always `rank >= + /// 1`, since `rank 0` is what got selected). + HighestRankedNonSelectedCandidate { rank: usize }, + /// Any other explicitly-named baseline. + Named(String), +} + +/// One raw input that fed a [`CostAnnotation`]'s `value` — surfaced so the +/// viewer's sidebar can show *why* a modeled number is what it is, not just +/// the number itself. +#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] +pub struct CostInput { + pub name: String, + pub value: f64, + #[serde(skip_serializing_if = "Option::is_none")] + pub unit: Option, +} + +impl CostInput { + pub fn new(name: impl Into, value: f64) -> Self { + CostInput { + name: name.into(), + value, + unit: None, + } + } +} + +/// A structured, optional cost/benefit annotation — issue #286's schema. +/// Every numeric value carries units and provenance; a missing value is +/// [`CostSource::Unavailable`] with `value: None`, never a fabricated +/// number. See the module doc for the exact formulas this backs. +#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] +pub struct CostAnnotation { + pub value: Option, + pub unit: CostUnit, + pub source: CostSource, + #[serde(skip_serializing_if = "Option::is_none")] + pub baseline: Option, + /// `baseline_value - value` under `baseline`, when both are known — the + /// issue's `estimated_benefit_rate` (or its non-rate structural + /// analogue; see the module doc). + #[serde(skip_serializing_if = "Option::is_none")] + pub delta: Option, + /// `delta / baseline_value`, when `baseline_value > 0` — the issue's + /// `estimated_benefit_ratio`. Not part of the issue's own sketch schema + /// verbatim (the issue only asks that ratio be *derivable*), but kept + /// as its own explicit field rather than pushed onto the caller to + /// recompute from `delta` plus a `baseline` it would otherwise have no + /// value for. + #[serde(skip_serializing_if = "Option::is_none")] + pub benefit_ratio: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub model_version: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub benchmark_id: Option, + #[serde(default, skip_serializing_if = "Vec::is_empty")] + pub inputs: Vec, +} + +impl CostAnnotation { + /// No value at all — `value: None`, `source: Unavailable`. `unit` is + /// still required: it states what unit a value *would* have been in, + /// had one been available, so a renderer can group "not estimated" + /// alongside the kind of number it's missing. + pub fn unavailable(unit: CostUnit) -> Self { + CostAnnotation { + value: None, + unit, + source: CostSource::Unavailable, + baseline: None, + delta: None, + benefit_ratio: None, + model_version: None, + benchmark_id: None, + inputs: Vec::new(), + } + } + + /// A modeled value with no baseline comparison attached yet — chain + /// [`with_baseline`](Self::with_baseline) to add one. + pub fn modeled( + value: f64, + unit: CostUnit, + model_version: impl Into, + inputs: Vec, + ) -> Self { + CostAnnotation { + value: Some(value), + unit, + source: CostSource::Modeled, + baseline: None, + delta: None, + benefit_ratio: None, + model_version: Some(model_version.into()), + benchmark_id: None, + inputs, + } + } + + /// Attach `baseline` plus its own value, computing `delta` and + /// [`benefit_ratio`](Self::benefit_ratio) per the issue's formulas. + /// `self.value` must already be `Some` (an + /// [`unavailable`](Self::unavailable) annotation has nothing to + /// subtract a baseline from and is returned unchanged). + pub fn with_baseline(mut self, baseline: BaselineRef, baseline_value: f64) -> Self { + let Some(value) = self.value else { + return self; + }; + let delta = baseline_value - value; + self.delta = Some(delta); + self.benefit_ratio = benefit_ratio(baseline_value, delta); + self.baseline = Some(baseline); + self + } +} + +/// `delta / baseline_value`, or `None` when `baseline_value <= 0` — the +/// issue's explicit "ratio unavailable" guard (a zero or negative baseline +/// makes a ratio meaningless, not just numerically awkward). +pub fn benefit_ratio(baseline_value: f64, delta: f64) -> Option { + if baseline_value > 0.0 { + Some(delta / baseline_value) + } else { + None + } +} + +/// `total_cost(H) = recurring_cost_rate * H + one_shot_cost` — finite-run or +/// one-shot totals require an explicit horizon. Returns `None` (never a +/// fabricated total) when both terms are `None`, or when `horizon` isn't a +/// finite, non-negative number for a `Some(rate)`. Rate and one-shot costs +/// are passed as separate arguments specifically so they can never be +/// silently added by a caller before this function ever sees them. +pub fn total_cost(recurring_cost_rate: Option, horizon: f64, one_shot_cost: Option) -> Option { + let recurring = match recurring_cost_rate { + Some(rate) => { + if !horizon.is_finite() || horizon < 0.0 { + return None; + } + rate * horizon + } + None => 0.0, + }; + match (recurring_cost_rate, one_shot_cost) { + (None, None) => None, + _ => Some(recurring + one_shot_cost.unwrap_or(0.0)), + } +} + +/// Two [`CostAnnotation`]s were summed by [`sum_workload_costs`] despite +/// disagreeing on [`CostUnit`] — unit-incompatible aggregation is rejected +/// rather than silently mixed. +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +pub struct UnitMismatch { + pub first: CostUnit, + pub second: CostUnit, +} + +impl std::fmt::Display for UnitMismatch { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!( + f, + "cannot aggregate cost annotations with mismatched units: {} vs {}", + self.first, self.second + ) + } +} +impl std::error::Error for UnitMismatch {} + +/// Sum a workload's per-node cost annotations into one workload-wide total, +/// counting each distinct `workload_node_id` exactly once — the "shared +/// nodes must be counted once in workload totals" requirement. `entries` is +/// `(workload_node_id, annotation)` pairs; an entry with `workload_node_id: +/// None` is never deduplicated against anything else (each is its own, +/// always-unique contribution). An entry whose `annotation.value` is `None` +/// (i.e. [`CostSource::Unavailable`]) contributes nothing to the sum but +/// does not invalidate it — the total is simply computed over whichever +/// inputs are actually known, same spirit as `Option`-typed inputs +/// elsewhere in this module. +/// +/// Rejects the sum with [`UnitMismatch`] the moment two *valued* entries +/// disagree on [`CostUnit`] — "unit-incompatible aggregation is rejected". +pub fn sum_workload_costs<'a, I>(entries: I) -> Result +where + I: IntoIterator, &'a CostAnnotation)>, +{ + let mut seen_ids = std::collections::HashSet::new(); + let mut unit: Option = None; + let mut total = 0.0_f64; + let mut counted_any = false; + let mut model_versions: Vec = Vec::new(); + + for (workload_node_id, annotation) in entries { + let Some(value) = annotation.value else { + continue; + }; + match unit { + None => unit = Some(annotation.unit), + Some(existing) if existing != annotation.unit => { + return Err(UnitMismatch { + first: existing, + second: annotation.unit, + }); + } + _ => {} + } + if let Some(id) = workload_node_id { + if !seen_ids.insert(id) { + continue; // already counted this shared node once + } + } + total += value; + counted_any = true; + if let Some(version) = &annotation.model_version { + if !model_versions.contains(version) { + model_versions.push(version.clone()); + } + } + } + + Ok(if counted_any { + CostAnnotation { + value: Some(total), + unit: unit.expect("counted_any implies unit was set"), + source: CostSource::Modeled, + baseline: None, + delta: None, + benefit_ratio: None, + model_version: if model_versions.len() == 1 { + Some(model_versions.remove(0)) + } else { + None + }, + benchmark_id: None, + inputs: Vec::new(), + } + } else { + CostAnnotation::unavailable(unit.unwrap_or(CostUnit::RelativeStructuralUnits)) + }) +} + +/// Whole-selected-workload cost/benefit — one query's (or one workload +/// batch's) aggregate baseline, selected, and benefit, built from +/// [`sum_workload_costs`] over that scope's own per-decision node +/// annotations. See [`crate::dag_export::NamedGraph::workload_cost`] / +/// [`crate::dag_export::WorkloadGraph::workload_cost`]. +#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] +pub struct WorkloadCostSummary { + pub baseline_cost: CostAnnotation, + pub selected_cost: CostAnnotation, + pub benefit: CostAnnotation, +} + +/// Build a [`WorkloadCostSummary`] from one `(workload_node_id, baseline, +/// selected)` triple per decision node in scope — see +/// [`WorkloadCostSummary`]'s own doc. `model_version` labels the resulting +/// `benefit` annotation. +pub fn workload_cost_summary<'a, I>( + entries: I, + model_version: impl Into, +) -> Result +where + I: IntoIterator, &'a CostAnnotation, &'a CostAnnotation)> + Clone, +{ + let baseline_cost = sum_workload_costs(entries.clone().into_iter().map(|(id, baseline, _)| (id, baseline)))?; + let selected_cost = sum_workload_costs(entries.into_iter().map(|(id, _, selected)| (id, selected)))?; + + let benefit = match (baseline_cost.value, selected_cost.value) { + (Some(baseline_value), Some(selected_value)) if baseline_cost.unit == selected_cost.unit => { + let delta = baseline_value - selected_value; + CostAnnotation { + value: Some(delta), + unit: selected_cost.unit, + source: CostSource::Modeled, + baseline: Some(BaselineRef::PreAsapRecomputation), + delta: None, + benefit_ratio: benefit_ratio(baseline_value, delta), + model_version: Some(model_version.into()), + benchmark_id: None, + inputs: Vec::new(), + } + } + (Some(_), Some(_)) => { + return Err(UnitMismatch { + first: baseline_cost.unit, + second: selected_cost.unit, + }) + } + _ => CostAnnotation::unavailable(selected_cost.unit), + }; + + Ok(WorkloadCostSummary { + baseline_cost, + selected_cost, + benefit, + }) +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn unavailable_has_no_value_and_no_synthetic_number() { + let a = CostAnnotation::unavailable(CostUnit::RelativeStructuralUnits); + assert_eq!(a.value, None); + assert_eq!(a.source, CostSource::Unavailable); + } + + #[test] + fn with_baseline_computes_delta_and_ratio() { + let a = CostAnnotation::modeled(3.0, CostUnit::RelativeStructuralUnits, "v1", vec![]) + .with_baseline(BaselineRef::PreAsapRecomputation, 10.0); + assert_eq!(a.delta, Some(7.0)); + assert_eq!(a.benefit_ratio, Some(0.7)); + assert_eq!(a.baseline, Some(BaselineRef::PreAsapRecomputation)); + } + + #[test] + fn benefit_ratio_unavailable_when_baseline_not_positive() { + assert_eq!(benefit_ratio(0.0, 5.0), None); + assert_eq!(benefit_ratio(-1.0, 5.0), None); + assert_eq!(benefit_ratio(2.0, 1.0), Some(0.5)); + } + + #[test] + fn with_baseline_on_unavailable_annotation_is_a_no_op() { + let a = CostAnnotation::unavailable(CostUnit::CostUnits) + .with_baseline(BaselineRef::PreAsapRecomputation, 10.0); + assert_eq!(a.value, None); + assert_eq!(a.delta, None); + assert_eq!(a.baseline, None); + } + + #[test] + fn total_cost_requires_a_horizon_for_a_recurring_rate() { + assert_eq!(total_cost(Some(2.0), 5.0, None), Some(10.0)); + assert_eq!(total_cost(Some(2.0), 5.0, Some(1.0)), Some(11.0)); + assert_eq!(total_cost(None, 5.0, Some(4.0)), Some(4.0)); + assert_eq!(total_cost(None, 5.0, None), None); + } + + #[test] + fn total_cost_rejects_a_non_finite_or_negative_horizon() { + assert_eq!(total_cost(Some(2.0), f64::NAN, None), None); + assert_eq!(total_cost(Some(2.0), f64::INFINITY, None), None); + assert_eq!(total_cost(Some(2.0), -1.0, None), None); + } + + fn ann(value: f64, unit: CostUnit) -> CostAnnotation { + CostAnnotation::modeled(value, unit, "v1", vec![]) + } + + #[test] + fn sum_workload_costs_counts_a_shared_node_once() { + let a = ann(5.0, CostUnit::RelativeStructuralUnits); + let b = ann(5.0, CostUnit::RelativeStructuralUnits); + let c = ann(2.0, CostUnit::RelativeStructuralUnits); + // Node id 1 shared by two queries (same decision, same cost) must + // only be counted once; node id 2 is a distinct contribution. + let total = sum_workload_costs(vec![(Some(1), &a), (Some(1), &b), (Some(2), &c)]).unwrap(); + assert_eq!(total.value, Some(7.0), "5.0 (once) + 2.0, not 5+5+2"); + } + + #[test] + fn sum_workload_costs_never_deduplicates_entries_with_no_workload_id() { + let a = ann(3.0, CostUnit::RelativeStructuralUnits); + let b = ann(3.0, CostUnit::RelativeStructuralUnits); + let total = sum_workload_costs(vec![(None, &a), (None, &b)]).unwrap(); + assert_eq!(total.value, Some(6.0)); + } + + #[test] + fn sum_workload_costs_skips_unavailable_entries_without_failing() { + let known = ann(4.0, CostUnit::RelativeStructuralUnits); + let unavailable = CostAnnotation::unavailable(CostUnit::RelativeStructuralUnits); + let total = sum_workload_costs(vec![(None, &known), (None, &unavailable)]).unwrap(); + assert_eq!(total.value, Some(4.0)); + } + + #[test] + fn sum_workload_costs_rejects_mismatched_units() { + let rate = ann(1.0, CostUnit::CostUnitsPerSecond); + let structural = ann(1.0, CostUnit::RelativeStructuralUnits); + let err = sum_workload_costs(vec![(None, &rate), (None, &structural)]).unwrap_err(); + assert_eq!(err.first, CostUnit::CostUnitsPerSecond); + assert_eq!(err.second, CostUnit::RelativeStructuralUnits); + } + + #[test] + fn workload_cost_summary_computes_benefit_from_deduplicated_totals() { + let baseline1 = ann(10.0, CostUnit::RelativeStructuralUnits); + let selected1 = ann(3.0, CostUnit::RelativeStructuralUnits); + let baseline2 = ann(10.0, CostUnit::RelativeStructuralUnits); // same shared node + let selected2 = ann(3.0, CostUnit::RelativeStructuralUnits); + let baseline3 = ann(4.0, CostUnit::RelativeStructuralUnits); + let selected3 = ann(1.0, CostUnit::RelativeStructuralUnits); + + let entries = vec![ + (Some(1_u32), &baseline1, &selected1), + (Some(1_u32), &baseline2, &selected2), // duplicate of node 1 — must not double count + (Some(2_u32), &baseline3, &selected3), + ]; + let summary = workload_cost_summary(entries, "test-v1").unwrap(); + assert_eq!(summary.baseline_cost.value, Some(14.0), "10 (once) + 4"); + assert_eq!(summary.selected_cost.value, Some(4.0), "3 (once) + 1"); + assert_eq!(summary.benefit.value, Some(10.0)); + assert_eq!(summary.benefit.benefit_ratio, Some(10.0 / 14.0)); + } +} diff --git a/crates/types/src/dag_export.rs b/crates/types/src/dag_export.rs index 5df2ed8c..d35a3ba4 100644 --- a/crates/types/src/dag_export.rs +++ b/crates/types/src/dag_export.rs @@ -47,7 +47,8 @@ use std::rc::Rc; use serde::Serialize; use crate::post_asap::{AccuracyError, ResultGuarantee, SummaryExpr, SummaryNode}; -use crate::pre_asap::cse::{structural_hash, HashCache}; +use crate::cost::{CostAnnotation, CostInput, CostUnit}; +use crate::pre_asap::cse::{dag_node_count, structural_hash, HashCache}; use crate::pre_asap::query_expr::{QueryExpr, Source}; /// One flattened IR node. `detail` holds this node's own scalar fields @@ -152,6 +153,41 @@ pub struct DagDecision { /// `replacement_root` for the node replacing the pre-ASAP target; /// `replacement_region` for its generated or carried descendants. pub role: &'static str, + /// Structured counterpart of `cost` above — see [`CostAnnotation`] + /// (issue #286). `None` for the same reason `cost` can be `f64::NAN`: + /// the plugged-in cost model doesn't estimate a number for this + /// candidate shape. Additive: every existing reader of `cost` keeps + /// working unchanged; a reader that wants units, provenance, and an + /// explicit baseline comparison reads this instead. + #[serde(skip_serializing_if = "Option::is_none")] + pub baseline_cost: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub selected_cost: Option, + /// `baseline_cost.value - selected_cost.value` under `baseline_cost`'s + /// own baseline — for a winning `SharedSubtreeStrategy`/`CseShare` + /// decision this *is* "avoided recomputation for a shared sub-DAG" (one + /// of `dag_export`'s issue #286 granularity items): the baseline is + /// exactly the cost of recomputing this subtree independently at every + /// consumer, so the benefit is exactly what sharing avoided. + #[serde(skip_serializing_if = "Option::is_none")] + pub benefit: Option, +} + +/// A cost/benefit annotation attributed to one specific graph edge (`from` +/// -> `to`, in [`DagNode::children`]'s direction) rather than to a node — +/// issue #286's "edge cost only when genuinely attributable to the edge" +/// granularity item. `dag_export`'s own producer +/// ([`crates/devtools/src/bin/dag_export.rs`](../../../devtools/src/bin/dag_export.rs)) +/// only ever populates this for a `post_graph` edge whose target node is a +/// genuine DAG merge point (in-degree > 1, from +/// `deduplicate_pointer_shared_nodes`) — the materialization/read cost of +/// consuming an already-shared result along that one specific edge, never a +/// guessed multi-hop path cost (explicitly out of scope per the issue). +#[derive(Debug, Clone, Serialize)] +pub struct EdgeCostAnnotation { + pub from: u32, + pub to: u32, + pub cost: CostAnnotation, } /// One query's exported graph. `nodes[root as usize]` is the tree's root. @@ -159,6 +195,13 @@ pub struct DagDecision { pub struct DagGraph { pub nodes: Vec, pub root: u32, + /// See [`EdgeCostAnnotation`]. Always empty unless a higher layer + /// explicitly populated it (same layering rule as [`DagNode::notes`]); + /// omitted from JSON entirely when empty, so every existing producer of + /// [`DagGraph`] (every call to [`export`]/[`export_summary`]) is + /// unaffected. + #[serde(default, skip_serializing_if = "Vec::is_empty")] + pub edge_annotations: Vec, } /// A single named query within a multi-query export. @@ -205,6 +248,17 @@ pub struct NamedGraph { /// same additive rule as `replacements`. #[serde(default, skip_serializing_if = "Vec::is_empty")] pub rejections: Vec, + /// This query's whole selected-workload cost/benefit — one of issue + /// #286's granularity items. Built by summing this query's own + /// `post_graph` decision-node cost annotations, deduplicated by + /// `workload_node_id` (a node this query shares with an earlier query + /// in the same export is still counted once here, since + /// `assign_workload_node_ids` assigns identity workload-wide, not + /// per-query). `None` unless a higher layer built one (same + /// `--post-asap`-gated pattern as `post_graph`); omitted from JSON when + /// absent. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub workload_cost: Option, } /// A batch of named queries — the shape the viewer's multi-query / compare @@ -214,6 +268,14 @@ pub struct NamedGraph { #[derive(Debug, Clone, Serialize)] pub struct WorkloadGraph { pub queries: Vec, + /// The selected multi-query workload's own cost/benefit, deduplicated + /// across every query in `queries` (not just within one) — the + /// "Selecting ... multiple queries ... display correct Pre/Post-ASAP + /// annotations" / "workload totals count shared nodes once" acceptance + /// criteria for the batch/union case. `None` unless a higher layer + /// built one; omitted from JSON when absent. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub workload_cost: Option, } // ── Post-ASAP replacement export — a second, layering-seam-shaped feature ── @@ -526,6 +588,21 @@ pub struct TargetReplacement { /// `export(target)` for the `MemoGroup`'s own `target`, reused as-is. pub before: DagGraph, pub after: TargetReplacementAfter, + /// Structured baseline/selected/benefit cost annotations for this one + /// replacement region — issue #286's "replacement-region baseline + /// cost, selected cost, and benefit" granularity item. Always + /// consistent with `cost` above: `selected_cost.value == Some(cost)` + /// whenever `cost` is finite, `None`/`Unavailable` whenever it's + /// `NaN`. `baseline_cost` is always populated (the pre-ASAP + /// independent-recomputation baseline is computable from the target + /// alone, unlike a candidate's own estimated cost); `benefit` is + /// `Unavailable` exactly when `selected_cost` is. + #[serde(skip_serializing_if = "Option::is_none")] + pub baseline_cost: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub selected_cost: Option, + #[serde(skip_serializing_if = "Option::is_none")] + pub benefit: Option, } /// What a [`TargetReplacement`] became — either a genuine post-ASAP binding @@ -562,7 +639,11 @@ pub fn export(expr: &QueryExpr) -> DagGraph { // callback regardless (so `export_post_asap` can share this exact // per-variant traversal instead of duplicating it). let root = build(expr, &mut nodes, &mut cache, &mut |_| None); - DagGraph { nodes, root } + DagGraph { + nodes, + root, + edge_annotations: Vec::new(), + } } /// What a higher layer found for one specific pre-ASAP node when building a @@ -665,12 +746,73 @@ fn deduplicate_pointer_shared_nodes(nodes: Vec, root: u32) -> DagGraph deduplicated.push(node); } + let edge_annotations = shared_node_edge_annotations(&deduplicated); DagGraph { nodes: deduplicated, root: old_to_new[root as usize], + edge_annotations, } } +/// One [`EdgeCostAnnotation`] per edge running *into* a genuine DAG merge +/// point in `nodes` — a node id referenced as a child by more than one +/// parent, the exact shape [`deduplicate_pointer_shared_nodes`] produces +/// for a subtree two or more consumers share by `Rc` pointer identity +/// (whether or not a `SharedSubtreeStrategy` decision is what caused it — +/// ordinary `Rc`-shared pre-ASAP structure merges here too). This is the +/// "edge cost only when genuinely attributable to the edge" granularity +/// item from issue #286: the materialization/read cost of one consumer +/// reading the already-computed shared result along its own specific edge, +/// evenly divided across every consuming edge — never a guessed multi-hop +/// path cost (explicitly out of scope per the issue). +/// +/// Uses [`dag_node_count`] (the same structural-size proxy +/// `asap_aware_mapping::cost_model::default_cse_recompute_cost` computes; +/// duplicated here in plain terms since `asap_types` may not depend on that +/// higher crate) rather than a real per-byte transfer cost — honestly +/// unit-tagged [`CostUnit::RelativeStructuralUnits`], not a rate. +fn shared_node_edge_annotations(nodes: &[DagNode]) -> Vec { + let mut parents_of: HashMap> = HashMap::new(); + for node in nodes { + for &child in &node.children { + parents_of.entry(child).or_default().push(node.id); + } + } + + let mut annotations = Vec::new(); + for (child_id, parents) in &parents_of { + if parents.len() < 2 { + continue; + } + let Some(child) = nodes.get(*child_id as usize) else { + continue; + }; + let Some(source_expr) = child.source_expr.as_ref() else { + continue; // no QueryExpr to size (e.g. a post-ASAP-originated node) + }; + let consumer_count = parents.len(); + let materialized_size = dag_node_count(source_expr) as f64; + let per_edge_cost = materialized_size / consumer_count as f64; + for &parent in parents { + annotations.push(EdgeCostAnnotation { + from: *child_id, + to: parent, + cost: CostAnnotation::modeled( + per_edge_cost, + CostUnit::RelativeStructuralUnits, + "dag_export-shared-edge-v1", + vec![ + CostInput::new("materialized_subtree_size", materialized_size), + CostInput::new("consumer_count", consumer_count as f64), + ], + ), + }); + } + } + annotations.sort_by_key(|edge| (edge.from, edge.to)); + annotations +} + /// Push one flattened node for `expr`. `expr` is the *whole* subtree this /// node represents (not just its own fields) — `hash` is /// [`structural_hash(expr)`](structural_hash), the identical function and @@ -1303,6 +1445,7 @@ mod tests { assert!(graph.nodes[0].notes.is_empty()); assert!(graph.nodes[0].decision.is_none()); assert!(graph.nodes[0].schema.is_some()); + assert!(graph.edge_annotations.is_empty()); let json = serde_json::to_string(&graph.nodes[0]).unwrap(); assert!( !json.contains("notes"), @@ -1312,6 +1455,64 @@ mod tests { !json.contains("decision"), "empty `decision` must be skipped, not serialized as `null`: {json}" ); + let graph_json = serde_json::to_string(&graph).unwrap(); + assert!( + !graph_json.contains("edge_annotations"), + "empty `edge_annotations` must be skipped, not serialized as `[]`: {graph_json}" + ); + } + + // ── Issue #286: edge cost annotations for genuine DAG merge points ──── + + #[test] + fn export_post_asap_annotates_edges_into_a_genuinely_shared_node() { + // Two parents (a Join's own two sides) share the exact same `Rc` + // Scan — `export_post_asap`'s `deduplicate_pointer_shared_nodes` + // must merge them onto one node id, and (issue #286) attach an + // `EdgeCostAnnotation` on each of the two edges running into it. + let shared_scan = Rc::new(scan("metrics", value_col())); + let root = QueryExpr::Join { + kind: crate::pre_asap::query_expr::JoinKind::Inner, + pred: Predicate(Rc::new(QueryExpr::Literal(ScalarValue::Boolean(true)))), + left: Rc::clone(&shared_scan), + right: Rc::clone(&shared_scan), + }; + let graph = export_post_asap(&root, &mut |_| None); + + assert_eq!( + graph.nodes.iter().filter(|n| n.kind == "Scan").count(), + 1, + "the shared Scan must be merged onto one node, not duplicated" + ); + let scan_id = graph.nodes.iter().find(|n| n.kind == "Scan").unwrap().id; + let edges_into_scan: Vec<_> = graph + .edge_annotations + .iter() + .filter(|edge| edge.from == scan_id) + .collect(); + assert_eq!(edges_into_scan.len(), 2, "one annotation per consuming edge"); + for edge in &edges_into_scan { + assert_eq!(edge.cost.value, Some(0.5), "1 unique node / 2 consumers"); + assert_eq!(edge.cost.unit, crate::cost::CostUnit::RelativeStructuralUnits); + assert_eq!(edge.cost.source, crate::cost::CostSource::Modeled); + } + } + + #[test] + fn export_never_produces_edge_annotations_since_it_never_shares_nodes() { + // Plain `export` (no `export_post_asap`) never deduplicates by `Rc` + // pointer identity — even a workload-level shared subtree renders as + // two independent tree nodes here, so there is nothing to annotate. + let shared_scan = Rc::new(scan("metrics", value_col())); + let root = QueryExpr::Join { + kind: crate::pre_asap::query_expr::JoinKind::Inner, + pred: Predicate(Rc::new(QueryExpr::Literal(ScalarValue::Boolean(true)))), + left: Rc::clone(&shared_scan), + right: Rc::clone(&shared_scan), + }; + let graph = export(&root); + assert_eq!(graph.nodes.iter().filter(|n| n.kind == "Scan").count(), 2); + assert!(graph.edge_annotations.is_empty()); } #[test] diff --git a/crates/types/src/lib.rs b/crates/types/src/lib.rs index 1308b976..dbc1665c 100644 --- a/crates/types/src/lib.rs +++ b/crates/types/src/lib.rs @@ -19,6 +19,7 @@ //! runtime's readout path can call directly — see that module's docs //! for the planning-time/execution-time boundary and why it's unwired //! today. +pub mod cost; pub mod dag_export; pub mod post_asap; pub mod pre_asap; diff --git a/tools/dag-viewer/README.md b/tools/dag-viewer/README.md index ba8bad70..7cc8e58c 100644 --- a/tools/dag-viewer/README.md +++ b/tools/dag-viewer/README.md @@ -13,6 +13,11 @@ The viewer has one visualization mode: **Pre/Post-ASAP**. target operation derives its output schema in the details panel. - The details panel shows the selected workload's bound table/metric schemas and can be resized by dragging its left edge. +- A post-ASAP node whose winning decision carries a cost/benefit annotation + shows a concise `▼NN%`/`▲NN%` badge next to its label; the sidebar and the + workload-scope summary show the full baseline/selected/benefit breakdown, + with units and provenance, wherever the export provides one — see "Cost/ + benefit annotations" below. There are no separate Single, Compare, or Union modes. @@ -91,7 +96,10 @@ a selected replacement directly contains: "rationale": "count realizes as a Cms sketch", "rank": 0, "cost": 3.0, - "role": "replacement_root" + "role": "replacement_root", + "baseline_cost": { "value": 6.0, "unit": "RelativeStructuralUnits", "source": "Modeled", "model_version": "dag_export-structural-cost-v1" }, + "selected_cost": { "value": 3.0, "unit": "RelativeStructuralUnits", "source": "Modeled", "baseline": {"kind": "PreAsapRecomputation"}, "delta": 3.0, "benefit_ratio": 0.5 }, + "benefit": { "value": 3.0, "unit": "RelativeStructuralUnits", "source": "Modeled", "baseline": {"kind": "PreAsapRecomputation"}, "benefit_ratio": 0.5 } } } ``` @@ -106,6 +114,34 @@ filter predicates, projections, sources, summary families, and readout queries. Category icons are deliberately omitted so they cannot be confused with IR text. +### Cost/benefit annotations (issue #286) + +`decision.baseline_cost` / `.selected_cost` / `.benefit` are structured +[`CostAnnotation`](../../crates/types/src/cost.rs)s: `value` + `unit` + +`source` (`Modeled` / `Measured` / `Unavailable`), optionally `baseline` + +`delta` + `benefit_ratio`, and `model_version`/`benchmark_id`/`inputs` for +provenance. A missing `value` (`source: "Unavailable"`) always renders as +**Not estimated** — the viewer never fabricates a number. Today every value +`dag_export` produces is unit-tagged `RelativeStructuralUnits`: a +structural-size proxy (the same one `asap_aware_mapping::cost_model` +already uses for ranking), not a real cost-per-second rate — issue #287's +recurrence-aware inputs (`update_rate`/`evaluation_rate`/`query_interval`) +are what would let a future export use `CostUnitsPerSecond` instead; the +annotation plumbing already accepts that unit unchanged. + +The same three fields also appear on `TargetReplacement` +(replacement-region baseline/selected/benefit), `NamedGraph.workload_cost` / +`WorkloadGraph.workload_cost` (whole selected-workload cost/benefit, shared +nodes counted once via `decision.id` dedup), and `DagGraph.edge_annotations` +(materialization/read cost on an edge into a genuine DAG merge point — never +a guessed multi-hop path cost). The sidebar shows the full breakdown +(value, unit, provenance, baseline, ratio, inputs) on node/edge click and in +the workload-scope summary; a post-ASAP node with a costed decision also +gets a concise on-graph `▼NN%`/`▲NN%` badge next to its label. + +All of this is additive and optional: an export with none of these fields +(anything produced before issue #286) renders exactly as before. + ## Tests ```sh diff --git a/tools/dag-viewer/dag.example.json b/tools/dag-viewer/dag.example.json index 401aa0a8..de28c8fe 100644 --- a/tools/dag-viewer/dag.example.json +++ b/tools/dag-viewer/dag.example.json @@ -497,6 +497,43 @@ ], "root": 2 } + }, + "baseline_cost": { + "value": 2.0, + "unit": "RelativeStructuralUnits", + "source": "Modeled", + "model_version": "dag_export-structural-cost-v1", + "inputs": [ + { + "name": "per_consumer_recompute_cost", + "value": 2.0 + }, + { + "name": "consumer_count", + "value": 1.0 + } + ] + }, + "selected_cost": { + "value": 3.0, + "unit": "RelativeStructuralUnits", + "source": "Modeled", + "baseline": { + "kind": "PreAsapRecomputation" + }, + "delta": -1.0, + "benefit_ratio": -0.5, + "model_version": "dag_export-structural-cost-v1" + }, + "benefit": { + "value": -1.0, + "unit": "RelativeStructuralUnits", + "source": "Modeled", + "baseline": { + "kind": "PreAsapRecomputation" + }, + "benefit_ratio": -0.5, + "model_version": "dag_export-structural-cost-v1" } } ], @@ -597,7 +634,44 @@ "rationale": "count realizes as a Cms sketch", "rank": 0, "cost": 3.0, - "role": "replacement_region" + "role": "replacement_region", + "baseline_cost": { + "value": 2.0, + "unit": "RelativeStructuralUnits", + "source": "Modeled", + "model_version": "dag_export-structural-cost-v1", + "inputs": [ + { + "name": "per_consumer_recompute_cost", + "value": 2.0 + }, + { + "name": "consumer_count", + "value": 1.0 + } + ] + }, + "selected_cost": { + "value": 3.0, + "unit": "RelativeStructuralUnits", + "source": "Modeled", + "baseline": { + "kind": "PreAsapRecomputation" + }, + "delta": -1.0, + "benefit_ratio": -0.5, + "model_version": "dag_export-structural-cost-v1" + }, + "benefit": { + "value": -1.0, + "unit": "RelativeStructuralUnits", + "source": "Modeled", + "baseline": { + "kind": "PreAsapRecomputation" + }, + "benefit_ratio": -0.5, + "model_version": "dag_export-structural-cost-v1" + } } }, { @@ -639,7 +713,44 @@ "rationale": "count realizes as a Cms sketch", "rank": 0, "cost": 3.0, - "role": "replacement_region" + "role": "replacement_region", + "baseline_cost": { + "value": 2.0, + "unit": "RelativeStructuralUnits", + "source": "Modeled", + "model_version": "dag_export-structural-cost-v1", + "inputs": [ + { + "name": "per_consumer_recompute_cost", + "value": 2.0 + }, + { + "name": "consumer_count", + "value": 1.0 + } + ] + }, + "selected_cost": { + "value": 3.0, + "unit": "RelativeStructuralUnits", + "source": "Modeled", + "baseline": { + "kind": "PreAsapRecomputation" + }, + "delta": -1.0, + "benefit_ratio": -0.5, + "model_version": "dag_export-structural-cost-v1" + }, + "benefit": { + "value": -1.0, + "unit": "RelativeStructuralUnits", + "source": "Modeled", + "baseline": { + "kind": "PreAsapRecomputation" + }, + "benefit_ratio": -0.5, + "model_version": "dag_export-structural-cost-v1" + } } }, { @@ -674,7 +785,44 @@ "rationale": "count realizes as a Cms sketch", "rank": 0, "cost": 3.0, - "role": "replacement_root" + "role": "replacement_root", + "baseline_cost": { + "value": 2.0, + "unit": "RelativeStructuralUnits", + "source": "Modeled", + "model_version": "dag_export-structural-cost-v1", + "inputs": [ + { + "name": "per_consumer_recompute_cost", + "value": 2.0 + }, + { + "name": "consumer_count", + "value": 1.0 + } + ] + }, + "selected_cost": { + "value": 3.0, + "unit": "RelativeStructuralUnits", + "source": "Modeled", + "baseline": { + "kind": "PreAsapRecomputation" + }, + "delta": -1.0, + "benefit_ratio": -0.5, + "model_version": "dag_export-structural-cost-v1" + }, + "benefit": { + "value": -1.0, + "unit": "RelativeStructuralUnits", + "source": "Modeled", + "baseline": { + "kind": "PreAsapRecomputation" + }, + "benefit_ratio": -0.5, + "model_version": "dag_export-structural-cost-v1" + } } }, { @@ -729,6 +877,30 @@ } ], "root": 3 + }, + "workload_cost": { + "baseline_cost": { + "value": 2.0, + "unit": "RelativeStructuralUnits", + "source": "Modeled", + "model_version": "dag_export-structural-cost-v1" + }, + "selected_cost": { + "value": 3.0, + "unit": "RelativeStructuralUnits", + "source": "Modeled", + "model_version": "dag_export-structural-cost-v1" + }, + "benefit": { + "value": -1.0, + "unit": "RelativeStructuralUnits", + "source": "Modeled", + "baseline": { + "kind": "PreAsapRecomputation" + }, + "benefit_ratio": -0.5, + "model_version": "dag_export-workload-cost-v1" + } } }, { @@ -1451,6 +1623,43 @@ ], "root": 5 } + }, + "baseline_cost": { + "value": 2.0, + "unit": "RelativeStructuralUnits", + "source": "Modeled", + "model_version": "dag_export-structural-cost-v1", + "inputs": [ + { + "name": "per_consumer_recompute_cost", + "value": 2.0 + }, + { + "name": "consumer_count", + "value": 1.0 + } + ] + }, + "selected_cost": { + "value": 2.0, + "unit": "RelativeStructuralUnits", + "source": "Modeled", + "baseline": { + "kind": "PreAsapRecomputation" + }, + "delta": 0.0, + "benefit_ratio": 0.0, + "model_version": "dag_export-structural-cost-v1" + }, + "benefit": { + "value": 0.0, + "unit": "RelativeStructuralUnits", + "source": "Modeled", + "baseline": { + "kind": "PreAsapRecomputation" + }, + "benefit_ratio": 0.0, + "model_version": "dag_export-structural-cost-v1" } } ], @@ -1551,7 +1760,44 @@ "rationale": "Sum { col: Some(3) } realizes as an exact Sum accumulator", "rank": 0, "cost": 3.0, - "role": "replacement_region" + "role": "replacement_region", + "baseline_cost": { + "value": 2.0, + "unit": "RelativeStructuralUnits", + "source": "Modeled", + "model_version": "dag_export-structural-cost-v1", + "inputs": [ + { + "name": "per_consumer_recompute_cost", + "value": 2.0 + }, + { + "name": "consumer_count", + "value": 1.0 + } + ] + }, + "selected_cost": { + "value": 3.0, + "unit": "RelativeStructuralUnits", + "source": "Modeled", + "baseline": { + "kind": "PreAsapRecomputation" + }, + "delta": -1.0, + "benefit_ratio": -0.5, + "model_version": "dag_export-structural-cost-v1" + }, + "benefit": { + "value": -1.0, + "unit": "RelativeStructuralUnits", + "source": "Modeled", + "baseline": { + "kind": "PreAsapRecomputation" + }, + "benefit_ratio": -0.5, + "model_version": "dag_export-structural-cost-v1" + } } }, { @@ -1598,7 +1844,44 @@ "rationale": "Sum { col: Some(3) } realizes as an exact Sum accumulator", "rank": 0, "cost": 3.0, - "role": "replacement_root" + "role": "replacement_root", + "baseline_cost": { + "value": 2.0, + "unit": "RelativeStructuralUnits", + "source": "Modeled", + "model_version": "dag_export-structural-cost-v1", + "inputs": [ + { + "name": "per_consumer_recompute_cost", + "value": 2.0 + }, + { + "name": "consumer_count", + "value": 1.0 + } + ] + }, + "selected_cost": { + "value": 3.0, + "unit": "RelativeStructuralUnits", + "source": "Modeled", + "baseline": { + "kind": "PreAsapRecomputation" + }, + "delta": -1.0, + "benefit_ratio": -0.5, + "model_version": "dag_export-structural-cost-v1" + }, + "benefit": { + "value": -1.0, + "unit": "RelativeStructuralUnits", + "source": "Modeled", + "baseline": { + "kind": "PreAsapRecomputation" + }, + "benefit_ratio": -0.5, + "model_version": "dag_export-structural-cost-v1" + } } }, { @@ -1662,7 +1945,44 @@ "rationale": "Rewrites AVG into SUM and COUNT under the same grouping, then divides SUM by COUNT.", "rank": 0, "cost": 2.0, - "role": "replacement_region" + "role": "replacement_region", + "baseline_cost": { + "value": 2.0, + "unit": "RelativeStructuralUnits", + "source": "Modeled", + "model_version": "dag_export-structural-cost-v1", + "inputs": [ + { + "name": "per_consumer_recompute_cost", + "value": 2.0 + }, + { + "name": "consumer_count", + "value": 1.0 + } + ] + }, + "selected_cost": { + "value": 2.0, + "unit": "RelativeStructuralUnits", + "source": "Modeled", + "baseline": { + "kind": "PreAsapRecomputation" + }, + "delta": 0.0, + "benefit_ratio": 0.0, + "model_version": "dag_export-structural-cost-v1" + }, + "benefit": { + "value": 0.0, + "unit": "RelativeStructuralUnits", + "source": "Modeled", + "baseline": { + "kind": "PreAsapRecomputation" + }, + "benefit_ratio": 0.0, + "model_version": "dag_export-structural-cost-v1" + } } }, { @@ -1704,7 +2024,44 @@ "rationale": "count realizes as an exact Count accumulator", "rank": 0, "cost": 3.0, - "role": "replacement_root" + "role": "replacement_root", + "baseline_cost": { + "value": 2.0, + "unit": "RelativeStructuralUnits", + "source": "Modeled", + "model_version": "dag_export-structural-cost-v1", + "inputs": [ + { + "name": "per_consumer_recompute_cost", + "value": 2.0 + }, + { + "name": "consumer_count", + "value": 1.0 + } + ] + }, + "selected_cost": { + "value": 3.0, + "unit": "RelativeStructuralUnits", + "source": "Modeled", + "baseline": { + "kind": "PreAsapRecomputation" + }, + "delta": -1.0, + "benefit_ratio": -0.5, + "model_version": "dag_export-structural-cost-v1" + }, + "benefit": { + "value": -1.0, + "unit": "RelativeStructuralUnits", + "source": "Modeled", + "baseline": { + "kind": "PreAsapRecomputation" + }, + "benefit_ratio": -0.5, + "model_version": "dag_export-structural-cost-v1" + } } }, { @@ -1750,7 +2107,44 @@ "rationale": "Rewrites AVG into SUM and COUNT under the same grouping, then divides SUM by COUNT.", "rank": 0, "cost": 2.0, - "role": "replacement_root" + "role": "replacement_root", + "baseline_cost": { + "value": 2.0, + "unit": "RelativeStructuralUnits", + "source": "Modeled", + "model_version": "dag_export-structural-cost-v1", + "inputs": [ + { + "name": "per_consumer_recompute_cost", + "value": 2.0 + }, + { + "name": "consumer_count", + "value": 1.0 + } + ] + }, + "selected_cost": { + "value": 2.0, + "unit": "RelativeStructuralUnits", + "source": "Modeled", + "baseline": { + "kind": "PreAsapRecomputation" + }, + "delta": 0.0, + "benefit_ratio": 0.0, + "model_version": "dag_export-structural-cost-v1" + }, + "benefit": { + "value": 0.0, + "unit": "RelativeStructuralUnits", + "source": "Modeled", + "baseline": { + "kind": "PreAsapRecomputation" + }, + "benefit_ratio": 0.0, + "model_version": "dag_export-structural-cost-v1" + } } }, { @@ -1804,7 +2198,73 @@ "hash": 5277207484379927121 } ], - "root": 5 + "root": 5, + "edge_annotations": [ + { + "from": 0, + "to": 1, + "cost": { + "value": 0.5, + "unit": "RelativeStructuralUnits", + "source": "Modeled", + "model_version": "dag_export-shared-edge-v1", + "inputs": [ + { + "name": "materialized_subtree_size", + "value": 1.0 + }, + { + "name": "consumer_count", + "value": 2.0 + } + ] + } + }, + { + "from": 0, + "to": 3, + "cost": { + "value": 0.5, + "unit": "RelativeStructuralUnits", + "source": "Modeled", + "model_version": "dag_export-shared-edge-v1", + "inputs": [ + { + "name": "materialized_subtree_size", + "value": 1.0 + }, + { + "name": "consumer_count", + "value": 2.0 + } + ] + } + } + ] + }, + "workload_cost": { + "baseline_cost": { + "value": 6.0, + "unit": "RelativeStructuralUnits", + "source": "Modeled", + "model_version": "dag_export-structural-cost-v1" + }, + "selected_cost": { + "value": 8.0, + "unit": "RelativeStructuralUnits", + "source": "Modeled", + "model_version": "dag_export-structural-cost-v1" + }, + "benefit": { + "value": -2.0, + "unit": "RelativeStructuralUnits", + "source": "Modeled", + "baseline": { + "kind": "PreAsapRecomputation" + }, + "benefit_ratio": -0.3333333333333333, + "model_version": "dag_export-workload-cost-v1" + } } }, { @@ -2280,6 +2740,43 @@ ], "root": 1 } + }, + "baseline_cost": { + "value": 3.0, + "unit": "RelativeStructuralUnits", + "source": "Modeled", + "model_version": "dag_export-structural-cost-v1", + "inputs": [ + { + "name": "per_consumer_recompute_cost", + "value": 3.0 + }, + { + "name": "consumer_count", + "value": 1.0 + } + ] + }, + "selected_cost": { + "value": 4.0, + "unit": "RelativeStructuralUnits", + "source": "Modeled", + "baseline": { + "kind": "PreAsapRecomputation" + }, + "delta": -1.0, + "benefit_ratio": -0.3333333333333333, + "model_version": "dag_export-structural-cost-v1" + }, + "benefit": { + "value": -1.0, + "unit": "RelativeStructuralUnits", + "source": "Modeled", + "baseline": { + "kind": "PreAsapRecomputation" + }, + "benefit_ratio": -0.3333333333333333, + "model_version": "dag_export-structural-cost-v1" } }, { @@ -2731,6 +3228,43 @@ ], "root": 5 } + }, + "baseline_cost": { + "value": 5.0, + "unit": "RelativeStructuralUnits", + "source": "Modeled", + "model_version": "dag_export-structural-cost-v1", + "inputs": [ + { + "name": "per_consumer_recompute_cost", + "value": 5.0 + }, + { + "name": "consumer_count", + "value": 1.0 + } + ] + }, + "selected_cost": { + "value": 5.0, + "unit": "RelativeStructuralUnits", + "source": "Modeled", + "baseline": { + "kind": "PreAsapRecomputation" + }, + "delta": 0.0, + "benefit_ratio": 0.0, + "model_version": "dag_export-structural-cost-v1" + }, + "benefit": { + "value": 0.0, + "unit": "RelativeStructuralUnits", + "source": "Modeled", + "baseline": { + "kind": "PreAsapRecomputation" + }, + "benefit_ratio": 0.0, + "model_version": "dag_export-structural-cost-v1" } } ], @@ -2795,7 +3329,44 @@ "rationale": "Rate realizes as an exact Rate accumulator", "rank": 0, "cost": 4.0, - "role": "replacement_region" + "role": "replacement_region", + "baseline_cost": { + "value": 3.0, + "unit": "RelativeStructuralUnits", + "source": "Modeled", + "model_version": "dag_export-structural-cost-v1", + "inputs": [ + { + "name": "per_consumer_recompute_cost", + "value": 3.0 + }, + { + "name": "consumer_count", + "value": 1.0 + } + ] + }, + "selected_cost": { + "value": 4.0, + "unit": "RelativeStructuralUnits", + "source": "Modeled", + "baseline": { + "kind": "PreAsapRecomputation" + }, + "delta": -1.0, + "benefit_ratio": -0.3333333333333333, + "model_version": "dag_export-structural-cost-v1" + }, + "benefit": { + "value": -1.0, + "unit": "RelativeStructuralUnits", + "source": "Modeled", + "baseline": { + "kind": "PreAsapRecomputation" + }, + "benefit_ratio": -0.3333333333333333, + "model_version": "dag_export-structural-cost-v1" + } } }, { @@ -2838,7 +3409,44 @@ "rationale": "Rate realizes as an exact Rate accumulator", "rank": 0, "cost": 4.0, - "role": "replacement_region" + "role": "replacement_region", + "baseline_cost": { + "value": 3.0, + "unit": "RelativeStructuralUnits", + "source": "Modeled", + "model_version": "dag_export-structural-cost-v1", + "inputs": [ + { + "name": "per_consumer_recompute_cost", + "value": 3.0 + }, + { + "name": "consumer_count", + "value": 1.0 + } + ] + }, + "selected_cost": { + "value": 4.0, + "unit": "RelativeStructuralUnits", + "source": "Modeled", + "baseline": { + "kind": "PreAsapRecomputation" + }, + "delta": -1.0, + "benefit_ratio": -0.3333333333333333, + "model_version": "dag_export-structural-cost-v1" + }, + "benefit": { + "value": -1.0, + "unit": "RelativeStructuralUnits", + "source": "Modeled", + "baseline": { + "kind": "PreAsapRecomputation" + }, + "benefit_ratio": -0.3333333333333333, + "model_version": "dag_export-structural-cost-v1" + } } }, { @@ -2876,7 +3484,44 @@ "rationale": "Rate realizes as an exact Rate accumulator", "rank": 0, "cost": 4.0, - "role": "replacement_root" + "role": "replacement_root", + "baseline_cost": { + "value": 3.0, + "unit": "RelativeStructuralUnits", + "source": "Modeled", + "model_version": "dag_export-structural-cost-v1", + "inputs": [ + { + "name": "per_consumer_recompute_cost", + "value": 3.0 + }, + { + "name": "consumer_count", + "value": 1.0 + } + ] + }, + "selected_cost": { + "value": 4.0, + "unit": "RelativeStructuralUnits", + "source": "Modeled", + "baseline": { + "kind": "PreAsapRecomputation" + }, + "delta": -1.0, + "benefit_ratio": -0.3333333333333333, + "model_version": "dag_export-structural-cost-v1" + }, + "benefit": { + "value": -1.0, + "unit": "RelativeStructuralUnits", + "source": "Modeled", + "baseline": { + "kind": "PreAsapRecomputation" + }, + "benefit_ratio": -0.3333333333333333, + "model_version": "dag_export-structural-cost-v1" + } } }, { @@ -2925,7 +3570,44 @@ "rationale": "Derives this smaller top-k from a compatible larger top-k result shared by the workload.", "rank": 0, "cost": 5.0, - "role": "replacement_region" + "role": "replacement_region", + "baseline_cost": { + "value": 5.0, + "unit": "RelativeStructuralUnits", + "source": "Modeled", + "model_version": "dag_export-structural-cost-v1", + "inputs": [ + { + "name": "per_consumer_recompute_cost", + "value": 5.0 + }, + { + "name": "consumer_count", + "value": 1.0 + } + ] + }, + "selected_cost": { + "value": 5.0, + "unit": "RelativeStructuralUnits", + "source": "Modeled", + "baseline": { + "kind": "PreAsapRecomputation" + }, + "delta": 0.0, + "benefit_ratio": 0.0, + "model_version": "dag_export-structural-cost-v1" + }, + "benefit": { + "value": 0.0, + "unit": "RelativeStructuralUnits", + "source": "Modeled", + "baseline": { + "kind": "PreAsapRecomputation" + }, + "benefit_ratio": 0.0, + "model_version": "dag_export-structural-cost-v1" + } } }, { @@ -2966,7 +3648,44 @@ "rationale": "Derives this smaller top-k from a compatible larger top-k result shared by the workload.", "rank": 0, "cost": 5.0, - "role": "replacement_region" + "role": "replacement_region", + "baseline_cost": { + "value": 5.0, + "unit": "RelativeStructuralUnits", + "source": "Modeled", + "model_version": "dag_export-structural-cost-v1", + "inputs": [ + { + "name": "per_consumer_recompute_cost", + "value": 5.0 + }, + { + "name": "consumer_count", + "value": 1.0 + } + ] + }, + "selected_cost": { + "value": 5.0, + "unit": "RelativeStructuralUnits", + "source": "Modeled", + "baseline": { + "kind": "PreAsapRecomputation" + }, + "delta": 0.0, + "benefit_ratio": 0.0, + "model_version": "dag_export-structural-cost-v1" + }, + "benefit": { + "value": 0.0, + "unit": "RelativeStructuralUnits", + "source": "Modeled", + "baseline": { + "kind": "PreAsapRecomputation" + }, + "benefit_ratio": 0.0, + "model_version": "dag_export-structural-cost-v1" + } } }, { @@ -3007,11 +3726,72 @@ "rationale": "Derives this smaller top-k from a compatible larger top-k result shared by the workload.", "rank": 0, "cost": 5.0, - "role": "replacement_root" + "role": "replacement_root", + "baseline_cost": { + "value": 5.0, + "unit": "RelativeStructuralUnits", + "source": "Modeled", + "model_version": "dag_export-structural-cost-v1", + "inputs": [ + { + "name": "per_consumer_recompute_cost", + "value": 5.0 + }, + { + "name": "consumer_count", + "value": 1.0 + } + ] + }, + "selected_cost": { + "value": 5.0, + "unit": "RelativeStructuralUnits", + "source": "Modeled", + "baseline": { + "kind": "PreAsapRecomputation" + }, + "delta": 0.0, + "benefit_ratio": 0.0, + "model_version": "dag_export-structural-cost-v1" + }, + "benefit": { + "value": 0.0, + "unit": "RelativeStructuralUnits", + "source": "Modeled", + "baseline": { + "kind": "PreAsapRecomputation" + }, + "benefit_ratio": 0.0, + "model_version": "dag_export-structural-cost-v1" + } } } ], "root": 5 + }, + "workload_cost": { + "baseline_cost": { + "value": 8.0, + "unit": "RelativeStructuralUnits", + "source": "Modeled", + "model_version": "dag_export-structural-cost-v1" + }, + "selected_cost": { + "value": 9.0, + "unit": "RelativeStructuralUnits", + "source": "Modeled", + "model_version": "dag_export-structural-cost-v1" + }, + "benefit": { + "value": -1.0, + "unit": "RelativeStructuralUnits", + "source": "Modeled", + "baseline": { + "kind": "PreAsapRecomputation" + }, + "benefit_ratio": -0.125, + "model_version": "dag_export-workload-cost-v1" + } } }, { @@ -3487,6 +4267,43 @@ ], "root": 1 } + }, + "baseline_cost": { + "value": 3.0, + "unit": "RelativeStructuralUnits", + "source": "Modeled", + "model_version": "dag_export-structural-cost-v1", + "inputs": [ + { + "name": "per_consumer_recompute_cost", + "value": 3.0 + }, + { + "name": "consumer_count", + "value": 1.0 + } + ] + }, + "selected_cost": { + "value": 4.0, + "unit": "RelativeStructuralUnits", + "source": "Modeled", + "baseline": { + "kind": "PreAsapRecomputation" + }, + "delta": -1.0, + "benefit_ratio": -0.3333333333333333, + "model_version": "dag_export-structural-cost-v1" + }, + "benefit": { + "value": -1.0, + "unit": "RelativeStructuralUnits", + "source": "Modeled", + "baseline": { + "kind": "PreAsapRecomputation" + }, + "benefit_ratio": -0.3333333333333333, + "model_version": "dag_export-structural-cost-v1" } } ], @@ -3551,7 +4368,44 @@ "rationale": "Rate realizes as an exact Rate accumulator", "rank": 0, "cost": 4.0, - "role": "replacement_region" + "role": "replacement_region", + "baseline_cost": { + "value": 3.0, + "unit": "RelativeStructuralUnits", + "source": "Modeled", + "model_version": "dag_export-structural-cost-v1", + "inputs": [ + { + "name": "per_consumer_recompute_cost", + "value": 3.0 + }, + { + "name": "consumer_count", + "value": 1.0 + } + ] + }, + "selected_cost": { + "value": 4.0, + "unit": "RelativeStructuralUnits", + "source": "Modeled", + "baseline": { + "kind": "PreAsapRecomputation" + }, + "delta": -1.0, + "benefit_ratio": -0.3333333333333333, + "model_version": "dag_export-structural-cost-v1" + }, + "benefit": { + "value": -1.0, + "unit": "RelativeStructuralUnits", + "source": "Modeled", + "baseline": { + "kind": "PreAsapRecomputation" + }, + "benefit_ratio": -0.3333333333333333, + "model_version": "dag_export-structural-cost-v1" + } } }, { @@ -3594,7 +4448,44 @@ "rationale": "Rate realizes as an exact Rate accumulator", "rank": 0, "cost": 4.0, - "role": "replacement_region" + "role": "replacement_region", + "baseline_cost": { + "value": 3.0, + "unit": "RelativeStructuralUnits", + "source": "Modeled", + "model_version": "dag_export-structural-cost-v1", + "inputs": [ + { + "name": "per_consumer_recompute_cost", + "value": 3.0 + }, + { + "name": "consumer_count", + "value": 1.0 + } + ] + }, + "selected_cost": { + "value": 4.0, + "unit": "RelativeStructuralUnits", + "source": "Modeled", + "baseline": { + "kind": "PreAsapRecomputation" + }, + "delta": -1.0, + "benefit_ratio": -0.3333333333333333, + "model_version": "dag_export-structural-cost-v1" + }, + "benefit": { + "value": -1.0, + "unit": "RelativeStructuralUnits", + "source": "Modeled", + "baseline": { + "kind": "PreAsapRecomputation" + }, + "benefit_ratio": -0.3333333333333333, + "model_version": "dag_export-structural-cost-v1" + } } }, { @@ -3632,7 +4523,44 @@ "rationale": "Rate realizes as an exact Rate accumulator", "rank": 0, "cost": 4.0, - "role": "replacement_root" + "role": "replacement_root", + "baseline_cost": { + "value": 3.0, + "unit": "RelativeStructuralUnits", + "source": "Modeled", + "model_version": "dag_export-structural-cost-v1", + "inputs": [ + { + "name": "per_consumer_recompute_cost", + "value": 3.0 + }, + { + "name": "consumer_count", + "value": 1.0 + } + ] + }, + "selected_cost": { + "value": 4.0, + "unit": "RelativeStructuralUnits", + "source": "Modeled", + "baseline": { + "kind": "PreAsapRecomputation" + }, + "delta": -1.0, + "benefit_ratio": -0.3333333333333333, + "model_version": "dag_export-structural-cost-v1" + }, + "benefit": { + "value": -1.0, + "unit": "RelativeStructuralUnits", + "source": "Modeled", + "baseline": { + "kind": "PreAsapRecomputation" + }, + "benefit_ratio": -0.3333333333333333, + "model_version": "dag_export-structural-cost-v1" + } } }, { @@ -3711,6 +4639,30 @@ } ], "root": 4 + }, + "workload_cost": { + "baseline_cost": { + "value": 3.0, + "unit": "RelativeStructuralUnits", + "source": "Modeled", + "model_version": "dag_export-structural-cost-v1" + }, + "selected_cost": { + "value": 4.0, + "unit": "RelativeStructuralUnits", + "source": "Modeled", + "model_version": "dag_export-structural-cost-v1" + }, + "benefit": { + "value": -1.0, + "unit": "RelativeStructuralUnits", + "source": "Modeled", + "baseline": { + "kind": "PreAsapRecomputation" + }, + "benefit_ratio": -0.3333333333333333, + "model_version": "dag_export-workload-cost-v1" + } } }, { @@ -4590,6 +5542,43 @@ ], "root": 2 } + }, + "baseline_cost": { + "value": 4.0, + "unit": "RelativeStructuralUnits", + "source": "Modeled", + "model_version": "dag_export-structural-cost-v1", + "inputs": [ + { + "name": "per_consumer_recompute_cost", + "value": 4.0 + }, + { + "name": "consumer_count", + "value": 1.0 + } + ] + }, + "selected_cost": { + "value": 5.0, + "unit": "RelativeStructuralUnits", + "source": "Modeled", + "baseline": { + "kind": "PreAsapRecomputation" + }, + "delta": -1.0, + "benefit_ratio": -0.25, + "model_version": "dag_export-structural-cost-v1" + }, + "benefit": { + "value": -1.0, + "unit": "RelativeStructuralUnits", + "source": "Modeled", + "baseline": { + "kind": "PreAsapRecomputation" + }, + "benefit_ratio": -0.25, + "model_version": "dag_export-structural-cost-v1" } } ], @@ -4690,7 +5679,44 @@ "rationale": "count realizes as a Cms sketch", "rank": 0, "cost": 5.0, - "role": "replacement_region" + "role": "replacement_region", + "baseline_cost": { + "value": 4.0, + "unit": "RelativeStructuralUnits", + "source": "Modeled", + "model_version": "dag_export-structural-cost-v1", + "inputs": [ + { + "name": "per_consumer_recompute_cost", + "value": 4.0 + }, + { + "name": "consumer_count", + "value": 1.0 + } + ] + }, + "selected_cost": { + "value": 5.0, + "unit": "RelativeStructuralUnits", + "source": "Modeled", + "baseline": { + "kind": "PreAsapRecomputation" + }, + "delta": -1.0, + "benefit_ratio": -0.25, + "model_version": "dag_export-structural-cost-v1" + }, + "benefit": { + "value": -1.0, + "unit": "RelativeStructuralUnits", + "source": "Modeled", + "baseline": { + "kind": "PreAsapRecomputation" + }, + "benefit_ratio": -0.25, + "model_version": "dag_export-structural-cost-v1" + } } }, { @@ -4752,7 +5778,44 @@ "rationale": "count realizes as a Cms sketch", "rank": 0, "cost": 5.0, - "role": "replacement_region" + "role": "replacement_region", + "baseline_cost": { + "value": 4.0, + "unit": "RelativeStructuralUnits", + "source": "Modeled", + "model_version": "dag_export-structural-cost-v1", + "inputs": [ + { + "name": "per_consumer_recompute_cost", + "value": 4.0 + }, + { + "name": "consumer_count", + "value": 1.0 + } + ] + }, + "selected_cost": { + "value": 5.0, + "unit": "RelativeStructuralUnits", + "source": "Modeled", + "baseline": { + "kind": "PreAsapRecomputation" + }, + "delta": -1.0, + "benefit_ratio": -0.25, + "model_version": "dag_export-structural-cost-v1" + }, + "benefit": { + "value": -1.0, + "unit": "RelativeStructuralUnits", + "source": "Modeled", + "baseline": { + "kind": "PreAsapRecomputation" + }, + "benefit_ratio": -0.25, + "model_version": "dag_export-structural-cost-v1" + } } }, { @@ -4834,7 +5897,44 @@ "rationale": "count realizes as a Cms sketch", "rank": 0, "cost": 5.0, - "role": "replacement_region" + "role": "replacement_region", + "baseline_cost": { + "value": 4.0, + "unit": "RelativeStructuralUnits", + "source": "Modeled", + "model_version": "dag_export-structural-cost-v1", + "inputs": [ + { + "name": "per_consumer_recompute_cost", + "value": 4.0 + }, + { + "name": "consumer_count", + "value": 1.0 + } + ] + }, + "selected_cost": { + "value": 5.0, + "unit": "RelativeStructuralUnits", + "source": "Modeled", + "baseline": { + "kind": "PreAsapRecomputation" + }, + "delta": -1.0, + "benefit_ratio": -0.25, + "model_version": "dag_export-structural-cost-v1" + }, + "benefit": { + "value": -1.0, + "unit": "RelativeStructuralUnits", + "source": "Modeled", + "baseline": { + "kind": "PreAsapRecomputation" + }, + "benefit_ratio": -0.25, + "model_version": "dag_export-structural-cost-v1" + } } }, { @@ -4876,7 +5976,44 @@ "rationale": "count realizes as a Cms sketch", "rank": 0, "cost": 5.0, - "role": "replacement_region" + "role": "replacement_region", + "baseline_cost": { + "value": 4.0, + "unit": "RelativeStructuralUnits", + "source": "Modeled", + "model_version": "dag_export-structural-cost-v1", + "inputs": [ + { + "name": "per_consumer_recompute_cost", + "value": 4.0 + }, + { + "name": "consumer_count", + "value": 1.0 + } + ] + }, + "selected_cost": { + "value": 5.0, + "unit": "RelativeStructuralUnits", + "source": "Modeled", + "baseline": { + "kind": "PreAsapRecomputation" + }, + "delta": -1.0, + "benefit_ratio": -0.25, + "model_version": "dag_export-structural-cost-v1" + }, + "benefit": { + "value": -1.0, + "unit": "RelativeStructuralUnits", + "source": "Modeled", + "baseline": { + "kind": "PreAsapRecomputation" + }, + "benefit_ratio": -0.25, + "model_version": "dag_export-structural-cost-v1" + } } }, { @@ -4911,7 +6048,44 @@ "rationale": "count realizes as a Cms sketch", "rank": 0, "cost": 5.0, - "role": "replacement_root" + "role": "replacement_root", + "baseline_cost": { + "value": 4.0, + "unit": "RelativeStructuralUnits", + "source": "Modeled", + "model_version": "dag_export-structural-cost-v1", + "inputs": [ + { + "name": "per_consumer_recompute_cost", + "value": 4.0 + }, + { + "name": "consumer_count", + "value": 1.0 + } + ] + }, + "selected_cost": { + "value": 5.0, + "unit": "RelativeStructuralUnits", + "source": "Modeled", + "baseline": { + "kind": "PreAsapRecomputation" + }, + "delta": -1.0, + "benefit_ratio": -0.25, + "model_version": "dag_export-structural-cost-v1" + }, + "benefit": { + "value": -1.0, + "unit": "RelativeStructuralUnits", + "source": "Modeled", + "baseline": { + "kind": "PreAsapRecomputation" + }, + "benefit_ratio": -0.25, + "model_version": "dag_export-structural-cost-v1" + } } }, { @@ -4966,7 +6140,55 @@ } ], "root": 5 + }, + "workload_cost": { + "baseline_cost": { + "value": 4.0, + "unit": "RelativeStructuralUnits", + "source": "Modeled", + "model_version": "dag_export-structural-cost-v1" + }, + "selected_cost": { + "value": 5.0, + "unit": "RelativeStructuralUnits", + "source": "Modeled", + "model_version": "dag_export-structural-cost-v1" + }, + "benefit": { + "value": -1.0, + "unit": "RelativeStructuralUnits", + "source": "Modeled", + "baseline": { + "kind": "PreAsapRecomputation" + }, + "benefit_ratio": -0.25, + "model_version": "dag_export-workload-cost-v1" + } } } - ] + ], + "workload_cost": { + "baseline_cost": { + "value": 20.0, + "unit": "RelativeStructuralUnits", + "source": "Modeled", + "model_version": "dag_export-structural-cost-v1" + }, + "selected_cost": { + "value": 25.0, + "unit": "RelativeStructuralUnits", + "source": "Modeled", + "model_version": "dag_export-structural-cost-v1" + }, + "benefit": { + "value": -5.0, + "unit": "RelativeStructuralUnits", + "source": "Modeled", + "baseline": { + "kind": "PreAsapRecomputation" + }, + "benefit_ratio": -0.25, + "model_version": "dag_export-workload-cost-v1" + } + } } diff --git a/tools/dag-viewer/index.html b/tools/dag-viewer/index.html index cb1a1d01..e324ebc0 100644 --- a/tools/dag-viewer/index.html +++ b/tools/dag-viewer/index.html @@ -372,6 +372,40 @@ .leg .swatchLabel { font-weight: 650; } .leg .swatchDesc { color: var(--muted); display: block; } .leg .swatch.ring { background: transparent; border-radius: 999px; border-width: 2px; } + + /* Issue #286: structured cost/benefit annotations. */ + .costBlock { + margin: 0.5rem 0; + padding: 0.5rem 0.55rem; + border: 1px solid var(--border); + border-radius: 8px; + background: var(--panel2); + } + .costBlock h4 { + margin: 0 0 0.35rem; + font-size: 0.68rem; + text-transform: uppercase; + letter-spacing: .03em; + color: var(--muted); + } + .costRow { display: flex; align-items: baseline; gap: 0.4rem; flex-wrap: wrap; margin: 0.15rem 0; } + .costRow .costLabel { color: var(--muted); font-size: 0.72rem; min-width: 72px; } + .costRow .costValue { font-weight: 650; font-variant-numeric: tabular-nums; } + .costBadge { + display: inline-block; + font-size: 0.64rem; + font-weight: 700; + text-transform: uppercase; + letter-spacing: .02em; + border-radius: 4px; + padding: 0.05rem 0.35rem; + } + .costBadge--modeled { color: var(--accent); background: color-mix(in srgb, var(--accent) 16%, transparent); } + .costBadge--measured { color: #15803d; background: color-mix(in srgb, #15803d 16%, transparent); } + .costBadge--unavailable { color: var(--muted); background: color-mix(in srgb, var(--muted) 16%, transparent); } + .costMeta { color: var(--muted); font-size: 0.68rem; margin-top: 0.15rem; } + .costInputs { margin: 0.3rem 0 0; padding: 0; list-style: none; font-size: 0.68rem; color: var(--muted); } + .costInputs li { display: flex; justify-content: space-between; gap: 0.5rem; padding: 0.05rem 0; } diff --git a/tools/dag-viewer/render.py b/tools/dag-viewer/render.py index 8fa8b67c..6659561e 100755 --- a/tools/dag-viewer/render.py +++ b/tools/dag-viewer/render.py @@ -20,11 +20,12 @@ `QueryExpr` detail *is* its plan (see the side panel on node click), and shared-hash highlighting *is* what this repo has for CSE today — both a hash-based proxy, not real CSE output; see README.md's "Shared-subtree -highlighting is a proxy" section. Per-node cost isn't in dag_export's output -yet (no cost estimator is wired into pre-ASAP IR), so there's nothing here -to render for it; if `detail` ever grows a `cost` field, the side panel -shows it automatically since it dumps `detail` verbatim, no viewer change -needed. +highlighting is a proxy" section. Structured cost/benefit annotations +(issue #286, `CostAnnotation` in crates/types/src/cost.rs) pass through +this deep-copy untouched, same as everything else `prepare_workload` below +doesn't explicitly rewrite — viewer.js reads `decision.baseline_cost` / +`.selected_cost` / `.benefit`, `NamedGraph.workload_cost`, and +`DagGraph.edge_annotations` directly, with no help needed from this file. Usage: cargo run -p asap-devtools --bin dag_export -- --sql "..." --name q1 \\ diff --git a/tools/dag-viewer/viewer.js b/tools/dag-viewer/viewer.js index 19d19153..f46a52c5 100644 --- a/tools/dag-viewer/viewer.js +++ b/tools/dag-viewer/viewer.js @@ -547,6 +547,7 @@ function unionStageLaneElements(stage, chosen) { function laneElements(laneId, laneLabel, graph, query, stage) { const nodes = graph.nodes; const byId = new Map(nodes.map((node) => [node.id, node])); + const edgeCostByPair = new Map((graph.edge_annotations || []).map((edge) => [`${edge.from}${edge.to}`, edge.cost])); const elements = [ { data: { id: laneId, label: laneLabel, isLane: true }, classes: 'laneParent', selectable: false, grabbable: false }, ]; @@ -555,7 +556,11 @@ function laneElements(laneId, laneLabel, graph, query, stage) { data: { id: `${laneId}-${node.id}`, parent: laneId, - label: node.label, + // On-graph label carries a concise cost/benefit badge (issue #286) + // when this node's decision has one; `node.label` itself (nested, + // used everywhere else — the sidebar, schema derivation, …) stays + // exactly the plain IR label. + label: node.label + nodeCostBadgeSuffix(node), node, // Flat (not nested under `node`) so buildCyStyle's // `node[kind = "KeepPreAsap"]` selector can actually match it — @@ -583,6 +588,11 @@ function laneElements(laneId, laneLabel, graph, query, stage) { source: `${laneId}-${childId}`, target: `${laneId}-${node.id}`, schemaLabel: formatSchema(byId.get(childId).schema), + // Issue #286 edge cost — only ever present when the exporter + // found this exact (child -> node) edge genuinely attributable + // (a real DAG merge point); `undefined` otherwise, read by + // showEdgeDetail. + edgeCost: edgeCostByPair.get(`${childId} ${node.id}`), }, }); } @@ -590,6 +600,152 @@ function laneElements(laneId, laneLabel, graph, query, stage) { return elements; } +// ── Issue #286: structured cost/benefit annotations ─────────────────────── +// Renders only what a `dag_export` JSON export explicitly carries +// (`CostAnnotation`/`WorkloadCostSummary`/`EdgeCostAnnotation` from +// crates/types/src/cost.rs) — no client-side cost estimation. A value with +// no `source: "Modeled"|"Measured"` (i.e. `Unavailable`, or the field +// simply absent from an older export) always reads "Not estimated", never +// a fabricated number. + +function formatCostUnit(unit) { + switch (unit) { + case 'CostUnitsPerSecond': return 'cost units/s'; + case 'CostUnits': return 'cost units'; + case 'RelativeStructuralUnits': return 'relative structural units'; + default: return unit || 'unknown unit'; + } +} + +function formatBaselineRef(baseline) { + if (!baseline) return ''; + switch (baseline.kind) { + case 'PreAsapRecomputation': return 'pre-ASAP recomputation'; + case 'HighestRankedNonSelectedCandidate': + return `best non-selected candidate (rank ${baseline.detail && baseline.detail.rank})`; + case 'Named': return String(baseline.detail || ''); + default: return baseline.kind || ''; + } +} + +function formatCostNumber(value) { + // Trim to at most 3 decimals without trailing zeros — these are + // structural-proxy magnitudes today (see cost.rs's module doc), not + // precision-sensitive measurements. + return Number(value.toFixed(3)).toString(); +} + +// One `` block for the sidebar: value + unit + +// Modeled/Measured/Unavailable badge, baseline/delta/ratio when present, +// model/benchmark provenance, and the raw `inputs` the value was built +// from. `annotation` may be `undefined` (an older export with no +// annotation at all) or `null`/missing `value` (an explicit `Unavailable`) +// — both render as "Not estimated", never a number. +function renderCostAnnotation(title, annotation) { + if (!annotation) return ''; + const source = annotation.source || 'Unavailable'; + const badgeClass = source === 'Modeled' ? 'costBadge--modeled' : source === 'Measured' ? 'costBadge--measured' : 'costBadge--unavailable'; + if (annotation.value === null || annotation.value === undefined) { + return `
${escapeHtml(title)}Not estimated${escapeHtml(source)}
`; + } + const unit = formatCostUnit(annotation.unit); + const valueText = `${formatCostNumber(annotation.value)} ${unit}`; + const metaParts = []; + if (annotation.baseline) metaParts.push(`vs ${formatBaselineRef(annotation.baseline)}`); + if (typeof annotation.delta === 'number') metaParts.push(`Δ ${formatCostNumber(annotation.delta)} ${unit}`); + if (typeof annotation.benefit_ratio === 'number') metaParts.push(`ratio ${(annotation.benefit_ratio * 100).toFixed(1)}%`); + const provenanceParts = []; + if (annotation.model_version) provenanceParts.push(`model ${annotation.model_version}`); + if (annotation.benchmark_id) provenanceParts.push(`benchmark ${annotation.benchmark_id}`); + const inputsHtml = (annotation.inputs || []).length + ? `
    ${annotation.inputs.map((input) => `
  • ${escapeHtml(input.name)}${escapeHtml(String(input.value))}${input.unit ? ' ' + escapeHtml(input.unit) : ''}
  • `).join('')}
` + : ''; + return ` +
+ ${escapeHtml(title)} + ${escapeHtml(valueText)} + ${escapeHtml(source)} +
+ ${metaParts.length ? `
${escapeHtml(metaParts.join(' · '))}
` : ''} + ${provenanceParts.length ? `
${escapeHtml(provenanceParts.join(' · '))}
` : ''} + ${inputsHtml} + `; +} + +// Baseline/selected/benefit trio for one replacement decision, matching +// `DagDecision.baseline_cost/selected_cost/benefit` (crates/types/src/dag_export.rs). +function renderDecisionCostBlock(entry) { + if (!entry.baseline_cost && !entry.selected_cost && !entry.benefit) return ''; + return `
+

Cost / benefit

+ ${renderCostAnnotation('Baseline', entry.baseline_cost)} + ${renderCostAnnotation('Selected', entry.selected_cost)} + ${renderCostAnnotation('Benefit', entry.benefit)} +
`; +} + +// Short, on-graph badge text for a post-ASAP node's own winning decision — +// "concise on-graph benefit/cost badges" per issue #286; the full +// breakdown only ever appears in the sidebar (`renderDecisionCostBlock`). +// Empty string whenever there's nothing to show (no decision, or its +// benefit is `Unavailable`) so an un-costed node's label is untouched. +function nodeCostBadgeSuffix(node) { + const benefit = node.decision && node.decision.benefit; + if (!benefit || benefit.value === null || benefit.value === undefined) return ''; + if (typeof benefit.benefit_ratio === 'number') { + const pct = Math.abs(benefit.benefit_ratio * 100); + return `\n${benefit.benefit_ratio >= 0 ? '▼' : '▲'}${pct >= 10 ? Math.round(pct) : pct.toFixed(1)}%`; + } + return `\n${benefit.value >= 0 ? '▼' : '▲'}${formatCostNumber(Math.abs(benefit.value))}`; +} + +// Workload-wide baseline/selected/benefit for the currently selected +// queries, deduplicated by `decision.id` — the same collision-free key +// `crates/devtools/src/bin/dag_export.rs`'s own `decision_cost_entries` +// dedupes by (a decision spans every node in its replacement region, and a +// CSE-shared target can appear in more than one selected query). This +// aggregates explicit per-node `CostAnnotation`s already in the export; it +// never estimates a cost itself. Returns `null` when nothing in the +// selection carries a cost annotation, or when selected annotations +// disagree on unit (unit-incompatible aggregation is refused, not mixed). +function computeSelectionWorkloadCost(selected) { + const seenDecisions = new Set(); + let unit = null; + let baselineSum = 0; + let selectedSum = 0; + let any = false; + for (const query of selected) { + const nodes = (query.post_graph && query.post_graph.nodes) || []; + for (const node of nodes) { + const decision = node.decision; + if (!decision || seenDecisions.has(decision.id)) continue; + seenDecisions.add(decision.id); + const baseline = decision.baseline_cost; + const selectedCost = decision.selected_cost; + if (!baseline || !selectedCost) continue; + if (baseline.value === null || baseline.value === undefined || selectedCost.value === null || selectedCost.value === undefined) continue; + if (unit === null) unit = baseline.unit; + if (baseline.unit !== unit || selectedCost.unit !== unit) return null; // unit-incompatible aggregation is rejected + baselineSum += baseline.value; + selectedSum += selectedCost.value; + any = true; + } + } + if (!any) return null; + const delta = baselineSum - selectedSum; + return { + baseline_cost: { value: baselineSum, unit, source: 'Modeled' }, + selected_cost: { value: selectedSum, unit, source: 'Modeled' }, + benefit: { + value: delta, + unit, + source: 'Modeled', + baseline: { kind: 'PreAsapRecomputation' }, + benefit_ratio: baselineSum > 0 ? delta / baselineSum : null, + }, + }; +} + function formatSchema(schema) { if (!schema || typeof schema !== 'object') return 'schema unavailable'; const fields = Array.isArray(schema.columns) ? schema.columns : schema.fields; @@ -637,6 +793,10 @@ function showEdgeDetail(edge) { const sourceNode = source.data('node') || {}; const targetNode = target.data('node') || {}; const edgeSchema = edge.data('schemaLabel') || formatSchema(sourceNode.schema); + const edgeCost = edge.data('edgeCost'); + const edgeCostHtml = edgeCost + ? `

Edge cost

${renderCostAnnotation('Materialization', edgeCost)}
` + : ''; detailSection.innerHTML = `

Selected edge

@@ -644,6 +804,7 @@ function showEdgeDetail(edge) {
From: ${escapeHtml(sourceNode.label || source.id())}
To: ${escapeHtml(targetNode.label || target.id())}
+ ${edgeCostHtml}

Schema carried by this edge

${escapeHtml(edgeSchema || '(schema unavailable)')}

How the schema is produced

@@ -663,7 +824,17 @@ function renderScopeSummary(selected) { })); const scope = selected.length === 1 ? 'Single query' : `Batch workload · ${selected.length} queries`; const strategyText = strategies.size ? `Winning strategies: ${Array.from(strategies).join(', ')}` : 'No selected replacements'; - scopePickerEl.innerHTML = `
View scope
${escapeHtml(scope)}${escapeHtml(strategyText)}
`; + // Single query: use the exporter's own precomputed `NamedGraph.workload_cost` + // directly. Multiple queries: no single precomputed field covers exactly + // this subset, so aggregate the explicit per-decision annotations already + // in the export (dedup by `decision.id`) — see + // computeSelectionWorkloadCost's own doc for why this is aggregation, not + // client-side cost estimation. + const costSummary = selected.length === 1 ? selected[0].workload_cost : computeSelectionWorkloadCost(selected); + const costHtml = costSummary + ? `
Workload cost
${renderCostAnnotation('Baseline', costSummary.baseline_cost)}${renderCostAnnotation('Selected', costSummary.selected_cost)}${renderCostAnnotation('Benefit', costSummary.benefit)}
` + : ''; + scopePickerEl.innerHTML = `
View scope
${escapeHtml(scope)}${escapeHtml(strategyText)}
${costHtml}`; } function translationsForNode(query, node, stage) { @@ -730,6 +901,7 @@ function showPrePostDetail(data) {
${entry.role === 'replacement_root' ? 'This node replaces the pre-ASAP target.' : 'This node is generated or carried inside the replacement region.'}
${escapeHtml(entry.rationale || 'No rationale recorded.')}
${entry.target_pre_id === undefined ? `decision #${entry.id}` : `pre-ASAP target node #${entry.target_pre_id}`} · output ${escapeHtml(entry.output_kind || node.kind)}
+ ${renderDecisionCostBlock(entry)} `).join(''); translationHtml = `

Why this post-ASAP translation

${cards}
`; } else if (data.stage === 'post') { From b55f76b35de3e0a79a3675de8592a4a1a1e97320 Mon Sep 17 00:00:00 2001 From: zz_y Date: Thu, 27 Aug 2026 09:32:34 -0600 Subject: [PATCH 02/15] fix(dag-viewer): address review findings on cost annotations (#286) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixes 5 confirmed bugs from PR review plus 3 lower-priority follow-ups. Confirmed bugs: 1. viewer.js: `loadFiles()`/`loadWorkload()` dropped `workload_cost` from the object pushed onto `queries` — the single-query "Workload cost" panel (renderScopeSummary's `selected[0].workload_cost` read) was silently `undefined` on every interactive load path (drag-and-drop, file picker, and the planner/embedded path), even though the exported JSON carried the data. Both loaders now forward `workload_cost`. 2. viewer.js: `computeSelectionWorkloadCost` deduped decisions across a multi-query selection by bare `decision.id`, which is only unique within one `dag_export` process invocation, not across independently loaded files — a real collision (two files reusing the same small integer id) would silently drop one file's cost from the aggregate. Added a `sourceBatch` id assigned once per loaded document/file and changed the dedup key to `${sourceBatch}:${decision.id}`. 3. dag_export.rs: `shared_node_edge_annotations` counted edge occurrences (`Vec`) rather than distinct consuming nodes as `consumer_count` — a `Join` whose left and right operands are the same `Rc` (post pointer-dedup) inflated `consumer_count` to 2 for one real downstream consumer, halving the reported per-edge cost and producing two colliding `(from, to)` `EdgeCostAnnotation` entries (which `edgeCostByPair` in viewer.js then silently collapsed via Map overwrite). Switched to a `HashSet` per child so a single parent referencing the same shared child twice counts as one consumer. Added a regression test plus updated the existing edge-annotation test to use two genuinely distinct parents. 4. cost.rs: `total_cost()` validated `horizon` but not `recurring_cost_rate`/`one_shot_cost` themselves — a non-finite rate (e.g. a stray NaN from a future #287 caller) silently produced `Some(NaN)` instead of `None`, violating the module's own "never fabricate, never a poisoned total" rule. Both inputs are now validated finite before use; added regression tests. 5. dag_export.rs: `NamedGraph.workload_cost`'s doc claimed cross-query dedup via `workload_node_id`, but the actual producer (`decision_cost_entries`) only dedups within one query by `decision.id` — a reader trusting the doc and summing `NamedGraph.workload_cost` across queries would double-count a target shared between them. Corrected the doc to state the per-query-only scope and point cross-query readers at `WorkloadGraph.workload_cost` instead (the implementation was already correct; only the doc was wrong). Lower-priority follow-ups also addressed: - dag_export.rs: the legacy scalar `cost: f64` on `DagDecision`/ `TargetReplacement` is now derived from `selected_cost.value` at both call sites instead of being set independently from `winner.cost` a second time, closing the "kept in sync by convention only" gap the review flagged. - dag_export.rs: `default_cse_recompute_cost` is now memoized once per winner (`per_consumer_recompute_costs`, built right after `winners`) instead of being recomputed on every `winner_cost_annotations` call — a winner's target can be reached from more than one node position (internal sharing within a query, or the same CSE-shared target across several queries), so this avoided redundant subtree walks. - dag_export.rs (types crate): `shared_node_edge_annotations`'s `parents_of` map is now built inline inside `deduplicate_pointer_shared_nodes`'s existing per-node loop (which already visits every remapped child edge once while assigning final ids) instead of a second full pass over the deduplicated node list. Not fixed (noted only): `computeSelectionWorkloadCost` in viewer.js still hand-reimplements `cost.rs`'s `sum_workload_costs`/`workload_cost_summary` dedup-and-sum algorithm in JS, with no shared source of truth — there's no JS/Rust code-sharing mechanism in this tool today, so keeping the two algorithms in sync remains a manual/review responsibility. Flagged as a follow-up in the PR description. Testing: `cargo build --workspace`, `cargo test --workspace` (all green, no regressions), `cargo clippy --workspace --all-targets -- -D warnings` (clean), `cargo fmt --all -- --check` (clean, after running `cargo fmt --all` once for pre-existing drift), and `python3 -m unittest discover -s tools/dag-viewer` (18/18). Regenerated `dag.example.json` via generate-sample.sh — byte-identical, since the sample workload doesn't happen to exercise the same-parent-twice edge case fixed in item 3. `node --check` remains unavailable in this sandbox (no Node.js installed); verified the viewer.js changes by careful manual review plus the Python test suite, which inlines and structurally checks viewer.js. Co-Authored-By: Claude Sonnet 5 --- crates/devtools/src/bin/dag_export.rs | 90 ++++++++++++---- crates/types/src/cost.rs | 65 ++++++++++-- crates/types/src/dag_export.rs | 146 +++++++++++++++++++++----- tools/dag-viewer/viewer.js | 51 ++++++--- 4 files changed, 284 insertions(+), 68 deletions(-) diff --git a/crates/devtools/src/bin/dag_export.rs b/crates/devtools/src/bin/dag_export.rs index e3e86985..2cceff51 100644 --- a/crates/devtools/src/bin/dag_export.rs +++ b/crates/devtools/src/bin/dag_export.rs @@ -79,15 +79,23 @@ const STRUCTURAL_COST_MODEL_VERSION: &str = "dag_export-structural-cost-v1"; /// carried. /// /// The baseline is always [`BaselineRef::PreAsapRecomputation`]: the cost of -/// recomputing `target` independently at every one of its `consumer_count` -/// use sites, via -/// [`default_cse_recompute_cost`] — the exact structural-size proxy -/// `asap_aware_mapping::cost_model`'s own `DefaultCostModel` already uses, -/// not a second formula. This baseline is always computable (never -/// `Unavailable`) since it only needs `target` itself, unlike `selected`, -/// which is `Unavailable` whenever `selected_cost` is `NaN` (the plugged-in -/// cost model has no numeric estimate for that particular candidate shape — -/// see [`RankedGroup::costs`](asap_aware_mapping::replacement::RankedGroup::costs)'s +/// recomputing the winner's own target independently at every one of its +/// `consumer_count` use sites. `per_consumer_recompute` is that one-site cost +/// — [`default_cse_recompute_cost`] applied to the target, the exact +/// structural-size proxy `asap_aware_mapping::cost_model`'s own +/// `DefaultCostModel` already uses, not a second formula — passed in +/// pre-computed rather than taking `target: &QueryExpr` and recomputing it +/// here: this function is called once per matched *node position* a winner +/// produced or carried (once per `target_replacement` flat entry, once per +/// `find_winner` hit), and the same winner's target can be reached from more +/// than one node position, so callers memoize `default_cse_recompute_cost` +/// once per winner (see `run_post_asap_with_progress`'s +/// `per_consumer_recompute_costs`) instead of this function re-walking the +/// identical subtree on every call. This baseline is always computable +/// (never `Unavailable`), unlike `selected`, which is `Unavailable` whenever +/// `selected_cost` is `NaN` (the plugged-in cost model has no numeric +/// estimate for that particular candidate shape — see +/// [`RankedGroup::costs`](asap_aware_mapping::replacement::RankedGroup::costs)'s /// own doc). /// /// Every value here is unit-tagged [`CostUnit::RelativeStructuralUnits`], @@ -96,11 +104,10 @@ const STRUCTURAL_COST_MODEL_VERSION: &str = "dag_export-structural-cost-v1"; /// (issue #287's job) — see `asap_types::cost`'s module doc for why this /// crate refuses to mislabel a structural proxy as a real rate. fn winner_cost_annotations( - target: &QueryExpr, + per_consumer_recompute: f64, consumer_count: usize, selected_cost: f64, ) -> (CostAnnotation, CostAnnotation, CostAnnotation) { - let per_consumer_recompute = default_cse_recompute_cost(target).0; let baseline_value = per_consumer_recompute * consumer_count.max(1) as f64; let baseline = CostAnnotation::modeled( baseline_value, @@ -414,7 +421,8 @@ fn decision_cost_entries(graph: &DagGraph) -> Vec<(u32, CostAnnotation, CostAnno if !seen.insert(decision.id) { continue; } - let (Some(baseline), Some(selected)) = (&decision.baseline_cost, &decision.selected_cost) else { + let (Some(baseline), Some(selected)) = (&decision.baseline_cost, &decision.selected_cost) + else { continue; }; entries.push((decision.id, baseline.clone(), selected.clone())); @@ -423,11 +431,15 @@ fn decision_cost_entries(graph: &DagGraph) -> Vec<(u32, CostAnnotation, CostAnno } /// Build a [`TargetReplacement`] for `winner`, matching this file's own -/// per-target `before`/`after` construction. +/// per-target `before`/`after` construction. `per_consumer_recompute` is +/// `winner`'s own memoized [`default_cse_recompute_cost`] — see +/// `winner_cost_annotations`'s own doc for why callers pass this in instead +/// of recomputing it here. fn target_replacement( decision_id: u32, target_pre_id: u32, winner: &Winner<'_>, + per_consumer_recompute: f64, ) -> TargetReplacement { let strategy = winner.candidate.strategy.to_string(); let before = dag_export::export(winner.target); @@ -440,14 +452,20 @@ fn target_replacement( } }; let (baseline_cost, selected_cost, benefit) = - winner_cost_annotations(winner.target, winner.consumer_count, winner.cost); + winner_cost_annotations(per_consumer_recompute, winner.consumer_count, winner.cost); + // Derived from `selected_cost` (not read from `winner.cost` a second + // time) so the legacy scalar field and the structured annotation can + // never drift apart at this call site — see `winner_cost_annotations`'s + // own doc for why `selected_cost.value` is `None` (and this is `NaN`) + // in exactly the same case `winner.cost` itself would already be `NaN`. + let cost = selected_cost.value.unwrap_or(f64::NAN); TargetReplacement { decision_id, target_pre_id, strategy, rationale: decision_rationale(winner), rank: 0, - cost: winner.cost, + cost, before, after, baseline_cost: Some(baseline_cost), @@ -581,6 +599,20 @@ fn run_post_asap_with_progress( }) .collect(); + // One `default_cse_recompute_cost` walk per *winner*, not per node a + // winner's decision ends up cloned onto: `winner_cost_annotations` is + // called once per matched node position — once per `target_replacement` + // flat entry, and once per `find_winner` hit inside `export_post_asap`'s + // traversal — and a single target can be reached from more than one + // node position (an internally-shared subtree within one query, or the + // same CSE-shared target reached from several queries), so recomputing + // this per call would re-walk the identical subtree redundantly. + // Indexed in parallel with `winners`. + let per_consumer_recompute_costs: Vec = winners + .iter() + .map(|winner| default_cse_recompute_cost(winner.target).0) + .collect(); + // `by_hash` only narrows the search; `lookup_winner`'s own structural // equality check is the real decision — see that function's doc. let mut by_hash_cache = HashCache::new(); @@ -619,14 +651,20 @@ fn run_post_asap_with_progress( let mut find_winner = |expr: &QueryExpr| -> Option { let i = lookup_winner(&by_hash, &winners, &mut post_graph_cache, expr)?; let winner = &winners[i]; - let (baseline_cost, selected_cost, benefit) = - winner_cost_annotations(winner.target, winner.consumer_count, winner.cost); + let (baseline_cost, selected_cost, benefit) = winner_cost_annotations( + per_consumer_recompute_costs[i], + winner.consumer_count, + winner.cost, + ); + // Derived from `selected_cost`, not `winner.cost` a second time — + // see `target_replacement`'s identical derivation for why. + let cost = selected_cost.value.unwrap_or(f64::NAN); let decision = DagDecision { id: i as u32, strategy: winner.candidate.strategy.to_string(), rationale: decision_rationale(winner), rank: 0, - cost: winner.cost, + cost, role: "replacement_region", baseline_cost: Some(baseline_cost), selected_cost: Some(selected_cost), @@ -688,7 +726,12 @@ fn run_post_asap_with_progress( if let Some(i) = lookup_winner(&by_hash, &winners, &mut lookup_cache, source_expr) { replacements.push(( name.clone(), - target_replacement(i as u32, node.id, &winners[i]), + target_replacement( + i as u32, + node.id, + &winners[i], + per_consumer_recompute_costs[i], + ), )); matched[i] = true; } @@ -896,11 +939,16 @@ async fn main() { continue; } match asap_types::cost::workload_cost_summary( - entries.iter().map(|(id, baseline, selected)| (Some(*id), baseline, selected)), + entries + .iter() + .map(|(id, baseline, selected)| (Some(*id), baseline, selected)), "dag_export-workload-cost-v1", ) { Ok(summary) => query.workload_cost = Some(summary), - Err(mismatch) => eprintln!("dag_export: workload cost aggregation for {:?} skipped — {mismatch}", query.name), + Err(mismatch) => eprintln!( + "dag_export: workload cost aggregation for {:?} skipped — {mismatch}", + query.name + ), } workload_entries.extend(entries); } diff --git a/crates/types/src/cost.rs b/crates/types/src/cost.rs index 0ddc84e2..924f7d96 100644 --- a/crates/types/src/cost.rs +++ b/crates/types/src/cost.rs @@ -236,11 +236,32 @@ pub fn benefit_ratio(baseline_value: f64, delta: f64) -> Option { /// `total_cost(H) = recurring_cost_rate * H + one_shot_cost` — finite-run or /// one-shot totals require an explicit horizon. Returns `None` (never a -/// fabricated total) when both terms are `None`, or when `horizon` isn't a -/// finite, non-negative number for a `Some(rate)`. Rate and one-shot costs -/// are passed as separate arguments specifically so they can never be -/// silently added by a caller before this function ever sees them. -pub fn total_cost(recurring_cost_rate: Option, horizon: f64, one_shot_cost: Option) -> Option { +/// fabricated or poisoned total) when both terms are `None`, when `horizon` +/// isn't a finite, non-negative number for a `Some(rate)`, or when either +/// `recurring_cost_rate` or `one_shot_cost` is itself non-finite (`NaN` or +/// infinite) — a non-finite input must never silently produce `Some(NaN)`. +/// Rate and one-shot costs are passed as separate arguments specifically so +/// they can never be silently added by a caller before this function ever +/// sees them. +pub fn total_cost( + recurring_cost_rate: Option, + horizon: f64, + one_shot_cost: Option, +) -> Option { + // A non-finite input anywhere here (NaN/±inf — e.g. from a future #287 + // caller upstream) must never quietly poison the total into `Some(NaN)`: + // that would violate this module's own "never fabricate, never a + // poisoned total" rule as much as inventing a number from nothing would. + if let Some(rate) = recurring_cost_rate { + if !rate.is_finite() { + return None; + } + } + if let Some(one_shot) = one_shot_cost { + if !one_shot.is_finite() { + return None; + } + } let recurring = match recurring_cost_rate { Some(rate) => { if !horizon.is_finite() || horizon < 0.0 { @@ -371,11 +392,19 @@ pub fn workload_cost_summary<'a, I>( where I: IntoIterator, &'a CostAnnotation, &'a CostAnnotation)> + Clone, { - let baseline_cost = sum_workload_costs(entries.clone().into_iter().map(|(id, baseline, _)| (id, baseline)))?; - let selected_cost = sum_workload_costs(entries.into_iter().map(|(id, _, selected)| (id, selected)))?; + let baseline_cost = sum_workload_costs( + entries + .clone() + .into_iter() + .map(|(id, baseline, _)| (id, baseline)), + )?; + let selected_cost = + sum_workload_costs(entries.into_iter().map(|(id, _, selected)| (id, selected)))?; let benefit = match (baseline_cost.value, selected_cost.value) { - (Some(baseline_value), Some(selected_value)) if baseline_cost.unit == selected_cost.unit => { + (Some(baseline_value), Some(selected_value)) + if baseline_cost.unit == selected_cost.unit => + { let delta = baseline_value - selected_value; CostAnnotation { value: Some(delta), @@ -456,6 +485,26 @@ mod tests { assert_eq!(total_cost(Some(2.0), -1.0, None), None); } + /// A non-finite `recurring_cost_rate` (e.g. a stray `NaN` from a future + /// #287 caller) must never silently produce `Some(NaN)` — that's a + /// poisoned total, exactly the kind of fabricated-looking value this + /// module's "never fabricate" rule exists to prevent. + #[test] + fn total_cost_rejects_a_non_finite_recurring_rate() { + assert_eq!(total_cost(Some(f64::NAN), 5.0, None), None); + assert_eq!(total_cost(Some(f64::INFINITY), 5.0, None), None); + assert_eq!(total_cost(Some(f64::NEG_INFINITY), 5.0, Some(1.0)), None); + } + + /// Same guard on the one-shot addend — a `NaN`/infinite one-shot cost + /// must not poison the total either, even when the recurring side is + /// perfectly well-formed. + #[test] + fn total_cost_rejects_a_non_finite_one_shot_cost() { + assert_eq!(total_cost(Some(2.0), 5.0, Some(f64::NAN)), None); + assert_eq!(total_cost(None, 5.0, Some(f64::INFINITY)), None); + } + fn ann(value: f64, unit: CostUnit) -> CostAnnotation { CostAnnotation::modeled(value, unit, "v1", vec![]) } diff --git a/crates/types/src/dag_export.rs b/crates/types/src/dag_export.rs index d35a3ba4..8ebca1b4 100644 --- a/crates/types/src/dag_export.rs +++ b/crates/types/src/dag_export.rs @@ -248,15 +248,22 @@ pub struct NamedGraph { /// same additive rule as `replacements`. #[serde(default, skip_serializing_if = "Vec::is_empty")] pub rejections: Vec, - /// This query's whole selected-workload cost/benefit — one of issue - /// #286's granularity items. Built by summing this query's own + /// This query's own selected-workload cost/benefit — one of issue + /// #286's granularity items. Built by summing *this query's own* /// `post_graph` decision-node cost annotations, deduplicated by - /// `workload_node_id` (a node this query shares with an earlier query - /// in the same export is still counted once here, since - /// `assign_workload_node_ids` assigns identity workload-wide, not - /// per-query). `None` unless a higher layer built one (same + /// `decision.id` **within this one query only** (a decision spanning + /// several nodes in this query's own replacement region is still + /// counted once here). `None` unless a higher layer built one (same /// `--post-asap`-gated pattern as `post_graph`); omitted from JSON when /// absent. + /// + /// This does **not** dedupe across queries: a target shared by two + /// queries (e.g. a common `Scan` after workload-wide CSE) is counted + /// once in *each* query's own `workload_cost` — summing several + /// `NamedGraph.workload_cost` values by hand double-counts any decision + /// shared between them. For a cross-query total that dedupes correctly, + /// use [`WorkloadGraph::workload_cost`] instead, which is built + /// specifically to cover every query in one pass. #[serde(default, skip_serializing_if = "Option::is_none")] pub workload_cost: Option, } @@ -722,6 +729,18 @@ fn deduplicate_pointer_shared_nodes(nodes: Vec, root: u32) -> DagGraph let mut by_source_ptr = HashMap::::new(); let mut old_to_new = vec![0_u32; nodes.len()]; let mut deduplicated = Vec::with_capacity(nodes.len()); + // Built in the same pass as `deduplicated` itself, rather than by a + // second full walk over `deduplicated` afterward (see + // `shared_node_edge_annotations`'s own doc for why one pass suffices): + // `HashSet`, not `Vec`, per child — a *distinct* consuming node is what + // "consumer" means here. A single parent can reference the same shared + // child from two of its own operand slots at once (e.g. a `Join` whose + // left and right are the same `Rc` post pointer-dedup) — that's one + // downstream consumer reading the child twice, structurally, not two + // separate consumers, and it must not inflate `consumer_count` (which + // would understate `per_edge_cost`) or produce two colliding `(from, + // to)` `EdgeCostAnnotation` entries for the exact same edge. + let mut parents_of: HashMap> = HashMap::new(); for mut node in nodes { node.children = node @@ -743,10 +762,21 @@ fn deduplicate_pointer_shared_nodes(nodes: Vec, root: u32) -> DagGraph by_source_ptr.insert(source_ptr, new_id); } old_to_new[old_id as usize] = new_id; + // `node.children` is already remapped to final new-id space above, + // and post-order guarantees every child was already pushed (with + // its own final id) before this parent is reached — so this is safe + // to record right here, once, rather than re-deriving it from + // `deduplicated` in a later pass. A node this loop *doesn't* push + // (the dedup-hit `continue` above) never reaches this line, but that + // never loses information: its first-pushed duplicate already had + // its own (identical) children recorded when *it* was processed. + for &child_new_id in &node.children { + parents_of.entry(child_new_id).or_default().insert(new_id); + } deduplicated.push(node); } - let edge_annotations = shared_node_edge_annotations(&deduplicated); + let edge_annotations = shared_node_edge_annotations(&deduplicated, &parents_of); DagGraph { nodes: deduplicated, root: old_to_new[root as usize], @@ -766,21 +796,24 @@ fn deduplicate_pointer_shared_nodes(nodes: Vec, root: u32) -> DagGraph /// evenly divided across every consuming edge — never a guessed multi-hop /// path cost (explicitly out of scope per the issue). /// +/// `parents_of` is [`deduplicate_pointer_shared_nodes`]'s own +/// already-built child -> distinct-parents map, passed in rather than +/// rebuilt here by a second walk over `nodes`'s edges — that caller has +/// already visited every edge exactly once while assigning final node ids, +/// so redoing the same walk here would just re-derive what it already +/// knows. +/// /// Uses [`dag_node_count`] (the same structural-size proxy /// `asap_aware_mapping::cost_model::default_cse_recompute_cost` computes; /// duplicated here in plain terms since `asap_types` may not depend on that /// higher crate) rather than a real per-byte transfer cost — honestly /// unit-tagged [`CostUnit::RelativeStructuralUnits`], not a rate. -fn shared_node_edge_annotations(nodes: &[DagNode]) -> Vec { - let mut parents_of: HashMap> = HashMap::new(); - for node in nodes { - for &child in &node.children { - parents_of.entry(child).or_default().push(node.id); - } - } - +fn shared_node_edge_annotations( + nodes: &[DagNode], + parents_of: &HashMap>, +) -> Vec { let mut annotations = Vec::new(); - for (child_id, parents) in &parents_of { + for (child_id, parents) in parents_of { if parents.len() < 2 { continue; } @@ -1466,16 +1499,23 @@ mod tests { #[test] fn export_post_asap_annotates_edges_into_a_genuinely_shared_node() { - // Two parents (a Join's own two sides) share the exact same `Rc` - // Scan — `export_post_asap`'s `deduplicate_pointer_shared_nodes` - // must merge them onto one node id, and (issue #286) attach an + // Two *distinct* parents (a Dedup and a Limit, each with their own + // single child slot) share the exact same `Rc` Scan — + // `export_post_asap`'s `deduplicate_pointer_shared_nodes` must merge + // them onto one node id, and (issue #286) attach an // `EdgeCostAnnotation` on each of the two edges running into it. let shared_scan = Rc::new(scan("metrics", value_col())); - let root = QueryExpr::Join { - kind: crate::pre_asap::query_expr::JoinKind::Inner, - pred: Predicate(Rc::new(QueryExpr::Literal(ScalarValue::Boolean(true)))), - left: Rc::clone(&shared_scan), - right: Rc::clone(&shared_scan), + let left_branch = QueryExpr::Dedup { + cols: vec![0], + child: Rc::clone(&shared_scan), + }; + let right_branch = QueryExpr::Limit { + n: 5, + offset: 0, + child: Rc::clone(&shared_scan), + }; + let root = QueryExpr::Concat { + children: vec![left_branch, right_branch], }; let graph = export_post_asap(&root, &mut |_| None); @@ -1490,14 +1530,66 @@ mod tests { .iter() .filter(|edge| edge.from == scan_id) .collect(); - assert_eq!(edges_into_scan.len(), 2, "one annotation per consuming edge"); + assert_eq!( + edges_into_scan.len(), + 2, + "one annotation per distinct consuming parent" + ); + let distinct_parents: std::collections::HashSet<_> = + edges_into_scan.iter().map(|edge| edge.to).collect(); + assert_eq!( + distinct_parents.len(), + 2, + "the two parents (Dedup, Limit) must be distinct" + ); for edge in &edges_into_scan { - assert_eq!(edge.cost.value, Some(0.5), "1 unique node / 2 consumers"); - assert_eq!(edge.cost.unit, crate::cost::CostUnit::RelativeStructuralUnits); + assert_eq!( + edge.cost.value, + Some(0.5), + "1 unique node / 2 distinct consumers" + ); + assert_eq!( + edge.cost.unit, + crate::cost::CostUnit::RelativeStructuralUnits + ); assert_eq!(edge.cost.source, crate::cost::CostSource::Modeled); } } + /// Regression test: a single parent referencing the same shared child + /// from two of its own operand slots at once (a `Join` whose left and + /// right sides are the exact same `Rc`, post pointer-dedup) is *one* + /// downstream consumer, not two — this must not inflate + /// `consumer_count`, must not halve the reported per-edge cost, and + /// must not produce two colliding `(from, to)` `EdgeCostAnnotation` + /// entries for what is structurally a single edge. Since there is only + /// one *distinct* consumer here, this shape isn't "genuinely shared" at + /// all in the `>= 2 distinct consumers` sense `shared_node_edge_annotations` + /// requires, so no annotation should be produced for it. + #[test] + fn a_single_parent_referencing_a_shared_child_twice_is_one_consumer_not_two() { + let shared_scan = Rc::new(scan("metrics", value_col())); + let root = QueryExpr::Join { + kind: crate::pre_asap::query_expr::JoinKind::Inner, + pred: Predicate(Rc::new(QueryExpr::Literal(ScalarValue::Boolean(true)))), + left: Rc::clone(&shared_scan), + right: Rc::clone(&shared_scan), + }; + let graph = export_post_asap(&root, &mut |_| None); + + assert_eq!( + graph.nodes.iter().filter(|n| n.kind == "Scan").count(), + 1, + "the shared Scan must be merged onto one node, not duplicated" + ); + assert!( + graph.edge_annotations.is_empty(), + "a single parent referencing the same child twice is one consumer, not a genuine \ + multi-consumer share — got: {:?}", + graph.edge_annotations + ); + } + #[test] fn export_never_produces_edge_annotations_since_it_never_shares_nodes() { // Plain `export` (no `export_post_asap`) never deduplicates by `Rc` diff --git a/tools/dag-viewer/viewer.js b/tools/dag-viewer/viewer.js index f46a52c5..66acd8eb 100644 --- a/tools/dag-viewer/viewer.js +++ b/tools/dag-viewer/viewer.js @@ -20,7 +20,12 @@ cytoscape.use(window.cytoscapeDagre); // like "SummaryAgg" mixed in, and any such node has no `hash` — there's no // corresponding QueryExpr to hash) — left `undefined` when absent (omitted // whenever --post-asap wasn't set, or this query had zero replacements), -// unlike `replacements` which always defaults to an array. +// unlike `replacements` which always defaults to an array. `workload_cost` +// is the optional per-query `NamedGraph.workload_cost` (issue #286), also +// left `undefined` when absent. `sourceBatch` is a viewer-assigned integer +// (never present in the JSON itself) shared by every query loaded from the +// same document — see computeSelectionWorkloadCost's own doc for why it +// exists and how it's used. let queries = []; let activeIndex = -1; let cy = null; @@ -29,6 +34,13 @@ let zoom = 1; // The viewer has one Pre/Post-ASAP mode. One selected query renders its own // two DAGs; multiple selected queries union each stage into one workload DAG. let participants = new Set(); +// Every query pushed from the *same* loaded JSON document (one `dag_export` +// process invocation) shares one `sourceBatch` id, assigned here. Needed +// because `DagDecision.id` is only unique *within* one dag_export run, not +// across independently-generated files — computeSelectionWorkloadCost below +// dedups by `${sourceBatch}:${decision.id}`, never `decision.id` alone, so +// two files that happen to reuse the same small integer id never collide. +let nextSourceBatch = 0; const dropzone = document.getElementById('dropzone'); const fileInput = document.getElementById('fileInput'); @@ -101,11 +113,14 @@ function loadFiles(fileList) { lifecycle_summary: lifecyclePlanSummary(parsed), }] : []); const existingNames = new Set(queries.map((q) => q.name)); + // One batch id per *file* — every query this one dag_export + // invocation produced shares its decision.id numbering. + const sourceBatch = nextSourceBatch++; incoming.forEach((q) => { let name = q.name; if (existingNames.has(name)) name = `${q.name} (${file.name})`; existingNames.add(name); - queries.push({ name, graph: q.graph, source: q.source, replacements: q.replacements || [], post_graph: q.post_graph, lifecycle_plan: q.lifecycle_plan, lifecycle_summary: q.lifecycle_summary }); + queries.push({ name, graph: q.graph, source: q.source, replacements: q.replacements || [], post_graph: q.post_graph, workload_cost: q.workload_cost, sourceBatch, lifecycle_plan: q.lifecycle_plan, lifecycle_summary: q.lifecycle_summary }); }); } catch (err) { alert(`Failed to parse ${file.name}: ${err.message}`); @@ -700,13 +715,21 @@ function nodeCostBadgeSuffix(node) { } // Workload-wide baseline/selected/benefit for the currently selected -// queries, deduplicated by `decision.id` — the same collision-free key -// `crates/devtools/src/bin/dag_export.rs`'s own `decision_cost_entries` -// dedupes by (a decision spans every node in its replacement region, and a -// CSE-shared target can appear in more than one selected query). This -// aggregates explicit per-node `CostAnnotation`s already in the export; it -// never estimates a cost itself. Returns `null` when nothing in the -// selection carries a cost annotation, or when selected annotations +// queries, deduplicated by `decision.id` *within one loaded document* — the +// same collision-free key `crates/devtools/src/bin/dag_export.rs`'s own +// `decision_cost_entries` dedupes by (a decision spans every node in its +// replacement region, and a CSE-shared target can appear in more than one +// selected query from the same dag_export run). `decision.id` is only +// unique within the one `dag_export` process invocation that produced it, +// never across independently-generated files — the viewer explicitly +// supports loading and selecting across several files at once — so the +// dedup key is `${query.sourceBatch}:${decision.id}`, not `decision.id` +// alone; two files that happen to reuse the same small integer id must +// never collide and silently drop one file's cost from the total. +// +// This aggregates explicit per-node `CostAnnotation`s already in the +// export; it never estimates a cost itself. Returns `null` when nothing in +// the selection carries a cost annotation, or when selected annotations // disagree on unit (unit-incompatible aggregation is refused, not mixed). function computeSelectionWorkloadCost(selected) { const seenDecisions = new Set(); @@ -718,8 +741,10 @@ function computeSelectionWorkloadCost(selected) { const nodes = (query.post_graph && query.post_graph.nodes) || []; for (const node of nodes) { const decision = node.decision; - if (!decision || seenDecisions.has(decision.id)) continue; - seenDecisions.add(decision.id); + if (!decision) continue; + const dedupKey = `${query.sourceBatch}:${decision.id}`; + if (seenDecisions.has(dedupKey)) continue; + seenDecisions.add(dedupKey); const baseline = decision.baseline_cost; const selectedCost = decision.selected_cost; if (!baseline || !selectedCost) continue; @@ -1039,7 +1064,9 @@ document.getElementById('resetBtn').addEventListener('click', () => { zoom = 1; function loadWorkload(parsed) { const incoming = (parsed && parsed.queries) || []; - incoming.forEach((q) => queries.push({ name: q.name, graph: q.graph, source: q.source, replacements: q.replacements || [], post_graph: q.post_graph, lifecycle_plan: q.lifecycle_plan, lifecycle_summary: q.lifecycle_summary })); + // One batch id for this whole document — see `sourceBatch`'s own doc above. + const sourceBatch = nextSourceBatch++; + incoming.forEach((q) => queries.push({ name: q.name, graph: q.graph, source: q.source, replacements: q.replacements || [], post_graph: q.post_graph, workload_cost: q.workload_cost, sourceBatch, lifecycle_plan: q.lifecycle_plan, lifecycle_summary: q.lifecycle_summary })); if (activeIndex === -1 && queries.length > 0) activeIndex = 0; if (participants.size === 0 && activeIndex >= 0) participants.add(activeIndex); } From e8030f73e28cfdd4351e157f3310ff1e8c9515b8 Mon Sep 17 00:00:00 2001 From: zz_y Date: Fri, 28 Aug 2026 20:27:46 -0600 Subject: [PATCH 03/15] fix(dag-viewer): match edge cost lookup keys --- tools/dag-viewer/viewer.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/dag-viewer/viewer.js b/tools/dag-viewer/viewer.js index 66acd8eb..ab2206a1 100644 --- a/tools/dag-viewer/viewer.js +++ b/tools/dag-viewer/viewer.js @@ -607,7 +607,7 @@ function laneElements(laneId, laneLabel, graph, query, stage) { // found this exact (child -> node) edge genuinely attributable // (a real DAG merge point); `undefined` otherwise, read by // showEdgeDetail. - edgeCost: edgeCostByPair.get(`${childId} ${node.id}`), + edgeCost: edgeCostByPair.get(`${childId}\u0000${node.id}`), }, }); } From 619075e1dd6994fce2d6fa93ee94a7cc75eaf6e1 Mon Sep 17 00:00:00 2001 From: zz_y Date: Tue, 1 Sep 2026 19:42:44 -0600 Subject: [PATCH 04/15] docs(dag-viewer): add cost annotation screenshot --- tools/dag-viewer/cost-benefit-annotations.png | Bin 0 -> 186627 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 tools/dag-viewer/cost-benefit-annotations.png diff --git a/tools/dag-viewer/cost-benefit-annotations.png b/tools/dag-viewer/cost-benefit-annotations.png new file mode 100644 index 0000000000000000000000000000000000000000..9564a82f564fad8df4a6d448f3bae665f6fd1042 GIT binary patch literal 186627 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%0A3B+y?-k2JOc_*VG_4Wjv`Hn zk>asCMnuwc*HGUvYOfGP*O$k2fh6(hSBCPDG-(1EcxAi{bd>ooJMf0lXh`QX@+9=e z^~Q&e&(s9s1?o4y$^dNNaojZR#f9f-Vv$dq9quyuoX^DlB1dO*6v0pL1T$m_ zl7iO#V?b1T`aj|asLVgOCXfVy&3XCfyJ#0eSEhWLz0qyowTL{s1QHg_4(cS+v}Jh@ zV&q%GwHcpikQU(G#k?WUY%y8GOG_L7x1xQFD$0A4T47f4G6zew-`~fI{PBHzf`Wou zOF!L8R##(|$u=?`q~e8&Q-FhAo$Z3Az{^makR<>Cc{S9_2H#WO*#m290QteBxN~LV zO)^#6G`Hian@sT`5*UJpdJ21ybJaVw}rj%q88 z@mCafqRXc|@ND{Vo}xgWjuFUAU5;>edAU^bR!ETa$X6&+o*L|;Y`{Aj9O(&{SEP*k zpqEWHo@ZesOgKJ1Ub%$TW!4)^7RzFQC^lb{0dAbY(^eLoX*{vZ@giksx7v%g1hu$` z{OuP$h<>;KQCrB@eztgw-+h%Wn#PV>f_CmpvX#Qh$y`FMSEJ3CAlOYeCMtQ`M}|K7 zo7dG;Ua$$TwY7?WLY~%wBzB8F6Dped&|xx*ooFCVm-q=-`a5lo)tL+jU-!E=UGI^t zQ(NhFv{_bMoXBKZ3W!>_!}XYU3MrhY_KvmzpFR<=+JhzM2S%Nm_N6^=mA5jsas|lc z_td9g2eUF*#tov!{gu6}E-n7klla(J@Dlw3dgXbl)Lf+;Cu$kS;K|y5%ctX{~n4=Z7Aw{ zDoq9Yhlb`(&b`A&&!wrfJE{>T9nW8_gF`R4X4tHqVh@UM0^Z%x&W@PH?D>ISwbRuM zU`>v;Mg^~Zmy@5lEs!)qPZiUY6%b56{szmQD;)b6{oY!N>ANqnj>r&HpzquF1e2f< z2DaEc*nyq;AwW|k7)2#pd!;UF91iyPJuA>6e%!r%P8QKtX*mis>t}Dai(w1qu%=pJ zHfY-(xq{~NzRMWMq+;G;vMKDc+w3_E1;t?TVl?)*3p84iCvLFv_oXmVoR4-jb6)rc3`D?4`+XU%5v$DK`xoE z_UaF*#^P+IlwN~J0=L`ZZf2mV{i&}^g7{3VLVD{o@pz?jp5nskK|<}}dJ>Q6>|sFy z5S5_g8v_?t4vJ9c4K@a%KDTaJX*VnaN&pNXax~IiPj;>53B47QJ>39qA|}hGaFr&B zJ((?=EO1T03e=SXN%juq&hZ3)#e4s&<5}E2y(pU;tj$q;!2DN^fL}H=jLG0I(Uip` zif*Z|OzcRNA-+sKpJxao@C8s_$o;iWb_>Db?e%1CW|prn#KT=$l}3h!p|%VpMJgRQ zLjY@1RRx%om3%{ebsT5NpU|{1>?y8B2 zC7iRdGn0)scpOVy?za|TF9*lPgA>j{e13Voo zAP_2T+G9yWHJ;i#l-yLtKSt+(&MjTS)m<|Crgr1QpQPX|lciG+F?lqvw%F<7xhBgSQ?$HPuPGfGn&4~|w zA-!A7@)Tp_?{or2*lSwsEYarjax1)Q{yF*$wWt(a`(~Ap+b1 z^1HXqK9D@6bV;eM#{ZkZNhR1a?`k*7&HANLg@KRH22@6mS|`YsM?)h)a^D;+ zaPRiNO8D0vcYQ*d4RZ;+DtOJq<@R%wOo(`GEl&4yMq?CO7aBBUXj7pjDZ4wd&Tfy3 zGebg7?h%KL;t)O6hp>uKQS`M(+&0XQpKSx43TB`#&7Y&ay#TBw8V6v2)-$v|~s!!KX0uKl|7SxlPjGR^mN)(!W z5$d}l=*~9l^9Fa?SMXF*#_6ne)+|Auf2zh~Dg4FWo_bg!_7{aogT=%X@c4nCzF?IC zdZ*+7P*)0Ji!S!->fk%^r-)-k}jo&TEKa>kn z?NU1bHxr^5n;Zt25WqV~{?lKROe)>|;4w8l4?aFV#Y$jc2unx)bK!e)CpqUoE^axQ z4KwlQjgLlaJa?NZ5=FU)y70RPO$#NT-Cm#tAh&UgtBNb#!vu)}nu4NjU#G@ijs2>8 zZDn?Db%_YQgseo4w#LcS@X!#3L~|}BpxR|~Bs4{R0rapMO7)zAm3sTmN%@HjlarIv zty_MU+>Q{sgsdp)u9a`l<-PggAug`h?!e0CWbI2%CPE|G9m?G`7KXVZtZN^>kH@)smeKoa%<@3P)z;S(SZgy56IG(5@ zn%8-`2O^2FincA2)aYo{LE5P9lm?ODNN8s4FEcsv35=fj>L7(}1oKy()Kaict^MX; z?bV14rrZ9q=jnRfc5&-Wldn9?mDLXeTS8KJDoQKqduW;CIstA{9SW$_cY+ku`-izQ z^?!0z3Z(0Eg@lBS6yxeV;HKUY(~>fmsw} z{y>)lZmZTsTyVbed@35FS0{ln;1sOF5OYnE2N5s(Ny=U2#1EQ-jQ!0>&%1+fbsF@l;J4y?pBMrlu_^J~ghg9Uh6IkPN`;}0 z$9GuG$C}&P{M++|XEt=i28Cxq+X8O-SBD#CZ4o~KSinZEGrApM@n&mN2O>8kW(~s_ zMxEy#N0*T0BymyBVK)ECdRPA5)ir>E>CaH#{9|pqd5(h7baL!&Z%0>U(f0nlDE5D+ zG{lwFhP5;T-}JoogiduJ`$S1*BB#CS4|(;&b}-Fj9IB^!b@s9j2OG6VkbIJmknsN$ zK&JIY{YR1rVkul3&eyJXEl{T?osOz?vLcrXzo3w+G@a%oCGG9&bKff5fHhq}>7~2s z|Crgv$-ii}bXFYNuN}Op?4NGtI#I3=0bQpw=aEze3CWzcTx`4rGE3|czhqV?)9-V> z9Vs>FI1Axhi!LI)b#j@)AC$ziIiH3({k|dhz0mH;aD`k7?VfY3oq~)ZQnD;ZIN#;o?WkG%V(<2Vw_kA1t zCwbXVwaq8|Gd?nUe=kSfrQF;-{v?EO*m|Gsctz zQ=ZfP^==|oR(h|v27UxuRU3caa00kJ6S3_@Lc>JprkU9X`iBQac_$mANwGpdhD!IC z?$gX=I}e>_n?Ny(VV8q}0fN!4?|)Lbq5zA9it2AnHBILxD)QpB>5he^#VEZ|x{#JR zp(TT*LRNmor@QDh$3^bws8!Ec`escp|E*?!`TUAH2j{6qbaGgUp~AH>vWp`|-EZGs z?L|X}YY+hwPu`oA(kL_^_tSD3pBN*xqc5sICX+fAibor^{3`??Y;-*$EVjAOd?I#h zRnHB4{Ji}mx>I-$9^I!aazz8wairLiQi}}usDP)bLwSWsck(+X)+;1_wxkXtbF-J; z2+`XC_@W?rrMT)&X~=}wwWyFN+C`jP*-u6#CK{SpGGO^Dt95mC#!0INt+E~1+qbFs zi!>TCH<34v5;;mrmYU()M$P+zgBWP09w5I;Hs+Lh@|ck(!s7Djtdc*Q}a>i(Plo(dr7BI31Wwcd?*^ z8pEJd>adqpVXmsF9vhPMOo18;_M2Q4ybku|DZFmUb)kk@DtW3WoRsuT>UVv!sJ1#s z?UY}A?q4z5*hpYEi~N;) z`OB1dhBK;NnwH~rlS}E{%Ma6Oj=RHJeGPqBCEt;@+*w_%ScB~}bJa6C0~1^f46+9w z*)7$jkh!0j{DJ~o7z&@qDbLI8o+tOW5N`X^Kr$1j#xQ+t%h1_%>u{?mFOS8h556ey z>#=jVImHu7wW1ZKVm*FZmNv7&N@2(+pYE?}G?o4CGFOxM962|HFOB23SC?Y}HN}dG za?mi8mX?C?{4~%>q0CG-&y&0eF~78obgOP=R(7FQo!MS=f!>D?3=H(?>FJme7;CO> zPHTNYUK=C}dwmj6asAdl5DyWx_MtAqBu`~KI~zyMdJ73jNih-?ndX4CW*I+v@_j$93?vT@>pk^g{)--v69y82aGrt9mw zyYq>P{pw8SOyaqH>pn3s1)~zotMBvi8MY7%n(wdgbj#xbh12dn2^T$BV6qsQn2cwu zJ%!YO0=bxWjeRv_6LMPs#||==N{hBxkW5spv5Wi?4fJkb@Ixom1}Cfh0*`yQ6M2kQ ze-n=@-#_+lQ(7G;oJ`ZvvTZnAAKzNr%KkBfu`yOb8SvU&>ww@*y<6;{HyN%4+bu7_@p9 zl0oaRH~k5?+CE+i`bwaU(G4`Xgm2o9_}qEiHot)b>ged0af7M9G`r>MJg41KmDOPQ zd>N;s#nL8kcQU^TvpP(zpfX9~b~r!XFpsgS^F_zUN(p`N@L^n7GM~wB`rTkDIXQm! z`4JG1u|6l5XB&b{BxpmHMhKFAd{2E352XAA$d}(X_=Du3X2IO9pi{B()5Rp66Xc&% z)Pn8?u@`E}-5Y3ASWfl)ATAl3ewNG5pf!9{m_jQ4bAO0_n6w+_n~qil5C!FyA)35HXw&h{`kRir>`88>%Xr2IPuJc!ge2 zo3Kz2*!_1Uv(q34Y}X_OqOLxYmi+Fipznd8gAv*#9+D>2aqc%J^^{c zfyX?|p*xu?2dw^%e&4=9v5swSY8v5ee%aUpdjYaEf9=A@E-mlNU_JUB2R07jQ$<0~0quvAhU{x?7#~Ib0nWvWj zk{KUdc1U2^s4mO4oun*%xcfR(+`Wdkb4nScQ+vJR$+Zw+ zl2zu~rD>H^Y$k()lT7+_L!G5DrV&XHF84_YdK4X3@^(GA9Yj4?_>qa_}00put`A0h`L+w|lj#hX*^69T}v z9=m~YbGm42AHNLzmP=mGgzzvDx0_@B^y0K%UW)YgWHT*wdLd^b_QWwrLZa;s?gfw6 z)RC1H_WbUI%bu5JrF+Z$>2Ay6tb?D^94NPLDNTq*=rnkKa3r)G2XMEg#Y&s(yzNQ0 zY?5Zf%n^K<(bU3`OhOYmSv0+-IHA|vV!>8@N|kAoD{c&#Xq&}kX-i>J?T7cm)T0@1 zt&fuH^kneF4u%V-)sOp;$%V-)G=Wy?Jyf9O`n4h5spZqBPD-hmt|ad9@s2>`&A759 z5`ItH?{DiJ+|9Q}D?Uu-p(wv`Fdg{PJFJwoIdSN>dFvMM1?U@HVCCdWzSu*&e92ll!hZl-X0&|0ouzw(pv(lC7a7|s1f+ln+UE-qTdoqVaL ze|iKiz{u^-2jTQ=MUjSI|DcK&w_bzqu)Twr$xJvpG?h z5Ee&*vCGBBm%Irk6w|d%A+JRH$D7B;`zO1CXth|a>-7f-uKYp>hKig(lzMuwR=qHc zYvs`5db&7C6v)0%WDD5eKu&p3qYulbGc%3FW@Kb=TjU%7KqD8td`lu}Soh<>)1Gzh%>J2vi zKbri8Ek~#^@XO6cODz*rBZuPR<7AVVPrwVF#+1e^ii^c-p32e0)y1WxL=8nvO%s_R zG5I!e`cijFS<*A*Jk2QL^5)Uewt?p6t9K3T)ERThQBk1I65^n`3L){)FV9<{QF>l$ zwqf1Cs39#?YkM#TuJ9{&+ks85`|Ym#pDSu|78X7x8d4^OgThPv*HYG#)xxHe3v_Du zm2SKa9TPjOBz1*Cf8kveZwT_d`BCaRxY*brg zC)%fGZ}t`okOk8!qEzhd?QLx_+=}t2nI58SAfE?Z>mj%2lFU)=)!@2`w2x6I>@pF4 z$omocN%)?Z-|JC=gqV80>&b|M!JSVENT=UBm1*e@zy1;1KWqQpj)CSqX3_C8>uZ>b zfx(=!cCt7<1{w_+%NN~(vDSx8)19v^n{cSR%_eIW3bd+d*lInNHa|H9ZG=X~?lV7o zwmp~!1)mvVKYH!2Z>Lzuj4qX+go?0?>wztzh&N$$<*t1Bytn6$h zJhgdA78d3L`sqZe)MsJ8mf$~`th3RHs)-nzT+H`i<~Wr9$zi;|O!f#WrK{j_PDHdm zs^A|H9)XRfa(SD=g*!rj2!+3s<=F#8aWT}%i?d6tJOq#iYN^spgj8YDr)K8>>8`S# zWZkN*ei#;}_vwgzm|H3`5bXJ9NMusdu#pClfO1+G}fvzbD8^D0LJTyi9~4BehYeT z^_IVWTW3j!1P0;m`q=YGF(=;fDK1UaM#CRf!NdDlpTL{2yGHipw>c`G`!PVUa@_Y0 z3r-JK6>20`#$%s8+2nT)ZCY65bs~|=bUnhOitJSUOcDOg#Zrmy?Bx5kt;CM8F|(b| zDeRV)!cN#ldVUJ>d3EMM0}737j;?rWdW!bDK0tqNj)u!n&CG&6X@5`+{c?I!B@fu; zg@uJpqMuyxj|1Kvy)qRviTQ+w)I+#m5>6Mxf|OchSiL)&V6@y={T#`e-|haoR+&xL z3cs9GyQaw@Bqg)7-nF;TMUQBV-&^JX*sF$*A7{Ff6MQdtee##wqo+D0_B$aB>KYoq zT7G3_WxBYzD!gHFy3}@aJ1hF>+2U^dRlBfN;Nwl7Evd-q@*rJ83)iUl_{O2NO|hu> zc^?8C9314dR4AV~R=T)+R?Nwm)ctxggWCjL_&ps-vs}f@{XTruDse3KAUyUAfy}rZ z39CYF!o4;_&V5P7p6J};ES14rmGt#RKoA``h(5Y^Kjij3RMVkyRNm43Pj}sZ2J3v) z%q%Hs)2iRZpefd$QmU=AWM*c$N5lgO;=0BVR~Of=L{7`ad`?S}%G`xH1JhSO=4|8H zO)X4fs#u_X$fPu(CsQd~SS5fmnx?$&~`^}rCBr=jixQ1>Qe^pz{62||X1?Ue)93#hK&~x+}>f@?M z>u%jABL~9mZdx;o7?oD3{b)XZ|JlKYFlHi`L(TU9G$MW%t0_6L4?IFzS_#3#VHqVse$dZ?y>J}eh-8a3S{{8#+#Kdp! zz_T?!EFuCEgQ#(6Yox+$xRBQ;X62=|oS#8U`(PBEis9u$YwIl{jo)j-Y3q~b!&b)w zUoL-Fk6fc0nJ9(D)HjGAf4Z0y)=LjoT3Xk}W{E26>8w&ezq1m9U!$k6*1Gd`cl7r| zIa8lN#j}GOT1vK;ZJ5?(->~vn{m3#qJalaGbtfSq(VeH?w6ap6Rau?R?gp-?{@mzE>+|gK}T9Gc8gsMB^X*GB@Z9(gavE2$Yd%Ek?9a?~C#U-? znEh)UMVwq*{YB}`88`0ONvW9(fBdrj^{YBL`J9}lkSxGxVR2myY$awckhb8 zMSfKjEG;hn|LA(_sHocReS8E#MFgdk7LYD!X#}aETUxq7xoEd(Z}S%r0=e895Tfmz|?r2U9Xank%@Yr&wMOH zU07d#Z}WqOjf1pez``wzd8NxeHBa8xW1$A_CKo3Z|>fV&dY?mzV{? zz>uH#m)>NqY?0}cP(pU=*^J2%_2HX|62I+i@6f3wDXmVyf-2kN~Zth7;WD;hry%yfJveMF%!lgR5UKSnQ4P|217IWA>xR-m2TU5QfU+9Majjv+8pnA}Meo&r zjdE~PPPVqz#HJayVzq3H=6iCO9n8N)j=vUsZg8Mkg*TU1=^kz!Q>3E~)TTff8w=V% ze&~Le$B^PZ>CFftU$=GS&;-p+RakM{w)@!|_kDn-+O2e1j1}1z$}hAA zKd-naL&zlyg&LEVRhHh^ZP93KB?0DW>iwJR2Xnni=}Dyq0ZvUev!KLIz}~S*^X*3q zOS*W{8&^7V^2p!CflJgqmwH||@~>@}3M;E>R33pU@;_KW)xpWp$j(Rc2jWu;70A?H z9D2Wg`?0NgY%Z)ifzUc2z(j|zAp~gntOAKZU#pZHQEqKt)MJn`j27#Xo?zNsyMc<} zM5X@d1{hxXa`s1uzs_d5u|*|2xJ84*0swW0HQnzL=#;Qt{IBmSbi^NA?k_c7IiBa` zsn89l90BX&d{aOXMXLCmd!w`nirdg0PI$R_5WQu}?TdQUWPiDn(W%7GKeKxQx0w79 zmy~4X^6p*4q2iTz#F1K5W3EP_xy$>UOuw37`(L<&4*+jK(d(PQqY&vz4f1EfAilvo z3YePdc|}L{>sKG31LDWVC$`ZuRy@Fn;3jx-p@e+)0p~~rT6FbQdtL=U;RmCjmbuOW zKCL(*n;v>hKN}}InhU{e$HkF;9tStvEAy_N+)zReJi@PXN&MWFdnGz>cQa;w43`7b z-iyj<@42>R-M1&LK*&Bc;eEDh5@*tMd_o+T`G5rZcT0Fpr5D^Slz?4UPHL{gb2y}P z82G@~mzR?)`?e>XRipW%Kkbf#k{aNNX65Sva|44dGuren?rte{4zsCc{r};YcVu8nGHZk_+M6Kh7fcHKF1)F_u z83)cwr*(MmOi0<=D07v3o5?Dpu0OQ!ItPOT)Gwg~uRZ3gLN#-Te)Z`s?}6GH;3f>U zuW;^&?$!AXAV7%u0ujuF`d`G*26}N-e;+5Psk|S4C>Y82`3HXN*^%&u0)s?KQ z3_sLE8PrHpzF8Vrsaq4`wo$(dO=g!O$GdHG8+7lLaP^dymJVYWpP8|Q`-kq^J_4;7 z@u!P{q3I6(WiC=u-4j1up!~5{PKLC!ouFKiSC5U1^E+WMCNL+*w9%&@BMS@&=m-*P2qi7L35SbwjE{niAYcyV!Yz2}R3GuP!UI}1x`g&t0uk^>OJ zoD6oN6?^m;)85fGa}N-!`|5kTv6U|+4k!f&2Y2`NrLnH~R8?_W=8I4@)o3Z&v08Cdm@#pNB>Jm;3VR2YiWv)O(-rG3;!_XF4-Blg{l-MYqq@F1*ZQIyU|X!3|dEzlW^Z3 zbdy*4-?$7JyF9NAOW@?-=JxAjS?Zj-65N$Cv^_4k{5qq3%u(q{qnmSBPWhMRo{R@7XZ7#DZ(O+c6fQMw#`CfypDU-%C zehN)ZO*ia8DHe8yna;sa{7a(!8iif%lx*i#&1OJFBZ9`;cild(8Jo}XqUU&%%UkPp zxGU*{@I)S$BL~o;7=XFc4O3HKu@&>jl6tI!3K2+bp8v?~yoSUfi%~_Xie>(z^(_+w{hm{Pg>F8U^%M61Rr z(=*{ji$tzaxi5t`#Ve4Tn@1*=Pj8ir?P_OErNf>!u>5s3Vz#n90$aSyh#Tl$jQ8m< zmRz;>BkAk^_|BxI^(#~Ov=8pQGYP2p-wJO3rXa7nZj4Uy$Epw!$9#eq){Q;o8vNKP zCq*;z@X6x_uT6~@*(9?T4ASfJ&%p_mqX`NGi1vlWmEeYkdc0muiKb5Px!QF^r@?G8 zZVZF&K})ru{DtJOa-pK*()YRGM`+dCGmXZRc~IO#0<_*UCo%aB`U`%Kg&{xe2Vv9G z(jWn4ca~G{;^J&X{gBfd4EN|lJ8X+<{?)#DG=X@r>1;Iy%(j&(xd#uif@*Gh`Ro) zW3zcn_`$|T?L&?(=cxXHIM0~ss&>ofi7_{dKSg%->eiOl@&RqN{voTjzrX*MPgAW! zLL~m0L3h?UnzXbHPtX?{NM(8XaDzN-h{Y<7^=&OK6Wh5uVP+A)lj}X#`s5z3TG)#O zeX9@N*p4_M+eU*oq=}ZMAKyOk9w%WnNV1T0IAu)8Z&c6nXJLsLlF<}tS8%Sz@w#Wq zl_gZpJLLtxF5b2oyu7{qR@FZ7^XvZC^>aK#Vg#NnZGLRWjus8u55|6IXYeYQ?rgrR!><+pw!IQ1 z%969gEAhO6gys_Cp^K%lf6ilw0I@$73$>sQ;2Pz4iiWU6YkP}&MgxQ5Ui(CL;|6x- z;u%v#o^A=^fHLoEhmGBfZNev;V}9Cl|44eG)?NSNn4DY`Bv%;?_Kn6qz;`_;au zite#j~EPyl(AY)4p&p$d;7&x@7kg2S+i^ z>$o(n?Q4Gk=yejHppWWbNosH@0$pEIC&Xs!W^aGJrSSLoWxY}IRsy`1a$>S-tq587W_$ya-Q7@$9& z4*0^x!otGken>dcHpRKQ>v=+p6LfUM{@g_E#5!rJ60BqTs5SEkxv44xHp^eWxS-C9 zq&x3?7px-TwbcjteeinBHny0nd`w?b0B8(z*=uI@$8_(nIh<{>U+oJGm5OEYgo5%v z{+Zwf!(2v2uBM7rq-)= z7p)?B3Bk|jVJDo4r%iN^-;y;yP&*;u&jlT1!n9Zo-2FoMq@I7MSDhJ)8{)&emk!R6 zw%=#Arhf}#{P+SR{IVK5&{Cde{&_(~b-Ccr&G|6+G?(>c$w4(Pf2{*4k7>>huAT;H zoT0`@o^bxS8^+H&W~DKnCAw*A(3YK*eLj}k?eEVJ`2IKEpIdJoTrK(+gi;1S(pS)2 z%{8FYs#X=)`7pW*l5}EkrEkpC)Z*q0Nv!*XQ=Hqwdb8xz)Cujko6K}|IUzmhxktrR zqF5q<&`i3lrhxi1h06T-kL=zydgAVq>0_pKfeubR7JUX_h9b@0@fGo#OvO&vTVpE4 zi`VqVNKgFvZ=4&G_=C@%BM93@XrtEKU}{GvMCYv^Yguj|HrU@z)CZosprRwhxx{V< zr1I-Czes!e4$qAh7|y3);XjlTaG(I!6MbkPxPFP9xb!3%kF+-81Z^%*X4W|Dw775xk$ zj@e{E>q2_K_BQdxSgwV|;W&yuPUH|H%YJW3LdC?l@n1XE$xy%FT|+_I1sa8_G_&!) zCf`pZcJ4JjIF$~`G^SbwaHc7J3k8LAW*bg`0!hv`DW@6}vtC8}lC2*S7^cXpJk~6> z3J(ouW2cLn>*ikO&m zJy;UA1(;vX?>AmQa7DTSfHv{1ckAXhuUGZ%4F2uP3jtEy^Z8*tGd=%Je9&S8eI(X) z->3dNt2U2Q4Tw_pnnk)gR0}mL4NjSu0)`u9>L}X76|G}qVGc)Ur9rc}p&{s%_Ml0R zGW!((Kq<4c_|W$-F)fUx%`L@kK>-7t7L)Ya zetz%mTe4p@2U=+1Gy=d-fRb@oSXk}0GcVZcR8+=CXM;x$XvLXTa!JF_`?Ts@3xUO` zJ#K3gbF>)e_PTKSAU_}693!R5z;CzsGq~Jdd+vf-mLxnRD8r=Iw!7_Iu;1iBsiTm$ z%J1g-eDyeXb^fS5tndgYna};8<;QuPdfaH9vJ6y`$9rGPTw`h}JKScbezxAM`%0(6 zQultNgrrnvVT0Rt5Cd0rEWd%V@%P9`0%BqrT7XHoei-PkmWhKUN`o@OD*r_y6E@5{=>);=)4tly;%-O z@dCgS8#{XC-i{(pV zu5HuXZ7!BhQ}CG4A3e!cDnIGTEvHF|7j&KlMroDljERx4w{_C!Dt4dU$XIo(zv;%( z!enXVs(SW1+mp?z`-D+kmPiIFOEhEi)CzKapnI^i=$J58tka}w&TwtMrDmm3l|@_U zu)(^UeV!8j!qUVj4QH9XzfQSZdX>D1 zN_!J{7rj~$fWB`^&C)?KwARmaj2J!bC|v?5sO*|-o^lZ^Ir$k8R%CKAQ#2HlSYRqw z=>cggtG#ZI!~6n8e7&!px9{ z_F%A{=~cI_{EL)t>~2HA(qCO}h@yMgAt8}qUU?w4;_h&DrTH|_SOZ9MD$GXds5r-3 zTQfiB2Y>qXYe+XHAV9R>eIqQ%c)d&)qzGOYwl^ItxYI&{fS9aM^grcLP5EM;4meBTd7X%GY$Q@c0Uj+PmOOW7D->}@E)1g-6BBFdxvdeRT=C`Qv@wCC z7ED%Inb;j9Fj0V#&rFq!g$XtFcKXiF4v!I+6n%FLGje8I+uOHqr!MxsKFn2ynmp5} zHdh(1W=iQ#N6~5Ya2%9-ocsVaK5pfh`h$&0Oj1%(LPGH0Ngqg1z};PZ!|sOUVgsCe zntU?^MjcKn$nA0_w++w9$pKQqrn_A$2Qr#BE+<>u?p*Y2^lTKvot>q2l)IYMyBQg) zt-|-`(OMNLDsRgR z0O^C#BVs|iqoRN`r%4}L#=e8 zCP6kfE`^ae!8JQNp~mh8*Q=~a)Iu|(#!(>@Mge*pl5EZUvTbXg(ic}9k_0zn)2N@_312`fJ`ByW`bAG z82(`CBh~L&`Vnsz0%#~5O3GF92UVX7(Dup7YI5G{T(QGWpOCQoSfgx!VvYB?t6oHT zPXe#_sr6x&%z7KdLt}`o>>YX9I|hAl(0P#-M;%BCj={dJ&BoVvxXAJa+0UR>lT)zs zuZA@>bhtWqblleK_;HhytaqjldQSrf$wLAyQ;|#!?LMiMG^!@s&gM@pv*23`Q7bNi zA`ahbAOyKa(pl*Yw-mg1PcGV|ii>8X;g%IR@{j`Mt{M0$1_;mNLugFEvj3k=+9R&m z66(F__nA@fv0Cm3I?ttlwPe@8{r1Md=o+Fd$KG%f96V23mX+Pk+;v3*k&IdJU65N! z>Ia&rkS=^JH}pNp+?9PbCKoP=XE?qV+zW+8f-&vaP2s|XY(?c9`fu*u5Am^kau>Xx zvJ8K()$x#8Pk7SNWkhA!CDE^H!TtgT>Be6N%hoK9QoKC+RxXmBdw;7}z<5)M4Leu< zY%qcS@60p=W&!v}1b&9cbv<%PbX*E~a+6a1D#HSgq)RamAELd#z9E^w%62>VtiJRM zTV*!cX}Z_T*f^*k(tSVCCA%6_VY1dbfES@dU^cAkvvc0U;Jcm5V~5%&Ib5T(4p=)Sh-c;)HJ$^tClanO`uR z#%Asg6w@8`Rn)wahnq6`p3eaz8ExPV7+%%yDg}kPH03*CKzX#kHyKGlm-Is2zH(tZ z!OYU&Vw~{GDb=oH<7oH9kjf~>9+x1R;0by+3Qvc5rC8=r$8!Ame%^w`aJF?fdeC(~ zV_E>e&5Ef3c1w85uTDFA6}pfHCH7JYLlcWa4?O)XofS7y%<$9kOqLghmRbpP~aksjsEDRL!v{+E3!1swQLZ!FuU`h4MXT*HulTt+w9PF$Xxr6D$BUH? znoxlTXw5(ICiSHC_eTF{WS#={=e!=+=;_{xqN}?;e z(Cp6%=@#f`-1Lw}(hM6~GMwzs`SxoVh3kBO4k{Cr>Cg=^jn+eE-GiTVH`Nw?V05Cj{e#qJU z5sUxQ#}~SC$;H_U`n4BE8LX61l6~?fUF<7W!_{`5+l@k6wUk8Ky1s0#G;^?w%&9J) zRH=Fh5Y#*uCx3=XJYYZj0~eqZ9ALhGu9g;DmX>ZcvS6?4P&D5Qr+iJq-beW2?u5YA zdHArCC*Jbz|JRzmCxv|s`jEpoh?I-We+PLD<= zVvT&|JYx4-KKq5KYjL?oB9@8i;m~_Natf-dCl`!$q%vL-zkKqjvGemE ze0X+7281B?78VY1=S6<(77+QTzfHZjm#jE6)T*x+@s1{E9GKPQZB^4!2m4I$>+ntMEcZz`Hbit5I zjAWV;F^qu2?$7vBb+ox=f{Z$vE-h^yECUUn%Z1afZn9VGYJSKBw*lItL4mwF7X640 zcyEnZC6psyEvs&;95Goa;yD*z`#2;l@YeA-3&|pPZF4wZ^Aag~jS2qK;e7S9oO)g7 z_7~H4G`2>313haozts7G;{<0Vy^iK&6?%88N!$6!Lp2nSsr*CkL6ap30qjlkMbN2Z1=SBQ(SBZTC!(3uqYG7QMaPqw-&U;H$)xJ?e zXRyspopMVf0urR)JRDky#1rDAg08L$U7;Dv$`_NH%ckQ$)0mUG=b}8MuSG1?_hT0Kr?rOKV4PXnn;-bOvpc+h(MP5nY$PMmy)_c zY;JpKh)pI#456r$?;3Rheu~Xx>Fp}~0Vb(nHepI*;Nef#H;9dAsRch$K5lp%AqN(w z>Dn%dVc0tUvLS)c7_hRk7Hc&Pm#O>y#ss^QV6?b!EGI?4`*>OXgB^5Zd`TRqoQ793 z0Ze2oF1UX9=pe0?q%kTJ5=!&za++0?+$lcx>^`)22Ck)*bZ}!A9|v8(&1Tk7fFcm4 zr-)8_c&dCIi?Re%@`=mA;$(1Ykj@Ty#62Y-SddSL%U|i7l(h9&4jY@$#K1tskeP*# zWOu*384TBzPK!CK&_(auf3h+99bt*gxSYiMDalVj08ryH={7|rQEbA~4L%)%D&1;W zN>fc-oXz&eQS|;8F`&;t&XyrEifoFh=+mipIy~`|J4L&8bCi{qt#Mc}-rM{L<4jn>{wXaGm@X@D#FZ+4*f$>z&SVy55Z zNMJgm8)#Nx>Y@a^15-4HtQS}eN~^38c}|59W*oF9t>pAl_RN^o8!B{T1*-Vk5lBMn z@8bGaEUF1dj-Nf>i0KqE9B8y+qjRtv*WW*QGRU%zgN$2E<4#zs@Cl2&tApU|;tlU} z^wmGNx~ta#ax^qYM>zvf>hvS;qmf?%%%;<|hc65JX8UUQ+Md=3zdamkt7oIBC@&rB zJLVi5+~2`X3{HlRT}+m%S<0WWzWy`T#!AN{>-^a`)N}I0UpmnFvlHIMD&J;ZYs6qF ziYoLIL*^Ht?~dK(Axp}oytKIGvh%xg;>#bTw|c_Dtk<{aK08}pzz8YiANCmxYGwE7 zJbQS5PWtTkpFgoAd4Q7mLdG2{GBOTp06yyHEFmwSBbKc4--b1jQ?kNIy)Gfh6?F%29BjaJN6wqOqt>wPJE?O+9WjrAfy-8sF>mdZDT^P?fQ*}Au*UcrkIZzhc84?--2;iZ| zZV%Oqu3Ee2fsBR9k<;_N^Bc^RiD}$YNwTyB9ND;7iQZm8p=wlzo$sG(+MaCSoaY3W zUjrG9GJ8V+k^yrGmMY!1;A?}L8oQ>;d(t=fD@d3qeqRP}!3fi+zp20|{pGT*iMCI9 zIy`@Ve3NUpNWFp8$Z0m&+Hy*&|Eu+Ao?AIBS(>Tc*hp#Zp@2I{Y<%R2v4LR?CHj_W zz&o*4d1H;rpz*`zdAex6$6HTteN1+6wF($|5um&J77cB#DtC_=7>2X?y-Je#hQH31 z1o`$M$n^-3Q+O^IBO>GJaDZ$R3veQ-F%$MgIMwH4d0tCn4OF2Uc-(Pf>8`j$7d#BV z``WrXa&X+=d*SR!7pkh|F1N1j*VoUG+~?cOh|;^N6b;tqO;v zD(Qvs=OUM^yFYk?qcdFtgso18h7aSd2nY!q?G+dg2n`z1-8`>GP^fNyuk{gwA&|mO zPLRIfRDW4x_Fd0v$iEB~bykZyu}ZMe^wfxrQz$z>a!n1)We1h!&%#q=Q?vk2Ag3^> zb+802fw=r($$WAg##vOYmUPIs7H|H^@784p;g&@#Ub=c>d-H&v6a@8~RyT18; zLOCCwnz1niK*VA>0>JlCm875(Zl2ukll zn!7YG5*kX#m1BQ?L5$Ywuvz)(Sxk$qtu4;pq41;btD9qeeXI$ygDFDP2ICtN>T6^e zDN4YXQJ}C>E$dhd2ynP;rgusAlnHS_%Q15}n&sp~2jV<9wOvlPk&T9(lYOL5C1bCH z#-43hpC_(xdE0C0kplOFlLHx3j)U8eCLvp*bbH@q8l~3ERcJhUGj> z^SZWj!Zh-vXV#aRr^0GgDLu%E)lcz!ZLnMz`R%x@RY(ZXrn@jSGynNLgaq~czP$x~a8XJF z{=M^w&c~q4m7Q7=DiVA7n&ozLZL1CZh5ee)~)}8*!Cgm!GZ?S_M?{ zzEP_c4ZJ4c)Pg`f$I3+0HN9>Cp=51LDjxm|g+1lUpwp;q=GzI^fw3-Da=Pz}$x|Hp z(9m0z>iV1TWQEoD-Pw6gp)d^rG?&>*B~8wduIQCy0e3&ouc}>F4X&xy;qF8j+1d$N zmfTcKI=s)L1bu9x#Jo4dUi0wG&NlwsXUtbU5pZ81V2o0%n!lPwcGRxf$>!a#4ZXrR zi^Y1)#sR`5`^~=VX)nyjTA!p?^c!jgoOdojIW^5~G>9&Gqbj8dnpt&y`6lrwn}d~y z3N)LmQDrAFN399$d3UYYB@t~Q6ri}yJN#u1qgfgPD({4mfpO}j&Gow!VTjx*GOp~g z!R@efbo%jJQcTP^8k$@?{OVQKpEgQ%3oSYK`}A%#x{Xc=8-)zLL6gd7Tzltedt`&8 zsu(SUF9#qla;ekSDz+p$E;P; zDew+o2|mT)z^gK{Z7at`lYt1bp6VxRhfrdu7`6K7at3R8-juf^x`4~ z;B{41s+2b5<3%b_?wCljDRqkF8ktC#gCto(+ZQrTQffAXQJMTRwdx|g37@5Q#`C*# z?PDm?4VJJY5!RwMr{84=N|0km3Uq*U)^IwP^@>$md6Yqa(zzRnSHaqAYFl^c!jc(GD&P!^?uw3&uGSf=r7)7-yc8yTF}|) zLorW8d(wUnlEQaHg!wnB5o`N%mm7E3ttgc46NJY9V-0+U0Jq6Mb^-hy5C^DKyB^4N z{`ENjyh4ik*S_-OApK)sn|_Mz5Ikvl`w$ZXK{qfmW5QWf16ia{ZnHQ8NcHXkVG4+k z(Mz1YbJH&v02ZM8`@M$d`i53|ZIEVn(7FP~RYV0|Jqw=ECgvvc_;3#*l&p2pEKhfr z*wUb!!BN1Xd1QSDRNlQ^DyAD39H6=G)hnv(Or!r|4Gdj3VIvofm;h zKtn?UO(63v5i4Ek`b!)H9KcK7Ju?4Sw(rA;fe$7cayil!8#yvE38u*VJGcjCWnM|e zPob2iOt*{{O`!G#;&GpkN$n+wX*{rVpRHYspxuEgSTVC-2tZoC+xe?6zMX!DEoAon z!$t73L4o42-x)4)YIs?hy`thUV~adfsvY8ps-5lBfc}^SroTP>C1ca>M(`ELE7OB3w3n66aprx-!hYWEODICkl$O5_y z19AWilB6|@$8wImyVS@_AK#cCO+DTdprM3Gyt8qK&C0Xl>%RjZhww)yN0^ye|AzQ9 z0u2Y5{tmi@KX<@L39JI0XRsF{)JX&D(y9S+VFy)@z;H*-gi9#uISBC}J_3p~FyS9{CkzDd1*hvskW{{Or2&95F|dBPJ60;XA`K3}*^nU@UClx{ z-+=VynZ%h#@_Wl~@yVSKp-1viK%f2R?yW+T8H)KVc-%e$>CQQMfA}-*qO84w9+?$8 zS5S9AhO{nzd|}UqZLhS>o6TT5R|k^x!16Noc6=&uW{P(+crDn0=pmu6Cb`g(mgmOVm9`Gj+cZ&C|W}J4^+J1a2)1jga0RBLDydFCa8Q(88clId*oOX$?&r z!ORXJ#0Lu*8=5<)6+EEWUe5PmXn-1a;We0y6Zd!WgNS|&mHWZ+Rh{8?=~ zD#VA2Jbei(O7WkqVyf^^J_rX&nMo$*uTLNBoJ|H<5x4aCp;74MRI&n_57LiUq>6g% zhxGR-T?92+jbN5vO08&Rb#-cb(h3NNgwG;Fj$X{BK)@N%lvJ??%SkKbVihtn{?s}u zLv4PQnL&pGr4~=X3Jas|juvlitK*qm*f0R6?89mT_n!mwqv6D}Ao~Gbum%vJraQh& z?JTM`Eha7|GFl$a*|8}klm661fc!xFRp>Y_(jI`%(qJYxxlES1vOyo^YK>QiRe>TN zBbaAa&L2@0sPN{Jd2Mqe=S{-Dy1haf@iki}PHS*_6HpFdQ+X;?LZf3RK-YUZ5JZs5 zYy-$DRYf0!#!=Cr1+5PQ>7H(`qQSB%O$rX05s>gSR>cExGa_*o;GeZOKWRmq!~lcE=i3tPFe} z2jjZibLA~y@67lGgX6MZDI=dT%fDGPwdwsn%vKhqH1rA!IZ(pz!-r;wM=dbePO{dj zpf(T|f@M!Z@#s*_j2+$12?BWuuoPi3uT}^Q-_d-$*5zcmciQ=6hrdLBG~PZtjQ7oi zZk>|>Af@IUa}|uBb8|0MTJ2g1_ENt9tieY|4uS7_R8>DZIy%~BeFjX^T3STNkW6&a zQpha_GTB_S(6{*Sl3YwN7BtV);}aA-t&4=6zZzo180cHRL#YvtNV-;Q@E?qglQ`Ur zhBYFXCP!Ws6E`Ym_Vx4(6~+({+SU+NYKY=zS~rwNkcGEr(opkLZ0;Uok%VUtngXE0 zaWfR1(lXmF*9^b*7%NbM<|$6m^EJve*JCsMID$&C>|~^&dMQj+)^g?Zaf13uHdJA^ zuV?_AhGs%FnV&v1WnLLyqltzlxi#wDJb#FmwruBDmCPB*8Qr-#&7?*ZWwE&~iBDL1 z3^+H`G>hS*N25T2UG0>%q>f#!sG~Ciw zQr*DIq0*clka%jt%8Mb)7W`%x8T}N$dC8+Ne@wmS+EQCZ{4acZ9(4lN+0o0owg&sLUrfY-|w? zn1=R8?zT28CtOe*LKpRDO#R4@;6>#Bo$W{S(s`NFcRqb|WUzGGucoy3wBA(* z#hEz8CbBvSD*DOIJ{iWUJ~~$&5Nj8D#>b?Dcq);(MMmS&5fb`Glmtnng{w}33t{Ns z#L*ChcK`E~$l>W$bar93c*QZFfSUV5J4cL9PHMx7H&yvhW(#8QZmMNgL{vHQlR zLVmwnoqLA=kl3=2WjyB?*yVp_1R@`SJuRf}Futn;D0V>^4DiSSjBX0l1@kP2G6oND z^946Yezi^U?5TXq4+hHiKchj`+e>hS0M+#ukTZ$9u!#tV8XrGsy=^x0tiMD4ca<-F zvpl)}^f2yAJp4D@6F5cL!&{8YmL=EQH25Z|L>%LU;Hldf80i=`MEj{n z9OJE0;e|*pfLlQeM;lLoh9Xpd&b~7@R8$80=+8t>hsaCLtJ_M<+CTacQ6kR*{680l zJ3lN4F7TcvE2*raDVv=tLx_AZv(_+dsELDF`)%HOLOYhJtH>kdxgbC%_<(_xC#;cG zT_YA?PI&SdZ>)ch1ATG8*NT`ev}niJ&M8w0I03|x6zw5OYmQ5O+&^v9dgDj=XW%@J z>v|RzOOf7%ED#SIB6#o!xNt|`pqXL-_iFhu3TCzKvqGz1iwhvFXeguKg?!Af-^_Hw zYlK3he61u`L%#+wzGj9XfS6>uE#-3%Q&esdsed%h5c6d+yR)pohduu+{LeG+_fEL# zKaUqZ_y0cadJ51~iC2c;AE`M1%(VkAA_D3jYlooKGXud`g_gN_xV%3mJ`S>+`eyC_oDi_nsHD>Kd0J;G(M+0%(z!PW{$sekzza z+?w{z0TZg&ZK1Swk8#mjV{Nh5xiN?aVpI#Y2is&c!;;?Qs;(s6-g#FmtU~LSw%$NV z$%-UGFHLx=mp1CW!5wkaKab4CJF3{-GXXW;Ew=9(hF9Pmz9~tp^z@{q%qVje@DsLOnQ~Mw+5+_O%5l+2$4BdIoHSb_X`Y6N zd}k|)rTGswmWGBlCgS+IZW?YZj~P1g@Ybg)32{Ocp%N=WvpSYW*KUnXg>z@i>*dMt zx+zd;hqyuR7ASbY@Ij?pAf+85gs*31eo1&U5bs z9>6EA$;`pY^g8p`+~FIIm%Vk4hhji8;)=pG;ZNsfN;hzXd8gVR78n^67hc#7sV&tx zKla`y|G0G)NYV5{tdt6QuT<|fXhs;Y08RP6g&YCCm>_wB_>@sI@@v0*I+DN1>$dzg zb^hrIbioa@-u!e-Km)^Jw6Xc~8^T7KgquIl?o&05H|gWOZ?cB-dU*jGlxhb^``^8L z72bZw6H-jCT8=$avl$Z|-TEC_7ll!`21tal?WV_~5a1J1QoUl?EtZTD1N0Z+!Qm#= zL2ytr1s%X^PF7%YeR6T31%fJsnJRj>c{zB}>9HP-nuClB()>D5l2*U81C(Te-JjpR zHAQ??0PHKaj<#`J&Q+zhvk9kl+~s(TI&K?B_yXa#n~}OSk{MmV50kRk6+}lHfxh5i z_0)z2I3T-y&U~%Hr1t97E6b^$VRX;0k6QYJV;t9Kd1+}UfBmxV-rbxGl$sFN)3ec> zPrdPsDSYp^-42uQ?fQr+#rb$D)XNiGsHvL&Gr;*HL>O!HjoR!h z&(j+-7z@@mEldsH7))`Y`;g3=vY)NrnKYS9#k+h(Z*T)NMsW|fX~rh7LRQ`@ODEo8 zBS<#)!KlQ4?XXCoTW|3HuO0r^wn0+a{}z@0E-DBF&FH7)IyiY$DSG3(5qW@+o7k7%K4OCC}dZjbbLAweBasbqS zGcrwpM-mHp!Qs?i#BX`t{V1x+db;z9;t&iynstxqkJ+tmxn{w(r@imEo5G5c0f(mn zL_pzRTr#!i8-R7uD3Kw1DdnZ5H?9kxH%9YVAt_9Er=L0wp!r{E5&z;AK61js!i!wP z#wUbtGQ_ssHaV~QRA=jMeaveecKJ;^_SD|KwOj!=vTAcAdPBDfgWf9+%<^sWe)tHY z{4iocN$2YwxXol1@}<0WQKBl~J!+l>LSS7*{Fgzx8XrGCEUYj|xd%>t8Loo4ri{o6?x-cXuc22IosRFfgA>#l~j;JHsYR=KKP&aGfq5 z_JV7{f=Y0Z7xa!TT-T`;zhAxG)7$R`6iL$!2Ae<-x#{{Q04)4Do=Ozqg>7Ev^|YvL zx$(o}%BnK`?0P^BlI(dItUGm;;$=ONdh^S(Zfkq%h0no#-?)G8s!%S?z)e_#TDe## zV9CKk^XpCEIL=k~HAf;5l#!CUH0mtgG6Yg58Hl}4w=GUq8d3+9mV@HwZVH5l=Na|i0xqvAPE`P^_yR>HT%8D%|Aw;A#Z5ZetVCchS- zXIEUgem=KhXTmRWN>D<@L~a$*#H*Ped+Qv`|7z*z=)mhuVBHO5?$AsZdiep;g$??B z{{C1a|B(rKay%BW(p-MlJ-E-8B@Ei=KYsk0pov14os|htJ;3h?c)~zG=5=nCTO}P} z)mZD(O)XQ*t#`Uc#r5zopYfjWADd}#ZaTv~hr0{iW@lyx)O%?cn$NmW;6P6{2CcTf z1bSW`jaf~+j}$<&7(b|qX%aeFH1atB;;Vm+k-MceooM#p-6Y^Qc3c6t_put7+D#*^x&Ohu0|NdsKVBf6{XtJYsKix`>jN~ctCWX^V4T&#QmuHdk zdfDv_Ji8a3VoDFl8%7344;7l1K+p2<2^%DZT-GZc0Mw9cFwHk=?xFG4_4I$jJ1!$g zS82vFPU(9?at_ec(DLZNEuSAWBV8$e=s)hs7p$^`gDAvw;j?Q`lhDEk(*b({Qtj%u z_^Joa>^g|Q_d?znV2Nin7!b-qoB3}cAt9CdfT%-W|LiNUY7Jt74*@u8Rlr#D^WrYB zgFp-R254@j4H5LHsWU>Pe>e4rIfs!S5i024{QHftzkB`fQ(%DZEK3(sNIm#AhKNt{ zFNGdJ!AqG)AjgHsqo#U;K=T8LgZIz*?o1Q(udg4lKoXdnQSN%H_)j1s-}P~w#w!S(Q|KIHa8y5*kb>Xls|v#P8ujcvZHnmbcFJQQ}i&fkt_l z_Q+QS12fiWsOSnHa~%``_4_nC)Aw(p%?@*bYJJQ*&D02*Sf+-97_Q!ETWCO#g@fx;PX4Qy5P$4}u%B*Q!UV9FIeqtNI;_ff@D zb?c&?dZ3P!1@C}mkz<<5%a>U9-XI5Su79kMgBm6kQo zn7`4Pi5{U1E}y2eyYHM@j9Yy;a4t|nDW+na>bdsva&qG2<#iXDB&@6R(rmIl>tNXe zfcC8QWR|ZMlL?gczpla%G_nW-aBVUoF|o|?QZ{QV_Gt91V?fP;jg5`hd-Xo969|Nl zy{e0oxNZM*bw!$gzq-PX8t2ClXTaj$^OnF@0{U1^kFbUIn^luE}jqx1CE3Dd4RLw%6Lk;Rx{nH z!I99*q^nGpn3ssx>)>d;9E3+q#$|x&fy-tLhQ>!y?A1`)Dt*Um*cM7qVLo`Zb$)0W znwg0rss^~1f%UVTEePEC10$+5g9HAhFaG{4lw#*<<4h^raBq1{?7g!>qe3xI0tU_e$X zn%8-^w5lwl?$lb>X0C`)>HFw$q33m5uZTCv`czF+)d7gErn)6;W@|+_qNrsNf~FmS zmhxl^o)V|7b^FMqU)ywCCkezO|6l=AKNW&kWoV0rRGqd4cCu5Rs}&%6m-acl1%16X zPqYPe=QlQf*N5L+Uu?}Z#59_fI|H(C+Azaz}$N}5n9iQ&UW z!zSd+k=u-q-BBKdgL_)#c*Grs%EbH zy6s&`xqA2uIh<%}4u}VVfItcTs7eS#i3$P}Kw%0K)0rs-XvDBp-IU7`V-O1r<%+n& z18LRlPK(MsRyKMGy`v;v^<0*eRqW*|T>oyBvPlri^=OhML1QRsmj9ACwDs`{Fq*ob z5`Pf*hE~J`hP)Xy*@u@6=pC8)jc4Zo=WX@w#BpC|MGT3Of8SV#VHvO2X^*r_N|Q_H zmD=kKU{GQAj_^ZmL7eFG75xj+y*n7w3Pc^b>h}HV;`cOfCcH)#|2WU}>330aN)d25 zIf$*+Jy0(zdA&Pc?VK{pPsn9)z1Z5_6-|$uyb8F!b8~Y!%*PFOlj}Z42&-uLx zAiLjfZ$R_lq~8@iJEp56$(c~rjhjDK0=oakz{<9aL#xQuFFl)Mkgw+Ahl)OVGRNHR z!93TW)a&t(U{!|or&}v4klr)t*L{6UP-jx>ygid=m5usj1GhttR##R+qF{dGqG~dR zQFpXJ@=kP1E`j^9r!$?8B%Ib00PDcJLlpmYGjS530Kw-C$!vr1uUDl>$w;Ly=c^A> z`J$fG?e6x&Y=OKN?yTd=?h5_*1g9I0U~7B3riMBm_aq>mq;)b(h_*WSB!-U)EGw0x zrreUrMU51#L?tF-0gGs1cxsmMEh@!z9Z!-$~o;XlJZ^x4PT}kUZdW zF9CH?4R)KZ??A`&?7-+{VHhok?}HOLDYAfH5K`R0(_-7?{{@V zf$vxWngP5Zh{p%g1j9Y}%|1I3VD9E^C8v!;H0{TClbxKO;0pwu%iTvo8Qy42sP^H1 z59oO5jP>CHXkZxR924)&*Ar=t_>-NV#f>{Ng)v%8x<^ZxQ&1~XKZmGJ!#U{$ZlF{R zi00i)$9i(}y){WeybluyLtT;pGF@Iuxd;zJfx^`K%l~fH?_EyJqZ zx;9XhEh-WU0#dRS>5`UKDd`3!6{Nenq(nfZO9Z4_xGZyam{oXIm`E%9} zxh{mY7VDYMoMYVM4m2dEXaAn75*djxnF`1ox!YfRJ{5XK8~`c@#6wyq3CLu+ZT|^l zwZOEMaoeEK6*2Ju6ifThb%3(06_o=ZwyW>D^?D(8%YPn-?&A3yHyXsvMaFa&^)IJC zX;MmcIF?o_N{8OQLc7HE@9p)jbUKsQz2Gaz?ZY|z2!&_9qET%4konj;?q z-a7lC%Pc$-;dB~MQ$FC~ALBM|G%6l1S4#!=QrVfAL^ntVwps7dor^Swds$v?`nY#J zXQ~Q|eoLlS3)ayv!Kh;)X8M<}U&Zf$1Z1Vt5ps?mR-H1(vtLzc@JEH>gYv+jNZ_ix z|Gd9C7SnYqg&e@cRnmJY6~_xf+MYF2bQ3-%Y88;3kXBV;+(eI^zBfe1XUGyAZp=BD zt5ovN!@>U>2b}uJ?%*Z4rdFiP0|04TIBkZ~knMKwJe>SzZQn^q`89g@V~UL+TgP=h zV}7&fIb}sRcrzjGMS}qc4t8#%9y#K2XahQWqTP~Tjm&G>`@I7^&qrD#BZqHe*DUuZ z3qwFpmqux`B6XN36mm7R$3;*s@|>cT+OJ}eDOzcfR9PJx)VTAfJ=edFgMvn2GdFBL zfnz*gm@F1J8E3sN!d|8-$%=qYsPu6>ywLy=t3OkEMufrh!hsX^H;#NFB|KfBu5MhL z^_>y07b;?fioaVjG4x9-#Df0osJ`1u4~}Mtk~@{1ie~QV{rkWF8O~kBJ#8KlkJiMr zy5~+NSu^W6gKg_XL*%TLxyC~`zYIR70%f4r)q?|#hf*~Y!~iCxHwyze0ERQz_*7M#fZFP5iryYLcgh&VJKII`2z zPxkhHpp$z@|=NnPbv)>>AoR9xPR zN6UQ`6e?yd@ay^=+EQfm)|#~|+*{jCsP64Ez}MdH+$_VowFO;I`;X%M za=VRC2&%K)m|XoAs;4R%RBSRyiG{Of6xy|jm$o)p)Rs3(0j{;+6>FfU_qzR)=gW8Q z(Vr$Kjha4Oy1Bc%7iTGEl4+Xz>S}|f@kE8LZGjWmr^Apky84D!v{M}B!%{G6EpBXV zzC>ouT(BZ5ZzF5}g}`y#n2@O8F!(`B*Djt!W{mw85{a6! zL;3T+)8KyDYrgm5C#YFRpv2S!xeE4PD&aTxewEYih_G3B$l9zC%sIXP%)JGuVFGrxp(}>N%_oOB^@RZF`g*2e~NkLs⪼J_;BRC8z(#k8|7hO1TqD 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 vYjGu?=F&-3gXBQ1HrRPs^Gqz##Hsl@)C$@>aZ Date: Tue, 1 Sep 2026 19:53:17 -0600 Subject: [PATCH 05/15] fix(cost): fail closed on incomplete workload totals --- crates/types/src/cost.rs | 35 +++++++++++++++++---------------- tools/dag-viewer/test_render.py | 5 +++++ 2 files changed, 23 insertions(+), 17 deletions(-) diff --git a/crates/types/src/cost.rs b/crates/types/src/cost.rs index 924f7d96..332e1c9e 100644 --- a/crates/types/src/cost.rs +++ b/crates/types/src/cost.rs @@ -302,13 +302,11 @@ impl std::error::Error for UnitMismatch {} /// nodes must be counted once in workload totals" requirement. `entries` is /// `(workload_node_id, annotation)` pairs; an entry with `workload_node_id: /// None` is never deduplicated against anything else (each is its own, -/// always-unique contribution). An entry whose `annotation.value` is `None` -/// (i.e. [`CostSource::Unavailable`]) contributes nothing to the sum but -/// does not invalidate it — the total is simply computed over whichever -/// inputs are actually known, same spirit as `Option`-typed inputs -/// elsewhere in this module. +/// always-unique contribution). If any distinct entry has no value, the +/// aggregate is unavailable as well: returning a numeric subtotal would +/// misrepresent it as the whole workload's cost. /// -/// Rejects the sum with [`UnitMismatch`] the moment two *valued* entries +/// Rejects the sum with [`UnitMismatch`] the moment two distinct entries /// disagree on [`CostUnit`] — "unit-incompatible aggregation is rejected". pub fn sum_workload_costs<'a, I>(entries: I) -> Result where @@ -318,12 +316,15 @@ where let mut unit: Option = None; let mut total = 0.0_f64; let mut counted_any = false; + let mut missing_any = false; let mut model_versions: Vec = Vec::new(); for (workload_node_id, annotation) in entries { - let Some(value) = annotation.value else { - continue; - }; + if let Some(id) = workload_node_id { + if !seen_ids.insert(id) { + continue; // already counted this shared node once + } + } match unit { None => unit = Some(annotation.unit), Some(existing) if existing != annotation.unit => { @@ -334,11 +335,10 @@ where } _ => {} } - if let Some(id) = workload_node_id { - if !seen_ids.insert(id) { - continue; // already counted this shared node once - } - } + let Some(value) = annotation.value else { + missing_any = true; + continue; + }; total += value; counted_any = true; if let Some(version) = &annotation.model_version { @@ -348,7 +348,7 @@ where } } - Ok(if counted_any { + Ok(if counted_any && !missing_any { CostAnnotation { value: Some(total), unit: unit.expect("counted_any implies unit was set"), @@ -529,11 +529,12 @@ mod tests { } #[test] - fn sum_workload_costs_skips_unavailable_entries_without_failing() { + fn sum_workload_costs_is_unavailable_when_any_distinct_entry_is_unavailable() { let known = ann(4.0, CostUnit::RelativeStructuralUnits); let unavailable = CostAnnotation::unavailable(CostUnit::RelativeStructuralUnits); let total = sum_workload_costs(vec![(None, &known), (None, &unavailable)]).unwrap(); - assert_eq!(total.value, Some(4.0)); + assert_eq!(total.value, None); + assert_eq!(total.source, CostSource::Unavailable); } #[test] diff --git a/tools/dag-viewer/test_render.py b/tools/dag-viewer/test_render.py index ba353d1f..bc78fcfb 100644 --- a/tools/dag-viewer/test_render.py +++ b/tools/dag-viewer/test_render.py @@ -176,6 +176,11 @@ def test_embedded_data_placed_before_viewer_js_body(self): viewer_pos = html.index("cytoscape.use(window.cytoscapeDagre)") # viewer.js's first line self.assertLess(embedded_pos, viewer_pos) + def test_inlined_edge_cost_key_contains_no_literal_nul(self): + html = render({"queries": [named_graph("q1")]}) + self.assertNotIn("\x00", html) + self.assertIn(r"\u0000", html) + def test_angle_bracket_in_query_source_does_not_break_out_of_script_tag(self): # A pathological (but legal JSON) query source containing a literal # "" substring must not prematurely close the embedded From eb0502b4350e1a0dfa2b65c5e3a30af3aa0daadc Mon Sep 17 00:00:00 2001 From: zz_y Date: Tue, 1 Sep 2026 20:09:45 -0600 Subject: [PATCH 06/15] feat(viewer): tie cost comparison to graph elements --- tools/dag-viewer/cost-benefit-annotations.png | Bin 186627 -> 242982 bytes tools/dag-viewer/index.html | 21 +++++ tools/dag-viewer/viewer.js | 79 ++++++++++++++++-- 3 files changed, 91 insertions(+), 9 deletions(-) diff --git a/tools/dag-viewer/cost-benefit-annotations.png b/tools/dag-viewer/cost-benefit-annotations.png index 9564a82f564fad8df4a6d448f3bae665f6fd1042..2e5565072c812f5deb56f605841d900fbc332d46 100644 GIT binary patch literal 242982 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%0DSsME6Px&3j?>Le zOf(b`r2r%IOD9@BdU`uv_ZsywGZ!_rDVH*>&z|n+?ZG7>Ed1}G*V_GLX>L_+%m#i6 zf4QGm`4JctbVP(Q3NwLm2$eM6W}zFf%~!SjzRZ$?H$ayfqm1H7n;VnyW%zzSAVo>u4C11? zxd=`6HM2-j7&?$KiDhjuPr29~36^>ACgI{(UH$n3_~_OahZ?SL=45>SBGd|KORzl_ z@TwTn%-ZQg)*xf&wz)rij?cC{|6)I!VLezIUJU)6gWTQB5Z4sD*+J@(o)|Nt7@zLM zb(Fr7&#oGINMkoCp0RBcoG;mR&((^2fXPsaPRNK)PmN9d@UeJo<6hjDKqQ)cvQDmu zYDkkor@k6+2KJ6C)rzhpcus&h10;4qc`H$|&<7k{s8QeMs~w1V@c;CLeFZd>BBcx) z8yj|~(bjCGj%+dzqy0M`W86}2iyhVjLGfBI@!20<_?fLFL|6tdYz6%5{Eqg_twFxi z@DJGb>S1OIfVr`Lv<0g)3HVT4R`V}D;^X7{pdwL3k>k7_2n5VFeVt~f-?AV*afeD+ zs!;=%4@Od3yT!>O(09JqxY)#*ZdVRuy9Wn%)0GWCzs&J})!7FI)>>yL#YSUcT^m3p z#Bo+%WiV*^TrYDzd*^D`P+whLRTZSjQL@=r7Z5KF49(AF$ zyyp^=)<@XiD5(-fPuIiDqwoc&J8uY(NqA}a_^j7_yFik!s;Dl)dw>eG%>w|h* zT`ud1AW<^m!o#_uxl|Vd{Xsq)pH*4nKOk{oIa5#J{K*>`S(n?czA9#7-S+_~nZH)D z-{hnYw-_H#!-M&`gW%SD(bM}F>FGijxxj69G%R3~YO03m6@k7j*KeyZ=&Qiq-X^d5 zy#EEG<9dEg=(w~`$Yi9{6j)zBO+ji33ScuN3C1g5=cFeY02Pv~!P+xJz@6ck%)JK2 zn@zbF0IW{IJ|d&m!`T9-xLy>5e0I?R"AxZg;EDM?DQZ^(pI&A7{tzx=t`l|B{c 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

r8niF6bi2gz%-2#}N&V_7Ot+dOACaA#$7l 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 literal 186627 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%0A3B+y?-k2JOc_*VG_4Wjv`Hn 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⪼J_;BRC8z(#k8|7hO1TqD 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 vYjGu?=F&-3gXBQ1HrRPs^Gqz##Hsl@)C$@>aZ { @@ -559,12 +590,12 @@ function unionStageLaneElements(stage, chosen) { // both shapes carry id/kind/label/detail/children, which is all a lane // needs; SummaryDagNode's missing `hash`/`notes` fields are simply never // read by this function or by showPrePostDetail below. -function laneElements(laneId, laneLabel, graph, query, stage) { +function laneElements(laneId, laneLabel, graph, query, stage, laneCost) { const nodes = graph.nodes; const byId = new Map(nodes.map((node) => [node.id, node])); const edgeCostByPair = new Map((graph.edge_annotations || []).map((edge) => [`${edge.from}${edge.to}`, edge.cost])); const elements = [ - { data: { id: laneId, label: laneLabel, isLane: true }, classes: 'laneParent', selectable: false, grabbable: false }, + { data: { id: laneId, label: laneCostLabel(laneLabel, laneCost, stage), isLane: true }, classes: 'laneParent', selectable: false, grabbable: false }, ]; for (const node of nodes) { elements.push({ @@ -591,6 +622,9 @@ function laneElements(laneId, laneLabel, graph, query, stage) { lifecycleSummary: query.lifecycle_summary, translations: translationsForNode(query, node, stage), }, + classes: node.decision && typeof node.decision.benefit?.value === 'number' + ? (node.decision.benefit.value >= 0 ? 'costImprovement' : 'costRegression') + : '', }); } for (const node of nodes) { @@ -608,7 +642,11 @@ function laneElements(laneId, laneLabel, graph, query, stage) { // (a real DAG merge point); `undefined` otherwise, read by // showEdgeDetail. edgeCost: edgeCostByPair.get(`${childId}\u0000${node.id}`), + edgeCostLabel: edgeCostByPair.has(`${childId}\u0000${node.id}`) + ? `edge cost ${compactCost(edgeCostByPair.get(`${childId}\u0000${node.id}`))}` + : '', }, + classes: edgeCostByPair.has(`${childId}\u0000${node.id}`) ? 'costAnnotated' : '', }); } } @@ -650,6 +688,16 @@ function formatCostNumber(value) { return Number(value.toFixed(3)).toString(); } +function compactCost(annotation) { + if (!annotation || annotation.value === null || annotation.value === undefined) return 'Not estimated'; + return `${formatCostNumber(annotation.value)} ${formatCostUnit(annotation.unit)}`; +} + +function laneCostLabel(label, annotation, stage) { + if (!annotation) return label; + return `${label}\n${stage === 'pre' ? 'Baseline' : 'Selected'} cost: ${compactCost(annotation)}`; +} + // One `` block for the sidebar: value + unit + // Modeled/Measured/Unavailable badge, baseline/delta/ratio when present, // model/benchmark provenance, and the raw `inputs` the value was built @@ -856,8 +904,21 @@ function renderScopeSummary(selected) { // computeSelectionWorkloadCost's own doc for why this is aggregation, not // client-side cost estimation. const costSummary = selected.length === 1 ? selected[0].workload_cost : computeSelectionWorkloadCost(selected); + const benefitValue = costSummary && costSummary.benefit && costSummary.benefit.value; + const outcomeLabel = typeof benefitValue !== 'number' + ? 'difference' + : benefitValue > 0 ? 'saved' : benefitValue < 0 ? 'additional cost' : 'no change'; const costHtml = costSummary - ? `

Workload cost
${renderCostAnnotation('Baseline', costSummary.baseline_cost)}${renderCostAnnotation('Selected', costSummary.selected_cost)}${renderCostAnnotation('Benefit', costSummary.benefit)}
` + ? `
+
Pre/post cost comparison
+
+
pre-ASAP baseline${escapeHtml(compactCost(costSummary.baseline_cost))}
+
+
post-ASAP selected${escapeHtml(compactCost(costSummary.selected_cost))}
+
${escapeHtml(outcomeLabel)}${escapeHtml(compactCost(costSummary.benefit))}${typeof costSummary.benefit?.benefit_ratio === 'number' ? ` (${(costSummary.benefit.benefit_ratio * 100).toFixed(1)}%)` : ''}
+
+
The same values are attached to the lane headers below. Green/red nodes show lower/higher replacement cost; highlighted edges carry inspectable materialization cost.
+
` : ''; scopePickerEl.innerHTML = `
View scope
${escapeHtml(scope)}${escapeHtml(strategyText)}
${costHtml}`; } From ca8a73398e080383c0be7e346fa9cad2279dbd7c Mon Sep 17 00:00:00 2001 From: zz_y Date: Tue, 1 Sep 2026 20:14:19 -0600 Subject: [PATCH 07/15] docs(viewer): add positive savings example --- .../cost-benefit-positive-savings.png | Bin 0 -> 262217 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 tools/dag-viewer/cost-benefit-positive-savings.png diff --git a/tools/dag-viewer/cost-benefit-positive-savings.png b/tools/dag-viewer/cost-benefit-positive-savings.png new file mode 100644 index 0000000000000000000000000000000000000000..0e6827abd823da749bc5cd1f93d8295660b4eb65 GIT binary patch literal 262217 zcmZ5|18^kW*LUn}Y+D;=V;dXWwr$(V#hCxUd2c5JW2w5EwQT2;iL*-)k};AVeSuVF4w#%!@2=epF4I z5L5N!tE($SoQ{s#j*gCM9l%Qm3L_9OI54n?gJ3N%A#Q*aUr~pBt|8WN3qyKw=V6I%)|GFxa|NlJ& z3?}%0UlVBWU*G!yzQ7b#FDWX5HqT#EWw?L@MJP%%P=;ELNkl6#A{j1k4}>Iu2=>qR zWkBidyrL}l&#n=5#d*XSCfXvH0{t9vP<~}k&ogNt@o7POl{=0qBdN70+fQ^rm17ZRbY+#d5{}CsziZRZKS|B&E6DN<6@fWb0 ziq%g2?FMlBqYcFKLu7$yfx0+Cmv>x8vK-tiQkcXfG=egX*id;!?NOs%=XJI%Fjvax@ z@(hZ4C^CyZ$yWba`amMwQ6AW&xNgRIZFxI+xHBb{0P_J)Wx0&xq!GTPB<7j9J)Vk+ zGDX9WB2qFqHw2oB1i%d_AVajA54{|25%q&)xR!ZvQNlHna!Ez)fFD%bimX=CN zd|x9nDO-53;*N<+ot~O4II8KSrT20s#?Q?!QPR}>HpCkn6F+4_pqXQGPz#-FUpvzZ zEiy(sO`8znP&db`@<14$XLeK%W#ZJZxY(ehrzogWzt&e5Rlz@(Q_)mxYAyW9oZ((d zNMBJjJ0c|Ft}YF~n7=nyndxqnLbQE`pO8uRJ`tHJo)(DFfzEUE~*Nkf4Zq!~;ScY+hziAFw2l+c|JV zDkd(nFS^{xA|oa;GO}E*01{-V92FwpA6-@zUmvCa#PBxM6s52a8owCmFJTdN;5TH0 zm3aQR9*8(g0k*Ozq_Ny^Mb34pC#xw`YbsPhZTa7#cb*o(glzo?5PGG1N|-A^dO(3MDE>&;Kwk@U zmin0z^71nBIx#PdAA5Cg%mpC-4*pjcIZENL>BPk3<0A|U%Tfsm2}G!XkE(^GC51Aj z(s*iWYGb3qFx%qVD0#K9%AJ!YXU*!Aa%x1JAw42RKAdV*j3lJlr zoz?6tu!CVkwKqzKCsT7v5Xf@EmQ?bjX3;-O$H!@ z`(F?jON!SR|K!sQq1G?p;FhwOEvs+mgb0*RQJf&e28RPLGBzrZ91&HQKq5ZC88#!5 zm}7SIc~&zP6*2h{^xu@_L-x-j<})%n+H)`j695C2gn89J2~ki{R~0hFZq}k-XMPOz zl6bw=pH_kn6Akz!fkK>Y#(ofC2(rsBFQ5IP=TYFl{vD+jTxzyq8T0RF_QC!&Q3Frh z!(L>3sGxwX;CpML3>5$sDwro%W*{HW9V^ zlxw6#DD1IXI8pC$Q6Xz(BNFqJ|39Pm7{Cnk&0;dCo@;94bH9YQhaoDXA}S@61W4IP zQR(FhHa_}+=;kUa%d?i@^^!y9H)rsM_ME$}diQP;({bey)S~cNSY7$sfHaKC?7Y=; zi!=NPGOM7bG#94aGNDHMT3~?I2l9G=gFy(Z3Ju%}iGe9r5pR({>}>J<^0dhb%yWXUf3({j0PJ@K@mpM)2= zhZ@*lz-s#pN3-#C#`vYwzT^2S)ZT$Equa+;!gAhZYS(#q{dn?4LXpem(%i&&yV-Dg zblzmM>)CG^Y4_oJ+4OZzq`8@OphnVI+1XmC9gJS*Z9=yh+6Ok-R;TB2CcI(U&;TX; zT0lgEtTpXVdM|H-#b>q{-PJ|^c}o_(R-0-K*D8nm&X48Mri`cI0WzfM!@b4#DOnzI zM|1Vp;ELxZTb@?4!zJsE*zNA`pR_!YFA#UI5rn+wm#MV64Jehg>RnmfzhxwPoUc!h zvcxcI)|%gU(kP~REJx6?clzh2T6hL&8tSG{WIenvhJ6wtR9cO#vp6#iX*4a@EH_{MXy5j3F0 z6zcg7fye11@uK~V-_`0o9b97>$3}<@6`vOoj)ilkKncGxl&Dm{$7Eq?ah}r1>3V5m zdCmXT{(RBo@W>}2F&Z>7k=3HN7NyQ+vthtB*J)hAXgI9f;S*@a9-G4r4G)jvYF_qVGX*f0~?3?X)O4pAP1`6u8lr(7nR8|M{lEaH) z$@J0TA<}lBhN!mCxobXA9X195o9mUAxbblFC53F7%kdQtlV|02Es~&;ni~HH!y7y% zi`M}q1GmQo+_ZzED~3&vy?k#tVNx8qsM{3rn+8lnKLmBh$cft&v)mgQc@dIeq_;pY zv%2w(HU5I9t(Dgw%BD`=ozSk(X(T?NDRgn6T}=cZsmIWNX4S}a$*o}C`1~;$S<&5{ z!|Us7^%Xq_{bVNdcTUr}08A!>&qOIwf3Mxg!D&*(vV#m9k^`5-y@@neqwR8Yw4sD~ zS;o6m93C?hQ@AcBbrK9d1U(KGc1TDt0j~$ho`1tS#D?z+)R$nX_NLC!fmaj#^z44g zP*l#v;}{nW&HB`msH)iTXVLJUF%5-m#www+-pt>xNQ|kLmIg8(Wtd3Ga%!9ycT6-f{Nh4mNy!=Fg0FK5;bHQXwN#XE z)$$6-t3HKXD!04s z)7r|2X6^W);lJ@;pGuI>P-^n?!D_PW;_`! zARyGllZ4u?cdE;Bon zLBc3eQDSYy#9&lWR8$<6PJI}fp3V#JAAm;LnHZAJK)~e|{`kW}M=iYjV3!|BWpBO1^ZOPdM{WE(A#j*3#5amu_}-}N?+r7Y z2FgE?j!=B-iMrMGjre7w)#9=`=6l8Gw$NisaOWi=5?q4O5bJbt1FWr$$AF5FQmNJ? zDy{vCo?cg4TKVPDs@Y28dS)P-1p$kfli>t!qh4>zN`{M2fKI!6?fOzPoxRF5)~3F` zo_qd3NqFFiIiwiTUtj=>!S)TaZUfhmDN_Pq- zDob0RkiE4wmuF=O6mw=1UvD;u`3&IIQDe4Cg8CE(`xrRT-$_1AR#GeYGl!DvZ}LuPksp+u;F=c zwmf%xhj3I`UVFr$*X}N^DndKCh7UEJ*4=1zU+=M0nat++jIP@O@Tw6eBl zwN|q<(*tt(O=~Ss6tG_MJ7=*-aafTe1`!?@Tl3GKX!C|h#WGQd_M3#Fo0E{RJuqc) zFw>oBv!;BniUye;TwZ<` zG#j{^x795$bLB7K029n)y=T`PIK8108X`iM#uw}jq1EAWF7G3N)M{v~&oohn5G+Va zTGah;_l}BIQA%iQYsq1xCtI7A9q)a+<_(?R+StgF^rn8~cJ>B%@D6vac?X@;)XE?~ zxtg5_`M~?JKzHt#TU2|A2<~BF;NhJhpRe_EYxWO6(L-*PladIj$Hr;io-Qs{BHE-- zT8{{BcAq{=SfDjLhmQi)@eyTobOcbiq{P7)D#|HoQ+bf?xKneu@8goxy ztpJd~zp;S$ysL*%l02fXF^XDC3Ndy=3oAJ-1sI8?7E=nMD^rt0t+v?O$_*XL$BQ`lEZ~ULf3(YcRPNU5e0fQnZ2ot2jGv) zW9Y;|=B6+ie=u}s>w~VHC!He@?k*@PYp^t2Zg*7VlI~}8ykrOA;vl0#2P7sI8pT#$ z?r?9=kv{$Hr{D0Flp4=v1HbJ&o>8y9qTBY&>FB|qDWNfvIq~M;dlZ+HsVJ>nm|Y4= zh%+TDtmy>(i}T}2CCH4wEF(UxqNakX+&dW;FGa%En&^)l6#Y)-YQtX!+pEl760zW* zkO1ly&u8A26r1mA^#+@M(PJ@$#>PheiMyMdpEUH2PEH%m#tlJ1!ZJ2=iR@&DK?ww4<8&`2_{U1u+DC8j6bdeUnvUu~&V8fM&^x9*Tyi z&JUB5%R>aL-o7iRdTMeqc%`Z^mCWpiIEZ>N&_3We?`>Z?-e%KNLoKzUw7mP#m&;_r3~}%W0Vh-vZ!3qz#LB}19D=KA zy$zXKG^7qjy`#g@SI5<7$8)hsu{AE9M20&@n_{ta4uef*pisggjcRWikx;167SQR< z)TXEF^`?}#IAE}@ma4`BUhj9EcOHhMT=l&j!ZOD~VxPm1E5Iy8NzDd^WAXgGM%pdM zHr!zy99xeCyS;JjjyBqAYwf(fdBWDJwcG!W0_tr(dv|OsG;>?i7N=VSOUsJZmsSB8 zp%U4Qv(KaG;Ih}Lto0STm)F^27Vy3h+xYIg?ahXgXhy~*3N;kyUyF-x&!-?qcM%bwV)UdXCT5mpvDixl zLtLwi1WKl!2wB!!3roZFX4g-?xe>dM(A(vF)p1D1dU|> z!S;HfqETTK6%+(SnAn(cemT7C7Eo;HdI+XSNF}VM1TL|T0Lt&tmg_CedNbfmdAYdb zxj#W0Qy3&9LWnT#%kQ{6K4+uzrn#%|_Sl%WxATswYyoA33-f#vlan|+HU<_NZvpO( zN=k_c_`K~#uVWap1eT>0Qj$#1jUY*Ky0WeZH+i{A0dg-7tFQ``V0?j+EA7fsI!SS` zP-_uIkph7o&hK=Zluqt%a4g+O{ULDpEQmpZVFb-`FMGjUSu(a;m8X?h^D8la6KAJi zQOou-Lhnyk?$^B}Y_13jlupiu)#q5O1L2#n#2of#6U}%Xnk=@>j_)QZCDXmkgiv(4 z?N9?_2t@ib{$TGuKDGk-6C)ErTQPNY@;9M~t#v~0E?>5w{H)6ID(YPhSX!LUM_TUg zSY@=55|RSUHk%>RfspWK+tswQ{DnnidEug7ptR|${%1-;C6V%jdnk&{wrUW4!s_mW zb&9GK(KsM$x)vJbaC+Eh=e0*vO68O^bm`2{jpejlvHqP<)=tfexu5~akX34Sz=eOW zwATb0z6_PD&e5fbc?bDPG(|PeMww+X*L9nW$itdbY`Ht#uSWsp?%%_gphRQX5_9u% zW8YJ6f%$K1Jt!6y4!#qww?1hULr}Bdfd~lrT|l2fGMAb>9(&bQMRl(0X8=^Lsw2i9 z$kf0H=+dectS50HN{E8))Pi{%$_!U1A>Hz^D5e?0d?yOH_I2$2at>TE@7n%)HZoLp z17j*pyhvexFJZV6w=}OBMCi?wZY#tTsS;gNMyI!T^E)83(R?^wg*N@`OeG9%7AOwBojZVS}L;Gg@DA6pR%yFF*{!9-Fn*-AadFQ<-9&eYoB8D#WJ{4SO?EU1e-kDKQo!3JHg;* zU{$Yd)@u{5C6&8ZLGzI!BIoKI=%C>|ek|MYg&dccQ3}PLFKtp-s!km`$c5pJq>0Ju zo~~CgYm$+w@gR=0a$a(Ug=SI3~A?0Y3d*<`k+O0OuM;YX=WHpFQrF2sGh}L0QEq*ga zW%*U#o1JK!mS(FpaWstWI>+Nj95!;+Xw zqEO_X`9}ze$3f?*orG)q4ldYRV8N?-XlZN1`ykptf{}-v>F{{g^GyN=DiD^uy}$S8 z7UXuk6hkR(GgK~idv{c6vSMYV`pKM}9)b(%`}p{{xeb)clW?4ib<^SUIxH+N+fMRT z>{@R$n!_#&X|~uL9bHl#4)ux#bi@KzMw9sh!BZEv059d^jYA>^q4zw zKN&>IWJP)~&bo7-^%?#`Um`wT-lX3o@7m!*;OVDYT#Wb&^zJgefF;RT;pQX*nMQ(N zaXMc?EbuB)L{U=FZZ>^4#>&VIyHve2^RL{{&Vh?4y$oZ{gd`@R;&XOvcHSE;&ZS+P zAsn=opIMk`MdNP~SY2^BC680=0Cy|%MJ)?f!N6mNMOe1r3+=-vO6C&{kdb1bqS9(I zBv}RYUCvWPld{9`Vd8tE29NChsrzYH8E1D2si>)viy z1N^JGIi*lm=%|o@pRg{uf`Hfue_ijJFw@(%$=nkEE$MjgrKqCvqgo&=S0p_(69NgG zs-n8M&j&Gxk(^FmLS8^h3NHX|KXN847>t%CP{o?8ak$<2tLD}F>Q1{ArobceSQ^+L zO*AZT6TJ6gwTWk>#>!GoUFaZ?q21{5NoR9SY>@Qts0^M4n``ap$b`SZ_MK#@Y&nr1 zAU2KjYf7@>)3mjPmX{Z?8G|^+zE~;27S8_6F`41?WBpP#4r`QJzNQ%)7c%^7&OgnC zkX`59SFQe+Dz5nxRA?n77oGqOZyJ}zm_aX9Mc}K4>9VbZZJ7*H#r644Sy8^8f%$4X zH0?Zhxbgc0+|Av{*mx)k6UfDl2cirp{7+hzqJ{!Q4S;tchdLaKfQf@9Dk3Bo>Mz)F z_A7^Mv{GNHWdo3FeG(*(={PMm{kkOr6Ba%*e|_YLHVr2cN!4iVTrXEZ*5S-nX&J?C9V?z{SkAh+M!xA}p(VJT~ZPhp)sC_t8hf8=wGjERY)5LlT03 zc1UHt#vsNez+ilh;C#FV`m$bQOK=k8w}y#@_Ic&a;7-NsudcbS_Py-R>vP9KnR;*? zO!NH38wdeUsD`5yA37zQns6iFchCq*3oQ;3@Teb% zewA3&&gW`#HUGd~$uT38TV*qwXVft=F3N+KSJC)!b#iWzP>y@zF*XJ>vqzdrRSIrh zuro7#{-VKZC?g%598?r6ak0D(Cy;=*202>?jkq#UsAM)LAat-#ab)72i=&~*Kqg`a z?sB>VCF?)ze7%9bMttMMAOsq0<=8;(DX%ccl*iHGc13DdT)P>1L|&@V<;ied(HFSJ z$r^~x+Ka7=_p6d%1APDB?2LNGl=3I_)Wn$idV1Pup1p}tu2?&eMr>y#oOuWYR+~1- z$H-?OyCG0Or{%ch3639@V0^~2yLV=G40>shUTqyyLSimiQDMTdXWfx}fCFUJYhONc zKCdVO!A!Y(!e7_CTvj^W4it^L8FCUeM@V)YcTyM_hv3T1lQT6wHyGi~$Mx9YRs>qx zI0K@exshlX%%3ReNSoc#jvVS(arbWzC*o7|J8%x-D<$MED(RI7`wv&ENCRAQOD~*s zl%9T;Cgd9lh(ytZ*hFhPRNfv=={(*)YXZG4<`jwhvEM|HYDplFMo-zz27b5;ThDJsMr!q1&SDPIZ+R~a_ z%`)QRP#(|KrqB2dCNhxF2rv^13ky3tdX#Csf&;@)5tzouF_&UL2m)H`_26GIPtJv+ z_b)$900`WT=fMRW1pqPa&63GVg@*A31qB_|WO?T)^R+ZA^Dk5%GTf5uFdgSCJv0AhbI_P-R*LlNn~0odPnXZ*#SG)WSO8+%P&D3r zlN5%|AUdfYp0zc@%F3GGyKFYYI^1{lYl-W%P6nHGP)UMNQsx$65JCiksAdt- z)btp2s(8uH%Ibfz+3bGb3;ND4a=DcB8si&bHNoo?9SNgT+)QksiXzX^tVvD`gH>;?+lJxVVwHlCVU@)jap3XOe9Y-3r-X1is$kY}oZLwr(U7l(Ut>X+# ztbm;Dt!V>orTiKOK{yRXRemfWw$@)43;b6VQIg{k0;Vu$!Ta(ynyL- zIuOv0rm=gRdRgqyLk?G_e&El5f`FVcpz<>0!b+}wsG|^OWc7H+&Mg1cV?p|0aMP1b zIi6VC4enrTl+gR_{q(?iP%Obf32P62^)ro)V^8rX)MVYQ#Fj0H>2Lf|i)1w(7k71e zb?`SPFvr2Y)8ZkB>wx|h-d#Lj1KlxtJrmNInqJUcSjQ_ZIQ4*YWH|pG*dN=q9=szP zMTdv>w-c<~M&+joqJD}qf+5`f=Zs8f0FDo1DjQ1Q>+H?q!>pv}z62E&T>unXL0Ch> z;`8j)u{bspf1;R3#to%I-op(g;ooIu|Kho96LOG!u2~J|_@6Z;IBM+5Nj)8>pWRp7?ZDeq z)tF4=1nKnL0_i7sTcN*Vs1wJL#u994Vw{*H%~}2&X1-Z4L$V=&c1&MfTwtx#9qu-= zcym9q*U{nqSXmk=ghq(1ZLHOMep>$O_~BFNeh{|1+3o_2^kV`${p>)(I(aBDN0-5C zW#*(bmCKbNlh;v3MaAVX;?OQ+UMf#NFNIDUqW|v~XePuDueT_U8n5x@%Nr6}Zr|HX zEgLIaTi1&deM+yszW(dY4&Upqz)#2@S6gi)q@*mtgYzXh$Aul;b~r40{9OX*V8Z0W zQ~(YfbkIN=Uc0qi#JDQIs`SI+PLHEPck-7&HcB^@AOrXh?a~4X$M0_MkI&D*fUVb; zHwz0hzdy<~u)!iCQp`5U8s?fX`lDLU+S=YcfSo3{sao4Osm#xY;Mla^TED7(8Eqi_Xz)>Aaw6> z+lAnWBKmfJ$)un_sHAM~B^xfBy~w?Djv~mv$Y(f4X_f(KgTNlT0WCqpGHm3J zMhNgSlT1IfnLov{_!10|woZhFU{a;t4+D4)oODTXdR<>^*X^YhR6@#{Z$(WIpp9Ts z6#<-eg@sX@6XH_iKdI?>Ja1Xup=inCsudKOqoN;1h9&BlprP~u+(sc*BK=*4=PV=i z;^MDr`ZUie6%`dS(xNy+=ghxhcr0=Jk`T_%lbV+THPq_C3k!F9XD9N|S{t`$yXe^A z3_7@a+D08PF=QWXb#I2l!vh)=VJErooY(;pm_Rp4G!jggj(bUcV{?r5mtqY-9t9e> z)nxJ71`+I0q^&9TLYvCg0f1!>R>BFT0H6Y=eIL8L4TTy3Gf~FcjElY1rbAyVqt>}H zmTtOYTU*=R-DBmzu2pA59cd?#OyE!y{wVM07I(Z}v)-4Z^+MP#m+Q6X(+1i?e`Di= zJV|Ke95A5z&+Y*rq-2F^<7u|rU9t?r%*>C`v@0(7ydItUo7lB_Mgy7i0D6)DRfyWM zTStw-(PulW<2mK0?%+B53h;LhkMC_;g(s^NE#46Gr++3MG+=#+(Nd7kudD=$saeDh>F&#)zDDq2dr#H zAjF0FBTpNI8V$~@AIq$fQ9C(7pY1D`5nfx8%4ZBIilV>vX3~=mW%wfneFi(^2&y9# zNFm}+K6fKIy|yodej`d0Tz^Kr<2O~nqF0%5A0dU2fZBpmsx`f*<~X3}=jmvwaqVJ- zgEBQb`UxP5@R6|bo!@(pC$mSJ*`Y@?=WtQ*UqR{~zJ!E_U1*_~N|Z)kwSt2O0dU*8 zcN!TaBWPehL-%A9zvX?4KT#GJdwrAr43B__#r9Ff6HAcg!_60ikIYmyA~<3ac`O07 zuv6d>UQ|Bh#c!)kN3R>WK~et$IOPw+moI61ktW^s6Tc(B_I3c0bN6Cii;c$PFi zZ>mTxU0+w{Vm1fnGo9T-2t}-$|NL}6C-Sze3 z+uFcu*n)uKLFI*65akV$^jy}~x7s`rm?ToBCN{udtw-w*35PD%J3_6+f}5ZWdq3PK zGrV=G^C}7)zxIm8Q);YM8|_bKh%A>Xy$?QutO>@5s!KYbo>n`qfmS+Q9+?_Vmuy$W zSt0=Gy@doW{}`*!l2yMzf>Htn94%;GB!92N#}@=f`AH`tPL@6LmcWA^+7@eSIXyQS z2*+3i+zs#PTCG1Vl3!+T9b`ACMZ6?T{w!>I4(AwhiJF>^=9ip@kfOAt%Rhr2J`vxb3x5kz%54c=wmJ1G@0O!?B~QJ63Yh`H zV%hJ41qqs2hlmKfci%x;$7mT&JyMBCKtqcs+82CjcA=)sq$+-PS}`bR!_Q^07+bH$@KWpcJz zF??4PIYQ8;%iiYovP*LOBdY@en<@WJN=QIOCAl(bTwU`AbWhe~vh=yFP6t?zWy&;t zCZDQ$TE}R9b+KqR9BeG1+T&^{!uKS8N`mp2n!4^1oru@RK)3J}gPNkEkYpNR0#c2{+ z%VNjR7e*#0CBYL9mTo0TF8;^TN7uuR*LN2}c_&PN1Al&Qj`UGc8s3?yP;L`sZf>r< zof8rInlGr+<4{@#4lIv>p8k6Y?L@t$*DZt){$GbzhnA++z2}T!YM6CF@yD|9b=SPYwbOy5 zFeC@lT4|Qs{0Jb^fppNPKNx`u2JA4zt<)>6JC*gKbOgR=&lBuskfkLhNVHGZX6uSW ze4gg;p4czX+5C|R3Yxknlng-k=NKsAy+O_PgyL5B*rS^MD3bGu49;3w0_c6{Jii+L z+aOKCA)VLGMSW?;3S$PFP2aJv6&5E7uaB+xtYm!c^`yjP?M|0iEk2O_c8r=WP%%zd zv%$mqq~P$faA09_BJ3&+7WYFGej9m6_y-Jn@7AB}%??1)4Pi|(SeyuiT1;x5rS9&K zqyXN24fPL?n}42F?eFS-@6$uq&t_)Z7J)d1z~5W{#RBl)e<`1cJX~$aQ zn8ig3-@+OF$<;f8!#ny4r=W+mh`gWF_L3zhExO{gOMi&XrgL&gjqCv%%%;5Q!Wg<7 z?+z=O(QS8$E@#M}!fnLkOg-(rgLP ztw^Q?moWK!djw2iNf`-$ndRt=mH<94J>StF>*1N1FsD!@Xy~Kb2nhf#KU-!f zHfR6hd@(~r%7Qx8zgQxhQ>FfX9iC9K!{#}q6<5Lk0xH|yZ5O=LXuY1?S>(ITE4SU& z-h;|Bq9t6+^xJu0b(V%0Aci#x!2pT+p`oE3fa!7h1}_&00}IP)y$VBi5Oll0Th40P zy)~)n3IYN`uiG}%9myu*rX3P?xm2~D<>@LVCH4Na`=x=ci-C)$DTI5q(gsVtgh8)! z(@xd9Rz5v{udHFQw$nQ?_IYxPveOa>iO>%#qVk*%`rq7)mda~g9uUx%KPV;88F;~H z`xTHv&x4AJ#_`B*<{|L&^_7uNhX4!D`DlX!(c3~j$0fKP1Z)W~hF6r`-97MD9XyajJ6-ty2Iea?yM(Fy@n;C>2xgcmX(eJ8K;I1mZHPW7H>lgwzX1}^w`K%dNLji{!vUe2hnyInOdNX1 zPg%K)FyjD2s;o-Iqi9LFkeW&7bJ=@H zD4CAQVmCImY%pBbxyc?ccn`p5F?kp{2Y@fWFC!}}BX!O+0!z6z_&heq=3j`&Fj)z# zF;$~Axo&PA#zrRTshGA}J;_zU7*LxGOD|w{uA}Dpjj3-*IVa zRDtsE0PJ6BQ9(hWGbe~#jhRm1;{MJP$L(SJ$jL5C}s{?FgZd31Y3%7M?4#4^;Vz3;ZcOxOEY#6XPYHis7 z{PN65u6aHoeT(z6y?Ac&^ZN9!i{}lZx$(w?D?G+PkH%jj;8yQ#_)14HdyK*1 zI9X`JnW=;{xBZ}`2xz)|zA!hm+4l7~<7QsxkIi?Mg1ifinwwLgL7#4Qe;y674&?_b z3Xf#7wCH#k_u18o!kx4IY!>pu=(_=NSSLwI>3Gfo^reOKmZ2PvNA-FJg?w&$)BC2? z{xb*`QtL~TBfZCLU)O{-tI(2ABlrQ?u-cV%BoG0DkRYYub-e+rDA*Pys?RYKWE!zL zcGPQ2D#ZX^P_0YQBp~VTF^U2Irj&g+=%i01}f`CyblQriFdvbCzSF{bco2nI?r!fA@Ib^L;}!g22$&VDLIOTObM! z2IlupBKq-6^<*-cF2n=kaTvDSA0~>FG-PHtX+_I&;`ylX2YGPNxbKob7-~1GM{o8C zk84+~)}neefqW`;D${P_+qe_k7joJwa)q9pH2_=_Z?qGklb8FWAU4u?~74NWCOKe zf4$rpORXdji+}~mn~#RT1``iZ1LbwQ9L@pcSpfYkRJ@6mRVSdy0r2|vYx2s<+U;&g zCxy%=lg&+ar<)ZN8^1gr#A8);GFWZx?ab<}$B)|X(XF;R4|~18l=;M0Vq#(dviv)@ z(>B-ZtA)k~sT8{BgO`EkFo00_1w=!C7)98ZrtcHd>HF8O1%Lu@-Sq&s)FOr!4?t7< z%yi8F`Ng-z%G=LVcz+2Zu~55>+jT$RSwpLN@lg4!6(TL$@UAs|v%vinNCQ>oSV;BK zB(!=#Kb`pvpQ2fYXFs6GZd zaGDGNnI(%$N(2NzI1{tvhlMaZ_t}-Y5Mdu48lPi2@0fOH(8gf%0#5 z=9UiQQARu5gq)g4V{{n{+EumX3DCeSpOV-YPT%0KO%C@%t}3gBambtZ!!O*A(ij5x zL|`K$tSf(yx~Ft`I&u2G{%BJ$U0Rr($qrH>V}V^P8SP}@RLPX z;1Pf?5hrp3$iDXHli;+nye2=Yc7SfomzLOirFZl-GG*CzV=m9TBV(D)KAV8k;5WbC zOs{uGC<4x(q%80Kqf1lz4Pv$JZa-G1Y5Yy{7y?T}L)x)_yftzz9o*djNw!X_DZjU7 zyVtJ~&6y^>YLe;-&|AyNGc-rj=^(qyjjrpyBAUa)Lp-iV0zR9EN)Fg|rz^L|Irmm1 z?qtgdwWM!YkhGhxjk&JgU2VSYH>dV2!c$Kk-~5}Ii)Wy z{~kktbQ8Jl%pl!4l8ODe#JMXf8NdQN!p9w!)#EmY{;W$=buM-RAGAyO%g%pmzZI1Nj#@fM?0moo$T)yQ96>@GVzu`7xQX z22)?_empDi+0JHdARQ(OAVrU-)E^bJ6;raODQk?ZdXzn^VoLjE!t9Q4Yt|T4WE2E{ ziz)vW)KdD@mfR~YH7&1H>HAKBiG2TfzuDmGtDrE~)zMP*6Q?;}4lzE5I5Zl!$*wm* zow)?12OnTh^58r(fd2>!J*j)cnQblI8L&V=N>Yr)lX50@0Kdgk@A8=jEEFOe%a2@J zksr5z&FG@81K43n>=3dx0SqEQ$R+fl^&_Wqqe>BHMid&r8y(aX_6qLSz?E95)@-Aa z9{<8V=?D0%+FDyzriZ13w6plT(|Q*~w9Ua0T~06Aw&6+IO zD|*m`nUD|VB%W2kR%n~&>(j|x%(;TOdfPp7tbIY2uqt$e!<}*>s&I~scs{ArXl3>J zqSoBC;$sDahpA`f5q7K?R9AjF2sKe}gj&8o<=8kHMvAJ6a(I2&$jWR1?A<*;?Q}=Q zRPWwUJirDO3=R$s(EpYwlx471euFFbjg3(=!W7v9PTzPHsBRTrQ2QJtD%itO76d~5 zYl{jjA|R?^0Z;@1q)-GrL<56m|Cj`{Pv4V0<9p!kshv+hs0O~1f*UB1|FL}N!c9@4 z4!u7UK)~bWmE|!4s@bAQjIeP1imQ(J#6Ni@1>x|dIM3S*9y-@bIf~2{2f2 zqT7!m!0#e&GCX~-EC?F(Rd$=jVA9~`&=JKBh7p!_q~yFJGZ=rr1qlV~9q)erh7Yp^ zx^uA-JiErPFj7j*IQgET8Uow_U=tU5EeH}kU;|;oe}V`26ooZJo72nd3x$Pvb8dqz zJn+nd;UI3Q+K!GY?)n=Fp$h%^k-Bb_7FVj7RNh!HN#<4Z=1PV4DQil{MkiGj6iB~3 z2vqOc#y1TKBPVY5NMNWaBv^t=hl>L|GG)@;bb2|9L7bpqw?KXTAi&BXM zst=mOqo|^4mOTkE4zZ+^iouf25_GLphN&t!(KC1!TG)tN@T4k5C637u4*kDa05uVA zISs208EI-H9ogcdQhmK6O-1*5NvW?GHBANJ$9G2p>bx;=|36*mTomrX0osXK8Jh`oV5Xpo zn2_uJon@5Q7s$J$#5 zMcKB0<0{=PBHay2h;&MKN`rKlbT5racXx+$gCGjh-O}Bi3%;k%{oMESjX&Psyz`sc zopDxn_uAd-I?v;dY&o?+R8l~{d@1JOO>!^Jrz^^V522oGhAS6!N8>c9{07O5 zC7RBu$!+5~HZ+uy2mXF3JzYHXPflmZnjy%0rP8-S-*UiTiXjYA$u%fww zaDsHMsD|X#?Tq-yYCsJ6osbd&hbcat!xk8G|Elo`MWB0eAu86hQ}sTcKsS{&r(}%R zBRs19$sxG@AN@rou_Tk=iACi7pie@gamWNYc3x33R^`XL7gv-pup)#sQx|NOi*mYi z6Rd{prZg9r42lvnb1JsDqdS4~`+dkB@UH8GSP*cVYz~U*+Bj$3mn!Ds*LHU8&Q$iXT1 zUta+;5L~(c?KLrl_;^@S{ywh1UV7s=SXo0u;@^(&zm{0UGuHr_sQ=3W{Xe|@|N0D1 zPT}WRSm+s<8LNuRD=R9fqnDpDBrq^jlhZQhk+CxNyevGZLZw+Fee%~m%RhAY??@A0 z+IWCQuIM0U1CrVqRS0_a!RqMmr$v2Ei}v#_a2V-kw!LHAhiR zDn`i1Ni`nV&9ed7akk>7-g7;+*RNw@Vh992;QB-74JaO;{&oL5?dEL%1SUvim4W<;Mi)AAP$%(d zg_^Q*>MKJC8OreRumJ*ZV<+2xj``oGFa)X${aVlqQ58vjvC92v$BKS15>qFWe}M}mTP9vKM|ESY$N_;v&&&o>r);=2(#UAef z6K(ZZ$ccBz2)1CbQBmd14Lp`$5-4}2WrE&`tlW>nNQ_j?ec7JfEps@P>KWOTp!(q8 z@H4!g7g(IbNWVJGXe8M!()zH3{Ve(Ub6123HbgAF-OXy~N4qC_rq3acBvj`W*1Mb~ zF=MC4v%?|YC``d5(wNY%!``%_-zdUJg+5w$7aoR$X2~cy?1qd+i7>gjcLsS4JOX4a z;O{FsUkUn^APDl7KYize^sFV8_(Is(%V(==H(?Vc78dKhk*L|K8Kecb?4a1PN~0D=KcPO|q@}ZI)9PPjy=RRSY-i zYqp{dGa3vGafinF8H(+qL*`qToxsEmMs9$L z4tH%E5=MtyeHw<9m7Dga8p}8*H#gUW{a)!C0tig`Yw__S6x60mUr0<|j4d|73}Bh8 z!lt33$>_BIxnJ)pB9i<0^JQkn0#WL0ToSNsg5T-+#Zh~G!ql|f{;H*%+|X%U5unE2 zz3Z*Bob%c|D*#O*_&v26_c=b?jCObDo}7dV`5v!ekcUKNBBFW}m6vaD*nb7&-`9E! z@|?5=>kt`xnR^$T&^xz_o1e{}k|-$iY|1MN6*Bm;ef8fGkeoVPFFmZTl3EeeuQ1v- zn|#{B!Xov&c6~Nww|&KIU^YL<&8qWj8R2f+YGesc@n2qEx@Bc%WSk$Tstu*_T+A1ujK-`34z@Uf>)0_A~m6WT)SC^djcymK-pj8DuVYY`ZxjXe-$L?t<}X zaJD`oy;-#pvL{yRHJEhXAFnKF=X776z|RE11mVcQ>F6xNr=qLtbl)Lk?v|fk9?_nm z1~9^ce5!Ahx%}-9FX|)qQd0}j8vt^Lke1d!3W+REfKx$obU)HmRb_LT%=UB50aRmI z30+ZsflA5Ro9Qk7mbzB&5jfR+ZPyH5*N+SVL0Hx=+06xb{o1N?>mp9J`?RWRh zEsD*yHy&hjP8OsjrQHv46!r9wZqxDht~T74#F!Y%+>Rc31jwZ#M3mIki2xm*T8g~k zzk)$(wQ~W5bYGU?_t4U`w%mhsp2^8kn+oPWNh?JPh`G;p*F;T?BMxN%x{dbyd~#BP z2A}s)N^&~#oUFLGN3sg3Gbf&8>dI&oim5`N_6yV>rOvJDtZ8Ubv(3jFU%I^8^zH%C zRZ>$S9A<^^AcoPDV&z59{T%gyZ$bezF=my(r=7a*VGEj6dEj7s}Ec2By&)%@0N zLbuA~7kEpjdb+&x@6$|7H;;I|OlK0+qU{Y<`+g1pV%1`zl>Vk!gcS=;Aba zwn<9GOsMmj@!KX~1px6E4Zg?2G&xMc+42Z}BUFgO<9;#B_UhE*Ym255)8w*i>u{ zzG$=`rotSERaX9a-WG<~Ehlbz75<$ae<({D3&-i&P4w0J=hXC6fnt4EMWodNUeD78 zBSwVKZ%9VLcQ!)uROBD{2L2EWMwVZtu2iF93B=G8d1W9B~`iP0UPi%9Qmx%DD3V|jx3NE z8!J~*LgqnK64sq$&36}4vcOg8XMEs;O4xllSUJq@ z4zmS8vTnT=7Ytk;y1VDY8PD!5opH%$BqjK3@RY#d&$K~~FalzFfyu)vt5&NH=3?5schSQU4i|(U6RbZSru8GR2Mt2%nf^q8FB^Ig_ zy5H3k!$t8+TTflSXeKZ?NR;cbXH1lI2RlAaCfoPY=gq5s-Vz2^ox?0)@(63W~EFD zr`Mkn#P$IH7KDhL-}HkuY+|eP;bM^jt0L0GID0Cmb2d zf`M#eWPmj~F*aSmorA!qHl@{XvEg12eON+`!Is3G)U{pCs{o9V*%< z>@|@*oKsLK<5{^92|CrgUPrDdtTl>2#8J?Z6lA4?pn_iZq-P1_H`E_SY>9&nR=F^9RcSv9 z?%Qc{iDb@yUv}2&Y>||jiKHnXN;yQ7Y=YP(m%3+ZVnRWkdz~iq8ab%q_R&SiKv)w6 z?NfP$iQn*2hmFjcSK723`I3+;`>RoU7DE~eI$P}-R?5b=z}Lk{$7K9U03~m${KIqc z57}aSsW6wysYl%g$M#=5-18+e|i5l_nPlAE8e3bgDXyNtb1j-0i6 z24G8c#wP4Z9Dno;EeKb}#FCUUfya;btYjSM5p9 zFU&8N%v4e@Eh1_c$82QFQY7Xr)leRyg)J@OhNd(Uj%X@>Qkf*(i3ue>iU`*Wc1dL(6$zRadV2q8X7!l z8DDt`NdV>}3qSgc#V0*j^7e@&wo%`kL`f28(vvshEJuejr_Og_Y$OcK98XYDX*HUQ zKm}x9uy0(ZH4cyHL4K!kRuc&1le%YeVX?D0>3OtE$w~)QKZi6=-Z@1kJe(D(s;O_| z<3ddPT^8s2%MHWcEB$0lN{WxK))%)ZJfK!rXW%35ywQp1R__Xoj!XM}mT=t79T&R% zeAK>xs^Hmj$YRs^3-O8{kwlV}Y>Ak^iBh6NotdV}b8GgR7xr&%dIk>`SzUeUl{Bjq zOsJjoPOkWS=OSffUKc=X&XBJp{US#3IyN^4M^+?#q~Nfl={YA=xfkPEaPI1fMymwx zb!5xsIohL)eiR?PDiYXlI8YcFd^(o(Pjl!GeV-FOOy-eE-e!vPCN(gYLrGEitu7VA zPVSPerKRI-_Z$%6&MXPsW01_%nRq4*6T@jPeX-bI@cXJgQw8$LOoyTGh7~evSd~h$ z0!k`}bq0Ce*KT~g@1xDKQA+z_p&!=Q`q(XYFTF@XUxD`c<2&u_{JgQT@luP^3`iym z*kser8#E0I(@K5Gq3-)9{*6yxQBjhtTuR%6hrcU2Io{*3pV*NGpEYL8!43-f@tMfj z@&jTBVI%QIJ&<@W7doFC%C~bXz_(+Rl~kINB5Q;uw@>{6G)|_+W$YS`@`< z^%bJaUZ4iY#(G)u1Xb93uOp<2Qs(ye_q!hOcL~5~ZPx^`*KtgRF2m9#@i?2qb?)t@ zA`Dlar1ALwZgaz6U7oCqD2Wq?#3qB_q?H|R7L@StL5S^o>i6i^Z%0JQHB}y(x1N)% zZhS7FF4*u)icO?vrKMzL)c&EAo0yOQvWY}3gfI_WW13x(Z{XLkV^i4UHAQVBmhB(j z{*8I@Ku-#KxlP29;>4_3>VAdAXoThmBbwy(%0cu;TMY;ZG(%{vIB2jTOfz2!*VRFnIQrmEn#XpqjLkxbvKMd#j15Gg}iT3)_4SKC@yISj7omE9v&{z|>hry=bgSEFOo z*!cLaPM*7~w|i#^R;yT~`)KtM5wgmT;WLcK%8Y! z)Y0*-L)6UDGWnPM&U}~>-G;TW9x}?OoH!%~@{9Y-*7j%3{z?P_ppAkl*INyv9^#7DGv{AXFXJF~fmJIc^E|&`s^eQha3;5XP^&o6MOKT;=K8h|$ zPsPP5$VbsXo!Xq0ot|z@V)dQ+V_zJ$N+1Hxc!oSaT{tLP`CYv^&9(xURjEO_DU9pq zX8yqpuH|cQU(?Oah8BFITt`@Oadvio@rx4{T>0*Ton$fc$Ljj((C{z>Dg5!V&6M6+ z{3<~8en!1m)VsxI%IWWA?fcOmVL+3sbA;b6z`ziR86F7xdAJzwBcAbQD@JB4qhZ&# z*Qa3~Jo7!rFjULazk2&Nq0-^VHEeA4_0P=g{5Q;OY>^qr+ps`h6>8>2!9Naj`J4NXeQW#oe&Hg{~#EW?ysEH~Osqj!ge_H@^QFn5py2+tPJ> ze8}k$ydxs011b2h05aGL3fK+1u5zgrju$?Z37Ace>;Aq%uey*+QcKxH%_&~)SOrKU zVskg&l4U%q4faXOfHKOh{fZJp{~q=Z!RJXpPKW$x$g5C$y1S)z4E!~MK1rVWm;U8* zU31*GwDS5-`G4hvUG^%x)|?wme}4L!hP88ad{9g;lDjf`X#OYu0WKnQ!FO`3-FgwG zrWQ{@Clgx{8)gO+5SNNK9|p%*7m?rP{J+*2?mxXsF$}nGu$YR!(S(MIF|lmnkXx2AFsE?=pFnxjTQwP(cA%Tf zR@^c7uBQUMX7}w=?^eCmOFFWhfQY)ffOa)K|F3W>01>jVNa4LAK_LJ3W8MpzOm6Qu z>X&&S-FwASL}P^U08v- z9f_XTJ8s*nDqITgm^hj_9k+eonDwo_qm@evviE<00uA$+K`TTqnAWw;g$_=E)Z4Coq#$FhmM;oHz*}&$#lMYz zR3(f|v^Kf0IEg4fzo41fVGo0itJ<9-@4fNf^Vvu18IWI+;HYbgGl`}$hgvkWaD)R$Hy>*#${TJJvWTd1lR=)Z}nBMa80_+Bz^mVw9&l7r! zl;qG(-oM!oo&Umq2rAOG5sQ?&;uYdSq??-YUyu9Wa5^}9-qN$h?&n9;4FUsxXjV56 zVaZ506`7}`rCsh%q?t1D(P$jMA+W?ew4Nm1CRRu4B;?Y9|xPFHI-@8FuTMDP8ZDH1`3q~;d1=I7o=CoOp+USIl-6dPei@ZjMU3?CAsp?+NPlCqdH z!oMy*0KTb;mKH4uZ6~nUv5hO+TP&~Ep1h!^r{~GglOS(#wKTIc`{|zfu(&FE2kO>8 z`k+pR1GYpZ4Gm4rxwSNfk7+*`wk;A5hN)F}Ax+Y(f)wr=J(*+ua7s zyFo>3K#1LN8mB+;U~%zHbsjv{KPTyOgrtZeVXvvr=tY)+@?;~f;ui1Ok4d0}{%(h3&WF;7p;#buZNzTrkYViqgN5BOIW%)8NTT>Ixj&BD__d46Lz;iy- zuWc6|P7l*Y4dGP9<)36ENk$vBWvz1ygLy2PgXMj1W~XjT?su?Y0F{^>LHs(O)ZEa% zq^=x#v&+ai#d(73VRLxssX!A+X!;=^BMG$7BF+3(^T~kS!eTX zKNSt@BUmw~E#S!VzdjtlyeGq-f1l!wcz=$Ql=>UUON@SN!pn` zH_;2BLrSt;c5;89$##vBcQTC#_|~`cR*_`Re^X4cf}EDtX?c#5lG18x^7XiKEUZi^ zulLd2*>`r_jm;Iscbca*ijvpEHd3xY+{eI3Ka~diRG7S!q2CS~5R7{8-71AkR}wZz zUJ@F|1v%TfzT!`M75=x<;_NWA?xIN(CoO%^Yo{eT#Q#`?_@KN`6QesOIy>bBffsPa zBtMK(F*7?$(f>S1_kv7y)pD?J)#xi}(o5yV;BbHp*Xb%fp<$cTQ;faw66TBRuc#W@ zoOU(lN2*P@#A#3Xi~S#3K%tyetXd7W*qYjNRLGCH1oEK3(bwr;@YW5THjOf?|G4{Z^WaEr`e&(Koas;DY!y^$if$ z@&By*x0Rt(xZz=80JhsEJ@My5MMTE(rU*zVkiwOriwKY8;$(Zp{w5+KlKMSABk0Lk z1|IG|dT(txg9RYTjO6LDNREU=CPGTAjM}84hJOdCIRvB&jCPu2g>+X^z>4{s%UGqlL^gCw=kLBDQHRw z%gfX7ydgnJK5hiz++N!$VSMm#m6MmsQ~r*M_R;;&&Hescly{TIoV6OB2_YkU zW0JsVTtsA87LSFok53K=GzLYtl*|aEk}L^jbZq|OI5t0jGGZ{@_4pfKn-~62hOE42 ziP6b!L@W*F}>czO7*DV?@8Rnvu8B z5+=xuNl8yV-3d!;aM|g3EgI^PgNgbyl_F?)y{}~R#B8r8Ci`x4W8*swRR*7H1;DTm z7aFL<{Ol@(3zToQp65X|(&{X2k4bO3`h+lyM-An@_3mN6u%6NgTWGo)s}eP@HB}g~ zzfhvYr^FGN*pzv38v<7Nnb$LHGnWTThS&ZRS-ER}(s}-Mi#`r17Rd>(i7jk-d67yX zAl_&<0jbJhAzrXQRFeFnjyW(eAnp}jnKQ${C@i7&IDgnn_VOj+u8gEteI`mv^r${) zq+WBr4kVR~16>t5TGU7DsYxLPUN)M@#gI%`4~cAsmoN8PJ#VK+cMqh3rlvScb_rna zooO+O2D&F7&6~vP^z9M-j*8M!S)bPdfsN&$hh?Ip8^2>C923fFhD{z2 z7WMu$8`u+h_;4w6^V%!`sg6=*34hM0k&uRnoj! z&)-25qPw_upjoQFxs{-~zAi&tR+LxfTY&g6&|g}N>2TKj6_?W?vcBr=J7FDQhByS2J8r*DK+RW+JY zObBdXG~&Bs_225XG3Hv2T0A>I;cq!T8SGsZpC4Esl+w$%tUk0~av-GUMfifv=VFC_ z;gQ@I_!rtwG1h8m=ydHOwdD{OHS8|jwpk#wp(=n70|v43W}s84LU|fB|2PQ zZ4?yttuteO{=;1yi6x(t$!`l$#YXe#+|G5S;cPmo94^J@wMq9;=|P#6pxf@q98Qjr z7xQl7J9pdN9T2cyZh-S#a08P3Wn4{y-55~>oz6?Q?`s6c!b95A{)&CA!sPg%egz{o zn!JyHK1L&g@FY4d?FRGlJQ?05;}7}E%|>Z3y~Cg(95Y|DcfMKa(3$vlOTkRd?K|DG zfT05hUZA-OBP~~HXn69Z z_CN1*%WwWwBMMB5ISbz}wfwWLiHT8J1eQJv5`WkH9|h{|6qXttQ$_IrtI6b)QmN(M zQF}?`kU@{xt23GXKhN5*Qr(~{od0k_I3^6CkZ8UDp(8v7|a^~xaVI#{3Q8O7@ zLiBPtdv!_^F%meZ3$^w?l`*b84*{QQaRc|Y0L=tW?M~})JS!2^++5}ywPH+BpKqFa zUvZ^uQzxb1T79mXXNCN_Dyoe+_UxR{jf(a_acN~`aXAAWQ%qcpx@tVF504sW4^mRU zpScH$O1O%)gABg~QW(6Q8w6^|L1CsoUWRd};}M6uC|>mw@qTG~o(7wP=`MOXLO(}V z{Le3jh11Kr@i!Jw()m+QMO#A=nX(aA5lIwhzgxcePdgB5V1QXr+YSq*xr|Qn&JWF= z{Me8uEX+VnKE1=)M=fQDB~cV_)&tR;YYQrDhVdtZvyqT$~7zXn78!xy&=Ob21913p0`irV>R@r1jjJ8n6X6w$@d}+xzmFkqb zI3dh2pow;_=QQUy4L?I(qdns*PE|!pFsA<$4mF zUG~>kGFBo1G_8g{?XZs|P9;17`Z0e>x|fLNK?tO3Qq6t6HcFi%hAgph z&_5G?MD%e?iTG2Nqvh)5MBiRlDqN1|%(A}2gted=2<~6JG)ye|d~fd+d@YxIRNGx_ zxd7(Q!BfZ=F!T*1CMMtr!fpGdvJxcP*YzB3VEQADq+ECZ+UwZJzY-rpguPX{`Dw!T zha%w!y$kHNG`(kf6JS{SInDgfL)dg8MiW+DikiQY34#iK8d}%Z1(W-ep#gX+R{pnC ztwyf0)tsp=ClH`RuwvN-O?zvG?xeNA?;;ExWcwHH^-|1Rggj%eNUqQL{eIq`k&ok& z)@a|?*^=+;L3)}v9g{+oX_^UG30?+WC>+Go7(X-;7iDTaw31W$vWqyH>gXXaSOdiA z%#8f=zp#+AGUX_!#(;rOHhX8Cye<~u9r$uS!-gx;Np=ZU*$iq#?QVXzu5CiK#s91%$T+b{nk1lEX|T3`S{qRHt!o`$)f!F#UB=3VV^>Ry8zS z4K|~!)5zCbjJL@|3GBbIjtr0VKaWuwyBgBs>MIHQl$6zKANEfX|F6YngZ9k(Ij*3i zkK_K;FOV7yI(`i`HM_Y6qr;ZZu6DY$HFbz6=wy$$4afX*jb=rr=x+?4%rIGulmqyNY)1DxmY5-P^*# z<)X94fc61on6$W9%H&`gVkyyx!`IY|cia6=lt6*l4GKDW>MAMG^Z6p5Mnnhly4-15 zYQeVwbi`>dnhs+Pg?FI3_9La^r=;tJ(GxnJ40OYg^wA;-iBNyii%2MB10UCB(Py?# z2!HT9waIiMjVSz8Y;?A86Up0Fi_)_0TVRHR;Xed;4lq+VWYQAMR<$PXgTa?JcebohnIHf}x=iznU$$Q>bBY!w+#62%}}oagQ;M zS??K=tRN)bw?Dq!1RB@K(xmV@wZ-T60AIYR0%2K2!LYzFbTUAx*M4sqCe!nw;k-rd zd~!;4#p{Fe{JI${NV@FXHHL>DY%H0OI{ae3Cn&0 zy1t{lXI9V7mcc-Vt|!f>*;ko+nzN@F1=eDj%@gJu*Nw9jIQq2e17-{kMsVwEvFKh|^RP+ec4ot>g-b=bG0 zr=#k4Krc2y%I~8tH%8qWh+lEGUbgH`?y_Gxum8BW!V z{8ZNq*_aKAF9?XQ$uB0Ln(KydpE}MDKNJDzu%2TI(Z^jcT4V00^WrR^t9uirC@d_j zpwJ|<)yoVd(B`-BI~-ujmuO*nIq9mqETw#EG?gPjtD)rZ;nVNr_t-o8!HEI~r#VVE zox;BGxwIw=>T-r;pP6yHqXR&QqUv(sN-<>|hO~TN;(e6Pjq8+-1A|X4 z!k^6`S}^gL68CENm(|M3>hH?sNf3k%zzjJwG=6?vd6ZXQ_Yc>BP?i%1$0+(7(5L7k zt3W?cQNhGjsZU5q$Yl!M&}(mTS_0gsNRj`80ugU~bo8w23TE##GqHB#2Yv6gvjb7d z9j7FT(VH|*v!{JQ5NLzd$RiX20rvV&VM^kWDfV{37 zmew94D^N}>{8v$Hn;x8B)5~#Z6Sk6@usY1wAO5A-5}p z>;%aR7&E((CM4j7VC=&Ds`$>>*kHFn!Bv$lF>{5<9Zhk-G<2PF;&XX0Ex^V@q6YzX zkf30R#3T)n&@bc#dFlwqdytO_Z?}fwA;F^WJK8S8%QhL^Utb>~K9~n}5V8$S+FUPs zQF$J%n>MQn5~`&_2La-7NR&oPQ&98nxd$4t$2ul=eh^5W{=zIO9t1TovH+ve{9VlIiHeKLsCzicqikWbfzyGi^Ec+Hx7j7d=O;_HlrZg+7fi}@M10w_nxju)?mnV; zkUmd}Ha7i$_^vX3W81aOidLz}eR>KD=>J7i>`&((>Modyd61?Lw9MZ{7jVV@%-*j) zJl}E`)-%assw(z7__M{4W7yr8Jw4@rV#ihANJC2tS^w2q7t|8wCB6QH8+8qhAqk97 z!}3MWrKRRbCuwdA)KU&NA&^dfY;O%cL!{%*`4M)53-kRQ7~k_3^cF1`e_Sh(QxJ3u zfCm7-UJ<{Y>`=J|)_@K)#Ek|ci>D0aFF>f%`B}<2+QU+Z^UEG07%q19!?B055^6GZ z@ptbOGT4w(P3&j<9=#u+%Z^$nSMC$F5?tn3B6fy7C*&f~t-VLbi@w#f!62cUIGP9$ z=RiBcWi=10D)QlJ^Tb_==7Cs1ZLOZ#Ztaya`TD&Rv2zvN-?Zv1*%v;$*iS zPqBBj=6RMQQ zFd(Dp<752TH-ts+8&q4^YFTx051=>)e)qrP%$u#dR2%f{@4IT3e({#;@WH4?fvCVM zY{4fjY9M0$o6y5J+=NhFfB!IyE=K$iNDTlJ{nWtL7Ekk{G3(0Nl~~zKD60}7Qtz$% z5qz;T*!}lA4s5f4eAnCa1c~kg+4a{HD6|_SI)d=j9KeliA1&F#UrR=F(FTb&>_5k{)n%HL=lESQ}f~nUI1qGYg0wYG1b-jO z*+AL%@86@Q_%oVAK4i)&?T`mFlK<}Omv$Tkb#-Y~n!I z@qHu!&hO9|5i!3#70$`v<*;U1h=LDvrpv3Vzma{3{3-O=FI#T%LL>xD4YR zi#S^0E{mDM+e(-sVYHB9c>gpT(i)ccN23jJl69k=_+uJ_b3y}ey6iw6Pr#is{#t6Z z1Q#xyZkJ$QFvb(4_ikbSP}mh>1SGvA&LL)6+L6V{P;aE*=OC{+=MnBa`|(%K0gunt z%Xqs3wj4c*ymcWR_?Y?X0vKb4v;2T|JfO~YB@G!TEKLBDqt5u2`B?kPtUX+8FiIyn zD7SOaA*}|OF*hW}+ZzCxAOw+PYYTpTRG)eU;m6{zOC_}l&#${y!DKrxC8gJ@bh(0k zqeA$WUVp)98zY~~fLZ3rur;;l6<{}nzL%dt{uB;e0aCR!vDoCvv1_qo>yO$hriQjx zn=B^dqZL-$!1jaEZz?QoIPiREY7(}gQ<$f=h9juU7!12XVW$LPcluoP)Q2jneK;vA_cP}aUf;y#R_68AuUwjQ}N&^-bq`+7nxwvlL$Ec#wA9`TWjkM zObH`zK2L(AmpAHTf?&t^glw5_76=~dqi^BKkp?$p#iO~|*lLAc$bTi>v5|kG0($nA zQL-M)@`oD$<`2rD0q++vw>unkw50&1nQ35h)^C74o2TC97ZWuz43DZS3E#xj7{&JE z3xb`PxUuAk(|$(Hr%A2uGw*aibMsc!T{vw-KT7>4m>XN`H(b!W5(@$w;xwG{=bfub z#2H^TS{o~+CH)XgJJFy|!uJ@uWQw#oYANH8K9)hcKXf>}z$4aI)=Er{mwv_WQu0Er zyeU7PaSu_Q!A`67)oXfYuFfYly`X9Z=9-N~vvA_)!sOJe-sv=Sqy6EQm zIrOuF^rl?X%BVtid5rcvr=98cI{wCFC&KQtWmz}~rKbmFsH+3g&rx@n+KPGt@+V6n z&$Lnp-+2K}6!V=y_E?X_+FCRb8M*%o;)5k-6d5AW>%b1h?{nTp9!q{QZMe?RMfoHx zQ~}RgQi{m<$>-%sq~D_Wm#t1AYf)3OkvM503;1UDgHZprZU4OcH}>3!?N*rD0BV3UB{?sn97pCeZzq0tlyiz#elGu+&-fbzoV!mo}QVq{9tu^5u`Ce^QLV~@|lNs zz$C2L$60PgE$LFbs^NS(@zs>q5{6sErtSz9?Ka<(=@?dB*N1U1A3#`LUJxUXN9^lSticCQsZ%D92i^t7Z$tTTxDR!CL`)Y3##Sdqjm;_!^b21O~ z9uuR!5kjXbdbC+^O1JsLu>nGAeP61hSw2Ffq^yimtZ<1d6|QOa374<;%lP<1EiNbb zRk(GuQB}V;s0&z1xs{P{fAJA#+h^W^-T0M9WM2sg3H>#dgbnw%(1uwQj6ST-enPmV zpru8CkXZ~54B)K47bq_&A*ZG%AUGA)N$Ki;5%&5iwhOnmg0`ZwD;PE>7UD5d=o zKPmC>Hn2SeJ?(2#u984J$aimGyNPdL5Tg={5Yj5LfVZcAda-6BMK%OO zAVhS2q}>9{U?}elBszIyu)n^x+HK|FjZ;4zM87}wd>wHbN-P5Fuq*Cu z$muB|ap2s@YxG~LNb}nxnus0~`$1>*ipb5xKVEQ5s;weaA;FS%nu1~h){ea;Gm<=iBWWGh21*>)6d=6duxfY zsP_!OeD5^A$Upcs;+glYfJ_vByWZh^ZD--uc?*shn1OTStGA2Z76IeVX_zKfK0K*^$lS z>iRdd-UQ52snYG#97z4x+9Mt8q`gJjPf*$K3@^h zmr_6+A3x~@q4!7?f(R+ed_64V0anZ+ulq0elk(yw*wk9!DjfXzGeGi*9Kr=Yi&fA& z>J3>AM{l$)Y|cJ6zp+b@Ne^Oj48WeVkAL#Cg>YW$y|Po%>$Gu1sz-`LS%$Bl!aa`hXN8WKqjOd`x!HyaUqK#TNw zZwd*lw*c3$o|2}NwCQ*1g2rRP^$3a+OJ&EGT{?QI&L^`$Vu>ky7`tFn0ixCmZU+p$ ztoYa;E>}2Km#*qABx>oU<@sMDh%(;>4rl5My$a|ed+&)Z66%(Rj+$gA;I(Yc~W5E&+mDa1X)V-6bJ73BfhEySuvu4=%yo65QS0U4p~e6-Fx5nTGs+z?3|uZt6*%^h7%;}yV0hI@yV$HMyj`zjb1DR_W3q< zA0yK1_Vy?iw#R}`Yd zZu^nh9>)Ktf>JEj#)^ZJxIn$*6$uYD`Qp;A=xbSQ{<&TdXbZb9bYP}di|wBI+Pe-> z{p69rv`0m|{;R>t-Mb#e$ct@;<KIc}L7p7xpURtIgUmG~50{s;f6>-oL za!P(M^su%>P_!U9GTr^zJ2>lz5pYLxzS@Bm#y#lU1S#9^N_EY0bhH(nR(AY=!0F6Y zTkw0ww9hBAOcC;`Z$)qZSo#204pL7j6#v$%GPT^Re$|#Cd7a7t?C)kE{~9%RJLtB~ z_5s2uDyP1(upui;NYQf{R|F(?e>?591g!4>khS!=4Q|6as{*PC;qnw=Z)!Kb^zQ;^3)8t>U;-0;{6pWp z8wr?NjSq9>V_7KFM@WV$0i+3#+i|U?t}Z34Rb5yajM1dK!bM8^``4HZ$Ru31DzCjo z{bT&QC58oeut%WQn|!LAX=HlVZsliQ15JUP9Hg^^q@=g@&Gip)AlYkQMaq9%9M-IZ zzOvulDJaUeJ6i~w9sgBONOjC-WiS+4@h`^G#_(6+o|>{a`alwgn}D|~pli#kN(%~x zpNF`Ekr?vF&d8}Wv|l#}hxeoO7J*iZ1tH}-V|chb-Xa}$Oz6z$K7h3@Ohr6KOl&nh zg9h14o}np#EgO1qMZgCt)8BoZGwK}?G!1n8H1g!IA20l-f%bFcf(Yb6?pJ9f)J$9O z^4YF|3O=F;EELp22CLn`=03_N<*-;1Q2-h&p_2g=Q{;>~*V8>WrozOb1oKgW(Ei>* ze!$606y$*HCwAs@+WPi*rll2LMkO%8G@U`%2;0GKQVN^kQ})5qUp$>pZvd(n|Z_QkAvPg_;8*gii}fWm)R)BW#B^_m+V3%6sF{OhHCE}821p`qza`rNt&Uk$4Ypd! zX`dL+%#j*9=07P2e(4R#@SJ!E7<(SVJV05*VKl_xV`p1x}st{2R;r zWjnoQv<{MHMU8$yqI}j@81;Q$Rdm(z@m+CaG5*~@|MU=GRg(g`M{mWyWqy5unW8&5 zznLn~C3(k2ukG|yi^I^AlREm6^o^c4GFfB>bf`%v2-03sC@^0o*SC=3Hsxt*QLq(I zblSNVrRvM<@m8{!D0jbX*aA&Aoic`lPUJ&SxxVrzJ6dkspVWwWQ#SYO{?U@)dr8S? zWzr%kmP3nE%Tm4!4nJbwJzi~Ed#wVo?fzJJGXVtmt7y8fZu%+blRhsqVg;RS(m)*7 zno|s;R^##d6LPRxAS%a(Mp87ab9Qenq`yq&rxdntP&b?j{QfZH#a)DsKt%HO<#p$K%;gn<>2JT6VnEKgLV;ys`xob<^-CFUe_W*WzC)(R)+4 z8q{G#MZ=?&yA)LK`SxRH@i}bC82COfAEo(;`lV}^O+DSAoO*PO@7uY%3)V8E1?fO0 zL(x-lEUd@1dN!q*${wZy?yRWF1sixYhiZ%IL%I5 z8JLx>4GEE+jWL3U58=4_@|63$ZI)K)_05kMnA6#&jm{rB4ut%Jd6@4N{tC~Z=RVKV zA8Dls1uDT@m3Oep<`ogW7ejwucRA=EBr5K+o8j<;)>~fa<_o5A*%Ln!4J20)zvsH` zit>ro5&H#13JGU-65S}dL1~*_X{N9nSe-vS9In5mug;lh32Vh&f4KSk8E*d^K=CUc z`MsTxN#UG&=?D7q|Gqhpzmr|U`mx|DDt2PPqgR=5&!aD6$s&b46E&A*8f(IrE03-l zuOWau2KE#u!%qk|?7!RFkvcKXAJL@)nJHUCcZe(Q5B>RRkT=08u1E_QVa6}2kg>Sc z6}V^KC*T*+20lP!z**yRDGm4VP*SRj-1+#2zqp&_iQM_V3{4{tk9 zuq5KP^E+lFCFSO0x>;Js>SBc3l2N>Nv)Ot|FjVBjP2r+USrfd zJnuw3Y5ZK;ReQ=ZhPR-0;Yc}3MYB6Oh!S2t$6Q{1_Vlj&+t#7h$vsI%(O)g!eR|-u zsSkx5Rlg#<)IJwbY;&ck)%OSVB^rgy;|6`h?g%1(U?2^CQ zn2?}UQES%&pJuC*%Xs{uzP|o3q#NtRwQyQ}a}`snXlb&KU2<_aWuIZ3{aNZBdn~vrg#i1}?6&t! z1KVqrxvcQ@5BjlzL_UixB+U2$^n34~d#5_nEeKmCFsNRGw#B`jYFBKSA7dAATUEQ} ziF_OL-{{jHvQSr%O@C4KC@sPgH{Um$WTIns9;_1njKkFT9)58EpZy{=o0$5yzD@T0 zx9tdR&fFW>pY(6+Qb)#{%+0mv7wi}Z2wdw7+pM`|nae+lPh4{FcFOf1jATw)anw() zxRo&yTs3p%A5!(e{j=LF0w>HrM1FQht;>uZ?G2xrQom1^uNIfEGjld~r#|}N3u2eU zf_b`SQcOyP>uW#8(}b7+{fWM#avF@9hn{N%J zukLTRx*R`(KJlhB78?HxRPyE~ZFciHUmkpJXR=eh73UGg%{d2O=9fB7cc@R40Jdso zKEPdVDeI~#C6##Y)?mLok>$jECIc#TK}4PM{YhO{azCE*8W2{odXva9;lmmlcuJ^3 z&c7o0@U5Li2NrV>K!+vI;no_pMyP%BLa+=9Q3SNNmvWS|Ub zDKlM0uwfOphw?_eqT%ZioL9P-7tHY~?YI5?d2Di+vWM`>T4gn zqjnvp?uJ{D+2n7QB^mn~*iTJmEAGxxml+S?Xb0XT|w)u0P>2R!- z!By?;$y8|;&my0FeIP$sjRF*!RLATMa1rd zU0M2~co@D#X4&t{Ow!+S>6{L$J>T5`=k0i`UO8o|B)&|&%A~sz`rN>$+L(FUa}bLm zLV%v0mUh0$E}-mb9wZom0Q%BTHJ`*aLi(#8)_;JF3|Rzk%zz_eUPK|iOwGXH-`ebKoAJ)Qn3%hXvuX)(JTukl=ss7EQqFv-&SGyPNVk1_ z|I)X290qyEVQuHT*v3E}vaIu!!p(OhnHqFxddKcJUp;S(0Mn;dP@15!C zW&M5q4R(i>7K1dHn3#f5bX10K-n^M(HJ{A25kI-{3sG(RF-jUxrd^+kn##N?>jZdt zxwO-KqGEHOG_H0hZT4b=RQ6Ctw`Q8;?{XOOU5zhl?8SczOULmfC1z02lJMqEu4p~P zd(TXqjTFRo48&&1=;>?y35$5kW3aGTSI~Jq4RoAe{ZfWX81nfYqILfBFGL1suaAFE^e@mTdD@(!q{ian?TH zdGSr@<4V}fq&ziU1Q?%qSxD#frZ{PlVw{O=xi7ktY8|p|Ueiy8-Dx-^FS`${!uuHIF%fOO!hEW$_qXXbTeWyq9s0|; znc@Mjo~n*+q8Rc@h7p&0@Zh|aC>a<<>#BYSJi0KQkcc4k*o(uIRZp_G;qD@JEF>B{ zOkF0LR|TkDI{tz-GTXcO)~z? zUP?ZXka9RdC9ay6t0llmBNDmnRil74isjh;b)<()AH3NWm(%ao^|L?qo_8l#mka&= zQgdH#TO=KcQVEUo3d?A+cZ^0h{?4tz zWb3q7Byf+;ch?5n8%@rGsdwWQZY~VmEO5AKa?90*{6^lHYIQs=$a7w)sS7pqc%~*M zAIpGK3Mb!9K^q1I4_bX-No)S{@&Xy3>t$gUIAK7F+Df5cJx-6dRZq=wzJt8C-d5B! zttIM&fU<;)R62*9n3UAsFFVuKQuO>G&yDuYT1jOC@E%MKQ=#1I_j`^OJ$iKC z38=2&!HIN|q&3?=#5bibtofaT=+5cVWtC4ClPzuQzeA%F5@KRwUl1jyBpuFF8v?Q< zAXUs%I=LAG^)9sZ7rphsWuz0%`%4$RkrKmY5Qb3lsXDK)Fu5ODb*PxVlZC;s<&V2C zVTZU?qXf4nwHjJoYHbM^Qzybwd_czLJMR9z#T?aPLbVu8sR;NwTb3!x7q}LdtQ3lr_e=NXK578MWen> z>&;wZQig+f_G_Rz2woqdz0tH<9VU4F8#R#*QN3rjocx#>Mf8lPqRp>i6sEeE`=V7T7h zG4cstIVO4m-wgtvhP3Lwnwk9s5gc*}uP*i*?d}*N^|l6*qoR@k{}gRQ+Rmfg){Xq((B_$PBtxf3drS@(b#0pNF88l4*poriQ>E}H{b#Y!yJM)_w@;yl+#wyNk*kKk5BQS|f_9>qFqLXdMNs z`yLVnU|v0Aw^-VGV#{=EWIHI*tNhBqto%pe3kY-!H(mv_<-^$9Pt%b7RQ& z;TKHkysV=y)o)s)g#r^B@Bl1$CisXA6z3{ zLUl~txUUfmQ_ULToE2!BpQd{AFy5;wX_zKo)EvCvnj2svEoPNzi{Yi8bN&Tw%Vf?v z4$2{!#nC*=H>!gwNWLN+VJrF7p>x%|hC`O@d3A-h2i0+semHEnd8wt{o4Ke$#<`Z_ zrNe$MPNd)KOIb&$U}o);CJo4X!YxKyh|j&e+$7^Ecssvwbj4K!6V_vMHgjkQN|mN0 zk^0sq=({9i$C(nf#lGE2d^5An1IGmt6eC>Jey*!`XnxdUy8OfSj_%-{T;$b}fBh1? zlSNkH^l+iFf#lJ8gmz}wEv295JAza~xMXAQ&b)Tx42IA-uDhkJ<}wD0{VLR>_X<;R z{efUMy_#zLmmA&+ea-s%Sv*KILLoqIHvj7s%-}L@Jzqd16X>Mq2C(GhL6jLLtsfrn1bZ; z@o=#tgK2ieiHkj_#8{wE-6ZJqzDE(`(-sZ$exj$}%E6~$b^{`(BNxGN1#xH8)x6Tipcy9*E$IDoc<5m*1O$-(Qd9rn zZE%Q-j=n9ip=eJ&wLLjuI^nz~!jNB`mE`y(=AZfcb=KyMMd*h4XTZhcznf!AVCYBD|te4g!q|~@q(yHp+81kFstz+R=j%fj{(p+w=!RQ$obGuz+Bi8~; z1mi!6mVcX{bMRh0enh=14P7E3XJBf%c@Zcq5fy+&_+*<>vDUi;efT>UYulE^c(gm` z!>jeJ$KLN7Vb-q)jQjmCp8|#%o&gd)>}ORi?Lp5|o+roaMCul^<%ZFPfnxDm3xkjL z^67jUwf3xKvN%a)9~ZS-tpzpjZKhRZ4~yvc2)P@JHJfYfisIQzwPoaoKh>NOW$`&* z?cI=&O-v6j?@yX4Fx~#y9c;M(XlQ`3mSnCEjE?z08*gG%&{*%XvAs>iVGCtDoIiwe z%_k(*CT_NSF|4f8(>&H=X%r|y-yFY9ouT&wEvijY7AcLO*)wrwd-hhyp7ZN?wRAo$ z)^J*@Bj}agkHwjSnM{N8F8(%R*YeAe?iKOm!$UJnObjJ8cvePDPGt#yW09Lya%2H?9V@JZ>9U@ec$8}?1Df09QI`B)iT{XI8>9>$S=YekX%fWa3 zi(@(=vJ{2R8{Yb_ZCHIGLyi8d&TR)+Lh%!f=1fZj@X7NvH(*>yT#tXq!JNltJC(gx zP*6O;!7|D-&@D2)CE<-e_TjLcP@b?&vUk1fXLj23J7Rj2Cv8q}NN=j_S6LG88Oed- zO&co6t>jx0dZaI8yjnB5tLnb`~3)Fx}O}KvX}n~4;XIN9=q+ExYu5C z`P-YDKAc<>{-~ZO5-WZxA(d(^QW7#IU1W?kD1u4e<(?lMpN7J!^2324z_Iy^!kvA} zd}iUNeo7nhmLb&ZnCOt;kPsPOaW*StB+M+k)>rzx$7*50qJ9;)Zj=45|xGBB% zU{QQK<>ISP4*soRZRZ`#GLjb(h(c5Lqc}@dhp>53fA7@OkDaWWJYD?8iYL$mhoSQ| zFSE2Y+?1+F&)_9&JQbV=zd?5t14=`kZpWZUon}l_KJjJtauQxO|C9-H%Rk?FZce&@yfoHg=@53+R`wG9|P_xJVrw;B#< zN5;kBymwT{4?k>nTPoISt#BwK1g4J8Tm~&JI0uu7p4H=}SD+{KPdkC+DZ(vfy<}bo3dBdHXQc)d{XWcgXnZ?~Qr#Qz$5Y)zq-n9xs7? z2jk?&!)Y5h{)2fNnUJgSdnq9%L6zxnOWJ&Gq>dOxZ|~sYL`gni`$vnO8?(&)mXA`3 zj{ftf0n>Hve1sQX+0D^j*rK4fHB2F->_-P89YTOcZVbs%+?+3(*&7>b+# zs@evNp<7bw;&>iZ6N9h)Qzc!~lr$eLjfOU?WxMEdezd3J;$UN6{F+ATK%gPpDF;mx zI0)C@sW&H4=SenLA4@(>WjR#=qF-fY<(t7|H2%bu3wbbbNh%_;WSSG^w+mRTZr`7N zXtl91!M=#RprZa3#6UssS4YZ7&E3{84yHsQM8~*a$MpxRI$5h(`OaHzg`)CO)ota* zz$A|5eX#a7FDnWymwoGMn{eq#fha$pvl7c?;8Yg17u3JOeHHfhcn;&Id{( z*_&yU+_)@3Ly}OV<NbY&Ol6h5ZziLd*S@S#-dj{|zd)|u zhp3#M^>mrdy{XrSev~Asnh)QwHW$3B=o^EFyZK?7K{WMI;Y#|Jm?{fO)cZw$;ajeL zEbB^bU8!qONp(9 z7eTAoJjtc|6Abr_-hMs%)RSf>z7vRo0KJq;QdL^j2^G2e>iC}{{gn?Le==&{Yd(HG z)@`&%Q=9z}<|V9PB4Va}7I4v%zLl}rbCE@dlZ;{UZ}nm&^f}&*Kft>qtN9M4Jz_!o zuiD z?8Q#RVxt{cyj$%LHEYe+(y6~=XQo9EAyS~~u}n|p_4uCU?V_!eq0K8mj)8?mX^8c@ zID#;h+f5T_681u8GZor|e@74uIwAD1Brv7|-*^&>-4-AQ=H%vDF4w_R`tkRSbv(yh zAj0T%?^S2sUF^*g$c>pMnXHr&XapdA3yuikcfIfptKRIk$p;yf^_m(DMi4s|7DtQ@ z2Mdk%m+(`~wo9L0W5D^o0LT3M8Dm`;vjb4G6br{L&HW*m&#tRiR&Qefycs(6_N1)z zhhVB)qRyuC^Xm<0VhE1$x>_+#JFvMU_@fXs8F#jR!C*qI11EPpy&8w@3Gr&}M9OEd zigKxF5l2j_lFvwg%O{~QMAjllUHXcZ#n8H*;>#OrtMULrB>2laV1C6O zi4)TrBj-o>WbfyFK@p!uVj)l-IhC))(JXCGsq+|-IynRd$P7{E81CECw0BfgudlnQ zNE)hKN8?p9mYlJ%1vX=2BJ0`gRqf0NH#AItYwM7clGu5SeP`5Ze3UVD+tP+e)xjU4 z(U&t&iF=TLWGMYIR905-16~5o@TrjVj3>JkxzwA4jXlZS>!Bh6k0{-3Ab7s-)(Eb= zVcwQiEf>t7QwsMO_XqA9oUK2LX*(%OyJ`H>BM_znF$~Xrn=^!U&_6zseQK%mo zon*>g{a?@ZOAu@KZwvJ-;2oILtBW0?Wtet7`K%R=g$SaMcawwF>t7ny8J_olv)Vjh z$JJ3LRmZr9u01tv?_)Su9cWvdj3j@AI0Fs+1qb8 zqQL1cVNUNO^&pw;QwSg1w8k~2sia8BC`*DW@7=Yt9zg&e6ne0+mS4QGC! zATaIwZph#vG1qW5vSbKE@&{(9Q9Q37Bz*qHb8V=K4~>MIm(qxQM>R%_o1A?8GvjAy zo6=S5lqdtdU!cO@SEJY9016<=x?z0p^QMgvEAT+jqWq^8@ORQUIePRy>P&x0@Xsq% zu!*of?Nkg5F>!Ge?(o8Mk|Qkx)UE{Dvc!QefCXL=`N3#nSSncj0PN>SjQ{e#|HbM> z>JZ@2E602`m9VLt_iIoGxKkt&W^Q>gF?G#*%0X?W3DlHvonV$_cP+^>a#UZ&4x7A+ z%A;uH7>V;Zhap>-EwT-iRmz0_eA2(44(Z)atHM$N9JYzndFL=aIjRT?2-h^mnFTbO zGwb(V@?Wh{;Aq{piaR9Vjht3 z_5qU|ely?Q`BSJ6qIGQM^i;Ru`>t+m>u6hZeVQ=;&KM7Fq`{;w7!{xGn@w;o5}U|y z{U|6IvWqfFyfQom+=1%!A2)v>@_*=p?&yU@CQ`ICJGRbXxz*k_EJA#bhK?SS8Km6Z zy_u6sPWF^h2*35oH%1I-9VL1!2g{WIIRu(B|6XV8bMfUZ$|`tl8QkMg|>O9A5)o7FR`qx&*8p% zLXYYcz^FYYMMeqVWBcY%TUxu8C3}Za1@#m^u%DMb^kPZHMrR=1ykXgiw-k(h0mhvB z_CR#-&GwXqwUkZ)L|og8!*!6Pl+0E^@~N5or7;IMHbF)Z;Ko-VbwyAzak7#yb@z2# z;2jb#3yFOk0`_BoM>RGpKxxokxr?mAvMABw)cN=^`Pv}*8UMu!yD|R)v#qNuvph3! zpQj1SPVe^@UEvFu;+8;^iNmIE75%j`U^AJ}NM(y7($UlMyPQ(Q(IC@Ef{Z9sqR+mqbvebpH?+o66Abk9 zRhb1d3ti>%WkWzy^jlu%4X~cZsn!^o%$Ld{j12;y#^RlP$(^AWN1VEvTD9Bpsa??< zsAiN)*Tb?O-vN)8b>c@v4pi9BdqAjFQ~aSE@KJZ^=fg;$zD>cGFPcMnd4}~ZuE2Q@ zl0;b@bs0enRLv7`)ot5;^cI`1xbpS#sws?CdTLn&9H#Cr%GkIMMy7=*I1|8qt|vZP z(l|tIj8jM>#igE%8jt5d2;!Nv8ZQIo@?-qJWvABRC&WkJUsG=#Wp4ujz!rsAvy1)9 zd_YY);&YXX$pnVy29SPbnTmn&W)ZkFWkRzG3kQ;9z(#@~n4M~{^qplZNm=x`Xew;L zbv4j4AI#7>Mn$kvYJ1sVFag4zi4X`8xxzUUhXfP!rZv zunjX(x!x`m6=!+Nl^u>(#r&v%$Va$@iDVx>fl0bz04zDoxDRlW)G@zN>DhIJA>eH_*~bYiOuceoCLeO8r!0)BqR|H?$5av6!z=cA#f> zD?;uLcJ=D-iQW)mo*Y49cNw#kZ=Ee<|7Z>itHx>iNV1yoW;ji#+(58Yi;0neB&aGh zIwoP=H7Z;0HAqyrW?O+wSQZetxb$GRTa$2LTrMc!2(+iNF?#*FGu2tx7eKr{f`ekB zBcW298`PU_?t6Nrog3zGaAs``!zp>`cyd8NweQQ4@`9Yayk81BuXw~@sRAAQ;T@?G zOp$2Roorq<_IO7JA0kl=FGB}_41k(%W>dvMNYm1vzh?eUTF4GS`HIB|^qgup$3uhr z@j{iATI)1c(Mn@IGyb1|E#wt7^baERlseZ@#3gTUTfqyc!h&MNM^uPXK@u1mL{+Ko zF7gJKrl`1>kC6%MeR@s3eWsj@tt&@9+bT34L`9k2)3}c=^qyD*Yxi4`ldD*1k`p$v zq`WiOnGLD!amCAseYyHpIwd>5^kRRpyGtU&78U-pqsXUg%2JliGoSEqiY92;lu!A& z`hdEX55ZeqJ>g_(1G`u+T?^<{aVGSlB4t^Qo zpeZW+KDbz|%>BxxC@br=k+yKBR_I$Xl0Y0~F+uUQ+r!`cs*Jvb{doid4R*%cTdR-+ zqC026Ro?g~!`q$p0V^l%OVk`{aJl_yzPKz*BYQ+oQJaWT#yNN>rNCUlDyhsZ<&9`}x7BV^5!S+F zttys;_u?x#HI2k*re5P$YZD0nGaBj4~XjI6oihtew`<12zHMFDtK*C)2Wa zW8*?xe)0P>6mK&Lq_a1{4yz!e!{pd(D#HX`Ta&j?DNiTf*QLhHanKDwc@6nBUoW4b zOpOVp;VAP924;d4ykEW3O~|(VhscCh$3qJvM>5-uI&VZpk-4U;9jCG*0+4(3{n+`g zr9YH9`{AX}s;ik$Wm3>*SE2X5EWEsUw_%!!u_-#bmZrTw3R_&w|kRetMi@uMqQfD5R zEw~p*i;I^{yKAcXUD+?CqBukGI3t>pt+-i1ZIcr6xwqro48Zo%C$ichV%HpS%~fdx zbZtxkS#3Qtr9j<~W*yG!KfME8FV@hPekYqa8yGM!N3TZ@42IUdee?AwfWbljf(d;Hx148;paZOeu0;0Kt0Wxe!qzsrzt6E zIAI;}`FLTy7=K)?7m>DeGek+` zm8{nQID`4E_*b+f01uK|mZV(sk<3v_rLvr!njU>ZLiZ*nEB6QThhH|+s!;>p`WUdu zfVdC&J+jsvEjsXE8mU9NVPJk~C6s6+wwD!s6>T&!R`!6-Pi5g?a_XP4hTofcujB38 z&&7U4#gGIURU0hqtY2P50&(mOt>812e8WLhLz$q#Ue~kKPE=oC%z(`nvS%@`(A1=> z@&gnOT^H*z7QtoZLWj9~Tn`ZP?qAmE$V{ zpcu9UMMZ^t?!jKnR_<6P6dykw<7S z(a*(PW8uRjN?0epqN1f1z-Z4Ufpm$sH!Dee^x`vwHnrr?9ya{?m2-yKjw+G{#9rUP za57ONaSiBtl8sDGNk|Ur{w5>g(66ep0jTI!;-0>`)-z~D7!j{v#>VMgBjXMoHBJMv ziAl6xYU2pag(@`a(3da@T3T_m|IBILB_`uW(?Ax`P!4HB4)!k%Nohzw z6cL-6(onzOuEECJ>(t8Ruz|+m@`W~|MovQ_`*g9n3LG?kZ*?U!b?rap#Ii7Cc*@etvW_v~7#r_= z^6q*8pMWUc=bO%!WP_V5{PSlbZ9@Az5ZYjFVmAGI?yGm^nmSb3oU5}{TaGtS=ig~Y z5#j#notg2peI@eg@B9?dEU_unG^fnD;ygkGQ&{^UV^%G1I91GjoUZ|z4T>(j1<+o z5MR2E@BgU<1P6n@byZj{4n}{DeyO)Ny5j3V^Cb3M0CuvrKC`u}UL6^jIa$0b_g9x2 z?t@W;LnMZilssdMf|`8aBng*HY)RkCFc`>qQzOdUh-FbGfPw^fH&ZBz?oFg=+_xFf zzy%{wgu6H3EGsVF|C=%JN*3ZfGcRvQDk{=T@_RRsWXv^G%eGCUNdM_Z2h1Qugu{{) zL0HJdhotnVxTr!Z!@T#)w|CKb~5p+&sDeeXhX7PNa!hsC2-tm5Wo2D@~H1F6XckUFeY=_v9u@q zcTO`mg`eAJIIdncQ7vVr zs`4T*^MfxGmR@K#-bhHKquHujOL1}M3dGUU&>lqVp zge2t(z5D@^2(gJWG?mmXO!Xe;*cG$|hZed5r)7D0)9UJS;s+1fn~aXWUhf0c6P9>^ z_kBiu(%>fg(xIT99=dERoy{Ap0~MbZe-f#Wt0_z%a}y1R;P`=J1khGB&!sysZ|>72 zu=0aFoW2l*(IBf2n=ZcylxId4hE|*P?ZSv05XjqTiIUqsF(LTM3=Qq%jKoVq4ZXpp zjNaMPGgG|K#K+5}s;YV(uXxb&%2Goukjo=KT#<6;^)i46{UY!ZQi7i#hlMTc&x*x# z)q$v~U&@LbuOzO+U%gYBNLfJgwltftLCAj8s8f=<7RLRGqg!qksNH`;LB6aWou>6f z%hJ_tZcfK1`U{|t33!Ea3M@=42X|j>bv%`Ic50*`NWNUHuD3FTZjbxzJHeRMWN~?m znv9xIwur~x7nFMQ>7Rq^WoL(*e{C^j+((68(7Hc!@Ydl4{LLHTkujCw{(gBwS@#6h=5hFPbqqLM?*_)6BkypuD)&saJ2qxKN~M!*mo=iKoA!NYIH%**8l z(HIb!YGa@1$AOTDz31l<>Q4yUKKA8(rS(h#P(bzSZf$IJ+O!LxWlvPz53`+cmFDI~ zrKPAU^rRv~sw=5G$5VaFDk(`y?)#aP953nYAC`#ir`>-rnTU%gQqjN*R+~v`oFGcM z$=(s|wZQA0J(XBhs>-bh*WlpIeb^ji9)@>RzPf{aF1H;qsPL9AoX!y~BmKSt%EsBN zAq)6mc;1GZeR}twoJliu=^<)1 z6zgzfg&kK1X_{)!ZwHSLU92lkE_z9Atj}hppM1q1w<(jcg}S1xML=#qP|)|#pBNuP zanWO7)0tRV5n*q23(ERkvb|a?#K%{+R z6$OM|X4nm;?idvr8f=49=JuE;y<@r;*&Kh~wNywm9334=3Bi)UKsiijkbxVU)f)`&1|%Ja#Xd%01Zy|JoFkDL2x8Ki73H*zA?rYb*R%ng`1 zi<>p6B>%4tYeOYkWEP7sp=q&I5QMR_w_kO*?z$;GDkWqTH8s_UI3Ub) z-j#Q(Qphc@);ZHnso{s8S-}xug52lg=5pD_7^0%4#z+|HCMCUNyu3#xD59aQ(C6l5 z4%nO)e(Jjz>ih0No22Gx;b!c^jw9d~&1*j;r`9or8tLC=ino&Xiim z4W$l)y<(AHrr3)M$mWUA(a;{YMZ_>(qk%ipAd8#J<4-ICANweSg{7rN{a1$L=&Y>! z`jF}DFRyjE+k05vj~wpoG&xbWZO>_myWoL{k}9lHX{o@g?W)H8o{$8~hn71dH{nhR z@kTGxOUb8)E`egLC1Kr5!uj0XTpJtu3u4@744g9>9US+E z5u{^d(Q>54zyRA|+!+i|q`a@>O5BYJUCOO*7M9XoT8x&;TztMWe1N%;pDiQwy(R-cmb&h7aQtKRM@s#5jzBP(biZ;tZj zWaYF?shFxV=nj8U$IjQ^ay{>4VErHp(hbPeBNDP4?0uTbC;MZA(k(r%2eF8nN&0G& zBt3-Mx!rGHC-hH_Phs~-Y>*g4R(LVo#Zk$AdS!CGTj3P{PykJtfxSz&y+8^g-71;v%-d>nXn+&0z zn9`G2+EqQPY4R27lxpVh0FXuVvXeabYgacV}gR%ivHdvj1$}|M;Dfg!=a_|Mw4te_r+XrT_H~gkVViKW_imO%ovbKc0t% zCi?%;qhvDw^Uav{j*jvI0|T`k;b39^Zt$=G)ZdH9KhJt_=#Fl;5W6>ge$J;;s_!pI zgRO+Yk(^KY5*|P`|Ghni?78Rs2@n637a#s7Jiex8XsEQb)Z#t^90ATGX5)zT5 zZ{PNzMWJG$1J9BpSul9%POr%S*ve54X*wb(q~apWVpF5NgM-*u)P%?tDQQVqxOESq z6;uo~v{3}=rg{QLU(y0XT5J)#}7X_|LW)N^?7%f6D;*R-gY$1;ZDWp0dgsa$I8xZ&c+2{IKPu+ zRZb3v%kE-H85ns_bqH48;CE5xEM1}$78jyrLV@^MO)dOE8AMP)X?pDkpI*NQS9nlgTS5t~bA3Q|0rnduNkRA6s^*e7HA@e^o3rh_tt}koUyTi+Z5cOy zg!KXgp1&aeC|L^&A zao?@f5k5535pAtS&-!`Qy~Gn7S5s3pZ|>FSh#>?8?|ZdDO`#2O#fsz07knl~9NOERnyS%^)8k=t84f;;2Re9%~ZWG zWGK65bY-q~u;vH<+#bV%^?l!;%Jli6A+ZhFVl+1IV=i?a^}s!uE2qKKl9abT0%U@n zwI}(%HN(P2&#KeHJ|E>Y1MoMK(9%{<-{|QvE5GX{*V9h`32Cmk7yZ@e9;2()zq5o{(o01!B6vn zT2t0IYrXQwr)wmF^e(7p`oOhp@;RUf?irp z0?xM@s7BllX~ab}`^IL00bgYH<~cbNRenXzIx*(%=5dcV4+Sg6Yg-$~#dw61Q;XLq z69buXob!aJO~25Jc4my+0p1rfJWg?NYnzGX#5CuKs~bkPq?BYuaS98uc!Y-9T{*Ih z(3VZfC@aMDJD=P~1W^6=N`IILvm91cnJX)&y=LD^(VqRslC(we4RCML(9oQzzi4Dp z8k!%T(2dTto#kadO-s{22qR|hdJauSPCFbC)NQ#`5BT1K&$3P0+iOM}hNa9}(~))U zz-S=Yd2e47ApCO`CG6}P8zLk1{UQwPNeNb`)#e(-PfK}&OTj-=8C(Ys4s1t_Q_2&Nb1 zm0|aX<}G|8uZa2YrMI6NLMZe5_w2N^<1MVeO=Di2hOm098+~YKSQt%sQj#hS&5(Eq zhUCWm0X%cmL-CHbpn<)i@~`-x&Ahb-aw_tbk)@-SWSlXJ5-eySlL)5 z#U;L)tL&RtN9t;7x{DZ%Yrn=k@^65AX9JOFy=uk`b|ihhXo{b~4T_?tnm=2wx+A5f zXU_~xa*hsm#~u~c)pKQy8{b{W#~lunwznS~Vw(J39Ohy9x+JEX>>QfOtGYHhGzv*B zU@sY77N)QkT~hcak7bRFh|D%5B&!tWO<+eULgCIF=u!gE(YdjvpvALj1xH2XiL&WF z!>0cG`061C7pG-al?zIWClmbowu|v(C|}g^?hFd5h4CFHL}lr~AuP7~gOY)k#=FQO zN+vkYPLNyr$D3w$S7fl@VUSzn{4C_f138i(r7RhBUt^a4v6wZs;UL{L64~5bCTx#Z znp3(Y*f%qO=Zx32+DuJ1JUTjDRA4keKRY}$&D`a?=XCPL%*u?#F>ax!OI%zGAlpdC zML9Vf3}lirDowW?23Z5{QBe_5mx%9nGC>$uNT@6V9Kv3uJT4JlID3NkDP~q$x~4!c z(Rz=ZZtx**k&uvgH4JRvSX)5k=H|D5o?keZBNw)!Dpy?OF!k2z|Bg#g;=%Si-Op@k zwS0TF%paD~D$EM{{=EPpe3W%AvGg^j(itF&tA52xO@>qk@%MaS+x)lpUs9qhehIyf@B`gmXor#by}Bx|AzzqB zEqlX3>4x2_3S!qqgvDiqgk0A7U;cZs2nh+|{MlJsp4L!MF)S%w{KIdos;V!)sJK?s z*wiGWsC~b-QYFclpF~hhgn8{b$M4VCnDALHCo48f9=tWPRqpn?o8p)0jr(A5EG*J%KeAi`$%i7r6orlF?(s>Av26Z!QulCEdt--|iAdgF!C%LdilIGjt<>d}pp2x3LT#s|A>|^O%uvSZd{@~E-e73&H z5Dte~gLn2JNQlF3k-6ZK-ZozGONg(jh#2G)!V-R{2%y2-Jpm zr;|Mg%TtT@-MTkXPEHWi1woWmDJJIT?YN>>i;@4ozNjuu$DUiApIRdyNlIcP*(l}} zR#8(cX*ERs?ZDV(8*MG`socsZN_H))sME~f<@3^G^)0+Kkt=@B%uuc`HXtAXh&4bD zT2QbJF&>m?3nWw^@}3Kk}p1p3{JX?#%n*ZFEwSiie#I(UA4jaw)e!qOKb0$OZ?enr_!g zxaRM&dO(0w6in2R~(o~mX@}AZ0X2Yy@`|2l{MeUC_=9s*l`F;qUHWDAp$HEN4~acTQPrWwm+3tvh~ z+A9`Th-d^_Z7SXH`UA>YWiZpjMTf`qCg~spgN6o|ZN;Itm2^rLCPKH;s(y0l9gLhS5;Cuu<6uDHv4QQ3JM|+Wit+Vw1Z3{n>bW$ ztGha8Z@o<1j2PE(^ycZxaXOzLmO{5yAO%Sy-#HvxjGZ6F>p;VZMmaPH{|&2Fl2c=G zpI#jxCHZvyn!^4wf$%P~*jhcfySgjrQc9j{sV0bN>e=yQgr1b*(pV8rF7r>XUeNr8m5IS$U=H z_Rs#8lm0z&1~S+;UItqdPjpk#hyP*$cm&woHk^VX$#HpKSqVaIIS2_eS1hX8|E)8p zW>EjM90Him`kj)dX8IX3MBo_)56Ze;wlx~HK9Av9bU}ciifcTd$j;fWOIUdL(f&Sg zIR!Df@79m;3<+2RI=0}Q;%g>#N3iHcS2I*-XhL^)vGq!y{5Gq`tE|1AwyvGKSMAp^ zOGs^0jg6`L$4Uxu>*-iFeM4hcv;2!Ua&l`+Z|k!pJTfx~jK^|R%^nWJC%8Mm!ZC#Q4w=R~J@G#K-}^ZfI`!@PRG1-@faG8iyPw*QY}`bU-Ql&Y13IyU zt8)gYX6C~FnqxCC1z@hYQiPhk?AY;=yvCX)1El*5)1`OZjZI^V#hlj9zU) ztYO&5A<+SLb_$zY0+gy0rti6pqlDzdfOwB|jx3urpM2>H7GXSx-P=xUOuzFP_EWNX zP~IauVIPwx*kE8$|(roKt^o}3Nrr8{+2xL>VM4!x8qb!O?^4+xIq1b%EBzidb-M!$JED1tnJXF=8sZ1e9^Tk8xI6ou2%({Bjg zQEcTPRa@27)cxq@aB{r-dCt`R!g6d!wq(~W=Y=U7@gbC_ zIQaM@?FBhGIaMOohUQlK<8`fXX2BxiCg+}=pQojy93etvUhgU`t(}N(b8`zF7B4k5 z1!WI#`B?nYD%QN4R7A&7d28x8S6)vH;n)t`{$=Ht8h#lqf6eEUMd+;FXrY(NLnWM*tS} zOUS)E1RG@Y%g`{x?A%n(n@X0H2-+5*+=X#bI}t=wMKW* zf%ziThp&8mFP@7e1wl*s$~XXNs<3`u8Fvi`g@%5cJykZ0IkV}ewmlSw_wOYnORqC( z_JLhnd%uDZ*8}%Go|Wgb;|p`fj{($4!X9mHOti6Vr$coUYCPD^o23CPCWh$n=+}ci z-KN)v@PdGVw51P!7I?&0OUtOovreA>%C;L86oN}%AH7!#9TW8<^QV}Eg1`6+^2md! zG=?*j?u499zT6nuDQ1TH9w*b%u3u84kgr4bT@G!xMg#Z_|15apdjdf*QnZl>isW-) z-=yHQAVCzhbq=wVWLT3K#lzS8AMU3fFFOm>9d#R#3(Xl{9S{3ZcsX3oVlpc$8yXsN zbNM|4Hiu%#N;iU^Ca6)-{tHlZ{G$BLt*lSNGqr+%F7om)M4#~`R)MzH%@W_P!m91 zdY(^V&wGj*@3j*@SLf!2KKEWD>wDvW2zcUjx`;~*94_0jpIU5x>?vJEE+`~NVuQJ5zM!=ounK{9IHN>3C z{Xa~RIN2u$LZd#TE6s_(?LL{mB)F((x1%*}*5)lQY*1)iokSQ`;r;8R>tJ6lol05e z?3uETPSxl2nC9H?1mDdBCOpina?_ukn&$27{Hu{!OjeQTqd$?I=chn#`U~Xib(K=n zsi@4=sJfD^fS{3csG5hDDPlnW!gYB9#ABvMAyx zre-F++cdPaDyph<)YNh+3JS`~2bbgo#LL|{uU3C~F~wi)44Sd;&VX@Innlz;)*bEU+@Sf|6ajItv`NMh0e z-?B8n4mL+LVX&IKI$?5*nWcVQYUXWU^Z8K1{9RJK}`cq@U4rlwq0( z2$J*+F9f%HCf4BG6`K&1k!ZKM$F_d{5mItDUM0hdMWH7|q+F0PM?gOo2}#88`FAk@ z6zc2|?_5t$kiyBqTI|Prb}(H5sG_FLegtFXvM)HS(DWm`OY$ykP&sw6=s< zsWNZ%6ujEz4>Vp&wy367#+F2Agux%Twk_8_7?5%6@lW<$gwci_1RbI!6Kxh=&L~J~ zriau__K}LVHT@Sz3&~RJNJ@;!(K8lZLz4gWX?(_Vw$?BE%oPH*ymMB$6q129UXmO6 z=Y6r5oKKw+5fQb8nb`;^#u*vs=jI4|7MVvl%-~$vee?`HF6OE~QbW`;-Ywe^3R|lH zScWJ&MMF_BI35fa?t^*mV1v?A@oVA>fA;rlXlUqHQq$bj5}(h6F$D`w47NE>bc1?P zFB$AyIRORTHB=%ZwD%a{TO(l-1bf@t5%2c`d7C{S|AOlSp8%cH62FsPIh#tozrX)c ztMy_&UDFm!Pcl;y)HD_2Q&SC1N?u(^ic>b2{2(F!z2^^5`2XbX(D({?;10OAzFa)= z+&I(jWQ_NAy#eXr1Fy|6l6i8^Vv0N&qfYDdWt2aM>9>M~`PEaYP@b98 z;@<%Y+|dKVo4I$l=@YBpU=41H=jWaDN%${X{|ma4x*ZBQTNv{yqV)@XadedRhCYmn zLO$_vCt<`TA))8^_MfgegKv;o9r7`iHvBV9Q3I?an=k|2XO>v}DB$0fkeCR&dXa)} zG|<}KN-;2qJawMqIye)`tm-E~T=f*?FE8Wtaq;Vlh}ZewsH!SPx!!Y~d|PpKaWBB9 z*;_jSje30(OXep>0(VJ4K}E4Ue|Gk2qt`3D_lAI!c0aro{H03H)I(nCm(hAixLk1(51oVy!%1c#BuNWu9%aH?uPWcaM`k%{Ir=#2Smh zt8=e_$Ghu@k4*wJ0XJlS)!z<1TP59G;Q4w;tj(;@0LdIXDBie>PhVMnaH`TUNhj{1 zX)}Lsxb*#N@!)%`!ba@k=6Mwd3tfeVV^~9V<_ z&4@hsI;^Odz&GybtK%nmO4QHCM zuyDTxnY6gLxYE`6EeXZL1i}t%_tv6GcXy=QTSuC9kOXXIenk5(5)m zNmVib<T$(gPGY)QNGz{+V5H|dtN^X=OKRRGGUsr@9K8k7?h6jZwMSJnOVdC9Y)zI?Ev6|vMi zw&xK60fCOLeA1q`;{Al~St^e`5&HL8+=)ed93x}naQiPN!?$}n8FXa@)VdlfQ`1Wl zNV;H;8}1|qp!0Zh>w~Y_&=HS{qo@?)9tWP#pnOR9Uo0T_;3JE~-G3gHV%sor4qZ!L zf8fxqh;0F^7crFKX))3C^`odo6|^cU^2#b+MPNX; z6rd0=E=yzk39U_5a$DWI_P?cuj+CL1q37ATvCe8dK$ZoO6n!FqRXmr|iB9{;T+aIB zMqUGsE-2iLCv+WbFWvS!QRrxCgS`ywB_-8dgbbCj`Wv=KM@I9Be}aS8!O;;5f%&cB=CShiF2;4KU_>XMC|-4+rL52{G)f zjetkh=Nq$LPndz`R<$~9^S8nbptRE z-M8AzUYhDL4&GvfN?ovJwvvL^a=f3QhZ$;{AFtK_2#i@Y2;KE}SB{~gA<6qkxEaD? zAs{LqzcVy_;|o|x;4W}frubB+g*^2!kg+;14nbZX%~aer2pyqb5(E9eR0^_^f`v_0wM|V`|KU}Hn3lok_Ya&_bP~oi zLA^RSIpm>Hk&#hc694Yp7M@216XWLXl}T`hXQ^<0bp?BVBZ%N6e3TaJJH^3Nz=Vs9 zh>k^h7lShdtU{Q;C9ixb%?aEWRriO>>G2z@LA>c%J&pVNw1zmi>xAzt3d@$I7Ul-3 zlfz3}#7S0w8dA&_vgd?R*g!Ab8Yj4tO}(#VDQe#Q>(1-8kDqg!$HXa3oQnJU4UMJQ-vP#8YSJSuOo1<^ z4fybNpRbmbGcz+AYd#zu{aIR?+(97z+230CxsIES>IYRE(${x(c_3cjk$So| zs5A2SkQ#1F;Y25gJ_*zG%Vi?b6zv0}@3DA?XvV@+uI!o!dVFP1zhZ$V*#V+L+*4iHnIrTGTZ*>U7xnc4jh|JAdL5OVVw%dmi|u$;XzctW1Cw zm6ldkS@~;ZXH-f$Qr-JAbA8v+jW(ZNOl#|6*pB2Rx6}Tad`_98xhhi%J8TIfGu`7R zMRre5OmALZ)d`~`E2};83{5;0=a(o5tW9X1j~rJ^*YDxsLw!WCca7#%RA!204!pE> z1A7+c=6FLQJ3aTTzJ0T^(jkJ&DGCZY+Ly04{>3u6uoc@T9f+nzd8?CR>e+~t{E*u5efjS05&-zS697pP#Hr=ylETF7m9G8izHMC+)D^Lj&Dk{{##VCg~i56$;o6mN=nLC4vwPj9I|N~{6LPQ-gN!f+2Grz+U*aL zT#y--V!ha5n|FKX>o3i;boT)U8b0)R;{;|CD9K>9k=#s-%zDvwhQuX}zV95Flmed~ zcHJ3L`zK{ zgE8~f*5A(;ik-XT;39gb3eiyY>4W=qa@b6E;=abgh1GC~1?Q#kK^XBY>Mzgq@RQ@p z27Ef#oxL#lBdlX8iN79&>o+H5{ko+_ye3m0(X{I-*9i4&l%?XXs!==l@ef-}lCbK? z5CS>Rc}ZeVPGn@L+F0A#UzfkMwm%+RZ=*lQ_djB8bRUZ;CE*~z!=Iy);1^h$^fDhu|rTp-u|Q|XL-t6dkzuD&{^vk{yh})n(x0m;wvcX@8>`DYjJf7 zSuIG{#^!gdzk6iFJDQ-Tr>9YC(WuNGQAtqTYihO^w&GcR{>%&ldzw72Q-j(#`*DNm zpG~c-x`4FrwhKXOkyFL&Rb z+8(2Jm@inr++E&0`9aDfi;Anm=P)xcZOF-`mV?n}b_zcUn5SLLf8y@YnJ$ zpJS-_@NlVVb=SoO9ISiH%Bems;2jAu&wMZGQM4FDI~XH=llKId5PV3So!? z;fsJ_q$8=Q7{EL`n2P)U^{(5Rk33u6-Y-*lh)9$-1U@>1o}M1P&|m=xIVCME=*r`D zr8y=A&fD17m``tgVa+2uH4!>qOIcW1P>`?$jpA&4#U019>gjA{K}?Fx5YpdIckMw2 zc&Tb@?Q8>d0$jg>0)2jh0%tiWtDf&YR8&P_OKM9>aGS*>B}+@o@NxGgC6Rb^C_mG3 zas_8OTNs)Gr7%4s2^ube--YYKg!lMy>V*~~LU%=jkPd%nT3H?kzb{~Ei?FgaCL}0> z{ZwPl&7FOY_v>0)*tAmcdmzf3G`KxB1}tane`C19|Ei;P5QhD1viq=CVa948Z>TL} z$Cv+1UOF2ive#NiXt|<3^{eG7)}8W*lDD+K_jx1bsAy?i=oLn?I!mx7ziNI<^b_S_ zN`GD0yO0EVY#4%{KN|l!c&9wteW7tB*=wDK_d-(t^sB=iP3g(q#{AP`aZZd6E;I3> zZBRo&#bi5g7Zd0rg(3o$DLKhL#QU69%F>Y9?NWC(Ewf*$1TLcob z`ZwH}4Kx3Lm%3zPqB1{8E={Sa&$pQ(DSTe53cn5yThrmv8Dj&3t*uRTfWKT{JKX!K z^7E5~tp0>wb!+4F;Q>~gz&4nPn*OWp!`L8k2Q2LUeIUEl3eW||#>HvWy9LH?g>-a0 z>3aW3O-aDSdS2fw9IdX>73E&OjBLU%D>LVV*N>LYVtMmUUQ!d7d`$0MD8Ksf>D8TY z4R$qH077J4ws+5qf3Tv0!bDa#1gWXM6--iaF%)7i2AAfaFZIUzhlf6VnLO@Y{;7vt zS{qd@pFH^lB?0tk%q>! z>-Nc_qVo8!#hTmJH8{N2y6kb@qsu_B>M?XReL?*?U}qAvG- z%}-B{js99|fBmqTm7LuC_s^*;A@92nhyl*Wcf)CE_~PQjuJ%T)tx-ww$-vZy+x5`m zy93LUZ*x4A^m2>WilgTU^nt!Y2~Xhz%6de8XGGs^6-^?GaAUPgHlTThTpqVo_WIz86qhG}Jh|*IhMuc=9O4Y#| zvN~h6n%`Or&~jo(>cXX!hehA(Ve@db`*chbgAsk9r`U`(K7ghCd_cnJamDoSqE=O& zn^PVWup5z(U}Kv{zHw4eh?}2Jva72@`L;R9TUeUAnxCtnr1b=~Oq=WrZ!e7bPX-8?B%~QKRoh`0w$6P!`B#eNNsaRcbcl|AvFj z&k(ia$e8H9YYR+G<)ZiHgNA|jS0fn%pc? z3k^MAnxhkKkLYE`j|LHice~!anAo|&aHD;@ul*hy*LQZX;XADS zQv+WMWA@ga@L(H`9SmpB6s4qQ`&NDpETQ|fugnTbOaGn!%LTBI5B)6##l?u9hj_F# zBoKrPd2@!DZ1(Q%0uB%HKYjW%h=%L}Ef*tqBlkPz<>eM?9Yv4g50QUhR(!Iqx*{C| zNfoeJ69F=W=lr?ZWx(kMglhV6tevnh?pLf0M~g3xSWws2jm?gQqAZS0j*rBpG{YvD z=SAo;_?)4SC)FciR=X024<5Q3jS^90^S2FJ?V$>wM(H?rFAOTB=0Znh`N&+>+SbC& z)kd*tw^C<4$46B9re8C^Mm9A9{gzjO(4)*~TPig~(y^BmGKj1tR+Z>P&VnT_yj(u{ zD8pzZaj0Vx4lj6z$pPV_5)oCcTU zN@34Qa$-t&(LVo&j(GJCKtMr7h3F2)ayWZXzq7NWl7xL>XLt82lUqqns zx^tV&icts)`}DRwJZx`cDqd)N)}S+-h)x8|i25RUDWm1C2{LJ^x~(-UEJ--h6VW)rzpBDz6^eCZnVjvEu5l<5sBpT2fGu5Y&cmP2sL) z<>+|L$IKBG8rfIvTm!H&Pm7HomZEKzw@B^gBvNT^-N%oL5m$MkQ&GE?iPVgV?!LD2K07R2CC$V@PbYW>9-Y z`=fQKcfvN-HmDC=y*E>!GaJD_-7|F3o42`Z-F^l zHj`G5PNW;Ezn$<@=tSWy*LZI1H&D)|Pq~Qli6tf`@S(blMgayHsBh+#RH-N_ot^CfAtSW=R(y70mjo8`l^8DiytdHM!9o-kgCilJbu-kDKrx{PQZn z@7eWk|2%(CcGKmuNOhq~2YxitO+GO;>;AkrySS(@pTh2WL>PAi!0iBJkd&0IE-eMr zZZQ96fvQ1$be1_av$hVFPwST|^;c3#V0d76PS?~J86Ekd3zQaecltlU#6k}Py!IRh zsACxjxVJUE_?s6Sp(eM3ZoUx!~_9%QsX>N8@%H#Vz^3`@wKLk-u-3xoym%Yn0e#QdCsDe<> z@T*(YM%qKU%aD>7}S(8)7N+dFuV9TAi_IP zw>uUY=C%_3(Qn{-VXWAzhxZ>0SUg_>r#bJ4(?=nVP>Uu z3kQHZT5WsIub0(LwFXp=m^ph#)s_UjUi9yG?Dv?Cxm-ASyHPWie*RRGInnPEQBXj) zQIgag9kvY!tNV;+!zaYzaDIv_zED0EJ~n$x|KW*CH6U3TOQ%`(dXz?ev|DkZ>5iSn z*F-=*X`DkqR__Ny1d*Im?pMX)2>_UGPMmLbbUhtoAVqo`i;|YCWqHCzWq-VKfb!U)!4}5E{hWw`1B&0T~tuuSGg{` zFvU0+O|Z{TjF11G>0aypJozv8NuV{jl0hX7B6r9#3A9DNylOIUcGKv!*ct$lpcZhK z$H2g_x4WF4VeZkoxVU^ifmPGg#KYYm9Uehm>05b3W?^CRIgrZY*ob6E$Hc^h5Je{Z zGEYoh0Bd~iORi=f7l;1s+cyRV22i~6Q9b7pb3ircrOfRt;l}(#ARwF#!tX*ga8utIxju4pZVZwX`N z2X-nY-Z_BQVJwv$wl-;PYG$@6OG<9w{ytL(kN^p6RFGja@Dty0F?8lXGd(rbm4#K- zVG>&k`+ZI0be$GDJqHXt!0}aIY{kP%1^9yL0UlaxEJ*zPy8_*dfTwTv?X&fX#Y_Bv z2+H74&Esc9hpJ&38rri{;+4gz&?o|j(dG8NX0v`fC)1&TfC2#dx3#(XSh(~aEBp@J z-#^@kKr}NcgMACzrw$Yw28#Z;stt8@Bwtven``P9+#QU;6d=cniIHJ=Y#4urEzNVK zN6^%QcCxY{ujM*Yy2KsWCgf4g2txjT-Wz{I{|R&b_3<=5u4%}8a5lO_-HKB~Kto<_ zMNO%1n|PV^k2~CkjdIG8M#7SY>S8SZa?5=JK4_a?F=OK-05CKgtanO5PT6_8F*q_Z za@zekZ^KU_RUI-^f{4R(zlKs#Rhs+q*Dp|AM+FTJOZt*6^)8Da{o(i0lurRb-Y*JBCM@I&@#W=VzYtc6XBm=UAw@GsKGou@iY5@;0DvE97 z%WC6h-nXYw#{LlJy-f<@08wFe*QMFv5HRpSNFKGcvKnv?eygOS^379BQdSg62xdw)IOG|#aNFo7oGlWik&Sa2pf8?jEd@$2ZI z4)&)O6&Btq@XJ^pGgTDf_?XTtOmvKur?w^XGs}n_kOYjW>liZV~&NH<-WvEJENML?klkG>@S7IIl_m& zsFUXWGaxHLnPUeYTK%d@O0>N5QQ2TmaXGyJn{wb+OwT~3J#x$<@$9bZ5D0wQQr}=; zF7s<>099*SK>;Q_hvS71w!+z43A>#`M>zpt+NHP0(aR66#`bc=1afL}%y*DCm#v66 z`unsrv^Tg)F4s#)PB|EN1{!WKL~auc*8P&B4~U6jVV_NMLf~MXtj*2M_4V~Zx|-G7 zsPk4kWm#EcpbfyB;??ET8=7pn6Z*fwfZy)AFyNVEZrG@ukx)`Dx%(VK^!`xjA%NRwayz5(P4;=dQxKF=!px!iNd49~G%~V#Zx1EJe*__si0D_9 zy)gg`Ell9F;DSPiAO+sIWPbHj;g^3i%gV(2y2|a1I&m|IK-Di*ZIo;nfCBnrz)$Au z1a{7XT6hqiAK?H${?~ep&oSn~%}rFnHs-uF%^H`@teCVOCOJi&%p6>FY<& z*l#sA@^GRNHPO+sJ!E=}ej_BA_u9a=ZWm{g?xF9(!*E68_ES{{5RGP_5byxzZscC? zooLi$UuM|I$fK_>AtB*Me^C41&$kn=Zzq4;=92h5rm4%IzB{GRih}C#Q^6RwQ z+V53y!zs%+$!KZy2Apqkd=D7q)fMRNHQd1}f&I3%=|k(#&=?r-_D8HOOd)>7+TyUS zT6tHV*X5Z_`?fu_Fn%NTi?DQ{^Y?;yGCpw$3EGfhV)vWYNW9AFS2Y7DC{HHY=!Po? zh^tE+k2Czuztq(9VWE+hrly3|tk@|qSjc702_7wPba>rg1a!QJ4oSZv&Jl9pb46KD zL*cr{#l-Oa+9G@pTZ8QF^X>$^j9ZgYA7dl_+-PguiD~ zTP~L8`Xdu`e4Kf0A6ZyjOc&8T3aEoxq|^2zfBtk`|2W%xabfr6i)%cUD-=A*b{`Ts zosBq!kpWW2!g@-N{y14CrCYQp1#iM10JzI!aQ0b|D5$86+bIY9O+W22CT!v0>aMdw zx@IA#qz$5FB>4n?Esnmgp~2~sRvVieekrz%DQrz^$!@;uAoRwQ-2H}-54280*vXi% z(7}+9eifFh4gA{Dk>?VaR*?RJd`6NZ5{vR-KyE|b4Jg47PC8j9-`;Hrl5Sl_mN79f zKw%}vZ^3zViGGPbW)8^J-&h<&uiY2@;oNcittBT|wR+`eGBv=I>hjRx99NeY@4^5P zF@N{f@DX@6;DhPF-Q?CxMtX9zUcOsH%}3o@51I$ZNpv`PL}R{!lB_I74wq;n2!wZC z;7_BOxRX;*Ftw3R69L9&cHI)Cy(^&>oxrN)B?(S{` zq`OlZk(O=*q@}xCO6g9K6r^L(9n#W`z#=51L%7p@&bjNq8#eHL^POWnW4z$2ReUQ9 z0XsQUDq<^gs~ekdgcOh;s8&AoTK(yw_LijK5_v(CqO7Dey*%nV-FtWK>1kU~5B_gu zCUUz_DoLp3=jM7Dl9H1VU#~*Wb(p^567VLYgJshBL2}&aBt0kh2MZhBU1p(R9|8<5 zI6c5muA2iqq#@WY*!UU>hUjVR$9yCh$6?)coF;!zu~2_ZOgP#*hbdWF+o4&_U$=lQ zQn}QVrY*qf0P{;N;HugyRWy{QdsiKRz2x-mn*+rbhUZn|kzf&ZKWH-w{ob3I1EFAZ z6bpD1;uIA%oX3e(Q+)h=V;uZJzE<;foKFFc%f-H_SFlnK+7*>x8e)W?^V&La1F!^~ zyuTC|U(99l;(nTb_wHToqU!6oud2B`9)J2v2TOsla=hN2e}z0hJ#EQk##E!m5d!FX51)CE55gri-(CoRb6OTfNB5 z+7`YZzsKS5*0|PStnUoRy^T@g@+QX=W+0tki*^|4wFtf;Txo%Raj5;ty5#)rV{gF_+*c%6{ zJGy)xJm0+|e3?8y|JLh-zq%1n|Mdug@dO=2x|8wSnE6et;>+RA3@nUjA62=AXw>Q5|DlV3%5x0|v zDnFO9t1{2Hj1rm2BckLxD{FaqxxUNo=xBFPx0F7O?!eFIe?1ZVLd>#}xZ|xL#4NUbW87{o z4}!)CA1Hqi?uRz^r2Lo|Aq02#U!jaK-KHI$JK#t#Qv%8)P*1_ggc=hA<4>auu)vB6 zU$6p==}lf_HBcFadwV*;wVeR30Ii9y_jLCFs~tV~6nc(tGif5#ualB09crdP8;T-; zVkvJuPi`o%q-TifMXowQf1Q$VS{pF*hM}qsh$5e8R8-uMMQZYYCOFf4=zVPjVq|o5#oavWB$t<$K$S2*0N;IY8NBGV z)oUknT3XKl?q6gX9@cNuk_vFz-x8=(P8_c{Q^#P#?29ZT&T(>ZYyn4JNr{E*&`yZg z)+~6%Y@e8b03doH5^X|>vhQ!sTQyDIQspOwTfXo7QYYmX!h|DB^2M7k_S^SQp8x|l zN}lwsF;yo&5hk+5W1mB`50{4AB<|``$n{v(-tef}&?^!Jt-On4yYF?FpGK28qc2|J zFCkIk&;+2u+PvFM(ba|_m>D+IAL(BtQ4d>dgRQFt{p#q-l!uxuofhRaUyUN>N zvV$lq9(m&)SBb8URddh7&u!A|$?t+8Vr^$<|I2E36Q;A;;CtNK4*6;hc<8H^64PSX4OP3rdm3)8uZ#$08<(?$kjm!0Ic)Dh;`H>&<>7t$ z)ulVo5vD%?A#wjuSs`d-8}U|Zs=T_We-HSABUw7EXLaxYs6NQ`$H!wHT)g&Y>_7O> z=?zb*uvqMdVoGiE4AeG z5vOIJiJUhD5N4WvcU|{CB|uAGaBW}V6R?7;l>F<8zzKS#aYEIRp; z5ufqN^mepBoaWpXhYt^D058CdSxhSF4B4n|aub;5#rO!j_(L=hG_(L5O$Zi9i_1*D z^U`e&|J9ef8;^-8=)8aiHLw`_2u2!&-&)(*>^4i1INU_wj>6D2`$2T z9&pS{!mMb&P{qc<@hLgkQVU7k#T#)d57tE1GVFiD4fjmZ!7?D4!Mdm|-9uYjJhg1n zVz#cwsrKOm#}h(uJ2eRcdK5q2ZN&9Gm?-5%gnQ|(F1mttmpv9^Z{XpQleM&Uv_WCc zH1~H~&&u)&kf!fw^!QjBDX;4IJKMP{KP86(kIWO?d`1Z`D;yz>`}Rk6Jqu}^hH!?u zA!%Y66Pa%Nu)St|;MHk)-h201^Ru}*t{*l91}0`#zW%;kI-Nv3-G6hdg!azq@h ztO}}12q^G8NA}S$*k8ei{paqt_C6uRi+DqAUpqLsxI|aSHv(a%sHnFVt~*S2>(i%A z3+Jx8wyHRHfDKJZUeC|Z!+ob^sBvCLc%>r$_P#Gs0-hP%nWgXJC=M8YPL8SvD8IEP zxuEc47G@-jB$BBpE3^GMxt<;!O#|PW^jSwo2g|bw9Ht>Yqrt1Cqap0$M)uzpo0CqZmRNyUw9tJ@7jKDZ7uMc-Jz z|DvyALT#pchPz!l_E($$C2`f#Ymd&wH!p1y6wQ8D`zS#gejx_9qk@0YXMvPJkL zIeoef-3&Ixwo#mvn1!9gn=6+*TE-)yLWNW0j@)SZo@Zc?MbII$It(Dj&E8*t(=M?>;N<144Ay`1Mn$X7 zZ&h#q(;F`5?gglH!qSpi!5r65*_!#Fj_==5gRN68hRd~H&?U%60^<5lw3&)Mc;tM6 zVDw&pDGZq#phrbTMI0RT#N+v6kw$82#2GwHg3Vw+6%j!~S^?^+TClw$jslXIenvLE zG#H%V+rat(TE*cP0CF%l_l1eB1qxhI=$@7VZV+=@!2U_~iWhF2#>AVyAu@Sw?d|4W zKXQ3L4p1K++6Bka0Po3hxb*Xk=F^v@ib{Jh&UJcTDOW3Kjh(KG>H!5{5ZP~K;2lA` z)mA_1&dsrCbSNKSeyv}yPsTPdLg_GnT`pLRn?n9 z^t|}Hv;rL8COtq&C~E+R>6Qz0X*SwYPA(!pNJ?J*#nasE&&Iksij!z4{Q1Ou7Ob#FBy zC&vgM-;&T5SxFe(jrS~NJv(y~0(6v*T*18B+S;Z73>;8)2*TnI$;o`ZnHgDx2R--_%lQSH!74U5iS3pu$m&0e>mlU01BOEg zrjV7H&Cbq=gM+2Is-h?(^>a!pp-H0fQd_?+SXlH!U$fA^+5Z!XYfd-mhKSoVgt|mT~gE;O<}%Sb|W- zp9>3GLCt7ru@)9Ppv5P$&XkD<5fS4u?Js_bnu4Ki+czM9HZ`Sfa4Yu$m*>#` zqDxa#D?1BX4HHb@b-FZJ-$tIHIS1;*lQIz0y+`(y3F}Q^Spihm{y@U7vrKJ``P32{ ztIUyZ?_fJTp{1p+F2!=y>Pl$KBP@&G{}YQ8UpN z$J97Ud3oQTQqxtbQ*mmCMQ={{xebY4pHU5+xPGhS0D@Qxp5S}+RFN5M2}5dWGu>CR(mAA4Vs*oSQUeTY{N0%CoZegav4GfApP(?Yf9#hxRZ``8D8Pi`_|XhUfRD$*QO_dnp`)Xv zg@4sD;~#Fp^5WBy++~tGWp1BI;`3=Lh|0lDc0oyWb69CvVAU6AW|r?4s?!Jw2$Q@Z zU+UD$K#F(KQKz`r^6cohq-e<{^gJ0bt&n7?W+bG0hcws@V8IkX%YBTQGff>I5vCoPSNoSYb+cwq})QG z#=}ouUS4*gpuj^~o~Y{rLXrSc;0-*;rTIDAeW_&Gc4Mk#K$sy8`A zm7pwp`53X_xHeW<9@LKWgLL*QNNWD?Cnz5U^jrHj;o;*qHrEFPT$J91_s`8Wq|D7d zhW3W`7R8NMwcH}W$f`rmEjw zxSJ>8m#`-Gy&32(z5oUk6qx!qb#&<3@e1%Dl^r$bzGbF1U96scblU{-O}p+M(@Rk^8M)c$SkabdBg193 zkG{7_$=T`PIhynd{>((<`uIBT01uHbCo{Ft@AL`ioHUzfXTx7U64e!)<>gB{m+W7W z3;KD7`em}eD;`X|I0Oujiv7Xo2#1oSJWz5W^#vyBvS3VM1@T`Y_!W!)3-!uc(Gj4K z7Wc*d@5_$v9{YbrL=KL6ZAe6`KG*`~thg>JTjnHL1^i=RROVHLW8L+R!2PPhGoogIQH zm1G-_dHI&t%zS&b%i%o4q8mFG788(QXPi>CA)QY%10Qdjnf4aO?BAxQJ`2xMu+;QP zy%rM@6N4i~Ciz-eI3ekhYB8z=Y#SaC@QPY0EHBqkrTz+sLT9KTA}q4F@_nnPD>fGG zHUgkKK)N;$n>>b2q@|_#1>R(58!}s;!VzFRF@v>mAQ%*?Tl9E?6j6JY&S^-el(D%{ z4Hz+W;((-T8cxHFMYcgfu{$}Ub@Y@<5QK%$mv!6x$a#Y+uJg~5|2=4hs+uF_n$=WMx&{ zKE^kuwr5uYZQy@LqyGPj#PbTl0T0x8uz(4G?qJ3>cdo7Hx3@n6=a>}6#h(kn3&C~; zPewv*-s$M5*rWS7SUB`!5wgAHK&mlU`-A=WNUJ~$TzNofYFAxO&e~c49St^ndmCR< zYqo@ek)3@Ufc(JX*u*Hnv8o3^c?)>y*H%}v3-L9yRb-KMLeEp1nwn4VK_q0Le<17> zh62PJ-&tD+Jnu{@vIdBE{A4u+N-ht0D7oNtl~q&}@U}3VoE_|nyb!GCTLt;})HOdbD5YFH5LgCB?AwE7)Z4tHNoy-w4?KtTF83C9i~xyTpaM;WMjU7UJ58lbo|Fx zCgAr`>2q^RRdXM6q-hO^6%uo0ndVo8>p{o$znAd8&mrx92WO$# z8=zX8EHz7Va+-qC69@S+-Xd}Ulwi%x&DW71D=T6Z$5fS-(JOEjin7>oay#pN5VG5^;<7fvb$g=kMP?K_C>N zc6Jt3UyI>i!xwl@@7L8v*S2LXhh^xIOvWcRN))uT^j{um!H0(Sl=Sw|V^a$63H25> zHeNjrsF?FX34&Y83JW<{Sw#U&Da6XghK7YH>bafrwH@?Vn$3k}w08z7ioa)JS(q+f zT=Vwu@UY6<#WGx3PQt>(j30fetf7JJ!g-~4QLK-OjvB+=ciye}_Y`?}WEAd?9fr^8 zjzfuq6GwX$u*6=7HsOwt;E;qj3~(ng%S=e(-kyi^q~)dt99{zPOTa~sp%`E@Ha1`5 z8u;qeGR@23ZR0A(S}%yDwUf0p6Y_+FC&t3Y2-RM{UcMSy2O+fZsTDt?pc}xagpAi^ zqkz(vIBLQ9@wxDgkTT|8d{p&}bhSwdD#3aD56E=L-d~hX{=!)8f`AG;`;Uo)iS6yr zxBap-VWp+kT+&{Gx@iV*w{;OemS=i<)|;Zl%ZsW?ii>lzvvmRDM}a2*e70EVNciaC zuY-DU>sJ{Yh4GvY3dX|L(7@7-V`XBpfA|D$x1+~na zT~ZOGqzf}MS?T$vy1F(_PJ7442&J3E-PO+<->uZ#CMadIb+J z#5=V>&fWVY?Z5`X#6X+iWJV}t<>ZWF1Pn2J0@vyQS_rw3d_01!(1$%Fdj~5;m68CuMeGkrJ z;rsG~ouNeIcHdnb=fv0q3Abw*Rd(@?wz{Iva>i2MqItYo6VllXqC?Mr{aaK~8&`z^ zJ!^7)22JFl@Hm=!6HQI?1;SEM@EcBcc088%DezGVz#sxd+e6yVlvk zLF^3w4+^BXtrQ6Z_dU=@-I(wZzLS}hrkZLM8HJe_mv|otd+hJOGPG{Hk@&8uGHPI{-GQwD1>Jglfg0* zpBXuqghM;uw%Y$iA>sO3Q*&mzXA9h`B*Y!Zqu<{Ke?w$slzXa#!uyxq{GS%^a`W00 z{_!{5wwT+A7|t~-XU$fKj5f+12Ax&9hwyA*BbGLu@av@V6+ z-t!A)ie0gpxj9gyiC)cVG9vA~1dJabtwDx-3fohFJ_kNU&vpOvr>ktN>UcN9s2m&n zNn`qeH1qxY1Fqlw{rzS`p}Rhb)cf0FbvG}t;ZfAB*T(E+Wrd_^X<accwWejB~S3?lvYzMk3Cs^OI2WmpW9zya?B4k-Mc< zn+?hcF5@ux3V?_O8H%UmwRU$hk&sdYiTiK8ha}tDvc4=Lh=`j4U{iSXu%eitfCN?K z%Z#~SO8C}4GWK}v2t;wgKlRvp^Z_A-LUY{K)>fAH91uiB#LiTRO}B^Vmt)|(rZkHTjYcmO!0fc=r_=qTvj)ZIsQ*qWVG zX^up)-Boe|S6SJ?#48csV_8rnZ=tFA)>9x;_L>0>6XN+7X_Wml?x}<~gsmg*y_b$o zYJL!m3A2?5&&0^cxg30iaI25^&J^;izv&2(RCr`qdFy_!DrjSoBF4LI{7d#GG9!pH zpI@5TdA2SRtD^`=ydM4#Ec0~n^5y99H9cqPHJIVmAajLfPHcgI66A0yWlV%1K=V%Th7YrD#im25>*)~RfFBGtAaw* zw+RkCFECM2Bn)@1iL&_ia_VZ;?=L$7vj875)K{5hQ1-306-27_l$3xooE@Zq4o1E7 zGc#V`Wd^6&lHE892&Fo^XJHJEWE1S zd%H759C1klL;D_xuvsXIDR{KwSj8xFpB4F7Sd^Zk=sbY~2-l=zYRWmdJA+zO%+Abw z`Ex&?k88!3nN^bF1+UHZYd=3xiZkpS>Fuz1@L%jz^EBZaI7Zms5|CF=sVu6)E9FaP zjVvjMWD7R1q^F;UJJlL~_g!HnQ7i^XB8&`-L%u%XJBFp8M;n$fv#r&gR$%R+P49Yq zv}A|?3r=&c&ZJ+x3YZS{QH159VW6S=Xr!*CCFiqqDH)P$f$=9%(!Z-7eu-&tqWqNI z-oEm*DIf+evYUi-rce7*y>D9^40Hm}E{u%Ku(=q6a>E+xJzx3eetzm=;{@rF=e4(@byI+usZn_gYTVv zxcPhb=d^S=^Gmk0&uIw15%>1kIWkjn@bJixD2xnsnLy!6O=Vc~cz?h5RDV?S}5vpG7!`&{+98Ij!G)Ob3cx z;n(n@^s zE;2H3bVXpF5n#t`Y$QrBaeAGvmQB{o(dhqC9J`I%e_qXtolhb*ZT9Q%{Tle|Pm)){Y2>^yi`F%y+ z{10*)Y-_8y2gYQLNf-Cb2yQ;!oY?K^+}s>^jSUZvmR)usz&^gWFFvSfXyALv=nHd@ z6hT!EMvomBFGug)-3#J?q9Ur{k&(d5o_2@V)5tCl37jIC>a$@7M@L771{q6B%NViz z8oV^r03$y*Y_3+7Hz3R0-8~42v#fVm@!BXZ0BJY6B@NpR|NQ{}D-)A?v^7P=Wc%@T zD2V=(o9O#p-TxTV{YFQvvG4z9`T;_53Wb7uf_W07hx=i5CwK z)B&*uWE(wz(E*5Ghsyy^CkiMUI&183{q5`O`toET3Xd@slcDqABhkbTW@-mD4$%4R zR2?ykgaeid*5x&!ydTvR6<@y|9T|Hy@G-G5Bt#;w7wf0O(70OHQ{)W_wY!kK+1oA% z6>`_p<0~)Sg+0M_3zgpc^aV0<$*LI@WtE_f*7n*mMbHtG>jNE@Ztekb>XX~`wkL3&nG~qt@ZV_Olyb71D3B_Wv2MN=kaR5;kb{N-~w=%3K_Z1vK9YT zN`U@gWge8wOf;(D)F8EFc}&D-;QQg0*L zDq_C!^J1hFxMC`%>Elu=UAFN<=P=_yC7z;48a?Tb_$}Z_`{r;92=vwrDKSW#F$aoI z^vTpV_>T`*X4G*Fo0|g;?ou$^Wr|h+#_jfMvEEy~CyzpKGwD?31aaUM?b*o=^}K4Duoo z6dwEiTIZ49pSeunUZ|te7|*?ACSi8AfBWr>O42hprjof0aI;%(cXk>dP}zd?c9_FA z*Dfx2uHTX_x7WGt%zn()(VRE}e^fN2X@~i(KoUs|kFwbPQ{CXEnh!r9c!49_)(_gGiCHYl&Nh##WOqDqu+Pfty! z7WQ48l&r0y7-(t2?2w?qx>u3u>%~RFx1>)IW?&PI&bBa3GyLM<&TR zYNhEde}4cBHxTG0&;m*}@1~x#G?lTCV$nxp&ORG$+_KnDYu>m3RR#+R!r>B2q|k~_ zd1;ufE(S4S+#FD;i==*@)A$#I5R^9)t{!AUDDiXmHKHb8u7fPv!`+6$&%&Y-|N4`O zABN4iv)9*H`lJWoqWVRJDBN&>d$RFuKL)QH?ifK{eRg^ zWC%dB%cMQ0{+p%l1!MnB?nO+5aY^KY&h_vZ$T%2G8REc6nv>L`!3F3srMuR9Vd15v zdTU6=5fmR6lg-5kOgtsOe$CWr1}CPZ@By;a(B2+gHXvQ%M73df$)BZBL;7HPOI0(i zY-|iQHC>-V)f^li!A0?`F0A@2@$=5YPkX^LlmbjjN=Ggpe*T|HNmD?3A|fW-k>^2n(x?ug>`+Lrp<#1N0u|z**ZsIK3_s1+?|FGpJ05cpnIvE(wYtPvadT6ZjlL_T znk~SQhVyO%FK#-l1}iJGO_Aj@ELUAb-wED^)A3+;Gm=XY=N{;Y($#~6mF@G zL@Ln`o|uW&82rJ$$%o;*B=!8U1wMYhB;vmww}p=|@gahR8L*GA%AocQb}lq6G>jew zeSZ?sqZd|G4Ck)Se+kdsX=!DJE=JEcLLwh-s!?SCr6R2~@|a7Zl9rXzq%F=u%g88n z>J2Ev$r(d5R(+$?5imrICE@~;kDDFM|CY4M+f3y7J@+LpSRsz>CbN{pzxjVNTDsp8HT8dD5s?LbffDz>>XW~|*=X^-Lp+r@{S@~6@H8a; zaGfvehPGjm!tCxF@Z9A*wVA_jvwoP$y6*F!8Vhax=YD|4IJGdO=U9LHcU+@zFaiQ% zH(Xgz)#a7Dd9G$yH3uTPi=W_W;Qwg>&}@2q+z$1b`5B`Ivy;gcFYw+kR0TpNvTI3E zQ5DDo71Y>RIyzc94j49IL6Q4u85l5-Hzk4tL_|b>u>X*e>5WRHfR_eg!mp(j^ZRsO z!90?WkF3!c34+f4gz88XQxk)2-^)>9xVgB%1lK#;S6x(u7YFQpc|}E+l==%%=Z-=e zaKF;>yM7!nZoh$}T5EG#SY4g-d(`9Vgd$_Zpk2AUTffOi6G58D$j**h;pMG2`(9<- zfu{zm9l9pt{O*L>%+YUERpSQH5!9S*fFEiip-n{er?!rY%9xbg>3WBt-LK*G zRZFX?D))V3oAiV4++?mK1 zH3SlzQO-)XvWlW&9QA%`t7v8G7eoevTpa>l_O`MXp?g?y7YuAyQvT2D5)z{Oj}iaC zgW+^=p@wfj{fGjHv4&=^;4?U_<&~vt!4!#{yhRfVSJWfC-?{qTC*5@)C__e@sUd!Y;t!M6b)RkT8U4dF78oY4Bnn zHu__1Y?1&&Xh9_3jE4t-87jI2q0xtz)4woY;cR+~4p% z;}ua%6gY2BE!e)GyH7-+rY9%Q27rk_DQHuQqJP=;q3@n{{oyBZzLzJa-`yN#&?9Wx zB}2j421r4$=kxgBwVynGWP1YrzZ}9Y&@<4eF&)zCxyE|C?(XinWwsNEDdh8O@jD@F z8g^{~+O!tIKMqJ%?InoiJ(dNv-{*v?%3eC-m5u)T_siwDH;RdmcQ#8&HwC;MGYc&( zJ-wxc1xCx>o(P#0tz;LBdsSy4?9lafldo@E?K7a@f?3jQj1Uok(xg!NO--HTisnVK zz7bIEF&-0)qhY*$Q`Bq$)Mfe%L<{^v z4>+)78D0!#9ic$LK6BA}!Xyp=h&AuX1FIT%)5YXEfKC{~g<%XX1QQ^%h6sni9|s>j zn_Bnl>%8Gts5Ic(Zas}{f%JwCr>OP}WfiN9e`aJlxRr9!pvnDvYAR#ix5{GrK|**s zSZ?VIFgn8`J33S?@=L)o8s{hw5fg(pIr@1}TqI)$<5DYXvdQrX5fcv&hnBaS20Wq4 zpa;Uzfi{+xN;P{*Lu6}QiU{kzSOwNc3)OPjv1} zKED9x07+5MM!=DsW_AhJAL;)7nCd11G2)m&n?Re2$f~qR<*NArEsCD!ebEibtI+Pw z&hml;?$oESMZkJdl7(~Rt?!Cs;c(3A=NQ3HOq*9=McPyxMl zl7(sPArdT`mE?@Ymg8e1gudR@xt{g6$pvtTZtUlMrz>vb0dVx~qzlGZU@S6FAvzy89jDdv5R%D0{2VTc#|YMBD` zG&Cp$E;%={!ahEtS061 z#UZgWD|iOWd;%^?59c~vK40NnX)azcpDBsS_rHX#SbBgB z*`F|#0#lYMW}Dr*-;JXXSYNRLw2J*s@t^|3(C32y5&86S&K0lC)-tiJr;n2oAu87& zHUciLL{9^1-(8gE2R?cHs7O7wZ3mrJf#*M)98Cj4DiQ^YxL&-t{%YDZG%$1owdKr^ zbe;~qBUqbVikb{SOWpF?cy^hb>;hhL085SYQpuO{h-Asf+xq;jAae~cXr6$O2X5rk z432nH}@sNn9h^ddykI#%BeSd9E?=Vfd7}VL~wyj>eU#XihM|zKrj%@#u z%O4v`%=Zo$vyO!>ef&@DFAB;tljJmpOpW!y%f|xN9TdCrAr$NCE4{y;D+dxAxK?fB zL8TEmvub}Ughc>8uTM-A9^FW{x6GL}>xFX#>^z2h*D5hFnL zF3_wA>gSo9xz)MYc(w2Y#KmPn*qg+JkbvmBs3P;r(PG}5W-T17DLdl**f0ygaMUdh zgL=sl)ak_N*a=ob62DjVY2hTrQg1p? zXl?|($CwMvO#b+wLuAZCGTPxU4IAC(+|>BMy0xHV0wO%$ogdBgbo2|=#>HR0w7M-& z8=7qR-pvR*R!c6R{mY|DE#@rM3seQ|P8HHq2i@PLst{B4_rt`-dwzh;5cN46ui)q0 z==^Y1$teNsI~L!o^*}e)s2Y5@ryI|>gvsWOfQ|WiBw02wIy@XzMZMelL`e!h4mz2J zNn%dp!T7R8>CUujy{kJW>IY9Ab8Z;kUK>946k+9bSnPqLCM6j4!6)lO$(n zf37`^sX?LlXT@r4)ojEQ`9m1i)Qt3N^_8W~J9lpT4vP(~EiJz;)FeT`=kK2*=i}eM zf#EbEfkk~}EZS5|jpA|^CKT>_S$)_S{TM}U>g)Z|SLzUwz{e3A=-*r( zAI*G;n@qU&o0E;8O`MkXVcZ1Cr^gG{Bf-$Wppx_^FW>=CTy^I^F~Oz%?{)j>G_h!^ z{&bOAAxVL8$mB^=jl?r_N3H9AZ{@=d1U%}LrlyPhO`Za`4qKI@O`~Tl=DNuW#5+G$ zyil0^CH`g2ZOcNdd2D*{u5TBppKa{y;NbW2p8r1oJ*$UdEC4H+oNrDErn_Xg9C~}{ zCGH+sDGUt_9F`y&7cszS5MU-rB2vT|IQf;G8DolFGdeo9G;P;`$k9g?`~X1EtCr>U^$@>lc?WCR z>39|M5ryM03wasLciHrO+$)(MLTfL4e(ZLI*TzNW0c9CdXgK3ff={uuIitLw6KMM0TUSB*i>(iCT&4V9HO8`rzUP_)sJADF0^S7$C8 zbw2oVH`EPbhHITWz}`n&|K0378-`|T(1{TrKcAMSnr)h>rYJ@EG1=KEU~Q&%b$tR$ z9EXkq&`kWs#7fFniy}2@L&O{=y(8G`KFAbkVq=rfor#mXYLfTCWLa$NY%kuN3GnbC zFeChi`z3>qE5*gcnYeGg^mzaU^<^7S=dE_Fb_xm$J8NqT+A0jRRCv2jIYfy9*H?va zug<#EhHQ<%Ju>88^^8hw=%{z#XyMz1%X(HSYez-^BH(bne?iY7k7C05J`9|_EIkW$ z;5tj(0Rd$pSiYf5aW~ggl2o}O0BnZ8U43OUnWyj(x`Vy0ko5X>+_d7W1xh^9A94kH z4d!63VS1D4xx3s5D@7|Oh#?~2ydM6hhm^PUxh(+M7ZwnFe_U~@vD_Jo9n{B}277t} z=c`BwW-V{H(8qt6`}Son*57@@JqHJMQI{!b50?B}*U_|)g2VUyTv+4nTLEr?ES_`U zLdXBp0(`bNI;mg{+LXp246#d)&lc=a%LX~J#`81FGPsxuTrbR3DTTZl_{89Xz@FQn z$LWWEz3ZzbU*4@k0z^S38L1?=pr9x;wDHUC?YSjp{%#v&Sl`85p#94ih9!PTo;tIn zEhy6|)p%`xpr2SlKDs1D0lK5K<1t4!j>#Rq0`|2h z&FE`JBBH=yQE+26Bw-e2+w%0Z{+9Y>z@A(XYHNSx(oIMVdO`tkvYT5T)DZKM9oBBj zD}Q})YkFchmooSF@4p;BUotcFXCd1%))%w*971i8`wK`0duAAtDE+T;a^!8RE$L% zUWdP8KaXozW(&<}?k`H+c&Bf%@@Hv%5cV|{IFi%@aH@Xd0w>>HB=!8g@WV5j*0WG=5$ zm9DF+vbU_PjD@SFE1C;~1S3G}VwGd5Avf0rV|VrKSs1l`7?KvRMjUp?siVjdsj4Rz z=jZQ9KKfrVL3~vcUntz*jPl04dh(#fJ*r%A-Zl-l8BI}gv;HwPH6?ZawAW7Eom4 zxrVfntx*~p>-;!Xa-+J1njc&K%D%tExBMmZ3j|Q(z7So`+fzH3kf?eMU zuQD<-51u>!mUgKQ-n(PCN2`FHzI;55X1V+ak4x&@TzqEO-49UX)4wOh7f1mDS}#=Z zRqVJ_l|8Fb!}B95q90%+ZqzkCd@79;F>L=+%2q(HuB#CB`@m|!rsi8kArgVmiwA!H z6nDx;-ShW@U9pKozFGWkNPe4U&XZKkJjrEd0r={-6tbO;vO!&kM~46quB@yCePtdj zbfC+)Z#UNXPwSt9A?n4YWp&Qa>c)ph2kfRzdckiNW02 z&$&7Gg`0Jtq|fs5ED8s2_KJ^d`0tw;fXug~IDLKj_fM3zVKo}+F1AwYQ+uj4ppf0$ zJRMoY|MGS~C0$&6b#F4ekH?9ma<=qMWQR1jp*#vIswQWK8QkBq9ZpaeuoCoSzPYzh zkAHg%;_-;Q4?hG2+S^BQ9V5XjZz+Zji5*a7`V1+aoN&X+ zz);~rDM5OT=rsPYZp_gt{dHb85cSy>9bC|UZtP{>@_ zL6+tFcUYoWKosZXRE3uyI1qEqQ;{pAr0UjM@`CSODA5|C%q1fO{02@FF=`K>M|DOe zOl6}h$Vn=yss#O6v+T+GgR>P1hd|zWaB%R4nQ$hJ67wZH`@r^Q2!6=3T8pl(?w2Cl z7I@!x5;-p0AA{Zd;(=SeGZYV?F@?g=fW^PM4I*sc=Ls7~G5e z`g(j7AN4ohsd>@0To}5b?!-&YK z6_u=+Oc{b{hIy2UokPXANc9MV%)`hT1@^tWlAba=L^rai?ztdp~CNWu~~^A%8+C+mX|X@Pp9q9 z-eFZ5mEn;QTI0?Cq8~NuzeT-_jEx)~zGLdQS4CNR(!$L#RbZ6%!y532&odJc;QYG6 zo!7n*zYWlnvD=J#K@_)?4>ny~H92EbE{eJjnfkwRW)L6znHpsz?BAY-Dqdl%AS6^) zQMQhalJqG}Zf9sM0Hdopc3kGW!;cuXk&stW=H1((qQR5m;RIux%(95lle^-Q&;2DO zh!=b1v(cMB<4o8d?Fj|cB>OQcEbh28)q63XO3F7X55q*kizov zLdXDw=s5%u(9es~9f~rQWC9h1uxpup^}NsMXc%ZQaj{6P_U{98KBUyfcCCXh4qB0f zwtK;6P;BCLx{??vB!0WPjx~k3*8?c$9?Y;;y=IA9e$HIsaxHmXQ-4sfP~)THK^X=-9DlA3en321kw<_3e%^etDn}0PmR75JH4^FPWV>Q`zctQ8nVE&G*myr6 z-Sz=NO3DmpQN-kKx>y0wY0FECt1TYnse@tA44{w0QWW@a@7~{MKlAhPfeMrQlq3Z` zb(OQXbbaX2QbYtG$+br(FCU4-<|Xw&u7qX*cWCEq129u(D_atL@~A`TeZ1kt{>&>9 zobub-elBasMYoKcmASde-aa->sDb^T5>)T@%s?#DOE*42LA5-->24|Na@cv8y$FAV zcz!{_cV355b7use98Jl|^oy(~m?&ry!^8awF0++KyQEtc2~D2b?hVfRr0pyS50_D- zb3fPS9+~_Rm}Dd+qf2Ob(XxX~xVn;Vhd{*D?}?5pC#roV@`{r_Nr*Z>BO@uJ|IK|< zedBKar8ogBtEi~(olz$e_2*M`HF^RHvK8i* z0u4MIJW&3at>c89H<37pvJJD4jazUK93S;KOL)<^>PT7>S9%K8hT^s&^c55gwY1>B zd}(PxFeN1-fV(KPh)al({<4E(KP|4n?Rfs-SN7#i@Y#FqwdOtNH920Q zPOu{t4jFjlNCFG%l8#X_6PNolTS9@nT{N0EYlLHmv4#fo>-+|z7PxEcdqDJwo`Qkj zzTL%(6Qmfpou6TNzMBsH!Xm-KCnc>pDl9bx zYQmS2wAG`deV+Nj!8hMS@Dh&k`5mr_=#x3C8%;YV_hGrjNk=59^AcwhyMx5BqIzSp zC1Tum@AtvHelprTIErZPTUVZJ(xlOM3Iz-dGNp978NgWpk&8c((9dzPTC0} z+iZ&G3i?4H{yQHoUfm_=fy$4yiIJAW{X@+fr=dny2d~Gy9iVN%LkrlSzxg$k#(%&v z9-ZJHj}sq)RDXHzpmAoGkxwsnc?e89W8t}~bb2sQhG;&ZtMo6I0a_ZbH`Y*9K&Pm> z+Y>&YcY-LM(hFs#2@w_+NLsV*o?m++7eB6Nt<%kvI6FH>+LZ+_Ra`&>c&7Dbj7`jX zIy>8%Qd5Vz(GF&}W`F+tY2e;58x;~UJTTzS^68z`At3uNZ%21BA06$`CSLmbw%w|& zj|E|PhXZ%ShYv3ePPnKK%P3))1hUfd2vm6eAvx4oioJ;}*}&mkQd|ssIuCLqAVceb zQdvD+JvcbnnX~EFPOg5qs~Uus@h20SC`j%0`Kh(>(QiPl6gXgcAVjY=9d~=nPkU+L z9wLWQ?)_neBEfF05%|2KTJDY|R`KNIiWe6bSG-=bGs-YcgNhlJ9KQgkqWg`PKBn}x zj-cRijW$RT_}qd61&B@hi|+32mHqU=^9jS_ry;xlba;m%0N^X}INMNx<`#LmWj(}AAXd5S$K$z8G|Jrj6^9uI& zSRgFYbKwn*5+2Ja0+z)Bhxn3%Nl7#D| zWMvIs=AWMJ1qBFeU$l4M*nj`7q^2f9;*057ccg`9g;a3D-}2dP82Sn@toYm9wND85 z7>c*HOiYXc0s}klGf8K+?|c6V=xMuXtztHfC9km^JUd{1W?omo{B?M%~3){aEo{~?V3o&?kCet`U)ue=^!eyzm^fywVr z;*kV>zwy4^btnj=^O(H$+c`KW1q=tm>syt8n;)D$z)}!L6Q-%D8INNs@=q2G3CbmH zdBN%31M`kgCosK}dFdWG=QCRxI^vO<%~r20#y|m#dSc2*Iw#^(RaVx(4j4QDSxShCFL+V%)~yd2r`Ix)I`rF3IaYySHf zIpb~yhEyjN(vs*8w5SH#mZz<1+vnLz zHISRqQ*}Cd<3W1HqS<88rAXBBFs!9#`{4A{Ee8s1sD4v{TBpMc4Qy(cljR1CC2MoN ztJ;9c1)!Mfd0#NB2j+O4q}JemEY!c*aX5LUMX0Bvr=}N-g93FtTb^dye8zLQ0y?KS zIoY#-u{xXKatk-Tyg?0v6Yb6cQ;$ff`&panJ!R%jRZHfXsDc{Yo7YY1u|Ix@b`9zA zyFv&DN+eK>s_N^L5s?jU;o*W78^05NG5Ic6#igb#^BGnz5CnBYE@IFV6>g625E0-z zI>l-PlM4XD3`{S;Akk&vbHxW*h9<{7Bd7Sq$=fvzKv2)?9iUA}%VH`#ui`2iL!RU90vy*CaXFd(IUW#~mQw z+*T*XSpjiz)Y3S=6a%|`&h3dL{Q09%X#;y$!;qpYCj8DC#I+1CS{eOZeKwDnmVA5+9vlC9&=NeodKLO4Rt!R` z#3@h?NPPnYg+Rrq1@1qtP;WL-j3ZvV-OIU)-ZL?j?V&`0qsc$4&0aSkdJs)PANYym zXvLe0pEbKN>$OG%ge9W&)kaS!dbgoIOO^!s_Gc-nS1_-t{oH{A&D2`V*-uPNaJKvc z<8dJBk;i)s@e5k(<|tcU2Y5|^6M!|o?a*jbXuM--3Zu!3{5a30MAJ)Uh@5jrtH6%AR)qbKMva%mH~1&w(6dX$uT zP^f(aecasK^64BJ3Tn7&ZR|okquIT~{hgLqEu`KEiY`|_zthy0EgTRM08z5~<&obu z7724|;lw*c#c#-a<3p1W`)xarPr$^;$3x?6Tp8B$=?M`X7w7Fz62DPjR-n~2V2rU+ zF_J7*)98SynhO>czyPeWFMd4)yN0@zCm|QVkJtSJmM)ZtgD}=qfb1kxW3A^UKZdfU zQnXN3o?i?1h+-`O5AT{oSVphQqNSArxYf`Rvw5(}t@+}|{%ys&cdwVXR-BInyw2II zR4^&|4*Vg4uuiUD_g=FluVKWV%|~hhYiDanK8eB0L58t0`_9-AXl5*L%%R7Y>!yLTh7U>xp37cTDwh~jm(I%Q z{4__BE~&eRcY~kbP}AM^fzbZH1kv6e@PbfsX}Y^h5LbR%T;yg|;-E48HA7>TH$@kJ zGT($dh5jh$efIjk{Op(_RFP~f--OPik=94ThXNe!CChl-*M6*o`~oh@ln_4aIqBRAHTN48M8D{Z8UOMf^o!1YD)leyi`e? zq_T>mB;({a+on4Bw;y@$a5W&UJ{6hhbpU{+#dnHjWnmMfMq_)pD(6w4c#+ZmX|A;g zMRIb=Wb#_iOO!ag!q*QGG4g39?iA-Ii9Sv*Qa?sP)#P7C(O+pg%Tw^Xm4Ia8;Sl^_ z(b|-pJYRS)j!|7XF%%#zjnS^Jro`4$){0POoU0ZtU>Wq4`x zCm3?Za9oDggsuK5!u;ixaF>ph14l#19` zz@5|+^mfuLY4mFxpfP)F8Ko-f$T$0#1bUFP*l}+P_MwcAMmg4$s=NVq4sAbY-oGbbr@W+hpG3 zCX>fe$pKhU4yZSqc(b(&+ehSYmGN|Bhm76T3PlP&>1FkrQ~2jv?eEoCGYMbH-{@9rX+ zr)TJw(S1cHb8z^)NfwKaA(mNhH-<<#(f1W@xidV0F)!ygu#<-;*x!__ zjzPrZ$Cc#^9UmD@@dz}Yr`@=bJu?2>DLf^Nj8#f1%C&_^DokBUvUBk0addLVfIQ;9 znLqj$&Jx}2m(O3mT=$#+iF98NRH+Gg@yj!6{|8+O1#2AKp{4(MX7H`3yJR(~oond)ZZ={n3rj{=$;*EZgmmLeK6k zpVy@#B<>Mn6u6&oGrDXuitPk6&&=D#8%XNGbj$q4`wx8(!AB^;=eXP7jc4~bk8WJY zOlWuEZ2&5;(L-{vvud881T22xu9zqaZZ6?*=CiU%e4*rSj9@spD~4+uhxxa%iiANF z{?U1LbqyH!s#vS(c+KG%j2tV~RMj%~y5}`pbper-%k`c>`IPrIOT3g` z{Guoy5egp|T?waK_&~6@`iKzlux3`A5a1BnqfN1)cfeZjYr8#?S_w27YikDmjP@); zr*7=UA1oBDpX}7>?wc?K02G*)a>AE-=}xYwB(*M!mXIf z%F05*hw@R4e-tG9&`oJY@XGnWyj{bkXLFoxyA%_DJe^=-{(NvixVdFA7g&P%2e2|W zKBU+nDI2R?c7+Q#pWHv)K5@bpQ9?GKj=cr>Ln7A{vQ|f#qoWv7IKa}@3I{*D8tG`R z4;S5rqoOVBLStG&)L-;77k(Gd>YK-P^W8m)uH!1+Djs8(kd!!2c|LsLzn!Yc+$uj0 z3(MX4mSy(IvinXkCxSZd>+N-r0RWUr^b?a$i4<8`0C~E}?{&Cf+Z=UBLq`X@s^27* z>_e@5NlwL9CW2+s@hdeoGSAzV<8KRc}R=Z zP1BCTj-DAcVZ`XE-E5?-ttav1Yi(GKZbo$}mV+&pmoKo`WN6S2`YoVz=3+$E_P6s? zM#uE6c`&q-_q$)B<)Ps+P-9sXvvcI~ZGy`{SZuLbk9 z69+9OanRRs?Afmo1E@8f6wyKYi=>|C_~x`0?}FZrQgZX~Y@h!u%o|BtxLaU?ltce0 zDjJLxLuuq&j2YWqgW@pshc@;}!~6TuY$(yj)^^|^0-Aj8zS~rN@|^)zJ}a~aRFEQH zJc9;mBGNY&D5LS|Nj|5|)}M4UhU?fsQ4%8Oy2KQ$sVY?C=H@xI!03dTnhe20&)9z@ z)khQTG9c6koWv}a-E2MlDW59|8bhpTrU2F(LIhO#Jkv`R)T54N?FgfxLah zt~=&&o2;+0Bs#QqHQH*0!#JD+j>AwuW?7YKq<1hKfzzsUI^wx9mp+8r3u;cPS()Eo zI}Tcm2v-;!8tOvvI~nkEb?AnW4lLA)XlUG}a@GLKc6I~&>TB~?Z~CUYyQjO6-;3!f zKyWQZcShTq0JG{}1T`yb?rVV$)$T8e)?cYa8teZ3Yg<)?G26S=Fe`0Rt@ajN!X%le z8}>A;yQ79dP8Pu4Mz(}W?BKw9_FOmz9l(T}Ps5`G9QbQ;q6`5yVxS=MJ-WWm#+cu3 zQ=sSq2u1r=~ceZq{-xAThew&mx4gZWXoF_EjlhSLf%=J@Sxcju?)>4uYyu7sEv{Jq^W;HW>H zxcuw52ru2MC6z6hS@Ugaeu`!)pMRD0o5gm-A4wuHc(Kl!oWH2G6B#e;Qtl{8ekCZ3 zYLBO5+4%^-1Lsq%^cMMFI$l<;f-^bqIXihj!Zot~8q^An+Isp+`0z95|m(YQQaw zw(0{AXNEf&(gOw&C@6PcWmZgXO11VLxm)Ye6BcO)B!H=@$>|c^cXZS!^>9#{Dk|s4 zh@`{6HO9BFab7*L}o*|i2KxYSk(U4VG)Ca zIh!h`Q8}bJBxiRHACts>fb;@~CS#u-u}M3HjF>lSBMoUg8BbA@8$G%V0$KJI9VpHOS1=RrjOz`P=#b#n`;I7vX;>sOyzI{_D8myiZ&4 zY|ON`KWlJ0>9XVkU^NjDf7|A#cm91VV0Go;i5i_A7d612uAH3HMf2M!vWInR0b_N-h~{`Awl$jvx)zfb;&cik$_w)g zpsu1-z3m1IwFm3^u(zKinbWMgpy0zf!4nz{0~3SR{w5a;JM3-OUggf7W^OYHcc3AH z@MM?l1N@nULMve6wAGOqIU)4pS>&0>-~xMpf{t?BPqHS4BIc57vb|Myn%uNB5}iQ~ zBz+5EVZUBIuYz@+dCJif#)a$-LL*5C?`Kt=v+)XfCs_F3m7jpC@#b6*W>|5`r50ju zZ+~p~s~qC<@~DFqvd6{r#tv5(PaV%!jb!YT8lpK$80o_s0JTur<0pstc6q-&!_icq z7Fh)X%CahsTVY$_NoPppjLkMb~+hL<8T|Fbp5A{y`y=;DNcV#C|)c6Vn@?2quAt+iZ+w zBMMn zj)N$I?R;6|a+G+8aGCoMPVS2wS4CeCwZZjJ>{$7KfYYQltX zKGbJ?Db>!*{R7Y?xPZxhY4{Zws~=$%N3~&BqksPNbRFtvFZ@zLJyxg<(3%T)k$h!2 zoVwm;ii-SXl!RC~ZEm604LnW(iAZ z6{Z+)W_&NJX|o(0k{u&5&ckhbIZi37@g0Xc*VS#3cDyb0pPHU(8-Bb#U>YSu@aA?} zpTrP+f{_tm62zc^tEOYlPhWW&ETaD_F=np!SD(ZW`S=TrP(&;p;>7KCCHS=KDGC>= zZ);X_)bJ7*Eb%+%H?&}+J+Y4Fm-v(f3=x7!jCV6{;~J>cEfR-vOuiN)=%c;;bQvm;;_M0Hq1O zDZ+jt!zq6_jKct01g5-t>?tC=zhOMn-1$6}x;D+LvQ8X&U0uNJIQGLBbx7A;vjCe{ zdM!}QwfC92l9?b#R7pw6LeuRVm|5tiffIXTw@*rY#1qutup-~FD2d7jp;MI6A3orkpEUf61Ihc7SwOQ9=p%><4TVHS?XmC# zsp{x>%FBbo#>gK(HnZRzKpG$-Is>Zpyw2rLT0(-i;wLReHBDBTAgw6|G#TvW?se}M zJ{Y_w;Jg+60nMSQrTOO_3gsP`s~_S;0>yX3GiTS6P~78eiW87&S53}dy#m5pOy&)m zr)12jh5tQSOAxQFKN_p_SJ0IKSlQF1TK)lkN^0sVaAA>$aq+R|B!V~`A5!6!VN`$K!g z1wjX6VX%I-?D}IxZa6rJx3{}Bw(vR~bwjh>q`UEz=UVP+$)m6m%tA}+dt-pi`w#JB zeGXUeHhuMx)$qP{{C+2lzaRQT2$B)x5WgH=SNQV~8Zwr-D}VMj(WN0VjL6Rnm0wcb|fJ`dMHM#_iX!A?k)5*MmILgEE1QQsMeQ_G++Z7N4j4(om!U0PM9Ih zMQ?m<8o{9Z3kI%`Jdy@8%qO#}Yb~v_1N-sCMS2EqUvjsoe@FW+Wlzr$e*Q5c$Fds# zszE|xpZG;kZ+*7mO!bbDaiquEB@-Y)0>)EqDjZ5 z#k?Z_tR-VaHX8b4QbnH(M1w^rV5`4JRr9Jtxeb6kGw@JQ%bgxq9-+KZT@fnfga3x8 z*~4LAe=@w{Ma%em1BMjS`8|AtWgdX8(Li!GMYM=fZQ5@E6j`zaKsFyAVSE_kt+%#t zLGx%q2AN>HukJ0;WkHX;F_@=4_B>W2H^?teyp9k8`dA(oI?Y>9Xm{AI+)E4?#}wkT z6dFNDL@UepJea5uPMyoT_9!bDI|FNs9KtZfSbje83Nk@KTJGGDq(-Xl?!&D1N0>vS z&u@DXLPN<|{Ow5uWE6#j66I&S*#gPZHCIheZfd^&bp|F9y#UJ}1w|V2^V2<=@3@RQ2*E}*R6ZNJ6UT6OQGsqL z8HU=&K6<|)(rG}_&cPsv_VoM*$yjGX zEaV-#>eSW2^!iV;7g7A%U4Liy+8CH-!wQT(-d1HB1sRa)uqnxIo2LCOUshGl!p;J1 z*qsgS@X!cP>r((ppdU=fs0^YYZ~r|Kh$0aCdVQnY?VTCuBk|tSI*A2h*Z(ea_5ZuC z#(}bQ<`%jzKMy7lPmd=nS51hF2nYAUFP^Z|;w<5{l+<}7TpsTk8JjaQqIKAVRB>5{ zLJjM80V4sxbwT0>kV;l1PIis0iV6#jOig*Zr{IZv4RO-Jn8pOZ4K$vd9uOA{4${wz zb!fGq#zy}b{Z0K#;Qq6)aGLI)50#aLh1qdw@SnBRUZU}S=ay<-NZXQvNg)7n-CzD9 zdFqipftTLcG5J?xQ{F>nxtEl5=;o)7T;M?%78>sG^CwBkkt(owfim0=76vwql&+P{ znQK&%KTFe_(@Ju4;gOOlqBB#Ej1D7D1Ei(o9#${}fti_(fs);5UPS?;<~r&cfKXs} z;DZDFY@6%7h+(+Ps3p-%-cpj-W^sP@`s=>YlkVlKhjCL}TwGV@`owUDSOCxL46=!X zgNGI8-#Dx_zVmA;d8xw`iTc{w*py^)-iN?-iR@i9Nt9;6lWg)YhiBbz?9nsOnUMP8 ze)?Rq6L63`KmR%i{RSstpsM2UsIq|$G1`yskBN5kQ zR`rJk6XMIPvqyVyX~S=US@CG1cf$C#={~KLtjc7o5JcjYhN`NX9%u^Pze>^2&;aiP zg*4BOxBP2SOwH@sEF4k|JPq@AFs!27;{(@ApO)SdkVKK*6Q1&{GE9TnINO+(Q!lp+ zScv|2bz=XY-ReuRhm?p;WV%Ni>T<=^(E+DT7xjCahimT#rxQ3zI6k+7C5+jx&e|+2 zpidgS-LlqWJxrx(6+k?Uyq$c(`7k0Jg2+BFz|;z9f+Kubs;L1ENGQDZV%~}L0!zz= zhCgf4>XM1xuiitOM!#wCzrN;(E`|0mH#av+wz3Pr5=y- zHuu%NNz8yBIV3W`^4!Qyx2Kw(HUP(HfE7a$P6*R*vRrAq($>*<2sle$Ep11JhCB}s z2}|JMpFeU(Y1E(E=OKQ6V@~$^8XVSEPD*NDvjk^puS{ke7ph-Ri1|F zhr6)z0}}EYf*_XjB6GXooxmec0r$2k-d-2S)~M+j-qhr7e=dCNdw9Wp5APWXl9l_RWTM zM#rZ$E5C_BRDIJx8BYJi_;^Eoy&@E#AgD_t?d_WvvJhrv@)?_$05QChLgWEEnnsW= z1~iP_8T9;mK3OQmWk{Ua(J6xUdS?JE2tWqtEQzS|T1xK2rnalowo6L)nj?843v$zz zOX0bD6eD%Z+gNZGa5*_DoUu_Hw0LUlyXuvYLO35cLhXrMYC5P{b5STgW^?Nk(O2P{kb2QZqsrASdUS+>w$wF}}vwuilQ%O6wZnF(ti z>-^D5YtM0VPSge~-8N_VJod7O+P4B75+9zR4yfGs0FBfzhR=r1pNEs$TKB zi+NDjng(Z%|6NaJ|J+Q1La7jDIOb0P&9tf}EKL6VBPO2YVC$8%BnvEtjEv0P2@IBx zyAukZ4lywxk-Qy9_%bu;!+k91!bM5RF7U3rEFUQYlL(N|D@vN1{}!QgaEt_-60s6W zUC&mXewEVIMQ>SLYy?Q$=Tt^0_F31Ec46TshPS1~#ep(DjFh>#j}+vfO}?F+93CDH zQ*ZU1HL+ZLc$B*yQg*l$&{Vt#aOaz$i)O@w~oF zasW$WXs8t6g3!}!X4V|HMEy19Mz4fqj$)&m?C&4%>w9MB1&kAlR**Qcq@)SR(wJ7N zSR{UAWrt?!{sefwC+{Ccr%{*}CcfRzzkkz3!OIC@AUSQD>Vii?a8?z0+956c)hs=s1wmh_&_UUXAJ90`lfG!m3VyZPzB-oWzbNK zBBHlC(gTt}3aOxPt}ek5yiOJSvRvv|&NB1+zMz7#+5;tSQHvgys)!H6IKnT!O%hg_hiRcD(-j1T|3I zsH~t>U(bW!=ElNe5BLa3FNp;on0W(Ux{DVsKYU+WA|bH>4PDC0o~Y}v>fHA0jsWl1 z1Y>mR4@j0stgUmlyw1Uaf#G4_bah(L&DbU5 z!DHm0p!*Qwd<{iANh=RN^?zM$IZ45wz7aqhQ4^p7FZsR(1u^#q$-iuGgAO?H_f=$- zCvd}nQpL`!RfI=?XKrbEEuj`;Z`Dsx!%H$$ES?{Ib!f->?%k(OO;s`Y5n(ET>fXYA zQ$~RZS~Ar;L#ZwD|Md0uDt5eC{Rp_&svsfEE~6|hGZ4K*-rf%2Y@mS{#{bwp0qV&e zj)s>9N>}MLEKJ77mnL z)wz6<Kvh*vULi_)8#aVQ&{dEOv*-R2 z-{1`@iC*_Zczdf&A>a(tbRL?he9`rKxK8bhqXOFg=Juv;vs)xVGTiK0O@!hm7%Lqb zanq)Frl#sN9uj7ygZF{e{p}J)Z~w4?Wg>`{<*;I3r~k(DiF~R4TTN~mZ6b+1sRo{N zVBAsi0q^O)EaS#oU~`=V>CRp1&-@%1bmITp9R2(Lf958?P&(QxJ2TzW@XNoKgY-hh zL}4ViRP3&?oQj$bGAMY`;D`@8jj9N1CMTzW>r_6Sdtl8Dyn%otxV2GOxWl*Jxq7s zqu+HC1c(1M^Df?Xr<_>1m=u?k96$MxDGF=P=n&cvWYfSZow=dgFKD#Xcz zQF9*FPp4Lj7#skjG&c_h&umzY**SkNvqs+j`jLK>FLGAbKs=`)Nnwy1OP+W4X^t{#((TQ1f0L@NHjg3De=#>!C2WBvzZ-CT;hL(L}4{YDi z0vksge2zouoI9s$*;7?j_Ghn3TkeJd8$(NLp;Ws8IN%sWKLvDrVspn(d4r1!AU7t# zW8$pdf|eNa_V4DrHrIG@Ca z$_990(9*Yda%9vh2 zclU2VjFzdSMnj{c8+dM)-H_qcatU{S&r0|31QGb|O!!$>2^tOqy*Eoe4OBvbI1vUZ ze_Cp4rRB}?`nsWA2Uw%Q6cq_py}B;xPhuiXY{ZV8%hO~nyBOH%T7azfl>0_GG%)x4b;AnU||Ku zm8H-9oSc0-F*q~`90EhfwFN~vwN67odfErI%R=SOg130gNPl7M+S-mzLheWV82kU`1I6{P(Kg7wYER3AEa<|I@DGkA;d62f0dP0 zJZ_GPg9csLIwvP4o|i(Fydgo z_zk21L&j;0(V_bL+Rd;~-$~gN9*xjB8VwnliQZl)#kV1F`dELOp10WV-RccJcxzC} zTAL$^idLKs_w7k?zODF*SS13)HWXt}ryjF6W0$w~l3{wE+#_;gLe$$>+M_RweMiuqS zt-e}nEes1ffp+ufil-Z340m3h2S;twj8d)7XapM0tD{(_2O{-6j|)rJm=#cV40I1` zPJ^ovfUdjaoRL-3Xz)~@wf>sfUa<~XOJL@PaFq0Ejk9udUDE{sM2mLkZ)ls7V>$Sn)mPfkVz(6d*eyMwc*z#6Dl48;eZ44MZ6 zWfELvqR1^kP1V12D5jp&e>PbE`I-i3%l8lP>QGUw=$88ofI|dIIY7x4Kws(O9{N9k znOxX}NLWdHd;+YJ?`!!K9(Vyq=kK_0-@?|nl}yjfe0Oxb)jVJY#ZbU4Nan*_DHae2 z?F`nBJcSe(sJ0Z1y-lw5hm&g1MAD9|ATI^23s!C-(Cjc?(FHJ;hxtT`sB)%Wq+N^( z-O&PYu+;E0(97`z6@)PqjeVdDmBO6lam}W!9z=#iov`-e#B16Ieyx!X8t2o#9 z?^QYyU=J}YbD*@?hNibr3$1{G7M@>F0BS%gs;dpDPeC@H?2Na8=iwLQ5c1bowyv~u zTD>MfKq2xe{pYv59R^T!s5GH$8q=P)T7(BltiR{x=I!oR1l6Q9kpq$UAcxp*_PJr* zwlDuk`U1y>P&}X#2jFY`YjFpOw$o|HjgQ;|n=!9>Cx_?z&xbgx^Z%rwLLy#o*uks?ijE_%niwKwH zvLXMTLP8yGZhv!=%X9xtXH4ol#&?X*eG(_6{7&TepHN$~>VuL2;z<{iFHjD^Skeg7 zdIttd0o$$oy3Pas4tbOF`}zCE0+)?hEua>=THAPV`q=hB~|r6=(_!zCOk+=o>jyjpWMkc>&ww%kV`6z!h?u_-q< zSIGtRRc~%>iXto;Zu#FV$Hv5**LhT>T(7v?PxjG>aoQ}2Ln)fNKnvxcX8E?ZJG^Sv zfne$X@-=!RDD|5Y20AVwF3%PhC*F;%n&5=pja_kSv3?`m5q7 zh@1MNM8(^l1Rc~b}#P#w16Aq zpww`U0h&@at&T)Zy9&(i}$q^qxw~``VBL zGk4;sRRRn_C(=5a)W^vcyqMl!&V26AMaQ-t8M~aP+FMfSc&;7Vua)k!OXi0T6dG@3 z`}JN*hOf;T`kEmDNR5=Z#&(qV;_$>NH2E3oriISt5j!0Zfi&_UipET+| z4HW#y(~CB_UbmaeQdlX~t~PHCV`qD@N=fWqq(D5@V|IM9De!mP%Q$`Xrm(4WeQCt6 zm-<}zg`wd#1Ct#Y`ak~>8Ahia?ORQivJ&Xg8Kagp#NKCf-A2KlBsDhe>}NLu!pO4& z(%)Y0a~3Qz8`EyxNt96WJT6BdT$YyT{2sVcMScTcpBC3g1lf*PEcrE7IS7nSY9SW= z5}JH9UJJkZE2$=63=WTOx)TfR$;-}4fAf6T zn$v{}!#WqDuR^QaKTod$)Y6bT^lM1^9nToMIay@uO-4HB+K(7BlS|B+X)se=e*{vW zfkOiKy{CJXoqc~EY?FT8p2qo3mKx4E-@lrPPS7s*uqUH&Op54AZ%()xlD1d=wiD--T{lD}rEJlj?Y(XJ*ZP>mB)pkX?=f;@Z}p(#bDEbf z9`=ey-+OuMCw%H+cRwXH`4WmeJJXCjTePLWQ9`CPn=c!Z*#)mWUc$Y?y&O65!UWv%?miTF>Bt%O zC~?Ctt=yJvhC}4IA1tSzwX43-y7Fk0&KL+@9TPr()3(_N&DK~ck$t(*qSW(hhlCv7 zJXx50c^N->nrbkQFUQ%u@wln0G5w>7 z>1xjVQt!Hutw};(hKr9eltRK}Ck~V2M2{)@hWg+^wMp>4-ed0O`vOPRGyR8n@6z;- zk;caD`FIn)hpnHc z#rLj1Z61w}63@PCaolP%ejIVsC)My`rbInmv7UB7SEEw!d^Ty8Uol%FuZWRIbK`nS zFOBmQXSFySYY`Z`e6}OJJ|-zMWavAG!-{G0)|wjD&{MlzTWDI=n+1LKD9b8px1S$xUXHyBeJ_ zY*8TfREK!X61_(^8uiMZ?ZHzcyfRthwJslA;D7Ii)1Eo$@ENmi1RHMW;mDR9gQHq0 zW3Qolz3lB}X&ACJX}R&Nc{EGwuE6Vx*pLGoGDyGMHBL7r+u{83_D3zj8h)+U-{V?p zM3t=g=wf&*3#GVnfk$Cej);-dVz?O1-HC%q`|0AtQQ|A2pqTf0=nKgr%963jfpSf0 zKl^EtqZ-#tV_guW3lPz>UHOzFM0MuJo~fp?0^ZkTrpexN5e?=b2{5F)_n3a>CfC z%VkK#i~dKs^_DQwc)0DJWhaHp#)ZO}M~~gLh8om8jnn%9-MkCFtrUuMovZnD_6~8S zovxn)zu2pcvz#svTu++W^n`S?EmlX9zqdpuMI{q_DM7U{wi}^+E;@QsWOLyL!0xd> z*!o}YmJN9l zIcU+l@5rLyP`&!GH|h&}bMMbA_VQ`z<-umEVC(uk_G)QEo=J{e?(SmcaVYC6k5k*y zrno7`;e7nV;pe}Kc-}W6JM;=lbt8Q8Hgc?#OV7^*rk7m%jYO(H`Kpp-Rf^O_okFh! zOOXeuq0?>F*`G0*G8vhJWg!CEqEt~&M}Hg`BM(`_Cfs5Ai10HTiklnV( z$B<3Ah;qpNSR#ytl!-*G@%3|$6Yi!BU+Q`t8rmW&?Ku35*R#Z{ggeLW-H(&3Lk(Z7 z+9%B28}BmTS7}`&JtaIzKj)>4H-WqS^6t@HYz5jkSTabx!64G@Hb2ZH+|Njv4iWVo zq5f>ch4xm}26fz?&5KJFzmYQHWYN={QKj@mLmWnp*TZ(q!v)OQuaS+pkAHEK{`3;) z)6sq;=6*l0yPO6e%ircmL(P2jeU_htP@%A8wermqLaf&O#S6KT{<8P;@W&%N^Gw-Xq#is;E8vmFBnl!6gt=ib1FKh~_$3=3R4T+}yYV z6*O?eaiu$>eXvtqSI?17n3KYl`)x`Y(v{xwgXy8!uxouAQh$Q14JNB7sJcZ0hE%qi6HIdT?A%iY`i1*Dhdmu2Q`hkT#n6 zr$590Xn{U)6RYe(*zHkZe7X*AbzE-Iv$ER9j)v2c`&u*}n{LL$@a1xkl)e<7KhtpQ zHF|>D?HI4|ci$wN$|S2sw#uEl{?9GpBWf21ke;-M&*yR8CY|dAQ*-+=QzJCT6&f-% zUuLOw!M$lSO#GZ#&P`7zElHkknj%xJrW%6%89+Ln)Xq)aQW>0crqg3+IMO^kd>N<} z)<$<^r{?RN?SFpI(s(tcvJ(Bs{mb&}&dSJwF;61)V}>{GBn{kuJ{6y+%w1lgIa~d< zl+v81qg=3?=6k*|t5zV|E-FMzabyUMl=QV>dQ2Ile>%suv^UtVd|B<^tkCteViIU_ z)$cw{l>nR2i@M^fyG63Ava#y*bx(&p6ms&urOBP=xyP{(d`<#~YwO+A&M;9a$dlNd zH*@Is2*gTfxf{;nt%LR~+d6*>#HkDe_Z@i(mN*)LcUJwE7o|Gf=C?6DC+u4!`*$r0 zBbCSq87(M1&dXyK|9$Mp z{-)B<$V)|hWufNz7~zM)ZTAARbW3|=o3tR`mF}tE$2)dJTB-<@fSXJL``^C<1@-^^ z`Oz!hudxHNv|#v~hB5PjkW`WQ=)4F;4)WhaOo@fL8!8lZz7i4?l--nl-6A9B+L=ou zTvE1jKbKj3X^ADXaxo*tN7UkI8Q6)SeBqL1eTyYAHaUkM$Qt^|jWGV1!4T}eQw_e8^z)T<*QMmSK#;+<`P9{e-L=j~bv z?-t14q#g66G=ASiv(gc#!giRO5M1t+5E2NPHkth3YFA&fJX;Sn@bTN+UO7ykjs8as z%>*o@Tf-PKX6s7sqG}ES>GSLJVUHib#Zl(|XeQiwKK%TDOuc1T98DK3IuJZaaEIV7 z!JXjl4g-YX1b24{9z3`+xVsZVa0~A4?hd!}e&?L$_RpT0?yBlttG2A#yWg0jvBofS z*zPs~PVFdiZCgc^npHuF=klV#03mxk>ATVyjceG{-(6pF9Hjf6m*0o>^)*xU+Zeke zzJI@1UpFo)4Lp5bjjm^f{J%N^-Su-v-&mg~U&JXt>S6wD{DJmo^^YP$f=u)ALG;1T zm)|?oqz*@HCb3jcHeb@L-!EwBro_qi37j5eHX7e1D7rsy{9vM7l1|``eh#TMU-bro z{3{Ve$UvZOje_>tqS1jU%J(CwPFq}RK}85#&Q_ntDqm=>DsaisIpt7@Y?2W(q~VLA zsWF`EYd%p1d|j9-fkO0$Rxxwh<}hI9Pba8vA+M1ZckJ%2A3e3MLk=tQFjspgm);Vk zOq=syK1GXR*1(*fm@R`MU}J~up_c|xu}LQTgxjS<;8IB&oI75SOzo6DNIj?qo%$Ye zY!QsE^IhGMFPc16E8SFDbeb``c8+jym1^Fsq_AStM2#NxkGTy*1sQX>3S8N^*5MQ< zEp1J(tQ57XDMF^>&U)zBx@^OoAudP00eg#yfqc>2BRwrElsRiE{c~U=V^v8SVP2D~ z-;%_op@lqNk9$dJ@zr7=a{FrRn8vKErs7$#dk_9CWAG2p($H?8O3EG4Q+UpUuVaj` zM~If}EcQ=ozY!E0iCb`OKC8Lfu+uROrCG=PR&0GxjPN$ay5qRpGg-PPaG>bni9)Yz zu9Oy-Z|48z`!g+t`90T`L$$Y3;AW7p}n#6Pdr93uJV%|jwQTsZ6f3--?~piewk(6^`gvM_4M7A zjfQdVg`?P+3FCW~jrMCEcbKSsy!}h7-oi#pjAE|4W>4WCe{#H->5sbVrive4dFbI< z8W7(Qkt)=^1m`ZjTBM!PQ1%rq6}L-r>&2+kTk3bjSv5ACEa2608`v8Upynhty$1W$ zT_qq_j=ub!JI-&f?5-Y48xfL6GY1h?nD6zEV+?wtxfhvRdjuTU+R>oC= z85g1t0!?t{#EJs5K4D^4N@7~GIM7n5ONZvYmB6m!I7DEr4G#hl51&wn>Ch{uB#URv zG~7g+m8p}H_ZzM9GDm});r8=CfS~Oy--AFOr+G3fOBWwM`x!9~pEp~dw|=Q62EHg5 zY4nNq+SA9jsq2w!5b2#mu3|n?V;vj_v>*JR0vU{2HK(U$j^J!Zvwnr;s8bE$1%aBM ze>q#FudIHtaOTORWT@9Z@vNZdnZ^KtKAQ*Sd;nhOtgbl+FR81{fZem91_fG2!a#!g z#TqbUR`rdwc_k~NR5wKqod}i?1ji$1k>|!DjDBdi2;W}CK|7@9MxCH_fd+9Q$+uoCH(iei3WTH zv)F!$q#R!)(C4|&7-F&gM^_FbIAz+5CZ9&IKpeoP8F}32ibVLLQ5?OX zp6S*oRkDQdApr-EaQS^!cKV_1hhMU7u{9cOn;;TUsG}+a1$)|^iS0CdhMfkG-Aum+ zBGdsSMGBZ_OKIr0n(V+(Wd1^WE z>1)`WG<}U@opbL#;n3&6yv0S& zIBl$=DMcb~0X}+xdq%b%Q=LqMgaszkk%687we(#ElxC-%f*Bf&%eFPsvm&dAe4QUo!U5}7n|7(U{ zoBRboEdPW}5t81IVq2Ym;x>MQ;+wlU z*uyEWevezIi9KcMHx+*YdK{!B@5%w0_{yoJFLiBW4P_JNDQD;I0u{qBh6p-d>F>$( z99*>=JQf)#)~{B6twWr~^r`SB7mv3K+s5iXP4l{9$IiL+D1|-4X0B*t>@8|Y)B1UK zH7sSC*jYLmTRdK$8rd+k8{^*wo*{b-;x0E0zTdcFuC{Aad_#W_9z9%q?6#H56N`^Z zXxC=M0FUXCnPSgu<4I^%sL}&KxUV{3C!MLOucBcC0BsUvoyy3+l9`Lz>iK7`NnT!U zXn}8ZbTW|Cs6+z)k}&JH>$}GrB!hgEd*6%03^6G$Ggm@xD_X=GE}NB`R~kd%+x3%x zY`*QoV=Xea}mknH1-^Ye6eZ{%t6R%F4>vs<>i-PQ&)tUWQNQ&FpRwVo}B)mLj zc5atmmseHE1%;HzgnzRy4ef;V-8LRAF*Qo3ghzr!jm~cx4HP}C@~nES*=kH4#%*Kw z{v1JmSawJ%K!H^N9DH5?>vz;lS|jeN6Gc#bIF}*9k&oO~EfJ@*dI4t%%LoWo%oG>T za%L9SUGWg{iLU+G`HH~+Gi=||&NV!NOw34;^u15i=!lIm1tocs7Q3^NE3}-6r)?Bl zWt1zlAOTR60_3WZWhAB9X8!!CHs_Ws`N3dfV~xCGt?!wcCe{$6HP(r6X|n*O;Ox6qZ@Ww=Q(7`T4Fn?v1QFM{fypf=iyH8kf;qwrZ>vDUL&o`>ucQi_JE4vAML=K=~4y@ZI0=;+nFa2 zeWo0Px4Fp?4P;;zIDQm{Jo6?9N7%pY+=poC*?olK7-sG9ECM#~hI0>arlh_GP%y## z_zj zw0znDPaQ)j!l^-lz?cf-edc>VGq&>7A5FlRAd_BIufTt|?cTAfw>KIUan7A~FbC;R zw(+XB^4t1p!+#e?YUj2lBsHO4^D$rVvg`Hfb@#*zT7>K&Gdqo_>$2a4vK*P2Nxq7V zyKHnVLYg|MQQJ=5*+krZIBsVVjJj~y{U?DPJtopA>jb_z1Av)(~}8z-_{{d#V*_C$R@vfy}lUdciqXPiaYmg1G)$wZ<44j06Q+dwiwD23}8F>&{oG@P22Gph_&5 z5PMEXo($6@PR9~;<^-6u#)w6$!S|r^Cx@R!hRGzcb32y+fjS{5O0p0kCjYO>0QAdN z@wxjyUCMzHGEu5w+ms%b&lep0*)1U2Y`7^>^Uoh~X{t@GNC%z_I?R6W$G$u7(*r?a za)Bt*pUcJ%6k#X`BfP%Plsji0MbUiW9Sk~%wVW1EpB8UC>87b* zKnVEcxm|>7!@NW|-G!LP%+=-Pj>Cl_ zozJcwZ{=AoE+}2)EAqbQCN~EpwCfk108W$BIPklflL~p}*`1v_N)XO{l{q$8`(hz9 zz4SxG=gyS$@j1OP;ZN)rJTt%BTw@wVYMMuG$LD#YY)0_)YQJGLA#Wng_iwXyWN!(V zqqx$wW9VY=5 zY;AQgfjjM&<>FjQDCAWtIrsC`hc%X$i?+V9Nt#xp|H}&)SlKWB4$D0*dzLKD8QttS zXH%EL`1Vj&g_F>xf^Nh;o|ToF_4g~k6bfm*&zx^$pRE2sJhm`AWU#8o@9kyW&zcvc zg#^!8x_+o)pkv%PKX9keY%rDe2@_aM!Tnn$<&{pY;O%P`YWidHBWwZ%v&&H?$uL9^ zh%Bu40&NicGZff>1}Q=f!&rADJmz;bAxMiDTpd^@p(DX5gNPp*jyy$11>-*)PUP{c zw;oz(eCt9}V@?gX|BH2bWl0l15g_%!$&YYquO+JNr36r*?j*qQsl?e9&oup~m_KAg zgPPkdP-)~Lal@2Ge4H-m0wl4$2jp^M@IYiMmxdKOsLu)lIH@W>T&o~x!Dh$)Eygma zO6e8hK?P~Sh4rd%-c)a0J-phdv(@!UzT)OZYJmKeDKQ>dpmoZ*083{bNyGwL3pTc2 ztX8xj7-ZiUXB^kRMfH{-hdX^{?#5HX9%Kv+`uyDpFLZb(z6udCB>~twV8j81kH2T8 z@iUmY{~Sa4j|CCM(U)2&VJCU{z10jJTxRoKdI$iI7e&wBJCo(N*8z;P^-D2jgxrxY z9Nc*FNg6I#pwE!ad;tSH{mg*JOfWO|jQUP6G|)S&eTAiyTV-HWTF`-_2s%R9RgJ5D z7?r96v>^X6@sdOU2;hv3b3(s7#i>bMil@B>=@S8cr0HjSRoq^&ncTXAPPjJZhp!f1 z`=#v$*(H<5j&1siDgBY8Odu_g*c6x~Ww_QcbsG&i?|aS%QNY}12a>=VN9FO6ft)4T z!sowOTXX2S5U}*tHwAWyGdfcME@cG$ZKNi}ZgU-u=RoGcuMM1d@__k8jSYbLXEjey z^T@JoY_CkS>~NX7Y>PJKv%ZoPFhzsY78eh+;nD-O^Mg=1?BrT(1sFAx)6$!wmtJZA z!ZG_pjGAS=8?uVui$LoUI1-Yc(JG+1$D@nHAF1f(nhxZO4P-nK+c+M z;Xj|(zE~Ih^JliQMb1d7{u;1nf(2#Ds0WXo+G|%d-U`EtkOhCt9+$#!7K&w9&-cOw z?Y9ra$(CtKNF6TetnRob$OQ%%r2%$1Wy?wyToBOBTu>`u*-PE(0iu(sX3|_)*(2>3 z@0u)CCXXOO^iOUt+$W-OLC&riHPtU-cu(y@=_@^Z4R`zi^`({Q@_l2E1qRXsTggx8 zeRBC|Gn7XasQup@^sp^3R4FoxYIvMTWE>5`jPRi5TKi^T=>E*3JC0ZGU?dP9gHY^| zbIYO*9?)&-4EJ}RwM3Y$-31K5tH2ojnTK{9FaC)j&@Ow=k(@TT44Zd>3y;vol^+%~ zfjvFViG>AVzak){pq%%>-o`kr44Tl1>r%dSTO9j^fJ8RUqknq182SiD0sMjU{s^NL zZ2PY@AjuJ;z-Rh%a+_^k#|U=_v{P=Wz;Vu9yXyEF`4q=5ARrpeEoHn(p0(^kV z^6uh(1D41CMH&1Vkb!Yc!zecJas-Nk_6c|taJkw$-@6g~+Hy$1%%k{K{|^{wLvxcH zQ^EAPAW=DhW=jz(=rJ6~4^To?KojA)l4QXdQxsw3v@rgaFhT!3)icv;?W$zPI@5dp z%5_#ZN&+Ny8xT^UaSPf1i*Cpj7d0wYXaYA6$Y_I=dqvKIK@)}5j123*q z=`O&d_HG|T8A2?IlHIRCXF{Iq4-MK!3WoMIX*M8BF{mz>IvC>DQ8my}fC8|=u?4)7 z1e7;J!TO9qMz_%;76x!RX+itfAFxD=H?BPB3o|m@)d0Lg)Y^gqi6+m7l-OUk<1R;r3#q{@67Qo*cw5qGE-1LZZ983QwtRo{}wVWDsHPvBgM3K3L&}q9a+x!e_qxFZAL}l`j>8Fm+_(+SN@Ik2uz1+VlHj%fRnu zr~Mfk*wD>7FAt9lV$EODvK<{!S3SmG^tdX~!^Lfw&!76_q9wPgge%m`G!_=%1F!Z* zGbs{=D>K=6xwxo#rYx+MTW#8AtnxvXU;lIBf%xdcmMq=)mkpZwk0{=FAZ>I0WzY}x zyjY|57D6cuCJ!88xxlDbeop4=jx5xfvyA4xT~1?~wEA@cG&s(q*|)RNIq3o(hhNQT zLXRduku(Y^+L*dvLyZW|FTL5Pteqb2bcniH{tzWi|qUuHWDVy7T zEcpZrvQH{0t+X^aV99B1)um2=E5b(dP*50c$r9QtBCLJ9)wl0ou}tm2WipV3>JIq` ztb8%WM!DfK0CJH)ISlr#U=+y&*l2K0_|g&AB4OF+jb_S9m_thrempMW$u5E1y9I7w z^DPTCfG}CkSmtP!Rg{*Z%4=zA0*j-YqosKF>0}NfPVRAeA;nekcJu0W=6f1~O9uif z4FDf?*|uqA!?{He*z&d3#Ry=`-P=imMh!zgB*AZhp&JxNQ5k?Sxa`ld44+&)x0(^B za-|Y*+b)Vy|A{58GdXZ%bGWv!l`!4$2Lk_;N6xMBf7yaIjtA_X>YN7jp|XYTKMU7L zd%wCEv0{Rd{snUY7cwwMN7jOGwCC>4oayZ$E_RAFN9sTZP`w@9nEFTC z`_tw&e5w z1`qzh^yNJHwSg!V#1|^>x3%fpyo^!E?fi;jt?Q+%2lDV=*vjabM(%~S+jZ&HJKbf?8NP7C zPDs?hu@L0{+pnBakj2Up*_sGB$3&xJFFEIo1x2sMFer(~uBawc|N%~FV8$lQ!0frKjLK(|m}LL}QfeqMeb!IO52&p zFv$3ugkJ`boij!pvk{^25cI!R23INmb8`A6V~UwclNU-PA96`(%vHM$Sh z?l5TL?Cz<8asibKkk#%a6NmXq^+@A*?;UkwVP)TA?HjsyxELjTHYykK^<2rY8)Z|2 z$V=6%FtIpa|J2Qw+&?ux^B~Z zq6kYTMC83|UG22~i-yTEic}e{^=n-oaA^f?GGj*h=5aCyQ)qCbLH5#)3;fV`Sjf>i zpWtaw5=|#>b=vO|q+EHbc&XuE7@VI5)3h<7WZkuLN?F1=AGWb4kO4J2W%8KNJPz1x zBL2q{0)H~dp4)6)_92T)!ojD%O(Ytj6E-j@Fa9*gIWO;>j7vSEpTHHdYft5^lPHiE zO%w0`WA_5j&q*s8JHEWy1s`?v$A=&Nk81496zlej#dv)i)dHH*wkB!2=eoG(Dne=0 zrs9k?-@KTJFk)fn$P1R}#ms7vyB3n`aGuVet6f7c7GDZ=-HE%DYm-1SDa1K z$#ivO;M9y$R~f=&fWgQVXJ^ZOTV7QwX6QMtAA(i=PX(m-hl)XQDw!>IY5p$I5m`cMk&qGX8p z%-(UmTNl%ucn<<3fxnc$y6_ec|Jtk%A9pUM0UQFuF^#mJF)BUFYDTm(b7IIY41S99 zvpM|u&M*1z(0A{2T6NTqrgobu1{=4>x3LR8KA+@kN-10JnQ=UvJm*-R8R3wFXH?!K{Mr>3h znSV$QD!DDLaMwO{(FogoyRki@w5pBhzWzOpzS66@Vo=q4Qq8?WWDA+viqh&=Rd6U+ z+EjK2f|4IVGU6iYM}uVy1-dGcNkLnW%0jBYwahuoM^@BlwE3w$zKox92ssVbkzlmO z&r$7cY59D&Z&}{a;KUn&$q}q|LT!Iq4clhDe{Hh^6l0O|gnz2n`jEYc{&b<%q;}i$ zerw)it)GHtloe9DXE21ua`W=r`*hqb_I3-2=20KM=|~mvXOC?kWQ8joA&>9F)e6Q? zbv>u&_l&XP5! zvKgrox2U{|6bq7Mr%*y*QW0WsMC1E~V_R9O8qZDiRYdeBOF}VH`kA(o{?-p(lv0NF zUbtuO6t&Lub7`g%-X;?dPSYsJ63;T^rTg!wq+rOf4=#O%0)b719=Gc*w))31K4n7t z$NU#w{WrwcmFYs0>QrB$nv=aPy-1WD*Cu20i-25*7rf9av)^+C(Y`)MGzC$rw8IgH z3k>8P>C8GbDpCWAT3^W@<{q|MK1lvjE~*Hffld~tcd&okH^70+99Pfk5Ta^sYo;H; z_1$iKdZnGPXd{#e@@p|$XJ4z+Lcke)Fux%RDy4BW&yTkUo zefxj5A)dl+X_{xMdYn&d99tJzFD56< zZ8JOTpPuCw4RibVOnCvgwVz?dL-u%hh(kxm0y)!yxq$#XsF^L00@bZNa50_ou;*V{ zjY0b^XizT%=U+B(WY?LwP_`EAV4M(-@$WPIqcLe^t?clsm=0ChFtTe8R`_L@IZ6im z9|?c%sC&47(o>qx?Babxw@;<%H(y?636P&lJE^J~*RSs??qf@Eu7#H@P#pSBIVClO zQdP;{T9MN#k%~_D2;9E;e%e1FFlsDjJ1)Ly~*#{r&o;=!>_J3wrQ`cX{UK` z*6}=`|4+f1AY+I;4>(I}ZpXKiy-Om1ws8Ly-ICq&q3u~%=bNv~$z((SkX|DGhpHAo zcY=p(dAqSPZ?CEFcZD}hLnHgdUT^1#w1scKUza){1GhYa26Wj;?>#(QSXG%Le!OS@ zg&m*;1JbJKRKdqL8pPh!g#Z@4ES2i&^wHuGJ53o2M-Ds~8EQCIOHxYurgszmn11lp z>a8|k!vo)_B%v)jGG3~!!!>)nj@fUoGCpX|nQ)Rnk5JBSUg<(^{yQ-!=gMO{7oJ)n z!+tBn!>`mwK3{}81VoGo=m6kPlx#~sv>JG;HkDIzdjQhTOTN5kd*a+4VJgNL8&Sj- zyLM(s1J0gZo8?}ee9#O&0-B9&>Ebc1ZFRji4Ub(!=a8h=5t~LdYUC6lt#N&u zEMa-Y@bph&6YKysxb#RY3t}v;d2j$UDhp)x@1H-)L_=Q$_5bW%s;4i_|HNzfeJs$? zV+LvZH7%KXDA~4xxs2!Lt6&_xp!nofxM{DG)^5ZoHa-^N(>}PnUE}=GG2}z{ zPVFSRXBBP$s6My7M)UWji8rFc6nW+PY5+HB8$UgV~TA%>tkhk!L)J`x<&$PD9H{o3}{xJ?D zR>_y_iRZMD&z#0dKxlF2MtJ>FRj9P$$^fSqAC27FMP_#i_sTP%=bn$UT5=w!9os4LEo&&S8*A!#ltY=&Ovmb64yvA?)C9tw*)1tl&najMTN7bx4nPAjs%h{Ht zzss4s;n4n|MpjKF(?v!xPIVwX1D~_a&U%~{8x}-H3E7;7Z^JoZ5tc2=H`%yDX_cTN z$9>N;^|${n@(`PPCc;BhJXi}R+&1VPIc7SNYX!@^qN?bS-$uWlIj48?x45aTv@9V> zs(2L;=$wC&V`{h01=NfOY)R|!{5ng`lx-H1ubb@zn1eT)oRlBb-F?(+4Lruruf0Ou zj<5^Kc?m{0ChEIz;KZDMvhUSX;!-qSF=pgiCTZvJ*||LnBu~nOOnZd8Gqz-QMag#q zzhZraY|5f%FOR8(28ZjG`17%lrC=KrcT|gaD{Kr8C{bL-J}Yew7ZG~YT&J$d5s@7k zejnYTZc3AUDpBYcT1#DH(R{hQ?zA+*!y)>JWz90?>(<}YG6R9$O7?cMcj4AQ+_ue^ z00(@hkyn3ela!F1$Nyp6pj)ntP(T%0=QGX4$3%Mk*g0v`S+a+f38Uoz0{N0wNIE_L z4p*TF1DtCP|GardI-1>k4mzQMivHrkhG$IAuH%F8aAoPgwG9kgCOymla!^iEVcYX! znR|P}^poD^iY$}%@V+!=UR6AK_k1U)^BJA2rCNa8;?A`Q7$mF!OEo_UZ?7IRPWHEB zYN8SIGtIhV8$;RQfQn-NFL$iX_o)qgAHCf`J`9wEu=-=m%`Z%yUb=cR?)O_ z)8!`2lh~0C?T;Gx&k+c?{gJLo&>qiQFL6%k@9(O@ZT(=0u~_2BZ>BvsOD~uJGAm)Lg(owkMw2y6mzrFwogvrt(R?Cmzu4n+!C3N;Yddh|k7<$x$rValJQB zUsBvO(De|2BFBuKsa}kA_1=J33XS)Wu1x0oO<@?;CK1tR1-i3oTN$IaI9^ZQ73}cf8xwy7w z1Hut(pjtmP&DC}A&{Q=xd&tfUGM-c!laRl$bG&Bo(}kKz|9qMr@Z$VBGsinTNcLEj zPl`u0m#}lcL=Bh~K!Aq8R|>kDYUAPojxsn}HhLst#@qd>y2_R#eDCVy?^cD z*0(*2L+VXwQ^J|m%hGK;n+?%>e+2O7oY5IamlynIZ&J4c-|gN;AHR;vDBVOzOUceZ zAT~cg!LMB|{|qzi*j-SO5u<{JRd|XW@o13XmqW!n;URbjaxMT|p}_h5Ro}S|LT(#g ztyCcGKykB)qt|ZBo}Tbxg_oVG|Kp3VcFSWpBumKtd?HGRTO|c~VYmAa_u2rLIdna| zudHY>;JN2Y?>%uJQSTUw?i^aKA_G@u+@N72= z)1yAmPFnV@cmH@`Z&OOXC|q$K^dr7f zj^~RBtTYxq{0{Z0%1ic+IReG6RWT7?fv`qBv?d)9T zc97Ml^jQv9F;vz}Cv=3G27k?ZzSwXR7Ji+atMuX0&yG?&ZKZ9R>!`4QbNaSARv~2R zvS7IMxDa<3xNboMFjY1H;*n?n%3Y!9Z5EH|A{v8MHe~y~pC27P^Mm1=Z{ODjICI~J zo2I$ZjFk$nGs3+Qeoqc=R;P!Eq^YW|Ph6jD?)NVW3r(jzm~`8(E4@f~`~cFJ9?r7E zlm1;yChJZJt|8Kx_ht#?-IPh-av_M100(+q1HJGS?V z^Ko|N7?qhFeBjXG0Lcs zCF-bgv)W(D{<5#M`?a@8#DMYBAA(XC(5A8b$lb`y$f>?b4@4Tnesa6T$TPRO4sFlR zPZ_3At8I-s*)BHtOfB=)k$P>?)jeeR2tA)vDW%}-$`r=$vfFSiU5yLYIjpcCUR;a| zy?y<%tEMFUwEpf6he-H&W-r^`W4U_-NN4O|EO~U(N@zA_(HUF|RK0&<7C;`ZT=6n= zKdk~Pxi54&&8_-80j@THgaZO&rS!M$YVW+Poi1vD`|WuKbswe@JXeJ%VJVEAv8}?_ z8+%IZmRV_;{A3aInFM+q%q#E9VYK+TT_K6KG0`sw^E*I*VHW95_o#NyUXhQ%$L=QAd#y7R`-! zI%r-|30zLRTkvuP+e=V{p+!bSU?IS)sH!0W1#5v3DnLW6$5PO3u(a%q1E=8gTI0t5 ziedDU;3x3Xib#p1{MuvNYL$>==!4~qu3foR`oF#a3e{`mu$u?Jllyi9(#Y;6_Kl0? zLBvU0?!{2U=u#$^NVJ#Ms%z=>(?5a4aOnr(=x%^kAR>YbK`%Qc6sTGRr>pr+Z}Ahq zG7H^1nQ33n{|*4d3C~qABa1QYunA?$L3LBrInABAtv%VFb-qX@gfCMate$y30?D+y z0QcTIcr-quvCpPrs9{$dUT;s^bsS7%ludxuX-?X)WmHOEAe@ zYv2lhgj2iuVqPsrLQaHABoiQ>!_q<#;xy3>rCI`{`C8uG zj9>T8RP=hjN36Q@uHepKP7$r#pK8O+9@ne0^|23FYCNOFlnF)g!-% zg^B62e~up3Yw5=0dbYasoLkNMGMV46n`q~>>qY8a?=)wNv`#dU3wWzH6yee=a);;l0Alm*Y7(C3DSrnv2mu6Bk*Yn>9MzW6?ko zM+F&0MOoxAQhv{A{xjbX2|pI=r0!;f8L5EWBbiDMN2d#?UhC+|riNZOJNM1=Mq=gQ0}{F&ExD3@72KXeH9AZ440P&?wrh^)Os%a&u?Tw@CrZK8nnhq@DEnf zgq_b;+?H$CQM1SIfVvinc*3^=>}x)6y=`ahnT!$87Vk@QMT^O_vU$vY$bH6TciQp zysi#KNLh73;P{qAuq7P=;*Dnh@R5*TDx2|)8@%7^&F@Cfw!ssJE4)=ea(^y8@nwoD zxDZDd{Sga8%NiJEs-m^Cw%&GZ;mZ^v`&6P;Wq=+Rhn3;bUX;^XQ>kSV`hD1?nNeuS z5VCZ1^%qwbc?Y@#aD7eOw5*WS^$qPgO+Ml=*I~l;(S?6v+7*`yZP;s}GEHL2dY`H3 zqA=>;L(ympCd9`V>6s~b@tYjE8W&cA3jUC63It<&b8e>!|L)uSbRJC``VEwD@V17~ z?TBV12j{S+DpPG{m)n%HE-KFG@+4N-Md{Li?mtXH0^~{w_2|MKg_?bsRTXiJL@ao8 z=Og~a!|(u1{HYOLTtu~G+stNt;ZgkFZB|xsOkrzG=;I@m9F7kVMAJx0g3kSMd`=R( zH$9l3*JMl9k_!ZDttPupED37pHSq_{JvhS1=yC^*N?B((=H(p&wx6-3VHvXvFScl~ zn!#CVt)8)S40Z%$Q0uiN-&jjEE^(Z;Yh6#miX@#P_e3E#!)Xm{CD)JmQ*_Nk|AH~V z!L@ZappIwyRq5KIdwtKLcDi0NelD1mCnWHPm=lj!{I4i3tqR_--ysZWDQ4mWdpAnr z!19%le%Soh7EO%B{zYMR79q7WojLW8&s)e)#c1O%Rpi#@=2`2WL4&LUGz)P0L(A}P z>rjJmu4=A$1~GilTZoxIb0^;(-MVPHi)?pa9jew#IV*QVe1Fm|%ztMSL&& zFNcceEsqY8u-?ACIxur*;s!UPVtVgZ;^lAX${)M-y{3$iD9jJS^s)y{v~wZF+tCCt||c3Vz3XAPcaVwe|AvK{YmZ z_7Y|bh1K1v+LY{K-h&GdxhM^((knR08{|%}e=2nf!kEm*>73YKa{U%gl>*>as;;zL zUQ440J$Q&X?ZoS+L^_FQOF`o!rkG97tAdeYi^A`La@}8@W@l#@wpBCXwnBS#46^T( zcfyZrmq*UGIc#KqMvYJC*UGYl}VdK}Hk2lp8T6;_K zIouu`7katBzu4l-T;01mU2VAfqBtgax58~dp&a1f_4T2)P%fn!8IzEZB1x8kfx+o{P$3}kC(rHitJ~gN=#iw( z%7k!VE8t~DoZ5+z$^?@VWQtI4YJ4RL>ZxLme($0JuLa>NbI?<{)#5GV5ZzgC?##ys zyN*3AK`$$=38V9?e+c}x!vK=uF3eTwdF@a19GQ&} z33?)jqrZRuUif*vLt>33;yX~?Ifi*)JTfLC&Eci|{x?io9x>`uLagxR3%4N}J|E); ztXf7r_rvX|RG=KyPg;zK3`I!q#{F}h((UQ0pu?p}X<6#bR$5R}zqBS^b6W-Lld|b+ z_ddzLL7#g?1G?>0EO4Z}&u=81-+cSK(RATO@6Zg85Hg+nt_at_+wvgKu2?u2ygbBf zzrWj32h^34h60lT?uZ=y5!X2-si7fcO%gHlJ}a}^aLD@MhXr-J>65ETgP{%AI*zdM zye@Blxl?hQjn_-?kkpJWp)XHs@^TU)rC8e+<$(=*pw_`@=ichL@Qd@xql?$=aonH@ zUq`3Zc-A|36ly5)l%py-9d+l!^IS0?{j5)2EqQ+408xWvZ|xnB5Svzm9s_o)>jZFp zLNrTcF7dP-o#jV%N7KtSzu8M{zkMr`*Pz8t^gAb2x+7T;BysbQ;GKcJi9B5p6sVZi zKDcZyE*f?jjwwIEj-$?l{YQPu+oHMDe7V0$M)^kT&+spzU;myLD&f3EFi)Kel3ox@ z|B2q(K>yg*FgMr1PQ@llb(uwzX?N>r3u%3VDA#|y*8NH>d&YFULMYWx4J!kadeTB% zpM?r}{pz9P$s{C1DuZzV$PFtlBI4^S^4b%`D_m(X(_}YWe`Mx-wwm8q)Y@7^FDMxF zJ21dJ?sK(y)hgu~1ty0=WJn${f8*I&SJg-1aT5-Y_SK;X$H;|EXC7&PJZVHzM~{zG z$R7~Jpks-z8XOIwc_^74vGqS}IXdQL>%I(>I8XdT0mFZ0d&A<2}%SD7x! z&+GO8y*F%TW=1K4&1TZgu&?ir$sUpWeGQFPl{S5nY%5R?$MRQm-sab~m5al!x75T$ zJZ(``-8;zJ^EOSkuYtDubL^X!?<FVI!aO%O|4VGysquZ|qCGmB%_^*nEfinG|VzdPbuAz#iW<_waq%?cXT&^%FBf%2})yyGHuWnL2 zP$7h$kx(jkj2*}PrOj2t*6|W^KT%nPuDJTV`TlQ4eoqGULnPmC{$^uLCys6J$r+*6kOesmA?L26e74 z*ZAB&!pl2-0z;~@KV?1(+aCXv%D#6pHPvvxKd8$El3md-afZlK(on^{4LYx%0ug^s z!zT(f!Oynp{D6#pkNV7VZojj^fd*pk-nqysww;!}|6A0#C)RE2=-A@&&A`_HNMy}R zhK3dkKrj)Pv%BWoD^`Y>?oVL(NkBDiW^Fh!NSYu+7#2oLnP_#;FVWo5h^a z;kQYYUSSM@SE4{)Dga;NhW|5{YD)pAdRaORqw_#6X@ZmEevQ zBnt#d86i_TdV1VOL-p$!#l-{NzwaH4J0Ex3-n?EHc6SEv)V_$8{Lq@4h6xhQRFrbb z031!Vd8Trm0E3JJTpFkxw75uIIb`y-#{w@rpWH>&6><33`LcT?EO;>=8hy02xdo3* zByOu(;=FTdIxhTn{I^h!mIodx1wXz($qotLEvuB*!1U77p>y$*b}}|V**gtkS$Xgl zYRi0XM!7J7$smFJ*m0Ypq77k76D#X0Rkz90oz_@-^777#kB{$*?0U1jp--5^%TT)A zQ-dJIlJZxomrPsPn5a9OIA2fZODSeDB48Dllso{TZY@SbO+Bq6yKnMN<(iTGPOY6A zLmI+A3gbd}^cCry`^xgp_JzIFH$R4a4!1o581XQ%{Zkgx@ONkQOe61?Nj%qu*w((* z2)y~d{RFlt^K8G#6Ib}*borug@t~ghb~KUDg8`nM`?w5V?v?w|rZqLdU1$aPtpIuj zz${Gr6MGP|ar5AsQK}!WKVmEkxsAflD2BAMwXM94y{%#)1Ow^vO5}?Weh=9;MP{T4 zUF|_|d~XMvYqkp6=wNLQ&`S<6^9Pwr7%Z!a7}=wwXBi~$ri$Jnz;YYq1Ese9#|!YT zksfEo6|!mppT=L(3&j$m&&Fw0=hgw{vRZ4j^b}P_c@?cSZOR4JO7Gv+Q&ZMxU3Qnl z>2}P1!`C^v_qe`X_Uk#-=d6x}x#!b^D{Za`6z3TpO_Y!VfI^Tf7Pezz-u1dz#@}dX zY+<(6+0oZ0(X`^A<*d%ZTcSpvC|s@$e1bu}8jq>a#l^)93aRJot;4gf2hZD#7R!~t zB|rXburl`Ia3?0?mBER-K|VUS0D1U4^Od`&tR{$Ay9?Ql9`UO>Uw7YLPIN+zVs=Rq zWC~SO;#l7Hx?Y~{p7w-a?Rtps+An7LV}&1;bIvylhuPWw&Xw!qV&kKuU$i}0+3kIy z{#xUHo)d89cmE02zVILOS1jg6llupg z;agew4e;DeO-zJtQo6L6xU$c#v(yZ=ntWdt0cau~A59wC4uVJPJbl#J*myOBBZ&=z zi3E01pN}+cxw!^pYEcCIW`DQoCMO|YQocvgb7({ZEf2|hR^N^qZ5P$;*$ne16*GNT z?k_M0SU{!2NXTBq%($85Hp^=2YPL}l%I+cSqSD{rc&xP!H)6TI0rroZ;I;pqeDz_J?oHr>O*nw*Ob7(M?VTW`TtRn)c%V<1W? zT>?tyM!G@i?oR3M+@vTW-CY8bn~*L6=}k9CcXu~@)93l#@s4xG;RiSzYpp%!eP7vz zNM2!Bt)i}`smkqh20!}#9iWLUceT2Rjq|pSe8!py?aTP6fkOfh?%Nfjpl56uBRXF$ zgMrV*aqsHYYk{j@QY8xwCZ~@JK7Gb)XWOy4W4lGLqD!;G-RYc7o7%9C=~U@2wU%vGX^C*X34efSyW5-O_-?m&oCbeeI7R|4kr9b!dp{aNMfRwB&UncpZ8_q zCiTVozwqlZR~;KA!?w=dC7(F{p&&5)!9fZAo+c2D)YFz?dK;PR+Bm;@@r$oi;T^cc zjTte6e_oFkBT+JuQ(eXx^~Hj-wNri_QjHtCbAWX64ZaB``mcZ=Z_H7 zuBxZXh<%bn-r&lLzU3%~jh#=?Rh5KAJY8ylD&0$`&BtjBkdenJQs0*s((aNrv(2aR zkIl{2$FSXAykH4Z_$*%tYh>2#q2Q8)t*Vd(#;r4K3N!T zFZm_}(6=3D9$5p$=xJ+PpAnS*8hW}6tEVQ2I>@qQLfUsb9ihLqPw9J}XPQ(PvS&Fo z-z1u4-~@N*dmmqiGTnvGVM~dsE&7m)MZV86Sn{tNF`lV_#_AN}^LUB;APkj(qzV{` z9WFG*)3Ij`rSbp-fL%XNsnD^0{`~x$B(mE#L^`4byeA|jAu<*^F`74oyJ!&kDU!gi z-7HfV-`82HlBCPcaV9>cLDavEtmSyUME2v-)UNp8nd|$}HCc~o1YmLaZ^pF$WG6qW zmUwCqwj1b-gH%$5^;iEC?Q)JvN{_|GRs9Q00KTtfN|OK2p7nmbZr--BonUMKB_w8c zcRop7mg+gf7^j+S!1I`U{*%9}P8$Qf&hIwi%jDeL(?lG_psi{i>9DDCsfO2d-ae;& zn}&&g_4ukaDN^B0lP6MM3CHZiy{GT}cK+VpJtsW&N{HSsG-^>@bY> zVK&XO{K6jmiO%TXNgerm$n$E>_-9X^elj*IC?~u~BrdOiy9SYFt@M=JC!G)d3e#?Y zBxeoj!RRdu>~Hz33)rNQ5Vrc!O%C%QIhTvx!0A8w52WRecBhx5uWsN2)X8TriSP<3 zp+C$<-LXX6jAdmo^43M9!<-$S{905K`y6)Uy_TqVVRTbRt2=sxs7|DixJYpCrrv%rd|Mw zT`&Y&oi6G~G5tvD)SVAK=-b;VFyP4Q`^}8=1Z&a8X{S&AQAJGc)3YoHQx^NDW<(%H zW9&v)N^?iOhi_GxQJuRR>bNz@h`4w|68lUm*~|Wj%H53<4*bH%0hZK71Gl$)QSAoi z(Hd*V9>lJmzmleQZFWQ!b(NHUTWywhti=Hzh4IYUHdtffvZT1Ks^P+oO+R+R&&40l zcb9Fbtp+Yi=aU+&mj5l1r1v!TKTsQl zN;;OmxYQzW`IMX3{Ip)MSce!VQO4Hz>kiit-{oC)r?emlXia=Pr31E(^8q*S+t&nq z*3R9wIR5`aE$!vj_Nv5xS_*lLpXoWMNN6;9Ok|Sy78f-Xi5kf}PWe&|F8|U2a!_%9 z@tJ*41l;@C4_xbI%{q17w`z^^3+A@t=HnO``7lSe6hf4f)1BR&0+?8Or$b%w``S_W z-@Tt*8))lv>KKS{vc?Jkvp|#DH}aVs@sRF0OG#Z{B-zBZs;XKk_^ETpWWv74(CscX zc{*CsW%_pVV9Kg=zxXQDB$A#TA^Q0Geb~?@Rfm|U0o>@z;BshLvu49x5cnFc28Li@ zBN=p2wb-dvmO?qr1E_`zA!x^>SkbxK4k~N9IeEOl&ji~d_Q%_I;M6@mzNQ~jd@oG% zW^cOj_FVnZX>0fs=6-ZoX>}dA5)y~EHY)jPypL114^HQCaU97$l*h^7QTOxj=s+UzFkWChW!FM; z2?&!Xc@Dt-(Ct{ZPlASq$Nj}s=*F^8-4mge+L@K zrkytP0dLx}G}zE^;V5UOb&eB}Q+ll2T{Z9zshZV7PX)On&wBlbGqHzR!cj zc1)**#k`|aq?)>VuB&v8g~#P!x?;4VQCE1rkZzI;4c3iz%Vg5N8lENgQ)m33+3DY6 zS>NenUQvv90y17LbmHJwBR>gx5a!X<(=3U1T(gJo>o-0jbIn5{hQuqwzEHoB?(lO+ zE>?r}7?UN+gWQWv8I-Mt8J_$x3=)h_?B|;b%DRm4z2<>68jPqxidJ{z`rPSq6&gWf z%PyV(CRd<9MWrYG?8a4WTG_r%(YIEv<2TGy=M_6*T%NR!EP9%sHm}t<|JgiB(&SRi>`=L#I}mwflvdePbCoP^Mi;BIQd-m{A$yd*E&&O98VzeZOXPfd^&r>_)`z z0HsNYzd5*`IB)JYq z1pek7wu0Wpw(J$ZXE(Jp(8Fi1<(o`<9~Zp#$A((m_k!~U9?yh#F5x?~X8i>inLZEe zqoRvCf>wj8kpeQNxQTIL_{@9yOidCiZA{H~8-BM3RIK8WZ!z+wVh;s8D+Qvz&&{pU z#h=_+f&M^HuyebK(h}24F`}ply+-`c@6$iZ=|<+6tRn=M`xa`~7ug7J3R1R*7{-M6v8gJNuB_(xQ)9nQ@+vlUduU4O#ebFkpcnBhq8-jDW zzYDq}7sNK5=klC6+a)8r9|*TgV-?R;E7Lu-I*2CsuDDrnx#Z{3{hI>5xAVlz%Y)gm zN_D$rnY`C1ST6@_6jmKIOXTuZ=rnn-BO2(+Kh9ylB`Ssl@%me)>Am+Nk*7@z7QwR} z-2zNaml%3bf|O9!kb=2v2hPu3EF7W2u~i2To#P_&`j29|&tot%7-%%E+g~H0Z{Y9j z*7MmKDvfT97$LnTpo_nW+`$bE(7D!VG?mq~V6GPsIbnC?OLJ-8`}G@1KYzN?aHuF``se|;O z*TgDtoY*`ar?IqpKVcq8#vajhyOsyKLlKf-jGXKoR?jnhK_5dM9UWDZ^+bKIX6tQC z$EO!vyN|lHuKRb0wW?}rUiJ3NKi+>66JQ02rO`b28N`iwUThY0)lARlhN6PJ(#323$F9wgxVr31(NDSo) zkDVrbsXvM1J)aUT@XCln!seSl3nahvcLqcu8uu@x=9aI$ee}Q>I}h!C>f3XBC@D2S zp-(p8d#$fJnaji?*H^OmB>r5_NaiFfhPC92WSe{f6fn7HWvd< zbL&7*%S+EdXDodG&IJByd5_zvrzAYc`6hL9UdVR9Y{6r8e+@TDPEJzOewKKEH2iy* z$FA?8QkGD^*>&-wSM$iSW8G1$YdOes{P@Q#3FR?98Vvod5?@812V~I+m8LGbrHt+8 zS!6^SVhbhjtfY{{;_s%Gwahh|4HYmOv9PcV;P!Q$?+V^5d1nrB`m~AU_f;ECR~$Cq zQt|V9@0=k8JYDunvyLH(!OEDmYhkUhP`Nx^J-ypjwY7!3TIz}*PE3mXi=9n;b-Spq z0AqiKgl?({APsMQ$lct!{a`ZZ(7I!ZPW{(4bBjWY+C|rV707&x+v1AoBIyvn$L_ux z6$M39ZXtWh+L}u8?|qmuYF|`r0ghnt)--IYS~)*j=4eb_z~?kv-R)p*B;O8{E7?(5 ztOkMB_Z?rog9!k39`OIxJM??T4TkS&|ErE&vq8|XD(G<6!6bNJXEa;WP2$VKPk!1! zz}nMT?sMOeYMa7q-67%VUshUp;XcnjJxw8*<~6{sd4Cf-VB3sF9YN}O8a@Sxh(m#< z+w}IZp67`Jh`u~QO+8vzL z5!(j!82sYthh$Q#k;r|bapcljSDg@gFGx6#{Zz+-;y3vshG}IzR82!!8y1z>93~EV z8XaV5X_=G5beBue@qsO|FW2I6$N~g$RwJ&nSp0D0PX-p{!ceMsDF)L%@CJqQ9`Adt z41<%Nnv;UrZkU6#9@XSH@bHAxJ~nELfYw#_TOY{NbNtha}Y+w9hV73P`kY* zMq+aTviTE08dJ-qZ3%wlNKP>}; z*QKu=32%nBy0+B^LXKkX#I%^Z{1!gO#9P+kC(mA3uo1@KnC>m$kdn#|Mw>3O1 zbGM2fP9*3@QR#xmzZ5^ef7d7f$imA20Y)Pi*0(q5+e1M7YfroFtW~Y$vb2;1qpAUaLuxcbwVrXb; zUS~Z+TEWB;5mGcZUc1xAdrrbgLqkK)l+L~z2)GnT;%uc^*}2tJ%wL$>Ve`I@w3nCA zJ4y<|fpE{uy`G&ZrYKBI<8VNI_;(t{OXNbK)Kb#YpeB!wzPD$;UkYkl+gMizH!QC* zUvPmCBqz5*UY>jK_kC!(Ia|rFm?gs4e*K0>R_vr@Y#F{#n<)}??oz#mOY^Z!08=?8 z(T*jB%SJVs+6=0wsOWHfTtZq@K*I!Q`W_w%Qg+asEts&8Z5vnRVxnUHjF?-$vpeaD zr3PyT85w!5Qu4=l?nlew1)*J|{RzsAgv1Gd=Ks8egNH2{O>>lmbl`b;{~GD+aP!z5 z&*ysL4(dcsPOhXJqh5OBa8qTK2+?LX9fyBzG{R)qAmQb(*^u(W zr+}yLCqC(2-AV(Q!$=S*pL{aGlx(9(Yx-K_#IpU~Z07x({-e;7s@Fh2$b}cty(_4? zentOh)&Kb**=_roUU@7F`89($(hyPoQiT+x1RUtL8cZY z0|v2d4*YG6ig@oK0st@Vk;Y~6SQljKrl$J&^CuN`v@b1TNyN}5J7KtMs&1iLXs1~! zdEta*^T*-O=Jxe7vj>u-B)CZ+zV5u*g#)GvDV8F7QLXGNsEjfVP5zmAXF9LA?c(8>bEit2J0+L?u(}h^^ms~n zQsjBLjfI63o0Rqz2WKE{dPy+wyjFoX)xtwDl?Y*}qRzYZuB)qSIj0LRG45=8%<9va zIrXFGZZ&nL$4y~=Ch@S~ZoKa!tA_hQ+H|Gq;@t)B;UcvAYs>w)#goj(mD8cY4Bi&; zNSRzAgIeAK^id$kiiwTUgI?$E+9e4?+L|s~INQ&*1`uXYK&l5}PLGbNGE=P7cyH*= z)T@-&FIUg6g^E+#AR%d{zEP$SHY^W*2o2 zfkfagC6>z{+O=VZD=AZdd1zQmb0xii&W%+MN`4UM$dDPfCYqILmIC;R3{@(d#Yvo1 znN4+J@5lD#3yXT2%^9uQzJXPT+p`1Dq5I2PcZqjzisCFAOTueDQ&<|;*{J7UMkg+x zGOu~_buZf;{DykpTulFlo-Xh=!ij8Il07aCT)NZU@^f`nHg-?yQhk}62<`$w28s*` zbnA(ul>jvr&rM@li@7cfJLUD#gYLj)e+u`vxs)O3{e&+P)y-ue*<;y*fyL56Lb%n? zdEDd-Ytk!bSaKjOnnDO_~Nv}Ts0;v7fh2sOTVP2qWaQ2|E9qMl1Lw4ty|e| z%vPdNW4$>@EH7}rsn_J8td1>-nIad<+{X1W$N@Ufp75e^*E#$fkMy^`)rO=WQ74fJ z?S1eqIa`3!bvs6u0`S;BkfolFj7*6JJ4VnbbzW?A=OZIu+uYwRhelO8oWwpWRxhWF z#vm8Wj9^O4la>kVSA%CBO&emB^A?HUDU}La7DzRjBnQ5ZWOT0%;WAaU>88Tz?%D?` zb!xlEyuvBA$(fR8u@P$surq=rC{8Y=w|>RGWZ|kT2N8tK^lQi`qwsm#ZGtrp&kNan zWciZ&^C=wq1gK8N)Ph%N!%O2u^T~aj&fH@nkVS(4dG+t1)Ewh)lp4_L1dd3H>ag)Q z>!>m46XKC_TAuyoAYDhfN}gw>#0=Id$tz70YuwEzr(8$dFwb?@sr~hmTWkq&3!g1$ zV>Il(U$=H@^`fCrFa*T(%?QidRO{ud7u~&hO+bi?Ys*Fu8iEXi!JM_yb+Tw6bk-l( zo)eo~BF!jFDyU&jZTrb-->+(1gO;7ElP(SLK(wiT3(MJ!U?2{{Q_!jGnk zwP+7KkB`TRrIJ;n!4``C_3KDQ*t@A{n@fzNqN=K@CXWXK`BbufMNXvu?t9pG9wesCo=DyoB!x_;>Bncs=I!LZ zL}nriG#HoSM*4>D4@qfXW--(L&BHI(*!O<@vDN2=#Fu!dcegMm+>1lO&u2;HEXm`m z$GF&QL`0}JADSd6>0vGsbKKNznH49Pveu({ln=(~F*7GRcCzO&0`71YfYkE0LMvIC3G1dmb|0#6dLWtE=_=>HMMMFmC;0LUSj6LIH`NZj#Pr|J^N zV#Z+g^@5Vn5UJ3Kz0(^C%;1c)qQHQWv+ePA!*Wm}OF&4d1Hnt|Q>DSiz)*AyXepD- z8PRY*p=dV&SHx4a#_w%yZAy+T$uqLBiJAQfqk3`pA>di{l(koX@v^Y6_Gm(q^>uYs zwY80Gtts*w3Bx(wGc(soq6e*x7sjHUKM36BVixKYhJ}Qzq+eUue!xd3=KDAp-spBX za2f9)|+KfEkz8Fq!W>%LUvLpJs`;liDcJ)>XBi_ zuA5hBK`sruf7$-x*=3N+8Cbk~ldi5OM^ULxYhug!g88K;Um%WSkKYu2ot4w{fE+C0 z=G*z6M8#WDyv(SmU(m6x>}(-N1ZS?jfB;e3NHh5GGWc6F|KK`z1=j8me-DZxENKer z2;xeO{;8pc_jGhAUMLh46c+*kFlr%gT$luPG&5|dPV>icrMy0N)cULR7%I^VmTc3-eP;( zkMbWc{lCBg+fH`$l=}etl$u)H;cR8lTLwubi^^$uIX^kM(bli!pI;Q-Nytc%1$DdZ zP6Fj&1PTAf*FFl2&7QA!fF#Go!--}pZd0ZvNNDoeKr^_pj~7Z#o(5)vPVtDhRErKT za6`KN zC78R$46CDc#3-;8>_;U2tew~wgbseaqcsri#6uB$T+b)H+@DWPZ+iUWmzLe8Oc6N7 z8U9CfkciW6?rMMPGs}mv|G@(E5C4|)Q&XqLal0=e1Z9!8-485AY;H844n9T@^GdPs zVj{jssCVwk=3I2=XJlj)5Xb^G((As>ajBkhBH`e3qDC3&-J!+|uCbY~@R}Y)+ntJz z9VMQv!Aa`}Gw_5tTbyr!=IzD+QOoTHk$mQR^$ikknFFFkS@vyhIH#&+LFC~lF6}pGQP&@i-Swu9q2gru;GjU53 zU(wdRl*{k4tVDV4RbHTb_;V`M=e=;yz`D7Bmrc_^UE`U3N$z`lPMy46tmMK(OK?-Z z^)fVE1(BzcTRXd!B^=sPQgp9Qz!vy1B5JJ;n}`UHfWV@5x{toM*wjfwqXXaxXr#<6 z_Dz0#%NvyU{lnlP$eG}7%@5lZ^i!|R&TAfC9 z%`j|sUup=R#IetVS$ZAxxMVNkl`zuOs8nkGVLUNDKEyv8*a0Gl1qD7>eo)j_Ud{2k zzkMAR7GilHQj7~5`TTAXk)jOsEzE|4w_a;BN4yNo`+r))-x5hnh1?pOAa=ceUsffr z*7EBEKlEC(GhmHp;Fm#rzFcF3ae<#nh$v=>oOE*_eu|u&-1~K6Io|2LpFh{e=&PsU z6L|$&Nw)K&JvnPMQWc_@C^2pmmX#e{o%&7#;|{CT@O73G8Yph$5Oru#0RtzeR!nSc zo-XIN=M{LGKr@2uA!-~Z^OlP)YiO;?AO{Pn7cpiLcS+yaEnygXrQMOkjHKi0f+kii zwO|;bGg*4m_a9NXD@iCWllM)TFDpJOFc>N!sFzf9kQsgnoQptht3m|Q`_Xs>83^n8Xo7RcReEjXE9V_5oVpfy=1(*Q})*QJ8-&T zQPmJ~asrMCug85(3Vs4k+cw0+AxiZH?z5h|rzf)>f4=yEqTsbNAUig)YdO!;Dj{Go zE>O!C)Qq|Wq|M`PudklZx~gM}ctz9W@4GVaZo)FTn5n4pe%2Yc-&B{iTr7GXHu|n~ z^u#?r*JigEjk~();Fyw76Cad_B;n5<+Z7LcOF%;M=_|Z5w3#=?)A;Txc#X|-hpjUZ zZ5P+~kss>!6IFAye6`;0_pz3W@pzn7sjQ?dWs5q8jmF~*tSl+4>$(<#&*lDsJJf3> zSiC!oz^Q$&UMgVpplU4aQKj-|ybv6-Vxpqau@@V&A1kJS#ODUcsL92{L&8Ep)#`MO z%kGrE_j`5t%~{V(oxyy=`R)s}w`}fP3Xnd^P7a&7Kbyy@gtG1$_%0YlGLv0-JN`U{ z3jN)eFFyt?S9)zsCB{t8cZD^HXqoG^4jl8 z-FTkY6MYe0`!MB^+*4S%=2~hJxZPfw%o9I1|zAw0b>o^cRH>0EFEQ8AZ zQ<*rt@0Um6BVFP|>!|@Y$iZ+;Wq0cOj?o?%fzNvzm@JhW^YjZ!>njp}LPsC6rPDeF zNRd7RNMJ9>UY75>h}~Y6G{7Uk_Tb9^Dk3S$QG%(V(QRjAIS&spDJ{BJ&*$Y5M@;|L zIW+a{XSl3}3kRZ-N1B?t;syJc-Cs`ZYu8@v&mMm5yR6mUurIQtJM`RY1(GbJr`4+T zz6G!n=!(3&iOD%iRc(9^&TOqsNm&_n`Fyr$D7?S%ut`5xDLQC$bQEg^i^O*?dV*d( zW=xbM5|4=J_DnyMcatu4ClGGT5+f8rxNcXp;Q(N&8BJBy=_c_@0q=WthI!k|yl|q^ zQ#p-((~7Q4^+yeT?c2Xb@@EHQoWn~ztU0&K!a?BUng^;7y10;EFMY*tK~lfHn!c*8 z=*o=PHwQp$+?ZZ3`tPLdEZsbtc;)2i*cCzKJDcu?g7~zeVSJnoGms+&)?n%cg(l0; z5ivWCfARY!0j==w_$gxaEjo*-hFw|mTkgURX*|0SB<^S=c(fDqKjB4-5%BoCa22(Q z=$tgM+#m0-d#+-96t{VT>BKOi3nV2Jy1Hm{Xuhy|2{0+OMQxtn=s>6wyJHqBfhYHQ zx*8ENj;5k!z>hcob(+4il%_i+ml;HZrm4dwC=`8!-k! zIfy03=}SD{nV<(tA6Yay2_MA~&8sOuVT@T;6A;WlbCQU_B_Sce!O;b%k(%1f;0C9` z%~2lulY82%0aHQur5{>3k}^`r7rk!tF04Sdl{aCYCTAvhAy6&WXmXmjG$vUm#_H_g z-~jv-KR%ryZl4=8uu^tn7D~{NG07IHAa20pkt>*8Q|I@OqjV18(ZXwI2VfKcZ+Qt* z15*3*XB|*>4~V(?f28Pz?=5&V*O!+s89(VWk>rw45-Oslq_+4hBt)kF&RA2dP=SDO zr`B$9<5Y2NfLfc~erYMx+F9lr%h)ctm2m6F2T>;FU{AoIlI?0mQR(E%IIfyZXGClo~?oJZ%nMnzH|Za7m_Og zsjhSB+t@0g@z!uZ6!2D38gu4JA6sW5L^W78XnjC><@fO&C<8JztJdmla}9^VRA}q> zw&#k0+aal7S$UgAM=6s}+3DslX2SKA0~TnrN^oPA0LCj6J#- zPaY(kKrr_rML1T|*g_z4$gmtA^+oDHgXffO^wwVAh@}fSl7XDV29mkvfmx{X&OE1G zwh@Rh%-<(PL2|cDGyd0^FmrS zXMQ*5OzBCz1Hn&x1meK7uJ7&-rE~--eI|7Sul4QOD;xGuE+NdkC8+g#Vq-kPmdj|5 z*r&sS3ezBMn)!*O=G{DjusIi@yp}WZ&R|& zSLrW&5UT@RYumRSUL0tp{flNsXz2r%6BetB0U!aW7M^aTMc`t(LkLg+u|#{Wc(P6! zxQ&;cD=cSA?(;>$xg3d}PI~KePb9}X6$@3sJw(9b>~101GeRz&z@%TX6NK~Z1^U{l zJ7#c)Wp(m^DGLUTb?q#pX{ZE6LeIK!gUj0udr&BQSwBgcAmRV?Q%+$y^!($uRs|g$ zYzz`wbvUAsUypHENCa|C7iAB*rfKTLB_u%#|; zr;F!FLl5mFOq&L*sH!S0W{9&#Qwue3iRsn%XmF1emlSe4t{shbhWcuh|JL@n>3kl5 zIw1Kv(ac}cJR;I_WS;n`L5+sh4&lF0#cw`Ne@HPVHN&YbQ6eX>Ny=!IUYa<0>L!-T z=Lz9muRy>bdE6`$ zItRItjCJR@$Ow?syLe{4T3gpMb{lMSZt+q)QBTU$|-{rfiq zn7q@~#M_uo81maCpW{jlKBMpLE#cU$pOi4Hzw*CIpLL5%z^0Gy{qt(G!Ntl~=e+&f zYyRw!i|y&0%dB=JNw3Kqad~ja6~jujYpfl#v}z67#TAIdJE92)2w>`EJdS7P&N6RX zEKuLXNc)_x3pEK??^JE8C{urndrYg>Ma!gAvT&9uo&Y%qH1GPBPp{WxdA+uVU(+W5 z-tmW>TFV@{IH-XVyF6G^;iltBnUl-ltG~Ln3#TG?anP9QULV$7yK6u(*X6`5HAQrx zBt6jl&0#0LWLwPQXs**TjE;PIBIk8FkqCuCAASyPI`O=f?CIg0=VM}L54YX51YCyZ z@2y)jqDe*BAhpCk(UWE(yWbXVKPCN0ELt9RLIJu%Nkw&hbysaQIp?scy9T2;(g|u$ z2A+WB%}iZh7oG{1Jtp3jiwrbmPyhUX=`NmWT+y|kANW2gt8XCK`}~V|NrM+AsB z&JIe$gWitN46m+GMDlUYE>0Z z!0Q9lG5R3Xwl0M*SVT!n3t&WKp%d9-*Pck3&~`K+Dkt^5T0SF~>g=Sf(=9#UodWBa z^TXHKXYyshv%TG|3S_=m)N7yGpCL*Z z(j-VkkOH~-AxXRzIc8>A-uqy}*q9jL=&G@uFP^X@CnGO{S#j9SDQKv08E<_!ajdbM zHDpWa3L^siu*d=pW(~>Ez(i00{hIIZSJ0gK9+s*v22q$#b;z`WSw6YAn&&twyEq7Q zbDKK{H`oE52`opYH5)pJ@Nx;*n5cO7^UWxFw%w@`{)ANC&r3hReio$;J^IsHqRmmJ z-^1G|c&c5VpD*R=l1F6to7Qdwl z;6-1Z{0|oJYfF>pzZBi|5&lMNbRkEgo0nLe(pk5sNQ?yK)Iiepgt~qdjRI9Hk1hn( zDK?e?&w*(l0|v+$03h_@ojLrQcx#Y#(QiH8>q&s z3YKV9TWz}feWXe30hgb&wDh1dfz_WcpZ=jc)VyZrMe!6riVF*=g4fdB=79-Sl7yJY z+Wo)kH1$%A_t?li+#13*_i$#TuM@9ebo2t(SM5IcFI-g=lBRRIOHgdJD>o9u0SbYo z>lmS>tjhm+_y?_WDH`^$IeTorPNm)A!s`W3xBj|ga?e6^aiO5h=k7J7C~bx5(Wr0*3M_xaD4 zCyjvAxG^XfRd)DQ-BlCfa4Ysx%`_IJKkKu)=#EqC4)G~;mJBXD!GSwxAdDOc^q6pc z)uPzuI(fJKM%^}pZy-a<8NiFWNY=fJDCX^kevlT%Xw>&TT?Q`-esw|%M3`LpYr zcj7J0nwoyid!3lIc_#f1 z3&PaBob~V_!K6EkNL&tsh;T>pxq0Obg_4D}wY8yPjKtOuX?t7S#(c#Ox6Ed600@-H zGek#m1ED=YNMCV-vN$tuo+g3Aj#sb=x@ZYNCF$BufvG(v=6+N9Y1URCksSq=<-oL) zMWGCj*#V<)AX-^bF}VEJkD(OgyJNL>ONyB2dV)@BU~`p{l7{C{)P#nG$;io~@v@dm zxErs5Grj2bSnYMlxaIj70jrl@*@Fx;UW(o3#@Ux$W`3Jh`-ILmi9dC{f-ZOGEcL^r zeoI+F!LNp*nRUnQ?ya5+PC>Kg`wQONiyoGgFxtXGrQkEb)8W1x5CZT*8V9i{MQ)yag84wOae~p4tR$9c8IG$2pQ*!Z7a3)nGt#U%@-${xSK3$~WtI*!vZ@BzS=9eTpPjDg{o?2#_OPwq4| zNZc6^(Bye(hg|l9~G3h<%qJ7&auzgWF9P%4g8ijrs?Uz3%HoH zG1|ML(fH-+WeX}u$JbuGa%#j7yLV&W*{T)>juqqz_RwfSEWa8*w{OxX}B z2tGCm3<571B*mT$+Hk&D{$`#M@jWcfabTQN|Iuz&e1h)$i{CS#&DA3;pWQ!qanVUo zEm9e1(RAi1`AAb-Qc|tS$Otl$dy#|2K9$}aLCrQ}cS#kaM}i{XIyTO+)Q6o!x*BGu zpzBa@#!1|%i-(D=%EQ#R&v;H`!Tnef65?1cF$a?;J*gh;nSCcel=guk>+$Am3DHTd zSt2Ph;bPF&sICf7IB2AaiuYoeS>+AI?c8K7@Jvz{cgW&vOh+4jtzT)}r z?&~Qw9-6wFq`gv`YgOu^aEcPb=wkVi9vXx?wlgJJPH)2xxK)kBqG-9Q;p{5v@34^p z4vj;aIcz9U{~1Ep8AD`$3u#=QAiP4h0DVvZ4hG`u_h5?F#Y?kxj zYZpqTW(sl!lg~1C?=K@SF+I6Q*oX;m*soKp7NNHT8{{4^_LTR+ft~jpAJ3rPpesh$ zfvbf$ImG{qG4~pCk*csK=z_WSLd`dszxc>%3|4}8NxP=|2vxyi8a|g^)9PT#7>Cs^ zytPfnhlg7LdUbVl_|)4Qv^+dB?N8HmKUquEXPB#UFw)ZEEK)vk=f}-gh2unVcC0!? z<3ZMgX#hv~MH+-&`V&6M%vXZD^N}DD2mSn(j6nwx1`!VNNXT~mQs31=XzMK5W^}+| z7O74EFT9RBh$dJzuN#R5T_`$KCP^qkhyQCbx^F%1&Vqf9+7_cm+aZeQhCt0tHFz@j z326K(a@)$EV27ISI4>jb_Kobqf?s?3|Jim> zO+`gb&3SiHwrtFEo+LmBSpEfG(OWdIa#YZAs(ME^S-X2ZK3DzuCF_d8XI2LX)V@p` zuAkPk(E318L}Zxi@;Kts=xDHN?OC$aHE*6VehPY^ zVft^*CIrj|Fnj^Bq5j>Yb1sM#Mk8VS2|e_GB9x^-7X5dR1J*eMWQfKTtn0|o&sDIE zI4R1+b#NO4iSx!O7&s;@(K3f#$0f5trG&koN#ckajzq%LiTit?YscN}mIH-%PksA9 zo!Uuv90RRBu;MxMXjge3p#By(44GpOMK9K>b92Zn2-{^5dmX$_jwb=!%4_1*-$p2~ zPcT3MWp{Bht5_I5hjYi@Y0myVp=Z<2oL_MbA$@UGd@b5R-q$iHWZPPBAif3 z{{VUK&|g>1ScIkYVCCu6BoLOzy}oYJx)f;~x}IwS)DL8QN))yPaU$Iv$fDVISWu4H zY3uTeqKe|*Y+x;1&mf^mC|1dtkT6lISOXeD)A7IMKrG+mg+7qQWp=7o0b!ZuhGD63 zOcwK&cWzW%(=0ZRw)@_n59puP)Hi{MV}z8gs+p|~Bod_jNFQd5 zNi$0?vbi(gb%?=NvUmBx?W`7dvN(1lz(Xg?v@a$5uJL)R8XrwuI8TGZK|!;nmf*NUwhJpg=KgRU}N^s#`gkDR7^yqMw5k#gM)_$!t3d4 zuYkeg@QxbjNH|z{=!Q?<^*lK}m0&T?NwGw^*qhj0EByKm37sqbq3rz$q~y*ZpwpU! z-Bc!&VRYHq=X63Hv)sAsoK=!WGJz_#$6d!aK%{q3Yg#g)P^qxaY^8Isef7Llpr$mt zoa)K|=6{mq;GHZdc*2hGXI-S(7G8^hh(L@i8wnbA-VTaY#&@s2Li9rBQAv_v>n$4yTx--037)yw_sna-YcqB0eZ_id| z0Fy7~bTZxpK<2H5%BerC-%^nRY->HcfmOfO+GmGJK4`nWATMwhIe>+k89FtXKHrc_ z%A26AtIH2$Vsd|fG|s7u2vC93qjv-rc2v9~FOP`CmpZ4KESAhqF@6SzcthBbDEnF3U67FYI^ zZ)du4q3E@h|FS2l>-V(f_YVjbO7xxO8^)#>$bx2hU8xCw(XS~RY%qq2l=FLp`O3RPfc{b|?pwTsPHZHwlC`}2)MK=NHE*R}58 z>vj~RBnKt{|33X-u>Ij-4sIH-B2Z^UMEIMhMzf@*CqU4YwG6@2*N}oWOo+KvX#80!H{E28w`;&HW5;V1GC$G|N z*+Ew{MlQMdvnQ4qo!4oh4;7?IIRRJY-qo>MXuurhCj$+QI-x?;JRe}=-gKGL&rC}r ztn1r66$>LwkBPDTzy>ZXNFq$75csLIi$x*od}l}G%hAzorqAM|wtb$x07}*Ha4JY7 z9tla-glhwHN4V=)>xmAm&-F$isDZ=AxK1W?2f%rZz}KM;Jln%xwe7MHeysj;I4z3P zuE_VC)pAkMX3g&xvP@f~V7)(ly1(?}K8$1YHBt!fp`eLN1NmATc6yrE0l4{HC3lki z6!{%t$fz8?-aLs@O;mQ$kw;bKJ;K-4W{&Tht;`w&1Nbgm-ieb^#S?s)qTVrlmQ{omj$Wx(+yHT6D8hP*Q02NJ zvH%9K=XZ-<@0%}M#hW}X@VR~nA|m*{^bmRRMG(I2x`{n?XExCKy7n!MO_TN|4sOux zRE~-MK7@u-%jD@nu|Rp{O~?1^x?j%g$L@1${#)OF$*Dg6cAv`P)yc1D}*~ z<&X8$6jePO+>#y)4T5}?$hKfogu72BFLt$woP2qd^5S2bqq|J~vh^V7YTrL8mb;w1 z>y4}-9x7oI-*xT(A1vTy{T};#&c>Pa$8g0j^fa2ptSkb%BC-a-SzmLf%|%7x_|p1* z_-MYQV^!Ivn4Zby@3IwJ5w_SsdnkqG_P6ZdPvB3xm^^faJqr zk$szQF&>}C3BS;XYz%8E5(LqoPH~mID%wis&kK_!1aFJxB_mGWPMK3eko39m>g{%? z64Uy7R`CuqfNl*Z+}zx(#EgDuD!uM6nXMU0W9DaJ`TF#WAjs75C#)K%x6Y1V2@-b! zJr?w@6V&iaGWX$5p5Cmt9ip@ySJ(}Z!Y@;dG8qI}!y$;T!}d71o|Nb?aVMDktH1JG zwlmHgGOOin(j%pnZJiKd8VQqt$DmMtGxRtQfxls!U~=-%v5idaKG7f~k8y*BqxY={ z!xD)fI(I6FVS}loHs&cD89^R72nd@;H>q|lCySi8{h9d+G$})w|4sk0$Kb--Ga&q7 z1x#VCjiGtm454rDV#txAj8yZcCP_8D>wYh+3`;$)ti(JZiQs_ih9!2$LqJP=>`A>& zUhB9=HcpAlmV;1GhI z=RNWG3Ah@%2i_(@^fD8|D;0+E(XAw?S@ac+Zv`{|UUf~%_sXjJaRXByDUpvAr;X69 z^5=gBb11emu%yCj7HF`KstCuog8Fv;A9XlSKbnmJ7dZv(|KD{L168o!jy|1WYq~2R zArOL8?tLt5-RXyM5LnAS577NSw$E5>H3u!yqFR#c`ToYC-s`=cSFJrV57WSi8Wl^Ws?glCY9Wbh6)Yv_pLfI>+R5Gd1lUqGGDZp?0ML zh{wdS2W?}!-w`ROjs%^p2=kGM zCC|JkvK2Uh&QGI9jnicq4XN|Ql|U6;d}>i5v1Touo3M!y@hc=e;v2<&EZszINpi9E z9LToB`ti^ughws?@I1Y_i*^Os)HrOPAfwkzLHG^AlGp##Z_FOuyDerT{P_0o97KNu z!xZG9YU(wnHo%I^o!8U%(KT{)&<)dy!6xx;sD=p&k`yukXM(u$)9( zDiu2*e$7?z%N6>6guk^B?&Ybuw03nQ!1u{w$+)b>3vyofi<@5%skXJtw5~u+0n#BqjJZ;fthqxqJP8@hIqZ9L}Z$ z6z5gR5a|%zd~C~7y<|`au2RFzWR9+M7Kt@f4GZ>261=1{3qgMnA+Z|*Le;nK)y@g# zFX%x)Cd!i`)|MHEVd7BdiaV*AWDR1A|7t0)zmxN{8A^I^;HiJZe6YT8eiP=JKfnH7 zld+zDW2Dey`ypnAB)Uk`+mPBBMSc=2`CDWZd?RtTF?%_=clPiX}|1R7nzh*O&-;NHpX!j8NnPnw}@a5wFXxI1$^c!B1m^ghk!_Tw@9gQKuWqqy1PNT zOF+7$ySwf>`hM^K-FwHl<8H@r=sxG{y=u-i=Uj6>4^qnPUKR`;gM5CLgx8j+_-%vUOY?@(@LaGUSTv{L*PcS*NcgXp`&-n{JK z6Z8j`D*p)NY3ECaah9~G>Cqnuqs2RuQ9$S{Z?+9|Rv`E9R`WPav)}Tdf zThR{I*?CBb2Jnxy{=ClO4`La%V^AvNGIO@< z_!wi)VdGTCOI$Lgp*-Q}BDQdOnoFv}z@cwcS^UDlx3X>In|z~=fQWF^+nBckHEpH) z?)>!A-{jNG&o(QO%8%Z9x)}|YNXgl-D1~yoHR<|(B`8TTE5q|n%|Id)Zq+67+1aNf z-r8b|%4i71k$EV`s4V;R5&FWU}Vu?HQtOc$F4b z?|hVV`NHUZ`p6rXd(X<@(kO4z!ypG zVxTCg6TFyDH7gg?jX4U5n!kOSk+d?at3Kvw;;afQ19Q^}-cr&2vaJJ9A^^s^&l4bF zfz}EJYqRa16ZMp4X&FcCLkX%!~aD3=cB@RRLp!vcJqA0Nhj7d3xgptN#+h4%PpJOZl ziovD0dE(KP{Q}}htNl-;3`v$}a-EbBh(7Kvmc7(Je#!z|QrT$8+%}Wqv7bW|4WmW@ zjze8#1a**WT>pm6N@$v?bkx-N*RSUsHrzQ>Id7RZoC&_J*i=N5B_1D{FD9&Anky!m z(y?^Az2g^AoHcFqhkL80T|bycpZtb^RDqp%@rpOTd&DNSH`-%0D0u;2;E-Cj$MmgO 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 Date: Wed, 2 Sep 2026 12:12:48 -0600 Subject: [PATCH 08/15] fix(viewer): consume analytical plan costs --- crates/devtools/src/bin/dag_export.rs | 466 +++++++++++++++++++------- crates/types/src/dag_export.rs | 15 +- tools/dag-viewer/README.md | 22 +- tools/dag-viewer/viewer.js | 21 +- 4 files changed, 377 insertions(+), 147 deletions(-) diff --git a/crates/devtools/src/bin/dag_export.rs b/crates/devtools/src/bin/dag_export.rs index 2cceff51..4ac10b6c 100644 --- a/crates/devtools/src/bin/dag_export.rs +++ b/crates/devtools/src/bin/dag_export.rs @@ -53,101 +53,150 @@ use std::collections::HashMap; use std::rc::Rc; use std::time::Instant; -use asap_aware_mapping::cost_model::{default_cse_recompute_cost, DefaultCostModel}; -use asap_aware_mapping::replacement::{search_workload, Replacement, ReplacementSubDAG}; +use asap_aware_mapping::analytical_cost::{ + query_topk_k, AnalyticalCostModel, ResourceEstimate, ANALYTICAL_MODEL_VERSION, +}; +use asap_aware_mapping::cost_model::{CostModel, DefaultCostModel}; +use asap_aware_mapping::replacement::{ + default_strategies_with_evidence, search_workload, search_workload_with, Replacement, + ReplacementSubDAG, +}; +use asap_aware_mapping::{AccuracyEvidenceProvider, PropagationStats}; use asap_types::cost::{BaselineRef, CostAnnotation, CostInput, CostSource, CostUnit}; use asap_types::dag_export::{ self, DagDecision, DagGraph, DagNote, NamedGraph, PostAsapSubstitution, TargetRejection, TargetReplacement, TargetReplacementAfter, WorkloadGraph, }; use asap_types::post_asap::SummaryExpr; +use asap_types::post_asap::{CompositionOperator, SketchQuery, SummaryFamilyType}; use asap_types::pre_asap::cse::{structural_hash, HashCache}; use asap_types::pre_asap::query_expr::QueryExpr; use asap_types::pre_asap::schema::{Column, DataType, Schema}; use asap_types::types::AccuracyTarget; -/// `model_version` tag for every [`CostAnnotation`] this binary computes — -/// see [`winner_cost_annotations`]'s own doc for what it's a structural -/// proxy for and why (issue #286, issue #287 is the real rate-modeling -/// follow-up). -const STRUCTURAL_COST_MODEL_VERSION: &str = "dag_export-structural-cost-v1"; - /// Baseline/selected/benefit [`CostAnnotation`]s for one [`Winner`] — issue /// #286's "replacement-region baseline cost, selected cost, and benefit" /// granularity item, reused verbatim for [`TargetReplacement`] and for the /// [`DagDecision`] carried by every node the winning candidate produced or /// carried. /// -/// The baseline is always [`BaselineRef::PreAsapRecomputation`]: the cost of -/// recomputing the winner's own target independently at every one of its -/// `consumer_count` use sites. `per_consumer_recompute` is that one-site cost -/// — [`default_cse_recompute_cost`] applied to the target, the exact -/// structural-size proxy `asap_aware_mapping::cost_model`'s own -/// `DefaultCostModel` already uses, not a second formula — passed in -/// pre-computed rather than taking `target: &QueryExpr` and recomputing it -/// here: this function is called once per matched *node position* a winner -/// produced or carried (once per `target_replacement` flat entry, once per -/// `find_winner` hit), and the same winner's target can be reached from more -/// than one node position, so callers memoize `default_cse_recompute_cost` -/// once per winner (see `run_post_asap_with_progress`'s -/// `per_consumer_recompute_costs`) instead of this function re-walking the -/// identical subtree on every call. This baseline is always computable -/// (never `Unavailable`), unlike `selected`, which is `Unavailable` whenever -/// `selected_cost` is `NaN` (the plugged-in cost model has no numeric -/// estimate for that particular candidate shape — see -/// [`RankedGroup::costs`](asap_aware_mapping::replacement::RankedGroup::costs)'s -/// own doc). -/// -/// Every value here is unit-tagged [`CostUnit::RelativeStructuralUnits`], -/// not [`CostUnit::CostUnitsPerSecond`]: today's cost model has no -/// `update_rate`/`evaluation_rate`/`query_interval` recurrence inputs at all -/// (issue #287's job) — see `asap_types::cost`'s module doc for why this -/// crate refuses to mislabel a structural proxy as a real rate. +/// With valid workload inputs and calibration, the baseline is exact raw +/// aggregation and the selected value is the candidate's analytical +/// CPU/memory/scan estimate. Missing evidence fails closed as `Unavailable`; +/// structural node counts are intentionally never used as a fallback. fn winner_cost_annotations( - per_consumer_recompute: f64, - consumer_count: usize, - selected_cost: f64, + analytical: Option<&AnalyticalCostModel>, + candidate: &ReplacementSubDAG, + target: &Rc, ) -> (CostAnnotation, CostAnnotation, CostAnnotation) { - let baseline_value = per_consumer_recompute * consumer_count.max(1) as f64; - let baseline = CostAnnotation::modeled( - baseline_value, - CostUnit::RelativeStructuralUnits, - STRUCTURAL_COST_MODEL_VERSION, - vec![ - CostInput::new("per_consumer_recompute_cost", per_consumer_recompute), - CostInput::new("consumer_count", consumer_count.max(1) as f64), - ], - ); - - if !selected_cost.is_finite() { - return ( - baseline, - CostAnnotation::unavailable(CostUnit::RelativeStructuralUnits), - CostAnnotation::unavailable(CostUnit::RelativeStructuralUnits), - ); + if let Some(model) = analytical { + if let (Ok(baseline_resources), Ok(resources)) = ( + model.raw_resources_for_target(target.as_ref()), + model.candidate_resources_for_target( + candidate, + &asap_aware_mapping::replacement::TargetSubDAG::new(target), + ), + ) { + if let (Ok(baseline_value), Ok(selected_value)) = ( + baseline_resources.calibrated_cost(&model.calibration), + resources.calibrated_cost(&model.calibration), + ) { + let version = format!("{}+{}", ANALYTICAL_MODEL_VERSION, model.calibration.version); + let baseline = CostAnnotation::modeled( + baseline_value, + CostUnit::CostUnits, + &version, + analytical_inputs(model, target, baseline_resources), + ); + let selected = CostAnnotation::modeled( + selected_value, + CostUnit::CostUnits, + &version, + analytical_inputs(model, target, resources), + ) + .with_baseline(BaselineRef::PreAsapRecomputation, baseline_value); + let benefit = CostAnnotation { + value: selected.delta, + unit: CostUnit::CostUnits, + source: CostSource::Modeled, + baseline: Some(BaselineRef::PreAsapRecomputation), + delta: None, + benefit_ratio: selected.benefit_ratio, + model_version: Some(version), + benchmark_id: None, + inputs: Vec::new(), + }; + return (baseline, selected, benefit); + } + } } - - let selected = CostAnnotation::modeled( - selected_cost, - CostUnit::RelativeStructuralUnits, - STRUCTURAL_COST_MODEL_VERSION, - vec![], + // Structural node counts are deliberately not a fallback: they have no + // physical unit and can reverse the conclusion of the resource model. + // Missing inputs and unsupported candidates fail closed instead. + ( + CostAnnotation::unavailable(CostUnit::CostUnits), + CostAnnotation::unavailable(CostUnit::CostUnits), + CostAnnotation::unavailable(CostUnit::CostUnits), ) - .with_baseline(BaselineRef::PreAsapRecomputation, baseline_value); +} - let benefit = CostAnnotation { - value: selected.delta, - unit: CostUnit::RelativeStructuralUnits, - source: CostSource::Modeled, - baseline: Some(BaselineRef::PreAsapRecomputation), - delta: None, - benefit_ratio: selected.benefit_ratio, - model_version: Some(STRUCTURAL_COST_MODEL_VERSION.to_string()), - benchmark_id: None, - inputs: Vec::new(), +fn analytical_inputs( + model: &AnalyticalCostModel, + target: &QueryExpr, + resources: ResourceEstimate, +) -> Vec { + let input = |name: &str, value: f64, unit: &str| CostInput { + name: name.to_string(), + value, + unit: Some(unit.to_string()), }; - - (baseline, selected, benefit) + vec![ + input("input_rows", model.inputs.input_rows as f64, "rows"), + input("input_bytes", model.inputs.input_bytes as f64, "bytes"), + input( + "source_scan_bytes", + model.inputs.source_scan_bytes as f64, + "bytes", + ), + input("group_count", model.inputs.group_count as f64, "groups"), + input( + "group_key_bytes", + model.inputs.group_key_bytes as f64, + "bytes/group key", + ), + input( + "topk_k", + query_topk_k(target).unwrap_or(0) as f64, + "rows; 0 means no Top-K", + ), + input( + "evaluation_count", + model.inputs.evaluation_count as f64, + "evaluations", + ), + input("estimated_cpu_ops", resources.cpu_ops, "operations"), + input( + "estimated_peak_memory", + resources.peak_memory_bytes as f64, + "bytes", + ), + input("estimated_scan", resources.scan_bytes as f64, "bytes"), + input( + "cost_per_cpu_op", + model.calibration.cost_per_cpu_op, + "cost units/operation", + ), + input( + "cost_per_scan_byte", + model.calibration.cost_per_scan_byte, + "cost units/byte", + ), + input( + "cost_per_retained_byte", + model.calibration.cost_per_retained_byte, + "cost units/byte/scope", + ), + ] } use asap_devtools::{lower_promql, lower_sql, SqlCatalog}; @@ -237,6 +286,53 @@ struct ParsedArgs { post_asap: bool, progress: bool, table_schemas: Vec, + analytical_cost: Option, + topk_margin: Option, +} + +#[derive(Debug, Clone, serde::Deserialize)] +struct TopKMarginEvidence { + selected_lower_bound: f64, + excluded_upper_bound: f64, + interval_failure_probability: f64, +} + +impl TopKMarginEvidence { + fn validate(&self) -> Result<(), &'static str> { + if !self.selected_lower_bound.is_finite() || !self.excluded_upper_bound.is_finite() { + return Err("Top-K bounds must be finite"); + } + if self.selected_lower_bound <= self.excluded_upper_bound { + return Err("selected_lower_bound must exceed excluded_upper_bound"); + } + if !(self.interval_failure_probability.is_finite() + && self.interval_failure_probability >= 0.0 + && self.interval_failure_probability < 1.0) + { + return Err("interval_failure_probability must be in [0, 1)"); + } + Ok(()) + } +} + +impl AccuracyEvidenceProvider for TopKMarginEvidence { + fn propagation_stats( + &self, + op: &CompositionOperator, + _family: &SummaryFamilyType, + _query: Option<&SketchQuery>, + ) -> PropagationStats { + if matches!(op, CompositionOperator::TopKSelection) { + PropagationStats { + topk_selected_lower_bound: Some(self.selected_lower_bound), + topk_excluded_upper_bound: Some(self.excluded_upper_bound), + topk_interval_failure_probability: Some(self.interval_failure_probability), + ..Default::default() + } + } else { + PropagationStats::default() + } + } } fn parse_args() -> ParsedArgs { @@ -246,6 +342,8 @@ fn parse_args() -> ParsedArgs { let mut post_asap = false; let mut progress = false; let mut table_schemas = Vec::new(); + let mut analytical_cost_json = None; + let mut topk_margin_json = None; let mut args = std::env::args().skip(1); fn flush(entries: &mut Vec<(String, Lang, String)>, pending: &mut Option<(Lang, String)>) { @@ -289,16 +387,51 @@ fn parse_args() -> ParsedArgs { "--table-schema" => { table_schemas.push(args.next().expect("--table-schema requires JSON")); } + "--analytical-cost-json" => { + analytical_cost_json = Some( + args.next() + .expect("--analytical-cost-json requires a JSON object"), + ); + } + "--topk-margin-json" => { + topk_margin_json = Some( + args.next() + .expect("--topk-margin-json requires a JSON object"), + ); + } other => panic!("unrecognized argument: {other}"), } } flush(&mut entries, &mut pending); + let analytical_cost = analytical_cost_json.map(|raw| { + let model: AnalyticalCostModel = serde_json::from_str(&raw) + .unwrap_or_else(|error| panic!("--analytical-cost-json is invalid: {error}")); + model + .inputs + .validate() + .unwrap_or_else(|error| panic!("invalid analytical inputs: {error}")); + model + .calibration + .validate() + .unwrap_or_else(|error| panic!("invalid analytical calibration: {error}")); + model + }); + let topk_margin = topk_margin_json.map(|raw| { + let evidence: TopKMarginEvidence = serde_json::from_str(&raw) + .unwrap_or_else(|error| panic!("--topk-margin-json is invalid: {error}")); + evidence + .validate() + .unwrap_or_else(|error| panic!("invalid Top-K margin evidence: {error}")); + evidence + }); ParsedArgs { entries, accuracy, post_asap, progress, table_schemas, + analytical_cost, + topk_margin, } } @@ -329,17 +462,12 @@ fn annotate_with_explanations( } /// One `MemoGroup`'s best-ranked candidate, kept alongside its own `target` -/// and `cost` — the unit both [`PostAsapResults::replacements`] and +/// — the unit both [`PostAsapResults::replacements`] and /// [`PostAsapResults::post_graphs`] are built from, so the two outputs can /// never disagree about which candidate won for a given target. struct Winner<'a> { target: &'a Rc, candidate: &'a ReplacementSubDAG, - cost: f64, - /// The target's own `MemoGroup::consumer_count` — threaded through so - /// [`winner_cost_annotations`] can compute a baseline without a second - /// lookup back into `PlanSpace`. - consumer_count: usize, } /// Short explanation intended for a selected winner in node-level UI. The @@ -431,15 +559,12 @@ fn decision_cost_entries(graph: &DagGraph) -> Vec<(u32, CostAnnotation, CostAnno } /// Build a [`TargetReplacement`] for `winner`, matching this file's own -/// per-target `before`/`after` construction. `per_consumer_recompute` is -/// `winner`'s own memoized [`default_cse_recompute_cost`] — see -/// `winner_cost_annotations`'s own doc for why callers pass this in instead -/// of recomputing it here. +/// per-target `before`/`after` construction. fn target_replacement( decision_id: u32, target_pre_id: u32, winner: &Winner<'_>, - per_consumer_recompute: f64, + analytical: Option<&AnalyticalCostModel>, ) -> TargetReplacement { let strategy = winner.candidate.strategy.to_string(); let before = dag_export::export(winner.target); @@ -452,12 +577,9 @@ fn target_replacement( } }; let (baseline_cost, selected_cost, benefit) = - winner_cost_annotations(per_consumer_recompute, winner.consumer_count, winner.cost); - // Derived from `selected_cost` (not read from `winner.cost` a second - // time) so the legacy scalar field and the structured annotation can - // never drift apart at this call site — see `winner_cost_annotations`'s - // own doc for why `selected_cost.value` is `None` (and this is `NaN`) - // in exactly the same case `winner.cost` itself would already be `NaN`. + winner_cost_annotations(analytical, winner.candidate, winner.target); + // Derived from `selected_cost` so the legacy scalar field and the + // structured annotation can never drift apart. let cost = selected_cost.value.unwrap_or(f64::NAN); TargetReplacement { decision_id, @@ -546,6 +668,8 @@ fn assign_workload_node_ids(graphs: &mut [&mut DagGraph]) { fn run_post_asap_with_progress( lowered_queries: &[(String, String, QueryExpr)], progress: bool, + analytical: Option<&AnalyticalCostModel>, + evidence: Option<&dyn AccuracyEvidenceProvider>, ) -> PostAsapResults { let mapping_started = Instant::now(); if progress { @@ -555,8 +679,16 @@ fn run_post_asap_with_progress( .iter() .map(|(name, _, qe)| (name.clone(), Rc::new(qe.clone()))) .collect(); - let space = search_workload(roots); - let ranked_groups = space.cost_sorted(&DefaultCostModel); + let default_model = DefaultCostModel; + let cost_model: &dyn CostModel = analytical.map_or(&default_model, |model| model); + let strategies; + let space = if let Some(evidence) = evidence { + strategies = default_strategies_with_evidence(cost_model, evidence); + search_workload_with(roots, &strategies) + } else { + search_workload(roots) + }; + let ranked_groups = space.cost_sorted(cost_model); // A group's top candidate can be `keep_pre_asap`'s own conservative // fallback — `Replacement::Summary(SummaryNode { expr: @@ -583,7 +715,15 @@ fn run_post_asap_with_progress( let winners: Vec> = ranked_groups .iter() .filter_map(|group| { - let candidate = group.candidates.first()?; + let target = asap_aware_mapping::replacement::TargetSubDAG::with_consumer_count( + group.target, + group.consumer_count, + ); + let candidate = group + .candidates + .iter() + .copied() + .find(|candidate| cost_model.candidate_cost(candidate, &target).is_some())?; if matches!( &candidate.replacement, Replacement::Summary(node) if matches!(node.expr, SummaryExpr::KeepPreAsap(_)) @@ -593,26 +733,10 @@ fn run_post_asap_with_progress( Some(Winner { target: group.target, candidate, - cost: group.costs[0], - consumer_count: group.consumer_count, }) }) .collect(); - // One `default_cse_recompute_cost` walk per *winner*, not per node a - // winner's decision ends up cloned onto: `winner_cost_annotations` is - // called once per matched node position — once per `target_replacement` - // flat entry, and once per `find_winner` hit inside `export_post_asap`'s - // traversal — and a single target can be reached from more than one - // node position (an internally-shared subtree within one query, or the - // same CSE-shared target reached from several queries), so recomputing - // this per call would re-walk the identical subtree redundantly. - // Indexed in parallel with `winners`. - let per_consumer_recompute_costs: Vec = winners - .iter() - .map(|winner| default_cse_recompute_cost(winner.target).0) - .collect(); - // `by_hash` only narrows the search; `lookup_winner`'s own structural // equality check is the real decision — see that function's doc. let mut by_hash_cache = HashCache::new(); @@ -651,13 +775,10 @@ fn run_post_asap_with_progress( let mut find_winner = |expr: &QueryExpr| -> Option { let i = lookup_winner(&by_hash, &winners, &mut post_graph_cache, expr)?; let winner = &winners[i]; - let (baseline_cost, selected_cost, benefit) = winner_cost_annotations( - per_consumer_recompute_costs[i], - winner.consumer_count, - winner.cost, - ); - // Derived from `selected_cost`, not `winner.cost` a second time — - // see `target_replacement`'s identical derivation for why. + let (baseline_cost, selected_cost, benefit) = + winner_cost_annotations(analytical, winner.candidate, winner.target); + // Derived from `selected_cost`; see `target_replacement`'s identical + // derivation. let cost = selected_cost.value.unwrap_or(f64::NAN); let decision = DagDecision { id: i as u32, @@ -726,12 +847,7 @@ fn run_post_asap_with_progress( if let Some(i) = lookup_winner(&by_hash, &winners, &mut lookup_cache, source_expr) { replacements.push(( name.clone(), - target_replacement( - i as u32, - node.id, - &winners[i], - per_consumer_recompute_costs[i], - ), + target_replacement(i as u32, node.id, &winners[i], analytical), )); matched[i] = true; } @@ -802,7 +918,7 @@ fn run_post_asap_with_progress( #[cfg(test)] fn run_post_asap(lowered_queries: &[(String, String, QueryExpr)]) -> PostAsapResults { - run_post_asap_with_progress(lowered_queries, false) + run_post_asap_with_progress(lowered_queries, false, None, None) } #[tokio::main] @@ -813,6 +929,8 @@ async fn main() { post_asap, progress, table_schemas, + analytical_cost, + topk_margin, } = parse_args(); let sql_catalog = catalog(&table_schemas); let planner_started = Instant::now(); @@ -870,8 +988,8 @@ async fn main() { graph, replacements: Vec::new(), post_graph: None, - rejections: Vec::new(), workload_cost: None, + rejections: Vec::new(), }); } for (explanation, matched) in explanations.iter().zip(matched) { @@ -890,7 +1008,14 @@ async fn main() { } if post_asap { - let results = run_post_asap_with_progress(&lowered_queries, progress); + let results = run_post_asap_with_progress( + &lowered_queries, + progress, + analytical_cost.as_ref(), + topk_margin + .as_ref() + .map(|evidence| evidence as &dyn AccuracyEvidenceProvider), + ); for (query_name, replacement) in results.replacements { if let Some(named) = queries.iter_mut().find(|q| q.name == query_name) { named.replacements.push(replacement); @@ -1139,6 +1264,99 @@ mod tests { } } + #[tokio::test] + async fn unavailable_analytical_candidate_is_not_exported_as_selected() { + use asap_aware_mapping::analytical_cost::{AnalyticalInputs, ResourceCalibration}; + + let cat = default_catalog(); + let sql = "SELECT approx_percentile_cont(latency, 0.95) \ + FROM metrics WHERE latency > 0"; + let query = lower_sql(sql, &cat, AccuracyTarget::Epsilon(0.01)) + .await + .unwrap(); + let model = AnalyticalCostModel { + inputs: AnalyticalInputs { + data_arrival: asap_types::workload::DataArrival::AtRest, + input_rows: 1_000, + input_bytes: 64_000, + source_scan_bytes: 64_000, + group_count: 1, + group_key_bytes: 8, + topk_k: None, + evaluation_count: 10, + }, + calibration: ResourceCalibration { + cost_per_cpu_op: 1.0, + cost_per_scan_byte: 1.0, + cost_per_retained_byte: 1.0, + version: "test".into(), + }, + }; + let results = run_post_asap_with_progress( + &[("filtered".into(), sql.into(), query)], + false, + Some(&model), + None, + ); + assert!( + results.replacements.is_empty(), + "a partially costed filtered aggregate must remain pre-ASAP" + ); + } + + #[tokio::test] + async fn exported_topk_k_comes_from_the_lowered_query() { + use asap_aware_mapping::analytical_cost::{AnalyticalInputs, ResourceCalibration}; + + let cat = default_catalog(); + let sql = "SELECT service, COUNT(*) AS frequency FROM metrics \ + GROUP BY service ORDER BY frequency DESC LIMIT 10"; + let query = lower_sql(sql, &cat, AccuracyTarget::Epsilon(0.01)) + .await + .unwrap(); + let model = AnalyticalCostModel { + inputs: AnalyticalInputs { + data_arrival: asap_types::workload::DataArrival::AtRest, + input_rows: 100_000, + input_bytes: 6_400_000, + source_scan_bytes: 6_400_000, + group_count: 1_000, + group_key_bytes: 32, + // Deliberately wrong legacy adapter value: export must ignore + // it and report the target's canonical k. + topk_k: Some(99), + evaluation_count: 10, + }, + calibration: ResourceCalibration { + cost_per_cpu_op: 1.0, + cost_per_scan_byte: 1.0, + cost_per_retained_byte: 1.0, + version: "test".into(), + }, + }; + let evidence = TopKMarginEvidence { + selected_lower_bound: 1_200.0, + excluded_upper_bound: 1_000.0, + interval_failure_probability: 0.001, + }; + let results = run_post_asap_with_progress( + &[("topk".into(), sql.into(), query)], + false, + Some(&model), + Some(&evidence), + ); + let exported_k: Vec = results + .replacements + .iter() + .filter_map(|(_, replacement)| replacement.selected_cost.as_ref()) + .flat_map(|cost| cost.inputs.iter()) + .filter(|input| input.name == "topk_k") + .map(|input| input.value) + .collect(); + assert!(exported_k.contains(&10.0), "missing canonical Top-K k"); + assert!(!exported_k.contains(&99.0), "export leaked adapter Top-K k"); + } + #[test] fn workload_node_ids_make_smaller_topk_reuse_explicit() { let small = lower_promql( diff --git a/crates/types/src/dag_export.rs b/crates/types/src/dag_export.rs index 8ebca1b4..d15790d4 100644 --- a/crates/types/src/dag_export.rs +++ b/crates/types/src/dag_export.rs @@ -46,8 +46,8 @@ use std::rc::Rc; use serde::Serialize; -use crate::post_asap::{AccuracyError, ResultGuarantee, SummaryExpr, SummaryNode}; use crate::cost::{CostAnnotation, CostInput, CostUnit}; +use crate::post_asap::{AccuracyError, ResultGuarantee, SummaryExpr, SummaryNode}; use crate::pre_asap::cse::{dag_node_count, structural_hash, HashCache}; use crate::pre_asap::query_expr::{QueryExpr, Source}; @@ -242,12 +242,6 @@ pub struct NamedGraph { /// `NamedGraph` is unaffected. #[serde(default, skip_serializing_if = "Option::is_none")] pub post_graph: Option, - /// Accuracy-illegal candidates a higher layer's search refused for - /// targets in this query (issue #172) — see [`TargetRejection`]. Always - /// empty coming out of this module; omitted from the JSON when empty, - /// same additive rule as `replacements`. - #[serde(default, skip_serializing_if = "Vec::is_empty")] - pub rejections: Vec, /// This query's own selected-workload cost/benefit — one of issue /// #286's granularity items. Built by summing *this query's own* /// `post_graph` decision-node cost annotations, deduplicated by @@ -266,6 +260,12 @@ pub struct NamedGraph { /// specifically to cover every query in one pass. #[serde(default, skip_serializing_if = "Option::is_none")] pub workload_cost: Option, + /// Accuracy-illegal candidates a higher layer's search refused for + /// targets in this query (issue #172) — see [`TargetRejection`]. Always + /// empty coming out of this module; omitted from the JSON when empty, + /// same additive rule as `replacements`. + #[serde(default, skip_serializing_if = "Vec::is_empty")] + pub rejections: Vec, } /// A batch of named queries — the shape the viewer's multi-query / compare @@ -1859,6 +1859,7 @@ mod tests { graph: export(&leaf), replacements: vec![], post_graph: None, + workload_cost: None, rejections: vec![TargetRejection { target_pre_id: 0, strategy: "SketchAlgorithmStrategy".into(), diff --git a/tools/dag-viewer/README.md b/tools/dag-viewer/README.md index 7cc8e58c..0afda217 100644 --- a/tools/dag-viewer/README.md +++ b/tools/dag-viewer/README.md @@ -57,6 +57,7 @@ shell command. ```sh cargo run -p asap-devtools --bin dag_export -- \ --post-asap --epsilon 0.01 \ + --analytical-cost-json '{"inputs":{"data_arrival":"at_rest","input_rows":1000000,"input_bytes":64000000,"source_scan_bytes":64000000,"group_count":1,"group_key_bytes":16,"topk_k":null,"evaluation_count":100},"calibration":{"cost_per_cpu_op":0.000001,"cost_per_scan_byte":0.00000001,"cost_per_retained_byte":0.000000001,"version":"demo-calibration-v1"}}' \ --sql "SELECT service, COUNT(*) FROM metrics GROUP BY service" --name q1 \ > /tmp/dag.json ``` @@ -95,11 +96,11 @@ a selected replacement directly contains: "strategy": "SketchAlgorithmStrategy", "rationale": "count realizes as a Cms sketch", "rank": 0, - "cost": 3.0, + "cost": 5.64051088, "role": "replacement_root", - "baseline_cost": { "value": 6.0, "unit": "RelativeStructuralUnits", "source": "Modeled", "model_version": "dag_export-structural-cost-v1" }, - "selected_cost": { "value": 3.0, "unit": "RelativeStructuralUnits", "source": "Modeled", "baseline": {"kind": "PreAsapRecomputation"}, "delta": 3.0, "benefit_ratio": 0.5 }, - "benefit": { "value": 3.0, "unit": "RelativeStructuralUnits", "source": "Modeled", "baseline": {"kind": "PreAsapRecomputation"}, "benefit_ratio": 0.5 } + "baseline_cost": { "value": 164.000000016, "unit": "CostUnits", "source": "Modeled", "model_version": "analytical-resource-v1+demo-calibration-v1" }, + "selected_cost": { "value": 5.64051088, "unit": "CostUnits", "source": "Modeled", "baseline": {"kind": "PreAsapRecomputation"}, "delta": 158.359489136, "benefit_ratio": 0.965606640979 }, + "benefit": { "value": 158.359489136, "unit": "CostUnits", "source": "Modeled", "baseline": {"kind": "PreAsapRecomputation"}, "benefit_ratio": 0.965606640979 } } } ``` @@ -121,13 +122,12 @@ with IR text. `source` (`Modeled` / `Measured` / `Unavailable`), optionally `baseline` + `delta` + `benefit_ratio`, and `model_version`/`benchmark_id`/`inputs` for provenance. A missing `value` (`source: "Unavailable"`) always renders as -**Not estimated** — the viewer never fabricates a number. Today every value -`dag_export` produces is unit-tagged `RelativeStructuralUnits`: a -structural-size proxy (the same one `asap_aware_mapping::cost_model` -already uses for ranking), not a real cost-per-second rate — issue #287's -recurrence-aware inputs (`update_rate`/`evaluation_rate`/`query_interval`) -are what would let a future export use `CostUnitsPerSecond` instead; the -annotation plumbing already accepts that unit unchanged. +**Not estimated** — the viewer never fabricates a number. With +`--analytical-cost-json`, `dag_export` emits calibrated `CostUnits` and keeps +the CPU operations, peak memory, scan bytes, coefficients, and workload +statistics in `inputs`. Without those inputs, or for an unsupported candidate, +the annotation is `Unavailable`; structural node counts are never substituted. +See the [analytical model design](../../docs/design_docs/asap-aware-mapping/analytical-resource-cost.md). The same three fields also appear on `TargetReplacement` (replacement-region baseline/selected/benefit), `NamedGraph.workload_cost` / diff --git a/tools/dag-viewer/viewer.js b/tools/dag-viewer/viewer.js index 65355ac8..66e0dd7d 100644 --- a/tools/dag-viewer/viewer.js +++ b/tools/dag-viewer/viewer.js @@ -120,7 +120,7 @@ function loadFiles(fileList) { let name = q.name; if (existingNames.has(name)) name = `${q.name} (${file.name})`; existingNames.add(name); - queries.push({ name, graph: q.graph, source: q.source, replacements: q.replacements || [], post_graph: q.post_graph, workload_cost: q.workload_cost, sourceBatch, lifecycle_plan: q.lifecycle_plan, lifecycle_summary: q.lifecycle_summary }); + queries.push({ name, graph: q.graph, source: q.source, replacements: q.replacements || [], post_graph: q.post_graph, workload_cost: q.workload_cost, lifecycle_plan: q.lifecycle_plan, lifecycle_summary: q.lifecycle_summary, sourceBatch }); }); } catch (err) { alert(`Failed to parse ${file.name}: ${err.message}`); @@ -593,7 +593,10 @@ function unionStageLaneElements(stage, chosen, laneCost) { function laneElements(laneId, laneLabel, graph, query, stage, laneCost) { const nodes = graph.nodes; const byId = new Map(nodes.map((node) => [node.id, node])); - const edgeCostByPair = new Map((graph.edge_annotations || []).map((edge) => [`${edge.from}${edge.to}`, edge.cost])); + // Keep the delimiter escaped in source. A literal NUL is replaced by the + // HTML tokenizer when viewer.js is embedded by render.py, which otherwise + // makes these keys differ from the lookup below. + const edgeCostByPair = new Map((graph.edge_annotations || []).map((edge) => [`${edge.from}\u0000${edge.to}`, edge.cost])); const elements = [ { data: { id: laneId, label: laneCostLabel(laneLabel, laneCost, stage), isLane: true }, classes: 'laneParent', selectable: false, grabbable: false }, ]; @@ -785,6 +788,7 @@ function computeSelectionWorkloadCost(selected) { let baselineSum = 0; let selectedSum = 0; let any = false; + let unavailable = false; for (const query of selected) { const nodes = (query.post_graph && query.post_graph.nodes) || []; for (const node of nodes) { @@ -796,15 +800,22 @@ function computeSelectionWorkloadCost(selected) { const baseline = decision.baseline_cost; const selectedCost = decision.selected_cost; if (!baseline || !selectedCost) continue; - if (baseline.value === null || baseline.value === undefined || selectedCost.value === null || selectedCost.value === undefined) continue; if (unit === null) unit = baseline.unit; if (baseline.unit !== unit || selectedCost.unit !== unit) return null; // unit-incompatible aggregation is rejected + any = true; + if (baseline.value === null || baseline.value === undefined || selectedCost.value === null || selectedCost.value === undefined) { + unavailable = true; + continue; + } baselineSum += baseline.value; selectedSum += selectedCost.value; - any = true; } } if (!any) return null; + if (unavailable) { + const missing = { value: null, unit, source: 'Unavailable' }; + return { baseline_cost: missing, selected_cost: missing, benefit: missing }; + } const delta = baselineSum - selectedSum; return { baseline_cost: { value: baselineSum, unit, source: 'Modeled' }, @@ -1127,7 +1138,7 @@ function loadWorkload(parsed) { const incoming = (parsed && parsed.queries) || []; // One batch id for this whole document — see `sourceBatch`'s own doc above. const sourceBatch = nextSourceBatch++; - incoming.forEach((q) => queries.push({ name: q.name, graph: q.graph, source: q.source, replacements: q.replacements || [], post_graph: q.post_graph, workload_cost: q.workload_cost, sourceBatch, lifecycle_plan: q.lifecycle_plan, lifecycle_summary: q.lifecycle_summary })); + incoming.forEach((q) => queries.push({ name: q.name, graph: q.graph, source: q.source, replacements: q.replacements || [], post_graph: q.post_graph, workload_cost: q.workload_cost, lifecycle_plan: q.lifecycle_plan, lifecycle_summary: q.lifecycle_summary, sourceBatch })); if (activeIndex === -1 && queries.length > 0) activeIndex = 0; if (participants.size === 0 && activeIndex >= 0) participants.add(activeIndex); } From f20ba4897df3d215289255d3d7a4a1a9a2474fe4 Mon Sep 17 00:00:00 2001 From: zz_y Date: Wed, 2 Sep 2026 13:15:06 -0600 Subject: [PATCH 09/15] fix(export): require complete physical cost evidence --- crates/devtools/src/bin/dag_export.rs | 607 +++++++++++++++----------- tools/dag-viewer/README.md | 22 +- 2 files changed, 375 insertions(+), 254 deletions(-) diff --git a/crates/devtools/src/bin/dag_export.rs b/crates/devtools/src/bin/dag_export.rs index 4ac10b6c..041ee5ea 100644 --- a/crates/devtools/src/bin/dag_export.rs +++ b/crates/devtools/src/bin/dag_export.rs @@ -53,10 +53,16 @@ use std::collections::HashMap; use std::rc::Rc; use std::time::Instant; -use asap_aware_mapping::analytical_cost::{ - query_topk_k, AnalyticalCostModel, ResourceEstimate, ANALYTICAL_MODEL_VERSION, +use asap_aware_mapping::analytical_cost::{AnalyticalCostError, ResourceCalibration}; +use asap_aware_mapping::analytical_lowering::{ + PhysicalDag, PhysicalNodeEvidence, PhysicalNodeRequest, }; -use asap_aware_mapping::cost_model::{CostModel, DefaultCostModel}; +use asap_aware_mapping::analytical_planner::{ + AnalyticalPlannerCostModel, PlannerPhysicalPlanProvider, +}; +use asap_aware_mapping::analytical_statistics::ComparisonScope; +use asap_aware_mapping::cost_model::DefaultCostModel; +use asap_aware_mapping::cost_model::{Cost, CostModel}; use asap_aware_mapping::replacement::{ default_strategies_with_evidence, search_workload, search_workload_with, Replacement, ReplacementSubDAG, @@ -68,71 +74,308 @@ use asap_types::dag_export::{ TargetReplacement, TargetReplacementAfter, WorkloadGraph, }; use asap_types::post_asap::SummaryExpr; +use asap_types::post_asap::SummaryNode; use asap_types::post_asap::{CompositionOperator, SketchQuery, SummaryFamilyType}; use asap_types::pre_asap::cse::{structural_hash, HashCache}; use asap_types::pre_asap::query_expr::QueryExpr; use asap_types::pre_asap::schema::{Column, DataType, Schema}; use asap_types::types::AccuracyTarget; +#[derive(Debug, Clone, serde::Deserialize)] +struct PlannerCostDocument { + calibration: ResourceCalibration, + targets: Vec, +} + +fn parse_planner_cost_document(raw: &str) -> Result { + let value: serde_json::Value = serde_json::from_str(raw) + .map_err(|error| format!("planner cost evidence is invalid JSON: {error}"))?; + if value.get("targets").is_none() { + return Err("the compact analytical-cost payload is no longer supported; migrate to complete per-operator physical DAG evidence".into()); + } + serde_json::from_value(value) + .map_err(|error| format!("planner cost evidence is invalid: {error}")) +} + +#[derive(Debug, Clone, serde::Deserialize)] +struct TargetPhysicalEvidence { + target: QueryExpr, + scope: ComparisonScopeEvidence, + query_nodes: Vec, + candidates: Vec, +} + +#[derive(Debug, Clone, serde::Deserialize)] +struct ComparisonScopeEvidence { + data_arrival: asap_types::workload::DataArrival, + planning_time_ms: u64, + horizon_ms: u64, + evaluation_count: u64, + time_scope: String, + lookback_ms: Option, + as_of_ms: Option, + sources: Vec, +} + +impl ComparisonScopeEvidence { + fn resolve(&self) -> Result { + use asap_types::workload::{ + DurationMs, QueryRecurrence, QueryTimeScope, TimeSelection, TimestampMs, + }; + let scope = match self.time_scope.as_str() { + "real_time" => QueryTimeScope::RealTime, + "longitudinal" => QueryTimeScope::Longitudinal, + "mixed" => QueryTimeScope::Mixed, + "unknown" => QueryTimeScope::Unknown, + _ => return Err(AnalyticalCostError::MissingComparisonScope("time_scope")), + }; + let comparison = ComparisonScope { + data_arrival: self.data_arrival, + planning_time: TimestampMs(self.planning_time_ms), + horizon: DurationMs(self.horizon_ms), + recurrence: QueryRecurrence::OneTime { + invocations: self.evaluation_count, + execute_at: None, + }, + time_selection: TimeSelection { + scope, + lookback: self.lookback_ms.map(DurationMs), + as_of: self.as_of_ms.map(TimestampMs), + }, + sources: self.sources.clone(), + }; + comparison.validate()?; + Ok(comparison) + } +} + +#[derive(Debug, Clone, serde::Deserialize)] +struct QueryNodePhysicalEvidence { + logical_node: QueryExpr, + operator: asap_aware_mapping::analytical_cost::PhysicalOperator, + occurrence: usize, + synthetic: bool, + evidence: PhysicalNodeEvidence, +} + +#[derive(Debug, Clone, serde::Deserialize)] +struct CandidatePhysicalEvidence { + replacement: CandidateReplacementSelector, + dag: PhysicalDag, +} + +#[derive(Debug, Clone, serde::Deserialize)] +struct CandidateReplacementSelector { + /// Exact canonical exported replacement DAG. This is compared in full; + /// hashes and strategy labels are never treated as identity. + plan: serde_json::Value, +} + +impl CandidateReplacementSelector { + fn matches(&self, candidate: &ReplacementSubDAG) -> bool { + let actual = match &candidate.replacement { + Replacement::Summary(summary) => { + serde_json::to_value(dag_export::export_summary(summary)) + } + Replacement::Rewrite(query) => serde_json::to_value(dag_export::export(query)), + }; + actual.is_ok_and(|actual| actual == self.plan) + } +} + +struct ExportPhysicalProvider<'a> { + target: &'a TargetPhysicalEvidence, + candidate: &'a CandidatePhysicalEvidence, +} + +impl PlannerPhysicalPlanProvider for ExportPhysicalProvider<'_> { + fn comparison_scope( + &self, + _target: &asap_aware_mapping::replacement::TargetSubDAG<'_>, + ) -> Result { + self.target.scope.resolve() + } + + fn query_node_evidence( + &self, + request: PhysicalNodeRequest<'_>, + ) -> Result { + let mut matches = self.target.query_nodes.iter().filter(|entry| { + entry.logical_node == *request.logical_node + && entry.operator == request.operator + && entry.occurrence == request.occurrence + && entry.synthetic == request.synthetic + }); + let evidence = matches.next().ok_or_else(|| { + AnalyticalCostError::MissingOperatorStatistics(format!( + "logical occurrence {}", + request.occurrence + )) + })?; + if matches.next().is_some() { + return Err(AnalyticalCostError::InvalidPhysicalDag( + "duplicate query-node evidence key", + )); + } + Ok(evidence.evidence.clone()) + } + + fn summary_physical_dag( + &self, + _summary: &Rc, + _target: &asap_aware_mapping::replacement::TargetSubDAG<'_>, + _scope: &ComparisonScope, + ) -> Result { + Ok(self.candidate.dag.clone()) + } +} + +struct ExportPlannerCostModel<'a> { + document: &'a PlannerCostDocument, +} + +impl ExportPlannerCostModel<'_> { + fn bound<'a>( + &'a self, + candidate: &ReplacementSubDAG, + target: &asap_aware_mapping::replacement::TargetSubDAG<'_>, + ) -> Option<(ExportPhysicalProvider<'a>, &'a ResourceCalibration)> { + let mut targets = self + .document + .targets + .iter() + .filter(|entry| entry.target == **target.root); + let target_evidence = targets.next()?; + if targets.next().is_some() { + return None; + } + let mut candidates = target_evidence + .candidates + .iter() + .filter(|entry| entry.replacement.matches(candidate)); + let candidate_evidence = candidates.next()?; + if candidates.next().is_some() { + return None; + } + Some(( + ExportPhysicalProvider { + target: target_evidence, + candidate: candidate_evidence, + }, + &self.document.calibration, + )) + } + + fn annotations( + &self, + candidate: &ReplacementSubDAG, + target: &Rc, + ) -> (CostAnnotation, CostAnnotation, CostAnnotation) { + let target = asap_aware_mapping::replacement::TargetSubDAG::new(target); + let Some((provider, calibration)) = self.bound(candidate, &target) else { + return winner_cost_annotations(); + }; + let Ok(model) = AnalyticalPlannerCostModel::new(&provider, calibration.clone()) else { + return winner_cost_annotations(); + }; + let Ok(estimate) = model.estimate_candidate(candidate, &target) else { + return winner_cost_annotations(); + }; + let version = format!("physical-dag+{}", calibration.version); + let inputs = |resources: asap_aware_mapping::analytical_cost::ResourceEstimate| { + vec![ + CostInput { + name: "estimated_cpu_ops".into(), + value: resources.cpu_ops, + unit: Some("operations".into()), + }, + CostInput { + name: "estimated_peak_memory".into(), + value: resources.peak_memory_bytes as f64, + unit: Some("bytes".into()), + }, + CostInput { + name: "estimated_scan".into(), + value: resources.scan_bytes as f64, + unit: Some("bytes".into()), + }, + ] + }; + let baseline = CostAnnotation::modeled( + estimate.raw_cost.0, + CostUnit::CostUnits, + &version, + inputs(estimate.resources.raw), + ); + let selected = CostAnnotation::modeled( + estimate.candidate_cost.0, + CostUnit::CostUnits, + &version, + inputs(estimate.resources.candidate), + ) + .with_baseline(BaselineRef::PreAsapRecomputation, estimate.raw_cost.0); + let benefit = CostAnnotation { + value: selected.delta, + unit: CostUnit::CostUnits, + source: CostSource::Modeled, + baseline: Some(BaselineRef::PreAsapRecomputation), + delta: None, + benefit_ratio: selected.benefit_ratio, + model_version: Some(version), + benchmark_id: None, + inputs: Vec::new(), + }; + (baseline, selected, benefit) + } +} + +impl CostModel for ExportPlannerCostModel<'_> { + fn candidate_cost_covers_complete_plan(&self) -> bool { + true + } + + fn candidate_cost( + &self, + candidate: &ReplacementSubDAG, + target: &asap_aware_mapping::replacement::TargetSubDAG<'_>, + ) -> Option { + let (provider, calibration) = self.bound(candidate, target)?; + AnalyticalPlannerCostModel::new(&provider, calibration.clone()) + .ok()? + .candidate_cost(candidate, target) + } + + fn rank_candidates( + &self, + intent: &asap_types::pre_asap::AggIntent, + candidates: &[asap_types::post_asap::SketchAlgorithm], + ) -> Vec { + DefaultCostModel.rank_candidates(intent, candidates) + } + + fn estimate_cost( + &self, + candidate: &ReplacementSubDAG, + target: &asap_aware_mapping::replacement::TargetSubDAG<'_>, + ) -> f64 { + self.candidate_cost(candidate, target) + .map_or(f64::NAN, |cost| cost.0) + } +} + /// Baseline/selected/benefit [`CostAnnotation`]s for one [`Winner`] — issue /// #286's "replacement-region baseline cost, selected cost, and benefit" /// granularity item, reused verbatim for [`TargetReplacement`] and for the /// [`DagDecision`] carried by every node the winning candidate produced or /// carried. /// -/// With valid workload inputs and calibration, the baseline is exact raw -/// aggregation and the selected value is the candidate's analytical -/// CPU/memory/scan estimate. Missing evidence fails closed as `Unavailable`; -/// structural node counts are intentionally never used as a fallback. -fn winner_cost_annotations( - analytical: Option<&AnalyticalCostModel>, - candidate: &ReplacementSubDAG, - target: &Rc, -) -> (CostAnnotation, CostAnnotation, CostAnnotation) { - if let Some(model) = analytical { - if let (Ok(baseline_resources), Ok(resources)) = ( - model.raw_resources_for_target(target.as_ref()), - model.candidate_resources_for_target( - candidate, - &asap_aware_mapping::replacement::TargetSubDAG::new(target), - ), - ) { - if let (Ok(baseline_value), Ok(selected_value)) = ( - baseline_resources.calibrated_cost(&model.calibration), - resources.calibrated_cost(&model.calibration), - ) { - let version = format!("{}+{}", ANALYTICAL_MODEL_VERSION, model.calibration.version); - let baseline = CostAnnotation::modeled( - baseline_value, - CostUnit::CostUnits, - &version, - analytical_inputs(model, target, baseline_resources), - ); - let selected = CostAnnotation::modeled( - selected_value, - CostUnit::CostUnits, - &version, - analytical_inputs(model, target, resources), - ) - .with_baseline(BaselineRef::PreAsapRecomputation, baseline_value); - let benefit = CostAnnotation { - value: selected.delta, - unit: CostUnit::CostUnits, - source: CostSource::Modeled, - baseline: Some(BaselineRef::PreAsapRecomputation), - delta: None, - benefit_ratio: selected.benefit_ratio, - model_version: Some(version), - benchmark_id: None, - inputs: Vec::new(), - }; - return (baseline, selected, benefit); - } - } - } - // Structural node counts are deliberately not a fallback: they have no - // physical unit and can reverse the conclusion of the resource model. - // Missing inputs and unsupported candidates fail closed instead. +/// `dag_export` has no deployment-owned physical evidence provider. It must +/// therefore expose costs as unavailable instead of guessing operator +/// statistics or falling back to structural node counts. Callers that have +/// complete evidence use `AnalyticalPlannerCostModel` before export and may +/// attach its dimensional comparison to these fields. +#[allow(dead_code)] +fn winner_cost_annotations() -> (CostAnnotation, CostAnnotation, CostAnnotation) { ( CostAnnotation::unavailable(CostUnit::CostUnits), CostAnnotation::unavailable(CostUnit::CostUnits), @@ -140,65 +383,6 @@ fn winner_cost_annotations( ) } -fn analytical_inputs( - model: &AnalyticalCostModel, - target: &QueryExpr, - resources: ResourceEstimate, -) -> Vec { - let input = |name: &str, value: f64, unit: &str| CostInput { - name: name.to_string(), - value, - unit: Some(unit.to_string()), - }; - vec![ - input("input_rows", model.inputs.input_rows as f64, "rows"), - input("input_bytes", model.inputs.input_bytes as f64, "bytes"), - input( - "source_scan_bytes", - model.inputs.source_scan_bytes as f64, - "bytes", - ), - input("group_count", model.inputs.group_count as f64, "groups"), - input( - "group_key_bytes", - model.inputs.group_key_bytes as f64, - "bytes/group key", - ), - input( - "topk_k", - query_topk_k(target).unwrap_or(0) as f64, - "rows; 0 means no Top-K", - ), - input( - "evaluation_count", - model.inputs.evaluation_count as f64, - "evaluations", - ), - input("estimated_cpu_ops", resources.cpu_ops, "operations"), - input( - "estimated_peak_memory", - resources.peak_memory_bytes as f64, - "bytes", - ), - input("estimated_scan", resources.scan_bytes as f64, "bytes"), - input( - "cost_per_cpu_op", - model.calibration.cost_per_cpu_op, - "cost units/operation", - ), - input( - "cost_per_scan_byte", - model.calibration.cost_per_scan_byte, - "cost units/byte", - ), - input( - "cost_per_retained_byte", - model.calibration.cost_per_retained_byte, - "cost units/byte/scope", - ), - ] -} - use asap_devtools::{lower_promql, lower_sql, SqlCatalog}; enum Lang { @@ -286,7 +470,7 @@ struct ParsedArgs { post_asap: bool, progress: bool, table_schemas: Vec, - analytical_cost: Option, + planner_cost: Option, topk_margin: Option, } @@ -342,7 +526,7 @@ fn parse_args() -> ParsedArgs { let mut post_asap = false; let mut progress = false; let mut table_schemas = Vec::new(); - let mut analytical_cost_json = None; + let mut planner_cost_json = None; let mut topk_margin_json = None; let mut args = std::env::args().skip(1); @@ -387,10 +571,10 @@ fn parse_args() -> ParsedArgs { "--table-schema" => { table_schemas.push(args.next().expect("--table-schema requires JSON")); } - "--analytical-cost-json" => { - analytical_cost_json = Some( + "--planner-cost-json" | "--analytical-cost-json" => { + planner_cost_json = Some( args.next() - .expect("--analytical-cost-json requires a JSON object"), + .expect("planner cost evidence requires a JSON document"), ); } "--topk-margin-json" => { @@ -403,19 +587,8 @@ fn parse_args() -> ParsedArgs { } } flush(&mut entries, &mut pending); - let analytical_cost = analytical_cost_json.map(|raw| { - let model: AnalyticalCostModel = serde_json::from_str(&raw) - .unwrap_or_else(|error| panic!("--analytical-cost-json is invalid: {error}")); - model - .inputs - .validate() - .unwrap_or_else(|error| panic!("invalid analytical inputs: {error}")); - model - .calibration - .validate() - .unwrap_or_else(|error| panic!("invalid analytical calibration: {error}")); - model - }); + let planner_cost = planner_cost_json + .map(|raw| parse_planner_cost_document(&raw).unwrap_or_else(|error| panic!("{error}"))); let topk_margin = topk_margin_json.map(|raw| { let evidence: TopKMarginEvidence = serde_json::from_str(&raw) .unwrap_or_else(|error| panic!("--topk-margin-json is invalid: {error}")); @@ -430,7 +603,7 @@ fn parse_args() -> ParsedArgs { post_asap, progress, table_schemas, - analytical_cost, + planner_cost, topk_margin, } } @@ -465,15 +638,18 @@ fn annotate_with_explanations( /// — the unit both [`PostAsapResults::replacements`] and /// [`PostAsapResults::post_graphs`] are built from, so the two outputs can /// never disagree about which candidate won for a given target. +#[allow(dead_code)] struct Winner<'a> { target: &'a Rc, candidate: &'a ReplacementSubDAG, + costs: (CostAnnotation, CostAnnotation, CostAnnotation), } /// Short explanation intended for a selected winner in node-level UI. The /// candidate's full rationale remains available in pre-ASAP applicability /// notes; repeating that exhaustive prose on every post-ASAP region node /// obscures the actual decision. +#[allow(dead_code)] fn decision_rationale(winner: &Winner<'_>) -> String { match winner.candidate.strategy { "AvgToSumOverCountStrategy" => { @@ -519,6 +695,7 @@ fn decision_rationale(winner: &Winner<'_>) -> String { /// index rather than a `&Winner` directly so a caller can both use the /// match and record it (e.g. `matched[i] = true`) without juggling a second /// way to name the same winner. +#[allow(dead_code)] fn lookup_winner( by_hash: &HashMap>, winners: &[Winner<'_>], @@ -560,11 +737,11 @@ fn decision_cost_entries(graph: &DagGraph) -> Vec<(u32, CostAnnotation, CostAnno /// Build a [`TargetReplacement`] for `winner`, matching this file's own /// per-target `before`/`after` construction. +#[allow(dead_code)] fn target_replacement( decision_id: u32, target_pre_id: u32, winner: &Winner<'_>, - analytical: Option<&AnalyticalCostModel>, ) -> TargetReplacement { let strategy = winner.candidate.strategy.to_string(); let before = dag_export::export(winner.target); @@ -576,8 +753,7 @@ fn target_replacement( TargetReplacementAfter::Rewrite(dag_export::export(rewritten)) } }; - let (baseline_cost, selected_cost, benefit) = - winner_cost_annotations(analytical, winner.candidate, winner.target); + let (baseline_cost, selected_cost, benefit) = winner.costs.clone(); // Derived from `selected_cost` so the legacy scalar field and the // structured annotation can never drift apart. let cost = selected_cost.value.unwrap_or(f64::NAN); @@ -665,10 +841,12 @@ fn assign_workload_node_ids(graphs: &mut [&mut DagGraph]) { /// exact same set of winning candidates (see [`Winner`]), so the flat /// `replacements` list and the merged `post_graph` can never disagree about /// which candidate won for a given target. +#[allow(dead_code)] fn run_post_asap_with_progress( lowered_queries: &[(String, String, QueryExpr)], progress: bool, - analytical: Option<&AnalyticalCostModel>, + cost_model: &dyn CostModel, + export_model: Option<&ExportPlannerCostModel<'_>>, evidence: Option<&dyn AccuracyEvidenceProvider>, ) -> PostAsapResults { let mapping_started = Instant::now(); @@ -679,8 +857,6 @@ fn run_post_asap_with_progress( .iter() .map(|(name, _, qe)| (name.clone(), Rc::new(qe.clone()))) .collect(); - let default_model = DefaultCostModel; - let cost_model: &dyn CostModel = analytical.map_or(&default_model, |model| model); let strategies; let space = if let Some(evidence) = evidence { strategies = default_strategies_with_evidence(cost_model, evidence); @@ -733,6 +909,9 @@ fn run_post_asap_with_progress( Some(Winner { target: group.target, candidate, + costs: export_model.map_or_else(winner_cost_annotations, |model| { + model.annotations(candidate, group.target) + }), }) }) .collect(); @@ -775,8 +954,7 @@ fn run_post_asap_with_progress( let mut find_winner = |expr: &QueryExpr| -> Option { let i = lookup_winner(&by_hash, &winners, &mut post_graph_cache, expr)?; let winner = &winners[i]; - let (baseline_cost, selected_cost, benefit) = - winner_cost_annotations(analytical, winner.candidate, winner.target); + let (baseline_cost, selected_cost, benefit) = winner.costs.clone(); // Derived from `selected_cost`; see `target_replacement`'s identical // derivation. let cost = selected_cost.value.unwrap_or(f64::NAN); @@ -847,7 +1025,7 @@ fn run_post_asap_with_progress( if let Some(i) = lookup_winner(&by_hash, &winners, &mut lookup_cache, source_expr) { replacements.push(( name.clone(), - target_replacement(i as u32, node.id, &winners[i], analytical), + target_replacement(i as u32, node.id, &winners[i]), )); matched[i] = true; } @@ -918,7 +1096,7 @@ fn run_post_asap_with_progress( #[cfg(test)] fn run_post_asap(lowered_queries: &[(String, String, QueryExpr)]) -> PostAsapResults { - run_post_asap_with_progress(lowered_queries, false, None, None) + run_post_asap_with_progress(lowered_queries, false, &DefaultCostModel, None, None) } #[tokio::main] @@ -929,7 +1107,7 @@ async fn main() { post_asap, progress, table_schemas, - analytical_cost, + planner_cost, topk_margin, } = parse_args(); let sql_catalog = catalog(&table_schemas); @@ -1008,14 +1186,27 @@ async fn main() { } if post_asap { - let results = run_post_asap_with_progress( - &lowered_queries, - progress, - analytical_cost.as_ref(), - topk_margin - .as_ref() - .map(|evidence| evidence as &dyn AccuracyEvidenceProvider), - ); + let results = if let Some(document) = planner_cost.as_ref() { + let model = ExportPlannerCostModel { document }; + run_post_asap_with_progress( + &lowered_queries, + progress, + &model, + Some(&model), + topk_margin + .as_ref() + .map(|evidence| evidence as &dyn AccuracyEvidenceProvider), + ) + } else { + eprintln!( + "dag_export: --post-asap requires complete deployment-owned physical-plan evidence; exporting the raw plan only" + ); + PostAsapResults { + replacements: Vec::new(), + post_graphs: Vec::new(), + rejections: Vec::new(), + } + }; for (query_name, replacement) in results.replacements { if let Some(named) = queries.iter_mut().find(|q| q.name == query_name) { named.replacements.push(replacement); @@ -1111,6 +1302,23 @@ async fn main() { mod tests { use super::*; + #[test] + fn cost_annotations_fail_closed_without_physical_evidence() { + let (baseline, selected, benefit) = winner_cost_annotations(); + for annotation in [baseline, selected, benefit] { + assert!(annotation.value.is_none()); + assert_eq!(annotation.source, asap_types::cost::CostSource::Unavailable); + assert_eq!(annotation.unit, CostUnit::CostUnits); + } + } + + #[test] + fn compact_analytical_payload_has_an_explicit_migration_error() { + let error = parse_planner_cost_document(r#"{"inputs":{"group_count":10}}"#) + .expect_err("legacy payload must fail"); + assert!(error.contains("compact analytical-cost payload")); + } + #[test] fn workload_wide_explanations_annotate_cross_query_reuse() { let query = "sum by (job) (rate(http_requests_total[5m]))"; @@ -1264,99 +1472,6 @@ mod tests { } } - #[tokio::test] - async fn unavailable_analytical_candidate_is_not_exported_as_selected() { - use asap_aware_mapping::analytical_cost::{AnalyticalInputs, ResourceCalibration}; - - let cat = default_catalog(); - let sql = "SELECT approx_percentile_cont(latency, 0.95) \ - FROM metrics WHERE latency > 0"; - let query = lower_sql(sql, &cat, AccuracyTarget::Epsilon(0.01)) - .await - .unwrap(); - let model = AnalyticalCostModel { - inputs: AnalyticalInputs { - data_arrival: asap_types::workload::DataArrival::AtRest, - input_rows: 1_000, - input_bytes: 64_000, - source_scan_bytes: 64_000, - group_count: 1, - group_key_bytes: 8, - topk_k: None, - evaluation_count: 10, - }, - calibration: ResourceCalibration { - cost_per_cpu_op: 1.0, - cost_per_scan_byte: 1.0, - cost_per_retained_byte: 1.0, - version: "test".into(), - }, - }; - let results = run_post_asap_with_progress( - &[("filtered".into(), sql.into(), query)], - false, - Some(&model), - None, - ); - assert!( - results.replacements.is_empty(), - "a partially costed filtered aggregate must remain pre-ASAP" - ); - } - - #[tokio::test] - async fn exported_topk_k_comes_from_the_lowered_query() { - use asap_aware_mapping::analytical_cost::{AnalyticalInputs, ResourceCalibration}; - - let cat = default_catalog(); - let sql = "SELECT service, COUNT(*) AS frequency FROM metrics \ - GROUP BY service ORDER BY frequency DESC LIMIT 10"; - let query = lower_sql(sql, &cat, AccuracyTarget::Epsilon(0.01)) - .await - .unwrap(); - let model = AnalyticalCostModel { - inputs: AnalyticalInputs { - data_arrival: asap_types::workload::DataArrival::AtRest, - input_rows: 100_000, - input_bytes: 6_400_000, - source_scan_bytes: 6_400_000, - group_count: 1_000, - group_key_bytes: 32, - // Deliberately wrong legacy adapter value: export must ignore - // it and report the target's canonical k. - topk_k: Some(99), - evaluation_count: 10, - }, - calibration: ResourceCalibration { - cost_per_cpu_op: 1.0, - cost_per_scan_byte: 1.0, - cost_per_retained_byte: 1.0, - version: "test".into(), - }, - }; - let evidence = TopKMarginEvidence { - selected_lower_bound: 1_200.0, - excluded_upper_bound: 1_000.0, - interval_failure_probability: 0.001, - }; - let results = run_post_asap_with_progress( - &[("topk".into(), sql.into(), query)], - false, - Some(&model), - Some(&evidence), - ); - let exported_k: Vec = results - .replacements - .iter() - .filter_map(|(_, replacement)| replacement.selected_cost.as_ref()) - .flat_map(|cost| cost.inputs.iter()) - .filter(|input| input.name == "topk_k") - .map(|input| input.value) - .collect(); - assert!(exported_k.contains(&10.0), "missing canonical Top-K k"); - assert!(!exported_k.contains(&99.0), "export leaked adapter Top-K k"); - } - #[test] fn workload_node_ids_make_smaller_topk_reuse_explicit() { let small = lower_promql( diff --git a/tools/dag-viewer/README.md b/tools/dag-viewer/README.md index 0afda217..e6d5bdcd 100644 --- a/tools/dag-viewer/README.md +++ b/tools/dag-viewer/README.md @@ -57,13 +57,20 @@ shell command. ```sh cargo run -p asap-devtools --bin dag_export -- \ --post-asap --epsilon 0.01 \ - --analytical-cost-json '{"inputs":{"data_arrival":"at_rest","input_rows":1000000,"input_bytes":64000000,"source_scan_bytes":64000000,"group_count":1,"group_key_bytes":16,"topk_k":null,"evaluation_count":100},"calibration":{"cost_per_cpu_op":0.000001,"cost_per_scan_byte":0.00000001,"cost_per_retained_byte":0.000000001,"version":"demo-calibration-v1"}}' \ + --planner-cost-json "$PLANNER_PHYSICAL_EVIDENCE" \ --sql "SELECT service, COUNT(*) FROM metrics GROUP BY service" --name q1 \ > /tmp/dag.json ``` -Load the JSON with the page's file picker. A post-ASAP visualization requires -`--post-asap`; ordinary exports intentionally omit `post_graph`. +Load the JSON with the page's file picker. `--planner-cost-json` is a complete +physical-evidence document: calibration plus target records containing the +exact target `QueryExpr`, comparison scope, exact logical query nodes with +`PhysicalNodeEvidence`, and exact exported replacement DAGs with their bound +`PhysicalDag`. Matching uses full structural equality, never a hash or strategy +name. Duplicate, conflicting, or missing records fail closed. Without this +document, `--post-asap` exports the raw graph only. The old +`--analytical-cost-json` spelling accepts the new document as an alias; its old +compact aggregation payload is rejected with a migration error. The viewer also accepts the JSON produced by `export_summary_maintenance_plan`. It renders the materialized summary DAG as @@ -122,11 +129,10 @@ with IR text. `source` (`Modeled` / `Measured` / `Unavailable`), optionally `baseline` + `delta` + `benefit_ratio`, and `model_version`/`benchmark_id`/`inputs` for provenance. A missing `value` (`source: "Unavailable"`) always renders as -**Not estimated** — the viewer never fabricates a number. With -`--analytical-cost-json`, `dag_export` emits calibrated `CostUnits` and keeps -the CPU operations, peak memory, scan bytes, coefficients, and workload -statistics in `inputs`. Without those inputs, or for an unsupported candidate, -the annotation is `Unavailable`; structural node counts are never substituted. +**Not estimated** — the viewer never fabricates a number. A complete physical +planner export keeps CPU operations, peak memory, scan bytes, coefficients, +and workload statistics in `inputs`. Without complete physical evidence, the +annotation is `Unavailable`; structural node counts are never substituted. See the [analytical model design](../../docs/design_docs/asap-aware-mapping/analytical-resource-cost.md). The same three fields also appear on `TargetReplacement` From 622376541483e053c7c05dffe8f9a99841fb1cbd Mon Sep 17 00:00:00 2001 From: zz_y Date: Wed, 2 Sep 2026 12:32:04 -0600 Subject: [PATCH 10/15] fix(cost): bind export evidence by exact plan identity --- crates/devtools/src/bin/dag_export.rs | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/crates/devtools/src/bin/dag_export.rs b/crates/devtools/src/bin/dag_export.rs index 041ee5ea..cead0022 100644 --- a/crates/devtools/src/bin/dag_export.rs +++ b/crates/devtools/src/bin/dag_export.rs @@ -1319,6 +1319,29 @@ mod tests { assert!(error.contains("compact analytical-cost payload")); } + #[test] + fn exact_candidate_selector_does_not_confuse_the_same_strategy() { + let selected_query = lower_promql("up", AccuracyTarget::Exact).unwrap(); + let other_query = lower_promql("process_cpu_seconds_total", AccuracyTarget::Exact).unwrap(); + let selected = ReplacementSubDAG { + replacement: Replacement::Rewrite(Rc::new(selected_query.clone())), + strategy: "same-strategy", + provenance: asap_aware_mapping::replacement::ReplacementProvenance::LogicalRewrite, + rationale: String::new(), + }; + let other = ReplacementSubDAG { + replacement: Replacement::Rewrite(Rc::new(other_query)), + strategy: "same-strategy", + provenance: asap_aware_mapping::replacement::ReplacementProvenance::LogicalRewrite, + rationale: String::new(), + }; + let selector = CandidateReplacementSelector { + plan: serde_json::to_value(dag_export::export(&selected_query)).unwrap(), + }; + assert!(selector.matches(&selected)); + assert!(!selector.matches(&other)); + } + #[test] fn workload_wide_explanations_annotate_cross_query_reuse() { let query = "sum by (job) (rate(http_requests_total[5m]))"; From 8d7be61f9d334a7973a08b6be8530a2a2dda4449 Mon Sep 17 00:00:00 2001 From: zz_y Date: Wed, 2 Sep 2026 12:37:13 -0600 Subject: [PATCH 11/15] test(cost): cover physical export evidence end to end --- crates/devtools/src/bin/dag_export.rs | 323 ++++++++++++++++++++++++-- 1 file changed, 309 insertions(+), 14 deletions(-) diff --git a/crates/devtools/src/bin/dag_export.rs b/crates/devtools/src/bin/dag_export.rs index cead0022..5de2e7a9 100644 --- a/crates/devtools/src/bin/dag_export.rs +++ b/crates/devtools/src/bin/dag_export.rs @@ -81,7 +81,7 @@ use asap_types::pre_asap::query_expr::QueryExpr; use asap_types::pre_asap::schema::{Column, DataType, Schema}; use asap_types::types::AccuracyTarget; -#[derive(Debug, Clone, serde::Deserialize)] +#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)] struct PlannerCostDocument { calibration: ResourceCalibration, targets: Vec, @@ -93,11 +93,37 @@ fn parse_planner_cost_document(raw: &str) -> Result if value.get("targets").is_none() { return Err("the compact analytical-cost payload is no longer supported; migrate to complete per-operator physical DAG evidence".into()); } - serde_json::from_value(value) - .map_err(|error| format!("planner cost evidence is invalid: {error}")) + let mut document: PlannerCostDocument = serde_json::from_value(value) + .map_err(|error| format!("planner cost evidence is invalid: {error}"))?; + for target in &mut document.targets { + for candidate in &mut target.candidates { + normalize_replacement_identity(&mut candidate.replacement.plan); + } + } + Ok(document) } -#[derive(Debug, Clone, serde::Deserialize)] +fn normalize_replacement_identity(value: &mut serde_json::Value) { + match value { + serde_json::Value::Object(fields) => { + // Accuracy guarantees are derived from the selected summary and + // target and may round-trip through decimal JSON by one ULP. They + // are validated before costing, but are not physical identity. + fields.remove("guarantee"); + for child in fields.values_mut() { + normalize_replacement_identity(child); + } + } + serde_json::Value::Array(values) => { + for child in values { + normalize_replacement_identity(child); + } + } + _ => {} + } +} + +#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)] struct TargetPhysicalEvidence { target: QueryExpr, scope: ComparisonScopeEvidence, @@ -105,7 +131,7 @@ struct TargetPhysicalEvidence { candidates: Vec, } -#[derive(Debug, Clone, serde::Deserialize)] +#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)] struct ComparisonScopeEvidence { data_arrival: asap_types::workload::DataArrival, planning_time_ms: u64, @@ -149,7 +175,7 @@ impl ComparisonScopeEvidence { } } -#[derive(Debug, Clone, serde::Deserialize)] +#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)] struct QueryNodePhysicalEvidence { logical_node: QueryExpr, operator: asap_aware_mapping::analytical_cost::PhysicalOperator, @@ -158,13 +184,13 @@ struct QueryNodePhysicalEvidence { evidence: PhysicalNodeEvidence, } -#[derive(Debug, Clone, serde::Deserialize)] +#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)] struct CandidatePhysicalEvidence { replacement: CandidateReplacementSelector, dag: PhysicalDag, } -#[derive(Debug, Clone, serde::Deserialize)] +#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)] struct CandidateReplacementSelector { /// Exact canonical exported replacement DAG. This is compared in full; /// hashes and strategy labels are never treated as identity. @@ -179,7 +205,10 @@ impl CandidateReplacementSelector { } Replacement::Rewrite(query) => serde_json::to_value(dag_export::export(query)), }; - actual.is_ok_and(|actual| actual == self.plan) + actual.is_ok_and(|mut actual| { + normalize_replacement_identity(&mut actual); + actual == self.plan + }) } } @@ -791,6 +820,14 @@ struct PostAsapResults { rejections: Vec<(String, TargetRejection)>, } +fn raw_only_post_asap_results() -> PostAsapResults { + PostAsapResults { + replacements: Vec::new(), + post_graphs: Vec::new(), + rejections: Vec::new(), + } +} + /// Assign collision-free, explicit identities to structurally equal nodes /// across a set of exported query graphs. The full canonical subtree string /// is the equality key; the compact integer is what JSON consumers receive. @@ -1201,11 +1238,7 @@ async fn main() { eprintln!( "dag_export: --post-asap requires complete deployment-owned physical-plan evidence; exporting the raw plan only" ); - PostAsapResults { - replacements: Vec::new(), - post_graphs: Vec::new(), - rejections: Vec::new(), - } + raw_only_post_asap_results() }; for (query_name, replacement) in results.replacements { if let Some(named) = queries.iter_mut().find(|q| q.name == query_name) { @@ -1301,6 +1334,261 @@ async fn main() { #[cfg(test)] mod tests { use super::*; + use std::cell::RefCell; + + use asap_aware_mapping::analytical_cost::{ + ExecutionMultiplicity, PhysicalDagNode, PhysicalOperator, + }; + use asap_aware_mapping::analytical_lowering::lower_query_physical_dag; + use asap_aware_mapping::analytical_statistics::{ + EdgeStatistics, OperatorStatistics, SourceCoverage, + }; + use asap_types::pre_asap::{Column, DataType, Reduction, Schema, Source}; + + fn non_topk_query() -> QueryExpr { + QueryExpr::Aggregate { + reduction: Reduction::by(vec![]), + measures: vec![asap_types::pre_asap::AggIntent::Count { + accuracy: AccuracyTarget::Epsilon(0.1), + }], + output_names: vec![], + having: None, + child: Rc::new(QueryExpr::Scan { + source: Source::Table { + table_ref: "events".into(), + }, + predicates: vec![], + schema: Schema::new(vec![Column::new("v", DataType::Int64, false)]), + }), + } + } + + fn test_scope() -> ComparisonScopeEvidence { + ComparisonScopeEvidence { + data_arrival: asap_types::workload::DataArrival::AtRest, + planning_time_ms: 1_000, + horizon_ms: 10_000, + evaluation_count: 10, + time_scope: "longitudinal".into(), + lookback_ms: Some(10_000), + as_of_ms: Some(1_000), + sources: vec![SourceCoverage { + source: Source::Table { + table_ref: "events".into(), + }, + snapshot_id: "snapshot-1".into(), + predicates: vec![], + }], + } + } + + fn edge(rows: u64, bytes: u64) -> EdgeStatistics { + EdgeStatistics { rows, bytes } + } + + fn query_evidence(query: &QueryExpr) -> Vec { + let entries = RefCell::new(Vec::new()); + let scope = test_scope().resolve().unwrap(); + let provider = |request: PhysicalNodeRequest<'_>| { + let (statistics, output_buffer_bytes) = match request.operator { + PhysicalOperator::Scan => ( + OperatorStatistics { + source_scan_bytes: 64_000, + inputs: vec![edge(1_000, 64_000)], + output: edge(1_000, 64_000), + group_count: None, + key_bytes: None, + aggregate_value_bytes: None, + k: None, + hash_join_build_side: None, + promql: None, + }, + 64_000, + ), + PhysicalOperator::HashAggregate => ( + OperatorStatistics { + source_scan_bytes: 0, + inputs: vec![edge(1_000, 64_000)], + output: edge(100, 2_400), + group_count: Some(100), + key_bytes: Some(8), + aggregate_value_bytes: Some(8), + k: None, + hash_join_build_side: None, + promql: None, + }, + 2_400, + ), + _ => return Err(AnalyticalCostError::UnsupportedQueryOperator), + }; + let evidence = PhysicalNodeEvidence { + physical_id: format!("{:?}-{}", request.operator, request.occurrence), + statistics, + output_buffer_bytes, + }; + entries.borrow_mut().push(QueryNodePhysicalEvidence { + logical_node: request.logical_node.clone(), + operator: request.operator, + occurrence: request.occurrence, + synthetic: request.synthetic, + evidence: evidence.clone(), + }); + Ok(evidence) + }; + lower_query_physical_dag(&Rc::new(query.clone()), &scope, &provider).unwrap(); + entries.into_inner() + } + + fn cheap_candidate_dag() -> PhysicalDag { + let coverage = test_scope().sources[0].clone(); + let statistics = OperatorStatistics { + source_scan_bytes: 64, + inputs: vec![edge(100, 2_400)], + output: edge(100, 2_400), + group_count: None, + key_bytes: None, + aggregate_value_bytes: None, + k: None, + hash_join_build_side: None, + promql: None, + }; + PhysicalDag { + nodes: vec![PhysicalDagNode { + id: "summary-read".into(), + operator: PhysicalOperator::Scan, + children: vec![], + source_coverage: Some(coverage), + output_buffer_bytes: 2_400, + retained_bytes: 0, + execution: ExecutionMultiplicity::PerEvaluation, + }], + root: "summary-read".into(), + evidence: [( + "summary-read".into(), + PhysicalNodeEvidence { + physical_id: "summary-read".into(), + statistics, + output_buffer_bytes: 2_400, + }, + )] + .into_iter() + .collect(), + } + } + + fn cost_fixture() -> (QueryExpr, ReplacementSubDAG, PlannerCostDocument) { + let query = non_topk_query(); + let root = Rc::new(query.clone()); + let space = search_workload(vec![(String::from("q"), Rc::clone(&root))]); + let group = space + .groups() + .find(|group| *group.target == query) + .expect("aggregate memo group"); + let candidate = group + .candidates + .iter() + .find(|candidate| { + !matches!( + &candidate.replacement, + Replacement::Summary(node) + if matches!(node.expr, SummaryExpr::KeepPreAsap(_)) + ) + }) + .expect("summary candidate") + .clone(); + let plan = match &candidate.replacement { + Replacement::Summary(summary) => { + serde_json::to_value(dag_export::export_summary(summary)).unwrap() + } + Replacement::Rewrite(rewrite) => { + serde_json::to_value(dag_export::export(rewrite)).unwrap() + } + }; + let document = PlannerCostDocument { + calibration: ResourceCalibration { + cost_per_cpu_op: 1.0, + cost_per_scan_byte: 1.0, + cost_per_retained_byte: 1.0, + version: "test".into(), + }, + targets: vec![TargetPhysicalEvidence { + target: query.clone(), + scope: test_scope(), + query_nodes: query_evidence(&query), + candidates: vec![CandidatePhysicalEvidence { + replacement: CandidateReplacementSelector { plan }, + dag: cheap_candidate_dag(), + }], + }], + }; + (query, candidate, document) + } + + #[test] + fn planner_json_costs_and_exports_a_generic_non_topk_winner() { + let (query, candidate, document) = cost_fixture(); + let json = serde_json::to_string(&document).unwrap(); + let parsed = parse_planner_cost_document(&json).unwrap(); + assert_eq!(parsed.targets[0].target, query); + assert!(parsed.targets[0].candidates[0] + .replacement + .matches(&candidate)); + let model = ExportPlannerCostModel { document: &parsed }; + let target_rc = Rc::new(query.clone()); + let target = asap_aware_mapping::replacement::TargetSubDAG::new(&target_rc); + let (provider, calibration) = model.bound(&candidate, &target).expect("exact binding"); + let estimate = AnalyticalPlannerCostModel::new(&provider, calibration.clone()) + .unwrap() + .estimate_candidate(&candidate, &target) + .unwrap(); + assert!(estimate.candidate_cost < estimate.raw_cost); + let (baseline, selected, benefit) = model.annotations(&candidate, &Rc::new(query)); + assert!(baseline.value.is_some()); + assert!(selected.value.is_some()); + assert!(benefit.value.is_some()); + assert!(selected + .inputs + .iter() + .any(|input| input.name == "estimated_scan")); + assert!(!selected.inputs.iter().any(|input| input.name == "topk_k")); + } + + #[test] + fn duplicate_target_candidate_and_query_evidence_each_fail_closed() { + let (query, candidate, document) = cost_fixture(); + let target_rc = Rc::new(query); + let target = asap_aware_mapping::replacement::TargetSubDAG::new(&target_rc); + + let mut duplicate_target = document.clone(); + duplicate_target + .targets + .push(duplicate_target.targets[0].clone()); + assert!(ExportPlannerCostModel { + document: &duplicate_target + } + .candidate_cost(&candidate, &target) + .is_none()); + + let mut duplicate_candidate = document.clone(); + let candidate_entry = duplicate_candidate.targets[0].candidates[0].clone(); + duplicate_candidate.targets[0] + .candidates + .push(candidate_entry); + assert!(ExportPlannerCostModel { + document: &duplicate_candidate + } + .candidate_cost(&candidate, &target) + .is_none()); + + let mut duplicate_query = document; + let query_entry = duplicate_query.targets[0].query_nodes[0].clone(); + duplicate_query.targets[0].query_nodes.push(query_entry); + assert!(ExportPlannerCostModel { + document: &duplicate_query + } + .candidate_cost(&candidate, &target) + .is_none()); + } #[test] fn cost_annotations_fail_closed_without_physical_evidence() { @@ -1312,6 +1600,13 @@ mod tests { } } + #[test] + fn missing_physical_evidence_keeps_the_export_raw_only() { + let results = raw_only_post_asap_results(); + assert!(results.replacements.is_empty()); + assert!(results.post_graphs.is_empty()); + } + #[test] fn compact_analytical_payload_has_an_explicit_migration_error() { let error = parse_planner_cost_document(r#"{"inputs":{"group_count":10}}"#) From aac213c1b0145b4a2afefce1e1e5593cd7c38f90 Mon Sep 17 00:00:00 2001 From: zz_y Date: Wed, 2 Sep 2026 13:00:26 -0600 Subject: [PATCH 12/15] fix(export): select complete physical plan winners --- crates/devtools/src/bin/dag_export.rs | 265 +++++++++++++++++++++----- 1 file changed, 216 insertions(+), 49 deletions(-) diff --git a/crates/devtools/src/bin/dag_export.rs b/crates/devtools/src/bin/dag_export.rs index 5de2e7a9..3517d955 100644 --- a/crates/devtools/src/bin/dag_export.rs +++ b/crates/devtools/src/bin/dag_export.rs @@ -49,6 +49,7 @@ // --post-asap --epsilon 0.01 \ // --sql "SELECT quantile(0.95, latency) FROM metrics" --name q1 +use std::cell::RefCell; use std::collections::HashMap; use std::rc::Rc; use std::time::Instant; @@ -61,6 +62,7 @@ use asap_aware_mapping::analytical_planner::{ AnalyticalPlannerCostModel, PlannerPhysicalPlanProvider, }; use asap_aware_mapping::analytical_statistics::ComparisonScope; +#[cfg(test)] use asap_aware_mapping::cost_model::DefaultCostModel; use asap_aware_mapping::cost_model::{Cost, CostModel}; use asap_aware_mapping::replacement::{ @@ -97,7 +99,7 @@ fn parse_planner_cost_document(raw: &str) -> Result .map_err(|error| format!("planner cost evidence is invalid: {error}"))?; for target in &mut document.targets { for candidate in &mut target.candidates { - normalize_replacement_identity(&mut candidate.replacement.plan); + normalize_replacement_identity(candidate.plan_mut()); } } Ok(document) @@ -185,36 +187,64 @@ struct QueryNodePhysicalEvidence { } #[derive(Debug, Clone, serde::Serialize, serde::Deserialize)] -struct CandidatePhysicalEvidence { - replacement: CandidateReplacementSelector, - dag: PhysicalDag, +#[serde(tag = "kind", rename_all = "snake_case", deny_unknown_fields)] +enum CandidatePhysicalEvidence { + Rewrite { + plan: serde_json::Value, + }, + Summary { + plan: serde_json::Value, + physical_dag: PhysicalDag, + }, } -#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)] -struct CandidateReplacementSelector { - /// Exact canonical exported replacement DAG. This is compared in full; - /// hashes and strategy labels are never treated as identity. - plan: serde_json::Value, -} +impl CandidatePhysicalEvidence { + fn plan(&self) -> &serde_json::Value { + match self { + Self::Rewrite { plan } | Self::Summary { plan, .. } => plan, + } + } + + fn plan_mut(&mut self) -> &mut serde_json::Value { + match self { + Self::Rewrite { plan } | Self::Summary { plan, .. } => plan, + } + } -impl CandidateReplacementSelector { fn matches(&self, candidate: &ReplacementSubDAG) -> bool { - let actual = match &candidate.replacement { - Replacement::Summary(summary) => { + let actual = match (self, &candidate.replacement) { + (Self::Summary { .. }, Replacement::Summary(summary)) => { serde_json::to_value(dag_export::export_summary(summary)) } - Replacement::Rewrite(query) => serde_json::to_value(dag_export::export(query)), + (Self::Rewrite { .. }, Replacement::Rewrite(query)) => { + serde_json::to_value(dag_export::export(query)) + } + _ => return false, }; actual.is_ok_and(|mut actual| { normalize_replacement_identity(&mut actual); - actual == self.plan + actual == *self.plan() }) } + + fn summary_dag(&self) -> Option<&PhysicalDag> { + match self { + Self::Summary { physical_dag, .. } => Some(physical_dag), + Self::Rewrite { .. } => None, + } + } } struct ExportPhysicalProvider<'a> { target: &'a TargetPhysicalEvidence, candidate: &'a CandidatePhysicalEvidence, + used_query_nodes: RefCell>, +} + +impl ExportPhysicalProvider<'_> { + fn all_query_evidence_used(&self) -> bool { + self.used_query_nodes.borrow().len() == self.target.query_nodes.len() + } } impl PlannerPhysicalPlanProvider for ExportPhysicalProvider<'_> { @@ -229,13 +259,18 @@ impl PlannerPhysicalPlanProvider for ExportPhysicalProvider<'_> { &self, request: PhysicalNodeRequest<'_>, ) -> Result { - let mut matches = self.target.query_nodes.iter().filter(|entry| { - entry.logical_node == *request.logical_node - && entry.operator == request.operator - && entry.occurrence == request.occurrence - && entry.synthetic == request.synthetic - }); - let evidence = matches.next().ok_or_else(|| { + let mut matches = self + .target + .query_nodes + .iter() + .enumerate() + .filter(|(_, entry)| { + entry.logical_node == *request.logical_node + && entry.operator == request.operator + && entry.occurrence == request.occurrence + && entry.synthetic == request.synthetic + }); + let (index, evidence) = matches.next().ok_or_else(|| { AnalyticalCostError::MissingOperatorStatistics(format!( "logical occurrence {}", request.occurrence @@ -246,6 +281,7 @@ impl PlannerPhysicalPlanProvider for ExportPhysicalProvider<'_> { "duplicate query-node evidence key", )); } + self.used_query_nodes.borrow_mut().insert(index); Ok(evidence.evidence.clone()) } @@ -255,7 +291,12 @@ impl PlannerPhysicalPlanProvider for ExportPhysicalProvider<'_> { _target: &asap_aware_mapping::replacement::TargetSubDAG<'_>, _scope: &ComparisonScope, ) -> Result { - Ok(self.candidate.dag.clone()) + self.candidate + .summary_dag() + .cloned() + .ok_or(AnalyticalCostError::InvalidPhysicalDag( + "summary candidate is missing its physical DAG", + )) } } @@ -281,7 +322,7 @@ impl ExportPlannerCostModel<'_> { let mut candidates = target_evidence .candidates .iter() - .filter(|entry| entry.replacement.matches(candidate)); + .filter(|entry| entry.matches(candidate)); let candidate_evidence = candidates.next()?; if candidates.next().is_some() { return None; @@ -290,6 +331,7 @@ impl ExportPlannerCostModel<'_> { ExportPhysicalProvider { target: target_evidence, candidate: candidate_evidence, + used_query_nodes: RefCell::new(std::collections::HashSet::new()), }, &self.document.calibration, )) @@ -310,6 +352,9 @@ impl ExportPlannerCostModel<'_> { let Ok(estimate) = model.estimate_candidate(candidate, &target) else { return winner_cost_annotations(); }; + if !provider.all_query_evidence_used() { + return winner_cost_annotations(); + } let version = format!("physical-dag+{}", calibration.version); let inputs = |resources: asap_aware_mapping::analytical_cost::ResourceEstimate| { vec![ @@ -369,17 +414,20 @@ impl CostModel for ExportPlannerCostModel<'_> { target: &asap_aware_mapping::replacement::TargetSubDAG<'_>, ) -> Option { let (provider, calibration) = self.bound(candidate, target)?; - AnalyticalPlannerCostModel::new(&provider, calibration.clone()) + let cost = AnalyticalPlannerCostModel::new(&provider, calibration.clone()) .ok()? - .candidate_cost(candidate, target) + .candidate_cost(candidate, target)?; + provider.all_query_evidence_used().then_some(cost) } fn rank_candidates( &self, - intent: &asap_types::pre_asap::AggIntent, + _intent: &asap_types::pre_asap::AggIntent, candidates: &[asap_types::post_asap::SketchAlgorithm], ) -> Vec { - DefaultCostModel.rank_candidates(intent, candidates) + // Candidate generation must not reintroduce the legacy structural + // cost model before complete physical alternatives are compared. + candidates.to_vec() } fn estimate_cost( @@ -874,7 +922,7 @@ fn assign_workload_node_ids(graphs: &mut [&mut DagGraph]) { /// `default_strategies()` — which includes `AvgToSumOverCountStrategy` as of /// #282 — is exactly the strategy set this binary wants; no custom list /// needed) over every lowered query, rank each discovered `MemoGroup` via -/// `PlanSpace::cost_sorted`, and build both `--post-asap` outputs from the +/// `PlanSpace::global_selection`, and build both `--post-asap` outputs from the /// exact same set of winning candidates (see [`Winner`]), so the flat /// `replacements` list and the merged `post_graph` can never disagree about /// which candidate won for a given target. @@ -901,7 +949,7 @@ fn run_post_asap_with_progress( } else { search_workload(roots) }; - let ranked_groups = space.cost_sorted(cost_model); + let selection = space.global_selection(cost_model); // A group's top candidate can be `keep_pre_asap`'s own conservative // fallback — `Replacement::Summary(SummaryNode { expr: @@ -925,18 +973,10 @@ fn run_post_asap_with_progress( // winner again, forever. Treating this candidate as "no winner" (same // as an empty candidate list) avoids ever handing `export_post_asap` a // winner that can't help but recurse into itself. - let winners: Vec> = ranked_groups - .iter() + let winners: Vec> = selection + .groups() .filter_map(|group| { - let target = asap_aware_mapping::replacement::TargetSubDAG::with_consumer_count( - group.target, - group.consumer_count, - ); - let candidate = group - .candidates - .iter() - .copied() - .find(|candidate| cost_model.candidate_cost(candidate, &target).is_some())?; + let candidate = group.chosen?; if matches!( &candidate.replacement, Replacement::Summary(node) if matches!(node.expr, SummaryExpr::KeepPreAsap(_)) @@ -1131,6 +1171,7 @@ fn run_post_asap_with_progress( } } +#[cfg(test)] #[cfg(test)] fn run_post_asap(lowered_queries: &[(String, String, QueryExpr)]) -> PostAsapResults { run_post_asap_with_progress(lowered_queries, false, &DefaultCostModel, None, None) @@ -1334,7 +1375,6 @@ async fn main() { #[cfg(test)] mod tests { use super::*; - use std::cell::RefCell; use asap_aware_mapping::analytical_cost::{ ExecutionMultiplicity, PhysicalDagNode, PhysicalOperator, @@ -1476,6 +1516,17 @@ mod tests { } } + fn candidate_plan(candidate: &ReplacementSubDAG) -> serde_json::Value { + match &candidate.replacement { + Replacement::Summary(summary) => { + serde_json::to_value(dag_export::export_summary(summary)).unwrap() + } + Replacement::Rewrite(rewrite) => { + serde_json::to_value(dag_export::export(rewrite)).unwrap() + } + } + } + fn cost_fixture() -> (QueryExpr, ReplacementSubDAG, PlannerCostDocument) { let query = non_topk_query(); let root = Rc::new(query.clone()); @@ -1515,9 +1566,12 @@ mod tests { target: query.clone(), scope: test_scope(), query_nodes: query_evidence(&query), - candidates: vec![CandidatePhysicalEvidence { - replacement: CandidateReplacementSelector { plan }, - dag: cheap_candidate_dag(), + candidates: vec![match &candidate.replacement { + Replacement::Summary(_) => CandidatePhysicalEvidence::Summary { + plan, + physical_dag: cheap_candidate_dag(), + }, + Replacement::Rewrite(_) => CandidatePhysicalEvidence::Rewrite { plan }, }], }], }; @@ -1530,9 +1584,7 @@ mod tests { let json = serde_json::to_string(&document).unwrap(); let parsed = parse_planner_cost_document(&json).unwrap(); assert_eq!(parsed.targets[0].target, query); - assert!(parsed.targets[0].candidates[0] - .replacement - .matches(&candidate)); + assert!(parsed.targets[0].candidates[0].matches(&candidate)); let model = ExportPlannerCostModel { document: &parsed }; let target_rc = Rc::new(query.clone()); let target = asap_aware_mapping::replacement::TargetSubDAG::new(&target_rc); @@ -1590,6 +1642,121 @@ mod tests { .is_none()); } + #[test] + fn incomplete_or_unused_json_evidence_fails_closed() { + let (query, candidate, document) = cost_fixture(); + let target_rc = Rc::new(query); + let target = asap_aware_mapping::replacement::TargetSubDAG::new(&target_rc); + + let mut missing = document.clone(); + missing.targets[0].query_nodes.pop(); + let missing = parse_planner_cost_document(&serde_json::to_string(&missing).unwrap()) + .expect("well-formed but incomplete evidence document"); + assert!(ExportPlannerCostModel { document: &missing } + .candidate_cost(&candidate, &target) + .is_none()); + + let mut unused = document; + let mut extra = unused.targets[0].query_nodes[0].clone(); + extra.occurrence = usize::MAX; + unused.targets[0].query_nodes.push(extra); + let unused = parse_planner_cost_document(&serde_json::to_string(&unused).unwrap()) + .expect("well-formed document with unused evidence"); + assert!(ExportPlannerCostModel { document: &unused } + .candidate_cost(&candidate, &target) + .is_none()); + } + + #[test] + fn invalid_candidate_dag_from_json_fails_closed() { + let (query, candidate, mut document) = cost_fixture(); + let CandidatePhysicalEvidence::Summary { physical_dag, .. } = + &mut document.targets[0].candidates[0] + else { + panic!("fixture must use a summary candidate"); + }; + physical_dag.nodes.push(physical_dag.nodes[0].clone()); + let document = parse_planner_cost_document(&serde_json::to_string(&document).unwrap()) + .expect("invalid physical semantics are checked by the estimator"); + let target_rc = Rc::new(query); + let target = asap_aware_mapping::replacement::TargetSubDAG::new(&target_rc); + assert!(ExportPlannerCostModel { + document: &document + } + .candidate_cost(&candidate, &target) + .is_none()); + } + + #[test] + fn global_selection_uses_the_cheapest_complete_physical_candidate() { + let query = non_topk_query(); + let root = Rc::new(query.clone()); + let space = search_workload(vec![(String::from("q"), Rc::clone(&root))]); + let group = space + .groups() + .find(|group| *group.target == query) + .expect("aggregate memo group"); + let candidates: Vec<_> = group + .candidates + .iter() + .filter(|candidate| { + matches!(candidate.replacement, Replacement::Summary(ref node) + if !matches!(node.expr, SummaryExpr::KeepPreAsap(_))) + }) + .take(2) + .collect(); + assert_eq!( + candidates.len(), + 2, + "fixture needs two physical alternatives" + ); + + let mut first_dag = cheap_candidate_dag(); + first_dag + .evidence + .get_mut("summary-read") + .unwrap() + .statistics + .source_scan_bytes = 1_024; + let second_dag = cheap_candidate_dag(); + let document = PlannerCostDocument { + calibration: ResourceCalibration { + cost_per_cpu_op: 1.0, + cost_per_scan_byte: 1.0, + cost_per_retained_byte: 1.0, + version: "test".into(), + }, + targets: vec![TargetPhysicalEvidence { + target: query.clone(), + scope: test_scope(), + query_nodes: query_evidence(&query), + candidates: vec![ + CandidatePhysicalEvidence::Summary { + plan: candidate_plan(candidates[0]), + physical_dag: first_dag, + }, + CandidatePhysicalEvidence::Summary { + plan: candidate_plan(candidates[1]), + physical_dag: second_dag, + }, + ], + }], + }; + let document = parse_planner_cost_document(&serde_json::to_string(&document).unwrap()) + .expect("complete physical evidence"); + let model = ExportPlannerCostModel { + document: &document, + }; + let selection = space.global_selection(&model); + let chosen = selection + .groups() + .find(|selected| selected.target.as_ref() == &query) + .and_then(|selected| selected.chosen) + .expect("one complete physical candidate should win"); + assert!(document.targets[0].candidates[1].matches(chosen)); + assert!(!document.targets[0].candidates[0].matches(chosen)); + } + #[test] fn cost_annotations_fail_closed_without_physical_evidence() { let (baseline, selected, benefit) = winner_cost_annotations(); @@ -1630,7 +1797,7 @@ mod tests { provenance: asap_aware_mapping::replacement::ReplacementProvenance::LogicalRewrite, rationale: String::new(), }; - let selector = CandidateReplacementSelector { + let selector = CandidatePhysicalEvidence::Rewrite { plan: serde_json::to_value(dag_export::export(&selected_query)).unwrap(), }; assert!(selector.matches(&selected)); From 84f825135fdff4a403bbc144dc6b4cebd6f2e589 Mon Sep 17 00:00:00 2001 From: zz_y Date: Wed, 2 Sep 2026 13:26:36 -0600 Subject: [PATCH 13/15] fix(export): reject incomplete planner evidence --- crates/devtools/src/bin/dag_export.rs | 163 +++++++++++++++++++------- 1 file changed, 120 insertions(+), 43 deletions(-) diff --git a/crates/devtools/src/bin/dag_export.rs b/crates/devtools/src/bin/dag_export.rs index 3517d955..1f5784c0 100644 --- a/crates/devtools/src/bin/dag_export.rs +++ b/crates/devtools/src/bin/dag_export.rs @@ -65,8 +65,10 @@ use asap_aware_mapping::analytical_statistics::ComparisonScope; #[cfg(test)] use asap_aware_mapping::cost_model::DefaultCostModel; use asap_aware_mapping::cost_model::{Cost, CostModel}; +#[cfg(test)] +use asap_aware_mapping::replacement::search_workload; use asap_aware_mapping::replacement::{ - default_strategies_with_evidence, search_workload, search_workload_with, Replacement, + default_strategies_with, default_strategies_with_evidence, search_workload_with, Replacement, ReplacementSubDAG, }; use asap_aware_mapping::{AccuracyEvidenceProvider, PropagationStats}; @@ -84,6 +86,7 @@ use asap_types::pre_asap::schema::{Column, DataType, Schema}; use asap_types::types::AccuracyTarget; #[derive(Debug, Clone, serde::Serialize, serde::Deserialize)] +#[serde(deny_unknown_fields)] struct PlannerCostDocument { calibration: ResourceCalibration, targets: Vec, @@ -126,6 +129,7 @@ fn normalize_replacement_identity(value: &mut serde_json::Value) { } #[derive(Debug, Clone, serde::Serialize, serde::Deserialize)] +#[serde(deny_unknown_fields)] struct TargetPhysicalEvidence { target: QueryExpr, scope: ComparisonScopeEvidence, @@ -134,6 +138,7 @@ struct TargetPhysicalEvidence { } #[derive(Debug, Clone, serde::Serialize, serde::Deserialize)] +#[serde(deny_unknown_fields)] struct ComparisonScopeEvidence { data_arrival: asap_types::workload::DataArrival, planning_time_ms: u64, @@ -178,6 +183,7 @@ impl ComparisonScopeEvidence { } #[derive(Debug, Clone, serde::Serialize, serde::Deserialize)] +#[serde(deny_unknown_fields)] struct QueryNodePhysicalEvidence { logical_node: QueryExpr, operator: asap_aware_mapping::analytical_cost::PhysicalOperator, @@ -302,9 +308,19 @@ impl PlannerPhysicalPlanProvider for ExportPhysicalProvider<'_> { struct ExportPlannerCostModel<'a> { document: &'a PlannerCostDocument, + used_targets: RefCell>, + used_candidates: RefCell>, } impl ExportPlannerCostModel<'_> { + fn new(document: &PlannerCostDocument) -> ExportPlannerCostModel<'_> { + ExportPlannerCostModel { + document, + used_targets: RefCell::new(std::collections::HashSet::new()), + used_candidates: RefCell::new(std::collections::HashSet::new()), + } + } + fn bound<'a>( &'a self, candidate: &ReplacementSubDAG, @@ -314,19 +330,25 @@ impl ExportPlannerCostModel<'_> { .document .targets .iter() - .filter(|entry| entry.target == **target.root); - let target_evidence = targets.next()?; + .enumerate() + .filter(|(_, entry)| entry.target == **target.root); + let (target_index, target_evidence) = targets.next()?; if targets.next().is_some() { return None; } let mut candidates = target_evidence .candidates .iter() - .filter(|entry| entry.matches(candidate)); - let candidate_evidence = candidates.next()?; + .enumerate() + .filter(|(_, entry)| entry.matches(candidate)); + let (candidate_index, candidate_evidence) = candidates.next()?; if candidates.next().is_some() { return None; } + self.used_targets.borrow_mut().insert(target_index); + self.used_candidates + .borrow_mut() + .insert((target_index, candidate_index)); Some(( ExportPhysicalProvider { target: target_evidence, @@ -337,6 +359,25 @@ impl ExportPlannerCostModel<'_> { )) } + fn all_document_evidence_used(&self) -> bool { + let used_targets = self.used_targets.borrow(); + let used_candidates = self.used_candidates.borrow(); + self.document + .targets + .iter() + .enumerate() + .all(|(target_index, target)| { + used_targets.contains(&target_index) + && target + .candidates + .iter() + .enumerate() + .all(|(candidate_index, _)| { + used_candidates.contains(&(target_index, candidate_index)) + }) + }) + } + fn annotations( &self, candidate: &ReplacementSubDAG, @@ -918,14 +959,11 @@ fn assign_workload_node_ids(graphs: &mut [&mut DagGraph]) { } } -/// Run `asap_aware_mapping::replacement::search_workload` (its own -/// `default_strategies()` — which includes `AvgToSumOverCountStrategy` as of -/// #282 — is exactly the strategy set this binary wants; no custom list -/// needed) over every lowered query, rank each discovered `MemoGroup` via -/// `PlanSpace::global_selection`, and build both `--post-asap` outputs from the -/// exact same set of winning candidates (see [`Winner`]), so the flat -/// `replacements` list and the merged `post_graph` can never disagree about -/// which candidate won for a given target. +/// Search every lowered query with strategies bound to the supplied cost +/// model, rank each discovered `MemoGroup` via `PlanSpace::global_selection`, +/// and build both `--post-asap` outputs from the exact same set of winning +/// candidates (see [`Winner`]). The flat `replacements` list and merged +/// `post_graph` therefore cannot disagree about which candidate won. #[allow(dead_code)] fn run_post_asap_with_progress( lowered_queries: &[(String, String, QueryExpr)], @@ -947,9 +985,13 @@ fn run_post_asap_with_progress( strategies = default_strategies_with_evidence(cost_model, evidence); search_workload_with(roots, &strategies) } else { - search_workload(roots) + strategies = default_strategies_with(cost_model); + search_workload_with(roots, &strategies) }; let selection = space.global_selection(cost_model); + if export_model.is_some_and(|model| !model.all_document_evidence_used()) { + return raw_only_post_asap_results(); + } // A group's top candidate can be `keep_pre_asap`'s own conservative // fallback — `Replacement::Summary(SummaryNode { expr: @@ -1265,7 +1307,7 @@ async fn main() { if post_asap { let results = if let Some(document) = planner_cost.as_ref() { - let model = ExportPlannerCostModel { document }; + let model = ExportPlannerCostModel::new(document); run_post_asap_with_progress( &lowered_queries, progress, @@ -1519,10 +1561,10 @@ mod tests { fn candidate_plan(candidate: &ReplacementSubDAG) -> serde_json::Value { match &candidate.replacement { Replacement::Summary(summary) => { - serde_json::to_value(dag_export::export_summary(summary)).unwrap() + serde_json::to_value(dag_export::export_summary(summary.as_ref())).unwrap() } Replacement::Rewrite(rewrite) => { - serde_json::to_value(dag_export::export(rewrite)).unwrap() + serde_json::to_value(dag_export::export(rewrite.as_ref())).unwrap() } } } @@ -1585,7 +1627,7 @@ mod tests { let parsed = parse_planner_cost_document(&json).unwrap(); assert_eq!(parsed.targets[0].target, query); assert!(parsed.targets[0].candidates[0].matches(&candidate)); - let model = ExportPlannerCostModel { document: &parsed }; + let model = ExportPlannerCostModel::new(&parsed); let target_rc = Rc::new(query.clone()); let target = asap_aware_mapping::replacement::TargetSubDAG::new(&target_rc); let (provider, calibration) = model.bound(&candidate, &target).expect("exact binding"); @@ -1615,31 +1657,25 @@ mod tests { duplicate_target .targets .push(duplicate_target.targets[0].clone()); - assert!(ExportPlannerCostModel { - document: &duplicate_target - } - .candidate_cost(&candidate, &target) - .is_none()); + assert!(ExportPlannerCostModel::new(&duplicate_target) + .candidate_cost(&candidate, &target) + .is_none()); let mut duplicate_candidate = document.clone(); let candidate_entry = duplicate_candidate.targets[0].candidates[0].clone(); duplicate_candidate.targets[0] .candidates .push(candidate_entry); - assert!(ExportPlannerCostModel { - document: &duplicate_candidate - } - .candidate_cost(&candidate, &target) - .is_none()); + assert!(ExportPlannerCostModel::new(&duplicate_candidate) + .candidate_cost(&candidate, &target) + .is_none()); let mut duplicate_query = document; let query_entry = duplicate_query.targets[0].query_nodes[0].clone(); duplicate_query.targets[0].query_nodes.push(query_entry); - assert!(ExportPlannerCostModel { - document: &duplicate_query - } - .candidate_cost(&candidate, &target) - .is_none()); + assert!(ExportPlannerCostModel::new(&duplicate_query) + .candidate_cost(&candidate, &target) + .is_none()); } #[test] @@ -1652,7 +1688,7 @@ mod tests { missing.targets[0].query_nodes.pop(); let missing = parse_planner_cost_document(&serde_json::to_string(&missing).unwrap()) .expect("well-formed but incomplete evidence document"); - assert!(ExportPlannerCostModel { document: &missing } + assert!(ExportPlannerCostModel::new(&missing) .candidate_cost(&candidate, &target) .is_none()); @@ -1662,7 +1698,7 @@ mod tests { unused.targets[0].query_nodes.push(extra); let unused = parse_planner_cost_document(&serde_json::to_string(&unused).unwrap()) .expect("well-formed document with unused evidence"); - assert!(ExportPlannerCostModel { document: &unused } + assert!(ExportPlannerCostModel::new(&unused) .candidate_cost(&candidate, &target) .is_none()); } @@ -1680,11 +1716,9 @@ mod tests { .expect("invalid physical semantics are checked by the estimator"); let target_rc = Rc::new(query); let target = asap_aware_mapping::replacement::TargetSubDAG::new(&target_rc); - assert!(ExportPlannerCostModel { - document: &document - } - .candidate_cost(&candidate, &target) - .is_none()); + assert!(ExportPlannerCostModel::new(&document) + .candidate_cost(&candidate, &target) + .is_none()); } #[test] @@ -1744,9 +1778,7 @@ mod tests { }; let document = parse_planner_cost_document(&serde_json::to_string(&document).unwrap()) .expect("complete physical evidence"); - let model = ExportPlannerCostModel { - document: &document, - }; + let model = ExportPlannerCostModel::new(&document); let selection = space.global_selection(&model); let chosen = selection .groups() @@ -1781,6 +1813,51 @@ mod tests { assert!(error.contains("compact analytical-cost payload")); } + #[test] + fn planner_cost_json_rejects_unknown_fields() { + let (_, _, document) = cost_fixture(); + let mut value = serde_json::to_value(document).unwrap(); + value + .as_object_mut() + .unwrap() + .insert("unexpected".into(), serde_json::Value::Bool(true)); + let error = parse_planner_cost_document(&value.to_string()) + .expect_err("unknown evidence fields must not be ignored"); + assert!(error.contains("unknown field")); + } + + #[test] + fn unused_target_or_candidate_evidence_keeps_export_raw_only() { + let (query, _, document) = cost_fixture(); + let lowered = vec![("q".into(), "fixture".into(), query.clone())]; + + let mut extra_candidate = document.clone(); + let mut unused = extra_candidate.targets[0].candidates[0].clone(); + *unused.plan_mut() = serde_json::json!({"unmatched": true}); + extra_candidate.targets[0].candidates.push(unused); + let extra_candidate = + parse_planner_cost_document(&serde_json::to_string(&extra_candidate).unwrap()).unwrap(); + let model = ExportPlannerCostModel::new(&extra_candidate); + let results = run_post_asap_with_progress(&lowered, false, &model, Some(&model), None); + assert!(results.replacements.is_empty()); + + let mut extra_target = document; + let mut unused = extra_target.targets[0].clone(); + unused.target = QueryExpr::Scan { + source: asap_types::pre_asap::Source::Table { + table_ref: "unused".into(), + }, + predicates: vec![], + schema: Schema::new(vec![Column::new("v", DataType::Int64, false)]), + }; + extra_target.targets.push(unused); + let extra_target = + parse_planner_cost_document(&serde_json::to_string(&extra_target).unwrap()).unwrap(); + let model = ExportPlannerCostModel::new(&extra_target); + let results = run_post_asap_with_progress(&lowered, false, &model, Some(&model), None); + assert!(results.replacements.is_empty()); + } + #[test] fn exact_candidate_selector_does_not_confuse_the_same_strategy() { let selected_query = lower_promql("up", AccuracyTarget::Exact).unwrap(); From 3e79cab7535d8e57d9e1db7ab7c931d48e050af2 Mon Sep 17 00:00:00 2001 From: zz_y Date: Wed, 2 Sep 2026 13:35:36 -0600 Subject: [PATCH 14/15] docs(viewer): remove structural cost fixture --- tools/dag-viewer/dag.example.json | 5495 ++------------------------- tools/dag-viewer/generate-sample.sh | 8 +- 2 files changed, 240 insertions(+), 5263 deletions(-) diff --git a/tools/dag-viewer/dag.example.json b/tools/dag-viewer/dag.example.json index de28c8fe..d52f9af8 100644 --- a/tools/dag-viewer/dag.example.json +++ b/tools/dag-viewer/dag.example.json @@ -149,7 +149,7 @@ "notes": [ { "kind": "SketchApproximation", - "reason": "count realizes as a Cms sketch — one of summary_candidates' alternatives for this intent (asap_aware_mapping::replacement::implementations_for_with); count realizes as a CountSketch sketch — one of summary_candidates' alternatives for this intent (asap_aware_mapping::replacement::implementations_for_with); count realizes as a shared HydraCms structure over Cms serving every subpopulation of this grouped aggregate, instead of one Cms instance per distinct `by` key — legal because this aggregate has a non-empty subpopulation concept and Cms has a modeled Hydra variant (asap_types::post_asap::hydra_kind_for); whether it's *worth* the shared/independent trade-off for the actual subpopulation cardinality is a CostModel's call, not this strategy's; count realizes as a shared HydraCountSketch structure over CountSketch serving every subpopulation of this grouped aggregate, instead of one CountSketch instance per distinct `by` key — legal because this aggregate has a non-empty subpopulation concept and CountSketch has a modeled Hydra variant (asap_types::post_asap::hydra_kind_for); whether it's *worth* the shared/independent trade-off for the actual subpopulation cardinality is a CostModel's call, not this strategy's" + "reason": "count realizes as a Cms sketch — one of summary_candidates' alternatives for this intent (asap_aware_mapping::replacement::implementations_for_with); count realizes as a CountSketch sketch — one of summary_candidates' alternatives for this intent (asap_aware_mapping::replacement::implementations_for_with)" } ] }, @@ -205,339 +205,12 @@ } ], "root": 2 - }, - "replacements": [ - { - "decision_id": 0, - "target_pre_id": 1, - "strategy": "SketchAlgorithmStrategy", - "rationale": "count realizes as a Cms sketch", - "rank": 0, - "cost": 3.0, - "before": { - "nodes": [ - { - "id": 0, - "kind": "Scan", - "label": "Scan(metrics)", - "detail": { - "predicates": [], - "schema": { - "closed": true, - "columns": [ - { - "dtype": "timestamp", - "name": "ts", - "nullable": false, - "table": "metrics" - }, - { - "dtype": "utf8", - "name": "service", - "nullable": false, - "table": "metrics" - }, - { - "dtype": "utf8", - "name": "region", - "nullable": false, - "table": "metrics" - }, - { - "dtype": "float64", - "name": "latency", - "nullable": false, - "table": "metrics" - }, - { - "dtype": "int64", - "name": "bytes", - "nullable": false, - "table": "metrics" - } - ], - "time_index": 0, - "unique_keys": [] - }, - "source": { - "Table": { - "table_ref": "metrics" - } - } - }, - "schema": { - "closed": true, - "columns": [ - { - "dtype": "timestamp", - "name": "ts", - "nullable": false, - "table": "metrics" - }, - { - "dtype": "utf8", - "name": "service", - "nullable": false, - "table": "metrics" - }, - { - "dtype": "utf8", - "name": "region", - "nullable": false, - "table": "metrics" - }, - { - "dtype": "float64", - "name": "latency", - "nullable": false, - "table": "metrics" - }, - { - "dtype": "int64", - "name": "bytes", - "nullable": false, - "table": "metrics" - } - ], - "time_index": 0, - "unique_keys": [] - }, - "children": [], - "hash": 2606922452740434172 - }, - { - "id": 1, - "kind": "Aggregate", - "label": "Aggregate(1 measures)", - "detail": { - "having": null, - "measures": [ - { - "accuracy": { - "Epsilon": 0.01 - }, - "kind": "count" - } - ], - "output_names": [ - "count(*)" - ], - "reduction": { - "Reduce": [ - 1 - ] - } - }, - "schema": { - "closed": true, - "columns": [ - { - "dtype": "utf8", - "name": "service", - "nullable": false, - "table": "metrics" - }, - { - "dtype": "int64", - "name": "count(*)", - "nullable": false, - "table": null - } - ], - "time_index": null, - "unique_keys": [ - [ - 0 - ] - ] - }, - "children": [ - 0 - ], - "hash": 12396162568747900801 - } - ], - "root": 1 - }, - "after": { - "kind": "Summary", - "graph": { - "nodes": [ - { - "id": 0, - "kind": "KeepPreAsap", - "label": "KeepPreAsap(Scan)", - "detail": { - "pre_asap_subgraph": { - "nodes": [ - { - "children": [], - "detail": { - "predicates": [], - "schema": { - "closed": true, - "columns": [ - { - "dtype": "timestamp", - "name": "ts", - "nullable": false, - "table": "metrics" - }, - { - "dtype": "utf8", - "name": "service", - "nullable": false, - "table": "metrics" - }, - { - "dtype": "utf8", - "name": "region", - "nullable": false, - "table": "metrics" - }, - { - "dtype": "float64", - "name": "latency", - "nullable": false, - "table": "metrics" - }, - { - "dtype": "int64", - "name": "bytes", - "nullable": false, - "table": "metrics" - } - ], - "time_index": 0, - "unique_keys": [] - }, - "source": { - "Table": { - "table_ref": "metrics" - } - } - }, - "hash": 2606922452740434172, - "id": 0, - "kind": "Scan", - "label": "Scan(metrics)", - "schema": { - "closed": true, - "columns": [ - { - "dtype": "timestamp", - "name": "ts", - "nullable": false, - "table": "metrics" - }, - { - "dtype": "utf8", - "name": "service", - "nullable": false, - "table": "metrics" - }, - { - "dtype": "utf8", - "name": "region", - "nullable": false, - "table": "metrics" - }, - { - "dtype": "float64", - "name": "latency", - "nullable": false, - "table": "metrics" - }, - { - "dtype": "int64", - "name": "bytes", - "nullable": false, - "table": "metrics" - } - ], - "time_index": 0, - "unique_keys": [] - } - } - ], - "root": 0 - } - }, - "children": [] - }, - { - "id": 1, - "kind": "SummaryAgg", - "label": "SummaryAgg(Sketch(Cms))", - "detail": { - "col": "SampleValue", - "family": "Sketch(SketchKind { category: Frequency, algorithm: Cms, params: Cms { width: 272, depth: 5 } }, PerSubpopulationInstance)", - "grouping": "PerSubpopulationInstance", - "reduction": { - "Reduce": [ - 1 - ] - } - }, - "children": [ - 0 - ] - }, - { - "id": 2, - "kind": "SummaryEstimate", - "label": "SummaryEstimate(PointCount { key: SampleValue, value: None })", - "detail": { - "query": "PointCount { key: SampleValue, value: None }" - }, - "children": [ - 1 - ] - } - ], - "root": 2 - } - }, - "baseline_cost": { - "value": 2.0, - "unit": "RelativeStructuralUnits", - "source": "Modeled", - "model_version": "dag_export-structural-cost-v1", - "inputs": [ - { - "name": "per_consumer_recompute_cost", - "value": 2.0 - }, - { - "name": "consumer_count", - "value": 1.0 - } - ] - }, - "selected_cost": { - "value": 3.0, - "unit": "RelativeStructuralUnits", - "source": "Modeled", - "baseline": { - "kind": "PreAsapRecomputation" - }, - "delta": -1.0, - "benefit_ratio": -0.5, - "model_version": "dag_export-structural-cost-v1" - }, - "benefit": { - "value": -1.0, - "unit": "RelativeStructuralUnits", - "source": "Modeled", - "baseline": { - "kind": "PreAsapRecomputation" - }, - "benefit_ratio": -0.5, - "model_version": "dag_export-structural-cost-v1" - } - } - ], - "post_graph": { + } + }, + { + "name": "q2", + "source": "SELECT service, AVG(latency) FROM metrics GROUP BY service", + "graph": { "nodes": [ { "id": 0, @@ -627,61 +300,23 @@ }, "children": [], "workload_node_id": 0, - "hash": 2606922452740434172, - "decision": { - "id": 0, - "strategy": "SketchAlgorithmStrategy", - "rationale": "count realizes as a Cms sketch", - "rank": 0, - "cost": 3.0, - "role": "replacement_region", - "baseline_cost": { - "value": 2.0, - "unit": "RelativeStructuralUnits", - "source": "Modeled", - "model_version": "dag_export-structural-cost-v1", - "inputs": [ - { - "name": "per_consumer_recompute_cost", - "value": 2.0 - }, - { - "name": "consumer_count", - "value": 1.0 - } - ] - }, - "selected_cost": { - "value": 3.0, - "unit": "RelativeStructuralUnits", - "source": "Modeled", - "baseline": { - "kind": "PreAsapRecomputation" - }, - "delta": -1.0, - "benefit_ratio": -0.5, - "model_version": "dag_export-structural-cost-v1" - }, - "benefit": { - "value": -1.0, - "unit": "RelativeStructuralUnits", - "source": "Modeled", - "baseline": { - "kind": "PreAsapRecomputation" - }, - "benefit_ratio": -0.5, - "model_version": "dag_export-structural-cost-v1" - } - } + "hash": 2606922452740434172 }, { "id": 1, - "kind": "SummaryAgg", - "label": "SummaryAgg(Sketch(Cms))", + "kind": "Aggregate", + "label": "Aggregate(1 measures)", "detail": { - "col": "SampleValue", - "family": "Sketch(SketchKind { category: Frequency, algorithm: Cms, params: Cms { width: 272, depth: 5 } }, PerSubpopulationInstance)", - "grouping": "PerSubpopulationInstance", + "having": null, + "measures": [ + { + "col": 3, + "kind": "avg" + } + ], + "output_names": [ + "avg(metrics.latency)" + ], "reduction": { "Reduce": [ 1 @@ -689,144 +324,36 @@ } }, "schema": { - "fields": [ + "closed": true, + "columns": [ { - "dtype": "Plain(Utf8)", + "dtype": "utf8", "name": "service", - "nullable": false + "nullable": false, + "table": "metrics" }, { - "dtype": "Sketch(SketchKind { category: Frequency, algorithm: Cms, params: Cms { width: 272, depth: 5 } }, PerSubpopulationInstance)", - "name": "count(*)", - "nullable": false + "dtype": "float64", + "name": "avg(metrics.latency)", + "nullable": false, + "table": null } ], - "time_index": null + "time_index": null, + "unique_keys": [ + [ + 0 + ] + ] }, "children": [ 0 ], - "workload_node_id": 1, - "decision": { - "id": 0, - "strategy": "SketchAlgorithmStrategy", - "rationale": "count realizes as a Cms sketch", - "rank": 0, - "cost": 3.0, - "role": "replacement_region", - "baseline_cost": { - "value": 2.0, - "unit": "RelativeStructuralUnits", - "source": "Modeled", - "model_version": "dag_export-structural-cost-v1", - "inputs": [ - { - "name": "per_consumer_recompute_cost", - "value": 2.0 - }, - { - "name": "consumer_count", - "value": 1.0 - } - ] - }, - "selected_cost": { - "value": 3.0, - "unit": "RelativeStructuralUnits", - "source": "Modeled", - "baseline": { - "kind": "PreAsapRecomputation" - }, - "delta": -1.0, - "benefit_ratio": -0.5, - "model_version": "dag_export-structural-cost-v1" - }, - "benefit": { - "value": -1.0, - "unit": "RelativeStructuralUnits", - "source": "Modeled", - "baseline": { - "kind": "PreAsapRecomputation" - }, - "benefit_ratio": -0.5, - "model_version": "dag_export-structural-cost-v1" - } - } + "workload_node_id": 3, + "hash": 5109904469838189862 }, { "id": 2, - "kind": "SummaryEstimate", - "label": "SummaryEstimate(PointCount { key: SampleValue, value: None })", - "detail": { - "query": "PointCount { key: SampleValue, value: None }" - }, - "schema": { - "fields": [ - { - "dtype": "Plain(Utf8)", - "name": "service", - "nullable": false - }, - { - "dtype": "Plain(Int64)", - "name": "count(*)", - "nullable": false - } - ], - "time_index": null - }, - "children": [ - 1 - ], - "workload_node_id": 2, - "decision": { - "id": 0, - "strategy": "SketchAlgorithmStrategy", - "rationale": "count realizes as a Cms sketch", - "rank": 0, - "cost": 3.0, - "role": "replacement_root", - "baseline_cost": { - "value": 2.0, - "unit": "RelativeStructuralUnits", - "source": "Modeled", - "model_version": "dag_export-structural-cost-v1", - "inputs": [ - { - "name": "per_consumer_recompute_cost", - "value": 2.0 - }, - { - "name": "consumer_count", - "value": 1.0 - } - ] - }, - "selected_cost": { - "value": 3.0, - "unit": "RelativeStructuralUnits", - "source": "Modeled", - "baseline": { - "kind": "PreAsapRecomputation" - }, - "delta": -1.0, - "benefit_ratio": -0.5, - "model_version": "dag_export-structural-cost-v1" - }, - "benefit": { - "value": -1.0, - "unit": "RelativeStructuralUnits", - "source": "Modeled", - "baseline": { - "kind": "PreAsapRecomputation" - }, - "benefit_ratio": -0.5, - "model_version": "dag_export-structural-cost-v1" - } - } - }, - { - "id": 3, "kind": "Project", "label": "Project(2 cols)", "detail": { @@ -856,8 +383,8 @@ "table": null }, { - "dtype": "int64", - "name": "count(*)", + "dtype": "float64", + "name": "avg(metrics.latency)", "nullable": false, "table": null } @@ -870,3566 +397,137 @@ ] }, "children": [ - 2 + 1 ], - "workload_node_id": 3, - "hash": 17063396757587155626 + "workload_node_id": 4, + "hash": 5277207484379927121 } ], - "root": 3 - }, - "workload_cost": { - "baseline_cost": { - "value": 2.0, - "unit": "RelativeStructuralUnits", - "source": "Modeled", - "model_version": "dag_export-structural-cost-v1" - }, - "selected_cost": { - "value": 3.0, - "unit": "RelativeStructuralUnits", - "source": "Modeled", - "model_version": "dag_export-structural-cost-v1" - }, - "benefit": { - "value": -1.0, - "unit": "RelativeStructuralUnits", - "source": "Modeled", - "baseline": { - "kind": "PreAsapRecomputation" - }, - "benefit_ratio": -0.5, - "model_version": "dag_export-workload-cost-v1" - } + "root": 2 } }, { - "name": "q2", - "source": "SELECT service, AVG(latency) FROM metrics GROUP BY service", + "name": "q3", + "source": "topk(5, rate(http_requests_total[5m]))", "graph": { "nodes": [ { "id": 0, "kind": "Scan", - "label": "Scan(metrics)", + "label": "Scan(http_requests_total)", "detail": { "predicates": [], "schema": { - "closed": true, + "closed": false, "columns": [ { "dtype": "timestamp", "name": "ts", "nullable": false, - "table": "metrics" - }, - { - "dtype": "utf8", - "name": "service", - "nullable": false, - "table": "metrics" - }, - { - "dtype": "utf8", - "name": "region", - "nullable": false, - "table": "metrics" + "table": null }, { "dtype": "float64", - "name": "latency", - "nullable": false, - "table": "metrics" - }, - { - "dtype": "int64", - "name": "bytes", + "name": "value", "nullable": false, - "table": "metrics" + "table": null } ], "time_index": 0, "unique_keys": [] }, "source": { - "Table": { - "table_ref": "metrics" + "TimeSeries": { + "metric": "http_requests_total" } } }, "schema": { - "closed": true, + "closed": false, "columns": [ { "dtype": "timestamp", "name": "ts", "nullable": false, - "table": "metrics" + "table": null }, { - "dtype": "utf8", - "name": "service", + "dtype": "float64", + "name": "value", "nullable": false, - "table": "metrics" - }, + "table": null + } + ], + "time_index": 0, + "unique_keys": [] + }, + "children": [], + "workload_node_id": 5, + "hash": 16569634401303792668 + }, + { + "id": 1, + "kind": "TimeRange", + "label": "TimeRange(300s)", + "detail": { + "range": { + "nanos": 0, + "secs": 300 + } + }, + "schema": { + "closed": false, + "columns": [ { - "dtype": "utf8", - "name": "region", + "dtype": "timestamp", + "name": "ts", "nullable": false, - "table": "metrics" + "table": null }, { "dtype": "float64", - "name": "latency", - "nullable": false, - "table": "metrics" - }, - { - "dtype": "int64", - "name": "bytes", + "name": "value", "nullable": false, - "table": "metrics" + "table": null } ], "time_index": 0, "unique_keys": [] }, - "children": [], - "workload_node_id": 0, - "hash": 2606922452740434172 + "children": [ + 0 + ], + "workload_node_id": 6, + "hash": 12007712336004404578 }, { - "id": 1, + "id": 2, "kind": "Aggregate", "label": "Aggregate(1 measures)", "detail": { "having": null, "measures": [ { - "col": 3, - "kind": "avg" + "kind": "rate" } ], "output_names": [ - "avg(metrics.latency)" + "" ], - "reduction": { - "Reduce": [ - 1 - ] - } + "reduction": "PerEntity" }, "schema": { - "closed": true, + "closed": false, "columns": [ { - "dtype": "utf8", - "name": "service", + "dtype": "timestamp", + "name": "ts", "nullable": false, - "table": "metrics" + "table": null }, { "dtype": "float64", - "name": "avg(metrics.latency)", - "nullable": false, - "table": null - } - ], - "time_index": null, - "unique_keys": [ - [ - 0 - ] - ] - }, - "children": [ - 0 - ], - "workload_node_id": 3, - "hash": 5109904469838189862 - }, - { - "id": 2, - "kind": "Project", - "label": "Project(2 cols)", - "detail": { - "cols": [ - { - "alias": null, - "expr": { - "Column": 0 - } - }, - { - "alias": null, - "expr": { - "Column": 1 - } - } - ], - "qualifier": null - }, - "schema": { - "closed": true, - "columns": [ - { - "dtype": "utf8", - "name": "service", - "nullable": false, - "table": null - }, - { - "dtype": "float64", - "name": "avg(metrics.latency)", - "nullable": false, - "table": null - } - ], - "time_index": null, - "unique_keys": [ - [ - 0 - ] - ] - }, - "children": [ - 1 - ], - "workload_node_id": 4, - "hash": 5277207484379927121 - } - ], - "root": 2 - }, - "replacements": [ - { - "decision_id": 1, - "target_pre_id": 1, - "strategy": "AvgToSumOverCountStrategy", - "rationale": "Rewrites AVG into SUM and COUNT under the same grouping, then divides SUM by COUNT.", - "rank": 0, - "cost": 2.0, - "before": { - "nodes": [ - { - "id": 0, - "kind": "Scan", - "label": "Scan(metrics)", - "detail": { - "predicates": [], - "schema": { - "closed": true, - "columns": [ - { - "dtype": "timestamp", - "name": "ts", - "nullable": false, - "table": "metrics" - }, - { - "dtype": "utf8", - "name": "service", - "nullable": false, - "table": "metrics" - }, - { - "dtype": "utf8", - "name": "region", - "nullable": false, - "table": "metrics" - }, - { - "dtype": "float64", - "name": "latency", - "nullable": false, - "table": "metrics" - }, - { - "dtype": "int64", - "name": "bytes", - "nullable": false, - "table": "metrics" - } - ], - "time_index": 0, - "unique_keys": [] - }, - "source": { - "Table": { - "table_ref": "metrics" - } - } - }, - "schema": { - "closed": true, - "columns": [ - { - "dtype": "timestamp", - "name": "ts", - "nullable": false, - "table": "metrics" - }, - { - "dtype": "utf8", - "name": "service", - "nullable": false, - "table": "metrics" - }, - { - "dtype": "utf8", - "name": "region", - "nullable": false, - "table": "metrics" - }, - { - "dtype": "float64", - "name": "latency", - "nullable": false, - "table": "metrics" - }, - { - "dtype": "int64", - "name": "bytes", - "nullable": false, - "table": "metrics" - } - ], - "time_index": 0, - "unique_keys": [] - }, - "children": [], - "hash": 2606922452740434172 - }, - { - "id": 1, - "kind": "Aggregate", - "label": "Aggregate(1 measures)", - "detail": { - "having": null, - "measures": [ - { - "col": 3, - "kind": "avg" - } - ], - "output_names": [ - "avg(metrics.latency)" - ], - "reduction": { - "Reduce": [ - 1 - ] - } - }, - "schema": { - "closed": true, - "columns": [ - { - "dtype": "utf8", - "name": "service", - "nullable": false, - "table": "metrics" - }, - { - "dtype": "float64", - "name": "avg(metrics.latency)", - "nullable": false, - "table": null - } - ], - "time_index": null, - "unique_keys": [ - [ - 0 - ] - ] - }, - "children": [ - 0 - ], - "hash": 5109904469838189862 - } - ], - "root": 1 - }, - "after": { - "kind": "Rewrite", - "graph": { - "nodes": [ - { - "id": 0, - "kind": "Scan", - "label": "Scan(metrics)", - "detail": { - "predicates": [], - "schema": { - "closed": true, - "columns": [ - { - "dtype": "timestamp", - "name": "ts", - "nullable": false, - "table": "metrics" - }, - { - "dtype": "utf8", - "name": "service", - "nullable": false, - "table": "metrics" - }, - { - "dtype": "utf8", - "name": "region", - "nullable": false, - "table": "metrics" - }, - { - "dtype": "float64", - "name": "latency", - "nullable": false, - "table": "metrics" - }, - { - "dtype": "int64", - "name": "bytes", - "nullable": false, - "table": "metrics" - } - ], - "time_index": 0, - "unique_keys": [] - }, - "source": { - "Table": { - "table_ref": "metrics" - } - } - }, - "schema": { - "closed": true, - "columns": [ - { - "dtype": "timestamp", - "name": "ts", - "nullable": false, - "table": "metrics" - }, - { - "dtype": "utf8", - "name": "service", - "nullable": false, - "table": "metrics" - }, - { - "dtype": "utf8", - "name": "region", - "nullable": false, - "table": "metrics" - }, - { - "dtype": "float64", - "name": "latency", - "nullable": false, - "table": "metrics" - }, - { - "dtype": "int64", - "name": "bytes", - "nullable": false, - "table": "metrics" - } - ], - "time_index": 0, - "unique_keys": [] - }, - "children": [], - "hash": 2606922452740434172 - }, - { - "id": 1, - "kind": "Aggregate", - "label": "Aggregate(1 measures)", - "detail": { - "having": null, - "measures": [ - { - "col": 3, - "kind": "sum" - } - ], - "output_names": [], - "reduction": { - "Reduce": [ - 1 - ] - } - }, - "schema": { - "closed": true, - "columns": [ - { - "dtype": "utf8", - "name": "service", - "nullable": false, - "table": "metrics" - }, - { - "dtype": "float64", - "name": "sum", - "nullable": false, - "table": null - } - ], - "time_index": null, - "unique_keys": [ - [ - 0 - ] - ] - }, - "children": [ - 0 - ], - "hash": 18377191452169790973 - }, - { - "id": 2, - "kind": "Project", - "label": "Project(2 cols)", - "detail": { - "cols": [ - { - "alias": null, - "expr": { - "Column": 0 - } - }, - { - "alias": "avg(metrics.latency)", - "expr": { - "Cast": { - "expr": { - "Column": 1 - }, - "to": "float64", - "try_cast": false - } - } - } - ], - "qualifier": null - }, - "schema": { - "closed": true, - "columns": [ - { - "dtype": "utf8", - "name": "service", - "nullable": false, - "table": null - }, - { - "dtype": "float64", - "name": "avg(metrics.latency)", - "nullable": false, - "table": null - } - ], - "time_index": null, - "unique_keys": [ - [ - 0 - ] - ] - }, - "children": [ - 1 - ], - "hash": 11401885529025699918 - }, - { - "id": 3, - "kind": "Scan", - "label": "Scan(metrics)", - "detail": { - "predicates": [], - "schema": { - "closed": true, - "columns": [ - { - "dtype": "timestamp", - "name": "ts", - "nullable": false, - "table": "metrics" - }, - { - "dtype": "utf8", - "name": "service", - "nullable": false, - "table": "metrics" - }, - { - "dtype": "utf8", - "name": "region", - "nullable": false, - "table": "metrics" - }, - { - "dtype": "float64", - "name": "latency", - "nullable": false, - "table": "metrics" - }, - { - "dtype": "int64", - "name": "bytes", - "nullable": false, - "table": "metrics" - } - ], - "time_index": 0, - "unique_keys": [] - }, - "source": { - "Table": { - "table_ref": "metrics" - } - } - }, - "schema": { - "closed": true, - "columns": [ - { - "dtype": "timestamp", - "name": "ts", - "nullable": false, - "table": "metrics" - }, - { - "dtype": "utf8", - "name": "service", - "nullable": false, - "table": "metrics" - }, - { - "dtype": "utf8", - "name": "region", - "nullable": false, - "table": "metrics" - }, - { - "dtype": "float64", - "name": "latency", - "nullable": false, - "table": "metrics" - }, - { - "dtype": "int64", - "name": "bytes", - "nullable": false, - "table": "metrics" - } - ], - "time_index": 0, - "unique_keys": [] - }, - "children": [], - "hash": 2606922452740434172 - }, - { - "id": 4, - "kind": "Aggregate", - "label": "Aggregate(1 measures)", - "detail": { - "having": null, - "measures": [ - { - "accuracy": "Exact", - "kind": "count" - } - ], - "output_names": [], - "reduction": { - "Reduce": [ - 1 - ] - } - }, - "schema": { - "closed": true, - "columns": [ - { - "dtype": "utf8", - "name": "service", - "nullable": false, - "table": "metrics" - }, - { - "dtype": "int64", - "name": "count", - "nullable": false, - "table": null - } - ], - "time_index": null, - "unique_keys": [ - [ - 0 - ] - ] - }, - "children": [ - 3 - ], - "hash": 6760740959892251122 - }, - { - "id": 5, - "kind": "BinaryOp", - "label": "BinaryOp(/)", - "detail": { - "op": "/", - "vector_match": null - }, - "schema": { - "closed": true, - "columns": [ - { - "dtype": "utf8", - "name": "service", - "nullable": false, - "table": null - }, - { - "dtype": "float64", - "name": "avg(metrics.latency)", - "nullable": false, - "table": null - } - ], - "time_index": null, - "unique_keys": [ - [ - 0 - ] - ] - }, - "children": [ - 2, - 4 - ], - "hash": 16391872732257280252 - } - ], - "root": 5 - } - }, - "baseline_cost": { - "value": 2.0, - "unit": "RelativeStructuralUnits", - "source": "Modeled", - "model_version": "dag_export-structural-cost-v1", - "inputs": [ - { - "name": "per_consumer_recompute_cost", - "value": 2.0 - }, - { - "name": "consumer_count", - "value": 1.0 - } - ] - }, - "selected_cost": { - "value": 2.0, - "unit": "RelativeStructuralUnits", - "source": "Modeled", - "baseline": { - "kind": "PreAsapRecomputation" - }, - "delta": 0.0, - "benefit_ratio": 0.0, - "model_version": "dag_export-structural-cost-v1" - }, - "benefit": { - "value": 0.0, - "unit": "RelativeStructuralUnits", - "source": "Modeled", - "baseline": { - "kind": "PreAsapRecomputation" - }, - "benefit_ratio": 0.0, - "model_version": "dag_export-structural-cost-v1" - } - } - ], - "post_graph": { - "nodes": [ - { - "id": 0, - "kind": "Scan", - "label": "Scan(metrics)", - "detail": { - "predicates": [], - "schema": { - "closed": true, - "columns": [ - { - "dtype": "timestamp", - "name": "ts", - "nullable": false, - "table": "metrics" - }, - { - "dtype": "utf8", - "name": "service", - "nullable": false, - "table": "metrics" - }, - { - "dtype": "utf8", - "name": "region", - "nullable": false, - "table": "metrics" - }, - { - "dtype": "float64", - "name": "latency", - "nullable": false, - "table": "metrics" - }, - { - "dtype": "int64", - "name": "bytes", - "nullable": false, - "table": "metrics" - } - ], - "time_index": 0, - "unique_keys": [] - }, - "source": { - "Table": { - "table_ref": "metrics" - } - } - }, - "schema": { - "closed": true, - "columns": [ - { - "dtype": "timestamp", - "name": "ts", - "nullable": false, - "table": "metrics" - }, - { - "dtype": "utf8", - "name": "service", - "nullable": false, - "table": "metrics" - }, - { - "dtype": "utf8", - "name": "region", - "nullable": false, - "table": "metrics" - }, - { - "dtype": "float64", - "name": "latency", - "nullable": false, - "table": "metrics" - }, - { - "dtype": "int64", - "name": "bytes", - "nullable": false, - "table": "metrics" - } - ], - "time_index": 0, - "unique_keys": [] - }, - "children": [], - "workload_node_id": 0, - "hash": 2606922452740434172, - "decision": { - "id": 6, - "strategy": "SketchAlgorithmStrategy", - "rationale": "Sum { col: Some(3) } realizes as an exact Sum accumulator", - "rank": 0, - "cost": 3.0, - "role": "replacement_region", - "baseline_cost": { - "value": 2.0, - "unit": "RelativeStructuralUnits", - "source": "Modeled", - "model_version": "dag_export-structural-cost-v1", - "inputs": [ - { - "name": "per_consumer_recompute_cost", - "value": 2.0 - }, - { - "name": "consumer_count", - "value": 1.0 - } - ] - }, - "selected_cost": { - "value": 3.0, - "unit": "RelativeStructuralUnits", - "source": "Modeled", - "baseline": { - "kind": "PreAsapRecomputation" - }, - "delta": -1.0, - "benefit_ratio": -0.5, - "model_version": "dag_export-structural-cost-v1" - }, - "benefit": { - "value": -1.0, - "unit": "RelativeStructuralUnits", - "source": "Modeled", - "baseline": { - "kind": "PreAsapRecomputation" - }, - "benefit_ratio": -0.5, - "model_version": "dag_export-structural-cost-v1" - } - } - }, - { - "id": 1, - "kind": "SummaryAgg", - "label": "SummaryAgg(ExactAggregate(Sum))", - "detail": { - "col": { - "Qualified": { - "name": "latency", - "table": "metrics" - } - }, - "family": "ExactAggregate(Sum, Sum)", - "grouping": "PerSubpopulationInstance", - "reduction": { - "Reduce": [ - 1 - ] - } - }, - "schema": { - "fields": [ - { - "dtype": "Plain(Utf8)", - "name": "service", - "nullable": false - }, - { - "dtype": "ExactAggregate(Sum, Sum)", - "name": "sum", - "nullable": false - } - ], - "time_index": null - }, - "children": [ - 0 - ], - "workload_node_id": 4, - "decision": { - "id": 6, - "strategy": "SketchAlgorithmStrategy", - "rationale": "Sum { col: Some(3) } realizes as an exact Sum accumulator", - "rank": 0, - "cost": 3.0, - "role": "replacement_root", - "baseline_cost": { - "value": 2.0, - "unit": "RelativeStructuralUnits", - "source": "Modeled", - "model_version": "dag_export-structural-cost-v1", - "inputs": [ - { - "name": "per_consumer_recompute_cost", - "value": 2.0 - }, - { - "name": "consumer_count", - "value": 1.0 - } - ] - }, - "selected_cost": { - "value": 3.0, - "unit": "RelativeStructuralUnits", - "source": "Modeled", - "baseline": { - "kind": "PreAsapRecomputation" - }, - "delta": -1.0, - "benefit_ratio": -0.5, - "model_version": "dag_export-structural-cost-v1" - }, - "benefit": { - "value": -1.0, - "unit": "RelativeStructuralUnits", - "source": "Modeled", - "baseline": { - "kind": "PreAsapRecomputation" - }, - "benefit_ratio": -0.5, - "model_version": "dag_export-structural-cost-v1" - } - } - }, - { - "id": 2, - "kind": "Project", - "label": "Project(2 cols)", - "detail": { - "cols": [ - { - "alias": null, - "expr": { - "Column": 0 - } - }, - { - "alias": "avg(metrics.latency)", - "expr": { - "Cast": { - "expr": { - "Column": 1 - }, - "to": "float64", - "try_cast": false - } - } - } - ], - "qualifier": null - }, - "schema": { - "closed": true, - "columns": [ - { - "dtype": "utf8", - "name": "service", - "nullable": false, - "table": null - }, - { - "dtype": "float64", - "name": "avg(metrics.latency)", - "nullable": false, - "table": null - } - ], - "time_index": null, - "unique_keys": [ - [ - 0 - ] - ] - }, - "children": [ - 1 - ], - "workload_node_id": 5, - "hash": 11401885529025699918, - "decision": { - "id": 1, - "strategy": "AvgToSumOverCountStrategy", - "rationale": "Rewrites AVG into SUM and COUNT under the same grouping, then divides SUM by COUNT.", - "rank": 0, - "cost": 2.0, - "role": "replacement_region", - "baseline_cost": { - "value": 2.0, - "unit": "RelativeStructuralUnits", - "source": "Modeled", - "model_version": "dag_export-structural-cost-v1", - "inputs": [ - { - "name": "per_consumer_recompute_cost", - "value": 2.0 - }, - { - "name": "consumer_count", - "value": 1.0 - } - ] - }, - "selected_cost": { - "value": 2.0, - "unit": "RelativeStructuralUnits", - "source": "Modeled", - "baseline": { - "kind": "PreAsapRecomputation" - }, - "delta": 0.0, - "benefit_ratio": 0.0, - "model_version": "dag_export-structural-cost-v1" - }, - "benefit": { - "value": 0.0, - "unit": "RelativeStructuralUnits", - "source": "Modeled", - "baseline": { - "kind": "PreAsapRecomputation" - }, - "benefit_ratio": 0.0, - "model_version": "dag_export-structural-cost-v1" - } - } - }, - { - "id": 3, - "kind": "SummaryAgg", - "label": "SummaryAgg(ExactAggregate(Count))", - "detail": { - "col": "SampleValue", - "family": "ExactAggregate(Count, Count)", - "grouping": "PerSubpopulationInstance", - "reduction": { - "Reduce": [ - 1 - ] - } - }, - "schema": { - "fields": [ - { - "dtype": "Plain(Utf8)", - "name": "service", - "nullable": false - }, - { - "dtype": "ExactAggregate(Count, Count)", - "name": "count", - "nullable": false - } - ], - "time_index": null - }, - "children": [ - 0 - ], - "workload_node_id": 6, - "decision": { - "id": 7, - "strategy": "SketchAlgorithmStrategy", - "rationale": "count realizes as an exact Count accumulator", - "rank": 0, - "cost": 3.0, - "role": "replacement_root", - "baseline_cost": { - "value": 2.0, - "unit": "RelativeStructuralUnits", - "source": "Modeled", - "model_version": "dag_export-structural-cost-v1", - "inputs": [ - { - "name": "per_consumer_recompute_cost", - "value": 2.0 - }, - { - "name": "consumer_count", - "value": 1.0 - } - ] - }, - "selected_cost": { - "value": 3.0, - "unit": "RelativeStructuralUnits", - "source": "Modeled", - "baseline": { - "kind": "PreAsapRecomputation" - }, - "delta": -1.0, - "benefit_ratio": -0.5, - "model_version": "dag_export-structural-cost-v1" - }, - "benefit": { - "value": -1.0, - "unit": "RelativeStructuralUnits", - "source": "Modeled", - "baseline": { - "kind": "PreAsapRecomputation" - }, - "benefit_ratio": -0.5, - "model_version": "dag_export-structural-cost-v1" - } - } - }, - { - "id": 4, - "kind": "BinaryOp", - "label": "BinaryOp(/)", - "detail": { - "op": "/", - "vector_match": null - }, - "schema": { - "closed": true, - "columns": [ - { - "dtype": "utf8", - "name": "service", - "nullable": false, - "table": null - }, - { - "dtype": "float64", - "name": "avg(metrics.latency)", - "nullable": false, - "table": null - } - ], - "time_index": null, - "unique_keys": [ - [ - 0 - ] - ] - }, - "children": [ - 2, - 3 - ], - "workload_node_id": 7, - "hash": 16391872732257280252, - "decision": { - "id": 1, - "strategy": "AvgToSumOverCountStrategy", - "rationale": "Rewrites AVG into SUM and COUNT under the same grouping, then divides SUM by COUNT.", - "rank": 0, - "cost": 2.0, - "role": "replacement_root", - "baseline_cost": { - "value": 2.0, - "unit": "RelativeStructuralUnits", - "source": "Modeled", - "model_version": "dag_export-structural-cost-v1", - "inputs": [ - { - "name": "per_consumer_recompute_cost", - "value": 2.0 - }, - { - "name": "consumer_count", - "value": 1.0 - } - ] - }, - "selected_cost": { - "value": 2.0, - "unit": "RelativeStructuralUnits", - "source": "Modeled", - "baseline": { - "kind": "PreAsapRecomputation" - }, - "delta": 0.0, - "benefit_ratio": 0.0, - "model_version": "dag_export-structural-cost-v1" - }, - "benefit": { - "value": 0.0, - "unit": "RelativeStructuralUnits", - "source": "Modeled", - "baseline": { - "kind": "PreAsapRecomputation" - }, - "benefit_ratio": 0.0, - "model_version": "dag_export-structural-cost-v1" - } - } - }, - { - "id": 5, - "kind": "Project", - "label": "Project(2 cols)", - "detail": { - "cols": [ - { - "alias": null, - "expr": { - "Column": 0 - } - }, - { - "alias": null, - "expr": { - "Column": 1 - } - } - ], - "qualifier": null - }, - "schema": { - "closed": true, - "columns": [ - { - "dtype": "utf8", - "name": "service", - "nullable": false, - "table": null - }, - { - "dtype": "float64", - "name": "avg(metrics.latency)", - "nullable": false, - "table": null - } - ], - "time_index": null, - "unique_keys": [ - [ - 0 - ] - ] - }, - "children": [ - 4 - ], - "workload_node_id": 8, - "hash": 5277207484379927121 - } - ], - "root": 5, - "edge_annotations": [ - { - "from": 0, - "to": 1, - "cost": { - "value": 0.5, - "unit": "RelativeStructuralUnits", - "source": "Modeled", - "model_version": "dag_export-shared-edge-v1", - "inputs": [ - { - "name": "materialized_subtree_size", - "value": 1.0 - }, - { - "name": "consumer_count", - "value": 2.0 - } - ] - } - }, - { - "from": 0, - "to": 3, - "cost": { - "value": 0.5, - "unit": "RelativeStructuralUnits", - "source": "Modeled", - "model_version": "dag_export-shared-edge-v1", - "inputs": [ - { - "name": "materialized_subtree_size", - "value": 1.0 - }, - { - "name": "consumer_count", - "value": 2.0 - } - ] - } - } - ] - }, - "workload_cost": { - "baseline_cost": { - "value": 6.0, - "unit": "RelativeStructuralUnits", - "source": "Modeled", - "model_version": "dag_export-structural-cost-v1" - }, - "selected_cost": { - "value": 8.0, - "unit": "RelativeStructuralUnits", - "source": "Modeled", - "model_version": "dag_export-structural-cost-v1" - }, - "benefit": { - "value": -2.0, - "unit": "RelativeStructuralUnits", - "source": "Modeled", - "baseline": { - "kind": "PreAsapRecomputation" - }, - "benefit_ratio": -0.3333333333333333, - "model_version": "dag_export-workload-cost-v1" - } - } - }, - { - "name": "q3", - "source": "topk(5, rate(http_requests_total[5m]))", - "graph": { - "nodes": [ - { - "id": 0, - "kind": "Scan", - "label": "Scan(http_requests_total)", - "detail": { - "predicates": [], - "schema": { - "closed": false, - "columns": [ - { - "dtype": "timestamp", - "name": "ts", - "nullable": false, - "table": null - }, - { - "dtype": "float64", - "name": "value", - "nullable": false, - "table": null - } - ], - "time_index": 0, - "unique_keys": [] - }, - "source": { - "TimeSeries": { - "metric": "http_requests_total" - } - } - }, - "schema": { - "closed": false, - "columns": [ - { - "dtype": "timestamp", - "name": "ts", - "nullable": false, - "table": null - }, - { - "dtype": "float64", - "name": "value", - "nullable": false, - "table": null - } - ], - "time_index": 0, - "unique_keys": [] - }, - "children": [], - "workload_node_id": 5, - "hash": 16569634401303792668 - }, - { - "id": 1, - "kind": "TimeRange", - "label": "TimeRange(300s)", - "detail": { - "range": { - "nanos": 0, - "secs": 300 - } - }, - "schema": { - "closed": false, - "columns": [ - { - "dtype": "timestamp", - "name": "ts", - "nullable": false, - "table": null - }, - { - "dtype": "float64", - "name": "value", - "nullable": false, - "table": null - } - ], - "time_index": 0, - "unique_keys": [] - }, - "children": [ - 0 - ], - "workload_node_id": 6, - "hash": 12007712336004404578 - }, - { - "id": 2, - "kind": "Aggregate", - "label": "Aggregate(1 measures)", - "detail": { - "having": null, - "measures": [ - { - "kind": "rate" - } - ], - "output_names": [ - "" - ], - "reduction": "PerEntity" - }, - "schema": { - "closed": false, - "columns": [ - { - "dtype": "timestamp", - "name": "ts", - "nullable": false, - "table": null - }, - { - "dtype": "float64", - "name": "value", - "nullable": false, - "table": null - } - ], - "time_index": 0, - "unique_keys": [] - }, - "children": [ - 1 - ], - "workload_node_id": 7, - "hash": 12607242477503010192 - }, - { - "id": 3, - "kind": "Sort", - "label": "Sort(1 keys)", - "detail": { - "keys": [ - { - "ascending": false, - "expr": { - "Column": 1 - }, - "nulls_first": false - } - ], - "partition_by": [] - }, - "schema": { - "closed": false, - "columns": [ - { - "dtype": "timestamp", - "name": "ts", - "nullable": false, - "table": null - }, - { - "dtype": "float64", - "name": "value", - "nullable": false, - "table": null - } - ], - "time_index": 0, - "unique_keys": [] - }, - "children": [ - 2 - ], - "workload_node_id": 8, - "hash": 3760917937445997010 - }, - { - "id": 4, - "kind": "Limit", - "label": "Limit(5)", - "detail": { - "n": 5, - "offset": 0 - }, - "schema": { - "closed": false, - "columns": [ - { - "dtype": "timestamp", - "name": "ts", - "nullable": false, - "table": null - }, - { - "dtype": "float64", - "name": "value", - "nullable": false, - "table": null - } - ], - "time_index": 0, - "unique_keys": [] - }, - "children": [ - 3 - ], - "workload_node_id": 9, - "hash": 7672123412300577486 - } - ], - "root": 4 - }, - "replacements": [ - { - "decision_id": 3, - "target_pre_id": 2, - "strategy": "SketchAlgorithmStrategy", - "rationale": "Rate realizes as an exact Rate accumulator", - "rank": 0, - "cost": 4.0, - "before": { - "nodes": [ - { - "id": 0, - "kind": "Scan", - "label": "Scan(http_requests_total)", - "detail": { - "predicates": [], - "schema": { - "closed": false, - "columns": [ - { - "dtype": "timestamp", - "name": "ts", - "nullable": false, - "table": null - }, - { - "dtype": "float64", - "name": "value", - "nullable": false, - "table": null - } - ], - "time_index": 0, - "unique_keys": [] - }, - "source": { - "TimeSeries": { - "metric": "http_requests_total" - } - } - }, - "schema": { - "closed": false, - "columns": [ - { - "dtype": "timestamp", - "name": "ts", - "nullable": false, - "table": null - }, - { - "dtype": "float64", - "name": "value", - "nullable": false, - "table": null - } - ], - "time_index": 0, - "unique_keys": [] - }, - "children": [], - "hash": 16569634401303792668 - }, - { - "id": 1, - "kind": "TimeRange", - "label": "TimeRange(300s)", - "detail": { - "range": { - "nanos": 0, - "secs": 300 - } - }, - "schema": { - "closed": false, - "columns": [ - { - "dtype": "timestamp", - "name": "ts", - "nullable": false, - "table": null - }, - { - "dtype": "float64", - "name": "value", - "nullable": false, - "table": null - } - ], - "time_index": 0, - "unique_keys": [] - }, - "children": [ - 0 - ], - "hash": 12007712336004404578 - }, - { - "id": 2, - "kind": "Aggregate", - "label": "Aggregate(1 measures)", - "detail": { - "having": null, - "measures": [ - { - "kind": "rate" - } - ], - "output_names": [ - "" - ], - "reduction": "PerEntity" - }, - "schema": { - "closed": false, - "columns": [ - { - "dtype": "timestamp", - "name": "ts", - "nullable": false, - "table": null - }, - { - "dtype": "float64", - "name": "value", - "nullable": false, - "table": null - } - ], - "time_index": 0, - "unique_keys": [] - }, - "children": [ - 1 - ], - "hash": 12607242477503010192 - } - ], - "root": 2 - }, - "after": { - "kind": "Summary", - "graph": { - "nodes": [ - { - "id": 0, - "kind": "KeepPreAsap", - "label": "KeepPreAsap(TimeRange)", - "detail": { - "pre_asap_subgraph": { - "nodes": [ - { - "children": [], - "detail": { - "predicates": [], - "schema": { - "closed": false, - "columns": [ - { - "dtype": "timestamp", - "name": "ts", - "nullable": false, - "table": null - }, - { - "dtype": "float64", - "name": "value", - "nullable": false, - "table": null - } - ], - "time_index": 0, - "unique_keys": [] - }, - "source": { - "TimeSeries": { - "metric": "http_requests_total" - } - } - }, - "hash": 16569634401303792668, - "id": 0, - "kind": "Scan", - "label": "Scan(http_requests_total)", - "schema": { - "closed": false, - "columns": [ - { - "dtype": "timestamp", - "name": "ts", - "nullable": false, - "table": null - }, - { - "dtype": "float64", - "name": "value", - "nullable": false, - "table": null - } - ], - "time_index": 0, - "unique_keys": [] - } - }, - { - "children": [ - 0 - ], - "detail": { - "range": { - "nanos": 0, - "secs": 300 - } - }, - "hash": 12007712336004404578, - "id": 1, - "kind": "TimeRange", - "label": "TimeRange(300s)", - "schema": { - "closed": false, - "columns": [ - { - "dtype": "timestamp", - "name": "ts", - "nullable": false, - "table": null - }, - { - "dtype": "float64", - "name": "value", - "nullable": false, - "table": null - } - ], - "time_index": 0, - "unique_keys": [] - } - } - ], - "root": 1 - } - }, - "children": [] - }, - { - "id": 1, - "kind": "SummaryAgg", - "label": "SummaryAgg(ExactAggregate(Rate))", - "detail": { - "col": "SampleValue", - "family": "ExactAggregate(Rate, Rate)", - "grouping": "PerSubpopulationInstance", - "reduction": "PerEntity" - }, - "children": [ - 0 - ] - } - ], - "root": 1 - } - }, - "baseline_cost": { - "value": 3.0, - "unit": "RelativeStructuralUnits", - "source": "Modeled", - "model_version": "dag_export-structural-cost-v1", - "inputs": [ - { - "name": "per_consumer_recompute_cost", - "value": 3.0 - }, - { - "name": "consumer_count", - "value": 1.0 - } - ] - }, - "selected_cost": { - "value": 4.0, - "unit": "RelativeStructuralUnits", - "source": "Modeled", - "baseline": { - "kind": "PreAsapRecomputation" - }, - "delta": -1.0, - "benefit_ratio": -0.3333333333333333, - "model_version": "dag_export-structural-cost-v1" - }, - "benefit": { - "value": -1.0, - "unit": "RelativeStructuralUnits", - "source": "Modeled", - "baseline": { - "kind": "PreAsapRecomputation" - }, - "benefit_ratio": -0.3333333333333333, - "model_version": "dag_export-structural-cost-v1" - } - }, - { - "decision_id": 2, - "target_pre_id": 4, - "strategy": "TopKLimitReuseStrategy", - "rationale": "Derives this smaller top-k from a compatible larger top-k result shared by the workload.", - "rank": 0, - "cost": 5.0, - "before": { - "nodes": [ - { - "id": 0, - "kind": "Scan", - "label": "Scan(http_requests_total)", - "detail": { - "predicates": [], - "schema": { - "closed": false, - "columns": [ - { - "dtype": "timestamp", - "name": "ts", - "nullable": false, - "table": null - }, - { - "dtype": "float64", - "name": "value", - "nullable": false, - "table": null - } - ], - "time_index": 0, - "unique_keys": [] - }, - "source": { - "TimeSeries": { - "metric": "http_requests_total" - } - } - }, - "schema": { - "closed": false, - "columns": [ - { - "dtype": "timestamp", - "name": "ts", - "nullable": false, - "table": null - }, - { - "dtype": "float64", - "name": "value", - "nullable": false, - "table": null - } - ], - "time_index": 0, - "unique_keys": [] - }, - "children": [], - "hash": 16569634401303792668 - }, - { - "id": 1, - "kind": "TimeRange", - "label": "TimeRange(300s)", - "detail": { - "range": { - "nanos": 0, - "secs": 300 - } - }, - "schema": { - "closed": false, - "columns": [ - { - "dtype": "timestamp", - "name": "ts", - "nullable": false, - "table": null - }, - { - "dtype": "float64", - "name": "value", - "nullable": false, - "table": null - } - ], - "time_index": 0, - "unique_keys": [] - }, - "children": [ - 0 - ], - "hash": 12007712336004404578 - }, - { - "id": 2, - "kind": "Aggregate", - "label": "Aggregate(1 measures)", - "detail": { - "having": null, - "measures": [ - { - "kind": "rate" - } - ], - "output_names": [ - "" - ], - "reduction": "PerEntity" - }, - "schema": { - "closed": false, - "columns": [ - { - "dtype": "timestamp", - "name": "ts", - "nullable": false, - "table": null - }, - { - "dtype": "float64", - "name": "value", - "nullable": false, - "table": null - } - ], - "time_index": 0, - "unique_keys": [] - }, - "children": [ - 1 - ], - "hash": 12607242477503010192 - }, - { - "id": 3, - "kind": "Sort", - "label": "Sort(1 keys)", - "detail": { - "keys": [ - { - "ascending": false, - "expr": { - "Column": 1 - }, - "nulls_first": false - } - ], - "partition_by": [] - }, - "schema": { - "closed": false, - "columns": [ - { - "dtype": "timestamp", - "name": "ts", - "nullable": false, - "table": null - }, - { - "dtype": "float64", - "name": "value", - "nullable": false, - "table": null - } - ], - "time_index": 0, - "unique_keys": [] - }, - "children": [ - 2 - ], - "hash": 3760917937445997010 - }, - { - "id": 4, - "kind": "Limit", - "label": "Limit(5)", - "detail": { - "n": 5, - "offset": 0 - }, - "schema": { - "closed": false, - "columns": [ - { - "dtype": "timestamp", - "name": "ts", - "nullable": false, - "table": null - }, - { - "dtype": "float64", - "name": "value", - "nullable": false, - "table": null - } - ], - "time_index": 0, - "unique_keys": [] - }, - "children": [ - 3 - ], - "hash": 7672123412300577486 - } - ], - "root": 4 - }, - "after": { - "kind": "Rewrite", - "graph": { - "nodes": [ - { - "id": 0, - "kind": "Scan", - "label": "Scan(http_requests_total)", - "detail": { - "predicates": [], - "schema": { - "closed": false, - "columns": [ - { - "dtype": "timestamp", - "name": "ts", - "nullable": false, - "table": null - }, - { - "dtype": "float64", - "name": "value", - "nullable": false, - "table": null - } - ], - "time_index": 0, - "unique_keys": [] - }, - "source": { - "TimeSeries": { - "metric": "http_requests_total" - } - } - }, - "schema": { - "closed": false, - "columns": [ - { - "dtype": "timestamp", - "name": "ts", - "nullable": false, - "table": null - }, - { - "dtype": "float64", - "name": "value", - "nullable": false, - "table": null - } - ], - "time_index": 0, - "unique_keys": [] - }, - "children": [], - "hash": 16569634401303792668 - }, - { - "id": 1, - "kind": "TimeRange", - "label": "TimeRange(300s)", - "detail": { - "range": { - "nanos": 0, - "secs": 300 - } - }, - "schema": { - "closed": false, - "columns": [ - { - "dtype": "timestamp", - "name": "ts", - "nullable": false, - "table": null - }, - { - "dtype": "float64", - "name": "value", - "nullable": false, - "table": null - } - ], - "time_index": 0, - "unique_keys": [] - }, - "children": [ - 0 - ], - "hash": 12007712336004404578 - }, - { - "id": 2, - "kind": "Aggregate", - "label": "Aggregate(1 measures)", - "detail": { - "having": null, - "measures": [ - { - "kind": "rate" - } - ], - "output_names": [ - "" - ], - "reduction": "PerEntity" - }, - "schema": { - "closed": false, - "columns": [ - { - "dtype": "timestamp", - "name": "ts", - "nullable": false, - "table": null - }, - { - "dtype": "float64", - "name": "value", - "nullable": false, - "table": null - } - ], - "time_index": 0, - "unique_keys": [] - }, - "children": [ - 1 - ], - "hash": 12607242477503010192 - }, - { - "id": 3, - "kind": "Sort", - "label": "Sort(1 keys)", - "detail": { - "keys": [ - { - "ascending": false, - "expr": { - "Column": 1 - }, - "nulls_first": false - } - ], - "partition_by": [] - }, - "schema": { - "closed": false, - "columns": [ - { - "dtype": "timestamp", - "name": "ts", - "nullable": false, - "table": null - }, - { - "dtype": "float64", - "name": "value", - "nullable": false, - "table": null - } - ], - "time_index": 0, - "unique_keys": [] - }, - "children": [ - 2 - ], - "hash": 3760917937445997010 - }, - { - "id": 4, - "kind": "Limit", - "label": "Limit(10)", - "detail": { - "n": 10, - "offset": 0 - }, - "schema": { - "closed": false, - "columns": [ - { - "dtype": "timestamp", - "name": "ts", - "nullable": false, - "table": null - }, - { - "dtype": "float64", - "name": "value", - "nullable": false, - "table": null - } - ], - "time_index": 0, - "unique_keys": [] - }, - "children": [ - 3 - ], - "hash": 10822644126224715622 - }, - { - "id": 5, - "kind": "Limit", - "label": "Limit(5)", - "detail": { - "n": 5, - "offset": 0 - }, - "schema": { - "closed": false, - "columns": [ - { - "dtype": "timestamp", - "name": "ts", - "nullable": false, - "table": null - }, - { - "dtype": "float64", - "name": "value", - "nullable": false, - "table": null - } - ], - "time_index": 0, - "unique_keys": [] - }, - "children": [ - 4 - ], - "hash": 5925942169603452483 - } - ], - "root": 5 - } - }, - "baseline_cost": { - "value": 5.0, - "unit": "RelativeStructuralUnits", - "source": "Modeled", - "model_version": "dag_export-structural-cost-v1", - "inputs": [ - { - "name": "per_consumer_recompute_cost", - "value": 5.0 - }, - { - "name": "consumer_count", - "value": 1.0 - } - ] - }, - "selected_cost": { - "value": 5.0, - "unit": "RelativeStructuralUnits", - "source": "Modeled", - "baseline": { - "kind": "PreAsapRecomputation" - }, - "delta": 0.0, - "benefit_ratio": 0.0, - "model_version": "dag_export-structural-cost-v1" - }, - "benefit": { - "value": 0.0, - "unit": "RelativeStructuralUnits", - "source": "Modeled", - "baseline": { - "kind": "PreAsapRecomputation" - }, - "benefit_ratio": 0.0, - "model_version": "dag_export-structural-cost-v1" - } - } - ], - "post_graph": { - "nodes": [ - { - "id": 0, - "kind": "Scan", - "label": "Scan(http_requests_total)", - "detail": { - "predicates": [], - "schema": { - "closed": false, - "columns": [ - { - "dtype": "timestamp", - "name": "ts", - "nullable": false, - "table": null - }, - { - "dtype": "float64", - "name": "value", - "nullable": false, - "table": null - } - ], - "time_index": 0, - "unique_keys": [] - }, - "source": { - "TimeSeries": { - "metric": "http_requests_total" - } - } - }, - "schema": { - "closed": false, - "columns": [ - { - "dtype": "timestamp", - "name": "ts", - "nullable": false, - "table": null - }, - { - "dtype": "float64", - "name": "value", - "nullable": false, - "table": null - } - ], - "time_index": 0, - "unique_keys": [] - }, - "children": [], - "workload_node_id": 9, - "hash": 16569634401303792668, - "decision": { - "id": 3, - "strategy": "SketchAlgorithmStrategy", - "rationale": "Rate realizes as an exact Rate accumulator", - "rank": 0, - "cost": 4.0, - "role": "replacement_region", - "baseline_cost": { - "value": 3.0, - "unit": "RelativeStructuralUnits", - "source": "Modeled", - "model_version": "dag_export-structural-cost-v1", - "inputs": [ - { - "name": "per_consumer_recompute_cost", - "value": 3.0 - }, - { - "name": "consumer_count", - "value": 1.0 - } - ] - }, - "selected_cost": { - "value": 4.0, - "unit": "RelativeStructuralUnits", - "source": "Modeled", - "baseline": { - "kind": "PreAsapRecomputation" - }, - "delta": -1.0, - "benefit_ratio": -0.3333333333333333, - "model_version": "dag_export-structural-cost-v1" - }, - "benefit": { - "value": -1.0, - "unit": "RelativeStructuralUnits", - "source": "Modeled", - "baseline": { - "kind": "PreAsapRecomputation" - }, - "benefit_ratio": -0.3333333333333333, - "model_version": "dag_export-structural-cost-v1" - } - } - }, - { - "id": 1, - "kind": "TimeRange", - "label": "TimeRange(300s)", - "detail": { - "range": { - "nanos": 0, - "secs": 300 - } - }, - "schema": { - "closed": false, - "columns": [ - { - "dtype": "timestamp", - "name": "ts", - "nullable": false, - "table": null - }, - { - "dtype": "float64", - "name": "value", - "nullable": false, - "table": null - } - ], - "time_index": 0, - "unique_keys": [] - }, - "children": [ - 0 - ], - "workload_node_id": 10, - "hash": 12007712336004404578, - "decision": { - "id": 3, - "strategy": "SketchAlgorithmStrategy", - "rationale": "Rate realizes as an exact Rate accumulator", - "rank": 0, - "cost": 4.0, - "role": "replacement_region", - "baseline_cost": { - "value": 3.0, - "unit": "RelativeStructuralUnits", - "source": "Modeled", - "model_version": "dag_export-structural-cost-v1", - "inputs": [ - { - "name": "per_consumer_recompute_cost", - "value": 3.0 - }, - { - "name": "consumer_count", - "value": 1.0 - } - ] - }, - "selected_cost": { - "value": 4.0, - "unit": "RelativeStructuralUnits", - "source": "Modeled", - "baseline": { - "kind": "PreAsapRecomputation" - }, - "delta": -1.0, - "benefit_ratio": -0.3333333333333333, - "model_version": "dag_export-structural-cost-v1" - }, - "benefit": { - "value": -1.0, - "unit": "RelativeStructuralUnits", - "source": "Modeled", - "baseline": { - "kind": "PreAsapRecomputation" - }, - "benefit_ratio": -0.3333333333333333, - "model_version": "dag_export-structural-cost-v1" - } - } - }, - { - "id": 2, - "kind": "SummaryAgg", - "label": "SummaryAgg(ExactAggregate(Rate))", - "detail": { - "col": "SampleValue", - "family": "ExactAggregate(Rate, Rate)", - "grouping": "PerSubpopulationInstance", - "reduction": "PerEntity" - }, - "schema": { - "fields": [ - { - "dtype": "Plain(Timestamp)", - "name": "ts", - "nullable": false - }, - { - "dtype": "ExactAggregate(Rate, Rate)", - "name": "value", - "nullable": false - } - ], - "time_index": 0 - }, - "children": [ - 1 - ], - "workload_node_id": 11, - "decision": { - "id": 3, - "strategy": "SketchAlgorithmStrategy", - "rationale": "Rate realizes as an exact Rate accumulator", - "rank": 0, - "cost": 4.0, - "role": "replacement_root", - "baseline_cost": { - "value": 3.0, - "unit": "RelativeStructuralUnits", - "source": "Modeled", - "model_version": "dag_export-structural-cost-v1", - "inputs": [ - { - "name": "per_consumer_recompute_cost", - "value": 3.0 - }, - { - "name": "consumer_count", - "value": 1.0 - } - ] - }, - "selected_cost": { - "value": 4.0, - "unit": "RelativeStructuralUnits", - "source": "Modeled", - "baseline": { - "kind": "PreAsapRecomputation" - }, - "delta": -1.0, - "benefit_ratio": -0.3333333333333333, - "model_version": "dag_export-structural-cost-v1" - }, - "benefit": { - "value": -1.0, - "unit": "RelativeStructuralUnits", - "source": "Modeled", - "baseline": { - "kind": "PreAsapRecomputation" - }, - "benefit_ratio": -0.3333333333333333, - "model_version": "dag_export-structural-cost-v1" - } - } - }, - { - "id": 3, - "kind": "Sort", - "label": "Sort(1 keys)", - "detail": { - "keys": [ - { - "ascending": false, - "expr": { - "Column": 1 - }, - "nulls_first": false - } - ], - "partition_by": [] - }, - "schema": { - "closed": false, - "columns": [ - { - "dtype": "timestamp", - "name": "ts", - "nullable": false, - "table": null - }, - { - "dtype": "float64", - "name": "value", - "nullable": false, - "table": null - } - ], - "time_index": 0, - "unique_keys": [] - }, - "children": [ - 2 - ], - "workload_node_id": 12, - "hash": 3760917937445997010, - "decision": { - "id": 2, - "strategy": "TopKLimitReuseStrategy", - "rationale": "Derives this smaller top-k from a compatible larger top-k result shared by the workload.", - "rank": 0, - "cost": 5.0, - "role": "replacement_region", - "baseline_cost": { - "value": 5.0, - "unit": "RelativeStructuralUnits", - "source": "Modeled", - "model_version": "dag_export-structural-cost-v1", - "inputs": [ - { - "name": "per_consumer_recompute_cost", - "value": 5.0 - }, - { - "name": "consumer_count", - "value": 1.0 - } - ] - }, - "selected_cost": { - "value": 5.0, - "unit": "RelativeStructuralUnits", - "source": "Modeled", - "baseline": { - "kind": "PreAsapRecomputation" - }, - "delta": 0.0, - "benefit_ratio": 0.0, - "model_version": "dag_export-structural-cost-v1" - }, - "benefit": { - "value": 0.0, - "unit": "RelativeStructuralUnits", - "source": "Modeled", - "baseline": { - "kind": "PreAsapRecomputation" - }, - "benefit_ratio": 0.0, - "model_version": "dag_export-structural-cost-v1" - } - } - }, - { - "id": 4, - "kind": "Limit", - "label": "Limit(10)", - "detail": { - "n": 10, - "offset": 0 - }, - "schema": { - "closed": false, - "columns": [ - { - "dtype": "timestamp", - "name": "ts", - "nullable": false, - "table": null - }, - { - "dtype": "float64", - "name": "value", - "nullable": false, - "table": null - } - ], - "time_index": 0, - "unique_keys": [] - }, - "children": [ - 3 - ], - "workload_node_id": 13, - "hash": 10822644126224715622, - "decision": { - "id": 2, - "strategy": "TopKLimitReuseStrategy", - "rationale": "Derives this smaller top-k from a compatible larger top-k result shared by the workload.", - "rank": 0, - "cost": 5.0, - "role": "replacement_region", - "baseline_cost": { - "value": 5.0, - "unit": "RelativeStructuralUnits", - "source": "Modeled", - "model_version": "dag_export-structural-cost-v1", - "inputs": [ - { - "name": "per_consumer_recompute_cost", - "value": 5.0 - }, - { - "name": "consumer_count", - "value": 1.0 - } - ] - }, - "selected_cost": { - "value": 5.0, - "unit": "RelativeStructuralUnits", - "source": "Modeled", - "baseline": { - "kind": "PreAsapRecomputation" - }, - "delta": 0.0, - "benefit_ratio": 0.0, - "model_version": "dag_export-structural-cost-v1" - }, - "benefit": { - "value": 0.0, - "unit": "RelativeStructuralUnits", - "source": "Modeled", - "baseline": { - "kind": "PreAsapRecomputation" - }, - "benefit_ratio": 0.0, - "model_version": "dag_export-structural-cost-v1" - } - } - }, - { - "id": 5, - "kind": "Limit", - "label": "Limit(5)", - "detail": { - "n": 5, - "offset": 0 - }, - "schema": { - "closed": false, - "columns": [ - { - "dtype": "timestamp", - "name": "ts", - "nullable": false, - "table": null - }, - { - "dtype": "float64", - "name": "value", - "nullable": false, - "table": null - } - ], - "time_index": 0, - "unique_keys": [] - }, - "children": [ - 4 - ], - "workload_node_id": 14, - "hash": 5925942169603452483, - "decision": { - "id": 2, - "strategy": "TopKLimitReuseStrategy", - "rationale": "Derives this smaller top-k from a compatible larger top-k result shared by the workload.", - "rank": 0, - "cost": 5.0, - "role": "replacement_root", - "baseline_cost": { - "value": 5.0, - "unit": "RelativeStructuralUnits", - "source": "Modeled", - "model_version": "dag_export-structural-cost-v1", - "inputs": [ - { - "name": "per_consumer_recompute_cost", - "value": 5.0 - }, - { - "name": "consumer_count", - "value": 1.0 - } - ] - }, - "selected_cost": { - "value": 5.0, - "unit": "RelativeStructuralUnits", - "source": "Modeled", - "baseline": { - "kind": "PreAsapRecomputation" - }, - "delta": 0.0, - "benefit_ratio": 0.0, - "model_version": "dag_export-structural-cost-v1" - }, - "benefit": { - "value": 0.0, - "unit": "RelativeStructuralUnits", - "source": "Modeled", - "baseline": { - "kind": "PreAsapRecomputation" - }, - "benefit_ratio": 0.0, - "model_version": "dag_export-structural-cost-v1" - } - } - } - ], - "root": 5 - }, - "workload_cost": { - "baseline_cost": { - "value": 8.0, - "unit": "RelativeStructuralUnits", - "source": "Modeled", - "model_version": "dag_export-structural-cost-v1" - }, - "selected_cost": { - "value": 9.0, - "unit": "RelativeStructuralUnits", - "source": "Modeled", - "model_version": "dag_export-structural-cost-v1" - }, - "benefit": { - "value": -1.0, - "unit": "RelativeStructuralUnits", - "source": "Modeled", - "baseline": { - "kind": "PreAsapRecomputation" - }, - "benefit_ratio": -0.125, - "model_version": "dag_export-workload-cost-v1" - } - } - }, - { - "name": "q4", - "source": "topk(10, rate(http_requests_total[5m]))", - "graph": { - "nodes": [ - { - "id": 0, - "kind": "Scan", - "label": "Scan(http_requests_total)", - "detail": { - "predicates": [], - "schema": { - "closed": false, - "columns": [ - { - "dtype": "timestamp", - "name": "ts", - "nullable": false, - "table": null - }, - { - "dtype": "float64", - "name": "value", - "nullable": false, - "table": null - } - ], - "time_index": 0, - "unique_keys": [] - }, - "source": { - "TimeSeries": { - "metric": "http_requests_total" - } - } - }, - "schema": { - "closed": false, - "columns": [ - { - "dtype": "timestamp", - "name": "ts", - "nullable": false, - "table": null - }, - { - "dtype": "float64", - "name": "value", - "nullable": false, - "table": null - } - ], - "time_index": 0, - "unique_keys": [] - }, - "children": [], - "workload_node_id": 5, - "hash": 16569634401303792668 - }, - { - "id": 1, - "kind": "TimeRange", - "label": "TimeRange(300s)", - "detail": { - "range": { - "nanos": 0, - "secs": 300 - } - }, - "schema": { - "closed": false, - "columns": [ - { - "dtype": "timestamp", - "name": "ts", - "nullable": false, - "table": null - }, - { - "dtype": "float64", - "name": "value", - "nullable": false, - "table": null - } - ], - "time_index": 0, - "unique_keys": [] - }, - "children": [ - 0 - ], - "workload_node_id": 6, - "hash": 12007712336004404578 - }, - { - "id": 2, - "kind": "Aggregate", - "label": "Aggregate(1 measures)", - "detail": { - "having": null, - "measures": [ - { - "kind": "rate" - } - ], - "output_names": [ - "" - ], - "reduction": "PerEntity" - }, - "schema": { - "closed": false, - "columns": [ - { - "dtype": "timestamp", - "name": "ts", - "nullable": false, - "table": null - }, - { - "dtype": "float64", - "name": "value", - "nullable": false, - "table": null - } - ], - "time_index": 0, - "unique_keys": [] - }, - "children": [ - 1 - ], - "workload_node_id": 7, - "hash": 12607242477503010192 - }, - { - "id": 3, - "kind": "Sort", - "label": "Sort(1 keys)", - "detail": { - "keys": [ - { - "ascending": false, - "expr": { - "Column": 1 - }, - "nulls_first": false - } - ], - "partition_by": [] - }, - "schema": { - "closed": false, - "columns": [ - { - "dtype": "timestamp", - "name": "ts", - "nullable": false, - "table": null - }, - { - "dtype": "float64", - "name": "value", - "nullable": false, - "table": null - } - ], - "time_index": 0, - "unique_keys": [] - }, - "children": [ - 2 - ], - "workload_node_id": 8, - "hash": 3760917937445997010 - }, - { - "id": 4, - "kind": "Limit", - "label": "Limit(10)", - "detail": { - "n": 10, - "offset": 0 - }, - "schema": { - "closed": false, - "columns": [ - { - "dtype": "timestamp", - "name": "ts", - "nullable": false, - "table": null - }, - { - "dtype": "float64", - "name": "value", - "nullable": false, - "table": null - } - ], - "time_index": 0, - "unique_keys": [] - }, - "children": [ - 3 - ], - "workload_node_id": 10, - "hash": 10822644126224715622 - } - ], - "root": 4 - }, - "replacements": [ - { - "decision_id": 3, - "target_pre_id": 2, - "strategy": "SketchAlgorithmStrategy", - "rationale": "Rate realizes as an exact Rate accumulator", - "rank": 0, - "cost": 4.0, - "before": { - "nodes": [ - { - "id": 0, - "kind": "Scan", - "label": "Scan(http_requests_total)", - "detail": { - "predicates": [], - "schema": { - "closed": false, - "columns": [ - { - "dtype": "timestamp", - "name": "ts", - "nullable": false, - "table": null - }, - { - "dtype": "float64", - "name": "value", - "nullable": false, - "table": null - } - ], - "time_index": 0, - "unique_keys": [] - }, - "source": { - "TimeSeries": { - "metric": "http_requests_total" - } - } - }, - "schema": { - "closed": false, - "columns": [ - { - "dtype": "timestamp", - "name": "ts", - "nullable": false, - "table": null - }, - { - "dtype": "float64", - "name": "value", - "nullable": false, - "table": null - } - ], - "time_index": 0, - "unique_keys": [] - }, - "children": [], - "hash": 16569634401303792668 - }, - { - "id": 1, - "kind": "TimeRange", - "label": "TimeRange(300s)", - "detail": { - "range": { - "nanos": 0, - "secs": 300 - } - }, - "schema": { - "closed": false, - "columns": [ - { - "dtype": "timestamp", - "name": "ts", - "nullable": false, - "table": null - }, - { - "dtype": "float64", - "name": "value", - "nullable": false, - "table": null - } - ], - "time_index": 0, - "unique_keys": [] - }, - "children": [ - 0 - ], - "hash": 12007712336004404578 - }, - { - "id": 2, - "kind": "Aggregate", - "label": "Aggregate(1 measures)", - "detail": { - "having": null, - "measures": [ - { - "kind": "rate" - } - ], - "output_names": [ - "" - ], - "reduction": "PerEntity" - }, - "schema": { - "closed": false, - "columns": [ - { - "dtype": "timestamp", - "name": "ts", - "nullable": false, - "table": null - }, - { - "dtype": "float64", - "name": "value", - "nullable": false, - "table": null - } - ], - "time_index": 0, - "unique_keys": [] - }, - "children": [ - 1 - ], - "hash": 12607242477503010192 - } - ], - "root": 2 - }, - "after": { - "kind": "Summary", - "graph": { - "nodes": [ - { - "id": 0, - "kind": "KeepPreAsap", - "label": "KeepPreAsap(TimeRange)", - "detail": { - "pre_asap_subgraph": { - "nodes": [ - { - "children": [], - "detail": { - "predicates": [], - "schema": { - "closed": false, - "columns": [ - { - "dtype": "timestamp", - "name": "ts", - "nullable": false, - "table": null - }, - { - "dtype": "float64", - "name": "value", - "nullable": false, - "table": null - } - ], - "time_index": 0, - "unique_keys": [] - }, - "source": { - "TimeSeries": { - "metric": "http_requests_total" - } - } - }, - "hash": 16569634401303792668, - "id": 0, - "kind": "Scan", - "label": "Scan(http_requests_total)", - "schema": { - "closed": false, - "columns": [ - { - "dtype": "timestamp", - "name": "ts", - "nullable": false, - "table": null - }, - { - "dtype": "float64", - "name": "value", - "nullable": false, - "table": null - } - ], - "time_index": 0, - "unique_keys": [] - } - }, - { - "children": [ - 0 - ], - "detail": { - "range": { - "nanos": 0, - "secs": 300 - } - }, - "hash": 12007712336004404578, - "id": 1, - "kind": "TimeRange", - "label": "TimeRange(300s)", - "schema": { - "closed": false, - "columns": [ - { - "dtype": "timestamp", - "name": "ts", - "nullable": false, - "table": null - }, - { - "dtype": "float64", - "name": "value", - "nullable": false, - "table": null - } - ], - "time_index": 0, - "unique_keys": [] - } - } - ], - "root": 1 - } - }, - "children": [] - }, - { - "id": 1, - "kind": "SummaryAgg", - "label": "SummaryAgg(ExactAggregate(Rate))", - "detail": { - "col": "SampleValue", - "family": "ExactAggregate(Rate, Rate)", - "grouping": "PerSubpopulationInstance", - "reduction": "PerEntity" - }, - "children": [ - 0 - ] - } - ], - "root": 1 - } - }, - "baseline_cost": { - "value": 3.0, - "unit": "RelativeStructuralUnits", - "source": "Modeled", - "model_version": "dag_export-structural-cost-v1", - "inputs": [ - { - "name": "per_consumer_recompute_cost", - "value": 3.0 - }, - { - "name": "consumer_count", - "value": 1.0 - } - ] - }, - "selected_cost": { - "value": 4.0, - "unit": "RelativeStructuralUnits", - "source": "Modeled", - "baseline": { - "kind": "PreAsapRecomputation" - }, - "delta": -1.0, - "benefit_ratio": -0.3333333333333333, - "model_version": "dag_export-structural-cost-v1" - }, - "benefit": { - "value": -1.0, - "unit": "RelativeStructuralUnits", - "source": "Modeled", - "baseline": { - "kind": "PreAsapRecomputation" - }, - "benefit_ratio": -0.3333333333333333, - "model_version": "dag_export-structural-cost-v1" - } - } - ], - "post_graph": { - "nodes": [ - { - "id": 0, - "kind": "Scan", - "label": "Scan(http_requests_total)", - "detail": { - "predicates": [], - "schema": { - "closed": false, - "columns": [ - { - "dtype": "timestamp", - "name": "ts", - "nullable": false, - "table": null - }, - { - "dtype": "float64", - "name": "value", - "nullable": false, - "table": null - } - ], - "time_index": 0, - "unique_keys": [] - }, - "source": { - "TimeSeries": { - "metric": "http_requests_total" - } - } - }, - "schema": { - "closed": false, - "columns": [ - { - "dtype": "timestamp", - "name": "ts", - "nullable": false, - "table": null - }, - { - "dtype": "float64", - "name": "value", - "nullable": false, - "table": null - } - ], - "time_index": 0, - "unique_keys": [] - }, - "children": [], - "workload_node_id": 9, - "hash": 16569634401303792668, - "decision": { - "id": 3, - "strategy": "SketchAlgorithmStrategy", - "rationale": "Rate realizes as an exact Rate accumulator", - "rank": 0, - "cost": 4.0, - "role": "replacement_region", - "baseline_cost": { - "value": 3.0, - "unit": "RelativeStructuralUnits", - "source": "Modeled", - "model_version": "dag_export-structural-cost-v1", - "inputs": [ - { - "name": "per_consumer_recompute_cost", - "value": 3.0 - }, - { - "name": "consumer_count", - "value": 1.0 - } - ] - }, - "selected_cost": { - "value": 4.0, - "unit": "RelativeStructuralUnits", - "source": "Modeled", - "baseline": { - "kind": "PreAsapRecomputation" - }, - "delta": -1.0, - "benefit_ratio": -0.3333333333333333, - "model_version": "dag_export-structural-cost-v1" - }, - "benefit": { - "value": -1.0, - "unit": "RelativeStructuralUnits", - "source": "Modeled", - "baseline": { - "kind": "PreAsapRecomputation" - }, - "benefit_ratio": -0.3333333333333333, - "model_version": "dag_export-structural-cost-v1" - } - } - }, - { - "id": 1, - "kind": "TimeRange", - "label": "TimeRange(300s)", - "detail": { - "range": { - "nanos": 0, - "secs": 300 - } - }, - "schema": { - "closed": false, - "columns": [ - { - "dtype": "timestamp", - "name": "ts", - "nullable": false, - "table": null - }, - { - "dtype": "float64", - "name": "value", + "name": "value", "nullable": false, "table": null } @@ -4437,131 +535,11 @@ "time_index": 0, "unique_keys": [] }, - "children": [ - 0 - ], - "workload_node_id": 10, - "hash": 12007712336004404578, - "decision": { - "id": 3, - "strategy": "SketchAlgorithmStrategy", - "rationale": "Rate realizes as an exact Rate accumulator", - "rank": 0, - "cost": 4.0, - "role": "replacement_region", - "baseline_cost": { - "value": 3.0, - "unit": "RelativeStructuralUnits", - "source": "Modeled", - "model_version": "dag_export-structural-cost-v1", - "inputs": [ - { - "name": "per_consumer_recompute_cost", - "value": 3.0 - }, - { - "name": "consumer_count", - "value": 1.0 - } - ] - }, - "selected_cost": { - "value": 4.0, - "unit": "RelativeStructuralUnits", - "source": "Modeled", - "baseline": { - "kind": "PreAsapRecomputation" - }, - "delta": -1.0, - "benefit_ratio": -0.3333333333333333, - "model_version": "dag_export-structural-cost-v1" - }, - "benefit": { - "value": -1.0, - "unit": "RelativeStructuralUnits", - "source": "Modeled", - "baseline": { - "kind": "PreAsapRecomputation" - }, - "benefit_ratio": -0.3333333333333333, - "model_version": "dag_export-structural-cost-v1" - } - } - }, - { - "id": 2, - "kind": "SummaryAgg", - "label": "SummaryAgg(ExactAggregate(Rate))", - "detail": { - "col": "SampleValue", - "family": "ExactAggregate(Rate, Rate)", - "grouping": "PerSubpopulationInstance", - "reduction": "PerEntity" - }, - "schema": { - "fields": [ - { - "dtype": "Plain(Timestamp)", - "name": "ts", - "nullable": false - }, - { - "dtype": "ExactAggregate(Rate, Rate)", - "name": "value", - "nullable": false - } - ], - "time_index": 0 - }, "children": [ 1 ], - "workload_node_id": 11, - "decision": { - "id": 3, - "strategy": "SketchAlgorithmStrategy", - "rationale": "Rate realizes as an exact Rate accumulator", - "rank": 0, - "cost": 4.0, - "role": "replacement_root", - "baseline_cost": { - "value": 3.0, - "unit": "RelativeStructuralUnits", - "source": "Modeled", - "model_version": "dag_export-structural-cost-v1", - "inputs": [ - { - "name": "per_consumer_recompute_cost", - "value": 3.0 - }, - { - "name": "consumer_count", - "value": 1.0 - } - ] - }, - "selected_cost": { - "value": 4.0, - "unit": "RelativeStructuralUnits", - "source": "Modeled", - "baseline": { - "kind": "PreAsapRecomputation" - }, - "delta": -1.0, - "benefit_ratio": -0.3333333333333333, - "model_version": "dag_export-structural-cost-v1" - }, - "benefit": { - "value": -1.0, - "unit": "RelativeStructuralUnits", - "source": "Modeled", - "baseline": { - "kind": "PreAsapRecomputation" - }, - "benefit_ratio": -0.3333333333333333, - "model_version": "dag_export-structural-cost-v1" - } - } + "workload_node_id": 7, + "hash": 12607242477503010192 }, { "id": 3, @@ -4601,15 +579,15 @@ "children": [ 2 ], - "workload_node_id": 12, + "workload_node_id": 8, "hash": 3760917937445997010 }, { "id": 4, "kind": "Limit", - "label": "Limit(10)", + "label": "Limit(5)", "detail": { - "n": 10, + "n": 5, "offset": 0 }, "schema": { @@ -4634,955 +612,230 @@ "children": [ 3 ], - "workload_node_id": 13, - "hash": 10822644126224715622 + "workload_node_id": 9, + "hash": 7672123412300577486 } ], "root": 4 - }, - "workload_cost": { - "baseline_cost": { - "value": 3.0, - "unit": "RelativeStructuralUnits", - "source": "Modeled", - "model_version": "dag_export-structural-cost-v1" - }, - "selected_cost": { - "value": 4.0, - "unit": "RelativeStructuralUnits", - "source": "Modeled", - "model_version": "dag_export-structural-cost-v1" - }, - "benefit": { - "value": -1.0, - "unit": "RelativeStructuralUnits", - "source": "Modeled", - "baseline": { - "kind": "PreAsapRecomputation" - }, - "benefit_ratio": -0.3333333333333333, - "model_version": "dag_export-workload-cost-v1" - } } }, { - "name": "q6", - "source": "SELECT metrics.service, COUNT(*) FROM metrics JOIN hosts ON metrics.service = hosts.service GROUP BY metrics.service", + "name": "q4", + "source": "topk(10, rate(http_requests_total[5m]))", "graph": { "nodes": [ { "id": 0, "kind": "Scan", - "label": "Scan(metrics)", + "label": "Scan(http_requests_total)", "detail": { "predicates": [], "schema": { - "closed": true, + "closed": false, "columns": [ { "dtype": "timestamp", "name": "ts", "nullable": false, - "table": "metrics" - }, - { - "dtype": "utf8", - "name": "service", - "nullable": false, - "table": "metrics" - }, - { - "dtype": "utf8", - "name": "region", - "nullable": false, - "table": "metrics" + "table": null }, { "dtype": "float64", - "name": "latency", - "nullable": false, - "table": "metrics" - }, - { - "dtype": "int64", - "name": "bytes", + "name": "value", "nullable": false, - "table": "metrics" + "table": null } ], "time_index": 0, "unique_keys": [] }, "source": { - "Table": { - "table_ref": "metrics" + "TimeSeries": { + "metric": "http_requests_total" } } }, "schema": { - "closed": true, + "closed": false, "columns": [ { "dtype": "timestamp", "name": "ts", "nullable": false, - "table": "metrics" - }, - { - "dtype": "utf8", - "name": "service", - "nullable": false, - "table": "metrics" - }, - { - "dtype": "utf8", - "name": "region", - "nullable": false, - "table": "metrics" + "table": null }, { "dtype": "float64", - "name": "latency", - "nullable": false, - "table": "metrics" - }, - { - "dtype": "int64", - "name": "bytes", + "name": "value", "nullable": false, - "table": "metrics" + "table": null } ], "time_index": 0, "unique_keys": [] }, "children": [], - "workload_node_id": 0, - "hash": 2606922452740434172 + "workload_node_id": 5, + "hash": 16569634401303792668 }, { "id": 1, - "kind": "Scan", - "label": "Scan(hosts)", + "kind": "TimeRange", + "label": "TimeRange(300s)", "detail": { - "predicates": [], - "schema": { - "closed": true, - "columns": [ - { - "dtype": "utf8", - "name": "service", - "nullable": false, - "table": "hosts" - }, - { - "dtype": "utf8", - "name": "region", - "nullable": false, - "table": "hosts" - } - ], - "time_index": null, - "unique_keys": [] - }, - "source": { - "Table": { - "table_ref": "hosts" - } + "range": { + "nanos": 0, + "secs": 300 } }, "schema": { - "closed": true, + "closed": false, "columns": [ { - "dtype": "utf8", - "name": "service", + "dtype": "timestamp", + "name": "ts", "nullable": false, - "table": "hosts" + "table": null }, { - "dtype": "utf8", - "name": "region", + "dtype": "float64", + "name": "value", "nullable": false, - "table": "hosts" + "table": null } ], - "time_index": null, + "time_index": 0, "unique_keys": [] }, - "children": [], - "workload_node_id": 11, - "hash": 7077183977966848076 + "children": [ + 0 + ], + "workload_node_id": 6, + "hash": 12007712336004404578 }, { "id": 2, - "kind": "Join", - "label": "Join(Inner)", + "kind": "Aggregate", + "label": "Aggregate(1 measures)", "detail": { - "kind": "Inner", - "pred": { - "Compare": { - "left": { - "Column": 1 - }, - "op": "Eq", - "right": { - "Column": 5 - } + "having": null, + "measures": [ + { + "kind": "rate" } - } + ], + "output_names": [ + "" + ], + "reduction": "PerEntity" }, "schema": { - "closed": true, + "closed": false, "columns": [ { "dtype": "timestamp", "name": "ts", "nullable": false, - "table": "metrics" - }, - { - "dtype": "utf8", - "name": "service", - "nullable": false, - "table": "metrics" - }, - { - "dtype": "utf8", - "name": "region", - "nullable": false, - "table": "metrics" + "table": null }, { "dtype": "float64", - "name": "latency", - "nullable": false, - "table": "metrics" - }, - { - "dtype": "int64", - "name": "bytes", - "nullable": false, - "table": "metrics" - }, - { - "dtype": "utf8", - "name": "service", - "nullable": false, - "table": "hosts" - }, - { - "dtype": "utf8", - "name": "region", + "name": "value", "nullable": false, - "table": "hosts" + "table": null } ], "time_index": 0, "unique_keys": [] }, "children": [ - 0, 1 ], - "workload_node_id": 12, - "hash": 1121596767830819524 + "workload_node_id": 7, + "hash": 12607242477503010192 }, { "id": 3, - "kind": "Aggregate", - "label": "Aggregate(1 measures)", + "kind": "Sort", + "label": "Sort(1 keys)", "detail": { - "having": null, - "measures": [ + "keys": [ { - "accuracy": { - "Epsilon": 0.01 + "ascending": false, + "expr": { + "Column": 1 }, - "kind": "count" + "nulls_first": false } ], - "output_names": [ - "count(*)" - ], - "reduction": { - "Reduce": [ - 1 - ] - } + "partition_by": [] }, "schema": { - "closed": true, + "closed": false, "columns": [ { - "dtype": "utf8", - "name": "service", + "dtype": "timestamp", + "name": "ts", "nullable": false, - "table": "metrics" + "table": null }, { - "dtype": "int64", - "name": "count(*)", + "dtype": "float64", + "name": "value", "nullable": false, "table": null } ], - "time_index": null, - "unique_keys": [ - [ - 0 - ] - ] + "time_index": 0, + "unique_keys": [] }, "children": [ 2 ], - "workload_node_id": 13, - "hash": 4243737280010465780, - "notes": [ - { - "kind": "SketchApproximation", - "reason": "count realizes as a Cms sketch — one of summary_candidates' alternatives for this intent (asap_aware_mapping::replacement::implementations_for_with); count realizes as a CountSketch sketch — one of summary_candidates' alternatives for this intent (asap_aware_mapping::replacement::implementations_for_with); count realizes as a shared HydraCms structure over Cms serving every subpopulation of this grouped aggregate, instead of one Cms instance per distinct `by` key — legal because this aggregate has a non-empty subpopulation concept and Cms has a modeled Hydra variant (asap_types::post_asap::hydra_kind_for); whether it's *worth* the shared/independent trade-off for the actual subpopulation cardinality is a CostModel's call, not this strategy's; count realizes as a shared HydraCountSketch structure over CountSketch serving every subpopulation of this grouped aggregate, instead of one CountSketch instance per distinct `by` key — legal because this aggregate has a non-empty subpopulation concept and CountSketch has a modeled Hydra variant (asap_types::post_asap::hydra_kind_for); whether it's *worth* the shared/independent trade-off for the actual subpopulation cardinality is a CostModel's call, not this strategy's" - } - ] + "workload_node_id": 8, + "hash": 3760917937445997010 }, { "id": 4, - "kind": "Project", - "label": "Project(2 cols)", + "kind": "Limit", + "label": "Limit(10)", "detail": { - "cols": [ - { - "alias": null, - "expr": { - "Column": 0 - } - }, - { - "alias": null, - "expr": { - "Column": 1 - } - } - ], - "qualifier": null + "n": 10, + "offset": 0 }, "schema": { - "closed": true, + "closed": false, "columns": [ { - "dtype": "utf8", - "name": "service", + "dtype": "timestamp", + "name": "ts", "nullable": false, "table": null }, { - "dtype": "int64", - "name": "count(*)", + "dtype": "float64", + "name": "value", "nullable": false, "table": null } ], - "time_index": null, - "unique_keys": [ - [ - 0 - ] - ] + "time_index": 0, + "unique_keys": [] }, "children": [ 3 ], - "workload_node_id": 14, - "hash": 16310199685311002920 + "workload_node_id": 10, + "hash": 10822644126224715622 } ], "root": 4 - }, - "replacements": [ - { - "decision_id": 5, - "target_pre_id": 3, - "strategy": "SketchAlgorithmStrategy", - "rationale": "count realizes as a Cms sketch", - "rank": 0, - "cost": 5.0, - "before": { - "nodes": [ - { - "id": 0, - "kind": "Scan", - "label": "Scan(metrics)", - "detail": { - "predicates": [], - "schema": { - "closed": true, - "columns": [ - { - "dtype": "timestamp", - "name": "ts", - "nullable": false, - "table": "metrics" - }, - { - "dtype": "utf8", - "name": "service", - "nullable": false, - "table": "metrics" - }, - { - "dtype": "utf8", - "name": "region", - "nullable": false, - "table": "metrics" - }, - { - "dtype": "float64", - "name": "latency", - "nullable": false, - "table": "metrics" - }, - { - "dtype": "int64", - "name": "bytes", - "nullable": false, - "table": "metrics" - } - ], - "time_index": 0, - "unique_keys": [] - }, - "source": { - "Table": { - "table_ref": "metrics" - } - } - }, - "schema": { - "closed": true, - "columns": [ - { - "dtype": "timestamp", - "name": "ts", - "nullable": false, - "table": "metrics" - }, - { - "dtype": "utf8", - "name": "service", - "nullable": false, - "table": "metrics" - }, - { - "dtype": "utf8", - "name": "region", - "nullable": false, - "table": "metrics" - }, - { - "dtype": "float64", - "name": "latency", - "nullable": false, - "table": "metrics" - }, - { - "dtype": "int64", - "name": "bytes", - "nullable": false, - "table": "metrics" - } - ], - "time_index": 0, - "unique_keys": [] - }, - "children": [], - "hash": 2606922452740434172 - }, - { - "id": 1, - "kind": "Scan", - "label": "Scan(hosts)", - "detail": { - "predicates": [], - "schema": { - "closed": true, - "columns": [ - { - "dtype": "utf8", - "name": "service", - "nullable": false, - "table": "hosts" - }, - { - "dtype": "utf8", - "name": "region", - "nullable": false, - "table": "hosts" - } - ], - "time_index": null, - "unique_keys": [] - }, - "source": { - "Table": { - "table_ref": "hosts" - } - } - }, - "schema": { - "closed": true, - "columns": [ - { - "dtype": "utf8", - "name": "service", - "nullable": false, - "table": "hosts" - }, - { - "dtype": "utf8", - "name": "region", - "nullable": false, - "table": "hosts" - } - ], - "time_index": null, - "unique_keys": [] - }, - "children": [], - "hash": 7077183977966848076 - }, - { - "id": 2, - "kind": "Join", - "label": "Join(Inner)", - "detail": { - "kind": "Inner", - "pred": { - "Compare": { - "left": { - "Column": 1 - }, - "op": "Eq", - "right": { - "Column": 5 - } - } - } - }, - "schema": { - "closed": true, - "columns": [ - { - "dtype": "timestamp", - "name": "ts", - "nullable": false, - "table": "metrics" - }, - { - "dtype": "utf8", - "name": "service", - "nullable": false, - "table": "metrics" - }, - { - "dtype": "utf8", - "name": "region", - "nullable": false, - "table": "metrics" - }, - { - "dtype": "float64", - "name": "latency", - "nullable": false, - "table": "metrics" - }, - { - "dtype": "int64", - "name": "bytes", - "nullable": false, - "table": "metrics" - }, - { - "dtype": "utf8", - "name": "service", - "nullable": false, - "table": "hosts" - }, - { - "dtype": "utf8", - "name": "region", - "nullable": false, - "table": "hosts" - } - ], - "time_index": 0, - "unique_keys": [] - }, - "children": [ - 0, - 1 - ], - "hash": 1121596767830819524 - }, - { - "id": 3, - "kind": "Aggregate", - "label": "Aggregate(1 measures)", - "detail": { - "having": null, - "measures": [ - { - "accuracy": { - "Epsilon": 0.01 - }, - "kind": "count" - } - ], - "output_names": [ - "count(*)" - ], - "reduction": { - "Reduce": [ - 1 - ] - } - }, - "schema": { - "closed": true, - "columns": [ - { - "dtype": "utf8", - "name": "service", - "nullable": false, - "table": "metrics" - }, - { - "dtype": "int64", - "name": "count(*)", - "nullable": false, - "table": null - } - ], - "time_index": null, - "unique_keys": [ - [ - 0 - ] - ] - }, - "children": [ - 2 - ], - "hash": 4243737280010465780 - } - ], - "root": 3 - }, - "after": { - "kind": "Summary", - "graph": { - "nodes": [ - { - "id": 0, - "kind": "KeepPreAsap", - "label": "KeepPreAsap(Join)", - "detail": { - "pre_asap_subgraph": { - "nodes": [ - { - "children": [], - "detail": { - "predicates": [], - "schema": { - "closed": true, - "columns": [ - { - "dtype": "timestamp", - "name": "ts", - "nullable": false, - "table": "metrics" - }, - { - "dtype": "utf8", - "name": "service", - "nullable": false, - "table": "metrics" - }, - { - "dtype": "utf8", - "name": "region", - "nullable": false, - "table": "metrics" - }, - { - "dtype": "float64", - "name": "latency", - "nullable": false, - "table": "metrics" - }, - { - "dtype": "int64", - "name": "bytes", - "nullable": false, - "table": "metrics" - } - ], - "time_index": 0, - "unique_keys": [] - }, - "source": { - "Table": { - "table_ref": "metrics" - } - } - }, - "hash": 2606922452740434172, - "id": 0, - "kind": "Scan", - "label": "Scan(metrics)", - "schema": { - "closed": true, - "columns": [ - { - "dtype": "timestamp", - "name": "ts", - "nullable": false, - "table": "metrics" - }, - { - "dtype": "utf8", - "name": "service", - "nullable": false, - "table": "metrics" - }, - { - "dtype": "utf8", - "name": "region", - "nullable": false, - "table": "metrics" - }, - { - "dtype": "float64", - "name": "latency", - "nullable": false, - "table": "metrics" - }, - { - "dtype": "int64", - "name": "bytes", - "nullable": false, - "table": "metrics" - } - ], - "time_index": 0, - "unique_keys": [] - } - }, - { - "children": [], - "detail": { - "predicates": [], - "schema": { - "closed": true, - "columns": [ - { - "dtype": "utf8", - "name": "service", - "nullable": false, - "table": "hosts" - }, - { - "dtype": "utf8", - "name": "region", - "nullable": false, - "table": "hosts" - } - ], - "time_index": null, - "unique_keys": [] - }, - "source": { - "Table": { - "table_ref": "hosts" - } - } - }, - "hash": 7077183977966848076, - "id": 1, - "kind": "Scan", - "label": "Scan(hosts)", - "schema": { - "closed": true, - "columns": [ - { - "dtype": "utf8", - "name": "service", - "nullable": false, - "table": "hosts" - }, - { - "dtype": "utf8", - "name": "region", - "nullable": false, - "table": "hosts" - } - ], - "time_index": null, - "unique_keys": [] - } - }, - { - "children": [ - 0, - 1 - ], - "detail": { - "kind": "Inner", - "pred": { - "Compare": { - "left": { - "Column": 1 - }, - "op": "Eq", - "right": { - "Column": 5 - } - } - } - }, - "hash": 1121596767830819524, - "id": 2, - "kind": "Join", - "label": "Join(Inner)", - "schema": { - "closed": true, - "columns": [ - { - "dtype": "timestamp", - "name": "ts", - "nullable": false, - "table": "metrics" - }, - { - "dtype": "utf8", - "name": "service", - "nullable": false, - "table": "metrics" - }, - { - "dtype": "utf8", - "name": "region", - "nullable": false, - "table": "metrics" - }, - { - "dtype": "float64", - "name": "latency", - "nullable": false, - "table": "metrics" - }, - { - "dtype": "int64", - "name": "bytes", - "nullable": false, - "table": "metrics" - }, - { - "dtype": "utf8", - "name": "service", - "nullable": false, - "table": "hosts" - }, - { - "dtype": "utf8", - "name": "region", - "nullable": false, - "table": "hosts" - } - ], - "time_index": 0, - "unique_keys": [] - } - } - ], - "root": 2 - } - }, - "children": [] - }, - { - "id": 1, - "kind": "SummaryAgg", - "label": "SummaryAgg(Sketch(Cms))", - "detail": { - "col": "SampleValue", - "family": "Sketch(SketchKind { category: Frequency, algorithm: Cms, params: Cms { width: 272, depth: 5 } }, PerSubpopulationInstance)", - "grouping": "PerSubpopulationInstance", - "reduction": { - "Reduce": [ - 1 - ] - } - }, - "children": [ - 0 - ] - }, - { - "id": 2, - "kind": "SummaryEstimate", - "label": "SummaryEstimate(PointCount { key: SampleValue, value: None })", - "detail": { - "query": "PointCount { key: SampleValue, value: None }" - }, - "children": [ - 1 - ] - } - ], - "root": 2 - } - }, - "baseline_cost": { - "value": 4.0, - "unit": "RelativeStructuralUnits", - "source": "Modeled", - "model_version": "dag_export-structural-cost-v1", - "inputs": [ - { - "name": "per_consumer_recompute_cost", - "value": 4.0 - }, - { - "name": "consumer_count", - "value": 1.0 - } - ] - }, - "selected_cost": { - "value": 5.0, - "unit": "RelativeStructuralUnits", - "source": "Modeled", - "baseline": { - "kind": "PreAsapRecomputation" - }, - "delta": -1.0, - "benefit_ratio": -0.25, - "model_version": "dag_export-structural-cost-v1" - }, - "benefit": { - "value": -1.0, - "unit": "RelativeStructuralUnits", - "source": "Modeled", - "baseline": { - "kind": "PreAsapRecomputation" - }, - "benefit_ratio": -0.25, - "model_version": "dag_export-structural-cost-v1" - } - } - ], - "post_graph": { + } + }, + { + "name": "q6", + "source": "SELECT metrics.service, COUNT(*) FROM metrics JOIN hosts ON metrics.service = hosts.service GROUP BY metrics.service", + "graph": { "nodes": [ { "id": 0, @@ -5672,52 +925,7 @@ }, "children": [], "workload_node_id": 0, - "hash": 2606922452740434172, - "decision": { - "id": 5, - "strategy": "SketchAlgorithmStrategy", - "rationale": "count realizes as a Cms sketch", - "rank": 0, - "cost": 5.0, - "role": "replacement_region", - "baseline_cost": { - "value": 4.0, - "unit": "RelativeStructuralUnits", - "source": "Modeled", - "model_version": "dag_export-structural-cost-v1", - "inputs": [ - { - "name": "per_consumer_recompute_cost", - "value": 4.0 - }, - { - "name": "consumer_count", - "value": 1.0 - } - ] - }, - "selected_cost": { - "value": 5.0, - "unit": "RelativeStructuralUnits", - "source": "Modeled", - "baseline": { - "kind": "PreAsapRecomputation" - }, - "delta": -1.0, - "benefit_ratio": -0.25, - "model_version": "dag_export-structural-cost-v1" - }, - "benefit": { - "value": -1.0, - "unit": "RelativeStructuralUnits", - "source": "Modeled", - "baseline": { - "kind": "PreAsapRecomputation" - }, - "benefit_ratio": -0.25, - "model_version": "dag_export-structural-cost-v1" - } - } + "hash": 2606922452740434172 }, { "id": 1, @@ -5770,53 +978,8 @@ "unique_keys": [] }, "children": [], - "workload_node_id": 15, - "hash": 7077183977966848076, - "decision": { - "id": 5, - "strategy": "SketchAlgorithmStrategy", - "rationale": "count realizes as a Cms sketch", - "rank": 0, - "cost": 5.0, - "role": "replacement_region", - "baseline_cost": { - "value": 4.0, - "unit": "RelativeStructuralUnits", - "source": "Modeled", - "model_version": "dag_export-structural-cost-v1", - "inputs": [ - { - "name": "per_consumer_recompute_cost", - "value": 4.0 - }, - { - "name": "consumer_count", - "value": 1.0 - } - ] - }, - "selected_cost": { - "value": 5.0, - "unit": "RelativeStructuralUnits", - "source": "Modeled", - "baseline": { - "kind": "PreAsapRecomputation" - }, - "delta": -1.0, - "benefit_ratio": -0.25, - "model_version": "dag_export-structural-cost-v1" - }, - "benefit": { - "value": -1.0, - "unit": "RelativeStructuralUnits", - "source": "Modeled", - "baseline": { - "kind": "PreAsapRecomputation" - }, - "benefit_ratio": -0.25, - "model_version": "dag_export-structural-cost-v1" - } - } + "workload_node_id": 11, + "hash": 7077183977966848076 }, { "id": 2, @@ -5889,62 +1052,26 @@ 0, 1 ], - "workload_node_id": 16, - "hash": 1121596767830819524, - "decision": { - "id": 5, - "strategy": "SketchAlgorithmStrategy", - "rationale": "count realizes as a Cms sketch", - "rank": 0, - "cost": 5.0, - "role": "replacement_region", - "baseline_cost": { - "value": 4.0, - "unit": "RelativeStructuralUnits", - "source": "Modeled", - "model_version": "dag_export-structural-cost-v1", - "inputs": [ - { - "name": "per_consumer_recompute_cost", - "value": 4.0 - }, - { - "name": "consumer_count", - "value": 1.0 - } - ] - }, - "selected_cost": { - "value": 5.0, - "unit": "RelativeStructuralUnits", - "source": "Modeled", - "baseline": { - "kind": "PreAsapRecomputation" - }, - "delta": -1.0, - "benefit_ratio": -0.25, - "model_version": "dag_export-structural-cost-v1" - }, - "benefit": { - "value": -1.0, - "unit": "RelativeStructuralUnits", - "source": "Modeled", - "baseline": { - "kind": "PreAsapRecomputation" - }, - "benefit_ratio": -0.25, - "model_version": "dag_export-structural-cost-v1" - } - } + "workload_node_id": 12, + "hash": 1121596767830819524 }, { "id": 3, - "kind": "SummaryAgg", - "label": "SummaryAgg(Sketch(Cms))", + "kind": "Aggregate", + "label": "Aggregate(1 measures)", "detail": { - "col": "SampleValue", - "family": "Sketch(SketchKind { category: Frequency, algorithm: Cms, params: Cms { width: 272, depth: 5 } }, PerSubpopulationInstance)", - "grouping": "PerSubpopulationInstance", + "having": null, + "measures": [ + { + "accuracy": { + "Epsilon": 0.01 + }, + "kind": "count" + } + ], + "output_names": [ + "count(*)" + ], "reduction": { "Reduce": [ 1 @@ -5952,144 +1079,42 @@ } }, "schema": { - "fields": [ + "closed": true, + "columns": [ { - "dtype": "Plain(Utf8)", + "dtype": "utf8", "name": "service", - "nullable": false + "nullable": false, + "table": "metrics" }, { - "dtype": "Sketch(SketchKind { category: Frequency, algorithm: Cms, params: Cms { width: 272, depth: 5 } }, PerSubpopulationInstance)", + "dtype": "int64", "name": "count(*)", - "nullable": false + "nullable": false, + "table": null } ], - "time_index": null + "time_index": null, + "unique_keys": [ + [ + 0 + ] + ] }, "children": [ 2 ], - "workload_node_id": 17, - "decision": { - "id": 5, - "strategy": "SketchAlgorithmStrategy", - "rationale": "count realizes as a Cms sketch", - "rank": 0, - "cost": 5.0, - "role": "replacement_region", - "baseline_cost": { - "value": 4.0, - "unit": "RelativeStructuralUnits", - "source": "Modeled", - "model_version": "dag_export-structural-cost-v1", - "inputs": [ - { - "name": "per_consumer_recompute_cost", - "value": 4.0 - }, - { - "name": "consumer_count", - "value": 1.0 - } - ] - }, - "selected_cost": { - "value": 5.0, - "unit": "RelativeStructuralUnits", - "source": "Modeled", - "baseline": { - "kind": "PreAsapRecomputation" - }, - "delta": -1.0, - "benefit_ratio": -0.25, - "model_version": "dag_export-structural-cost-v1" - }, - "benefit": { - "value": -1.0, - "unit": "RelativeStructuralUnits", - "source": "Modeled", - "baseline": { - "kind": "PreAsapRecomputation" - }, - "benefit_ratio": -0.25, - "model_version": "dag_export-structural-cost-v1" + "workload_node_id": 13, + "hash": 4243737280010465780, + "notes": [ + { + "kind": "SketchApproximation", + "reason": "count realizes as a Cms sketch — one of summary_candidates' alternatives for this intent (asap_aware_mapping::replacement::implementations_for_with); count realizes as a CountSketch sketch — one of summary_candidates' alternatives for this intent (asap_aware_mapping::replacement::implementations_for_with)" } - } + ] }, { "id": 4, - "kind": "SummaryEstimate", - "label": "SummaryEstimate(PointCount { key: SampleValue, value: None })", - "detail": { - "query": "PointCount { key: SampleValue, value: None }" - }, - "schema": { - "fields": [ - { - "dtype": "Plain(Utf8)", - "name": "service", - "nullable": false - }, - { - "dtype": "Plain(Int64)", - "name": "count(*)", - "nullable": false - } - ], - "time_index": null - }, - "children": [ - 3 - ], - "workload_node_id": 18, - "decision": { - "id": 5, - "strategy": "SketchAlgorithmStrategy", - "rationale": "count realizes as a Cms sketch", - "rank": 0, - "cost": 5.0, - "role": "replacement_root", - "baseline_cost": { - "value": 4.0, - "unit": "RelativeStructuralUnits", - "source": "Modeled", - "model_version": "dag_export-structural-cost-v1", - "inputs": [ - { - "name": "per_consumer_recompute_cost", - "value": 4.0 - }, - { - "name": "consumer_count", - "value": 1.0 - } - ] - }, - "selected_cost": { - "value": 5.0, - "unit": "RelativeStructuralUnits", - "source": "Modeled", - "baseline": { - "kind": "PreAsapRecomputation" - }, - "delta": -1.0, - "benefit_ratio": -0.25, - "model_version": "dag_export-structural-cost-v1" - }, - "benefit": { - "value": -1.0, - "unit": "RelativeStructuralUnits", - "source": "Modeled", - "baseline": { - "kind": "PreAsapRecomputation" - }, - "benefit_ratio": -0.25, - "model_version": "dag_export-structural-cost-v1" - } - } - }, - { - "id": 5, "kind": "Project", "label": "Project(2 cols)", "detail": { @@ -6133,62 +1158,14 @@ ] }, "children": [ - 4 + 3 ], - "workload_node_id": 19, + "workload_node_id": 14, "hash": 16310199685311002920 } ], - "root": 5 - }, - "workload_cost": { - "baseline_cost": { - "value": 4.0, - "unit": "RelativeStructuralUnits", - "source": "Modeled", - "model_version": "dag_export-structural-cost-v1" - }, - "selected_cost": { - "value": 5.0, - "unit": "RelativeStructuralUnits", - "source": "Modeled", - "model_version": "dag_export-structural-cost-v1" - }, - "benefit": { - "value": -1.0, - "unit": "RelativeStructuralUnits", - "source": "Modeled", - "baseline": { - "kind": "PreAsapRecomputation" - }, - "benefit_ratio": -0.25, - "model_version": "dag_export-workload-cost-v1" - } + "root": 4 } } - ], - "workload_cost": { - "baseline_cost": { - "value": 20.0, - "unit": "RelativeStructuralUnits", - "source": "Modeled", - "model_version": "dag_export-structural-cost-v1" - }, - "selected_cost": { - "value": 25.0, - "unit": "RelativeStructuralUnits", - "source": "Modeled", - "model_version": "dag_export-structural-cost-v1" - }, - "benefit": { - "value": -5.0, - "unit": "RelativeStructuralUnits", - "source": "Modeled", - "baseline": { - "kind": "PreAsapRecomputation" - }, - "benefit_ratio": -0.25, - "model_version": "dag_export-workload-cost-v1" - } - } + ] } diff --git a/tools/dag-viewer/generate-sample.sh b/tools/dag-viewer/generate-sample.sh index e916cba5..60cd0a8e 100755 --- a/tools/dag-viewer/generate-sample.sh +++ b/tools/dag-viewer/generate-sample.sh @@ -5,10 +5,10 @@ set -euo pipefail cd "$(dirname "${BASH_SOURCE[0]}")/../.." -# --epsilon asks for an approximate accuracy target instead of the default -# Exact, so SketchAlgorithmStrategy actually has a sketch alternative to -# report — without it, no query below would ever pick up a `notes` badge -# (see crates/devtools/src/bin/dag_export.rs's own `--epsilon` doc comment). +# This checked-in sample intentionally omits deployment-owned physical +# evidence. The exporter therefore emits the raw DAG only; costed post-ASAP +# examples must pass a complete --planner-cost-json document and never fall +# back to structural node counts. cargo run -p asap-devtools --bin dag_export -- \ --post-asap --progress \ --epsilon 0.01 \ From b18f708eeacf017be0a9b440835af0e5d97a924e Mon Sep 17 00:00:00 2001 From: zz_y Date: Wed, 2 Sep 2026 20:54:26 -0600 Subject: [PATCH 15/15] test(export): bind bounded operator evidence --- crates/devtools/src/bin/dag_export.rs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/crates/devtools/src/bin/dag_export.rs b/crates/devtools/src/bin/dag_export.rs index 1f5784c0..dcbbc56a 100644 --- a/crates/devtools/src/bin/dag_export.rs +++ b/crates/devtools/src/bin/dag_export.rs @@ -1482,6 +1482,8 @@ mod tests { key_bytes: None, aggregate_value_bytes: None, k: None, + topk_output_offset: None, + limit_rows_consumed: None, hash_join_build_side: None, promql: None, }, @@ -1496,6 +1498,8 @@ mod tests { key_bytes: Some(8), aggregate_value_bytes: Some(8), k: None, + topk_output_offset: None, + limit_rows_consumed: None, hash_join_build_side: None, promql: None, }, @@ -1531,6 +1535,8 @@ mod tests { key_bytes: None, aggregate_value_bytes: None, k: None, + topk_output_offset: None, + limit_rows_consumed: None, hash_join_build_side: None, promql: None, };